<?xml version="1.0" encoding="utf-8" ?>
<otrs_package version="1.1">
    <Name>CodePolicy</Name>
    <Version>11.0.3</Version>
    <Vendor>Rother OSS GmbH</Vendor>
    <URL>https://otobo.io/</URL>
    <License>GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007</License>
    <ChangeLog Date="2026-10-29 11:11:15" Version="11.0.3">Added eslint (#129), improved output coloring (#140); change handling of package markers (#134), several smaller improvements and tidying.</ChangeLog>
    <ChangeLog Date="2025-11-11 15:46:48" Version="11.0.2">Fix support for ESLint (#24), set url only for specific vendors (us #116), allow empty xml files (#122), enforce Location in sopm file list to be unique (#123), check used perl versions (#125), small sopm definition improvement (#126). Various improvements and changes.</ChangeLog>
    <ChangeLog Date="2023-03-30 12:49:00" Version="11.0.1">- Issue #114: do not filter out Test2::Tools::Spec
- Issue #112: Acme modules are just for fun
- Issue #109: prohibit $DB::single in production code
- Issue #66: there is no WebApp in OTOBO
- Issue #106: accept object manager creation
- Issue #104: eliminate TidyAll::Plugin::OTOBO::Perl::Dumper
- Issue #102: prohibit usage of the pragma 'vars'
- Issue #99: activate Variables::RequireInitializationForLocalVars
- Issue #97: activate Modules::ProhibitConditionalUseStatements
- Issue #95: activate Subroutines::ProhibitAmpersandSigils
- Issue #91: enable Perl::Critic policies
- Issue #92: add PUTDATA, POSTDATA, PATCHDATE to whitelist
- Issue #89: activate BuiltinFunctions::ProhibitStringySplit
- Issue #86: add 'iCalendar' to the white list</ChangeLog>
    <Description Lang="en">OTOBO code quality checks.</Description>
    <Description Lang="hu">OTOBO kódminőség ellenőrzések.</Description>
    <Framework>11.0.x</Framework>
    <PackageIsDownloadable></PackageIsDownloadable>
    <ModuleRequired Version="0.56">Code::TidyAll</ModuleRequired>
    <ModuleRequired Version="1.140">Perl::Critic</ModuleRequired>
    <BuildCommitID>5a39c5954078044ff6e5896b9361bb6fbbaae244</BuildCommitID>
    <BuildDate>2026-10-29 11:11:19</BuildDate>
    <BuildHost>opms.rother-oss.com</BuildHost>
    <Filelist>
        <File Location="bin/otobo.CodePolicy.pl" Permission="770" Encode="Base64">IyEvdXNyL2Jpbi9lbnYgcGVybAojIC0tCiMgT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgojIC0tCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KIyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNSBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdjUuMjQ7CnVzZSB1dGY4Owp1c2Ugb3BlbiBJTyA9PiAnOmVuY29kaW5nKFVURi04KSc7Cgp1c2UgRmlsZTo6QmFzZW5hbWUgcXcoZGlybmFtZSk7CnVzZSBGaW5kQmluICAgICAgICBxdygkUmVhbEJpbik7CnVzZSBsaWIgZGlybmFtZSgkUmVhbEJpbik7CnVzZSBsaWIgZGlybmFtZSgkUmVhbEJpbikgLiAnL0tlcm5lbCc7ICAgICMgRmluZCBUaWR5QWxsCnVzZSBsaWIgZGlybmFtZSgkUmVhbEJpbikgLiAnL0tlcm5lbC9jcGFuLWxpYic7CgojIGNvcmUgbW9kdWxlcwp1c2UgQ3dkOwp1c2UgRmlsZTo6QmFzZW5hbWU7CnVzZSBGaWxlOjpTcGVjOwp1c2UgR2V0b3B0OjpMb25nOwp1c2UgRmlsZTo6RmluZDsKdXNlIEZpbGU6OlBhdGggcXcoKTsKCiMgQ1BBTiBtb2R1bGVzCnVzZSBDb2RlOjpUaWR5QWxsOwp1c2UgSVBDOjpTeXN0ZW06OlNpbXBsZSBxdyhjYXB0dXJleCk7CgojIE9UT0JPIG1vZHVsZXMKdXNlIFRpZHlBbGw6Ok9UT0JPOwoKIyBhdm9pZCBtYW5hZ2xpbmcgb2Ygb3V0cHV0ClNURE9VVC0+YXV0b2ZsdXNoKCk7CgpteSAoICRWZXJib3NlLCAkRGlyZWN0b3J5LCAkRmlsZSwgJE1vZGUsICRDYWNoZWQsICRBbGwsICRIZWxwLCAkUHJvY2Vzc2VzLCBARmlsZUxpc3QgKTsKbXkgJFBsdWdpbnMgPSBbXTsKR2V0T3B0aW9ucygKICAgICd2ZXJib3NlJyAgICAgPT4gXCRWZXJib3NlLAogICAgJ2FsbCcgICAgICAgICA9PiBcJEFsbCwKICAgICdjYWNoZWQnICAgICAgPT4gXCRDYWNoZWQsCiAgICAnZGlyZWN0b3J5PXMnID0+IFwkRGlyZWN0b3J5LAogICAgJ2ZpbGU9cycgICAgICA9PiBcJEZpbGUsCiAgICAnbW9kZT1zJyAgICAgID0+IFwkTW9kZSwKICAgICdoZWxwJyAgICAgICAgPT4gXCRIZWxwLAogICAgJ3Byb2Nlc3Nlcz1zJyA9PiBcJFByb2Nlc3NlcywKICAgICdwbHVnaW5zPXNAJyAgPT4gXCRQbHVnaW5zLAogICAgJ2xpc3Q9c3sxLH0nICA9PiBcQEZpbGVMaXN0LAopOwoKaWYgKCRIZWxwKSB7CiAgICBwcmludCA8PCJFTkRfTVNHIjsKVXNhZ2U6IE9UT0JPQ29kZVBvbGljeS9iaW4vb3RvYm8uQ29kZVBvbGljeS5wbCBbb3B0aW9uc10KCiAgICBQZXJmb3JtcyBPVE9CTyBjb2RlIHBvbGljeSBjaGVja3MuIFJ1biB0aGlzIHNjcmlwdCBmcm9tIHRoZSB0b3BsZXZlbCBkaXJlY3RvcnkKICAgIG9mIHlvdXIgbW9kdWxlLiBCeSBkZWZhdWx0IGl0IHdpbGwgb25seSBwcm9jZXNzIGZpbGVzIHdoaWNoIGFyZSBzdGFnZWQgZm9yCiAgICBnaXQgY29tbWl0LiBVc2UgLS1hbGwgb3IgLS1kaXJlY3RvcnkgdG8gY2hlY2sgYWxsIGZpbGVzIG9yIGp1c3Qgb25lIGRpcmVjdG9yeQogICAgaW5zdGVhZC4KCk9wdGlvbnM6CiAgICAtYSwgLS1hbGwgICAgICAgICAgIENoZWNrIGFsbCBmaWxlcyByZWN1cnNpdmVseQogICAgLWQsIC0tZGlyZWN0b3J5ICAgICBDaGVjayBvbmx5IHN1YmRpcmVjdG9yeQogICAgLWMsIC0tY2FjaGVkICAgICAgICBDaGVjayBvbmx5IGNhY2hlZCAoc3RhZ2VkIGZpbGVzIGluIGdpdCBkaXJlY3RvcnkpCiAgICAtZiwgLS1maWxlICAgICAgICAgIENoZWNrIG9ubHkgb25lIGZpbGUKICAgIC1sLCAtLWxpc3QgICAgICAgICAgQ2hlY2sgc2V2ZXJhbCBmaWxlcwogICAgLW0sIC0tbW9kZSAgICAgICAgICBVc2UgY3VzdG9tIENvZGU6OlRpZHlBbGwgbW9kZSAoZGVmYXVsdDogY2xpKQogICAgLXYsIC0tdmVyYm9zZSAgICAgICBBY3RpdmF0ZSBkaWFnbm9zdGljcwogICAgLXAsIC0tcHJvY2Vzc2VzICAgICBUaGUgbnVtYmVyIG9mIHByb2Nlc3NlcyB0byB1c2UgKGRlZmF1bHQ6IGVudiB2YXIgT1RPQk9DT0RFUE9MSUNZX1BST0NFU1NFUyBpZiBzZXQsIG90aGVyd2lzZSAiNiIpCiAgICAtLXBsdWdpbnMgICAgICAgICAgIFJlc3RyaWN0IHRvIHNwZWNpZmljIHBsdWdpbiB0aGF0IHNob3VsZCBiZSB1c2VkLiBQYXNzIHRoZSBvcHRpb24gbXVsdGlwbGUgdGltZSBmb3IgbXVsdGlwbGUgcGx1Z2lucy4KICAgIC1oLCAtLWhlbHAgICAgICAgICAgU2hvdyB0aGlzIHVzYWdlIG1lc3NhZ2UKCkV4YW1wbGUgdXNhZ2U6CgogICAgIyBydW4gUGVybDo6Q3JpdGljIG9uIGEgc291cmNlIHRyZWUKICAgIC4uL0NvZGVQb2xpY3kvYmluL290b2JvLkNvZGVQb2xpY3kucGwgLS1wbHVnaW5zICtUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpQZXJsQ3JpdGljIC1hIC0tcHJvY2Vzc2VzIDEgMT5jcml0aWMub3V0CgogICAgIyBydW4gb25seSB0aGUgc3ludGF4IGNoZWNrIG9uIGNoYW5nZWQgZmlsZXMKICAgIC4uL0NvZGVQb2xpY3kvYmluL290b2JvLkNvZGVQb2xpY3kucGwgLS1wbHVnaW5zICtUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpTeW50YXhDaGVjawoKICAgICMgb25seSB1cGRhdGUgdGhlIGNvcHlyaWdodCB5ZWFyIGZvciBhbGwgZmlsZXMKICAgIC4uL0NvZGVQb2xpY3kvYmluL290b2JvLkNvZGVQb2xpY3kucGwgLS1wbHVnaW5zICtUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpMZWdhbDo6UmVwbGFjZUNvcHlyaWdodCAtYQoKRU5EX01TRwoKICAgIGV4aXQgMDsKfQoKbXkgJENvbmZpZ3VyYXRpb25GaWxlID0gZGlybmFtZSgkMCkgLiAnLy4uL0tlcm5lbC9UaWR5QWxsL3RpZHlhbGxyYyc7CgpteSAkUm9vdERpciA9IGdldGN3ZCgpOwoKbXkgJFRpZHlBbGwgPSBUaWR5QWxsOjpPVE9CTy0+bmV3X2Zyb21fY29uZl9maWxlKAogICAgJENvbmZpZ3VyYXRpb25GaWxlLAogICAgY2hlY2tfb25seSAgICAgICA9PiAwLAogICAgbW9kZSAgICAgICAgICAgICA9PiAkTW9kZSAvLyAnY2xpJywKICAgIHJvb3RfZGlyICAgICAgICAgPT4gJFJvb3REaXIsCiAgICBkYXRhX2RpciAgICAgICAgID0+IEZpbGU6OlNwZWMtPnRtcGRpcigpLAogICAgdmVyYm9zZSAgICAgICAgICA9PiAkVmVyYm9zZSA/IDEgOiAwLAogICAgc2VsZWN0ZWRfcGx1Z2lucyA9PiAkUGx1Z2lucywKKTsKCiRUaWR5QWxsLT5EZXRlcm1pbmVGcmFtZXdvcmtWZXJzaW9uRnJvbURpcmVjdG9yeSgpOwokVGlkeUFsbC0+R2V0RmlsZUxpc3RGcm9tRGlyZWN0b3J5KCk7CgpteSBARmlsZXM7CgppZiAoJEFsbCkgewoKICAgICMgRG9uJ3QgdXNlIFRpZHlBbGw6OnByb2Nlc3NfYWxsKCkgb3IgVGlkeUFsbDo6ZmluZF9tYXRjaGVkX2ZpbGVzKCkgYXMgaXQgaXMgdG9vIHNsb3cgb24gbGFyZ2UgY29kZSBiYXNlcy4KICAgIEBGaWxlcyA9IEBUaWR5QWxsOjpPVE9CTzo6RmlsZUxpc3Q7CiAgICBARmlsZXMgPSAkVGlkeUFsbC0+RmlsdGVyTWF0Y2hlZEZpbGVzKCBGaWxlcyA9PiBcQEZpbGVzICk7CiAgICBARmlsZXMgPSBtYXAgeyBGaWxlOjpTcGVjLT5jYXRmaWxlKCAkUm9vdERpciwgJF8gKSB9IEBGaWxlczsKfQplbHNpZiAoIGRlZmluZWQgJERpcmVjdG9yeSAmJiBsZW5ndGggJERpcmVjdG9yeSApIHsKICAgIEBGaWxlcyA9ICRUaWR5QWxsLT5GaW5kRmlsZXNJbkRpcmVjdG9yeSggRGlyZWN0b3J5ID0+IEZpbGU6OlNwZWMtPmNhdGZpbGUoICRSb290RGlyLCAkRGlyZWN0b3J5ICkgKTsKICAgIEBGaWxlcyA9ICRUaWR5QWxsLT5GaWx0ZXJNYXRjaGVkRmlsZXMoIEZpbGVzID0+IFxARmlsZXMgKTsKICAgIEBGaWxlcyA9IG1hcCB7IEZpbGU6OlNwZWMtPmNhdGZpbGUoICRSb290RGlyLCAkXyApIH0gQEZpbGVzOwp9CmVsc2lmICggZGVmaW5lZCAkRmlsZSAmJiBsZW5ndGggJEZpbGUgKSB7CiAgICBARmlsZXMgPSAoIEZpbGU6OlNwZWMtPmNhdGZpbGUoICRSb290RGlyLCAkRmlsZSApICk7Cn0KZWxzaWYgKEBGaWxlTGlzdCkgewogICAgQEZpbGVzID0gbWFwIHsgRmlsZTo6U3BlYy0+Y2F0ZmlsZSggJFJvb3REaXIsICRfICkgfSBARmlsZUxpc3Q7Cn0KZWxzaWYgKCBkZWZpbmVkICRDYWNoZWQgJiYgbGVuZ3RoICRDYWNoZWQgKSB7CiAgICBteSBAU3RhZ2VkRmlsZXMgPSBgZ2l0IGRpZmYgLS1uYW1lLW9ubHkgLS1jYWNoZWRgOwogICAgZm9yIG15ICRTdGFnZWRGaWxlIChAU3RhZ2VkRmlsZXMpIHsKICAgICAgICBjaG9tcCAkU3RhZ2VkRmlsZTsKICAgICAgICBwdXNoIEBGaWxlcywgKCBGaWxlOjpTcGVjLT5jYXRmaWxlKCAkUm9vdERpciwgJFN0YWdlZEZpbGUgKSApOwogICAgfQp9CmVsc2UgewogICAgbXkgJE91dHB1dCA9IGNhcHR1cmV4KCAnZ2l0JywgInN0YXR1cyIsICItLXBvcmNlbGFpbiIgKTsKCiAgICAjIEZldGNoIGFsbCBjaGFuZ2VkIGZpbGVzLCBzdGFnZWQgYW5kIHVuc3RhZ2VkCiAgICBteSBAQ2hhbmdlZEZpbGVzID0gZ3JlcCB7IC1mICYmICEtbCB9ICggJE91dHB1dCA9fiAvXlxzKltNQV0rXHMrKC4qKS9nbSApOwogICAgcHVzaCBAQ2hhbmdlZEZpbGVzLCBncmVwIHsgLWYgJiYgIS1sIH0gKCAkT3V0cHV0ID1+IC9eXHMqUk0/K1xzKyguKj8pXHMrLT5ccysoLiopL2dtICk7CiAgICBmb3IgbXkgJENoYW5nZWRGaWxlIChAQ2hhbmdlZEZpbGVzKSB7CiAgICAgICAgY2hvbXAgJENoYW5nZWRGaWxlOwogICAgICAgIHB1c2ggQEZpbGVzLCAoIEZpbGU6OlNwZWMtPmNhdGZpbGUoICRSb290RGlyLCAkQ2hhbmdlZEZpbGUgKSApOwogICAgfQoKICAgICMgQWx3YXlzIGluY2x1ZGUgYWxsIFNPUE0gZmlsZXMgdG8gdmVyaWZ5IHRoZSBmaWxlIGxpc3QuCiAgICBmb3IgbXkgJFNPUE1GaWxlICggbWFwIHsgRmlsZTo6U3BlYy0+YWJzMnJlbCggJF8sICRSb290RGlyICkgfSBnbG9iKCIkUm9vdERpci8qLnNvcG0iKSApIHsKICAgICAgICBpZiAoICFncmVwIHsgJF8gZXEgJFNPUE1GaWxlIH0gQENoYW5nZWRGaWxlcyApIHsKICAgICAgICAgICAgcHVzaCBARmlsZXMsICggRmlsZTo6U3BlYy0+Y2F0ZmlsZSggJFJvb3REaXIsICRTT1BNRmlsZSApICk7CiAgICAgICAgfQogICAgfQp9CgojIFNhZmVndWFyZDogaWdub3JlIG5vbi1yZWd1bGFyIGZpbGVzIGFuZCBzeW1saW5rcyAoY2F1c2VzIFRpZHlBbGwgZXJyb3JzKS4KQEZpbGVzID0gZ3JlcCB7IC1mICYmICEtbCB9IEBGaWxlczsKCiMgc29ydCB0aGUgZmlsZXMgYWxwaGFiZXRpY2FsbHksIGJ1dCBiZSBhd2FyZSB0aGUgcGFyYWxsZWwgcHJvY2Vzc2luZwojIHdpbGwgbWVzcyB1cCB0aGUgb3JkZXJpbmcgYWdhaW4uCkBGaWxlcyA9IHNvcnQgQEZpbGVzOwoKbXkgQEdsb2JhbFJlc3VsdHMgPSAkVGlkeUFsbC0+UHJvY2Vzc1BhdGhzUGFyYWxsZWwoCiAgICBQcm9jZXNzZXMgPT4gJFByb2Nlc3NlcywKICAgIEZpbGVQYXRocyA9PiBcQEZpbGVzLAopOwoKJFRpZHlBbGwtPkhhbmRsZVJlc3VsdHMoCiAgICBSZXN1bHRzID0+IFxAR2xvYmFsUmVzdWx0cwopOwo=</File>
        <File Location="Kernel/cpan-lib/Locale/PO.pm" Permission="660" Encode="Base64">cGFja2FnZSBMb2NhbGU6OlBPOwp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cm91ciAkVkVSU0lPTiA9ICcwLjI3JzsKCnVzZSBDYXJwOwoKc3ViIG5ldyB7CiAgICBteSAkdGhpcyAgICA9IHNoaWZ0OwogICAgbXkgJW9wdGlvbnMgPSBAXzsKICAgIG15ICRjbGFzcyAgID0gcmVmKCR0aGlzKSB8fCAkdGhpczsKICAgIG15ICRzZWxmICAgID0ge307CiAgICBibGVzcyAkc2VsZiwgJGNsYXNzOwogICAgJHNlbGYtPl9mbGFncyhbXSk7CiAgICAkc2VsZi0+ZnV6enlfbXNnaWQoJG9wdGlvbnN7Jy1mdXp6eV9tc2dpZCd9KSBpZiBkZWZpbmVkKCRvcHRpb25zeyctZnV6enlfbXNnaWQnfSk7CiAgICAkc2VsZi0+ZnV6enlfbXNnaWRfcGx1cmFsKCRvcHRpb25zeyctZnV6enlfbXNnaWRfcGx1cmFsJ30pCiAgICAgICAgaWYgZGVmaW5lZCgkb3B0aW9uc3snLWZ1enp5X21zZ2lkX3BsdXJhbCd9KTsKICAgICRzZWxmLT5tc2dpZCgkb3B0aW9uc3snLW1zZ2lkJ30pIGlmIGRlZmluZWQoJG9wdGlvbnN7Jy1tc2dpZCd9KTsKICAgICRzZWxmLT5tc2dpZF9wbHVyYWwoJG9wdGlvbnN7Jy1tc2dpZF9wbHVyYWwnfSkKICAgICAgICBpZiBkZWZpbmVkKCRvcHRpb25zeyctbXNnaWRfcGx1cmFsJ30pOwogICAgJHNlbGYtPm1zZ3N0cigkb3B0aW9uc3snLW1zZ3N0cid9KSBpZiBkZWZpbmVkKCRvcHRpb25zeyctbXNnc3RyJ30pOwogICAgJHNlbGYtPm1zZ3N0cl9uKCRvcHRpb25zeyctbXNnc3RyX24nfSkKICAgICAgICBpZiBkZWZpbmVkKCRvcHRpb25zeyctbXNnc3RyX24nfSk7CiAgICAkc2VsZi0+bXNnY3R4dCgkb3B0aW9uc3snLW1zZ2N0eHQnfSkgaWYgZGVmaW5lZCgkb3B0aW9uc3snLW1zZ2N0eHQnfSk7CiAgICAkc2VsZi0+ZnV6enlfbXNnY3R4dCgkb3B0aW9uc3snLWZ1enp5X21zZ2N0eHQnfSkKICAgICAgICBpZiBkZWZpbmVkKCRvcHRpb25zeyctZnV6enlfbXNnY3R4dCd9KTsKICAgICRzZWxmLT5jb21tZW50KCRvcHRpb25zeyctY29tbWVudCd9KSBpZiBkZWZpbmVkKCRvcHRpb25zeyctY29tbWVudCd9KTsKICAgICRzZWxmLT5mdXp6eSgkb3B0aW9uc3snLWZ1enp5J30pICAgICBpZiBkZWZpbmVkKCRvcHRpb25zeyctZnV6enknfSk7CiAgICAkc2VsZi0+YXV0b21hdGljKCRvcHRpb25zeyctYXV0b21hdGljJ30pCiAgICAgICAgaWYgZGVmaW5lZCgkb3B0aW9uc3snLWF1dG9tYXRpYyd9KTsKICAgICRzZWxmLT5yZWZlcmVuY2UoJG9wdGlvbnN7Jy1yZWZlcmVuY2UnfSkKICAgICAgICBpZiBkZWZpbmVkKCRvcHRpb25zeyctcmVmZXJlbmNlJ30pOwogICAgJHNlbGYtPmNfZm9ybWF0KDEpIGlmIGRlZmluZWQoJG9wdGlvbnN7Jy1jLWZvcm1hdCd9KTsKICAgICRzZWxmLT5jX2Zvcm1hdCgxKSBpZiBkZWZpbmVkKCRvcHRpb25zeyctY19mb3JtYXQnfSk7CiAgICAkc2VsZi0+Y19mb3JtYXQoMCkgaWYgZGVmaW5lZCgkb3B0aW9uc3snLW5vLWMtZm9ybWF0J30pOwogICAgJHNlbGYtPmNfZm9ybWF0KDApIGlmIGRlZmluZWQoJG9wdGlvbnN7Jy1ub19jX2Zvcm1hdCd9KTsKICAgICRzZWxmLT5sb2FkZWRfbGluZV9udW1iZXIoJG9wdGlvbnN7Jy1sb2FkZWRfbGluZV9udW1iZXInfSkKICAgICAgICBpZiBkZWZpbmVkKCRvcHRpb25zeyctbG9hZGVkX2xpbmVfbnVtYmVyJ30pOwogICAgcmV0dXJuICRzZWxmOwp9CgpzdWIgZnV6enlfbXNnY3R4dCB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgQF8gPyAkc2VsZi0+eydmdXp6eV9tc2djdHh0J30gPSAkc2VsZi0+cXVvdGUoc2hpZnQpIDogJHNlbGYtPnsnZnV6enlfbXNnY3R4dCd9Owp9CgpzdWIgZnV6enlfbXNnaWQgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgIEBfID8gJHNlbGYtPnsnZnV6enlfbXNnaWQnfSA9ICRzZWxmLT5xdW90ZShzaGlmdCkgOiAkc2VsZi0+eydmdXp6eV9tc2dpZCd9Owp9CgpzdWIgZnV6enlfbXNnaWRfcGx1cmFsIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICBAXwogICAgICAgID8gJHNlbGYtPnsnZnV6enlfbXNnaWRfcGx1cmFsJ30gPSAkc2VsZi0+cXVvdGUoc2hpZnQpCiAgICAgICAgOiAkc2VsZi0+eydmdXp6eV9tc2dpZF9wbHVyYWwnfTsKfQoKc3ViIG1zZ2N0eHQgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgIEBfID8gJHNlbGYtPnsnbXNnY3R4dCd9ID0gJHNlbGYtPnF1b3RlKHNoaWZ0KSA6ICRzZWxmLT57J21zZ2N0eHQnfTsKfQoKc3ViIG1zZ2lkIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICBAXyA/ICRzZWxmLT57J21zZ2lkJ30gPSAkc2VsZi0+cXVvdGUoc2hpZnQpIDogJHNlbGYtPnsnbXNnaWQnfTsKfQoKc3ViIG1zZ2lkX3BsdXJhbCB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgQF8KICAgICAgICA/ICRzZWxmLT57J21zZ2lkX3BsdXJhbCd9ID0gJHNlbGYtPnF1b3RlKHNoaWZ0KQogICAgICAgIDogJHNlbGYtPnsnbXNnaWRfcGx1cmFsJ307Cn0KCnN1YiBtc2dzdHIgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgIEBfID8gJHNlbGYtPnsnbXNnc3RyJ30gPSAkc2VsZi0+cXVvdGUoc2hpZnQpIDogJHNlbGYtPnsnbXNnc3RyJ307Cn0KCnN1YiBtc2dzdHJfbiB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgaWYgKEBfKSB7CiAgICAgICAgbXkgJGhhc2hyZWYgPSBzaGlmdDsKCiAgICAgICAgIyBjaGVjayB0aGF0IHdlIGhhdmUgYSBoYXNocmVmLgogICAgICAgIGNyb2FrICdBcmd1bWVudCB0byBtc2dzdHJfbiBtdXN0IGJlIGEgaGFzaHJlZjogeyBuID0+ICJzdHJpbmcgbiIsIC4uLiB9LicKICAgICAgICAgICAgdW5sZXNzIHJlZigkaGFzaHJlZikgZXEgJ0hBU0gnOwoKICAgICAgICAjIENoZWNrIHRoYXQgdGhlIGtleXMgYXJlIGFsbCBudW1iZXJzLgogICAgICAgIGNyb2FrICdLZXlzIHRvIG1zZ3N0cl9uIGhhc2hyZWYgbXVzdCBiZSBudW1iZXJzJwogICAgICAgICAgICBpZiBncmVwIHttL1xEL30ga2V5cyAlJGhhc2hyZWY7CgogICAgICAgICMgUXVvdGUgYWxsIHRoZSB2YWx1ZXMgaW4gdGhlIGhhc2hyZWYuCiAgICAgICAgJHNlbGYtPnsnbXNnc3RyX24nfXskX30gPSAkc2VsZi0+cXVvdGUoJCRoYXNocmVmeyRffSkgZm9yIGtleXMgJSRoYXNocmVmOwoKICAgIH0KCiAgICByZXR1cm4gJHNlbGYtPnsnbXNnc3RyX24nfTsKfQoKc3ViIGNvbW1lbnQgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgIEBfID8gJHNlbGYtPnsnY29tbWVudCd9ID0gc2hpZnQgOiAkc2VsZi0+eydjb21tZW50J307Cn0KCnN1YiBhdXRvbWF0aWMgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgIEBfID8gJHNlbGYtPnsnYXV0b21hdGljJ30gPSBzaGlmdCA6ICRzZWxmLT57J2F1dG9tYXRpYyd9Owp9CgpzdWIgcmVmZXJlbmNlIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICBAXyA/ICRzZWxmLT57J3JlZmVyZW5jZSd9ID0gc2hpZnQgOiAkc2VsZi0+eydyZWZlcmVuY2UnfTsKfQoKc3ViIG9ic29sZXRlIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICBAXyA/ICRzZWxmLT57J29ic29sZXRlJ30gPSBzaGlmdCA6ICRzZWxmLT57J29ic29sZXRlJ307Cn0KCnN1YiBmdXp6eSB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwoKICAgIGlmIChAXykgewogICAgICAgIG15ICR2YWx1ZSA9IHNoaWZ0OwogICAgICAgICR2YWx1ZSA/ICRzZWxmLT5hZGRfZmxhZygnZnV6enknKSA6ICRzZWxmLT5yZW1vdmVfZmxhZygnZnV6enknKTsKICAgIH0KCiAgICByZXR1cm4gJHNlbGYtPmhhc19mbGFnKCdmdXp6eScpOwp9CgpzdWIgY19mb3JtYXQgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICByZXR1cm4gJHNlbGYtPl90cmlfdmFsdWVfZmxhZygnYy1mb3JtYXQnLCBAXyk7Cn0KCnN1YiBwaHBfZm9ybWF0IHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgcmV0dXJuICRzZWxmLT5fdHJpX3ZhbHVlX2ZsYWcoJ3BocC1mb3JtYXQnLCBAXyk7Cn0KCnN1YiBfZmxhZ3MgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgIEBfID8gJHNlbGYtPnsnX2ZsYWdzJ30gPSBzaGlmdCA6ICRzZWxmLT57J19mbGFncyd9Owp9CgpzdWIgX3RyaV92YWx1ZV9mbGFnIHsKICAgIG15ICRzZWxmICAgICAgPSBzaGlmdDsKICAgIG15ICRmbGFnX25hbWUgPSBzaGlmdDsKICAgIGlmIChAXykgeyAgICAjIHNldCBvciBjbGVhciB0aGUgZmxhZ3MKICAgICAgICBteSAkdmFsdWUgPSBzaGlmdDsKICAgICAgICBpZiAoIWRlZmluZWQoJHZhbHVlKSB8fCAkdmFsdWUgZXEgIiIpIHsKICAgICAgICAgICAgJHNlbGYtPnJlbW92ZV9mbGFnKCIkZmxhZ19uYW1lIik7CiAgICAgICAgICAgICRzZWxmLT5yZW1vdmVfZmxhZygibm8tJGZsYWdfbmFtZSIpOwogICAgICAgICAgICByZXR1cm4gdW5kZWY7CiAgICAgICAgfQogICAgICAgIGVsc2lmICgkdmFsdWUpIHsKICAgICAgICAgICAgJHNlbGYtPmFkZF9mbGFnKCIkZmxhZ19uYW1lIik7CiAgICAgICAgICAgICRzZWxmLT5yZW1vdmVfZmxhZygibm8tJGZsYWdfbmFtZSIpOwogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRzZWxmLT5hZGRfZmxhZygibm8tJGZsYWdfbmFtZSIpOwogICAgICAgICAgICAkc2VsZi0+cmVtb3ZlX2ZsYWcoIiRmbGFnX25hbWUiKTsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7ICAgICMgY2hlY2sgdGhlIGZsYWdzCiAgICAgICAgcmV0dXJuIDEgaWYgJHNlbGYtPmhhc19mbGFnKCIkZmxhZ19uYW1lIik7CiAgICAgICAgcmV0dXJuIDAgaWYgJHNlbGYtPmhhc19mbGFnKCJuby0kZmxhZ19uYW1lIik7CiAgICAgICAgcmV0dXJuIHVuZGVmOwogICAgfQp9CgpzdWIgYWRkX2ZsYWcgewogICAgbXkgKCRzZWxmLCAkZmxhZ19uYW1lKSA9IEBfOwogICAgaWYgKCEgJHNlbGYtPmhhc19mbGFnKCRmbGFnX25hbWUpKSB7CiAgICAgICAgcHVzaCBAeyRzZWxmLT5fZmxhZ3N9LCAkZmxhZ19uYW1lOwogICAgfQogICAgcmV0dXJuOwp9CgpzdWIgcmVtb3ZlX2ZsYWcgewogICAgbXkgKCRzZWxmLCAkZmxhZ19uYW1lKSA9IEBfOwogICAgbXkgQG5ld19mbGFnczsKICAgIGZvcmVhY2ggbXkgJGZsYWcgKEB7JHNlbGYtPl9mbGFnc30pIHsKICAgICAgICBwdXNoIEBuZXdfZmxhZ3MsICRmbGFnIHVubGVzcyAkZmxhZyBlcSAkZmxhZ19uYW1lOwogICAgfQogICAgJHNlbGYtPl9mbGFncyhcQG5ld19mbGFncyk7CiAgICByZXR1cm47Cn0KCnN1YiBoYXNfZmxhZyB7CiAgICBteSAoJHNlbGYsICRmbGFnX25hbWUpID0gQF87CiAgICBmb3JlYWNoIG15ICRmbGFnIChAeyRzZWxmLT5fZmxhZ3N9KSB7CiAgICAgICAgcmV0dXJuIDEgaWYgJGZsYWcgZXEgJGZsYWdfbmFtZTsKICAgIH0KICAgIHJldHVybjsKfQoKc3ViIGxvYWRlZF9saW5lX251bWJlciB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgQF8gPyAkc2VsZi0+eydsb2FkZWRfbGluZV9udW1iZXInfSA9IHNoaWZ0IDogJHNlbGYtPnsnbG9hZGVkX2xpbmVfbnVtYmVyJ307Cn0KCnN1YiBfbm9ybWFsaXplX3N0ciB7CiAgICBteSAkc2VsZiAgICAgPSBzaGlmdDsKICAgIG15ICRzdHJpbmcgICA9IHNoaWZ0OwogICAgbXkgJGRlcXVvdGVkID0gJHNlbGYtPmRlcXVvdGUoJHN0cmluZyk7CgogICAgIyBNdWx0aWxpbmU6IHRoaXMgaXNuJ3QgcXVpdGUgcGVyZmVjdCwgYnV0IGZhc3QgYW5kIGVhc3kKICAgIGlmIChkZWZpbmVkICRkZXF1b3RlZCAmJiAkZGVxdW90ZWQgPX4gL1xuLykgewogICAgICAgIG15ICRvdXRwdXQ7CiAgICAgICAgbXkgQGxpbmVzOwogICAgICAgIEBsaW5lcyA9IHNwbGl0KC9cbi8sICRkZXF1b3RlZCwgLTEpOwogICAgICAgIG15ICRsYXN0bGluZSA9IHBvcCBAbGluZXM7ICAgICMgc3BlY2lhbCB0cmVhdG1lbnQgZm9yIHRoaXMgb25lCiAgICAgICAgJG91dHB1dCA9IHFxeyIiXG59IGlmICgkI2xpbmVzICE9IDApOwogICAgICAgIGZvcmVhY2ggKEBsaW5lcykgewogICAgICAgICAgICAkb3V0cHV0IC49ICRzZWxmLT5xdW90ZSgiJF9cbiIpIC4gIlxuIjsKICAgICAgICB9CiAgICAgICAgJG91dHB1dCAuPSAkc2VsZi0+cXVvdGUoJGxhc3RsaW5lKSAuICJcbiIgaWYgJGxhc3RsaW5lIG5lICIiOwogICAgICAgIHJldHVybiAkb3V0cHV0OwogICAgfQogICAgIyBTaW5nbGUgbGluZQogICAgZWxzZSB7CiAgICAgICAgcmV0dXJuICgkc3RyaW5nIHx8ICIiKSAuICJcbiI7CiAgICB9Cn0KCnN1YiBfZnV6enlfbm9ybWFsaXplX3N0ciB7CiAgICBteSAkc2VsZiAgID0gc2hpZnQ7CiAgICBteSAkc3RyaW5nID0gc2hpZnQ7CiAgICBteSAkcHJlZml4ID0gc2hpZnQ7CgogICAgbXkgJG5vcm1hbGl6ZWQgPSAkc2VsZi0+X25vcm1hbGl6ZV9zdHIoJHN0cmluZyk7CgogICAgIyBvbiBuZXdsaW5lcywgc3RhcnQgdGhlbSB3aXRoICIjfCAiIG9yICIjfnwgIgogICAgJG5vcm1hbGl6ZWQgPX4gcy9cbiIvXG4kcHJlZml4Ii9nOwoKICAgIHJldHVybiAkbm9ybWFsaXplZDsKfQoKc3ViIGR1bXAgewogICAgbXkgJHNlbGYgICAgICAgICA9IHNoaWZ0OwogICAgbXkgJG9ic29sZXRlICAgICA9ICRzZWxmLT5vYnNvbGV0ZSA/ICcjfiAnIDogJyc7CiAgICBteSAkZnV6enlfcHJlZml4ID0gJHNlbGYtPm9ic29sZXRlID8gJyN+fCAnIDogJyN8ICc7CiAgICBteSAkZHVtcDsKCiAgICAkZHVtcCA9ICRzZWxmLT5fZHVtcF9tdWx0aV9jb21tZW50KCRzZWxmLT5jb21tZW50LCAiIyAiKQogICAgICAgIGlmICgkc2VsZi0+Y29tbWVudCk7CiAgICAkZHVtcCAuPSAkc2VsZi0+X2R1bXBfbXVsdGlfY29tbWVudCgkc2VsZi0+YXV0b21hdGljLCAiIy4gIikKICAgICAgICBpZiAoJHNlbGYtPmF1dG9tYXRpYyk7CiAgICAkZHVtcCAuPSAkc2VsZi0+X2R1bXBfbXVsdGlfY29tbWVudCgkc2VsZi0+cmVmZXJlbmNlLCAiIzogIikKICAgICAgICBpZiAoJHNlbGYtPnJlZmVyZW5jZSk7CgogICAgbXkgJGZsYWdzID0gJyc7CgogICAgZm9yZWFjaCBteSAkZmxhZyAoQHskc2VsZi0+X2ZsYWdzfSkgewogICAgICAgICRmbGFncyAuPSAiLCAkZmxhZyI7CiAgICB9CgogICAgJGR1bXAgLj0gIiMkZmxhZ3NcbiIKICAgICAgICBpZiBsZW5ndGggJGZsYWdzOwoKICAgICRkdW1wCiAgICAgICAgLj0gIiR7ZnV6enlfcHJlZml4fW1zZ2N0eHQgIgogICAgICAgIC4gJHNlbGYtPl9mdXp6eV9ub3JtYWxpemVfc3RyKCRzZWxmLT5mdXp6eV9tc2djdHh0LCAkZnV6enlfcHJlZml4KQogICAgICAgIGlmICRzZWxmLT5mdXp6eV9tc2djdHh0OwogICAgJGR1bXAKICAgICAgICAuPSAiJHtmdXp6eV9wcmVmaXh9bXNnaWQgIgogICAgICAgIC4gJHNlbGYtPl9mdXp6eV9ub3JtYWxpemVfc3RyKCRzZWxmLT5mdXp6eV9tc2dpZCwgJGZ1enp5X3ByZWZpeCkKICAgICAgICBpZiAkc2VsZi0+ZnV6enlfbXNnaWQ7CiAgICAkZHVtcAogICAgICAgIC49ICIke2Z1enp5X3ByZWZpeH1tc2dpZF9wbHVyYWwgIgogICAgICAgIC4gJHNlbGYtPl9mdXp6eV9ub3JtYWxpemVfc3RyKCRzZWxmLT5mdXp6eV9tc2dpZF9wbHVyYWwsICRmdXp6eV9wcmVmaXgpCiAgICAgICAgaWYgJHNlbGYtPmZ1enp5X21zZ2lkX3BsdXJhbDsKCiAgICAkZHVtcCAuPSAiJHtvYnNvbGV0ZX1tc2djdHh0ICIgLiAkc2VsZi0+X25vcm1hbGl6ZV9zdHIoJHNlbGYtPm1zZ2N0eHQpCiAgICAgICAgaWYgJHNlbGYtPm1zZ2N0eHQ7CiAgICAkZHVtcCAuPSAiJHtvYnNvbGV0ZX1tc2dpZCAiIC4gJHNlbGYtPl9ub3JtYWxpemVfc3RyKCRzZWxmLT5tc2dpZCk7CiAgICAkZHVtcCAuPSAiJHtvYnNvbGV0ZX1tc2dpZF9wbHVyYWwgIiAuICRzZWxmLT5fbm9ybWFsaXplX3N0cigkc2VsZi0+bXNnaWRfcGx1cmFsKQogICAgICAgIGlmICRzZWxmLT5tc2dpZF9wbHVyYWw7CgogICAgJGR1bXAgLj0gIiR7b2Jzb2xldGV9bXNnc3RyICIgLiAkc2VsZi0+X25vcm1hbGl6ZV9zdHIoJHNlbGYtPm1zZ3N0cikgaWYgJHNlbGYtPm1zZ3N0cjsKCiAgICBpZiAobXkgJG1zZ3N0cl9uID0gJHNlbGYtPm1zZ3N0cl9uKSB7CiAgICAgICAgJGR1bXAgLj0gIiR7b2Jzb2xldGV9bXNnc3RyWyRfXSAiIC4gJHNlbGYtPl9ub3JtYWxpemVfc3RyKCQkbXNnc3RyX257JF99KQogICAgICAgICAgICBmb3Igc29ydCB7ICRhIDw9PiAkYiB9IGtleXMgJSRtc2dzdHJfbjsKICAgIH0KCiAgICAkZHVtcCAuPSAiXG4iOwogICAgcmV0dXJuICRkdW1wOwp9CgpzdWIgX2R1bXBfbXVsdGlfY29tbWVudCB7CiAgICBteSAkc2VsZiAgICA9IHNoaWZ0OwogICAgbXkgJGNvbW1lbnQgPSBzaGlmdDsKICAgIG15ICRsZWFkZXIgID0gc2hpZnQ7CiAgICBteSAkY2hvcHBlZCA9ICRsZWFkZXI7CiAgICBjaG9wKCRjaG9wcGVkKTsKICAgIG15ICRyZXN1bHQgPSAkbGVhZGVyIC4gJGNvbW1lbnQ7CiAgICAkcmVzdWx0ID1+IHMvXG4vXG4kbGVhZGVyL2c7CiAgICAkcmVzdWx0ID1+IHMvXiRsZWFkZXIkLyRjaG9wcGVkL2dtOwogICAgJHJlc3VsdCAuPSAiXG4iOwogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCiMgUXVvdGUgYSBzdHJpbmcgcHJvcGVybHkKc3ViIHF1b3RlIHsKICAgIG15ICRzZWxmICAgPSBzaGlmdDsKICAgIG15ICRzdHJpbmcgPSBzaGlmdDsKCiAgICByZXR1cm4gdW5kZWYKICAgICAgICB1bmxlc3MgZGVmaW5lZCAkc3RyaW5nOwoKICAgICRzdHJpbmcgPX4gcy9cXCg/IXQpL1xcXFwvZzsgICAgICAgICAgICMgXHQgaXMgYSB0YWIKICAgICRzdHJpbmcgPX4gcy8iL1xcIi9nOwogICAgJHN0cmluZyA9fiBzL1xuL1xcbi9nOwogICAgcmV0dXJuICJcIiRzdHJpbmdcIiI7Cn0KCnN1YiBkZXF1b3RlIHsKICAgIG15ICRzZWxmICAgPSBzaGlmdDsKICAgIG15ICRzdHJpbmcgPSBzaGlmdDsKCiAgICByZXR1cm4gdW5kZWYKICAgICAgICB1bmxlc3MgZGVmaW5lZCAkc3RyaW5nOwoKICAgICRzdHJpbmcgPX4gcy9eIiguKikiLyQxLzsKICAgICRzdHJpbmcgPX4gcy9cXCIvIi9nOwogICAgJHN0cmluZyA9fiBzLyg/PCEoXFwpKVxcbi9cbi9nOyAgICAgICAgIyBuZXdsaW5lCiAgICAkc3RyaW5nID1+IHMvKD88IShcXCkpXFx7Mn1uL1xcbi9nOyAgICAjIGlubGluZSBuZXdsaW5lCiAgICAkc3RyaW5nID1+IHMvKD88IShcXCkpXFx7M31uL1xcXG4vZzsgICAjIFwgZm9sbG93ZWQgYnkgbmV3bGluZQogICAgJHN0cmluZyA9fiBzL1xcezR9bi9cXFxcbi9nOyAgICAgICAgICAgIyBcIGZvbGxvd2VkIGJ5IGlubGluZSBuZXdsaW5lCiAgICAkc3RyaW5nID1+IHMvXFxcXCg/IW4pL1xcL2c7ICAgICAgICAgICAjIGFsbCBzbGFzaGVzIG5vdCByZWxhdGVkIHRvIGEgbmV3bGluZQogICAgcmV0dXJuICRzdHJpbmc7Cn0KCnN1YiBzYXZlX2ZpbGVfZnJvbWFycmF5IHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICAkc2VsZi0+X3NhdmVfZmlsZSgwLCBAXyk7Cn0KCnN1YiBzYXZlX2ZpbGVfZnJvbWhhc2ggewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgICRzZWxmLT5fc2F2ZV9maWxlKDEsIEBfKTsKfQoKc3ViIF9zYXZlX2ZpbGUgewogICAgbXkgJHNlbGYgICAgID0gc2hpZnQ7CiAgICBteSAkYXNoYXNoICAgPSBzaGlmdDsKICAgIG15ICRmaWxlICAgICA9IHNoaWZ0OwogICAgbXkgJGVudHJpZXMgID0gc2hpZnQ7CiAgICBteSAkZW5jb2RpbmcgPSBzaGlmdDsKCiAgICBvcGVuKE9VVCwgZGVmaW5lZCgkZW5jb2RpbmcpID8gIj46ZW5jb2RpbmcoJGVuY29kaW5nKSIgOiAiPiIsICRmaWxlKQogICAgICAgIG9yIHJldHVybiB1bmRlZjsKICAgIGlmICgkYXNoYXNoKSB7CiAgICAgICAgZm9yZWFjaCAoc29ydCBrZXlzICUkZW50cmllcykgewogICAgICAgICAgICBwcmludCBPVVQgJGVudHJpZXMtPnskX30tPmR1bXA7CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgZm9yZWFjaCAoQCRlbnRyaWVzKSB7CiAgICAgICAgICAgIHByaW50IE9VVCAkXy0+ZHVtcDsKICAgICAgICB9CiAgICB9CgogICAgY2xvc2UgT1VUOwp9CgpzdWIgbG9hZF9maWxlX2FzYXJyYXkgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgICRzZWxmLT5fbG9hZF9maWxlKDAsIEBfKTsKfQoKc3ViIGxvYWRfZmlsZV9hc2hhc2ggewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgICRzZWxmLT5fbG9hZF9maWxlKDEsIEBfKTsKfQoKc3ViIF9sb2FkX2ZpbGUgewogICAgbXkgJHNlbGYgICAgID0gc2hpZnQ7CiAgICBteSAkYXNoYXNoICAgPSBzaGlmdDsKICAgIG15ICRmaWxlICAgICA9IHNoaWZ0OwogICAgbXkgJGVuY29kaW5nID0gc2hpZnQ7CiAgICBteSAkY2xhc3MgICAgPSByZWYgJHNlbGYgfHwgJHNlbGY7CiAgICBteSAoQGVudHJpZXMsICVlbnRyaWVzKTsKICAgIG15ICRsaW5lX251bWJlciA9IDA7CiAgICBteSAkcG87CiAgICBteSAlYnVmZmVyOwogICAgbXkgJGxhc3RfYnVmZmVyOwoKICAgIG9wZW4oSU4sIGRlZmluZWQoJGVuY29kaW5nKSA/ICI8OmVuY29kaW5nKCRlbmNvZGluZykiIDogIjwiLCAkZmlsZSkKICAgICAgICBvciByZXR1cm4gdW5kZWY7CgogICAgd2hpbGUgKDxJTj4pIHsKICAgICAgICBjaG9tcDsKICAgICAgICAkbGluZV9udW1iZXIrKzsKCiAgICAgICAgIwogICAgICAgICMgU3RyaXAgdHJhaWxpbmcgXHJcbiBjaGFycwogICAgICAgICMKICAgICAgICAjIFRoaXMgY2FuIHBvc3NpYmx5IGhhdmUgYW4gZWZmZWN0IG9ubHkgb24gbXN5cyAob24gd2hpY2ggY2hvbXAKICAgICAgICAjIHNlZW1zIHRvIGxlYXZlIHNvbWUgdHJhaWxpbmcgXHIgY2hhcnMpIGFuZCBvbiBNYWNPUyB0aGF0IGhhcwogICAgICAgICMgcmV2ZXJzZWQgbmV3bGluZSAoXG5ccikuCiAgICAgICAgIyBOb3RlIHRoYXQgb3VyIHN0cmlwcGluZyBvZiB0aG9zZSB0cmFpbGluZyBjaGFycyBpcyBvbmx5IGdvaW5nIHRvIGJlCiAgICAgICAgIyB1c2VmdWwgd2hlbiB3cml0aW5nIGZyb20gb25lIHBsYXRmb3JtIGFuZCByZWFkaW5nIG9uIGFub3RoZXIuCiAgICAgICAgc3tbXHJcbl0qJH17fTsKCiAgICAgICAgaWYgKC9eJC8pIHsKCiAgICAgICAgICAgICMgRW1wdHkgbGluZS4gRW5kIG9mIGFuIGVudHJ5LgoKICAgICAgICAgICAgaWYgKGRlZmluZWQoJHBvKSkgewogICAgICAgICAgICAgICAgJHBvLT5mdXp6eV9tc2djdHh0KCRidWZmZXJ7ZnV6enlfbXNnY3R4dH0pCiAgICAgICAgICAgICAgICAgICAgaWYgZGVmaW5lZCAkYnVmZmVye2Z1enp5X21zZ2N0eHR9OwogICAgICAgICAgICAgICAgJHBvLT5mdXp6eV9tc2dpZCgkYnVmZmVye2Z1enp5X21zZ2lkfSkgaWYgZGVmaW5lZCAkYnVmZmVye2Z1enp5X21zZ2lkfTsKICAgICAgICAgICAgICAgICRwby0+ZnV6enlfbXNnaWRfcGx1cmFsKCRidWZmZXJ7ZnV6enlfbXNnaWRfcGx1cmFsfSkKICAgICAgICAgICAgICAgICAgICBpZiBkZWZpbmVkICRidWZmZXJ7ZnV6enlfbXNnaWRfcGx1cmFsfTsKICAgICAgICAgICAgICAgICRwby0+bXNnY3R4dCgkYnVmZmVye21zZ2N0eHR9KSAgICAgICAgICAgaWYgZGVmaW5lZCAkYnVmZmVye21zZ2N0eHR9OwogICAgICAgICAgICAgICAgJHBvLT5tc2dpZCgkYnVmZmVye21zZ2lkfSkgICAgICAgICAgICAgICBpZiBkZWZpbmVkICRidWZmZXJ7bXNnaWR9OwogICAgICAgICAgICAgICAgJHBvLT5tc2dpZF9wbHVyYWwoJGJ1ZmZlcnttc2dpZF9wbHVyYWx9KSBpZiBkZWZpbmVkICRidWZmZXJ7bXNnaWRfcGx1cmFsfTsKICAgICAgICAgICAgICAgICRwby0+bXNnc3RyKCRidWZmZXJ7bXNnc3RyfSkgICAgICAgICAgICAgaWYgZGVmaW5lZCAkYnVmZmVye21zZ3N0cn07CiAgICAgICAgICAgICAgICAkcG8tPm1zZ3N0cl9uKCRidWZmZXJ7bXNnc3RyX259KSAgICAgICAgIGlmIGRlZmluZWQgJGJ1ZmZlcnttc2dzdHJfbn07CgoKICAgICAgICAgICAgICAgICMgYXNoYXNoCiAgICAgICAgICAgICAgICBpZiAoJGFzaGFzaCkgewogICAgICAgICAgICAgICAgICAgICRlbnRyaWVzeyRwby0+bXNnaWR9ID0gJHBvCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcG8tPl9oYXNoX2tleV9vayhcJWVudHJpZXMpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGFzYXJyYXkKICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHB1c2goQGVudHJpZXMsICRwbyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdW5kZWYgJHBvOwogICAgICAgICAgICAgICAgdW5kZWYgJGxhc3RfYnVmZmVyOwogICAgICAgICAgICAgICAgJWJ1ZmZlciA9ICgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2lmICgvXiNccysoLiopLyBvciAvXiMoKSQvKSB7CgogICAgICAgICAgICAjIFRyYW5zbGF0b3IgY29tbWVudHMKICAgICAgICAgICAgJHBvID0gJGNsYXNzLT5uZXcoLWxvYWRlZF9saW5lX251bWJlciA9PiAkbGluZV9udW1iZXIpIHVubGVzcyBkZWZpbmVkKCRwbyk7CiAgICAgICAgICAgIGlmIChkZWZpbmVkKCRwby0+Y29tbWVudCkpIHsKICAgICAgICAgICAgICAgICRwby0+Y29tbWVudCgkcG8tPmNvbW1lbnQgLiAiXG4kMSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJHBvLT5jb21tZW50KCQxKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNpZiAoL14jXC5ccyooLiopLykgewoKICAgICAgICAgICAgIyBBdXRvbWF0aWMgY29tbWVudHMKICAgICAgICAgICAgJHBvID0gJGNsYXNzLT5uZXcoLWxvYWRlZF9saW5lX251bWJlciA9PiAkbGluZV9udW1iZXIpIHVubGVzcyBkZWZpbmVkKCRwbyk7CiAgICAgICAgICAgIGlmIChkZWZpbmVkKCRwby0+YXV0b21hdGljKSkgewogICAgICAgICAgICAgICAgJHBvLT5hdXRvbWF0aWMoJHBvLT5hdXRvbWF0aWMgLiAiXG4kMSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJHBvLT5hdXRvbWF0aWMoJDEpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2lmICgvXiM6XHMrKC4qKS8pIHsKCiAgICAgICAgICAgICMgcmVmZXJlbmNlCiAgICAgICAgICAgICRwbyA9ICRjbGFzcy0+bmV3KC1sb2FkZWRfbGluZV9udW1iZXIgPT4gJGxpbmVfbnVtYmVyKSB1bmxlc3MgZGVmaW5lZCgkcG8pOwogICAgICAgICAgICBpZiAoZGVmaW5lZCgkcG8tPnJlZmVyZW5jZSkpIHsKICAgICAgICAgICAgICAgICRwby0+cmVmZXJlbmNlKCRwby0+cmVmZXJlbmNlIC4gIlxuJDEiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRwby0+cmVmZXJlbmNlKCQxKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNpZiAoL14jLFxzKyguKikvKSB7CgogICAgICAgICAgICAjIGZsYWdzCiAgICAgICAgICAgIG15IEBmbGFncyA9IHNwbGl0IC9ccypbLF1ccyovLCAkMTsKICAgICAgICAgICAgJHBvID0gJGNsYXNzLT5uZXcoLWxvYWRlZF9saW5lX251bWJlciA9PiAkbGluZV9udW1iZXIpIHVubGVzcyBkZWZpbmVkKCRwbyk7CiAgICAgICAgICAgIGZvcmVhY2ggbXkgJGZsYWcgKEBmbGFncykgewogICAgICAgICAgICAgICAgJHBvLT5hZGRfZmxhZygkZmxhZyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzaWYgKC9eIyh+KT9cfFxzK21zZ2N0eHRccysoLiopLykgewogICAgICAgICAgICAkcG8gPSAkY2xhc3MtPm5ldygtbG9hZGVkX2xpbmVfbnVtYmVyID0+ICRsaW5lX251bWJlcikgdW5sZXNzIGRlZmluZWQoJHBvKTsKICAgICAgICAgICAgJGJ1ZmZlcntmdXp6eV9tc2djdHh0fSA9ICRzZWxmLT5kZXF1b3RlKCQyKTsKICAgICAgICAgICAgJGxhc3RfYnVmZmVyID0gXCRidWZmZXJ7ZnV6enlfbXNnY3R4dH07CiAgICAgICAgICAgICRwby0+b2Jzb2xldGUoMSkgaWYgJDE7CiAgICAgICAgfQogICAgICAgIGVsc2lmICgvXiMofik/XHxccyttc2dpZFxzKyguKikvKSB7CiAgICAgICAgICAgICRwbyA9ICRjbGFzcy0+bmV3KC1sb2FkZWRfbGluZV9udW1iZXIgPT4gJGxpbmVfbnVtYmVyKSB1bmxlc3MgZGVmaW5lZCgkcG8pOwogICAgICAgICAgICAkYnVmZmVye2Z1enp5X21zZ2lkfSA9ICRzZWxmLT5kZXF1b3RlKCQyKTsKICAgICAgICAgICAgJGxhc3RfYnVmZmVyID0gXCRidWZmZXJ7ZnV6enlfbXNnaWR9OwogICAgICAgICAgICAkcG8tPm9ic29sZXRlKDEpIGlmICQxOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoL14jKH4pP1x8XHMrbXNnaWRfcGx1cmFsXHMrKC4qKS8pIHsKICAgICAgICAgICAgJHBvID0gJGNsYXNzLT5uZXcoLWxvYWRlZF9saW5lX251bWJlciA9PiAkbGluZV9udW1iZXIpIHVubGVzcyBkZWZpbmVkKCRwbyk7CiAgICAgICAgICAgICRidWZmZXJ7ZnV6enlfbXNnaWRfcGx1cmFsfSA9ICRzZWxmLT5kZXF1b3RlKCQyKTsKICAgICAgICAgICAgJGxhc3RfYnVmZmVyID0gXCRidWZmZXJ7ZnV6enlfbXNnaWRfcGx1cmFsfTsKICAgICAgICAgICAgJHBvLT5vYnNvbGV0ZSgxKSBpZiAkMTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKC9eKCN+XHMrKT9tc2djdHh0XHMrKC4qKS8pIHsKICAgICAgICAgICAgJHBvID0gJGNsYXNzLT5uZXcoLWxvYWRlZF9saW5lX251bWJlciA9PiAkbGluZV9udW1iZXIpIHVubGVzcyBkZWZpbmVkKCRwbyk7CiAgICAgICAgICAgICRidWZmZXJ7bXNnY3R4dH0gPSAkc2VsZi0+ZGVxdW90ZSgkMik7CiAgICAgICAgICAgICRsYXN0X2J1ZmZlciA9IFwkYnVmZmVye21zZ2N0eHR9OwogICAgICAgICAgICAkcG8tPm9ic29sZXRlKDEpIGlmICQxOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoL14oI35ccyspP21zZ2lkXHMrKC4qKS8pIHsKICAgICAgICAgICAgJHBvID0gJGNsYXNzLT5uZXcoLWxvYWRlZF9saW5lX251bWJlciA9PiAkbGluZV9udW1iZXIpIHVubGVzcyBkZWZpbmVkKCRwbyk7CiAgICAgICAgICAgICRidWZmZXJ7bXNnaWR9ID0gJHNlbGYtPmRlcXVvdGUoJDIpOwogICAgICAgICAgICAkbGFzdF9idWZmZXIgPSBcJGJ1ZmZlcnttc2dpZH07CiAgICAgICAgICAgICRwby0+b2Jzb2xldGUoMSkgaWYgJDE7CiAgICAgICAgfQogICAgICAgIGVsc2lmICgvXigjflxzKyk/bXNnaWRfcGx1cmFsXHMrKC4qKS8pIHsKICAgICAgICAgICAgJHBvID0gJGNsYXNzLT5uZXcoLWxvYWRlZF9saW5lX251bWJlciA9PiAkbGluZV9udW1iZXIpIHVubGVzcyBkZWZpbmVkKCRwbyk7CiAgICAgICAgICAgICRidWZmZXJ7bXNnaWRfcGx1cmFsfSA9ICRzZWxmLT5kZXF1b3RlKCQyKTsKICAgICAgICAgICAgJGxhc3RfYnVmZmVyID0gXCRidWZmZXJ7bXNnaWRfcGx1cmFsfTsKICAgICAgICAgICAgJHBvLT5vYnNvbGV0ZSgxKSBpZiAkMTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKC9eKD86I35ccyspP21zZ3N0clxzKyguKikvKSB7CgogICAgICAgICAgICAjIHRyYW5zbGF0ZWQgc3RyaW5nCiAgICAgICAgICAgICRidWZmZXJ7bXNnc3RyfSA9ICRzZWxmLT5kZXF1b3RlKCQxKTsKICAgICAgICAgICAgJGxhc3RfYnVmZmVyID0gXCRidWZmZXJ7bXNnc3RyfTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKC9eKD86I35ccyspP21zZ3N0clxbKFxkKylcXVxzKyguKikvKSB7CgogICAgICAgICAgICAjIHRyYW5zbGF0ZWQgc3RyaW5nCiAgICAgICAgICAgICRidWZmZXJ7bXNnc3RyX259eyQxfSA9ICRzZWxmLT5kZXF1b3RlKCQyKTsKICAgICAgICAgICAgJGxhc3RfYnVmZmVyID0gXCRidWZmZXJ7bXNnc3RyX259eyQxfTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKC9eKD86Iyg/On58flx8fFx8KVxzKyk/KCIuKikvKSB7CgogICAgICAgICAgICAjIGNvbnRpbnVlZCBzdHJpbmcuIEFjY291bnRzIGZvcjoKICAgICAgICAgICAgIyAgIG5vcm1hbCAgICAgICAgICA6ICJzdHJpbmciCiAgICAgICAgICAgICMgICBvYnNvbGV0ZSAgICAgICAgOiAjfiAic3RyaW5nIgogICAgICAgICAgICAjICAgZnV6enkgICAgICAgICAgIDogI3wgInN0cmluZyIKICAgICAgICAgICAgIyAgIGZ1enp5K29ic29sZXRlICA6ICN+fCAic3RyaW5nIgogICAgICAgICAgICAkJGxhc3RfYnVmZmVyIC49ICRzZWxmLT5kZXF1b3RlKCQxKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHdhcm4gIlN0cmFuZ2UgbGluZSBhdCAkZmlsZSBsaW5lICRsaW5lX251bWJlcjogWyRfXVxuIjsKICAgICAgICB9CiAgICB9CiAgICBpZiAoZGVmaW5lZCgkcG8pKSB7CgogICAgICAgICRwby0+bXNnY3R4dCgkYnVmZmVye21zZ2N0eHR9KQogICAgICAgICAgICBpZiBkZWZpbmVkICRidWZmZXJ7bXNnY3R4dH07CiAgICAgICAgJHBvLT5tc2dpZCgkYnVmZmVye21zZ2lkfSkKICAgICAgICAgICAgaWYgZGVmaW5lZCAkYnVmZmVye21zZ2lkfTsKICAgICAgICAkcG8tPm1zZ2lkX3BsdXJhbCgkYnVmZmVye21zZ2lkX3BsdXJhbH0pCiAgICAgICAgICAgIGlmIGRlZmluZWQgJGJ1ZmZlcnttc2dpZF9wbHVyYWx9OwogICAgICAgICRwby0+bXNnc3RyKCRidWZmZXJ7bXNnc3RyfSkKICAgICAgICAgICAgaWYgZGVmaW5lZCAkYnVmZmVye21zZ3N0cn07CiAgICAgICAgJHBvLT5tc2dzdHJfbigkYnVmZmVye21zZ3N0cl9ufSkKICAgICAgICAgICAgaWYgZGVmaW5lZCAkYnVmZmVye21zZ3N0cl9ufTsKCiAgICAgICAgIyBhc2hhc2gKICAgICAgICBpZiAoJGFzaGFzaCkgewogICAgICAgICAgICBpZiAoJHBvLT5faGFzaF9rZXlfb2soXCVlbnRyaWVzKSkgewogICAgICAgICAgICAgICAgJGVudHJpZXN7JHBvLT5tc2dpZH0gPSAkcG87CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgYXNhcnJheQogICAgICAgIGVsc2UgewogICAgICAgICAgICBwdXNoKEBlbnRyaWVzLCAkcG8pOwogICAgICAgIH0KICAgIH0KICAgIGNsb3NlIElOOwogICAgcmV0dXJuICgkYXNoYXNoID8gXCVlbnRyaWVzIDogXEBlbnRyaWVzKTsKfQoKc3ViIF9oYXNoX2tleV9vayB7CiAgICBteSAoJHNlbGYsICRlbnRyaWVzKSA9IEBfOwoKICAgIG15ICRrZXkgPSAkc2VsZi0+bXNnaWQ7CgogICAgaWYgKCRlbnRyaWVzLT57JGtleX0pIHsKCiAgICAgICAgIyBkb24ndCBvdmVyd3JpdGUgbm9uLW9ic29sZXRlIGVudHJpZXMgd2l0aCBvYnNvbGV0ZSBvbmVzCiAgICAgICAgcmV0dXJuIGlmICgoJHNlbGYtPm9ic29sZXRlKSAmJiAobm90ICRlbnRyaWVzLT57JGtleX0tPm9ic29sZXRlKSk7CgogICAgICAgICMgZG9uJ3Qgb3ZlcndyaXRlIHRyYW5zbGF0ZWQgZW50cmllcyB3aXRoIHVudHJhbnNsYXRlZCBvbmVzCiAgICAgICAgcmV0dXJuIGlmICgoJHNlbGYtPm1zZ3N0ciAhfiAvXHcvKSAmJiAoJGVudHJpZXMtPnska2V5fS0+bXNnc3RyID1+IC9cdy8pKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKIyBBdXRvbG9hZCBtZXRob2RzIGdvIGFmdGVyID1jdXQsIGFuZCBhcmUgcHJvY2Vzc2VkIGJ5IHRoZSBhdXRvc3BsaXQgcHJvZ3JhbS4KCjE7Cl9fRU5EX18KCiMgQmVsb3cgaXMgdGhlIHN0dWIgb2YgZG9jdW1lbnRhdGlvbiBmb3IgeW91ciBtb2R1bGUuIFlvdSBiZXR0ZXIgZWRpdCBpdCEKCj1oZWFkMSBOQU1FCgpMb2NhbGU6OlBPIC0gUGVybCBtb2R1bGUgZm9yIG1hbmlwdWxhdGluZyAucG8gZW50cmllcyBmcm9tIEdOVSBnZXR0ZXh0Cgo9aGVhZDEgU1lOT1BTSVMKCiAgICB1c2UgTG9jYWxlOjpQTzsKCiAgICAkcG8gPSBuZXcgTG9jYWxlOjpQTyhbLW9wdGlvbj0+dmFsdWUsLi4uXSkKICAgIFskc3RyaW5nID1dICRwby0+bXNnaWQoW25ldyBzdHJpbmddKTsKICAgIFskc3RyaW5nID1dICRwby0+bXNnc3RyKFtuZXcgc3RyaW5nXSk7CiAgICBbJHN0cmluZyA9XSAkcG8tPmNvbW1lbnQoW25ldyBzdHJpbmddKTsKICAgIFskc3RyaW5nID1dICRwby0+YXV0b21hdGljKFtuZXcgc3RyaW5nXSk7CiAgICBbJHN0cmluZyA9XSAkcG8tPnJlZmVyZW5jZShbbmV3IHN0cmluZ10pOwogICAgWyR2YWx1ZSA9XSAkcG8tPmZ1enp5KFt2YWx1ZV0pOwogICAgWyR2YWx1ZSA9XSAkcG8tPmFkZF9mbGFnKCdjLWZvcm1hdCcpOwogICAgcHJpbnQgJHBvLT5kdW1wOwoKICAgICRxdW90ZWRfc3RyaW5nID0gJHBvLT5xdW90ZSgkc3RyaW5nKTsKICAgICRzdHJpbmcgPSAkcG8tPmRlcXVvdGUoJHF1b3RlZF9zdHJpbmcpOwoKICAgICRhcmVmID0gTG9jYWxlOjpQTy0+bG9hZF9maWxlX2FzYXJyYXkoPGZpbGVuYW1lPixbZW5jb2RpbmddKTsKICAgICRocmVmID0gTG9jYWxlOjpQTy0+bG9hZF9maWxlX2FzaGFzaCg8ZmlsZW5hbWU+LFtlbmNvZGluZ10pOwogICAgTG9jYWxlOjpQTy0+c2F2ZV9maWxlX2Zyb21hcnJheSg8ZmlsZW5hbWU+LCRhcmVmLFtlbmNvZGluZ10pOwogICAgTG9jYWxlOjpQTy0+c2F2ZV9maWxlX2Zyb21oYXNoKDxmaWxlbmFtZT4sJGhyZWYsW2VuY29kaW5nXSk7Cgo9aGVhZDEgREVTQ1JJUFRJT04KClRoaXMgbW9kdWxlIHNpbXBsaWZpZXMgbWFuYWdlbWVudCBvZiBHTlUgZ2V0dGV4dCAucG8gZmlsZXMgYW5kIGlzIGFuCmFsdGVybmF0aXZlIHRvIHVzaW5nIGVtYWNzIHBvLW1vZGUuIEl0IHByb3ZpZGVzIGFuIG9iamVjdC1vcmllbnRlZAppbnRlcmZhY2UgaW4gd2hpY2ggZWFjaCBlbnRyeSBpbiBhIC5wbyBmaWxlIGlzIGEgTG9jYWxlOjpQTyBvYmplY3QuCgo9aGVhZDEgTUVUSE9EUwoKPW92ZXIgNAoKPWl0ZW0gbmV3CgogICAgbXkgTG9jYWxlOjpQTyAkcG8gPSBuZXcgTG9jYWxlOjpQTzsKICAgIG15IExvY2FsZTo6UE8gJHBvID0gbmV3IExvY2FsZTo6UE8oJW9wdGlvbnMpOwoKQ3JlYXRlIGEgbmV3IExvY2FsZTo6UE8gb2JqZWN0IHRvIHJlcHJlc2VudCBhIHBvIGVudHJ5LgpZb3UgY2FuIG9wdGlvbmFsbHkgc2V0IHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBlbnRyeSBieSBwYXNzaW5nCmEgbGlzdC9oYXNoIG9mIHRoZSBmb3JtOgoKICAgIC1vcHRpb249PnZhbHVlLCAtb3B0aW9uPT52YWx1ZSwgZXRjLgoKV2hlcmUgb3B0aW9ucyBhcmUgbXNnaWQsIG1zZ2lkX3BsdXJhbCwgbXNnc3RyLCBtc2djdHh0LCBjb21tZW50LCBhdXRvbWF0aWMsCnJlZmVyZW5jZSwgZnV6enlfbXNnY3R4dCwgZnV6enlfbXNnaWQsIGZ1enp5X21zZ2lkX3BsdXJhbCwKZnV6enksIGFuZCBjLWZvcm1hdC4gU2VlIGFjY2Vzc29yIG1ldGhvZHMgYmVsb3cuCgpUbyBnZW5lcmF0ZSBhIHBvIGZpbGUgaGVhZGVyLCBhZGQgYW4gZW50cnkgd2l0aCBhbiBlbXB0eQptc2dpZCwgbGlrZSB0aGlzOgoKICAgICRwbyA9IG5ldyBMb2NhbGU6OlBPKC1tc2dpZD0+JycsIC1tc2dzdHI9PgogICAgICAgICJQcm9qZWN0LUlkLVZlcnNpb246IFBBQ0tBR0UgVkVSU0lPTlxcbiIgLgogICAgICAgICJQTy1SZXZpc2lvbi1EYXRlOiBZRUFSLU1PLURBIEhPOk1JICtaT05FXFxuIiAuCiAgICAgICAgIkxhc3QtVHJhbnNsYXRvcjogRlVMTCBOQU1FIDxFTUFJTEBBRERSRVNTPlxcbiIgLgogICAgICAgICJMYW5ndWFnZS1UZWFtOiBMQU5HVUFHRSA8TExAbGkub3JnPlxcbiIgLgogICAgICAgICJNSU1FLVZlcnNpb246IDEuMFxcbiIgLgogICAgICAgICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9Q0hBUlNFVFxcbiIgLgogICAgICAgICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBFTkNPRElOR1xcbiIpOwoKPWl0ZW0gbXNnaWQKClNldCBvciBnZXQgdGhlIHVudHJhbnNsYXRlZCBzdHJpbmcgZnJvbSB0aGUgb2JqZWN0LgoKVGhpcyBtZXRob2QgZXhwZWN0cyB0aGUgbmV3IHN0cmluZyBpbiB1bnF1b3RlZCBmb3JtIGJ1dCByZXR1cm5zIHRoZSBjdXJyZW50IHN0cmluZyBpbiBxdW90ZWQgZm9ybS4KCj1pdGVtIG1zZ2lkX3BsdXJhbAoKU2V0IG9yIGdldCB0aGUgdW50cmFuc2xhdGVkIHBsdXJhbCBzdHJpbmcgZnJvbSB0aGUgb2JqZWN0LgoKVGhpcyBtZXRob2QgZXhwZWN0cyB0aGUgbmV3IHN0cmluZyBpbiB1bnF1b3RlZCBmb3JtIGJ1dCByZXR1cm5zIHRoZSBjdXJyZW50IHN0cmluZyBpbiBxdW90ZWQgZm9ybS4KCj1pdGVtIG1zZ3N0cgoKU2V0IG9yIGdldCB0aGUgdHJhbnNsYXRlZCBzdHJpbmcgZnJvbSB0aGUgb2JqZWN0LgoKVGhpcyBtZXRob2QgZXhwZWN0cyB0aGUgbmV3IHN0cmluZyBpbiB1bnF1b3RlZCBmb3JtIGJ1dCByZXR1cm5zIHRoZSBjdXJyZW50IHN0cmluZyBpbiBxdW90ZWQgZm9ybS4KCj1pdGVtIG1zZ3N0cl9uCgpHZXQgb3Igc2V0IHRoZSB0cmFuc2xhdGlvbnMgaWYgdGhlcmUgYXJlIHB1cmFscyBpbnZvbHZlZC4gVGFrZXMgYW5kCnJldHVybnMgYSBoYXNocmVmIHdoZXJlIHRoZSBrZXlzIGFyZSB0aGUgJ04nIGNhc2UgYW5kIHRoZSB2YWx1ZXMgYXJlCnRoZSBzdHJpbmdzLiBlZzoKCiAgICAkcG8tPm1zZ3N0cl9uKAogICAgewogICAgICAgIDAgPT4gJ2ZvdW5kICVkIHBsdXJhbCB0cmFuc2xhdGlvbnMnLAogICAgICAgIDEgPT4gJ2ZvdW5kICVkIHNpbmd1bGFyIHRyYW5zbGF0aW9uJywKICAgIH0KICAgICk7CgpUaGlzIG1ldGhvZCBleHBlY3RzIHRoZSBuZXcgc3RyaW5ncyBpbiB1bnF1b3RlZCBmb3JtIGJ1dCByZXR1cm5zIHRoZSBjdXJyZW50IHN0cmluZ3MgaW4gcXVvdGVkIGZvcm0uCgo9aXRlbSBtc2djdHh0CgpTZXQgb3IgZ2V0IHRoZSB0cmFuc2xhdGlvbiBjb250ZXh0IHN0cmluZyBmcm9tIHRoZSBvYmplY3QuCgpUaGlzIG1ldGhvZCBleHBlY3RzIHRoZSBuZXcgc3RyaW5nIGluIHVucXVvdGVkIGZvcm0gYnV0IHJldHVybnMgdGhlIGN1cnJlbnQgc3RyaW5nIGluIHF1b3RlZCBmb3JtLgoKPWl0ZW0gZnV6enlfbXNnaWQKClNldCBvciBnZXQgdGhlIG91dGRhdGVkIHVudHJhbnNsYXRlZCBzdHJpbmcgZnJvbSB0aGUgb2JqZWN0LgoKVGhpcyBtZXRob2QgZXhwZWN0cyB0aGUgbmV3IHN0cmluZyBpbiB1bnF1b3RlZCBmb3JtIGJ1dCByZXR1cm5zIHRoZSBjdXJyZW50IHN0cmluZyBpbiBxdW90ZWQgZm9ybS4KCj1pdGVtIGZ1enp5X21zZ2lkX3BsdXJhbAoKU2V0IG9yIGdldCB0aGUgb3V0ZGF0ZWQgdW50cmFuc2xhdGVkIHBsdXJhbCBzdHJpbmcgZnJvbSB0aGUgb2JqZWN0LgoKVGhpcyBtZXRob2QgZXhwZWN0cyB0aGUgbmV3IHN0cmluZyBpbiB1bnF1b3RlZCBmb3JtIGJ1dCByZXR1cm5zIHRoZSBjdXJyZW50IHN0cmluZyBpbiBxdW90ZWQgZm9ybS4KCj1pdGVtIGZ1enp5X21zZ2N0eHQKClNldCBvciBnZXQgdGhlIG91dGRhdGVkIHRyYW5zbGF0aW9uIGNvbnRleHQgc3RyaW5nIGZyb20gdGhlIG9iamVjdC4KClRoaXMgbWV0aG9kIGV4cGVjdHMgdGhlIG5ldyBzdHJpbmcgaW4gdW5xdW90ZWQgZm9ybSBidXQgcmV0dXJucyB0aGUgY3VycmVudCBzdHJpbmcgaW4gcXVvdGVkIGZvcm0uCgo9aXRlbSBvYnNvbGV0ZQoKUmV0dXJucyAxIGlmIHRoZSBlbnRyeSBpcyBvYnNvbGV0ZS4KT2Jzb2xldGUgZW50cmllcyBoYXZlIHRoZWlyIG1zZ2lkLCBtc2dpZF9wbHVyYWwsIG1zZ3N0ciwgbXNnc3RyX24gYW5kIG1zZ2N0eHQgbGluZXMgY29tbWVudGVkIG91dCB3aXRoICIjfiIKCldoZW4gdXNpbmcgbG9hZF9maWxlX2FzaGFzaCwgbm9uLW9ic29sZXRlIGVudHJpZXMgd2lsbCBhbHdheXMgcmVwbGFjZSBvYnNvbGV0ZSBlbnRyaWVzIHdpdGggdGhlIHNhbWUgbXNnaWQuCgo9aXRlbSBjb21tZW50CgpTZXQgb3IgZ2V0IHRyYW5zbGF0b3IgY29tbWVudHMgZnJvbSB0aGUgb2JqZWN0LgoKSWYgdGhlcmUgYXJlIG5vIHN1Y2ggY29tbWVudHMsIHRoZW4gdGhlIHZhbHVlIGlzIHVuZGVmLiAgT3RoZXJ3aXNlLAp0aGUgdmFsdWUgaXMgYSBzdHJpbmcgdGhhdCBjb250YWlucyB0aGUgY29tbWVudCBsaW5lcyBkZWxpbWl0ZWQgd2l0aAoiXG4iLiAgVGhlIHN0cmluZyBpbmNsdWRlcyBuZWl0aGVyIHRoZSBTPCIjICI+IGF0IHRoZSBiZWdpbm5pbmcgb2YKZWFjaCBjb21tZW50IGxpbmUgbm9yIHRoZSBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgY29tbWVudCBsaW5lLgoKPWl0ZW0gYXV0b21hdGljCgpTZXQgb3IgZ2V0IGF1dG9tYXRpYyBjb21tZW50cyBmcm9tIHRoZSBvYmplY3QgKGluc2VydGVkIGJ5CmVtYWNzIHBvLW1vZGUgb3IgeGdldHRleHQpLgoKSWYgdGhlcmUgYXJlIG5vIHN1Y2ggY29tbWVudHMsIHRoZW4gdGhlIHZhbHVlIGlzIHVuZGVmLiAgT3RoZXJ3aXNlLAp0aGUgdmFsdWUgaXMgYSBzdHJpbmcgdGhhdCBjb250YWlucyB0aGUgY29tbWVudCBsaW5lcyBkZWxpbWl0ZWQgd2l0aAoiXG4iLiAgVGhlIHN0cmluZyBpbmNsdWRlcyBuZWl0aGVyIHRoZSBTPCIjLiAiPiBhdCB0aGUgYmVnaW5uaW5nIG9mCmVhY2ggY29tbWVudCBsaW5lIG5vciB0aGUgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IGNvbW1lbnQgbGluZS4KCj1pdGVtIHJlZmVyZW5jZQoKU2V0IG9yIGdldCByZWZlcmVuY2UgbWFya2luZyBjb21tZW50cyBmcm9tIHRoZSBvYmplY3QgKGluc2VydGVkCmJ5IGVtYWNzIHBvLW1vZGUgb3IgZ2V0dGV4dCkuCgo9aXRlbSBmdXp6eQoKU2V0IG9yIGdldCB0aGUgZnV6enkgZmxhZyBvbiB0aGUgb2JqZWN0ICgiY2hlY2sgdGhpcyB0cmFuc2xhdGlvbiIpLgpXaGVuIHNldHRpbmcsIHVzZSAxIHRvIHR1cm4gb24gZnV6enksIGFuZCAwIHRvIHR1cm4gaXQgb2ZmLgoKPWl0ZW0gY19mb3JtYXQKClNldCBvciBnZXQgdGhlIGMtZm9ybWF0IG9yIG5vLWMtZm9ybWF0IGZsYWcgb24gdGhlIG9iamVjdC4KClRoaXMgY2FuIHRha2UgMyB2YWx1ZXM6CjEgaW1wbGllcyBjLWZvcm1hdCwgMCBpbXBsaWVzIG5vLWMtZm9ybWF0LCBhbmQgdW5kZWZpbmVkIGltcGxpZXMgbmVpdGhlci4KCj1pdGVtIHBocF9mb3JtYXQKClNldCBvciBnZXQgdGhlIHBocC1mb3JtYXQgb3Igbm8tcGhwLWZvcm1hdCBmbGFnIG9uIHRoZSBvYmplY3QuCgpUaGlzIGNhbiB0YWtlIDMgdmFsdWVzOgoxIGltcGxpZXMgcGhwLWZvcm1hdCwgMCBpbXBsaWVzIG5vLXBocC1mb3JtYXQsIGFuZCB1bmRlZmluZWQgaW1wbGllcyBuZWl0aGVyLgoKPWl0ZW0gaGFzX2ZsYWcKCiAgICBpZiAoJHBvLT5oYXNfZmxhZygncGVybC1mb3JtYXQnKSkgewogICAgICAgIC4uLgogICAgfQoKUmV0dXJucyB0cnVlIGlmIHRoZSBmbGFnIGV4aXN0cyBpbiB0aGUgZW50cnkncyAjfiBjb21tZW50Cgo9aXRlbSBhZGRfZmxhZwoKICAgICRwby0+YWRkX2ZsYWcoJ3BlcmwtZm9ybWF0Jyk7CgpBZGRzIHRoZSBmbGFnIHRvIHRoZSAjfiBjb21tZW50Cgo9aXRlbSByZW1vdmVfZmxhZwoKICAgICRwby0+cmVtb3ZlX2ZsYWcoJ3BlcmwtZm9ybWF0Jyk7CgpSZW1vdmVzIHRoZSBmbGFnIGZyb20gdGhlICN+IGNvbW1lbnQKCj1pdGVtIGxvYWRlZF9saW5lX251bWJlcgoKV2hlbiB1c2luZyBvbmUgb2YgdGhlIGxvYWRfZmlsZV9hcyogbWV0aG9kcywKdGhpcyB3aWxsIHJldHVybiB0aGUgbGluZSBudW1iZXIgdGhhdCB0aGUgZW50cnkgc3RhcnRlZCBhdCBpbiB0aGUgZmlsZS4KCj1pdGVtIGR1bXAKClJldHVybnMgdGhlIGVudHJ5IGFzIGEgc3RyaW5nLCBzdWl0YWJsZSBmb3Igb3V0cHV0IHRvIGEgcG8gZmlsZS4KCj1pdGVtIHF1b3RlCgpBcHBsaWVzIHBvIHF1b3RhdGlvbiBydWxlcyB0byBhIHN0cmluZywgYW5kIHJldHVybnMgdGhlIHF1b3RlZApzdHJpbmcuIFRoZSBxdW90ZWQgc3RyaW5nIHdpbGwgaGF2ZSBhbGwgZXhpc3RpbmcgZG91YmxlLXF1b3RlCmNoYXJhY3RlcnMgZXNjYXBlZCBieSBiYWNrc2xhc2hlcywgYW5kIHdpbGwgYmUgZW5jbG9zZWQgaW4gZG91YmxlCnF1b3Rlcy4KCj1pdGVtIGRlcXVvdGUKClJldHVybnMgYSBxdW90ZWQgcG8gc3RyaW5nIHRvIGl0cyBuYXR1cmFsIGZvcm0uCgo9aXRlbSBsb2FkX2ZpbGVfYXNhcnJheQoKR2l2ZW4gdGhlIGZpbGVuYW1lIG9mIGEgcG8tZmlsZSwgcmVhZHMgdGhlIGZpbGUgYW5kIHJldHVybnMgYQpyZWZlcmVuY2UgdG8gYSBsaXN0IG9mIExvY2FsZTo6UE8gb2JqZWN0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBjb250ZW50cyBvZgp0aGUgZmlsZSwgaW4gdGhlIHNhbWUgb3JkZXIuICBBY2NlcHRzIGFuIG9wdGlvbmFsIGVuY29kaW5nIHBhcmFtZXRlciAoZS5nLgoidXRmOCIpIHdoaWNoIGRlZmluZXMgaG93IHRoZSBwby1maWxlJ3MgaW5wdXQgc3RyZWFtIHdpbGwgYmUgY29uZmlndXJlZC4KCj1pdGVtIGxvYWRfZmlsZV9hc2hhc2gKCkdpdmVuIHRoZSBmaWxlbmFtZSBvZiBhIHBvLWZpbGUsIHJlYWRzIHRoZSBmaWxlIGFuZCByZXR1cm5zIGEKcmVmZXJlbmNlIHRvIGEgaGFzaCBvZiBMb2NhbGU6OlBPIG9iamVjdHMgY29ycmVzcG9uZGluZyB0byB0aGUgY29udGVudHMgb2YKdGhlIGZpbGUuIFRoZSBoYXNoIGtleXMgYXJlIHRoZSB1bnRyYW5zbGF0ZWQgc3RyaW5ncywgc28gdGhpcyBpcyBhIGNoZWFwCndheSB0byByZW1vdmUgZHVwbGljYXRlcy4gVGhlIG1ldGhvZCB3aWxsIHByZWZlciB0byBrZWVwIGVudHJpZXMgdGhhdApoYXZlIGJlZW4gdHJhbnNsYXRlZC4gIEFjY2VwdHMgYW4gb3B0aW9uYWwgZW5jb2RpbmcgcGFyYW1ldGVyIChlLmcuCiJ1dGY4Iikgd2hpY2ggZGVmaW5lcyBob3cgdGhlIHBvLWZpbGUncyBpbnB1dCBzdHJlYW0gd2lsbCBiZSBjb25maWd1cmVkLgoKPWl0ZW0gc2F2ZV9maWxlX2Zyb21hcnJheQoKR2l2ZW4gYSBmaWxlbmFtZSBhbmQgYSByZWZlcmVuY2UgdG8gYSBsaXN0IG9mIExvY2FsZTo6UE8gb2JqZWN0cywKc2F2ZXMgdGhvc2Ugb2JqZWN0cyB0byB0aGUgZmlsZSwgY3JlYXRpbmcgYSBwby1maWxlLiAgQWNjZXB0cyBhbiBvcHRpb25hbAplbmNvZGluZyBwYXJhbWV0ZXIgKGUuZy4gInV0ZjgiKSB3aGljaCBkZWZpbmVzIGhvdyB0aGUgcG8tZmlsZSdzIG91dHB1dApzdHJlYW0gd2lsbCBiZSBjb25maWd1cmVkLgoKPWl0ZW0gc2F2ZV9maWxlX2Zyb21oYXNoCgpHaXZlbiBhIGZpbGVuYW1lIGFuZCBhIHJlZmVyZW5jZSB0byBhIGhhc2ggb2YgTG9jYWxlOjpQTyBvYmplY3RzLApzYXZlcyB0aG9zZSBvYmplY3RzIHRvIHRoZSBmaWxlLCBjcmVhdGluZyBhIHBvLWZpbGUuIFRoZSBlbnRyaWVzCmFyZSBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkgYnkgdW50cmFuc2xhdGVkIHN0cmluZy4gIEFjY2VwdHMgYW4gb3B0aW9uYWwKZW5jb2RpbmcgcGFyYW1ldGVyIChlLmcuICJ1dGY4Iikgd2hpY2ggZGVmaW5lcyBob3cgdGhlIHBvLWZpbGUncyBvdXRwdXQKc3RyZWFtIHdpbGwgYmUgY29uZmlndXJlZC4KCj1iYWNrCgo9aGVhZDEgQVVUSE9SCgpNYWludGFpbmVyOiBLZW4gUHJvd3MsIHBlcmxAeGV2Lm5ldAoKT3JpZ2luYWwgdmVyc2lvbiBieTogQWxhbiBTY2h3YXJ0eiwgYWxhbnN6QHBlbm5tdXNoLm9yZwoKPWhlYWQxIEJVR1MKCklmIHlvdSBsb2FkX2ZpbGVfYXMqIHRoZW4gc2F2ZV9maWxlX2Zyb20qLCB0aGUgb3V0cHV0IGZpbGUgbWF5IGhhdmUgc2xpZ2h0CmNvc21ldGljIGRpZmZlcmVuY2VzIGZyb20gdGhlIGlucHV0IGZpbGUgKGFuIGV4dHJhIGJsYW5rIGxpbmUgaGVyZSBvciB0aGVyZSkuCgptc2dpZCwgbXNnaWRfcGx1cmFsLCBtc2dzdHIsIG1zZ3N0cl9uIGFuZCBtc2djdHh0IGV4cGVjdCBhIG5vbi1xdW90ZWQgc3RyaW5nIGFzIGlucHV0LCBidXQgcmV0dXJuIHF1b3RlZCBzdHJpbmdzLgpJJ20gaGVzaXRhbnQgdG8gY2hhbmdlIHRoaXMgaW4gZmVhciBvZiBicmVha2luZyB0aGUgbW9kdWxlcy9zY3JpcHRzIG9mIHBlb3BsZSBhbHJlYWR5IHVzaW5nIExvY2FsZTo6UE8uCgpMb2NhbGU6OlBPIHJlcXVpcmVzIGJsYW5rIGxpbmVzIGJldHdlZW4gZW50cmllcywgYnV0IFVuaWZvcnVtIHN0eWxlIFBPCmZpbGVzIGRvbid0IGhhdmUgYW55LgoKUGxlYXNlIHN1Ym1pdCBhbGwgYnVnIHJlcXVlc3RzIHVzaW5nIENQQU4ncyB0aWNrZXRpbmcgc3lzdGVtLgoKPWhlYWQxIFNFRSBBTFNPCgp4Z2V0dGV4dCgxKS4KCj1jdXQK</File>
        <File Location="Kernel/cpan-lib/Perl/Tidy.pod" Permission="660" Encode="Base64">Cj1oZWFkMSBOQU1FCgpQZXJsOjpUaWR5IC0gUGFyc2VzIGFuZCBiZWF1dGlmaWVzIHBlcmwgc291cmNlCgo9aGVhZDEgU1lOT1BTSVMKCiAgICB1c2UgUGVybDo6VGlkeTsKCiAgICBteSAkZXJyb3JfZmxhZyA9IFBlcmw6OlRpZHk6OnBlcmx0aWR5KAogICAgICAgIHNvdXJjZSAgICAgICAgICAgID0+ICRzb3VyY2UsCiAgICAgICAgZGVzdGluYXRpb24gICAgICAgPT4gJGRlc3RpbmF0aW9uLAogICAgICAgIHN0ZGVyciAgICAgICAgICAgID0+ICRzdGRlcnIsCiAgICAgICAgYXJndiAgICAgICAgICAgICAgPT4gJGFyZ3YsCiAgICAgICAgcGVybHRpZHlyYyAgICAgICAgPT4gJHBlcmx0aWR5cmMsCiAgICAgICAgbG9nZmlsZSAgICAgICAgICAgPT4gJGxvZ2ZpbGUsCiAgICAgICAgZXJyb3JmaWxlICAgICAgICAgPT4gJGVycm9yZmlsZSwKICAgICAgICB0ZWVmaWxlICAgICAgICAgICA9PiAkdGVlZmlsZSwKICAgICAgICBkZWJ1Z2ZpbGUgICAgICAgICA9PiAkZGVidWdmaWxlLAogICAgICAgIGZvcm1hdHRlciAgICAgICAgID0+ICRmb3JtYXR0ZXIsICAgICMgY2FsbGJhY2sgb2JqZWN0IChzZWUgYmVsb3cpCiAgICAgICAgZHVtcF9vcHRpb25zICAgICAgPT4gJGR1bXBfb3B0aW9ucywKICAgICAgICBkdW1wX29wdGlvbnNfdHlwZSA9PiAkZHVtcF9vcHRpb25zX3R5cGUsCiAgICAgICAgcHJlZmlsdGVyICAgICAgICAgPT4gJHByZWZpbHRlcl9jb2RlcmVmLAogICAgICAgIHBvc3RmaWx0ZXIgICAgICAgID0+ICRwb3N0ZmlsdGVyX2NvZGVyZWYsCiAgICApOwoKPWhlYWQxIERFU0NSSVBUSU9OCgpUaGlzIG1vZHVsZSBtYWtlcyB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgcGVybHRpZHkgdXRpbGl0eSBhdmFpbGFibGUgdG8gcGVybApzY3JpcHRzLiAgQW55IG9yIGFsbCBvZiB0aGUgaW5wdXQgcGFyYW1ldGVycyBtYXkgYmUgb21pdHRlZCwgaW4gd2hpY2ggY2FzZSB0aGUKQEFSR1YgYXJyYXkgd2lsbCBiZSB1c2VkIHRvIHByb3ZpZGUgaW5wdXQgcGFyYW1ldGVycyBhcyBkZXNjcmliZWQKaW4gdGhlIHBlcmx0aWR5KDEpIG1hbiBwYWdlLgoKRm9yIGV4YW1wbGUsIHRoZSBwZXJsdGlkeSBzY3JpcHQgaXMgYmFzaWNhbGx5IGp1c3QgdGhpczoKCiAgICB1c2UgUGVybDo6VGlkeTsKICAgIFBlcmw6OlRpZHk6OnBlcmx0aWR5KCk7CgpUaGUgY2FsbCB0byBCPHBlcmx0aWR5PiByZXR1cm5zIGEgc2NhbGFyIEI8JGVycm9yX2ZsYWc+IHdoaWNoIGlzIFRSVUUgaWYgYW4KZXJyb3IgY2F1c2VkIHByZW1hdHVyZSB0ZXJtaW5hdGlvbiwgYW5kIEZBTFNFIGlmIHRoZSBwcm9jZXNzIHJhbiB0byBub3JtYWwKY29tcGxldGlvbi4gIEFkZGl0aW9uYWwgZGlzY3VzcyBvZiBlcnJvcnMgaXMgY29udGFpbmVkIGJlbG93IGluIHRoZQpMPEVSUk9SIEhBTkRMSU5HfCJFUlJPUiBIQU5ETElORyI+IHNlY3Rpb24uCgpUaGUgbW9kdWxlIGFjY2VwdHMgaW5wdXQgYW5kIG91dHB1dCBzdHJlYW1zIGJ5IGEgdmFyaWV0eSBvZiBtZXRob2RzLgpUaGUgZm9sbG93aW5nIGxpc3Qgb2YgcGFyYW1ldGVycyBtYXkgYmUgYW55IG9mIHRoZSBmb2xsb3dpbmc6IGEKZmlsZW5hbWUsIGFuIEFSUkFZIHJlZmVyZW5jZSwgYSBTQ0FMQVIgcmVmZXJlbmNlLCBvciBhbiBvYmplY3Qgd2l0aAplaXRoZXIgYSBCPGdldGxpbmU+IG9yIEI8cHJpbnQ+IG1ldGhvZCwgYXMgYXBwcm9wcmlhdGUuCgogICAgc291cmNlICAgICAgICAgICAgLSB0aGUgc291cmNlIG9mIHRoZSBzY3JpcHQgdG8gYmUgZm9ybWF0dGVkCiAgICBkZXN0aW5hdGlvbiAgICAgICAtIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgZm9ybWF0dGVkIG91dHB1dAogICAgc3RkZXJyICAgICAgICAgICAgLSBzdGFuZGFyZCBlcnJvciBvdXRwdXQKICAgIHBlcmx0aWR5cmMgICAgICAgIC0gdGhlIC5wZXJsdGlkeXJjIGZpbGUKICAgIGxvZ2ZpbGUgICAgICAgICAgIC0gdGhlIC5MT0cgZmlsZSBzdHJlYW0sIGlmIGFueQogICAgZXJyb3JmaWxlICAgICAgICAgLSB0aGUgLkVSUiBmaWxlIHN0cmVhbSwgaWYgYW55CiAgICBkdW1wX29wdGlvbnMgICAgICAtIHJlZiB0byBhIGhhc2ggdG8gcmVjZWl2ZSBwYXJhbWV0ZXJzIChzZWUgYmVsb3cpLAogICAgZHVtcF9vcHRpb25zX3R5cGUgLSBjb250cm9scyBjb250ZW50cyBvZiBkdW1wX29wdGlvbnMKICAgIGR1bXBfZ2V0b3B0X2ZsYWdzIC0gcmVmIHRvIGEgaGFzaCB0byByZWNlaXZlIEdldG9wdCBmbGFncwogICAgZHVtcF9vcHRpb25zX2NhdGVnb3J5IC0gcmVmIHRvIGEgaGFzaCBnaXZpbmcgY2F0ZWdvcnkgb2Ygb3B0aW9ucwogICAgZHVtcF9hYmJyZXZpYXRpb25zICAgIC0gcmVmIHRvIGEgaGFzaCBnaXZpbmcgYWxsIGFiYnJldmlhdGlvbnMKClRoZSBmb2xsb3dpbmcgY2hhcnQgaWxsdXN0cmF0ZXMgdGhlIGxvZ2ljIHVzZWQgdG8gZGVjaWRlIGhvdyB0bwp0cmVhdCBhIHBhcmFtZXRlci4KCiAgIHJlZigkcGFyYW0pICAkcGFyYW0gaXMgYXNzdW1lZCB0byBiZToKICAgLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICB1bmRlZiAgICAgICAgYSBmaWxlbmFtZQogICBTQ0FMQVIgICAgICAgcmVmIHRvIHN0cmluZwogICBBUlJBWSAgICAgICAgcmVmIHRvIGFycmF5CiAgIChvdGhlcikgICAgICBvYmplY3Qgd2l0aCBnZXRsaW5lIChpZiBzb3VyY2UpIG9yIHByaW50IG1ldGhvZAoKSWYgdGhlIHBhcmFtZXRlciBpcyBhbiBvYmplY3QsIGFuZCB0aGUgb2JqZWN0IGhhcyBhIEI8Y2xvc2U+IG1ldGhvZCwgdGhhdApjbG9zZSBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLgoKPW92ZXIgNAoKPWl0ZW0gQjxzb3VyY2U+CgpJZiB0aGUgQjxzb3VyY2U+IHBhcmFtZXRlciBpcyBnaXZlbiwgaXQgZGVmaW5lcyB0aGUgc291cmNlIG9mIHRoZSBpbnB1dCBzdHJlYW0uCklmIGFuIGlucHV0IHN0cmVhbSBpcyBkZWZpbmVkIHdpdGggdGhlIEI8c291cmNlPiBwYXJhbWV0ZXIgdGhlbiBubyBvdGhlciBzb3VyY2UKZmlsZW5hbWVzIG1heSBiZSBzcGVjaWZpZWQgaW4gdGhlIEBBUkdWIGFycmF5IG9yIEI8YXJndj4gcGFyYW1ldGVyLgoKPWl0ZW0gQjxkZXN0aW5hdGlvbj4KCklmIHRoZSBCPGRlc3RpbmF0aW9uPiBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIGl0IHdpbGwgYmUgdXNlZCB0byBkZWZpbmUgdGhlCmZpbGUgb3IgbWVtb3J5IGxvY2F0aW9uIHRvIHJlY2VpdmUgb3V0cHV0IG9mIHBlcmx0aWR5LgoKQjxJbXBvcnRhbnQgbm90ZSBpZiBkZXN0aW5hdGlvbiBpcyBhIHN0cmluZyBvciBhcnJheSByZWZlcmVuY2U+LiAgUGVybCBzdHJpbmdzCm9mIGNoYXJhY3RlcnMgd2hpY2ggYXJlIGRlY29kZWQgYXMgdXRmOCBieSBQZXJsOjpUaWR5IGNhbiBiZSByZXR1cm5lZCBpbiBlaXRoZXIKb2YgdHdvIHBvc3NpYmxlIHN0YXRlcywgZGVjb2RlZCBvciBlbmNvZGVkLCBhbmQgaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlCmNhbGxpbmcgcHJvZ3JhbSBhbmQgUGVybDo6VGlkeSBhcmUgaW4gYWdyZWVtZW50IHJlZ2FyZGluZyB0aGUgc3RhdGUgdG8gYmUKcmV0dXJuZWQuICBBIGZsYWcgQjwtLWVuY29kZS1vdXRwdXQtc3RyaW5ncz4sIG9yIHNpbXBseSBCPC1lb3M+LCB3YXMgYWRkZWQgaW4KUGVybDo6VGlkeSB2ZXJzaW9uIDIwMjIwMjE3IGZvciB0aGlzIHB1cnBvc2UuCgo9b3ZlciA0Cgo9aXRlbSAqCgpVc2UgQjwtZW9zPiBpZiBQZXJsOjpUaWR5IHNob3VsZCBlbmNvZGUgYW55IHN0cmluZyB3aGljaCBpdCBkZWNvZGVzLiAgVGhpcyBpcwp0aGUgY3VycmVudCBkZWZhdWx0IGJlY2F1c2UgaXQgbWFrZXMgcGVybHRpZHkgYmVoYXZlIHdlbGwgYXMgYSBmaWx0ZXIsIGFuZCBpcwp0aGUgY29ycmVjdCBzZXR0aW5nIGZvciBtb3N0IHByb2dyYW1zLiAgQnV0IGRvIG5vdCB1c2UgdGhpcyBzZXR0aW5nIGlmIHRoZQpjYWxsaW5nIHByb2dyYW0gd2lsbCBlbmNvZGUgdGhlIGRhdGEgdG9vLCBiZWNhdXNlIGRvdWJsZSBlbmNvZGluZyB3aWxsIGNvcnJ1cHQKZGF0YS4KCj1pdGVtICoKClVzZSBCPC1uZW9zPiBpZiBhIHN0cmluZyBzaG91bGQgcmVtYWluIGRlY29kZWQgaWYgaXQgd2FzIGRlY29kZWQgYnkgUGVybDo6VGlkeS4KVGhpcyBpcyBvbmx5IGFwcHJvcHJpYXRlIGlmIHRoZSBjYWxsaW5nIHByb2dyYW0gd2lsbCBoYW5kbGUgYW55IG5lZWRlZCBlbmNvZGluZwpiZWZvcmUgb3V0cHV0dGluZyB0aGUgc3RyaW5nLiAgSWYgbmVlZGVkLCB0aGlzIGZsYWcgY2FuIGJlIGFkZGVkIHRvIHRoZSBlbmQgb2YKdGhlIEI8YXJndj4gcGFyYW1ldGVyIHBhc3NlZCB0byBQZXJsOjpUaWR5LgoKPWJhY2sKCkZvciBzb21lIGJhY2tncm91bmQgaW5mb3JtYXRpb24gc2VlCkw8aHR0cHM6Ly9naXRodWIuY29tL3Blcmx0aWR5L3Blcmx0aWR5L2Jsb2IvbWFzdGVyL2RvY3MvZW9zX2ZsYWcubWQ+LgoKVGhpcyBjaGFuZ2UgaW4gZGVmYXVsdCBiZWhhdmlvciB3YXMgbWFkZSBvdmVyIGEgcGVyaW9kIG9mIHRpbWUgYXMgZm9sbG93czoKCj1vdmVyIDQKCj1pdGVtICoKCkZvciB2ZXJzaW9ucyBiZWZvcmUgMjAyMjAyMTcgdGhlIEI8LWVvcz4gZmxhZyB3YXMgbm90IGF2YWlsYWJsZSBhbmQgdGhlIGJlaGF2aW9yIHdhcyBlcXVpdmFsZW50IHRvIEI8LW5lb3M+LgoKPWl0ZW0gKgoKSW4gdmVyc2lvbiAyMDIyMDIxNyB0aGUgQjwtZW9zPiBmbGFnIHdhcyBhZGRlZCBidXQgdGhlIGRlZmF1bHQgcmVtYWluZWQgQjwtbmVvcz4uCgo9aXRlbSAqCgpGb3IgdmVyc2lvbnMgYWZ0ZXIgMjAyMjAyMTcgdGhlIGRlZmF1bHQgd2FzIHNldCB0byBCPC1lb3M+LgoKPWJhY2sKCj1pdGVtIEI8c3RkZXJyPgoKVGhlIEI8c3RkZXJyPiBwYXJhbWV0ZXIgYWxsb3dzIHRoZSBjYWxsaW5nIHByb2dyYW0gdG8gcmVkaXJlY3QgdGhlIHN0cmVhbSB0aGF0CndvdWxkIG90aGVyd2lzZSBnbyB0byB0aGUgc3RhbmRhcmQgZXJyb3Igb3V0cHV0IGRldmljZSB0byBhbnkgb2YgdGhlIHN0cmVhbQp0eXBlcyBsaXN0ZWQgYWJvdmUuICBUaGlzIHN0cmVhbSBjb250YWlucyBpbXBvcnRhbnQgd2FybmluZ3MgYW5kIGVycm9ycwpyZWxhdGVkIHRvIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byBwZXJsdGlkeS4KCj1pdGVtIEI8cGVybHRpZHlyYz4KCklmIHRoZSBCPHBlcmx0aWR5cmM+IGZpbGUgaXMgZ2l2ZW4sIGl0IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIGFueQpGPC5wZXJsdGlkeXJjPiBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCB3b3VsZCBvdGhlcndpc2UgYmUgdXNlZC4KCj1pdGVtIEI8ZXJyb3JmaWxlPgoKVGhlIEI8ZXJyb3JmaWxlPiBwYXJhbWV0ZXIgYWxsb3dzIHRoZSBjYWxsaW5nIHByb2dyYW0gdG8gY2FwdHVyZQp0aGUgc3RyZWFtIHRoYXQgd291bGQgb3RoZXJ3aXNlIGdvIHRvIGVpdGhlciBhIC5FUlIgZmlsZS4gIFRoaXMKc3RyZWFtIGNvbnRhaW5zIHdhcm5pbmdzIG9yIGVycm9ycyByZWxhdGVkIHRvIHRoZSBjb250ZW50cyBvZiBvbmUKc291cmNlIGZpbGUgb3Igc3RyZWFtLgoKVGhlIHJlYXNvbiB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIHN0ZGVyciBzdHJlYW0gaXMgdGhhdCB3aGVuIHBlcmx0aWR5CmlzIGNhbGxlZCB0byBwcm9jZXNzIG11bHRpcGxlIGZpbGVzIHRoZXJlIHdpbGwgYmUgdXAgdG8gb25lIC5FUlIgZmlsZSBjcmVhdGVkCmZvciBlYWNoIGZpbGUgYW5kIGl0IHdvdWxkIGJlIHZlcnkgY29uZnVzaW5nIGlmIHRoZXkgd2VyZSBjb21iaW5lZC4KCkhvd2V2ZXIgaWYgcGVybHRpZHkgaXMgY2FsbGVkIHRvIHByb2Nlc3MganVzdCBhIHNpbmdsZSBwZXJsIHNjcmlwdCB0aGVuIGl0IG1heQpiZSBtb3JlIGNvbnZlbmllbnQgdG8gY29tYmluZSB0aGUgQjxlcnJvcmZpbGU+IHN0cmVhbSB3aXRoIHRoZSBCPHN0ZGVycj4Kc3RyZWFtLiAgVGhpcyBjYW4gYmUgZG9uZSBieSBzZXR0aW5nIHRoZSBCPC1zZT4gcGFyYW1ldGVyLCBpbiB3aGljaCBjYXNlIHRoaXMKcGFyYW1ldGVyIGlzIGlnbm9yZWQuCgo9aXRlbSBCPGxvZ2ZpbGU+CgpUaGUgQjxsb2dmaWxlPiBwYXJhbWV0ZXIgYWxsb3dzIHRoZSBjYWxsaW5nIHByb2dyYW0gdG8gY2FwdHVyZSB0aGUgbG9nIHN0cmVhbS4KVGhpcyBzdHJlYW0gaXMgb25seSBjcmVhdGVkIGlmIHJlcXVlc3RlZCB3aXRoIGEgQjwtZz4gcGFyYW1ldGVyLiAgSXQgY29udGFpbnMKZGV0YWlsZWQgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBhYm91dCBhIHNjcmlwdCB3aGljaCBtYXkgYmUgdXNlZnVsIGZvcgpkZWJ1Z2dpbmcuCgo9aXRlbSBCPHRlZWZpbGU+CgpUaGUgQjx0ZWVmaWxlPiBwYXJhbWV0ZXIgYWxsb3dzIHRoZSBjYWxsaW5nIHByb2dyYW0gdG8gY2FwdHVyZSB0aGUgdGVlIHN0cmVhbS4KVGhpcyBzdHJlYW0gaXMgb25seSBjcmVhdGVkIGlmIHJlcXVlc3RlZCB3aXRoIG9uZSBvZiB0aGUgJ3RlZScgcGFyYW1ldGVycywKYSBCPC0tdGVlLXBvZD4gLCBCPC0tdGVlLWJsb2NrLWNvbW1lbnRzPiwgQjwtLXRlZS1zaWRlLWNvbW1udHM+LCBvciBCPC0tdGVlLWFsbC1jb21tZW50cz4uCgo9aXRlbSBCPGRlYnVnZmlsZT4KClRoZSBCPGRlYnVnZmlsZT4gcGFyYW1ldGVyIGFsbG93cyB0aGUgY2FsbGluZyBwcm9ncmFtIHRvIGNhcHR1cmUgdGhlIHN0cmVhbQpwcm9kdWNlZCBieSB0aGUgQjwtLURFQlVHPiBwYXJhbWV0ZXIuICBUaGlzIHBhcmFtZXRlciBpcyBtYWlubHkgdXNlZCBmb3IKZGVidWdnaW5nIHBlcmx0aWR5IGl0c2VsZi4KCj1pdGVtIEI8YXJndj4KCklmIHRoZSBCPGFyZ3Y+IHBhcmFtZXRlciBpcyBnaXZlbiwgaXQgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlCkI8QEFSR1Y+IGFycmF5LiAgVGhlIEI8YXJndj4gcGFyYW1ldGVyIG1heSBiZSBhIHN0cmluZywgYSByZWZlcmVuY2UgdG8gYQpzdHJpbmcsIG9yIGEgcmVmZXJlbmNlIHRvIGFuIGFycmF5LiAgSWYgaXQgaXMgYSBzdHJpbmcgb3IgcmVmZXJlbmNlIHRvIGEKc3RyaW5nLCBpdCB3aWxsIGJlIHBhcnNlZCBpbnRvIGFuIGFycmF5IG9mIGl0ZW1zIGp1c3QgYXMgaWYgaXQgd2VyZSBhCmNvbW1hbmQgbGluZSBzdHJpbmcuCgo9aXRlbSBCPGR1bXBfb3B0aW9ucz4KCklmIHRoZSBCPGR1bXBfb3B0aW9ucz4gcGFyYW1ldGVyIGlzIGdpdmVuLCBpdCBtdXN0IGJlIHRoZSByZWZlcmVuY2UgdG8gYSBoYXNoLgpJbiB0aGlzIGNhc2UsIHRoZSBwYXJhbWV0ZXJzIGNvbnRhaW5lZCBpbiBhbnkgcGVybHRpZHlyYyBjb25maWd1cmF0aW9uIGZpbGUKd2lsbCBiZSBwbGFjZWQgaW4gdGhpcyBoYXNoIGFuZCBwZXJsdGlkeSB3aWxsIHJldHVybiBpbW1lZGlhdGVseS4gIFRoaXMgaXMKZXF1aXZhbGVudCB0byBydW5uaW5nIHBlcmx0aWR5IHdpdGggLS1kdW1wLW9wdGlvbnMsIGV4Y2VwdCB0aGF0IHRoZSBwYXJhbWV0ZXJzCmFyZSByZXR1cm5lZCBpbiBhIGhhc2ggcmF0aGVyIHRoYW4gZHVtcGVkIHRvIHN0YW5kYXJkIG91dHB1dC4gIEFsc28sIGJ5IGRlZmF1bHQKb25seSB0aGUgcGFyYW1ldGVycyBpbiB0aGUgcGVybHRpZHlyYyBmaWxlIGFyZSByZXR1cm5lZCwgYnV0IHRoaXMgY2FuIGJlCmNoYW5nZWQgKHNlZSB0aGUgbmV4dCBwYXJhbWV0ZXIpLiAgVGhpcyBwYXJhbWV0ZXIgcHJvdmlkZXMgYSBjb252ZW5pZW50IG1ldGhvZApmb3IgZXh0ZXJuYWwgcHJvZ3JhbXMgdG8gcmVhZCBhIHBlcmx0aWR5cmMgZmlsZS4gIEFuIGV4YW1wbGUgcHJvZ3JhbSB1c2luZwp0aGlzIGZlYXR1cmUsIEY8cGVybHRpZHlyY19kdW1wLnBsPiwgaXMgaW5jbHVkZWQgaW4gdGhlIGRpc3RyaWJ1dGlvbi4KCkFueSBjb21iaW5hdGlvbiBvZiB0aGUgQjxkdW1wXz4gcGFyYW1ldGVycyBtYXkgYmUgdXNlZCB0b2dldGhlci4KCj1pdGVtIEI8ZHVtcF9vcHRpb25zX3R5cGU+CgpUaGlzIHBhcmFtZXRlciBpcyBhIHN0cmluZyB3aGljaCBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSBwYXJhbWV0ZXJzIHBsYWNlZAppbiB0aGUgaGFzaCByZWZlcmVuY2Ugc3VwcGxpZWQgYnkgQjxkdW1wX29wdGlvbnM+LiAgVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmUKJ3Blcmx0aWR5cmMnIChkZWZhdWx0KSBhbmQgJ2Z1bGwnLiAgVGhlICdmdWxsJyBwYXJhbWV0ZXIgY2F1c2VzIGJvdGggdGhlCmRlZmF1bHQgb3B0aW9ucyBwbHVzIGFueSBvcHRpb25zIGZvdW5kIGluIGEgcGVybHRpZHlyYyBmaWxlIHRvIGJlIHJldHVybmVkLgoKPWl0ZW0gQjxkdW1wX2dldG9wdF9mbGFncz4KCklmIHRoZSBCPGR1bXBfZ2V0b3B0X2ZsYWdzPiBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIGl0IG11c3QgYmUgdGhlIHJlZmVyZW5jZSB0byBhCmhhc2guICBUaGlzIGhhc2ggd2lsbCByZWNlaXZlIGFsbCBvZiB0aGUgcGFyYW1ldGVycyB0aGF0IHBlcmx0aWR5IHVuZGVyc3RhbmRzCmFuZCBmbGFncyB0aGF0IGFyZSBwYXNzZWQgdG8gR2V0b3B0OjpMb25nLiAgVGhpcyBwYXJhbWV0ZXIgbWF5IGJlCnVzZWQgYWxvbmUgb3Igd2l0aCB0aGUgQjxkdW1wX29wdGlvbnM+IGZsYWcuICBQZXJsdGlkeSB3aWxsCmV4aXQgaW1tZWRpYXRlbHkgYWZ0ZXIgZmlsbGluZyB0aGlzIGhhc2guICBTZWUgdGhlIGRlbW8gcHJvZ3JhbQpGPHBlcmx0aWR5cmNfZHVtcC5wbD4gZm9yIGV4YW1wbGUgdXNhZ2UuCgo9aXRlbSBCPGR1bXBfb3B0aW9uc19jYXRlZ29yeT4KCklmIHRoZSBCPGR1bXBfb3B0aW9uc19jYXRlZ29yeT4gcGFyYW1ldGVyIGlzIGdpdmVuLCBpdCBtdXN0IGJlIHRoZSByZWZlcmVuY2UgdG8gYQpoYXNoLiAgVGhpcyBoYXNoIHdpbGwgcmVjZWl2ZSBhIGhhc2ggd2l0aCBrZXlzIGVxdWFsIHRvIGFsbCBsb25nIHBhcmFtZXRlciBuYW1lcwphbmQgdmFsdWVzIGVxdWFsIHRvIHRoZSB0aXRsZSBvZiB0aGUgY29ycmVzcG9uZGluZyBzZWN0aW9uIG9mIHRoZSBwZXJsdGlkeSBtYW51YWwuClNlZSB0aGUgZGVtbyBwcm9ncmFtIEY8cGVybHRpZHlyY19kdW1wLnBsPiBmb3IgZXhhbXBsZSB1c2FnZS4KCj1pdGVtIEI8ZHVtcF9hYmJyZXZpYXRpb25zPgoKSWYgdGhlIEI8ZHVtcF9hYmJyZXZpYXRpb25zPiBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIGl0IG11c3QgYmUgdGhlIHJlZmVyZW5jZSB0byBhCmhhc2guICBUaGlzIGhhc2ggd2lsbCByZWNlaXZlIGFsbCBhYmJyZXZpYXRpb25zIHVzZWQgYnkgUGVybDo6VGlkeS4gIFNlZSB0aGUKZGVtbyBwcm9ncmFtIEY8cGVybHRpZHlyY19kdW1wLnBsPiBmb3IgZXhhbXBsZSB1c2FnZS4KCj1pdGVtIEI8cHJlZmlsdGVyPgoKQSBjb2RlIHJlZmVyZW5jZSB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgc291cmNlIGJlZm9yZSB0aWR5aW5nLiBJdCBpcwpleHBlY3RlZCB0byB0YWtlIHRoZSBmdWxsIGNvbnRlbnQgYXMgYSBzdHJpbmcgaW4gaXRzIGlucHV0LCBhbmQgb3V0cHV0IHRoZQp0cmFuc2Zvcm1lZCBjb250ZW50LgoKPWl0ZW0gQjxwb3N0ZmlsdGVyPgoKQSBjb2RlIHJlZmVyZW5jZSB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgdGlkaWVkIHJlc3VsdCBiZWZvcmUgb3V0cHV0dGluZy4KSXQgaXMgZXhwZWN0ZWQgdG8gdGFrZSB0aGUgZnVsbCBjb250ZW50IGFzIGEgc3RyaW5nIGluIGl0cyBpbnB1dCwgYW5kIG91dHB1dAp0aGUgdHJhbnNmb3JtZWQgY29udGVudC4KCk5vdGU6IEEgY29udmVuaWVudCB3YXkgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uIG9mIHlvdXIgY3VzdG9tIHByZWZpbHRlciBhbmQKcG9zdGZpbHRlciBjb2RlIGlzIHRvIHVzZSB0aGUgLS1ub3RpZHkgb3B0aW9uLCBmaXJzdCB3aXRoIGp1c3QgdGhlIHByZWZpbHRlcgphbmQgdGhlbiB3aXRoIGJvdGggdGhlIHByZWZpbHRlciBhbmQgcG9zdGZpbHRlci4gIFNlZSBhbHNvIHRoZSBmaWxlCkI8ZmlsdGVyX2V4YW1wbGUucGw+IGluIHRoZSBwZXJsdGlkeSBkaXN0cmlidXRpb24uCgo9YmFjawoKPWhlYWQxIEVSUk9SIEhBTkRMSU5HCgpBbiBleGl0IHZhbHVlIG9mIDAsIDEsIG9yIDIgaXMgcmV0dXJuZWQgYnkgcGVybHRpZHkgdG8gaW5kaWNhdGUgdGhlIHN0YXR1cyBvZiB0aGUgcmVzdWx0LgoKQSBleGl0IHZhbHVlIG9mIDAgaW5kaWNhdGVzIHRoYXQgcGVybHRpZHkgcmFuIHRvIGNvbXBsZXRpb24gd2l0aCBubyBlcnJvciBtZXNzYWdlcy4KCkFuIGV4aXQgdmFsdWUgb2YgMSBpbmRpY2F0ZXMgdGhhdCB0aGUgcHJvY2VzcyBoYWQgdG8gYmUgdGVybWluYXRlZCBlYXJseSBkdWUgdG8KZXJyb3JzIGluIHRoZSBpbnB1dCBwYXJhbWV0ZXJzLiAgVGhpcyBjYW4gaGFwcGVuIGZvciBleGFtcGxlIGlmIGEgcGFyYW1ldGVyIGlzCm1pc3NwZWxsZWQgb3IgZ2l2ZW4gYW4gaW52YWxpZCB2YWx1ZS4gIFRoZSBjYWxsaW5nIHByb2dyYW0gc2hvdWxkIGNoZWNrIGZvcgp0aGlzIGZsYWcgYmVjYXVzZSBpZiBpdCBpcyBzZXQgdGhlIGRlc3RpbmF0aW9uIHN0cmVhbSB3aWxsIGJlIGVtcHR5IG9yCmluY29tcGxldGUgYW5kIHNob3VsZCBiZSBpZ25vcmVkLiAgRXJyb3IgbWVzc2FnZXMgaW4gdGhlIEI8c3RkZXJyPiBzdHJlYW0gd2lsbAppbmRpY2F0ZSB0aGUgY2F1c2Ugb2YgYW55IHByb2JsZW0uCgpBbiBleGl0IHZhbHVlIG9mIDIgaW5kaWNhdGVzIHRoYXQgcGVybHRpZHkgcmFuIHRvIGNvbXBsZXRpb24gYnV0IHRoZXJlCmFyZSB3YXJuaW5nIG1lc3NhZ2VzIGluIHRoZSBCPHN0ZGVycj4gc3RyZWFtIHJlbGF0ZWQgdG8gcGFyYW1ldGVyIGVycm9ycyBvcgpjb25mbGljdHMgYW5kL29yIHdhcm5pbmcgbWVzc2FnZXMgaW4gdGhlIEI8ZXJyb3JmaWxlPiBzdHJlYW0gcmVsYXRpbmcgdG8KcG9zc2libGUgc3ludGF4IGVycm9ycyBpbiB0aGUgc291cmNlIGNvZGUgYmVpbmcgdGlkaWVkLgoKSW4gdGhlIGV2ZW50IG9mIGEgY2F0YXN0cm9waGljIGVycm9yIGZvciB3aGljaCByZWNvdmVyeSBpcyBub3QgcG9zc2libGUKQjxwZXJsdGlkeT4gdGVybWluYXRlcyBieSBtYWtpbmcgY2FsbHMgdG8gQjxjcm9haz4gb3IgQjxjb25mZXNzPiB0byBoZWxwIHRoZQpwcm9ncmFtbWVyIGxvY2FsaXplIHRoZSBwcm9ibGVtLiAgVGhlc2Ugc2hvdWxkIG5vcm1hbGx5IG9ubHkgb2NjdXIgZHVyaW5nCnByb2dyYW0gZGV2ZWxvcG1lbnQuCgo9aGVhZDEgTk9URVMgT04gRk9STUFUVElORyBQQVJBTUVURVJTCgpQYXJhbWV0ZXJzIHdoaWNoIGNvbnRyb2wgZm9ybWF0dGluZyBtYXkgYmUgcGFzc2VkIGluIHNldmVyYWwgd2F5czogaW4gYQpGPC5wZXJsdGlkeXJjPiBjb25maWd1cmF0aW9uIGZpbGUsIGluIHRoZSBCPHBlcmx0aWR5cmM+IHBhcmFtZXRlciwgYW5kIGluIHRoZQpCPGFyZ3Y+IHBhcmFtZXRlci4KCklmIHRoZSBCPC1wYnA+IHN0eWxlIGlzIHVzZWQgaXQgd2lsbCB0eXBpY2FsbHkgYmUgbmVjZXNzYXJ5IHRvIGFsc28Kc3BlY2lmeSBhIEI8LW5zdD4gZmxhZy4gIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHR1cm4gb2ZmIHRoZSBCPC1zdD4gZmxhZwpjb250YWluZWQgaW4gdGhlIEI8LXBicD4gcGFyYW1ldGVyIHNldCB3aGljaCBvdGhlcndpc2Ugd291bGQgZGlyZWN0CnRoZSBvdXRwdXQgc3RyZWFtIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuCgo9aGVhZDEgRVhBTVBMRVMKClRoZSBmb2xsb3dpbmcgZXhhbXBsZSB1c2VzIHN0cmluZyByZWZlcmVuY2VzIHRvIGhvbGQgdGhlIGlucHV0IGFuZCBvdXRwdXQKY29kZSBhbmQgZXJyb3Igc3RyZWFtcywgYW5kIGlsbHVzdHJhdGVzIGNoZWNraW5nIGZvciBlcnJvcnMuCgogIHVzZSBQZXJsOjpUaWR5OwoKICBteSAkc291cmNlX3N0cmluZyA9IDw8J0VPVCc7CiAgbXkkZXJyb3I9UGVybDo6VGlkeTo6cGVybHRpZHkoYXJndj0+JGFyZ3Ysc291cmNlPT5cJHNvdXJjZV9zdHJpbmcsCiAgICBkZXN0aW5hdGlvbj0+XCRkZXN0X3N0cmluZyxzdGRlcnI9Plwkc3RkZXJyX3N0cmluZywKICBlcnJvcmZpbGU9PlwkZXJyb3JmaWxlX3N0cmluZywpOwogIEVPVAoKICBteSAkZGVzdF9zdHJpbmc7CiAgbXkgJHN0ZGVycl9zdHJpbmc7CiAgbXkgJGVycm9yZmlsZV9zdHJpbmc7CiAgbXkgJGFyZ3YgPSAiLW5wcm8iOyAgICMgSWdub3JlIGFueSAucGVybHRpZHlyYyBhdCB0aGlzIHNpdGUKICAkYXJndiAuPSAiIC1wYnAiOyAgICAgIyBGb3JtYXQgYWNjb3JkaW5nIHRvIHBlcmwgYmVzdCBwcmFjdGljZXMKICAkYXJndiAuPSAiIC1uc3QiOyAgICAgIyBNdXN0IHR1cm4gb2ZmIC1zdCBpbiBjYXNlIC1wYnAgaXMgc3BlY2lmaWVkCiAgJGFyZ3YgLj0gIiAtc2UiOyAgICAgICMgLXNlIGFwcGVuZHMgdGhlIGVycm9yZmlsZSB0byBzdGRlcnIKICAjIyAkYXJndiAuPSAiIC0tc3BlbGwtY2hlY2siOyAgIyB1bmNvbW1lbnQgdG8gdHJpZ2dlciBhbiBlcnJvcgoKICBwcmludCAiPDxSQVcgU09VUkNFPj5cbiRzb3VyY2Vfc3RyaW5nXG4iOwoKICBteSAkZXJyb3IgPSBQZXJsOjpUaWR5OjpwZXJsdGlkeSgKICAgICAgYXJndiAgICAgICAgPT4gJGFyZ3YsCiAgICAgIHNvdXJjZSAgICAgID0+IFwkc291cmNlX3N0cmluZywKICAgICAgZGVzdGluYXRpb24gPT4gXCRkZXN0X3N0cmluZywKICAgICAgc3RkZXJyICAgICAgPT4gXCRzdGRlcnJfc3RyaW5nLAogICAgICBlcnJvcmZpbGUgICA9PiBcJGVycm9yZmlsZV9zdHJpbmcsICAjIGlnbm9yZWQgd2hlbiAtc2UgZmxhZyBpcyBzZXQKICAgICAgIyNwaGFzZXJzICAgPT4gJ3N0dW4nLCAgICAgICAgICAgICAgIyB1bmNvbW1lbnQgdG8gdHJpZ2dlciBhbiBlcnJvcgogICk7CgogIGlmICgkZXJyb3IpIHsKCiAgICAgICMgc2VyaW91cyBlcnJvciBpbiBpbnB1dCBwYXJhbWV0ZXJzLCBubyB0aWRpZWQgb3V0cHV0CiAgICAgIHByaW50ICI8PFNUREVSUj4+XG4kc3RkZXJyX3N0cmluZ1xuIjsKICAgICAgZGllICJFeGl0aW5nIGJlY2F1c2Ugb2Ygc2VyaW91cyBlcnJvcnNcbiI7CiAgfQoKICBpZiAoJGRlc3Rfc3RyaW5nKSAgICAgIHsgcHJpbnQgIjw8VElESUVEIFNPVVJDRT4+XG4kZGVzdF9zdHJpbmdcbiIgfQogIGlmICgkc3RkZXJyX3N0cmluZykgICAgeyBwcmludCAiPDxTVERFUlI+PlxuJHN0ZGVycl9zdHJpbmdcbiIgfQogIGlmICgkZXJyb3JmaWxlX3N0cmluZykgeyBwcmludCAiPDwuRVJSIGZpbGU+PlxuJGVycm9yZmlsZV9zdHJpbmdcbiIgfQoKQWRkaXRpb25hbCBleGFtcGxlcyBhcmUgZ2l2ZW4gaW4gZXhhbXBsZXMgc2VjdGlvbiBvZiB0aGUgcGVybHRpZHkgZGlzdHJpYnV0aW9uLgoKPWhlYWQxIFVzaW5nIHRoZSBCPGZvcm1hdHRlcj4gQ2FsbGJhY2sgT2JqZWN0CgpUaGUgQjxmb3JtYXR0ZXI+IHBhcmFtZXRlciBpcyBhbiBvcHRpb25hbCBjYWxsYmFjayBvYmplY3Qgd2hpY2ggYWxsb3dzCnRoZSBjYWxsaW5nIHByb2dyYW0gdG8gcmVjZWl2ZSB0b2tlbml6ZWQgbGluZXMgZGlyZWN0bHkgZnJvbSBwZXJsdGlkeSBmb3IKZnVydGhlciBzcGVjaWFsaXplZCBwcm9jZXNzaW5nLiAgV2hlbiB0aGlzIHBhcmFtZXRlciBpcyB1c2VkLCB0aGUgdHdvCmZvcm1hdHRpbmcgb3B0aW9ucyB3aGljaCBhcmUgYnVpbHQgaW50byBwZXJsdGlkeSAoYmVhdXRpZmljYXRpb24gb3IKaHRtbCkgYXJlIGlnbm9yZWQuICBUaGUgZm9sbG93aW5nIGRpYWdyYW0gaWxsdXN0cmF0ZXMgdGhlIGxvZ2ljYWwgZmxvdzoKCiAgICAgICAgICAgICAgICAgICAgfC0tIChub3JtYWwgcm91dGUpICAgLT4gY29kZSBiZWF1dGlmaWNhdGlvbgogIGNhbGxlci0+cGVybHRpZHktPnwtLSAoLWh0bWwgZmxhZyApICAgIC0+IGNyZWF0ZSBodG1sCiAgICAgICAgICAgICAgICAgICAgfC0tIChmb3JtYXR0ZXIgZ2l2ZW4pLT4gY2FsbGJhY2sgdG8gd3JpdGVfbGluZQoKVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBwcm9jZXNzaW5nIHBlcmwgc2NyaXB0cyBpbiBzb21lIHdheS4gIFRoZQpwYXJhbWV0ZXIgQzwkZm9ybWF0dGVyPiBpbiB0aGUgcGVybHRpZHkgY2FsbCwKCiAgICAgICAgZm9ybWF0dGVyICAgPT4gJGZvcm1hdHRlciwKCmlzIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZSBjYWxsZXIgd2l0aCBhIEM8d3JpdGVfbGluZT4gbWV0aG9kIHdoaWNoCndpbGwgYWNjZXB0IGFuZCBwcm9jZXNzIHRva2VuaXplZCBsaW5lcywgb25lIGxpbmUgcGVyIGNhbGwuICBIZXJlIGlzCmEgc2ltcGxlIGV4YW1wbGUgb2YgYSBDPHdyaXRlX2xpbmU+IHdoaWNoIG1lcmVseSBwcmludHMgdGhlIGxpbmUgbnVtYmVyLAp0aGUgbGluZSB0eXBlIChhcyBkZXRlcm1pbmVkIGJ5IHBlcmx0aWR5KSwgYW5kIHRoZSB0ZXh0IG9mIHRoZSBsaW5lOgoKIHN1YiB3cml0ZV9saW5lIHsKCiAgICAgIyBUaGlzIGlzIGNhbGxlZCBmcm9tIHBlcmx0aWR5IGxpbmUtYnktbGluZQogICAgIG15ICRzZWxmICAgICAgICAgICAgICA9IHNoaWZ0OwogICAgIG15ICRsaW5lX29mX3Rva2VucyAgICA9IHNoaWZ0OwogICAgIG15ICRsaW5lX3R5cGUgICAgICAgICA9ICRsaW5lX29mX3Rva2Vucy0+e19saW5lX3R5cGV9OwogICAgIG15ICRpbnB1dF9saW5lX251bWJlciA9ICRsaW5lX29mX3Rva2Vucy0+e19saW5lX251bWJlcn07CiAgICAgbXkgJGlucHV0X2xpbmUgICAgICAgID0gJGxpbmVfb2ZfdG9rZW5zLT57X2xpbmVfdGV4dH07CiAgICAgcHJpbnQgIiRpbnB1dF9saW5lX251bWJlcjokbGluZV90eXBlOiRpbnB1dF9saW5lIjsKIH0KClRoZSBjb21wbGV0ZSBwcm9ncmFtLCBCPHBlcmxsaW5ldHlwZT4sIGlzIGNvbnRhaW5lZCBpbiB0aGUgZXhhbXBsZXMgc2VjdGlvbiBvZgp0aGUgc291cmNlIGRpc3RyaWJ1dGlvbi4gIEFzIHRoaXMgZXhhbXBsZSBzaG93cywgdGhlIGNhbGxiYWNrIG1ldGhvZApyZWNlaXZlcyBhIHBhcmFtZXRlciBCPCRsaW5lX29mX3Rva2Vucz4sIHdoaWNoIGlzIGEgcmVmZXJlbmNlIHRvIGEgaGFzaApvZiBvdGhlciB1c2VmdWwgaW5mb3JtYXRpb24uICBUaGlzIGV4YW1wbGUgdXNlcyB0aGVzZSBoYXNoIGVudHJpZXM6CgogJGxpbmVfb2ZfdG9rZW5zLT57X2xpbmVfbnVtYmVyfSAtIHRoZSBsaW5lIG51bWJlciAoMSwyLC4uLikKICRsaW5lX29mX3Rva2Vucy0+e19saW5lX3RleHR9ICAgLSB0aGUgdGV4dCBvZiB0aGUgbGluZQogJGxpbmVfb2ZfdG9rZW5zLT57X2xpbmVfdHlwZX0gICAtIHRoZSB0eXBlIG9mIHRoZSBsaW5lLCBvbmUgb2Y6CgogICAgU1lTVEVNICAgICAgICAgLSBzeXN0ZW0tc3BlY2lmaWMgY29kZSBiZWZvcmUgaGFzaC1iYW5nIGxpbmUKICAgIENPREUgICAgICAgICAgIC0gbGluZSBvZiBwZXJsIGNvZGUgKGluY2x1ZGluZyBjb21tZW50cykKICAgIFBPRF9TVEFSVCAgICAgIC0gbGluZSBzdGFydGluZyBwb2QsIHN1Y2ggYXMgJz1oZWFkJwogICAgUE9EICAgICAgICAgICAgLSBwb2QgZG9jdW1lbnRhdGlvbiB0ZXh0CiAgICBQT0RfRU5EICAgICAgICAtIGxhc3QgbGluZSBvZiBwb2Qgc2VjdGlvbiwgJz1jdXQnCiAgICBIRVJFICAgICAgICAgICAtIHRleHQgb2YgaGVyZS1kb2N1bWVudAogICAgSEVSRV9FTkQgICAgICAgLSBsYXN0IGxpbmUgb2YgaGVyZS1kb2MgKHRhcmdldCB3b3JkKQogICAgRk9STUFUICAgICAgICAgLSBmb3JtYXQgc2VjdGlvbgogICAgRk9STUFUX0VORCAgICAgLSBsYXN0IGxpbmUgb2YgZm9ybWF0IHNlY3Rpb24sICcuJwogICAgREFUQV9TVEFSVCAgICAgLSBfX0RBVEFfXyBsaW5lCiAgICBEQVRBICAgICAgICAgICAtIHVuaWRlbnRpZmllZCB0ZXh0IGZvbGxvd2luZyBfX0RBVEFfXwogICAgRU5EX1NUQVJUICAgICAgLSBfX0VORF9fIGxpbmUKICAgIEVORCAgICAgICAgICAgIC0gdW5pZGVudGlmaWVkIHRleHQgZm9sbG93aW5nIF9fRU5EX18KICAgIEVSUk9SICAgICAgICAgIC0gd2UgYXJlIGluIGJpZyB0cm91YmxlLCBwcm9iYWJseSBub3QgYSBwZXJsIHNjcmlwdAoKTW9zdCBhcHBsaWNhdGlvbnMgd2lsbCBiZSBvbmx5IGludGVyZXN0ZWQgaW4gbGluZXMgb2YgdHlwZSBCPENPREU+LiAgRm9yCmFub3RoZXIgZXhhbXBsZSwgbGV0J3Mgd3JpdGUgYSBwcm9ncmFtIHdoaWNoIGNoZWNrcyBmb3Igb25lIG9mIHRoZQpzby1jYWxsZWQgSTxuYXVnaHR5IG1hdGNoaW5nIHZhcmlhYmxlcz4gQzwmYD4sIEM8JCY+LCBhbmQgQzwkJz4sIHdoaWNoCmNhbiBzbG93IGRvd24gcHJvY2Vzc2luZy4gIEhlcmUgaXMgYSBCPHdyaXRlX2xpbmU+LCBmcm9tIHRoZSBleGFtcGxlCnByb2dyYW0gQjxmaW5kX25hdWdodHkucGw+LCB3aGljaCBkb2VzIHRoYXQ6Cgogc3ViIHdyaXRlX2xpbmUgewoKICAgICAjIFRoaXMgaXMgY2FsbGVkIGJhY2sgZnJvbSBwZXJsdGlkeSBsaW5lLWJ5LWxpbmUKICAgICAjIFdlJ3JlIGxvb2tpbmcgZm9yICRgLCAkJiwgYW5kICQnCiAgICAgbXkgKCAkc2VsZiwgJGxpbmVfb2ZfdG9rZW5zICkgPSBAXzsKCiAgICAgIyBwdWxsIG91dCBzb21lIHN0dWZmIHdlIG1pZ2h0IG5lZWQKICAgICBteSAkbGluZV90eXBlICAgICAgICAgPSAkbGluZV9vZl90b2tlbnMtPntfbGluZV90eXBlfTsKICAgICBteSAkaW5wdXRfbGluZV9udW1iZXIgPSAkbGluZV9vZl90b2tlbnMtPntfbGluZV9udW1iZXJ9OwogICAgIG15ICRpbnB1dF9saW5lICAgICAgICA9ICRsaW5lX29mX3Rva2Vucy0+e19saW5lX3RleHR9OwogICAgIG15ICRydG9rZW5fdHlwZSAgICAgICA9ICRsaW5lX29mX3Rva2Vucy0+e19ydG9rZW5fdHlwZX07CiAgICAgbXkgJHJ0b2tlbnMgICAgICAgICAgID0gJGxpbmVfb2ZfdG9rZW5zLT57X3J0b2tlbnN9OwogICAgIGNob21wICRpbnB1dF9saW5lOwoKICAgICAjIHNraXAgY29tbWVudHMsIHBvZCwgZXRjCiAgICAgcmV0dXJuIGlmICggJGxpbmVfdHlwZSBuZSAnQ09ERScgKTsKCiAgICAgIyBsb29wIG92ZXIgdG9rZW5zIGxvb2tpbmcgZm9yICRgLCAkJiwgYW5kICQnCiAgICAgZm9yICggbXkgJGogPSAwIDsgJGogPCBAJHJ0b2tlbl90eXBlIDsgJGorKyApIHsKCiAgICAgICAgICMgd2Ugb25seSB3YW50IHRvIGV4YW1pbmUgdG9rZW4gdHlwZXMgJ2knIChpZGVudGlmaWVyKQogICAgICAgICBuZXh0IHVubGVzcyAkJHJ0b2tlbl90eXBlWyRqXSBlcSAnaSc7CgogICAgICAgICAjIHB1bGwgb3V0IHRoZSBhY3R1YWwgdG9rZW4gdGV4dAogICAgICAgICBteSAkdG9rZW4gPSAkJHJ0b2tlbnNbJGpdOwoKICAgICAgICAgIyBhbmQgY2hlY2sgaXQKICAgICAgICAgaWYgKCAkdG9rZW4gPX4gL15cJFtcYFwmXCddJC8gKSB7CiAgICAgICAgICAgICBwcmludCBTVERFUlIKICAgICAgICAgICAgICAgIiRpbnB1dF9saW5lX251bWJlcjogJHRva2VuXG4iOwogICAgICAgICB9CiAgICAgfQogfQoKVGhpcyBleGFtcGxlIHB1bGxzIG91dCB0aGVzZSB0b2tlbml6YXRpb24gdmFyaWFibGVzIGZyb20gdGhlICRsaW5lX29mX3Rva2VucwpoYXNoIHJlZmVyZW5jZToKCiAgICAgJHJ0b2tlbl90eXBlID0gJGxpbmVfb2ZfdG9rZW5zLT57X3J0b2tlbl90eXBlfTsKICAgICAkcnRva2VucyAgICAgPSAkbGluZV9vZl90b2tlbnMtPntfcnRva2Vuc307CgpUaGUgdmFyaWFibGUgQzwkcnRva2VuX3R5cGU+IGlzIGEgcmVmZXJlbmNlIHRvIGFuIGFycmF5IG9mIHRva2VuIHR5cGUgY29kZXMsCmFuZCBDPCRydG9rZW5zPiBpcyBhIHJlZmVyZW5jZSB0byBhIGNvcnJlc3BvbmRpbmcgYXJyYXkgb2YgdG9rZW4gdGV4dC4KVGhlc2UgYXJlIG9idmlvdXNseSBvbmx5IGRlZmluZWQgZm9yIGxpbmVzIG9mIHR5cGUgQjxDT0RFPi4KUGVybHRpZHkgY2xhc3NpZmllcyB0b2tlbnMgaW50byB0eXBlcywgYW5kIGhhcyBhIGJyaWVmIGNvZGUgZm9yIGVhY2ggdHlwZS4KWW91IGNhbiBnZXQgYSBjb21wbGV0ZSBsaXN0IGF0IGFueSB0aW1lIGJ5IHJ1bm5pbmcgcGVybHRpZHkgZnJvbSB0aGUKY29tbWFuZCBsaW5lIHdpdGgKCiAgICAgcGVybHRpZHkgLS1kdW1wLXRva2VuLXR5cGVzCgpJbiB0aGUgcHJlc2VudCBleGFtcGxlLCB3ZSBhcmUgb25seSBsb29raW5nIGZvciB0b2tlbnMgb2YgdHlwZSBCPGk+CihpZGVudGlmaWVycyksIHNvIHRoZSBmb3IgbG9vcCBza2lwcyBwYXN0IGFsbCBvdGhlciB0eXBlcy4gIFdoZW4gYW4KaWRlbnRpZmllciBpcyBmb3VuZCwgaXRzIGFjdHVhbCB0ZXh0IGlzIGNoZWNrZWQgdG8gc2VlIGlmIGl0IGlzIG9uZQpiZWluZyBzb3VnaHQuICBJZiBzbywgdGhlIGFib3ZlIHdyaXRlX2xpbmUgcHJpbnRzIHRoZSB0b2tlbiBhbmQgaXRzCmxpbmUgbnVtYmVyLgoKVGhlIEI8ZXhhbXBsZXM+IHNlY3Rpb24gb2YgdGhlIHNvdXJjZSBkaXN0cmlidXRpb24gaGFzIHNvbWUgZXhhbXBsZXMgb2YgcHJvZ3JhbXMgd2hpY2ggdXNlIHRoZSBCPGZvcm1hdHRlcj4gb3B0aW9uLgoKRm9yIGhlbHAgd2l0aCBwZXJsdGlkeSdzIHBlY3VsaWFyIHdheSBvZiBicmVha2luZyBsaW5lcyBpbnRvIHRva2VucywgeW91Cm1pZ2h0IHJ1biwgZnJvbSB0aGUgY29tbWFuZCBsaW5lLAoKIHBlcmx0aWR5IC1EIGZpbGVuYW1lCgp3aGVyZSBGPGZpbGVuYW1lPiBpcyBhIHNob3J0IHNjcmlwdCBvZiBpbnRlcmVzdC4gIFRoaXMgd2lsbCBwcm9kdWNlCkY8ZmlsZW5hbWUuREVCVUc+IHdpdGggaW50ZXJsZWF2ZWQgbGluZXMgb2YgdGV4dCBhbmQgdGhlaXIgdG9rZW4gdHlwZXMuClRoZSBCPC1EPiBmbGFnIGhhcyBiZWVuIGluIHBlcmx0aWR5IGZyb20gdGhlIGJlZ2lubmluZyBmb3IgdGhpcyBwdXJwb3NlLgpJZiB5b3Ugd2FudCB0byBzZWUgdGhlIGNvZGUgd2hpY2ggY3JlYXRlcyB0aGlzIGZpbGUsIGl0IGlzCkM8c3ViIFBlcmw6OlRpZHk6OkRlYnVnZ2VyOjp3cml0ZV9kZWJ1Z19lbnRyeT4KCj1oZWFkMSBFWFBPUlQKCiAgJnBlcmx0aWR5Cgo9aGVhZDEgSU5TVEFMTEFUSU9OCgpUaGUgbW9kdWxlICdQZXJsOjpUaWR5JyBjb21lcyB3aXRoIGEgYmluYXJ5ICdwZXJsdGlkeScgd2hpY2ggaXMgaW5zdGFsbGVkIHdoZW4gdGhlIG1vZHVsZSBpcyBpbnN0YWxsZWQuICBUaGUgbW9kdWxlIG5hbWUgaXMgY2FzZS1zZW5zaXRpdmUuICBGb3IgZXhhbXBsZSwgdGhlIGJhc2ljIGNvbW1hbmQgZm9yIGluc3RhbGxpbmcgd2l0aCBjcGFubSBpcyAnY3Bhbm0gUGVybDo6VGlkeScuCgo9aGVhZDEgVkVSU0lPTgoKVGhpcyBtYW4gcGFnZSBkb2N1bWVudHMgUGVybDo6VGlkeSB2ZXJzaW9uIDIwMjUwMTA1Cgo9aGVhZDEgTElDRU5TRQoKVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSAiR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiLgoKUGxlYXNlIHJlZmVyIHRvIHRoZSBmaWxlICJDT1BZSU5HIiBmb3IgZGV0YWlscy4KCj1oZWFkMSBCVUcgUkVQT1JUUwoKVGhlIHNvdXJjZSBjb2RlIHJlcG9zaXRvcnkgaXMgYXQgTDxodHRwczovL2dpdGh1Yi5jb20vcGVybHRpZHkvcGVybHRpZHk+LgoKVG8gcmVwb3J0IGEgbmV3IGJ1ZyBvciBwcm9ibGVtLCB1c2UgdGhlICJpc3N1ZXMiIGxpbmsgb24gdGhpcyBwYWdlLgoKPWhlYWQxIFNFRSBBTFNPCgpUaGUgcGVybHRpZHkoMSkgbWFuIHBhZ2UgZGVzY3JpYmVzIGFsbCBvZiB0aGUgZmVhdHVyZXMgb2YgcGVybHRpZHkuICBJdApjYW4gYmUgZm91bmQgYXQgaHR0cDovL3Blcmx0aWR5LnNvdXJjZWZvcmdlLm5ldC4KCj1jdXQK</File>
        <File Location="Kernel/cpan-lib/Perl/Tidy.pm" Permission="660" Encode="Base64">IwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojCiMgICAgcGVybHRpZHkgLSBhIHBlcmwgc2NyaXB0IGluZGVudGVyIGFuZCBmb3JtYXR0ZXIKIwojICAgIENvcHlyaWdodCAoYykgMjAwMC0yMDI1IGJ5IFN0ZXZlIEhhbmNvY2sKIyAgICBEaXN0cmlidXRlZCB1bmRlciB0aGUgR1BMIGxpY2Vuc2UgYWdyZWVtZW50OyBzZWUgZmlsZSBDT1BZSU5HCiMKIyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIwojICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCiMgICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKIyAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgojCiMgICAgRm9yIGJyaWVmIGluc3RydWN0aW9ucywgdHJ5ICdwZXJsdGlkeSAtaCcuCiMgICAgRm9yIG1vcmUgY29tcGxldGUgZG9jdW1lbnRhdGlvbiwgdHJ5ICdtYW4gcGVybHRpZHknCiMgICAgb3IgdmlzaXQgdGhlIEdpdEh1YiBzaXRlIGh0dHBzOi8vcGVybHRpZHkuZ2l0aHViLmlvL3Blcmx0aWR5LwojCiMgICAgVGhpcyBzY3JpcHQgaXMgYW4gZXhhbXBsZSBvZiB0aGUgZGVmYXVsdCBzdHlsZS4gIEl0IHdhcyBmb3JtYXR0ZWQgd2l0aDoKIwojICAgICAgcGVybHRpZHkgVGlkeS5wbQojCiMgICAgQ29kZSBDb250cmlidXRpb25zOiBTZWUgQ2hhbmdlTG9nLmh0bWwgZm9yIGEgY29tcGxldGUgaGlzdG9yeS4KIyAgICAgIE1pY2hhZWwgQ2FydG1lbGwgc3VwcGxpZWQgY29kZSBmb3IgYWRhcHRhdGlvbiB0byBWTVMgYW5kIGhlbHBlZCB3aXRoCiMgICAgICAgIHYtc3RyaW5ncy4KIyAgICAgIEh1Z2ggUy4gTXllcnMgc3VwcGxpZWQgc3ViIHN0cmVhbWhhbmRsZSBhbmQgdGhlIHN1cHBvcnRpbmcgY29kZSB0bwojICAgICAgICBjcmVhdGUgYSBQZXJsOjpUaWR5IG1vZHVsZSB3aGljaCBjYW4gb3BlcmF0ZSBvbiBzdHJpbmdzLCBhcnJheXMsIGV0Yy4KIyAgICAgIFl2ZXMgT3J0b24gc3VwcGxpZWQgY29kaW5nIHRvIGhlbHAgZGV0ZWN0IFdpbmRvd3MgdmVyc2lvbnMuCiMgICAgICBBeGVsIFJvc2Ugc3VwcGxpZWQgYSBwYXRjaCBmb3IgTWFjUGVybC4KIyAgICAgIFNlYmFzdGllbiBBcGVyZ2hpcy1UcmFtb25pIHN1cHBsaWVkIGEgcGF0Y2ggZm9yIHRoZSBkZWZpbmVkIG9yIG9wZXJhdG9yLgojICAgICAgRGFuIFR5cmVsbCBjb250cmlidXRlZCBhIHBhdGNoIGZvciBiaW5hcnkgSS9PLgojICAgICAgVWVsaSBIdWdlbnNjaG1pZHQgY29udHJpYnV0ZWQgYSBwYXRjaCBmb3IgLWZwc2MKIyAgICAgIFNhbSBLaW5ndG9uIHN1cHBsaWVkIGEgcGF0Y2ggdG8gaWRlbnRpZnkgdGhlIGluaXRpYWwgaW5kZW50YXRpb24gb2YKIyAgICAgIGVudGFiYmVkIGNvZGUuCiMgICAgICBqb25hdGhhbiBzd2FydHogc3VwcGxpZWQgcGF0Y2hlcyBmb3I6CiMgICAgICAqIC4uLi8gcGF0dGVybiwgd2hpY2ggbG9va3MgdXB3YXJkcyBmcm9tIGRpcmVjdG9yeQojICAgICAgKiAtLW5vdGlkeSwgdG8gYmUgdXNlZCBpbiBkaXJlY3RvcmllcyB3aGVyZSB3ZSB3YW50IHRvIGF2b2lkCiMgICAgICAgIGFjY2lkZW50YWxseSB0aWR5aW5nCiMgICAgICAqIHByZWZpbHRlciBhbmQgcG9zdGZpbHRlcgojICAgICAgKiBpdGVyYXRpb25zIG9wdGlvbgojCiMgICAgICBNYW55IG90aGVycyBoYXZlIHN1cHBsaWVkIGtleSBpZGVhcywgc3VnZ2VzdGlvbnMsIGFuZCBidWcgcmVwb3J0czsKIyAgICAgICAgc2VlIHRoZSBDSEFOR0VTIGZpbGUuCiMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpwYWNrYWdlIFBlcmw6OlRpZHk7CgojIHBlcmx2ZXIgcmVwb3J0cyBtaW5pbXVtIHZlcnNpb24gbmVlZGVkIGlzIDUuOC4xCiMgNS4wMDQgbmVlZGVkIGZvciBJTzo6RmlsZQojIDUuMDA4IG5lZWRlZCBmb3Igd2lkZSBjaGFyYWN0ZXJzCiMgNS4wMDgwMDEgbmVlZGVkIGZvciB1dGY4Ojppc191dGY4CiMgNS4wMDgwMDEgbmVlZGVkIGZvciBTY2FsYXI6OlV0aWw6OnJlZmFkZHIKdXNlIDUuMDA4MDAxOwp1c2Ugd2FybmluZ3M7CnVzZSBzdHJpY3Q7CnVzZSBFeHBvcnRlcjsKdXNlIENhcnA7CnVzZSBFbmdsaXNoICAgICBxdyggLW5vX21hdGNoX3ZhcnMgKTsKdXNlIERpZ2VzdDo6TUQ1IHF3KG1kNV9oZXgpOwp1c2UgUGVybDo6VGlkeTo6RGVidWdnZXI7CnVzZSBQZXJsOjpUaWR5OjpEaWFnbm9zdGljczsKdXNlIFBlcmw6OlRpZHk6OkZpbGVXcml0ZXI7CnVzZSBQZXJsOjpUaWR5OjpGb3JtYXR0ZXI7CnVzZSBQZXJsOjpUaWR5OjpIdG1sV3JpdGVyOwp1c2UgUGVybDo6VGlkeTo6SU9TY2FsYXI7CnVzZSBQZXJsOjpUaWR5OjpJT1NjYWxhckFycmF5Owp1c2UgUGVybDo6VGlkeTo6SW5kZW50YXRpb25JdGVtOwp1c2UgUGVybDo6VGlkeTo6TG9nZ2VyOwp1c2UgUGVybDo6VGlkeTo6VG9rZW5pemVyOwp1c2UgUGVybDo6VGlkeTo6VmVydGljYWxBbGlnbmVyOwpsb2NhbCAkT1VUUFVUX0FVVE9GTFVTSCA9IDE7CgojIERFVkVMX01PREUgY2FuIGJlIHR1cm5lZCBvbiBmb3IgZXh0cmEgY2hlY2tpbmcgZHVyaW5nIGRldmVsb3BtZW50CnVzZSBjb25zdGFudCBERVZFTF9NT0RFICAgPT4gMDsKdXNlIGNvbnN0YW50IERJQUdOT1NUSUNTICA9PiAwOwp1c2UgY29uc3RhbnQgRU1QVFlfU1RSSU5HID0+IHF7fTsKdXNlIGNvbnN0YW50IFNQQUNFICAgICAgICA9PiBxeyB9Owp1c2UgY29uc3RhbnQgQ09OU1RfMTAyNCAgID0+IDEwMjQ7ICAgICMgYnl0ZXMgcGVyIGtiOyAyKioxMAoKdXNlIHZhcnMgcXd7CiAgJFZFUlNJT04KICBASVNBCiAgQEVYUE9SVAp9OwoKQElTQSAgICA9IHF3KCBFeHBvcnRlciApOwpARVhQT1JUID0gcXcoICZwZXJsdGlkeSApOwoKdXNlIEN3ZDsKdXNlIEVuY29kZSAoKTsKdXNlIEVuY29kZTo6R3Vlc3M7CnVzZSBJTzo6RmlsZTsKdXNlIEZpbGU6OkJhc2VuYW1lOwp1c2UgRmlsZTo6Q29weTsKdXNlIEZpbGU6OlNwZWMgKCk7CgojIHBlcmwgc3RhdCBmdW5jdGlvbiBpbmRleCBuYW1lcywgYmFzZWQgb24KIyAgICBodHRwczovL3Blcmxkb2MucGVybC5vcmcvZnVuY3Rpb25zL3N0YXQKdXNlIGNvbnN0YW50IHsKCiAgICBfbW9kZV8gID0+IDIsICAgICMgZmlsZSBtb2RlICAodHlwZSBhbmQgcGVybWlzc2lvbnMpCiAgICBfdWlkXyAgID0+IDQsICAgICMgbnVtZXJpYyB1c2VyIElEIG9mIGZpbGUncyBvd25lcgogICAgX2dpZF8gICA9PiA1LCAgICAjIG51bWVyaWMgZ3JvdXAgSUQgb2YgZmlsZSdzIG93bmVyCiAgICBfYXRpbWVfID0+IDgsICAgICMgbGFzdCBhY2Nlc3MgdGltZSBpbiBzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaAogICAgX210aW1lXyA9PiA5LCAgICAjIGxhc3QgbW9kaWZ5IHRpbWUgaW4gc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2gKCiMjICBfZGV2XyAgICAgPT4gMCwgICAgICMgZGV2aWNlIG51bWJlciBvZiBmaWxlc3lzdGVtCiMjICBfaW5vXyAgICAgPT4gMSwgICAgICMgaW5vZGUgbnVtYmVyCiMjICBfbmxpbmtfICAgPT4gMywgICAgICMgbnVtYmVyIG9mIChoYXJkKSBsaW5rcyB0byB0aGUgZmlsZQojIyAgX3JkZXZfICAgID0+IDYsICAgICAjIHRoZSBkZXZpY2UgaWRlbnRpZmllciAoc3BlY2lhbCBmaWxlcyBvbmx5KQojIyAgX3NpemVfICAgID0+IDcsICAgICAjIHRvdGFsIHNpemUgb2YgZmlsZSwgaW4gYnl0ZXMKIyMgIF9jdGltZV8gICA9PiAxMCwgICAgIyBpbm9kZSBjaGFuZ2UgdGltZSBpbiBzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaCAoKikKIyMgIF9ibGtzaXplXyA9PiAxMSwgICAgIyBwcmVmZXJyZWQgSS9PIHNpemUgaW4gYnl0ZXMgZm9yIGludGVyYWN0aW5nIHdpdGgKIyMgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgZmlsZSAobWF5IHZhcnkgZnJvbSBmaWxlIHRvIGZpbGUpCiMjICBfYmxvY2tzXyAgPT4gMTIsICAgICMgYWN0dWFsIG51bWJlciBvZiBzeXN0ZW0tc3BlY2lmaWMgYmxvY2tzIGFsbG9jYXRlZAojIyAgICAgICAgICAgICAgICAgICAgICAjIG9uIGRpc2sgKG9mdGVuLCBidXQgbm90IGFsd2F5cywgNTEyIGJ5dGVzIGVhY2gpCn07CgpCRUdJTiB7CgogICAgIyBSZWxlYXNlIHZlcnNpb24gaXMgdGhlIGFwcHJveGltYXRlIFlZWVlNTUREIG9mIHRoZSByZWxlYXNlLgogICAgIyBEZXZlbG9wbWVudCB2ZXJzaW9uIGlzIChMYXN0IFJlbGVhc2UpLihEZXZlbG9wbWVudCBOdW1iZXIpCgogICAgIyBUbyBtYWtlIHRoZSBudW1iZXIgY29udGludWFsbHkgaW5jcmVhc2luZywgdGhlIERldmVsb3BtZW50IE51bWJlciBpcyBhIDIKICAgICMgZGlnaXQgbnVtYmVyIHN0YXJ0aW5nIGF0IDAxIGFmdGVyIGEgcmVsZWFzZS4gSXQgaXMgY29udGludWFsbHkgYnVtcGVkCiAgICAjIGFsb25nIGF0IHNpZ25pZmljYW50IHBvaW50cyBkdXJpbmcgZGV2ZWxvcG1lbnQuIElmIGl0IGV2ZXIgcmVhY2hlcyA5OQogICAgIyB0aGVuIHRoZSBSZWxlYXNlIHZlcnNpb24gbXVzdCBiZSBidW1wZWQsIGFuZCBpdCBpcyBwcm9iYWJseSBwYXN0IHRpbWUgZm9yCiAgICAjIGEgcmVsZWFzZSBhbnl3YXkuCgogICAgJFZFUlNJT04gPSAnMjAyNTAxMDUnOwp9ICMjIGVuZCBCRUdJTgoKc3ViIERFU1RST1kgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICAjIHJlcXVpcmVkIHRvIGF2b2lkIGNhbGwgdG8gQVVUT0xPQUQgaW4gc29tZSB2ZXJzaW9ucyBvZiBwZXJsCiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBERVNUUk9ZCgpzdWIgQVVUT0xPQUQgewoKICAgICMgQ2F0Y2ggYW55IHVuZGVmaW5lZCBzdWIgY2FsbHMgc28gdGhhdCB3ZSBhcmUgc3VyZSB0byBnZXQKICAgICMgc29tZSBkaWFnbm9zdGljIGluZm9ybWF0aW9uLiAgVGhpcyBzdWIgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZAogICAgIyBleGNlcHQgZm9yIGEgcHJvZ3JhbW1pbmcgZXJyb3IuCiAgICBvdXIgJEFVVE9MT0FEOwogICAgcmV0dXJuIGlmICggJEFVVE9MT0FEID1+IC9cYkRFU1RST1kkLyApOwogICAgbXkgKCAkcGtnLCAkZm5hbWUsICRsbm8gKSA9IGNhbGxlcigpOwogICAgcHJpbnQgeypTVERFUlJ9IDw8RU9NOwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClVuZXhwZWN0ZWQgY2FsbCB0byBBdXRvbG9hZCBsb29raW5nIGZvciBzdWIgJEFVVE9MT0FECkNhbGxlZCBmcm9tIHBhY2thZ2U6ICckcGtnJwpDYWxsZWQgZnJvbSBGaWxlICckZm5hbWUnICBhdCBsaW5lICckbG5vJwpUaGlzIGVycm9yIGlzIHByb2JhYmx5IGR1ZSB0byBhIHJlY2VudCBwcm9ncmFtbWluZyBjaGFuZ2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpFT00KICAgIGV4aXQgMTsKfSAjIyBlbmQgc3ViIEFVVE9MT0FECgpzdWIgc3RyZWFtaGFuZGxlIHsKCiAgICBteSAoICRmaWxlbmFtZSwgJG1vZGUsICgkaXNfZW5jb2RlZF9kYXRhKSApID0gQF87CgogICAgIyBHaXZlbjoKICAgICMgICAkZmlsZW5hbWUKICAgICMgICAkbW9kZSA9ICdyJyBvciAndycgKG9ubHkgJ3cnIGlzIHVzZWQgbm93LCBzZWUgbm90ZSBiZWxvdykKICAgICMgICAkaXNfZW5jb2RlZF9kYXRhIChvcHRpb25hbCBmbGFnKQoKICAgICMgQ3JlYXRlIGFuIG9iamVjdCB3aGljaDoKICAgICMgICBoYXMgYSAnZ2V0bGluZScgbWV0aG9kIGlmIG1vZGU9J3InLCBhbmQKICAgICMgICBoYXMgYSAncHJpbnQnIG1ldGhvZCBpZiBtb2RlPSd3Jy4KICAgICMgVGhlIG9iamVjdHMgYWxzbyBuZWVkIGEgJ2Nsb3NlJyBtZXRob2QuCiAgICAjCiAgICAjIEhvdyB0aGUgb2JqZWN0IGlzIG1hZGU6CiAgICAjCiAgICAjIGlmICRmaWxlbmFtZSBpczogICAgIE1ha2Ugb2JqZWN0IHVzaW5nOgogICAgIyAtLS0tLS0tLS0tLS0tLS0tICAgICAtLS0tLS0tLS0tLS0tLS0tLQogICAgIyAnLScgICAgICAgICAgICAgICAgICAoU1RESU4gaWYgbW9kZSA9ICdyJywgU1RET1VUIGlmIG1vZGU9J3cnKQogICAgIyBzdHJpbmcgICAgICAgICAgICAgICBJTzo6RmlsZQogICAgIyBBUlJBWSAgcmVmICAgICAgICAgICBQZXJsOjpUaWR5OjpJT1NjYWxhckFycmF5IChmb3JtZXJseSBJTzo6U2NhbGFyQXJyYXkpCiAgICAjIFNUUklORyByZWYgICAgICAgICAgIFBlcmw6OlRpZHk6OklPU2NhbGFyICAgICAgKGZvcm1lcmx5IElPOjpTY2FsYXIpCiAgICAjIG9iamVjdCAgICAgICAgICAgICAgIG9iamVjdAogICAgIyAgICAgICAgICAgICAgICAgICAgICAoY2hlY2sgZm9yICdwcmludCcgbWV0aG9kIGZvciAndycgbW9kZSkKICAgICMgICAgICAgICAgICAgICAgICAgICAgKGNoZWNrIGZvciAnZ2V0bGluZScgbWV0aG9kIGZvciAncicgbW9kZSkKCiAgICAjIEFuIG9wdGlvbmFsIGZsYWcgJyRpc19lbmNvZGVkX2RhdGEnIG1heSBiZSBnaXZlbiwgYXMgZm9sbG93czoKICAgICMgLSB0cnVlOiBlbmNvZGVkIGRhdGEgaXMgYmVpbmcgdHJhbnNmZXJyZWQsCiAgICAjICAgIHNldCBlbmNvZGluZyB0byBiZSB1dGY4IGZvciBmaWxlcyBhbmQgZm9yIHN0ZGluLgogICAgIyAtIGZhbHNlOiB1bmVuY29kZWQgYmluYXJ5IGRhdGEgaXMgYmVpbmcgdHJhbnNmZXJyZWQsCiAgICAjICAgIHNldCBiaW5hcnkgbW9kZSBmb3IgZmlsZXMgYW5kIGZvciBzdGRpbi4KCiAgICAjIE5PVEU6IG1vZGUgJ3InIHdvcmtzIGJ1dCBpcyBubyBsb25nZXIgdXNlZC4KICAgICMgVXNlIHN1YiBzdHJlYW1fc2x1cnAgaW5zdGVhZCBmb3IgbW9kZSAncicsIGZvciBlZmZpY2llbmN5LgogICAgJG1vZGUgPSBsYygkbW9kZSk7CiAgICBpZiAoICRtb2RlIG5lICd3JyApIHsKICAgICAgICBpZiAoIERFVkVMX01PREUgfHwgJG1vZGUgbmUgJ3InICkgewogICAgICAgICAgICBGYXVsdCgic3RyZWFtaGFuZGxlIGNhbGxlZCBpbiB1bmV4cGVjdGVkIG1vZGUgJyRtb2RlJ1xuIik7CiAgICAgICAgfQogICAgfQoKICAgIG15ICRyZWYgPSByZWYoJGZpbGVuYW1lKTsKICAgIG15ICROZXc7CiAgICBteSAkZmg7CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgaGFuZGxlIGEgcmVmZXJlbmNlCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgaWYgKCRyZWYpIHsKICAgICAgICBpZiAoICRyZWYgZXEgJ0FSUkFZJyApIHsKICAgICAgICAgICAgJE5ldyA9IHN1YiB7IFBlcmw6OlRpZHk6OklPU2NhbGFyQXJyYXktPm5ldyggJGZpbGVuYW1lLCAkbW9kZSApIH07CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJHJlZiBlcSAnU0NBTEFSJyApIHsKICAgICAgICAgICAgJE5ldyA9IHN1YiB7IFBlcmw6OlRpZHk6OklPU2NhbGFyLT5uZXcoICRmaWxlbmFtZSwgJG1vZGUgKSB9OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgQWNjZXB0IGFuIG9iamVjdCB3aXRoIGEgZ2V0bGluZSBtZXRob2QgZm9yIHJlYWRpbmcuIE5vdGU6CiAgICAgICAgICAgICMgSU86OkZpbGUgaXMgYnVpbHQtaW4gYW5kIGRvZXMgbm90IHJlc3BvbmQgdG8gdGhlIGRlZmluZWQKICAgICAgICAgICAgIyBvcGVyYXRvci4gIElmIHRoaXMgY2F1c2VzIHRyb3VibGUsIHRoZSBjaGVjayBjYW4gYmUKICAgICAgICAgICAgIyBza2lwcGVkIGFuZCB3ZSBjYW4ganVzdCBsZXQgaXQgY3Jhc2ggaWYgdGhlcmUgaXMgbm8KICAgICAgICAgICAgIyBnZXRsaW5lLgogICAgICAgICAgICBpZiAoICRtb2RlIGVxICdyJyApIHsKCiAgICAgICAgICAgICAgICAjIFJUIzk3MTU5OyBwYXJ0IDEgb2YgMjogdXBkYXRlZCB0byB1c2UgJ2NhbicKICAgICAgICAgICAgICAgIGlmICggJHJlZi0+Y2FuKCdnZXRsaW5lJykgKSB7CiAgICAgICAgICAgICAgICAgICAgJE5ldyA9IHN1YiB7ICRmaWxlbmFtZSB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJE5ldyA9IHN1YiB7IHVuZGVmIH07CiAgICAgICAgICAgICAgICAgICAgY29uZmVzcyA8PEVPTTsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk5vICdnZXRsaW5lJyBtZXRob2QgaXMgZGVmaW5lZCBmb3Igb2JqZWN0IG9mIGNsYXNzICckcmVmJwpQbGVhc2UgY2hlY2sgeW91ciBjYWxsIHRvIFBlcmw6OlRpZHk6OnBlcmx0aWR5LiAgVHJhY2UgZm9sbG93cy4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkVPTQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIEFjY2VwdCBhbiBvYmplY3Qgd2l0aCBhIHByaW50IG1ldGhvZCBmb3Igd3JpdGluZy4KICAgICAgICAgICAgIyBTZWUgbm90ZSBhYm92ZSBhYm91dCBJTzo6RmlsZQogICAgICAgICAgICBpZiAoICRtb2RlIGVxICd3JyApIHsKCiAgICAgICAgICAgICAgICAjIFJUIzk3MTU5OyBwYXJ0IDIgb2YgMjogdXBkYXRlZCB0byB1c2UgJ2NhbicKICAgICAgICAgICAgICAgIGlmICggJHJlZi0+Y2FuKCdwcmludCcpICkgewogICAgICAgICAgICAgICAgICAgICROZXcgPSBzdWIgeyAkZmlsZW5hbWUgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICROZXcgPSBzdWIgeyB1bmRlZiB9OwogICAgICAgICAgICAgICAgICAgIGNvbmZlc3MgPDxFT007Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpObyAncHJpbnQnIG1ldGhvZCBpcyBkZWZpbmVkIGZvciBvYmplY3Qgb2YgY2xhc3MgJyRyZWYnClBsZWFzZSBjaGVjayB5b3VyIGNhbGwgdG8gUGVybDo6VGlkeTo6cGVybHRpZHkuIFRyYWNlIGZvbGxvd3MuCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpFT00KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLQogICAgIyBoYW5kbGUgYSBzdHJpbmcKICAgICMtLS0tLS0tLS0tLS0tLS0tCiAgICBlbHNlIHsKICAgICAgICBpZiAoICRmaWxlbmFtZSBlcSAnLScgKSB7CiAgICAgICAgICAgICROZXcgPSBzdWIgeyAkbW9kZSBlcSAndycgPyAqU1RET1VUIDogKlNURElOIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICROZXcgPSBzdWIgeyBJTzo6RmlsZS0+bmV3KCAkZmlsZW5hbWUsICRtb2RlICkgfTsKICAgICAgICB9CiAgICB9CgogICAgIy0tLS0tLS0tLS0tLS0tCiAgICAjIE9wZW4gdGhlIGZpbGUKICAgICMtLS0tLS0tLS0tLS0tLQogICAgJGZoID0gJE5ldy0+KCAkZmlsZW5hbWUsICRtb2RlICk7CgogICAgaWYgKCAhJGZoICkgewogICAgICAgIFdhcm4oIkNvdWxkbid0IG9wZW4gZmlsZTonJGZpbGVuYW1lJyBpbiBtb2RlOiRtb2RlIDogJE9TX0VSUk9SXG4iKTsKICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tCiAgICAjIFNldCBiaW5tb2RlCiAgICAjLS0tLS0tLS0tLS0tCiAgICBlbHNlIHsKICAgICAgICBpZiAoIHJlZigkZmgpIGVxICdJTzo6RmlsZScgKSB7CiAgICAgICAgICAgICMjIGJpbm1vZGUgb2JqZWN0IGNhbGwgbm90IGF2YWlsYWJsZSBpbiBvbGRlciBwZXJsIHZlcnNpb25zCiAgICAgICAgICAgICMjICRmaC0+YmlubW9kZSgiOnJhdzplbmNvZGluZyhVVEYtOCkiKTsKICAgICAgICAgICAgaWYgKCRpc19lbmNvZGVkX2RhdGEpIHsgYmlubW9kZSAkZmgsICI6cmF3OmVuY29kaW5nKFVURi04KSI7IH0KICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgIHsgYmlubW9kZSAkZmggfQogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRmaWxlbmFtZSBlcSAnLScgKSB7CiAgICAgICAgICAgIGlmICgkaXNfZW5jb2RlZF9kYXRhKSB7IGJpbm1vZGUgU1RET1VULCAiOnJhdzplbmNvZGluZyhVVEYtOCkiOyB9CiAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICB7IGJpbm1vZGUgU1RET1VUIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIHNob3VsZG4ndCBnZXQgaGVyZQogICAgICAgICAgICBpZiAoREVWRUxfTU9ERSkgewogICAgICAgICAgICAgICAgbXkgJHJlZl9maCA9IHJlZigkZmgpOwogICAgICAgICAgICAgICAgRmF1bHQoPDxFT00pOwp1bmV4cGVjdGVkIHN0cmVhbWhhbmRsZSBzdGF0ZSBmb3IgZmlsZT0nJGZpbGVuYW1lJyBtb2RlPSckbW9kZScgcmVmKGZoKT0kcmVmX2ZoCkVPTQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkZmg7Cn0gIyMgZW5kIHN1YiBzdHJlYW1oYW5kbGUKCnN1YiBzdHJlYW1fc2x1cnAgewoKICAgIG15ICggJGZpbGVuYW1lLCAoJHRpbWVvdXRfaW5fc2Vjb25kcykgKSA9IEBfOwoKICAgICMgR2l2ZW46CiAgICAjICAgJGZpbGVuYW1lCiAgICAjICAgJHRpbWVvdXRfaW5fc2Vjb25kcyAob3B0aW9uYWwgdGltZW91dCwgaW4gc2Vjb25kcykKCiAgICAjIFJlYWQgdGhlIHRleHQgaW4gJGZpbGVuYW1lIGFuZAogICAgIyByZXR1cm46CiAgICAjICAgIHVuZGVmIGlmIHJlYWQgZXJyb3IsIG9yCiAgICAjICAgICRyaW5wdXRfc3RyaW5nID0gcmVmIHRvIHN0cmluZyBvZiB0ZXh0CgogICAgIyBpZiAkZmlsZW5hbWUgaXM6ICAgICBSZWFkCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0gICAgIC0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIEFSUkFZICByZWYgICAgICAgICAgIGFycmF5IHJlZgogICAgIyBTQ0FMQVIgcmVmICAgICAgICAgICBzdHJpbmcgcmVmCiAgICAjIG9iamVjdCByZWYgICAgICAgICAgIG9iamVjdCB3aXRoICdnZXRsaW5lJyBtZXRob2QgKGV4aXQgaWYgbm8gJ2dldGxpbmUnKQogICAgIyAnLScgICAgICAgICAgICAgICAgICBTVERJTgogICAgIyBzdHJpbmcgICAgICAgICAgICAgICBmaWxlIG5hbWVkICRmaWxlbmFtZQoKICAgICMgTm90ZSB0aGF0IGFueSBkZWNvZGluZyBmcm9tIHV0ZjggbXVzdCBiZSBkb25lIGJ5IHRoZSBjYWxsZXIKCiAgICBteSAkcmVmID0gcmVmKCRmaWxlbmFtZSk7CiAgICBteSAkcmlucHV0X3N0cmluZzsKCiAgICAjIGhhbmRsZSBhIHJlZmVyZW5jZQogICAgaWYgKCRyZWYpIHsKICAgICAgICBpZiAoICRyZWYgZXEgJ0FSUkFZJyApIHsKICAgICAgICAgICAgbXkgJGJ1ZiA9IGpvaW4gRU1QVFlfU1RSSU5HLCBAeyRmaWxlbmFtZX07CiAgICAgICAgICAgICRyaW5wdXRfc3RyaW5nID0gXCRidWY7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJHJlZiBlcSAnU0NBTEFSJyApIHsKICAgICAgICAgICAgJHJpbnB1dF9zdHJpbmcgPSAkZmlsZW5hbWU7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAoICRyZWYtPmNhbignZ2V0bGluZScpICkgewogICAgICAgICAgICAgICAgbXkgJGJ1ZiA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgICAgIHdoaWxlICggZGVmaW5lZCggbXkgJGxpbmUgPSAkZmlsZW5hbWUtPmdldGxpbmUoKSApICkgewogICAgICAgICAgICAgICAgICAgICRidWYgLj0gJGxpbmU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkcmlucHV0X3N0cmluZyA9IFwkYnVmOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgY29uZmVzcyA8PEVPTTsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk5vICdnZXRsaW5lJyBtZXRob2QgaXMgZGVmaW5lZCBmb3Igb2JqZWN0IG9mIGNsYXNzICckcmVmJwpQbGVhc2UgY2hlY2sgeW91ciBjYWxsIHRvIFBlcmw6OlRpZHk6OnBlcmx0aWR5LiAgVHJhY2UgZm9sbG93cy4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkVPTQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgaGFuZGxlIGEgc3RyaW5nCiAgICBlbHNlIHsKICAgICAgICBpZiAoICRmaWxlbmFtZSBlcSAnLScgKSB7CiAgICAgICAgICAgIGxvY2FsICRJTlBVVF9SRUNPUkRfU0VQQVJBVE9SID0gdW5kZWY7CiAgICAgICAgICAgIG15ICRidWY7CiAgICAgICAgICAgIGlmICggJHRpbWVvdXRfaW5fc2Vjb25kcyAmJiAkdGltZW91dF9pbl9zZWNvbmRzID4gMCApIHsKICAgICAgICAgICAgICAgIGV2YWwgewogICAgICAgICAgICAgICAgICAgIGxvY2FsICRTSUd7QUxSTX0gPSBzdWIgeyBkaWUgImFsYXJtXG4iIH07CiAgICAgICAgICAgICAgICAgICAgYWxhcm0oJHRpbWVvdXRfaW5fc2Vjb25kcyk7CiAgICAgICAgICAgICAgICAgICAgJGJ1ZiA9IDw+OwogICAgICAgICAgICAgICAgICAgIGFsYXJtKDApOwogICAgICAgICAgICAgICAgICAgIDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIG9yIERpZSgKIlRpbWVvdXQgcmVhZGluZyBzdGRpbiB1c2luZyAtdG9zPSR0aW1lb3V0X2luX3NlY29uZHMgc2Vjb25kcy4gVXNlIC10b3M9MCB0byBza2lwIHRpbWVvdXQgY2hlY2suXG4iCiAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkYnVmID0gPD47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHJpbnB1dF9zdHJpbmcgPSBcJGJ1ZjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmICggb3BlbiggbXkgJGZoLCAnPCcsICRmaWxlbmFtZSApICkgewogICAgICAgICAgICAgICAgbG9jYWwgJElOUFVUX1JFQ09SRF9TRVBBUkFUT1IgPSB1bmRlZjsKICAgICAgICAgICAgICAgIG15ICRidWYgPSA8JGZoPjsKICAgICAgICAgICAgICAgICRmaC0+Y2xvc2UoKSBvciBXYXJuKCJDYW5ub3QgY2xvc2UgJGZpbGVuYW1lXG4iKTsKICAgICAgICAgICAgICAgICRyaW5wdXRfc3RyaW5nID0gXCRidWY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBXYXJuKCJDYW5ub3Qgb3BlbiAkZmlsZW5hbWU6ICRPU19FUlJPUlxuIik7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRyaW5wdXRfc3RyaW5nOwp9ICMjIGVuZCBzdWIgc3RyZWFtX3NsdXJwCgojIEhlcmUgaXMgYSBtYXAgb2YgdGhlIGZsb3cgb2YgZGF0YSBmcm9tIHRoZSBpbnB1dCBzb3VyY2UgdG8gdGhlIG91dHB1dAojIGxpbmUgc2luazoKIwojICAgICAgICAgICAgIC0tPlRva2VuaXplci0tPkZvcm1hdHRlci0tPlZlcnRpY2FsQWxpZ25lci0tPkZpbGVXcml0ZXItLT4KIyAgICAgICBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICBncm91cHMgICAgICAgICAgICAgICAgIG91dHB1dAojICAgICAgIGxpbmVzICAgdG9rZW5zICAgICAgbGluZXMgICAgICAgb2YgICAgICAgICAgbGluZXMgICAgbGluZXMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMKIwojIFRoZSBuYW1lcyBjb3JyZXNwb25kIHRvIHRoZSBwYWNrYWdlIG5hbWVzIHJlc3BvbnNpYmxlIGZvciB0aGUgdW5pdCBwcm9jZXNzZXMuCiMKIyBUaGUgb3ZlcmFsbCBwcm9jZXNzIGlzIGNvbnRyb2xsZWQgYnkgdGhlICJtYWluIiBwYWNrYWdlLgojCiMgVG9rZW5pemVyIGFuYWx5emVzIGEgbGluZSBhbmQgYnJlYWtzIGl0IGludG8gdG9rZW5zLCBwZWVraW5nIGFoZWFkCiMgaWYgbmVjZXNzYXJ5LiAgQSB0b2tlbiBpcyBhbnkgc2VjdGlvbiBvZiB0aGUgaW5wdXQgbGluZSB3aGljaCBzaG91bGQgYmUKIyBtYW5pcHVsYXRlZCBhcyBhIHNpbmdsZSBlbnRpdHkgZHVyaW5nIGZvcm1hdHRpbmcuICBGb3IgZXhhbXBsZSwgYSBzaW5nbGUKIyAnLCcgY2hhcmFjdGVyIGlzIGEgdG9rZW4sIGFuZCBzbyBpcyBhbiBlbnRpcmUgc2lkZSBjb21tZW50LiAgSXQgaGFuZGxlcwojIHRoZSBjb21wbGV4aXRpZXMgb2YgUGVybCBzeW50YXgsIHN1Y2ggYXMgZGlzdGluZ3Vpc2hpbmcgYmV0d2VlbiAnPDwnIGFzCiMgYSBzaGlmdCBvcGVyYXRvciBhbmQgYXMgYSBoZXJlLWRvY3VtZW50LCBvciBkaXN0aW5ndWlzaGluZyBiZXR3ZWVuICcvJwojIGFzIGEgZGl2aWRlIHN5bWJvbCBhbmQgYXMgYSBwYXR0ZXJuIGRlbGltaXRlci4KIwojIEZvcm1hdHRlciBpbnNlcnRzIGFuZCBkZWxldGVzIHdoaXRlc3BhY2UgYmV0d2VlbiB0b2tlbnMsIGFuZCBicmVha3MKIyBzZXF1ZW5jZXMgb2YgdG9rZW5zIGF0IGFwcHJvcHJpYXRlIHBvaW50cyBhcyBvdXRwdXQgbGluZXMuICBJdCBiYXNlcyBpdHMKIyBkZWNpc2lvbnMgb24gdGhlIGRlZmF1bHQgcnVsZXMgYXMgbW9kaWZpZWQgYnkgYW55IGNvbW1hbmQtbGluZSBvcHRpb25zLgojCiMgVmVydGljYWxBbGlnbmVyIGNvbGxlY3RzIGdyb3VwcyBvZiBsaW5lcyB0b2dldGhlciBhbmQgdHJpZXMgdG8gbGluZSB1cAojIGNlcnRhaW4gdG9rZW5zLCBzdWNoIGFzICc9PicsICcjJywgYW5kICc9JyBieSBhZGRpbmcgd2hpdGVzcGFjZS4KIwojIEZpbGVXcml0ZXIgc2ltcGx5IHdyaXRlcyBsaW5lcyB0byB0aGUgb3V0cHV0IHN0cmVhbS4KIwojIFRoZSBMb2dnZXIgcGFja2FnZSwgbm90IHNob3duLCByZWNvcmRzIHNpZ25pZmljYW50IGV2ZW50cyBhbmQgd2FybmluZwojIG1lc3NhZ2VzLiAgSXQgd3JpdGVzIGEgLkxPRyBmaWxlLCB3aGljaCBtYXkgYmUgc2F2ZWQgd2l0aCBhCiMgJy1sb2cnIG9yIGEgJy1nJyBmbGFnLgoKeyAjPDw8ICAodGhpcyBzaWRlIGNvbW1lbnQgYXZvaWRzIGV4Y2Vzc2l2ZSBpbmRlbnRhdGlvbiBpbiBhIGNsb3N1cmUpCgpteSAkV2Fybl9jb3VudDsKbXkgJGZoX3N0ZGVycjsKbXkgJGxvYWRlZF91bmljb2RlX2djc3RyaW5nOwpteSAkcnN0YXR1czsKCiMgQnVtcCBXYXJuX2NvdW50IG9ubHk6IGl0IGlzIGVzc2VudGlhbCB0byBidW1wIHRoZSBjb3VudCBvbiBhbGwgd2FybmluZ3MsIGV2ZW4KIyBpZiBubyBtZXNzYWdlIGdvZXMgb3V0LCBzbyB0aGF0IHRoZSBjb3JyZWN0IGV4aXQgc3RhdHVzIGlzIHNldC4Kc3ViIFdhcm5fY291bnRfYnVtcCB7ICRXYXJuX2NvdW50Kys7IHJldHVybiB9CgojIE91dHB1dCBXYXJuIG1lc3NhZ2Ugb25seQpzdWIgV2Fybl9tc2cgeyBteSAkbXNnID0gc2hpZnQ7ICRmaF9zdGRlcnItPnByaW50KCRtc2cpOyByZXR1cm4gfQoKIyBPdXRwdXQgV2FybiBtZXNzYWdlIGFuZCBidW1wIFdhcm4gY291bnQKc3ViIFdhcm4geyBteSAkbXNnID0gc2hpZnQ7ICRmaF9zdGRlcnItPnByaW50KCRtc2cpOyAkV2Fybl9jb3VudCsrOyByZXR1cm4gfQoKc3ViIGlzX2NoYXJfbW9kZSB7CgogICAgbXkgKCRzdHJpbmcpID0gQF87CgogICAgIyBSZXR1cm5zOgogICAgIyAgIHRydWUgIGlmICRzdHJpbmcgaXMgaW4gUGVybCdzIGludGVybmFsIGNoYXJhY3RlciBtb2RlCiAgICAjICAgICAgICAgKGFsc28gY2FsbGVkIHRoZSAndXBncmFkZWQgZm9ybScsIG9yIFVURjg9MSkKICAgICMgICBmYWxzZSBpZiAkc3RyaW5nIGlzIGluIFBlcmwncyBpbnRlcm5hbCBieXRlIG1vZGUKCiAgICAjIFRoaXMgZnVuY3Rpb24gaXNvbGF0ZXMgdGhlIGNhbGwgdG8gUGVybCdzIGludGVybmFsIGZ1bmN0aW9uCiAgICAjIHV0Zjg6OmlzX3V0ZjgoKSB3aGljaCBpcyB0cnVlIGZvciBzdHJpbmdzIHJlcHJlc2VudGVkIGluIGFuICd1cGdyYWRlZAogICAgIyBmb3JtJy4gSXQgaXMgYXZhaWxhYmxlIEFGVEVSIFBlcmwgdmVyc2lvbiA1LjguCiAgICAjIFNlZSBodHRwczovL3Blcmxkb2MucGVybC5vcmcvRW5jb2RlLgogICAgIyBTZWUgYWxzbyBjb21tZW50cyBpbiBDYXJwLnBtIGFuZCBvdGhlciBtb2R1bGVzIHVzaW5nIHRoaXMgZnVuY3Rpb24KCiAgICByZXR1cm4gMSBpZiAoIHV0Zjg6OmlzX3V0ZjgoJHN0cmluZykgKTsKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGlzX2NoYXJfbW9kZQoKbXkgJG1kNV9oZXggPSBzdWIgewogICAgbXkgKCRidWYpID0gQF87CgogICAgIyBFdmFsdWF0ZSB0aGUgTUQ1IHN1bSBmb3IgYSBzdHJpbmc6CiAgICAjIEdpdmVuOgogICAgIyAgICRidWYgPSBhIHN0cmluZwogICAgIyBSZXR1cm46CiAgICAjICAgJGRpZ2VzdCA9IGl0cyBNRDUgc3VtCgogICAgIyBQYXRjaCBmb3IgW3J0LmNwYW4ub3JnICM4ODAyMF0KICAgICMgVXNlIHV0Zjg6OmVuY29kZSBzaW5jZSBtZDVfaGV4KCkgb25seSBvcGVyYXRlcyBvbiBieXRlcy4KICAgICMgbXkgJGRpZ2VzdCA9IG1kNV9oZXgoIHV0Zjg6OmVuY29kZSgkc2lua19idWZmZXIpICk7CgogICAgIyBOb3RlIGFkZGVkIDIwMTgwMTE0OiB0aGUgYWJvdmUgcGF0Y2ggZGlkIG5vdCB3b3JrIGNvcnJlY3RseS4gIEknbSBub3QKICAgICMgc3VyZSB3aHkuICBCdXQgc3dpdGNoaW5nIHRvIHRoZSBtZXRob2QgcmVjb21tZW5kZWQgaW4gdGhlIFBlcmwgNQogICAgIyBkb2N1bWVudGF0aW9uIGZvciBFbmNvZGUgd29ya2VkLiAgQWNjb3JkaW5nIHRvIHRoaXMgd2UgY2FuIGVpdGhlciB1c2UKICAgICMgICAgJG9jdGV0cyA9IGVuY29kZV91dGY4KCRzdHJpbmcpICBvciBlcXVpdmFsZW50bHkKICAgICMgICAgJG9jdGV0cyA9IGVuY29kZSgidXRmOCIsJHN0cmluZykKICAgICMgYW5kIHRoZW4gY2FsY3VsYXRlIHRoZSBjaGVja3N1bS4gIFNvOgogICAgbXkgJG9jdGV0cyA9IEVuY29kZTo6ZW5jb2RlKCAidXRmOCIsICRidWYgKTsKICAgIG15ICRkaWdlc3QgPSBtZDVfaGV4KCRvY3RldHMpOwogICAgcmV0dXJuICRkaWdlc3Q7Cn07ICMjIGVuZCAkbWQ1X2hleCA9IHN1YgoKc3ViIGdldF9pdGVyYXRpb25fY291bnQgewogICAgcmV0dXJuICRyc3RhdHVzLT57aXRlcmF0aW9uX2NvdW50fTsKfQoKQkVHSU4gewoKICAgICMgQXJyYXkgaW5kZXggbmFtZXMgZm9yICRzZWxmLgogICAgIyBEbyBub3QgY29tYmluZSB3aXRoIG90aGVyIEJFR0lOIGJsb2NrcyAoYzEwMSkuCiAgICBteSAkaSA9IDA7CiAgICB1c2UgY29uc3RhbnQgewogICAgICAgIF9hY3R1YWxfb3V0cHV0X2V4dGVuc2lvbl8gID0+ICRpKyssCiAgICAgICAgX2RlYnVnZmlsZV9zdHJlYW1fICAgICAgICAgPT4gJGkrKywKICAgICAgICBfZGVjb2RlZF9pbnB1dF9hc18gICAgICAgICA9PiAkaSsrLAogICAgICAgIF9kZXN0aW5hdGlvbl9zdHJlYW1fICAgICAgID0+ICRpKyssCiAgICAgICAgX2RpYWdub3N0aWNzX29iamVjdF8gICAgICAgPT4gJGkrKywKICAgICAgICBfZGlzcGxheV9uYW1lXyAgICAgICAgICAgICA9PiAkaSsrLAogICAgICAgIF9maWxlX2V4dGVuc2lvbl9zZXBhcmF0b3JfID0+ICRpKyssCiAgICAgICAgX2ZpbGVyb290XyAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfaXNfZW5jb2RlZF9kYXRhXyAgICAgICAgICA9PiAkaSsrLAogICAgICAgIF9sZW5ndGhfZnVuY3Rpb25fICAgICAgICAgID0+ICRpKyssCiAgICAgICAgX2xpbmVfc2VwYXJhdG9yX2RlZmF1bHRfICAgPT4gJGkrKywKICAgICAgICBfbGluZV9zZXBhcmF0b3JfICAgICAgICAgICA9PiAkaSsrLAogICAgICAgIF9saW5lX3RpZHlfYmVnaW5fICAgICAgICAgID0+ICRpKyssCiAgICAgICAgX2xpbmVfdGlkeV9lbmRfICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfbG9nZ2VyX29iamVjdF8gICAgICAgICAgICA9PiAkaSsrLAogICAgICAgIF9vdXRwdXRfZmlsZV8gICAgICAgICAgICAgID0+ICRpKyssCiAgICAgICAgX3Bvc3RmaWx0ZXJfICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcHJlZmlsdGVyXyAgICAgICAgICAgICAgICA9PiAkaSsrLAogICAgICAgIF9yT3B0c18gICAgICAgICAgICAgICAgICAgID0+ICRpKyssCiAgICAgICAgX3Nhd19wYnBfICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfdGVlZmlsZV9zdHJlYW1fICAgICAgICAgICA9PiAkaSsrLAogICAgICAgIF91c2VyX2Zvcm1hdHRlcl8gICAgICAgICAgID0+ICRpKyssCiAgICAgICAgX2lucHV0X2NvcGllZF92ZXJiYXRpbV8gICAgPT4gJGkrKywKICAgICAgICBfaW5wdXRfb3V0cHV0X2RpZmZlcmVuY2VfICA9PiAkaSsrLAogICAgICAgIF9kdW1wX3RvX3N0ZG91dF8gICAgICAgICAgID0+ICRpKyssCiAgICB9Owp9ICMjIGVuZCBCRUdJTgoKc3ViIHBlcmx0aWR5IHsKCiAgICBteSAlaW5wdXRfaGFzaCA9IEBfOwoKICAgICMgVGhpcyBpcyB0aGUgbWFpbiBwZXJsdGlkeSByb3V0aW5lCgogICAgbXkgJWRlZmF1bHRzID0gKAogICAgICAgIGFyZ3YgICAgICAgICAgICAgICAgICA9PiB1bmRlZiwKICAgICAgICBkZXN0aW5hdGlvbiAgICAgICAgICAgPT4gdW5kZWYsCiAgICAgICAgZm9ybWF0dGVyICAgICAgICAgICAgID0+IHVuZGVmLAogICAgICAgIGxvZ2ZpbGUgICAgICAgICAgICAgICA9PiB1bmRlZiwKICAgICAgICBlcnJvcmZpbGUgICAgICAgICAgICAgPT4gdW5kZWYsCiAgICAgICAgdGVlZmlsZSAgICAgICAgICAgICAgID0+IHVuZGVmLAogICAgICAgIGRlYnVnZmlsZSAgICAgICAgICAgICA9PiB1bmRlZiwKICAgICAgICBwZXJsdGlkeXJjICAgICAgICAgICAgPT4gdW5kZWYsCiAgICAgICAgc291cmNlICAgICAgICAgICAgICAgID0+IHVuZGVmLAogICAgICAgIHN0ZGVyciAgICAgICAgICAgICAgICA9PiB1bmRlZiwKICAgICAgICBkdW1wX29wdGlvbnMgICAgICAgICAgPT4gdW5kZWYsCiAgICAgICAgZHVtcF9vcHRpb25zX3R5cGUgICAgID0+IHVuZGVmLAogICAgICAgIGR1bXBfZ2V0b3B0X2ZsYWdzICAgICA9PiB1bmRlZiwKICAgICAgICBkdW1wX29wdGlvbnNfY2F0ZWdvcnkgPT4gdW5kZWYsCiAgICAgICAgZHVtcF9vcHRpb25zX3JhbmdlICAgID0+IHVuZGVmLAogICAgICAgIGR1bXBfYWJicmV2aWF0aW9ucyAgICA9PiB1bmRlZiwKICAgICAgICBwcmVmaWx0ZXIgICAgICAgICAgICAgPT4gdW5kZWYsCiAgICAgICAgcG9zdGZpbHRlciAgICAgICAgICAgID0+IHVuZGVmLAogICAgKTsKCiAgICAjIFN0YXR1cyBpbmZvcm1hdGlvbiB3aGljaCBjYW4gYmUgcmV0dXJuZWQgZm9yIGRpYWdub3N0aWMgcHVycG9zZXMuCiAgICAjIE5PVEU6IFRoaXMgaXMgaW50ZW5kZWQgb25seSBmb3IgdGVzdGluZyBhbmQgc3ViamVjdCB0byBjaGFuZ2UuCgogICAgIyBMaXN0IG9mICJrZXkgPT4gdmFsdWUiIGhhc2ggZW50cmllczoKCiAgICAjIFNvbWUgcmVsZXZhbnQgdXNlciBpbnB1dCBwYXJhbWV0ZXJzIGZvciBjb252ZW5pZW5jZToKICAgICMgb3B0X2Zvcm1hdCAgICAgICAgID0+IHZhbHVlIG9mIC0tZm9ybWF0OiAndGlkeScsICdodG1sJywgb3IgJ3VzZXInCiAgICAjIG9wdF9lbmNvZGluZyAgICAgICA9PiB2YWx1ZSBvZiAtZW5jIGZsYWc6ICd1dGY4JywgJ25vbmUnLCBvciAnZ3Vlc3MnCiAgICAjIG9wdF9lbmNvZGVfb3V0cHV0ICA9PiB2YWx1ZSBvZiAtZW9zIGZsYWc6ICdlb3MnIG9yICduZW9zJwogICAgIyBvcHRfbWF4X2l0ZXJhdGlvbnMgPT4gdmFsdWUgb2YgLS1pdGVyYXRpb25zPW4KCiAgICAjIGZpbGVfY291bnQgICAgICAgICA9PiBudW1iZXIgb2YgZmlsZXMgcHJvY2Vzc2VkIGluIHRoaXMgY2FsbAoKICAgICMgSWYgbXVsdGlwbGUgZmlsZXMgYXJlIHByb2Nlc3NlZCwgdGhlbiB0aGUgZm9sbG93aW5nIHZhbHVlcyB3aWxsIGJlIGZvcgogICAgIyB0aGUgbGFzdCBmaWxlIG9ubHk6CgogICAgIyBpbnB1dF9uYW1lICAgICAgICAgPT4gbmFtZSBvZiB0aGUgaW5wdXQgc3RyZWFtCiAgICAjIG91dHB1dF9uYW1lICAgICAgICA9PiBuYW1lIG9mIHRoZSBvdXRwdXQgc3RyZWFtCgogICAgIyBUaGUgZm9sbG93aW5nIHR3byB2YXJpYWJsZXMgcmVmZXIgdG8gUGVybCdzIHR3byBpbnRlcm5hbCBzdHJpbmcgbW9kZXMsCiAgICAjIGFuZCBoYXZlIHRoZSB2YWx1ZXMgMCBmb3IgJ2J5dGUnIG1vZGUgYW5kIDEgZm9yICdjaGFyJyBtb2RlOgogICAgIyBjaGFyX21vZGVfc291cmNlICAgPT4gdHJ1ZSBpZiBzb3VyY2UgaXMgaW4gJ2NoYXInIG1vZGUuIFdpbGwgYmUgZmFsc2UKICAgICMgICAgICB1bmxlc3Mgd2UgcmVjZWl2ZWQgYSBzb3VyY2Ugc3RyaW5nIHJlZiB3aXRoIHV0Zjg6OmlzX3V0ZjgoKSBzZXQuCiAgICAjIGNoYXJfbW9kZV91c2VkICAgICA9PiB0cnVlIGlmIHRleHQgcHJvY2Vzc2VkIGJ5IHBlcmx0aWR5IGluICdjaGFyJyBtb2RlLgogICAgIyAgICAgIE5vcm1hbGx5IHRydWUgZm9yIHRleHQgaWRlbnRpZmllZCBhcyB1dGY4LCBvdGhlcndpc2UgZmFsc2UuCgogICAgIyBUaGlzIHRlbGxzIGlmIFVuaWNvZGU6OkdDU3RyaW5nIHdhcyB1c2VkCiAgICAjIGdjc191c2VkICAgICAgICAgICA9PiB0cnVlIGlmIC1nY3MgYW5kIFVuaWNvZGU6OkdDU3RyaW5nIGZvdW5kICYgdXNlZAoKICAgICMgVGhlc2UgdmFyaWFibGVzIHRlbGwgd2hhdCB1dGY4IGRlY29kaW5nL2VuY29kaW5nIHdhcyBkb25lOgogICAgIyBpbnB1dF9kZWNvZGVkX2FzICAgPT4gbm9uLWJsYW5rIGlmIHBlcmx0aWR5IGRlY29kZWQgdGhlIHNvdXJjZSB0ZXh0CiAgICAjIG91dHB1dF9lbmNvZGVkX2FzICA9PiBub24tYmxhbmsgaWYgcGVybHRpZHkgZW5jb2RlZCBiZWZvcmUgcmV0dXJuCgogICAgIyBUaGVzZSB2YXJpYWJsZXMgYXJlIHJlbGF0ZWQgdG8gaXRlcmF0aW9ucyBhbmQgY29udmVyZ2VuY2UgdGVzdGluZzoKICAgICMgaXRlcmF0aW9uX2NvdW50ICAgID0+IG51bWJlciBvZiBpdGVyYXRpb25zIGRvbmUKICAgICMgICAgICAgICAgICAgICAgICAgICAgICggY2FuIGJlIGZyb20gMSB0byBvcHRfbWF4X2l0ZXJhdGlvbnMgKQogICAgIyBjb252ZXJnZWQgICAgICAgICAgPT4gdHJ1ZSBpZiBzdG9wcGVkIG9uIGNvbnZlcmdlbmNlCiAgICAjICAgICAgICAgICAgICAgICAgICAgICAoIGNhbiBvbmx5IGhhcHBlbiBpZiBvcHRfbWF4X2l0ZXJhdGlvbnMgPiAxICkKICAgICMgYmxpbmtpbmcgICAgICAgICAgID0+IHRydWUgaWYgc3RvcHBlZCBvbiBibGlua2luZyBzdGF0ZXMKICAgICMgICAgICAgICAgICAgICAgICAgICAgICggaS5lLiwgdW5zdGFibGUgZm9ybWF0dGluZywgc2hvdWxkIG5vdCBoYXBwZW4gKQoKICAgICRyc3RhdHVzID0gewoKICAgICAgICBmaWxlX2NvdW50ICAgICAgICAgPT4gMCwKICAgICAgICBvcHRfZm9ybWF0ICAgICAgICAgPT4gRU1QVFlfU1RSSU5HLAogICAgICAgIG9wdF9lbmNvZGluZyAgICAgICA9PiBFTVBUWV9TVFJJTkcsCiAgICAgICAgb3B0X2VuY29kZV9vdXRwdXQgID0+IEVNUFRZX1NUUklORywKICAgICAgICBvcHRfbWF4X2l0ZXJhdGlvbnMgPT4gRU1QVFlfU1RSSU5HLAoKICAgICAgICBpbnB1dF9uYW1lICAgICAgICA9PiBFTVBUWV9TVFJJTkcsCiAgICAgICAgb3V0cHV0X25hbWUgICAgICAgPT4gRU1QVFlfU1RSSU5HLAogICAgICAgIGNoYXJfbW9kZV9zb3VyY2UgID0+IDAsCiAgICAgICAgY2hhcl9tb2RlX3VzZWQgICAgPT4gMCwKICAgICAgICBpbnB1dF9kZWNvZGVkX2FzICA9PiBFTVBUWV9TVFJJTkcsCiAgICAgICAgb3V0cHV0X2VuY29kZWRfYXMgPT4gRU1QVFlfU1RSSU5HLAogICAgICAgIGdjc191c2VkICAgICAgICAgID0+IDAsCiAgICAgICAgaXRlcmF0aW9uX2NvdW50ICAgPT4gMCwKICAgICAgICBjb252ZXJnZWQgICAgICAgICA9PiAwLAogICAgICAgIGJsaW5raW5nICAgICAgICAgID0+IDAsCiAgICB9OwoKICAgICMgRml4IGZvciBpc3N1ZSBnaXQgIzU3CiAgICAkV2Fybl9jb3VudCA9IDA7CgogICAgIyBkb24ndCBvdmVyd3JpdGUgY2FsbGVycyBBUkdWCiAgICAjIExvY2FsaXphdGlvbiBvZiBAQVJHViBjb3VsZCBiZSBhdm9pZGVkIGJ5IGNhbGxpbmcgR2V0T3B0aW9uc0Zyb21BcnJheQogICAgIyBpbnN0ZWFkIG9mIEdldE9wdGlvbnMsIGJ1dCB0aGF0IGlzIG5vdCBhdmFpbGFibGUgYmVmb3JlIHBlcmwgNS4xMAogICAgbG9jYWwgQEFSR1YgICA9IEBBUkdWOwogICAgbG9jYWwgKlNUREVSUiA9ICpTVERFUlI7CgogICAgaWYgKCBteSBAYmFkX2tleXMgPSBncmVwIHsgIWV4aXN0cyAkZGVmYXVsdHN7JF99IH0ga2V5cyAlaW5wdXRfaGFzaCApIHsKICAgICAgICBsb2NhbCAkTElTVF9TRVBBUkFUT1IgPSAnKSgnOwogICAgICAgIG15IEBnb29kX2tleXMgPSBzb3J0IGtleXMgJWRlZmF1bHRzOwogICAgICAgIEBiYWRfa2V5cyA9IHNvcnQgQGJhZF9rZXlzOwogICAgICAgIGNvbmZlc3MgPDxFT007Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpVbmtub3duIHBlcmx0aWR5IHBhcmFtZXRlciA6IChAYmFkX2tleXMpCnBlcmx0aWR5IG9ubHkgdW5kZXJzdGFuZHMgOiAoQGdvb2Rfa2V5cykKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpFT00KICAgIH0KCiAgICBteSAkZ2V0X2hhc2hfcmVmID0gc3ViIHsKICAgICAgICBteSAoJGtleSkgPSBAXzsKICAgICAgICBteSAkaGFzaF9yZWYgPSAkaW5wdXRfaGFzaHska2V5fTsKICAgICAgICBpZiAoIGRlZmluZWQoJGhhc2hfcmVmKSApIHsKICAgICAgICAgICAgaWYgKCByZWYoJGhhc2hfcmVmKSBuZSAnSEFTSCcgKSB7CiAgICAgICAgICAgICAgICBteSAkd2hhdCA9IHJlZigkaGFzaF9yZWYpOwogICAgICAgICAgICAgICAgbXkgJGJ1dF9pcyA9CiAgICAgICAgICAgICAgICAgICR3aGF0ID8gImJ1dCBpcyByZWYgdG8gJHdoYXQiIDogImJ1dCBpcyBub3QgYSByZWZlcmVuY2UiOwogICAgICAgICAgICAgICAgY3JvYWsgPDxFT007Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQplcnJvciBpbiBjYWxsIHRvIHBlcmx0aWR5OgotJGtleSBtdXN0IGJlIHJlZmVyZW5jZSB0byBIQVNIICRidXRfaXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkVPTQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkaGFzaF9yZWY7CiAgICB9OyAjIyBlbmQgJGdldF9oYXNoX3JlZiA9IHN1YgoKICAgICVpbnB1dF9oYXNoID0gKCAlZGVmYXVsdHMsICVpbnB1dF9oYXNoICk7CiAgICBteSAkYXJndiAgICAgICAgICAgICAgID0gJGlucHV0X2hhc2h7J2FyZ3YnfTsKICAgIG15ICRkZXN0aW5hdGlvbl9zdHJlYW0gPSAkaW5wdXRfaGFzaHsnZGVzdGluYXRpb24nfTsKICAgIG15ICRwZXJsdGlkeXJjX3N0cmVhbSAgPSAkaW5wdXRfaGFzaHsncGVybHRpZHlyYyd9OwogICAgbXkgJHNvdXJjZV9zdHJlYW0gICAgICA9ICRpbnB1dF9oYXNoeydzb3VyY2UnfTsKICAgIG15ICRzdGRlcnJfc3RyZWFtICAgICAgPSAkaW5wdXRfaGFzaHsnc3RkZXJyJ307CiAgICBteSAkdXNlcl9mb3JtYXR0ZXIgICAgID0gJGlucHV0X2hhc2h7J2Zvcm1hdHRlcid9OwogICAgbXkgJHByZWZpbHRlciAgICAgICAgICA9ICRpbnB1dF9oYXNoeydwcmVmaWx0ZXInfTsKICAgIG15ICRwb3N0ZmlsdGVyICAgICAgICAgPSAkaW5wdXRfaGFzaHsncG9zdGZpbHRlcid9OwoKICAgIGlmICgkc3RkZXJyX3N0cmVhbSkgewogICAgICAgICRmaF9zdGRlcnIgPSBQZXJsOjpUaWR5OjpzdHJlYW1oYW5kbGUoICRzdGRlcnJfc3RyZWFtLCAndycgKTsKICAgICAgICBpZiAoICEkZmhfc3RkZXJyICkgewogICAgICAgICAgICBjcm9hayA8PEVPTTsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClVuYWJsZSB0byByZWRpcmVjdCBTVERFUlIgdG8gJHN0ZGVycl9zdHJlYW0KUGxlYXNlIGNoZWNrIHZhbHVlIG9mIC1zdGRlcnIgaW4gY2FsbCB0byBwZXJsdGlkeQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRU9NCiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgJGZoX3N0ZGVyciA9ICpTVERFUlI7CiAgICB9CgogICAgbXkgJHNlbGYgPSBbXTsKICAgIGJsZXNzICRzZWxmLCBfX1BBQ0tBR0VfXzsKCiAgICBzdWIgRXhpdCB7CiAgICAgICAgbXkgJGZsYWcgPSBzaGlmdDsKICAgICAgICBpZiAgICgkZmxhZykgeyBnb3RvIEVSUk9SX0VYSVQgfQogICAgICAgIGVsc2UgICAgICAgICB7IGdvdG8gTk9STUFMX0VYSVQgfQogICAgICAgIGNyb2FrICJ1bmV4cGVjdGVkIHJldHVybiB0byBzdWIgRXhpdCI7CiAgICB9ICMjIGVuZCBzdWIgRXhpdAoKICAgIHN1YiBEaWUgewogICAgICAgIG15ICRtc2cgPSBzaGlmdDsKICAgICAgICBXYXJuKCRtc2cpOwogICAgICAgIEV4aXQoMSk7CiAgICAgICAgY3JvYWsgInVuZXhwZWN0ZWQgcmV0dXJuIGZyb20gc3ViIEV4aXQiOwogICAgfSAjIyBlbmQgc3ViIERpZQoKICAgIHN1YiBGYXVsdCB7CiAgICAgICAgbXkgKCRtc2cpID0gQF87CgogICAgICAgICMgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBmb3IgZXJyb3JzIHRoYXQgcmVhbGx5IHNob3VsZCBub3Qgb2NjdXIKICAgICAgICAjIGV4Y2VwdCBpZiB0aGVyZSBoYXMgYmVlbiBhIGJ1ZyBpbnRyb2R1Y2VkIGJ5IGEgcmVjZW50IHByb2dyYW0gY2hhbmdlLgogICAgICAgICMgUGxlYXNlIGFkZCBjb21tZW50cyBhdCBjYWxscyB0byBGYXVsdCB0byBleHBsYWluIHdoeSB0aGUgY2FsbAogICAgICAgICMgc2hvdWxkIG5vdCBvY2N1ciwgYW5kIHdoZXJlIHRvIGxvb2sgdG8gZml4IGl0LgogICAgICAgIG15ICggJHBhY2thZ2UwX3V1LCAkZmlsZW5hbWUwX3V1LCAkbGluZTAsICRzdWJyb3V0aW5lMF91dSApID0gY2FsbGVyKDApOwogICAgICAgIG15ICggJHBhY2thZ2UxX3V1LCAkZmlsZW5hbWUxLCAgICAkbGluZTEsICRzdWJyb3V0aW5lMSApICAgID0gY2FsbGVyKDEpOwogICAgICAgIG15ICggJHBhY2thZ2UyX3V1LCAkZmlsZW5hbWUyX3V1LCAkbGluZTJfdXUsICRzdWJyb3V0aW5lMiApID0gY2FsbGVyKDIpOwogICAgICAgIG15ICRwa2cgPSBfX1BBQ0tBR0VfXzsKCiAgICAgICAgbXkgJGlucHV0X3N0cmVhbV9uYW1lID0gJHJzdGF0dXMtPnsnaW5wdXRfbmFtZSd9OwogICAgICAgICRpbnB1dF9zdHJlYW1fbmFtZSA9ICcodW5rbm93biknIHVubGVzcyAoJGlucHV0X3N0cmVhbV9uYW1lKTsKICAgICAgICBEaWUoPDxFT00pOwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hpbGUgb3BlcmF0aW5nIG9uIGlucHV0IHN0cmVhbSB3aXRoIG5hbWU6ICckaW5wdXRfc3RyZWFtX25hbWUnCkEgZmF1bHQgd2FzIGRldGVjdGVkIGF0IGxpbmUgJGxpbmUwIG9mIHN1YiAnJHN1YnJvdXRpbmUxJwppbiBmaWxlICckZmlsZW5hbWUxJwp3aGljaCB3YXMgY2FsbGVkIGZyb20gbGluZSAkbGluZTEgb2Ygc3ViICckc3Vicm91dGluZTInCk1lc3NhZ2U6ICckbXNnJwpUaGlzIGlzIHByb2JhYmx5IGFuIGVycm9yIGludHJvZHVjZWQgYnkgYSByZWNlbnQgcHJvZ3JhbW1pbmcgY2hhbmdlLgokcGtnIHJlcG9ydHMgVkVSU0lPTj0nJFZFUlNJT04nLgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KRU9NCgogICAgICAgIGNyb2FrICJ1bmV4cGVjdGVkIHJldHVybiBmcm9tIHN1YiBEaWUiOwogICAgfSAjIyBlbmQgc3ViIEZhdWx0CgogICAgIyBleHRyYWN0IHZhcmlvdXMgZHVtcCBwYXJhbWV0ZXJzCiAgICBteSAkZHVtcF9vcHRpb25zX3R5cGUgICAgID0gJGlucHV0X2hhc2h7J2R1bXBfb3B0aW9uc190eXBlJ307CiAgICBteSAkZHVtcF9vcHRpb25zICAgICAgICAgID0gJGdldF9oYXNoX3JlZi0+KCdkdW1wX29wdGlvbnMnKTsKICAgIG15ICRkdW1wX2dldG9wdF9mbGFncyAgICAgPSAkZ2V0X2hhc2hfcmVmLT4oJ2R1bXBfZ2V0b3B0X2ZsYWdzJyk7CiAgICBteSAkZHVtcF9vcHRpb25zX2NhdGVnb3J5ID0gJGdldF9oYXNoX3JlZi0+KCdkdW1wX29wdGlvbnNfY2F0ZWdvcnknKTsKICAgIG15ICRkdW1wX2FiYnJldmlhdGlvbnMgICAgPSAkZ2V0X2hhc2hfcmVmLT4oJ2R1bXBfYWJicmV2aWF0aW9ucycpOwogICAgbXkgJGR1bXBfb3B0aW9uc19yYW5nZSAgICA9ICRnZXRfaGFzaF9yZWYtPignZHVtcF9vcHRpb25zX3JhbmdlJyk7CgogICAgIyB2YWxpZGF0ZSBkdW1wX29wdGlvbnNfdHlwZQogICAgaWYgKCBkZWZpbmVkKCRkdW1wX29wdGlvbnMpICkgewogICAgICAgIGlmICggIWRlZmluZWQoJGR1bXBfb3B0aW9uc190eXBlKSApIHsKICAgICAgICAgICAgJGR1bXBfb3B0aW9uc190eXBlID0gJ3Blcmx0aWR5cmMnOwogICAgICAgIH0KICAgICAgICBpZiAoICAgJGR1bXBfb3B0aW9uc190eXBlIG5lICdwZXJsdGlkeXJjJwogICAgICAgICAgICAmJiAkZHVtcF9vcHRpb25zX3R5cGUgbmUgJ2Z1bGwnICkKICAgICAgICB7CiAgICAgICAgICAgIGNyb2FrIDw8RU9NOwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KUGxlYXNlIGNoZWNrIHZhbHVlIG9mIC1kdW1wX29wdGlvbnNfdHlwZSBpbiBjYWxsIHRvIHBlcmx0aWR5OwpzYXc6ICckZHVtcF9vcHRpb25zX3R5cGUnCmV4cGVjdGluZzogJ3Blcmx0aWR5cmMnIG9yICdmdWxsJwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRU9NCgogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgICRkdW1wX29wdGlvbnNfdHlwZSA9IEVNUFRZX1NUUklORzsKICAgIH0KCiAgICBpZiAoJHVzZXJfZm9ybWF0dGVyKSB7CgogICAgICAgICMgaWYgdGhlIHVzZXIgZGVmaW5lcyBhIGZvcm1hdHRlciwgdGhlcmUgaXMgbm8gb3V0cHV0IHN0cmVhbSwKICAgICAgICAjIGJ1dCB3ZSBuZWVkIGEgbnVsbCBzdHJlYW0gdG8ga2VlcCBjb2Rpbmcgc2ltcGxlCiAgICAgICAgJGRlc3RpbmF0aW9uX3N0cmVhbSA9IFxteSAkdG1wOwogICAgfQoKICAgICMgc2VlIGlmIEFSR1YgaXMgb3ZlcnJpZGRlbgogICAgaWYgKCBkZWZpbmVkKCRhcmd2KSApIHsKCiAgICAgICAgbXkgJHJhcmd2ID0gcmVmKCRhcmd2KTsKICAgICAgICBpZiAoICRyYXJndiBlcSAnU0NBTEFSJyApIHsgJGFyZ3YgPSAkeyRhcmd2fTsgJHJhcmd2ID0gdW5kZWYgfQoKICAgICAgICAjIHJlZiB0byBBUlJBWQogICAgICAgIGlmICgkcmFyZ3YpIHsKICAgICAgICAgICAgaWYgKCAkcmFyZ3YgZXEgJ0FSUkFZJyApIHsKICAgICAgICAgICAgICAgIEBBUkdWID0gQHskYXJndn07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBjcm9hayA8PEVPTTsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClBsZWFzZSBjaGVjayB2YWx1ZSBvZiAtYXJndiBpbiBjYWxsIHRvIHBlcmx0aWR5OwppdCBtdXN0IGJlIGEgc3RyaW5nIG9yIHJlZiB0byBBUlJBWSBidXQgaXM6ICRyYXJndgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRU9NCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc3RyaW5nCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIG15ICggJHJhcmd2X3N0ciwgJG1zZyApID0gcGFyc2VfYXJncygkYXJndik7CiAgICAgICAgICAgIGlmICgkbXNnKSB7CiAgICAgICAgICAgICAgICBEaWUoPDxFT00pOwpFcnJvciBwYXJzaW5nIHRoaXMgc3RyaW5nIHBhc3NlZCB0byB0byBwZXJsdGlkeSB3aXRoICdhcmd2JzoKJG1zZwpFT00KICAgICAgICAgICAgfQogICAgICAgICAgICBAQVJHViA9IEB7JHJhcmd2X3N0cn07CiAgICAgICAgfQogICAgfQoKICAgICMgVGhlc2Ugc3RyaW5nIHJlZnMgd2lsbCBob2xkIGFueSB3YXJuaW5ncyBhbmQgZXJyb3IgbWVzc2FnZXMgdG8gYmUgd3JpdHRlbgogICAgIyB0byB0aGUgbG9nZmlsZSBvYmplY3Qgd2hlbiBpdCBldmVudHVhbGx5IGdldHMgY3JlYXRlZC4KICAgIG15ICRycGVuZGluZ19jb21wbGFpbnQ7CiAgICAkeyRycGVuZGluZ19jb21wbGFpbnR9ID0gRU1QVFlfU1RSSU5HOwoKICAgIG15ICRycGVuZGluZ19sb2dmaWxlX21lc3NhZ2U7CiAgICAkeyRycGVuZGluZ19sb2dmaWxlX21lc3NhZ2V9ID0gRU1QVFlfU1RSSU5HOwoKICAgIG15ICggJGlzX1dpbmRvd3MsICRXaW5kb3dzX3R5cGUgKSA9IGxvb2tfZm9yX1dpbmRvd3MoJHJwZW5kaW5nX2NvbXBsYWludCk7CgogICAgIyBWTVMgZmlsZSBuYW1lcyBhcmUgcmVzdHJpY3RlZCB0byBhIDQwLjQwIGZvcm1hdCwgc28gd2UgYXBwZW5kIF90ZHkKICAgICMgaW5zdGVhZCBvZiAudGR5LCBldGMuIChidXQgc2VlIGFsc28gc3ViIGNoZWNrX3Ztc19maWxlbmFtZSkKICAgIG15ICRkb3Q7CiAgICBteSAkZG90X3BhdHRlcm47CiAgICBpZiAoICRPU05BTUUgZXEgJ1ZNUycgKSB7CiAgICAgICAgJGRvdCAgICAgICAgID0gJ18nOwogICAgICAgICRkb3RfcGF0dGVybiA9ICdfJzsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRkb3QgICAgICAgICA9ICcuJzsKICAgICAgICAkZG90X3BhdHRlcm4gPSAnXC4nOyAgICAjIG11c3QgZXNjYXBlIGZvciB1c2UgaW4gcmVnZXgKICAgIH0KICAgICRzZWxmLT5bX2ZpbGVfZXh0ZW5zaW9uX3NlcGFyYXRvcl9dID0gJGRvdDsKCiAgICAjIHNhdmUgYSBjb3B5IG9mIHRoZSBsYXN0IHR3byBpbnB1dCBhcmdzIGZvciBlcnJvciBjaGVja2luZyBsYXRlcgogICAgbXkgQEFSR1Zfc2F2ZWQ7CiAgICBpZiAoIEBBUkdWID4gMSApIHsKICAgICAgICBAQVJHVl9zYXZlZCA9ICggJEFSR1ZbLTJdLCAkQVJHVlstMV0gKTsKICAgIH0KCiAgICAjIHNlZSBpZiAtd3Z0IHdhcyBlbnRlcmVkIG9uIHRoZSBjb21tYW5kIGxpbmUgYmVmb3JlIEBBUkdWIGlzIGNoYW5nZWQKICAgIG15ICR3dnRfaW5fYXJncyA9IGdyZXAgeyAvLSh3dnR8d2Fybi12YXJpYWJsZS10eXBlcyk9LyB9IEBBUkdWOwoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIGdldCBjb21tYW5kIGxpbmUgb3B0aW9ucwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIG15ICggJHJPcHRzLCAkY29uZmlnX2ZpbGUsICRycmF3X29wdGlvbnMsICRyb3B0aW9uX3N0cmluZywKICAgICAgICAkcmV4cGFuc2lvbiwgJHJvcHRpb25fY2F0ZWdvcnksICRyb3B0aW9uX3JhbmdlLCAkcmludGVnZXJfb3B0aW9uX3JhbmdlICkKICAgICAgPSBwcm9jZXNzX2NvbW1hbmRfbGluZSgKICAgICAgICAkcGVybHRpZHlyY19zdHJlYW0sICAkaXNfV2luZG93cywgJFdpbmRvd3NfdHlwZSwKICAgICAgICAkcnBlbmRpbmdfY29tcGxhaW50LCAkZHVtcF9vcHRpb25zX3R5cGUsCiAgICAgICk7CgogICAgIyBPbmx5IGZpbGVuYW1lcyBzaG91bGQgcmVtYWluIGluIEBBUkdWCiAgICBteSBAQXJnX2ZpbGVzID0gQEFSR1Y7CgogICAgJHNlbGYtPltfck9wdHNfXSA9ICRyT3B0czsKCiAgICBteSAkc2F3X3BicCA9CiAgICAgIGdyZXAgeyAkXyBlcSAnLXBicCcgfHwgJF8gZXEgJy1wZXJsLWJlc3QtcHJhY3RpY2VzJyB9IEB7JHJyYXdfb3B0aW9uc307CiAgICAkc2VsZi0+W19zYXdfcGJwX10gPSAkc2F3X3BicDsKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIEhhbmRsZSByZXF1ZXN0cyB0byBkdW1wIGluZm9ybWF0aW9uCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgIyByZXR1cm4gb3IgZXhpdCBpbW1lZGlhdGVseSBhZnRlciBhbGwgZHVtcHMKICAgIG15ICRxdWl0X25vdyA9IDA7CgogICAgIyBHZXRvcHQgcGFyYW1ldGVycyBhbmQgdGhlaXIgZmxhZ3MKICAgIGlmICggZGVmaW5lZCgkZHVtcF9nZXRvcHRfZmxhZ3MpICkgewogICAgICAgICRxdWl0X25vdyA9IDE7CiAgICAgICAgZm9yZWFjaCBteSAkb3AgKCBAeyRyb3B0aW9uX3N0cmluZ30gKSB7CiAgICAgICAgICAgIG15ICRvcHQgID0gJG9wOwogICAgICAgICAgICBteSAkZmxhZyA9IEVNUFRZX1NUUklORzsKCiAgICAgICAgICAgICMgRXhhbXBsZXM6CiAgICAgICAgICAgICMgIHNvbWUtb3B0aW9uPXMKICAgICAgICAgICAgIyAgc29tZS1vcHRpb249aQogICAgICAgICAgICAjICBzb21lLW9wdGlvbjppCiAgICAgICAgICAgICMgIHNvbWUtb3B0aW9uIQogICAgICAgICAgICBpZiAoICRvcHQgPX4gLyguKikoIXw9Lip8Oi4qKSQvICkgewogICAgICAgICAgICAgICAgJG9wdCAgPSAkMTsKICAgICAgICAgICAgICAgICRmbGFnID0gJDI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGR1bXBfZ2V0b3B0X2ZsYWdzLT57JG9wdH0gPSAkZmxhZzsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCBkZWZpbmVkKCRkdW1wX29wdGlvbnNfY2F0ZWdvcnkpICkgewogICAgICAgICRxdWl0X25vdyA9IDE7CiAgICAgICAgJXskZHVtcF9vcHRpb25zX2NhdGVnb3J5fSA9ICV7JHJvcHRpb25fY2F0ZWdvcnl9OwogICAgfQoKICAgIGlmICggZGVmaW5lZCgkZHVtcF9vcHRpb25zX3JhbmdlKSApIHsKICAgICAgICAkcXVpdF9ub3cgPSAxOwogICAgICAgICV7JGR1bXBfb3B0aW9uc19yYW5nZX0gPSAleyRyb3B0aW9uX3JhbmdlfTsKICAgIH0KCiAgICBpZiAoIGRlZmluZWQoJGR1bXBfYWJicmV2aWF0aW9ucykgKSB7CiAgICAgICAgJHF1aXRfbm93ID0gMTsKICAgICAgICAleyRkdW1wX2FiYnJldmlhdGlvbnN9ID0gJXskcmV4cGFuc2lvbn07CiAgICB9CgogICAgaWYgKCBkZWZpbmVkKCRkdW1wX29wdGlvbnMpICkgewogICAgICAgICRxdWl0X25vdyA9IDE7CiAgICAgICAgJXskZHVtcF9vcHRpb25zfSA9ICV7JHJPcHRzfTsKICAgIH0KCiAgICBFeGl0KDApIGlmICgkcXVpdF9ub3cpOwoKICAgICMgbWFrZSBwcmludGFibGUgc3RyaW5nIG9mIG9wdGlvbnMgZm9yIHRoaXMgcnVuIGFzIHBvc3NpYmxlIGRpYWdub3N0aWMKICAgIG15ICRyZWFkYWJsZV9vcHRpb25zID0gcmVhZGFibGVfb3B0aW9ucyggJHJPcHRzLCAkcm9wdGlvbl9zdHJpbmcgKTsKCiAgICAjIGR1bXAgZnJvbSBjb21tYW5kIGxpbmUKICAgIGlmICggJHJPcHRzLT57J2R1bXAtb3B0aW9ucyd9ICkgewogICAgICAgIHByaW50IHsqU1RET1VUfSAkcmVhZGFibGVfb3B0aW9uczsKICAgICAgICBFeGl0KDApOwogICAgfQoKICAgICMgc29tZSBkdW1wIG9wdGlvbnMgcmVxdWlyZSBvbmUgZmlsZW5hbWUgaW4gdGhlIGFyZyBsaXN0LiAgVGhpcyBpcyBhIHNhZmV0eQogICAgIyBwcmVjYXV0aW9uIGluIGNhc2UgYSB1c2VyIGFjY2lkZW50YWxseSBhZGRzIHN1Y2ggYW4gb3B0aW9uIHRvIHRoZSBjb21tYW5kCiAgICAjIGxpbmUgcGFyYW1ldGVycyBhbmQgaXMgZXhwZWN0aW5nIGZvcm1hdHRlZCBvdXRwdXQgdG8gc3Rkb3V0LiAgQW5vdGhlcgogICAgIyBwcmVjYXV0aW9uLCBhZGRlZCBlbHNld2hlcmUsIGlzIHRvIGlnbm9yZSB0aGVzZSBpbiBhIC5wZXJsdGlkeXJjCiAgICBteSAkbnVtX2ZpbGVzID0gQEFyZ19maWxlczsKICAgIGZvcmVhY2ggbXkgJG9wdF9uYW1lICgKICAgICAgICBxdygKICAgICAgICBkdW1wLWJsb2NrLXN1bW1hcnkKICAgICAgICBkdW1wLXVudXN1YWwtdmFyaWFibGVzCiAgICAgICAgZHVtcC1taXhlZC1jYWxsLXBhcmVucwogICAgICAgIGR1bXAtbWlzbWF0Y2hlZC1hcmdzCiAgICAgICAgZHVtcC1taXNtYXRjaGVkLXJldHVybnMKICAgICAgICBkdW1wLXVuaXF1ZS1rZXlzCiAgICAgICAgKQogICAgICApCiAgICB7CiAgICAgICAgaWYgKCAkck9wdHMtPnskb3B0X25hbWV9ICkgewogICAgICAgICAgICAkc2VsZi0+W19kdW1wX3RvX3N0ZG91dF9dID0gMTsKICAgICAgICAgICAgaWYgKCAkbnVtX2ZpbGVzICE9IDEgKSB7CiAgICAgICAgICAgICAgICBEaWUoPDxFT00pOwotLSRvcHRfbmFtZSBleHBlY3RzIDEgZmlsZW5hbWUgaW4gdGhlIGFyZyBsaXN0IGJ1dCBzYXcgJG51bV9maWxlcyBmaWxlbmFtZXMKRU9NCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgY2hlY2sgcGFyYW1ldGVycyBhbmQgdGhlaXIgaW50ZXJhY3Rpb25zCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgJHNlbGYtPmNoZWNrX29wdGlvbnMoICRudW1fZmlsZXMsICRyaW50ZWdlcl9vcHRpb25fcmFuZ2UgKTsKCiAgICBpZiAoJHVzZXJfZm9ybWF0dGVyKSB7CiAgICAgICAgJHJPcHRzLT57J2Zvcm1hdCd9ID0gJ3VzZXInOwogICAgfQoKICAgICMgdGhlcmUgbXVzdCBiZSBvbmUgZW50cnkgaGVyZSBmb3IgZXZlcnkgcG9zc2libGUgZm9ybWF0CiAgICBteSAlZGVmYXVsdF9maWxlX2V4dGVuc2lvbiA9ICgKICAgICAgICB0aWR5ID0+ICd0ZHknLAogICAgICAgIGh0bWwgPT4gJ2h0bWwnLAogICAgICAgIHVzZXIgPT4gRU1QVFlfU1RSSU5HLAogICAgKTsKCiAgICAkcnN0YXR1cy0+eydvcHRfZm9ybWF0J30gICAgICAgICA9ICRyT3B0cy0+eydmb3JtYXQnfTsKICAgICRyc3RhdHVzLT57J29wdF9tYXhfaXRlcmF0aW9ucyd9ID0gJHJPcHRzLT57J2l0ZXJhdGlvbnMnfTsKICAgICRyc3RhdHVzLT57J29wdF9lbmNvZGVfb3V0cHV0J30gPQogICAgICAkck9wdHMtPnsnZW5jb2RlLW91dHB1dC1zdHJpbmdzJ30gPyAnZW9zJyA6ICduZW9zJzsKCiAgICAjIGJlIHN1cmUgd2UgaGF2ZSBhIHZhbGlkIG91dHB1dCBmb3JtYXQKICAgIGlmICggIWV4aXN0cyAkZGVmYXVsdF9maWxlX2V4dGVuc2lvbnsgJHJPcHRzLT57J2Zvcm1hdCd9IH0gKSB7CiAgICAgICAgbXkgJGZvcm1hdHMgPSBqb2luIFNQQUNFLAogICAgICAgICAgc29ydCBtYXAgeyAiJyIgLiAkXyAuICInIiB9IGtleXMgJWRlZmF1bHRfZmlsZV9leHRlbnNpb247CiAgICAgICAgbXkgJGZtdCA9ICRyT3B0cy0+eydmb3JtYXQnfTsKICAgICAgICBEaWUoIi1mb3JtYXQ9JyRmbXQnIGJ1dCBtdXN0IGJlIG9uZSBvZjogJGZvcm1hdHNcbiIpOwogICAgfQoKICAgIG15ICRvdXRwdXRfZXh0ZW5zaW9uID0KICAgICAgJHNlbGYtPm1ha2VfZmlsZV9leHRlbnNpb24oICRyT3B0cy0+eydvdXRwdXQtZmlsZS1leHRlbnNpb24nfSwKICAgICAgICAkZGVmYXVsdF9maWxlX2V4dGVuc2lvbnsgJHJPcHRzLT57J2Zvcm1hdCd9IH0gKTsKCiAgICAjIGdldCBwYXJhbWV0ZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGUgLWIgb3B0aW9uCiAgICBteSAoICRpbl9wbGFjZV9tb2RpZnksICRiYWNrdXBfZXh0ZW5zaW9uLCAkZGVsZXRlX2JhY2t1cCApID0KICAgICAgJHNlbGYtPmNoZWNrX2luX3BsYWNlX21vZGlmeSggJHNvdXJjZV9zdHJlYW0sICRkZXN0aW5hdGlvbl9zdHJlYW0gKTsKCiAgICBteSAkbGluZV9yYW5nZV9jbGlwcGVkID0gJHJPcHRzLT57J2xpbmUtcmFuZ2UtdGlkeSd9CiAgICAgICYmICggJHNlbGYtPltfbGluZV90aWR5X2JlZ2luX10gPiAxCiAgICAgICAgfHwgZGVmaW5lZCggJHNlbGYtPltfbGluZV90aWR5X2VuZF9dICkgKTsKCiAgICBQZXJsOjpUaWR5OjpGb3JtYXR0ZXI6OmNoZWNrX29wdGlvbnMoICRyT3B0cywgJHd2dF9pbl9hcmdzLCAkbnVtX2ZpbGVzLAogICAgICAgICRsaW5lX3JhbmdlX2NsaXBwZWQgKTsKICAgIFBlcmw6OlRpZHk6OlRva2VuaXplcjo6Y2hlY2tfb3B0aW9ucygkck9wdHMpOwogICAgUGVybDo6VGlkeTo6VmVydGljYWxBbGlnbmVyOjpjaGVja19vcHRpb25zKCRyT3B0cyk7CiAgICBpZiAoICRyT3B0cy0+eydmb3JtYXQnfSBlcSAnaHRtbCcgKSB7CiAgICAgICAgUGVybDo6VGlkeTo6SHRtbFdyaXRlci0+Y2hlY2tfb3B0aW9ucygkck9wdHMpOwogICAgfQoKICAgICMgVHJ5IHRvIGNhdGNoIGFuIHVudXN1YWwgbWlzc2luZyBzdHJpbmcgcGFyYW1ldGVyIGVycm9yLCBsaWtlIHRoaXM6CiAgICAjICAgIHBlcmx0aWR5IC13dnQgcGVybHRpZHkucGwKICAgICMgVGhlIHByb2JsZW0gaXMgdGhhdCAtd3Z0IHdhbnRzIGEgc3RyaW5nLCBzbyBpdCBncmFicyAncGVybHRpZHkucGwnLgogICAgIyBUaGVuIHRoZXJlIGlzIG5vIG91dHB1dCBmaWxlbmFtZSwgc28gaW5wdXQgaXMgYXNzdW1lZCB0byBiZSBzdGRpbi4KICAgICMgVGhpcyBtYWtlIHBlcmx0aWR5IHVuZXhwZWN0ZWRseSB3YWl0IGZvciBpbnB1dC4gVG8gdGhlIHVzZXIsIGl0CiAgICAjIGFwcGVhcnMgdGhhdCBwZXJsdGlkeSBoYXMgZ29uZSBpbnRvIGFuIGluZmluaXRlIGxvb3AuIElzc3VlIGMzMTIuCiAgICAjIFRvIGF2b2lkIGdldHRpbmcgdGhpcyBmYXIsIGl0IGlzIGJlc3QgZm9yIHBhcmFtZXRlcnMgd2hpY2ggdGFrZSBhCiAgICAjIHN0cmluZyB0byBjaGVjayB0aGUgc3RyaW5ncyBpbiBvbmUgb2YgdGhlICdjaGVja19vcHRpb25zJyBzdWJzLCBhbmQKICAgICMgZXhpdCBpZiB0aGVyZSBpcyBhbiBvYnZpb3VzIGVycm9yLiBUaGlzIGhhcyBiZWVuIGRvbmUgZm9yIC13dnQsCiAgICAjIGJ1dCBhcmUgdW5kb3VidGVkbHkgb3RoZXIgcGFyYW1ldGVycyB3aGVyZSB0aGlzIHByb2JsZW0gbWlnaHQgb2NjdXIuCiAgICBpZiAoICEkbnVtX2ZpbGVzICYmIEBBUkdWX3NhdmVkID4gMSApIHsKICAgICAgICBteSAkb3B0X3Rlc3QgID0gJEFSR1Zfc2F2ZWRbLTJdOwogICAgICAgIG15ICRmaWxlX3Rlc3QgPSAkQVJHVl9zYXZlZFstMV07CiAgICAgICAgaWYgKCAgICRvcHRfdGVzdCA9fiBzL15bLV0rLy8KICAgICAgICAgICAgJiYgJGZpbGVfdGVzdCAhfiAvXlstXS8KICAgICAgICAgICAgJiYgJGZpbGVfdGVzdCAhfiAvXlxkKyQvCiAgICAgICAgICAgICYmIC1lICRmaWxlX3Rlc3QgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgVGhlc2Ugb3B0aW9ucyBjYW4gdGFrZSBmaWxlbmFtZXMsIHNvIHdlIHdpbGwgaWdub3JlIHRoZW0gaGVyZQogICAgICAgICAgICBteSAlaXNfb3B0aW9uX3dpdGhfZmlsZV9wYXJhbWV0ZXI7CiAgICAgICAgICAgIG15IEBxZiA9IHF3KCBvdXRmaWxlIHByb2ZpbGUgKTsKICAgICAgICAgICAgQGlzX29wdGlvbl93aXRoX2ZpbGVfcGFyYW1ldGVye0BxZn0gPSAoMSkgeCBzY2FsYXIoQHFmKTsKCiAgICAgICAgICAgICMgRXhwYW5kIGFuIGFiYnJldmlhdGlvbiBpbnRvIGEgbG9uZyBuYW1lCiAgICAgICAgICAgIG15ICRsb25nX25hbWU7CiAgICAgICAgICAgIG15ICRleHAgPSAkcmV4cGFuc2lvbi0+eyRvcHRfdGVzdH07CiAgICAgICAgICAgIGlmICAgICggISRleHAgKSAgICAgICAgeyAkbG9uZ19uYW1lID0gJG9wdF90ZXN0IH0KICAgICAgICAgICAgZWxzaWYgKCBAeyRleHB9ID09IDEgKSB7ICRsb25nX25hbWUgPSAkZXhwLT5bMF0gfQogICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgIHsgfQoKICAgICAgICAgICAgIyBJZiB0aGlzIGFyZyBncmFiYmVkIHRoZSBmaWxlLCB0aGVuIGl0IG11c3QgdGFrZSBhIHN0cmluZyBhcmcKICAgICAgICAgICAgaWYgKCAgICRsb25nX25hbWUKICAgICAgICAgICAgICAgICYmIGRlZmluZWQoICRyT3B0cy0+eyRsb25nX25hbWV9ICkKICAgICAgICAgICAgICAgICYmICRyT3B0cy0+eyRsb25nX25hbWV9IGVxICRmaWxlX3Rlc3QKICAgICAgICAgICAgICAgICYmICEkaXNfb3B0aW9uX3dpdGhfZmlsZV9wYXJhbWV0ZXJ7JGxvbmdfbmFtZX0gKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBEaWUoPDxFT00pOwpTdG9wcGluZyBvbiBwb3NzaWJsZSBtaXNzaW5nIHN0cmluZyBwYXJhbWV0ZXIgZm9yICctJG9wdF90ZXN0JzoKVGhpcyBwYXJhbWV0ZXIgdGFrZXMgYSBzdHJpbmcgYW5kIGhhcyBiZWVuIHNldCBlcXVhbCB0byBmaWxlICckZmlsZV90ZXN0JywKYW5kIGZvcm1hdHRlZCBvdXRwdXQgd2lsbCBnbyB0byBzdGFuZGFyZCBvdXRwdXQuIElmIHRoaXMgaXMgYWN0dWFsbHkgY29ycmVjdCwKeW91IGNhbiBza2lwIHRoaXMgbWVzc2FnZSBieSBlbnRlcmluZyB0aGlzIGFzICctJG9wdF90ZXN0PSRmaWxlX3Rlc3QnLgpFT00KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIG1ha2UgdGhlIHBhdHRlcm4gb2YgZmlsZSBleHRlbnNpb25zIHRoYXQgd2Ugc2hvdWxkbid0IHRvdWNoCiAgICBteSAkZm9yYmlkZGVuX2ZpbGVfZXh0ZW5zaW9ucyA9ICIoKCRkb3RfcGF0dGVybikoTE9HfERFQlVHfEVSUnxURUUpIjsKICAgIGlmICgkb3V0cHV0X2V4dGVuc2lvbikgewogICAgICAgIG15ICRleHQgPSBxdW90ZW1ldGEoJG91dHB1dF9leHRlbnNpb24pOwogICAgICAgICRmb3JiaWRkZW5fZmlsZV9leHRlbnNpb25zIC49ICJ8JGV4dCI7CiAgICB9CiAgICBpZiAoICRpbl9wbGFjZV9tb2RpZnkgJiYgJGJhY2t1cF9leHRlbnNpb24gKSB7CiAgICAgICAgbXkgJGV4dCA9IHF1b3RlbWV0YSgkYmFja3VwX2V4dGVuc2lvbik7CiAgICAgICAgJGZvcmJpZGRlbl9maWxlX2V4dGVuc2lvbnMgLj0gInwkZXh0IjsKICAgIH0KICAgICRmb3JiaWRkZW5fZmlsZV9leHRlbnNpb25zIC49ICcpJCc7CgogICAgIyBDcmVhdGUgYSBkaWFnbm9zdGljcyBvYmplY3QgaWYgcmVxdWVzdGVkOwogICAgIyBUaGlzIGlzIG9ubHkgdXNlZnVsIGZvciBjb2RlIGRldmVsb3BtZW50CiAgICBteSAkZGlhZ25vc3RpY3Nfb2JqZWN0ID0gdW5kZWY7CiAgICBpZiAoRElBR05PU1RJQ1MpIHsKICAgICAgICAkZGlhZ25vc3RpY3Nfb2JqZWN0ID0gUGVybDo6VGlkeTo6RGlhZ25vc3RpY3MtPm5ldygpOwogICAgfQoKICAgICMgbm8gZmlsZW5hbWVzIHNob3VsZCBiZSBnaXZlbiBpZiBpbnB1dCBpcyBmcm9tIGFuIGFycmF5CiAgICBpZiAoJHNvdXJjZV9zdHJlYW0pIHsKICAgICAgICBpZiAoIEBBcmdfZmlsZXMgPiAwICkgewogICAgICAgICAgICBEaWUoCiJZb3UgbWF5IG5vdCBzcGVjaWZ5IGFueSBmaWxlbmFtZXMgd2hlbiBhIHNvdXJjZSBhcnJheSBpcyBnaXZlblxuIgogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyB3ZSdsbCBzdHVmZiB0aGUgc291cmNlIGFycmF5IGludG8gQXJnX2ZpbGVzCiAgICAgICAgdW5zaGlmdCggQEFyZ19maWxlcywgJHNvdXJjZV9zdHJlYW0gKTsKCiAgICAgICAgIyBObyBzcGVjaWFsIHRyZWF0bWVudCBmb3Igc291cmNlIHN0cmVhbSB3aGljaCBpcyBhIGZpbGVuYW1lLgogICAgICAgICMgVGhpcyB3aWxsIGVuYWJsZSBjaGVja3MgZm9yIGJpbmFyeSBmaWxlcyBhbmQgb3RoZXIgYmFkIHN0dWZmLgogICAgICAgICRzb3VyY2Vfc3RyZWFtID0gdW5kZWYgdW5sZXNzIHJlZigkc291cmNlX3N0cmVhbSk7CiAgICB9CgogICAgIyB1c2Ugc3RkaW4gYnkgZGVmYXVsdCBpZiBubyBzb3VyY2UgYXJyYXkgYW5kIG5vIGFyZ3MKICAgIGVsc2lmICggIUBBcmdfZmlsZXMgKSB7CiAgICAgICAgdW5zaGlmdCggQEFyZ19maWxlcywgJy0nICk7CiAgICB9CgogICAgIyBjaGVjayBmaWxlIGV4aXN0ZW5jZSBhbmQgZXhwYW5kIGFueSBnbG9icwogICAgZWxzZSB7CiAgICAgICAgbXkgQHVwZGF0ZWRfZmlsZXM7CiAgICAgICAgZm9yZWFjaCBteSAkaW5wdXRfZmlsZSAoQEFyZ19maWxlcykgewogICAgICAgICAgICBpZiAoIC1lICRpbnB1dF9maWxlICkgewogICAgICAgICAgICAgICAgcHVzaCBAdXBkYXRlZF9maWxlcywgJGlucHV0X2ZpbGU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyBmaWxlIGRvZXNuJ3QgZXhpc3QgLSBjaGVjayBmb3IgYSBmaWxlIGdsb2IKICAgICAgICAgICAgICAgIGlmICggJGlucHV0X2ZpbGUgPX4gLyhbXD9cKlxbXHtdKS8gKSB7CgogICAgICAgICAgICAgICAgICAgICMgV2luZG93cyBzaGVsbCBtYXkgbm90IHJlbW92ZSBxdW90ZXMsIHNvIGRvIGl0CiAgICAgICAgICAgICAgICAgICAgbXkgJGlmaWxlID0gJGlucHV0X2ZpbGU7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkaWZpbGUgPX4gL15cJyguKylcJyQvICkgeyAkaWZpbGUgPSAkMSB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkaWZpbGUgPX4gL15cIiguKylcIiQvICkgeyAkaWZpbGUgPSAkMSB9CiAgICAgICAgICAgICAgICAgICAgbXkgJHBhdHRlcm4gPSBmaWxlZ2xvYl90b19yZSgkaWZpbGUpOwogICAgICAgICAgICAgICAgICAgIG15ICRkaDsKICAgICAgICAgICAgICAgICAgICBpZiAoIG9wZW5kaXIoICRkaCwgJy4vJyApICkgewogICAgICAgICAgICAgICAgICAgICAgICBteSBAZmlsZXMgPQogICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXAgeyAvJHBhdHRlcm4vICYmICEtZCB9IHJlYWRkaXIoJGRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VkaXIoJGRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCB1bmxlc3MgKEBmaWxlcyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQHVwZGF0ZWRfZmlsZXMsIEBmaWxlczsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBXYXJuKCJza2lwcGluZyBmaWxlOiAnJGlucHV0X2ZpbGUnOiBubyBtYXRjaGVzIGZvdW5kXG4iKTsKICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgIH0KICAgICAgICB9ICMjIGVuZCBsb29wIG92ZXIgaW5wdXQgZmlsZW5hbWVzCgogICAgICAgIEBBcmdfZmlsZXMgPSBAdXBkYXRlZF9maWxlczsKICAgICAgICBpZiAoICFAQXJnX2ZpbGVzICkgewogICAgICAgICAgICBEaWUoIm5vIG1hdGNoaW5nIGlucHV0IGZpbGVzIGZvdW5kXG4iKTsKICAgICAgICB9CiAgICB9CgogICAgIyBGbGFnIGZvciBsb2FkaW5nIG1vZHVsZSBVbmljb2RlOjpHQ1N0cmluZyBmb3IgZXZhbHVhdGluZyB0ZXh0IHdpZHRoOgogICAgIyAgIHVuZGVmID0gb2sgdG8gdXNlIGJ1dCBub3QgeWV0IGxvYWRlZAogICAgIyAgICAgICAwID0gZG8gbm90IHVzZTsgZmFpbGVkIHRvIGxvYWQgb3Igbm90IHdhbnRlZAogICAgIyAgICAgICAxID0gc3VjY2Vzc2Z1bGx5IGxvYWRlZCBhbmQgb2sgdG8gdXNlCiAgICAjIFRoZSBtb2R1bGUgaXMgbm90IGFjdHVhbGx5IGxvYWRlZCB1bmxlc3MvdW50aWwgaXQgaXMgbmVlZGVkCiAgICBpZiAoICEkck9wdHMtPnsndXNlLXVuaWNvZGUtZ2NzdHJpbmcnfSApIHsKICAgICAgICAkbG9hZGVkX3VuaWNvZGVfZ2NzdHJpbmcgPSAwOwogICAgfQoKICAgICMgUmVtb3ZlIGR1cGxpY2F0ZSBmaWxlbmFtZXMuICBPdGhlcndpc2UsIGZvciBleGFtcGxlIGlmIHRoZSB1c2VyIGVudGVyZWQKICAgICMgICAgIHBlcmx0aWR5IC1iIG15ZmlsZS5wbCBteWZpbGUucGwKICAgICMgdGhlIGJhY2t1cCB2ZXJzaW9uIG9mIHRoZSBvcmlnaW5hbCB3b3VsZCBiZSBsb3N0LgogICAgaWYgKCBAQXJnX2ZpbGVzID4gMSApIHsKICAgICAgICBteSAlc2VlbiA9ICgpOwogICAgICAgIEBBcmdfZmlsZXMgPSBncmVwIHsgISRzZWVueyRffSsrIH0gQEFyZ19maWxlczsKICAgIH0KCiAgICAjIElmIHJlcXVlc3RlZCwgcHJvY2VzcyBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIGZpbGUgc2l6ZQogICAgIyBUaGlzIGNhbiBzaWduaWZpY2FudGx5IHJlZHVjZSBwZXJsJ3MgdmlydHVhbCBtZW1vcnkgdXNhZ2UgZHVyaW5nIHRlc3RpbmcuCiAgICBpZiAoIEBBcmdfZmlsZXMgPiAxICYmICRyT3B0cy0+eydmaWxlLXNpemUtb3JkZXInfSApIHsKICAgICAgICBAQXJnX2ZpbGVzID0KICAgICAgICAgIG1hcCAgeyAkXy0+WzBdIH0KICAgICAgICAgIHNvcnQgeyAkYS0+WzFdIDw9PiAkYi0+WzFdIH0KICAgICAgICAgIG1hcCAgeyBbICRfLCAtZSAkXyA/IC1zICRfIDogMCBdIH0gQEFyZ19maWxlczsKICAgIH0KCiAgICBteSAkbG9nZmlsZV9oZWFkZXIgPSBtYWtlX2xvZ2ZpbGVfaGVhZGVyKCAkck9wdHMsICRjb25maWdfZmlsZSwKICAgICAgICAkcnJhd19vcHRpb25zLCAkV2luZG93c190eXBlLCAkcmVhZGFibGVfb3B0aW9ucyApOwoKICAgICMgU3RvcmUgc29tZSB2YWx1ZXMgbmVlZGVkIGJ5IGxvd2VyIGxldmVsIHJvdXRpbmVzCiAgICAkc2VsZi0+W19kaWFnbm9zdGljc19vYmplY3RfXSA9ICRkaWFnbm9zdGljc19vYmplY3Q7CiAgICAkc2VsZi0+W19wb3N0ZmlsdGVyX10gICAgICAgICA9ICRwb3N0ZmlsdGVyOwogICAgJHNlbGYtPltfcHJlZmlsdGVyX10gICAgICAgICAgPSAkcHJlZmlsdGVyOwogICAgJHNlbGYtPltfdXNlcl9mb3JtYXR0ZXJfXSAgICAgPSAkdXNlcl9mb3JtYXR0ZXI7CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIGxvb3AgdG8gcHJvY2VzcyBhbGwgZmlsZXMKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgJHNlbGYtPnByb2Nlc3NfYWxsX2ZpbGVzKAogICAgICAgIHsKICAgICAgICAgICAgcmlucHV0X2hhc2ggPT4gXCVpbnB1dF9oYXNoLAogICAgICAgICAgICByZmlsZXMgICAgICA9PiBcQEFyZ19maWxlcywKCiAgICAgICAgICAgICMgZmlsZW5hbWUgc3R1ZmYuLi4KICAgICAgICAgICAgc291cmNlX3N0cmVhbSAgICAgICAgICAgICA9PiAkc291cmNlX3N0cmVhbSwKICAgICAgICAgICAgb3V0cHV0X2V4dGVuc2lvbiAgICAgICAgICA9PiAkb3V0cHV0X2V4dGVuc2lvbiwKICAgICAgICAgICAgZm9yYmlkZGVuX2ZpbGVfZXh0ZW5zaW9ucyA9PiAkZm9yYmlkZGVuX2ZpbGVfZXh0ZW5zaW9ucywKICAgICAgICAgICAgaW5fcGxhY2VfbW9kaWZ5ICAgICAgICAgICA9PiAkaW5fcGxhY2VfbW9kaWZ5LAogICAgICAgICAgICBiYWNrdXBfZXh0ZW5zaW9uICAgICAgICAgID0+ICRiYWNrdXBfZXh0ZW5zaW9uLAogICAgICAgICAgICBkZWxldGVfYmFja3VwICAgICAgICAgICAgID0+ICRkZWxldGVfYmFja3VwLAoKICAgICAgICAgICAgIyBsb2dmaWxlIHN0dWZmLi4uCiAgICAgICAgICAgIGxvZ2ZpbGVfaGVhZGVyICAgICAgICAgICA9PiAkbG9nZmlsZV9oZWFkZXIsCiAgICAgICAgICAgIHJwZW5kaW5nX2NvbXBsYWludCAgICAgICA9PiAkcnBlbmRpbmdfY29tcGxhaW50LAogICAgICAgICAgICBycGVuZGluZ19sb2dmaWxlX21lc3NhZ2UgPT4gJHJwZW5kaW5nX2xvZ2ZpbGVfbWVzc2FnZSwKICAgICAgICB9CiAgICApOwoKICAgICMtLS0tLQogICAgIyBFeGl0CiAgICAjLS0tLS0KCiAgICAjIEZpeCBmb3IgUlQgIzEzMDI5NzogcmV0dXJuIGEgdHJ1ZSB2YWx1ZSBpZiBhbnl0aGluZyB3YXMgd3JpdHRlbiB0byB0aGUKICAgICMgc3RhbmRhcmQgZXJyb3Igb3V0cHV0LCBldmVuIG5vbi1mYXRhbCB3YXJuaW5nIG1lc3NhZ2VzLCBvdGhlcndpc2UgcmV0dXJuCiAgICAjIGZhbHNlLgoKICAgICMgVGhlc2UgZXhpdCBjb2RlcyBhcmUgcmV0dXJuZWQ6CiAgICAjICAwID0gcGVybHRpZHkgcmFuIHRvIGNvbXBsZXRpb24gd2l0aCBubyBlcnJvcnMKICAgICMgIDEgPSBwZXJsdGlkeSBjb3VsZCBub3QgcnVuIHRvIGNvbXBsZXRpb24gZHVlIHRvIGVycm9ycwogICAgIyAgMiA9IHBlcmx0aWR5IHJhbiB0byBjb21wbGV0aW9uIHdpdGggZXJyb3IgbWVzc2FnZXMKCiAgICAjIE5vdGUgdGhhdCBpZiBwZXJsdGlkeSBpcyBydW4gd2l0aCBtdWx0aXBsZSBmaWxlcywgYW55IHNpbmdsZSBmaWxlIHdpdGgKICAgICMgZXJyb3JzIG9yIHdhcm5pbmdzIHdpbGwgd3JpdGUgYSBsaW5lIGxpa2UKICAgICMgICAgICAgICcjIyBQbGVhc2Ugc2VlIGZpbGUgdGVzdGluZy50LkVSUicKICAgICMgdG8gc3RhbmRhcmQgb3V0cHV0IGZvciBlYWNoIGZpbGUgd2l0aCBlcnJvcnMsIHNvIHRoZSBmbGFnIHdpbGwgYmUgdHJ1ZSwKICAgICMgZXZlbiBpZiBvbmx5IHNvbWUgb2YgdGhlIG11bHRpcGxlIGZpbGVzIG1heSBoYXZlIGhhZCBlcnJvcnMuCgogIE5PUk1BTF9FWElUOgogICAgbXkgJHJldCA9ICRXYXJuX2NvdW50ID8gMiA6IDA7CiAgICByZXR1cm4gd2FudGFycmF5ID8gKCAkcmV0LCAkcnN0YXR1cyApIDogJHJldDsKCiAgRVJST1JfRVhJVDoKICAgIHJldHVybiB3YW50YXJyYXkgPyAoIDEsICRyc3RhdHVzICkgOiAxOwoKfSAjIyBlbmQgc3ViIHBlcmx0aWR5CgpzdWIgbWFrZV9maWxlX2V4dGVuc2lvbiB7CgogICAgIyBNYWtlIGEgZmlsZSBleHRlbnNpb24sIGFkZGluZyBhbnkgbGVhZGluZyAnLicgaWYgbmVjZXNzYXJ5LgogICAgIyAodGhlICcuJyBtYXkgYWN0dWFsbHkgYmUgYW4gJ18nIHVuZGVyIFZNUykuCiAgICBteSAoICRzZWxmLCAkZXh0ZW5zaW9uLCAoJGRlZmF1bHQpICkgPSBAXzsKCiAgICAjIEdpdmVuOgogICAgIyAgJGV4dGVuc2lvbiA9IHRoZSBmaXJzdCBjaG9pY2UgKHVzdWFsbHkgYSB1c2VyIGVudHJ5KQogICAgIyAgJGRlZmF1bHQgICA9IGFuIG9wdGlvbmFsIGJhY2t1cCBleHRlbnNpb24KICAgICMgUmV0dXJuOgogICAgIyAgJGV4dGVuc2lvbiA9IHRoZSBhY3R1YWwgZmlsZSBleHRlbnNpb24KCiAgICAkZXh0ZW5zaW9uID0gRU1QVFlfU1RSSU5HIHVubGVzcyBkZWZpbmVkKCRleHRlbnNpb24pOwogICAgJGV4dGVuc2lvbiA9fiBzL15ccysvLzsKICAgICRleHRlbnNpb24gPX4gcy9ccyskLy87CgogICAgIyBVc2UgZGVmYXVsdCBleHRlbnNpb24gaWYgbm90aGluZyByZW1haW5zIG9mIHRoZSBmaXJzdCBjaG9pY2UKICAgIGlmICggbGVuZ3RoKCRleHRlbnNpb24pID09IDAgKSB7CiAgICAgICAgJGV4dGVuc2lvbiA9ICRkZWZhdWx0OwogICAgICAgICRleHRlbnNpb24gPSBFTVBUWV9TVFJJTkcgdW5sZXNzIGRlZmluZWQoJGV4dGVuc2lvbik7CiAgICAgICAgJGV4dGVuc2lvbiA9fiBzL15ccysvLzsKICAgICAgICAkZXh0ZW5zaW9uID1+IHMvXHMrJC8vOwogICAgfQoKICAgICMgT25seSBleHRlbnNpb25zIHdpdGggdGhlc2UgbGVhZGluZyBjaGFyYWN0ZXJzIGdldCBhICcuJwogICAgIyBUaGlzIHJ1bGUgZ2l2ZXMgdGhlIHVzZXIgc29tZSBmcmVlZG9tLgogICAgaWYgKCAkZXh0ZW5zaW9uID1+IC9eW2EtekEtWjAtOV0vICkgewogICAgICAgIG15ICRkb3QgPSAkc2VsZi0+W19maWxlX2V4dGVuc2lvbl9zZXBhcmF0b3JfXTsKICAgICAgICAkZXh0ZW5zaW9uID0gJGRvdCAuICRleHRlbnNpb247CiAgICB9CiAgICByZXR1cm4gJGV4dGVuc2lvbjsKfSAjIyBlbmQgc3ViIG1ha2VfZmlsZV9leHRlbnNpb24KCnN1YiBjaGVja19pbl9wbGFjZV9tb2RpZnkgewoKICAgIG15ICggJHNlbGYsICRzb3VyY2Vfc3RyZWFtLCAkZGVzdGluYXRpb25fc3RyZWFtICkgPSBAXzsKCiAgICAjIFNlZSBpZiAtLWJhY2t1cC1hbmQtbW9kaWZ5LWluLXBsYWNlICgtYikgaXMgc2V0LCBhbmQgaWYgc28sCiAgICAjIHJldHVybiBpdHMgYXNzb2NpYXRlZCBwYXJhbWV0ZXJzCiAgICBteSAkck9wdHMgPSAkc2VsZi0+W19yT3B0c19dOwoKICAgICMgY2hlY2sgZm9yIC1iIG9wdGlvbjsKICAgICMgc2lsZW50bHkgaWdub3JlIHVubGVzcyBiZWF1dGlmeSBtb2RlCiAgICBteSAkaW5fcGxhY2VfbW9kaWZ5ID0gJHJPcHRzLT57J2JhY2t1cC1hbmQtbW9kaWZ5LWluLXBsYWNlJ30KICAgICAgJiYgJHJPcHRzLT57J2Zvcm1hdCd9IGVxICd0aWR5JzsKCiAgICBteSAoICRiYWNrdXBfZXh0ZW5zaW9uLCAkZGVsZXRlX2JhY2t1cCApOwoKICAgICMgVHVybiBvZmYgLWIgd2l0aCB3YXJuaW5ncyBpbiBjYXNlIG9mIGNvbmZsaWN0cyB3aXRoIG90aGVyIG9wdGlvbnMuCiAgICAjIE5PVEU6IERvIHRoaXMgc2lsZW50bHksIHdpdGhvdXQgd2FybmluZ3MsIGlmIHRoZXJlIGlzIGEgc291cmNlIG9yCiAgICAjIGRlc3RpbmF0aW9uIHN0cmVhbSwgb3Igc3RhbmRhcmQgb3V0cHV0IGlzIHVzZWQuICBUaGlzIGlzIGJlY2F1c2UgdGhlIC1iCiAgICAjIGZsYWcgbWF5IGhhdmUgYmVlbiBpbiBhIC5wZXJsdGlkeXJjIGZpbGUgYW5kIHdhcm5pbmdzIGJyZWFrCiAgICAjIFRlc3Q6Ok5vV2FybmluZ3MuICBTZWUgZW1haWwgZGlzY3Vzc2lvbiB3aXRoIE1lcmlqbiBCcmFuZCAyNiBGZWIgMjAxNC4KICAgIGlmICgkaW5fcGxhY2VfbW9kaWZ5KSB7CiAgICAgICAgaWYgKCAgICRyT3B0cy0+eydzdGFuZGFyZC1vdXRwdXQnfQogICAgICAgICAgICB8fCAkZGVzdGluYXRpb25fc3RyZWFtCiAgICAgICAgICAgIHx8IHJlZigkc291cmNlX3N0cmVhbSkKICAgICAgICAgICAgfHwgJHJPcHRzLT57J291dGZpbGUnfQogICAgICAgICAgICB8fCBkZWZpbmVkKCAkck9wdHMtPnsnb3V0cHV0LXBhdGgnfSApICkKICAgICAgICB7CiAgICAgICAgICAgICRpbl9wbGFjZV9tb2RpZnkgPSAwOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoJGluX3BsYWNlX21vZGlmeSkgewoKICAgICAgICAjIElmIHRoZSBiYWNrdXAgZXh0ZW5zaW9uIGNvbnRhaW5zIGEgLyBjaGFyYWN0ZXIgdGhlbiB0aGUgYmFja3VwIHNob3VsZAogICAgICAgICMgYmUgZGVsZXRlZCB3aGVuIHRoZSAtYiBvcHRpb24gaXMgdXNlZC4gICBPbiBvbGRlciB2ZXJzaW9ucyBvZgogICAgICAgICMgcGVybHRpZHkgdGhpcyB3aWxsIGdlbmVyYXRlIGFuIGVycm9yIG1lc3NhZ2UgZHVlIHRvIGFuIGlsbGVnYWwKICAgICAgICAjIGZpbGUgbmFtZS4KICAgICAgICAjCiAgICAgICAgIyBBIGJhY2t1cCBmaWxlIHdpbGwgc3RpbGwgYmUgZ2VuZXJhdGVkIGJ1dCB3aWxsIGJlIGRlbGV0ZWQKICAgICAgICAjIGF0IHRoZSBlbmQuICBJZiAtYmV4dD0nLycgdGhlbiB0aGlzIGV4dGVuc2lvbiB3aWxsIGJlCiAgICAgICAgIyB0aGUgZGVmYXVsdCAnYmFrJy4gIE90aGVyd2lzZSBpdCB3aWxsIGJlIHdoYXRldmVyIGNoYXJhY3RlcnMKICAgICAgICAjIHJlbWFpbnMgYWZ0ZXIgYWxsICcvJyBjaGFyYWN0ZXJzIGFyZSByZW1vdmVkLiAgRm9yIGV4YW1wbGU6CiAgICAgICAgIyAtYmV4dCAgICAgICAgIGV4dGVuc2lvbiAgICAgc2xhc2hlcwogICAgICAgICMgICcvJyAgICAgICAgICBiYWsgICAgICAgICAgIDEKICAgICAgICAjICAnL2RlbGV0ZScgICAgZGVsZXRlICAgICAgICAxCiAgICAgICAgIyAgJ2RlbGV0ZS8nICAgIGRlbGV0ZSAgICAgICAgMQogICAgICAgICMgICcvZGV2L251bGwnICBkZXZudWxsICAgICAgIDIgICAgKEN1cnJlbnRseSBub3QgYWxsb3dlZCkKICAgICAgICBteSAkYmV4dCA9ICRyT3B0cy0+eydiYWNrdXAtZmlsZS1leHRlbnNpb24nfTsKICAgICAgICAkZGVsZXRlX2JhY2t1cCA9ICggJHJPcHRzLT57J2JhY2t1cC1maWxlLWV4dGVuc2lvbid9ID1+IHMvXC8vL2cgKTsKCiAgICAgICAgIyBBdCBwcmVzZW50IG9ubHkgb25lIGZvcndhcmQgc2xhc2ggaXMgYWxsb3dlZC4gIEluIHRoZSBmdXR1cmUgbXVsdGlwbGUKICAgICAgICAjIHNsYXNoZXMgbWF5IGJlIGFsbG93ZWQgdG8gYWxsb3cgZm9yIG90aGVyIG9wdGlvbnMKICAgICAgICBpZiAoICRkZWxldGVfYmFja3VwID4gMSApIHsKICAgICAgICAgICAgRGllKCItYmV4dD0kYmV4dCBjb250YWlucyBtb3JlIHRoYW4gb25lICcvJ1xuIik7CiAgICAgICAgfQoKICAgICAgICAkYmFja3VwX2V4dGVuc2lvbiA9CiAgICAgICAgICAkc2VsZi0+bWFrZV9maWxlX2V4dGVuc2lvbiggJHJPcHRzLT57J2JhY2t1cC1maWxlLWV4dGVuc2lvbid9LAogICAgICAgICAgICAnYmFrJyApOwogICAgfQoKICAgIG15ICRiYWNrdXBfbWV0aG9kID0gJHJPcHRzLT57J2JhY2t1cC1tZXRob2QnfTsKICAgIGlmICggICBkZWZpbmVkKCRiYWNrdXBfbWV0aG9kKQogICAgICAgICYmICRiYWNrdXBfbWV0aG9kIG5lICdjb3B5JwogICAgICAgICYmICRiYWNrdXBfbWV0aG9kIG5lICdtb3ZlJyApCiAgICB7CiAgICAgICAgRGllKAoiVW5leHBlY3RlZCAtLWJhY2t1cC1tZXRob2Q9JyRiYWNrdXBfbWV0aG9kJzsgbXVzdCBiZSBvbmUgb2Y6ICdtb3ZlJywgJ2NvcHknXG4iCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gKCAkaW5fcGxhY2VfbW9kaWZ5LCAkYmFja3VwX2V4dGVuc2lvbiwgJGRlbGV0ZV9iYWNrdXAgKTsKfSAjIyBlbmQgc3ViIGNoZWNrX2luX3BsYWNlX21vZGlmeQoKc3ViIGJhY2t1cF9tZXRob2RfY29weSB7CgogICAgbXkgKCAkc2VsZiwgJGlucHV0X2ZpbGUsICRyb3V0cHV0X3N0cmluZywgJGJhY2t1cF9leHRlbnNpb24sCiAgICAgICAgJGRlbGV0ZV9iYWNrdXAgKQogICAgICA9IEBfOwoKICAgICMgSGFuZGxlIHRoZSAtYiAoLS1iYWNrdXAtYW5kLW1vZGlmeS1pbi1wbGFjZSkgb3B0aW9uIHdpdGggLWJtPSdjb3B5JzoKICAgICMgLSBGaXJzdCBjb3B5ICRpbnB1dCBmaWxlIHRvICRiYWNrdXBfbmFtZS4KICAgICMgLSBUaGVuIG9wZW4gaW5wdXQgZmlsZSBhbmQgcmV3cml0ZSB3aXRoIGNvbnRlbnRzIG9mICRyb3V0cHV0X3N0cmluZwogICAgIyAtIFRoZW4gZGVsZXRlIHRoZSBiYWNrdXAgaWYgcmVxdWVzdGVkCgogICAgIyBOT1RFUzoKICAgICMgLSBEaWUgaW1tZWRpYXRlbHkgb24gYW55IGVycm9yLgogICAgIyAtICRyb3V0cHV0X3N0cmluZyBpcyBhIFNDQUxBUiByZWYKCiAgICBteSAkYmFja3VwX2ZpbGUgPSAkaW5wdXRfZmlsZSAuICRiYWNrdXBfZXh0ZW5zaW9uOwoKICAgIGlmICggIS1mICRpbnB1dF9maWxlICkgewoKICAgICAgICAjIG5vIHJlYWwgZmlsZSB0byBiYWNrdXAgLi4KICAgICAgICAjIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBiZWNhdXNlIG9mIG51bWVyb3VzIHByZWxpbWluYXJ5IGNoZWNrcwogICAgICAgIERpZSgKICAgICAgICAgICAgInByb2JsZW0gd2l0aCAtYiBiYWNraW5nIHVwIGlucHV0IGZpbGUgJyRpbnB1dF9maWxlJzogbm90IGEgZmlsZVxuIgogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAtZiAkYmFja3VwX2ZpbGUgKSB7CiAgICAgICAgdW5saW5rKCRiYWNrdXBfZmlsZSkKICAgICAgICAgIG9yIERpZSgKInVuYWJsZSB0byByZW1vdmUgcHJldmlvdXMgJyRiYWNrdXBfZmlsZScgZm9yIC1iIG9wdGlvbjsgY2hlY2sgcGVybWlzc2lvbnM6ICRPU19FUlJPUlxuIgogICAgICAgICAgKTsKICAgIH0KCiAgICAjIENvcHkgaW5wdXQgZmlsZSB0byBiYWNrdXAKICAgIEZpbGU6OkNvcHk6OmNvcHkoICRpbnB1dF9maWxlLCAkYmFja3VwX2ZpbGUgKQogICAgICBvciBEaWUoIkZpbGU6OkNvcHkgZmFpbGVkIHRyeWluZyB0byBiYWNrdXAgc291cmNlOiAkT1NfRVJST1IiKTsKCiAgICAjIHNldCBwZXJtaXNzaW9ucyBvZiB0aGUgYmFja3VwIGZpbGUgdG8gbWF0Y2ggdGhlIGlucHV0IGZpbGUKICAgIG15IEBpbnB1dF9maWxlX3N0YXQgPSBzdGF0KCRpbnB1dF9maWxlKTsKICAgIG15ICRpbl9wbGFjZV9tb2RpZnkgPSAxOwogICAgJHNlbGYtPnNldF9vdXRwdXRfZmlsZV9wZXJtaXNzaW9ucyggJGJhY2t1cF9maWxlLCBcQGlucHV0X2ZpbGVfc3RhdCwKICAgICAgICAkaW5fcGxhY2VfbW9kaWZ5ICk7CgogICAgIyBzZXQgdGhlIG1vZGlmaWNhdGlvbiB0aW1lIG9mIHRoZSBjb3B5IHRvIHRoZSBvcmlnaW5hbCB2YWx1ZSAocnQjMTQ1OTk5KQogICAgbXkgKCAkcmVhZF90aW1lLCAkd3JpdGVfdGltZSApID0gQGlucHV0X2ZpbGVfc3RhdFsgX2F0aW1lXywgX210aW1lXyBdOwogICAgaWYgKCBkZWZpbmVkKCR3cml0ZV90aW1lKSApIHsKICAgICAgICB1dGltZSggJHJlYWRfdGltZSwgJHdyaXRlX3RpbWUsICRiYWNrdXBfZmlsZSApCiAgICAgICAgICB8fCBXYXJuKCJlcnJvciBzZXR0aW5nIHRpbWVzIGZvciBiYWNrdXAgZmlsZSAnJGJhY2t1cF9maWxlJ1xuIik7CiAgICB9CgogICAgIyBPcGVuIHRoZSBvcmlnaW5hbCBpbnB1dCBmaWxlIGZvciB3cml0aW5nIC4uLiBvcGVuaW5nIHdpdGggIj4iIHdpbGwKICAgICMgdHJ1bmNhdGUgdGhlIGV4aXN0aW5nIGRhdGEuCiAgICBvcGVuKCBteSAkZm91dCwgIj4iLCAkaW5wdXRfZmlsZSApCiAgICAgIG9yIERpZSgKInByb2JsZW0gcmUtb3BlbmluZyAkaW5wdXRfZmlsZSBmb3Igd3JpdGUgZm9yIC1iIG9wdGlvbjsgY2hlY2sgZmlsZSBhbmQgZGlyZWN0b3J5IHBlcm1pc3Npb25zOiAkT1NfRVJST1JcbiIKICAgICAgKTsKCiAgICBpZiAoICRzZWxmLT5bX2lzX2VuY29kZWRfZGF0YV9dICkgeyBiaW5tb2RlICRmb3V0LCAiOnJhdzplbmNvZGluZyhVVEYtOCkiIH0KICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGJpbm1vZGUgJGZvdXQgfQoKICAgICMgTm93IGNvcHkgdGhlIGZvcm1hdHRlZCBvdXRwdXQgdG8gaXQuLgogICAgIyBvdXRwdXQgbXVzdCBiZSBTQ0FMQVIgcmVmLi4KICAgIGlmICggcmVmKCRyb3V0cHV0X3N0cmluZykgZXEgJ1NDQUxBUicgKSB7CiAgICAgICAgJGZvdXQtPnByaW50KCAkeyRyb3V0cHV0X3N0cmluZ30gKQogICAgICAgICAgb3IgRGllKCJjYW5ub3QgcHJpbnQgdG8gJyRpbnB1dF9maWxlJyB3aXRoIC1iIG9wdGlvbjogJE9TX0VSUk9SXG4iKTsKICAgIH0KCiAgICAjIEVycm9yIGlmIGFueXRoaW5nIGVsc2UgLi4uCiAgICBlbHNlIHsKICAgICAgICBteSAkcmVmID0gcmVmKCRyb3V0cHV0X3N0cmluZyk7CiAgICAgICAgRGllKDw8RU9NKTsKUHJvZ3JhbW1pbmcgZXJyb3I6IHVuYWJsZSB0byBwcmludCB0byAnJGlucHV0X2ZpbGUnIHdpdGggLWIgb3B0aW9uOgp1bmV4cGVjdGVkIHJlZiB0eXBlICckcmVmJzsgZXhwZWN0aW5nICdBUlJBWScgb3IgJ1NDQUxBUicKRU9NCiAgICB9CgogICAgJGZvdXQtPmNsb3NlKCkKICAgICAgb3IgRGllKCJjYW5ub3QgY2xvc2UgJyRpbnB1dF9maWxlJyB3aXRoIC1iIG9wdGlvbjogJE9TX0VSUk9SXG4iKTsKCiAgICAjIFNldCBwZXJtaXNzaW9ucyBvZiB0aGUgb3V0cHV0IGZpbGUgdG8gbWF0Y2ggdGhlIGlucHV0IGZpbGUuIFRoaXMgaXMKICAgICMgbmVjZXNzYXJ5IGV2ZW4gaWYgdGhlIGlub2RlIHJlbWFpbnMgdW5jaGFuZ2VkIGJlY2F1c2Ugc3VpZC9zZ2lkIGJpdHMgbWF5CiAgICAjIGhhdmUgYmVlbiByZXNldC4KICAgICRzZWxmLT5zZXRfb3V0cHV0X2ZpbGVfcGVybWlzc2lvbnMoICRpbnB1dF9maWxlLCBcQGlucHV0X2ZpbGVfc3RhdCwKICAgICAgICAkaW5fcGxhY2VfbW9kaWZ5ICk7CgogICAgIyBLZWVwIG9yaWdpbmFsIG1vZGlmaWNhdGlvbiB0aW1lIGlmIG5vIGNoYW5nZSAocnQjMTQ1OTk5KQogICAgaWYgKCAhJHNlbGYtPltfaW5wdXRfb3V0cHV0X2RpZmZlcmVuY2VfXSAmJiBkZWZpbmVkKCR3cml0ZV90aW1lKSApIHsKICAgICAgICB1dGltZSggJHJlYWRfdGltZSwgJHdyaXRlX3RpbWUsICRpbnB1dF9maWxlICkKICAgICAgICAgIHx8IFdhcm4oImVycm9yIHNldHRpbmcgdGltZXMgZm9yICckaW5wdXRfZmlsZSdcbiIpOwogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgcmVtb3ZlIHRoZSBvcmlnaW5hbCBmaWxlIGZvciBpbi1wbGFjZSBtb2RpZnkgYXMgZm9sbG93czoKICAgICMgICAkZGVsZXRlX2JhY2t1cD0wIG5ldmVyCiAgICAjICAgJGRlbGV0ZV9iYWNrdXA9MSBvbmx5IGlmIG5vIGVycm9ycwogICAgIyAgICRkZWxldGVfYmFja3VwPjEgYWx3YXlzICA6IE5PVCBBTExPV0VELCB0b28gcmlza3kKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGlmICggJGRlbGV0ZV9iYWNrdXAgJiYgLWYgJGJhY2t1cF9maWxlICkgewoKICAgICAgICAjIEN1cnJlbnRseSwgJGRlbGV0ZV9iYWNrdXAgbWF5IG9ubHkgYmUgMS4gQnV0IGlmIGEgZnV0dXJlIHVwZGF0ZQogICAgICAgICMgYWxsb3dzIGEgdmFsdWUgPiAxLCB0aGVuIHJlZHVjZSBpdCB0byAxIGlmIHRoZXJlIHdlcmUgd2FybmluZ3MuCiAgICAgICAgaWYgKCAgICRkZWxldGVfYmFja3VwID4gMQogICAgICAgICAgICAmJiAkc2VsZi0+W19sb2dnZXJfb2JqZWN0X10tPmdldF93YXJuaW5nX2NvdW50KCkgKQogICAgICAgIHsKICAgICAgICAgICAgJGRlbGV0ZV9iYWNrdXAgPSAxOwogICAgICAgIH0KCiAgICAgICAgIyBBcyBhbiBhZGRlZCBzYWZldHkgcHJlY2F1dGlvbiwgZG8gbm90IGRlbGV0ZSB0aGUgc291cmNlIGZpbGUKICAgICAgICAjIGlmIGl0cyBzaXplIGhhcyBkcm9wcGVkIGZyb20gcG9zaXRpdmUgdG8gemVybywgc2luY2UgdGhpcwogICAgICAgICMgY291bGQgaW5kaWNhdGUgYSBkaXNhc3RlciBvZiBzb21lIGtpbmQsIGluY2x1ZGluZyBhIGhhcmR3YXJlCiAgICAgICAgIyBmYWlsdXJlLiAgQWN0dWFsbHksIHRoaXMgY291bGQgaGFwcGVuIGlmIHlvdSBoYWQgYSBmaWxlIG9mCiAgICAgICAgIyBhbGwgY29tbWVudHMgKG9yIHBvZCkgYW5kIGRlbGV0ZWQgZXZlcnl0aGluZyB3aXRoIC1kYWMgKC1kYXApCiAgICAgICAgIyBmb3Igc29tZSByZWFzb24uCiAgICAgICAgaWYgKCAhLXMgJGlucHV0X2ZpbGUgJiYgLXMgJGJhY2t1cF9maWxlICYmICRkZWxldGVfYmFja3VwID09IDEgKSB7CiAgICAgICAgICAgIFdhcm4oCiJvdXRwdXQgZmlsZSAnJGlucHV0X2ZpbGUnIG1pc3Npbmcgb3IgemVybyBsZW5ndGg7IG9yaWdpbmFsICckYmFja3VwX2ZpbGUnIG5vdCBkZWxldGVkXG4iCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB1bmxpbmsoJGJhY2t1cF9maWxlKQogICAgICAgICAgICAgIG9yIERpZSgKInVuYWJsZSB0byByZW1vdmUgYmFja3VwIGZpbGUgJyRiYWNrdXBfZmlsZScgZm9yIC1iIG9wdGlvbjsgY2hlY2sgcGVybWlzc2lvbnM6ICRPU19FUlJPUlxuIgogICAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgVmVyaWZ5IHRoYXQgaW5vZGUgaXMgdW5jaGFuZ2VkIGR1cmluZyBkZXZlbG9wbWVudAogICAgaWYgKERFVkVMX01PREUpIHsKICAgICAgICBteSBAb3V0cHV0X2ZpbGVfc3RhdCA9IHN0YXQoJGlucHV0X2ZpbGUpOwogICAgICAgIG15ICRpbm9kZV9pbnB1dCAgICAgID0gJGlucHV0X2ZpbGVfc3RhdFsxXTsKICAgICAgICBteSAkaW5vZGVfb3V0cHV0ICAgICA9ICRvdXRwdXRfZmlsZV9zdGF0WzFdOwogICAgICAgIGlmICggJGlub2RlX2lucHV0ICE9ICRpbm9kZV9vdXRwdXQgKSB7CiAgICAgICAgICAgIEZhdWx0KDw8RU9NKTsKaW5vZGUgY2hhbmdlZCB3aXRoIC1ibT1jb3B5IGZvciBmaWxlICckaW5wdXRfZmlsZSc6IGlub2RlX2lucHV0PSRpbm9kZV9pbnB1dCBpbm9kZV9vdXRwdXQ9JGlub2RlX291dHB1dApFT00KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgYmFja3VwX21ldGhvZF9jb3B5CgpzdWIgYmFja3VwX21ldGhvZF9tb3ZlIHsKCiAgICBteSAoICRzZWxmLCAkaW5wdXRfZmlsZSwgJHJvdXRwdXRfc3RyaW5nLCAkYmFja3VwX2V4dGVuc2lvbiwKICAgICAgICAkZGVsZXRlX2JhY2t1cCApCiAgICAgID0gQF87CgogICAgIyBIYW5kbGUgdGhlIC1iICgtLWJhY2t1cC1hbmQtbW9kaWZ5LWluLXBsYWNlKSBvcHRpb24gd2l0aCAtYm09J21vdmUnOgogICAgIyAtIEZpcnN0IG1vdmUgJGlucHV0IGZpbGUgdG8gJGJhY2t1cF9uYW1lLgogICAgIyAtIFRoZW4gY29weSAkcm91dHB1dF9zdHJpbmcgdG8gJGlucHV0X2ZpbGUuCiAgICAjIC0gVGhlbiBkZWxldGUgdGhlIGJhY2t1cCBpZiByZXF1ZXN0ZWQKCiAgICAjIE5PVEVTOgogICAgIyAtIERpZSBpbW1lZGlhdGVseSBvbiBhbnkgZXJyb3IuCiAgICAjIC0gJHJvdXRwdXRfc3RyaW5nIGlzIGEgU0NBTEFSIHJlZgogICAgIyAtICRpbnB1dF9maWxlIHBlcm1pc3Npb25zIHdpbGwgYmUgc2V0IGJ5IHN1YiBzZXRfb3V0cHV0X2ZpbGVfcGVybWlzc2lvbnMKCiAgICBteSAkYmFja3VwX25hbWUgPSAkaW5wdXRfZmlsZSAuICRiYWNrdXBfZXh0ZW5zaW9uOwoKICAgIGlmICggIS1mICRpbnB1dF9maWxlICkgewoKICAgICAgICAjIG9oLCBvaCwgbm8gcmVhbCBmaWxlIHRvIGJhY2t1cCAuLgogICAgICAgICMgc2hvdWxkbid0IGhhcHBlbiBiZWNhdXNlIG9mIG51bWVyb3VzIHByZWxpbWluYXJ5IGNoZWNrcwogICAgICAgIERpZSgKICAgICAgICAgICAgInByb2JsZW0gd2l0aCAtYiBiYWNraW5nIHVwIGlucHV0IGZpbGUgJyRpbnB1dF9maWxlJzogbm90IGEgZmlsZVxuIgogICAgICAgICk7CiAgICB9CiAgICBpZiAoIC1mICRiYWNrdXBfbmFtZSApIHsKICAgICAgICB1bmxpbmsoJGJhY2t1cF9uYW1lKQogICAgICAgICAgb3IgRGllKAoidW5hYmxlIHRvIHJlbW92ZSBwcmV2aW91cyAnJGJhY2t1cF9uYW1lJyBmb3IgLWIgb3B0aW9uOyBjaGVjayBwZXJtaXNzaW9uczogJE9TX0VSUk9SXG4iCiAgICAgICAgICApOwogICAgfQoKICAgIG15IEBpbnB1dF9maWxlX3N0YXQgPSBzdGF0KCRpbnB1dF9maWxlKTsKCiAgICAjIGJhY2t1cCB0aGUgaW5wdXQgZmlsZQogICAgIyB3ZSB1c2UgY29weSBmb3Igc3ltbGlua3MsIG1vdmUgZm9yIHJlZ3VsYXIgZmlsZXMKICAgIGlmICggLWwgJGlucHV0X2ZpbGUgKSB7CiAgICAgICAgRmlsZTo6Q29weTo6Y29weSggJGlucHV0X2ZpbGUsICRiYWNrdXBfbmFtZSApCiAgICAgICAgICBvciBEaWUoIkZpbGU6OkNvcHkgZmFpbGVkIHRyeWluZyB0byBiYWNrdXAgc291cmNlOiAkT1NfRVJST1IiKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIHJlbmFtZSggJGlucHV0X2ZpbGUsICRiYWNrdXBfbmFtZSApCiAgICAgICAgICBvciBEaWUoCiJwcm9ibGVtIHJlbmFtaW5nICRpbnB1dF9maWxlIHRvICRiYWNrdXBfbmFtZSBmb3IgLWIgb3B0aW9uOiAkT1NfRVJST1JcbiIKICAgICAgICAgICk7CiAgICB9CgogICAgIyBPcGVuIGEgZmlsZSB3aXRoIHRoZSBvcmlnaW5hbCBpbnB1dCBmaWxlIG5hbWUgZm9yIHdyaXRpbmcgLi4uCiAgICBvcGVuKCBteSAkZm91dCwgIj4iLCAkaW5wdXRfZmlsZSApCiAgICAgIG9yIERpZSgKInByb2JsZW0gcmUtb3BlbmluZyAkaW5wdXRfZmlsZSBmb3Igd3JpdGUgZm9yIC1iIG9wdGlvbjsgY2hlY2sgZmlsZSBhbmQgZGlyZWN0b3J5IHBlcm1pc3Npb25zOiAkT1NfRVJST1JcbiIKICAgICAgKTsKCiAgICBpZiAoICRzZWxmLT5bX2lzX2VuY29kZWRfZGF0YV9dICkgeyBiaW5tb2RlICRmb3V0LCAiOnJhdzplbmNvZGluZyhVVEYtOCkiIH0KICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGJpbm1vZGUgJGZvdXQgfQoKICAgICMgTm93IGNvcHkgdGhlIGZvcm1hdHRlZCBvdXRwdXQgdG8gaXQuLgogICAgIyBvdXRwdXQgbXVzdCBiZSBTQ0FMQVIgcmVmLi4KICAgIGlmICggcmVmKCRyb3V0cHV0X3N0cmluZykgZXEgJ1NDQUxBUicgKSB7CiAgICAgICAgJGZvdXQtPnByaW50KCAkeyRyb3V0cHV0X3N0cmluZ30gKQogICAgICAgICAgb3IgRGllKCJjYW5ub3QgcHJpbnQgdG8gJyRpbnB1dF9maWxlJyB3aXRoIC1iIG9wdGlvbjogJE9TX0VSUk9SXG4iKTsKICAgIH0KCiAgICAjIEVycm9yIGlmIGFueXRoaW5nIGVsc2UgLi4uCiAgICBlbHNlIHsKICAgICAgICBteSAkcmVmID0gcmVmKCRyb3V0cHV0X3N0cmluZyk7CiAgICAgICAgRGllKDw8RU9NKTsKUHJvZ3JhbW1pbmcgZXJyb3I6IHVuYWJsZSB0byBwcmludCB0byAnJGlucHV0X2ZpbGUnIHdpdGggLWIgb3B0aW9uOgp1bmV4cGVjdGVkIHJlZiB0eXBlICckcmVmJzsgZXhwZWN0aW5nICdBUlJBWScgb3IgJ1NDQUxBUicKRU9NCiAgICB9CgogICAgJGZvdXQtPmNsb3NlKCkKICAgICAgb3IgRGllKCJjYW5ub3QgY2xvc2UgJyRpbnB1dF9maWxlJyB3aXRoIC1iIG9wdGlvbjogJE9TX0VSUk9SXG4iKTsKCiAgICAjIHNldCBwZXJtaXNzaW9ucyBvZiB0aGUgb3V0cHV0IGZpbGUgdG8gbWF0Y2ggdGhlIGlucHV0IGZpbGUKICAgIG15ICRpbl9wbGFjZV9tb2RpZnkgPSAxOwogICAgJHNlbGYtPnNldF9vdXRwdXRfZmlsZV9wZXJtaXNzaW9ucyggJGlucHV0X2ZpbGUsIFxAaW5wdXRfZmlsZV9zdGF0LAogICAgICAgICRpbl9wbGFjZV9tb2RpZnkgKTsKCiAgICAjIEtlZXAgb3JpZ2luYWwgbW9kaWZpY2F0aW9uIHRpbWUgaWYgbm8gY2hhbmdlIChydCMxNDU5OTkpCiAgICBteSAoICRyZWFkX3RpbWUsICR3cml0ZV90aW1lICkgPSBAaW5wdXRfZmlsZV9zdGF0WyBfYXRpbWVfLCBfbXRpbWVfIF07CiAgICBpZiAoICEkc2VsZi0+W19pbnB1dF9vdXRwdXRfZGlmZmVyZW5jZV9dICYmIGRlZmluZWQoJHdyaXRlX3RpbWUpICkgewogICAgICAgIHV0aW1lKCAkcmVhZF90aW1lLCAkd3JpdGVfdGltZSwgJGlucHV0X2ZpbGUgKQogICAgICAgICAgfHwgV2FybigiZXJyb3Igc2V0dGluZyB0aW1lcyBmb3IgJyRpbnB1dF9maWxlJ1xuIik7CiAgICB9CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyByZW1vdmUgdGhlIG9yaWdpbmFsIGZpbGUgZm9yIGluLXBsYWNlIG1vZGlmeSBhcyBmb2xsb3dzOgogICAgIyAgICRkZWxldGVfYmFja3VwPTAgbmV2ZXIKICAgICMgICAkZGVsZXRlX2JhY2t1cD0xIG9ubHkgaWYgbm8gZXJyb3JzCiAgICAjICAgJGRlbGV0ZV9iYWNrdXA+MSBhbHdheXMgIDogTk9UIEFMTE9XRUQsIHRvbyByaXNreQogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgaWYgKCAkZGVsZXRlX2JhY2t1cCAmJiAtZiAkYmFja3VwX25hbWUgKSB7CgogICAgICAgICMgQ3VycmVudGx5LCAkZGVsZXRlX2JhY2t1cCBtYXkgb25seSBiZSAxLiBCdXQgaWYgYSBmdXR1cmUgdXBkYXRlCiAgICAgICAgIyBhbGxvd3MgYSB2YWx1ZSA+IDEsIHRoZW4gcmVkdWNlIGl0IHRvIDEgaWYgdGhlcmUgd2VyZSB3YXJuaW5ncy4KICAgICAgICBpZiAoICAgJGRlbGV0ZV9iYWNrdXAgPiAxCiAgICAgICAgICAgICYmICRzZWxmLT5bX2xvZ2dlcl9vYmplY3RfXS0+Z2V0X3dhcm5pbmdfY291bnQoKSApCiAgICAgICAgewogICAgICAgICAgICAkZGVsZXRlX2JhY2t1cCA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIEFzIGFuIGFkZGVkIHNhZmV0eSBwcmVjYXV0aW9uLCBkbyBub3QgZGVsZXRlIHRoZSBzb3VyY2UgZmlsZQogICAgICAgICMgaWYgaXRzIHNpemUgaGFzIGRyb3BwZWQgZnJvbSBwb3NpdGl2ZSB0byB6ZXJvLCBzaW5jZSB0aGlzCiAgICAgICAgIyBjb3VsZCBpbmRpY2F0ZSBhIGRpc2FzdGVyIG9mIHNvbWUga2luZCwgaW5jbHVkaW5nIGEgaGFyZHdhcmUKICAgICAgICAjIGZhaWx1cmUuICBBY3R1YWxseSwgdGhpcyBjb3VsZCBoYXBwZW4gaWYgeW91IGhhZCBhIGZpbGUgb2YKICAgICAgICAjIGFsbCBjb21tZW50cyAob3IgcG9kKSBhbmQgZGVsZXRlZCBldmVyeXRoaW5nIHdpdGggLWRhYyAoLWRhcCkKICAgICAgICAjIGZvciBzb21lIHJlYXNvbi4KICAgICAgICBpZiAoICEtcyAkaW5wdXRfZmlsZSAmJiAtcyAkYmFja3VwX25hbWUgJiYgJGRlbGV0ZV9iYWNrdXAgPT0gMSApIHsKICAgICAgICAgICAgV2FybigKIm91dHB1dCBmaWxlICckaW5wdXRfZmlsZScgbWlzc2luZyBvciB6ZXJvIGxlbmd0aDsgb3JpZ2luYWwgJyRiYWNrdXBfbmFtZScgbm90IGRlbGV0ZWRcbiIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHVubGluaygkYmFja3VwX25hbWUpCiAgICAgICAgICAgICAgb3IgRGllKAoidW5hYmxlIHRvIHJlbW92ZSBwcmV2aW91cyAnJGJhY2t1cF9uYW1lJyBmb3IgLWIgb3B0aW9uOyBjaGVjayBwZXJtaXNzaW9uczogJE9TX0VSUk9SXG4iCiAgICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuOwoKfSAjIyBlbmQgc3ViIGJhY2t1cF9tZXRob2RfbW92ZQoKIyBtYXNrcyBmb3IgZmlsZSBwZXJtaXNzaW9ucwp1c2UgY29uc3RhbnQgT0NUXzc3NyAgPT4gb2N0KDc3Nyk7ICAgICAjIEFsbCB1c2VycyAoTytHK1cpICsgci93L3ggYml0cwp1c2UgY29uc3RhbnQgT0NUXzc3NzcgPT4gb2N0KDc3NzcpOyAgICAjIFNhbWUgKyBzdWlkL3NnaWQvc2JpdAp1c2UgY29uc3RhbnQgT0NUXzYwMCAgPT4gb2N0KDYwMCk7ICAgICAjIE93bmVyIFJXIHBlcm1pc3Npb24KCnN1YiBzZXRfb3V0cHV0X2ZpbGVfcGVybWlzc2lvbnMgewoKICAgIG15ICggJHNlbGYsICRvdXRwdXRfZmlsZSwgJHJpbnB1dF9maWxlX3N0YXQsICRpbl9wbGFjZV9tb2RpZnkgKSA9IEBfOwoKICAgICMgU2V0IHRoZSBwZXJtaXNzaW9ucyBmb3IgdGhlIG91dHB1dCBmaWxlCgogICAgIyBHaXZlbjoKICAgICMgICRvdXRwdXRfZmlsZSAgICAgID0gdGhlIGZpbGUgd2hvc2UgcGVybWlzc2lvbnMgd2Ugd2lsbCBzZXQKICAgICMgICRyaW5wdXRfZmlsZV9zdGF0ID0gdGhlIHJlc3VsdCBvZiBzdGF0KCRpbnB1dF9maWxlKQogICAgIyAgJGluX3BsYWNlX21vZGlmeSAgPSB0cnVlIGlmIC0tYmFja3VwLWFuZC1tb2RpZnktaW4tcGxhY2UgaXMgc2V0CgogICAgbXkgKCAkbW9kZV9pLCAkdWlkX2ksICRnaWRfaSApID0KICAgICAgQHskcmlucHV0X2ZpbGVfc3RhdH1bIF9tb2RlXywgX3VpZF8sIF9naWRfIF07CiAgICBteSAoICR1aWRfbywgJGdpZF9vICkgPSAoIHN0YXQoJG91dHB1dF9maWxlKSApWyBfdWlkXywgX2dpZF8gXTsKICAgIG15ICRpbnB1dF9maWxlX3Blcm1pc3Npb25zICA9ICRtb2RlX2kgJiBPQ1RfNzc3NzsKICAgIG15ICRvdXRwdXRfZmlsZV9wZXJtaXNzaW9ucyA9ICRpbnB1dF9maWxlX3Blcm1pc3Npb25zOwoKICAgICNydDEyODQ3NzogYXZvaWQgaW5jb25zaXN0ZW50IG93bmVyL2dyb3VwIGFuZCBzdWlkL3NnaWQKICAgIGlmICggJHVpZF9pICE9ICR1aWRfbyB8fCAkZ2lkX2kgIT0gJGdpZF9vICkgewoKICAgICAgICAjIHRyeSB0byBjaGFuZ2Ugb3duZXIgYW5kIGdyb3VwIHRvIG1hdGNoIGlucHV0IGZpbGUgaWYKICAgICAgICAjIGluIC1iIG1vZGUuICBOb3RlOiBjaG93biByZXR1cm5zIG51bWJlciBvZiBmaWxlcwogICAgICAgICMgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQuCiAgICAgICAgaWYgKCAkaW5fcGxhY2VfbW9kaWZ5CiAgICAgICAgICAgICYmIGNob3duKCAkdWlkX2ksICRnaWRfaSwgJG91dHB1dF9maWxlICkgKQogICAgICAgIHsKICAgICAgICAgICAgIyBvd25lci9ncm91cCBzdWNjZXNzZnVsbHkgY2hhbmdlZAogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgb3duZXIgb3IgZ3JvdXAgZGlmZmVyOiBkbyBub3QgY29weSBzdWlkIGFuZCBzZ2lkCiAgICAgICAgICAgICRvdXRwdXRfZmlsZV9wZXJtaXNzaW9ucyA9ICRtb2RlX2kgJiBPQ1RfNzc3OwogICAgICAgICAgICBpZiAoICRpbnB1dF9maWxlX3Blcm1pc3Npb25zICE9ICRvdXRwdXRfZmlsZV9wZXJtaXNzaW9ucyApIHsKICAgICAgICAgICAgICAgIFdhcm4oCiJVbmFibGUgdG8gY29weSBzZXR1aWQgYW5kL29yIHNldGdpZCBiaXRzIGZvciBvdXRwdXQgZmlsZSAnJG91dHB1dF9maWxlJ1xuIgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIE1hcmsgdGhlIG91dHB1dCBmaWxlIGZvciBydyB1bmxlc3Mgd2UgYXJlIGluIC1iIG1vZGUuCiAgICAjIEV4cGxhbmF0aW9uOiBwZXJsdGlkeSBkb2VzIG5vdCB1bmxpbmsgZXhpc3Rpbmcgb3V0cHV0CiAgICAjIGZpbGVzIGJlZm9yZSB3cml0aW5nIHRvIHRoZW0sIGZvciBzYWZldHkuICBJZiBhCiAgICAjIGRlc2lnbmF0ZWQgb3V0cHV0IGZpbGUgZXhpc3RzIGFuZCBpcyBub3Qgd3JpdGFibGUsCiAgICAjIHBlcmx0aWR5IHdpbGwgaGFsdC4gIFRoaXMgY2FuIHByZXZlbnQgYSBkYXRhIGxvc3MgaWYgYQogICAgIyB1c2VyIGFjY2lkZW50YWxseSBlbnRlcnMgInBlcmx0aWR5IGluZmlsZSAtbwogICAgIyBpbXBvcnRhbnRfcm9fZmlsZSIsIG9yICJwZXJsdGlkeSBpbmZpbGUgLXN0CiAgICAjID5pbXBvcnRhbnRfcm9fZmlsZSIuIEJ1dCBpdCBhbHNvIG1lYW5zIHRoYXQgcGVybHRpZHkgY2FuCiAgICAjIGdldCBsb2NrZWQgb3V0IG9mIHJlcnVubmluZyB1bmxlc3MgaXQgbWFya3MgaXRzIG93bgogICAgIyBvdXRwdXQgZmlsZXMgd3JpdGFibGUuIFRoZSBhbHRlcm5hdGl2ZSwgb2YgYWx3YXlzCiAgICAjIHVubGlua2luZyB0aGUgZGVzaWduYXRlZCBvdXRwdXQgZmlsZSwgaXMgbGVzcyBzYWZlIGFuZAogICAgIyBub3QgYWx3YXlzIHBvc3NpYmxlLCBleGNlcHQgaW4gLWIgbW9kZSwgd2hlcmUgdGhlcmUgaXMgYW4KICAgICMgYXNzdW1wdGlvbiB0aGF0IGEgcHJldmlvdXMgYmFja3VwIGNhbiBiZSB1bmxpbmtlZCBldmVuIGlmCiAgICAjIG5vdCB3cml0YWJsZS4KICAgIGlmICggISRpbl9wbGFjZV9tb2RpZnkgKSB7CiAgICAgICAgJG91dHB1dF9maWxlX3Blcm1pc3Npb25zIHw9IE9DVF82MDA7CiAgICB9CgogICAgaWYgKCAhY2htb2QoICRvdXRwdXRfZmlsZV9wZXJtaXNzaW9ucywgJG91dHB1dF9maWxlICkgKSB7CgogICAgICAgICMgY291bGRuJ3QgY2hhbmdlIGZpbGUgcGVybWlzc2lvbnMKICAgICAgICBteSAkb3Blcm0gPSBzcHJpbnRmICIlMDRvIiwgJG91dHB1dF9maWxlX3Blcm1pc3Npb25zOwogICAgICAgIFdhcm4oCiJVbmFibGUgdG8gc2V0IHBlcm1pc3Npb25zIGZvciBvdXRwdXQgZmlsZSAnJG91dHB1dF9maWxlJyB0byAkb3Blcm1cbiIKICAgICAgICApOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgc2V0X291dHB1dF9maWxlX3Blcm1pc3Npb25zCgpzdWIgZ2V0X2RlY29kZWRfc3RyaW5nX2J1ZmZlciB7CgogICAgbXkgKCAkc2VsZiwgJGlucHV0X2ZpbGUsICRkaXNwbGF5X25hbWUgKSA9IEBfOwoKICAgICMgRGVjb2RlIHRoZSBpbnB1dCBidWZmZXIgZnJvbSB1dGY4IGlmIG5lY2Vzc2FyeSBvciByZXF1ZXN0ZWQKCiAgICAjIEdpdmVuOgogICAgIyAgICRpbnB1dF9maWxlICAgPSB0aGUgaW5wdXQgZmlsZSBvciBzdHJlYW0KICAgICMgICAkZGlzcGxheV9uYW1lID0gaXRzIG5hbWUgdG8gdXNlIGluIGVycm9yIG1lc3NhZ2VzCgogICAgIyBTZXQgJHNlbGYtPltfbGluZV9zZXBhcmF0b3JfXSwgYW5kCgogICAgIyBSZXR1cm46CiAgICAjICAgJHJpbnB1dF9zdHJpbmcgPSByZWYgdG8gaW5wdXQgc3RyaW5nLCBkZWNvZGVkIGZyb20gdXRmOCBpZiBuZWNlc3NhcnkKICAgICMgICAkaXNfZW5jb2RlZF9kYXRhICA9IHRydWUgaWYgJGJ1ZiBpcyBkZWNvZGVkIGZyb20gdXRmOAogICAgIyAgICRkZWNvZGVkX2lucHV0X2FzID0gdHJ1ZSBpZiBwZXJsdGlkeSBkZWNvZGVkIGlucHV0IGJ1ZgogICAgIyAgICRlbmNvZGluZ19sb2dfbWVzc2FnZSA9IG1lc3NhZ2VzIGZvciBsb2cgZmlsZSwKICAgICMgICAkbGVuZ3RoX2Z1bmN0aW9uICA9IGZ1bmN0aW9uIHRvIHVzZSBmb3IgbWVhc3VyaW5nIHN0cmluZyB3aWR0aAoKICAgICMgUmV0dXJuIG5vdGhpbmcgb24gYW55IGVycm9yOyB0aGlzIGlzIGEgc2lnbmFsIHRvIHNraXAgdGhpcyBmaWxlCgogICAgbXkgJHJPcHRzID0gJHNlbGYtPltfck9wdHNfXTsKCiAgICBteSAkcmlucHV0X3N0cmluZyA9CiAgICAgIHN0cmVhbV9zbHVycCggJGlucHV0X2ZpbGUsICRyT3B0cy0+eyd0aW1lb3V0LWluLXNlY29uZHMnfSApOwogICAgcmV0dXJuIHVubGVzcyAoIGRlZmluZWQoJHJpbnB1dF9zdHJpbmcpICk7CgogICAgIyBOb3RlIHRoYXQgd2UgY291bGQgaGF2ZSBhIHplcm8gc2l6ZSBpbnB1dCBzdHJpbmcgaGVyZSBpZiBpdAogICAgIyBhcnJpdmVkIGZyb20gc3RhbmRhcmQgaW5wdXQgb3IgZnJvbSBhIHN0cmluZyByZWYuIEZvciBleGFtcGxlCiAgICAjICdwZXJsdGlkeSA8bnVsbC5wbCcuICBJZiB3ZSBpc3N1ZSBhIHdhcm5pbmcgYW5kIHN0b3AsIGFzIHdlIHdvdWxkCiAgICAjIGZvciBhIHplcm8gbGVuZ3RoIGZpbGUgKCdwZXJsdGlkeSBudWxsLnBsJyksIHRoZW4gd2UgY291bGQgY2F1c2UKICAgICMgYSBjYWxsIHRvIHRoZSBwZXJsdGlkeSBtb2R1bGUgdG8gbWlzYmVoYXZlIGFzIGEgZmlsdGVyLiBTbyB3ZSB3aWxsCiAgICAjIHByb2Nlc3MgdGhpcyBhcyBhbnkgb3RoZXIgZmlsZSBpbiB0aGlzIGNhc2Ugd2l0aG91dCBhbnkgd2FybmluZyAoYzI4NikuCiAgICBpZiAoICFsZW5ndGgoICR7JHJpbnB1dF9zdHJpbmd9ICkgKSB7CgogICAgICAgICMgemVybyBsZW5ndGgsIGJ1dCBrZWVwIGdvaW5nCiAgICB9CgogICAgIyBDaGVjayBzaXplIG9mIHN0cmluZ3MgYXJyaXZpbmcgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQuIFRoZXNlCiAgICAjIGNvdWxkIG5vdCBiZSBjaGVja2VkIHVudGlsIG5vdy4KICAgIGlmICggJGlucHV0X2ZpbGUgZXEgJy0nICkgewogICAgICAgIG15ICRzaXplX2luX21iID0KICAgICAgICAgIGxlbmd0aCggJHskcmlucHV0X3N0cmluZ30gKSAvICggQ09OU1RfMTAyNCAqIENPTlNUXzEwMjQgKTsKICAgICAgICBteSAkbWF4aW11bV9maWxlX3NpemVfbWIgPSAkck9wdHMtPnsnbWF4aW11bS1maWxlLXNpemUtbWInfTsKICAgICAgICBpZiAoICRzaXplX2luX21iID4gJG1heGltdW1fZmlsZV9zaXplX21iICkgewogICAgICAgICAgICAkc2l6ZV9pbl9tYiA9IHNwcmludGYoICIlMC4xZiIsICRzaXplX2luX21iICk7CiAgICAgICAgICAgIFdhcm4oCiJza2lwcGluZyBmaWxlOiA8c3RkaW4+OiBzaXplICRzaXplX2luX21iIE1CIGV4Y2VlZHMgbGltaXQgJG1heGltdW1fZmlsZV9zaXplX21iOyB1c2UgLW1heGZzPWkgdG8gY2hhbmdlXG4iCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgJHJpbnB1dF9zdHJpbmcgPSAkc2VsZi0+c2V0X2xpbmVfc2VwYXJhdG9yKCRyaW5wdXRfc3RyaW5nKTsKCiAgICBteSAkZW5jb2RpbmdfaW4gICAgICAgICAgICAgID0gRU1QVFlfU1RSSU5HOwogICAgbXkgJHJPcHRzX2NoYXJhY3Rlcl9lbmNvZGluZyA9ICRyT3B0cy0+eydjaGFyYWN0ZXItZW5jb2RpbmcnfTsKICAgIG15ICRlbmNvZGluZ19sb2dfbWVzc2FnZTsKICAgIG15ICRkZWNvZGVkX2lucHV0X2FzID0gRU1QVFlfU1RSSU5HOwogICAgJHJzdGF0dXMtPnsnY2hhcl9tb2RlX3NvdXJjZSd9ID0gMDsKCiAgICAjIENhc2UgMTogSWYgUGVybCBpcyBhbHJlYWR5IGluIGEgY2hhcmFjdGVyLW9yaWVudGVkIG1vZGUgZm9yIHRoaXMKICAgICMgc3RyaW5nIHJhdGhlciB0aGFuIGEgYnl0ZS1vcmllbnRlZCBtb2RlLiAgTm9ybWFsbHksIHRoaXMgaGFwcGVucyBpZgogICAgIyB0aGUgY2FsbGVyIGhhcyBkZWNvZGVkIGEgdXRmOCBzdHJpbmcgYmVmb3JlIGNhbGxpbmcgcGVybHRpZHkuICBCdXQgaXQKICAgICMgY291bGQgYWxzbyBoYXBwZW4gaWYgdGhlIHVzZXIgaGFzIGRvbmUgc29tZSB1bnVzdWFsIG1hbmlwdWxhdGlvbnMgb2YKICAgICMgdGhlIHNvdXJjZS4gIEluIGFueSBjYXNlLCB3ZSB3aWxsIG5vdCBhdHRlbXB0IHRvIGRlY29kZSBpdCBiZWNhdXNlCiAgICAjIHRoYXQgY291bGQgcmVzdWx0IGluIGFuIG91dHB1dCBzdHJpbmcgaW4gYSBkaWZmZXJlbnQgbW9kZS4KICAgIGlmICggaXNfY2hhcl9tb2RlKCAkeyRyaW5wdXRfc3RyaW5nfSApICkgewogICAgICAgICRlbmNvZGluZ19pbiA9ICJ1dGY4IjsKICAgICAgICAkcnN0YXR1cy0+eydjaGFyX21vZGVfc291cmNlJ30gPSAxOwogICAgfQoKICAgICMgQ2FzZSAyLiBObyBpbnB1dCBzdHJlYW0gZW5jb2RpbmcgcmVxdWVzdGVkLiAgVGhpcyBpcyBhcHByb3ByaWF0ZQogICAgIyBmb3Igc2luZ2xlLWJ5dGUgZW5jb2RpbmdzIGxpa2UgYXNjaWksIGxhdGluLTEsIGV0YwogICAgZWxzaWYgKCAhJHJPcHRzX2NoYXJhY3Rlcl9lbmNvZGluZwogICAgICAgIHx8ICRyT3B0c19jaGFyYWN0ZXJfZW5jb2RpbmcgZXEgJ25vbmUnICkKICAgIHsKCiAgICAgICAgIyBub3RoaW5nIHRvIGRvCiAgICB9CgogICAgIyBDYXNlIDMuIGd1ZXNzIGlucHV0IHN0cmVhbSBlbmNvZGluZyBpZiByZXF1ZXN0ZWQKICAgIGVsc2lmICggbGMoJHJPcHRzX2NoYXJhY3Rlcl9lbmNvZGluZykgZXEgJ2d1ZXNzJyApIHsKCiAgICAgICAgIyBUaGUgZ3Vlc3Npbmcgc3RyYXRlZ3kgaXMgc2ltcGxlOiB1c2UgRW5jb2RlOjpHdWVzcyB0byBndWVzcwogICAgICAgICMgYW4gZW5jb2RpbmcuICBJZiBhbmQgb25seSBpZiB0aGUgZ3Vlc3MgaXMgdXRmOCwgdHJ5IGRlY29kaW5nIGFuZAogICAgICAgICMgdXNlIGl0IGlmIHN1Y2Nlc3NmdWwuICBPdGhlcndpc2UsIHdlIHByb2NlZWQgYXNzdW1pbmcgdGhlCiAgICAgICAgIyBjaGFyYWN0ZXJzIGFyZSBlbmNvZGVkIGFzIHNpbmdsZSBieXRlcyAoc2FtZSBhcyBpZiAnbm9uZScgaGFkCiAgICAgICAgIyBiZWVuIHNwZWNpZmllZCBhcyB0aGUgZW5jb2RpbmcpLgoKICAgICAgICAjIEluIHRlc3RpbmcgSSBoYXZlIGZvdW5kIHRoYXQgaW5jbHVkaW5nIGFkZGl0aW9uYWwgZ3Vlc3MgJ3N1c3BlY3QnCiAgICAgICAgIyBlbmNvZGluZ3Mgc29tZXRpbWVzIHdvcmtzIGJ1dCBjYW4gc29tZXRpbWVzIGxlYWQgdG8gZGlzYXN0ZXIgYnkKICAgICAgICAjIHVzaW5nIGFuIGluY29ycmVjdCBkZWNvZGluZy4KCiAgICAgICAgbXkgJGRlY29kZXI7CiAgICAgICAgaWYgKCAkeyRyaW5wdXRfc3RyaW5nfSA9fiAvW15bOmFzY2lpOl1dLyApIHsKICAgICAgICAgICAgJGRlY29kZXIgPSBndWVzc19lbmNvZGluZyggJHskcmlucHV0X3N0cmluZ30sICd1dGY4JyApOwogICAgICAgIH0KICAgICAgICBpZiAoICRkZWNvZGVyICYmIHJlZigkZGVjb2RlcikgKSB7CiAgICAgICAgICAgICRlbmNvZGluZ19pbiA9ICRkZWNvZGVyLT5uYW1lOwogICAgICAgICAgICBpZiAoICRlbmNvZGluZ19pbiBuZSAnVVRGLTgnICYmICRlbmNvZGluZ19pbiBuZSAndXRmOCcgKSB7CiAgICAgICAgICAgICAgICAkZW5jb2RpbmdfaW4gPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgICAgICAkZW5jb2RpbmdfbG9nX21lc3NhZ2UgLj0gPDxFT007Ckd1ZXNzZWQgZW5jb2RpbmcgJyRlbmNvZGluZ19pbicgaXMgbm90IHV0Zjg7IG5vIGVuY29kaW5nIHdpbGwgYmUgdXNlZApFT00KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICBteSAkYnVmOwogICAgICAgICAgICAgICAgaWYgKCAhZXZhbCB7ICRidWYgPSAkZGVjb2Rlci0+ZGVjb2RlKCAkeyRyaW5wdXRfc3RyaW5nfSApOyAxIH0gKQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAkZW5jb2RpbmdfbG9nX21lc3NhZ2UgLj0gPDxFT007Ckd1ZXNzZWQgZW5jb2RpbmcgJyRlbmNvZGluZ19pbicgYnV0IGRlY29kaW5nIHdhcyB1bnN1Y2Nlc3NmdWw7IG5vIGVuY29kaW5nIGlzIHVzZWQKRU9NCgogICAgICAgICAgICAgICAgICAgICMgTm90ZSB0aGF0IGEgZ3Vlc3MgZmFpbGVkLCBidXQga2VlcCBnb2luZwogICAgICAgICAgICAgICAgICAgICMgVGhpcyB3YXJuaW5nIGNhbiBldmVudHVhbGx5IGJlIHJlbW92ZWQKICAgICAgICAgICAgICAgICAgICBXYXJuKAoiZmlsZTogJGRpc3BsYXlfbmFtZTogYmFkIGd1ZXNzIHRvIGRlY29kZSBzb3VyY2UgYXMgJGVuY29kaW5nX2luXG4iCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkZW5jb2RpbmdfaW4gPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkZW5jb2RpbmdfbG9nX21lc3NhZ2UgLj0gPDxFT007Ckd1ZXNzZWQgZW5jb2RpbmcgJyRlbmNvZGluZ19pbicgc3VjY2Vzc2Z1bGx5IGRlY29kZWQKRU9NCiAgICAgICAgICAgICAgICAgICAgJGRlY29kZWRfaW5wdXRfYXMgPSAkZW5jb2RpbmdfaW47CiAgICAgICAgICAgICAgICAgICAgJHJpbnB1dF9zdHJpbmcgICAgPSBcJGJ1ZjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJGVuY29kaW5nX2xvZ19tZXNzYWdlIC49IDw8RU9NOwpEb2VzIG5vdCBsb29rIGxpa2UgdXRmOCBlbmNvZGVkIHRleHQgc28gcHJvY2Vzc2luZyBhcyByYXcgYnl0ZXMKRU9NCiAgICAgICAgfQogICAgfQoKICAgICMgQ2FzZSA0LiBEZWNvZGUgd2l0aCBhIHNwZWNpZmljIGVuY29kaW5nCiAgICBlbHNlIHsKICAgICAgICAkZW5jb2RpbmdfaW4gPSAkck9wdHNfY2hhcmFjdGVyX2VuY29kaW5nOwogICAgICAgIG15ICRidWY7CiAgICAgICAgaWYgKAogICAgICAgICAgICAhZXZhbCB7CiAgICAgICAgICAgICAgICAkYnVmID0gRW5jb2RlOjpkZWNvZGUoICRlbmNvZGluZ19pbiwgJHskcmlucHV0X3N0cmluZ30sCiAgICAgICAgICAgICAgICAgICAgRW5jb2RlOjpGQl9DUk9BSyB8IEVuY29kZTo6TEVBVkVfU1JDICk7CiAgICAgICAgICAgICAgICAxOwogICAgICAgICAgICB9CiAgICAgICAgICApCiAgICAgICAgewoKICAgICAgICAgICAgIyBRdWl0IGlmIHdlIGNhbm5vdCBkZWNvZGUgYnkgdGhlIHJlcXVlc3RlZCBlbmNvZGluZzsKICAgICAgICAgICAgIyBTb21ldGhpbmcgaXMgbm90IHJpZ2h0LgogICAgICAgICAgICBXYXJuKAoic2tpcHBpbmcgZmlsZTogJGRpc3BsYXlfbmFtZTogVW5hYmxlIHRvIGRlY29kZSBzb3VyY2UgYXMgJGVuY29kaW5nX2luXG4iCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHJldHVybiBub3RoaW5nIG9uIGVycm9yCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRlbmNvZGluZ19sb2dfbWVzc2FnZSAuPSA8PEVPTTsKU3BlY2lmaWVkIGVuY29kaW5nICckZW5jb2RpbmdfaW4nIHN1Y2Nlc3NmdWxseSBkZWNvZGVkCkVPTQogICAgICAgICAgICAkZGVjb2RlZF9pbnB1dF9hcyA9ICRlbmNvZGluZ19pbjsKICAgICAgICAgICAgJHJpbnB1dF9zdHJpbmcgICAgPSBcJGJ1ZjsKICAgICAgICB9CiAgICB9CgogICAgIyBTZXQgdGhlIGVuY29kaW5nIHRvIGJlIHVzZWQgZm9yIGFsbCBmdXJ0aGVyIGkvbzogSWYgd2UgaGF2ZQogICAgIyBkZWNvZGVkIHRoZSBkYXRhIHdpdGggYW55IGZvcm1hdCwgdGhlbiB3ZSBtdXN0IGNvbnRpbnVlIHRvCiAgICAjIHJlYWQgYW5kIHdyaXRlIGl0IGFzIGVuY29kZWQgZGF0YSwgYW5kIHdlIHdpbGwgbm9ybWFsaXplIHRoZXNlCiAgICAjIG9wZXJhdGlvbnMgd2l0aCB1dGY4LiAgSWYgd2UgaGF2ZSBub3QgZGVjb2RlZCB0aGUgZGF0YSwgdGhlbgogICAgIyB3ZSBtdXN0IG5vdCB0cmVhdCBpdCBhcyBlbmNvZGVkIGRhdGEuCiAgICBteSAkaXNfZW5jb2RlZF9kYXRhID0gJGVuY29kaW5nX2luID8gJ3V0ZjgnIDogRU1QVFlfU1RSSU5HOwogICAgJHNlbGYtPltfaXNfZW5jb2RlZF9kYXRhX10gPSAkaXNfZW5jb2RlZF9kYXRhOwoKICAgICMgRGVsZXRlIGFueSBCeXRlIE9yZGVyIE1hcmsgKEJPTSksIHdoaWNoIGNhbiBjYXVzZSB0cm91YmxlCiAgICBpZiAoJGlzX2VuY29kZWRfZGF0YSkgewogICAgICAgICR7JHJpbnB1dF9zdHJpbmd9ID1+IHMvXlx4e0ZFRkZ9Ly87CiAgICB9CgogICAgJHJzdGF0dXMtPnsnaW5wdXRfbmFtZSd9ICAgICAgID0gJGRpc3BsYXlfbmFtZTsKICAgICRyc3RhdHVzLT57J29wdF9lbmNvZGluZyd9ICAgICA9ICRyT3B0c19jaGFyYWN0ZXJfZW5jb2Rpbmc7CiAgICAkcnN0YXR1cy0+eydjaGFyX21vZGVfdXNlZCd9ICAgPSAkZW5jb2RpbmdfaW4gPyAxIDogMDsKICAgICRyc3RhdHVzLT57J2lucHV0X2RlY29kZWRfYXMnfSA9ICRkZWNvZGVkX2lucHV0X2FzOwoKICAgICMgRGVmaW5lIHRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIGRpc3BsYXkgd2lkdGggb2YgY2hhcmFjdGVyCiAgICAjIHN0cmluZ3MKICAgIG15ICRsZW5ndGhfZnVuY3Rpb247CiAgICBpZiAoJGlzX2VuY29kZWRfZGF0YSkgewoKICAgICAgICAjIFRyeSB0byBsb2FkIFVuaWNvZGU6OkdDU3RyaW5nIGZvciBkZWZpbmluZyB0ZXh0IGRpc3BsYXkgd2lkdGgsIGlmCiAgICAgICAgIyByZXF1ZXN0ZWQsIHdoZW4gdGhlIGZpcnN0IGVuY29kZWQgZmlsZSBpcyBlbmNvdW50ZXJlZAogICAgICAgIGlmICggIWRlZmluZWQoJGxvYWRlZF91bmljb2RlX2djc3RyaW5nKSApIHsKICAgICAgICAgICAgaWYgKCBldmFsIHsgcmVxdWlyZSBVbmljb2RlOjpHQ1N0cmluZzsgMSB9ICkgewogICAgICAgICAgICAgICAgJGxvYWRlZF91bmljb2RlX2djc3RyaW5nID0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRsb2FkZWRfdW5pY29kZV9nY3N0cmluZyA9IDA7CiAgICAgICAgICAgICAgICBpZiAoICRyT3B0cy0+eyd1c2UtdW5pY29kZS1nY3N0cmluZyd9ICkgewogICAgICAgICAgICAgICAgICAgIFdhcm4oPDxFT00pOwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tClVuYWJsZSB0byBsb2FkIFVuaWNvZGU6OkdDU3RyaW5nOiAkRVZBTF9FUlJPUgpQcm9jZXNzaW5nIGNvbnRpbnVlcyBidXQgc29tZSB2ZXJ0aWNhbCBhbGlnbm1lbnQgbWF5IGJlIHBvb3IKVG8gcHJldmVudCB0aGlzIHdhcm5pbmcgbWVzc2FnZSwgeW91IGNhbiBlaXRoZXI6Ci0gaW5zdGFsbCBtb2R1bGUgVW5pY29kZTo6R0NTdHJpbmcsIG9yCi0gcmVtb3ZlICctLXVzZS11bmljb2RlLWdjc3RyaW5nJyBvciAnLWdjcycgZnJvbSB5b3VyIHBlcmx0aWR5cmMgb3IgY29tbWFuZCBsaW5lCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRU9NCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCRsb2FkZWRfdW5pY29kZV9nY3N0cmluZykgewogICAgICAgICAgICAkbGVuZ3RoX2Z1bmN0aW9uID0gc3ViIHsKICAgICAgICAgICAgICAgIHJldHVybiBVbmljb2RlOjpHQ1N0cmluZy0+bmV3KCAkX1swXSApLT5jb2x1bW5zOwogICAgICAgICAgICB9OwogICAgICAgICAgICAkZW5jb2RpbmdfbG9nX21lc3NhZ2UgLj0gPDxFT007ClVzaW5nICdVbmljb2RlOjpHQ1N0cmluZycgdG8gbWVhc3VyZSBob3Jpem9udGFsIGNoYXJhY3RlciB3aWR0aHMKRU9NCiAgICAgICAgICAgICRyc3RhdHVzLT57J2djc191c2VkJ30gPSAxOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAoCiAgICAgICAgJHJpbnB1dF9zdHJpbmcsCiAgICAgICAgJGlzX2VuY29kZWRfZGF0YSwKICAgICAgICAkZGVjb2RlZF9pbnB1dF9hcywKICAgICAgICAkZW5jb2RpbmdfbG9nX21lc3NhZ2UsCiAgICAgICAgJGxlbmd0aF9mdW5jdGlvbiwKCiAgICApOwp9ICMjIGVuZCBzdWIgZ2V0X2RlY29kZWRfc3RyaW5nX2J1ZmZlcgoKeyAjPDw8CgpteSAkTEY7Cm15ICRDUjsKbXkgJENSTEY7CgpCRUdJTiB7CiAgICAkTEYgICA9IGNocigxMCk7CiAgICAkQ1IgICA9IGNocigxMyk7CiAgICAkQ1JMRiA9ICRDUiAuICRMRjsKfQoKc3ViIGdldF9saW5lX3NlcGFyYXRvcl9kZWZhdWx0IHsKCiAgICBteSAoJHJPcHRzKSA9IEBfOwoKICAgICMgR2V0IHRoZSBsaW5lIHNlcGFyYXRvciB0aGF0IHdpbGwgYXBwbHkgdW5sZXNzIG92ZXJyaWRkZW4gYnkgYQogICAgIyAtLXByZXNlcnZlLWxpbmUtZW5kaW5ncyBmbGFnIGZvciBhIHNwZWNpZmljIGZpbGUKCiAgICBteSAkbGluZV9zZXBhcmF0b3JfZGVmYXVsdCA9ICJcbiI7CgogICAgbXkgJG9sZSA9ICRyT3B0cy0+eydvdXRwdXQtbGluZS1lbmRpbmcnfTsKICAgIGlmICgkb2xlKSB7CiAgICAgICAgbXkgJWVuZGluZ3MgPSAoCiAgICAgICAgICAgIGRvcyAgPT4gJENSTEYsCiAgICAgICAgICAgIHdpbiAgPT4gJENSTEYsCiAgICAgICAgICAgIG1hYyAgPT4gJENSLAogICAgICAgICAgICB1bml4ID0+ICRMRiwKICAgICAgICApOwoKICAgICAgICAkbGluZV9zZXBhcmF0b3JfZGVmYXVsdCA9ICRlbmRpbmdzeyBsYyAkb2xlIH07CgogICAgICAgIGlmICggISRsaW5lX3NlcGFyYXRvcl9kZWZhdWx0ICkgewogICAgICAgICAgICBteSAkc3RyID0gam9pbiBTUEFDRSwga2V5cyAlZW5kaW5nczsKICAgICAgICAgICAgRGllKDw8RU9NKTsKVW5yZWNvZ25pemVkIGxpbmUgZW5kaW5nICckb2xlJzsgZXhwZWN0aW5nIG9uZSBvZjogJHN0cgpFT00KICAgICAgICB9CgogICAgICAgICMgQ2hlY2sgZm9yIGNvbmZsaWN0IHdpdGggLXBsZQogICAgICAgIGlmICggJHJPcHRzLT57J3ByZXNlcnZlLWxpbmUtZW5kaW5ncyd9ICkgewogICAgICAgICAgICBXYXJuKCJJZ25vcmluZyAtcGxlOyBjb25mbGljdHMgd2l0aCAtb2xlXG4iKTsKICAgICAgICAgICAgJHJPcHRzLT57J3ByZXNlcnZlLWxpbmUtZW5kaW5ncyd9ID0gdW5kZWY7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkbGluZV9zZXBhcmF0b3JfZGVmYXVsdDsKCn0gIyMgZW5kIHN1YiBnZXRfbGluZV9zZXBhcmF0b3JfZGVmYXVsdAoKc3ViIHNldF9saW5lX3NlcGFyYXRvciB7CgogICAgbXkgKCAkc2VsZiwgJHJpbnB1dF9zdHJpbmcgKSA9IEBfOwoKICAgICMgU2V0IHRoZSAob3V0cHV0KSBsaW5lIHNlcGFyYXRvciBhcyByZXF1ZXN0ZWQgb3IgbmVjZXNzYXJ5CgogICAgbXkgJHJPcHRzID0gJHNlbGYtPltfck9wdHNfXTsKCiAgICAjIFN0YXJ0IHdpdGggdGhlIGRlZmF1bHQgKG91dHB1dCkgbGluZSBzZXBhcmF0b3IKICAgIG15ICRsaW5lX3NlcGFyYXRvciA9ICRzZWxmLT5bX2xpbmVfc2VwYXJhdG9yX2RlZmF1bHRfXTsKCiAgICAjIEZpcnN0IHRyeSB0byBmaW5kIHRoZSBsaW5lIHNlcGFyYXRvciBvZiB0aGUgaW5wdXQgc3RyZWFtCiAgICBteSAkaW5wdXRfbGluZV9zZXBhcmF0b3I7CgogICAgIyBMaW1pdCB0aGUgc2VhcmNoIHRvIGEgcmVhc29uYWJsZSBudW1iZXIgb2YgY2hhcmFjdGVycywgaW4gY2FzZSB3ZQogICAgIyBoYXZlIGEgd2VpcmQgZmlsZQogICAgbXkgJHN0ciA9IHN1YnN0ciggJHskcmlucHV0X3N0cmluZ30sIDAsIENPTlNUXzEwMjQgKTsKICAgIGlmICgkc3RyKSB7CgogICAgICAgIGlmICggJHN0ciA9fiBtLygoJENSfCRMRikrKS8gKSB7CgogICAgICAgICAgICBteSAkdGVzdCA9ICQxOwoKICAgICAgICAgICAgIyBkb3MKICAgICAgICAgICAgaWYgKCAkdGVzdCA9fiAvXigkQ1JMRikrXHovICkgewogICAgICAgICAgICAgICAgJGlucHV0X2xpbmVfc2VwYXJhdG9yID0gJENSTEY7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgbWFjCiAgICAgICAgICAgIGVsc2lmICggJHRlc3QgPX4gL14oJENSKStcei8gKSB7CiAgICAgICAgICAgICAgICAkaW5wdXRfbGluZV9zZXBhcmF0b3IgPSAkQ1I7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgdW5peAogICAgICAgICAgICBlbHNpZiAoICR0ZXN0ID1+IC9eKCRMRikrXHovICkgewogICAgICAgICAgICAgICAgJGlucHV0X2xpbmVfc2VwYXJhdG9yID0gJExGOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHVua25vd24KICAgICAgICAgICAgZWxzZSB7IH0KICAgICAgICB9CgogICAgICAgICMgbm8gZW5kaW5nIHNlZW4KICAgICAgICBlbHNlIHsgfQogICAgfQoKICAgIGlmICggZGVmaW5lZCgkaW5wdXRfbGluZV9zZXBhcmF0b3IpICkgewoKICAgICAgICAjIFJlbWVtYmVyIHRoZSBpbnB1dCBsaW5lIHNlcGFyYXRvciBpZiBuZWVkZWQKICAgICAgICBpZiAoICRyT3B0cy0+eydwcmVzZXJ2ZS1saW5lLWVuZGluZ3MnfSApIHsKICAgICAgICAgICAgJGxpbmVfc2VwYXJhdG9yID0gJGlucHV0X2xpbmVfc2VwYXJhdG9yOwogICAgICAgIH0KCiAgICAgICAgIyBDb252ZXJ0IGxpbmUgZW5kaW5ncyB0byAiXG4iIGZvciBwcm9jZXNzaW5nIGlmIG5lY2Vzc2FyeS4KICAgICAgICBpZiAoICRpbnB1dF9saW5lX3NlcGFyYXRvciBuZSAiXG4iICkgewogICAgICAgICAgICBteSBAbGluZXMgPSBzcGxpdCAvXi8sICR7JHJpbnB1dF9zdHJpbmd9OwoKICAgICAgICAgICAgIyB0cnkgdG8gY29udmVydCBDUiB0byBcbgogICAgICAgICAgICBpZiAoICRpbnB1dF9saW5lX3NlcGFyYXRvciBlcSAkQ1IgKSB7CgogICAgICAgICAgICAgICAgIyBpZiB0aGlzIGZpbGUgaXMgY3VycmVudGx5IGEgc2luZ2xlIGxpbmUgLi4KICAgICAgICAgICAgICAgIGlmICggQGxpbmVzID09IDEgKSB7CgogICAgICAgICAgICAgICAgICAgICMgYW5kIGJlY29tZXMgbXVsdGlwbGUgbGluZXMgd2l0aCB0aGUgY2hhbmdlIC4uCiAgICAgICAgICAgICAgICAgICAgQGxpbmVzID0gbWFwIHsgJF8gLiAiXG4iIH0gc3BsaXQgLyRDUi8sICR7JHJpbnB1dF9zdHJpbmd9OwogICAgICAgICAgICAgICAgICAgIGlmICggQGxpbmVzID4gMSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlbiBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGJ1ZiA9IGpvaW4gRU1QVFlfU1RSSU5HLCBAbGluZXM7CiAgICAgICAgICAgICAgICAgICAgICAgICRyaW5wdXRfc3RyaW5nID0gXCRidWY7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNvbnZlcnQgQ1ItTEYgdG8gTEYKICAgICAgICAgICAgZWxzaWYgKCAoICRpbnB1dF9saW5lX3NlcGFyYXRvciBlcSAkQ1JMRiApICYmICggIlxuIiBlcSAkTEYgKSApIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggbXkgJGxpbmUgKEBsaW5lcykgeyAkbGluZSA9fiBzLyRDUkxGJC9cbi8gfQogICAgICAgICAgICAgICAgbXkgJGJ1ZiA9IGpvaW4gRU1QVFlfU1RSSU5HLCBAbGluZXM7CiAgICAgICAgICAgICAgICAkcmlucHV0X3N0cmluZyA9IFwkYnVmOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHVua25vd24gbGluZSBlbmRpbmcgc2NoZW1lIC0gbGVhdmUgaXQgYWxvbmUgYW5kIGxldCB0aGUgdG9rZW5pemVyCiAgICAgICAgICAgICMgZGVhbCB3aXRoIGl0CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICRzZWxmLT5bX2xpbmVfc2VwYXJhdG9yX10gPSAkbGluZV9zZXBhcmF0b3I7CiAgICByZXR1cm4gJHJpbnB1dF9zdHJpbmc7Cn0gIyMgZW5kIHN1YiBzZXRfbGluZV9zZXBhcmF0b3IKfQoKc3ViIHByb2Nlc3NfYWxsX2ZpbGVzIHsKCiAgICBteSAoICRzZWxmLCAkcmNhbGxfaGFzaCApID0gQF87CgogICAgIyBUaGlzIHJvdXRpbmUgaXMgdGhlIG1haW4gbG9vcCB0byBwcm9jZXNzIGFsbCBmaWxlcy4KICAgICMgVG90YWwgZm9ybWF0dGluZyBpcyBkb25lIHdpdGggdGhlc2UgbGF5ZXJzIG9mIHN1YnJvdXRpbmVzOgogICAgIyAgIHBlcmx0aWR5ICAgICAgICAgICAgICAgIC0gbWFpbiByb3V0aW5lOyBjaGVja3MgcnVuIHBhcmFtZXRlcnMKICAgICMgICpwcm9jZXNzX2FsbF9maWxlcyAgICAgICAtIG1haW4gbG9vcCB0byBwcm9jZXNzIGFsbCBmaWxlczsgKlRISVMgTEFZRVIKICAgICMgICBwcm9jZXNzX2ZpbHRlcl9sYXllciAgICAtIGRvIGFueSBwcmUgYW5kIHBvc3QgcHJvY2Vzc2luZzsKICAgICMgICBwcm9jZXNzX2l0ZXJhdGlvbl9sYXllciAtIGhhbmRsZSBhbnkgaXRlcmF0aW9ucyBvbiBmb3JtYXR0aW5nCiAgICAjICAgcHJvY2Vzc19zaW5nbGVfY2FzZSAgICAgLSBzb2x2ZXMgb25lIGZvcm1hdHRpbmcgcHJvYmxlbQoKICAgIG15ICRyaW5wdXRfaGFzaCAgICAgICAgICAgICAgID0gJHJjYWxsX2hhc2gtPntyaW5wdXRfaGFzaH07CiAgICBteSAkcmZpbGVzICAgICAgICAgICAgICAgICAgICA9ICRyY2FsbF9oYXNoLT57cmZpbGVzfTsKICAgIG15ICRzb3VyY2Vfc3RyZWFtICAgICAgICAgICAgID0gJHJjYWxsX2hhc2gtPntzb3VyY2Vfc3RyZWFtfTsKICAgIG15ICRvdXRwdXRfZXh0ZW5zaW9uICAgICAgICAgID0gJHJjYWxsX2hhc2gtPntvdXRwdXRfZXh0ZW5zaW9ufTsKICAgIG15ICRmb3JiaWRkZW5fZmlsZV9leHRlbnNpb25zID0gJHJjYWxsX2hhc2gtPntmb3JiaWRkZW5fZmlsZV9leHRlbnNpb25zfTsKICAgIG15ICRpbl9wbGFjZV9tb2RpZnkgICAgICAgICAgID0gJHJjYWxsX2hhc2gtPntpbl9wbGFjZV9tb2RpZnl9OwogICAgbXkgJGJhY2t1cF9leHRlbnNpb24gICAgICAgICAgPSAkcmNhbGxfaGFzaC0+e2JhY2t1cF9leHRlbnNpb259OwogICAgbXkgJGRlbGV0ZV9iYWNrdXAgICAgICAgICAgICAgPSAkcmNhbGxfaGFzaC0+e2RlbGV0ZV9iYWNrdXB9OwogICAgbXkgJGxvZ2ZpbGVfaGVhZGVyICAgICAgICAgICAgPSAkcmNhbGxfaGFzaC0+e2xvZ2ZpbGVfaGVhZGVyfTsKICAgIG15ICRycGVuZGluZ19jb21wbGFpbnQgICAgICAgID0gJHJjYWxsX2hhc2gtPntycGVuZGluZ19jb21wbGFpbnR9OwogICAgbXkgJHJwZW5kaW5nX2xvZ2ZpbGVfbWVzc2FnZSAgPSAkcmNhbGxfaGFzaC0+e3JwZW5kaW5nX2xvZ2ZpbGVfbWVzc2FnZX07CgogICAgbXkgJHJPcHRzICAgICAgICAgICAgICA9ICRzZWxmLT5bX3JPcHRzX107CiAgICBteSAkZG90ICAgICAgICAgICAgICAgID0gJHNlbGYtPltfZmlsZV9leHRlbnNpb25fc2VwYXJhdG9yX107CiAgICBteSAkZGlhZ25vc3RpY3Nfb2JqZWN0ID0gJHNlbGYtPltfZGlhZ25vc3RpY3Nfb2JqZWN0X107CgogICAgbXkgJGRlc3RpbmF0aW9uX3N0cmVhbSA9ICRyaW5wdXRfaGFzaC0+eydkZXN0aW5hdGlvbid9OwogICAgbXkgJGVycm9yZmlsZV9zdHJlYW0gICA9ICRyaW5wdXRfaGFzaC0+eydlcnJvcmZpbGUnfTsKICAgIG15ICRsb2dmaWxlX3N0cmVhbSAgICAgPSAkcmlucHV0X2hhc2gtPnsnbG9nZmlsZSd9OwogICAgbXkgJHRlZWZpbGVfc3RyZWFtICAgICA9ICRyaW5wdXRfaGFzaC0+eyd0ZWVmaWxlJ307CiAgICBteSAkZGVidWdmaWxlX3N0cmVhbSAgID0gJHJpbnB1dF9oYXNoLT57J2RlYnVnZmlsZSd9OwoKICAgIG15ICRudW1iZXJfb2ZfZmlsZXMgPSBAeyRyZmlsZXN9OwogICAgZm9yZWFjaCBteSAkaW5wdXRfZmlsZSAoIEB7JHJmaWxlc30gKSB7CiAgICAgICAgbXkgJGZpbGVyb290OwogICAgICAgIG15IEBpbnB1dF9maWxlX3N0YXQ7CiAgICAgICAgbXkgJGRpc3BsYXlfbmFtZTsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBwcmVwYXJlIHRoaXMgaW5wdXQgc3RyZWFtCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaWYgKCRzb3VyY2Vfc3RyZWFtKSB7CiAgICAgICAgICAgICRmaWxlcm9vdCAgICAgPSAicGVybHRpZHkiOwogICAgICAgICAgICAkZGlzcGxheV9uYW1lID0gIjxzb3VyY2Vfc3RyZWFtPiI7CgogICAgICAgICAgICAjIElmIHRoZSBzb3VyY2UgaXMgZnJvbSBhbiBhcnJheSBvciBzdHJpbmcsIHRoZW4gLkxPRyBvdXRwdXQKICAgICAgICAgICAgIyBpcyBvbmx5IHBvc3NpYmxlIGlmIGEgbG9nZmlsZSBzdHJlYW0gaXMgc3BlY2lmaWVkLiAgVGhpcyBwcmV2ZW50cwogICAgICAgICAgICAjIHVuZXhwZWN0ZWQgcGVybHRpZHkuTE9HIGZpbGVzLiAgSWYgdGhlIHN0cmVhbSBpcyBub3QgZGVmaW5lZAogICAgICAgICAgICAjIHRoZW4gd2Ugd2lsbCBjYXB0dXJlIGl0IGluIGEgc3RyaW5nIHJlZiBidXQgaXQgd2lsbCBub3QgYmUKICAgICAgICAgICAgIyBhY2Nlc3NpYmxlLiBQcmV2aW91c2x5IGJ5IFBlcmw6OlRpZHk6OkRldk51bGwgKGZpeCBjMjU1KTsKICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkbG9nZmlsZV9zdHJlYW0pICkgewogICAgICAgICAgICAgICAgJGxvZ2ZpbGVfc3RyZWFtID0gXG15ICR0bXA7CgogICAgICAgICAgICAgICAgIyBMaWtld2lzZSBmb3IgLlRFRSBhbmQgLkRFQlVHIG91dHB1dAogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggIWRlZmluZWQoJHRlZWZpbGVfc3RyZWFtKSApIHsKICAgICAgICAgICAgICAgICR0ZWVmaWxlX3N0cmVhbSA9IFxteSAkdG1wOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggIWRlZmluZWQoJGRlYnVnZmlsZV9zdHJlYW0pICkgewogICAgICAgICAgICAgICAgJGRlYnVnZmlsZV9zdHJlYW0gPSBcbXkgJHRtcDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRpbnB1dF9maWxlIGVxICctJyApIHsgICAgIyAnLScgaW5kaWNhdGVzIGlucHV0IGZyb20gU1RESU4KICAgICAgICAgICAgJGZpbGVyb290ICAgICA9ICJwZXJsdGlkeSI7ICAgIyByb290IG5hbWUgdG8gdXNlIGZvciAuRVJSLCAuTE9HLCBldGMKICAgICAgICAgICAgJGRpc3BsYXlfbmFtZSA9ICI8c3RkaW4+IjsKICAgICAgICAgICAgJGluX3BsYWNlX21vZGlmeSA9IDA7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkZmlsZXJvb3QgICAgID0gJGlucHV0X2ZpbGU7CiAgICAgICAgICAgICRkaXNwbGF5X25hbWUgPSAkaW5wdXRfZmlsZTsKICAgICAgICAgICAgaWYgKCAhLWUgJGlucHV0X2ZpbGUgKSB7CiAgICAgICAgICAgICAgICBXYXJuKCJza2lwcGluZyBmaWxlOiAnJGlucHV0X2ZpbGUnOiBubyBtYXRjaGVzIGZvdW5kXG4iKTsKICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggIS1mICRpbnB1dF9maWxlICkgewogICAgICAgICAgICAgICAgV2Fybigic2tpcHBpbmcgZmlsZTogJGlucHV0X2ZpbGU6IG5vdCBhIHJlZ3VsYXIgZmlsZVxuIik7CiAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIEFzIGEgc2FmZXR5IHByZWNhdXRpb24sIHNraXAgemVybyBsZW5ndGggZmlsZXMuCiAgICAgICAgICAgICMgSWYgZm9yIGV4YW1wbGUgYSBzb3VyY2UgZmlsZSBnb3QgY2xvYmJlcmVkIHNvbWVob3csCiAgICAgICAgICAgICMgdGhlIG9sZCAudGR5IG9yIC5iYWsgZmlsZXMgbWlnaHQgc3RpbGwgZXhpc3Qgc28gd2UKICAgICAgICAgICAgIyBzaG91bGRuJ3Qgb3ZlcndyaXRlIHRoZW0gd2l0aCB6ZXJvIGxlbmd0aCBmaWxlcy4KICAgICAgICAgICAgaWYgKCAhLXMgJGlucHV0X2ZpbGUgKSB7CiAgICAgICAgICAgICAgICBXYXJuKCJza2lwcGluZyBmaWxlOiAkaW5wdXRfZmlsZTogWmVybyBzaXplXG4iKTsKICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgQW5kIGF2b2lkIGZvcm1hdHRpbmcgZXh0cmVtZWx5IGxhcmdlIGZpbGVzLiBTaW5jZSBwZXJsdGlkeSByZWFkcwogICAgICAgICAgICAjIGZpbGVzIGludG8gbWVtb3J5LCB0cnlpbmcgdG8gcHJvY2VzcyBhbiBleHRyZW1lbHkgbGFyZ2UgZmlsZQogICAgICAgICAgICAjIGNvdWxkIGNhdXNlIHN5c3RlbSBwcm9ibGVtcy4KICAgICAgICAgICAgbXkgJHNpemVfaW5fbWIgPSAoIC1zICRpbnB1dF9maWxlICkgLyAoIENPTlNUXzEwMjQgKiBDT05TVF8xMDI0ICk7CiAgICAgICAgICAgIG15ICRtYXhpbXVtX2ZpbGVfc2l6ZV9tYiA9ICRyT3B0cy0+eydtYXhpbXVtLWZpbGUtc2l6ZS1tYid9OwogICAgICAgICAgICBpZiAoICRzaXplX2luX21iID4gJG1heGltdW1fZmlsZV9zaXplX21iICkgewogICAgICAgICAgICAgICAgJHNpemVfaW5fbWIgPSBzcHJpbnRmKCAiJTAuMWYiLCAkc2l6ZV9pbl9tYiApOwogICAgICAgICAgICAgICAgV2FybigKInNraXBwaW5nIGZpbGU6ICRpbnB1dF9maWxlOiBzaXplICRzaXplX2luX21iIE1CIGV4Y2VlZHMgbGltaXQgJG1heGltdW1fZmlsZV9zaXplX21iOyB1c2UgLW1heGZzPWkgdG8gY2hhbmdlXG4iCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAhLVQgJGlucHV0X2ZpbGUgJiYgISRyT3B0cy0+eydmb3JjZS1yZWFkLWJpbmFyeSd9ICkgewogICAgICAgICAgICAgICAgV2Fybigic2tpcHBpbmcgZmlsZTogJGlucHV0X2ZpbGU6IE5vbi10ZXh0IChvdmVycmlkZSB3aXRoIC1mKVxuIgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgSW5wdXQgZmlsZSBtdXN0IGJlIHdyaXRhYmxlIGZvciAtYiAtYm09J2NvcHknLiAgV2UgbXVzdCBjYXRjaAogICAgICAgICAgICAjIHRoaXMgZWFybHkgdG8gcHJldmVudCBlbmNvdW50ZXJpbmcgdHJvdWJsZSBhZnRlciB1bmxpbmtpbmcgdGhlCiAgICAgICAgICAgICMgcHJldmlvdXMgYmFja3VwLgogICAgICAgICAgICBpZiAoICRpbl9wbGFjZV9tb2RpZnkgJiYgIS13ICRpbnB1dF9maWxlICkgewogICAgICAgICAgICAgICAgbXkgJGJhY2t1cF9tZXRob2QgPSAkck9wdHMtPnsnYmFja3VwLW1ldGhvZCd9OwogICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRiYWNrdXBfbWV0aG9kKSAmJiAkYmFja3VwX21ldGhvZCBlcSAnY29weScgKSB7CiAgICAgICAgICAgICAgICAgICAgV2FybigKInNraXBwaW5nIGZpbGUgJyRpbnB1dF9maWxlJyBmb3IgLWIgb3B0aW9uOiBmaWxlIHJlcG9ydGVkIGFzIG5vbi13cml0YWJsZVxuIgogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyB3ZSBzaG91bGQgaGF2ZSBhIHZhbGlkIGZpbGVuYW1lIG5vdwogICAgICAgICAgICAkZmlsZXJvb3QgICAgICAgID0gJGlucHV0X2ZpbGU7CiAgICAgICAgICAgIEBpbnB1dF9maWxlX3N0YXQgPSBzdGF0KCRpbnB1dF9maWxlKTsKCiAgICAgICAgICAgIGlmICggJE9TTkFNRSBlcSAnVk1TJyApIHsKICAgICAgICAgICAgICAgICggJGZpbGVyb290LCAkZG90ICkgPSBjaGVja192bXNfZmlsZW5hbWUoJGZpbGVyb290KTsKICAgICAgICAgICAgICAgICRzZWxmLT5bX2ZpbGVfZXh0ZW5zaW9uX3NlcGFyYXRvcl9dID0gJGRvdDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBhZGQgb3B0aW9uIHRvIGNoYW5nZSBwYXRoIGhlcmUKICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCAkck9wdHMtPnsnb3V0cHV0LXBhdGgnfSApICkgewoKICAgICAgICAgICAgICAgIG15ICggJGJhc2UsICRvbGRfcGF0aF91dSApID0gZmlsZXBhcnNlKCRmaWxlcm9vdCk7CiAgICAgICAgICAgICAgICBteSAkbmV3X3BhdGggPSAkck9wdHMtPnsnb3V0cHV0LXBhdGgnfTsKICAgICAgICAgICAgICAgIGlmICggIS1kICRuZXdfcGF0aCApIHsKICAgICAgICAgICAgICAgICAgICBta2RpcigkbmV3X3BhdGgpICAgICMgRGVmYXVsdCBNT0RFIGlzIDA3NzcKICAgICAgICAgICAgICAgICAgICAgIG9yCiAgICAgICAgICAgICAgICAgICAgICBEaWUoInVuYWJsZSB0byBjcmVhdGUgZGlyZWN0b3J5ICRuZXdfcGF0aDogJE9TX0VSUk9SXG4iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG15ICRwYXRoID0gJG5ld19wYXRoOwogICAgICAgICAgICAgICAgJGZpbGVyb290ID0gRmlsZTo6U3BlYy0+Y2F0ZmlsZSggJHBhdGgsICRiYXNlICk7CiAgICAgICAgICAgICAgICBpZiAoICEkZmlsZXJvb3QgKSB7CiAgICAgICAgICAgICAgICAgICAgRGllKDw8RU9NKTsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClByb2JsZW0gY29tYmluaW5nICRuZXdfcGF0aCBhbmQgJGJhc2UgdG8gbWFrZSBhIGZpbGVuYW1lOyBjaGVjayAtb3BhdGgKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkVPTQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIFNraXAgZmlsZXMgd2l0aCBzYW1lIGV4dGVuc2lvbiBhcyB0aGUgb3V0cHV0IGZpbGVzIGJlY2F1c2UKICAgICAgICAjIHRoaXMgY2FuIGxlYWQgdG8gYSBtZXNzeSBzaXR1YXRpb24gd2l0aCBmaWxlcyBsaWtlCiAgICAgICAgIyBzY3JpcHQudGR5LnRkeS50ZHkgLi4uIG9yIHdvcnNlIHByb2JsZW1zIC4uLiAgd2hlbiB5b3UKICAgICAgICAjIHJlcnVuIHBlcmx0aWR5IG92ZXIgYW5kIG92ZXIgd2l0aCB3aWxkY2FyZCBpbnB1dC4KICAgICAgICBpZiAoCiAgICAgICAgICAgICEkc291cmNlX3N0cmVhbQogICAgICAgICAgICAmJiAoICAgJGlucHV0X2ZpbGUgPX4gLyRmb3JiaWRkZW5fZmlsZV9leHRlbnNpb25zLwogICAgICAgICAgICAgICAgfHwgJGlucHV0X2ZpbGUgZXEgJ0RJQUdOT1NUSUNTJyApCiAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBXYXJuKCJza2lwcGluZyBmaWxlOiAkaW5wdXRfZmlsZTogd3JvbmcgZXh0ZW5zaW9uXG4iKTsKICAgICAgICAgICAgbmV4dDsKICAgICAgICB9CgogICAgICAgICMgY29weSBzb3VyY2UgdG8gYSBzdHJpbmcgYnVmZmVyLCBkZWNvZGluZyBmcm9tIHV0ZjggaWYgbmVjZXNzYXJ5CiAgICAgICAgbXkgKAogICAgICAgICAgICAkcmlucHV0X3N0cmluZywKICAgICAgICAgICAgJGlzX2VuY29kZWRfZGF0YSwKICAgICAgICAgICAgJGRlY29kZWRfaW5wdXRfYXMsCiAgICAgICAgICAgICRlbmNvZGluZ19sb2dfbWVzc2FnZSwKICAgICAgICAgICAgJGxlbmd0aF9mdW5jdGlvbiwKCiAgICAgICAgKSA9ICRzZWxmLT5nZXRfZGVjb2RlZF9zdHJpbmdfYnVmZmVyKCAkaW5wdXRfZmlsZSwgJGRpc3BsYXlfbmFtZSApOwoKICAgICAgICAjIFNraXAgdGhpcyBmaWxlIG9uIGFueSBlcnJvcgogICAgICAgIG5leHQgaWYgKCAhZGVmaW5lZCgkcmlucHV0X3N0cmluZykgKTsKCiAgICAgICAgIyBSZWdpc3RlciB0aGlzIGZpbGUgbmFtZSB3aXRoIHRoZSBEaWFnbm9zdGljcyBwYWNrYWdlLCBpZiBhbnkuCiAgICAgICAgJGRpYWdub3N0aWNzX29iamVjdC0+c2V0X2lucHV0X2ZpbGUoJGlucHV0X2ZpbGUpCiAgICAgICAgICBpZiAkZGlhZ25vc3RpY3Nfb2JqZWN0OwoKICAgICAgICAjIFRoZSAocG9zc2libHkgZGVjb2RlZCkgaW5wdXQgaXMgbm93IGluIHN0cmluZyByZWYgJHJpbnB1dF9zdHJpbmcuCiAgICAgICAgIyBOb3cgcHJlcGFyZSB0aGUgb3V0cHV0IHN0cmVhbSBhbmQgZXJyb3IgbG9nZ2VyLgoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIHByZXBhcmUgdGhlIG91dHB1dCBzdHJlYW0KICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBteSAkb3V0cHV0X2ZpbGU7CiAgICAgICAgbXkgJG91dHB1dF9uYW1lID0gRU1QVFlfU1RSSU5HOwogICAgICAgIG15ICRhY3R1YWxfb3V0cHV0X2V4dGVuc2lvbjsKCiAgICAgICAgaWYgKCAkck9wdHMtPnsnb3V0ZmlsZSd9ICkgewoKICAgICAgICAgICAgaWYgKCAkbnVtYmVyX29mX2ZpbGVzIDw9IDEgKSB7CgogICAgICAgICAgICAgICAgaWYgKCAkck9wdHMtPnsnc3RhbmRhcmQtb3V0cHV0J30gKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJHNhd19wYnAgPSAkc2VsZi0+W19zYXdfcGJwX107CiAgICAgICAgICAgICAgICAgICAgbXkgJG1zZyAgICAgPSAiWW91IG1heSBub3QgdXNlIC1vIGFuZCAtc3QgdG9nZXRoZXIiOwogICAgICAgICAgICAgICAgICAgICRtc2cgLj0gIiAoLXBicCBjb250YWlucyAtc3Q7IHNlZSBtYW51YWwpIiBpZiAoJHNhd19wYnApOwogICAgICAgICAgICAgICAgICAgIERpZSgiJG1zZ1xuIik7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCRkZXN0aW5hdGlvbl9zdHJlYW0pIHsKICAgICAgICAgICAgICAgICAgICBEaWUoCiJZb3UgbWF5IG5vdCBzcGVjaWZ5IGEgZGVzdGluYXRpb24gYXJyYXkgYW5kIC1vIHRvZ2V0aGVyXG4iCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQoICRyT3B0cy0+eydvdXRwdXQtcGF0aCd9ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgRGllKCJZb3UgbWF5IG5vdCBzcGVjaWZ5IC1vIGFuZCAtb3BhdGggdG9nZXRoZXJcbiIpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCggJHJPcHRzLT57J291dHB1dC1maWxlLWV4dGVuc2lvbid9ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgRGllKCJZb3UgbWF5IG5vdCBzcGVjaWZ5IC1vIGFuZCAtb2V4dCB0b2dldGhlclxuIik7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJG91dHB1dF9maWxlID0gJHJPcHRzLT57b3V0ZmlsZX07CiAgICAgICAgICAgICAgICAkb3V0cHV0X25hbWUgPSAkb3V0cHV0X2ZpbGU7CgogICAgICAgICAgICAgICAgIyBtYWtlIHN1cmUgdXNlciBnaXZlcyBhIGZpbGUgbmFtZSBhZnRlciAtbwogICAgICAgICAgICAgICAgaWYgKCAkb3V0cHV0X2ZpbGUgPX4gL14tLyApIHsKICAgICAgICAgICAgICAgICAgICBEaWUoIllvdSBtdXN0IHNwZWNpZnkgYSB2YWxpZCBmaWxlbmFtZSBhZnRlciAtb1xuIik7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBkbyBub3Qgb3ZlcndyaXRlIGlucHV0IGZpbGUgd2l0aCAtbwogICAgICAgICAgICAgICAgaWYgKCBAaW5wdXRfZmlsZV9zdGF0ICYmICggJG91dHB1dF9maWxlIGVxICRpbnB1dF9maWxlICkgKSB7CiAgICAgICAgICAgICAgICAgICAgRGllKCJVc2UgJ3Blcmx0aWR5IC1iICRpbnB1dF9maWxlJyB0byBtb2RpZnkgaW4tcGxhY2VcbiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgRGllKCJZb3UgbWF5IG5vdCB1c2UgLW8gd2l0aCBtb3JlIHRoYW4gb25lIGlucHV0IGZpbGVcbiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJHJPcHRzLT57J3N0YW5kYXJkLW91dHB1dCd9ICkgewogICAgICAgICAgICBpZiAoJGRlc3RpbmF0aW9uX3N0cmVhbSkgewogICAgICAgICAgICAgICAgbXkgJHNhd19wYnAgPSAkc2VsZi0+W19zYXdfcGJwX107CiAgICAgICAgICAgICAgICBteSAkbXNnID0KICAgICAgICAgICAgICAgICAgIllvdSBtYXkgbm90IHNwZWNpZnkgYSBkZXN0aW5hdGlvbiBhcnJheSBhbmQgLXN0IHRvZ2V0aGVyXG4iOwogICAgICAgICAgICAgICAgJG1zZyAuPSAiICgtcGJwIGNvbnRhaW5zIC1zdDsgc2VlIG1hbnVhbCkiIGlmICgkc2F3X3BicCk7CiAgICAgICAgICAgICAgICBEaWUoIiRtc2dcbiIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRvdXRwdXRfZmlsZSA9ICctJzsKICAgICAgICAgICAgJG91dHB1dF9uYW1lID0gIjxzdGRvdXQ+IjsKCiAgICAgICAgICAgIGlmICggJG51bWJlcl9vZl9maWxlcyA8PSAxICkgewogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgRGllKCJZb3UgbWF5IG5vdCB1c2UgLXN0IHdpdGggbW9yZSB0aGFuIG9uZSBpbnB1dCBmaWxlXG4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNpZiAoJGRlc3RpbmF0aW9uX3N0cmVhbSkgewoKICAgICAgICAgICAgJG91dHB1dF9maWxlID0gJGRlc3RpbmF0aW9uX3N0cmVhbTsKICAgICAgICAgICAgJG91dHB1dF9uYW1lID0gIjxkZXN0aW5hdGlvbl9zdHJlYW0+IjsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCRzb3VyY2Vfc3RyZWFtKSB7ICAgICMgc291cmNlIGJ1dCBubyBkZXN0aW5hdGlvbiBnb2VzIHRvIHN0ZG91dAogICAgICAgICAgICAkb3V0cHV0X2ZpbGUgPSAnLSc7CiAgICAgICAgICAgICRvdXRwdXRfbmFtZSA9ICI8c3Rkb3V0PiI7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJGlucHV0X2ZpbGUgZXEgJy0nICkgewogICAgICAgICAgICAkb3V0cHV0X2ZpbGUgPSAnLSc7CiAgICAgICAgICAgICRvdXRwdXRfbmFtZSA9ICI8c3Rkb3V0PiI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAoJGluX3BsYWNlX21vZGlmeSkgewogICAgICAgICAgICAgICAgJG91dHB1dF9uYW1lID0gJGRpc3BsYXlfbmFtZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRhY3R1YWxfb3V0cHV0X2V4dGVuc2lvbiA9ICRvdXRwdXRfZXh0ZW5zaW9uOwogICAgICAgICAgICAgICAgJG91dHB1dF9maWxlICAgICAgICAgICAgID0gJGZpbGVyb290IC4gJG91dHB1dF9leHRlbnNpb247CiAgICAgICAgICAgICAgICAkb3V0cHV0X25hbWUgICAgICAgICAgICAgPSAkb3V0cHV0X2ZpbGU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgcHJlcGFyZSBzdGFuZGFyZCBvdXRwdXQgaW4gY2FzZSBvZiBhIGR1bXAgdG8gc3Rkb3V0CiAgICAgICAgaWYgKCAkaXNfZW5jb2RlZF9kYXRhICYmICRzZWxmLT5bX2R1bXBfdG9fc3Rkb3V0X10gKSB7CiAgICAgICAgICAgIGJpbm1vZGUgKlNURE9VVCwgJzplbmNvZGluZyhVVEYtOCknOwogICAgICAgIH0KCiAgICAgICAgJHJzdGF0dXMtPnsnZmlsZV9jb3VudCd9ICs9IDE7CiAgICAgICAgJHJzdGF0dXMtPnsnb3V0cHV0X25hbWUnfSAgICAgPSAkb3V0cHV0X25hbWU7CiAgICAgICAgJHJzdGF0dXMtPnsnaXRlcmF0aW9uX2NvdW50J30gPSAwOwogICAgICAgICRyc3RhdHVzLT57J2NvbnZlcmdlZCd9ICAgICAgID0gMDsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgaW5pdGlhbGl6ZSB0aGUgZXJyb3IgbG9nZ2VyIGZvciB0aGlzIGZpbGUKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgbXkgJHdhcm5pbmdfZmlsZSA9ICRmaWxlcm9vdCAuICRkb3QgLiAiRVJSIjsKICAgICAgICBpZiAoJGVycm9yZmlsZV9zdHJlYW0pIHsgJHdhcm5pbmdfZmlsZSA9ICRlcnJvcmZpbGVfc3RyZWFtIH0KICAgICAgICBteSAkbG9nX2ZpbGUgPSAkZmlsZXJvb3QgLiAkZG90IC4gIkxPRyI7CiAgICAgICAgaWYgKCRsb2dmaWxlX3N0cmVhbSkgeyAkbG9nX2ZpbGUgPSAkbG9nZmlsZV9zdHJlYW0gfQoKICAgICAgICAjIFRoZSBsb2dnZXIgb2JqZWN0IGhhbmRsZXMgd2FybmluZyBtZXNzYWdlcywgbG9nZmlsZSBtZXNzYWdlcywKICAgICAgICAjIGFuZCBjYW4gc3VwcGx5IGJhc2ljIHJ1biBpbmZvcm1hdGlvbiB0byBsb3dlciBsZXZlbCByb3V0aW5lcy4KICAgICAgICBteSAkbG9nZ2VyX29iamVjdCA9IFBlcmw6OlRpZHk6OkxvZ2dlci0+bmV3KAogICAgICAgICAgICByT3B0cyAgICAgICAgICAgPT4gJHJPcHRzLAogICAgICAgICAgICBsb2dfZmlsZSAgICAgICAgPT4gJGxvZ19maWxlLAogICAgICAgICAgICB3YXJuaW5nX2ZpbGUgICAgPT4gJHdhcm5pbmdfZmlsZSwKICAgICAgICAgICAgZmhfc3RkZXJyICAgICAgID0+ICRmaF9zdGRlcnIsCiAgICAgICAgICAgIGRpc3BsYXlfbmFtZSAgICA9PiAkZGlzcGxheV9uYW1lLAogICAgICAgICAgICBpc19lbmNvZGVkX2RhdGEgPT4gJGlzX2VuY29kZWRfZGF0YSwKICAgICAgICApOwogICAgICAgICRsb2dnZXJfb2JqZWN0LT53cml0ZV9sb2dmaWxlX2VudHJ5KCRsb2dmaWxlX2hlYWRlcik7CiAgICAgICAgJGxvZ2dlcl9vYmplY3QtPndyaXRlX2xvZ2ZpbGVfZW50cnkoJGVuY29kaW5nX2xvZ19tZXNzYWdlKQogICAgICAgICAgaWYgJGVuY29kaW5nX2xvZ19tZXNzYWdlOwoKICAgICAgICAjIE5vdyB3ZSBjYW4gYWRkIGFueSBwZW5kaW5nIG1lc3NhZ2VzIHRvIHRoZSBsb2cKICAgICAgICBpZiAoICR7JHJwZW5kaW5nX2xvZ2ZpbGVfbWVzc2FnZX0gKSB7CiAgICAgICAgICAgICRsb2dnZXJfb2JqZWN0LT53cml0ZV9sb2dmaWxlX2VudHJ5KCAkeyRycGVuZGluZ19sb2dmaWxlX21lc3NhZ2V9ICk7CiAgICAgICAgfQogICAgICAgIGlmICggJHskcnBlbmRpbmdfY29tcGxhaW50fSApIHsKICAgICAgICAgICAgJGxvZ2dlcl9vYmplY3QtPmNvbXBsYWluKCAkeyRycGVuZGluZ19jb21wbGFpbnR9ICk7CiAgICAgICAgfQoKICAgICAgICAjIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBuZWVkZWQgYnkgbG93ZXIgbGV2ZWwgcm91dGluZXMKICAgICAgICAkc2VsZi0+W19hY3R1YWxfb3V0cHV0X2V4dGVuc2lvbl9dID0gJGFjdHVhbF9vdXRwdXRfZXh0ZW5zaW9uOwogICAgICAgICRzZWxmLT5bX2RlYnVnZmlsZV9zdHJlYW1fXSAgICAgICAgPSAkZGVidWdmaWxlX3N0cmVhbTsKICAgICAgICAkc2VsZi0+W19kZWNvZGVkX2lucHV0X2FzX10gICAgICAgID0gJGRlY29kZWRfaW5wdXRfYXM7CiAgICAgICAgJHNlbGYtPltfZGVzdGluYXRpb25fc3RyZWFtX10gICAgICA9ICRkZXN0aW5hdGlvbl9zdHJlYW07CiAgICAgICAgJHNlbGYtPltfZGlzcGxheV9uYW1lX10gICAgICAgICAgICA9ICRkaXNwbGF5X25hbWU7CiAgICAgICAgJHNlbGYtPltfZmlsZXJvb3RfXSAgICAgICAgICAgICAgICA9ICRmaWxlcm9vdDsKICAgICAgICAkc2VsZi0+W19pc19lbmNvZGVkX2RhdGFfXSAgICAgICAgID0gJGlzX2VuY29kZWRfZGF0YTsKICAgICAgICAkc2VsZi0+W19sZW5ndGhfZnVuY3Rpb25fXSAgICAgICAgID0gJGxlbmd0aF9mdW5jdGlvbjsKICAgICAgICAkc2VsZi0+W19sb2dnZXJfb2JqZWN0X10gICAgICAgICAgID0gJGxvZ2dlcl9vYmplY3Q7CiAgICAgICAgJHNlbGYtPltfb3V0cHV0X2ZpbGVfXSAgICAgICAgICAgICA9ICRvdXRwdXRfZmlsZTsKICAgICAgICAkc2VsZi0+W190ZWVmaWxlX3N0cmVhbV9dICAgICAgICAgID0gJHRlZWZpbGVfc3RyZWFtOwogICAgICAgICRzZWxmLT5bX2lucHV0X2NvcGllZF92ZXJiYXRpbV9dICAgPSAwOwogICAgICAgICRzZWxmLT5bX2lucHV0X291dHB1dF9kaWZmZXJlbmNlX10gPSAxOyAgICAjIyB1cGRhdGVkIGxhdGVyIGlmIC1iIHVzZWQKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBwcm9jZXNzIHRoaXMgYnVmZmVyCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgbXkgJHJvdXRwdXRfc3RyaW5nID0gJHNlbGYtPnByb2Nlc3NfZmlsdGVyX2xheWVyKCRyaW5wdXRfc3RyaW5nKTsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgc2VuZCB0aGUgdGlkaWVkIG91dHB1dCB0byBpdHMgZmluYWwgZGVzdGluYXRpb24KICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaWYgKCAkck9wdHMtPnsnZm9ybWF0J30gZXEgJ3RpZHknICYmIGRlZmluZWQoJHJvdXRwdXRfc3RyaW5nKSApIHsKCiAgICAgICAgICAgICRzZWxmLT53cml0ZV90aWR5X291dHB1dCgKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICByb3V0cHV0X3N0cmluZyAgID0+ICRyb3V0cHV0X3N0cmluZywKICAgICAgICAgICAgICAgICAgICByaW5wdXRfZmlsZV9zdGF0ID0+IFxAaW5wdXRfZmlsZV9zdGF0LAogICAgICAgICAgICAgICAgICAgIGluX3BsYWNlX21vZGlmeSAgPT4gJGluX3BsYWNlX21vZGlmeSwKICAgICAgICAgICAgICAgICAgICBpbnB1dF9maWxlICAgICAgID0+ICRpbnB1dF9maWxlLAogICAgICAgICAgICAgICAgICAgIGJhY2t1cF9leHRlbnNpb24gPT4gJGJhY2t1cF9leHRlbnNpb24sCiAgICAgICAgICAgICAgICAgICAgZGVsZXRlX2JhY2t1cCAgICA9PiAkZGVsZXRlX2JhY2t1cCwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRsb2dnZXJfb2JqZWN0LT5maW5pc2goKQogICAgICAgICAgaWYgJGxvZ2dlcl9vYmplY3Q7CiAgICB9ICMjIGVuZCBsb29wIG92ZXIgZmlsZXMKCiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBwcm9jZXNzX2FsbF9maWxlcwoKc3ViIHdyaXRlX3RpZHlfb3V0cHV0IHsKCiAgICBteSAoICRzZWxmLCAkcmNhbGxfaGFzaCApID0gQF87CgogICAgIyBXcml0ZSB0aWRpZWQgb3V0cHV0IGluICckcm91dHB1dF9zdHJpbmcnIHRvIGl0cyBmaW5hbCBkZXN0aW5hdGlvbgoKICAgIG15ICRyb3V0cHV0X3N0cmluZyAgID0gJHJjYWxsX2hhc2gtPntyb3V0cHV0X3N0cmluZ307CiAgICBteSAkcmlucHV0X2ZpbGVfc3RhdCA9ICRyY2FsbF9oYXNoLT57cmlucHV0X2ZpbGVfc3RhdH07CiAgICBteSAkaW5fcGxhY2VfbW9kaWZ5ICA9ICRyY2FsbF9oYXNoLT57aW5fcGxhY2VfbW9kaWZ5fTsKICAgIG15ICRpbnB1dF9maWxlICAgICAgID0gJHJjYWxsX2hhc2gtPntpbnB1dF9maWxlfTsKICAgIG15ICRiYWNrdXBfZXh0ZW5zaW9uID0gJHJjYWxsX2hhc2gtPntiYWNrdXBfZXh0ZW5zaW9ufTsKICAgIG15ICRkZWxldGVfYmFja3VwICAgID0gJHJjYWxsX2hhc2gtPntkZWxldGVfYmFja3VwfTsKCiAgICBteSAkck9wdHMgICAgICAgICAgID0gJHNlbGYtPltfck9wdHNfXTsKICAgIG15ICRpc19lbmNvZGVkX2RhdGEgPSAkc2VsZi0+W19pc19lbmNvZGVkX2RhdGFfXTsKICAgIG15ICRvdXRwdXRfZmlsZSAgICAgPSAkc2VsZi0+W19vdXRwdXRfZmlsZV9dOwoKICAgICMgVGhlcmUgYXJlIHRocmVlIG1haW4gb3V0cHV0IHBhdGhzOgoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFBBVEggMTogJG91dHB1dF9maWxlIGlzIG5vdCBkZWZpbmVkOiAtLWJhY2t1cCBhbmQgbW9kaWZ5IGluLXBsYWNlIG9wdGlvbgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGlmICgkaW5fcGxhY2VfbW9kaWZ5KSB7CgogICAgICAgICMgRm9yIC1iIG9wdGlvbiwgbGVhdmUgdGhlIGZpbGUgdW5jaGFuZ2VkIGlmIGEgc2V2ZXJlIGVycm9yIGNhdXNlZAogICAgICAgICMgZm9ybWF0dGluZyB0byBiZSBza2lwcGVkLiBPdGhlcndpc2Ugd2Ugd2lsbCBvdmVyd3JpdGUgYW55IGJhY2t1cC4KICAgICAgICBpZiAoICEkc2VsZi0+W19pbnB1dF9jb3BpZWRfdmVyYmF0aW1fXSApIHsKCiAgICAgICAgICAgIG15ICRiYWNrdXBfbWV0aG9kID0gJHJPcHRzLT57J2JhY2t1cC1tZXRob2QnfTsKCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgUEFUSCAxYTogLWJtPSdjb3B5JzogdXNlcyBuZXdlciB2ZXJzaW9uIGluIHdoaWNoIG9yaWdpbmFsIGlzCiAgICAgICAgICAgICMgY29waWVkIHRvIHRoZSBiYWNrdXAgYW5kIHJld3JpdHRlbjsgc2VlIGdpdCAjMTAzLgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICBpZiAoIGRlZmluZWQoJGJhY2t1cF9tZXRob2QpICYmICRiYWNrdXBfbWV0aG9kIGVxICdjb3B5JyApIHsKICAgICAgICAgICAgICAgICRzZWxmLT5iYWNrdXBfbWV0aG9kX2NvcHkoCiAgICAgICAgICAgICAgICAgICAgJGlucHV0X2ZpbGUsICAgICAgICRyb3V0cHV0X3N0cmluZywKICAgICAgICAgICAgICAgICAgICAkYmFja3VwX2V4dGVuc2lvbiwgJGRlbGV0ZV9iYWNrdXAKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgUEFUSCAxYjogLWJtPSdtb3ZlJzogdXNlcyBvbGRlciB2ZXJzaW9uLCB3aGVyZSBvcmlnaW5hbCBpcwogICAgICAgICAgICAjIG1vdmVkIHRvIHRoZSBiYWNrdXAgYW5kIGZvcm1hdHRlZCBvdXRwdXQgZ29lcyB0byBhIG5ldyBmaWxlLgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRzZWxmLT5iYWNrdXBfbWV0aG9kX21vdmUoCiAgICAgICAgICAgICAgICAgICAgJGlucHV0X2ZpbGUsICAgICAgICRyb3V0cHV0X3N0cmluZywKICAgICAgICAgICAgICAgICAgICAkYmFja3VwX2V4dGVuc2lvbiwgJGRlbGV0ZV9iYWNrdXAKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFBBVEggMjogJG91dHB1dF9maWxlIGlzIGEgcmVmZXJlbmNlICg9ZGVzdGluYXRpb25fc3RyZWFtKTogc2VuZCBvdXRwdXQgdG8KICAgICMgYSBkZXN0aW5hdGlvbiBzdHJlYW0gcmVmIHJlY2VpdmVkIGZyb20gYW4gZXh0ZXJuYWwgcGVybCBwcm9ncmFtLiBXZSB1c2UKICAgICMgYSBzdWIgdG8gZG8gdGhpcyBiZWNhdXNlIHRoZSBlbmNvZGluZyBydWxlcyBhcmUgYSBiaXQgdHJpY2t5LgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBlbHNpZiAoIHJlZigkb3V0cHV0X2ZpbGUpICkgewogICAgICAgICRzZWxmLT5jb3B5X2J1ZmZlcl90b19leHRlcm5hbF9yZWYoICRyb3V0cHV0X3N0cmluZywgJG91dHB1dF9maWxlICk7CiAgICB9CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFBBVEggMzogJG91dHB1dF9maWxlIGlzIG5hbWVkIGZpbGUgb3IgJy0nOyBzZW5kIG91dHB1dCB0byB0aGUgZmlsZSBzeXN0ZW0KICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZWxzZSB7CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgUEFUSCAzYTogb3V0cHV0IHRvIFNURE9VVAogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGlmICggJG91dHB1dF9maWxlIGVxICctJyApIHsKICAgICAgICAgICAgbXkgJGZoID0gKlNURE9VVDsKICAgICAgICAgICAgaWYgKCRpc19lbmNvZGVkX2RhdGEpIHsgYmlubW9kZSAkZmgsICI6cmF3OmVuY29kaW5nKFVURi04KSIgfQogICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgeyBiaW5tb2RlICRmaCB9CiAgICAgICAgICAgICRmaC0+cHJpbnQoICR7JHJvdXRwdXRfc3RyaW5nfSApOwogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBQQVRIIDNiOiBvdXRwdXQgdG8gYSBuYW1lZCBmaWxlCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmICggb3BlbiggbXkgJGZoLCAnPicsICRvdXRwdXRfZmlsZSApICkgewogICAgICAgICAgICAgICAgaWYgKCRpc19lbmNvZGVkX2RhdGEpIHsgYmlubW9kZSAkZmgsICI6cmF3OmVuY29kaW5nKFVURi04KSIgfQogICAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgIHsgYmlubW9kZSAkZmggfQogICAgICAgICAgICAgICAgJGZoLT5wcmludCggJHskcm91dHB1dF9zdHJpbmd9ICk7CiAgICAgICAgICAgICAgICAkZmgtPmNsb3NlKCkgb3IgRGllKCJDYW5ub3QgY2xvc2UgJyRvdXRwdXRfZmlsZSc6ICRPU19FUlJPUlxuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBEaWUoIkNhbm5vdCBvcGVuICRvdXRwdXRfZmlsZSB0byB3cml0ZTogJE9TX0VSUk9SXG4iKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzZXQgb3V0cHV0IGZpbGUgb3duZXJzaGlwIGFuZCBwZXJtaXNzaW9ucyBpZiBhcHByb3ByaWF0ZQogICAgICAgICAgICBpZiAoICRvdXRwdXRfZmlsZSAmJiAtZiAkb3V0cHV0X2ZpbGUgJiYgIS1sICRvdXRwdXRfZmlsZSApIHsKICAgICAgICAgICAgICAgIGlmICggQHskcmlucHV0X2ZpbGVfc3RhdH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPnNldF9vdXRwdXRfZmlsZV9wZXJtaXNzaW9ucyggJG91dHB1dF9maWxlLAogICAgICAgICAgICAgICAgICAgICAgICBcQHskcmlucHV0X2ZpbGVfc3RhdH0sICRpbl9wbGFjZV9tb2RpZnkgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBTYXZlIGRpYWdub3N0aWMgaW5mbwogICAgICAgIGlmICgkaXNfZW5jb2RlZF9kYXRhKSB7CiAgICAgICAgICAgICRyc3RhdHVzLT57J291dHB1dF9lbmNvZGVkX2FzJ30gPSAnVVRGLTgnOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm47Cgp9ICMjIGVuZCBzdWIgd3JpdGVfdGlkeV9vdXRwdXQKCnN1YiBwcm9jZXNzX2ZpbHRlcl9sYXllciB7CgogICAgbXkgKCAkc2VsZiwgJHJpbnB1dF9zdHJpbmcgKSA9IEBfOwoKICAgICMgVGhpcyBpcyB0aGUgZmlsdGVyIGxheWVyIG9mIHByb2Nlc3NpbmcuCiAgICAjIERvIGFsbCByZXF1ZXN0ZWQgZm9ybWF0dGluZyBvbiB0aGUgc3RyaW5nIHJlZiAnJHJpbnB1dF9zdHJpbmcnLCBpbmNsdWRpbmcKICAgICMgYW55IHByZS0gYW5kIHBvc3QtcHJvY2Vzc2luZyB3aXRoIGZpbHRlcnMuCiAgICAjIFJldHVybnM6CiAgICAjICAgJHJvdXRwdXRfc3RyaW5nID0gcmVmIHRvIHRpZGllZCBvdXRwdXQgaWYgaW4gJ3RpZHknIG1vZGUKICAgICMgICAobm90aGluZykgaWYgbm90IGluICd0aWR5JyBtb2RlIFt0aGVzZSBtb2RlcyBoYW5kbGUgb3V0cHV0IHNlcGFyYXRlbHldCgogICAgIyBUb3RhbCBmb3JtYXR0aW5nIGlzIGRvbmUgd2l0aCB0aGVzZSBsYXllcnMgb2Ygc3Vicm91dGluZXM6CiAgICAjICAgcGVybHRpZHkgICAgICAgICAgICAgICAgLSBtYWluIHJvdXRpbmU7IGNoZWNrcyBydW4gcGFyYW1ldGVycwogICAgIyAgIHByb2Nlc3NfYWxsX2ZpbGVzICAgICAgIC0gbWFpbiBsb29wIHRvIHByb2Nlc3MgYWxsIGZpbGVzOwogICAgIyAgKnByb2Nlc3NfZmlsdGVyX2xheWVyICAgIC0gZG8gYW55IHByZSBhbmQgcG9zdCBwcm9jZXNzaW5nOyAqVEhJUyBMQVlFUgogICAgIyAgIHByb2Nlc3NfaXRlcmF0aW9uX2xheWVyIC0gaGFuZGxlIGFueSBpdGVyYXRpb25zIG9uIGZvcm1hdHRpbmcKICAgICMgICBwcm9jZXNzX3NpbmdsZV9jYXNlICAgICAtIHNvbHZlcyBvbmUgZm9ybWF0dGluZyBwcm9ibGVtCgogICAgIyBEYXRhIEZsb3cgaW4gdGhpcyBsYXllcjoKICAgICMgICRyaW5wdXRfc3RyaW5nCiAgICAjICAgLT4gb3B0aW9uYWwgcHJlZmlsdGVyIG9wZXJhdGlvbnMKICAgICMgICAgIC0+IFsgZm9ybWF0dGluZyBieSBzdWIgcHJvY2Vzc19pdGVyYXRpb25fbGF5ZXIgXQogICAgIyAgICAgICAtPiByZXR1cm4gaWYgbm90IGluICd0aWR5JyBtb2RlCiAgICAjICAgICAgICAgLT4gb3B0aW9uYWwgcG9zdGZpbHRlciBvcGVyYXRpb25zCiAgICAjICAgICAgICAgICAtPiAkcm91dHB1dF9zdHJpbmcKCiAgICAjIFdoYXQgaXMgZG9uZSBiYXNlZCBvbiBmb3JtYXQgdHlwZToKICAgICMgIHV0ZjggZGVjb2RpbmcgaXMgZG9uZSBmb3IgYWxsIGZvcm1hdCB0eXBlcwogICAgIyAgcHJlZmlsdGVyaW5nIGlzIGFwcGxpZWQgdG8gYWxsIGZvcm1hdCB0eXBlcwogICAgIyAgIC0gYmVjYXVzZSBpdCBtYXkgYmUgbmVlZGVkIHRvIGdldCB0aHJvdWdoIHRoZSB0b2tlbml6ZXIKICAgICMgIHBvc3RmaWx0ZXJpbmcgaXMgb25seSBkb25lIGZvciBmb3JtYXQ9J3RpZHknCiAgICAjICAgLSBub3QgYXBwcm9wcmlhdGUgZm9yIGh0bWwgdGV4dCwgd2hpY2ggaGFzIGFscmVhZHkgYmVlbiBvdXRwdXQKICAgICMgIGVuY29kaW5nIG9mIGRlY29kZWQgb3V0cHV0IGlzIG9ubHkgZG9uZSBmb3IgZm9ybWF0PSd0aWR5JwogICAgIyAgIC0gYmVjYXVzZSBodG1sIGRvZXMgaXRzIG93biBlbmNvZGluZzsgdXNlciBmb3JtYXR0ZXIgZG9lcyB3aGF0IGl0IHdhbnRzCgogICAgIyBCZSBzdXJlIHRoZSBzdHJpbmcgd2UgcmVjZWl2ZWQgaXMgZGVmaW5lZAogICAgaWYgKCAhZGVmaW5lZCgkcmlucHV0X3N0cmluZykgKSB7CiAgICAgICAgRmF1bHQoImJhZCBjYWxsOiB0aGUgc291cmNlIHN0cmluZyByZWYgXCRyaW5wdXRfc3RyaW5nIGlzIHVuZGVmaW5lZFxuIik7CiAgICB9CiAgICBpZiAoIHJlZigkcmlucHV0X3N0cmluZykgbmUgJ1NDQUxBUicgKSB7CiAgICAgICAgRmF1bHQoImJhZCBjYWxsOiB0aGUgc291cmNlIHN0cmluZyByZWYgaXMgbm90IFNDQUxBUlxuIik7CiAgICB9CgogICAgbXkgJHJPcHRzICAgICAgICAgPSAkc2VsZi0+W19yT3B0c19dOwogICAgbXkgJGxvZ2dlcl9vYmplY3QgPSAkc2VsZi0+W19sb2dnZXJfb2JqZWN0X107CgogICAgIyB2YXJzIGZvciAtLWxpbmUtcmFuZ2UtdGlkeSBmaWx0ZXIsIGlmIG5lZWRlZAogICAgbXkgQGlucHV0X2xpbmVzX3ByZTsKICAgIG15IEBpbnB1dF9saW5lc19wb3N0OwoKICAgICMgdmFycyBmb3IgY2hlY2tpbmcgYXNzZXJ0aW9ucywgaWYgbmVlZGVkCiAgICBteSAkZGlnZXN0X2lucHV0OwogICAgbXkgJHNhdmVkX2lucHV0X2J1ZjsKCiAgICAjIHZhciBmb3IgY2hlY2tpbmcgLS1ub2FkZC10ZXJtaW5hbC1uZXdsaW5lCiAgICBteSAkY2hvbXBfdGVybWluYWxfbmV3bGluZTsKCiAgICAjIFNldHVwIHBvc3QtZmlsdGVyIHZhcnM7IHRoZXNlIGFwcGx5IHRvICd0aWR5JyBtb2RlIG9ubHkKICAgIGlmICggJHJPcHRzLT57J2Zvcm1hdCd9IGVxICd0aWR5JyApIHsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgZm9yIC0tbGluZS1yYW5nZS10aWR5LCBjbGlwICckcmlucHV0X3N0cmluZycgdG8gYSBsaW1pdGVkIGxpbmUgcmFuZ2UKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgbXkgJGxpbmVfdGlkeV9iZWdpbiA9ICRzZWxmLT5bX2xpbmVfdGlkeV9iZWdpbl9dOwogICAgICAgIGlmICgkbGluZV90aWR5X2JlZ2luKSB7CgogICAgICAgICAgICBteSBAaW5wdXRfbGluZXMgPSBzcGxpdCAvXi8sICR7JHJpbnB1dF9zdHJpbmd9OwoKICAgICAgICAgICAgbXkgJG51bSA9IEBpbnB1dF9saW5lczsKICAgICAgICAgICAgaWYgKCAkbGluZV90aWR5X2JlZ2luID4gJG51bSApIHsKICAgICAgICAgICAgICAgIERpZSg8PEVPTSk7CiMtLWxpbmUtcmFuZ2UtdGlkeT1uMTpuMiBoYXMgbjE9JGxpbmVfdGlkeV9iZWdpbiB3aGljaCBleGNlZWRzIG1heCBsaW5lIG51bWJlciBvZiAkbnVtCkVPTQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgbXkgJGxpbmVfdGlkeV9lbmQgPSAkc2VsZi0+W19saW5lX3RpZHlfZW5kX107CiAgICAgICAgICAgICAgICBpZiAoICFkZWZpbmVkKCRsaW5lX3RpZHlfZW5kKSB8fCAkbGluZV90aWR5X2VuZCA+ICRudW0gKSB7CiAgICAgICAgICAgICAgICAgICAgJGxpbmVfdGlkeV9lbmQgPSAkbnVtOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbXkgJGlucHV0X3N0cmluZyA9IGpvaW4gRU1QVFlfU1RSSU5HLAogICAgICAgICAgICAgICAgICBAaW5wdXRfbGluZXNbICRsaW5lX3RpZHlfYmVnaW4gLSAxIC4uICRsaW5lX3RpZHlfZW5kIC0gMSBdOwogICAgICAgICAgICAgICAgJHJpbnB1dF9zdHJpbmcgPSBcJGlucHV0X3N0cmluZzsKCiAgICAgICAgICAgICAgICBAaW5wdXRfbGluZXNfcHJlICA9IEBpbnB1dF9saW5lc1sgMCAuLiAkbGluZV90aWR5X2JlZ2luIC0gMiBdOwogICAgICAgICAgICAgICAgQGlucHV0X2xpbmVzX3Bvc3QgPSBAaW5wdXRfbGluZXNbICRsaW5lX3RpZHlfZW5kIC4uICRudW0gLSAxIF07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIGV2YWx1YXRlIE1ENSBzdW0gb2YgaW5wdXQgZmlsZSwgaWYgbmVlZGVkCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGlmICggICAkck9wdHMtPnsnYXNzZXJ0LXRpZHknfQogICAgICAgICAgICB8fCAkck9wdHMtPnsnYXNzZXJ0LXVudGlkeSd9CiAgICAgICAgICAgIHx8ICRyT3B0cy0+eydiYWNrdXAtYW5kLW1vZGlmeS1pbi1wbGFjZSd9ICkKICAgICAgICB7CiAgICAgICAgICAgICRkaWdlc3RfaW5wdXQgICAgPSAkbWQ1X2hleC0+KCAkeyRyaW5wdXRfc3RyaW5nfSApOwogICAgICAgICAgICAkc2F2ZWRfaW5wdXRfYnVmID0gJHskcmlucHV0X3N0cmluZ307CiAgICAgICAgfQoKICAgICAgICAjIFdoZW4gLW5vYWRkLXRlcm1pbmFsLW5ld2xpbmUgaXMgc2V0LCBhbmQgdGhlIGlucHV0IGRvZXMgbm90CiAgICAgICAgIyBoYXZlIGEgbmV3bGluZSwgdGhlbiB3ZSByZW1vdmUgdGhlIGZpbmFsIG5ld2xpbmUgb2YgdGhlIG91dHB1dAogICAgICAgICRjaG9tcF90ZXJtaW5hbF9uZXdsaW5lID0gISRyT3B0cy0+eydhZGQtdGVybWluYWwtbmV3bGluZSd9CiAgICAgICAgICAmJiBzdWJzdHIoICR7JHJpbnB1dF9zdHJpbmd9LCAtMSwgMSApICF+IC9cbi87CgogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBBcHBseSBhbnkgcHJlZmlsdGVyLiBUaGUgcHJlZmlsdGVyIGlzIGEgY29kZSByZWZlcmVuY2UgdGhhdCB3aWxsIGJlCiAgICAjIGFwcGxpZWQgdG8gdGhlIHNvdXJjZSBiZWZvcmUgdG9rZW5pemluZy4gIE5vdGUgdGhhdCB3ZSBhcmUgZG9pbmcgdGhpcwogICAgIyBmb3IgYWxsIGZvcm1hdCB0eXBlcyAoJ3RpZHknLCAnaHRtbCcsICd1c2VyJykgYmVjYXVzZSBpdCBtYXkgYmUgbmVlZGVkCiAgICAjIHRvIGF2b2lkIHRva2VuaXphdGlvbiBlcnJvcnMuCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIG15ICRwcmVmaWx0ZXIgPSAkc2VsZi0+W19wcmVmaWx0ZXJfXTsKICAgIGlmICgkcHJlZmlsdGVyKSB7CiAgICAgICAgbXkgJGlucHV0X3N0cmluZyA9ICRwcmVmaWx0ZXItPiggJHskcmlucHV0X3N0cmluZ30gKTsKICAgICAgICAkcmlucHV0X3N0cmluZyA9IFwkaW5wdXRfc3RyaW5nOwogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIEZvcm1hdCBjb250ZW50cyBvZiBzdHJpbmcgJyRyaW5wdXRfc3RyaW5nJwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIG15ICRyb3V0cHV0X3N0cmluZyA9ICRzZWxmLT5wcm9jZXNzX2l0ZXJhdGlvbl9sYXllcigkcmlucHV0X3N0cmluZyk7CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgQWxsIGRvbmUgaWYgbm90IGluICd0aWR5JyBtb2RlCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgaWYgKCAkck9wdHMtPnsnZm9ybWF0J30gbmUgJ3RpZHknICkgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIGFwcGx5IGFueSBwb3N0ZmlsdGVyCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBteSAkcG9zdGZpbHRlciA9ICRzZWxmLT5bX3Bvc3RmaWx0ZXJfXTsKICAgIGlmICgkcG9zdGZpbHRlcikgewogICAgICAgIG15ICRvdXRwdXRfc3RyaW5nID0gJHBvc3RmaWx0ZXItPiggJHskcm91dHB1dF9zdHJpbmd9ICk7CiAgICAgICAgJHJvdXRwdXRfc3RyaW5nID0gXCRvdXRwdXRfc3RyaW5nOwogICAgfQoKICAgIGlmICggZGVmaW5lZCgkZGlnZXN0X2lucHV0KSApIHsKICAgICAgICBteSAkZGlnZXN0X291dHB1dCA9ICRtZDVfaGV4LT4oICR7JHJvdXRwdXRfc3RyaW5nfSApOwogICAgICAgICRzZWxmLT5bX2lucHV0X291dHB1dF9kaWZmZXJlbmNlX10gPSAkZGlnZXN0X291dHB1dCBuZSAkZGlnZXN0X2lucHV0OwogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBjaGVjayBmb3IgY2hhbmdlcyBpZiByZXF1ZXN0ZWQgYnkgJ2Fzc2VydC0uLi4nIGZsYWdzCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGlmICggJHJPcHRzLT57J2Fzc2VydC10aWR5J30gKSB7CiAgICAgICAgaWYgKCAkc2VsZi0+W19pbnB1dF9vdXRwdXRfZGlmZmVyZW5jZV9dICkgewogICAgICAgICAgICBteSAkZGlmZl9tc2cgPQogICAgICAgICAgICAgIGNvbXBhcmVfc3RyaW5nX2J1ZmZlcnMoIFwkc2F2ZWRfaW5wdXRfYnVmLCAkcm91dHB1dF9zdHJpbmcgKTsKICAgICAgICAgICAgJGxvZ2dlcl9vYmplY3QtPndhcm5pbmcoPDxFT00pOwphc3NlcnRpb24gZmFpbHVyZTogJy0tYXNzZXJ0LXRpZHknIGlzIHNldCBidXQgb3V0cHV0IGRpZmZlcnMgZnJvbSBpbnB1dApFT00KICAgICAgICAgICAgJGxvZ2dlcl9vYmplY3QtPmludGVycnVwdF9sb2dmaWxlKCk7CiAgICAgICAgICAgICRsb2dnZXJfb2JqZWN0LT53YXJuaW5nKCAkZGlmZl9tc2cgLiAiXG4iICk7CiAgICAgICAgICAgICRsb2dnZXJfb2JqZWN0LT5yZXN1bWVfbG9nZmlsZSgpOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICRyT3B0cy0+eydhc3NlcnQtdW50aWR5J30gKSB7CiAgICAgICAgaWYgKCAhJHNlbGYtPltfaW5wdXRfb3V0cHV0X2RpZmZlcmVuY2VfXSApIHsKICAgICAgICAgICAgJGxvZ2dlcl9vYmplY3QtPndhcm5pbmcoCiJhc3NlcnRpb24gZmFpbHVyZTogJy0tYXNzZXJ0LXVudGlkeScgaXMgc2V0IGJ1dCBvdXRwdXQgZXF1YWxzIGlucHV0XG4iCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIGRvIC0tbGluZS1yYW5nZS10aWR5IGxpbmUgcmVjb21iaW5hdGlvbgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGlmICggQGlucHV0X2xpbmVzX3ByZSB8fCBAaW5wdXRfbGluZXNfcG9zdCApIHsKICAgICAgICBteSAkc3RyX3ByZSAgICAgICA9IGpvaW4gRU1QVFlfU1RSSU5HLCBAaW5wdXRfbGluZXNfcHJlOwogICAgICAgIG15ICRzdHJfcG9zdCAgICAgID0gam9pbiBFTVBUWV9TVFJJTkcsIEBpbnB1dF9saW5lc19wb3N0OwogICAgICAgIG15ICRvdXRwdXRfc3RyaW5nID0gJHN0cl9wcmUgLiAkeyRyb3V0cHV0X3N0cmluZ30gLiAkc3RyX3Bvc3Q7CiAgICAgICAgJHJvdXRwdXRfc3RyaW5nID0gXCRvdXRwdXRfc3RyaW5nOwogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBoYW5kbGUgYSAnLS1ub2FkZC10ZXJtaW5hbC1uZXdsaW5lJyBmbGFnCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGlmICgkY2hvbXBfdGVybWluYWxfbmV3bGluZSkgewogICAgICAgIGNob21wICR7JHJvdXRwdXRfc3RyaW5nfTsKICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBoYW5kbGUgLS1wcmVzZXJ2ZS1saW5lLWVuZGluZ3Mgb3IgLW91dHB1dC1saW5lLWVuZGluZ3MgZmxhZ3MKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFRoZSBuYXRpdmUgbGluZSBzZXBhcmF0b3IgaGFzIGJlZW4gdXNlZCBpbiBhbGwgaW50ZXJtZWRpYXRlCiAgICAjIGl0ZXJhdGlvbnMgYW5kIGZpbHRlciBvcGVyYXRpb25zIHVudGlsIGhlcmUgc28gdGhhdCBzdHJpbmcKICAgICMgb3BlcmF0aW9ucyB3b3JrIG9rLgogICAgaWYgKCAkc2VsZi0+W19saW5lX3NlcGFyYXRvcl9dIG5lICJcbiIgKSB7CiAgICAgICAgbXkgJGxpbmVfc2VwYXJhdG9yID0gJHNlbGYtPltfbGluZV9zZXBhcmF0b3JfXTsKICAgICAgICBteSBAb3V0cHV0X2xpbmVzICAgPSBzcGxpdCAvXi8sICR7JHJvdXRwdXRfc3RyaW5nfTsKICAgICAgICBmb3JlYWNoIG15ICRsaW5lIChAb3V0cHV0X2xpbmVzKSB7CgogICAgICAgICAgICAjIG11c3QgY2hlY2sgY2hvbXAgYmVjYXVzZSBsYXN0IGxpbmUgbWlnaHQgbm90IGhhdmUgYSBuZXdsaW5lCiAgICAgICAgICAgICMgaWYgLS1ub2FkZC10ZXJtaW5hbC1uZXdsaW5lIGlzIGFsc28gc2V0IChjMjgzKQogICAgICAgICAgICBpZiAoIGNob21wICRsaW5lICkgewogICAgICAgICAgICAgICAgJGxpbmUgLj0gJGxpbmVfc2VwYXJhdG9yOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIG15ICRvdXRwdXRfc3RyaW5nID0gam9pbiBFTVBUWV9TVFJJTkcsIEBvdXRwdXRfbGluZXM7CiAgICAgICAgJHJvdXRwdXRfc3RyaW5nID0gXCRvdXRwdXRfc3RyaW5nOwogICAgfQoKICAgIHJldHVybiAkcm91dHB1dF9zdHJpbmc7Cn0gIyMgZW5kIHN1YiBwcm9jZXNzX2ZpbHRlcl9sYXllcgoKIyBGb3Igc2FmZXR5LCBzZXQgYW4gdXBwZXIgYm91bmQgb24gbnVtYmVyIG9mIGl0ZXJhdGlvbnMgYmVmb3JlIHN0b3BwaW5nLgojIFRoZSBhdmVyYWdlIG51bWJlciBvZiBpdGVyYXRpb25zIGlzIDIuIE5vIGtub3duIGNhc2VzIGV4Y2VlZCA0Lgp1c2UgY29uc3RhbnQgSVRFUkFUSU9OX0xJTUlUID0+IDY7CgpzdWIgcHJvY2Vzc19pdGVyYXRpb25fbGF5ZXIgewoKICAgIG15ICggJHNlbGYsICRyaW5wdXRfc3RyaW5nICkgPSBAXzsKCiAgICAjIFRoaXMgaXMgdGhlIGl0ZXJhdGlvbiBsYXllciBvZiBwcm9jZXNzaW5nLgogICAgIyBEbyBhbGwgZm9ybWF0dGluZywgaXRlcmF0aW5nIGlmIHJlcXVlc3RlZCwgb24gdGhlIHNvdXJjZSAkcmlucHV0X3N0cmluZwogICAgIyBPdXRwdXQgZGVwZW5kcyBvbiBmb3JtYXQgdHlwZToKICAgICMgICBGb3IgJ3RpZHknIGZvcm1hdHRpbmcsIG91dHB1dCBnb2VzIHRvIHNpbmsgb2JqZWN0CiAgICAjICAgRm9yICdodG1sJyBmb3JtYXR0aW5nLCBvdXRwdXQgZ29lcyB0byB0aGUgdWx0aW1hdGUgZGVzdGluYXRpb24KICAgICMgICBGb3IgJ3VzZXInIGZvcm1hdHRpbmcsIHVzZXIgZm9ybWF0dGVyIGhhbmRsZXMgb3V0cHV0CgogICAgIyBUb3RhbCBmb3JtYXR0aW5nIGlzIGRvbmUgd2l0aCB0aGVzZSBsYXllcnMgb2Ygc3Vicm91dGluZXM6CiAgICAjICAgcGVybHRpZHkgICAgICAgICAgICAgICAgLSBtYWluIHJvdXRpbmU7IGNoZWNrcyBydW4gcGFyYW1ldGVycwogICAgIyAgIHByb2Nlc3NfYWxsX2ZpbGVzICAgICAgIC0gbWFpbiBsb29wIHRvIHByb2Nlc3MgYWxsIGZpbGVzOwogICAgIyAgIHByb2Nlc3NfZmlsdGVyX2xheWVyICAgIC0gZG8gYW55IHByZSBhbmQgcG9zdCBwcm9jZXNzaW5nCiAgICAjICAqcHJvY2Vzc19pdGVyYXRpb25fbGF5ZXIgLSBkbyBhbnkgaXRlcmF0aW9ucyBvbiBmb3JtYXR0aW5nOyAqVEhJUyBMQVlFUgogICAgIyAgIHByb2Nlc3Nfc2luZ2xlX2Nhc2UgICAgIC0gc29sdmVzIG9uZSBmb3JtYXR0aW5nIHByb2JsZW0KCiAgICAjIERhdGEgRmxvdyBpbiB0aGlzIGxheWVyOgogICAgIyAgICAgICRyaW5wdXRfc3RyaW5nIC0+IFsgbG9vcCBvdmVyIGl0ZXJhdGlvbnMgXSAtPiAkcm91dHB1dF9zdHJpbmcKCiAgICBteSAkZGlhZ25vc3RpY3Nfb2JqZWN0ID0gJHNlbGYtPltfZGlhZ25vc3RpY3Nfb2JqZWN0X107CiAgICBteSAkZGlzcGxheV9uYW1lICAgICAgID0gJHNlbGYtPltfZGlzcGxheV9uYW1lX107CiAgICBteSAkZmlsZXJvb3QgICAgICAgICAgID0gJHNlbGYtPltfZmlsZXJvb3RfXTsKICAgIG15ICRpc19lbmNvZGVkX2RhdGEgICAgPSAkc2VsZi0+W19pc19lbmNvZGVkX2RhdGFfXTsKICAgIG15ICRsZW5ndGhfZnVuY3Rpb24gICAgPSAkc2VsZi0+W19sZW5ndGhfZnVuY3Rpb25fXTsKICAgIG15ICRsb2dnZXJfb2JqZWN0ICAgICAgPSAkc2VsZi0+W19sb2dnZXJfb2JqZWN0X107CiAgICBteSAkck9wdHMgICAgICAgICAgICAgID0gJHNlbGYtPltfck9wdHNfXTsKICAgIG15ICR1c2VyX2Zvcm1hdHRlciAgICAgPSAkc2VsZi0+W191c2VyX2Zvcm1hdHRlcl9dOwoKICAgICMgbWFrZSBhIGRlYnVnZ2VyIG9iamVjdCBpZiByZXF1ZXN0ZWQKICAgIG15ICRkZWJ1Z2dlcl9vYmplY3Q7CiAgICBpZiAoICRyT3B0cy0+e0RFQlVHfSApIHsKICAgICAgICBteSAkZGVidWdfZmlsZSA9ICRzZWxmLT5bX2RlYnVnZmlsZV9zdHJlYW1fXQogICAgICAgICAgfHwgJGZpbGVyb290IC4gJHNlbGYtPm1ha2VfZmlsZV9leHRlbnNpb24oJ0RFQlVHJyk7CiAgICAgICAgJGRlYnVnZ2VyX29iamVjdCA9CiAgICAgICAgICBQZXJsOjpUaWR5OjpEZWJ1Z2dlci0+bmV3KCAkZGVidWdfZmlsZSwgJGlzX2VuY29kZWRfZGF0YSApOwogICAgfQoKICAgICMgbWFrZSBhIHRlZSBmaWxlIGhhbmRsZSBpZiByZXF1ZXN0ZWQKICAgIG15ICRmaF90ZWU7CiAgICBteSAkdGVlX2ZpbGU7CiAgICBpZiAoICAgJHJPcHRzLT57J3RlZS1wb2QnfQogICAgICAgIHx8ICRyT3B0cy0+eyd0ZWUtYmxvY2stY29tbWVudHMnfQogICAgICAgIHx8ICRyT3B0cy0+eyd0ZWUtc2lkZS1jb21tZW50cyd9ICkKICAgIHsKICAgICAgICAkdGVlX2ZpbGUgPSAkc2VsZi0+W190ZWVmaWxlX3N0cmVhbV9dCiAgICAgICAgICB8fCAkZmlsZXJvb3QgLiAkc2VsZi0+bWFrZV9maWxlX2V4dGVuc2lvbignVEVFJyk7CiAgICAgICAgJGZoX3RlZSA9IFBlcmw6OlRpZHk6OnN0cmVhbWhhbmRsZSggJHRlZV9maWxlLCAndycsICRpc19lbmNvZGVkX2RhdGEgKTsKICAgICAgICBpZiAoICEkZmhfdGVlICkgewogICAgICAgICAgICBXYXJuKCJjb3VsZG4ndCBvcGVuIFRFRSBmaWxlICR0ZWVfZmlsZTogJE9TX0VSUk9SXG4iKTsKICAgICAgICB9CiAgICB9CgogICAgIyB2YXJzIGZvciBpdGVyYXRpb25zIGFuZCBjb252ZXJnZW5jZSB0ZXN0CiAgICBteSAkbWF4X2l0ZXJhdGlvbnMgPSAxOwogICAgbXkgJGNvbnZlcmdlbmNlX2xvZ19tZXNzYWdlOwogICAgbXkgJXNhd19tZDU7CgogICAgIyBPbmx5ICd0aWR5JyBmb3JtYXR0aW5nIGNhbiB1c2UgbXVsdGlwbGUgaXRlcmF0aW9ucwogICAgaWYgKCAkck9wdHMtPnsnZm9ybWF0J30gZXEgJ3RpZHknICkgewoKICAgICAgICAjIGNoZWNrIGl0ZXJhdGlvbiBjb3VudCBhbmQgcXVpZXRseSBmaXggaWYgbmVjZXNzYXJ5OgogICAgICAgICMgLSBpdGVyYXRpb25zIG9wdGlvbiBvbmx5IGFwcGxpZXMgdG8gY29kZSBiZWF1dGlmaWNhdGlvbiBtb2RlCiAgICAgICAgIyAtIHRoZSBjb252ZXJnZW5jZSBjaGVjayBzaG91bGQgc3RvcCBtb3N0IHJ1bnMgb24gaXRlcmF0aW9uIDIsIGFuZAogICAgICAgICMgICB2aXJ0dWFsbHkgYWxsIG9uIGl0ZXJhdGlvbiAzLiAgV2UgYWxsb3cgdXAgdG8gSVRFUkFUSU9OX0xJTUlULgogICAgICAgICRtYXhfaXRlcmF0aW9ucyA9ICRyT3B0cy0+eydpdGVyYXRpb25zJ307CiAgICAgICAgaWYgKCAhZGVmaW5lZCgkbWF4X2l0ZXJhdGlvbnMpCiAgICAgICAgICAgIHx8ICRtYXhfaXRlcmF0aW9ucyA8PSAwICkKICAgICAgICB7CiAgICAgICAgICAgICRtYXhfaXRlcmF0aW9ucyA9IDE7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRtYXhfaXRlcmF0aW9ucyA+IElURVJBVElPTl9MSU1JVCApIHsKICAgICAgICAgICAgJG1heF9pdGVyYXRpb25zID0gSVRFUkFUSU9OX0xJTUlUOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgc3RhcnRpbmcgTUQ1IHN1bSBmb3IgY29udmVyZ2VuY2UgdGVzdAogICAgICAgIGlmICggJG1heF9pdGVyYXRpb25zID4gMSApIHsKICAgICAgICAgICAgbXkgJGRpZ2VzdCA9ICRtZDVfaGV4LT4oICR7JHJpbnB1dF9zdHJpbmd9ICk7CiAgICAgICAgICAgICRzYXdfbWQ1eyRkaWdlc3R9ID0gMDsKICAgICAgICB9CiAgICB9CgogICAgIyBzYXZlIG9iamVjdHMgdG8gYWxsb3cgcmVkaXJlY3Rpbmcgb3V0cHV0IGR1cmluZyBpdGVyYXRpb25zCiAgICBteSAkbG9nZ2VyX29iamVjdF9maW5hbCA9ICRsb2dnZXJfb2JqZWN0OwogICAgbXkgJGl0ZXJhdGlvbl9vZl9mb3JtYXR0ZXJfY29udmVyZ2VuY2U7CiAgICBteSAkcm91dHB1dF9zdHJpbmc7CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBMb29wIG92ZXIgaXRlcmF0aW9ucwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZm9yZWFjaCBteSAkaXRlciAoIDEgLi4gJG1heF9pdGVyYXRpb25zICkgewoKICAgICAgICAkcnN0YXR1cy0+eydpdGVyYXRpb25fY291bnQnfSArPSAxOwoKICAgICAgICAjIGNyZWF0ZSBhIHN0cmluZyB0byBjYXB0dXJlIHRoZSBvdXRwdXQKICAgICAgICBteSAkc2lua19idWZmZXIgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgJHJvdXRwdXRfc3RyaW5nID0gXCRzaW5rX2J1ZmZlcjsKCiAgICAgICAgIyBTYXZlIGxvZ2dlciwgZGVidWdnZXIgYW5kIHRlZSBvdXRwdXQgb25seSBvbiBwYXNzIDEgYmVjYXVzZToKICAgICAgICAjICgxKSBsaW5lIG51bWJlciByZWZlcmVuY2VzIG11c3QgYmUgdG8gdGhlIHN0YXJ0aW5nCiAgICAgICAgIyBzb3VyY2UsIG5vdCBhbiBpbnRlcm1lZGlhdGUgcmVzdWx0LCBhbmQKICAgICAgICAjICgyKSB3ZSBuZWVkIHRvIGtub3cgaWYgdGhlcmUgYXJlIGVycm9ycyBzbyB3ZSBjYW4gc3RvcCB0aGUKICAgICAgICAjIGl0ZXJhdGlvbnMgZWFybHkgaWYgbmVjZXNzYXJ5LgogICAgICAgICMgKDMpIHRoZSB0ZWUgb3B0aW9uIG9ubHkgd29ya3Mgb24gZmlyc3QgcGFzcyBpZiBjb21tZW50cyBhcmUgYWxzbwogICAgICAgICMgYmVpbmcgZGVsZXRlZC4KICAgICAgICBpZiAoICRpdGVyID4gMSApIHsKCiAgICAgICAgICAgICRkZWJ1Z2dlcl9vYmplY3QtPmNsb3NlX2RlYnVnX2ZpbGUoKQogICAgICAgICAgICAgIGlmICgkZGVidWdnZXJfb2JqZWN0KTsKCiAgICAgICAgICAgIGlmICggICAkZmhfdGVlCiAgICAgICAgICAgICAgICAmJiAkZmhfdGVlLT5jYW4oJ2Nsb3NlJykKICAgICAgICAgICAgICAgICYmICFyZWYoJHRlZV9maWxlKQogICAgICAgICAgICAgICAgJiYgJHRlZV9maWxlIG5lICctJyApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRmaF90ZWUtPmNsb3NlKCkKICAgICAgICAgICAgICAgICAgb3IgV2FybigiY291bGRuJ3QgY2xvc2UgVEVFIGZpbGUgJHRlZV9maWxlOiAkT1NfRVJST1JcbiIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkZGVidWdnZXJfb2JqZWN0ID0gdW5kZWY7CiAgICAgICAgICAgICRsb2dnZXJfb2JqZWN0ICAgPSB1bmRlZjsKICAgICAgICAgICAgJGZoX3RlZSAgICAgICAgICA9IHVuZGVmOwogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgY3JlYXRlIGEgZm9ybWF0dGVyIGZvciB0aGlzIGZpbGUKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgIG15ICRmb3JtYXR0ZXI7CgogICAgICAgIGlmICgkdXNlcl9mb3JtYXR0ZXIpIHsKICAgICAgICAgICAgJGZvcm1hdHRlciA9ICR1c2VyX2Zvcm1hdHRlcjsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkck9wdHMtPnsnZm9ybWF0J30gZXEgJ2h0bWwnICkgewoKICAgICAgICAgICAgbXkgJGh0bWxfdG9jX2V4dGVuc2lvbiA9CiAgICAgICAgICAgICAgJHNlbGYtPm1ha2VfZmlsZV9leHRlbnNpb24oICRyT3B0cy0+eydodG1sLXRvYy1leHRlbnNpb24nfSwKICAgICAgICAgICAgICAgICd0b2MnICk7CgogICAgICAgICAgICBteSAkaHRtbF9zcmNfZXh0ZW5zaW9uID0KICAgICAgICAgICAgICAkc2VsZi0+bWFrZV9maWxlX2V4dGVuc2lvbiggJHJPcHRzLT57J2h0bWwtc3JjLWV4dGVuc2lvbid9LAogICAgICAgICAgICAgICAgJ3NyYycgKTsKCiAgICAgICAgICAgICRmb3JtYXR0ZXIgPSBQZXJsOjpUaWR5OjpIdG1sV3JpdGVyLT5uZXcoCiAgICAgICAgICAgICAgICBpbnB1dF9maWxlICAgICAgICAgPT4gJGZpbGVyb290LAogICAgICAgICAgICAgICAgaHRtbF9maWxlICAgICAgICAgID0+ICRzZWxmLT5bX291dHB1dF9maWxlX10sCiAgICAgICAgICAgICAgICBleHRlbnNpb24gICAgICAgICAgPT4gJHNlbGYtPltfYWN0dWFsX291dHB1dF9leHRlbnNpb25fXSwKICAgICAgICAgICAgICAgIGh0bWxfdG9jX2V4dGVuc2lvbiA9PiAkaHRtbF90b2NfZXh0ZW5zaW9uLAogICAgICAgICAgICAgICAgaHRtbF9zcmNfZXh0ZW5zaW9uID0+ICRodG1sX3NyY19leHRlbnNpb24sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJHJPcHRzLT57J2Zvcm1hdCd9IGVxICd0aWR5JyApIHsKICAgICAgICAgICAgJGZvcm1hdHRlciA9IFBlcmw6OlRpZHk6OkZvcm1hdHRlci0+bmV3KAogICAgICAgICAgICAgICAgbG9nZ2VyX29iamVjdCAgICAgID0+ICRsb2dnZXJfb2JqZWN0LAogICAgICAgICAgICAgICAgZGlhZ25vc3RpY3Nfb2JqZWN0ID0+ICRkaWFnbm9zdGljc19vYmplY3QsCiAgICAgICAgICAgICAgICBzaW5rX29iamVjdCAgICAgICAgPT4gJHJvdXRwdXRfc3RyaW5nLAogICAgICAgICAgICAgICAgbGVuZ3RoX2Z1bmN0aW9uICAgID0+ICRsZW5ndGhfZnVuY3Rpb24sCiAgICAgICAgICAgICAgICBpc19lbmNvZGVkX2RhdGEgICAgPT4gJGlzX2VuY29kZWRfZGF0YSwKICAgICAgICAgICAgICAgIGZoX3RlZSAgICAgICAgICAgICA9PiAkZmhfdGVlLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgRGllKCJJIGRvbid0IGtub3cgaG93IHRvIGRvIC1mb3JtYXQ9JHJPcHRzLT57J2Zvcm1hdCd9XG4iKTsKICAgICAgICB9CgogICAgICAgIGlmICggISRmb3JtYXR0ZXIgKSB7CiAgICAgICAgICAgIERpZSgiVW5hYmxlIHRvIGNvbnRpbnVlIHdpdGggJHJPcHRzLT57J2Zvcm1hdCd9IGZvcm1hdHRpbmdcbiIpOwogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBjcmVhdGUgdGhlIHRva2VuaXplciBmb3IgdGhpcyBmaWxlCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgbXkgJHRva2VuaXplciA9IFBlcmw6OlRpZHk6OlRva2VuaXplci0+bmV3KAogICAgICAgICAgICBzb3VyY2Vfb2JqZWN0ICAgICAgPT4gJHJpbnB1dF9zdHJpbmcsCiAgICAgICAgICAgIGxvZ2dlcl9vYmplY3QgICAgICA9PiAkbG9nZ2VyX29iamVjdCwKICAgICAgICAgICAgZGVidWdnZXJfb2JqZWN0ICAgID0+ICRkZWJ1Z2dlcl9vYmplY3QsCiAgICAgICAgICAgIGRpYWdub3N0aWNzX29iamVjdCA9PiAkZGlhZ25vc3RpY3Nfb2JqZWN0LAogICAgICAgICAgICByT3B0cyAgICAgICAgICAgICAgPT4gJHJPcHRzLAogICAgICAgICAgICBzdGFydGluZ19sZXZlbCAgICAgPT4gJHJPcHRzLT57J3N0YXJ0aW5nLWluZGVudGF0aW9uLWxldmVsJ30sCiAgICAgICAgKTsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgZG8gcHJvY2Vzc2luZyBmb3IgdGhpcyBpdGVyYXRpb24KICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgJHNlbGYtPnByb2Nlc3Nfc2luZ2xlX2Nhc2UoICR0b2tlbml6ZXIsICRmb3JtYXR0ZXIgKTsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyByZXBvcnQgZXJyb3JzCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tCgogICAgICAgICMgc2VlIGlmIHRoZSBmb3JtYXR0ZXIgaXMgY29udmVyZ2VkCiAgICAgICAgaWYgKCAgICRtYXhfaXRlcmF0aW9ucyA+IDEKICAgICAgICAgICAgJiYgIWRlZmluZWQoJGl0ZXJhdGlvbl9vZl9mb3JtYXR0ZXJfY29udmVyZ2VuY2UpCiAgICAgICAgICAgICYmICRmb3JtYXR0ZXItPmNhbignZ2V0X2NvbnZlcmdlbmNlX2NoZWNrJykgKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKCAkZm9ybWF0dGVyLT5nZXRfY29udmVyZ2VuY2VfY2hlY2soKSApIHsKICAgICAgICAgICAgICAgICRpdGVyYXRpb25fb2ZfZm9ybWF0dGVyX2NvbnZlcmdlbmNlID0gJGl0ZXI7CiAgICAgICAgICAgICAgICAkcnN0YXR1cy0+eydjb252ZXJnZWQnfSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgbGluZSBzb3VyY2UgZm9yIG5leHQgaXRlcmF0aW9uIChpZiBhbnkpIGNvbWVzIGZyb20gdGhlIGN1cnJlbnQKICAgICAgICAjIHRlbXBvcmFyeSBvdXRwdXQgYnVmZmVyCiAgICAgICAgaWYgKCAkaXRlciA8ICRtYXhfaXRlcmF0aW9ucyApIHsKCiAgICAgICAgICAgICRyaW5wdXRfc3RyaW5nID0gXCRzaW5rX2J1ZmZlcjsKCiAgICAgICAgICAgICMgc3RvcCBpdGVyYXRpb25zIGlmIGVycm9ycyBvciBjb252ZXJnZWQKICAgICAgICAgICAgbXkgJHN0b3Bfbm93ID0gJHNlbGYtPltfaW5wdXRfY29waWVkX3ZlcmJhdGltX107CiAgICAgICAgICAgICRzdG9wX25vdyB8fD0gJHRva2VuaXplci0+Z2V0X3VuZXhwZWN0ZWRfZXJyb3JfY291bnQoKTsKICAgICAgICAgICAgbXkgJHN0b3BwaW5nX29uX2Vycm9yID0gJHN0b3Bfbm93OwogICAgICAgICAgICBpZiAoJHN0b3Bfbm93KSB7CiAgICAgICAgICAgICAgICAkY29udmVyZ2VuY2VfbG9nX21lc3NhZ2UgPSA8PEVPTTsKU3RvcHBpbmcgaXRlcmF0aW9ucyBiZWNhdXNlIG9mIHNldmVyZSBlcnJvcnMuCkVPTQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIG9yIGRvIGNvbnZlcmdlbmNlIHRlc3QKICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyBzdG9wIGlmIHRoZSBmb3JtYXR0ZXIgaGFzIGNvbnZlcmdlZAogICAgICAgICAgICAgICAgJHN0b3Bfbm93IHx8PSBkZWZpbmVkKCRpdGVyYXRpb25fb2ZfZm9ybWF0dGVyX2NvbnZlcmdlbmNlKTsKCiAgICAgICAgICAgICAgICBteSAkZGlnZXN0ID0gJG1kNV9oZXgtPigkc2lua19idWZmZXIpOwogICAgICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCggJHNhd19tZDV7JGRpZ2VzdH0gKSApIHsKICAgICAgICAgICAgICAgICAgICAkc2F3X21kNXskZGlnZXN0fSA9ICRpdGVyOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgZG8gYSBzZWNvbmQgaXRlcmF0aW9uIGlmIGFsbCBvayBhbmQgcmVxdWVzdGVkIGJ5IGZvcm1hdHRlcgogICAgICAgICAgICAgICAgIyB0byBhbGxvdyBkZWxheWVkIGFkZGluZy9kZWxldGluZyBvZiBjb21tYXMgKGdpdDE1NiwgZ2l0MTQzKQogICAgICAgICAgICAgICAgZWxzaWYgKCAkaXRlciA9PSAxCiAgICAgICAgICAgICAgICAgICAgJiYgISRzdG9wX25vdwogICAgICAgICAgICAgICAgICAgICYmICRmb3JtYXR0ZXItPmNhbignd2FudF9zZWNvbmRfaXRlcmF0aW9uJykKICAgICAgICAgICAgICAgICAgICAmJiAkZm9ybWF0dGVyLT53YW50X3NlY29uZF9pdGVyYXRpb24oKSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIyMgZGVqYSB2dSwgYnV0IGRvIG5vdCBzZXQgJHN0b3Bfbm93CiAgICAgICAgICAgICAgICAgICAgJHNhd19tZDV7JGRpZ2VzdH0gPSAkaXRlcjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAjIERlamEgdnUsIHN0b3AgaXRlcmF0aW5nCgogICAgICAgICAgICAgICAgICAgICRzdG9wX25vdyA9IDE7CiAgICAgICAgICAgICAgICAgICAgbXkgJGl0ZXJtID0gJGl0ZXIgLSAxOwogICAgICAgICAgICAgICAgICAgIGlmICggJHNhd19tZDV7JGRpZ2VzdH0gIT0gJGl0ZXJtICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBCbGlua2luZyAob3NjaWxsYXRpbmcpIGJldHdlZW4gdHdvIG9yIG1vcmUgc3RhYmxlCiAgICAgICAgICAgICAgICAgICAgICAgICMgZW5kIHN0YXRlcy4gIFRoaXMgaXMgdW5saWtlbHkgdG8gb2NjdXIgd2l0aCBub3JtYWwKICAgICAgICAgICAgICAgICAgICAgICAgIyBwYXJhbWV0ZXJzLCBidXQgaXQgY2FuIG9jY3VyIGluIHN0cmVzcyB0ZXN0aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICMgd2l0aCBleHRyZW1lIHBhcmFtZXRlciB2YWx1ZXMsIHN1Y2ggYXMgdmVyeSBzaG9ydAogICAgICAgICAgICAgICAgICAgICAgICAjIG1heGltdW0gbGluZSBsZW5ndGhzLiAgV2Ugd2FudCB0byBjYXRjaCBhbmQgZml4CiAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlbSB3aGVuIHRoZXkgaGFwcGVuLgogICAgICAgICAgICAgICAgICAgICAgICAkcnN0YXR1cy0+eydibGlua2luZyd9ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnZlcmdlbmNlX2xvZ19tZXNzYWdlID0gPDxFT007CkJMSU5LRVIuIE91dHB1dCBmb3IgaXRlcmF0aW9uICRpdGVyIHNhbWUgYXMgZm9yICRzYXdfbWQ1eyRkaWdlc3R9LgpFT00KICAgICAgICAgICAgICAgICAgICAgICAgJHN0b3BwaW5nX29uX2Vycm9yIHx8PSAkY29udmVyZ2VuY2VfbG9nX21lc3NhZ2U7CiAgICAgICAgICAgICAgICAgICAgICAgIERFVkVMX01PREUKICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcmludCB7KlNUREVSUn0gJGNvbnZlcmdlbmNlX2xvZ19tZXNzYWdlOwogICAgICAgICAgICAgICAgICAgICAgICAkZGlhZ25vc3RpY3Nfb2JqZWN0LT53cml0ZV9kaWFnbm9zdGljcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb252ZXJnZW5jZV9sb2dfbWVzc2FnZSkKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAkZGlhZ25vc3RpY3Nfb2JqZWN0OwoKIyBVbmNvbW1lbnQgdG8gc2VhcmNoIGZvciBibGlua2luZyBzdGF0ZXMKIyBXYXJuKCAiJGRpc3BsYXlfbmFtZTogYmxpbmtpbmc7IGl0ZXIgJGl0ZXIgc2FtZSBhcyBmb3IgJHNhd19tZDV7JGRpZ2VzdH1cbiIgKTsKCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkY29udmVyZ2VuY2VfbG9nX21lc3NhZ2UgPSA8PEVPTTsKQ29udmVyZ2VkLiAgT3V0cHV0IGZvciBpdGVyYXRpb24gJGl0ZXIgc2FtZSBhcyBmb3IgaXRlciAkaXRlcm0uCkVPTQogICAgICAgICAgICAgICAgICAgICAgICAkZGlhZ25vc3RpY3Nfb2JqZWN0LT53cml0ZV9kaWFnbm9zdGljcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb252ZXJnZW5jZV9sb2dfbWVzc2FnZSkKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAkZGlhZ25vc3RpY3Nfb2JqZWN0ICYmICRpdGVybSA+IDI7CiAgICAgICAgICAgICAgICAgICAgICAgICRyc3RhdHVzLT57J2NvbnZlcmdlZCd9ID0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkc3RvcF9ub3cpIHsKCiAgICAgICAgICAgICAgICBpZiAoREVWRUxfTU9ERSkgewoKICAgICAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQoJGl0ZXJhdGlvbl9vZl9mb3JtYXR0ZXJfY29udmVyZ2VuY2UpICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIG1lc3NhZ2UgY2Fubm90IGFwcGVhciB1bmxlc3MgdGhlIGZvcm1hdHRlcgogICAgICAgICAgICAgICAgICAgICAgICAjIGNvbnZlcmdlbmNlIHRlc3QgYWJvdmUgaXMgdGVtcG9yYXJpbHkgc2tpcHBlZCBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXN0aW5nLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRpdGVyYXRpb25fb2ZfZm9ybWF0dGVyX2NvbnZlcmdlbmNlIDwgJGl0ZXIgLSAxICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgeypTVERFUlJ9CiJTVFJBTkdFIEVhcmx5IGNvbnYgaW4gJGRpc3BsYXlfbmFtZTogU3RvcHBpbmcgb24gaXQ9JGl0ZXIsIGNvbnZlcmdlZCBpbiBmb3JtYXR0ZXIgb24gJGl0ZXJhdGlvbl9vZl9mb3JtYXR0ZXJfY29udmVyZ2VuY2VcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAhJHN0b3BwaW5nX29uX2Vycm9yICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGUgbWQ1IHN1bSBpbXBsaWVzIGNvbnZlcmdlbmNlIGJ1dCB0aGUgY29udmVyZ2VuY2UKICAgICAgICAgICAgICAgICAgICAgICAgIyB3YXMgbm90IGRldGVjdGVkIGJ5IHRoZSBGb3JtYXR0ZXIuICBUaGlzIGlzIG5vdAogICAgICAgICAgICAgICAgICAgICAgICAjIGNyaXRpY2FsIGJ1dCBzaG91bGQgYmUgaW52ZXN0aWdhdGVkLiAgSXQgaGFwcGVuZWQKICAgICAgICAgICAgICAgICAgICAgICAgIyBvbmNlIHdoZW4gYSBsaW5lIGJyZWFrIHdhcyBwbGFjZWQgYmVmb3JlIGEgcGhhbnRvbQogICAgICAgICAgICAgICAgICAgICAgICAjIGNvbW1hIHVuZGVyIC1xd2FmLCBhbmQgaGFzIGJlZW4gZml4ZWQuCiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50IHsqU1RERVJSfQoiU1RSQU5HRSBubyBjb252IGluICRkaXNwbGF5X25hbWU6IHN0b3BwaW5nIG9uIGl0PSRpdGVyLCBidXQgbm90IGNvbnZlcmdlZCBpbiBmb3JtYXR0ZXJcbiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAjIyBsb29rcyBvawogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHdlIGFyZSBzdG9wcGluZyB0aGUgaXRlcmF0aW9ucyBlYXJseTsKICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgIH0KICAgICAgICB9ICMjIGVuZCBpZiAoICRpdGVyIDwgJG1heF9pdGVyYXRpb25zKQogICAgfSAjIyBlbmQgbG9vcCBvdmVyIGl0ZXJhdGlvbnMgZm9yIG9uZSBzb3VyY2UgZmlsZQoKICAgICRkZWJ1Z2dlcl9vYmplY3QtPmNsb3NlX2RlYnVnX2ZpbGUoKQogICAgICBpZiAkZGVidWdnZXJfb2JqZWN0OwoKICAgIGlmICggICAkZmhfdGVlCiAgICAgICAgJiYgJGZoX3RlZS0+Y2FuKCdjbG9zZScpCiAgICAgICAgJiYgIXJlZigkdGVlX2ZpbGUpCiAgICAgICAgJiYgJHRlZV9maWxlIG5lICctJyApCiAgICB7CiAgICAgICAgJGZoX3RlZS0+Y2xvc2UoKQogICAgICAgICAgb3IgV2FybigiY291bGRuJ3QgY2xvc2UgVEVFIGZpbGUgJHRlZV9maWxlOiAkT1NfRVJST1JcbiIpOwogICAgfQoKICAgICMgbGVhdmUgbG9nZ2VyIG9iamVjdCBvcGVuIGZvciBhZGRpdGlvbmFsIG1lc3NhZ2VzCiAgICAkbG9nZ2VyX29iamVjdCA9ICRsb2dnZXJfb2JqZWN0X2ZpbmFsOwogICAgJGxvZ2dlcl9vYmplY3QtPndyaXRlX2xvZ2ZpbGVfZW50cnkoJGNvbnZlcmdlbmNlX2xvZ19tZXNzYWdlKQogICAgICBpZiAkY29udmVyZ2VuY2VfbG9nX21lc3NhZ2U7CgogICAgcmV0dXJuICRyb3V0cHV0X3N0cmluZzsKCn0gIyMgZW5kIHN1YiBwcm9jZXNzX2l0ZXJhdGlvbl9sYXllcgoKc3ViIHByb2Nlc3Nfc2luZ2xlX2Nhc2UgewoKICAgIG15ICggJHNlbGYsICR0b2tlbml6ZXIsICRmb3JtYXR0ZXIgKSA9IEBfOwoKICAgICMgUnVuIHRoZSBmb3JtYXR0ZXIgb24gYSBzaW5nbGUgZGVmaW5lZCBjYXNlCgogICAgIyBUb3RhbCBmb3JtYXR0aW5nIGlzIGRvbmUgd2l0aCB0aGVzZSBsYXllcnMgb2Ygc3Vicm91dGluZXM6CiAgICAjICAgcGVybHRpZHkgICAgICAgICAgICAgICAgLSBtYWluIHJvdXRpbmU7IGNoZWNrcyBydW4gcGFyYW1ldGVycwogICAgIyAgIHByb2Nlc3NfYWxsX2ZpbGVzICAgICAgIC0gbWFpbiBsb29wIHRvIHByb2Nlc3MgYWxsIGZpbGVzOwogICAgIyAgIHByb2Nlc3NfZmlsdGVyX2xheWVyICAgIC0gZG8gYW55IHByZSBhbmQgcG9zdCBwcm9jZXNzaW5nOwogICAgIyAgIHByb2Nlc3NfaXRlcmF0aW9uX2xheWVyIC0gZG8gYW55IGl0ZXJhdGlvbnMgb24gZm9ybWF0dGluZwogICAgIyAgKnByb2Nlc3Nfc2luZ2xlX2Nhc2UgICAgIC0gc29sdmUgb25lIGZvcm1hdHRpbmcgcHJvYmxlbTsgKlRISVMgTEFZRVIKCiAgICB3aGlsZSAoIG15ICRsaW5lID0gJHRva2VuaXplci0+Z2V0X2xpbmUoKSApIHsKICAgICAgICAkZm9ybWF0dGVyLT53cml0ZV9saW5lKCRsaW5lKTsKICAgIH0KCiAgICAjIHVzZXItZGVmaW5lZCBmb3JtYXR0ZXJzIGFyZSBwb3NzaWJsZSwgYW5kIG1heSBub3QgaGF2ZSBhCiAgICAjIHN1YiAnZmluaXNoX2Zvcm1hdHRpbmcnLCBzbyB3ZSBoYXZlIHRvIGNoZWNrCiAgICBpZiAoICRmb3JtYXR0ZXItPmNhbignZmluaXNoX2Zvcm1hdHRpbmcnKSApIHsKICAgICAgICBteSAkc2V2ZXJlX2Vycm9yID0gJHRva2VuaXplci0+cmVwb3J0X3Rva2VuaXphdGlvbl9lcnJvcnMoKTsKICAgICAgICBteSAkdmVyYmF0aW0gICAgID0gJGZvcm1hdHRlci0+ZmluaXNoX2Zvcm1hdHRpbmcoJHNldmVyZV9lcnJvcik7CiAgICAgICAgJHNlbGYtPltfaW5wdXRfY29waWVkX3ZlcmJhdGltX10gPSAkdmVyYmF0aW07CiAgICB9CgogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgcHJvY2Vzc19zaW5nbGVfY2FzZQoKc3ViIGNvcHlfYnVmZmVyX3RvX2V4dGVybmFsX3JlZiB7CgogICAgbXkgKCAkc2VsZiwgJHJvdXRwdXQsICRkZXN0aW5hdGlvbl9zdHJlYW0gKSA9IEBfOwoKICAgICMgQ29weSAkcm91dHB1dCB0byB0aGUgZmluYWwgJGRlc3RpbmF0aW9uX3N0cmVhbSwKICAgICMgZW5jb2RpbmcgaWYgdGhlIGZsYWcgJGVuY29kZV9kZXN0aW5hdGlvbl9idWZmZXIgaXMgdHJ1ZS4KCiAgICAjIERhdGEgRmxvdzoKICAgICMgICAgJGRlc3RpbmF0aW9uX2J1ZmZlciAtPiBbIGVuY29kZT8gXSAtPiAkZGVzdGluYXRpb25fc3RyZWFtCgogICAgbXkgJGRlc3RpbmF0aW9uX2J1ZmZlciA9IEVNUFRZX1NUUklORzsKICAgIGlmICggcmVmKCRyb3V0cHV0KSBlcSAnQVJSQVknICkgewogICAgICAgICRkZXN0aW5hdGlvbl9idWZmZXIgPSBqb2luIEVNUFRZX1NUUklORywgQHskcm91dHB1dH07CiAgICB9CiAgICBlbHNpZiAoIHJlZigkcm91dHB1dCkgZXEgJ1NDQUxBUicgKSB7CiAgICAgICAgJGRlc3RpbmF0aW9uX2J1ZmZlciA9ICR7JHJvdXRwdXR9OwogICAgfQogICAgZWxzZSB7CiAgICAgICAgRmF0YWwoCiAgICAgICAgICAgICInY29weV9idWZmZXJfdG9fZXh0ZXJuYWxfcmVmJyBleHBlY3RpbmcgcmVmIHRvIEFSUkFZIG9yIFNDQUxBUlxuIik7CiAgICB9CgogICAgJHJzdGF0dXMtPnsnb3V0cHV0X2VuY29kZWRfYXMnfSA9IEVNUFRZX1NUUklORzsKICAgIG15ICRyZWZfZGVzdGluYXRpb25fc3RyZWFtID0gcmVmKCRkZXN0aW5hdGlvbl9zdHJlYW0pOwoKICAgICMgRW5jb2RlIG91dHB1dD8gU3RyaW5ncyBhbmQgYXJyYXlzIHVzZSBzcGVjaWFsIGVuY29kaW5nIHJ1bGVzOyBzZWU6CiAgICAjICAgaHR0cHM6Ly9naXRodWIuY29tL3Blcmx0aWR5L3Blcmx0aWR5L2Jsb2IvbWFzdGVyL2RvY3MvZW9zX2ZsYWcubWQKICAgIG15ICRlbmNvZGVfZGVzdGluYXRpb25fYnVmZmVyOwogICAgaWYgKCAgICRyZWZfZGVzdGluYXRpb25fc3RyZWFtIGVxICdTQ0FMQVInCiAgICAgICAgfHwgJHJlZl9kZXN0aW5hdGlvbl9zdHJlYW0gZXEgJ0FSUkFZJyApCiAgICB7CiAgICAgICAgbXkgJHJPcHRzID0gJHNlbGYtPltfck9wdHNfXTsKICAgICAgICAkZW5jb2RlX2Rlc3RpbmF0aW9uX2J1ZmZlciA9CiAgICAgICAgICAkck9wdHMtPnsnZW5jb2RlLW91dHB1dC1zdHJpbmdzJ30gJiYgJHNlbGYtPltfZGVjb2RlZF9pbnB1dF9hc19dOwogICAgfQoKICAgICMgQW4gb2JqZWN0IHdpdGggYSBwcmludCBtZXRob2Qgd2lsbCB1c2UgZmlsZSBlbmNvZGluZyBydWxlcwogICAgZWxzaWYgKCAkcmVmX2Rlc3RpbmF0aW9uX3N0cmVhbS0+Y2FuKCdwcmludCcpICkgewogICAgICAgICRlbmNvZGVfZGVzdGluYXRpb25fYnVmZmVyID0gJHNlbGYtPltfaXNfZW5jb2RlZF9kYXRhX107CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBjb25mZXNzIDw8RU9NOwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTm8gJ3ByaW50JyBtZXRob2QgaXMgZGVmaW5lZCBmb3Igb2JqZWN0IG9mIGNsYXNzICckcmVmX2Rlc3RpbmF0aW9uX3N0cmVhbScKUGxlYXNlIGNoZWNrIHlvdXIgY2FsbCB0byBQZXJsOjpUaWR5OjpwZXJsdGlkeS4gVHJhY2UgZm9sbG93cy4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkVPTQogICAgfQoKICAgIGlmICgkZW5jb2RlX2Rlc3RpbmF0aW9uX2J1ZmZlcikgewogICAgICAgIG15ICRlbmNvZGVkX2J1ZmZlcjsKICAgICAgICBpZiAoCiAgICAgICAgICAgICFldmFsIHsKICAgICAgICAgICAgICAgICRlbmNvZGVkX2J1ZmZlciA9CiAgICAgICAgICAgICAgICAgIEVuY29kZTo6ZW5jb2RlKCAiVVRGLTgiLCAkZGVzdGluYXRpb25fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgIEVuY29kZTo6RkJfQ1JPQUsgfCBFbmNvZGU6OkxFQVZFX1NSQyApOwogICAgICAgICAgICAgICAgMTsKICAgICAgICAgICAgfQogICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgIFdhcm4oCiJFcnJvciBhdHRlbXB0aW5nIHRvIGVuY29kZSBvdXRwdXQgc3RyaW5nIHJlZjsgZW5jb2Rpbmcgbm90IGRvbmVcbiIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRkZXN0aW5hdGlvbl9idWZmZXIgPSAkZW5jb2RlZF9idWZmZXI7CiAgICAgICAgICAgICRyc3RhdHVzLT57J291dHB1dF9lbmNvZGVkX2FzJ30gPSAnVVRGLTgnOwogICAgICAgIH0KICAgIH0KCiAgICAjIFNlbmQgZGF0YSBmb3IgU0NBTEFSLCBBUlJBWSAmIE9CSiByZWZzIHRvIGl0cyBmaW5hbCBkZXN0aW5hdGlvbgogICAgaWYgKCAkcmVmX2Rlc3RpbmF0aW9uX3N0cmVhbSBlcSAnU0NBTEFSJyApIHsKICAgICAgICAkeyRkZXN0aW5hdGlvbl9zdHJlYW19ID0gJGRlc3RpbmF0aW9uX2J1ZmZlcjsKICAgIH0KICAgIGVsc2lmICggZGVmaW5lZCgkZGVzdGluYXRpb25fYnVmZmVyKSApIHsKICAgICAgICBteSBAbGluZXMgPSBzcGxpdCAvXi8sICRkZXN0aW5hdGlvbl9idWZmZXI7CiAgICAgICAgaWYgKCAkcmVmX2Rlc3RpbmF0aW9uX3N0cmVhbSBlcSAnQVJSQVknICkgewogICAgICAgICAgICBAeyRkZXN0aW5hdGlvbl9zdHJlYW19ID0gQGxpbmVzOwogICAgICAgIH0KCiAgICAgICAgIyBkZXN0aW5hdGlvbiBzdHJlYW0gbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCBwcmludCBtZXRob2QKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZm9yZWFjaCBteSAkbGluZSAoQGxpbmVzKSB7CiAgICAgICAgICAgICAgICAkZGVzdGluYXRpb25fc3RyZWFtLT5wcmludCgkbGluZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAkcmVmX2Rlc3RpbmF0aW9uX3N0cmVhbS0+Y2FuKCdjbG9zZScpICkgewogICAgICAgICAgICAgICAgJGRlc3RpbmF0aW9uX3N0cmVhbS0+Y2xvc2UoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIEVtcHR5IGRlc3RpbmF0aW9uIGJ1ZmZlciBub3QgZ29pbmcgdG8gYSBzdHJpbmcgLi4uIGNvdWxkCiAgICAgICAgIyBoYXBwZW4gZm9yIGV4YW1wbGUgaWYgdXNlciBkZWxldGVkIGFsbCBwb2Qgb3IgY29tbWVudHMKICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGNvcHlfYnVmZmVyX3RvX2V4dGVybmFsX3JlZgoKfSAjIyBlbmQgb2YgY2xvc3VyZSBmb3Igc3ViIHBlcmx0aWR5CgpzdWIgbGluZV9kaWZmIHsKCiAgICBteSAoICRzMSwgJHMyICkgPSBAXzsKCiAgICAjIEdpdmVuIHR3byBzdHJpbmdzLCBSZXR1cm4KICAgICMgICRkaWZmX21hcmtlciA9IGEgc3RyaW5nIHdpdGggY2FyZXQgKF4pIHN5bWJvbHMgaW5kaWNhdGluZyBkaWZmZXJlbmNlcwogICAgIyAgJHBvczEgPSBjaGFyYWN0ZXIgcG9zaXRpb24gb2YgZmlyc3QgZGlmZmVyZW5jZTsgcG9zMT0tMSBpZiBubyBkaWZmZXJlbmNlCgogICAgIyBGb3JtIGV4Y2x1c2l2ZSBvciBvZiB0aGUgc3RyaW5ncywgd2hpY2ggaGFzIG51bGwgY2hhcmFjdGVycyB3aGVyZSBzdHJpbmdzCiAgICAjIGhhdmUgc2FtZSBjb21tb24gY2hhcmFjdGVycyBzbyBub24tbnVsbCBjaGFyYWN0ZXJzIGluZGljYXRlIGNoYXJhY3RlcgogICAgIyBkaWZmZXJlbmNlcy4KICAgIG15ICRkaWZmX21hcmtlciA9IEVNUFRZX1NUUklORzsKICAgIG15ICRwb3MgICAgICAgICA9IC0xOwogICAgbXkgJHBvczEgICAgICAgID0gLTE7CiAgICBpZiAoIGRlZmluZWQoJHMxKSAmJiBkZWZpbmVkKCRzMikgKSB7CiAgICAgICAgbXkgJG1hc2sgPSAkczEgXiAkczI7CgogICAgICAgIHdoaWxlICggJG1hc2sgPX4gL1teXDBdL2cgKSB7CiAgICAgICAgICAgIG15ICRwb3NfbGFzdCA9ICRwb3M7CiAgICAgICAgICAgICRwb3MgPSAkTEFTVF9NQVRDSF9TVEFSVFswXTsKICAgICAgICAgICAgaWYgKCAkcG9zMSA8IDAgKSB7ICRwb3MxID0gJHBvczsgfQogICAgICAgICAgICAkZGlmZl9tYXJrZXIgLj0gU1BBQ0UgeCAoICRwb3MgLSAkcG9zX2xhc3QgLSAxICkgLiAnXic7CgogICAgICAgICAgICAjIHdlIGNvdWxkIGNvbnRpbnVlIHRvIG1hcmsgYWxsIGRpZmZlcmVuY2VzLCBidXQgdGhlcmUgaXMgbm8gcG9pbnQKICAgICAgICAgICAgbGFzdDsKICAgICAgICB9ICMjIGVuZCB3aGlsZSAoICRtYXNrID1+IC9bXlwwXS9nKQogICAgfQogICAgcmV0dXJuICggJGRpZmZfbWFya2VyLCAkcG9zMSApOwp9ICMjIGVuZCBzdWIgbGluZV9kaWZmCgpzdWIgY29tcGFyZV9zdHJpbmdfYnVmZmVycyB7CgogICAgbXkgKCAkc3RyaW5nX2ksICRzdHJpbmdfbywgKCRtYXhfZGlmZl9jb3VudCkgKSA9IEBfOwoKICAgICMgQ29tcGFyZSBpbnB1dCBhbmQgb3V0cHV0IHN0cmluZyBidWZmZXJzIGFuZCByZXR1cm4gYSBicmllZiB0ZXh0CiAgICAjIGRlc2NyaXB0aW9uIG9mIHRoZSBmaXJzdCBkaWZmZXJlbmNlLgoKICAgICMgR2l2ZW46CiAgICAjICAgJHN0cmluZ19pID0gaW5wdXQgc3RyaW5nLCBvciByZWYgdG8gaW5wdXQgc3RyaW5nCiAgICAjICAgJHN0cmluZ19vID0gb3V0cHV0IHN0cmluZywgb3IgcmVmIHRvIG91dHB1dCBzdHJpbmcKICAgICMgICAkbWF4X2RpZmZfY291bnQgPSBvcHRpb25hbCBtYXhpbXVtIG51bWJlciBvZiBkaWZmZXJlbmNlcyB0byBzaG93LAogICAgIyAgICAgICBkZWZhdWx0PTEKICAgICMgUmV0dXJuOgogICAgIyAgIGEgc3RyaW5nIHNob3dpbmcgZGlmZmVyZW5jZXMKCiAgICBteSAkcmJ1ZmkgPSByZWYoJHN0cmluZ19pKSA/ICRzdHJpbmdfaSA6IFwkc3RyaW5nX2k7CiAgICBteSAkcmJ1Zm8gPSByZWYoJHN0cmluZ19vKSA/ICRzdHJpbmdfbyA6IFwkc3RyaW5nX287CgogICAgaWYgKCAhZGVmaW5lZCgkbWF4X2RpZmZfY291bnQpICkgeyAkbWF4X2RpZmZfY291bnQgPSAxIH0KCiAgICBteSAoIEBhcnlpLCBAYXJ5byApOwogICAgbXkgKCAkbGVuaSwgJGxlbm8gKSA9ICggMCwgMCApOwogICAgaWYgKCBkZWZpbmVkKCRyYnVmaSkgKSB7CiAgICAgICAgJGxlbmkgPSBsZW5ndGgoICR7JHJidWZpfSApOwogICAgICAgIEBhcnlpID0gc3BsaXQgL14vLCAkeyRyYnVmaX07CiAgICB9CiAgICBpZiAoIGRlZmluZWQoJHJidWZvKSApIHsKICAgICAgICAkbGVubyA9IGxlbmd0aCggJHskcmJ1Zm99ICk7CiAgICAgICAgQGFyeW8gPSBzcGxpdCAvXi8sICR7JHJidWZvfTsKICAgIH0KICAgIG15ICRubGluZXNfaSA9IEBhcnlpOwogICAgbXkgJG5saW5lc19vID0gQGFyeW87CiAgICBteSAkbXNnICAgICAgPSA8PEVPTTsKSW5wdXQgICBmaWxlIGxlbmd0aCBoYXMgJGxlbmkgY2hhcnMgaW4gJG5saW5lc19pIGxpbmVzCk91dHB1dCAgZmlsZSBsZW5ndGggaGFzICRsZW5vIGNoYXJzIGluICRubGluZXNfbyBsaW5lcwpFT00KICAgIHJldHVybiAkbXNnIHVubGVzcyAoICRsZW5pICYmICRsZW5vICk7CgogICAgbXkgJHRydW5jYXRlID0gc3ViIHsKICAgICAgICBteSAoICRzdHIsICRsZW5tYXggKSA9IEBfOwogICAgICAgIGlmICggbGVuZ3RoKCRzdHIpID4gJGxlbm1heCApIHsKICAgICAgICAgICAgJHN0ciA9IHN1YnN0ciggJHN0ciwgMCwgJGxlbm1heCApIC4gIi4uLiI7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkc3RyOwogICAgfTsgIyMgZW5kICR0cnVuY2F0ZSA9IHN1YgoKICAgIG15ICRsYXN0X25vbmJsYW5rX2xpbmUgID0gRU1QVFlfU1RSSU5HOwogICAgbXkgJGxhc3Rfbm9uYmxhbmtfY291bnQgPSAwOwoKICAgICMgbG9vcCBvdmVyIGxpbmVzIHVudGlsIHdlIGZpbmQgYSBkaWZmZXJlbmNlCiAgICBteSAkY291bnQgICAgICA9IDA7CiAgICBteSAkZGlmZl9jb3VudCA9IDA7CiAgICB3aGlsZSAoIEBhcnlpICYmIEBhcnlvICkgewogICAgICAgICRjb3VudCsrOwogICAgICAgIG15ICRsaW5laSA9IHNoaWZ0IEBhcnlpOwogICAgICAgIG15ICRsaW5lbyA9IHNoaWZ0IEBhcnlvOwogICAgICAgIGNob21wICRsaW5laTsKICAgICAgICBjaG9tcCAkbGluZW87CiAgICAgICAgaWYgKCAkbGluZWkgZXEgJGxpbmVvICkgewogICAgICAgICAgICBpZiAoIGxlbmd0aCgkbGluZWkpICkgewogICAgICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfbGluZSAgPSAkbGluZWk7CiAgICAgICAgICAgICAgICAkbGFzdF9ub25ibGFua19jb3VudCA9ICRjb3VudDsKICAgICAgICAgICAgfQogICAgICAgICAgICBuZXh0OwogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgbGluZXMgZGlmZmVyIC4uLiBmaW5pc2ggdXAKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgbXkgKCAkbGluZV9kaWZmLCAkcG9zMSApID0gbGluZV9kaWZmKCAkbGluZWksICRsaW5lbyApOwogICAgICAgIG15ICRjaDEgICAgPSAkcG9zMSArIDE7CiAgICAgICAgbXkgJHJlYXNvbiA9ICJGaWxlcyBmaXJzdCBkaWZmZXIgYXQgY2hhcmFjdGVyICRjaDEgb2YgbGluZSAkY291bnQiOwoKICAgICAgICBteSAoICRsZWFkaW5nX3dzX2ksICRsZWFkaW5nX3dzX28gKSA9ICggRU1QVFlfU1RSSU5HLCBFTVBUWV9TVFJJTkcgKTsKICAgICAgICBpZiAoICRsaW5laSA9fiAvXihccyspLyApIHsgJGxlYWRpbmdfd3NfaSA9ICQxOyB9CiAgICAgICAgaWYgKCAkbGluZW8gPX4gL14oXHMrKS8gKSB7ICRsZWFkaW5nX3dzX28gPSAkMTsgfQogICAgICAgIGlmICggJGxlYWRpbmdfd3NfaSBuZSAkbGVhZGluZ193c19vICkgewogICAgICAgICAgICAkcmVhc29uIC49ICI7IGxlYWRpbmcgd2hpdGVzcGFjZSBkaWZmZXJzIjsKICAgICAgICAgICAgaWYgKCAkbGVhZGluZ193c19pID1+IC9cdC8gKSB7CiAgICAgICAgICAgICAgICAkcmVhc29uIC49ICI7IGlucHV0IGhhcyB0YWIgY2hhciI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIG15ICggJHRyYWlsaW5nX3dzX2ksICR0cmFpbGluZ193c19vICkgPQogICAgICAgICAgICAgICggRU1QVFlfU1RSSU5HLCBFTVBUWV9TVFJJTkcgKTsKICAgICAgICAgICAgaWYgKCAkbGluZWkgPX4gLyhccyspJC8gKSB7ICR0cmFpbGluZ193c19pID0gJDE7IH0KICAgICAgICAgICAgaWYgKCAkbGluZW8gPX4gLyhccyspJC8gKSB7ICR0cmFpbGluZ193c19vID0gJDE7IH0KICAgICAgICAgICAgaWYgKCAkdHJhaWxpbmdfd3NfaSBuZSAkdHJhaWxpbmdfd3NfbyApIHsKICAgICAgICAgICAgICAgICRyZWFzb24gLj0gIjsgdHJhaWxpbmcgd2hpdGVzcGFjZSBkaWZmZXJzIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkbXNnIC49ICRyZWFzb24gLiAiXG4iOwoKICAgICAgICAjIGxpbWl0IHN0cmluZyBkaXNwbGF5IGxlbmd0aAogICAgICAgIGlmICggJHBvczEgPiA2MCApIHsKICAgICAgICAgICAgbXkgJGRyb3AgPSAkcG9zMSAtIDQwOwogICAgICAgICAgICAkbGluZWkgICAgID0gIi4uLiIgLiBzdWJzdHIoICRsaW5laSwgJGRyb3AgKTsKICAgICAgICAgICAgJGxpbmVvICAgICA9ICIuLi4iIC4gc3Vic3RyKCAkbGluZW8sICRkcm9wICk7CiAgICAgICAgICAgICRsaW5lX2RpZmYgPSBTUEFDRSB4IDMgLiBzdWJzdHIoICRsaW5lX2RpZmYsICRkcm9wICk7CiAgICAgICAgfQogICAgICAgICRsaW5laSAgICAgICAgICAgICAgPSAkdHJ1bmNhdGUtPiggJGxpbmVpLCAgICAgICAgICAgICAgNzIgKTsKICAgICAgICAkbGluZW8gICAgICAgICAgICAgID0gJHRydW5jYXRlLT4oICRsaW5lbywgICAgICAgICAgICAgIDcyICk7CiAgICAgICAgJGxhc3Rfbm9uYmxhbmtfbGluZSA9ICR0cnVuY2F0ZS0+KCAkbGFzdF9ub25ibGFua19saW5lLCA3MiApOwoKICAgICAgICBpZiAoJGxhc3Rfbm9uYmxhbmtfbGluZSkgewogICAgICAgICAgICAkbXNnIC49IDw8RU9NOwogJGxhc3Rfbm9uYmxhbmtfY291bnQ6JGxhc3Rfbm9uYmxhbmtfbGluZQpFT00KICAgICAgICB9CiAgICAgICAgJGxpbmVfZGlmZiA9IFNQQUNFIHggKCAyICsgbGVuZ3RoKCRjb3VudCkgKSAuICRsaW5lX2RpZmY7CiAgICAgICAgJG1zZyAuPSA8PEVPTTsKPCRjb3VudDokbGluZWkKPiRjb3VudDokbGluZW8KJGxpbmVfZGlmZgpFT00KICAgICAgICAkZGlmZl9jb3VudCsrOwogICAgICAgIGxhc3QgaWYgKCAkZGlmZl9jb3VudCA+PSAkbWF4X2RpZmZfY291bnQgKTsKICAgIH0gIyMgZW5kIHdoaWxlICggQGFyeWkgJiYgQGFyeW8gKQoKICAgIGlmICgkZGlmZl9jb3VudCkgeyByZXR1cm4gJG1zZyB9CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBubyBkaWZmZXJlbmNlcyBmb3VuZCwgc2VlIGlmIG9uZSBmaWxlIGhhcyBmZXdlciBsaW5lcwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgaWYgKCAkbmxpbmVzX2kgPiAkbmxpbmVzX28gKSB7CiAgICAgICAgJG1zZyAuPSA8PEVPTTsKRmlsZXMgaW5pdGlhbGx5IG1hdGNoIGZpbGUgYnV0IG91dHB1dCBmaWxlIGhhcyBmZXdlciBsaW5lcwpFT00KICAgIH0KICAgIGVsc2lmICggJG5saW5lc19pIDwgJG5saW5lc19vICkgewogICAgICAgICRtc2cgLj0gPDxFT007CkZpbGVzIGluaXRpYWxseSBtYXRjaCBmaWxlIGJ1dCBpbnB1dCBmaWxlIGhhcyBmZXdlciBsaW5lcwpFT00KICAgIH0KICAgIGVsc2UgewogICAgICAgICRtc2cgLj0gPDxFT007ClRleHQgaW4gbGluZXMgb2YgZmlsZSBtYXRjaCBidXQgY2hlY2tzdW1zIGRpZmZlci4gUGVyaGFwcyBsaW5lIGVuZGluZ3MgZGlmZmVyLgpFT00KICAgIH0KICAgIHJldHVybiAkbXNnOwp9ICMjIGVuZCBzdWIgY29tcGFyZV9zdHJpbmdfYnVmZmVycwoKc3ViIGZpbGVnbG9iX3RvX3JlIHsKCiAgICAjIG1vZGlmaWVkIChjb3JyZWN0ZWQpIGZyb20gdmVyc2lvbiBpbiBmaW5kMnBlcmwKICAgIG15ICR4ID0gc2hpZnQ7CiAgICAkeCA9fiBzLyhbLlwvXlwkKCldKS9cXCQxL2c7ICAgICMgZXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycwogICAgJHggPX4gcy9cKi8uKi9nOyAgICAgICAgICAgICAgICAjICcqJyAtPiAnLionCiAgICAkeCA9fiBzL1w/Ly4vZzsgICAgICAgICAgICAgICAgICMgJz8nIC0+ICcuJwogICAgcmV0dXJuICJeJHhcXHoiOyAgICAgICAgICAgICAgICAjIG1hdGNoIHdob2xlIHdvcmQKfSAjIyBlbmQgc3ViIGZpbGVnbG9iX3RvX3JlCgpzdWIgbWFrZV9sb2dmaWxlX2hlYWRlciB7CiAgICBteSAoICRyT3B0cywgJGNvbmZpZ19maWxlLCAkcnJhd19vcHRpb25zLCAkV2luZG93c190eXBlLCAkcmVhZGFibGVfb3B0aW9ucyApCiAgICAgID0gQF87CgogICAgIyBOb3RlOiB0aGUgcHVuY3R1YXRpb24gdmFyaWFibGUgJyRdJyBpcyBub3QgaW4gb2xkZXIgdmVyc2lvbnMgb2YKICAgICMgRW5nbGlzaC5wbSBzbyBsZWF2ZSBpdCBhcyBpcyB0byBhdm9pZCBmYWlsaW5nIGluc3RhbGxhdGlvbiB0ZXN0cy4KICAgIG15ICRtc2cgPQoicGVybHRpZHkgdmVyc2lvbiAkVkVSU0lPTiBsb2cgZmlsZSBvbiBhICRPU05BTUUgc3lzdGVtLCBPTERfUEVSTF9WRVJTSU9OPSRdXG4iOwogICAgaWYgKCRXaW5kb3dzX3R5cGUpIHsKICAgICAgICAkbXNnIC49ICJXaW5kb3dzIHR5cGUgaXMgJFdpbmRvd3NfdHlwZVxuIjsKICAgIH0KICAgIG15ICRvcHRpb25zX3N0cmluZyA9IGpvaW4oIFNQQUNFLCBAeyRycmF3X29wdGlvbnN9ICk7CgogICAgaWYgKCBkZWZpbmVkKCRjb25maWdfZmlsZSkgKSB7CiAgICAgICAgJG1zZyAuPSAiRm91bmQgQ29uZmlndXJhdGlvbiBGaWxlID4+PiAkY29uZmlnX2ZpbGUgXG4iOwogICAgfQogICAgJG1zZyAuPSAiQ29uZmlndXJhdGlvbiBhbmQgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgZm9yIHRoaXMgcnVuOlxuIjsKICAgICRtc2cgLj0gIiRvcHRpb25zX3N0cmluZ1xuIjsKCiAgICBpZiAoICRyT3B0cy0+eydzaG93LW9wdGlvbnMnfSApIHsKICAgICAgICAkck9wdHMtPnsnbG9nZmlsZSd9ID0gMTsgICAgIyBmb3JjZSBsb2dmaWxlIHRvIGJlIHNhdmVkCiAgICAgICAgJG1zZyAuPSAiRmluYWwgcGFyYW1ldGVyIHNldCBmb3IgdGhpcyBydW5cbiI7CiAgICAgICAgJG1zZyAuPSAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iOwoKICAgICAgICAkbXNnIC49ICRyZWFkYWJsZV9vcHRpb25zOwoKICAgICAgICAkbXNnIC49ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7CiAgICB9CiAgICAkbXNnIC49ICJUbyBmaW5kIGVycm9yIG1lc3NhZ2VzIHNlYXJjaCBmb3IgJ1dBUk5JTkcnIHdpdGggeW91ciBlZGl0b3JcbiI7CiAgICByZXR1cm4gJG1zZzsKfSAjIyBlbmQgc3ViIG1ha2VfbG9nZmlsZV9oZWFkZXIKCnN1YiBnZW5lcmF0ZV9vcHRpb25zIHsKCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAjIEdlbmVyYXRlIGFuZCByZXR1cm4gcmVmZXJlbmNlcyB0bzoKICAgICMgIEBvcHRpb25fc3RyaW5nIC0gdGhlIGxpc3Qgb2Ygb3B0aW9ucyB0byBiZSBwYXNzZWQgdG8gR2V0b3B0OjpMb25nCiAgICAjICBAZGVmYXVsdHMgLSB0aGUgbGlzdCBvZiBkZWZhdWx0IG9wdGlvbnMKICAgICMgICVleHBhbnNpb24gLSBhIGhhc2ggc2hvd2luZyBob3cgYWxsIGFiYnJldmlhdGlvbnMgYXJlIGV4cGFuZGVkCiAgICAjICAlY2F0ZWdvcnkgLSBhIGhhc2ggZ2l2aW5nIHRoZSBnZW5lcmFsIGNhdGVnb3J5IG9mIGVhY2ggb3B0aW9uCiAgICAjICAlb3B0aW9uX3JhbmdlIC0gYSBoYXNoIGdpdmluZyB0aGUgdmFsaWQgcmFuZ2VzIG9mIGNlcnRhaW4gb3B0aW9ucwoKICAgICMgTm90ZTogYSBmZXcgb3B0aW9ucyBhcmUgbm90IGRvY3VtZW50ZWQgaW4gdGhlIG1hbiBwYWdlIGFuZCB1c2FnZQogICAgIyBtZXNzYWdlLiBUaGlzIGlzIGJlY2F1c2UgdGhlc2UgYXJlIGRlcHJlY2F0ZWQsIGV4cGVyaW1lbnRhbCBvciBkZWJ1ZwogICAgIyBvcHRpb25zIGFuZCBtYXkgb3IgbWF5IG5vdCBiZSByZXRhaW5lZCBpbiBmdXR1cmUgdmVyc2lvbnM6CgogICAgIyBUaGVzZSB1bmRvY3VtZW50ZWQgZmxhZ3MgYXJlIGFjY2VwdGVkIGJ1dCBub3QgdXNlZDoKICAgICMgLS1jaGVjay1zeW50YXgKICAgICMgLS1mdXp6eS1saW5lLWxlbmd0aAogICAgIwogICAgIyBUaGVzZSB1bmRvY3VtZW50ZWQgZmxhZ3MgYXJlIGZvciBkZWJ1Z2dpbmc6CiAgICAjIC0tcmVjb21iaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB1c2VkIHRvIGRlYnVnIGxpbmUgYnJlYWtzCiAgICAjIC0tc2hvcnQtY29uY2F0ZW5hdGlvbi1pdGVtLWxlbmd0aCAgICAgIyB1c2VkIHRvIGJyZWFrIGEgJy4nIGNoYWluCiAgICAjCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgogICAgIyBoZXJlIGlzIGEgc3VtbWFyeSBvZiB0aGUgR2V0b3B0IGNvZGVzOgogICAgIyA8bm9uZT4gZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudAogICAgIyA9cyB0YWtlcyBhIG1hbmRhdG9yeSBzdHJpbmcKICAgICMgOnMgdGFrZXMgYW4gb3B0aW9uYWwgc3RyaW5nICAoRE8gTk9UIFVTRSAtIGZpbGVuYW1lcyB3aWxsIGdldCBlYXRlbiB1cCkKICAgICMgPWkgdGFrZXMgYSBtYW5kYXRvcnkgaW50ZWdlcgogICAgIyA6aSB0YWtlcyBhbiBvcHRpb25hbCBpbnRlZ2VyIChOT1QgUkVDT01NRU5ERUQgLSBjYW4gY2F1c2UgdHJvdWJsZSkKICAgICMgISBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50IGFuZCBtYXkgYmUgbmVnYXRlZAogICAgIyAgaS5lLiwgLWZvbyBhbmQgLW5vZm9vIGFyZSBhbGxvd2VkCiAgICAjIGEgZG91YmxlIGRhc2ggc2lnbmFscyB0aGUgZW5kIG9mIHRoZSBvcHRpb25zIGxpc3QKICAgICMKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBEZWZpbmUgdGhlIG9wdGlvbiBzdHJpbmcgcGFzc2VkIHRvIEdldE9wdGlvbnMuCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBteSBAb3B0aW9uX3N0cmluZyAgID0gKCk7CiAgICBteSAlZXhwYW5zaW9uICAgICAgID0gKCk7CiAgICBteSAlb3B0aW9uX2NhdGVnb3J5ID0gKCk7CiAgICBteSAlb3B0aW9uX3JhbmdlICAgID0gKCk7CiAgICBteSAlaW50ZWdlcl9vcHRpb25fcmFuZ2U7CgogICAgIyBuYW1lcyBvZiBjYXRlZ29yaWVzIGluIG1hbnVhbAogICAgIyBsZWFkaW5nIGludGVnZXJzIHdpbGwgYWxsb3cgc29ydGluZwogICAgbXkgQGNhdGVnb3J5X25hbWUgPSAoCiAgICAgICAgJzAuIEkvTyBjb250cm9sJywKICAgICAgICAnMS4gQmFzaWMgZm9ybWF0dGluZyBvcHRpb25zJywKICAgICAgICAnMi4gQ29kZSBpbmRlbnRhdGlvbiBjb250cm9sJywKICAgICAgICAnMy4gV2hpdGVzcGFjZSBjb250cm9sJywKICAgICAgICAnNC4gQ29tbWVudCBjb250cm9scycsCiAgICAgICAgJzUuIExpbmVicmVhayBjb250cm9scycsCiAgICAgICAgJzYuIENvbnRyb2xsaW5nIGxpc3QgZm9ybWF0dGluZycsCiAgICAgICAgJzcuIFJldGFpbmluZyBvciBpZ25vcmluZyBleGlzdGluZyBsaW5lIGJyZWFrcycsCiAgICAgICAgJzguIEJsYW5rIGxpbmUgY29udHJvbCcsCiAgICAgICAgJzkuIE90aGVyIGNvbnRyb2xzJywKICAgICAgICAnMTAuIEhUTUwgb3B0aW9ucycsCiAgICAgICAgJzExLiBwb2QyaHRtbCBvcHRpb25zJywKICAgICAgICAnMTIuIENvbnRyb2xsaW5nIEhUTUwgcHJvcGVydGllcycsCiAgICAgICAgJzEzLiBEZWJ1Z2dpbmcnLAogICAgKTsKCiAgICAjICBUaGVzZSBvcHRpb25zIGFyZSBwYXJzZWQgZGlyZWN0bHkgYnkgcGVybHRpZHk6CiAgICAjICAgIGhlbHAgaAogICAgIyAgICB2ZXJzaW9uIHYKICAgICMgIEhvd2V2ZXIsIHRoZXkgYXJlIGluY2x1ZGVkIGluIHRoZSBvcHRpb24gc2V0IHNvIHRoYXQgdGhleSB3aWxsCiAgICAjICBiZSBzZWVuIGluIHRoZSBvcHRpb25zIGR1bXAuCgogICAgIyBUaGVzZSBsb25nIG9wdGlvbiBuYW1lcyBoYXZlIG5vIGFiYnJldmlhdGlvbnMgb3IgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5CiAgICBAb3B0aW9uX3N0cmluZyA9IHF3KAogICAgICBodG1sIQogICAgICBub3Byb2ZpbGUKICAgICAgbm8tcHJvZmlsZQogICAgICBucHJvCiAgICAgIHJlY29tYmluZSEKICAgICAgbm90aWR5CiAgICApOwoKICAgIG15ICRjYXRlZ29yeSA9IDEzOyAgICAjIERlYnVnZ2luZwogICAgZm9yZWFjaCAoQG9wdGlvbl9zdHJpbmcpIHsKICAgICAgICBteSAkb3B0ID0gJF87ICAgICAjIG11c3QgYXZvaWQgY2hhbmdpbmcgdGhlIGFjdHVhbCBmbGFnCiAgICAgICAgJG9wdCA9fiBzLyEkLy87CiAgICAgICAgJG9wdGlvbl9jYXRlZ29yeXskb3B0fSA9ICRjYXRlZ29yeV9uYW1lWyRjYXRlZ29yeV07CiAgICB9CgogICAgJGNhdGVnb3J5ID0gMTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBIVE1MCiAgICAkb3B0aW9uX2NhdGVnb3J5e2h0bWx9ID0gJGNhdGVnb3J5X25hbWVbJGNhdGVnb3J5XTsKCiAgICAjIHJvdXRpbmUgdG8gaW5zdGFsbCBhbmQgY2hlY2sgb3B0aW9ucwogICAgbXkgJGFkZF9vcHRpb24gPSBzdWIgewogICAgICAgIG15ICggJGxvbmdfbmFtZSwgJHNob3J0X25hbWUsICRmbGFnICkgPSBAXzsKICAgICAgICBwdXNoIEBvcHRpb25fc3RyaW5nLCAkbG9uZ19uYW1lIC4gJGZsYWc7CiAgICAgICAgJG9wdGlvbl9jYXRlZ29yeXskbG9uZ19uYW1lfSA9ICRjYXRlZ29yeV9uYW1lWyRjYXRlZ29yeV07CiAgICAgICAgaWYgKCRzaG9ydF9uYW1lKSB7CiAgICAgICAgICAgIGlmICggJGV4cGFuc2lvbnskc2hvcnRfbmFtZX0gKSB7CiAgICAgICAgICAgICAgICBteSAkZXhpc3RpbmdfbmFtZSA9ICRleHBhbnNpb257JHNob3J0X25hbWV9LT5bMF07CiAgICAgICAgICAgICAgICBEaWUoCiJyZWRlZmluaW5nIGFiYnJldmlhdGlvbiAkc2hvcnRfbmFtZSBmb3IgJGxvbmdfbmFtZTsgYWxyZWFkeSB1c2VkIGZvciAkZXhpc3RpbmdfbmFtZVxuIgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkZXhwYW5zaW9ueyRzaG9ydF9uYW1lfSA9IFskbG9uZ19uYW1lXTsKICAgICAgICAgICAgaWYgKCAkZmxhZyBlcSAnIScgKSB7CiAgICAgICAgICAgICAgICBteSAkbnNob3J0X25hbWUgPSAnbicgLiAkc2hvcnRfbmFtZTsKICAgICAgICAgICAgICAgIG15ICRub2xvbmdfbmFtZSA9ICdubycgLiAkbG9uZ19uYW1lOwogICAgICAgICAgICAgICAgaWYgKCAkZXhwYW5zaW9ueyRuc2hvcnRfbmFtZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJGV4aXN0aW5nX25hbWUgPSAkZXhwYW5zaW9ueyRuc2hvcnRfbmFtZX0tPlswXTsKICAgICAgICAgICAgICAgICAgICBEaWUoCiJhdHRlbXB0aW5nIHRvIHJlZGVmaW5lIGFiYnJldmlhdGlvbiAkbnNob3J0X25hbWUgZm9yICRub2xvbmdfbmFtZTsgYWxyZWFkeSB1c2VkIGZvciAkZXhpc3RpbmdfbmFtZVxuIgogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkZXhwYW5zaW9ueyRuc2hvcnRfbmFtZX0gPSBbJG5vbG9uZ19uYW1lXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9OyAjIyBlbmQgJGFkZF9vcHRpb24gPSBzdWIKCiAgICAjIEluc3RhbGwgbG9uZyBvcHRpb24gbmFtZXMgd2hpY2ggaGF2ZSBhIHNpbXBsZSBhYmJyZXZpYXRpb24uCiAgICAjIE9wdGlvbnMgd2l0aCBjb2RlICchJyBnZXQgc3RhbmRhcmQgbmVnYXRpb24gKCdubycgZm9yIGxvbmcgbmFtZXMsCiAgICAjICduJyBmb3IgYWJicmV2aWF0aW9ucykuICBDYXRlZ29yaWVzIGZvbGxvdyB0aGUgbWFudWFsLgoKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgJGNhdGVnb3J5ID0gMDsgICAgIyBJL09fQ29udHJvbAogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAkYWRkX29wdGlvbi0+KCAnYmFja3VwLWFuZC1tb2RpZnktaW4tcGxhY2UnLCAnYicsICAgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdiYWNrdXAtZmlsZS1leHRlbnNpb24nLCAgICAgICdiZXh0JywgICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICdiYWNrdXAtbWV0aG9kJywgICAgICAgICAgICAgICdibScsICAgICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICdjaGFyYWN0ZXItZW5jb2RpbmcnLCAgICAgICAgICdlbmMnLCAgICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICdmb3JjZS1yZWFkLWJpbmFyeScsICAgICAgICAgICdmJywgICAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2Zvcm1hdCcsICAgICAgICAgICAgICAgICAgICAgJ2ZtdCcsICAgJz1zJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2l0ZXJhdGlvbnMnLCAgICAgICAgICAgICAgICAgJ2l0JywgICAgJz1pJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2xvZ2ZpbGUnLCAgICAgICAgICAgICAgICAgICAgJ2xvZycsICAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnbG9nZmlsZS1nYXAnLCAgICAgICAgICAgICAgICAnZycsICAgICAnOmknICk7CiAgICAkYWRkX29wdGlvbi0+KCAnb3V0ZmlsZScsICAgICAgICAgICAgICAgICAgICAnbycsICAgICAnPXMnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnb3V0cHV0LWZpbGUtZXh0ZW5zaW9uJywgICAgICAnb2V4dCcsICAnPXMnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnb3V0cHV0LXBhdGgnLCAgICAgICAgICAgICAgICAnb3BhdGgnLCAnPXMnICk7CiAgICAkYWRkX29wdGlvbi0+KCAncHJvZmlsZScsICAgICAgICAgICAgICAgICAgICAncHJvJywgICAnPXMnICk7CiAgICAkYWRkX29wdGlvbi0+KCAncXVpZXQnLCAgICAgICAgICAgICAgICAgICAgICAncScsICAgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdzdGFuZGFyZC1lcnJvci1vdXRwdXQnLCAgICAgICdzZScsICAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ3N0YW5kYXJkLW91dHB1dCcsICAgICAgICAgICAgJ3N0JywgICAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAndXNlLXVuaWNvZGUtZ2NzdHJpbmcnLCAgICAgICAnZ2NzJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICd3YXJuaW5nLW91dHB1dCcsICAgICAgICAgICAgICd3JywgICAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2FkZC10ZXJtaW5hbC1uZXdsaW5lJywgICAgICAgJ2F0bmwnLCAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnbGluZS1yYW5nZS10aWR5JywgICAgICAgICAgICAnbHJ0JywgICAnPXMnICk7CiAgICAkYWRkX29wdGlvbi0+KCAndGltZW91dC1pbi1zZWNvbmRzJywgICAgICAgICAndG9zJywgICAnPWknICk7CgogICAgIyBvcHRpb25zIHdoaWNoIGFyZSBib3RoIHRvZ2dsZSBzd2l0Y2hlcyBhbmQgdmFsdWVzIG1vdmVkIGhlcmUKICAgICMgdG8gaGlkZSBmcm9tIHRpZHl2aWV3ICh3aGljaCBkb2VzIG5vdCBzaG93IGNhdGVnb3J5IDAgZmxhZ3MpOgogICAgIyAtb2xlIG1vdmVkIGhlcmUgZnJvbSBjYXRlZ29yeSAxCiAgICAjIC1zaWwgbW92ZWQgaGVyZSBmcm9tIGNhdGVnb3J5IDIKICAgICRhZGRfb3B0aW9uLT4oICdvdXRwdXQtbGluZS1lbmRpbmcnLCAgICAgICAgICdvbGUnLCAnPXMnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnc3RhcnRpbmctaW5kZW50YXRpb24tbGV2ZWwnLCAnc2lsJywgJz1pJyApOwoKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICRjYXRlZ29yeSA9IDE7ICAgICMgQmFzaWMgZm9ybWF0dGluZyBvcHRpb25zCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAkYWRkX29wdGlvbi0+KCAnY2hlY2stc3ludGF4JywgICAgICAgICAgICAgICAgICdzeW4nLCAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnZW50YWItbGVhZGluZy13aGl0ZXNwYWNlJywgICAgICdldCcsICAgJz1pJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2luZGVudC1jb2x1bW5zJywgICAgICAgICAgICAgICAnaScsICAgICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdtYXhpbXVtLWxpbmUtbGVuZ3RoJywgICAgICAgICAgJ2wnLCAgICAnPWknICk7CiAgICAkYWRkX29wdGlvbi0+KCAndmFyaWFibGUtbWF4aW11bS1saW5lLWxlbmd0aCcsICd2bWxsJywgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnd2hpdGVzcGFjZS1jeWNsZScsICAgICAgICAgICAgICd3YycsICAgJz1pJyApOwogICAgJGFkZF9vcHRpb24tPiggJ3Blcmwtc3ludGF4LWNoZWNrLWZsYWdzJywgICAgICAncHNjZicsICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICdwcmVzZXJ2ZS1saW5lLWVuZGluZ3MnLCAgICAgICAgJ3BsZScsICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICd0YWJzJywgICAgICAgICAgICAgICAgICAgICAgICAgJ3QnLCAgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdkZWZhdWx0LXRhYnNpemUnLCAgICAgICAgICAgICAgJ2R0JywgICAnPWknICk7CiAgICAkYWRkX29wdGlvbi0+KCAnZXh0ZW5kZWQtc3ludGF4JywgICAgICAgICAgICAgICd4cycsICAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnYXNzZXJ0LXRpZHknLCAgICAgICAgICAgICAgICAgICdhc3QnLCAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnYXNzZXJ0LXVudGlkeScsICAgICAgICAgICAgICAgICdhc3UnLCAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnZW5jb2RlLW91dHB1dC1zdHJpbmdzJywgICAgICAgICdlb3MnLCAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnc3ViLWFsaWFzLWxpc3QnLCAgICAgICAgICAgICAgICdzYWwnLCAgJz1zJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2dyZXAtYWxpYXMtbGlzdCcsICAgICAgICAgICAgICAnZ2FsJywgICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICdncmVwLWFsaWFzLWV4Y2x1c2lvbi1saXN0JywgICAgJ2dheGwnLCAnPXMnICk7CiAgICAkYWRkX29wdGlvbi0+KCAndXNlLWZlYXR1cmUnLCAgICAgICAgICAgICAgICAgICd1ZicsICAgJz1zJyApOwoKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICRjYXRlZ29yeSA9IDI7ICAgICMgQ29kZSBpbmRlbnRhdGlvbiBjb250cm9sCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAkYWRkX29wdGlvbi0+KCAnY29udGludWF0aW9uLWluZGVudGF0aW9uJywgICAgICAgICAgICAgJ2NpJywgICAgJz1pJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2V4dGVuZGVkLWNvbnRpbnVhdGlvbi1pbmRlbnRhdGlvbicsICAgICd4Y2knLCAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ21pbmltaXplLWNvbnRpbnVhdGlvbi1pbmRlbnRhdGlvbicsICAgICdtY2knLCAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2xpbmUtdXAtcGFyZW50aGVzZXMnLCAgICAgICAgICAgICAgICAgICdscCcsICAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2V4dGVuZGVkLWxpbmUtdXAtcGFyZW50aGVzZXMnLCAgICAgICAgICd4bHAnLCAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2xpbmUtdXAtcGFyZW50aGVzZXMtZXhjbHVzaW9uLWxpc3QnLCAgICdscHhsJywgICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICdsaW5lLXVwLXBhcmVudGhlc2VzLWluY2x1c2lvbi1saXN0JywgICAnbHBpbCcsICAnPXMnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnb3V0ZGVudC1rZXl3b3JkLWxpc3QnLCAgICAgICAgICAgICAgICAgJ29rd2wnLCAgJz1zJyApOwogICAgJGFkZF9vcHRpb24tPiggJ291dGRlbnQta2V5d29yZHMnLCAgICAgICAgICAgICAgICAgICAgICdva3cnLCAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ291dGRlbnQtbGFiZWxzJywgICAgICAgICAgICAgICAgICAgICAgICdvbGEnLCAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ291dGRlbnQtbG9uZy1xdW90ZXMnLCAgICAgICAgICAgICAgICAgICdvbHEnLCAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2luZGVudC1jbG9zaW5nLWJyYWNlJywgICAgICAgICAgICAgICAgICdpY2InLCAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2luZGVudC1sZWFkaW5nLXNlbWljb2xvbicsICAgICAgICAgICAgICdpbHMnLCAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2Nsb3NpbmctdG9rZW4taW5kZW50YXRpb24nLCAgICAgICAgICAgICdjdGknLCAgICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdjbG9zaW5nLXBhcmVuLWluZGVudGF0aW9uJywgICAgICAgICAgICAnY3BpJywgICAnPWknICk7CiAgICAkYWRkX29wdGlvbi0+KCAnY2xvc2luZy1icmFjZS1pbmRlbnRhdGlvbicsICAgICAgICAgICAgJ2NiaScsICAgJz1pJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2Nsb3Npbmctc3F1YXJlLWJyYWNrZXQtaW5kZW50YXRpb24nLCAgICdjc2JpJywgICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdicmFjZS1sZWZ0LWFuZC1pbmRlbnQnLCAgICAgICAgICAgICAgICAnYmxpJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdicmFjZS1sZWZ0LWFuZC1pbmRlbnQtbGlzdCcsICAgICAgICAgICAnYmxpbCcsICAnPXMnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnYnJhY2UtbGVmdC1hbmQtaW5kZW50LWV4Y2x1c2lvbi1saXN0JywgJ2JsaXhsJywgJz1zJyApOwoKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICRjYXRlZ29yeSA9IDM7ICAgICMgV2hpdGVzcGFjZSBjb250cm9sCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAkYWRkX29wdGlvbi0+KCAnYWRkLXRyYWlsaW5nLWNvbW1hcycsICAgICAgICAgICAgICAgICAgICAgICAnYXRjJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdhZGQtbG9uZS10cmFpbGluZy1jb21tYXMnLCAgICAgICAgICAgICAgICAgICdhbHRjJywgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2FkZC1zZW1pY29sb25zJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzYycsICAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnYWRkLXdoaXRlc3BhY2UnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXdzJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdibG9jay1icmFjZS10aWdodG5lc3MnLCAgICAgICAgICAgICAgICAgICAgICdiYnQnLCAgICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdicmFjZS10aWdodG5lc3MnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICdidCcsICAgICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdkZWxldGUtb2xkLXdoaXRlc3BhY2UnLCAgICAgICAgICAgICAgICAgICAgICdkd3MnLCAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2RlbGV0ZS1yZXBlYXRlZC1jb21tYXMnLCAgICAgICAgICAgICAgICAgICAgJ2RyYycsICAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnZGVsZXRlLXRyYWlsaW5nLWNvbW1hcycsICAgICAgICAgICAgICAgICAgICAnZHRjJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdkZWxldGUtbG9uZS10cmFpbGluZy1jb21tYXMnLCAgICAgICAgICAgICAgICdkbHRjJywgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2RlbGV0ZS13ZWxkLWludGVyZmVyaW5nLWNvbW1hcycsICAgICAgICAgICAgJ2R3aWMnLCAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnZGVsZXRlLXNlbWljb2xvbnMnLCAgICAgICAgICAgICAgICAgICAgICAgICAnZHNtJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdmdW5jdGlvbi1wYXJlbi12ZXJ0aWNhbC1hbGlnbm1lbnQnLCAgICAgICAgICdmcHZhJywgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2RlbGF5LXRyYWlsaW5nLWNvbW1hLW9wZXJhdGlvbnMnLCAgICAgICAgICAgJ2R0Y28nLCAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAna2V5d29yZC1wYXJlbi1pbm5lci10aWdodG5lc3MnLCAgICAgICAgICAgICAna3BpdCcsICAnPWknICk7CiAgICAkYWRkX29wdGlvbi0+KCAna2V5d29yZC1wYXJlbi1pbm5lci10aWdodG5lc3MtbGlzdCcsICAgICAgICAna3BpdGwnLCAnPXMnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnbG9naWNhbC1wYWRkaW5nJywgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9wJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdtdWx0aXBsZS10b2tlbi10aWdodG5lc3MnLCAgICAgICAgICAgICAgICAgICdtdXR0JywgICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICdub3NwYWNlLWFmdGVyLWtleXdvcmQnLCAgICAgICAgICAgICAgICAgICAgICduc2FrJywgICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICdub3dhbnQtbGVmdC1zcGFjZScsICAgICAgICAgICAgICAgICAgICAgICAgICdud2xzJywgICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICdub3dhbnQtcmlnaHQtc3BhY2UnLCAgICAgICAgICAgICAgICAgICAgICAgICdud3JzJywgICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICdwYXJlbi10aWdodG5lc3MnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICdwdCcsICAgICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdzcGFjZS1hZnRlci1rZXl3b3JkJywgICAgICAgICAgICAgICAgICAgICAgICdzYWsnLCAgICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICdzcGFjZS1mb3Itc2VtaWNvbG9uJywgICAgICAgICAgICAgICAgICAgICAgICdzZnMnLCAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ3NwYWNlLWZ1bmN0aW9uLXBhcmVuJywgICAgICAgICAgICAgICAgICAgICAgJ3NmcCcsICAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnc3BhY2Uta2V5d29yZC1wYXJlbicsICAgICAgICAgICAgICAgICAgICAgICAnc2twJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdzcGFjZS10ZXJtaW5hbC1zZW1pY29sb24nLCAgICAgICAgICAgICAgICAgICdzdHMnLCAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ3NxdWFyZS1icmFja2V0LXRpZ2h0bmVzcycsICAgICAgICAgICAgICAgICAgJ3NidCcsICAgJz1pJyApOwogICAgJGFkZF9vcHRpb24tPiggJ3NxdWFyZS1icmFja2V0LXZlcnRpY2FsLXRpZ2h0bmVzcycsICAgICAgICAgJ3NidnQnLCAgJz1pJyApOwogICAgJGFkZF9vcHRpb24tPiggJ3NxdWFyZS1icmFja2V0LXZlcnRpY2FsLXRpZ2h0bmVzcy1jbG9zaW5nJywgJ3NidnRjJywgJz1pJyApOwogICAgJGFkZF9vcHRpb24tPiggJ3RpZ2h0LXNlY3JldC1vcGVyYXRvcnMnLCAgICAgICAgICAgICAgICAgICAgJ3RzbycsICAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAndHJpbS1xdycsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHF3JywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICd0cmltLXBvZCcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cnAnLCAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ3dhbnQtbGVmdC1zcGFjZScsICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dscycsICAgJz1zJyApOwogICAgJGFkZF9vcHRpb24tPiggJ3dhbnQtcmlnaHQtc3BhY2UnLCAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dycycsICAgJz1zJyApOwogICAgJGFkZF9vcHRpb24tPiggJ3dhbnQtdHJhaWxpbmctY29tbWFzJywgICAgICAgICAgICAgICAgICAgICAgJ3d0YycsICAgJz1zJyApOwogICAgJGFkZF9vcHRpb24tPiggJ3NwYWNlLXByb3RvdHlwZS1wYXJlbicsICAgICAgICAgICAgICAgICAgICAgJ3NwcCcsICAgJz1pJyApOwogICAgJGFkZF9vcHRpb24tPiggJ3NwYWNlLXNpZ25hdHVyZS1wYXJlbicsICAgICAgICAgICAgICAgICAgICAgJ3NzcCcsICAgJz1pJyApOwogICAgJGFkZF9vcHRpb24tPiggJ3ZhbGlnbi1jb2RlJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZjJywgICAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAndmFsaWduLWJsb2NrLWNvbW1lbnRzJywgICAgICAgICAgICAgICAgICAgICAndmJjJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICd2YWxpZ24tc2lkZS1jb21tZW50cycsICAgICAgICAgICAgICAgICAgICAgICd2c2MnLCAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ3ZhbGlnbi1leGNsdXNpb24tbGlzdCcsICAgICAgICAgICAgICAgICAgICAgJ3Z4bCcsICAgJz1zJyApOwogICAgJGFkZF9vcHRpb24tPiggJ3ZhbGlnbi1pbmNsdXNpb24tbGlzdCcsICAgICAgICAgICAgICAgICAgICAgJ3ZpbCcsICAgJz1zJyApOwogICAgJGFkZF9vcHRpb24tPiggJ3ZhbGlnbi1pZi11bmxlc3MnLCAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZpdScsICAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAndmFsaWduLXNpZ25lZC1udW1iZXJzJywgICAgICAgICAgICAgICAgICAgICAndnNuJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICd2YWxpZ24tc2lnbmVkLW51bWJlcnMtbGltaXQnLCAgICAgICAgICAgICAgICd2c25sJywgICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICd2YWxpZ24td2lkZS1lcXVhbHMnLCAgICAgICAgICAgICAgICAgICAgICAgICd2d2UnLCAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2V4dGVuZGVkLWJsb2NrLXRpZ2h0bmVzcycsICAgICAgICAgICAgICAgICAgJ3hidCcsICAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnZXh0ZW5kZWQtYmxvY2stdGlnaHRuZXNzLWxpc3QnLCAgICAgICAgICAgICAneGJ0bCcsICAnPXMnICk7CiAgICAkYWRkX29wdGlvbi0+KCAncXctYXMtZnVuY3Rpb24nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAncXdhZicsICAnIScgKTsKCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAkY2F0ZWdvcnkgPSA0OyAgICAjIENvbW1lbnQgY29udHJvbHMKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICRhZGRfb3B0aW9uLT4oICdjbG9zaW5nLXNpZGUtY29tbWVudC1lbHNlLWZsYWcnLCAgICAgICdjc2NlJywgICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdjbG9zaW5nLXNpZGUtY29tbWVudC1pbnRlcnZhbCcsICAgICAgICdjc2NpJywgICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdjbG9zaW5nLXNpZGUtY29tbWVudC1saXN0JywgICAgICAgICAgICdjc2NsJywgICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICdjbG9zaW5nLXNpZGUtY29tbWVudC1leGNsdXNpb24tbGlzdCcsICdjc2N4bCcsICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICdjbG9zaW5nLXNpZGUtY29tbWVudC1tYXhpbXVtLXRleHQnLCAgICdjc2N0JywgICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdjbG9zaW5nLXNpZGUtY29tbWVudC1wcmVmaXgnLCAgICAgICAgICdjc2NwJywgICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICdjbG9zaW5nLXNpZGUtY29tbWVudC13YXJuaW5ncycsICAgICAgICdjc2N3JywgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2Nsb3Npbmctc2lkZS1jb21tZW50cycsICAgICAgICAgICAgICAgJ2NzYycsICAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnY2xvc2luZy1zaWRlLWNvbW1lbnRzLWJhbGFuY2VkJywgICAgICAnY3NjYicsICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdjb2RlLXNraXBwaW5nJywgICAgICAgICAgICAgICAgICAgICAgICdjcycsICAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2NvZGUtc2tpcHBpbmctYmVnaW4nLCAgICAgICAgICAgICAgICAgJ2NzYicsICAgJz1zJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2NvZGUtc2tpcHBpbmctZW5kJywgICAgICAgICAgICAgICAgICAgJ2NzZScsICAgJz1zJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2Zvcm1hdC1za2lwcGluZycsICAgICAgICAgICAgICAgICAgICAgJ2ZzJywgICAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnZm9ybWF0LXNraXBwaW5nLWJlZ2luJywgICAgICAgICAgICAgICAnZnNiJywgICAnPXMnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnZm9ybWF0LXNraXBwaW5nLWVuZCcsICAgICAgICAgICAgICAgICAnZnNlJywgICAnPXMnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnaGFuZ2luZy1zaWRlLWNvbW1lbnRzJywgICAgICAgICAgICAgICAnaHNjJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdpbmRlbnQtYmxvY2stY29tbWVudHMnLCAgICAgICAgICAgICAgICdpYmMnLCAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2luZGVudC1zcGFjZWQtYmxvY2stY29tbWVudHMnLCAgICAgICAgJ2lzYmMnLCAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnZml4ZWQtcG9zaXRpb24tc2lkZS1jb21tZW50JywgICAgICAgICAnZnBzYycsICAnPWknICk7CiAgICAkYWRkX29wdGlvbi0+KCAnbWluaW11bS1zcGFjZS10by1jb21tZW50JywgICAgICAgICAgICAnbXNjJywgICAnPWknICk7CiAgICAkYWRkX29wdGlvbi0+KCAnbm9uLWluZGVudGluZy1icmFjZXMnLCAgICAgICAgICAgICAgICAnbmliJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdub24taW5kZW50aW5nLWJyYWNlLXByZWZpeCcsICAgICAgICAgICduaWJwJywgICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICdvdXRkZW50LWxvbmctY29tbWVudHMnLCAgICAgICAgICAgICAgICdvbGMnLCAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ291dGRlbnQtc3RhdGljLWJsb2NrLWNvbW1lbnRzJywgICAgICAgJ29zYmMnLCAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnc3RhdGljLWJsb2NrLWNvbW1lbnQtcHJlZml4JywgICAgICAgICAnc2JjcCcsICAnPXMnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnc3RhdGljLWJsb2NrLWNvbW1lbnRzJywgICAgICAgICAgICAgICAnc2JjJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdzdGF0aWMtc2lkZS1jb21tZW50LXByZWZpeCcsICAgICAgICAgICdzc2NwJywgICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICdzdGF0aWMtc2lkZS1jb21tZW50cycsICAgICAgICAgICAgICAgICdzc2MnLCAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2lnbm9yZS1zaWRlLWNvbW1lbnQtbGVuZ3RocycsICAgICAgICAgJ2lzY2wnLCAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnaWdub3JlLXBlcmxjcml0aWMtY29tbWVudHMnLCAgICAgICAgICAnaXBjJywgICAnIScgKTsKCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAkY2F0ZWdvcnkgPSA1OyAgICAjIExpbmVicmVhayBjb250cm9scwogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgJGFkZF9vcHRpb24tPiggJ2FkZC1uZXdsaW5lcycsICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmwnLCAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2Jsb2NrLWJyYWNlLXZlcnRpY2FsLXRpZ2h0bmVzcycsICAgICAgICAgICdiYnZ0JywgICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdibG9jay1icmFjZS12ZXJ0aWNhbC10aWdodG5lc3MtbGlzdCcsICAgICAnYmJ2dGwnLCAnPXMnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnYnJhY2UtZm9sbG93ZXItdmVydGljYWwtdGlnaHRuZXNzJywgICAgICAgJ2JmdnQnLCAgJz1pJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2JyYWNlLXZlcnRpY2FsLXRpZ2h0bmVzcycsICAgICAgICAgICAgICAgICdidnQnLCAgICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdicmFjZS12ZXJ0aWNhbC10aWdodG5lc3MtY2xvc2luZycsICAgICAgICAnYnZ0YycsICAnPWknICk7CiAgICAkYWRkX29wdGlvbi0+KCAnY3VkZGxlZC1lbHNlJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlJywgICAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnY3VkZGxlZC1ibG9jay1saXN0JywgICAgICAgICAgICAgICAgICAgICAgJ2NibCcsICAgJz1zJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2N1ZGRsZWQtYmxvY2stbGlzdC1leGNsdXNpdmUnLCAgICAgICAgICAgICdjYmx4JywgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2N1ZGRsZWQtYnJlYWstb3B0aW9uJywgICAgICAgICAgICAgICAgICAgICdjYm8nLCAgICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdjdWRkbGVkLXBhcmVuLWJyYWNlJywgICAgICAgICAgICAgICAgICAgICAnY3BiJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdkZWxldGUtb2xkLW5ld2xpbmVzJywgICAgICAgICAgICAgICAgICAgICAnZG5sJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdvcGVuaW5nLWJyYWNlLWFsd2F5cy1vbi1yaWdodCcsICAgICAgICAgICAnYmFyJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdvcGVuaW5nLWJyYWNlLW9uLW5ldy1saW5lJywgICAgICAgICAgICAgICAnYmwnLCAgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdvcGVuaW5nLWhhc2gtYnJhY2UtcmlnaHQnLCAgICAgICAgICAgICAgICAnb2hicicsICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdvcGVuaW5nLXBhcmVuLXJpZ2h0JywgICAgICAgICAgICAgICAgICAgICAnb3ByJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdvcGVuaW5nLXNxdWFyZS1icmFja2V0LXJpZ2h0JywgICAgICAgICAgICAnb3NicicsICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdvcGVuaW5nLWFub255bW91cy1zdWItYnJhY2Utb24tbmV3LWxpbmUnLCAnYXNibCcsICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdvcGVuaW5nLXN1Yi1icmFjZS1vbi1uZXctbGluZScsICAgICAgICAgICAnc2JsJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdwYXJlbi12ZXJ0aWNhbC10aWdodG5lc3MnLCAgICAgICAgICAgICAgICAncHZ0JywgICAnPWknICk7CiAgICAkYWRkX29wdGlvbi0+KCAncGFyZW4tdmVydGljYWwtdGlnaHRuZXNzLWNsb3NpbmcnLCAgICAgICAgJ3B2dGMnLCAgJz1pJyApOwogICAgJGFkZF9vcHRpb24tPiggJ3dlbGQtbmVzdGVkLWNvbnRhaW5lcnMnLCAgICAgICAgICAgICAgICAgICd3bicsICAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ3dlbGQtbmVzdGVkLWV4Y2x1c2lvbi1saXN0JywgICAgICAgICAgICAgICd3bnhsJywgICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICd3ZWxkLWZhdC1jb21tYScsICAgICAgICAgICAgICAgICAgICAgICAgICAnd2ZjJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdzcGFjZS1iYWNrc2xhc2gtcXVvdGUnLCAgICAgICAgICAgICAgICAgICAnc2JxJywgICAnPWknICk7CiAgICAkYWRkX29wdGlvbi0+KCAnc3RhY2stY2xvc2luZy1ibG9jay1icmFjZScsICAgICAgICAgICAgICAgJ3NjYmInLCAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnc3RhY2stY2xvc2luZy1oYXNoLWJyYWNlJywgICAgICAgICAgICAgICAgJ3NjaGInLCAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnc3RhY2stY2xvc2luZy1wYXJlbicsICAgICAgICAgICAgICAgICAgICAgJ3NjcCcsICAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnc3RhY2stY2xvc2luZy1zcXVhcmUtYnJhY2tldCcsICAgICAgICAgICAgJ3Njc2InLCAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnc3RhY2stb3BlbmluZy1oYXNoLWJyYWNlJywgICAgICAgICAgICAgICAgJ3NvaGInLCAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnc3RhY2stb3BlbmluZy1wYXJlbicsICAgICAgICAgICAgICAgICAgICAgJ3NvcCcsICAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnc3RhY2stb3BlbmluZy1zcXVhcmUtYnJhY2tldCcsICAgICAgICAgICAgJ3Nvc2InLCAgJyEnICk7CgogICAgIyBGSVhNRTogLS12dCBhbmQgLS12dGMgYXJlIGFjdHVhbGx5IGV4cGFuc2lvbnMgbm93LCBzbyB0aGVzZSB0d28gbGluZXMKICAgICMgc2hvdWxkIGV2ZW50dWFsbHkgYmUgcmVtb3ZlZC4KICAgICRhZGRfb3B0aW9uLT4oICd2ZXJ0aWNhbC10aWdodG5lc3MnLCAgICAgICAgICd2dCcsICAnPWknICk7CiAgICAkYWRkX29wdGlvbi0+KCAndmVydGljYWwtdGlnaHRuZXNzLWNsb3NpbmcnLCAndnRjJywgJz1pJyApOwoKICAgICRhZGRfb3B0aW9uLT4oICd3YW50LWJyZWFrLWFmdGVyJywgICAgICAgICAgICAgICAgICAgICAgICd3YmEnLCAgICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICd3YW50LWJyZWFrLWJlZm9yZScsICAgICAgICAgICAgICAgICAgICAgICd3YmInLCAgICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICdicmVhay1hZnRlci1hbGwtb3BlcmF0b3JzJywgICAgICAgICAgICAgICdiYWFvJywgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2JyZWFrLWJlZm9yZS1hbGwtb3BlcmF0b3JzJywgICAgICAgICAgICAgJ2JiYW8nLCAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAna2VlcC1pbnRlcmlvci1zZW1pY29sb25zJywgICAgICAgICAgICAgICAna2lzJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdvbmUtbGluZS1ibG9jay1zZW1pY29sb25zJywgICAgICAgICAgICAgICdvbGJzJywgICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdvbmUtbGluZS1ibG9jay1uZXN0aW5nJywgICAgICAgICAgICAgICAgICdvbGJuJywgICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdvbmUtbGluZS1ibG9jay1leGNsdXNpb24tbGlzdCcsICAgICAgICAgICdvbGJ4bCcsICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICdicmVhay1iZWZvcmUtaGFzaC1icmFjZScsICAgICAgICAgICAgICAgICdiYmhiJywgICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdicmVhay1iZWZvcmUtaGFzaC1icmFjZS1hbmQtaW5kZW50JywgICAgICdiYmhiaScsICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdicmVhay1iZWZvcmUtc3F1YXJlLWJyYWNrZXQnLCAgICAgICAgICAgICdiYnNiJywgICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdicmVhay1iZWZvcmUtc3F1YXJlLWJyYWNrZXQtYW5kLWluZGVudCcsICdiYnNiaScsICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdicmVhay1iZWZvcmUtcGFyZW4nLCAgICAgICAgICAgICAgICAgICAgICdiYnAnLCAgICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdicmVhay1iZWZvcmUtcGFyZW4tYW5kLWluZGVudCcsICAgICAgICAgICdiYnBpJywgICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdicmFjZS1sZWZ0LWxpc3QnLCAgICAgICAgICAgICAgICAgICAgICAgICdibGwnLCAgICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICdicmFjZS1sZWZ0LWV4Y2x1c2lvbi1saXN0JywgICAgICAgICAgICAgICdibHhsJywgICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICdicmVhay1hZnRlci1sYWJlbHMnLCAgICAgICAgICAgICAgICAgICAgICdiYWwnLCAgICc9aScgKTsKCiAgICAjIFRoaXMgd2FzIGFuIGV4cGVyaW1lbnQgbWVudGlvbmVkIGluIGdpdCAjNzgsIG9yaWdpbmFsbHkgbmFtZWQgLWJvcGwuIEkKICAgICMgZXhwYW5kZWQgaXQgdG8gYWxzbyBvcGVuIGxvZ2ljYWwgYmxvY2tzLCBiYXNlZCBvbiBnaXQgZGlzY3Vzc2lvbiAjMTAwLAogICAgIyBhbmQgcmVuYW1lZCBpdCAtYm9jcC4gSXQgd29ya3MsIGJ1dCB3aWxsIHJlbWFpbiBjb21tZW50ZWQgb3V0IGR1ZSB0bwogICAgIyBhcHBhcmVudCBsYWNrIG9mIGludGVyZXN0LgogICAgIyAkYWRkX29wdGlvbi0+KCAnYnJlYWstb3Blbi1jb21wYWN0LXBhcmVucycsICdib2NwJywgJz1zJyApOwoKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICRjYXRlZ29yeSA9IDY7ICAgICMgQ29udHJvbGxpbmcgbGlzdCBmb3JtYXR0aW5nCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAkYWRkX29wdGlvbi0+KCAnYnJlYWstYXQtb2xkLWNvbW1hLWJyZWFrcG9pbnRzJywgJ2JvYycsICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdicmVhay1hdC10cmFpbGluZy1jb21tYS10eXBlcycsICAnYnRjdCcsICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICdjb21tYS1hcnJvdy1icmVha3BvaW50cycsICAgICAgICAnY2FiJywgICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdtYXhpbXVtLWZpZWxkcy1wZXItdGFibGUnLCAgICAgICAnbWZ0JywgICc9aScgKTsKCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAkY2F0ZWdvcnkgPSA3OyAgICAjIFJldGFpbmluZyBvciBpZ25vcmluZyBleGlzdGluZyBsaW5lIGJyZWFrcwogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgJGFkZF9vcHRpb24tPiggJ2JyZWFrLWF0LW9sZC1rZXl3b3JkLWJyZWFrcG9pbnRzJywgICAnYm9rJywgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnYnJlYWstYXQtb2xkLWxvZ2ljYWwtYnJlYWtwb2ludHMnLCAgICdib2wnLCAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdicmVhay1hdC1vbGQtbWV0aG9kLWJyZWFrcG9pbnRzJywgICAgJ2JvbScsICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2JyZWFrLWF0LW9sZC1zZW1pY29sb24tYnJlYWtwb2ludHMnLCAnYm9zJywgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnYnJlYWstYXQtb2xkLXRlcm5hcnktYnJlYWtwb2ludHMnLCAgICdib3QnLCAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdicmVhay1hdC1vbGQtYXR0cmlidXRlLWJyZWFrcG9pbnRzJywgJ2JvYScsICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2tlZXAtb2xkLWJyZWFrcG9pbnRzLWJlZm9yZScsICAgICAgICAna2JiJywgJz1zJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2tlZXAtb2xkLWJyZWFrcG9pbnRzLWFmdGVyJywgICAgICAgICAna2JhJywgJz1zJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2lnbm9yZS1vbGQtYnJlYWtwb2ludHMnLCAgICAgICAgICAgICAnaW9iJywgJyEnICk7CgogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgJGNhdGVnb3J5ID0gODsgICAgIyBCbGFuayBsaW5lIGNvbnRyb2wKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICRhZGRfb3B0aW9uLT4oICdibGFua3MtYmVmb3JlLWJsb2NrcycsICAgICAgICAgICAgJ2JiYicsICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdibGFua3MtYmVmb3JlLWNvbW1lbnRzJywgICAgICAgICAgJ2JiYycsICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdibGFuay1saW5lcy1iZWZvcmUtc3VicycsICAgICAgICAgJ2JsYnMnLCAnPWknICk7CiAgICAkYWRkX29wdGlvbi0+KCAnYmxhbmstbGluZXMtYmVmb3JlLXBhY2thZ2VzJywgICAgICdibGJwJywgJz1pJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2xvbmctYmxvY2stbGluZS1jb3VudCcsICAgICAgICAgICAnbGJsJywgICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdtYXhpbXVtLWNvbnNlY3V0aXZlLWJsYW5rLWxpbmVzJywgJ21ibCcsICAnPWknICk7CiAgICAkYWRkX29wdGlvbi0+KCAna2VlcC1vbGQtYmxhbmstbGluZXMnLCAgICAgICAgICAgICdrYmwnLCAgJz1pJyApOwoKICAgICRhZGRfb3B0aW9uLT4oICdrZXl3b3JkLWdyb3VwLWJsYW5rcy1saXN0JywgICAgICAgICAna2dibCcsICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICdrZXl3b3JkLWdyb3VwLWJsYW5rcy1zaXplJywgICAgICAgICAna2dicycsICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICdrZXl3b3JkLWdyb3VwLWJsYW5rcy1yZXBlYXQtY291bnQnLCAna2dicicsICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdrZXl3b3JkLWdyb3VwLWJsYW5rcy1iZWZvcmUnLCAgICAgICAna2diYicsICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdrZXl3b3JkLWdyb3VwLWJsYW5rcy1hZnRlcicsICAgICAgICAna2diYScsICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdrZXl3b3JkLWdyb3VwLWJsYW5rcy1pbnNpZGUnLCAgICAgICAna2diaScsICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2tleXdvcmQtZ3JvdXAtYmxhbmtzLWRlbGV0ZScsICAgICAgICdrZ2JkJywgJyEnICk7CgogICAgJGFkZF9vcHRpb24tPiggJ2JsYW5rLWxpbmVzLWFmdGVyLW9wZW5pbmctYmxvY2snLCAgICAgICAnYmxhbycsICAnPWknICk7CiAgICAkYWRkX29wdGlvbi0+KCAnYmxhbmstbGluZXMtYmVmb3JlLWNsb3NpbmctYmxvY2snLCAgICAgICdibGJjJywgICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdibGFuay1saW5lcy1hZnRlci1vcGVuaW5nLWJsb2NrLWxpc3QnLCAgJ2JsYW9sJywgJz1zJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2JsYW5rLWxpbmVzLWJlZm9yZS1jbG9zaW5nLWJsb2NrLWxpc3QnLCAnYmxiY2wnLCAnPXMnICk7CgogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgJGNhdGVnb3J5ID0gOTsgICAgIyBPdGhlciBjb250cm9scwogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgJGFkZF9vcHRpb24tPiggJ3dhcm4tbWlzc2luZy1lbHNlJywgICAgICAgICAgICAnd21lJywgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2FkZC1taXNzaW5nLWVsc2UnLCAgICAgICAgICAgICAnYW1lJywgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2FkZC1taXNzaW5nLWVsc2UtY29tbWVudCcsICAgICAnYW1lYycsICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICdkZWxldGUtYmxvY2stY29tbWVudHMnLCAgICAgICAgJ2RiYycsICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdkZWxldGUtY2xvc2luZy1zaWRlLWNvbW1lbnRzJywgJ2Rjc2MnLCAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdkZWxldGUtcG9kJywgICAgICAgICAgICAgICAgICAgJ2RwJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdkZWxldGUtc2lkZS1jb21tZW50cycsICAgICAgICAgJ2RzYycsICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICd0ZWUtYmxvY2stY29tbWVudHMnLCAgICAgICAgICAgJ3RiYycsICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICd0ZWUtcG9kJywgICAgICAgICAgICAgICAgICAgICAgJ3RwJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICd0ZWUtc2lkZS1jb21tZW50cycsICAgICAgICAgICAgJ3RzYycsICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdsb29rLWZvci1hdXRvbG9hZGVyJywgICAgICAgICAgJ2xhbCcsICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdsb29rLWZvci1oYXNoLWJhbmcnLCAgICAgICAgICAgJ3gnLCAgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdsb29rLWZvci1zZWxmbG9hZGVyJywgICAgICAgICAgJ2xzbCcsICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdwYXNzLXZlcnNpb24tbGluZScsICAgICAgICAgICAgJ3B2bCcsICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICd3YXJuLXZhcmlhYmxlLXR5cGVzJywgICAgICAgICAgJ3d2dCcsICAnPXMnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnd2Fybi12YXJpYWJsZS1leGNsdXNpb24tbGlzdCcsICd3dnhsJywgJz1zJyApOwogICAgJGFkZF9vcHRpb24tPiggJ3dhbnQtY2FsbC1wYXJlbnMnLCAgICAgICAgICAgICAnd2NwJywgICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICdub3dhbnQtY2FsbC1wYXJlbnMnLCAgICAgICAgICAgJ253Y3AnLCAnPXMnICk7CgogICAgJGFkZF9vcHRpb24tPiggJ3dhcm4tbWlzbWF0Y2hlZC1hcmdzJywgICAgICAgICAgICAgICAgICAnd21hJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICd3YXJuLW1pc21hdGNoZWQtYXJnLXR5cGVzJywgICAgICAgICAgICAgJ3dtYXQnLCAgJz1zJyApOwogICAgJGFkZF9vcHRpb24tPiggJ3dhcm4tbWlzbWF0Y2hlZC1hcmctdW5kZXJjb3VudC1jdXRvZmYnLCAnd21hdWMnLCAnPWknICk7CiAgICAkYWRkX29wdGlvbi0+KCAnd2Fybi1taXNtYXRjaGVkLWFyZy1vdmVyY291bnQtY3V0b2ZmJywgICd3bWFvYycsICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICd3YXJuLW1pc21hdGNoZWQtYXJnLWV4Y2x1c2lvbi1saXN0JywgICAgJ3dtYXhsJywgJz1zJyApOwogICAgJGFkZF9vcHRpb24tPiggJ3dhcm4tbWlzbWF0Y2hlZC1yZXR1cm5zJywgICAgICAgICAgICAgICAnd21yJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICd3YXJuLW1pc21hdGNoZWQtcmV0dXJuLXR5cGVzJywgICAgICAgICAgJ3dtcnQnLCAgJz1zJyApOwogICAgJGFkZF9vcHRpb24tPiggJ3dhcm4tbWlzbWF0Y2hlZC1yZXR1cm4tZXhjbHVzaW9uLWxpc3QnLCAnd21yeGwnLCAnPXMnICk7CgogICAgJGFkZF9vcHRpb24tPiggJ2FkZC1pbnRlcmJyYWNrZXQtYXJyb3dzJywgICAgICAgJ2FpYScsICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2RlbGV0ZS1pbnRlcmJyYWNrZXQtYXJyb3dzJywgICAgJ2RpYScsICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ3dhcm4taW50ZXJicmFja2V0LWFycm93cycsICAgICAgJ3dpYScsICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2ludGVyYnJhY2tldC1hcnJvdy1zdHlsZScsICAgICAgJ2lhcycsICc9cycgKTsKICAgICRhZGRfb3B0aW9uLT4oICdpbnRlcmJyYWNrZXQtYXJyb3ctY29tcGxleGl0eScsICdpYWMnLCAnPWknICk7CgogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgJGNhdGVnb3J5ID0gMTM7ICAgICMgRGVidWdnaW5nCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAkYWRkX29wdGlvbi0+KCAnREVCVUcnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICdEJywgICAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2R1bXAtYmxvY2stc3VtbWFyeScsICAgICAgICAgICAgICAnZGJzJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdkdW1wLWJsb2NrLW1pbmltdW0tbGluZXMnLCAgICAgICAgJ2RibCcsICAgJz1pJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2R1bXAtYmxvY2stdHlwZXMnLCAgICAgICAgICAgICAgICAnZGJ0JywgICAnPXMnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnZHVtcC1jdWRkbGVkLWJsb2NrLWxpc3QnLCAgICAgICAgICdkY2JsJywgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2R1bXAtZGVmYXVsdHMnLCAgICAgICAgICAgICAgICAgICAnZGRmJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdkdW1wLWludGVnZXItb3B0aW9uLXJhbmdlJywgICAgICAgJ2Rpb3InLCAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnZHVtcC1sb25nLW5hbWVzJywgICAgICAgICAgICAgICAgICdkbG4nLCAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2R1bXAtbWlzbWF0Y2hlZC1hcmdzJywgICAgICAgICAgICAnZG1hJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdkdW1wLW1pc21hdGNoZWQtcmV0dXJucycsICAgICAgICAgJ2RtcicsICAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnZHVtcC1taXhlZC1jYWxsLXBhcmVucycsICAgICAgICAgICdkbWNwJywgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2R1bXAtb3B0aW9ucycsICAgICAgICAgICAgICAgICAgICAnZG9wJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdkdW1wLXByb2ZpbGUnLCAgICAgICAgICAgICAgICAgICAgJ2Rwcm8nLCAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnZHVtcC1zaG9ydC1uYW1lcycsICAgICAgICAgICAgICAgICdkc24nLCAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2R1bXAtdG9rZW4tdHlwZXMnLCAgICAgICAgICAgICAgICAnZHR0JywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdkdW1wLXVudXN1YWwtdmFyaWFibGVzJywgICAgICAgICAgJ2R1dicsICAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnZHVtcC11bmlxdWUta2V5cycsICAgICAgICAgICAgICAgICdkdWsnLCAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2R1bXAtd2FudC1sZWZ0LXNwYWNlJywgICAgICAgICAgICAnZHdscycsICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdkdW1wLXdhbnQtcmlnaHQtc3BhY2UnLCAgICAgICAgICAgJ2R3cnMnLCAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnZnV6enktbGluZS1sZW5ndGgnLCAgICAgICAgICAgICAgICdmbGwnLCAgICchJyApOwogICAgJGFkZF9vcHRpb24tPiggJ2hlbHAnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaCcsICAgICBFTVBUWV9TVFJJTkcgKTsKICAgICRhZGRfb3B0aW9uLT4oICdzaG9ydC1jb25jYXRlbmF0aW9uLWl0ZW0tbGVuZ3RoJywgJ3NjbCcsICAgJz1pJyApOwogICAgJGFkZF9vcHRpb24tPiggJ3Nob3ctb3B0aW9ucycsICAgICAgICAgICAgICAgICAgICAnb3B0JywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICd0aW1lc3RhbXAnLCAgICAgICAgICAgICAgICAgICAgICAgJ3RzJywgICAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAndmVyc2lvbicsICAgICAgICAgICAgICAgICAgICAgICAgICd2JywgICAgIEVNUFRZX1NUUklORyApOwogICAgJGFkZF9vcHRpb24tPiggJ21lbW9pemUnLCAgICAgICAgICAgICAgICAgICAgICAgICAnbWVtJywgICAnIScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdmaWxlLXNpemUtb3JkZXInLCAgICAgICAgICAgICAgICAgJ2ZzbycsICAgJyEnICk7CiAgICAkYWRkX29wdGlvbi0+KCAnbWF4aW11bS1maWxlLXNpemUtbWInLCAgICAgICAgICAgICdtYXhmcycsICc9aScgKTsKICAgICRhZGRfb3B0aW9uLT4oICdtYXhpbXVtLWxldmVsLWVycm9ycycsICAgICAgICAgICAgJ21heGxlJywgJz1pJyApOwogICAgJGFkZF9vcHRpb24tPiggJ21heGltdW0tdW5leHBlY3RlZC1lcnJvcnMnLCAgICAgICAnbWF4dWUnLCAnPWknICk7CiAgICAkYWRkX29wdGlvbi0+KCAnaW50ZWdlci1yYW5nZS1jaGVjaycsICAgICAgICAgICAgICdpcmMnLCAgICc9aScgKTsKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgIyBUaGUgUGVybDo6VGlkeTo6SHRtbFdyaXRlciB3aWxsIGFkZCBpdHMgb3duIG9wdGlvbnMgdG8gdGhlIHN0cmluZwogICAgUGVybDo6VGlkeTo6SHRtbFdyaXRlci0+bWFrZV9nZXRvcHRfbG9uZ19uYW1lcyggXEBvcHRpb25fc3RyaW5nICk7CgogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgIyBTZXQgY2F0ZWdvcmllcyAxMCwgMTEsIDEyCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAjIEJhc2VkIG9uIHRoZWlyIGtub3duIG9yZGVyCiAgICAkY2F0ZWdvcnkgPSAxMjsgICAgIyBIVE1MIHByb3BlcnRpZXMKICAgIGZvcmVhY2ggbXkgJG9wdCAoQG9wdGlvbl9zdHJpbmcpIHsKICAgICAgICBteSAkbG9uZ19uYW1lID0gJG9wdDsKICAgICAgICAkbG9uZ19uYW1lID1+IHMvKCF8PS4qfDouKikkLy87CiAgICAgICAgaWYgKCAhZGVmaW5lZCggJG9wdGlvbl9jYXRlZ29yeXskbG9uZ19uYW1lfSApICkgewogICAgICAgICAgICBpZiAoICRsb25nX25hbWUgPX4gL15odG1sLWxpbmtlZC8gKSB7CiAgICAgICAgICAgICAgICAkY2F0ZWdvcnkgPSAxMDsgICAgIyBIVE1MIG9wdGlvbnMKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRsb25nX25hbWUgPX4gL15wb2QyaHRtbC8gKSB7CiAgICAgICAgICAgICAgICAkY2F0ZWdvcnkgPSAxMTsgICAgIyBQb2QyaHRtbAogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJGNhdGVnb3J5ID0gMTI7ICAgICMgSFRNTCBwcm9wZXJ0aWVzCiAgICAgICAgICAgIH0KICAgICAgICAgICAgJG9wdGlvbl9jYXRlZ29yeXskbG9uZ19uYW1lfSA9ICRjYXRlZ29yeV9uYW1lWyRjYXRlZ29yeV07CiAgICAgICAgfQogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgREVGQVVMVFM6IEFzc2lnbiBkZWZhdWx0IHZhbHVlcyB0byB0aGUgYWJvdmUgb3B0aW9ucyBoZXJlLCBleGNlcHQKICAgICMgZm9yICdvdXRmaWxlJyBhbmQgJ2hlbHAnLgogICAgIyBUaGVzZSBzZXR0aW5ncyBzaG91bGQgYXBwcm94aW1hdGUgdGhlIHBlcmxzdHlsZSgxKSBzdWdnZXN0aW9ucy4KICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIG15IEBkZWZhdWx0cyA9IHF3KAogICAgICBhZGQtbG9uZS10cmFpbGluZy1jb21tYXMKICAgICAgYWRkLW5ld2xpbmVzCiAgICAgIGFkZC10ZXJtaW5hbC1uZXdsaW5lCiAgICAgIGFkZC1zZW1pY29sb25zCiAgICAgIGFkZC13aGl0ZXNwYWNlCiAgICAgIGJsYW5rcy1iZWZvcmUtYmxvY2tzCiAgICAgIGJsYW5rcy1iZWZvcmUtY29tbWVudHMKICAgICAgYmxhbmstbGluZXMtYmVmb3JlLXN1YnM9MQogICAgICBibGFuay1saW5lcy1iZWZvcmUtcGFja2FnZXM9MQoKICAgICAga2V5d29yZC1ncm91cC1ibGFua3Mtc2l6ZT01CiAgICAgIGtleXdvcmQtZ3JvdXAtYmxhbmtzLXJlcGVhdC1jb3VudD0wCiAgICAgIGtleXdvcmQtZ3JvdXAtYmxhbmtzLWJlZm9yZT0xCiAgICAgIGtleXdvcmQtZ3JvdXAtYmxhbmtzLWFmdGVyPTEKICAgICAgbm9rZXl3b3JkLWdyb3VwLWJsYW5rcy1pbnNpZGUKICAgICAgbm9rZXl3b3JkLWdyb3VwLWJsYW5rcy1kZWxldGUKCiAgICAgIGJsb2NrLWJyYWNlLXRpZ2h0bmVzcz0wCiAgICAgIGJsb2NrLWJyYWNlLXZlcnRpY2FsLXRpZ2h0bmVzcz0wCiAgICAgIGJyYWNlLWZvbGxvd2VyLXZlcnRpY2FsLXRpZ2h0bmVzcz0xCiAgICAgIGJyYWNlLXRpZ2h0bmVzcz0xCiAgICAgIGJyYWNlLXZlcnRpY2FsLXRpZ2h0bmVzcy1jbG9zaW5nPTAKICAgICAgYnJhY2UtdmVydGljYWwtdGlnaHRuZXNzPTAKICAgICAgYnJlYWstYWZ0ZXItbGFiZWxzPTAKICAgICAgYnJlYWstYXQtb2xkLWxvZ2ljYWwtYnJlYWtwb2ludHMKICAgICAgYnJlYWstYXQtb2xkLXRlcm5hcnktYnJlYWtwb2ludHMKICAgICAgYnJlYWstYXQtb2xkLWF0dHJpYnV0ZS1icmVha3BvaW50cwogICAgICBicmVhay1hdC1vbGQta2V5d29yZC1icmVha3BvaW50cwogICAgICBicmVhay1iZWZvcmUtaGFzaC1icmFjZT0wCiAgICAgIGJyZWFrLWJlZm9yZS1oYXNoLWJyYWNlLWFuZC1pbmRlbnQ9MAogICAgICBicmVhay1iZWZvcmUtc3F1YXJlLWJyYWNrZXQ9MAogICAgICBicmVhay1iZWZvcmUtc3F1YXJlLWJyYWNrZXQtYW5kLWluZGVudD0wCiAgICAgIGJyZWFrLWJlZm9yZS1wYXJlbj0wCiAgICAgIGJyZWFrLWJlZm9yZS1wYXJlbi1hbmQtaW5kZW50PTAKICAgICAgY29tbWEtYXJyb3ctYnJlYWtwb2ludHM9NQogICAgICBub2NoZWNrLXN5bnRheAogICAgICBjaGFyYWN0ZXItZW5jb2Rpbmc9Z3Vlc3MKICAgICAgY2xvc2luZy1zaWRlLWNvbW1lbnQtaW50ZXJ2YWw9NgogICAgICBjbG9zaW5nLXNpZGUtY29tbWVudC1tYXhpbXVtLXRleHQ9MjAKICAgICAgY2xvc2luZy1zaWRlLWNvbW1lbnQtZWxzZS1mbGFnPTAKICAgICAgY2xvc2luZy1zaWRlLWNvbW1lbnRzLWJhbGFuY2VkCiAgICAgIGNsb3NpbmctcGFyZW4taW5kZW50YXRpb249MAogICAgICBjbG9zaW5nLWJyYWNlLWluZGVudGF0aW9uPTAKICAgICAgY2xvc2luZy1zcXVhcmUtYnJhY2tldC1pbmRlbnRhdGlvbj0wCiAgICAgIGNvbnRpbnVhdGlvbi1pbmRlbnRhdGlvbj0yCiAgICAgIG5vZXh0ZW5kZWQtY29udGludWF0aW9uLWluZGVudGF0aW9uCiAgICAgIGN1ZGRsZWQtYnJlYWstb3B0aW9uPTEKICAgICAgZGVsZXRlLW9sZC1uZXdsaW5lcwogICAgICBkZWxldGUtcmVwZWF0ZWQtY29tbWFzCiAgICAgIGRlbGV0ZS1sb25lLXRyYWlsaW5nLWNvbW1hcwogICAgICBkZWxldGUtc2VtaWNvbG9ucwogICAgICBkdW1wLWJsb2NrLW1pbmltdW0tbGluZXM9MjAKICAgICAgZHVtcC1ibG9jay10eXBlcz1zdWIKICAgICAgZXh0ZW5kZWQtc3ludGF4CiAgICAgIGVuY29kZS1vdXRwdXQtc3RyaW5ncwogICAgICBmaWxlLXNpemUtb3JkZXIKICAgICAgZnVuY3Rpb24tcGFyZW4tdmVydGljYWwtYWxpZ25tZW50CiAgICAgIGZ1enp5LWxpbmUtbGVuZ3RoCiAgICAgIGhhbmdpbmctc2lkZS1jb21tZW50cwogICAgICBpbmRlbnQtYmxvY2stY29tbWVudHMKICAgICAgaW5kZW50LWNvbHVtbnM9NAogICAgICBpbmRlbnQtbGVhZGluZy1zZW1pY29sb24KICAgICAgaW50ZWdlci1yYW5nZS1jaGVjaz0yCiAgICAgIGludGVyYnJhY2tldC1hcnJvdy1jb21wbGV4aXR5PTEKICAgICAgaXRlcmF0aW9ucz0xCiAgICAgIGtlZXAtb2xkLWJsYW5rLWxpbmVzPTEKICAgICAga2V5d29yZC1wYXJlbi1pbm5lci10aWdodG5lc3M9MQogICAgICBsb2dpY2FsLXBhZGRpbmcKICAgICAgbG9uZy1ibG9jay1saW5lLWNvdW50PTgKICAgICAgbG9vay1mb3ItYXV0b2xvYWRlcgogICAgICBsb29rLWZvci1zZWxmbG9hZGVyCiAgICAgIG1heGltdW0tY29uc2VjdXRpdmUtYmxhbmstbGluZXM9MQogICAgICBtYXhpbXVtLWZpZWxkcy1wZXItdGFibGU9MAogICAgICBtYXhpbXVtLWxpbmUtbGVuZ3RoPTgwCiAgICAgIG1heGltdW0tZmlsZS1zaXplLW1iPTEwCiAgICAgIG1heGltdW0tbGV2ZWwtZXJyb3JzPTEKICAgICAgbWF4aW11bS11bmV4cGVjdGVkLWVycm9ycz0wCiAgICAgIG1lbW9pemUKICAgICAgbWluaW11bS1zcGFjZS10by1jb21tZW50PTQKICAgICAgd2Fybi1taXNtYXRjaGVkLWFyZy11bmRlcmNvdW50LWN1dG9mZj00CiAgICAgIHdhcm4tbWlzbWF0Y2hlZC1hcmctb3ZlcmNvdW50LWN1dG9mZj0xCiAgICAgIG5vYnJhY2UtbGVmdC1hbmQtaW5kZW50CiAgICAgIG5vY3VkZGxlZC1lbHNlCiAgICAgIG5vZGVsZXRlLW9sZC13aGl0ZXNwYWNlCiAgICAgIG5vaHRtbAogICAgICBub2xvZ2ZpbGUKICAgICAgbm9uLWluZGVudGluZy1icmFjZXMKICAgICAgbm9xdWlldAogICAgICBub3Nob3ctb3B0aW9ucwogICAgICBub3N0YXRpYy1zaWRlLWNvbW1lbnRzCiAgICAgIG5vdGFicwogICAgICBub3dhcm5pbmctb3V0cHV0CiAgICAgIG9uZS1saW5lLWJsb2NrLXNlbWljb2xvbnM9MQogICAgICBvbmUtbGluZS1ibG9jay1uZXN0aW5nPTAKICAgICAgb3V0ZGVudC1sYWJlbHMKICAgICAgb3V0ZGVudC1sb25nLXF1b3RlcwogICAgICBvdXRkZW50LWxvbmctY29tbWVudHMKICAgICAgcGFyZW4tdGlnaHRuZXNzPTEKICAgICAgcGFyZW4tdmVydGljYWwtdGlnaHRuZXNzLWNsb3Npbmc9MAogICAgICBwYXJlbi12ZXJ0aWNhbC10aWdodG5lc3M9MAogICAgICBwYXNzLXZlcnNpb24tbGluZQogICAgICBub3dlbGQtbmVzdGVkLWNvbnRhaW5lcnMKICAgICAgcmVjb21iaW5lCiAgICAgIG5vdXNlLXVuaWNvZGUtZ2NzdHJpbmcKICAgICAgdmFsaWduLWNvZGUKICAgICAgdmFsaWduLWJsb2NrLWNvbW1lbnRzCiAgICAgIHZhbGlnbi1zaWRlLWNvbW1lbnRzCiAgICAgIHZhbGlnbi1zaWduZWQtbnVtYmVycwogICAgICB2YWxpZ24tc2lnbmVkLW51bWJlcnMtbGltaXQ9MjAKICAgICAgc2hvcnQtY29uY2F0ZW5hdGlvbi1pdGVtLWxlbmd0aD04CiAgICAgIHNwYWNlLWZvci1zZW1pY29sb24KICAgICAgc3BhY2UtYmFja3NsYXNoLXF1b3RlPTEKICAgICAgc3BhY2UtcHJvdG90eXBlLXBhcmVuPTEKICAgICAgc3BhY2Utc2lnbmF0dXJlLXBhcmVuPTEKICAgICAgc3F1YXJlLWJyYWNrZXQtdGlnaHRuZXNzPTEKICAgICAgc3F1YXJlLWJyYWNrZXQtdmVydGljYWwtdGlnaHRuZXNzLWNsb3Npbmc9MAogICAgICBzcXVhcmUtYnJhY2tldC12ZXJ0aWNhbC10aWdodG5lc3M9MAogICAgICBzdGF0aWMtYmxvY2stY29tbWVudHMKICAgICAgdGltZXN0YW1wCiAgICAgIHRyaW0tcXcKICAgICAgZm9ybWF0PXRpZHkKICAgICAgYmFja3VwLW1ldGhvZD1jb3B5CiAgICAgIGJhY2t1cC1maWxlLWV4dGVuc2lvbj1iYWsKICAgICAgY29kZS1za2lwcGluZwogICAgICBmb3JtYXQtc2tpcHBpbmcKICAgICAgZGVmYXVsdC10YWJzaXplPTgKICAgICAgdGltZW91dC1pbi1zZWNvbmRzPTEwCgogICAgICB3aGl0ZXNwYWNlLWN5Y2xlPTAKICAgICAgZW50YWItbGVhZGluZy13aGl0ZXNwYWNlPTAKICAgICAgYmxhbmstbGluZXMtYmVmb3JlLWNsb3NpbmctYmxvY2s9MAogICAgICBibGFuay1saW5lcy1hZnRlci1vcGVuaW5nLWJsb2NrPTAKCiAgICAgIHBvZDJodG1sCiAgICAgIGh0bWwtdGFibGUtb2YtY29udGVudHMKICAgICAgaHRtbC1lbnRpdGllcwogICAgKTsKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIEFzc2lnbiB2YWxpZCByYW5nZXMgdG8gY2VydGFpbiBvcHRpb25zCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIEluIHRoZSBmdXR1cmUsIHRoZXNlIG1heSBiZSB1c2VkIHRvIG1ha2UgcHJlbGltaW5hcnkgY2hlY2tzCiAgICAjIGhhc2gga2V5cyBhcmUgbG9uZyBuYW1lcwogICAgIyBJZiBrZXkgb3IgdmFsdWUgaXMgdW5kZWZpbmVkOgogICAgIyAgIHN0cmluZ3MgbWF5IGhhdmUgYW55IHZhbHVlCiAgICAjICAgaW50ZWdlciByYW5nZXMgYXJlID49MAogICAgIyBJZiB2YWx1ZSBpcyBkZWZpbmVkOgogICAgIyAgIHZhbHVlIGlzIFtxdyhhbnkgdmFsaWQgd29yZHMpXSBmb3Igc3RyaW5ncwogICAgIyAgIHZhbHVlIGlzIFttaW4sIG1heF0gZm9yIGludGVnZXJzCiAgICAjICAgaWYgbWluIGlzIHVuZGVmaW5lZCwgdGhlcmUgaXMgbm8gbG93ZXIgbGltaXQKICAgICMgICBpZiBtYXggaXMgdW5kZWZpbmVkLCB0aGVyZSBpcyBubyB1cHBlciBsaW1pdAogICAgIyBQYXJhbWV0ZXJzIG5vdCBsaXN0ZWQgaGVyZSBoYXZlIGRlZmF1bHRzCiAgICAlb3B0aW9uX3JhbmdlID0gKAogICAgICAgICdmb3JtYXQnICAgICAgICAgICAgICAgICAgICAgICAgPT4gWyAndGlkeScsICdodG1sJywgJ3VzZXInIF0sCiAgICAgICAgJ291dHB1dC1saW5lLWVuZGluZycgICAgICAgICAgICA9PiBbICdkb3MnLCAgJ3dpbicsICAnbWFjJywgJ3VuaXgnIF0sCiAgICAgICAgJ3NwYWNlLWJhY2tzbGFzaC1xdW90ZScgICAgICAgICA9PiBbIDAsICAgICAgMiBdLAogICAgICAgICdibG9jay1icmFjZS10aWdodG5lc3MnICAgICAgICAgPT4gWyAwLCAgICAgIDIgXSwKICAgICAgICAna2V5d29yZC1wYXJlbi1pbm5lci10aWdodG5lc3MnID0+IFsgMCwgICAgICAyIF0sCiAgICAgICAgJ2JyYWNlLXRpZ2h0bmVzcycgICAgICAgICAgICAgICA9PiBbIDAsICAgICAgMiBdLAogICAgICAgICdwYXJlbi10aWdodG5lc3MnICAgICAgICAgICAgICAgPT4gWyAwLCAgICAgIDIgXSwKICAgICAgICAnc3F1YXJlLWJyYWNrZXQtdGlnaHRuZXNzJyAgICAgID0+IFsgMCwgICAgICAyIF0sCgogICAgICAgICdibG9jay1icmFjZS12ZXJ0aWNhbC10aWdodG5lc3MnICAgICAgICAgICAgPT4gWyAwLCAyIF0sCiAgICAgICAgJ2JyYWNlLWZvbGxvd2VyLXZlcnRpY2FsLXRpZ2h0bmVzcycgICAgICAgICA9PiBbIDAsIDIgXSwKICAgICAgICAnYnJhY2UtdmVydGljYWwtdGlnaHRuZXNzJyAgICAgICAgICAgICAgICAgID0+IFsgMCwgMiBdLAogICAgICAgICdicmFjZS12ZXJ0aWNhbC10aWdodG5lc3MtY2xvc2luZycgICAgICAgICAgPT4gWyAwLCAzIF0sCiAgICAgICAgJ3BhcmVuLXZlcnRpY2FsLXRpZ2h0bmVzcycgICAgICAgICAgICAgICAgICA9PiBbIDAsIDIgXSwKICAgICAgICAncGFyZW4tdmVydGljYWwtdGlnaHRuZXNzLWNsb3NpbmcnICAgICAgICAgID0+IFsgMCwgMyBdLAogICAgICAgICdzcXVhcmUtYnJhY2tldC12ZXJ0aWNhbC10aWdodG5lc3MnICAgICAgICAgPT4gWyAwLCAyIF0sCiAgICAgICAgJ3NxdWFyZS1icmFja2V0LXZlcnRpY2FsLXRpZ2h0bmVzcy1jbG9zaW5nJyA9PiBbIDAsIDMgXSwKICAgICAgICAndmVydGljYWwtdGlnaHRuZXNzJyAgICAgICAgICAgICAgICAgICAgICAgID0+IFsgMCwgMiBdLAogICAgICAgICd2ZXJ0aWNhbC10aWdodG5lc3MtY2xvc2luZycgICAgICAgICAgICAgICAgPT4gWyAwLCAzIF0sCgogICAgICAgICdjbG9zaW5nLWJyYWNlLWluZGVudGF0aW9uJyAgICAgICAgICA9PiBbIDAsIDMgXSwKICAgICAgICAnY2xvc2luZy1wYXJlbi1pbmRlbnRhdGlvbicgICAgICAgICAgPT4gWyAwLCAzIF0sCiAgICAgICAgJ2Nsb3Npbmctc3F1YXJlLWJyYWNrZXQtaW5kZW50YXRpb24nID0+IFsgMCwgMyBdLAogICAgICAgICdjbG9zaW5nLXRva2VuLWluZGVudGF0aW9uJyAgICAgICAgICA9PiBbIDAsIDMgXSwKCiAgICAgICAgJ2Nsb3Npbmctc2lkZS1jb21tZW50LWVsc2UtZmxhZycgPT4gWyAwLCAyIF0sCiAgICAgICAgJ2NvbW1hLWFycm93LWJyZWFrcG9pbnRzJyAgICAgICAgPT4gWyAwLCA1IF0sCgogICAgICAgICdrZXl3b3JkLWdyb3VwLWJsYW5rcy1iZWZvcmUnID0+IFsgMCwgMiBdLAogICAgICAgICdrZXl3b3JkLWdyb3VwLWJsYW5rcy1hZnRlcicgID0+IFsgMCwgMiBdLAoKICAgICAgICAnc3BhY2UtcHJvdG90eXBlLXBhcmVuJyA9PiBbIDAsIDIgXSwKICAgICAgICAnc3BhY2Utc2lnbmF0dXJlLXBhcmVuJyA9PiBbIDAsIDIgXSwKICAgICAgICAnYnJlYWstYWZ0ZXItbGFiZWxzJyAgICA9PiBbIDAsIDIgXSwKICAgICk7CgogICAgIyBWYWxpZCBbbWluLG1heF0gcmFuZ2VzIG9mIGFsbCBpbnRlZ2VyIG9wdGlvbnMgKHR5cGUgJz1pJykuICBUaGlzIGhhc2ggaXMKICAgICMgcmVwbGFjaW5nICVvcHRpb25fcmFuZ2UsIGFib3ZlLCBmb3IgdXNlIGJ5IHN1YiAnY2hlY2tfb3B0aW9ucycKICAgICVpbnRlZ2VyX29wdGlvbl9yYW5nZSA9ICgKICAgICAgICAnYmxhbmstbGluZXMtYWZ0ZXItb3BlbmluZy1ibG9jaycgICAgICAgICAgID0+IFsgMCwgdW5kZWYgXSwKICAgICAgICAnYmxhbmstbGluZXMtYmVmb3JlLWNsb3NpbmctYmxvY2snICAgICAgICAgID0+IFsgMCwgdW5kZWYgXSwKICAgICAgICAnYmxhbmstbGluZXMtYmVmb3JlLXBhY2thZ2VzJyAgICAgICAgICAgICAgID0+IFsgMCwgdW5kZWYgXSwKICAgICAgICAnYmxhbmstbGluZXMtYmVmb3JlLXN1YnMnICAgICAgICAgICAgICAgICAgID0+IFsgMCwgdW5kZWYgXSwKICAgICAgICAnYmxvY2stYnJhY2UtdGlnaHRuZXNzJyAgICAgICAgICAgICAgICAgICAgID0+IFsgMCwgMiBdLAogICAgICAgICdibG9jay1icmFjZS12ZXJ0aWNhbC10aWdodG5lc3MnICAgICAgICAgICAgPT4gWyAwLCAyIF0sCiAgICAgICAgJ2JyYWNlLWZvbGxvd2VyLXZlcnRpY2FsLXRpZ2h0bmVzcycgICAgICAgICA9PiBbIDAsIDIgXSwKICAgICAgICAnYnJhY2UtdGlnaHRuZXNzJyAgICAgICAgICAgICAgICAgICAgICAgICAgID0+IFsgMCwgMiBdLAogICAgICAgICdicmFjZS12ZXJ0aWNhbC10aWdodG5lc3MnICAgICAgICAgICAgICAgICAgPT4gWyAwLCAyIF0sCiAgICAgICAgJ2JyYWNlLXZlcnRpY2FsLXRpZ2h0bmVzcy1jbG9zaW5nJyAgICAgICAgICA9PiBbIDAsIDMgXSwKICAgICAgICAnYnJlYWstYWZ0ZXItbGFiZWxzJyAgICAgICAgICAgICAgICAgICAgICAgID0+IFsgMCwgMiBdLAogICAgICAgICdicmVhay1iZWZvcmUtaGFzaC1icmFjZScgICAgICAgICAgICAgICAgICAgPT4gWyAwLCAzIF0sCiAgICAgICAgJ2JyZWFrLWJlZm9yZS1oYXNoLWJyYWNlLWFuZC1pbmRlbnQnICAgICAgICA9PiBbIDAsIDIgXSwKICAgICAgICAnYnJlYWstYmVmb3JlLXBhcmVuJyAgICAgICAgICAgICAgICAgICAgICAgID0+IFsgMCwgMyBdLAogICAgICAgICdicmVhay1iZWZvcmUtcGFyZW4tYW5kLWluZGVudCcgICAgICAgICAgICAgPT4gWyAwLCAyIF0sCiAgICAgICAgJ2JyZWFrLWJlZm9yZS1zcXVhcmUtYnJhY2tldCcgICAgICAgICAgICAgICA9PiBbIDAsIDMgXSwKICAgICAgICAnYnJlYWstYmVmb3JlLXNxdWFyZS1icmFja2V0LWFuZC1pbmRlbnQnICAgID0+IFsgMCwgMiBdLAogICAgICAgICdjbG9zaW5nLWJyYWNlLWluZGVudGF0aW9uJyAgICAgICAgICAgICAgICAgPT4gWyAwLCAzIF0sCiAgICAgICAgJ2Nsb3NpbmctcGFyZW4taW5kZW50YXRpb24nICAgICAgICAgICAgICAgICA9PiBbIDAsIDMgXSwKICAgICAgICAnY2xvc2luZy1zaWRlLWNvbW1lbnQtZWxzZS1mbGFnJyAgICAgICAgICAgID0+IFsgMCwgMiBdLAogICAgICAgICdjbG9zaW5nLXNpZGUtY29tbWVudC1pbnRlcnZhbCcgICAgICAgICAgICAgPT4gWyAwLCB1bmRlZiBdLAogICAgICAgICdjbG9zaW5nLXNpZGUtY29tbWVudC1tYXhpbXVtLXRleHQnICAgICAgICAgPT4gWyAwLCB1bmRlZiBdLAogICAgICAgICdjbG9zaW5nLXNxdWFyZS1icmFja2V0LWluZGVudGF0aW9uJyAgICAgICAgPT4gWyAwLCAzIF0sCiAgICAgICAgJ2Nsb3NpbmctdG9rZW4taW5kZW50YXRpb24nICAgICAgICAgICAgICAgICA9PiBbIDAsIDMgXSwKICAgICAgICAnY29tbWEtYXJyb3ctYnJlYWtwb2ludHMnICAgICAgICAgICAgICAgICAgID0+IFsgMCwgNSBdLAogICAgICAgICdjb250aW51YXRpb24taW5kZW50YXRpb24nICAgICAgICAgICAgICAgICAgPT4gWyAwLCB1bmRlZiBdLAogICAgICAgICdjdWRkbGVkLWJyZWFrLW9wdGlvbicgICAgICAgICAgICAgICAgICAgICAgPT4gWyAwLCAyIF0sCiAgICAgICAgJ2RlZmF1bHQtdGFic2l6ZScgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiBbIDAsIHVuZGVmIF0sCiAgICAgICAgJ2R1bXAtYmxvY2stbWluaW11bS1saW5lcycgICAgICAgICAgICAgICAgICA9PiBbIDAsIHVuZGVmIF0sCiAgICAgICAgJ2VudGFiLWxlYWRpbmctd2hpdGVzcGFjZScgICAgICAgICAgICAgICAgICA9PiBbIDAsIHVuZGVmIF0sCiAgICAgICAgJ2ZpeGVkLXBvc2l0aW9uLXNpZGUtY29tbWVudCcgICAgICAgICAgICAgICA9PiBbIDAsIHVuZGVmIF0sCiAgICAgICAgJ2luZGVudC1jb2x1bW5zJyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiBbIDAsIHVuZGVmIF0sCiAgICAgICAgJ2ludGVyYnJhY2tldC1hcnJvdy1jb21wbGV4aXR5JyAgICAgICAgICAgICA9PiBbIDAsIDIgXSwKICAgICAgICAnaW50ZWdlci1yYW5nZS1jaGVjaycgICAgICAgICAgICAgICAgICAgICAgID0+IFsgMCwgMyBdLAogICAgICAgICdpdGVyYXRpb25zJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gWyAwLCB1bmRlZiBdLAogICAgICAgICdrZWVwLW9sZC1ibGFuay1saW5lcycgICAgICAgICAgICAgICAgICAgICAgPT4gWyAwLCAyIF0sCiAgICAgICAgJ2tleXdvcmQtZ3JvdXAtYmxhbmtzLWFmdGVyJyAgICAgICAgICAgICAgICA9PiBbIDAsIDIgXSwKICAgICAgICAna2V5d29yZC1ncm91cC1ibGFua3MtYmVmb3JlJyAgICAgICAgICAgICAgID0+IFsgMCwgMiBdLAogICAgICAgICdrZXl3b3JkLWdyb3VwLWJsYW5rcy1yZXBlYXQtY291bnQnICAgICAgICAgPT4gWyAwLCB1bmRlZiBdLAogICAgICAgICdrZXl3b3JkLXBhcmVuLWlubmVyLXRpZ2h0bmVzcycgICAgICAgICAgICAgPT4gWyAwLCAyIF0sCiAgICAgICAgJ2xvbmctYmxvY2stbGluZS1jb3VudCcgICAgICAgICAgICAgICAgICAgICA9PiBbIDAsIHVuZGVmIF0sCiAgICAgICAgJ21heGltdW0tY29uc2VjdXRpdmUtYmxhbmstbGluZXMnICAgICAgICAgICA9PiBbIDAsIHVuZGVmIF0sCiAgICAgICAgJ21heGltdW0tZmllbGRzLXBlci10YWJsZScgICAgICAgICAgICAgICAgICA9PiBbIDAsIHVuZGVmIF0sCiAgICAgICAgJ21heGltdW0tZmlsZS1zaXplLW1iJyAgICAgICAgICAgICAgICAgICAgICA9PiBbIDAsIHVuZGVmIF0sCiAgICAgICAgJ21heGltdW0tbGV2ZWwtZXJyb3JzJyAgICAgICAgICAgICAgICAgICAgICA9PiBbIDAsIHVuZGVmIF0sCiAgICAgICAgJ21heGltdW0tbGluZS1sZW5ndGgnICAgICAgICAgICAgICAgICAgICAgICA9PiBbIDAsIHVuZGVmIF0sCiAgICAgICAgJ21heGltdW0tdW5leHBlY3RlZC1lcnJvcnMnICAgICAgICAgICAgICAgICA9PiBbIDAsIHVuZGVmIF0sCiAgICAgICAgJ21pbmltdW0tc3BhY2UtdG8tY29tbWVudCcgICAgICAgICAgICAgICAgICA9PiBbIDAsIHVuZGVmIF0sCiAgICAgICAgJ3dhcm4tbWlzbWF0Y2hlZC1hcmctdW5kZXJjb3VudC1jdXRvZmYnICAgICA9PiBbIDAsIHVuZGVmIF0sCiAgICAgICAgJ3dhcm4tbWlzbWF0Y2hlZC1hcmctb3ZlcmNvdW50LWN1dG9mZicgICAgICA9PiBbIDAsIHVuZGVmIF0sCiAgICAgICAgJ29uZS1saW5lLWJsb2NrLW5lc3RpbmcnICAgICAgICAgICAgICAgICAgICA9PiBbIDAsIDEgXSwKICAgICAgICAnb25lLWxpbmUtYmxvY2stc2VtaWNvbG9ucycgICAgICAgICAgICAgICAgID0+IFsgMCwgMiBdLAogICAgICAgICdwYXJlbi10aWdodG5lc3MnICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gWyAwLCAyIF0sCiAgICAgICAgJ3BhcmVuLXZlcnRpY2FsLXRpZ2h0bmVzcycgICAgICAgICAgICAgICAgICA9PiBbIDAsIDIgXSwKICAgICAgICAncGFyZW4tdmVydGljYWwtdGlnaHRuZXNzLWNsb3NpbmcnICAgICAgICAgID0+IFsgMCwgMyBdLAogICAgICAgICdzaG9ydC1jb25jYXRlbmF0aW9uLWl0ZW0tbGVuZ3RoJyAgICAgICAgICAgPT4gWyAwLCB1bmRlZiBdLAogICAgICAgICdzcGFjZS1iYWNrc2xhc2gtcXVvdGUnICAgICAgICAgICAgICAgICAgICAgPT4gWyAwLCAyIF0sCiAgICAgICAgJ3NwYWNlLXByb3RvdHlwZS1wYXJlbicgICAgICAgICAgICAgICAgICAgICA9PiBbIDAsIDIgXSwKICAgICAgICAnc3BhY2Utc2lnbmF0dXJlLXBhcmVuJyAgICAgICAgICAgICAgICAgICAgID0+IFsgMCwgMiBdLAogICAgICAgICdzcXVhcmUtYnJhY2tldC10aWdodG5lc3MnICAgICAgICAgICAgICAgICAgPT4gWyAwLCAyIF0sCiAgICAgICAgJ3NxdWFyZS1icmFja2V0LXZlcnRpY2FsLXRpZ2h0bmVzcycgICAgICAgICA9PiBbIDAsIDIgXSwKICAgICAgICAnc3F1YXJlLWJyYWNrZXQtdmVydGljYWwtdGlnaHRuZXNzLWNsb3NpbmcnID0+IFsgMCwgMyBdLAogICAgICAgICdzdGFydGluZy1pbmRlbnRhdGlvbi1sZXZlbCcgICAgICAgICAgICAgICAgPT4gWyAwLCB1bmRlZiBdLAogICAgICAgICd0aW1lb3V0LWluLXNlY29uZHMnICAgICAgICAgICAgICAgICAgICAgICAgPT4gWyAwLCB1bmRlZiBdLAogICAgICAgICd2ZXJ0aWNhbC10aWdodG5lc3MnICAgICAgICAgICAgICAgICAgICAgICAgPT4gWyAwLCAyIF0sCiAgICAgICAgJ3ZlcnRpY2FsLXRpZ2h0bmVzcy1jbG9zaW5nJyAgICAgICAgICAgICAgICA9PiBbIDAsIDMgXSwKICAgICAgICAndmFsaWduLXNpZ25lZC1udW1iZXJzLWxpbWl0JyAgICAgICAgICAgICAgID0+IFsgMCwgdW5kZWYgXSwKICAgICAgICAnd2hpdGVzcGFjZS1jeWNsZScgICAgICAgICAgICAgICAgICAgICAgICAgID0+IFsgMCwgdW5kZWYgXSwKICAgICk7CgogICAgIyBFbnRlciBkZWZhdWx0IHZhbHVlcyBpbnRvIHRoZSBpbnRlZ2VyIG9wdGlvbiByYW5nZSB0YWJsZQogICAgZm9yZWFjaCBteSAkb3B0IChAZGVmYXVsdHMpIHsKICAgICAgICBpZiAoICRvcHQgPX4gL14oLiopPShcZCspJC8gKSB7CiAgICAgICAgICAgIG15ICRrZXkgPSAkMTsKICAgICAgICAgICAgbXkgJGRlZiA9ICQyOwogICAgICAgICAgICBpZiAoIGRlZmluZWQoICRpbnRlZ2VyX29wdGlvbl9yYW5nZXska2V5fSApICkgewogICAgICAgICAgICAgICAgJGludGVnZXJfb3B0aW9uX3JhbmdleyRrZXl9LT5bMl0gPSAkZGVmOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgRW50ZXIgc3BlY2lhbCB2YWx1ZXMgd2hpY2ggaGF2ZSB1bmRlZiBhcyB0aGUgZGVmYXVsdC4KICAgICMgTm90ZSB0aGF0IGN0aSwgdnQsIGFuZCB2dGMgYXJlIGFsaWFzZXMgd2hpY2ggYXJlIGluY2x1ZGVkIHRvIHdvcmsKICAgICMgYXJvdW5kIGFuIG9sZCBwcm9ibGVtIHdpdGggbXNkb3MgKHNlZSBub3RlIGluIGNoZWNrX29wdGlvbnMpLgogICAgZm9yZWFjaCBteSAka2V5ICgKICAgICAgICBxdygKICAgICAgICBjbG9zaW5nLXRva2VuLWluZGVudGF0aW9uCiAgICAgICAgdmVydGljYWwtdGlnaHRuZXNzCiAgICAgICAgdmVydGljYWwtdGlnaHRuZXNzLWNsb3NpbmcKICAgICAgICBmaXhlZC1wb3NpdGlvbi1zaWRlLWNvbW1lbnQKICAgICAgICBzdGFydGluZy1pbmRlbnRhdGlvbi1sZXZlbAogICAgICAgICkKICAgICAgKQogICAgewogICAgICAgIGlmICggZGVmaW5lZCggJGludGVnZXJfb3B0aW9uX3JhbmdleyRrZXl9ICkKICAgICAgICAgICAgJiYgQHsgJGludGVnZXJfb3B0aW9uX3JhbmdleyRrZXl9IH0gPCAzICkKICAgICAgICB7CiAgICAgICAgICAgICRpbnRlZ2VyX29wdGlvbl9yYW5nZXska2V5fS0+WzJdID0gdW5kZWY7CiAgICAgICAgfQogICAgfQoKICAgICMgVmVyaWZ5IHRoYXQgb25seSBpbnRlZ2VycyBvZiB0eXBlID1pIGFyZSBpbiB0aGUgYWJvdmUgbGlzdCBkdXJpbmcKICAgICMgZGV2ZWxvcG1lbnQuIFRoaXMgd2lsbCBndWFyZCBhZ2FpbnN0IHNwZWxsaW5nIGVycm9ycy4KICAgIGlmIChERVZFTF9NT0RFKSB7CiAgICAgICAgbXkgJW9wdGlvbl9mbGFnOwogICAgICAgIG15ICRtc2cgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgZm9yZWFjaCBteSAkb3B0IChAb3B0aW9uX3N0cmluZykgewogICAgICAgICAgICBteSAka2V5ICA9ICRvcHQ7CiAgICAgICAgICAgIG15ICRmbGFnID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICBpZiAoICRrZXkgPX4gLyguKikoIXw9Lip8Oi4qKSQvICkgewogICAgICAgICAgICAgICAgJGtleSAgPSAkMTsKICAgICAgICAgICAgICAgICRmbGFnID0gJDI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJG9wdGlvbl9mbGFneyRrZXl9ID0gJGZsYWc7CiAgICAgICAgfQoKICAgICAgICAjIEJlIHN1cmUgYWxsIGtleXMgb2YgJWludGVnZXJfb3B0aW9uX3JhbmdlIGhhdmUgb3B0aW9uIHR5cGUgJz1pJwogICAgICAgIGZvcmVhY2ggbXkgJG9wdCAoIGtleXMgJWludGVnZXJfb3B0aW9uX3JhbmdlICkgewogICAgICAgICAgICBteSAkZmxhZyA9ICRvcHRpb25fZmxhZ3skb3B0fTsKICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkZmxhZykgKSB7ICRmbGFnID0gRU1QVFlfU1RSSU5HIH0KICAgICAgICAgICAgaWYgKCAkZmxhZyBuZSAnPWknICkgewoKICAgICAgICAgICAgICAgICMgSWYgdGhpcyBmYXVsdCBvY2N1cnMsIG9uZSBvZiB0aGUgaXRlbXMgaW4gdGhlIHByZXZpb3VzIGhhc2gKICAgICAgICAgICAgICAgICMgaXMgbm90IHR5cGUgPWksIHBvc3NpYmx5IGR1ZSB0byBpbmNvcnJlY3Qgc3BlbGxpbmcuCiAgICAgICAgICAgICAgICAkbXNnIC49CiJPcHRpb24gJyRvcHQnIGhhcyBhbiBlbnRyeSBpbiAnJWludGVnZXJfb3B0aW9uX3JhbmdlJyBidXQgaXMgbm90IGFuIGludGVnZXJcbiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgQmUgc3VyZSBhbGwgJz1pJyBvcHRpb25zIGFyZSBpbiAlaW50ZWdlcl9vcHRpb25fcmFuZ2UuIFRoaXMgaXMgbm90CiAgICAgICAgIyBzdHJpY3RseSBuZWNlc3NhcnkgYnV0IGhlbHBzIGluc3VyZSB0aGF0IG5vdGhpbmcgd2FzIG1pc3NlZC4KICAgICAgICBmb3JlYWNoIG15ICRvcHQgKCBrZXlzICVvcHRpb25fZmxhZyApIHsKICAgICAgICAgICAgbXkgJGZsYWcgPSAkb3B0aW9uX2ZsYWd7JG9wdH07CiAgICAgICAgICAgIG5leHQgaWYgKCAkZmxhZyBuZSAnPWknICk7CiAgICAgICAgICAgIGlmICggIWRlZmluZWQoICRpbnRlZ2VyX29wdGlvbl9yYW5nZXskb3B0fSApICkgewogICAgICAgICAgICAgICAgJG1zZyAuPQoiSW50ZWdlciBvcHRpb24gJyRvcHQnIGlzIG5lZWRzIGFuIGVudHJ5IGluICclaW50ZWdlcl9vcHRpb25fcmFuZ2UnXG4iOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGxvb2sgZm9yIGludGVnZXIgb3B0aW9ucyB3aXRob3V0IGRlZmF1bHQgdmFsdWVzCiAgICAgICAgZm9yZWFjaCBteSAkb3B0ICgga2V5cyAlaW50ZWdlcl9vcHRpb25fcmFuZ2UgKSB7CiAgICAgICAgICAgIGlmICggQHsgJGludGVnZXJfb3B0aW9uX3JhbmdleyRvcHR9IH0gPCAzICkgewogICAgICAgICAgICAgICAgJG1zZyAuPSAiSW50ZWdlciBvcHRpb24gJyRvcHQnIGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IHZhbHVlXG4iOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoJG1zZykgewogICAgICAgICAgICBGYXVsdCgkbXNnKTsKICAgICAgICB9CiAgICB9CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIERlZmluZSBhYmJyZXZpYXRpb25zIHdoaWNoIHdpbGwgYmUgZXhwYW5kZWQgaW50byB0aGUgYWJvdmUgcHJpbWl0aXZlcy4KICAgICMgVGhlc2UgbWF5IGJlIGRlZmluZWQgcmVjdXJzaXZlbHkuCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICVleHBhbnNpb24gPSAoCiAgICAgICAgJWV4cGFuc2lvbiwKICAgICAgICAnZnJlZXplLW5ld2xpbmVzJyAgICA9PiBbcXcobm9hZGQtbmV3bGluZXMgbm9kZWxldGUtb2xkLW5ld2xpbmVzKV0sCiAgICAgICAgJ2ZubCcgICAgICAgICAgICAgICAgPT4gW3F3KGZyZWV6ZS1uZXdsaW5lcyldLAogICAgICAgICdmcmVlemUtd2hpdGVzcGFjZScgID0+IFtxdyhub2FkZC13aGl0ZXNwYWNlIG5vZGVsZXRlLW9sZC13aGl0ZXNwYWNlKV0sCiAgICAgICAgJ2Z3cycgICAgICAgICAgICAgICAgPT4gW3F3KGZyZWV6ZS13aGl0ZXNwYWNlKV0sCiAgICAgICAgJ2ZyZWV6ZS1ibGFuay1saW5lcycgPT4KICAgICAgICAgIFtxdyhtYXhpbXVtLWNvbnNlY3V0aXZlLWJsYW5rLWxpbmVzPTAga2VlcC1vbGQtYmxhbmstbGluZXM9MildLAogICAgICAgICdmYmwnICAgICAgICAgICAgICAgID0+IFtxdyhmcmVlemUtYmxhbmstbGluZXMpXSwKICAgICAgICAnaW5kZW50LW9ubHknICAgICAgICA9PiBbcXcoZnJlZXplLW5ld2xpbmVzIGZyZWV6ZS13aGl0ZXNwYWNlKV0sCiAgICAgICAgJ291dGRlbnQtbG9uZy1saW5lcycgPT4gW3F3KG91dGRlbnQtbG9uZy1xdW90ZXMgb3V0ZGVudC1sb25nLWNvbW1lbnRzKV0sCiAgICAgICAgJ25vb3V0ZGVudC1sb25nLWxpbmVzJyA9PgogICAgICAgICAgW3F3KG5vb3V0ZGVudC1sb25nLXF1b3RlcyBub291dGRlbnQtbG9uZy1jb21tZW50cyldLAogICAgICAgICdvbGwnICAgICAgICAgICAgICAgICA9PiBbcXcob3V0ZGVudC1sb25nLWxpbmVzKV0sCiAgICAgICAgJ25vbGwnICAgICAgICAgICAgICAgID0+IFtxdyhub291dGRlbnQtbG9uZy1saW5lcyldLAogICAgICAgICdpbycgICAgICAgICAgICAgICAgICA9PiBbcXcoaW5kZW50LW9ubHkpXSwKICAgICAgICAnZGVsZXRlLWFsbC1jb21tZW50cycgPT4KICAgICAgICAgIFtxdyhkZWxldGUtYmxvY2stY29tbWVudHMgZGVsZXRlLXNpZGUtY29tbWVudHMgZGVsZXRlLXBvZCldLAogICAgICAgICdub2RlbGV0ZS1hbGwtY29tbWVudHMnID0+CiAgICAgICAgICBbcXcobm9kZWxldGUtYmxvY2stY29tbWVudHMgbm9kZWxldGUtc2lkZS1jb21tZW50cyBub2RlbGV0ZS1wb2QpXSwKICAgICAgICAnZGFjJyAgICAgICAgICAgICAgPT4gW3F3KGRlbGV0ZS1hbGwtY29tbWVudHMpXSwKICAgICAgICAnbmRhYycgICAgICAgICAgICAgPT4gW3F3KG5vZGVsZXRlLWFsbC1jb21tZW50cyldLAogICAgICAgICdnbnUnICAgICAgICAgICAgICA9PiBbcXcoZ251LXN0eWxlKV0sCiAgICAgICAgJ3BicCcgICAgICAgICAgICAgID0+IFtxdyhwZXJsLWJlc3QtcHJhY3RpY2VzKV0sCiAgICAgICAgJ3RlZS1hbGwtY29tbWVudHMnID0+CiAgICAgICAgICBbcXcodGVlLWJsb2NrLWNvbW1lbnRzIHRlZS1zaWRlLWNvbW1lbnRzIHRlZS1wb2QpXSwKICAgICAgICAnbm90ZWUtYWxsLWNvbW1lbnRzJyA9PgogICAgICAgICAgW3F3KG5vdGVlLWJsb2NrLWNvbW1lbnRzIG5vdGVlLXNpZGUtY29tbWVudHMgbm90ZWUtcG9kKV0sCiAgICAgICAgJ3RhYycgICA9PiBbcXcodGVlLWFsbC1jb21tZW50cyldLAogICAgICAgICdudGFjJyAgPT4gW3F3KG5vdGVlLWFsbC1jb21tZW50cyldLAogICAgICAgICdodG1sJyAgPT4gW3F3KGZvcm1hdD1odG1sKV0sCiAgICAgICAgJ25odG1sJyA9PiBbcXcoZm9ybWF0PXRpZHkpXSwKICAgICAgICAndGlkeScgID0+IFtxdyhmb3JtYXQ9dGlkeSldLAoKICAgICAgICAnYnJhY2UtbGVmdCcgPT4gW3F3KG9wZW5pbmctYnJhY2Utb24tbmV3LWxpbmUpXSwKCiAgICAgICAgIyAtY2IgaXMgbm93IGEgc3lub255bSBmb3IgLWNlCiAgICAgICAgJ2NiJyAgICAgICAgICAgICA9PiBbcXcoY3VkZGxlZC1lbHNlKV0sCiAgICAgICAgJ2N1ZGRsZWQtYmxvY2tzJyA9PiBbcXcoY3VkZGxlZC1lbHNlKV0sCgogICAgICAgICd1dGY4JyAgPT4gW3F3KGNoYXJhY3Rlci1lbmNvZGluZz11dGY4KV0sCiAgICAgICAgJ1VURjgnICA9PiBbcXcoY2hhcmFjdGVyLWVuY29kaW5nPXV0ZjgpXSwKICAgICAgICAnZ3Vlc3MnID0+IFtxdyhjaGFyYWN0ZXItZW5jb2Rpbmc9Z3Vlc3MpXSwKCiAgICAgICAgJ3N3YWxsb3ctb3B0aW9uYWwtYmxhbmstbGluZXMnICAgPT4gW3F3KGtibD0wKV0sCiAgICAgICAgJ25vc3dhbGxvdy1vcHRpb25hbC1ibGFuay1saW5lcycgPT4gW3F3KGtibD0xKV0sCiAgICAgICAgJ3NvYicgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gW3F3KGtibD0wKV0sCiAgICAgICAgJ25zb2InICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gW3F3KGtibD0xKV0sCgogICAgICAgICdicmVhay1hZnRlci1jb21tYS1hcnJvd3MnICAgPT4gW3F3KGNhYj0wKV0sCiAgICAgICAgJ25vYnJlYWstYWZ0ZXItY29tbWEtYXJyb3dzJyA9PiBbcXcoY2FiPTEpXSwKICAgICAgICAnYmFhJyAgICAgICAgICAgICAgICAgICAgICAgID0+IFtxdyhjYWI9MCldLAogICAgICAgICduYmFhJyAgICAgICAgICAgICAgICAgICAgICAgPT4gW3F3KGNhYj0xKV0sCgogICAgICAgICdibGFua3MtYmVmb3JlLXN1YnMnICAgPT4gW3F3KGJsYnM9MSBibGJwPTEpXSwKICAgICAgICAnYmJzJyAgICAgICAgICAgICAgICAgID0+IFtxdyhibGJzPTEgYmxicD0xKV0sCiAgICAgICAgJ25vYmxhbmtzLWJlZm9yZS1zdWJzJyA9PiBbcXcoYmxicz0wIGJsYnA9MCldLAogICAgICAgICduYmJzJyAgICAgICAgICAgICAgICAgPT4gW3F3KGJsYnM9MCBibGJwPTApXSwKCiAgICAgICAgJ2tleXdvcmQtZ3JvdXAtYmxhbmtzJyAgID0+IFtxdyhrZ2JiPTIga2diaSBrZ2JhPTIpXSwKICAgICAgICAna2diJyAgICAgICAgICAgICAgICAgICAgPT4gW3F3KGtnYmI9MiBrZ2JpIGtnYmE9MildLAogICAgICAgICdub2tleXdvcmQtZ3JvdXAtYmxhbmtzJyA9PiBbcXcoa2diYj0xIG5rZ2JpIGtnYmE9MSldLAogICAgICAgICdua2diJyAgICAgICAgICAgICAgICAgICA9PiBbcXcoa2diYj0xIG5rZ2JpIGtnYmE9MSldLAoKICAgICAgICAnYnJlYWstYXQtb2xkLXRyaW5hcnktYnJlYWtwb2ludHMnID0+IFtxdyhib3QpXSwKCiAgICAgICAgJ2N0aT0wJyA9PiBbcXcoY3BpPTAgY2JpPTAgY3NiaT0wKV0sCiAgICAgICAgJ2N0aT0xJyA9PiBbcXcoY3BpPTEgY2JpPTEgY3NiaT0xKV0sCiAgICAgICAgJ2N0aT0yJyA9PiBbcXcoY3BpPTIgY2JpPTIgY3NiaT0yKV0sCiAgICAgICAgJ2ljcCcgICA9PiBbcXcoY3BpPTIgY2JpPTIgY3NiaT0yKV0sCiAgICAgICAgJ25pY3AnICA9PiBbcXcoY3BpPTAgY2JpPTAgY3NiaT0wKV0sCgogICAgICAgICdjbG9zaW5nLXRva2VuLWluZGVudGF0aW9uPTAnID0+IFtxdyhjcGk9MCBjYmk9MCBjc2JpPTApXSwKICAgICAgICAnY2xvc2luZy10b2tlbi1pbmRlbnRhdGlvbj0xJyA9PiBbcXcoY3BpPTEgY2JpPTEgY3NiaT0xKV0sCiAgICAgICAgJ2Nsb3NpbmctdG9rZW4taW5kZW50YXRpb249MicgPT4gW3F3KGNwaT0yIGNiaT0yIGNzYmk9MildLAogICAgICAgICdpbmRlbnQtY2xvc2luZy1wYXJlbicgICAgICAgID0+IFtxdyhjcGk9MiBjYmk9MiBjc2JpPTIpXSwKICAgICAgICAnbm9pbmRlbnQtY2xvc2luZy1wYXJlbicgICAgICA9PiBbcXcoY3BpPTAgY2JpPTAgY3NiaT0wKV0sCgogICAgICAgICd2dD0wJyA9PiBbcXcocHZ0PTAgYnZ0PTAgc2J2dD0wKV0sCiAgICAgICAgJ3Z0PTEnID0+IFtxdyhwdnQ9MSBidnQ9MSBzYnZ0PTEpXSwKICAgICAgICAndnQ9MicgPT4gW3F3KHB2dD0yIGJ2dD0yIHNidnQ9MildLAoKICAgICAgICAndmVydGljYWwtdGlnaHRuZXNzPTAnID0+IFtxdyhwdnQ9MCBidnQ9MCBzYnZ0PTApXSwKICAgICAgICAndmVydGljYWwtdGlnaHRuZXNzPTEnID0+IFtxdyhwdnQ9MSBidnQ9MSBzYnZ0PTEpXSwKICAgICAgICAndmVydGljYWwtdGlnaHRuZXNzPTInID0+IFtxdyhwdnQ9MiBidnQ9MiBzYnZ0PTIpXSwKCiAgICAgICAgJ3Z0Yz0wJyA9PiBbcXcocHZ0Yz0wIGJ2dGM9MCBzYnZ0Yz0wKV0sCiAgICAgICAgJ3Z0Yz0xJyA9PiBbcXcocHZ0Yz0xIGJ2dGM9MSBzYnZ0Yz0xKV0sCiAgICAgICAgJ3Z0Yz0yJyA9PiBbcXcocHZ0Yz0yIGJ2dGM9MiBzYnZ0Yz0yKV0sCgogICAgICAgICd2ZXJ0aWNhbC10aWdodG5lc3MtY2xvc2luZz0wJyA9PiBbcXcocHZ0Yz0wIGJ2dGM9MCBzYnZ0Yz0wKV0sCiAgICAgICAgJ3ZlcnRpY2FsLXRpZ2h0bmVzcy1jbG9zaW5nPTEnID0+IFtxdyhwdnRjPTEgYnZ0Yz0xIHNidnRjPTEpXSwKICAgICAgICAndmVydGljYWwtdGlnaHRuZXNzLWNsb3Npbmc9MicgPT4gW3F3KHB2dGM9MiBidnRjPTIgc2J2dGM9MildLAoKICAgICAgICAnb3RyJyAgICAgICAgICAgICAgICAgICA9PiBbcXcob3ByIG9oYnIgb3NicildLAogICAgICAgICdvcGVuaW5nLXRva2VuLXJpZ2h0JyAgID0+IFtxdyhvcHIgb2hiciBvc2JyKV0sCiAgICAgICAgJ25vdHInICAgICAgICAgICAgICAgICAgPT4gW3F3KG5vcHIgbm9oYnIgbm9zYnIpXSwKICAgICAgICAnbm9vcGVuaW5nLXRva2VuLXJpZ2h0JyA9PiBbcXcobm9wciBub2hiciBub3NicildLAoKICAgICAgICAnc290JyAgICAgICAgICAgICAgICAgICAgPT4gW3F3KHNvcCBzb2hiIHNvc2IpXSwKICAgICAgICAnbnNvdCcgICAgICAgICAgICAgICAgICAgPT4gW3F3KG5zb3AgbnNvaGIgbnNvc2IpXSwKICAgICAgICAnc3RhY2stb3BlbmluZy10b2tlbnMnICAgPT4gW3F3KHNvcCBzb2hiIHNvc2IpXSwKICAgICAgICAnbm9zdGFjay1vcGVuaW5nLXRva2VucycgPT4gW3F3KG5zb3AgbnNvaGIgbnNvc2IpXSwKCiAgICAgICAgJ3NjdCcgICAgICAgICAgICAgICAgICAgID0+IFtxdyhzY3Agc2NoYiBzY3NiKV0sCiAgICAgICAgJ3N0YWNrLWNsb3NpbmctdG9rZW5zJyAgID0+IFtxdyhzY3Agc2NoYiBzY3NiKV0sCiAgICAgICAgJ25zY3QnICAgICAgICAgICAgICAgICAgID0+IFtxdyhuc2NwIG5zY2hiIG5zY3NiKV0sCiAgICAgICAgJ25vc3RhY2stY2xvc2luZy10b2tlbnMnID0+IFtxdyhuc2NwIG5zY2hiIG5zY3NiKV0sCgogICAgICAgICdzYWMnICAgICAgICAgICAgICAgICAgICA9PiBbcXcoc290IHNjdCldLAogICAgICAgICduc2FjJyAgICAgICAgICAgICAgICAgICA9PiBbcXcobnNvdCBuc2N0KV0sCiAgICAgICAgJ3N0YWNrLWFsbC1jb250YWluZXJzJyAgID0+IFtxdyhzb3Qgc2N0KV0sCiAgICAgICAgJ25vc3RhY2stYWxsLWNvbnRhaW5lcnMnID0+IFtxdyhuc290IG5zY3QpXSwKCiAgICAgICAgJ2FjdD0wJyAgICAgICAgICAgICAgICAgICAgICA9PiBbcXcocHQ9MCBzYnQ9MCBidD0wIGJidD0wKV0sCiAgICAgICAgJ2FjdD0xJyAgICAgICAgICAgICAgICAgICAgICA9PiBbcXcocHQ9MSBzYnQ9MSBidD0xIGJidD0xKV0sCiAgICAgICAgJ2FjdD0yJyAgICAgICAgICAgICAgICAgICAgICA9PiBbcXcocHQ9MiBzYnQ9MiBidD0yIGJidD0yKV0sCiAgICAgICAgJ2FsbC1jb250YWluZXJzLXRpZ2h0bmVzcz0wJyA9PiBbcXcocHQ9MCBzYnQ9MCBidD0wIGJidD0wKV0sCiAgICAgICAgJ2FsbC1jb250YWluZXJzLXRpZ2h0bmVzcz0xJyA9PiBbcXcocHQ9MSBzYnQ9MSBidD0xIGJidD0xKV0sCiAgICAgICAgJ2FsbC1jb250YWluZXJzLXRpZ2h0bmVzcz0yJyA9PiBbcXcocHQ9MiBzYnQ9MiBidD0yIGJidD0yKV0sCgogICAgICAgICdzdGFjay1vcGVuaW5nLWJsb2NrLWJyYWNlJyAgID0+IFtxdyhiYnZ0PTIgYmJ2dGw9KildLAogICAgICAgICdzb2JiJyAgICAgICAgICAgICAgICAgICAgICAgID0+IFtxdyhiYnZ0PTIgYmJ2dGw9KildLAogICAgICAgICdub3N0YWNrLW9wZW5pbmctYmxvY2stYnJhY2UnID0+IFtxdyhiYnZ0PTApXSwKICAgICAgICAnbnNvYmInICAgICAgICAgICAgICAgICAgICAgICA9PiBbcXcoYmJ2dD0wKV0sCgogICAgICAgICdjb252ZXJnZScgICA9PiBbcXcoaXQ9NCldLAogICAgICAgICdub2NvbnZlcmdlJyA9PiBbcXcoaXQ9MSldLAogICAgICAgICdjb252JyAgICAgICA9PiBbcXcoaXQ9NCldLAogICAgICAgICduY29udicgICAgICA9PiBbcXcoaXQ9MSldLAoKICAgICAgICAndmFsaWduJyAgID0+IFtxdyh2YyB2c2MgdmJjKV0sCiAgICAgICAgJ25vdmFsaWduJyA9PiBbcXcobnZjIG52c2MgbnZiYyldLAoKICAgICAgICAjIE5PVEU6IFRoaXMgaXMgYSBwb3NzaWJsZSBmdXR1cmUgc2hvcnRjdXQuICBCdXQgaXQgd2lsbCByZW1haW4KICAgICAgICAjIGRlYWN0aXZhdGVkIHVudGlsIHRoZSAtbHB4bCBmbGFnIGlzIG5vIGxvbmdlciBleHBlcmltZW50YWwuCiAgICAgICAgIyAnbGluZS11cC1mdW5jdGlvbi1wYXJlbnRoZXNlcycgPT4gWyBxdyhscCksIHEjbHB4bD1bIHsgRigyIyBdLAogICAgICAgICMgJ2xmcCcgICAgICAgICAgICAgICAgICAgICAgICAgID0+IFtxdyhsaW5lLXVwLWZ1bmN0aW9uLXBhcmVudGhlc2VzKV0sCgogICAgICAgICMgJ21hbmdsZScgb3JpZ2luYWxseSBkZWxldGVkIHBvZCBhbmQgY29tbWVudHMsIGJ1dCB0byBrZWVwIGl0CiAgICAgICAgIyByZXZlcnNpYmxlLCBpdCBubyBsb25nZXIgZG9lcy4gIEJ1dCBpZiB5b3UgcmVhbGx5IHdhbnQgdG8KICAgICAgICAjIGRlbGV0ZSB0aGVtLCBqdXN0IHVzZToKICAgICAgICAjICAgLW1hbmdsZSAtZGFjCgogICAgICAgICMgQW4gaW50ZXJlc3RpbmcgdXNlIGZvciAnbWFuZ2xlJyBpcyB0byBkbyB0aGlzOgogICAgICAgICMgICAgcGVybHRpZHkgLW1hbmdsZSBteWZpbGUucGwgLXN0IHwgcGVybHRpZHkgLW8gbXlmaWxlLnBsLm5ldwogICAgICAgICMgd2hpY2ggd2lsbCBmb3JtIGFzIG1hbnkgb25lLWxpbmUgYmxvY2tzIGFzIHBvc3NpYmxlCgogICAgICAgICdtYW5nbGUnID0+IFsKICAgICAgICAgICAgcXcoCiAgICAgICAgICAgICAga2VlcC1vbGQtYmxhbmstbGluZXM9MAogICAgICAgICAgICAgIGRlbGV0ZS1vbGQtbmV3bGluZXMKICAgICAgICAgICAgICBkZWxldGUtb2xkLXdoaXRlc3BhY2UKICAgICAgICAgICAgICBkZWxldGUtc2VtaWNvbG9ucwogICAgICAgICAgICAgIGluZGVudC1jb2x1bW5zPTAKICAgICAgICAgICAgICBtYXhpbXVtLWNvbnNlY3V0aXZlLWJsYW5rLWxpbmVzPTAKICAgICAgICAgICAgICBtYXhpbXVtLWxpbmUtbGVuZ3RoPTEwMDAwMAogICAgICAgICAgICAgIG5vYWRkLW5ld2xpbmVzCiAgICAgICAgICAgICAgbm9hZGQtc2VtaWNvbG9ucwogICAgICAgICAgICAgIG5vYWRkLXdoaXRlc3BhY2UKICAgICAgICAgICAgICBub2JsYW5rcy1iZWZvcmUtYmxvY2tzCiAgICAgICAgICAgICAgYmxhbmstbGluZXMtYmVmb3JlLXN1YnM9MAogICAgICAgICAgICAgIGJsYW5rLWxpbmVzLWJlZm9yZS1wYWNrYWdlcz0wCiAgICAgICAgICAgICAgbm90YWJzCiAgICAgICAgICAgICkKICAgICAgICBdLAoKICAgICAgICAjICdleHRydWRlJyBvcmlnaW5hbGx5IGRlbGV0ZWQgcG9kIGFuZCBjb21tZW50cywgYnV0IHRvIGtlZXAgaXQKICAgICAgICAjIHJldmVyc2libGUsIGl0IG5vIGxvbmdlciBkb2VzLiAgQnV0IGlmIHlvdSByZWFsbHkgd2FudCB0bwogICAgICAgICMgZGVsZXRlIHRoZW0sIGp1c3QgdXNlCiAgICAgICAgIyAgIGV4dHJ1ZGUgLWRhYwogICAgICAgICMKICAgICAgICAjIEFuIGludGVyZXN0aW5nIHVzZSBmb3IgJ2V4dHJ1ZGUnIGlzIHRvIGRvIHRoaXM6CiAgICAgICAgIyAgICBwZXJsdGlkeSAtZXh0cnVkZSBteWZpbGUucGwgLXN0IHwgcGVybHRpZHkgLW8gbXlmaWxlLnBsLm5ldwogICAgICAgICMgd2hpY2ggd2lsbCBicmVhayB1cCBhbGwgb25lLWxpbmUgYmxvY2tzLgogICAgICAgICdleHRydWRlJyA9PiBbCiAgICAgICAgICAgIHF3KAogICAgICAgICAgICAgIGNpPTAKICAgICAgICAgICAgICBkZWxldGUtb2xkLW5ld2xpbmVzCiAgICAgICAgICAgICAgZGVsZXRlLW9sZC13aGl0ZXNwYWNlCiAgICAgICAgICAgICAgZGVsZXRlLXNlbWljb2xvbnMKICAgICAgICAgICAgICBpbmRlbnQtY29sdW1ucz0wCiAgICAgICAgICAgICAgbWF4aW11bS1jb25zZWN1dGl2ZS1ibGFuay1saW5lcz0wCiAgICAgICAgICAgICAgbWF4aW11bS1saW5lLWxlbmd0aD0xCiAgICAgICAgICAgICAgbm9hZGQtc2VtaWNvbG9ucwogICAgICAgICAgICAgIG5vYWRkLXdoaXRlc3BhY2UKICAgICAgICAgICAgICBub2JsYW5rcy1iZWZvcmUtYmxvY2tzCiAgICAgICAgICAgICAgYmxhbmstbGluZXMtYmVmb3JlLXN1YnM9MAogICAgICAgICAgICAgIGJsYW5rLWxpbmVzLWJlZm9yZS1wYWNrYWdlcz0wCiAgICAgICAgICAgICAgbm9mdXp6eS1saW5lLWxlbmd0aAogICAgICAgICAgICAgIG5vdGFicwogICAgICAgICAgICAgIG5vcmVjb21iaW5lCiAgICAgICAgICAgICkKICAgICAgICBdLAoKICAgICAgICAjIHRoaXMgc3R5bGUgdHJpZXMgdG8gZm9sbG93IHRoZSBHTlUgQ29kaW5nIFN0YW5kYXJkcyAod2hpY2ggZG8KICAgICAgICAjIG5vdCByZWFsbHkgYXBwbHkgdG8gcGVybCBidXQgd2hpY2ggYXJlIGZvbGxvd2VkIGJ5IHNvbWUgcGVybAogICAgICAgICMgcHJvZ3JhbW1lcnMpLgogICAgICAgICdnbnUtc3R5bGUnID0+IFsKICAgICAgICAgICAgcXcoCiAgICAgICAgICAgICAgbHAgYmwgbm9sbCBwdD0yIGJ0PTIgc2J0PTIgY3BpPTEgY3NiaT0xIGNiaT0xCiAgICAgICAgICAgICkKICAgICAgICBdLAoKICAgICAgICAjIFN0eWxlIHN1Z2dlc3RlZCBpbiBEYW1pYW4gQ29ud2F5J3MgUGVybCBCZXN0IFByYWN0aWNlcwogICAgICAgICdwZXJsLWJlc3QtcHJhY3RpY2VzJyA9PiBbCiAgICAgICAgICAgIHF3KGw9NzggaT00IGNpPTQgc3Qgc2UgdnQ9MiBjdGk9MCBwdD0xIGJ0PTEgc2J0PTEgYmJ0PTEgbnNmcyBub2xxKSwKcSh3YmI9JSArIC0gKiAvIHggIT0gPT0gPj0gPD0gPX4gIX4gPCA+IHwgJiA9ICoqPSArPSAqPSAmPSA8PD0gJiY9IC09IC89IHw9ID4+PSB8fD0gLy89IC49ICU9IF49IHg9KQogICAgICAgIF0sCgogICAgICAgICMgQWRkaXRpb25hbCBzdHlsZXMgY2FuIGJlIGFkZGVkIGhlcmUKICAgICk7CgogICAgUGVybDo6VGlkeTo6SHRtbFdyaXRlci0+bWFrZV9hYmJyZXZpYXRlZF9uYW1lcyggXCVleHBhbnNpb24gKTsKCiAgICAjIFVuY29tbWVudCBuZXh0IGxpbmUgdG8gZHVtcCBhbGwgZXhwYW5zaW9ucyBmb3IgZGVidWdnaW5nOgogICAgIyBkdW1wX3Nob3J0X25hbWVzKFwlZXhwYW5zaW9uKTsKICAgIHJldHVybiAoIFxAb3B0aW9uX3N0cmluZywgXEBkZWZhdWx0cywgXCVleHBhbnNpb24sIFwlb3B0aW9uX2NhdGVnb3J5LAogICAgICAgIFwlb3B0aW9uX3JhbmdlLCBcJWludGVnZXJfb3B0aW9uX3JhbmdlICk7Cgp9ICMjIGVuZCBzdWIgZ2VuZXJhdGVfb3B0aW9ucwoKeyAjPDw8IGNsb3N1cmUgcHJvY2Vzc19jb21tYW5kX2xpbmUKCiMgTWVtb2l6ZSBwcm9jZXNzX2NvbW1hbmRfbGluZS4gR2l2ZW4gc2FtZSBAQVJHViBwYXNzZWQgaW4sIHJldHVybiBzYW1lCiMgdmFsdWVzIGFuZCBzYW1lIEBBUkdWIGJhY2suCiMgVGhpcyBwYXRjaCB3YXMgc3VwcGxpZWQgYnkgSm9uYXRoYW4gU3dhcnR6IE5vdiAyMDEyIGFuZCBzaWduaWZpY2FudGx5IHNwZWVkcwojIHVwIG1hc29udGlkeSAoaHR0cHM6Ly9tZXRhY3Bhbi5vcmcvbW9kdWxlL21hc29udGlkeSkKCm15ICVwcm9jZXNzX2NvbW1hbmRfbGluZV9jYWNoZTsKCnN1YiBwcm9jZXNzX2NvbW1hbmRfbGluZSB7CgogICAgbXkgQHEgPSBAXzsKICAgIG15ICgKICAgICAgICAkcGVybHRpZHlyY19zdHJlYW0sICAgICAkaXNfV2luZG93c191dSwgJFdpbmRvd3NfdHlwZV91dSwKICAgICAgICAkcnBlbmRpbmdfY29tcGxhaW50X3V1LCAkZHVtcF9vcHRpb25zX3R5cGUKICAgICkgPSBAcTsKCiAgICAjIFRoaXMgaXMgdGhlIG91dGVyIHN1YiB3aGljaCBoYW5kbGVzIG1lbW9pemF0aW9uCgogICAgbXkgJHVzZV9jYWNoZSA9ICFkZWZpbmVkKCRwZXJsdGlkeXJjX3N0cmVhbSkgJiYgISRkdW1wX29wdGlvbnNfdHlwZTsKICAgIGlmICgkdXNlX2NhY2hlKSB7CiAgICAgICAgbXkgJGNhY2hlX2tleSA9IGpvaW4oIGNocigyOCksIEBBUkdWICk7CiAgICAgICAgaWYgKCBteSAkcmVzdWx0ID0gJHByb2Nlc3NfY29tbWFuZF9saW5lX2NhY2hleyRjYWNoZV9rZXl9ICkgewogICAgICAgICAgICBteSAoICRhcmd2LCBAcmV0dmFscyApID0gQHskcmVzdWx0fTsKICAgICAgICAgICAgQEFSR1YgPSBAeyRhcmd2fTsKICAgICAgICAgICAgcmV0dXJuIEByZXR2YWxzOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbXkgQHJldHZhbHMgPSBfcHJvY2Vzc19jb21tYW5kX2xpbmUoQHEpOwogICAgICAgICAgICAkcHJvY2Vzc19jb21tYW5kX2xpbmVfY2FjaGV7JGNhY2hlX2tleX0gPSBbIFxAQVJHViwgQHJldHZhbHMgXQogICAgICAgICAgICAgIGlmICRyZXR2YWxzWzBdLT57J21lbW9pemUnfTsKICAgICAgICAgICAgcmV0dXJuIEByZXR2YWxzOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgIHJldHVybiBfcHJvY2Vzc19jb21tYW5kX2xpbmUoQHEpOwogICAgfQp9ICMjIGVuZCBzdWIgcHJvY2Vzc19jb21tYW5kX2xpbmUKfSAjIyBlbmQgY2xvc3VyZSBwcm9jZXNzX2NvbW1hbmRfbGluZQoKIyAobm90ZSB0aGUgdW5kZXJzY29yZSBoZXJlKQpzdWIgX3Byb2Nlc3NfY29tbWFuZF9saW5lIHsKCiAgICBteSAoCiAgICAgICAgJHBlcmx0aWR5cmNfc3RyZWFtLCAgJGlzX1dpbmRvd3MsICRXaW5kb3dzX3R5cGUsCiAgICAgICAgJHJwZW5kaW5nX2NvbXBsYWludCwgJGR1bXBfb3B0aW9uc190eXBlCiAgICApID0gQF87CgogICAgIyBUaGlzIGlzIHRoZSBpbm5lciBzdWIgd2hpY2ggYWN0dWFsbHkgcHJvY2Vzc2VzIHRoZSBjb21tYW5kIGxpbmUKCiAgICB1c2UgR2V0b3B0OjpMb25nOwoKICAgICMgU2F2ZSBhbnkgY3VycmVudCBHZXRvcHQ6OkxvbmcgY29uZmlndXJhdGlvbgogICAgIyBhbmQgc2V0IHRvIEdldG9wdDo6TG9uZyBkZWZhdWx0cy4gIFVzZSBldmFsIHRvIGF2b2lkCiAgICAjIGJyZWFraW5nIG9sZCB2ZXJzaW9ucyBvZiBQZXJsIHdpdGhvdXQgdGhlc2Ugcm91dGluZXMuCiAgICAjIFByZXZpb3VzIGNvbmZpZ3VyYXRpb24gaXMgcmVzZXQgYXQgdGhlIGV4aXQgb2YgdGhpcyByb3V0aW5lLgogICAgbXkgJGdsYzsKICAgIGlmICggZXZhbCB7ICRnbGMgPSBHZXRvcHQ6Okxvbmc6OkNvbmZpZ3VyZSgpOyAxIH0gKSB7CiAgICAgICAgbXkgJG9rID0gZXZhbCB7IEdldG9wdDo6TG9uZzo6Q29uZmlnRGVmYXVsdHMoKTsgMSB9OwogICAgICAgIGlmICggISRvayAmJiBERVZFTF9NT0RFICkgewogICAgICAgICAgICBGYXVsdCgiRmFpbGVkIGNhbGwgdG8gR2V0b3B0OjpMb25nOjpDb25maWdEZWZhdWx0czogJEVWQUxfRVJST1JcbiIpOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgeyAkZ2xjID0gdW5kZWYgfQoKICAgIG15ICggJHJvcHRpb25fc3RyaW5nLCAkcmRlZmF1bHRzLCAkcmV4cGFuc2lvbiwKICAgICAgICAkcm9wdGlvbl9jYXRlZ29yeSwgJHJvcHRpb25fcmFuZ2UsICRyaW50ZWdlcl9vcHRpb25fcmFuZ2UgKQogICAgICA9IGdlbmVyYXRlX29wdGlvbnMoKTsKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgc2V0IHRoZSBkZWZhdWx0cyBieSBwYXNzaW5nIHRoZSBhYm92ZSBsaXN0IHRocm91Z2ggR2V0T3B0aW9ucwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBteSAlT3B0cyA9ICgpOwogICAgewogICAgICAgIGxvY2FsIEBBUkdWID0gKCk7CgogICAgICAgICMgZG8gbm90IGxvYWQgdGhlIGRlZmF1bHRzIGlmIHdlIGFyZSBqdXN0IGR1bXBpbmcgcGVybHRpZHlyYwogICAgICAgIGlmICggJGR1bXBfb3B0aW9uc190eXBlIG5lICdwZXJsdGlkeXJjJyApIHsKICAgICAgICAgICAgZm9yIG15ICRpICggQHskcmRlZmF1bHRzfSApIHsgcHVzaCBAQVJHViwgIi0tIiAuICRpIH0KICAgICAgICB9CiAgICAgICAgaWYgKCAhR2V0T3B0aW9ucyggXCVPcHRzLCBAeyRyb3B0aW9uX3N0cmluZ30gKSApIHsKICAgICAgICAgICAgRGllKAoiUHJvZ3JhbW1pbmcgQnVnIHJlcG9ydGVkIGJ5ICdHZXRPcHRpb25zJzogZXJyb3IgaW4gc2V0dGluZyBkZWZhdWx0IG9wdGlvbnMiCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIG15IEByYXdfb3B0aW9ucyAgICAgICAgPSAoKTsKICAgIG15ICRzYXdfaWdub3JlX3Byb2ZpbGUgPSAwOwogICAgbXkgJHNhd19kdW1wX3Byb2ZpbGUgICA9IDA7CiAgICBteSAkY29uZmlnX2ZpbGU7CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFRha2UgYSBmaXJzdCBsb29rIGF0IHRoZSBjb21tYW5kLWxpbmUgcGFyYW1ldGVycy4gIERvIGFzIG1hbnkKICAgICMgaW1tZWRpYXRlIGR1bXBzIGFzIHBvc3NpYmxlLCB3aGljaCBjYW4gYXZvaWQgY29uZnVzaW9uIGlmIHRoZQogICAgIyBwZXJsdGlkeXJjIGZpbGUgaGFzIGFuIGVycm9yLgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmb3JlYWNoIG15ICRpIChAQVJHVikgewoKICAgICAgICAkaSA9fiBzL14tLS8tLzsKICAgICAgICBpZiAoICRpID1+IC9eLShucHJvfG5vcHJvZmlsZXxuby1wcm9maWxlKSQvICkgewogICAgICAgICAgICAkc2F3X2lnbm9yZV9wcm9maWxlID0gMTsKICAgICAgICB9CgogICAgICAgICMgbm90ZTogdGhpcyBtdXN0IGNvbWUgYmVmb3JlIC1wcm8gYW5kIC1wcm9maWxlLCBiZWxvdzoKICAgICAgICBlbHNpZiAoICRpID1+IC9eLShkdW1wLXByb2ZpbGV8ZHBybykkLyApIHsKICAgICAgICAgICAgJHNhd19kdW1wX3Byb2ZpbGUgPSAxOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRpID1+IC9eLShwcm98cHJvZmlsZSk9KC4rKS8gKSB7CiAgICAgICAgICAgIGlmICggZGVmaW5lZCgkY29uZmlnX2ZpbGUpICkgewogICAgICAgICAgICAgICAgV2FybigKIk9ubHkgb25lIC1wcm89ZmlsZW5hbWUgYWxsb3dlZCwgdXNpbmcgJyQyJyBpbnN0ZWFkIG9mICckY29uZmlnX2ZpbGUnXG4iCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRjb25maWdfZmlsZSA9ICQyOwoKICAgICAgICAgICAgIyByZXNvbHZlIDxkaXI+Ly4uLi88ZmlsZT4sIG1lYW5pbmcgbG9vayB1cHdhcmRzIGZyb20gZGlyZWN0b3J5CiAgICAgICAgICAgIGlmICggZGVmaW5lZCgkY29uZmlnX2ZpbGUpICkgewogICAgICAgICAgICAgICAgaWYgKCBteSAoICRzdGFydF9kaXIsICRzZWFyY2hfZmlsZSApID0KICAgICAgICAgICAgICAgICAgICAoICRjb25maWdfZmlsZSA9fiBte14oLiopXC5cLlwuLyguKikkfSApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkc3RhcnRfZGlyID0gJy4nIGlmICEkc3RhcnRfZGlyOwogICAgICAgICAgICAgICAgICAgICRzdGFydF9kaXIgPSBDd2Q6OnJlYWxwYXRoKCRzdGFydF9kaXIpOwogICAgICAgICAgICAgICAgICAgIG15ICRmb3VuZF9maWxlID0KICAgICAgICAgICAgICAgICAgICAgIGZpbmRfZmlsZV91cHdhcmRzKCAkc3RhcnRfZGlyLCAkc2VhcmNoX2ZpbGUgKTsKICAgICAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQoJGZvdW5kX2ZpbGUpICkgewogICAgICAgICAgICAgICAgICAgICAgICAkY29uZmlnX2ZpbGUgPSAkZm91bmRfZmlsZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAhLWUgJGNvbmZpZ19maWxlICkgewogICAgICAgICAgICAgICAgRGllKAogICAgICAgICAgICAgICAgICAgICJjYW5ub3QgZmluZCBmaWxlIGdpdmVuIHdpdGggLXBybz0kY29uZmlnX2ZpbGU6ICRPU19FUlJPUlxuIgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRpID1+IC9eLShwcm98cHJvZmlsZSk9PyQvICkgewogICAgICAgICAgICBEaWUoInVzYWdlOiAtcHJvPWZpbGVuYW1lIG9yIC0tcHJvZmlsZT1maWxlbmFtZSwgbm8gc3BhY2VzXG4iKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkaSA9fiAvXi0oPzogaGVscCB8IFsgaCBcPyBdICkkL3hpICkgewogICAgICAgICAgICB1c2FnZSgpOwogICAgICAgICAgICBFeGl0KDApOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRpID1+IC9eLSh2ZXJzaW9ufHYpJC8gKSB7CiAgICAgICAgICAgIHNob3dfdmVyc2lvbigpOwogICAgICAgICAgICBFeGl0KDApOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRpID1+IC9eLShkdW1wLWRlZmF1bHRzfGRkZikkLyApIHsKICAgICAgICAgICAgZHVtcF9kZWZhdWx0cyggQHskcmRlZmF1bHRzfSApOwogICAgICAgICAgICBFeGl0KDApOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRpID1+IC9eLShkdW1wLWludGVnZXItb3B0aW9uLXJhbmdlfGRpb3IpJC8gKSB7CiAgICAgICAgICAgIGR1bXBfaW50ZWdlcl9vcHRpb25fcmFuZ2UoJHJpbnRlZ2VyX29wdGlvbl9yYW5nZSk7CiAgICAgICAgICAgIEV4aXQoMCk7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJGkgPX4gL14tKGR1bXAtbG9uZy1uYW1lc3xkbG4pJC8gKSB7CiAgICAgICAgICAgIGR1bXBfbG9uZ19uYW1lcyggQHskcm9wdGlvbl9zdHJpbmd9ICk7CiAgICAgICAgICAgIEV4aXQoMCk7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJGkgPX4gL14tKGR1bXAtc2hvcnQtbmFtZXN8ZHNuKSQvICkgewogICAgICAgICAgICBkdW1wX3Nob3J0X25hbWVzKCRyZXhwYW5zaW9uKTsKICAgICAgICAgICAgRXhpdCgwKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkaSA9fiAvXi0oZHVtcC10b2tlbi10eXBlc3xkdHQpJC8gKSB7CiAgICAgICAgICAgIFBlcmw6OlRpZHk6OlRva2VuaXplci0+ZHVtcF90b2tlbl90eXBlcygqU1RET1VUKTsKICAgICAgICAgICAgRXhpdCgwKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICMjIG5vIG1vcmUgc3BlY2lhbCBjYXNlcwogICAgICAgIH0KICAgIH0KCiAgICAjIFRoZSBhYm92ZSBjb21tYW5kcyBwcm9jZXNzZWQgYmVmb3JlIGRpc2FtYmlndWF0aW9uIGFuZCB0aGVuIEV4aXRlZC4gIFNvCiAgICAjIHdlIG5lZWQgdG8gY2hlY2sgYmVsb3cgdG8gc2VlIGlmIHRoZSB1c2VyIGVudGVyZWQgc29tZXRoaW5nIGxpa2UKICAgICMgJy1kdW1wLXQnIG9yICctaGUnLiBUaGlzIHdpbGwgc2xpcCBwYXN0IGhlcmUgYW5kIG5vdCBnZXQgcHJvY2Vzc2VkLgogICAgbXkgJWVhcmx5X2V4aXRfY29tbWFuZHMgPSAoCiAgICAgICAgJ2hlbHAnICAgICAgICAgICAgICAgICAgICAgID0+ICdoJywKICAgICAgICAndmVyc2lvbicgICAgICAgICAgICAgICAgICAgPT4gJ3YnLAogICAgICAgICdkdW1wLWRlZmF1bHRzJyAgICAgICAgICAgICA9PiAnZGRmJywKICAgICAgICAnZHVtcC1pbnRlZ2VyLW9wdGlvbi1yYW5nZScgPT4gJ2Rpb3InLAogICAgICAgICdkdW1wLWxvbmctbmFtZXMnICAgICAgICAgICA9PiAnZGxuJywKICAgICAgICAnZHVtcC1zaG9ydC1uYW1lcycgICAgICAgICAgPT4gJ2RzbicsCiAgICAgICAgJ2R1bXAtdG9rZW4tdHlwZXMnICAgICAgICAgID0+ICdkdHQnLAogICAgKTsKCiAgICBpZiAoICRzYXdfZHVtcF9wcm9maWxlICYmICRzYXdfaWdub3JlX3Byb2ZpbGUgKSB7CiAgICAgICAgV2FybigiTm8gcHJvZmlsZSB0byBkdW1wIGJlY2F1c2Ugb2YgLW5wcm9cbiIpOwogICAgICAgIEV4aXQoMSk7CiAgICB9CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgcmVhZCBhbnkgLnBlcmx0aWR5cmMgY29uZmlndXJhdGlvbiBmaWxlCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgaWYgKCAhJHNhd19pZ25vcmVfcHJvZmlsZSApIHsKCiAgICAgICAgIyByZXNvbHZlIHBvc3NpYmxlIGNvbmZsaWN0IGJldHdlZW4gJHBlcmx0aWR5cmNfc3RyZWFtIHBhc3NlZAogICAgICAgICMgYXMgY2FsbCBwYXJhbWV0ZXIgdG8gcGVybHRpZHkgYW5kIC1wcm89ZmlsZW5hbWUgb24gY29tbWFuZAogICAgICAgICMgbGluZS4KICAgICAgICBpZiAoJHBlcmx0aWR5cmNfc3RyZWFtKSB7CiAgICAgICAgICAgIGlmICggZGVmaW5lZCgkY29uZmlnX2ZpbGUpICkgewogICAgICAgICAgICAgICAgV2Fybig8PEVPTSk7CiBDb25mbGljdDogYSBwZXJsdGlkeXJjIGNvbmZpZ3VyYXRpb24gZmlsZSB3YXMgc3BlY2lmaWVkIGJvdGggYXMgdGhpcwogcGVybHRpZHkgY2FsbCBwYXJhbWV0ZXI6ICRwZXJsdGlkeXJjX3N0cmVhbQogYW5kIHdpdGggdGhpcyAtcHJvZmlsZT0kY29uZmlnX2ZpbGUuCiBVc2luZyAtcHJvZmlsZT0kY29uZmlnX2ZpbGUuCkVPTQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJGNvbmZpZ19maWxlID0gJHBlcmx0aWR5cmNfc3RyZWFtOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGxvb2sgZm9yIGEgY29uZmlnIGZpbGUgaWYgd2UgZG9uJ3QgaGF2ZSBvbmUgeWV0CiAgICAgICAgbXkgJHJjb25maWdfZmlsZV9jaGF0dGVyOwogICAgICAgICR7JHJjb25maWdfZmlsZV9jaGF0dGVyfSA9IEVNUFRZX1NUUklORzsKICAgICAgICBpZiAoICFkZWZpbmVkKCRjb25maWdfZmlsZSkgKSB7CiAgICAgICAgICAgICRjb25maWdfZmlsZSA9CiAgICAgICAgICAgICAgZmluZF9jb25maWdfZmlsZSggJGlzX1dpbmRvd3MsICRXaW5kb3dzX3R5cGUsCiAgICAgICAgICAgICAgICAkcmNvbmZpZ19maWxlX2NoYXR0ZXIsICRycGVuZGluZ19jb21wbGFpbnQgKTsKICAgICAgICB9CgogICAgICAgICMgb3BlbiBhbnkgY29uZmlnIGZpbGUKICAgICAgICBteSAkcmNvbmZpZ19zdHJpbmc7CiAgICAgICAgaWYgKCBkZWZpbmVkKCRjb25maWdfZmlsZSkgKSB7CiAgICAgICAgICAgICRyY29uZmlnX3N0cmluZyA9IHN0cmVhbV9zbHVycCgkY29uZmlnX2ZpbGUpOwogICAgICAgICAgICBpZiAoICFkZWZpbmVkKCRyY29uZmlnX3N0cmluZykgKSB7CiAgICAgICAgICAgICAgICBEaWUoCiJleGl0aW5nIGJlY2F1c2UgcHJvZmlsZSAnJGNvbmZpZ19maWxlJyBjb3VsZCBub3QgYmUgb3BlbmVkXG4iCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZpbHRlcl91bmtub3duX29wdGlvbnMoCiAgICAgICAgICAgICAgICAkcmNvbmZpZ19zdHJpbmcsICRyb3B0aW9uX2NhdGVnb3J5LAogICAgICAgICAgICAgICAgJHJleHBhbnNpb24sICAgICAkcmNvbmZpZ19maWxlX2NoYXR0ZXIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRzYXdfZHVtcF9wcm9maWxlKSB7CiAgICAgICAgICAgIGR1bXBfY29uZmlnX2ZpbGUoICRyY29uZmlnX3N0cmluZywgJGNvbmZpZ19maWxlLAogICAgICAgICAgICAgICAgJHJjb25maWdfZmlsZV9jaGF0dGVyICk7CiAgICAgICAgICAgIEV4aXQoMCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIGRlZmluZWQoJHJjb25maWdfc3RyaW5nKSApIHsKCiAgICAgICAgICAgIG15ICggJHJjb25maWdfbGlzdCwgJGRlYXRoX21lc3NhZ2UgKSA9CiAgICAgICAgICAgICAgcmVhZF9jb25maWdfZmlsZSggJHJjb25maWdfc3RyaW5nLCAkY29uZmlnX2ZpbGUsICRyZXhwYW5zaW9uICk7CiAgICAgICAgICAgIERpZSgkZGVhdGhfbWVzc2FnZSkgaWYgKCRkZWF0aF9tZXNzYWdlKTsKCiAgICAgICAgICAgICMgcHJvY2VzcyBhbnkgLnBlcmx0aWR5cmMgcGFyYW1ldGVycyByaWdodCBub3cgc28gd2UgY2FuCiAgICAgICAgICAgICMgbG9jYWxpemUgZXJyb3JzCiAgICAgICAgICAgIGlmICggQHskcmNvbmZpZ19saXN0fSApIHsKICAgICAgICAgICAgICAgIGxvY2FsIEBBUkdWID0gQHskcmNvbmZpZ19saXN0fTsKCiAgICAgICAgICAgICAgICBleHBhbmRfY29tbWFuZF9hYmJyZXZpYXRpb25zKCAkcmV4cGFuc2lvbiwgXEByYXdfb3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAkY29uZmlnX2ZpbGUgKTsKCiAgICAgICAgICAgICAgICBpZiAoICFHZXRPcHRpb25zKCBcJU9wdHMsIEB7JHJvcHRpb25fc3RyaW5nfSApICkgewogICAgICAgICAgICAgICAgICAgIERpZSgKIkVycm9yIGluIHRoaXMgY29uZmlnIGZpbGU6ICRjb25maWdfZmlsZSAgXG5Vc2UgLW5wcm8gdG8gaWdub3JlIHRoaXMgZmlsZSwgLWRwcm8gdG8gZHVtcCBpdCwgLWggZm9yIGhlbHAnXG4iCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIEFueXRoaW5nIGxlZnQgaW4gdGhpcyBsb2NhbCBAQVJHViBpcyBhbiBlcnJvciBhbmQgbXVzdCBiZQogICAgICAgICAgICAgICAgIyBpbnZhbGlkIGJhcmUgd29yZHMgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBmaWxlLiAgV2UgY2Fubm90CiAgICAgICAgICAgICAgICAjIGNoZWNrIHRoaXMgZWFybGllciBiZWNhdXNlIGJhcmUgd29yZHMgbWF5IGhhdmUgYmVlbiB2YWxpZAogICAgICAgICAgICAgICAgIyB2YWx1ZXMgZm9yIHBhcmFtZXRlcnMuICBXZSBoYWQgdG8gd2FpdCBmb3IgR2V0T3B0aW9ucyB0byBoYXZlCiAgICAgICAgICAgICAgICAjIGEgbG9vayBhdCBAQVJHVi4KICAgICAgICAgICAgICAgIGlmIChAQVJHVikgewogICAgICAgICAgICAgICAgICAgIG15ICRjb3VudCA9IEBBUkdWOwogICAgICAgICAgICAgICAgICAgIG15ICRzdHIgICA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAoQEFSR1YpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBsZW5ndGgoJHN0cikgPCA3MCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkc3RyKSB7ICRzdHIgLj0gJywgJyB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3RyIC49ICInJHBhcmFtJyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3RyIC49ICIsIC4uLiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIERpZSg8PEVPTSk7ClRoZXJlIGFyZSAkY291bnQgdW5yZWNvZ25pemVkIHZhbHVlcyBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlICckY29uZmlnX2ZpbGUnOgokc3RyClVzZSBsZWFkaW5nIGRhc2hlcyBmb3IgcGFyYW1ldGVycy4gIFVzZSAtbnBybyB0byBpZ25vcmUgdGhpcyBmaWxlLgpFT00KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIFVuZG8gYW55IG9wdGlvbnMgd2hpY2ggY2F1c2UgcHJlbWF0dXJlIGV4aXQuICBUaGV5IGFyZSBub3QKICAgICAgICAgICAgICAgICMgYXBwcm9wcmlhdGUgZm9yIGEgY29uZmlnIGZpbGUsIGFuZCBpdCBjb3VsZCBiZSBoYXJkIHRvCiAgICAgICAgICAgICAgICAjIGRpYWdub3NlIHRoZSBjYXVzZSBvZiB0aGUgcHJlbWF0dXJlIGV4aXQuCgogICAgICAgICAgICAgICAgIyBUaGVzZSBhcmUgb3B0aW9ucyBpbmNsdWRlIGR1bXAgc3dpdGNoZXMgb2YgdGhlIGZvcm0KICAgICAgICAgICAgICAgICMgJy0tZHVtcC14eHgteHh4IScuCiAgICAgICAgICAgICAgICBteSBAZHVtcF9jb21tYW5kcyA9CiAgICAgICAgICAgICAgICAgIGdyZXAgeyAvXihkdW1wLS4qKSEkLyB9IEB7JHJvcHRpb25fc3RyaW5nfTsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKEBkdW1wX2NvbW1hbmRzKSB7IHMvISQvLyB9CgogICAgICAgICAgICAgICAgIyBIZXJlIGlzIGEgY3VycmVudCBsaXN0IG9mIHRoZXNlIEBkdW1wX2NvbW1hbmRzOgogICAgICAgICAgICAgICAgIyAgZHVtcC1ibG9jay1zdW1tYXJ5CiAgICAgICAgICAgICAgICAjICBkdW1wLWN1ZGRsZWQtYmxvY2stbGlzdAogICAgICAgICAgICAgICAgIyAgZHVtcC1kZWZhdWx0cwogICAgICAgICAgICAgICAgIyAgZHVtcC1pbnRlZ2VyLW9wdGlvbi1yYW5nZQogICAgICAgICAgICAgICAgIyAgZHVtcC1sb25nLW5hbWVzCiAgICAgICAgICAgICAgICAjICBkdW1wLW1pc21hdGNoZWQtYXJncwogICAgICAgICAgICAgICAgIyAgZHVtcC1taXNtYXRjaGVkLXJldHVybnMKICAgICAgICAgICAgICAgICMgIGR1bXAtbWl4ZWQtY2FsbC1wYXJlbnMKICAgICAgICAgICAgICAgICMgIGR1bXAtb3B0aW9ucwogICAgICAgICAgICAgICAgIyAgZHVtcC1wcm9maWxlCiAgICAgICAgICAgICAgICAjICBkdW1wLXNob3J0LW5hbWVzCiAgICAgICAgICAgICAgICAjICBkdW1wLXRva2VuLXR5cGVzCiAgICAgICAgICAgICAgICAjICBkdW1wLXVudXN1YWwtdmFyaWFibGVzCiAgICAgICAgICAgICAgICAjICBkdW1wLXdhbnQtbGVmdC1zcGFjZQogICAgICAgICAgICAgICAgIyAgZHVtcC13YW50LXJpZ2h0LXNwYWNlCgogICAgICAgICAgICAgICAgIyBUaGUgZm9sbG93aW5nIHR3byBkdW1wIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB3aGljaAogICAgICAgICAgICAgICAgIyB0YWtlID1pIG9yID1zIHdvdWxkIHN0aWxsIGJlIGFsbG93ZWQ6CiAgICAgICAgICAgICAgICAjICBkdW1wLWJsb2NrLW1pbmltdW0tbGluZXMnLCAgICAgICAgJ2RibCcsICAgJz1pJyApOwogICAgICAgICAgICAgICAgIyAgZHVtcC1ibG9jay10eXBlcycsICAgICAgICAgICAgICAgICdkYnQnLCAgICc9cycgKTsKCiAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRjbWQgKAogICAgICAgICAgICAgICAgICAgIEBkdW1wX2NvbW1hbmRzLAogICAgICAgICAgICAgICAgICAgIHF3ewogICAgICAgICAgICAgICAgICAgIGhlbHAKICAgICAgICAgICAgICAgICAgICBzdHlsZXNoZWV0CiAgICAgICAgICAgICAgICAgICAgdmVyc2lvbgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCggJE9wdHN7JGNtZH0gKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlICRPcHRzeyRjbWR9OwogICAgICAgICAgICAgICAgICAgICAgICBXYXJuKCJpZ25vcmluZyAtLSRjbWQgaW4gY29uZmlnIGZpbGU6ICRjb25maWdfZmlsZVxuIik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIG5vdyBwcm9jZXNzIHRoZSBjb21tYW5kIGxpbmUgcGFyYW1ldGVycwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGV4cGFuZF9jb21tYW5kX2FiYnJldmlhdGlvbnMoICRyZXhwYW5zaW9uLCBcQHJhd19vcHRpb25zLCAkY29uZmlnX2ZpbGUgKTsKCiAgICBsb2NhbCAkU0lHeydfX1dBUk5fXyd9ID0gc3ViIHsgV2FybiggJF9bMF0gKSB9OwogICAgaWYgKCAhR2V0T3B0aW9ucyggXCVPcHRzLCBAeyRyb3B0aW9uX3N0cmluZ30gKSApIHsKICAgICAgICBEaWUoIkVycm9yIG9uIGNvbW1hbmQgbGluZTsgZm9yIGhlbHAgdHJ5ICdwZXJsdGlkeSAtaCdcbiIpOwogICAgfQoKICAgICMgQ2F0Y2ggYW1iaWd1b3VzIGVudHJpZXMgd2hpY2ggc2hvdWxkIGhhdmUgZXhpdGVkIGFib3ZlIChjMzMzKQogICAgZm9yZWFjaCBteSAkbG9uZ19uYW1lICgga2V5cyAlZWFybHlfZXhpdF9jb21tYW5kcyApIHsKICAgICAgICBpZiAoICRPcHRzeyRsb25nX25hbWV9ICkgewogICAgICAgICAgICBteSAkc2hvcnRfbmFtZSA9ICRlYXJseV9leGl0X2NvbW1hbmRzeyRsb25nX25hbWV9OwogICAgICAgICAgICBEaWUoPDxFT00pOwpBbWJpZ3VvdXMgZW50cnk7IHBsZWFzZSBlbnRlciAnLS0kbG9uZ19uYW1lJyBvciAnLSRzaG9ydF9uYW1lJwpFT00KICAgICAgICB9CiAgICB9CgogICAgIyByZXNldCBHZXRvcHQ6OkxvbmcgY29uZmlndXJhdGlvbiBiYWNrIHRvIGl0cyBwcmV2aW91cyB2YWx1ZQogICAgaWYgKCBkZWZpbmVkKCRnbGMpICkgewogICAgICAgIG15ICRvayA9IGV2YWwgeyBHZXRvcHQ6Okxvbmc6OkNvbmZpZ3VyZSgkZ2xjKTsgMSB9OwogICAgICAgIGlmICggISRvayAmJiBERVZFTF9NT0RFICkgewogICAgICAgICAgICBGYXVsdCgiQ291bGQgbm90IHJlc2V0IEdldG9wdDo6TG9uZyBjb25maWd1cmF0aW9uOiAkRVZBTF9FUlJPUlxuIik7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAoIFwlT3B0cywgJGNvbmZpZ19maWxlLCBcQHJhd19vcHRpb25zLCAkcm9wdGlvbl9zdHJpbmcsCiAgICAgICAgJHJleHBhbnNpb24sICRyb3B0aW9uX2NhdGVnb3J5LCAkcm9wdGlvbl9yYW5nZSwKICAgICAgICAkcmludGVnZXJfb3B0aW9uX3JhbmdlICk7Cn0gIyMgZW5kIHN1YiBfcHJvY2Vzc19jb21tYW5kX2xpbmUKCnN1YiBtYWtlX2dyZXBfYWxpYXNfc3RyaW5nIHsKCiAgICBteSAoJHJPcHRzKSA9IEBfOwoKICAgICMgcHJlLXByb2Nlc3MgdGhlIC0tZ3JlcC1hbGlhcy1saXN0IHBhcmFtZXRlcgoKICAgICMgRGVmYXVsdHM6IGxpc3Qgb3BlcmF0b3JzIGluIExpc3Q6OlV0aWwKICAgICMgUG9zc2libGUgZnV0dXJlIGFkZGl0aW9uczogIHBhaXJmaXJzdCBwYWlyZ3JlcCBwYWlybWFwCiAgICBteSAkZGVmYXVsdF9zdHJpbmcgPSBqb2luIFNQQUNFLAogICAgICBxdyggYWxsIGFueSBmaXJzdCBub25lIG5vdGFsbCByZWR1Y2UgcmVkdWN0aW9ucyApOwoKICAgICMgbWFrZSBhIGhhc2ggb2YgYW55IGV4Y2x1ZGVkIHdvcmRzCiAgICBteSAlaXNfZXhjbHVkZWRfd29yZDsKICAgIG15ICRleGNsdWRlX3N0cmluZyA9ICRyT3B0cy0+eydncmVwLWFsaWFzLWV4Y2x1c2lvbi1saXN0J307CiAgICBpZiAoJGV4Y2x1ZGVfc3RyaW5nKSB7CiAgICAgICAgJGV4Y2x1ZGVfc3RyaW5nID1+IHMvLC8gL2c7ICAgICMgYWxsb3cgY29tbWFzCiAgICAgICAgJGV4Y2x1ZGVfc3RyaW5nID1+IHMvXlxzKy8vOwogICAgICAgICRleGNsdWRlX3N0cmluZyA9fiBzL1xzKyQvLzsKICAgICAgICBteSBAcSA9IHNwbGl0IC9ccysvLCAkZXhjbHVkZV9zdHJpbmc7CiAgICAgICAgQGlzX2V4Y2x1ZGVkX3dvcmR7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKICAgIH0KCiAgICAjIFRoZSBzcGVjaWFsIG9wdGlvbiAtZ2F4bD0nKicgcmVtb3ZlcyBhbGwgZGVmYXVsdHMKICAgIGlmICggJGlzX2V4Y2x1ZGVkX3dvcmR7JyonfSApIHsgJGRlZmF1bHRfc3RyaW5nID0gRU1QVFlfU1RSSU5HIH0KCiAgICAjIGNvbWJpbmUgdGhlIGRlZmF1bHRzIGFuZCBhbnkgaW5wdXQgbGlzdAogICAgbXkgJGlucHV0X3N0cmluZyA9ICRyT3B0cy0+eydncmVwLWFsaWFzLWxpc3QnfTsKICAgIGlmICgkaW5wdXRfc3RyaW5nKSB7ICRpbnB1dF9zdHJpbmcgLj0gU1BBQ0UgLiAkZGVmYXVsdF9zdHJpbmcgfQogICAgZWxzZSAgICAgICAgICAgICAgIHsgJGlucHV0X3N0cmluZyA9ICRkZWZhdWx0X3N0cmluZyB9CgogICAgIyBOb3cgbWFrZSB0aGUgZmluYWwgbGlzdCBvZiB1bmlxdWUgZ3JlcCBhbGlhcyB3b3JkcwogICAgJGlucHV0X3N0cmluZyA9fiBzLywvIC9nOyAgICAjIGFsbG93IGNvbW1hcwogICAgJGlucHV0X3N0cmluZyA9fiBzL15ccysvLzsKICAgICRpbnB1dF9zdHJpbmcgPX4gcy9ccyskLy87CiAgICBteSBAd29yZF9saXN0ID0gc3BsaXQgL1xzKy8sICRpbnB1dF9zdHJpbmc7CiAgICBteSBAZmlsdGVyZWRfd29yZF9saXN0OwogICAgbXkgJXNlZW47CgogICAgZm9yZWFjaCBteSAkd29yZCAoQHdvcmRfbGlzdCkgewogICAgICAgIGlmICgkd29yZCkgewogICAgICAgICAgICBpZiAoICR3b3JkICF+IC9eXHdbXHdcZF0qJC8gKSB7CiAgICAgICAgICAgICAgICBXYXJuKAogICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIHdvcmQgaW4gLS1ncmVwLWFsaWFzLWxpc3Q6ICckd29yZCcgLSBpZ25vcmluZ1xuIgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICEkc2Vlbnskd29yZH0gJiYgISRpc19leGNsdWRlZF93b3JkeyR3b3JkfSApIHsKICAgICAgICAgICAgICAgICRzZWVueyR3b3JkfSsrOwogICAgICAgICAgICAgICAgcHVzaCBAZmlsdGVyZWRfd29yZF9saXN0LCAkd29yZDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIG15ICRqb2luZWRfd29yZHMgPSBqb2luIFNQQUNFLCBAZmlsdGVyZWRfd29yZF9saXN0OwogICAgJHJPcHRzLT57J2dyZXAtYWxpYXMtbGlzdCd9ID0gJGpvaW5lZF93b3JkczsKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIG1ha2VfZ3JlcF9hbGlhc19zdHJpbmcKCnN1YiBjbGVhbnVwX3dvcmRfbGlzdCB7CgogICAgbXkgKCAkck9wdHMsICRvcHRpb25fbmFtZSwgJHJmb3JjZWRfd29yZHMgKSA9IEBfOwoKICAgICMgQ2xlYW4gdXAgdGhlIGxpc3Qgb2Ygd29yZHMgaW4gYSB1c2VyIG9wdGlvbiB0byBzaW1wbGlmeSB1c2UgYnkKICAgICMgbGF0ZXIgcm91dGluZXMgKGRlbGV0ZSByZXBlYXRzLCByZXBsYWNlIGNvbW1hcyB3aXRoIHNpbmdsZSBzcGFjZSwKICAgICMgcmVtb3ZlIG5vbi13b3JkcykKCiAgICAjIEdpdmVuOgogICAgIyAgICRyT3B0cyAtIHRoZSBnbG9iYWwgb3B0aW9uIGhhc2gKICAgICMgICAkb3B0aW9uX25hbWUgLSBoYXNoIGtleSBvZiB0aGlzIG9wdGlvbgogICAgIyAgICRyZm9yY2VkX3dvcmRzIC0gcmVmIHRvIGxpc3Qgb2YgYW55IHdvcmRzIHRvIGJlIGFkZGVkCgogICAgIyBSZXR1cm5zOgogICAgIyAgIFwlc2VlbiAtIGhhc2ggb2YgdGhlIGZpbmFsIGxpc3Qgb2Ygd29yZHMKCiAgICBteSAlc2VlbjsKICAgIG15IEBpbnB1dF9saXN0OwoKICAgIG15ICRpbnB1dF9zdHJpbmcgPSAkck9wdHMtPnskb3B0aW9uX25hbWV9OwogICAgaWYgKCBkZWZpbmVkKCRpbnB1dF9zdHJpbmcpICYmIGxlbmd0aCgkaW5wdXRfc3RyaW5nKSApIHsKICAgICAgICAkaW5wdXRfc3RyaW5nID1+IHMvLC8gL2c7ICAgICMgYWxsb3cgY29tbWFzCiAgICAgICAgJGlucHV0X3N0cmluZyA9fiBzL15ccysvLzsKICAgICAgICAkaW5wdXRfc3RyaW5nID1+IHMvXHMrJC8vOwogICAgICAgIEBpbnB1dF9saXN0ID0gc3BsaXQgL1xzKy8sICRpbnB1dF9zdHJpbmc7CiAgICB9CgogICAgaWYgKCRyZm9yY2VkX3dvcmRzKSB7CiAgICAgICAgcHVzaCBAaW5wdXRfbGlzdCwgQHskcmZvcmNlZF93b3Jkc307CiAgICB9CgogICAgbXkgQGZpbHRlcmVkX3dvcmRfbGlzdDsKICAgIGZvcmVhY2ggbXkgJHdvcmQgKEBpbnB1dF9saXN0KSB7CiAgICAgICAgaWYgKCR3b3JkKSB7CgogICAgICAgICAgICAjIGxvb2sgZm9yIG9idmlvdXNseSBiYWQgd29yZHMKICAgICAgICAgICAgaWYgKCAkd29yZCA9fiAvXlxkLyB8fCAkd29yZCAhfiAvXlx3W1x3XGRdKiQvICkgewogICAgICAgICAgICAgICAgV2FybigidW5leHBlY3RlZCAnJG9wdGlvbl9uYW1lJyB3b3JkICckd29yZCcgLSBpZ25vcmluZ1xuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAhJHNlZW57JHdvcmR9ICkgewogICAgICAgICAgICAgICAgJHNlZW57JHdvcmR9Kys7CiAgICAgICAgICAgICAgICBwdXNoIEBmaWx0ZXJlZF93b3JkX2xpc3QsICR3b3JkOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgJHJPcHRzLT57JG9wdGlvbl9uYW1lfSA9IGpvaW4gU1BBQ0UsIEBmaWx0ZXJlZF93b3JkX2xpc3Q7CiAgICByZXR1cm4gXCVzZWVuOwp9ICMjIGVuZCBzdWIgY2xlYW51cF93b3JkX2xpc3QKCnN1YiBjaGVja19vcHRpb25zIHsKCiAgICBteSAoICRzZWxmLCAkbnVtX2ZpbGVzLCAkcmludGVnZXJfb3B0aW9uX3JhbmdlICkgPSBAXzsKCiAgICAjIENoZWNrIG9wdGlvbnMgYXQgYSBoaWdoIGxldmVsLiBOb3RlIHRoYXQgb3RoZXIgbW9kdWxlcyBoYXZlIHRoZWlyCiAgICAjIG93biBzdWIgJ2NoZWNrX29wdGlvbnMnIGZvciBsb3dlciBsZXZlbCBjaGVja2luZy4KCiAgICAjIElucHV0IHBhcmFtZXRlcnM6CiAgICAjICAkbnVtX2ZpbGVzID0gdGhlIG51bWJlciBvZiBmaWxlcyB0byBiZSBwcm9jZXNzZWQgaW4gdGhpcyBjYWxsIHRvCiAgICAjICAgICBwZXJsdGlkeSwgbmVlZGVkIGZvciBlcnJvciBjaGVja3MuCiAgICAjICAkcmludGVnZXJfb3B0aW9uLXJhbmdlID0gaGFzaCB3aXRoIHZhbGlkIHJhbmdlcyBvZiBwYXJhbWV0ZXJzIHdoaWNoCiAgICAjICAgICB0YWtlIGFuIGludGVnZXIKCiAgICBteSAkck9wdHMgPSAkc2VsZi0+W19yT3B0c19dOwoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgY2hlY2sgYW5kIGhhbmRsZSBhbnkgaW50ZXJhY3Rpb25zIGFtb25nIHRoZSBiYXNpYyBvcHRpb25zLi4KICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAjIFNpbmNlIHBlcmx0aWR5IG9ubHkgZW5jb2RlcyBpbiB1dGY4LCBwcm9ibGVtcyBjYW4gb2NjdXIgaWYgd2UgbGV0IGl0CiAgICAjIGRlY29kZSBhbnl0aGluZyBlbHNlLiAgU2VlIGRpc2N1c3Npb25zIGZvciBpc3N1ZSBnaXQgIzgzLgogICAgbXkgJGVuY29kaW5nID0gJHJPcHRzLT57J2NoYXJhY3Rlci1lbmNvZGluZyd9OwogICAgaWYgKCAkZW5jb2RpbmcgIX4gL15ccyooPzpndWVzc3xub25lfHV0Zjh8dXRmLTgpXHMqJC9pICkgewogICAgICAgIERpZSg8PEVPTSk7Ci0tY2hhcmFjdGVyLWVuY29kaW5nID0gJyRlbmNvZGluZycgaXMgbm90IGFsbG93ZWQ7IHRoZSBvcHRpb25zIGFyZTogJ25vbmUnLCAnZ3Vlc3MnLCAndXRmOCcKRU9NCiAgICB9CgogICAgbXkgJGludGVnZXJfcmFuZ2VfY2hlY2sgPSAkck9wdHMtPnsnaW50ZWdlci1yYW5nZS1jaGVjayd9OwogICAgaWYgKCAgICFkZWZpbmVkKCRpbnRlZ2VyX3JhbmdlX2NoZWNrKQogICAgICAgIHx8ICRpbnRlZ2VyX3JhbmdlX2NoZWNrIDwgMAogICAgICAgIHx8ICRpbnRlZ2VyX3JhbmdlX2NoZWNrID4gMyApCiAgICB7CiAgICAgICAgJGludGVnZXJfcmFuZ2VfY2hlY2sgPSAyOwogICAgfQoKICAgICMgQ2hlY2sgZm9yIGludGVnZXIgdmFsdWVzIG91dCBvZiBib3VuZHMgYXMgZm9sbG93czoKICAgICMgICRpbnRlZ2VyX3JhbmdlX2NoZWNrPQogICAgIyAgICAwID0+IHNraXAgY2hlY2sgY29tcGxldGVseSAoZm9yIHN0cmVzcy10ZXN0aW5nIHBlcmx0aWR5IG9ubHkpCiAgICAjICAgIDEgPT4gcXVpZXRseSByZXNldCBiYWQgdmFsdWVzIHRvIGRlZmF1bHRzCiAgICAjICAgIDIgPT4gaXNzdWUgd2FybmluZyBhbmQgcmVzZXQgYmFkIHZhbHVlcyBkZWZhdWx0cyBbREVGQVVMVF0KICAgICMgICAgMyA9PiBzdG9wIGlmIGFueSB2YWx1ZXMgYXJlIG91dCBvZiBib3VuZHMKICAgIGlmICgkaW50ZWdlcl9yYW5nZV9jaGVjaykgewogICAgICAgIG15ICRFcnJvcl9tZXNzYWdlOwogICAgICAgIGZvcmVhY2ggbXkgJG9wdCAoIGtleXMgJXskcmludGVnZXJfb3B0aW9uX3JhbmdlfSApIHsKICAgICAgICAgICAgbXkgJHJhbmdlID0gJHJpbnRlZ2VyX29wdGlvbl9yYW5nZS0+eyRvcHR9OwogICAgICAgICAgICBuZXh0IHVubGVzcyBkZWZpbmVkKCRyYW5nZSk7CiAgICAgICAgICAgIG15ICggJG1pbiwgJG1heCwgJGRlZmF1bHQgKSA9IEB7JHJhbmdlfTsKCiAgICAgICAgICAgIG15ICR2YWwgPSAkck9wdHMtPnskb3B0fTsKICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRtaW4pICYmIGRlZmluZWQoJHZhbCkgJiYgJHZhbCA8ICRtaW4gKSB7CiAgICAgICAgICAgICAgICAkRXJyb3JfbWVzc2FnZSAuPSAiLS0kb3B0PSR2YWwgYnV0IHNob3VsZCBiZSA+PSAkbWluIjsKICAgICAgICAgICAgICAgIGlmICggJGludGVnZXJfcmFuZ2VfY2hlY2sgPCAzICkgewogICAgICAgICAgICAgICAgICAgICRyT3B0cy0+eyRvcHR9ID0gJGRlZmF1bHQ7CiAgICAgICAgICAgICAgICAgICAgbXkgJGRlZiA9IGRlZmluZWQoJGRlZmF1bHQpID8gJGRlZmF1bHQgOiAndW5kZWYnOwogICAgICAgICAgICAgICAgICAgICRFcnJvcl9tZXNzYWdlIC49ICI7IHVzaW5nIGRlZmF1bHQgJGRlZiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkRXJyb3JfbWVzc2FnZSAuPSAiXG4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggZGVmaW5lZCgkbWF4KSAmJiBkZWZpbmVkKCR2YWwpICYmICR2YWwgPiAkbWF4ICkgewogICAgICAgICAgICAgICAgJEVycm9yX21lc3NhZ2UgLj0gIi0tJG9wdD0kdmFsIGJ1dCBzaG91bGQgYmUgPD0gJG1heCI7CiAgICAgICAgICAgICAgICBpZiAoICRpbnRlZ2VyX3JhbmdlX2NoZWNrIDwgMyApIHsKICAgICAgICAgICAgICAgICAgICAkck9wdHMtPnskb3B0fSA9ICRkZWZhdWx0OwogICAgICAgICAgICAgICAgICAgIG15ICRkZWYgPSBkZWZpbmVkKCRkZWZhdWx0KSA/ICRkZWZhdWx0IDogJ3VuZGVmJzsKICAgICAgICAgICAgICAgICAgICAkRXJyb3JfbWVzc2FnZSAuPSAiOyB1c2luZyBkZWZhdWx0ICRkZWYiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJEVycm9yX21lc3NhZ2UgLj0gIlxuIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoJEVycm9yX21lc3NhZ2UpIHsKICAgICAgICAgICAgaWYgKCAkaW50ZWdlcl9yYW5nZV9jaGVjayA9PSAxICkgewogICAgICAgICAgICAgICAgIyMgbm8gd2FybmluZwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJGludGVnZXJfcmFuZ2VfY2hlY2sgPT0gMiApIHsKICAgICAgICAgICAgICAgIFdhcm4oJEVycm9yX21lc3NhZ2UpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgRGllKCRFcnJvcl9tZXNzYWdlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIE5vdGUgdGhhdCAtdnQsIC12dGMsIGFuZCAtY3RpIGFyZSBhYmJyZXZpYXRpb25zLiBCdXQgdW5kZXIKICAgICMgbXNkb3MsIGFuIHVucXVvdGVkIGlucHV0IHBhcmFtZXRlciBsaWtlIHZ0Yz0xIHdpbGwgYmUKICAgICMgc2VlbiBhcyAyIHBhcmFtZXRlcnMsIHZ0YyBhbmQgMSwgc28gdGhlIGFiYnJldmlhdGlvbnMKICAgICMgd29uJ3QgYmUgc2Vlbi4gIFRoZXJlZm9yZSwgd2Ugd2lsbCBjYXRjaCB0aGVtIGhlcmUgaWYKICAgICMgdGhleSBnZXQgdGhyb3VnaC4KICAgIGlmICggZGVmaW5lZCggJHJPcHRzLT57J3ZlcnRpY2FsLXRpZ2h0bmVzcyd9ICkgKSB7CiAgICAgICAgbXkgJHZ0ID0gJHJPcHRzLT57J3ZlcnRpY2FsLXRpZ2h0bmVzcyd9OwogICAgICAgICRyT3B0cy0+eydwYXJlbi12ZXJ0aWNhbC10aWdodG5lc3MnfSAgICAgICAgICA9ICR2dDsKICAgICAgICAkck9wdHMtPnsnc3F1YXJlLWJyYWNrZXQtdmVydGljYWwtdGlnaHRuZXNzJ30gPSAkdnQ7CiAgICAgICAgJHJPcHRzLT57J2JyYWNlLXZlcnRpY2FsLXRpZ2h0bmVzcyd9ICAgICAgICAgID0gJHZ0OwogICAgfQoKICAgIGlmICggZGVmaW5lZCggJHJPcHRzLT57J3ZlcnRpY2FsLXRpZ2h0bmVzcy1jbG9zaW5nJ30gKSApIHsKICAgICAgICBteSAkdnRjID0gJHJPcHRzLT57J3ZlcnRpY2FsLXRpZ2h0bmVzcy1jbG9zaW5nJ307CiAgICAgICAgJHJPcHRzLT57J3BhcmVuLXZlcnRpY2FsLXRpZ2h0bmVzcy1jbG9zaW5nJ30gICAgICAgICAgPSAkdnRjOwogICAgICAgICRyT3B0cy0+eydzcXVhcmUtYnJhY2tldC12ZXJ0aWNhbC10aWdodG5lc3MtY2xvc2luZyd9ID0gJHZ0YzsKICAgICAgICAkck9wdHMtPnsnYnJhY2UtdmVydGljYWwtdGlnaHRuZXNzLWNsb3NpbmcnfSAgICAgICAgICA9ICR2dGM7CiAgICB9CgogICAgaWYgKCBkZWZpbmVkKCAkck9wdHMtPnsnY2xvc2luZy10b2tlbi1pbmRlbnRhdGlvbid9ICkgKSB7CiAgICAgICAgbXkgJGN0aSA9ICRyT3B0cy0+eydjbG9zaW5nLXRva2VuLWluZGVudGF0aW9uJ307CiAgICAgICAgJHJPcHRzLT57J2Nsb3Npbmctc3F1YXJlLWJyYWNrZXQtaW5kZW50YXRpb24nfSA9ICRjdGk7CiAgICAgICAgJHJPcHRzLT57J2Nsb3NpbmctYnJhY2UtaW5kZW50YXRpb24nfSAgICAgICAgICA9ICRjdGk7CiAgICAgICAgJHJPcHRzLT57J2Nsb3NpbmctcGFyZW4taW5kZW50YXRpb24nfSAgICAgICAgICA9ICRjdGk7CiAgICB9CgogICAgIyBTeW50YXggY2hlY2tpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCBkdWUgdG8gY29uY2VybnMgYWJvdXQgZXhlY3V0aW5nCiAgICAjIGNvZGUgaW4gQkVHSU4gYmxvY2tzLiAgVGhlIGZsYWcgaXMgc3RpbGwgYWNjZXB0ZWQgZm9yIGJhY2t3YXJkcwogICAgIyBjb21wYXRpYmlsaXR5IGJ1dCBpcyBpZ25vcmVkIGlmIHNldC4KICAgICRyT3B0cy0+eydjaGVjay1zeW50YXgnfSA9IDA7CgogICAgbXkgJGNoZWNrX2JsYW5rX2NvdW50ID0gc3ViIHsKICAgICAgICBteSAoICRrZXksICRhYmJyZXYgKSA9IEBfOwogICAgICAgIGlmICggJHJPcHRzLT57JGtleX0gKSB7CiAgICAgICAgICAgIGlmICggJHJPcHRzLT57JGtleX0gPCAwICkgewogICAgICAgICAgICAgICAgJHJPcHRzLT57JGtleX0gPSAwOwogICAgICAgICAgICAgICAgV2FybigibmVnYXRpdmUgdmFsdWUgb2YgJGFiYnJldiwgc2V0dGluZyAwXG4iKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICRyT3B0cy0+eyRrZXl9ID4gMTAwICkgewogICAgICAgICAgICAgICAgV2FybigidW5yZWFzb25hYmx5IGxhcmdlIHZhbHVlIG9mICRhYmJyZXYsIHJlZHVjaW5nXG4iKTsKICAgICAgICAgICAgICAgICRyT3B0cy0+eyRrZXl9ID0gMTAwOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH07ICMjIGVuZCAkY2hlY2tfYmxhbmtfY291bnQgPSBzdWIKCiAgICAjIGNoZWNrIGZvciByZWFzb25hYmxlIG51bWJlciBvZiBibGFuayBsaW5lcyBhbmQgZml4IHRvIGF2b2lkIHByb2JsZW1zCiAgICAkY2hlY2tfYmxhbmtfY291bnQtPiggJ2JsYW5rLWxpbmVzLWJlZm9yZS1zdWJzJywgICAgICAgICAgJy1ibGJzJyApOwogICAgJGNoZWNrX2JsYW5rX2NvdW50LT4oICdibGFuay1saW5lcy1iZWZvcmUtcGFja2FnZXMnLCAgICAgICctYmxicCcgKTsKICAgICRjaGVja19ibGFua19jb3VudC0+KCAnYmxhbmstbGluZXMtYWZ0ZXItYmxvY2stb3BlbmluZycsICAnLWJsYW8nICk7CiAgICAkY2hlY2tfYmxhbmtfY291bnQtPiggJ2JsYW5rLWxpbmVzLWJlZm9yZS1ibG9jay1jbG9zaW5nJywgJy1ibGJjJyApOwoKICAgICMgc2V0dGluZyBhIG5vbi1uZWdhdGl2ZSBsb2dmaWxlIGdhcCBjYXVzZXMgbG9nZmlsZSB0byBiZSBzYXZlZAogICAgaWYgKCBkZWZpbmVkKCAkck9wdHMtPnsnbG9nZmlsZS1nYXAnfSApICYmICRyT3B0cy0+eydsb2dmaWxlLWdhcCd9ID49IDAgKSB7CiAgICAgICAgJHJPcHRzLT57J2xvZ2ZpbGUnfSA9IDE7CiAgICB9CgogICAgIyBzZXQgc2hvcnQtY3V0IGZsYWcgd2hlbiBvbmx5IGluZGVudGF0aW9uIGlzIHRvIGJlIGRvbmUuCiAgICAjIE5vdGUgdGhhdCB0aGUgdXNlciBtYXkgb3IgbWF5IG5vdCBoYXZlIGFscmVhZHkgc2V0IHRoZQogICAgIyBpbmRlbnQtb25seSBmbGFnLgogICAgaWYgKCAgICEkck9wdHMtPnsnYWRkLXdoaXRlc3BhY2UnfQogICAgICAgICYmICEkck9wdHMtPnsnZGVsZXRlLW9sZC13aGl0ZXNwYWNlJ30KICAgICAgICAmJiAhJHJPcHRzLT57J2FkZC1uZXdsaW5lcyd9CiAgICAgICAgJiYgISRyT3B0cy0+eydkZWxldGUtb2xkLW5ld2xpbmVzJ30gKQogICAgewogICAgICAgICRyT3B0cy0+eydpbmRlbnQtb25seSd9ID0gMTsKICAgIH0KCiAgICAjIC1pc2JjIGltcGxpZXMgLWliYwogICAgaWYgKCAkck9wdHMtPnsnaW5kZW50LXNwYWNlZC1ibG9jay1jb21tZW50cyd9ICkgewogICAgICAgICRyT3B0cy0+eydpbmRlbnQtYmxvY2stY29tbWVudHMnfSA9IDE7CiAgICB9CgogICAgIyAtYmFyIGNhbm5vdCBiZSB1c2VkIHdpdGggLWJsIG9yIC1ibGk7IGFyYml0cmFyaWx5IGtlZXAgLWJhcgogICAgaWYgKCAkck9wdHMtPnsnb3BlbmluZy1icmFjZS1hbHdheXMtb24tcmlnaHQnfSApIHsKCiAgICAgICAgaWYgKCAkck9wdHMtPnsnb3BlbmluZy1icmFjZS1vbi1uZXctbGluZSd9ICkgewogICAgICAgICAgICBXYXJuKDw8RU9NKTsKIENvbmZsaWN0OiB5b3Ugc3BlY2lmaWVkIGJvdGggJ29wZW5pbmctYnJhY2UtYWx3YXlzLW9uLXJpZ2h0JyAoLWJhcikgYW5kCiAgJ29wZW5pbmctYnJhY2Utb24tbmV3LWxpbmUnICgtYmwpLiAgSWdub3JpbmcgLWJsLgpFT00KICAgICAgICAgICAgJHJPcHRzLT57J29wZW5pbmctYnJhY2Utb24tbmV3LWxpbmUnfSA9IDA7CiAgICAgICAgfQogICAgICAgIGlmICggJHJPcHRzLT57J2JyYWNlLWxlZnQtYW5kLWluZGVudCd9ICkgewogICAgICAgICAgICBXYXJuKDw8RU9NKTsKIENvbmZsaWN0OiB5b3Ugc3BlY2lmaWVkIGJvdGggJ29wZW5pbmctYnJhY2UtYWx3YXlzLW9uLXJpZ2h0JyAoLWJhcikgYW5kCiAgJy0tYnJhY2UtbGVmdC1hbmQtaW5kZW50JyAoLWJsaSkuICBJZ25vcmluZyAtYmxpLgpFT00KICAgICAgICAgICAgJHJPcHRzLT57J2JyYWNlLWxlZnQtYW5kLWluZGVudCd9ID0gMDsKICAgICAgICB9CiAgICB9CgogICAgIyBpdCBzaW1wbGlmaWVzIHRoaW5ncyBpZiAtYmwgaXMgMCByYXRoZXIgdGhhbiB1bmRlZmluZWQKICAgIGlmICggIWRlZmluZWQoICRyT3B0cy0+eydvcGVuaW5nLWJyYWNlLW9uLW5ldy1saW5lJ30gKSApIHsKICAgICAgICAkck9wdHMtPnsnb3BlbmluZy1icmFjZS1vbi1uZXctbGluZSd9ID0gMDsKICAgIH0KCiAgICBpZiAoICRyT3B0cy0+eydlbnRhYi1sZWFkaW5nLXdoaXRlc3BhY2UnfSApIHsKICAgICAgICBpZiAoICRyT3B0cy0+eydlbnRhYi1sZWFkaW5nLXdoaXRlc3BhY2UnfSA8IDAgKSB7CiAgICAgICAgICAgIFdhcm4oIi1ldD1uIG11c3QgdXNlIGEgcG9zaXRpdmUgaW50ZWdlcjsgaWdub3JpbmcgLWV0XG4iKTsKICAgICAgICAgICAgJHJPcHRzLT57J2VudGFiLWxlYWRpbmctd2hpdGVzcGFjZSd9ID0gdW5kZWY7CiAgICAgICAgfQoKICAgICAgICAjIGVudGFiIGxlYWRpbmcgd2hpdGVzcGFjZSBoYXMgcHJpb3JpdHkgb3ZlciB0aGUgb2xkZXIgJ3RhYnMnIG9wdGlvbgogICAgICAgIGlmICggJHJPcHRzLT57J3RhYnMnfSApIHsKCiAgICAgICAgICAgICMgVGhlIGZvbGxvd2luZyB3YXJuaW5nIGNvdWxkIGJlIGFkZGVkIGJ1dCB3b3VsZCBhbm5veSBhIGxvdCBvZgogICAgICAgICAgICAjIHVzZXJzIHdobyBoYXZlIGEgcGVybHRpZHlyYyB3aXRoIGJvdGggLXQgYW5kIC1ldD1uLiAgU28gaW5zdGVhZAogICAgICAgICAgICAjIHRoZXJlIGlzIGEgbm90ZSBpbiB0aGUgbWFudWFsIHRoYXQgLWV0IG92ZXJyaWRlcyAtdC4KICAgICAgICAgICAgIyNXYXJuKCItdGFicyBhbmQgLWV0PW4gY29uZmxpY3Q7IGlnbm9yaW5nIC10YWJzXG4iKTsKICAgICAgICAgICAgJHJPcHRzLT57J3RhYnMnfSA9IDA7CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IGEgZGVmYXVsdCB0YWJzaXplIHRvIGJlIHVzZWQgaW4gZ3Vlc3NpbmcgdGhlIHN0YXJ0aW5nIGluZGVudGF0aW9uCiAgICAjIGxldmVsIGlmIGFuZCBvbmx5IGlmIHRoaXMgcnVuIGRvZXMgbm90IHVzZSB0YWJzIGFuZCB0aGUgb2xkIGNvZGUgZG9lcwogICAgIyB1c2UgdGFicwogICAgaWYgKCAkck9wdHMtPnsnZGVmYXVsdC10YWJzaXplJ30gKSB7CiAgICAgICAgaWYgKCAkck9wdHMtPnsnZGVmYXVsdC10YWJzaXplJ30gPCAwICkgewogICAgICAgICAgICBXYXJuKCJuZWdhdGl2ZSB2YWx1ZSBvZiAtZHQsIHNldHRpbmcgMFxuIik7CiAgICAgICAgICAgICRyT3B0cy0+eydkZWZhdWx0LXRhYnNpemUnfSA9IDA7CiAgICAgICAgfQogICAgICAgIGlmICggJHJPcHRzLT57J2RlZmF1bHQtdGFic2l6ZSd9ID4gMjAgKSB7CiAgICAgICAgICAgIFdhcm4oInVucmVhc29uYWJseSBsYXJnZSB2YWx1ZSBvZiAtZHQsIHJlZHVjaW5nXG4iKTsKICAgICAgICAgICAgJHJPcHRzLT57J2RlZmF1bHQtdGFic2l6ZSd9ID0gMjA7CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgJHJPcHRzLT57J2RlZmF1bHQtdGFic2l6ZSd9ID0gODsKICAgIH0KCiAgICAjIENoZWNrIGFuZCBjbGVhbiB1cCBhbnkgc3ViLWFsaWFzLWxpc3QKICAgIGlmICggZGVmaW5lZCggJHJPcHRzLT57J3N1Yi1hbGlhcy1saXN0J30gKQogICAgICAgICYmIGxlbmd0aCggJHJPcHRzLT57J3N1Yi1hbGlhcy1saXN0J30gKSApCiAgICB7CiAgICAgICAgbXkgQGZvcmNlZF93b3JkczsKCiAgICAgICAgIyBpbmNsdWRlICdzdWInIGZvciBjb252ZW5pZW5jZSBpZiB0aGlzIG9wdGlvbiBpcyB1c2VkCiAgICAgICAgcHVzaCBAZm9yY2VkX3dvcmRzLCAnc3ViJzsKCiAgICAgICAgY2xlYW51cF93b3JkX2xpc3QoICRyT3B0cywgJ3N1Yi1hbGlhcy1saXN0JywgXEBmb3JjZWRfd29yZHMgKTsKICAgIH0KCiAgICBtYWtlX2dyZXBfYWxpYXNfc3RyaW5nKCRyT3B0cyk7CgogICAgIyBUdXJuIG9uIGZ1enp5LWxpbmUtbGVuZ3RoIHVubGVzcyB0aGlzIGlzIGFuIGV4dHJ1ZGUgcnVuLCBhcyBkZXRlcm1pbmVkCiAgICAjIGJ5IHRoZSAtaSBhbmQgLWNpIHNldHRpbmdzLiBPdGhlcndpc2UgYmxpbmtlcnMgY2FuIGZvcm0gKGNhc2UgYjkzNSkuCiAgICAjIFRoaXMgaXMgYW4gdW5kb2N1bWVudGVkIHBhcmFtZXRlciB1c2VkIG9ubHkgZm9yIHN0cmVzcy10ZXN0aW5nIHdoZW4KICAgICMgLS1leHRydWRlIGlzIHNldC4KICAgIGlmICggISRyT3B0cy0+eydmdXp6eS1saW5lLWxlbmd0aCd9ICkgewogICAgICAgIGlmICggICAkck9wdHMtPnsnbWF4aW11bS1saW5lLWxlbmd0aCd9ICE9IDEKICAgICAgICAgICAgfHwgJHJPcHRzLT57J2NvbnRpbnVhdGlvbi1pbmRlbnRhdGlvbid9ICE9IDAgKQogICAgICAgIHsKICAgICAgICAgICAgJHJPcHRzLT57J2Z1enp5LWxpbmUtbGVuZ3RoJ30gPSAxOwogICAgICAgIH0KICAgIH0KCiAgICAjIExhcmdlIHZhbHVlcyBvZiAtc2NsIGNhbiBjYXVzZSBjb252ZXJnZW5jZSBwcm9ibGVtcywgaXNzdWUgYzE2NwogICAgaWYgKCAkck9wdHMtPnsnc2hvcnQtY29uY2F0ZW5hdGlvbi1pdGVtLWxlbmd0aCd9ID4gMTIgKSB7CiAgICAgICAgJHJPcHRzLT57J3Nob3J0LWNvbmNhdGVuYXRpb24taXRlbS1sZW5ndGgnfSA9IDEyOwogICAgfQoKICAgICMgVGhlIGZyZWV6ZS13aGl0ZXNwYWNlIG9wdGlvbiBpcyBjdXJyZW50bHkgYSBkZXJpdmVkIG9wdGlvbiB3aGljaCBoYXMgaXRzCiAgICAjIG93biBrZXkKICAgICRyT3B0cy0+eydmcmVlemUtd2hpdGVzcGFjZSd9ID0gISRyT3B0cy0+eydhZGQtd2hpdGVzcGFjZSd9CiAgICAgICYmICEkck9wdHMtPnsnZGVsZXRlLW9sZC13aGl0ZXNwYWNlJ307CgogICAgIyBUdXJuIG9mZiBjZXJ0YWluIG9wdGlvbnMgaWYgd2hpdGVzcGFjZSBpcyBmcm96ZW4KICAgICMgTm90ZTogdmVydGljYWwgYWxpZ25tZW50IHdpbGwgYmUgYXV0b21hdGljYWxseSBzaHV0IG9mZgogICAgaWYgKCAkck9wdHMtPnsnZnJlZXplLXdoaXRlc3BhY2UnfSApIHsKICAgICAgICAkck9wdHMtPnsnbG9naWNhbC1wYWRkaW5nJ30gPSAwOwogICAgfQoKICAgICMgRGVmaW5lIHRoZSBkZWZhdWx0IGxpbmUgZW5kaW5nLCBiZWZvcmUgYW55IC1wbGUgb3B0aW9uIGlzIGFwcGxpZWQKICAgICRzZWxmLT5bX2xpbmVfc2VwYXJhdG9yX2RlZmF1bHRfXSA9IGdldF9saW5lX3NlcGFyYXRvcl9kZWZhdWx0KCRyT3B0cyk7CgogICAgJHNlbGYtPltfbGluZV90aWR5X2JlZ2luX10gPSB1bmRlZjsKICAgICRzZWxmLT5bX2xpbmVfdGlkeV9lbmRfXSAgID0gdW5kZWY7CiAgICBteSAkbGluZV9yYW5nZV90aWR5ID0gJHJPcHRzLT57J2xpbmUtcmFuZ2UtdGlkeSd9OwogICAgaWYgKCRsaW5lX3JhbmdlX3RpZHkpIHsKCiAgICAgICAgaWYgKCAkbnVtX2ZpbGVzID4gMSApIHsKICAgICAgICAgICAgRGllKDw8RU9NKTsKLS1saW5lLXJhbmdlLXRpZHkgZXhwZWN0cyBubyBtb3JlIHRoYW4gMSBmaWxlbmFtZSBpbiB0aGUgYXJnIGxpc3QgYnV0IHNhdyAkbnVtX2ZpbGVzIGZpbGVuYW1lcwpFT00KICAgICAgICB9CgogICAgICAgICRsaW5lX3JhbmdlX3RpZHkgPX4gcy9ccysvL2c7CiAgICAgICAgaWYgKCAkbGluZV9yYW5nZV90aWR5ID1+IC9eKFxkKyk6KFxkKyk/JC8gKSB7CiAgICAgICAgICAgIG15ICRuMSA9ICQxOwogICAgICAgICAgICBteSAkbjIgPSAkMjsKICAgICAgICAgICAgaWYgKCAkbjEgPCAxICkgewogICAgICAgICAgICAgICAgRGllKDw8RU9NKTsKLS1saW5lLXJhbmdlLXRpZHk9bjE6bjIgZXhwZWN0cyBzdGFydGluZyBsaW5lIG51bWJlciBuMT49MSBidXQgbjE9JG4xCkVPTQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggZGVmaW5lZCgkbjIpICYmICRuMiA8ICRuMSApIHsKICAgICAgICAgICAgICAgIERpZSg8PEVPTSk7Ci0tbGluZS1yYW5nZS10aWR5PW4xOm4yIGV4cGVjdHMgZW5kaW5nIGxpbmUgbnVtYmVyIG4yPj1uMSBidXQgbjE9JG4xIGFuZCBuMj0kbjIKRU9NCiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHNlbGYtPltfbGluZV90aWR5X2JlZ2luX10gPSAkbjE7CiAgICAgICAgICAgICRzZWxmLT5bX2xpbmVfdGlkeV9lbmRfXSAgID0gJG4yOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgRGllKAoidW5yZWNvZ25pemVkICdsaW5lLXJhbmdlLXRpZHknOyBleHBlY3RpbmcgZm9ybWF0ICctbHJ0PW4xOm4yJ1xuIgogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBjaGVja19vcHRpb25zCgpzdWIgZmluZF9maWxlX3Vwd2FyZHMgewoKICAgIG15ICggJHNlYXJjaF9kaXIsICRzZWFyY2hfZmlsZSApID0gQF87CgogICAgIyBUaGlzIGltcGxlbWVudHMgdGhlIC4uLiB1cHdhcmQgc2VhcmNoIGZvciBhIGZpbGUKCiAgICAkc2VhcmNoX2RpciAgPX4gc3svKyR9e307CiAgICAkc2VhcmNoX2ZpbGUgPX4gc3teLyt9e307CgogICAgd2hpbGUgKDEpIHsKICAgICAgICBteSAkdHJ5X3BhdGggPSAiJHNlYXJjaF9kaXIvJHNlYXJjaF9maWxlIjsKICAgICAgICBpZiAoIC1mICR0cnlfcGF0aCApIHsKICAgICAgICAgICAgcmV0dXJuICR0cnlfcGF0aDsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkc2VhcmNoX2RpciBlcSAnLycgKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRzZWFyY2hfZGlyID0gZGlybmFtZSgkc2VhcmNoX2Rpcik7CiAgICAgICAgfQogICAgfSAjIyBlbmQgd2hpbGUgKDEpCgogICAgIyBUaGlzIHJldHVybiBpcyBmb3IgUGVybC1Dcml0aWMuCiAgICAjIFdlIHNob3VsZG4ndCBnZXQgb3V0IG9mIHRoZSB3aGlsZSBsb29wIHdpdGhvdXQgYSByZXR1cm4KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGZpbmRfZmlsZV91cHdhcmRzCgpzdWIgZXhwYW5kX2NvbW1hbmRfYWJicmV2aWF0aW9ucyB7CgogICAgIyBnbyB0aHJvdWdoIEBBUkdWIGFuZCBleHBhbmQgYW55IGFiYnJldmlhdGlvbnMKICAgICMgbm90ZSB0aGF0IEBBUkdWIGhhcyBiZWVuIGxvY2FsaXplZAoKICAgIG15ICggJHJleHBhbnNpb24sICRycmF3X29wdGlvbnMsICRjb25maWdfZmlsZSApID0gQF87CgogICAgIyBzZXQgYSBwYXNzIGxpbWl0IHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcDsKICAgICMgMTAgc2hvdWxkIGJlIHBsZW50eSwgYnV0IGl0IG1heSBiZSBpbmNyZWFzZWQgdG8gYWxsb3cgZGVlcGx5CiAgICAjIG5lc3RlZCBleHBhbnNpb25zLgogICAgbXkgJG1heF9wYXNzZXMgPSAxMDsKCiAgICAjIGtlZXAgbG9vcGluZyB1bnRpbCBhbGwgZXhwYW5zaW9ucyBoYXZlIGJlZW4gY29udmVydGVkIGludG8gYWN0dWFsCiAgICAjIGRhc2ggcGFyYW1ldGVycy4uCiAgICBmb3JlYWNoIG15ICRwYXNzX2NvdW50ICggMCAuLiAkbWF4X3Bhc3NlcyApIHsKICAgICAgICBteSBAbmV3X2FyZ3YgICAgID0gKCk7CiAgICAgICAgbXkgJGFiYnJldl9jb3VudCA9IDA7CgogICAgICAgICMgbG9vcCBvdmVyIGVhY2ggaXRlbSBpbiBAQVJHVi4uCiAgICAgICAgZm9yZWFjaCBteSAkd29yZCAoQEFSR1YpIHsKCiAgICAgICAgICAgICMgY29udmVydCBhbnkgbGVhZGluZyAnbm8tJyB0byBqdXN0ICdubycKICAgICAgICAgICAgaWYgKCAkd29yZCA9fiAvXigtWy1dP25vKS0oLiopLyApIHsgJHdvcmQgPSAkMSAuICQyIH0KCiAgICAgICAgICAgICMgaWYgaXQgaXMgYSBkYXNoIGZsYWcgKGluc3RlYWQgb2YgYSBmaWxlIG5hbWUpLi4KICAgICAgICAgICAgaWYgKCAkd29yZCA9fiAvXi1bLV0/KFtcd1wtXSspKC4qKS8gKSB7CgogICAgICAgICAgICAgICAgbXkgJGFiciAgID0gJDE7CiAgICAgICAgICAgICAgICBteSAkZmxhZ3MgPSAkMjsKCiAgICAgICAgICAgICAgICAjIHNhdmUgdGhlIHJhdyBpbnB1dCBmb3IgZGVidWcgb3V0cHV0IGluIGNhc2Ugb2YgY2lyY3VsYXIgcmVmcwogICAgICAgICAgICAgICAgaWYgKCAkcGFzc19jb3VudCA9PSAwICkgewogICAgICAgICAgICAgICAgICAgIHB1c2goIEB7JHJyYXdfb3B0aW9uc30sICR3b3JkICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyByZWNvbWJpbmUgYWJicmV2aWF0aW9uIGFuZCBmbGFnLCBpZiBuZWNlc3NhcnksCiAgICAgICAgICAgICAgICAjIHRvIGFsbG93IGFiYnJldmlhdGlvbnMgd2l0aCBhcmd1bWVudHMgc3VjaCBhcyAnLXZ0PTEnCiAgICAgICAgICAgICAgICBpZiAoICRyZXhwYW5zaW9uLT57ICRhYnIgLiAkZmxhZ3MgfSApIHsKICAgICAgICAgICAgICAgICAgICAkYWJyICAgPSAkYWJyIC4gJGZsYWdzOwogICAgICAgICAgICAgICAgICAgICRmbGFncyA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGlmIHdlIHNlZSB0aGlzIGRhc2ggaXRlbSBpbiB0aGUgZXhwYW5zaW9uIGhhc2guLgogICAgICAgICAgICAgICAgaWYgKCAkcmV4cGFuc2lvbi0+eyRhYnJ9ICkgewogICAgICAgICAgICAgICAgICAgICRhYmJyZXZfY291bnQrKzsKCiAgICAgICAgICAgICAgICAgICAgIyBzdHVmZiBhbGwgb2YgdGhlIHdvcmRzIHRoYXQgaXQgZXhwYW5kcyB0byBpbnRvIHRoZQogICAgICAgICAgICAgICAgICAgICMgbmV3IGFyZyBsaXN0IGZvciB0aGUgbmV4dCBwYXNzCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCBteSAkYWJicmV2ICggQHsgJHJleHBhbnNpb24tPnskYWJyfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IHVubGVzcyAkYWJicmV2OyAgICAjIGZvciBzYWZldHk7IHNob3VsZG4ndCBoYXBwZW4KICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCggQG5ld19hcmd2LCAnLS0nIC4gJGFiYnJldiAuICRmbGFncyApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIG5vdCBpbiBleHBhbnNpb24gaGFzaCwgbXVzdCBiZSBhY3R1YWwgbG9uZyBuYW1lCiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBwdXNoKCBAbmV3X2FyZ3YsICR3b3JkICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgbm90IGEgZGFzaCBpdGVtLCBzbyBqdXN0IHNhdmUgaXQgZm9yIHRoZSBuZXh0IHBhc3MKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBwdXNoKCBAbmV3X2FyZ3YsICR3b3JkICk7CiAgICAgICAgICAgIH0KICAgICAgICB9ICMjIGVuZCBvZiB0aGlzIHBhc3MKCiAgICAgICAgIyB1cGRhdGUgcGFyYW1ldGVyIGxpc3QgQEFSR1YgdG8gdGhlIG5ldyBvbmUKICAgICAgICBAQVJHViA9IEBuZXdfYXJndjsKICAgICAgICBsYXN0IGlmICggISRhYmJyZXZfY291bnQgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgd2UgYXJlIG5vdCBpbiBhbiBpbmZpbml0ZSBsb29wCiAgICAgICAgaWYgKCAkcGFzc19jb3VudCA9PSAkbWF4X3Bhc3NlcyApIHsKICAgICAgICAgICAgbG9jYWwgJExJU1RfU0VQQVJBVE9SID0gJykoJzsKICAgICAgICAgICAgV2Fybig8PEVPTSk7CkknbSB0aXJlZC4gV2Ugc2VlbSB0byBiZSBpbiBhbiBpbmZpbml0ZSBsb29wIHRyeWluZyB0byBleHBhbmQgYWxpYXNlcy4KSGVyZSBhcmUgdGhlIHJhdyBvcHRpb25zOwoocnJhd19vcHRpb25zKQpFT00KICAgICAgICAgICAgbXkgJG51bSA9IEBuZXdfYXJndjsKICAgICAgICAgICAgaWYgKCAkbnVtIDwgNTAgKSB7CiAgICAgICAgICAgICAgICBXYXJuKDw8RU9NKTsKQWZ0ZXIgJG1heF9wYXNzZXMgcGFzc2VzIGhlcmUgaXMgQVJHVgooQG5ld19hcmd2KQpFT00KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIFdhcm4oPDxFT00pOwpBZnRlciAkbWF4X3Bhc3NlcyBwYXNzZXMgQVJHViBoYXMgJG51bSBlbnRyaWVzCkVPTQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIGRlZmluZWQoJGNvbmZpZ19maWxlKSApIHsKICAgICAgICAgICAgICAgIERpZSg8PCJESUUiKTsKUGxlYXNlIGNoZWNrIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlICRjb25maWdfZmlsZSBmb3IgY2lyY3VsYXItcmVmZXJlbmNlcy4KVG8gZGVhY3RpdmF0ZSBpdCwgdXNlIC1ucHJvLgpESUUKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIERpZSg8PCdESUUnKTsKUHJvZ3JhbSBidWcgLSBjaXJjdWxhci1yZWZlcmVuY2VzIGluIHRoZSAlZXhwYW5zaW9uIGhhc2gsIHByb2JhYmx5IGR1ZSB0bwphIHJlY2VudCBwcm9ncmFtIGNoYW5nZS4KRElFCiAgICAgICAgICAgIH0KICAgICAgICB9ICMjIGVuZCBvZiBjaGVjayBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcwogICAgfSAjIyBlbmQgb2YgbG9vcCBvdmVyIGFsbCBwYXNzZXMKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGV4cGFuZF9jb21tYW5kX2FiYnJldmlhdGlvbnMKCiMgRGVidWcgcm91dGluZSAtLSB0aGlzIHdpbGwgZHVtcCB0aGUgZXhwYW5zaW9uIGhhc2gKc3ViIGR1bXBfc2hvcnRfbmFtZXMgewogICAgbXkgJHJleHBhbnNpb24gPSBzaGlmdDsKICAgIHByaW50IHsqU1RET1VUfSA8PEVPTTsKTGlzdCBvZiBzaG9ydCBuYW1lcy4gIFRoaXMgbGlzdCBzaG93cyBob3cgYWxsIGFiYnJldmlhdGlvbnMgYXJlCnRyYW5zbGF0ZWQgaW50byBvdGhlciBhYmJyZXZpYXRpb25zIGFuZCwgZXZlbnR1YWxseSwgaW50byBsb25nIG5hbWVzLgpOZXcgYWJicmV2aWF0aW9ucyBtYXkgYmUgZGVmaW5lZCBpbiBhIC5wZXJsdGlkeXJjIGZpbGUuCkZvciBhIGxpc3Qgb2YgYWxsIGxvbmcgbmFtZXMsIHVzZSBwZXJsdGlkeSAtLWR1bXAtbG9uZy1uYW1lcyAoLWRsbikuCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkVPTQogICAgZm9yZWFjaCBteSAkYWJicmV2ICggc29ydCBrZXlzICV7JHJleHBhbnNpb259ICkgewogICAgICAgIG15IEBsaXN0ID0gQHsgJHJleHBhbnNpb24tPnskYWJicmV2fSB9OwogICAgICAgIHByaW50IHsqU1RET1VUfSAiJGFiYnJldiAtLT4gQGxpc3RcbiI7CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBkdW1wX3Nob3J0X25hbWVzCgpzdWIgY2hlY2tfdm1zX2ZpbGVuYW1lIHsKCiAgICAjIGdpdmVuIGEgdmFsaWQgZmlsZW5hbWUgKHRoZSBwZXJsdGlkeSBpbnB1dCBmaWxlKQogICAgIyBjcmVhdGUgYSBtb2RpZmllZCBmaWxlbmFtZSBhbmQgc2VwYXJhdG9yIGNoYXJhY3RlcgogICAgIyBzdWl0YWJsZSBmb3IgVk1TLgogICAgIwogICAgIyBDb250cmlidXRlZCBieSBNaWNoYWVsIENhcnRtZWxsCiAgICAjCiAgICBteSAkZmlsZW5hbWUgPSBzaGlmdDsKICAgIG15ICggJGJhc2UsICRwYXRoICkgPSBmaWxlcGFyc2UoJGZpbGVuYW1lKTsKCiAgICAjIHJlbW92ZSBleHBsaWNpdCA7IHZlcnNpb24KICAgICRiYXNlID1+IHMvOy0/XGQqJC8vCgogICAgICAjIHJlbW92ZSBleHBsaWNpdCAuIHZlcnNpb24gaWUgdHdvIGRvdHMgaW4gZmlsZW5hbWUgTkIgXiBlc2NhcGVzIGEgZG90CiAgICAgIG9yICRiYXNlID1+IHN7KCAgICAgICAgICAjIGJlZ2luIGNhcHR1cmUgJDEKICAgICAgICAgICAgICAgICAgKD86XnxbXl5dKVwuICMgbWF0Y2ggYSBkb3Qgbm90IHByZWNlZGVkIGJ5IGEgY2FyZXQKICAgICAgICAgICAgICAgICAgKD86ICAgICAgICAgICMgZm9sbG93ZWQgYnkgbm90aGluZwogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIyBvcgogICAgICAgICAgICAgICAgICAgIC4qW15eXSAgICAgIyBhbnl0aGluZyBlbmRpbmcgaW4gYSBub24gY2FyZXQKICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgKSAgICAgICAgICAgICAgIyBlbmQgY2FwdHVyZSAkMQogICAgICAgICAgICAgICAgXC4tP1xkKiQgICAgICAgIyBtYXRjaCAuIHZlcnNpb24gbnVtYmVyCiAgICAgICAgICAgICAgfXskMX14OwoKICAgICMgbm9ybWFsaXplIGZpbGVuYW1lLCBpZiB0aGVyZSBhcmUgbm8gdW5lc2NhcGVkIGRvdHMgdGhlbiBhcHBlbmQgb25lCiAgICAkYmFzZSAuPSAnLicgdW5sZXNzICggJGJhc2UgPX4gLyg/Ol58W15eXSlcLi8gKTsKCiAgICAjIGlmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhbiBleHRlbnNpb24gdGhlbiB3ZSBqdXN0IGFwcGVuZCB0aGUgZXh0ZW5zaW9uCiAgICBteSAkc2VwYXJhdG9yID0gKCAkYmFzZSA9fiAvXC4kLyApID8gRU1QVFlfU1RSSU5HIDogIl8iOwogICAgcmV0dXJuICggJHBhdGggLiAkYmFzZSwgJHNlcGFyYXRvciApOwp9ICMjIGVuZCBzdWIgY2hlY2tfdm1zX2ZpbGVuYW1lCgpzdWIgV2luX09TX1R5cGUgewoKICAgIG15ICRycGVuZGluZ19jb21wbGFpbnQgPSBzaGlmdDsKCiAgICAjIFJldHVybnMgYSBzdHJpbmcgdGhhdCBkZXRlcm1pbmVzIHdoYXQgTVMgT1Mgd2UgYXJlIG9uLgogICAgIyBSZXR1cm5zIHdpbjMycyw5NSw5OCxNZSxOVDMuNTEsTlQ0LDIwMDAsWFAvLk5ldCxXaW4yMDAzCiAgICAjIFJldHVybnMgYmxhbmsgc3RyaW5nIGlmIG5vdCBhbiBNUyBzeXN0ZW0uCiAgICAjIE9yaWdpbmFsIGNvZGUgY29udHJpYnV0ZWQgYnk6IFl2ZXMgT3J0b24KICAgICMgV2UgbmVlZCB0byBrbm93IHRoaXMgdG8gZGVjaWRlIHdoZXJlIHRvIGxvb2sgZm9yIGNvbmZpZyBmaWxlcwoKICAgICMgVE9ETzogYXJlIHRoZXNlIG1vcmUgc3RhbmRhcmQgbmFtZXM/CiAgICAjIFdpbjMycyBXaW45NSBXaW45OCBXaW5NZSBXaW5OVDMuNTEgV2luTlQ0IFdpbjIwMDAgV2luWFAvLk5ldCBXaW4yMDAzCgogICAgbXkgJG9zID0gRU1QVFlfU1RSSU5HOwogICAgcmV0dXJuICRvcyB1bmxlc3MgKCAkT1NOQU1FID1+IC93aW4zMnxkb3MvaSApOyAgICAjIGlzIGl0IGEgTVMgYm94PwoKICAgICMgU3lzdGVtcyBidWlsdCBmcm9tIFBlcmwgc291cmNlIG1heSBub3QgaGF2ZSBXaW4zMi5wbQogICAgIyBCdXQgcHJvYmFibHkgaGF2ZSBXaW4zMjo6R2V0T1NWZXJzaW9uKCkgYW55d2F5IHNvIHRoZQogICAgIyBmb2xsb3dpbmcgbGluZSBpcyBub3QgJ3JlcXVpcmVkJzoKICAgICMgcmV0dXJuICRvcyB1bmxlc3MgZXZhbCgncmVxdWlyZSBXaW4zMicpOwoKICAgICMgVXNlIHRoZSBzdGFuZGFyZCBBUEkgY2FsbCB0byBkZXRlcm1pbmUgdGhlIHZlcnNpb24KICAgIG15ICggJHVuZGVmLCAkbWFqb3IsICRtaW5vciwgJGJ1aWxkLCAkaWQgKTsKICAgIG15ICRvayA9IGV2YWwgewogICAgICAgICggJHVuZGVmLCAkbWFqb3IsICRtaW5vciwgJGJ1aWxkLCAkaWQgKSA9IFdpbjMyOjpHZXRPU1ZlcnNpb24oKTsKICAgICAgICAxOwogICAgfTsKICAgIGlmICggISRvayAmJiBERVZFTF9NT0RFICkgewogICAgICAgIEZhdWx0KCJDb3VsZCBub3QgY2FsIFdpbjMyOjpHZXRPU1ZlcnNpb24oKTogJEVWQUxfRVJST1JcbiIpOwogICAgfQoKICAgICMKICAgICMgICAgTkFNRSAgICAgICAgICAgICAgICAgICBJRCAgIE1BSk9SICBNSU5PUgogICAgIyAgICBXaW5kb3dzIE5UIDQgICAgICAgICAgIDIgICAgICA0ICAgICAgIDAKICAgICMgICAgV2luZG93cyAyMDAwICAgICAgICAgICAyICAgICAgNSAgICAgICAwCiAgICAjICAgIFdpbmRvd3MgWFAgICAgICAgICAgICAgMiAgICAgIDUgICAgICAgMQogICAgIyAgICBXaW5kb3dzIFNlcnZlciAyMDAzICAgIDIgICAgICA1ICAgICAgIDIKCiAgICByZXR1cm4gIndpbjMycyIgdW5sZXNzICRpZDsgICAgIyBJZiBpZD09MCB0aGVuIGl0cyBhIHdpbjMycyBib3guCiAgICAkb3MgPSB7ICAgICAgICAgICAgICAgICAgICAgICAgIyBNYWdpYyBudW1iZXJzIGZyb20gTVNETgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZG9jdW1lbnRhdGlvbiBvZiBHZXRPU1ZlcnNpb24KICAgICAgICAxID0+IHsKICAgICAgICAgICAgMCAgPT4gIjk1IiwKICAgICAgICAgICAgMTAgPT4gIjk4IiwKICAgICAgICAgICAgOTAgPT4gIk1lIiwKICAgICAgICB9LAogICAgICAgIDIgPT4gewogICAgICAgICAgICAwICA9PiAiMjAwMCIsICAgICAgIyBvciBOVCA0LCBzZWUgYmVsb3cKICAgICAgICAgICAgMSAgPT4gIlhQLy5OZXQiLAogICAgICAgICAgICAyICA9PiAiV2luMjAwMyIsCiAgICAgICAgICAgIDUxID0+ICJOVDMuNTEiLAogICAgICAgIH0sCiAgICB9LT57JGlkfS0+eyRtaW5vcn07CgogICAgIyBJZiAkb3MgaXMgdW5kZWZpbmVkLCB0aGUgYWJvdmUgY29kZSBpcyBvdXQgb2YgZGF0ZS4gIFN1Z2dlc3RlZCB1cGRhdGVzCiAgICAjIGFyZSB3ZWxjb21lLgogICAgaWYgKCAhZGVmaW5lZCgkb3MpICkgewogICAgICAgICRvcyA9IEVNUFRZX1NUUklORzsKCiAgICAgICAgIyBEZWFjdGl2YXRlZCB0aGlzIG1lc3NhZ2UgMjAxODAzMjIgYmVjYXVzZSBpdCB3YXMgbmVlZGxlc3NseQogICAgICAgICMgY2F1c2luZyBzb21lIHRlc3Qgc2NyaXB0cyB0byBmYWlsLiAgTmVlZCBoZWxwIGZyb20gc29tZW9uZQogICAgICAgICMgd2l0aCBleHBlcnRpc2UgaW4gV2luZG93cyB0byBkZWNpZGUgd2hhdCBpcyBwb3NzaWJsZSB3aXRoIHdpbmRvd3MuCiAgICAgICAgJHskcnBlbmRpbmdfY29tcGxhaW50fSAuPSA8PEVPUyBpZiAoMCk7CkVycm9yIHRyeWluZyB0byBkaXNjb3ZlciBXaW5fT1NfVHlwZTogJGlkOiRtYWpvcjokbWlub3IgSGFzIG5vIG5hbWUgb2YgcmVjb3JkIQpXZSB3b24ndCBiZSBhYmxlIHRvIGxvb2sgZm9yIGEgc3lzdGVtLXdpZGUgY29uZmlnIGZpbGUuCkVPUwogICAgfQoKICAgICMgVW5mb3J0dW5hdGVseSB0aGUgbG9naWMgdXNlZCBmb3IgdGhlIHZhcmlvdXMgdmVyc2lvbnMgaXNuJ3Qgc28gY2xldmVyLi4KICAgICMgc28gd2UgaGF2ZSB0byBoYW5kbGUgYW4gb3V0c2lkZSBjYXNlLgogICAgcmV0dXJuICggJG9zIGVxICIyMDAwIiAmJiAkbWFqb3IgIT0gNSApID8gIk5UNCIgOiAkb3M7Cn0gIyMgZW5kIHN1YiBXaW5fT1NfVHlwZQoKc3ViIGxvb2tfZm9yX1dpbmRvd3MgewoKICAgICMgZGV0ZXJtaW5lIFdpbmRvd3Mgc3ViLXR5cGUgYW5kIGxvY2F0aW9uIG9mCiAgICAjIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24gZmlsZXMKICAgIG15ICRycGVuZGluZ19jb21wbGFpbnQgPSBzaGlmdDsKICAgIG15ICRpc19XaW5kb3dzICAgICAgICAgPSAoICRPU05BTUUgPX4gL3dpbjMyfGRvcy9pICk7CiAgICBteSAkV2luZG93c190eXBlOwogICAgJFdpbmRvd3NfdHlwZSA9IFdpbl9PU19UeXBlKCRycGVuZGluZ19jb21wbGFpbnQpIGlmICRpc19XaW5kb3dzOwogICAgcmV0dXJuICggJGlzX1dpbmRvd3MsICRXaW5kb3dzX3R5cGUgKTsKfSAjIyBlbmQgc3ViIGxvb2tfZm9yX1dpbmRvd3MKCnN1YiBmaW5kX2NvbmZpZ19maWxlIHsKCiAgICAjIGxvb2sgZm9yIGEgLnBlcmx0aWR5cmMgY29uZmlndXJhdGlvbiBmaWxlCiAgICAjIEZvciBXaW5kb3dzIGFsc28gbG9vayBmb3IgYSBmaWxlIG5hbWVkIHBlcmx0aWR5LmluaQogICAgbXkgKCAkaXNfV2luZG93cywgJFdpbmRvd3NfdHlwZSwgJHJjb25maWdfZmlsZV9jaGF0dGVyLAogICAgICAgICRycGVuZGluZ19jb21wbGFpbnQgKQogICAgICA9IEBfOwoKICAgICR7JHJjb25maWdfZmlsZV9jaGF0dGVyfSAuPSAiIyBDb25maWcgZmlsZSBzZWFyY2guLi5zeXN0ZW0gcmVwb3J0ZWQgYXM6IjsKICAgIGlmICgkaXNfV2luZG93cykgewogICAgICAgICR7JHJjb25maWdfZmlsZV9jaGF0dGVyfSAuPSAiV2luZG93cyAkV2luZG93c190eXBlXG4iOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJHskcmNvbmZpZ19maWxlX2NoYXR0ZXJ9IC49ICIgJE9TTkFNRVxuIjsKICAgIH0KCiAgICAjIHN1YiB0byBjaGVjayBmaWxlIGV4aXN0ZW5jZSBhbmQgcmVjb3JkIGFsbCB0ZXN0cwogICAgbXkgJGV4aXN0c19jb25maWdfZmlsZSA9IHN1YiB7CiAgICAgICAgbXkgJGNvbmZpZ19maWxlID0gc2hpZnQ7CiAgICAgICAgcmV0dXJuIDAgdW5sZXNzIGRlZmluZWQoJGNvbmZpZ19maWxlKTsKICAgICAgICAkeyRyY29uZmlnX2ZpbGVfY2hhdHRlcn0gLj0gIiMgVGVzdGluZzogJGNvbmZpZ19maWxlXG4iOwogICAgICAgIHJldHVybiAtZiAkY29uZmlnX2ZpbGU7CiAgICB9OyAjIyBlbmQgJGV4aXN0c19jb25maWdfZmlsZSA9IHN1YgoKICAgICMgU3ViIHRvIHNlYXJjaCB1cHdhcmQgZm9yIGNvbmZpZyBmaWxlCiAgICBteSAkcmVzb2x2ZV9jb25maWdfZmlsZSA9IHN1YiB7CgogICAgICAgICMgcmVzb2x2ZSA8ZGlyPi8uLi4vPGZpbGU+LCBtZWFuaW5nIGxvb2sgdXB3YXJkcyBmcm9tIGRpcmVjdG9yeQogICAgICAgIG15ICRjb25maWdfZmlsZSA9IHNoaWZ0OwogICAgICAgIGlmICggZGVmaW5lZCgkY29uZmlnX2ZpbGUpICkgewogICAgICAgICAgICBpZiAoIG15ICggJHN0YXJ0X2RpciwgJHNlYXJjaF9maWxlICkgPQogICAgICAgICAgICAgICAgKCAkY29uZmlnX2ZpbGUgPX4gbXteKC4qKVwuXC5cLi8oLiopJH0gKSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICR7JHJjb25maWdfZmlsZV9jaGF0dGVyfSAuPQogICAgICAgICAgICAgICAgICAiIyBTZWFyY2hpbmcgVXB3YXJkOiAkY29uZmlnX2ZpbGVcbiI7CiAgICAgICAgICAgICAgICAkc3RhcnRfZGlyID0gJy4nIGlmICEkc3RhcnRfZGlyOwogICAgICAgICAgICAgICAgJHN0YXJ0X2RpciA9IEN3ZDo6cmVhbHBhdGgoJHN0YXJ0X2Rpcik7CiAgICAgICAgICAgICAgICBteSAkZm91bmRfZmlsZSA9IGZpbmRfZmlsZV91cHdhcmRzKCAkc3RhcnRfZGlyLCAkc2VhcmNoX2ZpbGUgKTsKICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCgkZm91bmRfZmlsZSkgKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbmZpZ19maWxlID0gJGZvdW5kX2ZpbGU7CiAgICAgICAgICAgICAgICAgICAgJHskcmNvbmZpZ19maWxlX2NoYXR0ZXJ9IC49ICIjIEZvdW5kOiAkY29uZmlnX2ZpbGVcbiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRjb25maWdfZmlsZTsKICAgIH07ICMjIGVuZCAkcmVzb2x2ZV9jb25maWdfZmlsZSA9IHN1YgoKICAgIG15ICRjb25maWdfZmlsZTsKCiAgICAjIGxvb2sgaW4gY3VycmVudCBkaXJlY3RvcnkgZmlyc3QKICAgICRjb25maWdfZmlsZSA9ICIucGVybHRpZHlyYyI7CiAgICByZXR1cm4gJGNvbmZpZ19maWxlIGlmICRleGlzdHNfY29uZmlnX2ZpbGUtPigkY29uZmlnX2ZpbGUpOwogICAgaWYgKCRpc19XaW5kb3dzKSB7CiAgICAgICAgJGNvbmZpZ19maWxlID0gInBlcmx0aWR5LmluaSI7CiAgICAgICAgcmV0dXJuICRjb25maWdfZmlsZSBpZiAkZXhpc3RzX2NvbmZpZ19maWxlLT4oJGNvbmZpZ19maWxlKTsKICAgIH0KCiAgICAjIERlZmF1bHQgZW52aXJvbm1lbnQgdmFycy4KICAgIG15IEBlbnZzID0gcXcoIFBFUkxUSURZIEhPTUUgKTsKCiAgICAjIENoZWNrIHRoZSBOVC8yay9YUCBsb2NhdGlvbnMsIGZpcnN0IGEgbG9jYWwgbWFjaGluZSBkZWYsIHRoZW4gYQogICAgIyBuZXR3b3JrIGRlZgogICAgcHVzaCBAZW52cywgcXcoIFVTRVJQUk9GSUxFIEhPTUVTSEFSRSApIGlmICRPU05BTUUgPX4gL3dpbjMyL2k7CgogICAgIyBOb3cgZ28gdGhyb3VnaCB0aGUgZW52aXJvbm1lbnQgLi4uCiAgICBmb3JlYWNoIG15ICR2YXIgKEBlbnZzKSB7CiAgICAgICAgJHskcmNvbmZpZ19maWxlX2NoYXR0ZXJ9IC49ICIjIEV4YW1pbmluZzogXCRFTlZ7JHZhcn0iOwogICAgICAgIGlmICggZGVmaW5lZCggJEVOVnskdmFyfSApICkgewogICAgICAgICAgICAkeyRyY29uZmlnX2ZpbGVfY2hhdHRlcn0gLj0gIiA9ICRFTlZ7JHZhcn1cbiI7CgogICAgICAgICAgICAjIHRlc3QgRU5WeyBQRVJMVElEWSB9IGFzIGZpbGU6CiAgICAgICAgICAgIGlmICggJHZhciBlcSAnUEVSTFRJRFknICkgewogICAgICAgICAgICAgICAgJGNvbmZpZ19maWxlID0gIiRFTlZ7JHZhcn0iOwogICAgICAgICAgICAgICAgJGNvbmZpZ19maWxlID0gJHJlc29sdmVfY29uZmlnX2ZpbGUtPigkY29uZmlnX2ZpbGUpOwogICAgICAgICAgICAgICAgcmV0dXJuICRjb25maWdfZmlsZSBpZiAkZXhpc3RzX2NvbmZpZ19maWxlLT4oJGNvbmZpZ19maWxlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyB0ZXN0IEVOViBhcyBkaXJlY3Rvcnk6CiAgICAgICAgICAgICRjb25maWdfZmlsZSA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoICRFTlZ7JHZhcn0sICIucGVybHRpZHlyYyIgKTsKICAgICAgICAgICAgJGNvbmZpZ19maWxlID0gJHJlc29sdmVfY29uZmlnX2ZpbGUtPigkY29uZmlnX2ZpbGUpOwogICAgICAgICAgICByZXR1cm4gJGNvbmZpZ19maWxlIGlmICRleGlzdHNfY29uZmlnX2ZpbGUtPigkY29uZmlnX2ZpbGUpOwoKICAgICAgICAgICAgaWYgKCRpc19XaW5kb3dzKSB7CiAgICAgICAgICAgICAgICAkY29uZmlnX2ZpbGUgPQogICAgICAgICAgICAgICAgICBGaWxlOjpTcGVjLT5jYXRmaWxlKCAkRU5WeyR2YXJ9LCAicGVybHRpZHkuaW5pIiApOwogICAgICAgICAgICAgICAgJGNvbmZpZ19maWxlID0gJHJlc29sdmVfY29uZmlnX2ZpbGUtPigkY29uZmlnX2ZpbGUpOwogICAgICAgICAgICAgICAgcmV0dXJuICRjb25maWdfZmlsZSBpZiAkZXhpc3RzX2NvbmZpZ19maWxlLT4oJGNvbmZpZ19maWxlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJHskcmNvbmZpZ19maWxlX2NoYXR0ZXJ9IC49ICJcbiI7CiAgICAgICAgfQogICAgfQoKICAgICMgdGhlbiBsb29rIGZvciBhIHN5c3RlbS13aWRlIGRlZmluaXRpb24KICAgICMgd2hlcmUgdG8gbG9vayB2YXJpZXMgd2l0aCBPUwogICAgaWYgKCRpc19XaW5kb3dzKSB7CgogICAgICAgIGlmICgkV2luZG93c190eXBlKSB7CiAgICAgICAgICAgIG15ICggJG9zX3V1LCAkc3lzdGVtLCAkYWxsdXNlcnMgKSA9CiAgICAgICAgICAgICAgV2luX0NvbmZpZ19Mb2NzKCAkcnBlbmRpbmdfY29tcGxhaW50LCAkV2luZG93c190eXBlICk7CgogICAgICAgICAgICAjIENoZWNrIEFsbCBVc2VycyBkaXJlY3RvcnksIGlmIHRoZXJlIGlzIG9uZS4KICAgICAgICAgICAgIyBpLmUuIEM6XERvY3VtZW50cyBhbmQgU2V0dGluZ3NcVXNlclxwZXJsdGlkeS5pbmkKICAgICAgICAgICAgaWYgKCRhbGx1c2VycykgewoKICAgICAgICAgICAgICAgICRjb25maWdfZmlsZSA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoICRhbGx1c2VycywgIi5wZXJsdGlkeXJjIiApOwogICAgICAgICAgICAgICAgcmV0dXJuICRjb25maWdfZmlsZSBpZiAkZXhpc3RzX2NvbmZpZ19maWxlLT4oJGNvbmZpZ19maWxlKTsKCiAgICAgICAgICAgICAgICAkY29uZmlnX2ZpbGUgPSBGaWxlOjpTcGVjLT5jYXRmaWxlKCAkYWxsdXNlcnMsICJwZXJsdGlkeS5pbmkiICk7CiAgICAgICAgICAgICAgICByZXR1cm4gJGNvbmZpZ19maWxlIGlmICRleGlzdHNfY29uZmlnX2ZpbGUtPigkY29uZmlnX2ZpbGUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIENoZWNrIHN5c3RlbSBkaXJlY3RvcnkuCiAgICAgICAgICAgICMgcmV0YWluIG9sZCBjb2RlIGluIGNhc2Ugc29tZW9uZSBoYXMgYmVlbiBhYmxlIHRvIGNyZWF0ZQogICAgICAgICAgICAjIGEgZmlsZSB3aXRoIGEgbGVhZGluZyBwZXJpb2QuCiAgICAgICAgICAgICRjb25maWdfZmlsZSA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoICRzeXN0ZW0sICIucGVybHRpZHlyYyIgKTsKICAgICAgICAgICAgcmV0dXJuICRjb25maWdfZmlsZSBpZiAkZXhpc3RzX2NvbmZpZ19maWxlLT4oJGNvbmZpZ19maWxlKTsKCiAgICAgICAgICAgICRjb25maWdfZmlsZSA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoICRzeXN0ZW0sICJwZXJsdGlkeS5pbmkiICk7CiAgICAgICAgICAgIHJldHVybiAkY29uZmlnX2ZpbGUgaWYgJGV4aXN0c19jb25maWdfZmlsZS0+KCRjb25maWdfZmlsZSk7CiAgICAgICAgfQogICAgfQoKICAgICMgUGxhY2UgdG8gYWRkIGN1c3RvbWl6YXRpb24gY29kZSBmb3Igb3RoZXIgc3lzdGVtcwogICAgZWxzaWYgKCAkT1NOQU1FIGVxICdPUzInICkgewogICAgfQogICAgZWxzaWYgKCAkT1NOQU1FIGVxICdNYWNPUycgKSB7CiAgICB9CiAgICBlbHNpZiAoICRPU05BTUUgZXEgJ1ZNUycgKSB7CiAgICB9CgogICAgIyBBc3N1bWUgc29tZSBraW5kIG9mIFVuaXgKICAgIGVsc2UgewoKICAgICAgICAkY29uZmlnX2ZpbGUgPSAiL3Vzci9sb2NhbC9ldGMvcGVybHRpZHlyYyI7CiAgICAgICAgcmV0dXJuICRjb25maWdfZmlsZSBpZiAkZXhpc3RzX2NvbmZpZ19maWxlLT4oJGNvbmZpZ19maWxlKTsKCiAgICAgICAgJGNvbmZpZ19maWxlID0gIi9ldGMvcGVybHRpZHlyYyI7CiAgICAgICAgcmV0dXJuICRjb25maWdfZmlsZSBpZiAkZXhpc3RzX2NvbmZpZ19maWxlLT4oJGNvbmZpZ19maWxlKTsKICAgIH0KCiAgICAjIENvdWxkbid0IGZpbmQgYSBjb25maWcgZmlsZQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgZmluZF9jb25maWdfZmlsZQoKc3ViIFdpbl9Db25maWdfTG9jcyB7CgogICAgIyBJbiBzY2FsYXIgY29udGV4dCByZXR1cm5zIHRoZSBPUyBuYW1lICg5NSA5OCBNRSBOVDMuNTEgTlQ0IDIwMDAgWFApLAogICAgIyBvciB1bmRlZiBpZiBpdHMgbm90IGEgd2luMzIgT1MuICBJbiBsaXN0IGNvbnRleHQgcmV0dXJucyBPUywgU3lzdGVtCiAgICAjIERpcmVjdG9yeSwgYW5kIEFsbCBVc2VycyBEaXJlY3RvcnkuICBBbGwgVXNlcnMgd2lsbCBiZSBlbXB0eSBvbiBhCiAgICAjIDl4L01lIGJveC4gIENvbnRyaWJ1dGVkIGJ5OiBZdmVzIE9ydG9uLgoKICAgIG15ICggJHJwZW5kaW5nX2NvbXBsYWludCwgJG9zICkgPSBAXzsKICAgIGlmICggISRvcyApIHsgJG9zID0gV2luX09TX1R5cGUoJHJwZW5kaW5nX2NvbXBsYWludCkgfQoKICAgIHJldHVybiB1bmxlc3MgJG9zOwoKICAgIG15ICRzeXN0ZW0gICA9IEVNUFRZX1NUUklORzsKICAgIG15ICRhbGx1c2VycyA9IEVNUFRZX1NUUklORzsKCiAgICBpZiAoICRvcyA9fiAvOVs1OF18TWUvICkgewogICAgICAgICRzeXN0ZW0gPSAiQzovV2luZG93cyI7CiAgICB9CiAgICBlbHNpZiAoICRvcyA9fiAvTlR8WFB8MjAwPy8gKSB7CiAgICAgICAgJHN5c3RlbSA9ICggJG9zID1+IC9YUC8gKSA/ICJDOi9XaW5kb3dzLyIgOiAiQzovV2luTlQvIjsKICAgICAgICAkYWxsdXNlcnMgPQogICAgICAgICAgKCAkb3MgPX4gL05ULyApCiAgICAgICAgICA/ICJDOi9XaW5OVC9wcm9maWxlcy9BbGwgVXNlcnMvIgogICAgICAgICAgOiAiQzovRG9jdW1lbnRzIGFuZCBTZXR0aW5ncy9BbGwgVXNlcnMvIjsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIFRoaXMgY3VycmVudGx5IHdvdWxkIG9ubHkgaGFwcGVuIG9uIGEgd2luMzJzIGNvbXB1dGVyLiAgSSBkb24ndCBoYXZlCiAgICAgICAgIyBvbmUgdG8gdGVzdCwgc28gSSBhbSB1bnN1cmUgaG93IHRvIHByb2NlZWQuICBTdWdnZXN0aW9ucyB3ZWxjb21lIQogICAgICAgICR7JHJwZW5kaW5nX2NvbXBsYWludH0gLj0KIkkgZG9udCBrbm93IGEgc2Vuc2libGUgcGxhY2UgdG8gbG9vayBmb3IgY29uZmlnIGZpbGVzIG9uIGFuICRvcyBzeXN0ZW0uXG4iOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIHJldHVybiAoICRvcywgJHN5c3RlbSwgJGFsbHVzZXJzICk7Cn0gIyMgZW5kIHN1YiBXaW5fQ29uZmlnX0xvY3MKCnN1YiBkdW1wX2NvbmZpZ19maWxlIHsKICAgIG15ICggJHJjb25maWdfc3RyaW5nLCAkY29uZmlnX2ZpbGUsICRyY29uZmlnX2ZpbGVfY2hhdHRlciApID0gQF87CiAgICBwcmludCB7KlNURE9VVH0gIiR7JHJjb25maWdfZmlsZV9jaGF0dGVyfSI7CiAgICBpZiAoJHJjb25maWdfc3RyaW5nKSB7CiAgICAgICAgbXkgQGxpbmVzID0gc3BsaXQgL14vLCAkeyRyY29uZmlnX3N0cmluZ307CiAgICAgICAgcHJpbnQgeypTVERPVVR9ICIjIER1bXAgb2YgZmlsZTogJyRjb25maWdfZmlsZSdcbiI7CiAgICAgICAgZm9yZWFjaCBteSAkbGluZSAoQGxpbmVzKSB7IHByaW50IHsqU1RET1VUfSAkbGluZSB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBwcmludCB7KlNURE9VVH0gIiMgLi4ubm8gY29uZmlnIGZpbGUgZm91bmRcbiI7CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBkdW1wX2NvbmZpZ19maWxlCgpzdWIgZmlsdGVyX3Vua25vd25fb3B0aW9ucyB7CgogICAgbXkgKAogICAgICAgICRyY29uZmlnX3N0cmluZywgJHJvcHRpb25fY2F0ZWdvcnksCiAgICAgICAgJHJleHBhbnNpb24sICAgICAkcmNvbmZpZ19maWxlX2NoYXR0ZXIKICAgICkgPSBAXzsKCiAgICAjIExvb2sgdGhyb3VnaCB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGZvciBsaW5lcyBiZWdpbm5pbmcgd2l0aCAnLS0tJyBhbmQKICAgICMgLSByZW1vdmUgdGhlIGxpbmUgaWYgdGhlIG9wdGlvbiBpcyB1bmtub3duLCBvcgogICAgIyAtIHJlbW92ZSB0aGUgZXh0cmEgZGFzaCBpZiB0aGUgb3B0aW9uIGlzIGtub3duCiAgICAjIFNlZSBnaXQgIzE0NiBmb3IgZGlzY3Vzc2lvbgoKICAgICMgR2l2ZW46CiAgICAjICAgJHJjb25maWdfc3RyaW5nID0gc3RyaW5nIHJlZiB0byBhIC5wZXJsdGlkeXJjIGNvbmZpZ3VyYXRpb24gZmlsZQogICAgIyAgICRyb3B0aW9uX2NhdGVnb3J5ID0gcmVmIHRvIGhhc2ggd2l0aCBsb25nX25hbWVzIGFzIGtleQogICAgIyAgICRyZXhwYW5zaW9uID0gcmVmIHRvIGhhc2ggd2l0aCBhYmJyZXZpYXRpb25zIGFzIGtleQogICAgIyAgICRyY29uZmlnX2ZpbGVfY2hhdHRlciA9IG1lc3NhZ2VzIGRpc3BsYXllZCBpbiAtLWR1bXAtcHJvZmlsZQogICAgIwogICAgIyBVcGRhdGU6CiAgICAjICAgJHJjb25maWdfc3RyaW5nIGFuZCAkcmNvbmZpZ19maWxlX2NoYXR0ZXIKCiAgICAjIHF1aWNrIGNoZWNrIHRvIHNraXAgbW9zdCBmaWxlcwogICAgaWYgKCAkeyRyY29uZmlnX3N0cmluZ30gIX4gL15ccyotLS1cdy9tICkgeyByZXR1cm4gfQoKICAgIG15ICRuZXdfY29uZmlnX3N0cmluZzsKICAgIG15ICRjaGFuZ2Vfbm90aWNlcyA9IEVNUFRZX1NUUklORzsKICAgIG15IEBsaW5lcyAgICAgICAgICA9IHNwbGl0IC9eLywgJHskcmNvbmZpZ19zdHJpbmd9OwogICAgZm9yZWFjaCBteSAkbGluZSAoQGxpbmVzKSB7CiAgICAgICAgY2hvbXAgJGxpbmU7CgogICAgICAgICMgbG9vayBmb3IgbGluZXMgYmVnaW5uaW5nIHdpdGggJy0tLScKICAgICAgICBpZiAoICRsaW5lICYmICRsaW5lID1+IC9eXHMqLS0tKFx3W1x3LV0qKS8gKSB7CiAgICAgICAgICAgIG15ICR3b3JkID0gJDE7CgogICAgICAgICAgICAjIGZpcnN0IGxvb2sgZm9yIGEgbG9uZyBuYW1lIG9yIGFuIGFiYnJldmlhdGlvbgogICAgICAgICAgICBteSAkaXNfa25vd24gPSAkcm9wdGlvbl9jYXRlZ29yeS0+eyR3b3JkfSB8fCAkcmV4cGFuc2lvbi0+eyR3b3JkfTsKCiAgICAgICAgICAgICMgdGhlbiBsb29rIGZvciBwcmVmaXggJ25vJyBvciAnbm8tJyBvbiBhIGxvbmcgbmFtZQogICAgICAgICAgICBpZiAoICEkaXNfa25vd24gJiYgJHdvcmQgPX4gcy9ebm8tPy8vICkgewogICAgICAgICAgICAgICAgJGlzX2tub3duID0gJHJvcHRpb25fY2F0ZWdvcnktPnskd29yZH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggISRpc19rbm93biApIHsKICAgICAgICAgICAgICAgICRjaGFuZ2Vfbm90aWNlcyAuPSAiIyAgcmVtb3ZpbmcgdW5rbm93biBvcHRpb24gbGluZSAkbGluZVxuIjsKICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkY2hhbmdlX25vdGljZXMgLj0gIiMgIGFjY2VwdGluZyBhbmQgZml4aW5nIGxpbmUgJGxpbmVcbiI7CiAgICAgICAgICAgICAgICAkbGluZSA9fiBzLy0vLzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkbmV3X2NvbmZpZ19zdHJpbmcgLj0gJGxpbmUgLiAiXG4iOwogICAgfQoKICAgIGlmICgkY2hhbmdlX25vdGljZXMpIHsKICAgICAgICAkeyRyY29uZmlnX2ZpbGVfY2hhdHRlcn0gLj0gIiMgRmlsdGVyIG9wZXJhdGlvbnM6XG4iIC4gJGNoYW5nZV9ub3RpY2VzOwogICAgICAgICR7JHJjb25maWdfc3RyaW5nfSA9ICRuZXdfY29uZmlnX3N0cmluZzsKICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGZpbHRlcl91bmtub3duX29wdGlvbnMKCnN1YiByZWFkX2NvbmZpZ19maWxlIHsKCiAgICBteSAoICRyY29uZmlnX3N0cmluZywgJGNvbmZpZ19maWxlLCAkcmV4cGFuc2lvbiApID0gQF87CgogICAgIyBSZWFkIGFuZCBwcm9jZXNzIHRoZSBjb250ZW50cyBvZiBhIHBlcmx0aWR5cmMgY29tbWFuZCBmaWxlCgogICAgIyBHaXZlbjoKICAgICMgICAkcmNvbmZpZ19zdHJpbmcgPSByZWYgdG8gdGhlIGZpbGUgYXMgYSBzdHJpbmcKICAgICMgICAkY29uZmlnX2ZpbGUgPSBuYW1lIG9mIHRoZSBmaWxlLCBmb3IgZXJyb3IgcmVwb3J0aW5nCiAgICAjICAgJHJleHBhbnNpb24gPSByZWYgdG8gaGFzaCBvZiBhYmJyZXZpYXRpb25zOyBpZiB0aGlzIGNvbmZpZyBmaWxlIGRlZmluZXMKICAgICMgICAgICAgICAgICAgICAgIGFueSBhYmJyZXZpYXRpb25zIHRoZXkgd2lsbCBiZSBhZGRlZCB0byBpdAoKICAgICMgUmV0dXJuOgogICAgIyAgIFxAY29uZmlnX2xpc3QgPSByZWYgdG8gZmluYWwgcGFyYW1ldGVycyBhbmQgdmFsdWVzIHdoaWNoIHdpbGwgYmUKICAgICMgICAgIHBsYWNlZCBpbiBAQVJHViBmb3IgcHJvY2Vzc2luZyBieSBHZXRPcHRpb25zCiAgICAjICAgJGRlYXRoX21lc3NhZ2UgPSBlcnJvciBtZXNzYWdlIHJldHVybmVkIGlmIGEgZmF0YWwgZXJyb3Igb2NjdXJzCiAgICBteSBAY29uZmlnX2xpc3QgPSAoKTsKCiAgICAjIHJlbW92ZSBzaWRlIGNvbW1lbnRzIGFuZCBqb2luIG11bHRpbGluZSBxdW90ZXMKICAgIG15ICggJHJsaW5lX2hhc2gsICRkZWF0aF9tZXNzYWdlICkgPQogICAgICBzdHJpcF9jb21tZW50c19hbmRfam9pbl9xdW90ZXMoICRyY29uZmlnX3N0cmluZywgJGNvbmZpZ19maWxlICk7CgogICAgIyBmaWxlIGlzIGJhZCBpZiBub24tZW1wdHkgJGRlYXRoX21lc3NhZ2UgaXMgcmV0dXJuZWQKICAgIGlmICgkZGVhdGhfbWVzc2FnZSkgewogICAgICAgIHJldHVybiAoIFxAY29uZmlnX2xpc3QsICRkZWF0aF9tZXNzYWdlICk7CiAgICB9CgogICAgbXkgJG5hbWUgPSB1bmRlZjsKICAgIG15ICRvcGVuaW5nX2JyYWNlX2xpbmU7CiAgICBmb3JlYWNoIG15ICRpdGVtICggQHskcmxpbmVfaGFzaH0gKSB7CiAgICAgICAgbXkgJGxpbmUgICAgPSAkaXRlbS0+e2xpbmV9OwogICAgICAgIG15ICRsaW5lX25vID0gJGl0ZW0tPntsaW5lX25vfTsKICAgICAgICAkbGluZSA9fiBzL15ccysvLzsKICAgICAgICAkbGluZSA9fiBzL1xzKyQvLzsKICAgICAgICBuZXh0IHVubGVzcyAoIGxlbmd0aCgkbGluZSkgKTsKCiAgICAgICAgbXkgJGJvZHkgPSAkbGluZTsKCiAgICAgICAgIyBMb29rIGZvciBjb21wbGV0ZSBvciBwYXJ0aWFsIGFiYnJldmlhdGlvbiBkZWZpbml0aW9uIG9mIHRoZSBmb3JtCiAgICAgICAgIyAgICAgbmFtZSB7IGJvZHkgfSAgIG9yICBuYW1lIHsgICBvciAgICBuYW1lIHsgYm9keQogICAgICAgICMgU2VlIHJ1bGVzIGluIHBlcmx0aWR5J3MgcGVybGRvYyBwYWdlCiAgICAgICAgIyBTZWN0aW9uOiBPdGhlciBDb250cm9scyAtIENyZWF0aW5nIGEgbmV3IGFiYnJldmlhdGlvbgogICAgICAgIGlmICggJGxpbmUgPX4gL14oPzogKFx3KykgXHMqIFx7ICkgKC4qKT8gJC94ICkgewogICAgICAgICAgICAoICRuYW1lLCAkYm9keSApID0gKCAkMSwgJDIgKTsKCiAgICAgICAgICAgICMgQ2Fubm90IHN0YXJ0IG5ldyBhYmJyZXZpYXRpb24gdW5sZXNzIG9sZCBhYmJyZXZpYXRpb24gaXMgY29tcGxldGUKICAgICAgICAgICAgbGFzdCBpZiAoJG9wZW5pbmdfYnJhY2VfbGluZSk7CgogICAgICAgICAgICAkb3BlbmluZ19icmFjZV9saW5lID0gJGxpbmVfbm8gdW5sZXNzICggJGJvZHkgJiYgJGJvZHkgPX4gcy9cfSQvLyApOwoKICAgICAgICAgICAgIyBoYW5kbGUgYSBuZXcgYWxpYXMgZGVmaW5pdGlvbgogICAgICAgICAgICBpZiAoICRyZXhwYW5zaW9uLT57JG5hbWV9ICkgewogICAgICAgICAgICAgICAgbG9jYWwgJExJU1RfU0VQQVJBVE9SID0gJykoJzsKICAgICAgICAgICAgICAgIG15IEBuYW1lcyA9IHNvcnQga2V5cyAleyRyZXhwYW5zaW9ufTsKICAgICAgICAgICAgICAgICRkZWF0aF9tZXNzYWdlID0KICAgICAgICAgICAgICAgICAgICAiSGVyZSBpcyBhIGxpc3Qgb2YgYWxsIGluc3RhbGxlZCBhbGlhc2VzXG4oQG5hbWVzKVxuIgogICAgICAgICAgICAgICAgICAuICJBdHRlbXB0aW5nIHRvIHJlZGVmaW5lIGFsaWFzICgkbmFtZSkgaW4gY29uZmlnIGZpbGUgJGNvbmZpZ19maWxlIGxpbmUgJElOUFVUX0xJTkVfTlVNQkVSXG4iOwogICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcmV4cGFuc2lvbi0+eyRuYW1lfSA9IFtdOwogICAgICAgIH0KCiAgICAgICAgIyBsZWFkaW5nIG9wZW5pbmcgYnJhY2VzIG5vdCBhbGxvd2VkCiAgICAgICAgZWxzaWYgKCAkbGluZSA9fiAvXnsvICkgewogICAgICAgICAgICAkb3BlbmluZ19icmFjZV9saW5lID0gdW5kZWY7CiAgICAgICAgICAgICRkZWF0aF9tZXNzYWdlID0KICAgICAgICAgICAgICAiVW5leHBlY3RlZCAneycgYXQgbGluZSAkbGluZV9ubyBpbiBjb25maWcgZmlsZSAnJGNvbmZpZ19maWxlJ1xuIjsKICAgICAgICAgICAgbGFzdDsKICAgICAgICB9CgogICAgICAgICMgTG9vayBmb3IgYWJicmV2aWF0aW9uIGNsb3Npbmc6ICAgIGJvZHkgfSAgIG9yICAgIH0KICAgICAgICBlbHNpZiAoICRsaW5lID1+IC9eKC4qKT9cfSQvICkgewogICAgICAgICAgICAkYm9keSA9ICQxOwogICAgICAgICAgICBpZiAoJG9wZW5pbmdfYnJhY2VfbGluZSkgewogICAgICAgICAgICAgICAgJG9wZW5pbmdfYnJhY2VfbGluZSA9IHVuZGVmOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJGRlYXRoX21lc3NhZ2UgPQoiVW5leHBlY3RlZCAnfScgYXQgbGluZSAkbGluZV9ubyBpbiBjb25maWcgZmlsZSAnJGNvbmZpZ19maWxlJ1xuIjsKICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICMgbm8gYWJicmV2aWF0aW9ucyB0byB1bnRhbmdsZQogICAgICAgIH0KCiAgICAgICAgIyBOb3cgc3RvcmUgYW55IHBhcmFtZXRlcnMKICAgICAgICBpZiAoJGJvZHkpIHsKCiAgICAgICAgICAgIG15ICggJHJib2R5X3BhcnRzLCAkbXNnICkgPSBwYXJzZV9hcmdzKCRib2R5KTsKICAgICAgICAgICAgaWYgKCRtc2cpIHsKICAgICAgICAgICAgICAgICRkZWF0aF9tZXNzYWdlID0gPDxFT007CkVycm9yIHJlYWRpbmcgZmlsZSAnJGNvbmZpZ19maWxlJyBhdCBsaW5lIG51bWJlciAkbGluZV9uby4KJG1zZwpQbGVhc2UgZml4IHRoaXMgbGluZSBvciB1c2UgLW5wcm8gdG8gYXZvaWQgcmVhZGluZyB0aGlzIGZpbGUKRU9NCiAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJG5hbWUpIHsKCiAgICAgICAgICAgICAgICAjIHJlbW92ZSBsZWFkaW5nIGRhc2hlcyBpZiB0aGlzIGlzIGFuIGFsaWFzCiAgICAgICAgICAgICAgICBmb3JlYWNoICggQHskcmJvZHlfcGFydHN9ICkgeyBzL15cLSsvLzsgfQogICAgICAgICAgICAgICAgcHVzaCBAeyAkcmV4cGFuc2lvbi0+eyRuYW1lfSB9LCBAeyRyYm9keV9wYXJ0c307CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBwdXNoKCBAY29uZmlnX2xpc3QsIEB7JHJib2R5X3BhcnRzfSApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmICgkb3BlbmluZ19icmFjZV9saW5lKSB7CiAgICAgICAgJGRlYXRoX21lc3NhZ2UgPQoiRGlkbid0IHNlZSBhICd9JyB0byBtYXRjaCB0aGUgJ3snIGF0IGxpbmUgJG9wZW5pbmdfYnJhY2VfbGluZSBpbiBjb25maWcgZmlsZSAnJGNvbmZpZ19maWxlJ1xuIjsKICAgIH0KICAgIHJldHVybiAoIFxAY29uZmlnX2xpc3QsICRkZWF0aF9tZXNzYWdlICk7Cn0gIyMgZW5kIHN1YiByZWFkX2NvbmZpZ19maWxlCgpzdWIgc3RyaXBfY29tbWVudHNfYW5kX2pvaW5fcXVvdGVzIHsKCiAgICBteSAoICRyY29uZmlnX3N0cmluZywgJGNvbmZpZ19maWxlICkgPSBAXzsKCiAgICAjIFRhc2tzOgogICAgIyAxLiBTdHJpcCBjb21tZW50cyBmcm9tIC5wZXJsdGlkeXJjIGxpbmVzCiAgICAjIDIuIEpvaW4gbGluZXMgd2hpY2ggYXJlIHNwYW5uZWQgYnkgYSBxdW90ZQoKICAgICMgR2l2ZW46CiAgICAjICAgJHJjb25maWdfc3RyaW5nID0gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQogICAgIyAgICRjb25maWdfZmlsZSA9IGZpbGVuYW1lLCBmb3IgZXJyb3IgbWVzc2FnZXMKICAgICMgUmV0dXJuOgogICAgIyAgICRybGluZV9oYXNoID0gaGFzaCB3aXRoIG1vZGlmaWVkIGxpbmVzIGFuZCB0aGVpciBpbnB1dCBudW1iZXJzCiAgICAjICAgJG1zZyA9IGFueSBlcnJvciBtZXNzYWdlOyBjb2RlIHdpbGwgZGllIG9uIGFueSBtZXNzYWdlLgoKICAgICMgcmV0dXJuIHZhcmlhYmxlcwogICAgbXkgJG1zZyAgICAgICAgPSBFTVBUWV9TVFJJTkc7CiAgICBteSAkcmxpbmVfaGFzaCA9IFtdOwoKICAgICMgcXVvdGUgc3RhdGUgdmFyaWFibGVzCiAgICBteSAkcXVvdGVfY2hhciAgICAgICAgICA9IEVNUFRZX1NUUklORzsKICAgIG15ICRxdW90ZV9zdGFydF9saW5lICAgID0gRU1QVFlfU1RSSU5HOwogICAgbXkgJHF1b3RlX3N0YXJ0X2xpbmVfbm8gPSAtMTsKICAgIG15ICRpbl9zdHJpbmcgICAgICAgICAgID0gRU1QVFlfU1RSSU5HOwogICAgbXkgJG91dF9zdHJpbmcgICAgICAgICAgPSBFTVBUWV9TVFJJTkc7CgogICAgbXkgQGxpbmVzICAgPSBzcGxpdCAvXi8sICR7JHJjb25maWdfc3RyaW5nfTsKICAgIG15ICRsaW5lX25vID0gMDsKCiAgICAjIGxvb3Agb3ZlciBsaW5lcwogICAgZm9yZWFjaCBteSAkbGluZSAoQGxpbmVzKSB7CiAgICAgICAgJGxpbmVfbm8rKzsKICAgICAgICAkbGluZSA9fiBzL15ccysvLzsKICAgICAgICAkbGluZSA9fiBzL1xzKyQvLzsKICAgICAgICBuZXh0IHVubGVzcyAoIGxlbmd0aCgkbGluZSkgKTsKCiAgICAgICAgaWYgKCAhJHF1b3RlX2NoYXIgKSB7CgogICAgICAgICAgICAjIHNraXAgYSBmdWxsLWxpbmUgY29tbWVudAogICAgICAgICAgICBpZiAoIHN1YnN0ciggJGxpbmUsIDAsIDEgKSBlcSAnIycgKSB7CiAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICB9CiAgICAgICAgICAgICRpbl9zdHJpbmcgID0gJGxpbmU7CiAgICAgICAgICAgICRvdXRfc3RyaW5nID0gRU1QVFlfU1RSSU5HOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgdHJlYXQgcHJldmlvdXMgbmV3bGluZSBhcyBhIHNwYWNlCiAgICAgICAgICAgICRpbl9zdHJpbmcgPSBTUEFDRSAuICRsaW5lOwogICAgICAgIH0KCiAgICAgICAgIyBsb29wIG92ZXIgc3RyaW5nIGNoYXJhY3RlcnMKICAgICAgICAjICAkaW5fc3RyaW5nICA9IHRoZSBpbnB1dCBzdHJpbmcKICAgICAgICAjICAkb3V0X3N0cmluZyA9IHRoZSBvdXRwdXQgc3RyaW5nCiAgICAgICAgIyAgJHF1b3RlX2NoYXIgPSBxdW90ZSBjaGFyYWN0ZXIgYmVpbmcgc291Z2h0CiAgICAgICAgd2hpbGUgKDEpIHsKCiAgICAgICAgICAgICMgYWNjdW11bGF0aW5nIGNoYXJhY3RlcnMgbm90IGluIHF1b3RlCiAgICAgICAgICAgIGlmICggISRxdW90ZV9jaGFyICkgewoKICAgICAgICAgICAgICAgIGlmICggJGluX3N0cmluZyA9fiAvXEcoW1wiXCddKS9nYyApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBzdGFydGluZyBuZXcgcXVvdGUuLgogICAgICAgICAgICAgICAgICAgICRvdXRfc3RyaW5nIC49ICQxOwogICAgICAgICAgICAgICAgICAgICRxdW90ZV9jaGFyICAgICAgICAgID0gJDE7CiAgICAgICAgICAgICAgICAgICAgJHF1b3RlX3N0YXJ0X2xpbmVfbm8gPSAkbGluZV9ubzsKICAgICAgICAgICAgICAgICAgICAkcXVvdGVfc3RhcnRfbGluZSAgICA9ICRsaW5lOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKCAkaW5fc3RyaW5nID1+IC9cRyMvZ2MgKSB7CgogICAgICAgICAgICAgICAgICAgICMgQSBzcGFjZSBpcyByZXF1aXJlZCBiZWZvcmUgdGhlICMgb2YgYSBzaWRlIGNvbW1lbnQKICAgICAgICAgICAgICAgICAgICAjIFRoaXMgYWxsb3dzIHNvbWV0aGluZyBsaWtlOgogICAgICAgICAgICAgICAgICAgICMgICAgLXNiY3A9IwogICAgICAgICAgICAgICAgICAgICMgT3RoZXJ3aXNlLCBpdCB3b3VsZCBoYXZlIHRvIGJlIHF1b3RlZDoKICAgICAgICAgICAgICAgICAgICAjICAgIC1zYmNwPScjJwogICAgICAgICAgICAgICAgICAgIGlmICggIWxlbmd0aCgkb3V0X3N0cmluZykgfHwgJG91dF9zdHJpbmcgPX4gcy9ccyskLy8gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRvdXRfc3RyaW5nIC49ICcjJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJGluX3N0cmluZyA9fiAvXEcoW15cI1wnXCJdKykvZ2MgKSB7CgogICAgICAgICAgICAgICAgICAgICMgbmVpdGhlciBxdW90ZSBub3Igc2lkZSBjb21tZW50CiAgICAgICAgICAgICAgICAgICAgJG91dF9zdHJpbmcgLj0gJDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgIyBlbmQgb2YgbGluZQogICAgICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgbG9va2luZyBmb3IgZW5kaW5nIHF1b3RlIGNoYXJhY3RlcgogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGlmICggJGluX3N0cmluZyA9fiAvXEcoJHF1b3RlX2NoYXIpL2djICkgewoKICAgICAgICAgICAgICAgICAgICAjIGVuZCBvZiBxdW90ZQogICAgICAgICAgICAgICAgICAgICRvdXRfc3RyaW5nIC49ICQxOwogICAgICAgICAgICAgICAgICAgICRxdW90ZV9jaGFyID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKCAkaW5fc3RyaW5nID1+IC9cRyhbXiRxdW90ZV9jaGFyXSspL2djICkgewoKICAgICAgICAgICAgICAgICAgICAjIGFjY3VtdWxhdGUgcXVvdGVkIHRleHQKICAgICAgICAgICAgICAgICAgICAkb3V0X3N0cmluZyAuPSAkMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAjIGVuZCBvZiBsaW5lCiAgICAgICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gIyMgZW5kIHdoaWxlICgxKQoKICAgICAgICBpZiAoICEkcXVvdGVfY2hhciApIHsKICAgICAgICAgICAgcHVzaCBAeyRybGluZV9oYXNofSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBsaW5lICAgID0+ICRvdXRfc3RyaW5nLAogICAgICAgICAgICAgICAgbGluZV9ubyA9PiAkbGluZV9ubywKICAgICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICB9ICMjIGVuZCBsb29wIG92ZXIgbGluZXMKCiAgICBpZiAoJHF1b3RlX2NoYXIpIHsKICAgICAgICBteSAkbWF4X2xlbiA9IDgwOwogICAgICAgIGlmICggbGVuZ3RoKCRxdW90ZV9zdGFydF9saW5lKSA+ICRtYXhfbGVuICkgewogICAgICAgICAgICAkcXVvdGVfc3RhcnRfbGluZSA9CiAgICAgICAgICAgICAgc3Vic3RyKCAkcXVvdGVfc3RhcnRfbGluZSwgMCwgJG1heF9sZW4gLSAzICkgLiAnLi4uJzsKICAgICAgICB9CiAgICAgICAgJG1zZyA9IDw8RU9NOwpFcnJvcjogaGl0IEVPRiByZWFkaW5nIGZpbGUgJyRjb25maWdfZmlsZScgbG9va2luZyBmb3IgZW5kIG9mIHF1b3RlZCB0ZXh0CndoaWNoIHN0YXJ0ZWQgYXQgbGluZSAkcXVvdGVfc3RhcnRfbGluZV9ubyB3aXRoIHF1b3RlIGNoYXJhY3RlciA8JHF1b3RlX2NoYXI+OgokcXVvdGVfc3RhcnRfbGluZQpQbGVhc2UgZml4IG9yIHVzZSAtbnBybyB0byBhdm9pZCByZWFkaW5nIHRoaXMgZmlsZQpFT00KICAgIH0KICAgIHJldHVybiAoICRybGluZV9oYXNoLCAkbXNnICk7Cn0gIyMgZW5kIHN1YiBzdHJpcF9jb21tZW50c19hbmRfam9pbl9xdW90ZXMKCnN1YiBwYXJzZV9hcmdzIHsKCiAgICAjIFBhcnNlIGEgY29tbWFuZCBzdHJpbmcgY29udGFpbmluZyBtdWx0aXBsZSBzdHJpbmcgd2l0aCBwb3NzaWJsZQogICAgIyBxdW90ZXMsIGludG8gaW5kaXZpZHVhbCBjb21tYW5kcy4gIEl0IG1pZ2h0IGxvb2sgbGlrZSB0aGlzLCBmb3IgZXhhbXBsZToKICAgICMKICAgICMgICAgLXdiYT0iICsgLSAiICAtc29tZS10aGluZyAtd2JiPScuICYmIHx8JwogICAgIwogICAgIyBUaGVyZSBpcyBubyBuZWVkLCBhdCBwcmVzZW50LCB0byBoYW5kbGUgZXNjYXBlZCBxdW90ZSBjaGFyYWN0ZXJzLgogICAgIyAoVGhleSBhcmUgbm90IHBlcmx0aWR5IHRva2Vucywgc28gbmVlZG4ndCBiZSBpbiBzdHJpbmdzKS4KCiAgICBteSAoJGJvZHkpICAgICA9IEBfOwogICAgbXkgQGJvZHlfcGFydHMgPSAoKTsKICAgIG15ICRxdW90ZV9jaGFyID0gRU1QVFlfU1RSSU5HOwogICAgbXkgJHBhcnQgICAgICAgPSBFTVBUWV9TVFJJTkc7CiAgICBteSAkbXNnICAgICAgICA9IEVNUFRZX1NUUklORzsKCiAgICAjIENoZWNrIGZvciBleHRlcm5hbCBjYWxsIHdpdGggdW5kZWZpbmVkICRib2R5IC0gYWRkZWQgdG8gZml4CiAgICAjIGdpdGh1YiBpc3N1ZSBQZXJsLVRpZHktU3dlZXRlbmVkIGlzc3VlICMyMwogICAgaWYgKCAhZGVmaW5lZCgkYm9keSkgKSB7ICRib2R5ID0gRU1QVFlfU1RSSU5HIH0KCiAgICB3aGlsZSAoMSkgewoKICAgICAgICAjIGxvb2tpbmcgZm9yIGVuZGluZyBxdW90ZSBjaGFyYWN0ZXIKICAgICAgICBpZiAoJHF1b3RlX2NoYXIpIHsKICAgICAgICAgICAgaWYgKCAkYm9keSA9fiAvXEcoJHF1b3RlX2NoYXIpL2djICkgewogICAgICAgICAgICAgICAgJHF1b3RlX2NoYXIgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkYm9keSA9fiAvXEcoLikvZ2MgKSB7CiAgICAgICAgICAgICAgICAkcGFydCAuPSAkMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBlcnJvci4ud2UgcmVhY2hlZCB0aGUgZW5kIHdpdGhvdXQgc2VlaW5nIHRoZSBlbmRpbmcgcXVvdGUgY2hhcgogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGlmICggbGVuZ3RoKCRwYXJ0KSApIHsgcHVzaCBAYm9keV9wYXJ0cywgJHBhcnQ7IH0KICAgICAgICAgICAgICAgICRtc2cgPSA8PEVPTTsKRGlkIG5vdCBzZWUgZW5kaW5nIHF1b3RlIGNoYXJhY3RlciA8JHF1b3RlX2NoYXI+IGluIHRoaXMgdGV4dDoKJGJvZHkKRU9NCiAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGFjY3VtdWxhdGluZyBjaGFyYWN0ZXJzIGFuZCBsb29raW5nIGZvciBzdGFydCBvZiBhIHF1b3RlZCBzdHJpbmcKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKCAkYm9keSA9fiAvXEcoW1wiXCddKS9nYyApIHsKICAgICAgICAgICAgICAgICRxdW90ZV9jaGFyID0gJDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkYm9keSA9fiAvXEcoXHMrKS9nYyApIHsKICAgICAgICAgICAgICAgIGlmICggbGVuZ3RoKCRwYXJ0KSApIHsgcHVzaCBAYm9keV9wYXJ0cywgJHBhcnQ7IH0KICAgICAgICAgICAgICAgICRwYXJ0ID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJGJvZHkgPX4gL1xHKC4pL2djICkgewogICAgICAgICAgICAgICAgJHBhcnQgLj0gJDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoIGxlbmd0aCgkcGFydCkgKSB7IHB1c2ggQGJvZHlfcGFydHMsICRwYXJ0OyB9CiAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSAjIyBlbmQgd2hpbGUgKDEpCiAgICByZXR1cm4gKCBcQGJvZHlfcGFydHMsICRtc2cgKTsKfSAjIyBlbmQgc3ViIHBhcnNlX2FyZ3MKCnN1YiBkdW1wX2xvbmdfbmFtZXMgewoKICAgIG15IEBuYW1lcyA9IEBfOwogICAgcHJpbnQgeypTVERPVVR9IDw8RU9NOwojIENvbW1hbmQgbGluZSBsb25nIG5hbWVzIChwYXNzZWQgdG8gR2V0T3B0aW9ucykKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgaGVyZSBpcyBhIHN1bW1hcnkgb2YgdGhlIEdldG9wdCBjb2RlczoKIyA8bm9uZT4gZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudAojID1zIHRha2VzIGEgbWFuZGF0b3J5IHN0cmluZwojIDpzIHRha2VzIGFuIG9wdGlvbmFsIHN0cmluZwojID1pIHRha2VzIGEgbWFuZGF0b3J5IGludGVnZXIKIyA6aSB0YWtlcyBhbiBvcHRpb25hbCBpbnRlZ2VyCiMgISBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50IGFuZCBtYXkgYmUgbmVnYXRlZAojICBpLmUuLCAtZm9vIGFuZCAtbm9mb28gYXJlIGFsbG93ZWQKIyBhIGRvdWJsZSBkYXNoIHNpZ25hbHMgdGhlIGVuZCBvZiB0aGUgb3B0aW9ucyBsaXN0CiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkVPTQoKICAgIGZvcmVhY2ggbXkgJG5hbWUgKCBzb3J0IEBuYW1lcyApIHsgcHJpbnQgeypTVERPVVR9ICIkbmFtZVxuIiB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBkdW1wX2xvbmdfbmFtZXMKCnN1YiBkdW1wX2ludGVnZXJfb3B0aW9uX3JhbmdlIHsKICAgIG15ICgkcmludGVnZXJfb3B0aW9uX3JhbmdlKSA9IEBfOwogICAgcHJpbnQgeypTVERPVVR9ICJPcHRpb24sIG1pbiwgbWF4LCBkZWZhdWx0XG4iOwogICAgZm9yZWFjaCBteSAka2V5ICggc29ydCBrZXlzICV7JHJpbnRlZ2VyX29wdGlvbl9yYW5nZX0gKSB7CiAgICAgICAgbXkgKCAkbWluLCAkbWF4LCAkZGVmYXVsdCApID0gQHsgJHJpbnRlZ2VyX29wdGlvbl9yYW5nZS0+eyRrZXl9IH07CiAgICAgICAgZm9yZWFjaCAoICRtaW4sICRtYXgsICRkZWZhdWx0ICkgewogICAgICAgICAgICAkXyA9ICd1bmRlZicgdW5sZXNzIGRlZmluZWQoJF8pOwogICAgICAgIH0KICAgICAgICBwcmludCB7KlNURE9VVH0gIiRrZXksICRtaW4sICRtYXgsICRkZWZhdWx0XG4iOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgZHVtcF9pbnRlZ2VyX29wdGlvbl9yYW5nZQoKc3ViIGR1bXBfZGVmYXVsdHMgewogICAgbXkgQGRlZmF1bHRzID0gQF87CiAgICBwcmludCB7KlNURE9VVH0gIkRlZmF1bHQgY29tbWFuZCBsaW5lIG9wdGlvbnM6XG4iOwogICAgZm9yZWFjaCBteSAkbGluZSAoIHNvcnQgQGRlZmF1bHRzICkgeyBwcmludCB7KlNURE9VVH0gIiRsaW5lXG4iIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGR1bXBfZGVmYXVsdHMKCnN1YiByZWFkYWJsZV9vcHRpb25zIHsKCiAgICAjIHJldHVybiBvcHRpb25zIGZvciB0aGlzIHJ1biBhcyBhIHN0cmluZyB3aGljaCBjb3VsZCBiZQogICAgIyBwdXQgaW4gYSBwZXJsdGlkeXJjIGZpbGUKICAgIG15ICggJHJPcHRzLCAkcm9wdGlvbl9zdHJpbmcgKSA9IEBfOwogICAgbXkgJUdldG9wdF9mbGFnczsKICAgIG15ICRyR2V0b3B0X2ZsYWdzICAgID0gXCVHZXRvcHRfZmxhZ3M7CiAgICBteSAkcmVhZGFibGVfb3B0aW9ucyA9ICIjIEZpbmFsIHBhcmFtZXRlciBzZXQgZm9yIHRoaXMgcnVuLlxuIjsKICAgICRyZWFkYWJsZV9vcHRpb25zIC49CiAgICAgICIjIFNlZSB1dGlsaXR5ICdwZXJsdGlkeXJjX2R1bXAucGwnIGZvciBuaWNlciBmb3JtYXR0aW5nLlxuIjsKICAgIGZvcmVhY2ggbXkgJG9wdCAoIEB7JHJvcHRpb25fc3RyaW5nfSApIHsKICAgICAgICBteSAkZmxhZyA9IEVNUFRZX1NUUklORzsKICAgICAgICBpZiAoICRvcHQgPX4gLyguKikoIXw9LiopJC8gKSB7CiAgICAgICAgICAgICRvcHQgID0gJDE7CiAgICAgICAgICAgICRmbGFnID0gJDI7CiAgICAgICAgfQogICAgICAgIGlmICggZGVmaW5lZCggJHJPcHRzLT57JG9wdH0gKSApIHsKICAgICAgICAgICAgJHJHZXRvcHRfZmxhZ3MtPnskb3B0fSA9ICRmbGFnOwogICAgICAgIH0KICAgIH0KICAgIGZvcmVhY2ggbXkgJGtleSAoIHNvcnQga2V5cyAleyRyT3B0c30gKSB7CiAgICAgICAgbXkgJGZsYWcgICA9ICRyR2V0b3B0X2ZsYWdzLT57JGtleX07CiAgICAgICAgbXkgJHZhbHVlICA9ICRyT3B0cy0+eyRrZXl9OwogICAgICAgIG15ICRwcmVmaXggPSAnLS0nOwogICAgICAgIG15ICRzdWZmaXggPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgaWYgKCRmbGFnKSB7CiAgICAgICAgICAgIGlmICggJGZsYWcgPX4gL149LyApIHsKICAgICAgICAgICAgICAgIGlmICggJHZhbHVlICF+IC9eXGQrJC8gKSB7ICR2YWx1ZSA9ICciJyAuICR2YWx1ZSAuICciJyB9CiAgICAgICAgICAgICAgICAkc3VmZml4ID0gIj0iIC4gJHZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJGZsYWcgPX4gL14hLyApIHsKICAgICAgICAgICAgICAgICRwcmVmaXggLj0gIm5vIiB1bmxlc3MgKCR2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyBzaG91bGRuJ3QgaGFwcGVuCiAgICAgICAgICAgICAgICAkcmVhZGFibGVfb3B0aW9ucyAuPQogICAgICAgICAgICAgICAgICAiIyBFUlJPUiBpbiBkdW1wX29wdGlvbnM6IHVucmVjb2duaXplZCBmbGFnICRmbGFnIGZvciAka2V5XG4iOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRyZWFkYWJsZV9vcHRpb25zIC49ICRwcmVmaXggLiAka2V5IC4gJHN1ZmZpeCAuICJcbiI7CiAgICB9CiAgICByZXR1cm4gJHJlYWRhYmxlX29wdGlvbnM7Cn0gIyMgZW5kIHN1YiByZWFkYWJsZV9vcHRpb25zCgpzdWIgc2hvd192ZXJzaW9uIHsKICAgIHByaW50IHsqU1RET1VUfSA8PCJFT00iOwpUaGlzIGlzIHBlcmx0aWR5LCB2JFZFUlNJT04KCkNvcHlyaWdodCAyMDAwLTIwMjUgYnkgU3RldmUgSGFuY29jawoKUGVybHRpZHkgaXMgZnJlZSBzb2Z0d2FyZSBhbmQgbWF5IGJlIGNvcGllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB3aGljaCBpcyBpbmNsdWRlZCBpbiB0aGUgZGlzdHJpYnV0aW9uIGZpbGVzLgoKRG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgdXNpbmcgJ21hbiBwZXJsdGlkeScKb3IgYXQgR2l0SHViICAgICAgaHR0cHM6Ly9wZXJsdGlkeS5naXRodWIuaW8vcGVybHRpZHkvCm9yIGF0IG1ldGFjcGFuICAgIGh0dHBzOi8vbWV0YWNwYW4ub3JnL3BvZC9kaXN0cmlidXRpb24vUGVybC1UaWR5L2Jpbi9wZXJsdGlkeQpvciBhdCBTb3VyY2Vmb3JnZSBodHRwczovL3Blcmx0aWR5LnNvdXJjZWZvcmdlLm5ldApFT00KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHNob3dfdmVyc2lvbgoKc3ViIHVzYWdlIHsKCiAgICBwcmludCB7KlNURE9VVH0gPDxFT0Y7ClRoaXMgaXMgcGVybHRpZHkgdmVyc2lvbiAkVkVSU0lPTiwgYSBwZXJsIHNjcmlwdCBpbmRlbnRlci4gIFVzYWdlOgoKICAgIHBlcmx0aWR5IFsgb3B0aW9ucyBdIGZpbGUxIGZpbGUyIGZpbGUzIC4uLgogICAgICAgICAgICAob3V0cHV0IGdvZXMgdG8gZmlsZTEudGR5LCBmaWxlMi50ZHksIGZpbGUzLnRkeSwgLi4uKQogICAgcGVybHRpZHkgWyBvcHRpb25zIF0gZmlsZTEgLW8gb3V0ZmlsZQogICAgcGVybHRpZHkgWyBvcHRpb25zIF0gZmlsZTEgLXN0ID5vdXRmaWxlCiAgICBwZXJsdGlkeSBbIG9wdGlvbnMgXSA8aW5maWxlID5vdXRmaWxlCgpPcHRpb25zIGhhdmUgc2hvcnQgYW5kIGxvbmcgZm9ybXMuIFNob3J0IGZvcm1zIGFyZSBzaG93bjsgc2VlCm1hbiBwYWdlcyBmb3IgbG9uZyBmb3Jtcy4gIE5vdGU6ICc9cycgaW5kaWNhdGVzIGEgcmVxdWlyZWQgc3RyaW5nLAphbmQgJz1uJyBpbmRpY2F0ZXMgYSByZXF1aXJlZCBpbnRlZ2VyLgoKSS9PIGNvbnRyb2wKIC1oICAgICAgc2hvdyB0aGlzIGhlbHAKIC1vPWZpbGUgbmFtZSBvZiB0aGUgb3V0cHV0IGZpbGUgKG9ubHkgaWYgc2luZ2xlIGlucHV0IGZpbGUpCiAtb2V4dD1zIGNoYW5nZSBvdXRwdXQgZXh0ZW5zaW9uIGZyb20gJ3RkeScgdG8gcwogLW9wYXRoPXBhdGggIGNoYW5nZSBwYXRoIHRvIGJlICdwYXRoJyBmb3Igb3V0cHV0IGZpbGVzCiAtYiAgICAgIGJhY2t1cCBvcmlnaW5hbCB0byAuYmFrIGFuZCBtb2RpZnkgZmlsZSBpbi1wbGFjZQogLWJleHQ9cyBjaGFuZ2UgZGVmYXVsdCBiYWNrdXAgZXh0ZW5zaW9uIGZyb20gJ2JhaycgdG8gcwogLXEgICAgICBkZWFjdGl2YXRlIGVycm9yIG1lc3NhZ2VzIChmb3IgcnVubmluZyB1bmRlciBlZGl0b3IpCiAtdyAgICAgIGluY2x1ZGUgbm9uLWNyaXRpY2FsIHdhcm5pbmcgbWVzc2FnZXMgaW4gdGhlIC5FUlIgZXJyb3Igb3V0cHV0CiAtbG9nICAgIHNhdmUgLkxPRyBmaWxlLCB3aGljaCBoYXMgdXNlZnVsIGRpYWdub3N0aWNzCiAtZiAgICAgIGZvcmNlIHBlcmx0aWR5IHRvIHJlYWQgYSBiaW5hcnkgZmlsZQogLWcgICAgICBsaWtlIC1sb2cgYnV0IHdyaXRlcyBtb3JlIGRldGFpbGVkIC5MT0cgZmlsZSwgZm9yIGRlYnVnZ2luZyBzY3JpcHRzCiAtb3B0ICAgIHdyaXRlIHRoZSBzZXQgb2Ygb3B0aW9ucyBhY3R1YWxseSB1c2VkIHRvIGEgLkxPRyBmaWxlCiAtbnBybyAgIGlnbm9yZSAucGVybHRpZHlyYyBjb25maWd1cmF0aW9uIGNvbW1hbmQgZmlsZQogLXBybz1maWxlICAgcmVhZCBjb25maWd1cmF0aW9uIGNvbW1hbmRzIGZyb20gZmlsZSBpbnN0ZWFkIG9mIC5wZXJsdGlkeXJjCiAtc3QgICAgIHNlbmQgb3V0cHV0IHRvIHN0YW5kYXJkIG91dHB1dCwgU1RET1VUCiAtc2UgICAgIHNlbmQgYWxsIGVycm9yIG91dHB1dCB0byBzdGFuZGFyZCBlcnJvciBvdXRwdXQsIFNUREVSUgogLXYgICAgICBkaXNwbGF5IHZlcnNpb24gbnVtYmVyIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgcXVpdAoKQmFzaWMgT3B0aW9uczoKIC1pPW4gICAgdXNlIG4gY29sdW1ucyBwZXIgaW5kZW50YXRpb24gbGV2ZWwgKGRlZmF1bHQgbj00KQogLXQgICAgICB0YWJzOiB1c2Ugb25lIHRhYiBjaGFyYWN0ZXIgcGVyIGluZGVudGF0aW9uIGxldmVsLCBub3QgcmVjb21tZW5kZWQKIC1udCAgICAgbm8gdGFiczogdXNlIG4gc3BhY2VzIHBlciBpbmRlbnRhdGlvbiBsZXZlbCAoZGVmYXVsdCkKIC1ldD1uICAgZW50YWIgbGVhZGluZyB3aGl0ZXNwYWNlIG4gc3BhY2VzIHBlciB0YWI7IG5vdCByZWNvbW1lbmRlZAogLWlvICAgICAiaW5kZW50IG9ubHkiOiBqdXN0IGRvIGluZGVudGF0aW9uLCBubyBvdGhlciBmb3JtYXR0aW5nLgogLXNpbD1uICBzZXQgc3RhcnRpbmcgaW5kZW50YXRpb24gbGV2ZWwgdG8gbjsgIHVzZSBpZiBhdXRvIGRldGVjdGlvbiBmYWlscwogLW9sZT1zICBzcGVjaWZ5IG91dHB1dCBsaW5lIGVuZGluZyAocz1kb3Mgb3Igd2luLCBtYWMsIHVuaXgpCiAtcGxlICAgIGtlZXAgb3V0cHV0IGxpbmUgZW5kaW5ncyBzYW1lIGFzIGlucHV0IChpbnB1dCBtdXN0IGJlIGZpbGVuYW1lKQoKV2hpdGVzcGFjZSBDb250cm9sCiAtZndzICAgIGZyZWV6ZSB3aGl0ZXNwYWNlOyB0aGlzIGRpc2FibGVzIGFsbCB3aGl0ZXNwYWNlIGNoYW5nZXMKICAgICAgICAgICBhbmQgZGlzYWJsZXMgdGhlIGZvbGxvd2luZyBzd2l0Y2hlczoKIC1idD1uICAgc2V0cyBicmFjZSB0aWdodG5lc3MsICBuPSAoMCA9IGxvb3NlLCAxPWRlZmF1bHQsIDIgPSB0aWdodCkKIC1iYnQgICAgc2FtZSBhcyAtYnQgYnV0IGZvciBjb2RlIGJsb2NrIGJyYWNlczsgc2FtZSBhcyAtYnQgaWYgbm90IGdpdmVuCiAtYmJ2dCAgIGJsb2NrIGJyYWNlcyB2ZXJ0aWNhbGx5IHRpZ2h0OyB1c2Ugd2l0aCAtYmwgb3IgLWJsaQogLWJidnRsPXMgIG1ha2UgLWJidnQgdG8gYXBwbHkgdG8gc2VsZWN0ZWQgbGlzdCBvZiBibG9jayB0eXBlcwogLXB0PW4gICBwYXJlbiB0aWdodG5lc3MgKG49MCwgMSBvciAyKQogLXNidD1uICBzcXVhcmUgYnJhY2tldCB0aWdodG5lc3MgKG49MCwgMSwgb3IgMikKIC1idnQ9biAgYnJhY2UgdmVydGljYWwgdGlnaHRuZXNzLAogICAgICAgICBuPSgwPW9wZW4sIDE9Y2xvc2UgdW5sZXNzIG11bHRpcGxlIHN0ZXBzIG9uIGEgbGluZSwgMj1hbHdheXMgY2xvc2UpCiAtcHZ0PW4gIHBhcmVuIHZlcnRpY2FsIHRpZ2h0bmVzcyAoc2VlIC1idnQgZm9yIG4pCiAtc2J2dD1uIHNxdWFyZSBicmFja2V0IHZlcnRpY2FsIHRpZ2h0bmVzcyAoc2VlIC1idnQgZm9yIG4pCiAtYnZ0Yz1uIGNsb3NpbmcgYnJhY2UgdmVydGljYWwgdGlnaHRuZXNzOgogICAgICAgICBuPSgwPW9wZW4sIDE9c29tZXRpbWVzIGNsb3NlLCAyPWFsd2F5cyBjbG9zZSkKIC1wdnRjPW4gY2xvc2luZyBwYXJlbiB2ZXJ0aWNhbCB0aWdodG5lc3MsIHNlZSAtYnZ0YyBmb3Igbi4KIC1zYnZ0Yz1uIGNsb3Npbmcgc3F1YXJlIGJyYWNrZXQgdmVydGljYWwgdGlnaHRuZXNzLCBzZWUgLWJ2dGMgZm9yIG4uCiAtY2k9biAgIHNldHMgY29udGludWF0aW9uIGluZGVudGF0aW9uPW4sICBkZWZhdWx0IGlzIG49MiBzcGFjZXMKIC1scCAgICAgbGluZSB1cCBwYXJlbnRoZXNlcywgYnJhY2tldHMsIGFuZCBub24tQkxPQ0sgYnJhY2VzCiAtc2ZzICAgIGFkZCBzcGFjZSBiZWZvcmUgc2VtaWNvbG9uIGluIGZvciggOyA7ICkKIC1hd3MgICAgYWxsb3cgcGVybHRpZHkgdG8gYWRkIHdoaXRlc3BhY2UgKGRlZmF1bHQpCiAtZHdzICAgIGRlbGV0ZSBhbGwgb2xkIG5vbi1lc3NlbnRpYWwgd2hpdGVzcGFjZQogLWljYiAgICBpbmRlbnQgY2xvc2luZyBicmFjZSBvZiBhIGNvZGUgYmxvY2sKIC1jdGk9biAgY2xvc2luZyBpbmRlbnRhdGlvbiBvZiBwYXJlbiwgc3F1YXJlIGJyYWNrZXQsIG9yIG5vbi1ibG9jayBicmFjZToKICAgICAgICAgbj0wIG5vbmUsID0xIGFsaWduIHdpdGggb3BlbmluZywgPTIgb25lIGZ1bGwgaW5kZW50YXRpb24gbGV2ZWwKIC1pY3AgICAgZXF1aXZhbGVudCB0byAtY3RpPTIKIC13bHM9cyAgd2FudCBzcGFjZSBsZWZ0IG9mIHRva2VucyBpbiBzdHJpbmc7IGkuZS4gLW53bHM9JysgLSAqIC8nCiAtd3JzPXMgIHdhbnQgc3BhY2UgcmlnaHQgb2YgdG9rZW5zIGluIHN0cmluZzsKIC1zdHMgICAgcHV0IHNwYWNlIGJlZm9yZSB0ZXJtaW5hbCBzZW1pY29sb24gb2YgYSBzdGF0ZW1lbnQKIC1zYWs9cyAgcHV0IHNwYWNlIGJldHdlZW4ga2V5d29yZHMgZ2l2ZW4gaW4gcyBhbmQgJygnOwogLW5zYWs9cyBubyBzcGFjZSBiZXR3ZWVuIGtleXdvcmRzIGluIHMgYW5kICcoJzsgaS5lLiAtbnNhaz0nbXkgb3VyIGxvY2FsJwoKTGluZSBCcmVhayBDb250cm9sCiAtZm5sICAgIGZyZWV6ZSBuZXdsaW5lczsgdGhpcyBkaXNhYmxlcyBhbGwgbGluZSBicmVhayBjaGFuZ2VzCiAgICAgICAgICAgIGFuZCBkaXNhYmxlcyB0aGUgZm9sbG93aW5nIHN3aXRjaGVzOgogLWFubCAgICBhZGQgbmV3bGluZXM7ICBvayB0byBpbnRyb2R1Y2UgbmV3IGxpbmUgYnJlYWtzCiAtYmJzICAgIGFkZCBibGFuayBsaW5lIGJlZm9yZSBzdWJzIGFuZCBwYWNrYWdlcwogLWJiYyAgICBhZGQgYmxhbmsgbGluZSBiZWZvcmUgYmxvY2sgY29tbWVudHMKIC1iYmIgICAgYWRkIGJsYW5rIGxpbmUgYmV0d2VlbiBtYWpvciBibG9ja3MKIC1rYmw9biAga2VlcCBvbGQgYmxhbmsgbGluZXM/IDA9bm8sIDE9c29tZSwgMj1hbGwKIC1tYmw9biAgbWF4aW11bSBjb25zZWN1dGl2ZSBibGFuayBsaW5lcyB0byBvdXRwdXQgKGRlZmF1bHQ9MSkKIC1jZSAgICAgY3VkZGxlZCBlbHNlOyB1c2UgdGhpcyBzdHlsZTogJ30gZWxzZSB7JwogLWNiICAgICBjdWRkbGVkIGJsb2NrcyAob3RoZXIgdGhhbiAnaWYtZWxzaWYtZWxzZScpCiAtY2JsPXMgIGxpc3Qgb2YgYmxvY2tzIHRvIGN1ZGRsZWQsIGRlZmF1bHQgJ3RyeS1jYXRjaC1maW5hbGx5JwogLWRubCAgICBkZWxldGUgb2xkIG5ld2xpbmVzIChkZWZhdWx0KQogLWw9biAgICBtYXhpbXVtIGxpbmUgbGVuZ3RoOyAgZGVmYXVsdCBuPTgwCiAtYmwgICAgIG9wZW5pbmcgYnJhY2Ugb24gbmV3IGxpbmUKIC1zYmwgICAgb3BlbmluZyBzdWIgYnJhY2Ugb24gbmV3IGxpbmUuICB2YWx1ZSBvZiAtYmwgaXMgdXNlZCBpZiBub3QgZ2l2ZW4uCiAtYmxpICAgIG9wZW5pbmcgYnJhY2Ugb24gbmV3IGxpbmUgYW5kIGluZGVudGVkCiAtYmFyICAgIG9wZW5pbmcgYnJhY2UgYWx3YXlzIG9uIHJpZ2h0LCBldmVuIGZvciBsb25nIGNsYXVzZXMKIC12dD1uICAgdmVydGljYWwgdGlnaHRuZXNzIChyZXF1aXJlcyAtbHApOyBuIGNvbnRyb2xzIGJyZWFrIGFmdGVyIG9wZW5pbmcKICAgICAgICAgdG9rZW46IDA9bmV2ZXIgIDE9bm8gYnJlYWsgaWYgbmV4dCBsaW5lIGJhbGFuY2VkICAgMj1ubyBicmVhawogLXZ0Yz1uICB2ZXJ0aWNhbCB0aWdodG5lc3Mgb2YgY2xvc2luZyBjb250YWluZXI7IG4gY29udHJvbHMgaWYgY2xvc2luZwogICAgICAgICB0b2tlbiBzdGFydHMgbmV3IGxpbmU6IDA9YWx3YXlzICAxPW5vdCB1bmxlc3MgbGlzdCAgMT1uZXZlcgogLXdiYT1zICB3YW50IGJyZWFrIGFmdGVyIHRva2VucyBpbiBzdHJpbmc7IGkuZS4gd2JhPSc6IC4nCiAtd2JiPXMgIHdhbnQgYnJlYWsgYmVmb3JlIHRva2VucyBpbiBzdHJpbmcKIC13biAgICAgd2VsZCBuZXN0ZWQ6IGNvbWJpbmVzIG9wZW5pbmcgYW5kIGNsb3NpbmcgdG9rZW5zIHdoZW4gYm90aCBhcmUgYWRqYWNlbnQKIC13bnhsPXMgd2VsZCBuZXN0ZWQgZXhjbHVzaW9uIGxpc3Q6IHByb3ZpZGVzIHNvbWUgY29udHJvbCBvdmVyIHRoZSB0eXBlcyBvZgogICAgICAgICBjb250YWluZXJzIHdoaWNoIGNhbiBiZSB3ZWxkZWQKCkZvbGxvd2luZyBPbGQgQnJlYWtwb2ludHMKIC1raXMgICAga2VlcCBpbnRlcmlvciBzZW1pY29sb25zLiAgQWxsb3dzIG11bHRpcGxlIHN0YXRlbWVudHMgcGVyIGxpbmUuCiAtYm9jICAgIGJyZWFrIGF0IG9sZCBjb21tYSBicmVha3M6IHR1cm5zIG9mZiBhbGwgYXV0b21hdGljIGxpc3QgZm9ybWF0dGluZwogLWJvbCAgICBicmVhayBhdCBvbGQgbG9naWNhbCBicmVha3BvaW50czogb3IsIGFuZCwgfHwsICYmIChkZWZhdWx0KQogLWJvbSAgICBicmVhayBhdCBvbGQgbWV0aG9kIGNhbGwgYnJlYWtwb2ludHM6IC0+CiAtYm9rICAgIGJyZWFrIGF0IG9sZCBsaXN0IGtleXdvcmQgYnJlYWtwb2ludHMgc3VjaCBhcyBtYXAsIHNvcnQgKGRlZmF1bHQpCiAtYm90ICAgIGJyZWFrIGF0IG9sZCBjb25kaXRpb25hbCAodGVybmFyeSA/Oikgb3BlcmF0b3IgYnJlYWtwb2ludHMgKGRlZmF1bHQpCiAtYm9hICAgIGJyZWFrIGF0IG9sZCBhdHRyaWJ1dGUgYnJlYWtwb2ludHMKIC1jYWI9biAgYnJlYWsgYXQgY29tbWFzIGFmdGVyIGEgY29tbWEtYXJyb3cgKD0+KToKICAgICAgICAgbj0wIGJyZWFrIGF0IGFsbCBjb21tYXMgYWZ0ZXIgPT4KICAgICAgICAgbj0xIHN0YWJsZTogYnJlYWsgdW5sZXNzIHRoaXMgYnJlYWtzIGFuIGV4aXN0aW5nIG9uZS1saW5lIGNvbnRhaW5lcgogICAgICAgICBuPTIgYnJlYWsgb25seSBpZiBhIG9uZS1saW5lIGNvbnRhaW5lciBjYW5ub3QgYmUgZm9ybWVkCiAgICAgICAgIG49MyBkbyBub3QgdHJlYXQgY29tbWFzIGFmdGVyID0+IHNwZWNpYWxseSBhdCBhbGwKCkNvbW1lbnQgY29udHJvbHMKIC1pYmMgICAgaW5kZW50IGJsb2NrIGNvbW1lbnRzIChkZWZhdWx0KQogLWlzYmMgICBpbmRlbnQgc3BhY2VkIGJsb2NrIGNvbW1lbnRzOyBtYXkgaW5kZW50IHVubGVzcyBubyBsZWFkaW5nIHNwYWNlCiAtbXNjPW4gIG1pbmltdW0gZGVzaXJlZCBzcGFjZXMgdG8gc2lkZSBjb21tZW50LCBkZWZhdWx0IDQKIC1mcHNjPW4gZml4IHBvc2l0aW9uIGZvciBzaWRlIGNvbW1lbnRzOyBkZWZhdWx0IDA7CiAtY3NjICAgIGFkZCBvciB1cGRhdGUgY2xvc2luZyBzaWRlIGNvbW1lbnRzIGFmdGVyIGNsb3NpbmcgQkxPQ0sgYnJhY2UKIC1kY3NjICAgZGVsZXRlIGNsb3Npbmcgc2lkZSBjb21tZW50cyBjcmVhdGVkIGJ5IGEgLWNzYyBjb21tYW5kCiAtY3NjcD1zIGNoYW5nZSBjbG9zaW5nIHNpZGUgY29tbWVudCBwcmVmaXggdG8gYmUgb3RoZXIgdGhhbiAnIyMgZW5kJwogLWNzY2w9cyBjaGFuZ2UgY2xvc2luZyBzaWRlIGNvbW1lbnQgdG8gYXBwbHkgdG8gc2VsZWN0ZWQgbGlzdCBvZiBibG9ja3MKIC1jc2NpPW4gbWluaW11bSBudW1iZXIgb2YgbGluZXMgbmVlZGVkIHRvIGFwcGx5IGEgLWNzYyB0YWcsIGRlZmF1bHQgbj02CiAtY3NjdD1uIG1heGltdW0gbnVtYmVyIG9mIGNvbHVtbnMgb2YgYXBwZW5kZWQgdGV4dCwgZGVmYXVsdCBuPTIwCiAtY3NjdyAgIGNhdXNlcyB3YXJuaW5nIGlmIG9sZCBzaWRlIGNvbW1lbnQgaXMgb3ZlcndyaXR0ZW4gd2l0aCAtY3NjCgogLXNiYyAgICB1c2UgJ3N0YXRpYyBibG9jayBjb21tZW50cycgaWRlbnRpZmllZCBieSBsZWFkaW5nICcjIycgKGRlZmF1bHQpCiAtc2JjcD1zIGNoYW5nZSBzdGF0aWMgYmxvY2sgY29tbWVudCBpZGVudGlmaWVyIHRvIGJlIG90aGVyIHRoYW4gJyMjJwogLW9zYmMgICBvdXRkZW50IHN0YXRpYyBibG9jayBjb21tZW50cwoKIC1zc2MgICAgdXNlICdzdGF0aWMgc2lkZSBjb21tZW50cycgaWRlbnRpZmllZCBieSBsZWFkaW5nICcjIycgKGRlZmF1bHQpCiAtc3NjcD1zIGNoYW5nZSBzdGF0aWMgc2lkZSBjb21tZW50IGlkZW50aWZpZXIgdG8gYmUgb3RoZXIgdGhhbiAnIyMnCgpEZWxldGUgc2VsZWN0ZWQgdGV4dAogLWRhYyAgICBkZWxldGUgYWxsIGNvbW1lbnRzIEFORCBwb2QKIC1kYmMgICAgZGVsZXRlIGJsb2NrIGNvbW1lbnRzCiAtZHNjICAgIGRlbGV0ZSBzaWRlIGNvbW1lbnRzCiAtZHAgICAgIGRlbGV0ZSBwb2QKClNlbmQgc2VsZWN0ZWQgdGV4dCB0byBhICcuVEVFJyBmaWxlCiAtdGFjICAgIHRlZSBhbGwgY29tbWVudHMgQU5EIHBvZAogLXRiYyAgICB0ZWUgYmxvY2sgY29tbWVudHMKIC10c2MgICAgdGVlIHNpZGUgY29tbWVudHMKIC10cCAgICAgdGVlIHBvZAoKT3V0ZGVudGluZwogLW9scSAgICBvdXRkZW50IGxvbmcgcXVvdGVkIHN0cmluZ3MgKGRlZmF1bHQpCiAtb2xjICAgIG91dGRlbnQgYSBsb25nIGJsb2NrIGNvbW1lbnQgbGluZQogLW9sYSAgICBvdXRkZW50IHN0YXRlbWVudCBsYWJlbHMKIC1va3cgICAgb3V0ZGVudCBjb250cm9sIGtleXdvcmRzIChyZWRvLCBuZXh0LCBsYXN0LCBnb3RvLCByZXR1cm4pCiAtb2t3bD1zIHNwZWNpZnkgYWx0ZXJuYXRpdmUga2V5d29yZHMgZm9yIC1va3cgY29tbWFuZAoKT3RoZXIgY29udHJvbHMKIC1tZnQ9biAgbWF4aW11bSBmaWVsZHMgcGVyIHRhYmxlOyBkZWZhdWx0IG49MCAobm8gbGltaXQpCiAteCAgICAgIGRvIG5vdCBmb3JtYXQgbGluZXMgYmVmb3JlIGhhc2gtYmFuZyBsaW5lIChpLmUuLCBmb3IgVk1TKQogLWFzYyAgICBhbGxvd3MgcGVybHRpZHkgdG8gYWRkIGEgJzsnIHdoZW4gbWlzc2luZyAoZGVmYXVsdCkKIC1kc20gICAgYWxsb3dzIHBlcmx0aWR5IHRvIGRlbGV0ZSBhbiB1bm5lY2Vzc2FyeSAnOycgIChkZWZhdWx0KQoKQ29tYmluYXRpb25zIG9mIG90aGVyIHBhcmFtZXRlcnMKIC1nbnUgICAgIGF0dGVtcHQgdG8gZm9sbG93IEdOVSBDb2RpbmcgU3RhbmRhcmRzIGFzIGFwcGxpZWQgdG8gcGVybAogLW1hbmdsZSAgcmVtb3ZlIGFzIG1hbnkgbmV3bGluZXMgYXMgcG9zc2libGUgKGJ1dCBrZWVwIGNvbW1lbnRzIGFuZCBwb2RzKQogLWV4dHJ1ZGUgIGluc2VydCBhcyBtYW55IG5ld2xpbmVzIGFzIHBvc3NpYmxlCgpEdW1wIGFuZCBkaWUsIGRlYnVnZ2luZwogLWRvcCAgICBkdW1wIG9wdGlvbnMgdXNlZCBpbiB0aGlzIHJ1biB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIHF1aXQKIC1kZGYgICAgZHVtcCBkZWZhdWx0IG9wdGlvbnMgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBxdWl0CiAtZHNuICAgIGR1bXAgYWxsIG9wdGlvbiBzaG9ydCBuYW1lcyB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIHF1aXQKIC1kbG4gICAgZHVtcCBvcHRpb24gbG9uZyBuYW1lcyB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIHF1aXQKIC1kcHJvICAgZHVtcCB3aGF0ZXZlciBjb25maWd1cmF0aW9uIGZpbGUgaXMgaW4gZWZmZWN0IHRvIHN0YW5kYXJkIG91dHB1dAogLWR0dCAgICBkdW1wIGFsbCB0b2tlbiB0eXBlcyB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIHF1aXQKCkhUTUwKIC1odG1sIHdyaXRlIGFuIGh0bWwgZmlsZSAoc2VlICdtYW4gcGVybDJ3ZWInIGZvciBtYW55IG9wdGlvbnMpCiAgICAgICBOb3RlOiB3aGVuIC1odG1sIGlzIHVzZWQsIG5vIGluZGVudGF0aW9uIG9yIGZvcm1hdHRpbmcgYXJlIGRvbmUuCiAgICAgICBIaW50OiB0cnkgcGVybHRpZHkgLWh0bWwgLWNzcz1teXN0eWxlLmNzcyBmaWxlbmFtZS5wbAogICAgICAgYW5kIGVkaXQgbXlzdHlsZS5jc3MgdG8gY2hhbmdlIHRoZSBhcHBlYXJhbmNlIG9mIGZpbGVuYW1lLmh0bWwuCiAgICAgICAtbm5uIGdpdmVzIGxpbmUgbnVtYmVycwogICAgICAgLXByZSBvbmx5IHdyaXRlcyBvdXQgPHByZT4uLjwvcHJlPiBjb2RlIHNlY3Rpb24KICAgICAgIC10b2MgcGxhY2VzIGEgdGFibGUgb2YgY29udGVudHMgdG8gc3VicyBhdCB0aGUgdG9wIChkZWZhdWx0KQogICAgICAgLXBvZCBwYXNzZXMgcG9kIHRleHQgdGhyb3VnaCBwb2QyaHRtbCAoZGVmYXVsdCkKICAgICAgIC1mcm0gd3JpdGUgaHRtbCBhcyBhIGZyYW1lICgzIGZpbGVzKQogICAgICAgLXRleHQ9cyBleHRyYSBleHRlbnNpb24gZm9yIHRhYmxlIG9mIGNvbnRlbnRzIGlmIC1mcm0sIGRlZmF1bHQ9J3RvYycKICAgICAgIC1zZXh0PXMgZXh0cmEgZXh0ZW5zaW9uIGZvciBmaWxlIGNvbnRlbnQgaWYgLWZybSwgZGVmYXVsdD0nc3JjJwoKQSBwcmVmaXggb2YgIm4iIG5lZ2F0ZXMgc2hvcnQgZm9ybSB0b2dnbGUgc3dpdGNoZXMsIGFuZCBhIHByZWZpeCBvZiAibm8iCm5lZ2F0ZXMgdGhlIGxvbmcgZm9ybXMuICBGb3IgZXhhbXBsZSwgLW5hc2MgbWVhbnMgZG9uJ3QgYWRkIG1pc3NpbmcKc2VtaWNvbG9ucy4KCklmIHlvdSBhcmUgdW5hYmxlIHRvIHNlZSB0aGlzIGVudGlyZSB0ZXh0LCB0cnkgInBlcmx0aWR5IC1oIHwgbW9yZSIKRm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24sIGFuZCBhZGRpdGlvbmFsIG9wdGlvbnMsIHRyeSAibWFuIHBlcmx0aWR5IiwKb3Igc2VlIGh0dHBzOi8vbWV0YWNwYW4ub3JnL3BvZC9kaXN0cmlidXRpb24vUGVybC1UaWR5L2Jpbi9wZXJsdGlkeQpFT0YKCiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiB1c2FnZQoKMTsK</File>
        <File Location="Kernel/cpan-lib/Perl/Tidy/Formatter.pm" Permission="660" Encode="Base64">IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIwojIFRoZSBQZXJsOjpUaWR5OjpGb3JtYXR0ZXIgcGFja2FnZSBhZGRzIGluZGVudGF0aW9uLCB3aGl0ZXNwYWNlLCBhbmQKIyBsaW5lIGJyZWFrcyB0byB0aGUgdG9rZW4gc3RyZWFtCgojIFVzYWdlIE91dGxpbmU6CiMKIyAgIFNURVAgMTogaW5pdGlhbGl6ZSBvciByZS1pbml0aWFsaXplIEZvcm1hdHRlciB3aXRoIHVzZXIgb3B0aW9ucwojICAgICBQZXJsOjpUaWR5OjpGb3JtYXR0ZXI6OmNoZWNrX29wdGlvbnMoJHJPcHRzKTsKIwojICAgU1RFUCAyOiBjcmF0ZSBhIHRva2VuaXplciBmb3IgdGhlIHNvdXJjZSBzdHJlYW0KIwojICAgU1RFUCAzOiBjcmVhdGUgYSBmb3JtYXR0ZXIgZm9yIHRoZSBkZXN0aW5hdGlvbiBzdHJlYW0KIyAgICAgbXkgJGZvcm1hdHRlciA9IFBlcmw6OlRpZHk6OkZvcm1hdHRlci0+bmV3KAojICAgICAgICAgLi4uCiMgICAgICAgICBzaW5rX29iamVjdCAgICAgICAgPT4gJGRlc3RpbmF0aW9uLAojICAgICAgICAgLi4uCiMgICAgICk7CiMKIyAgIFNURVAgNDogcHJvY2VzcyBlYWNoIGlucHV0IGxpbmUgKHNlZSBzdWIgUGVybDo6VGlkeTo6cHJvY2Vzc19zaW5nbGVfY2FzZSkKIyAgICAgd2hpbGUgKCBteSAkbGluZSA9ICR0b2tlbml6ZXItPmdldF9saW5lKCkgKSB7CiMgICAgICAgJGZvcm1hdHRlci0+d3JpdGVfbGluZSgkbGluZSk7CiMgICAgIH0KIwojICAgU1RFUCA0OiBmaW5pc2ggZm9ybWF0dGluZwojICAgICAkZm9ybWF0dGVyLT5maW5pc2hfZm9ybWF0dGluZygkc2V2ZXJlX2Vycm9yKTsKIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgSW5kZXguLi4KIyBDT0RFIFNFQ1RJT04gMTogUHJlbGltaW5hcnkgY29kZSwgZ2xvYmFsIGRlZmluaXRpb25zIGFuZCBzdWIgbmV3CiMgICAgICAgICAgICAgICAgIHN1YiBuZXcKIyBDT0RFIFNFQ1RJT04gMjogU29tZSBCYXNpYyBVdGlsaXRpZXMKIyBDT0RFIFNFQ1RJT04gMzogQ2hlY2sgYW5kIHByb2Nlc3Mgb3B0aW9ucwojICAgICAgICAgICAgICAgICBzdWIgY2hlY2tfb3B0aW9ucwojIENPREUgU0VDVElPTiA0OiBSZWNlaXZlIGxpbmVzIGZyb20gdGhlIHRva2VuaXplcgojICAgICAgICAgICAgICAgICBzdWIgd3JpdGVfbGluZQojIENPREUgU0VDVElPTiA1OiBQcmUtcHJvY2VzcyB0aGUgZW50aXJlIGZpbGUKIyAgICAgICAgICAgICAgICAgc3ViIGZpbmlzaF9mb3JtYXR0aW5nCiMgQ09ERSBTRUNUSU9OIDY6IFByb2Nlc3MgbGluZS1ieS1saW5lCiMgICAgICAgICAgICAgICAgIHN1YiBwcm9jZXNzX2FsbF9saW5lcwojIENPREUgU0VDVElPTiA3OiBQcm9jZXNzIGxpbmVzIG9mIGNvZGUKIyAgICAgICAgICAgICAgICAgcHJvY2Vzc19saW5lX29mX0NPREUKIyBDT0RFIFNFQ1RJT04gODogVXRpbGl0aWVzIGZvciBzZXR0aW5nIGJyZWFrcG9pbnRzCiMgICAgICAgICAgICAgICAgIHN1YiBzZXRfZm9yY2VkX2JyZWFrcG9pbnQKIyBDT0RFIFNFQ1RJT04gOTogUHJvY2VzcyBiYXRjaGVzIG9mIGNvZGUKIyAgICAgICAgICAgICAgICAgc3ViIGdyaW5kX2JhdGNoX29mX0NPREUKIyBDT0RFIFNFQ1RJT04gMTA6IENvZGUgdG8gYnJlYWsgbG9uZyBzdGF0ZW1lbnRzCiMgICAgICAgICAgICAgICAgICBzdWIgYnJlYWtfbG9uZ19saW5lcwojIENPREUgU0VDVElPTiAxMTogQ29kZSB0byBicmVhayBsb25nIGxpc3RzCiMgICAgICAgICAgICAgICAgICBzdWIgYnJlYWtfbGlzdHMKIyBDT0RFIFNFQ1RJT04gMTI6IENvZGUgZm9yIHNldHRpbmcgaW5kZW50YXRpb24KIyBDT0RFIFNFQ1RJT04gMTM6IFByZXBhcmluZyBiYXRjaCBvZiBsaW5lcyBmb3IgdmVydGljYWwgYWxpZ25tZW50CiMgICAgICAgICAgICAgICAgICBzdWIgY29udmV5X2JhdGNoX3RvX3ZlcnRpY2FsX2FsaWduZXIKIyBDT0RFIFNFQ1RJT04gMTQ6IENvZGUgZm9yIGNyZWF0aW5nIGNsb3Npbmcgc2lkZSBjb21tZW50cwojICAgICAgICAgICAgICAgICAgc3ViIGFkZF9jbG9zaW5nX3NpZGVfY29tbWVudAojIENPREUgU0VDVElPTiAxNTogU3VtbWFyaXplCiMgICAgICAgICAgICAgICAgICBzdWIgd3JhcHVwCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIENPREUgU0VDVElPTiAxOiBQcmVsaW1pbmFyeSBjb2RlIGFuZCBnbG9iYWwgZGVmaW5pdGlvbnMgdXAgdG8gc3ViIG5ldwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKcGFja2FnZSBQZXJsOjpUaWR5OjpGb3JtYXR0ZXI7CnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCiMgREVWRUxfTU9ERSBnZXRzIHN3aXRjaGVkIG9uIGR1cmluZyBhdXRvbWF0ZWQgdGVzdGluZyBmb3IgZXh0cmEgY2hlY2tpbmcKdXNlIGNvbnN0YW50IERFVkVMX01PREUgICA9PiAwOwp1c2UgY29uc3RhbnQgRU1QVFlfU1RSSU5HID0+IHF7fTsKdXNlIGNvbnN0YW50IFNQQUNFICAgICAgICA9PiBxeyB9Owp1c2UgY29uc3RhbnQgQkFDS1NMQVNIICAgID0+IHF7XFx9OwoKeyAjPDw8IEEgbm9uLWluZGVudGluZyBicmFjZSB0byBjb250YWluIGFsbCBsZXhpY2FsIHZhcmlhYmxlcwoKdXNlIENhcnA7CnVzZSBFbmdsaXNoICAgIHF3KCAtbm9fbWF0Y2hfdmFycyApOwp1c2UgTGlzdDo6VXRpbCBxdyggbWluIG1heCBmaXJzdCApOyAgICAjIG1pbiwgbWF4IGZpcnN0IGFyZSBpbiBQZXJsIDUuOApvdXIgJFZFUlNJT04gPSAnMjAyNTAxMDUnOwoKIyBUaGUgVG9rZW5pemVyIHdpbGwgYmUgbG9hZGVkIHdpdGggdGhlIEZvcm1hdHRlcgojI3VzZSBQZXJsOjpUaWR5OjpUb2tlbml6ZXI7ICAgICMgZm9yIGlzX2tleXdvcmQoKQoKc3ViIEFVVE9MT0FEIHsKCiAgICAjIENhdGNoIGFueSB1bmRlZmluZWQgc3ViIGNhbGxzIHNvIHRoYXQgd2UgYXJlIHN1cmUgdG8gZ2V0CiAgICAjIHNvbWUgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbi4gIFRoaXMgc3ViIHNob3VsZCBuZXZlciBiZSBjYWxsZWQKICAgICMgZXhjZXB0IGZvciBhIHByb2dyYW1taW5nIGVycm9yLgogICAgb3VyICRBVVRPTE9BRDsKICAgIHJldHVybiBpZiAoICRBVVRPTE9BRCA9fiAvXGJERVNUUk9ZJC8gKTsKICAgIG15ICggJHBrZywgJGZuYW1lLCAkbG5vICkgPSBjYWxsZXIoKTsKICAgIG15ICRteV9wYWNrYWdlID0gX19QQUNLQUdFX187CiAgICBwcmludCB7KlNUREVSUn0gPDxFT007Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KRXJyb3IgZGV0ZWN0ZWQgaW4gcGFja2FnZSAnJG15X3BhY2thZ2UnLCB2ZXJzaW9uICRWRVJTSU9OClJlY2VpdmVkIHVuZXhwZWN0ZWQgQVVUT0xPQUQgY2FsbCBmb3Igc3ViICckQVVUT0xPQUQnCkNhbGxlZCBmcm9tIHBhY2thZ2U6ICckcGtnJwpDYWxsZWQgZnJvbSBGaWxlICckZm5hbWUnICBhdCBsaW5lICckbG5vJwpUaGlzIGVycm9yIGlzIHByb2JhYmx5IGR1ZSB0byBhIHJlY2VudCBwcm9ncmFtbWluZyBjaGFuZ2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpFT00KICAgIGV4aXQgMTsKfSAjIyBlbmQgc3ViIEFVVE9MT0FECgpzdWIgREVTVFJPWSB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgX2RlY3JlbWVudF9jb3VudCgpOwogICAgcmV0dXJuOwp9CgpzdWIgRGllIHsKICAgIG15ICgkbXNnKSA9IEBfOwogICAgUGVybDo6VGlkeTo6RGllKCRtc2cpOwogICAgY3JvYWsgInVuZXhwZWN0ZWQgcmV0dXJuIGZyb20gUGVybDo6VGlkeTo6RGllIjsKfQoKc3ViIFdhcm4gewogICAgbXkgKCRtc2cpID0gQF87CiAgICBQZXJsOjpUaWR5OjpXYXJuKCRtc2cpOwogICAgcmV0dXJuOwp9CgpzdWIgRmF1bHQgewogICAgbXkgKCRtc2cpID0gQF87CgogICAgIyBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGZvciBlcnJvcnMgdGhhdCByZWFsbHkgc2hvdWxkIG5vdCBvY2N1cgogICAgIyBleGNlcHQgaWYgdGhlcmUgaGFzIGJlZW4gYSBidWcgaW50cm9kdWNlZCBieSBhIHJlY2VudCBwcm9ncmFtIGNoYW5nZS4KICAgICMgUGxlYXNlIGFkZCBjb21tZW50cyBhdCBjYWxscyB0byBGYXVsdCB0byBleHBsYWluIHdoeSB0aGUgY2FsbAogICAgIyBzaG91bGQgbm90IG9jY3VyLCBhbmQgd2hlcmUgdG8gbG9vayB0byBmaXggaXQuCiAgICBteSAoICRwYWNrYWdlMF91dSwgJGZpbGVuYW1lMF91dSwgJGxpbmUwLCAgICAkc3Vicm91dGluZTBfdXUgKSA9IGNhbGxlcigwKTsKICAgIG15ICggJHBhY2thZ2UxX3V1LCAkZmlsZW5hbWUxLCAgICAkbGluZTEsICAgICRzdWJyb3V0aW5lMSApICAgID0gY2FsbGVyKDEpOwogICAgbXkgKCAkcGFja2FnZTJfdXUsICRmaWxlbmFtZTJfdXUsICRsaW5lMl91dSwgJHN1YnJvdXRpbmUyICkgICAgPSBjYWxsZXIoMik7CiAgICBteSAkcGtnID0gX19QQUNLQUdFX187CgogICAgbXkgJGlucHV0X3N0cmVhbV9uYW1lID0gZ2V0X2lucHV0X3N0cmVhbV9uYW1lKCk7CgogICAgRGllKDw8RU9NKTsKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoaWxlIG9wZXJhdGluZyBvbiBpbnB1dCBzdHJlYW0gd2l0aCBuYW1lOiAnJGlucHV0X3N0cmVhbV9uYW1lJwpBIGZhdWx0IHdhcyBkZXRlY3RlZCBhdCBsaW5lICRsaW5lMCBvZiBzdWIgJyRzdWJyb3V0aW5lMScKaW4gZmlsZSAnJGZpbGVuYW1lMScKd2hpY2ggd2FzIGNhbGxlZCBmcm9tIGxpbmUgJGxpbmUxIG9mIHN1YiAnJHN1YnJvdXRpbmUyJwpNZXNzYWdlOiAnJG1zZycKVGhpcyBpcyBwcm9iYWJseSBhbiBlcnJvciBpbnRyb2R1Y2VkIGJ5IGEgcmVjZW50IHByb2dyYW1taW5nIGNoYW5nZS4KJHBrZyByZXBvcnRzIFZFUlNJT049JyRWRVJTSU9OJy4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkVPTQogICAgY3JvYWsgInVuZXhwZWN0ZWQgcmV0dXJuIGZyb20gc3ViIERpZSI7Cn0gIyMgZW5kIHN1YiBGYXVsdAoKc3ViIEZhdWx0X1dhcm4gewogICAgbXkgKCRtc2cpID0gQF87CgogICAgIyBUaGlzIGlzIHRoZSBzYW1lIGFzIEZhdWx0IGV4Y2VwdCB0aGF0IGl0IGNhbGxzIFdhcm4gaW5zdGVhZCBvZiBEaWUKICAgICMgYW5kIHJldHVybnMuCiAgICBteSAoICRwYWNrYWdlMF91dSwgJGZpbGVuYW1lMF91dSwgJGxpbmUwLCAgICAkc3Vicm91dGluZTBfdXUgKSA9IGNhbGxlcigwKTsKICAgIG15ICggJHBhY2thZ2UxX3V1LCAkZmlsZW5hbWUxLCAgICAkbGluZTEsICAgICRzdWJyb3V0aW5lMSApICAgID0gY2FsbGVyKDEpOwogICAgbXkgKCAkcGFja2FnZTJfdXUsICRmaWxlbmFtZTJfdXUsICRsaW5lMl91dSwgJHN1YnJvdXRpbmUyICkgICAgPSBjYWxsZXIoMik7CiAgICBteSAkaW5wdXRfc3RyZWFtX25hbWUgPSBnZXRfaW5wdXRfc3RyZWFtX25hbWUoKTsKCiAgICBXYXJuKDw8RU9NKTsKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoaWxlIG9wZXJhdGluZyBvbiBpbnB1dCBzdHJlYW0gd2l0aCBuYW1lOiAnJGlucHV0X3N0cmVhbV9uYW1lJwpBIGZhdWx0IHdhcyBkZXRlY3RlZCBhdCBsaW5lICRsaW5lMCBvZiBzdWIgJyRzdWJyb3V0aW5lMScKaW4gZmlsZSAnJGZpbGVuYW1lMScKd2hpY2ggd2FzIGNhbGxlZCBmcm9tIGxpbmUgJGxpbmUxIG9mIHN1YiAnJHN1YnJvdXRpbmUyJwpNZXNzYWdlOiAnJG1zZycKVGhpcyBpcyBwcm9iYWJseSBhbiBlcnJvciBpbnRyb2R1Y2VkIGJ5IGEgcmVjZW50IHByb2dyYW1taW5nIGNoYW5nZS4KUGVybDo6VGlkeTo6Rm9ybWF0dGVyLnBtIHJlcG9ydHMgVkVSU0lPTj0nJFZFUlNJT04nLgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KRU9NCgogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgRmF1bHRfV2FybgoKc3ViIEV4aXQgewogICAgbXkgKCRtc2cpID0gQF87CiAgICBQZXJsOjpUaWR5OjpFeGl0KCRtc2cpOwogICAgY3JvYWsgInVuZXhwZWN0ZWQgcmV0dXJuIGZyb20gUGVybDo6VGlkeTo6RXhpdCI7Cn0KCiMgR2xvYmFsIHZhcmlhYmxlcyAuLi4KbXkgKAoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBTZWN0aW9uIDE6IEdsb2JhbCB2YXJpYWJsZXMgd2hpY2ggYXJlIGVpdGhlciBhbHdheXMgY29uc3RhbnQgb3IKICAgICMgYXJlIGNvbnN0YW50IGFmdGVyIGJlaW5nIGNvbmZpZ3VyZWQgYnkgdXNlci1zdXBwbGllZAogICAgIyBwYXJhbWV0ZXJzLiAgVGhleSByZW1haW4gY29uc3RhbnQgYXMgYSBmaWxlIGlzIGJlaW5nIHByb2Nlc3NlZC4KICAgICMgVGhlIElOSVRJQUxJWkVSIGNvbW1lbnQgdGVsbHMgdGhlIHN1YiByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nCiAgICAjIGVhY2ggdmFyaWFibGUuIEZhaWx1cmUgdG8gaW5pdGlhbGl6ZSBvciByZS1pbml0aWFsaXplIGEgZ2xvYmFsCiAgICAjIHZhcmlhYmxlIGNhbiBjYXVzZSBidWdzIHdoaWNoIGFyZSBoYXJkIHRvIGxvY2F0ZS4KICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICMgSU5JVElBTElaRVI6IHN1YiBjaGVja19vcHRpb25zCiAgICAkck9wdHMsCgogICAgIyBzaG9ydC1jdXQgb3B0aW9uIHZhcmlhYmxlcwogICAgIyBJTklUSUFMSVpFUjogc3ViIGluaXRpYWxpemVfZ2xvYmFsX29wdGlvbl92YXJzCiAgICAkck9wdHNfYWRkX25ld2xpbmVzLAogICAgJHJPcHRzX2FkZF93aGl0ZXNwYWNlLAogICAgJHJPcHRzX2FkZF90cmFpbGluZ19jb21tYXMsCiAgICAkck9wdHNfYWRkX2xvbmVfdHJhaWxpbmdfY29tbWFzLAogICAgJHJPcHRzX2JsYW5rX2xpbmVzX2FmdGVyX29wZW5pbmdfYmxvY2ssCiAgICAkck9wdHNfYmxvY2tfYnJhY2VfdGlnaHRuZXNzLAogICAgJHJPcHRzX2Jsb2NrX2JyYWNlX3ZlcnRpY2FsX3RpZ2h0bmVzcywKICAgICRyT3B0c19icmFjZV9mb2xsb3dlcl92ZXJ0aWNhbF90aWdodG5lc3MsCiAgICAkck9wdHNfYnJlYWtfYWZ0ZXJfbGFiZWxzLAogICAgJHJPcHRzX2JyZWFrX2F0X29sZF9hdHRyaWJ1dGVfYnJlYWtwb2ludHMsCiAgICAkck9wdHNfYnJlYWtfYXRfb2xkX2NvbW1hX2JyZWFrcG9pbnRzLAogICAgJHJPcHRzX2JyZWFrX2F0X29sZF9rZXl3b3JkX2JyZWFrcG9pbnRzLAogICAgJHJPcHRzX2JyZWFrX2F0X29sZF9sb2dpY2FsX2JyZWFrcG9pbnRzLAogICAgJHJPcHRzX2JyZWFrX2F0X29sZF9zZW1pY29sb25fYnJlYWtwb2ludHMsCiAgICAkck9wdHNfYnJlYWtfYXRfb2xkX3Rlcm5hcnlfYnJlYWtwb2ludHMsCiAgICAkck9wdHNfYnJlYWtfb3Blbl9jb21wYWN0X3BhcmVucywKICAgICRyT3B0c19jbG9zaW5nX3NpZGVfY29tbWVudHMsCiAgICAkck9wdHNfY2xvc2luZ19zaWRlX2NvbW1lbnRfZWxzZV9mbGFnLAogICAgJHJPcHRzX2Nsb3Npbmdfc2lkZV9jb21tZW50X21heGltdW1fdGV4dCwKICAgICRyT3B0c19jb21tYV9hcnJvd19icmVha3BvaW50cywKICAgICRyT3B0c19jb250aW51YXRpb25faW5kZW50YXRpb24sCiAgICAkck9wdHNfY3VkZGxlZF9wYXJlbl9icmFjZSwKICAgICRyT3B0c19kZWxldGVfY2xvc2luZ19zaWRlX2NvbW1lbnRzLAogICAgJHJPcHRzX2RlbGV0ZV9vbGRfd2hpdGVzcGFjZSwKICAgICRyT3B0c19kZWxldGVfc2lkZV9jb21tZW50cywKICAgICRyT3B0c19kZWxldGVfdHJhaWxpbmdfY29tbWFzLAogICAgJHJPcHRzX2RlbGV0ZV9sb25lX3RyYWlsaW5nX2NvbW1hcywKICAgICRyT3B0c19kZWxldGVfd2VsZF9pbnRlcmZlcmluZ19jb21tYXMsCiAgICAkck9wdHNfZXh0ZW5kZWRfY29udGludWF0aW9uX2luZGVudGF0aW9uLAogICAgJHJPcHRzX2Zvcm1hdF9za2lwcGluZywKICAgICRyT3B0c19mcmVlemVfd2hpdGVzcGFjZSwKICAgICRyT3B0c19mdW5jdGlvbl9wYXJlbl92ZXJ0aWNhbF9hbGlnbm1lbnQsCiAgICAkck9wdHNfZnV6enlfbGluZV9sZW5ndGgsCiAgICAkck9wdHNfaWdub3JlX29sZF9icmVha3BvaW50cywKICAgICRyT3B0c19pZ25vcmVfc2lkZV9jb21tZW50X2xlbmd0aHMsCiAgICAkck9wdHNfaWdub3JlX3Blcmxjcml0aWNfY29tbWVudHMsCiAgICAkck9wdHNfaW5kZW50X2Nsb3NpbmdfYnJhY2UsCiAgICAkck9wdHNfaW5kZW50X2NvbHVtbnMsCiAgICAkck9wdHNfaW5kZW50X2xlYWRpbmdfc2VtaWNvbG9uLAogICAgJHJPcHRzX2luZGVudF9vbmx5LAogICAgJHJPcHRzX2tlZXBfaW50ZXJpb3Jfc2VtaWNvbG9ucywKICAgICRyT3B0c19saW5lX3VwX3BhcmVudGhlc2VzLAogICAgJHJPcHRzX2xvZ2ljYWxfcGFkZGluZywKICAgICRyT3B0c19tYXhpbXVtX2NvbnNlY3V0aXZlX2JsYW5rX2xpbmVzLAogICAgJHJPcHRzX21heGltdW1fZmllbGRzX3Blcl90YWJsZSwKICAgICRyT3B0c19tYXhpbXVtX2xpbmVfbGVuZ3RoLAogICAgJHJPcHRzX21pbmltaXplX2NvbnRpbnVhdGlvbl9pbmRlbnRhdGlvbiwKICAgICRyT3B0c19vbmVfbGluZV9ibG9ja19zZW1pY29sb25zLAogICAgJHJPcHRzX29wZW5pbmdfYnJhY2VfYWx3YXlzX29uX3JpZ2h0LAogICAgJHJPcHRzX291dGRlbnRfa2V5d29yZHMsCiAgICAkck9wdHNfb3V0ZGVudF9sYWJlbHMsCiAgICAkck9wdHNfb3V0ZGVudF9sb25nX2NvbW1lbnRzLAogICAgJHJPcHRzX291dGRlbnRfbG9uZ19xdW90ZXMsCiAgICAkck9wdHNfb3V0ZGVudF9zdGF0aWNfYmxvY2tfY29tbWVudHMsCiAgICAkck9wdHNfcmVjb21iaW5lLAogICAgJHJPcHRzX3F3X2FzX2Z1bmN0aW9uLAogICAgJHJPcHRzX3Nob3J0X2NvbmNhdGVuYXRpb25faXRlbV9sZW5ndGgsCiAgICAkck9wdHNfc3BhY2VfcHJvdG90eXBlX3BhcmVuLAogICAgJHJPcHRzX3NwYWNlX3NpZ25hdHVyZV9wYXJlbiwKICAgICRyT3B0c19zdGFja19jbG9zaW5nX2Jsb2NrX2JyYWNlLAogICAgJHJPcHRzX3N0YXRpY19ibG9ja19jb21tZW50cywKICAgICRyT3B0c19hZGRfbWlzc2luZ19lbHNlLAogICAgJHJPcHRzX3dhcm5fbWlzc2luZ19lbHNlLAogICAgJHJPcHRzX3RlZV9ibG9ja19jb21tZW50cywKICAgICRyT3B0c190ZWVfcG9kLAogICAgJHJPcHRzX3RlZV9zaWRlX2NvbW1lbnRzLAogICAgJHJPcHRzX3ZhcmlhYmxlX21heGltdW1fbGluZV9sZW5ndGgsCiAgICAkck9wdHNfdmFsaWduX2NvZGUsCiAgICAkck9wdHNfdmFsaWduX3NpZGVfY29tbWVudHMsCiAgICAkck9wdHNfdmFsaWduX2lmX3VubGVzcywKICAgICRyT3B0c192YWxpZ25fd2lkZV9lcXVhbHMsCiAgICAkck9wdHNfd2hpdGVzcGFjZV9jeWNsZSwKICAgICRyT3B0c19leHRlbmRlZF9ibG9ja190aWdodG5lc3MsCiAgICAkck9wdHNfZXh0ZW5kZWRfbGluZV91cF9wYXJlbnRoZXNlcywKCiAgICAjIFN0YXRpYyBoYXNoZXMKICAgICMgSU5JVElBTElaRVI6IEJFR0lOIGJsb2NrCiAgICAlaXNfYXNzaWdubWVudCwKICAgICVpc19ub25fbGlzdF90eXBlLAogICAgJWlzX2lmX3VubGVzc19hbmRfb3JfbGFzdF9uZXh0X3JlZG9fcmV0dXJuLAogICAgJWlzX2lmX2Vsc2lmX2Vsc2VfdW5sZXNzX3doaWxlX3VudGlsX2Zvcl9mb3JlYWNoLAogICAgJWlzX2lmX3VubGVzc193aGlsZV91bnRpbF9mb3JfZm9yZWFjaCwKICAgICVpc19mb3JfZm9yZWFjaCwKICAgICVpc19sYXN0X25leHRfcmVkb19yZXR1cm4sCiAgICAlaXNfaWZfdW5sZXNzLAogICAgJWlzX2lmX2Vsc2lmLAogICAgJWlzX2lmX3VubGVzc19lbHNpZiwKICAgICVpc19pZl91bmxlc3NfZWxzaWZfZWxzZSwKICAgICVpc19lbHNpZl9lbHNlLAogICAgJWlzX2FuZF9vciwKICAgICVpc19jaGFpbl9vcGVyYXRvciwKICAgICVpc19ibG9ja193aXRob3V0X3NlbWljb2xvbiwKICAgICVva190b19hZGRfc2VtaWNvbG9uX2Zvcl9ibG9ja190eXBlLAogICAgJWlzX29wZW5pbmdfdHlwZSwKICAgICVpc19jbG9zaW5nX3R5cGUsCiAgICAlaXNfb3BlbmluZ190b2tlbiwKICAgICVpc19jbG9zaW5nX3Rva2VuLAogICAgJWlzX3Rlcm5hcnksCiAgICAlaXNfZXF1YWxfb3JfZmF0X2NvbW1hLAogICAgJWlzX2NvdW50ZWRfdHlwZSwKICAgICVpc19vcGVuaW5nX3NlcXVlbmNlX3Rva2VuLAogICAgJWlzX2Nsb3Npbmdfc2VxdWVuY2VfdG9rZW4sCiAgICAlbWF0Y2hpbmdfdG9rZW4sCiAgICAlaXNfY29udGFpbmVyX2xhYmVsX3R5cGUsCiAgICAlaXNfZGllX2NvbmZlc3NfY3JvYWtfd2FybiwKICAgICVpc19teV9vdXJfbG9jYWwsCiAgICAlaXNfc29mdF9rZWVwX2JyZWFrX3R5cGUsCiAgICAlaXNfaW5kaXJlY3Rfb2JqZWN0X3Rha2VyLAogICAgQGFsbF9vcGVyYXRvcnMsCiAgICAlaXNfZG9fZm9sbG93ZXIsCiAgICAlaXNfYW5vbl9zdWJfYnJhY2VfZm9sbG93ZXIsCiAgICAlaXNfYW5vbl9zdWJfMV9icmFjZV9mb2xsb3dlciwKICAgICVpc19vdGhlcl9icmFjZV9mb2xsb3dlciwKICAgICVpc19rd1UsCiAgICAlaXNfcmVfbWF0Y2hfb3AsCiAgICAlaXNfbXlfc3RhdGVfb3VyLAogICAgJWlzX2tleXdvcmRfd2l0aF9zcGVjaWFsX2xlYWRpbmdfdGVybSwKCiAgICAjIElOSVRJQUxJWkVSOiBzdWIgY2hlY2tfb3B0aW9ucwogICAgJGNvbnRyb2xsZWRfY29tbWFfc3R5bGUsCgogICAgIyBJTklUSUFMSVpFUjogc3ViIGluaXRpYWxpemVfdGlnaHRuZXNzX3ZhcnMKICAgICV0aWdodG5lc3MsCgogICAgIyBJTklUSUFMSVpFUjogc3ViIGluaXRpYWxpemVfbXVsdGlwbGVfdG9rZW5fdGlnaHRuZXNzCiAgICAlbXVsdGlwbGVfdG9rZW5fdGlnaHRuZXNzLAoKICAgICMgIElOSVRJQUxJWkVSOiBpbml0aWFsaXplX29sZF9icmVha3BvaW50X2NvbnRyb2xzCiAgICAla2VlcF9icmVha19iZWZvcmVfdHlwZSwKICAgICVrZWVwX2JyZWFrX2FmdGVyX3R5cGUsCgogICAgIyBJTklUSUFMSVpFUjogaW5pdGlhbGl6ZV9jb250YWluZXJfaW5kZW50YXRpb25fb3B0aW9ucwogICAgJWNvbnRhaW5lcl9pbmRlbnRhdGlvbl9vcHRpb25zLAoKICAgICMgSU5JVElBTElaRVI6IHN1YiBpbml0aWFsaXplX2xweGxfbHBpbAogICAgJWxpbmVfdXBfcGFyZW50aGVzZXNfY29udHJvbF9oYXNoLAogICAgJGxpbmVfdXBfcGFyZW50aGVzZXNfY29udHJvbF9pc19scHhsLAoKICAgICMgSU5JVElBTElaRVI6IHN1YiBvdXRkZW50X2tleXdvcmQKICAgICVvdXRkZW50X2tleXdvcmQsCgogICAgIyBJTklUSUFMSVpFUjogc3ViIGluaXRpYWxpemVfa2V5d29yZF9wYXJlbl9pbm5lcl90aWdodG5lc3MKICAgICVrZXl3b3JkX3BhcmVuX2lubmVyX3RpZ2h0bmVzcywKCiAgICAjIFRoZXNlIGNhbiBiZSBtb2RpZmllZCBieSBncmVwLWFsaWFzLWxpc3QKICAgICMgSU5JVElBTElaRVI6IHN1YiBpbml0aWFsaXplX2dyZXBfYW5kX2ZyaWVuZHMKICAgICVpc19zb3J0X21hcF9ncmVwLAogICAgJWlzX3NvcnRfbWFwX2dyZXBfZXZhbCwKICAgICVpc19zb3J0X21hcF9ncmVwX2V2YWxfZG8sCiAgICAlaXNfYmxvY2tfd2l0aF9jaSwKICAgICVpc19rZXl3b3JkX3JldHVybmluZ19saXN0LAogICAgJWJsb2NrX3R5cGVfbWFwLCAgICAgICAgICMgaW5pdGlhbGl6ZWQgaW4gQkVHSU4sIGJ1dCBtYXkgYmUgY2hhbmdlZAogICAgJXdhbnRfb25lX2xpbmVfYmxvY2ssICAgICMgbWF5IGJlIGNoYW5nZWQgaW4gcHJlcGFyZV9jdWRkbGVkX2Jsb2NrX3R5cGVzCgogICAgIyBJTklUSUFMSVpFUjogc3ViIHByZXBhcmVfY3VkZGxlZF9ibG9ja190eXBlcwogICAgJHJjdWRkbGVkX2Jsb2NrX3R5cGVzLAoKICAgICMgSU5JVElBTElaRVI6IHN1YiBpbml0aWFsaXplX3doaXRlc3BhY2VfaGFzaGVzCiAgICAlYmluYXJ5X3dzX3J1bGVzLAogICAgJXdhbnRfbGVmdF9zcGFjZSwKICAgICV3YW50X3JpZ2h0X3NwYWNlLAoKICAgICMgSU5JVElBTElaRVI6IHN1YiBpbml0aWFsaXplX2JvbmRfc3RyZW5ndGhfaGFzaGVzCiAgICAlcmlnaHRfYm9uZF9zdHJlbmd0aCwKICAgICVsZWZ0X2JvbmRfc3RyZW5ndGgsCgogICAgIyBJTklUSUFMSVpFUjogc3ViIGluaXRpYWxpemVfdG9rZW5fYnJlYWtfcHJlZmVyZW5jZXMKICAgICV3YW50X2JyZWFrX2JlZm9yZSwKICAgICVicmVha19iZWZvcmVfY29udGFpbmVyX3R5cGVzLAoKICAgICMgSU5JVElBTElaRVI6IHN1YiBpbml0aWFsaXplX3NwYWNlX2FmdGVyX2tleXdvcmQKICAgICVzcGFjZV9hZnRlcl9rZXl3b3JkLAoKICAgICMgSU5JVElBTElaRVI6IHN1YiBpbml0aWFsaXplX2V4dGVuZGVkX2Jsb2NrX3RpZ2h0bmVzc19saXN0CiAgICAlZXh0ZW5kZWRfYmxvY2tfdGlnaHRuZXNzX2xpc3QsCgogICAgIyBJTklUSUFMSVpFRCBCWSBpbml0aWFsaXplX2dsb2JhbF9vcHRpb25fdmFycwogICAgJW9wZW5pbmdfdmVydGljYWxfdGlnaHRuZXNzLAogICAgJWNsb3NpbmdfdmVydGljYWxfdGlnaHRuZXNzLAogICAgJWNsb3NpbmdfdG9rZW5faW5kZW50YXRpb24sCiAgICAkc29tZV9jbG9zaW5nX3Rva2VuX2luZGVudGF0aW9uLAogICAgJW9wZW5pbmdfdG9rZW5fcmlnaHQsCiAgICAlc3RhY2tfb3BlbmluZ190b2tlbiwKICAgICVzdGFja19jbG9zaW5nX3Rva2VuLAoKICAgICMgSU5JVElBTElaRVI6IHN1YiBpbml0aWFsaXplX3dlbGRfbmVzdGVkX2V4Y2x1c2lvbl9ydWxlcwogICAgJXdlbGRfbmVzdGVkX2V4Y2x1c2lvbl9ydWxlcywKCiAgICAjIElOSVRJQUxJWkVSOiBzdWIgaW5pdGlhbGl6ZV93ZWxkX2ZhdF9jb21tYV9ydWxlcwogICAgJXdlbGRfZmF0X2NvbW1hX3J1bGVzLAoKICAgICMgSU5JVElBTElaRVI6IHN1YiBpbml0aWFsaXplX3RyYWlsaW5nX2NvbW1hX3J1bGVzCiAgICAldHJhaWxpbmdfY29tbWFfcnVsZXMsCgogICAgIyBJTklUSUFMSVpFUjogc3ViIGluaXRpYWxpemVfdHJhaWxpbmdfY29tbWFfYnJlYWtfcnVsZXMKICAgICV0cmFpbGluZ19jb21tYV9icmVha19ydWxlcywKCiAgICAjIElOSVRJQUxJWkVSOiBzdWIgaW5pdGlhbGl6ZV9pbnRlcmJyYWNrZXRfYXJyb3dfc3R5bGUKICAgICVpbnRlcmJyYWNrZXRfYXJyb3dfc3R5bGUsCgogICAgIyBJTklUSUFMSVpFUjogc3ViIGluaXRpYWxpemVfY2FsbF9wYXJlbl9zdHlsZQogICAgJWNhbGxfcGFyZW5fc3R5bGUsCgogICAgIyBJTklUSUFMSVpFUjogc3ViIGluaXRpYWxpemVfd2Fybl92YXJpYWJsZV90eXBlcwogICAgJHJ3YXJuX3ZhcmlhYmxlX3R5cGVzLAogICAgJHJpc193YXJuX3ZhcmlhYmxlX2V4Y2x1ZGVkX25hbWUsCgogICAgIyBJTklUSUFMSVpFUjogc3ViIGluaXRpYWxpemVfd2Fybl9taXNtYXRjaGVkX2FyZ3MKICAgICRyd2Fybl9taXNtYXRjaGVkX2FyZ190eXBlcywKICAgICRyaXNfd2Fybl9taXNtYXRjaGVkX2FyZ19leGNsdWRlZF9uYW1lLAoKICAgICMgSU5JVElBTElaRVI6IHN1YiBpbml0aWFsaXplX3dhcm5fbWlzbWF0Y2hlZF9yZXR1cm5zCiAgICAkcndhcm5fbWlzbWF0Y2hlZF9yZXR1cm5fdHlwZXMsCiAgICAkcmlzX3dhcm5fbWlzbWF0Y2hlZF9yZXR1cm5fZXhjbHVkZWRfbmFtZSwKCiAgICAjIHJlZ2V4IHBhdHRlcm5zIGZvciB0ZXh0IGlkZW50aWZpY2F0aW9uLgogICAgIyBNb3N0IGNhbiBiZSBjb25maWd1cmVkIGJ5IHVzZXIgcGFyYW1ldGVycy4KICAgICMgTW9zdCBhcmUgaW5pdGlhbGl6ZWQgaW4gYSBzdWIgbWFrZV8qKl9wYXR0ZXJuIGR1cmluZyBjb25maWd1cmF0aW9uLgoKICAgICMgSU5JVElBTElaRVI6IHN1YiBtYWtlX3N1Yl9tYXRjaGluZ19wYXR0ZXJuCiAgICAkU1VCX1BBVFRFUk4sCiAgICAkQVNVQl9QQVRURVJOLAogICAgJW1hdGNoZXNfQVNVQiwKCiAgICAjIElOSVRJQUxJWkVSOiBtYWtlX3N0YXRpY19ibG9ja19jb21tZW50X3BhdHRlcm4KICAgICRzdGF0aWNfYmxvY2tfY29tbWVudF9wYXR0ZXJuLAoKICAgICMgSU5JVElBTElaRVI6IHN1YiBtYWtlX3N0YXRpY19zaWRlX2NvbW1lbnRfcGF0dGVybgogICAgJHN0YXRpY19zaWRlX2NvbW1lbnRfcGF0dGVybiwKCiAgICAjIElOSVRJQUxJWkVSOiBtYWtlX2Zvcm1hdF9za2lwcGluZ19wYXR0ZXJuCiAgICAkZm9ybWF0X3NraXBwaW5nX3BhdHRlcm5fYmVnaW4sCiAgICAkZm9ybWF0X3NraXBwaW5nX3BhdHRlcm5fZW5kLAoKICAgICMgSU5JVElBTElaRVI6IHN1YiBtYWtlX25vbl9pbmRlbnRpbmdfYnJhY2VfcGF0dGVybgogICAgJG5vbl9pbmRlbnRpbmdfYnJhY2VfcGF0dGVybiwKCiAgICAjIElOSVRJQUxJWkVSOiBzdWIgbWFrZV9ibF9wYXR0ZXJuCiAgICAkYmxfZXhjbHVzaW9uX3BhdHRlcm4sCgogICAgIyBJTklUSUFMSVpFUjogbWFrZV9ibF9wYXR0ZXJuCiAgICAkYmxfcGF0dGVybiwKCiAgICAjIElOSVRJQUxJWkVSOiBzdWIgbWFrZV9ibGlfcGF0dGVybgogICAgJGJsaV9leGNsdXNpb25fcGF0dGVybiwKCiAgICAjIElOSVRJQUxJWkVSOiBzdWIgbWFrZV9ibGlfcGF0dGVybgogICAgJGJsaV9wYXR0ZXJuLAoKICAgICMgSU5JVElBTElaRVI6IHN1YiBtYWtlX2Jsb2NrX2JyYWNlX3ZlcnRpY2FsX3RpZ2h0bmVzc19wYXR0ZXJuCiAgICAkYmxvY2tfYnJhY2VfdmVydGljYWxfdGlnaHRuZXNzX3BhdHRlcm4sCgogICAgIyBJTklUSUFMSVpFUjogc3ViIG1ha2VfYmxhbmtfbGluZV9wYXR0ZXJuCiAgICAkYmxhbmtfbGluZXNfYWZ0ZXJfb3BlbmluZ19ibG9ja19wYXR0ZXJuLAogICAgJGJsYW5rX2xpbmVzX2JlZm9yZV9jbG9zaW5nX2Jsb2NrX3BhdHRlcm4sCgogICAgIyBJTklUSUFMSVpFUjogc3ViIG1ha2Vfa2V5d29yZF9ncm91cF9saXN0X3BhdHRlcm4KICAgICRrZXl3b3JkX2dyb3VwX2xpc3RfcGF0dGVybiwKICAgICRrZXl3b3JkX2dyb3VwX2xpc3RfY29tbWVudF9wYXR0ZXJuLAoKICAgICMgSU5JVElBTElaRVI6IHN1YiBtYWtlX2Nsb3Npbmdfc2lkZV9jb21tZW50X3ByZWZpeAogICAgJGNsb3Npbmdfc2lkZV9jb21tZW50X3ByZWZpeF9wYXR0ZXJuLAoKICAgICMgSU5JVElBTElaRVI6IHN1YiBtYWtlX2Nsb3Npbmdfc2lkZV9jb21tZW50X2xpc3RfcGF0dGVybgogICAgJGNsb3Npbmdfc2lkZV9jb21tZW50X2xpc3RfcGF0dGVybiwKICAgICRjbG9zaW5nX3NpZGVfY29tbWVudF93YW50X2FzdWIsCiAgICAkY2xvc2luZ19zaWRlX2NvbW1lbnRfZXhjbHVzaW9uX3BhdHRlcm4sCgogICAgIyBUYWJsZSB0byBlZmZpY2llbnRseSBmaW5kIGluZGVudGF0aW9uIGFuZCBtYXggbGluZSBsZW5ndGgKICAgICMgZnJvbSBsZXZlbC4KICAgICMgSU5JVElBTElaRVI6IHN1YiBpbml0aWFsaXplX2xpbmVfbGVuZ3RoX3ZhcnMKICAgIEBtYXhpbXVtX2xpbmVfbGVuZ3RoX2F0X2xldmVsLAogICAgQG1heGltdW1fdGV4dF9sZW5ndGhfYXRfbGV2ZWwsCiAgICAkc3RyZXNzX2xldmVsX2FscGhhLAogICAgJHN0cmVzc19sZXZlbF9iZXRhLAogICAgJGhpZ2hfc3RyZXNzX2xldmVsLAoKICAgICMgVG90YWwgbnVtYmVyIG9mIHNlcXVlbmNlIGl0ZW1zIGluIGEgd2VsZCwgZm9yIHF1aWNrIGNoZWNrcwogICAgIyBJTklUSUFMSVpFUjogd2VsZF9jb250YWluZXJzCiAgICAkdG90YWxfd2VsZF9jb3VudCwKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgU2VjdGlvbiAyOiBXb3JrIGFycmF5cyBmb3IgdGhlIGN1cnJlbnQgYmF0Y2ggb2YgdG9rZW5zLgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgIyBUaGVzZSBhcmUgcmUtaW5pdGlhbGl6ZWQgZm9yIGVhY2ggYmF0Y2ggb2YgY29kZQogICAgIyBJTklUSUFMSVpFUjogc3ViIGluaXRpYWxpemVfYmF0Y2hfdmFyaWFibGVzCiAgICAkbWF4X2luZGV4X3RvX2dvLAogICAgQGJsb2NrX3R5cGVfdG9fZ28sCiAgICBAdHlwZV9zZXF1ZW5jZV90b19nbywKICAgIEBmb3JjZWRfYnJlYWtwb2ludF90b19nbywKICAgIEB0b2tlbl9sZW5ndGhzX3RvX2dvLAogICAgQHN1bW1lZF9sZW5ndGhzX3RvX2dvLAogICAgQGxldmVsc190b19nbywKICAgIEBsZWFkaW5nX3NwYWNlc190b19nbywKICAgIEByZWR1Y2VkX3NwYWNlc190b19nbywKICAgIEBtYXRlX2luZGV4X3RvX2dvLAogICAgQGNpX2xldmVsc190b19nbywKICAgIEBuZXN0aW5nX2RlcHRoX3RvX2dvLAogICAgQG5vYnJlYWtfdG9fZ28sCiAgICBAb2xkX2JyZWFrcG9pbnRfdG9fZ28sCiAgICBAdG9rZW5zX3RvX2dvLAogICAgQEtfdG9fZ28sCiAgICBAdHlwZXNfdG9fZ28sCiAgICBAaW5leHRfdG9fZ28sCiAgICBAcGFyZW50X3NlcW5vX3RvX2dvLAoKICAgICMgZm9yY2VkIGJyZWFrcG9pbnQgdmFyaWFibGVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGJhdGNoIG9mIGNvZGUKICAgICRmb3JjZWRfYnJlYWtwb2ludF9jb3VudCwKICAgICRmb3JjZWRfYnJlYWtwb2ludF91bmRvX2NvdW50LAogICAgJGluZGV4X21heF9mb3JjZWRfYnJlYWssCik7CgpCRUdJTiB7CgogICAgIyBJbmRleCBuYW1lcyBmb3IgdG9rZW4gdmFyaWFibGVzLgogICAgIyBEbyBub3QgY29tYmluZSB3aXRoIG90aGVyIEJFR0lOIGJsb2NrcyAoYzEwMSkuCiAgICBteSAkaSA9IDA7CiAgICB1c2UgY29uc3RhbnQgewogICAgICAgIF9DSV9MRVZFTF8gICAgICAgICAgPT4gJGkrKywKICAgICAgICBfQ1VNVUxBVElWRV9MRU5HVEhfID0+ICRpKyssCiAgICAgICAgX0xJTkVfSU5ERVhfICAgICAgICA9PiAkaSsrLAogICAgICAgIF9MRVZFTF8gICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfVE9LRU5fICAgICAgICAgICAgID0+ICRpKyssCiAgICAgICAgX1RPS0VOX0xFTkdUSF8gICAgICA9PiAkaSsrLAogICAgICAgIF9UWVBFXyAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfVFlQRV9TRVFVRU5DRV8gICAgID0+ICRpKyssCgogICAgICAgICMgTnVtYmVyIG9mIHRva2VuIHZhcmlhYmxlczsgbXVzdCBiZSBsYXN0IGluIGxpc3Q6CiAgICAgICAgX05WQVJTID0+ICRpKyssCiAgICB9Owp9ICMjIGVuZCBCRUdJTgoKQkVHSU4gewoKICAgICMgSW5kZXggbmFtZXMgZm9yICRzZWxmIHZhcmlhYmxlcy4KICAgICMgRG8gbm90IGNvbWJpbmUgd2l0aCBvdGhlciBCRUdJTiBibG9ja3MgKGMxMDEpLgogICAgbXkgJGkgPSAwOwogICAgdXNlIGNvbnN0YW50IHsKICAgICAgICBfcmxpbmVzXyAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfckxMXyAgICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfS2xpbWl0XyAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcmRlcHRoX29mX29wZW5pbmdfc2Vxbm9fICAgPT4gJGkrKywKICAgICAgICBfclNTXyAgICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcklfb3BlbmluZ18gICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcklfY2xvc2luZ18gICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcktfbmV4dF9zZXFub19ieV9LXyAgICAgICAgPT4gJGkrKywKICAgICAgICBfcmJsb2NrX3R5cGVfb2Zfc2Vxbm9fICAgICAgPT4gJGkrKywKICAgICAgICBfcmlzX2FzdWJfYmxvY2tfICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcmlzX3N1Yl9ibG9ja18gICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfS19vcGVuaW5nX2NvbnRhaW5lcl8gICAgICAgPT4gJGkrKywKICAgICAgICBfS19jbG9zaW5nX2NvbnRhaW5lcl8gICAgICAgPT4gJGkrKywKICAgICAgICBfS19vcGVuaW5nX3Rlcm5hcnlfICAgICAgICAgPT4gJGkrKywKICAgICAgICBfS19jbG9zaW5nX3Rlcm5hcnlfICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcktfc2VxdWVuY2VkX3Rva2VuX2xpc3RfICAgPT4gJGkrKywKICAgICAgICBfcnR5cGVfY291bnRfYnlfc2Vxbm9fICAgICAgPT4gJGkrKywKICAgICAgICBfcmlzX2Z1bmN0aW9uX2NhbGxfcGFyZW5fICAgPT4gJGkrKywKICAgICAgICBfcmxlY19jb3VudF9ieV9zZXFub18gICAgICAgPT4gJGkrKywKICAgICAgICBfcmlzX2Jyb2tlbl9jb250YWluZXJfICAgICAgPT4gJGkrKywKICAgICAgICBfcmlzX3Blcm1hbmVudGx5X2Jyb2tlbl8gICAgPT4gJGkrKywKICAgICAgICBfcmJsYW5rX2FuZF9jb21tZW50X2NvdW50XyAgPT4gJGkrKywKICAgICAgICBfcmhhc19saXN0XyAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcmhhc19icm9rZW5fbGlzdF8gICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcmhhc19icm9rZW5fbGlzdF93aXRoX2xlY18gPT4gJGkrKywKICAgICAgICBfcmZpcnN0X2NvbW1hX2xpbmVfaW5kZXhfICAgPT4gJGkrKywKICAgICAgICBfcmhhc19jb2RlX2Jsb2NrXyAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcmhhc19icm9rZW5fY29kZV9ibG9ja18gICAgPT4gJGkrKywKICAgICAgICBfcmhhc190ZXJuYXJ5XyAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcmlzX2V4Y2x1ZGVkX2xwX2NvbnRhaW5lcl8gPT4gJGkrKywKICAgICAgICBfcmxwX29iamVjdF9ieV9zZXFub18gICAgICAgPT4gJGkrKywKICAgICAgICBfcndhbnRfcmVkdWNlZF9jaV8gICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcm5vX3hjaV9ieV9zZXFub18gICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcmJyYWNlX2xlZnRfICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcmlzX2JsaV9jb250YWluZXJfICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcnBhcmVudF9vZl9zZXFub18gICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcmNoaWxkcmVuX29mX3NlcW5vXyAgICAgICAgPT4gJGkrKywKICAgICAgICBfcmlzX2xpc3RfYnlfc2Vxbm9fICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcmlzX2N1ZGRsZWRfY2xvc2luZ19icmFjZV8gPT4gJGkrKywKICAgICAgICBfcmJyZWFrX2NvbnRhaW5lcl8gICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcnNob3J0X25lc3RlZF8gICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfbGVuZ3RoX2Z1bmN0aW9uXyAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfaXNfZW5jb2RlZF9kYXRhXyAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfZmhfdGVlXyAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfc2lua19vYmplY3RfICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfZmlsZV93cml0ZXJfb2JqZWN0XyAgICAgICAgPT4gJGkrKywKICAgICAgICBfdmVydGljYWxfYWxpZ25lcl9vYmplY3RfICAgPT4gJGkrKywKICAgICAgICBfbG9nZ2VyX29iamVjdF8gICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcmFkanVzdGVkX2xldmVsc18gICAgICAgICAgPT4gJGkrKywKCiAgICAgICAgX3Jpc19zcGVjaWFsX2lkZW50aWZpZXJfdG9rZW5fICAgID0+ICRpKyssCiAgICAgICAgX2xhc3Rfb3V0cHV0X3Nob3J0X29wZW5pbmdfdG9rZW5fID0+ICRpKyssCgogICAgICAgIF9sYXN0X2xpbmVfbGVhZGluZ190eXBlXyAgPT4gJGkrKywKICAgICAgICBfbGFzdF9saW5lX2xlYWRpbmdfbGV2ZWxfID0+ICRpKyssCgogICAgICAgIF9hZGRlZF9zZW1pY29sb25fY291bnRfICAgID0+ICRpKyssCiAgICAgICAgX2ZpcnN0X2FkZGVkX3NlbWljb2xvbl9hdF8gPT4gJGkrKywKICAgICAgICBfbGFzdF9hZGRlZF9zZW1pY29sb25fYXRfICA9PiAkaSsrLAoKICAgICAgICBfZGVsZXRlZF9zZW1pY29sb25fY291bnRfICAgID0+ICRpKyssCiAgICAgICAgX2ZpcnN0X2RlbGV0ZWRfc2VtaWNvbG9uX2F0XyA9PiAkaSsrLAogICAgICAgIF9sYXN0X2RlbGV0ZWRfc2VtaWNvbG9uX2F0XyAgPT4gJGkrKywKCiAgICAgICAgX2VtYmVkZGVkX3RhYl9jb3VudF8gICAgPT4gJGkrKywKICAgICAgICBfZmlyc3RfZW1iZWRkZWRfdGFiX2F0XyA9PiAkaSsrLAogICAgICAgIF9sYXN0X2VtYmVkZGVkX3RhYl9hdF8gID0+ICRpKyssCgogICAgICAgIF9maXJzdF90YWJiaW5nX2Rpc2FncmVlbWVudF8gICAgICAgPT4gJGkrKywKICAgICAgICBfbGFzdF90YWJiaW5nX2Rpc2FncmVlbWVudF8gICAgICAgID0+ICRpKyssCiAgICAgICAgX3RhYmJpbmdfZGlzYWdyZWVtZW50X2NvdW50XyAgICAgICA9PiAkaSsrLAogICAgICAgIF9pbl90YWJiaW5nX2Rpc2FncmVlbWVudF8gICAgICAgICAgPT4gJGkrKywKICAgICAgICBfZmlyc3RfYnJhY2VfdGFiYmluZ19kaXNhZ3JlZW1lbnRfID0+ICRpKyssCiAgICAgICAgX2luX2JyYWNlX3RhYmJpbmdfZGlzYWdyZWVtZW50XyAgICA9PiAkaSsrLAoKICAgICAgICBfc2F3X1ZFUlNJT05faW5fdGhpc19maWxlXyA9PiAkaSsrLAogICAgICAgIF9zYXdfdXNlX3N0cmljdF8gICAgICAgICAgID0+ICRpKyssCiAgICAgICAgX3Nhd19FTkRfb3JfREFUQV8gICAgICAgICAgPT4gJGkrKywKCiAgICAgICAgX3JLX3dlbGRfbGVmdF8gICAgICAgICA9PiAkaSsrLAogICAgICAgIF9yS193ZWxkX3JpZ2h0XyAgICAgICAgPT4gJGkrKywKICAgICAgICBfcndlbGRfbGVuX3JpZ2h0X2F0X0tfID0+ICRpKyssCgogICAgICAgIF9yc3BlY2lhbF9zaWRlX2NvbW1lbnRfdHlwZV8gPT4gJGkrKywKCiAgICAgICAgX3JzZXFub19jb250cm9sbGluZ19teV9jaV8gICAgPT4gJGkrKywKICAgICAgICBfcmlzX3NlcW5vX2NvbnRyb2xsaW5nX2NpXyAgICA9PiAkaSsrLAogICAgICAgIF9zYXZlX2xvZ2ZpbGVfICAgICAgICAgICAgICAgID0+ICRpKyssCiAgICAgICAgX21heGltdW1fbGV2ZWxfICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfbWF4aW11bV9sZXZlbF9hdF9saW5lXyAgICAgICA9PiAkaSsrLAogICAgICAgIF9tYXhpbXVtX0JMT0NLX2xldmVsXyAgICAgICAgID0+ICRpKyssCiAgICAgICAgX21heGltdW1fQkxPQ0tfbGV2ZWxfYXRfbGluZV8gPT4gJGkrKywKCiAgICAgICAgX3JLcmFuZ2VfY29kZV93aXRob3V0X2NvbW1lbnRzXyA9PiAkaSsrLAogICAgICAgIF9yYnJlYWtfYmVmb3JlX0tmaXJzdF8gICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcmJyZWFrX2FmdGVyX0tsYXN0XyAgICAgICAgICAgID0+ICRpKyssCiAgICAgICAgX2NvbnZlcmdlZF8gICAgICAgICAgICAgICAgICAgICA9PiAkaSsrLAogICAgICAgIF93YW50X3NlY29uZF9pdGVyYXRpb25fICAgICAgICAgPT4gJGkrKywKCiAgICAgICAgX3JzdGFydGluZ19tdWx0aWxpbmVfcXdfc2Vxbm9fYnlfS18gPT4gJGkrKywKICAgICAgICBfcmVuZGluZ19tdWx0aWxpbmVfcXdfc2Vxbm9fYnlfS18gICA9PiAkaSsrLAogICAgICAgIF9yS3JhbmdlX211bHRpbGluZV9xd19ieV9zZXFub18gICAgID0+ICRpKyssCiAgICAgICAgX3JtdWx0aWxpbmVfcXdfaGFzX2V4dHJhX2xldmVsXyAgICAgPT4gJGkrKywKCiAgICAgICAgX3Jjb2xsYXBzZWRfbGVuZ3RoX2J5X3NlcW5vXyAgICAgICA9PiAkaSsrLAogICAgICAgIF9yYnJlYWtfYmVmb3JlX2NvbnRhaW5lcl9ieV9zZXFub18gPT4gJGkrKywKICAgICAgICBfcm92ZXJyaWRlX2NhYjNfICAgICAgICAgICAgICAgICAgID0+ICRpKyssCiAgICAgICAgX3Jpc19hc3NpZ25lZF9zdHJ1Y3R1cmVfICAgICAgICAgICA9PiAkaSsrLAogICAgICAgIF9yaXNfc2hvcnRfYnJva2VuX2V2YWxfYmxvY2tfICAgICAgPT4gJGkrKywKICAgICAgICBfcmlzX2JhcmVfdHJhaWxpbmdfY29tbWFfYnlfc2Vxbm9fID0+ICRpKyssCgogICAgICAgIF9yc2Vxbm9fbm9uX2luZGVudGluZ19icmFjZV9ieV9peF8gPT4gJGkrKywKICAgICAgICBfcm1heF92ZXJ0aWNhbF90aWdodG5lc3NfICAgICAgICAgID0+ICRpKyssCgogICAgICAgIF9ub192ZXJ0aWNhbF90aWdodG5lc3NfZmxhZ3NfID0+ICRpKyssCiAgICAgICAgX2xhc3RfdnRfdHlwZV8gICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcndhbnRfYXJyb3dfYmVmb3JlX3NlcW5vXyAgICA9PiAkaSsrLAoKICAgICAgICBfcnNlcW5vX2Fycm93X2NhbGxfY2hhaW5fc3RhcnRfID0+ICRpKyssCiAgICAgICAgX3JhcnJvd19jYWxsX2NoYWluXyAgICAgICAgICAgICA9PiAkaSsrLAoKICAgICAgICAjIHRoZXNlIHZhcnMgYXJlIGRlZmluZWQgYWZ0ZXIgY2FsbCB0byByZXNwYWNlIHRva2VuczoKICAgICAgICBfcktfcGFja2FnZV9saXN0XyAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcktfQVRfdW5kZXJzY29yZV9ieV9zdWJfc2Vxbm9fICAgPT4gJGkrKywKICAgICAgICBfcktfZmlyc3Rfc2VsZl9ieV9zdWJfc2Vxbm9fICAgICAgPT4gJGkrKywKICAgICAgICBfcktfYmxlc3NfYnlfc3ViX3NlcW5vXyAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcktfcmV0dXJuX2J5X3N1Yl9zZXFub18gICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcktfd2FudGFycmF5X2J5X3N1Yl9zZXFub18gICAgICAgPT4gJGkrKywKICAgICAgICBfcktfc3ViX2J5X3NlcW5vXyAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcmlzX215X3N1Yl9ieV9zZXFub18gICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcnN1Yl9jYWxsX3BhcmVuX2luZm9fYnlfc2Vxbm9fICAgPT4gJGkrKywKICAgICAgICBfckRPTExBUl91bmRlcnNjb3JlX2J5X3N1Yl9zZXFub18gPT4gJGkrKywKICAgICAgICBfdGhpc19iYXRjaF8gICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKCiAgICAgICAgX0xBU1RfU0VMRl9JTkRFWF8gPT4gJGkgLSAxLAogICAgfTsKfSAjIyBlbmQgQkVHSU4KCkJFR0lOIHsKCiAgICAjIEluZGV4IG5hbWVzIGZvciB2YXJpYWJsZXMgc3RvcmVkIGluIF90aGlzX2JhdGNoXy4KICAgICMgRG8gbm90IGNvbWJpbmUgd2l0aCBvdGhlciBCRUdJTiBibG9ja3MgKGMxMDEpLgogICAgbXkgJGkgPSAwOwogICAgdXNlIGNvbnN0YW50IHsKICAgICAgICBfc3RhcnRpbmdfaW5fcXVvdGVfICAgICAgICAgID0+ICRpKyssCiAgICAgICAgX2VuZGluZ19pbl9xdW90ZV8gICAgICAgICAgICA9PiAkaSsrLAogICAgICAgIF9pc19zdGF0aWNfYmxvY2tfY29tbWVudF8gICAgPT4gJGkrKywKICAgICAgICBfcmlfZmlyc3RfICAgICAgICAgICAgICAgICAgID0+ICRpKyssCiAgICAgICAgX3JpX2xhc3RfICAgICAgICAgICAgICAgICAgICA9PiAkaSsrLAogICAgICAgIF9kb19ub3RfcGFkXyAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcGVha19iYXRjaF9zaXplXyAgICAgICAgICAgID0+ICRpKyssCiAgICAgICAgX2JhdGNoX2NvdW50XyAgICAgICAgICAgICAgICA9PiAkaSsrLAogICAgICAgIF9yaXhfc2Vxbm9fY29udHJvbGxpbmdfY2lfICAgPT4gJGkrKywKICAgICAgICBfYmF0Y2hfQ09ERV90eXBlXyAgICAgICAgICAgID0+ICRpKyssCiAgICAgICAgX3JpX3N0YXJ0aW5nX29uZV9saW5lX2Jsb2NrXyA9PiAkaSsrLAogICAgICAgIF9ydW5tYXRjaGVkX29wZW5pbmdfaW5kZXhlc18gPT4gJGkrKywKICAgIH07Cn0gIyMgZW5kIEJFR0lOCgpCRUdJTiB7CgogICAgIyBTZXF1ZW5jZSBudW1iZXIgYXNzaWduZWQgdG8gdGhlIHJvb3Qgb2Ygc2VxdWVuY2UgdHJlZS4KICAgICMgVGhlIG1pbmltdW0gb2YgdGhlIGFjdHVhbCBzZXF1ZW5jZXMgbnVtYmVycyBpcyA0LCBzbyB3ZSBjYW4gdXNlIDEKICAgIHVzZSBjb25zdGFudCBTRVFfUk9PVCA9PiAxOwoKICAgICMgQ29kZXMgZm9yIGluc2VydGlvbiBhbmQgZGVsZXRpb24gb2YgYmxhbmtzCiAgICB1c2UgY29uc3RhbnQgREVMRVRFID0+IDA7CiAgICB1c2UgY29uc3RhbnQgU1RBQkxFID0+IDE7CiAgICB1c2UgY29uc3RhbnQgSU5TRVJUID0+IDI7CgogICAgIyB3aGl0ZXNwYWNlIGNvZGVzCiAgICB1c2UgY29uc3RhbnQgV1NfWUVTICAgICAgPT4gMTsKICAgIHVzZSBjb25zdGFudCBXU19PUFRJT05BTCA9PiAwOwogICAgdXNlIGNvbnN0YW50IFdTX05PICAgICAgID0+IC0xOwoKICAgICMgVG9rZW4gYm9uZCBzdHJlbmd0aHMuCiAgICB1c2UgY29uc3RhbnQgTk9fQlJFQUsgICAgPT4gMTBfMDAwOwogICAgdXNlIGNvbnN0YW50IFZFUllfU1RST05HID0+IDEwMDsKICAgIHVzZSBjb25zdGFudCBTVFJPTkcgICAgICA9PiAyLjE7CiAgICB1c2UgY29uc3RhbnQgTk9NSU5BTCAgICAgPT4gMS4xOwogICAgdXNlIGNvbnN0YW50IFdFQUsgICAgICAgID0+IDAuODsKICAgIHVzZSBjb25zdGFudCBWRVJZX1dFQUsgICA9PiAwLjU1OwoKICAgICMgdmFsdWVzIGZvciB0ZXN0aW5nIGluZGV4ZXMgaW4gb3V0cHV0IGFycmF5CiAgICB1c2UgY29uc3RhbnQgVU5ERUZJTkVEX0lOREVYID0+IC0xOwoKICAgICMgTWF4aW11bSBudW1iZXIgb2YgbGl0dGxlIG1lc3NhZ2VzOyBwcm9iYWJseSBuZWVkIG5vdCBiZSBjaGFuZ2VkLgogICAgdXNlIGNvbnN0YW50IE1BWF9OQUdfTUVTU0FHRVMgPT4gNjsKCiAgICAjIFRoaXMgaXMgdGhlIGRlY2ltYWwgcmFuZ2Ugb2YgcHJpbnRhYmxlIGNoYXJhY3RlcnMgaW4gQVNDSUkuICBJdCBpcyB1c2VkIHRvCiAgICAjIG1ha2UgcXVpY2sgcHJlbGltaW5hcnkgY2hlY2tzIGJlZm9yZSByZXNvcnRpbmcgdG8gdXNpbmcgYSByZWdleC4KICAgIHVzZSBjb25zdGFudCBPUkRfUFJJTlRBQkxFX01JTiA9PiAzMzsKICAgIHVzZSBjb25zdGFudCBPUkRfUFJJTlRBQkxFX01BWCA9PiAxMjY7CgogICAgIyBJbml0aWFsaXplIGNvbnN0YW50IGhhc2hlcyAuLi4KICAgIG15IEBxOwoKICAgIEBxID0gcXcoID0gKio9ICs9ICo9ICY9IDw8PSAmJj0gLT0gLz0gfD0gPj49IHx8PSAvLz0gLj0gJT0gXj0geD0gKTsKICAgIEBpc19hc3NpZ25tZW50e0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgIyBhIGhhc2ggbmVlZGVkIGJ5IGJyZWFrX2xpc3RzIGZvciBlZmZpY2llbmN5OgogICAgcHVzaCBAcSwgcXd7IDsgPCA+IH4gZiB9OwogICAgQGlzX25vbl9saXN0X3R5cGV7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICBAcSA9IHF3KCBpcyBpZiB1bmxlc3MgYW5kIG9yIGVyciBsYXN0IG5leHQgcmVkbyByZXR1cm4gKTsKICAgIEBpc19pZl91bmxlc3NfYW5kX29yX2xhc3RfbmV4dF9yZWRvX3JldHVybntAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICMgVGhlc2UgYmxvY2sgdHlwZXMgbWF5IGhhdmUgdGV4dCBiZXR3ZWVuIHRoZSBrZXl3b3JkIGFuZCBvcGVuaW5nCiAgICAjIGN1cmx5LiAgTm90ZTogJ2Vsc2UnIGRvZXMgbm90LCBidXQgbXVzdCBiZSBpbmNsdWRlZCB0byBhbGxvdyB0cmFpbGluZwogICAgIyBpZi9lbHNpZiB0ZXh0IHRvIGJlIGFwcGVuZGVkLgogICAgIyBwYXRjaCBmb3IgU1dJVENIL0NBU0U6IGFkZGVkICdjYXNlJyBhbmQgJ3doZW4nCiAgICBAcSA9IHF3KCBpZiBlbHNpZiBlbHNlIHVubGVzcyB3aGlsZSB1bnRpbCBmb3IgZm9yZWFjaCBjYXNlIHdoZW4gY2F0Y2ggKTsKICAgIEBpc19pZl9lbHNpZl9lbHNlX3VubGVzc193aGlsZV91bnRpbF9mb3JfZm9yZWFjaHtAcX0gPQogICAgICAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICMgVGhlc2UgY2FuIGVpdGhlciBoYXZlIHRoZSBCTE9DSyBmb3JtIG9yIHRyYWlsaW5nIG1vZGlmaWVyIGZvcm06CiAgICBAcSA9IHF3KCBpZiB1bmxlc3Mgd2hpbGUgdW50aWwgZm9yIGZvcmVhY2ggKTsKICAgIEBpc19pZl91bmxlc3Nfd2hpbGVfdW50aWxfZm9yX2ZvcmVhY2h7QHF9ID0KICAgICAgKDEpIHggc2NhbGFyKEBxKTsKCiAgICAjIFRoZXNlIGNhbiBoYXZlIHNldmVyYWwgZm9ybXMKICAgIEBxID0gcXcoIGZvciBmb3JlYWNoICk7CiAgICBAaXNfZm9yX2ZvcmVhY2h7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICBAcSA9IHF3KCBsYXN0IG5leHQgcmVkbyByZXR1cm4gKTsKICAgIEBpc19sYXN0X25leHRfcmVkb19yZXR1cm57QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICAjIE1hcCByZWxhdGVkIGJsb2NrIG5hbWVzIGludG8gYSBjb21tb24gbmFtZSB0byBhbGxvdyB2ZXJ0aWNhbCBhbGlnbm1lbnQKICAgICMgdXNlZCBieSBzdWIgbWFrZV9hbGlnbm1lbnRfcGF0dGVybnMuIE5vdGU6IHRoaXMgaXMgbm9ybWFsbHkgdW5jaGFuZ2VkLAogICAgIyBidXQgaXQgY29udGFpbnMgJ2dyZXAnIGFuZCBjYW4gYmUgcmUtaW5pdGlhbGl6ZWQgaW4KICAgICMgc3ViIGluaXRpYWxpemVfZ3JlcF9hbmRfZnJpZW5kcyBpbiBhIHRlc3RpbmcgbW9kZS4KICAgICVibG9ja190eXBlX21hcCA9ICgKICAgICAgICAndW5sZXNzJyAgPT4gJ2lmJywKICAgICAgICAnZWxzZScgICAgPT4gJ2lmJywKICAgICAgICAnZWxzaWYnICAgPT4gJ2lmJywKICAgICAgICAnd2hlbicgICAgPT4gJ2lmJywKICAgICAgICAnZGVmYXVsdCcgPT4gJ2lmJywKICAgICAgICAnY2FzZScgICAgPT4gJ2lmJywKICAgICAgICAnc29ydCcgICAgPT4gJ21hcCcsCiAgICAgICAgJ2dyZXAnICAgID0+ICdtYXAnLAogICAgKTsKCiAgICBAcSA9IHF3KCBpZiB1bmxlc3MgKTsKICAgIEBpc19pZl91bmxlc3N7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICBAcSA9IHF3KCBpZiBlbHNpZiApOwogICAgQGlzX2lmX2Vsc2lme0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgQHEgPSBxdyggaWYgdW5sZXNzIGVsc2lmICk7CiAgICBAaXNfaWZfdW5sZXNzX2Vsc2lme0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgQHEgPSBxdyggaWYgdW5sZXNzIGVsc2lmIGVsc2UgKTsKICAgIEBpc19pZl91bmxlc3NfZWxzaWZfZWxzZXtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgIEBxID0gcXcoIGVsc2lmIGVsc2UgKTsKICAgIEBpc19lbHNpZl9lbHNle0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgQHEgPSBxdyggYW5kIG9yIGVyciApOwogICAgQGlzX2FuZF9vcntAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICMgSWRlbnRpZnkgY2VydGFpbiBvcGVyYXRvcnMgd2hpY2ggb2Z0ZW4gb2NjdXIgaW4gY2hhaW5zLgogICAgIyBOb3RlOiB0aGUgbWludXMgKC0pIGNhdXNlcyBhIHNpZGUgZWZmZWN0IG9mIHBhZGRpbmcgb2YgdGhlIGZpcnN0IGxpbmUgaW4KICAgICMgc29tZXRoaW5nIGxpa2UgdGhpcyAoYnkgc3ViIHNldF9sb2dpY2FsX3BhZGRpbmcpOgogICAgIyAgICBDaGVja2J1dHRvbiA9PiAnVHJhbnNtaXNzaW9uIGNoZWNrZWQnLAogICAgIyAgIC12YXJpYWJsZSAgICA9PiBcJFRSQU5TCiAgICAjIFRoaXMgdXN1YWxseSBpbXByb3ZlcyBhcHBlYXJhbmNlIHNvIGl0IHNlZW1zIG9rLgogICAgQHEgPSBxdyggJiYgfHwgYW5kIG9yIDogPyAuICsgLSAqIC8gKTsKICAgIEBpc19jaGFpbl9vcGVyYXRvcntAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICMgT3BlcmF0b3JzIHRoYXQgdGhlIHVzZXIgY2FuIHJlcXVlc3QgYnJlYWsgYmVmb3JlIG9yIGFmdGVyLgogICAgIyBOb3RlIHRoYXQgc29tZSBhcmUga2V5d29yZHMKICAgIEBhbGxfb3BlcmF0b3JzID0gcXd7CiAgICAgICUgKyAtICogLyB4ICE9ID09ID49IDw9ID1+ICF+IDwgPiB8ICYKICAgICAgPSAqKj0gKz0gKj0gJj0gPDw9ICYmPSAtPSAvPSB8PSA+Pj0gfHw9IC8vPSAuPSAlPSBePSB4PQogICAgICAuIDogPyAmJiB8fCBhbmQgb3IgZXJyIHhvcgogICAgfTsKCiAgICAjIFdlIGNhbiByZW1vdmUgc2VtaWNvbG9ucyBhZnRlciBibG9ja3MgcHJlY2VkZWQgYnkgdGhlc2Uga2V5d29yZHMKICAgIEBxID0gcXcoCiAgICAgIEJFR0lOICAgICBFTkQgICAgICBDSEVDSyBJTklUICAgIEFVVE9MT0FEIERFU1RST1kKICAgICAgVU5JVENIRUNLIGNvbnRpbnVlIGlmICAgIGVsc2lmICAgZWxzZSAgICAgdW5sZXNzCiAgICAgIHdoaWxlICAgICB1bnRpbCAgICBmb3IgICBmb3JlYWNoIGdpdmVuICAgIHdoZW4KICAgICAgZGVmYXVsdAogICAgKTsKICAgIEBpc19ibG9ja193aXRob3V0X3NlbWljb2xvbntAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICMgV2Ugd2lsbCBhbGxvdyBzZW1pY29sb25zIHRvIGJlIGFkZGVkIHdpdGhpbiB0aGVzZSBibG9jayB0eXBlcwogICAgIyBhcyB3ZWxsIGFzIHN1YiBhbmQgcGFja2FnZSBibG9ja3MuCiAgICAjIE5PVEVTOgogICAgIyAxLiBOb3RlIHRoYXQgdGhlc2Uga2V5d29yZHMgYXJlIG9taXR0ZWQ6CiAgICAjICAgICBzd2l0Y2ggY2FzZSBnaXZlbiB3aGVuIGRlZmF1bHQgc29ydCBtYXAgZ3JlcAogICAgIyAyLiBJdCBpcyBhbHNvIG9rIHRvIGFkZCBmb3Igc3ViIGFuZCBwYWNrYWdlIGJsb2NrcyBhbmQgYSBsYWJlbGVkIGJsb2NrCiAgICAjIDMuIEJ1dCBub3Qgb2theSBmb3Igb3RoZXIgcGVybHRpZHkgdHlwZXMgaW5jbHVkaW5nOgogICAgIyAgICAgeyB9IDsgRyB0CiAgICAjIDQuIFRlc3QgZmlsZXM6IGJsa3R5cGUudCwgYmxrdHlwZTEudCwgc2VtaWNvbG9uLnQKICAgIEBxID0gcXcoIEJFR0lOIEVORCBDSEVDSyBJTklUIEFVVE9MT0FEIERFU1RST1kgVU5JVENIRUNLIGNvbnRpbnVlIGlmIGVsc2lmCiAgICAgIGVsc2UgdW5sZXNzIGRvIHdoaWxlIHVudGlsIGV2YWwgZm9yIGZvcmVhY2ggKTsKICAgIEBva190b19hZGRfc2VtaWNvbG9uX2Zvcl9ibG9ja190eXBle0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgIyAnTCcgaXMgdG9rZW4gZm9yIG9wZW5pbmcgeyBhdCBoYXNoIGtleQogICAgQHEgPSBxdzwgTCB7ICggWyA+OwogICAgQGlzX29wZW5pbmdfdHlwZXtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICMgJ1InIGlzIHRva2VuIGZvciBjbG9zaW5nIH0gYXQgaGFzaCBrZXkKICAgIEBxID0gcXc8IFIgfSApIF0gPjsKICAgIEBpc19jbG9zaW5nX3R5cGV7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICBAcSA9IHF3PCB7ICggWyA+OwogICAgQGlzX29wZW5pbmdfdG9rZW57QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICBAcSA9IHF3PCB9ICkgXSA+OwogICAgQGlzX2Nsb3NpbmdfdG9rZW57QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICBAcSA9IHF3KCA/IDogKTsKICAgIEBpc190ZXJuYXJ5e0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgQHEgPSBxdzwgeyAoIFsgPyA+OwogICAgQGlzX29wZW5pbmdfc2VxdWVuY2VfdG9rZW57QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICBAcSA9IHF3PCB9ICkgXSA6ID47CiAgICBAaXNfY2xvc2luZ19zZXF1ZW5jZV90b2tlbntAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICVtYXRjaGluZ190b2tlbiA9ICgKICAgICAgICAneycgPT4gJ30nLAogICAgICAgICcoJyA9PiAnKScsCiAgICAgICAgJ1snID0+ICddJywKICAgICAgICAnPycgPT4gJzonLAoKICAgICAgICAnfScgPT4gJ3snLAogICAgICAgICcpJyA9PiAnKCcsCiAgICAgICAgJ10nID0+ICdbJywKICAgICAgICAnOicgPT4gJz8nLAogICAgKTsKCiAgICAjIGEgaGFzaCBuZWVkZWQgYnkgc3ViIGJyZWFrX2xpc3RzIGZvciBsYWJlbGluZyBjb250YWluZXJzCiAgICBAcSA9IHF3KCBrID0+ICYmIHx8ID8gOiAuICk7CiAgICBAaXNfY29udGFpbmVyX2xhYmVsX3R5cGV7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICBAcSA9IHF3KCBkaWUgY29uZmVzcyBjcm9hayB3YXJuICk7CiAgICBAaXNfZGllX2NvbmZlc3NfY3JvYWtfd2FybntAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgIEBxID0gcXcoIG15IG91ciBsb2NhbCApOwogICAgQGlzX215X291cl9sb2NhbHtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICMgQnJhY2VzIC1iYmh0IGV0YyBtdXN0IGZvbGxvdyB0aGVzZS4gTm90ZTogZXhwZXJpbWVudGF0aW9uIHdpdGgKICAgICMgaW5jbHVkaW5nIGEgc2ltcGxlIGNvbW1hIHNob3dzIHRoYXQgaXQgYWRkcyBsaXR0bGUgYW5kIGNhbiBsZWFkCiAgICAjIHRvIHBvb3IgZm9ybWF0dGluZyBpbiBjb21wbGV4IGxpc3RzLgogICAgQHEgPSBxdyggPSA9PiApOwogICAgQGlzX2VxdWFsX29yX2ZhdF9jb21tYXtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgIEBxID0gcXcoID0+IDsgaCBmICk7CiAgICBwdXNoIEBxLCAnLCc7CiAgICBAaXNfY291bnRlZF90eXBle0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgIyBUb2tlbnMgd2hlcmUgLS1rZWVwLW9sZC1icmVhay14eHggZmxhZ3MgbWFrZSBzb2Z0IGJyZWFrcyBpbnN0ZWFkCiAgICAjIG9mIGhhcmQgYnJlYWtzLiAgU2VlIGIxNDMzIGFuZCBiMTQzNi4KICAgICMgTk9URTogJHR5cGUgaXMgdXNlZCBhcyB0aGUgaGFzaCBrZXkgZm9yIG5vdzsgaWYgb3RoZXIgY29udGFpbmVyIHRva2VucwogICAgIyBhcmUgYWRkZWQgaXQgbWlnaHQgYmUgbmVjZXNzYXJ5IHRvIHVzZSBhIHRva2VuL3R5cGUgbWl4dHVyZS4KICAgIEBxID0gcXcjIC0+ID8gOiAmJiB8fCArIC0gLyAqICM7CiAgICBAaXNfc29mdF9rZWVwX2JyZWFrX3R5cGV7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICAjIHRoZXNlIGZ1bmN0aW9ucyBhbGxvdyBhbiBpZGVudGlmaWVyIGluIHRoZSBpbmRpcmVjdCBvYmplY3Qgc2xvdAogICAgQHEgPSBxdyggcHJpbnQgcHJpbnRmIHNvcnQgZXhlYyBzeXN0ZW0gc2F5ICk7CiAgICBAaXNfaW5kaXJlY3Rfb2JqZWN0X3Rha2Vye0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgIyBEZWZpbmUgaGVyZSB0b2tlbnMgd2hpY2ggbWF5IGZvbGxvdyB0aGUgY2xvc2luZyBicmFjZSBvZiBhIGRvIHN0YXRlbWVudAogICAgIyBvbiB0aGUgc2FtZSBsaW5lLCBhcyBpbjoKICAgICMgICB9IHdoaWxlICggJHNvbWV0aGluZyk7CiAgICBteSBAZG9mID0gcXcoIHVudGlsIHdoaWxlIHVubGVzcyBpZiA7IDogKTsKICAgIHB1c2ggQGRvZiwgJywnOwogICAgQGlzX2RvX2ZvbGxvd2Vye0Bkb2Z9ID0gKDEpIHggc2NhbGFyKEBkb2YpOwoKICAgICMgd2hhdCBjYW4gZm9sbG93IGEgbXVsdGktbGluZSBhbm9ueW1vdXMgc3ViIGRlZmluaXRpb24gY2xvc2luZyBjdXJseToKICAgIG15IEBhc2YgPSBxdyMgOyA6ID0+IG9yIGFuZCAgJiYgfHwgfn4gIX5+ICkgIzsKICAgIHB1c2ggQGFzZiwgJywnOwogICAgQGlzX2Fub25fc3ViX2JyYWNlX2ZvbGxvd2Vye0Bhc2Z9ID0gKDEpIHggc2NhbGFyKEBhc2YpOwoKICAgICMgd2hhdCBjYW4gZm9sbG93IGEgb25lLWxpbmUgYW5vbnltb3VzIHN1YiBjbG9zaW5nIGN1cmx5OgogICAgIyBvbmUtbGluZSBhbm9ueW1vdXMgc3VicyBhbHNvIGhhdmUgJ10nIGhlcmUuLi4KICAgICMgc2VlIHRrMy50IGFuZCBQUC5wbQogICAgbXkgQGFzZjEgPSBxdyMgIDsgOiA9PiBvciBhbmQgICYmIHx8ICkgXSB+fiAhfn4gIzsKICAgIHB1c2ggQGFzZjEsICcsJzsKICAgIEBpc19hbm9uX3N1Yl8xX2JyYWNlX2ZvbGxvd2Vye0Bhc2YxfSA9ICgxKSB4IHNjYWxhcihAYXNmMSk7CgogICAgIyBXaGF0IGNhbiBmb2xsb3cgYSBjbG9zaW5nIGN1cmx5IG9mIGEgYmxvY2sKICAgICMgd2hpY2ggaXMgbm90IGFuIGlmL2Vsc2lmL2Vsc2UvZG8vc29ydC9tYXAvZ3JlcC9ldmFsL3N1YgogICAgIyBUZXN0ZmlsZXM6ICdUb29sYmFyLnBtJywgJ01lbnViYXIucG0nLCBibGVzcy50LCAnM3J1bGVzLnBsJwogICAgbXkgQG9iZiA9IHF3IyAgOyA6ID0+IG9yIGFuZCAgJiYgfHwgKSAjOwogICAgcHVzaCBAb2JmLCAnLCc7CiAgICBAaXNfb3RoZXJfYnJhY2VfZm9sbG93ZXJ7QG9iZn0gPSAoMSkgeCBzY2FsYXIoQG9iZik7CgogICAgIyAnayc9YnVpbHRpbiBrZXl3b3JkLCAnVSc9dXNlciBkZWZpbmVkIHN1YiwgJ3cnPXVua25vd24gYmFyZXdvcmQKICAgIEBxID0gcXcoIGsgdyBVICk7CiAgICBAaXNfa3dVe0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgIyByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2ggb3BlcmF0b3JzCiAgICBAcSA9IHF3KCA9fiAhfik7CiAgICBAaXNfcmVfbWF0Y2hfb3B7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICBAcSA9IHF3ICggbXkgc3RhdGUgb3VyICk7CiAgICBAaXNfbXlfc3RhdGVfb3Vye0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgIyBUaGVzZSBrZXl3b3JkcyBoYXZlIHByb3RvdHlwZXMgd2hpY2ggYWxsb3cgYSBzcGVjaWFsIGxlYWRpbmcgaXRlbQogICAgIyBmb2xsb3dlZCBieSBhIGxpc3QKICAgIEBxID0KICAgICAgcXcoIGNobW9kIGZvcm1saW5lIGdyZXAgam9pbiBraWxsIG1hcCBwYWNrIHByaW50ZiBwdXNoIHNwcmludGYgdW5zaGlmdCApOwogICAgQGlzX2tleXdvcmRfd2l0aF9zcGVjaWFsX2xlYWRpbmdfdGVybXtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKfSAjIyBlbmQgQkVHSU4KCnsgICAgIyMgYmVnaW4gY2xvc3VyZSB0byBjb3VudCBpbnN0YW5jZXMKCiAgICAjIG1ldGhvZHMgdG8gY291bnQgaW5zdGFuY2VzCiAgICBteSAkX2NvdW50ID0gMDsKICAgIHN1YiBfaW5jcmVtZW50X2NvdW50IHsgcmV0dXJuICsrJF9jb3VudCB9CiAgICBzdWIgX2RlY3JlbWVudF9jb3VudCB7IHJldHVybiAtLSRfY291bnQgfQp9ICMjIGVuZCBjbG9zdXJlIHRvIGNvdW50IGluc3RhbmNlcwoKc3ViIG5ldyB7CgogICAgbXkgKCAkY2xhc3MsIEBhcmdsaXN0ICkgPSBAXzsKICAgIGlmICggQGFyZ2xpc3QgJSAyICkgeyBjcm9hayAiT2RkIG51bWJlciBvZiBpdGVtcyBpbiBhcmcgaGFzaCBsaXN0XG4iIH0KCiAgICAjIHdlIGFyZSBnaXZlbiBhbiBvYmplY3Qgd2l0aCBhIHdyaXRlX2xpbmUoKSBtZXRob2QgdG8gdGFrZSBsaW5lcwogICAgbXkgJWRlZmF1bHRzID0gKAogICAgICAgIHNpbmtfb2JqZWN0ICAgICAgICA9PiB1bmRlZiwKICAgICAgICBkaWFnbm9zdGljc19vYmplY3QgPT4gdW5kZWYsCiAgICAgICAgbG9nZ2VyX29iamVjdCAgICAgID0+IHVuZGVmLAogICAgICAgIGxlbmd0aF9mdW5jdGlvbiAgICA9PiB1bmRlZiwKICAgICAgICBpc19lbmNvZGVkX2RhdGEgICAgPT4gRU1QVFlfU1RSSU5HLAogICAgICAgIGZoX3RlZSAgICAgICAgICAgICA9PiB1bmRlZiwKICAgICk7CiAgICBteSAlYXJncyA9ICggJWRlZmF1bHRzLCBAYXJnbGlzdCApOwoKICAgIG15ICRsZW5ndGhfZnVuY3Rpb24gICAgPSAkYXJnc3tsZW5ndGhfZnVuY3Rpb259OwogICAgbXkgJGlzX2VuY29kZWRfZGF0YSAgICA9ICRhcmdze2lzX2VuY29kZWRfZGF0YX07CiAgICBteSAkZmhfdGVlICAgICAgICAgICAgID0gJGFyZ3N7ZmhfdGVlfTsKICAgIG15ICRsb2dnZXJfb2JqZWN0ICAgICAgPSAkYXJnc3tsb2dnZXJfb2JqZWN0fTsKICAgIG15ICRkaWFnbm9zdGljc19vYmplY3QgPSAkYXJnc3tkaWFnbm9zdGljc19vYmplY3R9OwoKICAgICMgd2UgY3JlYXRlIGFub3RoZXIgb2JqZWN0IHdpdGggYSBnZXRfbGluZSgpIGFuZCBwZWVrX2FoZWFkKCkgbWV0aG9kCiAgICBteSAkc2lua19vYmplY3QgPSAkYXJnc3tzaW5rX29iamVjdH07CiAgICBteSAkZmlsZV93cml0ZXJfb2JqZWN0ID0KICAgICAgUGVybDo6VGlkeTo6RmlsZVdyaXRlci0+bmV3KCAkc2lua19vYmplY3QsICRyT3B0cywgJGxvZ2dlcl9vYmplY3QgKTsKCiAgICAjIGluaXRpYWxpemUgY2xvc3VyZSB2YXJpYWJsZXMuLi4KICAgIHNldF9sb2dnZXJfb2JqZWN0KCRsb2dnZXJfb2JqZWN0KTsKICAgIHNldF9kaWFnbm9zdGljc19vYmplY3QoJGRpYWdub3N0aWNzX29iamVjdCk7CiAgICBpbml0aWFsaXplX2xwX3ZhcnMoKTsKICAgIGluaXRpYWxpemVfY3NjX3ZhcnMoKTsKICAgIGluaXRpYWxpemVfYnJlYWtfbGlzdHMoKTsKICAgIGluaXRpYWxpemVfdW5kb19jaSgpOwogICAgaW5pdGlhbGl6ZV9wcm9jZXNzX2xpbmVfb2ZfQ09ERSgpOwogICAgaW5pdGlhbGl6ZV9ncmluZF9iYXRjaF9vZl9DT0RFKCk7CiAgICBpbml0aWFsaXplX2dldF9maW5hbF9pbmRlbnRhdGlvbigpOwogICAgaW5pdGlhbGl6ZV9wb3N0cG9uZWRfYnJlYWtwb2ludCgpOwogICAgaW5pdGlhbGl6ZV9iYXRjaF92YXJpYWJsZXMoKTsKICAgIGluaXRpYWxpemVfd3JpdGVfbGluZSgpOwoKICAgIG15ICR2ZXJ0aWNhbF9hbGlnbmVyX29iamVjdCA9IFBlcmw6OlRpZHk6OlZlcnRpY2FsQWxpZ25lci0+bmV3KAogICAgICAgIHJPcHRzICAgICAgICAgICAgICA9PiAkck9wdHMsCiAgICAgICAgZmlsZV93cml0ZXJfb2JqZWN0ID0+ICRmaWxlX3dyaXRlcl9vYmplY3QsCiAgICAgICAgbG9nZ2VyX29iamVjdCAgICAgID0+ICRsb2dnZXJfb2JqZWN0LAogICAgICAgIGRpYWdub3N0aWNzX29iamVjdCA9PiAkZGlhZ25vc3RpY3Nfb2JqZWN0LAogICAgKTsKCiAgICB3cml0ZV9sb2dmaWxlX2VudHJ5KCJcblN0YXJ0aW5nIHRva2VuaXphdGlvbiBwYXNzLi4uXG4iKTsKCiAgICBpZiAoICRyT3B0cy0+eydlbnRhYi1sZWFkaW5nLXdoaXRlc3BhY2UnfSApIHsKICAgICAgICB3cml0ZV9sb2dmaWxlX2VudHJ5KAoiTGVhZGluZyB3aGl0ZXNwYWNlIHdpbGwgYmUgZW50YWJiZWQgd2l0aCAkck9wdHMtPnsnZW50YWItbGVhZGluZy13aGl0ZXNwYWNlJ30gc3BhY2VzIHBlciB0YWJcbiIKICAgICAgICApOwogICAgfQogICAgZWxzaWYgKCAkck9wdHMtPnsndGFicyd9ICkgewogICAgICAgIHdyaXRlX2xvZ2ZpbGVfZW50cnkoIkluZGVudGF0aW9uIHdpbGwgYmUgd2l0aCBhIHRhYiBjaGFyYWN0ZXJcbiIpOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgd3JpdGVfbG9nZmlsZV9lbnRyeSgKICAgICAgICAgICAgIkluZGVudGF0aW9uIHdpbGwgYmUgd2l0aCAkck9wdHMtPnsnaW5kZW50LWNvbHVtbnMnfSBzcGFjZXNcbiIpOwogICAgfQoKICAgICMgSW5pdGlhbGl6ZSB0aGUgJHNlbGYgYXJyYXkgcmVmZXJlbmNlLgogICAgIyBUbyBhZGQgYW4gaXRlbSwgZmlyc3QgYWRkIGEgY29uc3RhbnQgaW5kZXggaW4gdGhlIEJFR0lOIGJsb2NrIGFib3ZlLgogICAgbXkgJHNlbGYgPSBbXTsKICAgIGJsZXNzICRzZWxmLCAkY2xhc3M7CgogICAgIyBCYXNpYyBkYXRhIHN0cnVjdHVyZXMuLi4KICAgICRzZWxmLT5bX3JsaW5lc19dID0gW107ICAgICMgPSByZWYgdG8gYXJyYXkgb2YgbGluZXMgb2YgdGhlIGZpbGUKCiAgICAjICdyTEwnID0gcmVmZXJlbmNlIHRvIHRoZSBjb250aW51b3VzIGxpbmVyIGFycmF5IG9mIGFsbCB0b2tlbnMgaW4gYSBmaWxlLgogICAgIyAnTEwnIHN0YW5kcyBmb3IgJ0xpbmtlZCBMaXN0Jy4gVXNpbmcgYSBsaW5rZWQgbGlzdCB3YXMgYSBkaXNhc3RlciwgYnV0CiAgICAjICdMTCcgc3R1Y2sgYmVjYXVzZSBpdCBpcyBlYXN5IHRvIHR5cGUuICBUaGUgJ3JMTCcgYXJyYXkgaXMgdXBkYXRlZAogICAgIyBieSBzdWIgJ3Jlc3BhY2VfdG9rZW5zJyBkdXJpbmcgcmVmb3JtYXR0aW5nLiAgVGhlIGluZGV4ZXMgaW4gJ3JMTCcgYmVnaW4KICAgICMgd2l0aCAnJEsnIGJ5IGNvbnZlbnRpb24uCiAgICAkc2VsZi0+W19yTExfXSAgICA9IFtdOwogICAgJHNlbGYtPltfS2xpbWl0X10gPSB1bmRlZjsgICAgIyA9IG1heGltdW0gSyBpbmRleCBmb3IgckxMLgoKICAgICMgSW5kZXhlcyBpbnRvIHRoZSByTEwgbGlzdAogICAgJHNlbGYtPltfS19vcGVuaW5nX2NvbnRhaW5lcl9dID0ge307CiAgICAkc2VsZi0+W19LX2Nsb3NpbmdfY29udGFpbmVyX10gPSB7fTsKICAgICRzZWxmLT5bX0tfb3BlbmluZ190ZXJuYXJ5X10gICA9IHt9OwogICAgJHNlbGYtPltfS19jbG9zaW5nX3Rlcm5hcnlfXSAgID0ge307CgogICAgIyBBIGxpc3Qgb2YgaW5kZXggSyBvZiBzZXF1ZW5jZWQgdG9rZW5zIHRvIGFsbG93IGxvb3BzIG92ZXIgdGhlbSBhbGwKICAgICRzZWxmLT5bX3JLX3NlcXVlbmNlZF90b2tlbl9saXN0X10gPSBbXTsKCiAgICAjICdyU1MnIGlzIHRoZSAnU2lnbmVkIFNlcXVlbmNlJyBsaXN0LCBhIGNvbnRpbnVvdXMgbGlzdCBvZiBhbGwgc2VxdWVuY2UKICAgICMgbnVtYmVycyB3aXRoICsgb3IgLSBpbmRpY2F0aW5nIG9wZW5pbmcgb3IgY2xvc2luZy4gVGhpcyBsaXN0IHJlcHJlc2VudHMKICAgICMgdGhlIGVudGlyZSBjb250YWluZXIgdHJlZSBhbmQgaXMgaW52YXJpYW50IHVuZGVyIHJlZm9ybWF0dGluZy4gIEl0IGNhbiBiZQogICAgIyB1c2VkIHRvIHF1aWNrbHkgdHJhdmVsIHRocm91Z2ggdGhlIHRyZWUuICBJbmRleGVzIGluIHRoZSByU1MgYXJyYXkgYmVnaW4KICAgICMgd2l0aCAnJEknIGJ5IGNvbnZlbnRpb24uCiAgICAkc2VsZi0+W19yU1NfXSAgICAgICAgICAgICAgICA9IFtdOwogICAgJHNlbGYtPltfcklfb3BlbmluZ19dICAgICAgICAgPSBbXTsKICAgICRzZWxmLT5bX3JJX2Nsb3NpbmdfXSAgICAgICAgID0gW107CiAgICAkc2VsZi0+W19yS19uZXh0X3NlcW5vX2J5X0tfXSA9IFtdOwoKICAgICMgQXJyYXlzIHRvIGhlbHAgdHJhdmVyc2UgdGhlIHRyZWUKICAgICRzZWxmLT5bX3JkZXB0aF9vZl9vcGVuaW5nX3NlcW5vX10gPSBbXTsKICAgICRzZWxmLT5bX3JibG9ja190eXBlX29mX3NlcW5vX10gICAgPSB7fTsKICAgICRzZWxmLT5bX3Jpc19hc3ViX2Jsb2NrX10gICAgICAgICAgPSB7fTsKICAgICRzZWxmLT5bX3Jpc19zdWJfYmxvY2tfXSAgICAgICAgICAgPSB7fTsKCiAgICAjIFZhcmlhYmxlcyBmb3IgLS13YXJuLW1pc21hdGNoZWQtYXJncyBhbmQKICAgICMgICAgICAgICAgICAgICAtLWR1bXAtbWlzbWF0Y2hlZC1hcmdzCiAgICAjICAgICAgICAgICAgICAgLS1kdW1wLW1pc21hdGNoZWQtcmV0dXJucwogICAgIyAgICAgICAgICAgICAgIC0td2Fybi1taXNtYXRjaGVkLXJldHVybnMKICAgICRzZWxmLT5bX3JLX3BhY2thZ2VfbGlzdF9dICAgICAgICAgICAgICAgICA9IFtdOwogICAgJHNlbGYtPltfcktfQVRfdW5kZXJzY29yZV9ieV9zdWJfc2Vxbm9fXSAgID0ge307CiAgICAkc2VsZi0+W19yS19maXJzdF9zZWxmX2J5X3N1Yl9zZXFub19dICAgICAgPSB7fTsKICAgICRzZWxmLT5bX3JLX2JsZXNzX2J5X3N1Yl9zZXFub19dICAgICAgICAgICA9IHt9OwogICAgJHNlbGYtPltfcktfcmV0dXJuX2J5X3N1Yl9zZXFub19dICAgICAgICAgID0ge307CiAgICAkc2VsZi0+W19yS193YW50YXJyYXlfYnlfc3ViX3NlcW5vX10gICAgICAgPSB7fTsKICAgICRzZWxmLT5bX3JzdWJfY2FsbF9wYXJlbl9pbmZvX2J5X3NlcW5vX10gICA9IHt9OwogICAgJHNlbGYtPltfckRPTExBUl91bmRlcnNjb3JlX2J5X3N1Yl9zZXFub19dID0ge307CiAgICAkc2VsZi0+W19yS19zdWJfYnlfc2Vxbm9fXSAgICAgICAgICAgICAgICAgPSB7fTsKICAgICRzZWxmLT5bX3Jpc19teV9zdWJfYnlfc2Vxbm9fXSAgICAgICAgICAgICA9IHt9OwogICAgJHNlbGYtPltfdGhpc19iYXRjaF9dICAgICAgICAgICAgICAgICAgICAgID0gW107CgogICAgIyBNb3N0bHkgbGlzdCBjaGFyYWN0ZXJpc3RpY3MgYW5kIHByb2Nlc3NpbmcgZmxhZ3MKICAgICRzZWxmLT5bX3J0eXBlX2NvdW50X2J5X3NlcW5vX10gICAgICA9IHt9OwogICAgJHNlbGYtPltfcmlzX2Z1bmN0aW9uX2NhbGxfcGFyZW5fXSAgID0ge307CiAgICAkc2VsZi0+W19ybGVjX2NvdW50X2J5X3NlcW5vX10gICAgICAgPSB7fTsKICAgICRzZWxmLT5bX3Jpc19icm9rZW5fY29udGFpbmVyX10gICAgICA9IHt9OwogICAgJHNlbGYtPltfcmlzX3Blcm1hbmVudGx5X2Jyb2tlbl9dICAgID0ge307CiAgICAkc2VsZi0+W19yYmxhbmtfYW5kX2NvbW1lbnRfY291bnRfXSAgPSB7fTsKICAgICRzZWxmLT5bX3JoYXNfbGlzdF9dICAgICAgICAgICAgICAgICA9IHt9OwogICAgJHNlbGYtPltfcmhhc19icm9rZW5fbGlzdF9dICAgICAgICAgID0ge307CiAgICAkc2VsZi0+W19yaGFzX2Jyb2tlbl9saXN0X3dpdGhfbGVjX10gPSB7fTsKICAgICRzZWxmLT5bX3JmaXJzdF9jb21tYV9saW5lX2luZGV4X10gICA9IHt9OwogICAgJHNlbGYtPltfcmhhc19jb2RlX2Jsb2NrX10gICAgICAgICAgID0ge307CiAgICAkc2VsZi0+W19yaGFzX2Jyb2tlbl9jb2RlX2Jsb2NrX10gICAgPSB7fTsKICAgICRzZWxmLT5bX3JoYXNfdGVybmFyeV9dICAgICAgICAgICAgICA9IHt9OwogICAgJHNlbGYtPltfcmlzX2V4Y2x1ZGVkX2xwX2NvbnRhaW5lcl9dID0ge307CiAgICAkc2VsZi0+W19ybHBfb2JqZWN0X2J5X3NlcW5vX10gICAgICAgPSB7fTsKICAgICRzZWxmLT5bX3J3YW50X3JlZHVjZWRfY2lfXSAgICAgICAgICA9IHt9OwogICAgJHNlbGYtPltfcm5vX3hjaV9ieV9zZXFub19dICAgICAgICAgID0ge307CiAgICAkc2VsZi0+W19yYnJhY2VfbGVmdF9dICAgICAgICAgICAgICAgPSB7fTsKICAgICRzZWxmLT5bX3Jpc19ibGlfY29udGFpbmVyX10gICAgICAgICA9IHt9OwogICAgJHNlbGYtPltfcnBhcmVudF9vZl9zZXFub19dICAgICAgICAgID0ge307CiAgICAkc2VsZi0+W19yY2hpbGRyZW5fb2Zfc2Vxbm9fXSAgICAgICAgPSB7fTsKICAgICRzZWxmLT5bX3Jpc19saXN0X2J5X3NlcW5vX10gICAgICAgICA9IHt9OwogICAgJHNlbGYtPltfcmlzX2N1ZGRsZWRfY2xvc2luZ19icmFjZV9dID0ge307CgogICAgJHNlbGYtPltfcmJyZWFrX2NvbnRhaW5lcl9dID0ge307ICAgICAgICAgICAgICAgICAjIHByZXZlbnQgb25lLWxpbmUgYmxvY2tzCiAgICAkc2VsZi0+W19yc2hvcnRfbmVzdGVkX10gICAgPSB7fTsgICAgICAgICAgICAgICAgICMgYmxvY2tzIG5vdCBmb3JjZWQgb3BlbgogICAgJHNlbGYtPltfbGVuZ3RoX2Z1bmN0aW9uX10gID0gJGxlbmd0aF9mdW5jdGlvbjsKICAgICRzZWxmLT5bX2lzX2VuY29kZWRfZGF0YV9dICA9ICRpc19lbmNvZGVkX2RhdGE7CgogICAgIyBTb21lIG9iamVjdHMuLi4KICAgICRzZWxmLT5bX2ZoX3RlZV9dICAgICAgICAgICAgICAgICAgPSAkZmhfdGVlOwogICAgJHNlbGYtPltfc2lua19vYmplY3RfXSAgICAgICAgICAgICA9ICRzaW5rX29iamVjdDsKICAgICRzZWxmLT5bX2ZpbGVfd3JpdGVyX29iamVjdF9dICAgICAgPSAkZmlsZV93cml0ZXJfb2JqZWN0OwogICAgJHNlbGYtPltfdmVydGljYWxfYWxpZ25lcl9vYmplY3RfXSA9ICR2ZXJ0aWNhbF9hbGlnbmVyX29iamVjdDsKICAgICRzZWxmLT5bX2xvZ2dlcl9vYmplY3RfXSAgICAgICAgICAgPSAkbG9nZ2VyX29iamVjdDsKCiAgICAjIE1lbW9yeSBvZiBwcm9jZXNzZWQgdGV4dC4uLgogICAgJHNlbGYtPltfcmlzX3NwZWNpYWxfaWRlbnRpZmllcl90b2tlbl9dICAgID0ge307CiAgICAkc2VsZi0+W19sYXN0X2xpbmVfbGVhZGluZ19sZXZlbF9dICAgICAgICAgPSAwOwogICAgJHNlbGYtPltfbGFzdF9saW5lX2xlYWRpbmdfdHlwZV9dICAgICAgICAgID0gJyMnOwogICAgJHNlbGYtPltfbGFzdF9vdXRwdXRfc2hvcnRfb3BlbmluZ190b2tlbl9dID0gMDsKICAgICRzZWxmLT5bX2FkZGVkX3NlbWljb2xvbl9jb3VudF9dICAgICAgICAgICA9IDA7CiAgICAkc2VsZi0+W19maXJzdF9hZGRlZF9zZW1pY29sb25fYXRfXSAgICAgICAgPSAwOwogICAgJHNlbGYtPltfbGFzdF9hZGRlZF9zZW1pY29sb25fYXRfXSAgICAgICAgID0gMDsKICAgICRzZWxmLT5bX2RlbGV0ZWRfc2VtaWNvbG9uX2NvdW50X10gICAgICAgICA9IDA7CiAgICAkc2VsZi0+W19maXJzdF9kZWxldGVkX3NlbWljb2xvbl9hdF9dICAgICAgPSAwOwogICAgJHNlbGYtPltfbGFzdF9kZWxldGVkX3NlbWljb2xvbl9hdF9dICAgICAgID0gMDsKICAgICRzZWxmLT5bX2VtYmVkZGVkX3RhYl9jb3VudF9dICAgICAgICAgICAgICA9IDA7CiAgICAkc2VsZi0+W19maXJzdF9lbWJlZGRlZF90YWJfYXRfXSAgICAgICAgICAgPSAwOwogICAgJHNlbGYtPltfbGFzdF9lbWJlZGRlZF90YWJfYXRfXSAgICAgICAgICAgID0gMDsKICAgICRzZWxmLT5bX2ZpcnN0X3RhYmJpbmdfZGlzYWdyZWVtZW50X10gICAgICA9IDA7CiAgICAkc2VsZi0+W19sYXN0X3RhYmJpbmdfZGlzYWdyZWVtZW50X10gICAgICAgPSAwOwogICAgJHNlbGYtPltfdGFiYmluZ19kaXNhZ3JlZW1lbnRfY291bnRfXSAgICAgID0gMDsKICAgICRzZWxmLT5bX2luX3RhYmJpbmdfZGlzYWdyZWVtZW50X10gICAgICAgICA9IDA7CiAgICAkc2VsZi0+W19zYXdfVkVSU0lPTl9pbl90aGlzX2ZpbGVfXSAgICAgICAgPSAhJHJPcHRzLT57J3Bhc3MtdmVyc2lvbi1saW5lJ307CiAgICAkc2VsZi0+W19zYXdfdXNlX3N0cmljdF9dICAgICAgICAgICAgICAgICAgPSAwOwogICAgJHNlbGYtPltfc2F3X0VORF9vcl9EQVRBX10gICAgICAgICAgICAgICAgID0gMDsKICAgICRzZWxmLT5bX2ZpcnN0X2JyYWNlX3RhYmJpbmdfZGlzYWdyZWVtZW50X10gPSB1bmRlZjsKICAgICRzZWxmLT5bX2luX2JyYWNlX3RhYmJpbmdfZGlzYWdyZWVtZW50X10gICAgPSB1bmRlZjsKCiAgICAjIEhhc2hlcyByZWxhdGVkIHRvIGNvbnRhaW5lciB3ZWxkaW5nLi4uCiAgICAkc2VsZi0+W19yYWRqdXN0ZWRfbGV2ZWxzX10gPSBbXTsKCiAgICAjIFdlbGQgZGF0YSBzdHJ1Y3R1cmVzCiAgICAkc2VsZi0+W19yS193ZWxkX2xlZnRfXSAgICAgICAgID0ge307CiAgICAkc2VsZi0+W19yS193ZWxkX3JpZ2h0X10gICAgICAgID0ge307CiAgICAkc2VsZi0+W19yd2VsZF9sZW5fcmlnaHRfYXRfS19dID0ge307CgogICAgIyAteGNpIHN0dWZmCiAgICAkc2VsZi0+W19yc2Vxbm9fY29udHJvbGxpbmdfbXlfY2lfXSA9IHt9OwogICAgJHNlbGYtPltfcmlzX3NlcW5vX2NvbnRyb2xsaW5nX2NpX10gPSB7fTsKCiAgICAkc2VsZi0+W19yc3BlY2lhbF9zaWRlX2NvbW1lbnRfdHlwZV9dICA9IHt9OwogICAgJHNlbGYtPltfbWF4aW11bV9sZXZlbF9dICAgICAgICAgICAgICAgPSAwOwogICAgJHNlbGYtPltfbWF4aW11bV9sZXZlbF9hdF9saW5lX10gICAgICAgPSAwOwogICAgJHNlbGYtPltfbWF4aW11bV9CTE9DS19sZXZlbF9dICAgICAgICAgPSAwOwogICAgJHNlbGYtPltfbWF4aW11bV9CTE9DS19sZXZlbF9hdF9saW5lX10gPSAwOwoKICAgICRzZWxmLT5bX3JLcmFuZ2VfY29kZV93aXRob3V0X2NvbW1lbnRzX10gPSBbXTsKICAgICRzZWxmLT5bX3JicmVha19iZWZvcmVfS2ZpcnN0X10gICAgICAgICAgPSB7fTsKICAgICRzZWxmLT5bX3JicmVha19hZnRlcl9LbGFzdF9dICAgICAgICAgICAgPSB7fTsKICAgICRzZWxmLT5bX2NvbnZlcmdlZF9dICAgICAgICAgICAgICAgICAgICAgPSAwOwogICAgJHNlbGYtPltfd2FudF9zZWNvbmRfaXRlcmF0aW9uX10gICAgICAgICA9IDA7CgogICAgIyBxdyBzdHVmZgogICAgJHNlbGYtPltfcnN0YXJ0aW5nX211bHRpbGluZV9xd19zZXFub19ieV9LX10gPSB7fTsKICAgICRzZWxmLT5bX3JlbmRpbmdfbXVsdGlsaW5lX3F3X3NlcW5vX2J5X0tfXSAgID0ge307CiAgICAkc2VsZi0+W19yS3JhbmdlX211bHRpbGluZV9xd19ieV9zZXFub19dICAgICA9IHt9OwogICAgJHNlbGYtPltfcm11bHRpbGluZV9xd19oYXNfZXh0cmFfbGV2ZWxfXSAgICAgPSB7fTsKCiAgICAkc2VsZi0+W19yY29sbGFwc2VkX2xlbmd0aF9ieV9zZXFub19dICAgICAgID0ge307CiAgICAkc2VsZi0+W19yYnJlYWtfYmVmb3JlX2NvbnRhaW5lcl9ieV9zZXFub19dID0ge307CiAgICAkc2VsZi0+W19yb3ZlcnJpZGVfY2FiM19dICAgICAgICAgICAgICAgICAgID0ge307CiAgICAkc2VsZi0+W19yaXNfYXNzaWduZWRfc3RydWN0dXJlX10gICAgICAgICAgID0ge307CiAgICAkc2VsZi0+W19yaXNfc2hvcnRfYnJva2VuX2V2YWxfYmxvY2tfXSAgICAgID0ge307CiAgICAkc2VsZi0+W19yaXNfYmFyZV90cmFpbGluZ19jb21tYV9ieV9zZXFub19dID0ge307CgogICAgJHNlbGYtPltfcnNlcW5vX25vbl9pbmRlbnRpbmdfYnJhY2VfYnlfaXhfXSA9IHt9OwogICAgJHNlbGYtPltfcm1heF92ZXJ0aWNhbF90aWdodG5lc3NfXSAgICAgICAgICA9IHt9OwoKICAgICRzZWxmLT5bX25vX3ZlcnRpY2FsX3RpZ2h0bmVzc19mbGFnc19dID0gMDsKICAgICRzZWxmLT5bX2xhc3RfdnRfdHlwZV9dICAgICAgICAgICAgICAgID0gMDsKICAgICRzZWxmLT5bX3J3YW50X2Fycm93X2JlZm9yZV9zZXFub19dICAgID0ge307CgogICAgJHNlbGYtPltfcnNlcW5vX2Fycm93X2NhbGxfY2hhaW5fc3RhcnRfXSA9IHt9OwogICAgJHNlbGYtPltfcmFycm93X2NhbGxfY2hhaW5fXSAgICAgICAgICAgICA9IHt9OwoKICAgICRzZWxmLT5bX3NhdmVfbG9nZmlsZV9dID0KICAgICAgZGVmaW5lZCgkbG9nZ2VyX29iamVjdCkgJiYgJGxvZ2dlcl9vYmplY3QtPmdldF9zYXZlX2xvZ2ZpbGUoKTsKCiAgICAjIEJlIHN1cmUgYWxsIHZhcmlhYmxlcyBpbiAkc2VsZiBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgYWJvdmUuICBUbyBmaW5kIHRoZQogICAgIyBjb3JyZXNwb25kZW5jZSBvZiBpbmRleCBudW1iZXJzIGFuZCBhcnJheSBuYW1lcywgY29weSBhIGxpc3QgdG8gYSBmaWxlCiAgICAjIGFuZCB1c2UgdGhlIHVuaXggJ25sJyBjb21tYW5kIHRvIG51bWJlciBsaW5lcyAxLi4KICAgIGlmIChERVZFTF9NT0RFKSB7CiAgICAgICAgbXkgQG5vbl9leGlzdGFudDsKICAgICAgICBmb3JlYWNoICggMCAuLiBfTEFTVF9TRUxGX0lOREVYXyApIHsKICAgICAgICAgICAgaWYgKCAhZXhpc3RzICRzZWxmLT5bJF9dICkgewogICAgICAgICAgICAgICAgcHVzaCBAbm9uX2V4aXN0YW50LCAkXzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoQG5vbl9leGlzdGFudCkgewogICAgICAgICAgICBGYXVsdCgiVGhlc2UgaW5kZXhlcyBpbiBzZWxmIG5vdCBpbml0aWFsaXplZDogKEBub25fZXhpc3RhbnQpXG4iKTsKICAgICAgICB9CiAgICB9CgogICAgIyBTYWZldHkgY2hlY2suLnRoaXMgaXMgbm90IGEgY2xhc3MgeWV0CiAgICBpZiAoIF9pbmNyZW1lbnRfY291bnQoKSA+IDEgKSB7CiAgICAgICAgY29uZmVzcwoiQXR0ZW1wdCB0byBjcmVhdGUgbW9yZSB0aGFuIDEgb2JqZWN0IGluICRjbGFzcywgd2hpY2ggaXMgbm90IGEgdHJ1ZSBjbGFzcyB5ZXRcbiI7CiAgICB9CiAgICByZXR1cm4gJHNlbGY7Cn0gIyMgZW5kIHN1YiBuZXcKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQ09ERSBTRUNUSU9OIDI6IFNvbWUgQmFzaWMgVXRpbGl0aWVzCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpzdWIgY2hlY2tfckxMIHsKCiAgICAjIFZlcmlmeSB0aGF0IHRoZSByTEwgYXJyYXkgaGFzIG5vdCBiZWVuIGF1dG8tdml2aWZpZWQKICAgIG15ICggJHNlbGYsICRtc2cgKSA9IEBfOwogICAgbXkgJHJMTCAgICA9ICRzZWxmLT5bX3JMTF9dOwogICAgbXkgJEtsaW1pdCA9ICRzZWxmLT5bX0tsaW1pdF9dOwogICAgbXkgJG51bSAgICA9IEB7JHJMTH07CiAgICBpZiAoICAgKCBkZWZpbmVkKCRLbGltaXQpICYmICRLbGltaXQgIT0gJG51bSAtIDEgKQogICAgICAgIHx8ICggIWRlZmluZWQoJEtsaW1pdCkgJiYgJG51bSA+IDAgKSApCiAgICB7CgogICAgICAgICMgVGhpcyBmYXVsdCBjYW4gb2NjdXIgaWYgdGhlIGFycmF5IGhhcyBiZWVuIGFjY2Vzc2VkIGZvciBhbiBpbmRleAogICAgICAgICMgZ3JlYXRlciB0aGFuICRLbGltaXQsIHdoaWNoIGlzIHRoZSBsYXN0IHRva2VuIGluZGV4LiAgSnVzdCBhY2Nlc3NpbmcKICAgICAgICAjIHRoZSBhcnJheSBhYm92ZSBpbmRleCAkS2xpbWl0LCBub3Qgc2V0dGluZyBhIHZhbHVlLCBjYW4gY2F1c2UgQHJMTCB0bwogICAgICAgICMgaW5jcmVhc2UgYmV5b25kICRLbGltaXQuICBJZiB0aGlzIG9jY3VycywgdGhlIHByb2JsZW0gY2FuIGJlIGxvY2F0ZWQKICAgICAgICAjIGJ5IG1ha2luZyBjYWxscyB0byB0aGlzIHJvdXRpbmUgYXQgZGlmZmVyZW50IGxvY2F0aW9ucyBpbgogICAgICAgICMgc3ViICdmaW5pc2hfZm9ybWF0dGluZycuCiAgICAgICAgJEtsaW1pdCA9ICd1bmRlZicgaWYgKCAhZGVmaW5lZCgkS2xpbWl0KSApOwogICAgICAgICRtc2cgICAgPSBFTVBUWV9TVFJJTkcgdW5sZXNzICRtc2c7CiAgICAgICAgRmF1bHQoIiRtc2cgRVJST1I6IHJMTCBoYXMgbnVtPSRudW0gYnV0IEtsaW1pdD0nJEtsaW1pdCdcbiIpOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgY2hlY2tfckxMCgpzdWIgY2hlY2tfa2V5cyB7CiAgICBteSAoICRydGVzdCwgJHJ2YWxpZCwgJG1zZywgJGV4YWN0X21hdGNoICkgPSBAXzsKCiAgICAjIENoZWNrIHRoZSBrZXlzIG9mIGEgaGFzaDoKICAgICMgJHJ0ZXN0ICAgPSByZWYgdG8gaGFzaCB0byB0ZXN0CiAgICAjICRydmFsaWQgID0gcmVmIHRvIGhhc2ggd2l0aCB2YWxpZCBrZXlzCgogICAgIyAkbXNnID0gYSBtZXNzYWdlIHRvIHdyaXRlIGluIGNhc2Ugb2YgZXJyb3IKICAgICMgJGV4YWN0X21hdGNoIGRlZmluZXMgdGhlIHR5cGUgb2YgY2hlY2s6CiAgICAjICAgICA9IGZhbHNlOiB0ZXN0IGhhc2ggbXVzdCBub3QgaGF2ZSB1bmtub3duIGtleQogICAgIyAgICAgPSB0cnVlOiAgdGVzdCBoYXNoIG11c3QgaGF2ZSBleGFjdGx5IHNhbWUga2V5cyBhcyBrbm93biBoYXNoCiAgICBteSBAdW5rbm93bl9rZXlzID0KICAgICAgZ3JlcCB7ICFleGlzdHMgJHJ2YWxpZC0+eyRffSB9IGtleXMgJXskcnRlc3R9OwogICAgbXkgQG1pc3Npbmdfa2V5cyA9CiAgICAgIGdyZXAgeyAhZXhpc3RzICRydGVzdC0+eyRffSB9IGtleXMgJXskcnZhbGlkfTsKICAgIG15ICRlcnJvciA9IEB1bmtub3duX2tleXM7CiAgICBpZiAoJGV4YWN0X21hdGNoKSB7ICRlcnJvciB8fD0gQG1pc3Npbmdfa2V5cyB9CiAgICBpZiAoJGVycm9yKSB7CiAgICAgICAgbG9jYWwgJExJU1RfU0VQQVJBVE9SID0gJykoJzsKICAgICAgICBteSBAZXhwZWN0ZWRfa2V5cyA9IHNvcnQga2V5cyAleyRydmFsaWR9OwogICAgICAgIEB1bmtub3duX2tleXMgPSBzb3J0IEB1bmtub3duX2tleXM7CiAgICAgICAgRmF1bHQoPDxFT00pOwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KUHJvZ3JhbSBlcnJvciBkZXRlY3RlZCBjaGVja2luZyBoYXNoIGtleXMKTWVzc2FnZSBpczogJyRtc2cnCkV4cGVjdGVkIGtleXM6IChAZXhwZWN0ZWRfa2V5cykKVW5rbm93biBrZXkocyk6IChAdW5rbm93bl9rZXlzKQpNaXNzaW5nIGtleShzKTogKEBtaXNzaW5nX2tleXMpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpFT00KICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGNoZWNrX2tleXMKCnN1YiBjaGVja190b2tlbl9hcnJheSB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwoKICAgICMtLS0tLS0tLS0tLS0tLQogICAgIyBDaGVjayBAeyRyTEx9CiAgICAjLS0tLS0tLS0tLS0tLS0KICAgICMgQ2hlY2sgZm9yIGVycm9ycyBpbiB0aGUgYXJyYXkgb2YgdG9rZW5zLiBUaGlzIGlzIG9ubHkgY2FsbGVkCiAgICAjIHdoZW4gdGhlIERFVkVMX01PREUgZmxhZyBpcyBzZXQsIHNvIHRoaXMgRmF1bHQgd2lsbCBvbmx5IG9jY3VyCiAgICAjIGR1cmluZyBjb2RlIGRldmVsb3BtZW50LgogICAgbXkgJHJMTCA9ICRzZWxmLT5bX3JMTF9dOwogICAgZm9yZWFjaCBteSAkS0sgKCAwIC4uIEB7JHJMTH0gLSAxICkgewogICAgICAgIG15ICRudmFycyA9IEB7ICRyTEwtPlskS0tdIH07CiAgICAgICAgaWYgKCAkbnZhcnMgIT0gX05WQVJTICkgewogICAgICAgICAgICBteSAkTlZBUlMgPSBfTlZBUlM7CiAgICAgICAgICAgIG15ICR0eXBlICA9ICRyTEwtPlskS0tdLT5bX1RZUEVfXTsKICAgICAgICAgICAgJHR5cGUgPSAnKicgdW5sZXNzIGRlZmluZWQoJHR5cGUpOwoKICAgICAgICAgICAgIyBUaGUgbnVtYmVyIG9mIHZhcmlhYmxlcyBwZXIgdG9rZW4gbm9kZSBpcyBfTlZBUlMgYW5kIHdhcyBzZXQgd2hlbgogICAgICAgICAgICAjIHRoZSBhcnJheSBpbmRleGVzIHdlcmUgZ2VuZXJhdGVkLiBTbyBpZiB0aGUgbnVtYmVyIG9mIHZhcmlhYmxlcwogICAgICAgICAgICAjIGlzIGRpZmZlcmVudCB3ZSBoYXZlIGRvbmUgc29tZXRoaW5nIHdyb25nLCBsaWtlIG5vdCBzdG9yZSBhbGwgb2YKICAgICAgICAgICAgIyB0aGVtIGluIHN1YiAnd3JpdGVfbGluZScgd2hlbiB0aGV5IHdlcmUgcmVjZWl2ZWQgZnJvbSB0aGUKICAgICAgICAgICAgIyB0b2tlbml6ZXIuCiAgICAgICAgICAgIEZhdWx0KAoibnVtYmVyIG9mIHZhcnMgZm9yIG5vZGUgJEtLLCB0eXBlICckdHlwZScsIGlzICRudmFycyBidXQgc2hvdWxkIGJlICROVkFSUyIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZm9yZWFjaCBteSAkdmFyICggX1RPS0VOXywgX1RZUEVfICkgewogICAgICAgICAgICBpZiAoICFkZWZpbmVkKCAkckxMLT5bJEtLXS0+WyR2YXJdICkgKSB7CiAgICAgICAgICAgICAgICBteSAkaWxpbmUgPSAkckxMLT5bJEtLXS0+W19MSU5FX0lOREVYX107CgogICAgICAgICAgICAgICAgIyBUaGlzIGlzIGEgc2ltcGxlIGNoZWNrIHRoYXQgZWFjaCB0b2tlbiBoYXMgc29tZSBiYXNpYwogICAgICAgICAgICAgICAgIyB2YXJpYWJsZXMuICBJbiBvdGhlciB3b3JkcywgdGhhdCB0aGVyZSBhcmUgbm8gaG9sZXMgaW4gdGhlCiAgICAgICAgICAgICAgICAjIGFycmF5IG9mIHRva2Vucy4gIFN1YiAnd3JpdGVfbGluZScgcHVzaGVzIHRva2VucyBpbnRvIHRoZQogICAgICAgICAgICAgICAgIyAkckxMIGFycmF5LCBzbyB0aGlzIHNob3VsZCBndWFyYW50ZWUgbm8gZ2Fwcy4KICAgICAgICAgICAgICAgIEZhdWx0KCJVbmRlZmluZWQgdmFyaWFibGUgJHZhciBmb3IgSz0kS0ssIGxpbmU9JGlsaW5lXG4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIENoZWNrICRyS19uZXh0X3NlcW5vX2J5X0stPlskS0tdCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBteSAkS2xpbWl0ID0gQHskckxMfSAtIDE7CiAgICBteSAkS19sYXN0X3NlcW5vOwogICAgbXkgJHJLX25leHRfc2Vxbm9fYnlfSyA9ICRzZWxmLT5bX3JLX25leHRfc2Vxbm9fYnlfS19dOwogICAgZm9yZWFjaCBteSAkS0sgKCAwIC4uICRLbGltaXQgKSB7CiAgICAgICAgbXkgJEtfbmV4dF9zZXFubyA9ICRyS19uZXh0X3NlcW5vX2J5X0stPlskS0tdOwogICAgICAgIGlmICggIWRlZmluZWQoJEtfbmV4dF9zZXFubykgKSB7ICRLX2xhc3Rfc2Vxbm8gPSAkS0s7IGxhc3QgfQogICAgICAgIGlmICggJEtfbmV4dF9zZXFubyA8PSAkS0sgfHwgJEtfbmV4dF9zZXFubyA+ICRLbGltaXQgKSB7CiAgICAgICAgICAgIEZhdWx0KDw8RU9NKTsKRXJyb3IgZGV0ZWN0ZWQgaW4gYXJyYXkgcktfbmV4dF9zZXFub19ieV9LIHdpdGggbGltaXQgSz0kS2xpbWl0OgphdCBLPSRLSyB0aGUgbmV4dCBzZXFubyBpcyAkS19uZXh0X3NlcW5vCktfbmV4dF9zZXFubyA9ICRLX25leHRfc2Vxbm8gaXMgT3V0IG9mIGJvdW5kcwpFT00KICAgICAgICB9CiAgICAgICAgaWYgKCAhJHJMTC0+WyRLX25leHRfc2Vxbm9dLT5bX1RZUEVfU0VRVUVOQ0VfXSApIHsKICAgICAgICAgICAgRmF1bHQoPDxFT00pOwpFcnJvciBkZXRlY3RlZCBpbiBhcnJheSByS19uZXh0X3NlcW5vX2J5X0sgd2l0aCBsaW1pdCBLPSRLbGltaXQ6CmF0IEs9JEtLIHRoZSBuZXh0IHNlcW5vIGlzICRLX25leHRfc2Vxbm86CktfbmV4dF9zZXFubyA9ICRLX25leHRfc2Vxbm8gZG9lcyBub3QgaGF2ZSBhIHNlcXVlbmNlIG51bWJlcgpFT00KICAgICAgICB9CiAgICB9CgogICAgIyB1cG9uIGhpdHRpbmcgYW4gdW5kZWYsIHRoZSByZW1haW5pbmcgdmFsdWVzIHNob3VsZCBhbHNvIGJlIHVuZGVmCiAgICBpZiAoIGRlZmluZWQoJEtfbGFzdF9zZXFubykgKSB7CiAgICAgICAgZm9yZWFjaCBteSAkS0sgKCAkS19sYXN0X3NlcW5vICsgMSAuLiAkS2xpbWl0ICkgewogICAgICAgICAgICBteSAkS3Rlc3QgPSAkcktfbmV4dF9zZXFub19ieV9LLT5bJEtLXTsKICAgICAgICAgICAgbmV4dCBpZiAoICFkZWZpbmVkKCRLdGVzdCkgKTsKICAgICAgICAgICAgRmF1bHQoPDxFT00pOwpFcnJvciBkZXRlY3RlZCBpbiBhcnJheSByS19uZXh0X3NlcW5vX2J5X0sgd2l0aCBsaW1pdCBLPSRLbGltaXQKd2l0aCBmaXJzdCB1bmRlZiBhdCAkS19sYXN0X3NlcW5vCmF0IEs9JEtLIHRoZSBuZXh0IHNlcW5vIGlzIGRlZmluZWQgYW5kIGlzICRLdGVzdApFT00KICAgICAgICB9CiAgICB9CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIENoZWNrIGhhc2ggJHJwYXJlbnRfb2Zfc2Vxbm8KICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgbXkgJHJwYXJlbnRfb2Zfc2Vxbm8gPSAkc2VsZi0+W19ycGFyZW50X29mX3NlcW5vX107CiAgICBmb3JlYWNoIG15ICRzZXFubyAoIGtleXMgJXskcnBhcmVudF9vZl9zZXFub30gKSB7CgogICAgICAgICMgcGFyZW50IHNlcXVlbmNlIG51bWJlcnMgbXVzdCBhbHdheXMgYmUgbGVzcwogICAgICAgIG15ICRzZXFub19wYXJlbnQgPSAkcnBhcmVudF9vZl9zZXFuby0+eyRzZXFub307CiAgICAgICAgaWYgKCAkc2Vxbm9fcGFyZW50ID49ICRzZXFubyApIHsKICAgICAgICAgICAgRmF1bHQoPDxFT00pOwpFcnJvciBkZXRlY3RlZCBpbiBoYXNoIHJwYXJlbnRfb2Zfc2Vxbm86ClRoZSBwYXJlbnQgb2Ygc2Vxbm89JHNlcW5vIGlzICRzZXFub19wYXJlbnQgYnV0IGl0IHNob3VsZCBiZSBsZXNzCkVPTQogICAgICAgIH0KICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGNoZWNrX3Rva2VuX2FycmF5Cgp7ICAgICMjIGJlZ2luIGNsb3N1cmUgY2hlY2tfbGluZV9oYXNoZXMKCiAgICAjIFRoaXMgY29kZSBjaGVja3MgdGhhdCBubyBhdXRvLXZpdmlmaWNhdGlvbiBvY2N1cnMgaW4gdGhlICdsaW5lJyBoYXNoCgogICAgbXkgJXZhbGlkX2xpbmVfaGFzaDsKCiAgICBCRUdJTiB7CgogICAgICAgICMgVGhlc2Uga2V5cyBhcmUgZGVmaW5lZCBmb3IgZWFjaCBsaW5lIGluIHRoZSBmb3JtYXR0ZXIKICAgICAgICAjIEVhY2ggbGluZSBtdXN0IGhhdmUgZXhhY3RseSB0aGVzZSBxdWFudGl0aWVzCiAgICAgICAgbXkgQHZhbGlkX2xpbmVfa2V5cyA9IHF3KAogICAgICAgICAgX2N1cmx5X2JyYWNlX2RlcHRoCiAgICAgICAgICBfZW5kaW5nX2luX3F1b3RlCiAgICAgICAgICBfZ3Vlc3NlZF9pbmRlbnRhdGlvbl9sZXZlbAogICAgICAgICAgX2xpbmVfbnVtYmVyCiAgICAgICAgICBfbGluZV90ZXh0CiAgICAgICAgICBfbGluZV90eXBlCiAgICAgICAgICBfcGFyZW5fZGVwdGgKICAgICAgICAgIF9yS19yYW5nZQogICAgICAgICAgX3NxdWFyZV9icmFja2V0X2RlcHRoCiAgICAgICAgICBfc3RhcnRpbmdfaW5fcXVvdGUKICAgICAgICAgIF9lbmRlZF9pbl9ibGFua190b2tlbgogICAgICAgICAgX2NvZGVfdHlwZQoKICAgICAgICAgIF9jaV9sZXZlbF8wCiAgICAgICAgICBfbGV2ZWxfMAogICAgICAgICAgX25lc3RpbmdfYmxvY2tzXzAKICAgICAgICAgIF9uZXN0aW5nX3Rva2Vuc18wCiAgICAgICAgKTsKCiAgICAgICAgQHZhbGlkX2xpbmVfaGFzaHtAdmFsaWRfbGluZV9rZXlzfSA9ICgxKSB4IHNjYWxhcihAdmFsaWRfbGluZV9rZXlzKTsKICAgIH0gIyMgZW5kIEJFR0lOCgogICAgc3ViIGNoZWNrX2xpbmVfaGFzaGVzIHsKICAgICAgICBteSAkc2VsZiAgID0gc2hpZnQ7CiAgICAgICAgbXkgJHJsaW5lcyA9ICRzZWxmLT5bX3JsaW5lc19dOwoKICAgICAgICAjIE5vdGUgdGhhdCB0aGUga2V5cyBlbmRpbmcgaW4gXzAgYXJlIG9ubHkgcmVxdWlyZWQgd2hlbiBhIGxvZ2ZpbGUKICAgICAgICAjIGlzIGJlaW5nIHNhdmVkLCBzbyB3ZSB3aWxsIGp1c3QgY2hlY2sgZm9yIHVua25vd24ga2V5cywgYnV0IG5vdAogICAgICAgICMgcmVxdWlyZSBhbiBleGFjdCBtYXRjaC4KICAgICAgICBmb3JlYWNoIG15ICRybGluZSAoIEB7JHJsaW5lc30gKSB7CiAgICAgICAgICAgIG15ICRpbGluZSAgICAgPSAkcmxpbmUtPntfbGluZV9udW1iZXJ9OwogICAgICAgICAgICBteSAkbGluZV90eXBlID0gJHJsaW5lLT57X2xpbmVfdHlwZX07CiAgICAgICAgICAgIGNoZWNrX2tleXMoICRybGluZSwgXCV2YWxpZF9saW5lX2hhc2gsCiAgICAgICAgICAgICAgICAiQ2hlY2twb2ludDogbGluZSBudW1iZXIgPSRpbGluZSwgIGxpbmVfdHlwZT0kbGluZV90eXBlIiwgMCApOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgY2hlY2tfbGluZV9oYXNoZXMKfSAjIyBlbmQgY2xvc3VyZSBjaGVja19saW5lX2hhc2hlcwoKeyAgICAjIyBiZWdpbiBjbG9zdXJlIGZvciBsb2dnZXIgcm91dGluZXMKICAgIG15ICRsb2dnZXJfb2JqZWN0OwoKICAgICMgQ2FsbGVkIG9uY2UgcGVyIGZpbGUgdG8gaW5pdGlhbGl6ZSB0aGUgbG9nZ2VyIG9iamVjdAogICAgc3ViIHNldF9sb2dnZXJfb2JqZWN0IHsKICAgICAgICAkbG9nZ2VyX29iamVjdCA9IHNoaWZ0OwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBzdWIgZ2V0X2lucHV0X3N0cmVhbV9uYW1lIHsKICAgICAgICBteSAkaW5wdXRfc3RyZWFtX25hbWUgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgaWYgKCRsb2dnZXJfb2JqZWN0KSB7CiAgICAgICAgICAgICRpbnB1dF9zdHJlYW1fbmFtZSA9ICRsb2dnZXJfb2JqZWN0LT5nZXRfaW5wdXRfc3RyZWFtX25hbWUoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRpbnB1dF9zdHJlYW1fbmFtZTsKICAgIH0gIyMgZW5kIHN1YiBnZXRfaW5wdXRfc3RyZWFtX25hbWUKCiAgICAjIGludGVyZmFjZSB0byBQZXJsOjpUaWR5OjpMb2dnZXIgcm91dGluZXMKICAgIHN1YiB3YXJuaW5nIHsKICAgICAgICBteSAoICRtc2csICgkbXNnX2xpbmVfbnVtYmVyKSApID0gQF87CgogICAgICAgICMgSXNzdWUgYSB3YXJuaW5nIG1lc3NhZ2UKICAgICAgICAjIEdpdmVuOgogICAgICAgICMgICAkbXNnID0gdGV4dCBvZiB3YXJuaW5nCiAgICAgICAgIyAgICRtc2dfbGluZV9udW1iZXIgPSBvcHRpb25hbCBsaW5lIG51bWJlciBwcmVmaXgKICAgICAgICBpZiAoJGxvZ2dlcl9vYmplY3QpIHsKICAgICAgICAgICAgJGxvZ2dlcl9vYmplY3QtPndhcm5pbmcoICRtc2csICRtc2dfbGluZV9udW1iZXIgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIHdhcm5pbmcKCiAgICBzdWIgY29tcGxhaW4gewogICAgICAgIG15ICggJG1zZywgKCRtc2dfbGluZV9udW1iZXIpICkgPSBAXzsKCiAgICAgICAgIyBJc3N1ZSBhIGNvbXBsYWludCBtZXNzYWdlCiAgICAgICAgIyBHaXZlbjoKICAgICAgICAjICAgJG1zZyA9IHRleHQgb2YgY29tcGxhaW50CiAgICAgICAgIyAgICRtc2dfbGluZV9udW1iZXIgPSBvcHRpb25hbCBsaW5lIG51bWJlciBwcmVmaXgKICAgICAgICBpZiAoJGxvZ2dlcl9vYmplY3QpIHsKICAgICAgICAgICAgJGxvZ2dlcl9vYmplY3QtPmNvbXBsYWluKCAkbXNnLCAkbXNnX2xpbmVfbnVtYmVyICk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBjb21wbGFpbgoKICAgIHN1YiB3cml0ZV9sb2dmaWxlX2VudHJ5IHsKICAgICAgICBteSBAbXNnID0gQF87CiAgICAgICAgaWYgKCRsb2dnZXJfb2JqZWN0KSB7CiAgICAgICAgICAgICRsb2dnZXJfb2JqZWN0LT53cml0ZV9sb2dmaWxlX2VudHJ5KEBtc2cpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgd3JpdGVfbG9nZmlsZV9lbnRyeQoKICAgIHN1YiBnZXRfc2F3X2JyYWNlX2Vycm9yIHsKICAgICAgICBpZiAoJGxvZ2dlcl9vYmplY3QpIHsKICAgICAgICAgICAgcmV0dXJuICRsb2dnZXJfb2JqZWN0LT5nZXRfc2F3X2JyYWNlX2Vycm9yKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBnZXRfc2F3X2JyYWNlX2Vycm9yCgogICAgc3ViIHdlX2FyZV9hdF90aGVfbGFzdF9saW5lIHsKICAgICAgICBpZiAoJGxvZ2dlcl9vYmplY3QpIHsKICAgICAgICAgICAgJGxvZ2dlcl9vYmplY3QtPndlX2FyZV9hdF90aGVfbGFzdF9saW5lKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiB3ZV9hcmVfYXRfdGhlX2xhc3RfbGluZQoKfSAjIyBlbmQgY2xvc3VyZSBmb3IgbG9nZ2VyIHJvdXRpbmVzCgp7ICAgICMjIGJlZ2luIGNsb3N1cmUgZm9yIGRpYWdub3N0aWNzIHJvdXRpbmVzCiAgICBteSAkZGlhZ25vc3RpY3Nfb2JqZWN0OwoKICAgICMgQ2FsbGVkIG9uY2UgcGVyIGZpbGUgdG8gaW5pdGlhbGl6ZSB0aGUgZGlhZ25vc3RpY3Mgb2JqZWN0CiAgICBzdWIgc2V0X2RpYWdub3N0aWNzX29iamVjdCB7CiAgICAgICAgJGRpYWdub3N0aWNzX29iamVjdCA9IHNoaWZ0OwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIEF2YWlsYWJsZSBmb3IgZGVidWdnaW5nIGJ1dCBub3QgY3VycmVudGx5IHVzZWQ6CiAgICBzdWIgd3JpdGVfZGlhZ25vc3RpY3MgewogICAgICAgIG15ICggJG1zZywgJGxpbmVfbnVtYmVyICkgPSBAXzsKICAgICAgICBpZiAoJGRpYWdub3N0aWNzX29iamVjdCkgewogICAgICAgICAgICAkZGlhZ25vc3RpY3Nfb2JqZWN0LT53cml0ZV9kaWFnbm9zdGljcyggJG1zZywgJGxpbmVfbnVtYmVyICk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiB3cml0ZV9kaWFnbm9zdGljcwp9ICMjIGVuZCBjbG9zdXJlIGZvciBkaWFnbm9zdGljcyByb3V0aW5lcwoKc3ViIGdldF9jb252ZXJnZW5jZV9jaGVjayB7CiAgICBteSAoJHNlbGYpID0gQF87CiAgICByZXR1cm4gJHNlbGYtPltfY29udmVyZ2VkX107Cn0KCnN1YiB3YW50X3NlY29uZF9pdGVyYXRpb24gewogICAgbXkgKCRzZWxmKSA9IEBfOwogICAgcmV0dXJuICRzZWxmLT5bX3dhbnRfc2Vjb25kX2l0ZXJhdGlvbl9dOwp9CgpzdWIgZ2V0X291dHB1dF9saW5lX251bWJlciB7CiAgICBteSAoJHNlbGYpID0gQF87CiAgICBteSAkdmFvID0gJHNlbGYtPltfdmVydGljYWxfYWxpZ25lcl9vYmplY3RfXTsKICAgIHJldHVybiAkdmFvLT5nZXRfb3V0cHV0X2xpbmVfbnVtYmVyKCk7Cn0KCnN1YiB3YW50X2JsYW5rX2xpbmUgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgICRzZWxmLT5mbHVzaCgpOwogICAgbXkgJGZpbGVfd3JpdGVyX29iamVjdCA9ICRzZWxmLT5bX2ZpbGVfd3JpdGVyX29iamVjdF9dOwogICAgJGZpbGVfd3JpdGVyX29iamVjdC0+d2FudF9ibGFua19saW5lKCk7CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiB3YW50X2JsYW5rX2xpbmUKCnN1YiB3cml0ZV91bmluZGVudGVkX2xpbmUgewogICAgbXkgKCAkc2VsZiwgJGxpbmUgKSA9IEBfOwogICAgJHNlbGYtPmZsdXNoKCk7CiAgICBteSAkZmlsZV93cml0ZXJfb2JqZWN0ID0gJHNlbGYtPltfZmlsZV93cml0ZXJfb2JqZWN0X107CiAgICAkZmlsZV93cml0ZXJfb2JqZWN0LT53cml0ZV9saW5lKCRsaW5lKTsKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHdyaXRlX3VuaW5kZW50ZWRfbGluZQoKc3ViIGR1bXBfdmVyYmF0aW0gewogICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICAjIER1bXAgdGhlIGlucHV0IGZpbGUgdG8gdGhlIG91dHB1dCB2ZXJiYXRpbS4gVGhpcyBpcyBjYWxsZWQgd2hlbgogICAgIyB0aGVyZSBpcyBhIHNldmVyZSBlcnJvciBhbmQgZm9ybWF0dGVkIG91dHB1dCBjYW5ub3QgYmUgbWFkZS4KICAgIG15ICRybGluZXMgPSAkc2VsZi0+W19ybGluZXNfXTsKICAgIGZvcmVhY2ggbXkgJGxpbmUgKCBAeyRybGluZXN9ICkgewogICAgICAgIG15ICRpbnB1dF9saW5lID0gJGxpbmUtPntfbGluZV90ZXh0fTsKICAgICAgICAkc2VsZi0+d3JpdGVfdW5pbmRlbnRlZF9saW5lKCRpbnB1dF9saW5lKTsKICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGR1bXBfdmVyYmF0aW0KCnN1YiBjb25zZWN1dGl2ZV9ub25ibGFua19saW5lcyB7CiAgICBteSAoJHNlbGYpICAgICAgICAgICAgID0gQF87CiAgICBteSAkZmlsZV93cml0ZXJfb2JqZWN0ID0gJHNlbGYtPltfZmlsZV93cml0ZXJfb2JqZWN0X107CiAgICBteSAkdmFvICAgICAgICAgICAgICAgID0gJHNlbGYtPltfdmVydGljYWxfYWxpZ25lcl9vYmplY3RfXTsKICAgIHJldHVybiAkZmlsZV93cml0ZXJfb2JqZWN0LT5nZXRfY29uc2VjdXRpdmVfbm9uYmxhbmtfbGluZXMoKSArCiAgICAgICR2YW8tPmdldF9jYWNoZWRfbGluZV9jb3VudCgpOwp9ICMjIGVuZCBzdWIgY29uc2VjdXRpdmVfbm9uYmxhbmtfbGluZXMKCnN1YiBzcGxpdF93b3JkcyB7CgogICAgIyBHaXZlbjogYSBzdHJpbmcgY29udGFpbmluZyB3b3JkcyBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZSwKICAgICMgUmV0dXJuOiB0aGUgY29ycmVzcG9uZGluZyBsaXN0IG9mIHdvcmRzCiAgICBteSAoJHN0cikgPSBAXzsKICAgIHJldHVybiB1bmxlc3MgZGVmaW5lZCgkc3RyKTsKICAgICRzdHIgPX4gcy9ccyskLy87CiAgICAkc3RyID1+IHMvXlxzKy8vOwogICAgcmV0dXJuIHVubGVzcyBsZW5ndGgoJHN0cik7CiAgICByZXR1cm4gc3BsaXQgL1xzKy8sICRzdHI7Cn0gIyMgZW5kIHN1YiBzcGxpdF93b3JkcwoKc3ViIEtfbmV4dF9jb2RlIHsKICAgIG15ICggJHNlbGYsICRLSywgKCRyTEwpICkgPSBAXzsKCiAgICAjIEdpdmVuOgogICAgIyAgICRLSyAgPSBpbmRleCBvZiBhIHRva2VuIGluICRyTEwKICAgICMgICAkckxMID0gb3B0aW9uYWwgdG9rZW4gYXJyYXkgdG8gdXNlIChkZWZhdWx0IGlzICRzZWxmLT5bX3JMTF9dKQogICAgIyBSZXR1cm46CiAgICAjICAgVGhlIGluZGV4IG9mIHRoZSBuZXh0IG5vbmJsYW5rLCBub24tY29tbWVudCB0b2tlbiBhZnRlciAkS0ssIG9yCiAgICAjICAgdW5kZWYgaWYgbm9uZQoKICAgIHJldHVybiBpZiAoICFkZWZpbmVkKCRLSykgKTsKICAgIHJldHVybiBpZiAoICRLSyA8IDAgKTsKCiAgICAjIFRoZSBvcHRpb25hbCB0aGlyZCBhcmcgaXMgdXNlZnVsIHdoZW4gd2UgYXJlIGNvcHlpbmcgdG9rZW5zIGZyb20gYW4gb2xkCiAgICAjICRyTEwgdG8gYSBuZXcgJHJMTCBhcnJheS4KICAgICRyTEwgPSAkc2VsZi0+W19yTExfXSBpZiAoICFkZWZpbmVkKCRyTEwpICk7CgogICAgbXkgJE51bSA9IEB7JHJMTH07CiAgICB3aGlsZSAoICsrJEtLIDwgJE51bSApIHsKICAgICAgICBteSAkdHlwZSA9ICRyTEwtPlskS0tdLT5bX1RZUEVfXTsKICAgICAgICBpZiAoICR0eXBlIG5lICdiJyAmJiAkdHlwZSBuZSAnIycgKSB7CiAgICAgICAgICAgIHJldHVybiAkS0s7CiAgICAgICAgfQogICAgfSAjIyBlbmQgd2hpbGUgKCArKyRLSyA8ICROdW0gKQoKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIEtfbmV4dF9jb2RlCgpzdWIgS19uZXh0X25vbmJsYW5rIHsKICAgIG15ICggJHNlbGYsICRLSywgKCRyTEwpICkgPSBAXzsKCiAgICAjIEdpdmVuOgogICAgIyAgICRLSyAgPSBpbmRleCBvZiBhIHRva2VuIGluICRyTEwKICAgICMgICAkckxMID0gb3B0aW9uYWwgdG9rZW4gYXJyYXkgdG8gdXNlIChkZWZhdWx0IGlzICRzZWxmLT5bX3JMTF9dKQogICAgIyBSZXR1cm46CiAgICAjICAgVGhlIGluZGV4IG9mIHRoZSBuZXh0IG5vbmJsYW5rIHRva2VuIGFmdGVyICRLSywgb3IKICAgICMgICB1bmRlZiBpZiBub25lCgogICAgIyBOT1RFOiBkb2VzIG5vdCBza2lwIG92ZXIgdGhlIGxlYWRpbmcgdHlwZSAncScgb2YgYSBoYW5naW5nIHNpZGUgY29tbWVudAogICAgIyAodXNlIEtfbmV4dF9jb2RlKQogICAgcmV0dXJuIGlmICggIWRlZmluZWQoJEtLKSApOwogICAgcmV0dXJuIGlmICggJEtLIDwgMCApOwoKICAgICMgdXNlIHRoZSBzdGFuZGFyZCBhcnJheSB1bmxlc3MgZ2l2ZW4gb3RoZXJ3aXNlCiAgICAkckxMID0gJHNlbGYtPltfckxMX10gaWYgKCAhZGVmaW5lZCgkckxMKSApOwoKICAgICMgTm9ybWFsbHksIGNvbnNlY3V0aXZlIGJsYW5rcyBkbyBub3Qgb2NjdXIuIFdlIGNvdWxkIHRlc3QgZm9yIHRoYXQKICAgICMgaGVyZSwgYnV0IHRoZXJlIGFyZSBjaGVja3MgaW4gdGhlICdzdG9yZV90b2tlbicgc3Vicy4KICAgIG15ICROdW0gPSBAeyRyTEx9OwogICAgd2hpbGUgKCArKyRLSyA8ICROdW0gKSB7CiAgICAgICAgaWYgKCAkckxMLT5bJEtLXS0+W19UWVBFX10gbmUgJ2InICkgeyByZXR1cm4gJEtLIH0KICAgIH0KCiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBLX25leHRfbm9uYmxhbmsKCnN1YiBLX3ByZXZpb3VzX2NvZGUgewoKICAgIG15ICggJHNlbGYsICRLSywgKCRyTEwpICkgPSBAXzsKCiAgICAjIEdpdmVuOgogICAgIyAgICRLSyAgPSBpbmRleCBvZiBhIHRva2VuIGluICRyTEwKICAgICMgICAkckxMID0gb3B0aW9uYWwgdG9rZW4gYXJyYXkgdG8gdXNlIChkZWZhdWx0IGlzICRzZWxmLT5bX3JMTF9dKQogICAgIyBSZXR1cm46CiAgICAjICAgVGhlIGluZGV4IG9mIHRoZSBwcmV2aW91cyBub25ibGFuaywgbm9uLWNvbW1lbnQgdG9rZW4gYWZ0ZXIgJEtLLCBvcgogICAgIyAgIHVuZGVmIGlmIG5vbmUKICAgICMgQ2FsbCB3aXRoICRLSz11bmRlZiB0byBzdGFydCBzZWFyY2ggYXQgdGhlIHRvcCBvZiB0aGUgYXJyYXkKCiAgICAjIFRoZSBvcHRpb25hbCB0aGlyZCBhcmcgaXMgdXNlZnVsIHdoZW4gd2UgYXJlIGNvcHlpbmcgdG9rZW5zIGZyb20gYW4gb2xkCiAgICAjICRyTEwgdG8gYSBuZXcgJHJMTCBhcnJheS4KICAgICRyTEwgPSAkc2VsZi0+W19yTExfXSB1bmxlc3MgKCBkZWZpbmVkKCRyTEwpICk7CgogICAgbXkgJE51bSA9IEB7JHJMTH07CiAgICBpZiAoICFkZWZpbmVkKCRLSykgKSB7ICRLSyA9ICROdW0gfQoKICAgIGlmICggJEtLID4gJE51bSApIHsKCiAgICAgICAgIyBUaGlzIGZhdWx0IGNhbiBiZSBjYXVzZWQgYnkgYSBwcm9ncmFtbWluZyBlcnJvciBpbiB3aGljaCBhIGJhZCAkS0sgaXMKICAgICAgICAjIGdpdmVuLiAgVGhlIGNhbGxlciBzaG91bGQgbWFrZSB0aGUgZmlyc3QgY2FsbCB3aXRoIEtLX25ldz11bmRlZiB0bwogICAgICAgICMgYXZvaWQgdGhpcyBlcnJvci4KICAgICAgICBpZiAoREVWRUxfTU9ERSkgewogICAgICAgICAgICBGYXVsdCg8PEVPTSk7ClByb2dyYW0gQnVnOiBLX3ByZXZpb3VzX25vbmJsYW5rX25ldyBjYWxsZWQgd2l0aCBLPSRLSyB3aGljaCBleGNlZWRzICROdW0KRU9NCiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0KCiAgICB3aGlsZSAoIC0tJEtLID49IDAgKSB7CiAgICAgICAgbXkgJHR5cGUgPSAkckxMLT5bJEtLXS0+W19UWVBFX107CiAgICAgICAgaWYgKCAkdHlwZSBuZSAnYicgJiYgJHR5cGUgbmUgJyMnICkgeyByZXR1cm4gJEtLIH0KICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIEtfcHJldmlvdXNfY29kZQoKc3ViIEtfcHJldmlvdXNfbm9uYmxhbmsgewoKICAgIG15ICggJHNlbGYsICRLSywgKCRyTEwpICkgPSBAXzsKCiAgICAjIEdpdmVuOgogICAgIyAgICRLSyAgPSBpbmRleCBvZiBhIHRva2VuIGluICRyTEwKICAgICMgICAkckxMID0gb3B0aW9uYWwgdG9rZW4gYXJyYXkgdG8gdXNlIChkZWZhdWx0IGlzICRzZWxmLT5bX3JMTF9dKQogICAgIyBSZXR1cm46CiAgICAjICAgVGhlIGluZGV4IG9mIHRoZSBwcmV2aW91cyBub25ibGFuayB0b2tlbiBhZnRlciAkS0ssIG9yCiAgICAjICAgdW5kZWYgaWYgbm9uZQogICAgIyBDYWxsIHdpdGggJEtLPXVuZGVmIHRvIHN0YXJ0IHNlYXJjaCBhdCB0aGUgdG9wIG9mIHRoZSBhcnJheQoKICAgICMgTk9URTogZG9lcyBub3Qgc2tpcCBvdmVyIHRoZSBsZWFkaW5nIHR5cGUgJ3EnIG9mIGEgaGFuZ2luZyBzaWRlIGNvbW1lbnQKICAgICMgKHVzZSBLX3ByZXZpb3VzX2NvZGUpCgogICAgIyB1c2UgdGhlIHN0YW5kYXJkIGFycmF5IHVubGVzcyBnaXZlbiBvdGhlcndpc2UKICAgICRyTEwgPSAkc2VsZi0+W19yTExfXSB1bmxlc3MgKCBkZWZpbmVkKCRyTEwpICk7CiAgICBteSAkTnVtID0gQHskckxMfTsKICAgIGlmICggIWRlZmluZWQoJEtLKSApIHsgJEtLID0gJE51bSB9CgogICAgaWYgKCAkS0sgPiAkTnVtICkgewoKICAgICAgICAjIFRoaXMgZmF1bHQgY2FuIGJlIGNhdXNlZCBieSBhIHByb2dyYW1taW5nIGVycm9yIGluIHdoaWNoIGEgYmFkICRLSyBpcwogICAgICAgICMgZ2l2ZW4uICBUaGUgY2FsbGVyIHNob3VsZCBtYWtlIHRoZSBmaXJzdCBjYWxsIHdpdGggS0tfbmV3PXVuZGVmIHRvCiAgICAgICAgIyBhdm9pZCB0aGlzIGVycm9yLgogICAgICAgIGlmIChERVZFTF9NT0RFKSB7CiAgICAgICAgICAgIEZhdWx0KDw8RU9NKTsKUHJvZ3JhbSBCdWc6IEtfcHJldmlvdXNfbm9uYmxhbmtfbmV3IGNhbGxlZCB3aXRoIEs9JEtLIHdoaWNoIGV4Y2VlZHMgJE51bQpFT00KICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgTm9ybWFsbHksIGNvbnNlY3V0aXZlIGJsYW5rcyBkbyBub3Qgb2NjdXIuIFdlIGNvdWxkIHRlc3QgZm9yIHRoYXQKICAgICMgaGVyZSwgYnV0IHRoZXJlIGFyZSBjaGVja3MgaW4gdGhlICdzdG9yZV90b2tlbicgc3Vicy4KICAgIHdoaWxlICggLS0kS0sgPj0gMCApIHsKICAgICAgICBpZiAoICRyTEwtPlskS0tdLT5bX1RZUEVfXSBuZSAnYicgKSB7IHJldHVybiAkS0sgfQogICAgfQoKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIEtfcHJldmlvdXNfbm9uYmxhbmsKCnN1YiBLX2ZpcnN0X2NvZGUgewoKICAgIG15ICggJHNlbGYsICgkckxMKSApID0gQF87CgogICAgIyBHaXZlbjoKICAgICMgICAkckxMID0gb3B0aW9uYWwgdG9rZW4gYXJyYXkgdG8gb3ZlcnJpZGUgZGVmYXVsdAogICAgIyBSZXR1cm46CiAgICAjICAgaW5kZXggJEsgb2YgZmlyc3Qgbm9uLWJsYW5rLCBub24tY29tbWVudCBjb2RlIHRva2VuLCBvcgogICAgIyAgIHVuZGVmIGlmIG5vbmUgKG5vIHRva2VucyBpbiB0aGUgZmlsZSkKCiAgICAkckxMID0gJHNlbGYtPltfckxMX10gdW5sZXNzICggZGVmaW5lZCgkckxMKSApOwoKICAgIHJldHVybiB1bmxlc3MgQHskckxMfTsKICAgIG15ICRLSyAgID0gMDsKICAgIG15ICR0eXBlID0gJHJMTC0+WyRLS10tPltfVFlQRV9dOwogICAgaWYgKCAkdHlwZSBuZSAnYicgJiYgJHR5cGUgbmUgJyMnICkgeyByZXR1cm4gJEtLIH0KICAgIHJldHVybiAkc2VsZi0+S19uZXh0X2NvZGUoJEtLKTsKfSAjIyBlbmQgc3ViIEtfZmlyc3RfY29kZQoKc3ViIEtfbGFzdF9jb2RlIHsKCiAgICBteSAoICRzZWxmLCAoJHJMTCkgKSA9IEBfOwoKICAgICMgR2l2ZW46CiAgICAjICAgJHJMTCA9IG9wdGlvbmFsIHRva2VuIGFycmF5IHRvIG92ZXJyaWRlIGRlZmF1bHQKICAgICMgUmV0dXJuOgogICAgIyAgIGluZGV4IG9mIGxhc3Qgbm9uLWJsYW5rLCBub24tY29tbWVudCBjb2RlIHRva2VuLCBvcgogICAgIyAgIHVuZGVmIGlmIG5vbmUgKG5vIHRva2VucyBpbiB0aGUgZmlsZSkKCiAgICAkckxMID0gJHNlbGYtPltfckxMX10gdW5sZXNzICggZGVmaW5lZCgkckxMKSApOwoKICAgIHJldHVybiB1bmxlc3MgQHskckxMfTsKICAgIG15ICRLSyAgID0gQHskckxMfSAtIDE7CiAgICBteSAkdHlwZSA9ICRyTEwtPlskS0tdLT5bX1RZUEVfXTsKICAgIGlmICggJHR5cGUgbmUgJ2InICYmICR0eXBlIG5lICcjJyApIHsgcmV0dXJuICRLSyB9CiAgICByZXR1cm4gJHNlbGYtPktfcHJldmlvdXNfY29kZSgkS0spOwp9ICMjIGVuZCBzdWIgS19sYXN0X2NvZGUKCnN1YiBnZXRfcGFyZW50X2NvbnRhaW5lcnMgewogICAgbXkgKCAkc2VsZiwgJHNlcW5vICkgPSBAXzsKCiAgICAjIEdpdmVuOgogICAgIyAgICRzZXFubyA9IHNlcXVlbmNlIG51bWJlciBvZiBhIGNvbnRhaW5lcgogICAgIyBSZXR1cm46CiAgICAjICAgcmVmIHRvIGEgbGlzdCBvZiBwYXJlbnQgY29udGFpbmVyIHNlcXVlbmNlIG51bWJlcnMKICAgIG15IEBsaXN0OwogICAgaWYgKCRzZXFubykgewogICAgICAgIG15ICRycGFyZW50X29mX3NlcW5vID0gJHNlbGYtPltfcnBhcmVudF9vZl9zZXFub19dOwogICAgICAgIG15ICRzZXFub19sYXN0ICAgICAgID0gJHNlcW5vOwogICAgICAgIHdoaWxlICggJHNlcW5vID0gJHJwYXJlbnRfb2Zfc2Vxbm8tPnskc2Vxbm99ICkgewogICAgICAgICAgICBsYXN0IGlmICggJHNlcW5vID09IFNFUV9ST09UICk7CiAgICAgICAgICAgIGlmICggJHNlcW5vID49ICRzZXFub19sYXN0ICkgewogICAgICAgICAgICAgICAgIyMgc2hvdWxkbid0IGhhcHBlbiAtIHBhcmVudCBjb250YWluZXJzIGhhdmUgbG93ZXIgc2VxIG51bWJlcnMKICAgICAgICAgICAgICAgIERFVkVMX01PREUgJiYgRmF1bHQoPDxFT00pOwpFcnJvciBpbiAncnBhcmVudF9vZl9zZXFubyc6IGV4cGVjdGluZyBzZXFubz0kc2Vxbm8gPCBsYXN0IHNlcW5vPSRzZXFub19sYXN0CkVPTQogICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgfQogICAgICAgICAgICAkc2Vxbm9fbGFzdCA9ICRzZXFubzsKICAgICAgICAgICAgcHVzaCBAbGlzdCwgJHNlcW5vOwogICAgICAgIH0gIyMgZW5kIHdoaWxlICggJHNlcW5vID0gJHJwYXJlbnRfb2Zfc2Vxbm8uLi4pCiAgICB9CiAgICByZXR1cm4gXEBsaXN0Owp9ICMjIGVuZCBzdWIgZ2V0X3BhcmVudF9jb250YWluZXJzCgpzdWIgbWFya19wYXJlbnRfY29udGFpbmVycyB7CiAgICBteSAoICRzZWxmLCAkc2Vxbm8sICRyaGFzaCwgKCR2YWx1ZSkgKSA9IEBfOwoKICAgICMgVGFzazoKICAgICMgICBzZXQgJHJoYXNoLT57JHNlcW5vfT0kdmFsdWUgZm9yIGFsbCBwYXJlbnQgY29udGFpbmVycwogICAgIyAgICAgICBidXQgbm90IGZvciAkc2Vxbm8gaXRzZWxmCgogICAgIyBHaXZlbjoKICAgICMgICAkc2Vxbm8gPSBzZXF1ZW5jZSBudW1iZXIgb2YgYSBjb250YWluZXIKICAgICMgICAkcmhhc2ggPSByZWYgdG8gYSBoYXNoIHdpdGggc2Vxbm8gYXMga2V5CiAgICAjICAgJHZhbHVlID0gdmFsdWUgZm9yIHNldHRpbmcgJHJoYXNoLT57JHNlcW5vfT0kdmFsdWUKICAgICMgICAgICAgICAgICBkZWZhdWx0ID0gMQoKICAgIHJldHVybiB1bmxlc3MgKCRzZXFubyk7CiAgICBpZiAoICFkZWZpbmVkKCR2YWx1ZSkgKSB7ICR2YWx1ZSA9IDEgfQogICAgbXkgJHJwYXJlbnRfb2Zfc2Vxbm8gPSAkc2VsZi0+W19ycGFyZW50X29mX3NlcW5vX107CiAgICBteSAkc2Vxbm9fbGFzdCAgICAgICA9ICRzZXFubzsKICAgIHdoaWxlICggJHNlcW5vID0gJHJwYXJlbnRfb2Zfc2Vxbm8tPnskc2Vxbm99ICkgewogICAgICAgIGxhc3QgaWYgKCAkc2Vxbm8gPT0gU0VRX1JPT1QgKTsKICAgICAgICBpZiAoICRzZXFubyA+PSAkc2Vxbm9fbGFzdCApIHsKICAgICAgICAgICAgIyMgc2hvdWxkbid0IGhhcHBlbiAtIHBhcmVudCBjb250YWluZXJzIGhhdmUgbG93ZXIgc2VxdWVuY2UgbnVtYmVycwogICAgICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KDw8RU9NKTsKRXJyb3IgaW4gJ3JwYXJlbnRfb2Zfc2Vxbm8nOiBleHBlY3Rpbmcgc2Vxbm89JHNlcW5vIDwgbGFzdCBzZXFubz0kc2Vxbm9fbGFzdApFT00KICAgICAgICAgICAgbGFzdDsKICAgICAgICB9CiAgICAgICAgJHNlcW5vX2xhc3QgPSAkc2Vxbm87CiAgICAgICAgJHJoYXNoLT57JHNlcW5vfSA9ICR2YWx1ZTsKICAgIH0gIyMgZW5kIHdoaWxlICggJHNlcW5vID0gJHJwYXJlbnRfb2Zfc2Vxbm8uLi4pCiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBtYXJrX3BhcmVudF9jb250YWluZXJzCgpzdWIgY29weV90b2tlbl9hc190eXBlIHsKCiAgICAjIFRoaXMgcHJvdmlkZXMgYSBxdWljayB3YXkgdG8gY3JlYXRlIGEgbmV3IHRva2VuIGJ5CiAgICAjIHNsaWdodGx5IG1vZGlmeWluZyBhbiBleGlzdGluZyB0b2tlbi4KICAgIG15ICggJHJvbGRfdG9rZW4sICR0eXBlLCAkdG9rZW4gKSA9IEBfOwoKICAgIG15IEBybmV3X3Rva2VuID0gQHskcm9sZF90b2tlbn07CiAgICAkcm5ld190b2tlbltfVFlQRV9dICAgICAgICAgID0gJHR5cGU7CiAgICAkcm5ld190b2tlbltfVE9LRU5fXSAgICAgICAgID0gJHRva2VuOwogICAgJHJuZXdfdG9rZW5bX1RZUEVfU0VRVUVOQ0VfXSA9IEVNUFRZX1NUUklORzsKICAgIHJldHVybiBcQHJuZXdfdG9rZW47Cn0gIyMgZW5kIHN1YiBjb3B5X3Rva2VuX2FzX3R5cGUKCnN1YiBwYXJlbnRfc2Vxbm9fYnlfSyB7CgogICAgIyBSZXR1cm4gdGhlIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgcGFyZW50IGNvbnRhaW5lciBvZiB0b2tlbiBLLCBpZiBhbnkuCgogICAgbXkgKCAkc2VsZiwgJEtLICkgPSBAXzsKICAgIG15ICRyTEwgPSAkc2VsZi0+W19yTExfXTsKCiAgICAjIFRoZSB0YXNrIGlzIHRvIGp1bXAgZm9yd2FyZCB0byB0aGUgbmV4dCBjb250YWluZXIgdG9rZW4KICAgICMgYW5kIHVzZSB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIGVpdGhlciBpdCBvciBpdHMgcGFyZW50LgoKICAgICMgRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgd2l0aCBzZXFubz01IG9mIHRoZSAnWycgYW5kICddJwogICAgIyBiZWluZyBjYWxsZWQgd2l0aCBpbmRleCBLIG9mIHRoZSBmaXJzdCB0b2tlbiBvZiBlYWNoIGxpbmU6CgogICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJlc3VsdAogICAgIyAgICBwdXNoIEB0ZXN0cywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIC0KICAgICMgICAgICBbICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAtCiAgICAjICAgICAgICBzdWIgeyA5OSB9LCAgICdkbyB7Jnslc30gZm9yIDEsMn0nLCAgICMgNQogICAgIyAgICAgICAgJygme30pKCZ7fSknLCB1bmRlZiwgICAgICAgICAgICAgICAgICAjIDUKICAgICMgICAgICAgIFsgMiwgMiwgMCBdLCAgMCAgICAgICAgICAgICAgICAgICAgICAgIyA1CiAgICAjICAgICAgXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgLQoKICAgICMgTk9URTogVGhlIGVuZGluZyBwYXJlbnQgd2lsbCBiZSBTRVFfUk9PVCBmb3IgYSBiYWxhbmNlZCBmaWxlLiAgRm9yCiAgICAjIHVuYmFsYW5jZWQgZmlsZXMsIGxhc3Qgc2VxdWVuY2UgbnVtYmVyIHdpbGwgZWl0aGVyIGJlIHVuZGVmaW5lZCBvciBpdCBtYXkKICAgICMgYmUgYXQgYSBkZWVwZXIgbGV2ZWwuICBJbiBlaXRoZXIgY2FzZSB3ZSB3aWxsIGp1c3QgcmV0dXJuIFNFUV9ST09UIHRvCiAgICAjIGhhdmUgYSBkZWZpbmVkIHZhbHVlIGFuZCBhbGxvdyBmb3JtYXR0aW5nIHRvIHByb2NlZWQuCiAgICBteSAkcGFyZW50X3NlcW5vID0gU0VRX1JPT1Q7CiAgICByZXR1cm4gJHBhcmVudF9zZXFubyBpZiAoICFkZWZpbmVkKCRLSykgKTsKICAgIG15ICR0eXBlX3NlcXVlbmNlID0gJHJMTC0+WyRLS10tPltfVFlQRV9TRVFVRU5DRV9dOwogICAgaWYgKCR0eXBlX3NlcXVlbmNlKSB7CiAgICAgICAgJHBhcmVudF9zZXFubyA9ICRzZWxmLT5bX3JwYXJlbnRfb2Zfc2Vxbm9fXS0+eyR0eXBlX3NlcXVlbmNlfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIG15ICRLdCA9ICRzZWxmLT5bX3JLX25leHRfc2Vxbm9fYnlfS19dLT5bJEtLXTsKICAgICAgICBpZiAoIGRlZmluZWQoJEt0KSApIHsKICAgICAgICAgICAgJHR5cGVfc2VxdWVuY2UgPSAkckxMLT5bJEt0XS0+W19UWVBFX1NFUVVFTkNFX107CiAgICAgICAgICAgIG15ICR0eXBlID0gJHJMTC0+WyRLdF0tPltfVFlQRV9dOwoKICAgICAgICAgICAgIyBpZiBuZXh0IGNvbnRhaW5lciB0b2tlbiBpcyBjbG9zaW5nLCBpdCBpcyB0aGUgcGFyZW50IHNlcW5vCiAgICAgICAgICAgIGlmICggJGlzX2Nsb3NpbmdfdHlwZXskdHlwZX0gKSB7CiAgICAgICAgICAgICAgICAkcGFyZW50X3NlcW5vID0gJHR5cGVfc2VxdWVuY2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgb3RoZXJ3aXNlIHdlIHdhbnQgaXRzIHBhcmVudCBjb250YWluZXIKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkcGFyZW50X3NlcW5vID0gJHNlbGYtPltfcnBhcmVudF9vZl9zZXFub19dLT57JHR5cGVfc2VxdWVuY2V9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgJHBhcmVudF9zZXFubyA9IFNFUV9ST09UIGlmICggIWRlZmluZWQoJHBhcmVudF9zZXFubykgKTsKICAgIHJldHVybiAkcGFyZW50X3NlcW5vOwp9ICMjIGVuZCBzdWIgcGFyZW50X3NlcW5vX2J5X0sKCnN1YiBwYXJlbnRfc3ViX3NlcW5vIHsKICAgIG15ICggJHNlbGYsICRzZXFub19wYXJlbiApID0gQF87CgogICAgIyBGaW5kIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgbmFtZWQgc3ViIChub3QgYXN1Yikgd2hpY2ggY29udGFpbnMgYSBnaXZlbgogICAgIyBzZXF1ZW5jZWQgaXRlbQoKICAgICMgR2l2ZW46CiAgICAjICAkc2Vxbm9fcGFyZW4gPSBzZXF1ZW5jZSBudW1iZXIgb2YgYSB0b2tlbiB3aXRoaW4gdGhlIHN1YgogICAgIyBSZXR1cm5zOgogICAgIyAgJHNlcW5vIG9mIHRoZSBzdWIsIG9yCiAgICAjICBub3RoaW5nIGlmIG5vIHN1YiBmb3VuZAogICAgcmV0dXJuIHVubGVzcyBkZWZpbmVkKCRzZXFub19wYXJlbik7CgogICAgIyBTZWFyY2ggdXB3YXJkCiAgICBteSAkc2Vxbm8gICAgICA9ICRzZXFub19wYXJlbjsKICAgIG15ICRzZXFub19sYXN0ID0gJHNlcW5vX3BhcmVuOwogICAgd2hpbGUgKCAkc2Vxbm8gPSAkc2VsZi0+W19ycGFyZW50X29mX3NlcW5vX10tPnskc2Vxbm99ICkgewogICAgICAgIGxhc3QgaWYgKCAkc2Vxbm8gPT0gU0VRX1JPT1QgKTsKICAgICAgICBpZiAoICRzZWxmLT5bX3Jpc19zdWJfYmxvY2tfXS0+eyRzZXFub30gKSB7CiAgICAgICAgICAgIHJldHVybiAkc2Vxbm87CiAgICAgICAgfQogICAgICAgIGlmICggJHNlcW5vID49ICRzZXFub19sYXN0ICkgewogICAgICAgICAgICAjIyBzaG91bGRuJ3QgaGFwcGVuIC0gcGFyZW50IGNvbnRhaW5lcnMgaGF2ZSBsb3dlciBzZXF1ZW5jZSBudW1iZXJzCiAgICAgICAgICAgIERFVkVMX01PREUgJiYgRmF1bHQoPDxFT00pOwpFcnJvciBpbiAncnBhcmVudF9vZl9zZXFubyc6IGV4cGVjdGluZyBzZXFubz0kc2Vxbm8gPCBsYXN0IHNlcW5vPSRzZXFub19sYXN0CkVPTQogICAgICAgICAgICBsYXN0OwogICAgICAgIH0KICAgICAgICAkc2Vxbm9fbGFzdCA9ICRzZXFubzsKICAgIH0gIyMgZW5kIHdoaWxlICggJHNlcW5vID0gJHNlbGYtPlsuLi5dKQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgcGFyZW50X3N1Yl9zZXFubwoKc3ViIHBhcmVudF9zdWJfc2Vxbm9fYnlfSyB7CiAgICBteSAoICRzZWxmLCAkS0sgKSA9IEBfOwoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBOT1RFOiBub3QgY3VycmVudGx5IGNhbGxlZCBidXQga2VlcCBmb3IgcG9zc2libGUgZnV0dXJlIGRldmVsb3BtZW50CiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAjIEZpbmQgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBuYW1lZCBzdWIgd2hpY2ggY29udGFpbnMgYSBnaXZlbiB0b2tlbgogICAgIyBHaXZlbjoKICAgICMgICRLID0gaW5kZXggSyBvZiBhIHRva2VuCiAgICAjIFJldHVybnM6CiAgICAjICAkc2Vxbm8gb2YgdGhlIHN1Yiwgb3IKICAgICMgIG5vdGhpbmcgaWYgbm8gc3ViIGZvdW5kCgogICAgcmV0dXJuIHVubGVzcyBkZWZpbmVkKCRLSyk7CgogICAgbXkgJHNlcW5vX3N1YjsKICAgIG15ICRwYXJlbnRfc2Vxbm8gPSAkc2VsZi0+cGFyZW50X3NlcW5vX2J5X0soJEtLKTsKICAgIGlmICggJHNlbGYtPltfcmlzX3N1Yl9ibG9ja19dLT57JHBhcmVudF9zZXFub30gKSB7CiAgICAgICAgJHNlcW5vX3N1YiA9ICRwYXJlbnRfc2Vxbm87CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkc2Vxbm9fc3ViID0gJHNlbGYtPnBhcmVudF9zdWJfc2Vxbm8oJHBhcmVudF9zZXFubyk7CiAgICB9CiAgICByZXR1cm4gJHNlcW5vX3N1YjsKfSAjIyBlbmQgc3ViIHBhcmVudF9zdWJfc2Vxbm9fYnlfSwoKc3ViIGlzX2luX2Jsb2NrX2J5X2kgewogICAgbXkgKCAkc2VsZiwgJGkgKSA9IEBfOwoKICAgICMgUmV0dXJuIHRydWUgaWYKICAgICMgICAgIHRva2VuIGF0IGkgaXMgY29udGFpbmVkIGluIGEgQkxPQ0sKICAgICMgICAgIG9yIGlzIGF0IHJvb3QgbGV2ZWwKICAgICMgICAgIG9yIHRoZXJlIGlzIHNvbWUga2luZCBvZiBlcnJvciAoaS5lLiB1bmJhbGFuY2VkIGZpbGUpCiAgICAjIFJldHVybiBmYWxzZSBvdGhlcndpc2UKCiAgICBpZiAoICRpIDwgMCApIHsKICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KCJCYWQgY2FsbCwgaT0nJGknXG4iKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICBteSAkc2Vxbm8gPSAkcGFyZW50X3NlcW5vX3RvX2dvWyRpXTsKICAgIHJldHVybiAxIGlmICggISRzZXFubyB8fCAkc2Vxbm8gPT0gU0VRX1JPT1QgKTsKICAgIHJldHVybiAxIGlmICggJHNlbGYtPltfcmJsb2NrX3R5cGVfb2Zfc2Vxbm9fXS0+eyRzZXFub30gKTsKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGlzX2luX2Jsb2NrX2J5X2kKCnN1YiBpc19pbl9ibG9ja19ieV9LIHsKICAgIG15ICggJHNlbGYsICRLSyApID0gQF87CgogICAgIyBSZXR1cm4gdHJ1ZSBpZgogICAgIyAgICAgdG9rZW4gYXQgJEtLIGlzIGNvbnRhaW5lZCBpbiBhIEJMT0NLCiAgICAjICAgICBvciBpcyBhdCByb290IGxldmVsCiAgICAjICAgICBvciB0aGVyZSBpcyBzb21lIGtpbmQgb2YgZXJyb3IgKGkuZS4gdW5iYWxhbmNlZCBmaWxlKQogICAgIyBSZXR1cm4gZmFsc2Ugb3RoZXJ3aXNlCgogICAgbXkgJHBhcmVudF9zZXFubyA9ICRzZWxmLT5wYXJlbnRfc2Vxbm9fYnlfSygkS0spOwogICAgcmV0dXJuIFNFUV9ST09UIGlmICggISRwYXJlbnRfc2Vxbm8gfHwgJHBhcmVudF9zZXFubyA9PSBTRVFfUk9PVCApOwogICAgcmV0dXJuICRzZWxmLT5bX3JibG9ja190eXBlX29mX3NlcW5vX10tPnskcGFyZW50X3NlcW5vfTsKfSAjIyBlbmQgc3ViIGlzX2luX2Jsb2NrX2J5X0sKCnN1YiBpc19pbl9saXN0X2J5X2kgewogICAgbXkgKCAkc2VsZiwgJGkgKSA9IEBfOwoKICAgICMgUmV0dXJuIHRydWUgaWYgdG9rZW4gYXQgaSBpcyBjb250YWluZWQgaW4gYSBMSVNUCiAgICAjIFJldHVybiBmYWxzZSBvdGhlcndpc2UKICAgIG15ICRzZXFubyA9ICRwYXJlbnRfc2Vxbm9fdG9fZ29bJGldOwogICAgcmV0dXJuIGlmICggISRzZXFubyApOwogICAgcmV0dXJuIGlmICggJHNlcW5vID09IFNFUV9ST09UICk7CiAgICBpZiAoICRzZWxmLT5bX3Jpc19saXN0X2J5X3NlcW5vX10tPnskc2Vxbm99ICkgewogICAgICAgIHJldHVybiAxOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgaXNfaW5fbGlzdF9ieV9pCgpzdWIgaXNfbGlzdF9ieV9zZXFubyB7CgogICAgIyBSZXR1cm4gdHJ1ZSBpZiB0aGUgaW1tZWRpYXRlIGNvbnRlbnRzIG9mIGEgY29udGFpbmVyIGFwcGVhcnMgdG8gYmUgYQogICAgIyBsaXN0LgogICAgbXkgKCAkc2VsZiwgJHNlcW5vICkgPSBAXzsKICAgIHJldHVybiB1bmxlc3MgZGVmaW5lZCgkc2Vxbm8pOwogICAgcmV0dXJuICRzZWxmLT5bX3Jpc19saXN0X2J5X3NlcW5vX10tPnskc2Vxbm99Owp9ICMjIGVuZCBzdWIgaXNfbGlzdF9ieV9zZXFubwoKc3ViIGlzX2ludGVycG9sYXRlZF9oZXJlX2RvYyB7CiAgICBteSAoJHRva2VuKSA9IEBfOwoKICAgICMgR2l2ZW46CiAgICAjICAkdG9rZW4gPSB0aGUgdG9rZW4gdGV4dCBvZiBhIHR5cGUgJ2gnIHRva2VuCiAgICAjIFJldHVybjoKICAgICMgIHRydWUgaWYgdGhlIGhlcmUgZG9jIGlzIGludGVycG9sYXRlZAogICAgIyAgZmFsc2UgaWYgbm90CgogICAgIyBFeGFtcGxlczoKICAgICMgIDw8RU9NICAgICAgICAgIDwtLSBpbnRlcnBvbGF0ZWQKICAgICMgIDw8IkVPTSIgICAgICAgIDwtLSBpbnRlcnBvbGF0ZWQKICAgICMgIDw8J0VPTScgICAgICAgIDwtLSBub3QgaW50ZXJwb2xhdGVkCiAgICByZXR1cm4gJHRva2VuICF+IC9eIFtePF0qIDw8IFt+XT8gXCcgL3g7Cn0gIyMgZW5kIHN1YiBpc19pbnRlcnBvbGF0ZWRfaGVyZV9kb2MKCnN1YiBnZXRfaGVyZV90ZXh0IHsKICAgIG15ICggJHNlbGYsICRpeF9IRVJFX0JFRyApID0gQF87CgogICAgIyBDb2xsZWN0IHRoZSB0ZXh0IG9mIGEgaGVyZS1kb2MKICAgICMgR2l2ZW46CiAgICAjICAgJGl4X0hFUkVfQkVHID0gaW5kZXggb2YgdGhlIGxpbmUgQkVGT1JFIHRoZSBzdGFydCBvZiB0aGlzIGhlcmUtZG9jCiAgICAjIFJldHVybnM6CiAgICAjICAgJGl4X0hFUkVfRU5EID0gbGluZSBpbmRleCBvZiB0aGUgbGFzdCBsaW5lIG9mIHRoaXMgaGVyZS1kb2MKICAgICMgICAkaGVyZV90ZXh0ID0gdGhlIGhlcmUtZG9jIHRleHQKCiAgICAjIEV4YW1wbGUgb2YgJGhlcmVfdGV4dCB3aXRoIDIgbGluZXM6CgogICAgIyBteSAkc3RyPTw8RU9NOyAgICAgPC0tdGhpcyBsaW5lIGhhcyBpbmRleCAkaXhfSEVSRV9CRUcKICAgICMgaGVyZSB0ZXh0IGxpbmUgMQogICAgIyBoZXJlIHRleHQgbGluZSAyCiAgICAjIEVPTSAgICAgICAgICAgICAgICA8LS10aGlzIGxpbmUgaGFzIGluZGV4ICRpeF9IRVJFX0VORAoKICAgICMgSWYgaGVyZS1kb2NzIGFyZSBzdGFja2VkLCB0aGVuIGNhbGxlciB3aWxsIHVzZSAkaXhfSEVSRV9FTkQgYXMKICAgICMgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBoZXJlLWRvYy4KCiAgICBteSAkcmxpbmVzID0gJHNlbGYtPltfcmxpbmVzX107CgogICAgIyBMb29wIHRvIGNvbGxlY3QgdGhlIGhlcmUgZG9jIHRleHQKICAgIG15ICRpeF9tYXggPSBAeyRybGluZXN9IC0gMTsKICAgIG15ICRpeCAgICAgPSAkaXhfSEVSRV9CRUc7CiAgICBteSAkaXhfSEVSRV9FTkQ7CiAgICBteSAkaGVyZV90ZXh0ID0gRU1QVFlfU1RSSU5HOwogICAgd2hpbGUgKCArKyRpeCA8PSAkaXhfbWF4ICkgewogICAgICAgIG15ICRsaGFzaCA9ICRybGluZXMtPlskaXhdOwogICAgICAgIG15ICRsdHlwZSA9ICRsaGFzaC0+e19saW5lX3R5cGV9OwogICAgICAgIGlmICggJGx0eXBlIGVxICdIRVJFJyApIHsKICAgICAgICAgICAgJGhlcmVfdGV4dCAuPSAkbGhhc2gtPntfbGluZV90ZXh0fTsKICAgICAgICAgICAgbmV4dDsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkbHR5cGUgZXEgJ0hFUkVfRU5EJyApIHsKICAgICAgICAgICAgJGl4X0hFUkVfRU5EID0gJGl4OwogICAgICAgICAgICBsYXN0OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgREVWRUxfTU9ERQogICAgICAgICAgICAgICYmIEZhdWx0KCJsaW5lX3R5cGU9JGx0eXBlIHNob3VsZCBiZSBIRVJFLi5cbiIpOwogICAgICAgICAgICAkaXhfSEVSRV9FTkQgPSAkaXg7CiAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgfQogICAgfSAjIyBlbmQgd2hpbGUgKCArKyRpeCA8PSAkaXhfbWF4ICkKICAgIHJldHVybiAoICRpeF9IRVJFX0VORCwgJGhlcmVfdGV4dCApOwp9ICMjIGVuZCBzdWIgZ2V0X2hlcmVfdGV4dAoKc3ViIGlzX3RyYWlsaW5nX2NvbW1hIHsKICAgIG15ICggJHNlbGYsICRLSyApID0gQF87CgogICAgIyBHaXZlbjoKICAgICMgICAkS0sgLSBpbmRleCBvZiBhIGNvbW1hIGluIHRva2VuIGxpc3QKICAgICMgUmV0dXJuOgogICAgIyAgIHRydWUgaWYgdGhlIGNvbW1hIGF0IGluZGV4ICRLSyBpcyBhIHRyYWlsaW5nIGNvbW1hCiAgICAjICAgZmFsc2UgaWYgbm90CgogICAgbXkgJHJMTCAgICAgPSAkc2VsZi0+W19yTExfXTsKICAgIG15ICR0eXBlX0tLID0gJHJMTC0+WyRLS10tPltfVFlQRV9dOwogICAgaWYgKCAkdHlwZV9LSyBuZSAnLCcgKSB7CiAgICAgICAgREVWRUxfTU9ERQogICAgICAgICAgJiYgRmF1bHQoIkJhZCBjYWxsOiBleHBlY3RlZCB0eXBlICcsJyBidXQgcmVjZWl2ZWQgJyR0eXBlX0tLJ1xuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbXkgJEtubmIgPSAkc2VsZi0+S19uZXh0X25vbmJsYW5rKCRLSyk7CiAgICBpZiAoIGRlZmluZWQoJEtubmIpICkgewogICAgICAgIG15ICR0eXBlX3NlcXVlbmNlID0gJHJMTC0+WyRLbm5iXS0+W19UWVBFX1NFUVVFTkNFX107CiAgICAgICAgbXkgJHR5cGVfS25uYiAgICAgPSAkckxMLT5bJEtubmJdLT5bX1RZUEVfXTsKICAgICAgICBpZiAoICR0eXBlX3NlcXVlbmNlICYmICRpc19jbG9zaW5nX3R5cGV7JHR5cGVfS25uYn0gKSB7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGlzX3RyYWlsaW5nX2NvbW1hCgpzdWIgY3VtdWxhdGl2ZV9sZW5ndGhfYmVmb3JlX0sgewogICAgbXkgKCAkc2VsZiwgJEtLICkgPSBAXzsKCiAgICAjIFJldHVybnMgdGhlIGN1bXVsYXRpdmUgY2hhcmFjdGVyIGxlbmd0aCBmcm9tIHRoZSBmaXJzdCB0b2tlbiB0bwogICAgIyB0b2tlbiBiZWZvcmUgdGhlIHRva2VuIGF0IGluZGV4ICRLSy4KICAgIG15ICRyTEwgPSAkc2VsZi0+W19yTExfXTsKICAgIHJldHVybiAoICRLSyA8PSAwICkgPyAwIDogJHJMTC0+WyAkS0sgLSAxIF0tPltfQ1VNVUxBVElWRV9MRU5HVEhfXTsKfSAjIyBlbmQgc3ViIGN1bXVsYXRpdmVfbGVuZ3RoX2JlZm9yZV9LCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQ09ERSBTRUNUSU9OIDM6IENoZWNrIGFuZCBwcm9jZXNzIG9wdGlvbnMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKc3ViIGNoZWNrX29wdGlvbnMgewoKICAgICMgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBjaGVjayB0aGUgdXNlci1zdXBwbGllZCBydW4gcGFyYW1ldGVycwogICAgIyBhbmQgdG8gY29uZmlndXJlIHRoZSBjb250cm9sIGhhc2hlcyB0byB0aGVtLgogICAgKCAkck9wdHMsIG15ICR3dnRfaW5fYXJncywgbXkgJG51bV9maWxlcywgbXkgJGxpbmVfcmFuZ2VfY2xpcHBlZCApID0gQF87CgogICAgaW5pdGlhbGl6ZV93aGl0ZXNwYWNlX2hhc2hlcygpOwoKICAgIGlmICggJHJPcHRzLT57J2R1bXAtd2FudC1sZWZ0LXNwYWNlJ30gKSB7CiAgICAgICAgZHVtcF93YW50X2xlZnRfc3BhY2UoKlNURE9VVCk7CiAgICAgICAgRXhpdCgwKTsKICAgIH0KCiAgICBpZiAoICRyT3B0cy0+eydkdW1wLXdhbnQtcmlnaHQtc3BhY2UnfSApIHsKICAgICAgICBkdW1wX3dhbnRfcmlnaHRfc3BhY2UoKlNURE9VVCk7CiAgICAgICAgRXhpdCgwKTsKICAgIH0KCiAgICBpbml0aWFsaXplX2JvbmRfc3RyZW5ndGhfaGFzaGVzKCk7CgogICAgIyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGVhcmx5IHRvIGdldCBoYXNoZXMgd2l0aCBncmVwIGluaXRpYWxpemVkCiAgICBpbml0aWFsaXplX2dyZXBfYW5kX2ZyaWVuZHMoKTsKCiAgICAjIE1ha2UgbmVlZGVkIHJlZ2V4IHBhdHRlcm5zIGZvciBtYXRjaGluZyB0ZXh0LgogICAgIyBOT1RFOiBzdWJfbWF0Y2hpbmdfcGF0dGVybnMgbXVzdCBiZSBtYWRlIGZpcnN0IGJlY2F1c2UgbGF0ZXIgcGF0dGVybnMgdXNlCiAgICAjIHRoZW07IHNlZSBSVCAjMTMzMTMwLgogICAgbWFrZV9zdWJfbWF0Y2hpbmdfcGF0dGVybigpOyAgICAjIE1VU1QgQkUgRklSU1QgcGF0dGVybiBtYWRlCiAgICBtYWtlX3N0YXRpY19ibG9ja19jb21tZW50X3BhdHRlcm4oKTsKICAgIG1ha2Vfc3RhdGljX3NpZGVfY29tbWVudF9wYXR0ZXJuKCk7CiAgICAkZm9ybWF0X3NraXBwaW5nX3BhdHRlcm5fYmVnaW4gPQogICAgICBtYWtlX2Zvcm1hdF9za2lwcGluZ19wYXR0ZXJuKCAnZm9ybWF0LXNraXBwaW5nLWJlZ2luJywgJyM8PDwnICk7CiAgICAkZm9ybWF0X3NraXBwaW5nX3BhdHRlcm5fZW5kID0KICAgICAgbWFrZV9mb3JtYXRfc2tpcHBpbmdfcGF0dGVybiggJ2Zvcm1hdC1za2lwcGluZy1lbmQnLCAnIz4+PicgKTsKICAgIG1ha2Vfbm9uX2luZGVudGluZ19icmFjZV9wYXR0ZXJuKCk7CgogICAgaW5pdGlhbGl6ZV9jbG9zaW5nX3NpZGVfY29tbWVudHMoKTsKCiAgICBpbml0aWFsaXplX21pc3NpbmdfZWxzZV9jb21tZW50KCk7CgogICAgaW5pdGlhbGl6ZV9jYWxsX3BhcmVuX3N0eWxlKCk7CgogICAgaW5pdGlhbGl6ZV93YXJuX3ZhcmlhYmxlX3R5cGVzKCAkd3Z0X2luX2FyZ3MsICRudW1fZmlsZXMsCiAgICAgICAgJGxpbmVfcmFuZ2VfY2xpcHBlZCApOwoKICAgIGluaXRpYWxpemVfd2Fybl9taXNtYXRjaGVkKCk7CgogICAgbWFrZV9ibGlfcGF0dGVybigpOwoKICAgIG1ha2VfYmxfcGF0dGVybigpOwoKICAgIG1ha2VfYmxvY2tfYnJhY2VfdmVydGljYWxfdGlnaHRuZXNzX3BhdHRlcm4oKTsKCiAgICBtYWtlX2JsYW5rX2xpbmVfcGF0dGVybigpOwoKICAgIG1ha2Vfa2V5d29yZF9ncm91cF9saXN0X3BhdHRlcm4oKTsKCiAgICBwcmVwYXJlX2N1ZGRsZWRfYmxvY2tfdHlwZXMoKTsKCiAgICBpZiAoICRyT3B0cy0+eydkdW1wLWN1ZGRsZWQtYmxvY2stbGlzdCd9ICkgewogICAgICAgIGR1bXBfY3VkZGxlZF9ibG9ja19saXN0KCpTVERPVVQpOwogICAgICAgIEV4aXQoMCk7CiAgICB9CgogICAgIyAtLWluZGVudC1vbmx5IHNraXBzIHRoZSBjYWxsIHRvIHN1YiByZXNwYWNlX3Rva2Vucywgd2hpY2ggZGVmaW5lcwogICAgIyBzb21lIGVzc2VudGlhbCBkYXRhIHN0cnVjdHVyZXMgbmVlZGVkIGJ5IHNvbWUgZHVtcCByb3V0aW5lcywKICAgICMgb3IgbWlnaHQgYmUgaW4gdGhlIGZ1dHVyZS4gU2luY2UgdGhlcmUgaXMgYW4gaW1tZWRpYXRlIGV4aXQgYWZ0ZXIgYQogICAgIyBkdW1wLCB3ZSBjYW4gdHVybiBvZmYgaW5kZW50LW9ubHkgdG8gZ2V0IHRoZXNlIHN0cnVjdHVyZXMgZm9yIGEgLWR1bXAuCiAgICBpZiAoICRyT3B0cy0+eydpbmRlbnQtb25seSd9ICkgewoKICAgICAgICBpZiAoICAgJHJPcHRzLT57J2R1bXAtbWlzbWF0Y2hlZC1hcmdzJ30KICAgICAgICAgICAgfHwgJHJPcHRzLT57J2R1bXAtbWlzbWF0Y2hlZC1yZXR1cm5zJ30gKQogICAgICAgIHsKICAgICAgICAgICAgJHJPcHRzLT57J2luZGVudC1vbmx5J30gPSAwOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkck9wdHMtPnsnZHVtcC1ibG9jay1zdW1tYXJ5J30gKSB7CiAgICAgICAgICAgICRyT3B0cy0+eydpbmRlbnQtb25seSd9ID0gMDsKICAgICAgICB9CiAgICB9CgogICAgaW5pdGlhbGl6ZV9saW5lX3VwX3BhcmVudGhlc2VzKCk7CgogICAgY2hlY2tfdGFicygpOwoKICAgICMgV2Ugc2hvdWxkIHB1dCBhbiB1cHBlciBib3VuZCBvbiBhbnkgLXNpbD1uIHZhbHVlLiBPdGhlcndpc2UgZW5vcm1vdXMKICAgICMgZmlsZXMgY291bGQgYmUgY3JlYXRlZCBieSBtaXN0YWtlLgogICAgZm9yICggJHJPcHRzLT57J3N0YXJ0aW5nLWluZGVudGF0aW9uLWxldmVsJ30gKSB7CiAgICAgICAgaWYgKCAkXyAmJiAkXyA+IDEwMCApIHsKICAgICAgICAgICAgV2Fybig8PEVPTSk7ClRoZSB2YWx1ZSAtLXN0YXJ0aW5nLWluZGVudGF0aW9uLWxldmVsPSRfIGlzIHZlcnkgbGFyZ2U7IGEgbWlzdGFrZT8gcmVzZXR0aW5nIHRvIDA7CkVPTQogICAgICAgICAgICAkXyA9IDA7CiAgICAgICAgfQogICAgfQoKICAgICMgUmVxdWlyZSAtbXNwID4gMCB0byBhdm9pZCBmdXR1cmUgcGFyc2luZyBwcm9ibGVtcyAoaXNzdWUgYzE0NykKICAgIGZvciAoICRyT3B0cy0+eydtaW5pbXVtLXNwYWNlLXRvLWNvbW1lbnQnfSApIHsKICAgICAgICBpZiAoICEkXyB8fCAkXyA8PSAwICkgeyAkXyA9IDEgfQogICAgfQoKICAgIGluaXRpYWxpemVfb3V0ZGVudF9rZXl3b3JkKCk7CgogICAgaW5pdGlhbGl6ZV9rZXl3b3JkX3BhcmVuX2lubmVyX3RpZ2h0bmVzcygpOwoKICAgIGluaXRpYWxpemVfc3BhY2VfYWZ0ZXJfa2V5d29yZCgpOwoKICAgIGluaXRpYWxpemVfZXh0ZW5kZWRfYmxvY2tfdGlnaHRuZXNzX2xpc3QoKTsKCiAgICAjIFRoZSBmbGFnICckY29udHJvbGxlZF9jb21tYV9zdHlsZScgd2lsbCBiZSBzZXQgaWYgdGhlIHVzZXIKICAgICMgZW50ZXJlZCBhbnkgb2YgLXdiYj0nLCcgLXdiYT0nLCcgLWtiYj0nLCcgLWtiYT0nLCcKICAgICMgc2VlIHN1YiAnaW5pdGlhbGl6ZV90b2tlbl9icmVha19wcmVmZXJlbmNlcycsCiAgICAjIGFuZCBzdWIgJ2luaXRpYWxpemVfb2xkX2JyZWFrcG9pbnRfY29udHJvbHMnCiAgICAkY29udHJvbGxlZF9jb21tYV9zdHlsZSA9IDA7CiAgICBpbml0aWFsaXplX3Rva2VuX2JyZWFrX3ByZWZlcmVuY2VzKCk7CiAgICBpbml0aWFsaXplX29sZF9icmVha3BvaW50X2NvbnRyb2xzKCk7CgogICAgaW5pdGlhbGl6ZV9jb250YWluZXJfaW5kZW50YXRpb25fb3B0aW9ucygpOwoKICAgICMgbWFrZSAtbD0wIGVxdWFsIHRvIC1sPWluZmluaXRlCiAgICBpZiAoICEkck9wdHMtPnsnbWF4aW11bS1saW5lLWxlbmd0aCd9ICkgewogICAgICAgICRyT3B0cy0+eydtYXhpbXVtLWxpbmUtbGVuZ3RoJ30gPSAxXzAwMF8wMDA7CiAgICB9CgogICAgIyBtYWtlIC1sYmw9MCBlcXVhbCB0byAtbGJsPWluZmluaXRlCiAgICBpZiAoICEkck9wdHMtPnsnbG9uZy1ibG9jay1saW5lLWNvdW50J30gKSB7CiAgICAgICAgJHJPcHRzLT57J2xvbmctYmxvY2stbGluZS1jb3VudCd9ID0gMV8wMDBfMDAwOwogICAgfQoKICAgIGluaXRpYWxpemVfdGlnaHRuZXNzX3ZhcnMoKTsKCiAgICBpbml0aWFsaXplX211bHRpcGxlX3Rva2VuX3RpZ2h0bmVzcygpOwoKICAgIGluaXRpYWxpemVfZ2xvYmFsX29wdGlvbl92YXJzKCk7CgogICAgaW5pdGlhbGl6ZV9saW5lX2xlbmd0aF92YXJzKCk7ICAgICMgYWZ0ZXIgJ2luaXRpYWxpemVfZ2xvYmFsX29wdGlvbl92YXJzJwoKICAgIGluaXRpYWxpemVfdHJhaWxpbmdfY29tbWFfYnJlYWtfcnVsZXMoKTsKCiAgICBpbml0aWFsaXplX3RyYWlsaW5nX2NvbW1hX3J1bGVzKCk7ICAgICMgYWZ0ZXIgJ2luaXRpYWxpemVfbGluZV9sZW5ndGhfdmFycycKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbmQgJ190cmFpbGluZ19jb21tYV9icmVha19ydWxlcycKCiAgICBpbml0aWFsaXplX2ludGVyYnJhY2tldF9hcnJvd19zdHlsZSgpOwoKICAgIGluaXRpYWxpemVfd2VsZF9uZXN0ZWRfZXhjbHVzaW9uX3J1bGVzKCk7CgogICAgaW5pdGlhbGl6ZV93ZWxkX2ZhdF9jb21tYV9ydWxlcygpOwoKICAgIGluaXRpYWxpemVfbHB4bF9scGlsKCk7CgogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgY2hlY2tfb3B0aW9ucwoKdXNlIGNvbnN0YW50IEFMSUdOX0dSRVBfQUxJQVNFUyA9PiAwOwoKc3ViIGluaXRpYWxpemVfZ3JlcF9hbmRfZnJpZW5kcyB7CgogICAgIyBJbml0aWFsaXplIG9yIHJlLWluaXRpYWxpemUgaGFzaGVzIHdpdGggJ2dyZXAnIGFuZCBncmVwIGFsaWFzZXMuIFRoaXMKICAgICMgbXVzdCBiZSBkb25lIGFmdGVyIGVhY2ggc2V0IG9mIG9wdGlvbnMgYmVjYXVzZSBuZXcgZ3JlcCBhbGlhc2VzIG1heSBiZQogICAgIyB1c2VkLgoKICAgICMgcmUtaW5pdGlhbGl6ZSB0aGUgaGFzaGVzIC4uLiB0aGlzIGlzIGNyaXRpY2FsIQogICAgJWlzX3NvcnRfbWFwX2dyZXAgPSAoKTsKCiAgICBteSBAcSA9IHF3KCBzb3J0IG1hcCBncmVwICk7CiAgICBAaXNfc29ydF9tYXBfZ3JlcHtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgIG15ICRvbGJ4bCA9ICRyT3B0cy0+eydvbmUtbGluZS1ibG9jay1leGNsdXNpb24tbGlzdCd9OwogICAgbXkgJWlzX29sYl9leGNsdXNpb25fd29yZDsKICAgIGlmICggZGVmaW5lZCgkb2xieGwpICkgewogICAgICAgIG15IEBsaXN0ID0gc3BsaXRfd29yZHMoJG9sYnhsKTsKICAgICAgICBpZiAoQGxpc3QpIHsKICAgICAgICAgICAgQGlzX29sYl9leGNsdXNpb25fd29yZHtAbGlzdH0gPSAoMSkgeCBzY2FsYXIoQGxpc3QpOwogICAgICAgIH0KICAgIH0KCiAgICAjIE1ha2UgdGhlIGxpc3Qgb2YgYmxvY2sgdHlwZXMgd2hpY2ggbWF5IGJlIHJlLWZvcm1lZCBpbnRvIG9uZSBsaW5lLgogICAgIyBUaGV5IHdpbGwgYmUgbW9kaWZpZWQgd2l0aCB0aGUgZ3JlcC1hbGlhcy1saXN0IGJlbG93IGFuZAogICAgIyBieSBzdWIgJ3ByZXBhcmVfY3VkZGxlZF9ibG9ja190eXBlcycuCiAgICAjIE5vdGUgdGhhdCBpdCBpcyBlc3NlbnRpYWwgdG8gYWx3YXlzIHJlLWluaXRpYWxpemUgdGhlIGhhc2ggaGVyZToKICAgICV3YW50X29uZV9saW5lX2Jsb2NrID0gKCk7CiAgICBpZiAoICEkaXNfb2xiX2V4Y2x1c2lvbl93b3JkeycqJ30gKSB7CiAgICAgICAgZm9yZWFjaCAocXcoIHNvcnQgbWFwIGdyZXAgZXZhbCApKSB7CiAgICAgICAgICAgIGlmICggISRpc19vbGJfZXhjbHVzaW9uX3dvcmR7JF99ICkgeyAkd2FudF9vbmVfbGluZV9ibG9ja3skX30gPSAxIH0KICAgICAgICB9CiAgICB9CgogICAgIyBOb3RlIHRoYXQgYW55ICdncmVwLWFsaWFzLWxpc3QnIHN0cmluZyBoYXMgYmVlbiBwcmVwcm9jZXNzZWQgdG8gYmUgYQogICAgIyB0cmltbWVkLCBzcGFjZS1zZXBhcmF0ZWQgbGlzdC4KICAgIG15ICRzdHIgPSAkck9wdHMtPnsnZ3JlcC1hbGlhcy1saXN0J307CiAgICBteSBAZ3JlcF9hbGlhc2VzID0gc3BsaXQgL1xzKy8sICRzdHI7CgogICAgaWYgKEBncmVwX2FsaWFzZXMpIHsKCiAgICAgICAgQGlzX3NvcnRfbWFwX2dyZXB7QGdyZXBfYWxpYXNlc30gPSAoMSkgeCBzY2FsYXIoQGdyZXBfYWxpYXNlcyk7CgogICAgICAgIGlmICggJHdhbnRfb25lX2xpbmVfYmxvY2t7J2dyZXAnfSApIHsKICAgICAgICAgICAgQHdhbnRfb25lX2xpbmVfYmxvY2t7QGdyZXBfYWxpYXNlc30gPSAoMSkgeCBzY2FsYXIoQGdyZXBfYWxpYXNlcyk7CiAgICAgICAgfQogICAgfQoKICAgICVpc19zb3J0X21hcF9ncmVwX2V2YWwgPSAlaXNfc29ydF9tYXBfZ3JlcDsKICAgICRpc19zb3J0X21hcF9ncmVwX2V2YWx7J2V2YWwnfSA9IDE7CgogICAgJWlzX3NvcnRfbWFwX2dyZXBfZXZhbF9kbyA9ICVpc19zb3J0X21hcF9ncmVwX2V2YWw7CiAgICAkaXNfc29ydF9tYXBfZ3JlcF9ldmFsX2Rveydkbyd9ID0gMTsKCiAgICAjIFRoZXNlIGJsb2NrIHR5cGVzIGNhbiB0YWtlIGNpLiAgVGhpcyBpcyB1c2VkIGJ5IHRoZSAteGNpIG9wdGlvbi4KICAgICMgTm90ZSB0aGF0IHRoZSAnc3ViJyBpbiB0aGlzIGxpc3QgaXMgYW4gYW5vbnltb3VzIHN1Yi4gIFRvIGJlIG1vcmUgY29ycmVjdAogICAgIyB3ZSBjb3VsZCByZW1vdmUgc3ViIGFuZCB1c2UgQVNVQiBwYXR0ZXJuIHRvIGFsc28gaGFuZGxlIGEKICAgICMgcHJvdG90eXBlL3NpZ25hdHVyZS4gIEJ1dCB0aGF0IHdvdWxkIHNsb3cgdGhpbmdzIGRvd24gYW5kIHdvdWxkIHByb2JhYmx5CiAgICAjIG5ldmVyIGJlIHVzZWZ1bC4KICAgICVpc19ibG9ja193aXRoX2NpID0gJWlzX3NvcnRfbWFwX2dyZXBfZXZhbF9kbzsKICAgICRpc19ibG9ja193aXRoX2NpeydzdWInfSA9IDE7CgogICAgQHEgPSBxdyggZ3JlcCBrZXlzIG1hcCByZXZlcnNlIHNvcnQgc3BsaXQgKTsKICAgIHB1c2ggQHEsIEBncmVwX2FsaWFzZXM7CiAgICAlaXNfa2V5d29yZF9yZXR1cm5pbmdfbGlzdCA9ICgpOwogICAgQGlzX2tleXdvcmRfcmV0dXJuaW5nX2xpc3R7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICAjIFRoaXMgY29kZSBlbmFibGVzIHZlcnRpY2FsIGFsaWdubWVudCBvZiBncmVwIGFsaWFzZXMgZm9yIHRlc3RpbmcuICBJdCBoYXMKICAgICMgbm90IGJlZW4gZm91bmQgdG8gYmUgYmVuZWZpY2lhbCwgc28gaXQgaXMgb2ZmIGJ5IGRlZmF1bHQuICBCdXQgaXQgaXMKICAgICMgdXNlZnVsIGZvciBwcmVjaXNlIHRlc3Rpbmcgb2YgdGhlIGdyZXAgYWxpYXMgY29kaW5nLgogICAgaWYgKEFMSUdOX0dSRVBfQUxJQVNFUykgewogICAgICAgICVibG9ja190eXBlX21hcCA9ICgKICAgICAgICAgICAgJ3VubGVzcycgID0+ICdpZicsCiAgICAgICAgICAgICdlbHNlJyAgICA9PiAnaWYnLAogICAgICAgICAgICAnZWxzaWYnICAgPT4gJ2lmJywKICAgICAgICAgICAgJ3doZW4nICAgID0+ICdpZicsCiAgICAgICAgICAgICdkZWZhdWx0JyA9PiAnaWYnLAogICAgICAgICAgICAnY2FzZScgICAgPT4gJ2lmJywKICAgICAgICAgICAgJ3NvcnQnICAgID0+ICdtYXAnLAogICAgICAgICAgICAnZ3JlcCcgICAgPT4gJ21hcCcsCiAgICAgICAgKTsKICAgICAgICBmb3JlYWNoIChAcSkgewogICAgICAgICAgICAkYmxvY2tfdHlwZV9tYXB7JF99ID0gJ21hcCcgdW5sZXNzICggJF8gZXEgJ21hcCcgKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBpbml0aWFsaXplX2dyZXBfYW5kX2ZyaWVuZHMKCnN1YiBpbml0aWFsaXplX3dlbGRfbmVzdGVkX2V4Y2x1c2lvbl9ydWxlcyB7CiAgICAld2VsZF9uZXN0ZWRfZXhjbHVzaW9uX3J1bGVzID0gKCk7CgogICAgbXkgJG9wdF9uYW1lID0gJ3dlbGQtbmVzdGVkLWV4Y2x1c2lvbi1saXN0JzsKICAgIG15ICRzdHIgICAgICA9ICRyT3B0cy0+eyRvcHRfbmFtZX07CgogICAgIyBsZXQgYSAnMCcgYmUgdGhlIHNhbWUgYXMgbm90IGRlZmluZWQKICAgIHJldHVybiB1bmxlc3MgKCRzdHIpOwogICAgJHN0ciA9fiBzL15ccysvLzsKICAgICRzdHIgPX4gcy9ccyskLy87CiAgICByZXR1cm4gdW5sZXNzICgkc3RyKTsKCiAgICAjIFRoZXJlIGFyZSBmb3VyIGNvbnRhaW5lciB0b2tlbnMuCiAgICBteSAldG9rZW5fa2V5cyA9ICgKICAgICAgICAnKCcgPT4gJygnLAogICAgICAgICdbJyA9PiAnWycsCiAgICAgICAgJ3snID0+ICd7JywKICAgICAgICAncScgPT4gJ3EnLAogICAgKTsKCiAgICAjIFdlIGFyZSBwYXJzaW5nIGFuIGV4Y2x1c2lvbiBsaXN0IGZvciBuZXN0ZWQgd2VsZHMuIFRoZSBsaXN0IGlzIGEgc3RyaW5nCiAgICAjIHdpdGggc3BhY2VzIHNlcGFyYXRpbmcgYW55IG51bWJlciBvZiBpdGVtcy4gIEVhY2ggaXRlbSBjb25zaXN0cyBvZiB0aHJlZQogICAgIyBwaWVjZXMgb2YgaW5mb3JtYXRpb246CiAgICAjIDxvcHRpb25hbCBwb3NpdGlvbj4gPG9wdGlvbmFsIHR5cGU+IDx0eXBlIG9mIGNvbnRhaW5lcj4KICAgICMgPCAgICAgXiBvciAuICAgICAgPiA8ICAgIGsgb3IgSyAgID4gPCAgICAgKCBbIHsgICAgICAgPgoKICAgICMgVGhlIGxhc3QgY2hhcmFjdGVyIGlzIHRoZSByZXF1aXJlZCBjb250YWluZXIgdHlwZSBhbmQgbXVzdCBiZSBvbmUgb2Y6CiAgICAjICggPSBwYXJlbgogICAgIyBbID0gc3F1YXJlIGJyYWNrZXQKICAgICMgeyA9IGJyYWNlCgogICAgIyBBbiBvcHRpb25hbCBsZWFkaW5nIHBvc2l0aW9uIGluZGljYXRvcjoKICAgICMgXiBtZWFucyB0aGUgbGVhZGluZyB0b2tlbiBwb3NpdGlvbiBpbiB0aGUgd2VsZAogICAgIyAuIG1lYW5zIGEgc2Vjb25kYXJ5IHRva2VuIHBvc2l0aW9uIGluIHRoZSB3ZWxkCiAgICAjICAgbm8gcG9zaXRpb24gaW5kaWNhdG9yIG1lYW5zIGFsbCBwb3NpdGlvbnMgbWF0Y2gKCiAgICAjIEFuIG9wdGlvbmFsIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXIgYmV0d2VlbiB0aGUgcG9zaXRpb24gYW5kIGNvbnRhaW5lcgogICAgIyB0b2tlbiBzZWxlY3RzIHRvIHdoaWNoIHRoZSBydWxlIGFwcGxpZXM6CiAgICAjIGsgPSBhbnkga2V5d29yZAogICAgIyBLID0gYW55IG5vbi1rZXl3b3JkCiAgICAjIGYgPSBmdW5jdGlvbiBjYWxsCiAgICAjIEYgPSBub3QgYSBmdW5jdGlvbiBjYWxsCiAgICAjIHcgPSBmdW5jdGlvbiBvciBrZXl3b3JkCiAgICAjIFcgPSBub3QgYSBmdW5jdGlvbiBvciBrZXl3b3JkCiAgICAjICAgICBubyBsZXR0ZXIgbWVhbnMgYW55IHByZWNlZGluZyB0eXBlIG1hdGNoZXMKCiAgICAjIEV4YW1wbGVzOgogICAgIyBeKCAgLSB0aGUgd2VsZCBtdXN0IG5vdCBzdGFydCB3aXRoIGEgcGFyZW4KICAgICMgLiggIC0gdGhlIHNlY29uZCBhbmQgbGF0ZXIgdG9rZW5zIG1heSBub3QgYmUgcGFyZW5zCiAgICAjICggICAtIG5vIHBhcmVucyBpbiB3ZWxkCiAgICAjIF5LKCAgLSBleGNsdWRlIGEgbGVhZGluZyBwYXJlbiBub3QgcHJlY2VkZWQgYnkgYSBrZXl3b3JkCiAgICAjIC5rKCAgLSBleGNsdWRlIGEgc2Vjb25kYXJ5IHBhcmVuIHByZWNlZGVkIGJ5IGEga2V5d29yZAogICAgIyBbIHsgIC0gZXhjbHVkZSBhbGwgYnJhY2tldHMgYW5kIGJyYWNlcwoKICAgIG15IEBpdGVtcyA9IHNwbGl0IC9ccysvLCAkc3RyOwogICAgbXkgJG1zZzE7CiAgICBteSAkbXNnMjsKICAgIGZvcmVhY2ggbXkgJGl0ZW0gKEBpdGVtcykgewogICAgICAgIG15ICRpdGVtX3NhdmUgPSAkaXRlbTsKICAgICAgICBteSAkdG9rICAgICAgID0gY2hvcCAkaXRlbTsKICAgICAgICBteSAka2V5ICAgICAgID0gJHRva2VuX2tleXN7JHRva307CiAgICAgICAgaWYgKCAhZGVmaW5lZCgka2V5KSApIHsKICAgICAgICAgICAgJG1zZzEgLj0gIiAnJGl0ZW1fc2F2ZSciOwogICAgICAgICAgICBuZXh0OwogICAgICAgIH0KICAgICAgICBpZiAoICFkZWZpbmVkKCAkd2VsZF9uZXN0ZWRfZXhjbHVzaW9uX3J1bGVzeyRrZXl9ICkgKSB7CiAgICAgICAgICAgICR3ZWxkX25lc3RlZF9leGNsdXNpb25fcnVsZXN7JGtleX0gPSBbXTsKICAgICAgICB9CiAgICAgICAgbXkgJHJmbGFncyA9ICR3ZWxkX25lc3RlZF9leGNsdXNpb25fcnVsZXN7JGtleX07CgogICAgICAgICMgQSAncScgbWVhbnMgZG8gbm90IHdlbGQgcXVvdGVzCiAgICAgICAgaWYgKCAkdG9rIGVxICdxJyApIHsKICAgICAgICAgICAgJHJmbGFncy0+WzBdID0gJyonOwogICAgICAgICAgICAkcmZsYWdzLT5bMV0gPSAnKic7CiAgICAgICAgICAgIG5leHQ7CiAgICAgICAgfQoKICAgICAgICBteSAkcG9zICAgID0gJyonOwogICAgICAgIG15ICRzZWxlY3QgPSAnKic7CiAgICAgICAgaWYgKCRpdGVtKSB7CiAgICAgICAgICAgIGlmICggJGl0ZW0gPX4gL14oW1xeXC5dKT8oW2tLZkZ3V10pPyQvICkgewogICAgICAgICAgICAgICAgJHBvcyAgICA9ICQxIGlmICgkMSk7CiAgICAgICAgICAgICAgICAkc2VsZWN0ID0gJDIgaWYgKCQyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRtc2cxIC49ICIgJyRpdGVtX3NhdmUnIjsKICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICRlcnI7CiAgICAgICAgaWYgKCAkcG9zIGVxICdeJyB8fCAkcG9zIGVxICcqJyApIHsKICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCAkcmZsYWdzLT5bMF0gKSAmJiAkcmZsYWdzLT5bMF0gbmUgJHNlbGVjdCApIHsKICAgICAgICAgICAgICAgICRlcnIgPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZmxhZ3MtPlswXSA9ICRzZWxlY3Q7CiAgICAgICAgfQogICAgICAgIGlmICggJHBvcyBlcSAnLicgfHwgJHBvcyBlcSAnKicgKSB7CiAgICAgICAgICAgIGlmICggZGVmaW5lZCggJHJmbGFncy0+WzFdICkgJiYgJHJmbGFncy0+WzFdIG5lICRzZWxlY3QgKSB7CiAgICAgICAgICAgICAgICAkZXJyID0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcmZsYWdzLT5bMV0gPSAkc2VsZWN0OwogICAgICAgIH0KICAgICAgICBpZiAoJGVycikgeyAkbXNnMiAuPSAiICckaXRlbV9zYXZlJyI7IH0KICAgIH0KICAgIGlmICgkbXNnMSkgewogICAgICAgIFdhcm4oPDxFT00pOwpVbmV4cGVjdGluZyBzeW1ib2wocykgZW5jb3VudGVyZWQgaW4gLS0kb3B0X25hbWUgd2lsbCBiZSBpZ25vcmVkOgokbXNnMQpFT00KICAgIH0KICAgIGlmICgkbXNnMikgewogICAgICAgIFdhcm4oPDxFT00pOwpNdWx0aXBsZSBzcGVjaWZpY2F0aW9ucyB3ZXJlIGVuY291bnRlcmVkIGluIHRoZSAtLXdlbGQtbmVzdGVkLWV4Y2x1c2lvbi1saXN0IGZvcjoKJG1zZzIKT25seSB0aGUgbGFzdCB3aWxsIGJlIHVzZWQuCkVPTQogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgaW5pdGlhbGl6ZV93ZWxkX25lc3RlZF9leGNsdXNpb25fcnVsZXMKCnN1YiBpbml0aWFsaXplX3dlbGRfZmF0X2NvbW1hX3J1bGVzIHsKCiAgICAjIEluaXRpYWxpemUgYSBoYXNoIGNvbnRyb2xsaW5nIHdoaWNoIG9wZW5pbmcgdG9rZW4gdHlwZXMgY2FuIGJlCiAgICAjIHdlbGRlZCBhcm91bmQgYSBmYXQgY29tbWEKICAgICV3ZWxkX2ZhdF9jb21tYV9ydWxlcyA9ICgpOwoKICAgICMgVGhlIC13ZmMgZmxhZyB0dXJucyBvbiB3ZWxkaW5nIG9mICc9PicgYWZ0ZXIgYW4gb3BlbmluZyBwYXJlbgogICAgaWYgKCAkck9wdHMtPnsnd2VsZC1mYXQtY29tbWEnfSApIHsgJHdlbGRfZmF0X2NvbW1hX3J1bGVzeycoJ30gPSAxIH0KCiAgICAjIFRoaXMgY291bGQgYmUgZ2VuZXJhbGl6ZWQgaW4gdGhlIGZ1dHVyZSBieSBpbnRyb2R1Y2luZyBhIHBhcmFtZXRlcgogICAgIyAtd2VsZC1mYXQtY29tbWEtYWZ0ZXI9c3RyICgtd2ZjYT1zdHIpLCB3aGVyZSBzdHIgY29udGFpbnMgYW55IG9mOgogICAgIyAgICAqIHsgWyAoCiAgICAjIHRvIGluZGljYXRlIHdoaWNoIG9wZW5pbmcgcGFyZW5zIG1heSB3ZWxkIHRvIGEgc3Vic2VxdWVudCAnPT4nCgogICAgIyBUaGUgZmxhZyAtd2ZjIHdvdWxkIHRoZW4gYmUgZXF1aXZhbGVudCB0byAtd2ZjYT0nKCcKCiAgICAjIFRoaXMgaGFzIG5vdCBiZWVuIGRvbmUgYmVjYXVzZSBpdCBpcyBub3QgeWV0IGNsZWFyIGhvdyB1c2VmdWwKICAgICMgdGhpcyBnZW5lcmFsaXphdGlvbiB3b3VsZCBiZS4KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGluaXRpYWxpemVfd2VsZF9mYXRfY29tbWFfcnVsZXMKCnN1YiBpbml0aWFsaXplX2xweGxfbHBpbCB7CgogICAgJWxpbmVfdXBfcGFyZW50aGVzZXNfY29udHJvbF9oYXNoICAgID0gKCk7CiAgICAkbGluZV91cF9wYXJlbnRoZXNlc19jb250cm9sX2lzX2xweGwgPSAxOwogICAgbXkgJGxweGwgPSAkck9wdHMtPnsnbGluZS11cC1wYXJlbnRoZXNlcy1leGNsdXNpb24tbGlzdCd9OwogICAgbXkgJGxwaWwgPSAkck9wdHMtPnsnbGluZS11cC1wYXJlbnRoZXNlcy1pbmNsdXNpb24tbGlzdCd9OwogICAgaWYgKCAkbHB4bCAmJiAkbHBpbCApIHsKICAgICAgICBXYXJuKDw8RU9NKTsKWW91IGVudGVyZWQgdmFsdWVzIGZvciBib3RoIC1scHhsPXMgYW5kIC1scGlsPXM7IHRoZSAtbHBpbCBsaXN0IHdpbGwgYmUgaWdub3JlZApFT00KICAgIH0KICAgIGlmICgkbHB4bCkgewogICAgICAgICRsaW5lX3VwX3BhcmVudGhlc2VzX2NvbnRyb2xfaXNfbHB4bCA9IDE7CiAgICAgICAgaW5pdGlhbGl6ZV9saW5lX3VwX3BhcmVudGhlc2VzX2NvbnRyb2xfaGFzaCgKICAgICAgICAgICAgJHJPcHRzLT57J2xpbmUtdXAtcGFyZW50aGVzZXMtZXhjbHVzaW9uLWxpc3QnfSwgJ2xweGwnICk7CiAgICB9CiAgICBlbHNpZiAoJGxwaWwpIHsKICAgICAgICAkbGluZV91cF9wYXJlbnRoZXNlc19jb250cm9sX2lzX2xweGwgPSAwOwogICAgICAgIGluaXRpYWxpemVfbGluZV91cF9wYXJlbnRoZXNlc19jb250cm9sX2hhc2goCiAgICAgICAgICAgICRyT3B0cy0+eydsaW5lLXVwLXBhcmVudGhlc2VzLWluY2x1c2lvbi1saXN0J30sICdscGlsJyApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgIyBuZWl0aGVyIC1scHhsIG5vciAtbHBpbCBzcGVjaWZpZWQKICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGluaXRpYWxpemVfbHB4bF9scGlsCgpzdWIgaW5pdGlhbGl6ZV9saW5lX3VwX3BhcmVudGhlc2VzX2NvbnRyb2xfaGFzaCB7CiAgICBteSAoICRzdHIsICRvcHRfbmFtZSApID0gQF87CgogICAgIyBsZXQgYSAwIGJlIHRoZSBzYW1lIGFzIG5vdCBkZWZpbmVkCiAgICByZXR1cm4gdW5sZXNzICgkc3RyKTsKICAgICRzdHIgPX4gcy9eXHMrLy87CiAgICAkc3RyID1+IHMvXHMrJC8vOwogICAgcmV0dXJuIHVubGVzcyAoJHN0cik7CgogICAgIyBUaGUgZm9ybWF0IGlzIHNwYWNlIHNlcGFyYXRlZCBpdGVtcywgd2hlcmUgZWFjaCBpdGVtIG11c3QgY29uc2lzdCBvZiBhCiAgICAjIHN0cmluZyB3aXRoIGEgdG9rZW4gdHlwZSBwcmVjZWRlZCBieSBhbiBvcHRpb25hbCB0ZXh0IHRva2VuIGFuZCBmb2xsb3dlZAogICAgIyBieSBhbiBpbnRlZ2VyOgogICAgIyBGb3IgZXhhbXBsZToKICAgICMgICAgVygxCiAgICAjICA9IChmbGFnMSkoa2V5KShmbGFnMiksIHdoZXJlCiAgICAjICAgIGZsYWcxID0gJ1cnCiAgICAjICAgIGtleSA9ICcoJwogICAgIyAgICBmbGFnMiA9ICcxJwoKICAgIG15IEBpdGVtcyA9IHNwbGl0IC9ccysvLCAkc3RyOwogICAgbXkgJG1zZzE7CiAgICBteSAkbXNnMjsKICAgIGZvcmVhY2ggbXkgJGl0ZW0gKEBpdGVtcykgewogICAgICAgIG15ICRpdGVtX3NhdmUgPSAkaXRlbTsKICAgICAgICBteSAoICRmbGFnMSwgJGtleSwgJGZsYWcyICk7CiAgICAgICAgaWYgKCAkaXRlbSA9fiAvXiAoW15cKFxbXHtdKik/ICAoW1woXHtcW10pICAoXGQpPyAkL3ggKSB7CiAgICAgICAgICAgICMjICAgICAgICAgICAgICRmbGFnMSAgICAgICAgICAka2V5ICAgICAkZmxhZzIKICAgICAgICAgICAgJGZsYWcxID0gJDEgaWYgJDE7CiAgICAgICAgICAgICRrZXkgICA9ICQyIGlmICQyOwogICAgICAgICAgICAkZmxhZzIgPSAkMyBpZiBkZWZpbmVkKCQzKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRtc2cxIC49ICIgJyRpdGVtX3NhdmUnIjsKICAgICAgICAgICAgbmV4dDsKICAgICAgICB9CgogICAgICAgIGlmICggIWRlZmluZWQoJGtleSkgKSB7CiAgICAgICAgICAgICRtc2cxIC49ICIgJyRpdGVtX3NhdmUnIjsKICAgICAgICAgICAgbmV4dDsKICAgICAgICB9CgogICAgICAgICMgQ2hlY2sgZm9yIHZhbGlkIGZsYWcxCiAgICAgICAgaWYgKCAhZGVmaW5lZCgkZmxhZzEpICkgeyAkZmxhZzEgPSAnKicgfQoKICAgICAgICBpZiAoICRmbGFnMSAhfiAvXltrS2ZGd1dcKl0kLyApIHsKICAgICAgICAgICAgJG1zZzEgLj0gIiAnJGl0ZW1fc2F2ZSciOwogICAgICAgICAgICBuZXh0OwogICAgICAgIH0KCiAgICAgICAgIyBDaGVjayBmb3IgdmFsaWQgZmxhZzIKICAgICAgICAjIDAgb3IgYmxhbms6IGlnbm9yZSBjb250YWluZXIgY29udGVudHMKICAgICAgICAjIDEgYWxsIGNvbnRhaW5lcnMgd2l0aCBzdWJsaXN0cyBtYXRjaAogICAgICAgICMgMiBhbGwgY29udGFpbmVycyB3aXRoIHN1Ymxpc3RzLCBjb2RlIGJsb2NrcyBvciB0ZXJuYXJ5IG9wZXJhdG9ycyBtYXRjaAogICAgICAgICMgLi4uIHRoaXMgY291bGQgYmUgZXh0ZW5kZWQgaW4gdGhlIGZ1dHVyZQogICAgICAgIGlmICggIWRlZmluZWQoJGZsYWcyKSApIHsgJGZsYWcyID0gMCB9CgogICAgICAgIGlmICggJGZsYWcyICF+IC9eWzAxMl0kLyApIHsKICAgICAgICAgICAgJG1zZzEgLj0gIiAnJGl0ZW1fc2F2ZSciOwogICAgICAgICAgICBuZXh0OwogICAgICAgIH0KCiAgICAgICAgaWYgKCAhZGVmaW5lZCggJGxpbmVfdXBfcGFyZW50aGVzZXNfY29udHJvbF9oYXNoeyRrZXl9ICkgKSB7CiAgICAgICAgICAgICRsaW5lX3VwX3BhcmVudGhlc2VzX2NvbnRyb2xfaGFzaHska2V5fSA9IFsgJGZsYWcxLCAkZmxhZzIgXTsKICAgICAgICAgICAgbmV4dDsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgZm9yIG11bHRpcGxlIGNvbmZsaWN0aW5nIHNwZWNpZmljYXRpb25zCiAgICAgICAgbXkgJHJmbGFncyA9ICRsaW5lX3VwX3BhcmVudGhlc2VzX2NvbnRyb2xfaGFzaHska2V5fTsKICAgICAgICBteSAkZXJyOwogICAgICAgIGlmICggZGVmaW5lZCggJHJmbGFncy0+WzBdICkgJiYgJHJmbGFncy0+WzBdIG5lICRmbGFnMSApIHsKICAgICAgICAgICAgJGVyciA9IDE7CiAgICAgICAgICAgICRyZmxhZ3MtPlswXSA9ICRmbGFnMTsKICAgICAgICB9CiAgICAgICAgaWYgKCBkZWZpbmVkKCAkcmZsYWdzLT5bMV0gKSAmJiAkcmZsYWdzLT5bMV0gbmUgJGZsYWcyICkgewogICAgICAgICAgICAkZXJyID0gMTsKICAgICAgICAgICAgJHJmbGFncy0+WzFdID0gJGZsYWcyOwogICAgICAgIH0KICAgICAgICAkbXNnMiAuPSAiICckaXRlbV9zYXZlJyIgaWYgKCRlcnIpOwogICAgICAgIG5leHQ7CiAgICB9CiAgICBpZiAoJG1zZzEpIHsKICAgICAgICBXYXJuKDw8RU9NKTsKVW5leHBlY3Rpbmcgc3ltYm9sKHMpIGVuY291bnRlcmVkIGluIC0tJG9wdF9uYW1lIHdpbGwgYmUgaWdub3JlZDoKJG1zZzEKRU9NCiAgICB9CiAgICBpZiAoJG1zZzIpIHsKICAgICAgICBXYXJuKDw8RU9NKTsKTXVsdGlwbGUgc3BlY2lmaWNhdGlvbnMgd2VyZSBlbmNvdW50ZXJlZCBpbiB0aGUgJG9wdF9uYW1lIGF0OgokbXNnMgpPbmx5IHRoZSBsYXN0IHdpbGwgYmUgdXNlZC4KRU9NCiAgICB9CgogICAgIyBTcGVlZHVwOiB3ZSBjYW4gdHVybiBvZmYgLWxwIGlmIGl0IGlzIG5vdCBhY3R1YWxseSB1c2VkCiAgICBpZiAoJGxpbmVfdXBfcGFyZW50aGVzZXNfY29udHJvbF9pc19scHhsKSB7CiAgICAgICAgbXkgJGFsbF9vZmYgPSAxOwogICAgICAgIGZvcmVhY2ggbXkgJGtleSAocXcjICggeyBbICMpIHsKICAgICAgICAgICAgbXkgJHJmbGFncyA9ICRsaW5lX3VwX3BhcmVudGhlc2VzX2NvbnRyb2xfaGFzaHska2V5fTsKICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRyZmxhZ3MpICkgewogICAgICAgICAgICAgICAgbXkgKCAkZmxhZzEsICRmbGFnMiApID0gQHskcmZsYWdzfTsKICAgICAgICAgICAgICAgIGlmICggJGZsYWcxICYmICRmbGFnMSBuZSAnKicgKSB7ICRhbGxfb2ZmID0gMDsgbGFzdCB9CiAgICAgICAgICAgICAgICBpZiAoJGZsYWcyKSAgICAgICAgICAgICAgICAgICAgeyAkYWxsX29mZiA9IDA7IGxhc3QgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICgkYWxsX29mZikgewogICAgICAgICAgICAkck9wdHMtPnsnbGluZS11cC1wYXJlbnRoZXNlcyd9ID0gRU1QVFlfU1RSSU5HOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBpbml0aWFsaXplX2xpbmVfdXBfcGFyZW50aGVzZXNfY29udHJvbF9oYXNoCgpzdWIgaW5pdGlhbGl6ZV9zcGFjZV9hZnRlcl9rZXl3b3JkIHsKCiAgICAjIERlZmF1bHQga2V5d29yZHMgZm9yIHdoaWNoIHNwYWNlIGlzIGludHJvZHVjZWQgYmVmb3JlIGFuIG9wZW5pbmcgcGFyZW46CiAgICAjIChhdCBwcmVzZW50LCBpbmNsdWRpbmcgdGhlbSBtZXNzZXMgdXAgdmVydGljYWwgYWxpZ25tZW50KQogICAgbXkgQHNhayA9IHF3KCBteSBsb2NhbCBvdXIgc3RhdGUgYW5kIG9yIHhvciBlcnIgZXEgbmUgaWYgZWxzZSBlbHNpZiB1bnRpbAogICAgICB1bmxlc3Mgd2hpbGUgZm9yIGZvcmVhY2ggcmV0dXJuIHN3aXRjaCBjYXNlIGdpdmVuIHdoZW4gY2F0Y2ggKTsKICAgICVzcGFjZV9hZnRlcl9rZXl3b3JkID0gbWFwIHsgJF8gPT4gMSB9IEBzYWs7CgogICAgIyBmaXJzdCByZW1vdmUgYW55IG9yIGFsbCBvZiB0aGVzZSBpZiBkZXNpcmVkCiAgICBpZiAoIG15IEBxID0gc3BsaXRfd29yZHMoICRyT3B0cy0+eydub3NwYWNlLWFmdGVyLWtleXdvcmQnfSApICkgewoKICAgICAgICAjIC1uc2FrPScqJyBzZWxlY3RzIGFsbCB0aGUgYWJvdmUga2V5d29yZHMKICAgICAgICBpZiAoIEBxID09IDEgJiYgJHFbMF0gZXEgJyonICkgeyBAcSA9IGtleXMgJXNwYWNlX2FmdGVyX2tleXdvcmQgfQogICAgICAgIEBzcGFjZV9hZnRlcl9rZXl3b3Jke0BxfSA9ICgwKSB4IHNjYWxhcihAcSk7CiAgICB9CgogICAgIyB0aGVuIGFsbG93IHVzZXIgdG8gYWRkIHRvIHRoZXNlIGRlZmF1bHRzCiAgICBpZiAoIG15IEBxID0gc3BsaXRfd29yZHMoICRyT3B0cy0+eydzcGFjZS1hZnRlci1rZXl3b3JkJ30gKSApIHsKICAgICAgICBAc3BhY2VfYWZ0ZXJfa2V5d29yZHtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwogICAgfQoKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGluaXRpYWxpemVfc3BhY2VfYWZ0ZXJfa2V5d29yZAoKc3ViIGluaXRpYWxpemVfb3V0ZGVudF9rZXl3b3JkIHsKCiAgICAjIEltcGxlbWVudCBvdXRkZW50aW5nIHByZWZlcmVuY2VzIGZvciBrZXl3b3JkcwogICAgJW91dGRlbnRfa2V5d29yZCA9ICgpOwogICAgbXkgQG9rdyA9IHNwbGl0X3dvcmRzKCAkck9wdHMtPnsnb3V0ZGVudC1rZXl3b3JkLWxpc3QnfSApOwogICAgaWYgKCAhQG9rdyApIHsKICAgICAgICBAb2t3ID0gcXcoIG5leHQgbGFzdCByZWRvIGdvdG8gcmV0dXJuICk7ICAgICMgZGVmYXVsdHMKICAgIH0KCiAgICAjIEZVVFVSRTogaWYgbm90IGEga2V5d29yZCwgYXNzdW1lIHRoYXQgaXQgaXMgYW4gaWRlbnRpZmllcgogICAgZm9yZWFjaCAoQG9rdykgewogICAgICAgIGlmICggUGVybDo6VGlkeTo6VG9rZW5pemVyOjppc19rZXl3b3JkKCRfKSApIHsKICAgICAgICAgICAgJG91dGRlbnRfa2V5d29yZHskX30gPSAxOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgV2FybigiaWdub3JpbmcgJyRfJyBpbiAtb2t3bCBsaXN0OyBub3QgYSBwZXJsIGtleXdvcmQiKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBpbml0aWFsaXplX291dGRlbnRfa2V5d29yZAoKc3ViIGluaXRpYWxpemVfa2V5d29yZF9wYXJlbl9pbm5lcl90aWdodG5lc3MgewoKICAgICMgU2V0dXAgaGFzaCBmb3IgLWtwaXQgb3B0aW9uCiAgICAla2V5d29yZF9wYXJlbl9pbm5lcl90aWdodG5lc3MgPSAoKTsKICAgIG15ICRrcGl0X3ZhbHVlID0gJHJPcHRzLT57J2tleXdvcmQtcGFyZW4taW5uZXItdGlnaHRuZXNzJ307CiAgICBpZiAoIGRlZmluZWQoJGtwaXRfdmFsdWUpICYmICRrcGl0X3ZhbHVlICE9IDEgKSB7CiAgICAgICAgbXkgQGtwaXQgPQogICAgICAgICAgc3BsaXRfd29yZHMoICRyT3B0cy0+eydrZXl3b3JkLXBhcmVuLWlubmVyLXRpZ2h0bmVzcy1saXN0J30gKTsKICAgICAgICBpZiAoICFAa3BpdCApIHsKICAgICAgICAgICAgQGtwaXQgPSBxdyggaWYgZWxzaWYgdW5sZXNzIHdoaWxlIHVudGlsIGZvciBmb3JlYWNoICk7ICAgICMgZGVmYXVsdHMKICAgICAgICB9CgogICAgICAgICMgd2Ugd2lsbCBhbGxvdyBrZXl3b3JkcyBhbmQgdXNlci1kZWZpbmVkIGlkZW50aWZpZXJzCiAgICAgICAgZm9yZWFjaCAoQGtwaXQpIHsKICAgICAgICAgICAgJGtleXdvcmRfcGFyZW5faW5uZXJfdGlnaHRuZXNzeyRffSA9ICRrcGl0X3ZhbHVlOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGluaXRpYWxpemVfa2V5d29yZF9wYXJlbl9pbm5lcl90aWdodG5lc3MKCnN1YiBpbml0aWFsaXplX2V4dGVuZGVkX2Jsb2NrX3RpZ2h0bmVzc19saXN0IHsKCiAgICAjIFNldHVwIHRoZSBjb250cm9sIGhhc2ggZm9yIC0tZXh0ZW5kZWQtYmxvY2stdGlnaHRuZXNzCgogICAgIyBrZXl3b3JkcyB0YWtpbmcgaW5kaXJlY3Qgb2JqZWN0czoKICAgIG15IEBrX2xpc3QgPSBrZXlzICVpc19pbmRpcmVjdF9vYmplY3RfdGFrZXI7CgogICAgIyB0eXBlIHN5bWJvbHMgd2hpY2ggbWF5IHByZWNlZGUgYW4gb3BlbmluZyBibG9jayBicmFjZQogICAgbXkgQHRfbGlzdCA9IHF3KCAkIEAgJSAmICogKTsKICAgIHB1c2ggQHRfbGlzdCwgJyQjJzsKCiAgICBteSBAYWxsID0gKCBAa19saXN0LCBAdF9saXN0ICk7CgogICAgIyBXZSB3aWxsIGJ1aWxkIHRoZSBzZWxlY3Rpb24gaW4gJWhhc2gKICAgICMgQnkgZGVmYXVsdCB0aGUgb3B0aW9uIGlzICdvbicgZm9yIGtleXdvcmRzIG9ubHkgKC14YnRsPSdrJykKICAgIG15ICVoYXNoOwogICAgQGhhc2h7QGtfbGlzdH0gPSAoMSkgeCBzY2FsYXIoQGtfbGlzdCk7CiAgICBAaGFzaHtAdF9saXN0fSA9ICgwKSB4IHNjYWxhcihAdF9saXN0KTsKCiAgICAjIFRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCAteGJ0bD0iLi4uIgogICAgbXkgJGxvbmdfbmFtZSA9ICdleHRlbmRlZC1ibG9jay10aWdodG5lc3MtbGlzdCc7CiAgICBpZiAoICRyT3B0cy0+eyRsb25nX25hbWV9ICkgewogICAgICAgIG15IEB3b3JkcyA9IHNwbGl0X3dvcmRzKCAkck9wdHMtPnskbG9uZ19uYW1lfSApOwogICAgICAgIG15IEB1bmtub3duOwoKICAgICAgICAjIFR1cm4gZXZlcnl0aGluZyBvZmYKICAgICAgICBAaGFzaHtAYWxsfSA9ICgwKSB4IHNjYWxhcihAYWxsKTsKCiAgICAgICAgIyBUaGVuIHR1cm4gb24gc2VsZWN0aW9ucwogICAgICAgIGZvcmVhY2ggbXkgJHdvcmQgKEB3b3JkcykgewoKICAgICAgICAgICAgIyAncHJpbnQnIGV0YyB0dXJucyBvbiBhIHNwZWNpZmljIHdvcmQgb3Igc3ltYm9sCiAgICAgICAgICAgIGlmICggZGVmaW5lZCggJGhhc2h7JHdvcmR9ICkgKSB7ICRoYXNoeyR3b3JkfSA9IDE7IH0KCiAgICAgICAgICAgICMgJ2snIHR1cm5zIG9uIGFsbCBrZXl3b3JkcwogICAgICAgICAgICBlbHNpZiAoICR3b3JkIGVxICdrJyApIHsKICAgICAgICAgICAgICAgIEBoYXNoe0BrX2xpc3R9ID0gKDEpIHggc2NhbGFyKEBrX2xpc3QpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjICd0JyB0dXJucyBvbiBhbGwgc3ltYm9scwogICAgICAgICAgICBlbHNpZiAoICR3b3JkIGVxICd0JyApIHsKICAgICAgICAgICAgICAgIEBoYXNoe0B0X2xpc3R9ID0gKDEpIHggc2NhbGFyKEB0X2xpc3QpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjICdrdCcgc2FtZSBhcyAnaycgYW5kICd0JyBmb3IgY29udmVuaWVuY2UKICAgICAgICAgICAgZWxzaWYgKCAkd29yZCBlcSAna3QnICkgewogICAgICAgICAgICAgICAgQGhhc2h7QGFsbH0gPSAoMSkgeCBzY2FsYXIoQGFsbCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgQW55dGhpbmcgZWxzZSBpcyBhbiBlcnJvcgogICAgICAgICAgICBlbHNlIHsgcHVzaCBAdW5rbm93biwgJHdvcmQgfQogICAgICAgIH0KICAgICAgICBpZiAoQHVua25vd24pIHsKICAgICAgICAgICAgbXkgJG51bSA9IEB1bmtub3duOwogICAgICAgICAgICBsb2NhbCAkTElTVF9TRVBBUkFUT1IgPSBTUEFDRTsKICAgICAgICAgICAgV2Fybig8PEVPTSk7CiRudW0gdW5yZWNvZ25pemVkIGtleXdvcmQocykgd2VyZSBpbnB1dCB3aXRoIC0tJGxvbmdfbmFtZSA6CkB1bmtub3duCkVPTQogICAgICAgIH0KICAgIH0KCiAgICAjIFRyYW5zZmVyIHRoZSByZXN1bHQgdG8gdGhlIGdsb2JhbCBoYXNoCiAgICAlZXh0ZW5kZWRfYmxvY2tfdGlnaHRuZXNzX2xpc3QgPSAlaGFzaDsKCiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBpbml0aWFsaXplX2V4dGVuZGVkX2Jsb2NrX3RpZ2h0bmVzc19saXN0CgpzdWIgaW5pdGlhbGl6ZV90b2tlbl9icmVha19wcmVmZXJlbmNlcyB7CgogICAgIyBJbml0aWFsaXplIHRoZXNlIGdsb2JhbCBoYXNoZXMgZGVmaW5pbmcgYnJlYWsgcHJlZmVyZW5jZXM6CiAgICAjICV3YW50X2JyZWFrX2JlZm9yZQogICAgIyAlYnJlYWtfYmVmb3JlX2NvbnRhaW5lcl90eXBlcwoKICAgIG15ICRicmVha19hZnRlciA9IHN1YiB7CiAgICAgICAgbXkgQHRva3MgPSBAXzsKICAgICAgICBmb3JlYWNoIG15ICR0b2sgKEB0b2tzKSB7CiAgICAgICAgICAgIGlmICggJHRvayBlcSAnPycgKSB7ICR0b2sgPSAnOicgfSAgICAjIHBhdGNoIHRvIGNvb3JkaW5hdGUgPy86CiAgICAgICAgICAgIGlmICggJHRvayBlcSAnLCcgKSB7ICRjb250cm9sbGVkX2NvbW1hX3N0eWxlID0gMSB9CiAgICAgICAgICAgIG15ICRsYnMgPSAkbGVmdF9ib25kX3N0cmVuZ3RoeyR0b2t9OwogICAgICAgICAgICBteSAkcmJzID0gJHJpZ2h0X2JvbmRfc3RyZW5ndGh7JHRva307CiAgICAgICAgICAgIGlmICggZGVmaW5lZCgkbGJzKSAmJiBkZWZpbmVkKCRyYnMpICYmICRsYnMgPCAkcmJzICkgewogICAgICAgICAgICAgICAgKCAkcmlnaHRfYm9uZF9zdHJlbmd0aHskdG9rfSwgJGxlZnRfYm9uZF9zdHJlbmd0aHskdG9rfSApID0KICAgICAgICAgICAgICAgICAgKCAkbGJzLCAkcmJzICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfTsgIyMgZW5kICRicmVha19hZnRlciA9IHN1YgoKICAgIG15ICRicmVha19iZWZvcmUgPSBzdWIgewogICAgICAgIG15IEB0b2tzID0gQF87CiAgICAgICAgZm9yZWFjaCBteSAkdG9rIChAdG9rcykgewogICAgICAgICAgICBpZiAoICR0b2sgZXEgJywnICkgeyAkY29udHJvbGxlZF9jb21tYV9zdHlsZSA9IDEgfQogICAgICAgICAgICBteSAkbGJzID0gJGxlZnRfYm9uZF9zdHJlbmd0aHskdG9rfTsKICAgICAgICAgICAgbXkgJHJicyA9ICRyaWdodF9ib25kX3N0cmVuZ3RoeyR0b2t9OwogICAgICAgICAgICBpZiAoIGRlZmluZWQoJGxicykgJiYgZGVmaW5lZCgkcmJzKSAmJiAkcmJzIDwgJGxicyApIHsKICAgICAgICAgICAgICAgICggJHJpZ2h0X2JvbmRfc3RyZW5ndGh7JHRva30sICRsZWZ0X2JvbmRfc3RyZW5ndGh7JHRva30gKSA9CiAgICAgICAgICAgICAgICAgICggJGxicywgJHJicyApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH07ICMjIGVuZCAkYnJlYWtfYmVmb3JlID0gc3ViCgogICAgJGJyZWFrX2FmdGVyLT4oQGFsbF9vcGVyYXRvcnMpIGlmICggJHJPcHRzLT57J2JyZWFrLWFmdGVyLWFsbC1vcGVyYXRvcnMnfSApOwogICAgJGJyZWFrX2JlZm9yZS0+KEBhbGxfb3BlcmF0b3JzKQogICAgICBpZiAoICRyT3B0cy0+eydicmVhay1iZWZvcmUtYWxsLW9wZXJhdG9ycyd9ICk7CgogICAgJGJyZWFrX2FmdGVyLT4oIHNwbGl0X3dvcmRzKCAkck9wdHMtPnsnd2FudC1icmVhay1hZnRlcid9ICkgKTsKICAgICRicmVha19iZWZvcmUtPiggc3BsaXRfd29yZHMoICRyT3B0cy0+eyd3YW50LWJyZWFrLWJlZm9yZSd9ICkgKTsKCiAgICAjIE1ha2Ugbm90ZSBpZiBicmVha3MgYXJlIGJlZm9yZSBjZXJ0YWluIGtleSB0eXBlcwogICAgIyBBZGRlZCAnLT4nIGZvciBnaXQgIzE3MS4KICAgICV3YW50X2JyZWFrX2JlZm9yZSA9ICgpOwogICAgZm9yZWFjaCBteSAkdG9rICggQGFsbF9vcGVyYXRvcnMsICcsJywgJy0+JyApIHsKICAgICAgICAkd2FudF9icmVha19iZWZvcmV7JHRva30gPQogICAgICAgICAgJGxlZnRfYm9uZF9zdHJlbmd0aHskdG9rfSA8ICRyaWdodF9ib25kX3N0cmVuZ3RoeyR0b2t9OwogICAgfQoKICAgICMgQ29vcmRpbmF0ZSA/LzogYnJlYWtzLCB3aGljaCBtdXN0IGJlIHNpbWlsYXIKICAgICMgVGhlIHNtYWxsIHN0cmVuZ3RoIDAuMDEgd2hpY2ggaXMgYWRkZWQgaXMgMSUgb2YgdGhlIHN0cmVuZ3RoIG9mIG9uZQogICAgIyBpbmRlbnRhdGlvbiBsZXZlbCBhbmQgc2VlbXMgdG8gd29yayBva2F5LgogICAgaWYgKCAhJHdhbnRfYnJlYWtfYmVmb3Jleyc6J30gKSB7CiAgICAgICAgJHdhbnRfYnJlYWtfYmVmb3Jleyc/J30gICA9ICR3YW50X2JyZWFrX2JlZm9yZXsnOid9OwogICAgICAgICRyaWdodF9ib25kX3N0cmVuZ3Roeyc/J30gPSAkcmlnaHRfYm9uZF9zdHJlbmd0aHsnOid9ICsgMC4wMTsKICAgICAgICAkbGVmdF9ib25kX3N0cmVuZ3Roeyc/J30gID0gTk9fQlJFQUs7CiAgICB9CgogICAgIyBPbmx5IG1ha2UgYSBoYXNoIGVudHJ5IGZvciB0aGUgbmV4dCBwYXJhbWV0ZXJzIGlmIHZhbHVlcyBhcmUgZGVmaW5lZC4KICAgICMgVGhhdCBhbGxvd3MgYSBxdWljayBjaGVjayB0byBiZSBtYWRlIGxhdGVyLgogICAgJWJyZWFrX2JlZm9yZV9jb250YWluZXJfdHlwZXMgPSAoKTsKICAgIGZvciAoICRyT3B0cy0+eydicmVhay1iZWZvcmUtaGFzaC1icmFjZSd9ICkgewogICAgICAgICRicmVha19iZWZvcmVfY29udGFpbmVyX3R5cGVzeyd7J30gPSAkXyBpZiAkXyAmJiAkXyA+IDA7CiAgICB9CiAgICBmb3IgKCAkck9wdHMtPnsnYnJlYWstYmVmb3JlLXNxdWFyZS1icmFja2V0J30gKSB7CiAgICAgICAgJGJyZWFrX2JlZm9yZV9jb250YWluZXJfdHlwZXN7J1snfSA9ICRfIGlmICRfICYmICRfID4gMDsKICAgIH0KICAgIGZvciAoICRyT3B0cy0+eydicmVhay1iZWZvcmUtcGFyZW4nfSApIHsKICAgICAgICAkYnJlYWtfYmVmb3JlX2NvbnRhaW5lcl90eXBlc3snKCd9ID0gJF8gaWYgJF8gJiYgJF8gPiAwOwogICAgfQoKICAgICMgTm90ZTogYSBmaXggZm9yIGIxMjY2IHByZXZpb3VzbHkgaGVyZSBpcyBub3cgY292ZXJlZCBieSB0aGUKICAgICMgdXBkYXRlcyBmb3IgYjE0NzAsIGIxNDc0LCBzbyBpdCBoYXMgYmVlbiByZW1vdmVkLgoKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGluaXRpYWxpemVfdG9rZW5fYnJlYWtfcHJlZmVyZW5jZXMKCnN1YiBpbml0aWFsaXplX2xpbmVfdXBfcGFyZW50aGVzZXMgewoKICAgICMgLXhscCBpbXBsaWVzIC1scAogICAgaWYgKCAkck9wdHMtPnsnZXh0ZW5kZWQtbGluZS11cC1wYXJlbnRoZXNlcyd9ICkgewogICAgICAgICRyT3B0cy0+eydsaW5lLXVwLXBhcmVudGhlc2VzJ30gfHw9IDE7CiAgICB9CgogICAgaWYgKCAkck9wdHMtPnsnbGluZS11cC1wYXJlbnRoZXNlcyd9ICkgewoKICAgICAgICBpZiAoICAgJHJPcHRzLT57J2luZGVudC1vbmx5J30KICAgICAgICAgICAgfHwgISRyT3B0cy0+eydhZGQtbmV3bGluZXMnfQogICAgICAgICAgICB8fCAhJHJPcHRzLT57J2RlbGV0ZS1vbGQtbmV3bGluZXMnfSApCiAgICAgICAgewogICAgICAgICAgICBXYXJuKDw8RU9NKTsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQ29uZmxpY3Q6IC1scCAgY29uZmxpY3RzIHdpdGggLWlvLCAtZm5sLCAtbmFubCwgb3IgLW5kbmw7IGlnbm9yaW5nIC1scAoKVGhlIC1scCBpbmRlbnRhdGlvbiBsb2dpYyByZXF1aXJlcyB0aGF0IHBlcmx0aWR5IGJlIGFibGUgdG8gY29vcmRpbmF0ZQphcmJpdHJhcmlseSBsYXJnZSBudW1iZXJzIG9mIGxpbmUgYnJlYWtwb2ludHMuICBUaGlzIGlzbid0IHBvc3NpYmxlCndpdGggdGhlc2UgZmxhZ3MuCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkVPTQogICAgICAgICAgICAkck9wdHMtPnsnbGluZS11cC1wYXJlbnRoZXNlcyd9ICAgICAgICAgID0gMDsKICAgICAgICAgICAgJHJPcHRzLT57J2V4dGVuZGVkLWxpbmUtdXAtcGFyZW50aGVzZXMnfSA9IDA7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRyT3B0cy0+eyd3aGl0ZXNwYWNlLWN5Y2xlJ30gKSB7CiAgICAgICAgICAgIFdhcm4oPDxFT00pOwpDb25mbGljdDogLXdjIGNhbm5vdCBjdXJyZW50bHkgYmUgdXNlZCB3aXRoIHRoZSAtbHAgb3B0aW9uOyBpZ25vcmluZyAtd2MKRU9NCiAgICAgICAgICAgICRyT3B0cy0+eyd3aGl0ZXNwYWNlLWN5Y2xlJ30gPSAwOwogICAgICAgIH0KICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgVGhlIGNvbWJpbmF0aW9uIC1scCAtdm1sbCBjYW4gYmUgdW5zdGFibGUgaWYgLWNpPDIgKGIxMjY3KQogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFRoZSAtdm1sbCBhbmQgLWxwIHBhcmFtZXRlcnMgZG8gbm90IHJlYWxseSB3b3JrIHdlbGwgdG9nZXRoZXIuCiAgICAjIFRoaXMgaXMgYSB2ZXJ5IGNydWRlIGZpeCBmb3IgYW4gdW51c3VhbCBwYXJhbWV0ZXIgY29tYmluYXRpb24uCiAgICBpZiAoICAgJHJPcHRzLT57J3ZhcmlhYmxlLW1heGltdW0tbGluZS1sZW5ndGgnfQogICAgICAgICYmICRyT3B0cy0+eydsaW5lLXVwLXBhcmVudGhlc2VzJ30KICAgICAgICAmJiAkck9wdHMtPnsnY29udGludWF0aW9uLWluZGVudGF0aW9uJ30gPCAyICkKICAgIHsKICAgICAgICAkck9wdHMtPnsnY29udGludWF0aW9uLWluZGVudGF0aW9uJ30gPSAyOwogICAgICAgICMjV2FybigiSW5jcmVhc2VkIC1jaT1uIHRvIG49MiBmb3Igc3RhYmlsaXR5IHdpdGggLWxwIGFuZCAtdm1sbFxuIik7CiAgICB9CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFRoZSBjb21iaW5hdGlvbiAtbHAgLXZtbGwgLWF0YyAtZHRjIGNhbiBiZSB1bnN0YWJsZQogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFRoaXMgZml4ZXMgYjEzODYgYjEzODcgYjEzODggd2hpY2ggaGFkIC13dGM9J2InCiAgICAjIFVwZGF0ZWQgdG8gdG8gaW5jbHVkZSBhbnkgLXd0YyB0byBmaXggYjE0MjYKICAgIGlmICggICAkck9wdHMtPnsndmFyaWFibGUtbWF4aW11bS1saW5lLWxlbmd0aCd9CiAgICAgICAgJiYgJHJPcHRzLT57J2xpbmUtdXAtcGFyZW50aGVzZXMnfQogICAgICAgICYmICRyT3B0cy0+eydhZGQtdHJhaWxpbmctY29tbWFzJ30KICAgICAgICAmJiAkck9wdHMtPnsnZGVsZXRlLXRyYWlsaW5nLWNvbW1hcyd9CiAgICAgICAgJiYgJHJPcHRzLT57J3dhbnQtdHJhaWxpbmctY29tbWFzJ30gKQogICAgewogICAgICAgICRyT3B0cy0+eydkZWxldGUtdHJhaWxpbmctY29tbWFzJ30gPSAwOwojIyBJc3N1aW5nIGEgd2FybmluZyBtZXNzYWdlIGNhdXNlcyB0cm91YmxlIHdpdGggdGVzdCBjYXNlcywgYW5kIHRoaXMgY29tYm8gaXMKIyMgc28gcmFyZSB0aGF0IGl0IGlzIHVubGlrZWx5IHRvIG5vdCBvY2N1ciBpbiBwcmFjdGljZS4gU28gc2tpcCB3YXJuaW5nLgojIyAgICAgICAgV2FybigKIyMiVGhlIGNvbWJpbmF0aW9uIC12bWxsIC1scCAtYXRjIC1kdGMgY2FuIGJlIHVuc3RhYmxlOyB0dXJuaW5nIG9mZiAtZHRjXG4iCiMjICAgICAgICApOwogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBUaGUgY29tYmluYXRpb24gLXhscCAteGNpIGFuZCBjaT5pIGNhbiBiZSB1bnN0YWJsZSAoYjE0NjYpCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgRGVhY3RpdmF0ZWQ6IHRoZSBmaXggZm9yIGIxNTAxIGFsc28gZml4ZWQgYjE0NjYgaW4gYSBzaW1wbGVyIHdheS4KICAgICMgU28gdGhpcyBibG9jayBjYW4gZXZlbnR1YWxseSBiZSByZW1vdmVkLgogICAgaWYgKCAgIDAKICAgICAgICAmJiAkck9wdHMtPnsnZXh0ZW5kZWQtbGluZS11cC1wYXJlbnRoZXNlcyd9CiAgICAgICAgJiYgJHJPcHRzLT57J2V4dGVuZGVkLWNvbnRpbnVhdGlvbi1pbmRlbnRhdGlvbid9CiAgICAgICAgJiYgJHJPcHRzLT57J2NvbnRpbnVhdGlvbi1pbmRlbnRhdGlvbid9ID4gJHJPcHRzLT57J2luZGVudC1jb2x1bW5zJ30KICAgICAgICAmJiAkck9wdHMtPnsnaW5kZW50LWNvbHVtbnMnfSA+IDEgKQogICAgewogICAgICAgICRyT3B0cy0+eydjb250aW51YXRpb24taW5kZW50YXRpb24nfSA9ICRyT3B0cy0+eydpbmRlbnQtY29sdW1ucyd9OwogICAgICAgICMjIFRoaXMgY29tYmluYXRpb24gaXMgb25seSBsaWtlbHkgdG8gb2NjdXIgZHVyaW5nIHJhbmRvbSB0ZXN0aW5nLCBzbwogICAgICAgICMjIHNraXAgdGhlIHdhcm5pbmcuCiAgICAgICAgIyNXYXJuKCJUaGUgY29tYmluYXRpb24gLXhscCAteGNpIC1jaT4taSBjYW4gYmUgdW5zdGFibGU7IHJlZHVjaW5nIGNpXG4iKTsKICAgIH0KCiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBpbml0aWFsaXplX2xpbmVfdXBfcGFyZW50aGVzZXMKCnN1YiBjaGVja190YWJzIHsKCiAgICAjIEF0IHByZXNlbnQsIHRhYnMgYXJlIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIGxpbmUtdXAtcGFyZW50aGVzZXMgc3R5bGUKICAgICMgKGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGVudGFiIHRoZSB0b3RhbCBsZWFkaW5nIHdoaXRlc3BhY2UKICAgICMganVzdCBwcmlvciB0byB3cml0aW5nIHRoZSBsaW5lLCBpZiBkZXNpcmVkKS4KICAgIGlmICggJHJPcHRzLT57J2xpbmUtdXAtcGFyZW50aGVzZXMnfSAmJiAkck9wdHMtPnsndGFicyd9ICkgewogICAgICAgIFdhcm4oPDxFT00pOwpDb25mbGljdDogLXQgKHRhYnMpIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhlIC1scCAgb3B0aW9uOyBpZ25vcmluZyAtdDsgc2VlIC1ldC4KRU9NCiAgICAgICAgJHJPcHRzLT57J3RhYnMnfSA9IDA7CiAgICB9CgogICAgIyB0YWJzIGFyZSBub3QgY29tcGF0aWJsZSB3aXRoIG91dGRlbnRpbmcuLgogICAgaWYgKCAkck9wdHMtPnsnb3V0ZGVudC1rZXl3b3Jkcyd9ICYmICRyT3B0cy0+eyd0YWJzJ30gKSB7CiAgICAgICAgV2Fybig8PEVPTSk7CkNvbmZsaWN0OiAtdCAodGFicykgY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgLW9rdyBvcHRpb25zOyBpZ25vcmluZyAtdDsgc2VlIC1ldC4KRU9NCiAgICAgICAgJHJPcHRzLT57J3RhYnMnfSA9IDA7CiAgICB9CgogICAgaWYgKCAkck9wdHMtPnsnb3V0ZGVudC1sYWJlbHMnfSAmJiAkck9wdHMtPnsndGFicyd9ICkgewogICAgICAgIFdhcm4oPDxFT00pOwpDb25mbGljdDogLXQgKHRhYnMpIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhlIC1vbGEgIG9wdGlvbjsgaWdub3JpbmcgLXQ7IHNlZSAtZXQuCkVPTQogICAgICAgICRyT3B0cy0+eyd0YWJzJ30gPSAwOwogICAgfQoKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGNoZWNrX3RhYnMKCnN1YiBpbml0aWFsaXplX2NvbnRhaW5lcl9pbmRlbnRhdGlvbl9vcHRpb25zIHsKCiAgICAlY29udGFpbmVyX2luZGVudGF0aW9uX29wdGlvbnMgPSAoKTsKICAgIGZvcmVhY2ggbXkgJHBhaXIgKAogICAgICAgIFsgJ2JyZWFrLWJlZm9yZS1oYXNoLWJyYWNlLWFuZC1pbmRlbnQnLCAgICAgJ3snIF0sCiAgICAgICAgWyAnYnJlYWstYmVmb3JlLXNxdWFyZS1icmFja2V0LWFuZC1pbmRlbnQnLCAnWycgXSwKICAgICAgICBbICdicmVhay1iZWZvcmUtcGFyZW4tYW5kLWluZGVudCcsICAgICAgICAgICcoJyBdLAogICAgICApCiAgICB7CiAgICAgICAgbXkgKCAka2V5LCAkdG9rICkgPSBAeyRwYWlyfTsKICAgICAgICBteSAkb3B0ID0gJHJPcHRzLT57JGtleX07CiAgICAgICAgaWYgKCBkZWZpbmVkKCRvcHQpICYmICRvcHQgPiAwICYmICRicmVha19iZWZvcmVfY29udGFpbmVyX3R5cGVzeyR0b2t9ICkKICAgICAgICB7CgogICAgICAgICAgICAjICgxKSAtbHAgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBvcHQ9Miwgc2lsZW50bHkgc2V0IHRvIG9wdD0wCiAgICAgICAgICAgICMgKDIpIG9wdD0wIGFuZCAyIGdpdmUgc2FtZSByZXN1bHQgaWYgLWk9LWNpOyBidXQgb3B0PTAgaXMgZmFzdGVyCiAgICAgICAgICAgICMgKDMpIHNldCBvcHQ9MCBpZiAtaSA8IC1jaSAoY2FuIGJlIHVuc3RhYmxlLCBjYXNlIGIxMzU1KQogICAgICAgICAgICBpZiAoICRvcHQgPT0gMiApIHsKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAkck9wdHMtPnsnbGluZS11cC1wYXJlbnRoZXNlcyd9CiAgICAgICAgICAgICAgICAgICAgfHwgKCAkck9wdHMtPnsnaW5kZW50LWNvbHVtbnMnfSA8PQogICAgICAgICAgICAgICAgICAgICAgICAkck9wdHMtPnsnY29udGludWF0aW9uLWluZGVudGF0aW9uJ30gKQogICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJG9wdCA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGNvbnRhaW5lcl9pbmRlbnRhdGlvbl9vcHRpb25zeyR0b2t9ID0gJG9wdDsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBpbml0aWFsaXplX2NvbnRhaW5lcl9pbmRlbnRhdGlvbl9vcHRpb25zCgpzdWIgaW5pdGlhbGl6ZV9vbGRfYnJlYWtwb2ludF9jb250cm9scyB7CgogICAgaWYgKCAkck9wdHMtPnsnaWdub3JlLW9sZC1icmVha3BvaW50cyd9ICkgewoKICAgICAgICBteSBAY29uZmxpY3RzOwogICAgICAgIGlmICggJHJPcHRzLT57J2JyZWFrLWF0LW9sZC1tZXRob2QtYnJlYWtwb2ludHMnfSApIHsKICAgICAgICAgICAgJHJPcHRzLT57J2JyZWFrLWF0LW9sZC1tZXRob2QtYnJlYWtwb2ludHMnfSA9IDA7CiAgICAgICAgICAgIHB1c2ggQGNvbmZsaWN0cywgJy0tYnJlYWstYXQtb2xkLW1ldGhvZC1icmVha3BvaW50cyAoLWJvbSknOwogICAgICAgIH0KICAgICAgICBpZiAoICRyT3B0cy0+eydicmVhay1hdC1vbGQtY29tbWEtYnJlYWtwb2ludHMnfSApIHsKICAgICAgICAgICAgJHJPcHRzLT57J2JyZWFrLWF0LW9sZC1jb21tYS1icmVha3BvaW50cyd9ID0gMDsKICAgICAgICAgICAgcHVzaCBAY29uZmxpY3RzLCAnLS1icmVhay1hdC1vbGQtY29tbWEtYnJlYWtwb2ludHMgKC1ib2MpJzsKICAgICAgICB9CiAgICAgICAgaWYgKCAkck9wdHMtPnsnYnJlYWstYXQtb2xkLXNlbWljb2xvbi1icmVha3BvaW50cyd9ICkgewogICAgICAgICAgICAkck9wdHMtPnsnYnJlYWstYXQtb2xkLXNlbWljb2xvbi1icmVha3BvaW50cyd9ID0gMDsKICAgICAgICAgICAgcHVzaCBAY29uZmxpY3RzLCAnLS1icmVhay1hdC1vbGQtc2VtaWNvbG9uLWJyZWFrcG9pbnRzICgtYm9zKSc7CiAgICAgICAgfQogICAgICAgIGlmICggJHJPcHRzLT57J2tlZXAtb2xkLWJyZWFrcG9pbnRzLWJlZm9yZSd9ICkgewogICAgICAgICAgICAkck9wdHMtPnsna2VlcC1vbGQtYnJlYWtwb2ludHMtYmVmb3JlJ30gPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgIHB1c2ggQGNvbmZsaWN0cywgJy0ta2VlcC1vbGQtYnJlYWtwb2ludHMtYmVmb3JlICgta2JiKSc7CiAgICAgICAgfQogICAgICAgIGlmICggJHJPcHRzLT57J2tlZXAtb2xkLWJyZWFrcG9pbnRzLWFmdGVyJ30gKSB7CiAgICAgICAgICAgICRyT3B0cy0+eydrZWVwLW9sZC1icmVha3BvaW50cy1hZnRlcid9ID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICBwdXNoIEBjb25mbGljdHMsICctLWtlZXAtb2xkLWJyZWFrcG9pbnRzLWFmdGVyICgta2JhKSc7CiAgICAgICAgfQoKICAgICAgICBpZiAoQGNvbmZsaWN0cykgewogICAgICAgICAgICBteSAkbXNnID0gam9pbiggIlxuICAiLAoiIENvbmZsaWN0OiBUaGVzZSBjb25mbGljdHMgd2l0aCAtLWlnbm9yZS1vbGQtYnJlYWtwb250cyAoLWlvYikgd2lsbCBiZSB0dXJuZWQgb2ZmOiIsCiAgICAgICAgICAgICAgICBAY29uZmxpY3RzICkgLiAiXG4iOwogICAgICAgICAgICBXYXJuKCRtc2cpOwogICAgICAgIH0KCiAgICAgICAgIyBOb3RlOiBUaGVzZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgYXJlIG1hZGUgaW5hY3RpdmUgYnkgLWlvYi4KICAgICAgICAjIFRoZXkgYXJlIHNpbGVudGx5IHR1cm5lZCBvZmYgaGVyZSBiZWNhdXNlIHRoZXkgYXJlIG9uIGJ5IGRlZmF1bHQuCiAgICAgICAgIyBXZSB3b3VsZCBnZW5lcmF0ZSB1bmV4cGVjdGVkIHdhcm5pbmdzIGlmIHdlIGlzc3VlZCBhIHdhcm5pbmcuCiAgICAgICAgJHJPcHRzLT57J2JyZWFrLWF0LW9sZC1rZXl3b3JkLWJyZWFrcG9pbnRzJ30gICA9IDA7CiAgICAgICAgJHJPcHRzLT57J2JyZWFrLWF0LW9sZC1sb2dpY2FsLWJyZWFrcG9pbnRzJ30gICA9IDA7CiAgICAgICAgJHJPcHRzLT57J2JyZWFrLWF0LW9sZC10ZXJuYXJ5LWJyZWFrcG9pbnRzJ30gICA9IDA7CiAgICAgICAgJHJPcHRzLT57J2JyZWFrLWF0LW9sZC1hdHRyaWJ1dGUtYnJlYWtwb2ludHMnfSA9IDA7CiAgICB9CgogICAgJWtlZXBfYnJlYWtfYmVmb3JlX3R5cGUgPSAoKTsKICAgIGluaXRpYWxpemVfa2VlcF9vbGRfYnJlYWtwb2ludHMoICRyT3B0cy0+eydrZWVwLW9sZC1icmVha3BvaW50cy1iZWZvcmUnfSwKICAgICAgICAna2JiJywgXCVrZWVwX2JyZWFrX2JlZm9yZV90eXBlICk7CgogICAgJWtlZXBfYnJlYWtfYWZ0ZXJfdHlwZSA9ICgpOwogICAgaW5pdGlhbGl6ZV9rZWVwX29sZF9icmVha3BvaW50cyggJHJPcHRzLT57J2tlZXAtb2xkLWJyZWFrcG9pbnRzLWFmdGVyJ30sCiAgICAgICAgJ2tiYScsIFwla2VlcF9icmVha19hZnRlcl90eXBlICk7CgogICAgIyBNb2RpZnkgJWtlZXBfYnJlYWtfYmVmb3JlIGFuZCAla2VlcF9icmVha19hZnRlciB0byBhdm9pZCBjb25mbGljdHMKICAgICMgd2l0aCAld2FudF9icmVha19iZWZvcmU7IGZpeGVzIGIxNDM2LgogICAgIyBUaGlzIGJlY2FtZSBuZWNlc3NhcnkgYWZ0ZXIgYnJlYWtzIGZvciBzb21lIHRva2VucyB3ZXJlIGNvbnZlcnRlZAogICAgIyBmcm9tIGhhcmQgdG8gc29mdCAoc2VlIGIxNDMzKS4KICAgICMgV2UgY291bGQgZG8gdGhpcyBmb3IgYWxsIHRva2VucywgYnV0IHRvIG1pbmltaXplIGNoYW5nZXMgdG8gZXhpc3RpbmcKICAgICMgY29kZSB3ZSBjdXJyZW50bHkgb25seSBkbyB0aGlzIGZvciB0aGUgc29mdCBicmVhayB0b2tlbnMuCiAgICBmb3JlYWNoIG15ICRrZXkgKCBrZXlzICVrZWVwX2JyZWFrX2JlZm9yZV90eXBlICkgewogICAgICAgIGlmICggICBkZWZpbmVkKCAkd2FudF9icmVha19iZWZvcmV7JGtleX0gKQogICAgICAgICAgICAmJiAhJHdhbnRfYnJlYWtfYmVmb3JleyRrZXl9CiAgICAgICAgICAgICYmICRpc19zb2Z0X2tlZXBfYnJlYWtfdHlwZXska2V5fSApCiAgICAgICAgewogICAgICAgICAgICAka2VlcF9icmVha19hZnRlcl90eXBleyRrZXl9ID0gJGtlZXBfYnJlYWtfYmVmb3JlX3R5cGV7JGtleX07CiAgICAgICAgICAgIGRlbGV0ZSAka2VlcF9icmVha19iZWZvcmVfdHlwZXska2V5fTsKICAgICAgICB9CiAgICB9CiAgICBmb3JlYWNoIG15ICRrZXkgKCBrZXlzICVrZWVwX2JyZWFrX2FmdGVyX3R5cGUgKSB7CiAgICAgICAgaWYgKCAgIGRlZmluZWQoICR3YW50X2JyZWFrX2JlZm9yZXska2V5fSApCiAgICAgICAgICAgICYmICR3YW50X2JyZWFrX2JlZm9yZXska2V5fQogICAgICAgICAgICAmJiAkaXNfc29mdF9rZWVwX2JyZWFrX3R5cGV7JGtleX0gKQogICAgICAgIHsKICAgICAgICAgICAgJGtlZXBfYnJlYWtfYmVmb3JlX3R5cGV7JGtleX0gPSAka2VlcF9icmVha19hZnRlcl90eXBleyRrZXl9OwogICAgICAgICAgICBkZWxldGUgJGtlZXBfYnJlYWtfYWZ0ZXJfdHlwZXska2V5fTsKICAgICAgICB9CiAgICB9CgogICAgJGNvbnRyb2xsZWRfY29tbWFfc3R5bGUgfHw9ICRrZWVwX2JyZWFrX2JlZm9yZV90eXBleycsJ307CiAgICAkY29udHJvbGxlZF9jb21tYV9zdHlsZSB8fD0gJGtlZXBfYnJlYWtfYWZ0ZXJfdHlwZXsnLCd9OwoKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGluaXRpYWxpemVfb2xkX2JyZWFrcG9pbnRfY29udHJvbHMKCnVzZSBjb25zdGFudCBERUJVR19LQiA9PiAwOwoKc3ViIGluaXRpYWxpemVfa2VlcF9vbGRfYnJlYWtwb2ludHMgewogICAgbXkgKCAkc3RyLCAkc2hvcnRfbmFtZSwgJHJrZWVwX2JyZWFrX2hhc2ggKSA9IEBfOwoKICAgICMgMCB3aWxsIGJlIHRyZWF0ZWQgc2FtZSBhcyBub3QgZGVmaW5lZAogICAgcmV0dXJuIHVubGVzcyAkc3RyOwoKICAgIG15ICVmbGFncyA9ICgpOwogICAgbXkgQGxpc3QgID0gc3BsaXRfd29yZHMoJHN0cik7CiAgICBpZiAoIERFQlVHX0tCICYmIEBsaXN0ICkgewogICAgICAgIGxvY2FsICRMSVNUX1NFUEFSQVRPUiA9IFNQQUNFOwogICAgICAgIHByaW50IDw8RU9NOwpERUJVR19LQiBlbnRlcmluZyBmb3IgJyRzaG9ydF9uYW1lJyB3aXRoIHN0cj0kc3RyXG4iOwpsaXN0IGlzOiBAbGlzdDsKRU9NCiAgICB9CgogICAgIyBJZ25vcmUga2JiPScoJyBhbmQgJ1snIGFuZCAneyc6IGNhbiBjYXVzZSB1bnN0YWJsZSBtYXRoIGZvcm1hdHRpbmcKICAgICMgKGlzc3VlcyBiMTM0NiwgYjEzNDcsIGIxMzQ4KSBhbmQgbGlrZXdpc2UgaWdub3JlIGtiYT0nKScgYW5kICddJyBhbmQgJ30nCiAgICAjIEFsc28gYWx3YXlzIGlnbm9yZSA/IGFuZCA6IChiMTQ0MCBhbmQgYjE0MzMtYjE0MzkpCiAgICBpZiAoICRzaG9ydF9uYW1lIGVxICdrYmInICkgewogICAgICAgIEBsaXN0ID0gZ3JlcCB7ICFtL1tcKFxbXHtcP1w6XS8gfSBAbGlzdDsKICAgIH0KICAgIGVsc2lmICggJHNob3J0X25hbWUgZXEgJ2tiYScgKSB7CiAgICAgICAgQGxpc3QgPSBncmVwIHsgIW0vW1wpXF1cfVw/XDpdLyB9IEBsaXN0OwogICAgfQogICAgZWxzZSB7CiAgICAgICAgRmF1bHQoPDxFT00pOwpCYWQgY2FsbCBhcmcgLSByZWNlaXZlZCBzaG9ydCBuYW1lICckc2hvcnRfbmFtZScgYnV0IGV4cGVjdGluZyAna2JiJyBvciAna2JhJwpFT00KICAgIH0KCiAgICAjIHB1bGwgb3V0IGFueSBhbnkgbGVhZGluZyBjb250YWluZXIgY29kZSwgbGlrZSBmKCBvciAqewogICAgIyBGb3IgZXhhbXBsZTogJ2YoJyBiZWNvbWVzIGZsYWdzIGhhc2ggZW50cnkgJygnID0+ICdmJwogICAgZm9yZWFjaCBteSAkaXRlbSAoQGxpc3QpIHsKICAgICAgICBpZiAoICRpdGVtID1+IC9eKCBbIFx3XCogXSApKCBbIFx7XChcW1x9XClcXSBdICkkL3ggKSB7CiAgICAgICAgICAgICRpdGVtID0gJDI7CiAgICAgICAgICAgICRmbGFnc3skMn0gPSAkMTsKICAgICAgICB9CiAgICB9CgogICAgbXkgQHVua25vd25fdHlwZXM7CiAgICBmb3JlYWNoIG15ICR0eXBlIChAbGlzdCkgewogICAgICAgIGlmICggIVBlcmw6OlRpZHk6OlRva2VuaXplcjo6aXNfdmFsaWRfdG9rZW5fdHlwZSgkdHlwZSkgKSB7CiAgICAgICAgICAgIHB1c2ggQHVua25vd25fdHlwZXMsICR0eXBlOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoQHVua25vd25fdHlwZXMpIHsKICAgICAgICBteSAkbnVtID0gQHVua25vd25fdHlwZXM7CiAgICAgICAgbG9jYWwgJExJU1RfU0VQQVJBVE9SID0gU1BBQ0U7CiAgICAgICAgV2Fybig8PEVPTSk7CiRudW0gdW5yZWNvZ25pemVkIHRva2VuIHR5cGVzIHdlcmUgaW5wdXQgd2l0aCAtLSRzaG9ydF9uYW1lIDoKQHVua25vd25fdHlwZXMKRU9NCiAgICB9CgogICAgQHskcmtlZXBfYnJlYWtfaGFzaH17QGxpc3R9ID0gKDEpIHggc2NhbGFyKEBsaXN0KTsKCiAgICBmb3JlYWNoIG15ICRrZXkgKCBrZXlzICVmbGFncyApIHsKICAgICAgICBteSAkZmxhZyA9ICRmbGFnc3ska2V5fTsKCiAgICAgICAgaWYgKCBsZW5ndGgoJGZsYWcpICE9IDEgKSB7CiAgICAgICAgICAgIFdhcm4oPDxFT00pOwpNdWx0aXBsZSBlbnRyaWVzIGdpdmVuIGZvciAnJGtleScgaW4gJyRzaG9ydF9uYW1lJwpFT00KICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAoICRrZXkgZXEgJygnIHx8ICRrZXkgZXEgJyknICkgJiYgJGZsYWcgIX4gL15ba0tmRndXXCpdJC8gKSB7CiAgICAgICAgICAgIFdhcm4oPDxFT00pOwpVbmtub3duIGZsYWcgJyRmbGFnJyBnaXZlbiBmb3IgJyRrZXknIGluICckc2hvcnRfbmFtZScKRU9NCiAgICAgICAgfQogICAgICAgIGVsc2lmICggKCAka2V5IGVxICd9JyB8fCAka2V5IGVxICd9JyApICYmICRmbGFnICF+IC9eW2JCXCpdJC8gKSB7CiAgICAgICAgICAgIFdhcm4oPDxFT00pOwpVbmtub3duIGZsYWcgJyRmbGFnJyBnaXZlbiBmb3IgJyRrZXknIGluICckc2hvcnRfbmFtZScKRU9NCiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAjIG5vIGVycm9yIHNlZW4KICAgICAgICB9CgogICAgICAgICRya2VlcF9icmVha19oYXNoLT57JGtleX0gPSAkZmxhZzsKICAgIH0KCiAgICBpZiAoIERFQlVHX0tCICYmIEBsaXN0ICkgewogICAgICAgIG15IEB0bXAgPSAlZmxhZ3M7CiAgICAgICAgbG9jYWwgJExJU1RfU0VQQVJBVE9SID0gU1BBQ0U7CiAgICAgICAgcHJpbnQgPDxFT007CgpERUJVR19LQiAtJHNob3J0X25hbWUgZmxhZzogJHN0cgpmaW5hbCBrZXlzOiAgQGxpc3QKc3BlY2lhbCBmbGFnczogIEB0bXAKRU9NCgogICAgfQoKICAgIHJldHVybjsKCn0gIyMgZW5kIHN1YiBpbml0aWFsaXplX2tlZXBfb2xkX2JyZWFrcG9pbnRzCgpzdWIgaW5pdGlhbGl6ZV90aWdodG5lc3NfdmFycyB7CgogICAgIyBoYXNoZXMgdXNlZCB0byBzaW1wbGlmeSBzZXR0aW5nIHdoaXRlc3BhY2UKICAgICV0aWdodG5lc3MgPSAoCiAgICAgICAgJ3snID0+ICRyT3B0cy0+eydicmFjZS10aWdodG5lc3MnfSwKICAgICAgICAnfScgPT4gJHJPcHRzLT57J2JyYWNlLXRpZ2h0bmVzcyd9LAogICAgICAgICcoJyA9PiAkck9wdHMtPnsncGFyZW4tdGlnaHRuZXNzJ30sCiAgICAgICAgJyknID0+ICRyT3B0cy0+eydwYXJlbi10aWdodG5lc3MnfSwKICAgICAgICAnWycgPT4gJHJPcHRzLT57J3NxdWFyZS1icmFja2V0LXRpZ2h0bmVzcyd9LAogICAgICAgICddJyA9PiAkck9wdHMtPnsnc3F1YXJlLWJyYWNrZXQtdGlnaHRuZXNzJ30sCiAgICApOwoKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGluaXRpYWxpemVfdGlnaHRuZXNzX3ZhcnMKCnN1YiBpbml0aWFsaXplX211bHRpcGxlX3Rva2VuX3RpZ2h0bmVzcyB7CgogICAgIyBJbml0aWFsaXphdGlvbiBmb3IgLS1tdWx0aXBsZS10b2tlbi10aWdodG5lc3MKICAgICVtdWx0aXBsZV90b2tlbl90aWdodG5lc3MgPSAoKTsKCiAgICBteSAkb3B0X25hbWUgPSAnbXVsdGlwbGUtdG9rZW4tdGlnaHRuZXNzJzsKICAgIG15ICRvcHQgICAgICA9ICRyT3B0cy0+eyRvcHRfbmFtZX07CgogICAgIyBUaGUgZGVmYXVsdCBpcyB0byBhZGQgc3BhY2VzIGZvciB0aGUgZG91YmxlIGRpYW1vbmQKICAgIGlmICggISRvcHQgKSB7CiAgICAgICAgJG11bHRpcGxlX3Rva2VuX3RpZ2h0bmVzc3snPDw+Pid9ID0gMTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBUaGVzZSBhcmUgdmFsaWQgaW5wdXQgd29yZHMgZm9yIHBlcmx0aWR5IHRva2VuIHR5cGVzCiAgICAjIE5vdGUgdGhhdCAncXcnIHdpbGwgYmUgdHJhbnNsYXRlZCBpbnRvIHRoZSBhY3R1YWwgdG9rZW4gdHlwZSAncScKICAgIG15ICVpc190eXBlX29wdGlvbjsKICAgIG15IEB0eXBlX29wdGlvbnMgPSBxdyggPDw+PiBxdyBRIGggKTsKICAgIEBpc190eXBlX29wdGlvbntAdHlwZV9vcHRpb25zfSA9ICgxKSB4IHNjYWxhcihAdHlwZV9vcHRpb25zKTsKCiAgICAjIFRoZXNlIGFyZSB2YWxpZCBpbnB1dCB3b3JkcyBzdWJ0eXBlcyBvZiB0b2tlbiB0eXBlICdRJy4KICAgICMgTm90ZSBxdyBtdXN0IGJlIHRyZWF0ZWQgc3BlY2lhbGx5IGFuZCBpcyBpbiB0aGUgcHJldmlvdXMgbGlzdC4KICAgIG15ICVpc19RX3N1YnR5cGVfb3B0aW9uOwogICAgbXkgQFFfc3VidHlwZV9vcHRpb25zID0gcXcoIHEgcXEgcXggcXIgcyB5IHRyIG0gKTsKICAgIEBpc19RX3N1YnR5cGVfb3B0aW9ue0BRX3N1YnR5cGVfb3B0aW9uc30gPQogICAgICAoMSkgeCBzY2FsYXIoQFFfc3VidHlwZV9vcHRpb25zKTsKCiAgICBteSAlaXNfdmFsaWRfdGVybSA9ICggJWlzX3R5cGVfb3B0aW9uLCAlaXNfUV9zdWJ0eXBlX29wdGlvbiApOwoKICAgICMgV29yZHMgY2FuIGJlIG5lZ2F0ZWQgYnkgcHJlZml4aW5nIHdpdGggdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXI6CiAgICBteSAkbmVnX2NoYXIgPSAnXic7CgogICAgIyBTY2FuIHRoZSBpbnB1dAogICAgbXkgJXBvc2l0aXZlX2lucHV0OwogICAgbXkgJW5lZ2F0aXZlX2lucHV0OwogICAgbXkgJGVycm9yX3N0cmluZyA9IEVNUFRZX1NUUklORzsKICAgIGlmICggZGVmaW5lZCgkb3B0KSApIHsKICAgICAgICBteSBAbGlzdCA9IHNwbGl0X3dvcmRzKCRvcHQpOwogICAgICAgIGZvcmVhY2ggbXkgJHdvcmQgKEBsaXN0KSB7CgogICAgICAgICAgICAjIFRoZSBzcGVjaWFsIHdvcmQgJ3EqJyBtZWFucyBhbGwgb2YgdGhlIFFfc3VidHlwZXMgcGx1cyAncXcnCiAgICAgICAgICAgIGlmICggJHdvcmQgZXEgJ3EqJyApIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKEBRX3N1YnR5cGVfb3B0aW9ucykgeyAkcG9zaXRpdmVfaW5wdXR7JF99ID0gMSB9CiAgICAgICAgICAgICAgICAkcG9zaXRpdmVfaW5wdXR7J3F3J30gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJHdvcmQgZXEgJG5lZ19jaGFyIC4gJ3EqJyApIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKEBRX3N1YnR5cGVfb3B0aW9ucykgeyAkbmVnYXRpdmVfaW5wdXR7JF99ID0gMSB9CiAgICAgICAgICAgICAgICAkbmVnYXRpdmVfaW5wdXR7J3F3J30gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJGlzX3ZhbGlkX3Rlcm17JHdvcmR9ICkgewogICAgICAgICAgICAgICAgJHBvc2l0aXZlX2lucHV0eyR3b3JkfSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCBzdWJzdHIoICR3b3JkLCAwLCAxICkgZXEgJG5lZ19jaGFyCiAgICAgICAgICAgICAgICAmJiAkaXNfdmFsaWRfdGVybXsgc3Vic3RyKCAkd29yZCwgMSApIH0gKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkbmVnYXRpdmVfaW5wdXR7IHN1YnN0ciggJHdvcmQsIDEgKSB9ID0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRlcnJvcl9zdHJpbmcgLj0gIiR3b3JkICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaWYgKCRlcnJvcl9zdHJpbmcpIHsKICAgICAgICAkZXJyb3Jfc3RyaW5nID1+IHMvXHMrJC8vOwogICAgICAgIFdhcm4oPDxFT00pOwpJZ25vcmluZyB0aGVzZSB1bmtub3duIHRlcm1zIGluIC0tJG9wdF9uYW1lOiAnJGVycm9yX3N0cmluZycKRU9NCiAgICB9CgogICAgIyBUaGUgdG9rZW4gJzw8Pj4nIGlzIGFsd2F5cyBhIGRlZmF1bHQgdW5sZXNzIHJlamVjdGVkCiAgICBpZiAoICEkbmVnYXRpdmVfaW5wdXR7Jzw8Pj4nfSApIHsKICAgICAgICAkcG9zaXRpdmVfaW5wdXR7Jzw8Pj4nfSA9IDE7CiAgICB9CgogICAgIyBOb3cgY29uc3RydWN0IHRoZSBjb250cm9sIGhhc2gKICAgIG15IEBRX3N1YnR5cGVfbGlzdDsKICAgIGZvcmVhY2ggbXkgJHdvcmQgKCBrZXlzICVwb3NpdGl2ZV9pbnB1dCApIHsKCiAgICAgICAgIyBuZWdhdGl2ZSBoYXMgcHJpb3JpdHkgb3ZlciBwb3NpdGl2ZQogICAgICAgIG5leHQgaWYgKCAkbmVnYXRpdmVfaW5wdXR7JHdvcmR9ICk7CgogICAgICAgIGlmICggJGlzX3R5cGVfb3B0aW9ueyR3b3JkfSApIHsKICAgICAgICAgICAgaWYgKCAkd29yZCBlcSAncXcnICkgeyAkd29yZCA9ICdxJyB9CiAgICAgICAgICAgICRtdWx0aXBsZV90b2tlbl90aWdodG5lc3N7JHdvcmR9ID0gMTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkaXNfUV9zdWJ0eXBlX29wdGlvbnskd29yZH0gKSB7CiAgICAgICAgICAgIHB1c2ggQFFfc3VidHlwZV9saXN0LCAkd29yZDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICMgc29tZXRoaW5nIGlzIHdyb25nOyBwcmV2aW91cyBjaGVja3Mgc2hvdWxkIHByZXZlbnQgYXJyaXZpbmcgaGVyZQogICAgICAgICAgICBERVZFTF9NT0RFCiAgICAgICAgICAgICAgJiYgRmF1bHQoCiAgICAgICAgICAgICAgICAidW5leHBlY3RlZCB3b3JkICckd29yZCcgd2hpbGUgaW5pdGlhbGl6aW5nIC1tdXR0PSRvcHRcbiIpOwogICAgICAgICAgICAlbXVsdGlwbGVfdG9rZW5fdGlnaHRuZXNzID0gKCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBDb25zdHJ1Y3QgYSByZWdleCBmb3IgdGhlIHNlbGVjdGVkIFEgc3VidHlwZXMsIGluIHRoZSBmb3JtCiAgICAjICAgIF4oPzpxcXxxeHxxcnxxfHN8eXx0cnxtKVxiCiAgICBpZiAoQFFfc3VidHlwZV9saXN0KSB7CiAgICAgICAgbXkgJHJlZ2V4ID0gcXteKD86fSAuIGpvaW4oICd8JywgQFFfc3VidHlwZV9saXN0ICkgLiBxeylcYn07CiAgICAgICAgaWYgKCBiYWRfcGF0dGVybigkcmVnZXgpICkgewoKICAgICAgICAgICAgIyBzaG91bGRuJ3QgaGFwcGVuOyB0aGVyZSBtdXN0IGJlIGEgY29kaW5nIGVycm9yCiAgICAgICAgICAgIG15ICRtc2cgPQogICAgICAgICAgICAgICJFUlJPUjogdGhlIC0tJG9wdF9uYW1lIGlucHV0IGNhdXNlZCBhbiBpbnZhbGlkIHJlZ2V4ICckcmVnZXgnXG4iOwogICAgICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KCRtc2cpOwogICAgICAgICAgICBXYXJuKCRtc2cpOwogICAgICAgICAgICAlbXVsdGlwbGVfdG9rZW5fdGlnaHRuZXNzID0gKCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgJG11bHRpcGxlX3Rva2VuX3RpZ2h0bmVzc3snUSd9ID0gJHJlZ2V4OwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgaW5pdGlhbGl6ZV9tdWx0aXBsZV90b2tlbl90aWdodG5lc3MKCnN1YiBpbml0aWFsaXplX2dsb2JhbF9vcHRpb25fdmFycyB7CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBNYWtlIGdsb2JhbCB2YXJzIGZvciBmcmVxdWVudGx5IHVzZWQgb3B0aW9ucyBmb3IgZWZmaWNpZW5jeQogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICRyT3B0c19hZGRfbmV3bGluZXMgICAgICAgICAgICAgPSAkck9wdHMtPnsnYWRkLW5ld2xpbmVzJ307CiAgICAkck9wdHNfYWRkX3RyYWlsaW5nX2NvbW1hcyAgICAgID0gJHJPcHRzLT57J2FkZC10cmFpbGluZy1jb21tYXMnfTsKICAgICRyT3B0c19hZGRfbG9uZV90cmFpbGluZ19jb21tYXMgPSAkck9wdHMtPnsnYWRkLWxvbmUtdHJhaWxpbmctY29tbWFzJ307CiAgICAkck9wdHNfYWRkX3doaXRlc3BhY2UgICAgICAgICAgID0gJHJPcHRzLT57J2FkZC13aGl0ZXNwYWNlJ307CiAgICAkck9wdHNfYmxhbmtfbGluZXNfYWZ0ZXJfb3BlbmluZ19ibG9jayA9CiAgICAgICRyT3B0cy0+eydibGFuay1saW5lcy1hZnRlci1vcGVuaW5nLWJsb2NrJ307CiAgICAkck9wdHNfYmxvY2tfYnJhY2VfdGlnaHRuZXNzID0gJHJPcHRzLT57J2Jsb2NrLWJyYWNlLXRpZ2h0bmVzcyd9OwogICAgJHJPcHRzX2Jsb2NrX2JyYWNlX3ZlcnRpY2FsX3RpZ2h0bmVzcyA9CiAgICAgICRyT3B0cy0+eydibG9jay1icmFjZS12ZXJ0aWNhbC10aWdodG5lc3MnfTsKICAgICRyT3B0c19icmFjZV9mb2xsb3dlcl92ZXJ0aWNhbF90aWdodG5lc3MgPQogICAgICAkck9wdHMtPnsnYnJhY2UtZm9sbG93ZXItdmVydGljYWwtdGlnaHRuZXNzJ307CiAgICAkck9wdHNfYnJlYWtfYWZ0ZXJfbGFiZWxzID0gJHJPcHRzLT57J2JyZWFrLWFmdGVyLWxhYmVscyd9OwogICAgJHJPcHRzX2JyZWFrX2F0X29sZF9hdHRyaWJ1dGVfYnJlYWtwb2ludHMgPQogICAgICAkck9wdHMtPnsnYnJlYWstYXQtb2xkLWF0dHJpYnV0ZS1icmVha3BvaW50cyd9OwogICAgJHJPcHRzX2JyZWFrX2F0X29sZF9jb21tYV9icmVha3BvaW50cyA9CiAgICAgICRyT3B0cy0+eydicmVhay1hdC1vbGQtY29tbWEtYnJlYWtwb2ludHMnfTsKICAgICRyT3B0c19icmVha19hdF9vbGRfa2V5d29yZF9icmVha3BvaW50cyA9CiAgICAgICRyT3B0cy0+eydicmVhay1hdC1vbGQta2V5d29yZC1icmVha3BvaW50cyd9OwogICAgJHJPcHRzX2JyZWFrX2F0X29sZF9sb2dpY2FsX2JyZWFrcG9pbnRzID0KICAgICAgJHJPcHRzLT57J2JyZWFrLWF0LW9sZC1sb2dpY2FsLWJyZWFrcG9pbnRzJ307CiAgICAkck9wdHNfYnJlYWtfYXRfb2xkX3NlbWljb2xvbl9icmVha3BvaW50cyA9CiAgICAgICRyT3B0cy0+eydicmVhay1hdC1vbGQtc2VtaWNvbG9uLWJyZWFrcG9pbnRzJ307CiAgICAkck9wdHNfYnJlYWtfYXRfb2xkX3Rlcm5hcnlfYnJlYWtwb2ludHMgPQogICAgICAkck9wdHMtPnsnYnJlYWstYXQtb2xkLXRlcm5hcnktYnJlYWtwb2ludHMnfTsKICAgICRyT3B0c19icmVha19vcGVuX2NvbXBhY3RfcGFyZW5zID0gJHJPcHRzLT57J2JyZWFrLW9wZW4tY29tcGFjdC1wYXJlbnMnfTsKICAgICRyT3B0c19jbG9zaW5nX3NpZGVfY29tbWVudHMgICAgID0gJHJPcHRzLT57J2Nsb3Npbmctc2lkZS1jb21tZW50cyd9OwogICAgJHJPcHRzX2Nsb3Npbmdfc2lkZV9jb21tZW50X2Vsc2VfZmxhZyA9CiAgICAgICRyT3B0cy0+eydjbG9zaW5nLXNpZGUtY29tbWVudC1lbHNlLWZsYWcnfTsKICAgICRyT3B0c19jbG9zaW5nX3NpZGVfY29tbWVudF9tYXhpbXVtX3RleHQgPQogICAgICAkck9wdHMtPnsnY2xvc2luZy1zaWRlLWNvbW1lbnQtbWF4aW11bS10ZXh0J307CiAgICAkck9wdHNfY29tbWFfYXJyb3dfYnJlYWtwb2ludHMgID0gJHJPcHRzLT57J2NvbW1hLWFycm93LWJyZWFrcG9pbnRzJ307CiAgICAkck9wdHNfY29udGludWF0aW9uX2luZGVudGF0aW9uID0gJHJPcHRzLT57J2NvbnRpbnVhdGlvbi1pbmRlbnRhdGlvbid9OwogICAgJHJPcHRzX2N1ZGRsZWRfcGFyZW5fYnJhY2UgICAgICA9ICRyT3B0cy0+eydjdWRkbGVkLXBhcmVuLWJyYWNlJ307CiAgICAkck9wdHNfZGVsZXRlX2Nsb3Npbmdfc2lkZV9jb21tZW50cyA9CiAgICAgICRyT3B0cy0+eydkZWxldGUtY2xvc2luZy1zaWRlLWNvbW1lbnRzJ307CiAgICAkck9wdHNfZGVsZXRlX29sZF93aGl0ZXNwYWNlID0gJHJPcHRzLT57J2RlbGV0ZS1vbGQtd2hpdGVzcGFjZSd9OwogICAgJHJPcHRzX2V4dGVuZGVkX2NvbnRpbnVhdGlvbl9pbmRlbnRhdGlvbiA9CiAgICAgICRyT3B0cy0+eydleHRlbmRlZC1jb250aW51YXRpb24taW5kZW50YXRpb24nfTsKICAgICRyT3B0c19kZWxldGVfc2lkZV9jb21tZW50cyAgID0gJHJPcHRzLT57J2RlbGV0ZS1zaWRlLWNvbW1lbnRzJ307CiAgICAkck9wdHNfZGVsZXRlX3RyYWlsaW5nX2NvbW1hcyA9ICRyT3B0cy0+eydkZWxldGUtdHJhaWxpbmctY29tbWFzJ307CiAgICAkck9wdHNfZGVsZXRlX2xvbmVfdHJhaWxpbmdfY29tbWFzID0KICAgICAgJHJPcHRzLT57J2RlbGV0ZS1sb25lLXRyYWlsaW5nLWNvbW1hcyd9OwogICAgJHJPcHRzX2RlbGV0ZV93ZWxkX2ludGVyZmVyaW5nX2NvbW1hcyA9CiAgICAgICRyT3B0cy0+eydkZWxldGUtd2VsZC1pbnRlcmZlcmluZy1jb21tYXMnfTsKICAgICRyT3B0c19mb3JtYXRfc2tpcHBpbmcgICA9ICRyT3B0cy0+eydmb3JtYXQtc2tpcHBpbmcnfTsKICAgICRyT3B0c19mcmVlemVfd2hpdGVzcGFjZSA9ICRyT3B0cy0+eydmcmVlemUtd2hpdGVzcGFjZSd9OwogICAgJHJPcHRzX2Z1bmN0aW9uX3BhcmVuX3ZlcnRpY2FsX2FsaWdubWVudCA9CiAgICAgICRyT3B0cy0+eydmdW5jdGlvbi1wYXJlbi12ZXJ0aWNhbC1hbGlnbm1lbnQnfTsKICAgICRyT3B0c19mdXp6eV9saW5lX2xlbmd0aCAgICAgID0gJHJPcHRzLT57J2Z1enp5LWxpbmUtbGVuZ3RoJ307CiAgICAkck9wdHNfaWdub3JlX29sZF9icmVha3BvaW50cyA9ICRyT3B0cy0+eydpZ25vcmUtb2xkLWJyZWFrcG9pbnRzJ307CiAgICAkck9wdHNfaWdub3JlX3NpZGVfY29tbWVudF9sZW5ndGhzID0KICAgICAgJHJPcHRzLT57J2lnbm9yZS1zaWRlLWNvbW1lbnQtbGVuZ3Rocyd9OwogICAgJHJPcHRzX2lnbm9yZV9wZXJsY3JpdGljX2NvbW1lbnRzID0gJHJPcHRzLT57J2lnbm9yZS1wZXJsY3JpdGljLWNvbW1lbnRzJ307CiAgICAkck9wdHNfaW5kZW50X2Nsb3NpbmdfYnJhY2UgICAgICAgPSAkck9wdHMtPnsnaW5kZW50LWNsb3NpbmctYnJhY2UnfTsKICAgICRyT3B0c19pbmRlbnRfY29sdW1ucyAgICAgICAgICAgICA9ICRyT3B0cy0+eydpbmRlbnQtY29sdW1ucyd9OwogICAgJHJPcHRzX2luZGVudF9sZWFkaW5nX3NlbWljb2xvbiAgID0gJHJPcHRzLT57J2luZGVudC1sZWFkaW5nLXNlbWljb2xvbid9OwogICAgJHJPcHRzX2luZGVudF9vbmx5ICAgICAgICAgICAgICAgID0gJHJPcHRzLT57J2luZGVudC1vbmx5J307CiAgICAkck9wdHNfa2VlcF9pbnRlcmlvcl9zZW1pY29sb25zICAgPSAkck9wdHMtPnsna2VlcC1pbnRlcmlvci1zZW1pY29sb25zJ307CiAgICAkck9wdHNfbGluZV91cF9wYXJlbnRoZXNlcyAgICAgICAgPSAkck9wdHMtPnsnbGluZS11cC1wYXJlbnRoZXNlcyd9OwogICAgJHJPcHRzX2V4dGVuZGVkX2Jsb2NrX3RpZ2h0bmVzcyAgID0gJHJPcHRzLT57J2V4dGVuZGVkLWJsb2NrLXRpZ2h0bmVzcyd9OwogICAgJHJPcHRzX2V4dGVuZGVkX2xpbmVfdXBfcGFyZW50aGVzZXMgPQogICAgICAkck9wdHMtPnsnZXh0ZW5kZWQtbGluZS11cC1wYXJlbnRoZXNlcyd9OwogICAgJHJPcHRzX2xvZ2ljYWxfcGFkZGluZyA9ICRyT3B0cy0+eydsb2dpY2FsLXBhZGRpbmcnfTsKICAgICRyT3B0c19tYXhpbXVtX2NvbnNlY3V0aXZlX2JsYW5rX2xpbmVzID0KICAgICAgJHJPcHRzLT57J21heGltdW0tY29uc2VjdXRpdmUtYmxhbmstbGluZXMnfTsKICAgICRyT3B0c19tYXhpbXVtX2ZpZWxkc19wZXJfdGFibGUgPSAkck9wdHMtPnsnbWF4aW11bS1maWVsZHMtcGVyLXRhYmxlJ307CiAgICAkck9wdHNfbWF4aW11bV9saW5lX2xlbmd0aCAgICAgID0gJHJPcHRzLT57J21heGltdW0tbGluZS1sZW5ndGgnfTsKICAgICRyT3B0c19taW5pbWl6ZV9jb250aW51YXRpb25faW5kZW50YXRpb24gPQogICAgICAkck9wdHMtPnsnbWluaW1pemUtY29udGludWF0aW9uLWluZGVudGF0aW9uJ307CiAgICAkck9wdHNfb25lX2xpbmVfYmxvY2tfc2VtaWNvbG9ucyA9ICRyT3B0cy0+eydvbmUtbGluZS1ibG9jay1zZW1pY29sb25zJ307CiAgICAkck9wdHNfb3BlbmluZ19icmFjZV9hbHdheXNfb25fcmlnaHQgPQogICAgICAkck9wdHMtPnsnb3BlbmluZy1icmFjZS1hbHdheXMtb24tcmlnaHQnfTsKICAgICRyT3B0c19vdXRkZW50X2tleXdvcmRzICAgICAgPSAkck9wdHMtPnsnb3V0ZGVudC1rZXl3b3Jkcyd9OwogICAgJHJPcHRzX291dGRlbnRfbGFiZWxzICAgICAgICA9ICRyT3B0cy0+eydvdXRkZW50LWxhYmVscyd9OwogICAgJHJPcHRzX291dGRlbnRfbG9uZ19jb21tZW50cyA9ICRyT3B0cy0+eydvdXRkZW50LWxvbmctY29tbWVudHMnfTsKICAgICRyT3B0c19vdXRkZW50X2xvbmdfcXVvdGVzICAgPSAkck9wdHMtPnsnb3V0ZGVudC1sb25nLXF1b3Rlcyd9OwogICAgJHJPcHRzX291dGRlbnRfc3RhdGljX2Jsb2NrX2NvbW1lbnRzID0KICAgICAgJHJPcHRzLT57J291dGRlbnQtc3RhdGljLWJsb2NrLWNvbW1lbnRzJ307CiAgICAkck9wdHNfcmVjb21iaW5lICAgICAgPSAkck9wdHMtPnsncmVjb21iaW5lJ307CiAgICAkck9wdHNfcXdfYXNfZnVuY3Rpb24gPSAkck9wdHMtPnsncXctYXMtZnVuY3Rpb24nfTsKICAgICRyT3B0c19zaG9ydF9jb25jYXRlbmF0aW9uX2l0ZW1fbGVuZ3RoID0KICAgICAgJHJPcHRzLT57J3Nob3J0LWNvbmNhdGVuYXRpb24taXRlbS1sZW5ndGgnfTsKICAgICRyT3B0c19zcGFjZV9wcm90b3R5cGVfcGFyZW4gICAgID0gJHJPcHRzLT57J3NwYWNlLXByb3RvdHlwZS1wYXJlbid9OwogICAgJHJPcHRzX3NwYWNlX3NpZ25hdHVyZV9wYXJlbiAgICAgPSAkck9wdHMtPnsnc3BhY2Utc2lnbmF0dXJlLXBhcmVuJ307CiAgICAkck9wdHNfc3RhY2tfY2xvc2luZ19ibG9ja19icmFjZSA9ICRyT3B0cy0+eydzdGFjay1jbG9zaW5nLWJsb2NrLWJyYWNlJ307CiAgICAkck9wdHNfc3RhdGljX2Jsb2NrX2NvbW1lbnRzICAgICA9ICRyT3B0cy0+eydzdGF0aWMtYmxvY2stY29tbWVudHMnfTsKICAgICRyT3B0c19hZGRfbWlzc2luZ19lbHNlICAgICAgICAgID0gJHJPcHRzLT57J2FkZC1taXNzaW5nLWVsc2UnfTsKICAgICRyT3B0c193YXJuX21pc3NpbmdfZWxzZSAgICAgICAgID0gJHJPcHRzLT57J3dhcm4tbWlzc2luZy1lbHNlJ307CiAgICAkck9wdHNfdGVlX2Jsb2NrX2NvbW1lbnRzICAgICAgICA9ICRyT3B0cy0+eyd0ZWUtYmxvY2stY29tbWVudHMnfTsKICAgICRyT3B0c190ZWVfcG9kICAgICAgICAgICAgICAgICAgID0gJHJPcHRzLT57J3RlZS1wb2QnfTsKICAgICRyT3B0c190ZWVfc2lkZV9jb21tZW50cyAgICAgICAgID0gJHJPcHRzLT57J3RlZS1zaWRlLWNvbW1lbnRzJ307CiAgICAkck9wdHNfdmFsaWduX2NvZGUgICAgICAgICAgICAgICA9ICRyT3B0cy0+eyd2YWxpZ24tY29kZSd9OwogICAgJHJPcHRzX3ZhbGlnbl9zaWRlX2NvbW1lbnRzICAgICAgPSAkck9wdHMtPnsndmFsaWduLXNpZGUtY29tbWVudHMnfTsKICAgICRyT3B0c192YWxpZ25faWZfdW5sZXNzICAgICAgICAgID0gJHJPcHRzLT57J3ZhbGlnbi1pZi11bmxlc3MnfTsKICAgICRyT3B0c192YWxpZ25fd2lkZV9lcXVhbHMgICAgICAgID0gJHJPcHRzLT57J3ZhbGlnbi13aWRlLWVxdWFscyd9OwogICAgJHJPcHRzX3ZhcmlhYmxlX21heGltdW1fbGluZV9sZW5ndGggPQogICAgICAkck9wdHMtPnsndmFyaWFibGUtbWF4aW11bS1saW5lLWxlbmd0aCd9OwoKICAgICMgTm90ZSB0aGF0IGJvdGggb3BlbmluZyBhbmQgY2xvc2luZyB0b2tlbnMgY2FuIGFjY2VzcyB0aGUgb3BlbmluZwogICAgIyBhbmQgY2xvc2luZyBmbGFncyBvZiB0aGVpciBjb250YWluZXIgdHlwZXMuCiAgICAlb3BlbmluZ192ZXJ0aWNhbF90aWdodG5lc3MgPSAoCiAgICAgICAgJygnID0+ICRyT3B0cy0+eydwYXJlbi12ZXJ0aWNhbC10aWdodG5lc3MnfSwKICAgICAgICAneycgPT4gJHJPcHRzLT57J2JyYWNlLXZlcnRpY2FsLXRpZ2h0bmVzcyd9LAogICAgICAgICdbJyA9PiAkck9wdHMtPnsnc3F1YXJlLWJyYWNrZXQtdmVydGljYWwtdGlnaHRuZXNzJ30sCiAgICAgICAgJyknID0+ICRyT3B0cy0+eydwYXJlbi12ZXJ0aWNhbC10aWdodG5lc3MnfSwKICAgICAgICAnfScgPT4gJHJPcHRzLT57J2JyYWNlLXZlcnRpY2FsLXRpZ2h0bmVzcyd9LAogICAgICAgICddJyA9PiAkck9wdHMtPnsnc3F1YXJlLWJyYWNrZXQtdmVydGljYWwtdGlnaHRuZXNzJ30sCiAgICApOwoKICAgICVjbG9zaW5nX3ZlcnRpY2FsX3RpZ2h0bmVzcyA9ICgKICAgICAgICAnKCcgPT4gJHJPcHRzLT57J3BhcmVuLXZlcnRpY2FsLXRpZ2h0bmVzcy1jbG9zaW5nJ30sCiAgICAgICAgJ3snID0+ICRyT3B0cy0+eydicmFjZS12ZXJ0aWNhbC10aWdodG5lc3MtY2xvc2luZyd9LAogICAgICAgICdbJyA9PiAkck9wdHMtPnsnc3F1YXJlLWJyYWNrZXQtdmVydGljYWwtdGlnaHRuZXNzLWNsb3NpbmcnfSwKICAgICAgICAnKScgPT4gJHJPcHRzLT57J3BhcmVuLXZlcnRpY2FsLXRpZ2h0bmVzcy1jbG9zaW5nJ30sCiAgICAgICAgJ30nID0+ICRyT3B0cy0+eydicmFjZS12ZXJ0aWNhbC10aWdodG5lc3MtY2xvc2luZyd9LAogICAgICAgICddJyA9PiAkck9wdHMtPnsnc3F1YXJlLWJyYWNrZXQtdmVydGljYWwtdGlnaHRuZXNzLWNsb3NpbmcnfSwKICAgICk7CgogICAgIyBhc3N1bWUgZmxhZyBmb3IgJz4nIHNhbWUgYXMgJyknIGZvciBjbG9zaW5nIHF3IHF1b3RlcwogICAgJWNsb3NpbmdfdG9rZW5faW5kZW50YXRpb24gPSAoCiAgICAgICAgJyknID0+ICRyT3B0cy0+eydjbG9zaW5nLXBhcmVuLWluZGVudGF0aW9uJ30sCiAgICAgICAgJ30nID0+ICRyT3B0cy0+eydjbG9zaW5nLWJyYWNlLWluZGVudGF0aW9uJ30sCiAgICAgICAgJ10nID0+ICRyT3B0cy0+eydjbG9zaW5nLXNxdWFyZS1icmFja2V0LWluZGVudGF0aW9uJ30sCiAgICAgICAgJz4nID0+ICRyT3B0cy0+eydjbG9zaW5nLXBhcmVuLWluZGVudGF0aW9uJ30sCiAgICApOwoKICAgICMgZmxhZyBpbmRpY2F0aW5nIGlmIGFueSBjbG9zaW5nIHRva2VucyBhcmUgaW5kZW50ZWQKICAgICRzb21lX2Nsb3NpbmdfdG9rZW5faW5kZW50YXRpb24gPQogICAgICAgICAkck9wdHMtPnsnY2xvc2luZy1wYXJlbi1pbmRlbnRhdGlvbid9CiAgICAgIHx8ICRyT3B0cy0+eydjbG9zaW5nLWJyYWNlLWluZGVudGF0aW9uJ30KICAgICAgfHwgJHJPcHRzLT57J2Nsb3Npbmctc3F1YXJlLWJyYWNrZXQtaW5kZW50YXRpb24nfQogICAgICB8fCAkck9wdHMtPnsnaW5kZW50LWNsb3NpbmctYnJhY2UnfTsKCiAgICAlb3BlbmluZ190b2tlbl9yaWdodCA9ICgKICAgICAgICAnKCcgPT4gJHJPcHRzLT57J29wZW5pbmctcGFyZW4tcmlnaHQnfSwKICAgICAgICAneycgPT4gJHJPcHRzLT57J29wZW5pbmctaGFzaC1icmFjZS1yaWdodCd9LAogICAgICAgICdbJyA9PiAkck9wdHMtPnsnb3BlbmluZy1zcXVhcmUtYnJhY2tldC1yaWdodCd9LAogICAgKTsKCiAgICAlc3RhY2tfb3BlbmluZ190b2tlbiA9ICgKICAgICAgICAnKCcgPT4gJHJPcHRzLT57J3N0YWNrLW9wZW5pbmctcGFyZW4nfSwKICAgICAgICAneycgPT4gJHJPcHRzLT57J3N0YWNrLW9wZW5pbmctaGFzaC1icmFjZSd9LAogICAgICAgICdbJyA9PiAkck9wdHMtPnsnc3RhY2stb3BlbmluZy1zcXVhcmUtYnJhY2tldCd9LAogICAgKTsKCiAgICAlc3RhY2tfY2xvc2luZ190b2tlbiA9ICgKICAgICAgICAnKScgPT4gJHJPcHRzLT57J3N0YWNrLWNsb3NpbmctcGFyZW4nfSwKICAgICAgICAnfScgPT4gJHJPcHRzLT57J3N0YWNrLWNsb3NpbmctaGFzaC1icmFjZSd9LAogICAgICAgICddJyA9PiAkck9wdHMtPnsnc3RhY2stY2xvc2luZy1zcXVhcmUtYnJhY2tldCd9LAogICAgKTsKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGluaXRpYWxpemVfZ2xvYmFsX29wdGlvbl92YXJzCgpzdWIgaW5pdGlhbGl6ZV9saW5lX2xlbmd0aF92YXJzIHsKCiAgICAjIENyZWF0ZSBhIHRhYmxlIG9mIG1heGltdW0gbGluZSBsZW5ndGggdnMgbGV2ZWwgZm9yIGxhdGVyIGVmZmljaWVudCB1c2UuCiAgICAjIFdlIHdpbGwgbWFrZSB0aGUgdGFibGVzIHZlcnkgbG9uZyB0byBiZSBzdXJlIGl0IHdpbGwgbm90IGJlIGV4Y2VlZGVkLgogICAgIyBCdXQgd2UgaGF2ZSB0byBjaG9vc2UgYSBmaXhlZCBsZW5ndGguICBBIGNoZWNrIHdpbGwgYmUgbWFkZSBhdCB0aGUgc3RhcnQKICAgICMgb2Ygc3ViICdmaW5pc2hfZm9ybWF0dGluZycgdG8gYmUgc3VyZSBpdCBpcyBub3QgZXhjZWVkZWQuICBOb3RlLCBzb21lIG9mCiAgICAjIG15IHN0YW5kYXJkIHRlc3QgcHJvYmxlbXMgaGF2ZSBpbmRlbnRhdGlvbiBsZXZlbHMgb2YgYWJvdXQgMTUwLCBzbyB0aGlzCiAgICAjIHNob3VsZCBiZSBmYWlybHkgbGFyZ2UuICBJZiB0aGUgY2hvaWNlIG9mIGEgbWF4aW11bSBsZXZlbCBldmVyIGJlY29tZXMKICAgICMgYW4gaXNzdWUgdGhlbiB0aGVzZSB0YWJsZSB2YWx1ZXMgY291bGQgYmUgcmV0dXJuZWQgaW4gYSBzdWIgd2l0aCBhIHNpbXBsZQogICAgIyBtZW1vaXphdGlvbiBzY2hlbWUuCgogICAgIyBBbHNvIGNyZWF0ZSBhIHRhYmxlIG9mIHRoZSBtYXhpbXVtIHNwYWNlcyBhdmFpbGFibGUgZm9yIHRleHQgZHVlIHRvIHRoZQogICAgIyBsZXZlbCBvbmx5LiAgSWYgYSBsaW5lIGhhcyBjb250aW51YXRpb24gaW5kZW50YXRpb24sIHRoZW4gdGhhdCBzcGFjZSBtdXN0CiAgICAjIGJlIHN1YnRyYWN0ZWQgZnJvbSB0aGUgdGFibGUgdmFsdWUuICBUaGlzIHRhYmxlIGlzIHVzZWQgZm9yIHByZWxpbWluYXJ5CiAgICAjIGVzdGltYXRlcyBpbiB3ZWxkaW5nLCBleHRlbmRlZF9jaSwgQkJYLCBhbmQgbWFya2luZyBzaG9ydCBibG9ja3MuCiAgICB1c2UgY29uc3RhbnQgTEVWRUxfVEFCTEVfTUFYID0+IDEwMDA7CgogICAgIyBUaGUgYmFzaWMgc2NoZW1lOgogICAgZm9yZWFjaCBteSAkbGV2ZWwgKCAwIC4uIExFVkVMX1RBQkxFX01BWCApIHsKICAgICAgICBteSAkaW5kZW50ID0gJGxldmVsICogJHJPcHRzX2luZGVudF9jb2x1bW5zOwogICAgICAgICRtYXhpbXVtX2xpbmVfbGVuZ3RoX2F0X2xldmVsWyRsZXZlbF0gPSAkck9wdHNfbWF4aW11bV9saW5lX2xlbmd0aDsKICAgICAgICAkbWF4aW11bV90ZXh0X2xlbmd0aF9hdF9sZXZlbFskbGV2ZWxdID0KICAgICAgICAgICRyT3B0c19tYXhpbXVtX2xpbmVfbGVuZ3RoIC0gJGluZGVudDsKICAgIH0KCiAgICAjIENvcnJlY3QgdGhlIG1heGltdW1fdGV4dF9sZW5ndGggdGFibGUgaWYgdGhlIC13Yz1uIGZsYWcgaXMgdXNlZAogICAgJHJPcHRzX3doaXRlc3BhY2VfY3ljbGUgPSAkck9wdHMtPnsnd2hpdGVzcGFjZS1jeWNsZSd9OwogICAgaWYgKCRyT3B0c193aGl0ZXNwYWNlX2N5Y2xlKSB7CiAgICAgICAgaWYgKCAkck9wdHNfd2hpdGVzcGFjZV9jeWNsZSA+IDAgKSB7CiAgICAgICAgICAgIGZvcmVhY2ggbXkgJGxldmVsICggMCAuLiBMRVZFTF9UQUJMRV9NQVggKSB7CiAgICAgICAgICAgICAgICBteSAkbGV2ZWxfbW9kID0gJGxldmVsICUgJHJPcHRzX3doaXRlc3BhY2VfY3ljbGU7CiAgICAgICAgICAgICAgICBteSAkaW5kZW50ICAgID0gJGxldmVsX21vZCAqICRyT3B0c19pbmRlbnRfY29sdW1uczsKICAgICAgICAgICAgICAgICRtYXhpbXVtX3RleHRfbGVuZ3RoX2F0X2xldmVsWyRsZXZlbF0gPQogICAgICAgICAgICAgICAgICAkck9wdHNfbWF4aW11bV9saW5lX2xlbmd0aCAtICRpbmRlbnQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRyT3B0c193aGl0ZXNwYWNlX2N5Y2xlID0gJHJPcHRzLT57J3doaXRlc3BhY2UtY3ljbGUnfSA9IDA7CiAgICAgICAgfQogICAgfQoKICAgICMgQ29ycmVjdCB0aGUgdGFibGVzIGlmIHRoZSAtdm1sbCBmbGFnIGlzIHVzZWQuICBUaGVzZSB2YWx1ZXMgb3ZlcnJpZGUgdGhlCiAgICAjIHByZXZpb3VzIHZhbHVlcy4KICAgIGlmICgkck9wdHNfdmFyaWFibGVfbWF4aW11bV9saW5lX2xlbmd0aCkgewogICAgICAgIGZvcmVhY2ggbXkgJGxldmVsICggMCAuLiBMRVZFTF9UQUJMRV9NQVggKSB7CiAgICAgICAgICAgICRtYXhpbXVtX3RleHRfbGVuZ3RoX2F0X2xldmVsWyRsZXZlbF0gPSAkck9wdHNfbWF4aW11bV9saW5lX2xlbmd0aDsKICAgICAgICAgICAgJG1heGltdW1fbGluZV9sZW5ndGhfYXRfbGV2ZWxbJGxldmVsXSA9CiAgICAgICAgICAgICAgJHJPcHRzX21heGltdW1fbGluZV9sZW5ndGggKyAkbGV2ZWwgKiAkck9wdHNfaW5kZW50X2NvbHVtbnM7CiAgICAgICAgfQogICAgfQoKICAgICMgRGVmaW5lIHR3byBtZWFzdXJlcyBvZiBpbmRlbnRhdGlvbiBsZXZlbCwgYWxwaGEgYW5kIGJldGEsIGF0IHdoaWNoIHNvbWUKICAgICMgZm9ybWF0dGluZyBmZWF0dXJlcyBjb21lIHVuZGVyIHN0cmVzcyBhbmQgbmVlZCB0byBzdGFydCBzaHV0dGluZyBkb3duLgogICAgIyBTb21lIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28gd2lsbCBiZSB1c2VkIHRvIHNodXQgZG93biBkaWZmZXJlbnQKICAgICMgZm9ybWF0dGluZyBmZWF0dXJlcy4KICAgICMgUHV0IGEgcmVhc29uYWJsZSB1cHBlciBsaW1pdCBvbiBzdHJlc3MgbGV2ZWwgKHNheSAxMDApIGluIGNhc2UgdGhlCiAgICAjIHdoaXRlc3BhY2UtY3ljbGUgdmFyaWFibGUgaXMgdXNlZC4KICAgIG15ICRzdHJlc3NfbGV2ZWxfbGltaXQgPSBtaW4oIDEwMCwgTEVWRUxfVEFCTEVfTUFYICk7CgogICAgIyBGaW5kIHN0cmVzc19sZXZlbF9hbHBoYSwgdGFyZ2V0ZWQgYXQgdmVyeSBzaG9ydCBtYXhpbXVtIGxpbmUgbGVuZ3Rocy4KICAgICRzdHJlc3NfbGV2ZWxfYWxwaGEgPSAkc3RyZXNzX2xldmVsX2xpbWl0ICsgMTsKICAgIGZvcmVhY2ggbXkgJGxldmVsX3Rlc3QgKCAwIC4uICRzdHJlc3NfbGV2ZWxfbGltaXQgKSB7CiAgICAgICAgbXkgJG1heF9sZW4gPSAkbWF4aW11bV90ZXh0X2xlbmd0aF9hdF9sZXZlbFsgJGxldmVsX3Rlc3QgKyAxIF07CiAgICAgICAgbXkgJGV4Y2Vzc19pbnNpZGVfc3BhY2UgPQogICAgICAgICAgJG1heF9sZW4gLQogICAgICAgICAgJHJPcHRzX2NvbnRpbnVhdGlvbl9pbmRlbnRhdGlvbiAtCiAgICAgICAgICAkck9wdHNfaW5kZW50X2NvbHVtbnMgLSA4OwogICAgICAgIGlmICggJGV4Y2Vzc19pbnNpZGVfc3BhY2UgPD0gMCApIHsKICAgICAgICAgICAgJHN0cmVzc19sZXZlbF9hbHBoYSA9ICRsZXZlbF90ZXN0OwogICAgICAgICAgICBsYXN0OwogICAgICAgIH0KICAgIH0KCiAgICAjIEZpbmQgc3RyZXNzIGxldmVsIGJldGEsIGEgc3RyZXNzIGxldmVsIHRhcmdldGVkIGF0IGZvcm1hdHRpbmcKICAgICMgYXQgZGVlcCBsZXZlbHMgbmVhciB0aGUgbWF4aW11bSBsaW5lIGxlbmd0aC4gIFdlIHN0YXJ0IGluY3JlYXNpbmcKICAgICMgZnJvbSB6ZXJvIGFuZCBzdG9wIGF0IHRoZSBmaXJzdCBsZXZlbCB3aGljaCBzaG93cyBubyBtb3JlIHNwYWNlLgoKICAgICMgJ2NvbnN0JyBpcyBhIGZpeGVkIG51bWJlciBvZiBzcGFjZXMgZm9yIGEgdHlwaWNhbCB2YXJpYWJsZS4KICAgICMgQ2FzZXMgYjExOTctYjEyMDQgd29yayBvayB3aXRoIGNvbnN0PTEyIGJ1dCBub3Qgd2l0aCBjb25zdD04CiAgICBteSAkY29uc3QgPSAxNjsKICAgIG15ICRkZW5vbSA9IG1heCggMSwgJHJPcHRzX2luZGVudF9jb2x1bW5zICk7CiAgICAkc3RyZXNzX2xldmVsX2JldGEgPSAwOwogICAgZm9yZWFjaCBteSAkbGV2ZWwgKCAwIC4uICRzdHJlc3NfbGV2ZWxfbGltaXQgKSB7CiAgICAgICAgbXkgJHJlbWFpbmluZ19jeWNsZXMgPSBtYXgoCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICRtYXhpbXVtX3RleHRfbGVuZ3RoX2F0X2xldmVsWyRsZXZlbF0gLQogICAgICAgICAgICAgICAgICAkck9wdHNfY29udGludWF0aW9uX2luZGVudGF0aW9uIC0gJGNvbnN0CiAgICAgICAgICAgICkgLyAkZGVub20KICAgICAgICApOwogICAgICAgIGxhc3QgaWYgKCAkcmVtYWluaW5nX2N5Y2xlcyA8PSAzICk7ICAgICMgMiBkb2VzIG5vdCB3b3JrCiAgICAgICAgJHN0cmVzc19sZXZlbF9iZXRhID0gJGxldmVsOwogICAgfQoKICAgICMgVGhpcyBpcyBhIGNvbWJpbmVkIGxldmVsIHdoaWNoIHdvcmtzIHdlbGwgZm9yIHR1cm5pbmcgb2ZmIGZvcm1hdHRpbmcKICAgICMgZmVhdHVyZXMgaW4gbW9zdCBjYXNlczoKICAgICRoaWdoX3N0cmVzc19sZXZlbCA9IG1pbiggJHN0cmVzc19sZXZlbF9hbHBoYSwgJHN0cmVzc19sZXZlbF9iZXRhICsgMiApOwoKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGluaXRpYWxpemVfbGluZV9sZW5ndGhfdmFycwoKc3ViIGluaXRpYWxpemVfdHJhaWxpbmdfY29tbWFfYnJlYWtfcnVsZXMgewoKICAgICMgU2V0dXAgY29udHJvbCBoYXNoIGZvciBtYWtpbmcgdHJhaWxpbmcgY29tbWEgYnJlYWtzLiBVcGRhdGUgYzQxNi4KICAgICMgVGhpcyBzdWIgaXMgc2ltaWxhciB0byAnc3ViIGluaXRpYWxpemVfdHJhaWxpbmdfY29tbWFfcnVsZXMnIGJ1dAogICAgIyBzaW1wbGVyLgoKICAgICMgLWJ0Y3Q9cywgd2hlcmUgcwogICAgIwogICAgIyAgPSIgIiBub25lCiAgICAjICA9MCA6IG5vbmUKICAgICMgID0xIG9yICogOiBhbGwKICAgICMgID1tIDogYnJlYWsgYXQgdHJhaWxpbmcgY29tbWFzIGluIG11bHRpbGluZSBsaXN0cwogICAgIyAgPWIgOiBicmVhayBhdCBiYXJlIHRyYWlsaW5nIGNvbW1hcwoKICAgICV0cmFpbGluZ19jb21tYV9icmVha19ydWxlcyA9ICgpOwoKICAgIG15ICRydmFsaWRfZmxhZ3MgPSBbcXcoIDAgMSAqIG0gYiApXTsKCiAgICAjIE5vdGUgdGhhdCB0aGUgaGFzaCBrZXlzIGFyZSB0aGUgQ0xPU0lORyB0b2tlbnMgYnV0IHRoZSBpbnB1dAogICAgIyB1c2VzIE9QRU5JTkcgdG9rZW5zLgogICAgbXkgQGFsbF9rZXlzID0gcXc8ICkgXSB9ID47CgogICAgbXkgJG9wdGlvbiA9ICRyT3B0cy0+eydicmVhay1hdC10cmFpbGluZy1jb21tYS10eXBlcyd9OwoKICAgIGlmICgkb3B0aW9uKSB7CiAgICAgICAgJG9wdGlvbiA9fiBzL15ccysvLzsKICAgICAgICAkb3B0aW9uID1+IHMvXHMrJC8vOwogICAgfQoKICAgICMgV2UgbmVlZCB0byB1c2UgbGVuZ3RoKCkgaGVyZSBiZWNhdXNlICcwJyBpcyBhIHBvc3NpYmxlIG9wdGlvbgogICAgaWYgKCBkZWZpbmVkKCRvcHRpb24pICYmIGxlbmd0aCgkb3B0aW9uKSApIHsKICAgICAgICBteSAkZXJyb3JfbWVzc2FnZTsKICAgICAgICBteSAlcnVsZV9oYXNoOwogICAgICAgIG15IEBxID0gQHskcnZhbGlkX2ZsYWdzfTsKICAgICAgICBteSAlaXNfdmFsaWRfZmxhZzsKICAgICAgICBAaXNfdmFsaWRfZmxhZ3tAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICAgICAjIGhhbmRsZSB0aGUgY29tbW9uIGNhc2Ugb2YgYSBzaW5nbGUgY29udHJvbCBjaGFyYWN0ZXIsIGxpa2UgLWJ0Y3Q9J2InCiAgICAgICAgaWYgKCBsZW5ndGgoJG9wdGlvbikgPT0gMSApIHsKCiAgICAgICAgICAgICMgc2tpcCAwCiAgICAgICAgICAgIGlmICgkb3B0aW9uKSB7CiAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRrZXkgKEBhbGxfa2V5cykgewogICAgICAgICAgICAgICAgICAgICRydWxlX2hhc2h7JGtleX0gPSBbICRvcHRpb24sIEVNUFRZX1NUUklORyBdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGhhbmRsZSBtdWx0aS1jaGFyYWN0ZXIgY29udHJvbChzKSwgc3VjaCBhcyAtYnRjdD0nW20nIG9yIC1idGN0PSdrKG0nCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIG15IEBwYXJ0cyA9IHNwbGl0IC9ccysvLCAkb3B0aW9uOwogICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJ0IChAcGFydHMpIHsKICAgICAgICAgICAgICAgIG15ICRwYXJ0X2lucHV0ID0gJHBhcnQ7CgogICAgICAgICAgICAgICAgIyBleGFtcGxlczogYiAtYiBbYiAwICogK2YoYgoKICAgICAgICAgICAgICAgICMgdGhlIGxldHRlciB2YWx1ZSBpcyB0aGUgcmlnaHRtb3N0IGNoYXJhY3RlcgogICAgICAgICAgICAgICAgbXkgJHZhbCA9IHN1YnN0ciggJHBhcnQsIC0xLCAxICk7CgogICAgICAgICAgICAgICAgIyBza2lwIDAKICAgICAgICAgICAgICAgIG5leHQgdW5sZXNzICgkdmFsKTsKICAgICAgICAgICAgICAgICRwYXJ0ID0gc3Vic3RyKCAkcGFydCwgMCwgLTEgKTsKICAgICAgICAgICAgICAgIGlmICggJHZhbCAmJiAhJGlzX3ZhbGlkX2ZsYWd7JHZhbH0gKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJHZhbGlkX3N0ciA9IGpvaW4oIFNQQUNFLCBAeyRydmFsaWRfZmxhZ3N9ICk7CiAgICAgICAgICAgICAgICAgICAgJGVycm9yX21lc3NhZ2UgLj0KIkluICckcGFydF9pbnB1dCc6IHVuZXhwZWN0ZWQgdmFsdWUgJyR2YWwnOyBtdXN0IGJlIG9uZSBvZjogJHZhbGlkX3N0clxuIjsKICAgICAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgc2V0IGRlZmF1bHRzIGZvciB0aGlzIGl0ZW0KICAgICAgICAgICAgICAgIG15IEBrZXlzICAgICAgID0gQGFsbF9rZXlzOwogICAgICAgICAgICAgICAgbXkgJHBhcmVuX2ZsYWcgPSBFTVBUWV9TVFJJTkc7CgogICAgICAgICAgICAgICAgIyBsb29rIGZvciBvcGVuaW5nIGNvbnRhaW5lciBicmFja2V0CiAgICAgICAgICAgICAgICBteSAkaXNfcGFyZW47CiAgICAgICAgICAgICAgICBpZiAoIGxlbmd0aCgkcGFydCkgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJHRva2VuID0gc3Vic3RyKCAkcGFydCwgLTEsIDEgKTsKICAgICAgICAgICAgICAgICAgICBpZiAoICRpc19vcGVuaW5nX3Rva2VueyR0b2tlbn0gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIG5vdGUgdGhhdCB0aGUgaGFzaCBrZXkgaXMgdGhlIGNsb3NpbmcgdG9rZW4KICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGtleSA9ICRtYXRjaGluZ190b2tlbnskdG9rZW59OwogICAgICAgICAgICAgICAgICAgICAgICBAa2V5cyAgICAgPSAoJGtleSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRwYXJ0ICAgICA9IHN1YnN0ciggJHBhcnQsIDAsIC0xICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRpc19wYXJlbiA9ICR0b2tlbiBlcSAnKCc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgYW55dGhpbmcgbGVmdCBtdXN0IGJlIGEgcGFyZW4gbW9kaWZpZXIKICAgICAgICAgICAgICAgIGlmICggbGVuZ3RoKCRwYXJ0KSApIHsKICAgICAgICAgICAgICAgICAgICAkcGFyZW5fZmxhZyA9IHN1YnN0ciggJHBhcnQsIC0xLCAgMSApOwogICAgICAgICAgICAgICAgICAgICRwYXJ0ICAgICAgID0gc3Vic3RyKCAkcGFydCwgIDAsIC0xICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkcGFyZW5fZmxhZyAhfiAvXltrS2ZGd1ddJC8gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRlcnJvcl9tZXNzYWdlIC49CiJJbiAnJHBhcnRfaW5wdXQnOiBVbmV4cGVjdGVkIHBhcmVuIGZsYWcgJyRwYXJlbl9mbGFnJzsgbXVzdCBiZSBvbmUgb2Y6IGsgSyBmIEYgdyBXXG4iOwogICAgICAgICAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoICEkaXNfcGFyZW4gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRlcnJvcl9tZXNzYWdlIC49CiJJbiAnJHBhcnRfaW5wdXQnOiBwYXJlbiBmbGFnICckcGFyZW5fZmxhZycgaXMgb25seSBhbGxvd2VkIGJlZm9yZSBhICcoJ1xuIjsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCBsZW5ndGgoJHBhcnQpICkgewogICAgICAgICAgICAgICAgICAgICRlcnJvcl9tZXNzYWdlIC49ICJVbnJlY29nbml6ZWQgdGVybTogJyRwYXJ0X2lucHV0J1xuIjsKICAgICAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG15ICRkdXBsaWNhdGU7CiAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRrZXkgKEBrZXlzKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCAkcnVsZV9oYXNoeyRrZXl9ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRkdXBsaWNhdGUgPSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkcnVsZV9oYXNoeyRrZXl9ID0gWyAkdmFsLCAkcGFyZW5fZmxhZyBdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCRkdXBsaWNhdGUpIHsKICAgICAgICAgICAgICAgICAgICAkZXJyb3JfbWVzc2FnZSAuPQogICAgICAgICAgICAgICAgICAgICAgIlRoaXMgdGVybSBvdmVybGFwcyBhIHByZXZpb3VzIHRlcm06ICckcGFydF9pbnB1dCdcbiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgZm9yIGNvbmZsaWN0aW5nIHNpZ25lZCBvcHRpb25zCiAgICAgICAgaWYgKCRlcnJvcl9tZXNzYWdlKSB7CiAgICAgICAgICAgIFdhcm4oPDxFT00pOwpFcnJvciBwYXJzaW5nIC0td2FudC10cmFpbGluZy1jb21tYXM9JyRvcHRpb24nOgokZXJyb3JfbWVzc2FnZQpFT00KICAgICAgICB9CgogICAgICAgICMgU2V0IHRoZSBjb250cm9sIGhhc2ggaWYgbm8gZXJyb3JzCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICV0cmFpbGluZ19jb21tYV9icmVha19ydWxlcyA9ICVydWxlX2hhc2g7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGluaXRpYWxpemVfdHJhaWxpbmdfY29tbWFfYnJlYWtfcnVsZXMKCnN1YiBpbml0aWFsaXplX3RyYWlsaW5nX2NvbW1hX3J1bGVzIHsKCiAgICAjIFNldHVwIGNvbnRyb2wgaGFzaCBmb3IgdHJhaWxpbmcgY29tbWFzCgogICAgIyAtd3RjPXMgZGVmaW5lcyBkZXNpcmVkIHRyYWlsaW5nIGNvbW1hIHBvbGljeToKICAgICMKICAgICMgID0iICIgIHN0YWJsZQogICAgIyAgICAgICAgWyBib3RoIC1hdGMgIGFuZCAtZHRjIGlnbm9yZWQgXQogICAgIyAgPTAgOiBub25lCiAgICAjICAgICAgICBbcmVxdWlyZXMgLWR0YzsgLWF0YyBpZ25vcmVkXQogICAgIyAgPTEgb3IgKiA6IGFsbAogICAgIyAgICAgICAgW3JlcXVpcmVzIC1hdGM7IC1kdGMgaWdub3JlZF0KICAgICMgID1tIDogbXVsdGlsaW5lIGxpc3RzIHJlcXVpcmUgdHJhaWxpbmcgY29tbWEKICAgICMgICAgICAgIGlmIC1hdGMgc2V0ID0+IHdpbGwgYWRkIG1pc3NpbmcgbXVsdGlsaW5lIHRyYWlsaW5nIGNvbW1hcwogICAgIyAgICAgICAgaWYgLWR0YyBzZXQgPT4gd2lsbCBkZWxldGUgdHJhaWxpbmcgc2luZ2xlIGxpbmUgY29tbWFzCiAgICAjICA9YiBvciAnYmFyZScgKG11bHRpbGluZSkgbGlzdHMgcmVxdWlyZSB0cmFpbGluZyBjb21tYQogICAgIyAgICAgICAgaWYgLWF0YyBzZXQgPT4gd2lsbCBhZGQgbWlzc2luZyBiYXJlIHRyYWlsaW5nIGNvbW1hcwogICAgIyAgICAgICAgaWYgLWR0YyBzZXQgPT4gd2lsbCBkZWxldGUgbm9uLWJhcmUgdHJhaWxpbmcgY29tbWFzCiAgICAjICA9aCBvciAnaGFzaCc6IHNpbmdsZSBjb2x1bW4gc3RhYmxlIGJhcmUgbGlzdHMgcmVxdWlyZSB0cmFpbGluZyBjb21tYQogICAgIyAgICAgICAgaWYgLWF0YyBzZXQgd2lsbCBhZGQgdGhlc2UKICAgICMgICAgICAgIGlmIC1kdGMgc2V0IHdpbGwgZGVsZXRlIG90aGVyIHRyYWlsaW5nIGNvbW1hcwoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIEltcG9ydGFudDoKICAgICMgLSBUaGlzIHJvdXRpbmUgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIGFscGhhIGFuZCBiZXRhIHN0cmVzcyBsZXZlbHMKICAgICMgICBoYXZlIGJlZW4gZGVmaW5lZCBpbiBzdWIgJ2luaXRpYWxpemVfbGluZV9sZW5ndGhfdmFycycuCiAgICAjIC0gYW5kIGl0IG11c3QgYmUgY2FsbGVkIGFmdGVyIHN1YiAnaW5pdGlhbGl6ZV90cmFpbGluZ19jb21tYV9icmVha19ydWxlcycKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgJXRyYWlsaW5nX2NvbW1hX3J1bGVzID0gKCk7CgogICAgbXkgJHJ2YWxpZF9mbGFncyA9IFtxdyggMCAxICogbSBiIGggaSApXTsKCiAgICAjIFRoaXMgaGFzaCBzaG93cyBpLmUuIHRoYXQgJ20nIGluY2x1ZGVzIGFsbCAnYicgaW5jbHVkZXMgYWxsICdpJyAuLi5ldGMKICAgICMgSXQgaXMgdXNlZCB0byBjaGVjayBmb3Igb3ZlcmxhcCB3aGVuIGJvdGggKyBhbmQgLSBzaWducyBhcmUgdXNlZCB0bwogICAgIyBjYXVzZSBhZGRpbmcgYW5kIGRlbGV0aW5nIG9mIGRpZmZlcmVudCB0eXBlcyBvZiB0cmFpbGluZyBjb21tYXMuCiAgICBteSAlbWF0Y2hfb3JkZXIgPSAoCiAgICAgICAgJzEnID0+IDAsCiAgICAgICAgJyonID0+IDAsCiAgICAgICAgJ20nID0+IDEsCiAgICAgICAgJ2InID0+IDIsCiAgICAgICAgJ2knID0+IDMsCiAgICAgICAgJ2gnID0+IDQsCiAgICAgICAgJzAnID0+IDUsCiAgICApOwoKICAgICMgTm90ZSB0aGF0IHRoZSBoYXNoIGtleXMgYXJlIHRoZSBDTE9TSU5HIHRva2VucyBidXQgdGhlIGlucHV0CiAgICAjIHVzZXMgT1BFTklORyB0b2tlbnMuCiAgICBteSBAYWxsX2tleXMgPSBxdzwgKSBdIH0gPjsKCiAgICBteSAkb3B0aW9uID0gJHJPcHRzLT57J3dhbnQtdHJhaWxpbmctY29tbWFzJ307CgogICAgaWYgKCRvcHRpb24pIHsKICAgICAgICAkb3B0aW9uID1+IHMvXlxzKy8vOwogICAgICAgICRvcHRpb24gPX4gcy9ccyskLy87CiAgICB9CgogICAgIyBQdWxsIG91dCAtYnRjdCBwYXJlbiBmbGFnIGZvciB1c2UgaW4gY2hlY2tpbmcgc3RhYmlsaXR5IGluIG1hcmdpbmFsIGNhc2VzCiAgICBteSAoICR0Y19sZXR0ZXIsICR0Y19wYXJlbl9mbGFnICk7CiAgICBteSAkdGNfcGFyZW5fcnVsZSA9ICR0cmFpbGluZ19jb21tYV9icmVha19ydWxlc3snKSd9OwogICAgaWYgKCBkZWZpbmVkKCR0Y19wYXJlbl9ydWxlKSApIHsKICAgICAgICAoICR0Y19sZXR0ZXIsICR0Y19wYXJlbl9mbGFnICkgPSBAeyR0Y19wYXJlbl9ydWxlfTsKICAgIH0KCiAgICAjIFdlIG5lZWQgdG8gdXNlIGxlbmd0aCgpIGhlcmUgYmVjYXVzZSAnMCcgaXMgYSBwb3NzaWJsZSBvcHRpb24KICAgIGlmICggZGVmaW5lZCgkb3B0aW9uKSAmJiBsZW5ndGgoJG9wdGlvbikgKSB7CiAgICAgICAgbXkgJGVycm9yX21lc3NhZ2U7CiAgICAgICAgbXkgJXJ1bGVfaGFzaDsKICAgICAgICBteSBAcSA9IEB7JHJ2YWxpZF9mbGFnc307CiAgICAgICAgbXkgJWlzX3ZhbGlkX2ZsYWc7CiAgICAgICAgQGlzX3ZhbGlkX2ZsYWd7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICAgICAgIyBoYW5kbGUgdGhlIGNvbW1vbiBjYXNlIG9mIGEgc2luZ2xlIGNvbnRyb2wgY2hhcmFjdGVyLCBsaWtlIC13dGM9J2InCiAgICAgICAgaWYgKCBsZW5ndGgoJG9wdGlvbikgPT0gMSApIHsKICAgICAgICAgICAgZm9yZWFjaCBteSAka2V5IChAYWxsX2tleXMpIHsKICAgICAgICAgICAgICAgIG15ICRwYXJlbl9mbGFnID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICAgICAgbXkgJHN0YWJsZSAgICAgPSBkZWZpbmVkKCAkdHJhaWxpbmdfY29tbWFfYnJlYWtfcnVsZXN7JGtleX0gKTsKICAgICAgICAgICAgICAgIGlmICggJGtleSBlcSAnKScgKSB7ICRzdGFibGUgJiY9ICRwYXJlbl9mbGFnIGVxICR0Y19wYXJlbl9mbGFnIH0KICAgICAgICAgICAgICAgICRydWxlX2hhc2h7YWRkfS0+eyRrZXl9ICAgID0gWyAkb3B0aW9uLCAkcGFyZW5fZmxhZywgJHN0YWJsZSBdOwogICAgICAgICAgICAgICAgJHJ1bGVfaGFzaHtkZWxldGV9LT57JGtleX0gPSBbICRvcHRpb24sICRwYXJlbl9mbGFnLCAkc3RhYmxlIF07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgaGFuZGxlIG11bHRpLWNoYXJhY3RlciBjb250cm9sKHMpLCBzdWNoIGFzIC13dGM9J1ttJyBvciAtd3RjPSdrKG0nCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIG15IEBwYXJ0cyA9IHNwbGl0IC9ccysvLCAkb3B0aW9uOwogICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJ0IChAcGFydHMpIHsKICAgICAgICAgICAgICAgIG15ICRwYXJ0X2lucHV0ID0gJHBhcnQ7CgogICAgICAgICAgICAgICAgIyBleGFtcGxlczogYiAtYiBbYiAwICogK2YoYgoKICAgICAgICAgICAgICAgICMgdGhlIGxldHRlciB2YWx1ZSBpcyB0aGUgcmlnaHRtb3N0IGNoYXJhY3RlcgogICAgICAgICAgICAgICAgbXkgJHZhbCA9IHN1YnN0ciggJHBhcnQsIC0xLCAxICk7CiAgICAgICAgICAgICAgICAkcGFydCA9IHN1YnN0ciggJHBhcnQsIDAsIC0xICk7CiAgICAgICAgICAgICAgICBpZiAoICR2YWwgJiYgISRpc192YWxpZF9mbGFneyR2YWx9ICkgewogICAgICAgICAgICAgICAgICAgIG15ICR2YWxpZF9zdHIgPSBqb2luKCBTUEFDRSwgQHskcnZhbGlkX2ZsYWdzfSApOwogICAgICAgICAgICAgICAgICAgICRlcnJvcl9tZXNzYWdlIC49CiJJbiAnJHBhcnRfaW5wdXQnOiB1bmV4cGVjdGVkIHZhbHVlICckdmFsJzsgbXVzdCBiZSBvbmUgb2Y6ICR2YWxpZF9zdHJcbiI7CiAgICAgICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHNldCBkZWZhdWx0cyBmb3IgdGhpcyBpdGVtCiAgICAgICAgICAgICAgICBteSBAc2lnbnMgICAgICA9IHF3KCBhZGQgZGVsZXRlICk7CiAgICAgICAgICAgICAgICBteSBAa2V5cyAgICAgICA9IEBhbGxfa2V5czsKICAgICAgICAgICAgICAgIG15ICRwYXJlbl9mbGFnID0gRU1QVFlfU1RSSU5HOwoKICAgICAgICAgICAgICAgICMgbG9vayBmb3Igb3BlbmluZyBjb250YWluZXIgYnJhY2tldAogICAgICAgICAgICAgICAgbXkgJGlzX3BhcmVuOwogICAgICAgICAgICAgICAgaWYgKCBsZW5ndGgoJHBhcnQpICkgewogICAgICAgICAgICAgICAgICAgIG15ICR0b2tlbiA9IHN1YnN0ciggJHBhcnQsIC0xLCAxICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkaXNfb3BlbmluZ190b2tlbnskdG9rZW59ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBub3RlIHRoYXQgdGhlIGhhc2gga2V5IGlzIHRoZSBjbG9zaW5nIHRva2VuCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRrZXkgPSAkbWF0Y2hpbmdfdG9rZW57JHRva2VufTsKICAgICAgICAgICAgICAgICAgICAgICAgQGtleXMgICAgID0gKCRrZXkpOwogICAgICAgICAgICAgICAgICAgICAgICAkcGFydCAgICAgPSBzdWJzdHIoICRwYXJ0LCAwLCAtMSApOwogICAgICAgICAgICAgICAgICAgICAgICAkaXNfcGFyZW4gPSAkdG9rZW4gZXEgJygnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGxvb2sgZm9yIGEgbGVhZGluZyBzaWduLCArIG9yIC0KICAgICAgICAgICAgICAgIGlmICggbGVuZ3RoKCRwYXJ0KSApIHsKICAgICAgICAgICAgICAgICAgICBteSAkc2lnbiA9IHN1YnN0ciggJHBhcnQsIDAsIDEgKTsKICAgICAgICAgICAgICAgICAgICBpZiAoICRzaWduIGVxICcrJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgQHNpZ25zID0gcXcoYWRkKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHBhcnQgID0gc3Vic3RyKCAkcGFydCwgMSApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRzaWduIGVxICctJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgQHNpZ25zID0gcXcoZGVsZXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHBhcnQgID0gc3Vic3RyKCAkcGFydCwgMSApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIyMga2VlcCBkZWZhdWx0cwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGFueXRoaW5nIGxlZnQgbXVzdCBiZSBhIHBhcmVuIG1vZGlmaWVyCiAgICAgICAgICAgICAgICBpZiAoIGxlbmd0aCgkcGFydCkgKSB7CiAgICAgICAgICAgICAgICAgICAgJHBhcmVuX2ZsYWcgPSBzdWJzdHIoICRwYXJ0LCAtMSwgIDEgKTsKICAgICAgICAgICAgICAgICAgICAkcGFydCAgICAgICA9IHN1YnN0ciggJHBhcnQsICAwLCAtMSApOwogICAgICAgICAgICAgICAgICAgIGlmICggJHBhcmVuX2ZsYWcgIX4gL15ba0tmRndXXSQvICkgewogICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3JfbWVzc2FnZSAuPQoiSW4gJyRwYXJ0X2lucHV0JzogVW5leHBlY3RlZCBwYXJlbiBmbGFnICckcGFyZW5fZmxhZyc7IG11c3QgYmUgb25lIG9mOiBrIEsgZiBGIHcgV1xuIjsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJGlzX3BhcmVuICkgewogICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3JfbWVzc2FnZSAuPQoiSW4gJyRwYXJ0X2lucHV0JzogcGFyZW4gZmxhZyAnJHBhcmVuX2ZsYWcnIGlzIG9ubHkgYWxsb3dlZCBiZWZvcmUgYSAnKCdcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggbGVuZ3RoKCRwYXJ0KSApIHsKICAgICAgICAgICAgICAgICAgICAkZXJyb3JfbWVzc2FnZSAuPSAiVW5yZWNvZ25pemVkIHRlcm06ICckcGFydF9pbnB1dCdcbiI7CiAgICAgICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBteSAkZHVwbGljYXRlOwogICAgICAgICAgICAgICAgZm9yZWFjaCBteSAkc2lnbiAoQHNpZ25zKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCBteSAka2V5IChAa2V5cykgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBOZXcgYmFyZSBjb21tYXMgYXJlIHN0YWJsZSBpZiAtYmN0YyBpcyBzZXQsIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAjIGFsc28gcGFyZW4gZmxhZ3MgZG8gbm90IGRpc2FncmVlCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRzdGFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQoICR0cmFpbGluZ19jb21tYV9icmVha19ydWxlc3ska2V5fSApOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRrZXkgZXEgJyknICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0YWJsZSAmJj0gJHBhcmVuX2ZsYWcgZXEgJHRjX3BhcmVuX2ZsYWc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCggJHJ1bGVfaGFzaHskc2lnbn0tPnska2V5fSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGR1cGxpY2F0ZSAmJj0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAkcnVsZV9oYXNoeyRzaWdufS0+eyRrZXl9ID0KICAgICAgICAgICAgICAgICAgICAgICAgICBbICR2YWwsICRwYXJlbl9mbGFnLCAkc3RhYmxlIF07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkZHVwbGljYXRlKSB7CiAgICAgICAgICAgICAgICAgICAgJGVycm9yX21lc3NhZ2UgLj0KICAgICAgICAgICAgICAgICAgICAgICJUaGlzIHRlcm0gb3ZlcmxhcHMgYSBwcmV2aW91cyB0ZXJtOiAnJHBhcnRfaW5wdXQnXG4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGZvciBjb25mbGljdGluZyBzaWduZWQgb3B0aW9ucwogICAgICAgIGlmICggISRlcnJvcl9tZXNzYWdlICkgewogICAgICAgICAgICBteSAkcmFkZCAgICA9ICRydWxlX2hhc2h7YWRkfTsKICAgICAgICAgICAgbXkgJHJkZWxldGUgPSAkcnVsZV9oYXNoe2RlbGV0ZX07CiAgICAgICAgICAgIGlmICggZGVmaW5lZCgkcmFkZCkgJiYgZGVmaW5lZCgkcmRlbGV0ZSkgKSB7CiAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRrZXkgKEBhbGxfa2V5cykgewogICAgICAgICAgICAgICAgICAgIG15ICRyYWRkX2luZm8gICAgPSAkcmFkZC0+eyRrZXl9OwogICAgICAgICAgICAgICAgICAgIG15ICRyZGVsZXRlX2luZm8gPSAkcmRlbGV0ZS0+eyRrZXl9OwogICAgICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCgkcmFkZF9pbmZvKSAmJiBkZWZpbmVkKCRyZGVsZXRlX2luZm8pICkgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkYWRkX3ZhbCAgICA9ICRyYWRkX2luZm8tPlswXTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGRlbGV0ZV92YWwgPSAkcmRlbGV0ZV9pbmZvLT5bMF07CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgaWYgKCAkYWRkX3ZhbCBlcSAkZGVsZXRlX3ZhbCApOwogICAgICAgICAgICAgICAgICAgICAgICBteSAkYWRkX29yZGVyICAgID0gJG1hdGNoX29yZGVyeyRhZGRfdmFsfTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGRlbGV0ZV9vcmRlciA9ICRtYXRjaF9vcmRlcnskZGVsZXRlX3ZhbH07CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWRlZmluZWQoJGFkZF9vcmRlcikgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyBzaG91bGQgaGF2ZSBiZWVuIGNhdWdodCBlYXJsaWVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERVZFTF9NT0RFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIEZhdWx0KCJ1bmV4cGVjdGVkICsgdmFsdWUgJGFkZF92YWxcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFkZWZpbmVkKCRkZWxldGVfb3JkZXIpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMgc2hvdWxkIGhhdmUgYmVlbiBjYXVnaHQgZWFybGllcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgREVWRUxfTU9ERQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBGYXVsdCgidW5leHBlY3RlZCAtIHZhbHVlICRkZWxldGVfdmFsXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkYWRkX29yZGVyIDw9ICRkZWxldGVfb3JkZXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkdG9rZW4gPSAkbWF0Y2hpbmdfdG9rZW57JGtleX07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3JfbWVzc2FnZSAuPQoiRm9yIHRva2VuICckdG9rZW4nOiB0aGUgcmFuZ2UgZm9yICcrJGFkZF92YWwnIG92ZXJsYXBzIHRoZSByYW5nZSBmb3IgJy0kZGVsZXRlX3ZhbCdcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgkZXJyb3JfbWVzc2FnZSkgewogICAgICAgICAgICBXYXJuKDw8RU9NKTsKRXJyb3IgcGFyc2luZyAtLXdhbnQtdHJhaWxpbmctY29tbWFzPSckb3B0aW9uJzoKJGVycm9yX21lc3NhZ2UKRU9NCiAgICAgICAgfQoKICAgICAgICAjIFNldCB0aGUgY29udHJvbCBoYXNoIGlmIG5vIGVycm9ycwogICAgICAgIGVsc2UgewogICAgICAgICAgICAldHJhaWxpbmdfY29tbWFfcnVsZXMgPSAlcnVsZV9oYXNoOwogICAgICAgIH0KICAgIH0KCiAgICAjIEJvdGggYWRkaW5nIGFuZCBkZWxldGluZyBjb21tYXMgY2FuIGxlYWQgdG8gaW5zdGFiaWxpdHkgaW4gZXh0cmVtZSBjYXNlcwogICAgaWYgKCAkck9wdHNfYWRkX3RyYWlsaW5nX2NvbW1hcyAmJiAkck9wdHNfZGVsZXRlX3RyYWlsaW5nX2NvbW1hcyApIHsKCiAgICAgICAgIyBJZiB0aGUgcG9zc2libGUgaW5zdGFiaWxpdHkgaXMgc2lnbmlmaWNhbnQsIHRoZW4gd2UgY2FuIHR1cm4gb2ZmCiAgICAgICAgIyAtZHRjIGFzIGEgZGVmZW5zaXZlIG1lYXN1cmUgdG8gcHJldmVudCBpdC4KCiAgICAgICAgIyBXZSBtdXN0IHR1cm4gb2ZmIC1kdGMgZm9yIHZlcnkgc21hbGwgdmFsdWVzIG9mIC0td2hpdGVzcGFjZS1jeWNsZQogICAgICAgICMgdG8gYXZvaWQgaW5zdGFiaWxpdHkuICBBIG1pbmltdW0gdmFsdWUgb2YgLXdjPTMgZml4ZXMgYjEzOTMsIGJ1dCBhCiAgICAgICAgIyB2YWx1ZSBvZiA0IGlzIHVzZWQgaGVyZSBmb3Igc2FmZXR5LiAgVGhpcyBwYXJhbWV0ZXIgaXMgc2VsZG9tIHVzZWQsCiAgICAgICAgIyBhbmQgbXVjaCBsYXJnZXIgdGhhbiB0aGlzIHdoZW4gdXNlZCwgc28gdGhlIGN1dG9mZiB2YWx1ZSBpcyBub3QKICAgICAgICAjIGNyaXRpY2FsLgogICAgICAgIGlmICggJHJPcHRzX3doaXRlc3BhY2VfY3ljbGUgJiYgJHJPcHRzX3doaXRlc3BhY2VfY3ljbGUgPD0gNCApIHsKICAgICAgICAgICAgJHJPcHRzX2RlbGV0ZV90cmFpbGluZ19jb21tYXMgPSAwOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBpbml0aWFsaXplX3RyYWlsaW5nX2NvbW1hX3J1bGVzCgpzdWIgaW5pdGlhbGl6ZV9pbnRlcmJyYWNrZXRfYXJyb3dfc3R5bGUgewoKICAgICMgU2V0dXAgaGFzaCBmb3IgZGVzaXJlZCBhcnJvdyBzdHlsZQogICAgJWludGVyYnJhY2tldF9hcnJvd19zdHlsZSA9ICgpOwoKICAgICMgYW5kIGNoZWNrIG90aGVyIHBhcmFtZXRlcnMgZm9yIGNvbmZsaWN0cwogICAgbXkgJG5hbWVfYWRkICAgID0gJ2FkZC1pbnRlcmJyYWNrZXQtYXJyb3dzJzsKICAgIG15ICRuYW1lX2RlbGV0ZSA9ICdkZWxldGUtaW50ZXJicmFja2V0LWFycm93cyc7CiAgICBteSAkbmFtZV9zdHlsZSAgPSAnaW50ZXJicmFja2V0LWFycm93LXN0eWxlJzsKCiAgICBteSAkb3B0X2FkZCAgICA9ICRyT3B0cy0+eyRuYW1lX2FkZH07CiAgICBteSAkb3B0X2RlbGV0ZSA9ICRyT3B0cy0+eyRuYW1lX2RlbGV0ZX07CiAgICBteSAkb3B0X3N0eWxlICA9ICRyT3B0cy0+eyRuYW1lX3N0eWxlfTsKCiAgICBpZiAoICRvcHRfYWRkICYmICRvcHRfZGVsZXRlICYmICEkb3B0X3N0eWxlICkgewogICAgICAgIERpZSg8PEVPTSk7CkNhbm5vdCB1c2UgYm90aCAtLSRuYW1lX2FkZCBhbmQgLS0kbmFtZV9kZWxldGUKICB1bmxlc3MgLS0kbmFtZV9zdHlsZSBpcyBkZWZpbmVkCkVPTQogICAgfQoKICAgIHJldHVybiB1bmxlc3MgZGVmaW5lZCgkb3B0X3N0eWxlKTsKICAgICRvcHRfc3R5bGUgPX4gdHIvLC8gLzsKICAgICRvcHRfc3R5bGUgPX4gcy9eXHMrLy87CiAgICAkb3B0X3N0eWxlID1+IHMvXHMrJC8vOwogICAgcmV0dXJuIHVubGVzcyBsZW5ndGgoJG9wdF9zdHlsZSk7CgogICAgaWYgICAgKCAkb3B0X3N0eWxlIGVxICcwJyApIHsgJG9wdF9zdHlsZSA9ICddICBbIF0gIHsgfSAgWyB9ICB7JyB9CiAgICBlbHNpZiAoICRvcHRfc3R5bGUgZXEgJzEnICkgeyAkb3B0X3N0eWxlID0gJ10tPlsgXS0+eyB9LT5bIH0tPnsnIH0KICAgIGVsc2lmICggJG9wdF9zdHlsZSBlcSAnKicgKSB7ICRvcHRfc3R5bGUgPSAnXS0+WyBdLT57IH0tPlsgfS0+eycgfQogICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHsgfQoKICAgICMgV2UgYXJlIHdhbGtpbmcgYWxvbmcgYSBzdHJpbmcgc3VjaCBhcwogICAgIyAgICAgJG9wdF9zdHlsZT0iIF1bICBdLT57ICAgfS0+WyAgfXsgIjsKICAgICMgaWdub3Jpbmcgc3BhY2VzIGFuZCBsb29raW5nIGZvciBicmFja2V0IHBhaXJzIHdpdGggb3B0aW9uYWwKICAgICMgYXJyb3cgbGlrZTogICAnXVsnICBvciBdLT57ICBvciB9LT5bICBvciAgfXsKICAgICMgVGhlIHR3byBicmFja2V0IGNoYXJhY3RlcnMgYXJlIHRoZSBoYXNoIGtleSBhbmQgdGhlIGhhc2ggdmFsdWUKICAgICMgaXMgMSBmb3IgYW4gYXJyb3cgYW5kIC0xIGZvciBubyBhcnJvdy4KCiAgICAjICRjaDEgd2lsbCBob2xkIG1vc3QgcmVjZW50IGNsb3NpbmcgYnJhY2tldAogICAgIyAkY2gyIHdpbGwgaG9sZCBhICctPicgaWYgc2VlbgogICAgbXkgJXJ1bGVfaGFzaDsKICAgIG15ICggJGNoMSwgJGNoMiApOwogICAgbXkgJGVycl9tc2c7CiAgICBteSAkcG9zX2xhc3Q7CiAgICB3aGlsZSAoMSkgewogICAgICAgICRwb3NfbGFzdCA9IHBvcygkb3B0X3N0eWxlKTsKICAgICAgICBpZiAoCiAgICAgICAgICAgICRvcHRfc3R5bGUgPX4gbXsKICAgICAgICAgICAgIFxHKD86ICAgICAgIyAgICBmaXggZ2l0ICMxNDIKICAgICAgICAgICAgICAgKFxzKykgICAgIyAxLiB3aGl0ZXNwYWNlCiAgICAgICAgICAgICB8IChbXH1cXV0pICMgMi4gY2xvc2luZyBicmFja2V0CiAgICAgICAgICAgICB8ICgtPikgICAgICMgMy4gYXJyb3cKICAgICAgICAgICAgIHwgKFtcW1x7XSkgIyA0LiBvcGVuaW5nIGJyYWNrZXQKICAgICAgICAgICAgIHwgKC4qKSAgICAgIyA1LiBzb21ldGhpbmcgZWxzZSwgZXJyb3IKICAgICAgICAgICAgICkKICAgICAgICAgICAgfWdjeAogICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKCQxKSB7IG5leHQgfQogICAgICAgICAgICBpZiAoJDIpIHsKICAgICAgICAgICAgICAgIGlmICAgKCAhJGNoMSApIHsgJGNoMSAgICAgPSAkMiB9CiAgICAgICAgICAgICAgICBlbHNlICAgICAgICAgICB7ICRlcnJfbXNnID0gInVuZXhwZWN0ZWQgJyQyJyI7IGxhc3QgfQogICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJDMpIHsKICAgICAgICAgICAgICAgIGlmICAgKCRjaDEpIHsgJGNoMiAgICAgPSAkMyB9CiAgICAgICAgICAgICAgICBlbHNlICAgICAgICB7ICRlcnJfbXNnID0gInVuZXhwZWN0ZWQgJyQzJyI7IGxhc3QgfQogICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJDQpIHsKICAgICAgICAgICAgICAgIGlmICggJGNoMSB8fCAkY2gyICkgewogICAgICAgICAgICAgICAgICAgIG15ICRrZXkgPSAkY2gxIC4gJDQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCggJHJ1bGVfaGFzaHska2V5fSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAkcnVsZV9oYXNoeyRrZXl9ID0gJGNoMiA/IDEgOiAtMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRlcnJfbXNnID0gIm11bHRpcGxlIGNvcGllcyBmb3IgJyRrZXknIjsgbGFzdDsgfQogICAgICAgICAgICAgICAgICAgICRjaDEgPSAkY2gyID0gdW5kZWY7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsgJGVycl9tc2cgPSAidW5leHBlY3RlZCAnJDQnIjsgbGFzdCB9CiAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkNSkgewogICAgICAgICAgICAgICAgbXkgJGJhZCA9ICQ1OwogICAgICAgICAgICAgICAgaWYgKCBsZW5ndGgoJGJhZCkgPiAxMCApIHsKICAgICAgICAgICAgICAgICAgICAkYmFkID0gc3Vic3RyKCAkYmFkLCAwLCAxMCApIC4gJy4uLic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkZXJyX21zZyA9ICJjb25mdXNlZCBhdDogJyRiYWQnXG4iOwogICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyB0aGF0J3MgYWxsLi4KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbGFzdDsKICAgICAgICB9CiAgICB9ICMjIGVuZCB3aGlsZSAoMSkKCiAgICBpZiAoJGVycl9tc2cpIHsKICAgICAgICBteSAkbXNnOwogICAgICAgIGlmICggJHBvc19sYXN0ICYmIGxlbmd0aCgkb3B0X3N0eWxlKSA8IDIwICkgewogICAgICAgICAgICAkbXNnID0gJG9wdF9zdHlsZSAuICJcbiIgLiBTUEFDRSB4ICRwb3NfbGFzdCAuICdeJyAuICJcbiI7CiAgICAgICAgfQogICAgICAgICRtc2cgLj0gIkVycm9yIHBhcnNpbmcgLS0kbmFtZV9zdHlsZTogJGVycl9tc2ciOwogICAgICAgIERpZSgkbXNnKTsKICAgIH0KCiAgICAjIENvcHkgdGhlIHJ1bGUgaGFzaCwgY29udmVydGluZyBicmFjZXMgdG8gdG9rZW4gdHlwZXMKICAgIGZvcmVhY2ggbXkgJGtleSAoIGtleXMgJXJ1bGVfaGFzaCApIHsKICAgICAgICBteSAka2V5X2ZpeCA9ICRrZXk7CiAgICAgICAgJGtleV9maXggPX4gdHIve30vTFIvOwogICAgICAgICRpbnRlcmJyYWNrZXRfYXJyb3dfc3R5bGV7JGtleV9maXh9ID0gJHJ1bGVfaGFzaHska2V5fTsKICAgIH0KCiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBpbml0aWFsaXplX2ludGVyYnJhY2tldF9hcnJvd19zdHlsZQoKc3ViIGluaXRpYWxpemVfd2hpdGVzcGFjZV9oYXNoZXMgewoKICAgICMgVGhpcyBpcyBjYWxsZWQgb25jZSBiZWZvcmUgZm9ybWF0dGluZyBiZWdpbnMgdG8gaW5pdGlhbGl6ZSB0aGVzZSBnbG9iYWwKICAgICMgaGFzaGVzLCB3aGljaCBjb250cm9sIHRoZSB1c2Ugb2Ygd2hpdGVzcGFjZSBhcm91bmQgdG9rZW5zOgogICAgIwogICAgIyAlYmluYXJ5X3dzX3J1bGVzCiAgICAjICV3YW50X2xlZnRfc3BhY2UKICAgICMgJXdhbnRfcmlnaHRfc3BhY2UKICAgICMgJXNwYWNlX2FmdGVyX2tleXdvcmQKICAgICMKICAgICMgTWFueSB0b2tlbiB0eXBlcyBhcmUgaWRlbnRpY2FsIHRvIHRoZSB0b2tlbnMgdGhlbXNlbHZlcy4KICAgICMgU2VlIHRoZSB0b2tlbml6ZXIgZm9yIGEgY29tcGxldGUgbGlzdC4gSGVyZSBhcmUgc29tZSBzcGVjaWFsIHR5cGVzOgogICAgIyAgIGsgPSBwZXJsIGtleXdvcmQKICAgICMgICBmID0gc2VtaWNvbG9uIGluIGZvciBzdGF0ZW1lbnQKICAgICMgICBtID0gdW5hcnkgbWludXMKICAgICMgICBwID0gdW5hcnkgcGx1cwogICAgIyBOb3RlIHRoYXQgOjogaXMgZXhjbHVkZWQgc2luY2UgaXQgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBhbiBpZGVudGlmaWVyCiAgICAjIE5vdGUgdGhhdCAnLT4nIGlzIGV4Y2x1ZGVkIGJlY2F1c2UgaXQgbmV2ZXIgZ2V0cyBzcGFjZQogICAgIyBwYXJlbnRoZXNlcyBhbmQgYnJhY2tldHMgYXJlIGV4Y2x1ZGVkIHNpbmNlIHRoZXkgYXJlIGhhbmRsZWQgc3BlY2lhbGx5CiAgICAjIGN1cmx5IGJyYWNlcyBhcmUgaW5jbHVkZWQgYnV0IG1heSBiZSBvdmVycmlkZGVuIGJ5IGxvZ2ljLCBzdWNoIGFzCiAgICAjIG5ld2xpbmUgbG9naWMuCgogICAgIyBORVdfVE9LRU5TOiBjcmVhdGUgYSB3aGl0ZXNwYWNlIHJ1bGUgaGVyZS4gIFRoaXMgY2FuIGJlIGFzCiAgICAjIHNpbXBsZSBhcyBhZGRpbmcgeW91ciBuZXcgbGV0dGVyIHRvIEBzcGFjZXNfYm90aF9zaWRlcywgZm9yCiAgICAjIGV4YW1wbGUuCgogICAgIyBmaXggZm9yIGMyNTA6IGFkZGVkIHNwYWNlIHJ1bGVzIG5ldyBwYWNrYWdlIHR5cGUgJ1AnIGFuZCBzdWIgdHlwZSAnUycKICAgIG15IEBzcGFjZXNfYm90aF9zaWRlcyA9IHF3IwogICAgICArIC0gKiAvICUgPyA9IC4gOiB4IDwgPiB8ICYgXiAuLiA8PCA+PiAqKiAmJiAuLiB8fCAvLyA9PiArPSAtPQogICAgICAuPSAlPSB4PSAmPSB8PSBePSAqPSA8PiA8PSA+PSA9PSA9fiAhfiAvPSAhPSAuLi4gPDw9ID4+PSB+fiAhfn4KICAgICAgKio9ICYmPSB8fD0gLy89IDw9PiBBIGsgZiB3IEYgbiBDIFkgVSBHIHYgUCBTIF5eCiAgICAgICM7CgogICAgbXkgQHNwYWNlc19sZWZ0X3NpZGUgPSBxdzwgdCAhIH4gbSBwIHsgXCBoIHBwIG1tIFogaiA+OwogICAgcHVzaCggQHNwYWNlc19sZWZ0X3NpZGUsICcjJyApOyAgICAjIGF2b2lkcyB3YXJuaW5nIG1lc3NhZ2UKCiAgICAjIGMzNDk6IG1vdmVkICoqPSBmcm9tIEBzcGFjZXNfcmlnaHRfc2lkZSB0byBAc3BhY2VzX2JvdGhfc2lkZXMKICAgIG15IEBzcGFjZXNfcmlnaHRfc2lkZSA9IHF3PCA7IH0gKSBdIFIgSiArKyAtLSA+OwogICAgcHVzaCggQHNwYWNlc19yaWdodF9zaWRlLCAnLCcgKTsgICAgIyBhdm9pZHMgd2FybmluZyBtZXNzYWdlCgogICAgJXdhbnRfbGVmdF9zcGFjZSAgPSAoKTsKICAgICV3YW50X3JpZ2h0X3NwYWNlID0gKCk7CiAgICAlYmluYXJ5X3dzX3J1bGVzICA9ICgpOwoKICAgICMgTm90ZSB0aGF0IHdlIHNldHRpbmcgZGVmYXVsdHMgaGVyZS4gIExhdGVyIGluIHByb2Nlc3NpbmcKICAgICMgdGhlIHZhbHVlcyBvZiAld2FudF9sZWZ0X3NwYWNlIGFuZCAgJXdhbnRfcmlnaHRfc3BhY2UKICAgICMgbWF5IGJlIG92ZXJyaWRkZW4gYnkgYW55IHVzZXIgc2V0dGluZ3Mgc3BlY2lmaWVkIGJ5IHRoZQogICAgIyAtd2xzIGFuZCAtd3JzIHBhcmFtZXRlcnMuICBIb3dldmVyIHRoZSBiaW5hcnlfd2hpdGVzcGFjZV9ydWxlcwogICAgIyBhcmUgaGFyZHdpcmVkIGFuZCBoYXZlIHByaW9yaXR5LgogICAgQHdhbnRfbGVmdF9zcGFjZXtAc3BhY2VzX2JvdGhfc2lkZXN9ID0KICAgICAgKDEpIHggc2NhbGFyKEBzcGFjZXNfYm90aF9zaWRlcyk7CiAgICBAd2FudF9yaWdodF9zcGFjZXtAc3BhY2VzX2JvdGhfc2lkZXN9ID0KICAgICAgKDEpIHggc2NhbGFyKEBzcGFjZXNfYm90aF9zaWRlcyk7CiAgICBAd2FudF9sZWZ0X3NwYWNle0BzcGFjZXNfbGVmdF9zaWRlfSA9CiAgICAgICgxKSB4IHNjYWxhcihAc3BhY2VzX2xlZnRfc2lkZSk7CiAgICBAd2FudF9yaWdodF9zcGFjZXtAc3BhY2VzX2xlZnRfc2lkZX0gPQogICAgICAoLTEpIHggc2NhbGFyKEBzcGFjZXNfbGVmdF9zaWRlKTsKICAgIEB3YW50X2xlZnRfc3BhY2V7QHNwYWNlc19yaWdodF9zaWRlfSA9CiAgICAgICgtMSkgeCBzY2FsYXIoQHNwYWNlc19yaWdodF9zaWRlKTsKICAgIEB3YW50X3JpZ2h0X3NwYWNle0BzcGFjZXNfcmlnaHRfc2lkZX0gPQogICAgICAoMSkgeCBzY2FsYXIoQHNwYWNlc19yaWdodF9zaWRlKTsKICAgICR3YW50X2xlZnRfc3BhY2V7Jy0+J30gICAgICA9IFdTX05POwogICAgJHdhbnRfcmlnaHRfc3BhY2V7Jy0+J30gICAgID0gV1NfTk87CiAgICAkd2FudF9sZWZ0X3NwYWNleycqKid9ICAgICAgPSBXU19OTzsKICAgICR3YW50X3JpZ2h0X3NwYWNleycqKid9ICAgICA9IFdTX05POwogICAgJHdhbnRfcmlnaHRfc3BhY2V7J0NPUkU6Oid9ID0gV1NfTk87CgogICAgIyBUaGVzZSBiaW5hcnlfd3NfcnVsZXMgYXJlIGhhcmR3aXJlZCBhbmQgaGF2ZSBwcmlvcml0eSBvdmVyIHRoZSBhYm92ZQogICAgIyBzZXR0aW5ncy4gIEl0IHdvdWxkIGJlIG5pY2UgdG8gYWxsb3cgYWRqdXN0bWVudCBieSB0aGUgdXNlciwKICAgICMgYnV0IGl0IHdvdWxkIGJlIGNvbXBsaWNhdGVkIHRvIHNwZWNpZnkuCiAgICAjCiAgICAjIGhhc2ggdHlwZSBpbmZvcm1hdGlvbiBtdXN0IHN0YXkgdGlnaHRseSBib3VuZAogICAgIyBhcyBpbiA6ICAke3h4eHh9CiAgICAkYmluYXJ5X3dzX3J1bGVzeydpJ317J0wnfSA9IFdTX05POwogICAgJGJpbmFyeV93c19ydWxlc3snaSd9eyd7J30gPSBXU19ZRVM7CiAgICAkYmluYXJ5X3dzX3J1bGVzeydrJ317J3snfSA9IFdTX1lFUzsKICAgICRiaW5hcnlfd3NfcnVsZXN7J1UnfXsneyd9ID0gV1NfWUVTOwogICAgJGJpbmFyeV93c19ydWxlc3snaSd9eydbJ30gPSBXU19OTzsKICAgICRiaW5hcnlfd3NfcnVsZXN7J1InfXsnTCd9ID0gV1NfTk87CiAgICAkYmluYXJ5X3dzX3J1bGVzeydSJ317J3snfSA9IFdTX05POwogICAgJGJpbmFyeV93c19ydWxlc3sndCd9eydMJ30gPSBXU19OTzsKICAgICRiaW5hcnlfd3NfcnVsZXN7J3QnfXsneyd9ID0gV1NfTk87CiAgICAkYmluYXJ5X3dzX3J1bGVzeyd0J317Jz0nfSA9IFdTX09QVElPTkFMOyAgICAjIGZvciBzaWduYXR1cmVzOyBmaXhlcyBiMTEyMwogICAgJGJpbmFyeV93c19ydWxlc3snfSd9eydMJ30gPSBXU19OTzsKICAgICRiaW5hcnlfd3NfcnVsZXN7J30nfXsneyd9ID0gV1NfT1BUSU9OQUw7ICAgICMgUlQjMTI5ODUwOyB3YXMgV1NfTk8KICAgICRiaW5hcnlfd3NfcnVsZXN7JyQnfXsnTCd9ID0gV1NfTk87CiAgICAkYmluYXJ5X3dzX3J1bGVzeyckJ317J3snfSA9IFdTX05POwogICAgJGJpbmFyeV93c19ydWxlc3snQCd9eydMJ30gPSBXU19OTzsKICAgICRiaW5hcnlfd3NfcnVsZXN7J0AnfXsneyd9ID0gV1NfTk87CiAgICAkYmluYXJ5X3dzX3J1bGVzeyc9J317J0wnfSA9IFdTX1lFUzsKICAgICRiaW5hcnlfd3NfcnVsZXN7J0onfXsnSid9ID0gV1NfWUVTOwoKICAgICMgdGhlIGZvbGxvd2luZyBpbmNsdWRlcyAnKSB7JwogICAgIyBhcyBpbiA6ICAgIGlmICggeHh4ICkgeyB5eXkgfQogICAgJGJpbmFyeV93c19ydWxlc3snXSd9eydMJ30gPSBXU19OTzsKICAgICRiaW5hcnlfd3NfcnVsZXN7J10nfXsneyd9ID0gV1NfTk87CiAgICAkYmluYXJ5X3dzX3J1bGVzeycpJ317J3snfSA9IFdTX1lFUzsKICAgICRiaW5hcnlfd3NfcnVsZXN7JyknfXsnWyd9ID0gV1NfTk87CiAgICAkYmluYXJ5X3dzX3J1bGVzeyddJ317J1snfSA9IFdTX05POwogICAgJGJpbmFyeV93c19ydWxlc3snXSd9eyd7J30gPSBXU19OTzsKICAgICRiaW5hcnlfd3NfcnVsZXN7J30nfXsnWyd9ID0gV1NfTk87CiAgICAkYmluYXJ5X3dzX3J1bGVzeydSJ317J1snfSA9IFdTX05POwoKICAgICRiaW5hcnlfd3NfcnVsZXN7J10nfXsnKysnfSA9IFdTX05POwogICAgJGJpbmFyeV93c19ydWxlc3snXSd9eyctLSd9ID0gV1NfTk87CiAgICAkYmluYXJ5X3dzX3J1bGVzeycpJ317JysrJ30gPSBXU19OTzsKICAgICRiaW5hcnlfd3NfcnVsZXN7JyknfXsnLS0nfSA9IFdTX05POwoKICAgICRiaW5hcnlfd3NfcnVsZXN7J1InfXsnKysnfSA9IFdTX05POwogICAgJGJpbmFyeV93c19ydWxlc3snUid9eyctLSd9ID0gV1NfTk87CgogICAgJGJpbmFyeV93c19ydWxlc3snaSd9eydRJ30gPSBXU19ZRVM7CiAgICAkYmluYXJ5X3dzX3J1bGVzeyduJ317JygnfSA9IFdTX1lFUzsgICAgIyBvY2N1cnMgaW4gJ3VzZSBwYWNrYWdlIG4gKCknCgogICAgJGJpbmFyeV93c19ydWxlc3snaSd9eycoJ30gPSBXU19OTzsKCiAgICAkYmluYXJ5X3dzX3J1bGVzeyd3J317JygnfSA9IFdTX05POwogICAgJGJpbmFyeV93c19ydWxlc3sndyd9eyd7J30gPSBXU19ZRVM7CgogICAgIyB1c2VyIGNvbnRyb2xzCiAgICBpZiAoICEkck9wdHMtPnsnc3BhY2UtZm9yLXNlbWljb2xvbid9ICkgewogICAgICAgICR3YW50X2xlZnRfc3BhY2V7J2YnfSA9IC0xOwogICAgfQoKICAgIGlmICggJHJPcHRzLT57J3NwYWNlLXRlcm1pbmFsLXNlbWljb2xvbid9ICkgewogICAgICAgICR3YW50X2xlZnRfc3BhY2V7JzsnfSA9IDE7CiAgICB9CgogICAgIyBpbXBsZW1lbnQgdXNlciB3aGl0ZXNwYWNlIHByZWZlcmVuY2VzCiAgICBpZiAoIG15IEBxID0gc3BsaXRfd29yZHMoICRyT3B0cy0+eyd3YW50LWxlZnQtc3BhY2UnfSApICkgewogICAgICAgIEB3YW50X2xlZnRfc3BhY2V7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKICAgIH0KCiAgICBpZiAoIG15IEBxID0gc3BsaXRfd29yZHMoICRyT3B0cy0+eyd3YW50LXJpZ2h0LXNwYWNlJ30gKSApIHsKICAgICAgICBAd2FudF9yaWdodF9zcGFjZXtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwogICAgfQoKICAgIGlmICggbXkgQHEgPSBzcGxpdF93b3JkcyggJHJPcHRzLT57J25vd2FudC1sZWZ0LXNwYWNlJ30gKSApIHsKICAgICAgICBAd2FudF9sZWZ0X3NwYWNle0BxfSA9ICgtMSkgeCBzY2FsYXIoQHEpOwogICAgfQoKICAgIGlmICggbXkgQHEgPSBzcGxpdF93b3JkcyggJHJPcHRzLT57J25vd2FudC1yaWdodC1zcGFjZSd9ICkgKSB7CiAgICAgICAgQHdhbnRfcmlnaHRfc3BhY2V7QHF9ID0gKC0xKSB4IHNjYWxhcihAcSk7CiAgICB9CgogICAgcmV0dXJuOwoKfSAjIyBlbmQgc3ViIGluaXRpYWxpemVfd2hpdGVzcGFjZV9oYXNoZXMKCnsgIzw8PCBiZWdpbiBjbG9zdXJlIHNldF93aGl0ZXNwYWNlX2ZsYWdzCgpteSAlaXNfc3BlY2lhbF93c190eXBlOwpteSAlaXNfd0NVRzsKbXkgJWlzX3dpOwoKQkVHSU4gewoKICAgICMgVGhlIGZvbGxvd2luZyBoYXNoIGlzIHVzZWQgdG8gc2tpcCBvdmVyIG5lZWRsZXNzIGlmIHRlc3RzLgogICAgIyBCZSBzdXJlIHRvIHVwZGF0ZSBpdCB3aGVuIGFkZGluZyBuZXcgY2hlY2tzIGluIGl0cyBibG9jay4KICAgIG15IEBxID0gcXcoIGsgdyBDIG0gLSBRICk7CiAgICBwdXNoIEBxLCAnIyc7CiAgICBAaXNfc3BlY2lhbF93c190eXBle0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgIyBUaGVzZSBoYXNoZXMgcmVwbGFjZSBzbG93ZXIgcmVnZXggdGVzdHMKICAgIEBxID0gcXcoIHcgQyBVIEcgKTsKICAgIEBpc193Q1VHe0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgQHEgPSBxdyggdyBpICk7CiAgICBAaXNfd2l7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCn0gIyMgZW5kIEJFR0lOCgp1c2UgY29uc3RhbnQgREVCVUdfV0hJVEUgPT4gMDsKCiMgSGFzaGVzIHRvIHNldCBzcGFjZXMgYXJvdW5kIGNvbnRhaW5lciB0b2tlbnMgYWNjb3JkaW5nIHRvIHRoZWlyCiMgc2VxdWVuY2UgbnVtYmVycy4gIFRoZXNlIGFyZSBzZXQgYXMga2V5d29yZHMgYXJlIGV4YW1pbmVkLgojIFRoZXkgYXJlIGNvbnRyb2xsZWQgYnkgdGhlIC1rcGl0IGFuZCAta3BpdGwgZmxhZ3MuCm15ICVvcGVuaW5nX2NvbnRhaW5lcl9pbnNpZGVfd3M7Cm15ICVjbG9zaW5nX2NvbnRhaW5lcl9pbnNpZGVfd3M7CgpzdWIgc2V0X3doaXRlc3BhY2VfZmxhZ3MgewoKICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgIyBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIG9uY2UgcGVyIGZpbGUgdG8gc2V0IHdoaXRlc3BhY2UgZmxhZ3MgZm9yIHRoYXQKICAgICMgZmlsZS4gIFRoaXMgcm91dGluZSBleGFtaW5lcyBlYWNoIHBhaXIgb2Ygbm9uYmxhbmsgdG9rZW5zIGFuZCBzZXRzIGEgZmxhZwogICAgIyBpbmRpY2F0aW5nIGlmIHRoZXkgc2hvdWxkIGJlIHNlcGFyYXRlZCBieSB3aGl0ZSBzcGFjZS4KICAgICMKICAgICMgJHJ3aGl0ZXNwYWNlX2ZsYWdzLT5bJGpdIGlzIGEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgYSB3aGl0ZSBzcGFjZQogICAgIyBCRUZPUkUgdG9rZW4gJGogaXMgbmVlZGVkLCB3aXRoIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAgIwogICAgIyAgICAgICAgICAgICBXU19OTyAgICAgID0gLTEgZG8gbm90IHdhbnQgYSBzcGFjZSBCRUZPUkUgdG9rZW4gJGoKICAgICMgICAgICAgICAgICAgV1NfT1BUSU9OQUw9ICAwIG9wdGlvbmFsIHNwYWNlIG9yICRqIGlzIGEgd2hpdGVzcGFjZQogICAgIyAgICAgICAgICAgICBXU19ZRVMgICAgID0gIDEgd2FudCBhIHNwYWNlIEJFRk9SRSB0b2tlbiAkagogICAgIwoKICAgIG15ICRqX3RpZ2h0X2Nsb3NpbmdfcGFyZW4gPSAtMTsKICAgIG15ICRyTEwgICAgICAgICAgICAgICAgICAgPSAkc2VsZi0+W19yTExfXTsKICAgIG15ICRLX2Nsb3NpbmdfY29udGFpbmVyICAgPSAkc2VsZi0+W19LX2Nsb3NpbmdfY29udGFpbmVyX107CiAgICBteSAkam1heCAgICAgICAgICAgICAgICAgID0gQHskckxMfSAtIDE7CgogICAgJW9wZW5pbmdfY29udGFpbmVyX2luc2lkZV93cyA9ICgpOwogICAgJWNsb3NpbmdfY29udGFpbmVyX2luc2lkZV93cyA9ICgpOwoKICAgIG15ICRyYmxvY2tfdHlwZV9vZl9zZXFubyA9ICRzZWxmLT5bX3JibG9ja190eXBlX29mX3NlcW5vX107CgogICAgbXkgJHJPcHRzX3NwYWNlX2tleXdvcmRfcGFyZW4gICA9ICRyT3B0cy0+eydzcGFjZS1rZXl3b3JkLXBhcmVuJ307CiAgICBteSAkck9wdHNfc3BhY2VfYmFja3NsYXNoX3F1b3RlID0gJHJPcHRzLT57J3NwYWNlLWJhY2tzbGFzaC1xdW90ZSd9OwogICAgbXkgJHJPcHRzX3NwYWNlX2Z1bmN0aW9uX3BhcmVuICA9ICRyT3B0cy0+eydzcGFjZS1mdW5jdGlvbi1wYXJlbid9OwoKICAgIG15ICRyd2hpdGVzcGFjZV9mbGFncyAgICAgICA9IFtdOwogICAgbXkgJHJpc19mdW5jdGlvbl9jYWxsX3BhcmVuID0ge307CgogICAgcmV0dXJuICRyd2hpdGVzcGFjZV9mbGFncyBpZiAoICRqbWF4IDwgMCApOwoKICAgICMgZnVuY3Rpb24gdG8gcmV0dXJuICR3cyBmb3IgYSBzaWduYXR1cmUgcGFyZW4gZm9sbG93aW5nIGEgc3ViCiAgICBteSAkd3Nfc2lnbmF0dXJlX3BhcmVuID0gc3ViIHsKICAgICAgICBteSAoJGpqKSA9IEBfOwogICAgICAgIG15ICR3czsKICAgICAgICBpZiAoICRyT3B0c19zcGFjZV9zaWduYXR1cmVfcGFyZW4gPT0gMSApIHsKCiAgICAgICAgICAgICMgaXMgdGhlIHByZXZpb3VzIHRva2VuIGEgYmxhbms/CiAgICAgICAgICAgIG15ICRoYXZlX2JsYW5rID0gJHJMTC0+WyAkamogLSAxIF0tPltfVFlQRV9dIGVxICdiJzsKCiAgICAgICAgICAgICMgb3IgYSBuZXdsaW5lPwogICAgICAgICAgICAkaGF2ZV9ibGFuayB8fD0KICAgICAgICAgICAgICAkckxMLT5bJGpqXS0+W19MSU5FX0lOREVYX10gIT0gJHJMTC0+WyAkamogLSAxIF0tPltfTElORV9JTkRFWF9dOwoKICAgICAgICAgICAgJHdzID0gJGhhdmVfYmxhbmsgPyBXU19ZRVMgOiBXU19OTzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICR3cyA9ICRyT3B0c19zcGFjZV9zaWduYXR1cmVfcGFyZW4gPT0gMCA/IFdTX05PIDogV1NfWUVTOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHdzOwogICAgfTsgIyMgZW5kICR3c19zaWduYXR1cmVfcGFyZW4gPSBzdWIKCiAgICBteSAkbGFzdF90b2tlbiA9IFNQQUNFOwogICAgbXkgJGxhc3RfdHlwZSAgPSAnYic7CgogICAgbXkgJGxhc3RfdG9rZW5fZGJnID0gU1BBQ0U7CiAgICBteSAkbGFzdF90eXBlX2RiZyAgPSAnYic7CgogICAgbXkgJHJ0b2toX2xhc3QgPSBbIEB7ICRyTEwtPlswXSB9IF07CiAgICAkcnRva2hfbGFzdC0+W19UT0tFTl9dICAgICAgICAgPSAkbGFzdF90b2tlbjsKICAgICRydG9raF9sYXN0LT5bX1RZUEVfXSAgICAgICAgICA9ICRsYXN0X3R5cGU7CiAgICAkcnRva2hfbGFzdC0+W19UWVBFX1NFUVVFTkNFX10gPSBFTVBUWV9TVFJJTkc7CiAgICAkcnRva2hfbGFzdC0+W19MSU5FX0lOREVYX10gICAgPSAwOwoKICAgIG15ICRydG9raF9sYXN0X2xhc3QgPSAkcnRva2hfbGFzdDsKCiAgICAjIFRoaXMgd2lsbCBpZGVudGlmeSBicmFjZXMgdG8gYmUgdHJlYXRlZCBhcyBibG9ja3MgZm9yIHRoZSAteGJ0IGZsYWcKICAgIG15ICVibG9ja190eXBlX2Zvcl90aWdodG5lc3M7CgogICAgbXkgKCAkd3NfMSwgJHdzXzIsICR3c18zLCAkd3NfNCApOwoKICAgICMgbWFpbiBsb29wIG92ZXIgYWxsIHRva2VucyB0byBkZWZpbmUgdGhlIHdoaXRlc3BhY2UgZmxhZ3MKICAgIG15ICRsYXN0X3R5cGVfaXNfb3BlbmluZzsKICAgIG15ICRqID0gLTE7CiAgICBteSAkdHlwZTsKICAgIGZvcmVhY2ggbXkgJHJ0b2toICggQHskckxMfSApIHsKCiAgICAgICAgJGorKzsKCiAgICAgICAgaWYgKCAoICR0eXBlID0gJHJ0b2toLT5bX1RZUEVfXSApIGVxICdiJyApIHsKICAgICAgICAgICAgJHJ3aGl0ZXNwYWNlX2ZsYWdzLT5bJGpdID0gV1NfT1BUSU9OQUw7CiAgICAgICAgICAgIG5leHQ7CiAgICAgICAgfQoKICAgICAgICBteSAkdG9rZW4gPSAkcnRva2gtPltfVE9LRU5fXTsKCiAgICAgICAgbXkgJHdzOwoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBXaGl0ZXNwYWNlIFJ1bGVzIFNlY3Rpb24gMToKICAgICAgICAjIEhhbmRsZSBzcGFjZSBvbiB0aGUgaW5zaWRlIG9mIG9wZW5pbmcgYnJhY2VzLgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgaWYgKCRsYXN0X3R5cGVfaXNfb3BlbmluZykgewoKICAgICAgICAgICAgJGxhc3RfdHlwZV9pc19vcGVuaW5nID0gMDsKCiAgICAgICAgICAgIG15ICRzZXFubyAgICAgICAgICAgPSAkcnRva2gtPltfVFlQRV9TRVFVRU5DRV9dOwogICAgICAgICAgICBteSAkYmxvY2tfdHlwZSAgICAgID0gJHJibG9ja190eXBlX29mX3NlcW5vLT57JHNlcW5vfTsKICAgICAgICAgICAgbXkgJGxhc3Rfc2Vxbm8gICAgICA9ICRydG9raF9sYXN0LT5bX1RZUEVfU0VRVUVOQ0VfXTsKICAgICAgICAgICAgbXkgJGxhc3RfYmxvY2tfdHlwZSA9ICRyYmxvY2tfdHlwZV9vZl9zZXFuby0+eyRsYXN0X3NlcW5vfQogICAgICAgICAgICAgIHx8ICRibG9ja190eXBlX2Zvcl90aWdodG5lc3N7JGxhc3Rfc2Vxbm99OwoKICAgICAgICAgICAgJGpfdGlnaHRfY2xvc2luZ19wYXJlbiA9IC0xOwoKICAgICAgICAgICAgIyBsZXQgdXMga2VlcCBlbXB0eSBtYXRjaGVkIGJyYWNlcyB0b2dldGhlcjogKCkge30gW10KICAgICAgICAgICAgIyBleGNlcHQgZm9yIEJMT0NLUwogICAgICAgICAgICBpZiAoICR0b2tlbiBlcSAkbWF0Y2hpbmdfdG9rZW57JGxhc3RfdG9rZW59ICkgewogICAgICAgICAgICAgICAgaWYgKCRibG9ja190eXBlKSB7CiAgICAgICAgICAgICAgICAgICAgJHdzID0gV1NfWUVTOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHdzID0gV1NfTk87CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyB3ZSdyZSBjb25zaWRlcmluZyB0aGUgcmlnaHQgb2YgYW4gb3BlbmluZyBicmFjZQogICAgICAgICAgICAgICAgIyB0aWdodG5lc3MgPSAwIG1lYW5zIGFsd2F5cyBwYWQgaW5zaWRlIHdpdGggc3BhY2UKICAgICAgICAgICAgICAgICMgdGlnaHRuZXNzID0gMSBtZWFucyBwYWQgaW5zaWRlIGlmICJjb21wbGV4IgogICAgICAgICAgICAgICAgIyB0aWdodG5lc3MgPSAyIG1lYW5zIG5ldmVyIHBhZCBpbnNpZGUgd2l0aCBzcGFjZQoKICAgICAgICAgICAgICAgIG15ICR0aWdodG5lc3NfaGVyZTsKICAgICAgICAgICAgICAgIGlmICggJGxhc3RfYmxvY2tfdHlwZSAmJiAkbGFzdF90b2tlbiBlcSAneycgKSB7CiAgICAgICAgICAgICAgICAgICAgJHRpZ2h0bmVzc19oZXJlID0gJHJPcHRzX2Jsb2NrX2JyYWNlX3RpZ2h0bmVzczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgeyAkdGlnaHRuZXNzX2hlcmUgPSAkdGlnaHRuZXNzeyRsYXN0X3Rva2VufSB9CgogICAgICAgICAgICAgICAgIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICMgUGF0Y2ggZm9yIHRlc3QgcHJvYmxlbSA8PHNuaXBwZXRzL2ZhYnJpY2VfYnVnLmluPj4KICAgICAgICAgICAgICAgICMgV2UgbXVzdCBhbHdheXMgYXZvaWQgc3BhY2VzIGFyb3VuZCBhIGJhcmUgd29yZCBiZWdpbm5pbmcKICAgICAgICAgICAgICAgICMgd2l0aCBeIGFzIGluOgogICAgICAgICAgICAgICAgIyAgICBteSAkYmVmb3JlID0gJHteUFJFTUFUQ0h9OwogICAgICAgICAgICAgICAgIyBCZWNhdXNlIGFsbCBvZiB0aGUgZm9sbG93aW5nIGNhdXNlIGFuIGVycm9yIGluIHBlcmw6CiAgICAgICAgICAgICAgICAjICAgIG15ICRiZWZvcmUgPSAkeyBeUFJFTUFUQ0ggfTsKICAgICAgICAgICAgICAgICMgICAgbXkgJGJlZm9yZSA9ICR7IF5QUkVNQVRDSH07CiAgICAgICAgICAgICAgICAjICAgIG15ICRiZWZvcmUgPSAke15QUkVNQVRDSCB9OwogICAgICAgICAgICAgICAgIyBTbyBpZiBicmFjZSB0aWdodG5lc3MgZmxhZyBpcyAtYnQ9MCB3ZSBtdXN0IHRlbXBvcmFyaWx5IHJlc2V0CiAgICAgICAgICAgICAgICAjIHRvIGJ0PTEuICBOb3RlIHRoYXQgaGVyZSB3ZSBtdXN0IHNldCB0aWdodG5lc3M9MSBhbmQgbm90IDIgc28KICAgICAgICAgICAgICAgICMgdGhhdCB0aGUgY2xvc2luZyBzcGFjZSBpcyBhbHNvIGF2b2lkZWQKICAgICAgICAgICAgICAgICMgKHZpYSB0aGUgJGpfdGlnaHRfY2xvc2luZ19wYXJlbiBmbGFnIGluIGNvZGluZykKICAgICAgICAgICAgICAgIGlmICggJHR5cGUgZXEgJ3cnICYmIHN1YnN0ciggJHRva2VuLCAwLCAxICkgZXEgJ14nICkgewogICAgICAgICAgICAgICAgICAgICR0aWdodG5lc3NfaGVyZSA9IDE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICBpZiAoICR0aWdodG5lc3NfaGVyZSA8PSAwICkgewogICAgICAgICAgICAgICAgICAgICR3cyA9IFdTX1lFUzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJHRpZ2h0bmVzc19oZXJlID4gMSApIHsKICAgICAgICAgICAgICAgICAgICAkd3MgPSBXU19OTzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIERlZmF1bHQgKHRpZ2h0bmVzcyA9IDEpIGRlcGVuZHMgb24gdGhlIGNvbnRhaW5lciB0b2tlbiBjb3VudAogICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICMgRmluZCB0aGUgaW5kZXggb2YgdGhlIGNsb3NpbmcgdG9rZW4KICAgICAgICAgICAgICAgICAgICBteSAkal9jbG9zaW5nID0gJEtfY2xvc2luZ19jb250YWluZXItPnskbGFzdF9zZXFub307CgogICAgICAgICAgICAgICAgICAgICMgQ2VydGFpbiB0b2tlbiB0eXBlcyBjYW4gYmUgY291bnRlZCBhcyBtdWx0aXBsZSB0b2tlbnMgZm9yCiAgICAgICAgICAgICAgICAgICAgIyB0aGUgZGVmYXVsdCB0aWdodG5lc3MuICBUaGUgbWVhbmluZyBvZiBoYXNoIHZhbHVlcyBpczoKICAgICAgICAgICAgICAgICAgICAjICAgMSA9PiBtYXRjaCB0aGlzIHRva2VuIHR5cGUKICAgICAgICAgICAgICAgICAgICAjICAgb3RoZXJ3aXNlIGl0IGlzIGEgcmVnZXg7IG1hdGNoIGlmIHRva2VuIG1hdGNoZXMgcmVnZXgKICAgICAgICAgICAgICAgICAgICBteSAkcmVnZXggPSAkbXVsdGlwbGVfdG9rZW5fdGlnaHRuZXNzeyR0eXBlfTsKICAgICAgICAgICAgICAgICAgICBpZiAoICRyZWdleAogICAgICAgICAgICAgICAgICAgICAgICAmJiAoIGxlbmd0aCgkcmVnZXgpID09IDEgfHwgJHRva2VuID1+IC8kcmVnZXgvICkgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHdzID0gV1NfWUVTOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBJZiB0aGUgY2xvc2luZyB0b2tlbiBpcyBsZXNzIHRoYW4gZml2ZSBjaGFyYWN0ZXJzIGFoZWFkCiAgICAgICAgICAgICAgICAgICAgIyB3ZSBtdXN0IHRha2UgYSBjbG9zZXIgbG9vawogICAgICAgICAgICAgICAgICAgIGVsc2lmICggZGVmaW5lZCgkal9jbG9zaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAmJiAkal9jbG9zaW5nIC0gJGogPCA1CiAgICAgICAgICAgICAgICAgICAgICAgICYmICRyTEwtPlskal9jbG9zaW5nXS0+W19UWVBFX1NFUVVFTkNFX10gZXEKICAgICAgICAgICAgICAgICAgICAgICAgJGxhc3Rfc2Vxbm8gKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIyBxdWljayBjaGVjawogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRqICsgMSA+PSAkal9jbG9zaW5nICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdzICAgICAgICAgICAgICAgICAgICA9IFdTX05POwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGpfdGlnaHRfY2xvc2luZ19wYXJlbiA9ICRqX2Nsb3Npbmc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgc2xvdyBjaGVjawogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3cyA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdzX2luX2NvbnRhaW5lciggJGosICRqX2Nsb3NpbmcsICRyTEwsICR0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0b2tlbiwgJGxhc3RfdG9rZW4gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJHdzID09IFdTX05PICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRqX3RpZ2h0X2Nsb3NpbmdfcGFyZW4gPSAkal9jbG9zaW5nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkd3MgPSBXU19ZRVM7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNoZWNrIGZvciBzcGVjaWFsIGNhc2VzIHdoaWNoIG92ZXJyaWRlIHRoZSBhYm92ZSBydWxlcwogICAgICAgICAgICBpZiAoICVvcGVuaW5nX2NvbnRhaW5lcl9pbnNpZGVfd3MgJiYgJGxhc3Rfc2Vxbm8gKSB7CiAgICAgICAgICAgICAgICBteSAkd3Nfb3ZlcnJpZGUgPSAkb3BlbmluZ19jb250YWluZXJfaW5zaWRlX3dzeyRsYXN0X3NlcW5vfTsKICAgICAgICAgICAgICAgIGlmICgkd3Nfb3ZlcnJpZGUpIHsgJHdzID0gJHdzX292ZXJyaWRlIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHdzXzQgPSAkd3NfMyA9ICR3c18yID0gJHdzXzEgPSAkd3MKICAgICAgICAgICAgICBpZiBERUJVR19XSElURTsKCiAgICAgICAgfSAjIyBlbmQgc2V0dGluZyBzcGFjZSBmbGFnIGluc2lkZSBvcGVuaW5nIHRva2VucwoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBXaGl0ZXNwYWNlIFJ1bGVzIFNlY3Rpb24gMjoKICAgICAgICAjIFNwZWNpYWwgY2hlY2tzIGZvciBjZXJ0YWluIHR5cGVzIC4uLgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIFRoZSBoYXNoICclaXNfc3BlY2lhbF93c190eXBlJyBzaWduaWZpY2FudGx5IHNwZWVkcyB1cCB0aGlzIHJvdXRpbmUsCiAgICAgICAgIyBidXQgYmUgc3VyZSB0byB1cGRhdGUgaXQgaWYgYSBuZXcgY2hlY2sgaXMgYWRkZWQuCiAgICAgICAgIyBDdXJyZW50bHkgaGFzIHR5cGVzOiBxdyhrIHcgQyBtIC0gUSAjKQogICAgICAgIGlmICggJGlzX3NwZWNpYWxfd3NfdHlwZXskdHlwZX0gKSB7CgogICAgICAgICAgICBpZiAoICR0eXBlIGVxICdrJyApIHsKCiAgICAgICAgICAgICAgICAjIEtleXdvcmRzICdmb3InLCAnZm9yZWFjaCcgYXJlIHNwZWNpYWwgY2FzZXMgZm9yIC1rcGl0IHNpbmNlCiAgICAgICAgICAgICAgICAjIHRoZSBvcGVuaW5nIHBhcmVuIGRvZXMgbm90IGFsd2F5cyBpbW1lZGlhdGVseSBmb2xsb3cgdGhlCiAgICAgICAgICAgICAgICAjIGtleXdvcmQuIFNvIHdlIGhhdmUgdG8gc2VhcmNoIGZvcndhcmQgZm9yIHRoZSBwYXJlbiBpbiB0aGlzCiAgICAgICAgICAgICAgICAjIGNhc2UuICBJIGhhdmUgbGltaXRlZCB0aGUgc2VhcmNoIHRvIDEwIHRva2VucyBhaGVhZCwganVzdCBpbgogICAgICAgICAgICAgICAgIyBjYXNlIHNvbWVib2R5IGhhcyBhIGJpZyBmaWxlIGFuZCBubyBvcGVuaW5nIHBhcmVuLiAgVGhpcwogICAgICAgICAgICAgICAgIyBzaG91bGQgYmUgZW5vdWdoIGZvciBhbGwgbm9ybWFsIGNvZGUuIEFkZGVkIHRoZSBsZXZlbCBjaGVjawogICAgICAgICAgICAgICAgIyB0byBmaXggYjEyMzYuCiAgICAgICAgICAgICAgICBpZiAoICAgJGlzX2Zvcl9mb3JlYWNoeyR0b2tlbn0KICAgICAgICAgICAgICAgICAgICAmJiAla2V5d29yZF9wYXJlbl9pbm5lcl90aWdodG5lc3MKICAgICAgICAgICAgICAgICAgICAmJiBkZWZpbmVkKCAka2V5d29yZF9wYXJlbl9pbm5lcl90aWdodG5lc3N7JHRva2VufSApCiAgICAgICAgICAgICAgICAgICAgJiYgJGogPCAkam1heCApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbXkgJGxldmVsID0gJHJMTC0+WyRqXS0+W19MRVZFTF9dOwogICAgICAgICAgICAgICAgICAgICMjIE5PVEU6IHdlIG1pZ2h0IHVzZSB0aGUgS05FWFQgdmFyaWFibGUgdG8gYXZvaWQgdGhpcyBsb29wCiAgICAgICAgICAgICAgICAgICAgIyMgYnV0IHByb2ZpbGluZyBzaG93cyB0aGF0IGxpdHRsZSB3b3VsZCBiZSBzYXZlZAogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggbXkgJGpwICggJGogKyAxIC4uICRqICsgOSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCBpZiAoICRqcCA+ICRqbWF4ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgaWYgKCAkckxMLT5bJGpwXS0+W19MRVZFTF9dICE9ICRsZXZlbCApOyAgICAjIGIxMjM2CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgdW5sZXNzICggJHJMTC0+WyRqcF0tPltfVE9LRU5fXSBlcSAnKCcgKTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHNlcW5vX3AgPSAkckxMLT5bJGpwXS0+W19UWVBFX1NFUVVFTkNFX107CiAgICAgICAgICAgICAgICAgICAgICAgIHNldF9jb250YWluZXJfd3NfYnlfa2V5d29yZCggJHRva2VuLCAkc2Vxbm9fcCApOwogICAgICAgICAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBoYW5kbGUgYSBjb21tZW50CiAgICAgICAgICAgIGVsc2lmICggJHR5cGUgZXEgJyMnICkgewoKICAgICAgICAgICAgICAgICMgbmV3bGluZSBiZWZvcmUgYmxvY2sgY29tbWVudCAoJGo9PTApLCBhbmQKICAgICAgICAgICAgICAgICMgc3BhY2UgYmVmb3JlIHNpZGUgY29tbWVudCAgICAoJGo+MCksIHNvIC4uCiAgICAgICAgICAgICAgICAkd3MgPSBXU19ZRVM7CgogICAgICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgIyBOb3RoaW5nIG1vcmUgdG8gZG8gZm9yIGEgY29tbWVudAogICAgICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgJHJ3aGl0ZXNwYWNlX2ZsYWdzLT5bJGpdID0gJHdzOwogICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzcGFjZV9iYWNrc2xhc2hfcXVvdGU7IFJUICMxMjM3NzQgIDw8c25pcHBldHMvcnQxMjM3NzQuaW4+PgogICAgICAgICAgICAjIGFsbG93IGEgc3BhY2UgYmV0d2VlbiBhIGJhY2tzbGFzaCBhbmQgc2luZ2xlIG9yIGRvdWJsZSBxdW90ZQogICAgICAgICAgICAjIHRvIGF2b2lkIGZvb2xpbmcgaHRtbCBmb3JtYXR0ZXJzCiAgICAgICAgICAgIGVsc2lmICggJHR5cGUgZXEgJ1EnICkgewogICAgICAgICAgICAgICAgaWYgKCAkbGFzdF90eXBlIGVxICdcXCcgJiYgJHRva2VuID1+IC9eW1wiXCddLyApIHsKICAgICAgICAgICAgICAgICAgICAkd3MgPQogICAgICAgICAgICAgICAgICAgICAgICEkck9wdHNfc3BhY2VfYmFja3NsYXNoX3F1b3RlICAgICAgPyBXU19OTwogICAgICAgICAgICAgICAgICAgICAgOiAkck9wdHNfc3BhY2VfYmFja3NsYXNoX3F1b3RlID09IDEgPyBXU19PUFRJT05BTAogICAgICAgICAgICAgICAgICAgICAgOiAkck9wdHNfc3BhY2VfYmFja3NsYXNoX3F1b3RlID09IDIgPyBXU19ZRVMKICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1NfWUVTOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHJldGFpbiBhbnkgc3BhY2UgYmV0d2VlbiAnLScgYW5kIGJhcmUgd29yZAogICAgICAgICAgICBlbHNpZiAoICR0eXBlIGVxICd3JyB8fCAkdHlwZSBlcSAnQycgKSB7CiAgICAgICAgICAgICAgICAkd3MgPSBXU19PUFRJT05BTCBpZiAkbGFzdF90eXBlIGVxICctJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyByZXRhaW4gYW55IHNwYWNlIGJldHdlZW4gJy0nIGFuZCBiYXJlIHdvcmQ7IGZvciBleGFtcGxlCiAgICAgICAgICAgICMgYXZvaWQgc3BhY2UgYmV0d2VlbiAnVVNFUicgYW5kICctJyBoZXJlOiA8PHNuaXBwZXRzL3NwYWNlMi5pbj4+CiAgICAgICAgICAgICMgICAkbXloYXNoe1VTRVItTkFNRX09J3N0ZXZlJzsKICAgICAgICAgICAgZWxzaWYgKCAkdHlwZSBlcSAnbScgfHwgJHR5cGUgZXEgJy0nICkgewogICAgICAgICAgICAgICAgJHdzID0gV1NfT1BUSU9OQUwgaWYgKCAkbGFzdF90eXBlIGVxICd3JyApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICMgQSB0eXBlICR0eXBlIHdhcyBlbnRlcmVkIGluICVpc19zcGVjaWFsX3dzX3R5cGUgYnV0CiAgICAgICAgICAgICAgICAjIHRoZXJlIGlzIG5vIGNvZGUgYmxvY2sgdG8gaGFuZGxlIGl0LiBFaXRoZXIgcmVtb3ZlIGl0CiAgICAgICAgICAgICAgICAjIGZyb20gdGhlIGhhc2ggb3IgYWRkIGEgY29kZSBibG9jayB0byBoYW5kbGUgaXQuCiAgICAgICAgICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KCJubyBjb2RlIHRvIGhhbmRsZSB0eXBlICR0eXBlXG4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0gIyMgZW5kIGVsc2lmICggJGlzX3NwZWNpYWxfd3NfdHlwZXskdHlwZX0gLi4uCgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIFdoaXRlc3BhY2UgUnVsZXMgU2VjdGlvbiAzOgogICAgICAgICMgSGFuZGxlIHNwYWNlIG9uIGluc2lkZSBvZiBjbG9zaW5nIGJyYWNlIHBhaXJzLgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgIyAgIC9bXH1cKVxdUl0vCiAgICAgICAgZWxzaWYgKCAkaXNfY2xvc2luZ190eXBleyR0eXBlfSApIHsKCiAgICAgICAgICAgIG15ICRzZXFubyA9ICRydG9raC0+W19UWVBFX1NFUVVFTkNFX107CiAgICAgICAgICAgIGlmICggJGogPT0gJGpfdGlnaHRfY2xvc2luZ19wYXJlbiApIHsKCiAgICAgICAgICAgICAgICAkal90aWdodF9jbG9zaW5nX3BhcmVuID0gLTE7CiAgICAgICAgICAgICAgICAkd3MgICAgICAgICAgICAgICAgICAgID0gV1NfTk87CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkd3MpICkgewoKICAgICAgICAgICAgICAgICAgICBteSAkdGlnaHRuZXNzX2hlcmU7CiAgICAgICAgICAgICAgICAgICAgbXkgJGJsb2NrX3R5cGUgPSAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8tPnskc2Vxbm99CiAgICAgICAgICAgICAgICAgICAgICB8fCAkYmxvY2tfdHlwZV9mb3JfdGlnaHRuZXNzeyRzZXFub307CgogICAgICAgICAgICAgICAgICAgIGlmICggJGJsb2NrX3R5cGUgJiYgJHRva2VuIGVxICd9JyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRpZ2h0bmVzc19oZXJlID0gJHJPcHRzX2Jsb2NrX2JyYWNlX3RpZ2h0bmVzczsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICR0aWdodG5lc3NfaGVyZSA9ICR0aWdodG5lc3N7JHRva2VufSB9CgogICAgICAgICAgICAgICAgICAgICR3cyA9ICggJHRpZ2h0bmVzc19oZXJlID4gMSApID8gV1NfTk8gOiBXU19ZRVM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2hlY2sgZm9yIHNwZWNpYWwgY2FzZXMgd2hpY2ggb3ZlcnJpZGUgdGhlIGFib3ZlIHJ1bGVzCiAgICAgICAgICAgIGlmICggJWNsb3NpbmdfY29udGFpbmVyX2luc2lkZV93cyAmJiAkc2Vxbm8gKSB7CiAgICAgICAgICAgICAgICBteSAkd3Nfb3ZlcnJpZGUgPSAkY2xvc2luZ19jb250YWluZXJfaW5zaWRlX3dzeyRzZXFub307CiAgICAgICAgICAgICAgICBpZiAoJHdzX292ZXJyaWRlKSB7ICR3cyA9ICR3c19vdmVycmlkZSB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR3c180ID0gJHdzXzMgPSAkd3NfMiA9ICR3cwogICAgICAgICAgICAgIGlmIERFQlVHX1dISVRFOwogICAgICAgIH0gIyMgZW5kIHNldHRpbmcgc3BhY2UgZmxhZyBpbnNpZGUgY2xvc2luZyB0b2tlbnMKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgV2hpdGVzcGFjZSBSdWxlcyBTZWN0aW9uIDQ6CiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGVsc2lmICggJGlzX29wZW5pbmdfdHlwZXskdHlwZX0gKSB7CgogICAgICAgICAgICAkbGFzdF90eXBlX2lzX29wZW5pbmcgPSAxOwoKICAgICAgICAgICAgaWYgKCAkdG9rZW4gZXEgJygnICkgewoKICAgICAgICAgICAgICAgIG15ICRzZXFubyA9ICRydG9raC0+W19UWVBFX1NFUVVFTkNFX107CgogICAgICAgICAgICAgICAgIyBUaGlzIHdpbGwgaGF2ZSB0byBiZSB0d2Vha2VkIGFzIHRva2VuaXphdGlvbiBjaGFuZ2VzLgogICAgICAgICAgICAgICAgIyBXZSB1c3VhbGx5IHdhbnQgYSBzcGFjZSBhdCAnfSAoJywgZm9yIGV4YW1wbGU6CiAgICAgICAgICAgICAgICAjIDw8c25pcHBldHMvc3BhY2UxLmluPj4KICAgICAgICAgICAgICAgICMgICAgIG1hcCB7IDEgKiAkXzsgfSAoICR5LCAkTSwgJHcsICRkLCAkaCwgJG0sICRzICk7CiAgICAgICAgICAgICAgICAjCiAgICAgICAgICAgICAgICAjIEJ1dCBub3Qgb3RoZXJzOgogICAgICAgICAgICAgICAgIyAgICAgJnsgJF8tPlsxXSB9KCBkZWxldGUgJF9bJCNfXXsgJF8tPlswXSB9ICk7CiAgICAgICAgICAgICAgICAjIEF0IHByZXNlbnQsIHRoZSBhYm92ZSAmIGJsb2NrIGlzIG1hcmtlZCBhcyB0eXBlIEwvUiBzbyB0aGlzCiAgICAgICAgICAgICAgICAjIGNhc2Ugd29uJ3QgZ28gdGhyb3VnaCBoZXJlLgogICAgICAgICAgICAgICAgaWYgKCAkbGFzdF90eXBlIGVxICd9JyAmJiAkbGFzdF90b2tlbiBuZSAnKScgKSB7ICR3cyA9IFdTX1lFUyB9CgogICAgICAgICAgICAgICAgIyBOT1RFOiBzb21lIG9sZGVyIHZlcnNpb25zIG9mIFBlcmwgaGFkIG9jY2FzaW9uYWwgcHJvYmxlbXMgaWYKICAgICAgICAgICAgICAgICMgc3BhY2VzIGFyZSBpbnRyb2R1Y2VkIGJldHdlZW4ga2V5d29yZHMgb3IgZnVuY3Rpb25zIGFuZAogICAgICAgICAgICAgICAgIyBvcGVuaW5nIHBhcmVucy4gIFNvIHRoZSBkZWZhdWx0IGlzIG5vdCB0byBkbyB0aGlzIGV4Y2VwdCBpcwogICAgICAgICAgICAgICAgIyBjZXJ0YWluIGNhc2VzLiAgVGhlIGN1cnJlbnQgUGVybCBzZWVtcyB0byB0b2xlcmF0ZSBzcGFjZXMuCgogICAgICAgICAgICAgICAgIyBTcGFjZSBiZXR3ZWVuIGtleXdvcmQgYW5kICcoJwogICAgICAgICAgICAgICAgZWxzaWYgKCAkbGFzdF90eXBlIGVxICdrJyApIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkbGFzdF90b2tlbiBlcSAnc3ViJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHdzID0gJHdzX3NpZ25hdHVyZV9wYXJlbi0+KCRqKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR3cyA9IFdTX05PCiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5sZXNzICggJHJPcHRzX3NwYWNlX2tleXdvcmRfcGFyZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRzcGFjZV9hZnRlcl9rZXl3b3JkeyRsYXN0X3Rva2VufSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBTZXQgaW5zaWRlIHNwYWNlIGZsYWcgaWYgcmVxdWVzdGVkCiAgICAgICAgICAgICAgICAgICAgICAgIHNldF9jb250YWluZXJfd3NfYnlfa2V5d29yZCggJGxhc3RfdG9rZW4sICRzZXFubyApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIFNwYWNlIGJldHdlZW4gZnVuY3Rpb24gYW5kICcoJwogICAgICAgICAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgIyAndycgYW5kICdpJyBjaGVja3MgZm9yIHNvbWV0aGluZyBsaWtlOgogICAgICAgICAgICAgICAgIyAgIG15ZnVuKCAgICAmbXlmdW4oICAgLT5teWZ1bigKICAgICAgICAgICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgICAgICAgICAjIE5vdGUgdGhhdCBhdCB0aGlzIHBvaW50IGFuIGlkZW50aWZpZXIgbWF5IHN0aWxsIGhhdmUgYQogICAgICAgICAgICAgICAgIyBsZWFkaW5nIGFycm93LCBidXQgdGhlIGFycm93IHdpbGwgYmUgc3BsaXQgb2ZmIGR1cmluZyB0b2tlbgogICAgICAgICAgICAgICAgIyByZXNwYWNpbmcuICBBZnRlciB0aGF0LCB0aGUgdG9rZW4gbWF5IGJlY29tZSBhIGJhcmUgd29yZAogICAgICAgICAgICAgICAgIyB3aXRob3V0IGxlYWRpbmcgYXJyb3cuICBUaGUgcG9pbnQgaXMsIGl0IGlzIGJlc3QgdG8gbWFyawogICAgICAgICAgICAgICAgIyBmdW5jdGlvbiBjYWxsIHBhcmVucyByaWdodCBoZXJlIGJlZm9yZSB0aGF0IGhhcHBlbnMuCiAgICAgICAgICAgICAgICAjIFBhdGNoOiBhZGRlZCAnQycgdG8gcHJldmVudCBibGlua2VyLCBjYXNlIGI5MzQsIGkuZS4gJ3BpKCknCiAgICAgICAgICAgICAgICAjIE5PVEU6IHRoaXMgd291bGQgYmUgdGhlIHBsYWNlIHRvIGFsbG93IHNwYWNlcyBiZXR3ZWVuCiAgICAgICAgICAgICAgICAjIHJlcGVhdGVkIHBhcmVucywgbGlrZSAoKSAoKSAoKSwgYXMgaW4gY2FzZSBjMDE3LCBidXQgSQogICAgICAgICAgICAgICAgIyBkZWNpZGVkIHRoYXQgd291bGQgbm90IGJlIGEgZ29vZCBpZGVhLgoKICAgICAgICAgICAgICAgICMgVXBkYXRlZCB0byBhbGxvdyBkZXRhY2hlZCAnLT4nIGZyb20gdG9rZW5pemVyIChpc3N1ZSBjMTQwKQogICAgICAgICAgICAgICAgZWxzaWYgKAoKICAgICAgICAgICAgICAgICAgICAjICAgICAgICAvXlt3Q1VHXSQvCiAgICAgICAgICAgICAgICAgICAgJGlzX3dDVUd7JGxhc3RfdHlwZX0KCiAgICAgICAgICAgICAgICAgICAgfHwgKAoKICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgIC9eW3dpXSQvCiAgICAgICAgICAgICAgICAgICAgICAgICRpc193aXskbGFzdF90eXBlfQoKICAgICAgICAgICAgICAgICAgICAgICAgJiYgKAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2l0aCBwcmVmaXggJy0+JyBvciAnJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsYXN0X3Rva2VuID1+IC9eKFtcJl18LT4pLwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3IgcHJlY2VkaW5nIHRva2VuICctPicgKHNlZSBiMTMzNzsgYzE0MCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRydG9raF9sYXN0X2xhc3QtPltfVFlQRV9dIGVxICctPicKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9yIHByZWNlZGluZyBzdWIgY2FsbCBvcGVyYXRvciB0b2tlbiAnJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICggICAkcnRva2hfbGFzdF9sYXN0LT5bX1RZUEVfXSBlcSAndCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkcnRva2hfbGFzdF9sYXN0LT5bX1RPS0VOX10gPX4gL15cJlxzKiQvICkKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICR3cyA9CiAgICAgICAgICAgICAgICAgICAgICAkck9wdHNfc3BhY2VfZnVuY3Rpb25fcGFyZW4KICAgICAgICAgICAgICAgICAgICAgID8gJHNlbGYtPndzX3NwYWNlX2Z1bmN0aW9uX3BhcmVuKCAkcnRva2hfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgJHJ0b2toX2xhc3RfbGFzdCApCiAgICAgICAgICAgICAgICAgICAgICA6IFdTX05POwoKICAgICAgICAgICAgICAgICAgICAjIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGluY2x1ZGUgZnVuY3Rpb25zIGNhbGxlZAogICAgICAgICAgICAgICAgICAgICMgd2l0aCAnLT4oJywgc28gdGhhdCBjYXNlIGhhcyB0byBiZSBoYW5kbGVkIHNlcGFyYXRlbHkKICAgICAgICAgICAgICAgICAgICBzZXRfY29udGFpbmVyX3dzX2J5X2tleXdvcmQoICRsYXN0X3Rva2VuLCAkc2Vxbm8gKTsKICAgICAgICAgICAgICAgICAgICAkcmlzX2Z1bmN0aW9uX2NhbGxfcGFyZW4tPnskc2Vxbm99ID0gMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHNwYWNlIGJldHdlZW4gc29tZXRoaW5nIGxpa2UgJGkgYW5kICggaW4gJ3NuaXBwZXRzL3NwYWNlMi5pbicKICAgICAgICAgICAgICAgICMgZm9yICRpICggMCAuLiAyMCApIHsKICAgICAgICAgICAgICAgIGVsc2lmICggJGxhc3RfdHlwZSBlcSAnaScgJiYgJGxhc3RfdG9rZW4gPX4gL15bXCRcJVxAXS8gKSB7CiAgICAgICAgICAgICAgICAgICAgJHdzID0gV1NfWUVTOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgYWxsb3cgY29uc3RhbnQgZnVuY3Rpb24gZm9sbG93ZWQgYnkgJygpJyB0byByZXRhaW4gbm8gc3BhY2UKICAgICAgICAgICAgICAgIGVsc2lmICgkbGFzdF90eXBlIGVxICdDJwogICAgICAgICAgICAgICAgICAgICYmICRyTEwtPlsgJGogKyAxIF0tPltfVE9LRU5fXSBlcSAnKScgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICR3cyA9IFdTX05POwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgYSBwYXJlbiBhZnRlciBhIHN1YiBkZWZpbml0aW9uIHN0YXJ0cyBzaWduYXR1cmUKICAgICAgICAgICAgICAgIGVsc2lmICggJGxhc3RfdHlwZSBlcSAnUycgKSB7CiAgICAgICAgICAgICAgICAgICAgJHdzID0gJHdzX3NpZ25hdHVyZV9wYXJlbi0+KCRqKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAjIG5vIHNwZWNpYWwgcnVsZSBmb3IgdGhpcyBvcGVuaW5nIHBhcmVuIHR5cGUKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBwYXRjaCBmb3IgU1dJVENIL0NBU0U6IG1ha2Ugc3BhY2UgYXQgJ117JyBvcHRpb25hbAogICAgICAgICAgICAjIHNpbmNlIHRoZSAneycgbWlnaHQgYmVnaW4gYSBjYXNlIG9yIHdoZW4gYmxvY2sKICAgICAgICAgICAgZWxzaWYgKCAoICR0b2tlbiBlcSAneycgJiYgJHR5cGUgbmUgJ0wnICkgJiYgJGxhc3RfdG9rZW4gZXEgJ10nICkgewogICAgICAgICAgICAgICAgJHdzID0gV1NfT1BUSU9OQUw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAjIG9wZW5pbmcgdHlwZSBub3QgY292ZXJlZCBieSBhIHNwZWNpYWwgcnVsZQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGtlZXAgc3BhY2UgYmV0d2VlbiAnc3ViJyBhbmQgJ3snIGZvciBhbm9ueW1vdXMgc3ViIGRlZmluaXRpb24sCiAgICAgICAgICAgICMgYmUgc3VyZSB0eXBlID0gJ2snIChhZGRlZCBmb3IgYzE0MCkKICAgICAgICAgICAgaWYgKCAkdHlwZSBlcSAneycgKSB7CiAgICAgICAgICAgICAgICBpZiAoICAgJGxhc3RfdG9rZW4gZXEgJ3N1YicKICAgICAgICAgICAgICAgICAgICAmJiAkbGFzdF90eXBlIGVxICdrJwogICAgICAgICAgICAgICAgICAgICYmICR0b2tlbiBuZSAnKCcgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICR3cyA9IFdTX1lFUzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkIG5vIHNwYWNlIGluICcpeycKICAgICAgICAgICAgICAgIGlmICggJGxhc3RfdG9rZW4gZXEgJyknICYmICR0b2tlbiBlcSAneycgKSB7ICR3cyA9IFdTX1lFUyB9CgogICAgICAgICAgICAgICAgIyBhdm9pZCBhbnkgc3BhY2UgYmVmb3JlIHRoZSBicmFjZSBvciBicmFja2V0IGluIHNvbWV0aGluZyBsaWtlCiAgICAgICAgICAgICAgICAjICBAb3B0c3snYScsJ2InLC4uLn0KICAgICAgICAgICAgICAgIGlmICggJGxhc3RfdHlwZSBlcSAnaScgJiYgJGxhc3RfdG9rZW4gPX4gL15cQC8gKSB7CiAgICAgICAgICAgICAgICAgICAgJHdzID0gV1NfTk87CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgVGhlIC0tZXh0ZW5kZWQtYmxvY2stdGlnaHRuZXNzIG9wdGlvbiBhbGxvd3MgY2VydGFpbiBicmFjZXMKICAgICAgICAgICAgIyB0byBiZSB0cmVhdGVkIGFzIGJsb2NrcyBqdXN0IGZvciBzZXR0aW5nIGlubmVyIHdoaXRlc3BhY2UKICAgICAgICAgICAgaWYgKCAkck9wdHNfZXh0ZW5kZWRfYmxvY2tfdGlnaHRuZXNzICYmICR0b2tlbiBlcSAneycgKSB7CiAgICAgICAgICAgICAgICBteSAkc2Vxbm8gPSAkcnRva2gtPltfVFlQRV9TRVFVRU5DRV9dOwogICAgICAgICAgICAgICAgaWYgKCAgISRyYmxvY2tfdHlwZV9vZl9zZXFuby0+eyRzZXFub30KICAgICAgICAgICAgICAgICAgICAmJiAkZXh0ZW5kZWRfYmxvY2tfdGlnaHRuZXNzX2xpc3R7JGxhc3RfdG9rZW59ICkKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgIyBPayAtIG1ha2UgdGhpcyBicmFjZSBhIGJsb2NrIHR5cGUgZm9yIHRpZ2h0bmVzcyBvbmx5CiAgICAgICAgICAgICAgICAgICAgJGJsb2NrX3R5cGVfZm9yX3RpZ2h0bmVzc3skc2Vxbm99ID0gJGxhc3RfdG9rZW47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9ICMjIGVuZCBlbHNpZiAoICRpc19vcGVuaW5nX3R5cGV7JHR5cGV9ICkgewoKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIyAkdHlwZSBub3Qgb3BlbmluZywgY2xvc2luZywgb3IgY292ZXJlZCBieSBhIHNwZWNpYWwgcnVsZQogICAgICAgIH0KCiAgICAgICAgIyBhbHdheXMgcHJlc2VydmUgd2hhdGV2ZXIgc3BhY2Ugd2FzIHVzZWQgYWZ0ZXIgYSBwb3NzaWJsZQogICAgICAgICMgZmlsZWhhbmRsZSAoZXhjZXB0IF8pCiAgICAgICAgaWYgKCAkbGFzdF90eXBlIGVxICdaJyAmJiAkbGFzdF90b2tlbiBuZSAnXycgKSB7CgogICAgICAgICAgICAjIG5vIHNwYWNlIGZvciAnJCB7JyBldmVuIGlmICckJyBpcyBtYXJrZWQgYXMgdHlwZSAnWicsIGlzc3VlIGMyMjEKICAgICAgICAgICAgIyBub3RlOiByZWR1bmRhbnQgY2hlY2sgb24gdHlwZSAnaCcgaGVyZSByZW1vdmVkIGZvciBjNDE5IHBhcnQgMmIKICAgICAgICAgICAgaWYgKCAkbGFzdF90eXBlIGVxICdaJyAmJiAkbGFzdF90b2tlbiBlcSAnJCcgJiYgJHRva2VuIGVxICd7JyApIHsKICAgICAgICAgICAgICAgICR3cyA9IFdTX05POwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJHdzID0gV1NfT1BUSU9OQUw7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICR3c180ID0gJHdzXzMgPSAkd3MKICAgICAgICAgIGlmIERFQlVHX1dISVRFOwoKICAgICAgICBpZiAoICFkZWZpbmVkKCR3cykgKSB7CgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgV2hpdGVzcGFjZSBSdWxlcyBTZWN0aW9uIDQ6CiAgICAgICAgICAgICMgVXNlIHRoZSBiaW5hcnkgcnVsZSB0YWJsZS4KICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICBpZiAoIGRlZmluZWQoICRiaW5hcnlfd3NfcnVsZXN7JGxhc3RfdHlwZX17JHR5cGV9ICkgKSB7CiAgICAgICAgICAgICAgICAkd3MgICA9ICRiaW5hcnlfd3NfcnVsZXN7JGxhc3RfdHlwZX17JHR5cGV9OwogICAgICAgICAgICAgICAgJHdzXzQgPSAkd3MgaWYgREVCVUdfV0hJVEU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgIyBXaGl0ZXNwYWNlIFJ1bGVzIFNlY3Rpb24gNToKICAgICAgICAgICAgIyBBcHBseSBkZWZhdWx0IHJ1bGVzIG5vdCBjb3ZlcmVkIGFib3ZlLgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICAgICAjIElmIHdlIGZhbGwgdGhyb3VnaCB0byBoZXJlLCBsb29rIGF0IHRoZSBwcmUtZGVmaW5lZCBoYXNoIHRhYmxlcwogICAgICAgICAgICAjIGZvciB0aGUgdHdvIHRva2VucywgYW5kOgogICAgICAgICAgICAjICBpZiAodGhleSBhcmUgZXF1YWwpIHVzZSB0aGUgY29tbW9uIHZhbHVlCiAgICAgICAgICAgICMgIGlmIChlaXRoZXIgaXMgemVybyBvciB1bmRlZikgdXNlIHRoZSBvdGhlcgogICAgICAgICAgICAjICBpZiAoZWl0aGVyIGlzIC0xKSB1c2UgaXQKICAgICAgICAgICAgIyBUaGF0IGlzLAogICAgICAgICAgICAjIGxlZnQgIHZzIHJpZ2h0CiAgICAgICAgICAgICMgIDEgICAgdnMgICAgMSAgICAgLS0+ICAxCiAgICAgICAgICAgICMgIDAgICAgdnMgICAgMCAgICAgLS0+ICAwCiAgICAgICAgICAgICMgLTEgICAgdnMgICAtMSAgICAgLS0+IC0xCiAgICAgICAgICAgICMKICAgICAgICAgICAgIyAgMCAgICB2cyAgIC0xICAgICAtLT4gLTEKICAgICAgICAgICAgIyAgMCAgICB2cyAgICAxICAgICAtLT4gIDEKICAgICAgICAgICAgIyAgMSAgICB2cyAgICAwICAgICAtLT4gIDEKICAgICAgICAgICAgIyAtMSAgICB2cyAgICAwICAgICAtLT4gLTEKICAgICAgICAgICAgIwogICAgICAgICAgICAjIC0xICAgIHZzICAgIDEgICAgIC0tPiAtMQogICAgICAgICAgICAjICAxICAgIHZzICAgLTEgICAgIC0tPiAtMQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIG15ICR3bCA9ICR3YW50X2xlZnRfc3BhY2V7JHR5cGV9OwogICAgICAgICAgICAgICAgbXkgJHdyID0gJHdhbnRfcmlnaHRfc3BhY2V7JGxhc3RfdHlwZX07CiAgICAgICAgICAgICAgICBpZiAoICFkZWZpbmVkKCR3bCkgKSB7CiAgICAgICAgICAgICAgICAgICAgJHdzID0gZGVmaW5lZCgkd3IpID8gJHdyIDogMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggIWRlZmluZWQoJHdyKSApIHsKICAgICAgICAgICAgICAgICAgICAkd3MgPSAkd2w7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkd3MgPQogICAgICAgICAgICAgICAgICAgICAgKCAoICR3bCA9PSAkd3IgKSB8fCAoICR3bCA9PSAtMSApIHx8ICEkd3IgKSA/ICR3bCA6ICR3cjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBUcmVhdCBuZXdsaW5lIGFzIGEgd2hpdGVzcGFjZS4gT3RoZXJ3aXNlLCB3ZSBtaWdodCBjb21iaW5lCiAgICAgICAgIyAnU2VuZCcgYW5kICctcmVjaXBpZW50cycgaGVyZSBhY2NvcmRpbmcgdG8gdGhlIGFib3ZlIHJ1bGVzOgogICAgICAgICMgPDxzbmlwcGV0cy9zcGFjZTMuaW4+PgogICAgICAgICMgICAgbXkgJG1zZyA9IG5ldyBGYXg6OlNlbmQKICAgICAgICAjICAgICAgLXJlY2lwaWVudHMgPT4gJHRvLAogICAgICAgICMgICAgICAtZGF0YSA9PiAkZGF0YTsKICAgICAgICBpZiAoICAhJHdzCiAgICAgICAgICAgICYmICRydG9raC0+W19MSU5FX0lOREVYX10gIT0gJHJ0b2toX2xhc3QtPltfTElORV9JTkRFWF9dICkKICAgICAgICB7CiAgICAgICAgICAgICR3cyA9IFdTX1lFUzsKICAgICAgICB9CgogICAgICAgICMgLXF3YWYgcGhhbnRvbSBjb21tYXMgcmVxdWlyZSBzcGFjZSBiZWZvcmUgdHlwZSAnUScKICAgICAgICAjIFNlZSBzaW1pbGFyIHBhdGNoIGluIHN1YiBpc19lc3NlbnRpYWxfd2hpdGVzcGFjZQogICAgICAgIGlmICggICEkbGFzdF90b2tlbgogICAgICAgICAgICAmJiAkbGFzdF90eXBlIGVxICcsJwogICAgICAgICAgICAmJiAkdHlwZSBlcSAnUScKICAgICAgICAgICAgJiYgJHJPcHRzX3F3X2FzX2Z1bmN0aW9uICkKICAgICAgICB7CiAgICAgICAgICAgICR3cyA9IDE7CiAgICAgICAgfQoKICAgICAgICAkcndoaXRlc3BhY2VfZmxhZ3MtPlskal0gPSAkd3M7CgogICAgICAgICMgcmVtZW1iZXIgbm9uLWJsYW5rLCBub24tY29tbWVudCB0b2tlbnMKICAgICAgICAkbGFzdF90b2tlbiAgICAgID0gJHRva2VuOwogICAgICAgICRsYXN0X3R5cGUgICAgICAgPSAkdHlwZTsKICAgICAgICAkcnRva2hfbGFzdF9sYXN0ID0gJHJ0b2toX2xhc3Q7CiAgICAgICAgJHJ0b2toX2xhc3QgICAgICA9ICRydG9raDsKCiAgICAgICAgIyBQcm9ncmFtbWluZyBub3RlOiBmb3Igc29tZSByZWFzb24sIGl0IGlzIHZlcnkgbXVjaCBmYXN0ZXIgdG8gJ25leHQnCiAgICAgICAgIyBvdXQgb2YgdGhpcyBsb29wIGhlcmUgdGhhbiB0byBwdXQgdGhlIERFQlVHIGNvZGluZyBpbiBhIGJsb2NrLgogICAgICAgICMgQnV0IG5vdGUgdGhhdCB0aGUgZGVidWcgY29kZSBtdXN0IHRoZW4gdXBkYXRlIGl0cyBvd24gY29waWVzCiAgICAgICAgIyBvZiAkbGFzdF90b2tlbiBhbmQgJGxhc3RfdHlwZS4KICAgICAgICBuZXh0IGlmICggIURFQlVHX1dISVRFICk7CgogICAgICAgIG15ICRzdHIgPSBzdWJzdHIoICRsYXN0X3Rva2VuX2RiZywgMCwgMTUgKTsKICAgICAgICAkc3RyIC49IFNQQUNFIHggKCAxNiAtIGxlbmd0aCgkc3RyKSApOwogICAgICAgIGlmICggIWRlZmluZWQoJHdzXzEpICkgeyAkd3NfMSA9ICIqIiB9CiAgICAgICAgaWYgKCAhZGVmaW5lZCgkd3NfMikgKSB7ICR3c18yID0gIioiIH0KICAgICAgICBpZiAoICFkZWZpbmVkKCR3c18zKSApIHsgJHdzXzMgPSAiKiIgfQogICAgICAgIGlmICggIWRlZmluZWQoJHdzXzQpICkgeyAkd3NfNCA9ICIqIiB9CiAgICAgICAgcHJpbnQgeypTVERPVVR9CiJORVcgV0hJVEU6ICBpPSRqICRzdHIgJGxhc3RfdHlwZV9kYmcgJHR5cGUgJHdzXzEgOiAkd3NfMiA6ICR3c18zIDogJHdzXzQgOiAkd3MgXG4iOwoKICAgICAgICAjIHJlc2V0IGZvciBuZXh0IHBhc3MKICAgICAgICAkd3NfMSA9ICR3c18yID0gJHdzXzMgPSAkd3NfNCA9IHVuZGVmOwoKICAgICAgICAkbGFzdF90b2tlbl9kYmcgPSAkdG9rZW47CiAgICAgICAgJGxhc3RfdHlwZV9kYmcgID0gJHR5cGU7CgogICAgfSAjIyBlbmQgbWFpbiBsb29wCgogICAgaWYgKCAkck9wdHMtPnsndGlnaHQtc2VjcmV0LW9wZXJhdG9ycyd9ICkgewogICAgICAgICRzZWxmLT5uZXdfc2VjcmV0X29wZXJhdG9yX3doaXRlc3BhY2UoJHJ3aGl0ZXNwYWNlX2ZsYWdzKTsKICAgIH0KICAgICRzZWxmLT5bX3Jpc19mdW5jdGlvbl9jYWxsX3BhcmVuX10gPSAkcmlzX2Z1bmN0aW9uX2NhbGxfcGFyZW47CiAgICByZXR1cm4gJHJ3aGl0ZXNwYWNlX2ZsYWdzOwoKfSAjIyBlbmQgc3ViIHNldF93aGl0ZXNwYWNlX2ZsYWdzCgpzdWIgc2V0X2NvbnRhaW5lcl93c19ieV9rZXl3b3JkIHsKCiAgICBteSAoICR3b3JkLCAkc2VxdWVuY2VfbnVtYmVyICkgPSBAXzsKICAgIHJldHVybiB1bmxlc3MgKCVrZXl3b3JkX3BhcmVuX2lubmVyX3RpZ2h0bmVzcyk7CgogICAgIyBXZSBqdXN0IHNhdyBhIGtleXdvcmQgKG9yIG90aGVyIGZ1bmN0aW9uIG5hbWUpIGZvbGxvd2VkIGJ5IGFuIG9wZW5pbmcKICAgICMgcGFyZW4uIE5vdyBjaGVjayB0byBzZWUgaWYgdGhlIGZvbGxvd2luZyBwYXJlbiBzaG91bGQgaGF2ZSBzcGVjaWFsCiAgICAjIHRyZWF0bWVudCBmb3IgaXRzIGluc2lkZSBzcGFjZS4gIElmIHNvIHdlIHNldCBhIGhhc2ggdmFsdWUgdXNpbmcgdGhlCiAgICAjIHNlcXVlbmNlIG51bWJlciBhcyBrZXkuCiAgICBpZiAoICR3b3JkICYmICRzZXF1ZW5jZV9udW1iZXIgKSB7CiAgICAgICAgbXkgJHRpZ2h0bmVzc19oZXJlID0gJGtleXdvcmRfcGFyZW5faW5uZXJfdGlnaHRuZXNzeyR3b3JkfTsKICAgICAgICBpZiAoIGRlZmluZWQoJHRpZ2h0bmVzc19oZXJlKSAmJiAkdGlnaHRuZXNzX2hlcmUgIT0gMSApIHsKICAgICAgICAgICAgbXkgJHdzX2ZsYWcgPSAkdGlnaHRuZXNzX2hlcmUgPT0gMCA/IFdTX1lFUyA6IFdTX05POwogICAgICAgICAgICAkb3BlbmluZ19jb250YWluZXJfaW5zaWRlX3dzeyRzZXF1ZW5jZV9udW1iZXJ9ID0gJHdzX2ZsYWc7CiAgICAgICAgICAgICRjbG9zaW5nX2NvbnRhaW5lcl9pbnNpZGVfd3N7JHNlcXVlbmNlX251bWJlcn0gPSAkd3NfZmxhZzsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBERVZFTF9NT0RFCiAgICAgICAgICAmJiBGYXVsdCgidW5leHBlY3RlZCB0b2tlbj0nJHdvcmQnIGFuZCBzZXFubz0nJHNlcXVlbmNlX251bWJlcidcbiIpOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgc2V0X2NvbnRhaW5lcl93c19ieV9rZXl3b3JkCgpzdWIgd3NfaW5fY29udGFpbmVyIHsKCiAgICBteSAoICRqLCAkal9jbG9zaW5nLCAkckxMLCAkdHlwZSwgJHRva2VuLCAkbGFzdF90b2tlbiApID0gQF87CgogICAgIyBHaXZlbjoKICAgICMgICRqID0gaW5kZXggb2YgdG9rZW4gZm9sbG93aW5nIGFuIG9wZW5pbmcgY29udGFpbmVyIHRva2VuCiAgICAjICAkdHlwZSwgJHRva2VuID0gdGhlIHR5cGUgYW5kIHRva2VuIGF0IGluZGV4ICRqCiAgICAjICAkal9jbG9zaW5nID0gY2xvc2luZyB0b2tlbiBvZiB0aGUgY29udGFpbmVyCiAgICAjICAkbGFzdF90b2tlbiA9IHRoZSBvcGVuaW5nIHRva2VuIG9mIHRoZSBjb250YWluZXIKICAgICMgUmV0dXJuOgogICAgIyAgV1NfTk8gIGlmIHRoZXJlIGlzIGp1c3Qgb25lIHRva2VuIGluIHRoZSBjb250YWluZXIgKHdpdGggZXhjZXB0aW9ucykKICAgICMgIFdTX1lFUyBvdGhlcndpc2UKCiAgICAjIHF1aWNrIGNoZWNrCiAgICBpZiAoICRqICsgMSA+PSAkal9jbG9zaW5nICkgeyByZXR1cm4gV1NfTk8gfQoKICAgICMgc3BlY2lhbCBjYXNlcy4uLgoKICAgICMgQ291bnQgJy1mb28nIGFzIHNpbmdsZSB0b2tlbiBzbyB0aGF0IGVhY2ggb2YKICAgICMgICAgJGF7LWZvb30gYW5kICRhe2Zvb30gYW5kICRheydmb28nfQogICAgIyBkbyBub3QgZ2V0IHNwYWNlcyB3aXRoIGRlZmF1bHQgZm9ybWF0dGluZy4KICAgIG15ICRqX2hlcmUgPSAkajsKICAgICsrJGpfaGVyZQogICAgICBpZiAoICR0b2tlbiBlcSAnLScKICAgICAgICAmJiAkbGFzdF90b2tlbiBlcSAneycKICAgICAgICAmJiAkckxMLT5bICRqICsgMSBdLT5bX1RZUEVfXSBlcSAndycgKTsKCiAgICAjIENvdW50IGEgc2lnbiBzZXBhcmF0ZWQgZnJvbSBhIG51bWJlciBhcyBhIHNpbmdsZSB0b2tlbiwgYXMgaW4gdGhlCiAgICAjIGZvbGxvd2luZyBsaW5lLiBPdGhlcndpc2UsIGl0IHRha2VzIHR3byBzdGVwcyB0byBjb252ZXJnZToKICAgICMgICAgZGVnMnJhZCgtICAwLjUpCiAgICBpZiAoICAgKCAkdHlwZSBlcSAnbScgfHwgJHR5cGUgZXEgJ3AnICkKICAgICAgICAmJiAkaiA8ICRqX2Nsb3NpbmcgKyAxCiAgICAgICAgJiYgJHJMTC0+WyAkaiArIDEgXS0+W19UWVBFX10gZXEgJ2InCiAgICAgICAgJiYgJHJMTC0+WyAkaiArIDIgXS0+W19UWVBFX10gZXEgJ24nCiAgICAgICAgJiYgJHJMTC0+WyAkaiArIDIgXS0+W19UT0tFTl9dID1+IC9eXGQvICkKICAgIHsKICAgICAgICAkal9oZXJlID0gJGogKyAyOwogICAgfQoKICAgICMgcmVjaGVjay4uCiAgICBpZiAoICRqX2hlcmUgKyAxID49ICRqX2Nsb3NpbmcgKSB7IHJldHVybiBXU19OTyB9CgogICAgIyBjaGVjayBmb3IgYSBibGFuayBhZnRlciB0aGUgZmlyc3QgdG9rZW4KICAgIG15ICRqX25leHQgPQogICAgICAoICRyTEwtPlsgJGpfaGVyZSArIDEgXS0+W19UWVBFX10gZXEgJ2InICkKICAgICAgPyAkal9oZXJlICsgMgogICAgICA6ICRqX2hlcmUgKyAxOwoKICAgIHJldHVybiAkal9uZXh0ID09ICRqX2Nsb3NpbmcgPyBXU19OTyA6IFdTX1lFUzsKCn0gIyMgZW5kIHN1YiB3c19pbl9jb250YWluZXIKCnN1YiB3c19zcGFjZV9mdW5jdGlvbl9wYXJlbiB7CgogICAgbXkgKCAkc2VsZiwgJHJ0b2toX2xhc3QsICRydG9raF9sYXN0X2xhc3QgKSA9IEBfOwoKICAgICMgQ2FsbGVkIGlmIC0tc3BhY2UtZnVuY3Rpb24tcGFyZW4gaXMgc2V0IHRvIHNlZSBpZiBpdCBtaWdodCBjYXVzZQogICAgIyBhIHByb2JsZW0uICBUaGUgbWFudWFsIHdhcm5zIHRoZSB1c2VyIGFib3V0IHBvdGVudGlhbCBwcm9ibGVtcyB3aXRoCiAgICAjIHRoaXMgZmxhZy4gSGVyZSB3ZSBqdXN0IHRyeSB0byBjYXRjaCBvbmUgY29tbW9uIHByb2JsZW0uCgogICAgIyBHaXZlbjoKICAgICMgICRqID0gaW5kZXggb2YgJygnIGFmdGVyIGZ1bmN0aW9uIG5hbWUKICAgICMgUmV0dXJuOgogICAgIyAgV1NfTk8gIGlmIG5vIHNwYWNlCiAgICAjICBXU19ZRVMgb3RoZXJ3aXNlCgogICAgIyBUaGlzIHdhcyBhZGRlZCB0byBmaXggZm9yIGlzc3VlIGMxNjYuIElnbm9yZSAtc2ZwIGF0IGEgcG9zc2libGUgaW5kaXJlY3QKICAgICMgb2JqZWN0IGxvY2F0aW9uLiBGb3IgZXhhbXBsZSwgZG8gbm90IGNvbnZlcnQgdGhpczoKICAgICMgICBwcmludCBoZWFkZXIoKSAuLi4KICAgICMgdG8gdGhpczoKICAgICMgICBwcmludCBoZWFkZXIgKCkgLi4uCiAgICAjIGJlY2F1c2UgaW4gdGhpcyBsYXR0ZXIgZm9ybSwgaGVhZGVyIG1heSBiZSB0YWtlbiB0byBiZSBhIGZpbGUgaGFuZGxlCiAgICAjIGluc3RlYWQgb2YgYSBmdW5jdGlvbiBjYWxsLgoKICAgICMgU3RhcnQgd2l0aCB0aGUgbm9ybWFsIHZhbHVlIGZvciAtc2ZwOgogICAgbXkgJHdzID0gV1NfWUVTOwoKICAgICMgbm93IGNoZWNrIHRvIGJlIHN1cmUgd2UgZG9uJ3QgY2F1c2UgYSBwcm9ibGVtOgogICAgbXkgJHR5cGVfbGwgPSAkcnRva2hfbGFzdF9sYXN0LT5bX1RZUEVfXTsKICAgIG15ICR0b2tfbGwgID0gJHJ0b2toX2xhc3RfbGFzdC0+W19UT0tFTl9dOwoKICAgICMgTk9URTogdGhpcyBpcyBqdXN0IGEgbWluaW1hbCBjaGVjay4gRm9yIGV4YW1wbGUsIHdlIG1pZ2h0IGFsc28gY2hlY2sKICAgICMgZm9yIHNvbWV0aGluZyBsaWtlIHRoaXM6CiAgICAjICAgcHJpbnQgKCBoZWFkZXIgKCAuLgogICAgaWYgKCAkdHlwZV9sbCBlcSAnaycgJiYgJGlzX2luZGlyZWN0X29iamVjdF90YWtlcnskdG9rX2xsfSApIHsKICAgICAgICAkd3MgPSBXU19OTzsKICAgIH0KCiAgICAjIGRvIG5vdCBsZXQgLXNmcCBhZGQgc3BhY2UgZm9yIHF3J3MgY29udmVydGVkIHRvIGZ1bmN0aW9ucyBieSAtcXdhZgogICAgaWYgKCAgICRyT3B0c19xd19hc19mdW5jdGlvbgogICAgICAgICYmICRydG9raF9sYXN0LT5bX1RZUEVfXSBlcSAnVScKICAgICAgICAmJiAkcnRva2hfbGFzdC0+W19UT0tFTl9dIGVxICdxdycgKQogICAgewogICAgICAgICR3cyA9IFdTX05POwogICAgfQoKICAgIHJldHVybiAkd3M7Cgp9ICMjIGVuZCBzdWIgd3Nfc3BhY2VfZnVuY3Rpb25fcGFyZW4KCn0gIyMgZW5kIGNsb3N1cmUgc2V0X3doaXRlc3BhY2VfZmxhZ3MKCnN1YiBkdW1wX3dhbnRfbGVmdF9zcGFjZSB7CiAgICBteSAkZmggPSBzaGlmdDsKICAgIGxvY2FsICRMSVNUX1NFUEFSQVRPUiA9ICJcbiI7CiAgICAkZmgtPnByaW50KDw8RU9NKTsKVGhlc2UgdmFsdWVzIGFyZSB0aGUgbWFpbiBjb250cm9sIG9mIHdoaXRlc3BhY2UgdG8gdGhlIGxlZnQgb2YgYSB0b2tlbiB0eXBlOwpUaGV5IG1heSBiZSBhbHRlcmVkIHdpdGggdGhlIC13bHMgcGFyYW1ldGVyLgpGb3IgYSBsaXN0IG9mIHRva2VuIHR5cGVzLCB1c2UgcGVybHRpZHkgLS1kdW1wLXRva2VuLXR5cGVzICgtZHR0KQogMSBtZWFucyB0aGUgdG9rZW4gd2FudHMgYSBzcGFjZSB0byBpdHMgbGVmdAotMSBtZWFucyB0aGUgdG9rZW4gZG9lcyBub3Qgd2FudCBhIHNwYWNlIHRvIGl0cyBsZWZ0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpFT00KICAgIGZvcmVhY2ggbXkgJGtleSAoIHNvcnQga2V5cyAld2FudF9sZWZ0X3NwYWNlICkgewogICAgICAgICRmaC0+cHJpbnQoIiRrZXlcdCR3YW50X2xlZnRfc3BhY2V7JGtleX1cbiIpOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgZHVtcF93YW50X2xlZnRfc3BhY2UKCnN1YiBkdW1wX3dhbnRfcmlnaHRfc3BhY2UgewogICAgbXkgJGZoID0gc2hpZnQ7CiAgICBsb2NhbCAkTElTVF9TRVBBUkFUT1IgPSAiXG4iOwogICAgJGZoLT5wcmludCg8PEVPTSk7ClRoZXNlIHZhbHVlcyBhcmUgdGhlIG1haW4gY29udHJvbCBvZiB3aGl0ZXNwYWNlIHRvIHRoZSByaWdodCBvZiBhIHRva2VuIHR5cGU7ClRoZXkgbWF5IGJlIGFsdGVyZWQgd2l0aCB0aGUgLXdycyBwYXJhbWV0ZXIuCkZvciBhIGxpc3Qgb2YgdG9rZW4gdHlwZXMsIHVzZSBwZXJsdGlkeSAtLWR1bXAtdG9rZW4tdHlwZXMgKC1kdHQpCiAxIG1lYW5zIHRoZSB0b2tlbiB3YW50cyBhIHNwYWNlIHRvIGl0cyByaWdodAotMSBtZWFucyB0aGUgdG9rZW4gZG9lcyBub3Qgd2FudCBhIHNwYWNlIHRvIGl0cyByaWdodAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRU9NCiAgICBmb3JlYWNoIG15ICRrZXkgKCBzb3J0IGtleXMgJXdhbnRfcmlnaHRfc3BhY2UgKSB7CiAgICAgICAgJGZoLT5wcmludCgiJGtleVx0JHdhbnRfcmlnaHRfc3BhY2V7JGtleX1cbiIpOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgZHVtcF93YW50X3JpZ2h0X3NwYWNlCgp7ICAgICMjIGJlZ2luIGNsb3N1cmUgaXNfZXNzZW50aWFsX3doaXRlc3BhY2UKCiAgICBteSAlaXNfc29ydF9ncmVwX21hcDsKICAgIG15ICVpc19kaWdyYXBoOwogICAgbXkgJWlzX3RyaWdyYXBoOwogICAgbXkgJWVzc2VudGlhbF93aGl0ZXNwYWNlX2ZpbHRlcl9sMTsKICAgIG15ICVlc3NlbnRpYWxfd2hpdGVzcGFjZV9maWx0ZXJfcjE7CiAgICBteSAlZXNzZW50aWFsX3doaXRlc3BhY2VfZmlsdGVyX2wyOwogICAgbXkgJWVzc2VudGlhbF93aGl0ZXNwYWNlX2ZpbHRlcl9yMjsKICAgIG15ICVpc190eXBlX3dpdGhfc3BhY2VfYmVmb3JlX2JhcmV3b3JkOwogICAgbXkgJWlzX3NwZWNpYWxfdmFyaWFibGVfY2hhcjsKICAgIG15ICVpc19kaWdpdF9jaGFyOwoKICAgIEJFR0lOIHsKCiAgICAgICAgbXkgQHE7CgogICAgICAgICMgTk9URTogVGhpcyBoYXNoIGlzIGxpa2UgdGhlIGdsb2JhbCAlaXNfc29ydF9tYXBfZ3JlcCwgYnV0IGl0IGlnbm9yZXMKICAgICAgICAjIGdyZXAgYWxpYXNlcyBvbiBwdXJwb3NlLCBzaW5jZSBoZXJlIHdlIGFyZSBsb29raW5nIHBhcmVucywgbm90IGJyYWNlcwogICAgICAgIEBxID0gcXcoIHNvcnQgZ3JlcCBtYXAgKTsKICAgICAgICBAaXNfc29ydF9ncmVwX21hcHtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICAgICBAcSA9IHF3ewogICAgICAgICAgLi4gOjogPDwgPj4gKiogJiYgfHwgLy8gLT4gPT4gKz0gLT0KICAgICAgICAgIC49ICU9ICY9IHw9IF49ICo9IDw+IDw9ID49ID09ID1+ICF+CiAgICAgICAgICAhPSArKyAtLSAvPSB4PSB+fiB+LiB8LiAmLiBeLiBeXgogICAgICAgIH07CiAgICAgICAgQGlzX2RpZ3JhcGh7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICAgICAgQHEgPSBxdyggLi4uICoqPSA8PD0gPj49ICYmPSB8fD0gLy89IDw9PiAhfn4gJi49IHwuPSBeLj0gPDx+ICk7CiAgICAgICAgQGlzX3RyaWdyYXBoe0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgICAgICMgVGhlc2UgYXJlIHVzZWQgYXMgYSBzcGVlZHVwIGZpbHRlcnMgZm9yIHN1YiBpc19lc3NlbnRpYWxfd2hpdGVzcGFjZS4KCiAgICAgICAgIyBGaWx0ZXIgMToKICAgICAgICAjIFRoZXNlIGxlZnQgc2lkZSB0b2tlbiB0eXBlcyBVU1VBTExZIGRvIG5vdCByZXF1aXJlIGEgc3BhY2U6CiAgICAgICAgQHEgPSBxdyggOyB7IH0gWyBdIEwgUiApOwogICAgICAgIHB1c2ggQHEsICcsJzsKICAgICAgICBwdXNoIEBxLCAnKSc7CiAgICAgICAgcHVzaCBAcSwgJygnOwogICAgICAgIEBlc3NlbnRpYWxfd2hpdGVzcGFjZV9maWx0ZXJfbDF7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICAgICAgIyBCVVQgc29tZSBtaWdodCBpZiBmb2xsb3dlZCBieSB0aGVzZSByaWdodCB0b2tlbiB0eXBlcwogICAgICAgIEBxID0gcXcoIHBwIG1tIDw8IDw8PSBoICk7CiAgICAgICAgQGVzc2VudGlhbF93aGl0ZXNwYWNlX2ZpbHRlcl9yMXtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICAgICAjIEZpbHRlciAyOgogICAgICAgICMgVGhlc2UgcmlnaHQgc2lkZSBmaWx0ZXJzIHVzdWFsbHkgZG8gbm90IHJlcXVpcmUgYSBzcGFjZQogICAgICAgIEBxID0gcXcoIDsgXSBSIH0gKTsKICAgICAgICBwdXNoIEBxLCAnLCc7CiAgICAgICAgcHVzaCBAcSwgJyknOwogICAgICAgIEBlc3NlbnRpYWxfd2hpdGVzcGFjZV9maWx0ZXJfcjJ7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICAgICAgIyBCVVQgc29tZSBtaWdodCBpZiBmb2xsb3dlZCBieSB0aGVzZSBsZWZ0IHRva2VuIHR5cGVzCiAgICAgICAgQHEgPSBxdyggaCBaICk7CiAgICAgICAgQGVzc2VudGlhbF93aGl0ZXNwYWNlX2ZpbHRlcl9sMntAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICAgICAjIEtlZXAgYSBzcGFjZSBiZXR3ZWVuIGNlcnRhaW4gdHlwZXMgYW5kIGFueSBiYXJld29yZDoKICAgICAgICAjIFE6IGtlZXAgYSBzcGFjZSBiZXR3ZWVuIGEgcXVvdGUgYW5kIGEgYmFyZXdvcmQgdG8gcHJldmVudCB0aGUKICAgICAgICAjICAgIGJhcmV3b3JkIGZyb20gYmVjb21pbmcgYSBxdW90ZSBtb2RpZmllci4KICAgICAgICAjICY6IGRvIG5vdCByZW1vdmUgc3BhY2UgYmV0d2VlbiBhbiAnJicgYW5kIGEgYmFyZSB3b3JkIGJlY2F1c2UKICAgICAgICAjICAgIGl0IG1heSB0dXJuIGludG8gYSBmdW5jdGlvbiBldmFsdWF0aW9uLCBsaWtlIGhlcmUKICAgICAgICAjICAgIGJldHdlZW4gJyYnIGFuZCAnT19BQ0NNT0RFJywgcHJvZHVjaW5nIGEgc3ludGF4IGVycm9yIFtGaWxlLnBtXQogICAgICAgICMgICAgICAkb3B0c3tyZG9ubHl9ID0gKCgkb3B0c3ttb2RlfSAmIE9fQUNDTU9ERSkgPT0gT19SRE9OTFkpOwogICAgICAgIEBxID0gcXcoIFEgJiApOwogICAgICAgIEBpc190eXBlX3dpdGhfc3BhY2VfYmVmb3JlX2JhcmV3b3Jke0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgICAgICMgVGhlc2UgYXJlIHRoZSBvbmx5IGNoYXJhY3RlcnMgd2hpY2ggY2FuIChjdXJyZW50bHkpIGZvcm0gc3BlY2lhbAogICAgICAgICMgdmFyaWFibGVzLCBsaWtlICReVzogKGlzc3VlIGMwNjYsIGMwNjgpLgogICAgICAgIEBxID0KICAgICAgICAgIHF3eyA/IEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWiBbIFwgXSBeIF8gfTsKICAgICAgICBAaXNfc3BlY2lhbF92YXJpYWJsZV9jaGFye0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgICAgIEBxID0gcXcoIDAgMSAyIDMgNCA1IDYgNyA4IDkgKTsKICAgICAgICBAaXNfZGlnaXRfY2hhcntAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgIH0gIyMgZW5kIEJFR0lOCgogICAgc3ViIGlzX2Vzc2VudGlhbF93aGl0ZXNwYWNlIHsKCiAgICAgICAgbXkgKCAkdG9rZW5sbCwgJHR5cGVsbCwgJHRva2VubCwgJHR5cGVsLCAkdG9rZW5yLCAkdHlwZXIgKSA9IEBfOwoKICAgICAgICAjIEVzc2VudGlhbCB3aGl0ZXNwYWNlIG1lYW5zIHdoaXRlc3BhY2Ugd2hpY2ggY2Fubm90IGJlIHNhZmVseSBkZWxldGVkCiAgICAgICAgIyB3aXRob3V0IHJpc2tpbmcgdGhlIGludHJvZHVjdGlvbiBvZiBhIHN5bnRheCBlcnJvci4KCiAgICAgICAgIyBHaXZlbjogdGhyZWUgdG9rZW5zIGFuZCB0aGVpciB0eXBlczoKICAgICAgICAjICgkdG9rZW5sbCwgJHR5cGVsbCkgPSBwcmV2aW91cyBub25ibGFuayB0b2tlbiB0byB0aGUgbGVmdCBvZiAkdG9rZW5sCiAgICAgICAgIyAoJHRva2VubCwgJHR5cGVsKSAgID0gdGhlIHRva2VuIHRvIHRoZSBsZWZ0IG9mIHRoZSBzcGFjZSBpbiBxdWVzdGlvbgogICAgICAgICMgKCR0b2tlbnIsICR0eXBlcikgICA9IHRoZSB0b2tlbiB0byB0aGUgcmlnaHQgb2YgdGhlIHNwYWNlIGluIHF1ZXN0aW9uCgogICAgICAgICMgUmV0dXJuOgogICAgICAgICMgICB0cnVlICBpZiB3aGl0ZXNwYWNlIGlzIG5lZWRlZAogICAgICAgICMgICBmYWxzZSBpZiB3aGl0ZXNwYWNlIG1heSBiZSBkZWxldGVkCiAgICAgICAgIwogICAgICAgICMgTm90ZTE6IFRoaXMgcm91dGluZSBzaG91bGQgYWxtb3N0IG5ldmVyIG5lZWQgdG8gYmUgY2hhbmdlZC4gIEl0IGlzCiAgICAgICAgIyBmb3IgYXZvaWRpbmcgc3ludGF4IHByb2JsZW1zIHJhdGhlciB0aGFuIGZvciBmb3JtYXR0aW5nLgoKICAgICAgICAjIE5vdGUyOiBUaGUgLW1hbmdsZSBvcHRpb24gY2F1c2VzIGxhcmdlIG51bWJlcnMgb2YgY2FsbHMgdG8gdGhpcwogICAgICAgICMgcm91dGluZSBhbmQgdGhlcmVmb3JlIGlzIGEgZ29vZCB0ZXN0LiBTbyBpZiBhIGNoYW5nZSBpcyBtYWRlLCBiZSBzdXJlCiAgICAgICAgIyB0byB1c2Ugbnl0cHJvZiB0byBwcm9maWxlIHdpdGggYm90aCBvbGQgYW5kIHJldmlzZWQgY29kaW5nIHVzaW5nIHRoZQogICAgICAgICMgLW1hbmdsZSBvcHRpb24gYW5kIGNoZWNrIGRpZmZlcmVuY2VzLgoKICAgICAgICAjIFRoaXMgaXMgcG90ZW50aWFsbHkgYSB2ZXJ5IHNsb3cgcm91dGluZSBidXQgdGhlIGZvbGxvd2luZyBxdWljawogICAgICAgICMgZmlsdGVycyB0eXBpY2FsbHkgY2F0Y2ggYW5kIGhhbmRsZSBvdmVyIDkwJSBvZiB0aGUgY2FsbHMuCgogICAgICAgICMgLXF3YWYgcGhhbnRvbSBjb21tYXMgcmVxdWlyZSBzcGFjZSBiZWZvcmUgdHlwZSAnUScKICAgICAgICAjIFNlZSBzaW1pbGFyIHBhdGNoIGluIHN1YiBzZXRfd2hpdGVzcGFjZV9mbGFncwogICAgICAgIGlmICggICEkdG9rZW5sCiAgICAgICAgICAgICYmICR0eXBlbCBlcSAnLCcKICAgICAgICAgICAgJiYgJHR5cGVyIGVxICdRJwogICAgICAgICAgICAmJiAkck9wdHNfcXdfYXNfZnVuY3Rpb24gKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQoKICAgICAgICAjIEZpbHRlciAxOiB1c3VhbGx5IG5vIHNwYWNlIHJlcXVpcmVkIGFmdGVyIGNvbW1vbiB0eXBlcyA7ICwgWyBdIHsgfSAoICkKICAgICAgICByZXR1cm4KICAgICAgICAgIGlmICggJGVzc2VudGlhbF93aGl0ZXNwYWNlX2ZpbHRlcl9sMXskdHlwZWx9CiAgICAgICAgICAgICYmICEkZXNzZW50aWFsX3doaXRlc3BhY2VfZmlsdGVyX3IxeyR0eXBlcn0gKTsKCiAgICAgICAgIyBGaWx0ZXIgMjogdXN1YWxseSBubyBzcGFjZSBiZWZvcmUgY29tbW9uIHR5cGVzIDsgLAogICAgICAgIHJldHVybgogICAgICAgICAgaWYgKCAkZXNzZW50aWFsX3doaXRlc3BhY2VfZmlsdGVyX3IyeyR0eXBlcn0KICAgICAgICAgICAgJiYgISRlc3NlbnRpYWxfd2hpdGVzcGFjZV9maWx0ZXJfbDJ7JHR5cGVsfSApOwoKICAgICAgICAjIEZpbHRlciAzOiBIYW5kbGUgc2lkZSBjb21tZW50czogYSBzcGFjZSBpcyBvbmx5IGVzc2VudGlhbCBpZiB0aGUgbGVmdAogICAgICAgICMgdG9rZW4gZW5kcyBpbiAnJCcgRm9yIGV4YW1wbGUsIHdlIGRvIG5vdCB3YW50IHRvIGNyZWF0ZSAkI2ZvbyBiZWxvdzoKCiAgICAgICAgIyAgIHN1YiB0MDg2CiAgICAgICAgIyAgICAgICAoICNmb28pKSkKICAgICAgICAjICAgICAgICQgI2ZvbykpKQogICAgICAgICMgICAgICAgYSAjZm9vKSkpCiAgICAgICAgIyAgICAgICApICNmb28pKSkKICAgICAgICAjICAgICAgIHsgLi4uIH0KCiAgICAgICAgIyBBbHNvLCBJIHByZWZlciBub3QgdG8gcHV0IGEgPyBhbmQgIyB0b2dldGhlciBiZWNhdXNlID8gdXNlZCB0byBiZQogICAgICAgICMgYSBwYXR0ZXJuIGRlbGltaXRlciBhbmQgc3BhY2luZyB3YXMgdXNlZCBpZiBndWVzc2luZyB3YXMgbmVlZGVkLgoKICAgICAgICBpZiAoICR0eXBlciBlcSAnIycgKSB7CgogICAgICAgICAgICByZXR1cm4gMQogICAgICAgICAgICAgIGlmICggJHRva2VubAogICAgICAgICAgICAgICAgJiYgKCAkdHlwZWwgZXEgJz8nIHx8IHN1YnN0ciggJHRva2VubCwgLTEgKSBlcSAnJCcgKSApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBteSAkdG9rZW5yX2xlYWRpbmdfY2ggICAgPSBzdWJzdHIoICR0b2tlbnIsIDAsIDEgKTsKICAgICAgICBteSAkdG9rZW5yX2xlYWRpbmdfY2gyICAgPSBzdWJzdHIoICR0b2tlbnIsIDAsIDIgKTsKICAgICAgICBteSAkdG9rZW5yX2lzX29wZW5fcGFyZW4gPSAkdG9rZW5yIGVxICcoJzsKICAgICAgICBteSAkdG9rZW5fam9pbmVkICAgICAgICAgPSAkdG9rZW5sIC4gJHRva2VucjsKICAgICAgICBteSAkdG9rZW5sX2lzX2Rhc2ggICAgICAgPSAkdG9rZW5sIGVxICctJzsKICAgICAgICBteSAkdG9rZW5yX2lzX2JhcmV3b3JkICAgPSBvcmQoJHRva2Vucl9sZWFkaW5nX2NoKSA+IE9SRF9QUklOVEFCTEVfTUFYCgogICAgICAgICAgIyBhbHdheXMgY29ycmVjdCBidXQgc2xvdwogICAgICAgICAgPyAkdG9rZW5yID1+IC9eW15cZFxXXS8KCiAgICAgICAgICAjIGZhc3QgYnV0IGFzY2lpIG9ubHkKICAgICAgICAgIDogKCAkdG9rZW5yX2xlYWRpbmdfY2ggPX4gdHIvYS16QS1aXy9hLXpBLVpfLyApOwoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgTXVzdCBkbyBmdWxsIGNoZWNrCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgIyBUaGlzIGxvbmcgbG9naWNhbCBleHByZXNzaW9uIGdpdmVzIHRoZSByZXN1bHQKICAgICAgICBteSAkcmVzdWx0ID0KCiAgICAgICAgICAjIG5ldmVyIGNvbWJpbmUgdHdvIGJhcmUgd29yZHMgb3IgbnVtYmVycwogICAgICAgICAgIyBleGFtcGxlczogIGFuZCA6Om9rKDEpCiAgICAgICAgICAjICAgICAgICAgICAgcmV0dXJuIDo6c3B3KC4uLikKICAgICAgICAgICMgICAgICAgICAgICBmb3IgYmxhOjpibGE6OiBhYmMKICAgICAgICAgICMgZXhhbXBsZSBpcyAiJW92ZXJsb2FkOjogYW5kIiBpbiBmaWxlcyBEdW1wdmFsdWUucG0gb3IgY29sb25idWcucGwKICAgICAgICAgICMgICAgICAgICAgICAkaW5wdXQgZXEicXVpdCIgdG8gbWFrZSAkaW5wdXRlcSJxdWl0IgogICAgICAgICAgIyAgICAgICAgICAgIG15ICRzaXplPS1zOjpTSU5LIGlmICRmaWxlOyAgPD09T0sgYnV0IHdlIHdvbid0IGRvIGl0CiAgICAgICAgICAjIGRvbid0IGpvaW4gc29tZXRoaW5nIGxpa2U6IGZvciBibGE6OmJsYTo6IGFiYwogICAgICAgICAgIyBleGFtcGxlIGlzICIlb3ZlcmxvYWQ6OiBhbmQiIGluIGZpbGVzIER1bXB2YWx1ZS5wbSBvciBjb2xvbmJ1Zy5wbAogICAgICAgICAgKAogICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAjIyAoICR0b2tlbnIgPX4gL14oW1wnXHddfFw6XDopLyApCiAgICAgICAgICAgICAgICAgICAgICR0b2tlbnJfaXNfYmFyZXdvcmQKICAgICAgICAgICAgICAgICAgfHwgJGlzX2RpZ2l0X2NoYXJ7JHRva2Vucl9sZWFkaW5nX2NofQogICAgICAgICAgICAgICAgICB8fCAkdG9rZW5yX2xlYWRpbmdfY2ggZXEgIiciCiAgICAgICAgICAgICAgICAgIHx8ICR0b2tlbnJfbGVhZGluZ19jaDIgZXEgJzo6JwogICAgICAgICAgICApCgogICAgICAgICAgICAgICYmICggJHRva2VubCA9fiAvKFtcJ1x3XXxcOlw6KSQvICYmICR0eXBlbCBuZSAnQ09SRTo6JyApCiAgICAgICAgICApCgogICAgICAgICAgIyBkbyBub3QgY29tYmluZSBhIG51bWJlciB3aXRoIGEgY29uY2F0ZW5hdGlvbiBkb3QKICAgICAgICAgICMgZXhhbXBsZTogcG9tLmNhcHV0bzoKICAgICAgICAgICMgJHZ0MTAwX2NvbXBhdGlibGUgPyAiXGVbMDswSCIgOiAoJy0nIHggNzggLiAiXG4iKTsKICAgICAgICAgIHx8ICR0eXBlbCBlcSAnbicgJiYgJHRva2VuciBlcSAnLicKICAgICAgICAgIHx8ICR0eXBlciBlcSAnbicgJiYgJHRva2VubCBlcSAnLicKCiAgICAgICAgICAjIGNhc2VzIG9mIGEgc3BhY2UgYmVmb3JlIGEgYmFyZXdvcmQuLi4KICAgICAgICAgIHx8ICgKICAgICAgICAgICAgJHRva2Vucl9pc19iYXJld29yZCAmJiAoCgogICAgICAgICAgICAgICAgIyBkbyBub3Qgam9pbiBhIG1pbnVzIHdpdGggYSBiYXJlIHdvcmQsIGJlY2F1c2UgeW91IG1pZ2h0IGZvcm0KICAgICAgICAgICAgICAgICMgYSBmaWxlIHRlc3Qgb3BlcmF0b3IuICBFeGFtcGxlIGZyb20gQ29tcGxleC5wbToKICAgICAgICAgICAgICAgICMgaWYgKENPUkU6OmFicygkeiAtIGkpIDwgJGVwcyk7CiAgICAgICAgICAgICAgICAjICJ6LWkiIHdvdWxkIGJlIHRha2VuIGFzIGEgZmlsZSB0ZXN0LgogICAgICAgICAgICAgICAgJHRva2VubF9pc19kYXNoICYmIGxlbmd0aCgkdG9rZW5yKSA9PSAxCgogICAgICAgICAgICAgICAgIyBhbmQgc29tZXRoaW5nIGxpa2UgdGhpcyBjb3VsZCBiZWNvbWUgYW1iaWd1b3VzIHdpdGhvdXQgc3BhY2UKICAgICAgICAgICAgICAgICMgYWZ0ZXIgdGhlICctJzoKICAgICAgICAgICAgICAgICMgICB1c2UgY29uc3RhbnQgSUlJPT4xOwogICAgICAgICAgICAgICAgIyAgICRhID0gJGIgLSBJSUk7CiAgICAgICAgICAgICAgICAjIGFuZCBldmVuIHRoaXM6CiAgICAgICAgICAgICAgICAjICAgJGEgPSAtIElJSTsKICAgICAgICAgICAgICAgIHx8ICR0b2tlbmxfaXNfZGFzaCAmJiAkdHlwZXIgPX4gL15bd0NdJC8KCiAgICAgICAgICAgICAgICAjIGtlZXAgc3BhY2UgYmV0d2VlbiB0eXBlcyBRICYgYW5kIGEgYmFyZXdvcmQKICAgICAgICAgICAgICAgIHx8ICRpc190eXBlX3dpdGhfc3BhY2VfYmVmb3JlX2JhcmV3b3JkeyR0eXBlbH0KCiAgICAgICAgICAgICAgICAjICstOiBiaW5hcnkgcGx1cyBhbmQgbWludXMgYmVmb3JlIGEgYmFyZXdvcmQgY291bGQgZ2V0CiAgICAgICAgICAgICAgICAjIGNvbnZlcnRlZCBpbnRvIHVuYXJ5IHBsdXMgYW5kIG1pbnVzIG9uIG5leHQgcGFzcyB0aHJvdWdoIHRoZQogICAgICAgICAgICAgICAgIyB0b2tlbml6ZXIuIFRoaXMgY2FuIGxlYWQgdG8gYmxpbmtlcnM6IGNhc2VzIGI2NjAgYjY3MCBiNzgwCiAgICAgICAgICAgICAgICAjIGI3ODEgYjc4NyBiNzg4IGI3OTAgU28gd2Uga2VlcCBhIHNwYWNlIHVubGVzcyB0aGUgKy8tIGNsZWFybHkKICAgICAgICAgICAgICAgICMgZm9sbG93cyBhbiBvcGVyYXRvcgogICAgICAgICAgICAgICAgfHwgKCAoICR0eXBlbCBlcSAnKycgfHwgJHR5cGVsIGVxICctJyApCiAgICAgICAgICAgICAgICAgICAgJiYgJHR5cGVsbCAhfiAvXltuaUNcKVx9XF1SXSQvICkKCiAgICAgICAgICAgICAgICAjIGtlZXAgYSBzcGFjZSBiZXR3ZWVuIGEgdG9rZW4gZW5kaW5nIGluICckJyBhbmQgYW55IHdvcmQ7CiAgICAgICAgICAgICAgICAjIHRoaXMgY2F1c2VkIHRyb3VibGU6ICAiZGllIEAkIGlmICRAIgogICAgICAgICAgICAgICAgfHwgJHR5cGVsIGVxICdpJyAmJiBzdWJzdHIoICR0b2tlbmwsIC0xLCAxICkgZXEgJyQnCgogICAgICAgICAgICAgICAgIyBkb24ndCBjb21iaW5lICQkIG9yICQjIHdpdGggYW55IGFscGhhbnVtZXJpYwogICAgICAgICAgICAgICAgIyAodGVzdGZpbGUgbWFuZ2xlLnQgd2l0aCAtLW1hbmdsZSkKICAgICAgICAgICAgICAgIHx8ICR0b2tlbmwgZXEgJyQkJwogICAgICAgICAgICAgICAgfHwgJHRva2VubCBlcSAnJCMnCgogICAgICAgICAgICApCiAgICAgICAgICApICAgICMjIGVuZCAkdG9rZW5yX2lzX2JhcmV3b3JkCgogICAgICAgICAgIyBPTEQsIG5vdCB1c2VkCiAgICAgICAgICAjICc9IC0nIHNob3VsZCBub3QgYmVjb21lID0tIG9yIHlvdSB3aWxsIGdldCBhIHdhcm5pbmcKICAgICAgICAgICMgYWJvdXQgcmV2ZXJzZWQgLT0KICAgICAgICAgICMgfHwgKCR0b2tlbnIgZXEgJy0nKQoKICAgICAgICAgICMgZG8gbm90IGpvaW4gYSBiYXJlIHdvcmQgd2l0aCBhIG1pbnVzLCBsaWtlIGJldHdlZW4gJ1NlbmQnIGFuZAogICAgICAgICAgIyAnLXJlY2lwaWVudHMnIGhlcmUgPDxzbmlwcGV0cy9zcGFjZTMuaW4+PgogICAgICAgICAgIyAgIG15ICRtc2cgPSBuZXcgRmF4OjpTZW5kCiAgICAgICAgICAjICAgICAtcmVjaXBpZW50cyA9PiAkdG8sCiAgICAgICAgICAjICAgICAtZGF0YSA9PiAkZGF0YTsKICAgICAgICAgICMgVGhpcyBpcyB0aGUgc2FmZXN0IHRoaW5nIHRvIGRvLiBJZiB3ZSBoYWQgdGhlIHRva2VuIHRvIHRoZSByaWdodCBvZgogICAgICAgICAgIyB0aGUgbWludXMgd2UgY291bGQgZG8gYSBiZXR0ZXIgY2hlY2suCiAgICAgICAgICAjCiAgICAgICAgICAjIEFuZCBkbyBub3QgY29tYmluZSBhIGJhcmV3b3JkIGFuZCBhIHF1b3RlLCBsaWtlIHRoaXM6CiAgICAgICAgICAjICAgIG9vcHMgIllvdXIgbG9naW4sICRCYWRfTG9naW4sIGlzIG5vdCB2YWxpZCI7CiAgICAgICAgICAjIEl0IGNhbiBjYXVzZSBhIHN5bnRheCBlcnJvciBpZiBvb3BzIGlzIGEgc3ViCiAgICAgICAgICB8fCAkdHlwZWwgZXEgJ3cnICYmICggJHRva2VuciBlcSAnLScgfHwgJHR5cGVyIGVxICdRJyApCgogICAgICAgICAgIyBwZXJsIGlzIHZlcnkgZnVzc3kgYWJvdXQgc3BhY2VzIGJlZm9yZSA8PDsgYzQxOSBwYXJ0IDEKICAgICAgICAgIHx8ICR0b2tlbnJfbGVhZGluZ19jaDIgZXEgJzw8JyAmJiAkdHlwZWwgbmUgJ3snICYmICR0eXBlbCBuZSAnLCcKCiAgICAgICAgICAjIGF2b2lkIGNvbWJpbmluZyB0b2tlbnMgdG8gY3JlYXRlIG5ldyBtZWFuaW5ncy4gRXhhbXBsZToKICAgICAgICAgICMgICAgICRhKyArJGIgbXVzdCBub3QgYmVjb21lICRhKyskYgogICAgICAgICAgfHwgKCAkaXNfZGlncmFwaHskdG9rZW5fam9pbmVkfSApCiAgICAgICAgICB8fCAkaXNfdHJpZ3JhcGh7JHRva2VuX2pvaW5lZH0KCiAgICAgICAgICAjIGFub3RoZXIgZXhhbXBsZTogZG8gbm90IGNvbWJpbmUgdGhlc2UgdHdvICYnczoKICAgICAgICAgICMgICAgIGFsbG93X29wdGlvbnMgJiAmT1BUX0VYRUNDR0kKICAgICAgICAgIHx8ICRpc19kaWdyYXBoeyAkdG9rZW5sIC4gJHRva2Vucl9sZWFkaW5nX2NoIH0KCiAgICAgICAgICAjIHJldGFpbiBhbnkgc3BhY2UgYWZ0ZXIgcG9zc2libGUgZmlsZWhhbmRsZQogICAgICAgICAgIyAodGVzdGZpbGVzIHBybnRlcnIxLnQgd2l0aCAtLWV4dHJ1ZGUgYW5kIG1hbmdsZS50IHdpdGggLS1tYW5nbGUpCiAgICAgICAgICAjIGJ1dCBubyBzcGFjZSBmb3IgJyQgeycgZXZlbiBpZiAnJCcgaXMgbWFya2VkIGFzIHR5cGUgJ1onLCBpc3N1ZSBjMjIxCiAgICAgICAgICB8fCAoICR0eXBlbCBlcSAnWicgJiYgISggJHRva2VubCBlcSAnJCcgJiYgJHRva2VuciBlcSAneycgKSApCgogICAgICAgICAgIyBBZGRlZCAnWScgaGVyZSAxNiBKYW4gMjAyMSB0byBwcmV2ZW50IC1tYW5nbGUgb3B0aW9uIGZyb20gcmVtb3ZpbmcKICAgICAgICAgICMgc3BhY2UgYWZ0ZXIgdHlwZSBZLiBPdGhlcndpc2UsIGl0IHdpbGwgZ2V0IHBhcnNlZCBhcyB0eXBlICdaJyBsYXRlcgogICAgICAgICAgIyBhbmQgYW55IHNwYWNlIHdvdWxkIGhhdmUgdG8gYmUgYWRkZWQgYmFjayBtYW51YWxseSBpZiBkZXNpcmVkLgogICAgICAgICAgfHwgJHR5cGVsIGVxICdZJwoKICAgICAgICAgICMgUGVybCBpcyBzZW5zaXRpdmUgdG8gd2hpdGVzcGFjZSBhZnRlciB0aGUgKyBoZXJlOgogICAgICAgICAgIyAgJGIgPSB4dmFscyAkYSArIDAuMSAqIHl2YWxzICRhOwogICAgICAgICAgfHwgJHR5cGVsbCBlcSAnWicgJiYgJHR5cGVsID1+IC9eW1wvXD9cK1wtXCpdJC8KCiAgICAgICAgICB8fCAoCiAgICAgICAgICAgICR0b2tlbnJfaXNfb3Blbl9wYXJlbiAmJiAoCgogICAgICAgICAgICAgICAgIyBrZWVwIHBhcmVuIHNlcGFyYXRlIGluICd1c2UgRm9vOjpCYXIgKCknCiAgICAgICAgICAgICAgICAoICR0eXBlbCBlcSAndycgJiYgJHR5cGVsbCBlcSAnaycgJiYgJHRva2VubGwgZXEgJ3VzZScgKQoKICAgICAgICAgICAgICAgICMgT0xEOiBrZWVwIGFueSBzcGFjZSBiZXR3ZWVuIGZpbGVoYW5kbGUgYW5kIHBhcmVuOgogICAgICAgICAgICAgICAgIyBmaWxlIG1hbmdsZS50IHdpdGggLS1tYW5nbGU6CiAgICAgICAgICAgICAgICAjIE5FVzogdGhpcyB0ZXN0IGlzIG5vIGxvbmdlciBuZWNlc3NhcnkgaGVyZSAobW92ZWQgYWJvdmUpCiAgICAgICAgICAgICAgICAjIyB8fCAkdHlwZWwgZXEgJ1knCgogICAgICAgICAgICAgICAgIyBtdXN0IGhhdmUgc3BhY2UgYmV0d2VlbiBncmVwIGFuZCBsZWZ0IHBhcmVuOyAiZ3JlcCgiIHdpbGwgZmFpbAogICAgICAgICAgICAgICAgfHwgJGlzX3NvcnRfZ3JlcF9tYXB7JHRva2VubH0KCiAgICAgICAgICAgICAgICAjIGRvbid0IHN0aWNrIG51bWJlcnMgbmV4dCB0byBsZWZ0IHBhcmVucywgYXMgaW46CiAgICAgICAgICAgICAgICAjdXNlIE1haWw6OkludGVybmV0IDEuMjggKCk7IChzZWUgRW50aXR5LnBtLCBIZWFkLnBtLCBUZXN0LnBtKQogICAgICAgICAgICAgICAgfHwgJHR5cGVsIGVxICduJwogICAgICAgICAgICApCiAgICAgICAgICApICAgICMjIGVuZCAkdG9rZW5yX2lzX29wZW5fcGFyZW4KCiAgICAgICAgICAjIHJldGFpbiBhbnkgc3BhY2UgYWZ0ZXIgaGVyZSBkb2Mgb3BlcmF0b3IgKCBzZWUgaGVyZWVyci50KQogICAgICAgICAgIyBjNDE5LCBwYXJ0IDJhOiB1bmxlc3MgZm9sbG93ZWQgYnkgJ30nIG9yICcsJy4gU2VlIGFsc28gcGFydCAyYi4KICAgICAgICAgICMgb3IgOyAoZ2l0MTc0KQogICAgICAgICAgfHwgJHR5cGVsIGVxICdoJyAmJiAkdHlwZXIgbmUgJ30nICYmICR0eXBlciBuZSAnLCcgJiYgJHR5cGVyIG5lICc7JwoKICAgICAgICAgICMgQmUgY2FyZWZ1bCB3aXRoIGEgc3BhY2UgYXJvdW5kICsrIGFuZCAtLSwgdG8gYXZvaWQgYW1iaWd1aXR5IGFzIHRvCiAgICAgICAgICAjIHdoaWNoIHRva2VuIGl0IGFwcGxpZXMKICAgICAgICAgIHx8ICggJHR5cGVyIGVxICdwcCcgfHwgJHR5cGVyIGVxICdtbScgKSAmJiAkdG9rZW5sICF+IC9eW1w7XHtcKFxbXS8KICAgICAgICAgIHx8ICggJHR5cGVsIGVxICcrKycgfHwgJHR5cGVsIGVxICctLScgKQogICAgICAgICAgJiYgJHRva2VuciAhfiAvXltcO1x9XClcXV0vCgogICAgICAgICAgIyBOZWVkIHNwYWNlIGFmdGVyICdmb3IgbXknIG9yICdmb3JlYWNoIG15JzsKICAgICAgICAgICMgZm9yIGV4YW1wbGUsIHRoaXMgd2lsbCBmYWlsIGluIG9sZGVyIHZlcnNpb25zIG9mIFBlcmw6CiAgICAgICAgICAjIGZvcmVhY2ggbXkkZnQoQGZpbGV0eXBlcykuLi4KICAgICAgICAgIHx8ICggJHRva2VubCBlcSAnbXknCiAgICAgICAgICAgICYmICR0b2tlbnJfbGVhZGluZ19jaCBlcSAnJCcKICAgICAgICAgICAgJiYgJGlzX2Zvcl9mb3JlYWNoeyR0b2tlbmxsfSApCgogICAgICAgICAgIyBLZWVwIHNwYWNlIGFmdGVyICReIGlmIG5lZWRlZCB0byBhdm9pZCBmb3JtaW5nIGEgZGlmZmVyZW50CiAgICAgICAgICAjIHNwZWNpYWwgdmFyaWFibGUgKGlzc3VlIGMwNjgpLiBGb3IgZXhhbXBsZToKICAgICAgICAgICMgICAgICAgbXkgJGFhID0gJF4gPyAibm9uZSIgOiAib2siOwogICAgICAgICAgIyBUaGUgcHJvYmxlbSBpcyB0aGF0ICckXj8nIGlzIGEgdmFsaWQgc3BlY2lhbCB2YXJpYWJsZQogICAgICAgICAgfHwgKCAkdHlwZWwgZXEgJ2knCiAgICAgICAgICAgICYmIGxlbmd0aCgkdG9rZW5sKSA9PSAyCiAgICAgICAgICAgICYmIHN1YnN0ciggJHRva2VubCwgMSwgMSApIGVxICdeJwogICAgICAgICAgICAmJiAkaXNfc3BlY2lhbF92YXJpYWJsZV9jaGFyeyR0b2tlbnJfbGVhZGluZ19jaH0gKQoKICAgICAgICAgICMgV2UgbXVzdCBiZSBzdXJlIHRoYXQgYSBzcGFjZSBiZXR3ZWVuIGEgPyBhbmQgYSBxdW90ZWQgc3RyaW5nCiAgICAgICAgICAjIHJlbWFpbnMgaWYgdGhlIHNwYWNlIGJlZm9yZSB0aGUgPyByZW1haW5zLiAgW0xvY2EucG0sIGxvY2thcmVhXQogICAgICAgICAgIyBpZSwKICAgICAgICAgICMgICAgJGI9am9pbiAkY29tbWEgPyAnLCcgOiAnOicsIEBfOyAgIyBvawogICAgICAgICAgIyAgICAkYj1qb2luICRjb21tYT8nLCcgOiAnOicsIEBfOyAgICAjIG9rIQogICAgICAgICAgIyAgICAkYj1qb2luICRjb21tYSA/JywnIDogJzonLCBAXzsgICAjIGVycm9yIQogICAgICAgICAgIyBOb3QgcmVhbGx5IHJlcXVpcmVkOgogICAgICAgICAgIyMgfHwgKCAoICR0eXBlbCBlcSAnPycgKSAmJiAoICR0eXBlciBlcSAnUScgKSApCgogICAgICAgICAgIyBTcGFjZSBzdGFja2VkIGxhYmVscy4uLgogICAgICAgICAgIyBOb3QgcmVhbGx5IHJlcXVpcmVkOiBQZXJsIHNlZW1zIHRvIGFjY2VwdCBub24tc3BhY2VkIGxhYmVscy4KICAgICAgICAgICMjIHx8ICR0eXBlbCBlcSAnSicgJiYgJHR5cGVyIGVxICdKJwoKICAgICAgICAgIDsgICAgIyB0aGUgdmFsdWUgb2YgdGhpcyBsb25nIGxvZ2ljIHNlcXVlbmNlIGlzIHRoZSByZXN1bHQgd2Ugd2FudAogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfSAjIyBlbmQgc3ViIGlzX2Vzc2VudGlhbF93aGl0ZXNwYWNlCn0gIyMgZW5kIGNsb3N1cmUgaXNfZXNzZW50aWFsX3doaXRlc3BhY2UKCnsgICAgIyMgYmVnaW4gY2xvc3VyZSBuZXdfc2VjcmV0X29wZXJhdG9yX3doaXRlc3BhY2UKCiAgICBteSAlc2VjcmV0X29wZXJhdG9yczsKICAgIG15ICVpc19sZWFkaW5nX3NlY3JldF90b2tlbjsKCiAgICBCRUdJTiB7CgogICAgICAgICMgdG9rZW4gbGlzdHMgZm9yIHBlcmwgc2VjcmV0IG9wZXJhdG9ycyBhcyBjb21waWxlZCBieSBQaGlsaXBwZSBCcnVoYXQKICAgICAgICAjIGF0OiBodHRwczovL21ldGFjcGFuLm9yZy9tb2R1bGUvcGVybHNlY3JldAogICAgICAgICVzZWNyZXRfb3BlcmF0b3JzID0gKAogICAgICAgICAgICAnR29hdHNlJyAgICAgICAgICAgID0+IFtxdyM9ICggKSA9I10sICAgICAgICAjPSggKT0KICAgICAgICAgICAgJ1ZlbnVzMScgICAgICAgICAgICA9PiBbcXcjMCArI10sICAgICAgICAgICAgIyAwKwogICAgICAgICAgICAnVmVudXMyJyAgICAgICAgICAgID0+IFtxdyMrIDAjXSwgICAgICAgICAgICAjICswCiAgICAgICAgICAgICdFbnRlcnByaXNlJyAgICAgICAgPT4gW3F3IykgeCAhICEjXSwgICAgICAgICMgKCl4ISEKICAgICAgICAgICAgJ0tpdGUxJyAgICAgICAgICAgICA9PiBbcXcjfiB+IDw+I10sICAgICAgICAgIyB+fjw+CiAgICAgICAgICAgICdLaXRlMicgICAgICAgICAgICAgPT4gW3F3I35+IDw+I10sICAgICAgICAgICMgfn48PgogICAgICAgICAgICAnV2lua2luZyBGYXQgQ29tbWEnID0+IFsgKCAnLCcsICc9PicgKSBdLCAgICAjICw9PgogICAgICAgICAgICAnQmFuZyBiYW5nJyAgICAgICAgID0+IFtxdyMhICEjXSwgICAgICAgICAgICAjICEhCiAgICAgICAgKTsKCiAgICAgICAgIyBUaGUgZm9sbG93aW5nIG9wZXJhdG9ycyBhbmQgY29uc3RhbnRzIGFyZSBub3QgaW5jbHVkZWQgYmVjYXVzZSB0aGV5CiAgICAgICAgIyBhcmUgbm9ybWFsbHkga2VwdCB0aWdodCBieSBwZXJsdGlkeToKICAgICAgICAjIH5+IDx+PgogICAgICAgICMKCiAgICAgICAgIyBNYWtlIGEgbG9va3VwIHRhYmxlIGluZGV4ZWQgYnkgdGhlIGZpcnN0IHRva2VuIG9mIGVhY2ggb3BlcmF0b3I6CiAgICAgICAgIyBmaXJzdCB0b2tlbiA9PiBbbGlzdCwgbGlzdCwgLi4uXQogICAgICAgIGZvcmVhY2ggbXkgJHZhbHVlICggdmFsdWVzKCVzZWNyZXRfb3BlcmF0b3JzKSApIHsKICAgICAgICAgICAgbXkgJHRvayA9ICR2YWx1ZS0+WzBdOwogICAgICAgICAgICBwdXNoIEB7ICRpc19sZWFkaW5nX3NlY3JldF90b2tlbnskdG9rfSB9LCAkdmFsdWU7CiAgICAgICAgfQogICAgfSAjIyBlbmQgQkVHSU4KCiAgICBzdWIgbmV3X3NlY3JldF9vcGVyYXRvcl93aGl0ZXNwYWNlIHsKCiAgICAgICAgbXkgKCAkc2VsZiwgJHJ3aGl0ZXNwYWNlX2ZsYWdzICkgPSBAXzsKCiAgICAgICAgIyBJbXBsZW1lbnQgLS10aWdodC1zZWNyZXQtb3BlcmF0b3JzCiAgICAgICAgIyBHaXZlbjoKICAgICAgICAjICAgJHJ3aGl0ZXNwYWNlX2ZsYWdzID0gd2hpdGVzcGFzZSBmbGFncywgdG8gYmUgdXBkYXRlZAoKICAgICAgICAjIExvb3Agb3ZlciBhbGwgdG9rZW5zIGluIHRoaXMgbGluZQogICAgICAgIG15ICRyTEwgID0gJHNlbGYtPltfckxMX107CiAgICAgICAgbXkgJGptYXggPSBAeyRyTEx9IC0gMTsKICAgICAgICBmb3JlYWNoIG15ICRqICggMCAuLiAkam1heCApIHsKCiAgICAgICAgICAgICMgU2tpcCB1bmxlc3MgdGhpcyB0b2tlbiBtaWdodCBzdGFydCBhIHNlY3JldCBvcGVyYXRvcgogICAgICAgICAgICBteSAkdHlwZSA9ICRyTEwtPlskal0tPltfVFlQRV9dOwogICAgICAgICAgICBuZXh0IGlmICggJHR5cGUgZXEgJ2InICk7CgogICAgICAgICAgICBteSAkdG9rZW4gPSAkckxMLT5bJGpdLT5bX1RPS0VOX107CiAgICAgICAgICAgIG5leHQgdW5sZXNzICggJGlzX2xlYWRpbmdfc2VjcmV0X3Rva2VueyR0b2tlbn0gKTsKCiAgICAgICAgICAgICMgTG9vcCBvdmVyIGFsbCBzZWNyZXQgb3BlcmF0b3JzIHdpdGggdGhpcyBsZWFkaW5nIHRva2VuCiAgICAgICAgICAgIGZvcmVhY2ggbXkgJHJwYXR0ZXJuICggQHsgJGlzX2xlYWRpbmdfc2VjcmV0X3Rva2VueyR0b2tlbn0gfSApIHsKICAgICAgICAgICAgICAgIG15ICRqZW5kID0gJGogLSAxOwogICAgICAgICAgICAgICAgZm9yZWFjaCBteSAkdG9rICggQHskcnBhdHRlcm59ICkgewogICAgICAgICAgICAgICAgICAgICRqZW5kKys7CgogICAgICAgICAgICAgICAgICAgICRqZW5kKysKICAgICAgICAgICAgICAgICAgICAgIGlmICggJGplbmQgPD0gJGptYXgKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHJMTC0+WyRqZW5kXS0+W19UWVBFX10gZXEgJ2InICk7CgogICAgICAgICAgICAgICAgICAgIGlmICggICAkamVuZCA+ICRqbWF4CiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICR0b2sgbmUgJHJMTC0+WyRqZW5kXS0+W19UT0tFTl9dICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRqZW5kID0gdW5kZWY7CiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkamVuZCkgewoKICAgICAgICAgICAgICAgICAgICAjIHNldCBmbGFncyB0byBwcmV2ZW50IHNwYWNlcyB3aXRoaW4gdGhpcyBvcGVyYXRvcgogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggbXkgJGpqICggJGogKyAxIC4uICRqZW5kICkgewogICAgICAgICAgICAgICAgICAgICAgICAkcndoaXRlc3BhY2VfZmxhZ3MtPlskampdID0gV1NfTk87CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRqID0gJGplbmQ7CiAgICAgICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSAgICAjIyBFbmQgTG9vcCBvdmVyIGFsbCBvcGVyYXRvcnMKICAgICAgICB9ICAgICMjIEVuZCBsb29wIG92ZXIgYWxsIHRva2VucwogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBuZXdfc2VjcmV0X29wZXJhdG9yX3doaXRlc3BhY2UKfSAjIyBlbmQgY2xvc3VyZSBuZXdfc2VjcmV0X29wZXJhdG9yX3doaXRlc3BhY2UKCnsgICAgIyMgYmVnaW4gY2xvc3VyZSBzZXRfYm9uZF9zdHJlbmd0aHMKCiAgICAjIFRoZXNlIHJvdXRpbmVzIGFuZCB2YXJpYWJsZXMgYXJlIGludm9sdmVkIGluIGRlY2lkaW5nIHdoZXJlIHRvIGJyZWFrIHZlcnkKICAgICMgbG9uZyBsaW5lcy4KCiAgICAjIE5FV19UT0tFTlMgbXVzdCBhZGQgYm9uZCBzdHJlbmd0aCBydWxlcwoKICAgIG15ICVpc19nb29kX2tleXdvcmRfYnJlYWtwb2ludDsKICAgIG15ICVpc19jb250YWluZXJfdG9rZW47CgogICAgbXkgJWJpbmFyeV9ib25kX3N0cmVuZ3RoX25vc3BhY2U7CiAgICBteSAlYmluYXJ5X2JvbmRfc3RyZW5ndGg7CiAgICBteSAlbm9icmVha19saHM7CiAgICBteSAlbm9icmVha19yaHM7CgogICAgbXkgQGJpYXNfdG9rZW5zOwogICAgbXkgJWJpYXNfaGFzaDsKICAgIG15ICViaWFzOwogICAgbXkgJGRlbHRhX2JpYXM7CgogICAgc3ViIGluaXRpYWxpemVfYm9uZF9zdHJlbmd0aF9oYXNoZXMgewoKICAgICAgICBteSBAcTsKICAgICAgICBAcSA9IHF3KCBpZiB1bmxlc3Mgd2hpbGUgdW50aWwgZm9yIGZvcmVhY2ggKTsKICAgICAgICBAaXNfZ29vZF9rZXl3b3JkX2JyZWFrcG9pbnR7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICAgICAgQHEgPSBxdy8gKCBbIHsgfSBdICkgLzsKICAgICAgICBAaXNfY29udGFpbmVyX3Rva2Vue0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgICAgICMgVGhlIGRlY2lzaW9uIGFib3V0IHdoZXJlIHRvIGJyZWFrIGEgbGluZSBkZXBlbmRzIHVwb24gYSAiYm9uZAogICAgICAgICMgc3RyZW5ndGgiIGJldHdlZW4gdG9rZW5zLiAgVGhlIExPV0VSIHRoZSBib25kIHN0cmVuZ3RoLCB0aGUgTU9SRQogICAgICAgICMgbGlrZWx5IGEgYnJlYWsuICBBIGJvbmQgc3RyZW5ndGggbWF5IGJlIGFueSB2YWx1ZSBidXQgdG8gc2ltcGxpZnkKICAgICAgICAjIHRoaW5ncyB0aGVyZSBhcmUgc2V2ZXJhbCBwcmUtZGVmaW5lZCBzdHJlbmd0aCBsZXZlbHM6CgogICAgICAgICMgICAgTk9fQlJFQUsgICAgPT4gMTAwMDA7CiAgICAgICAgIyAgICBWRVJZX1NUUk9ORyA9PiAxMDA7CiAgICAgICAgIyAgICBTVFJPTkcgICAgICA9PiAyLjE7CiAgICAgICAgIyAgICBOT01JTkFMICAgICA9PiAxLjE7CiAgICAgICAgIyAgICBXRUFLICAgICAgICA9PiAwLjg7CiAgICAgICAgIyAgICBWRVJZX1dFQUsgICA9PiAwLjU1OwoKICAgICAgICAjIFRoZSBzdHJlbmd0aCB2YWx1ZXMgYXJlIGJhc2VkIG9uIHRyaWFsLWFuZC1lcnJvciwgYW5kIG5lZWQgdG8gYmUKICAgICAgICAjIHR3ZWFrZWQgb2NjYXNpb25hbGx5IHRvIGdldCBkZXNpcmVkIHJlc3VsdHMuICBTb21lIGNvbW1lbnRzOgogICAgICAgICMKICAgICAgICAjICAgMS4gT25seSByZWxhdGl2ZSBzdHJlbmd0aHMgYXJlIGltcG9ydGFudC4gIHNtYWxsIGRpZmZlcmVuY2VzCiAgICAgICAgIyAgICAgIGluIHN0cmVuZ3RocyBjYW4gbWFrZSBiaWcgZm9ybWF0dGluZyBkaWZmZXJlbmNlcy4KICAgICAgICAjICAgMi4gRWFjaCBpbmRlbnRhdGlvbiBsZXZlbCBhZGRzIG9uZSB1bml0IG9mIGJvbmQgc3RyZW5ndGguCiAgICAgICAgIyAgIDMuIEEgdmFsdWUgb2YgTk9fQlJFQUsgbWFrZXMgYW4gdW5icmVha2FibGUgYm9uZAogICAgICAgICMgICA0LiBBIHZhbHVlIG9mIFZFUllfV0VBSyBpcyB0aGUgc3RyZW5ndGggb2YgYSAnLCcKICAgICAgICAjICAgNS4gVmFsdWVzIGJlbG93IE5PTUlOQUwgYXJlIGNvbnNpZGVyZWQgb2sgYnJlYWsgcG9pbnRzLgogICAgICAgICMgICA2LiBWYWx1ZXMgYWJvdmUgTk9NSU5BTCBhcmUgY29uc2lkZXJlZCBwb29yIGJyZWFrIHBvaW50cy4KICAgICAgICAjCiAgICAgICAgIyBUaGUgYm9uZCBzdHJlbmd0aHMgc2hvdWxkIHJvdWdobHkgZm9sbG93IHByZWNlZGVuY2Ugb3JkZXIgd2hlcmUKICAgICAgICAjIHBvc3NpYmxlLiAgSWYgeW91IG1ha2UgY2hhbmdlcywgcGxlYXNlIGNoZWNrIHRoZSByZXN1bHRzIHZlcnkKICAgICAgICAjIGNhcmVmdWxseSBvbiBhIHZhcmlldHkgb2Ygc2NyaXB0cy4gIFRlc3Rpbmcgd2l0aCB0aGUgLWV4dHJ1ZGUKICAgICAgICAjIG9wdGlvbnMgaXMgcGFydGljdWxhcmx5IGhlbHBmdWwgaW4gZXhlcmNpc2luZyBhbGwgb2YgdGhlIHJ1bGVzLgoKICAgICAgICAjIFdoZXJldmVyIHBvc3NpYmxlLCBib25kIHN0cmVuZ3RocyBhcmUgZGVmaW5lZCBpbiB0aGUgZm9sbG93aW5nCiAgICAgICAgIyB0YWJsZXMuICBUaGVyZSBhcmUgdHdvIG1haW4gc3RhZ2VzIHRvIHNldHRpbmcgYm9uZCBzdHJlbmd0aHMgYW5kCiAgICAgICAgIyB0d28gdHlwZXMgb2YgdGFibGVzOgogICAgICAgICMKICAgICAgICAjIFRoZSBmaXJzdCBzdGFnZSBpbnZvbHZlcyBsb29raW5nIGF0IGVhY2ggdG9rZW4gaW5kaXZpZHVhbGx5IGFuZAogICAgICAgICMgZGVmaW5pbmcgbGVmdCBhbmQgcmlnaHQgYm9uZCBzdHJlbmd0aHMsIGFjY29yZGluZyB0byBpZiB3ZSB3YW50CiAgICAgICAgIyB0byBicmVhayB0byB0aGUgbGVmdCBvciByaWdodCBzaWRlLCBhbmQgaG93IGdvb2QgYSBicmVhayBwb2ludCBpdAogICAgICAgICMgaXMuICBGb3IgZXhhbXBsZSB0b2tlbnMgbGlrZSA9LCB8fCwgJiYgbWFrZSBnb29kIGJyZWFrIHBvaW50cyBhbmQKICAgICAgICAjIHdpbGwgaGF2ZSBsb3cgc3RyZW5ndGhzLCBidXQgb25lIG1pZ2h0IHdhbnQgdG8gYnJlYWsgb24gZWl0aGVyCiAgICAgICAgIyBzaWRlIHRvIHB1dCB0aGVtIGF0IHRoZSBlbmQgb2Ygb25lIGxpbmUgb3IgYmVnaW5uaW5nIG9mIHRoZSBuZXh0LgogICAgICAgICMKICAgICAgICAjIFRoZSBzZWNvbmQgc3RhZ2UgaW52b2x2ZXMgbG9va2luZyBhdCBjZXJ0YWluIHBhaXJzIG9mIHRva2VucyBhbmQKICAgICAgICAjIGRlZmluaW5nIGEgYm9uZCBzdHJlbmd0aCBmb3IgdGhhdCBwYXJ0aWN1bGFyIHBhaXIuICBUaGlzIHNlY29uZAogICAgICAgICMgc3RhZ2UgaGFzIHByaW9yaXR5LgoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBCb25kIFN0cmVuZ3RoIEJFR0lOIFNlY3Rpb24gMS4KICAgICAgICAjIFNldCBsZWZ0IGFuZCByaWdodCBib25kIHN0cmVuZ3RocyBvZiBpbmRpdmlkdWFsIHRva2Vucy4KICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICMgTk9URTogTk9fQlJFQUsncyBzZXQgaW4gdGhpcyBzZWN0aW9uIGZpcnN0IGFyZSBISU5UUyB3aGljaCB3aWxsCiAgICAgICAgIyBwcm9iYWJseSBub3QgYmUgaG9ub3JlZC4gRXNzZW50aWFsIE5PX0JSRUFLUydzIHNob3VsZCBiZSBzZXQgaW4KICAgICAgICAjIEJFR0lOIFNlY3Rpb24gMiBvciBoYXJkd2lyZWQgaW4gdGhlIE5PX0JSRUFLIGNvZGluZyBuZWFyIHRoZSBlbmQKICAgICAgICAjIG9mIHRoaXMgc3Vicm91dGluZS4KCiAgICAgICAgIyBOb3RlIHRoYXQgd2UgYXJlIHNldHRpbmcgZGVmYXVsdHMgaW4gdGhpcyBzZWN0aW9uLiAgVGhlIHVzZXIKICAgICAgICAjIGNhbm5vdCBjaGFuZ2UgYm9uZCBzdHJlbmd0aHMgYnV0IGNhbiBjYXVzZSB0aGUgbGVmdCBhbmQgcmlnaHQKICAgICAgICAjIGJvbmQgc3RyZW5ndGhzIG9mIGFueSB0b2tlbiB0eXBlIHRvIGJlIHN3YXBwZWQgdGhyb3VnaCB0aGUgdXNlIG9mCiAgICAgICAgIyB0aGUgLXdiYSBhbmQgLXdiYiBmbGFncy4gSW4gdGhpcyB3YXkgdGhlIHVzZXIgY2FuIGRldGVybWluZSBpZiBhCiAgICAgICAgIyBicmVha3BvaW50IHRva2VuIHNob3VsZCBhcHBlYXIgYXQgdGhlIGVuZCBvZiBvbmUgbGluZSBvciB0aGUKICAgICAgICAjIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBsaW5lLgoKICAgICAgICAlcmlnaHRfYm9uZF9zdHJlbmd0aCAgICAgICAgICA9ICgpOwogICAgICAgICVsZWZ0X2JvbmRfc3RyZW5ndGggICAgICAgICAgID0gKCk7CiAgICAgICAgJWJpbmFyeV9ib25kX3N0cmVuZ3RoX25vc3BhY2UgPSAoKTsKICAgICAgICAlYmluYXJ5X2JvbmRfc3RyZW5ndGggICAgICAgICA9ICgpOwogICAgICAgICVub2JyZWFrX2xocyAgICAgICAgICAgICAgICAgID0gKCk7CiAgICAgICAgJW5vYnJlYWtfcmhzICAgICAgICAgICAgICAgICAgPSAoKTsKCiAgICAgICAgIyBUaGUgaGFzaCBrZXlzIGluIHRoaXMgc2VjdGlvbiBhcmUgdG9rZW4gdHlwZXMsIHBsdXMgdGhlIHRleHQgb2YKICAgICAgICAjIGNlcnRhaW4ga2V5d29yZHMgbGlrZSAnb3InLCAnYW5kJy4KCiAgICAgICAgIyBubyBicmVhayBhcm91bmQgcG9zc2libGUgZmlsZWhhbmRsZQogICAgICAgICRsZWZ0X2JvbmRfc3RyZW5ndGh7J1onfSAgPSBOT19CUkVBSzsKICAgICAgICAkcmlnaHRfYm9uZF9zdHJlbmd0aHsnWid9ID0gTk9fQlJFQUs7CgogICAgICAgICMgbmV2ZXIgcHV0IGEgYmFyZSB3b3JkIG9uIGEgbmV3IGxpbmU6CiAgICAgICAgIyBleGFtcGxlIHByaW50IChTVERFUlIsICJibGEiKTsgd2lsbCBmYWlsIHdpdGggYnJlYWsgYWZ0ZXIgKAogICAgICAgICRsZWZ0X2JvbmRfc3RyZW5ndGh7J3cnfSA9IE5PX0JSRUFLOwoKICAgICAgICAjIGJsYW5rcyBhbHdheXMgaGF2ZSBpbmZpbml0ZSBzdHJlbmd0aCB0byBmb3JjZSBicmVha3MgYWZ0ZXIKICAgICAgICAjIHJlYWwgdG9rZW5zCiAgICAgICAgJHJpZ2h0X2JvbmRfc3RyZW5ndGh7J2InfSA9IE5PX0JSRUFLOwoKICAgICAgICAjIHRyeSBub3QgdG8gYnJlYWsgb24gZXhwb25lbnRpYXRpb24KICAgICAgICBAcSAgICAgICAgICAgICAgICAgICAgICAgPSBxdyMgKiogLi4gLi4uIDw9PiAjOwogICAgICAgIEBsZWZ0X2JvbmRfc3RyZW5ndGh7QHF9ICA9IChTVFJPTkcpIHggc2NhbGFyKEBxKTsKICAgICAgICBAcmlnaHRfYm9uZF9zdHJlbmd0aHtAcX0gPSAoU1RST05HKSB4IHNjYWxhcihAcSk7CgogICAgICAgICMgVGhlIGNvbW1hLWFycm93IGhhcyB2ZXJ5IGxvdyBwcmVjZWRlbmNlIGJ1dCBub3QgYSBnb29kIGJyZWFrIHBvaW50CiAgICAgICAgJGxlZnRfYm9uZF9zdHJlbmd0aHsnPT4nfSAgPSBOT19CUkVBSzsKICAgICAgICAkcmlnaHRfYm9uZF9zdHJlbmd0aHsnPT4nfSA9IE5PTUlOQUw7CgogICAgICAgICMgb2sgdG8gYnJlYWsgYWZ0ZXIgbGFiZWwKICAgICAgICAkbGVmdF9ib25kX3N0cmVuZ3RoeydKJ30gID0gTk9fQlJFQUs7CiAgICAgICAgJHJpZ2h0X2JvbmRfc3RyZW5ndGh7J0onfSA9IE5PTUlOQUw7CiAgICAgICAgJGxlZnRfYm9uZF9zdHJlbmd0aHsnaid9ICA9IFNUUk9ORzsKICAgICAgICAkcmlnaHRfYm9uZF9zdHJlbmd0aHsnaid9ID0gU1RST05HOwogICAgICAgICRsZWZ0X2JvbmRfc3RyZW5ndGh7J0EnfSAgPSBTVFJPTkc7CiAgICAgICAgJHJpZ2h0X2JvbmRfc3RyZW5ndGh7J0EnfSA9IFNUUk9ORzsKCiAgICAgICAgJGxlZnRfYm9uZF9zdHJlbmd0aHsnLT4nfSAgPSBTVFJPTkc7CiAgICAgICAgJHJpZ2h0X2JvbmRfc3RyZW5ndGh7Jy0+J30gPSBWRVJZX1NUUk9ORzsKCiAgICAgICAgJGxlZnRfYm9uZF9zdHJlbmd0aHsnQ09SRTo6J30gID0gTk9NSU5BTDsKICAgICAgICAkcmlnaHRfYm9uZF9zdHJlbmd0aHsnQ09SRTo6J30gPSBOT19CUkVBSzsKCiAgICAgICAgIyBGaXggZm9yIGMyNTA6IGFkZGVkIHN0cmVuZ3RocyBmb3IgbmV3IHR5cGUgJ1AnCiAgICAgICAgIyBOb3RlOiB0aGVzZSBhcmUgd29ya2luZyBva2F5LCBidXQgbWF5IGV2ZW50dWFsbHkgbmVlZCB0byBiZQogICAgICAgICMgYWRqdXN0ZWQgb3IgZXZlbiByZW1vdmVkLgogICAgICAgICRsZWZ0X2JvbmRfc3RyZW5ndGh7J1AnfSAgPSBOT01JTkFMOwogICAgICAgICRyaWdodF9ib25kX3N0cmVuZ3RoeydQJ30gPSBOT01JTkFMOwoKICAgICAgICAjIGJyZWFraW5nIEFGVEVSIG1vZHVsdXMgb3BlcmF0b3IgaXMgb2s6CiAgICAgICAgQHEgPSBxdzwgJSA+OwogICAgICAgIEBsZWZ0X2JvbmRfc3RyZW5ndGh7QHF9ID0gKFNUUk9ORykgeCBzY2FsYXIoQHEpOwogICAgICAgIEByaWdodF9ib25kX3N0cmVuZ3Roe0BxfSA9CiAgICAgICAgICAoIDAuMSAqIE5PTUlOQUwgKyAwLjkgKiBTVFJPTkcgKSB4IHNjYWxhcihAcSk7CgogICAgICAgICMgQnJlYWsgQUZURVIgbWF0aCBvcGVyYXRvcnMgKiBhbmQgLwogICAgICAgIEBxICAgICAgICAgICAgICAgICAgICAgICA9IHF3PCAqIC8geCAgPjsKICAgICAgICBAbGVmdF9ib25kX3N0cmVuZ3Roe0BxfSAgPSAoU1RST05HKSB4IHNjYWxhcihAcSk7CiAgICAgICAgQHJpZ2h0X2JvbmRfc3RyZW5ndGh7QHF9ID0gKE5PTUlOQUwpIHggc2NhbGFyKEBxKTsKCiAgICAgICAgIyBCcmVhayBBRlRFUiB3ZWFrZXN0IG1hdGggb3BlcmF0b3JzICsgYW5kIC0KICAgICAgICAjIE1ha2UgdGhlbSB3ZWFrZXIgdGhhbiAqIGJ1dCBhIGJpdCBzdHJvbmdlciB0aGFuICcuJwogICAgICAgIEBxID0gcXc8ICsgLSA+OwogICAgICAgIEBsZWZ0X2JvbmRfc3RyZW5ndGh7QHF9ID0gKFNUUk9ORykgeCBzY2FsYXIoQHEpOwogICAgICAgIEByaWdodF9ib25kX3N0cmVuZ3Roe0BxfSA9CiAgICAgICAgICAoIDAuOTEgKiBOT01JTkFMICsgMC4wOSAqIFdFQUsgKSB4IHNjYWxhcihAcSk7CgogICAgICAgICMgRGVmaW5lIGxlZnQgc3RyZW5ndGggb2YgdW5hcnkgcGx1cyBhbmQgbWludXMgKGZpeGVzIGNhc2UgYjUxMSkKICAgICAgICAkbGVmdF9ib25kX3N0cmVuZ3Roe3B9ID0gJGxlZnRfYm9uZF9zdHJlbmd0aHsnKyd9OwogICAgICAgICRsZWZ0X2JvbmRfc3RyZW5ndGh7bX0gPSAkbGVmdF9ib25kX3N0cmVuZ3RoeyctJ307CgogICAgICAgICMgQW5kIG1ha2UgcmlnaHQgc3RyZW5ndGggb2YgdW5hcnkgcGx1cyBhbmQgbWludXMgdmVyeSBoaWdoLgogICAgICAgICMgRml4ZXMgY2FzZXMgYjY3MCBiNzkwCiAgICAgICAgJHJpZ2h0X2JvbmRfc3RyZW5ndGh7cH0gPSBOT19CUkVBSzsKICAgICAgICAkcmlnaHRfYm9uZF9zdHJlbmd0aHttfSA9IE5PX0JSRUFLOwoKICAgICAgICAjIGJyZWFraW5nIEJFRk9SRSB0aGVzZSBpcyBqdXN0IG9rOgogICAgICAgIEBxICAgICAgICAgICAgICAgICAgICAgICA9IHF3IyA+PiA8PCAjOwogICAgICAgIEByaWdodF9ib25kX3N0cmVuZ3Roe0BxfSA9IChTVFJPTkcpIHggc2NhbGFyKEBxKTsKICAgICAgICBAbGVmdF9ib25kX3N0cmVuZ3Roe0BxfSAgPSAoTk9NSU5BTCkgeCBzY2FsYXIoQHEpOwoKICAgICAgICAjIGJyZWFraW5nIGJlZm9yZSB0aGUgc3RyaW5nIGNvbmNhdGVuYXRpb24gb3BlcmF0b3Igc2VlbXMgYmVzdAogICAgICAgICMgYmVjYXVzZSBpdCBjYW4gYmUgaGFyZCB0byBzZWUgYXQgdGhlIGVuZCBvZiBhIGxpbmUKICAgICAgICAkcmlnaHRfYm9uZF9zdHJlbmd0aHsnLid9ID0gU1RST05HOwogICAgICAgICRsZWZ0X2JvbmRfc3RyZW5ndGh7Jy4nfSAgPSAwLjkgKiBOT01JTkFMICsgMC4xICogV0VBSzsKCiAgICAgICAgQHEgICAgICAgICAgICAgICAgICAgICAgID0gcXc8IH0gXSApIFIgPjsKICAgICAgICBAbGVmdF9ib25kX3N0cmVuZ3Roe0BxfSAgPSAoU1RST05HKSB4IHNjYWxhcihAcSk7CiAgICAgICAgQHJpZ2h0X2JvbmRfc3RyZW5ndGh7QHF9ID0gKE5PTUlOQUwpIHggc2NhbGFyKEBxKTsKCiAgICAgICAgIyBtYWtlIHRoZXNlIGEgbGl0dGxlIHdlYWtlciB0aGFuIG5vbWluYWwgc28gdGhhdCB0aGV5IGdldAogICAgICAgICMgZmF2b3JlZCBmb3IgZW5kLW9mLWxpbmUgY2hhcmFjdGVycwogICAgICAgIEBxID0gcXc8ICE9ID09ID1+ICF+IH5+ICF+fiA+OwogICAgICAgIEBsZWZ0X2JvbmRfc3RyZW5ndGh7QHF9ID0gKFNUUk9ORykgeCBzY2FsYXIoQHEpOwogICAgICAgIEByaWdodF9ib25kX3N0cmVuZ3Roe0BxfSA9CiAgICAgICAgICAoIDAuOSAqIE5PTUlOQUwgKyAwLjEgKiBXRUFLICkgeCBzY2FsYXIoQHEpOwoKICAgICAgICAjIGJyZWFrIEFGVEVSIHRoZXNlCiAgICAgICAgQHEgPSBxdyMgPCA+ICB8ICYgPj0gPD0gIzsKICAgICAgICBAbGVmdF9ib25kX3N0cmVuZ3Roe0BxfSA9IChWRVJZX1NUUk9ORykgeCBzY2FsYXIoQHEpOwogICAgICAgIEByaWdodF9ib25kX3N0cmVuZ3Roe0BxfSA9CiAgICAgICAgICAoIDAuOCAqIE5PTUlOQUwgKyAwLjIgKiBXRUFLICkgeCBzY2FsYXIoQHEpOwoKICAgICAgICAjIGJyZWFraW5nIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgYSBxdW90ZSBpcyBvawogICAgICAgICMgYnV0IGJpYXMgZm9yIGJyZWFraW5nIGJlZm9yZSBhIHF1b3RlCiAgICAgICAgJGxlZnRfYm9uZF9zdHJlbmd0aHsnUSd9ICA9IE5PTUlOQUw7CiAgICAgICAgJHJpZ2h0X2JvbmRfc3RyZW5ndGh7J1EnfSA9IE5PTUlOQUwgKyAwLjAyOwogICAgICAgICRsZWZ0X2JvbmRfc3RyZW5ndGh7J3EnfSAgPSBOT01JTkFMOwogICAgICAgICRyaWdodF9ib25kX3N0cmVuZ3RoeydxJ30gPSBOT01JTkFMOwoKICAgICAgICAjIHN0YXJ0aW5nIGEgbGluZSB3aXRoIGEga2V5d29yZCBpcyB1c3VhbGx5IG9rCiAgICAgICAgJGxlZnRfYm9uZF9zdHJlbmd0aHsnayd9ID0gTk9NSU5BTDsKCiAgICAgICAgIyB3ZSB1c3VhbGx5IHdhbnQgdG8gYm9uZCBhIGtleXdvcmQgc3Ryb25nbHkgdG8gd2hhdCBpbW1lZGlhdGVseQogICAgICAgICMgZm9sbG93cywgcmF0aGVyIHRoYW4gbGVhdmluZyBpdCBzdHJhbmRlZCBhdCB0aGUgZW5kIG9mIGEgbGluZQogICAgICAgICRyaWdodF9ib25kX3N0cmVuZ3RoeydrJ30gPSBTVFJPTkc7CgogICAgICAgICRsZWZ0X2JvbmRfc3RyZW5ndGh7J0cnfSAgPSBOT01JTkFMOwogICAgICAgICRyaWdodF9ib25kX3N0cmVuZ3RoeydHJ30gPSBTVFJPTkc7CgogICAgICAgICMgYXNzaWdubWVudCBvcGVyYXRvcnMKICAgICAgICBAcSA9IHF3KCA9ICoqPSArPSAqPSAmPSA8PD0gJiY9IC09IC89IHw9ID4+PSB8fD0gLy89IC49ICU9IF49IHg9ICk7CgogICAgICAgICMgRGVmYXVsdCBpcyB0byBicmVhayBBRlRFUiB2YXJpb3VzIGFzc2lnbm1lbnQgb3BlcmF0b3JzCiAgICAgICAgQGxlZnRfYm9uZF9zdHJlbmd0aHtAcX0gPSAoU1RST05HKSB4IHNjYWxhcihAcSk7CiAgICAgICAgQHJpZ2h0X2JvbmRfc3RyZW5ndGh7QHF9ID0KICAgICAgICAgICggMC40ICogV0VBSyArIDAuNiAqIFZFUllfV0VBSyApIHggc2NhbGFyKEBxKTsKCiAgICAgICAgIyBEZWZhdWx0IGlzIHRvIGJyZWFrIEJFRk9SRSAnJiYnIGFuZCAnfHwnIGFuZCAnLy8nCiAgICAgICAgIyBzZXQgc3RyZW5ndGggb2YgJ3x8JyB0byBzYW1lIGFzICc9JyBzbyB0aGF0IGNoYWlucyBsaWtlCiAgICAgICAgIyAkYSA9ICRiIHx8ICRjIHx8ICRkICAgd2lsbCBicmVhayBiZWZvcmUgdGhlIGZpcnN0ICd8fCcKICAgICAgICAkcmlnaHRfYm9uZF9zdHJlbmd0aHsnfHwnfSA9IE5PTUlOQUw7CiAgICAgICAgJGxlZnRfYm9uZF9zdHJlbmd0aHsnfHwnfSAgPSAkcmlnaHRfYm9uZF9zdHJlbmd0aHsnPSd9OwoKICAgICAgICAjIHNhbWUgdGhpbmcgZm9yICcvLycKICAgICAgICAkcmlnaHRfYm9uZF9zdHJlbmd0aHsnLy8nfSA9IE5PTUlOQUw7CiAgICAgICAgJGxlZnRfYm9uZF9zdHJlbmd0aHsnLy8nfSAgPSAkcmlnaHRfYm9uZF9zdHJlbmd0aHsnPSd9OwoKICAgICAgICAjIHNldCBzdHJlbmd0aCBvZiAmJiBhIGxpdHRsZSBoaWdoZXIgdGhhbiB8fAogICAgICAgICRyaWdodF9ib25kX3N0cmVuZ3RoeycmJid9ID0gTk9NSU5BTDsKICAgICAgICAkbGVmdF9ib25kX3N0cmVuZ3RoeycmJid9ICA9ICRsZWZ0X2JvbmRfc3RyZW5ndGh7J3x8J30gKyAwLjE7CgogICAgICAgICMgc2V0IHN0cmVuZ3RoIG9mIF5eIGJldHdlZW4gJiYgYW5kIHx8LiBTZWUgZ2l0MTU3LgogICAgICAgICMgIjEgfHwgMCBeXiAwIHx8IDEiID0gdHJ1ZSwgc28gXl4gaXMgc3Ryb25nZXIgdGhhbiB8fAogICAgICAgICMgIjEgXl4gMSAmJiAwIiA9IHRydWUsICAgICAgc28gJiYgaXMgc3Ryb25nZXIgdGhhbiBeXgogICAgICAgICRyaWdodF9ib25kX3N0cmVuZ3RoeydeXid9ID0gTk9NSU5BTDsKICAgICAgICAkbGVmdF9ib25kX3N0cmVuZ3RoeydeXid9ICA9ICRsZWZ0X2JvbmRfc3RyZW5ndGh7J3x8J30gKyAwLjA1OwoKICAgICAgICAkbGVmdF9ib25kX3N0cmVuZ3Roeyc7J30gID0gVkVSWV9TVFJPTkc7CiAgICAgICAgJHJpZ2h0X2JvbmRfc3RyZW5ndGh7JzsnfSA9IFZFUllfV0VBSzsKICAgICAgICAkbGVmdF9ib25kX3N0cmVuZ3RoeydmJ30gID0gVkVSWV9TVFJPTkc7CgogICAgICAgICMgbWFrZSByaWdodCBzdHJlbmd0aCBvZiBmb3IgJzsnIGEgbGl0dGxlIGxlc3MgdGhhbiAnPScKICAgICAgICAjIHRvIG1ha2UgZm9yIGNvbnRlbnRzIGJyZWFrIGFmdGVyIHRoZSAnOycgdG8gYXZvaWQgdGhpczoKICAgICAgICAjICAgZm9yICggJGogPSAkbnVtYmVyX29mX2ZpZWxkcyAtIDEgOyAkaiA8ICRpdGVtX2NvdW50IDsgJGogKz0KICAgICAgICAjICAgICAkbnVtYmVyX29mX2ZpZWxkcyApCiAgICAgICAgIyBhbmQgbWFrZSBpdCB3ZWFrZXIgdGhhbiAnLCcgYW5kICdhbmQnIHRvbwogICAgICAgICRyaWdodF9ib25kX3N0cmVuZ3RoeydmJ30gPSBWRVJZX1dFQUsgLSAwLjAzOwoKICAgICAgICAjIFRoZSBzdHJlbmd0aHMgb2YgPy86IHNob3VsZCBiZSBzb21ld2hlcmUgYmV0d2VlbgogICAgICAgICMgYW4gJz0nIGFuZCBhIHF1b3RlIChOT01JTkFMKSwKICAgICAgICAjIG1ha2Ugc3RyZW5ndGggb2YgJzonIHNsaWdodGx5IGxlc3MgdGhhbiAnPycgdG8gaGVscAogICAgICAgICMgYnJlYWsgbG9uZyBjaGFpbnMgb2YgPyA6IGFmdGVyIHRoZSBjb2xvbnMKICAgICAgICAkbGVmdF9ib25kX3N0cmVuZ3Roeyc6J30gID0gMC40ICogV0VBSyArIDAuNiAqIE5PTUlOQUw7CiAgICAgICAgJHJpZ2h0X2JvbmRfc3RyZW5ndGh7JzonfSA9IE5PX0JSRUFLOwogICAgICAgICRsZWZ0X2JvbmRfc3RyZW5ndGh7Jz8nfSAgPSAkbGVmdF9ib25kX3N0cmVuZ3Roeyc6J30gKyAwLjAxOwogICAgICAgICRyaWdodF9ib25kX3N0cmVuZ3Roeyc/J30gPSBOT19CUkVBSzsKCiAgICAgICAgJGxlZnRfYm9uZF9zdHJlbmd0aHsnLCd9ICA9IFZFUllfU1RST05HOwogICAgICAgICRyaWdodF9ib25kX3N0cmVuZ3RoeycsJ30gPSBWRVJZX1dFQUs7CgogICAgICAgICMgcmVtYWluaW5nIGRpZ3JhcGhzIGFuZCB0cmlncmFwaHMgbm90IGRlZmluZWQgYWJvdmUKICAgICAgICBAcSAgICAgICAgICAgICAgICAgICAgICAgPSBxdyggOjogPD4gKysgLS0gKTsKICAgICAgICBAbGVmdF9ib25kX3N0cmVuZ3Roe0BxfSAgPSAoV0VBSykgeCBzY2FsYXIoQHEpOwogICAgICAgIEByaWdodF9ib25kX3N0cmVuZ3Roe0BxfSA9IChTVFJPTkcpIHggc2NhbGFyKEBxKTsKCiAgICAgICAgIyBTZXQgYm9uZCBzdHJlbmd0aHMgb2YgY2VydGFpbiBrZXl3b3JkcwogICAgICAgICMgbWFrZSAnb3InLCAnZXJyJywgJ2FuZCcgc2xpZ2h0bHkgd2Vha2VyIHRoYW4gYSAnLCcKICAgICAgICAkbGVmdF9ib25kX3N0cmVuZ3RoeydhbmQnfSA9IFZFUllfV0VBSyAtIDAuMDE7CiAgICAgICAgJGxlZnRfYm9uZF9zdHJlbmd0aHsnb3InfSAgPSBWRVJZX1dFQUsgLSAwLjAyOwogICAgICAgICRsZWZ0X2JvbmRfc3RyZW5ndGh7J2Vycid9ID0gVkVSWV9XRUFLIC0gMC4wMjsKICAgICAgICAkbGVmdF9ib25kX3N0cmVuZ3Roeyd4b3InfSA9IFZFUllfV0VBSyAtIDAuMDE7CgogICAgICAgIEBxID0gcXcoIG5lIGVxICk7CiAgICAgICAgQGxlZnRfYm9uZF9zdHJlbmd0aHtAcX0gPSAoTk9NSU5BTCkgeCBzY2FsYXIoQHEpOwoKICAgICAgICBAcSA9IHF3KCBsdCBndCBsZSBnZSApOwogICAgICAgIEBsZWZ0X2JvbmRfc3RyZW5ndGh7QHF9ID0gKCAwLjkgKiBOT01JTkFMICsgMC4xICogU1RST05HICkgeCBzY2FsYXIoQHEpOwoKICAgICAgICBAcSA9IHF3KCBhbmQgb3IgZXJyIHhvciBuZSBlcSApOwogICAgICAgIEByaWdodF9ib25kX3N0cmVuZ3Roe0BxfSA9IChOT01JTkFMKSB4IHNjYWxhcihAcSk7CgogICAgICAgICRyaWdodF9ib25kX3N0cmVuZ3Roeyd7J30gPSBXRUFLOwogICAgICAgICRsZWZ0X2JvbmRfc3RyZW5ndGh7J3snfSAgPSBWRVJZX1NUUk9ORzsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgQm9uZCBTdHJlbmd0aCBCRUdJTiBTZWN0aW9uIDIuCiAgICAgICAgIyBTZXQgYmluYXJ5IHJ1bGVzIGZvciBib25kIHN0cmVuZ3RocyBiZXR3ZWVuIGNlcnRhaW4gdG9rZW4gdHlwZXMuCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAjICBXZSBoYXZlIGEgbGl0dGxlIHByb2JsZW0gbWFraW5nIHRhYmxlcyB3aGljaCBhcHBseSB0byB0aGUKICAgICAgICAjICBjb250YWluZXIgdG9rZW5zLiAgSGVyZSBpcyBhIGxpc3Qgb2YgY29udGFpbmVyIHRva2VucyBhbmQKICAgICAgICAjICB0aGVpciB0eXBlczoKICAgICAgICAjCiAgICAgICAgIyAgIHR5cGUgICAgdG9rZW5zIC8vIG1lYW5pbmcKICAgICAgICAjICAgICAgeyAgICB7LCBbLCAoIC8vIGluZGVudAogICAgICAgICMgICAgICB9ICAgIH0sIF0sICkgLy8gb3V0ZGVudAogICAgICAgICMgICAgICBbICAgIFsgLy8gbGVmdCBub24tc3RydWN0dXJhbCBbIChlbmNsb3NpbmcgYW4gYXJyYXkgaW5kZXgpCiAgICAgICAgIyAgICAgIF0gICAgXSAvLyByaWdodCBub24tc3RydWN0dXJhbCBzcXVhcmUgYnJhY2tldAogICAgICAgICMgICAgICAoICAgICggLy8gbGVmdCBub24tc3RydWN0dXJhbCBwYXJlbgogICAgICAgICMgICAgICApICAgICkgLy8gcmlnaHQgbm9uLXN0cnVjdHVyYWwgcGFyZW4KICAgICAgICAjICAgICAgTCAgICB7IC8vIGxlZnQgbm9uLXN0cnVjdHVyYWwgY3VybHkgYnJhY2UgKGVuY2xvc2luZyBhIGtleSkKICAgICAgICAjICAgICAgUiAgICB9IC8vIHJpZ2h0IG5vbi1zdHJ1Y3R1cmFsIGN1cmx5IGJyYWNlCiAgICAgICAgIwogICAgICAgICMgIFNvbWUgcnVsZXMgYXBwbHkgdG8gdG9rZW4gdHlwZXMgYW5kIHNvbWUgdG8ganVzdCB0aGUgdG9rZW4KICAgICAgICAjICBpdHNlbGYuICBXZSBzb2x2ZSB0aGUgcHJvYmxlbSBieSBjb21iaW5pbmcgdHlwZSBhbmQgdG9rZW4gaW50byBhCiAgICAgICAgIyAgbmV3IGhhc2gga2V5IGZvciB0aGUgY29udGFpbmVyIHR5cGVzLgogICAgICAgICMKICAgICAgICAjICBJZiBhIHJ1bGUgYXBwbGllcyB0byBhIHRva2VuICd0eXBlJyB0aGVuIHdlIG5lZWQgdG8gbWFrZSBydWxlcwogICAgICAgICMgIGZvciBlYWNoIG9mIHRoZXNlICd0eXBlLnRva2VuJyBjb21iaW5hdGlvbnM6CiAgICAgICAgIyAgVHlwZSAgICBUeXBlLlRva2VuCiAgICAgICAgIyAgeyAgICAgICB7eywge1ssIHsoCiAgICAgICAgIyAgWyAgICAgICBbWwogICAgICAgICMgICggICAgICAgKCgKICAgICAgICAjICBMICAgICAgIEx7CiAgICAgICAgIyAgfSAgICAgICB9fSwgfV0sIH0pCiAgICAgICAgIyAgXSAgICAgICBdXQogICAgICAgICMgICkgICAgICAgKSkKICAgICAgICAjICBSICAgICAgIFJ9CiAgICAgICAgIwogICAgICAgICMgIElmIGEgcnVsZSBhcHBsaWVzIHRvIGEgdG9rZW4gdGhlbiB3ZSBuZWVkIHRvIG1ha2UgcnVsZXMgZm9yCiAgICAgICAgIyAgdGhlc2UgJ3R5cGUudG9rZW4nIGNvbWJpbmF0aW9uczoKICAgICAgICAjICBUb2tlbiAgIFR5cGUuVG9rZW4KICAgICAgICAjICB7ICAgICAgIHt7LCBMewogICAgICAgICMgIFsgICAgICAge1ssIFtbCiAgICAgICAgIyAgKCAgICAgICB7KCwgKCgKICAgICAgICAjICB9ICAgICAgIH19LCBSfQogICAgICAgICMgIF0gICAgICAgfV0sIF1dCiAgICAgICAgIyAgKSAgICAgICB9KSwgKSkKCiAgICAgICAgIyBhbGxvdyBsb25nIGxpbmVzIGJlZm9yZSBmaW5hbCB7IGluIGFuIGlmIHN0YXRlbWVudCwgYXMgaW46CiAgICAgICAgIyAgICBpZiAoLi4uLi4uLi4uLgogICAgICAgICMgICAgICAuLi4uLi4uLi4uKQogICAgICAgICMgICAgewogICAgICAgICMKICAgICAgICAjIE90aGVyd2lzZSwgdGhlIGxpbmUgYmVmb3JlIHRoZSB7IHRlbmRzIHRvIGJlIHRvbyBzaG9ydC4KCiAgICAgICAgJGJpbmFyeV9ib25kX3N0cmVuZ3RoeycpKSd9eyd7eyd9ID0gVkVSWV9XRUFLICsgMC4wMzsKICAgICAgICAkYmluYXJ5X2JvbmRfc3RyZW5ndGh7JygoJ317J3t7J30gPSBOT01JTkFMOwoKICAgICAgICAjIGJyZWFrIG9uIHNvbWV0aGluZyBsaWtlICd9ICgnLCBidXQga2VlcCB0aGlzIHN0cm9uZ2VyIHRoYW4gYSAnLCcKICAgICAgICAjIGV4YW1wbGUgaXMgaW4gJ2hvd2UucGwnCiAgICAgICAgJGJpbmFyeV9ib25kX3N0cmVuZ3RoeydSfSd9eycoKCd9ID0gMC44ICogVkVSWV9XRUFLICsgMC4yICogV0VBSzsKICAgICAgICAkYmluYXJ5X2JvbmRfc3RyZW5ndGh7J319J317JygoJ30gPSAwLjggKiBWRVJZX1dFQUsgKyAwLjIgKiBXRUFLOwoKICAgICAgICAjIGtlZXAgbWF0cml4IGFuZCBoYXNoIGluZGljZXMgdG9nZXRoZXIKICAgICAgICAjIGJ1dCBtYWtlIHRoZW0gYSBsaXR0bGUgYmVsb3cgU1RST05HIHRvIGFsbG93IGJyZWFraW5nIG9wZW4KICAgICAgICAjIHNvbWV0aGluZyBsaWtlIHsnc29tZS13b3JkJ317J3NvbWUtdmVyeS1sb25nLXdvcmQnfSBhdCB0aGUgfXsKICAgICAgICAjIChicmFjZWJyay50KQogICAgICAgICRiaW5hcnlfYm9uZF9zdHJlbmd0aHsnXV0nfXsnW1snfSA9IDAuOSAqIFNUUk9ORyArIDAuMSAqIE5PTUlOQUw7CiAgICAgICAgJGJpbmFyeV9ib25kX3N0cmVuZ3RoeyddXSd9eydMeyd9ID0gMC45ICogU1RST05HICsgMC4xICogTk9NSU5BTDsKICAgICAgICAkYmluYXJ5X2JvbmRfc3RyZW5ndGh7J1J9J317J1tbJ30gPSAwLjkgKiBTVFJPTkcgKyAwLjEgKiBOT01JTkFMOwogICAgICAgICRiaW5hcnlfYm9uZF9zdHJlbmd0aHsnUn0nfXsnTHsnfSA9IDAuOSAqIFNUUk9ORyArIDAuMSAqIE5PTUlOQUw7CgogICAgICAgICMgaW5jcmVhc2Ugc3RyZW5ndGggdG8gdGhlIHBvaW50IHdoZXJlIGEgYnJlYWsgaW4gdGhlIGZvbGxvd2luZwogICAgICAgICMgd2lsbCBiZSBhZnRlciB0aGUgb3BlbmluZyBwYXJlbiByYXRoZXIgdGhhbiBhdCB0aGUgYXJyb3c6CiAgICAgICAgIyAgICAkYS0+JGIoJGMpOwogICAgICAgICRiaW5hcnlfYm9uZF9zdHJlbmd0aHsnaSd9eyctPid9ID0gMS40NSAqIFNUUk9ORzsKCiAgICAgICAgIyBBZGRlZCBmb3IgYzE0MCB0byBtYWtlICd3IC0+JyBhbmQgJ2kgLT4nIGJlaGF2ZSB0aGUgc2FtZQogICAgICAgICRiaW5hcnlfYm9uZF9zdHJlbmd0aHsndyd9eyctPid9ID0gMS40NSAqIFNUUk9ORzsKCiAgICAgICAgIyBOb3RlIHRoYXQgdGhlIGZvbGxvd2luZyBhbHRlcm5hdGl2ZSBzdHJlbmd0aCB3b3VsZCBtYWtlIHRoZSBicmVhayBhdAogICAgICAgICMgdGhlICctPicgcmF0aGVyIHRoYW4gb3BlbmluZyB0aGUgJygnLiAgQm90aCBoYXZlIGFkdmFudGFnZXMgYW5kCiAgICAgICAgIyBkaXNhZHZhbnRhZ2VzLgogICAgICAgICMgJGJpbmFyeV9ib25kX3N0cmVuZ3RoeydpJ317Jy0+J30gPSAwLjUqU1RST05HICsgMC41ICogTk9NSU5BTDsgIwoKICAgICAgICAkYmluYXJ5X2JvbmRfc3RyZW5ndGh7JykpJ317Jy0+J30gPSAwLjEgKiBTVFJPTkcgKyAwLjkgKiBOT01JTkFMOwogICAgICAgICRiaW5hcnlfYm9uZF9zdHJlbmd0aHsnXV0nfXsnLT4nfSA9IDAuMSAqIFNUUk9ORyArIDAuOSAqIE5PTUlOQUw7CiAgICAgICAgJGJpbmFyeV9ib25kX3N0cmVuZ3Roeyd9KSd9eyctPid9ID0gMC4xICogU1RST05HICsgMC45ICogTk9NSU5BTDsKICAgICAgICAkYmluYXJ5X2JvbmRfc3RyZW5ndGh7J31dJ317Jy0+J30gPSAwLjEgKiBTVFJPTkcgKyAwLjkgKiBOT01JTkFMOwogICAgICAgICRiaW5hcnlfYm9uZF9zdHJlbmd0aHsnfX0nfXsnLT4nfSA9IDAuMSAqIFNUUk9ORyArIDAuOSAqIE5PTUlOQUw7CiAgICAgICAgJGJpbmFyeV9ib25kX3N0cmVuZ3RoeydSfSd9eyctPid9ID0gMC4xICogU1RST05HICsgMC45ICogTk9NSU5BTDsKCiAgICAgICAgJGJpbmFyeV9ib25kX3N0cmVuZ3RoeycpKSd9eydbWyd9ID0gMC4yICogU1RST05HICsgMC44ICogTk9NSU5BTDsKICAgICAgICAkYmluYXJ5X2JvbmRfc3RyZW5ndGh7J30pJ317J1tbJ30gPSAwLjIgKiBTVFJPTkcgKyAwLjggKiBOT01JTkFMOwogICAgICAgICRiaW5hcnlfYm9uZF9zdHJlbmd0aHsnKSknfXsne1snfSA9IDAuMiAqIFNUUk9ORyArIDAuOCAqIE5PTUlOQUw7CiAgICAgICAgJGJpbmFyeV9ib25kX3N0cmVuZ3Roeyd9KSd9eyd7Wyd9ID0gMC4yICogU1RST05HICsgMC44ICogTk9NSU5BTDsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgQmluYXJ5IE5PX0JSRUFLIHJ1bGVzCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAjIHVzZSBzdHJpY3QgcmVxdWlyZXMgdGhhdCBiYXJlIHdvcmQgYW5kID0+IG5vdCBiZSBzZXBhcmF0ZWQKICAgICAgICAkYmluYXJ5X2JvbmRfc3RyZW5ndGh7J0MnfXsnPT4nfSA9IE5PX0JSRUFLOwogICAgICAgICRiaW5hcnlfYm9uZF9zdHJlbmd0aHsnVSd9eyc9Pid9ID0gTk9fQlJFQUs7CgogICAgICAgICMgTmV2ZXIgYnJlYWsgYmV0d2VlbiBhIGJhcmV3b3JkIGFuZCBhIGZvbGxvd2luZyBwYXJlbiBiZWNhdXNlCiAgICAgICAgIyBwZXJsIG1heSBnaXZlIGFuIGVycm9yLiAgRm9yIGV4YW1wbGUsIGlmIGEgYnJlYWsgaXMgcGxhY2VkCiAgICAgICAgIyBiZXR3ZWVuICd0b19maWxlaGFuZGxlJyBhbmQgaXRzICcoJyB0aGUgZm9sbG93aW5nIGxpbmUgd2lsbAogICAgICAgICMgZ2l2ZSBhIHN5bnRheCBlcnJvciBbQ2FycC5wbV06IG15KCAkbm8pID1maWxlbm8oCiAgICAgICAgIyB0b19maWxlaGFuZGxlKCAkaW4pKSA7CiAgICAgICAgJGJpbmFyeV9ib25kX3N0cmVuZ3RoeydDJ317JygoJ30gPSBOT19CUkVBSzsKICAgICAgICAkYmluYXJ5X2JvbmRfc3RyZW5ndGh7J0MnfXsneygnfSA9IE5PX0JSRUFLOwogICAgICAgICRiaW5hcnlfYm9uZF9zdHJlbmd0aHsnVSd9eycoKCd9ID0gTk9fQlJFQUs7CiAgICAgICAgJGJpbmFyeV9ib25kX3N0cmVuZ3RoeydVJ317J3soJ30gPSBOT19CUkVBSzsKCiAgICAgICAgIyB1c2Ugc3RyaWN0IHJlcXVpcmVzIHRoYXQgYmFyZSB3b3JkIHdpdGhpbiBicmFjZXMgbm90IHN0YXJ0IG5ldwogICAgICAgICMgbGluZQogICAgICAgICRiaW5hcnlfYm9uZF9zdHJlbmd0aHsnTHsnfXsndyd9ID0gTk9fQlJFQUs7CgogICAgICAgICRiaW5hcnlfYm9uZF9zdHJlbmd0aHsndyd9eydSfSd9ID0gTk9fQlJFQUs7CgogICAgICAgICMgVGhlIGZvbGxvd2luZyB0d28gcnVsZXMgcHJldmVudCBhIHN5bnRheCBlcnJvciBjYXVzZWQgYnkgYnJlYWtpbmcgdXAKICAgICAgICAjIGEgY29uc3RydWN0aW9uIGxpa2UgJ3steX0nLiAgVGhlICctJyBxdW90ZXMgdGhlICd5JyBhbmQgcHJldmVudHMKICAgICAgICAjIGl0IGZyb20gYmVpbmcgdGFrZW4gYXMgYSB0cmFuc2xpdGVyYXRpb24uIFdlIGhhdmUgdG8ga2VlcAogICAgICAgICMgdG9rZW4gdHlwZXMgJ0wgbSB3JyB0b2dldGhlciB0byBwcmV2ZW50IHRoaXMgZXJyb3IuCiAgICAgICAgJGJpbmFyeV9ib25kX3N0cmVuZ3RoeydMeyd9eydtJ30gICAgICAgID0gTk9fQlJFQUs7CiAgICAgICAgJGJpbmFyeV9ib25kX3N0cmVuZ3RoX25vc3BhY2V7J20nfXsndyd9ID0gTk9fQlJFQUs7CgogICAgICAgICMga2VlcCAnYmFyZXdvcmQtJyB0b2dldGhlciwgYnV0IG9ubHkgaWYgdGhlcmUgaXMgbm8gc3BhY2UgYmV0d2VlbgogICAgICAgICMgdGhlIHdvcmQgYW5kIGRhc2guIERvIG5vdCBrZWVwIHRvZ2V0aGVyIGlmIHRoZXJlIGlzIGEgc3BhY2UuCiAgICAgICAgIyBleGFtcGxlICd1c2UgcGVybDYtYWxwaGEnCiAgICAgICAgJGJpbmFyeV9ib25kX3N0cmVuZ3RoX25vc3BhY2V7J3cnfXsnbSd9ID0gTk9fQlJFQUs7CgogICAgICAgICMgdXNlIHN0cmljdCByZXF1aXJlcyB0aGF0IGJhcmUgd29yZCBhbmQgPT4gbm90IGJlIHNlcGFyYXRlZAogICAgICAgICRiaW5hcnlfYm9uZF9zdHJlbmd0aHsndyd9eyc9Pid9ID0gTk9fQlJFQUs7CgogICAgICAgICMgdXNlIHN0cmljdCBkb2VzIG5vdCBhbGxvdyBzZXBhcmF0aW5nIHR5cGUgaW5mbyBmcm9tIHRyYWlsaW5nIHsgfQogICAgICAgICMgdGVzdGZpbGUgaXMgcmVhZG1haWwucGwKICAgICAgICAkYmluYXJ5X2JvbmRfc3RyZW5ndGh7J3QnfXsnTHsnfSA9IE5PX0JSRUFLOwogICAgICAgICRiaW5hcnlfYm9uZF9zdHJlbmd0aHsnaSd9eydMeyd9ID0gTk9fQlJFQUs7CgogICAgICAgICMgRml4IGZvciBjMjUwOiBzZXQgc3RyZW5ndGggZm9yIG5ldyAnUycgdG8gYmUgc2FtZSBhcyAnaScKICAgICAgICAjIHRlc3RmaWxlIGlzIHRlc3QxMS9IdWIucG0KICAgICAgICAkYmluYXJ5X2JvbmRfc3RyZW5ndGh7J1MnfXsnTHsnfSA9IE5PX0JSRUFLOwoKICAgICAgICAjIEFzIGEgZGVmZW5zaXZlIG1lYXN1cmUsIGRvIG5vdCBicmVhayBiZXR3ZWVuIGEgJygnIGFuZCBhCiAgICAgICAgIyBmaWxlaGFuZGxlLiAgSW4gc29tZSBjYXNlcywgdGhpcyBjYW4gY2F1c2UgYW4gZXJyb3IuICBGb3IKICAgICAgICAjIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgcHJvZ3JhbSB3b3JrczoKICAgICAgICAjICAgIG15ICRtc2c9ImhpIVxuIjsKICAgICAgICAjICAgIHByaW50CiAgICAgICAgIyAgICAoIFNURE9VVAogICAgICAgICMgICAgJG1zZwogICAgICAgICMgICAgKTsKICAgICAgICAjCiAgICAgICAgIyBCdXQgdGhpcyBwcm9ncmFtIGZhaWxzOgogICAgICAgICMgICAgbXkgJG1zZz0iaGkhXG4iOwogICAgICAgICMgICAgcHJpbnQKICAgICAgICAjICAgICgKICAgICAgICAjICAgIFNURE9VVAogICAgICAgICMgICAgJG1zZwogICAgICAgICMgICAgKTsKICAgICAgICAjCiAgICAgICAgIyBUaGlzIGlzIG5vcm1hbGx5IG9ubHkgYSBwcm9ibGVtIHdpdGggdGhlICdleHRydWRlJyBvcHRpb24KICAgICAgICAkYmluYXJ5X2JvbmRfc3RyZW5ndGh7JygoJ317J1knfSA9IE5PX0JSRUFLOwogICAgICAgICRiaW5hcnlfYm9uZF9zdHJlbmd0aHsneygnfXsnWSd9ID0gTk9fQlJFQUs7CgogICAgICAgICMgbmV2ZXIgYnJlYWsgYmV0d2VlbiBzdWIgbmFtZSBhbmQgb3BlbmluZyBwYXJlbgogICAgICAgICRiaW5hcnlfYm9uZF9zdHJlbmd0aHsndyd9eycoKCd9ID0gTk9fQlJFQUs7CiAgICAgICAgJGJpbmFyeV9ib25kX3N0cmVuZ3Roeyd3J317J3soJ30gPSBOT19CUkVBSzsKCiAgICAgICAgIyBrZWVwICd9JyB0b2dldGhlciB3aXRoICc7JwogICAgICAgICRiaW5hcnlfYm9uZF9zdHJlbmd0aHsnfX0nfXsnOyd9ID0gTk9fQlJFQUs7CgogICAgICAgICMgQnJlYWtpbmcgYmVmb3JlIGEgKysgY2FuIGNhdXNlIHBlcmwgdG8gZ3Vlc3Mgd3JvbmcuIEZvcgogICAgICAgICMgZXhhbXBsZSB0aGUgZm9sbG93aW5nIGxpbmUgd2lsbCBjYXVzZSBhIHN5bnRheCBlcnJvcgogICAgICAgICMgd2l0aCAtZXh0cnVkZSBpZiB3ZSBicmVhayBiZXR3ZWVuICckaScgYW5kICcrKycgW2ZpeHN0eWxlMl0KICAgICAgICAjICAgcHJpbnQoICggJGkrKyAmIDEgKSA/ICRfIDogKCAkY2hhbmdleyRffSB8fCAkXyApICk7CiAgICAgICAgJG5vYnJlYWtfbGhzeycrKyd9ID0gTk9fQlJFQUs7CgogICAgICAgICMgRG8gbm90IGJyZWFrIGJlZm9yZSBhIHBvc3NpYmxlIGZpbGUgaGFuZGxlCiAgICAgICAgJG5vYnJlYWtfbGhzeydaJ30gPSBOT19CUkVBSzsKCiAgICAgICAgIyB1c2Ugc3RyaWN0IGhhdGVzIGJhcmUgd29yZHMgb24gYW55IG5ldyBsaW5lLiAgRm9yCiAgICAgICAgIyBleGFtcGxlLCBhIGJyZWFrIGJlZm9yZSB0aGUgdW5kZXJzY29yZSBoZXJlIHByb3Zva2VzIHRoZQogICAgICAgICMgd3JhdGggb2YgdXNlIHN0cmljdDoKICAgICAgICAjIGlmICggLXIgJGZuICYmICggLXMgXyB8fCAkQWxsb3daZXJvRmlsZXNpemUpKSB7CiAgICAgICAgJG5vYnJlYWtfcmhzeydGJ30gICAgICA9IE5PX0JSRUFLOwogICAgICAgICRub2JyZWFrX3Joc3snQ09SRTo6J30gPSBOT19CUkVBSzsKCiAgICAgICAgIyBUbyBwcmV2ZW50IHRoZSB0b2tlbml6ZXIgZnJvbSBzd2l0Y2hpbmcgYmV0d2VlbiB0eXBlcyAndycgYW5kICdHJyB3ZQogICAgICAgICMgbmVlZCB0byBhdm9pZCBicmVha2luZyBiZXR3ZWVuIHR5cGUgJ0cnIGFuZCB0aGUgZm9sbG93aW5nIGNvZGUgYmxvY2sKICAgICAgICAjIGJyYWNlLiBGaXhlcyBjYXNlIGI5MjkuCiAgICAgICAgJG5vYnJlYWtfcmhze0d9ID0gTk9fQlJFQUs7CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIEJvbmQgU3RyZW5ndGggQkVHSU4gU2VjdGlvbiAzLgogICAgICAgICMgRGVmaW5lIHRhYmxlcyBhbmQgdmFsdWVzIGZvciBhcHBseWluZyBhIHNtYWxsIGJpYXMgdG8gdGhlIGFib3ZlCiAgICAgICAgIyB2YWx1ZXMuCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgQWRkaW5nIGEgc21hbGwgJ2JpYXMnIHRvIHN0cmVuZ3RocyBpcyBhIHNpbXBsZSB3YXkgdG8gbWFrZSBhIGxpbmUKICAgICAgICAjIGJyZWFrIGF0IHRoZSBmaXJzdCBvZiBhIHNlcXVlbmNlIG9mIGlkZW50aWNhbCB0ZXJtcy4gIEZvcgogICAgICAgICMgZXhhbXBsZSwgdG8gZm9yY2UgbG9uZyBzdHJpbmcgb2YgY29uZGl0aW9uYWwgb3BlcmF0b3JzIHRvIGJyZWFrCiAgICAgICAgIyB3aXRoIGVhY2ggbGluZSBlbmRpbmcgaW4gYSAnOicsIHdlIGNhbiBhZGQgYSBzbWFsbCBudW1iZXIgdG8gdGhlCiAgICAgICAgIyBib25kIHN0cmVuZ3RoIG9mIGVhY2ggJzonIChjb2xvbi50KQogICAgICAgIEBiaWFzX3Rva2VucyA9IHF3KCA6ICYmIHx8IGYgYW5kIG9yIC4gKTsgICAgICAgIyB0b2tlbnMgd2hpY2ggZ2V0IGJpYXMKICAgICAgICAlYmlhc19oYXNoICAgPSBtYXAgeyAkXyA9PiAwIH0gQGJpYXNfdG9rZW5zOwogICAgICAgICRkZWx0YV9iaWFzICA9IDAuMDAwMTsgICAgIyBhIHZlcnkgc21hbGwgc3RyZW5ndGggbGV2ZWwKICAgICAgICByZXR1cm47CgogICAgfSAjIyBlbmQgc3ViIGluaXRpYWxpemVfYm9uZF9zdHJlbmd0aF9oYXNoZXMKCiAgICB1c2UgY29uc3RhbnQgREVCVUdfQk9ORCA9PiAwOwoKICAgIHN1YiBzZXRfYm9uZF9zdHJlbmd0aHMgewoKICAgICAgICBteSAoJHNlbGYpID0gQF87CgogICAgICAgICMgRGVmaW5lIGEgJ2JvbmQgc3RyZW5ndGgnIGZvciBlYWNoIHRva2VuIHBhaXIgaW4gYW4gb3V0cHV0IGJhdGNoLgogICAgICAgICMgU2VlIGNvbW1lbnRzIGFib3ZlIGZvciBkZWZpbml0aW9uIG9mIGJvbmQgc3RyZW5ndGguCgogICAgICAgIG15ICRyYm9uZF9zdHJlbmd0aF90b19nbyA9IFtdOwoKICAgICAgICBteSAkckxMICAgICAgICAgICAgICAgPSAkc2VsZi0+W19yTExfXTsKICAgICAgICBteSAkcktfd2VsZF9yaWdodCAgICAgPSAkc2VsZi0+W19yS193ZWxkX3JpZ2h0X107CiAgICAgICAgbXkgJHJLX3dlbGRfbGVmdCAgICAgID0gJHNlbGYtPltfcktfd2VsZF9sZWZ0X107CiAgICAgICAgbXkgJHJpc19saXN0X2J5X3NlcW5vID0gJHNlbGYtPltfcmlzX2xpc3RfYnlfc2Vxbm9fXTsKCiAgICAgICAgIyBwYXRjaC1pdHMgYWx3YXlzIG9rIHRvIGJyZWFrIGF0IGVuZCBvZiBsaW5lCiAgICAgICAgJG5vYnJlYWtfdG9fZ29bJG1heF9pbmRleF90b19nb10gPSAwOwoKICAgICAgICAjIHdlIHN0YXJ0IGEgbmV3IHNldCBvZiBiaWFzIHZhbHVlcyBmb3IgZWFjaCBsaW5lCiAgICAgICAgJWJpYXMgPSAlYmlhc19oYXNoOwoKICAgICAgICBteSAkY29kZV9iaWFzID0gLS4wMTsgICAgIyBiaWFzIGZvciBjbG9zaW5nIGJsb2NrIGJyYWNlcwoKICAgICAgICBteSAkdHlwZSAgICAgICAgID0gJ2InOwogICAgICAgIG15ICR0b2tlbiAgICAgICAgPSBTUEFDRTsKICAgICAgICBteSAkdG9rZW5fbGVuZ3RoID0gMTsKICAgICAgICBteSAkbGFzdF90eXBlOwogICAgICAgIG15ICRsYXN0X25vbmJsYW5rX3R5cGUgID0gJHR5cGU7CiAgICAgICAgbXkgJGxhc3Rfbm9uYmxhbmtfdG9rZW4gPSAkdG9rZW47CiAgICAgICAgbXkgJGxpc3Rfc3RyICAgICAgICAgICAgPSAkbGVmdF9ib25kX3N0cmVuZ3Roeyc/J307CgogICAgICAgIG15ICggJGJvbmRfc3RyXzEsICRib25kX3N0cl8yLCAkYm9uZF9zdHJfMywgJGJvbmRfc3RyXzQgKTsKCiAgICAgICAgbXkgKCAkYmxvY2tfdHlwZSwgJGlfbmV4dCwgJGlfbmV4dF9ub25ibGFuaywgJG5leHRfbm9uYmxhbmtfdG9rZW4sCiAgICAgICAgICAgICRuZXh0X25vbmJsYW5rX3R5cGUsICRuZXh0X3Rva2VuLCAkbmV4dF90eXBlLAogICAgICAgICAgICAkdG90YWxfbmVzdGluZ19kZXB0aCApOwoKICAgICAgICAjIG1haW4gbG9vcCB0byBjb21wdXRlIGJvbmQgc3RyZW5ndGhzIGJldHdlZW4gZWFjaCBwYWlyIG9mIHRva2VucwogICAgICAgIGZvcmVhY2ggbXkgJGkgKCAwIC4uICRtYXhfaW5kZXhfdG9fZ28gKSB7CiAgICAgICAgICAgICRsYXN0X3R5cGUgPSAkdHlwZTsKICAgICAgICAgICAgaWYgKCAkdHlwZSBuZSAnYicgKSB7CiAgICAgICAgICAgICAgICAkbGFzdF9ub25ibGFua190eXBlICA9ICR0eXBlOwogICAgICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfdG9rZW4gPSAkdG9rZW47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHR5cGUgPSAkdHlwZXNfdG9fZ29bJGldOwoKICAgICAgICAgICAgIyBzdHJlbmd0aCBvbiBib3RoIHNpZGVzIG9mIGEgYmxhbmsgaXMgdGhlIHNhbWUKICAgICAgICAgICAgaWYgKCAkdHlwZSBlcSAnYicgJiYgJGxhc3RfdHlwZSBuZSAnYicgKSB7CiAgICAgICAgICAgICAgICAkcmJvbmRfc3RyZW5ndGhfdG9fZ28tPlskaV0gPSAkcmJvbmRfc3RyZW5ndGhfdG9fZ28tPlsgJGkgLSAxIF07CiAgICAgICAgICAgICAgICAkbm9icmVha190b19nb1skaV0gfHw9ICRub2JyZWFrX3RvX2dvWyAkaSAtIDEgXTsgIyBmaXggZm9yIGIxMjU3CiAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdG9rZW4gICAgICAgICAgICAgICA9ICR0b2tlbnNfdG9fZ29bJGldOwogICAgICAgICAgICAkdG9rZW5fbGVuZ3RoICAgICAgICA9ICR0b2tlbl9sZW5ndGhzX3RvX2dvWyRpXTsKICAgICAgICAgICAgJGJsb2NrX3R5cGUgICAgICAgICAgPSAkYmxvY2tfdHlwZV90b19nb1skaV07CiAgICAgICAgICAgICRpX25leHQgICAgICAgICAgICAgID0gJGkgKyAxOwogICAgICAgICAgICAkbmV4dF90eXBlICAgICAgICAgICA9ICR0eXBlc190b19nb1skaV9uZXh0XTsKICAgICAgICAgICAgJG5leHRfdG9rZW4gICAgICAgICAgPSAkdG9rZW5zX3RvX2dvWyRpX25leHRdOwogICAgICAgICAgICAkdG90YWxfbmVzdGluZ19kZXB0aCA9ICRuZXN0aW5nX2RlcHRoX3RvX2dvWyRpX25leHRdOwogICAgICAgICAgICAkaV9uZXh0X25vbmJsYW5rICAgICA9ICggKCAkbmV4dF90eXBlIGVxICdiJyApID8gJGkgKyAyIDogJGkgKyAxICk7CiAgICAgICAgICAgICRuZXh0X25vbmJsYW5rX3R5cGUgID0gJHR5cGVzX3RvX2dvWyRpX25leHRfbm9uYmxhbmtdOwogICAgICAgICAgICAkbmV4dF9ub25ibGFua190b2tlbiA9ICR0b2tlbnNfdG9fZ29bJGlfbmV4dF9ub25ibGFua107CgogICAgICAgICAgICBteSAkc2Vxbm8gICAgICAgICAgICAgICA9ICR0eXBlX3NlcXVlbmNlX3RvX2dvWyRpXTsKICAgICAgICAgICAgbXkgJG5leHRfbm9uYmxhbmtfc2Vxbm8gPSAkdHlwZV9zZXF1ZW5jZV90b19nb1skaV9uZXh0X25vbmJsYW5rXTsKCiAgICAgICAgICAgICMgV2UgYXJlIGNvbXB1dGluZyB0aGUgc3RyZW5ndGggb2YgdGhlIGJvbmQgYmV0d2VlbiB0aGUgY3VycmVudAogICAgICAgICAgICAjIHRva2VuIGFuZCB0aGUgTkVYVCB0b2tlbi4KCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgIyBCb25kIFN0cmVuZ3RoIFNlY3Rpb24gMToKICAgICAgICAgICAgIyBGaXJzdCBBcHByb3hpbWF0aW9uLgogICAgICAgICAgICAjIFVzZSBtaW5pbXVtIG9mIGluZGl2aWR1YWwgbGVmdCBhbmQgcmlnaHQgdGFidWxhdGVkIGJvbmQKICAgICAgICAgICAgIyBzdHJlbmd0aHMuCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgbXkgJGJzciA9ICRyaWdodF9ib25kX3N0cmVuZ3RoeyR0eXBlfTsKICAgICAgICAgICAgbXkgJGJzbCA9ICRsZWZ0X2JvbmRfc3RyZW5ndGh7JG5leHRfbm9uYmxhbmtfdHlwZX07CgogICAgICAgICAgICAjIGRlZmluZSByaWdodCBib25kIHN0cmVuZ3RocyBvZiBjZXJ0YWluIGtleXdvcmRzCiAgICAgICAgICAgIGlmICggJHR5cGUgZXEgJ2snICkgewogICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCAkcmlnaHRfYm9uZF9zdHJlbmd0aHskdG9rZW59ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgJGJzciA9ICRyaWdodF9ib25kX3N0cmVuZ3RoeyR0b2tlbn07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc2V0IHRlcm1pbmFsIGJvbmQgc3RyZW5ndGggdG8gdGhlIG5vbWluYWwgdmFsdWUKICAgICAgICAgICAgIyB0aGlzIHdpbGwgY2F1c2UgZ29vZCBwcmVjZWRpbmcgYnJlYWtzIHRvIGJlIHJldGFpbmVkCiAgICAgICAgICAgIGlmICggJGlfbmV4dF9ub25ibGFuayA+ICRtYXhfaW5kZXhfdG9fZ28gKSB7CiAgICAgICAgICAgICAgICAkYnNsID0gTk9NSU5BTDsKCiAgICAgICAgICAgICAgICAjIEJ1dCB3ZWFrZW4gdGhlIGJvbmQgYXQgYSAnbWlzc2luZyB0ZXJtaW5hbCBjb21tYScuICBJZiBhbgogICAgICAgICAgICAgICAgIyBvcHRpb25hbCBjb21tYSBpcyBtaXNzaW5nIGF0IHRoZSBlbmQgb2YgYSBicm9rZW4gbGlzdCwgdXNlCiAgICAgICAgICAgICAgICAjIHRoZSBzdHJlbmd0aCBvZiBhIGNvbW1hIGFueXdheSB0byBtYWtlIGZvcm1hdHRpbmcgdGhlIHNhbWUgYXMKICAgICAgICAgICAgICAgICMgaWYgaXQgd2VyZSB0aGVyZS4gRml4ZXMgaXNzdWUgYzEzMy4KICAgICAgICAgICAgICAgIGlmICggIWRlZmluZWQoJGJzcikgfHwgJGJzciA+IFZFUllfV0VBSyApIHsKICAgICAgICAgICAgICAgICAgICBteSAkc2Vxbm9fcHggPSAkcGFyZW50X3NlcW5vX3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dOwogICAgICAgICAgICAgICAgICAgIGlmICggJHJpc19saXN0X2J5X3NlcW5vLT57JHNlcW5vX3B4fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJEtLICAgICAgPSAkS190b19nb1skbWF4X2luZGV4X3RvX2dvXTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJEtuICAgICAgPSAkc2VsZi0+S19uZXh0X25vbmJsYW5rKCRLSyk7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRzZXFub19uID0gJHJMTC0+WyRLbl0tPltfVFlQRV9TRVFVRU5DRV9dOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRzZXFub19uICYmICRzZXFub19uIGVxICRzZXFub19weCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRic2wgPSBWRVJZX1dFQUs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZGVmaW5lIGxlZnQgYm9uZCBzdHJlbmd0aHMgb2YgY2VydGFpbiBrZXl3b3JkcwogICAgICAgICAgICBpZiAoICRuZXh0X25vbmJsYW5rX3R5cGUgZXEgJ2snICkgewogICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCAkbGVmdF9ib25kX3N0cmVuZ3RoeyRuZXh0X25vbmJsYW5rX3Rva2VufSApICkgewogICAgICAgICAgICAgICAgICAgICRic2wgPSAkbGVmdF9ib25kX3N0cmVuZ3RoeyRuZXh0X25vbmJsYW5rX3Rva2VufTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBVc2UgdGhlIG1pbmltdW0gb2YgdGhlIGxlZnQgYW5kIHJpZ2h0IHN0cmVuZ3Rocy4gIE5vdGU6IGl0IG1pZ2h0CiAgICAgICAgICAgICMgc2VlbSB0aGF0IHdlIHdvdWxkIHdhbnQgdG8ga2VlcCBhIE5PX0JSRUFLIGlmIGVpdGhlciB0b2tlbiBoYXMKICAgICAgICAgICAgIyB0aGlzIHZhbHVlLiAgVGhpcyBkaWRuJ3Qgd29yaywgZm9yIGV4YW1wbGUgYmVjYXVzZSBpbiBhbiBhcnJvdwogICAgICAgICAgICAjIGxpc3QsIGl0IHByZXZlbnRzIHRoZSBjb21tYSBmcm9tIHNlcGFyYXRpbmcgZnJvbSB0aGUgZm9sbG93aW5nCiAgICAgICAgICAgICMgYmFyZSB3b3JkICh3aGljaCBpcyBwcm9iYWJseSBxdW90ZWQgYnkgaXRzIGFycm93KS4gIFNvIG5lY2Vzc2FyeQogICAgICAgICAgICAjIE5PX0JSRUFLJ3MgaGF2ZSB0byBiZSBoYW5kbGVkIGFzIHNwZWNpYWwgY2FzZXMgaW4gdGhlIGZpbmFsCiAgICAgICAgICAgICMgc2VjdGlvbi4KICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkYnNyKSApIHsgJGJzciA9IFZFUllfU1RST05HIH0KICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkYnNsKSApIHsgJGJzbCA9IFZFUllfU1RST05HIH0KICAgICAgICAgICAgbXkgJGJvbmRfc3RyID0gKCAkYnNyIDwgJGJzbCApID8gJGJzciA6ICRic2w7CiAgICAgICAgICAgICRib25kX3N0cl8xID0gJGJvbmRfc3RyIGlmIChERUJVR19CT05EKTsKCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgIyBCb25kIFN0cmVuZ3RoIFNlY3Rpb24gMjoKICAgICAgICAgICAgIyBBcHBseSBoYXJkd2lyZWQgcnVsZXMuLgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICAgICAjIFBhdGNoIHRvIHB1dCB0ZXJtaW5hbCBvciBjbGF1c2VzIG9uIGEgbmV3IGxpbmU6IFdlYWtlbiB0aGUgYm9uZAogICAgICAgICAgICAjIGF0IGFuIHx8IGZvbGxvd2VkIGJ5IGRpZSBvciBzaW1pbGFyIGtleXdvcmQgdG8gbWFrZSB0aGUgdGVybWluYWwKICAgICAgICAgICAgIyBvciBjbGF1c2UgZmFsbCBvbiBhIG5ldyBsaW5lLCBsaWtlIHRoaXM6CiAgICAgICAgICAgICMKICAgICAgICAgICAgIyAgIG15ICRjbGFzcyA9IHNoaWZ0CiAgICAgICAgICAgICMgICAgIHx8IGRpZSAiQ2Fubm90IGFkZCBicm9hZGNhc3Q6ICBObyBjbGFzcyBpZGVudGlmaWVyIGZvdW5kIjsKICAgICAgICAgICAgIwogICAgICAgICAgICAjIE90aGVyd2lzZSB0aGUgYnJlYWsgd2lsbCBiZSBhdCB0aGUgcHJldmlvdXMgJz0nIHNpbmNlIHRoZSB8fCBhbmQKICAgICAgICAgICAgIyA9IGhhdmUgdGhlIHNhbWUgc3RhcnRpbmcgc3RyZW5ndGggYW5kIHRoZSBvciBpcyBiaWFzZWQsIGxpa2UKICAgICAgICAgICAgIyB0aGlzOgogICAgICAgICAgICAjCiAgICAgICAgICAgICMgbXkgJGNsYXNzID0KICAgICAgICAgICAgIyAgIHNoaWZ0IHx8IGRpZSAiQ2Fubm90IGFkZCBicm9hZGNhc3Q6ICBObyBjbGFzcyBpZGVudGlmaWVyIGZvdW5kIjsKICAgICAgICAgICAgIwogICAgICAgICAgICAjIEluIGFueSBjYXNlIGlmIHRoZSB1c2VyIHBsYWNlcyBhIGJyZWFrIGF0IGVpdGhlciB0aGUgPSBvciB0aGUgfHwKICAgICAgICAgICAgIyBpdCBzaG91bGQgcmVtYWluIHRoZXJlLgogICAgICAgICAgICBpZiAoICR0eXBlIGVxICd8fCcgfHwgJHR5cGUgZXEgJ2snICYmICR0b2tlbiBlcSAnb3InICkgewoKICAgICAgICAgICAgICAgICMgICAgL14oZGllfGNvbmZlc3N8Y3JvYWt8d2FybikkLwogICAgICAgICAgICAgICAgaWYgKCAkaXNfZGllX2NvbmZlc3NfY3JvYWtfd2FybnskbmV4dF9ub25ibGFua190b2tlbn0gKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkd2FudF9icmVha19iZWZvcmV7JHRva2VufSAmJiAkaSA+IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRyYm9uZF9zdHJlbmd0aF90b19nby0+WyAkaSAtIDEgXSAtPSAkZGVsdGFfYmlhczsKCiAgICAgICAgICAgICAgICAgICAgICAgICMga2VlcCBib25kIHN0cmVuZ3RoIG9mIGEgdG9rZW4gYW5kIGl0cyBmb2xsb3dpbmcgYmxhbmsKICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgc2FtZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICR0eXBlc190b19nb1sgJGkgLSAxIF0gZXEgJ2InICYmICRpID4gMiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyYm9uZF9zdHJlbmd0aF90b19nby0+WyAkaSAtIDIgXSAtPSAkZGVsdGFfYmlhczsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGJvbmRfc3RyIC09ICRkZWx0YV9iaWFzOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBnb29kIHRvIGJyZWFrIGFmdGVyIGVuZCBvZiBjb2RlIGJsb2NrcwogICAgICAgICAgICBpZiAoICR0eXBlIGVxICd9JyAmJiAkYmxvY2tfdHlwZSAmJiAkbmV4dF9ub25ibGFua190eXBlIG5lICc7JyApIHsKCiAgICAgICAgICAgICAgICAkYm9uZF9zdHIgPSAwLjUgKiBXRUFLICsgMC41ICogVkVSWV9XRUFLICsgJGNvZGVfYmlhczsKICAgICAgICAgICAgICAgICRjb2RlX2JpYXMgKz0gJGRlbHRhX2JpYXM7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJHR5cGUgZXEgJ2snICkgewoKICAgICAgICAgICAgICAgICMgYWxsb3cgY2VydGFpbiBjb250cm9sIGtleXdvcmRzIHRvIHN0YW5kIG91dAogICAgICAgICAgICAgICAgaWYgKCAgICRuZXh0X25vbmJsYW5rX3R5cGUgZXEgJ2snCiAgICAgICAgICAgICAgICAgICAgJiYgJGlzX2xhc3RfbmV4dF9yZWRvX3JldHVybnskdG9rZW59ICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkYm9uZF9zdHIgPSAwLjQ1ICogV0VBSyArIDAuNTUgKiBWRVJZX1dFQUs7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBEb24ndCBicmVhayBhZnRlciBrZXl3b3JkIG15LiAgVGhpcyBpcyBhIHF1aWNrIGZpeCBmb3IgYQogICAgICAgICAgICAgICAgIyByYXJlIHByb2JsZW0gd2l0aCBwZXJsLiBBbiBleGFtcGxlIGlzIHRoaXMgbGluZSBmcm9tIGZpbGUKICAgICAgICAgICAgICAgICMgQ29udGFpbmVyLnBtOgoKICAgICAgICAgICAgICAgICMgZm9yZWFjaCBteSAkcXVlc3Rpb24oIERlYmlhbjo6RGViQ29uZjo6Q29uZmlnRGI6OmdldHRyZWUoCiAgICAgICAgICAgICAgICAjICR0aGlzLT57J3F1ZXN0aW9uJ30gKSApCgogICAgICAgICAgICAgICAgaWYgKCAkdG9rZW4gZXEgJ215JyApIHsKICAgICAgICAgICAgICAgICAgICAkYm9uZF9zdHIgPSBOT19CUkVBSzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJG5leHRfbm9uYmxhbmtfdHlwZSBlcSAnaycgJiYgJHR5cGUgbmUgJ0NPUkU6OicgKSB7CgogICAgICAgICAgICAgICAgaWYgKCAkaXNfa2V5d29yZF9yZXR1cm5pbmdfbGlzdHskbmV4dF9ub25ibGFua190b2tlbn0gKSB7CiAgICAgICAgICAgICAgICAgICAgJGJvbmRfc3RyID0gJGxpc3Rfc3RyIGlmICggJGJvbmRfc3RyID4gJGxpc3Rfc3RyICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBrZXl3b3JkcyBsaWtlICd1bmxlc3MnLCAnaWYnLCBldGMsIHdpdGhpbiBzdGF0ZW1lbnRzCiAgICAgICAgICAgICAgICAjIG1ha2UgZ29vZCBicmVha3MKICAgICAgICAgICAgICAgIGlmICggJGlzX2dvb2Rfa2V5d29yZF9icmVha3BvaW50eyRuZXh0X25vbmJsYW5rX3Rva2VufSApIHsKICAgICAgICAgICAgICAgICAgICAkYm9uZF9zdHIgPSBWRVJZX1dFQUsgLyAxLjA1OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHRyeSBub3QgdG8gYnJlYWsgYmVmb3JlIGEgY29tbWEtYXJyb3cKICAgICAgICAgICAgZWxzaWYgKCAkbmV4dF9ub25ibGFua190eXBlIGVxICc9PicgKSB7CiAgICAgICAgICAgICAgICBpZiAoICRib25kX3N0ciA8IFNUUk9ORyApIHsgJGJvbmRfc3RyID0gU1RST05HIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICMgbm8gYXBwbGljYWJsZSBoYXJkd2lyZWQgY2hhbmdlCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgIyBBZGRpdGlvbmFsIGhhcmR3aXJlZCBOT0JSRUFLIHJ1bGVzCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgICAgICMgbWFwMS50IC0tIGNvcnJlY3QgZm9yIGEgcXVpcmsgaW4gcGVybAogICAgICAgICAgICBpZiAoICAgJHRva2VuIGVxICcoJwogICAgICAgICAgICAgICAgJiYgJG5leHRfbm9uYmxhbmtfdHlwZSBlcSAnaScKICAgICAgICAgICAgICAgICYmICRsYXN0X25vbmJsYW5rX3R5cGUgZXEgJ2snCiAgICAgICAgICAgICAgICAmJiAkaXNfc29ydF9tYXBfZ3JlcHskbGFzdF9ub25ibGFua190b2tlbn0gKQoKICAgICAgICAgICAgICAjICAgICAvXihzb3J0fG1hcHxncmVwKSQvICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJGJvbmRfc3RyID0gTk9fQlJFQUs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZXh0cnVkZS50OiBkbyBub3QgYnJlYWsgYmVmb3JlIHBhcmVuIGF0OgogICAgICAgICAgICAjICAgIC1sIHBpZF9maWxlbmFtZSgKICAgICAgICAgICAgaWYgKCAkbGFzdF9ub25ibGFua190eXBlIGVxICdGJyAmJiAkbmV4dF9ub25ibGFua190b2tlbiBlcSAnKCcgKSB7CiAgICAgICAgICAgICAgICAkYm9uZF9zdHIgPSBOT19CUkVBSzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBPTEQgQ09NTUVOVDogSW4gb2xkZXIgdmVyc2lvbiBvZiBwZXJsLCB1c2Ugc3RyaWN0IGNhbiBjYXVzZQogICAgICAgICAgICAjIHByb2JsZW1zIHdpdGggYnJlYWtzIGJlZm9yZSBiYXJlIHdvcmRzIGZvbGxvd2luZyBvcGVuaW5nIHBhcmVucy4KICAgICAgICAgICAgIyBGb3IgZXhhbXBsZSwgdGhpcyB3aWxsIGZhaWwgdW5kZXIgb2xkZXIgdmVyc2lvbnMgaWYgYSBicmVhayBpcwogICAgICAgICAgICAjIG1hZGUgYmV0d2VlbiAnKCcgYW5kICdNQUlMJzoKCiAgICAgICAgICAgICMgdXNlIHN0cmljdDsgb3BlbiggTUFJTCwgImEgbG9uZyBmaWxlbmFtZSBvciBjb21tYW5kIik7IGNsb3NlIE1BSUw7CgogICAgICAgICAgICAjIE5FVyBDT01NRU5UOiBUaGlyZCBmaXggZm9yIGIxMjEzOgogICAgICAgICAgICAjIFRoaXMgb3B0aW9uIGRvZXMgbm90IHNlZW0gdG8gYmUgbmVlZGVkIGFueSBsb25nZXIsIGFuZCBpdCBjYW4KICAgICAgICAgICAgIyBjYXVzZSBpbnN0YWJpbGl0aWVzLiAgSXQgY2FuIGJlIHR1cm5lZCBvZmYsIGJ1dCB0byBtaW5pbWl6ZQogICAgICAgICAgICAjIGNoYW5nZXMgdG8gZXhpc3RpbmcgZm9ybWF0dGluZyBpdCBpcyByZXRhaW5lZCBvbmx5IGluIHRoZSBjYXNlCiAgICAgICAgICAgICMgd2hlcmUgdGhlIHByZXZpb3VzIHRva2VuIHdhcyAnb3BlbicgYW5kIHRoZXJlIHdhcyBubyBsaW5lIGJyZWFrLgogICAgICAgICAgICAjIEV2ZW4gdGhpcyBjb3VsZCBldmVudHVhbGx5IGJlIHJlbW92ZWQgaWYgaXQgY2F1c2VzIGluc3RhYmlsaXR5LgogICAgICAgICAgICBpZiAoICR0eXBlIGVxICd7JyApIHsKCiAgICAgICAgICAgICAgICBpZiAoICAgJHRva2VuIGVxICcoJwogICAgICAgICAgICAgICAgICAgICYmICRuZXh0X25vbmJsYW5rX3R5cGUgZXEgJ3cnCiAgICAgICAgICAgICAgICAgICAgJiYgJGxhc3Rfbm9uYmxhbmtfdHlwZSBlcSAnaycKICAgICAgICAgICAgICAgICAgICAmJiAkbGFzdF9ub25ibGFua190b2tlbiBlcSAnb3BlbicKICAgICAgICAgICAgICAgICAgICAmJiAhJG9sZF9icmVha3BvaW50X3RvX2dvWyRpXSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJGJvbmRfc3RyID0gTk9fQlJFQUs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgRG8gbm90IGJyZWFrIGJldHdlZW4gYSBwb3NzaWJsZSBmaWxlaGFuZGxlIGFuZCBhID8gb3IgLyBhbmQgZG8KICAgICAgICAgICAgIyBub3QgaW50cm9kdWNlIGEgYnJlYWsgYWZ0ZXIgaXQgaWYgdGhlcmUgaXMgbm8gYmxhbmsKICAgICAgICAgICAgIyAoZXh0cnVkZS50KQogICAgICAgICAgICBlbHNpZiAoICR0eXBlIGVxICdaJyApIHsKCiAgICAgICAgICAgICAgICAjIGRvbid0IGJyZWFrLi4KICAgICAgICAgICAgICAgIGlmICgKCiAgICAgICAgICAgICAgICAgICAgIyBpZiB0aGVyZSBpcyBubyBibGFuayBhbmQgd2UgZG8gbm90IHdhbnQgb25lLiBFeGFtcGxlczoKICAgICAgICAgICAgICAgICAgICAjICAgIHByaW50ICR4KysgICAgIyBkbyBub3QgYnJlYWsgYWZ0ZXIgJHgKICAgICAgICAgICAgICAgICAgICAjICAgIHByaW50IEhUTUwiSEVMTE8iICAgIyBicmVhayBvayBhZnRlciBIVE1MCiAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAkbmV4dF90eXBlIG5lICdiJwogICAgICAgICAgICAgICAgICAgICAgICAmJiBkZWZpbmVkKCAkd2FudF9sZWZ0X3NwYWNleyRuZXh0X3R5cGV9ICkKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHdhbnRfbGVmdF9zcGFjZXskbmV4dF90eXBlfSA9PSBXU19OTwogICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICAgICAgIyBvciB3ZSBtaWdodCBiZSBmb2xsb3dlZCBieSB0aGUgc3RhcnQgb2YgYSBxdW90ZSwKICAgICAgICAgICAgICAgICAgICAjIGFuZCB0aGlzIGlzIG5vdCBhbiBleGlzdGluZyBicmVha3BvaW50OyBmaXhlcyBjMDM5LgogICAgICAgICAgICAgICAgICAgIHx8ICEkb2xkX2JyZWFrcG9pbnRfdG9fZ29bJGldCiAgICAgICAgICAgICAgICAgICAgJiYgc3Vic3RyKCAkbmV4dF9ub25ibGFua190b2tlbiwgMCwgMSApIGVxICcvJwoKICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRib25kX3N0ciA9IE5PX0JSRUFLOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIEZpeCBmb3IgYzAzOQogICAgICAgICAgICBlbHNpZiAoICR0eXBlIGVxICd3JyApIHsKICAgICAgICAgICAgICAgICRib25kX3N0ciA9IE5PX0JSRUFLCiAgICAgICAgICAgICAgICAgIGlmICggISRvbGRfYnJlYWtwb2ludF90b19nb1skaV0KICAgICAgICAgICAgICAgICAgICAmJiBzdWJzdHIoICRuZXh0X25vbmJsYW5rX3Rva2VuLCAwLCAxICkgZXEgJy8nCiAgICAgICAgICAgICAgICAgICAgJiYgJG5leHRfbm9uYmxhbmtfdHlwZSBuZSAnLy8nICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAjIG5vIGhhcmR3aXJlZCBydWxlIGFwcGxpZXMKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBCcmVha2luZyBiZWZvcmUgYSA/IGJlZm9yZSBhIHF1b3RlIGNhbiBjYXVzZSB0cm91YmxlIGlmCiAgICAgICAgICAgICMgdGhleSBhcmUgbm90IHNlcGFyYXRlZCBieSBhIGJsYW5rLgogICAgICAgICAgICAjIEV4YW1wbGU6IGEgc3ludGF4IGVycm9yIG9jY3VycyBpZiB5b3UgYnJlYWsgYmVmb3JlIHRoZSA/IGhlcmUKICAgICAgICAgICAgIyAgbXkkbG9naWM9am9pbiRhbGw/JyAmJiAnOicgfHwgJyxAcmVnZXhwczsKICAgICAgICAgICAgIyBGcm9tOiBQcm9mZXNzaW9uYWxfUGVybF9Qcm9ncmFtbWluZ19Db2RlL211bHRpZmluZC5wbAogICAgICAgICAgICBpZiAoICRuZXh0X25vbmJsYW5rX3R5cGUgZXEgJz8nICkgewogICAgICAgICAgICAgICAgJGJvbmRfc3RyID0gTk9fQlJFQUsKICAgICAgICAgICAgICAgICAgaWYgKCAkdHlwZXNfdG9fZ29bICRpX25leHRfbm9uYmxhbmsgKyAxIF0gZXEgJ1EnICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgQnJlYWtpbmcgYmVmb3JlIGEgLiBmb2xsb3dlZCBieSBhIG51bWJlcgogICAgICAgICAgICAjIGNhbiBjYXVzZSB0cm91YmxlIGlmIHRoZXJlIGlzIG5vIGludGVydmVuaW5nIHNwYWNlCiAgICAgICAgICAgICMgRXhhbXBsZTogYSBzeW50YXggZXJyb3Igb2NjdXJzIGlmIHlvdSBicmVhayBiZWZvcmUgdGhlIC4yIGhlcmUKICAgICAgICAgICAgIyAgJHN0ciAuPSBwYWNrKCRlbmRpYW4uMiwgZW5zdXJyb2dhdGUoJG9yZCkpOwogICAgICAgICAgICAjIEZyb206IHBlcmw1OC9Vbmljb2RlLnBtCiAgICAgICAgICAgIGVsc2lmICggJG5leHRfbm9uYmxhbmtfdHlwZSBlcSAnLicgKSB7CiAgICAgICAgICAgICAgICAkYm9uZF9zdHIgPSBOT19CUkVBSwogICAgICAgICAgICAgICAgICBpZiAoICR0eXBlc190b19nb1sgJGlfbmV4dF9ub25ibGFuayArIDEgXSBlcSAnbicgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBEbyBub3QgYnJlYWsgYmVmb3JlIGEgcGhhbnRvbSBjb21tYSBiZWNhdXNlIGl0IHdpbGwgY29uZnVzZQogICAgICAgICAgICAjIHRoZSBjb252ZXJnZW5jZSB0ZXN0IChTVFJBTkdFIG1lc3NhZ2UgaXMgZW1pdHRlZCkKICAgICAgICAgICAgZWxzaWYgKCAkbmV4dF9ub25ibGFua190eXBlIGVxICcsJyApIHsKICAgICAgICAgICAgICAgIGlmICggIWxlbmd0aCgkbmV4dF9ub25ibGFua190b2tlbikgKSB7CiAgICAgICAgICAgICAgICAgICAgJGJvbmRfc3RyID0gTk9fQlJFQUs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAjIG5vIHNwZWNpYWwgTk9fQlJFQUsgcnVsZSBhcHBsaWVzCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRib25kX3N0cl8yID0gJGJvbmRfc3RyIGlmIChERUJVR19CT05EKTsKCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgIyBFbmQgb2YgaGFyZHdpcmVkIHJ1bGVzCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgIyBCb25kIFN0cmVuZ3RoIFNlY3Rpb24gMzoKICAgICAgICAgICAgIyBBcHBseSB0YWJsZSBydWxlcy4gVGhlc2UgaGF2ZSBwcmlvcml0eSBvdmVyIHRoZSBhYm92ZQogICAgICAgICAgICAjIGhhcmR3aXJlZCBydWxlcy4KICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAgICAgbXkgJHRhYnVsYXRlZF9ib25kX3N0cjsKICAgICAgICAgICAgbXkgJGx0eXBlID0gJHR5cGU7CiAgICAgICAgICAgIG15ICRydHlwZSA9ICRuZXh0X25vbmJsYW5rX3R5cGU7CiAgICAgICAgICAgIGlmICggJHNlcW5vICYmICRpc19jb250YWluZXJfdG9rZW57JHRva2VufSApIHsKICAgICAgICAgICAgICAgICRsdHlwZSA9ICR0eXBlIC4gJHRva2VuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICAgJG5leHRfbm9uYmxhbmtfc2Vxbm8KICAgICAgICAgICAgICAgICYmICRpc19jb250YWluZXJfdG9rZW57JG5leHRfbm9uYmxhbmtfdG9rZW59ICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJHJ0eXBlID0gJG5leHRfbm9uYmxhbmtfdHlwZSAuICRuZXh0X25vbmJsYW5rX3Rva2VuOwoKICAgICAgICAgICAgICAgICMgQWx0ZXJuYXRlIEZpeCAjMSBmb3IgaXNzdWUgYjEyOTkuICBUaGlzIHZlcnNpb24gbWFrZXMgdGhlCiAgICAgICAgICAgICAgICAjIGRlY2lzaW9uIGFzIHNvb24gYXMgcG9zc2libGUuICBTZWUgQWx0ZXJuYXRlIEZpeCAjMiBhbHNvLgogICAgICAgICAgICAgICAgIyBEbyBub3Qgc2VwYXJhdGUgYSBiYXJld29yZCBpZGVudGlmaWVyIGZyb20gaXRzIHBhcmVuOiBiMTI5OQogICAgICAgICAgICAgICAgIyBUaGlzIGlzIGN1cnJlbnRseSBuZWVkZWQgZm9yIHN0YWJpbGl0eSBiZWNhdXNlIGlmIHRoZSBiYXJld29yZAogICAgICAgICAgICAgICAgIyBnZXRzIHNlcGFyYXRlZCBmcm9tIGEgcHJlY2VkaW5nICctPicgYW5kIGZvbGxvd2luZyAnKCcgdGhlbgogICAgICAgICAgICAgICAgIyB0aGUgdG9rZW5pemVyIG1heSBzd2l0Y2ggZnJvbSB0eXBlICdpJyB0byB0eXBlICd3Jy4gIFRoaXMKICAgICAgICAgICAgICAgICMgcGF0Y2ggd2lsbCBwcmV2ZW50IHRoaXMgYnkga2VlcGluZyBpdCBhZGphY2VudCB0byBpdHMgJygnLgojIyAgICAgICAgICAgICAgaWYgKCAgICRuZXh0X25vbmJsYW5rX3Rva2VuIGVxICcoJwojIyAgICAgICAgICAgICAgICAgICYmICRsdHlwZSBlcSAnaScKIyMgICAgICAgICAgICAgICAgICAmJiBzdWJzdHIoICR0b2tlbiwgMCwgMSApID1+IC9eXHckLyApCiMjICAgICAgICAgICAgICB7CiMjICAgICAgICAgICAgICAgICAgJGx0eXBlID0gJ3cnOwojIyAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGFwcGx5IGJpbmFyeSBydWxlcyB3aGljaCBhcHBseSByZWdhcmRsZXNzIG9mIHNwYWNlIGJldHdlZW4gdG9rZW5zCiAgICAgICAgICAgIGlmICggJGJpbmFyeV9ib25kX3N0cmVuZ3RoeyRsdHlwZX17JHJ0eXBlfSApIHsKICAgICAgICAgICAgICAgICRib25kX3N0ciAgICAgICAgICAgPSAkYmluYXJ5X2JvbmRfc3RyZW5ndGh7JGx0eXBlfXskcnR5cGV9OwogICAgICAgICAgICAgICAgJHRhYnVsYXRlZF9ib25kX3N0ciA9ICRib25kX3N0cjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBhcHBseSBiaW5hcnkgcnVsZXMgd2hpY2ggYXBwbHkgb25seSBpZiBubyBzcGFjZSBiZXR3ZWVuIHRva2VucwogICAgICAgICAgICBpZiAoICRiaW5hcnlfYm9uZF9zdHJlbmd0aF9ub3NwYWNleyRsdHlwZX17JG5leHRfdHlwZX0gKSB7CiAgICAgICAgICAgICAgICAkYm9uZF9zdHIgICAgICAgICAgID0gJGJpbmFyeV9ib25kX3N0cmVuZ3RoeyRsdHlwZX17JG5leHRfdHlwZX07CiAgICAgICAgICAgICAgICAkdGFidWxhdGVkX2JvbmRfc3RyID0gJGJvbmRfc3RyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICRub2JyZWFrX3Joc3skbHR5cGV9IHx8ICRub2JyZWFrX2xoc3skcnR5cGV9ICkgewogICAgICAgICAgICAgICAgJGJvbmRfc3RyICAgICAgICAgICA9IE5PX0JSRUFLOwogICAgICAgICAgICAgICAgJHRhYnVsYXRlZF9ib25kX3N0ciA9ICRib25kX3N0cjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGJvbmRfc3RyXzMgPSAkYm9uZF9zdHIgaWYgKERFQlVHX0JPTkQpOwoKICAgICAgICAgICAgIyBJZiB0aGUgaGFyZHdpcmVkIHJ1bGVzIGNvbmZsaWN0IHdpdGggdGhlIHRhYnVsYXRlZCBib25kCiAgICAgICAgICAgICMgc3RyZW5ndGggdGhlbiB0aGVyZSBpcyBhbiBpbmNvbnNpc3RlbmN5IHRoYXQgc2hvdWxkIGJlIGZpeGVkCiAgICAgICAgICAgIERFQlVHX0JPTkQKICAgICAgICAgICAgICAmJiAkdGFidWxhdGVkX2JvbmRfc3RyCiAgICAgICAgICAgICAgJiYgJGJvbmRfc3RyXzEKICAgICAgICAgICAgICAmJiAkYm9uZF9zdHJfMSAhPSAkYm9uZF9zdHJfMgogICAgICAgICAgICAgICYmICRib25kX3N0cl8yICE9ICR0YWJ1bGF0ZWRfYm9uZF9zdHIKICAgICAgICAgICAgICAmJiBkbyB7CiAgICAgICAgICAgICAgICBwcmludCB7KlNURE9VVH0KIkJPTkRfVEFCTEVTOiBsdHlwZT0kbHR5cGUgcnR5cGU9JHJ0eXBlICRib25kX3N0cl8xLT4kYm9uZF9zdHJfMi0+JGJvbmRfc3RyXzNcbiI7CiAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgIyBCb25kIFN0cmVuZ3RoIFNlY3Rpb24gNDoKICAgICAgICAgICAjIE1vZGlmeSBzdHJlbmd0aHMgb2YgY2VydGFpbiB0b2tlbnMgd2hpY2ggb2Z0ZW4gb2NjdXIgaW4gc2VxdWVuY2UKICAgICAgICAgICAjIGJ5IGFkZGluZyBhIHNtYWxsIGJpYXMgdG8gZWFjaCBvbmUgaW4gdHVybiBzbyB0aGF0IHRoZSBicmVha3MKICAgICAgICAgICAjIG9jY3VyIGZyb20gbGVmdCB0byByaWdodC4KICAgICAgICAgICAjCiAgICAgICAgICAgIyBOb3RlIHRoYXQgd2Ugb25seSBjaGFuZ2luZyBzdHJlbmd0aHMgYnkgc21hbGwgYW1vdW50cyBoZXJlLAogICAgICAgICAgICMgYW5kIHVzdWFsbHkgaW5jcmVhc2luZywgc28gd2Ugc2hvdWxkIG5vdCBiZSBhbHRlcmluZyBhbnkgTk9fQlJFQUtzLgogICAgICAgICAgICMgT3RoZXIgcm91dGluZXMgd2hpY2ggY2hlY2sgZm9yIE5PX0JSRUFLcyB3aWxsIHVzZSBhIHRvbGVyYW5jZQogICAgICAgICAgICMgb2Ygb25lIHRvIGF2b2lkIGFueSBwcm9ibGVtLgogICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAgICAgIyBUaGUgYmlhcyB0YWJsZXMgdXNlIHNwZWNpYWwga2V5czoKICAgICAgICAgICAgIyAgICR0eXBlIC0gaWYgbm90IGtleXdvcmQKICAgICAgICAgICAgIyAgICR0b2tlbiAtIGlmIGtleXdvcmQsIGJ1dCBtYXAgc29tZSBrZXl3b3JkcyB0b2dldGhlcgogICAgICAgICAgICBteSAkbGVmdF9rZXkgPQogICAgICAgICAgICAgICR0eXBlIGVxICdrJyA/ICR0b2tlbiBlcSAnZXJyJyA/ICdvcicgOiAkdG9rZW4gOiAkdHlwZTsKICAgICAgICAgICAgbXkgJHJpZ2h0X2tleSA9CiAgICAgICAgICAgICAgICAkbmV4dF9ub25ibGFua190eXBlIGVxICdrJwogICAgICAgICAgICAgID8gJG5leHRfbm9uYmxhbmtfdG9rZW4gZXEgJ2VycicKICAgICAgICAgICAgICAgICAgPyAnb3InCiAgICAgICAgICAgICAgICAgIDogJG5leHRfbm9uYmxhbmtfdG9rZW4KICAgICAgICAgICAgICA6ICRuZXh0X25vbmJsYW5rX3R5cGU7CgogICAgICAgICAgICAjIGJpYXMgbGVmdCB0b2tlbgogICAgICAgICAgICBpZiAoIGRlZmluZWQoICRiaWFzeyRsZWZ0X2tleX0gKSApIHsKICAgICAgICAgICAgICAgIGlmICggISR3YW50X2JyZWFrX2JlZm9yZXskbGVmdF9rZXl9ICkgewogICAgICAgICAgICAgICAgICAgICRiaWFzeyRsZWZ0X2tleX0gKz0gJGRlbHRhX2JpYXM7CiAgICAgICAgICAgICAgICAgICAgJGJvbmRfc3RyICs9ICRiaWFzeyRsZWZ0X2tleX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYmlhcyByaWdodCB0b2tlbgogICAgICAgICAgICBpZiAoIGRlZmluZWQoICRiaWFzeyRyaWdodF9rZXl9ICkgKSB7CiAgICAgICAgICAgICAgICBpZiAoICR3YW50X2JyZWFrX2JlZm9yZXskcmlnaHRfa2V5fSApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBmb3IgbGVhZGluZyAnLicgYWxpZ24gYWxsIGJ1dCAnc2hvcnQnIHF1b3RlczsgdGhlIGlkZWEKICAgICAgICAgICAgICAgICAgICAjIGlzIHRvIG5vdCBwbGFjZSBzb21ldGhpbmcgbGlrZSAiXG4iIG9uIGEgc2luZ2xlIGxpbmUuCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkcmlnaHRfa2V5IGVxICcuJyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRpc19zaG9ydF9xdW90ZSA9ICRsYXN0X25vbmJsYW5rX3R5cGUgZXEgJy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCAkdG9rZW5fbGVuZ3RoIDw9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkck9wdHNfc2hvcnRfY29uY2F0ZW5hdGlvbl9pdGVtX2xlbmd0aCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgISRpc19jbG9zaW5nX3Rva2VueyR0b2tlbn07CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEkaXNfc2hvcnRfcXVvdGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYmlhc3skcmlnaHRfa2V5fSArPSAkZGVsdGFfYmlhczsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGJpYXN7JHJpZ2h0X2tleX0gKz0gJGRlbHRhX2JpYXM7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRib25kX3N0ciArPSAkYmlhc3skcmlnaHRfa2V5fTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGJvbmRfc3RyXzQgPSAkYm9uZF9zdHIgaWYgKERFQlVHX0JPTkQpOwoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIEJvbmQgU3RyZW5ndGggU2VjdGlvbiA1OgogICAgICAgICAgICAjIEZpZnRoIEFwcHJveGltYXRpb24uCiAgICAgICAgICAgICMgVGFrZSBuZXN0aW5nIGRlcHRoIGludG8gYWNjb3VudCBieSBhZGRpbmcgdGhlIG5lc3RpbmcgZGVwdGgKICAgICAgICAgICAgIyB0byB0aGUgYm9uZCBzdHJlbmd0aC4KICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICBteSAkc3RyZW5ndGg7CgogICAgICAgICAgICBpZiAoIGRlZmluZWQoJGJvbmRfc3RyKSAmJiAhJG5vYnJlYWtfdG9fZ29bJGldICkgewogICAgICAgICAgICAgICAgaWYgKCAkdG90YWxfbmVzdGluZ19kZXB0aCA+IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgJHN0cmVuZ3RoID0gJGJvbmRfc3RyICsgJHRvdGFsX25lc3RpbmdfZGVwdGg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkc3RyZW5ndGggPSAkYm9uZF9zdHI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkc3RyZW5ndGggPSBOT19CUkVBSzsKCiAgICAgICAgICAgICAgICAjIEZvciBjcml0aWNhbCBjb2RlIHN1Y2ggYXMgbGluZXMgd2l0aCBoZXJlIHRhcmdldHMgd2UgbXVzdAogICAgICAgICAgICAgICAgIyBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCB3ZSBkbyBub3QgYWxsb3cgYSBicmVhay4gIFNvIGZvcgogICAgICAgICAgICAgICAgIyB0aGVzZSB0aGUgbm9icmVhayBmbGFnIGV4Y2VlZHMgMSBhcyBhIHNpZ25hbC4gT3RoZXJ3aXNlIHdlCiAgICAgICAgICAgICAgICAjIGNhbiBydW4gaW50byB0cm91YmxlIHdoZW4gc21hbGwgdG9sZXJhbmNlcyBhcmUgYWRkZWQuCiAgICAgICAgICAgICAgICAkc3RyZW5ndGggKz0gMQogICAgICAgICAgICAgICAgICBpZiAoICRub2JyZWFrX3RvX2dvWyRpXSAmJiAkbm9icmVha190b19nb1skaV0gPiAxICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgIyBCb25kIFN0cmVuZ3RoIFNlY3Rpb24gNjoKICAgICAgICAgICAgIyBTaXh0aCBBcHByb3hpbWF0aW9uLiBXZWxkcy4KICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAgICAgIyBEbyBub3QgYWxsb3cgYSBicmVhayB3aXRoaW4gd2VsZHMKICAgICAgICAgICAgaWYgKCAkdG90YWxfd2VsZF9jb3VudCAmJiAkc2Vxbm8gKSB7CiAgICAgICAgICAgICAgICBteSAkS0sgPSAkS190b19nb1skaV07CiAgICAgICAgICAgICAgICBpZiAoICRyS193ZWxkX3JpZ2h0LT57JEtLfSApIHsKICAgICAgICAgICAgICAgICAgICAkc3RyZW5ndGggPSBOT19CUkVBSzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIEJ1dCBlbmNvdXJhZ2UgYnJlYWtpbmcgYWZ0ZXIgb3BlbmluZyB3ZWxkZWQgdG9rZW5zCiAgICAgICAgICAgICAgICBlbHNpZiAoJHJLX3dlbGRfbGVmdC0+eyRLS30KICAgICAgICAgICAgICAgICAgICAmJiAkaXNfb3BlbmluZ190b2tlbnskdG9rZW59ICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkc3RyZW5ndGggLT0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICMgbm90IHdlbGRlZCBsZWZ0IG9yIHJpZ2h0CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYWx3YXlzIGJyZWFrIGFmdGVyIHNpZGUgY29tbWVudAogICAgICAgICAgICBpZiAoICR0eXBlIGVxICcjJyApIHsgJHN0cmVuZ3RoID0gMCB9CgogICAgICAgICAgICAkcmJvbmRfc3RyZW5ndGhfdG9fZ28tPlskaV0gPSAkc3RyZW5ndGg7CgogICAgICAgICAgICAjIEZpeCBmb3IgY2FzZSBjMDAxOiBiZSBzdXJlIE5PX0JSRUFLJ3MgYXJlIGVuZm9yY2VkIGJ5IGxhdGVyCiAgICAgICAgICAgICMgcm91dGluZXMsIGV4Y2VwdCBhdCBhICc/JyBiZWNhdXNlICc/JyBhcyBxdW90ZSBkZWxpbWl0ZXIgaXMKICAgICAgICAgICAgIyBkZXByZWNhdGVkLgogICAgICAgICAgICBpZiAoICRzdHJlbmd0aCA+PSBOT19CUkVBSyAmJiAkbmV4dF9ub25ibGFua190eXBlIG5lICc/JyApIHsKICAgICAgICAgICAgICAgICRub2JyZWFrX3RvX2dvWyRpXSB8fD0gMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgREVCVUdfQk9ORCAmJiBkbyB7CiAgICAgICAgICAgICAgICBteSAkc3RyID0gc3Vic3RyKCAkdG9rZW4sIDAsIDE1ICk7CiAgICAgICAgICAgICAgICAkc3RyIC49IFNQQUNFIHggKCAxNiAtIGxlbmd0aCgkc3RyKSApOwogICAgICAgICAgICAgICAgcHJpbnQgeypTVERPVVR9CiJCT05EOiAgaT0kaSAkc3RyICR0eXBlICRuZXh0X25vbmJsYW5rX3R5cGUgZGVwdGg9JHRvdGFsX25lc3RpbmdfZGVwdGggc3RyZW5ndGg9JGJvbmRfc3RyXzEgLT4gJGJvbmRfc3RyXzIgLT4gJGJvbmRfc3RyXzMgLT4gJGJvbmRfc3RyXzQgJGJvbmRfc3RyIC0+ICRzdHJlbmd0aCBcbiI7CgogICAgICAgICAgICAgICAgIyByZXNldCBmb3IgbmV4dCBwYXNzCiAgICAgICAgICAgICAgICAkYm9uZF9zdHJfMSA9ICRib25kX3N0cl8yID0gJGJvbmRfc3RyXzMgPSAkYm9uZF9zdHJfNCA9IHVuZGVmOwogICAgICAgICAgICB9OwoKICAgICAgICB9ICMjIGVuZCBtYWluIGxvb3AKICAgICAgICByZXR1cm4gJHJib25kX3N0cmVuZ3RoX3RvX2dvOwogICAgfSAjIyBlbmQgc3ViIHNldF9ib25kX3N0cmVuZ3Rocwp9ICMjIGVuZCBjbG9zdXJlIHNldF9ib25kX3N0cmVuZ3RocwoKc3ViIGJhZF9wYXR0ZXJuIHsKICAgIG15ICgkcGF0dGVybikgPSBAXzsKCiAgICAjIFJldHVybiB0cnVlIGlmIGEgcmVnZXggcGF0dGVybiBoYXMgYW4gZXJyb3IKICAgICMgTm90ZTogVG9rZW5pemVyLnBtIGFsc28gaGFzIGEgY29weSBvZiB0aGlzCiAgICBteSAkcmVnZXhfdXUgPSBldmFsIHsgcXIvJHBhdHRlcm4vIH07CiAgICByZXR1cm4gJEVWQUxfRVJST1I7Cn0gIyMgZW5kIHN1YiBiYWRfcGF0dGVybgoKeyAgICAjIyBiZWdpbiBjbG9zdXJlIHByZXBhcmVfY3VkZGxlZF9ibG9ja190eXBlcwoKICAgIG15ICVub19jdWRkbGU7CgogICAgIyBBZGQga2V5d29yZHMgaGVyZSB3aGljaCByZWFsbHkgc2hvdWxkIG5vdCBiZSBjdWRkbGVkCiAgICBCRUdJTiB7CiAgICAgICAgbXkgQHEgPSBxdyggaWYgdW5sZXNzIGZvciBmb3JlYWNoIHdoaWxlICk7CiAgICAgICAgQG5vX2N1ZGRsZXtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwogICAgfQoKICAgIHN1YiBwcmVwYXJlX2N1ZGRsZWRfYmxvY2tfdHlwZXMgewoKICAgICAgICAjIENvbnN0cnVjdCBhIGhhc2ggbmVlZGVkIGJ5IHRoZSBjdWRkbGVkLWVsc2Ugc3R5bGUKCiAgICAgICAgbXkgJGN1ZGRsZWRfc3RyaW5nID0gRU1QVFlfU1RSSU5HOwogICAgICAgIGlmICggJHJPcHRzLT57J2N1ZGRsZWQtZWxzZSd9ICkgewoKICAgICAgICAgICAgIyBzZXQgdGhlIGRlZmF1bHQKICAgICAgICAgICAgJGN1ZGRsZWRfc3RyaW5nID0gJ2Vsc2lmIGVsc2UgY29udGludWUgY2F0Y2ggZmluYWxseScKICAgICAgICAgICAgICB1bmxlc3MgKCAkck9wdHMtPnsnY3VkZGxlZC1ibG9jay1saXN0LWV4Y2x1c2l2ZSd9ICk7CgogICAgICAgICAgICAjIFRoaXMgaXMgdGhlIG9sZCBlcXVpdmFsZW50IGJ1dCBtb3JlIGNvbXBsZXggdmVyc2lvbgogICAgICAgICAgICAjICRjdWRkbGVkX3N0cmluZyA9ICdpZi1lbHNpZi1lbHNlIHVubGVzcy1lbHNpZi1lbHNlIC1jb250aW51ZSAnOwoKICAgICAgICAgICAgIyBBZGQgdXNlcnMgb3RoZXIgYmxvY2tzIHRvIGJlIGN1ZGRsZWQKICAgICAgICAgICAgbXkgJGN1ZGRsZWRfYmxvY2tfbGlzdCA9ICRyT3B0cy0+eydjdWRkbGVkLWJsb2NrLWxpc3QnfTsKICAgICAgICAgICAgaWYgKCRjdWRkbGVkX2Jsb2NrX2xpc3QpIHsKICAgICAgICAgICAgICAgICRjdWRkbGVkX3N0cmluZyAuPSBTUEFDRSAuICRjdWRkbGVkX2Jsb2NrX2xpc3Q7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgSWYgd2UgaGF2ZSBhIGN1ZGRsZWQgc3RyaW5nIG9mIHRoZSBmb3JtCiAgICAgICAgIyAgJ3RyeS1jYXRjaC1maW5hbGx5JwoKICAgICAgICAjIHdlIHdhbnQgdG8gcHJlcGFyZSBhIGhhc2ggb2YgdGhlIGZvcm0KCiAgICAgICAgIyAkcmN1ZGRsZWRfYmxvY2tfdHlwZXMgPSB7CiAgICAgICAgIyAgICAndHJ5JyA9PiB7CiAgICAgICAgIyAgICAgICAgJ2NhdGNoJyAgID0+IDEsCiAgICAgICAgIyAgICAgICAgJ2ZpbmFsbHknID0+IDEKICAgICAgICAjICAgIH0sCiAgICAgICAgIyB9OwoKICAgICAgICAjIHVzZSAtZGNibCB0byBkdW1wIHRoaXMgaGFzaAoKICAgICAgICAjIE11bHRpcGxlIHN1Y2ggc3RyaW5ncyBhcmUgaW5wdXQgYXMgYSBzcGFjZSBvciBjb21tYSBzZXBhcmF0ZWQgbGlzdAoKICAgICAgICAjIElmIHdlIGdldCB0d28gbGlzdHMgd2l0aCB0aGUgc2FtZSBsZWFkaW5nIHR5cGUsIHN1Y2ggYXMKICAgICAgICAjICAgLWNibCA9ICItdHJ5LWNhdGNoLWZpbmFsbHkgIC10cnktY2F0Y2gtb3RoZXJ3aXNlIgogICAgICAgICMgdGhlbiB0aGV5IHdpbGwgZ2V0IG1lcmdlZCBhcyBmb2xsb3dzOgogICAgICAgICMgJHJjdWRkbGVkX2Jsb2NrX3R5cGVzID0gewogICAgICAgICMgICAgJ3RyeScgPT4gewogICAgICAgICMgICAgICAgICdjYXRjaCcgICAgID0+IDEsCiAgICAgICAgIyAgICAgICAgJ2ZpbmFsbHknICAgPT4gMiwKICAgICAgICAjICAgICAgICAnb3RoZXJ3aXNlJyA9PiAxLAogICAgICAgICMgICAgfSwKICAgICAgICAjIH07CiAgICAgICAgIyBUaGlzIHdpbGwgYWxsb3cgZWl0aGVyIHR5cGUgb2YgY2hhaW4gdG8gYmUgZm9sbG93ZWQuCgogICAgICAgICRjdWRkbGVkX3N0cmluZyA9fiBzLywvIC9nOyAgICAjIGFsbG93IHNwYWNlIG9yIGNvbW1hIHNlcGFyYXRlZCBsaXN0cwogICAgICAgIG15IEBjdWRkbGVkX3N0cmluZ3MgPSBzcGxpdCAvXHMrLywgJGN1ZGRsZWRfc3RyaW5nOwoKICAgICAgICAkcmN1ZGRsZWRfYmxvY2tfdHlwZXMgPSB7fTsKCiAgICAgICAgIyBwcm9jZXNzIGVhY2ggZGFzaC1zZXBhcmF0ZWQgc3RyaW5nLi4uCiAgICAgICAgbXkgJHN0cmluZ19jb3VudCA9IDA7CiAgICAgICAgZm9yZWFjaCBteSAkc3RyaW5nIChAY3VkZGxlZF9zdHJpbmdzKSB7CiAgICAgICAgICAgIG5leHQgdW5sZXNzICRzdHJpbmc7CiAgICAgICAgICAgIG15IEB3b3JkcyA9IHNwbGl0IC8tKy8sICRzdHJpbmc7ICAgICMgYWxsb3cgbXVsdGlwbGUgZGFzaGVzCgogICAgICAgICAgICAjIHdlIGNvdWxkIGxvb2sgZm9yIGFuZCByZXBvcnQgcG9zc2libGUgZXJyb3JzIGhlcmUuLi4KICAgICAgICAgICAgbmV4dCBpZiAoIEB3b3JkcyA8PSAwICk7CgogICAgICAgICAgICMgYWxsb3cgZWl0aGVyICctY29udGludWUnIG9yICotY29udGludWUnIGZvciBhcmJpdHJhcnkgc3RhcnRpbmcgdHlwZQogICAgICAgICAgICBteSAkc3RhcnQgPSAnKic7CgogICAgICAgICAgICAjIGEgc2luZ2xlIHdvcmQgd2l0aG91dCBkYXNoZXMgaXMgYSBzZWNvbmRhcnkgYmxvY2sgdHlwZQogICAgICAgICAgICBpZiAoIEB3b3JkcyA+IDEgKSB7CiAgICAgICAgICAgICAgICAkc3RhcnQgPSBzaGlmdCBAd29yZHM7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYWx3YXlzIG1ha2UgYW4gZW50cnkgZm9yIHRoZSBsZWFkaW5nIHdvcmQuIElmIG5vbmUgZm9sbG93LCB0aGlzCiAgICAgICAgICAgICMgd2lsbCBzdGlsbCBwcmV2ZW50IGEgd2lsZGNhcmQgZnJvbSBtYXRjaGluZyB0aGlzIHdvcmQuCiAgICAgICAgICAgIGlmICggIWRlZmluZWQoICRyY3VkZGxlZF9ibG9ja190eXBlcy0+eyRzdGFydH0gKSApIHsKICAgICAgICAgICAgICAgICRyY3VkZGxlZF9ibG9ja190eXBlcy0+eyRzdGFydH0gPSB7fTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBUaGUgY291bnQgZ2l2ZXMgdGhlIG9yaWdpbmFsIHdvcmQgb3JkZXIgaW4gY2FzZSB3ZSBldmVyIHdhbnQgaXQuCiAgICAgICAgICAgICRzdHJpbmdfY291bnQrKzsKICAgICAgICAgICAgbXkgJHdvcmRfY291bnQgPSAwOwogICAgICAgICAgICBmb3JlYWNoIG15ICR3b3JkIChAd29yZHMpIHsKICAgICAgICAgICAgICAgIG5leHQgdW5sZXNzICR3b3JkOwogICAgICAgICAgICAgICAgaWYgKCAkbm9fY3VkZGxleyR3b3JkfSApIHsKICAgICAgICAgICAgICAgICAgICBXYXJuKAoiIyMgSWdub3Jpbmcga2V5d29yZCAnJHdvcmQnIGluIC1jYmw7IGRvZXMgbm90IHNlZW0gcmlnaHRcbiIKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkd29yZF9jb3VudCsrOwogICAgICAgICAgICAgICAgJHJjdWRkbGVkX2Jsb2NrX3R5cGVzLT57JHN0YXJ0fS0+eyR3b3JkfSA9CiAgICAgICAgICAgICAgICAgIDE7ICAgICMiJHN0cmluZ19jb3VudC4kd29yZF9jb3VudCI7CgogICAgICAgICAgICAgICAgIyBnaXQjOTogUmVtb3ZlIHRoaXMgd29yZCBmcm9tIHRoZSBsaXN0IG9mIGRlc2lyZWQgb25lLWxpbmUKICAgICAgICAgICAgICAgICMgYmxvY2tzCiAgICAgICAgICAgICAgICAkd2FudF9vbmVfbGluZV9ibG9ja3skd29yZH0gPSAwOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBwcmVwYXJlX2N1ZGRsZWRfYmxvY2tfdHlwZXMKfSAjIyBlbmQgY2xvc3VyZSBwcmVwYXJlX2N1ZGRsZWRfYmxvY2tfdHlwZXMKCnN1YiBkdW1wX2N1ZGRsZWRfYmxvY2tfbGlzdCB7CiAgICBteSAoJGZoKSA9IEBfOwoKICAgICMgT1JJR0lOQUwgTUVUSE9EOiBIZXJlIGlzIHRoZSBmb3JtYXQgb2YgdGhlIGN1ZGRsZWQgYmxvY2sgdHlwZSBoYXNoCiAgICAjIHdoaWNoIGNvbnRyb2xzIHRoaXMgcm91dGluZQogICAgIyAgICBteSAkcmN1ZGRsZWRfYmxvY2tfdHlwZXMgPSB7CiAgICAjICAgICAgICAnaWYnID0+IHsKICAgICMgICAgICAgICAgICAnZWxzZScgID0+IDEsCiAgICAjICAgICAgICAgICAgJ2Vsc2lmJyA9PiAxCiAgICAjICAgICAgICB9LAogICAgIyAgICAgICAgJ3RyeScgPT4gewogICAgIyAgICAgICAgICAgICdjYXRjaCcgICA9PiAxLAogICAgIyAgICAgICAgICAgICdmaW5hbGx5JyA9PiAxCiAgICAjICAgICAgICB9LAogICAgIyAgICB9OwoKICAgICMgU0lNUExJRklFRCBNRVRIT0Q6IHRoZSBzaW1wbGlmaWVkIG1ldGhvZCB1c2VzIGEgd2lsZGNhcmQgZm9yCiAgICAjIHRoZSBzdGFydGluZyBibG9jayB0eXBlIGFuZCBwdXRzIGFsbCBjdWRkbGVkIGJsb2NrcyB0b2dldGhlcjoKICAgICMgICAgbXkgJHJjdWRkbGVkX2Jsb2NrX3R5cGVzID0gewogICAgIyAgICAgICAgJyonID0+IHsKICAgICMgICAgICAgICAgICAnZWxzZScgID0+IDEsCiAgICAjICAgICAgICAgICAgJ2Vsc2lmJyA9PiAxCiAgICAjICAgICAgICAgICAgJ2NhdGNoJyAgID0+IDEsCiAgICAjICAgICAgICAgICAgJ2ZpbmFsbHknID0+IDEKICAgICMgICAgICAgIH0sCiAgICAjICAgIH07CgogICAgIyBCb3RoIG1ldGhvZHMgd29yaywgYnV0IHRoZSBzaW1wbGlmaWVkIG1ldGhvZCBoYXMgcHJvdmVuIHRvIGJlIGFkZXF1YXRlIGFuZAogICAgIyBlYXNpZXIgdG8gbWFuYWdlLgoKICAgIG15ICRjdWRkbGVkX3N0cmluZyA9ICRyT3B0cy0+eydjdWRkbGVkLWJsb2NrLWxpc3QnfTsKICAgICRjdWRkbGVkX3N0cmluZyA9IEVNUFRZX1NUUklORyB1bmxlc3MgJGN1ZGRsZWRfc3RyaW5nOwoKICAgIG15ICRmbGFncyA9IEVNUFRZX1NUUklORzsKICAgICRmbGFncyAuPSAiLWNlIiBpZiAoICRyT3B0cy0+eydjdWRkbGVkLWVsc2UnfSApOwogICAgJGZsYWdzIC49ICIgLWNibD0nJGN1ZGRsZWRfc3RyaW5nJyI7CgogICAgaWYgKCAhJHJPcHRzLT57J2N1ZGRsZWQtZWxzZSd9ICkgewogICAgICAgICRmbGFncyAuPSAiXG5Ob3RlOiBZb3UgbXVzdCBzcGVjaWZ5IC1jZSB0byBnZW5lcmF0ZSBhIGN1ZGRsZWQgaGFzaCI7CiAgICB9CgogICAgJGZoLT5wcmludCg8PEVPTSk7Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpIYXNoIG9mIGN1ZGRsZWQgYmxvY2sgdHlwZXMgcHJlcGFyZWQgZm9yIGEgcnVuIHdpdGggdGhlc2UgcGFyYW1ldGVyczoKICAkZmxhZ3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkVPTQoKICAgIHVzZSBEYXRhOjpEdW1wZXI7CiAgICAkZmgtPnByaW50KCBEdW1wZXIoJHJjdWRkbGVkX2Jsb2NrX3R5cGVzKSApOwoKICAgICRmaC0+cHJpbnQoPDxFT00pOwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRU9NCiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBkdW1wX2N1ZGRsZWRfYmxvY2tfbGlzdAoKc3ViIG1ha2Vfc3RhdGljX2Jsb2NrX2NvbW1lbnRfcGF0dGVybiB7CgogICAgIyBjcmVhdGUgdGhlIHBhdHRlcm4gdXNlZCB0byBpZGVudGlmeSBzdGF0aWMgYmxvY2sgY29tbWVudHMKICAgICRzdGF0aWNfYmxvY2tfY29tbWVudF9wYXR0ZXJuID0gJ15ccyojIyc7CgogICAgIyBhbGxvdyB0aGUgdXNlciB0byBjaGFuZ2UgaXQKICAgIGlmICggJHJPcHRzLT57J3N0YXRpYy1ibG9jay1jb21tZW50LXByZWZpeCd9ICkgewogICAgICAgIG15ICRwcmVmaXggPSAkck9wdHMtPnsnc3RhdGljLWJsb2NrLWNvbW1lbnQtcHJlZml4J307CiAgICAgICAgJHByZWZpeCA9fiBzL15ccysvLzsKICAgICAgICBteSAkcGF0dGVybiA9ICRwcmVmaXg7CgogICAgICAgICMgdXNlciBtYXkgZ2l2ZSBsZWFkaW5nIGNhcmV0IHRvIGZvcmNlIG1hdGNoaW5nIGxlZnQgY29tbWVudHMgb25seQogICAgICAgIGlmICggJHByZWZpeCAhfiAvXlxeIy8gKSB7CiAgICAgICAgICAgIGlmICggJHByZWZpeCAhfiAvXiMvICkgewogICAgICAgICAgICAgICAgRGllKAoiRVJST1I6IHRoZSAtc2JjcCBwcmVmaXggaXMgJyRwcmVmaXgnIGJ1dCBtdXN0IGJlZ2luIHdpdGggJyMnIG9yICdeIydcbiIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHBhdHRlcm4gPSAnXlxzKicgLiAkcHJlZml4OwogICAgICAgIH0KICAgICAgICBpZiAoIGJhZF9wYXR0ZXJuKCRwYXR0ZXJuKSApIHsKICAgICAgICAgICAgRGllKAoiRVJST1I6IHRoZSAtc2JjIHByZWZpeCAnJHByZWZpeCcgY2F1c2VzIHRoZSBpbnZhbGlkIHJlZ2V4ICckcGF0dGVybidcbiIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJHN0YXRpY19ibG9ja19jb21tZW50X3BhdHRlcm4gPSAkcGF0dGVybjsKICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIG1ha2Vfc3RhdGljX2Jsb2NrX2NvbW1lbnRfcGF0dGVybgoKc3ViIG1ha2VfZm9ybWF0X3NraXBwaW5nX3BhdHRlcm4gewogICAgbXkgKCAkb3B0X25hbWUsICRkZWZhdWx0ICkgPSBAXzsKICAgIG15ICRwYXJhbSA9ICRyT3B0cy0+eyRvcHRfbmFtZX07CiAgICBpZiAoICEkcGFyYW0gKSB7ICRwYXJhbSA9ICRkZWZhdWx0IH0KICAgICRwYXJhbSA9fiBzL15ccysvLzsKICAgIGlmICggJHBhcmFtICF+IC9eIy8gKSB7CiAgICAgICAgRGllKCJFUlJPUjogdGhlICRvcHRfbmFtZSBwYXJhbWV0ZXIgJyRwYXJhbScgbXVzdCBiZWdpbiB3aXRoICcjJ1xuIik7CiAgICB9CiAgICBteSAkcGF0dGVybiA9ICdeJyAuICRwYXJhbSAuICdccyc7CiAgICBpZiAoIGJhZF9wYXR0ZXJuKCRwYXR0ZXJuKSApIHsKICAgICAgICBEaWUoCiJFUlJPUjogdGhlICRvcHRfbmFtZSBwYXJhbWV0ZXIgJyRwYXJhbScgY2F1c2VzIHRoZSBpbnZhbGlkIHJlZ2V4ICckcGF0dGVybidcbiIKICAgICAgICApOwogICAgfQogICAgcmV0dXJuICRwYXR0ZXJuOwp9ICMjIGVuZCBzdWIgbWFrZV9mb3JtYXRfc2tpcHBpbmdfcGF0dGVybgoKc3ViIG1ha2Vfbm9uX2luZGVudGluZ19icmFjZV9wYXR0ZXJuIHsKCiAgICAjIENyZWF0ZSB0aGUgcGF0dGVybiB1c2VkIHRvIGlkZW50aWZ5IHN0YXRpYyBzaWRlIGNvbW1lbnRzLgogICAgIyBOb3RlIHRoYXQgd2UgYXJlIGVuZGluZyB0aGUgcGF0dGVybiBpbiBhIFxzLiBUaGlzIHdpbGwgYWxsb3cKICAgICMgdGhlIHBhdHRlcm4gdG8gYmUgZm9sbG93ZWQgYnkgYSBzcGFjZSBhbmQgc29tZSB0ZXh0LCBvciBhIG5ld2xpbmUuCiAgICAjIFRoZSBwYXR0ZXJuIGlzIHVzZWQgaW4gc3ViICdub25faW5kZW50aW5nX2JyYWNlcycKICAgICRub25faW5kZW50aW5nX2JyYWNlX3BhdHRlcm4gPSAnXiM8PDxccyc7CgogICAgIyBhbGxvdyB0aGUgdXNlciB0byBjaGFuZ2UgaXQKICAgIGlmICggJHJPcHRzLT57J25vbi1pbmRlbnRpbmctYnJhY2UtcHJlZml4J30gKSB7CiAgICAgICAgbXkgJHByZWZpeCA9ICRyT3B0cy0+eydub24taW5kZW50aW5nLWJyYWNlLXByZWZpeCd9OwogICAgICAgICRwcmVmaXggPX4gcy9eXHMrLy87CiAgICAgICAgaWYgKCAkcHJlZml4ICF+IC9eIy8gKSB7CiAgICAgICAgICAgIERpZSgiRVJST1I6IHRoZSAtbmlicCBwYXJhbWV0ZXIgJyRwcmVmaXgnIG11c3QgYmVnaW4gd2l0aCAnIydcbiIpOwogICAgICAgIH0KICAgICAgICBteSAkcGF0dGVybiA9ICdeJyAuICRwcmVmaXggLiAnXHMnOwogICAgICAgIGlmICggYmFkX3BhdHRlcm4oJHBhdHRlcm4pICkgewogICAgICAgICAgICBEaWUoCiJFUlJPUjogdGhlIC1uaWJwIHByZWZpeCAnJHByZWZpeCcgY2F1c2VzIHRoZSBpbnZhbGlkIHJlZ2V4ICckcGF0dGVybidcbiIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJG5vbl9pbmRlbnRpbmdfYnJhY2VfcGF0dGVybiA9ICRwYXR0ZXJuOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgbWFrZV9ub25faW5kZW50aW5nX2JyYWNlX3BhdHRlcm4KCnN1YiBtYWtlX2Nsb3Npbmdfc2lkZV9jb21tZW50X2xpc3RfcGF0dGVybiB7CgogICAgIyB0dXJuIGFueSBpbnB1dCBsaXN0IGludG8gYSByZWdleCBmb3IgcmVjb2duaXppbmcgc2VsZWN0ZWQgYmxvY2sgdHlwZXMKICAgICRjbG9zaW5nX3NpZGVfY29tbWVudF9saXN0X3BhdHRlcm4gPSAnXlx3Kyc7CgogICAgIyAnMScgaXMgYW4gaW1wb3NzaWJsZSBibG9jayBuYW1lCiAgICAkY2xvc2luZ19zaWRlX2NvbW1lbnRfZXhjbHVzaW9uX3BhdHRlcm4gPSAnXjEnOwoKICAgICMgTmVlZCBhIHNlcGFyYXRlIGZsYWcgZm9yIGFub255bW91cyBzdWJzIGJlY2F1c2UgdGhleSBhcmUgdGhlIG9ubHkKICAgICMgdHlwZXMgd2hlcmUgdGhlIHNpZGUgY29tbWVudCBtaWdodCBmb2xsb3cgYSAnOycKICAgICRjbG9zaW5nX3NpZGVfY29tbWVudF93YW50X2FzdWIgPSAxOwoKICAgIG15ICRjc2NsID0gJHJPcHRzLT57J2Nsb3Npbmctc2lkZS1jb21tZW50LWxpc3QnfTsKICAgIGlmICggZGVmaW5lZCgkY3NjbCkgJiYgJGNzY2wgKSB7CiAgICAgICAgJGNsb3Npbmdfc2lkZV9jb21tZW50X2xpc3RfcGF0dGVybiA9CiAgICAgICAgICBtYWtlX2Jsb2NrX3BhdHRlcm4oICctY3NjbCcsICRjc2NsICk7CiAgICAgICAgJGNsb3Npbmdfc2lkZV9jb21tZW50X3dhbnRfYXN1YiA9ICRjc2NsID1+IC9cYmFzdWJcYi87CiAgICB9CgogICAgbXkgJGNzY3hsID0gJHJPcHRzLT57J2Nsb3Npbmctc2lkZS1jb21tZW50LWV4Y2x1c2lvbi1saXN0J307CiAgICBpZiAoIGRlZmluZWQoJGNzY3hsKSAmJiAkY3NjeGwgKSB7CiAgICAgICAgJGNsb3Npbmdfc2lkZV9jb21tZW50X2V4Y2x1c2lvbl9wYXR0ZXJuID0KICAgICAgICAgIG1ha2VfYmxvY2tfcGF0dGVybiggJy1jc2N4bCcsICRjc2N4bCApOwogICAgICAgIGlmICggJGNzY3hsID1+IC9cYmFzdWJcYi8gKSB7CiAgICAgICAgICAgICRjbG9zaW5nX3NpZGVfY29tbWVudF93YW50X2FzdWIgPSAwOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIG1ha2VfY2xvc2luZ19zaWRlX2NvbW1lbnRfbGlzdF9wYXR0ZXJuCgpzdWIgaW5pdGlhbGl6ZV9jbG9zaW5nX3NpZGVfY29tbWVudHMgewoKICAgIG1ha2VfY2xvc2luZ19zaWRlX2NvbW1lbnRfcHJlZml4KCk7CiAgICBtYWtlX2Nsb3Npbmdfc2lkZV9jb21tZW50X2xpc3RfcGF0dGVybigpOwoKICAgICMgSWYgY2xvc2luZyBzaWRlIGNvbW1lbnRzIEFSRSBzZWxlY3RlZCwgdGhlbiB3ZSBjYW4gc2FmZWx5CiAgICAjIGRlbGV0ZSBvbGQgY2xvc2luZyBzaWRlIGNvbW1lbnRzIHVubGVzcyBjbG9zaW5nIHNpZGUgY29tbWVudAogICAgIyB3YXJuaW5ncyBhcmUgcmVxdWVzdGVkLiAgVGhpcyBpcyBhIGdvb2QgaWRlYSBiZWNhdXNlIGl0IHdpbGwKICAgICMgZWxpbWluYXRlIGFueSBvbGQgY3NjJ3Mgd2hpY2ggZmFsbCBiZWxvdyB0aGUgbGluZSBjb3VudCB0aHJlc2hvbGQuCiAgICAjIFdlIGNhbm5vdCBkbyB0aGlzIGlmIHdhcm5pbmdzIGFyZSB0dXJuZWQgb24sIHRob3VnaCwgYmVjYXVzZSB3ZQogICAgIyBtaWdodCBkZWxldGUgc29tZSB0ZXh0IHdoaWNoIGhhcyBiZWVuIGFkZGVkLiAgU28gdGhhdCBtdXN0CiAgICAjIGJlIGhhbmRsZWQgd2hlbiBjb21tZW50cyBhcmUgY3JlYXRlZC4gIEFuZCB3ZSBjYW5ub3QgZG8gdGhpcwogICAgIyB3aXRoIC1pbyBiZWNhdXNlIC1jc2Mgd2lsbCBiZSBza2lwcGVkIGFsdG9nZXRoZXIuCiAgICBpZiAoICRyT3B0cy0+eydjbG9zaW5nLXNpZGUtY29tbWVudHMnfSApIHsKICAgICAgICBpZiAoICAgISRyT3B0cy0+eydjbG9zaW5nLXNpZGUtY29tbWVudC13YXJuaW5ncyd9CiAgICAgICAgICAgICYmICEkck9wdHMtPnsnaW5kZW50LW9ubHknfSApCiAgICAgICAgewogICAgICAgICAgICAkck9wdHMtPnsnZGVsZXRlLWNsb3Npbmctc2lkZS1jb21tZW50cyd9ID0gMTsKICAgICAgICB9CiAgICB9CgogICAgIyBJZiBjbG9zaW5nIHNpZGUgY29tbWVudHMgQVJFIE5PVCBzZWxlY3RlZCwgYnV0IHdhcm5pbmdzIEFSRQogICAgIyBzZWxlY3RlZCBhbmQgd2UgQVJFIERFTEVUSU5HIGNzYydzLCB0aGVuIHdlIHdpbGwgcHJldGVuZCB0byBiZQogICAgIyBhZGRpbmcgd2l0aCBhIGh1Z2UgaW50ZXJ2YWwuICBUaGlzIHdpbGwgZm9yY2UgdGhlIGNvbW1lbnRzIHRvIGJlCiAgICAjIGdlbmVyYXRlZCBmb3IgY29tcGFyaXNvbiB3aXRoIHRoZSBvbGQgY29tbWVudHMsIGJ1dCBub3QgYWRkZWQuCiAgICBlbHNpZiAoICRyT3B0cy0+eydjbG9zaW5nLXNpZGUtY29tbWVudC13YXJuaW5ncyd9ICkgewogICAgICAgIGlmICggJHJPcHRzLT57J2RlbGV0ZS1jbG9zaW5nLXNpZGUtY29tbWVudHMnfSApIHsKICAgICAgICAgICAgJHJPcHRzLT57J2RlbGV0ZS1jbG9zaW5nLXNpZGUtY29tbWVudHMnfSAgPSAwOwogICAgICAgICAgICAkck9wdHMtPnsnY2xvc2luZy1zaWRlLWNvbW1lbnRzJ30gICAgICAgICA9IDE7CiAgICAgICAgICAgICRyT3B0cy0+eydjbG9zaW5nLXNpZGUtY29tbWVudC1pbnRlcnZhbCd9ID0gMTAwXzAwMF8wMDA7CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgIyBubyAtY3NjIGZsYWdzCiAgICB9CgogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgaW5pdGlhbGl6ZV9jbG9zaW5nX3NpZGVfY29tbWVudHMKCnN1YiBpbml0aWFsaXplX21pc3NpbmdfZWxzZV9jb21tZW50IHsKCiAgICBteSAkY29tbWVudCA9ICRyT3B0cy0+eydhZGQtbWlzc2luZy1lbHNlLWNvbW1lbnQnfTsKICAgIGlmICggISRjb21tZW50ICkgewogICAgICAgICRjb21tZW50ID0gJyMjRklYJyAuICdNRSAtIGFkZGVkIHdpdGggcGVybHRpZHkgLWFtZSc7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkY29tbWVudCA9IHN1YnN0ciggJGNvbW1lbnQsIDAsIDYwICk7CiAgICAgICAgJGNvbW1lbnQgPX4gcy9eXHMrLy87CiAgICAgICAgJGNvbW1lbnQgPX4gcy9ccyskLy87CiAgICAgICAgJGNvbW1lbnQgPX4gcy9cbi8gL2c7CiAgICAgICAgaWYgKCBzdWJzdHIoICRjb21tZW50LCAwLCAxICkgbmUgJyMnICkgewogICAgICAgICAgICAkY29tbWVudCA9ICcjJyAuICRjb21tZW50OwogICAgICAgIH0KICAgIH0KICAgICRyT3B0cy0+eydhZGQtbWlzc2luZy1lbHNlLWNvbW1lbnQnfSA9ICRjb21tZW50OwoKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGluaXRpYWxpemVfbWlzc2luZ19lbHNlX2NvbW1lbnQKCnN1YiBtYWtlX3N1Yl9tYXRjaGluZ19wYXR0ZXJuIHsKCiAgICAjIFBhdHRlcm5zIGZvciBzdGFuZGFyZGl6aW5nIG1hdGNoZXMgdG8gYmxvY2sgdHlwZXMgZm9yIHJlZ3VsYXIgc3VicyBhbmQKICAgICMgYW5vbnltb3VzIHN1YnMuIEV4YW1wbGVzCiAgICAjICAnc3ViIHByb2Nlc3MnIGlzIGEgbmFtZWQgc3ViCiAgICAjICAnc3ViIDo6bScgaXMgYSBuYW1lZCBzdWIKICAgICMgICdzdWInIGlzIGFuIGFub255bW91cyBzdWIKICAgICMgICdzdWI6JyBpcyBhIGxhYmVsLCBub3QgYSBzdWIKICAgICMgICdzdWIgOicgaXMgYSBsYWJlbCwgbm90IGEgc3ViICAgKCBibG9jayB0eXBlIHdpbGwgYmUgPHN1Yjo+ICkKICAgICMgICBzdWInXyBpcyBhIG5hbWVkIHN1YiAgICAgICAgICAgKCBibG9jayB0eXBlIHdpbGwgYmUgPHN1YiAnXz4gKQogICAgIyAgJ3N1YnN0cicgaXMgYSBrZXl3b3JkCiAgICAjIFNvIG5vdGUgdGhhdCBuYW1lZCBzdWJzIGFsd2F5cyBoYXZlIGEgc3BhY2UgYWZ0ZXIgJ3N1YicKICAgICRTVUJfUEFUVEVSTiAgPSAnXnN1YlxzJzsgICAgICAgICAjIG1hdGNoIG5vcm1hbCBzdWIKICAgICRBU1VCX1BBVFRFUk4gPSAnXnN1YiQnOyAgICAgICAgICAjIG1hdGNoIGFub255bW91cyBzdWIKICAgICVtYXRjaGVzX0FTVUIgPSAoICdzdWInID0+IDEgKTsKCiAgICAjIEZpeCB0aGUgcGF0dGVybnMgdG8gaW5jbHVkZSBhbnkgc3ViIGFsaWFzZXM6CiAgICAjIE5vdGUgdGhhdCBhbnkgJ3N1Yi1hbGlhcy1saXN0JyBoYXMgYmVlbiBwcmVwcm9jZXNzZWQgdG8KICAgICMgYmUgYSB0cmltbWVkLCBzcGFjZS1zZXBhcmF0ZWQgbGlzdCB3aGljaCBpbmNsdWRlcyAnc3ViJwogICAgIyBmb3IgZXhhbXBsZSwgaXQgbWlnaHQgYmUgJ3N1YiBtZXRob2QgZnVuJwogICAgbXkgQHdvcmRzOwogICAgbXkgJHN1Yl9hbGlhc19saXN0ID0gJHJPcHRzLT57J3N1Yi1hbGlhcy1saXN0J307CiAgICBpZiAoJHN1Yl9hbGlhc19saXN0KSB7CiAgICAgICAgQHdvcmRzID0gc3BsaXQgL1xzKy8sICRzdWJfYWxpYXNfbGlzdDsKICAgIH0KICAgIGVsc2UgewogICAgICAgIHB1c2ggQHdvcmRzLCAnc3ViJzsKICAgIH0KCiAgICAjICAgYWRkICdtZXRob2QnIHVubGVzcyB1c2UtZmVhdHVyZT0nbm9jbGFzcycgaXMgc2V0LgogICAgaWYgKCAhZGVmaW5lZCggJHJPcHRzLT57J3VzZS1mZWF0dXJlJ30gKQogICAgICAgIHx8ICRyT3B0cy0+eyd1c2UtZmVhdHVyZSd9ICF+IC9cYm5vY2xhc3NcYi8gKQogICAgewogICAgICAgIHB1c2ggQHdvcmRzLCAnbWV0aG9kJzsKICAgIH0KCiAgICAjIE5vdGUgKHNlZSBhbHNvIFJUICMxMzMxMzApOiBUaGVzZSBwYXR0ZXJucyBhcmUgdXNlZCBieQogICAgIyBzdWIgbWFrZV9ibG9ja19wYXR0ZXJuLCB3aGljaCBpcyB1c2VkIGZvciBtYWtpbmcgbW9zdCBwYXR0ZXJucy4KICAgICMgU28gdGhpcyBzdWIgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSBvdGhlciBwYXR0ZXJuLW1ha2luZyByb3V0aW5lcy4KICAgIGlmICggQHdvcmRzID4gMSApIHsKCiAgICAgICAgIyBUd28gd2F5cyBhcmUgcHJvdmlkZWQgdG8gbWF0Y2ggYW4gYW5vbnltb3VzIHN1YjoKICAgICAgICAjICRBU1VCX1BBVFRFUk4gLSB3aXRoIGEgcmVnZXggKG9sZCBtZXRob2QsIHNsb3cpCiAgICAgICAgIyAlbWF0Y2hlc19BU1VCIC0gd2l0aCBhIGhhc2ggbG9va3VwIChuZXcgbWV0aG9kLCBmYXN0ZXIpCgogICAgICAgIEBtYXRjaGVzX0FTVUJ7QHdvcmRzfSA9ICgxKSB4IHNjYWxhcihAd29yZHMpOwogICAgICAgIG15ICRhbGlhc19saXN0ID0gam9pbiAnfCcsIGtleXMgJW1hdGNoZXNfQVNVQjsKICAgICAgICAkU1VCX1BBVFRFUk4gID1+IHMvc3ViL1woJGFsaWFzX2xpc3RcKS87CiAgICAgICAgJEFTVUJfUEFUVEVSTiA9fiBzL3N1Yi9cKCRhbGlhc19saXN0XCkvOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgbWFrZV9zdWJfbWF0Y2hpbmdfcGF0dGVybgoKc3ViIG1ha2VfYmxfcGF0dGVybiB7CgogICAgIyBTZXQgZGVmYXVsdHMgbGlzdHMgdG8gcmV0YWluIGhpc3RvcmljYWwgZGVmYXVsdCBiZWhhdmlvciBmb3IgLWJsOgogICAgbXkgJGJsX2xpc3Rfc3RyaW5nICAgICAgICAgICA9ICcqJzsKICAgIG15ICRibF9leGNsdXNpb25fbGlzdF9zdHJpbmcgPSAnc29ydCBtYXAgZ3JlcCBldmFsIGFzdWInOwoKICAgIG15ICRibF9sb25nX25hbWUgICA9ICdvcGVuaW5nLWJyYWNlLW9uLW5ldy1saW5lJzsKICAgIG15ICRibGxfbG9uZ19uYW1lICA9ICdicmFjZS1sZWZ0LWxpc3QnOwogICAgbXkgJGJseGxfbG9uZ19uYW1lID0gJ2JyYWNlLWxlZnQtZXhjbHVzaW9uLWxpc3QnOwogICAgbXkgJHNibF9sb25nX25hbWUgID0gJ29wZW5pbmctc3ViLWJyYWNlLW9uLW5ldy1saW5lJzsKICAgIG15ICRhc2JsX2xvbmdfbmFtZSA9ICdvcGVuaW5nLWFub255bW91cy1zdWItYnJhY2Utb24tbmV3LWxpbmUnOwoKICAgIGlmICggZGVmaW5lZCggJHJPcHRzLT57JGJsbF9sb25nX25hbWV9ICkgJiYgJHJPcHRzLT57JGJsbF9sb25nX25hbWV9ICkgewogICAgICAgICRibF9saXN0X3N0cmluZyA9ICRyT3B0cy0+eyRibGxfbG9uZ19uYW1lfTsKICAgIH0KICAgIGlmICggJGJsX2xpc3Rfc3RyaW5nID1+IC9cYnN1YlxiLyApIHsKICAgICAgICAkck9wdHMtPnskc2JsX2xvbmdfbmFtZX0gfHw9ICRyT3B0cy0+eyRibF9sb25nX25hbWV9OwogICAgfQogICAgaWYgKCAkYmxfbGlzdF9zdHJpbmcgPX4gL1xiYXN1YlxiLyApIHsKICAgICAgICAkck9wdHMtPnskYXNibF9sb25nX25hbWV9IHx8PSAkck9wdHMtPnskYmxfbG9uZ19uYW1lfTsKICAgIH0KCiAgICAkYmxfcGF0dGVybiA9IG1ha2VfYmxvY2tfcGF0dGVybiggJy1ibGwnLCAkYmxfbGlzdF9zdHJpbmcgKTsKCiAgICAjIGZvciAtYmwsIGEgbGlzdCB3aXRoICcqJyB0dXJucyBvbiAtc2JsIGFuZCAtYXNibAogICAgaWYgKCAkYmxfcGF0dGVybiA9fiAvXC5cKi8gKSB7CgogICAgICAgIGlmICggIWRlZmluZWQoICRyT3B0cy0+eyRzYmxfbG9uZ19uYW1lfSApICkgewogICAgICAgICAgICAkck9wdHMtPnskc2JsX2xvbmdfbmFtZX0gPSAkck9wdHMtPnskYmxfbG9uZ19uYW1lfTsKICAgICAgICB9CgogICAgICAgIGlmICggICFkZWZpbmVkKCAkck9wdHMtPnskYXNibF9sb25nX25hbWV9ICkKICAgICAgICAgICAgJiYgZGVmaW5lZCggJHJPcHRzLT57JGJsbF9sb25nX25hbWV9ICkgKQogICAgICAgIHsKICAgICAgICAgICAgJHJPcHRzLT57JGFzYmxfbG9uZ19uYW1lfSA9ICRyT3B0cy0+eyRibF9sb25nX25hbWV9OwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoIGRlZmluZWQoICRyT3B0cy0+eyRibHhsX2xvbmdfbmFtZX0gKQogICAgICAgICYmICRyT3B0cy0+eyRibHhsX2xvbmdfbmFtZX0gKQogICAgewogICAgICAgICRibF9leGNsdXNpb25fbGlzdF9zdHJpbmcgPSAkck9wdHMtPnskYmx4bF9sb25nX25hbWV9OwogICAgICAgIGlmICggJGJsX2V4Y2x1c2lvbl9saXN0X3N0cmluZyA9fiAvXGJzdWJcYi8gKSB7CiAgICAgICAgICAgICRyT3B0cy0+eyRzYmxfbG9uZ19uYW1lfSA9IDA7CiAgICAgICAgfQogICAgICAgIGlmICggJGJsX2V4Y2x1c2lvbl9saXN0X3N0cmluZyA9fiAvXGJhc3ViXGIvICkgewogICAgICAgICAgICAkck9wdHMtPnskYXNibF9sb25nX25hbWV9ID0gMDsKICAgICAgICB9CiAgICB9CgogICAgJGJsX2V4Y2x1c2lvbl9wYXR0ZXJuID0KICAgICAgbWFrZV9ibG9ja19wYXR0ZXJuKCAnLWJseGwnLCAkYmxfZXhjbHVzaW9uX2xpc3Rfc3RyaW5nICk7CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBtYWtlX2JsX3BhdHRlcm4KCnN1YiBtYWtlX2JsaV9wYXR0ZXJuIHsKCiAgICAjIERlZmF1bHQgbGlzdCBvZiBibG9jayB0eXBlcyBmb3Igd2hpY2ggLWJsaSB3b3VsZCBhcHBseToKICAgIG15ICRibGlfbGlzdF9zdHJpbmcgPSAnaWYgZWxzZSBlbHNpZiB1bmxlc3Mgd2hpbGUgZm9yIGZvcmVhY2ggZG8gOiBzdWInOwogICAgbXkgJGJsaV9leGNsdXNpb25fbGlzdF9zdHJpbmcgPSBTUEFDRTsKCiAgICBpZiAoIGRlZmluZWQoICRyT3B0cy0+eydicmFjZS1sZWZ0LWFuZC1pbmRlbnQtbGlzdCd9ICkKICAgICAgICAmJiAkck9wdHMtPnsnYnJhY2UtbGVmdC1hbmQtaW5kZW50LWxpc3QnfSApCiAgICB7CiAgICAgICAgJGJsaV9saXN0X3N0cmluZyA9ICRyT3B0cy0+eydicmFjZS1sZWZ0LWFuZC1pbmRlbnQtbGlzdCd9OwogICAgfQoKICAgICRibGlfcGF0dGVybiA9IG1ha2VfYmxvY2tfcGF0dGVybiggJy1ibGlsJywgJGJsaV9saXN0X3N0cmluZyApOwoKICAgIGlmICggZGVmaW5lZCggJHJPcHRzLT57J2JyYWNlLWxlZnQtYW5kLWluZGVudC1leGNsdXNpb24tbGlzdCd9ICkKICAgICAgICAmJiAkck9wdHMtPnsnYnJhY2UtbGVmdC1hbmQtaW5kZW50LWV4Y2x1c2lvbi1saXN0J30gKQogICAgewogICAgICAgICRibGlfZXhjbHVzaW9uX2xpc3Rfc3RyaW5nID0KICAgICAgICAgICRyT3B0cy0+eydicmFjZS1sZWZ0LWFuZC1pbmRlbnQtZXhjbHVzaW9uLWxpc3QnfTsKICAgIH0KICAgICRibGlfZXhjbHVzaW9uX3BhdHRlcm4gPQogICAgICBtYWtlX2Jsb2NrX3BhdHRlcm4oICctYmxpeGwnLCAkYmxpX2V4Y2x1c2lvbl9saXN0X3N0cmluZyApOwogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgbWFrZV9ibGlfcGF0dGVybgoKc3ViIG1ha2Vfa2V5d29yZF9ncm91cF9saXN0X3BhdHRlcm4gewoKICAgICMgVHVybiBhbnkgaW5wdXQgbGlzdCBpbnRvIGEgcmVnZXggZm9yIHJlY29nbml6aW5nIHNlbGVjdGVkIGJsb2NrIHR5cGVzLgogICAgIyBIZXJlIGFyZSB0aGUgZGVmYXVsdHM6CiAgICAka2V5d29yZF9ncm91cF9saXN0X3BhdHRlcm4gICAgICAgICA9ICdeKG91cnxsb2NhbHxteXx1c2V8cmVxdWlyZXwpJCc7CiAgICAka2V5d29yZF9ncm91cF9saXN0X2NvbW1lbnRfcGF0dGVybiA9IEVNUFRZX1NUUklORzsKICAgIGlmICggZGVmaW5lZCggJHJPcHRzLT57J2tleXdvcmQtZ3JvdXAtYmxhbmtzLWxpc3QnfSApCiAgICAgICAgJiYgJHJPcHRzLT57J2tleXdvcmQtZ3JvdXAtYmxhbmtzLWxpc3QnfSApCiAgICB7CiAgICAgICAgbXkgQHdvcmRzID0gc3BsaXQgL1xzKy8sICRyT3B0cy0+eydrZXl3b3JkLWdyb3VwLWJsYW5rcy1saXN0J307CiAgICAgICAgbXkgQGtleXdvcmRfbGlzdDsKICAgICAgICBteSBAY29tbWVudF9saXN0OwogICAgICAgIGZvcmVhY2ggbXkgJHdvcmQgKEB3b3JkcykgewogICAgICAgICAgICBpZiAoICR3b3JkIGVxICdCQycgfHwgJHdvcmQgZXEgJ1NCQycgKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBjb21tZW50X2xpc3QsICR3b3JkOwogICAgICAgICAgICAgICAgaWYgKCAkd29yZCBlcSAnU0JDJyApIHsgcHVzaCBAY29tbWVudF9saXN0LCAnU0JDWCcgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcHVzaCBAa2V5d29yZF9saXN0LCAkd29yZDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAka2V5d29yZF9ncm91cF9saXN0X3BhdHRlcm4gPQogICAgICAgICAgbWFrZV9ibG9ja19wYXR0ZXJuKCAnLWtnYmwnLCAkck9wdHMtPnsna2V5d29yZC1ncm91cC1ibGFua3MtbGlzdCd9ICk7CiAgICAgICAgJGtleXdvcmRfZ3JvdXBfbGlzdF9jb21tZW50X3BhdHRlcm4gPQogICAgICAgICAgbWFrZV9ibG9ja19wYXR0ZXJuKCAnLWtnYmwnLCBqb2luKCBTUEFDRSwgQGNvbW1lbnRfbGlzdCApICk7CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBtYWtlX2tleXdvcmRfZ3JvdXBfbGlzdF9wYXR0ZXJuCgpzdWIgbWFrZV9ibG9ja19icmFjZV92ZXJ0aWNhbF90aWdodG5lc3NfcGF0dGVybiB7CgogICAgIyBUdXJuIGFueSBpbnB1dCBsaXN0IGludG8gYSByZWdleCBmb3IgcmVjb2duaXppbmcgc2VsZWN0ZWQgYmxvY2sgdHlwZXMKICAgICRibG9ja19icmFjZV92ZXJ0aWNhbF90aWdodG5lc3NfcGF0dGVybiA9CiAgICAgICdeKChpZnxlbHNlfGVsc2lmfHVubGVzc3x3aGlsZXxmb3J8Zm9yZWFjaHxkb3xcdys6KSR8c3ViKSc7CiAgICBpZiAoIGRlZmluZWQoICRyT3B0cy0+eydibG9jay1icmFjZS12ZXJ0aWNhbC10aWdodG5lc3MtbGlzdCd9ICkKICAgICAgICAmJiAkck9wdHMtPnsnYmxvY2stYnJhY2UtdmVydGljYWwtdGlnaHRuZXNzLWxpc3QnfSApCiAgICB7CiAgICAgICAgJGJsb2NrX2JyYWNlX3ZlcnRpY2FsX3RpZ2h0bmVzc19wYXR0ZXJuID0KICAgICAgICAgIG1ha2VfYmxvY2tfcGF0dGVybiggJy1iYnZ0bCcsCiAgICAgICAgICAgICRyT3B0cy0+eydibG9jay1icmFjZS12ZXJ0aWNhbC10aWdodG5lc3MtbGlzdCd9ICk7CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBtYWtlX2Jsb2NrX2JyYWNlX3ZlcnRpY2FsX3RpZ2h0bmVzc19wYXR0ZXJuCgpzdWIgbWFrZV9ibGFua19saW5lX3BhdHRlcm4gewoKICAgICRibGFua19saW5lc19iZWZvcmVfY2xvc2luZ19ibG9ja19wYXR0ZXJuID0gJFNVQl9QQVRURVJOOwogICAgbXkgJGtleSA9ICdibGFuay1saW5lcy1iZWZvcmUtY2xvc2luZy1ibG9jay1saXN0JzsKICAgIGlmICggZGVmaW5lZCggJHJPcHRzLT57JGtleX0gKSAmJiAkck9wdHMtPnska2V5fSApIHsKICAgICAgICAkYmxhbmtfbGluZXNfYmVmb3JlX2Nsb3NpbmdfYmxvY2tfcGF0dGVybiA9CiAgICAgICAgICBtYWtlX2Jsb2NrX3BhdHRlcm4oICctYmxiY2wnLCAkck9wdHMtPnska2V5fSApOwogICAgfQoKICAgICRibGFua19saW5lc19hZnRlcl9vcGVuaW5nX2Jsb2NrX3BhdHRlcm4gPSAkU1VCX1BBVFRFUk47CiAgICAka2V5ID0gJ2JsYW5rLWxpbmVzLWFmdGVyLW9wZW5pbmctYmxvY2stbGlzdCc7CiAgICBpZiAoIGRlZmluZWQoICRyT3B0cy0+eyRrZXl9ICkgJiYgJHJPcHRzLT57JGtleX0gKSB7CiAgICAgICAgJGJsYW5rX2xpbmVzX2FmdGVyX29wZW5pbmdfYmxvY2tfcGF0dGVybiA9CiAgICAgICAgICBtYWtlX2Jsb2NrX3BhdHRlcm4oICctYmxhb2wnLCAkck9wdHMtPnska2V5fSApOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgbWFrZV9ibGFua19saW5lX3BhdHRlcm4KCnN1YiBtYWtlX2Jsb2NrX3BhdHRlcm4gewoKICAgICMgIEdpdmVuIGEgc3RyaW5nIG9mIGJsb2NrLXR5cGUga2V5d29yZHMsIHJldHVybiBhIHJlZ2V4IHRvIG1hdGNoIHRoZW0KICAgICMgIFRoZSBvbmx5IHRyaWNreSBwYXJ0IGlzIHRoYXQgbGFiZWxzIGFyZSBpbmRpY2F0ZWQgd2l0aCBhIHNpbmdsZSAnOicKICAgICMgIGFuZCB0aGUgJ3N1YicgdG9rZW4gdGV4dCBtYXkgaGF2ZSBhZGRpdGlvbmFsIHRleHQgYWZ0ZXIgaXQgKG5hbWUgb2YKICAgICMgIHN1YikuCiAgICAjCiAgICAjICBFeGFtcGxlOgogICAgIwogICAgIyAgIGlucHV0IHN0cmluZzogImlmIGVsc2UgZWxzaWYgdW5sZXNzIHdoaWxlIGZvciBmb3JlYWNoIGRvIDogc3ViIjsKICAgICMgICBwYXR0ZXJuOiAgJ14oKGlmfGVsc2V8ZWxzaWZ8dW5sZXNzfHdoaWxlfGZvcnxmb3JlYWNofGRvfFx3KzopJHxzdWIpJzsKCiAgICAjICBNaW5vciBVcGRhdGU6CiAgICAjCiAgICAjICBUbyBkaXN0aW5ndWlzaCBiZXR3ZWVuIGFub255bW91cyBzdWJzIGFuZCBuYW1lZCBzdWJzLCB1c2UgJ3N1YicgdG8KICAgICMgICBpbmRpY2F0ZSBhIG5hbWVkIHN1YiwgYW5kICdhc3ViJyB0byBpbmRpY2F0ZSBhbiBhbm9ueW1vdXMgc3ViCgogICAgbXkgKCAkYWJicmV2LCAkc3RyaW5nICkgPSBAXzsKICAgIG15IEBsaXN0ICA9IHNwbGl0X3dvcmRzKCRzdHJpbmcpOwogICAgbXkgQHdvcmRzID0gKCk7CiAgICBteSAlc2VlbjsKICAgIGZvciBteSAkaSAoQGxpc3QpIHsKICAgICAgICBpZiAoICRpIGVxICcqJyApIHsgbXkgJHBhdHRlcm4gPSAnXi4qJzsgcmV0dXJuICRwYXR0ZXJuIH0KICAgICAgICBuZXh0IGlmICRzZWVueyRpfTsKICAgICAgICAkc2VlbnskaX0gPSAxOwogICAgICAgIGlmICggJGkgZXEgJ3N1YicgKSB7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJGkgZXEgJ2FzdWInICkgewogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRpIGVxICc7JyApIHsKICAgICAgICAgICAgcHVzaCBAd29yZHMsICc7JzsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkaSBlcSAneycgKSB7CiAgICAgICAgICAgIHB1c2ggQHdvcmRzLCAnXHsnOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRpIGVxICc6JyApIHsKICAgICAgICAgICAgcHVzaCBAd29yZHMsICdcdys6JzsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkaSA9fiAvXlx3LyApIHsKICAgICAgICAgICAgcHVzaCBAd29yZHMsICRpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgV2FybigidW5yZWNvZ25pemVkIGJsb2NrIHR5cGUgJGkgYWZ0ZXIgJGFiYnJldiwgaWdub3JpbmdcbiIpOwogICAgICAgIH0KICAgIH0KCiAgICAjIEZpeCAyIGZvciBjMDkxLCBwcmV2ZW50IHRoZSBwYXR0ZXJuIGZyb20gbWF0Y2hpbmcgYW4gZW1wdHkgc3RyaW5nCiAgICAjICcxICcgaXMgYW4gaW1wb3NzaWJsZSBibG9jayBuYW1lLgogICAgaWYgKCAhQHdvcmRzICkgeyBwdXNoIEB3b3JkcywgIjEgIiB9CgogICAgbXkgJHBhdHRlcm4gICAgICA9ICcoJyAuIGpvaW4oICd8JywgQHdvcmRzICkgLiAnKSQnOwogICAgbXkgJHN1Yl9wYXR0ZXJucyA9IEVNUFRZX1NUUklORzsKICAgIGlmICggJHNlZW57J3N1Yid9ICkgewogICAgICAgICRzdWJfcGF0dGVybnMgLj0gJ3wnIC4gJFNVQl9QQVRURVJOOwogICAgfQogICAgaWYgKCAkc2VlbnsnYXN1Yid9ICkgewogICAgICAgICRzdWJfcGF0dGVybnMgLj0gJ3wnIC4gJEFTVUJfUEFUVEVSTjsKICAgIH0KICAgIGlmICgkc3ViX3BhdHRlcm5zKSB7CiAgICAgICAgJHBhdHRlcm4gPSAnKCcgLiAkcGF0dGVybiAuICRzdWJfcGF0dGVybnMgLiAnKSc7CiAgICB9CiAgICAkcGF0dGVybiA9ICdeJyAuICRwYXR0ZXJuOwogICAgcmV0dXJuICRwYXR0ZXJuOwp9ICMjIGVuZCBzdWIgbWFrZV9ibG9ja19wYXR0ZXJuCgpzdWIgbWFrZV9zdGF0aWNfc2lkZV9jb21tZW50X3BhdHRlcm4gewoKICAgICMgQ3JlYXRlIHRoZSBwYXR0ZXJuIHVzZWQgdG8gaWRlbnRpZnkgc3RhdGljIHNpZGUgY29tbWVudHMKICAgICRzdGF0aWNfc2lkZV9jb21tZW50X3BhdHRlcm4gPSAnXiMjJzsKCiAgICAjIGFsbG93IHRoZSB1c2VyIHRvIGNoYW5nZSBpdAogICAgaWYgKCAkck9wdHMtPnsnc3RhdGljLXNpZGUtY29tbWVudC1wcmVmaXgnfSApIHsKICAgICAgICBteSAkcHJlZml4ID0gJHJPcHRzLT57J3N0YXRpYy1zaWRlLWNvbW1lbnQtcHJlZml4J307CiAgICAgICAgJHByZWZpeCA9fiBzL15ccysvLzsKICAgICAgICBteSAkcGF0dGVybiA9ICdeJyAuICRwcmVmaXg7CiAgICAgICAgaWYgKCBiYWRfcGF0dGVybigkcGF0dGVybikgKSB7CiAgICAgICAgICAgIERpZSgKIkVSUk9SOiB0aGUgLXNzY3AgcHJlZml4ICckcHJlZml4JyBjYXVzZXMgdGhlIGludmFsaWQgcmVnZXggJyRwYXR0ZXJuJ1xuIgogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkc3RhdGljX3NpZGVfY29tbWVudF9wYXR0ZXJuID0gJHBhdHRlcm47CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBtYWtlX3N0YXRpY19zaWRlX2NvbW1lbnRfcGF0dGVybgoKc3ViIG1ha2VfY2xvc2luZ19zaWRlX2NvbW1lbnRfcHJlZml4IHsKCiAgICAjIEJlIHN1cmUgd2UgaGF2ZSBhIHZhbGlkIGNsb3Npbmcgc2lkZSBjb21tZW50IHByZWZpeAogICAgbXkgJGNzY19wcmVmaXggPSAkck9wdHMtPnsnY2xvc2luZy1zaWRlLWNvbW1lbnQtcHJlZml4J307CiAgICBteSAkY3NjX3ByZWZpeF9wYXR0ZXJuOwogICAgaWYgKCAhZGVmaW5lZCgkY3NjX3ByZWZpeCkgKSB7CiAgICAgICAgJGNzY19wcmVmaXggICAgICAgICA9ICcjIyBlbmQnOwogICAgICAgICRjc2NfcHJlZml4X3BhdHRlcm4gPSAnXiMjXHMrZW5kJzsKICAgIH0KICAgIGVsc2UgewogICAgICAgIG15ICR0ZXN0X2NzY19wcmVmaXggPSAkY3NjX3ByZWZpeDsKICAgICAgICBpZiAoICR0ZXN0X2NzY19wcmVmaXggIX4gL14jLyApIHsKICAgICAgICAgICAgJHRlc3RfY3NjX3ByZWZpeCA9ICcjJyAuICR0ZXN0X2NzY19wcmVmaXg7CiAgICAgICAgfQoKICAgICAgICAjIG1ha2UgYSByZWdleCB0byByZWNvZ25pemUgdGhlIHByZWZpeAogICAgICAgIG15ICR0ZXN0X2NzY19wcmVmaXhfcGF0dGVybiA9ICR0ZXN0X2NzY19wcmVmaXg7CgogICAgICAgICMgZXNjYXBlIGFueSBzcGVjaWFsIGNoYXJhY3RlcnMKICAgICAgICAkdGVzdF9jc2NfcHJlZml4X3BhdHRlcm4gPX4gcy8oW14jXHNcd10pL1xcJDEvZzsKCiAgICAgICAgJHRlc3RfY3NjX3ByZWZpeF9wYXR0ZXJuID0gJ14nIC4gJHRlc3RfY3NjX3ByZWZpeF9wYXR0ZXJuOwoKICAgICAgICAjIGFsbG93IGV4YWN0IG51bWJlciBvZiBpbnRlcm1lZGlhdGUgc3BhY2VzIHRvIHZhcnkKICAgICAgICAkdGVzdF9jc2NfcHJlZml4X3BhdHRlcm4gPX4gcy9ccysvXFxzXCsvZzsKCiAgICAgICAgIyBtYWtlIHN1cmUgd2UgaGF2ZSBhIGdvb2QgcGF0dGVybgogICAgICAgICMgaWYgd2UgZmFpbCB0aGlzIHdlIHByb2JhYmx5IGhhdmUgYW4gZXJyb3IgaW4gZXNjYXBpbmcKICAgICAgICAjIGNoYXJhY3RlcnMuCgogICAgICAgIGlmICggYmFkX3BhdHRlcm4oJHRlc3RfY3NjX3ByZWZpeF9wYXR0ZXJuKSApIHsKCiAgICAgICAgICAgICMgc2hvdWxkbid0IGhhcHBlbi4ubXVzdCBoYXZlIHNjcmV3ZWQgdXAgZXNjYXBpbmcsIGFib3ZlCiAgICAgICAgICAgIGlmIChERVZFTF9NT0RFKSB7CiAgICAgICAgICAgICAgICBGYXVsdCg8PEVPTSk7ClByb2dyYW0gRXJyb3I6IHRoZSAtY3NjcCBwcmVmaXggJyRjc2NfcHJlZml4JyBjYXVzZWQgdGhlIGludmFsaWQgcmVnZXggJyRjc2NfcHJlZml4X3BhdHRlcm4nCkVPTQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGp1c3Qgd2FybiBhbmQga2VlcCBnb2luZyB3aXRoIGRlZmF1bHRzCiAgICAgICAgICAgIFdhcm4oCiJFcnJvcjogdGhlIC1jc2NwIHByZWZpeCAnJGNzY19wcmVmaXgnIGNhdXNlZCB0aGUgaW52YWxpZCByZWdleCAnJGNzY19wcmVmaXhfcGF0dGVybidcbiIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgV2FybigiUGxlYXNlIGNvbnNpZGVyIHVzaW5nIGEgc2ltcGxlciAtY3NjcCBwcmVmaXhcbiIpOwogICAgICAgICAgICBXYXJuKCJVc2luZyBkZWZhdWx0IC1jc2NwIGluc3RlYWQ7IHBsZWFzZSBjaGVjayBvdXRwdXRcbiIpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJGNzY19wcmVmaXggICAgICAgICA9ICR0ZXN0X2NzY19wcmVmaXg7CiAgICAgICAgICAgICRjc2NfcHJlZml4X3BhdHRlcm4gPSAkdGVzdF9jc2NfcHJlZml4X3BhdHRlcm47CiAgICAgICAgfQogICAgfQogICAgJHJPcHRzLT57J2Nsb3Npbmctc2lkZS1jb21tZW50LXByZWZpeCd9ID0gJGNzY19wcmVmaXg7CiAgICAkY2xvc2luZ19zaWRlX2NvbW1lbnRfcHJlZml4X3BhdHRlcm4gPSAkY3NjX3ByZWZpeF9wYXR0ZXJuOwogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgbWFrZV9jbG9zaW5nX3NpZGVfY29tbWVudF9wcmVmaXgKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQ09ERSBTRUNUSU9OIDQ6IHJlY2VpdmUgbGluZXMgZnJvbSB0aGUgdG9rZW5pemVyCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgp7ICAgICMjIGJlZ2luIGNsb3N1cmUgd3JpdGVfbGluZQoKICAgIG15ICRuZXN0aW5nX2RlcHRoOwoKICAgICMgVmFyaWFibGVzIHVzZWQgYnkgc3ViIGNoZWNrX3NlcXVlbmNlX251bWJlcnM6CiAgICBteSAkaW5pdGlhbF9zZXFubzsKICAgIG15ICRsYXN0X3NlcW5vOwogICAgbXkgJXNhd19vcGVuaW5nX3NlcW5vOwogICAgbXkgJXNhd19jbG9zaW5nX3NlcW5vOwoKICAgICMgdmFyaWFibGVzIGZvciB0aGUgLXF3YWYgb3B0aW9uCiAgICBteSAkaW5fcXdfc2Vxbm87CiAgICBteSAkaW5fcXdfY29tbWFfY291bnQ7CiAgICBteSAkbGFzdF9uZXdfc2Vxbm87CiAgICBteSAlbmV3X3NlcW5vX2Zyb21fb2xkX3NlcW5vOwogICAgbXkgJGxhc3RfZW5kaW5nX2luX3F1b3RlOwogICAgbXkgJGFkZGVkX3NlcW5vX2NvdW50OwoKICAgIHN1YiBpbml0aWFsaXplX3dyaXRlX2xpbmUgewoKICAgICAgICAkbmVzdGluZ19kZXB0aCA9IHVuZGVmOwoKICAgICAgICAkaW5pdGlhbF9zZXFubyAgICAgPSB1bmRlZjsKICAgICAgICAkbGFzdF9zZXFubyAgICAgICAgPSBTRVFfUk9PVDsKICAgICAgICAkbGFzdF9uZXdfc2Vxbm8gICAgPSBTRVFfUk9PVDsKICAgICAgICAlc2F3X29wZW5pbmdfc2Vxbm8gPSAoKTsKICAgICAgICAlc2F3X2Nsb3Npbmdfc2Vxbm8gPSAoKTsKCiAgICAgICAgJGluX3F3X3NlcW5vICAgICAgICAgICAgICA9IDA7CiAgICAgICAgJGluX3F3X2NvbW1hX2NvdW50ICAgICAgICA9IDA7ICAgICMgYjE0OTEKICAgICAgICAlbmV3X3NlcW5vX2Zyb21fb2xkX3NlcW5vID0gKCk7CiAgICAgICAgJGxhc3RfZW5kaW5nX2luX3F1b3RlICAgICA9IDA7CiAgICAgICAgJGFkZGVkX3NlcW5vX2NvdW50ICAgICAgICA9IDA7CgogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBpbml0aWFsaXplX3dyaXRlX2xpbmUKCiAgICBzdWIgY2hlY2tfc2VxdWVuY2VfbnVtYmVycyB7CgogICAgICAgICMgUm91dGluZSBmb3IgY2hlY2tpbmcgc2VxdWVuY2UgbnVtYmVycy4gIFRoaXMgb25seSBuZWVkcyB0byBiZQogICAgICAgICMgZG9uZSBvY2Nhc2lvbmFsbHkgaW4gREVWRUxfTU9ERSB0byBiZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgd29ya2luZwogICAgICAgICMgY29ycmVjdGx5LgogICAgICAgIG15ICggJHJ0b2tlbnMsICRydG9rZW5fdHlwZSwgJHJ0eXBlX3NlcXVlbmNlLCAkaW5wdXRfbGluZV9ubyApID0gQF87CiAgICAgICAgbXkgJGptYXggPSBAeyRydG9rZW5zfSAtIDE7CiAgICAgICAgcmV0dXJuIGlmICggJGptYXggPCAwICk7CiAgICAgICAgZm9yZWFjaCBteSAkaiAoIDAgLi4gJGptYXggKSB7CiAgICAgICAgICAgIG15ICRzZXFubyA9ICRydHlwZV9zZXF1ZW5jZS0+WyRqXTsKICAgICAgICAgICAgbXkgJHRva2VuID0gJHJ0b2tlbnMtPlskal07CiAgICAgICAgICAgIG15ICR0eXBlICA9ICRydG9rZW5fdHlwZS0+WyRqXTsKICAgICAgICAgICAgJHNlcW5vID0gRU1QVFlfU1RSSU5HIHVubGVzcyAoIGRlZmluZWQoJHNlcW5vKSApOwogICAgICAgICAgICBteSAkZXJyX21zZyA9CiJFcnJvciBhdCBqPSRqLCBsaW5lIG51bWJlciAkaW5wdXRfbGluZV9ubywgc2Vxbm89JyRzZXFubycsIHR5cGU9JyR0eXBlJywgdG9rPSckdG9rZW4nOlxuIjsKCiAgICAgICAgICAgIGlmICggISRzZXFubyApIHsKCiAgICAgICAgICAgIyBTZXF1ZW5jZSBudW1iZXJzIGFyZSBnZW5lcmF0ZWQgZm9yIG9wZW5pbmcgdG9rZW5zLCBzbyBldmVyeSBvcGVuaW5nCiAgICAgICAgICAgIyB0b2tlbiBzaG91bGQgYmUgc2VxdWVuY2VkLiAgQ2xvc2luZyB0b2tlbnMgd2lsbCBiZSB1bnNlcXVlbmNlZAogICAgICAgICAgICMgaWYgdGhleSBkbyBub3QgaGF2ZSBhIG1hdGNoaW5nIG9wZW5pbmcgdG9rZW4uCiAgICAgICAgICAgICAgICBpZiAoICAgJGlzX29wZW5pbmdfc2VxdWVuY2VfdG9rZW57JHRva2VufQogICAgICAgICAgICAgICAgICAgICYmICR0eXBlIG5lICdxJwogICAgICAgICAgICAgICAgICAgICYmICR0eXBlIG5lICdRJyApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgRmF1bHQoCiAgICAgICAgICAgICAgICAgICAgICAgIDw8RU9NCiRlcnJfbXNnIFVuZXhwZWN0ZWQgb3BlbmluZyB0b2tlbiB3aXRob3V0IHNlcXVlbmNlIG51bWJlcgpFT00KICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgU2F2ZSBzdGFydGluZyBzZXFubyB0byBpZGVudGlmeSBzZXF1ZW5jZSBtZXRob2Q6CiAgICAgICAgICAgICAgICAjIE5ldyBtZXRob2Qgc3RhcnRzIHdpdGggMiBhbmQgaGFzIGNvbnRpbnVvdXMgbnVtYmVyaW5nCiAgICAgICAgICAgICAgICAjIE9sZCBtZXRob2QgKE5PVCBVU0VEKSBzdGFydHMgd2l0aCA+MiBhbmQgbWF5IGhhdmUgZ2FwcwogICAgICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkaW5pdGlhbF9zZXFubykgKSB7CiAgICAgICAgICAgICAgICAgICAgJGluaXRpYWxfc2Vxbm8gPSAkc2Vxbm87CgogICAgICAgICAgICAgICAgICAgICMgQmUgc3VyZSB0aGF0IHNlcXVlbmNlIG51bWJlcnMgc3RhcnQgd2l0aCAyLiBJZiBub3QsCiAgICAgICAgICAgICAgICAgICAgIyB0aGVyZSBpcyBhIHByb2dyYW1taW5nIGVycm9yIGluIHRoZSB0b2tlbml6ZXIuCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkaW5pdGlhbF9zZXFubyAhPSAyICkgewogICAgICAgICAgICAgICAgICAgICAgICBGYXVsdCg8PEVPTSk7CkV4cGVjdGluZyBpbml0aWFsIHNlcXVlbmNlIG51bWJlciBvZiAyIGJ1dCBnb3QgJyRpbml0aWFsX3NlcW5vJwpFT00KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgQmUgc3VyZSB0aGUgcm9vdCBzZXF1ZW5jZSBudW1iZXIgaXMgMS4gVGhpcyBpcyBzZXQKICAgICAgICAgICAgICAgICAgICAjIGFzIGEgY29uc3RhbnQgYXQgdGhlIHRvcCBvZiB0aGlzIG1vZHVsZS4KICAgICAgICAgICAgICAgICAgICBpZiAoIFNFUV9ST09UICE9IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRTRVFfUk9PVCA9IFNFUV9ST09UOwogICAgICAgICAgICAgICAgICAgICAgICBGYXVsdCg8PEVPTSk7ClRoZSBjb25zdGFudCBTRVFfUk9PVCBoYXMgYmVlbiBjaGFuZ2VkIGZyb20gMSB0byAnJFNFUV9ST09UJy4KRU9NCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggJGlzX29wZW5pbmdfc2VxdWVuY2VfdG9rZW57JHRva2VufSApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBOZXcgbWV0aG9kIHNob3VsZCBoYXZlIGNvbnRpbnVvdXMgbnVtYmVyaW5nCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkaW5pdGlhbF9zZXFubyA9PSAyICYmICRzZXFubyAhPSAkbGFzdF9zZXFubyArIDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEZhdWx0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPDxFT00KJGVycl9tc2cgVW5leHBlY3RlZCBvcGVuaW5nIHNlcXVlbmNlIG51bWJlcjogcHJldmlvdXMgc2Vxbm89JGxhc3Rfc2Vxbm8sIGJ1dCBzZXFubz0gJHNlcW5vCkVPTQogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkbGFzdF9zZXFubyA9ICRzZXFubzsKCiAgICAgICAgICAgICAgICAgICAgIyBOdW1iZXJzIG11c3QgYmUgdW5pcXVlCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkc2F3X29wZW5pbmdfc2Vxbm97JHNlcW5vfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGxubyA9ICRzYXdfb3BlbmluZ19zZXFub3skc2Vxbm99OwogICAgICAgICAgICAgICAgICAgICAgICBGYXVsdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8RU9NCiRlcnJfbXNnIEFscmVhZHkgc2F3IGFuIG9wZW5pbmcgdG9rZW5zIGF0IGxpbmUgJGxubyB3aXRoIHRoaXMgc2VxdWVuY2UgbnVtYmVyCkVPTQogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkc2F3X29wZW5pbmdfc2Vxbm97JHNlcW5vfSA9ICRpbnB1dF9saW5lX25vOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgb25seSBvbmUgY2xvc2luZyBpdGVtIHBlciBzZXFubwogICAgICAgICAgICAgICAgZWxzaWYgKCAkaXNfY2xvc2luZ19zZXF1ZW5jZV90b2tlbnskdG9rZW59ICkgewogICAgICAgICAgICAgICAgICAgIGlmICggJHNhd19jbG9zaW5nX3NlcW5veyRzZXFub30gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRsbm8gPSAkc2F3X2Nsb3Npbmdfc2Vxbm97JHNlcW5vfTsKICAgICAgICAgICAgICAgICAgICAgICAgRmF1bHQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PEVPTQokZXJyX21zZyBBbHJlYWR5IHNhdyBhIGNsb3NpbmcgdG9rZW4gd2l0aCB0aGlzIHNlcW5vICBhdCBsaW5lICRsbm8KRU9NCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRzYXdfY2xvc2luZ19zZXFub3skc2Vxbm99ID0gJGlucHV0X2xpbmVfbm87CgogICAgICAgICAgICAgICAgICAgICMgRXZlcnkgY2xvc2luZyBzZXFubyBtdXN0IGhhdmUgYW4gb3BlbmluZyBzZXFubwogICAgICAgICAgICAgICAgICAgIGlmICggISRzYXdfb3BlbmluZ19zZXFub3skc2Vxbm99ICkgewogICAgICAgICAgICAgICAgICAgICAgICBGYXVsdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8RU9NCiRlcnJfbXNnIFNhdyBhIGNsb3NpbmcgdG9rZW4gYnV0IG5vIG9wZW5pbmcgdG9rZW4gd2l0aCB0aGlzIHNlcW5vCkVPTQogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIFNlcXVlbmNlZCBpdGVtcyBtdXN0IGJlIG9wZW5pbmcgb3IgY2xvc2luZwogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgRmF1bHQoCiAgICAgICAgICAgICAgICAgICAgICAgIDw8RU9NCiRlcnJfbXNnIFVuZXhwZWN0ZWQgdG9rZW4gdHlwZSB3aXRoIGEgc2VxdWVuY2UgbnVtYmVyCkVPTQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGNoZWNrX3NlcXVlbmNlX251bWJlcnMKCiAgICAjIGhhc2gga2V5cyB3aGljaCBhcmUgY29tbW9uIHRvIG9sZCBhbmQgbmV3IGxpbmVfb2ZfdG9rZW5zCiAgICBteSBAY29tbW9uX2tleXM7CgogICAgQkVHSU4gewogICAgICAgIEBjb21tb25fa2V5cyA9IHF3KAogICAgICAgICAgX2N1cmx5X2JyYWNlX2RlcHRoICAgICAgICAgX2VuZGluZ19pbl9xdW90ZQogICAgICAgICAgX2d1ZXNzZWRfaW5kZW50YXRpb25fbGV2ZWwgX2xpbmVfbnVtYmVyCiAgICAgICAgICBfbGluZV90ZXh0ICAgICAgICAgICAgICAgICBfbGluZV90eXBlCiAgICAgICAgICBfcGFyZW5fZGVwdGggICAgICAgICAgICAgICBfc3F1YXJlX2JyYWNrZXRfZGVwdGgKICAgICAgICAgIF9zdGFydGluZ19pbl9xdW90ZQogICAgICAgICk7CiAgICB9CgogICAgc3ViIHdyaXRlX2xpbmUgewoKICAgICAgICBteSAoICRzZWxmLCAkbGluZV9vZl90b2tlbnNfaW5wdXQgKSA9IEBfOwoKICAgICAgICAjIFRoaXMgcm91dGluZSByZWNlaXZlcyBsaW5lcyBvbmUtYnktb25lIGZyb20gdGhlIHRva2VuaXplciBhbmQgc3RvcmVzCiAgICAgICAgIyB0aGVtIGluIGEgZm9ybWF0IHN1aXRhYmxlIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuICBBZnRlciB0aGUgbGFzdAogICAgICAgICMgbGluZSBoYXMgYmVlbiBzZW50LCB0aGUgdG9rZW5pemVyIHdpbGwgY2FsbCBzdWIgJ2ZpbmlzaF9mb3JtYXR0aW5nJwogICAgICAgICMgdG8gZG8gdGhlIGFjdHVhbCBmb3JtYXR0aW5nLgoKICAgICAgICAjIEdpdmVuOgogICAgICAgICMgICAkbGluZV9vZl90b2tlbnNfaW5wdXQgPSBoYXNoIHJlZiBvZiBvbmUgbGluZSBmcm9tIHRoZSB0b2tlbml6ZXIKCiAgICAgICAgbXkgJHJMTCAgICAgICAgICAgID0gJHNlbGYtPltfckxMX107CiAgICAgICAgbXkgJGxpbmVfb2ZfdG9rZW5zID0ge307CgogICAgICAgICMgY29weSBjb21tb24gaGFzaCBrZXkgdmFsdWVzCiAgICAgICAgQHskbGluZV9vZl90b2tlbnN9e0Bjb21tb25fa2V5c30gPQogICAgICAgICAgQHskbGluZV9vZl90b2tlbnNfaW5wdXR9e0Bjb21tb25fa2V5c307CgogICAgICAgIG15ICRsaW5lX3R5cGUgPSAkbGluZV9vZl90b2tlbnNfaW5wdXQtPntfbGluZV90eXBlfTsKICAgICAgICBteSAkdGVlX291dHB1dDsKCiAgICAgICAgbXkgJEtsaW1pdCA9ICRzZWxmLT5bX0tsaW1pdF9dOwogICAgICAgIG15ICggJEtmaXJzdCwgJEtsYXN0ICk7CgogICAgICAgICMgSGFuZGxlIGxpbmUgb2Ygbm9uLWNvZGUKICAgICAgICBpZiAoICRsaW5lX3R5cGUgbmUgJ0NPREUnICkgewogICAgICAgICAgICAkdGVlX291dHB1dCB8fD0gJHJPcHRzX3RlZV9wb2QKICAgICAgICAgICAgICAmJiBzdWJzdHIoICRsaW5lX3R5cGUsIDAsIDMgKSBlcSAnUE9EJzsKCiAgICAgICAgICAgICRsaW5lX29mX3Rva2Vucy0+e19sZXZlbF8wfSAgICAgICAgICAgICAgPSAwOwogICAgICAgICAgICAkbGluZV9vZl90b2tlbnMtPntfY2lfbGV2ZWxfMH0gICAgICAgICAgID0gMDsKICAgICAgICAgICAgJGxpbmVfb2ZfdG9rZW5zLT57X25lc3RpbmdfYmxvY2tzXzB9ICAgICA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgJGxpbmVfb2ZfdG9rZW5zLT57X25lc3RpbmdfdG9rZW5zXzB9ICAgICA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgJGxpbmVfb2ZfdG9rZW5zLT57X2VuZGVkX2luX2JsYW5rX3Rva2VufSA9IHVuZGVmOwogICAgICAgIH0KCiAgICAgICAgIyBIYW5kbGUgbGluZSBvZiBjb2RlCiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICBteSAkcnRva2VucyA9ICRsaW5lX29mX3Rva2Vuc19pbnB1dC0+e19ydG9rZW5zfTsKICAgICAgICAgICAgbXkgJGptYXggICAgPSBAeyRydG9rZW5zfSAtIDE7CgogICAgICAgICAgICBpZiAoICRqbWF4ID49IDAgKSB7CgogICAgICAgICAgICAgICAgJEtmaXJzdCA9IGRlZmluZWQoJEtsaW1pdCkgPyAkS2xpbWl0ICsgMSA6IDA7CgogICAgICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICMgZ2V0IHRoZSB0b2tlbnMgb24gdGhpcyBsaW5lCiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgJHNlbGYtPndyaXRlX2xpbmVfaW5uZXJfbG9vcCggJGxpbmVfb2ZfdG9rZW5zX2lucHV0LAogICAgICAgICAgICAgICAgICAgICRsaW5lX29mX3Rva2VucyApOwoKICAgICAgICAgICAgICAgICMgdXBkYXRlIEtsaW1pdCBmb3IgYWRkZWQgdG9rZW5zCiAgICAgICAgICAgICAgICAkS2xpbWl0ID0gQHskckxMfSAtIDE7CiAgICAgICAgICAgICAgICAkS2xhc3QgID0gJEtsaW1pdDsKCiAgICAgICAgICAgIH0gIyMgZW5kIGlmICggJGptYXggPj0gMCApCiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgYmxhbmsgbGluZQogICAgICAgICAgICAgICAgJGxpbmVfb2ZfdG9rZW5zLT57X2xldmVsXzB9ICAgICAgICAgICAgICA9IDA7CiAgICAgICAgICAgICAgICAkbGluZV9vZl90b2tlbnMtPntfY2lfbGV2ZWxfMH0gICAgICAgICAgID0gMDsKICAgICAgICAgICAgICAgICRsaW5lX29mX3Rva2Vucy0+e19uZXN0aW5nX2Jsb2Nrc18wfSAgICAgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgICAgICAkbGluZV9vZl90b2tlbnMtPntfbmVzdGluZ190b2tlbnNfMH0gICAgID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICAgICAgJGxpbmVfb2ZfdG9rZW5zLT57X2VuZGVkX2luX2JsYW5rX3Rva2VufSA9IHVuZGVmOwoKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRlZV9vdXRwdXQgfHw9CiAgICAgICAgICAgICAgICAgJHJPcHRzX3RlZV9ibG9ja19jb21tZW50cwogICAgICAgICAgICAgICYmICRqbWF4ID09IDAKICAgICAgICAgICAgICAmJiAkckxMLT5bJEtmaXJzdF0tPltfVFlQRV9dIGVxICcjJzsKCiAgICAgICAgICAgICR0ZWVfb3V0cHV0IHx8PQogICAgICAgICAgICAgICAgICRyT3B0c190ZWVfc2lkZV9jb21tZW50cwogICAgICAgICAgICAgICYmIGRlZmluZWQoJEtmaXJzdCkKICAgICAgICAgICAgICAmJiAkS2xpbWl0ID4gJEtmaXJzdAogICAgICAgICAgICAgICYmICRyTEwtPlskS2xpbWl0XS0+W19UWVBFX10gZXEgJyMnOwoKICAgICAgICB9ICMjIGVuZCBpZiAoICRsaW5lX3R5cGUgZXEgJ0NPREUnKQoKICAgICAgICAjIEZpbmlzaCBzdG9yaW5nIGxpbmUgdmFyaWFibGVzCiAgICAgICAgJGxpbmVfb2ZfdG9rZW5zLT57X3JLX3JhbmdlfSA9IFsgJEtmaXJzdCwgJEtsYXN0IF07CiAgICAgICAgJHNlbGYtPltfS2xpbWl0X10gPSAkS2xpbWl0OwogICAgICAgIG15ICRybGluZXMgPSAkc2VsZi0+W19ybGluZXNfXTsKICAgICAgICBwdXNoIEB7JHJsaW5lc30sICRsaW5lX29mX3Rva2VuczsKCiAgICAgICAgaWYgKCR0ZWVfb3V0cHV0KSB7CiAgICAgICAgICAgIG15ICRmaF90ZWUgICAgPSAkc2VsZi0+W19maF90ZWVfXTsKICAgICAgICAgICAgbXkgJGxpbmVfdGV4dCA9ICRsaW5lX29mX3Rva2Vuc19pbnB1dC0+e19saW5lX3RleHR9OwogICAgICAgICAgICAkZmhfdGVlLT5wcmludCgkbGluZV90ZXh0KSBpZiAoJGZoX3RlZSk7CiAgICAgICAgfQoKICAgICAgICAjIFdlIG11c3QgdXNlIHRoZSBvbGQgbGluZSBiZWNhdXNlIHRoZSBxdyBsb2dpYyBtYXkgY2hhbmdlIHRoaXMgZmxhZwogICAgICAgICRsYXN0X2VuZGluZ19pbl9xdW90ZSA9ICRsaW5lX29mX3Rva2Vuc19pbnB1dC0+e19lbmRpbmdfaW5fcXVvdGV9OwoKICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgd3JpdGVfbGluZQoKICAgIHN1YiBxd190b19mdW5jdGlvbiB7CiAgICAgICAgbXkgKCAkc2VsZiwgJGxpbmVfb2ZfdG9rZW5zLCAkaXNfZW5kaW5nX3Rva2VuICkgPSBAXzsKCiAgICAgICAgIyBUaGlzIHN1YiBpbXBsZW1lbnRzIHRoZSAtcXdhZiBvcHRpb246CiAgICAgICAgIyBJdCBpcyBjYWxsZWQgZm9yIGV2ZXJ5IHR5cGUgJ3EnIHRva2VuIHdoaWNoIGlzIHBhcnQgb2YgYSAncXcoJyBsaXN0LgogICAgICAgICMgRXNzZW50aWFsbHkgYWxsIG9mIHRoZSBjb2RpbmcgZm9yIHRoZSAnLXF3YWYnIG9wdGlvbiBpcyBpbiB0aGlzIHN1Yi4KCiAgICAgICAgIyBJbnB1dCBwYXJhbWV0ZXJzOgogICAgICAgICMgICRsaW5lX29mX3Rva2VucyA9IGluZm9ybWF0aW9uIGhhc2ggZm9yIHRoaXMgbGluZSBmcm9tIHRoZSB0b2tlbml6ZXIsCiAgICAgICAgIyAgJGlzX2VuZGluZ190b2tlbiA9IHRydWUgaWYgdGhpcyBxdyBkb2VzIG5vdCBleHRlbmQgdG8gdGhlIG5leHQgbGluZQoKICAgICAgICAjIE1ldGhvZDoKICAgICAgICAjIFRoaXMgcXcgdG9rZW4gaGFzIGFscmVhZHkgYmVlbiBwdXNoZWQgb250byB0aGUgb3V0cHV0IHRva2VuIHN0YWNrLCBzbwogICAgICAgICMgd2Ugd2lsbCBwb3AgaXQgb2ZmIGFuZCBwdXNoIG9uIGEgc2VxdWVuY2Ugb2YgdG9rZW5zIGNyZWF0ZWQgYnkKICAgICAgICAjIGJyZWFraW5nIGl0IGludG8gYW4gb3BlbmluZywgYSBzZXF1ZW5jZSBvZiBjb21tYS1zZXBhcmF0ZWQgcXVvdGUKICAgICAgICAjIGl0ZW1zLCBhbmQgYSBjbG9zaW5nIHBhcmVuLiBGb3IgbXVsdGktbGluZSBxdyBxdW90ZXMsIHRoZXJlIHdpbGwgYmUKICAgICAgICAjIG9uZSBjYWxsIHBlciBpbnB1dCBsaW5lIHVudGlsIHRoZSBlbmQgb2YgdGhlIHF3IHRleHQgaXMgcmVhY2hlZAogICAgICAgICMgYW5kIHByb2Nlc3NlZC4KCiAgICAgICAgIyBOb3RlIDE6IEEgY3JpdGljYWwgaXNzdWUgaXMgdG8gY29ycmVjdGx5IGdlbmVyYXRlIGFuZCBpbnNlcnQgYSBuZXcKICAgICAgICAjIHNlcXVlbmNlIG51bWJlciBmb3IgdGhlIG5ldyBwYXJlbnMgaW50byB0aGUgc2VxdWVuY2UgbnVtYmVyIHN0cmVhbS4KICAgICAgICAjIFRoZSBuZXcgc2VxdWVuY2UgbnVtYmVyIGlzIHRoZSBjbG9zdXJlIHZhcmlhYmxlICckaW5fcXdfc2Vxbm8nLiAgSXQKICAgICAgICAjIGlzIGRlZmluZWQgd2hlbiB0aGUgbGVhZGluZyAncXcoJyBpcyBzZWVuLCBhbmQgaXMgdW5kZWZpbmVkIHdoZW4gdGhlCiAgICAgICAgIyBjbG9zaW5nICcpJyBpcyBvdXRwdXQuCgogICAgICAgICMgTm90ZSAyOiBTbyBmYXIsIG5vIHJlYXNvbiBoYXMgYmVlbiBmb3VuZCB0byBjb29yZGluYXRlIHRoaXMgbG9naWMKICAgICAgICAjIHdpdGggdGhlIGxvZ2ljIHdoaWNoIGFkZHMgYW5kIGRlbGV0ZXMgY29tbWFzLiBXZSBhcmUgYWRkaW5nIHRyYWlsaW5nCiAgICAgICAgIyBwaGFudG9tIGNvbW1hcyBoZXJlLCBleGNlcHQgZm9yIGEgc2luZ2xlIGxpc3QgaXRlbSwgc28gbm8gYWRkaXRpb25hbAogICAgICAgICMgdHJhaWxpbmcgY29tbWEgc2hvdWxkIGJlIGFkZGVkLiBBbmQgaWYgYSBwaGFudG9tIHRyYWlsaW5nIGNvbW1hIGdldHMKICAgICAgICAjIGRlbGV0ZWQsIGl0IHNob3VsZCBub3QgbWF0dGVyIGJlY2F1c2UgaXQgZG9lcyBub3QgZ2V0IGRpc3BsYXllZC4KCiAgICAgICAgbXkgJHJMTCAgICAgICAgICAgICAgICAgICAgID0gJHNlbGYtPltfckxMX107CiAgICAgICAgbXkgJHJTUyAgICAgICAgICAgICAgICAgICAgID0gJHNlbGYtPltfclNTX107CiAgICAgICAgbXkgJHJkZXB0aF9vZl9vcGVuaW5nX3NlcW5vID0gJHNlbGYtPltfcmRlcHRoX29mX29wZW5pbmdfc2Vxbm9fXTsKCiAgICAgICAgIyBEb2VzIHRoaXMgcXcgdGV4dCBzcGlsbCBvdmVyIG9udG8gYW5vdGhlciBsaW5lPwogICAgICAgIG15ICRpc19jb250aW51ZWQgPQogICAgICAgICAgKCAkaXNfZW5kaW5nX3Rva2VuICYmICRsaW5lX29mX3Rva2Vucy0+e19lbmRpbmdfaW5fcXVvdGV9ICk7CgogICAgICAgIG15ICRxd190ZXh0ICAgICAgID0gJHJMTC0+Wy0xXS0+W19UT0tFTl9dOwogICAgICAgIG15ICRxd190eXBlICAgICAgID0gJHJMTC0+Wy0xXS0+W19UWVBFX107CiAgICAgICAgbXkgJHF3X2xldmVsICAgICAgPSAkckxMLT5bLTFdLT5bX0xFVkVMX107CiAgICAgICAgbXkgJHF3X3RleHRfc3RhcnQgPSAkcXdfdGV4dDsKICAgICAgICBteSAkb3BlbmluZyAgICAgICA9IEVNUFRZX1NUUklORzsKICAgICAgICBteSAkY2xvc2luZyAgICAgICA9IEVNUFRZX1NUUklORzsKICAgICAgICBteSAkaGFzX29wZW5pbmdfc3BhY2U7CiAgICAgICAgbXkgJGhhc19jbG9zaW5nX3NwYWNlOwoKICAgICAgICAjIHRoZSBuZXcgd29yZCB0b2tlbnMgYXJlIDEgbGV2ZWwgZGVlcGVyIHRoYW4gdGhlIG9yaWdpbmFsICdxJyB0b2tlbgogICAgICAgIG15ICRsZXZlbF93b3JkcyA9ICRxd19sZXZlbCArIDE7CgogICAgICAgIGlmICggJHF3X3R5cGUgbmUgJ3EnICkgewoKICAgICAgICAgICAgIyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gYmVjYXVzZSB0aGUgY2FsbGluZyBzdWIgc2hvdWxkIGhhdmUganVzdAogICAgICAgICAgICAjIHB1c2hlZCBhIHRva2VuIG9mIHR5cGUgJ3EnIG9udG8gdGhlIHRva2VuIGxpc3QuCiAgICAgICAgICAgIG15ICRsbm8gPSAkbGluZV9vZl90b2tlbnMtPntfbGluZV9udW1iZXJ9OwogICAgICAgICAgICBGYXVsdCgiJGxubzogZXhwZWN0aW5nIHR5cGUgJ3EnIGJ1dCBnb3QgJHF3X3R5cGUiKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAhbGVuZ3RoKCRxd190ZXh0KSApIHsKCiAgICAgICAgICAgICMgVGhpcyBzZWVtcyB0byBiZSBhbiBlbXB0eSB0eXBlICdxJyB0b2tlbi4gQSBibGFuayBsaW5lIHdpdGhpbiBhCiAgICAgICAgICAgICMgcXcgcXVvdGUgaXMgbWFya2VkIGFzIGEgYmxhbmsgbGluZSByYXRoZXIgdGhhbiBhIGJsYW5rICdxJyB0b2tlbi4KICAgICAgICAgICAgIyBTbyB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4uCiAgICAgICAgICAgIG15ICRsbm8gPSAkbGluZV9vZl90b2tlbnMtPntfbGluZV9udW1iZXJ9OwogICAgICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KCIkbG5vOiByZWNlaXZlZCBlbXB0eSB0eXBlICdxJyB0ZXh0XG4iKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyByZW1vdmUgbGVhZGluZyAncXcoJyBpZiB3ZSBhcmUgc3RhcnRpbmcgYSBuZXcgcXcKICAgICAgICBpZiAoICEkaW5fcXdfc2Vxbm8gKSB7CiAgICAgICAgICAgICRvcGVuaW5nID0gc3Vic3RyKCAkcXdfdGV4dCwgMCwgMyApOwogICAgICAgICAgICBpZiAoICRvcGVuaW5nIG5lICdxdygnICkgewoKICAgICAgICAgICAgICAgICMgQ2FsbGVyIHNob3VsZCBoYXZlIGNoZWNrZWQgdGhpcyBiZWZvcmUgY2FsbGluZwogICAgICAgICAgICAgICAgbXkgJGxubyA9ICRsaW5lX29mX3Rva2Vucy0+e19saW5lX251bWJlcn07CiAgICAgICAgICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KCIkbG5vOiB1bmV4cGVjdGVkIHF3IG9wZW5pbmc6ICRvcGVuaW5nXG4iKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcXdfdGV4dCAgICAgICAgICAgPSBzdWJzdHIoICRxd190ZXh0LCAzICk7CiAgICAgICAgICAgICRoYXNfb3BlbmluZ19zcGFjZSA9ICRxd190ZXh0ID1+IHMvXlxzKy8vOwoKICAgICAgICAgICAgIyBEbyBub3QgdXNlIC1xd2FmIHVuZGVyIGhpZ2ggc3RyZXNzIChiMTQ4MixiMTQ4MyxiMTQ4NCxiMTQ4NSwxNDg2KQogICAgICAgICAgICAjIE5vdGU6IHNvIGZhciBhbGwga25vd24gY2FzZXMgb2Ygc3RyZXNzIGluc3RhYmlsaXR5IGhhdmUgaGFkIC1uYXdzCiAgICAgICAgICAgICMgc2V0LCBzbyB0aGlzIGlzIGluY2x1ZGVkIGZvciBub3cuIEl0IG1heSBldmVudHVhbGx5IG5lZWQgdG8gYmUKICAgICAgICAgICAgIyByZW1vdmVkLgogICAgICAgICAgICAjIE5PVEU6IFRoZSB1cGRhdGUgZm9yIGIxNDkxIGFsc28gZml4ZXMgY2FzZXMgYjE0ODItNiBpbiBhCiAgICAgICAgICAgICMgbW9yZSBnZW5lcmFsIHdheSwgc28gdGhpcyB0ZXN0IGNhbiBiZSBkZWFjdGl2YXRlZC4KICAgICAgICAgICAgaWYgKCAgIDAKICAgICAgICAgICAgICAgICYmICEkck9wdHNfYWRkX3doaXRlc3BhY2UKICAgICAgICAgICAgICAgICYmICRsZXZlbF93b3JkcyA+PSAkaGlnaF9zdHJlc3NfbGV2ZWwgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgTG9vayBmb3IgYW5kIHJlbW92ZSBhbnkgY2xvc2luZyAnKScKICAgICAgICBpZiAoICEkaXNfY29udGludWVkICkgewogICAgICAgICAgICBpZiAoIGxlbmd0aCgkcXdfdGV4dCkgPiAwICYmIHN1YnN0ciggJHF3X3RleHQsIC0xLCAxICkgZXEgJyknICkgewogICAgICAgICAgICAgICAgJGNsb3NpbmcgPSBzdWJzdHIoICRxd190ZXh0LCAtMSwgIDEgKTsKICAgICAgICAgICAgICAgICRxd190ZXh0ID0gc3Vic3RyKCAkcXdfdGV4dCwgIDAsIC0xICk7CiAgICAgICAgICAgICAgICAkcXdfdGV4dCA9fiBzL1xzKyQvLzsKICAgICAgICAgICAgICAgICRoYXNfY2xvc2luZ19zcGFjZSA9ICRxd190ZXh0ID1+IHMvXlxzKy8vOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgV2UgYXJlIGF0IHRoZSBlbmQgb2YgYSAncXcoJyBxdW90ZSBhY2NvcmRpbmcgdG8gdGhlCiAgICAgICAgICAgICAgICAjIHRva2VuaXplciBmbGFnICdfZW5kaW5nX2luX3F1b3RlJywgYnV0IHRoZXJlIGlzIG5vCiAgICAgICAgICAgICAgICAjIGVuZGluZyAnKScuIFRoZSAnJGlzX2NvbnRpbnVlZCcgZmxhZyBzZWVtcyB0byBiZSB3cm9uZy4KICAgICAgICAgICAgICAgIG15ICRsbm8gPSAkbGluZV9vZl90b2tlbnMtPntfbGluZV9udW1iZXJ9OwogICAgICAgICAgICAgICAgRmF1bHQoPDxFT00pOwpxd2FmIGluY29uc2lzdGVuY3kgYXQgaW5wdXQgbGluZSAkbG5vOgpjbG9zaW5nIHRva2VuIGlzICckY2xvc2luZycKaXNfY29udGludWVkID0gJGlzX2NvbnRpbnVlZApFT00KICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBHZXQgYW55IHF1b3RlZCB3b3JkcwogICAgICAgIG15IEB3b3JkczsKICAgICAgICBpZiAoIGxlbmd0aCgkcXdfdGV4dCkgKSB7CiAgICAgICAgICAgIEB3b3JkcyA9IHNwbGl0IC9ccysvLCAkcXdfdGV4dDsKICAgICAgICB9CgogICAgICAgICMgQmUgc3VyZSB3ZSBoYXZlIHNvbWV0aGluZyBsZWZ0IHRvIG91dHB1dAogICAgICAgIGlmICggISRvcGVuaW5nICYmICEkY2xvc2luZyAmJiAhQHdvcmRzICkgewogICAgICAgICAgICBteSAkbG5vID0gJGxpbmVfb2ZfdG9rZW5zLT57X2xpbmVfbnVtYmVyfTsKICAgICAgICAgICAgREVWRUxfTU9ERSAmJiBGYXVsdCg8PEVPTSk7CkVycm9yIHBhcnNpbmcgdGhlIGZvbGxvd2luZyBxdyBzdHJpbmcgYXQgbGluZSAkbG5vOgokcXdfdGV4dF9zdGFydApFT00KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBUaGUgY29tYmluYXRpb24gLW5hd3MgLWxwIGNhbiBjdXJyZW50bHkgYmUgdW5zdGFibGUgZm9yIG11bHRpLWxpbmUgcXcKICAgICAgICAjIChiMTQ4NywgYjE0ODgpLgogICAgICAgICMgTk9URTogdGhpcyBpbnN0YWJpbGl0eSBoYXMgYmVlbiBmaXhlZCBieSBmb2xsb3dpbmcgdGhlIGlucHV0CiAgICAgICAgIyB3aGl0ZXNwYWNlIHdpdGhpbiBwYXJlbnMsIGJ1dCBrZWVwIHRoaXMgY29kZSBmb3IgYSB3aGlsZSBpbiBjYXNlIHRoZQogICAgICAgICMgaXNzdWUgYXJpc2VzIGluIHRoZSBmdXR1cmUgKGIxNDg3KS4KICAgICAgICBpZiAoICAgMAogICAgICAgICAgICAmJiAhJHJPcHRzX2FkZF93aGl0ZXNwYWNlCiAgICAgICAgICAgICYmICRyT3B0c19saW5lX3VwX3BhcmVudGhlc2VzCiAgICAgICAgICAgICYmICggISRvcGVuaW5nIHx8ICEkY2xvc2luZyApICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgYzQxNCBhbmQgYzQyNDogZG8gbm90IGpvaW4gYSAnXCcgYW5kIGEgY2xvc2luZyAnKScgbGlrZSBoZXJlOgogICAgICAgICMgICBteSBAY2xvY2tfY2hhcnMgPSBxdyggfCAvIC0gXCB8IC8gLSBcICk7CiAgICAgICAgaWYgKAogICAgICAgICAgICAgICBAd29yZHMKICAgICAgICAgICAgJiYgJGNsb3NpbmcKICAgICAgICAgICAgJiYgc3Vic3RyKCAkd29yZHNbLTFdLCAtMSwgMSApIGVxIEJBQ0tTTEFTSAogICAgICAgICAgICAmJiAoCiAgICAgICAgICAgICAgICAhJHJPcHRzX2FkZF93aGl0ZXNwYWNlCiAgICAgICAgICAgICAgICB8fCAoICAgJHRpZ2h0bmVzc3snKSd9ID09IDIKICAgICAgICAgICAgICAgICAgICB8fCAkdGlnaHRuZXNzeycpJ30gPT0gMSAmJiBAd29yZHMgPT0gMSApCiAgICAgICAgICAgICkKICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICMgZml4IGJ5IGluY2x1ZGluZyBhIHNwYWNlIGFmdGVyIHRoZSBcCiAgICAgICAgICAgICR3b3Jkc1stMV0gLj0gU1BBQ0U7CgogICAgICAgICAgICAjIGFuZCBmb3Igc3ltbWV0cnksIGJlZm9yZSB0aGUgZmlyc3Qgd29yZCBpZiB0aGUgJygnIGlzIG9uIHRoaXMgbGluZQogICAgICAgICAgICBpZiAoICRvcGVuaW5nICYmICRyT3B0c19hZGRfd2hpdGVzcGFjZSApIHsKICAgICAgICAgICAgICAgICR3b3Jkc1swXSA9IFNQQUNFIC4gJHdvcmRzWzBdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBUaGlzIGlzIHRoZSBwb2ludCBvZiBubyByZXR1cm4gaWYgdGhlIHRyYW5zZm9ybWF0aW9uIGhhcyBub3Qgc3RhcnRlZAogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgIyBwb3Agb2xkIHR5cGUgcSB0b2tlbgogICAgICAgIG15ICRydG9rZW5fcSA9IHBvcCBAeyRyTEx9OwoKICAgICAgICAjIG5vdyBwdXNoIG9uIHRoZSByZXBsYWNlbWVudCB0b2tlbnMKICAgICAgICBteSAkY29tbWFfY291bnQgPSAwOwoKICAgICAgICBpZiAoJG9wZW5pbmcpIHsKCiAgICAgICAgICAgICMgZ2VuZXJhdGUgYSBuZXcgc2VxdWVuY2UgbnVtYmVyLCBvbmUgZ3JlYXRlciB0aGFuIHRoZSBwcmV2aW91cywKICAgICAgICAgICAgIyBhbmQgdXBkYXRlIGEgY291bnQgZm9yIHN5bmNocm9uaXphdGlvbiB3aXRoIHRoZSBjYWxsaW5nIHN1Yi4KICAgICAgICAgICAgJGluX3F3X3NlcW5vID0gKyskbGFzdF9uZXdfc2Vxbm87CiAgICAgICAgICAgICRhZGRlZF9zZXFub19jb3VudCsrOwogICAgICAgICAgICBteSAkc2Vxbm8gPSAkaW5fcXdfc2Vxbm87CgogICAgICAgICAgICAjIHVwZGF0ZSByZWxldmFudCBzZXFubyBoYXNoZXMKICAgICAgICAgICAgJHNlbGYtPltfS19vcGVuaW5nX2NvbnRhaW5lcl9dLT57JHNlcW5vfSA9IEB7JHJMTH07CiAgICAgICAgICAgICRyZGVwdGhfb2Zfb3BlbmluZ19zZXFuby0+WyRzZXFub10gPSAkbmVzdGluZ19kZXB0aDsKICAgICAgICAgICAgJG5lc3RpbmdfZGVwdGgrKzsKICAgICAgICAgICAgJHNlbGYtPltfcklfb3BlbmluZ19dLT5bJHNlcW5vXSA9IEB7JHJTU307CgogICAgICAgICAgICBpZiAoICRsZXZlbF93b3JkcyA+ICRzZWxmLT5bX21heGltdW1fbGV2ZWxfXSApIHsKICAgICAgICAgICAgICAgIG15ICRpbnB1dF9saW5lX25vID0gJGxpbmVfb2ZfdG9rZW5zLT57X2xpbmVfbnVtYmVyfTsKICAgICAgICAgICAgICAgICRzZWxmLT5bX21heGltdW1fbGV2ZWxfXSAgICAgICAgID0gJGxldmVsX3dvcmRzOwogICAgICAgICAgICAgICAgJHNlbGYtPltfbWF4aW11bV9sZXZlbF9hdF9saW5lX10gPSAkaW5wdXRfbGluZV9ubzsKICAgICAgICAgICAgfQogICAgICAgICAgICBwdXNoIEB7JHJTU30sICRzZXFubzsKCiAgICAgICAgICAgICMgbWFrZSBhbmQgcHVzaCB0aGUgJ3F3JyB0b2tlbgogICAgICAgICAgICBteSAkcnRva2VuX3F3ID0gY29weV90b2tlbl9hc190eXBlKCAkcnRva2VuX3EsICdVJywgJ3F3JyApOwogICAgICAgICAgICBwdXNoIEB7JHJMTH0sICRydG9rZW5fcXc7CgogICAgICAgICAgICAjIG1ha2UgYW5kIHB1c2ggdGhlICcoJyB3aXRoIHRoZSBuZXcgc2VxdWVuY2UgbnVtYmVyCiAgICAgICAgICAgIG15ICRydG9rZW5fb3BlbmluZyA9IGNvcHlfdG9rZW5fYXNfdHlwZSggJHJ0b2tlbl9xLCAneycsICcoJyApOwogICAgICAgICAgICAkcnRva2VuX29wZW5pbmctPltfVFlQRV9TRVFVRU5DRV9dID0gJHNlcW5vOwogICAgICAgICAgICBwdXNoIEB7JHJMTH0sICRydG9rZW5fb3BlbmluZzsKICAgICAgICB9CgogICAgICAgICMgQWxsIHdvcmRzIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBjb21tYSBleGNlcHQgZm9yIGFuIGludGFjdAogICAgICAgICMgc3RydWN0dXJlIHdpdGggYSBzaW5nbGUgd29yZCwgbGlrZSAncXcoaGVsbG8pJwogICAgICAgIG15ICRjb21tYXNfbmVlZGVkID0KICAgICAgICAgICEoICggJG9wZW5pbmcgfHwgISRpbl9xd19jb21tYV9jb3VudCApICYmICRjbG9zaW5nICYmIEB3b3JkcyA9PSAxICk7CgogICAgICAgICMgTWFrZSBhbmQgcHVzaCBlYWNoIHdvcmQgYXMgYSB0eXBlICdRJyBxdW90ZSBmb2xsb3dlZCBieSBhIHBoYW50b20KICAgICAgICAjIGNvbW1hLiBUaGUgcGhhbnRvbSBjb21tYSBpcyB0eXBlICcsJyBhbmQgaXMgcHJvY2Vzc2VkCiAgICAgICAgIyBleGFjdGx5IGxpa2UgYW55IG90aGVyIGNvbW1hLCBidXQgaXQgaGFzIGFuIGVtcHR5IHN0cmluZyBhcyB0aGUgdG9rZW4KICAgICAgICAjIHRleHQsIHNvIHRoZSBsaW5lIHdpbGwgZGlzcGxheSBhcyBhIHJlZ3VsYXIgcXcgcXVvdGUuCiAgICAgICAgaWYgKEB3b3JkcykgewoKICAgICAgICAgICAgZm9yZWFjaCBteSAkd29yZCAoQHdvcmRzKSB7CgogICAgICAgICAgICAgICAgIyBhbHdheXMgc3BhY2UgYWZ0ZXIgYSBjb21tYTsgZm9sbG93IGlucHV0IHNwYWNpbmcgYWZ0ZXIgJygnCiAgICAgICAgICAgICAgICBpZiAoICRjb21tYV9jb3VudCB8fCAkaGFzX29wZW5pbmdfc3BhY2UgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJHJ0b2tlbl9zcGFjZSA9CiAgICAgICAgICAgICAgICAgICAgICBjb3B5X3Rva2VuX2FzX3R5cGUoICRydG9rZW5fcSwgJ2InLCBTUEFDRSApOwogICAgICAgICAgICAgICAgICAgICRydG9rZW5fc3BhY2UtPltfTEVWRUxfXSA9ICRsZXZlbF93b3JkczsKICAgICAgICAgICAgICAgICAgICBwdXNoIEB7JHJMTH0sICRydG9rZW5fc3BhY2U7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyB0aGlzIHF1b3RlZCB0ZXh0CiAgICAgICAgICAgICAgICBteSAkcnRva2VuX3dvcmQgPSBjb3B5X3Rva2VuX2FzX3R5cGUoICRydG9rZW5fcSwgJ1EnLCAkd29yZCApOwogICAgICAgICAgICAgICAgJHJ0b2tlbl93b3JkLT5bX0xFVkVMX10gPSAkbGV2ZWxfd29yZHM7CiAgICAgICAgICAgICAgICBwdXNoIEB7JHJMTH0sICRydG9rZW5fd29yZDsKCiAgICAgICAgICAgICAgICAjIEFkZCBhIGNvbW1hIGlmIG5lZWRlZC4gIE5PVEUgb24gdHJhaWxpbmcgY29tbWFzOgogICAgICAgICAgICAgICAgIyAtIEZvciBtdWx0aXBsZSB3b3JkczogVHJhaWxpbmcgY29tbWFzIG11c3QgYmUgYWRkZWQuCiAgICAgICAgICAgICAgICAjICAgT3RoZXJ3aXNlLCAtYXRjIG1pZ2h0IHB1dCBhIGNvbW1hIGluIGEgcXcgbGlzdC4KICAgICAgICAgICAgICAgICMgLSBGb3Igc2luZ2xlIHdvcmRzOiBUcmFpbGluZyBjb21tYXMgYXJlIG5vdCByZXF1aXJlZCwgYW5kCiAgICAgICAgICAgICAgICAjICAgYXJlIGJlc3QgYXZvaWRlZC4gVGhpcyBpcyBiZWNhdXNlOgogICAgICAgICAgICAgICAgIyAgIC0gYXRjIHdpbGwgbm90IGFkZCBjb21tYXMgdG8gYSBsaXN0IHdoaWNoIGhhcyBubyBjb21tYXMKICAgICAgICAgICAgICAgICMgICAtIFRoaXMgd2lsbCBtYWtlIHRoZSBzaW5nbGUtaXRlbSBzcGFjaW5nIHJ1bGUgd29yayBhcwogICAgICAgICAgICAgICAgIyAgIGV4cGVjdGVkLgogICAgICAgICAgICAgICAgIyAgIC0gVGhpcyB3aWxsIHJlZHVjZSB0aGUgY2hhbmNlIG9mIGluc3RhYmlsaXR5IChiMTQ5MSkKICAgICAgICAgICAgICAgIGlmICgkY29tbWFzX25lZWRlZCkgewogICAgICAgICAgICAgICAgICAgIG15ICRydG9rZW5fY29tbWEgPQogICAgICAgICAgICAgICAgICAgICAgY29weV90b2tlbl9hc190eXBlKCAkcnRva2VuX3EsICcsJywgRU1QVFlfU1RSSU5HICk7CiAgICAgICAgICAgICAgICAgICAgJHJ0b2tlbl9jb21tYS0+W19MRVZFTF9dID0gJGxldmVsX3dvcmRzOwogICAgICAgICAgICAgICAgICAgIHB1c2ggQHskckxMfSwgJHJ0b2tlbl9jb21tYTsKICAgICAgICAgICAgICAgICAgICAkY29tbWFfY291bnQrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBtYWtlIGFuZCBwdXNoIGNsb3Npbmcgc2VxdWVuY2VkIGl0ZW0gJyknCiAgICAgICAgaWYgKCRjbG9zaW5nKSB7CgogICAgICAgICAgICAjIE9QVElPTkFMOiByZW1vdmUgYSBwcmV2aW91cyBjb21tYSBpZiBpdCBpcyB0aGUgb25seSBvbmUuIFRoaXMgY2FuCiAgICAgICAgICAgICMgaGFwcGVuIGlmIHRoaXMgY2xvc2luZyBwYXJlbiBzdGFydHMgYSBuZXcgbGluZSBhbmQgdGhlcmUgd2FzIGp1c3QKICAgICAgICAgICAgIyBvbmUgd29yZCBpbiB0aGUgcXcgbGlzdC4gVGhlIHJlYXNvbiBmb3IgZG9pbmcgdGhpcyB3b3VsZCBiZQogICAgICAgICAgICAjIHRvIGF2b2lkIHBvc3NpYmxlIGluc3RhYmlsaXR5LCBidXQgbm9uZSBpcyBjdXJyZW50bHkga25vd24uIGIxNDkxLgogICAgICAgICAgICAjIFRoaXMgaGFzIGJlZW4gdGVzdGVkIGJ1dCBpcyBjdXJyZW50bHkgaW5hY3RpdmUgYmVjYXVzZSBpdCBoYXMgbm90CiAgICAgICAgICAgICMgYmVlbiBmb3VuZCB0byBiZSBuZWNlc3NhcnkuCiAgICAgICAgICAgIGlmICggICAwCiAgICAgICAgICAgICAgICAmJiAhQHdvcmRzCiAgICAgICAgICAgICAgICAmJiAkaW5fcXdfY29tbWFfY291bnQgPT0gMQogICAgICAgICAgICAgICAgJiYgJHJMTC0+Wy0xXS0+W19UWVBFX10gZXEgJywnICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICMgSXQgaXMgc2ltcGxlciB0byBjb252ZXJ0IGl0IHRvIGEgYmxhbms7IG90aGVyd2lzZSBpdCB3b3VsZAogICAgICAgICAgICAgICAgIyBiZSBuZWNlc3NhcnkgdG8gY2hhbmdlIHRoZSByYW5nZSBbS2ZpcnN0LEtsYXN0XSBvZiB0aGUKICAgICAgICAgICAgICAgICMgcHJldmlvdXMgbGluZSBhbmQgdGhlIGN1cnJlbnQgbGluZS4KICAgICAgICAgICAgICAgICRyTEwtPlstMV0tPltfVFlQRV9dID0gJ2InOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGZvbGxvdyBpbnB1dCBzcGFjaW5nIGJlZm9yZSAnKScKICAgICAgICAgICAgaWYgKCRoYXNfY2xvc2luZ19zcGFjZSkgewogICAgICAgICAgICAgICAgbXkgJHJ0b2tlbl9zcGFjZSA9IGNvcHlfdG9rZW5fYXNfdHlwZSggJHJ0b2tlbl9xLCAnYicsIFNQQUNFICk7CiAgICAgICAgICAgICAgICAkcnRva2VuX3NwYWNlLT5bX0xFVkVMX10gPSAkbGV2ZWxfd29yZHM7CiAgICAgICAgICAgICAgICBwdXNoIEB7JHJMTH0sICRydG9rZW5fc3BhY2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRzZXFubyA9ICRpbl9xd19zZXFubzsKICAgICAgICAgICAgJHNlbGYtPltfS19jbG9zaW5nX2NvbnRhaW5lcl9dLT57JHNlcW5vfSA9IEB7JHJMTH07CiAgICAgICAgICAgICRuZXN0aW5nX2RlcHRoID0gJHJkZXB0aF9vZl9vcGVuaW5nX3NlcW5vLT5bJHNlcW5vXTsKICAgICAgICAgICAgJHNlbGYtPltfcklfY2xvc2luZ19dLT5bJHNlcW5vXSA9IEB7JHJTU307CiAgICAgICAgICAgIHB1c2ggQHskclNTfSwgLTEgKiAkc2Vxbm87CgogICAgICAgICAgICAjIG1ha2UgdGhlICcpJwogICAgICAgICAgICBteSAkcnRva2VuX2Nsb3NpbmcgPSBjb3B5X3Rva2VuX2FzX3R5cGUoICRydG9rZW5fcSwgJ30nLCAnKScgKTsKICAgICAgICAgICAgJHJ0b2tlbl9jbG9zaW5nLT5bX1RZUEVfU0VRVUVOQ0VfXSA9ICRpbl9xd19zZXFubzsKICAgICAgICAgICAgcHVzaCBAeyRyTEx9LCAkcnRva2VuX2Nsb3Npbmc7CgogICAgICAgICAgICAjIGFsbCBkb25lIHdpdGggdGhpcyBxdyBsaXN0CiAgICAgICAgICAgICRpbl9xd19zZXFubyAgICAgICA9IDA7CiAgICAgICAgICAgICRpbl9xd19jb21tYV9jb3VudCA9IDA7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkaW5fcXdfY29tbWFfY291bnQgKz0gJGNvbW1hX2NvdW50OwogICAgICAgIH0KCiAgICAgICAgIyBUaGUgJ19lbmRpbmdfaW5fcXVvdGUnIGZsYWcgZm9yIHRoaXMgbGluZSBpcyBubyBsb25nZXIgbmVlZGVkCiAgICAgICAgaWYgKCRpc19jb250aW51ZWQpIHsgJGxpbmVfb2ZfdG9rZW5zLT57X2VuZGluZ19pbl9xdW90ZX0gPSAwIH0KCiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIHF3X3RvX2Z1bmN0aW9uCgogICAgc3ViIHdyaXRlX2xpbmVfaW5uZXJfbG9vcCB7CiAgICAgICAgbXkgKCAkc2VsZiwgJGxpbmVfb2ZfdG9rZW5zX29sZCwgJGxpbmVfb2ZfdG9rZW5zICkgPSBAXzsKCiAgICAgICAgIyBDb3B5IHRoZSB0b2tlbnMgb24gb25lIGxpbmUgcmVjZWl2ZWQgZnJvbSB0aGUgdG9rZW5pemVyIHRvIHRoZWlyIG5ldwogICAgICAgICMgc3RvcmFnZSBsb2NhdGlvbnMuCgogICAgICAgICMgSW5wdXQgcGFyYW1ldGVyczoKICAgICAgICAjICAkbGluZV9vZl90b2tlbnNfb2xkID0gbGluZSByZWNlaXZlZCBmcm9tIHRva2VuaXplcgogICAgICAgICMgICRsaW5lX29mX3Rva2VucyAgICAgPSBsaW5lIG9mIHRva2VucyBiZWluZyBmb3JtZWQgZm9yIGZvcm1hdHRlcgoKICAgICAgICBteSAkcnRva2VucyA9ICRsaW5lX29mX3Rva2Vuc19vbGQtPntfcnRva2Vuc307CiAgICAgICAgbXkgJGptYXggICAgPSBAeyRydG9rZW5zfSAtIDE7CiAgICAgICAgaWYgKCAkam1heCA8IDAgKSB7CgogICAgICAgICAgICAjIHNhZmV0eSBjaGVjazsgc2hvdWxkbid0IGhhcHBlbgogICAgICAgICAgICBteSAkbG5vID0gJGxpbmVfb2ZfdG9rZW5zLT57X2xpbmVfbnVtYmVyfTsKICAgICAgICAgICAgREVWRUxfTU9ERSAmJiBGYXVsdCgiJGxubzogdW5leHBlY3RlZCBqbWF4PSRqbWF4XG4iKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgbXkgJGxpbmVfaW5kZXggICAgID0gJGxpbmVfb2ZfdG9rZW5zX29sZC0+e19saW5lX251bWJlcn0gLSAxOwogICAgICAgIG15ICRydG9rZW5fdHlwZSAgICA9ICRsaW5lX29mX3Rva2Vuc19vbGQtPntfcnRva2VuX3R5cGV9OwogICAgICAgIG15ICRyYmxvY2tfdHlwZSAgICA9ICRsaW5lX29mX3Rva2Vuc19vbGQtPntfcmJsb2NrX3R5cGV9OwogICAgICAgIG15ICRydHlwZV9zZXF1ZW5jZSA9ICRsaW5lX29mX3Rva2Vuc19vbGQtPntfcnR5cGVfc2VxdWVuY2V9OwogICAgICAgIG15ICRybGV2ZWxzICAgICAgICA9ICRsaW5lX29mX3Rva2Vuc19vbGQtPntfcmxldmVsc307CgogICAgICAgIG15ICRyTEwgICAgICAgICAgICAgICAgICAgICA9ICRzZWxmLT5bX3JMTF9dOwogICAgICAgIG15ICRyU1MgICAgICAgICAgICAgICAgICAgICA9ICRzZWxmLT5bX3JTU19dOwogICAgICAgIG15ICRyZGVwdGhfb2Zfb3BlbmluZ19zZXFubyA9ICRzZWxmLT5bX3JkZXB0aF9vZl9vcGVuaW5nX3NlcW5vX107CgogICAgICAgIERFVkVMX01PREUKICAgICAgICAgICYmIGNoZWNrX3NlcXVlbmNlX251bWJlcnMoICRydG9rZW5zLCAkcnRva2VuX3R5cGUsCiAgICAgICAgICAgICRydHlwZV9zZXF1ZW5jZSwgJGxpbmVfaW5kZXggKyAxICk7CgogICAgICAgICMgRmluZCB0aGUgc3RhcnRpbmcgbmVzdGluZyBkZXB0aCAuLi4KICAgICAgICAjIEl0IG11c3QgYmUgdGhlIHZhbHVlIG9mIHZhcmlhYmxlICdsZXZlbCcgb2YgdGhlIGZpcnN0IHRva2VuCiAgICAgICAgIyBiZWNhdXNlIHRoZSBuZXN0aW5nIGRlcHRoIGlzIHVzZWQgYXMgYSB0b2tlbiB0YWcgaW4gdGhlCiAgICAgICAgIyB2ZXJ0aWNhbCBhbGlnbmVyIGFuZCBpcyBjb21wYXJlZCB0byBhY3R1YWwgbGV2ZWxzLgogICAgICAgICMgU28gdmVydGljYWwgYWxpZ25tZW50IHByb2JsZW1zIHdpbGwgb2NjdXIgd2l0aCBhbnkgb3RoZXIKICAgICAgICAjIHN0YXJ0aW5nIHZhbHVlLgogICAgICAgIGlmICggIWRlZmluZWQoJG5lc3RpbmdfZGVwdGgpICkgewogICAgICAgICAgICAkbmVzdGluZ19kZXB0aCAgICAgICAgICAgICAgICAgICAgICAgPSAkcmxldmVscy0+WzBdOwogICAgICAgICAgICAkbmVzdGluZ19kZXB0aCAgICAgICAgICAgICAgICAgICAgICAgPSAwIGlmICggJG5lc3RpbmdfZGVwdGggPCAwICk7CiAgICAgICAgICAgICRyZGVwdGhfb2Zfb3BlbmluZ19zZXFuby0+W1NFUV9ST09UXSA9ICRuZXN0aW5nX2RlcHRoIC0gMTsKICAgICAgICB9CgogICAgICAgICMgZXJyb3IgY2hlY2sgZm9yIC1xd2FmOgogICAgICAgIGlmICgkaW5fcXdfc2Vxbm8pIHsKICAgICAgICAgICAgaWYgKCAkcnRva2VuX3R5cGUtPlswXSBuZSAncScgKSB7CgogICAgICAgICAgICAgICAgIyAtcXdhZiBpcyBleHBlY3RpbmcgYW5vdGhlciAncScgdG9rZW4gZm9yIG11bHRpbGluZSAtcXcKICAgICAgICAgICAgICAgICMgYmFzZWQgb24gdGhlIHtfZW5kaW5nX2luX3F1b3RlfSBmbGFnIGZyb20gdGhlIHRva2VuaXplcgogICAgICAgICAgICAgICAgIyBvZiB0aGUgcHJldmlvdXMgbGluZSwgYnV0IGEgJ3EnIGRpZG4ndCBhcnJpdmUuCiAgICAgICAgICAgICAgICBteSAkbG5vID0gJGxpbmVfaW5kZXggKyAxOwogICAgICAgICAgICAgICAgRmF1bHQoCiIkbG5vOiAtcXdhZiBleHBlY3RpbmcgcXcgY29udGludWF0aW9uIGxpbmUgYnV0IHNhdyB0eXBlICckcnRva2VuX3R5cGUtPlswXSdcbiIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICRqID0gLTE7CgogICAgICAgICMgTk9URTogY29kaW5nIGVmZmljaWVuY3kgaXMgY3JpdGljYWwgaW4gdGhpcyBsb29wIG92ZXIgYWxsIHRva2VucwogICAgICAgIGZvcmVhY2ggbXkgJHRva2VuICggQHskcnRva2Vuc30gKSB7CgogICAgICAgICAgICAjIE5PVEU6IERvIG5vdCBjbGlwIHRoZSAnbGV2ZWwnIHZhcmlhYmxlIHlldCBpZiBpdCBpcyBuZWdhdGl2ZS4gV2UKICAgICAgICAgICAgIyB3aWxsIGRvIHRoYXQgbGF0ZXIsIGluIHN1YiAnc3RvcmVfdG9rZW5fdG9fZ28nLiBUaGUgcmVhc29uIGlzCiAgICAgICAgICAgICMgdGhhdCBpbiBmaWxlcyB3aXRoIGxldmVsIGVycm9ycywgdGhlIGxvZ2ljIGluICd3ZWxkX2N1ZGRsZWRfZWxzZScKICAgICAgICAgICAgIyB1c2VzIGEgc3RhY2sgbG9naWMgdGhhdCB3aWxsIGdpdmUgYmFkIHdlbGRzIGlmIHdlIGNsaXAgbGV2ZWxzCiAgICAgICAgICAgICMgaGVyZS4gKEEgcmVjZW50IHVwZGF0ZSB3aWxsIHByb2JhYmx5IG5vdCBldmVuIGFsbG93IG5lZ2F0aXZlCiAgICAgICAgICAgICMgbGV2ZWxzIHRvIGFycml2ZSBoZXJlIGFueSBsb25nZXIpLgoKICAgICAgICAgICAgbXkgQHRva2FyeTsKCiAgICAgICAgICAgICMgSGFuZGxlIHRva2VucyB3aXRoIHNlcXVlbmNlIG51bWJlcnMgLi4uCiAgICAgICAgICAgICMgbm90ZSB0aGUgKysgaW5jcmVtZW50IGhpZGRlbiBoZXJlIGZvciBlZmZpY2llbmN5CiAgICAgICAgICAgIGlmICggJHJ0eXBlX3NlcXVlbmNlLT5bICsrJGogXSApIHsKICAgICAgICAgICAgICAgIG15ICRzZXFub19vbGQgPSAkcnR5cGVfc2VxdWVuY2UtPlskal07CiAgICAgICAgICAgICAgICBteSAkc2Vxbm8gICAgID0gJHNlcW5vX29sZDsKCiAgICAgICAgICAgICAgICBteSAkc2lnbiA9IDE7CiAgICAgICAgICAgICAgICBpZiAoICRpc19vcGVuaW5nX3Rva2VueyR0b2tlbn0gKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRhZGRlZF9zZXFub19jb3VudCkgewogICAgICAgICAgICAgICAgICAgICAgICAkc2Vxbm8gKz0gJGFkZGVkX3NlcW5vX2NvdW50OwogICAgICAgICAgICAgICAgICAgICAgICAkbmV3X3NlcW5vX2Zyb21fb2xkX3NlcW5veyRzZXFub19vbGR9ID0gJHNlcW5vOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoIERFVkVMX01PREUgJiYgJHNlcW5vICE9ICRsYXN0X25ld19zZXFubyArIDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRsbm8gPSAkbGluZV9pbmRleCArIDE7CiAgICAgICAgICAgICAgICAgICAgICAgIEZhdWx0KCIkbG5vOiBzZXFubz0kc2Vxbm8gbGFzdD0kbGFzdF9uZXdfc2Vxbm9cbiIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkbGFzdF9uZXdfc2Vxbm8gICAgICAgICAgICAgICAgICAgICAgICAgID0gJHNlcW5vOwogICAgICAgICAgICAgICAgICAgICRzZWxmLT5bX0tfb3BlbmluZ19jb250YWluZXJfXS0+eyRzZXFub30gPSBAeyRyTEx9OwogICAgICAgICAgICAgICAgICAgICRyZGVwdGhfb2Zfb3BlbmluZ19zZXFuby0+WyRzZXFub10gICAgICAgPSAkbmVzdGluZ19kZXB0aDsKICAgICAgICAgICAgICAgICAgICAkbmVzdGluZ19kZXB0aCsrOwoKICAgICAgICAgICAgICAgICAgICAjIFNhdmUgYSBzZXF1ZW5jZWQgYmxvY2sgdHlwZSBhdCBpdHMgb3BlbmluZyB0b2tlbi4KICAgICAgICAgICAgICAgICAgICAjIE5vdGUgdGhhdCB1bnNlcXVlbmNlZCBibG9jayB0eXBlcyBjYW4gb2NjdXIgaW4KICAgICAgICAgICAgICAgICAgICAjIHVuYmFsYW5jZWQgY29kZSB3aXRoIGVycm9ycyBidXQgYXJlIGlnbm9yZWQgaGVyZS4KICAgICAgICAgICAgICAgICAgICBpZiAoICRyYmxvY2tfdHlwZS0+WyRqXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGJsb2NrX3R5cGUgPSAkcmJsb2NrX3R5cGUtPlskal07CgogICAgICAgICAgICAgICAgICAgICAgICAjIFN0b3JlIHRoZSBibG9jayB0eXBlIHdpdGggc2VxdWVuY2UgbnVtYmVyIGFzIGhhc2gga2V5CiAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5bX3JibG9ja190eXBlX29mX3NlcW5vX10tPnskc2Vxbm99ID0gJGJsb2NrX3R5cGU7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGFuZCBzYXZlIGFueW55bW91cyBzdWJzIGFuZCBuYW1lZCBzdWJzIGluIHNlcGFyYXRlCiAgICAgICAgICAgICAgICAgICAgICAgICMgaGFzaGVzIHRvIGF2b2lkIGZ1dHVyZSBwYXR0ZXJuIHRlc3RzCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJG1hdGNoZXNfQVNVQnskYmxvY2tfdHlwZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+W19yaXNfYXN1Yl9ibG9ja19dLT57JHNlcW5vfSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIHByZS1jaGVjayBvbiBzcGFjZSBzcGVlZHMgdXAgdGhpcyB0ZXN0OgogICAgICAgICAgICAgICAgICAgICAgICBlbHNpZiAoJGJsb2NrX3R5cGUgPX4gL1xzLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJGJsb2NrX3R5cGUgPX4gLyRTVUJfUEFUVEVSTi8gKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+W19yaXNfc3ViX2Jsb2NrX10tPnskc2Vxbm99ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbm90IGEgc3ViIHR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJGlzX2Nsb3NpbmdfdG9rZW57JHRva2VufSApIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCRhZGRlZF9zZXFub19jb3VudCkgewogICAgICAgICAgICAgICAgICAgICAgICAkc2Vxbm8gPQogICAgICAgICAgICAgICAgICAgICAgICAgICRuZXdfc2Vxbm9fZnJvbV9vbGRfc2Vxbm97JHNlcW5vX29sZH0gfHwgJHNlcW5vX29sZDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgVGhlIG9wZW5pbmcgZGVwdGggc2hvdWxkIGFsd2F5cyBiZSBkZWZpbmVkLCBhbmQKICAgICAgICAgICAgICAgICAgICAjIGl0IHNob3VsZCBlcXVhbCAkbmVzdGluZ19kZXB0aC0xLiAgVG8gcHJvdGVjdAogICAgICAgICAgICAgICAgICAgICMgYWdhaW5zdCB1bmZvcmVzZWVuIGVycm9yIGNvbmRpdGlvbnMsIGhvd2V2ZXIsIHdlCiAgICAgICAgICAgICAgICAgICAgIyB3aWxsIGNoZWNrIHRoaXMgYW5kIGZpeCB0aGluZ3MgaWYgbmVjZXNzYXJ5LiAgRm9yCiAgICAgICAgICAgICAgICAgICAgIyBhIHRlc3QgY2FzZSBzZWUgaXNzdWUgYzA1NS4KICAgICAgICAgICAgICAgICAgICBteSAkb3BlbmluZ19kZXB0aCA9ICRyZGVwdGhfb2Zfb3BlbmluZ19zZXFuby0+WyRzZXFub107CiAgICAgICAgICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkb3BlbmluZ19kZXB0aCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRvcGVuaW5nX2RlcHRoID0gJG5lc3RpbmdfZGVwdGggLSAxOwogICAgICAgICAgICAgICAgICAgICAgICAkb3BlbmluZ19kZXB0aCA9IDAgaWYgKCAkb3BlbmluZ19kZXB0aCA8IDAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHJkZXB0aF9vZl9vcGVuaW5nX3NlcW5vLT5bJHNlcW5vXSA9ICRvcGVuaW5nX2RlcHRoOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIG5vdCBmYXRhbCBidXQgc2hvdWxkIG5vdCBoYXBwZW4uICBUaGUKICAgICAgICAgICAgICAgICAgICAgICAgIyB0b2tlbml6ZXIgZ2VuZXJhdGVzIHNlcXVlbmNlIG51bWJlcnMKICAgICAgICAgICAgICAgICAgICAgICAgIyBpbmNyZW1lbnRhbGx5IHVwb24gZW5jb3VudGVyaW5nIGVhY2ggbmV3CiAgICAgICAgICAgICAgICAgICAgICAgICMgb3BlbmluZyB0b2tlbiwgc28gZXZlcnkgcG9zaXRpdmUgc2VxdWVuY2UKICAgICAgICAgICAgICAgICAgICAgICAgIyBudW1iZXIgc2hvdWxkIGNvcnJlc3BvbmQgdG8gYW4gb3BlbmluZyB0b2tlbi4KICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGxubyA9ICRsaW5lX2luZGV4ICsgMTsKICAgICAgICAgICAgICAgICAgICAgICAgREVWRUxfTU9ERSAmJiBGYXVsdCg8PEVPTSk7CiRsbm86IE5vIG9wZW5pbmcgdG9rZW4gc2VlbiBmb3IgY2xvc2luZyB0b2tlbiA9ICckdG9rZW4nIGF0IHNlcT0kc2Vxbm8gYXQgZGVwdGg9JG9wZW5pbmdfZGVwdGgKRU9NCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRzZWxmLT5bX0tfY2xvc2luZ19jb250YWluZXJfXS0+eyRzZXFub30gPSBAeyRyTEx9OwogICAgICAgICAgICAgICAgICAgICRuZXN0aW5nX2RlcHRoICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAkb3BlbmluZ19kZXB0aDsKICAgICAgICAgICAgICAgICAgICAkc2lnbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gLTE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoICR0b2tlbiBlcSAnPycgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRhZGRlZF9zZXFub19jb3VudCkgewogICAgICAgICAgICAgICAgICAgICAgICAkc2Vxbm8gKz0gJGFkZGVkX3NlcW5vX2NvdW50OwogICAgICAgICAgICAgICAgICAgICAgICAkbmV3X3NlcW5vX2Zyb21fb2xkX3NlcW5veyRzZXFub19vbGR9ID0gJHNlcW5vOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoIERFVkVMX01PREUgJiYgJHNlcW5vICE9ICRsYXN0X25ld19zZXFubyArIDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRsbm8gPSAkbGluZV9pbmRleCArIDE7CiAgICAgICAgICAgICAgICAgICAgICAgIEZhdWx0KCIkbG5vOiBzZXFubz0kc2Vxbm8gbGFzdD0kbGFzdF9uZXdfc2Vxbm9cbiIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkbGFzdF9uZXdfc2Vxbm8gPSAkc2Vxbm87CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPltfS19vcGVuaW5nX3Rlcm5hcnlfXS0+eyRzZXFub30gPSBAeyRyTEx9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKCAkdG9rZW4gZXEgJzonICkgewogICAgICAgICAgICAgICAgICAgIGlmICgkYWRkZWRfc2Vxbm9fY291bnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHNlcW5vID0KICAgICAgICAgICAgICAgICAgICAgICAgICAkbmV3X3NlcW5vX2Zyb21fb2xkX3NlcW5veyRzZXFub19vbGR9IHx8ICRzZXFub19vbGQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRzaWduID0gLTE7CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPltfS19jbG9zaW5nX3Rlcm5hcnlfXS0+eyRzZXFub30gPSBAeyRyTEx9OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgVGhlIG9ubHkgc2VxdWVuY2VkIHR5cGVzIG91dHB1dCBieSB0aGUgdG9rZW5pemVyIGFyZQogICAgICAgICAgICAgICAgIyB0aGUgb3BlbmluZyAmIGNsb3NpbmcgY29udGFpbmVycyBhbmQgdGhlIHRlcm5hcnkKICAgICAgICAgICAgICAgICMgdHlwZXMuIFNvIHdlIHdvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgdGhlIHRva2VuaXplciBoYXMKICAgICAgICAgICAgICAgICMgYmVlbiBjaGFuZ2VkIHRvIG1hcmsgc29tZSBvdGhlciB0b2tlbnMgd2l0aCBzZXF1ZW5jZQogICAgICAgICAgICAgICAgIyBudW1iZXJzLCBvciBpZiBhbiBlcnJvciBoYXMgYmVlbiBpbnRyb2R1Y2VkIGluIGEKICAgICAgICAgICAgICAgICMgaGFzaCBzdWNoIGFzICVpc19vcGVuaW5nX2NvbnRhaW5lcgogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJGxubyA9ICRsaW5lX2luZGV4ICsgMTsKICAgICAgICAgICAgICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KDw8RU9NKTsKJGxubzogVW5leHBlY3RlZCBzZXF1ZW5jZWQgdG9rZW4gJyR0b2tlbicgb2YgdHlwZSAnJHJ0b2tlbl90eXBlLT5bJGpdJywgc2VxdWVuY2U9JHNlcW5vIGFycml2ZWQgZnJvbSB0b2tlbml6ZXIuCkV4cGVjdGluZyBvbmx5IG9wZW5pbmcgb3IgY2xvc2luZyBjb250YWluZXIgdG9rZW5zIG9yIHRlcm5hcnkgdG9rZW5zIHdpdGggc2VxdWVuY2UgbnVtYmVycy4KRU9NCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAkc2lnbiA+IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPltfcklfb3BlbmluZ19dLT5bJHNlcW5vXSA9IEB7JHJTU307CgogICAgICAgICAgICAgICAgICAgICMgRm9yIGVmZmljaWVuY3ksIHdlIGZpbmQgdGhlIG1heGltdW0gbGV2ZWwgb2YKICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgdG9rZW5zIG9mIGFueSB0eXBlLiAgVGhlIGFjdHVhbCBtYXhpbXVtCiAgICAgICAgICAgICAgICAgICAgIyBsZXZlbCB3aWxsIGJlIHRoYXQgb2YgdGhlaXIgY29udGVudHMgd2hpY2ggaXMgMQogICAgICAgICAgICAgICAgICAgICMgZ3JlYXRlci4gIFRoYXQgd2lsbCBiZSBmaXhlZCBpbiBzdWIKICAgICAgICAgICAgICAgICAgICAjICdmaW5pc2hfZm9ybWF0dGluZycuCiAgICAgICAgICAgICAgICAgICAgbXkgJGxldmVsID0gJHJsZXZlbHMtPlskal07CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkbGV2ZWwgPiAkc2VsZi0+W19tYXhpbXVtX2xldmVsX10gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5bX21heGltdW1fbGV2ZWxfXSAgICAgICAgID0gJGxldmVsOwogICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+W19tYXhpbXVtX2xldmVsX2F0X2xpbmVfXSA9ICRsaW5lX2luZGV4ICsgMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsgJHNlbGYtPltfcklfY2xvc2luZ19dLT5bJHNlcW5vXSA9IEB7JHJTU30gfQogICAgICAgICAgICAgICAgcHVzaCBAeyRyU1N9LCAkc2lnbiAqICRzZXFubzsKICAgICAgICAgICAgICAgICR0b2thcnlbX1RZUEVfU0VRVUVOQ0VfXSA9ICRzZXFubzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICR0b2thcnlbX1RZUEVfU0VRVUVOQ0VfXSA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBIZXJlIHdlIGFyZSBzdG9yaW5nIHRoZSBmaXJzdCBmaXZlIHZhcmlhYmxlcyBwZXIgdG9rZW4uIFRoZQogICAgICAgICAgICAjIHJlbWFpbmluZyB0b2tlbiB2YXJpYWJsZXMgd2lsbCBiZSBhZGRlZCBsYXRlciBhcyBmb2xsb3dzOgogICAgICAgICAgICAjICBfVE9LRU5fTEVOR1RIXyAgICAgIGlzIGFkZGVkIGJ5IHN1YiBzdG9yZV90b2tlbgogICAgICAgICAgICAjICBfQ1VNVUxBVElWRV9MRU5HVEhfIGlzIGFkZGVkIGJ5IHN1YiBzdG9yZV90b2tlbgogICAgICAgICAgICAjICBfQ0lfTEVWRUxfICAgICAgICAgIGlzIGFkZGVkIGJ5IHN1YiBzZXRfY2kKICAgICAgICAgICAgIyBTbyBhbGwgdG9rZW4gdmFyaWFibGVzIGFyZSBhdmFpbGFibGUgZm9yIHVzZSBhZnRlciBzdWIgc2V0X2NpLgoKICAgICAgICAgICAgJHRva2FyeVtfVE9LRU5fXSAgICAgID0gJHRva2VuOwogICAgICAgICAgICAkdG9rYXJ5W19UWVBFX10gICAgICAgPSAkcnRva2VuX3R5cGUtPlskal07CiAgICAgICAgICAgICR0b2thcnlbX0xFVkVMX10gICAgICA9ICRybGV2ZWxzLT5bJGpdOwogICAgICAgICAgICAkdG9rYXJ5W19MSU5FX0lOREVYX10gPSAkbGluZV9pbmRleDsKCiAgICAgICAgICAgIHB1c2ggQHskckxMfSwgXEB0b2thcnk7CgogICAgICAgICAgICAjIGhhbmRsZSAtcXdhZiBvcHRpb24gZm9yIGNvbnZlcnRpbmcgYSBxdyBxdW90ZSAodHlwZSA9ICdxJykgdG8KICAgICAgICAgICAgIyBmdW5jdGlvbiBjYWxsCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICRyT3B0c19xd19hc19mdW5jdGlvbgogICAgICAgICAgICAgICAgJiYgJHJ0b2tlbl90eXBlLT5bJGpdIGVxICdxJwogICAgICAgICAgICAgICAgJiYgKAoKICAgICAgICAgICAgICAgICAgICAjIGNvbnRpbnVpbmcgaW4gYSBxdz8KICAgICAgICAgICAgICAgICAgICAkaW5fcXdfc2Vxbm8KCiAgICAgICAgICAgICAgICAgICAgIyBzdGFydGluZyBhIG5ldyBxdz8KICAgICAgICAgICAgICAgICAgICB8fCAoICggJGogPiAwIHx8ICEkbGFzdF9lbmRpbmdfaW5fcXVvdGUgKQogICAgICAgICAgICAgICAgICAgICAgICAmJiBzdWJzdHIoICR0b2tlbiwgMCwgMyApIGVxICdxdygnICkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRzZWxmLT5xd190b19mdW5jdGlvbiggJGxpbmVfb2ZfdG9rZW5zLCAkaiA9PSAkam1heCApOwogICAgICAgICAgICB9CgogICAgICAgIH0gIyMgZW5kIHRva2VuIGxvb3AKCiAgICAgICAgIyBOZWVkIHRvIHJlbWVtYmVyIGlmIHdlIGNhbiB0cmltIHRoZSBpbnB1dCBsaW5lCiAgICAgICAgJGxpbmVfb2ZfdG9rZW5zLT57X2VuZGVkX2luX2JsYW5rX3Rva2VufSA9ICRydG9rZW5fdHlwZS0+WyRqbWF4XSBlcSAnYic7CgogICAgICAgICMgVmFsdWVzIG5lZWRlZCBieSBMb2dnZXIgaWYgYSBsb2dmaWxlIGlzIHNhdmVkOgogICAgICAgIGlmICggJHNlbGYtPltfc2F2ZV9sb2dmaWxlX10gKSB7CiAgICAgICAgICAgICRsaW5lX29mX3Rva2Vucy0+e19sZXZlbF8wfSAgICA9ICRybGV2ZWxzLT5bMF07CiAgICAgICAgICAgICRsaW5lX29mX3Rva2Vucy0+e19jaV9sZXZlbF8wfSA9IDA7ICAgICAgICAgICAgICAgIyBmaXggbGF0ZXIKICAgICAgICAgICAgJGxpbmVfb2ZfdG9rZW5zLT57X25lc3RpbmdfYmxvY2tzXzB9ID0KICAgICAgICAgICAgICAkbGluZV9vZl90b2tlbnNfb2xkLT57X25lc3RpbmdfYmxvY2tzXzB9OwogICAgICAgICAgICAkbGluZV9vZl90b2tlbnMtPntfbmVzdGluZ190b2tlbnNfMH0gPQogICAgICAgICAgICAgICRsaW5lX29mX3Rva2Vuc19vbGQtPntfbmVzdGluZ190b2tlbnNfMH07CiAgICAgICAgfQoKICAgICAgICByZXR1cm47CgogICAgfSAjIyBlbmQgc3ViIHdyaXRlX2xpbmVfaW5uZXJfbG9vcAoKfSAjIyBlbmQgY2xvc3VyZSB3cml0ZV9saW5lCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDT0RFIFNFQ1RJT04gNTogUHJlLXByb2Nlc3MgdGhlIGVudGlyZSBmaWxlCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKc3ViIGZpbmlzaF9mb3JtYXR0aW5nIHsKCiAgICBteSAoICRzZWxmLCAkc2V2ZXJlX2Vycm9yICkgPSBAXzsKCiAgICAjIFRoZSBmaWxlIGhhcyBiZWVuIHRva2VuaXplZCBhbmQgaXMgcmVhZHkgdG8gYmUgZm9ybWF0dGVkLgogICAgIyBBbGwgb2YgdGhlIHJlbGV2YW50IGRhdGEgaXMgc3RvcmVkIGluICRzZWxmLCByZWFkeSB0byBnby4KCiAgICAjIEdpdmVuOgogICAgIyAgICRzZXZlcmVfZXJyb3IgPSB0cnVlIGlmIGEgc2V2ZXJlIGVycm9yIHdhcyBlbmNvdW50ZXJlZAoKICAgICMgUmV0dXJuczoKICAgICMgICB0cnVlIGlmIGlucHV0IGZpbGUgd2FzIGNvcGllZCB2ZXJiYXRpbSBkdWUgdG8gZXJyb3JzCiAgICAjICAgZmFsc2Ugb3RoZXJ3aXNlCgogICAgIyBTb21lIG9mIHRoZSBjb2RlIGluIHN1YiBicmVha19saXN0cyBpcyBub3Qgcm9idXN0IGVub3VnaCB0byBwcm9jZXNzIGNvZGUKICAgICMgd2l0aCBhcmJpdHJhcnkgYnJhY2UgZXJyb3JzLiBUaGUgc2ltcGxlc3QgZml4IGlzIHRvIGp1c3QgcmV0dXJuIHRoZSBmaWxlCiAgICAjIHZlcmJhdGltIGlmIHRoZXJlIGFyZSBicmFjZSBlcnJvcnMuICBUaGlzIGZpeGVzIGlzc3VlIGMxNjAuCiAgICAkc2V2ZXJlX2Vycm9yIHx8PSBnZXRfc2F3X2JyYWNlX2Vycm9yKCk7CgogICAgIyBDaGVjayB0aGUgbWF4aW11bSBsZXZlbC4gSWYgaXQgaXMgZXh0cmVtZWx5IGxhcmdlIHdlIHdpbGwgZ2l2ZSB1cCBhbmQKICAgICMgb3V0cHV0IHRoZSBmaWxlIHZlcmJhdGltLiAgTm90ZSB0aGF0IHRoZSBhY3R1YWwgbWF4aW11bSBsZXZlbCBpcyAxCiAgICAjIGdyZWF0ZXIgdGhhbiB0aGUgc2F2ZWQgdmFsdWUsIHNvIHdlIGZpeCB0aGF0IGhlcmUuCiAgICAkc2VsZi0+W19tYXhpbXVtX2xldmVsX10gKz0gMTsKICAgIG15ICRtYXhpbXVtX2xldmVsICAgICAgID0gJHNlbGYtPltfbWF4aW11bV9sZXZlbF9dOwogICAgbXkgJG1heGltdW1fdGFibGVfaW5kZXggPSAkI21heGltdW1fbGluZV9sZW5ndGhfYXRfbGV2ZWw7CiAgICBpZiAoICEkc2V2ZXJlX2Vycm9yICYmICRtYXhpbXVtX2xldmVsID49ICRtYXhpbXVtX3RhYmxlX2luZGV4ICkgewogICAgICAgICRzZXZlcmVfZXJyb3IgfHw9IDE7CiAgICAgICAgV2Fybig8PEVPTSk7ClRoZSBtYXhpbXVtIGluZGVudGF0aW9uIGxldmVsLCAkbWF4aW11bV9sZXZlbCwgZXhjZWVkcyB0aGUgYnVpbHRpbiBsaW1pdCBvZiAkbWF4aW11bV90YWJsZV9pbmRleC4KU29tZXRoaW5nIG1heSBiZSB3cm9uZzsgZm9ybWF0dGluZyB3aWxsIGJlIHNraXBwZWQuCkVPTQogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIE91dHB1dCBmaWxlIHZlcmJhdGltIGlmIHNldmVyZSBlcnJvciBvciBubyBmb3JtYXR0aW5nIHJlcXVlc3RlZAogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGlmICggJHNldmVyZV9lcnJvciB8fCAkck9wdHMtPntub3RpZHl9ICkgewogICAgICAgICRzZWxmLT5kdW1wX3ZlcmJhdGltKCk7CiAgICAgICAgJHNlbGYtPndyYXB1cCgkc2V2ZXJlX2Vycm9yKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICB7CiAgICAgICAgbXkgJHJpeF9zaWRlX2NvbW1lbnRzID0gJHNlbGYtPnNldF9DT0RFX3R5cGUoKTsKCiAgICAgICAgJHNlbGYtPmZpbmRfbm9uX2luZGVudGluZ19icmFjZXMoJHJpeF9zaWRlX2NvbW1lbnRzKTsKCiAgICAgICAgIyBIYW5kbGUgYW55IHJlcXVlc3RlZCBzaWRlIGNvbW1lbnQgZGVsZXRpb25zLiBJdCBpcyBlYXNpZXIgdG8gZ2V0CiAgICAgICAgIyB0aGlzIGRvbmUgaGVyZSByYXRoZXIgdGhhbiBmYXJ0aGVyIGRvd24gdGhlIHBpcGVsaW5lIGJlY2F1c2UgSU8KICAgICAgICAjIGxpbmVzIHRha2UgYSBkaWZmZXJlbnQgcm91dGUsIGFuZCBiZWNhdXNlIGxpbmVzIHdpdGggZGVsZXRlZCBIU0MKICAgICAgICAjIGJlY29tZSBCTCBsaW5lcy4gIFdlIGhhdmUgYWxyZWFkeSBoYW5kbGVkIGFueSB0ZWUgcmVxdWVzdHMgaW4gc3ViCiAgICAgICAgIyBnZXRsaW5lLCBzbyBpdCBpcyBzYWZlIHRvIGRlbGV0ZSBzaWRlIGNvbW1lbnRzIG5vdy4KICAgICAgICAkc2VsZi0+ZGVsZXRlX3NpZGVfY29tbWVudHMoJHJpeF9zaWRlX2NvbW1lbnRzKQogICAgICAgICAgaWYgKCAkck9wdHNfZGVsZXRlX3NpZGVfY29tbWVudHMKICAgICAgICAgICAgfHwgJHJPcHRzX2RlbGV0ZV9jbG9zaW5nX3NpZGVfY29tbWVudHMgKTsKICAgIH0KCiAgICAjIFZlcmlmeSB0aGF0IHRoZSBsaW5lIGhhc2ggZG9lcyBub3QgaGF2ZSBhbnkgdW5rbm93biBrZXlzLgogICAgJHNlbGYtPmNoZWNrX2xpbmVfaGFzaGVzKCkgaWYgKERFVkVMX01PREUpOwoKICAgICRzZWxmLT5pbnRlcmJyYWNrZXRfYXJyb3dfY2hlY2soKTsKCiAgICB7CiAgICAgICAgIyBNYWtlIGEgcGFzcyB0aHJvdWdoIGFsbCB0b2tlbnMsIGFkZGluZyBvciBkZWxldGluZyBhbnkgd2hpdGVzcGFjZSBhcwogICAgICAgICMgcmVxdWlyZWQuICBBbHNvIG1ha2UgYW55IG90aGVyIGNoYW5nZXMsIHN1Y2ggYXMgYWRkaW5nIHNlbWljb2xvbnMuCiAgICAgICAgIyBBbGwgdG9rZW4gY2hhbmdlcyBtdXN0IGJlIG1hZGUgaGVyZSBzbyB0aGF0IHRoZSB0b2tlbiBkYXRhIHN0cnVjdHVyZQogICAgICAgICMgcmVtYWlucyBmaXhlZCBmb3IgdGhlIHJlc3Qgb2YgdGhpcyBpdGVyYXRpb24uCiAgICAgICAgbXkgKCAkZXJyb3IsICRycXdfbGluZXMgKSA9ICRzZWxmLT5yZXNwYWNlX3Rva2VucygpOwogICAgICAgIGlmICgkZXJyb3IpIHsKICAgICAgICAgICAgJHNlbGYtPmR1bXBfdmVyYmF0aW0oKTsKICAgICAgICAgICAgJHNlbGYtPndyYXB1cCgpOwogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CgogICAgICAgICMgc3ViICdzZXRfY2knIGlzIGNhbGxlZCBhZnRlciBzdWIgcmVzcGFjZSB0byBhbGxvdyB1c2Ugb2YgdHlwZSBjb3VudHMKICAgICAgICAjIFRva2VuIHZhcmlhYmxlIF9DSV9MRVZFTF8gaXMgb25seSBkZWZpbmVkIGFmdGVyIHRoaXMgY2FsbAogICAgICAgICRzZWxmLT5zZXRfY2koKTsKCiAgICAgICAgJHNlbGYtPmZpbmRfbXVsdGlsaW5lX3F3KCRycXdfbGluZXMpOwogICAgfQoKICAgICMgRHVtcCB1bmlxdWUgaGFzaCBrZXlzCiAgICBpZiAoICRyT3B0cy0+eydkdW1wLXVuaXF1ZS1rZXlzJ30gKSB7CiAgICAgICAgJHNlbGYtPmR1bXBfdW5pcXVlX2tleXMoKTsKICAgICAgICBFeGl0KDApOwogICAgfQoKICAgICMgRHVtcCBhbnkgcmVxdWVzdGVkIGJsb2NrIHN1bW1hcnkgZGF0YQogICAgaWYgKCAkck9wdHMtPnsnZHVtcC1ibG9jay1zdW1tYXJ5J30gKSB7CiAgICAgICAgJHNlbGYtPmR1bXBfYmxvY2tfc3VtbWFyeSgpOwogICAgICAgIEV4aXQoMCk7CiAgICB9CgogICAgIyBEdW1wIHZhcmlhYmxlIHVzYWdlIGluZm8gaWYgcmVxdWVzdGVkCiAgICBpZiAoICRyT3B0cy0+eydkdW1wLXVudXN1YWwtdmFyaWFibGVzJ30gKSB7CiAgICAgICAgJHNlbGYtPmR1bXBfdW51c3VhbF92YXJpYWJsZXMoKTsKICAgICAgICBFeGl0KDApOwogICAgfQoKICAgICMgQWN0IG9uIC13YXJuLXZhcmlhYmxlLXR5cGVzIGlmIHJlcXVlc3RlZCBhbmQgdGhlIGxvZ2dlciBpcyBhdmFpbGFibGUKICAgICMgKHRoZSBsb2dnZXIgaXMgZGVhY3RpdmF0ZWQgZHVyaW5nIGl0ZXJhdGlvbnMpCiAgICAkc2VsZi0+d2Fybl92YXJpYWJsZV90eXBlcygpCiAgICAgIGlmICggJXskcndhcm5fdmFyaWFibGVfdHlwZXN9CiAgICAgICAgJiYgJHNlbGYtPltfbG9nZ2VyX29iamVjdF9dICk7CgogICAgaWYgKCAgICRyT3B0cy0+eyd3YXJuLW1pc21hdGNoZWQtYXJncyd9CiAgICAgICAgfHwgJHJPcHRzLT57J3dhcm4tbWlzbWF0Y2hlZC1yZXR1cm5zJ30gKQogICAgewogICAgICAgICRzZWxmLT53YXJuX21pc21hdGNoZWQoKQogICAgICAgICAgaWYgKCAkc2VsZi0+W19sb2dnZXJfb2JqZWN0X10gKTsKICAgIH0KCiAgICBpZiAoICRyT3B0cy0+eydkdW1wLW1pc21hdGNoZWQtYXJncyd9ICkgewogICAgICAgICRzZWxmLT5kdW1wX21pc21hdGNoZWRfYXJncygpOwogICAgICAgIEV4aXQoMCk7CiAgICB9CgogICAgaWYgKCAkck9wdHMtPnsnZHVtcC1taXNtYXRjaGVkLXJldHVybnMnfSApIHsKICAgICAgICAkc2VsZi0+ZHVtcF9taXNtYXRjaGVkX3JldHVybnMoKTsKICAgICAgICBFeGl0KDApOwogICAgfQoKICAgIGlmICggJHJPcHRzLT57J2R1bXAtbWl4ZWQtY2FsbC1wYXJlbnMnfSApIHsKICAgICAgICAkc2VsZi0+ZHVtcF9taXhlZF9jYWxsX3BhcmVucygpOwogICAgICAgIEV4aXQoMCk7CiAgICB9CgogICAgIyBBY3Qgb24gLXdhbnQtY2FsbC1wYXJlbnMgYW5kIC0tbm93YW50LWNhbGwtcGFyZW5zIHJlcXVlc3RlZCBhbmQgdGhlCiAgICAjIGxvZ2dlciBpcyBhdmFpbGFibGUgKHRoZSBsb2dnZXIgaXMgZGVhY3RpdmF0ZWQgZHVyaW5nIGl0ZXJhdGlvbnMpCiAgICAkc2VsZi0+c2Nhbl9jYWxsX3BhcmVucygpCiAgICAgIGlmICggJWNhbGxfcGFyZW5fc3R5bGUKICAgICAgICAmJiAkc2VsZi0+W19sb2dnZXJfb2JqZWN0X10gKTsKCiAgICAkc2VsZi0+ZXhhbWluZV92ZXJ0aWNhbF90aWdodG5lc3NfZmxhZ3MoKTsKCiAgICAkc2VsZi0+c2V0X2V4Y2x1ZGVkX2xwX2NvbnRhaW5lcnMoKTsKCiAgICAkc2VsZi0+a2VlcF9vbGRfbGluZV9icmVha3MoKTsKCiAgICAjIEltcGxlbWVudCBhbnkgd2VsZGluZyBuZWVkZWQgZm9yIHRoZSAtd24gb3IgLWNiIG9wdGlvbnMKICAgICRzZWxmLT53ZWxkX2NvbnRhaW5lcnMoKTsKCiAgICAjIENvbGxlY3QgaW5mbyBuZWVkZWQgdG8gaW1wbGVtZW50IHRoZSAteGxwIHN0eWxlCiAgICAkc2VsZi0+eGxwX2NvbGxhcHNlZF9sZW5ndGhzKCkKICAgICAgaWYgKCAkck9wdHNfbGluZV91cF9wYXJlbnRoZXNlcyAmJiAkck9wdHNfZXh0ZW5kZWRfbGluZV91cF9wYXJlbnRoZXNlcyApOwoKICAgICMgTG9jYXRlIHNtYWxsIG5lc3RlZCBibG9ja3Mgd2hpY2ggc2hvdWxkIG5vdCBiZSBicm9rZW4KICAgICRzZWxmLT5tYXJrX3Nob3J0X25lc3RlZF9ibG9ja3MoKTsKCiAgICAkc2VsZi0+c3BlY2lhbF9pbmRlbnRhdGlvbl9hZGp1c3RtZW50cygpOwoKICAgICMgVmVyaWZ5IHRoYXQgdGhlIG1haW4gdG9rZW4gYXJyYXkgbG9va3MgT0suICBJZiB0aGlzIGV2ZXIgY2F1c2VzIGEgZmF1bHQKICAgICMgdGhlbiBwbGFjZSBzaW1pbGFyIGNoZWNrcyBiZWZvcmUgdGhlIHN1YiBjYWxscyBhYm92ZSB0byBsb2NhbGl6ZSB0aGUKICAgICMgcHJvYmxlbS4KICAgICRzZWxmLT5jaGVja19yTEwoIkJlZm9yZSAncHJvY2Vzc19hbGxfbGluZXMnIikgaWYgKERFVkVMX01PREUpOwoKICAgICMgRmluaXNoZXMgZm9ybWF0dGluZyBhbmQgd3JpdGUgdGhlIHJlc3VsdCB0byB0aGUgbGluZSBzaW5rLgogICAgIyBFdmVudHVhbGx5IHRoaXMgY2FsbCBzaG91bGQganVzdCBjaGFuZ2UgdGhlICdybGluZXMnIGRhdGEgYWNjb3JkaW5nIHRvIHRoZQogICAgIyBuZXcgbGluZSBicmVha3MgYW5kIHRoZW4gcmV0dXJuIHNvIHRoYXQgd2UgY2FuIGRvIGFuIGludGVybmFsIGl0ZXJhdGlvbgogICAgIyBiZWZvcmUgY29udGludWluZyB3aXRoIHRoZSBuZXh0IHN0YWdlcyBvZiBmb3JtYXR0aW5nLgogICAgJHNlbGYtPnByb2Nlc3NfYWxsX2xpbmVzKCk7CgogICAgIyBBIGZpbmFsIHJvdXRpbmUgdG8gdGllIHVwIGFueSBsb29zZSBlbmRzCiAgICAkc2VsZi0+d3JhcHVwKCk7CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBmaW5pc2hfZm9ybWF0dGluZwoKbXkgJWlzX2xvb3BfdHlwZTsKCkJFR0lOIHsKICAgIG15IEBxID0gcXcoIGZvciBmb3JlYWNoIHdoaWxlIGRvIHVudGlsICk7CiAgICBAaXNfbG9vcF90eXBle0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7Cn0KCnN1YiBmaW5kX2xldmVsX2luZm8gewoKICAgIG15ICgkc2VsZikgPSBAXzsKCiAgICAjIEZpbmQgbGV2ZWwgcmFuZ2VzIGFuZCB0b3RhbCB2YXJpYXRpb25zIG9mIGFsbCBjb2RlIGJsb2NrcyBpbiB0aGlzIGZpbGUuCgogICAgIyBSZXR1cm5zOgogICAgIyAgIHJlZiB0byBoYXNoIHdpdGggYmxvY2sgaW5mbywgd2l0aCBzZXFubyBhcyBrZXkgKHNlZSBiZWxvdykKCiAgICAjIFRoZSBhcnJheSBfclNTXyBoYXMgdGhlIGNvbXBsZXRlIGNvbnRhaW5lciB0cmVlIGZvciB0aGlzIGZpbGUuCiAgICBteSAkclNTID0gJHNlbGYtPltfclNTX107CgogICAgIyBXZSB3aWxsIGJlIGlnbm9yaW5nIGV2ZXJ5dGhpbmcgZXhjZXB0IGNvZGUgYmxvY2sgY29udGFpbmVycwogICAgbXkgJHJibG9ja190eXBlX29mX3NlcW5vID0gJHNlbGYtPltfcmJsb2NrX3R5cGVfb2Zfc2Vxbm9fXTsKCiAgICBteSBAc3RhY2s7CiAgICBteSAlbGV2ZWxfaW5mbzsKCiAgICAjIFRSRUVfTE9PUDoKICAgIGZvcmVhY2ggbXkgJHNzZXEgKCBAeyRyU1N9ICkgewogICAgICAgIG15ICRzdGFja19kZXB0aCA9IEBzdGFjazsKICAgICAgICBteSAkc2VxX25leHQgICAgPSAkc3NlcSA+IDAgPyAkc3NlcSA6IC0kc3NlcTsKCiAgICAgICAgbmV4dCBpZiAoICEkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8tPnskc2VxX25leHR9ICk7CiAgICAgICAgaWYgKCAkc3NlcSA+IDAgKSB7CgogICAgICAgICAgICAjIFNUQUNLX0xPT1A6CiAgICAgICAgICAgIG15ICRpdGVtOwogICAgICAgICAgICBmb3JlYWNoIG15ICRzZXEgKEBzdGFjaykgewogICAgICAgICAgICAgICAgJGl0ZW0gPSAkbGV2ZWxfaW5mb3skc2VxfTsKICAgICAgICAgICAgICAgIGlmICggJGl0ZW0tPnttYXhpbXVtX2RlcHRofSA8ICRzdGFja19kZXB0aCApIHsKICAgICAgICAgICAgICAgICAgICAkaXRlbS0+e21heGltdW1fZGVwdGh9ID0gJHN0YWNrX2RlcHRoOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGl0ZW0tPntibG9ja19jb3VudH0rKzsKICAgICAgICAgICAgfSAjIyBlbmQgU1RBQ0sgTE9PUAoKICAgICAgICAgICAgcHVzaCBAc3RhY2ssICRzZXFfbmV4dDsKICAgICAgICAgICAgbXkgJGJsb2NrX3R5cGUgPSAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8tPnskc2VxX25leHR9OwoKICAgICAgICAgICAgIyBJZiB0aGlzIGJsb2NrIGlzIGEgbG9vcCBuZXN0ZWQgd2l0aGluIGEgbG9vcCwgdGhlbiB3ZQogICAgICAgICAgICAjIHdpbGwgbWFyayBpdCBhcyBhbiAnaW5uZXJfbG9vcCcuIFRoaXMgaXMgYSB1c2VmdWwKICAgICAgICAgICAgIyBjb21wbGV4aXR5IG1lYXN1cmUuCiAgICAgICAgICAgIG15ICRpc19pbm5lcl9sb29wID0gMDsKICAgICAgICAgICAgaWYgKCAkaXNfbG9vcF90eXBleyRibG9ja190eXBlfSAmJiBkZWZpbmVkKCRpdGVtKSApIHsKICAgICAgICAgICAgICAgICRpc19pbm5lcl9sb29wID0gJGlzX2xvb3BfdHlwZXsgJGl0ZW0tPntibG9ja190eXBlfSB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAkbGV2ZWxfaW5mb3skc2VxX25leHR9ID0gewogICAgICAgICAgICAgICAgc3RhcnRpbmdfZGVwdGggPT4gJHN0YWNrX2RlcHRoLAogICAgICAgICAgICAgICAgbWF4aW11bV9kZXB0aCAgPT4gJHN0YWNrX2RlcHRoLAogICAgICAgICAgICAgICAgYmxvY2tfY291bnQgICAgPT4gMSwKICAgICAgICAgICAgICAgIGJsb2NrX3R5cGUgICAgID0+ICRibG9ja190eXBlLAogICAgICAgICAgICAgICAgaXNfaW5uZXJfbG9vcCAgPT4gJGlzX2lubmVyX2xvb3AsCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBteSAkc2VxX3Rlc3QgPSBwb3AgQHN0YWNrOwoKICAgICAgICAgICAgIyBlcnJvciBjaGVjawogICAgICAgICAgICBpZiAoICRzZXFfdGVzdCAhPSAkc2VxX25leHQgKSB7CgogICAgICAgICAgICAgICAgIyBTaG91bGRuJ3QgaGFwcGVuIC0gdGhlICRyU1MgYXJyYXkgbXVzdCBoYXZlIGFuIGVycm9yCiAgICAgICAgICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KCJzdGFjayBlcnJvciBmaW5kaW5nIHRvdGFsIGRlcHRoc1xuIik7CgogICAgICAgICAgICAgICAgJWxldmVsX2luZm8gPSAoKTsKICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9ICMjIGVuZCBUUkVFX0xPT1AKCiAgICByZXR1cm4gXCVsZXZlbF9pbmZvOwp9ICMjIGVuZCBzdWIgZmluZF9sZXZlbF9pbmZvCgpzdWIgZmluZF9sb29wX2xhYmVsIHsKCiAgICBteSAoICRzZWxmLCAkc2Vxbm8gKSA9IEBfOwoKICAgICMgR2l2ZW46CiAgICAjICAgJHNlcW5vID0gc2VxdWVuY2UgbnVtYmVyIG9mIGEgYmxvY2sgb2YgY29kZSBmb3IgYSBsb29wCiAgICAjIFJldHVybjoKICAgICMgICAkbGFiZWwgPSB0aGUgbG9vcCBsYWJlbCB0ZXh0LCBpZiBhbnksIG9yIGFuIGVtcHR5IHN0cmluZwoKICAgIG15ICRyTEwgICAgICAgICAgICAgICAgID0gJHNlbGYtPltfckxMX107CiAgICBteSAkcmxpbmVzICAgICAgICAgICAgICA9ICRzZWxmLT5bX3JsaW5lc19dOwogICAgbXkgJEtfb3BlbmluZ19jb250YWluZXIgPSAkc2VsZi0+W19LX29wZW5pbmdfY29udGFpbmVyX107CgogICAgbXkgJGxhYmVsICAgICA9IEVNUFRZX1NUUklORzsKICAgIG15ICRLX29wZW5pbmcgPSAkS19vcGVuaW5nX2NvbnRhaW5lci0+eyRzZXFub307CgogICAgIyBiYWNrdXAgdG8gdGhlIGxpbmUgd2l0aCB0aGUgb3BlbmluZyBwYXJlbiwgaWYgYW55LCBpbiBjYXNlIHRoZQogICAgIyBrZXl3b3JkIGlzIG9uIGEgZGlmZmVyZW50IGxpbmUKICAgIG15ICRLcCA9ICRzZWxmLT5LX3ByZXZpb3VzX2NvZGUoJEtfb3BlbmluZyk7CiAgICByZXR1cm4gJGxhYmVsIHVubGVzcyAoIGRlZmluZWQoJEtwKSApOwogICAgaWYgKCAkckxMLT5bJEtwXS0+W19UT0tFTl9dIGVxICcpJyApIHsKICAgICAgICAkc2Vxbm8gICAgID0gJHJMTC0+WyRLcF0tPltfVFlQRV9TRVFVRU5DRV9dOwogICAgICAgICRLX29wZW5pbmcgPSAkS19vcGVuaW5nX2NvbnRhaW5lci0+eyRzZXFub307CiAgICB9CgogICAgcmV0dXJuICRsYWJlbCB1bmxlc3MgKCBkZWZpbmVkKCRLX29wZW5pbmcpICk7CiAgICBteSAkbHhfb3BlbiA9ICRyTEwtPlskS19vcGVuaW5nXS0+W19MSU5FX0lOREVYX107CgogICAgIyBsb29rIGZvciBhIGxhYmVsIHdpdGhpbiBhIGZldyBsaW5lczsgYWxsb3cgYSBjb3VwbGUgb2YgYmxhbmsgbGluZXMKICAgIGZvcmVhY2ggbXkgJGx4ICggcmV2ZXJzZSggJGx4X29wZW4gLSAzIC4uICRseF9vcGVuICkgKSB7CiAgICAgICAgbGFzdCBpZiAoICRseCA8IDAgKTsKICAgICAgICBteSAkbGluZV9vZl90b2tlbnMgPSAkcmxpbmVzLT5bJGx4XTsKICAgICAgICBteSAkbGluZV90eXBlICAgICAgPSAkbGluZV9vZl90b2tlbnMtPntfbGluZV90eXBlfTsKCiAgICAgICAgIyBzdG9wIHNlYXJjaCBvbiBhIG5vbi1jb2RlIGxpbmUKICAgICAgICBsYXN0IGlmICggJGxpbmVfdHlwZSBuZSAnQ09ERScgKTsKCiAgICAgICAgbXkgJHJLX3JhbmdlID0gJGxpbmVfb2ZfdG9rZW5zLT57X3JLX3JhbmdlfTsKICAgICAgICBteSAoICRLZmlyc3QsICRLbGFzdF91dSApID0gQHskcktfcmFuZ2V9OwoKICAgICAgICAjIHNraXAgYSBibGFuayBsaW5lCiAgICAgICAgbmV4dCBpZiAoICFkZWZpbmVkKCRLZmlyc3QpICk7CgogICAgICAgICMgY2hlY2sgZm9yIGEgbGFiZWwKICAgICAgICBpZiAoICRyTEwtPlskS2ZpcnN0XS0+W19UWVBFX10gZXEgJ0onICkgewogICAgICAgICAgICAkbGFiZWwgPSAkckxMLT5bJEtmaXJzdF0tPltfVE9LRU5fXTsKICAgICAgICAgICAgbGFzdDsKICAgICAgICB9CgogICAgICAgICMgcXVpdCB0aGUgc2VhcmNoIGlmIHdlIGFyZSBhYm92ZSB0aGUgc3RhcnRpbmcgbGluZQogICAgICAgIGxhc3QgaWYgKCAkbHggPCAkbHhfb3BlbiApOwogICAgfQoKICAgIHJldHVybiAkbGFiZWw7Cn0gIyMgZW5kIHN1YiBmaW5kX2xvb3BfbGFiZWwKCnsgICAgIyMgY2xvc3VyZSBmaW5kX21jY2FiZV9jb3VudAogICAgbXkgJWlzX21jY2FiZV9sb2dpY19rZXl3b3JkOwogICAgbXkgJWlzX21jY2FiZV9sb2dpY19vcGVyYXRvcjsKCiAgICBCRUdJTiB7CiAgICAgICAgbXkgQHEgPSAocXcoICYmIHx8IHx8PSAmJj0gPyA8PD0gPj49ICkpOwogICAgICAgIEBpc19tY2NhYmVfbG9naWNfb3BlcmF0b3J7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICAgICAgQHEgPSAocXcoIGFuZCBvciB4b3IgaWYgZWxzZSBlbHNpZiB1bmxlc3MgdW50aWwgd2hpbGUgZm9yIGZvcmVhY2ggKSk7CiAgICAgICAgQGlzX21jY2FiZV9sb2dpY19rZXl3b3Jke0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CiAgICB9ICMjIGVuZCBCRUdJTgoKICAgIHN1YiBmaW5kX21jY2FiZV9jb3VudCB7CiAgICAgICAgbXkgKCRzZWxmKSA9IEBfOwoKICAgICAgICAjIEZpbmQgdGhlIGN1bXVsYXRpdmUgbWNjYWJlIGNvdW50IHRvIGVhY2ggdG9rZW4KICAgICAgICAjIFJldHVybiAnJHJtY2NhYmVfY291bnRfc3VtJyA9IHJlZiB0byBhcnJheSB3aXRoIGN1bXVsYXRpdmUKICAgICAgICAjICAgbWNjYWJlIGNvdW50IHRvIGVhY2ggdG9rZW4gJEsKCiAgICAgICAgIyBOT1RFOiBUaGlzIHN1YiBjdXJyZW50bHkgZm9sbG93cyB0aGUgZGVmaW5pdGlvbnMgaW4gUGVybDo6Q3JpdGljCgogICAgICAgIG15ICRybWNjYWJlX2NvdW50X3N1bTsKICAgICAgICBteSAkckxMICAgID0gJHNlbGYtPltfckxMX107CiAgICAgICAgbXkgJGNvdW50ICA9IDA7CiAgICAgICAgbXkgJEtsaW1pdCA9ICRzZWxmLT5bX0tsaW1pdF9dOwogICAgICAgIGZvcmVhY2ggbXkgJEtLICggMCAuLiAkS2xpbWl0ICkgewogICAgICAgICAgICAkcm1jY2FiZV9jb3VudF9zdW0tPnskS0t9ID0gJGNvdW50OwogICAgICAgICAgICBteSAkdHlwZSA9ICRyTEwtPlskS0tdLT5bX1RZUEVfXTsKICAgICAgICAgICAgaWYgKCAkdHlwZSBlcSAnaycgKSB7CiAgICAgICAgICAgICAgICBteSAkdG9rZW4gPSAkckxMLT5bJEtLXS0+W19UT0tFTl9dOwogICAgICAgICAgICAgICAgaWYgKCAkaXNfbWNjYWJlX2xvZ2ljX2tleXdvcmR7JHRva2VufSApIHsgJGNvdW50KysgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCAkaXNfbWNjYWJlX2xvZ2ljX29wZXJhdG9yeyR0eXBlfSApIHsKICAgICAgICAgICAgICAgICAgICAkY291bnQrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkcm1jY2FiZV9jb3VudF9zdW0tPnsgJEtsaW1pdCArIDEgfSA9ICRjb3VudDsKICAgICAgICByZXR1cm4gJHJtY2NhYmVfY291bnRfc3VtOwogICAgfSAjIyBlbmQgc3ViIGZpbmRfbWNjYWJlX2NvdW50Cn0gIyMgZW5kIGNsb3N1cmUgZmluZF9tY2NhYmVfY291bnQKCnN1YiBmaW5kX2NvZGVfbGluZV9jb3VudCB7CiAgICBteSAoJHNlbGYpID0gQF87CgogICAgIyBGaW5kIHRoZSBjdW11bGF0aXZlIG51bWJlciBvZiBsaW5lcyBvZiBjb2RlLCBleGNsdWRpbmcgYmxhbmtzLAogICAgIyBjb21tZW50cyBhbmQgcG9kLgogICAgIyBSZXR1cm4gJyRyY29kZV9saW5lX2NvdW50JyA9IHJlZiB0byBhcnJheSB3aXRoIGN1bXVsYXRpdmUKICAgICMgICBjb2RlIGxpbmUgY291bnQgZm9yIGVhY2ggaW5wdXQgbGluZSBudW1iZXIuCgogICAgbXkgJHJjb2RlX2xpbmVfY291bnQ7CiAgICBteSAkckxMICAgICAgICAgICAgID0gJHNlbGYtPltfckxMX107CiAgICBteSAkcmxpbmVzICAgICAgICAgID0gJHNlbGYtPltfcmxpbmVzX107CiAgICBteSAkaXhfbGluZSAgICAgICAgID0gLTE7CiAgICBteSAkY29kZV9saW5lX2NvdW50ID0gMDsKCiAgICAjIGxvb3Agb3ZlciBhbGwgbGluZXMKICAgIGZvcmVhY2ggbXkgJGxpbmVfb2ZfdG9rZW5zICggQHskcmxpbmVzfSApIHsKICAgICAgICAkaXhfbGluZSsrOwoKICAgICAgICAjIHdoYXQgdHlwZSBvZiBsaW5lPwogICAgICAgIG15ICRsaW5lX3R5cGUgPSAkbGluZV9vZl90b2tlbnMtPntfbGluZV90eXBlfTsKCiAgICAgICAgIyBpZiAnQ09ERScgaXQgbXVzdCBiZSBub24tYmxhbmsgYW5kIG5vbi1jb21tZW50CiAgICAgICAgaWYgKCAkbGluZV90eXBlIGVxICdDT0RFJyApIHsKICAgICAgICAgICAgbXkgJHJLX3JhbmdlID0gJGxpbmVfb2ZfdG9rZW5zLT57X3JLX3JhbmdlfTsKICAgICAgICAgICAgbXkgKCAkS2ZpcnN0LCAkS2xhc3QgKSA9IEB7JHJLX3JhbmdlfTsKCiAgICAgICAgICAgIGlmICggZGVmaW5lZCgkS2ZpcnN0KSApIHsKCiAgICAgICAgICAgICAgICAjIGl0IGlzIG5vbi1ibGFuawogICAgICAgICAgICAgICAgbXkgJGptYXggPSBkZWZpbmVkKCRLZmlyc3QpID8gJEtsYXN0IC0gJEtmaXJzdCA6IC0xOwogICAgICAgICAgICAgICAgaWYgKCAkam1heCA+IDAgfHwgJHJMTC0+WyRLbGFzdF0tPltfVFlQRV9dIG5lICcjJyApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBvaywgaXQgaXMgYSBub24tY29tbWVudAogICAgICAgICAgICAgICAgICAgICRjb2RlX2xpbmVfY291bnQrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBDb3VudCBhbGwgb3RoZXIgc3BlY2lhbCBsaW5lIHR5cGVzIGV4Y2VwdCBwb2Q7CiAgICAgICAgIyBGb3IgYSBsaXN0IG9mIGxpbmUgdHlwZXMgc2VlIHN1YiAncHJvY2Vzc19hbGxfbGluZXMnCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmICggJGxpbmVfdHlwZSAhfiAvXlBPRC8gKSB7ICRjb2RlX2xpbmVfY291bnQrKyB9CiAgICAgICAgfQoKICAgICAgICAjIFN0b3JlIHRoZSBjdW11bGF0aXZlIGNvdW50IHVzaW5nIHRoZSBpbnB1dCBsaW5lIGluZGV4CiAgICAgICAgJHJjb2RlX2xpbmVfY291bnQtPlskaXhfbGluZV0gPSAkY29kZV9saW5lX2NvdW50OwogICAgfQogICAgcmV0dXJuICRyY29kZV9saW5lX2NvdW50Owp9ICMjIGVuZCBzdWIgZmluZF9jb2RlX2xpbmVfY291bnQKCnN1YiBmaW5kX3NlbGVjdGVkX3BhY2thZ2VzIHsKCiAgICBteSAoICRzZWxmLCAkcmR1bXBfYmxvY2tfdHlwZXMgKSA9IEBfOwoKICAgICMgUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHNlbGVjdGVkIHBhY2thZ2Ugc3RhdGVtZW50cyBpbiBhIGZpbGUgZm9yIHVzZQogICAgIyBpbiBkdW1waW5nIGJsb2NrIGluZm9ybWF0aW9uLgogICAgaWYgKCAgICEkcmR1bXBfYmxvY2tfdHlwZXMtPnsnKid9CiAgICAgICAgJiYgISRyZHVtcF9ibG9ja190eXBlcy0+eydwYWNrYWdlJ30KICAgICAgICAmJiAhJHJkdW1wX2Jsb2NrX3R5cGVzLT57J2NsYXNzJ30gKQogICAgewogICAgICAgIHJldHVybiBbXTsKICAgIH0KCiAgICAjIEZpbmQgYWxsICdwYWNrYWdlJyB0b2tlbnMgaW4gdGhlIGZpbGUKICAgIG15ICRyTEwgPSAkc2VsZi0+W19yTExfXTsKICAgIG15IEBLX3BhY2thZ2VfbGlzdDsKICAgIGZvcmVhY2ggbXkgJEtLICggMCAuLiBAeyRyTEx9IC0gMSApIHsKICAgICAgICBuZXh0IGlmICggJHJMTC0+WyRLS10tPltfVFlQRV9dIG5lICdQJyApOwogICAgICAgIHB1c2ggQEtfcGFja2FnZV9saXN0LCAkS0s7CiAgICB9CgogICAgIyBHZXQgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgdGhlIGJsb2NrIGR1bXAKICAgIG15ICRycGFja2FnZV9saXN0cyAgICAgPSAkc2VsZi0+cGFja2FnZV9pbmZvX21ha2VyKCBcQEtfcGFja2FnZV9saXN0ICk7CiAgICBteSAkcnBhY2thZ2VfaW5mb19saXN0ID0gJHJwYWNrYWdlX2xpc3RzLT57J3JwYWNrYWdlX2luZm9fbGlzdCd9OwoKICAgICMgUmVtb3ZlIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBpbmZvIGxpc3QsIHdoaWNoIGlzIGEgZHVtbXkgcGFja2FnZSBtYWluCiAgICBzaGlmdCBAeyRycGFja2FnZV9pbmZvX2xpc3R9OwoKICAgICMgUmVtb3ZlIEJMT0NLIGZvcm1hdCBwYWNrYWdlcyBzaW5jZSB0aGV5IGdldCByZXBvcnRlZCBhcyBibG9ja3Mgc2VwYXJhdGVseQogICAgbXkgQGZpbHRlcmVkX2xpc3QgPSBncmVwIHsgISRfLT57aXNfYmxvY2t9IH0gQHskcnBhY2thZ2VfaW5mb19saXN0fTsKCiAgICByZXR1cm4gXEBmaWx0ZXJlZF9saXN0Owp9ICMjIGVuZCBzdWIgZmluZF9zZWxlY3RlZF9wYWNrYWdlcwoKc3ViIGZpbmRfc2VsZWN0ZWRfYmxvY2tzIHsKCiAgICBteSAoICRzZWxmLCAkcmR1bXBfYmxvY2tfdHlwZXMsICRybGV2ZWxfaW5mbyApID0gQF87CgogICAgIyBGaW5kIGJsb2NrcyBuZWVkZWQgZm9yIC0tZHVtcC1ibG9jay1zdW1tYXJ5CiAgICAjIEdpdmVuOgogICAgIyAgICRyZHVtcF9ibG9ja190eXBlcyA9IGhhc2ggb2YgdXNlciBzZWxlY3RlZCBibG9jayB0eXBlcwogICAgIyAgICRybGV2ZWxfaW5mbyA9IGluZm8gb24gbWF4IGRlcHRoIG9mIGJsb2NrcwogICAgIyBSZXR1cm5zOgogICAgIyAgJHJzbGVjdGVkX2Jsb2NrcyA9IHJlZiB0byBhIGxpc3Qgb2YgaW5mb3JtYXRpb24gb24gdGhlIHNlbGVjdGVkIGJsb2NrcwoKICAgIG15ICRyTEwgICAgICAgICAgICAgICAgICA9ICRzZWxmLT5bX3JMTF9dOwogICAgbXkgJHJsaW5lcyAgICAgICAgICAgICAgID0gJHNlbGYtPltfcmxpbmVzX107CiAgICBteSAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8gPSAkc2VsZi0+W19yYmxvY2tfdHlwZV9vZl9zZXFub19dOwogICAgbXkgJEtfb3BlbmluZ19jb250YWluZXIgID0gJHNlbGYtPltfS19vcGVuaW5nX2NvbnRhaW5lcl9dOwogICAgbXkgJEtfY2xvc2luZ19jb250YWluZXIgID0gJHNlbGYtPltfS19jbG9zaW5nX2NvbnRhaW5lcl9dOwogICAgbXkgJHJpc19hc3ViX2Jsb2NrICAgICAgID0gJHNlbGYtPltfcmlzX2FzdWJfYmxvY2tfXTsKICAgIG15ICRyaXNfc3ViX2Jsb2NrICAgICAgICA9ICRzZWxmLT5bX3Jpc19zdWJfYmxvY2tfXTsKCiAgICBteSAkZHVtcF9hbGxfdHlwZXMgPSAkcmR1bXBfYmxvY2tfdHlwZXMtPnsnKid9OwoKICAgIG15IEBzZWxlY3RlZF9ibG9ja3M7CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBCRUdJTiBsb29wIG92ZXIgYWxsIGJsb2NrcyB0byBmaW5kIHNlbGVjdGVkIGJsb2NrcwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZm9yZWFjaCBteSAkc2Vxbm8gKCBrZXlzICV7JHJibG9ja190eXBlX29mX3NlcW5vfSApIHsKCiAgICAgICAgbXkgJHR5cGU7CiAgICAgICAgbXkgJG5hbWUgICAgICAgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgbXkgJGJsb2NrX3R5cGUgPSAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8tPnskc2Vxbm99OwogICAgICAgIG15ICRLX29wZW5pbmcgID0gJEtfb3BlbmluZ19jb250YWluZXItPnskc2Vxbm99OwogICAgICAgIG15ICRLX2Nsb3NpbmcgID0gJEtfY2xvc2luZ19jb250YWluZXItPnskc2Vxbm99OwogICAgICAgIG15ICRsZXZlbCAgICAgID0gJHJMTC0+WyRLX29wZW5pbmddLT5bX0xFVkVMX107CgogICAgICAgIG15ICRseF9vcGVuICAgICAgICA9ICRyTEwtPlskS19vcGVuaW5nXS0+W19MSU5FX0lOREVYX107CiAgICAgICAgbXkgJGxpbmVfb2ZfdG9rZW5zID0gJHJsaW5lcy0+WyRseF9vcGVuXTsKICAgICAgICBteSAkcktfcmFuZ2UgICAgICAgPSAkbGluZV9vZl90b2tlbnMtPntfcktfcmFuZ2V9OwogICAgICAgIG15ICggJEtmaXJzdCwgJEtsYXN0ICkgPSBAeyRyS19yYW5nZX07CiAgICAgICAgaWYgKCAhZGVmaW5lZCgkS2ZpcnN0KSB8fCAhZGVmaW5lZCgkS2xhc3QpIHx8ICRLZmlyc3QgPiAkS19vcGVuaW5nICkgewogICAgICAgICAgICBteSAkbGluZV90eXBlID0gJGxpbmVfb2ZfdG9rZW5zLT57X2xpbmVfdHlwZX07CgogICAgICAgICAgICAjIHNob3VsZG4ndCBoYXBwZW4KICAgICAgICAgICAgbXkgJENPREVfdHlwZSA9ICRsaW5lX29mX3Rva2Vucy0+e19jb2RlX3R5cGV9OwogICAgICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KDw8RU9NKTsKdW5leHBlY3RlZCBsaW5lX3R5cGU9JGxpbmVfdHlwZSBhdCBsaW5lICRseF9vcGVuLCBjb2RlIHR5cGU9JENPREVfdHlwZQpFT00KICAgICAgICAgICAgbmV4dDsKICAgICAgICB9CgogICAgICAgIG15ICggJG1heF9jaGFuZ2UsICRibG9ja19jb3VudCwgJGlubmVyX2xvb3BfcGx1cyApID0KICAgICAgICAgICggMCwgMCwgRU1QVFlfU1RSSU5HICk7CiAgICAgICAgbXkgJGl0ZW0gPSAkcmxldmVsX2luZm8tPnskc2Vxbm99OwogICAgICAgIGlmICggZGVmaW5lZCgkaXRlbSkgKSB7CiAgICAgICAgICAgIG15ICRzdGFydGluZ19kZXB0aCA9ICRpdGVtLT57c3RhcnRpbmdfZGVwdGh9OwogICAgICAgICAgICBteSAkbWF4aW11bV9kZXB0aCAgPSAkaXRlbS0+e21heGltdW1fZGVwdGh9OwogICAgICAgICAgICAkYmxvY2tfY291bnQgPSAkaXRlbS0+e2Jsb2NrX2NvdW50fTsKICAgICAgICAgICAgJG1heF9jaGFuZ2UgID0gJG1heGltdW1fZGVwdGggLSAkc3RhcnRpbmdfZGVwdGggKyAxOwoKICAgICAgICAgICAgIyB0aGlzIGlzIGEgJysnIGNoYXJhY3RlciBpZiB0aGlzIGJsb2NrIGlzIGFuIGlubmVyIGxvb3BzCiAgICAgICAgICAgICRpbm5lcl9sb29wX3BsdXMgPSAkaXRlbS0+e2lzX2lubmVyX2xvb3B9ID8gJysnIDogRU1QVFlfU1RSSU5HOwogICAgICAgIH0KCiAgICAgICAgIyBTa2lwIGNsb3N1cmVzIHVubGVzcyB0eXBlICdjbG9zdXJlJyBpcyBleHBsaWNpdGx5IHJlcXVlc3RlZAogICAgICAgIGlmICggKCAkYmxvY2tfdHlwZSBlcSAnfScgfHwgJGJsb2NrX3R5cGUgZXEgJzsnICkKICAgICAgICAgICAgJiYgJHJkdW1wX2Jsb2NrX3R5cGVzLT57J2Nsb3N1cmUnfSApCiAgICAgICAgewogICAgICAgICAgICAkdHlwZSA9ICdjbG9zdXJlJzsKICAgICAgICB9CgogICAgICAgICMgQm90aCAnc3ViJyBhbmQgJ2FzdWInIHNlbGVjdCBhbiBhbm9ueW1vdXMgc3ViLgogICAgICAgICMgVGhpcyBhbGxvd3MgYW5vbnltb3VzIHN1YnMgdG8gYmUgZXhwbGljaXRseSBzZWxlY3RlZAogICAgICAgIGVsc2lmICgKICAgICAgICAgICAgJHJpc19hc3ViX2Jsb2NrLT57JHNlcW5vfQogICAgICAgICAgICAmJiAoICAgJGR1bXBfYWxsX3R5cGVzCiAgICAgICAgICAgICAgICB8fCAkcmR1bXBfYmxvY2tfdHlwZXMtPnsnc3ViJ30KICAgICAgICAgICAgICAgIHx8ICRyZHVtcF9ibG9ja190eXBlcy0+eydhc3ViJ30gKQogICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJHR5cGUgPSAnYXN1Yic7CgogICAgICAgICAgICAjIExvb2sgYmFjayB0byB0cnkgdG8gZmluZCBzb21lIGtpbmQgb2YgbmFtZSwgc3VjaCBhcwogICAgICAgICAgICAjICAgbXkgJHZhciA9IHN1YiB7ICAgICAgICAtIHZhciBpcyB0eXBlICdpJwogICAgICAgICAgICAjICAgICAgIHZhciA9PiBzdWIgeyAgICAgICAtIHZhciBpcyB0eXBlICd3JwogICAgICAgICAgICAjICAgICAgLXZhciA9PiBzdWIgeyAgICAgICAtIHZhciBpcyB0eXBlICd3JwogICAgICAgICAgICAjICAgICAndmFyJyA9PiBzdWIgeyAgICAgICAtIHZhciBpcyB0eXBlICdRJwogICAgICAgICAgICBteSAoICRzYXdfZXF1YWxzLCAkc2F3X2ZhdF9jb21tYSwgJGJsYW5rX2NvdW50ICk7CiAgICAgICAgICAgIGZvcmVhY2ggbXkgJEtLICggcmV2ZXJzZSggJEtmaXJzdCAuLiAkS19vcGVuaW5nIC0gMSApICkgewogICAgICAgICAgICAgICAgbXkgJHRva2VuX3R5cGUgPSAkckxMLT5bJEtLXS0+W19UWVBFX107CiAgICAgICAgICAgICAgICBpZiAoICR0b2tlbl90eXBlIGVxICdiJyApICB7ICRibGFua19jb3VudCsrOyAgIG5leHQgfQogICAgICAgICAgICAgICAgaWYgKCAkdG9rZW5fdHlwZSBlcSAnPT4nICkgeyAkc2F3X2ZhdF9jb21tYSsrOyBuZXh0IH0KICAgICAgICAgICAgICAgIGlmICggJHRva2VuX3R5cGUgZXEgJz0nICkgIHsgJHNhd19lcXVhbHMrKzsgICAgbmV4dCB9CiAgICAgICAgICAgICAgICBpZiAoICR0b2tlbl90eXBlIGVxICdpJyAmJiAkc2F3X2VxdWFscwogICAgICAgICAgICAgICAgICAgIHx8ICggJHRva2VuX3R5cGUgZXEgJ3cnIHx8ICR0b2tlbl90eXBlIGVxICdRJyApCiAgICAgICAgICAgICAgICAgICAgJiYgJHNhd19mYXRfY29tbWEgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRuYW1lID0gJHJMTC0+WyRLS10tPltfVE9LRU5fXTsKICAgICAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIG15ICRyYXJnID0geyBzZXFubyA9PiAkc2Vxbm8gfTsKICAgICAgICAgICAgJHNlbGYtPmNvdW50X3N1Yl9pbnB1dF9hcmdzKCRyYXJnKTsKICAgICAgICAgICAgbXkgJGNvdW50ID0gJHJhcmctPntzaGlmdF9jb3VudF9taW59OwogICAgICAgICAgICBpZiAoICFkZWZpbmVkKCRjb3VudCkgKSB7ICRjb3VudCA9ICcqJyB9CgogICAgICAgICAgICAkdHlwZSAuPSAnKCcgLiAkY291bnQgLiAnKSc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJHJpc19zdWJfYmxvY2stPnskc2Vxbm99CiAgICAgICAgICAgICYmICggJGR1bXBfYWxsX3R5cGVzIHx8ICRyZHVtcF9ibG9ja190eXBlcy0+eydzdWInfSApICkKICAgICAgICB7CiAgICAgICAgICAgICR0eXBlID0gJ3N1Yic7CgogICAgICAgICAgICAjIHdoYXQgd2Ugd2FudDoKICAgICAgICAgICAgIyAgICAgICRibG9ja190eXBlICAgICAgICAgICAgICAgJG5hbWUKICAgICAgICAgICAgIyAnc3ViIHNldGlkZW50aWZpZXIoJCknICAgID0+ICdzZXRpZGVudGlmaWVyJwogICAgICAgICAgICAjICdtZXRob2Qgc2V0aWRlbnRpZmllcigkKScgPT4gJ3NldGlkZW50aWZpZXInCiAgICAgICAgICAgIG15IEBwYXJ0cyA9IHNwbGl0IC9ccysvLCAkYmxvY2tfdHlwZTsKICAgICAgICAgICAgJG5hbWUgPSAkcGFydHNbMV07CiAgICAgICAgICAgICRuYW1lID1+IHMvXCguKiQvLzsKCiAgICAgICAgICAgIG15ICRyYXJnID0geyBzZXFubyA9PiAkc2Vxbm8gfTsKICAgICAgICAgICAgJHNlbGYtPmNvdW50X3N1Yl9pbnB1dF9hcmdzKCRyYXJnKTsKICAgICAgICAgICAgbXkgJGNvdW50ID0gJHJhcmctPntzaGlmdF9jb3VudF9taW59OwogICAgICAgICAgICBpZiAoICFkZWZpbmVkKCRjb3VudCkgKSB7ICRjb3VudCA9ICcqJyB9CgogICAgICAgICAgICAkdHlwZSAuPSAnKCcgLiAkY291bnQgLiAnKSc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICgKICAgICAgICAgICAgJGJsb2NrX3R5cGUgPX4gL14ocGFja2FnZXxjbGFzcylcYi8KICAgICAgICAgICAgJiYgKCAgICRkdW1wX2FsbF90eXBlcwogICAgICAgICAgICAgICAgfHwgJHJkdW1wX2Jsb2NrX3R5cGVzLT57J3BhY2thZ2UnfQogICAgICAgICAgICAgICAgfHwgJHJkdW1wX2Jsb2NrX3R5cGVzLT57J2NsYXNzJ30gKQogICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJHR5cGUgPSAnY2xhc3MnOwogICAgICAgICAgICBteSBAcGFydHMgPSBzcGxpdCAvXHMrLywgJGJsb2NrX3R5cGU7CiAgICAgICAgICAgICRuYW1lID0gJHBhcnRzWzFdOwogICAgICAgICAgICAkbmFtZSA9fiBzL1woLiokLy87CiAgICAgICAgfQogICAgICAgIGVsc2lmICgKICAgICAgICAgICAgJGlzX2xvb3BfdHlwZXskYmxvY2tfdHlwZX0KICAgICAgICAgICAgJiYgKCAgICRkdW1wX2FsbF90eXBlcwogICAgICAgICAgICAgICAgfHwgJHJkdW1wX2Jsb2NrX3R5cGVzLT57JGJsb2NrX3R5cGV9CiAgICAgICAgICAgICAgICB8fCAkcmR1bXBfYmxvY2tfdHlwZXMtPnsgJGJsb2NrX3R5cGUgLiAkaW5uZXJfbG9vcF9wbHVzIH0KICAgICAgICAgICAgICAgIHx8ICRyZHVtcF9ibG9ja190eXBlcy0+eyRpbm5lcl9sb29wX3BsdXN9ICkKICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICR0eXBlID0gJGJsb2NrX3R5cGUgLiAkaW5uZXJfbG9vcF9wbHVzOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRkdW1wX2FsbF90eXBlcyB8fCAkcmR1bXBfYmxvY2tfdHlwZXMtPnskYmxvY2tfdHlwZX0gKSB7CiAgICAgICAgICAgIGlmICggJGlzX2xvb3BfdHlwZXskYmxvY2tfdHlwZX0gKSB7CiAgICAgICAgICAgICAgICAkbmFtZSA9ICRzZWxmLT5maW5kX2xvb3BfbGFiZWwoJHNlcW5vKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdHlwZSA9ICRibG9ja190eXBlOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbmV4dDsKICAgICAgICB9CgogICAgICAgIHB1c2ggQHNlbGVjdGVkX2Jsb2NrcywKICAgICAgICAgIHsKICAgICAgICAgICAgS19vcGVuaW5nICAgPT4gJEtfb3BlbmluZywKICAgICAgICAgICAgS19jbG9zaW5nICAgPT4gJEtfY2xvc2luZywKICAgICAgICAgICAgbGluZV9zdGFydCAgPT4gJGx4X29wZW4gKyAxLAogICAgICAgICAgICBuYW1lICAgICAgICA9PiAkbmFtZSwKICAgICAgICAgICAgdHlwZSAgICAgICAgPT4gJHR5cGUsCiAgICAgICAgICAgIGxldmVsICAgICAgID0+ICRsZXZlbCwKICAgICAgICAgICAgbWF4X2NoYW5nZSAgPT4gJG1heF9jaGFuZ2UsCiAgICAgICAgICAgIGJsb2NrX2NvdW50ID0+ICRibG9ja19jb3VudCwKICAgICAgICAgIH07CiAgICB9ICAgICMjIEVORCBsb29wIHRvIGdldCBpbmZvIGZvciBzZWxlY3RlZCBibG9ja3MKICAgIHJldHVybiBcQHNlbGVjdGVkX2Jsb2NrczsKfSAjIyBlbmQgc3ViIGZpbmRfc2VsZWN0ZWRfYmxvY2tzCgpzdWIgZmluZF9pZl9jaGFpbnMgewoKICAgIG15ICggJHNlbGYsICRyZHVtcF9ibG9ja190eXBlcywgJHJsZXZlbF9pbmZvICkgPSBAXzsKCiAgICAjIEZpbmQgaWYtY2hhaW5zIGZvciAtLWR1bXAtYmxvY2stc3VtbWFyeQoKICAgICMgR2l2ZW46CiAgICAjICAgJHJkdW1wX2Jsb2NrX3R5cGVzID0gcmVmIHRvIGhhc2ggd2l0aCB1c2VyIGJsb2NrIHR5cGUgc2VsZWN0aW9ucwogICAgIyAgICRybGV2ZWxfaW5mbyA9IGluZm8gb24gbWF4IGRlcHRoIG9mIGJsb2NrcwogICAgIyBSZXR1cm5zOgogICAgIyAgJHJzbGVjdGVkX2Jsb2NrcyA9IHJlZiB0byBhIGxpc3Qgb2YgaW5mb3JtYXRpb24gb24gdGhlIHNlbGVjdGVkIGJsb2NrcwoKICAgIG15ICRyYmxvY2tfdHlwZV9vZl9zZXFubyA9ICRzZWxmLT5bX3JibG9ja190eXBlX29mX3NlcW5vX107CgogICAgIyBGb3IgZXhhbXBsZSwgJ2Vsc2lmNCcgbWVhbnMgYWxsIGlmLWNoYWlucyB3aXRoIDQgb3IgbW9yZSAnZWxzaWYncwogICAgbXkgQHNlbGVjdGVkX2Jsb2NrczsKCiAgICAjIFNlZSBpZiB1c2VyIHJlcXVlc3RlZCBhbnkgaWYtY2hhaW5zCiAgICAjIGFsbG93ICdlbHNpZjMnIG9yICdlbHNpZiszJwogICAgbXkgQGVsc2lmX2QgPSBncmVwIHsgL15lbHNpZlwrP1xkKyQvIH0ga2V5cyAleyRyZHVtcF9ibG9ja190eXBlc307CiAgICBpZiAoICFAZWxzaWZfZCApIHsgcmV0dXJuIFxAc2VsZWN0ZWRfYmxvY2tzIH0KCiAgICAjIEluIGNhc2Ugb2YgbXVsdGlwbGUgc2VsZWN0aW9ucywgdXNlIHRoZSBtaW5pbXVtCiAgICBteSAkZWxzaWZfY291bnRfbWluOwogICAgZm9yZWFjaCBteSAkd29yZCAoQGVsc2lmX2QpIHsKICAgICAgICBpZiAoICR3b3JkID1+IC8oXGQrKSQvICkgewogICAgICAgICAgICBteSAkbnVtID0gJDE7CiAgICAgICAgICAgIGlmICggIWRlZmluZWQoJGVsc2lmX2NvdW50X21pbikgfHwgJGVsc2lmX2NvdW50X21pbiA+ICRudW0gKSB7CiAgICAgICAgICAgICAgICAkZWxzaWZfY291bnRfbWluID0gJG51bTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIExvb3Agb3ZlciBibG9ja3MKICAgIGZvcmVhY2ggbXkgJHNlcW5vICgga2V5cyAleyRyYmxvY2tfdHlwZV9vZl9zZXFub30gKSB7CgogICAgICAgIG15ICRibG9ja190eXBlID0gJHJibG9ja190eXBlX29mX3NlcW5vLT57JHNlcW5vfTsKCiAgICAgICAgIyBNdXN0IGJlICdpZicgb3IgJ3VubGVzcycKICAgICAgICBuZXh0IHVubGVzcyAoICRibG9ja190eXBlIGVxICdpZicgfHwgJGJsb2NrX3R5cGUgZXEgJ3VubGVzcycgKTsKCiAgICAgICAgIyBDb2xsZWN0IGluZm8gZm9yIHRoaXMgaWYtY2hhaW4KICAgICAgICBteSAkcmlmX2NoYWluID0KICAgICAgICAgICRzZWxmLT5mb2xsb3dfaWZfY2hhaW4oICRzZXFubywgJHJsZXZlbF9pbmZvLCAkZWxzaWZfY291bnRfbWluICk7CiAgICAgICAgbmV4dCB1bmxlc3MgKCRyaWZfY2hhaW4pOwoKICAgICAgICBwdXNoIEBzZWxlY3RlZF9ibG9ja3MsICRyaWZfY2hhaW47CiAgICB9CiAgICByZXR1cm4gXEBzZWxlY3RlZF9ibG9ja3M7Cn0gIyMgZW5kIHN1YiBmaW5kX2lmX2NoYWlucwoKc3ViIGZvbGxvd19pZl9jaGFpbiB7CiAgICBteSAoICRzZWxmLCAkc2Vxbm9faWYsICRybGV2ZWxfaW5mbywgJGVsc2lmX2NvdW50X21pbiApID0gQF87CgogICAgIyBGb2xsb3cgYSBjaGFpbiBvZiBpZi1lbHNpZi1lbHNpZi0uLi4tZWxzZSBibG9ja3MuCgogICAgIyBHaXZlbjoKICAgICMgICAkc2Vxbm9faWYgPSBzZXF1ZW5jZSBudW1iZXIgb2YgYW4gJ2lmJyBibG9jawogICAgIyAgICRybGV2ZWxfaW5mbyA9IGhhc2ggb2YgYmxvY2sgbGV2ZWwgaW5mb3JtYXRpb24KICAgICMgICAkZWxzaWZfbWluX2NvdW50ID0gbWluaW11bSBudW1iZXIgb2YgJ2Vsc2lmJyBibG9ja3Mgd2FudGVkCiAgICAjIFJldHVybjoKICAgICMgICBub3RoaW5nIGlmIG51bWJlciBvZiAnZWxzaWYnIGJsb2NrcyBpcyBsZXNzIHRoYW4gJGVsc2lmX2NvdW50X21pbgogICAgIyAgIHJlZiB0byBibG9jayBpbmZvIGhhc2ggb3RoZXJ3aXNlCgogICAgbXkgJHJMTCAgICAgICAgICAgICAgICAgID0gJHNlbGYtPltfckxMX107CiAgICBteSAkS19vcGVuaW5nX2NvbnRhaW5lciAgPSAkc2VsZi0+W19LX29wZW5pbmdfY29udGFpbmVyX107CiAgICBteSAkS19jbG9zaW5nX2NvbnRhaW5lciAgPSAkc2VsZi0+W19LX2Nsb3NpbmdfY29udGFpbmVyX107CiAgICBteSAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8gPSAkc2VsZi0+W19yYmxvY2tfdHlwZV9vZl9zZXFub19dOwoKICAgICMgVmVyaWZ5IHRoYXQgc2Vxbm8gaXMgYW4gJ2lmJyBvciAndW5sZXNzJwogICAgbXkgJGJsb2NrX3R5cGUgPSAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8tPnskc2Vxbm9faWZ9OwogICAgaWYgKCAkYmxvY2tfdHlwZSBuZSAnaWYnICYmICRibG9ja190eXBlIG5lICd1bmxlc3MnICkgewogICAgICAgIEZhdWx0KAoiQmFkIGNhbGw6IGV4cGVjdGluZyBibG9jayB0eXBlICdpZicgb3IgJ3VubGVzcycgYnV0IGdvdCAnJGJsb2NrX3R5cGUnIGZvciBzZXFubz0kc2Vxbm9faWZcbiIKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNhdmUgc2VxdWVuY2UgbnVtYmVycyBpbiB0aGUgY2hhaW4gZm9yIGRlYnVnZ2luZwogICAgbXkgQHNlcW5vX2xpc3Q7CgogICAgIyBMb29wIHRvIGZvbGxvdyB0aGUgY2hhaW4KICAgIG15ICRtYXhfY2hhbmdlICA9IDA7CiAgICBteSAkYmxvY2tfY291bnQgPSAwOwogICAgbXkgJGVsc2lmX2NvdW50ID0gMDsKCiAgICAjIHdlIGFyZSB0cmFjaW5nIHRoZSBzZXF1ZW5jZSBudW1iZXJzIG9mIGNvbnNlY3V0aXZlIGlmL2Vsc2lmL2Vsc2UgYmxvY2tzCiAgICBteSAkc2Vxbm8gPSAkc2Vxbm9faWY7CiAgICB3aGlsZSAoJHNlcW5vKSB7CiAgICAgICAgcHVzaCBAc2Vxbm9fbGlzdCwgJHNlcW5vOwoKICAgICAgICAjIFVwZGF0ZSBpbmZvIGZvciB0aGlzIGJsb2NrCiAgICAgICAgJGJsb2NrX3R5cGUgPSAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8tPnskc2Vxbm99OwogICAgICAgIGlmICggJGJsb2NrX3R5cGUgZXEgJ2Vsc2lmJyApIHsgJGVsc2lmX2NvdW50KysgfQogICAgICAgIG15ICRpdGVtID0gJHJsZXZlbF9pbmZvLT57JHNlcW5vfTsKICAgICAgICBpZiAoIGRlZmluZWQoJGl0ZW0pICkgewogICAgICAgICAgICBteSAkc3RhcnRpbmdfZGVwdGggPSAkaXRlbS0+e3N0YXJ0aW5nX2RlcHRofTsKICAgICAgICAgICAgbXkgJG1heGltdW1fZGVwdGggID0gJGl0ZW0tPnttYXhpbXVtX2RlcHRofTsKICAgICAgICAgICAgJGJsb2NrX2NvdW50ICs9ICRpdGVtLT57YmxvY2tfY291bnR9OwogICAgICAgICAgICBteSAkbXhjID0gJG1heGltdW1fZGVwdGggLSAkc3RhcnRpbmdfZGVwdGggKyAxOwogICAgICAgICAgICBpZiAoICRteGMgPiAkbWF4X2NoYW5nZSApIHsgJG1heF9jaGFuZ2UgPSAkbXhjIH0KICAgICAgICB9CgogICAgICAgICMgQ2hhaW4gZW5kcyBpZiB0aGlzIGlzIGFuICdlbHNlJyBibG9jawogICAgICAgIGxhc3QgaWYgKCAkYmxvY2tfdHlwZSBlcSAnZWxzZScgKTsKCiAgICAgICAgIyBMb29rIGF0IHRoZSB0b2tlbiBmb2xsb3dpbmcgdGhlIGNsb3NpbmcgYnJhY2UKICAgICAgICBteSAkS2MgID0gJEtfY2xvc2luZ19jb250YWluZXItPnskc2Vxbm99OwogICAgICAgIG15ICRLX2sgPSAkc2VsZi0+S19uZXh0X2NvZGUoJEtjKTsKICAgICAgICBsYXN0IHVubGVzcyBkZWZpbmVkKCRLX2spOwogICAgICAgIG15ICR0eXBlX2sgID0gJHJMTC0+WyRLX2tdLT5bX1RZUEVfXTsKICAgICAgICBteSAkdG9rZW5fayA9ICRyTEwtPlskS19rXS0+W19UT0tFTl9dOwoKICAgICAgICAjIENoYWluIGVuZHMgdW5sZXNzIHdlIGFycml2ZSBhdCBrZXl3b3JkICdlbHNpZicgb3IgJ2Vsc2UnCiAgICAgICAgbGFzdAogICAgICAgICAgdW5sZXNzICggJHR5cGVfayBlcSAnaycKICAgICAgICAgICAgJiYgKCAkdG9rZW5fayBlcSAnZWxzaWYnIHx8ICR0b2tlbl9rIGVxICdlbHNlJyApICk7CgogICAgICAgICMgSGFuZGxlIGtleXdvcmQgJ2Vsc2UnIDogbmV4dCB0b2tlbiBiZSB0aGUgb3BlbmluZyBibG9jayBicmFjZQogICAgICAgIGlmICggJHRva2VuX2sgZXEgJ2Vsc2UnICkgewoKICAgICAgICAgICAgIyAgICAgfSBlbHNlICB7CiAgICAgICAgICAgICMgICAgIF4gIF4gICAgXgogICAgICAgICAgICAjICAgICBLYyB8ICAgIHwKICAgICAgICAgICAgIyAgICAgICAgS19rIEtvCgogICAgICAgICAgICBteSAkS28gPSAkc2VsZi0+S19uZXh0X2NvZGUoJEtfayk7CiAgICAgICAgICAgIGxhc3QgdW5sZXNzIGRlZmluZWQoJEtvKTsKICAgICAgICAgICAgJHNlcW5vID0gJHJMTC0+WyRLb10tPltfVFlQRV9TRVFVRU5DRV9dOwogICAgICAgICAgICBpZiAoICRzZXFubyAmJiAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8tPnskc2Vxbm99IGVxICdlbHNlJyApIHsKICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgU2hvdWxkbid0IGhhcHBlbiB1bmxlc3MgZmlsZSBoYXMgYW4gZXJyb3IKICAgICAgICAgICAgbGFzdDsKICAgICAgICB9CgogICAgICAgICMgSGFuZGxlIGtleXdvcmQgJ2Vsc2lmJzoKCiAgICAgICAgIyAgICAgfSBlbHNpZiAoICRzb21ldGhpbmcgKSB7CiAgICAgICAgIyAgICAgXiAgXiAgICBeICAgICAgICAgICAgXiBeCiAgICAgICAgIyAgICAgS2MgfCAgICB8ICAgICAgICAgICAgfCB8CiAgICAgICAgIyAgICAgICAgS19rICBLcG8gICAgICAgIEtwYyBLbwoKICAgICAgICAjIGhvcCBvdmVyIHRoZSBlbHNpZiBwYXJlbnMKICAgICAgICBteSAka3BvID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLX2spOwogICAgICAgIGxhc3QgdW5sZXNzIGRlZmluZWQoJGtwbyk7CiAgICAgICAgbXkgJHNlcW5vX3AgPSAkckxMLT5bJGtwb10tPltfVFlQRV9TRVFVRU5DRV9dOwogICAgICAgIGxhc3QgdW5sZXNzICggJHNlcW5vX3AgJiYgJHJMTC0+WyRrcG9dLT5bX1RPS0VOX10gZXEgJygnICk7CiAgICAgICAgbXkgJEtwYyA9ICRLX2Nsb3NpbmdfY29udGFpbmVyLT57JHNlcW5vX3B9OwogICAgICAgIGxhc3QgdW5sZXNzIGRlZmluZWQoJEtwYyk7CgogICAgICAgICMgc2hvdWxkIGJlIGF0IHRoZSBvcGVuaW5nIGVsc2lmIGJyYWNlCiAgICAgICAgbXkgJEtvID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLcGMpOwogICAgICAgIGxhc3QgdW5sZXNzIGRlZmluZWQoJEtvKTsKICAgICAgICAkc2Vxbm8gPSAkckxMLT5bJEtvXS0+W19UWVBFX1NFUVVFTkNFX107CiAgICAgICAgaWYgKCAkc2Vxbm8gJiYgJHJibG9ja190eXBlX29mX3NlcW5vLT57JHNlcW5vfSBlcSAnZWxzaWYnICkgewogICAgICAgICAgICBuZXh0OwogICAgICAgIH0KCiAgICAgICAgIyBTaG91bGRuJ3QgaGFwcGVuIHVubGVzcyBmaWxlIGhhcyBhbiBlcnJvcgogICAgICAgIGxhc3Q7CiAgICB9ICMjIGVuZCB3aGlsZSAoJHNlcW5vKQoKICAgICMgY2hlY2sgY291bnQKICAgIHJldHVybiBpZiAoICRlbHNpZl9jb3VudCA8ICRlbHNpZl9jb3VudF9taW4gKTsKCiAgICAjIFN0b3JlIHRoZSBjaGFpbgogICAgbXkgJEtfb3BlbmluZyA9ICRLX29wZW5pbmdfY29udGFpbmVyLT57JHNlcW5vX2lmfTsKICAgIG15ICRLX2Nsb3NpbmcgPSAkS19jbG9zaW5nX2NvbnRhaW5lci0+eyRzZXFub307CiAgICBteSAkbHhfb3BlbiAgID0gJHJMTC0+WyRLX29wZW5pbmddLT5bX0xJTkVfSU5ERVhfXTsKICAgIG15ICRsZXZlbCAgICAgPSAkckxMLT5bJEtfb3BlbmluZ10tPltfTEVWRUxfXTsKCiAgICBteSAkcmNoYWluID0gewogICAgICAgIEtfb3BlbmluZyAgID0+ICRLX29wZW5pbmcsCiAgICAgICAgS19jbG9zaW5nICAgPT4gJEtfY2xvc2luZywKICAgICAgICBsaW5lX3N0YXJ0ICA9PiAkbHhfb3BlbiArIDEsCiAgICAgICAgbmFtZSAgICAgICAgPT4gImVsc2lmKyRlbHNpZl9jb3VudCIsCiAgICAgICAgdHlwZSAgICAgICAgPT4gImlmLWNoYWluIiwKICAgICAgICBsZXZlbCAgICAgICA9PiAkbGV2ZWwsCiAgICAgICAgbWF4X2NoYW5nZSAgPT4gJG1heF9jaGFuZ2UsCiAgICAgICAgYmxvY2tfY291bnQgPT4gJGJsb2NrX2NvdW50LAogICAgfTsKCiAgICByZXR1cm4gJHJjaGFpbjsKfSAjIyBlbmQgc3ViIGZvbGxvd19pZl9jaGFpbgoKc3ViIGR1bXBfdW5pcXVlX2tleXMgewogICAgbXkgKCRzZWxmKSA9IEBfOwoKICAgICMgSW1wbGVtZW50IC0tZHVtcC11bmlxdWUta2V5cywgLWR1awogICAgIyBEdW1wIGEgbGlzdCBvZiBoYXNoIGtleXMgdXNlZCBqdXN0IG9uZSB0aW1lCgogICAgbXkgJHJMTCAgICAgICAgICAgICAgICAgPSAkc2VsZi0+W19yTExfXTsKICAgIG15ICRLbGltaXQgICAgICAgICAgICAgID0gJHNlbGYtPltfS2xpbWl0X107CiAgICBteSAkcmlzX2xpc3RfYnlfc2Vxbm8gICA9ICRzZWxmLT5bX3Jpc19saXN0X2J5X3NlcW5vX107CiAgICBteSAkS19vcGVuaW5nX2NvbnRhaW5lciA9ICRzZWxmLT5bX0tfb3BlbmluZ19jb250YWluZXJfXTsKICAgIG15ICRLX2Nsb3NpbmdfY29udGFpbmVyID0gJHNlbGYtPltfS19jbG9zaW5nX2NvbnRhaW5lcl9dOwoKICAgICMgc3RhY2sgaG9sZHMgWyRzZXFubywgJEtLLCAkS0tfbGFzdF9uYl0KICAgIG15IEBzdGFjazsKCiAgICBteSAkS0sgPSAtMTsKICAgIG15ICRLS19sYXN0X25iOwogICAgbXkgJEtLX3RoaXNfbmIgPSAwOwoKICAgIG15ICRLX2VuZF9za2lwID0gLTE7CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgTWFpbiBsb29wIHRvIGV4YW1pbmUgYWxsIGhhc2gga2V5cyBhbmQgcXVvdGVzCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgbXkgQFFfbGlzdDsKICAgIG15IEBLX3N0YXJ0X3F3X2xpc3Q7CiAgICBteSAkcndvcmRzID0ge307CgogICAgIyBUYWJsZSBvZiBzb21lIGtub3duIGtleXMKICAgIG15ICVpc19rbm93bl9rZXkgPSAoCiAgICAgICAgQUxSTSAgICAgPT4geyAnJFNJRycgPT4gMSB9LAogICAgICAgIFRFUk0gICAgID0+IHsgJyRTSUcnID0+IDEgfSwKICAgICAgICBJTlQgICAgICA9PiB7ICckU0lHJyA9PiAxIH0sCiAgICAgICAgX19ESUVfXyAgPT4geyAnJFNJRycgPT4gMSB9LAogICAgICAgIF9fV0FSTl9fID0+IHsgJyRTSUcnID0+IDEgfSwKICAgICAgICBIT01FICAgICA9PiB7ICckRU5WJyA9PiAxIH0sCiAgICAgICAgVVNFUiAgICAgPT4geyAnJEVOVicgPT4gMSB9LAogICAgICAgIExPR05BTUUgID0+IHsgJyRFTlYnID0+IDEgfSwKICAgICAgICBQQVRIICAgICA9PiB7ICckRU5WJyA9PiAxIH0sCiAgICAgICAgU0hFTEwgICAgPT4geyAnJEVOVicgPT4gMSB9LAogICAgICAgIFBFUkw1TElCID0+IHsgJyRFTlYnID0+IDEgfSwKICAgICAgICBQRVJMTElCICA9PiB7ICckRU5WJyA9PiAxIH0sCiAgICApOwoKICAgIG15ICRhZGRfa25vd25fa2V5cyA9IHN1YiB7CiAgICAgICAgbXkgKCAkcmhhc2gsICRuYW1lICkgPSBAXzsKICAgICAgICBmb3JlYWNoIG15ICRrZXkgKCBrZXlzICV7JHJoYXNofSApIHsKICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCggJGlzX2tub3duX2tleXska2V5fSApICkgewogICAgICAgICAgICAgICAgJGlzX2tub3duX2tleXska2V5fSA9IHsgJG5hbWUgPT4gMSB9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJGlzX2tub3duX2tleXska2V5fS0+eyRuYW1lfSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OyAjIyBlbmQgJGFkZF9rbm93bl9rZXlzID0gc3ViCgogICAgIyBBZGQga2V5cyB3aGljaCBtYXkgYmUgdW5pcXVlIHRvIHRoaXMgZW52aXJvbm1lbnQuCiAgICAkYWRkX2tub3duX2tleXMtPiggXCVTSUcsICAgJyRTSUcnICk7CiAgICAkYWRkX2tub3duX2tleXMtPiggXCVFTlYsICAgJyRFTlYnICk7CiAgICAkYWRkX2tub3duX2tleXMtPiggXCVFUlJOTywgJyQhJyApOwoKICAgIG15ICRpc19rbm93bl9oYXNoID0gc3ViIHsKICAgICAgICBteSAoJGtleSkgPSBAXzsKCiAgICAgICAgIyBHaXZlbiBhIGhhc2gga2V5ICcka2V5JywKICAgICAgICAjIFJldHVybjoKICAgICAgICAjICAgdHJ1ZSBpZiBpdCBpcyBrbm93biBhbmQgc2hvdWxkIGJlIGV4Y2x1ZGVkCiAgICAgICAgIyAgIGZhbHNlIGlmIGl0IGlzIG5vdCBrbm93bgoKICAgICAgICBteSAkcmhhc2hfbmFtZXMgPSAkaXNfa25vd25fa2V5eyRrZXl9OwogICAgICAgIHJldHVybiBpZiAoICEkcmhhc2hfbmFtZXMgKTsKCiAgICAgICAgIyBUaGUga2V5IGlzIGtub3duLCBub3cgc2VlIGlmIGl0cyBoYXNoIG5hbWUgaXMga25vd24KICAgICAgICByZXR1cm4gaWYgKCAhQHN0YWNrICk7CiAgICAgICAgbXkgJEticmFjZSA9ICRzdGFja1stMV0tPlsxXTsKICAgICAgICBteSAkS2hhc2ggID0gJHN0YWNrWy0xXS0+WzJdOwogICAgICAgIHJldHVybiBpZiAoICFkZWZpbmVkKCRLYnJhY2UpICk7CiAgICAgICAgcmV0dXJuIGlmICggIWRlZmluZWQoJEtoYXNoKSApOwogICAgICAgIHJldHVybiBpZiAoICRyTEwtPlskS2JyYWNlXS0+W19UWVBFX10gbmUgJ0wnICk7CiAgICAgICAgbXkgJGhhc2hfbmFtZSA9ICRyTEwtPlskS2hhc2hdLT5bX1RPS0VOX107CiAgICAgICAgcmV0dXJuIGlmICggISRyaGFzaF9uYW1lcy0+eyRoYXNoX25hbWV9ICk7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9OyAjIyBlbmQgJGlzX2tub3duX2hhc2ggPSBzdWIKCiAgICBteSAkcHVzaF9LS19sYXN0X25iID0gc3ViIHsKCiAgICAgICAgIyBpZiB0aGUgcHJldmlvdXMgbm9uYmxhbmsgdG9rZW4gd2FzIGEgaGFzaCBrZXkgb2YgdHlwZQogICAgICAgICMgJ1EnIG9yICd3JywgdGhlbiB1cGRhdGUgaXRzIGNvdW50CgogICAgICAgICMgV2UgYXJlIGlnbm9yaW5nIGNvbnN0YW50IGRlZmluaXRpb25zCiAgICAgICAgaWYgKCAkS0sgPCAkS19lbmRfc2tpcCApIHsgcmV0dXJuIH0KCiAgICAgICAgbXkgJHR5cGVfbGFzdCAgPSAkckxMLT5bJEtLX2xhc3RfbmJdLT5bX1RZUEVfXTsKICAgICAgICBteSAkdG9rZW5fbGFzdCA9ICRyTEwtPlskS0tfbGFzdF9uYl0tPltfVE9LRU5fXTsKICAgICAgICBteSAkd29yZDsKICAgICAgICBpZiAoICR0eXBlX2xhc3QgZXEgJ3cnICkgewogICAgICAgICAgICAkd29yZCA9ICR0b2tlbl9sYXN0OwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICR0eXBlX2xhc3QgZXEgJ1EnICkgewogICAgICAgICAgICAkd29yZCA9IHN1YnN0ciggJHRva2VuX2xhc3QsIDEsIC0xICk7CgogICAgICAgICAgICAjIElnbm9yZSB0ZXh0IHdpdGggaW50ZXJwb2xhdGVkIHZhbHVlcwogICAgICAgICAgICBteSAkY2gwID0gc3Vic3RyKCAkdG9rZW5fbGFzdCwgMCwgMSApOwogICAgICAgICAgICBpZiAoICRjaDAgZXEgJyInICkgewogICAgICAgICAgICAgICAgZm9yZWFjaCBteSAkc2lnaWwgKCAnJCcsICdAJyApIHsKICAgICAgICAgICAgICAgICAgICBteSAkcG9zID0gaW5kZXgoICR3b3JkLCAkc2lnaWwgKTsKICAgICAgICAgICAgICAgICAgICBuZXh0ICAgaWYgKCAkcG9zIDwgMCApOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBpZiAoICRwb3MgPT0gMCApOwogICAgICAgICAgICAgICAgICAgIG15ICRjaF90ZXN0ID0gc3Vic3RyKCAkd29yZCwgJHBvcyAtIDEsIDEgKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWYgKCAkY2hfdGVzdCBuZSAnXFwnICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHBvcCBAUV9saXN0OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIyBub3QgYSBxdW90ZSAtIHBvc3NpYmx5IGlkZW50aWZpZXIKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdW5sZXNzICgkd29yZCk7CgogICAgICAgICMgQnVtcCBjb3VudCBvZiBrbm93biBrZXlzIGJ5IDEgc28gdGhhdCB0aGV5IHdpbGwgbm90IGFwcGVhciBhcyB1bmlxdWUKICAgICAgICBteSAkb25lID0gMTsKICAgICAgICBpZiAoICRpc19rbm93bl9rZXl7JHdvcmR9ICYmICRpc19rbm93bl9oYXNoLT4oJHdvcmQpICkgeyAkb25lKysgfQoKICAgICAgICBpZiAoICFkZWZpbmVkKCAkcndvcmRzLT57JHdvcmR9ICkgKSB7CiAgICAgICAgICAgICRyd29yZHMtPnskd29yZH0gPSBbICRvbmUsICRLS19sYXN0X25iIF07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkcndvcmRzLT57JHdvcmR9LT5bMF0rKzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfTsgIyMgZW5kICRwdXNoX0tLX2xhc3RfbmIgPSBzdWIKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgTWFpbiBsb29wIG92ZXIgYWxsIHRva2VucwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB3aGlsZSAoICsrJEtLIDw9ICRLbGltaXQgKSB7CgogICAgICAgIG15ICR0eXBlID0gJHJMTC0+WyRLS10tPltfVFlQRV9dOwogICAgICAgIG5leHQgaWYgKCAkdHlwZSBlcSAnYicgKTsKICAgICAgICBuZXh0IGlmICggJHR5cGUgZXEgJyMnICk7CiAgICAgICAgJEtLX2xhc3RfbmIgPSAkS0tfdGhpc19uYjsKICAgICAgICAkS0tfdGhpc19uYiA9ICRLSzsKICAgICAgICBteSAkc2Vxbm8gPSAkckxMLT5bJEtLXS0+W19UWVBFX1NFUVVFTkNFX107CiAgICAgICAgaWYgKCRzZXFubykgewogICAgICAgICAgICBpZiAoICRpc19vcGVuaW5nX3R5cGV7JHR5cGV9ICkgewoKICAgICAgICAgICAgICAgIGlmICggJHR5cGUgZXEgJ0wnICkgewoKICAgICAgICAgICAgICAgICAgICAjIFNraXAgcGFzdCBzb21ldGhpbmcgbGlrZSAke3dvcmR9CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkS0tfbGFzdF9uYiAmJiAkckxMLT5bJEtLX2xhc3RfbmJdLT5bX1RZUEVfXSBlcSAndCcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRLYyA9ICRLX2Nsb3NpbmdfY29udGFpbmVyLT57JHNlcW5vfTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJEtuID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLSyk7CiAgICAgICAgICAgICAgICAgICAgICAgICRLbiA9ICRzZWxmLT5LX25leHRfY29kZSgkS24pOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRLbiAmJiAkS2MgJiYgJEtuID09ICRLYyAmJiAkS2MgPiAkS19lbmRfc2tpcCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRLX2VuZF9za2lwID0gJEtjOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcHVzaCBAc3RhY2ssIFsgJHNlcW5vLCAkS0ssICRLS19sYXN0X25iIF07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkaXNfY2xvc2luZ190eXBleyR0eXBlfSApIHsKCiAgICAgICAgICAgICAgICBpZiAoICR0eXBlIGVxICdSJyApIHsKCiAgICAgICAgICAgICAgICAgICAgIyByZXF1aXJlIGEgc2luZ2xlIGl0ZW0gd2l0aGluIHRoZSBoYXNoIGJyYWNlcwogICAgICAgICAgICAgICAgICAgIG15ICRLbyA9ICRLX29wZW5pbmdfY29udGFpbmVyLT57JHNlcW5vfTsKICAgICAgICAgICAgICAgICAgICBteSAkS24gPSAkc2VsZi0+S19uZXh0X2NvZGUoJEtvKTsKICAgICAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQoJEtuKSAmJiAkS24gPT0gJEtLX2xhc3RfbmIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRwdXNoX0tLX2xhc3RfbmItPigpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBteSAkaXRlbSA9IHBvcCBAc3RhY2s7CiAgICAgICAgICAgICAgICBpZiAoICEkaXRlbSB8fCAkaXRlbS0+WzBdICE9ICRzZXFubyApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoREVWRUxfTU9ERSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBzaG91bGRuJ3QgaGFwcGVuIGZvciBhIGJhbGFuY2VkIGZpbGUKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJG51bSA9IEBzdGFjazsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGdvdCA9ICRudW0gPyAkaXRlbS0+WzBdIDogJ3VuZGVmJzsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGxubyA9ICRyTEwtPlskS0tdLT5bX0xJTkVfSU5ERVhfXTsKICAgICAgICAgICAgICAgICAgICAgICAgRmF1bHQgPDxFT007CnN0YWNrIGVycm9yIGF0IHNlcW5vPSRzZXFubyB0eXBlPSR0eXBlIG51bT0kbnVtIGdvdCBzZXFubz0kZ290IGxubz0kbG5vCkVPTQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICMjIHRlcm5hcnkKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKCAkdHlwZSBlcSAnPT4nICkgewogICAgICAgICAgICAgICAgbXkgJHBhcmVudF9zZXFubyA9ICRzZWxmLT5wYXJlbnRfc2Vxbm9fYnlfSygkS0spOwogICAgICAgICAgICAgICAgaWYgKCAkcGFyZW50X3NlcW5vICYmICRyaXNfbGlzdF9ieV9zZXFuby0+eyRwYXJlbnRfc2Vxbm99ICkgewogICAgICAgICAgICAgICAgICAgICRwdXNoX0tLX2xhc3RfbmItPigpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJHR5cGUgZXEgJ1EnICkgewogICAgICAgICAgICAgICAgcHVzaCBAUV9saXN0LCAkS0s7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkdHlwZSBlcSAncScgKSB7CiAgICAgICAgICAgICAgICBpZiAoICFkZWZpbmVkKCRLS19sYXN0X25iKQogICAgICAgICAgICAgICAgICAgIHx8ICRyTEwtPlskS0tfbGFzdF9uYl0tPltfVFlQRV9dIG5lICdxJyApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAS19zdGFydF9xd19saXN0LCAkS0s7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkdHlwZSBlcSAnaycgKSB7CgogICAgICAgICAgICAgICAgIyBMb29rIGZvciAndXNlIGNvbnN0YW50JyBhbmQgZGVmaW5lIGl0cyBlbmRpbmcgdG9rZW4KICAgICAgICAgICAgICAgIGlmICggJHJMTC0+WyRLS10tPltfVE9LRU5fXSBlcSAndXNlJyApIHsKICAgICAgICAgICAgICAgICAgICBteSAkS24gPSAkc2VsZi0+S19uZXh0X2NvZGUoJEtLKTsKICAgICAgICAgICAgICAgICAgICBuZXh0IGlmICggIWRlZmluZWQoJEtuKSApOwogICAgICAgICAgICAgICAgICAgIG5leHQgaWYgKCAkckxMLT5bJEtuXS0+W19UT0tFTl9dIG5lICdjb25zdGFudCcgKTsKICAgICAgICAgICAgICAgICAgICAkS24gPSAkc2VsZi0+S19uZXh0X2NvZGUoJEtuKTsKICAgICAgICAgICAgICAgICAgICBuZXh0IGlmICggIWRlZmluZWQoJEtuKSApOwogICAgICAgICAgICAgICAgICAgIG15ICRzZXFub19uID0gJHJMTC0+WyRLbl0tPltfVFlQRV9TRVFVRU5DRV9dOwogICAgICAgICAgICAgICAgICAgIGlmICgkc2Vxbm9fbikgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBza2lwIGEgYmxvY2sgb2YgY29uc3RhbnQgZGVmaW5pdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHRva2VuX24gPSAkckxMLT5bJEtuXS0+W19UT0tFTl9dOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICR0b2tlbl9uIGVxICd7JyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRLX2VuZF9za2lwID0gJEtfY2xvc2luZ19jb250YWluZXItPnskc2Vxbm9fbn07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyB1bmV4cGVjdGVkIGZvcm1hdCwgc2tpcAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBza2lwIGEgc2luZ2xlIGNvbnN0YW50IGRlZmluaXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgJEtfZW5kX3NraXAgPSAkS24gKyAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICMgY29udGludWUgc2VhcmNoCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9ICMjIGVuZCB3aGlsZSAoICsrJEtLIDw9ICRLbGltaXQgKQoKICAgICMgZmluZCBoYXNoIGtleXMgc2VlbiBqdXN0IG9uZSB0aW1lCiAgICBteSAldW5pcXVlX3dvcmRzOwogICAgZm9yZWFjaCBteSAka2V5ICgga2V5cyAleyRyd29yZHN9ICkgewogICAgICAgIG15ICggJGNvdW50LCAkSyApID0gQHsgJHJ3b3Jkcy0+eyRrZXl9IH07CiAgICAgICAgbmV4dCBpZiAoICRjb3VudCAhPSAxICk7CiAgICAgICAgJHVuaXF1ZV93b3Jkc3ska2V5fSA9ICRLOwogICAgfQoKICAgIHJldHVybiBpZiAoICEldW5pcXVlX3dvcmRzICk7CgogICAgIyBjaGVjayBlYWNoIHVuaXF1ZSB3b3JkIGFnYWluc3QgdGhlIGxpc3Qgb2YgdHlwZSBRIHRva2VucwogICAgaWYgKEBRX2xpc3QpIHsKICAgICAgICBteSAkaW1heCA9ICQjUV9saXN0OwogICAgICAgIGZvcmVhY2ggbXkgJGkgKCAwIC4uICRpbWF4ICkgewoKICAgICAgICAgICAgIyBJZ25vcmUgbXVsdGlsaW5lIHF1b3RlcwogICAgICAgICAgICBteSAkSyA9ICRRX2xpc3RbJGldOwogICAgICAgICAgICBpZiAoICAgKCAkaSA9PSAwIHx8ICRRX2xpc3RbICRpIC0gMSBdICsgMSAhPSAkSyApCiAgICAgICAgICAgICAgICAmJiAoICRpID09ICRpbWF4IHx8ICRRX2xpc3RbICRpICsgMSBdICE9ICRLICsgMSApICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICMgcmVtb3ZlIHF1b3RlcwogICAgICAgICAgICAgICAgbXkgJHdvcmQgPSBzdWJzdHIoICRyTEwtPlskS10tPltfVE9LRU5fXSwgMSwgLTEgKTsKCiAgICAgICAgICAgICAgICBpZiAoICR1bmlxdWVfd29yZHN7JHdvcmR9ICkgewogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAkdW5pcXVlX3dvcmRzeyR3b3JkfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gaWYgKCAhJXVuaXF1ZV93b3JkcyApOwoKICAgICMgUmVtb3ZlIGFueSBrZXlzIHdoaWNoIGFyZSBhbHNvIGluIGEgcXcgbGlzdAogICAgZm9yZWFjaCBteSAkS3F3IChAS19zdGFydF9xd19saXN0KSB7CiAgICAgICAgbXkgKCAkS19sYXN0X3FfdXUsICRybGlzdCApID0gJHNlbGYtPmdldF9xd19saXN0KCRLcXcpOwogICAgICAgIGZvcmVhY2ggbXkgJHdvcmQgKCBAeyRybGlzdH0gKSB7CiAgICAgICAgICAgIGlmICggJHVuaXF1ZV93b3Jkc3skd29yZH0gKSB7CiAgICAgICAgICAgICAgICBkZWxldGUgJHVuaXF1ZV93b3Jkc3skd29yZH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIGlmICggISV1bmlxdWVfd29yZHMgKTsKCiAgICAjIHJlcG9ydCB1bmlxdWUgd29yZHMKICAgIG15ICRvdXRwdXRfc3RyaW5nID0gRU1QVFlfU1RSSU5HOwogICAgbXkgQGxpc3Q7CiAgICBmb3JlYWNoIG15ICR3b3JkICgga2V5cyAldW5pcXVlX3dvcmRzICkgewogICAgICAgIG15ICRLICAgPSAkdW5pcXVlX3dvcmRzeyR3b3JkfTsKICAgICAgICBteSAkbG5vID0gJHJMTC0+WyRLXS0+W19MSU5FX0lOREVYX10gKyAxOwogICAgICAgIHB1c2ggQGxpc3QsIFsgJHdvcmQsICRsbm8gXTsKICAgIH0KICAgIEBsaXN0ID0gc29ydCB7ICRhLT5bMV0gPD0+ICRiLT5bMV0gfHwgJGEtPlswXSBjbXAgJGItPlswXSB9IEBsaXN0OwogICAgZm9yZWFjaCBteSAkaXRlbSAoQGxpc3QpIHsKICAgICAgICBteSAoICR3b3JkLCAkbG5vICkgPSBAeyRpdGVtfTsKICAgICAgICAkb3V0cHV0X3N0cmluZyAuPSAiJHdvcmQsJGxub1xuIjsKICAgIH0KICAgIGlmICgkb3V0cHV0X3N0cmluZykgewogICAgICAgIG15ICRpbnB1dF9zdHJlYW1fbmFtZSA9IGdldF9pbnB1dF9zdHJlYW1fbmFtZSgpOwogICAgICAgIGNob21wICRvdXRwdXRfc3RyaW5nOwogICAgICAgIHByaW50IHsqU1RET1VUfSA8PEVPTTsKPT0+ICRpbnB1dF9zdHJlYW1fbmFtZSA8PT0KJG91dHB1dF9zdHJpbmcKRU9NCiAgICB9CgogICAgcmV0dXJuOwoKfSAjIyBlbmQgc3ViIGR1bXBfdW5pcXVlX2tleXMKCnN1YiBkdW1wX2Jsb2NrX3N1bW1hcnkgewogICAgbXkgKCRzZWxmKSA9IEBfOwoKICAgICMgRHVtcCBpbmZvcm1hdGlvbiBhYm91dCBzZWxlY3RlZCBjb2RlIGJsb2NrcyB0byBTVERPVVQKICAgICMgVGhpcyBzdWIgaXMgY2FsbGVkIHdoZW4KICAgICMgICAtLWR1bXAtYmxvY2stc3VtbWFyeSAoLWRicykgaXMgc2V0LgoKICAgICMgVGhlIGZvbGxvd2luZyBjb250cm9scyBhcmUgYXZhaWxhYmxlOgogICAgIyAgLS1kdW1wLWJsb2NrLXR5cGVzPXMgKC1kYnQ9cyksIHdoZXJlIHMgaXMgYSBsaXN0IG9mIGJsb2NrIHR5cGVzCiAgICAjICAgIChpZiBlbHNlIGVsc2lmIGZvciBmb3JlYWNoIHdoaWxlIGRvIC4uLiBzdWIpIDsgZGVmYXVsdCBpcyAnc3ViJwogICAgIyAgLS1kdW1wLWJsb2NrLW1pbmltdW0tbGluZXM9biAoLWRibWw9biksIHdoZXJlIG4gaXMgdGhlIG1pbmltdW0KICAgICMgICAgbnVtYmVyIG9mIGxpbmVzIGZvciBhIGJsb2NrIHRvIGJlIGluY2x1ZGVkOyBkZWZhdWx0IGlzIDIwLgoKICAgIG15ICRyT3B0c19kdW1wX2Jsb2NrX3R5cGVzID0gJHJPcHRzLT57J2R1bXAtYmxvY2stdHlwZXMnfTsKICAgIGlmICggIWRlZmluZWQoJHJPcHRzX2R1bXBfYmxvY2tfdHlwZXMpICkgeyAkck9wdHNfZHVtcF9ibG9ja190eXBlcyA9ICdzdWInIH0KICAgICRyT3B0c19kdW1wX2Jsb2NrX3R5cGVzID1+IHMvXlxzKy8vOwogICAgJHJPcHRzX2R1bXBfYmxvY2tfdHlwZXMgPX4gcy9ccyskLy87CiAgICBteSBAbGlzdCA9IHNwbGl0IC9ccysvLCAkck9wdHNfZHVtcF9ibG9ja190eXBlczsKICAgIG15ICVkdW1wX2Jsb2NrX3R5cGVzOwogICAgQGR1bXBfYmxvY2tfdHlwZXN7QGxpc3R9ID0gKDEpIHggc2NhbGFyKEBsaXN0KTsKCiAgICAjIEdldCBsZXZlbCB2YXJpYXRpb24gaW5mbyBmb3IgY29kZSBibG9ja3MKICAgIG15ICRybGV2ZWxfaW5mbyA9ICRzZWxmLT5maW5kX2xldmVsX2luZm8oKTsKCiAgICAjIEdldCBibG9jayBpbmZvCiAgICBteSAkcnNlbGVjdGVkX2Jsb2NrcyA9CiAgICAgICRzZWxmLT5maW5kX3NlbGVjdGVkX2Jsb2NrcyggXCVkdW1wX2Jsb2NrX3R5cGVzLCAkcmxldmVsX2luZm8gKTsKCiAgICAjIEdldCBpZi1jaGFpbnMKICAgIG15ICRyc2VsZWN0ZWRfaWZfY2hhaW5zID0KICAgICAgJHNlbGYtPmZpbmRfaWZfY2hhaW5zKCBcJWR1bXBfYmxvY2tfdHlwZXMsICRybGV2ZWxfaW5mbyApOwoKICAgICMgR2V0IHBhY2thZ2UgaW5mbwogICAgbXkgJHJwYWNrYWdlcyA9ICRzZWxmLT5maW5kX3NlbGVjdGVkX3BhY2thZ2VzKCBcJWR1bXBfYmxvY2tfdHlwZXMgKTsKCiAgICAjIG1lcmdlCiAgICBteSBAYWxsX2Jsb2NrcyA9CiAgICAgICggQHskcnNlbGVjdGVkX2Jsb2Nrc30sIEB7JHJzZWxlY3RlZF9pZl9jaGFpbnN9LCBAeyRycGFja2FnZXN9ICk7CgogICAgcmV0dXJuIHVubGVzcyAoQGFsbF9ibG9ja3MpOwoKICAgIG15ICRpbnB1dF9zdHJlYW1fbmFtZSA9IGdldF9pbnB1dF9zdHJlYW1fbmFtZSgpOwoKICAgICMgR2V0IGNvZGUgbGluZSBjb3VudAogICAgbXkgJHJjb2RlX2xpbmVfY291bnQgPSAkc2VsZi0+ZmluZF9jb2RlX2xpbmVfY291bnQoKTsKCiAgICAjIEdldCBtY2NhYmUgY291bnQKICAgIG15ICRybWNjYWJlX2NvdW50X3N1bSA9ICRzZWxmLT5maW5kX21jY2FiZV9jb3VudCgpOwoKICAgIG15ICRyT3B0c19kdW1wX2Jsb2NrX21pbmltdW1fbGluZXMgPSAkck9wdHMtPnsnZHVtcC1ibG9jay1taW5pbXVtLWxpbmVzJ307CiAgICBpZiAoICFkZWZpbmVkKCRyT3B0c19kdW1wX2Jsb2NrX21pbmltdW1fbGluZXMpICkgewogICAgICAgICRyT3B0c19kdW1wX2Jsb2NrX21pbmltdW1fbGluZXMgPSAyMDsKICAgIH0KCiAgICBteSAkckxMID0gJHNlbGYtPltfckxMX107CgogICAgIyBhZGQgdmFyaW91cyBjb3VudHMsIGZpbHRlciBhbmQgcHJpbnQgdG8gU1RET1VUCiAgICBteSAkcm91dHB1dF9saW5lcyA9IFtdOwogICAgZm9yZWFjaCBteSAkaXRlbSAoQGFsbF9ibG9ja3MpIHsKCiAgICAgICAgbXkgJEtfb3BlbmluZyA9ICRpdGVtLT57S19vcGVuaW5nfTsKICAgICAgICBteSAkS19jbG9zaW5nID0gJGl0ZW0tPntLX2Nsb3Npbmd9OwoKICAgICAgICAjIGRlZmluZSB0b3RhbCBudW1iZXIgb2YgbGluZXMKICAgICAgICBteSAkbHhfb3BlbiAgICA9ICRyTEwtPlskS19vcGVuaW5nXS0+W19MSU5FX0lOREVYX107CiAgICAgICAgbXkgJGx4X2Nsb3NlICAgPSAkckxMLT5bJEtfY2xvc2luZ10tPltfTElORV9JTkRFWF9dOwogICAgICAgIG15ICRsaW5lX2NvdW50ID0gJGx4X2Nsb3NlIC0gJGx4X29wZW4gKyAxOwoKICAgICAgICAjIGRlZmluZSB0b3RhbCBudW1iZXIgb2YgbGluZXMgb2YgY29kZSBleGNsdWRpbmcgYmxhbmtzLCBjb21tZW50cywgcG9kCiAgICAgICAgbXkgJGNvZGVfbGluZXNfb3BlbiAgPSAkcmNvZGVfbGluZV9jb3VudC0+WyRseF9vcGVuXTsKICAgICAgICBteSAkY29kZV9saW5lc19jbG9zZSA9ICRyY29kZV9saW5lX2NvdW50LT5bJGx4X2Nsb3NlXTsKICAgICAgICBteSAkY29kZV9saW5lcyAgICAgICA9IDA7CiAgICAgICAgaWYgKCBkZWZpbmVkKCRjb2RlX2xpbmVzX29wZW4pICYmIGRlZmluZWQoJGNvZGVfbGluZXNfY2xvc2UpICkgewogICAgICAgICAgICAkY29kZV9saW5lcyA9ICRjb2RlX2xpbmVzX2Nsb3NlIC0gJGNvZGVfbGluZXNfb3BlbiArIDE7CiAgICAgICAgfQoKICAgICAgICAjIGZpbHRlciBvdXQgYmxvY2tzIGJlbG93IHRoZSBzZWxlY3RlZCBjb2RlIGxpbmUgbGltaXQKICAgICAgICBpZiAoICRjb2RlX2xpbmVzIDwgJHJPcHRzX2R1bXBfYmxvY2tfbWluaW11bV9saW5lcyApIHsKICAgICAgICAgICAgbmV4dDsKICAgICAgICB9CgogICAgICAgICMgYWRkIG1jY2FiZV9jb3VudCBmb3IgdGhpcyBibG9jawogICAgICAgIG15ICRtY2NhYmVfY2xvc2luZyA9ICRybWNjYWJlX2NvdW50X3N1bS0+eyAkS19jbG9zaW5nICsgMSB9OwogICAgICAgIG15ICRtY2NhYmVfb3BlbmluZyA9ICRybWNjYWJlX2NvdW50X3N1bS0+eyRLX29wZW5pbmd9OwogICAgICAgIG15ICRtY2NhYmVfY291bnQgICA9IDE7ICAgICMgYWRkIDEgdG8gbWF0Y2ggUGVybDo6Q3JpdGljCiAgICAgICAgaWYgKCBkZWZpbmVkKCRtY2NhYmVfb3BlbmluZykgJiYgZGVmaW5lZCgkbWNjYWJlX2Nsb3NpbmcpICkgewogICAgICAgICAgICAkbWNjYWJlX2NvdW50ICs9ICRtY2NhYmVfY2xvc2luZyAtICRtY2NhYmVfb3BlbmluZzsKICAgICAgICB9CgogICAgICAgICMgU3RvcmUgdGhlIGZpbmFsIHNldCBvZiBwcmludCB2YXJpYWJsZXMKICAgICAgICAjIE5vdGU6IEtfb3BlbmluZyBpcyBhZGRlZCBmb3Igc29ydGluZyBidXQgZGVsZXRlZCBiZWZvcmUgcHJpbnRpbmcKICAgICAgICBwdXNoIEB7JHJvdXRwdXRfbGluZXN9LCBbCgogICAgICAgICAgICAkaW5wdXRfc3RyZWFtX25hbWUsCiAgICAgICAgICAgICRpdGVtLT57bGluZV9zdGFydH0sCiAgICAgICAgICAgICRsaW5lX2NvdW50LAogICAgICAgICAgICAkY29kZV9saW5lcywKICAgICAgICAgICAgJGl0ZW0tPnt0eXBlfSwKICAgICAgICAgICAgJGl0ZW0tPntuYW1lfSwKICAgICAgICAgICAgJGl0ZW0tPntsZXZlbH0sCiAgICAgICAgICAgICRpdGVtLT57bWF4X2NoYW5nZX0sCiAgICAgICAgICAgICRpdGVtLT57YmxvY2tfY291bnR9LAogICAgICAgICAgICAkbWNjYWJlX2NvdW50LAogICAgICAgICAgICAkS19vcGVuaW5nLAoKICAgICAgICBdOwogICAgfQoKICAgIHJldHVybiB1bmxlc3MgQHskcm91dHB1dF9saW5lc307CgogICAgIyBTb3J0IGJsb2NrcyBhbmQgcGFja2FnZXMgb24gc3RhcnRpbmcgbGluZSBudW1iZXIKICAgIG15IEBzb3J0ZWRfbGluZXMgPSBzb3J0IHsgJGEtPlstMV0gPD0+ICRiLT5bLTFdIH0gQHskcm91dHB1dF9saW5lc307CgogICAgcHJpbnQgeypTVERPVVR9CiJmaWxlLGxpbmUsbGluZV9jb3VudCxjb2RlX2xpbmVzLHR5cGUsbmFtZSxsZXZlbCxtYXhfY2hhbmdlLGJsb2NrX2NvdW50LG1jY2FiZV9jb3VudFxuIjsKCiAgICBmb3JlYWNoIG15ICRybGluZV92YXJzIChAc29ydGVkX2xpbmVzKSB7CgogICAgICAgICMgcmVtb3ZlIEtfb3BlbmluZyB3aGljaCB3YXMgYWRkZWQgZm9yIHN0YWJsZSBzb3J0aW5nCiAgICAgICAgcG9wIEB7JHJsaW5lX3ZhcnN9OwogICAgICAgIG15ICRsaW5lID0gam9pbiggIiwiLCBAeyRybGluZV92YXJzfSApIC4gIlxuIjsKICAgICAgICBwcmludCB7KlNURE9VVH0gJGxpbmU7CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBkdW1wX2Jsb2NrX3N1bW1hcnkKCnN1YiBzZXRfY2kgewoKICAgIG15ICgkc2VsZikgPSBAXzsKCiAgICAjIFNldCB0aGUgYmFzaWMgY29udGludWF0aW9uIGluZGVudGF0aW9uIChjaSkgZm9yIGFsbCB0b2tlbnMuCiAgICAjIFRoaXMgaXMgYSByZXBsYWNlbWVudCBmb3IgdGhlIHZhbHVlcyBwcmV2aW91c2x5IGNvbXB1dGVkIGluCiAgICAjIHN1YiBQZXJsOjpUaWR5OjpUb2tlbml6ZXI6OnRva2VuaXplcl93cmFwdXAuIEluIG1vc3QgY2FzZXMgaXQKICAgICMgcHJvZHVjZXMgaWRlbnRpY2FsIHJlc3VsdHMsIGJ1dCBpbiBhIGZldyBjYXNlcyBpdCBpcyBhbiBpbXByb3ZlbWVudC4KCiAgICB1c2UgY29uc3RhbnQgREVCVUdfU0VUX0NJID0+IDA7CgogICAgIyBUaGlzIHR1cm5zIG9uIGFuIG9wdGlvbmFsIHBpZWNlIG9mIGxvZ2ljIHdoaWNoIG1ha2VzIHRoZSBuZXcgYW5kCiAgICAjIG9sZCBjb21wdXRhdGlvbnMgb2YgY2kgYWdyZWUuICBJdCBoYXMgYWxtb3N0IG5vIGVmZmVjdCBvbiBhY3R1YWwKICAgICMgcHJvZ3JhbXMgYnV0IGlzIHVzZWZ1bCBmb3IgdGVzdGluZy4KICAgIHVzZSBjb25zdGFudCBTRVRfQ0lfT1BUSU9OXzAgPT4gMTsKCiAgICAjIFRoaXMgaXMgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20gdGhlIGhhc2ggaW4gaW4gYnJlYWtfbGlzdHMKICAgICMgd2l0aCBhIHNpbWlsYXIgbmFtZSAocmVtb3ZlZCAnPycgYW5kICc6JyB0byBmaXggdDAwNyBhbmQgb3RoZXJzKQogICAgbXkgJWlzX2xvZ2ljYWxfY29udGFpbmVyX2Zvcl9jaTsKICAgIG15IEBxID0gcXcjIGlmIGVsc2lmIHVubGVzcyB3aGlsZSBhbmQgb3IgZXJyIG5vdCAmJiB8IHx8ICEgIzsKICAgIEBpc19sb2dpY2FsX2NvbnRhaW5lcl9mb3JfY2l7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICAjIFRoaXMgaXMgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20gYSB0b2tlbml6ZXIgaGFzaCB3aXRoIGEgc2ltaWxhciBuYW1lOgogICAgbXkgJWlzX2NvbnRhaW5lcl9sYWJlbF90eXBlX2Zvcl9jaTsKICAgIEBxID0gcXcjIGsgJiYgfCB8fCA/IDogISAjOwogICAgQGlzX2NvbnRhaW5lcl9sYWJlbF90eXBlX2Zvcl9jaXtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICMgVW5kbyBjaSBvZiBjbG9zaW5nIGxpc3QgcGFyZW4gZm9sbG93ZWQgYnkgdGhlc2UgYmluYXJ5IG9wZXJhdG9yczoKICAgICMgLSBpbml0aWFsbHkgZGVmaW5lZCBmb3IgaXNzdWUgdDAyNywgdGhlbgogICAgIyAtIGFkZGVkICc9JyBmb3IgdDAxNQogICAgIyAtIGFkZGVkICc9ficgZm9yICdsb2NhbGUuaW4nCiAgICAjIC0gYWRkZWQgJzw9PicgZm9yICdjb3JlbGlzdC5pbicKICAgICMgTm90ZToKICAgICMgICBTZWUgQHZhbHVlX3JlcXVlc3Rvcl90eXBlIGZvciBtb3JlIHRoYXQgbWlnaHQgYmUgaW5jbHVkZWQKICAgICMgICBTZWUgYWxzbyBAaXNfYmluYXJ5X3R5cGUKICAgIG15ICViaW5fb3BfdHlwZTsKICAgIEBxID0gcXcjIC4gKiogLT4gKyAtIC8gKiA9ICE9IF4gPCA+ICUgPj0gPD0gPX4gIX4gPD0+IHggIzsKICAgIEBiaW5fb3BfdHlwZXtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgIG15ICVpc19saXN0X2VuZF90eXBlOwogICAgQHEgPSBxdyggOyB7IH0gKTsKICAgIHB1c2ggQHEsICcsJzsKICAgIEBpc19saXN0X2VuZF90eXBle0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgbXkgJHJMTCAgICA9ICRzZWxmLT5bX3JMTF9dOwogICAgbXkgJEtsaW1pdCA9ICRzZWxmLT5bX0tsaW1pdF9dOwogICAgcmV0dXJuIHVubGVzcyBkZWZpbmVkKCRLbGltaXQpOwoKICAgIG15ICR0b2tlbiAgICAgICAgPSAnOyc7CiAgICBteSAkdHlwZSAgICAgICAgID0gJzsnOwogICAgbXkgJGxhc3RfdG9rZW4gICA9ICR0b2tlbjsKICAgIG15ICRsYXN0X3R5cGUgICAgPSAkdHlwZTsKICAgIG15ICRjaV9sYXN0ICAgICAgPSAwOwogICAgbXkgJGNpX25leHQgICAgICA9IDA7CiAgICBteSAkY2lfbmV4dF9uZXh0ID0gMTsKICAgIG15ICRyc3RhY2sgICAgICAgPSBbXTsKCiAgICBteSAkc2VxX3Jvb3QgPSBTRVFfUk9PVDsKICAgIG15ICRycGFyZW50ICA9IHsKICAgICAgICBfc2Vxbm8gICAgICAgICAgID0+ICRzZXFfcm9vdCwKICAgICAgICBfY2lfb3BlbiAgICAgICAgID0+IDAsCiAgICAgICAgX2NpX29wZW5fbmV4dCAgICA9PiAwLAogICAgICAgIF9jaV9jbG9zZSAgICAgICAgPT4gMCwKICAgICAgICBfY2lfY2xvc2VfbmV4dCAgID0+IDAsCiAgICAgICAgX2NvbnRhaW5lcl90eXBlICA9PiAnQmxvY2snLAogICAgICAgIF9jaV9uZXh0X25leHQgICAgPT4gJGNpX25leHRfbmV4dCwKICAgICAgICBfY29tbWFfY291bnQgICAgID0+IDAsCiAgICAgICAgX3NlbWljb2xvbl9jb3VudCA9PiAwLAogICAgICAgIF9LYyAgICAgICAgICAgICAgPT4gdW5kZWYsCiAgICB9OwoKICAgICMgRGVidWcgc3R1ZmYKICAgIG15IEBkZWJ1Z19saW5lczsKICAgIG15ICVzYXdfY2lfZGlmZjsKCiAgICBteSAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8gPSAkc2VsZi0+W19yYmxvY2tfdHlwZV9vZl9zZXFub19dOwogICAgbXkgJHJpc19zdWJfYmxvY2sgICAgICAgID0gJHNlbGYtPltfcmlzX3N1Yl9ibG9ja19dOwogICAgbXkgJHJpc19hc3ViX2Jsb2NrICAgICAgID0gJHNlbGYtPltfcmlzX2FzdWJfYmxvY2tfXTsKICAgIG15ICRLX29wZW5pbmdfY29udGFpbmVyICA9ICRzZWxmLT5bX0tfb3BlbmluZ19jb250YWluZXJfXTsKICAgIG15ICRLX2Nsb3NpbmdfY29udGFpbmVyICA9ICRzZWxmLT5bX0tfY2xvc2luZ19jb250YWluZXJfXTsKICAgIG15ICRLX2Nsb3NpbmdfdGVybmFyeSAgICA9ICRzZWxmLT5bX0tfY2xvc2luZ190ZXJuYXJ5X107CiAgICBteSAkcmxpbmVzICAgICAgICAgICAgICAgPSAkc2VsZi0+W19ybGluZXNfXTsKICAgIG15ICRydHlwZV9jb3VudF9ieV9zZXFubyA9ICRzZWxmLT5bX3J0eXBlX2NvdW50X2J5X3NlcW5vX107CgogICAgbXkgJHdhbnRfYnJlYWtfYmVmb3JlX2NvbW1hID0gJHdhbnRfYnJlYWtfYmVmb3JleycsJ307CgogICAgbXkgJG1hcF9ibG9ja19mb2xsb3dzID0gc3ViIHsKCiAgICAgICAgIyByZXR1cm4gdHJ1ZSBpZiBhIHNvcnQvbWFwL2V0YyBibG9jayBmb2xsb3dzIHRoZSBjbG9zaW5nIGJyYWNlCiAgICAgICAgIyBvZiBjb250YWluZXIgJHNlcW5vCiAgICAgICAgbXkgKCRzZXFubykgPSBAXzsKICAgICAgICBteSAkS2MgPSAkS19jbG9zaW5nX2NvbnRhaW5lci0+eyRzZXFub307CiAgICAgICAgcmV0dXJuIHVubGVzcyBkZWZpbmVkKCRLYyk7CgogICAgICAgICMgU2tpcCBwYXN0IGtleXdvcmQKICAgICAgICBteSAkS2NuID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLYyk7CiAgICAgICAgcmV0dXJuIHVubGVzcyBkZWZpbmVkKCRLY24pOwogICAgICAgIG15ICRzZXFub19uID0gJHJMTC0+WyRLY25dLT5bX1RZUEVfU0VRVUVOQ0VfXTsKICAgICAgICByZXR1cm4gaWYgKCRzZXFub19uKTsKCiAgICAgICAgIyBMb29rIGZvciBvcGVuaW5nIGJsb2NrIGJyYWNlCiAgICAgICAgbXkgJEtubiA9ICRzZWxmLT5LX25leHRfY29kZSgkS2NuKTsKICAgICAgICByZXR1cm4gdW5sZXNzIGRlZmluZWQoJEtubik7CiAgICAgICAgbXkgJHNlcW5vX25uID0gJHJMTC0+WyRLbm5dLT5bX1RZUEVfU0VRVUVOQ0VfXTsKICAgICAgICByZXR1cm4gdW5sZXNzICgkc2Vxbm9fbm4pOwogICAgICAgIG15ICRLX25ubyA9ICRLX29wZW5pbmdfY29udGFpbmVyLT57JHNlcW5vX25ufTsKICAgICAgICByZXR1cm4gdW5sZXNzICggJEtfbm5vICYmICRLX25ubyA9PSAkS25uICk7CiAgICAgICAgbXkgJGJsb2NrX3R5cGUgPSAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8tPnskc2Vxbm9fbm59OwoKICAgICAgICBpZiAoJGJsb2NrX3R5cGUpIHsKICAgICAgICAgICAgcmV0dXJuICRpc19ibG9ja193aXRoX2NpeyRibG9ja190eXBlfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfTsgIyMgZW5kICRtYXBfYmxvY2tfZm9sbG93cyA9IHN1YgoKICAgIG15ICRyZWRvX3ByZWNlZGluZ19jb21tZW50X2NpID0gc3ViIHsKCiAgICAgICAgIyBXZSBuZWVkIHRvIHJlc2V0IHRoZSBjaSBvZiB0aGUgcHJldmlvdXMgY29tbWVudChzKQogICAgICAgIG15ICggJEssICRjaSApID0gQF87CiAgICAgICAgbXkgJEttID0gJHNlbGYtPktfcHJldmlvdXNfY29kZSgkSyk7CiAgICAgICAgcmV0dXJuIGlmICggIWRlZmluZWQoJEttKSApOwogICAgICAgIGZvcmVhY2ggbXkgJEt0ICggJEttICsgMSAuLiAkSyAtIDEgKSB7CiAgICAgICAgICAgIGlmICggJHJMTC0+WyRLdF0tPltfVFlQRV9dIGVxICcjJyApIHsKICAgICAgICAgICAgICAgICRyTEwtPlskS3RdLT5bX0NJX0xFVkVMX10gPSAkY2k7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfTsgIyMgZW5kICRyZWRvX3ByZWNlZGluZ19jb21tZW50X2NpID0gc3ViCgogICAgIyBEZWZpbml0aW9ucyBvZiB0aGUgc2VxdWVuY2Ugb2YgY2lfdmFsdWVzIGJlaW5nIG1haW50YWluZWQ6CiAgICAjICRjaV9sYXN0ICAgICAgPSB0aGUgY2kgdmFsdWUgb2YgdGhlIHByZXZpb3VzIG5vbi1ibGFuaywgbm9uLWNvbW1lbnQgdG9rZW4KICAgICMgJGNpX3RoaXMgICAgICA9IHRoZSBjaSB2YWx1ZSB0byBiZSBzdG9yZWQgZm9yIHRoaXMgdG9rZW4gYXQgaW5kZXggJEtLCiAgICAjICRjaV9uZXh0ICAgICAgPSB0aGUgbm9ybWFsIGNpIGZvciB0aGUgbmV4dCB0b2tlbiwgc2V0IGJ5IHRoZSBwcmV2aW91cyB0b2sKICAgICMgJGNpX25leHRfbmV4dCA9IHRoZSBub3JtYWwgbmV4dCB2YWx1ZSBvZiAkY2lfbmV4dCBpbiB0aGlzIGNvbnRhaW5lcgoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBNYWluIGxvb3Agb3ZlciBhbGwgdG9rZW5zCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIG15ICRLSyA9IC0xOwogICAgZm9yZWFjaCBteSAkcnRva2VuX0sgKCBAeyRyTEx9ICkgewoKICAgICAgICAkS0srKzsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgU2VjdGlvbiAxLiBCbGFua3MKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaWYgKCAoICR0eXBlID0gJHJ0b2tlbl9LLT5bX1RZUEVfXSApIGVxICdiJyApIHsKCiAgICAgICAgICAgICRydG9rZW5fSy0+W19DSV9MRVZFTF9dID0gJGNpX25leHQ7CgogICAgICAgICAgICAjICduZXh0JyB0byBhdm9pZCBzYXZpbmcgbGFzdF8gdmFsdWVzIGZvciBibGFua3MgYW5kIGNvbW1hcwogICAgICAgICAgICBuZXh0OwogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBTZWN0aW9uIDIuIENvbW1lbnRzCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaWYgKCAkdHlwZSBlcSAnIycgKSB7CgogICAgICAgICAgICBteSAkY2lfdGhpcyA9ICRjaV9uZXh0OwoKICAgICAgICAgICAgIyBJZiBhdCAnIycgaW4gdGVybmFyeSBiZWZvcmUgYSA/IG9yIDosIHVzZSB0aGF0IGxldmVsIHRvIG1ha2UKICAgICAgICAgICAgIyB0aGUgY29tbWVudCBsaW5lIHVwIHdpdGggdGhlIG5leHQgPyBvciA6IGxpbmUuICAoc2VlIGMyMDIvdDA1MikKICAgICAgICAgICAgIyBpLmUuIGlmIGEgbmVzdGVkID8gZm9sbG93cywgd2UgaW5jcmVhc2UgdGhlICcjJyBsZXZlbCBieSAxLCBhbmQKICAgICAgICAgICAgIyBpZiBhIG5lc3RlZCA6IGZvbGxvd3MsIHdlIGRlY3JlYXNlIHRoZSAnIycgbGV2ZWwgYnkgMS4KICAgICAgICAgICAgIyBUaGlzIGlzIHRoZSBvbmx5IHBsYWNlIHdoZXJlIHRoaXMgc3ViIGNoYW5nZXMgYSBfTEVWRUxfIHZhbHVlLgogICAgICAgICAgICBteSAkS247CiAgICAgICAgICAgIG15ICRwYXJlbnRfY29udGFpbmVyX3R5cGUgPSAkcnBhcmVudC0+e19jb250YWluZXJfdHlwZX07CiAgICAgICAgICAgIGlmICggJHBhcmVudF9jb250YWluZXJfdHlwZSBlcSAnVGVybmFyeScgKSB7CiAgICAgICAgICAgICAgICAkS24gPSAkc2VsZi0+S19uZXh0X2NvZGUoJEtLKTsKICAgICAgICAgICAgICAgIGlmICgkS24pIHsKICAgICAgICAgICAgICAgICAgICBteSAkdHlwZV9rbiA9ICRyTEwtPlskS25dLT5bX1RZUEVfXTsKICAgICAgICAgICAgICAgICAgICBpZiAoICRpc190ZXJuYXJ5eyR0eXBlX2tufSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHJMTC0+WyRLS10tPltfTEVWRUxfXSA9ICRyTEwtPlskS25dLT5bX0xFVkVMX107CgogICAgICAgICAgICAgICAgICAgICAgICAjIGFuZCB1c2UgdGhlIGNpIG9mIGEgdGVybWluYXRpbmcgJzonCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEtuID09ICRycGFyZW50LT57X0tjfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjaV90aGlzID0gJHJwYXJlbnQtPntfY2lfY2xvc2V9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFVuZG8gY2kgZm9yIGEgYmxvY2sgY29tbWVudCBmb2xsb3dlZCBieSBhIGNsb3NpbmcgdG9rZW4gb3IgLCBvciA7CiAgICAgICAgICAgICMgcHJvdmlkZWQgdGhhdCB0aGUgcGFyZW50IGNvbnRhaW5lcjoKICAgICAgICAgICAgIyAtIGVuZHMgd2l0aG91dCBjaSwgb3IKICAgICAgICAgICAgIyAtIHN0YXJ0cyBjaT0wIGFuZCBpcyBhIGNvbW1hIGxpc3Qgb3IgdGhpcyBmb2xsb3dzIGEgY2xvc2luZyB0eXBlCiAgICAgICAgICAgICMgLSBoYXMgYSBsZXZlbCBqdW1wCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRjaV90aGlzCiAgICAgICAgICAgICAgICAmJiAoCiAgICAgICAgICAgICAgICAgICAgISRycGFyZW50LT57X2NpX2Nsb3NlfQogICAgICAgICAgICAgICAgICAgIHx8ICgKICAgICAgICAgICAgICAgICAgICAgICAgISRycGFyZW50LT57X2NpX29wZW5fbmV4dH0KICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCAoICRycGFyZW50LT57X2NvbW1hX2NvdW50fSB8fCAkbGFzdF90eXBlIGVxICcsJyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAkaXNfY2xvc2luZ190eXBleyRsYXN0X3R5cGV9ICkKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAjIEJlIHN1cmUgdGhpcyBpcyBhIGJsb2NrIGNvbW1lbnQKICAgICAgICAgICAgICAgIG15ICRseCAgICAgICA9ICRydG9rZW5fSy0+W19MSU5FX0lOREVYX107CiAgICAgICAgICAgICAgICBteSAkcktfcmFuZ2UgPSAkcmxpbmVzLT5bJGx4XS0+e19yS19yYW5nZX07CiAgICAgICAgICAgICAgICBteSAkS2ZpcnN0OwogICAgICAgICAgICAgICAgaWYgKCRyS19yYW5nZSkgeyAkS2ZpcnN0ID0gJHJLX3JhbmdlLT5bMF0gfQogICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRLZmlyc3QpICYmICRLZmlyc3QgPT0gJEtLICkgewoKICAgICAgICAgICAgICAgICAgICAjIExvb2sgZm9yIHRyYWlsaW5nIGNsb3NpbmcgdG9rZW4KICAgICAgICAgICAgICAgICAgICAjICAgIFsgYW5kIHBvc3NpYmx5ICcsJyBvciAnOycgXQogICAgICAgICAgICAgICAgICAgICRLbiA9ICRzZWxmLT5LX25leHRfY29kZSgkS0spIGlmICggISRLbiApOwogICAgICAgICAgICAgICAgICAgIG15ICRLYyA9ICRycGFyZW50LT57X0tjfTsKICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICRLbgogICAgICAgICAgICAgICAgICAgICAgICAmJiAkS2MKICAgICAgICAgICAgICAgICAgICAgICAgJiYgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEtuID09ICRLYwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb25seSBsb29rIGZvciBjb21tYSBpZiAtd2JiPScsJyBpcyBzZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdG8gbWluaW1pemUgY2hhbmdlcyB0byBleGlzdGluZyBmb3JtYXR0aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoICAgJHJMTC0+WyRLbl0tPltfVFlQRV9dIGVxICcsJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICR3YW50X2JyZWFrX2JlZm9yZV9jb21tYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRwYXJlbnRfY29udGFpbmVyX3R5cGUgZXEgJ0xpc3QnICkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRvIG5vdCBsb29rIGFoZWFkIGZvciBhIGJhcmUgJzsnIGJlY2F1c2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaXQgY2hhbmdlcyBvbGQgZm9ybWF0dGluZyB3aXRoIGxpdHRsZSBiZW5lZml0LgojIyAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKCAgICRyTEwtPlskS25dLT5bX1RZUEVfXSBlcSAnOycKIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRwYXJlbnRfY29udGFpbmVyX3R5cGUgZXEgJ0Jsb2NrJyApCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIEJlIHN1cmUgY29udGFpbmVyIGhhcyBhIGxldmVsIGp1bXAKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGxldmVsX0tLID0gJHJMTC0+WyRLS10tPltfTEVWRUxfXTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGxldmVsX0tjID0gJHJMTC0+WyRLY10tPltfTEVWRUxfXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgQW5kIGJlIHN1cmUgdGhpcyBpcyBub3QgYSBoYW5naW5nIHNpZGUgY29tbWVudAogICAgICAgICAgICAgICAgICAgICAgICBteSAkQ09ERV90eXBlID0gJHJsaW5lcy0+WyRseF0tPntfY29kZV90eXBlfTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGlzX0hTQyAgICA9ICRDT0RFX3R5cGUgJiYgJENPREVfdHlwZSBlcSAnSFNDJzsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJGxldmVsX0tjIDwgJGxldmVsX0tLICYmICEkaXNfSFNDICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNpX3RoaXMgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAkY2lfbmV4dCA9ICRjaV90aGlzOwogICAgICAgICAgICAkcnRva2VuX0stPltfQ0lfTEVWRUxfXSA9ICRjaV90aGlzOwoKICAgICAgICAgICAgIyAnbmV4dCcgdG8gYXZvaWQgc2F2aW5nIGxhc3RfIHZhbHVlcyBmb3IgYmxhbmtzIGFuZCBjb21tYXMKICAgICAgICAgICAgbmV4dDsKICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIFNlY3Rpb24gMy4gQ29udGludWluZyB3aXRoIG5vbi1ibGFuayBhbmQgbm9uLWNvbW1lbnQgdG9rZW5zCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAkdG9rZW4gPSAkcnRva2VuX0stPltfVE9LRU5fXTsKCiAgICAgICAgIyBTZXQgY2kgdmFsdWVzIGFwcHJvcHJpYXRlIGZvciBtb3N0IHRva2VuczoKICAgICAgICBteSAkY2lfdGhpcyA9ICRjaV9uZXh0OwogICAgICAgICRjaV9uZXh0ID0gJGNpX25leHRfbmV4dDsKCiAgICAgICAgIyBOb3cgY2hhbmdlIHRoZXNlIGNpIHZhbHVlcyBhcyBuZWNlc3NhcnkgZm9yIHNwZWNpYWwgY2FzZXMuLi4KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIFNlY3Rpb24gNC4gQ29udGFpbmVyIHRva2VucwogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaWYgKCAkcnRva2VuX0stPltfVFlQRV9TRVFVRU5DRV9dICkgewoKICAgICAgICAgICAgbXkgJHNlcW5vID0gJHJ0b2tlbl9LLT5bX1RZUEVfU0VRVUVOQ0VfXTsKCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgU2VjdGlvbiA0LjEgT3BlbmluZyBjb250YWluZXIgdG9rZW5zCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgIGlmICggJGlzX29wZW5pbmdfc2VxdWVuY2VfdG9rZW57JHRva2VufSApIHsKCiAgICAgICAgICAgICAgICBteSAkbGV2ZWwgPSAkcnRva2VuX0stPltfTEVWRUxfXTsKCiAgICAgICAgICAgICAgICAjIERlZmF1bHQgY2kgdmFsdWVzIGZvciB0aGUgY2xvc2luZyB0b2tlbiwgdG8gYmUgbW9kaWZpZWQKICAgICAgICAgICAgICAgICMgYXMgbmVjZXNzYXJ5OgogICAgICAgICAgICAgICAgbXkgJGNpX2Nsb3NlICAgICAgPSAkY2lfbmV4dDsKICAgICAgICAgICAgICAgIG15ICRjaV9jbG9zZV9uZXh0ID0gJGNpX25leHRfbmV4dDsKCiAgICAgICAgICAgICAgICBteSAkS2MgPQogICAgICAgICAgICAgICAgICAgICR0eXBlIGVxICc/JwogICAgICAgICAgICAgICAgICA/ICRLX2Nsb3NpbmdfdGVybmFyeS0+eyRzZXFub30KICAgICAgICAgICAgICAgICAgOiAkS19jbG9zaW5nX2NvbnRhaW5lci0+eyRzZXFub307CgogICAgICAgICAgICAgICAgIyAgJEtuICA9ICRzZWxmLT5LX25leHRfbm9uYmxhbmsoJEtLKTsKICAgICAgICAgICAgICAgIG15ICRLbjsKICAgICAgICAgICAgICAgIGlmICggJEtLIDwgJEtsaW1pdCApIHsKICAgICAgICAgICAgICAgICAgICAkS24gPSAkS0sgKyAxOwogICAgICAgICAgICAgICAgICAgIGlmICggJHJMTC0+WyRLbl0tPltfVFlQRV9dIGVxICdiJyAmJiAkS24gPCAkS2xpbWl0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkS24gKz0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyAgJEtjbiA9ICRzZWxmLT5LX25leHRfY29kZSgkS2MpOwogICAgICAgICAgICAgICAgbXkgJEtjbjsKICAgICAgICAgICAgICAgIGlmICggJEtjICYmICRLYyA8ICRLbGltaXQgKSB7CiAgICAgICAgICAgICAgICAgICAgJEtjbiA9ICRLYyArIDE7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkckxMLT5bJEtjbl0tPltfVFlQRV9dIGVxICdiJyAmJiAkS2NuIDwgJEtsaW1pdCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEtjbiArPSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoICRyTEwtPlskS2NuXS0+W19UWVBFX10gZXEgJyMnICkgewogICAgICAgICAgICAgICAgICAgICAgICAkS2NuID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLY24pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBteSAkb3BlbmluZ19sZXZlbF9qdW1wID0KICAgICAgICAgICAgICAgICAgJEtuID8gJHJMTC0+WyRLbl0tPltfTEVWRUxfXSAtICRsZXZlbCA6IDA7CgogICAgICAgICAgICAgICAgIyBpbml0aWFsaXplIGNpX25leHRfbmV4dCB0byBpdHMgc3RhbmRhcmQgdmFsdWUKICAgICAgICAgICAgICAgICRjaV9uZXh0X25leHQgPSAxOwoKICAgICAgICAgICAgICAgICMgRGVmYXVsdDogY2kgb2YgZmlyc3QgaXRlbSBvZiBsaXN0IHdpdGggbGV2ZWwganVtcCBpcyBzYW1lIGFzCiAgICAgICAgICAgICAgICAjIGNpIG9mIGZpcnN0IGl0ZW0gb2YgY29udGFpbmVyCiAgICAgICAgICAgICAgICBpZiAoICRvcGVuaW5nX2xldmVsX2p1bXAgPiAwICkgewogICAgICAgICAgICAgICAgICAgICRjaV9uZXh0ID0gJHJwYXJlbnQtPntfY2lfb3Blbl9uZXh0fTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBteSAoICRjb21tYV9jb3VudCwgJHNlbWljb2xvbl9jb3VudCApOwogICAgICAgICAgICAgICAgbXkgJHJ0eXBlX2NvdW50ID0gJHJ0eXBlX2NvdW50X2J5X3NlcW5vLT57JHNlcW5vfTsKICAgICAgICAgICAgICAgIGlmICgkcnR5cGVfY291bnQpIHsKICAgICAgICAgICAgICAgICAgICAkY29tbWFfY291bnQgICAgID0gJHJ0eXBlX2NvdW50LT57JywnfTsKICAgICAgICAgICAgICAgICAgICAkc2VtaWNvbG9uX2NvdW50ID0gJHJ0eXBlX2NvdW50LT57JzsnfTsKCiAgICAgICAgICAgICAgICAgICAgIyBEbyBub3QgaW5jbHVkZSBhIHRlcm1pbmFsIHNlbWljb2xvbiBpbiB0aGUgY291bnQgKHRoZQogICAgICAgICAgICAgICAgICAgICMgY29tbWFfY291bnQgaGFzIGFscmVhZHkgYmVlbiBjb3JyZWN0ZWQgYnkgcmVzcGFjZV90b2tlbnMpCiAgICAgICAgICAgICAgICAgICAgIyBXZSBvbmx5IG5lZWQgdG8ga25vdyBpZiB0aGVyZSBhcmUgc2VtaWNvbG9ucyBvciBub3QsIHNvCiAgICAgICAgICAgICAgICAgICAgIyBmb3Igc3BlZWQgd2UgY2FuIGp1c3QgZG8gdGhpcyB0ZXN0IGlmIHRoZSBjb3VudCBpcyAxLgogICAgICAgICAgICAgICAgICAgIGlmICggJHNlbWljb2xvbl9jb3VudCAmJiAkc2VtaWNvbG9uX2NvdW50ID09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRLY20gPSAkc2VsZi0+S19wcmV2aW91c19jb2RlKCRLYyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJHJMTC0+WyRLY21dLT5bX1RZUEVfXSBlcSAnOycgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VtaWNvbG9uX2NvdW50LS07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbXkgJGNvbnRhaW5lcl90eXBlOwoKICAgICAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAjIFNlY3Rpb24gNC4xLjEgQ29kZSBCbG9jawogICAgICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgIG15ICRibG9ja190eXBlID0gJHJibG9ja190eXBlX29mX3NlcW5vLT57JHNlcW5vfTsKICAgICAgICAgICAgICAgIGlmICgkYmxvY2tfdHlwZSkgewogICAgICAgICAgICAgICAgICAgICRjb250YWluZXJfdHlwZSA9ICdCbG9jayc7CgogICAgICAgICAgICAgICAgICAgICMgc2V0IGRlZmF1bHQgZGVwZW5kaW5nIG9uIGJsb2NrIHR5cGUKICAgICAgICAgICAgICAgICAgICAkY2lfY2xvc2UgPSAwOwoKICAgICAgICAgICAgICAgICAgICBteSAkbm9fc2VtaWNvbG9uID0KICAgICAgICAgICAgICAgICAgICAgICAgICRpc19ibG9ja193aXRob3V0X3NlbWljb2xvbnskYmxvY2tfdHlwZX0KICAgICAgICAgICAgICAgICAgICAgIHx8ICRyaXNfc3ViX2Jsb2NrLT57JHNlcW5vfQogICAgICAgICAgICAgICAgICAgICAgfHwgJGxhc3RfdHlwZSBlcSAnSic7CgogICAgICAgICAgICAgICAgICAgIGlmICggISRub19zZW1pY29sb24gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIE9wdGlvbmFsIGZpeCBmb3IgYmxvY2sgdHlwZXMgc29ydC9tYXAvZXRjIHdoaWNoIHVzZQogICAgICAgICAgICAgICAgICAgICAgICAjIHplcm8gY2kgYXQgdGVybWluYWwgYnJhY2UgaWYgcHJldmlvdXMga2V5d29yZCBoYWQKICAgICAgICAgICAgICAgICAgICAgICAgIyB6ZXJvIGNpLiAgVGhpcyB3aWxsIGNhdXNlIHNvcnQvbWFwL2dyZXAgZmlsdGVyIGJsb2NrcwogICAgICAgICAgICAgICAgICAgICAgICAjIHRvIGxpbmUgdXAuIE5vdGUgdGhhdCBzdWIgJ3VuZG9fY2knIHdpbGwgYWxzbyB0cnkgdG8KICAgICAgICAgICAgICAgICAgICAgICAgIyBkbyB0aGlzLCBzbyB0aGlzIGlzIG5vdCBhIGNyaXRpY2FsIG9wZXJhdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkaXNfYmxvY2tfd2l0aF9jaXskYmxvY2tfdHlwZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkcGFyZW50X3NlcW5vID0gJHJwYXJlbnQtPntfc2Vxbm99OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9ubHkgZG8gdGhpcyB3aXRoaW4gY29udGFpbmVycwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJlbnRfc2Vxbm8gIT0gU0VRX1JPT1QKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvbmx5IGluIGNvbnRhaW5lcnMgd2l0aG91dCAnLCcgYW5kICc7JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICEkcnBhcmVudC0+e19jb21tYV9jb3VudH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhJHJwYXJlbnQtPntfc2VtaWNvbG9uX2NvdW50fQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkbWFwX2Jsb2NrX2ZvbGxvd3MtPigkc2Vxbm8pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGNpX2xhc3QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNpX2Nsb3NlID0gJGNpX3RoaXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNpX2Nsb3NlID0gJGNpX3RoaXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMga2VlcCBjaSBpZiBjZXJ0YWluIG9wZXJhdG9ycyBmb2xsb3cgKGZpeCBjMjAyL3QwMjQpCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISRjaV9jbG9zZSAmJiAkS2NuICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHR5cGVfa2NuICA9ICRyTEwtPlskS2NuXS0+W19UWVBFX107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkdG9rZW5fa2NuID0gJHJMTC0+WyRLY25dLT5bX1RPS0VOX107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICAgJHR5cGVfa2NuID1+IC9eKFwufFwmXCZ8XHxcfCkkLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICR0eXBlX2tjbiBlcSAnaycgJiYgJGlzX2FuZF9vcnskdG9rZW5fa2NufSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNpX2Nsb3NlID0gJGNpX3RoaXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICggJHJwYXJlbnQtPntfY29udGFpbmVyX3R5cGV9IG5lICdUZXJuYXJ5JyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNpX3RoaXMgPSAwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkY2lfbmV4dCAgICAgICA9IDA7CiAgICAgICAgICAgICAgICAgICAgJGNpX2Nsb3NlX25leHQgPSAkY2lfY2xvc2U7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICMgU2VjdGlvbiA0LjEuMiBUZXJuYXJ5CiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgZWxzaWYgKCAkdHlwZSBlcSAnPycgKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbnRhaW5lcl90eXBlID0gJ1Rlcm5hcnknOwogICAgICAgICAgICAgICAgICAgIGlmICggJHJwYXJlbnQtPntfY29udGFpbmVyX3R5cGV9IGVxICdMaXN0JwogICAgICAgICAgICAgICAgICAgICAgICAmJiAhJHJwYXJlbnQtPntfY2lfb3Blbl9uZXh0fSApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkY2lfdGhpcyAgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAkY2lfY2xvc2UgPSAwOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyByZWRvIGNpIG9mIGFueSBwcmVjZWRpbmcgY29tbWVudHMgaWYgbmVjZXNzYXJ5CiAgICAgICAgICAgICAgICAgICAgIyBhdCBhbiBvdXRlcm1vc3QgPyAod2hpY2ggaGFzIG5vIGxldmVsIGp1bXApCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJG9wZW5pbmdfbGV2ZWxfanVtcCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHJlZG9fcHJlY2VkaW5nX2NvbW1lbnRfY2ktPiggJEtLLCAkY2lfdGhpcyApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgIyBTZWN0aW9uIDQuMS4zIExvZ2ljYWwgb3IgTGlzdD8KICAgICAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBteSAkaXNfbG9naWNhbCA9ICRpc19jb250YWluZXJfbGFiZWxfdHlwZV9mb3JfY2l7JGxhc3RfdHlwZX0KICAgICAgICAgICAgICAgICAgICAgICYmICRpc19sb2dpY2FsX2NvbnRhaW5lcl9mb3JfY2l7JGxhc3RfdG9rZW59CgogICAgICAgICAgICAgICAgICAgICAgIyBQYXJ0IDEgb2Ygb3B0aW9uYWwgcGF0Y2ggdG8gZ2V0IGFncmVlbWVudCB3aXRoIHByZXZpb3VzCiAgICAgICAgICAgICAgICAgICAgICAjIGNpIFRoaXMgbWFrZXMgYWxtb3N0IG5vIGRpZmZlcmVuY2UgaW4gYSB0eXBpY2FsIHByb2dyYW0KICAgICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSB3ZSB3aWxsIHNlbGRvbSBicmVhayB3aXRoaW4gYW4gYXJyYXkgaW5kZXguCiAgICAgICAgICAgICAgICAgICAgICB8fCAkdHlwZSBlcSAnWycgJiYgU0VUX0NJX09QVElPTl8wOwoKICAgICAgICAgICAgICAgICAgICBpZiAoICEkaXNfbG9naWNhbCAmJiAkdG9rZW4gZXEgJygnICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyAnZm9yZWFjaCcgYW5kICdmb3InIHBhcmVuIGNvbnRlbnRzIGFyZSB0cmVhdGVkIGFzCiAgICAgICAgICAgICAgICAgICAgICAgICMgbG9naWNhbCBleGNlcHQgZm9yIEMtc3R5bGUgJ2ZvcicKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkbGFzdF90eXBlIGVxICdrJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpc19sb2dpY2FsIHx8PSAkbGFzdF90b2tlbiBlcSAnZm9yZWFjaCc7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDLXN0eWxlICdmb3InIGNvbnRhaW5lciB3aWxsIGJlIHR5cGUgJ0xpc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRsYXN0X3Rva2VuIGVxICdmb3InICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpc19sb2dpY2FsID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoICRydHlwZV9jb3VudCAmJiAkcnR5cGVfY291bnQtPnsnZid9ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgQ2hlY2sgZm9yICdmb3InIGFuZCAnZm9yZWFjaCcgbG9vcHMgd2l0aCBpdGVyYXRvcnMKICAgICAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkbGFzdF90eXBlIGVxICdpJyAmJiBkZWZpbmVkKCRLY24pICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHNlcW5vX2tjbiA9ICRyTEwtPlskS2NuXS0+W19UWVBFX1NFUVVFTkNFX107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkdHlwZV9rY24gID0gJHJMTC0+WyRLY25dLT5bX1RPS0VOX107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRzZXFub19rY24gJiYgJHR5cGVfa2NuIGVxICd7JyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkYmxvY2tfdHlwZV9rY24gPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJibG9ja190eXBlX29mX3NlcW5vLT57JHNlcW5vX2tjbn07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlzX2xvZ2ljYWwgfHw9ICRibG9ja190eXBlX2tjbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCAkYmxvY2tfdHlwZV9rY24gZXEgJ2ZvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgJGJsb2NrX3R5cGVfa2NuIGVxICdmb3JlYWNoJyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgU2VhcmNoIGJhY2t3YXJkcyBmb3IgJ2ZvcicvJ2ZvcmVhY2gnIHdpdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaXRlcmF0b3IgaW4gY2FzZSB1c2VyIGlzIHJ1bm5pbmcgZnJvbSBhbiBlZGl0b3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYW5kIGRpZCBub3QgaW5jbHVkZSB0aGUgYmxvY2sgKGZpeGVzIGNhc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgJ3hjaS5pbicpLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJEttID0gJHNlbGYtPktfcHJldmlvdXNfY29kZSgkS0spOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoIDAgLi4gMiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkS20gPSAkc2VsZi0+S19wcmV2aW91c19jb2RlKCRLbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCB1bmxlc3MgZGVmaW5lZCgkS20pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgdW5sZXNzICggJHJMTC0+WyRLbV0tPltfVFlQRV9dIGVxICdrJyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICR0b2sgPSAkckxMLT5bJEttXS0+W19UT0tFTl9dOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgaWYgKCAkdG9rIGVxICdteScgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXNfbG9naWNhbCB8fD0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggJHRvayBlcSAnZm9yJyB8fCAkdG9rIGVxICdmb3JlYWNoJyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkbGFzdF90b2tlbiBlcSAnKCcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXNfbG9naWNhbCB8fD0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJwYXJlbnQtPntfY29udGFpbmVyX3R5cGV9IGVxICdMb2dpY2FsJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZG9lcyBub3QgbG9vayBsaWtlIGEgbG9naWNhbCBwYXJlbgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgIyBTZWN0aW9uIDQuMS4zLjEgTG9naWNhbAogICAgICAgICAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICBpZiAoJGlzX2xvZ2ljYWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRhaW5lcl90eXBlID0gJ0xvZ2ljYWwnOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBQYXNzIGNpIHRob3VnaCBhbiAnIScKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkbGFzdF90eXBlIGVxICchJyApIHsgJGNpX3RoaXMgPSAkY2lfbGFzdCB9CgogICAgICAgICAgICAgICAgICAgICAgICAkY2lfbmV4dF9uZXh0ICA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICRjaV9jbG9zZV9uZXh0ID0gJGNpX3RoaXM7CgogICAgICAgICAgICAgICAgICAgICAgICAjIFBhcnQgMiBvZiBvcHRpb25hbCBwYXRjaCB0byBnZXQgYWdyZWVtZW50IHdpdGgKICAgICAgICAgICAgICAgICAgICAgICAgIyBwcmV2aW91cyBjaQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICR0eXBlIGVxICdbJyAmJiBTRVRfQ0lfT1BUSU9OXzAgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNpX25leHRfbmV4dCA9ICRjaV90aGlzOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVW5kbyBjaSBhdCBhIGNoYWluIG9mIGluZGV4ZXMgb3IgaGFzaCBrZXlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRsYXN0X3R5cGUgZXEgJ30nICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjaV90aGlzID0gJGNpX2xhc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkb3BlbmluZ19sZXZlbF9qdW1wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2lfbmV4dCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAjIFNlY3Rpb24gNC4xLjMuMiBMaXN0CiAgICAgICAgICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBIZXJlICdMaXN0JyBpcyBhIGNhdGNoYWxsIGZvciBub25lIG9mIHRoZSBhYm92ZSB0eXBlcwogICAgICAgICAgICAgICAgICAgICAgICAkY29udGFpbmVyX3R5cGUgPSAnTGlzdCc7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGxpc3RzIGluIGJsb2NrcyAuLi4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkcnBhcmVudC0+e19jb250YWluZXJfdHlwZX0gZXEgJ0Jsb2NrJyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHVuZG8gY2kgaWYgYW5vdGhlciBjbG9zaW5nIHRva2VuIGZvbGxvd3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCgkS2NuKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkY2xvc2luZ19sZXZlbF9qdW1wID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyTEwtPlskS2NuXS0+W19MRVZFTF9dIC0gJGxldmVsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJGNsb3NpbmdfbGV2ZWxfanVtcCA8IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjaV9jbG9zZSA9ICRjaV90aGlzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBsaXN0cyBub3QgaW4gYmxvY2tzIC4uLgogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEkcnBhcmVudC0+e19jb21tYV9jb3VudH0gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjaV9jbG9zZSA9ICRjaV90aGlzOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHVuZG8gY2kgYXQgYmluYXJ5IG9wIGFmdGVyIHJpZ2h0IHBhcmVuIGlmIG5vCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjb21tYXMgaW4gY29udGFpbmVyOyBmaXhlcyB0MDI3LCB0MDI4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAgICRjaV9jbG9zZV9uZXh0ICE9ICRjaV9jbG9zZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBkZWZpbmVkKCRLY24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRiaW5fb3BfdHlwZXsgJHJMTC0+WyRLY25dLT5bX1RZUEVfXSB9ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjaV9jbG9zZV9uZXh0ID0gJGNpX2Nsb3NlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRycGFyZW50LT57X2NvbnRhaW5lcl90eXBlfSBlcSAnVGVybmFyeScgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNpX25leHQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAjIFVuZG8gY2kgYXQgYSBjaGFpbiBvZiBpbmRleGVzIG9yIGhhc2gga2V5cwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICR0b2tlbiBuZSAnKCcgJiYgJGxhc3RfdHlwZSBlcSAnfScgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2lfdGhpcyA9ICRjaV9jbG9zZSA9ICRjaV9sYXN0OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICMgU2VjdGlvbiA0LjEuNCBTdG9yZSBvcGVuaW5nIHRva2VuIGluZm8KICAgICAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgICAgICAgICAjIE1vc3QgY2xvc2luZyB0b2tlbnMgc2hvdWxkIGFsaWduIHdpdGggdGhlaXIgb3BlbmluZyB0b2tlbnMuCiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgZXEgJ3snCiAgICAgICAgICAgICAgICAgICAgJiYgJHRva2VuIG5lICcoJwogICAgICAgICAgICAgICAgICAgICYmICRpc19saXN0X2VuZF90eXBleyRsYXN0X3R5cGV9CgogICAgICAgICAgICAgICAgICAgICMgYXZvaWQgYXN1YiBibG9ja3MsIHdoaWNoIG1heSBoYXZlIHByb3RvdHlwZXMgZW5kaW5nIGluICd9JwogICAgICAgICAgICAgICAgICAgICYmICEkcmlzX2FzdWJfYmxvY2stPnskc2Vxbm99CiAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkY2lfY2xvc2UgPSAkY2lfdGhpczsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIENsb3NpbmcgY2kgbXVzdCBuZXZlciBiZSBsZXNzIHRoYW4gb3BlbmluZwogICAgICAgICAgICAgICAgaWYgKCAkY2lfY2xvc2UgPCAkY2lfdGhpcyApIHsgJGNpX2Nsb3NlID0gJGNpX3RoaXMgfQoKICAgICAgICAgICAgICAgIHB1c2ggQHskcnN0YWNrfSwgJHJwYXJlbnQ7CiAgICAgICAgICAgICAgICAkcnBhcmVudCA9IHsKICAgICAgICAgICAgICAgICAgICBfc2Vxbm8gICAgICAgICAgID0+ICRzZXFubywKICAgICAgICAgICAgICAgICAgICBfY29udGFpbmVyX3R5cGUgID0+ICRjb250YWluZXJfdHlwZSwKICAgICAgICAgICAgICAgICAgICBfY2lfbmV4dF9uZXh0ICAgID0+ICRjaV9uZXh0X25leHQsCiAgICAgICAgICAgICAgICAgICAgX2NpX29wZW4gICAgICAgICA9PiAkY2lfdGhpcywKICAgICAgICAgICAgICAgICAgICBfY2lfb3Blbl9uZXh0ICAgID0+ICRjaV9uZXh0LAogICAgICAgICAgICAgICAgICAgIF9jaV9jbG9zZSAgICAgICAgPT4gJGNpX2Nsb3NlLAogICAgICAgICAgICAgICAgICAgIF9jaV9jbG9zZV9uZXh0ICAgPT4gJGNpX2Nsb3NlX25leHQsCiAgICAgICAgICAgICAgICAgICAgX2NvbW1hX2NvdW50ICAgICA9PiAkY29tbWFfY291bnQsCiAgICAgICAgICAgICAgICAgICAgX3NlbWljb2xvbl9jb3VudCA9PiAkc2VtaWNvbG9uX2NvdW50LAogICAgICAgICAgICAgICAgICAgIF9LYyAgICAgICAgICAgICAgPT4gJEtjLAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgIyBTZWN0aW9uIDQuMiBDbG9zaW5nIGNvbnRhaW5lciB0b2tlbnMKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgbXkgJHNlcW5vX3Rlc3QgPSAkcnBhcmVudC0+e19zZXFub307CiAgICAgICAgICAgICAgICBpZiAoICRzZXFub190ZXN0IG5lICRzZXFubyApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBTaG91bGRuJ3QgaGFwcGVuIGlmIHdlIGFyZSBwcm9jZXNzaW5nIGJhbGFuY2VkIHRleHQuCiAgICAgICAgICAgICAgICAgICAgIyAoVW5iYWxhbmNlZCB0ZXh0IHNob3VsZCBnbyBvdXQgdmVyYmF0aW0pCiAgICAgICAgICAgICAgICAgICAgREVWRUxfTU9ERQogICAgICAgICAgICAgICAgICAgICAgJiYgRmF1bHQoInN0YWNrIGVycm9yOiAkc2Vxbm9fdGVzdCAhPSAkc2Vxbm9cbiIpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgVXNlIGNpX3RoaXMsIGNpX25leHQgdmFsdWVzIHNldCBieSB0aGUgbWF0Y2hpbmcgb3BlbmluZyB0b2tlbjoKICAgICAgICAgICAgICAgICRjaV90aGlzID0gJHJwYXJlbnQtPntfY2lfY2xvc2V9OwogICAgICAgICAgICAgICAgJGNpX25leHQgPSAkcnBhcmVudC0+e19jaV9jbG9zZV9uZXh0fTsKICAgICAgICAgICAgICAgIG15ICRjaV9vcGVuX29sZCA9ICRycGFyZW50LT57X2NpX29wZW59OwoKICAgICAgICAgICAgICAgICMgVGhlbiBwb3AgdGhlIHN0YWNrIGFuZCB1c2UgdGhlIHBhcmVudCBjaV9uZXh0X25leHQgdmFsdWU6CiAgICAgICAgICAgICAgICBpZiAoIEB7JHJzdGFja30gKSB7CiAgICAgICAgICAgICAgICAgICAgJHJwYXJlbnQgICAgICA9IHBvcCBAeyRyc3RhY2t9OwogICAgICAgICAgICAgICAgICAgICRjaV9uZXh0X25leHQgPSAkcnBhcmVudC0+e19jaV9uZXh0X25leHR9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICMgU2hvdWxkbid0IGhhcHBlbiBpZiB3ZSBhcmUgcHJvY2Vzc2luZyBiYWxhbmNlZCB0ZXh0LgogICAgICAgICAgICAgICAgICAgIERFVkVMX01PREUgJiYgRmF1bHQoImVtcHR5IHN0YWNrIC0gc2hvdWxkbid0IGhhcHBlblxuIik7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBGaXg6IHVuZG8gY2kgYXQgYSBjbG9zaW5nIHRva2VuIGZvbGxvd2VkIGJ5IGEgY2xvc2luZyB0b2tlbi4KICAgICAgICAgICAgICAgICMgR29hbCBpcyB0byBrZWVwIGZvcm1hdHRpbmcgaW5kZXBlbmRlbnQgb2YgdGhlIGV4aXN0ZW5jZSBvZiBhCiAgICAgICAgICAgICAgICAjIHRyYWlsaW5nIGNvbW1hIG9yIHNlbWljb2xvbi4KICAgICAgICAgICAgICAgIGlmICggJGNpX3RoaXMgPiAwICYmICEkY2lfb3Blbl9vbGQgJiYgISRycGFyZW50LT57X2NpX2Nsb3NlfSApIHsKICAgICAgICAgICAgICAgICAgICBteSAkS2MgPSAkcnBhcmVudC0+e19LY307CiAgICAgICAgICAgICAgICAgICAgbXkgJEtuID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLSyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkS2MgJiYgJEtuICYmICRLYyA9PSAkS24gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjaV90aGlzID0gJGNpX25leHQgPSAwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgU2VjdGlvbiA1LiBTZW1pY29sb25zIGFuZCBMYWJlbHMKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBUaGUgbmV4dCB0b2tlbiBhZnRlciBhICc7JyBhbmQgbGFiZWwgKHR5cGUgJ0onKSBzdGFydHMgYSBuZXcgc3RtdAogICAgICAgICMgVGhlIGNpIGFmdGVyIGEgQy1zdHlsZSBmb3IgJzsnICh0eXBlICdmJykgaXMgaGFuZGxlZCBzaW1pbGFybHkuCiAgICAgICAgZWxzaWYgKCAkdHlwZSBlcSAnOycgfHwgJHR5cGUgZXEgJ0onIHx8ICR0eXBlIGVxICdmJyApIHsKICAgICAgICAgICAgJGNpX25leHQgPSAwOwogICAgICAgICAgICBpZiAoICRpc19jbG9zaW5nX3R5cGV7JGxhc3RfdHlwZX0gKSB7ICRjaV90aGlzID0gJGNpX2xhc3QgfQogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBTZWN0aW9uIDYuIEtleXdvcmRzCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBVbmRvIGNpIGFmdGVyIGEgZm9ybWF0IHN0YXRlbWVudAogICAgICAgIGVsc2lmICggJHR5cGUgZXEgJ2snICkgewogICAgICAgICAgICBpZiAoIHN1YnN0ciggJHRva2VuLCAwLCA2ICkgZXEgJ2Zvcm1hdCcgKSB7CiAgICAgICAgICAgICAgICAkY2lfbmV4dCA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIFNlY3Rpb24gNy4gQ29tbWFzCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgQSBjb21tYSBhbmQgdGhlIHN1YnNlcXVlbnQgaXRlbSBub3JtYWxseSBoYXZlIGNpIHVuZG9uZQogICAgICAgICMgdW5sZXNzIGNpIGhhcyBiZWVuIHNldCBhdCBhIGxvd2VyIGxldmVsCiAgICAgICAgZWxzaWYgKCAkdHlwZSBlcSAnLCcgKSB7CgogICAgICAgICAgICBpZiAoICRycGFyZW50LT57X2NvbnRhaW5lcl90eXBlfSBlcSAnTGlzdCcgKSB7CiAgICAgICAgICAgICAgICAkY2lfdGhpcyA9ICRjaV9uZXh0ID0gJHJwYXJlbnQtPntfY2lfb3Blbl9uZXh0fTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICMgbm90IGEgc3BlY2lhbCBjaSB0eXBlCiAgICAgICAgfQoKICAgICAgICAjIFNhdmUgZGVidWcgaW5mbyBpZiByZXF1ZXN0ZWQKICAgICAgICBERUJVR19TRVRfQ0kgJiYgZG8gewoKICAgICAgICAgICAgbXkgJHNlcW5vID0gJHJ0b2tlbl9LLT5bX1RZUEVfU0VRVUVOQ0VfXTsKICAgICAgICAgICAgbXkgJGxldmVsID0gJHJ0b2tlbl9LLT5bX0xFVkVMX107CiAgICAgICAgICAgIG15ICRjaSAgICA9ICRydG9rZW5fSy0+W19DSV9MRVZFTF9dOwogICAgICAgICAgICBpZiAoICRjaSA+IDEgKSB7ICRjaSA9IDEgfQoKICAgICAgICAgICAgbXkgJHRvayAgICAgID0gJHRva2VuOwogICAgICAgICAgICBteSAkbGFzdF90b2sgPSAkbGFzdF90b2tlbjsKICAgICAgICAgICAgJHRvayAgICAgID1+IHMvXHQvL2c7CiAgICAgICAgICAgICRsYXN0X3RvayA9fiBzL1x0Ly9nOwogICAgICAgICAgICAkdG9rID0gbGVuZ3RoKCR0b2spID4gMyA/IHN1YnN0ciggJHRvaywgMCwgOCApIDogJHRvazsKICAgICAgICAgICAgJGxhc3RfdG9rID0KICAgICAgICAgICAgICBsZW5ndGgoJGxhc3RfdG9rKSA+IDMgPyBzdWJzdHIoICRsYXN0X3RvaywgMCwgOCApIDogJGxhc3RfdG9rOwogICAgICAgICAgICAkdG9rICAgICAgPX4gcy9bIiddLy9nOwogICAgICAgICAgICAkbGFzdF90b2sgPX4gcy9bIiddLy9nOwogICAgICAgICAgICBteSAkYmxvY2tfdHlwZTsKICAgICAgICAgICAgJGJsb2NrX3R5cGUgPSAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8tPnskc2Vxbm99IGlmICgkc2Vxbm8pOwogICAgICAgICAgICAkYmxvY2tfdHlwZSA9IEVNUFRZX1NUUklORyB1bmxlc3MgKCRibG9ja190eXBlKTsKICAgICAgICAgICAgbXkgJHB0eXBlID0gJHJwYXJlbnQtPntfY29udGFpbmVyX3R5cGV9OwogICAgICAgICAgICBteSAkcG5hbWUgPSAkcHR5cGU7CgogICAgICAgICAgICBteSAkZXJyb3IgPQogICAgICAgICAgICAgICRjaV90aGlzID09ICRjaSA/IEVNUFRZX1NUUklORyA6ICR0eXBlIGVxICdiJyA/ICJlcnJvciIgOiAiRVJST1IiOwogICAgICAgICAgICBpZiAoJGVycm9yKSB7ICRzYXdfY2lfZGlmZnskS0t9ID0gMSB9CgogICAgICAgICAgICBteSAkbG5vID0gJHJ0b2tlbl9LLT5bX0xJTkVfSU5ERVhfXSArIDE7CiAgICAgICAgICAgICRkZWJ1Z19saW5lc1skS0tdID0gPDxFT007CiRsbm9cdCRjaVx0JGNpX3RoaXNcdCRjaV9uZXh0XHQkbGFzdF90eXBlXHQkbGFzdF90b2tcdCR0eXBlXHQkdG9rXHQkc2Vxbm9cdCRsZXZlbFx0JHBuYW1lXHQkYmxvY2tfdHlwZVx0JGVycm9yCkVPTQogICAgICAgIH07CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBTdG9yZSB0aGUgY2kgdmFsdWUgZm9yIHRoaXMgdG9rZW4KICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICRydG9rZW5fSy0+W19DSV9MRVZFTF9dID0gJGNpX3RoaXM7CgogICAgICAgICMgUmVtZW1iZXIgbGFzdCBub25ibGFuaywgbm9uLWNvbW1lbnQgdG9rZW4gaW5mbyBmb3IgdGhlIG5leHQgcGFzcwogICAgICAgICRjaV9sYXN0ICAgID0gJGNpX3RoaXM7CiAgICAgICAgJGxhc3RfdG9rZW4gPSAkdG9rZW47CiAgICAgICAgJGxhc3RfdHlwZSAgPSAkdHlwZTsKCiAgICB9ICAgICMjIEVuZCBtYWluIGxvb3Agb3ZlciB0b2tlbnMKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBQb3N0LWxvb3Agb3BlcmF0aW9uczoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgaWYgKERFQlVHX1NFVF9DSSkgewogICAgICAgIG15IEBvdXRwdXRfbGluZXM7CiAgICAgICAgZm9yZWFjaCBteSAkS2QgKCAwIC4uICRLbGltaXQgKSB7CiAgICAgICAgICAgIG15ICRsaW5lID0gJGRlYnVnX2xpbmVzWyRLZF07CiAgICAgICAgICAgIGlmICgkbGluZSkgewogICAgICAgICAgICAgICAgbXkgJEtwID0gJHNlbGYtPktfcHJldmlvdXNfY29kZSgkS2QpOwogICAgICAgICAgICAgICAgbXkgJEtuID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLZCk7CiAgICAgICAgICAgICAgICBpZiAoICAgREVCVUdfU0VUX0NJID4gMQogICAgICAgICAgICAgICAgICAgIHx8ICRLcCAmJiAkc2F3X2NpX2RpZmZ7JEtwfQogICAgICAgICAgICAgICAgICAgIHx8ICRzYXdfY2lfZGlmZnskS2R9CiAgICAgICAgICAgICAgICAgICAgfHwgJEtuICYmICRzYXdfY2lfZGlmZnskS259ICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBvdXRwdXRfbGluZXMsICRsaW5lOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChAb3V0cHV0X2xpbmVzKSB7CiAgICAgICAgICAgIHVuc2hpZnQgQG91dHB1dF9saW5lcywgPDxFT007Cmxub1x0Y2lcdGNpX3RoaXNcdGNpX25leHRcdGxhc3RfdHlwZVx0bGFzdF90b2tcdHR5cGVcdHRva1x0c2Vxbm9cdGxldmVsXHRwbmFtZVx0YmxvY2tfdHlwZVx0ZXJyb3I/CkVPTQogICAgICAgICAgICBmb3JlYWNoIG15ICRsaW5lIChAb3V0cHV0X2xpbmVzKSB7CiAgICAgICAgICAgICAgICBjaG9tcCAkbGluZTsKICAgICAgICAgICAgICAgIHByaW50IHsqU1RET1VUfSAkbGluZSwgIlxuIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBzZXRfY2kKCnN1YiBzZXRfQ09ERV90eXBlIHsKICAgIG15ICgkc2VsZikgPSBAXzsKCiAgICAjIEV4YW1pbmUgZWFjaCBsaW5lIG9mIGNvZGUgYW5kIHNldCBhIGZsYWcgJyRDT0RFX3R5cGUnIHRvIGRlc2NyaWJlIGl0LgogICAgIyBBbHNvIHJldHVybiBhIGxpc3Qgb2YgbGluZXMgd2l0aCBzaWRlIGNvbW1lbnRzLgoKICAgIG15ICRyTEwgICAgPSAkc2VsZi0+W19yTExfXTsKICAgIG15ICRybGluZXMgPSAkc2VsZi0+W19ybGluZXNfXTsKCiAgICBteSAkck9wdHNfZm9ybWF0X3NraXBwaW5nX2JlZ2luID0gJHJPcHRzLT57J2Zvcm1hdC1za2lwcGluZy1iZWdpbid9OwogICAgbXkgJHJPcHRzX2Zvcm1hdF9za2lwcGluZ19lbmQgICA9ICRyT3B0cy0+eydmb3JtYXQtc2tpcHBpbmctZW5kJ307CiAgICBteSAkck9wdHNfc3RhdGljX2Jsb2NrX2NvbW1lbnRfcHJlZml4ID0KICAgICAgJHJPcHRzLT57J3N0YXRpYy1ibG9jay1jb21tZW50LXByZWZpeCd9OwoKICAgICMgUmVtZW1iZXIgaW5kZXhlcyBvZiBsaW5lcyB3aXRoIHNpZGUgY29tbWVudHMKICAgIG15IEBpeF9zaWRlX2NvbW1lbnRzOwoKICAgIG15ICRJbl9mb3JtYXRfc2tpcHBpbmdfc2VjdGlvbiA9IDA7CiAgICBteSAkU2F3X1ZFUlNJT05faW5fdGhpc19maWxlICAgPSAwOwogICAgbXkgJGhhc19zaWRlX2NvbW1lbnQgICAgICAgICAgID0gMDsKICAgIG15ICRsYXN0X2xpbmVfaGFkX3NpZGVfY29tbWVudCA9IDA7CiAgICBteSAoICRLZmlyc3QsICRLbGFzdCApOwogICAgbXkgJENPREVfdHlwZTsKCiAgICAjIExvb3AgdG8gc2V0IENPREVfdHlwZQoKICAgICMgUG9zc2libGUgQ09ERV90eXBlcwogICAgIyAnVkInICA9IFZlcmJhdGltIC0gbGluZSBnb2VzIG91dCB2ZXJiYXRpbSAoYSBxdW90ZSkKICAgICMgJ0ZTJyAgPSBGb3JtYXQgU2tpcHBpbmcgLSBsaW5lIGdvZXMgb3V0IHZlcmJhdGltCiAgICAjICdCTCcgID0gQmxhbmsgTGluZQogICAgIyAnSFNDJyA9IEhhbmdpbmcgU2lkZSBDb21tZW50IC0gZml4IHRoaXMgaGFuZ2luZyBzaWRlIGNvbW1lbnQKICAgICMgJ1NCQ1gnPSBTdGF0aWMgQmxvY2sgQ29tbWVudCBXaXRob3V0IExlYWRpbmcgU3BhY2UKICAgICMgJ1NCQycgPSBTdGF0aWMgQmxvY2sgQ29tbWVudAogICAgIyAnQkMnICA9IEJsb2NrIENvbW1lbnQgLSBhbiBvcmRpbmFyeSBmdWxsIGxpbmUgY29tbWVudAogICAgIyAnSU8nICA9IEluZGVudCBPbmx5IC0gbGluZSBnb2VzIG91dCB1bmNoYW5nZWQgZXhjZXB0IGZvciBpbmRlbnRhdGlvbgogICAgIyAnTklOJyA9IE5vIEludGVybmFsIE5ld2xpbmVzIC0gbGluZSBkb2VzIG5vdCBnZXQgYnJva2VuCiAgICAjICdWRVInID0gVkVSU0lPTiBzdGF0ZW1lbnQKICAgICMgJycgICAgPSBvcmRpbmFyeSBsaW5lIG9mIGNvZGUgd2l0aCBubyByZXN0cmljdGlvbnMKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgTG9vcCBvdmVyIGFsbCBsaW5lcwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBteSAkaXhfbGluZSA9IC0xOwogICAgZm9yZWFjaCBteSAkbGluZV9vZl90b2tlbnMgKCBAeyRybGluZXN9ICkgewogICAgICAgICRpeF9saW5lKys7CiAgICAgICAgbXkgJGxpbmVfdHlwZSA9ICRsaW5lX29mX3Rva2Vucy0+e19saW5lX3R5cGV9OwoKICAgICAgICBteSAkbGFzdF9DT0RFX3R5cGUgPSAkQ09ERV90eXBlOwoKICAgICAgICAjIFNldCBkZWZhdWx0IHRvIGJlIG9yZGluYXJ5IGNvZGUKICAgICAgICAkQ09ERV90eXBlID0gRU1QVFlfU1RSSU5HOwoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgVGhpcyBpcyBvbmx5IGZvciBsaW5lcyBtYXJrZWQgJ0NPREUnCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpZiAoICRsaW5lX3R5cGUgbmUgJ0NPREUnICkgewogICAgICAgICAgICBuZXh0OwogICAgICAgIH0KCiAgICAgICAgbXkgJGlucHV0X2xpbmUgPSAkbGluZV9vZl90b2tlbnMtPntfbGluZV90ZXh0fTsKCiAgICAgICAgbXkgJEtsYXN0X3ByZXYgPSAkS2xhc3Q7CiAgICAgICAgKCAkS2ZpcnN0LCAkS2xhc3QgKSA9IEB7ICRsaW5lX29mX3Rva2Vucy0+e19yS19yYW5nZX0gfTsKICAgICAgICBteSAkam1heCA9IGRlZmluZWQoJEtmaXJzdCkgPyAkS2xhc3QgLSAkS2ZpcnN0IDogLTE7CgogICAgICAgIG15ICRpc19ibG9ja19jb21tZW50OwogICAgICAgIGlmICggJGptYXggPj0gMCAmJiAkckxMLT5bJEtsYXN0XS0+W19UWVBFX10gZXEgJyMnICkgewogICAgICAgICAgICBpZiAgICggJGptYXggPT0gMCApIHsgJGlzX2Jsb2NrX2NvbW1lbnQgPSAxOyB9CiAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgeyAkaGFzX3NpZGVfY29tbWVudCA9IDEgfQogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBXcml0ZSBsaW5lIHZlcmJhdGltIGlmIHdlIGFyZSBpbiBhIGZvcm1hdHRpbmcgc2tpcCBzZWN0aW9uCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaWYgKCRJbl9mb3JtYXRfc2tpcHBpbmdfc2VjdGlvbikgewoKICAgICAgICAgICAgIyBOb3RlOiBleHRyYSBzcGFjZSBhcHBlbmRlZCB0byBjb21tZW50IHNpbXBsaWZpZXMgcGF0dGVybiBtYXRjaGluZwogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkaXNfYmxvY2tfY29tbWVudAoKICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgZmFzdCBwcmUtY2hlY2sKICAgICAgICAgICAgICAgICYmICggc3Vic3RyKCAkckxMLT5bJEtmaXJzdF0tPltfVE9LRU5fXSwgMCwgNCApIGVxICcjPj4+JwogICAgICAgICAgICAgICAgICAgIHx8ICRyT3B0c19mb3JtYXRfc2tpcHBpbmdfZW5kICkKCiAgICAgICAgICAgICAgICAmJiAoICRyTEwtPlskS2ZpcnN0XS0+W19UT0tFTl9dIC4gU1BBQ0UgKSA9fgogICAgICAgICAgICAgICAgLyRmb3JtYXRfc2tpcHBpbmdfcGF0dGVybl9lbmQvCiAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkSW5fZm9ybWF0X3NraXBwaW5nX3NlY3Rpb24gPSAwOwogICAgICAgICAgICAgICAgbXkgJGlucHV0X2xpbmVfbm8gPSAkbGluZV9vZl90b2tlbnMtPntfbGluZV9udW1iZXJ9OwogICAgICAgICAgICAgICAgd3JpdGVfbG9nZmlsZV9lbnRyeSgKICAgICAgICAgICAgICAgICAgICAiTGluZSAkaW5wdXRfbGluZV9ubzogRXhpdGluZyBmb3JtYXQtc2tpcHBpbmcgc2VjdGlvblxuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAgICAgJGlzX2Jsb2NrX2NvbW1lbnQKCiAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIGZhc3QgcHJlLWNoZWNrCiAgICAgICAgICAgICAgICAmJiAoIHN1YnN0ciggJHJMTC0+WyRLZmlyc3RdLT5bX1RPS0VOX10sIDAsIDQgKSBlcSAnIzw8PCcKICAgICAgICAgICAgICAgICAgICB8fCAkck9wdHNfZm9ybWF0X3NraXBwaW5nX2JlZ2luICkKCiAgICAgICAgICAgICAgICAmJiAkck9wdHNfZm9ybWF0X3NraXBwaW5nCiAgICAgICAgICAgICAgICAmJiAoICRyTEwtPlskS2ZpcnN0XS0+W19UT0tFTl9dIC4gU1BBQ0UgKSA9fgogICAgICAgICAgICAgICAgLyRmb3JtYXRfc2tpcHBpbmdfcGF0dGVybl9iZWdpbi8KICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICMgd2FybiBvZiBkdXBsaWNhdGUgc3RhcnRpbmcgY29tbWVudCBsaW5lcywgZ2l0ICMxMTgKICAgICAgICAgICAgICAgIG15ICRpbnB1dF9saW5lX25vID0gJGxpbmVfb2ZfdG9rZW5zLT57X2xpbmVfbnVtYmVyfTsKICAgICAgICAgICAgICAgIHdhcm5pbmcoCiJBbHJlYWR5IGluIGZvcm1hdC1za2lwcGluZyBzZWN0aW9uIHdoaWNoIHN0YXJ0ZWQgYXQgbGluZSAkSW5fZm9ybWF0X3NraXBwaW5nX3NlY3Rpb25cbiIsCiAgICAgICAgICAgICAgICAgICAgJGlucHV0X2xpbmVfbm8KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAjIG5vdCBhdCBhIGZvcm1hdCBza2lwcGluZyBjb250cm9sIGxpbmUKICAgICAgICAgICAgfQogICAgICAgICAgICAkQ09ERV90eXBlID0gJ0ZTJzsKICAgICAgICAgICAgbmV4dDsKICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBDaGVjayBmb3IgYSBjb250aW51ZWQgcXVvdGUKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGlmICggJGxpbmVfb2ZfdG9rZW5zLT57X3N0YXJ0aW5nX2luX3F1b3RlfSApIHsKCiAgICAgICAgICAgICMgQSBsaW5lIHdoaWNoIGlzIGVudGlyZWx5IGEgcXVvdGUgb3IgcGF0dGVybiBtdXN0IGdvIG91dAogICAgICAgICAgICAjIHZlcmJhdGltLiAgTm90ZTogdGhlIFxuIGlzIGNvbnRhaW5lZCBpbiAkaW5wdXRfbGluZS4KICAgICAgICAgICAgaWYgKCAkam1heCA8PSAwICkgewogICAgICAgICAgICAgICAgaWYgKCAkc2VsZi0+W19zYXZlX2xvZ2ZpbGVfXSAmJiAkaW5wdXRfbGluZSA9fiAvXHQvICkgewogICAgICAgICAgICAgICAgICAgIG15ICRpbnB1dF9saW5lX251bWJlciA9ICRsaW5lX29mX3Rva2Vucy0+e19saW5lX251bWJlcn07CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPm5vdGVfZW1iZWRkZWRfdGFiKCRpbnB1dF9saW5lX251bWJlcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkQ09ERV90eXBlID0gJ1ZCJzsKICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBTZWUgaWYgd2UgYXJlIGVudGVyaW5nIGEgZm9ybWF0dGluZyBza2lwIHNlY3Rpb24KICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGlmICgKICAgICAgICAgICAgJGlzX2Jsb2NrX2NvbW1lbnQKCiAgICAgICAgICAgICMgb3B0aW9uYWwgZmFzdCBwcmUtY2hlY2sKICAgICAgICAgICAgJiYgKCBzdWJzdHIoICRyTEwtPlskS2ZpcnN0XS0+W19UT0tFTl9dLCAwLCA0ICkgZXEgJyM8PDwnCiAgICAgICAgICAgICAgICB8fCAkck9wdHNfZm9ybWF0X3NraXBwaW5nX2JlZ2luICkKCiAgICAgICAgICAgICYmICRyT3B0c19mb3JtYXRfc2tpcHBpbmcKICAgICAgICAgICAgJiYgKCAkckxMLT5bJEtmaXJzdF0tPltfVE9LRU5fXSAuIFNQQUNFICkgPX4KICAgICAgICAgICAgLyRmb3JtYXRfc2tpcHBpbmdfcGF0dGVybl9iZWdpbi8KICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICRpbnB1dF9saW5lX25vID0gJGxpbmVfb2ZfdG9rZW5zLT57X2xpbmVfbnVtYmVyfTsKICAgICAgICAgICAgJEluX2Zvcm1hdF9za2lwcGluZ19zZWN0aW9uID0gJGlucHV0X2xpbmVfbm87CiAgICAgICAgICAgIHdyaXRlX2xvZ2ZpbGVfZW50cnkoCiAgICAgICAgICAgICAgICAiTGluZSAkaW5wdXRfbGluZV9ubzogRW50ZXJpbmcgZm9ybWF0LXNraXBwaW5nIHNlY3Rpb25cbiIpOwogICAgICAgICAgICAkQ09ERV90eXBlID0gJ0ZTJzsKICAgICAgICAgICAgbmV4dDsKICAgICAgICB9CgogICAgICAgICMgaWdub3JlIHRyYWlsaW5nIGJsYW5rIHRva2VucyAodGhleSB3aWxsIGdldCBkZWxldGVkIGxhdGVyKQogICAgICAgIGlmICggJGptYXggPiAwICYmICRyTEwtPlskS2xhc3RdLT5bX1RZUEVfXSBlcSAnYicgKSB7CiAgICAgICAgICAgICRqbWF4LS07CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0KICAgICAgICAjIEJsYW5rIGxpbmUKICAgICAgICAjLS0tLS0tLS0tLS0KICAgICAgICBpZiAoICRqbWF4IDwgMCApIHsKICAgICAgICAgICAgJENPREVfdHlwZSA9ICdCTCc7CiAgICAgICAgICAgIG5leHQ7CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tCiAgICAgICAgIyBDb21tZW50cwogICAgICAgICMtLS0tLS0tLS0KICAgICAgICBpZiAoJGlzX2Jsb2NrX2NvbW1lbnQpIHsKCiAgICAgICAgICAgICMgc2VlIGlmIHRoaXMgaXMgYSBzdGF0aWMgYmxvY2sgY29tbWVudCAoc3RhcnRzIHdpdGggIyMgYnkgZGVmYXVsdCkKICAgICAgICAgICAgbXkgJGlzX3N0YXRpY19ibG9ja19jb21tZW50ID0gMDsKICAgICAgICAgICAgbXkgJG5vX2xlYWRpbmdfc3BhY2UgICAgICAgID0gc3Vic3RyKCAkaW5wdXRfbGluZSwgMCwgMSApIGVxICcjJzsKICAgICAgICAgICAgaWYgKAoKICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgZmFzdCBwcmUtY2hlY2sKICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICBzdWJzdHIoICRyTEwtPlskS2ZpcnN0XS0+W19UT0tFTl9dLCAwLCAyICkgZXEgJyMjJwogICAgICAgICAgICAgICAgICAgIHx8ICRyT3B0c19zdGF0aWNfYmxvY2tfY29tbWVudF9wcmVmaXgKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICAmJiAkck9wdHNfc3RhdGljX2Jsb2NrX2NvbW1lbnRzCiAgICAgICAgICAgICAgICAmJiAkaW5wdXRfbGluZSA9fiAvJHN0YXRpY19ibG9ja19jb21tZW50X3BhdHRlcm4vCiAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkaXNfc3RhdGljX2Jsb2NrX2NvbW1lbnQgPSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIENoZWNrIGZvciBjb21tZW50cyB3aGljaCBhcmUgbGluZSBkaXJlY3RpdmVzCiAgICAgICAgICAgICMgVHJlYXQgZXhhY3RseSBhcyBzdGF0aWMgYmxvY2sgY29tbWVudHMgd2l0aG91dCBsZWFkaW5nIHNwYWNlCiAgICAgICAgICAgICMgcmVmZXJlbmNlOiBwZXJsc3luLCBuZWFyIGVuZCwgc2VjdGlvbiBQbGFpbiBPbGQgQ29tbWVudHMgKE5vdCEpCiAgICAgICAgICAgICMgZXhhbXBsZTogJyMgbGluZSA0MiAibmV3X2ZpbGVuYW1lLnBseCInCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICRub19sZWFkaW5nX3NwYWNlCiAgICAgICAgICAgICAgICAmJiAkaW5wdXRfbGluZSA9fiBte15cIyAgIFxzKgogICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lIFxzKyAoXGQrKSAgIFxzKgogICAgICAgICAgICAgICAgICAgICAgICAgICAoPzpccygiPykoW14iXSspXDIpPyBccyoKICAgICAgICAgICAgICAgICAgICAgICAgICAgJH14CiAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkaXNfc3RhdGljX2Jsb2NrX2NvbW1lbnQgPSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGxvb2sgZm9yIGhhbmdpbmcgc2lkZSBjb21tZW50IC4uLgogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkbGFzdF9saW5lX2hhZF9zaWRlX2NvbW1lbnQgICAgICMgdGhpcyBmb2xsb3dzIGFzIHNpZGUgY29tbWVudAogICAgICAgICAgICAgICAgJiYgISRub19sZWFkaW5nX3NwYWNlICAgICAgICAgICAjIHdpdGggc29tZSBsZWFkaW5nIHNwYWNlLCBhbmQKICAgICAgICAgICAgICAgICYmICEkaXNfc3RhdGljX2Jsb2NrX2NvbW1lbnQgICAgIyB0aGlzIGlzIG5vdCBhIHN0YXRpYyBjb21tZW50CiAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgIyAgY29udGludWluZyBhbiBleGlzdGluZyBIU0MgY2hhaW4/CiAgICAgICAgICAgICAgICBpZiAoICRsYXN0X0NPREVfdHlwZSBlcSAnSFNDJyApIHsKICAgICAgICAgICAgICAgICAgICAkaGFzX3NpZGVfY29tbWVudCA9IDE7CiAgICAgICAgICAgICAgICAgICAgJENPREVfdHlwZSAgICAgICAgPSAnSFNDJzsKICAgICAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgIHN0YXJ0aW5nIGEgbmV3IEhTQyBjaGFpbj8KICAgICAgICAgICAgICAgIGlmICgKCiAgICAgICAgICAgICAgICAgICAgJHJPcHRzLT57J2hhbmdpbmctc2lkZS1jb21tZW50cyd9ICAgICMgdXNlciBpcyBhbGxvd2luZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGhhbmdpbmcgc2lkZSBjb21tZW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGxpa2UgdGhpcwoKICAgICAgICAgICAgICAgICAgICAmJiAoIGRlZmluZWQoJEtsYXN0X3ByZXYpICYmICRLbGFzdF9wcmV2ID4gMSApCgogICAgICAgICAgICAgICAgICAgICMgYW5kIHRoZSBwcmV2aW91cyBzaWRlIGNvbW1lbnQgd2FzIG5vdCBzdGF0aWMgKGlzc3VlIGMwNzApCiAgICAgICAgICAgICAgICAgICAgJiYgISgKICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJPcHRzLT57J3N0YXRpYy1zaWRlLWNvbW1lbnRzJ30KICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHJMTC0+WyRLbGFzdF9wcmV2XS0+W19UT0tFTl9dID1+CiAgICAgICAgICAgICAgICAgICAgICAgIC8kc3RhdGljX3NpZGVfY29tbWVudF9wYXR0ZXJuLwogICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgIyBhbmQgaXQgaXMgbm90IGEgY2xvc2luZyBzaWRlIGNvbW1lbnQgKGlzc3VlIGMwNzApLgogICAgICAgICAgICAgICAgICAgIG15ICRLX3BlbnVsdCA9ICRLbGFzdF9wcmV2IC0gMTsKICAgICAgICAgICAgICAgICAgICAkS19wZW51bHQgLT0gMSBpZiAoICRyTEwtPlskS19wZW51bHRdLT5bX1RZUEVfXSBlcSAnYicgKTsKICAgICAgICAgICAgICAgICAgICBteSAkZm9sbG93c19jc2MgPQogICAgICAgICAgICAgICAgICAgICAgKCAgICAgICRyTEwtPlskS19wZW51bHRdLT5bX1RPS0VOX10gZXEgJ30nCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHJMTC0+WyRLX3BlbnVsdF0tPltfVFlQRV9dIGVxICd9JwogICAgICAgICAgICAgICAgICAgICAgICAgICYmICRyTEwtPlskS2xhc3RfcHJldl0tPltfVE9LRU5fXSA9fgogICAgICAgICAgICAgICAgICAgICAgICAgIC8kY2xvc2luZ19zaWRlX2NvbW1lbnRfcHJlZml4X3BhdHRlcm4vICk7CgogICAgICAgICAgICAgICAgICAgIGlmICggISRmb2xsb3dzX2NzYyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGhhc19zaWRlX2NvbW1lbnQgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAkQ09ERV90eXBlICAgICAgICA9ICdIU0MnOwogICAgICAgICAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRpc19zdGF0aWNfYmxvY2tfY29tbWVudCkgewogICAgICAgICAgICAgICAgJENPREVfdHlwZSA9ICRub19sZWFkaW5nX3NwYWNlID8gJ1NCQ1gnIDogJ1NCQyc7CiAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJGxhc3RfbGluZV9oYWRfc2lkZV9jb21tZW50CiAgICAgICAgICAgICAgICAmJiAhJHJPcHRzX21heGltdW1fY29uc2VjdXRpdmVfYmxhbmtfbGluZXMKICAgICAgICAgICAgICAgICYmICRyTEwtPlskS2ZpcnN0XS0+W19MRVZFTF9dID4gMCApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICMgRW1lcmdlbmN5IGZpeCB0byBrZWVwIGEgYmxvY2sgY29tbWVudCBmcm9tIGJlY29taW5nIGEgaGFuZ2luZwogICAgICAgICAgICAgICAgIyBzaWRlIGNvbW1lbnQuICBUaGlzIGZpeCBpcyBmb3IgdGhlIGNhc2UgdGhhdCBibGFuayBsaW5lcwogICAgICAgICAgICAgICAgIyBjYW5ub3QgYmUgaW5zZXJ0ZWQuICBUaGVyZSBpcyByZWxhdGVkIGNvZGUgaW4gc3ViCiAgICAgICAgICAgICAgICAjICdwcm9jZXNzX2xpbmVfb2ZfQ09ERScKICAgICAgICAgICAgICAgICRDT0RFX3R5cGUgPSAnU0JDWCc7CiAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJENPREVfdHlwZSA9ICdCQyc7CiAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgT3RoZXIgc3BlY2lhbCBjb2RlIHR5cGVzCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpZiAoJHJPcHRzX2luZGVudF9vbmx5KSB7CiAgICAgICAgICAgICRDT0RFX3R5cGUgPSAnSU8nOwogICAgICAgICAgICBuZXh0OwogICAgICAgIH0KCiAgICAgICAgaWYgKCAhJHJPcHRzX2FkZF9uZXdsaW5lcyApIHsKICAgICAgICAgICAgJENPREVfdHlwZSA9ICdOSU4nOwogICAgICAgICAgICBuZXh0OwogICAgICAgIH0KCiAgICAgICAgIyAgIFBhdGNoIG5lZWRlZCBmb3IgTWFrZU1ha2VyLiAgRG8gbm90IGJyZWFrIGEgc3RhdGVtZW50CiAgICAgICAgIyAgIGluIHdoaWNoICRWRVJTSU9OIG1heSBiZSBjYWxjdWxhdGVkLiAgU2VlIE1ha2VNYWtlci5wbTsKICAgICAgICAjICAgdGhpcyBpcyBiYXNlZCBvbiB0aGUgY29kaW5nIGluIGl0LgogICAgICAgICMgICBUaGUgZmlyc3QgbGluZSBvZiBhIGZpbGUgdGhhdCBtYXRjaGVzIHRoaXMgd2lsbCBiZSBldmFsJ2Q6CiAgICAgICAgIyAgICAgICAvKFtcJCpdKSgoW1x3XDpcJ10qKVxiVkVSU0lPTilcYi4qXD0vCiAgICAgICAgIyAgIEV4YW1wbGVzOgogICAgICAgICMgICAgICpWRVJTSU9OID0gXCcxLjAxJzsKICAgICAgICAjICAgICAoICRWRVJTSU9OICkgPSAnJFJldmlzaW9uOiAxLjc0ICQgJyA9fiAvXCRSZXZpc2lvbjpccysoW15cc10rKS87CiAgICAgICAgIyAgIFdlIHdpbGwgcGFzcyBzdWNoIGEgbGluZSBzdHJhaWdodCB0aHJvdWdoIHdpdGhvdXQgYnJlYWtpbmcKICAgICAgICAjICAgaXQgdW5sZXNzIC1ucHZsIGlzIHVzZWQuCgogICAgICAgICMgICBQYXRjaCBmb3IgcHJvYmxlbSByZXBvcnRlZCBpbiBSVCAjODE4NjYsIHdoZXJlIGZpbGVzCiAgICAgICAgIyAgIGhhZCBiZWVuIGZsYXR0ZW5lZCBpbnRvIGEgc2luZ2xlIGxpbmUgYW5kIGNvdWxkbid0IGJlCiAgICAgICAgIyAgIHRpZGllZCB3aXRob3V0IC1ucHZsLiAgVGhlcmUgYXJlIHR3byBwYXJ0cyB0byB0aGlzIHBhdGNoOgogICAgICAgICMgICBGaXJzdCwgaXQgaXMgbm90IGRvbmUgZm9yIGEgcmVhbGx5IGxvbmcgbGluZSAoODAgdG9rZW5zIGZvciBub3cpLgogICAgICAgICMgICBTZWNvbmQsIHdlIHdpbGwgb25seSBhbGxvdyB1cCB0byBvbmUgc2VtaWNvbG9uCiAgICAgICAgIyAgIGJlZm9yZSB0aGUgVkVSU0lPTi4gIFdlIG5lZWQgdG8gYWxsb3cgYXQgbGVhc3Qgb25lIHNlbWljb2xvbgogICAgICAgICMgICBmb3Igc3RhdGVtZW50cyBsaWtlIHRoaXM6CiAgICAgICAgIyAgICAgIHJlcXVpcmUgRXhwb3J0ZXI7ICBvdXIgJFZFUlNJT04gPSAkRXhwb3J0ZXI6OlZFUlNJT047CiAgICAgICAgIyAgIHdoZXJlIGJvdGggc3RhdGVtZW50cyBtdXN0IGJlIG9uIGEgc2luZ2xlIGxpbmUgZm9yIE1ha2VNYWtlcgoKICAgICAgICBpZiAoICAhJFNhd19WRVJTSU9OX2luX3RoaXNfZmlsZQogICAgICAgICAgICAmJiAkam1heCA8IDgwCiAgICAgICAgICAgICYmICRpbnB1dF9saW5lID1+CiAgICAgICAgICAgIC9eW147XSo7P1teO10qKFtcJCpdKSgoW1x3XDpcJ10qKVxiVkVSU0lPTilcYi4qXD0vICkKICAgICAgICB7CiAgICAgICAgICAgICRTYXdfVkVSU0lPTl9pbl90aGlzX2ZpbGUgPSAxOwogICAgICAgICAgICB3cml0ZV9sb2dmaWxlX2VudHJ5KCJwYXNzaW5nIFZFUlNJT04gbGluZTsgLW5wdmwgZGVhY3RpdmF0ZXNcbiIpOwoKICAgICAgICAgICAgIyBUaGlzIGNvZGUgdHlwZSBoYXMgbG93ZXIgcHJpb3JpdHkgdGhhbiBvdGhlcnMKICAgICAgICAgICAgJENPREVfdHlwZSA9ICdWRVInOwogICAgICAgICAgICBuZXh0OwogICAgICAgIH0KICAgIH0KICAgIGNvbnRpbnVlIHsKICAgICAgICAkbGluZV9vZl90b2tlbnMtPntfY29kZV90eXBlfSA9ICRDT0RFX3R5cGU7CgogICAgICAgICRsYXN0X2xpbmVfaGFkX3NpZGVfY29tbWVudCA9ICRoYXNfc2lkZV9jb21tZW50OwogICAgICAgIGlmICgkaGFzX3NpZGVfY29tbWVudCkgewogICAgICAgICAgICBwdXNoIEBpeF9zaWRlX2NvbW1lbnRzLCAkaXhfbGluZTsKICAgICAgICAgICAgJGhhc19zaWRlX2NvbW1lbnQgPSAwOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gXEBpeF9zaWRlX2NvbW1lbnRzOwp9ICMjIGVuZCBzdWIgc2V0X0NPREVfdHlwZQoKc3ViIGJsb2NrX3NlcW5vX29mX3BhcmVuX2tleXdvcmQgewoKICAgIG15ICggJHNlbGYsICRLSyApID0gQF87CgogICAgIyBGaW5kIGJyYWNlIGF0ICcpeycgYWZ0ZXIga2V5d29yZCBzdWNoIGFzIGZvciwgZm9yZWFjaCwgLi4uCiAgICAjIFNFRSBBTFNPOiBzdWIgYmxvY2tfc2Vxbm9fb2ZfcGFyZW5fc2Vxbm8KCiAgICAjIEdpdmVuOgogICAgIyAgICRLSyA9IGluZGV4IG9mIGEga2V5d29yZCBmb2xsb3dlZCBieSBwYXJlbnMgYW5kIGJsb2NrICcuLi4gKCApIHsnCiAgICAjICAgICAgICAgc3VjaCBhcyAnZm9yJywgJ2ZvcmVhY2gnLCAnd2hpbGUnLCAnaWYnLCAnZWxzaWYnIC4uCiAgICAjIFJldHVybjoKICAgICMgICAkc2Vxbm8gb2YgdGhlIG9wZW5pbmcgYmxvY2sgYnJhY2UgZm9yIHRoaXMga2V5d29yZCwgaWYgYW55CiAgICAjICAgJEtfZW5kX2l0ZXJhdG9yID0gaW5kZXggb2YgdGhlIGxhc3QgdG9rZW4gb2YgYW4gaXRlcmF0b3IsIGlmIGFueQogICAgIyBvcgogICAgIyAgIG5vdGhpbmcgaWYgbm90IGZvdW5kCgogICAgIyAgICAgICAgICdmb3IgbXkgJHZhciAoLi4pIHsgLi4uIH0nCiAgICAjICAgICAgICAgICBeICAgICAgICAgICAgICAgXgogICAgIyAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwKICAgICMgICAgICAgICAgIC0tJEtLICAgICAgICAgICAtLSRzZXFubyBvZiBicmFjZSB0aGF0IHdlIHdhbnQKCiAgICBteSAkckxMID0gJHNlbGYtPltfckxMX107CgogICAgIyBsb29rIGFoZWFkIGZvciBhbiBvcGVuaW5nIHBhcmVuCiAgICBteSAkS19wYXJlbiA9ICRzZWxmLT5bX3JLX25leHRfc2Vxbm9fYnlfS19dLT5bJEtLXTsKICAgIHJldHVybiB1bmxlc3MgZGVmaW5lZCgkS19wYXJlbik7CiAgICBteSAkdG9rZW5fcGFyZW4gPSAkckxMLT5bJEtfcGFyZW5dLT5bX1RPS0VOX107CiAgICByZXR1cm4gdW5sZXNzICggJHRva2VuX3BhcmVuIGVxICcoJyApOwoKICAgICMgZm91bmQgYSBwYXJlbiwgYnV0IGRvZXMgaXQgYmVsb25nIHRvIHRoaXMga2V5d29yZD8KICAgIG15ICRzZXFub19wYXJlbiA9ICRyTEwtPlskS19wYXJlbl0tPltfVFlQRV9TRVFVRU5DRV9dOwoKICAgICMgc2VlIGlmIHRoaXMgb3BlbmluZyBwYXJlbiBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBrZXl3b3JkCiAgICBteSAkS19uID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLSyk7CiAgICByZXR1cm4gdW5sZXNzICRLX247CgogICAgIyBpcyBpdCB0aGUgbmV4dCB0b2tlbj8gdGhpcyBpcyB0aGUgY29tbW9uIGNhc2UKICAgIG15ICRLX2VuZF9pdGVyYXRvcjsKICAgIG15ICRzYXdfbXk7CiAgICBteSAkdG9rZW5fS0sgPSAkckxMLT5bJEtLXS0+W19UT0tFTl9dOwogICAgaWYgKCAkS19uICE9ICRLX3BhcmVuICkgewoKICAgICAgICAjIGxvb2sgZm9yICdmb3IgJHZhciAoJywgJ2ZvciBteSAkdmFyICgnLCAnZm9yIG15ICgnLCAnZm9yICR2YXIgKCcKICAgICAgICBpZiAoICRpc19mb3JfZm9yZWFjaHskdG9rZW5fS0t9ICkgewogICAgICAgICAgICBteSAkdHlwZV9LX24gID0gJHJMTC0+WyRLX25dLT5bX1RZUEVfXTsKICAgICAgICAgICAgbXkgJHRva2VuX0tfbiA9ICRyTEwtPlskS19uXS0+W19UT0tFTl9dOwoKICAgICAgICAgICAgIyBza2lwIHBhc3QgYSAnbXknCiAgICAgICAgICAgIGlmICggJHR5cGVfS19uIGVxICdrJyApIHsKICAgICAgICAgICAgICAgIGlmICggJGlzX215X3N0YXRlX291cnskdG9rZW5fS19ufSApIHsKICAgICAgICAgICAgICAgICAgICAkS19uICAgID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLX24pOwogICAgICAgICAgICAgICAgICAgICRzYXdfbXkgPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7IHJldHVybiB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc2tpcCBhbiBpZGVudGlmaWVyCiAgICAgICAgICAgIGlmICggJEtfbiAmJiAkS19uICE9ICRLX3BhcmVuICYmICRyTEwtPlskS19uXS0+W19UWVBFX10gZXEgJ2knICkgewogICAgICAgICAgICAgICAgJEtfbiA9ICRzZWxmLT5LX25leHRfY29kZSgkS19uKTsKCiAgICAgICAgICAgICAgICAjIGZvcmNlIHRoaXMgaXRlcmF0b3IgdG8gYmUgZW50ZXJlZCBhcyBuZXcgbGV4aWNhbAogICAgICAgICAgICAgICAgJEtfZW5kX2l0ZXJhdG9yID0gJEtfcGFyZW47CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyB3ZSBtdXN0IGJlIGF0IHRoZSBwYXJlbgogICAgcmV0dXJuIHVubGVzcyAoICRLX24gJiYgJEtfbiA9PSAkS19wYXJlbiApOwoKICAgICMgbm93IGp1bXAgdG8gdGhlIGNsb3NpbmcgcGFyZW4KICAgICRLX3BhcmVuID0gJHNlbGYtPltfS19jbG9zaW5nX2NvbnRhaW5lcl9dLT57JHNlcW5vX3BhcmVufTsKCiAgICAjIHRoZW4gbG9vayBmb3IgdGhlIG9wZW5pbmcgYnJhY2UgaW1tZWRpYXRlbHkgYWZ0ZXIgaXQKICAgIG15ICRLX2JyYWNlID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLX3BhcmVuKTsKICAgIHJldHVybiB1bmxlc3MgKCRLX2JyYWNlKTsKCiAgICAjIGNoZWNrIGZvciBleHBlcmltZW50YWwgJ2ZvciBsaXN0JzogZm9yIG15ICggJGEsICRiKSAoQGxpc3QpIHsKICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogICAgaWYgKCAgICRyTEwtPlskS19icmFjZV0tPltfVE9LRU5fXSBlcSAnKCcKICAgICAgICAmJiAhJEtfZW5kX2l0ZXJhdG9yCiAgICAgICAgJiYgJGlzX2Zvcl9mb3JlYWNoeyR0b2tlbl9LS30gKQogICAgewogICAgICAgIGlmICggISRzYXdfbXkgKSB7ICRLX2VuZF9pdGVyYXRvciA9ICRLX2JyYWNlIH0KICAgICAgICBteSAkc2Vxbm9fdGVzdCA9ICRyTEwtPlskS19icmFjZV0tPltfVFlQRV9TRVFVRU5DRV9dOwogICAgICAgIG15ICRLX3Rlc3QgICAgID0gJHNlbGYtPltfS19jbG9zaW5nX2NvbnRhaW5lcl9dLT57JHNlcW5vX3Rlc3R9OwogICAgICAgIHJldHVybiB1bmxlc3MgJEtfdGVzdDsKICAgICAgICAkS19icmFjZSA9ICRzZWxmLT5LX25leHRfY29kZSgkS190ZXN0KTsKICAgICAgICByZXR1cm4gdW5sZXNzICgkS19icmFjZSk7CiAgICB9CgogICAgcmV0dXJuIHVubGVzcyAoICRyTEwtPlskS19icmFjZV0tPltfVE9LRU5fXSBlcSAneycgKTsKICAgIG15ICRzZXFub19icmFjZSA9ICRyTEwtPlskS19icmFjZV0tPltfVFlQRV9TRVFVRU5DRV9dOwogICAgcmV0dXJuIHVubGVzcyAoJHNlcW5vX2JyYWNlKTsKICAgIG15ICRibG9ja190eXBlID0gJHNlbGYtPltfcmJsb2NrX3R5cGVfb2Zfc2Vxbm9fXS0+eyRzZXFub19icmFjZX07CgogICAgIyBWZXJpZnkgdGhhdCB0aGlzIGlzIHRoZSBjb3JyZWN0IGJyYWNlCiAgICBpZiAoICRibG9ja190eXBlIG5lICR0b2tlbl9LSyApIHsKCiAgICAgICAgIyBJZiBub3QsIHRoaXMgaXMgdW5leHBlY3RlZCBhbmQgc2hvdWxkIGJlIGludmVzdGlnYXRlZAogICAgICAgICMgKHRoZSBibG9jayB0eXBlIG1heSBoYXZlIGJlZW4gbWlzLW1hcmtlZCkKICAgICAgICBteSAkbG5vID0gJHJMTC0+WyRLS10tPltfTElORV9JTkRFWF9dICsgMTsKICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KDw8RU9NKTsKYXQgbGluZSAkbG5vOiBmb3VuZCBibG9jayB0eXBlICRibG9ja190eXBlOiBleHBlY3RpbmcgJHRva2VuX0tLIC0gcGxlYXNlIGNoZWNrCkVPTQogICAgICAgIHJldHVybjsKICAgIH0KCiAgICByZXR1cm4gKCAkc2Vxbm9fYnJhY2UsICRLX2VuZF9pdGVyYXRvciApOwp9ICMjIGVuZCBzdWIgYmxvY2tfc2Vxbm9fb2ZfcGFyZW5fa2V5d29yZAoKc3ViIGhhc19jb21wbGV0ZV9wYWNrYWdlIHsKICAgIG15ICgkc2VsZikgPSBAXzsKCiAgICAjIHJldHVybiB0cnVlIGlmIHRoaXMgZmlsZSBhcHBlYXJzIHRvIGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNvbXBsZXRlIHBhY2thZ2UKCiAgICBteSAkS2xhc3QgPSAkc2VsZi0+S19sYXN0X2NvZGUoKTsKICAgIHJldHVybiB1bmxlc3MgZGVmaW5lZCgkS2xhc3QpOwoKICAgIG15ICRyTEwgPSAkc2VsZi0+W19yTExfXTsKCiAgICBteSAkcktfcGFja2FnZV9saXN0ID0gJHNlbGYtPltfcktfcGFja2FnZV9saXN0X107CiAgICByZXR1cm4gdW5sZXNzICggZGVmaW5lZCgkcktfcGFja2FnZV9saXN0KSAmJiBAeyRyS19wYWNrYWdlX2xpc3R9ICk7CgogICAgIyBsb29rIGZvciBhIGZpbGUgbGlrZSB0aGlzOgogICAgIyBwYWNrYWdlIEE6OkIKICAgICMgLi4uCiAgICAjIDE7CgogICAgbXkgJEtLICAgPSAkcktfcGFja2FnZV9saXN0LT5bMF07CiAgICBteSAkaXRlbSA9ICRyTEwtPlskS0tdOwogICAgbXkgJHR5cGUgPSAkaXRlbS0+W19UWVBFX107CgogICAgIyBTdG9yZWQgSyB2YWx1ZXMgbWF5IGJlIG9mZiBieSAxIGR1ZSB0byBhbiBhZGRlZCBibGFuawogICAgaWYgKCAkdHlwZSBlcSAnYicgKSB7CiAgICAgICAgJEtLICs9IDE7CiAgICAgICAgJGl0ZW0gPSAkckxMLT5bJEtLXTsKICAgICAgICAkdHlwZSA9ICRpdGVtLT5bX1RZUEVfXTsKICAgIH0KCiAgICAjIHNhZmV0eSBjaGVjayAtIHNob3VsZG4ndCBoYXBwZW4KICAgIGlmICggJHR5cGUgbmUgJ1AnICkgewogICAgICAgIERFVkVMX01PREUgJiYgRmF1bHQoIkV4cGVjdGluZyB0eXBlICdQJyBidXQgZm91bmQgJyR0eXBlJyIpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIG15ICRsZXZlbCA9ICRpdGVtLT5bX0xFVkVMX107CiAgICByZXR1cm4gdW5sZXNzICggJGxldmVsID09IDAgKTsKCiAgICAjIExvb2sgZm9yICcxOycgYXQgbmV4dCBwYWNrYWdlLCBpZiBhbnksIGFuZCBhdCBlbmQgb2YgZmlsZQogICAgbXkgQEtfc2VtaWNvbG9uX3Rlc3QgPSAoJEtsYXN0KTsKICAgIGlmICggQHskcktfcGFja2FnZV9saXN0fSA+IDEgKSB7CiAgICAgICAgbXkgJEtfcGFja2FnZSA9ICRyS19wYWNrYWdlX2xpc3QtPlsxXTsKICAgICAgICBteSAkS3Rlc3QgICAgID0gJHNlbGYtPktfcHJldmlvdXNfY29kZSgkS19wYWNrYWdlKTsKICAgICAgICBwdXNoIEBLX3NlbWljb2xvbl90ZXN0LCAkS3Rlc3Q7CiAgICB9CgogICAgZm9yZWFjaCBteSAkS3Rlc3QgKEBLX3NlbWljb2xvbl90ZXN0KSB7CiAgICAgICAgaWYgKCAkckxMLT5bJEt0ZXN0XS0+W19UWVBFX10gZXEgJ2InICkgeyAkS3Rlc3QgLT0gMSB9CiAgICAgICAgaWYgKCAkS3Rlc3QgPiAkS0sgJiYgJEt0ZXN0ICYmICRyTEwtPlskS3Rlc3RdLT5bX1RZUEVfXSBlcSAnOycgKSB7CiAgICAgICAgICAgIG15ICRLMSA9ICRzZWxmLT5LX3ByZXZpb3VzX2NvZGUoJEt0ZXN0KTsKICAgICAgICAgICAgaWYgKCAkSzEgJiYgJHJMTC0+WyRLMV0tPltfVE9LRU5fXSBlcSAnMScgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGhhc19jb21wbGV0ZV9wYWNrYWdlCgpzdWIgaXNfY29tcGxldGVfc2NyaXB0IHsKICAgIG15ICggJHNlbGYsICRybGluZV90eXBlX2NvdW50LCAkcmtleXdvcmRfY291bnQgKSA9IEBfOwoKICAgICMgR3Vlc3MgaWYgd2UgYXJlIGZvcm1hdHRpbmcgYSBjb21wbGV0ZSBzY3JpcHQKICAgICMgR2l2ZW46CiAgICAjICAgJHJsaW5lX3R5cGVfY291bnQgPSBoYXNoIHJlZiBvZiBjb3VudCBvZiBsaW5lIHR5cGVzCiAgICAjICAgJHJrZXl3b3JkX2NvdW50ICAgPSBoYXNoIHJlZiBvZiBjb3VudCBvZiBrZXl3b3JkcwogICAgIyBSZXR1cm46IHRydWUgb3IgZmFsc2UKCiAgICAjIEdvYWw6IGhlbHAgZGVjaWRlIGlmIHdlIHNob3VsZCBza2lwIGNlcnRhaW4gd2FybmluZyBjaGVja3Mgd2hlbgogICAgIyBvcGVyYXRpbmcgb24ganVzdCBwYXJ0IG9mIGEgc2NyaXB0IChzdWNoIGFzIGZyb20gYW4gZWRpdG9yKS4KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBURVNUIDE6IEFzc3VtZSBhIGZpbGUgd2l0aCBrbm93biBleHRlbnNpb24gaXMgYSBjb21wbGV0ZSBzY3JpcHQKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBteSAlaXNfc3RhbmRhcmRfZmlsZV9leHRlbnNpb24gPSAoCiAgICAgICAgJ3BtJyAgPT4gMSwKICAgICAgICAncGwnICA9PiAxLAogICAgICAgICdwbHgnID0+IDEsCiAgICAgICAgJ3QnICAgPT4gMSwKICAgICk7CiAgICBteSAkaW5wdXRfc3RyZWFtX25hbWUgPSBnZXRfaW5wdXRfc3RyZWFtX25hbWUoKTsKCiAgICAjIGxvb2sgZm9yIGEgZmlsZSBleHRlbnNpb24KICAgIG15ICRwb3NfZG90ICAgICAgICA9IHJpbmRleCggJGlucHV0X3N0cmVhbV9uYW1lLCAnLicgKTsKICAgIG15ICRmaWxlX2V4dGVuc2lvbiA9IEVNUFRZX1NUUklORzsKICAgIGlmICggJHBvc19kb3QgPiAwICkgewogICAgICAgICRmaWxlX2V4dGVuc2lvbiA9IHN1YnN0ciggJGlucHV0X3N0cmVhbV9uYW1lLCAkcG9zX2RvdCArIDEgKTsKCiAgICAgICAgIyBhbGxvdyBhZGRpdGlvbmFsIGRpZ2l0cywgbGlrZSAucG0uMCwgLnBtLjEgZXRjCiAgICAgICAgaWYgKCAgIGRlZmluZWQoJGZpbGVfZXh0ZW5zaW9uKQogICAgICAgICAgICAmJiBsZW5ndGgoJGZpbGVfZXh0ZW5zaW9uKQogICAgICAgICAgICAmJiAkZmlsZV9leHRlbnNpb24gPX4gL15cZCskLyApCiAgICAgICAgewogICAgICAgICAgICBteSAkc3RyID0gc3Vic3RyKCAkaW5wdXRfc3RyZWFtX25hbWUsIDAsICRwb3NfZG90ICk7CiAgICAgICAgICAgICRwb3NfZG90ID0gcmluZGV4KCAkc3RyLCAnLicgKTsKICAgICAgICAgICAgaWYgKCAkcG9zX2RvdCA+IDAgKSB7CiAgICAgICAgICAgICAgICAkZmlsZV9leHRlbnNpb24gPSBzdWJzdHIoICRzdHIsICRwb3NfZG90ICsgMSApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gMSBpZiAkaXNfc3RhbmRhcmRfZmlsZV9leHRlbnNpb257IGxjKCRmaWxlX2V4dGVuc2lvbikgfTsKICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBURVNUIDI6IGEgcG9zaXRpdmUgc3RhcnRpbmcgbGV2ZWwgaW1wbGllcyBhbiBpbmNvbXBsZXRlIHNjcmlwdAogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIG15ICRyTEwgPSAkc2VsZi0+W19yTExfXTsKICAgIHJldHVybiB1bmxlc3MgKCBAeyRyTEx9ICk7CiAgICBteSAkc2lsID0gJHJMTC0+WzBdLT5bX0xFVkVMX107CiAgICByZXR1cm4gaWYgKCRzaWwpOwoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgVEVTVCAzOiBsb29rIGZvciBhIGNvbXBsZXRlIHBhY2thZ2UKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHJldHVybiAxIGlmICRzZWxmLT5oYXNfY29tcGxldGVfcGFja2FnZSgpOwoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFRFU1QgNDogZXhhbWluZSBvdGhlciBjbHVlcwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIG15ICRybGluZXMgICAgID0gJHNlbGYtPltfcmxpbmVzX107CiAgICBteSAkbGluZV9jb3VudCA9IEB7JHJsaW5lc307CiAgICByZXR1cm4gdW5sZXNzICgkbGluZV9jb3VudCk7CgogICAgbXkgJGlucHV0X2xpbmUgICAgPSAkcmxpbmVzLT5bMF0tPntfbGluZV90ZXh0fTsKICAgIG15ICRzYXdfaGFzaF9iYW5nID0gc3Vic3RyKCAkaW5wdXRfbGluZSwgMCwgMiApIGVxICcjIScKICAgICAgJiYgJGlucHV0X2xpbmUgPX4gL15cI1whLipwZXJsXGIvOwoKICAgIG15ICRyS19wYWNrYWdlX2xpc3QgPSAkc2VsZi0+W19yS19wYWNrYWdlX2xpc3RfXTsKICAgIG15ICRzYXdfcGFja2FnZSAgICAgPSBkZWZpbmVkKCRyS19wYWNrYWdlX2xpc3QpICYmIEB7JHJLX3BhY2thZ2VfbGlzdH07CiAgICBteSAkc3ViX2NvdW50ICAgICAgID0gK2tleXMgJXsgJHNlbGYtPltfcmlzX3N1Yl9ibG9ja19dIH07CiAgICBteSAkdXNlX2NvdW50ICAgICAgID0gMDsKICAgICR1c2VfY291bnQgKz0gJHJrZXl3b3JkX2NvdW50LT57dXNlfSAgICAgaWYgJHJrZXl3b3JkX2NvdW50LT57dXNlfTsKICAgICR1c2VfY291bnQgKz0gJHJrZXl3b3JkX2NvdW50LT57cmVxdWlyZX0gaWYgJHJrZXl3b3JkX2NvdW50LT57cmVxdWlyZX07CgogICAgIyBNYWtlIGEgZ3Vlc3MgdXNpbmcgdGhlIGF2YWlsYWJsZSBjbHVlcy4gTm8gc2luZ2xlIGNsdWUgaXMgY29uY2x1c2l2ZS4KICAgIG15ICRzY29yZSA9IDA7CgogICAgIyBzdGFydGluZyBpbmRpY2F0b3JzCiAgICAkc2NvcmUgKz0gNTAKICAgICAgaWYgKCAkc2F3X2hhc2hfYmFuZwogICAgICAgIHx8ICRzZWxmLT5bX3Nhd191c2Vfc3RyaWN0X10KICAgICAgICB8fCAkc2F3X3BhY2thZ2UgKTsKCiAgICAkc2NvcmUgKz0KICAgICAgICAkdXNlX2NvdW50ID4gMSA/IDUwCiAgICAgIDogJHVzZV9jb3VudCA+IDAgPyAyNQogICAgICA6ICAgICAgICAgICAgICAgICAgMDsKCiAgICAjIGludGVyaW9yIGluZGljYXRvcnMKICAgICRzY29yZSArPQogICAgICAgICRsaW5lX2NvdW50ID4gNTAgPyA1MAogICAgICA6ICRsaW5lX2NvdW50ID4gMjUgPyAyNQogICAgICA6ICAgICAgICAgICAgICAgICAgICAwOwogICAgJHNjb3JlICs9CiAgICAgICAgJHN1Yl9jb3VudCA+IDEgPyA1MAogICAgICA6ICRzdWJfY291bnQgPiAwID8gMjUKICAgICAgOiAgICAgICAgICAgICAgICAgIDA7CgogICAgIyBjb21tb24gZmlsdGVyIGtleXdvcmRzCiAgICBmb3JlYWNoIChxdyggZXhpdCBwcmludCBwcmludGYgb3BlbiBzeXN0ZW0gZXhlYyBkaWUgKSkgewogICAgICAgIGlmICggJHJrZXl3b3JkX2NvdW50LT57JF99ICkgeyAkc2NvcmUgKz0gNTA7IGxhc3Q7IH0KICAgIH0KCiAgICAkc2NvcmUgKz0gNTAgaWYgJHJsaW5lX3R5cGVfY291bnQtPntQT0R9OwoKICAgICMgZW5kaW5nIGluZGljYXRvcgogICAgJHNjb3JlICs9IDUwIGlmICRzZWxmLT5bX3Nhd19FTkRfb3JfREFUQV9dOwoKICAgIGlmICggJHNjb3JlID49IDEwMCApIHsgcmV0dXJuIDEgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgaXNfY29tcGxldGVfc2NyaXB0Cgp1c2UgY29uc3RhbnQgREVCVUdfVVNFX0NPTlNUQU5UID0+IDA7CgpzdWIgZ2V0X3F3X2xpc3QgewogICAgbXkgKCAkc2VsZiwgJEtuICkgPSBAXzsKCiAgICAjIEdpdmVuOgogICAgIyAgJEtuID0gaW5kZXggb2Ygc3RhcnQgb2YgYSBxdyBxdW90ZQogICAgIyBSZXR1cm46CiAgICAjICAoJEtfbGFzdF9xLCBcQGxpc3QpIHRvIGxpc3Qgb2Ygd29yZHMsIG9yCiAgICAjICBub3RoaW5nIGlmIGVycm9yCgogICAgbXkgJHJMTCA9ICRzZWxmLT5bX3JMTF9dOwogICAgcmV0dXJuIHVubGVzcyBkZWZpbmVkKCRLbik7CiAgICBteSAkdHlwZV9uID0gJHJMTC0+WyRLbl0tPltfVFlQRV9dOwogICAgcmV0dXJuIHVubGVzcyAoICR0eXBlX24gZXEgJ3EnICk7CiAgICBteSAkdG9rZW5fbiAgPSAkckxMLT5bJEtuXS0+W19UT0tFTl9dOwogICAgbXkgJEtfbGFzdF9xID0gJEtuOwoKICAgICMgY29sbGVjdCBhIG11bHRpLWxpbmUgcXcKICAgIG15ICRzdHJpbmcgPSAkdG9rZW5fbjsKICAgIGZvcmVhY2ggbXkgJEtubiAoICRLbiArIDEgLi4gQHskckxMfSAtIDEgKSB7CiAgICAgICAgbXkgJHR5cGVfbm4gPSAkckxMLT5bJEtubl0tPltfVFlQRV9dOwogICAgICAgIG5leHQgaWYgKCAkdHlwZV9ubiBlcSAnYicgKTsKICAgICAgICBsYXN0IGlmICggJHR5cGVfbm4gbmUgJ3EnICk7CiAgICAgICAgJHN0cmluZyAuPSBTUEFDRSAuICRyTEwtPlskS25uXS0+W19UT0tFTl9dOwogICAgICAgICRLX2xhc3RfcSA9ICRLbm47CiAgICB9CgogICAgJHN0cmluZyA9IHN1YnN0ciggJHN0cmluZywgMiApOyAgICAgICAgIyByZW1vdmUgcXcKICAgICRzdHJpbmcgPX4gcy9eXHMqLy87ICAgICAgICAgICAgICAgICAgICMgdHJpbSBsZWZ0CiAgICAkc3RyaW5nID0gc3Vic3RyKCAkc3RyaW5nLCAxICk7ICAgICAgICAjIHJlbW92ZSBvcGVuaW5nIG1hcmsgY2hhcgogICAgJHN0cmluZyA9IHN1YnN0ciggJHN0cmluZywgMCwgLTEgKTsgICAgIyByZW1vdmUgY2xvc2luZyBtYXJrIGNoYXIKICAgICRzdHJpbmcgPX4gcy9eXHMqLy87ICAgICAgICAgICAgICAgICAgICMgdHJpbSBsZWZ0CiAgICAkc3RyaW5nID1+IHMvXHMqJC8vOyAgICAgICAgICAgICAgICAgICAjIHRyaW0gcmlnaHQKCiAgICBteSBAbGlzdCA9IHNwbGl0IC9ccysvLCAkc3RyaW5nOwogICAgcmV0dXJuICggJEtfbGFzdF9xLCBcQGxpc3QgKTsKfSAjIyBlbmQgc3ViIGdldF9xd19saXN0CgpzdWIgZXhwYW5kX3F1b3RlZF93b3JkX2xpc3QgewogICAgbXkgKCAkc2VsZiwgJEtiZWcgKSA9IEBfOwoKICAgICMgRXhwYW5kIGEgbGlzdCBxdW90ZWQgd29yZHMKICAgICMgR2l2ZW46CiAgICAjICAgJEtiZWcgPSBpbmRleCBvZiB0aGUgc3RhcnQgb2YgYSBsaXN0IG9mIHF1b3RlZCB3b3JkcwogICAgIyBSZXR1cm5zOgogICAgIyAgIHJlZiB0byBsaXN0IGlmIGZvdW5kIHdvcmRzCiAgICAjICAgdW5kZWYgaWYgbm90IHN1Y2Nlc3NmdWwsIG9yIG5vbi1jb25zdGFudCBsaXN0IGl0ZW0gZW5jb3VudGVyZWQKICAgIG15ICRyTEwgPSAkc2VsZi0+W19yTExfXTsKICAgIHJldHVybiB1bmxlc3MgZGVmaW5lZCgkS2JlZyk7CiAgICBteSAkS2xpbWl0ID0gQHskckxMfSAtIDE7CiAgICBteSBAbGlzdDsKICAgIG15ICRLbiA9ICRLYmVnIC0gMTsKICAgIHdoaWxlICggKyskS24gPD0gJEtsaW1pdCApIHsKCiAgICAgICAgbXkgJHR5cGUgID0gJHJMTC0+WyRLbl0tPltfVFlQRV9dOwogICAgICAgIG15ICR0b2tlbiA9ICRyTEwtPlskS25dLT5bX1RPS0VOX107CgogICAgICAgIG5leHQgaWYgKCAkdHlwZSBlcSAnYicgKTsKICAgICAgICBuZXh0IGlmICggJHR5cGUgZXEgJyMnICk7CiAgICAgICAgbmV4dCBpZiAoICR0b2tlbiBlcSAnKCcgKTsKICAgICAgICBuZXh0IGlmICggJHRva2VuIGVxICcpJyApOwogICAgICAgIG5leHQgaWYgKCAkdG9rZW4gZXEgJywnICk7CiAgICAgICAgbGFzdCBpZiAoICR0eXBlIGVxICc7JyApOwogICAgICAgIGxhc3QgaWYgKCAkdG9rZW4gZXEgJ30nICk7CgogICAgICAgIGlmICggJHR5cGUgZXEgJ3EnICkgewoKICAgICAgICAgICAgIyBxdyBsaXN0CiAgICAgICAgICAgIG15ICggJEtfbGFzdF9xLCAkcmxpc3QgKSA9ICRzZWxmLT5nZXRfcXdfbGlzdCgkS24pOwogICAgICAgICAgICByZXR1cm4gaWYgKCAhZGVmaW5lZCgkS19sYXN0X3EpICk7CiAgICAgICAgICAgIGlmICggJEtfbGFzdF9xID4gJEtuICkgeyAkS24gPSAkS19sYXN0X3EgfQogICAgICAgICAgICBwdXNoIEBsaXN0LCBAeyRybGlzdH07CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJHR5cGUgZXEgJ1EnICkgewoKICAgICAgICAgICAgIyBzaW5nbGUgcXVvdGVkIHdvcmQKICAgICAgICAgICAgbmV4dCBpZiAoIGxlbmd0aCgkdG9rZW4pIDwgMyApOwogICAgICAgICAgICBteSAkbmFtZSA9IHN1YnN0ciggJHRva2VuLCAxLCAtMSApOwogICAgICAgICAgICBwdXNoIEBsaXN0LCAkbmFtZTsKICAgICAgICB9CgogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBHaXZlIHVwIG9uIGFueXRoaW5nIGVsc2UuLgogICAgICAgICAgICAjIHNvbWUgZXhhbXBsZXMgd2hlcmUgd2UgaGF2ZSB0byBxdWl0OgogICAgICAgICAgICAjICBARVhQT1JUID0gQXJjaGl2ZTo6VGFyOjpDb25zdGFudC0+X2xpc3RfY29uc3RzKCBfX1BBQ0tBR0VfXyApOwogICAgICAgICAgICAjICBARVhQT1JUID0gKCBAQ09OU1RBTlRTLCBxdyggJUFMTF9DT0RFU0VUUykpOwogICAgICAgICAgICAjICBARVhQT1JUID0gKCBAeyRFWFBPUlRfVEFHU3tzdGFuZGFyZH19LCAuLgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfSAjIyBlbmQgd2hpbGUgKCArKyRLbiA8PSAkS2xpbWl0ICkKICAgIHJldHVybiBcQGxpc3Q7Cgp9ICMjIGVuZCBzdWIgZXhwYW5kX3F1b3RlZF93b3JkX2xpc3QKCnN1YiBleHBhbmRfRVhQT1JUX2xpc3QgewogICAgbXkgKCAkc2VsZiwgJEtLLCAkcmhhc2ggKSA9IEBfOwoKICAgICMgR2l2ZW46CiAgICAjICAkS0sgPSBpbmRleCBvZiB2YXJpYWJsZSBARVhQT1JUIG9yIEBFWFBPUlRfT0sKICAgICMgICRyaGFzaCA9IGEgaGFzaCB0byBmaWxsCiAgICAjIFRhc2s6CiAgICAjICBVcGRhdGUgJHJoYXNoIHdpdGggYW55IHF1b3RlZCB3b3JkcyB3aGljaCBmb2xsb3cgYW55IHN1YnNlcXVlbnQgJz0nCgogICAgbXkgJHJMTCA9ICRzZWxmLT5bX3JMTF9dOwogICAgbXkgJEtuICA9ICRzZWxmLT5LX25leHRfY29kZSgkS0spOwoKICAgICMgUmVxdWlyZSBhIGZvbGxvd2luZyAnPScKICAgIHJldHVybiB1bmxlc3MgKCAkS24gJiYgJHJMTC0+WyRLbl0tPltfVFlQRV9dIGVxICc9JyApOwoKICAgICMgTW92ZSB0byB0aGUgbmV4dCB0b2tlbgogICAgJEtuID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLbik7CiAgICByZXR1cm4gdW5sZXNzICgkS24pOwoKICAgICMgR2V0IGFueSBsaXN0CiAgICBteSAkcmxpc3QgPSAkc2VsZi0+ZXhwYW5kX3F1b3RlZF93b3JkX2xpc3QoJEtuKTsKICAgIHJldHVybiB1bmxlc3MgKCRybGlzdCk7CgogICAgIyBJbmNsdWRlIHRoZSBsaXN0ZWQgd29yZHMgaW4gdGhlIGhhc2gKICAgIGZvcmVhY2ggKCBAeyRybGlzdH0gKSB7ICRyaGFzaC0+eyRffSA9IDEgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgZXhwYW5kX0VYUE9SVF9saXN0CgpzdWIgc2Nhbl92YXJpYWJsZV91c2FnZSB7CgogICAgbXkgKCAkc2VsZiwgKCRyb3B0aW9uKSApID0gQF87CgogICAgIyBTY2FuIGZvciB1bnVzZWQgYW5kIHJldXNlZCBsZXhpY2FsIHZhcmlhYmxlcyBpbiBhIHNpbmdsZSBzd2VlcC4KCiAgICAjIEdpdmVuOgogICAgIyAgICRyb3B0aW9uID0gYW4gb3B0aW9uYWwgc2V0IG9mIHR5cGVzIG9mIGNoZWNrcywKICAgICMgICAgICAgICAgICAgIGFsbCBjaGVja3MgYXJlIG1hZGUgaWYgbm90IGdpdmVuCiAgICAjIFJldHVybjoKICAgICMgICAtIG5vdGhpbmcgaWYgbm8gZXJyb3JzIGZvdW5kCiAgICAjICAgLSByZWYgdG8gYSBsaXN0IG9mICd3YXJuaW5ncycsIG9uZSBwZXIgdmFyaWFibGUsIGluIGxpbmUgb3JkZXIuCiAgICAjICAgICBFYWNoIGxpc3QgaXRlbSBpcyBhIGhhc2ggb2YgdmFsdWVzIGRlc2NyaWJpbmcgdGhlIGlzc3VlLiBUaGVzZQogICAgIyAgICAgYXJlIHN0b3JlZCBpbiBhIGxpc3Qgb2YgaGFzaCByZWZzLCBhcyBmb2xsb3dzOgogICAgIyAgICAgICAgcHVzaCBAd2FybmluZ3MsCiAgICAjICAgICAgICAgIHsKICAgICMgICAgICAgICAgICBuYW1lICAgICAgICA9PiAkbmFtZSwgICAgICAgICMgbmFtZSwgc3VjaCBhcyAnJHZhcicsICclZGF0YScKICAgICMgICAgICAgICAgICBsaW5lX251bWJlciA9PiAkbGluZV9udW1iZXIsICMgbGluZSBudW1iZXIgd2hlcmUgZGVmaW5lZAogICAgIyAgICAgICAgICAgIEsgICAgICAgICAgID0+ICRLSywgICAgICAgICAgIyBpbmRleCBvZiB0b2tlbiAkbmFtZQogICAgIyAgICAgICAgICAgIGtleXdvcmQgICAgID0+ICRrZXl3b3JkLCAgICAgIyAnbXknLCAnc3RhdGUnLCAnZm9yJywgJ2ZvcmVhY2gnCiAgICAjICAgICAgICAgICAgbGV0dGVyICAgICAgPT4gJGxldHRlciwgICAgICAjIG9uZSBvZjogciBzIHAgdQogICAgIyAgICAgICAgICAgIG5vdGUgICAgICAgID0+ICRub3RlLCAgICAgICAgIyBhZGRpdGlvbmFsIHRleHQgaW5mbwogICAgIyAgICAgICAgICAgIHNlZV9saW5lICAgID0+ICRzZWVfbGluZSwgICAgIyBsaW5lIHJlZmVyZW5jZWQgaW4gbm90ZQogICAgIyAgICAgICAgICB9OwoKICAgIG15ICRyTEwgICAgICAgICAgICAgICAgICA9ICRzZWxmLT5bX3JMTF9dOwogICAgbXkgJHJsaW5lcyAgICAgICAgICAgICAgID0gJHNlbGYtPltfcmxpbmVzX107CiAgICBteSAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8gPSAkc2VsZi0+W19yYmxvY2tfdHlwZV9vZl9zZXFub19dOwogICAgbXkgJHJpc19zdWJfYmxvY2sgICAgICAgID0gJHNlbGYtPltfcmlzX3N1Yl9ibG9ja19dOwogICAgbXkgJEtfY2xvc2luZ19jb250YWluZXIgID0gJHNlbGYtPltfS19jbG9zaW5nX2NvbnRhaW5lcl9dOwoKICAgICMgY2hlY2sgZm9yIGZpbGUgd2l0aG91dCBjb2RlIChjb3VsZCBiZSBhbGwgcG9kIG9yIGNvbW1lbnRzKQogICAgcmV0dXJuIHVubGVzcyBkZWZpbmVkKCAkc2VsZi0+S19maXJzdF9jb2RlKCkgKTsKCiAgICAjIGlzc3VlcyBhcmUgaW5kaWNhdGVkIGJ5IHRoZXNlIG5hbWVzOgogICAgbXkgJXVudXN1YWxfdmFyaWFibGVfaXNzdWVfbm90ZSA9ICgKICAgICAgICBjID0+ICJ1bnVzZWQgY29uc3RhbnQiLAogICAgICAgIHAgPT4gInBhY2thZ2UgY3Jvc3NpbmciLAogICAgICAgIHIgPT4gInJldXNlZCIsCiAgICAgICAgcyA9PiAibXVsdGktc2lnaWwiLAogICAgICAgIHUgPT4gInVudXNlZCBsZXhpY2FsIiwKICAgICk7CgogICAgIyBEZWZhdWx0IGlzIHRvIGRvIGFsbCBjaGVja3MgaWYgbm8gY29udHJvbCBoYXNoIHJlY2VpdmVkIChkdW1wIG1vZGUpCiAgICBpZiAoICFkZWZpbmVkKCRyb3B0aW9uKSApIHsKICAgICAgICBmb3JlYWNoIG15ICRrZXkgKCBrZXlzICV1bnVzdWFsX3ZhcmlhYmxlX2lzc3VlX25vdGUgKSB7CiAgICAgICAgICAgICRyb3B0aW9uLT57JGtleX0gPSAxOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkaXNzdWVfdHlwZV9zdHJpbmcgPSAiSXNzdWUgdHlwZXMgYXJlIjsKICAgIGZvcmVhY2ggbXkgJGxldHRlciAoIHJldmVyc2Ugc29ydCBrZXlzICV1bnVzdWFsX3ZhcmlhYmxlX2lzc3VlX25vdGUgKSB7CiAgICAgICAgbmV4dCBpZiAoICEkcm9wdGlvbi0+eyRsZXR0ZXJ9ICk7CiAgICAgICAgbXkgJHR4dCA9ICR1bnVzdWFsX3ZhcmlhYmxlX2lzc3VlX25vdGV7JGxldHRlcn07CiAgICAgICAgJGlzc3VlX3R5cGVfc3RyaW5nIC49ICIgJyRsZXR0ZXInPSR0eHQiOwogICAgfQoKICAgICMgVW5wYWNrIHRoZSBjb250cm9sIGhhc2gKICAgIG15ICRjaGVja19zaWdpbCAgICAgICAgID0gJHJvcHRpb24tPnsncyd9OwogICAgbXkgJGNoZWNrX2Nyb3NzX3BhY2thZ2UgPSAkcm9wdGlvbi0+eydwJ307CiAgICBteSAkY2hlY2tfdW51c2VkICAgICAgICA9ICRyb3B0aW9uLT57J3UnfTsKICAgIG15ICRjaGVja19yZXVzZWQgICAgICAgID0gJHJvcHRpb24tPnsncid9OwogICAgbXkgJGNoZWNrX2NvbnN0YW50ICAgICAgPSAkcm9wdGlvbi0+eydjJ307CgogICAgbXkgJWlzX3ZhbGlkX3NpZ2lsID0gKCAnJCcgPT4gMSwgJ0AnID0+IDEsICclJyA9PiAxICk7CgogICAgIyBWYXJpYWJsZXMgZGVmaW5pbmcgY3VycmVudCBzdGF0ZToKICAgIG15ICRjdXJyZW50X3BhY2thZ2UgPSAnbWFpbic7CgogICAgIyBUaGUgYmFzaWMgaWRlYSBvZiB0aGlzIHJvdXRpbmUgaXMgc3RyYWlnaHRmb3J3YXJkOgogICAgIyAtIFdlIGNyZWF0ZSBhIHN0YWNrIG9mIGJsb2NrIGJyYWNlcwogICAgIyAtIFdlIHdhbGsgdGhyb3VnaCB0aGUgdG9rZW5zIGluIHRoZSBmaWxlCiAgICAjIC0gQXQgYW4gb3BlbmluZyBibG9jayBicmFjZSwgd2UgcHVzaCBhIG5ldyBzdGFjayBlbnRyeQogICAgIyAtIEF0IGEgY2xvc2luZyBibG9jayBicmFjZSwgd2UgcG9wIHRoZSBzdGFjaywKICAgICMgICAgIGFuZCBjaGVjayB0aGUgY291bnQgb2YgYW55ICdteScgdmFycyAoaXNzdWUgJ3UnKQogICAgIyAtIEF0IGFuIGlkZW50aWZpZXIsIGxpa2UgJyR2YXInOgogICAgIyAgIC0gaWYgaXQgZm9sbG93cyBhICdteScgd2UgZW50ZXIgaXQgb24gdGhlIHN0YWNrIHdpdGggc3RhcnRpbmcgY291bnQgMAogICAgIyAgICAgY2hlY2sgY29uZmxpY3RzIHdpdGggYW55IG90aGVyIHZhcnMgb24gdGhlIHN0YWNrIChpc3N1ZXMgJ3InIGFuZCAncycpCiAgICAjICAgLSBvdGhlcndpc2UsIHdlIHNlZSBpZiB0aGUgdmFyaWFibGUgaXMgaW4gdGhlIHN0YWNrLCBhbmQgaWYgc28sCiAgICAjICAgICB1cGRhdGUgdGhlIGNvdW50CiAgICAjIC0gQXQgYSBwYWNrYWdlLCB3ZSBzZWUgaWYgaXQgaGFzIGFjY2VzcyB0byBleGlzdGluZyAnbXknIHZhcnMgKGlzc3VlICdwJykKCiAgICAjIFRoZXJlIGFyZSBsb3RzIG9mIGRldGFpbHMsIGJ1dCB0aGF0J3MgdGhlIG1haW4gaWRlYS4gQSBkaWZmaWN1bHR5IGlzCiAgICAjIHdoZW4gJ215JyB2YXJzIGFyZSBjcmVhdGVkIGluIHRoZSBjb250cm9sIHNlY3Rpb24gb2YgYmxvY2tzIHN1Y2ggYXMKICAgICMgZm9yLCBmb3JlYWNoLCBpZiwgdW5sZXNzLCAuLiB0aGVzZSBmb2xsb3cgc3BlY2lhbCBydWxlcy4gVGhlCiAgICAjIHdheSBpdCBpcyBkb25lIGhlcmUgaXMgdG8gcHJvcGFnYXRlIHN1Y2ggdmFycyBpbiBhIHNwZWNpYWwgY29udHJvbAogICAgIyBsYXllciBzdGFjayBlbnRyeSB3aGljaCBpcyBwdXNoZWQgb24ganVzdCBiZWZvcmUgdGhlc2UgYmxvY2tzLgoKICAgIG15ICRyYmxvY2tfc3RhY2sgICA9IFtdOwogICAgbXkgJHJjb25zdGFudF9oYXNoID0ge307CiAgICBteSAkcnVzZV92YXJzX2hhc2ggPSB7fTsKICAgIG15ICRyRVhQT1JUX2hhc2ggICA9IHt9OwoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgc3ViIHRvIHB1c2ggYSBibG9jayBicmFjZSBvbiB0aGUgc3RhY2sKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIG15ICRwdXNoX2Jsb2NrX3N0YWNrID0gc3ViIHsKICAgICAgICBteSAoICRzZXFubywgJHJ2YXJzICkgPSBAXzsKCiAgICAgICAgIyBwdXNoIGFuIGVudHJ5IGZvciBhIG5ldyBibG9jayBvbnRvIHRoZSBibG9jayBzdGFjazoKICAgICAgICAjIEdpdmVuOgogICAgICAgICMgICRzZXFubyAgID0gdGhlIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgY29kZSBibG9jawogICAgICAgICMgICRydmFycyAgID0gaGFzaCBvZiBpbml0aWFsIGlkZW50aWZpZXJzIGZvciB0aGUgYmxvY2ssIGlmIGdpdmVuCiAgICAgICAgIyAgICAgICAgICAgICB3aWxsIGJlIGVtcHR5IGhhc2ggcmVmIGlmIG5vdCBnaXZlbgogICAgICAgIGlmICggIWRlZmluZWQoJHJ2YXJzKSApIHsgJHJ2YXJzID0ge30gfQoKICAgICAgICBwdXNoIEB7JHJibG9ja19zdGFja30sCiAgICAgICAgICB7IHNlcW5vID0+ICRzZXFubywgcGFja2FnZSA9PiAkY3VycmVudF9wYWNrYWdlLCBydmFycyA9PiAkcnZhcnMgfTsKICAgICAgICByZXR1cm47CiAgICB9OyAjIyBlbmQgJHB1c2hfYmxvY2tfc3RhY2sgPSBzdWIKCiAgICAkcHVzaF9ibG9ja19zdGFjay0+KFNFUV9ST09UKTsKCiAgICAjICRyaGFzaCBob2xkcyBhbGwgbGV4ZWNhbCB2YXJpYWJsZXMgZGVmaW5lZCB3aXRoaW4gYSBnaXZlbiBibG9jazoKICAgICMgICAkcmhhc2gtPnsKICAgICMgICAgJG5hbWUgPT4gewogICAgIyAgICAgICAgY291bnQgICAgICA9PiAkY291bnQsCiAgICAjICAgICAgICBsaW5lX2luZGV4ID0+ICRsaW5lX2luZGV4LAogICAgIyAgICAgICAga2V5d29yZCAgICA9PiAka2V5d29yZCwKICAgICMgICAgICAgIHBhY2thZ2UgICAgPT4gJHBhY2thZ2UsCiAgICAjICAgICAgICBLICAgICAgICAgID0+ICRLSwogICAgIyAgICB9CiAgICAjICAgfTsKICAgICMgICAkbmFtZSA9IHRoZSB2YXJpYWJsZSBuYW1lLCBzdWNoIGFzICckZGF0YScsICdAbGlzdCcsICcldmFycycsCiAgICAjICAgJGNvdW50ID0gIG51bWJlciBvZiB1c2VzCiAgICAjICAgJGxpbmVfaW5kZXggPSBpbmRleCBvZiB0aGUgbGluZSB3aGVyZSBpdCBpcyBkZWZpbmVkCiAgICAjICAgJGtleXdvcmQgPSAnbXknIG9yICdzdGF0ZScgb3IgJ2Zvcicgb3IgJ2ZvcmVhY2gnCiAgICAjICAgJHBhY2thZ2UgPSB3aGF0IHBhY2thZ2Ugd2FzIGluIGVmZmVjdCB3aGVuIGl0IHdhcyBkZWZpbmVkCiAgICAjICAgJEtLID0gdG9rZW4gaW5kZXggKGZvciBzb3J0aW5nKQoKICAgICMgVmFyaWFibGVzIGZvciBhIGJhdGNoIG9mIGxleGljYWwgdmFycyBiZWluZyBjb2xsZWN0ZWQ6CiAgICBteSAkbXlfa2V5d29yZDsgICAgICAgICAgICAgICAgICMgJ3N0YXRlJyBvciAnbXknIGtleXdvcmQgZm9yIHRoaXMgc2V0CiAgICBteSAkS19lbmRfbXkgICAgICAgICAgID0gLTE7ICAgICMgbWF4IHRva2VuIGluZGV4IG9mIHRoaXMgc2V0CiAgICBteSAkaW5fc2lnbmF0dXJlX3NlcW5vID0gMDsgICAgICMgdHJ1ZSB3aGlsZSBzY2FubmluZyBhIHNpZ25hdHVyZQogICAgbXkgJG15X3N0YXJ0aW5nX2NvdW50ICA9IDA7ICAgICAjIHRoZSBpbml0aWFsIHRva2VuIGNvdW50IGZvciB0aGlzIHNldAoKICAgICMgVmFyaWFibGVzIGZvciB3YXJuaW5nIG1lc3NhZ2VzOgogICAgbXkgQHdhcm5pbmdzOyAgICAgICAgICAgICAgICAgICAjIGFycmF5IG9mIHdhcm5pbmcgbWVzc2FnZXMKICAgIG15ICVwYWNrYWdlX3dhcm5pbmdzOyAgICAgICAgICAgIyB3YXJuaW5nIG1lc3NhZ2VzIGZvciBwYWNrYWdlIGNyb3NzLW92ZXIKICAgIG15ICVzdWJfY291bnRfYnlfcGFja2FnZTsgICAgICAgIyBob3cgbWFueSBzdWJzIGRlZmluZWQgaW4gYSBwYWNrYWdlCgogICAgIyBWYXJpYWJsZXMgZm9yIHNjYW5uaW5nIGludGVycG9sYXRlZCBxdW90ZXM6CiAgICBteSAkaXhfSEVSRV9FTkQgPSAtMTsgICAgICAgICAjIHRoZSBsaW5lIGluZGV4IG9mIHRoZSBsYXN0IGhlcmUgdGFyZ2V0IHJlYWQKICAgIG15ICRpbl9pbnRlcnBvbGF0ZWRfcXVvdGU7ICAgICMgaW4gbXVsdGlsaW5lIHF1b3RlIHdpdGggaW50ZXJwb2xhdGlvbj8KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBzdWIgdG8gY2hlY2sgZm9yIG92ZXJsYXBwaW5nIHVzYWdlLCBpc3N1ZXMgJ3InIGFuZCAncycKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBteSAkY2hlY2tfZm9yX292ZXJsYXBwaW5nX3ZhcmlhYmxlcyA9IHN1YiB7CgogICAgICAgIG15ICggJG5hbWUsICRLSyApID0gQF87CgogICAgICAgICMgR2l2ZW46CiAgICAgICAgIyAgICRuYW1lID0gYSB2YXJpYWJsZSB3aXRoIHNpZ2lsLCBzdWNoIGFzICckdmFyJywgJyV2YXInLCAnQHZhcic7CiAgICAgICAgIyAgICRLSyAgID0gaW5kZXggYXNzb2NpYXRlZCB3aXRoIHRoaXMgdmFyaWFibGUKICAgICAgICAjICAgJGxpbmVfaW5kZXggPSBpbmRleCBvZiBsaW5lIHdoZXJlIHRoaXMgbmFtZSBmaXJzdCBhcHBlYXJzCiAgICAgICAgIyBUYXNrOgogICAgICAgICMgICBDcmVhdGUgYSB3YXJuaW5nIGlmIHRoaXMgb3ZlcmxhcHMgYSBwcmV2aW91c2x5IGRlZmluZWQgdmFyaWFibGUKICAgICAgICAjIFJldHVybnM6CiAgICAgICAgIyAgIHRydWUgaWYgZXJyb3IsIHZhcmlhYmxlIGlzIG5vdCBvZiBleHBlY3RlZCBmb3JtIHdpdGggc2lnaWwKICAgICAgICAjICAgZmFsc2UgaWYgbm8gZXJyb3IKCiAgICAgICAgbXkgJHNpZ2lsID0gRU1QVFlfU1RSSU5HOwogICAgICAgIG15ICR3b3JkICA9IEVNUFRZX1NUUklORzsKICAgICAgICBpZiAoICRuYW1lID1+IC9eKFxXKykoXHcrKSQvICkgewogICAgICAgICAgICAkc2lnaWwgPSAkMTsKICAgICAgICAgICAgJHdvcmQgID0gJDI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBnaXZlIHVwLCBmbGFnIGFzIGVycm9yCiAgICAgICAgICAgICMgY291bGQgYmUgc29tZXRoaW5nIGxpa2UgJyQnIG9yICdAJyBpbiBhIHNpZ25hdHVyZSwgb3IKICAgICAgICAgICAgIyBmb3IgJFN0b3JhYmxlOjpkb3duZ3JhZGVfcmVzdHJpY3RlZCAoMCwgMSwgLi4uCiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KCiAgICAgICAgIyBQZXJmb3JtIGNoZWNrcyBmb3IgcmV1c2VkIG5hbWVzCiAgICAgICAgbXkgQHNpZ2lsc190b190ZXN0OwogICAgICAgIGlmICgkY2hlY2tfc2lnaWwpIHsKICAgICAgICAgICAgaWYgKCRjaGVja19yZXVzZWQpIHsKICAgICAgICAgICAgICAgIEBzaWdpbHNfdG9fdGVzdCA9IChxdyggJCBAICUgKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRzaWcgKHF3KCAkIEAgJSApKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkc2lnIG5lICRzaWdpbCApIHsgcHVzaCBAc2lnaWxzX3RvX3Rlc3QsICRzaWc7IH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNpZiAoJGNoZWNrX3JldXNlZCkgewogICAgICAgICAgICBwdXNoIEBzaWdpbHNfdG9fdGVzdCwgJHNpZ2lsOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIyBuZWl0aGVyCiAgICAgICAgfQoKICAgICAgICAjIFNlZSBpZiB0aGlzIG5hbWUgaGFzIGJlZW4gc2VlbiwgcG9zc2libHkgd2l0aCBhIGRpZmZlcmVudCBzaWdpbAogICAgICAgIGlmIChAc2lnaWxzX3RvX3Rlc3QpIHsKCiAgICAgICAgICAgICMgTG9vayBhdCBzdGFjayBhbmQgJ3VzZSB2YXJzJyBoYXNoCiAgICAgICAgICAgIGZvcmVhY2gKICAgICAgICAgICAgICBteSAkaXRlbSAoIEB7JHJibG9ja19zdGFja30sICRydXNlX3ZhcnNfaGFzaC0+eyRjdXJyZW50X3BhY2thZ2V9ICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICMgZGlzdGluZ3Vpc2ggYmV0d2VlbiBzdGFjayBpdGVtIGFuZCB1c2UgdmFycyBpdGVtCiAgICAgICAgICAgICAgICBteSAkcmhhc2ggPSBkZWZpbmVkKCAkaXRlbS0+e3NlcW5vfSApID8gJGl0ZW0tPntydmFyc30gOiAkaXRlbTsKCiAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRzaWcgKEBzaWdpbHNfdG9fdGVzdCkgewogICAgICAgICAgICAgICAgICAgIG15ICR0ZXN0X25hbWUgPSAkc2lnIC4gJHdvcmQ7CgogICAgICAgICAgICAgICAgICAgIG5leHQgdW5sZXNzICggJHJoYXNoLT57JHRlc3RfbmFtZX0gKTsKICAgICAgICAgICAgICAgICAgICBteSAkZmlyc3RfbGluZSA9ICRyaGFzaC0+eyR0ZXN0X25hbWV9LT57bGluZV9pbmRleH0gKyAxOwogICAgICAgICAgICAgICAgICAgIG15ICRsZXR0ZXI7CiAgICAgICAgICAgICAgICAgICAgbXkgJG5vdGU7CiAgICAgICAgICAgICAgICAgICAgbXkgJHNlZV9saW5lID0gMDsKICAgICAgICAgICAgICAgICAgICBpZiAoICRzaWcgZXEgJHNpZ2lsICkgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkYXNfaXRlcmF0b3IgPQogICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQoJG15X2tleXdvcmQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCAkbXlfa2V5d29yZCBlcSAnZm9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgJG15X2tleXdvcmQgZXEgJ2ZvcmVhY2gnICkKICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcgYXMgaXRlcmF0b3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgICAgICAgICAgICAgICRub3RlICAgPSAicmV1c2VkJGFzX2l0ZXJhdG9yIC0gc2VlIGxpbmUgJGZpcnN0X2xpbmUiOwogICAgICAgICAgICAgICAgICAgICAgICAkbGV0dGVyID0gJ3InOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHNlZV9saW5lID0gJGZpcnN0X2xpbmU7CiAgICAgICAgICAgICAgICAgICAgICAgICRub3RlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAib3ZlcmxhcHMgJHRlc3RfbmFtZSBpbiBzY29wZSAtIHNlZSBsaW5lICRzZWVfbGluZSI7CiAgICAgICAgICAgICAgICAgICAgICAgICRsZXR0ZXIgPSAncyc7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBteSAkbGluZV9pbmRleCA9ICRyTEwtPlskS0tdLT5bX0xJTkVfSU5ERVhfXTsKICAgICAgICAgICAgICAgICAgICBwdXNoIEB3YXJuaW5ncywKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSAgICAgICAgPT4gJG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmQgICAgID0+ICRteV9rZXl3b3JkLAogICAgICAgICAgICAgICAgICAgICAgICBub3RlICAgICAgICA9PiAkbm90ZSwKICAgICAgICAgICAgICAgICAgICAgICAgc2VlX2xpbmUgICAgPT4gJHNlZV9saW5lLAogICAgICAgICAgICAgICAgICAgICAgICBsaW5lX251bWJlciA9PiAkbGluZV9pbmRleCArIDEsCiAgICAgICAgICAgICAgICAgICAgICAgIGxldHRlciAgICAgID0+ICRsZXR0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIEsgICAgICAgICAgID0+ICRLSywKICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9OyAjIyBlbmQgJGNoZWNrX2Zvcl9vdmVybGFwcGluZ192YXJpYWJsZXMgPSBzdWIKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgc3ViIHRvIGNoZWNraW4gYSBuZXcgaWRlbnRpZmllcgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBteSAkY2hlY2tpbl9uZXdfbGV4aWNhbCA9IHN1YiB7CiAgICAgICAgbXkgKCRLSykgPSBAXzsKCiAgICAgICAgIyBTdG9yZSB0aGUgbmV3IGlkZW50aWZpZXIgYXQgaW5kZXggJEtLCgogICAgICAgIG15ICRuYW1lICAgICAgID0gJHJMTC0+WyRLS10tPltfVE9LRU5fXTsKICAgICAgICBteSAkbGluZV9pbmRleCA9ICRyTEwtPlskS0tdLT5bX0xJTkVfSU5ERVhfXTsKCiAgICAgICAgIyBTcGVjaWFsIGNoZWNrcyBmb3Igc2lnbmF0dXJlIHZhcmlhYmxlcwogICAgICAgIGlmICgkaW5fc2lnbmF0dXJlX3NlcW5vKSB7CgogICAgICAgICAgICAjIG11c3QgYmUgaW4gdG9wIHNpZ25hdHVyZSBsYXllcgogICAgICAgICAgICBteSAkcGFyZW50ID0gJHNlbGYtPnBhcmVudF9zZXFub19ieV9LKCRLSyk7CiAgICAgICAgICAgIHJldHVybiBpZiAoICRwYXJlbnQgIT0gJGluX3NpZ25hdHVyZV9zZXFubyApOwoKICAgICAgICAgICAgIyBtdXN0IGJlIHByZWNlZGVkIGJ5IGEgY29tbWEgb3Igb3BlbmluZyBwYXJlbgogICAgICAgICAgICBteSAkS3AgPSAkc2VsZi0+S19wcmV2aW91c19jb2RlKCRLSyk7CiAgICAgICAgICAgIHJldHVybiBpZiAoICEkS3AgKTsKICAgICAgICAgICAgbXkgJHRva2VuX3AgPSAkckxMLT5bJEtwXS0+W19UT0tFTl9dOwogICAgICAgICAgICBteSAkdHlwZV9wICA9ICRyTEwtPlskS3BdLT5bX1RZUEVfXTsKICAgICAgICAgICAgcmV0dXJuIGlmICggJHR5cGVfcCBuZSAnLCcgJiYgJHRva2VuX3AgbmUgJygnICk7CiAgICAgICAgfQoKICAgICAgICBteSAkYmFkX25hbWUgPSAkY2hlY2tfZm9yX292ZXJsYXBwaW5nX3ZhcmlhYmxlcy0+KCAkbmFtZSwgJEtLICk7CiAgICAgICAgcmV0dXJuIGlmICgkYmFkX25hbWUpOwoKICAgICAgICAjIFN0b3JlIHRoaXMgbGV4aWNhbCB2YXJpYWJsZQogICAgICAgIG15ICRyaGFzaCA9ICRyYmxvY2tfc3RhY2stPlstMV0tPntydmFyc307CiAgICAgICAgJHJoYXNoLT57JG5hbWV9ID0gewogICAgICAgICAgICBjb3VudCAgICAgID0+ICRteV9zdGFydGluZ19jb3VudCwKICAgICAgICAgICAgbGluZV9pbmRleCA9PiAkbGluZV9pbmRleCwKICAgICAgICAgICAga2V5d29yZCAgICA9PiAkbXlfa2V5d29yZCwKICAgICAgICAgICAgcGFja2FnZSAgICA9PiAkY3VycmVudF9wYWNrYWdlLAogICAgICAgICAgICBLICAgICAgICAgID0+ICRLSywKICAgICAgICB9OwogICAgICAgIHJldHVybjsKICAgIH07ICMjIGVuZCAkY2hlY2tpbl9uZXdfbGV4aWNhbCA9IHN1YgoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBzdWIgdG8gdXBkYXRlIGNvdW50cyBmb3IgYSBsaXN0IG9mIHZhcmlhYmxlIG5hbWVzCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIG15ICR1cGRhdGVfdXNlX2NvdW50ID0gc3ViIHsKICAgICAgICBteSAoICRzaWdpbF9zdHJpbmcsICR3b3JkLCAkYnJhY2tldCApID0gQF87CgogICAgICAgICMgR2l2ZW46CiAgICAgICAgIyAgICRzaWdpbF9zdHJpbmcgPSBhIHN0cmluZyBvZiBsZWFkaW5nIHNpZ2lscywgbGlrZSAnJCcsICckJCcsICdAJCQnCiAgICAgICAgIyAgICR3b3JkICAgICAgICAgPSB0aGUgZm9sbG93aW5nIGJhcmV3b3JkCiAgICAgICAgIyAgICRicmFja2V0ICAgICAgPSBhIGZvbGxvd2luZyBhcnJheSBvciBoYXNoIGJyYWNrZXQgb3IgYnJhY2UsIGlmIGFueQogICAgICAgICMgICAgICAgICAgICAgICAgICAgKHRva2VuIHR5cGVzICdbJyBhbmQgJ0wnKQogICAgICAgICMgICBOb3RlOiBhbnkgYnJhY2VzIGFyb3VuZCB0aGUgYmFyZXdvcmQgbXVzdCBoYXZlIGJlZW4gc3RyaXBwZWQKICAgICAgICAjICAgYnkgdGhlIGNhbGxlcgogICAgICAgICMgVGFzazoKICAgICAgICAjICAgRm9ybSB0aGUgaGFzaCBrZXkgKCR3b3JkLCBAd29yZCwgb3IgJXdvcmQpIGFuZCB1cGRhdGUgdGhlIGNvdW50CgogICAgICAgIHJldHVybiB1bmxlc3MgKCRjaGVja191bnVzZWQpOwoKICAgICAgICByZXR1cm4gdW5sZXNzICggZGVmaW5lZCgkc2lnaWxfc3RyaW5nKSAmJiBkZWZpbmVkKCR3b3JkKSApOwoKICAgICAgICBteSAkc2lnaWwgPSBzdWJzdHIoICRzaWdpbF9zdHJpbmcsIC0xLCAxICk7CiAgICAgICAgcmV0dXJuIHVubGVzcyAoICRpc192YWxpZF9zaWdpbHskc2lnaWx9ICk7CgogICAgICAgICMgRXhhbXBsZXM6CiAgICAgICAgIyBpbnB1dCAgICAgPT4ga2V5CiAgICAgICAgIyAkdmFyICAgICAgICAgJHZhcgogICAgICAgICMgQHZhciAgICAgICAgIEB2YXIKICAgICAgICAjICR2YXJbICAgICAgICBAdmFyCiAgICAgICAgIyAkdmFyeyAgICAgICAgJXZhcgogICAgICAgICMgQCR2YXIgICAgICAgICR2YXIKICAgICAgICAjICR7dmFyfSAgICAgICAkdmFyICAoY2FsbGVyIG11c3QgcmVtb3ZlIHRoZSBicmFjZXMpCiAgICAgICAgIyBAJHZhclswLi4yXSAgJHZhcgogICAgICAgICMgQHZhclswLi4yXSAgIEB2YXIgIGFycmF5IHNsaWNlCiAgICAgICAgIyBAdmFye3cxIHcyfSAgJXZhciAgaGFzaCBzbGljZQogICAgICAgICMgJXZhcnt3MSB3Mn0gICV2YXIgIGhhc2ggc2xpY2UKCiAgICAgICAgbXkgJG5hbWU7CiAgICAgICAgaWYgKCAkYnJhY2tldCAmJiBsZW5ndGgoJHNpZ2lsX3N0cmluZykgPT0gMSApIHsKICAgICAgICAgICAgaWYgICAgKCAkYnJhY2tldCBlcSAneycgKSB7ICRzaWdpbCA9ICclJyB9CiAgICAgICAgICAgIGVsc2lmICggJGJyYWNrZXQgZXEgJ1snICkgeyAkc2lnaWwgPSAnQCcgfQogICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgIHsgfQogICAgICAgIH0KICAgICAgICAkbmFtZSA9ICRzaWdpbCAuICR3b3JkOwoKICAgICAgICBmb3JlYWNoIG15ICRsYXllciAoIHJldmVyc2UoIEB7JHJibG9ja19zdGFja30gKSApIHsKICAgICAgICAgICAgbXkgJHJ2YXJzID0gJGxheWVyLT57cnZhcnN9OwogICAgICAgICAgICBpZiAoICRydmFycy0+eyRuYW1lfSApIHsKICAgICAgICAgICAgICAgICRydmFycy0+eyRuYW1lfS0+e2NvdW50fSsrOwogICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9OyAjIyBlbmQgJHVwZGF0ZV91c2VfY291bnQgPSBzdWIKCiAgICBteSAkY2hlY2tpbl9uZXdfY29uc3RhbnQgPSBzdWIgewogICAgICAgIG15ICggJEtLLCAkd29yZCApID0gQF87CiAgICAgICAgbXkgJGxpbmVfaW5kZXggPSAkckxMLT5bJEtLXS0+W19MSU5FX0lOREVYX107CiAgICAgICAgbXkgJHJ2YXJzICAgICAgPSB7CiAgICAgICAgICAgIGNvdW50ICAgICAgPT4gMCwKICAgICAgICAgICAgbGluZV9pbmRleCA9PiAkbGluZV9pbmRleCwKICAgICAgICAgICAgcGFja2FnZSAgICA9PiAkY3VycmVudF9wYWNrYWdlLAogICAgICAgICAgICBLICAgICAgICAgID0+ICRLSywKICAgICAgICB9OwogICAgICAgICRyY29uc3RhbnRfaGFzaC0+eyRjdXJyZW50X3BhY2thZ2V9LT57JHdvcmR9ID0gJHJ2YXJzOwogICAgICAgIHJldHVybjsKICAgIH07ICMjIGVuZCAkY2hlY2tpbl9uZXdfY29uc3RhbnQgPSBzdWIKCiAgICBteSAkcHVzaF9uZXdfRVhQT1JUID0gc3ViIHsKICAgICAgICBteSAoICRLSywgJHBhY2thZ2UgKSA9IEBfOwoKICAgICAgICAjIFNhdmUgaW5kZXggb2YgYW55IEBFWFBPUlQgYW5kIEBFWFBPUlRfT0sgbGlzdHMKICAgICAgICAkcGFja2FnZSA9ICRjdXJyZW50X3BhY2thZ2UgdW5sZXNzICgkcGFja2FnZSk7CiAgICAgICAgcHVzaCBAeyAkckVYUE9SVF9oYXNoLT57JHBhY2thZ2V9IH0sICRLSzsKICAgICAgICByZXR1cm47CiAgICB9OyAjIyBlbmQgJHB1c2hfbmV3X0VYUE9SVCA9IHN1YgoKICAgIG15ICRzY2FuX3VzZV92YXJzID0gc3ViIHsKICAgICAgICBteSAoJEtLKSA9IEBfOwogICAgICAgIG15ICRLbiA9ICRzZWxmLT5LX25leHRfY29kZSgkS0spOwogICAgICAgIHJldHVybiB1bmxlc3MgKCRLbik7CiAgICAgICAgbXkgJHJsaXN0ID0gJHNlbGYtPmV4cGFuZF9xdW90ZWRfd29yZF9saXN0KCRLbik7CiAgICAgICAgcmV0dXJuIHVubGVzcyAoJHJsaXN0KTsKICAgICAgICBteSAkbGluZV9pbmRleCA9ICRyTEwtPlskS0tdLT5bX0xJTkVfSU5ERVhfXTsKICAgICAgICAkbXlfa2V5d29yZCA9ICd1c2UgdmFycyc7CiAgICAgICAgZm9yZWFjaCBteSAkbmFtZSAoIEB7JHJsaXN0fSApIHsKICAgICAgICAgICAgbXkgJGJhZF9uYW1lID0gJGNoZWNrX2Zvcl9vdmVybGFwcGluZ192YXJpYWJsZXMtPiggJG5hbWUsICRLSyApOwogICAgICAgICAgICBuZXh0IGlmICgkYmFkX25hbWUpOwogICAgICAgICAgICBteSAkcnZhcnMgPSB7CiAgICAgICAgICAgICAgICBsaW5lX2luZGV4ID0+ICRsaW5lX2luZGV4LAogICAgICAgICAgICAgICAgcGFja2FnZSAgICA9PiAkY3VycmVudF9wYWNrYWdlLAogICAgICAgICAgICAgICAgSyAgICAgICAgICA9PiAkS0ssCiAgICAgICAgICAgIH07CiAgICAgICAgICAgICRydXNlX3ZhcnNfaGFzaC0+eyRjdXJyZW50X3BhY2thZ2V9LT57JG5hbWV9ID0gJHJ2YXJzOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9OyAjIyBlbmQgJHNjYW5fdXNlX3ZhcnMgPSBzdWIKCiAgICBteSAkc2Nhbl91c2VfY29uc3RhbnQgPSBzdWIgewogICAgICAgIG15ICgkS0spID0gQF87CiAgICAgICAgbXkgJEtuID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLSyk7CiAgICAgICAgcmV0dXJuIHVubGVzcyAoJEtuKTsKICAgICAgICBteSAkdHlwZV9uICA9ICRyTEwtPlskS25dLT5bX1RZUEVfXTsKICAgICAgICBteSAkdG9rZW5fbiA9ICRyTEwtPlskS25dLT5bX1RPS0VOX107CgogICAgICAgICMgdmVyc2lvbj8KICAgICAgICBpZiAoICR0eXBlX24gZXEgJ24nIHx8ICR0eXBlX24gZXEgJ3YnICkgewogICAgICAgICAgICAkS24gICAgICA9ICRzZWxmLT5LX25leHRfY29kZSgkS24pOwogICAgICAgICAgICAkdHlwZV9uICA9ICRyTEwtPlskS25dLT5bX1RZUEVfXTsKICAgICAgICAgICAgJHRva2VuX24gPSAkckxMLT5bJEtuXS0+W19UT0tFTl9dOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkdG9rZW5fbiBlcSAnKCcgKSB7CiAgICAgICAgICAgICRLbiAgICAgID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLbik7CiAgICAgICAgICAgICR0eXBlX24gID0gJHJMTC0+WyRLbl0tPltfVFlQRV9dOwogICAgICAgICAgICAkdG9rZW5fbiA9ICRyTEwtPlskS25dLT5bX1RPS0VOX107CiAgICAgICAgfQoKICAgICAgICAjIHVzZSBjb25zdGFudCBfbWV0aDFfPT4xOwogICAgICAgIGlmICggJHR5cGVfbiBlcSAndycgKSB7CiAgICAgICAgICAgICRjaGVja2luX25ld19jb25zdGFudC0+KCAkS24sICR0b2tlbl9uICk7CiAgICAgICAgfQoKICAgICAgICAjIHVzZSBjb25zdGFudCAnX21ldGgxXycsMTsKICAgICAgICBlbHNpZiAoICR0eXBlX24gZXEgJ1EnICkgewoKICAgICAgICAgICAgIyBkb24ndCB0cnkgdG8gaGFuZGxlIGFueXRoaW5nIHN0cmFuZ2UKICAgICAgICAgICAgaWYgKCBsZW5ndGgoJHRva2VuX24pIDwgMyApIHsgcmV0dXJuIH0KICAgICAgICAgICAgbXkgJG5hbWUgPSBzdWJzdHIoICR0b2tlbl9uLCAxLCAtMSApOwogICAgICAgICAgICAkY2hlY2tpbl9uZXdfY29uc3RhbnQtPiggJEtuLCAkbmFtZSApOwogICAgICAgIH0KCiAgICAgICAgIyB1c2UgY29uc3RhbnQgcXcoX21ldGgyXyAyKTsKICAgICAgICBlbHNpZiAoICR0eXBlX24gZXEgJ3EnICkgewogICAgICAgICAgICBteSAkbmFtZTsKICAgICAgICAgICAgaWYgKCAkdG9rZW5fbiA9fiAvcXdccyouKFx3KykvICkgewogICAgICAgICAgICAgICAgJG5hbWUgPSAkMTsKICAgICAgICAgICAgICAgICRjaGVja2luX25ld19jb25zdGFudC0+KCAkS24sICRuYW1lICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgQSBoYXNoIHJlZiB3aXRoIG11bHRpcGxlIGRlZmluaXRpb25zOgogICAgICAgICMgdXNlIGNvbnN0YW50IHsgX21ldGgzXz0+MywgX21ldGg0Xz0+NH07CiAgICAgICAgIyB1c2UgY29uc3RhbnQgeyAnX21ldGgzXycsMywgJ19tZXRoNF8nLDR9OwogICAgICAgIGVsc2lmICggJHR5cGVfbiBlcSAneycgJiYgJHRva2VuX24gZXEgJ3snICkgewogICAgICAgICAgICBteSAkc2Vxbm9fbiA9ICRyTEwtPlskS25dLT5bX1RZUEVfU0VRVUVOQ0VfXTsKICAgICAgICAgICAgcmV0dXJuIHVubGVzcyAkc2Vxbm9fbjsKICAgICAgICAgICAgbXkgJEtjID0gJHNlbGYtPltfS19jbG9zaW5nX2NvbnRhaW5lcl9dLT57JHNlcW5vX259OwogICAgICAgICAgICByZXR1cm4gdW5sZXNzICRLYzsKCiAgICAgICAgICAgICMgbG9vcCB0byBjb2xsZWN0IGNvbnN0YW50cyBpbiBoYXNoIHJlZgogICAgICAgICAgICBteSAkS25uICAgICAgICAgICAgICAgPSAkc2VsZi0+S19uZXh0X2NvZGUoJEtuKTsKICAgICAgICAgICAgbXkgJHRvdGFsX2NvbW1hX2NvdW50ID0gMDsKICAgICAgICAgICAgbXkgJGxhc3RfdHlwZSAgICAgICAgID0gJywnOwogICAgICAgICAgICBteSAkbGV2ZWxfc3RhcnQgICAgICAgPSAkckxMLT5bJEtubl0tPltfTEVWRUxfXTsKCiAgICAgICAgICAgIGZvcmVhY2ggbXkgJEt4ICggJEtubiAuLiAkS2MgLSAxICkgewogICAgICAgICAgICAgICAgbXkgJHR5cGUgID0gJHJMTC0+WyRLeF0tPltfVFlQRV9dOwogICAgICAgICAgICAgICAgbXkgJHRva2VuID0gJHJMTC0+WyRLeF0tPltfVE9LRU5fXTsKICAgICAgICAgICAgICAgIG5leHQgaWYgKCAkdHlwZSBlcSAnYicgfHwgJHR5cGUgZXEgJyMnICk7CiAgICAgICAgICAgICAgICBteSAkbGV2ZWwgPSAkckxMLT5bJEt4XS0+W19MRVZFTF9dOwogICAgICAgICAgICAgICAgbmV4dCBpZiAoICRsZXZlbCA+ICRsZXZlbF9zdGFydCApOwogICAgICAgICAgICAgICAgaWYgKCAkbGV2ZWwgPCAkbGV2ZWxfc3RhcnQgKSB7CiAgICAgICAgICAgICAgICAgICAgIyMgc2hvdWxkbid0IGhhcHBlbgogICAgICAgICAgICAgICAgICAgIG15ICRsbm8gPSAkckxMLT5bJEt4XS0+W19MSU5FX0lOREVYX10gKyAxOwogICAgICAgICAgICAgICAgICAgIERFQlVHX1VTRV9DT05TVEFOVAogICAgICAgICAgICAgICAgICAgICAgJiYgRmF1bHQoIiRsbm86IGxldmVsPSRsZXZlbCA+IHN0YXJ0PSRsZXZlbF9zdGFydFxuIik7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCAkbGFzdF90eXBlIGVxICcsJyAmJiAhKCAkdG90YWxfY29tbWFfY291bnQgJSAyICkgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkdHlwZSBlcSAndycgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjaGVja2luX25ld19jb25zdGFudC0+KCAkS3gsICR0b2tlbiApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICR0eXBlIGVxICdRJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBsZW5ndGgoJHRva2VuKSA8IDMgKSB7IHJldHVybiB9CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRuYW1lID0gc3Vic3RyKCAkdG9rZW4sIDEsIC0xICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRjaGVja2luX25ld19jb25zdGFudC0+KCAkS3gsICRuYW1lICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkbG5vID0gJHJMTC0+WyRLeF0tPltfTElORV9JTkRFWF9dICsgMTsKICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdfVVNFX0NPTlNUQU5UCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgRmF1bHQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJGxubzogdW5leHBlY3RlZCB0eXBlOiB0eXBlPSR0eXBlIHRva2VuPSR0b2tlblxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICR0eXBlIGVxICcsJyB8fCAkdHlwZSBlcSAnPT4nICkgewogICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfY29tbWFfY291bnQrKzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkbGFzdF90eXBlID0gJHR5cGU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGVsc2lmICggJHR5cGVfbiBlcSAnOycgKSB7CgogICAgICAgIH0KCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIG15ICRsbiA9ICRyTEwtPlskS0tdLT5bX0xJTkVfSU5ERVhfXSArIDE7CiAgICAgICAgICAgIERFQlVHX1VTRV9DT05TVEFOVCAmJiBGYXVsdCgiJGxuOiB1bmtub3duIHVzZSBjb25zdGFudCBzeW50YXhcbiIpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9OyAjIyBlbmQgJHNjYW5fdXNlX2NvbnN0YW50ID0gc3ViCgogICAgbXkgJHVwZGF0ZV9jb25zdGFudF9jb3VudCA9IHN1YiB7CiAgICAgICAgbXkgKCAkS0ssICR3b3JkICkgPSBAXzsKICAgICAgICBpZiAoICFkZWZpbmVkKCR3b3JkKSApIHsgJHdvcmQgPSAkckxMLT5bJEtLXS0+W19UT0tFTl9dIH0KICAgICAgICBteSAkcGFja2FnZSA9ICRjdXJyZW50X3BhY2thZ2U7CiAgICAgICAgbXkgJHBvcyAgICAgPSByaW5kZXgoICR3b3JkLCAnOjonICk7CiAgICAgICAgaWYgKCAkcG9zID49IDAgKSB7CiAgICAgICAgICAgICRwYWNrYWdlID0gJHBvcyA+IDAgPyBzdWJzdHIoICR3b3JkLCAwLCAkcG9zICkgOiAnbWFpbic7CiAgICAgICAgICAgICR3b3JkICAgID0gc3Vic3RyKCAkd29yZCwgJHBvcyArIDIgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGlmICggIWRlZmluZWQoICRyY29uc3RhbnRfaGFzaC0+eyRwYWNrYWdlfSApICk7CiAgICAgICAgbXkgJHJ2YXJzID0gJHJjb25zdGFudF9oYXNoLT57JHBhY2thZ2V9LT57JHdvcmR9OwogICAgICAgIHJldHVybiBpZiAoICFkZWZpbmVkKCRydmFycykgKTsKICAgICAgICByZXR1cm4gaWYgKCAkS0sgPD0gJHJ2YXJzLT57S30gKTsKICAgICAgICAkcnZhcnMtPntjb3VudH0rKzsKICAgICAgICByZXR1cm47CiAgICB9OyAjIyBlbmQgJHVwZGF0ZV9jb25zdGFudF9jb3VudCA9IHN1YgoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBzdWIgdG8gY2hlY2sgZm9yIHplcm8gY291bnRzIHdoZW4gc3RhY2sgY2xvc2VzCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIG15ICRjaGVja19mb3JfdW51c2VkX25hbWVzID0gc3ViIHsKICAgICAgICBteSAoJHJoYXNoKSA9IEBfOwogICAgICAgIGZvcmVhY2ggbXkgJG5hbWUgKCBrZXlzICV7JHJoYXNofSApIHsKICAgICAgICAgICAgbXkgJGVudHJ5ICAgPSAkcmhhc2gtPnskbmFtZX07CiAgICAgICAgICAgIG15ICRjb3VudCAgID0gJGVudHJ5LT57Y291bnR9OwogICAgICAgICAgICBteSAka2V5d29yZCA9ICRlbnRyeS0+e2tleXdvcmR9OwoKICAgICAgICAgICAgaWYgKCAhJGNvdW50ICkgewoKICAgICAgICAgICAgICAgICMgdHlwaWNhbGx5IGdsb2JhbCB2YXJzIGFyZSBmb3IgZXh0ZXJuYWwgYWNjZXNzIHNvIHdlCiAgICAgICAgICAgICAgICAjIGRvIG5vdCByZXBvcnQgdGhlbSBhcyB0eXBlICd1JyAodW51c2VkKQogICAgICAgICAgICAgICAgbmV4dCBpZiAoICRrZXl3b3JkIGVxICdvdXInIHx8ICRrZXl3b3JkIGVxICd1c2UgdmFycycgKTsKCiAgICAgICAgICAgICAgICBwdXNoIEB3YXJuaW5ncywKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG5hbWUgICAgICAgID0+ICRuYW1lLAogICAgICAgICAgICAgICAgICAgIGtleXdvcmQgICAgID0+ICRlbnRyeS0+e2tleXdvcmR9LAogICAgICAgICAgICAgICAgICAgIG5vdGUgICAgICAgID0+IEVNUFRZX1NUUklORywKICAgICAgICAgICAgICAgICAgICBzZWVfbGluZSAgICA9PiAwLAogICAgICAgICAgICAgICAgICAgIGxpbmVfbnVtYmVyID0+ICRlbnRyeS0+e2xpbmVfaW5kZXh9ICsgMSwKICAgICAgICAgICAgICAgICAgICBsZXR0ZXIgICAgICA9PiAndScsCiAgICAgICAgICAgICAgICAgICAgSyAgICAgICAgICAgPT4gJGVudHJ5LT57S30sCiAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfTsgIyMgZW5kICRjaGVja19mb3JfdW51c2VkX25hbWVzID0gc3ViCgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBzdWIgdG8gc2NhbiBpbnRlcnBvbGF0ZWQgdGV4dCBmb3IgdmFycwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgbXkgJHNjYW5fcXVvdGVkX3RleHQgPSBzdWIgewogICAgICAgIG15ICgkdGV4dCkgPSBAXzsKICAgICAgICByZXR1cm4gdW5sZXNzICgkY2hlY2tfdW51c2VkKTsKCiAgICAgICAgIyBMb29raW5nIGZvciBzb21ldGhpbmcgbGlrZSAkd29yZCwgQHdvcmQsICR3b3JkWywgJCR3b3JkLCAke3dvcmR9LCAuLgogICAgICAgIHdoaWxlICggJHRleHQgPX4gLyAoW1wkXEBdICBbXCRdKikgXHs/KFx3KylcfT8gKFtcW1x7XT8pIC9nY3ggKSB7CiAgICAgICAgICAgICMjICAgICAgICAgICAgICAtLS0tLS0xLS0tLS0tICAgICAgLTItICAgICAgLS0tMy0tLQogICAgICAgICAgICBteSAkc2lnaWxfc3RyaW5nID0gJDE7CiAgICAgICAgICAgIG15ICR3b3JkICAgICAgICAgPSAkMjsKICAgICAgICAgICAgbXkgJGJyYWNlICAgICAgICA9ICQzOwogICAgICAgICAgICAkdXBkYXRlX3VzZV9jb3VudC0+KCAkc2lnaWxfc3RyaW5nLCAkd29yZCwgJGJyYWNlICk7CiAgICAgICAgfSAjIyBlbmQgd2hpbGUgKCAkdGV4dCA9fiAuLi4pCiAgICAgICAgcmV0dXJuOwogICAgfTsgIyMgZW5kICRzY2FuX3F1b3RlZF90ZXh0ID0gc3ViCgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgc3ViIHRvIGZpbmQgdGhlIG5leHQgb3BlbmluZyBicmFjZSBzZXFubyBvZiBhbiBpZi1lbHNpZi0gY2hhaW4KICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBteSAkcHVzaF9uZXh0X2lmX2NoYWluID0gc3ViIHsKICAgICAgICBteSAoICRLSywgJHJwb3BwZWRfdmFycyApID0gQF87CgogICAgICAgICMgR2l2ZW46CiAgICAgICAgIyAgICRLSyA9IGluZGV4IG9mIGEgY2xvc2luZyBibG9jayBicmFjZSBvZiBpZi91bmxlc3MvZWxzaWYgY2hhaW4KICAgICAgICAjICAgJHJwb3BwZWRfdmFycyA9IHZhbHVlcyBqdXN0IHBvcHBlZCBvZmYgdGhlIHN0YWNrCiAgICAgICAgIyBUYXNrOgogICAgICAgICMgICAtIGRvIG5vdGhpbmcgaWYgY2hhaW4gZW5kcywgb3IKICAgICAgICAjICAgLSBwdXNoICRycG9wcGVkX3ZhcnMgb250byB0aGUgbmV4dCBibG9jayBpbiB0aGUgY2hhaW4KCiAgICAgICAgIyAgJHNlcW5vX2Jsb2NrID0gc2VxdWVuY2UgbnVtYmVyIG9mIG5leHQgb3BlbmluZyBibG9jayBpbiB0aGUgY2hhaW4sCiAgICAgICAgbXkgJHNlcW5vX2Jsb2NrOwogICAgICAgIG15ICRLX24gPSAkc2VsZi0+S19uZXh0X2NvZGUoJEtLKTsKICAgICAgICByZXR1cm4gdW5sZXNzICgkS19uKTsKICAgICAgICByZXR1cm4gdW5sZXNzICggJHJMTC0+WyRLX25dLT5bX1RZUEVfXSBlcSAnaycgKTsKCiAgICAgICAgIyBGb3IgYW4gJ2Vsc2lmJyB0aGUgYnJhY2Ugd2lsbCBiZSBhZnRlciB0aGUgY2xvc2luZyBwYXJlbgogICAgICAgICMgICAgICAgICAnZWxzaWYgKC4uKSB7IC4uLiB9JwogICAgICAgICMgICAgICAgICAgIF4gICAgICAgICBeCiAgICAgICAgIyAgICAgICAgICAgfCAgICAgICAgIHwKICAgICAgICAjICAgICAgICAgICAtLSRLSyAgICAgLS0kc2Vxbm8gb2YgYnJhY2UgdGhhdCB3ZSB3YW50CiAgICAgICAgIwogICAgICAgIGlmICggJHJMTC0+WyRLX25dLT5bX1RPS0VOX10gZXEgJ2Vsc2lmJyApIHsKICAgICAgICAgICAgKCAkc2Vxbm9fYmxvY2ssIG15ICRLX2xhc3RfaXRlcmF0b3JfdXUgKSA9CiAgICAgICAgICAgICAgJHNlbGYtPmJsb2NrX3NlcW5vX29mX3BhcmVuX2tleXdvcmQoJEtfbik7CiAgICAgICAgfQoKICAgICAgICAjIEZvciBhbiAnZWxzZScgdGhlIGJyYWNlIHdpbGwgYmUgdGhlIG5leHQgdG9rZW4KICAgICAgICAjICAgICAgICAgJ2Vsc2UgICB7IC4uLiB9JwogICAgICAgICMgICAgICAgICAgXiAgICAgIF4KICAgICAgICAjICAgICAgICAgIHwgICAgICB8CiAgICAgICAgIyAgICAgICAgICAtLSRLSyAgLS0kc2Vxbm8gb2YgYnJhY2UgdGhhdCB3ZSB3YW50CiAgICAgICAgIwogICAgICAgIGVsc2lmICggJHJMTC0+WyRLX25dLT5bX1RPS0VOX10gZXEgJ2Vsc2UnICkgewogICAgICAgICAgICBteSAkS19ubiA9ICRzZWxmLT5LX25leHRfY29kZSgkS19uKTsKICAgICAgICAgICAgaWYgKCAgICRLX25uCiAgICAgICAgICAgICAgICAmJiAkaXNfb3BlbmluZ190b2tlbnsgJHJMTC0+WyRLX25uXS0+W19UT0tFTl9dIH0gKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkc2Vxbm9fYmxvY2sgPSAkckxMLT5bJEtfbm5dLT5bX1RZUEVfU0VRVUVOQ0VfXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICMgY2hhaW4gZW5kcyBpZiBubyBlbHNpZi9lbHNlIGJsb2NrCiAgICAgICAgfQoKICAgICAgICBpZiAoICAgJHNlcW5vX2Jsb2NrCiAgICAgICAgICAgICYmICRyYmxvY2tfdHlwZV9vZl9zZXFuby0+eyRzZXFub19ibG9ja30gKQogICAgICAgIHsKICAgICAgICAgICAgJHB1c2hfYmxvY2tfc3RhY2stPiggJHNlcW5vX2Jsb2NrLCAkcnBvcHBlZF92YXJzICk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH07ICMjIGVuZCAkcHVzaF9uZXh0X2lmX2NoYWluID0gc3ViCgogICAgbXkgJHNjYW5fYnJhY2VkX2lkID0gc3ViIHsKICAgICAgICBteSAoJEtLKSA9IEBfOwoKICAgICAgICAjIFdlIGFyZSBhdCBhbiBvcGVuaW5nIGJyYWNlIGFuZCBsb29raW5nIGZvciBzb21ldGhpbmcgbGlrZSB0aGlzOgogICAgICAgICMgICBAe3dvcmR9W0B2YXJdCiAgICAgICAgIyAgICR7d29yZH0KICAgICAgICAjICAgIF4KICAgICAgICAjICAgIHwKICAgICAgICAjICAgIC0tICRLSwoKICAgICAgICByZXR1cm4gdW5sZXNzICgkY2hlY2tfdW51c2VkKTsKCiAgICAgICAgIyBMb29rIGJhY2sgZm9yIHRoZSBzaWdpbAogICAgICAgIG15ICRLcCA9ICRzZWxmLT5LX3ByZXZpb3VzX2NvZGUoJEtLKTsKCiAgICAgICAgcmV0dXJuIHVubGVzcyAoIGRlZmluZWQoJEtwKSAmJiAkckxMLT5bJEtwXS0+W19UWVBFX10gZXEgJ3QnICk7CiAgICAgICAgbXkgJHNpZ2lsX3N0cmluZyA9ICRyTEwtPlskS3BdLT5bX1RPS0VOX107CgogICAgICAgICMgTG9vayBmb3J3YXJkIGZvciB0aGUgYmFyZXdvcmQKICAgICAgICBteSAkS24gPSAkc2VsZi0+S19uZXh0X2NvZGUoJEtLKTsKICAgICAgICByZXR1cm4gdW5sZXNzICggZGVmaW5lZCgkS24pICYmICRyTEwtPlskS25dLT5bX1RZUEVfXSBlcSAndycgKTsKICAgICAgICBteSAkd29yZCA9ICRyTEwtPlskS25dLT5bX1RPS0VOX107CgogICAgICAgICMgTG9vayBmb3J3YXJkIGZvciB0aGUgY2xvc2luZyBicmFjZQogICAgICAgIG15ICRLbm4gPSAkc2VsZi0+S19uZXh0X2NvZGUoJEtuKTsKICAgICAgICByZXR1cm4gdW5sZXNzICggZGVmaW5lZCgkS25uKSAmJiAkckxMLT5bJEtubl0tPltfVFlQRV9dIGVxICdSJyApOwoKICAgICAgICAjIExvb2sgZm9yd2FyZCBmb3IgYSBwb3NzaWJsZSB7IG9yIFsKICAgICAgICBteSAkYnJhY2tldDsKICAgICAgICBteSAkS25ubiA9ICRzZWxmLT5LX25leHRfY29kZSgkS25uKTsKICAgICAgICBpZiAoIGRlZmluZWQoJEtubm4pICkgewogICAgICAgICAgICBteSAkbmV4dF90eXBlID0gJHJMTC0+WyRLbm5uXS0+W19UWVBFX107CiAgICAgICAgICAgIGlmICggJG5leHRfdHlwZSBlcSAnTCcgfHwgJG5leHRfdHlwZSBlcSAnWycgKSB7CiAgICAgICAgICAgICAgICAkYnJhY2tldCA9ICRyTEwtPlskS25ubl0tPltfVE9LRU5fXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkdXBkYXRlX3VzZV9jb3VudC0+KCAkc2lnaWxfc3RyaW5nLCAkd29yZCwgJGJyYWNrZXQgKTsKICAgICAgICByZXR1cm47CiAgICB9OyAjIyBlbmQgJHNjYW5fYnJhY2VkX2lkID0gc3ViCgogICAgbXkgJGNoZWNrX3N1Yl9zaWduYXR1cmUgPSBzdWIgewogICAgICAgIG15ICgkS0spID0gQF87CgogICAgICAgICMgbG9va2luZyBmb3IgYSBzdWIgc2lnbmF0dXJlCiAgICAgICAgIyAgICBzdWIgeHh4ICguLi4pIHsKICAgICAgICAjICAgIC0tLS0tLS0KICAgICAgICAjICAgICAgICAgIHwgfCAgIHwgfAogICAgICAgICMgICAgICAgICRLSyAkS24gfCB8CiAgICAgICAgIyAgICAgICAgICAgICAgICAgICRLX29wZW5pbmdfYnJhY2UKCiAgICAgICAgIyBOb3RlOiB0aGlzIHZlcnNpb24gY2Fubm90IGhhbmRsZSBzaWduYXR1cmVzIHdpdGhpbiBzaWduYXR1cmVzLgogICAgICAgICMgSW5uZXIgc2lnbmF0dXJlcyBhcmUgY3VycmVudGx5IGlnbm9yZWQuIEZvciBleGFtcGxlLCBvbmx5IHRoZQogICAgICAgICMgb3V0ZXJtb3N0ICRhIGJlbG93IHdpbGwgYmUgY2hlY2tlZCBpbiB0aGlzIGxpbmU6CgogICAgICAgICMgIHN1YiB4eXogKCRhID0gc3ViICgkYSkgeyAkYS4ieiIgfSkgeyAkYS0+KCJhIikuInkiIH0KCiAgICAgICAgIyBXaGF0IGhhcHBlbnMgaXMgdGhhdCB2YXJpYWJsZSAkS19lbmRfbXkgaXMgc2V0IGJ5IHRoZSBmaXJzdAogICAgICAgICMgc2lnbmF0dXJlLCBhbmQgdGhlIHNlY29uZCBzaWduYXR1cmUgaXMgd2l0aGluIGl0IGFuZCBzbyBkb2VzCiAgICAgICAgIyBub3QgZ2V0IGFjdGl2YXRlZC4gQSBzdGFjayBzY2hlbWUgd291bGQgYmUgbmVjZXNzYXJ5IHRvIGhhbmRsZQogICAgICAgICMgdGhpcywgYnV0IGRvZXMgbm90IHNlZW0gbmVjZXNzYXJ5IGJlY2F1c2UgdGhpcyBwcm9iYWJseSBvbmx5CiAgICAgICAgIyBvY2N1cnMgaW4gdGVzdCBjb2RlLCBhbmQgdGhlIG9ubHkgZG93bnNpZGUgaXMgdGhhdCB3ZSBsaW1pdAogICAgICAgICMgc29tZSBjaGVja2luZy4KCiAgICAgICAgbXkgJEtuID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLSyk7CiAgICAgICAgcmV0dXJuIHVubGVzcyAoICRyTEwtPlskS25dLT5bX1RPS0VOX10gZXEgJygnICk7CiAgICAgICAgbXkgJHNlcW5vX3BhcmVuID0gJHJMTC0+WyRLbl0tPltfVFlQRV9TRVFVRU5DRV9dOwogICAgICAgIHJldHVybiB1bmxlc3MgKCRzZXFub19wYXJlbik7CiAgICAgICAgbXkgJEtfY2xvc2luZ19wYXJlbiA9ICRzZWxmLT5bX0tfY2xvc2luZ19jb250YWluZXJfXS0+eyRzZXFub19wYXJlbn07CiAgICAgICAgbXkgJEtfb3BlbmluZ19icmFjZSA9ICRzZWxmLT5LX25leHRfY29kZSgkS19jbG9zaW5nX3BhcmVuKTsKICAgICAgICByZXR1cm4gdW5sZXNzICgkS19vcGVuaW5nX2JyYWNlKTsKICAgICAgICBteSAkc2Vxbm9fYnJhY2UgPSAkckxMLT5bJEtfb3BlbmluZ19icmFjZV0tPltfVFlQRV9TRVFVRU5DRV9dOwogICAgICAgIG15ICR0b2tlbl9icmFjZSA9ICRyTEwtPlskS19vcGVuaW5nX2JyYWNlXS0+W19UT0tFTl9dOwogICAgICAgIHJldHVybiB1bmxlc3MgKCAkc2Vxbm9fYnJhY2UgJiYgJHRva2VuX2JyYWNlIGVxICd7JyApOwoKICAgICAgICAjIFRyZWF0IHNpZ25hdHVyZSB2YXJpYWJsZXMgbGlrZSBteSB2YXJpYWJsZXMKICAgICAgICAjIENyZWF0ZSBzcGVjaWFsIGJsb2NrIG9uIHRoZSBzdGFjay4uc2VlIG5vdGUgYWJvdmUgZm9yCiAgICAgICAgIyAkaXNfaWZfdW5sZXNzCiAgICAgICAgaWYgKCAkS19vcGVuaW5nX2JyYWNlID4gJEtfZW5kX215ICkgewogICAgICAgICAgICAkS19lbmRfbXkgICAgICAgICAgID0gJEtfb3BlbmluZ19icmFjZTsKICAgICAgICAgICAgJG15X2tleXdvcmQgICAgICAgICA9ICdzdWIgc2lnbmF0dXJlJzsKICAgICAgICAgICAgJGluX3NpZ25hdHVyZV9zZXFubyA9ICRzZXFub19wYXJlbjsKICAgICAgICAgICAgJHB1c2hfYmxvY2tfc3RhY2stPigkc2Vxbm9fYnJhY2UpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9OyAjIyBlbmQgJGNoZWNrX3N1Yl9zaWduYXR1cmUgPSBzdWIKCiAgICBteSAkcmtleXdvcmRfY291bnQgICA9IHt9OwogICAgbXkgJHJsaW5lX3R5cGVfY291bnQgPSB7fTsKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgTG9vcCBvdmVyIGFsbCBsaW5lcwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBteSAkaXhfbGluZSA9IC0xOwogICAgZm9yZWFjaCBteSAkbGluZV9vZl90b2tlbnMgKCBAeyRybGluZXN9ICkgewogICAgICAgICRpeF9saW5lKys7CiAgICAgICAgbXkgJGxpbmVfdHlwZSA9ICRsaW5lX29mX3Rva2Vucy0+e19saW5lX3R5cGV9OwogICAgICAgIGlmICggJGxpbmVfdHlwZSBuZSAnQ09ERScgKSB7CiAgICAgICAgICAgICRybGluZV90eXBlX2NvdW50LT57JGxpbmVfdHlwZX0rKzsKICAgICAgICAgICAgbmV4dDsKICAgICAgICB9CgogICAgICAgIG15ICggJEtmaXJzdCwgJEtsYXN0ICkgPSBAeyAkbGluZV9vZl90b2tlbnMtPntfcktfcmFuZ2V9IH07CiAgICAgICAgbmV4dCB1bmxlc3MgZGVmaW5lZCgkS2ZpcnN0KTsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIExvb3Agb3ZlciBhbGwgdG9rZW5zIG9uIHRoaXMgbGluZQogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgZm9yZWFjaCBteSAkS0sgKCAkS2ZpcnN0IC4uICRLbGFzdCApIHsKICAgICAgICAgICAgbXkgJHR5cGUgPSAkckxMLT5bJEtLXS0+W19UWVBFX107CiAgICAgICAgICAgIG5leHQgaWYgKCAkdHlwZSBlcSAnYicgfHwgJHR5cGUgZXEgJyMnICk7CiAgICAgICAgICAgIG15ICR0b2tlbiA9ICRyTEwtPlskS0tdLT5bX1RPS0VOX107CiAgICAgICAgICAgIG15ICRzZXFubyA9ICRyTEwtPlskS0tdLT5bX1RZUEVfU0VRVUVOQ0VfXTsKCiAgICAgICAgICAgIGlmICgkc2Vxbm8pIHsKICAgICAgICAgICAgICAgIG15ICRibG9ja190eXBlOwogICAgICAgICAgICAgICAgJGJsb2NrX3R5cGUgPSAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8tPnskc2Vxbm99IGlmICgkc2Vxbm8pOwoKICAgICAgICAgICAgICAgIG15ICRpc19vbl9zdGFjayA9ICggJHNlcW5vID09ICRyYmxvY2tfc3RhY2stPlstMV0tPntzZXFub30gKTsKCiAgICAgICAgICAgICAgICBpZiAoICRpc19vcGVuaW5nX3Rva2VueyR0b2tlbn0gKSB7CgogICAgICAgICAgICAgICAgICAgICMgYWx3YXlzIHB1c2ggYSBibG9jawogICAgICAgICAgICAgICAgICAgIGlmICgkYmxvY2tfdHlwZSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBleGl0IHNpZ25hdHVyZSBpZiB3ZSB3aWxsIHB1c2ggYSBkdXBsaWNhdGUgYmxvY2sKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAgICRpbl9zaWduYXR1cmVfc2Vxbm8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIEB7JHJibG9ja19zdGFja30KICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRzZXFubyA9PSAkcmJsb2NrX3N0YWNrLT5bLTFdLT57c2Vxbm99ICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGluX3NpZ25hdHVyZV9zZXFubyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICRwdXNoX2Jsb2NrX3N0YWNrLT4oJHNlcW5vKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgdXBkYXRlIHN1YiBjb3VudCBmb3IgY3Jvc3MtcGFja2FnZSBjaGVja3MKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkcmlzX3N1Yl9ibG9jay0+eyRzZXFub30gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3ViX2NvdW50X2J5X3BhY2thZ2V7JGN1cnJlbnRfcGFja2FnZX0rKzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBsb29rIGZvciBzb21ldGhpbmcgbGlrZSBAe3dvcmR9IGV0YwogICAgICAgICAgICAgICAgICAgIGlmICggJHR5cGUgZXEgJ0wnICkgewogICAgICAgICAgICAgICAgICAgICAgICAkc2Nhbl9icmFjZWRfaWQtPigkS0spOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBlbHNpZiAoICRpc19jbG9zaW5nX3Rva2VueyR0b2tlbn0gKSB7CgogICAgICAgICAgICAgICAgICAgICMgYWx3YXlzIHBvcCB0aGUgc3RhY2sgaWYgdGhpcyB0b2tlbiBpcyBvbiB0aGUgc3RhY2sKICAgICAgICAgICAgICAgICAgICBpZiAoJGlzX29uX3N0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRzdGFja19pdGVtICAgPSBwb3AgQHskcmJsb2NrX3N0YWNrfTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHJwb3BwZWRfdmFycyA9ICRzdGFja19pdGVtLT57cnZhcnN9OwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiB3ZSBwb3BwZWQgYSBibG9jayB0b2tlbgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGJsb2NrX3R5cGUpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSBjdXJyZW50IHBhY2thZ2UgZ2V0cyB1cGRhdGVkIGF0IGEgYmxvY2sgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY3VycmVudF9wYWNrYWdlID0gJHN0YWNrX2l0ZW0tPntwYWNrYWdlfTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIENoZWNrIGZvciB1bnVzZWQgdmFycyBpZiByZXF1ZXN0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJGNoZWNrX3VudXNlZCAmJiAkcnBvcHBlZF92YXJzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjaGVja19mb3JfdW51c2VkX25hbWVzLT4oJHJwb3BwZWRfdmFycyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDaGVjayBmb3IgYW5kIHByb3BhZ2F0ZSBhbiBpZi1jaGFpbiBjb250cm9sIGxheWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3aGljaCB3aWxsIGhhdmUgdGhlIHNhbWUgc2Vxbm8uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIEB7JHJibG9ja19zdGFja30KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkc2Vxbm8gPT0gJHJibG9ja19zdGFjay0+Wy0xXS0+e3NlcW5vfSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcG9wIGFnYWluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0YWNrX2l0ZW0gICA9IHBvcCBAeyRyYmxvY2tfc3RhY2t9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRycG9wcGVkX3ZhcnMgPSAkc3RhY2tfaXRlbS0+e3J2YXJzfTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDaGVjayB1bnVzZWQgdmFycwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgLSBleGNlcHQgZm9yIHZhcnMgaW4gYW4gaWYtY2hhaW4gY29udHJvbCBsYXllcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBiZWNhdXNlIHRoZXkgYXJlIGludm9sdmVkIGluIGxvZ2ljCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAgICRjaGVja191bnVzZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHJwb3BwZWRfdmFycwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhJGlzX2lmX3VubGVzc19lbHNpZl9lbHNleyRibG9ja190eXBlfSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2hlY2tfZm9yX3VudXNlZF9uYW1lcy0+KCRycG9wcGVkX3ZhcnMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwcm9wYWdhdGUgY29udHJvbCBsYXllciBhbG9uZyBpZiBjaGFpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJGlzX2lmX3VubGVzc19lbHNpZnskYmxvY2tfdHlwZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwdXNoX25leHRfaWZfY2hhaW4tPiggJEtLLCAkcnBvcHBlZF92YXJzICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAjIGVycm9yIGlmIHdlIGp1c3QgcG9wcGVkIGEgbm9uLWJsb2NrIHRva2VuOgogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRLX24gICAgID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLSyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkdG9rZW5fbiA9ICRyTEwtPlskS19uXS0+W19UT0tFTl9dOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGxubyAgICAgPSAkaXhfbGluZSArIDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KDw8RU9NKTsKTm9uLWJsb2NrIGNsb3NpbmcgdG9rZW4gJyR0b2tlbicgb24gc3RhY2sgZm9sbG93ZWQgYnkgdG9rZW4gJHRva2VuX24gYXQgbGluZSAkbG5vCkV4cGVjdGluZyB0byBmaW5kIGFuIG9wZW5pbmcgdG9rZW4gaGVyZS4KRU9NCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgaWYgbm90IG9uIHRoZSBzdGFjazogZXJyb3IgaWYgdGhpcyBpcyBhIGJsb2NrCiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCRibG9ja190eXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRsbm8gICAgICAgICA9ICRpeF9saW5lICsgMTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHN0YWNrX3NlcW5vID0gJHJibG9ja19zdGFjay0+Wy0xXS0+e3NlcW5vfTsKICAgICAgICAgICAgICAgICAgICAgICAgREVWRUxfTU9ERQogICAgICAgICAgICAgICAgICAgICAgICAgICYmIEZhdWx0KAoic3RhY2sgZXJyb3I6IHNlcW5vPSRzZXFubyBuZSAkc3RhY2tfc2Vxbm8gbmVhciBsaW5lICRsbm9cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBnaXZlIHVwIC0gZmlsZSBtYXkgYmUgdW5iYWxhbmNlZAogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAjIG5vdCBhIGJsb2NrLCBub3Qgb24gc3RhY2s6IG5vdGhpbmcgdG8gZG8KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAjIHRlcm5hcnkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIy0tLS0tLS0tLS0KICAgICAgICAgICAgIyBhIGtleXdvcmQKICAgICAgICAgICAgIy0tLS0tLS0tLS0KICAgICAgICAgICAgZWxzaWYgKCAkdHlwZSBlcSAnaycgKSB7CgogICAgICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICMgbG9vayBmb3IgbGV4aWNhbCBrZXl3b3JkICdteScsICdzdGF0ZScsICdvdXInCiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgaWYgKCAkaXNfbXlfc3RhdGVfb3VyeyR0b2tlbn0gKSB7CiAgICAgICAgICAgICAgICAgICAgJG15X2tleXdvcmQgPSAkdG9rZW47CgogICAgICAgICAgICAgICAgICAgICMgU2V0ICckS19lbmRfbXknIHRvIGJlIHRoZSBsYXN0ICRLIGluZGV4IG9mIHRoZSB2YXJpYWJsZXMKICAgICAgICAgICAgICAgICAgICAjIGNvbnRyb2xsZWQgYnkgdGhpcyAnbXknIGtleXdvcmQKICAgICAgICAgICAgICAgICAgICBteSAkS24gPSAkc2VsZi0+S19uZXh0X2NvZGUoJEtLKTsKICAgICAgICAgICAgICAgICAgICAkS19lbmRfbXkgPSAkS247CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkS24gJiYgJHJMTC0+WyRLbl0tPltfVE9LRU5fXSBlcSAnKCcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRzZXFub19uZXh0ID0gJHJMTC0+WyRLbl0tPltfVFlQRV9TRVFVRU5DRV9dOwogICAgICAgICAgICAgICAgICAgICAgICAkS19lbmRfbXkgPSAkS19jbG9zaW5nX2NvbnRhaW5lci0+eyRzZXFub19uZXh0fTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgR2V0IGluaXRpYWwgY291bnQKICAgICAgICAgICAgICAgICAgICAkbXlfc3RhcnRpbmdfY291bnQgPSAwOwogICAgICAgICAgICAgICAgICAgIG15ICRLX2xhc3RfY29kZSA9ICRzZWxmLT5LX3ByZXZpb3VzX2NvZGUoJEtLKTsKICAgICAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQoJEtfbGFzdF9jb2RlKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGxhc3RfdHlwZSA9ICRyTEwtPlskS19sYXN0X2NvZGVdLT5bX1RZUEVfXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgQSBwcmVjZWRpbmcgXCBpbXBsaWVzIHRoYXQgdGhpcyBtZW1vcnkgY2FuIGJlIHVzZWQKICAgICAgICAgICAgICAgICAgICAgICAgIyBldmVuIGlmIHRoZSB2YXJpYWJsZSBuYW1lIGRvZXMgbm90IGFwcGVhciBhZ2Fpbi4KICAgICAgICAgICAgICAgICAgICAgICAgIyBGb3IgZXhhbXBsZTogcmV0dXJuIFxteSAkc3RyaW5nX2J1ZjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkbGFzdF90eXBlIGVxICdcXCcgKSB7ICRteV9zdGFydGluZ19jb3VudCA9IDEgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICMgbG9vayBmb3IgY2VydGFpbiBrZXl3b3JkcyB3aGljaCBpbnRyb2R1Y2UgYmxvY2tzOgogICAgICAgICAgICAgICAgIyBzdWNoIGFzICdmb3IgbXkgJHZhciAoLi4pIHsgLi4uIH0nCiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgIGVsc2lmICggJGlzX2lmX3VubGVzc193aGlsZV91bnRpbF9mb3JfZm9yZWFjaHskdG9rZW59ICkgewogICAgICAgICAgICAgICAgICAgIG15ICggJHNlcW5vX2JyYWNlLCAkS19lbmRfaXRlcmF0b3IgKSA9CiAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+YmxvY2tfc2Vxbm9fb2ZfcGFyZW5fa2V5d29yZCgkS0spOwogICAgICAgICAgICAgICAgICAgIGlmICgkc2Vxbm9fYnJhY2UpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgRm91bmQgdGhlIGJyYWNlLiBNYXJrIGFuIGl0ZXJhdG9yIGFzIGEgbmV3IGxleGljYWwKICAgICAgICAgICAgICAgICAgICAgICAgIyB2YXJpYWJsZSBpbiBvcmRlciB0byBjYXRjaCBzb21ldGhpbmcgbGlrZToKICAgICAgICAgICAgICAgICAgICAgICAgIyAgICBteSAkaTsKICAgICAgICAgICAgICAgICAgICAgICAgIyAgICBmb3JlYWNoICRpKC4uLikgeyB9CiAgICAgICAgICAgICAgICAgICAgICAgICMgd2hlcmUgdGhlIGl0ZXJhdG9yICRpIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgZmlyc3QKICAgICAgICAgICAgICAgICAgICAgICAgIyAkaSwgV2Ugc2hvdWxkIGJlIGJleW9uZCBhbnkgZXhpc3RpbmcgJEtfZW5kX215LCBidXQKICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBhbnl3YXk6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEtfZW5kX2l0ZXJhdG9yICYmICRLX2VuZF9pdGVyYXRvciA+ICRLX2VuZF9teSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRLX2VuZF9teSAgID0gJEtfZW5kX2l0ZXJhdG9yOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG15X2tleXdvcmQgPSAkdG9rZW47CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgVmFyaWFibGVzIGNyZWF0ZWQgYmV0d2VlbiB0aGVzZSBrZXl3b3JkcyBhbmQgdGhlaXIKICAgICAgICAgICAgICAgICAgICAgICAgIyBvcGVuaW5nIGJyYWNlIGhhdmUgc3BlY2lhbCBzY29wZSBydWxlcy4gV2Ugd2lsbAogICAgICAgICAgICAgICAgICAgICAgICAjIGNyZWF0ZSBhIHNwZWNpYWwgJ2NvbnRyb2wgbGF5ZXInIHN0YWNrIGVudHJ5IGZvciB0aGVtCiAgICAgICAgICAgICAgICAgICAgICAgICMgaGVyZSwgd2l0aCB0aGUgc2FtZSBibG9jayBzZXF1ZW5jZSBudW1iZXIuICBXaGVuIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAjIGNsb3NpbmcgYmxvY2sgYnJhY2UgYXJyaXZlcywgaXQgd2lsbCBsb29rIGZvciBhCiAgICAgICAgICAgICAgICAgICAgICAgICMgZHVwbGljYXRlIHN0YWNrIGVudHJ5IGFuZCBlaXRoZXIgY2xvc2UgaXQgb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICMgZm9yIGlmLWVsc2lmLWVsc2UgY2hhaW4sIHByb3BhZ2F0ZSBpdCBvbndhcmQuCiAgICAgICAgICAgICAgICAgICAgICAgICRwdXNoX2Jsb2NrX3N0YWNrLT4oJHNlcW5vX2JyYWNlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoICR0b2tlbiBlcSAnc3ViJyApIHsKICAgICAgICAgICAgICAgICAgICAkY2hlY2tfc3ViX3NpZ25hdHVyZS0+KCRLSyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkcmtleXdvcmRfY291bnQtPnskdG9rZW59Kys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIGFuIGlkZW50aWZpZXIKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgIGVsc2lmICggJHR5cGUgZXEgJ2knIHx8ICR0eXBlIGVxICdaJyApIHsKCiAgICAgICAgICAgICAgICAjIFN0aWxsIGNvbGxlY3RpbmcgJ215JyB2YXJzPwogICAgICAgICAgICAgICAgaWYgKCAkS0sgPD0gJEtfZW5kX215ICkgewogICAgICAgICAgICAgICAgICAgICRjaGVja2luX25ld19sZXhpY2FsLT4oJEtLKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIE5vdCBjb2xsZWN0aW5nICdteScgdmFycyAtIHVwZGF0ZSBjb3VudHMKICAgICAgICAgICAgICAgIGVsc2lmICggJGNoZWNrX3VudXNlZCB8fCAkY2hlY2tfY29uc3RhbnQgKSB7CgogICAgICAgICAgICAgICAgICAgIG15ICRzaWdpbF9zdHJpbmcgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgICAgICAgICAgbXkgJHdvcmQgICAgICAgICA9IEVNUFRZX1NUUklORzsKCiAgICAgICAgICAgICAgICAgICAgIyBUaGUgcmVnZXggYmVsb3cgd2lsbCBtYXRjaCBudW1iZXJzLCBsaWtlICckMzR4JywgYnV0IHRoYXQKICAgICAgICAgICAgICAgICAgICAjIHNob3VsZCBub3QgYmUgYSBwcm9ibGVtIGJlY2F1c2UgaXQgd2lsbCBub3QgbWF0Y2ggYSBoYXNoCiAgICAgICAgICAgICAgICAgICAgIyBrZXkuCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkdG9rZW4gPX4gL14oXFcrKT8oXHcuKikkLyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHNpZ2lsX3N0cmluZyA9ICQxIGlmICgkMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICR3b3JkICAgICAgICAgPSAkMjsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJGNoZWNrX2NvbnN0YW50ICYmICR3b3JkICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbG9vayBmb3IgY29uc3RhbnQgaW52b2tlZCBsaWtlICcmT1JEJyBvciAnLT5PUkQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEkc2lnaWxfc3RyaW5nIHx8ICRzaWdpbF9zdHJpbmcgZXEgJyYnICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1cGRhdGVfY29uc3RhbnRfY291bnQtPiggJEtLLCAkd29yZCApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkc2lnaWxfc3RyaW5nIGVxICdAJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGluZGV4KCAkd29yZCwgJ0VYUE9SVCcgKSA+PSAwICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIExvb2tpbmcgZm9yIHN0dWZmIGxpa2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIEBFWFBPUlRfT0sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgQEFMUEhBOjpCRVRBOjpFWFBPUlQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkcGFja2FnZSA9ICRjdXJyZW50X3BhY2thZ2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJG5hbWUgICAgPSAkd29yZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkcG9zICAgICA9IHJpbmRleCggJHdvcmQsICc6OicgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRwb3MgPj0gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhY2thZ2UgPSBzdWJzdHIoICR3b3JkLCAwLCAkcG9zICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuYW1lICAgID0gc3Vic3RyKCAkd29yZCwgJHBvcyArIDIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkbmFtZSBlcSAnRVhQT1JUJyB8fCAkbmFtZSBlcSAnRVhQT1JUX09LJyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHVzaF9uZXdfRVhQT1JULT4oICRLSywgJHBhY2thZ2UgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHNpZ2lsX3N0cmluZykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHNpZ2lsID0gc3Vic3RyKCAkc2lnaWxfc3RyaW5nLCAtMSwgMSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhJGlzX3ZhbGlkX3NpZ2lseyRzaWdpbH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNpZ2lsX3N0cmluZyA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkd29yZCAgICAgICAgID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoICAgJGNoZWNrX3VudXNlZAogICAgICAgICAgICAgICAgICAgICAgICAmJiAkc2lnaWxfc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICYmICR3b3JkCiAgICAgICAgICAgICAgICAgICAgICAgICYmICR3b3JkID1+IC9cdysvICkKICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICBteSAkS24gPSAkc2VsZi0+S19uZXh0X2NvZGUoJEtLKTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGJyYWNrZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCgkS24pICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJG5leHRfdHlwZSA9ICRyTEwtPlskS25dLT5bX1RZUEVfXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJG5leHRfdHlwZSBlcSAnWycgfHwgJG5leHRfdHlwZSBlcSAnTCcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGJyYWNrZXQgPSAkckxMLT5bJEtuXS0+W19UT0tFTl9dOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICR1cGRhdGVfdXNlX2NvdW50LT4oICRzaWdpbF9zdHJpbmcsICR3b3JkLCAkYnJhY2tldCApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICMgaWdub3JlIHZhcmlhYmxlIGlmIG5vdCBjb2xsZWN0aW5nICdteScgb3IgY291bnRzCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgYSBzdWIgc3RhdGVtZW50CiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgIGVsc2lmICggJHR5cGUgZXEgJ1MnICkgewogICAgICAgICAgICAgICAgJGNoZWNrX3N1Yl9zaWduYXR1cmUtPigkS0spOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgIyBhIHBhY2thZ2Ugc3RhdGVtZW50CiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICBlbHNpZiAoICR0eXBlIGVxICdQJyApIHsKICAgICAgICAgICAgICAgIG15ICggJGtleXdvcmQsICRwYWNrYWdlICkgPSBzcGxpdCAvXHMrLywgJHRva2VuLCAyOwoKICAgICAgICAgICAgICAgICMga2V5d29yZCAncGFja2FnZScgbWF5IGJlIG9uIGEgcHJldmlvdXMgbGluZQogICAgICAgICAgICAgICAgaWYgKCAhJHBhY2thZ2UgKSB7ICRwYWNrYWdlID0gJGtleXdvcmQgfQoKICAgICAgICAgICAgICAgIGlmICggJHBhY2thZ2UgbmUgJGN1cnJlbnRfcGFja2FnZSApIHsKICAgICAgICAgICAgICAgICAgICAkY3VycmVudF9wYWNrYWdlID0gJHBhY2thZ2U7CgogICAgICAgICAgICAgICAgICAgICMgTG9vayBmb3IgbGV4aWNhbCB2YXJzIGRlY2xhcmVkIGluIG90aGVyIHBhY2thZ2VzIHdoaWNoCiAgICAgICAgICAgICAgICAgICAgIyB3aWxsIGJlIGFjY2Vzc2libGUgaW4gdGhpcyBwYWNrYWdlLiBXZSB3aWxsIGxpbWl0CiAgICAgICAgICAgICAgICAgICAgIyB0aGlzIGNoZWNrIHRvIG5ldyBwYWNrYWdlIHN0YXRlbWVudHMgYXQgdGhlIHRvcCBsZXZlbAogICAgICAgICAgICAgICAgICAgICMgaW4gb3JkZXIgdG8gZmlsdGVyIG91dCBzb21lIGNvbW1vbiBjYXNlcy4KICAgICAgICAgICAgICAgICAgICBpZiAoICRjaGVja19jcm9zc19wYWNrYWdlICYmIEB7JHJibG9ja19zdGFja30gPT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHJwYWNrYWdlX3dhcm5pbmdzID0gJHBhY2thZ2Vfd2FybmluZ3N7JHBhY2thZ2V9OwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFkZWZpbmVkKCRycGFja2FnZV93YXJuaW5ncykgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcnBhY2thZ2Vfd2FybmluZ3MgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYWNrYWdlX3dhcm5pbmdzeyRwYWNrYWdlfSA9ICRycGFja2FnZV93YXJuaW5nczsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRpdGVtICggQHskcmJsb2NrX3N0YWNrfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRyaGFzaCA9ICRpdGVtLT57cnZhcnN9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCBteSAkbmFtZSAoIGtleXMgJXskcmhhc2h9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRlbnRyeSA9ICRyaGFzaC0+eyRuYW1lfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkcGtnICAgPSAkZW50cnktPntwYWNrYWdlfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRwa2cgbmUgJHBhY2thZ2UgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRsbm8gICAgICA9ICRpeF9saW5lICsgMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHNlZV9saW5lID0gJGxubzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJG5vdGUgPQoiaXMgYWNjZXNzaWJsZSBpbiBsYXRlciBwYWNrYWdlcywgc2VlIGxpbmUgJHNlZV9saW5lIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAeyRycGFja2FnZV93YXJuaW5nc30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSAgICAgICAgPT4gJG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkICAgICA9PiAkZW50cnktPntrZXl3b3JkfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGUgICAgICAgID0+ICRub3RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlX2xpbmUgICAgPT4gJHNlZV9saW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9udW1iZXIgPT4gJGVudHJ5LT57bGluZV9pbmRleH0gKyAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0dGVyICAgICAgPT4gJ3AnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSyAgICAgICAgICAgPT4gJGVudHJ5LT57S30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMtLS0tLS0tLS0tLQogICAgICAgICAgICAjIGEgaGVyZSBkb2MKICAgICAgICAgICAgIy0tLS0tLS0tLS0tCiAgICAgICAgICAgIGVsc2lmICggJHR5cGUgZXEgJ2gnICkgewoKICAgICAgICAgICAgICAgICMgc2NhbiBoZXJlLWRvYyBpZiBpdCBpcyBpbnRlcnBvbGF0ZWQKICAgICAgICAgICAgICAgIGlmICggJGNoZWNrX3VudXNlZCAmJiBpc19pbnRlcnBvbGF0ZWRfaGVyZV9kb2MoJHRva2VuKSApIHsKICAgICAgICAgICAgICAgICAgICBteSAkaXhfSEVSRSA9IG1heCggJGl4X0hFUkVfRU5ELCAkaXhfbGluZSApOwoKICAgICAgICAgICAgICAgICAgICAjIGNvbGxlY3QgdGhlIGhlcmUgZG9jIHRleHQKICAgICAgICAgICAgICAgICAgICAoICRpeF9IRVJFX0VORCwgbXkgJGhlcmVfdGV4dCApID0KICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5nZXRfaGVyZV90ZXh0KCRpeF9IRVJFKTsKCiAgICAgICAgICAgICAgICAgICAgIyBzY2FuIHRoZSBoZXJlLWRvYyB0ZXh0CiAgICAgICAgICAgICAgICAgICAgJHNjYW5fcXVvdGVkX3RleHQtPigkaGVyZV90ZXh0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIGEgcXVvdGUgb2Ygc29tZSB0eXBlCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgZWxzaWYgKCAkdHlwZSBlcSAnUScgKSB7CgogICAgICAgICAgICAgICAgIyBpcyB0aGlzIGFuIGludGVycG9sYXRlZCBxdW90ZT8KICAgICAgICAgICAgICAgIG15ICRpbnRlcnBvbGF0ZWQ7CiAgICAgICAgICAgICAgICBpZiAoICRLSyA9PSAkS2ZpcnN0ICYmICRsaW5lX29mX3Rva2Vucy0+e19zdGFydGluZ19pbl9xdW90ZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgJGludGVycG9sYXRlZCA9ICRpbl9pbnRlcnBvbGF0ZWRfcXVvdGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgIyBpcyBpbnRlcnBvbGF0ZWQgaWYgaXQgZm9sbG93IGEgbWF0Y2ggb3BlcmF0b3IgPX4gb3IgIX4KICAgICAgICAgICAgICAgICAgICBteSAkS19sYXN0X2NvZGUgPSAkc2VsZi0+S19wcmV2aW91c19jb2RlKCRLSyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAgICRLX2xhc3RfY29kZQogICAgICAgICAgICAgICAgICAgICAgICAmJiAkaXNfcmVfbWF0Y2hfb3B7ICRyTEwtPlskS19sYXN0X2NvZGVdLT5bX1RZUEVfXSB9ICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRpbnRlcnBvbGF0ZWQgPSAxOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBpcyBub3QgaW50ZXJwb2xhdGVkIGZvciBsZWFkaW5nIG9wZXJhdG9yczogcXcgcSB0ciB5ICcKICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICR0b2tlbiA9fiAvXihxdyB8IHFbXnFyeF0gfCB0ciB8IFt5XCddICkveCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGludGVycG9sYXRlZCA9IDA7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIGlzIGludGVycG9sYXRlZCBmb3IgZXZlcnl0aGluZyBlbHNlCiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRpbnRlcnBvbGF0ZWQgPSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJGludGVycG9sYXRlZCkgewogICAgICAgICAgICAgICAgICAgICRzY2FuX3F1b3RlZF90ZXh0LT4oJHRva2VuKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICRLSyA9PSAkS2xhc3QgJiYgJGxpbmVfb2ZfdG9rZW5zLT57X2VuZGluZ19pbl9xdW90ZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgJGluX2ludGVycG9sYXRlZF9xdW90ZSA9ICRpbnRlcnBvbGF0ZWQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkaW5faW50ZXJwb2xhdGVkX3F1b3RlID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICR0eXBlIGVxICd3JyApIHsKICAgICAgICAgICAgICAgIGlmICggJHRva2VuIGVxICd2YXJzJyApIHsKICAgICAgICAgICAgICAgICAgICBteSAkS3AgPSAkc2VsZi0+S19wcmV2aW91c19jb2RlKCRLSyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAgIGRlZmluZWQoJEtwKQogICAgICAgICAgICAgICAgICAgICAgICAmJiAkckxMLT5bJEtwXS0+W19UT0tFTl9dIGVxICd1c2UnCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRyTEwtPlskS3BdLT5bX1RZUEVfXSBlcSAnaycgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHNjYW5fdXNlX3ZhcnMtPigkS0spOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgkY2hlY2tfY29uc3RhbnQpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICR0b2tlbiBlcSAnY29uc3RhbnQnICkgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkS3AgPSAkc2VsZi0+S19wcmV2aW91c19jb2RlKCRLSyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggICBkZWZpbmVkKCRLcCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRyTEwtPlskS3BdLT5bX1RPS0VOX10gZXEgJ3VzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRyTEwtPlskS3BdLT5bX1RZUEVfXSBlcSAnaycgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2Nhbl91c2VfY29uc3RhbnQtPigkS0spOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHVwZGF0ZV9jb25zdGFudF9jb3VudC0+KCRLSyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR1cGRhdGVfY29uc3RhbnRfY291bnQtPigkS0spOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICR0eXBlIGVxICdDJyApIHsKICAgICAgICAgICAgICAgIGlmICgkY2hlY2tfY29uc3RhbnQpIHsKICAgICAgICAgICAgICAgICAgICAkdXBkYXRlX2NvbnN0YW50X2NvdW50LT4oJEtLKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICR0eXBlIGVxICdVJyApIHsKICAgICAgICAgICAgICAgIGlmICgkY2hlY2tfY29uc3RhbnQpIHsKICAgICAgICAgICAgICAgICAgICAkdXBkYXRlX2NvbnN0YW50X2NvdW50LT4oJEtLKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICMgc2tpcCBhbGwgb3RoZXIgdG9rZW4gdHlwZXMKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjLS0tLS0tLS0tLQogICAgIyBGaW5pc2ggdXAKICAgICMtLS0tLS0tLS0tCgogICAgIyBza2lwIGZpbmFsICdjJyBhbmQgJ3UnIG91dHB1dCBpZiB0aGlzIGFwcGVhcnMgdG8gYmUgYSBzbmlwcGV0CiAgICBteSAkaXNfcG9zc2libGVfc25pcHBldCA9ICRyb3B0aW9uLT57aXNfcG9zc2libGVfc25pcHBldH07CiAgICBteSAkbW9yZV91X2NoZWNrcyA9CiAgICAgICAgICRjaGVja191bnVzZWQKICAgICAgJiYgQHskcmJsb2NrX3N0YWNrfSA9PSAxCiAgICAgICYmIGtleXMgJXsgJHJibG9ja19zdGFjay0+WzBdLT57cnZhcnN9IH07CiAgICBteSAkbW9yZV9jX2NoZWNrcyA9ICRjaGVja19jb25zdGFudCAmJiBrZXlzICV7JHJjb25zdGFudF9oYXNofTsKCiAgICBpZiAoICRpc19wb3NzaWJsZV9zbmlwcGV0CiAgICAgICAgJiYgKCAkbW9yZV91X2NoZWNrcyB8fCAkbW9yZV9jX2NoZWNrcyApICkKICAgIHsKCiAgICAgICAgIyB0aGUgZmxhZyAkaXNfcG9zc2libGVfc25pcHBldCA9IDA6Tm8gIDE6VW5jZXJ0YWluICAgMjpZZXMKICAgICAgICBpZiAoICAgJGlzX3Bvc3NpYmxlX3NuaXBwZXQgPT0gMQogICAgICAgICAgICAmJiAkc2VsZi0+aXNfY29tcGxldGVfc2NyaXB0KCAkcmxpbmVfdHlwZV9jb3VudCwgJHJrZXl3b3JkX2NvdW50ICkgKQogICAgICAgIHsKICAgICAgICAgICAgIyBub3QgYSBzbmlwcGV0CiAgICAgICAgfQoKICAgICAgICAjIGlzIHBvc3NpYmxlIHNuaXBwZXQ6IGRlYWN0aXZhdGUgJ2MnIGFuZCAndQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkY2hlY2tfdW51c2VkICAgPSAwOwogICAgICAgICAgICAkY2hlY2tfY29uc3RhbnQgPSAwOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoIEB7JHJibG9ja19zdGFja30gIT0gMSApIHsKCiAgICAgICAgIyBzaG91bGRuJ3QgaGFwcGVuIGZvciBhIGJhbGFuY2VkIGlucHV0IGZpbGUKICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KCJzdGFjayBlcnJvciBhdCBlbmQgb2Ygc2NhblxuIik7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBpZiAoJGNoZWNrX3VudXNlZCkgewogICAgICAgICAgICBmb3JlYWNoIG15ICRpdGVtICggQHskcmJsb2NrX3N0YWNrfSApIHsKICAgICAgICAgICAgICAgIG15ICRyaGFzaCA9ICRpdGVtLT57cnZhcnN9OwogICAgICAgICAgICAgICAgJGNoZWNrX2Zvcl91bnVzZWRfbmFtZXMtPigkcmhhc2gpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmICgkY2hlY2tfY29uc3RhbnQpIHsKICAgICAgICBteSBAd2FybmluZ3NfYzsKICAgICAgICBteSAlcGFja2FnZXNfd2l0aF93YXJuaW5nczsKICAgICAgICBmb3JlYWNoIG15ICRwYWNrYWdlICgga2V5cyAleyRyY29uc3RhbnRfaGFzaH0gKSB7CiAgICAgICAgICAgIG15ICRyaGFzaCA9ICRyY29uc3RhbnRfaGFzaC0+eyRwYWNrYWdlfTsKICAgICAgICAgICAgbmV4dCBpZiAoICFkZWZpbmVkKCRyaGFzaCkgKTsKICAgICAgICAgICAgZm9yZWFjaCBteSAkbmFtZSAoIGtleXMgJXskcmhhc2h9ICkgewogICAgICAgICAgICAgICAgbXkgJGVudHJ5ID0gJHJjb25zdGFudF9oYXNoLT57JHBhY2thZ2V9LT57JG5hbWV9OwogICAgICAgICAgICAgICAgbmV4dCBpZiAoICRlbnRyeS0+e2NvdW50fSApOwogICAgICAgICAgICAgICAgcHVzaCBAd2FybmluZ3NfYywKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG5hbWUgICAgICAgID0+ICRuYW1lLAogICAgICAgICAgICAgICAgICAgIGtleXdvcmQgICAgID0+ICd1c2UgY29uc3RhbnQnLAogICAgICAgICAgICAgICAgICAgIHNlZV9saW5lICAgID0+IEVNUFRZX1NUUklORywKICAgICAgICAgICAgICAgICAgICBub3RlICAgICAgICA9PiAiYXBwZWFycyB1bnVzZWQgaW4gcGFja2FnZSAkcGFja2FnZSIsCiAgICAgICAgICAgICAgICAgICAgbGluZV9udW1iZXIgPT4gJGVudHJ5LT57bGluZV9pbmRleH0gKyAxLAogICAgICAgICAgICAgICAgICAgIGxldHRlciAgICAgID0+ICdjJywKICAgICAgICAgICAgICAgICAgICBwYWNrYWdlICAgICA9PiAkcGFja2FnZSwKICAgICAgICAgICAgICAgICAgICBLICAgICAgICAgICA9PiAkZW50cnktPntLfSwKICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICRwYWNrYWdlc193aXRoX3dhcm5pbmdzeyRwYWNrYWdlfSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZmlsdGVyIG91dCBjb25zdGFudHMgZm91bmQgaW4gQEVYUE9SVCBhbmQgQEVYUE9SVF9PSwogICAgICAgIGlmIChAd2FybmluZ3NfYykgewoKICAgICAgICAgICAgIyBleHBhbmQgcmVsZXZhbnQgRVhQT1JUIGxpc3RzCiAgICAgICAgICAgIG15ICRyRVhQT1JUX3dvcmRzX2J5X3BhY2thZ2UgPSB7fTsKICAgICAgICAgICAgZm9yZWFjaCBteSAkcGFja2FnZSAoIGtleXMgJXBhY2thZ2VzX3dpdGhfd2FybmluZ3MgKSB7CiAgICAgICAgICAgICAgICBteSAkcktsaXN0ID0gJHJFWFBPUlRfaGFzaC0+eyRwYWNrYWdlfTsKICAgICAgICAgICAgICAgIG5leHQgdW5sZXNzICgkcktsaXN0KTsKICAgICAgICAgICAgICAgICRyRVhQT1JUX3dvcmRzX2J5X3BhY2thZ2UtPnskcGFja2FnZX0gPSB7fTsKICAgICAgICAgICAgICAgIGZvcmVhY2ggbXkgJEtLICggQHskcktsaXN0fSApIHsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+ZXhwYW5kX0VYUE9SVF9saXN0KCAkS0ssCiAgICAgICAgICAgICAgICAgICAgICAgICRyRVhQT1JUX3dvcmRzX2J5X3BhY2thZ2UtPnskcGFja2FnZX0gKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyByZW1vdmUgd2FybmluZ3MgaW4gRVhQT1JUIGxpc3RzCiAgICAgICAgICAgIGZvcmVhY2ggbXkgJHJ3YXJuaW5nIChAd2FybmluZ3NfYykgewogICAgICAgICAgICAgICAgbXkgJHBhY2thZ2UgPSAkcndhcm5pbmctPntwYWNrYWdlfTsKICAgICAgICAgICAgICAgIG15ICRuYW1lICAgID0gJHJ3YXJuaW5nLT57bmFtZX07CiAgICAgICAgICAgICAgICBteSAkcmhhc2ggICA9ICRyRVhQT1JUX3dvcmRzX2J5X3BhY2thZ2UtPnskcGFja2FnZX07CiAgICAgICAgICAgICAgICBuZXh0IGlmICggJHJoYXNoICYmICRyaGFzaC0+eyRuYW1lfSApOwogICAgICAgICAgICAgICAgcHVzaCBAd2FybmluZ3MsICRyd2FybmluZzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIE1lcmdlIHBhY2thZ2UgaXNzdWVzLi4uCiAgICAjIE9ubHkgaW5jbHVkZSBjcm9zcy1wYWNrYWdlIHdhcm5pbmdzIGZvciBwYWNrYWdlcyB3aGljaCBjcmVhdGVkIHN1YnMuCiAgICAjIFRoaXMgd2lsbCBsaW1pdCB0aGlzIHR5cGUgb2Ygd2FybmluZyB0byBzaWduaWZpY2FudCBwYWNrYWdlIGNoYW5nZXMuCiAgICBteSBAcF93YXJuaW5nczsKICAgIGZvcmVhY2ggbXkgJGtleSAoIGtleXMgJXBhY2thZ2Vfd2FybmluZ3MgKSB7CiAgICAgICAgbmV4dCBpZiAoICEkc3ViX2NvdW50X2J5X3BhY2thZ2V7JGtleX0gKTsKICAgICAgICBwdXNoIEBwX3dhcm5pbmdzLCBAeyAkcGFja2FnZV93YXJuaW5nc3ska2V5fSB9OwogICAgfQoKICAgICMgUmVtb3ZlIGR1cGxpY2F0ZSBwYWNrYWdlIHdhcm5pbmdzIGZvciB0aGUgc2FtZSBpbml0aWFsIGxpbmUsIHdoaWNoIGNhbgogICAgIyBoYXBwZW4gaWYgdGhlcmUgd2VyZSBtdWx0aXBsZSBwYWNrYWdlcy4KICAgIGlmIChAcF93YXJuaW5ncykgewogICAgICAgIG15ICVzZWVuOwoKICAgICAgICAjIHNvcnQgb24gcGFja2FnZSB3YXJuaW5nIGxpbmUgb3JkZXIKICAgICAgICBAcF93YXJuaW5ncyA9IHNvcnQgeyAkYS0+e3NlZV9saW5lfSA8PT4gJGItPntzZWVfbGluZX0gfSBAcF93YXJuaW5nczsKCiAgICAgICAgIyB1c2UgZmlyc3QgcGFja2FnZSB3YXJuaW5nIGZvciBhIGdpdmVuIHZhcmlhYmxlCiAgICAgICAgZm9yZWFjaCBteSAkaXRlbSAoQHBfd2FybmluZ3MpIHsKICAgICAgICAgICAgbXkgJGtleSA9ICRpdGVtLT57bGluZV9udW1iZXJ9IC4gJzonIC4gJGl0ZW0tPntuYW1lfTsKICAgICAgICAgICAgbmV4dCBpZiAoICRzZWVueyRrZXl9KysgKTsKICAgICAgICAgICAgcHVzaCBAd2FybmluZ3MsICRpdGVtOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoQHdhcm5pbmdzKSB7CgogICAgICAgICMgZmlsdGVyIG91dCBjZXJ0YWluIGNvbW1vbiAnb3VyJyB2YXJpYWJsZXMgZnJvbSBhbGwgd2FybmluZ3MKICAgICAgICAjICBiZWNhdXNlIHRoZXkgYXJlIGNvbW1vbiBhbmQgZGlmZmljdWx0IHRvIGZpeCwgYW5kCiAgICAgICAgIyBzb3J0IG9uIHRva2VuIGluZGV4IGFuZCBpc3N1ZSB0eXBlCgogICAgICAgIG15ICVpc19leGVtcHRlZF9nbG9iYWxfbmFtZTsKICAgICAgICBteSBAcSA9IHF3KCAkVkVSU0lPTiBARVhQT1JUIEBFWFBPUlRfT0sgJUVYUE9SVF9UQUdTIEBJU0EgJEFVVE9MT0FEICk7CiAgICAgICAgQGlzX2V4ZW1wdGVkX2dsb2JhbF9uYW1le0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgICAgIEB3YXJuaW5ncyA9CiAgICAgICAgICBzb3J0IHsgJGEtPntLfSA8PT4gJGItPntLfSB8fCAkYS0+e2xldHRlcn0gY21wICRiLT57bGV0dGVyfSB9CgogICAgICAgICAgIyBGSVhNRTogdGhpcyBsaW1pdGF0aW9uIG1heSBldmVudHVhbGx5IGp1c3QgYmUgZm9yICdvdXInIHZhcnMKICAgICAgICAgICMgYWZ0ZXIgJ3VzZSB2YXJzJyBjb2RpbmcgaXMgZmluYWxpemVkCiAgICAgICAgICBncmVwIHsKICAgICAgICAgICAgKCAkXy0+e2tleXdvcmR9IG5lICdvdXInICYmICRfLT57a2V5d29yZH0gbmUgJ3VzZSB2YXJzJyApCiAgICAgICAgICAgICAgfHwgISRpc19leGVtcHRlZF9nbG9iYWxfbmFtZXsgJF8tPntuYW1lfSB9CiAgICAgICAgICB9IEB3YXJuaW5nczsKICAgIH0KCiAgICByZXR1cm4gKCBcQHdhcm5pbmdzLCAkaXNzdWVfdHlwZV9zdHJpbmcgKTsKfSAjIyBlbmQgc3ViIHNjYW5fdmFyaWFibGVfdXNhZ2UKCnN1YiBkdW1wX3VudXN1YWxfdmFyaWFibGVzIHsKICAgIG15ICgkc2VsZikgPSBAXzsKCiAgICAjIHByb2Nlc3MgYSAtLWR1bXAtdW51c3VhbC12YXJpYWJsZXMoLWR1dikgY29tbWFuZAoKICAgIG15ICggJHJsaW5lcywgJGlzc3VlX3R5cGVfc3RyaW5nICkgPSAkc2VsZi0+c2Nhbl92YXJpYWJsZV91c2FnZSgpOwogICAgcmV0dXJuIHVubGVzcyAoICRybGluZXMgJiYgQHskcmxpbmVzfSApOwoKICAgIG15ICRpbnB1dF9zdHJlYW1fbmFtZSA9IGdldF9pbnB1dF9zdHJlYW1fbmFtZSgpOwoKICAgICMgb3V0cHV0IGZvciBtdWx0aXBsZSB0eXBlcwogICAgbXkgJG91dHB1dF9zdHJpbmcgPSA8PEVPTTsKJGlucHV0X3N0cmVhbV9uYW1lOiBvdXRwdXQgZm9yIC0tZHVtcC11bnVzdWFsLXZhcmlhYmxlcwokaXNzdWVfdHlwZV9zdHJpbmcKTGluZTpJc3N1ZTogVmFyOiBub3RlCkVPTQogICAgZm9yZWFjaCBteSAkaXRlbSAoIEB7JHJsaW5lc30gKSB7CiAgICAgICAgbXkgJGxubyAgICAgPSAkaXRlbS0+e2xpbmVfbnVtYmVyfTsKICAgICAgICBteSAkbGV0dGVyICA9ICRpdGVtLT57bGV0dGVyfTsKICAgICAgICBteSAka2V5d29yZCA9ICRpdGVtLT57a2V5d29yZH07CiAgICAgICAgbXkgJG5hbWUgICAgPSAkaXRlbS0+e25hbWV9OwogICAgICAgIG15ICRub3RlICAgID0gJGl0ZW0tPntub3RlfTsKICAgICAgICBpZiAoJG5vdGUpIHsgJG5vdGUgPSAiOiAkbm90ZSIgfQogICAgICAgICRvdXRwdXRfc3RyaW5nIC49ICIkbG5vOiRsZXR0ZXI6ICRrZXl3b3JkICRuYW1lJG5vdGVcbiI7CiAgICB9CiAgICBwcmludCB7KlNURE9VVH0gJG91dHB1dF9zdHJpbmc7CgogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgZHVtcF91bnVzdWFsX3ZhcmlhYmxlcwoKc3ViIGluaXRpYWxpemVfd2Fybl9oYXNoIHsKICAgIG15ICggJGxvbmdfbmFtZSwgJGRlZmF1bHQsICRyYWxsX29wdHMgKSA9IEBfOwoKICAgICMgR2l2ZW46CiAgICAjICAgJGxvbmdfbmFtZSAgID0gZnVsbCBvcHRpb24gbmFtZQogICAgIyAgICRkZWZhdWx0ICAgICA9IGRlZmF1bHQgdmFsdWUKICAgICMgICAkcmFsbF9vcHRzICAgPSBhbGwgcG9zc2libGUgb3B0aW9ucwogICAgIyBSZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgb3B0aW9uIGhhc2gKCiAgICAjIEV4YW1wbGUgb2YgYWxsIHBvc3NpYmxlIG9wdGlvbnMgZm9yIC0td2Fybi12YXJpYWJsZS10eXBlcz1zCiAgICAjICByIC0gcmV1c2VkIHNjb3BlCiAgICAjICBzIC0gcmV1c2VkIHNpZ2lsCiAgICAjICBwIC0gcGFja2FnZSBib3VuZGFyaWVzIGNyb3NzZWQgYnkgbGV4aWNhbCB2YXJpYWJsZXMKICAgICMgIHUgLSB1bnVzZWQgbGV4aWNhbCB2YXJpYWJsZSBkZWZpbmVkIGJ5IG15LCBzdGF0ZSwgb3VyCiAgICAjICBjIC0gdW51c2VkIGNvbnN0YW50IGRlZmluZWQgYnkgdXNlIGNvbnN0YW50CgogICAgIyBPdGhlciB3YXJuIG9wdGlvbnMgdXNlIGRpZmZlcmVudCBsZXR0ZXJzCgogICAgIyBPdGhlciBjb250cm9sczoKICAgICMgIDAgLSBub25lIG9mIHRoZSBhYm92ZQogICAgIyAgMSAtIGFsbCBvZiB0aGUgYWJvdmUKICAgICMgICogLSBhbGwgb2YgdGhlIGFib3ZlCgogICAgIyBFeGFtcGxlOgogICAgIyAgLXd2dD0ncyByJyAgOiBkbyBjaGVjayB0eXBlcyAncycgYW5kICdyJwoKICAgIG15ICRyd2Fybl9oYXNoID0ge307CgogICAgaWYgKCAhJHJhbGxfb3B0cyB8fCAhQHskcmFsbF9vcHRzfSApIHsKICAgICAgICBGYXVsdCgiYWxsX29wdGlvbnMgaXMgZW1wdHkgZm9yIGNhbGwgd2l0aCBvcHRpb24gJGxvbmdfbmFtZVxuIik7CiAgICAgICAgcmV0dXJuICRyd2Fybl9oYXNoOwogICAgfQoKICAgIG15ICR1c2VyX29wdGlvbl9zdHJpbmcgPSAkck9wdHMtPnskbG9uZ19uYW1lfTsKICAgIGlmICggIWRlZmluZWQoJHVzZXJfb3B0aW9uX3N0cmluZykgKSB7ICR1c2VyX29wdGlvbl9zdHJpbmcgPSAkZGVmYXVsdCB9CiAgICByZXR1cm4gJHJ3YXJuX2hhc2ggdW5sZXNzICgkdXNlcl9vcHRpb25fc3RyaW5nKTsKCiAgICBteSAlaXNfdmFsaWRfb3B0aW9uOwogICAgQGlzX3ZhbGlkX29wdGlvbnsgQHskcmFsbF9vcHRzfSB9ID0gKDEpIHggc2NhbGFyKCBAeyRyYWxsX29wdHN9ICk7CgogICAgIyBhbGxvdyBjb21tYSBzZXBhcmF0b3JzCiAgICAkdXNlcl9vcHRpb25fc3RyaW5nID1+IHMvLC8gL2c7CgogICAgbXkgQG9wdHMgPSBzcGxpdF93b3JkcygkdXNlcl9vcHRpb25fc3RyaW5nKTsKICAgIHJldHVybiAkcndhcm5faGFzaCB1bmxlc3MgKEBvcHRzKTsKCiAgICAjIGNoZWNrIGEgc2luZ2xlIGl0ZW0KICAgIGlmICggQG9wdHMgPT0gMSApIHsKICAgICAgICBteSAkb3B0ID0gJG9wdHNbMF07CgogICAgICAgICMgU3BsaXQgYSBzaW5nbGUgb3B0aW9uIG9mIGJ1bmRsZWQgbGV0dGVycyBsaWtlICdyc3AnIGludG8gJ3IgcyBwJwogICAgICAgICMgYnV0IGdpdmUgYSB3YXJuaW5nIGJlY2F1c2UgdGhpcyBtYXkgbm90IGJlIGFsbG93ZWQgaW4gdGhlIGZ1dHVyZQogICAgICAgIGlmICggbGVuZ3RoKCRvcHQpID4gMSApIHsKICAgICAgICAgICAgQG9wdHMgPSBzcGxpdCAvLywgJG9wdDsKICAgICAgICAgICAgV2FybigiUGxlYXNlIHVzZSBzcGFjZS1zZXBhcmF0ZWQgbGV0dGVycyBpbiAtLSRsb25nX25hbWVcbiIpOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRvcHQgZXEgJyonIHx8ICRvcHQgZXEgJzEnICkgewogICAgICAgICAgICBAb3B0cyA9IGtleXMgJWlzX3ZhbGlkX29wdGlvbjsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkb3B0IGVxICcwJyApIHsKICAgICAgICAgICAgcmV0dXJuICRyd2Fybl9oYXNoOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIyBzaG91bGQgYmUgb25lIG9mIHRoZSBhbGxvd2VkIGxldHRlcnMgLSBjYXRjaCBhbnkgZXJyb3IgYmVsb3cKICAgICAgICB9CiAgICB9CgogICAgbXkgJG1zZyA9IEVNUFRZX1NUUklORzsKICAgIGZvcmVhY2ggbXkgJG9wdCAoQG9wdHMpIHsKICAgICAgICBpZiAoICRpc192YWxpZF9vcHRpb257JG9wdH0gKSB7CiAgICAgICAgICAgICRyd2Fybl9oYXNoLT57JG9wdH0gPSAxOwogICAgICAgICAgICBuZXh0OwogICAgICAgIH0KCiAgICAgICAgIyBpbnZhbGlkIG9wdGlvbi4uCiAgICAgICAgaWYgKCAkb3B0ID1+IC9eWzAxXCpdJC8gKSB7CiAgICAgICAgICAgICRtc2cgLj0KICAgICAgICAgICAgICAiLS0kbG9uZ19uYW1lIGNhbm5vdCBjb250YWluICRvcHQgbWl4ZWQgd2l0aCBvdGhlciBvcHRpb25zXG4iOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJG1zZyAuPSAiLS0kbG9uZ19uYW1lIGhhcyB1bmV4cGVjdGVkIHN5bWJvbDogJyRvcHQnXG4iOwogICAgICAgIH0KICAgIH0KICAgIGlmICgkbXNnKSB7IERpZSgkbXNnKSB9CiAgICByZXR1cm4gJHJ3YXJuX2hhc2g7Cn0gIyMgZW5kIHN1YiBpbml0aWFsaXplX3dhcm5faGFzaAoKc3ViIG1ha2VfZXhjbHVkZWRfbmFtZV9oYXNoIHsKICAgIG15ICgkb3B0aW9uX25hbWUpID0gQF87CgogICAgIyBDb252ZXJ0IGEgbGlzdCBvZiB3b3JkcyBpbnRvIGEgaGFzaCByZWYgZm9yIGFuIGlucHV0IG9wdGlvbgogICAgIyBHaXZlbjoKICAgICMgICAkb3B0aW9uX25hbWUgPSB0aGUgbmFtZSBvZiBhbiBpbnB1dCBvcHRpb24KICAgICMgICAgICAgZXhhbXBsZTogICAnd2Fybi12YXJpYWJsZS1leGNsdXNpb24tbGlzdCcKICAgIG15ICRyZXhjbHVkZWRfbmFtZV9oYXNoID0ge307CiAgICBteSAkZXhjbHVkZWRfbmFtZXMgICAgICA9ICRyT3B0cy0+eyRvcHRpb25fbmFtZX07CiAgICBpZiAoJGV4Y2x1ZGVkX25hbWVzKSB7CiAgICAgICAgJGV4Y2x1ZGVkX25hbWVzID1+IHMvLC8gL2c7CiAgICAgICAgbXkgQHhsICAgICAgPSBzcGxpdF93b3JkcygkZXhjbHVkZWRfbmFtZXMpOwogICAgICAgIG15ICRlcnJfbXNnID0gRU1QVFlfU1RSSU5HOwogICAgICAgIGZvcmVhY2ggbXkgJG5hbWUgKEB4bCkgewogICAgICAgICAgICBpZiAoICRuYW1lID1+IC9eKFtcJFxAXCVcKl0pPyhcdyspPyhcKik/JC8gKSB7CiAgICAgICAgICAgICAgICBteSAkbGVmdF9zdGFyICA9ICQxOwogICAgICAgICAgICAgICAgbXkgJGtleSAgICAgICAgPSAkMjsKICAgICAgICAgICAgICAgIG15ICRyaWdodF9zdGFyID0gJDM7CiAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQoJGxlZnRfc3RhcikgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkbGVmdF9zdGFyIG5lICcqJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRrZXkpICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYXBwZW5kIHNpZ2lsIHRvIHRoZSBiYXJld29yZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGtleSA9ICRsZWZ0X3N0YXIgLiAka2V5OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd29yZCBub3QgZ2l2ZW46ICckKicgaXMgb2sgYnV0IGp1c3QgJyQnIGlzIG5vdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRyaWdodF9zdGFyKSB7ICRrZXkgPSAkbGVmdF9zdGFyIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAkbGVmdF9zdGFyID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIFdpbGRjYXJkIG1hdGNoaW5nIGNvZGVzOgogICAgICAgICAgICAgICAgIyAxID0gbm8gc3RhcnMKICAgICAgICAgICAgICAgICMgMiA9IGxlZnQgc3RhciBvbmx5CiAgICAgICAgICAgICAgICAjIDMgPSByaWdodCBzdGFyIG9ubHkKICAgICAgICAgICAgICAgICMgNCA9IGJvdGggbGVmdCBhbmQgcmlnaHQgc3RhcnMKICAgICAgICAgICAgICAgIG15ICRjb2RlID0gMTsKICAgICAgICAgICAgICAgICRjb2RlICs9IDEgaWYgKCRsZWZ0X3N0YXIpOwogICAgICAgICAgICAgICAgJGNvZGUgKz0gMiBpZiAoJHJpZ2h0X3N0YXIpOwogICAgICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgka2V5KSApIHsKICAgICAgICAgICAgICAgICAgICAkZXJyX21zZyAuPSAiLS0kb3B0aW9uX25hbWUgaGFzIHVuZXhwZWN0ZWQgbmFtZTogJyRuYW1lJ1xuIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRyZXhjbHVkZWRfbmFtZV9oYXNoLT57JGtleX0gPSAkY29kZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRlcnJfbXNnIC49ICItLSRvcHRpb25fbmFtZSBoYXMgdW5leHBlY3RlZCBuYW1lOiAnJG5hbWUnXG4iOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICgkZXJyX21zZykgeyBEaWUoJGVycl9tc2cpIH0KICAgIH0KICAgIHJldHVybiAkcmV4Y2x1ZGVkX25hbWVfaGFzaDsKfSAjIyBlbmQgc3ViIG1ha2VfZXhjbHVkZWRfbmFtZV9oYXNoCgpzdWIgd2lsZGNhcmRfbWF0Y2ggewoKICAgIG15ICggJG5hbWUsICRyd2lsZGNhcmRfbWF0Y2hfbGlzdCApID0gQF87CgogICAgIyBHaXZlbjoKICAgICMgICAgJG5hbWUgPSBhIHN0cmluZyB0byB0ZXN0IGZvciBhIG1hdGNoCiAgICAjICAgICRyd2lsZGNhcmRfbWF0Y2hfbGlzdCA9IGEgbGlzdCBvZiBba2V5LGNvZGVdIHBhaXJzOgogICAgIyAgICAgICAga2V5ICA9IGEgc3RyaW5nIHRvIG1hdGNoCiAgICAjICAgICAgICBjb2RlID0gMiwgMywgb3IgNCBpcyBtYXRjaCB0eXBlIChzZWUgY29tbWVudHMgYmVsb3cpCiAgICAjIFJldHVybjoKICAgICMgICAgdHJ1ZSBmb3IgYSBtYXRjaAogICAgIyAgICBmYWxzZSBmb3Igbm8gbWF0Y2gKCiAgICAjIEZvciBleGFtcGxlLCBrZXk9JyRwYWNrJyB3aXRoIGNvZGU9MyBpcyBzaG9ydCBmb3IgJyRwYWNrKicKICAgICMgd2hpY2ggd2lsbCBtYXRjaCAnJHBhY2thZ2UnLCAnJHBhY2tlcicsIGV0YwoKICAgICMgTG9vcCBvdmVyIGFsbCBwb3NzaWJsZSBtYXRjaGVzCiAgICBmb3JlYWNoICggQHskcndpbGRjYXJkX21hdGNoX2xpc3R9ICkgewogICAgICAgIG15ICggJGtleSwgJGNvZGUgKSA9IEB7JF99OwogICAgICAgIG15ICRsZW5fa2V5ICA9IGxlbmd0aCgka2V5KTsKICAgICAgICBteSAkbGVuX25hbWUgPSBsZW5ndGgoJG5hbWUpOwogICAgICAgIG5leHQgaWYgKCAkbGVuX25hbWUgPCAkbGVuX2tleSApOwoKICAgICAgICAjIGNvZGUgMiA9IGxlZnQgc3RhciBvbmx5CiAgICAgICAgaWYgKCAkY29kZSA9PSAyICkgewogICAgICAgICAgICBpZiAoIHN1YnN0ciggJG5hbWUsIC0kbGVuX2tleSwgJGxlbl9rZXkgKSBlcSAka2V5ICkgeyByZXR1cm4gMSB9CiAgICAgICAgfQoKICAgICAgICAjIGNvZGUgMyA9IHJpZ2h0IHN0YXIgb25seQogICAgICAgIGVsc2lmICggJGNvZGUgPT0gMyApIHsKICAgICAgICAgICAgaWYgKCBzdWJzdHIoICRuYW1lLCAwLCAkbGVuX2tleSApIGVxICRrZXkgKSB7IHJldHVybiAxIH0KICAgICAgICB9CgogICAgICAgICMgY29kZSA0ID0gYm90aCBsZWZ0IGFuZCByaWdodCBzdGFycwogICAgICAgIGVsc2lmICggJGNvZGUgPT0gNCApIHsKICAgICAgICAgICAgaWYgKCBpbmRleCggJG5hbWUsICRrZXksIDAgKSA+PSAwICkgeyByZXR1cm4gMSB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KCJ1bmV4cGVjdGVkIGNvZGUgJyRjb2RlJyBmb3IgJyRuYW1lJ1xuIik7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgd2lsZGNhcmRfbWF0Y2gKCnN1YiBpbml0aWFsaXplX3dhcm5fdmFyaWFibGVfdHlwZXMgewoKICAgIG15ICggJHd2dF9pbl9hcmdzLCAkbnVtX2ZpbGVzLCAkbGluZV9yYW5nZV9jbGlwcGVkICkgPSBAXzsKCiAgICAjIEluaXRpYWxpemF0aW9uIGZvcjoKICAgICMgICAgLS13YXJuLXZhcmlhYmxlLXR5cGVzPXMgYW5kCiAgICAjICAgIC0td2Fybi12YXJpYWJsZS1leGNsdXNpb24tbGlzdD1zCiAgICAjIEdpdmVuOgogICAgIyAgICR3dnRfaW5fYXJncyA9IHRydWUgaWYgdGhlIC13dnQgcGFyYW1ldGVyIHdhcyBvbiB0aGUgY29tbWFuZCBsaW5lCiAgICAjICAgJG51bV9maWxlcyA9IG51bWJlciBvZiBmaWxlcyBvbiB0aGUgY29tbWFuZCBsaW5lCiAgICAjICAgJGxpbmVfcmFuZ2VfY2xpcHBlZCA9IHRydWUgaWYgb25seSBwYXJ0IG9mIGEgZmlsZSBpcyBiZWluZyBmb3JtYXR0ZWQKCiAgICBteSBAYWxsX29wdHMgPSBxdyggciBzIHAgdSBjICk7CiAgICAkcndhcm5fdmFyaWFibGVfdHlwZXMgPQogICAgICBpbml0aWFsaXplX3dhcm5faGFzaCggJ3dhcm4tdmFyaWFibGUtdHlwZXMnLCAwLCBcQGFsbF9vcHRzICk7CgogICAgIyBDaGVjayBmb3IgaXNzdWVzICd1JyBvciAnYycgY2Fubm90IGJlIGZ1bGx5IG1hZGUgaWYgd2UgYXJlIHdvcmtpbmcKICAgICMgb24gYSBwYXJ0aWFsIGZpbGUgKHNuaXBwZXQpLCBzbyB3ZSBzYXZlIGluZm8gYWJvdXQgdGhhdC4KICAgIGlmICggJHJ3YXJuX3ZhcmlhYmxlX3R5cGVzLT57dX0gfHwgJHJ3YXJuX3ZhcmlhYmxlX3R5cGVzLT57Y30gKSB7CgogICAgICAgICMgVGhyZWUgdmFsdWUgc3dpdGNoOiAwPU5PLCAxPU1BWUJFIDI9REVGSU5JVEVMWQogICAgICAgIG15ICRpc19wb3NzaWJsZV9zbmlwcGV0ID0gMTsKCiAgICAgICAgIyBhc3N1bWUgc25pcHBldCBpZiBpbmNvbXBsZXRlIGxpbmUgcmFuZ2UgaXMgYmVpbmcgZm9ybWF0dGVkCiAgICAgICAgaWYgKCRsaW5lX3JhbmdlX2NsaXBwZWQpIHsKICAgICAgICAgICAgJGlzX3Bvc3NpYmxlX3NuaXBwZXQgPSAyOwogICAgICAgIH0KCiAgICAgICAgIyBhc3N1bWUgY29tcGxldGUgc2NyaXB0IGlmIG9wZXJhdGluZyBvbiBtdWx0aXBsZSBmaWxlcyBvciBpZgogICAgICAgICMgb3BlcmF0aW5nIG9uIG9uZSBmaWxlIGFuZCAtd3Z0IGNhbWUgaW4gb24gdGhlIGNvbW1hbmQgbGluZQogICAgICAgIGlmICggJGlzX3Bvc3NpYmxlX3NuaXBwZXQgPT0gMSAmJiAkbnVtX2ZpbGVzICkgewogICAgICAgICAgICBpZiAoICRudW1fZmlsZXMgPiAxIHx8ICR3dnRfaW5fYXJncyAmJiAkbnVtX2ZpbGVzICkgewogICAgICAgICAgICAgICAgJGlzX3Bvc3NpYmxlX3NuaXBwZXQgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkcndhcm5fdmFyaWFibGVfdHlwZXMtPntpc19wb3NzaWJsZV9zbmlwcGV0fSA9ICRpc19wb3NzaWJsZV9zbmlwcGV0OwogICAgfQoKICAgICRyaXNfd2Fybl92YXJpYWJsZV9leGNsdWRlZF9uYW1lID0KICAgICAgbWFrZV9leGNsdWRlZF9uYW1lX2hhc2goJ3dhcm4tdmFyaWFibGUtZXhjbHVzaW9uLWxpc3QnKTsKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGluaXRpYWxpemVfd2Fybl92YXJpYWJsZV90eXBlcwoKc3ViIGZpbHRlcl9leGNsdWRlZF9uYW1lcyB7CgogICAgbXkgKCAkcndhcm5pbmdzLCAkcmV4Y2x1ZGVkX25hbWVfaGFzaCApID0gQF87CgogICAgIyBSZW1vdmUgd2FybmluZ3MgZm9yIHZhcmlhYmxlIG5hbWVzIGV4Y2x1ZGVkIGJ5IHVzZXIgcmVxdWVzdAogICAgIyBmb3IgYW4gb3BlcmF0aW9uIGxpa2UgLS13YXJuLXZhcmlhYmxlLXR5cGVzCgogICAgIyBHaXZlbjoKICAgICMgICAkcndhcm5pZ25zID0gcmVmIHRvIGxpc3Qgb2Ygd2FybmluZyBpbmZvIGhhc2hlcwogICAgIyAgICRyZXhjbHVkZWRfbmFtZV9oYXNoID0gcmVmIHRvIGhhc2ggd2l0aCBleGNsdWRlZCBuYW1lcwogICAgIyBSZXR1cm4gdXBkYXRlZCAkcndhcm5pbmdzIHdpdGggZXhjbHVkZWQgbmFtZXMgcmVtb3ZlZAogICAgaWYgKCBAeyRyd2FybmluZ3N9ICYmICRyZXhjbHVkZWRfbmFtZV9oYXNoICkgewoKICAgICAgICAjIENoZWNrIGZvciBleGFjdCBtYXRjaGVzCiAgICAgICAgJHJ3YXJuaW5ncyA9CiAgICAgICAgICBbIGdyZXAgeyAhJHJleGNsdWRlZF9uYW1lX2hhc2gtPnsgJF8tPntuYW1lfSB9IH0gQHskcndhcm5pbmdzfSBdOwoKICAgICAgICAjIFNlZSBpZiB0aGVyZSBhcmUgYW55IHdpbGRjYXJkIG5hbWVzCiAgICAgICAgbXkgQGV4Y2x1ZGVkX3dpbGRjYXJkczsKICAgICAgICBmb3JlYWNoIG15ICRrZXkgKCBrZXlzICV7JHJleGNsdWRlZF9uYW1lX2hhc2h9ICkgewogICAgICAgICAgICBteSAkY29kZSA9ICRyZXhjbHVkZWRfbmFtZV9oYXNoLT57JGtleX07CiAgICAgICAgICAgIGlmICggJGNvZGUgIT0gMSApIHsKICAgICAgICAgICAgICAgIHB1c2ggQGV4Y2x1ZGVkX3dpbGRjYXJkcywgWyAka2V5LCAkY29kZSBdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoQGV4Y2x1ZGVkX3dpbGRjYXJkcykgewogICAgICAgICAgICBteSBAdG1wOwogICAgICAgICAgICBmb3JlYWNoIG15ICRpdGVtICggQHskcndhcm5pbmdzfSApIHsKICAgICAgICAgICAgICAgIG15ICRuYW1lID0gJGl0ZW0tPntuYW1lfTsKICAgICAgICAgICAgICAgIGlmICggd2lsZGNhcmRfbWF0Y2goICRuYW1lLCBcQGV4Y2x1ZGVkX3dpbGRjYXJkcyApICkgewogICAgICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBwdXNoIEB0bXAsICRpdGVtOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyd2FybmluZ3MgPSBcQHRtcDsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gJHJ3YXJuaW5nczsKfSAjIyBlbmQgc3ViIGZpbHRlcl9leGNsdWRlZF9uYW1lcwoKc3ViIHdhcm5fdmFyaWFibGVfdHlwZXMgewogICAgbXkgKCRzZWxmKSA9IEBfOwoKICAgICMgcHJvY2VzcyBhIC0td2Fybi12YXJpYWJsZS10eXBlcyBjb21tYW5kCgogICAgbXkgJHd2X2tleSAgICA9ICd3YXJuLXZhcmlhYmxlLXR5cGVzJzsKICAgIG15ICR3dl9vcHRpb24gPSAkck9wdHMtPnskd3Zfa2V5fTsKICAgIHJldHVybiB1bmxlc3MgKCAleyRyd2Fybl92YXJpYWJsZV90eXBlc30gKTsKCiAgICBteSAoICRyd2FybmluZ3MsICRpc3N1ZV90eXBlX3N0cmluZyApID0KICAgICAgJHNlbGYtPnNjYW5fdmFyaWFibGVfdXNhZ2UoJHJ3YXJuX3ZhcmlhYmxlX3R5cGVzKTsKICAgIHJldHVybiB1bmxlc3MgKCAkcndhcm5pbmdzICYmIEB7JHJ3YXJuaW5nc30gKTsKCiAgICAkcndhcm5pbmdzID0KICAgICAgZmlsdGVyX2V4Y2x1ZGVkX25hbWVzKCAkcndhcm5pbmdzLCAkcmlzX3dhcm5fdmFyaWFibGVfZXhjbHVkZWRfbmFtZSApOwoKICAgICMgbG9vcCB0byBmb3JtIGVycm9yIG1lc3NhZ2VzCiAgICBteSAkbWVzc2FnZV9taWRkbGUgPSBFTVBUWV9TVFJJTkc7CiAgICBmb3JlYWNoIG15ICRpdGVtICggQHskcndhcm5pbmdzfSApIHsKICAgICAgICBteSAkbmFtZSAgICA9ICRpdGVtLT57bmFtZX07CiAgICAgICAgbXkgJGxubyAgICAgPSAkaXRlbS0+e2xpbmVfbnVtYmVyfTsKICAgICAgICBteSAkbGV0dGVyICA9ICRpdGVtLT57bGV0dGVyfTsKICAgICAgICBteSAka2V5d29yZCA9ICRpdGVtLT57a2V5d29yZH07CiAgICAgICAgbXkgJG5vdGUgICAgPSAkaXRlbS0+e25vdGV9OwogICAgICAgIGlmICgkbm90ZSkgeyAkbm90ZSA9ICI6ICRub3RlIiB9CiAgICAgICAgJG1lc3NhZ2VfbWlkZGxlIC49ICIkbG5vOiRsZXR0ZXI6ICRrZXl3b3JkICRuYW1lJG5vdGVcbiI7CiAgICB9CgogICAgaWYgKCRtZXNzYWdlX21pZGRsZSkgewogICAgICAgIG15ICRtZXNzYWdlID0gIkJlZ2luIHNjYW4gZm9yIC0tJHd2X2tleT0kd3Zfb3B0aW9uXG4iOwogICAgICAgICRtZXNzYWdlIC49IDw8RU9NOwokaXNzdWVfdHlwZV9zdHJpbmcKTGluZTpJc3N1ZTogVmFyOiBub3RlCkVPTQogICAgICAgICRtZXNzYWdlIC49ICRtZXNzYWdlX21pZGRsZTsKICAgICAgICAkbWVzc2FnZSAuPSAiRW5kIHNjYW4gZm9yIC0tJHd2X2tleT0kd3Zfb3B0aW9uOlxuIjsKICAgICAgICB3YXJuaW5nKCRtZXNzYWdlKTsKICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHdhcm5fdmFyaWFibGVfdHlwZXMKCnN1YiBibG9ja19zZXFub19vZl9wYXJlbl9zZXFubyB7CgogICAgbXkgKCAkc2VsZiwgJHNlcW5vX3BhcmVuICkgPSBAXzsKCiAgICAjIEZpbmQgYnJhY2UgYXQgJyl7JyBhZnRlciBwYXJlbiBvZiBrZXl3b3JkIHN1Y2ggYXMgZm9yLCBmb3JlYWNoLCAuLi4KICAgICMgU0VFIEFMU086IHN1YiBibG9ja19zZXFub19vZl9wYXJlbl9rZXl3b3JkCgogICAgIyBHaXZlbjoKICAgICMgICRzZXFub19wYXJlbiA9IHNlcXVlbmNlIG51bWJlciBvZiB0aGUgcGFyZW4gZm9sbG93aW5nIGEga2V5d29yZCB3aGljaAogICAgIyAgICBtYXkgZWl0aGVyIGludHJvZHVjZSBhIGJsb2NrIG9yIGJlIGEgdHJhaWxpbmcgc3RhdGVtZW50IG1vZGlmaWVyLAogICAgIyAgICBzdWNoIGFzICdpZicsCiAgICAjIFJldHVybjoKICAgICMgICAgLSB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBibG9jaywgaWYgYW55LCBvcgogICAgIyAgICAtIG5vdGhpbmcKCiAgICAjICBpZiAoLi4uKSB7IC4uLgogICAgIyAgICAgXiAgIF4gXgogICAgIyAgICAgfCAgIHwgfAogICAgIyAgICAgfCAgIHwgS19vcGVuaW5nX2JyYWNlID0+IHJldHVybiBzZXF1bm8gb2YgdGhpcyBicmFjZQogICAgIyAgICAgfCAgIEtfY2xvc2luZ19wYXJlbgogICAgIyAgICAgJHNlcW5vX3BhcmVuID0gc2Vxbm8gb2YgdGhpcyBwYXJlbiBwYWlyCgogICAgcmV0dXJuIHVubGVzcyAkc2Vxbm9fcGFyZW47CiAgICBteSAkS19jbG9zaW5nX3BhcmVuID0gJHNlbGYtPltfS19jbG9zaW5nX2NvbnRhaW5lcl9dLT57JHNlcW5vX3BhcmVufTsKICAgIHJldHVybiB1bmxlc3MgKCRLX2Nsb3NpbmdfcGFyZW4pOwogICAgbXkgJEtfb3BlbmluZ19icmFjZSA9ICRzZWxmLT5LX25leHRfY29kZSgkS19jbG9zaW5nX3BhcmVuKTsKICAgIHJldHVybiB1bmxlc3MgKCRLX29wZW5pbmdfYnJhY2UpOwogICAgbXkgJHJMTCAgICAgICAgID0gJHNlbGYtPltfckxMX107CiAgICBteSAkc2Vxbm9fYmxvY2sgPSAkckxMLT5bJEtfb3BlbmluZ19icmFjZV0tPltfVFlQRV9TRVFVRU5DRV9dOwogICAgcmV0dXJuCiAgICAgIHVubGVzcyAoICRzZXFub19ibG9jawogICAgICAgICYmICRyTEwtPlskS19vcGVuaW5nX2JyYWNlXS0+W19UT0tFTl9dIGVxICd7JwogICAgICAgICYmICRzZWxmLT5bX3JibG9ja190eXBlX29mX3NlcW5vX10tPnskc2Vxbm9fYmxvY2t9ICk7CiAgICByZXR1cm4gJHNlcW5vX2Jsb2NrOwp9ICMjIGVuZCBzdWIgYmxvY2tfc2Vxbm9fb2ZfcGFyZW5fc2Vxbm8KCnN1YiBkdW1wX21peGVkX2NhbGxfcGFyZW5zIHsKICAgIG15ICgkc2VsZikgPSBAXzsKCiAgICAjIEltcGxlbnQgLS1kdW1wLW1peGVkLWNhbGwtcGFyZW5zCgogICAgbXkgJG9wdF9uYW1lID0gJ2R1bXAtbWl4ZWQtY2FsbC1wYXJlbnMnOwogICAgcmV0dXJuIHVubGVzcyAkck9wdHMtPnskb3B0X25hbWV9OwoKICAgIG15ICRyTEwgPSAkc2VsZi0+W19yTExfXTsKCiAgICBteSAlc2tpcF9rZXl3b3JkczsKICAgIG15IEBxID0gcXcoIG15IG91ciBsb2NhbCBzdGF0ZQogICAgICBhbmQgY21wIGNvbnRpbnVlIGRvIGVsc2UgZWxzaWYgZXEgZ2UgZ3QgbGUgbHQgbmUgbm90IG9yIHhvciApOwogICAgQHNraXBfa2V5d29yZHN7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICBteSAlY2FsbF9jb3VudHM7CiAgICBmb3JlYWNoIG15ICRLSyAoIDAgLi4gQHskckxMfSAtIDEgKSB7CgogICAgICAgICMgVHlwZXMgd2hpY2ggd2lsbCBiZSBjaGVja2VkOgogICAgICAgICMgJ2snPWJ1aWx0aW4ga2V5d29yZCwgJ1UnPXVzZXIgZGVmaW5lZCBzdWIsICd3Jz11bmtub3duIGJhcmV3b3JkCiAgICAgICAgbmV4dCB1bmxlc3MgKCAkaXNfa3dVeyAkckxMLT5bJEtLXS0+W19UWVBFX10gfSApOwoKICAgICAgICBteSAkdHlwZSAgPSAkckxMLT5bJEtLXS0+W19UWVBFX107CiAgICAgICAgbXkgJHRva2VuID0gJHJMTC0+WyRLS10tPltfVE9LRU5fXTsKICAgICAgICBpZiAoICR0eXBlIGVxICdrJyAmJiAkc2tpcF9rZXl3b3Jkc3skdG9rZW59ICkgeyBuZXh0IH0KCiAgICAgICAgbXkgJEtuID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLSyk7CiAgICAgICAgbmV4dCB1bmxlc3MgZGVmaW5lZCgkS24pOwogICAgICAgIG15ICR0b2tlbl9LbiA9ICRyTEwtPlskS25dLT5bX1RPS0VOX107CiAgICAgICAgbXkgJGhhdmVfcGFyZW47CiAgICAgICAgaWYgICAgKCAkdG9rZW5fS24gZXEgJz0+JyApIHsgbmV4dCB9CiAgICAgICAgZWxzaWYgKCAkdG9rZW5fS24gZXEgJy0+JyApIHsgbmV4dCB9CiAgICAgICAgZWxzaWYgKCAkdG9rZW5fS24gZXEgJygnICkgIHsgJGhhdmVfcGFyZW4gPSAxIH0KICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgeyAkaGF2ZV9wYXJlbiA9IDAgfQoKICAgICAgICAjIHJldHVybiBpZiB0aGlzIGlzIHRoZSBibG9jayBmb3JtIG9mICdpZicsICd1bmxlc3MnLCAuLgogICAgICAgIGlmICggICAkaGF2ZV9wYXJlbgogICAgICAgICAgICAmJiAkaXNfaWZfdW5sZXNzX3doaWxlX3VudGlsX2Zvcl9mb3JlYWNoeyR0b2tlbn0gKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJHNlcW5vID0gJHJMTC0+WyRLbl0tPltfVFlQRV9TRVFVRU5DRV9dOwogICAgICAgICAgICBuZXh0IGlmICggJHNlbGYtPmJsb2NrX3NlcW5vX29mX3BhcmVuX3NlcW5vKCRzZXFubykgKTsKICAgICAgICB9CgogICAgICAgIGlmICggIWRlZmluZWQoICRjYWxsX2NvdW50c3skdG9rZW59ICkgKSB7CiAgICAgICAgICAgICRjYWxsX2NvdW50c3skdG9rZW59ID0gWyAwLCAwLCAkdHlwZSBdOwogICAgICAgIH0KICAgICAgICAkY2FsbF9jb3VudHN7JHRva2VufS0+WyRoYXZlX3BhcmVuXSsrOwogICAgfQogICAgbXkgQG1peGVkX2NvdW50czsKICAgIGZvcmVhY2ggbXkgJGtleSAoIGtleXMgJWNhbGxfY291bnRzICkgewogICAgICAgIG15ICggJG5vX2NvdW50LCAkeWVzX2NvdW50LCAkdHlwZSApID0gQHsgJGNhbGxfY291bnRzeyRrZXl9IH07CiAgICAgICAgbmV4dCB1bmxlc3MgKCAkbm9fY291bnQgJiYgJHllc19jb3VudCApOwoKICAgICAgICBwdXNoIEBtaXhlZF9jb3VudHMsCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWUgICAgICA9PiAka2V5LAogICAgICAgICAgICB0eXBlICAgICAgPT4gJHR5cGUsCiAgICAgICAgICAgIG5vX2NvdW50ICA9PiAkbm9fY291bnQsCiAgICAgICAgICAgIHllc19jb3VudCA9PiAkeWVzX2NvdW50LAogICAgICAgICAgfTsKICAgIH0KICAgIHJldHVybiB1bmxlc3MgKEBtaXhlZF9jb3VudHMpOwoKICAgICMgc29ydCBvbiBsYyBvZiB0eXBlIHNvIHRoYXQgdXNlciBzdWIgdHlwZSAnVScgd2lsbCBjb21lIGFmdGVyICdrJwogICAgbXkgQHNvcnRlZCA9CiAgICAgIHNvcnQgeyBsYyAkYS0+e3R5cGV9IGNtcCBsYyAkYi0+e3R5cGV9IHx8ICRhLT57bmFtZX0gY21wICRiLT57bmFtZX0gfQogICAgICBAbWl4ZWRfY291bnRzOwoKICAgIG15ICRpbnB1dF9zdHJlYW1fbmFtZSA9IGdldF9pbnB1dF9zdHJlYW1fbmFtZSgpOwogICAgbXkgJG91dHB1dF9zdHJpbmcgICAgID0gPDxFT007CiRpbnB1dF9zdHJlYW1fbmFtZTogb3V0cHV0IGZvciAtLWR1bXAtbWl4ZWQtY2FsbC1wYXJlbnMKdXNlIC13Y3A9cyBhbmQvb3IgbndjcD1zIHRvIGZpbmQgbGluZSBudW1iZXJzLCB3aGVyZSBzIGlzIGEgc3RyaW5nIG9mIHdvcmRzCnR5cGVzIGFyZSAnayc9YnVpbHRpbiBrZXl3b3JkICdVJz11c2VyIHN1YiAgJ3cnPW90aGVyIHdvcmQKdHlwZTp3b3JkOitjb3VudDotY291bnQKRU9NCiAgICBmb3JlYWNoIG15ICRpdGVtIChAc29ydGVkKSB7CiAgICAgICAgbXkgJHR5cGUgICAgICA9ICRpdGVtLT57dHlwZX07CiAgICAgICAgbXkgJG5hbWUgICAgICA9ICRpdGVtLT57bmFtZX07CiAgICAgICAgbXkgJG5vX2NvdW50ICA9ICRpdGVtLT57bm9fY291bnR9OwogICAgICAgIG15ICR5ZXNfY291bnQgPSAkaXRlbS0+e3llc19jb3VudH07CiAgICAgICAgJG91dHB1dF9zdHJpbmcgLj0gIiR0eXBlOiRuYW1lOiR5ZXNfY291bnQ6JG5vX2NvdW50XG4iOwogICAgfQogICAgcHJpbnQgeypTVERPVVR9ICRvdXRwdXRfc3RyaW5nOwogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgZHVtcF9taXhlZF9jYWxsX3BhcmVucwoKc3ViIGluaXRpYWxpemVfY2FsbF9wYXJlbl9zdHlsZSB7CgogICAgIyBwYXJzZSAtLXdhbnQtY2FsbC1wYXJlbnM9cyBhbmQgLS1ub3dhbnQtY2FsbC1wYXJlbnM9cwogICAgIyBhbmQgc3RvcmUgcmVzdWx0cyBpbiB0aGlzIGdsb2JhbCBoYXNoOgogICAgJWNhbGxfcGFyZW5fc3R5bGUgPSAoKTsKICAgIG15ICRpdGVyID0gLTE7CiAgICBmb3JlYWNoIG15ICRvcHRfbmFtZSAoICdub3dhbnQtY2FsbC1wYXJlbnMnLCAnd2FudC1jYWxsLXBhcmVucycgKSB7CiAgICAgICAgJGl0ZXIrKzsKICAgICAgICBteSAkb3B0ID0gJHJPcHRzLT57JG9wdF9uYW1lfTsKICAgICAgICBuZXh0IHVubGVzcyBkZWZpbmVkKCRvcHQpOwoKICAgICAgICAjIGFsbG93IGNvbW1hIHNlcGFyYXRvcnMKICAgICAgICAkb3B0ID1+IHMvLC8gL2c7CiAgICAgICAgaWYgKCBteSBAcSA9IHNwbGl0X3dvcmRzKCRvcHQpICkgewogICAgICAgICAgICBmb3JlYWNoIG15ICR3b3JkIChAcSkgewoKICAgICAgICAgICAgICAgICMgd29yZHMgbXVzdCBiZSBzaW1wbGUgaWRlbnRpZmllcnMsIG9yICcmJwogICAgICAgICAgICAgICAgaWYgKCAkd29yZCAhfiAvXig/OlwmfFx3KykkLyB8fCAkd29yZCA9fiAvXlxkLyApIHsKICAgICAgICAgICAgICAgICAgICBEaWUoIlVuZXhwZWN0ZWQgd29yZCBpbiAtLSRvcHRfbmFtZTogJyR3b3JkJ1xuIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoICRpdGVyICYmIGRlZmluZWQoICRjYWxsX3BhcmVuX3N0eWxleyR3b3JkfSApICkgewogICAgICAgICAgICAgICAgICAgIFdhcm4oIickd29yZCcgb2NjdXJzIGluIGJvdGggLW53Y3AgYW5kIC13Y3AsIHVzaW5nIC13Y3BcbiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIEBjYWxsX3BhcmVuX3N0eWxle0BxfSA9ICgkaXRlcikgeCBzY2FsYXIoQHEpOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGluaXRpYWxpemVfY2FsbF9wYXJlbl9zdHlsZQoKc3ViIHNjYW5fY2FsbF9wYXJlbnMgewogICAgbXkgKCRzZWxmKSA9IEBfOwoKICAgICMgUGVyZm9ybSBhIHNjYW4gcmVxdWVzdGVkIGJ5IC0td2FudC1jYWxsLXBhcmVucwogICAgIyBXZSBzZWFyY2ggZm9yIHNlbGVjdGVkIGZ1bmN0aW9ucyBvciBrZXl3b3JkcyBhbmQgZm9yIGEgZm9sbG93aW5nIHBhcmVuLgogICAgIyBBIHdhcm5pbmcgaXMgaXNzdWVkIGlmIHRoZSBwYXJlbiBleGlzdGVuY2UgaXMgbm90IHdoYXQgaXMgd2FudGVkCiAgICAjIGFjY29yZGluZyB0byB0aGUgc2V0dGluZyAtLXdhbnQtY2FsbC1wYXJlbnMuCgogICAgIyBUaGlzIHJvdXRpbmUgZG9lcyBub3QgYXR0ZW1wdCB0byBhZGQgb3IgcmVtb3ZlIHBhcmVucywgaXQgbWVyZWx5CiAgICAjIGlzc3VlcyBhIHdhcm5pbmcgc28gdGhhdCB0aGUgdXNlciBjYW4gbWFrZSBhIGNoYW5nZSBpZiBkZXNpcmVkLgogICAgIyBJdCBpcyByaXNreSB0byBhZGQgb3IgZGVsZXRlIHBhcmVucyBhdXRvbWF0aWNhbGx5OyBzZWUgZ2l0ICMxMjguCgogICAgcmV0dXJuIHVubGVzcyAoJWNhbGxfcGFyZW5fc3R5bGUpOwogICAgbXkgJG9wdF9uYW1lID0gJ3dhbnQtY2FsbC1wYXJlbnMnOwoKICAgIG15ICRyd2FybmluZ3MgPSBbXTsKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIExvb3Agb3ZlciBhbGwgdG9rZW5zCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBteSAkckxMID0gJHNlbGYtPltfckxMX107CiAgICBmb3JlYWNoIG15ICRLSyAoIDAgLi4gQHskckxMfSAtIDEgKSB7CgogICAgICAgICMgVHlwZXMgd2hpY2ggd2lsbCBiZSBjaGVja2VkOgogICAgICAgICMgJ2snPWJ1aWx0aW4ga2V5d29yZCwgJ1UnPXVzZXIgZGVmaW5lZCBzdWIsICd3Jz11bmtub3duIGJhcmV3b3JkCiAgICAgICAgbmV4dCB1bmxlc3MgKCAkaXNfa3dVeyAkckxMLT5bJEtLXS0+W19UWVBFX10gfSApOwoKICAgICAgICAjIEFyZSB3ZSBsb29raW5nIGZvciB0aGlzIHdvcmQ/CiAgICAgICAgbXkgJHR5cGUgICAgICAgPSAkckxMLT5bJEtLXS0+W19UWVBFX107CiAgICAgICAgbXkgJHRva2VuICAgICAgPSAkckxMLT5bJEtLXS0+W19UT0tFTl9dOwogICAgICAgIG15ICR3YW50X3BhcmVuID0gJGNhbGxfcGFyZW5fc3R5bGV7JHRva2VufTsKCiAgICAgICAgIyBPbmx5IHVzZXItZGVmaW5lZCBzdWJzICh0eXBlICdVJykgaGF2ZSBkZWZhdWx0cy4KICAgICAgICBpZiAoICFkZWZpbmVkKCR3YW50X3BhcmVuKSApIHsKICAgICAgICAgICAgJHdhbnRfcGFyZW4gPQogICAgICAgICAgICAgICAgJHR5cGUgZXEgJ2snID8gdW5kZWYKICAgICAgICAgICAgICA6ICR0eXBlIGVxICdVJyA/ICRjYWxsX3BhcmVuX3N0eWxleycmJ30KICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgIHVuZGVmOwogICAgICAgIH0KICAgICAgICBuZXh0IHVubGVzcyBkZWZpbmVkKCR3YW50X3BhcmVuKTsKCiAgICAgICAgIyBUaGlzIGlzIGEgc2VsZWN0ZWQgd29yZC4gTG9vayBmb3IgYSAnKCcgYXQgdGhlIG5leHQgdG9rZW4uCiAgICAgICAgbXkgJEtuID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLSyk7CiAgICAgICAgbmV4dCB1bmxlc3MgZGVmaW5lZCgkS24pOwoKICAgICAgICBteSAkdG9rZW5fS24gPSAkckxMLT5bJEtuXS0+W19UT0tFTl9dOwogICAgICAgIGlmICAgICggJHRva2VuX0tuIGVxICc9PicgKSB7IG5leHQgfQogICAgICAgIGVsc2lmICggJHRva2VuX0tuIGVxICctPicgKSB7IG5leHQgfQogICAgICAgIGVsc2lmICggJHRva2VuX0tuIGVxICcoJyApICB7IG5leHQgaWYgKCR3YW50X3BhcmVuKSB9CiAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHsgbmV4dCBpZiAoICEkd2FudF9wYXJlbiApIH0KCiAgICAgICAgIyByZXR1cm4gaWYgdGhpcyBpcyB0aGUgYmxvY2sgZm9ybSBvZiAnaWYnLCAndW5sZXNzJywgLi4KICAgICAgICBpZiAoICAgJHRva2VuX0tuIGVxICcoJwogICAgICAgICAgICAmJiAkaXNfaWZfdW5sZXNzX3doaWxlX3VudGlsX2Zvcl9mb3JlYWNoeyR0b2tlbn0gKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJHNlcW5vID0gJHJMTC0+WyRLbl0tPltfVFlQRV9TRVFVRU5DRV9dOwogICAgICAgICAgICBuZXh0IGlmICggJHNlbGYtPmJsb2NrX3NlcW5vX29mX3BhcmVuX3NlcW5vKCRzZXFubykgKTsKICAgICAgICB9CgogICAgICAgICMgVGhpcyBkaXNhZ3JlZXMgd2l0aCB0aGUgd2FudGVkIHN0eWxlOyBpc3N1ZSBhIHdhcm5pbmcuCiAgICAgICAgbXkgJG5vdGUgICAgID0gJHdhbnRfcGFyZW4gPyAibm8gY2FsbCBwYXJlbnMiIDogImhhcyBjYWxsIHBhcmVucyI7CiAgICAgICAgbXkgJHJ3YXJuaW5nID0gewogICAgICAgICAgICB0b2tlbiAgICAgICA9PiAkdG9rZW4sCiAgICAgICAgICAgIHRva2VuX25leHQgID0+ICR0b2tlbl9LbiwKICAgICAgICAgICAgd2FudCAgICAgICAgPT4gJHdhbnRfcGFyZW4sCiAgICAgICAgICAgIG5vdGUgICAgICAgID0+ICRub3RlLAogICAgICAgICAgICBsaW5lX251bWJlciA9PiAkckxMLT5bJEtLXS0+W19MSU5FX0lOREVYX10gKyAxLAogICAgICAgICAgICBLSyAgICAgICAgICA9PiAkS0ssCiAgICAgICAgICAgIEtuICAgICAgICAgID0+ICRLbiwKICAgICAgICB9OwogICAgICAgIHB1c2ggQHskcndhcm5pbmdzfSwgJHJ3YXJuaW5nOwogICAgfQoKICAgICMgUmVwb3J0IGFueSB3YXJuaW5ncwogICAgaWYgKCBAeyRyd2FybmluZ3N9ICkgewogICAgICAgIG15ICRtZXNzYWdlID0gIkJlZ2luIHNjYW4gZm9yIC0tJG9wdF9uYW1lXG4iOwogICAgICAgICRtZXNzYWdlIC49IDw8RU9NOwpMaW5lOnRleHQ6CkVPTQogICAgICAgIGZvcmVhY2ggbXkgJGl0ZW0gKCBAeyRyd2FybmluZ3N9ICkgewogICAgICAgICAgICBteSAkdG9rZW4gICAgICA9ICRpdGVtLT57dG9rZW59OwogICAgICAgICAgICBteSAkdG9rZW5fbmV4dCA9ICRpdGVtLT57dG9rZW5fbmV4dH07CiAgICAgICAgICAgIG15ICRub3RlICAgICAgID0gJGl0ZW0tPntub3RlfTsKICAgICAgICAgICAgbXkgJGxubyAgICAgICAgPSAkaXRlbS0+e2xpbmVfbnVtYmVyfTsKCiAgICAgICAgICAgICMgdHJpbSBsb25nIHRva2VucyBmb3IgdGhlIG91dHB1dCBsaW5lCiAgICAgICAgICAgIGlmICggbGVuZ3RoKCR0b2tlbl9uZXh0KSA+IDIzICkgewogICAgICAgICAgICAgICAgJHRva2VuX25leHQgPSBzdWJzdHIoICR0b2tlbl9uZXh0LCAwLCAyMCApIC4gJy4uLic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc3RvcCBiZWZvcmUgYSAnOicgdG8gYWxsb3cgdXNlIG9mICc6JyBhcyBzcHJlYWRzaGVldCBjb2wgc2VwYXJhdG9yCiAgICAgICAgICAgIG15ICRpaSA9IGluZGV4KCAkdG9rZW5fbmV4dCwgJzonICk7CiAgICAgICAgICAgIGlmICggJGlpID49IDAgKSB7ICR0b2tlbl9uZXh0ID0gc3Vic3RyKCAkdG9rZW5fbmV4dCwgMCwgJGlpICkgfQoKICAgICAgICAgICAgJG1lc3NhZ2UgLj0gIiRsbm86JHRva2VuICR0b2tlbl9uZXh0OiAkbm90ZVxuIjsKICAgICAgICB9CiAgICAgICAgJG1lc3NhZ2UgLj0gIkVuZCBzY2FuIGZvciAtLSRvcHRfbmFtZVxuIjsKCiAgICAgICAgIyBOb3RlIHRoYXQgdGhpcyBpcyBzZW50IGluIGEgc2luZ2xlIGNhbGwgdG8gd2FybmluZygpIGluIG9yZGVyCiAgICAgICAgIyB0byBhdm9pZCB0cmlnZ2VyaW5nIGEgc3RvcCBvbiBsYXJnZSB3YXJuaW5nIGNvdW50CiAgICAgICAgd2FybmluZygkbWVzc2FnZSk7CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBzY2FuX2NhbGxfcGFyZW5zCgpzdWIgZmluZF9ub25faW5kZW50aW5nX2JyYWNlcyB7CgogICAgbXkgKCAkc2VsZiwgJHJpeF9zaWRlX2NvbW1lbnRzICkgPSBAXzsKCiAgICAjIEZpbmQgYW5kIG1hcmsgYWxsIG5vbi1pbmRlbnRpbmcgYnJhY2VzIGluIHRoaXMgZmlsZS4KCiAgICAjIEdpdmVuOgogICAgIyAgICRyaXhfc2lkZV9jb21tZW50cyA9IGluZGV4IG9mIGxpbmVzIHdoaWNoIGhhdmUgc2lkZSBjb21tZW50cwogICAgIyBGaW5kIGFuZCBzYXZlIHRoZSBsaW5lIGluZGV4ZXMgb2YgdGhlc2Ugc3BlY2lhbCBzaWRlIGNvbW1lbnRzIGluOgogICAgIyAgICRzZWxmLT5bX3JzZXFub19ub25faW5kZW50aW5nX2JyYWNlX2J5X2l4X107CgogICAgIyBOb24taW5kZW50aW5nIGJyYWNlcyBhcmUgb3BlbmluZyBicmFjZXMgb2YgdGhlIGZvcm0KICAgICMgICB7ICM8PDwgLi4uCiAgICAjIHdoaWNoIGRvIG5vdCBjYXVzZSBhbiBpbmNyZWFzZSBpbiBpbmRlbnRhdGlvbiBsZXZlbC4KICAgICMgVGhleSBhcmUgZW5hYmxlZCB3aXRoIHRoZSAtLW5vbi1pbmRlbnRpbmctYnJhY2VzLCBvciAtbmliLCBmbGFnLgoKICAgIHJldHVybiB1bmxlc3MgKCAkck9wdHMtPnsnbm9uLWluZGVudGluZy1icmFjZXMnfSApOwogICAgbXkgJHJMTCA9ICRzZWxmLT5bX3JMTF9dOwogICAgcmV0dXJuIHVubGVzcyAoIGRlZmluZWQoJHJMTCkgJiYgQHskckxMfSApOwogICAgbXkgJHJsaW5lcyAgICAgICAgICAgICAgID0gJHNlbGYtPltfcmxpbmVzX107CiAgICBteSAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8gPSAkc2VsZi0+W19yYmxvY2tfdHlwZV9vZl9zZXFub19dOwogICAgbXkgJHJzZXFub19ub25faW5kZW50aW5nX2JyYWNlX2J5X2l4ID0KICAgICAgJHNlbGYtPltfcnNlcW5vX25vbl9pbmRlbnRpbmdfYnJhY2VfYnlfaXhfXTsKCiAgICBmb3JlYWNoIG15ICRpeCAoIEB7JHJpeF9zaWRlX2NvbW1lbnRzfSApIHsKICAgICAgICBteSAkbGluZV9vZl90b2tlbnMgPSAkcmxpbmVzLT5bJGl4XTsKICAgICAgICBteSAkbGluZV90eXBlICAgICAgPSAkbGluZV9vZl90b2tlbnMtPntfbGluZV90eXBlfTsKICAgICAgICBpZiAoICRsaW5lX3R5cGUgbmUgJ0NPREUnICkgewoKICAgICAgICAgICAgIyBzaG91bGRuJ3QgaGFwcGVuCiAgICAgICAgICAgIERFVkVMX01PREUgJiYgRmF1bHQoInVuZXhwZWN0ZWQgbGluZV90eXBlPSRsaW5lX3R5cGVcbiIpOwogICAgICAgICAgICBuZXh0OwogICAgICAgIH0KICAgICAgICBteSAkcktfcmFuZ2UgPSAkbGluZV9vZl90b2tlbnMtPntfcktfcmFuZ2V9OwogICAgICAgIG15ICggJEtmaXJzdCwgJEtsYXN0ICkgPSBAeyRyS19yYW5nZX07CiAgICAgICAgaWYgKCAhZGVmaW5lZCgkS2ZpcnN0KSB8fCAkckxMLT5bJEtsYXN0XS0+W19UWVBFX10gbmUgJyMnICkgewoKICAgICAgICAgICAgIyBzaG91bGRuJ3QgaGFwcGVuCiAgICAgICAgICAgIERFVkVMX01PREUgJiYgRmF1bHQoImRpZCBub3QgZ2V0IGEgY29tbWVudFxuIik7CiAgICAgICAgICAgIG5leHQ7CiAgICAgICAgfQogICAgICAgIG5leHQgaWYgKCAkS2xhc3QgPD0gJEtmaXJzdCApOyAgICAjIG1heWJlIEhTQwogICAgICAgIG15ICR0b2tlbl9zYyA9ICRyTEwtPlskS2xhc3RdLT5bX1RPS0VOX107CiAgICAgICAgbXkgJEtfbSAgICAgID0gJEtsYXN0IC0gMTsKICAgICAgICBteSAkdHlwZV9tICAgPSAkckxMLT5bJEtfbV0tPltfVFlQRV9dOwogICAgICAgIGlmICggJHR5cGVfbSBlcSAnYicgJiYgJEtfbSA+ICRLZmlyc3QgKSB7CiAgICAgICAgICAgICRLX20tLTsKICAgICAgICAgICAgJHR5cGVfbSA9ICRyTEwtPlskS19tXS0+W19UWVBFX107CiAgICAgICAgfQogICAgICAgIG15ICRzZXFub19tID0gJHJMTC0+WyRLX21dLT5bX1RZUEVfU0VRVUVOQ0VfXTsKICAgICAgICBpZiAoJHNlcW5vX20pIHsKICAgICAgICAgICAgbXkgJGJsb2NrX3R5cGVfbSA9ICRyYmxvY2tfdHlwZV9vZl9zZXFuby0+eyRzZXFub19tfTsKCiAgICAgICAgICAgICMgVGhlIHBhdHRlcm4gZW5kcyBpbiBccyBidXQgd2UgaGF2ZSByZW1vdmVkIHRoZSBuZXdsaW5lLCBzbwogICAgICAgICAgICAjIHdlIGFkZGVkIGl0IGJhY2sgZm9yIHRoZSBtYXRjaC4gVGhhdCB3YXkgd2UgcmVxdWlyZSBhbiBleGFjdAogICAgICAgICAgICAjIG1hdGNoIHRvIHRoZSBzcGVjaWFsIHN0cmluZyBhbmQgYWxzbyBhbGxvdyBhZGRpdGlvbmFsIHRleHQuCiAgICAgICAgICAgICR0b2tlbl9zYyAuPSAiXG4iOwogICAgICAgICAgICBpZiAoICAgJGJsb2NrX3R5cGVfbQogICAgICAgICAgICAgICAgJiYgJGlzX29wZW5pbmdfdHlwZXskdHlwZV9tfQogICAgICAgICAgICAgICAgJiYgJHRva2VuX3NjID1+IC8kbm9uX2luZGVudGluZ19icmFjZV9wYXR0ZXJuLyApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRyc2Vxbm9fbm9uX2luZGVudGluZ19icmFjZV9ieV9peC0+eyRpeH0gPSAkc2Vxbm9fbTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGZpbmRfbm9uX2luZGVudGluZ19icmFjZXMKCnN1YiBpbnRlcmJyYWNrZXRfYXJyb3dfY2hlY2sgewoKICAgIG15ICgkc2VsZikgPSBAXzsKCiAgICAjIEltcGxlbWVudCB0aGUgb3B0aW9ucyB0byBhZGQgb3IgZGVsZXRlIG9wdGlvbmFsIGFycm93cyBiZXR3ZWVuIGJyYWNrZXRzCiAgICBteSAkck9wdHNfYWRkICAgICAgICAgICAgPSAkck9wdHMtPnsnYWRkLWludGVyYnJhY2tldC1hcnJvd3MnfTsKICAgIG15ICRyT3B0c19kZWwgICAgICAgICAgICA9ICRyT3B0cy0+eydkZWxldGUtaW50ZXJicmFja2V0LWFycm93cyd9OwogICAgbXkgJHJPcHRzX3dhcm4gICAgICAgICAgID0gJHJPcHRzLT57J3dhcm4taW50ZXJicmFja2V0LWFycm93cyd9OwogICAgbXkgJHJPcHRzX3dhcm5fYW5kX3N0eWxlID0gJHJPcHRzX3dhcm4gJiYgJWludGVyYnJhY2tldF9hcnJvd19zdHlsZTsKCiAgICByZXR1cm4KICAgICAgdW5sZXNzICggJHJPcHRzX2FkZCB8fCAkck9wdHNfZGVsIHx8ICRyT3B0c193YXJuX2FuZF9zdHlsZSApOwoKICAgICMgTWV0aG9kOgogICAgIyAgTG9vcCBvdmVyIGFsbCBvcGVuaW5nIGJyYWNrZXRzIGFuZCBsb29rIGJhY2sgZm9yIGEgcG9zc2libGUgYXJyb3cKICAgICMgIGFuZCBjbG9zaW5nIGJyYWNrZXQuICBJZiB0aGUgbG9jYXRpb24gYmV0d2VlbiBicmFja2V0cyBhbGxvd3MgYW4KICAgICMgIG9wdGlvbmFsIGFycm93LCB0aGVuIHNlZSBpZiBvbmUgc2hvdWxkIGJlIGFkZGVkIG9yIGRlbGV0ZWQuCiAgICAjICBTZXQgYSBmbGFnIGZvciBzdWIgcmVzcGFjZV90b2tlbnMgd2hpY2ggd2lsbCBtYWtlIHRoZSBjaGFuZ2UuCgogICAgIyBEZWxldGluZyBleGFtcGxlczoKICAgICMgICR2YXJpYWJsZXMtPnsnYSd9LT57J2InfSAgICAgJHZhcmlhYmxlcy0+eydhJ317J2InfQogICAgIyAgJHZhcmlhYmxlc3snYSd9LT57J2InfSAgICAgICAkdmFyaWFibGVzeydhJ30tPnsnYid9CiAgICAjICAkaXRlbXNbMV0tPls0XS0+e3JlZH0gICAgICAgICRpdGVtc1sxXVs0XXtyZWR9CiAgICAjICAkaXRlbXN7Ymx1ZX0tPls0XS0+e3JlZH0gICAgICRpdGVtc3tibHVlfVs0XXtyZWR9CgogICAgIyAgQWRkaW5nIGV4YW1wbGVzOgogICAgIyAgJHZhcmlhYmxlcy0+eydhJ317J2InfSAgICAgICAkdmFyaWFibGVzLT57J2EnfS0+eydiJ30KICAgICMgICR2YXJpYWJsZXN7J2EnfS0+eydiJ30gICAgICAgJHZhcmlhYmxlc3snYSd9LT57J2InfQogICAgIyAgJGl0ZW1zWzFdWzRde3JlZH0gICAgICAgICAgICAkaXRlbXNbMV0tPls0XS0+e3JlZH0KICAgICMgICRpdGVtc3tibHVlfVs0XXtyZWR9ICAgICAgICAgJGl0ZW1ze2JsdWV9LT5bNF0tPntyZWR9CgogICAgIyBicmFja2V0IGNoYWluICAgICAgXSAgIHsgfSAgIFsgXSAgWwogICAgIyAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgIHwKICAgICMgYXJyb3cgb2s/ICAgICAgICAgICAgPyAgICAgPyAgICA/CgogICAgIyBUaGUgZm9sbG93aW5nIGNoYWluIHJ1bGUgaXMgdXNlZCB0byBsb2NhdGUgb3B0aW9uYWwgYXJyb3cgbG9jYXRpb25zOgogICAgIyBTY2FubmluZyBsZWZ0IHRvIHJpZ2h0OgogICAgIyAgLWFycm93cyBjYW4gYmVnaW4gb25jZSB3ZSBzZWUgYW4gb3BlbmluZyB0b2tlbiBwcmVjZWRlZCBieToKICAgICMgICAgLSBhbiAtPiwgb3IKICAgICMgICAgLSBhIHNpbXBsZSBzY2FsYXIgaWRlbnRpZmllciBsaWtlICckaHJlZnsnIG9yICckYXJ5cmVmWycKICAgICMgIC0gT25jZSBhcnJvd3MgYmVnaW4gdGhleSBtYXkgY29udGludWUgdG8gdGhlIGVuZCBvZiB0aGUgYnJhY2tldCBjaGFpbi4KCiAgICAjICAgVG8gaWxsdXN0cmF0ZSB3aHkgd2UganVzdCBjYW4ndCBhZGQgYW5kIHJlbW92ZSBhcnJvd3MgYmV0d2VlbgogICAgIyAgICddJyBhbmQgJ1snLCBmb3IgZXhhbXBsZSwgY29uc2lkZXIKICAgICMgICBteSAkdjEgPSBbIDEsIDIsIFsgMywgNCBdIF0tPlsyXS0+WzBdOyAgICAjIG9rCiAgICAjICAgbXkgJHYyID0gWyAxLCAyLCBbIDMsIDQgXSBdLT5bMl1bMF07ICAgICAgIyBvaywga2VlcCByZXF1aXJlZCBhcnJvdwogICAgIyAgIG15ICR2MyA9IFsgMSwgMiwgWyAzLCA0IF0gXVsyXVswXTsgICAgICAgICMgRXJyb3IKCiAgICAjICAgTm90ZSB0aGF0IGFuIGFycm93IGRvZXMgbm90IGdldCBwbGFjZWQgYmV0d2VlbiAnfScgYW5kICdbJyBoZXJlOgogICAgIyAgICAgbXkgJHZhbCA9ICR7JHh9WzFdOwogICAgIyAgIFBlcmx0aWR5IG1hcmtzIHRoZSAnJCcgYXMgdHlwZSAndCcsIGFuZCBzaW5jZSB0aGUgbG9naWMgYmVsb3cgY2hlY2tzCiAgICAjICAgZm9yIGlkZW50aWZpZXJzIG9mIHR5cGUgJ2knLCBpdCB3aWxsIHdvcmsgb2suCgogICAgIyBXZSB3aWxsIG1haW50YWluIHRoZSBmbGFnIGZvciB0aGlzIGNoZWNrIGluIHRoZSBmb2xsb3dpbmcgaGFzaDoKICAgIG15ICV0cmFpbGluZ19hcnJvd19va19ieV9zZXFubzsKCiAgICBteSAkckxMID0gJHNlbGYtPltfckxMX107CiAgICByZXR1cm4gdW5sZXNzICggZGVmaW5lZCgkckxMKSAmJiBAeyRyTEx9ICk7CiAgICBteSAkS19vcGVuaW5nX2NvbnRhaW5lciA9ICRzZWxmLT5bX0tfb3BlbmluZ19jb250YWluZXJfXTsKCiAgICBteSBAbG5vX2RlbDsKICAgIG15IEBsbm9fYWRkOwoKICAgIG15ICR3YXJuID0gc3ViIHsKCiAgICAgICAgIyB3cml0ZSBhIHdhcm5pbmcgb24gY2hhbmdlcyBtYWRlIG9yIG5lZWRlZCBpZiAtd2lhIGlzIHNldAogICAgICAgIG15ICggJHJsbm9fbGlzdCwgJGZpcnN0X3dvcmQgKSA9IEBfOwogICAgICAgIG15ICRzdHI7CiAgICAgICAgbXkgJG51bV9jaGFuZ2VzID0gQHskcmxub19saXN0fTsKICAgICAgICBteSBAdW5pcXVlX2xubyAgPSBkbyB7CiAgICAgICAgICAgIG15ICVzZWVuOwogICAgICAgICAgICBncmVwIHsgISRzZWVueyRffSsrIH0gQHskcmxub19saXN0fTsKICAgICAgICB9OwogICAgICAgIG15ICRudW1fbG5vID0gQHVuaXF1ZV9sbm87CiAgICAgICAgbXkgJG51bV9saW0gPSAxMDsKICAgICAgICBpZiAoICRudW1fbG5vIDw9ICRudW1fbGltICkgewogICAgICAgICAgICAkc3RyID0gam9pbiggU1BBQ0UsIEB1bmlxdWVfbG5vICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkc3RyID0gam9pbiggU1BBQ0UsIEB1bmlxdWVfbG5vWyAwIC4uICRudW1fbGltIC0gMSBdICkgLiAiIC4uLiI7CiAgICAgICAgfQogICAgICAgIG15ICRlc3MxID0gJG51bV9jaGFuZ2VzID09IDEgPyBFTVBUWV9TVFJJTkcgOiAncyc7CiAgICAgICAgbXkgJGVzczIgPSAkbnVtX2xubyA9PSAxICAgICA/IEVNUFRZX1NUUklORyA6ICdzJzsKICAgICAgICBteSAkbXNnICA9ICIkZmlyc3Rfd29yZCAkbnVtX2NoYW5nZXMgJy0+JyRlc3MxIGF0IGxpbmUkZXNzMiAkc3RyXG4iOwogICAgICAgIHdhcm5pbmcoJG1zZyk7CiAgICAgICAgcmV0dXJuOwogICAgfTsgIyMgZW5kICR3YXJuID0gc3ViCgogICAgIyBDb21wbGV4aXR5IGNvbnRyb2wgZmxhZzoKICAgICMgID0wIGxlZnQgY29udGFpbmVyIG11c3QganVzdCBjb250YWluIGEgc2luZ2xlIHRva2VuCiAgICAjICA9MSBsZWZ0IGNvbnRhaW5lciBtdXN0IG5vdCBjb250YWluIG90aGVyIGNvbnRhaW5lcnMgW0RFRkFVTFRdCiAgICAjICA9MiBubyBjb21wbGV4aXR5IGNvbnN0cmFpbnRzCiAgICBteSAkY29tcGxleGl0eSA9ICRyT3B0cy0+eydpbnRlcmJyYWNrZXQtYXJyb3ctY29tcGxleGl0eSd9OwogICAgaWYgKCAhZGVmaW5lZCgkY29tcGxleGl0eSkgKSB7ICRjb21wbGV4aXR5ID0gMSB9CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIE1haW4gbG9vcCBvdmVyIGFsbCBvcGVuaW5nIGNvbnRhaW5lciB0b2tlbnMKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZm9yZWFjaCBteSAkc2Vxbm8gKCBzb3J0IHsgJGEgPD0+ICRiIH0ga2V5cyAleyRLX29wZW5pbmdfY29udGFpbmVyfSApIHsKCiAgICAgICAgIyBXZSBqdXN0IHdhbnQgb3BlbmluZyB0b2tlbiB0eXBlcyAnTCIgb3IgJ1snCiAgICAgICAgIyBOb3RlOiB0aGUgdG9rZW5pemVyIG1hcmtzIGhhc2ggYnJhY2VzICd7JyBhbmQgJ30nIGFzICdMJyBhbmQgJ1InCiAgICAgICAgIyBidXQgd2UgaGF2ZSB0byBiZSBjYXJlZnVsIGJlY2F1c2Ugc21hbGwgYmxvY2sgYnJhY2VzIGNhbiBhbHNvCiAgICAgICAgIyBnZXQgbWFya2VkICdMJyBhbmQgJ1InIGZvciBmb3JtYXR0aW5nIHB1cnBvc2VzLgogICAgICAgIG15ICRLbyAgID0gJEtfb3BlbmluZ19jb250YWluZXItPnskc2Vxbm99OwogICAgICAgIG15ICR0eXBlID0gJHJMTC0+WyRLb10tPltfVFlQRV9dOwogICAgICAgIG5leHQgaWYgKCAkdHlwZSBuZSAnTCcgJiYgJHR5cGUgbmUgJ1snICk7CgogICAgICAgICMgTm93IGZpbmQgdGhlIHByZXZpb3VzIG5vbmJsYW5rIHRva2VuCiAgICAgICAgbXkgJEtfbSA9ICRLbyAtIDE7CiAgICAgICAgbmV4dCBpZiAoICRLX20gPCAwICk7CiAgICAgICAgbXkgJHR5cGVfbSA9ICRyTEwtPlskS19tXS0+W19UWVBFX107CiAgICAgICAgaWYgKCAkdHlwZV9tIGVxICdiJyAmJiAkS19tID4gMCApIHsKICAgICAgICAgICAgJEtfbSAtPSAxOwogICAgICAgICAgICAkdHlwZV9tID0gJHJMTC0+WyRLX21dLT5bX1RZUEVfXTsKICAgICAgICB9CgogICAgICAgICMgVGhlc2UgdmFycyB3aWxsIGhvbGQgdGhlIHByZXZpb3VzIGNsb3NpbmcgYnJhY2tldCwgaWYgYW55OwogICAgICAgICMgaW5pdGlhbGl6ZWQgdG8gdGhpcyB0b2tlbiBidXQgd2lsbCBiZSBtb3ZlZCBpZiBpdCBpcyBhbiBhcnJvdwogICAgICAgIG15ICRLX21tICAgID0gJEtfbTsKICAgICAgICBteSAkdHlwZV9tbSA9ICR0eXBlX207CgogICAgICAgICMgRGVjaWRlIGlmIGFuIGludGVyLWJyYWNrZXQgYXJyb3cgY291bGQgZm9sbG93IHRoZSBjbG9zaW5nIHRva2VuCiAgICAgICAgIyBvZiB0aGlzIGNvbnRhaW5lci4uCgogICAgICAgICMgcHJlY2VkZWQgYnkgc2NhbGFyIGlkZW50aWZpZXIgKHN1Y2ggYXMgJyRhcnJheVsnIG9yICckaGFzaHsnKSA/CiAgICAgICAgaWYgKCAkdHlwZV9tIGVxICdpJyB8fCAkdHlwZV9tIGVxICdaJyApIHsKCiAgICAgICAgICAgIG15ICR0b2tlbl9tID0gJHJMTC0+WyRLX21dLT5bX1RPS0VOX107CiAgICAgICAgICAgIGlmICggc3Vic3RyKCAkdG9rZW5fbSwgMCwgMSApIGVxICckJyApIHsKCiAgICAgICAgICAgICAgICAjIGFycm93cyBjYW4gZm9sbG93IHRoZSBDTE9TSU5HIGJyYWNrZXQgb2YgdGhpcyBjb250YWluZXIKICAgICAgICAgICAgICAgICR0cmFpbGluZ19hcnJvd19va19ieV9zZXFub3skc2Vxbm99ID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBvciBhIGNsb3NpbmcgYnJhY2tldCBvciBoYXNoIGJyYWNlCiAgICAgICAgZWxzaWYgKCAkdHlwZV9tIGVxICddJyB8fCAkdHlwZV9tIGVxICdSJyApIHsKICAgICAgICAgICAgbXkgJHNlcW5vX20gPSAkckxMLT5bJEtfbV0tPltfVFlQRV9TRVFVRU5DRV9dOwoKICAgICAgICAgICAgIyBwcm9wYWdhdGUgdGhlIGFycm93IHN0YXR1cyBmbGFnCiAgICAgICAgICAgICR0cmFpbGluZ19hcnJvd19va19ieV9zZXFub3skc2Vxbm99ID0KICAgICAgICAgICAgICAkdHJhaWxpbmdfYXJyb3dfb2tfYnlfc2Vxbm97JHNlcW5vX219OwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBhIHBvaW50ZXIgYW5kIGlmIGZvdW5kLCBiYWNrIHVwIG9uZSBtb3JlIHRva2VuCiAgICAgICAgZWxzaWYgKCAkdHlwZV9tIGVxICctPicgKSB7CgogICAgICAgICAgICAjIGFycm93cyBjYW4gZm9sbG93IHRoZSBDTE9TSU5HIGJyYWNrZXQgb2YgdGhpcyBjb250YWluZXIKICAgICAgICAgICAgJHRyYWlsaW5nX2Fycm93X29rX2J5X3NlcW5veyRzZXFub30gPSAxOwoKICAgICAgICAgICAgIyBiYWNrIHVwIG9uZSB0b2tlbiBiZWZvcmUgdGhlIGFycm93CiAgICAgICAgICAgICRLX21tID0gJEtfbSAtIDE7CiAgICAgICAgICAgIG5leHQgaWYgKCAkS19tbSA8PSAwICk7CiAgICAgICAgICAgICR0eXBlX21tID0gJHJMTC0+WyRLX21tXS0+W19UWVBFX107CiAgICAgICAgICAgIGlmICggJHR5cGVfbW0gZXEgJ2InICYmICRLX21tID4gMCApIHsKICAgICAgICAgICAgICAgICRLX21tIC09IDE7CiAgICAgICAgICAgICAgICAkdHlwZV9tbSA9ICRyTEwtPlskS19tbV0tPltfVFlQRV9dOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAjIHNvbWV0aGluZyBlbHNlCiAgICAgICAgfQoKICAgICAgICAjIG5vdyBjaGVjayBmb3IgYSBwcmVjZWRpbmcgY2xvc2luZyBicmFja2V0IG9yIGhhc2ggYnJhY2UKICAgICAgICBuZXh0IGlmICggJHR5cGVfbW0gbmUgJ10nICYmICR0eXBlX21tIG5lICdSJyApOwogICAgICAgIG15ICRzZXFub19tbSA9ICRyTEwtPlskS19tbV0tPltfVFlQRV9TRVFVRU5DRV9dOwogICAgICAgIG5leHQgaWYgKCAhJHNlcW5vX21tICk7CgogICAgICAgICR0cmFpbGluZ19hcnJvd19va19ieV9zZXFub3skc2Vxbm99ID0gMTsKCiAgICAgICAgIyBXZSBhcmUgYmV0d2VlbiBicmFja2V0cyB3aXRoIHRoZXNlIHR3byBvciB0aHJlZSBzZXF1ZW50aWFsIHRva2VucywKICAgICAgICAjIGluZGV4ZXMgX21tIGFuZCBfbSBhcmUgaWRlbnRpY2FsIGlmIHRoZXJlIGlzIG5vIGFycm93LgogICAgICAgICMgICAkdHlwZV9tbSAgICR0eXBlX20gICAgICR0eXBlCiAgICAgICAgIyAgICBSIG9yIF0gICAgICAtPj8gICAgICAgWyAgb3IgTAoKICAgICAgICAjIENhbiBhbiBpbnRlci1icmFja2V0IGFycm93IGJlIGhlcmU/CiAgICAgICAgbmV4dCB1bmxlc3MgKCAkdHJhaWxpbmdfYXJyb3dfb2tfYnlfc2Vxbm97JHNlcW5vX21tfSApOwoKICAgICAgICAjIElmIHRoZSB1c2VyIGRlZmluZWQgYSBzdHlsZSwgb25seSBjb250aW51ZSBpZiB0aGlzIHJlcXVpcmVzCiAgICAgICAgIyBhZGRpbmcgb3IgZGVsZXRpbmcgYW4gJy0+JyB0byBtYXRjaCB0aGUgc3R5bGUKICAgICAgICBpZiAoJWludGVyYnJhY2tldF9hcnJvd19zdHlsZSkgewogICAgICAgICAgICBteSAkc3R5bGUgPSAkaW50ZXJicmFja2V0X2Fycm93X3N0eWxleyAkdHlwZV9tbSAuICR0eXBlIH07CiAgICAgICAgICAgIG5leHQgaWYgKCAhJHN0eWxlICk7CiAgICAgICAgICAgIG5leHQKICAgICAgICAgICAgICBpZiAoICRzdHlsZSA9PSAtMSAmJiAkdHlwZV9tIG5lICctPicKICAgICAgICAgICAgICAgIHx8ICRzdHlsZSA9PSAxICYmICR0eXBlX20gZXEgJy0+JyApOwogICAgICAgIH0KCiAgICAgICAgbmV4dCBpZiAoICR0eXBlX20gZXEgJy0+JyAmJiAhJHJPcHRzX2RlbCAmJiAhJHJPcHRzX3dhcm4gKTsKICAgICAgICBuZXh0IGlmICggJHR5cGVfbSBuZSAnLT4nICYmICEkck9wdHNfYWRkICYmICEkck9wdHNfd2FybiApOwoKICAgICAgICAjIERvIG5vdCBjb250aW51ZSBpZiB0aGUgbGVmdCBjb250YWluZXIgaXMgdG9vIGNvbXBsZXguLgogICAgICAgICMgY29tcGxleGl0eSBmbGFnID0gMDogb25seSBvbmUgbm9uYmxhbmsgdG9rZW4gaW4gdGhlIGJyYWNrZXRzCiAgICAgICAgaWYgKCAhJGNvbXBsZXhpdHkgKSB7CiAgICAgICAgICAgIG15ICRjb3VudCA9IDA7CiAgICAgICAgICAgIG15ICRLb19tbSA9ICRLX29wZW5pbmdfY29udGFpbmVyLT57JHNlcW5vX21tfTsKICAgICAgICAgICAgbmV4dCB1bmxlc3MgZGVmaW5lZCgkS29fbW0pOwogICAgICAgICAgICBmb3JlYWNoIG15ICRLSyAoICRLb19tbSArIDEgLi4gJEtfbW0gLSAyICkgewogICAgICAgICAgICAgICAgbmV4dCBpZiAoICRyTEwtPlskS0tdLT5bX1RZUEVfXSBlcSAnYicgKTsKICAgICAgICAgICAgICAgICRjb3VudCsrOwogICAgICAgICAgICAgICAgbGFzdCBpZiAoICRjb3VudCA+IDEgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBuZXh0IGlmICggJGNvdW50ID4gMSApOwogICAgICAgIH0KCiAgICAgICAgIyBjb21wbGV4aXR5IGZsYWcgPSAxOiBubyBpbnRlcmlvciBjb250YWluZXIgdG9rZW5zCiAgICAgICAgZWxzaWYgKCAkY29tcGxleGl0eSA9PSAxICkgewoKICAgICAgICAgICAgaWYgKCAkc2Vxbm9fbW0gbmUgJHNlcW5vIC0gMSApIHsKICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICMgY29tcGxleGl0eSBmbGFnID4xID0+IG5vIHJlc3RyaWN0aW9uCiAgICAgICAgfQoKICAgICAgICAjIHNldCBhIGZsYWcgdGVsbGluZyBzdWIgcmVzcGFjZV90b2tlbnMgdG8gYWN0dWFsbHkgbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgbXkgJGxubyA9IDEgKyAkckxMLT5bJEtvXS0+W19MSU5FX0lOREVYX107CiAgICAgICAgaWYgKCAkdHlwZV9tIGVxICctPicgKSB7CiAgICAgICAgICAgIGlmICgkck9wdHNfZGVsKSB7CiAgICAgICAgICAgICAgICAkc2VsZi0+W19yd2FudF9hcnJvd19iZWZvcmVfc2Vxbm9fXS0+eyRzZXFub30gPSAtMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICRyT3B0c19kZWwgfHwgJHJPcHRzX3dhcm5fYW5kX3N0eWxlICkgeyBwdXNoIEBsbm9fZGVsLCAkbG5vIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmICgkck9wdHNfYWRkKSB7CiAgICAgICAgICAgICAgICAkc2VsZi0+W19yd2FudF9hcnJvd19iZWZvcmVfc2Vxbm9fXS0+eyRzZXFub30gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggJHJPcHRzX2FkZCB8fCAkck9wdHNfd2Fybl9hbmRfc3R5bGUgKSB7IHB1c2ggQGxub19hZGQsICRsbm8gfQogICAgICAgIH0KICAgIH0KCiAgICBpZiAoJHJPcHRzX3dhcm4pIHsKICAgICAgICBteSAkd2lhID0gJy0td2Fybi1pbnRlcmJyYWNrZXQtYXJyb3dzIHJlcG9ydDonOwogICAgICAgICR3YXJuLT4oIFxAbG5vX2FkZCwgJHJPcHRzX2FkZCA/ICIkd2lhIGFkZGVkIiA6ICIkd2lhOiBtaXNzaW5nIiApCiAgICAgICAgICBpZiAoQGxub19hZGQpOwogICAgICAgICR3YXJuLT4oIFxAbG5vX2RlbCwgJHJPcHRzX2RlbCA/ICIkd2lhIGRlbGV0ZWQgIiA6ICIkd2lhOiB1bndhbnRlZCAiICkKICAgICAgICAgIGlmIChAbG5vX2RlbCk7CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBpbnRlcmJyYWNrZXRfYXJyb3dfY2hlY2sKCnN1YiBkZWxldGVfc2lkZV9jb21tZW50cyB7CiAgICBteSAoICRzZWxmLCAkcml4X3NpZGVfY29tbWVudHMgKSA9IEBfOwoKICAgICMgSGFuZGxlIGFueSByZXF1ZXN0ZWQgc2lkZSBjb21tZW50IGRlbGV0aW9ucy4KICAgICMgR2l2ZW46CiAgICAjICAgJHJpeF9zaWRlX2NvbW1lbnRzID0gcmVmIHRvIGxpc3Qgb2YgaW5kZXhlcyBvZiBsaW5lcyB3aXRoIHNpZGUgY29tbWVudHMKCiAgICBteSAkckxMICAgICAgICAgICAgICAgICAgPSAkc2VsZi0+W19yTExfXTsKICAgIG15ICRybGluZXMgICAgICAgICAgICAgICA9ICRzZWxmLT5bX3JsaW5lc19dOwogICAgbXkgJHJibG9ja190eXBlX29mX3NlcW5vID0gJHNlbGYtPltfcmJsb2NrX3R5cGVfb2Zfc2Vxbm9fXTsKICAgIG15ICRyc2Vxbm9fbm9uX2luZGVudGluZ19icmFjZV9ieV9peCA9CiAgICAgICRzZWxmLT5bX3JzZXFub19ub25faW5kZW50aW5nX2JyYWNlX2J5X2l4X107CgogICAgZm9yZWFjaCBteSAkaXggKCBAeyRyaXhfc2lkZV9jb21tZW50c30gKSB7CiAgICAgICAgbXkgJGxpbmVfb2ZfdG9rZW5zID0gJHJsaW5lcy0+WyRpeF07CiAgICAgICAgbXkgJGxpbmVfdHlwZSAgICAgID0gJGxpbmVfb2ZfdG9rZW5zLT57X2xpbmVfdHlwZX07CgogICAgICAgICMgVGhpcyBmYXVsdCBzaG91bGRuJ3QgaGFwcGVuIGJlY2F1c2Ugd2Ugb25seSBzYXZlZCBDT0RFIGxpbmVzIHdpdGgKICAgICAgICAjIHNpZGUgY29tbWVudHMgaW4gdGhlIFRBU0sgMSBsb29wIGFib3ZlLgogICAgICAgIGlmICggJGxpbmVfdHlwZSBuZSAnQ09ERScgKSB7CiAgICAgICAgICAgIGlmIChERVZFTF9NT0RFKSB7CiAgICAgICAgICAgICAgICBteSAkbG5vID0gJGl4ICsgMTsKICAgICAgICAgICAgICAgIEZhdWx0KDw8RU9NKTsKSGl0IHVuZXhwZWN0ZWQgbGluZV90eXBlID0gJyRsaW5lX3R5cGUnIG5lYXIgbGluZSAkbG5vIHdoaWxlIGRlbGV0aW5nIHNpZGUgY29tbWVudHMsIHNob3VsZCBiZSAnQ09ERScKRU9NCiAgICAgICAgICAgIH0KICAgICAgICAgICAgbmV4dDsKICAgICAgICB9CgogICAgICAgIG15ICRDT0RFX3R5cGUgPSAkbGluZV9vZl90b2tlbnMtPntfY29kZV90eXBlfTsKICAgICAgICBteSAkcktfcmFuZ2UgID0gJGxpbmVfb2ZfdG9rZW5zLT57X3JLX3JhbmdlfTsKICAgICAgICBteSAoICRLZmlyc3QsICRLbGFzdCApID0gQHskcktfcmFuZ2V9OwoKICAgICAgICBpZiAoICFkZWZpbmVkKCRLZmlyc3QpIHx8ICRyTEwtPlskS2xhc3RdLT5bX1RZUEVfXSBuZSAnIycgKSB7CiAgICAgICAgICAgIGlmIChERVZFTF9NT0RFKSB7CiAgICAgICAgICAgICAgICBteSAkbG5vID0gJGl4ICsgMTsKICAgICAgICAgICAgICAgIEZhdWx0KDw8RU9NKTsKRGlkIG5vdCBmaW5kIHNpZGUgY29tbWVudCBuZWFyIGxpbmUgJGxubyB3aGlsZSBkZWxldGluZyBzaWRlIGNvbW1lbnRzCkVPTQogICAgICAgICAgICB9CiAgICAgICAgICAgIG5leHQ7CiAgICAgICAgfQoKICAgICAgICBteSAkZGVsZXRlX3NpZGVfY29tbWVudCA9CiAgICAgICAgICAgICAkck9wdHNfZGVsZXRlX3NpZGVfY29tbWVudHMKICAgICAgICAgICYmICggJEtsYXN0ID4gJEtmaXJzdCB8fCAkQ09ERV90eXBlIGVxICdIU0MnICkKICAgICAgICAgICYmICghJENPREVfdHlwZQogICAgICAgICAgICB8fCAkQ09ERV90eXBlIGVxICdIU0MnCiAgICAgICAgICAgIHx8ICRDT0RFX3R5cGUgZXEgJ0lPJwogICAgICAgICAgICB8fCAkQ09ERV90eXBlIGVxICdOSU4nICk7CgogICAgICAgICMgRG8gbm90IGRlbGV0ZSBzcGVjaWFsIGNvbnRyb2wgc2lkZSBjb21tZW50cwogICAgICAgIGlmICggJHJzZXFub19ub25faW5kZW50aW5nX2JyYWNlX2J5X2l4LT57JGl4fSApIHsKICAgICAgICAgICAgJGRlbGV0ZV9zaWRlX2NvbW1lbnQgPSAwOwogICAgICAgIH0KCiAgICAgICAgaWYgKAogICAgICAgICAgICAgICAkck9wdHNfZGVsZXRlX2Nsb3Npbmdfc2lkZV9jb21tZW50cwogICAgICAgICAgICAmJiAhJGRlbGV0ZV9zaWRlX2NvbW1lbnQKICAgICAgICAgICAgJiYgJEtsYXN0ID4gJEtmaXJzdAogICAgICAgICAgICAmJiAoICAhJENPREVfdHlwZQogICAgICAgICAgICAgICAgfHwgJENPREVfdHlwZSBlcSAnSFNDJwogICAgICAgICAgICAgICAgfHwgJENPREVfdHlwZSBlcSAnSU8nCiAgICAgICAgICAgICAgICB8fCAkQ09ERV90eXBlIGVxICdOSU4nICkKICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICR0b2tlbiAgPSAkckxMLT5bJEtsYXN0XS0+W19UT0tFTl9dOwogICAgICAgICAgICBteSAkS19tICAgID0gJEtsYXN0IC0gMTsKICAgICAgICAgICAgbXkgJHR5cGVfbSA9ICRyTEwtPlskS19tXS0+W19UWVBFX107CiAgICAgICAgICAgIGlmICggJHR5cGVfbSBlcSAnYicgJiYgJEtfbSA+ICRLZmlyc3QgKSB7ICRLX20tLSB9CiAgICAgICAgICAgIG15ICRzZXFub19tID0gJHJMTC0+WyRLX21dLT5bX1RZUEVfU0VRVUVOQ0VfXTsKCiAgICAgICAgICAgICMgcGF0Y2ggdG8gZGVsZXRlIGFzdWIgY3NjJ3MgKGMzODApCiAgICAgICAgICAgIGlmICggISRzZXFub19tICYmICRLX20gJiYgJHJMTC0+WyRLX21dLT5bX1RZUEVfXSBlcSAnOycgKSB7CiAgICAgICAgICAgICAgICAkS19tICAgID0gJEtfbSAtIDE7CiAgICAgICAgICAgICAgICAkdHlwZV9tID0gJHJMTC0+WyRLX21dLT5bX1RZUEVfXTsKICAgICAgICAgICAgICAgIGlmICggJHR5cGVfbSBlcSAnYicgJiYgJEtfbSA+ICRLZmlyc3QgKSB7ICRLX20tLSB9CiAgICAgICAgICAgICAgICBpZiAoICRLX20gPT0gJEtmaXJzdCApIHsKICAgICAgICAgICAgICAgICAgICAkc2Vxbm9fbSA9ICRyTEwtPlskS19tXS0+W19UWVBFX1NFUVVFTkNFX107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkc2Vxbm9fbSkgewogICAgICAgICAgICAgICAgbXkgJGJsb2NrX3R5cGVfbSA9ICRyYmxvY2tfdHlwZV9vZl9zZXFuby0+eyRzZXFub19tfTsKICAgICAgICAgICAgICAgIGlmICggICAkYmxvY2tfdHlwZV9tCiAgICAgICAgICAgICAgICAgICAgJiYgJHRva2VuICAgICAgICA9fiAvJGNsb3Npbmdfc2lkZV9jb21tZW50X3ByZWZpeF9wYXR0ZXJuLwogICAgICAgICAgICAgICAgICAgICYmICRibG9ja190eXBlX20gPX4gLyRjbG9zaW5nX3NpZGVfY29tbWVudF9saXN0X3BhdHRlcm4vCiAgICAgICAgICAgICAgICAgICAgJiYgJGJsb2NrX3R5cGVfbSAhfgogICAgICAgICAgICAgICAgICAgIC8kY2xvc2luZ19zaWRlX2NvbW1lbnRfZXhjbHVzaW9uX3BhdHRlcm4vICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkZGVsZXRlX3NpZGVfY29tbWVudCA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9ICMjIGVuZCBpZiAoICRyT3B0c19kZWxldGVfY2xvc2luZ19zaWRlX2NvbW1lbnRzLi4uKQoKICAgICAgICBpZiAoJGRlbGV0ZV9zaWRlX2NvbW1lbnQpIHsKCiAgICAgICAgICAgICMgV2UgYXJlIGFjdHVhbGx5IGp1c3QgY2hhbmdpbmcgdGhlIHNpZGUgY29tbWVudCB0byBhIGJsYW5rLgogICAgICAgICAgICAjIFRoaXMgbWF5IHByb2R1Y2UgbXVsdGlwbGUgYmxhbmtzIGluIGEgcm93LCBidXQgc3ViIHJlc3BhY2VfdG9rZW5zCiAgICAgICAgICAgICMgd2lsbCBjaGVjayBmb3IgdGhpcyBhbmQgZml4IGl0LgogICAgICAgICAgICAkckxMLT5bJEtsYXN0XS0+W19UWVBFX10gID0gJ2InOwogICAgICAgICAgICAkckxMLT5bJEtsYXN0XS0+W19UT0tFTl9dID0gU1BBQ0U7CgogICAgICAgICAgICAjIFRoZSAtaW8gb3B0aW9uIG91dHB1dHMgdGhlIGxpbmUgdGV4dCwgc28gd2UgaGF2ZSB0byB1cGRhdGUKICAgICAgICAgICAgIyB0aGUgbGluZSB0ZXh0IHNvIHRoYXQgdGhlIGNvbW1lbnQgZG9lcyBub3QgcmVhcHBlYXIuCiAgICAgICAgICAgIGlmICggJENPREVfdHlwZSBlcSAnSU8nICkgewogICAgICAgICAgICAgICAgbXkgJGxpbmUgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRLSyAoICRLZmlyc3QgLi4gJEtsYXN0IC0gMSApIHsKICAgICAgICAgICAgICAgICAgICAkbGluZSAuPSAkckxMLT5bJEtLXS0+W19UT0tFTl9dOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGxpbmUgPX4gcy9ccyskLy87CiAgICAgICAgICAgICAgICAkbGluZV9vZl90b2tlbnMtPntfbGluZV90ZXh0fSA9ICRsaW5lIC4gIlxuIjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBJZiB3ZSBkZWxldGUgYSBoYW5naW5nIHNpZGUgY29tbWVudCB0aGUgbGluZSBiZWNvbWVzIGJsYW5rLgogICAgICAgICAgICBpZiAoICRDT0RFX3R5cGUgZXEgJ0hTQycgKSB7ICRsaW5lX29mX3Rva2Vucy0+e19jb2RlX3R5cGV9ID0gJ0JMJyB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgZGVsZXRlX3NpZGVfY29tbWVudHMKCm15ICV3VTsKbXkgJXdpcTsKbXkgJWlzX3dpdDsKbXkgJWlzX3NpZ2lsOwpteSAlaXNfbm9ubGlzdF9rZXl3b3JkOwpteSAlaXNfbm9ubGlzdF90eXBlOwpteSAlaXNfc195X21fc2xhc2g7Cm15ICVpc191bmV4cGVjdGVkX2VxdWFsczsKbXkgJWlzX2FzY2lpX3R5cGU7CgpCRUdJTiB7CgogICAgIyBhZGRlZCAnVScgdG8gZml4IGNhc2VzIGIxMTI1IGIxMTI2IGIxMTI3CiAgICBteSBAcSA9IHF3KCB3IFUgKTsKICAgIEB3VXtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgIEBxID0gcXcoIHcgaSBxIFEgRyBDIFogKTsKICAgIEB3aXF7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICBAcSA9IHF3KCB3IGkgdCApOyAgICAjIGZvciBjMjUwOiBhZGRlZCBuZXcgdHlwZXMgJ1AnLCAnUycsIGZvcm1lcmx5ICdpJwogICAgQGlzX3dpdHtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgIEBxID0gcXcoICQgJiAlICogQCApOwogICAgQGlzX3NpZ2lse0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgIyBQYXJlbnMgZm9sbG93aW5nIHRoZXNlIGtleXdvcmRzIHdpbGwgbm90IGJlIG1hcmtlZCBhcyBsaXN0cy4gTm90ZSB0aGF0CiAgICAjICdmb3InIGlzIG5vdCBpbmNsdWRlZCBhbmQgaXMgaGFuZGxlZCBzZXBhcmF0ZWx5LCBieSBpbmNsdWRpbmcgJ2YnIGluIHRoZQogICAgIyBoYXNoICVpc19jb3VudGVkX3R5cGUsIHNpbmNlIGl0IG1heSBvciBtYXkgbm90IGJlIGEgYy1zdHlsZSBmb3IgbG9vcC4KICAgIEBxID0gcXcoIGlmIGVsc2lmIHVubGVzcyBhbmQgb3IgKTsKICAgIEBpc19ub25saXN0X2tleXdvcmR7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICAjIFBhcmVucyBmb2xsb3dpbmcgdGhlc2UgdHlwZXMgd2lsbCBub3QgYmUgbWFya2VkIGFzIGxpc3RzCiAgICBAcSA9IHF3KCAmJiB8fCApOwogICAgQGlzX25vbmxpc3RfdHlwZXtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgIEBxID0gcXcoIHMgeSBtIC8gKTsKICAgIEBpc19zX3lfbV9zbGFzaHtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgIEBxID0gcXcoID0gPT0gIT0gKTsKICAgIEBpc191bmV4cGVjdGVkX2VxdWFsc3tAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICMgV2UgY2FuIGFsd2F5cyBza2lwIGV4cGVuc2l2ZSBsZW5ndGhfZnVuY3Rpb24tPigpIGNhbGxzIGZvciB0aGVzZQogICAgIyBhc2NpaSB0b2tlbiB0eXBlcwogICAgQHEgPSBxdyMKICAgICAgYiBrIEwgUiA7ICggeyBbID8gOiBdIH0gKSBmIHQgbiB2IEYgcCBtIHBwIG1tCiAgICAgIC4uIDo6IDw8ID4+ICoqICYmIC4uIHx8IC8vIC0+ID0+ICs9IC09IC49ICU9ICY9IHw9IF49ICo9IDw+CiAgICAgICggKSA8PSA+PSA9PSA9fiAhfiAhPSArKyAtLSAvPSB4PQogICAgICAuLi4gKio9IDw8PSA+Pj0gJiY9IHx8PSAvLz0gPD0+CiAgICAgICsgLSAvICogfCAlICEgeCB+ID0gXCA/IDogLiA8ID4gXiAmCiAgICAgICM7CiAgICBwdXNoIEBxLCAnLCc7CiAgICBAaXNfYXNjaWlfdHlwZXtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKfSAjIyBlbmQgQkVHSU4KCnsgIzw8PCBiZWdpbiBjbG9zdXJlIHJlc3BhY2VfdG9rZW5zCgpteSAkckxMX25ldzsgICAgIyBUaGlzIHdpbGwgYmUgdGhlIG5ldyBhcnJheSBvZiB0b2tlbnMKCiMgVGhlc2UgYXJlIHZhcmlhYmxlcyBpbiAkc2VsZgpteSAkckxMOwpteSAkbGVuZ3RoX2Z1bmN0aW9uOwoKbXkgJEtfY2xvc2luZ190ZXJuYXJ5OwpteSAkS19vcGVuaW5nX3Rlcm5hcnk7Cm15ICRyY2hpbGRyZW5fb2Zfc2Vxbm87Cm15ICRyaGFzX2Jyb2tlbl9jb2RlX2Jsb2NrOwpteSAkcmhhc19icm9rZW5fbGlzdDsKbXkgJHJoYXNfYnJva2VuX2xpc3Rfd2l0aF9sZWM7Cm15ICRyaGFzX2NvZGVfYmxvY2s7Cm15ICRyaGFzX2xpc3Q7Cm15ICRyaGFzX3Rlcm5hcnk7Cm15ICRyaXNfYXNzaWduZWRfc3RydWN0dXJlOwpteSAkcmlzX2Jyb2tlbl9jb250YWluZXI7Cm15ICRyaXNfZXhjbHVkZWRfbHBfY29udGFpbmVyOwpteSAkcmlzX2xpc3RfYnlfc2Vxbm87Cm15ICRyaXNfcGVybWFuZW50bHlfYnJva2VuOwpteSAkcmxlY19jb3VudF9ieV9zZXFubzsKbXkgJHJvdmVycmlkZV9jYWIzOwpteSAkcnBhcmVudF9vZl9zZXFubzsKbXkgJHJ0eXBlX2NvdW50X2J5X3NlcW5vOwpteSAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm87Cm15ICRyd2FudF9hcnJvd19iZWZvcmVfc2Vxbm87Cm15ICRyaXNfc3ViX2Jsb2NrOwpteSAkcmlzX2FzdWJfYmxvY2s7Cm15ICRyc2Vxbm9fYXJyb3dfY2FsbF9jaGFpbl9zdGFydDsKbXkgJHJhcnJvd19jYWxsX2NoYWluOwoKbXkgJEtfb3BlbmluZ19jb250YWluZXI7Cm15ICRLX2Nsb3NpbmdfY29udGFpbmVyOwpteSBAS19zZXF1ZW5jZWRfdG9rZW5fbGlzdDsKbXkgQHNlcW5vX3BhcmVuX2Fycm93OwoKbXkgJUtfZmlyc3RfaGVyZV9kb2NfYnlfc2Vxbm87CgpteSAkbGFzdF9ub25ibGFua19jb2RlX3R5cGU7Cm15ICRsYXN0X25vbmJsYW5rX2NvZGVfdG9rZW47Cm15ICRsYXN0X25vbmJsYW5rX2Jsb2NrX3R5cGU7Cm15ICRsYXN0X2xhc3Rfbm9uYmxhbmtfY29kZV90eXBlOwpteSAkbGFzdF9sYXN0X25vbmJsYW5rX2NvZGVfdG9rZW47Cm15ICRLX2xhc3RfUzsKbXkgJEtfbGFzdF9TX2lzX215OwoKbXkgJXNlcW5vX3N0YWNrOwpteSAlS19vbGRfb3BlbmluZ19ieV9zZXFubzsKbXkgJGRlcHRoX25leHQ7Cm15ICRkZXB0aF9uZXh0X21heDsKbXkgQHN1Yl9zZXFub19zdGFjazsKbXkgJGN1cnJlbnRfc3ViX3NlcW5vOwoKbXkgJGN1bXVsYXRpdmVfbGVuZ3RoOwoKIyBWYXJpYWJsZXMgaG9sZGluZyB0aGUgY3VycmVudCBsaW5lIGluZm8KbXkgJEt0b2tlbl92YXJzOwpteSAkS2ZpcnN0X29sZDsKbXkgJEtsYXN0X29sZDsKbXkgJEtsYXN0X29sZF9jb2RlOwpteSAkQ09ERV90eXBlOwoKbXkgJHJ3aGl0ZXNwYWNlX2ZsYWdzOwoKIyBuZXcgaW5kZXggSyBvZiBwYWNrYWdlIG9yIGNsYXNzIHN0YXRlbWVudHMKbXkgJHJLX3BhY2thZ2VfbGlzdDsKCiMgbmV3IGluZGV4IEsgb2YgQF8gdG9rZW5zCm15ICRyS19BVF91bmRlcnNjb3JlX2J5X3N1Yl9zZXFubzsKCiMgbmV3IGluZGV4IEsgb2YgZmlyc3QgJHNlbGYgdG9rZW5zIGZvciBlYWNoIHN1YgpteSAkcktfZmlyc3Rfc2VsZl9ieV9zdWJfc2Vxbm87CgojIG5ldyBpbmRleCBLIG9mIGZpcnN0ICdibGVzcycgZm9yIGVhY2ggc3ViCm15ICRyS19ibGVzc19ieV9zdWJfc2Vxbm87CgojIG5ldyBpbmRleCBLIG9mICdyZXR1cm4nIGZvciBlYWNoIHN1YgpteSAkcktfcmV0dXJuX2J5X3N1Yl9zZXFubzsKCiMgbmV3IGluZGV4IEsgb2YgJ3dhbnRhcnJheScgZm9yIGVhY2ggc3ViCm15ICRyS193YW50YXJyYXlfYnlfc3ViX3NlcW5vOwoKIyBpbmZvIGFib3V0IGxpc3Qgb2Ygc3ViIGNhbGwgYXJncwpteSAkcnN1Yl9jYWxsX3BhcmVuX2luZm9fYnlfc2Vxbm87Cm15ICRyRE9MTEFSX3VuZGVyc2NvcmVfYnlfc3ViX3NlcW5vOwoKIyBpbmRleCBLIG9mIHRoZSBwcmVjZWRpbmcgJ1MnIHRva2VuIGZvciBhIHN1YgpteSAkcktfc3ViX2J5X3NlcW5vOwoKIyB0cnVlIGZvciBhICdteScgc3ViCm15ICRyaXNfbXlfc3ViX2J5X3NlcW5vOwoKc3ViIGluaXRpYWxpemVfcmVzcGFjZV90b2tlbnNfY2xvc3VyZSB7CgogICAgbXkgKCRzZWxmKSA9IEBfOwoKICAgICRyTExfbmV3ID0gW107ICAgICMgVGhpcyBpcyB0aGUgbmV3IGFycmF5CgogICAgJHJMTCA9ICRzZWxmLT5bX3JMTF9dOwoKICAgICRsZW5ndGhfZnVuY3Rpb24gICAgICAgICAgID0gJHNlbGYtPltfbGVuZ3RoX2Z1bmN0aW9uX107CiAgICAkS19jbG9zaW5nX3Rlcm5hcnkgICAgICAgICA9ICRzZWxmLT5bX0tfY2xvc2luZ190ZXJuYXJ5X107CiAgICAkS19vcGVuaW5nX3Rlcm5hcnkgICAgICAgICA9ICRzZWxmLT5bX0tfb3BlbmluZ190ZXJuYXJ5X107CiAgICAkcmNoaWxkcmVuX29mX3NlcW5vICAgICAgICA9ICRzZWxmLT5bX3JjaGlsZHJlbl9vZl9zZXFub19dOwogICAgJHJoYXNfYnJva2VuX2NvZGVfYmxvY2sgICAgPSAkc2VsZi0+W19yaGFzX2Jyb2tlbl9jb2RlX2Jsb2NrX107CiAgICAkcmhhc19icm9rZW5fbGlzdCAgICAgICAgICA9ICRzZWxmLT5bX3JoYXNfYnJva2VuX2xpc3RfXTsKICAgICRyaGFzX2Jyb2tlbl9saXN0X3dpdGhfbGVjID0gJHNlbGYtPltfcmhhc19icm9rZW5fbGlzdF93aXRoX2xlY19dOwogICAgJHJoYXNfY29kZV9ibG9jayAgICAgICAgICAgPSAkc2VsZi0+W19yaGFzX2NvZGVfYmxvY2tfXTsKICAgICRyaGFzX2xpc3QgICAgICAgICAgICAgICAgID0gJHNlbGYtPltfcmhhc19saXN0X107CiAgICAkcmhhc190ZXJuYXJ5ICAgICAgICAgICAgICA9ICRzZWxmLT5bX3JoYXNfdGVybmFyeV9dOwogICAgJHJpc19hc3NpZ25lZF9zdHJ1Y3R1cmUgICAgPSAkc2VsZi0+W19yaXNfYXNzaWduZWRfc3RydWN0dXJlX107CiAgICAkcmlzX2Jyb2tlbl9jb250YWluZXIgICAgICA9ICRzZWxmLT5bX3Jpc19icm9rZW5fY29udGFpbmVyX107CiAgICAkcmlzX2V4Y2x1ZGVkX2xwX2NvbnRhaW5lciA9ICRzZWxmLT5bX3Jpc19leGNsdWRlZF9scF9jb250YWluZXJfXTsKICAgICRyaXNfbGlzdF9ieV9zZXFubyAgICAgICAgID0gJHNlbGYtPltfcmlzX2xpc3RfYnlfc2Vxbm9fXTsKICAgICRyaXNfcGVybWFuZW50bHlfYnJva2VuICAgID0gJHNlbGYtPltfcmlzX3Blcm1hbmVudGx5X2Jyb2tlbl9dOwogICAgJHJsZWNfY291bnRfYnlfc2Vxbm8gICAgICAgPSAkc2VsZi0+W19ybGVjX2NvdW50X2J5X3NlcW5vX107CiAgICAkcm92ZXJyaWRlX2NhYjMgICAgICAgICAgICA9ICRzZWxmLT5bX3JvdmVycmlkZV9jYWIzX107CiAgICAkcnBhcmVudF9vZl9zZXFubyAgICAgICAgICA9ICRzZWxmLT5bX3JwYXJlbnRfb2Zfc2Vxbm9fXTsKICAgICRydHlwZV9jb3VudF9ieV9zZXFubyAgICAgID0gJHNlbGYtPltfcnR5cGVfY291bnRfYnlfc2Vxbm9fXTsKICAgICRyYmxvY2tfdHlwZV9vZl9zZXFubyAgICAgID0gJHNlbGYtPltfcmJsb2NrX3R5cGVfb2Zfc2Vxbm9fXTsKICAgICRyd2FudF9hcnJvd19iZWZvcmVfc2Vxbm8gID0gJHNlbGYtPltfcndhbnRfYXJyb3dfYmVmb3JlX3NlcW5vX107CiAgICAkcmlzX3N1Yl9ibG9jayAgICAgICAgICAgICA9ICRzZWxmLT5bX3Jpc19zdWJfYmxvY2tfXTsKICAgICRyaXNfYXN1Yl9ibG9jayAgICAgICAgICAgID0gJHNlbGYtPltfcmlzX2FzdWJfYmxvY2tfXTsKCiAgICAkcktfcGFja2FnZV9saXN0ICAgICAgICAgICAgICAgPSAkc2VsZi0+W19yS19wYWNrYWdlX2xpc3RfXTsKICAgICRyS19BVF91bmRlcnNjb3JlX2J5X3N1Yl9zZXFubyA9ICRzZWxmLT5bX3JLX0FUX3VuZGVyc2NvcmVfYnlfc3ViX3NlcW5vX107CiAgICAkcktfZmlyc3Rfc2VsZl9ieV9zdWJfc2Vxbm8gICAgPSAkc2VsZi0+W19yS19maXJzdF9zZWxmX2J5X3N1Yl9zZXFub19dOwogICAgJHJLX2JsZXNzX2J5X3N1Yl9zZXFubyAgICAgICAgID0gJHNlbGYtPltfcktfYmxlc3NfYnlfc3ViX3NlcW5vX107CiAgICAkcktfcmV0dXJuX2J5X3N1Yl9zZXFubyAgICAgICAgPSAkc2VsZi0+W19yS19yZXR1cm5fYnlfc3ViX3NlcW5vX107CiAgICAkcktfd2FudGFycmF5X2J5X3N1Yl9zZXFubyAgICAgPSAkc2VsZi0+W19yS193YW50YXJyYXlfYnlfc3ViX3NlcW5vX107CiAgICAkcnN1Yl9jYWxsX3BhcmVuX2luZm9fYnlfc2Vxbm8gPSAkc2VsZi0+W19yc3ViX2NhbGxfcGFyZW5faW5mb19ieV9zZXFub19dOwogICAgJHJzZXFub19hcnJvd19jYWxsX2NoYWluX3N0YXJ0ID0gJHNlbGYtPltfcnNlcW5vX2Fycm93X2NhbGxfY2hhaW5fc3RhcnRfXTsKICAgICRyYXJyb3dfY2FsbF9jaGFpbiAgICAgICAgICAgICA9ICRzZWxmLT5bX3JhcnJvd19jYWxsX2NoYWluX107CiAgICAkckRPTExBUl91bmRlcnNjb3JlX2J5X3N1Yl9zZXFubyA9CiAgICAgICRzZWxmLT5bX3JET0xMQVJfdW5kZXJzY29yZV9ieV9zdWJfc2Vxbm9fXTsKICAgICRyS19zdWJfYnlfc2Vxbm8gICAgID0gJHNlbGYtPltfcktfc3ViX2J5X3NlcW5vX107CiAgICAkcmlzX215X3N1Yl9ieV9zZXFubyA9ICRzZWxmLT5bX3Jpc19teV9zdWJfYnlfc2Vxbm9fXTsKCiAgICAlS19maXJzdF9oZXJlX2RvY19ieV9zZXFubyA9ICgpOwoKICAgICRsYXN0X25vbmJsYW5rX2NvZGVfdHlwZSAgICAgICA9ICc7JzsKICAgICRsYXN0X25vbmJsYW5rX2NvZGVfdG9rZW4gICAgICA9ICc7JzsKICAgICRsYXN0X25vbmJsYW5rX2Jsb2NrX3R5cGUgICAgICA9IEVNUFRZX1NUUklORzsKICAgICRsYXN0X2xhc3Rfbm9uYmxhbmtfY29kZV90eXBlICA9ICc7JzsKICAgICRsYXN0X2xhc3Rfbm9uYmxhbmtfY29kZV90b2tlbiA9ICc7JzsKICAgICRLX2xhc3RfUyAgICAgICAgICAgICAgICAgICAgICA9IDE7CiAgICAkS19sYXN0X1NfaXNfbXkgICAgICAgICAgICAgICAgPSB1bmRlZjsKCiAgICAlc2Vxbm9fc3RhY2sgICAgICAgICAgICA9ICgpOwogICAgJUtfb2xkX29wZW5pbmdfYnlfc2Vxbm8gPSAoKTsgICAgIyBOb3RlOiBvbGQgSyBpbmRleAogICAgJGRlcHRoX25leHQgICAgICAgICAgICAgPSAwOwogICAgJGRlcHRoX25leHRfbWF4ICAgICAgICAgPSAwOwoKICAgIEBzdWJfc2Vxbm9fc3RhY2sgICA9ICgpOwogICAgJGN1cnJlbnRfc3ViX3NlcW5vID0gMDsKCiAgICAjIHdlIHdpbGwgYmUgc2V0dGluZyB0b2tlbiBsZW5ndGhzIGFzIHdlIGdvCiAgICAkY3VtdWxhdGl2ZV9sZW5ndGggPSAwOwoKICAgICRLdG9rZW5fdmFycyAgICA9IHVuZGVmOyAgICAgICAgICAjIHRoZSBvbGQgSyB2YWx1ZSBvZiAkcnRva2VuX3ZhcnMKICAgICRLZmlyc3Rfb2xkICAgICA9IHVuZGVmOyAgICAgICAgICAjIG1pbiBLIG9mIG9sZCBsaW5lCiAgICAkS2xhc3Rfb2xkICAgICAgPSB1bmRlZjsgICAgICAgICAgIyBtYXggSyBvZiBvbGQgbGluZQogICAgJEtsYXN0X29sZF9jb2RlID0gdW5kZWY7ICAgICAgICAgICMgSyBvZiBsYXN0IHRva2VuIGlmIHNpZGUgY29tbWVudAogICAgJENPREVfdHlwZSAgICAgID0gRU1QVFlfU1RSSU5HOwoKICAgICMgU2V0IHRoZSB3aGl0ZXNwYWNlIGZsYWdzLCB3aGljaCBpbmRpY2F0ZSB0aGUgdG9rZW4gc3BhY2luZyBwcmVmZXJlbmNlLgogICAgJHJ3aGl0ZXNwYWNlX2ZsYWdzID0gJHNlbGYtPnNldF93aGl0ZXNwYWNlX2ZsYWdzKCk7CgogICAgIyBOb3RlIHRoYXQgJEtfb3BlbmluZ19jb250YWluZXIgYW5kICRLX2Nsb3NpbmdfY29udGFpbmVyIGhhdmUgdmFsdWVzCiAgICAjIGRlZmluZWQgaW4gc3ViIGdldF9saW5lKCkgZm9yIHRoZSBwcmV2aW91cyBLIGluZGV4ZXMuICBUaGV5IHdlcmUgbmVlZGVkCiAgICAjIGluIGNhc2Ugb3B0aW9uICdpbmRlbnQtb25seScgd2FzIHNldCwgYW5kIHdlIGRpZG4ndCBnZXQgaGVyZS4gV2Ugbm8KICAgICMgbG9uZ2VyIG5lZWQgdGhvc2UgYW5kIHdpbGwgZWxpbWluYXRlIHRoZW0gbm93IHRvIGF2b2lkIGFueSBwb3NzaWJsZQogICAgIyBtaXhpbmcgb2Ygb2xkIGFuZCBuZXcgdmFsdWVzLiAgVGhpcyBtdXN0IGJlIGRvbmUgQUZURVIgdGhlIGNhbGwgdG8KICAgICMgc2V0X3doaXRlc3BhY2VfZmxhZ3MsIHdoaWNoIG5lZWRzIHRoZXNlLgogICAgJEtfb3BlbmluZ19jb250YWluZXIgPSAkc2VsZi0+W19LX29wZW5pbmdfY29udGFpbmVyX10gPSB7fTsKICAgICRLX2Nsb3NpbmdfY29udGFpbmVyID0gJHNlbGYtPltfS19jbG9zaW5nX2NvbnRhaW5lcl9dID0ge307CgogICAgQEtfc2VxdWVuY2VkX3Rva2VuX2xpc3QgPSAoKTsKCiAgICAjIGFycmF5IGZvciBzYXZpbmcgc2Vxbm8ncyBvZiAnKS0+JyBmb3IgcG9zc2libGUgbGluZSBicmVha3MsIGdpdCAjMTcxCiAgICBAc2Vxbm9fcGFyZW5fYXJyb3cgPSAoKTsKCiAgICByZXR1cm47Cgp9ICMjIGVuZCBzdWIgaW5pdGlhbGl6ZV9yZXNwYWNlX3Rva2Vuc19jbG9zdXJlCgpzdWIgcmVzcGFjZV90b2tlbnMgewoKICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgIyBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIG9uY2UgcGVyIGZpbGUgdG8gZG8gYXMgbXVjaCBmb3JtYXR0aW5nIGFzIHBvc3NpYmxlCiAgICAjIGJlZm9yZSBuZXcgbGluZSBicmVha3MgYXJlIHNldC4KCiAgICAjIFJldHVybnM6CiAgICAjICAgJHNldmVyZV9lcnJvciA9IHRydWUgaWYgcHJvY2Vzc2luZyBtdXN0IHRlcm1pbmF0ZSBpbW1lZGlhdGVseQogICAgIyAgICRycXdfbGluZXMgICAgPSByZWYgdG8gbGlzdCBvZiBsaW5lcyB3aXRoIHF3IHF1b3RlcyAoZm9yIC1xd2FmKQogICAgbXkgKCAkc2V2ZXJlX2Vycm9yLCAkcnF3X2xpbmVzICk7CgogICAgIyBXZSBkbyBub3QgY2hhbmdlIGFueSBzcGFjZXMgaW4gLS1pbmRlbnQtb25seSBtb2RlCiAgICBpZiAoICRyT3B0cy0+eydpbmRlbnQtb25seSd9ICkgewoKICAgICAgICAjIFdlIG5lZWQgdG8gZGVmaW5lIGxlbmd0aHMgZm9yIC1pbmRlbnQtb25seSB0byBhdm9pZCB1bmRlZnMsIGV2ZW4KICAgICAgICAjIHRob3VnaCB0aGVzZSB2YWx1ZXMgYXJlIG5vdCBhY3R1YWxseSBuZWVkZWQgZm9yIG9wdGlvbiAtLWluZGVudC1vbmx5LgoKICAgICAgICAkckxMICAgICAgICAgICAgICAgPSAkc2VsZi0+W19yTExfXTsKICAgICAgICAkY3VtdWxhdGl2ZV9sZW5ndGggPSAwOwoKICAgICAgICBmb3JlYWNoIG15ICRpdGVtICggQHskckxMfSApIHsKICAgICAgICAgICAgbXkgJHRva2VuID0gJGl0ZW0tPltfVE9LRU5fXTsKICAgICAgICAgICAgbXkgJHRva2VuX2xlbmd0aCA9CiAgICAgICAgICAgICAgJGxlbmd0aF9mdW5jdGlvbiA/ICRsZW5ndGhfZnVuY3Rpb24tPigkdG9rZW4pIDogbGVuZ3RoKCR0b2tlbik7CiAgICAgICAgICAgICRjdW11bGF0aXZlX2xlbmd0aCArPSAkdG9rZW5fbGVuZ3RoOwogICAgICAgICAgICAkaXRlbS0+W19UT0tFTl9MRU5HVEhfXSAgICAgID0gJHRva2VuX2xlbmd0aDsKICAgICAgICAgICAgJGl0ZW0tPltfQ1VNVUxBVElWRV9MRU5HVEhfXSA9ICRjdW11bGF0aXZlX2xlbmd0aDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAoICRzZXZlcmVfZXJyb3IsICRycXdfbGluZXMgKTsKICAgIH0KCiAgICAjIFRoaXMgcm91dGluZSBtYWtlcyBhbGwgbmVjZXNzYXJ5IGFuZCBwb3NzaWJsZSBjaGFuZ2VzIHRvIHRoZSB0b2tlbml6YXRpb24KICAgICMgYWZ0ZXIgdGhlIGluaXRpYWwgdG9rZW5pemF0aW9uIG9mIHRoZSBmaWxlLiBUaGlzIGlzIGEgdGVkaW91cyByb3V0aW5lLAogICAgIyBidXQgYmFzaWNhbGx5IGl0IGNvbnNpc3RzIG9mIGluc2VydGluZyBhbmQgZGVsZXRpbmcgd2hpdGVzcGFjZSBiZXR3ZWVuCiAgICAjIG5vbmJsYW5rIHRva2VucyBhY2NvcmRpbmcgdG8gdGhlIHNlbGVjdGVkIHBhcmFtZXRlcnMuIEluIGEgZmV3IGNhc2VzCiAgICAjIG5vbi1zcGFjZSBjaGFyYWN0ZXJzIGFyZSBhZGRlZCwgZGVsZXRlZCBvciBtb2RpZmllZC4KCiAgICAjIFRoZSBnb2FsIG9mIHRoaXMgcm91dGluZSBpcyB0byBjcmVhdGUgYSBuZXcgdG9rZW4gYXJyYXkgd2hpY2ggb25seSBuZWVkcwogICAgIyB0aGUgZGVmaW5pdGlvbiBvZiBuZXcgbGluZSBicmVha3MgYW5kIHBhZGRpbmcgdG8gY29tcGxldGUgZm9ybWF0dGluZy4gIEluCiAgICAjIGEgZmV3IGNhc2VzIHdlIGhhdmUgdG8gY2hlYXQgYSBsaXR0bGUgdG8gYWNoaWV2ZSB0aGlzIGdvYWwuICBJbgogICAgIyBwYXJ0aWN1bGFyLCB3ZSBtYXkgbm90IGtub3cgaWYgYSBzZW1pY29sb24gd2lsbCBiZSBuZWVkZWQsIGJlY2F1c2UgaXQKICAgICMgZGVwZW5kcyBvbiBob3cgdGhlIGxpbmUgYnJlYWtzIGdvLiAgVG8gaGFuZGxlIHRoaXMsIHdlIGluY2x1ZGUgdGhlCiAgICAjIHNlbWljb2xvbiBhcyBhICdwaGFudG9tJyB3aGljaCBjYW4gYmUgZGlzcGxheWVkIGFzIG5vcm1hbCBvciBhcyBhbiBlbXB0eQogICAgIyBzdHJpbmcuCgogICAgIyBNZXRob2Q6IFRoZSBvbGQgdG9rZW5zIGFyZSBjb3BpZWQgb25lLWJ5LW9uZSwgd2l0aCBjaGFuZ2VzLCBmcm9tIHRoZSBvbGQKICAgICMgbGluZWFyIHN0b3JhZ2UgYXJyYXkgJHJMTCB0byBhIG5ldyBhcnJheSAkckxMX25ldy4KCiAgICAjIChyZS0paW5pdGlhbGl6ZSBjbG9zdXJlIHZhcmlhYmxlcyBmb3IgdGhpcyBwcm9ibGVtCiAgICAkc2VsZi0+aW5pdGlhbGl6ZV9yZXNwYWNlX3Rva2Vuc19jbG9zdXJlKCk7CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIE1haW4gb3ZlciBhbGwgbGluZXMgb2YgdGhlIGZpbGUKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgbXkgJHJsaW5lcyAgICA9ICRzZWxmLT5bX3JsaW5lc19dOwogICAgbXkgJGxpbmVfdHlwZSA9IEVNUFRZX1NUUklORzsKICAgIG15ICRsYXN0X0tfb3V0OwoKICAgIGZvcmVhY2ggbXkgJGxpbmVfb2ZfdG9rZW5zICggQHskcmxpbmVzfSApIHsKCiAgICAgICAgbXkgJGlucHV0X2xpbmVfbnVtYmVyID0gJGxpbmVfb2ZfdG9rZW5zLT57X2xpbmVfbnVtYmVyfTsKICAgICAgICBteSAkbGFzdF9saW5lX3R5cGUgICAgPSAkbGluZV90eXBlOwogICAgICAgICRsaW5lX3R5cGUgPSAkbGluZV9vZl90b2tlbnMtPntfbGluZV90eXBlfTsKICAgICAgICBuZXh0IHVubGVzcyAoICRsaW5lX3R5cGUgZXEgJ0NPREUnICk7CiAgICAgICAgJENPREVfdHlwZSA9ICRsaW5lX29mX3Rva2Vucy0+e19jb2RlX3R5cGV9OwoKICAgICAgICBpZiAoICRDT0RFX3R5cGUgZXEgJ0JMJyApIHsKICAgICAgICAgICAgbXkgJHNlcW5vID0gJHNlcW5vX3N0YWNreyAkZGVwdGhfbmV4dCAtIDEgfTsKICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRzZXFubykgKSB7CiAgICAgICAgICAgICAgICAkc2VsZi0+W19yYmxhbmtfYW5kX2NvbW1lbnRfY291bnRfXS0+eyRzZXFub30gKz0gMTsKICAgICAgICAgICAgICAgIGlmICggICEkcmlzX3Blcm1hbmVudGx5X2Jyb2tlbi0+eyRzZXFub30KICAgICAgICAgICAgICAgICAgICAmJiAkck9wdHNfbWF4aW11bV9jb25zZWN1dGl2ZV9ibGFua19saW5lcyApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJHJpc19wZXJtYW5lbnRseV9icm9rZW4tPnskc2Vxbm99ID0gMTsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+bWFya19wYXJlbnRfY29udGFpbmVycyggJHNlcW5vLAogICAgICAgICAgICAgICAgICAgICAgICAkcmlzX3Blcm1hbmVudGx5X2Jyb2tlbiApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAkcktfcmFuZ2UgPSAkbGluZV9vZl90b2tlbnMtPntfcktfcmFuZ2V9OwogICAgICAgIG15ICggJEtmaXJzdCwgJEtsYXN0ICkgPSBAeyRyS19yYW5nZX07CiAgICAgICAgbmV4dCB1bmxlc3MgZGVmaW5lZCgkS2ZpcnN0KTsKICAgICAgICAoICRLZmlyc3Rfb2xkLCAkS2xhc3Rfb2xkICkgPSAoICRLZmlyc3QsICRLbGFzdCApOwogICAgICAgICRLbGFzdF9vbGRfY29kZSA9ICRLbGFzdF9vbGQ7CgogICAgICAgICMgQmUgc3VyZSBhbiBvbGQgSyB2YWx1ZSBpcyBkZWZpbmVkIGZvciBzdWIgc3RvcmVfdG9rZW4KICAgICAgICAkS3Rva2VuX3ZhcnMgPSAkS2ZpcnN0OwoKICAgICAgICAjIENoZWNrIGZvciBjb3JyZWN0IHNlcXVlbmNlIG9mIHRva2VuIGluZGV4ZXMuLi4KICAgICAgICAjIEFuIGVycm9yIGhlcmUgbWVhbnMgdGhhdCBzdWIgd3JpdGVfbGluZSgpIGRpZCBub3QgY29ycmVjdGx5CiAgICAgICAgIyBwYWNrYWdlIHRoZSB0b2tlbml6ZWQgbGluZXMgYXMgaXQgcmVjZWl2ZWQgdGhlbS4gIElmIHdlCiAgICAgICAgIyBnZXQgYSBmYXVsdCBoZXJlIGl0IGhhcyBub3Qgb3V0cHV0IGEgY29udGludW91cyBzZXF1ZW5jZQogICAgICAgICMgb2YgSyB2YWx1ZXMuICBPciBhIGxpbmUgb2YgQ09ERSBtYXkgaGF2ZSBiZWVuIG1pcy1tYXJrZWQgYXMKICAgICAgICAjIHNvbWV0aGluZyBlbHNlLiAgVGhlcmUgaXMgbm8gZ29vZCB3YXkgdG8gY29udGludWUgYWZ0ZXIgc3VjaCBhbgogICAgICAgICMgZXJyb3IuCiAgICAgICAgaWYgKCBkZWZpbmVkKCRsYXN0X0tfb3V0KSApIHsKICAgICAgICAgICAgaWYgKCAkS2ZpcnN0ICE9ICRsYXN0X0tfb3V0ICsgMSApIHsKICAgICAgICAgICAgICAgIEZhdWx0X1dhcm4oCiAgICAgICAgICAgICAgICAgICAgIlByb2dyYW0gQnVnOiBsYXN0IEsgb3V0IHdhcyAkbGFzdF9LX291dCBidXQgS2ZpcnN0PSRLZmlyc3QiCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJHNldmVyZV9lcnJvciA9IDE7CiAgICAgICAgICAgICAgICByZXR1cm4gKCAkc2V2ZXJlX2Vycm9yLCAkcnF3X2xpbmVzICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIFRoZSBmaXJzdCB0b2tlbiBzaG91bGQgYWx3YXlzIGhhdmUgYmVlbiBnaXZlbiBpbmRleCAwIGJ5IHN1YgogICAgICAgICAgICAjIHdyaXRlX2xpbmUoKQogICAgICAgICAgICBpZiAoICRLZmlyc3QgIT0gMCApIHsKICAgICAgICAgICAgICAgIEZhdWx0KCJQcm9ncmFtIEJ1ZzogZmlyc3QgSyBpcyAkS2ZpcnN0IGJ1dCBzaG91bGQgYmUgMCIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRsYXN0X0tfb3V0ID0gJEtsYXN0OwoKICAgICAgICAjIEhhbmRsZSBzcGVjaWFsIGxpbmVzIG9mIGNvZGUKICAgICAgICBpZiAoICRDT0RFX3R5cGUgJiYgJENPREVfdHlwZSBuZSAnTklOJyAmJiAkQ09ERV90eXBlIG5lICdWRVInICkgewoKICAgICAgICAgICAgIyBDT0RFX3R5cGVzIGFyZSBhcyBmb2xsb3dzLgogICAgICAgICAgICAjICdCTCcgPSBCbGFuayBMaW5lCiAgICAgICAgICAgICMgJ1ZCJyA9IFZlcmJhdGltIC0gbGluZSBnb2VzIG91dCB2ZXJiYXRpbQogICAgICAgICAgICAjICdGUycgPSBGb3JtYXQgU2tpcHBpbmcgLSBsaW5lIGdvZXMgb3V0IHZlcmJhdGltLCBubyBibGFua3MKICAgICAgICAgICAgIyAnSU8nID0gSW5kZW50IE9ubHkgLSBvbmx5IGluZGVudGF0aW9uIG1heSBiZSBjaGFuZ2VkCiAgICAgICAgICAgICMgJ05JTicgPSBObyBJbnRlcm5hbCBOZXdsaW5lcyAtIGxpbmUgZG9lcyBub3QgZ2V0IGJyb2tlbgogICAgICAgICAgICAjICdIU0MnPUhhbmdpbmcgU2lkZSBDb21tZW50IC0gZml4IHRoaXMgaGFuZ2luZyBzaWRlIGNvbW1lbnQKICAgICAgICAgICAgIyAnQkMnPUJsb2NrIENvbW1lbnQgLSBhbiBvcmRpbmFyeSBmdWxsIGxpbmUgY29tbWVudAogICAgICAgICAgICAjICdTQkMnPVN0YXRpYyBCbG9jayBDb21tZW50IC0gYSBibG9jayBjb21tZW50IHdoaWNoIGRvZXMgbm90IGdldAogICAgICAgICAgICAjICAgICAgaW5kZW50ZWQKICAgICAgICAgICAgIyAnU0JDWCc9U3RhdGljIEJsb2NrIENvbW1lbnQgV2l0aG91dCBMZWFkaW5nIFNwYWNlCiAgICAgICAgICAgICMgJ1ZFUic9VkVSU0lPTiBzdGF0ZW1lbnQKICAgICAgICAgICAgIyAnJyBvciAodW5kZWZpbmVkKSAtIG5vIHJlc3RyaWN0aW9ucwoKICAgICAgICAgICAgIyBDb3B5IHRva2VucyB1bmNoYW5nZWQKICAgICAgICAgICAgZm9yZWFjaCBteSAkS0sgKCAkS2ZpcnN0IC4uICRLbGFzdCApIHsKICAgICAgICAgICAgICAgICRLdG9rZW5fdmFycyA9ICRLSzsKICAgICAgICAgICAgICAgICRzZWxmLT5zdG9yZV90b2tlbiggJHJMTC0+WyRLS10gKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBuZXh0OwogICAgICAgIH0KCiAgICAgICAgIyBIYW5kbGUgbm9ybWFsIGxpbmUuLgoKICAgICAgICAjIERlZmluZSBpbmRleCBvZiBsYXN0IHRva2VuIGJlZm9yZSBhbnkgc2lkZSBjb21tZW50IGZvciBjb21tYSBjb3VudHMKICAgICAgICBteSAkdHlwZV9lbmQgPSAkckxMLT5bJEtsYXN0X29sZF9jb2RlXS0+W19UWVBFX107CiAgICAgICAgaWYgKCAoICR0eXBlX2VuZCBlcSAnIycgfHwgJHR5cGVfZW5kIGVxICdiJyApCiAgICAgICAgICAgICYmICRLbGFzdF9vbGRfY29kZSA+ICRLZmlyc3Rfb2xkICkKICAgICAgICB7CiAgICAgICAgICAgICRLbGFzdF9vbGRfY29kZS0tOwogICAgICAgICAgICBpZiAoICAgJHJMTC0+WyRLbGFzdF9vbGRfY29kZV0tPltfVFlQRV9dIGVxICdiJwogICAgICAgICAgICAgICAgJiYgJEtsYXN0X29sZF9jb2RlID4gJEtmaXJzdF9vbGQgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkS2xhc3Rfb2xkX2NvZGUtLTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBJbnNlcnQgYW55IGVzc2VudGlhbCB3aGl0ZXNwYWNlIGJldHdlZW4gbGluZXMKICAgICAgICAjIGlmIGxhc3QgbGluZSB3YXMgbm9ybWFsIENPREUuCiAgICAgICAgIyBQYXRjaCBmb3IgcnQgIzEyNTAxMjogdXNlIEtfcHJldmlvdXNfY29kZSByYXRoZXIgdGhhbiAnX25vbmJsYW5rJwogICAgICAgICMgYmVjYXVzZSBjb21tZW50cyBtYXkgZGlzYXBwZWFyLgogICAgICAgICMgTm90ZSB0aGF0IHdlIG11c3QgZG8gdGhpcyBldmVuIGlmIC0tbm9hZGQtd2hpdGVzcGFjZSBpcyBzZXQKICAgICAgICBpZiAoICRsYXN0X2xpbmVfdHlwZSBlcSAnQ09ERScgKSB7CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgIGlzX2Vzc2VudGlhbF93aGl0ZXNwYWNlKAogICAgICAgICAgICAgICAgICAgICRsYXN0X2xhc3Rfbm9uYmxhbmtfY29kZV90b2tlbiwKICAgICAgICAgICAgICAgICAgICAkbGFzdF9sYXN0X25vbmJsYW5rX2NvZGVfdHlwZSwKICAgICAgICAgICAgICAgICAgICAkbGFzdF9ub25ibGFua19jb2RlX3Rva2VuLAogICAgICAgICAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX2NvZGVfdHlwZSwKICAgICAgICAgICAgICAgICAgICAkckxMLT5bJEtmaXJzdF0tPltfVE9LRU5fXSwKICAgICAgICAgICAgICAgICAgICAkckxMLT5bJEtmaXJzdF0tPltfVFlQRV9dLAogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJHNlbGYtPnN0b3JlX3Rva2VuKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgSW5uZXIgbG9vcCB0byByZXNwYWNlIHRva2VucyBvbiBhIGxpbmUgb2YgY29kZQogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAjIFRoZSBpbm5lciBsb29wIGlzIGluIGEgc2VwYXJhdGUgc3ViIGZvciBjbGFyaXR5CiAgICAgICAgJHNlbGYtPnJlc3BhY2VfdG9rZW5zX2lubmVyX2xvb3AoICRLZmlyc3QsICRLbGFzdCwgJGlucHV0X2xpbmVfbnVtYmVyICk7CgogICAgICAgIGlmICggJGxpbmVfb2ZfdG9rZW5zLT57X2VuZGluZ19pbl9xdW90ZX0gKSB7CiAgICAgICAgICAgIG15ICRzZXFubyA9ICRzZXFub19zdGFja3sgJGRlcHRoX25leHQgLSAxIH07CiAgICAgICAgICAgIGlmICggZGVmaW5lZCgkc2Vxbm8pICkgewogICAgICAgICAgICAgICAgJHJpc19wZXJtYW5lbnRseV9icm9rZW4tPnskc2Vxbm99ID0gMTsKICAgICAgICAgICAgICAgICRzZWxmLT5tYXJrX3BhcmVudF9jb250YWluZXJzKCAkc2Vxbm8sCiAgICAgICAgICAgICAgICAgICAgJHJpc19wZXJtYW5lbnRseV9icm9rZW4gKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gICAgIyBFbmQgbGluZSBsb29wCgogICAgIyBmaW5hbGl6ZSBkYXRhIHN0cnVjdHVyZXMKICAgICRzZWxmLT5yZXNwYWNlX3Bvc3RfbG9vcF9vcHMoKTsKCiAgICAjIFJlc2V0IG1lbW9yeSB0byBiZSB0aGUgbmV3IGFycmF5CiAgICAkc2VsZi0+W19yTExfXSA9ICRyTExfbmV3OwogICAgbXkgJEtsaW1pdDsKICAgIGlmICggQHskckxMX25ld30gKSB7ICRLbGltaXQgPSBAeyRyTExfbmV3fSAtIDEgfQogICAgJHNlbGYtPltfS2xpbWl0X10gPSAkS2xpbWl0OwoKICAgICMgRHVyaW5nIGRldmVsb3BtZW50LCB2ZXJpZnkgdGhhdCB0aGUgbmV3IGFycmF5IHN0aWxsIGxvb2tzIG9rYXkuCiAgICBERVZFTF9NT0RFICYmICRzZWxmLT5jaGVja190b2tlbl9hcnJheSgpOwoKICAgICMgdXBkYXRlIHRoZSB0b2tlbiBsaW1pdHMgb2YgZWFjaCBsaW5lCiAgICAoICRzZXZlcmVfZXJyb3IsICRycXdfbGluZXMgKSA9ICRzZWxmLT5yZXN5bmNfbGluZXNfYW5kX3Rva2VucygpOwoKICAgIHJldHVybiAoICRzZXZlcmVfZXJyb3IsICRycXdfbGluZXMgKTsKfSAjIyBlbmQgc3ViIHJlc3BhY2VfdG9rZW5zCgpzdWIgcmVzcGFjZV90b2tlbnNfaW5uZXJfbG9vcCB7CgogICAgbXkgKCAkc2VsZiwgJEtmaXJzdCwgJEtsYXN0LCAkaW5wdXRfbGluZV9udW1iZXIgKSA9IEBfOwoKICAgICMgTG9vcCB0byBjb3B5IGFsbCB0b2tlbnMgb24gb25lIGxpbmUsIG1ha2luZyBhbnkgc3BhY2luZyBjaGFuZ2VzLAogICAgIyB3aGlsZSBhbHNvIGNvbGxlY3RpbmcgaW5mb3JtYXRpb24gbmVlZGVkIGJ5IGxhdGVyIHN1YnMuCgogICAgIyBHaXZlbjoKICAgICMgICAkS2ZpcnN0ID0gaW5kZXggb2YgZmlyc3QgdG9rZW4gb24gdGhpcyBsaW5lCiAgICAjICAgJEtsYXN0ICA9IGluZGV4IG9mIGxhc3QgdG9rZW4gb24gdGhpcyBsaW5lCiAgICAjICAgJGlucHV0X2xpbmVfbnVtYmVyICA9IG51bWJlciBvZiB0aGlzIGxpbmUgaW4gaW5wdXQgc3RyZWFtCgogICAgbXkgJHR5cGU7CiAgICBmb3JlYWNoIG15ICRLSyAoICRLZmlyc3QgLi4gJEtsYXN0ICkgewoKICAgICAgICAjIFVwZGF0ZSBjbG9zdXJlIHZhcmlhYmxlIG5lZWRlZCBieSBzdWIgc3RvcmVfdG9rZW4KICAgICAgICAkS3Rva2VuX3ZhcnMgPSAkS0s7CgogICAgICAgIG15ICRydG9rZW5fdmFycyA9ICRyTEwtPlskS0tdOwoKICAgICAgICAjIEhhbmRsZSBhIGJsYW5rIHNwYWNlIC4uLgogICAgICAgIGlmICggKCAkdHlwZSA9ICRydG9rZW5fdmFycy0+W19UWVBFX10gKSBlcSAnYicgKSB7CgogICAgICAgICAgICAjIERlbGV0ZSBpdCBpZiBub3Qgd2FudGVkIGJ5IHdoaXRlc3BhY2UgcnVsZXMKICAgICAgICAgICAgIyBvciB3ZSBhcmUgZGVsZXRpbmcgYWxsIHdoaXRlc3BhY2UKICAgICAgICAgICAgIyBOb3RlIHRoYXQgd2hpdGVzcGFjZSBmbGFnIGlzIGEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgYQogICAgICAgICAgICAjIHdoaXRlIHNwYWNlIEJFRk9SRSB0aGUgdG9rZW4gaXMgbmVlZGVkCiAgICAgICAgICAgIG5leHQgaWYgKCAkS0sgPj0gJEtsYXN0ICk7ICAgICMgc2tpcCB0ZXJtaW5hbCBibGFuawogICAgICAgICAgICBteSAkS25leHQgPSAkS0sgKyAxOwoKICAgICAgICAgICAgaWYgKCRyT3B0c19mcmVlemVfd2hpdGVzcGFjZSkgewogICAgICAgICAgICAgICAgJHNlbGYtPnN0b3JlX3Rva2VuKCRydG9rZW5fdmFycyk7CiAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkd3MgPSAkcndoaXRlc3BhY2VfZmxhZ3MtPlskS25leHRdOwogICAgICAgICAgICBpZiAoICAgJHdzID09IFdTX05PCiAgICAgICAgICAgICAgICB8fCAkck9wdHNfZGVsZXRlX29sZF93aGl0ZXNwYWNlICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIG15ICR0b2tlbl9uZXh0ID0gJHJMTC0+WyRLbmV4dF0tPltfVE9LRU5fXTsKICAgICAgICAgICAgICAgIG15ICR0eXBlX25leHQgID0gJHJMTC0+WyRLbmV4dF0tPltfVFlQRV9dOwoKICAgICAgICAgICAgICAgIG15ICRkb19ub3RfZGVsZXRlID0gaXNfZXNzZW50aWFsX3doaXRlc3BhY2UoCiAgICAgICAgICAgICAgICAgICAgJGxhc3RfbGFzdF9ub25ibGFua19jb2RlX3Rva2VuLAogICAgICAgICAgICAgICAgICAgICRsYXN0X2xhc3Rfbm9uYmxhbmtfY29kZV90eXBlLAogICAgICAgICAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX2NvZGVfdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfY29kZV90eXBlLAogICAgICAgICAgICAgICAgICAgICR0b2tlbl9uZXh0LAogICAgICAgICAgICAgICAgICAgICR0eXBlX25leHQsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgTm90ZSB0aGF0IHJlcGVhdGVkIGJsYW5rcyB3aWxsIGdldCBmaWx0ZXJlZCBvdXQgaGVyZQogICAgICAgICAgICAgICAgbmV4dCB1bmxlc3MgKCRkb19ub3RfZGVsZXRlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBtYWtlIGl0IGp1c3Qgb25lIGNoYXJhY3RlcgogICAgICAgICAgICAkcnRva2VuX3ZhcnMtPltfVE9LRU5fXSA9IFNQQUNFOwogICAgICAgICAgICAkc2VsZi0+c3RvcmVfdG9rZW4oJHJ0b2tlbl92YXJzKTsKICAgICAgICAgICAgbmV4dDsKICAgICAgICB9CgogICAgICAgIG15ICR0b2tlbiA9ICRydG9rZW5fdmFycy0+W19UT0tFTl9dOwoKICAgICAgICAjIEhhbmRsZSBhIHNlcXVlbmNlZCB0b2tlbiAuLi4gaS5lLiBvbmUgb2YgKCApIHsgfSBbIF0gPyA6CiAgICAgICAgaWYgKCAkcnRva2VuX3ZhcnMtPltfVFlQRV9TRVFVRU5DRV9dICkgewoKICAgICAgICAgICAgIyBPbmUgb2YgKSBdIH0gLi4uCiAgICAgICAgICAgIGlmICggJGlzX2Nsb3NpbmdfdG9rZW57JHRva2VufSApIHsKCiAgICAgICAgICAgICAgICBteSAkdHlwZV9zZXF1ZW5jZSA9ICRydG9rZW5fdmFycy0+W19UWVBFX1NFUVVFTkNFX107CiAgICAgICAgICAgICAgICBteSAkYmxvY2tfdHlwZSAgICA9ICRyYmxvY2tfdHlwZV9vZl9zZXFuby0+eyR0eXBlX3NlcXVlbmNlfTsKCiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAjIGNoZWNrIGZvciBzZW1pY29sb24gYWRkaXRpb24gaW4gYSBjb2RlIGJsb2NrCiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICBpZiAoJGJsb2NrX3R5cGUpIHsKCiAgICAgICAgICAgICAgICAgICAgIyBpZiBub3QgcHJlY2VkZWQgYnkgYSAnOycgLi4KICAgICAgICAgICAgICAgICAgICBpZiAoICRsYXN0X25vbmJsYW5rX2NvZGVfdHlwZSBuZSAnOycgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIHRlbnRhdGl2ZWx5IGluc2VydCBhIHNlbWljb2xvbiBpZiBhcHByb3ByaWF0ZQogICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+YWRkX3BoYW50b21fc2VtaWNvbG9uKCRLSykKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAkck9wdHMtPnsnYWRkLXNlbWljb2xvbnMnfTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICggICAkcmlzX3N1Yl9ibG9jay0+eyR0eXBlX3NlcXVlbmNlfQogICAgICAgICAgICAgICAgICAgICAgICB8fCAkcmlzX2FzdWJfYmxvY2stPnskdHlwZV9zZXF1ZW5jZX0gKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGN1cnJlbnRfc3ViX3NlcW5vID0gcG9wIEBzdWJfc2Vxbm9fc3RhY2s7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAjIGNoZWNrIGZvciBhZGRpdGlvbi9kZWxldGlvbiBvZiBhIHRyYWlsaW5nIGNvbW1hIGluIGEgbGlzdAogICAgICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAjIGlmIHRoaXMgbG9va3MgbGlrZSBhIGxpc3QgLi4KICAgICAgICAgICAgICAgICAgICBteSAkcnR5cGVfY291bnQgPSAkcnR5cGVfY291bnRfYnlfc2Vxbm8tPnskdHlwZV9zZXF1ZW5jZX07CiAgICAgICAgICAgICAgICAgICAgaWYgKCAgICEkcnR5cGVfY291bnQKICAgICAgICAgICAgICAgICAgICAgICAgfHwgISRydHlwZV9jb3VudC0+eyc7J30gJiYgISRydHlwZV9jb3VudC0+eydmJ30gKQogICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgTk9UIHByZWNlZGVkIGJ5IGEgY29tbWEuLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRsYXN0X25vbmJsYW5rX2NvZGVfdHlwZSBuZSAnLCcgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbnNlcnQgYSBjb21tYSBpZiByZXF1ZXN0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkck9wdHNfYWRkX3RyYWlsaW5nX2NvbW1hcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICV0cmFpbGluZ19jb21tYV9ydWxlcwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFuZC4uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICgKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgLi4uIHRoZXJlIGlzIGEgY29tbWEgb3IgZmF0X2NvbW1hCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRydHlwZV9jb3VudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoICAgJHJ0eXBlX2NvdW50LT57JywnfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgJHJ0eXBlX2NvdW50LT57Jz0+J30gKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAuLi4gb3IgZXhjZXB0aW9uIGZvciBuZXN0ZWQgY29udGFpbmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyT3B0c19hZGRfbG9uZV90cmFpbGluZ19jb21tYXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRpc19jbG9zaW5nX3R5cGV7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfY29kZV90eXBlfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFuZCBub3QgcHJlY2VkZWQgYnkgJz0+JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKHVudXN1YWwgYnV0IGNhbiBvY2N1ciBpbiB0ZXN0IGZpbGVzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRsYXN0X25vbmJsYW5rX2NvZGVfdHlwZSBuZSAnPT4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkcnVsZSA9ICR0cmFpbGluZ19jb21tYV9ydWxlc3thZGR9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJHJ1bGUgJiYgJHJ1bGUtPnskdG9rZW59ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+YWRkX3RyYWlsaW5nX2NvbW1hKCAkS0ssICRLZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcnVsZS0+eyR0b2tlbn0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgcHJlY2VkZWQgYnkgYSBjb21tYSAuLgogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRlbGV0ZSBhIHRyYWlsaW5nIGNvbW1hIGlmIHJlcXVlc3RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGRlbGV0ZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJPcHRzX2RlbGV0ZV90cmFpbGluZ19jb21tYXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAldHJhaWxpbmdfY29tbWFfcnVsZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkcnR5cGVfY291bnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkcnR5cGVfY291bnQtPnsnLCd9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCAgICRyT3B0c19kZWxldGVfbG9uZV90cmFpbGluZ19jb21tYXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgJHJ0eXBlX2NvdW50LT57JywnfSA+IDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgJHJ0eXBlX2NvdW50LT57Jz0+J30gKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlnbm9yZSB6ZXJvLXNpemUgcXcgY29tbWFzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJGxhc3Rfbm9uYmxhbmtfY29kZV90b2tlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHJ1bGUgPSAkdHJhaWxpbmdfY29tbWFfcnVsZXN7ZGVsZXRlfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRydWxlICYmICRydWxlLT57JHRva2VufSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRlbGV0ZWQgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5kZWxldGVfdHJhaWxpbmdfY29tbWEoICRLSywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRLZmlyc3QsICRydWxlLT57JHRva2VufSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRlbGV0ZSBhIHdlbGQtaW50ZXJmZXJpbmcgY29tbWEgaWYgcmVxdWVzdGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICAhJGRlbGV0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkck9wdHNfZGVsZXRlX3dlbGRfaW50ZXJmZXJpbmdfY29tbWFzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJGlzX2Nsb3NpbmdfdHlwZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxhc3RfbGFzdF9ub25ibGFua19jb2RlX3R5cGV9ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+ZGVsZXRlX3dlbGRfaW50ZXJmZXJpbmdfY29tbWEoJEtLKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBPcGVuaW5nIGNvbnRhaW5lcgogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIG15ICR0eXBlX3NlcXVlbmNlID0gJHJ0b2tlbl92YXJzLT5bX1RZUEVfU0VRVUVOQ0VfXTsKICAgICAgICAgICAgICAgIGlmICggJHJ3YW50X2Fycm93X2JlZm9yZV9zZXFuby0+eyR0eXBlX3NlcXVlbmNlfSApIHsKCiAgICAgICAgICAgICAgICAgICAgIyArMSBtZWFucyBhZGQgIC0xIG1lYW5zIGRlbGV0ZSBwcmV2aW91cyBhcnJvdwogICAgICAgICAgICAgICAgICAgIGlmICggJHJ3YW50X2Fycm93X2JlZm9yZV9zZXFuby0+eyR0eXBlX3NlcXVlbmNlfSA+IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5hZGRfaW50ZXJicmFja2V0X2Fycm93KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+ZGVsZXRlX2ludGVyYnJhY2tldF9hcnJvdygpOwogICAgICAgICAgICAgICAgICAgICAgICAkcndoaXRlc3BhY2VfZmxhZ3MtPlskS0tdID0gV1NfTk87CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgU2F2ZSBpbmZvIGZvciBzdWIgY2FsbCBhcmcgY291bnQgY2hlY2sKICAgICAgICAgICAgICAgIGlmICggJHRva2VuIGVxICcoJyApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoCgogICAgICAgICAgICAgICAgICAgICAgICAjIGZ1bmN0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAkbGFzdF9ub25ibGFua19jb2RlX3R5cGUgZXEgJ1UnCiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRsYXN0X25vbmJsYW5rX2NvZGVfdHlwZSBlcSAndycKCiAgICAgICAgICAgICAgICAgICAgICAgICMgLT5mdW5jdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgfHwgKCAgICRsYXN0X25vbmJsYW5rX2NvZGVfdHlwZSBlcSAnaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRsYXN0X2xhc3Rfbm9uYmxhbmtfY29kZV90eXBlIGVxICctPicgKQoKICAgICAgICAgICAgICAgICAgICAgICAgIyAmZnVuY3Rpb24oCiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICggJGxhc3Rfbm9uYmxhbmtfY29kZV90eXBlIGVxICdpJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc3Vic3RyKCAkbGFzdF9ub25ibGFua19jb2RlX3Rva2VuLCAwLCAxICkgZXEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICcmJyApCiAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkcnN1Yl9jYWxsX3BhcmVuX2luZm9fYnlfc2Vxbm8tPnskdHlwZV9zZXF1ZW5jZX0gPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlX21tID0+ICRsYXN0X2xhc3Rfbm9uYmxhbmtfY29kZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5fbSA9PiAkbGFzdF9ub25ibGFua19jb2RlX3Rva2VuLAogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIEF0IGEgc3ViIGJsb2NrLCBzYXZlIGluZm8gdG8gY3Jvc3MgY2hlY2sgYXJnIGNvdW50cwogICAgICAgICAgICAgICAgZWxzaWYgKCAkcmlzX3N1Yl9ibG9jay0+eyR0eXBlX3NlcXVlbmNlfSApIHsKICAgICAgICAgICAgICAgICAgICAkcktfc3ViX2J5X3NlcW5vLT57JHR5cGVfc2VxdWVuY2V9ID0gJEtfbGFzdF9TOwogICAgICAgICAgICAgICAgICAgIGlmICgkS19sYXN0X1NfaXNfbXkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHJpc19teV9zdWJfYnlfc2Vxbm8tPnskdHlwZV9zZXF1ZW5jZX0gPSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBwdXNoIEBzdWJfc2Vxbm9fc3RhY2ssICRjdXJyZW50X3N1Yl9zZXFubzsKICAgICAgICAgICAgICAgICAgICAkY3VycmVudF9zdWJfc2Vxbm8gPSAkdHlwZV9zZXF1ZW5jZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJHJpc19hc3ViX2Jsb2NrLT57JHR5cGVfc2VxdWVuY2V9ICkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQHN1Yl9zZXFub19zdGFjaywgJGN1cnJlbnRfc3ViX3NlcW5vOwogICAgICAgICAgICAgICAgICAgICRjdXJyZW50X3N1Yl9zZXFubyA9ICR0eXBlX3NlcXVlbmNlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgTG9vayBmb3IgJyRfWycgZm9yIG1pc21hdGNoZWQgYXJnIGNoZWNrcwogICAgICAgICAgICAgICAgZWxzaWYgKCR0b2tlbiBlcSAnWycKICAgICAgICAgICAgICAgICAgICAmJiAkbGFzdF9ub25ibGFua19jb2RlX3Rva2VuIGVxICckXycKICAgICAgICAgICAgICAgICAgICAmJiAkY3VycmVudF9zdWJfc2Vxbm8gKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHB1c2gKICAgICAgICAgICAgICAgICAgICAgIEB7ICRyRE9MTEFSX3VuZGVyc2NvcmVfYnlfc3ViX3NlcW5vLT57JGN1cnJlbnRfc3ViX3NlcW5vfQogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICR0eXBlX3NlcXVlbmNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIyMgbm90IGEgc3BlY2lhbCBvcGVuaW5nIHRva2VuCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgTW9kaWZ5IGNlcnRhaW4gdG9rZW5zIGhlcmUgZm9yIHdoaXRlc3BhY2UKICAgICAgICAjIFRoZSBmb2xsb3dpbmcgaXMgbm90IHlldCBkb25lLCBidXQgY291bGQgYmU6CiAgICAgICAgIyAgIHN1YiAoeCB4IHgpCiAgICAgICAgIyAgICAgKCAkdHlwZSA9fiAvXlt3aXRdJC8gKQogICAgICAgIGVsc2lmICggJGlzX3dpdHskdHlwZX0gKSB7CgogICAgICAgICAgICAjIGluZGV4KCkgaXMgc2V2ZXJhbCB0aW1lcyBmYXN0ZXIgdGhhbiBhIHJlZ2V4IHRlc3Qgd2l0aCBccyBoZXJlCiAgICAgICAgICAgICMjICAgJHRva2VuID1+IC9ccy8KICAgICAgICAgICAgaWYgKCBpbmRleCggJHRva2VuLCBTUEFDRSApID4gMCB8fCBpbmRleCggJHRva2VuLCAiXHQiICkgPiAwICkgewoKICAgICAgICAgICAgICAgICMgY2hhbmdlICckICB2YXInICB0byAnJHZhcicgZXRjCiAgICAgICAgICAgICAgICAjIGNoYW5nZSAnQCAgICAnICAgdG8gJ0AnCiAgICAgICAgICAgICAgICAjIEV4YW1wbGVzOiA8PHNuaXBwZXRzL3NwYWNlMS5pbj4+CiAgICAgICAgICAgICAgICBteSAkb3JkID0gb3JkKCBzdWJzdHIoICR0b2tlbiwgMSwgMSApICk7CiAgICAgICAgICAgICAgICBpZiAoCgogICAgICAgICAgICAgICAgICAgICMgcXVpY2sgdGVzdCBmb3IgcG9zc2libGUgYmxhbmsgYXQgc2Vjb25kIGNoYXIKICAgICAgICAgICAgICAgICAgICAkb3JkID4gMCAmJiAoICRvcmQgPCBPUkRfUFJJTlRBQkxFX01JTgogICAgICAgICAgICAgICAgICAgICAgICB8fCAkb3JkID4gT1JEX1BSSU5UQUJMRV9NQVggKQogICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbXkgKCAkc2lnaWwsICR3b3JkICkgPSBzcGxpdCAvXHMrLywgJHRva2VuLCAyOwoKICAgICAgICAgICAgICAgICAgICAjICRzaWdpbCA9fiAvXltcJFwmXCVcKlxAXSQvICkKICAgICAgICAgICAgICAgICAgICBpZiAoICRpc19zaWdpbHskc2lnaWx9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkdG9rZW4gPSAkc2lnaWw7CiAgICAgICAgICAgICAgICAgICAgICAgICR0b2tlbiAuPSAkd29yZCBpZiAoIGRlZmluZWQoJHdvcmQpICk7ICAgICMgZml4IGMxMDQKICAgICAgICAgICAgICAgICAgICAgICAgJHJ0b2tlbl92YXJzLT5bX1RPS0VOX10gPSAkdG9rZW47CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgdHJpbSBpZGVudGlmaWVycyBvZiB0cmFpbGluZyBibGFua3Mgd2hpY2ggY2FuIG9jY3VyCiAgICAgICAgICAgICAgICAjIHVuZGVyIHNvbWUgdW51c3VhbCBjaXJjdW1zdGFuY2VzLCBzdWNoIGFzIGlmIHRoZQogICAgICAgICAgICAgICAgIyBpZGVudGlmaWVyICd3aXRjaCcgaGFzIHRyYWlsaW5nIGJsYW5rcyBvbiBpbnB1dCBoZXJlOgogICAgICAgICAgICAgICAgIwogICAgICAgICAgICAgICAgIyBzdWIKICAgICAgICAgICAgICAgICMgd2l0Y2gKICAgICAgICAgICAgICAgICMgKCkgICAjIHByb3RvdHlwZSBtYXkgYmUgb24gbmV3IGxpbmUgLi4uCiAgICAgICAgICAgICAgICAjIC4uLgogICAgICAgICAgICAgICAgbXkgJG9yZF9jaCA9IG9yZCggc3Vic3RyKCAkdG9rZW4sIC0xLCAxICkgKTsKICAgICAgICAgICAgICAgIGlmICgKCiAgICAgICAgICAgICAgICAgICAgIyBxdWljayBjaGVjayBmb3IgcG9zc2libGUgZW5kaW5nIHNwYWNlCiAgICAgICAgICAgICAgICAgICAgJG9yZF9jaCA+IDAgJiYgKCAkb3JkX2NoIDwgT1JEX1BSSU5UQUJMRV9NSU4KICAgICAgICAgICAgICAgICAgICAgICAgfHwgJG9yZF9jaCA+IE9SRF9QUklOVEFCTEVfTUFYICkKICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICR0b2tlbiA9fiBzL1xzKyQvL2c7CiAgICAgICAgICAgICAgICAgICAgJHJ0b2tlbl92YXJzLT5bX1RPS0VOX10gPSAkdG9rZW47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAkdHlwZSBlcSAnaScgKSB7CiAgICAgICAgICAgICAgICBpZiAoICR0b2tlbiBlcSAnQF8nICYmICRjdXJyZW50X3N1Yl9zZXFubyApIHsKCiAgICAgICAgICAgICAgICAgICAgIyByZW1lbWJlciB0aGUgbmV3IEsgb2YgdGhpcyBAXzsgdGhpcyBtYXkgYmUKICAgICAgICAgICAgICAgICAgICAjIG9mZiBieSAxIGlmIGEgYmxhbmsgZ2V0cyBpbnNlcnRlZCBiZWZvcmUgaXQKICAgICAgICAgICAgICAgICAgICBwdXNoCiAgICAgICAgICAgICAgICAgICAgICBAeyAkcktfQVRfdW5kZXJzY29yZV9ieV9zdWJfc2Vxbm8tPnskY3VycmVudF9zdWJfc2Vxbm99IH0sCiAgICAgICAgICAgICAgICAgICAgICBzY2FsYXIoIEB7JHJMTF9uZXd9ICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBSZW1lbWJlciBuZXcgSyBvZiB0aGUgZmlyc3QgJyRzZWxmJyBpbiBhIHN1YiBmb3IgLWRtYSBvcHRpb24KICAgICAgICAgICAgICAgIGlmICggJHRva2VuIGVxICckc2VsZicgJiYgJGN1cnJlbnRfc3ViX3NlcW5vICkgewogICAgICAgICAgICAgICAgICAgICRyS19maXJzdF9zZWxmX2J5X3N1Yl9zZXFuby0+eyRjdXJyZW50X3N1Yl9zZXFub30gfHw9CiAgICAgICAgICAgICAgICAgICAgICBzY2FsYXIoIEB7JHJMTF9uZXd9ICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBSZW1lbWJlciBuZXcgSyBhbmQgbmFtZSBvZiBibGVzc2VkIG9iamVjdHMgZm9yIC1kbWEgb3B0aW9uCiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAkbGFzdF9ub25ibGFua19jb2RlX3Rva2VuIGVxICdibGVzcycKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJGxhc3Rfbm9uYmxhbmtfY29kZV90eXBlIGVxICdrJwogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB8fCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICRsYXN0X2xhc3Rfbm9uYmxhbmtfY29kZV90b2tlbiBlcSAnYmxlc3MnCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRsYXN0X2xhc3Rfbm9uYmxhbmtfY29kZV90eXBlIGVxICdrJwogICAgICAgICAgICAgICAgICAgICAgICAmJiAoCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfY29kZV90b2tlbiBlcSAnbXknCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAkbGFzdF9ub25ibGFua19jb2RlX3Rva2VuIGVxICcoJwogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAeyAkcktfYmxlc3NfYnlfc3ViX3NlcW5vLT57JGN1cnJlbnRfc3ViX3NlcW5vfSB9LAogICAgICAgICAgICAgICAgICAgICAgWyBzY2FsYXIoIEB7JHJMTF9uZXd9ICksICR0b2tlbiBdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJHR5cGUgZXEgJ3cnICkgewogICAgICAgICAgICAgICAgaWYgKCAgICRsYXN0X25vbmJsYW5rX2NvZGVfdG9rZW4gZXEgJ3VzZScKICAgICAgICAgICAgICAgICAgICAmJiAkbGFzdF9ub25ibGFua19jb2RlX3R5cGUgZXEgJ2snICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICR0b2tlbiBlcSAnc3RyaWN0JyApIHsgJHNlbGYtPltfc2F3X3VzZV9zdHJpY3RfXSA9IDEgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIyBDb3VsZCBiZSBzb21ldGhpbmcgbGlrZSAnKiBTVERFUlInIG9yICckIGRlYnVnJwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGhhbmRsZSBrZXl3b3JkcwogICAgICAgIGVsc2lmICggJHR5cGUgZXEgJ2snICkgewogICAgICAgICAgICBpZiAoICR0b2tlbiBlcSAncmV0dXJuJyApIHsKCiAgICAgICAgICAgICAgICAjIHJlbWVtYmVyIHRoZSBuZXcgSyBvZiB0aGlzICdyZXR1cm47IHRoaXMgbWF5IGJlCiAgICAgICAgICAgICAgICAjIG9mZiBieSAxIGlmIGEgYmxhbmsgZ2V0cyBpbnNlcnRlZCBiZWZvcmUgaXQKICAgICAgICAgICAgICAgIHB1c2gKICAgICAgICAgICAgICAgICAgQHsgJHJLX3JldHVybl9ieV9zdWJfc2Vxbm8tPnskY3VycmVudF9zdWJfc2Vxbm99IH0sCiAgICAgICAgICAgICAgICAgIHNjYWxhciggQHskckxMX25ld30gKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICR0b2tlbiBlcSAnd2FudGFycmF5JyApIHsKICAgICAgICAgICAgICAgIHB1c2gKICAgICAgICAgICAgICAgICAgQHsgJHJLX3dhbnRhcnJheV9ieV9zdWJfc2Vxbm8tPnskY3VycmVudF9zdWJfc2Vxbm99IH0sCiAgICAgICAgICAgICAgICAgIHNjYWxhciggQHskckxMX25ld30gKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBoYW5kbGUgc2VtaWNvbG9ucwogICAgICAgIGVsc2lmICggJHR5cGUgZXEgJzsnICkgewoKICAgICAgICAgICAgIyBSZW1vdmUgdW5uZWNlc3Nhcnkgc2VtaWNvbG9ucywgYnV0IG5vdCBhZnRlciBiYXJlCiAgICAgICAgICAgICMgYmxvY2tzLCB3aGVyZSBpdCBjb3VsZCBiZSB1bnNhZmUgaWYgdGhlIGJyYWNlIGlzCiAgICAgICAgICAgICMgbWlzLXRva2VuaXplZC4KICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJHJPcHRzLT57J2RlbGV0ZS1zZW1pY29sb25zJ30KICAgICAgICAgICAgICAgICYmICgKICAgICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX2Jsb2NrX3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJGxhc3Rfbm9uYmxhbmtfY29kZV90eXBlIGVxICd9JwogICAgICAgICAgICAgICAgICAgICAgICAmJiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXNfYmxvY2tfd2l0aG91dF9zZW1pY29sb257CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfYmxvY2tfdHlwZX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRsYXN0X25vbmJsYW5rX2Jsb2NrX3R5cGUgPX4gLyRTVUJfUEFUVEVSTi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRsYXN0X25vbmJsYW5rX2Jsb2NrX3R5cGUgPX4gL15cdys6JC8KICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB8fCAkbGFzdF9ub25ibGFua19jb2RlX3R5cGUgZXEgJzsnCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgIyBUaGlzIGxvb2tzIGxpa2UgYSBkZWxldGFibGUgc2VtaWNvbG9uLCBidXQgZXZlbiBpZiBhCiAgICAgICAgICAgICAgICAjIHNlbWljb2xvbiBjYW4gYmUgZGVsZXRlZCBpdCBpcyBub3QgbmVjZXNzYXJpbHkgYmVzdCB0byBkbwogICAgICAgICAgICAgICAgIyBzby4gIFdlIGFwcGx5IHRoZXNlIGFkZGl0aW9uYWwgcnVsZXMgZm9yIGRlbGV0aW9uOgogICAgICAgICAgICAgICAgIyAtIEFsd2F5cyBvayB0byBkZWxldGUgYSAnOycgYXQgdGhlIGVuZCBvZiBhIGxpbmUKICAgICAgICAgICAgICAgICMgLSBOZXZlciBkZWxldGUgYSAnOycgYmVmb3JlIGEgJyMnIGJlY2F1c2UgaXQgd291bGQKICAgICAgICAgICAgICAgICMgICBwcm9tb3RlIGl0IHRvIGEgYmxvY2sgY29tbWVudC4KICAgICAgICAgICAgICAgICMgLSBJZiBhIHNlbWljb2xvbiBpcyBub3QgYXQgdGhlIGVuZCBvZiBsaW5lLCB0aGVuIG9ubHkKICAgICAgICAgICAgICAgICMgICBkZWxldGUgaWYgaXQgaXMgZm9sbG93ZWQgYnkgYW5vdGhlciBzZW1pY29sb24gb3IgY2xvc2luZwogICAgICAgICAgICAgICAgIyAgIHRva2VuLiAgVGhpcyBpbmNsdWRlcyB0aGUgY29tbWVudCBydWxlLiAgSXQgbWF5IHRha2UKICAgICAgICAgICAgICAgICMgICB0d28gcGFzc2VzIHRvIGdldCB0byBhIGZpbmFsIHN0YXRlLCBidXQgaXQgaXMgYSBsaXR0bGUKICAgICAgICAgICAgICAgICMgICBzYWZlci4gIEZvciBleGFtcGxlLCBrZWVwIHRoZSBmaXJzdCBzZW1pY29sb24gaGVyZToKICAgICAgICAgICAgICAgICMgICAgICBldmFsIHsgc3ViIGJ1YmJhIHsgb2soMCkgfTsgb2soMCkgfSB8fCBvaygxKTsKICAgICAgICAgICAgICAgICMgICBJdCBpcyBub3QgcmVxdWlyZWQgYnV0IGFkZHMgc29tZSBjbGFyaXR5LgogICAgICAgICAgICAgICAgbXkgJG9rX3RvX2RlbGV0ZSA9IDE7CiAgICAgICAgICAgICAgICBpZiAoICRLSyA8ICRLbGFzdCApIHsKICAgICAgICAgICAgICAgICAgICBteSAkS24gPSAkc2VsZi0+S19uZXh0X25vbmJsYW5rKCRLSyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRLbikgJiYgJEtuIDw9ICRLbGFzdCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJG5leHRfbm9uYmxhbmtfdG9rZW5fdHlwZSA9ICRyTEwtPlskS25dLT5bX1RZUEVfXTsKICAgICAgICAgICAgICAgICAgICAgICAgJG9rX3RvX2RlbGV0ZSA9ICRuZXh0X25vbmJsYW5rX3Rva2VuX3R5cGUgZXEgJzsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgJG5leHRfbm9uYmxhbmtfdG9rZW5fdHlwZSBlcSAnfSc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgZG8gbm90IGRlbGV0ZSBvbmx5IG5vbmJsYW5rIHRva2VuIGluIGEgZmlsZQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJEtwID0gJHNlbGYtPktfcHJldmlvdXNfY29kZSggdW5kZWYsICRyTExfbmV3ICk7CiAgICAgICAgICAgICAgICAgICAgbXkgJEtuID0gJHNlbGYtPktfbmV4dF9ub25ibGFuaygkS0spOwogICAgICAgICAgICAgICAgICAgICRva190b19kZWxldGUgPSBkZWZpbmVkKCRLbikgfHwgZGVmaW5lZCgkS3ApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkb2tfdG9fZGVsZXRlKSB7CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPm5vdGVfZGVsZXRlZF9zZW1pY29sb24oJGlucHV0X2xpbmVfbnVtYmVyKTsKICAgICAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgd3JpdGVfbG9nZmlsZV9lbnRyeSgiRXh0cmEgJzsnXG4iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZWxzaWYgKCAkdHlwZSBlcSAnLT4nICkgewogICAgICAgICAgICBpZiAoICRsYXN0X25vbmJsYW5rX2NvZGVfdG9rZW4gZXEgJyknICkgewoKICAgICAgICAgICAgICAgICMgc2F2ZSBzZXFubyBvZiBjbG9zaW5nIHBhcmVuIHdpdGggYXJyb3csICcpLT4nLCBnaXQgIzE3MQogICAgICAgICAgICAgICAgIyAodGhlIHBhcmVuIHNlcW5vIGlzIHN0aWxsIG9uIHRoZSBzdGFjaykKICAgICAgICAgICAgICAgIG15ICRzZXFub19wYXJlbiA9ICRzZXFub19zdGFja3skZGVwdGhfbmV4dH07CiAgICAgICAgICAgICAgICBpZiAoJHNlcW5vX3BhcmVuKSB7IHB1c2ggQHNlcW5vX3BhcmVuX2Fycm93LCAkc2Vxbm9fcGFyZW4gfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGRlbGV0ZSByZXBlYXRlZCBjb21tYXMgaWYgcmVxdWVzdGVkCiAgICAgICAgZWxzaWYgKCAkdHlwZSBlcSAnLCcgKSB7CiAgICAgICAgICAgIGlmICggICAkbGFzdF9ub25ibGFua19jb2RlX3R5cGUgZXEgJywnCiAgICAgICAgICAgICAgICAmJiAkck9wdHMtPnsnZGVsZXRlLXJlcGVhdGVkLWNvbW1hcyd9ICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICMgRG8gbm90IGRlbGV0ZSB0aGUgbGVhZGluZyBjb21tYSBvZiBhIGxpbmUgd2l0aCBhIHNpZGUKICAgICAgICAgICAgICAgICMgY29tbWVudC4gVGhpcyBjb3VsZCBwcm9tb3RlIHRoZSBzaWRlIGNvbW1lbnQgdG8gYSBibG9jawogICAgICAgICAgICAgICAgIyBjb21tZW50LiAgU2VlIHRlc3QgJ21hbmdsZTQuaW4nCiAgICAgICAgICAgICAgICBteSAkbG5vID0gMSArICRyTEwtPlskS0tdLT5bX0xJTkVfSU5ERVhfXTsKICAgICAgICAgICAgICAgIGlmICggJEtLIGVxICRLZmlyc3QgJiYgJHJMTC0+WyRLbGFzdF0tPltfVFlQRV9dIGVxICcjJyApIHsKICAgICAgICAgICAgICAgICAgICBjb21wbGFpbigKICAgICAgICAgICAgICAgICAgICAgICAgInJlcGVhdGVkIGNvbW1hIGJlZm9yZSBzaWRlIGNvbW1lbnQsIG5vdCBkZWxldGVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAkbG5vICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBjb21wbGFpbiggImRlbGV0ZWQgcmVwZWF0ZWQgJywnXG4iLCAkbG5vICk7CiAgICAgICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoJGxhc3Rfbm9uYmxhbmtfY29kZV90eXBlIGVxICc9PicKICAgICAgICAgICAgICAgICYmICRyT3B0cy0+eydkZWxldGUtcmVwZWF0ZWQtY29tbWFzJ30gKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBteSAkbG5vID0gMSArICRyTEwtPlskS0tdLT5bX0xJTkVfSU5ERVhfXTsKICAgICAgICAgICAgICAgIGNvbXBsYWluKCAiZm91bmQgJz0+LCcgLi4uIGVycm9yP1xuIiwgJGxubyApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIyBub3QgYSByZXBlYXRlZCBjb21tYSB0eXBlCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcmVtZW1iZXIgaW5wdXQgbGluZSBpbmRleCBvZiBmaXJzdCBjb21tYSBpZiAtd3RjIGlzIHVzZWQKICAgICAgICAgICAgaWYgKCV0cmFpbGluZ19jb21tYV9ydWxlcykgewogICAgICAgICAgICAgICAgbXkgJHNlcW5vID0gJHNlcW5vX3N0YWNreyAkZGVwdGhfbmV4dCAtIDEgfTsKICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCgkc2Vxbm8pCiAgICAgICAgICAgICAgICAgICAgJiYgIWRlZmluZWQoICRzZWxmLT5bX3JmaXJzdF9jb21tYV9saW5lX2luZGV4X10tPnskc2Vxbm99ICkKICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRzZWxmLT5bX3JmaXJzdF9jb21tYV9saW5lX2luZGV4X10tPnskc2Vxbm99ID0KICAgICAgICAgICAgICAgICAgICAgICRydG9rZW5fdmFycy0+W19MSU5FX0lOREVYX107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgYSBxdW90ZSBmb3IgcHJvYmxlbXMKICAgICAgICBlbHNpZiAoICR0eXBlIGVxICdRJyApIHsKICAgICAgICAgICAgJHNlbGYtPmNoZWNrX1EoICRLSywgJEtmaXJzdCwgJGlucHV0X2xpbmVfbnVtYmVyICkKICAgICAgICAgICAgICBpZiAoICRzZWxmLT5bX3NhdmVfbG9nZmlsZV9dICk7CiAgICAgICAgfQoKICAgICAgICAjIE9sZCBwYXRjaCB0byBhZGQgc3BhY2UgdG8gc29tZXRoaW5nIGxpa2UgIngxMCIuCiAgICAgICAgIyBOb3RlOiBUaGlzIGlzIG5vdyBkb25lIGluIHRoZSBUb2tlbml6ZXIsIGJ1dCB0aGlzIGNvZGUgcmVtYWlucwogICAgICAgICMgZm9yIHJlZmVyZW5jZS4KICAgICAgICBlbHNpZiAoICR0eXBlIGVxICduJyApIHsKICAgICAgICAgICAgaWYgKCBzdWJzdHIoICR0b2tlbiwgMCwgMSApIGVxICd4JyAmJiAkdG9rZW4gPX4gL154XGQrLyApIHsKICAgICAgICAgICAgICAgICR0b2tlbiA9fiBzL3gveCAvOwogICAgICAgICAgICAgICAgJHJ0b2tlbl92YXJzLT5bX1RPS0VOX10gPSAkdG9rZW47CiAgICAgICAgICAgICAgICBpZiAoREVWRUxfTU9ERSkgewogICAgICAgICAgICAgICAgICAgIEZhdWx0KDw8RU9NKTsKTmVhciBsaW5lICRpbnB1dF9saW5lX251bWJlciwgVW5leHBlY3RlZCBuZWVkIHRvIHNwbGl0IGEgdG9rZW4gJyR0b2tlbicgLSB0aGlzIHNob3VsZCBub3cgYmUgZG9uZSBieSB0aGUgVG9rZW5pemVyCkVPTQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBlbHNpZiAoICR0eXBlIGVxICc9PicgKSB7CiAgICAgICAgICAgIGlmICggICAkbGFzdF9ub25ibGFua19jb2RlX3R5cGUgZXEgJz0+JwogICAgICAgICAgICAgICAgJiYgJHJPcHRzLT57J2RlbGV0ZS1yZXBlYXRlZC1jb21tYXMnfSApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIENoZWNrIGZvciByZXBlYXRlZCAnPT4ncwogICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQgJyw9PicgaXMgdXNlZnVsIGFuZCBjYWxsZWQgYSB3aW5raW5nIGZhdCBjb21tYQoKICAgICAgICAgICAgICAgICMgRG8gbm90IGRlbGV0ZSB0aGUgbGVhZGluZyBmYXQgY29tbWEgb2YgYSBsaW5lIHdpdGggYSBzaWRlCiAgICAgICAgICAgICAgICAjIGNvbW1lbnQuIFRoaXMgY291bGQgcHJvbW90ZSB0aGUgc2lkZSBjb21tZW50IHRvIGEgYmxvY2sKICAgICAgICAgICAgICAgICMgY29tbWVudC4gIFNlZSB0ZXN0ICdtYW5nbGU0LmluJwogICAgICAgICAgICAgICAgbXkgJGxubyA9IDEgKyAkckxMLT5bJEtLXS0+W19MSU5FX0lOREVYX107CiAgICAgICAgICAgICAgICBpZiAoICRLSyBlcSAkS2ZpcnN0ICYmICRyTEwtPlskS2xhc3RdLT5bX1RZUEVfXSBlcSAnIycgKSB7CiAgICAgICAgICAgICAgICAgICAgY29tcGxhaW4oCiAgICAgICAgICAgICAgICAgICAgICAgICItcmVwZWF0ZWQgJz0+JyBiZWZvcmUgc2lkZSBjb21tZW50LCBub3QgZGVsZXRlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgJGxubyApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgY29tcGxhaW4oICJkZWxldGVkIHJlcGVhdGVkICc9PidcbiIsICRsbm8gKTsKICAgICAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHJlbWVtYmVyIGlucHV0IGxpbmUgaW5kZXggb2YgZmlyc3QgJz0+JyBpZiAtd3RjIGlzIHVzZWQKICAgICAgICAgICAgaWYgKCV0cmFpbGluZ19jb21tYV9ydWxlcykgewogICAgICAgICAgICAgICAgbXkgJHNlcW5vID0gJHNlcW5vX3N0YWNreyAkZGVwdGhfbmV4dCAtIDEgfTsKICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCgkc2Vxbm8pCiAgICAgICAgICAgICAgICAgICAgJiYgIWRlZmluZWQoICRzZWxmLT5bX3JmaXJzdF9jb21tYV9saW5lX2luZGV4X10tPnskc2Vxbm99ICkKICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRzZWxmLT5bX3JmaXJzdF9jb21tYV9saW5lX2luZGV4X10tPnskc2Vxbm99ID0KICAgICAgICAgICAgICAgICAgICAgICRydG9rZW5fdmFycy0+W19MSU5FX0lOREVYX107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgZm9yIGEgcXcgcXVvdGUKICAgICAgICBlbHNpZiAoICR0eXBlIGVxICdxJyApIHsKCiAgICAgICAgICAgICMgVHJpbSBzcGFjZXMgZnJvbSByaWdodCBvZiBxdyBxdW90ZXMuICBBbHNvIHRyaW0gZnJvbSB0aGUgbGVmdCBmb3IKICAgICAgICAgICAgIyBzYWZldHkgKHRoZSB0b2tlbml6ZXIgc2hvdWxkIGhhdmUgZG9uZSB0aGlzKS4KICAgICAgICAgICAgIyBUbyBhdm9pZCB0cmltbWluZyBxdyBxdW90ZXMgdXNlIC1udHF3OyB0aGlzIGNhdXNlcyB0aGUKICAgICAgICAgICAgIyB0b2tlbml6ZXIgdG8gc2V0IHRoZW0gYXMgdHlwZSAnUScgaW5zdGVhZCBvZiAncScuCiAgICAgICAgICAgICR0b2tlbiA9fiBzL14gXHMrIHwgXHMrICQvL2d4OwogICAgICAgICAgICAkcnRva2VuX3ZhcnMtPltfVE9LRU5fXSA9ICR0b2tlbjsKICAgICAgICAgICAgaWYgKCAkc2VsZi0+W19zYXZlX2xvZ2ZpbGVfXSAmJiAkdG9rZW4gPX4gL1x0LyApIHsKICAgICAgICAgICAgICAgICRzZWxmLT5ub3RlX2VtYmVkZGVkX3RhYigkaW5wdXRfbGluZV9udW1iZXIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggICAkcndoaXRlc3BhY2VfZmxhZ3MtPlskS0tdID09IFdTX1lFUwogICAgICAgICAgICAgICAgJiYgQHskckxMX25ld30KICAgICAgICAgICAgICAgICYmICRyTExfbmV3LT5bLTFdLT5bX1RZUEVfXSBuZSAnYicKICAgICAgICAgICAgICAgICYmICRyT3B0c19hZGRfd2hpdGVzcGFjZSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRzZWxmLT5zdG9yZV90b2tlbigpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRzZWxmLT5zdG9yZV90b2tlbigkcnRva2VuX3ZhcnMpOwogICAgICAgICAgICBuZXh0OwogICAgICAgIH0KCiAgICAgICAgIyBSZW1vdmUgc3BhY2UgYWZ0ZXIgJzw8Jy4gTm90ZSB0aGF0IHBlcmwgbWF5IHVzZSBhIHNwYWNlIGFmdGVyCiAgICAgICAgIyAnPDwnIHRvIGd1ZXNzIHRva2VuaXphdGlvbiBmb3IgbnVtZXJpYyB0YXJnZXRzLiBTZWUgZ2l0ICMxNzQuCiAgICAgICAgZWxzaWYgKCAkdHlwZSBlcSAnaCcgKSB7CiAgICAgICAgICAgIGlmICggaW5kZXgoICR0b2tlbiwgU1BBQ0UgKSA+IDAgfHwgaW5kZXgoICR0b2tlbiwgIlx0IiApID4gMCApIHsKICAgICAgICAgICAgICAgIGlmICggJHRva2VuID1+IC9eIChcPFw8XH4/KSBccysgKFteXGRdLiopICQveCApIHsKICAgICAgICAgICAgICAgICAgICAkdG9rZW4gPSAkMSAuICQyOwogICAgICAgICAgICAgICAgICAgICRydG9rZW5fdmFycy0+W19UT0tFTl9dID0gJHRva2VuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJHR5cGUgZXEgJ1MnICkgewoKICAgICAgICAgICAgIyBUcmltIHNwYWNlcyBpbiBzdWIgZGVmaW5pdGlvbnMKCiAgICAgICAgICAgICMgc2F2ZSB0aGUgTkVXIGluZGV4IG9mIHRoaXMgdG9rZW4gd2hpY2ggd2lsbCBub3JtYWxseQogICAgICAgICAgICAjIGJlIEB7JHJMTF9uZXd9IHBsdXMgMSBiZWNhdXNlIGEgYmxhbmsgaXMgdXN1YWxseSBpbnNlcnRlZAogICAgICAgICAgICAjIGFoZWFkIG9mIGl0LiBUaGUgdXNlciByb3V0aW5lIHdpbGwgYmFjayB1cCBpZiBuZWNlc3NhcnkuCiAgICAgICAgICAgICMgTm90ZSB0aGF0IGFuIGlzb2xhdGVkIHByb3RvdHlwZSBzdGFydGluZyBvbiBuZXcgbGluZSB3aWxsCiAgICAgICAgICAgICMgYmUgbWFya2VkIGFzICdTJyBidXQgc3RhcnQgd2l0aCAnKCcgYW5kIG11c3QgYmUgc2tpcHBlZC4KICAgICAgICAgICAgaWYgKCBzdWJzdHIoICR0b2tlbiwgMCwgMSApIG5lICcoJyApIHsKCiAgICAgICAgICAgICAgICAkS19sYXN0X1MgPSBAeyRyTExfbmV3fSArIDE7CgogICAgICAgICAgICAgICAgIyBhbHNvLCByZW1lbWJlciBpZiB0aGlzIGlzIGEgJ215JyBzdWIKICAgICAgICAgICAgICAgICRLX2xhc3RfU19pc19teSA9ICRsYXN0X25vbmJsYW5rX2NvZGVfdHlwZSBlcSAnaycKICAgICAgICAgICAgICAgICAgJiYgKAogICAgICAgICAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX2NvZGVfdG9rZW4gZXEgJ215JwogICAgICAgICAgICAgICAgICAgIHx8ICggICAkbGFzdF9ub25ibGFua19jb2RlX3Rva2VuIGVxICdzdWInCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRsYXN0X2xhc3Rfbm9uYmxhbmtfY29kZV90eXBlIGVxICdrJwogICAgICAgICAgICAgICAgICAgICAgICAmJiAkbGFzdF9sYXN0X25vbmJsYW5rX2NvZGVfdG9rZW4gZXEgJ215JyApCiAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgTm90ZTogYW4gYXN1YiB3aXRoIHByb3RvdHlwZSBsaWtlIHRoaXMgd2lsbCBjb21lIHRoaXMgd2F5CiAgICAgICAgICAgICMgYW5kIGJlIHBhcnRpYWxseSB0cmVhdGVkIGFzIGEgbmFtZWQgc3ViCiAgICAgICAgICAgICMgICAgIHN1YiAoKSB7CgogICAgICAgICAgICAjIC1zcHAgPSAwIDogbm8gc3BhY2UgYmVmb3JlIG9wZW5pbmcgcHJvdG90eXBlIHBhcmVuCiAgICAgICAgICAgICMgLXNwcCA9IDEgOiBzdGFibGUgKGZvbGxvdyBpbnB1dCBzcGFjaW5nKQogICAgICAgICAgICAjIC1zcHAgPSAyIDogYWx3YXlzIHNwYWNlIGJlZm9yZSBvcGVuaW5nIHByb3RvdHlwZSBwYXJlbgogICAgICAgICAgICBpZiAoICFkZWZpbmVkKCRyT3B0c19zcGFjZV9wcm90b3R5cGVfcGFyZW4pCiAgICAgICAgICAgICAgICB8fCAkck9wdHNfc3BhY2VfcHJvdG90eXBlX3BhcmVuID09IDEgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAjIyBkZWZhdWx0OiBzdGFibGUKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRyT3B0c19zcGFjZV9wcm90b3R5cGVfcGFyZW4gPT0gMCApIHsKICAgICAgICAgICAgICAgICR0b2tlbiA9fiBzL1xzK1woL1woLzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRyT3B0c19zcGFjZV9wcm90b3R5cGVfcGFyZW4gPT0gMiApIHsKICAgICAgICAgICAgICAgICR0b2tlbiA9fiBzL1woLyAoLzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICMjIHNob3VsZCBoYXZlIGJlZW4gY2F1Z2h0IHdpdGggdGhlIGludGVnZXIgcmFuZ2UgY2hlY2sKICAgICAgICAgICAgICAgICMjIGNvbnRpbnVlIHdpdGggdGhlIGRlZmF1bHQKICAgICAgICAgICAgICAgIERFVkVMX01PREUgJiYgRmF1bHQoPDxFT00pOwp1bmV4cGVjdGVkIGludGVnZXIgdmFsdWUgc3BhY2UtcHJvdG90eXBlLXBhcmVuPSRyT3B0c19zcGFjZV9wcm90b3R5cGVfcGFyZW4KRU9NCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgb25lIHNwYWNlIG1heCwgYW5kIG5vIHRhYnMKICAgICAgICAgICAgJHRva2VuID1+IHMvXHMrLyAvZzsKICAgICAgICAgICAgJHJ0b2tlbl92YXJzLT5bX1RPS0VOX10gPSAkdG9rZW47CgogICAgICAgICAgICAkc2VsZi0+W19yaXNfc3BlY2lhbF9pZGVudGlmaWVyX3Rva2VuX10tPnskdG9rZW59ID0gJ3N1Yic7CiAgICAgICAgfQoKICAgICAgICAjIGFuZCB0cmltIHNwYWNlcyBpbiBwYWNrYWdlIHN0YXRlbWVudHMgKGFkZGVkIGZvciBjMjUwKQogICAgICAgIGVsc2lmICggJHR5cGUgZXEgJ1AnICkgewoKICAgICAgICAgICAgIyBjbGVhbiB1cCBzcGFjZXMgaW4gcGFja2FnZSBpZGVudGlmaWVycywgbGlrZQogICAgICAgICAgICAjICAgInBhY2thZ2UgICAgICAgIEJvYjo6RG9nOyIKICAgICAgICAgICAgaWYgKCAkdG9rZW4gPX4gcy9ccysvIC9nICkgewogICAgICAgICAgICAgICAgJHJ0b2tlbl92YXJzLT5bX1RPS0VOX10gPSAkdG9rZW47CiAgICAgICAgICAgICAgICAkc2VsZi0+W19yaXNfc3BlY2lhbF9pZGVudGlmaWVyX3Rva2VuX10tPnskdG9rZW59ID0gJ3BhY2thZ2UnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHJlbWVtYmVyIHRoZSBuZXcgSyBvZiB0aGlzIHBhY2thZ2U7IHRoaXMgbWF5IGJlCiAgICAgICAgICAgICMgb2ZmIGJ5IDEgaWYgYSBibGFuayBnZXRzIGluc2VydGVkIGJlZm9yZSBpdAogICAgICAgICAgICBwdXNoIEB7JHJLX3BhY2thZ2VfbGlzdH0sIHNjYWxhciggQHskckxMX25ld30gKTsKICAgICAgICB9CgogICAgICAgICMgY2hhbmdlICdMQUJFTCAgIDonICAgdG8gJ0xBQkVMOicKICAgICAgICBlbHNpZiAoICR0eXBlIGVxICdKJyApIHsKICAgICAgICAgICAgJHRva2VuID1+IHMvXHMrLy9nOwogICAgICAgICAgICAkcnRva2VuX3ZhcnMtPltfVE9LRU5fXSA9ICR0b2tlbjsKICAgICAgICB9CgogICAgICAgIGVsc2UgewogICAgICAgICAgICAjIG5vIHNwZWNpYWwgcHJvY2Vzc2luZyBmb3IgdGhpcyB0b2tlbiB0eXBlCiAgICAgICAgfQoKICAgICAgICAjIFN0b3JlIHRoaXMgdG9rZW4gd2l0aCBwb3NzaWJsZSBwcmV2aW91cyBibGFuawogICAgICAgIGlmICggICAkcndoaXRlc3BhY2VfZmxhZ3MtPlskS0tdID09IFdTX1lFUwogICAgICAgICAgICAmJiBAeyRyTExfbmV3fQogICAgICAgICAgICAmJiAkckxMX25ldy0+Wy0xXS0+W19UWVBFX10gbmUgJ2InCiAgICAgICAgICAgICYmICRyT3B0c19hZGRfd2hpdGVzcGFjZSApCiAgICAgICAgewogICAgICAgICAgICAkc2VsZi0+c3RvcmVfdG9rZW4oKTsKICAgICAgICB9CiAgICAgICAgJHNlbGYtPnN0b3JlX3Rva2VuKCRydG9rZW5fdmFycyk7CgogICAgfSAgICAjIEVuZCB0b2tlbiBsb29wCgogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgcmVzcGFjZV90b2tlbnNfaW5uZXJfbG9vcAoKc3ViIHJlc3BhY2VfcG9zdF9sb29wX29wcyB7CgogICAgbXkgKCRzZWxmKSA9IEBfOwoKICAgICMgV2UgaGF2ZSBqdXN0IGNvbXBsZXRlZCB0aGUgJ3Jlc3BhY2UnIG9wZXJhdGlvbiwgaW4gd2hpY2ggd2UgaGF2ZSBtYWRlCiAgICAjIGEgcGFzcyB0aHJvdWdoIGFsbCB0b2tlbnMgYW5kIHNldCB0aGUgd2hpdGVzcGFjZSBiZXR3ZWVuIHRva2VucyB0byBiZQogICAgIyBhY2NvcmRpbmcgdG8gdXNlciBzZXR0aW5ncy4gIFRoZSBuZXcgdG9rZW5zIGhhdmUgYmVlbiBwbGFjZWQgaW4gdGhlIG5ldwogICAgIyB0b2tlbiBsaXN0ICckckxMX25ldycuIE5vdyB3ZSBoYXZlIHRvIGdvIHRocm91Z2ggdGhpcyBuZXcgbGlzdCBhbmQKICAgICMgZGVmaW5lIHNvbWUgaW5kZXhlcyB3aGljaCBhbGxvdyBxdWljayBhY2Nlc3MgaW50byBpdC4KCiAgICByZXR1cm4gdW5sZXNzICggQHskckxMX25ld30gKTsKCiAgICAjIFNldHVwIGFycmF5IGZvciBmaW5kaW5nIHRoZSBuZXh0IHNlcXVlbmNlIG51bWJlciBhZnRlciBhbnkgdG9rZW4KICAgIG15IEBLX25leHRfc2Vxbm9fYnlfSzsKICAgIG15ICRLX2xhc3QgPSAwOwogICAgZm9yZWFjaCBteSAkSyAoQEtfc2VxdWVuY2VkX3Rva2VuX2xpc3QpIHsKICAgICAgICBwdXNoIEBLX25leHRfc2Vxbm9fYnlfSywgKCRLKSB4ICggJEsgLSAkS19sYXN0ICk7CiAgICAgICAgJEtfbGFzdCA9ICRLOwogICAgfQoKICAgICMgTm90ZTogaGVyZSBpcyB0aGUgc2xvdyB3YXkgdG8gZG8gdGhlIGFib3ZlIGxvb3AgKDEwMCBtcykKICAgICMjIGZvcmVhY2ggbXkgJEtLICggJEtfbGFzdCAuLiAkSyAtIDEgKSB7CiAgICAjIyAgICAgJEtfbmV4dF9zZXFub19ieV9LWyRLS10gPSAkSzsKICAgICMjIH0KCiAgICAjIFRoaXMgaXMgZmFzdGVyICg2MyBtcykKICAgICMjIG15IEBxID0gKCAkS19sYXN0IC4uICRLIC0gMSApOwogICAgIyMgQEtfbmV4dF9zZXFub19ieV9LW0BxXSA9ICgkSykgeCBzY2FsYXIoQHEpOwoKICAgICMgVGhlIHB1c2ggbWV0aG9kIGFib3ZlIGlzIGZhc3Rlc3QsIGF0IDM3IG1zIGluIG15IGJlbmNobWFyay4KCiAgICAkc2VsZi0+W19yS19uZXh0X3NlcW5vX2J5X0tfXSAgICAgID0gXEBLX25leHRfc2Vxbm9fYnlfSzsKICAgICRzZWxmLT5bX3JLX3NlcXVlbmNlZF90b2tlbl9saXN0X10gPSBcQEtfc2VxdWVuY2VkX3Rva2VuX2xpc3Q7CgogICAgIyBWZXJpZnkgdGhhdCBhcnJheXMgQEtfc2VxdWVuY2VkX3Rva2VuX2xpc3QgYW5kIEB7JHJTU30gYXJlIHBhcmFsbGVsCiAgICAjIGFycmF5cywgbWVhbmluZyB0aGF0IHRoZXkgaGF2ZSBhIGNvbW1vbiBhcnJheSBpbmRleCAnSScuIFRoaXMgaW5kZXggbWF5YmUKICAgICMgYmUgZm91bmQgYnkgc2Vxbm8gd2l0aCBySV9jb250YWluZXIgYW5kIHJJX2Nsb3NpbmcuCiAgICBpZiAoREVWRUxfTU9ERSkgewogICAgICAgIG15ICRudW1fclNTICA9IEB7ICRzZWxmLT5bX3JTU19dIH07CiAgICAgICAgbXkgJG51bV9Lc2VxID0gQEtfc2VxdWVuY2VkX3Rva2VuX2xpc3Q7CgogICAgICAgICMgSWYgdGhpcyBlcnJvciBvY2N1cnMsIHdlIGhhdmUgZ2FpbmVkIG9yIGxvc3Qgb25lIG9yIG1vcmUgb2YgdGhlCiAgICAgICAgIyBzZXF1ZW5jZWQgdG9rZW5zIHJlY2VpdmVkIGZyb20gdGhlIHRva2VuaXplci4gVGhpcyBzaG91bGQgbmV2ZXIKICAgICAgICAjIGhhcHBlbi4KICAgICAgICBpZiAoICRudW1fclNTICE9ICRudW1fS3NlcSApIHsKICAgICAgICAgICAgRmF1bHQoPDxFT00pOwpudW1fclNTPSAkbnVtX3JTUyAhPSBudW1fS3NlcT0kbnVtX0tzZXEKRU9NCiAgICAgICAgfQogICAgfQoKICAgICMgRmluZCBhbmQgcmVtZW1iZXIgbGlzdHMgYnkgc2VxdWVuY2UgbnVtYmVyCiAgICBmb3JlYWNoIG15ICRzZXFubyAoIGtleXMgJXskS19vcGVuaW5nX2NvbnRhaW5lcn0gKSB7CiAgICAgICAgbXkgJEtfb3BlbmluZyA9ICRLX29wZW5pbmdfY29udGFpbmVyLT57JHNlcW5vfTsKICAgICAgICBuZXh0IHVubGVzcyBkZWZpbmVkKCRLX29wZW5pbmcpOwoKICAgICAgICAjIGNvZGUgZXJyb3JzIG1heSBsZWF2ZSB1bmRlZmluZWQgY2xvc2luZyB0b2tlbnMKICAgICAgICBteSAkS19jbG9zaW5nID0gJEtfY2xvc2luZ19jb250YWluZXItPnskc2Vxbm99OwogICAgICAgIG5leHQgdW5sZXNzIGRlZmluZWQoJEtfY2xvc2luZyk7CgogICAgICAgIG15ICRseF9vcGVuICAgPSAkckxMX25ldy0+WyRLX29wZW5pbmddLT5bX0xJTkVfSU5ERVhfXTsKICAgICAgICBteSAkbHhfY2xvc2UgID0gJHJMTF9uZXctPlskS19jbG9zaW5nXS0+W19MSU5FX0lOREVYX107CiAgICAgICAgbXkgJGxpbmVfZGlmZiA9ICRseF9jbG9zZSAtICRseF9vcGVuOwogICAgICAgICRyaXNfYnJva2VuX2NvbnRhaW5lci0+eyRzZXFub30gPSAkbGluZV9kaWZmOwoKICAgICAgICAjIFNlZSBpZiB0aGlzIGlzIGEgbGlzdAogICAgICAgIG15ICRpc19saXN0OwogICAgICAgIG15ICRydHlwZV9jb3VudCA9ICRydHlwZV9jb3VudF9ieV9zZXFuby0+eyRzZXFub307CiAgICAgICAgaWYgKCRydHlwZV9jb3VudCkgewogICAgICAgICAgICBteSAkY29tbWFfY291bnQgICAgID0gJHJ0eXBlX2NvdW50LT57JywnfTsKICAgICAgICAgICAgbXkgJGZhdF9jb21tYV9jb3VudCA9ICRydHlwZV9jb3VudC0+eyc9Pid9OwogICAgICAgICAgICBteSAkc2VtaWNvbG9uX2NvdW50ID0gJHJ0eXBlX2NvdW50LT57JzsnfTsKICAgICAgICAgICAgaWYgKCAkcnR5cGVfY291bnQtPnsnZid9ICkgewogICAgICAgICAgICAgICAgJHNlbWljb2xvbl9jb3VudCArPSAkcnR5cGVfY291bnQtPnsnZid9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFdlIHdpbGwgZGVmaW5lIGEgbGlzdCB0byBiZSBhIGNvbnRhaW5lciB3aXRoIG9uZSBvciBtb3JlIGNvbW1hcwogICAgICAgICAgICAjIGFuZCBubyBzZW1pY29sb25zLiBOb3RlIHRoYXQgd2UgaGF2ZSBpbmNsdWRlZCB0aGUgc2VtaWNvbG9ucwogICAgICAgICAgICAjIGluIGEgJ2ZvcicgY29udGFpbmVyIGluIHRoZSBzZW1pY29sb24gY291bnQgdG8ga2VlcCBjLXN0eWxlIGZvcgogICAgICAgICAgICAjIHN0YXRlbWVudHMgZnJvbSBiZWluZyBmb3JtYXR0ZWQgYXMgbGlzdHMuCiAgICAgICAgICAgIGlmICggKCAkY29tbWFfY291bnQgfHwgJGZhdF9jb21tYV9jb3VudCApICYmICEkc2VtaWNvbG9uX2NvdW50ICkgewogICAgICAgICAgICAgICAgJGlzX2xpc3QgPSAxOwoKICAgICAgICAgICAgICAgICMgV2UgbmVlZCB0byBkbyBvbmUgbW9yZSBjaGVjayBmb3IgYSBwYXJlbnRoZXNpemVkIGxpc3Q6CiAgICAgICAgICAgICAgICAjIEF0IGFuIG9wZW5pbmcgcGFyZW4gZm9sbG93aW5nIGNlcnRhaW4gdG9rZW5zLCBzdWNoIGFzICdpZicsCiAgICAgICAgICAgICAgICAjIHdlIGRvIG5vdCB3YW50IHRvIGZvcm1hdCB0aGUgY29udGVudHMgYXMgYSBsaXN0LgogICAgICAgICAgICAgICAgaWYgKCAkckxMX25ldy0+WyRLX29wZW5pbmddLT5bX1RPS0VOX10gZXEgJygnICkgewogICAgICAgICAgICAgICAgICAgIG15ICRLcCA9ICRzZWxmLT5LX3ByZXZpb3VzX2NvZGUoICRLX29wZW5pbmcsICRyTExfbmV3ICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRLcCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICR0eXBlX3AgID0gJHJMTF9uZXctPlskS3BdLT5bX1RZUEVfXTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHRva2VuX3AgPSAkckxMX25ldy0+WyRLcF0tPltfVE9LRU5fXTsKICAgICAgICAgICAgICAgICAgICAgICAgJGlzX2xpc3QgPQogICAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlX3AgZXEgJ2snCiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAhJGlzX25vbmxpc3Rfa2V5d29yZHskdG9rZW5fcH0KICAgICAgICAgICAgICAgICAgICAgICAgICA6ICEkaXNfbm9ubGlzdF90eXBleyR0eXBlX3B9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBMb29rIGZvciBhIGJsb2NrIGJyYWNlIG1hcmtlZCBhcyB1bmNlcnRhaW4uICBJZiB0aGUgdG9rZW5pemVyIHRoaW5rcwogICAgICAgICMgaXRzIGd1ZXNzIGlzIHVuY2VydGFpbiBmb3IgdGhlIHR5cGUgb2YgYSBicmFjZSBmb2xsb3dpbmcgYW4gdW5rbm93bgogICAgICAgICMgYmFyZXdvcmQgdGhlbiBpdCBhZGRzIGEgdHJhaWxpbmcgc3BhY2UgYXMgYSBzaWduYWwuICBXZSBjYW4gZml4IHRoZQogICAgICAgICMgdHlwZSBoZXJlIG5vdyB0aGF0IHdlIGhhdmUgaGFkIGEgYmV0dGVyIGxvb2sgYXQgdGhlIGNvbnRlbnRzIG9mIHRoZQogICAgICAgICMgY29udGFpbmVyLiBUaGlzIGZpeGVzIGNhc2UgYjEwODUuIFRvIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgY29kZSBpbgogICAgICAgICMgVG9rZW5pemVyLnBtIHNlYXJjaCBmb3IgJ2IxMDg1JyB3aXRoIGFuIGVkaXRvci4KICAgICAgICBteSAkYmxvY2tfdHlwZSA9ICRyYmxvY2tfdHlwZV9vZl9zZXFuby0+eyRzZXFub307CiAgICAgICAgaWYgKCAkYmxvY2tfdHlwZSAmJiBzdWJzdHIoICRibG9ja190eXBlLCAtMSwgMSApIGVxIFNQQUNFICkgewoKICAgICAgICAgICAgIyBBbHdheXMgcmVtb3ZlIHRoZSB0cmFpbGluZyBzcGFjZQogICAgICAgICAgICAkYmxvY2tfdHlwZSA9fiBzL1xzKyQvLzsKCiAgICAgICAgICAgICMgVHJ5IHRvIGZpbHRlciBvdXQgcGFyZW5sZXNzIHN1YiBjYWxscwogICAgICAgICAgICBteSAkS25uMSA9ICRzZWxmLT5LX25leHRfbm9uYmxhbmsoICRLX29wZW5pbmcsICRyTExfbmV3ICk7CiAgICAgICAgICAgIG15ICRLbm4yOwogICAgICAgICAgICBpZiAoIGRlZmluZWQoJEtubjEpICkgewogICAgICAgICAgICAgICAgJEtubjIgPSAkc2VsZi0+S19uZXh0X25vbmJsYW5rKCAkS25uMSwgJHJMTF9uZXcgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBteSAkdHlwZV9ubjEgPSBkZWZpbmVkKCRLbm4xKSA/ICRyTExfbmV3LT5bJEtubjFdLT5bX1RZUEVfXSA6ICdiJzsKICAgICAgICAgICAgbXkgJHR5cGVfbm4yID0gZGVmaW5lZCgkS25uMikgPyAkckxMX25ldy0+WyRLbm4yXS0+W19UWVBFX10gOiAnYic7CgogICAgICAgICAgICAjICAgaWYgKCAkdHlwZV9ubjEgPX4gL15bd1VdJC8gJiYgJHR5cGVfbm4yID1+IC9eW3dpcVFHQ1pdJC8gKSB7CiAgICAgICAgICAgIGlmICggJHdVeyR0eXBlX25uMX0gJiYgJHdpcXskdHlwZV9ubjJ9ICkgewogICAgICAgICAgICAgICAgJGlzX2xpc3QgPSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIENvbnZlcnQgdG8gYSBoYXNoIGJyYWNlIGlmIGl0IGxvb2tzIGxpa2UgaXQgaG9sZHMgYSBsaXN0CiAgICAgICAgICAgIGlmICgkaXNfbGlzdCkgewogICAgICAgICAgICAgICAgJGJsb2NrX3R5cGUgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRyYmxvY2tfdHlwZV9vZl9zZXFuby0+eyRzZXFub30gPSAkYmxvY2tfdHlwZTsKICAgICAgICB9CgogICAgICAgICMgSGFuZGxlIGEgbGlzdCBjb250YWluZXIKICAgICAgICBpZiAoICRpc19saXN0ICYmICEkYmxvY2tfdHlwZSApIHsKICAgICAgICAgICAgJHJpc19saXN0X2J5X3NlcW5vLT57JHNlcW5vfSA9ICRzZXFubzsKCiAgICAgICAgICAgICMgVXBkYXRlIHBhcmVudCBjb250YWluZXIgcHJvcGVydGllcwogICAgICAgICAgICBteSAkZGVwdGggICAgICAgICAgICAgID0gMDsKICAgICAgICAgICAgbXkgJHJwYXJlbnRfc2Vxbm9fbGlzdCA9ICRzZWxmLT5nZXRfcGFyZW50X2NvbnRhaW5lcnMoJHNlcW5vKTsKICAgICAgICAgICAgZm9yZWFjaCBteSAkc2Vxbm9fcGFyZW50ICggQHskcnBhcmVudF9zZXFub19saXN0fSApIHsKICAgICAgICAgICAgICAgICRkZXB0aCsrOwoKICAgICAgICAgICAgICAgICMgZm9yICRyaGFzX2xpc3Qgd2UgbmVlZCB0byBzYXZlIHRoZSBtaW5pbXVtIGRlcHRoCiAgICAgICAgICAgICAgICBpZiAoICAhJHJoYXNfbGlzdC0+eyRzZXFub19wYXJlbnR9CiAgICAgICAgICAgICAgICAgICAgfHwgJHJoYXNfbGlzdC0+eyRzZXFub19wYXJlbnR9ID4gJGRlcHRoICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkcmhhc19saXN0LT57JHNlcW5vX3BhcmVudH0gPSAkZGVwdGg7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCRsaW5lX2RpZmYpIHsKICAgICAgICAgICAgICAgICAgICAkcmhhc19icm9rZW5fbGlzdC0+eyRzZXFub19wYXJlbnR9ID0gMTsKCiAgICAgICAgICAgICAgICAgICAgIyBQYXRjaDE6IFdlIG5lZWQgdG8gbWFyayBicm9rZW4gbGlzdHMgd2l0aCBub24tdGVybWluYWwKICAgICAgICAgICAgICAgICAgICAjIGxpbmUtZW5kaW5nIGNvbW1hcyBmb3IgdGhlIC1iYng9MiBwYXJhbWV0ZXIuIFRoaXMgaW5zdXJlcwogICAgICAgICAgICAgICAgICAgICMgdGhhdCB0aGUgbGlzdCB3aWxsIHN0YXkgYnJva2VuLiAgT3RoZXJ3aXNlIHRoZSBmbGFnCiAgICAgICAgICAgICAgICAgICAgIyAtYmJ4PTIgY2FuIGJlIHVuc3RhYmxlLiAgVGhpcyBmaXhlcyBjYXNlIGI3ODkgYW5kIGI5MzguCgogICAgICAgICAgICAgICAgICAgICMgUGF0Y2gyOiBVcGRhdGVkIHRvIGFsc28gcmVxdWlyZSBlaXRoZXIgb25lIGZhdCBjb21tYSBvcgogICAgICAgICAgICAgICAgICAgICMgb25lIG1vcmUgbGluZS1lbmRpbmcgY29tbWEuICBGaXhlcyBjYXNlcyBiMTA2OSBiMTA3MAogICAgICAgICAgICAgICAgICAgICMgYjEwNzIgYjEwNzYuCiAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAkcmxlY19jb3VudF9ieV9zZXFuby0+eyRzZXFub30KICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCAgICRybGVjX2NvdW50X2J5X3NlcW5vLT57JHNlcW5vfSA+IDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRydHlwZV9jb3VudF9ieV9zZXFuby0+eyRzZXFub30tPnsnPT4nfSApCiAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkcmhhc19icm9rZW5fbGlzdF93aXRoX2xlYy0+eyRzZXFub19wYXJlbnR9ID0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgSGFuZGxlIGNvZGUgYmxvY2tzIC4uLgogICAgICAgICMgVGhlIC1scCBvcHRpb24gbmVlZHMgdG8ga25vdyBpZiBhIGNvbnRhaW5lciBob2xkcyBhIGNvZGUgYmxvY2sKICAgICAgICBlbHNpZiAoICRibG9ja190eXBlICYmICRyT3B0c19saW5lX3VwX3BhcmVudGhlc2VzICkgewoKICAgICAgICAgICAgIyBVcGRhdGUgcGFyZW50IGNvbnRhaW5lciBwcm9wZXJ0aWVzCiAgICAgICAgICAgIG15ICRycGFyZW50X3NlcW5vX2xpc3QgPSAkc2VsZi0+Z2V0X3BhcmVudF9jb250YWluZXJzKCRzZXFubyk7CiAgICAgICAgICAgIGZvcmVhY2ggbXkgJHNlcW5vX3BhcmVudCAoIEB7JHJwYXJlbnRfc2Vxbm9fbGlzdH0gKSB7CiAgICAgICAgICAgICAgICAkcmhhc19jb2RlX2Jsb2NrLT57JHNlcW5vX3BhcmVudH0gICAgICAgID0gMTsKICAgICAgICAgICAgICAgICRyaGFzX2Jyb2tlbl9jb2RlX2Jsb2NrLT57JHNlcW5vX3BhcmVudH0gPSAkbGluZV9kaWZmOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAjIG5vdGhpbmcgc3BlY2lhbCB0byBkbyBmb3IgdGhpcyBjb250YWluZXIgdG9rZW4KICAgICAgICB9CiAgICB9CgogICAgIyBGaW5kIGNvbnRhaW5lcnMgd2l0aCB0ZXJuYXJpZXMsIG5lZWRlZCBmb3IgLWxwIGZvcm1hdHRpbmcuCiAgICBmb3JlYWNoIG15ICRzZXFubyAoIGtleXMgJXskS19vcGVuaW5nX3Rlcm5hcnl9ICkgewoKICAgICAgICAjIFVwZGF0ZSBwYXJlbnQgY29udGFpbmVyIHByb3BlcnRpZXMKICAgICAgICAkc2VsZi0+bWFya19wYXJlbnRfY29udGFpbmVycyggJHNlcW5vLCAkcmhhc190ZXJuYXJ5ICk7CiAgICB9CgogICAgIyBUdXJuIG9mZiAtbHAgZm9yIGNvbnRhaW5lcnMgd2l0aCBoZXJlLWRvY3Mgd2l0aCB0ZXh0IHdpdGhpbiBhIGNvbnRhaW5lciwKICAgICMgc2luY2UgdGhleSBoYXZlIHRoZWlyIG93biBmaXhlZCBpbmRlbnRhdGlvbi4gIEZpeGVzIGNhc2UgYjEwODEuCiAgICBpZiAoJHJPcHRzX2xpbmVfdXBfcGFyZW50aGVzZXMpIHsKICAgICAgICBmb3JlYWNoIG15ICRzZXFubyAoIGtleXMgJUtfZmlyc3RfaGVyZV9kb2NfYnlfc2Vxbm8gKSB7CiAgICAgICAgICAgIG15ICRLaCAgICAgID0gJEtfZmlyc3RfaGVyZV9kb2NfYnlfc2Vxbm97JHNlcW5vfTsKICAgICAgICAgICAgbXkgJEtjICAgICAgPSAkS19jbG9zaW5nX2NvbnRhaW5lci0+eyRzZXFub307CiAgICAgICAgICAgIG15ICRsaW5lX0toID0gJHJMTF9uZXctPlskS2hdLT5bX0xJTkVfSU5ERVhfXTsKICAgICAgICAgICAgbXkgJGxpbmVfS2MgPSAkckxMX25ldy0+WyRLY10tPltfTElORV9JTkRFWF9dOwogICAgICAgICAgICBuZXh0IGlmICggJGxpbmVfS2ggPT0gJGxpbmVfS2MgKTsKICAgICAgICAgICAgJHJpc19leGNsdWRlZF9scF9jb250YWluZXItPnskc2Vxbm99ID0gMTsKICAgICAgICB9CiAgICB9CgogICAgIyBTZXQgYSBmbGFnIHRvIHR1cm4gb2ZmIC1jYWI9MyBpbiBjb21wbGV4IHN0cnVjdHVyZXMuICBPdGhlcndpc2UsCiAgICAjIGluc3RhYmlsaXR5IGNhbiBvY2N1ci4gIFdoZW4gaXQgaXMgb3ZlcnJpZGRlbiB0aGUgYmVoYXZpb3Igb2YgdGhlIGNsb3Nlc3QKICAgICMgbWF0Y2gsIC1jYWI9Miwgd2lsbCBiZSB1c2VkIGluc3RlYWQuICBUaGlzIGZpeGVzIGNhc2VzIGIxMDk2IGIxMTEzLgogICAgaWYgKCAkck9wdHNfY29tbWFfYXJyb3dfYnJlYWtwb2ludHMgPT0gMyApIHsKICAgICAgICBmb3JlYWNoIG15ICRzZXFubyAoIGtleXMgJXskS19vcGVuaW5nX2NvbnRhaW5lcn0gKSB7CgogICAgICAgICAgICBteSAkcnR5cGVfY291bnQgPSAkcnR5cGVfY291bnRfYnlfc2Vxbm8tPnskc2Vxbm99OwogICAgICAgICAgICBuZXh0IHVubGVzcyAoICRydHlwZV9jb3VudCAmJiAkcnR5cGVfY291bnQtPnsnPT4nfSApOwoKICAgICAgICAgICAgIyBvdmVycmlkZSAtY2FiPTMgaWYgdGhpcyBjb250YWlucyBhIHN1Yi1saXN0CiAgICAgICAgICAgIGlmICggIWRlZmluZWQoICRyb3ZlcnJpZGVfY2FiMy0+eyRzZXFub30gKSApIHsKICAgICAgICAgICAgICAgIGlmICggJHJoYXNfbGlzdC0+eyRzZXFub30gKSB7CiAgICAgICAgICAgICAgICAgICAgJHJvdmVycmlkZV9jYWIzLT57JHNlcW5vfSA9IDI7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBvciBpZiB0aGlzIGlzIGEgc3ViLWxpc3Qgb2YgaXRzIHBhcmVudCBjb250YWluZXIKICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIG15ICRzZXFub19wYXJlbnQgPSAkcnBhcmVudF9vZl9zZXFuby0+eyRzZXFub307CiAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRzZXFub19wYXJlbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRyaXNfbGlzdF9ieV9zZXFuby0+eyRzZXFub19wYXJlbnR9ICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRyb3ZlcnJpZGVfY2FiMy0+eyRzZXFub30gPSAyOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIFNlYXJjaCBmb3IgY2hhaW5zIG9mIG1ldGhvZCBjYWxscyBvZiB0aGUgZm9ybSAoZ2l0ICMxNzEpCiAgICAjICAgICAgKS0+eHh4KCApLT54eHgoICApLT4KICAgICMgV2UgaGF2ZSBwcmV2aW91c2x5IHNhdmVkIHRoZSBzZXFubyBvZiBhbGwgJyktPicgY29tYmluYXRpb25zCiAgICBteSAkaW5fY2hhaW5fc2Vxbm8gPSAwOwogICAgd2hpbGUgKCBteSAkc2Vxbm8gPSBzaGlmdCBAc2Vxbm9fcGFyZW5fYXJyb3cgKSB7CgogICAgICAgICMgICAgICApIC0+IGZ1bmMgKAogICAgICAgICMgICAgICApIC0+IGZ1bmMgKAogICAgICAgICMgJEtjLS1eICAgICAgICAgXi0tJEtfdGVzdAoKICAgICAgICBteSAkS2MgICAgICA9ICRLX2Nsb3NpbmdfY29udGFpbmVyLT57JHNlcW5vfTsKICAgICAgICBteSAkS19hcnJvdyA9ICRzZWxmLT5LX25leHRfbm9uYmxhbmsoICRLYywgICAgICAkckxMX25ldyApOwogICAgICAgIG15ICRLX2Z1bmMgID0gJHNlbGYtPktfbmV4dF9ub25ibGFuayggJEtfYXJyb3csICRyTExfbmV3ICk7CiAgICAgICAgbXkgJEtfdGVzdCAgPSAkc2VsZi0+S19uZXh0X25vbmJsYW5rKCAkS19mdW5jLCAgJHJMTF9uZXcgKTsKCiAgICAgICAgbGFzdCBpZiAoICFkZWZpbmVkKCRLX3Rlc3QpICk7CgogICAgICAgICMgaWdub3JlIGluZGV4IG9wZXJhdGlvbiBsaWtlICcpLT57JyBvciAnKS0+WycgYW5kIGVuZCBhbnkgY2hhaW4KICAgICAgICBteSAkdG9rID0gJHJMTF9uZXctPlskS19mdW5jXS0+W19UT0tFTl9dOwogICAgICAgIGlmICggJHRvayBlcSAnWycgfHwgJHRvayBlcSAneycgKSB7ICRpbl9jaGFpbl9zZXFubyA9IDA7IG5leHQgfQoKICAgICAgICAjIG1hcmsgc2Vxbm8gb2YgcGFyZW5zIHdoaWNoIGFyZSBwYXJ0IG9mIGEgY2FsbCBjaGFpbgogICAgICAgIG15ICRzZXFub19zdGFydCA9ICRpbl9jaGFpbl9zZXFubyA/ICRpbl9jaGFpbl9zZXFubyA6ICRzZXFubzsKICAgICAgICAkcnNlcW5vX2Fycm93X2NhbGxfY2hhaW5fc3RhcnQtPnskc2Vxbm99ID0gJHNlcW5vX3N0YXJ0OwoKICAgICAgICAjIHNhdmUgYSBsaXN0IG9mIHRoZSBhcnJvd3MsIG5lZWRlZCB0byBzZXQgbGluZSBicmVha3MKICAgICAgICBwdXNoIEB7ICRyYXJyb3dfY2FsbF9jaGFpbi0+eyRzZXFub19zdGFydH0gfSwgJEtfYXJyb3c7CgogICAgICAgICMgU2VlIGlmIHRoaXMgY2hhaW4gY29udGludWVzCiAgICAgICAgaWYgKCAgIEBzZXFub19wYXJlbl9hcnJvdwogICAgICAgICAgICAmJiBkZWZpbmVkKCRLX3Rlc3QpCiAgICAgICAgICAgICYmICRyTExfbmV3LT5bJEtfdGVzdF0tPltfVE9LRU5fXSBlcSAnKCcKICAgICAgICAgICAgJiYgJHJMTF9uZXctPlskS190ZXN0XS0+W19UWVBFX1NFUVVFTkNFX10gZXEgJHNlcW5vX3BhcmVuX2Fycm93WzBdICkKICAgICAgICB7CiAgICAgICAgICAgICRpbl9jaGFpbl9zZXFubyB8fD0gJHNlcW5vOwogICAgICAgIH0KICAgICAgICBlbHNlIHsgJGluX2NoYWluX3NlcW5vID0gMCB9CiAgICB9ICMjIGVuZCB3aGlsZSAoIG15ICRzZXFubyA9IHNoaWZ0Li4uKQoKICAgICMgRm9yIGVmZmljaWVuY3ksIHJlbW92ZSBjaGFpbnMgd2l0aCBsZW5ndGggPCAyCiAgICBmb3JlYWNoIG15ICRzZXFubyAoIGtleXMgJXskcnNlcW5vX2Fycm93X2NhbGxfY2hhaW5fc3RhcnR9ICkgewogICAgICAgIG15ICRzZXFub19zdGFydCA9ICRyc2Vxbm9fYXJyb3dfY2FsbF9jaGFpbl9zdGFydC0+eyRzZXFub307CiAgICAgICAgaWYgKCBAeyAkcmFycm93X2NhbGxfY2hhaW4tPnskc2Vxbm9fc3RhcnR9IH0gPCAyICkgewogICAgICAgICAgICBkZWxldGUgJHJzZXFub19hcnJvd19jYWxsX2NoYWluX3N0YXJ0LT57JHNlcW5vfTsKICAgICAgICAgICAgZGVsZXRlICRyYXJyb3dfY2FsbF9jaGFpbi0+eyRzZXFub19zdGFydH07CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHJlc3BhY2VfcG9zdF9sb29wX29wcwoKc3ViIHN0b3JlX3Rva2VuIHsKCiAgICBteSAoICRzZWxmLCAoJGl0ZW0pICkgPSBAXzsKCiAgICAjIFN0b3JlIG9uZSB0b2tlbiBkdXJpbmcgcmVzcGFjZSBvcGVyYXRpb25zCgogICAgIyBHaXZlbjoKICAgICMgICRpdGVtID0KICAgICMgICAgaWYgZGVmaW5lZCAgICAgID0+IHJlZmVyZW5jZSB0byBhIHRva2VuIHRvIGJlIHN0b3JlZAogICAgIyAgICBpZiBub3QgZGVmaW5lZCAgPT4gbWFrZSBhbmQgc3RvcmUgYSBibGFuayBzcGFjZQoKICAgICMgTk9URTogdGhpcyBzdWIgaXMgY2FsbGVkIG9uY2UgcGVyIHRva2VuIHNvIGNvZGluZyBlZmZpY2llbmN5IGlzIGNyaXRpY2FsLgoKICAgICMgSWYgbm8gYXJnLCB0aGVuIG1ha2UgYW5kIHN0b3JlIGEgYmxhbmsgc3BhY2UKICAgIGlmICggISRpdGVtICkgewoKICAgICAgICAjICAtIE5ldmVyIHN0YXJ0IHRoZSBhcnJheSB3aXRoIGEgc3BhY2UsIGFuZAogICAgICAgICMgIC0gTmV2ZXIgc3RvcmUgdHdvIGNvbnNlY3V0aXZlIHNwYWNlcwogICAgICAgIGlmICggQHskckxMX25ld30gJiYgJHJMTF9uZXctPlstMV0tPltfVFlQRV9dIG5lICdiJyApIHsKCiAgICAgICAgICAgICMgTm90ZSB0aGF0IHRoZSBsZXZlbCBhbmQgY2lfbGV2ZWwgb2YgbmV3bHkgY3JlYXRlZCBzcGFjZXMgc2hvdWxkCiAgICAgICAgICAgICMgYmUgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIHRva2VuLiAgT3RoZXJ3aXNlIHRoZSBjb2RpbmcgZm9yIHRoZQogICAgICAgICAgICAjIC1scCBvcHRpb24gY2FuIGNyZWF0ZSBhIGJsaW5raW5nIHN0YXRlIGluIHNvbWUgcmFyZSBjYXNlcy4KICAgICAgICAgICAgIyAoc2VlIGIxMTA5LCBiMTExMCkuCiAgICAgICAgICAgICRpdGVtICAgICAgICAgICAgICAgICAgICA9IFtdOwogICAgICAgICAgICAkaXRlbS0+W19UWVBFX10gICAgICAgICAgPSAnYic7CiAgICAgICAgICAgICRpdGVtLT5bX1RPS0VOX10gICAgICAgICA9IFNQQUNFOwogICAgICAgICAgICAkaXRlbS0+W19UWVBFX1NFUVVFTkNFX10gPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgICRpdGVtLT5bX0xJTkVfSU5ERVhfXSAgICA9ICRyTExfbmV3LT5bLTFdLT5bX0xJTkVfSU5ERVhfXTsKICAgICAgICAgICAgJGl0ZW0tPltfTEVWRUxfXSAgICAgICAgID0gJHJMTF9uZXctPlstMV0tPltfTEVWRUxfXTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7IHJldHVybiB9CiAgICB9CgogICAgIyBUaGUgbmV4dCBtdWx0aXBsZSBhc3NpZ25tZW50IHN0YXRlbWVudHMgYXJlIHNpZ25pZmljYW50bHkgZmFzdGVyIHRoYW4KICAgICMgZG9pbmcgdGhlbSBvbmUtYnktb25lLgogICAgbXkgKAoKICAgICAgICAkdHlwZSwKICAgICAgICAkdG9rZW4sCiAgICAgICAgJHR5cGVfc2VxdWVuY2UsCgogICAgICApID0gQHskaXRlbX1bCgogICAgICBfVFlQRV8sCiAgICAgIF9UT0tFTl8sCiAgICAgIF9UWVBFX1NFUVVFTkNFXywKCiAgICAgIF07CgogICAgIyBTZXQgdGhlIHRva2VuIGxlbmd0aC4gIExhdGVyIGl0IG1heSBiZSBhZGp1c3RlZCBhZ2FpbiBpZiBwaGFudG9tIG9yCiAgICAjIGlnbm9yaW5nIHNpZGUgY29tbWVudCBsZW5ndGhzLiBJdCBpcyBhbHdheXMgb2theSB0byBjYWxjdWxhdGUgdGhlIGxlbmd0aAogICAgIyB3aXRoICRsZW5ndGhfZnVuY3Rpb24tPigpIGlmIGl0IGlzIGRlZmluZWQsIGJ1dCBpdCBpcyBleHRyZW1lbHkgc2xvdyBzbwogICAgIyB3ZSBhdm9pZCBpdCBhbmQgdXNlIHRoZSBidWlsdGluIGxlbmd0aCgpIGZvciBwcmludGFibGUgYXNjaWkgdG9rZW5zLgogICAgIyBOb3RlOiBub24tcHJpbnRhYmxlIGFzY2lpIGNoYXJhY3RlcnMgKGxpa2UgdGFiKSBtYXkgZ2V0IGRpZmZlcmVudCBsZW5ndGhzCiAgICAjIGJ5IHRoZSB0d28gbWV0aG9kcywgc28gd2UgaGF2ZSB0byB1c2UgJGxlbmd0aF9mdW5jdGlvbiBmb3IgdGhlbS4KICAgIG15ICR0b2tlbl9sZW5ndGggPQogICAgICAoICAgICAgJGxlbmd0aF9mdW5jdGlvbgogICAgICAgICAgJiYgISRpc19hc2NpaV90eXBleyR0eXBlfQogICAgICAgICAgJiYgJHRva2VuID1+IC9bWzpeYXNjaWk6XVs6XnByaW50Ol1dLyApCiAgICAgID8gJGxlbmd0aF9mdW5jdGlvbi0+KCR0b2tlbikKICAgICAgOiBsZW5ndGgoJHRva2VuKTsKCiAgICAjIGhhbmRsZSBibGFua3MKICAgIGlmICggJHR5cGUgZXEgJ2InICkgewoKICAgICAgICAjIERvIG5vdCBvdXRwdXQgY29uc2VjdXRpdmUgYmxhbmtzLiBUaGlzIHNpdHVhdGlvbiBzaG91bGQgaGF2ZSBiZWVuCiAgICAgICAgIyBwcmV2ZW50ZWQgZWFybGllciwgYnV0IGl0IGlzIHdvcnRoIGNoZWNraW5nIGJlY2F1c2UgbGF0ZXIgcm91dGluZXMKICAgICAgICAjIG1ha2UgdGhpcyBhc3N1bXB0aW9uLgogICAgICAgIGlmICggQHskckxMX25ld30gJiYgJHJMTF9uZXctPlstMV0tPltfVFlQRV9dIGVxICdiJyApIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGhhbmRsZSBjb21tZW50cwogICAgZWxzaWYgKCAkdHlwZSBlcSAnIycgKSB7CgogICAgICAgICMgdHJpbSBjb21tZW50cyBpZiBuZWNlc3NhcnkKICAgICAgICBteSAkb3JkID0gb3JkKCBzdWJzdHIoICR0b2tlbiwgLTEsIDEgKSApOwogICAgICAgIGlmICgKICAgICAgICAgICAgJG9yZCA+IDAKICAgICAgICAgICAgJiYgKCAgICRvcmQgPCBPUkRfUFJJTlRBQkxFX01JTgogICAgICAgICAgICAgICAgfHwgJG9yZCA+IE9SRF9QUklOVEFCTEVfTUFYICkKICAgICAgICAgICAgJiYgJHRva2VuID1+IHMvXHMrJC8vCiAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkdG9rZW5fbGVuZ3RoID0KICAgICAgICAgICAgICAkbGVuZ3RoX2Z1bmN0aW9uID8gJGxlbmd0aF9mdW5jdGlvbi0+KCR0b2tlbikgOiBsZW5ndGgoJHRva2VuKTsKICAgICAgICAgICAgJGl0ZW0tPltfVE9LRU5fXSA9ICR0b2tlbjsKICAgICAgICB9CgogICAgICAgIG15ICRpZ25vcmVfc2NfbGVuZ3RoID0gJHJPcHRzX2lnbm9yZV9zaWRlX2NvbW1lbnRfbGVuZ3RoczsKCiAgICAgICAgIyBJZ25vcmUgbGVuZ3RoIG9mICcjIyBubyBjcml0aWMnIGNvbW1lbnRzIGV2ZW4gaWYgLWlzY2wgaXMgbm90IHNldAogICAgICAgIGlmICggICAhJGlnbm9yZV9zY19sZW5ndGgKICAgICAgICAgICAgJiYgISRyT3B0c19pZ25vcmVfcGVybGNyaXRpY19jb21tZW50cwogICAgICAgICAgICAmJiAkdG9rZW5fbGVuZ3RoID4gMTAKICAgICAgICAgICAgJiYgc3Vic3RyKCAkdG9rZW4sIDEsIDEgKSBlcSAnIycKICAgICAgICAgICAgJiYgJHRva2VuID1+IC9eIyNccypub1xzK2NyaXRpY1xiLyApCiAgICAgICAgewoKICAgICAgICAgICAgIyBJcyBpdCBhIHNpZGUgY29tbWVudCBvciBhIGJsb2NrIGNvbW1lbnQ/CiAgICAgICAgICAgIGlmICggJEt0b2tlbl92YXJzID4gJEtmaXJzdF9vbGQgKSB7CgogICAgICAgICAgICAgICAgIyBUaGlzIGlzIGEgc2lkZSBjb21tZW50LiBJZiB3ZSBkbyBub3QgaWdub3JlIGl0cyBsZW5ndGgsIGFuZAogICAgICAgICAgICAgICAgIyAtaXNjbCBoYXMgbm90IGJlZW4gc2V0LCB0aGVuIHRoZSBsaW5lIGNvdWxkIGJlIGJyb2tlbiBhbmQKICAgICAgICAgICAgICAgICMgcGVybGNyaXRpYyB3aWxsIGNvbXBsYWluLiBTbyB0aGlzIGlzIGVzc2VudGlhbDoKICAgICAgICAgICAgICAgICRpZ25vcmVfc2NfbGVuZ3RoIHx8PSAxOwoKICAgICAgICAgICAgICAgICMgSXQgd291bGQgYmUgYSBnb29kIGlkZWEgdG8gYWxzbyBtYWtlIHRoaXMgYmVoYXZlIGxpa2UgYQogICAgICAgICAgICAgICAgIyBzdGF0aWMgc2lkZSBjb21tZW50LCBidXQgdGhpcyBpcyBub3QgZXNzZW50aWFsIGFuZCB3b3VsZAogICAgICAgICAgICAgICAgIyBjaGFuZ2UgZXhpc3RpbmcgZm9ybWF0dGluZy4gIFNvIHdlIHdpbGwgbGVhdmUgaXQgdG8gdGhlIHVzZXIKICAgICAgICAgICAgICAgICMgdG8gc2V0IC1zc2MgaWYgZGVzaXJlZC4KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIFRoaXMgaXMgYSBmdWxsLWxpbmUgKGJsb2NrKSBjb21tZW50LgogICAgICAgICAgICAgICAgIyBJdCB3b3VsZCBiZSBhIGdvb2QgaWRlYSB0byBtYWtlIHRoaXMgYmVoYXZlIGxpa2UgYSBzdGF0aWMKICAgICAgICAgICAgICAgICMgYmxvY2sgY29tbWVudCwgYnV0IHRoaXMgaXMgbm90IGVzc2VudGlhbCBhbmQgd291bGQgY2hhbmdlCiAgICAgICAgICAgICAgICAjIGV4aXN0aW5nIGZvcm1hdHRpbmcuICBTbyB3ZSB3aWxsIGxlYXZlIGl0IHRvIHRoZSB1c2VyIHRvCiAgICAgICAgICAgICAgICAjIHNldCAtc2JjIGlmIGRlc2lyZWQKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBTZXQgbGVuZ3RoIG9mIGlnbm9yZWQgc2lkZSBjb21tZW50cyBhcyBqdXN0IDEKICAgICAgICBpZiAoICRpZ25vcmVfc2NfbGVuZ3RoICYmICggISRDT0RFX3R5cGUgfHwgJENPREVfdHlwZSBlcSAnSFNDJyApICkgewogICAgICAgICAgICAkdG9rZW5fbGVuZ3RoID0gMTsKICAgICAgICB9CgogICAgICAgIG15ICRzZXFubyA9ICRzZXFub19zdGFja3sgJGRlcHRoX25leHQgLSAxIH07CiAgICAgICAgaWYgKCBkZWZpbmVkKCRzZXFubykgKSB7CiAgICAgICAgICAgICRzZWxmLT5bX3JibGFua19hbmRfY29tbWVudF9jb3VudF9dLT57JHNlcW5vfSArPSAxCiAgICAgICAgICAgICAgaWYgKCAkQ09ERV90eXBlIGVxICdCQycgKTsKICAgICAgICAgICAgaWYgKCAhJHJpc19wZXJtYW5lbnRseV9icm9rZW4tPnskc2Vxbm99ICkgewogICAgICAgICAgICAgICAgJHJpc19wZXJtYW5lbnRseV9icm9rZW4tPnskc2Vxbm99ID0gMTsKICAgICAgICAgICAgICAgICRzZWxmLT5tYXJrX3BhcmVudF9jb250YWluZXJzKCAkc2Vxbm8sCiAgICAgICAgICAgICAgICAgICAgJHJpc19wZXJtYW5lbnRseV9icm9rZW4gKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGhhbmRsZSBub24tYmxhbmtzIGFuZCBub24tY29tbWVudHMKICAgIGVsc2UgewoKICAgICAgICBteSAkYmxvY2tfdHlwZTsKCiAgICAgICAgIyBjaGVjayBmb3IgYSBzZXF1ZW5jZWQgaXRlbSAoaS5lLiwgY29udGFpbmVyIG9yID8vOikKICAgICAgICBpZiAoJHR5cGVfc2VxdWVuY2UpIHsKCiAgICAgICAgICAgICMgVGhpcyB3aWxsIGJlIHRoZSBpbmRleCBvZiB0aGlzIGl0ZW0gaW4gdGhlIG5ldyBhcnJheQogICAgICAgICAgICBteSAkS0tfbmV3ID0gQHskckxMX25ld307CgogICAgICAgICAgICAjIHJlbWVtYmVyIG5ldyBLIG9mIHNlcXVlbmNlIHRva2VucwogICAgICAgICAgICBwdXNoIEBLX3NlcXVlbmNlZF90b2tlbl9saXN0LCAkS0tfbmV3OwoKICAgICAgICAgICAgaWYgKCAkaXNfb3BlbmluZ190b2tlbnskdG9rZW59ICkgewoKICAgICAgICAgICAgICAgICRLX29wZW5pbmdfY29udGFpbmVyLT57JHR5cGVfc2VxdWVuY2V9ID0gJEtLX25ldzsKICAgICAgICAgICAgICAgICRibG9ja190eXBlID0gJHJibG9ja190eXBlX29mX3NlcW5vLT57JHR5cGVfc2VxdWVuY2V9OwoKICAgICAgICAgICAgICAgICMgRml4IGZvciBjYXNlIGIxMTAwOiBDb3VudCBhIGxpbmUgZW5kaW5nIGluICcsIFsnIGFzIGhhdmluZwogICAgICAgICAgICAgICAgIyBhIGxpbmUtZW5kaW5nIGNvbW1hLiAgT3RoZXJ3aXNlLCB0aGVzZSBjb21tYXMgY2FuIGJlIGhpZGRlbgogICAgICAgICAgICAgICAgIyB3aXRoIHNvbWV0aGluZyBsaWtlIC0tb3BlbmluZy1zcXVhcmUtYnJhY2tldC1yaWdodAogICAgICAgICAgICAgICAgaWYgKCAgICRsYXN0X25vbmJsYW5rX2NvZGVfdHlwZSBlcSAnLCcKICAgICAgICAgICAgICAgICAgICAmJiAkS3Rva2VuX3ZhcnMgPT0gJEtsYXN0X29sZF9jb2RlCiAgICAgICAgICAgICAgICAgICAgJiYgJEt0b2tlbl92YXJzID4gJEtmaXJzdF9vbGQgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRybGVjX2NvdW50X2J5X3NlcW5vLT57JHR5cGVfc2VxdWVuY2V9Kys7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAgICRsYXN0X25vbmJsYW5rX2NvZGVfdHlwZSBlcSAnPScKICAgICAgICAgICAgICAgICAgICB8fCAkbGFzdF9ub25ibGFua19jb2RlX3R5cGUgZXEgJz0+JyApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJHJpc19hc3NpZ25lZF9zdHJ1Y3R1cmUtPnskdHlwZV9zZXF1ZW5jZX0gPQogICAgICAgICAgICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfY29kZV90eXBlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG15ICRzZXFub19wYXJlbnQgPSAkc2Vxbm9fc3RhY2t7ICRkZXB0aF9uZXh0IC0gMSB9OwogICAgICAgICAgICAgICAgJHNlcW5vX3BhcmVudCA9IFNFUV9ST09UIHVubGVzcyBkZWZpbmVkKCRzZXFub19wYXJlbnQpOwogICAgICAgICAgICAgICAgcHVzaCBAeyAkcmNoaWxkcmVuX29mX3NlcW5vLT57JHNlcW5vX3BhcmVudH0gfSwgJHR5cGVfc2VxdWVuY2U7CiAgICAgICAgICAgICAgICAkcnBhcmVudF9vZl9zZXFuby0+eyR0eXBlX3NlcXVlbmNlfSAgICAgPSAkc2Vxbm9fcGFyZW50OwogICAgICAgICAgICAgICAgJHNlcW5vX3N0YWNreyRkZXB0aF9uZXh0fSAgICAgICAgICAgICAgID0gJHR5cGVfc2VxdWVuY2U7CiAgICAgICAgICAgICAgICAkS19vbGRfb3BlbmluZ19ieV9zZXFub3skdHlwZV9zZXF1ZW5jZX0gPSAkS3Rva2VuX3ZhcnM7CiAgICAgICAgICAgICAgICAkZGVwdGhfbmV4dCsrOwoKICAgICAgICAgICAgICAgIGlmICggJGRlcHRoX25leHQgPiAkZGVwdGhfbmV4dF9tYXggKSB7CiAgICAgICAgICAgICAgICAgICAgJGRlcHRoX25leHRfbWF4ID0gJGRlcHRoX25leHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkaXNfY2xvc2luZ190b2tlbnskdG9rZW59ICkgewoKICAgICAgICAgICAgICAgICRLX2Nsb3NpbmdfY29udGFpbmVyLT57JHR5cGVfc2VxdWVuY2V9ID0gJEtLX25ldzsKICAgICAgICAgICAgICAgICRibG9ja190eXBlID0gJHJibG9ja190eXBlX29mX3NlcW5vLT57JHR5cGVfc2VxdWVuY2V9OwoKICAgICAgICAgICAgICAgICMgRG8gbm90IGluY2x1ZGUgdGVybWluYWwgY29tbWFzIGluIGNvdW50cwogICAgICAgICAgICAgICAgaWYgKCAgICRsYXN0X25vbmJsYW5rX2NvZGVfdHlwZSBlcSAnLCcKICAgICAgICAgICAgICAgICAgICB8fCAkbGFzdF9ub25ibGFua19jb2RlX3R5cGUgZXEgJz0+JyApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJHJ0eXBlX2NvdW50X2J5X3NlcW5vLT57JHR5cGVfc2VxdWVuY2V9CiAgICAgICAgICAgICAgICAgICAgICAtPnskbGFzdF9ub25ibGFua19jb2RlX3R5cGV9LS07CgogICAgICAgICAgICAgICAgICAgIGlmICggICAkS3Rva2VuX3ZhcnMgPT0gJEtmaXJzdF9vbGQKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJGxhc3Rfbm9uYmxhbmtfY29kZV90eXBlIGVxICcsJwogICAgICAgICAgICAgICAgICAgICAgICAmJiAkcmxlY19jb3VudF9ieV9zZXFuby0+eyR0eXBlX3NlcXVlbmNlfSApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkcmxlY19jb3VudF9ieV9zZXFuby0+eyR0eXBlX3NlcXVlbmNlfS0tOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBzZXQgZmxhZyB0byByZXRhaW4gdHJhaWxpbmcgY29tbWEgYnJlYWtzIChiMTQ5MywgYzQxNikKICAgICAgICAgICAgICAgICAgICAjIGxlbmd0aCBjaGVjayBuZWVkZWQgdG8gaWdub3JlIHBoYW50b20gY29tbWFzIChiMTQ5NikKICAgICAgICAgICAgICAgICAgICBpZiAoICAgJGxhc3Rfbm9uYmxhbmtfY29kZV90eXBlIGVxICcsJwogICAgICAgICAgICAgICAgICAgICAgICAmJiAkdHJhaWxpbmdfY29tbWFfYnJlYWtfcnVsZXN7JHRva2VufQogICAgICAgICAgICAgICAgICAgICAgICAmJiBsZW5ndGgoJGxhc3Rfbm9uYmxhbmtfY29kZV90b2tlbikgKQogICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRydWxlID0gJHRyYWlsaW5nX2NvbW1hX2JyZWFrX3J1bGVzeyR0b2tlbn07CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICggJGxldHRlciwgJHBhcmVuX2ZsYWcgKSA9IEB7JHJ1bGV9OwogICAgICAgICAgICAgICAgICAgICAgICBteSAkbWF0Y2g7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJGxldHRlciBlcSAnYicgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWF0Y2ggPSAkS3Rva2VuX3ZhcnMgPT0gJEtmaXJzdF9vbGQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkbGV0dGVyIGVxICdtJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtYXRjaCA9ICRLX29sZF9vcGVuaW5nX2J5X3NlcW5veyR0eXBlX3NlcXVlbmNlfSA8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRLZmlyc3Rfb2xkOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2lmICggJGxldHRlciBlcSAnMScgfHwgJGxldHRlciBlcSAnKicgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWF0Y2ggPSAxOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMgc2hvdWxkbid0IGhhcHBlbiAtIHRyZWF0IGFzICdiJyBmb3Igbm93CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KDw8RU9NKTsKdW5leHBlY3RlZCBvcHRpb24gJyRsZXR0ZXInIGZvciAtLXRyYWlsaW5nLWNvbW1hLWJyZWFrLWZsYWcgYXQgdG9rZW4gJyR0b2tlbicKRU9NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWF0Y2ggPSAkS3Rva2VuX3ZhcnMgPT0gJEtmaXJzdF9vbGQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJG1hdGNoICYmICRwYXJlbl9mbGFnICYmICR0b2tlbiBlcSAnKScgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWF0Y2ggJiY9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5tYXRjaF9wYXJlbl9jb250cm9sX2ZsYWcoICR0eXBlX3NlcXVlbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJlbl9mbGFnLCAkckxMX25ldyApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG1hdGNoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+W19yYnJlYWtfY29udGFpbmVyX10tPnskdHlwZV9zZXF1ZW5jZX0gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgVXBkYXRlIHRoZSBzdGFjay4uLgogICAgICAgICAgICAgICAgJGRlcHRoX25leHQtLTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIEZvciB0ZXJuYXJ5LCBub3RlIHBhcmVudCBidXQgZG8gbm90IGluY2x1ZGUgYXMgY2hpbGQKICAgICAgICAgICAgICAgIG15ICRzZXFub19wYXJlbnQgPSAkc2Vxbm9fc3RhY2t7ICRkZXB0aF9uZXh0IC0gMSB9OwogICAgICAgICAgICAgICAgJHNlcW5vX3BhcmVudCA9IFNFUV9ST09UIHVubGVzcyBkZWZpbmVkKCRzZXFub19wYXJlbnQpOwogICAgICAgICAgICAgICAgJHJwYXJlbnRfb2Zfc2Vxbm8tPnskdHlwZV9zZXF1ZW5jZX0gPSAkc2Vxbm9fcGFyZW50OwoKICAgICAgICAgICAgICAgICMgVGhlc2UgYXJlIG5vdCB5ZXQgdXNlZCBidXQgY291bGQgYmUgdXNlZnVsCiAgICAgICAgICAgICAgICBpZiAoICR0b2tlbiBlcSAnPycgKSB7CiAgICAgICAgICAgICAgICAgICAgJEtfb3BlbmluZ190ZXJuYXJ5LT57JHR5cGVfc2VxdWVuY2V9ID0gJEtLX25ldzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJHRva2VuIGVxICc6JyApIHsKICAgICAgICAgICAgICAgICAgICAkS19jbG9zaW5nX3Rlcm5hcnktPnskdHlwZV9zZXF1ZW5jZX0gPSAkS0tfbmV3OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICMgV2UgcmVhbGx5IHNob3VsZG4ndCBhcnJpdmUgaGVyZSwganVzdCBiZWluZyBjYXV0aW91czoKICAgICAgICAgICAgICAgICAgICAjIFRoZSBvbmx5IHNlcXVlbmNlZCB0eXBlcyBvdXRwdXQgYnkgdGhlIHRva2VuaXplciBhcmUgdGhlCiAgICAgICAgICAgICAgICAgICAgIyBvcGVuaW5nICYgY2xvc2luZyBjb250YWluZXJzIGFuZCB0aGUgdGVybmFyeSB0eXBlcy4gRWFjaAogICAgICAgICAgICAgICAgICAgICMgb2YgdGhvc2Ugd2FzIGNoZWNrZWQgYWJvdmUuIFNvIHdlIHdvdWxkIG9ubHkgZ2V0IGhlcmUKICAgICAgICAgICAgICAgICAgICAjIGlmIHRoZSB0b2tlbml6ZXIgaGFzIGJlZW4gY2hhbmdlZCB0byBtYXJrIHNvbWUgb3RoZXIKICAgICAgICAgICAgICAgICAgICAjIHRva2VucyB3aXRoIHNlcXVlbmNlIG51bWJlcnMuCiAgICAgICAgICAgICAgICAgICAgaWYgKERFVkVMX01PREUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgRmF1bHQoCiJVbmV4cGVjdGVkIHRva2VuIHR5cGUgd2l0aCBzZXF1ZW5jZSBudW1iZXI6IHR5cGU9JyR0eXBlJywgc2Vxbm89JyR0eXBlX3NlcXVlbmNlJyIKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgUmVtZW1iZXIgdGhlIG1vc3QgcmVjZW50IHR3byBub24tYmxhbmssIG5vbi1jb21tZW50IHRva2Vucy4KICAgICAgICAjIE5PVEU6IHRoZSBwaGFudG9tIHNlbWljb2xvbiBjb2RlIG1heSBjaGFuZ2UgdGhlIG91dHB1dCBzdGFjawogICAgICAgICMgd2l0aG91dCB1cGRhdGluZyB0aGVzZSB2YWx1ZXMuICBQaGFudG9tIHNlbWljb2xvbnMgYXJlIGNvbnNpZGVyZWQKICAgICAgICAjIHRoZSBzYW1lIGFzIGJsYW5rcyBmb3Igbm93LCBidXQgZnV0dXJlIG5lZWRzIG1pZ2h0IGNoYW5nZSB0aGF0LgogICAgICAgICMgU2VlIHRoZSByZWxhdGVkIG5vdGUgaW4gc3ViICdhZGRfcGhhbnRvbV9zZW1pY29sb24nLgogICAgICAgICRsYXN0X2xhc3Rfbm9uYmxhbmtfY29kZV90eXBlICA9ICRsYXN0X25vbmJsYW5rX2NvZGVfdHlwZTsKICAgICAgICAkbGFzdF9sYXN0X25vbmJsYW5rX2NvZGVfdG9rZW4gPSAkbGFzdF9ub25ibGFua19jb2RlX3Rva2VuOwoKICAgICAgICAkbGFzdF9ub25ibGFua19jb2RlX3R5cGUgID0gJHR5cGU7CiAgICAgICAgJGxhc3Rfbm9uYmxhbmtfY29kZV90b2tlbiA9ICR0b2tlbjsKICAgICAgICAkbGFzdF9ub25ibGFua19ibG9ja190eXBlID0gJGJsb2NrX3R5cGU7CgogICAgICAgICMgY291bnQgc2VsZWN0ZWQgdHlwZXMKICAgICAgICBpZiAoICRpc19jb3VudGVkX3R5cGV7JHR5cGV9ICkgewogICAgICAgICAgICBteSAkc2Vxbm8gPSAkc2Vxbm9fc3RhY2t7ICRkZXB0aF9uZXh0IC0gMSB9OwogICAgICAgICAgICBpZiAoIGRlZmluZWQoJHNlcW5vKSApIHsKICAgICAgICAgICAgICAgICRydHlwZV9jb3VudF9ieV9zZXFuby0+eyRzZXFub30tPnskdHlwZX0rKzsKCiAgICAgICAgICAgICAgICAjIENvdW50IGxpbmUtZW5kaW5nIGNvbW1hcyBmb3IgLWJieAogICAgICAgICAgICAgICAgaWYgKCAkdHlwZSBlcSAnLCcgJiYgJEt0b2tlbl92YXJzID09ICRLbGFzdF9vbGRfY29kZSApIHsKICAgICAgICAgICAgICAgICAgICAkcmxlY19jb3VudF9ieV9zZXFuby0+eyRzZXFub30rKzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIFJlbWVtYmVyIGluZGV4IG9mIGZpcnN0IGhlcmUgZG9jIHRhcmdldAogICAgICAgICAgICAgICAgaWYgKCAkdHlwZSBlcSAnaCcgJiYgISRLX2ZpcnN0X2hlcmVfZG9jX2J5X3NlcW5veyRzZXFub30gKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJEtLX25ldyA9IEB7JHJMTF9uZXd9OwogICAgICAgICAgICAgICAgICAgICRLX2ZpcnN0X2hlcmVfZG9jX2J5X3NlcW5veyRzZXFub30gPSAkS0tfbmV3OwoKICAgICAgICAgICAgICAgICAgICAjIHRoZSBoZXJlIGRvYyB3aGljaCBmb2xsb3dzIG1ha2VzIHRoZSBjb250YWluZXIgYnJva2VuCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJHJpc19wZXJtYW5lbnRseV9icm9rZW4tPnskc2Vxbm99ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkcmlzX3Blcm1hbmVudGx5X2Jyb2tlbi0+eyRzZXFub30gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+bWFya19wYXJlbnRfY29udGFpbmVycyggJHNlcW5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJpc19wZXJtYW5lbnRseV9icm9rZW4gKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBjdW11bGF0aXZlIGxlbmd0aCBpcyB0aGUgbGVuZ3RoIHN1bSBpbmNsdWRpbmcgdGhpcyB0b2tlbgogICAgJGN1bXVsYXRpdmVfbGVuZ3RoICs9ICR0b2tlbl9sZW5ndGg7CgogICAgJGl0ZW0tPltfQ1VNVUxBVElWRV9MRU5HVEhfXSA9ICRjdW11bGF0aXZlX2xlbmd0aDsKICAgICRpdGVtLT5bX1RPS0VOX0xFTkdUSF9dICAgICAgPSAkdG9rZW5fbGVuZ3RoOwoKICAgICMgRm9yIHJlZmVyZW5jZSwgaGVyZSBpcyBob3cgdG8gZ2V0IHRoZSBwYXJlbnQgc2VxdWVuY2UgbnVtYmVyLgogICAgIyBUaGlzIGlzIG5vdCB1c2VkIGJlY2F1c2UgaXQgaXMgc2xvd2VyIHRoYW4gZmluZGluZyBpdCBvbiB0aGUgZmx5CiAgICAjIGluIHN1YiBwYXJlbnRfc2Vxbm9fYnlfSzoKCiAgICAjIG15ICRzZXFub19wYXJlbnQgPQogICAgIyAgICAgJHR5cGVfc2VxdWVuY2UgJiYgJGlzX29wZW5pbmdfdG9rZW57JHRva2VufQogICAgIyAgID8gJHNlcW5vX3N0YWNreyAkZGVwdGhfbmV4dCAtIDIgfQogICAgIyAgIDogJHNlcW5vX3N0YWNreyAkZGVwdGhfbmV4dCAtIDEgfTsKICAgICMgbXkgJEtLID0gQHskckxMX25ld307CiAgICAjICRyc2Vxbm9fb2ZfcGFyZW50X2J5X0stPnskS0t9ID0gJHNlcW5vX3BhcmVudDsKCiAgICAjIGFuZCBmaW5hbGx5LCBhZGQgdGhpcyBpdGVtIHRvIHRoZSBuZXcgYXJyYXkKICAgIHB1c2ggQHskckxMX25ld30sICRpdGVtOwogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgc3RvcmVfdG9rZW4KCnN1YiBhZGRfcGhhbnRvbV9zZW1pY29sb24gewoKICAgIG15ICggJHNlbGYsICRLSyApID0gQF87CgogICAgIyBUaGUgdG9rZW4gYXQgb2xkIGluZGV4ICRLSyBpcyBhIGNsb3NpbmcgYmxvY2sgYnJhY2UsIGFuZCBub3QgcHJlY2VkZWQKICAgICMgYnkgYSBzZW1pY29sb24uIEJlZm9yZSB3ZSBwdXNoIGl0IG9udG8gdGhlIG5ldyB0b2tlbiBsaXN0LCB3ZSBtYXkKICAgICMgd2FudCB0byBhZGQgYSBwaGFudG9tIHNlbWljb2xvbiB3aGljaCBjYW4gYmUgYWN0aXZhdGVkIGlmIHRoZSB0aGUKICAgICMgYmxvY2sgaXMgYnJva2VuIG9uIG91dHB1dC4KCiAgICAjIFdlIGFyZSBvbmx5IGFkZGluZyBzZW1pY29sb25zIGZvciBjZXJ0YWluIGJsb2NrIHR5cGVzCiAgICBteSAkdHlwZV9zZXF1ZW5jZSA9ICRyTEwtPlskS0tdLT5bX1RZUEVfU0VRVUVOQ0VfXTsKICAgIHJldHVybiB1bmxlc3MgKCR0eXBlX3NlcXVlbmNlKTsKICAgIG15ICRibG9ja190eXBlID0gJHJibG9ja190eXBlX29mX3NlcW5vLT57JHR5cGVfc2VxdWVuY2V9OwogICAgcmV0dXJuIHVubGVzcyAoJGJsb2NrX3R5cGUpOwogICAgcmV0dXJuCiAgICAgIHVubGVzcyAoICRva190b19hZGRfc2VtaWNvbG9uX2Zvcl9ibG9ja190eXBleyRibG9ja190eXBlfQogICAgICAgIHx8ICRibG9ja190eXBlID1+IC9eKHN1YnxwYWNrYWdlKS8KICAgICAgICB8fCAkYmxvY2tfdHlwZSA9fiAvXlx3K1w6JC8gKTsKCiAgICAjIEZpbmQgdGhlIG1vc3QgcmVjZW50IHRva2VuIGluIHRoZSBuZXcgdG9rZW4gbGlzdAogICAgbXkgJEtwID0gJHNlbGYtPktfcHJldmlvdXNfbm9uYmxhbmsoIHVuZGVmLCAkckxMX25ldyApOwogICAgcmV0dXJuIHVubGVzcyAoIGRlZmluZWQoJEtwKSApOyAgICAjIHNob3VsZG4ndCBoYXBwZW4gZXhjZXB0IGZvciBiYWQgaW5wdXQKCiAgICBteSAkdHlwZV9wICAgICAgICAgID0gJHJMTF9uZXctPlskS3BdLT5bX1RZUEVfXTsKICAgIG15ICR0b2tlbl9wICAgICAgICAgPSAkckxMX25ldy0+WyRLcF0tPltfVE9LRU5fXTsKICAgIG15ICR0eXBlX3NlcXVlbmNlX3AgPSAkckxMX25ldy0+WyRLcF0tPltfVFlQRV9TRVFVRU5DRV9dOwoKICAgICMgRG8gbm90IGFkZCBhIHNlbWljb2xvbiBpZi4uLgogICAgcmV0dXJuCiAgICAgIGlmICgKCiAgICAgICAgIyBpdCB3b3VsZCBmb2xsb3cgYSBjb21tZW50IChhbmQgYmUgaXNvbGF0ZWQpCiAgICAgICAgJHR5cGVfcCBlcSAnIycKCiAgICAgICAgIyBpdCBmb2xsb3dzIGEgY29kZSBibG9jayAoIGJlY2F1c2UgdGhleSBhcmUgbm90IGFsd2F5cyB3YW50ZWQKICAgICAgICAjIHRoZXJlIGFuZCBtYXkgYWRkIGNsdXR0ZXIpCiAgICAgICAgfHwgJHR5cGVfc2VxdWVuY2VfcCAmJiAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8tPnskdHlwZV9zZXF1ZW5jZV9wfQoKICAgICAgICAjIGl0IHdvdWxkIGZvbGxvdyBhIGxhYmVsCiAgICAgICAgfHwgJHR5cGVfcCBlcSAnSicKCiAgICAgICAgIyBpdCB3b3VsZCBiZSBpbnNpZGUgYSAnZm9ybWF0JyBzdGF0ZW1lbnQgKGFuZCBjYXVzZSBzeW50YXggZXJyb3IpCiAgICAgICAgfHwgKCAgICR0eXBlX3AgZXEgJ2snCiAgICAgICAgICAgICYmICR0b2tlbl9wID1+IC9mb3JtYXQvICkKCiAgICAgICk7CgogICAgIyBEbyBub3QgYWRkIGEgc2VtaWNvbG9uIGlmIGl0IHdvdWxkIGltcGVkZSBhIHdlbGQgd2l0aCBhbiBpbW1lZGlhdGVseQogICAgIyBmb2xsb3dpbmcgY2xvc2luZyB0b2tlbi4uLmxpa2UgdGhpcwogICAgIyAgIHsgKCBzb21lIGNvZGUgKSB9CiAgICAjICAgICAgICAgICAgICAgICAgXi0tTm8gc2VtaWNvbG9uIGNhbiBnbyBoZXJlCgogICAgIyBsb29rIGF0IHRoZSBwcmV2aW91cyB0b2tlbi4uLiBub3RlIHVzZSBvZiB0aGUgX05FVyByTEwgYXJyYXkgaGVyZSwKICAgICMgYnV0IHNlcXVlbmNlIG51bWJlcnMgYXJlIGludmFyaWFudC4KICAgIG15ICRzZXFub19pbm5lciA9ICRyTExfbmV3LT5bJEtwXS0+W19UWVBFX1NFUVVFTkNFX107CgogICAgIyBJZiBpdCBpcyBhbHNvIGEgQ0xPU0lORyB0b2tlbiB3ZSBoYXZlIHRvIGxvb2sgY2xvc2VyLi4uCiAgICBpZiAoCiAgICAgICAgICAgJHNlcW5vX2lubmVyCiAgICAgICAgJiYgJGlzX2Nsb3NpbmdfdG9rZW57JHRva2VuX3B9CgogICAgICAgICMgd2Ugb25seSBuZWVkIHRvIGxvb2sgaWYgdGhlcmUgaXMganVzdCBvbmUgaW5uZXIgY29udGFpbmVyLi4KICAgICAgICAmJiBkZWZpbmVkKCAkcmNoaWxkcmVuX29mX3NlcW5vLT57JHR5cGVfc2VxdWVuY2V9ICkKICAgICAgICAmJiBAeyAkcmNoaWxkcmVuX29mX3NlcW5vLT57JHR5cGVfc2VxdWVuY2V9IH0gPT0gMQogICAgICApCiAgICB7CgogICAgICAgICMgR28gYmFjayBhbmQgc2VlIGlmIHRoZSBjb3JyZXNwb25kaW5nIHR3byBPUEVOSU5HIHRva2VucyBhcmUgYWxzbwogICAgICAgICMgdG9nZXRoZXIuICBOb3RlIHRoYXQgd2UgYXJlIHVzaW5nIHRoZSBPTEQgSyBpbmRleGluZyBoZXJlOgogICAgICAgIG15ICRLX291dGVyX29wZW5pbmcgPSAkS19vbGRfb3BlbmluZ19ieV9zZXFub3skdHlwZV9zZXF1ZW5jZX07CiAgICAgICAgaWYgKCBkZWZpbmVkKCRLX291dGVyX29wZW5pbmcpICkgewogICAgICAgICAgICBteSAkS19ueHQgPSAkc2VsZi0+S19uZXh0X25vbmJsYW5rKCRLX291dGVyX29wZW5pbmcpOwogICAgICAgICAgICBpZiAoIGRlZmluZWQoJEtfbnh0KSApIHsKICAgICAgICAgICAgICAgIG15ICRzZXFub19ueHQgPSAkckxMLT5bJEtfbnh0XS0+W19UWVBFX1NFUVVFTkNFX107CgogICAgICAgICAgICAgICAgIyBJcyB0aGUgbmV4dCB0b2tlbiBhZnRlciB0aGUgb3V0ZXIgb3BlbmluZyB0aGUgc2FtZSBhcwogICAgICAgICAgICAgICAgIyBvdXIgaW5uZXIgY2xvc2luZyAoaS5lLiBzYW1lIHNlcXVlbmNlIG51bWJlcik/CiAgICAgICAgICAgICAgICAjIElmIHNvLCBkbyBub3QgaW5zZXJ0IGEgc2VtaWNvbG9uIGhlcmUuCiAgICAgICAgICAgICAgICByZXR1cm4gaWYgKCAkc2Vxbm9fbnh0ICYmICRzZXFub19ueHQgPT0gJHNlcW5vX2lubmVyICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBXZSB3aWxsIGluc2VydCBhbiBlbXB0eSBzZW1pY29sb24gaGVyZSBhcyBhIHBsYWNlaG9sZGVyLiAgTGF0ZXIsIGlmCiAgICAjIGl0IGJlY29tZXMgdGhlIGxhc3QgdG9rZW4gb24gYSBsaW5lLCB3ZSB3aWxsIGJyaW5nIGl0IHRvIGxpZmUuICBUaGUKICAgICMgYWR2YW50YWdlIG9mIGRvaW5nIHRoaXMgaXMgdGhhdCAoMSkgd2UganVzdCBoYXZlIHRvIGNoZWNrIGxpbmUKICAgICMgZW5kaW5ncywgYW5kICgyKSB0aGUgcGhhbnRvbSBzZW1pY29sb24gaGFzIHplcm8gd2lkdGggYW5kIHRoZXJlZm9yZQogICAgIyB3b24ndCBjYXVzZSBuZWVkbGVzcyBicmVha3Mgb2Ygb25lLWxpbmUgYmxvY2tzLgogICAgbXkgJEt0b3AgPSAtMTsKICAgIGlmICggICAkckxMX25ldy0+WyRLdG9wXS0+W19UWVBFX10gZXEgJ2InCiAgICAgICAgJiYgJHdhbnRfbGVmdF9zcGFjZXsnOyd9ID09IFdTX05PICkKICAgIHsKCiAgICAgICAgIyBjb252ZXJ0IHRoZSBibGFuayBpbnRvIGEgc2VtaWNvbG9uLi4KICAgICAgICAjIGJlIGNhcmVmdWw6IHdlIGFyZSB3b3JraW5nIG9uIHRoZSBuZXcgc3RhY2sgdG9wCiAgICAgICAgIyBvbiBhIHRva2VuIHdoaWNoIGhhcyBiZWVuIHN0b3JlZC4KICAgICAgICBteSAkcmNvcHkgPSBjb3B5X3Rva2VuX2FzX3R5cGUoICRyTExfbmV3LT5bJEt0b3BdLCAnYicsIFNQQUNFICk7CgogICAgICAgICMgQ29udmVydCB0aGUgZXhpc3RpbmcgYmxhbmsgdG86CiAgICAgICAgIyAgIGEgcGhhbnRvbSBzZW1pY29sb24gZm9yIG9uZV9saW5lX2Jsb2NrIG9wdGlvbiA9IDAgb3IgMQogICAgICAgICMgICBhIHJlYWwgc2VtaWNvbG9uICAgIGZvciBvbmVfbGluZV9ibG9jayBvcHRpb24gPSAyCiAgICAgICAgbXkgJHRvayAgICAgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgbXkgJGxlbl90b2sgPSAwOwogICAgICAgIGlmICggJHJPcHRzX29uZV9saW5lX2Jsb2NrX3NlbWljb2xvbnMgPT0gMiApIHsKICAgICAgICAgICAgJHRvayAgICAgPSAnOyc7CiAgICAgICAgICAgICRsZW5fdG9rID0gMTsKICAgICAgICB9CgogICAgICAgICRyTExfbmV3LT5bJEt0b3BdLT5bX1RPS0VOX10gICAgICAgID0gJHRvazsKICAgICAgICAkckxMX25ldy0+WyRLdG9wXS0+W19UT0tFTl9MRU5HVEhfXSA9ICRsZW5fdG9rOwogICAgICAgICRyTExfbmV3LT5bJEt0b3BdLT5bX1RZUEVfXSAgICAgICAgID0gJzsnOwoKICAgICAgICAkc2VsZi0+W19ydHlwZV9jb3VudF9ieV9zZXFub19dLT57JHR5cGVfc2VxdWVuY2V9LT57JzsnfSsrOwoKICAgICAgICAjIE5PVEU6IHdlIGFyZSBjaGFuZ2luZyB0aGUgb3V0cHV0IHN0YWNrIHdpdGhvdXQgdXBkYXRpbmcgdmFyaWFibGVzCiAgICAgICAgIyAkbGFzdF9ub25ibGFua19jb2RlX3R5cGUsIGV0Yy4gRnV0dXJlIG5lZWRzIG1pZ2h0IHJlcXVpcmUgdGhhdAogICAgICAgICMgdGhvc2UgdmFyaWFibGVzIGJlIHVwZGF0ZWQgaGVyZS4gIEZvciBub3csIGl0IHNlZW1zIG9rIHRvIHNraXAKICAgICAgICAjIHRoaXMuCgogICAgICAgICMgVGhlbiBzdG9yZSBhIG5ldyBibGFuawogICAgICAgICRzZWxmLT5zdG9yZV90b2tlbigkcmNvcHkpOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgUGF0Y2ggZm9yIGlzc3VlIGMwNzg6IGtlZXAgbGluZSBpbmRleGVzIGluIG9yZGVyLiAgSWYgdGhlIHRvcAogICAgICAgICMgdG9rZW4gaXMgYSBzcGFjZSB0aGF0IHdlIGFyZSBrZWVwaW5nIChkdWUgdG8gJy13bHM9JzsnKSB0aGVuCiAgICAgICAgIyB3ZSBoYXZlIHRvIGNoZWNrIHRoYXQgb2xkIGxpbmUgaW5kZXhlcyBzdGF5IGluIG9yZGVyLgogICAgICAgICMgSW4gdmVyeSByYXJlCiAgICAgICAgIyBpbnN0YW5jZXMgaW4gd2hpY2ggc2lkZSBjb21tZW50cyBoYXZlIGJlZW4gZGVsZXRlZCBhbmQgY29udmVydGVkCiAgICAgICAgIyBpbnRvIGJsYW5rcywgd2UgbWF5IGhhdmUgZmlsdGVyZWQgZG93biBtdWx0aXBsZSBibGFua3MgaW50byBqdXN0CiAgICAgICAgIyBvbmUuIEluIHRoYXQgY2FzZSB0aGUgdG9wIGJsYW5rIG1heSBoYXZlIGEgaGlnaGVyIGxpbmUgbnVtYmVyCiAgICAgICAgIyB0aGFuIHRoZSBwcmV2aW91cyBub25ibGFuayB0b2tlbi4gQWx0aG91Z2ggdGhlIGxpbmUgaW5kZXhlcyBvZgogICAgICAgICMgYmxhbmtzIGFyZSBub3QgcmVhbGx5IHNpZ25pZmljYW50LCB3ZSBuZWVkIHRvIGtlZXAgdGhlbSBpbiBvcmRlcgogICAgICAgICMgaW4gb3JkZXIgdG8gcGFzcyBlcnJvciBjaGVja3MuCiAgICAgICAgaWYgKCAkckxMX25ldy0+WyRLdG9wXS0+W19UWVBFX10gZXEgJ2InICkgewogICAgICAgICAgICBteSAkb2xkX3RvcF9peCA9ICRyTExfbmV3LT5bJEt0b3BdLT5bX0xJTkVfSU5ERVhfXTsKICAgICAgICAgICAgbXkgJG5ld190b3BfaXggPSAkckxMX25ldy0+WyRLcF0tPltfTElORV9JTkRFWF9dOwogICAgICAgICAgICBpZiAoICRuZXdfdG9wX2l4IDwgJG9sZF90b3BfaXggKSB7CiAgICAgICAgICAgICAgICAkckxMX25ldy0+WyRLdG9wXS0+W19MSU5FX0lOREVYX10gPSAkbmV3X3RvcF9peDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbXkgJHJjb3B5ID0gY29weV90b2tlbl9hc190eXBlKCAkckxMX25ldy0+WyRLcF0sICc7JywgRU1QVFlfU1RSSU5HICk7CiAgICAgICAgJHNlbGYtPnN0b3JlX3Rva2VuKCRyY29weSk7CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBhZGRfcGhhbnRvbV9zZW1pY29sb24KCnN1YiBkZWxheV90cmFpbGluZ19jb21tYV9vcCB7CgogICAgbXkgKCAkc2VsZiwgJGlmX2FkZCwgJHN0YWJsZV9mbGFnICkgPSBAXzsKCiAgICAjIEdpdmVuOgogICAgIyAgJGlmX2FkZCA9IHRydWUgZm9yIGFkZCBjb21tYSBvcGVyYXRpb24sIGZhbHNlIGZvciBkZWxldGUKICAgICMgICRzdGFibGVfZmxhZyA9IHRydWUgaWYgLWJ0Y3Qgc2V0dGluZyBtYWtlcyB0aGlzIHN0YWJsZQoKICAgICMgUmV0dXJuczoKICAgICMgICB0cnVlIGlmIGEgdHJhaWxpbmcgY29tbWEgb3BlcmF0aW9uIHNob3VsZCBiZSBza2lwcGVkCiAgICAjICAgZmFsc2Ugb3RoZXJ3aXNlCgogICAgIyBUaGlzIGNhbiBwcmV2ZW50IHVud2FudGVkIHBhdGgtZGVwZW5kZW50IGZvcm1hdHRpbmcgd2hlbiBib3RoCiAgICAjIGxpbmUgYnJlYWtzIGFyZSBjaGFuZ2luZyBhbmQgd2UgYXJlIG9ubHkgYWRkaW5nIG9yIGRlbGV0aW5nCiAgICAjIGNvbW1hcywgYnV0IG5vdCBib3RoLiBTZWUgZ2l0ICMxNTYKCiAgICAjIEdldCB1c2VyIHNldHRpbmcsIGlmIGFueQogICAgbXkgJGRlbGF5ID0gJHJPcHRzLT57J2RlbGF5LXRyYWlsaW5nLWNvbW1hLW9wZXJhdGlvbnMnfTsKCiAgICAjIFNldCBkZWZhdWx0IGlmIG5vdCBkZWZpbmVkOgogICAgIyAgLSBpZiBkZWxldGluZzogZGVsYXkgYWx3YXlzIG9rCiAgICAjICAtIGlmIGFkZGluZzogICBkZWxheSBvayB1bmxlc3MgYnJlYWtzIHdpbGwgYmUgc3RhYmlsaXplZCBieSAtYnRjdCBzZXR0aW5nCiAgICAjIEV4cGxhbmF0aW9uOgogICAgIyAgLSBkZWxldGluZyBjYW4gYmUgaXJyZXZlcnNpYmxlLCBzbyBpdCBpcyBzYWZlc3QgdG8gZGVsYXkKICAgICMgIC0gYWRkaW5nLCBhbG9uZyB3aXRoIC1idGN0LCBjYW4gc2F2ZSBvcmlnaW5hbCBsaW5lIGJyZWFrcyB3aGljaCB3b3VsZAogICAgIyAgICBiZSBsb3N0IG90aGVyd2lzZSwgc28gaXQgbWF5IGJlIGJlc3Qgbm90IHRvIGRlbGF5LgogICAgaWYgKCAhZGVmaW5lZCgkZGVsYXkpICkgewogICAgICAgICRkZWxheSA9ICRpZl9hZGQgPyAhJHN0YWJsZV9mbGFnIDogMTsKICAgIH0KCiAgICByZXR1cm4gaWYgKCAhJGRlbGF5ICk7CgogICAgIyBXZSBtdXN0IGJlIGF0IHRoZSBmaXJzdCBvZiBtdWx0aXBsZSBpdGVyYXRpb25zIGZvciBhIGRlbGF5CiAgICBteSAkaXQgICAgICAgICAgICAgPSBQZXJsOjpUaWR5OjpnZXRfaXRlcmF0aW9uX2NvdW50KCk7CiAgICBteSAkbWF4X2l0ZXJhdGlvbnMgPSAkck9wdHMtPnsnaXRlcmF0aW9ucyd9OwogICAgaWYgKCAkaXQgPT0gMSAmJiAkbWF4X2l0ZXJhdGlvbnMgPiAxICkgewoKICAgICAgICAjIGlmIHNvLCBzZXQgZmxhZyB0byByZXF1ZXN0IGFub3RoZXIgaXRlcmF0aW9uCiAgICAgICAgJHNlbGYtPltfd2FudF9zZWNvbmRfaXRlcmF0aW9uX10gPSAxOwogICAgICAgIHJldHVybiAxOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgZGVsYXlfdHJhaWxpbmdfY29tbWFfb3AKCm15ICVpc19iX2lfaDsKCkJFR0lOIHsKICAgIG15IEBxID0gcXcoIGIgaSBoICk7CiAgICBAaXNfYl9pX2h7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKfQoKc3ViIGFkZF90cmFpbGluZ19jb21tYSB7CgogICAgIyBJbXBsZW1lbnQgdGhlIC0tYWRkLXRyYWlsaW5nLWNvbW1hcyBmbGFnIHRvIHRoZSBsaW5lIGVuZCBiZWZvcmUgaW5kZXggJEtLOgoKICAgIG15ICggJHNlbGYsICRLSywgJEtmaXJzdCwgJHRyYWlsaW5nX2NvbW1hX2FkZF9ydWxlICkgPSBAXzsKCiAgICAjIElucHV0IHBhcmFtZXRlcjoKICAgICMgICRLSyA9IGluZGV4IG9mIGNsb3NpbmcgdG9rZW4gaW4gb2xkICgkckxMKSB0b2tlbiBsaXN0CiAgICAjICAgICAgICB3aGljaCBzdGFydHMgYSBuZXcgbGluZSBhbmQgaXMgbm90IHByZWNlZGVkIGJ5IGEgY29tbWEKICAgICMgICRLZmlyc3QgPSBpbmRleCBvZiBmaXJzdCB0b2tlbiBvbiB0aGUgY3VycmVudCBsaW5lIG9mIGlucHV0IHRva2VucwogICAgIyAgJHRyYWlsaW5nX2NvbW1hX2FkZF9ydWxlID0gdXNlciBjb250cm9sIGZsYWdzIGZvciBhZGRpbmcgdHJhaWxuZyBjb21tYXMKCiAgICAjIEZvciBleGFtcGxlLCB3ZSBtaWdodCB3YW50IHRvIGFkZCBhIGNvbW1hIGhlcmU6CgogICAgIyAgIGJsZXNzIHsKICAgICMgICAgICAgICAgIF9uYW1lICAgPT4gJG5hbWUsCiAgICAjICAgICAgICAgICBfcHJpY2UgID0+ICRwcmljZSwKICAgICMgICAgICAgICAgIF9yZWJhdGUgPT4gJHJlYmF0ZSAgPC0tLS0tLSBsb2NhdGlvbiBvZiBwb3NzaWJsZSBiYXJlIGNvbW1hCiAgICAjICAgICAgICAgIH0sICRwa2c7CiAgICAjICAgICAgICAgIF4tLS0tLS0tLS0tLS0tLS0tLS0tY2xvc2luZyB0b2tlbiBhdCBpbmRleCAkS0sgb24gbmV3IGxpbmUKCiAgICAjIERvIG5vdCBhZGQgYSBjb21tYSBpZiBpdCB3b3VsZCBmb2xsb3cgYSBjb21tZW50CiAgICBteSAkS3AgPSAkc2VsZi0+S19wcmV2aW91c19ub25ibGFuayggdW5kZWYsICRyTExfbmV3ICk7CiAgICByZXR1cm4gdW5sZXNzICggZGVmaW5lZCgkS3ApICk7CiAgICBteSAkdHlwZV9wID0gJHJMTF9uZXctPlskS3BdLT5bX1RZUEVfXTsKICAgIHJldHVybiBpZiAoICR0eXBlX3AgZXEgJyMnICk7CgogICAgcmV0dXJuIHVubGVzcyAoJHRyYWlsaW5nX2NvbW1hX2FkZF9ydWxlKTsKICAgIG15ICggJHRyYWlsaW5nX2NvbW1hX3N0eWxlLCAkcGFyZW5fZmxhZywgJHN0YWJsZV9mbGFnICkgPQogICAgICBAeyR0cmFpbGluZ19jb21tYV9hZGRfcnVsZX07CgogICAgIyBzZWUgaWYgdGhlIHVzZXIgd2FudHMgYSB0cmFpbGluZyBjb21tYSBoZXJlCiAgICBteSAkbWF0Y2ggPQogICAgICAkc2VsZi0+bWF0Y2hfdHJhaWxpbmdfY29tbWFfcnVsZSggJEtLLCAkS2ZpcnN0LCAkS3AsCiAgICAgICAgJHRyYWlsaW5nX2NvbW1hX3N0eWxlLCAkcGFyZW5fZmxhZywgJHN0YWJsZV9mbGFnLCAxICk7CgogICAgIyBEbyBub3QgYWRkIGlmIHRoaXMgd291bGQgY2F1c2UgZXhjZXNzIGxpbmUgbGVuZ3RoIGFuZCBwb3NzaWJsZQogICAgIyBpbnN0YWJpbGl0eS4gIFRoaXMgaXMgYjE0NTggZml4IG1ldGhvZCAxLiAgVGhpcyBpcyBtb3JlIGdlbmVyYWwgdGhhbiBmaXgKICAgICMgbWV0aG9kIDIsIGJlbG93LCB3aGljaCBhbHNvIHdvcmtlZC4gIFNvIHRoaXMgaXMgbm90IG5lZWRlZCBmb3IgYjE0NTggYnV0CiAgICAjIHJlLWFjdGl2YXRlZCBhbmQgdXBkYXRlZCBmb3IgYjE0OTUuCiAgICBpZiAoICAgJG1hdGNoCiAgICAgICAgJiYgJHJPcHRzX2RlbGV0ZV90cmFpbGluZ19jb21tYXMKICAgICAgICAmJiAkS0sgPiAwICkKICAgIHsKICAgICAgICBpZiAoICEkc3RhYmxlX2ZsYWcgJiYgJGlzX2JfaV9oeyR0cmFpbGluZ19jb21tYV9zdHlsZX0gKSB7CiAgICAgICAgICAgIG15ICRsaW5lX2luZGV4ICAgICA9ICRyTEwtPlsgJEtLIC0gMSBdLT5bX0xJTkVfSU5ERVhfXTsKICAgICAgICAgICAgbXkgJHJsaW5lcyAgICAgICAgID0gJHNlbGYtPltfcmxpbmVzX107CiAgICAgICAgICAgIG15ICRsaW5lX29mX3Rva2VucyA9ICRybGluZXMtPlskbGluZV9pbmRleF07CiAgICAgICAgICAgIG15ICRpbnB1dF9saW5lICAgICA9ICRsaW5lX29mX3Rva2Vucy0+e19saW5lX3RleHR9OwogICAgICAgICAgICBteSAkbGVuID0KICAgICAgICAgICAgICAgICRsZW5ndGhfZnVuY3Rpb24KICAgICAgICAgICAgICA/ICRsZW5ndGhfZnVuY3Rpb24tPigkaW5wdXRfbGluZSkgLSAxCiAgICAgICAgICAgICAgOiBsZW5ndGgoJGlucHV0X2xpbmUpIC0gMTsKICAgICAgICAgICAgbXkgJG5ld19sZW4gPSAkd2FudF9sZWZ0X3NwYWNleycsJ30gPyAkbGVuICsgMiA6ICRsZW4gKyAxOwogICAgICAgICAgICBteSAkbGV2ZWwgICA9ICRyTEwtPlskS2ZpcnN0XS0+W19MRVZFTF9dOwogICAgICAgICAgICBteSAkbWF4X2xlbiA9ICRtYXhpbXVtX2xpbmVfbGVuZ3RoX2F0X2xldmVsWyRsZXZlbF07CgogICAgICAgICAgICBpZiAoICRuZXdfbGVuID4gJG1heF9sZW4gKSB7CiAgICAgICAgICAgICAgICAkbWF0Y2ggPSAwOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgSWYgc28sIGFuZCBub3QgZGVsYXllZCwgYWRkIGEgY29tbWEKICAgIGlmICggJG1hdGNoICYmICEkc2VsZi0+ZGVsYXlfdHJhaWxpbmdfY29tbWFfb3AoIDEsICRzdGFibGVfZmxhZyApICkgewoKICAgICAgICAjIGFueSBibGFuayBhZnRlciB0aGUgY29tbWEgd2lsbCBiZSBhZGRlZCBiZWZvcmUgdGhlIGNsb3NpbmcgcGFyZW4sCiAgICAgICAgIyBiZWxvdwogICAgICAgICRzZWxmLT5zdG9yZV9uZXdfdG9rZW4oICcsJywgJywnLCAkS3AgKTsKICAgIH0KICAgIHJldHVybjsKCn0gIyMgZW5kIHN1YiBhZGRfdHJhaWxpbmdfY29tbWEKCnN1YiBkZWxldGVfdHJhaWxpbmdfY29tbWEgewoKICAgIG15ICggJHNlbGYsICRLSywgJEtmaXJzdCwgJHRyYWlsaW5nX2NvbW1hX2RlbGV0ZV9ydWxlICkgPSBAXzsKCiAgICAjIEFwcGx5IHRoZSAtLWRlbGV0ZS10cmFpbGluZy1jb21tYXMgZmxhZyB0byB0aGUgY29tbWEgYmVmb3JlIGluZGV4ICRLSwoKICAgICMgSW5wdXQgcGFyYW1ldGVyOgogICAgIyAgJEtLID0gaW5kZXggb2YgYSBjbG9zaW5nIHRva2VuIGluIE9MRCAoJHJMTCkgdG9rZW4gbGlzdAogICAgIyAgICAgICAgd2hpY2ggaXMgcHJlY2VkZWQgYnkgYSBjb21tYSBvbiB0aGUgc2FtZSBsaW5lLgogICAgIyAgJEtmaXJzdCA9IGluZGV4IG9mIGZpcnN0IHRva2VuIG9uIHRoZSBjdXJyZW50IGxpbmUgb2YgaW5wdXQgdG9rZW5zCiAgICAjICAkZGVsZXRlX29wdGlvbiA9IHVzZXIgY29udHJvbCBmbGFnCgogICAgIyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbW1hIHdhcyBkZWxldGVkCgogICAgIyBGb3IgZXhhbXBsZSwgd2UgbWlnaHQgd2FudCB0byBkZWxldGUgdGhpcyBjb21tYToKICAgICMgICAgbXkgQGFzc2V0ID0gKCJGQVNNWCIsICJGQVNHWCIsICJGQVNJWCIsKTsKICAgICMgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Xi0tLS0tLS0tdG9rZW4gYXQgaW5kZXggJEtLCiAgICAjICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXi0tLS0tLWNvbW1hIG9mIGludGVyZXN0CiAgICAjICAgIF4tLS0tLS0tLS0tLS0tdG9rZW4gYXQgJEtmaXJzdAoKICAgICMgVmVyaWZ5IHRoYXQgdGhlIHByZXZpb3VzIHRva2VuIGlzIGEgY29tbWEuICBOb3RlIHRoYXQgd2UgYXJlIHdvcmtpbmcgaW4KICAgICMgdGhlIG5ldyB0b2tlbiBsaXN0ICRyTExfbmV3LgogICAgbXkgJEtwID0gJHNlbGYtPktfcHJldmlvdXNfbm9uYmxhbmsoIHVuZGVmLCAkckxMX25ldyApOwogICAgcmV0dXJuIHVubGVzcyAoIGRlZmluZWQoJEtwKSApOwogICAgaWYgKCAkckxMX25ldy0+WyRLcF0tPltfVFlQRV9dIG5lICcsJyApIHsKCiAgICAgICAgIyB0aGVyZSBtdXN0IGJlIGEgJyMnIGJldHdlZW4gdGhlICcsJyBhbmQgY2xvc2luZyB0b2tlbjsgZ2l2ZSB1cC4KICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBEbyBub3QgZGVsZXRlIGNvbW1hcyB3aGVuIGZvcm1hdHRpbmcgdW5kZXIgc3RyZXNzIHRvIGF2b2lkIGluc3RhYmlsaXR5LgogICAgIyBUaGlzIGZpeGVzIGIxMzg5LCBiMTM5MCwgYjEzOTEsIGIxMzkyLiAgVGhlICRoaWdoX3N0cmVzc19sZXZlbCBoYXMKICAgICMgYmVlbiBmb3VuZCB0byB3b3JrIHdlbGwgZm9yIHRyYWlsaW5nIGNvbW1hcy4KICAgIGlmICggJHJMTF9uZXctPlskS3BdLT5bX0xFVkVMX10gPj0gJGhpZ2hfc3RyZXNzX2xldmVsICkgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICByZXR1cm4gdW5sZXNzICgkdHJhaWxpbmdfY29tbWFfZGVsZXRlX3J1bGUpOwogICAgbXkgKCAkdHJhaWxpbmdfY29tbWFfc3R5bGUsICRwYXJlbl9mbGFnLCAkc3RhYmxlX2ZsYWcgKSA9CiAgICAgIEB7JHRyYWlsaW5nX2NvbW1hX2RlbGV0ZV9ydWxlfTsKCiAgICAjIFNlZSBpZiB0aGUgdXNlciB3YW50cyB0aGlzIHRyYWlsaW5nIGNvbW1hCiAgICBteSAkbWF0Y2ggPQogICAgICAkc2VsZi0+bWF0Y2hfdHJhaWxpbmdfY29tbWFfcnVsZSggJEtLLCAkS2ZpcnN0LCAkS3AsCiAgICAgICAgJHRyYWlsaW5nX2NvbW1hX3N0eWxlLCAkcGFyZW5fZmxhZywgJHN0YWJsZV9mbGFnLCAwICk7CgogICAgIyBQYXRjaDogdGhlIC0tbm9hZGQtd2hpdGVzcGFjZSBmbGFnIGNhbiBjYXVzZSBpbnN0YWJpbGl0eSBpbiBjb21wbGV4CiAgICAjIHN0cnVjdHVyZXMuIEluIHRoaXMgY2FzZSBkbyBub3QgZGVsZXRlIHRoZSBjb21tYS4gRml4ZXMgYjE0MDkuCiAgICBpZiAoICEkbWF0Y2ggJiYgISRyT3B0c19hZGRfd2hpdGVzcGFjZSApIHsKICAgICAgICBteSAkS24gPSAkc2VsZi0+S19uZXh0X25vbmJsYW5rKCRLSyk7CiAgICAgICAgaWYgKCBkZWZpbmVkKCRLbikgKSB7CiAgICAgICAgICAgIG15ICR0eXBlX24gPSAkckxMLT5bJEtuXS0+W19UWVBFX107CiAgICAgICAgICAgIGlmICggJHR5cGVfbiBuZSAnOycgJiYgJHR5cGVfbiBuZSAnIycgKSB7IHJldHVybiB9CiAgICAgICAgfQogICAgfQoKICAgICMgYjE0NTggZml4IG1ldGhvZCAyOiBkbyBub3QgcmVtb3ZlIGEgY29tbWEgYWZ0ZXIgYSBsZWFkaW5nIGJyYWNlIHR5cGUgJ1InCiAgICAjIHNpbmNlIGl0IGlzIHVuZGVyIHN0cmVzcyBhbmQgY291bGQgYmVjb21lIHVuc3RhYmxlLiBUaGlzIGlzIGEgbW9yZQogICAgIyBzcGVjaWZpYyBmaXggYnV0IHRoZSBsb2dpYyBpcyBjbGVhbmVyIHRoYW4gbWV0aG9kIDEuCiAgICBpZiAoICAhJG1hdGNoCiAgICAgICAgJiYgJHJPcHRzX2FkZF90cmFpbGluZ19jb21tYXMKICAgICAgICAmJiAkckxMLT5bJEtmaXJzdF0tPltfVFlQRV9dIGVxICdSJyApCiAgICB7CgogICAgICAgICMgcHJldmlvdXMgb2xkIHRva2VuIHNob3VsZCBiZSB0aGUgY29tbWEuLgogICAgICAgIG15ICRLcF9vbGQgPSAkc2VsZi0+S19wcmV2aW91c19ub25ibGFuayggJEtLLCAkckxMICk7CiAgICAgICAgaWYgKCAgIGRlZmluZWQoJEtwX29sZCkKICAgICAgICAgICAgJiYgJEtwX29sZCA+ICRLZmlyc3QKICAgICAgICAgICAgJiYgJHJMTC0+WyRLcF9vbGRdLT5bX1RZUEVfXSBlcSAnLCcgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgaWYgdGhlIGNvbW1hIGZvbGxvd3MgdGhlIGZpcnN0IHRva2VuIG9mIHRoZSBsaW5lIC4uCiAgICAgICAgICAgIG15ICRLcHBfb2xkID0gJHNlbGYtPktfcHJldmlvdXNfbm9uYmxhbmsoICRLcF9vbGQsICRyTEwgKTsKICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRLcHBfb2xkKSAmJiAkS3BwX29sZCBlcSAkS2ZpcnN0ICkgewoKICAgICAgICAgICAgICAgICMgZG8gbm90IGRlbGV0ZSBpdAogICAgICAgICAgICAgICAgJG1hdGNoID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIElmIG5vIG1hdGNoIGFuZCBub3QgZGVsYXllZAogICAgaWYgKCAhJG1hdGNoICYmICEkc2VsZi0+ZGVsYXlfdHJhaWxpbmdfY29tbWFfb3AoIDAsICRzdGFibGVfZmxhZyApICkgewoKICAgICAgICAjIGRlbGV0ZSBpdAogICAgICAgIHJldHVybiAkc2VsZi0+dW5zdG9yZV9sYXN0X25vbmJsYW5rX3Rva2VuKCcsJyk7CiAgICB9CiAgICByZXR1cm47Cgp9ICMjIGVuZCBzdWIgZGVsZXRlX3RyYWlsaW5nX2NvbW1hCgpzdWIgZGVsZXRlX3dlbGRfaW50ZXJmZXJpbmdfY29tbWEgewoKICAgIG15ICggJHNlbGYsICRLSyApID0gQF87CgogICAgIyBBcHBseSB0aGUgZmxhZyAnLS1kZWxldGUtd2VsZC1pbnRlcmZlcmluZy1jb21tYXMnIHRvIHRoZSBjb21tYQogICAgIyBiZWZvcmUgaW5kZXggJEtLCgogICAgIyBJbnB1dCBwYXJhbWV0ZXI6CiAgICAjICAkS0sgPSBpbmRleCBvZiBhIGNsb3NpbmcgdG9rZW4gaW4gT0xEICgkckxMKSB0b2tlbiBsaXN0CiAgICAjICAgICAgICB3aGljaCBpcyBwcmVjZWRlZCBieSBhIGNvbW1hIG9uIHRoZSBzYW1lIGxpbmUuCgogICAgIyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbW1hIHdhcyBkZWxldGVkCgogICAgIyBGb3IgZXhhbXBsZSwgd2UgbWlnaHQgd2FudCB0byBkZWxldGUgdGhpcyBjb21tYToKCiAgICAjIG15ICR0bXBsID0geyBmb28gPT4ge25vX292ZXJyaWRlID0+IDEsIGRlZmF1bHQgPT4gNDJ9LCB9OwogICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgXi0tLS0tLSRLSwogICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfF4tLS0kS3AKICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEtwcC0tLV4KICAgICMKICAgICMgTm90ZSB0aGF0OgogICAgIyAgaW5kZXggJEtLIGlzIGluIHRoZSBvbGQgJHJMTCBhcnJheSwgYnV0CiAgICAjICBpbmRleGVzICRLcCBhbmQgJEtwcCBhcmUgaW4gdGhlIG5ldyAkckxMX25ldyBhcnJheS4KCiAgICBteSAkdHlwZV9zZXF1ZW5jZSA9ICRyTEwtPlskS0tdLT5bX1RZUEVfU0VRVUVOQ0VfXTsKICAgIHJldHVybiB1bmxlc3MgKCR0eXBlX3NlcXVlbmNlKTsKCiAgICAjIEZpbmQgdGhlIHByZXZpb3VzIHRva2VuIGFuZCB2ZXJpZnkgdGhhdCBpdCBpcyBhIGNvbW1hLgogICAgbXkgJEtwID0gJHNlbGYtPktfcHJldmlvdXNfbm9uYmxhbmsoIHVuZGVmLCAkckxMX25ldyApOwogICAgcmV0dXJuIHVubGVzcyAoIGRlZmluZWQoJEtwKSApOwogICAgaWYgKCAkckxMX25ldy0+WyRLcF0tPltfVFlQRV9dIG5lICcsJyApIHsKCiAgICAgICAgIyBpdCBpcyBub3QgYSBjb21tYSwgc28gZ2l2ZSB1cCAoIGl0IGlzIHByb2JhYmx5IGEgJyMnICkKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBUaGlzIG11c3QgYmUgdGhlIG9ubHkgY29tbWEgaW4gdGhpcyBsaXN0CiAgICBteSAkcnR5cGVfY291bnQgPSAkc2VsZi0+W19ydHlwZV9jb3VudF9ieV9zZXFub19dLT57JHR5cGVfc2VxdWVuY2V9OwogICAgcmV0dXJuCiAgICAgIHVubGVzcyAoIGRlZmluZWQoJHJ0eXBlX2NvdW50KQogICAgICAgICYmICRydHlwZV9jb3VudC0+eycsJ30KICAgICAgICAmJiAkcnR5cGVfY291bnQtPnsnLCd9ID09IDEgKTsKCiAgICAjIEJhY2sgdXAgdG8gdGhlIHByZXZpb3VzIGNsb3NpbmcgdG9rZW4KICAgIG15ICRLcHAgPSAkc2VsZi0+S19wcmV2aW91c19ub25ibGFuayggJEtwLCAkckxMX25ldyApOwogICAgcmV0dXJuIHVubGVzcyAoIGRlZmluZWQoJEtwcCkgKTsKICAgIG15ICRzZXFub19wcCA9ICRyTExfbmV3LT5bJEtwcF0tPltfVFlQRV9TRVFVRU5DRV9dOwogICAgbXkgJHR5cGVfcHAgID0gJHJMTF9uZXctPlskS3BwXS0+W19UWVBFX107CgogICAgIyBUaGUgY29udGFpbmVycyBtdXN0IGJlIG5lc3RpbmcgKGkuZS4sIHNlcXVlbmNlIG51bWJlcnMgbXVzdCBkaWZmZXIgYnkgMSApCiAgICBpZiAoICRzZXFub19wcCAmJiAkaXNfY2xvc2luZ190eXBleyR0eXBlX3BwfSApIHsKICAgICAgICBpZiAoICRzZXFub19wcCA9PSAkdHlwZV9zZXF1ZW5jZSArIDEgKSB7CgogICAgICAgICAgICAjIHJlbW92ZSB0aGUgJywnIGZyb20gdGhlIHRvcCBvZiB0aGUgbmV3IHRva2VuIGxpc3QKICAgICAgICAgICAgcmV0dXJuICRzZWxmLT51bnN0b3JlX2xhc3Rfbm9uYmxhbmtfdG9rZW4oJywnKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm47Cgp9ICMjIGVuZCBzdWIgZGVsZXRlX3dlbGRfaW50ZXJmZXJpbmdfY29tbWEKCnN1YiBhZGRfaW50ZXJicmFja2V0X2Fycm93IHsKICAgIG15ICgkc2VsZikgPSBAXzsKCiAgICAjIEFkZCBhIG5ldyAnLT4nIGFmdGVyIHRoZSBsYXN0IHRva2VuIG9uIHRoZSBzdGFjawogICAgbXkgJEtwID0gJHNlbGYtPktfcHJldmlvdXNfbm9uYmxhbmsoIHVuZGVmLCAkckxMX25ldyApOwogICAgcmV0dXJuIHVubGVzcyAoIGRlZmluZWQoJEtwKSApOwoKICAgICMgdmVyaWZ5IHRoYXQgd2UgYXJlIGFkZGluZyBhZnRlciBhIH0gb3IgXQogICAgbXkgJHR5cGVfcCA9ICRyTExfbmV3LT5bJEtwXS0+W19UWVBFX107CiAgICBpZiAoICR0eXBlX3AgbmUgJ1InICYmICR0eXBlX3AgbmUgJ10nICkgewogICAgICAgIERFVkVMX01PREUgJiYgRmF1bHQoInRyeWluZyB0byBzdG9yZSBuZXcgYXJyb3cgYWZ0ZXIgdHlwZSAkdHlwZV9wIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICRzZWxmLT5zdG9yZV9uZXdfdG9rZW4oICctPicsICctPicsICRLcCApOwogICAgaWYgKCAkd2FudF9yaWdodF9zcGFjZXsnLT4nfSA9PSBXU19ZRVMgKSB7ICRzZWxmLT5zdG9yZV90b2tlbigpIH0KCiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBhZGRfaW50ZXJicmFja2V0X2Fycm93CgpzdWIgZGVsZXRlX2ludGVyYnJhY2tldF9hcnJvdyB7CiAgICBteSAoJHNlbGYpID0gQF87CgogICAgIyBEZWxldGUgdGhlIGxhc3Qgbm9uYmxhbmsgdG9rZW4gb24gdGhlIHN0YWNrIHdoaWNoIGlzIGFuICctPicKICAgIG15ICRLcCA9ICRzZWxmLT5LX3ByZXZpb3VzX25vbmJsYW5rKCB1bmRlZiwgJHJMTF9uZXcgKTsKICAgIHJldHVybiB1bmxlc3MgKCBkZWZpbmVkKCRLcCkgKTsKCiAgICAjIHZlcmlmeSB0aGF0IHdlIGFyZSBkZWxldGluZyBhbiAnLT4nCiAgICBteSAkdHlwZV9wID0gJHJMTF9uZXctPlskS3BdLT5bX1RZUEVfXTsKICAgIGlmICggJHR5cGVfcCBuZSAnLT4nICkgewogICAgICAgIERFVkVMX01PREUgJiYgRmF1bHQoInRyeWluZyB0byBkZWxldGUgYXJyb3cgYnV0IHR5cGUgJHR5cGVfcCIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAkc2VsZi0+dW5zdG9yZV9sYXN0X25vbmJsYW5rX3Rva2VuKCAnLT4nLCAtMSApOwoKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGRlbGV0ZV9pbnRlcmJyYWNrZXRfYXJyb3cKCnN1YiB1bnN0b3JlX2xhc3Rfbm9uYmxhbmtfdG9rZW4gewoKICAgIG15ICggJHNlbGYsICR0eXBlLCAoJHdhbnRfc3BhY2UpICkgPSBAXzsKCiAgICAjIHJlbW92ZSB0aGUgbW9zdCByZWNlbnQgbm9uYmxhbmsgdG9rZW4gZnJvbSB0aGUgbmV3IHRva2VuIGxpc3QKICAgICMgSW5wdXQgcGFyYW1ldGVyOgogICAgIyAgICR0eXBlID0gdHlwZSB0byBiZSByZW1vdmVkIChmb3Igc2FmZXR5IGNoZWNrKQogICAgIyAgICR3YW50X3NwYWNlID0gdGVsbGluZyBpZiBhIHNwYWNlIHNob3VsZCByZW1haW4KICAgICMgICAgICAgICAgICAgICAgIDEgPT4gYWx3YXlzCiAgICAjICAgICAgICAgICAgICAgICAwIG9yIHVuZGVmID0+IG9ubHkgaWYgdGhlcmUgd2FzIG9uZSAodXNlZCBmb3IgJywnKQogICAgIyAgICAgICAgICAgICAgICAtMSA9PiBuZXZlciAodXNlZCBmb3IgJy0+JykKCiAgICAjIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzCiAgICAjICAgICAgICAgZmFsc2UgaWYgZXJyb3IKCiAgICAjIFRoaXMgd2FzIHdyaXR0ZW4gYW5kIGlzIHVzZWQgZm9yIHJlbW92aW5nIGNvbW1hcywgYnV0IG1pZ2h0CiAgICAjIGJlIHVzZWZ1bCBmb3Igb3RoZXIgdG9rZW5zLiBJZiBpdCBpcyBldmVyIHVzZWQgZm9yIG90aGVyIHRva2VucwogICAgIyB0aGVuIHRoZSBpc3N1ZSBvZiB3aGF0IHRvIGRvIGFib3V0IHRoZSBvdGhlciB2YXJpYWJsZXMsIHN1Y2gKICAgICMgYXMgdG9rZW4gY291bnRzIGFuZCB0aGUgJyRsYXN0Li4uJyB2YXJzIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQuCgogICAgIyBTYWZldHkgY2hlY2ssIHNob3VsZG4ndCBoYXBwZW4KICAgIGlmICggQHskckxMX25ld30gPCAzICkgewogICAgICAgIERFVkVMX01PREUgJiYgRmF1bHQoIm5vdCBlbm91Z2ggdG9rZW5zIG9uIHN0YWNrIHRvIHJlbW92ZSAnJHR5cGUnXG4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCAhZGVmaW5lZCgkd2FudF9zcGFjZSkgKSB7ICR3YW50X3NwYWNlID0gMCB9CgogICAgbXkgKCAkcmNvbW1hLCAkcmJsYW5rICk7CgogICAgIyBOb3RlOiBvcmlnaW5hbGx5IGp1c3QgZm9yICcsJyBidXQgbm93IGFsc28gZm9yICctPicKCiAgICAjIGNhc2UgMTogcG9wIGNvbW1hIGZyb20gdG9wIG9mIHN0YWNrCiAgICBpZiAoICRyTExfbmV3LT5bLTFdLT5bX1RZUEVfXSBlcSAkdHlwZSApIHsKICAgICAgICAkcmNvbW1hID0gcG9wIEB7JHJMTF9uZXd9OwogICAgfQoKICAgICMgY2FzZSAyOiBwb3AgYmxhbmsgYW5kIHRoZW4gY29tbWEgZnJvbSB0b3Agb2Ygc3RhY2sKICAgIGVsc2lmICgkckxMX25ldy0+Wy0xXS0+W19UWVBFX10gZXEgJ2InCiAgICAgICAgJiYgJHJMTF9uZXctPlstMl0tPltfVFlQRV9dIGVxICR0eXBlICkKICAgIHsKICAgICAgICAkcmJsYW5rID0gcG9wIEB7JHJMTF9uZXd9OwogICAgICAgICRyY29tbWEgPSBwb3AgQHskckxMX25ld307CiAgICB9CgogICAgIyBjYXNlIDM6IGVycm9yLCBzaG91bGRuJ3QgaGFwcGVuIHVubGVzcyBiYWQgY2FsbAogICAgZWxzZSB7CiAgICAgICAgREVWRUxfTU9ERSAmJiBGYXVsdCgiQ291bGQgbm90IGZpbmQgdG9rZW4gdHlwZSAnJHR5cGUnIHRvIHJlbW92ZVxuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgQSBub3RlIG9uIHVwZGF0aW5nIHZhcnMgc2V0IGJ5IHN1YiBzdG9yZV90b2tlbiBmb3IgdGhpcyBjb21tYTogSWYgd2UKICAgICMgcmVkdWNlIHRoZSBjb21tYSBjb3VudCBieSAxIHRoZW4gd2UgYWxzbyBoYXZlIHRvIGNoYW5nZSB0aGUgdmFyaWFibGUKICAgICMgJGxhc3Rfbm9uYmxhbmtfY29kZV90eXBlIHRvIGJlICRsYXN0X2xhc3Rfbm9uYmxhbmtfY29kZV90eXBlIGJlY2F1c2UKICAgICMgb3RoZXJ3aXNlIHN1YiBzdG9yZV90b2tlbiBpcyBnb2luZyB0byBBTFNPIHJlZHVjZSB0aGUgY29tbWEgY291bnQuCiAgICAjIEFsdGVybmF0aXZlbHksIHdlIGNhbiBsZWF2ZSB0aGUgY291bnQgYWxvbmUgYW5kIHRoZQogICAgIyAkbGFzdF9ub25ibGFua19jb2RlX3R5cGUgYWxvbmUuIFRoZW4gc3ViIHN0b3JlX3Rva2VuIHdpbGwgcHJvZHVjZQogICAgIyB0aGUgY29ycmVjdCByZXN1bHQuIFRoaXMgaXMgc2ltcGxlciBhbmQgaXMgZG9uZSBoZXJlLgoKICAgICMgcmVtb3ZlIGEgcmVtYWluaW5nIGJsYW5rIGlmIHJlcXVlc3RlZAogICAgaWYgKCAkckxMX25ldy0+Wy0xXS0+W19UWVBFX10gZXEgJ2InICkgewoKICAgICAgICAjIGN1cnJlbnQgbWV0aG9kIGZvciBkZWxldGVkICctPicKICAgICAgICBpZiAoICR3YW50X3NwYWNlID09IC0xICkgewogICAgICAgICAgICBwb3AgQHskckxMX25ld307CiAgICAgICAgfQogICAgfQoKICAgICMgYWRkIGEgYmxhbmsgaWYgcmVxdWVzdGVkCiAgICBlbHNlIHsKICAgICAgICBpZiAoICR3YW50X3NwYWNlID09IDEgKSB7CiAgICAgICAgICAgICRzZWxmLT5zdG9yZV90b2tlbigpOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICEkd2FudF9zcGFjZSApIHsKCiAgICAgICAgICAgICMgYWRkIG9uZSBpZiB0aGVyZSB3YXMgb25lIChjdXJyZW50IG1ldGhvZCBmb3IgY29tbWFzKQogICAgICAgICAgICBpZiAoIGRlZmluZWQoJHJibGFuaykgKSB7CiAgICAgICAgICAgICAgICBteSAkbGVuID0gbGVuZ3RoKCR0eXBlKTsKICAgICAgICAgICAgICAgICRyYmxhbmstPltfQ1VNVUxBVElWRV9MRU5HVEhfXSAtPSAkbGVuOyAgIyBmaXggZm9yIGRlbGV0ZWQgY29tbWEKICAgICAgICAgICAgICAgIHB1c2ggQHskckxMX25ld30sICRyYmxhbms7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICMgd2FudF9zcGFjZT0tMSBzbyBkbyBub3QgYWRkIGEgYmxhbmsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0gIyMgZW5kIHN1YiB1bnN0b3JlX2xhc3Rfbm9uYmxhbmtfdG9rZW4KCnN1YiBpc19saXN0X2Fzc2lnbm1lbnQgewogICAgbXkgKCAkc2VsZiwgJEtfb3BlbmluZyApID0gQF87CgogICAgIyBHaXZlbjoKICAgICMgICAkS19vcGVuaW5nID0gaW5kZXggaW4gJHJMTF9uZXcgb2YgYW4gb3BlbmluZyBwYXJlbgogICAgIyBSZXR1cm46CiAgICAjICAgdHJ1ZSBpZiB0aGlzIGlzIGEgbGlzdCBhc3NpZ25tZW50IG9mIHRoZSBmb3JtICdAeHh4ID0gKCcKICAgICMgICBmYWxzZSBvdGhlcndpc2UKCiAgICByZXR1cm4gdW5sZXNzIGRlZmluZWQoJEtfb3BlbmluZyk7CiAgICBteSAkS20gPSAkc2VsZi0+S19wcmV2aW91c19ub25ibGFuayggJEtfb3BlbmluZywgJHJMTF9uZXcgKTsKICAgIHJldHVybiB1bmxlc3MgZGVmaW5lZCgkS20pOwogICAgbXkgJHR5cGVfbSA9ICRyTExfbmV3LT5bJEttXS0+W19UWVBFX107CgogICAgIyBMb29rIGZvciBsaXN0IGFzc2lnbm1lbnQgbGlrZSAnQGxpc3QgPSAoJyBvciAnQHskcmVmfSA9ICgnCiAgICAjICAgb3IgJyVoYXNoID0gKCcKICAgIGlmICggJHR5cGVfbSBlcSAnPScgKSB7CiAgICAgICAgbXkgJHRva2VuX20gPSAkckxMX25ldy0+WyRLbV0tPltfVE9LRU5fXTsKICAgICAgICAkS20gPSAkc2VsZi0+S19wcmV2aW91c19ub25ibGFuayggJEttLCAkckxMX25ldyApOwogICAgICAgIHJldHVybiB1bmxlc3MgZGVmaW5lZCgkS20pOwogICAgICAgICR0eXBlX20gID0gJHJMTF9uZXctPlskS21dLT5bX1RZUEVfXTsKICAgICAgICAkdG9rZW5fbSA9ICRyTExfbmV3LT5bJEttXS0+W19UT0tFTl9dOwoKICAgICAgICAjIGJhY2t1cCBwYXN0IGEgYnJhY2VkIGl0ZW0KICAgICAgICBpZiAoICR0b2tlbl9tIGVxICd9JyApIHsKICAgICAgICAgICAgbXkgJHNlcW5vX20gPSAkckxMX25ldy0+WyRLbV0tPltfVFlQRV9TRVFVRU5DRV9dOwogICAgICAgICAgICByZXR1cm4gdW5sZXNzICgkc2Vxbm9fbSk7CiAgICAgICAgICAgIG15ICRLX29wZW5pbmdfbSA9ICRzZWxmLT5bX0tfb3BlbmluZ19jb250YWluZXJfXS0+eyRzZXFub19tfTsKICAgICAgICAgICAgcmV0dXJuIHVubGVzcyBkZWZpbmVkKCRLX29wZW5pbmdfbSk7CiAgICAgICAgICAgICRLbSA9ICRzZWxmLT5LX3ByZXZpb3VzX25vbmJsYW5rKCAkS19vcGVuaW5nX20sICRyTExfbmV3ICk7CiAgICAgICAgICAgIHJldHVybiB1bmxlc3MgZGVmaW5lZCgkS20pOwogICAgICAgICAgICAkdHlwZV9tICA9ICRyTExfbmV3LT5bJEttXS0+W19UWVBFX107CiAgICAgICAgICAgICR0b2tlbl9tID0gJHJMTF9uZXctPlskS21dLT5bX1RPS0VOX107CiAgICAgICAgfQoKICAgICAgICBpZiAoICR0eXBlX20gZXEgJ2knIHx8ICR0eXBlX20gZXEgJ3QnICkgewogICAgICAgICAgICBteSAkc2lnaWwgPSBzdWJzdHIoICR0b2tlbl9tLCAwLCAxICk7CiAgICAgICAgICAgIGlmICggJHNpZ2lsIGVxICdAJyApIHsKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgaXNfbGlzdF9hc3NpZ25tZW50CgpteSAlaXNfbm90X2xpc3RfcGFyZW47CgpCRUdJTiB7CiAgICAjIyB0cmFpbGluZyBjb21tYSBsb2dpYyBpZ25vcmVzIG9wZW5pbmcgcGFyZW5zIHByZWNlZGVkIGJ5IHRoZXNlIHRva2VucwogICAgbXkgQHEgPSBxdyMgaWYgZWxzaWYgdW5sZXNzIHdoaWxlIGFuZCBvciBlcnIgbm90ICYmIHwgfHwgPyA6ICEgLiAjOwogICAgQGlzX25vdF9saXN0X3BhcmVue0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7Cn0KCnN1YiBtYXRjaF90cmFpbGluZ19jb21tYV9ydWxlIHsKCiAgICBteSAoICRzZWxmLCAkS0ssICRLZmlyc3QsICRLcCwgJHRyYWlsaW5nX2NvbW1hX3N0eWxlLCAkcGFyZW5fZmxhZywKICAgICAgICAkc3RhYmxlX2ZsYWcsICRpZl9hZGQgKQogICAgICA9IEBfOwoKICAgICMgRGVjaWRlIGlmIGEgdHJhaWxpbmcgY29tbWEgcnVsZSBpcyBtYXRjaGVkLgoKICAgICMgSW5wdXQgcGFyYW1ldGVyOgogICAgIyAgJEtLID0gaW5kZXggb2YgY2xvc2luZyB0b2tlbiBpbiBvbGQgKCRyTEwpIHRva2VuIGxpc3Qgd2hpY2ggZm9sbG93cwogICAgIyAgICB0aGUgbG9jYXRpb24gb2YgYSBwb3NzaWJsZSB0cmFpbGluZyBjb21tYS4gU2VlIGRpYWdyYW0gYmVsb3cuCiAgICAjICAkS2ZpcnN0ID0gKG9sZCkgaW5kZXggb2YgZmlyc3QgdG9rZW4gb24gdGhlIGN1cnJlbnQgbGluZSBvZiBpbnB1dCB0b2tlbnMKICAgICMgICRLcCA9IGluZGV4IG9mIHByZXZpb3VzIG5vbmJsYW5rIHRva2VuIGluIG5ldyAoJHJMTF9uZXcpIGFycmF5CiAgICAjICAkdHJhaWxpbmdfY29tbWFfcnVsZSA9IHBhY2tlZCB1c2VyIGNvbnRyb2wgZmxhZ3MKICAgICMgICRpZl9hZGQgPSB0cnVlIGlmIGFkZGluZyBjb21tYSwgZmFsc2UgaWYgZGVsZXRpbmcgY29tbWEKCiAgICAjIFJldHVybnM6CiAgICAjICAgZmFsc2UgICAgaWYgbm8gbWF0Y2gKICAgICMgICB0cnVlICAgICBpZiBtYXRjaAogICAgIyAgISRpZl9hZGQgIHRvIGtlZXAgdGhlIGN1cnJlbnQgc3RhdGUgdW5jaGFuZ2VkCgogICAgIyBGb3IgZXhhbXBsZSwgd2UgbWlnaHQgYmUgY2hlY2tpbmcgZm9yIGFkZGl0aW9uIG9mIGEgY29tbWEgaGVyZToKCiAgICAjICAgYmxlc3MgewogICAgIyAgICAgICAgICAgX25hbWUgICA9PiAkbmFtZSwKICAgICMgICAgICAgICAgIF9wcmljZSAgPT4gJHByaWNlLAogICAgIyAgICAgICAgICAgX3JlYmF0ZSA9PiAkcmViYXRlICA8LS0tLS0tIGxvY2F0aW9uIG9mIHBvc3NpYmxlIHRyYWlsaW5nIGNvbW1hCiAgICAjICAgICAgICAgIH0sICRwa2c7CiAgICAjICAgICAgICAgIF4tLS0tLS0tLS0tLS0tLS0tLS0tY2xvc2luZyB0b2tlbiBhdCBpbmRleCAkS0sKCiAgICAjIExpc3Qgb2YgJHRyYWlsaW5nX2NvbW1hX3N0eWxlIHZhbHVlczoKICAgICMgICB1bmRlZiAgc3RhYmxlOiBkbyBub3QgY2hhbmdlCiAgICAjICAgJzEnIG9yICcqJyA6IGV2ZXJ5IGxpc3Qgc2hvdWxkIGhhdmUgYSB0cmFpbGluZyBjb21tYQogICAgIyAgICdtJyBhIG11bHRpLWxpbmUgbGlzdCBzaG91bGQgaGF2ZSBhIHRyYWlsaW5nIGNvbW1hcwogICAgIyAgICdiJyB0cmFpbGluZyBjb21tYXMgc2hvdWxkIGJlICdiYXJlJyAoY29tbWEgZm9sbG93ZWQgYnkgbmV3bGluZSkKICAgICMgICAnaScgc2FtZSBhcyBzPWggYnV0IGFsc28gaW5jbHVkZSBhbnkgbGlzdCB3aXRoIG5vIG1vcmUgdGhhbiBhYm91dCBvbmUKICAgICMgICAgICAgY29tbWEgcGVyIGxpbmUKICAgICMgICAnaCcgbGlzdHMgb2Yga2V5PT52YWx1ZSBwYWlycyB3aXRoIGEgYmFyZSB0cmFpbGluZyBjb21tYQogICAgIyAgICcwJyA6IG5vIGxpc3Qgc2hvdWxkIGhhdmUgYSB0cmFpbGluZyBjb21tYQogICAgIyAgICcgJyBvciAtd3RjIG5vdCBkZWZpbmVkIDogbGVhdmUgdHJhaWxpbmcgY29tbWFzIHVuY2hhbmdlZCBbREVGQVVMVF0uCgogICAgIyBOb3RlIHRoZSBoaWVyYXJjaHk6CiAgICAjICcxJyBpbmNsdWRlcyBhbGwgJ20nIGluY2x1ZGVzIGFsbCAnYicgaW5jbHVkZXMgYWxsICdpJyBpbmNsdWRlcyBhbGwgJ2gnCgogICAgIyBOb3RlOiBhbiBpbnRlcmVzdGluZyBnZW5lcmFsaXphdGlvbiB3b3VsZCBiZSB0byBsZXQgYW4gdXBwZXIgY2FzZQogICAgIyBsZXR0ZXIgZGVub3RlIHRoZSBuZWdhdGlvbiBvZiBzdHlsZXMgJ20nLCAnYicsICdoJywgJ2knLiBUaGlzIG1pZ2h0CiAgICAjIGJlIHVzZWZ1bCBmb3IgdW5kb2luZyBvcGVyYXRpb25zLiBJdCB3b3VsZCBiZSBpbXBsZW1lbnRlZCBhcyBhIHdyYXBwZXIKICAgICMgYXJvdW5kIHRoaXMgcm91dGluZS4KCiAgICAjIFJldHVybiAhJGlmX2FkZCB0byBrZWVwIHRoZSBjdXJyZW50IHN0YXRlIHVuY2hhbmdlZAogICAgbXkgJG5vX2NoYW5nZSA9ICEkaWZfYWRkOwoKICAgICMgSWYgbm8gc3R5bGUgZGVmaW5lZCA6IGRvIG5vdCBhZGQgb3IgZGVsZXRlCiAgICBpZiAoICFkZWZpbmVkKCR0cmFpbGluZ19jb21tYV9zdHlsZSkgKSB7IHJldHVybiAkbm9fY2hhbmdlIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBTZXQgc29tZSBmbGFncyBkZXNjcmliaW5nIHRoaXMgbG9jYXRpb24KICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBteSAkdHlwZV9zZXF1ZW5jZSA9ICRyTEwtPlskS0tdLT5bX1RZUEVfU0VRVUVOQ0VfXTsKICAgIHJldHVybiAkbm9fY2hhbmdlIHVubGVzcyAoJHR5cGVfc2VxdWVuY2UpOwogICAgbXkgJGNsb3NpbmdfdG9rZW4gPSAkckxMLT5bJEtLXS0+W19UT0tFTl9dOwoKICAgICMgZmFjdG9ycyB3aGljaCBmb3JjZSBzdGFiaWxpdHkKICAgIG15ICRpc19wZXJtYW5lbnRseV9icm9rZW4gPQogICAgICAkc2VsZi0+W19yaXNfcGVybWFuZW50bHlfYnJva2VuX10tPnskdHlwZV9zZXF1ZW5jZX07CiAgICAkaXNfcGVybWFuZW50bHlfYnJva2VuIHx8PSAkck9wdHNfYnJlYWtfYXRfb2xkX2NvbW1hX2JyZWFrcG9pbnRzCiAgICAgICYmICEkck9wdHNfaWdub3JlX29sZF9icmVha3BvaW50czsKICAgICRpc19wZXJtYW5lbnRseV9icm9rZW4gfHw9ICRzdGFibGVfZmxhZzsKCiAgICBteSAkS19vcGVuaW5nID0gJHNlbGYtPltfS19vcGVuaW5nX2NvbnRhaW5lcl9dLT57JHR5cGVfc2VxdWVuY2V9OwogICAgcmV0dXJuICRub19jaGFuZ2UgaWYgKCAhZGVmaW5lZCgkS19vcGVuaW5nKSApOwogICAgbXkgJGlsaW5lX2ZpcnN0X2NvbW1hID0KICAgICAgJHNlbGYtPltfcmZpcnN0X2NvbW1hX2xpbmVfaW5kZXhfXS0+eyR0eXBlX3NlcXVlbmNlfTsKICAgIG15ICRpbGluZV9sYXN0X2NvbW1hID0gJHJMTF9uZXctPlskS3BdLT5bX0xJTkVfSU5ERVhfXTsKICAgIG15ICRydHlwZV9jb3VudCAgICAgID0gJHNlbGYtPltfcnR5cGVfY291bnRfYnlfc2Vxbm9fXS0+eyR0eXBlX3NlcXVlbmNlfTsKICAgIG15ICRjb21tYV9jb3VudCAgICAgID0gMDsKICAgIG15ICRmYXRfY29tbWFfY291bnQgID0gMDsKICAgIG15ICRoYXNfaW5uZXJfbXVsdGlsaW5lX3N0cnVjdHVyZTsKICAgIG15ICRoYXNfaW5uZXJfbXVsdGlsaW5lX2NvbW1hczsKCiAgICAjIGlmIG91dGVyIGNvbnRhaW5lciBpcyBwYXJlbiwgcmV0dXJuIGlmIHRoaXMgaXMgbm90IGEgcG9zc2libGUgbGlzdAogICAgIyBGb3IgZXhhbXBsZSwgcmV0dXJuIGZvciBhbiBpZiBwYXJlbiAnaWYgKCcKICAgIG15ICR0b2tlbiA9ICRyTExfbmV3LT5bJEtfb3BlbmluZ10tPltfVE9LRU5fXTsKICAgIG15ICRpc19hcnJvd19jYWxsOwogICAgbXkgJGlzX2hhc2hfdmFsdWU7CiAgICBteSAkaXNfcGFyZW5fbGlzdDsKICAgIGlmICggJHRva2VuIGVxICcoJyApIHsKICAgICAgICAkaXNfcGFyZW5fbGlzdCA9IDE7CiAgICAgICAgbXkgJEttID0gJHNlbGYtPktfcHJldmlvdXNfbm9uYmxhbmsoICRLX29wZW5pbmcsICRyTExfbmV3ICk7CiAgICAgICAgaWYgKCBkZWZpbmVkKCRLbSkgKSB7CiAgICAgICAgICAgIG15ICR0eXBlX20gID0gJHJMTF9uZXctPlskS21dLT5bX1RZUEVfXTsKICAgICAgICAgICAgbXkgJHRva2VuX20gPSAkckxMX25ldy0+WyRLbV0tPltfVE9LRU5fXTsKICAgICAgICAgICAgaWYgKCAkdHlwZV9tIGVxICdrJyApIHsKICAgICAgICAgICAgICAgIGlmICggJGlzX25vdF9saXN0X3BhcmVueyR0b2tlbl9tfSApIHsgcmV0dXJuICRub19jaGFuZ2UgfQogICAgICAgICAgICB9CiAgICAgICAgICAgICRpc19hcnJvd19jYWxsID0gJHR5cGVfbSBlcSAnLT4nOwogICAgICAgICAgICAkaXNfaGFzaF92YWx1ZSA9ICR0eXBlX20gZXEgJz0+JzsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCRydHlwZV9jb3VudCkgewogICAgICAgICRjb21tYV9jb3VudCAgICAgPSAkcnR5cGVfY291bnQtPnsnLCd9OwogICAgICAgICRmYXRfY29tbWFfY291bnQgPSAkcnR5cGVfY291bnQtPnsnPT4nfTsKICAgIH0KCiAgICBteSAkZm9sbG93c19pc29sYXRlZF9jbG9zaW5nX3Rva2VuOwoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIElmIG5vIGV4aXN0aW5nIGNvbW1hcywgc2VlIGlmIHdlIGhhdmUgYW4gaW5uZXIgbmVzdGVkIGNvbnRhaW5lcgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGlmICgKICAgICAgICAgICEkY29tbWFfY291bnQKICAgICAgICAmJiAkaWZfYWRkICAgICMgZm9yIHNhZmV0eSwgc2hvdWxkIGJlIHRydWUgaWYgbm8gY29tbWFzCiAgICAgICAgJiYgJGlzX2Nsb3NpbmdfdHlwZXskbGFzdF9ub25ibGFua19jb2RlX3R5cGV9CiAgICAgICkKICAgIHsKCiAgICAgICAgIyBjaGVjayBmb3IgbmVzdGluZyBjbG9zaW5nIGNvbnRhaW5lcnMKICAgICAgICBteSAkS3BwID0gJHNlbGYtPktfcHJldmlvdXNfbm9uYmxhbmsoIHVuZGVmLCAkckxMX25ldyApOwogICAgICAgIHJldHVybiBpZiAoICFkZWZpbmVkKCRLcHApICk7CiAgICAgICAgbXkgJHNlcW5vX3BwID0gJHJMTF9uZXctPlskS3BwXS0+W19UWVBFX1NFUVVFTkNFX107CiAgICAgICAgbXkgJHR5cGVfcHAgID0gJHJMTF9uZXctPlskS3BwXS0+W19UWVBFX107CgogICAgICAgICMgbmVzdGluZyBjb250YWluZXJzIGhhdmUgc2VxdWVuY2UgbnVtYmVycyB3aGljaCBkaWZmZXIgYnkgMQogICAgICAgIG15ICRpc19uZXN0aW5nX3JpZ2h0ID0KICAgICAgICAgICAgICRzZXFub19wcAogICAgICAgICAgJiYgJGlzX2Nsb3NpbmdfdHlwZXskdHlwZV9wcH0KICAgICAgICAgICYmICggJHNlcW5vX3BwID09ICR0eXBlX3NlcXVlbmNlICsgMSApOwoKICAgICAgICAjIERvIG5vdCBhZGQgYSBjb21tYSB3aGljaCB3aWxsIGJlIGRlbGV0ZWQgYnkKICAgICAgICAjIC0tZGVsZXRlLXdlbGQtaW50ZXJmZXJpbmcgY29tbWFzIChiMTQ3MSkKICAgICAgICBpZiAoICAgJGlzX25lc3RpbmdfcmlnaHQKICAgICAgICAgICAgJiYgJHJPcHRzX2RlbGV0ZV93ZWxkX2ludGVyZmVyaW5nX2NvbW1hcyApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIERvZXMgdGhpcyB0cmFpbGluZyBjb21tYSBmb2xsb3cgYW4gaXNvbGF0ZWQgY2xvc2luZyB0b2tlbj8KICAgICAgICBpZiAoJGlzX25lc3RpbmdfcmlnaHQpIHsKICAgICAgICAgICAgbXkgJGl4X3BwID0gJHJMTF9uZXctPlskS3BwXS0+W19MSU5FX0lOREVYX107CiAgICAgICAgICAgIG15ICRLcHBfbSA9ICRzZWxmLT5LX3ByZXZpb3VzX25vbmJsYW5rKCAkS3BwLCAkckxMX25ldyApOwogICAgICAgICAgICBpZiAoJEtwcF9tKSB7CiAgICAgICAgICAgICAgICBteSAkaXhfcHBfbSA9ICRyTExfbmV3LT5bJEtwcF9tXS0+W19MSU5FX0lOREVYX107CiAgICAgICAgICAgICAgICAkZm9sbG93c19pc29sYXRlZF9jbG9zaW5nX3Rva2VuID0gJGl4X3BwID4gJGl4X3BwX207CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgSWYgbm8gY29tbWEgYW5kIG5vIGZhdCBjb21tYS4uLgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGlmICggISRmYXRfY29tbWFfY291bnQgKSB7CgogICAgICAgICAgICAjIGNvbnRhaW5lcnMgbXVzdCBiZSBuZXN0aW5nIG9uIHRoZSByaWdodAogICAgICAgICAgICByZXR1cm4gdW5sZXNzICgkaXNfbmVzdGluZ19yaWdodCk7CgogICAgICAgICAgICAjIGdpdmUgdXAgaWYgaXQgaXMgYSBjb2RlIGJsb2NrCiAgICAgICAgICAgIGlmICggJHNlbGYtPltfcmJsb2NrX3R5cGVfb2Zfc2Vxbm9fXS0+eyRzZXFub19wcH0gKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaWYgb3V0ZXIgY29udGFpbmVyIGlzIHBhcmVuLCBtdXN0IGJlIHN1YiBjYWxsIG9yIGxpc3QgYXNzaWdubWVudAogICAgICAgICAgICAjIE5vdGUgdGhhdCBfcmlzX2Z1bmN0aW9uX2NhbGxfcGFyZW5fIGRvZXMgbm90IGN1cnJlbnRseSBpbmNsdWRlCiAgICAgICAgICAgICMgY2FsbHMgb2YgdGhlIGZvcm0gJy0+KCcsIHNvIHRoYXQgaGFzIHRvIGJlIGNoZWNrZWQgc2VwYXJhdGVseS4KICAgICAgICAgICAgaWYgKCAgICR0b2tlbiBlcSAnKCcKICAgICAgICAgICAgICAgICYmICEkc2VsZi0+W19yaXNfZnVuY3Rpb25fY2FsbF9wYXJlbl9dLT57JHR5cGVfc2VxdWVuY2V9CiAgICAgICAgICAgICAgICAmJiAhJGlzX2Fycm93X2NhbGwKICAgICAgICAgICAgICAgICYmICEkaXNfaGFzaF92YWx1ZQogICAgICAgICAgICAgICAgJiYgISRzZWxmLT5pc19saXN0X2Fzc2lnbm1lbnQoJEtfb3BlbmluZykgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRLX29wZW5pbmdfcHAgPSAkc2VsZi0+W19LX29wZW5pbmdfY29udGFpbmVyX10tPnskc2Vxbm9fcHB9OwogICAgICAgICAgICByZXR1cm4gdW5sZXNzIGRlZmluZWQoJEtfb3BlbmluZ19wcCk7CiAgICAgICAgICAgIG15ICRpbGluZV9vID0gJHJMTF9uZXctPlskS19vcGVuaW5nX3BwXS0+W19MSU5FX0lOREVYX107CiAgICAgICAgICAgIG15ICRpbGluZV9jID0gJHJMTF9uZXctPlskS3BwXS0+W19MSU5FX0lOREVYX107CgogICAgICAgICAgICBteSAkcnR5cGVfY291bnRfcHAgPSAkc2VsZi0+W19ydHlwZV9jb3VudF9ieV9zZXFub19dLT57JHNlcW5vX3BwfTsKICAgICAgICAgICAgcmV0dXJuIHVubGVzcyAoJHJ0eXBlX2NvdW50X3BwKTsKCiAgICAgICAgICAgICRoYXNfaW5uZXJfbXVsdGlsaW5lX3N0cnVjdHVyZSA9CiAgICAgICAgICAgICAgICAgJGlsaW5lX2MgPiAkaWxpbmVfbwogICAgICAgICAgICAgICYmICggJHJ0eXBlX2NvdW50X3BwLT57JywnfSB8fCAkcnR5cGVfY291bnRfcHAtPnsnPT4nfSApCiAgICAgICAgICAgICAgJiYgISRydHlwZV9jb3VudF9wcC0+eyc7J307CiAgICAgICAgICAgIHJldHVybiB1bmxlc3MgKCRoYXNfaW5uZXJfbXVsdGlsaW5lX3N0cnVjdHVyZSk7CgogICAgICAgICAgICAjIGxvb2sgZm9yIGlubmVyIG11bHRpbGluZSBjb21tYXMKICAgICAgICAgICAgJGlsaW5lX2ZpcnN0X2NvbW1hID0KICAgICAgICAgICAgICAkc2VsZi0+W19yZmlyc3RfY29tbWFfbGluZV9pbmRleF9dLT57JHNlcW5vX3BwfTsKICAgICAgICAgICAgcmV0dXJuIGlmICggIWRlZmluZWQoJGlsaW5lX2ZpcnN0X2NvbW1hKSApOwogICAgICAgICAgICBteSAkaWxpbmVfcHBjID0gJHJMTF9uZXctPlskS3BwXS0+W19MSU5FX0lOREVYX107CiAgICAgICAgICAgIHJldHVybiBpZiAoICRpbGluZV9wcGMgPD0gJGlsaW5lX2ZpcnN0X2NvbW1hICk7CiAgICAgICAgICAgICRoYXNfaW5uZXJfbXVsdGlsaW5lX2NvbW1hcyA9IDE7CgogICAgICAgICAgICAjIE9LLCB3ZSBoYXZlIGFuIGlubmVyIGNvbnRhaW5lciB3aXRoIGNvbW1hcwogICAgICAgIH0KICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgQ2hhcmFjdGVyaXplIHRoZSB0cmFpbGluZyBjb21tYQogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBpZiAoICFkZWZpbmVkKCRpbGluZV9maXJzdF9jb21tYSkgKSB7CgogICAgICAgICMgU2hvdWxkbid0IGhhcHBlbjogaWYgdGhpcyBzdWIgd2FzIGNhbGxlZCB3aXRob3V0IGFueSBjb21tYXMgaW4gdGhpcwogICAgICAgICMgY29udGFpbmVyLCB0aGVuIGVpdGhlciB3ZSBzaG91bGQgaGF2ZSBmb3VuZCBvbmUgaW4gYSBuZXN0ZWQgY29udGFpbmVyCiAgICAgICAgIyBvciBhbHJlYWR5IHJldHVybmVkLgogICAgICAgIGlmIChERVZFTF9NT0RFKSB7CiAgICAgICAgICAgIG15ICR0eXBlX2twID0gJHJMTF9uZXctPlskS3BdLT5bX1RZUEVfXTsKICAgICAgICAgICAgRmF1bHQoCiJhdCBsaW5lICRpbGluZV9sYXN0X2NvbW1hIGJ1dCBsaW5lIG9mIGZpcnN0IGNvbW1hIG5vdCBkZWZpbmVkLCBhdCBLcD0kS3AsIHR5cGU9JHR5cGVfa3BcbiIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgbXVsdGlsaW5lIGNvbW1hczogZmlyc3QgYW5kIGxhc3QgY29tbWFzIG9uIGRpZmZlcmVudCBsaW5lcwogICAgIyBOb3RlIHRoYXQgX3Jpc19icm9rZW5fY29udGFpbmVyXyBhbHNvIHN0b3JlcyB0aGUgbGluZSBkaWZmCiAgICAjIGJ1dCBpdCBpcyBub3QgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UuCiAgICBteSAkbGluZV9kaWZmX2NvbW1hcyA9ICRpbGluZV9sYXN0X2NvbW1hIC0gJGlsaW5lX2ZpcnN0X2NvbW1hOwogICAgbXkgJGhhc19tdWx0aWxpbmVfY29tbWFzID0KICAgICAgJGxpbmVfZGlmZl9jb21tYXMgPiAwIHx8ICRoYXNfaW5uZXJfbXVsdGlsaW5lX2NvbW1hczsKCiAgICAjIE11bHRpbGluZSAoJ20nKTogdGhlIG9wZW5pbmcgYW5kIGNsb3NpbmcgdG9rZW5zIG9uIGRpZmZlcmVudCBsaW5lcwogICAgbXkgJGlsaW5lX28gICAgICA9ICRyTExfbmV3LT5bJEtfb3BlbmluZ10tPltfTElORV9JTkRFWF9dOwogICAgbXkgJGlsaW5lX2MgICAgICA9ICRyTEwtPlskS0tdLT5bX0xJTkVfSU5ERVhfXTsKICAgIG15ICRpc19tdWx0aWxpbmUgPSAkaWxpbmVfYyA+ICRpbGluZV9vOwoKICAgICMgUmVxdWlyZSBhZGRpdGlvbmFsIHN0YWJpbGl0eSBmYWN0b3JzIHdoZW4gYWRkaW5nIGNvbW1hcwogICAgaWYgKCRpZl9hZGQpIHsKCiAgICAgICAgIyBiYXNpYyBzdGFiaWxpdHkgcnVsZXMKICAgICAgICBteSAkaXNfc3RhYmxlID0gKAoKICAgICAgICAgICAgIyBoYXMgY29tbWFzIG5vdCBpbiBwYXJlbnMsIG9yIG11bHRpcGxlIGxpbmVzIGVuZGluZyBpbiBjb21tYXMKICAgICAgICAgICAgJGNvbW1hX2NvdW50CiAgICAgICAgICAgICAgJiYgKCAhJGlzX3BhcmVuX2xpc3QgfHwgJGhhc19tdWx0aWxpbmVfY29tbWFzICkKCiAgICAgICAgICAgICAgIyBvciBjb250YWlucyBhbiBpbm5lciBtdWx0aWxpbmUgc3RydWN0dXJlCiAgICAgICAgICAgICAgfHwgJGhhc19pbm5lcl9tdWx0aWxpbmVfc3RydWN0dXJlCgogICAgICAgICAgICAgICMgb3IgaGFzIG90aGVyIHN0YWJpbGl6aW5nIGZhY3RvcnMsIGxpa2UgY29tbWVudHMgYW5kIGJsYW5rIGxpbmVzCiAgICAgICAgICAgICAgfHwgJGlzX3Blcm1hbmVudGx5X2Jyb2tlbgogICAgICAgICk7CgogICAgICAgICMgc3BlY2lhbCBzdGFiaWxpdHkgcnVsZXMgZm9yIGZhdC1jb21tYXMgLi4uCiAgICAgICAgaWYgKCAhJGlzX3N0YWJsZSAmJiAkZmF0X2NvbW1hX2NvdW50ICkgewoKICAgICAgICAgICAgIyBzdGFibGUgaWYgbm90IGluIHBhcmVuIGxpc3QKICAgICAgICAgICAgJGlzX3N0YWJsZSB8fD0gISRpc19wYXJlbl9saXN0OwoKICAgICAgICAgICAgIyBhIHBhcmVuIGNvbnRhaW5lciBtdXN0IHNwYW4gc2V2ZXJhbCBsaW5lcyAoYjE0ODksIGIxNDkwKQogICAgICAgICAgICAjIGFuZCB0aGUgdHJhaWxpbmcgY29tbWEgbXVzdCBmb2xsb3cgYW4gaXNvbGF0ZWQgY2xvc2luZyB0b2tlbiBpZgogICAgICAgICAgICAjIGp1c3QgMSAnPT4nIChiMTQ5MiBiMTQ5MyBiMTQ5NCkKICAgICAgICAgICAgJGlzX3N0YWJsZSB8fD0gKCAkaWxpbmVfYyAtICRpbGluZV9vID4gMSApCiAgICAgICAgICAgICAgJiYgKCAkZm9sbG93c19pc29sYXRlZF9jbG9zaW5nX3Rva2VuCiAgICAgICAgICAgICAgICB8fCAkZmF0X2NvbW1hX2NvdW50ID4gMSApOwogICAgICAgIH0KCiAgICAgICAgJGlzX211bHRpbGluZSAmJj0gJGlzX3N0YWJsZTsKICAgIH0KCiAgICAjIEJhcmUgJ2InOiBhIG11bHRpbGluZSB3aGVyZSB0aGUgY2xvc2luZyBjb250YWluZXIgdG9rZW4gc3RhcnRzIGEgbmV3IGxpbmU6CiAgICBteSAkaXNfYmFyZV90cmFpbGluZ19jb21tYSA9ICRpc19tdWx0aWxpbmUgJiYgJEtLID09ICRLZmlyc3Q7CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBDaGVjayBmb3IgYSBtYXRjaC4uLgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIG15ICRtYXRjaDsKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyAwIDogZG9lcyBub3QgbWF0Y2ggYW55IGxpc3QKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBpZiAoICR0cmFpbGluZ19jb21tYV9zdHlsZSBlcSAnMCcgKSB7CiAgICAgICAgJG1hdGNoID0gMDsKICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjICcqJyBvciAnMScgOiBtYXRjaGVzIGFueSBsaXN0CiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBlbHNpZiAoICR0cmFpbGluZ19jb21tYV9zdHlsZSBlcSAnKicgfHwgJHRyYWlsaW5nX2NvbW1hX3N0eWxlIGVxICcxJyApIHsKICAgICAgICAkbWF0Y2ggPSAxOwogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyAnbScgbWF0Y2hlcyBhIE11bHRpbGluZSBsaXN0CiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGVsc2lmICggJHRyYWlsaW5nX2NvbW1hX3N0eWxlIGVxICdtJyApIHsKICAgICAgICAkbWF0Y2ggPSAkaXNfbXVsdGlsaW5lOwogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjICdiJyBtYXRjaGVzIGEgQmFyZSB0cmFpbGluZyBjb21tYQogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGVsc2lmICggJHRyYWlsaW5nX2NvbW1hX3N0eWxlIGVxICdiJyApIHsKICAgICAgICAkbWF0Y2ggPSAkaXNfYmFyZV90cmFpbGluZ19jb21tYTsKICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgJ2gnIG1hdGNoZXMgYSBiYXJlIGhhc2ggbGlzdCB3aXRoIGFib3V0IDEgY29tbWEgYW5kIDEgZmF0IGNvbW1hIHBlciBsaW5lLgogICAgIyAnaScgbWF0Y2hlcyBhIGJhcmUgc3RhYmxlIGxpc3Qgd2l0aCBhYm91dCAxIGNvbW1hIHBlciBsaW5lLgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBlbHNpZiAoICR0cmFpbGluZ19jb21tYV9zdHlsZSBlcSAnaCcgfHwgJHRyYWlsaW5nX2NvbW1hX3N0eWxlIGVxICdpJyApIHsKCiAgICAgICAgIyBXZSBjYW4gdHJlYXQgdGhlc2UgdG9nZXRoZXIgYmVjYXVzZSB0aGV5IGFyZSBzaW1pbGFyLgogICAgICAgICMgVGhlIHNldCBvZiAnaScgbWF0Y2hlcyBpbmNsdWRlcyB0aGUgc2V0IG9mICdoJyBtYXRjaGVzLgoKICAgICAgICAjIHRoZSB0cmFpbGluZyBjb21tYSBtdXN0IGJlIGJhcmUgZm9yIGJvdGggJ2gnIGFuZCAnaScKICAgICAgICByZXR1cm4gaWYgKCAhJGlzX2JhcmVfdHJhaWxpbmdfY29tbWEgKTsKCiAgICAgICAgIyBUaGVyZSBtdXN0IGJlIG5vIG1vcmUgdGhhbiBvbmUgY29tbWEgcGVyIGxpbmUgZm9yIGJvdGggJ2gnIGFuZCAnaScKICAgICAgICAjIFRoZSBuZXdfY29tbWFfY291bnQgaGVyZSB3aWxsIGluY2x1ZGUgdGhlIHRyYWlsaW5nIGNvbW1hLgogICAgICAgIG15ICRuZXdfY29tbWFfY291bnQgPSAkY29tbWFfY291bnQ7CiAgICAgICAgJG5ld19jb21tYV9jb3VudCArPSAxIGlmICgkaWZfYWRkKTsKICAgICAgICBteSAkZXhjZXNzX2NvbW1hcyA9ICRuZXdfY29tbWFfY291bnQgLSAkbGluZV9kaWZmX2NvbW1hcyAtIDE7CiAgICAgICAgaWYgKCAkZXhjZXNzX2NvbW1hcyA+IDAgKSB7CgogICAgICAgICAgICAjIEV4Y2VwdGlvbiBmb3IgYSBzcGVjaWFsIGVkZ2UgY2FzZSBmb3Igb3B0aW9uICdpJzogaWYgdGhlIHRyYWlsaW5nCiAgICAgICAgICAgICMgY29tbWEgaXMgZm9sbG93ZWQgYnkgYSBibGFuayBsaW5lIG9yIGNvbW1lbnQsIHRoZW4gaXQgY2Fubm90IGJlCiAgICAgICAgICAgICMgY292ZXJlZC4gIFRoZW4gd2UgY2FuIHNhZmVseSBhY2NlcHQgYSBzbWFsbCBsaXN0IHRvIGF2b2lkCiAgICAgICAgICAgICMgaW5zdGFiaWxpdHkgKGlzc3VlIGIxNDQzKS4KICAgICAgICAgICAgaWYgKCAgICR0cmFpbGluZ19jb21tYV9zdHlsZSBlcSAnaScKICAgICAgICAgICAgICAgICYmICRpbGluZV9jIC0gJHJMTF9uZXctPlskS3BdLT5bX0xJTkVfSU5ERVhfXSA+IDEKICAgICAgICAgICAgICAgICYmICRuZXdfY29tbWFfY291bnQgPD0gMiApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRtYXRjaCA9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgUGF0Y2ggZm9yIGluc3RhYmlsaXR5IGlzc3VlIGIxNDU2OiAtYm9jIGNhbiB0cmljayB0aGlzIHRlc3Q7IHNvCiAgICAgICAgICAgICMgc2tpcCBpdCB3aGVuIGRlbGV0aW5nIGNvbW1hcyB0byBhdm9pZCBwb3NzaWJsZSBpbnN0YWJpbGl0eQogICAgICAgICAgICAjIHdpdGggb3B0aW9uICdoJyBpbiBjb21iaW5hdGlvbiB3aXRoIC1hdGMgLWR0YyAtYm9jOwogICAgICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICAgICAkdHJhaWxpbmdfY29tbWFfc3R5bGUgZXEgJ2gnCgogICAgICAgICAgICAgICAgIyB0aGlzIGlzIGEgZGVsZXRpb24gKGR1ZSB0byAtZHRjKQogICAgICAgICAgICAgICAgJiYgISRpZl9hZGQKCiAgICAgICAgICAgICAgICAjIC1hdGMgaXMgYWxzbyBzZXQKICAgICAgICAgICAgICAgICYmICRyT3B0c19hZGRfdHJhaWxpbmdfY29tbWFzCgogICAgICAgICAgICAgICAgIyAtYm9jIGlzIHNldCBhbmQgYWN0aXZlCiAgICAgICAgICAgICAgICAmJiAkck9wdHNfYnJlYWtfYXRfb2xkX2NvbW1hX2JyZWFrcG9pbnRzCiAgICAgICAgICAgICAgICAmJiAhJHJPcHRzX2lnbm9yZV9vbGRfYnJlYWtwb2ludHMKICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICMgaWdub3JlIHRoaXMgdGVzdAogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgZmF0IGNvbW1hcwogICAgICAgIGlmICgKICAgICAgICAgICAgICAhJG1hdGNoCiAgICAgICAgICAgICYmICRmYXRfY29tbWFfY291bnQKICAgICAgICAgICAgJiYgKAoKICAgICAgICAgICAgICAgICMgLSBhIGxpc3Qgb2Yga2V5PT52YWx1ZSBwYWlycyB3aXRoIGF0IGxlYXN0IDIgZmF0IGNvbW1hcyBpcyBhCiAgICAgICAgICAgICAgICAjIG1hdGNoIGZvciBib3RoICdoJyBhbmQgJ2knCiAgICAgICAgICAgICAgICAkZmF0X2NvbW1hX2NvdW50ID49IDIKCiAgICAgICAgICAgICAgICAjIC0gYW4gaXNvbGF0ZWQgZmF0IGNvbW1hIGlzIGEgbWF0Y2ggZm9yIHR5cGUgJ2gnCiAgICAgICAgICAgICAgICAjICAgYW5kIGFsc28gJ2knIChzZWUgbm90ZSBiZWxvdykKICAgICAgICAgICAgICAgIHx8ICgKICAgICAgICAgICAgICAgICAgICAgICAkZmF0X2NvbW1hX2NvdW50ID09IDEKICAgICAgICAgICAgICAgICAgICAmJiAkbmV3X2NvbW1hX2NvdW50ID09IDEKICAgICAgICAgICAgICAgICAgICAjIyAmJiAkaWZfYWRkICMjIHJlbW92ZWQgdG8gZml4IGIxNDc2CgogICAgICAgICAgICAgICAgICAgICMjIHJlbW92ZWQgc28gdGhhdCAnaScgYW5kICdoJyB3b3JrIHRoZSBzYW1lIGhlcmUKICAgICAgICAgICAgICAgICAgICAjIyAmJiAkdHJhaWxpbmdfY29tbWFfc3R5bGUgZXEgJ2gnCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICkKICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICAjIGJ1dCBjb21tYSBjb3VudCAoaW5jbHVkaW5nIHRyYWlsZXIpIGFuZCBmYXQgY29tbWEgY291bnQgbXVzdAogICAgICAgICAgICAjIGRpZmZlciBieSBieSBubyBtb3JlIHRoYW4gMS4gVGhpcyBhbGxvd3MgZm9yIHNvbWUgc21hbGwKICAgICAgICAgICAgIyB2YXJpYXRpb25zLgogICAgICAgICAgICBteSAkY29tbWFfZGlmZiA9ICRuZXdfY29tbWFfY291bnQgLSAkZmF0X2NvbW1hX2NvdW50OwogICAgICAgICAgICAkbWF0Y2ggPSAoICRjb21tYV9kaWZmID49IC0xICYmICRjb21tYV9kaWZmIDw9IDEgKTsKICAgICAgICB9CgogICAgICAgICMgRm9yICdpJyBvbmx5LCBhIGxpc3QgdGhhdCBjYW4gYmUgc2hvd24gdG8gYmUgc3RhYmxlIGlzIGEgbWF0Y2gKICAgICAgICBpZiAoICEkbWF0Y2ggJiYgJHRyYWlsaW5nX2NvbW1hX3N0eWxlIGVxICdpJyApIHsKICAgICAgICAgICAgJG1hdGNoID0gKAogICAgICAgICAgICAgICAgJGlzX3Blcm1hbmVudGx5X2Jyb2tlbgogICAgICAgICAgICAgICAgICB8fCAoICRyT3B0c19icmVha19hdF9vbGRfY29tbWFfYnJlYWtwb2ludHMKICAgICAgICAgICAgICAgICAgICAmJiAhJHJPcHRzX2lnbm9yZV9vbGRfYnJlYWtwb2ludHMgKQogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBVbnJlY29nbml6ZWQgcGFyYW1ldGVyLiBUaGlzIHNob3VsZCBoYXZlIGJlZW4gY2F1Z2h0IGluIHRoZSBpbnB1dCBjaGVjay4KICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBlbHNlIHsKCiAgICAgICAgREVWRUxfTU9ERSAmJiBGYXVsdCgiVW5yZWNvZ25pemVkIHBhcmFtZXRlciAnJHRyYWlsaW5nX2NvbW1hX3N0eWxlJ1xuIik7CgogICAgICAgICMgZG8gbm90IGFkZCBvciBkZWxldGUKICAgICAgICByZXR1cm4gISRpZl9hZGQ7CiAgICB9CgogICAgIyBOb3cgZG8gYW55IHNwZWNpYWwgcGFyZW4gY2hlY2sKICAgIGlmICggICAkbWF0Y2gKICAgICAgICAmJiAkcGFyZW5fZmxhZwogICAgICAgICYmICRwYXJlbl9mbGFnIG5lICcxJwogICAgICAgICYmICRwYXJlbl9mbGFnIG5lICcqJwogICAgICAgICYmICRjbG9zaW5nX3Rva2VuIGVxICcpJyApCiAgICB7CiAgICAgICAgJG1hdGNoICYmPQogICAgICAgICAgJHNlbGYtPm1hdGNoX3BhcmVuX2NvbnRyb2xfZmxhZyggJHR5cGVfc2VxdWVuY2UsICRwYXJlbl9mbGFnLAogICAgICAgICAgICAkckxMX25ldyApOwogICAgfQoKICAgICMgRml4IGZvciBiMTM3OSwgYjEzODAsIGIxMzgxLCBiMTM4MiwgYjEzODQgcGFydCAxLiBNYXJrIHRyYWlsaW5nIGNvbW1hcwogICAgIyBmb3IgdXNlIGJ5IC12dGMgbG9naWMgdG8gYXZvaWQgaW5zdGFiaWxpdHkgd2hlbiAtZHRjIGFuZCAtYXRjIGFyZSBib3RoCiAgICAjIGFjdGl2ZS4KICAgIGlmICgkbWF0Y2gpIHsKICAgICAgICBpZiAoICRpZl9hZGQgJiYgJHJPcHRzX2RlbGV0ZV90cmFpbGluZ19jb21tYXMKICAgICAgICAgICAgfHwgISRpZl9hZGQgJiYgJHJPcHRzX2FkZF90cmFpbGluZ19jb21tYXMgKQogICAgICAgIHsKICAgICAgICAgICAgJHNlbGYtPltfcmlzX2JhcmVfdHJhaWxpbmdfY29tbWFfYnlfc2Vxbm9fXS0+eyR0eXBlX3NlcXVlbmNlfSA9IDE7CgogICAgICAgICAgICAjIFRoZSBjb21iaW5hdGlvbiBvZiAtYXRjIGFuZCAtZHRjIGFuZCAtY2FiPTMgY2FuIGJlIHVuc3RhYmxlCiAgICAgICAgICAgICMgKGIxMzk0KS4gU28gd2UgZGVhY3RpdmF0ZSAtY2FiPTMgaW4gdGhpcyBjYXNlLgogICAgICAgICAgICAjIEEgdmFsdWUgb2YgJzAnIG9yICc0JyBpcyByZXF1aXJlZCBmb3Igc3RhYmlsaXR5IG9mIGNhc2UgYjE0NTEuCiAgICAgICAgICAgIGlmICggJHJPcHRzX2NvbW1hX2Fycm93X2JyZWFrcG9pbnRzID09IDMgKSB7CiAgICAgICAgICAgICAgICAkc2VsZi0+W19yb3ZlcnJpZGVfY2FiM19dLT57JHR5cGVfc2VxdWVuY2V9ID0gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAkbWF0Y2g7Cn0gIyMgZW5kIHN1YiBtYXRjaF90cmFpbGluZ19jb21tYV9ydWxlCgpzdWIgc3RvcmVfbmV3X3Rva2VuIHsKCiAgICBteSAoICRzZWxmLCAkdHlwZSwgJHRva2VuLCAkS3AgKSA9IEBfOwoKICAgICMgQ3JlYXRlIGFuZCBpbnNlcnQgYSBjb21wbGV0ZWx5IG5ldyB0b2tlbiBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtCiAgICAjIENhbGxlciBtdXN0IGFkZCBzcGFjZSBhZnRlciB0aGlzIHRva2VuIGlmIG5lY2Vzc2FyeQoKICAgICMgSW5wdXQgcGFyYW1ldGVyczoKICAgICMgICR0eXBlICA9IHRoZSB0b2tlbiB0eXBlCiAgICAjICAkdG9rZW4gPSB0aGUgdG9rZW4gdGV4dAogICAgIyAgJEtwICAgID0gaW5kZXggb2YgdGhlIHByZXZpb3VzIHRva2VuIGluIHRoZSBuZXcgbGlzdCwgJHJMTF9uZXcKCiAgICAjIFRoaXMgb3BlcmF0aW9uIGlzIGEgbGl0dGxlIHRyaWNreSBiZWNhdXNlIHdlIGFyZSBjcmVhdGluZyBhIG5ldyB0b2tlbiBhbmQKICAgICMgd2UgaGF2ZSB0byB0YWtlIGNhcmUgdG8gZm9sbG93IHRoZSByZXF1ZXN0ZWQgd2hpdGVzcGFjZSBydWxlcy4KCiAgICBteSAkS3RvcCAgICAgICAgID0gQHskckxMX25ld30gLSAxOwogICAgbXkgJHRvcF9pc19zcGFjZSA9ICRLdG9wID49IDAgJiYgJHJMTF9uZXctPlskS3RvcF0tPltfVFlQRV9dIGVxICdiJzsKICAgIGlmICggJHRvcF9pc19zcGFjZSAmJiAkd2FudF9sZWZ0X3NwYWNleyR0eXBlfSA9PSBXU19OTyApIHsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIE1ldGhvZCAxOiBDb252ZXJ0IHRoZSB0b3AgYmxhbmsgaW50byB0aGUgbmV3IHRva2VuLgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICMgQmUgQ2FyZWZ1bDogd2UgYXJlIHdvcmtpbmcgb24gdGhlIHRvcCBvZiB0aGUgbmV3IHN0YWNrLCBvbiBhIHRva2VuCiAgICAgICAgIyB3aGljaCBoYXMgYmVlbiBzdG9yZWQuCgogICAgICAgICRyTExfbmV3LT5bJEt0b3BdLT5bX1RPS0VOX10gICAgICAgID0gJHRva2VuOwogICAgICAgICRyTExfbmV3LT5bJEt0b3BdLT5bX1RPS0VOX0xFTkdUSF9dID0gbGVuZ3RoKCR0b2tlbik7CiAgICAgICAgJHJMTF9uZXctPlskS3RvcF0tPltfVFlQRV9dICAgICAgICAgPSAkdHlwZTsKCiAgICAgICAgIyBOT1RFOiB3ZSBhcmUgY2hhbmdpbmcgdGhlIG91dHB1dCBzdGFjayB3aXRob3V0IHVwZGF0aW5nIHZhcmlhYmxlcwogICAgICAgICMgJGxhc3Rfbm9uYmxhbmtfY29kZV90eXBlLCBldGMuIEZ1dHVyZSBuZWVkcyBtaWdodCByZXF1aXJlIHRoYXQKICAgICAgICAjIHRob3NlIHZhcmlhYmxlcyBiZSB1cGRhdGVkIGhlcmUuICBGb3Igbm93LCB3ZSBqdXN0IHVwZGF0ZSB0aGUKICAgICAgICAjIHR5cGUgY291bnRzIGFzIG5lY2Vzc2FyeS4KCiAgICAgICAgaWYgKCAkaXNfY291bnRlZF90eXBleyR0eXBlfSApIHsKICAgICAgICAgICAgbXkgJHNlcW5vID0gJHNlcW5vX3N0YWNreyAkZGVwdGhfbmV4dCAtIDEgfTsKICAgICAgICAgICAgaWYgKCRzZXFubykgewogICAgICAgICAgICAgICAgJHNlbGYtPltfcnR5cGVfY291bnRfYnlfc2Vxbm9fXS0+eyRzZXFub30tPnskdHlwZX0rKzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgTWV0aG9kIDI6IFVzZSB0aGUgbm9ybWFsIHN0b3JhZ2UgbWV0aG9kCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgIyBQYXRjaCBmb3IgaXNzdWUgYzA3ODoga2VlcCBsaW5lIGluZGV4ZXMgaW4gb3JkZXIuICBJZiB0aGUgdG9wCiAgICAgICAgIyB0b2tlbiBpcyBhIHNwYWNlIHRoYXQgd2UgYXJlIGtlZXBpbmcgKGR1ZSB0byAnLXdscz0uLi4pIHRoZW4KICAgICAgICAjIHdlIGhhdmUgdG8gY2hlY2sgdGhhdCBvbGQgbGluZSBpbmRleGVzIHN0YXkgaW4gb3JkZXIuCiAgICAgICAgIyBJbiB2ZXJ5IHJhcmUKICAgICAgICAjIGluc3RhbmNlcyBpbiB3aGljaCBzaWRlIGNvbW1lbnRzIGhhdmUgYmVlbiBkZWxldGVkIGFuZCBjb252ZXJ0ZWQKICAgICAgICAjIGludG8gYmxhbmtzLCB3ZSBtYXkgaGF2ZSBmaWx0ZXJlZCBkb3duIG11bHRpcGxlIGJsYW5rcyBpbnRvIGp1c3QKICAgICAgICAjIG9uZS4gSW4gdGhhdCBjYXNlIHRoZSB0b3AgYmxhbmsgbWF5IGhhdmUgYSBoaWdoZXIgbGluZSBudW1iZXIKICAgICAgICAjIHRoYW4gdGhlIHByZXZpb3VzIG5vbmJsYW5rIHRva2VuLiBBbHRob3VnaCB0aGUgbGluZSBpbmRleGVzIG9mCiAgICAgICAgIyBibGFua3MgYXJlIG5vdCByZWFsbHkgc2lnbmlmaWNhbnQsIHdlIG5lZWQgdG8ga2VlcCB0aGVtIGluIG9yZGVyCiAgICAgICAgIyBpbiBvcmRlciB0byBwYXNzIGVycm9yIGNoZWNrcy4KICAgICAgICBpZiAoJHRvcF9pc19zcGFjZSkgewogICAgICAgICAgICBteSAkb2xkX3RvcF9peCA9ICRyTExfbmV3LT5bJEt0b3BdLT5bX0xJTkVfSU5ERVhfXTsKICAgICAgICAgICAgbXkgJG5ld190b3BfaXggPSAkckxMX25ldy0+WyRLcF0tPltfTElORV9JTkRFWF9dOwogICAgICAgICAgICBpZiAoICRuZXdfdG9wX2l4IDwgJG9sZF90b3BfaXggKSB7CiAgICAgICAgICAgICAgICAkckxMX25ldy0+WyRLdG9wXS0+W19MSU5FX0lOREVYX10gPSAkbmV3X3RvcF9peDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKCAkd2FudF9sZWZ0X3NwYWNleyR0eXBlfSA9PSBXU19ZRVMgKSB7CiAgICAgICAgICAgICAgICAkc2VsZi0+c3RvcmVfdG9rZW4oKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbXkgJHJjb3B5ID0gY29weV90b2tlbl9hc190eXBlKCAkckxMX25ldy0+WyRLcF0sICR0eXBlLCAkdG9rZW4gKTsKICAgICAgICAkc2VsZi0+c3RvcmVfdG9rZW4oJHJjb3B5KTsKCiAgICB9CgogICAgJGxhc3RfbGFzdF9ub25ibGFua19jb2RlX3R5cGUgID0gJGxhc3Rfbm9uYmxhbmtfY29kZV90eXBlOwogICAgJGxhc3RfbGFzdF9ub25ibGFua19jb2RlX3Rva2VuID0gJGxhc3Rfbm9uYmxhbmtfY29kZV90b2tlbjsKCiAgICAkbGFzdF9ub25ibGFua19jb2RlX3R5cGUgID0gJHR5cGU7CiAgICAkbGFzdF9ub25ibGFua19jb2RlX3Rva2VuID0gJHRva2VuOwoKICAgICMgVGhpcyBzdWIgaXMgY3VycmVudGx5IGNhbGxlZCB0byBzdG9yZSBub24tYmxvY2sgdHlwZXMgJywnIGFuZCAnLT4nLCBzbzoKICAgICRsYXN0X25vbmJsYW5rX2Jsb2NrX3R5cGUgPSBFTVBUWV9TVFJJTkc7CgogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgc3RvcmVfbmV3X3Rva2VuCgpzdWIgY2hlY2tfUSB7CgogICAgbXkgKCAkc2VsZiwgJEtLLCAkS2ZpcnN0LCAkbGluZV9udW1iZXIgKSA9IEBfOwoKICAgICMgQ2hlY2sgdGhhdCBhIHF1b3RlIGxvb2tzIG9rYXksIGFuZCByZXBvcnQgcG9zc2libGUgcHJvYmxlbXMKICAgICMgdG8gdGhlIGxvZ2ZpbGUuCiAgICAjIEdpdmVuOgogICAgIyAgICRLSyA9IGluZGV4IG9mIHRoZSBxdW90ZSB0b2tlbgogICAgIyAgICRLZmlyc3QgPSBpbmRleCBvZiBmaXJzdCB0b2tlbiBvbiB0aGUgbGluZQogICAgIyAgICRsaW5lX251bWJlciA9IG51bWJlciBvZiB0aGUgbGluZSBpbiB0aGUgaW5wdXQgc3RyZWFtCgogICAgbXkgJHRva2VuID0gJHJMTC0+WyRLS10tPltfVE9LRU5fXTsKICAgIGlmICggJHRva2VuID1+IC9cdC8gKSB7CiAgICAgICAgJHNlbGYtPm5vdGVfZW1iZWRkZWRfdGFiKCRsaW5lX251bWJlcik7CiAgICB9CgogICAgIyBUaGUgcmVtYWluZGVyIG9mIHRoaXMgcm91dGluZSBsb29rcyBmb3Igc29tZXRoaW5nIGxpa2UKICAgICMgICAgICAgICckdmFyID0gcy94eHgveXl5LzsnCiAgICAjIGluIGNhc2UgaXQgc2hvdWxkIGhhdmUgYmVlbiAnJHZhciA9fiBzL3h4eC95eXkvOycKCiAgICAjIFN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGEgdG9rZW4gYmVnaW5uaW5nIHdpdGggb25lIG9mOiBzIHkgbSAvIHRyCiAgICByZXR1cm4KICAgICAgdW5sZXNzICggJGlzX3NfeV9tX3NsYXNoeyBzdWJzdHIoICR0b2tlbiwgMCwgMSApIH0KICAgICAgICB8fCBzdWJzdHIoICR0b2tlbiwgMCwgMiApIGVxICd0cicgKTsKCiAgICAjIC4uLiBhbmQgcHJlY2VkZWQgYnkgb25lIG9mOiA9ID09ICE9CiAgICBteSAkS3AgPSAkc2VsZi0+S19wcmV2aW91c19ub25ibGFuayggdW5kZWYsICRyTExfbmV3ICk7CiAgICByZXR1cm4gdW5sZXNzICggZGVmaW5lZCgkS3ApICk7CiAgICBteSAkcHJldmlvdXNfbm9uYmxhbmtfdHlwZSA9ICRyTExfbmV3LT5bJEtwXS0+W19UWVBFX107CiAgICByZXR1cm4gdW5sZXNzICggJGlzX3VuZXhwZWN0ZWRfZXF1YWxzeyRwcmV2aW91c19ub25ibGFua190eXBlfSApOwogICAgbXkgJHByZXZpb3VzX25vbmJsYW5rX3Rva2VuID0gJHJMTF9uZXctPlskS3BdLT5bX1RPS0VOX107CgogICAgbXkgJHByZXZpb3VzX25vbmJsYW5rX3R5cGVfMiAgPSAnYic7CiAgICBteSAkcHJldmlvdXNfbm9uYmxhbmtfdG9rZW5fMiA9IEVNUFRZX1NUUklORzsKICAgIG15ICRLcHAgICAgICAgICAgICAgICAgICAgICAgID0gJHNlbGYtPktfcHJldmlvdXNfbm9uYmxhbmsoICRLcCwgJHJMTF9uZXcgKTsKICAgIGlmICggZGVmaW5lZCgkS3BwKSApIHsKICAgICAgICAkcHJldmlvdXNfbm9uYmxhbmtfdHlwZV8yICA9ICRyTExfbmV3LT5bJEtwcF0tPltfVFlQRV9dOwogICAgICAgICRwcmV2aW91c19ub25ibGFua190b2tlbl8yID0gJHJMTF9uZXctPlskS3BwXS0+W19UT0tFTl9dOwogICAgfQoKICAgIG15ICRuZXh0X25vbmJsYW5rX3Rva2VuID0gRU1QVFlfU1RSSU5HOwogICAgbXkgJEtuICAgICAgICAgICAgICAgICAgPSAkS0sgKyAxOwogICAgbXkgJEttYXggICAgICAgICAgICAgICAgPSBAeyRyTEx9IC0gMTsKICAgIGlmICggJEtuIDw9ICRLbWF4ICYmICRyTEwtPlskS25dLT5bX1RZUEVfXSBlcSAnYicgKSB7ICRLbiArPSAxIH0KICAgIGlmICggJEtuIDw9ICRLbWF4ICkgewogICAgICAgICRuZXh0X25vbmJsYW5rX3Rva2VuID0gJHJMTC0+WyRLbl0tPltfVE9LRU5fXTsKICAgIH0KCiAgICBteSAkdG9rZW5fMCA9ICRyTEwtPlskS2ZpcnN0XS0+W19UT0tFTl9dOwogICAgbXkgJHR5cGVfMCAgPSAkckxMLT5bJEtmaXJzdF0tPltfVFlQRV9dOwoKICAgIGlmICgKCiAgICAgICAgIyBwcmVjZWRlZCBieSBzaW1wbGUgc2NhbGFyCiAgICAgICAgJHByZXZpb3VzX25vbmJsYW5rX3R5cGVfMiBlcSAnaScKICAgICAgICAmJiAkcHJldmlvdXNfbm9uYmxhbmtfdG9rZW5fMiA9fiAvXlwkLwoKICAgICAgICAjIGZvbGxvd2VkIGJ5IHNvbWUga2luZCBvZiB0ZXJtaW5hdGlvbgogICAgICAgICMgKGJ1dCBnaXZlIGNvbXBsYWludCBpZiB3ZSBjYW4gbm90IHNlZSBmYXIgZW5vdWdoIGFoZWFkKQogICAgICAgICYmICRuZXh0X25vbmJsYW5rX3Rva2VuID1+IC9eWzsgXClcfV0kLwoKICAgICAgICAjIHNjYWxhciBpcyBub3QgZGVjbGFyZWQKICAgICAgICAmJiAhKCAkdHlwZV8wIGVxICdrJyAmJiAkaXNfbXlfb3VyX2xvY2FseyR0b2tlbl8wfSApCiAgICAgICkKICAgIHsKICAgICAgICBteSAkbG5vICAgPSAxICsgJHJMTF9uZXctPlskS3BdLT5bX0xJTkVfSU5ERVhfXTsKICAgICAgICBteSAkZ3Vlc3MgPSBzdWJzdHIoICRwcmV2aW91c19ub25ibGFua190b2tlbiwgMCwgMSApIC4gJ34nOwogICAgICAgIGNvbXBsYWluKAoiTGluZSAkbG5vOiBOb3RlOiBiZSBzdXJlIHlvdSB3YW50ICckcHJldmlvdXNfbm9uYmxhbmtfdG9rZW4nIGluc3RlYWQgb2YgJyRndWVzcycgaGVyZVxuIgogICAgICAgICk7CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBjaGVja19RCgp9ICMjIGVuZCBjbG9zdXJlIHJlc3BhY2VfdG9rZW5zCgpzdWIgcmVzeW5jX2xpbmVzX2FuZF90b2tlbnMgewoKICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgIyBSZS1jb25zdHJ1Y3QgdGhlIGFycmF5cyBvZiB0b2tlbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW5hbCBpbnB1dAogICAgIyBsaW5lcyBzaW5jZSB0aGV5IGhhdmUgcHJvYmFibHkgY2hhbmdlZCBkdWUgdG8gaW5zZXJ0aW5nIGFuZCBkZWxldGluZwogICAgIyBibGFua3MgYW5kIGEgZmV3IG90aGVyIHRva2Vucy4KCiAgICAjIFJldHVybiBwYXJhbWV0ZXJzOgogICAgIyBzZXQgc2V2ZXJlX2Vycm9yID0gdHJ1ZSBpZiBwcm9jZXNzaW5nIG5lZWRzIHRvIHRlcm1pbmF0ZQogICAgbXkgJHNldmVyZV9lcnJvcjsKICAgIG15ICRycXdfbGluZXMgPSBbXTsKCiAgICBteSAkckxMICAgID0gJHNlbGYtPltfckxMX107CiAgICBteSAkS2xpbWl0ID0gJHNlbGYtPltfS2xpbWl0X107CiAgICBteSAkcmxpbmVzID0gJHNlbGYtPltfcmxpbmVzX107CiAgICBteSBAS3JhbmdlX2NvZGVfd2l0aG91dF9jb21tZW50czsKICAgIG15IEBLbGFzdF92YWxpZ25fY29kZTsKCiAgICAjIFRoaXMgaXMgdGhlIG5leHQgdG9rZW4gYW5kIGl0cyBsaW5lIGluZGV4OgogICAgbXkgJEtuZXh0ID0gMDsKICAgIG15ICRLbWF4ICA9IGRlZmluZWQoJEtsaW1pdCkgPyAkS2xpbWl0IDogLTE7CgogICAgIyBWZXJpZnkgdGhhdCBvbGQgbGluZSBpbmRleGVzIGFyZSBpbiBzdGlsbCBvcmRlci4gIElmIHRoaXMgZXJyb3Igb2NjdXJzLAogICAgIyBjaGVjayBsb2NhdGlvbnMgd2hlcmUgc3ViICdyZXNwYWNlX3Rva2VucycgY3JlYXRlcyBuZXcgdG9rZW5zIChsaWtlCiAgICAjIGJsYW5rIHNwYWNlcykuICBJdCBtdXN0IGhhdmUgc2V0IGEgYmFkIG9sZCBsaW5lIGluZGV4LgogICAgaWYgKCBERVZFTF9NT0RFICYmIGRlZmluZWQoJEtsaW1pdCkgKSB7CiAgICAgICAgbXkgJGlsaW5lID0gJHJMTC0+WzBdLT5bX0xJTkVfSU5ERVhfXTsKICAgICAgICBmb3JlYWNoIG15ICRLSyAoIDEgLi4gJEtsaW1pdCApIHsKICAgICAgICAgICAgbXkgJGlsaW5lX2xhc3QgPSAkaWxpbmU7CiAgICAgICAgICAgICRpbGluZSA9ICRyTEwtPlskS0tdLT5bX0xJTkVfSU5ERVhfXTsKICAgICAgICAgICAgaWYgKCAkaWxpbmUgPCAkaWxpbmVfbGFzdCApIHsKICAgICAgICAgICAgICAgIG15ICRLS19tICAgID0gJEtLIC0gMTsKICAgICAgICAgICAgICAgIG15ICR0b2tlbl9tID0gJHJMTC0+WyRLS19tXS0+W19UT0tFTl9dOwogICAgICAgICAgICAgICAgbXkgJHRva2VuICAgPSAkckxMLT5bJEtLXS0+W19UT0tFTl9dOwogICAgICAgICAgICAgICAgbXkgJHR5cGVfbSAgPSAkckxMLT5bJEtLX21dLT5bX1RZUEVfXTsKICAgICAgICAgICAgICAgIG15ICR0eXBlICAgID0gJHJMTC0+WyRLS10tPltfVFlQRV9dOwogICAgICAgICAgICAgICAgRmF1bHQoPDxFT00pOwpMaW5lIGluZGV4ZXMgb3V0IG9mIG9yZGVyIGF0IGluZGV4IEs9JEtLOgphdCBLSy0xID0kS0tfbTogb2xkIGxpbmU9JGlsaW5lX2xhc3QsIHR5cGU9JyR0eXBlX20nLCB0b2tlbj0nJHRva2VuX20nCmF0IEtLICAgPSRLSzogb2xkIGxpbmU9JGlsaW5lLCB0eXBlPSckdHlwZScsIHRva2VuPSckdG9rZW4nLApFT00KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBteSAkaWxpbmUgPSAtMTsKICAgIGZvcmVhY2ggbXkgJGxpbmVfb2ZfdG9rZW5zICggQHskcmxpbmVzfSApIHsKICAgICAgICAkaWxpbmUrKzsKICAgICAgICBuZXh0IGlmICggJGxpbmVfb2ZfdG9rZW5zLT57X2xpbmVfdHlwZX0gbmUgJ0NPREUnICk7CgogICAgICAgICMgR2V0IHRoZSBvbGQgbnVtYmVyIG9mIHRva2VucyBvbiB0aGlzIGxpbmUKICAgICAgICBteSAkcktfcmFuZ2Vfb2xkID0gJGxpbmVfb2ZfdG9rZW5zLT57X3JLX3JhbmdlfTsKICAgICAgICBteSAoICRLZmlyc3Rfb2xkLCAkS2xhc3Rfb2xkICkgPSBAeyRyS19yYW5nZV9vbGR9OwogICAgICAgIG15ICRLZGlmZl9vbGQgPSAwOwogICAgICAgIGlmICggZGVmaW5lZCgkS2ZpcnN0X29sZCkgKSB7CiAgICAgICAgICAgICRLZGlmZl9vbGQgPSAkS2xhc3Rfb2xkIC0gJEtmaXJzdF9vbGQ7CiAgICAgICAgfQoKICAgICAgICAjIEZpbmQgdGhlIHJhbmdlIG9mIE5FVyBLIGluZGV4ZXMgZm9yIHRoZSBsaW5lOgogICAgICAgICMgJEtmaXJzdCA9IGluZGV4IG9mIGZpcnN0IHRva2VuIG9uIGxpbmUKICAgICAgICAjICRLbGFzdCAgPSBpbmRleCBvZiBsYXN0IHRva2VuIG9uIGxpbmUKICAgICAgICBteSAoICRLZmlyc3QsICRLbGFzdCApOwoKICAgICAgICBteSAkS25leHRfYmVnID0gJEtuZXh0OyAgICAjIHRoaXMgd2lsbCBiZSAkS2ZpcnN0IGlmIHdlIGZpbmQgdG9rZW5zCgogICAgICAgICMgT3B0aW1pemF0aW9uOiBBbHRob3VnaCB0aGUgYWN0dWFsIEsgaW5kZXhlcyBtYXkgYmUgY29tcGxldGVseQogICAgICAgICMgY2hhbmdlZCBhZnRlciByZXNwYWNpbmcsIHRoZSBudW1iZXIgb2YgdG9rZW5zIG9uIGFueSBnaXZlbiBsaW5lCiAgICAgICAgIyB3aWxsIG9mdGVuIGJlIG5lYXJseSB1bmNoYW5nZWQuICBTbyB3ZSB3aWxsIHNlZSBpZiB3ZSBjYW4gc3RhcnQKICAgICAgICAjIG91ciBzZWFyY2ggYnkgZ3Vlc3NpbmcgdGhhdCB0aGUgbmV3IGxpbmUgaGFzIHRoZSBzYW1lIG51bWJlcgogICAgICAgICMgb2YgdG9rZW5zIGFzIHRoZSBvbGQgbGluZS4KICAgICAgICBteSAkS25leHRfZ3Vlc3MgPSAkS25leHQgKyAkS2RpZmZfb2xkOwogICAgICAgIGlmICggICAkS25leHRfZ3Vlc3MgPiAkS25leHQKICAgICAgICAgICAgJiYgJEtuZXh0X2d1ZXNzIDwgJEttYXgKICAgICAgICAgICAgJiYgJHJMTC0+WyRLbmV4dF9ndWVzc10tPltfTElORV9JTkRFWF9dIDw9ICRpbGluZSApCiAgICAgICAgewoKICAgICAgICAgICAgIyB0aGUgZ3Vlc3MgaXMgZ29vZCwgc28gd2UgY2FuIHN0YXJ0IG91ciBzZWFyY2ggaGVyZQogICAgICAgICAgICAkS25leHQgPSAkS25leHRfZ3Vlc3MgKyAxOwogICAgICAgIH0KCiAgICAgICAgIyBzZWFyY2ggZm9yIHRoZSBjaGFuZ2UgaW4gaW5wdXQgbGluZSBudW1iZXIKICAgICAgICB3aGlsZSAoJEtuZXh0IDw9ICRLbWF4CiAgICAgICAgICAgICYmICRyTEwtPlskS25leHRdLT5bX0xJTkVfSU5ERVhfXSA8PSAkaWxpbmUgKQogICAgICAgIHsKICAgICAgICAgICAgJEtuZXh0Kys7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRLbmV4dCA+ICRLbmV4dF9iZWcgKSB7CgogICAgICAgICAgICAkS2xhc3QgPSAkS25leHQgLSAxOwoKICAgICAgICAgICAgIyBEZWxldGUgYW55IHRlcm1pbmFsIGJsYW5rIHRva2VuCiAgICAgICAgICAgIGlmICggJHJMTC0+WyRLbGFzdF0tPltfVFlQRV9dIGVxICdiJyApIHsgJEtsYXN0IC09IDEgfQoKICAgICAgICAgICAgaWYgKCAkS2xhc3QgPCAkS25leHRfYmVnICkgewogICAgICAgICAgICAgICAgJEtsYXN0ID0gdW5kZWY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgJEtmaXJzdCA9ICRLbmV4dF9iZWc7CgogICAgICAgICAgICAgICAgIyBTYXZlIHJhbmdlcyBvZiBub24tY29tbWVudCBjb2RlLiBUaGlzIHdpbGwgYmUgdXNlZCBieQogICAgICAgICAgICAgICAgIyBzdWIga2VlcF9vbGRfbGluZV9icmVha3MuCiAgICAgICAgICAgICAgICBpZiAoICRyTEwtPlskS2ZpcnN0XS0+W19UWVBFX10gbmUgJyMnICkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQEtyYW5nZV9jb2RlX3dpdGhvdXRfY29tbWVudHMsIFsgJEtmaXJzdCwgJEtsYXN0IF07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBPbmx5IHNhdmUgZW5kaW5nIEsgaW5kZXhlcyBvZiBjb2RlIHR5cGVzIHdoaWNoIGFyZSBibGFuawogICAgICAgICAgICAgICAgIyBvciAnVkVSJy4gIFRoZXNlIHdpbGwgYmUgdXNlZCBmb3IgYSBjb252ZXJnZW5jZSBjaGVjay4KICAgICAgICAgICAgICAgICMgU2VlIHJlbGF0ZWQgY29kZSBpbiBzdWIgJ2NvbnZleV9iYXRjaF90b192ZXJ0aWNhbF9hbGlnbmVyJwogICAgICAgICAgICAgICAgbXkgJENPREVfdHlwZSA9ICRsaW5lX29mX3Rva2Vucy0+e19jb2RlX3R5cGV9OwogICAgICAgICAgICAgICAgaWYgKCAgISRDT0RFX3R5cGUKICAgICAgICAgICAgICAgICAgICB8fCAkQ09ERV90eXBlIGVxICdWRVInICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBLbGFzdF92YWxpZ25fY29kZSwgJEtsYXN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIEl0IGlzIG9ubHkgc2FmZSB0byB0cmltIHRoZSBhY3R1YWwgbGluZSB0ZXh0IGlmIHRoZSBpbnB1dAogICAgICAgICMgbGluZSBoYWQgYSB0ZXJtaW5hbCBibGFuayB0b2tlbi4gT3RoZXJ3aXNlLCB3ZSBtYXkgYmUKICAgICAgICAjIGluIGEgcXVvdGUuCiAgICAgICAgaWYgKCAkbGluZV9vZl90b2tlbnMtPntfZW5kZWRfaW5fYmxhbmtfdG9rZW59ICkgewogICAgICAgICAgICAkbGluZV9vZl90b2tlbnMtPntfbGluZV90ZXh0fSA9fiBzL1xzKyQvLzsKICAgICAgICB9CiAgICAgICAgJGxpbmVfb2ZfdG9rZW5zLT57X3JLX3JhbmdlfSA9IFsgJEtmaXJzdCwgJEtsYXN0IF07CgogICAgICAgICMgRGVsZXRpbmcgc2VtaWNvbG9ucyBjYW4gY3JlYXRlIG5ldyBlbXB0eSBjb2RlIGxpbmVzCiAgICAgICAgIyB3aGljaCBzaG91bGQgYmUgbWFya2VkIGFzIGJsYW5rCiAgICAgICAgaWYgKCAhZGVmaW5lZCgkS2ZpcnN0KSApIHsKICAgICAgICAgICAgbXkgJENPREVfdHlwZSA9ICRsaW5lX29mX3Rva2Vucy0+e19jb2RlX3R5cGV9OwogICAgICAgICAgICBpZiAoICEkQ09ERV90eXBlICkgewogICAgICAgICAgICAgICAgJGxpbmVfb2ZfdG9rZW5zLT57X2NvZGVfdHlwZX0gPSAnQkwnOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIHNhdmUgaW5kZXhlcyBvZiBhbGwgbGluZXMgd2l0aCBhICdxJyBhdCBlaXRoZXIgZW5kCiAgICAgICAgICAgICMgZm9yIGxhdGVyIHVzZSBieSBzdWIgZmluZF9tdWx0aWxpbmVfcXcKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICBpZiAoICAgJHJMTC0+WyRLZmlyc3RdLT5bX1RZUEVfXSBlcSAncScKICAgICAgICAgICAgICAgIHx8ICRyTEwtPlskS2xhc3RdLT5bX1RZUEVfXSBlcSAncScgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwdXNoIEB7JHJxd19saW5lc30sICRpbGluZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIFRoZXJlIHNob3VsZG4ndCBiZSBhbnkgbm9kZXMgYmV5b25kIHRoZSBsYXN0IG9uZS4gIFRoaXMgcm91dGluZSBpcwogICAgIyByZWxpbmtpbmcgbGluZXMgYW5kIHRva2VucyBhZnRlciB0aGUgdG9rZW5zIGhhdmUgYmVlbiByZXNwYWNlZC4gIEEgZmF1bHQKICAgICMgaGVyZSBpbmRpY2F0ZXMgc29tZSBraW5kIG9mIGJ1ZyBoYXMgYmVlbiBpbnRyb2R1Y2VkIGludG8gdGhlIGFib3ZlIGxvb3BzLgogICAgIyBUaGVyZSBpcyBub3QgZ29vZCB3YXkgdG8ga2VlcCBnb2luZzsgd2UgYmV0dGVyIHN0b3AgaGVyZS4KICAgIGlmICggJEtuZXh0IDw9ICRLbWF4ICkgewogICAgICAgIEZhdWx0X1dhcm4oCiAgICAgICAgICAgICJ1bmV4cGVjdGVkIHRva2VucyBhdCBlbmQgb2YgZmlsZSB3aGVuIHJlY29uc3RydWN0aW5nIGxpbmVzIik7CiAgICAgICAgJHNldmVyZV9lcnJvciA9IDE7CiAgICAgICAgcmV0dXJuICggJHNldmVyZV9lcnJvciwgJHJxd19saW5lcyApOwogICAgfQogICAgJHNlbGYtPltfcktyYW5nZV9jb2RlX3dpdGhvdXRfY29tbWVudHNfXSA9IFxAS3JhbmdlX2NvZGVfd2l0aG91dF9jb21tZW50czsKCiAgICAjIFNldHVwIHRoZSBjb252ZXJnZW5jZSB0ZXN0IGluIHRoZSBGaWxlV3JpdGVyIGJhc2VkIG9uIGxpbmUtZW5kaW5nIGluZGV4ZXMKICAgIG15ICRmaWxlX3dyaXRlcl9vYmplY3QgPSAkc2VsZi0+W19maWxlX3dyaXRlcl9vYmplY3RfXTsKICAgICRmaWxlX3dyaXRlcl9vYmplY3QtPnNldHVwX2NvbnZlcmdlbmNlX3Rlc3QoIFxAS2xhc3RfdmFsaWduX2NvZGUgKTsKCiAgICByZXR1cm4gKCAkc2V2ZXJlX2Vycm9yLCAkcnF3X2xpbmVzICk7Cgp9ICMjIGVuZCBzdWIgcmVzeW5jX2xpbmVzX2FuZF90b2tlbnMKCnN1YiBwYWNrYWdlX2luZm9fbWFrZXIgewoKICAgIG15ICggJHNlbGYsICRyS19wYWNrYWdlX2xpc3QgKSA9IEBfOwoKICAgICMgQ3JlYXRlIGEgaGFzaCBvZiB2YWx1ZXMgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZmluZCB0aGUgcGFja2FnZSBvZiBhbnkKICAgICMgdG9rZW4uICBUaGlzIHN1YiBtdXN0IGJlIGNhbGxlZCBhZnRlciByTEwgaGFzIGJlZW4gdXBkYXRlZCBiZWNhdXNlIGl0CiAgICAjIGNhbGxzIHBhcmVudF9zZXFub19ieV9LLgoKICAgICMgR2l2ZW46CiAgICAjICBAeyRyS19wYWNrYWdlX2xpc3R9ID0gYSBzaW1wbGUgbGlzdCBvZiB0b2tlbiBpbmRleCBLIG9mIGVhY2ggJ3BhY2thZ2UnCiAgICAjICBzdGF0ZW1lbnQgaW4gdGhlIGZpbGUuCiAgICAjIFJldHVybnM6CiAgICAjICAgewogICAgIyAgICAncnBhY2thZ2VfaW5mb19saXN0JyAgID0+IFxAcGFja2FnZV9pbmZvX2xpc3QsCiAgICAjICAgICdycGFja2FnZV9sb29rdXBfbGlzdCcgPT4gXEBwYWNrYWdlX2xvb2t1cF9saXN0LAogICAgIyAgIH0KICAgICMgIHdoaWNoIGFyZSB0d28gbGlzdHMgd2l0aCB1c2VmdWwgaW5mb3JtYXRpb24gb24gYWxsIHBhY2thZ2VzCgogICAgbXkgJHJMTCAgICAgICAgICAgICAgICAgPSAkc2VsZi0+W19yTExfXTsKICAgIG15ICRLX2Nsb3NpbmdfY29udGFpbmVyID0gJHNlbGYtPltfS19jbG9zaW5nX2NvbnRhaW5lcl9dOwogICAgbXkgJEtsaW1pdCAgICAgICAgICAgICAgPSBAeyRyTEx9IC0gMTsKCiAgICAjIFJFVFVSTiBMSVNUICMxOiBwYWNrYWdlX2luZm9fbGlzdDoKICAgICMgVGhlIHBhY2thZ2Ugb2YgYSB0b2tlbiBhdCBhbiBhcmJpdHJhcnkgaW5kZXggSyBpcyB0aGUgbGFzdCBlbnRyeQogICAgIyBpbiB0aGUgbGlzdCBmb3Igd2hpY2ggS19vcGVuaW5nIDwgSyA8IEtfY2xvc2luZy4KICAgICMgSWYgbm8gcGFja2FnZSBpcyBmb3VuZCwgdGhlbiB0aGUgcGFja2FnZSBpcyAnbWFpbicuCiAgICAjIFRoaXMgbGlzdCBpcyBpbiBvcmRlciBvZiB0aGUgaW5kZXggSyBvZiB0aGUgcGFja2FnZSBzdGF0ZW1lbnRzLgogICAgIyBzbyB0aGUgc2VhcmNoIGNhbiBzdG9wIGlmIHdlIGZpbmQgS19vcGVuaW5nID4gSy4KICAgIG15IEBwYWNrYWdlX2luZm9fbGlzdDsKCiAgICAjIFN0YXJ0IHdpdGggYW4gZW50cnkgZm9yICdtYWluJwogICAgcHVzaCBAcGFja2FnZV9pbmZvX2xpc3QsCiAgICAgIHsKICAgICAgICB0eXBlICAgICAgICA9PiAncGFja2FnZScsCiAgICAgICAgbmFtZSAgICAgICAgPT4gJ21haW4nLAogICAgICAgIGxldmVsICAgICAgID0+IDAsCiAgICAgICAgbGluZV9zdGFydCAgPT4gMCwKICAgICAgICBLX29wZW5pbmcgICA9PiAwLAogICAgICAgIEtfY2xvc2luZyAgID0+ICRLbGltaXQsCiAgICAgICAgaXNfYmxvY2sgICAgPT4gMCwKICAgICAgICBtYXhfY2hhbmdlICA9PiAwLAogICAgICAgIGJsb2NrX2NvdW50ID0+IDAsCiAgICAgIH07CgogICAgbXkgQHBhY2thZ2Vfc3RhY2s7CiAgICBwdXNoIEBwYWNrYWdlX3N0YWNrLCAwOwoKICAgICMgUkVUVVJOIExJU1QgIzI6IHBhY2thZ2VfbG9va3VwX2xpc3Q6CiAgICAjIEEgZmxhdCBsaXN0IG9mIFskbmFtZSwgJEtiZWdpbiwgJEtlbmRdLCB3aGVyZSBwYWNrYWdlIGlzIG5hbWUgJyRuYW1lJwogICAgIyBmcm9tIHRva2VuIGluZGV4ICRLYmVnaW4gdG8gdGhlIGluZGV4ICRLZW5kLiAgVGhpcyBpcyBlYXNpZXIgdG8gdXNlIHRoYW4KICAgICMgTElTVCAjMSBzaW5jZSBpdCBlbGltaW5hdGVzIHRoZSBuZWVkIGZvciBhIHN0YWNrLgogICAgbXkgQHBhY2thZ2VfbG9va3VwX2xpc3Q7CiAgICBwdXNoIEBwYWNrYWdlX2xvb2t1cF9saXN0LCBbICdtYWluJywgMCwgMCBdOwoKICAgIGZvcmVhY2ggbXkgJEtLICggQHskcktfcGFja2FnZV9saXN0fSApIHsKICAgICAgICBteSAkaXRlbSA9ICRyTEwtPlskS0tdOwogICAgICAgIG15ICR0eXBlID0gJGl0ZW0tPltfVFlQRV9dOwoKICAgICAgICAjIFN0b3JlZCBLIHZhbHVlcyBtYXkgYmUgb2ZmIGJ5IDEgZHVlIHRvIGFuIGFkZGVkIGJsYW5rCiAgICAgICAgaWYgKCAkdHlwZSBlcSAnYicgKSB7CiAgICAgICAgICAgICRLSyArPSAxOwogICAgICAgICAgICAkaXRlbSA9ICRyTEwtPlskS0tdOwogICAgICAgICAgICAkdHlwZSA9ICRpdGVtLT5bX1RZUEVfXTsKICAgICAgICB9CgogICAgICAgICMgc2hvdWxkbid0IGhhcHBlbjoKICAgICAgICBpZiAoICR0eXBlIG5lICdQJyApIHsKICAgICAgICAgICAgREVWRUxfTU9ERSAmJiBGYXVsdCgidHlwZSAnJHR5cGUnIGV4cGVjdGVkIHRvIGJlICdQJ1xuIik7CiAgICAgICAgICAgIG5leHQ7CiAgICAgICAgfQoKICAgICAgICBteSAkdG9rZW4gPSAkaXRlbS0+W19UT0tFTl9dOwogICAgICAgIG15ICggJGtleXdvcmQsICRuYW1lICkgPSBzcGxpdCAvXHMrLywgJHRva2VuLCAyOwoKICAgICAgICBteSAkS19vcGVuaW5nID0gJEtLOwogICAgICAgIG15ICRseF9zdGFydCAgPSAkaXRlbS0+W19MSU5FX0lOREVYX107CgogICAgICAgICMgZm9yIG5vbi1CTE9DSyBmb3JtOgogICAgICAgIG15ICRsZXZlbCAgICAgICAgPSAkaXRlbS0+W19MRVZFTF9dOwogICAgICAgIG15ICRwYXJlbnRfc2Vxbm8gPSAkc2VsZi0+cGFyZW50X3NlcW5vX2J5X0soJEtLKTsKICAgICAgICBteSAkaXNfYmxvY2sgICAgID0gMDsKCiAgICAgICAgIyBDaGVjayBmb3IgQkxPQ0sgZm9ybToKICAgICAgICAjIHBhY2thZ2UgTkFNRSBWRVJTSU9OIEJMT0NLCgogICAgICAgICMgU2tpcCBwYXN0IFZFUlNJT04KICAgICAgICBteSAkS24gPSAkc2VsZi0+S19uZXh0X2NvZGUoJEtLKTsKICAgICAgICBpZiAoICRLbiAmJiAkckxMLT5bJEtuXS0+W19UWVBFX10gZXEgJ24nICkgewogICAgICAgICAgICAkS24gPSAkc2VsZi0+S19uZXh0X2NvZGUoJEtuKTsKICAgICAgICB9CgogICAgICAgICMgTG9vayBmb3IgQkxPQ0sKICAgICAgICBpZiAoICRLbiAmJiAkckxMLT5bJEtuXS0+W19UT0tFTl9dIGVxICd7JyApIHsKICAgICAgICAgICAgbXkgJHNlcW5vX24gPSAkckxMLT5bJEtuXS0+W19UWVBFX1NFUVVFTkNFX107CiAgICAgICAgICAgICRsZXZlbCArPSAxOwogICAgICAgICAgICAkcGFyZW50X3NlcW5vID0gJHNlcW5vX247CiAgICAgICAgICAgICRpc19ibG9jayAgICAgPSAkc2Vxbm9fbjsKICAgICAgICB9CgogICAgICAgIG15ICRLX2Nsb3NpbmcgPSAkS2xpbWl0OwogICAgICAgIGlmICggJHBhcmVudF9zZXFubyAhPSBTRVFfUk9PVCApIHsKICAgICAgICAgICAgbXkgJEtjID0gJEtfY2xvc2luZ19jb250YWluZXItPnskcGFyZW50X3NlcW5vfTsKICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRLYykgKSB7CiAgICAgICAgICAgICAgICAkS19jbG9zaW5nID0gJEtjOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIFRoaXMgaXMgdGhlIGluZGV4IG9mIHRoaXMgbmV3IHBhY2thZ2UgaW4gdGhlIHBhY2thZ2VfaW5mb19saXN0CiAgICAgICAgbXkgJGlpX25leHQgPSBAcGFja2FnZV9pbmZvX2xpc3Q7CgogICAgICAgIHdoaWxlIChAcGFja2FnZV9zdGFjaykgewogICAgICAgICAgICBteSAkaWkgPSAkcGFja2FnZV9zdGFja1stMV07CiAgICAgICAgICAgIG15ICRLYyA9ICRwYWNrYWdlX2luZm9fbGlzdFskaWldLT57S19jbG9zaW5nfTsKCiAgICAgICAgICAgICMgcG9wIGFuIGluYWN0aXZlIHN0YWNrIGl0ZW0gYW5kIGtlZXAgZ29pbmcKICAgICAgICAgICAgaWYgKCAkS2MgPCAkS19vcGVuaW5nICkgewogICAgICAgICAgICAgICAgcG9wIEBwYWNrYWdlX3N0YWNrOwogICAgICAgICAgICAgICAgbXkgJGlfdG9wICAgID0gJHBhY2thZ2Vfc3RhY2tbLTFdOwogICAgICAgICAgICAgICAgbXkgJG5hbWVfdG9wID0gJHBhY2thZ2VfaW5mb19saXN0WyRpX3RvcF0tPntuYW1lfTsKICAgICAgICAgICAgICAgIHB1c2ggQHBhY2thZ2VfbG9va3VwX2xpc3QsIFsgJG5hbWVfdG9wLCAkS2MgKyAxIF07CiAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGVuZCBhIHN0YWNrIGl0ZW0gYXQgdGhpcyBsZXZlbAogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIG15ICRsZXZlbF9pID0gJHBhY2thZ2VfaW5mb19saXN0WyRpaV0tPntsZXZlbH07CiAgICAgICAgICAgICAgICBpZiAoICRsZXZlbF9pID09ICRsZXZlbCApIHsKICAgICAgICAgICAgICAgICAgICAkcGFja2FnZV9pbmZvX2xpc3RbJGlpXS0+e0tfY2xvc2luZ30gPSAkS19vcGVuaW5nIC0gMTsKICAgICAgICAgICAgICAgICAgICBwb3AgQHBhY2thZ2Vfc3RhY2s7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGFzdDsKICAgICAgICB9ICMjIGVuZCB3aGlsZSAoQHBhY2thZ2Vfc3RhY2spCgogICAgICAgIHB1c2ggQHBhY2thZ2VfbG9va3VwX2xpc3QsIFsgJG5hbWUsICRLX29wZW5pbmcgXTsKICAgICAgICBwdXNoIEBwYWNrYWdlX3N0YWNrLCAgICAgICAkaWlfbmV4dDsKCiAgICAgICAgIyBtYXhfY2hhbmdlIGFuZCBibG9ja19jb3VudCBhcmUgZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2FnZQogICAgICAgIHB1c2ggQHBhY2thZ2VfaW5mb19saXN0LAogICAgICAgICAgewogICAgICAgICAgICB0eXBlICAgICAgICA9PiAka2V5d29yZCwKICAgICAgICAgICAgbmFtZSAgICAgICAgPT4gJG5hbWUsCiAgICAgICAgICAgIGxldmVsICAgICAgID0+ICRsZXZlbCwKICAgICAgICAgICAgbGluZV9zdGFydCAgPT4gJGx4X3N0YXJ0ICsgMSwKICAgICAgICAgICAgS19vcGVuaW5nICAgPT4gJEtfb3BlbmluZywKICAgICAgICAgICAgS19jbG9zaW5nICAgPT4gJEtfY2xvc2luZywKICAgICAgICAgICAgaXNfYmxvY2sgICAgPT4gJGlzX2Jsb2NrLAogICAgICAgICAgICBtYXhfY2hhbmdlICA9PiAwLAogICAgICAgICAgICBibG9ja19jb3VudCA9PiAwLAogICAgICAgICAgfTsKICAgIH0KCiAgICBteSAkaW1heCA9IEBwYWNrYWdlX2xvb2t1cF9saXN0IC0gMTsKICAgIG15ICRLZW5kID0gJEtsaW1pdDsKICAgIGZvcmVhY2ggbXkgJGkgKCByZXZlcnNlKCAwIC4uICRpbWF4ICkgKSB7CiAgICAgICAgJHBhY2thZ2VfbG9va3VwX2xpc3RbJGldLT5bMl0gPSAkS2VuZDsKICAgICAgICAkS2VuZCA9ICRwYWNrYWdlX2xvb2t1cF9saXN0WyRpXS0+WzFdIC0gMTsKICAgIH0KCiAgICAjIEVsaW1pbmF0ZSBhbnkgbmVlZGxlc3Mgc3RhcnRpbmcgcGFja2FnZSAnbWFpbicKICAgIGlmICggQHBhY2thZ2VfbG9va3VwX2xpc3QgPiAxICYmICRwYWNrYWdlX2xvb2t1cF9saXN0WzBdLT5bMl0gPCAwICkgewogICAgICAgIHNoaWZ0IEBwYWNrYWdlX2xvb2t1cF9saXN0OwogICAgfQoKICAgIHJldHVybiB7CiAgICAgICAgJ3JwYWNrYWdlX2luZm9fbGlzdCcgICA9PiBcQHBhY2thZ2VfaW5mb19saXN0LAogICAgICAgICdycGFja2FnZV9sb29rdXBfbGlzdCcgPT4gXEBwYWNrYWdlX2xvb2t1cF9saXN0LAogICAgfTsKfSAjIyBlbmQgc3ViIHBhY2thZ2VfaW5mb19tYWtlcgoKdXNlIGNvbnN0YW50IERFQlVHX0NPVU5UID0+IDA7CgpteSAlaXNfbm9uX2ludGVyZmVyaW5nX2tleXdvcmQ7Cm15ICVpc19rZXl3b3JkX3JldHVybmluZ19zY2FsYXI7CgpCRUdJTiB7CgogICAgIyBCdWlsdGluIGtleXdvcmRzIHdoaWNoIGRvIG5vdCBpbnRlcmZlcmUgd2l0aCBjb3VudGluZyBhcmdzLgogICAgIyBUaGV5IGRvIG5vdCBwcm9kdWNlIGFycmF5cyBhbmQgZG8gbm90IGNvbnN1bWUgbW9yZSB0aGFuIG9uZSBhcmcsIHNvCiAgICAjIGZvbGxvd2luZyBwYXJlbnMgYXJlIG5vdCByZXF1aXJlZC4KICAgIG15IEBxID0gcXcoCiAgICAgIGFicyAgICAgYW5kICAgICBjaHIgICAgIGNtcCAgICBjb250aW51ZSBjb3MKICAgICAgZGVmaW5lZCBkZWxldGUgIGRvICAgICAgZWxzZSAgIGVsc2lmICAgIGVxCiAgICAgIGV4cCAgICAgZmMgICAgICBnZSAgICAgIGd0ICAgICBoZXggICAgICBpbnQKICAgICAgbGMgICAgICBsY2ZpcnN0IGxlICAgICAgbGVuZ3RoIGxvY2FsICAgIGxvZwogICAgICBsdCAgICAgIG15ICAgICAgbmUgICAgICBub3QgICAgb2N0ICAgICAgb3IKICAgICAgb3JkICAgICBvcmQgICAgIG91ciAgICAgcG9wICAgIHBvcyAgICAgIHJhbmQKICAgICAgcmVmICAgICBzY2FsYXIgIHNoaWZ0ICAgc2luICAgIHNxcnQgICAgIHNyYW5kCiAgICAgIHN0YXRlICAgdWMgICAgICB1Y2ZpcnN0IHVuZGVmICB4b3IKICAgICk7CiAgICBAaXNfbm9uX2ludGVyZmVyaW5nX2tleXdvcmR7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICAjIEJ1aWx0aW4ga2V5d29yZHMgcG9zc2libHkgdGFraW5nIG11bHRpcGxlIHBhcmFtZXRlcnMgYnV0IHJldHVybmluZyBhCiAgICAjIHNjYWxhciB2YWx1ZS4gVGhlc2UgY2FuIGJlIGhhbmRsZWQgaWYgdGhlIGFyZ3MgYXJlIGluIHBhcmVucy4KICAgIEBxID0gcXcoIHN1YnN0ciBqb2luIGF0YW4yICk7CiAgICBAaXNfa2V5d29yZF9yZXR1cm5pbmdfc2NhbGFye0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7Cn0KCnN1YiBjb3VudF9saXN0X2VsZW1lbnRzIHsKICAgIG15ICggJHNlbGYsICRyYXJnX2xpc3QgKSA9IEBfOwoKICAgICMgR2l2ZW4gY2FsbCBhcmcgaGFzaCBjb250YWluaW5nOgogICAgIyAgICRzZXFub19saXN0ICAgPSBzZXF1ZW5jZSBudW1iZXIgb2YgYSBwYXJlbiBvZiBsaXN0IHRvIGJlIGNvdW50ZWQsIG9yCiAgICAjICAgJEtfbGlzdF9zdGFydCA9IHN0YXJ0aW5nIGluZGV4IG9mIGxpc3QgKGZvciAncmV0dXJuJyBsaXN0cykKICAgICMgICAkc2hpZnRfY291bnRfbWluICA9IHN0YXJ0aW5nIG1pbiBhcmcgY291bnQgaXRlbXMgdG8gaW5jbHVkZQogICAgIyAgICRzaGlmdF9jb3VudF9tYXggID0gc3RhcnRpbmcgbWF4IGFyZyBjb3VudCBpdGVtcyB0byBpbmNsdWRlCiAgICAjICAgJGlzX3NpZ25hdHVyZSA9IHRydWUgaWYgdGhpcyBpcyBhIHN1YiBzaWduYXR1cmUgbGlzdAogICAgIyAgICRzZWxmX25hbWUgICAgPSBuYW1lIG9mIGZpcnN0IGFyZyBmb3VuZAoKICAgICMgUmV0dXJuOgogICAgIyAgIC1zaGlmdF9jb3VudF9taW4gID0+IHN0YXJ0aW5nIG1pbiBhcmcgY291bnQgaXRlbXMgdG8gaW5jbHVkZSwgb3IKICAgICMgICAgICB1bmRlZiBpZiBhIHNwZWNpZmljIG51bWJlciB3YXMgbm90IGRldGVybWluZWQKICAgICMgICAtc2hpZnRfY291bnRfbWF4ICA9PiBzdGFydGluZyBtYXggYXJnIGNvdW50IGl0ZW1zIHRvIGluY2x1ZGUKICAgICMgICAgICB1bmRlZiBpZiBhIHNwZWNpZmljIG51bWJlciB3YXMgbm90IGRldGVybWluZWQKICAgICMgICAtc2VsZl9uYW1lID0+IHBvc3NpYmx5IHVwZGF0ZWQgbmFtZSBvZiBmaXJzdCBhcmcKICAgICMgICAtaW5pdGlhbGl6ZWQgPT4gYSBoYXNoIGVudHJ5IG1haW50YWluZWQgYnkgdGhpcyByb3V0aW5lCiAgICAjICAgICBmb3Iga2VlcGluZyB0cmFjayBvZiByZXBlYXRlZCBjYWxscyBmb3IgJ3JldHVybicgbGlzdHMKCiAgICAjIE1ldGhvZDoKICAgICMgICAtIFRoZSBiYXNpYyBtZXRob2QgaXMgdG8gY291bnQgY29tbWFzLCBidXQKICAgICMgICAtIGlmIHdlIGVuY291bnRlciBzaWdpbHMgQCBvciAlIG9yIG90aGVyIHByb2JsZW1zIHdoaWNoIHByZXZlbnQgYQogICAgIyAgICAgY291bnQsIHRoZW4gd2UgZG8gYSBzaW1wbGUgcmV0dXJuOyB0aGUgY291bnQgd2lsbCB0aGVuIGJlIGluZGVmaW5pdGUuCgogICAgIyBTZXQgdGhlIGNvdW50cyB0byB1bmRlZiBpbiBjYXNlIHdlIGhhdmUgdG8gZG8gYSBzaW1wbGUgcmV0dXJuIHVwb24KICAgICMgZW5jb3VudGVyaW5nIGFuIGluZGV0ZXJtaW5hdGUgbGlzdCBjb3VudAogICAgbXkgJHNoaWZ0X2NvdW50X21pbl9pbnB1dCA9ICRyYXJnX2xpc3QtPntzaGlmdF9jb3VudF9taW59OwojIyAgbXkgJHNoaWZ0X2NvdW50X21heF9pbnB1dCA9ICRyYXJnX2xpc3QtPntzaGlmdF9jb3VudF9tYXh9OwogICAgJHJhcmdfbGlzdC0+e3NoaWZ0X2NvdW50X21pbn0gPSB1bmRlZjsKICAgICRyYXJnX2xpc3QtPntzaGlmdF9jb3VudF9tYXh9ID0gdW5kZWY7CgogICAgbXkgJHNlcW5vX2xpc3QgICA9ICRyYXJnX2xpc3QtPntzZXFub19saXN0fTsKICAgIG15ICRLX2xpc3Rfc3RhcnQgPSAkcmFyZ19saXN0LT57S19saXN0X3N0YXJ0fTsKICAgIG15ICRpc19zaWduYXR1cmUgPSAkcmFyZ19saXN0LT57aXNfc2lnbmF0dXJlfTsKICAgIG15ICRzZWxmX25hbWUgICAgPSAkaXNfc2lnbmF0dXJlID8gRU1QVFlfU1RSSU5HIDogJHJhcmdfbGlzdC0+e3NlbGZfbmFtZX07CgogICAgbXkgJHJMTCA9ICRzZWxmLT5bX3JMTF9dOwogICAgbXkgJEtfbGlzdF9lbmQ7CgogICAgIyBJbnB1dCBvcHRpb24gMTogJHNlcW5vX2xpc3QgaXMgYSBjb250YWluZXIKICAgIG15ICRpc19yZXR1cm5fbGlzdDsKICAgIGlmICggZGVmaW5lZCgkc2Vxbm9fbGlzdCkgKSB7CiAgICAgICAgJEtfbGlzdF9zdGFydCA9ICRzZWxmLT5bX0tfb3BlbmluZ19jb250YWluZXJfXS0+eyRzZXFub19saXN0fTsKICAgICAgICAkS19saXN0X2VuZCAgID0gJHNlbGYtPltfS19jbG9zaW5nX2NvbnRhaW5lcl9dLT57JHNlcW5vX2xpc3R9OwogICAgICAgIHJldHVybiB1bmxlc3MgKCBkZWZpbmVkKCRLX2xpc3RfZW5kKSApOwogICAgfQoKICAgICMgSW5wdXQgb3B0aW9uIDI6ICRLX2xpc3Rfc3RhcnQgaXMgdGhlIGluZGV4IG9mIGEgdG9rZW4sCiAgICAjIHN1Y2ggYXMgJ3JldHVybicsIHdoaWNoIGhhcyB0cmFpbGluZyBhcmdzIHRvIGNvdW50LgogICAgZWxzaWYgKCBkZWZpbmVkKCRLX2xpc3Rfc3RhcnQpICkgewoKICAgICAgICAjIFNraXAgcGFzdCBhIGxlYWRpbmcgYmxhbmsgaWYgbmVjZXNzYXJ5CiAgICAgICAgaWYgKCAkckxMLT5bJEtfbGlzdF9zdGFydF0tPltfVFlQRV9dIGVxICdiJyApIHsgJEtfbGlzdF9zdGFydCsrIH0KCiAgICAgICAgJGlzX3JldHVybl9saXN0ID0gJHJMTC0+WyRLX2xpc3Rfc3RhcnRdLT5bX1RZUEVfXSBlcSAnaycKICAgICAgICAgICYmICRyTEwtPlskS19saXN0X3N0YXJ0XS0+W19UT0tFTl9dIGVxICdyZXR1cm4nOwogICAgICAgICRLX2xpc3RfZW5kID0gQHskckxMfSAtIDE7CgogICAgICAgICMgT3B0aW1pemF0aW9uIGZvciBjb21tb24gY2FzZSBvZiBzaW1wbGUgcmV0dXJuCiAgICAgICAgbXkgJEtuID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLX2xpc3Rfc3RhcnQpOwogICAgICAgIHJldHVybiB1bmxlc3MgKCRLbik7CiAgICAgICAgbXkgJHR5cGVfbiA9ICRyTEwtPlskS25dLT5bX1RZUEVfXTsKICAgICAgICBpZiAoICAgJHR5cGVfbiBlcSAnOycKICAgICAgICAgICAgfHwgJGlzX2Nsb3NpbmdfdHlwZXskdHlwZV9ufQogICAgICAgICAgICB8fCAoICR0eXBlX24gZXEgJ2snICYmICRpc19pZl91bmxlc3N7ICRyTEwtPlskS25dLT5bX1RPS0VOX10gfSApICkKICAgICAgICB7CiAgICAgICAgICAgICRyYXJnX2xpc3QtPntzaGlmdF9jb3VudF9tYXh9ID0gMDsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBDaGVjayBmb3IgJ3JldHVybiAoKScKICAgICAgICBpZiAoICRyTEwtPlskS25dLT5bX1RPS0VOX10gZXEgJygnICkgewogICAgICAgICAgICBteSAkS25uID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLbik7CiAgICAgICAgICAgIGlmICggJEtubiAmJiAkckxMLT5bJEtubl0tPltfVE9LRU5fXSBlcSAnKScgKSB7CiAgICAgICAgICAgICAgICAkcmFyZ19saXN0LT57c2hpZnRfY291bnRfbWF4fSA9IDA7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZWxzZSB7CiAgICAgICAgREVWRUxfTU9ERSAmJiBGYXVsdCgiTmVpdGhlciBzZXFub19saXN0IG5vciBLX2xpc3Rfc3RhcnQgZGVmaW5lZFxuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgSW5pdGlhbGl6ZSB0aGUgYXJnIGNvdW50IGZvciB0aGlzIGNhbGwuICBXZSBzdGFydCB3aXRoIGFueSAnc2hpZnQnIGNvdW50cwogICAgIyBwcmV2aW91c2x5IHNlZW4gaWYgdGhpcyBpcyBub3QgYSBzaWduYXR1cmUgb3IgJ3JldHVybicgbGlzdAogICAgbXkgJGFyZ19jb3VudCA9IDA7CiAgICBpZiAoICRzZXFub19saXN0ICYmICRzaGlmdF9jb3VudF9taW5faW5wdXQgJiYgISRpc19zaWduYXR1cmUgKSB7CiAgICAgICAgJGFyZ19jb3VudCA9ICRzaGlmdF9jb3VudF9taW5faW5wdXQ7CiAgICB9CgogICAgIyBGb3Igc2lnbmF0dXJlIGxpc3RzIHdlIG5lZWQgdG8gcmVtZW1iZXIgYSBtaW5pbXVtCiAgICBteSAkYXJnX2NvdW50X21pbjsKCiAgICBteSBAc2Vxbm9fc3RhY2s7CiAgICBpZiAoJHNlcW5vX2xpc3QpIHsgcHVzaCBAc2Vxbm9fc3RhY2ssICRzZXFub19saXN0IH0KCiAgICBteSAkS0sgPSAkS19saXN0X3N0YXJ0OwogICAgbXkgJEtLX2xhc3RfbGFzdF9uYjsKICAgIG15ICRLS19sYXN0X25iOwogICAgbXkgJEtLX3RoaXNfbmIgPSAkS19saXN0X3N0YXJ0OwoKICAgIG15ICRiYWNrdXBfb25fbGFzdCA9IHN1YiB7CgogICAgICAgICMgZXhjbHVkZSB0aGUgbGF0ZXN0IHRva2VuIHVwb24gZW5jb3VudGVyaW5nIGVuZCBvZiBsaXN0CiAgICAgICAgIyB0byBhdm9pZCBhZGRpbmcgMSBleHRyYSBjb21tYSBhdCB0aGUgZW5kCiAgICAgICAgJEtLX3RoaXNfbmIgICAgICA9ICRLS19sYXN0X25iOwogICAgICAgICRLS19sYXN0X25iICAgICAgPSAkS0tfbGFzdF9sYXN0X25iOwogICAgICAgICRLS19sYXN0X2xhc3RfbmIgPSB1bmRlZjsKICAgICAgICByZXR1cm47CiAgICB9OyAjIyBlbmQgJGJhY2t1cF9vbl9sYXN0ID0gc3ViCgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIE1haW4gbG9vcCB0byBzY2FuIHRoZSBjb250YWluZXIgbG9va2luZyBmb3IgbGlzdCBpdGVtcy4KICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgd2hpbGUgKCArKyRLSyA8ICRLX2xpc3RfZW5kICkgewoKICAgICAgICAjIHNhZmV0eSBjaGVjayAtIHNob3VsZG4ndCBoYXBwZW4KICAgICAgICBpZiAoICEkS0sgfHwgJEtLIDw9ICRLS190aGlzX25iICkgewogICAgICAgICAgICBpZiAoREVWRUxfTU9ERSkgewogICAgICAgICAgICAgICAgbXkgJGxubyA9ICRyTEwtPlskS0tfdGhpc19uYl0tPltfTElORV9JTkRFWF9dICsgMTsKICAgICAgICAgICAgICAgIEZhdWx0KCJuZWFyIGxpbmUgJGxubzogaW5kZXggJEtLIGRlY3JlYXNlZCwgd2FzICRLS190aGlzX25iXG4iKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBteSAkdHlwZSA9ICRyTEwtPlskS0tdLT5bX1RZUEVfXTsKICAgICAgICBuZXh0ICAgaWYgKCAkdHlwZSBlcSAnYicgKTsKICAgICAgICBuZXh0ICAgaWYgKCAkdHlwZSBlcSAnIycgKTsKICAgICAgICBsYXN0ICAgaWYgKCAkdHlwZSBlcSAnOycgKTsKICAgICAgICByZXR1cm4gaWYgKCAkdHlwZSBlcSAnLi4nICk7CgogICAgICAgICMgaS5lLiwgKCRzdHI9fi8oXGQrKShcdyspLykgbWF5IGJlIGEgbGlzdCBvZiBuIGl0ZW1zCiAgICAgICAgcmV0dXJuIGlmICggJHR5cGUgZXEgJz1+JyApOwoKICAgICAgICAkS0tfbGFzdF9sYXN0X25iID0gJEtLX2xhc3RfbmI7CiAgICAgICAgJEtLX2xhc3RfbmIgICAgICA9ICRLS190aGlzX25iOwogICAgICAgICRLS190aGlzX25iICAgICAgPSAkS0s7CiAgICAgICAgbXkgJHRva2VuID0gJHJMTC0+WyRLS10tPltfVE9LRU5fXTsKCiAgICAgICAgIyBIYW5kbGUgYSBzZXF1ZW5jZWQgaXRlbQogICAgICAgIGlmICggbXkgJHNlcW5vID0gJHJMTC0+WyRLS10tPltfVFlQRV9TRVFVRU5DRV9dICkgewoKICAgICAgICAgICAgaWYgKCAkaXNfb3BlbmluZ190eXBleyR0eXBlfSApIHsKICAgICAgICAgICAgICAgIGlmICggJHRva2VuIGVxICcoJyApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBTa2lwIHBhc3QgYXJncyB0byBhcmdzIHRvIHN1YnMgbm90IHJldHVybmluZwogICAgICAgICAgICAgICAgICAgICMgbGlzdHMsIGxpa2UgJ3BvcCgnICdsZW5ndGgoJwogICAgICAgICAgICAgICAgICAgIGlmICgkS0tfbGFzdF9uYikgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkdG9rZW5fbGFzdCA9ICRyTEwtPlskS0tfbGFzdF9uYl0tPltfVE9LRU5fXTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHR5cGVfbGFzdCAgPSAkckxMLT5bJEtLX2xhc3RfbmJdLT5bX1RZUEVfXTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAgICR0eXBlX2xhc3QgZXEgJ2snCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkaXNfbm9uX2ludGVyZmVyaW5nX2tleXdvcmR7JHRva2VuX2xhc3R9ICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEtLID0gJHNlbGYtPltfS19jbG9zaW5nX2NvbnRhaW5lcl9dLT57JHNlcW5vfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgSWYgbm90IGEgbGlzdC4uCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJHNlbGYtPmlzX2xpc3RfYnlfc2Vxbm8oJHNlcW5vKSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgYWx3YXlzIGVudGVyIGEgY29udGFpbmVyIGZvbGxvd2luZyAncmV0dXJuJywgYXMgaW46CiAgICAgICAgICAgICAgICAgICAgICAgICMgICByZXR1cm4gKGZpbmRfc3ViKCRzdWJuYW1lKSA9fiAvXiguKik6KFxkKyktKFxkKykkLyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJGlzX3JldHVybl9saXN0ICYmICRLS19sYXN0X25iID09ICRLX2xpc3Rfc3RhcnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBzZXFub19zdGFjaywgJHNlcW5vOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJEtjID0gJHNlbGYtPltfS19jbG9zaW5nX2NvbnRhaW5lcl9dLT57JHNlcW5vfTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhJEtjICkgeyAkYmFja3VwX29uX2xhc3QtPigpOyBsYXN0IH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgRW50ZXIgbmVzdGVkIHBhcmVucyB3aXRoIGlubmVyIGxpc3QKICAgICAgICAgICAgICAgICAgICAgICAgIyAgICggKCAkdjEsICR2MikgKQogICAgICAgICAgICAgICAgICAgICAgICAjICAgfCB8ICAgICAgICAgfCB8CiAgICAgICAgICAgICAgICAgICAgICAgICMgJEtLICRLbiAgICRLY19wICRLYwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRzZWxmLT5bX3JoYXNfbGlzdF9dLT57JHNlcW5vfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRLY19wID0gJHNlbGYtPktfcHJldmlvdXNfY29kZSgkS2MpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkS2NfcCAmJiAkckxMLT5bJEtjX3BdLT5bX1RPS0VOX10gZXEgJyknICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRzZXFub19jX3AgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJMTC0+WyRLY19wXS0+W19UWVBFX1NFUVVFTkNFX107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkc2Vxbm9fY19wICYmICRzZXFub19jX3AgPT0gJHNlcW5vICsgMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJEtuID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLSyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEtuICYmICRyTEwtPlskS25dLT5bX1RPS0VOX10gZXEgJygnICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAc2Vxbm9fc3RhY2ssICRzZXFubzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgZW50ZXIgYSBsaXN0IHNsaWNlLCBzdWNoIGFzICcoY2FsbGVyKVsxLDJdJwogICAgICAgICAgICAgICAgICAgICAgICBteSAkS24gPSAkc2VsZi0+S19uZXh0X2NvZGUoJEtjKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkS24gJiYgJHJMTC0+WyRLbl0tPltfVE9LRU5fXSBlcSAnWycgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkc2Vxbm9fbmV4dCA9ICRyTEwtPlskS25dLT5bX1RZUEVfU0VRVUVOQ0VfXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggICAkc2Vxbm9fbmV4dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRzZWxmLT5pc19saXN0X2J5X3NlcW5vKCRzZXFub19uZXh0KSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEtLID0gJEtuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQHNlcW5vX3N0YWNrLCAkc2Vxbm9fbmV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBteSAkS0tfbiA9ICRzZWxmLT5LX25leHRfY29kZSgkS0spOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJEtLX24pIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGxvb2sgZm9yIHNvbWV0aGluZyBsaWtlIHJldHVybiAoQGxpc3QpLCB3aGljaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3aWxsIG5vdCBiZSBtYXJrZWQgYXMgYSBsaXN0IGR1ZSB0byBsYWNrIG9mIGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY29tbWEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICR0eXBlX0tLX24gID0gJHJMTC0+WyRLS19uXS0+W19UWVBFX107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkdG9rZW5fS0tfbiA9ICRyTEwtPlskS0tfbl0tPltfVE9LRU5fXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJHR5cGVfS0tfbiBlcSAndCcgfHwgJHR5cGVfS0tfbiBlcSAnaScgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHNpZ2lsID0gc3Vic3RyKCAkdG9rZW5fS0tfbiwgMCwgMSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJHNpZ2lsIGVxICdAJyB8fCAkc2lnaWwgZXEgJyUnICkgeyByZXR1cm4gfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkdHlwZV9LS19uIGVxICdrJyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBsb29rIGZvciBzb21ldGhpbmcgbGlrZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIHJldHVybiAobWFwIHsgLi4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhJGlzX25vbl9pbnRlcmZlcmluZ19rZXl3b3JkeyR0b2tlbl9LS19ufSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7IH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBhIGxpc3QuLgogICAgICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBEZXNjZW5kIGludG8gYSBwYXJlbiBsaXN0IGluIHNvbWUgc3BlY2lhbCBjYXNlczoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRLS19sYXN0X25iKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHRva2VuX2xhc3QgPSAkckxMLT5bJEtLX2xhc3RfbmJdLT5bX1RPS0VOX107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkdHlwZV9sYXN0ICA9ICRyTEwtPlskS0tfbGFzdF9uYl0tPltfVFlQRV9dOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgJ3JldHVybiAoJyBvciAnbXkgKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRvayA9ICR0eXBlX2xhc3QgZXEgJ2snCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICggJHRva2VuX2xhc3QgZXEgJ3JldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAkdG9rZW5fbGFzdCBlcSAnbXknICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAnLCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb2sgfHw9ICR0eXBlX2xhc3QgZXEgJywnOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgJygoJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9rIHx8PSAkdG9rZW5fbGFzdCBlcSAnKCc7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAnd2FudGFycmF5ID8gKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvayB8fD0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEtLX2xhc3RfbGFzdF9uYgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkaXNfcmV0dXJuX2xpc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHJMTC0+WyRLS19sYXN0X25iXS0+W19UWVBFX10gZXEgJz8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRyTEwtPlskS0tfbGFzdF9sYXN0X25iXS0+W19UT0tFTl9dIGVxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3YW50YXJyYXknOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkb2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBzZXFub19zdGFjaywgJHNlcW5vOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBPdGhlcndpc2Ugc2tpcCBwYXN0IHRoaXMgY29udGFpbmVyCiAgICAgICAgICAgICAgICAkS0sgPSAkc2VsZi0+W19LX2Nsb3NpbmdfY29udGFpbmVyX10tPnskc2Vxbm99OwogICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRpc19jbG9zaW5nX3R5cGV7JHR5cGV9ICkgewogICAgICAgICAgICAgICAgbXkgJHNlcW5vX3Rlc3QgPSBwb3AgQHNlcW5vX3N0YWNrOwogICAgICAgICAgICAgICAgaWYgKCAkc2Vxbm9fdGVzdCAmJiAkc2Vxbm9fdGVzdCBlcSAkc2Vxbm8gKSB7CgogICAgICAgICAgICAgICAgICAgICMgaGlkZSBhbGwgY2xvc2luZyB0b2tlbnMgdG8gYXZvaWQgYWRkaW5nIGFuIGV4dHJhCiAgICAgICAgICAgICAgICAgICAgIyBjb21tYSBhdCB0aGUgZW5kIGF0IHNvbWV0aGluZyBsaWtlICckeCwpJwogICAgICAgICAgICAgICAgICAgICRiYWNrdXBfb25fbGFzdC0+KCk7CiAgICAgICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRiYWNrdXBfb25fbGFzdC0+KCk7CiAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJHR5cGUgZXEgJz8nICkgewoKICAgICAgICAgICAgICAgICMgY29udGludWUgc2Nhbm5pbmcgdGVybmFyeSBmb3IgJ3JldHVybiB3YW50YXJyYXkgPycKICAgICAgICAgICAgICAgIGlmICggICAkckxMLT5bJEtLX2xhc3RfbmJdLT5bX1RPS0VOX10gZXEgJ3dhbnRhcnJheScKICAgICAgICAgICAgICAgICAgICAmJiAkckxMLT5bJEtLX2xhc3RfbmJdLT5bX1RZUEVfXSBlcSAnaycKICAgICAgICAgICAgICAgICAgICAmJiAkS0tfbGFzdF9sYXN0X25iCiAgICAgICAgICAgICAgICAgICAgJiYgJHJMTC0+WyRLS19sYXN0X2xhc3RfbmJdLT5bX1RPS0VOX10gZXEgJ3JldHVybicKICAgICAgICAgICAgICAgICAgICAmJiAkckxMLT5bJEtLX2xhc3RfbGFzdF9uYl0tPltfVFlQRV9dIGVxICdrJyApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAc2Vxbm9fc3RhY2ssICRzZXFubzsKICAgICAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgZ2l2ZSB1cCBpbiBhIHJldHVybiBsaXN0CiAgICAgICAgICAgICAgICBpZiAoJGlzX3JldHVybl9saXN0KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgb3RoZXJ3aXNlIHNraXAgcGFzdCB0aGlzIHRlcm5hcnkKICAgICAgICAgICAgICAgICRLSyA9ICRzZWxmLT5bX0tfY2xvc2luZ190ZXJuYXJ5X10tPnskc2Vxbm99OwogICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICR0eXBlIGVxICc6JyApIHsKICAgICAgICAgICAgICAgIG15ICRzZXFub190ZXN0ID0gcG9wIEBzZXFub19zdGFjazsKICAgICAgICAgICAgICAgIGlmICggJHNlcW5vX3Rlc3QgJiYgJHNlcW5vX3Rlc3QgZXEgJHNlcW5vICkgewoKICAgICAgICAgICAgICAgICAgICAjIGZvciB3YW50YXJyYXkgdGVybmFyeSwgYXNzdW1lIG9uZSBpdGVtIGFmdGVyICc6JwogICAgICAgICAgICAgICAgICAgICMgVE9ETzogaWYgd2FudGFycmF5IHdhcyBwcmVjZWRlZCBieSAnIScgdGhlbiB3ZSBzaG91bGQKICAgICAgICAgICAgICAgICAgICAjIHN3YXAgdGhlIHR3byBjb3VudHMgaGVyZQogICAgICAgICAgICAgICAgICAgICRhcmdfY291bnRfbWluID0gMTsKICAgICAgICAgICAgICAgICAgICAkYmFja3VwX29uX2xhc3QtPigpOwogICAgICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkYmFja3VwX29uX2xhc3QtPigpOwogICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIERFVkVMX01PREUKICAgICAgICAgICAgICAgICAgJiYgRmF1bHQoInVuZXhwZWN0ZWQgc2Vxbm89JHNlcW5vIGZvciB0eXBlPSckdHlwZSdcbiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGhhbmRsZSBpZGVudGlmaWVycwogICAgICAgIGVsc2lmICggJHR5cGUgZXEgJ2knIHx8ICR0eXBlIGVxICd0JyApIHsKICAgICAgICAgICAgbXkgJHNpZ2lsID0gc3Vic3RyKCAkdG9rZW4sIDAsIDEgKTsKCiAgICAgICAgICAgICMgZ2l2ZSB1cCBpZiB3ZSBmaW5kIGxpc3Qgc2lnaWxzIG5vdCBwcmVjZWRlZCBieSAnc2NhbGFyJwogICAgICAgICAgICBpZiAoICRzaWdpbCBlcSAnJScgfHwgJHNpZ2lsIGVxICdAJyApIHsKICAgICAgICAgICAgICAgIG15ICRLX2xhc3QgPSAkc2VsZi0+S19wcmV2aW91c19jb2RlKCRLSyk7CiAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQoJEtfbGFzdCkgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJHR5cGVfbGFzdCA9ICRyTEwtPlskS19sYXN0XS0+W19UWVBFX107CiAgICAgICAgICAgICAgICAgICAgbmV4dCBpZiAoICR0eXBlX2xhc3QgZXEgJysnIHx8ICR0eXBlX2xhc3QgZXEgJ3AnICk7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBpZiAoICR0eXBlX2xhc3QgZXEgcXtcXH0gKTsKICAgICAgICAgICAgICAgICAgICBuZXh0IGlmICggJHR5cGVfbGFzdCBlcSAnIScgKTsKICAgICAgICAgICAgICAgICAgICBteSAkdG9rZW5fbGFzdCA9ICRyTEwtPlskS19sYXN0XS0+W19UT0tFTl9dOwogICAgICAgICAgICAgICAgICAgIG5leHQgaWYgKCAkdHlwZV9sYXN0IGVxICdrJyAmJiAkdG9rZW5fbGFzdCBlcSAnc2NhbGFyJyApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHJlbWVtYmVyIHRoZSBuYW1lIG9mIHRoZSBmaXJzdCBpdGVtLCBtYXliZSBzb21ldGhpbmcgbGlrZSAnJHNlbGYnCiAgICAgICAgICAgIGVsc2lmICggJHNpZ2lsIGVxICckJwogICAgICAgICAgICAgICAgJiYgISRzZWxmX25hbWUKICAgICAgICAgICAgICAgICYmICEkYXJnX2NvdW50ICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJHNlbGZfbmFtZSA9ICR0b2tlbjsKICAgICAgICAgICAgICAgICRyYXJnX2xpc3QtPntzZWxmX25hbWV9ID0gJHNlbGZfbmFtZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICMgY29udGludWUgc2VhcmNoCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgaGFuZGxlIGNvbW1hczogY291bnQgY29tbWFzIHNlcGFyYXRpbmcgYXJncyBpbiBhIGxpc3QKICAgICAgICBlbHNpZiAoICR0eXBlIGVxICcsJyApIHsKICAgICAgICAgICAgJGFyZ19jb3VudCsrOwogICAgICAgIH0KCiAgICAgICAgIyB0cmVhdCBmYXQgY29tbWFzIGFzIGNvbW1hcwogICAgICAgIGVsc2lmICggJHR5cGUgZXEgJz0+JyApIHsKICAgICAgICAgICAgJGFyZ19jb3VudCsrOwogICAgICAgIH0KCiAgICAgICAgIyBhbiAnPScgaW4gYSBzaWduYXR1cmUgaW5kaWNhdGVzIGFuIG9wdGlvbmFsIGFyZwogICAgICAgIGVsc2lmICggJHR5cGUgZXEgJz0nICkgewogICAgICAgICAgICBpZiAoICRpc19zaWduYXR1cmUgJiYgIWRlZmluZWQoJGFyZ19jb3VudF9taW4pICkgewogICAgICAgICAgICAgICAgJGFyZ19jb3VudF9taW4gPSAkYXJnX2NvdW50OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGZvciBhIHBhcmVuLWxlc3MgY2FsbAogICAgICAgIGVsc2lmICggJGlzX2t3VXskdHlwZX0gKSB7CgogICAgICAgICAgICAjIFNvbWV0aGluZyBsaWtlICdsZW5ndGggJHN0cicgaXMgb2sKICAgICAgICAgICAgaWYgKCAkdHlwZSBlcSAnaycgKSB7CgogICAgICAgICAgICAgICAgIyBTb21ldGhpbmcgbGlrZSAnbGVuZ3RoICRzdHInIGlzIG9rCiAgICAgICAgICAgICAgICBuZXh0IGlmICggJGlzX25vbl9pbnRlcmZlcmluZ19rZXl3b3JkeyR0b2tlbn0gKTsKCiAgICAgICAgICAgICAgICBuZXh0IGlmICggJHRva2VuIGVxICd3YW50YXJyYXknICk7CgogICAgICAgICAgICAgICAgIyBob3Agb3ZlciBhc3VicwogICAgICAgICAgICAgICAgbmV4dCBpZiAoICR0b2tlbiBlcSAnc3ViJyApOwoKICAgICAgICAgICAgICAgICMgc29tZXRoaW5nIGxpa2UgcmV0dXJuIDEgaWYgLi4uCiAgICAgICAgICAgICAgICBpZiAoICRpc19pZl91bmxlc3N7JHRva2VufSApIHsKICAgICAgICAgICAgICAgICAgICAkYmFja3VwX29uX2xhc3QtPigpOwogICAgICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgQ2VydGFpbiBzdWJzZXF1ZW50IHRva2VucyBwcmV2ZW50IHByb2JsZW1zCiAgICAgICAgICAgIG15ICRLbiA9ICRzZWxmLT5LX25leHRfY29kZSgkS0spOwogICAgICAgICAgICBuZXh0IHVubGVzcyBkZWZpbmVkKCRLbik7CiAgICAgICAgICAgIG15ICR0b2tlbl9LbiA9ICRyTEwtPlskS25dLT5bX1RPS0VOX107CiAgICAgICAgICAgIG15ICR0eXBlX0tuICA9ICRyTEwtPlskS25dLT5bX1RZUEVfXTsKICAgICAgICAgICAgbmV4dAogICAgICAgICAgICAgIGlmICggJHRva2VuX0tuIGVxICcpJwogICAgICAgICAgICAgICAgfHwgJHR5cGVfS24gZXEgJz0+JwogICAgICAgICAgICAgICAgfHwgJHR5cGVfS24gZXEgJy0+JwogICAgICAgICAgICAgICAgfHwgJHR5cGVfS24gZXEgJywnICk7CgogICAgICAgICAgICAjIENlcnRhaW4ga2V5d29yZHMgcmV0dXJuaW5nIHNjYWxhcnMgYXJlIG9rYXkgaWYgbm90IG1hZGUKICAgICAgICAgICAgIyBhcyBwYXJlbi1sZXNzIGNhbGxzCiAgICAgICAgICAgIG5leHQKICAgICAgICAgICAgICBpZiAoICR0eXBlIGVxICdrJwogICAgICAgICAgICAgICAgJiYgJHRva2VuX0tuIGVxICcoJwogICAgICAgICAgICAgICAgJiYgJGlzX2tleXdvcmRfcmV0dXJuaW5nX3NjYWxhcnskdG9rZW59ICk7CgogICAgICAgICAgICAjIE90aGVyd2lzZSwgdGhlIHNhZmUgdGhpbmcgaXMgdG8gZ2l2ZSB1cCBiZWNhdXNlIGEgZnVuY3Rpb24gY2FsbDoKICAgICAgICAgICAgIyAtbWlnaHQgYmUgcGFyZW4tbGVzcyB3aXRoIG11bHRpcGxlIGFyZ3MsIG9yCiAgICAgICAgICAgICMgLWl0IG1pZ2h0IHJldHVybiBhIGxpc3QgKGkuZS4gc3BsaWNlLCBzcGxpdCwgbG9jYWx0aW1lLCAuLi4pCiAgICAgICAgICAgICMgd2hpY2ggd2lsbCBpbnRlcmZlcmUgd2l0aCBjb3VudGluZyBhcmdzCiAgICAgICAgICAgIGlmIChERUJVR19DT1VOVCkgewogICAgICAgICAgICAgICAgbXkgJGxubyAgICAgICAgICAgICAgID0gJHJMTC0+WyRLS10tPltfTElORV9JTkRFWF9dICsgMTsKICAgICAgICAgICAgICAgIG15ICRpbnB1dF9zdHJlYW1fbmFtZSA9IGdldF9pbnB1dF9zdHJlYW1fbmFtZSgpOwogICAgICAgICAgICAgICAgcHJpbnQgeypTVERFUlJ9CiJERUJVR19DT1VOVDogZmlsZSAkaW5wdXRfc3RyZWFtX25hbWUgbGluZT0kbG5vIHR5cGU9JHR5cGUgdG9rPSR0b2tlbiB0b2tlbl9Lbj0kdG9rZW5fS25cbiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICMgY29udGludWUgc2VhcmNoCiAgICAgICAgfQogICAgfSAjIyBlbmQgd2hpbGUgKCArKyRLSyA8ICRLX2xpc3RfZW5kKQoKICAgICMgSW5jcmVhc2UgdGhlIGNvdW50IGJ5IDEgaWYgdGhlIGxpc3QgZG9lcyBub3QgaGF2ZSBhIHRyYWlsaW5nIGNvbW1hCiAgICBpZiAoICAgZGVmaW5lZCgkS0tfdGhpc19uYikKICAgICAgICAmJiAkS0tfdGhpc19uYiA+ICRLX2xpc3Rfc3RhcnQKICAgICAgICAmJiAkckxMLT5bJEtLX3RoaXNfbmJdLT5bX1RZUEVfXSBuZSAnLCcgKQogICAgewogICAgICAgICRhcmdfY291bnQrKzsKICAgIH0KCiAgICBpZiAoICFkZWZpbmVkKCRhcmdfY291bnRfbWluKSApIHsKICAgICAgICAkYXJnX2NvdW50X21pbiA9ICRhcmdfY291bnQ7CiAgICB9CgogICAgJHJhcmdfbGlzdC0+e3NoaWZ0X2NvdW50X21pbn0gPSAkYXJnX2NvdW50X21pbjsKICAgICRyYXJnX2xpc3QtPntzaGlmdF9jb3VudF9tYXh9ID0gJGFyZ19jb3VudDsKICAgIHJldHVybjsKCn0gIyMgZW5kIHN1YiBjb3VudF9saXN0X2VsZW1lbnRzCgojIEEgY29uc3RhbnQgdG8gbGltaXQgYmFja3dhcmQgc2VhcmNoZXMKdXNlIGNvbnN0YW50IE1BTllfVE9LRU5TID0+IDEwMDsKCm15ICVpc19zaGlmdF9wb3A7Cm15ICVpc19zY2FsYXJfc2lnaWw7Cm15ICVpc19hcnJheV9zaWdpbDsKCkJFR0lOIHsKICAgIG15IEBxID0gcXcoIHNoaWZ0IHBvcCApOwogICAgQGlzX3NoaWZ0X3BvcHtAcX0gICAgPSAoMSkgeCBzY2FsYXIoQHEpOwogICAgQHEgICAgICAgICAgICAgICAgICAgPSBxdyggJCAqICYgKTsKICAgIEBpc19zY2FsYXJfc2lnaWx7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKICAgIEBxICAgICAgICAgICAgICAgICAgID0gcXcoIEAgJSApOwogICAgQGlzX2FycmF5X3NpZ2lse0BxfSAgPSAoMSkgeCBzY2FsYXIoQHEpOwp9CgpzdWIgY291bnRfcHJvdG90eXBlX2FyZ3MgewogICAgbXkgKCRzdHJpbmcpID0gQF87CgogICAgIyBHaXZlbgogICAgIyAgJHN0cmluZyA9IGEgc3RyaW5nIHdpdGggYSBwcm90b3R5cGUgaW4gcGFyZW5zLCBzdWNoIGFzICcoJCQ7JCknCiAgICAjIFJldHVybnMgKCRjb3VudF9taW4sICRjb3VudF9tYXgpCiAgICAjICAkY291bnRfbWluID0gbWluIHNwZWNpZmljIG51bWJlciBvZiBhcmdzIGV4cGVjdGVkLCBvcgogICAgIyAgICAgICAgICAgICAgIHVuZGVmIGlmIG51bWJlciBvZiBhcmdzIGNhbiB2YXJ5CiAgICAjICAkY291bnRfbWF4ID0gbWF4IHNwZWNpZmljIG51bWJlciBvZiBhcmdzIGV4cGVjdGVkLCBvcgogICAgIyAgICAgICAgICAgICAgIHVuZGVmIGlmIG51bWJlciBvZiBhcmdzIGNhbiB2YXJ5CiAgICBteSBAY2hhcnMgICAgID0gc3BsaXQgLy8sICRzdHJpbmc7CiAgICBteSAkY291bnRfbWluID0gMDsKICAgIG15ICRjb3VudF9tYXggPSAwOwogICAgbXkgJHNhd19zZW1pY29sb247CiAgICBteSAkYnVtcF9jb3VudCA9IHN1YiB7CiAgICAgICAgJGNvdW50X21heCsrOwogICAgICAgICRjb3VudF9taW4rKyBpZiAoICEkc2F3X3NlbWljb2xvbiApOwogICAgICAgIHJldHVybjsKICAgIH07CiAgICBteSAkc2F3X2FycmF5ID0gc3ViIHsKICAgICAgICAkY291bnRfbWF4ID0gdW5kZWY7CiAgICAgICAgJGNvdW50X21pbiA9IHVuZGVmIGlmICggISRzYXdfc2VtaWNvbG9uICk7CiAgICAgICAgcmV0dXJuOwogICAgfTsKICAgIHdoaWxlIChAY2hhcnMpIHsKICAgICAgICBteSAkY2ggPSBzaGlmdCBAY2hhcnM7CiAgICAgICAgaWYgICAgKCAhZGVmaW5lZCgkY2gpICkgICAgICAgICAgICAgICAgIHsgJHNhd19hcnJheS0+KCk7IGxhc3QgfQogICAgICAgIGVsc2lmICggJGNoIGVxICcoJyApICAgICAgICAgICAgICAgICAgICB7IGxhc3QgaWYgKCRjb3VudF9taW4pIH0KICAgICAgICBlbHNpZiAoICRjaCBlcSAnKScgKSAgICAgICAgICAgICAgICAgICAgeyBsYXN0IH0KICAgICAgICBlbHNpZiAoICRjaCBlcSAnOycgJiYgISRzYXdfc2VtaWNvbG9uICkgeyAkc2F3X3NlbWljb2xvbiA9IDEgfQogICAgICAgIGVsc2lmICggJGNoIGVxICdfJyAmJiAhJHNhd19zZW1pY29sb24gKSB7CiAgICAgICAgICAgICRzYXdfc2VtaWNvbG9uID0gMTsKICAgICAgICAgICAgJGJ1bXBfY291bnQtPigpIGlmICggISRjb3VudF9taW4gKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkaXNfYXJyYXlfc2lnaWx7JGNofSApICB7ICRzYXdfYXJyYXktPigpOyBsYXN0IH0KICAgICAgICBlbHNpZiAoICRpc19zY2FsYXJfc2lnaWx7JGNofSApIHsgJGJ1bXBfY291bnQtPigpOyB9CiAgICAgICAgZWxzaWYgKCAkY2ggZXEgcXtcXH0gKSB7CiAgICAgICAgICAgICRjaCA9IHNoaWZ0IEBjaGFyczsKICAgICAgICAgICAgbGFzdCB1bmxlc3MgZGVmaW5lZCgkY2gpOwogICAgICAgICAgICAkYnVtcF9jb3VudC0+KCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgeyBuZXh0IH0KICAgIH0gIyMgZW5kIHdoaWxlIChAY2hhcnMpCiAgICByZXR1cm4gKCAkY291bnRfbWluLCAkY291bnRfbWF4ICk7Cn0gIyMgZW5kIHN1YiBjb3VudF9wcm90b3R5cGVfYXJncwoKc3ViIGZpbmRfc3ViX3Rva2VuIHsKCiAgICBteSAoICRzZWxmLCAkc2Vxbm9fYmxvY2sgKSA9IEBfOwoKICAgICMgR2l2ZW46CiAgICAjICAgJHNlcW5vX2Jsb2NrID0gc2VxdWVuY2UgbnVtYmVyIG9mIGEgc3ViIGJsb2NrIGJyYWNlCiAgICAjIFJldHVybjoKICAgICMgICAkS3N1YiA9IGluZGV4IG9mIHRoZSBhY3R1YWwgJ3N1YicgdG9rZW4gZm9yIHRoZSBzdWIKICAgICMgICAgICAgICAgIHRoaXMgd2lsbCBpbmNsdWRlIHRoZSBuYW1lIG9mIGEgbmFtZWQgc3ViLCBhbmQgYW55IHByb3RvdHlwZQogICAgIyAgIHVuZGVmICAgaWYgY2Fubm90IGZpbmQgaXQ7IHRoaXMgaXMgbm90IGEgY3JpdGljYWwgc3ViLCBzbyBubyBoZXJvaWNzCiAgICAjCiAgICAjIE5vdGF0aW9uOgogICAgIwogICAgIyAgICBzdWIgZmluZF9zdWJfdG9rZW4gewogICAgIyAgICB8ICAgICAgICAgICAgICAgICAgfAogICAgIyAgICAkS3N1YiAgICAgICAgICAgICAgLS0kS19vcGVuaW5nX2NvbnRhaW5lciBmb3IgJHNlcW5vX2Jsb2NrCgogICAgbXkgJHJMTCA9ICRzZWxmLT5bX3JMTF9dOwoKICAgICMgU2VlIGlmIHN1YiByZXNwYWNlX3Rva2VucyBzYXZlZCB0aGUgaW5kZXggb2YgdGhlIHByZXZpb3VzIHR5cGUgJ1MnCiAgICAjIGZvciB1cy4gTWF5IG5lZWQgdG8gYmFjayB1cCAxIHRva2VuIGlmIHNwYWNlcyB3ZXJlIGRlbGV0ZWQuCiAgICBteSAkS19zdWIgPSAkc2VsZi0+W19yS19zdWJfYnlfc2Vxbm9fXS0+eyRzZXFub19ibG9ja307CiAgICBpZiAoIGRlZmluZWQoJEtfc3ViKSApIHsKICAgICAgICBteSAkdHlwZSA9ICRyTEwtPlskS19zdWJdLT5bX1RZUEVfXTsKICAgICAgICBpZiAoICR0eXBlIG5lICdTJyApIHsKICAgICAgICAgICAgJEtfc3ViIC09IDE7CiAgICAgICAgICAgICR0eXBlID0gJHJMTC0+WyRLX3N1Yl0tPltfVFlQRV9dOwogICAgICAgICAgICBpZiAoICR0eXBlIG5lICdTJyApIHsKICAgICAgICAgICAgICAgIGlmIChERVZFTF9NT0RFKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJHRva2VuID0gJHJMTC0+WyRLX3N1Yl0tPltfVE9LRU5fXTsKICAgICAgICAgICAgICAgICAgICBteSAkbG5vICAgPSAkckxMLT5bJEtfc3ViXS0+W19MSU5FX0lOREVYX10gKyAxOwogICAgICAgICAgICAgICAgICAgIG15ICRibG9ja190eXBlID0KICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5bX3JibG9ja190eXBlX29mX3NlcW5vX10tPnskc2Vxbm9fYmxvY2t9OwogICAgICAgICAgICAgICAgICAgIEZhdWx0KDw8RU9NKTsKbGluZSAkbG5vOiBCYWQgS3N1Yj0kS19zdWIgZm9yIGJsb2NrICRzZXFub19ibG9jaywKZXhwZWN0aW5nIHR5cGUgJ1MnIGFuZCB0b2tlbj0kYmxvY2tfdHlwZQpmb3VuZCB0eXBlICckdHlwZScgYW5kIHRva2VuPSckdG9rZW4nCkVPTQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBidXQgdHJ5IHRvIGtlZXAgZ29pbmcKICAgICAgICAgICAgICAgICMgd2l0aCB0aGUgaGVscCBvZiB0aGUgc2VhcmNoIGxvb3AgYmVsb3cuCiAgICAgICAgICAgICAgICAkS19zdWIgPSB1bmRlZjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIE11c3Qgc2VhcmNoIGZvciBpdC4uLgogICAgIyBTY2FuIGJhY2t3YXJkIGZyb20gdGhlIG9wZW5pbmcgYnJhY2UgdG8gZmluZCB0aGUga2V5d29yZCAnc3ViJwogICAgaWYgKCAhZGVmaW5lZCgkS19zdWIpICkgewoKICAgICAgICAjIFdlIG5vcm1hbGx5IG9ubHkgYXJyaXZlIGhlcmUgZm9yIGFub255bW91cyBzdWJzLiBCdXQgYWxzbwogICAgICAgICMgaWYgLS1pbmRlbnQtb25seSBpcyBzZXQgYmVjYXVzZSByZXNwYWNlX3Rva2VucyBpcyBza2lwcGVkLgogICAgICAgIG15ICRLX29wZW5pbmdfYmxvY2sgPSAkc2VsZi0+W19LX29wZW5pbmdfY29udGFpbmVyX10tPnskc2Vxbm9fYmxvY2t9OwogICAgICAgIG15ICRLdF9taW4gICAgICAgICAgPSAkS19vcGVuaW5nX2Jsb2NrIC0gTUFOWV9UT0tFTlM7CiAgICAgICAgaWYgKCAkS3RfbWluIDwgMCApIHsgJEt0X21pbiA9IDAgfQogICAgICAgIGZvcmVhY2ggbXkgJEt0ICggcmV2ZXJzZSggJEt0X21pbiAuLiAkS19vcGVuaW5nX2Jsb2NrICkgKSB7CiAgICAgICAgICAgIG15ICR0b2tlbiA9ICRyTEwtPlskS3RdLT5bX1RPS0VOX107CiAgICAgICAgICAgIG15ICR0eXBlICA9ICRyTEwtPlskS3RdLT5bX1RZUEVfXTsKICAgICAgICAgICAgaWYgKCAkdHlwZSBlcSAnUycgKSB7CgogICAgICAgICAgICAgICAgIyB0eXBlICdTJyBjb3VsZCBiZSAnbWV0aG9kIHh4eCcgb3IgJyRmbj1zdWIgKCkgeycgLSBzZWUgYzM3MgogICAgICAgICAgICAgICAgJEtfc3ViID0gJEt0OwogICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICggJHR5cGUgZXEgJ2snIHx8ICR0eXBlIGVxICdpJyApCiAgICAgICAgICAgICAgICAmJiBzdWJzdHIoICR0b2tlbiwgMCwgMyApIGVxICdzdWInICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICMgYW5vbnltb3VzIHN1YnMgYXJlIHR5cGUgJ2snCiAgICAgICAgICAgICAgICAkS19zdWIgPSAkS3Q7CiAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuICRLX3N1YjsKfSAjIyBlbmQgc3ViIGZpbmRfc3ViX3Rva2VuCgpzdWIgY291bnRfZGVmYXVsdF9zdWJfYXJncyB7CiAgICBteSAoICRzZWxmLCAkaXRlbSwgJHNlcW5vICkgPSBAXzsKCiAgICAjIEdpdmVuOgogICAgIyAgICRpdGVtID0gaGFzaCByZWYgd2l0aCBzdWIgYXJnIGluZm8KICAgICMgICAkc2Vxbm8gID0+IHNlcXVlbmNlIG51bWJlciBvZiBhIHN1YiBibG9jayBvZiBhIHBhcmVuCiAgICAjICAgICAgIGNvbnRhaW5pbmcgcG9zc2libGUgZGVmYXVsdCBhcmdzCiAgICAjIFRhc2s6CiAgICAjICAgY291bnQgZGVmYXVsdCBhcmdzIGFuZCB1cGRhdGUgbWluaW11bSBhcmcgY291bnQgaW4gJGl0ZW0KCiAgICBteSAkckxMID0gJHNlbGYtPltfckxMX107CiAgICByZXR1cm4gdW5sZXNzICgkc2Vxbm8pOwoKICAgICMgVGhlIHRva2VuIGJlZm9yZSB0aGUgb3BlbmluZyBtdXN0IGJlIGEgJywnIG9yICcoJwogICAgbXkgJEtfbyAgICA9ICRzZWxmLT5bX0tfb3BlbmluZ19jb250YWluZXJfXS0+eyRzZXFub307CiAgICBteSAkS190ZXN0ID0gJHNlbGYtPktfcHJldmlvdXNfY29kZSgkS19vKTsKICAgIHJldHVybiB1bmxlc3MgZGVmaW5lZCgkS190ZXN0KTsKICAgIG15ICR0b2tlbl90ZXN0ID0gJHJMTC0+WyRLX3Rlc3RdLT5bX1RPS0VOX107CiAgICByZXR1cm4gaWYgKCAkdG9rZW5fdGVzdCBuZSAnLCcgJiYgJHRva2VuX3Rlc3QgbmUgJygnICk7CgogICAgIyBDaGVjayB0aGF0IGFuIG9wZW5pbmcgdG9rZW4gaGFzIHRoZSBwcmV2aW91cyBzZXF1ZW5jZSBudW1iZXIKICAgIGlmICggJHRva2VuX3Rlc3QgZXEgJygnICkgewogICAgICAgIG15ICRzZXFub19vID0gJHJMTC0+WyRLX3Rlc3RdLT5bX1RZUEVfU0VRVUVOQ0VfXTsKICAgICAgICBpZiAoICEkc2Vxbm9fbyB8fCAkc2Vxbm9fbyAhPSAkc2Vxbm8gLSAxICkgewoKICAgICAgICAgICAgIyBzaG91bGRuJ3QgaGFwcGVuOiBtYXkgYmUgYmFkIGNhbGwgdmFsdWUgc2luY2UgdGhlIHRva2VuCiAgICAgICAgICAgICMgd2l0aCAnJHNlcW5vJyB3YXMganVzdCBiZWZvcmUgYSBjbG9zaW5nIHBhcmVuCiAgICAgICAgICAgIERFVkVMX01PREUgJiYgRmF1bHQoInNlcW5vX289JHNlcW5vX28gIT0gJHNlcW5vLTFcbiIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICRydHlwZV9jb3VudCA9ICRzZWxmLT5bX3J0eXBlX2NvdW50X2J5X3NlcW5vX10tPnskc2Vxbm99OwogICAgbXkgJGRlZmF1bHRfYXJnX2NvdW50OwogICAgaWYgKCRydHlwZV9jb3VudCkgewoKICAgICAgICAjIE9uZSBvciBtb3JlIGNvbW1hcywgbGlrZTogICggLi4uICR2MSwgJHYyLCAoJGQxLCAkZDIpICk9QF8KICAgICAgICAjIE5vdGUgdGhhdCB0aGUgY29tbWFfY291bnQgZG9lcyBub3QgaW5jbHVkZSBhbnkgdHJhaWxpbmcgY29tbWEKICAgICAgICAjIHNvIHdlIGFsd2F5cyBhZGQgMQogICAgICAgICRkZWZhdWx0X2FyZ19jb3VudCA9ICRydHlwZV9jb3VudC0+eycsJ30gKyAxOwogICAgfQoKICAgIGlmICggIWRlZmluZWQoJGRlZmF1bHRfYXJnX2NvdW50KSApIHsKCiAgICAgICAgIyBDaGVjayBmb3IgZW1wdHkgcGFyZW5zLCBsaWtlOiAgKCAuLi4gJHYxLCAkdjIsICgpICk9QF8KICAgICAgICBteSAkS19uID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLX28pOwogICAgICAgIG15ICRLX2MgPSAkc2VsZi0+W19LX2Nsb3NpbmdfY29udGFpbmVyX10tPnskc2Vxbm99OwogICAgICAgIHJldHVybiBpZiAoICRLX24gPT0gJEtfYyApOwoKICAgICAgICAjIE5vIGNvbW1hcyBidXQgbm90IGVtcHR5LCBzbyAxIGFyZyBpbiBwYXJlbnMKICAgICAgICAjIFNvbWV0aGluZyBsaWtlOiAgKCAuLi4gJHYxLCAkdjIsICgkZDEpICk9QF8KICAgICAgICAkZGVmYXVsdF9hcmdfY291bnQgPSAxOwogICAgfQogICAgcmV0dXJuIHVubGVzcyAoJGRlZmF1bHRfYXJnX2NvdW50KTsKCiAgICAjIFVwZGF0ZSB0aGUgbWluaW11bSBjb3VudCB0byBleGNsdWRlIHRoZSBkZWZhdWx0cwogICAgaWYgKCAkaXRlbS0+e3NoaWZ0X2NvdW50X21pbn0gPj0gJGRlZmF1bHRfYXJnX2NvdW50ICkgewogICAgICAgICRpdGVtLT57c2hpZnRfY291bnRfbWlufSAtPSAkZGVmYXVsdF9hcmdfY291bnQ7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBERVZFTF9NT0RFCiAgICAgICAgICAmJiBGYXVsdCgKImRlZmF1bHQgY291bnQgaXMgJGRlZmF1bHRfYXJnX2NvdW50IGJ1dCB0b3RhbCBpcyAkaXRlbS0+e3NoaWZ0X2NvdW50X21pbn0iCiAgICAgICAgICApOwogICAgfQoKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGNvdW50X2RlZmF1bHRfc3ViX2FyZ3MKCnN1YiBjb3VudF9zdWJfaW5wdXRfYXJncyB7CiAgICBteSAoICRzZWxmLCAkaXRlbSApID0gQF87CgogICAgIyBHaXZlbjogJGl0ZW0gPSBoYXNoIHJlZiB3aXRoCiAgICAjICAgc2Vxbm8gID0+ICRzZXFub19ibG9jayA9IHNlcXVlbmNlIG51bWJlciBvZiBhIHN1YiBibG9jawogICAgIyAgIG1heF9hcmdfY291bnQgPT4gb3B0aW9uYWwgb3B0aW1pemF0aW9uIGZsYWcsIHNlZSBub3RlIGJlbG93CgogICAgIyBVcGRhdGVzIGhhc2ggcmVmICRpdGVtIHdpdGggdmFsdWVzIGZvciBrZXlzOgogICAgIyAgIHNoaWZ0X2NvdW50X21pbiAgPT4gbWluaW11bSBhYnNvbHV0ZSBudW1iZXIgb2YgaW5wdXQgYXJncwogICAgIyAgIHNoaWZ0X2NvdW50X21heCAgPT4gbWF4aW11bSBhYnNvbHV0ZSBudW1iZXIgb2YgaW5wdXQgYXJncwogICAgIyAgIHNlbGZfbmFtZSAgICA9PiBuYW1lIG9mIGZpcnN0IGFyZyAoaWYgaXQgY2FuIGJlIGRldGVybWluZWQpCiAgICAjICAgaXNfc2lnbmF0dXJlID0+IHRydWUgaWYgYXJncyBhcmUgaW4gYSBzaWduYXR1cmUKICAgICMgICAuLiBwbHVzIHNldmVyYWwgb3RoZXIgcXVhbnRpdGllcyBvZiBpbnRlcmVzdCB0byB0aGUgY2FsbGVyCiAgICAjIFRoZXNlIGtleXMgYXJlIGxlZnQgdW5kZWZpbmVkIGlmIHRoZXkgY2Fubm90IGJlIGRldGVybWluZWQuCiAgICAjICdzaGlmdF9jb3VudF9taW4nIGFuZCAnc2hpZnRfY291bnRfbWF4JyBhcmUgdGhlIHNhbWUgZXhjZXB0IGZvcgogICAgIyBhIHNpZ25hdHVyZSBvciBwcm90b3R5cGUuCgogICAgbXkgJHNlcW5vX2Jsb2NrID0gJGl0ZW0tPntzZXFub307CiAgICByZXR1cm4gdW5sZXNzICgkc2Vxbm9fYmxvY2spOwoKICAgICMgUHVsbCBvdXQgb3B0aW9uYWwgb3B0aW1pemF0aW9uIGZsYWcuIElmIHRoaXMgaXMgdHJ1ZSB0aGVuIHRoZXJlCiAgICAjIG1heSBiZSBjYWxscyB0byB0aGlzIHN1YiB3aXRoIGFyZ3MsIHNvIHdlIHNob3VsZCB0byBkbyBhIGZ1bGwKICAgICMgc2VhcmNoIG9mIHRoZSBlbnRpcmUgc3ViIGlmIHRoaXMgd291bGQgY2F1c2UgYSAtd21hIHdhcm5pbmcuCiAgICBteSAkbWF4X2FyZ19jb3VudCA9ICRpdGVtLT57bWF4X2FyZ19jb3VudH07CgogICAgbXkgJHJMTCAgICAgICAgICAgICAgICAgPSAkc2VsZi0+W19yTExfXTsKICAgIG15ICRLX29wZW5pbmdfY29udGFpbmVyID0gJHNlbGYtPltfS19vcGVuaW5nX2NvbnRhaW5lcl9dOwogICAgbXkgJEtfY2xvc2luZ19jb250YWluZXIgPSAkc2VsZi0+W19LX2Nsb3NpbmdfY29udGFpbmVyX107CiAgICBteSAkS19vcGVuaW5nX2Jsb2NrICAgICA9ICRzZWxmLT5bX0tfb3BlbmluZ19jb250YWluZXJfXS0+eyRzZXFub19ibG9ja307CgogICAgIyBGaW5kIGluZGV4ICckSycgb2YgdGhlIGxhc3QgJ0BfJyBpbiB0aGlzIHN1YiwgaWYgYW55CiAgICAjIE5vdGUgb24gJyRLX2xhc3RfYXRfdW5kZXJzY29yZSc6IGlmIHdlIGV4aXQgd2l0aCBvbmx5IHNlZWluZyBzaGlmdHMsCiAgICAjIGJ1dCBhIHByZS1zY2FuIHNhdyBAXyBzb21ld2hlcmUgYWZ0ZXIgdGhlIGxhc3QgSywgdGhlbiB0aGUgY291bnQKICAgICMgaXMgZHViaW91cyBhbmQgd2UgZG8gYSBzaW1wbGUgcmV0dXJuCiAgICBteSAkS19sYXN0X2F0X3VuZGVyc2NvcmUgPSAwOwogICAgbXkgJHJLbGlzdCA9ICRzZWxmLT5bX3JLX0FUX3VuZGVyc2NvcmVfYnlfc3ViX3NlcW5vX10tPnskc2Vxbm9fYmxvY2t9OwogICAgaWYgKCBkZWZpbmVkKCRyS2xpc3QpICkgewogICAgICAgICRLX2xhc3RfYXRfdW5kZXJzY29yZSA9ICRyS2xpc3QtPlstMV07CiAgICB9CgogICAgIyBOb3RlIG9uICRfW25dOiBpZiB0aGVyZSBhcmUgYW55IHNoaWZ0cyBvZiBAXyBvciByZWZlcmVuY2VzIHRvIEBfLCB3ZQogICAgIyBjYW5ub3QgdXNlIHRoZXNlIGZvciBhIGNvdW50LiBPdGhlcndpc2UsIHdlIGNhbiB1c2UgdGhlIHJhbmdlIG9mIG4gaW4KICAgICMgJF9bbl0gdG8gZ2V0IGFuIGV4cGVjdGVkIGFyZyBjb3VudCBpZiBhbGwgaW5kZXhlcyBuIGFyZSBzaW1wbGUgaW50ZWdlcnMuCiAgICAjIFNvIGZvciBleGFtcGxlIGlmIHdlIHNlZSBhbnl0aGluZyBsaWtlICRfWzIrJGldIHdlIGhhdmUgdG8gZ2l2ZSB1cC4KICAgIG15ICRzZXFub19hdF9pbmRleF9taW47CiAgICBteSAkYXRfaW5kZXhfbWluOwogICAgbXkgJGF0X2luZGV4X21heDsKCiAgICBteSAkZG9sbGFyX3VuZGVyc2NvcmVfemVyb19uYW1lID0gc3ViIHsKCiAgICAgICAgIyBGaW5kIHRoZSBmaXJzdCBhcmcgbmFtZSBmb3IgYSBzdWIgd2hpY2ggcmVmZXJlbmNlcyAkX1swXSBhbmQgZG9lcwogICAgICAgICMgbm90IGRvIHNoaWZ0aW5nLiBUaGVyZSBhcmUgdHdvIHBvc3NpYmlsaXRpZXM6CiAgICAgICAgIyAgIHJldHVybiAnJHdvcmQnIGluIHNvbWV0aGluZyBsaWtlICckd29yZCA9ICRfWzBdOycKICAgICAgICAjICAgcmV0dXJuIG5vdGhpbmcgb3RoZXJ3aXNlCiAgICAgICAgcmV0dXJuIHVubGVzcyAoICRzZXFub19hdF9pbmRleF9taW4gJiYgJGF0X2luZGV4X21pbiA9PSAwICk7CiAgICAgICAgbXkgJEtvID0gJEtfb3BlbmluZ19jb250YWluZXItPnskc2Vxbm9fYXRfaW5kZXhfbWlufTsKICAgICAgICBteSAkS2MgPSAkS19jbG9zaW5nX2NvbnRhaW5lci0+eyRzZXFub19hdF9pbmRleF9taW59OwogICAgICAgIHJldHVybiB1bmxlc3MgKCAkS28gJiYgJEtjICk7CiAgICAgICAgbXkgJEtfc2VtaWNvbG9uID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLYyk7CiAgICAgICAgcmV0dXJuIHVubGVzcyAoICRLX3NlbWljb2xvbiAmJiAkckxMLT5bJEtfc2VtaWNvbG9uXS0+W19UWVBFX10gZXEgJzsnICk7CiAgICAgICAgbXkgJEtfbSA9ICRzZWxmLT5LX3ByZXZpb3VzX2NvZGUoJEtvKTsKICAgICAgICByZXR1cm4gdW5sZXNzICggJEtfbSAmJiAkckxMLT5bJEtfbV0tPltfVE9LRU5fXSBlcSAnJF8nICk7CiAgICAgICAgbXkgJEtfbW0gPSAkc2VsZi0+S19wcmV2aW91c19jb2RlKCRLX20pOwogICAgICAgIHJldHVybiB1bmxlc3MgKCAkS19tbSAmJiAkckxMLT5bJEtfbW1dLT5bX1RZUEVfXSBlcSAnPScgKTsKICAgICAgICBteSAkS19tbW0gPSAkc2VsZi0+S19wcmV2aW91c19jb2RlKCRLX21tKTsKICAgICAgICByZXR1cm4gdW5sZXNzICggJEtfbW1tICYmICRyTEwtPlskS19tbW1dLT5bX1RZUEVfXSBlcSAnaScgKTsKICAgICAgICBteSAkbmFtZSA9ICRyTEwtPlskS19tbW1dLT5bX1RPS0VOX107CiAgICAgICAgcmV0dXJuIHVubGVzcyAoICRuYW1lID1+IC9eXCRcdy8gKTsKICAgICAgICByZXR1cm4gJG5hbWU7CiAgICB9OyAjIyBlbmQgJGRvbGxhcl91bmRlcnNjb3JlX3plcm9fbmFtZSA9IHN1YgoKICAgIG15ICRyc2Vxbm9fRE9MTEFSX3VuZGVyc2NvcmUgPQogICAgICAkc2VsZi0+W19yRE9MTEFSX3VuZGVyc2NvcmVfYnlfc3ViX3NlcW5vX10tPnskc2Vxbm9fYmxvY2t9OwogICAgaWYgKCAhZGVmaW5lZCgkcktsaXN0KSAmJiAkcnNlcW5vX0RPTExBUl91bmRlcnNjb3JlICkgewogICAgICAgIG15ICRvazsKICAgICAgICBmb3JlYWNoIG15ICRzZXFub19ET0xMQVIgKCBAeyRyc2Vxbm9fRE9MTEFSX3VuZGVyc2NvcmV9ICkgewogICAgICAgICAgICAkb2sgPSAwOwogICAgICAgICAgICBteSAkS28gPSAkS19vcGVuaW5nX2NvbnRhaW5lci0+eyRzZXFub19ET0xMQVJ9OwogICAgICAgICAgICBteSAkS24gPSAkc2VsZi0+S19uZXh0X2NvZGUoJEtvKTsKICAgICAgICAgICAgbGFzdCB1bmxlc3MgKCRLbik7CiAgICAgICAgICAgIGxhc3QgdW5sZXNzICggJHJMTC0+WyRLbl0tPltfVFlQRV9dIGVxICduJyApOwogICAgICAgICAgICBteSAkdG9rZW4gPSAoICRyTEwtPlskS25dLT5bX1RPS0VOX10gKTsKICAgICAgICAgICAgbGFzdCB1bmxlc3MgKCAkdG9rZW4gPX4gL15cZCskLyApOwogICAgICAgICAgICBteSAkS25uID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLbik7CiAgICAgICAgICAgIG15ICRLYyAgPSAkS19jbG9zaW5nX2NvbnRhaW5lci0+eyRzZXFub19ET0xMQVJ9OwogICAgICAgICAgICBsYXN0IHVubGVzcyAoICRLbm4gJiYgJEtjICYmICRLbm4gPT0gJEtjICk7CgogICAgICAgICAgICBpZiAoICFkZWZpbmVkKCRhdF9pbmRleF9taW4pIHx8ICR0b2tlbiA8ICRhdF9pbmRleF9taW4gKSB7CiAgICAgICAgICAgICAgICAkYXRfaW5kZXhfbWluID0gJHRva2VuOwogICAgICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkc2Vxbm9fYXRfaW5kZXhfbWluKSApIHsKICAgICAgICAgICAgICAgICAgICAkc2Vxbm9fYXRfaW5kZXhfbWluID0gJHNlcW5vX0RPTExBUjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICFkZWZpbmVkKCRhdF9pbmRleF9tYXgpIHx8ICR0b2tlbiA+ICRhdF9pbmRleF9tYXggKSB7CiAgICAgICAgICAgICAgICAkYXRfaW5kZXhfbWF4ID0gJHRva2VuOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRvayA9IDE7CiAgICAgICAgfQogICAgICAgIGlmICggISRvayApIHsKICAgICAgICAgICAgJGF0X2luZGV4X21pbiA9IHVuZGVmOwogICAgICAgICAgICAkYXRfaW5kZXhfbWF4ID0gdW5kZWY7CiAgICAgICAgfQogICAgfQoKICAgICMgZmxhZyBpbmRpY2F0aW5nIHdlIHNhdyBhICJwb3AgQF8iIG9yIGp1c3QgInBvcDsiOwogICAgbXkgJHNhd19wb3BfYXRfdW5kZXJzY29yZTsKCiAgICBteSAkaXhfSEVSRV9FTkQgPSAtMTsKCiAgICBteSAkS19zdWIgPSAkc2VsZi0+ZmluZF9zdWJfdG9rZW4oJHNlcW5vX2Jsb2NrKTsKCiAgICAjIHNob3VsZG4ndCBoYXBwZW46CiAgICBpZiAoICFkZWZpbmVkKCRLX3N1YikgfHwgJEtfc3ViID49ICRLX29wZW5pbmdfYmxvY2sgKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCgkS19zdWIpICkgeyAkS19zdWIgPSAndW5kZWYnIH0KICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KCJCYWQgS19zdWI9JEtfc3ViLCBvcGVuaW5nPSRLX29wZW5pbmdfYmxvY2tcbiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBDaGVjayBmb3IgYW5kIHByb2Nlc3MgYSBwcm90b3R5cGUKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBteSAkc3ViX3Rva2VuICA9ICRyTEwtPlskS19zdWJdLT5bX1RPS0VOX107CiAgICBteSAkaXByb3RvX2JlZyA9IGluZGV4KCAkc3ViX3Rva2VuLCAnKCcgKTsKICAgIGlmICggJGlwcm90b19iZWcgPiAwICkgewogICAgICAgIG15ICRpcHJvdG9fZW5kID0gaW5kZXgoICRzdWJfdG9rZW4sICcpJywgJGlwcm90b19iZWcgKTsKICAgICAgICBpZiAoICRpcHJvdG9fZW5kID4gJGlwcm90b19iZWcgKSB7CiAgICAgICAgICAgIG15ICRwcm90b3R5cGUgPQogICAgICAgICAgICAgIHN1YnN0ciggJHN1Yl90b2tlbiwgJGlwcm90b19iZWcsICRpcHJvdG9fZW5kIC0gJGlwcm90b19iZWcgKyAxICk7CiAgICAgICAgICAgIG15ICggJHByb3RvdHlwZV9jb3VudF9taW4sICRwcm90b3R5cGVfY291bnRfbWF4ICkgPQogICAgICAgICAgICAgIGNvdW50X3Byb3RvdHlwZV9hcmdzKCRwcm90b3R5cGUpOwogICAgICAgICAgICAkaXRlbS0+e3Byb3RvdHlwZX0gICAgICAgICAgID0gJHByb3RvdHlwZTsKICAgICAgICAgICAgJGl0ZW0tPntwcm90b3R5cGVfY291bnRfbWlufSA9ICRwcm90b3R5cGVfY291bnRfbWluOwogICAgICAgICAgICAkaXRlbS0+e3Byb3RvdHlwZV9jb3VudF9tYXh9ID0gJHByb3RvdHlwZV9jb3VudF9tYXg7CgogICAgICAgICAgICAjIFNpbmNlIHdlIGRvbid0IHlldCBrbm93IGlmIHdlIG11c3QgYWRkIDEgZm9yIGEgbWV0aG9kIGNhbGwsIHdlCiAgICAgICAgICAgICMgd2lsbCBqdXN0IGNvbnRpbnVlIG5vcm1hbGx5IGFuZCBsZXQgdGhlIGNhbGxlciBmaWd1cmUgaXQgb3V0LgogICAgICAgIH0KICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIENoZWNrIGZvciBhbmQgcHJvY2VzcyBhIHNpZ25hdHVyZSBsaXN0CiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBteSAkS3N1Yl9wID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLX3N1Yik7CiAgICBpZiAoICAgJHJMTC0+WyRLc3ViX3BdLT5bX1RZUEVfU0VRVUVOQ0VfXQogICAgICAgICYmICRyTEwtPlskS3N1Yl9wXS0+W19UT0tFTl9dIGVxICcoJyApCiAgICB7CiAgICAgICAgIyBTd2l0Y2ggdG8gc2VhcmNoaW5nIHRoZSBzaWduYXR1cmUgY29udGFpbmVyLiBXZSB3aWxsIGdldCB0aGUKICAgICAgICAjIGNvdW50IHdoZW4gd2UgYXJyaXZlIGF0IHRoZSBjbG9zaW5nIHRva2VuLgogICAgICAgIG15ICRzZXFub19saXN0ID0gJHJMTC0+WyRLc3ViX3BdLT5bX1RZUEVfU0VRVUVOQ0VfXTsKICAgICAgICAkaXRlbS0+e3NlcW5vX2xpc3R9ICAgPSAkc2Vxbm9fbGlzdDsKICAgICAgICAkaXRlbS0+e2lzX3NpZ25hdHVyZX0gPSAxOwogICAgICAgICRzZWxmLT5jb3VudF9saXN0X2VsZW1lbnRzKCRpdGVtKTsKCiAgICAgICAgIyBXZSBhcmUgZmluaXNoZWQgZm9yIGEgc2lnbmF0dXJlIGxpc3QKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgTWFpbiBsb29wOiBsb29rIGZvciA9c2hpZnQ7IGFuZCA9QF87IHdpdGhpbiBzdWIgYmxvY2sgYnJhY2VzCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgbXkgJHNlcW5vICAgICA9ICRzZXFub19ibG9jazsKICAgIG15ICRLX29wZW5pbmcgPSAkc2VsZi0+W19LX29wZW5pbmdfY29udGFpbmVyX10tPnskc2Vxbm99OwogICAgbXkgJEtfY2xvc2luZyA9ICRzZWxmLT5bX0tfY2xvc2luZ19jb250YWluZXJfXS0+eyRzZXFub307CiAgICByZXR1cm4gdW5sZXNzIGRlZmluZWQoJEtfY2xvc2luZyk7CgogICAgbXkgJGxldmVsX29wZW5pbmcgPSAkckxMLT5bJEtfb3BlbmluZ10tPltfTEVWRUxfXTsKCiAgICAjIENvdW50IG51bWJlciBvZiAnc2hpZnQ7JyBhdCB0aGUgdG9wIGxldmVsCiAgICBteSAkc2hpZnRfY291bnQgICAgICAgICAgICAgICAgICAgICAgPSAwOwogICAgbXkgJHNlbGZfbmFtZSAgICAgICAgICAgICAgICAgICAgICAgID0gRU1QVFlfU1RSSU5HOwogICAgbXkgJHNlbWljb2xvbl9jb3VudF9hZnRlcl9sYXN0X3NoaWZ0ID0gMDsKICAgIG15ICRpbl9pbnRlcnBvbGF0ZWRfcXVvdGU7CgogICAgbXkgJEtLICAgICAgICAgPSAkS19vcGVuaW5nOwogICAgbXkgJEtLX3RoaXNfbmIgPSAkS0s7CiAgICB3aGlsZSAoICsrJEtLIDwgJEtfY2xvc2luZyApIHsKCiAgICAgICAgIyBzYWZldHkgY2hlY2sgLSBzaG91bGRuJ3QgaGFwcGVuCiAgICAgICAgaWYgKCAhJEtLIHx8ICRLSyA8PSAkS0tfdGhpc19uYiApIHsKICAgICAgICAgICAgaWYgKERFVkVMX01PREUpIHsKICAgICAgICAgICAgICAgIG15ICRsbm8gPSAkckxMLT5bJEtLX3RoaXNfbmJdLT5bX0xJTkVfSU5ERVhfXSArIDE7CiAgICAgICAgICAgICAgICBGYXVsdCgibmVhciBsaW5lICRsbm86IGluZGV4ICRLSyBkZWNyZWFzZWQsIHdhcyAkS0tfdGhpc19uYlxuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgbXkgJHR5cGUgPSAkckxMLT5bJEtLXS0+W19UWVBFX107CiAgICAgICAgbmV4dCBpZiAoICR0eXBlIGVxICdiJyApOwogICAgICAgIG5leHQgaWYgKCAkdHlwZSBlcSAnIycgKTsKICAgICAgICAkS0tfdGhpc19uYiA9ICRLSzsKCiAgICAgICAgbXkgJHRva2VuID0gJHJMTC0+WyRLS10tPltfVE9LRU5fXTsKCiAgICAgICAgIyBOb3RlIHRoYXQgJyRfJyBoZXJlIGlzIG1hcmtlZCBhcyB0eXBlICdaJzogcHJpbnQgJF9bMF07CiAgICAgICAgaWYgKCAkdHlwZSBlcSAnaScgfHwgJHR5cGUgZXEgJ1onICkgewoKICAgICAgICAgICAgIyBsb29rIGZvciAnQF8nCiAgICAgICAgICAgIGlmICggJHRva2VuIGVxICdAXycgKSB7CgogICAgICAgICAgICAgICAgIyBGb3VuZCAnQF8nOiB0aGUgc2VhcmNoIHdpbGwgZW5kIGhlcmUKICAgICAgICAgICAgICAgIG15ICRsZXZlbCA9ICRyTEwtPlskS0tdLT5bX0xFVkVMX107CgogICAgICAgICAgICAgICAgIyBHaXZlIHVwIHVwb24gZmluZGluZyBAXyBhdCBhIGxvd2VyIGxldmVsCiAgICAgICAgICAgICAgICByZXR1cm4gdW5sZXNzICggJGxldmVsID09ICRsZXZlbF9vcGVuaW5nICsgMSApOwoKICAgICAgICAgICAgICAgICMgTG9vayBhaGVhZCBmb3IgJzsnCiAgICAgICAgICAgICAgICBteSAkS19wID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLSyk7CiAgICAgICAgICAgICAgICByZXR1cm4gdW5sZXNzICgkS19wKTsKICAgICAgICAgICAgICAgIHJldHVybiB1bmxlc3MgKCAkckxMLT5bJEtfcF0tPltfVFlQRV9dIGVxICc7JyApOwoKICAgICAgICAgICAgICAgICMgTG9vayBiYWNrIGZvciAnID0gQF8nCiAgICAgICAgICAgICAgICBteSAkS19tID0gJHNlbGYtPktfcHJldmlvdXNfY29kZSgkS0spOwogICAgICAgICAgICAgICAgcmV0dXJuIHVubGVzcyBkZWZpbmVkKCRLX20pOwogICAgICAgICAgICAgICAgbXkgJHR5cGVfbSA9ICRyTEwtPlskS19tXS0+W19UWVBFX107CiAgICAgICAgICAgICAgICByZXR1cm4gdW5sZXNzICggJHR5cGVfbSBlcSAnPScgKTsKCiAgICAgICAgICAgICAgICAjIExvb2sgYmFjayBmb3IgJyApID0gQF8nCiAgICAgICAgICAgICAgICBteSAkS19tbSA9ICRzZWxmLT5LX3ByZXZpb3VzX2NvZGUoJEtfbSk7CiAgICAgICAgICAgICAgICByZXR1cm4gdW5sZXNzIGRlZmluZWQoJEtfbW0pOwogICAgICAgICAgICAgICAgbXkgJHRva2VuX21tID0gJHJMTC0+WyRLX21tXS0+W19UT0tFTl9dOwogICAgICAgICAgICAgICAgbXkgJHNlcW5vX21tID0gJHJMTC0+WyRLX21tXS0+W19UWVBFX1NFUVVFTkNFX107CgogICAgICAgICAgICAgICAgIyAgQ291bnQgYXJncyBpbiB0aGUgbGlzdCAoIC4uLiApID0gQF87CiAgICAgICAgICAgICAgICBpZiAoICRzZXFub19tbSAmJiAkdG9rZW5fbW0gZXEgJyknICkgewogICAgICAgICAgICAgICAgICAgICRpdGVtLT57c2Vxbm9fbGlzdH0gICAgICA9ICRzZXFub19tbTsKICAgICAgICAgICAgICAgICAgICAkaXRlbS0+e2lzX3NpZ25hdHVyZX0gICAgPSAwOwogICAgICAgICAgICAgICAgICAgICRpdGVtLT57c2hpZnRfY291bnRfbWlufSA9ICRzaGlmdF9jb3VudDsKICAgICAgICAgICAgICAgICAgICAkaXRlbS0+e3NoaWZ0X2NvdW50X21heH0gPSAkc2hpZnRfY291bnQ7CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPmNvdW50X2xpc3RfZWxlbWVudHMoJGl0ZW0pOwoKICAgICAgICAgICAgICAgICAgICAjIENvdW50IGRlZmF1bHQgYXJncyBwbGFjZWQgaW4gc2VwYXJhdGUgcGFyZW5zLCBzdWNoIGFzOgogICAgICAgICAgICAgICAgICAgICMgICAgICAuLiAkdjEgLCgkZGVmMSwgJGRlZjIpKSA9IEBfCiAgICAgICAgICAgICAgICAgICAgIyAgICAgIC4uICR2MSAsKCRkZWYxLCAkZGVmMiksKSA9IEBfCgogICAgICAgICAgICAgICAgICAgICMgbG9vayBhdCB0aGUgdG9rZW4gYmVmb3JlIHRoZSBsYXN0ICcpJwogICAgICAgICAgICAgICAgICAgIG15ICRLX21tX3AgPSAkc2VsZi0+S19wcmV2aW91c19jb2RlKCRLX21tKTsKICAgICAgICAgICAgICAgICAgICBteSAkdG9rZW5fbW1fcCA9CiAgICAgICAgICAgICAgICAgICAgICAkS19tbV9wID8gJHJMTC0+WyRLX21tX3BdLT5bX1RPS0VOX10gOiBTUEFDRTsKCiAgICAgICAgICAgICAgICAgICAgIyBza2lwIHBhc3QgYSB0cmFpbGluZyBjb21tYQogICAgICAgICAgICAgICAgICAgIGlmICggJHRva2VuX21tX3AgZXEgJywnICkgewogICAgICAgICAgICAgICAgICAgICAgICAkS19tbV9wID0gJHNlbGYtPktfcHJldmlvdXNfY29kZSgkS19tbV9wKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHRva2VuX21tX3AgPQogICAgICAgICAgICAgICAgICAgICAgICAgICRLX21tX3AgPyAkckxMLT5bJEtfbW1fcF0tPltfVE9LRU5fXSA6IFNQQUNFOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBpZiB3ZSBmaW5kIGEgY2xvc2luZyBwYXJlbiwgY291bnQgdGhlIGl0ZW1zIGFuZAogICAgICAgICAgICAgICAgICAgICMgdXBkYXRlIHNoaWZ0X2NvdW50X21pbgogICAgICAgICAgICAgICAgICAgIGlmICggJHRva2VuX21tX3AgZXEgJyknICkgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkc2Vxbm9fbW1fcCA9ICRyTEwtPlskS19tbV9wXS0+W19UWVBFX1NFUVVFTkNFX107CiAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5jb3VudF9kZWZhdWx0X3N1Yl9hcmdzKCAkaXRlbSwgJHNlcW5vX21tX3AgKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgTk9URTogdGhpcyBjb3VsZCBkaXNhZ3JlZSB3aXRoICRfW25dIHVzYWdlOyB3ZQogICAgICAgICAgICAgICAgICAgICMgaWdub3JlIHRoaXMgZm9yIG5vdy4KICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBHaXZlIHVwIGlmID0gQF8gaXMgbm90IHByZWNlZGVkIGJ5IGEgc2ltcGxlIGxpc3QKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBHaXZlIHVwIGlmIHdlIGZpbmQgYW4gaW5kZXhlZCByZWYgdG8gJF9bLi5dCiAgICAgICAgICAgIGVsc2lmICggJHRva2VuIGVxICckXycgKSB7CgogICAgICAgICAgICAgICAgIyBGb3VuZCAkXzogY3VycmVudGx5IHRoZSBzZWFyY2ggZW5kcyBhdCAnJF9bJwogICAgICAgICAgICAgICAgbXkgJEtuID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLSyk7CiAgICAgICAgICAgICAgICBpZiAoICRLbiAmJiAkckxMLT5bJEtuXS0+W19UT0tFTl9dIGVxICdbJyApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBHaXZlIHVwIHVubGVzcyB3ZSBtaWdodCBiZSBhYmxlIHRvIGRlZmluZSBhIGNvdW50CiAgICAgICAgICAgICAgICAgICAgIyB3aGVuIHRoZXJlIGFyZSBqdXN0IHJlZmVyZW5jZXMgdG8gJF9bbl0gdmFsdWVzCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkYXRfaW5kZXhfbWF4KSB8fCAkc2hpZnRfY291bnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgR2l2ZSB1cCBhdCBzb21ldGhpbmcgbGlrZSAnJmZ1bmM7JwogICAgICAgICAgICBlbHNpZiAoIHN1YnN0ciggJHRva2VuLCAwLCAxICkgZXEgJyYnICkgewogICAgICAgICAgICAgICAgbXkgJEtuID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLSyk7CiAgICAgICAgICAgICAgICBpZiAoICRLbiAmJiAkckxMLT5bJEtuXS0+W19UT0tFTl9dIG5lICcoJyApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIyBjb250aW51ZSBzZWFyY2gKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgbG9vayBmb3IgJz1zaGlmdDsnIG9yICc9cG9wOycKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgZWxzaWYgKCAkdHlwZSBlcSAnaycgKSB7CiAgICAgICAgICAgIGlmICggJGlzX3NoaWZ0X3BvcHskdG9rZW59ICkgewoKICAgICAgICAgICAgICAgICMgbG9vayBmb3IgJ3NoaWZ0OycgYW5kIGNvdW50IGFzIDEgYXJnCiAgICAgICAgICAgICAgICBteSAkS3AgPSAkc2VsZi0+S19uZXh0X2NvZGUoJEtLKTsKICAgICAgICAgICAgICAgIHJldHVybiB1bmxlc3MgZGVmaW5lZCgkS3ApOwogICAgICAgICAgICAgICAgbXkgJHR5cGVfcCAgPSAkckxMLT5bJEtwXS0+W19UWVBFX107CiAgICAgICAgICAgICAgICBteSAkdG9rZW5fcCA9ICRyTEwtPlskS3BdLT5bX1RPS0VOX107CgogICAgICAgICAgICAgICAgIyBsb29rIGZvciBhbnkgb2YgdGhlc2Ugd2l0aCBzaGlmdCBvciBwb3A6CiAgICAgICAgICAgICAgICAjIHNoaWZ0OwogICAgICAgICAgICAgICAgIyBzaGlmdCBAXzsKICAgICAgICAgICAgICAgICMgc2hpZnQoKTsKICAgICAgICAgICAgICAgICMgc2hpZnQoQF8pOwoKICAgICAgICAgICAgICAgICMgcmVtb3ZlIGFueSBvcGVuaW5nIHBhcmVuCiAgICAgICAgICAgICAgICBteSAkaW5fcGFyZW5zOwogICAgICAgICAgICAgICAgaWYgKCAkdG9rZW5fcCBlcSAnKCcgKSB7CiAgICAgICAgICAgICAgICAgICAgJGluX3BhcmVucyA9IDE7CiAgICAgICAgICAgICAgICAgICAgJEtwICAgICAgICA9ICRzZWxmLT5LX25leHRfY29kZSgkS3ApOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmxlc3MgZGVmaW5lZCgkS3ApOwogICAgICAgICAgICAgICAgICAgICR0eXBlX3AgID0gJHJMTC0+WyRLcF0tPltfVFlQRV9dOwogICAgICAgICAgICAgICAgICAgICR0b2tlbl9wID0gJHJMTC0+WyRLcF0tPltfVE9LRU5fXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGxvb2sgZm9yICdAXycKICAgICAgICAgICAgICAgIGlmICggJHR5cGVfcCBlcSAnaScgfHwgJHR5cGVfcCBlcSAndCcgKSB7CgogICAgICAgICAgICAgICAgICAgICMga2VlcCBnb2luZyBpZiBub3QgQF8KICAgICAgICAgICAgICAgICAgICBuZXh0IGlmICggJHRva2VuX3AgbmUgJ0BfJyApOwoKICAgICAgICAgICAgICAgICAgICAkS3AgPSAkc2VsZi0+S19uZXh0X2NvZGUoJEtwKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5sZXNzIGRlZmluZWQoJEtwKTsKICAgICAgICAgICAgICAgICAgICAkdHlwZV9wICA9ICRyTEwtPlskS3BdLT5bX1RZUEVfXTsKICAgICAgICAgICAgICAgICAgICAkdG9rZW5fcCA9ICRyTEwtPlskS3BdLT5bX1RPS0VOX107CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyByZW1vdmUgYW55IGNsb3NpbmcgcGFyZW4KICAgICAgICAgICAgICAgIGlmICggJGluX3BhcmVucyAmJiAkdG9rZW5fcCBlcSAnKScgKSB7CiAgICAgICAgICAgICAgICAgICAgJEtwID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLcCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVubGVzcyBkZWZpbmVkKCRLcCk7CiAgICAgICAgICAgICAgICAgICAgJHR5cGVfcCAgPSAkckxMLT5bJEtwXS0+W19UWVBFX107CiAgICAgICAgICAgICAgICAgICAgJHRva2VuX3AgPSAkckxMLT5bJEtwXS0+W19UT0tFTl9dOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgSnVzdCBnaXZlIHVwIGlmIHRoaXMgc2hpZnQgaXMgbm90IGZvbGxvd2VkIGJ5IGEgc2VtaWNvbG9uIG9yCiAgICAgICAgICAgICAgICAjIGNsb3NpbmcgYnJhY2Ugb3IgYXJyb3cuIFRoaXMgaXMgdGhlIHNhZmUgdGhpbmcgdG8gZG8gdG8gYXZvaWQKICAgICAgICAgICAgICAgICMgZmFsc2UgZXJyb3JzLiBUaGVyZSBhcmUgdG9vIG1hbnkgd2F5cyBmb3IgcHJvYmxlbXMgdG8gYXJpc2UuCiAgICAgICAgICAgICAgICAjIEVzcGVjaWFsbHkgaWYgdGhlIG5leHQgdG9rZW4gaXMgb25lIG9mICd8fCcgJy8vJyAnb3InLgogICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAgICAgIGlmICggJHR5cGVfcCBuZSAnOycgJiYgJHR5cGVfcCBuZSAnLT4nICYmICRLcCBuZSAkS19jbG9zaW5nICk7CiAgICAgICAgICAgICAgICBteSAkbGV2ZWwgPSAkckxMLT5bJEtLXS0+W19MRVZFTF9dOwoKICAgICAgICAgICAgICAgICMgR2l2ZSB1cCBvbiBsb3dlciBsZXZlbCBzaGlmdHMKICAgICAgICAgICAgICAgIHJldHVybiB1bmxlc3MgKCAkbGV2ZWwgPT0gJGxldmVsX29wZW5pbmcgKyAxICk7CgogICAgICAgICAgICAgICAgIyBJZiB3ZSBnZXQgdG8gdGhlIGVuZCB3aXRob3V0IGZpbmRpbmcgJyguLikgPSBAXzsnIHRoZW4KICAgICAgICAgICAgICAgICMgd2Ugd2lsbCBjb25zaWRlciB0aGUgY291bnQgdW5yZWxpYWJsZSBpZiB3ZSBzYXcgYSAncG9wJwogICAgICAgICAgICAgICAgIyBvciBpZiBhIHByZXZpb3VzIGJsb2NrIGNvbnRhaW5lZCBvdGhlciBzdGF0ZW1lbnRzLgogICAgICAgICAgICAgICAgJHNhd19wb3BfYXRfdW5kZXJzY29yZSB8fD0gJHRva2VuIGVxICdwb3AnOwoKICAgICAgICAgICAgICAgICRzaGlmdF9jb3VudCsrOwogICAgICAgICAgICAgICAgJHNlbWljb2xvbl9jb3VudF9hZnRlcl9sYXN0X3NoaWZ0ID0gMDsKCiAgICAgICAgICAgICAgICAjIFNhdmUgc2VsZiBuYW1lOgogICAgICAgICAgICAgICAgIyAgICAnJHNlbGYgPSBzaGlmdCcKICAgICAgICAgICAgICAgICMgICAgICB8ICAgIHwgICB8CiAgICAgICAgICAgICAgICAjICAkS19tbSAgJEtfbSAgJEtLCiAgICAgICAgICAgICAgICBpZiAoICRzaGlmdF9jb3VudCA9PSAxICYmICEkc2VsZl9uYW1lICkgewogICAgICAgICAgICAgICAgICAgIG15ICRLX20gPSAkc2VsZi0+S19wcmV2aW91c19jb2RlKCRLSyk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVubGVzcyAoIGRlZmluZWQoJEtfbSkgKTsKICAgICAgICAgICAgICAgICAgICBteSAkdHlwZV9tID0gJHJMTC0+WyRLX21dLT5bX1RZUEVfXTsKCiAgICAgICAgICAgICAgICAgICAgIyBGb3Igc29tZXRoaW5nIGxpa2U6IHN1YiBnZXRfdGhpbmcge3NoaWZ0LT57dGhpbmd9fQogICAgICAgICAgICAgICAgICAgICMgdXNlICRfWzBdIGFzIHRoZSBuYW1lCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkdHlwZV9wIGVxICctPicgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJHR5cGVfbSBlcSAneycgfHwgJHR5cGVfbSBlcSAnOycgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZl9uYW1lID0gJyRfWzBdJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtLT57c2VsZl9uYW1lfSA9ICRzZWxmX25hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJHR5cGVfbSBlcSAnPScgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJEtfbW0gPSAkc2VsZi0+S19wcmV2aW91c19jb2RlKCRLX20pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVubGVzcyBkZWZpbmVkKCRLX21tKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkdHlwZV9tbSAgPSAkckxMLT5bJEtfbW1dLT5bX1RZUEVfXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICR0b2tlbl9tbSA9ICRyTEwtPlskS19tbV0tPltfVE9LRU5fXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRzZXFub19tbSA9ICRyTEwtPlskS19tbV0tPltfVFlQRV9TRVFVRU5DRV9dOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2hlY2sgZm9yICRzZWxmIGluIHBhcmVucywgbGlrZSAoJHNlbGYpPXNoaWZ0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRzZXFub19tbSAmJiAkdG9rZW5fbW0gZXEgJyknICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRLbyA9ICRLX29wZW5pbmdfY29udGFpbmVyLT57JHNlcW5vX21tfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkS19tbSA9ICRzZWxmLT5LX25leHRfY29kZSgkS28pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkS19tbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHlwZV9tbSAgPSAkckxMLT5bJEtfbW1dLT5bX1RZUEVfXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRva2VuX21tID0gJHJMTC0+WyRLX21tXS0+W19UT0tFTl9dOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICR0eXBlX21tIGVxICdpJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZl9uYW1lID0gJHRva2VuX21tOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdlIHN0b3JlIHNlbGZfbmFtZSBpbW1lZGlhdGVseSBiZWNhdXNlIGl0IHdpbGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGJlIG5lZWRlZCBldmVuIGlmIHdlIGNhbm5vdCBnZXQgYW4gYXJnIGNvdW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW0tPntzZWxmX25hbWV9ID0gJHNlbGZfbmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIFNraXAgcGFzdCBhbnkgcGFyZW5zIGFuZCBAXzsgbGV0IHRoZSBzZW1pY29sb24gYmUgc2VlbiBuZXh0CiAgICAgICAgICAgICAgICBpZiAoICRLSyA8ICRLcCAtIDEgKSB7ICRLSyA9ICRLcCAtIDEgfQoKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICR0b2tlbiBlcSAnYmxlc3MnICkgewoKICAgICAgICAgICAgICAgICMgQ291bGQgbG9vayBmb3Igc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZzoKICAgICAgICAgICAgICAgICMgIG15ICRzZWxmID0gYmxlc3Mge30sICRjbGFzczsKICAgICAgICAgICAgICAgICMgIG15ICRzZWxmID0gYmxlc3Mge30sIHNoaWZ0OwoKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRpc19pZl91bmxlc3N7JHRva2VufSApIHsKCiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgIyBSRVRVUk46IE9wdGlvbmFsIGVhcmx5IHJldHVybi4KICAgICAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAjIEdpdmUgdXAgYW5kIGV4aXQgYXQgJ2lmJyBvciAndW5sZXNzJyBpZiB3ZSBoYXZlIHNlZW4gYSBmZXcKICAgICAgICAgICAgICAgICMgc2VtaWNvbG9ucyBmb2xsb3dpbmcgdGhlIGxhc3QgJ3NoaWZ0Jy4gVGhlIG51bWJlciAnMicgaGVyZQogICAgICAgICAgICAgICAgIyBoYXMgYmVlbiBmb3VuZCB0byB3b3JrIHdlbGwuCiAgICAgICAgICAgICAgICBpZiAoICRzZW1pY29sb25fY291bnRfYWZ0ZXJfbGFzdF9zaGlmdCA+IDIgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkbWF4X2FyZ19jb3VudCkKICAgICAgICAgICAgICAgICAgICAgICAgfHwgJG1heF9hcmdfY291bnQgPD0gJHNoaWZ0X2NvdW50ICkKICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICAhJHNhd19wb3BfYXRfdW5kZXJzY29yZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJEtLID49ICRLX2xhc3RfYXRfdW5kZXJzY29yZSApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtLT57c2hpZnRfY291bnRfbWlufSA9ICRzaGlmdF9jb3VudDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtLT57c2hpZnRfY291bnRfbWF4fSA9ICRzaGlmdF9jb3VudDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIENoZWNrIGZvciBhIGNvbnRhaW5lciBib3VuZGFyeQogICAgICAgIGVsc2lmICggJHJMTC0+WyRLS10tPltfVFlQRV9TRVFVRU5DRV9dICkgewogICAgICAgICAgICBpZiAoICRpc19vcGVuaW5nX3R5cGV7JHR5cGV9ICkgewoKICAgICAgICAgICAgICAgIG15ICRzZXFub190ZXN0ID0gJHJMTC0+WyRLS10tPltfVFlQRV9TRVFVRU5DRV9dOwoKICAgICAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICMgU2tpcCBwYXN0IGEgc3ViIGRlY2xlYXJhdGlvbiB3aXRoaW4gdGhpcyBzdWIKICAgICAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgIGlmICggICAkc2VsZi0+W19yaXNfc3ViX2Jsb2NrX10tPnskc2Vxbm9fdGVzdH0KICAgICAgICAgICAgICAgICAgICB8fCAkc2VsZi0+W19yaXNfYXN1Yl9ibG9ja19dLT57JHNlcW5vX3Rlc3R9ICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBteSAkS2MgPSAkc2VsZi0+W19LX2Nsb3NpbmdfY29udGFpbmVyX10tPnskc2Vxbm9fdGVzdH07CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlmICggISRLYyApOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBpZiAoICRLYyA8PSAkS0sgKTsKICAgICAgICAgICAgICAgICAgICAkS0sgPSAkS2M7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkdHlwZSBlcSAnOycgKSB7CiAgICAgICAgICAgICRzZW1pY29sb25fY291bnRfYWZ0ZXJfbGFzdF9zaGlmdCsrOwogICAgICAgIH0KCiAgICAgICAgIyBzY2FuIGEgcXVvdGUgZm9yIEBfIGFuZCAkX1sKICAgICAgICBlbHNpZiAoICR0eXBlIGVxICdRJyApIHsKCiAgICAgICAgICAgIG15ICRLX2xhc3RfY29kZSA9ICRzZWxmLT5LX3ByZXZpb3VzX2NvZGUoJEtLKTsKICAgICAgICAgICAgbmV4dCB1bmxlc3MgZGVmaW5lZCgkS19sYXN0X2NvZGUpOwogICAgICAgICAgICBteSAkS19sYXN0X3R5cGUgPSAkckxMLT5bJEtfbGFzdF9jb2RlXS0+W19UWVBFX107CiAgICAgICAgICAgIGlmICggJEtfbGFzdF90eXBlIGVxICdRJyApIHsKCiAgICAgICAgICAgICAgICAjIHN0YXJ0aW5nIGluIHF1b3RlIDogdXNlIG9sZCBpbnRlcnBvbGF0aW9uIHZhbHVlCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkaXNfcmVfbWF0Y2hfb3B7JEtfbGFzdF90eXBlfSApIHsKICAgICAgICAgICAgICAgICRpbl9pbnRlcnBvbGF0ZWRfcXVvdGUgPSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGlzIG5vdCBpbnRlcnBvbGF0ZWQgZm9yIGxlYWRpbmcgb3BlcmF0b3JzOiBxdyBxIHRyIHkgJwogICAgICAgICAgICBlbHNpZiAoICR0b2tlbiA9fiAvXihxdyB8IHFbXnFyeF0gfCB0ciB8IFt5XCddICkveCApIHsKICAgICAgICAgICAgICAgICRpbl9pbnRlcnBvbGF0ZWRfcXVvdGUgPSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGlzIGludGVycG9sYXRlZCBmb3IgZXZlcnl0aGluZyBlbHNlCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJGluX2ludGVycG9sYXRlZF9xdW90ZSA9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgbG9vayBmb3IgJ0BfJyBhbmQgJyRfWycgaW4gYW4gaW50ZXJwb2xhdGVkIHF1b3RlCiAgICAgICAgICAgIG5leHQgdW5sZXNzICgkaW5faW50ZXJwb2xhdGVkX3F1b3RlKTsKICAgICAgICAgICAgbXkgJHBvczsKICAgICAgICAgICAgJHBvcyA9IGluZGV4KCAkdG9rZW4sICdAXycgKTsKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAgaWYgKCAkcG9zID09IDAKICAgICAgICAgICAgICAgIHx8ICRwb3MgPiAwICYmIHN1YnN0ciggJHRva2VuLCAkcG9zIC0gMSwgMSApIG5lIEJBQ0tTTEFTSCApOwoKICAgICAgICAgICAgJHBvcyA9IGluZGV4KCAkdG9rZW4sICckX1snICk7CiAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgIGlmICggJHBvcyA9PSAwCiAgICAgICAgICAgICAgICB8fCAkcG9zID4gMCAmJiBzdWJzdHIoICR0b2tlbiwgJHBvcyAtIDEsIDEgKSBuZSBCQUNLU0xBU0ggKTsKICAgICAgICB9CgogICAgICAgICMgc2NhbiBoZXJlIHRleHQgZm9yIEBfIGFuZCAkX1sKICAgICAgICBlbHNpZiAoICR0eXBlIGVxICdoJyApIHsKICAgICAgICAgICAgbmV4dCBpZiAoICFpc19pbnRlcnBvbGF0ZWRfaGVyZV9kb2MoJHRva2VuKSApOwogICAgICAgICAgICBteSAkaXhfbGluZSA9ICRyTEwtPlskS0tdLT5bX0xJTkVfSU5ERVhfXTsKICAgICAgICAgICAgbXkgJGl4X0hFUkUgPSBtYXgoICRpeF9IRVJFX0VORCwgJGl4X2xpbmUgKTsKICAgICAgICAgICAgKCAkaXhfSEVSRV9FTkQsIG15ICRoZXJlX3RleHQgKSA9ICRzZWxmLT5nZXRfaGVyZV90ZXh0KCRpeF9IRVJFKTsKCiAgICAgICAgICAgIGlmICgkaGVyZV90ZXh0KSB7CiAgICAgICAgICAgICAgICBteSAkcG9zOwogICAgICAgICAgICAgICAgJHBvcyA9IGluZGV4KCAkaGVyZV90ZXh0LCAnQF8nICk7CiAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICRwb3MgPT0gMAogICAgICAgICAgICAgICAgICAgIHx8ICggJHBvcyA+IDAKICAgICAgICAgICAgICAgICAgICAgICAgJiYgc3Vic3RyKCAkaGVyZV90ZXh0LCAkcG9zIC0gMSwgMSApIG5lIEJBQ0tTTEFTSCApCiAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJHBvcyA9IGluZGV4KCAkaGVyZV90ZXh0LCAnJF9bJyApOwogICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAkcG9zID09IDAKICAgICAgICAgICAgICAgICAgICB8fCAoICRwb3MgPiAwCiAgICAgICAgICAgICAgICAgICAgICAgICYmIHN1YnN0ciggJGhlcmVfdGV4dCwgJHBvcyAtIDEsIDEgKSBuZSBCQUNLU0xBU0ggKQogICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAjIGNvbnRpbnVlIHNlYXJjaAogICAgICAgIH0KICAgIH0gIyMgZW5kIHdoaWxlICggKyskS0sgPCAkS19jbG9zaW5nKQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyB0aGUgd2hvbGUgZmlsZSBoYXMgYmVlbiBzY2FubmVkCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAjIGlmIG5vIHNoaWZ0cyBAXyBhbmQgbm8gcmVmZXJlbmNlcyB0byBAXywgbG9vayBmb3IgJFtuXQogICAgaWYgKCBkZWZpbmVkKCRhdF9pbmRleF9tYXgpICYmICEkc2hpZnRfY291bnQgKSB7CiAgICAgICAgJHNoaWZ0X2NvdW50ID0gJGF0X2luZGV4X21heCArIDE7CgogICAgICAgICMgQ3JlYXRlIGEgc2VsZiBuYW1lIGxpa2UgJyRfWzBdJyBpZiB3ZSBjYW4ndCBmaW5kIHVzZXItZGVmaW5lZCBuYW1lLgogICAgICAgICMgVGhlbiBhbnkgc3ViIGNhbGxzIHdpdGggJyRfWzBdLT4nIHdpbGwgYmUgcmVjb2duaXplZCBhcyBzZWxmCiAgICAgICAgIyBjYWxscyBieSBzdWIgY3Jvc3NfY2hlY2tfc3ViX2NhbGxzLgogICAgICAgIGlmICggISRzZWxmX25hbWUgJiYgJGF0X2luZGV4X21pbiA9PSAwICkgewogICAgICAgICAgICAkc2VsZl9uYW1lICAgICAgICAgPSAkZG9sbGFyX3VuZGVyc2NvcmVfemVyb19uYW1lLT4oKTsKICAgICAgICAgICAgJHNlbGZfbmFtZSAgICAgICAgID0gJyRfWzBdJyB1bmxlc3MgKCRzZWxmX25hbWUpOwogICAgICAgICAgICAkaXRlbS0+e3NlbGZfbmFtZX0gPSAkc2VsZl9uYW1lOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICEkc2F3X3BvcF9hdF91bmRlcnNjb3JlICkgewogICAgICAgICRpdGVtLT57c2hpZnRfY291bnRfbWlufSA9ICRzaGlmdF9jb3VudDsKICAgICAgICAkaXRlbS0+e3NoaWZ0X2NvdW50X21heH0gPSAkc2hpZnRfY291bnQ7CiAgICB9CiAgICByZXR1cm47Cgp9ICMjIGVuZCBzdWIgY291bnRfc3ViX2lucHV0X2FyZ3MKCnVzZSBjb25zdGFudCBERUJVR19SRVRVUk5fQ09VTlQgPT4gMDsKCnN1YiBjb3VudF9zdWJfcmV0dXJuX2FyZ3MgewogICAgbXkgKCAkc2VsZiwgJGl0ZW0gKSA9IEBfOwoKICAgICMgR2l2ZW46ICRpdGVtID0gaGFzaCByZWYgd2l0aAogICAgIyAgIHNlcW5vICA9PiBzZXF1ZW5jZSBudW1iZXIgb2YgYSBzdWIgYmxvY2sKICAgICMgU2V0IHZhbHVlcyBmb3IgdGhlc2Uga2V5cyBpbiAnJGl0ZW0nOgogICAgIyAgIHJldHVybl9jb3VudF9taW4gID0+IG1pbmltdW0gbnVtYmVyIG9mIG91dHB1dCBhcmdzCiAgICAjICAgICAgICAgICAgICAgICAgICAgICAgPSB1bmRlZiBpZiBpbmRldGVybWluYXRlLCBzdWNoIGFzIEBsaXN0CiAgICAjICAgS19yZXR1cm5fY291bnRfbWluID0+IEsgdmFsdWUgb2YgdGhlIG1pbgogICAgIyAgIHJldHVybl9jb3VudF9tYXggID0+IG1heGltdW0gbnVtYmVyIG9mIG91dHB1dCBhcmdzCiAgICAjICAgICAgICAgICAgICAgICAgICAgICAgPSB1bmRlZiBpZiBpbmRldGVybWluYXRlLCBzdWNoIGFzIEBsaXN0CiAgICAjICAgS19yZXR1cm5fY291bnRfbWF4ID0+IEsgdmFsdWUgb2YgdGhlIG1heAogICAgbXkgJHNlcW5vX3N1YiA9ICRpdGVtLT57c2Vxbm99OwogICAgcmV0dXJuIHVubGVzcyAoJHNlcW5vX3N1Yik7CgogICAgbXkgJHJLbGlzdCA9ICRzZWxmLT5bX3JLX3JldHVybl9ieV9zdWJfc2Vxbm9fXS0+eyRzZXFub19zdWJ9OwogICAgcmV0dXJuIGlmICggIWRlZmluZWQoJHJLbGlzdCkgKTsKCiAgICAjIGxvb3Agb3ZlciBhbGwgcmV0dXJuIHN0YXRlbWVudHMgaW4gdGhpcyBzdWIKICAgIG15ICRyTEwgICAgICAgICAgICAgICAgICA9ICRzZWxmLT5bX3JMTF9dOwogICAgbXkgJHJoYXNoICAgICAgICAgICAgICAgID0ge307CiAgICBteSAkcktfcmV0dXJuX2NvdW50X2hhc2ggPSB7fTsKCiAgICAjIHJldGFpbiBvbGQgdmFycyBkdXJpbmcgdHJhbnNpdGlvbiBwaGFzZQogICAgbXkgJHJldHVybl9jb3VudF9taW47CiAgICBteSAkcmV0dXJuX2NvdW50X21heDsKCiAgICBmb3JlYWNoICggQHskcktsaXN0fSApIHsKICAgICAgICBteSAkS19yZXR1cm4gPSAkckxMLT5bJF9dLT5bX1RZUEVfXSBlcSAnYicgPyAkXyArIDEgOiAkXzsKIyMgICAgICBteSAkdHlwZSAgICAgPSAkckxMLT5bJEtfcmV0dXJuXS0+W19UWVBFX107CiAgICAgICAgbXkgJHRva2VuID0gJHJMTC0+WyRLX3JldHVybl0tPltfVE9LRU5fXTsKICAgICAgICBpZiAoICR0b2tlbiBuZSAncmV0dXJuJyApIHsKICAgICAgICAgICAgREVWRUxfTU9ERSAmJiBGYXVsdCgiZXhwZWN0aW5nICdyZXR1cm4nIGJ1dCBnb3QgJHRva2VuXG4iKTsKICAgICAgICAgICAgbGFzdDsKICAgICAgICB9CiAgICAgICAgJHJoYXNoLT57S19saXN0X3N0YXJ0fSA9ICRLX3JldHVybjsKICAgICAgICAkc2VsZi0+Y291bnRfbGlzdF9lbGVtZW50cygkcmhhc2gpOwogICAgICAgIG15ICRjb3VudCA9ICRyaGFzaC0+e3NoaWZ0X2NvdW50X21heH07CiAgICAgICAgaWYgKCAhZGVmaW5lZCgkY291bnQpICkgewogICAgICAgICAgICAkaXRlbS0+e3JldHVybl9jb3VudF9pbmRlZmluaXRlfSA9ICRLX3JldHVybjsKICAgICAgICAgICAgJGl0ZW0tPntyZXR1cm5fY291bnRfbWF4fSAgICAgICAgPSB1bmRlZjsKICAgICAgICAgICAgbGFzdDsKICAgICAgICB9CgogICAgICAgICMgbmV3IGNvdW50PwogICAgICAgIGlmICggISRyS19yZXR1cm5fY291bnRfaGFzaC0+eyRjb3VudH0gKSB7CiAgICAgICAgICAgICRyS19yZXR1cm5fY291bnRfaGFzaC0+eyRjb3VudH0gPSAkS19yZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIHJldGFpbiBvbGQgdmFycyBkdXJpbmcgdHJhbnNpdGlvbiBwaGFzZQogICAgICAgICMgTm90ZTogdXNpbmcgPD0gdG8gbWF0Y2ggb2xkIHJlc3VsdHMgYnV0IGNvdWxkIHVzZSA8CiAgICAgICAgaWYgKCAhZGVmaW5lZCgkcmV0dXJuX2NvdW50X21pbikgfHwgJGNvdW50IDw9ICRyZXR1cm5fY291bnRfbWluICkgewogICAgICAgICAgICAkcmV0dXJuX2NvdW50X21pbiAgICAgICAgICAgPSAkY291bnQ7CiAgICAgICAgICAgICRpdGVtLT57cmV0dXJuX2NvdW50X21pbn0gICA9ICRjb3VudDsKICAgICAgICAgICAgJGl0ZW0tPntLX3JldHVybl9jb3VudF9taW59ID0gJEtfcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBOb3RlOiB1c2luZyA+PSB0byBtYXRjaCBvbGQgcmVzdWx0cyBidXQgY291bGQgdXNlID4KICAgICAgICBpZiAoICFkZWZpbmVkKCRyZXR1cm5fY291bnRfbWF4KSB8fCAkY291bnQgPj0gJHJldHVybl9jb3VudF9tYXggKSB7CiAgICAgICAgICAgICRyZXR1cm5fY291bnRfbWF4ICAgICAgICAgICA9ICRjb3VudDsKICAgICAgICAgICAgJGl0ZW0tPntyZXR1cm5fY291bnRfbWF4fSAgID0gJGNvdW50OwogICAgICAgICAgICAkaXRlbS0+e0tfcmV0dXJuX2NvdW50X21heH0gPSAkS19yZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICRpdGVtLT57cktfcmV0dXJuX2NvdW50X2hhc2h9ID0gJHJLX3JldHVybl9jb3VudF9oYXNoOwoKICAgIGlmICggREVCVUdfUkVUVVJOX0NPVU5UID4gMSApIHsKICAgICAgICBteSAkbWluID0gJGl0ZW0tPntyZXR1cm5fY291bnRfbWlufTsKICAgICAgICBteSAkbWF4ID0gJGl0ZW0tPntyZXR1cm5fY291bnRfbWF4fTsKICAgICAgICAkbWluID0gJyonIHVubGVzcyBkZWZpbmVkKCRtaW4pOwogICAgICAgICRtYXggPSAnKicgdW5sZXNzIGRlZmluZWQoJG1heCk7CiAgICAgICAgcHJpbnQgIkRFQlVHX1JFVFVSTjogcmV0dXJuaW5nIG1pbj0kbWluIG1heD0kbWF4XG4iOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgY291bnRfc3ViX3JldHVybl9hcmdzCgpzdWIgY291bnRfcmV0dXJuX3ZhbHVlc193YW50ZWQgewogICAgbXkgKCAkc2VsZiwgJGl0ZW0gKSA9IEBfOwoKICAgICMgR2l2ZW46ICRpdGVtID0gYSBoYXNoIHJlZiB3aXRoCiAgICAjICAgc2Vxbm9fbGlzdCA9PiBzZXF1ZW5jZSBudW1iZXIgdGhlIGNhbGwgYXJnIGxpc3Qgb2YgYSBzdWIgY2FsbAogICAgIyBTZXQgdmFsdWUgZm9yIHRoaXMga2V5IGluICckaXRlbSc6CiAgICAjICAgcmV0dXJuX2NvdW50X3dhbnRlZCA9PiBudW1iZXIgb2YgcmV0dXJuIGl0ZW1zIHdhbnRlZCBmcm9tIHRoZSBjYWxsCiAgICAjICAgICAgICAgICAgICAgICAgICAgICAgPSB1bmRlZiBpZiBpbmRldGVybWluYXRlLCBzdWNoIGFzIEBsaXN0CgogICAgIyBnZXQgdGhlIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgY2FsbCBhcmcgbGlzdCBmb3IgdGhpcyBjYWxsCiAgICBteSAkc2Vxbm9fbGlzdCA9ICRpdGVtLT57c2Vxbm9fbGlzdH07CiAgICByZXR1cm4gdW5sZXNzICgkc2Vxbm9fbGlzdCk7CgogICAgIyBHaXZlIHVwIGlmIGNhbGwgaXMgZm9sbG93ZWQgYnkgYSBib3VuZCBvcGVyYXRvciwgZm9yIGV4YW1wbGUKICAgICMgICAgIG15ICggJGZoLCAkdG1wZmlsZSApID0gJHNlbGYtPmlvKCktPnRlbXBmaWxlKCBESVIgPT4gJGRpciApOwogICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXi0tJEtjCiAgICBteSAkckxMICA9ICRzZWxmLT5bX3JMTF9dOwogICAgbXkgJEtjICAgPSAkc2VsZi0+W19LX2Nsb3NpbmdfY29udGFpbmVyX10tPnskc2Vxbm9fbGlzdH07CiAgICBteSAkS2NfbiA9ICRzZWxmLT5LX25leHRfY29kZSgkS2MpOwogICAgaWYgKCRLY19uKSB7CiAgICAgICAgbXkgJHR5cGVfbiA9ICRyTEwtPlskS2Nfbl0tPltfVFlQRV9dOwogICAgICAgIG15ICRvayAgICAgPSAkdHlwZV9uIGVxICc7JyB8fCAkaXNfY2xvc2luZ190eXBleyR0eXBlX259OwogICAgICAgIGlmICggISRvayAmJiAkdHlwZV9uIGVxICdrJyApIHsKICAgICAgICAgICAgbXkgJHRva2VuX24gPSAkckxMLT5bJEtjX25dLT5bX1RPS0VOX107CiAgICAgICAgICAgICRvayB8fD0gJGlzX2lmX3VubGVzc3skdG9rZW5fbn07CiAgICAgICAgICAgICRvayB8fD0gJGlzX2FuZF9vcnskdG9rZW5fbn07CiAgICAgICAgfQogICAgICAgIHJldHVybiB1bmxlc3MgJG9rOwogICAgfQoKICAgIG15ICRLbyAgID0gJHNlbGYtPltfS19vcGVuaW5nX2NvbnRhaW5lcl9dLT57JHNlcW5vX2xpc3R9OwogICAgbXkgJEtfbSAgPSAkc2VsZi0+S19wcmV2aW91c19jb2RlKCRLbyk7CiAgICBteSAkS19tbSA9ICRzZWxmLT5LX3ByZXZpb3VzX2NvZGUoJEtfbSk7CiAgICByZXR1cm4gdW5sZXNzICggZGVmaW5lZCgkS19tbSkgKTsKICAgIG15ICR0eXBlX20gID0gJHJMTC0+WyRLX21dLT5bX1RZUEVfXTsKICAgIG15ICR0b2tlbl9tID0gJHJMTC0+WyRLX21dLT5bX1RPS0VOX107CiAgICBteSAkdHlwZV9tbSA9ICRyTEwtPlskS19tbV0tPltfVFlQRV9dOwoKICAgICMgc3RhcnQgb2YgYmFja3dhcmRzIHNlYXJjaCBkZXBlbmRzIG9uIHRoZSBjYWxsIHR5cGUuLi4KICAgICMgbm90ZTogc2VlIHZhciAkcnN1Yl9jYWxsX3BhcmVuX2luZm9fYnlfc2Vxbm8gaW4gc3ViIHJlc3BhY2VfdG9rZW5zCiAgICBteSAkS19lcXVhbHM7CgogICAgIyAnZnVuY3Rpb24oJwogICAgaWYgKCAkdHlwZV9tIGVxICdVJyB8fCAkdHlwZV9tIGVxICd3JyApIHsKICAgICAgICAkS19lcXVhbHMgPSAkS19tbTsKICAgIH0KCiAgICAjICctPmZ1bmN0aW9uKCcKICAgIGVsc2lmICggJHR5cGVfbSBlcSAnaScgJiYgJHR5cGVfbW0gZXEgJy0+JyApIHsKICAgICAgICBteSAkS19tbW0gPSAkc2VsZi0+S19wcmV2aW91c19jb2RlKCRLX21tKTsKICAgICAgICBteSAkS19tbTQgPSAkc2VsZi0+S19wcmV2aW91c19jb2RlKCRLX21tbSk7CiAgICAgICAgcmV0dXJuIHVubGVzcyBkZWZpbmVkKCRLX21tNCk7CiAgICAgICAgbXkgJHR5cGVfbW1tID0gJHJMTC0+WyRLX21tbV0tPltfVFlQRV9dOwoKICAgICAgICAjIHNvbWV0aGluZyBsaWtlICckc2VsZi0+ZnVuY3Rpb24oJwogICAgICAgIGlmICggJHR5cGVfbW1tIGVxICdpJyApIHsKICAgICAgICAgICAgJEtfZXF1YWxzID0gJEtfbW00OwogICAgICAgIH0KCiAgICAgICAgIyBzb21ldGhpbmcgY29tcGxleCBsaWtlICckaGFzaF9vZl9vYmplY3Rze215X29ian0tPmZ1bmN0aW9uKCcKICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgVEJEOgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgJyZmdW5jdGlvbignCiAgICBlbHNpZiAoICR0eXBlX20gZXEgJ2knICYmIHN1YnN0ciggJHRva2VuX20sIDAsIDEgKSBlcSAnJicgKSB7CiAgICAgICAgJEtfZXF1YWxzID0gJEtfbW07CiAgICB9CgogICAgIyAnJGZ1bmN0aW9uLT4oJyAgWyBUT0RPOiBzaW1wbGUgYW5vbnltb3VzIHN1YiBjYWxsLCBub3QgdXNlZCB5ZXQgXQogICAgZWxzaWYgKCAkdHlwZV9tIGVxICctPicgJiYgJHR5cGVfbW0gZXEgJ2knICkgewogICAgICAgIG15ICRLX21tbSA9ICRzZWxmLT5LX3ByZXZpb3VzX2NvZGUoJEtfbW0pOwogICAgICAgICRLX2VxdWFscyA9ICRLX21tbTsKICAgIH0KCiAgICAjIGVycm9yCiAgICBlbHNlIHsKICAgICAgICBERVZFTF9NT0RFCiAgICAgICAgICAmJiBGYXVsdCgKInVuZXhwZWN0ZWQgY2FsbCB3aXRoIHR5cGVfbT0kdHlwZV9tIHRva2VuX209JHRva2VuX20gdHlwZV9tbT0kdHlwZV9tbVxuIgogICAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBsb29rIGZvciAnPScKICAgICMgTm90ZSB0aGF0IHRoaXMgaWdub3JlcyBhIHJldHVybiB2aWEgYSBzbGljZSwgbGlrZQogICAgIyAgICAgICAgICAoJHYxLCR2MikgPShmKHgpKVsxLDNdCiAgICAjIGJlY2F1c2UgdGhpcyBpcyBhbiBhcnJheSByZXR1cm4sIGFuZCB3ZSBqdXN0IHdhbnQgZXhwbGljaXQgbGlzdHMKICAgIGlmICggISRLX2VxdWFscyB8fCAkckxMLT5bJEtfZXF1YWxzXS0+W19UWVBFX10gbmUgJz0nICkgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAkS19jID0gJHNlbGYtPktfcHJldmlvdXNfY29kZSgkS19lcXVhbHMpOwogICAgcmV0dXJuIHVubGVzcyAoIGRlZmluZWQoJEtfYykgKTsKICAgIG15ICR0eXBlX2MgID0gJHJMTC0+WyRLX2NdLT5bX1RZUEVfXTsKICAgIG15ICR0b2tlbl9jID0gJHJMTC0+WyRLX2NdLT5bX1RPS0VOX107CiAgICBpZiAoICR0b2tlbl9jIG5lICcpJyApIHsKCiAgICAgICAgIyBIYW5kbGUgQGFycmF5ID0gZih4KSBvciAkc2NhbGFyPWYoeCksIGFuZCB0aGluZ3MgbGlrZQogICAgICAgICMgICAkcmhhc2gtPnt2dn0gPSBmKCk7CiAgICAgICAgIyAgICRoYXNoe3Z2fSA9IGYoKTsKICAgICAgICAjICAgJGFycmF5WyRpbmRleF0gPSBmKCk7CiAgICAgICAgaWYgKCAkaXNfY2xvc2luZ190eXBleyR0eXBlX2N9ICkgewoKICAgICAgICAgICAgIyBiYWNrdXAgZnJvbSB0aGUgY2xvc2luZyBicmFjZSB0byBhbnkgaWRlbnRpZmllcgogICAgICAgICAgICAjIE5vdGU6IGN1cnJlbnRseSBvbmx5IGdvaW5nIGJhY2sgb25lIGluZGV4LCBhIHN1YiBjb3VsZAogICAgICAgICAgICAjIGJlIHdyaXR0ZW4gdG8gaGFuZGxlIG1vcmUgY29tcGxleCB0aGluZ3MKICAgICAgICAgICAgbXkgJHNlcW5vX2MgPSAkckxMLT5bJEtfY10tPltfVFlQRV9TRVFVRU5DRV9dOwogICAgICAgICAgICByZXR1cm4gaWYgKCAhJHNlcW5vX2MgKTsKICAgICAgICAgICAgbXkgJEtvX2MgPSAkc2VsZi0+W19LX29wZW5pbmdfY29udGFpbmVyX10tPnskc2Vxbm9fY307CiAgICAgICAgICAgIHJldHVybiB1bmxlc3MgZGVmaW5lZCgkS29fYyk7CiAgICAgICAgICAgIG15ICRLX2NfbmV3ID0gJHNlbGYtPktfcHJldmlvdXNfY29kZSgkS29fYyk7CiAgICAgICAgICAgIHJldHVybiB1bmxlc3MgZGVmaW5lZCgkS19jX25ldyk7CiAgICAgICAgICAgICR0eXBlX2MgID0gJHJMTC0+WyRLX2NfbmV3XS0+W19UWVBFX107CiAgICAgICAgICAgICR0b2tlbl9jID0gJHJMTC0+WyRLX2NfbmV3XS0+W19UT0tFTl9dOwoKICAgICAgICAgICAgaWYgKCAkdHlwZV9jIGVxICctPicgKSB7CiAgICAgICAgICAgICAgICAkS19jX25ldyA9ICRzZWxmLT5LX3ByZXZpb3VzX2NvZGUoJEtfY19uZXcpOwogICAgICAgICAgICAgICAgcmV0dXJuIHVubGVzcyBkZWZpbmVkKCRLX2NfbmV3KTsKICAgICAgICAgICAgICAgICR0eXBlX2MgID0gJHJMTC0+WyRLX2NfbmV3XS0+W19UWVBFX107CiAgICAgICAgICAgICAgICAkdG9rZW5fYyA9ICRyTEwtPlskS19jX25ld10tPltfVE9LRU5fXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCAkdHlwZV9jIGVxICdpJyB8fCAkdHlwZV9jIGVxICd0JyApIHsKICAgICAgICAgICAgbXkgJHNpZ2lsID0gc3Vic3RyKCAkdG9rZW5fYywgMCwgMSApOwogICAgICAgICAgICBpZiAoICRzaWdpbCBlcSAnJCcgKSB7CiAgICAgICAgICAgICAgICAkaXRlbS0+e3JldHVybl9jb3VudF93YW50ZWR9ID0gMTsKICAgICAgICAgICAgICAgICRpdGVtLT57d2FudF9zY2FsYXJ9ICAgICAgICAgPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIENvdW50IGVsZW1lbnRzIGluIChsaXN0IG9mIHZhbHVlcyk9Zih4KQogICAgbXkgJHNlcW5vX2xocyA9ICRyTEwtPlskS19jXS0+W19UWVBFX1NFUVVFTkNFX107CiAgICByZXR1cm4gdW5sZXNzICgkc2Vxbm9fbGhzKTsKICAgIG15ICRyaGFzaCA9IHt9OwogICAgJHJoYXNoLT57c2Vxbm9fbGlzdH0gPSAkc2Vxbm9fbGhzOwogICAgJHNlbGYtPmNvdW50X2xpc3RfZWxlbWVudHMoJHJoYXNoKTsKICAgIG15ICRyZXR1cm5fY291bnRfd2FudGVkID0gJHJoYXNoLT57c2hpZnRfY291bnRfbWF4fTsKICAgIGlmICggREVCVUdfUkVUVVJOX0NPVU5UID4gMSApIHsKICAgICAgICBwcmludCAiREVCVUdfUkVUVVJOX0NPVU5UOiB3YW50ICRyZXR1cm5fY291bnRfd2FudGVkXG4iOwogICAgfQogICAgJGl0ZW0tPntyZXR1cm5fY291bnRfd2FudGVkfSA9ICRyZXR1cm5fY291bnRfd2FudGVkOwogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgY291bnRfcmV0dXJuX3ZhbHVlc193YW50ZWQKCnN1YiBzdWJfZGVmX2luZm9fbWFrZXIgewoKICAgIG15ICggJHNlbGYsICRycGFja2FnZV9sb29rdXBfbGlzdCwgJHJwcmVsaW1fY2FsbF9pbmZvICkgPSBAXzsKCiAgICAjIEdpdmVuOgogICAgIyAgICRycGFja2FnZV9sb29rdXBfbGlzdCA9IGxpc3Qgd2l0aCBpbmZvIGZvciBmaW5kaW5nIGNvbnRhaW5pbmcgcGFja2FnZQogICAgIyAgICRycHJlbGltX2NhbGxfaW5mbyA9IGhhc2ggcmVmIHdpdGggZmlyc3QgdHJ5IGF0IGNhbGwgaW5mbwoKICAgICMgUmV0dXJucyB0d28gaGFzaCByZWZlcmVuY2VzOgogICAgIyAgICBcJXN1Yl9pbmZvX2J5X3NlcW5vLAogICAgIyAgICBcJXN1Yl9zZXFub19ieV9rZXksCiAgICAjIHdoZXJlCiAgICAjICAgICAkc3ViX2luZm9fYnlfc2Vxbm97c2Vxbm99ID0gewogICAgIyAgICAgIHNlcW5vICAgICAgICA9PiAkc2Vxbm8sCiAgICAjICAgICAgcGFja2FnZSAgICAgID0+ICRwYWNrYWdlLAogICAgIyAgICAgIG5hbWUgICAgICAgICA9PiAkbmFtZSwKICAgICMgICAgICBzZXFub19saXN0ICAgPT4gJHNlcW5vIG9mIHRoZSBwYXJlbiBsaXN0IG9mIGFyZ3MKICAgICMgICAgICBzaGlmdF9jb3VudCAgPT4gbnVtYmVyIG9mIGFyZ3MKICAgICMgICAgICBpc19zaWduYXR1cmUgPT4gdHJ1ZSBpZiBzZXFub19saXN0IGlzIGEgc3ViIHNpZ25hdHVyZQogICAgIyAgICAgIHNlbGZfbmFtZSAgICA9PiBuYW1lIG9mIGZpcnN0IGFyZwogICAgIyAgfQogICAgIyBhbmQKICAgICMgICAgJHN1Yl9zZXFub19ieV9rZXl7J3BhY2thZ2U6Om5hbWUnfSA9IHNlcW5vOwogICAgIyB3aGljaCBnaXZlcyB0aGUgc2Vxbm8gZm9yIGEgc3ViIG5hbWUKCiAgICAjIFRPRE86IHBvc3NpYmxlIGZ1dHVyZSB1cGRhdGU6CiAgICAjIHBhY2thZ2UgbmFtZSBmb3IgJ215JyBzdWIgYW5kIGFub255bW91cyBzdWIgd2lsbCBiZSBwYXJlbnQgc3ViIHNlcW5vCgogICAgbXkgJHJMTCAgICAgICAgICAgICAgICAgID0gJHNlbGYtPltfckxMX107CiAgICBteSAkS19vcGVuaW5nX2NvbnRhaW5lciAgPSAkc2VsZi0+W19LX29wZW5pbmdfY29udGFpbmVyX107CiAgICBteSAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8gPSAkc2VsZi0+W19yYmxvY2tfdHlwZV9vZl9zZXFub19dOwogICAgbXkgJHJpc19zdWJfYmxvY2sgICAgICAgID0gJHNlbGYtPltfcmlzX3N1Yl9ibG9ja19dOwoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIE1haW4gbG9vcCBvdmVyIHN1YnMgdG8gY291bnQgYXJncwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIG15IEBwYWNrYWdlX3N0YWNrID0gcmV2ZXJzZSggQHskcnBhY2thZ2VfbG9va3VwX2xpc3R9ICk7CiAgICBteSAoICRjdXJyZW50X3BhY2thZ2UsICRLYmVnaW4sICRLZW5kICkgPSBAeyBwb3AgQHBhY2thZ2Vfc3RhY2sgfTsKICAgIG15ICVzdWJfaW5mb19ieV9zZXFubzsKICAgIG15ICVzdWJfc2Vxbm9fYnlfa2V5OwogICAgZm9yZWFjaCBteSAkc2Vxbm8gKCBzb3J0IHsgJGEgPD0+ICRiIH0ga2V5cyAleyRyaXNfc3ViX2Jsb2NrfSApIHsKCiAgICAgICAgIyB1cGRhdGUgdGhlIGN1cnJlbnQgcGFja2FnZQogICAgICAgIG15ICRLbyA9ICRLX29wZW5pbmdfY29udGFpbmVyLT57JHNlcW5vfTsKICAgICAgICB3aGlsZSAoICRLbyA+ICRLZW5kICYmIEBwYWNrYWdlX3N0YWNrICkgewogICAgICAgICAgICAoICRjdXJyZW50X3BhY2thZ2UsICRLYmVnaW4sICRLZW5kICkgPSBAeyBwb3AgQHBhY2thZ2Vfc3RhY2sgfTsKICAgICAgICB9CiAgICAgICAgbXkgJGJsb2NrX3R5cGUgPSAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8tPnskc2Vxbm99OwoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIEdldCB0aGUgc3ViIG5hbWUgYW5kIHBhY2thZ2UKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgIyBFeGFtcGxlcyBvZiB3aGF0IHdlIHdhbnQgdG8gZXh0cmFjdCBmcm9tICckYmxvY2tfdHlwZSc6CiAgICAgICAgIyAgICRibG9ja190eXBlICAgICAgICAgICAgICAgICAgICRuYW1lCiAgICAgICAgIyAgICdzdWIgc2V0aWRlbnRpZmllcigkKScgICAgPT4gJ3NldGlkZW50aWZpZXInCiAgICAgICAgIyAgICdtZXRob2Qgc2V0aWRlbnRpZmllcigkKScgPT4gJ3NldGlkZW50aWZpZXInCiAgICAgICAgIyBFeGFtcGxlczoKICAgICAgICAjICJzdWIgaGVsbG8iLCAic3ViIGhlbGxvKCQpIiwgInN1YiBoZWxsbyAgICAgKCQpIgogICAgICAgICMgVGhlcmUgd2lsbCBiZSBhIHNpbmdsZSBzcGFjZSBhZnRlciAnc3ViJyBidXQgYW55IG51bWJlciBiZWZvcmUKICAgICAgICAjIHByb3RvdHlwZQogICAgICAgIG15ICRuYW1lICAgICAgPSAkYmxvY2tfdHlwZTsKICAgICAgICBteSAkcG9zX3NwYWNlID0gaW5kZXgoICRibG9ja190eXBlLCBTUEFDRSApOwogICAgICAgIGlmICggJHBvc19zcGFjZSA+IDAgKSB7CiAgICAgICAgICAgICRuYW1lID0gc3Vic3RyKCAkYmxvY2tfdHlwZSwgJHBvc19zcGFjZSArIDEgKTsKICAgICAgICB9CiAgICAgICAgbXkgJHBvc19wYXJlbiA9IGluZGV4KCAkbmFtZSwgJygnICk7CiAgICAgICAgbXkgJHByb3RvdHlwZTsKICAgICAgICBpZiAoICRwb3NfcGFyZW4gPiAwICkgewogICAgICAgICAgICAkcHJvdG90eXBlID0gc3Vic3RyKCAkbmFtZSwgJHBvc19wYXJlbiApOwogICAgICAgICAgICAkbmFtZSAgICAgID0gc3Vic3RyKCAkbmFtZSwgMCwgJHBvc19wYXJlbiApOwogICAgICAgICAgICAkbmFtZSA9fiBzL1xzKyQvLzsKICAgICAgICB9CgogICAgICAgIG15ICRwYWNrYWdlID0gJGN1cnJlbnRfcGFja2FnZTsKICAgICAgICBpZiAoICggaW5kZXgoICRuYW1lLCAnOicgKSA+PSAwIHx8IGluZGV4KCAkbmFtZSwgIiciICkgPj0gMCApCiAgICAgICAgICAgICYmICRuYW1lID1+IC9eKC4qXFcpKFx3KykkLyApCiAgICAgICAgewogICAgICAgICAgICAkcGFja2FnZSA9ICQxOwogICAgICAgICAgICAkbmFtZSAgICA9ICQyOwogICAgICAgICAgICAkcGFja2FnZSA9fiBzL1wnLzo6L2c7CiAgICAgICAgICAgICRwYWNrYWdlID1+IHMvOjokLy87CiAgICAgICAgfQogICAgICAgICRwYWNrYWdlID0gJ21haW4nIHVubGVzcyAoJHBhY2thZ2UpOwoKICAgICAgICAjIE1ha2UgYSBoYXNoIG9mIGluZm8gZm9yIHRoaXMgc3ViCiAgICAgICAgbXkgJGxubyAgPSAkckxMLT5bJEtvXS0+W19MSU5FX0lOREVYX10gKyAxOwogICAgICAgIG15ICRpdGVtID0gewogICAgICAgICAgICBzZXFubyAgICAgICA9PiAkc2Vxbm8sCiAgICAgICAgICAgIHBhY2thZ2UgICAgID0+ICRwYWNrYWdlLAogICAgICAgICAgICBuYW1lICAgICAgICA9PiAkbmFtZSwKICAgICAgICAgICAgbGluZV9udW1iZXIgPT4gJGxubywKICAgICAgICB9OwoKICAgICAgICBteSAka2V5ID0gJHBhY2thZ2UgLiAnOjonIC4gJG5hbWU7CgogICAgICAgICMgU2V0IGZsYWcgaW5kaWNhdGluZyBpZiBhcmdzIG1heSBiZSBleHBlY3RlZCB0byBhbGxvdyBvcHRpbWl6YXRpb24KICAgICAgICBteSAkY2FsbF9pdGVtID0gJHJwcmVsaW1fY2FsbF9pbmZvLT57JGtleX07CiAgICAgICAgJGl0ZW0tPnttYXhfYXJnX2NvdW50fSA9ICRjYWxsX2l0ZW0tPnttYXhfYXJnX2NvdW50fTsKCiAgICAgICAgIyBBZGQgYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGlucHV0IGFyZ3MKICAgICAgICAkc2VsZi0+Y291bnRfc3ViX2lucHV0X2FyZ3MoJGl0ZW0pOwoKICAgICAgICAjIEFkZCBhIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgcmV0dXJuIGFyZ3MKICAgICAgICAkc2VsZi0+Y291bnRfc3ViX3JldHVybl9hcmdzKCRpdGVtKTsKCiAgICAgICAgIyBTdG9yZSB0aGUgc3ViIGluZm8gYnkgc2VxdWVuY2UgbnVtYmVyCiAgICAgICAgJHN1Yl9pbmZvX2J5X3NlcW5veyRzZXFub30gPSAkaXRlbTsKCiAgICAgICAgIyBhbmQgc2F2ZSB0aGUgc3ViIHNlcXVlbmNlIG51bWJlciBpbmRleGVkIGJ5IHN1YiBuYW1lCiAgICAgICAgJHN1Yl9zZXFub19ieV9rZXl7JGtleX0gPSAkc2Vxbm87CiAgICB9CiAgICByZXR1cm4gKCBcJXN1Yl9pbmZvX2J5X3NlcW5vLCBcJXN1Yl9zZXFub19ieV9rZXkgKTsKfSAjIyBlbmQgc3ViIHN1Yl9kZWZfaW5mb19tYWtlcgoKc3ViIHVwZGF0ZV9zdWJfY2FsbF9wYXJlbl9pbmZvIHsKCiAgICBteSAoICRzZWxmLCAkcnBhY2thZ2VfbG9va3VwX2xpc3QgKSA9IEBfOwoKICAgICMgR2l2ZW46CiAgICAjICAgJHJwYWNrYWdlX2xvb2t1cF9saXN0ID0gbGlzdCB3aXRoIGluZm8gZm9yIGZpbmRpbmcgY29udGFpbmluZyBwYWNrYWdlCgogICAgIyBVcGRhdGUgdGhlIGhhc2ggb2YgaW5mbyBhYm91dCB0aGUgY2FsbCBwYXJhbWV0ZXJzIHdpdGggYXJnIGNvdW50cwogICAgIyBhbmQgcGFja2FnZS4gSXQgY29udGFpbnMgdGhlIHNlcXVlbmNlIG51bWJlciBvZiBlYWNoIHBhcmVuIGFuZAogICAgIyB0eXBlIG9mIGNhbGwsIGFuZCB3ZSBtdXN0IGFkZCB0aGUgYXJnIGNvdW50IGFuZCBwYWNrYWdlLgoKICAgIG15ICRyTEwgICAgICAgICAgICAgICAgICA9ICRzZWxmLT5bX3JMTF9dOwogICAgbXkgJEtfb3BlbmluZ19jb250YWluZXIgID0gJHNlbGYtPltfS19vcGVuaW5nX2NvbnRhaW5lcl9dOwogICAgbXkgJEtfY2xvc2luZ19jb250YWluZXIgID0gJHNlbGYtPltfS19jbG9zaW5nX2NvbnRhaW5lcl9dOwogICAgbXkgJHJ0eXBlX2NvdW50X2J5X3NlcW5vID0gJHNlbGYtPltfcnR5cGVfY291bnRfYnlfc2Vxbm9fXTsKICAgIG15ICRyc3ViX2NhbGxfcGFyZW5faW5mb19ieV9zZXFubyA9CiAgICAgICRzZWxmLT5bX3JzdWJfY2FsbF9wYXJlbl9pbmZvX2J5X3NlcW5vX107CgogICAgbXkgQHBhY2thZ2Vfc3RhY2sgPSByZXZlcnNlKCBAeyRycGFja2FnZV9sb29rdXBfbGlzdH0gKTsKICAgIG15ICggJGN1cnJlbnRfcGFja2FnZSwgJEtiZWdpbiwgJEtlbmQgKSA9IEB7IHBvcCBAcGFja2FnZV9zdGFjayB9OwoKICAgIG15ICRpc19kb2xsYXJfdW5kZXJzY29yZV96ZXJvID0gc3ViIHsKCiAgICAgICAgbXkgKCRLX2Nsb3NpbmdfYnJhY2tldCkgPSBAXzsKCiAgICAgICAgIyBHaXZlbjoKICAgICAgICAjICAgJEtfY2xvc2luZ19icmFja2V0IC0gaW5kZXggb2YgYSAnXScKICAgICAgICAjIFJldHVybjoKICAgICAgICAjICAgdHJ1ZSBvZiB0aGlzIGlzIHRoZSBlbmQgb2YgJyRfWzBdJwogICAgICAgICMgICBmYWxzZSBvdGhlcndpc2UKICAgICAgICAjCiAgICAgICAgIyAgcmV0dXJuICRfWzBdLT5QUF9kZWNvZGVfanNvbiguLi4KICAgICAgICAjICAgICAgICAgICAgIHwKICAgICAgICAjICAgICAgICAgICAgIC0tLSRLX2Nsb3NpbmdfYnJhY2tldAogICAgICAgIHJldHVybiB1bmxlc3MgKCRLX2Nsb3NpbmdfYnJhY2tldCk7CiAgICAgICAgbXkgJHNlcW5vID0gJHJMTC0+WyRLX2Nsb3NpbmdfYnJhY2tldF0tPltfVFlQRV9TRVFVRU5DRV9dOwogICAgICAgIHJldHVybiB1bmxlc3MgKCRzZXFubyk7CiAgICAgICAgbXkgJEtvID0gJEtfb3BlbmluZ19jb250YWluZXItPnskc2Vxbm99OwogICAgICAgIHJldHVybiB1bmxlc3MgZGVmaW5lZCgkS28pOwogICAgICAgIG15ICRLbnVtID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLbyk7CiAgICAgICAgcmV0dXJuIHVubGVzcyAoICRLbnVtICYmICRyTEwtPlskS251bV0tPltfVE9LRU5fXSBlcSAnMCcgKTsKICAgICAgICBteSAkS2MgPSAkc2VsZi0+S19uZXh0X2NvZGUoJEtudW0pOwogICAgICAgIHJldHVybiB1bmxlc3MgKCAkS2MgZXEgJEtfY2xvc2luZ19icmFja2V0ICk7CiAgICAgICAgbXkgJEtfcCA9ICRzZWxmLT5LX3ByZXZpb3VzX2NvZGUoJEtvKTsKICAgICAgICByZXR1cm4gdW5sZXNzICggJHJMTC0+WyRLX3BdLT5bX1RPS0VOX10gZXEgJyRfJyApOwogICAgICAgIHJldHVybiAxOwogICAgfTsgIyMgZW5kICRpc19kb2xsYXJfdW5kZXJzY29yZV96ZXJvID0gc3ViCgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgTG9vcCBvdmVyIHNlcXVlbmNlIG51bWJlcnMgb2YgYWxsIGNhbGwgcGFyZW5zCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBwYXJlbnMgYXJlIG9mIHRoZSBmb3JtIGYoICAtPmYoICAgICZmKCAgd2hlcmUgJ2YnIGlzIGEgYmFyZXdvcmQKICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgXiAgICAgXiAgICAgIF4KICAgICMgTm90ZSB0aGF0IHdlIGRvIG5vdCBoYW5kbGUgYW5vbnltb3VzIHN1YnMgYmVjYXVzZSBpdCBpcyBub3QgcG9zc2libGUgdG8KICAgICMgY29ubmVjdCB0aGVtIHRvIHRoZSBhY3R1YWwgc3ViIGRlZmluaXRpb24uCiAgICBmb3JlYWNoCiAgICAgIG15ICRzZXFubyAoIHNvcnQgeyAkYSA8PT4gJGIgfSBrZXlzICV7JHJzdWJfY2FsbF9wYXJlbl9pbmZvX2J5X3NlcW5vfSApCiAgICB7CgogICAgICAgICMgdXBkYXRlIHRoZSBjdXJyZW50IHBhY2thZ2UKICAgICAgICBteSAkS28gPSAkS19vcGVuaW5nX2NvbnRhaW5lci0+eyRzZXFub307CiAgICAgICAgd2hpbGUgKCAkS28gPiAkS2VuZCAmJiBAcGFja2FnZV9zdGFjayApIHsKICAgICAgICAgICAgKCAkY3VycmVudF9wYWNrYWdlLCAkS2JlZ2luLCAkS2VuZCApID0gQHsgcG9wIEBwYWNrYWdlX3N0YWNrIH07CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0aGUgbmV4dCBjYWxsIGxpc3QKICAgICAgICBteSAkaXRlbSAgICA9ICRyc3ViX2NhbGxfcGFyZW5faW5mb19ieV9zZXFuby0+eyRzZXFub307CiAgICAgICAgbXkgJG5hbWUgICAgPSAkaXRlbS0+e3Rva2VuX219OwogICAgICAgIG15ICR0eXBlX21tID0gJGl0ZW0tPnt0eXBlX21tfTsKCiAgICAgICAgIyBmaW5kIGZ1bmN0aW9uIGFuZCBwYWNrYWdlCiAgICAgICAgbXkgJGlzX2FtcGVyc2FuZF9jYWxsOwoKICAgICAgICAjIG5hbWUgd2lsbCBiZSBsaWtlICcmZnVuY3Rpb24nIGZvciBhbiAmIGNhbGwKICAgICAgICBpZiAoIHN1YnN0ciggJG5hbWUsIDAsIDEgKSBlcSAnJicgKSB7CiAgICAgICAgICAgICRpc19hbXBlcnNhbmRfY2FsbCA9IDE7CiAgICAgICAgICAgICRuYW1lICAgICAgICAgICAgICA9IHN1YnN0ciggJG5hbWUsIDEgKTsKICAgICAgICB9CgogICAgICAgIG15ICRjYWxsX3R5cGUgPSAkaXNfYW1wZXJzYW5kX2NhbGwgPyAnJicgOiBFTVBUWV9TVFJJTkc7CgogICAgICAgIG15ICRjYWxsZXJfbmFtZSA9IEVNUFRZX1NUUklORzsKICAgICAgICBteSAkY2xhc3NfbmFtZSAgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgaWYgKCAkdHlwZV9tbSBlcSAnLT4nICkgewogICAgICAgICAgICAkY2FsbF90eXBlID0gJy0+JzsKICAgICAgICAgICAgbXkgJEtfbSAgID0gJHNlbGYtPktfcHJldmlvdXNfY29kZSgkS28pOwogICAgICAgICAgICBteSAkS19tbSAgPSAkc2VsZi0+S19wcmV2aW91c19jb2RlKCRLX20pOwogICAgICAgICAgICBteSAkS19tbW0gPSAkc2VsZi0+S19wcmV2aW91c19jb2RlKCRLX21tKTsKICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRLX21tbSkgKSB7CiAgICAgICAgICAgICAgICBteSAkdHlwZV9tbW0gID0gJHJMTC0+WyRLX21tbV0tPltfVFlQRV9dOwogICAgICAgICAgICAgICAgbXkgJHRva2VuX21tbSA9ICRyTEwtPlskS19tbW1dLT5bX1RPS0VOX107CiAgICAgICAgICAgICAgICBpZiAoICR0eXBlX21tbSBlcSAnaScgKSB7CiAgICAgICAgICAgICAgICAgICAgJGNhbGxlcl9uYW1lID0gJHRva2VuX21tbTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJHR5cGVfbW1tIGVxICd3JyApIHsKCiAgICAgICAgICAgICAgICAgICAgIyMgIEE6OkItPmRvX3NvbWV0aGluZyggJHZhcjEsICR2YXIyICk7CiAgICAgICAgICAgICAgICAgICAgIyMgIHd3d3ctPmlpaWlpaWlpaWlpaXsgaWlpaWksIGlpaWlpIH07CiAgICAgICAgICAgICAgICAgICAgaWYgKCBpbmRleCggJHRva2VuX21tbSwgJzo6JyApID49IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjbGFzc19uYW1lID0gJHRva2VuX21tbTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNsYXNzX25hbWUgPX4gcy86OiQvLzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoICR0b2tlbl9tbW0gZXEgJ10nICkgewogICAgICAgICAgICAgICAgICAgIGlmICggJGlzX2RvbGxhcl91bmRlcnNjb3JlX3plcm8tPigkS19tbW0pICkgewogICAgICAgICAgICAgICAgICAgICAgICAkY2FsbGVyX25hbWUgPSAnJF9bMF0nOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgeyB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgbG9vayBmb3IgZXhwbGljaXQgcGFja2FnZSBvbiBuYW1lCiAgICAgICAgbXkgJHBhY2thZ2UgPSAkY3VycmVudF9wYWNrYWdlOwogICAgICAgIGlmICggKCBpbmRleCggJG5hbWUsICc6JyApID49IDAgfHwgaW5kZXgoICRuYW1lLCAiJyIgKSA+PSAwICkKICAgICAgICAgICAgJiYgJG5hbWUgPX4gL14oLipcVykoXHcrKSQvICkKICAgICAgICB7CiAgICAgICAgICAgICRwYWNrYWdlID0gJDE7CiAgICAgICAgICAgICRuYW1lICAgID0gJDI7CiAgICAgICAgICAgICRwYWNrYWdlID1+IHMvXCcvOjovZzsKICAgICAgICAgICAgJHBhY2thZ2UgPX4gcy86OiQvLzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmICgkY2xhc3NfbmFtZSkgewogICAgICAgICAgICAgICAgJHBhY2thZ2UgPSAkY2xhc3NfbmFtZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoICEkcGFja2FnZSApIHsgJHBhY2thZ2UgPSAnbWFpbicgfQoKICAgICAgICAjIGNvdW50IHRoZSBhcmdzCiAgICAgICAgbXkgJHJ0eXBlX2NvdW50ID0gJHJ0eXBlX2NvdW50X2J5X3NlcW5vLT57JHNlcW5vfTsKICAgICAgICBteSAkYXJnX2NvdW50ICAgPSAwOwogICAgICAgIGlmICgkcnR5cGVfY291bnQpIHsKICAgICAgICAgICAgbXkgJGNvbW1hX2NvdW50ICAgICA9ICRydHlwZV9jb3VudC0+eycsJ307CiAgICAgICAgICAgIG15ICRmYXRfY29tbWFfY291bnQgPSAkcnR5cGVfY291bnQtPnsnPT4nfTsKICAgICAgICAgICAgaWYgKCRjb21tYV9jb3VudCkgICAgIHsgJGFyZ19jb3VudCArPSAkY29tbWFfY291bnQgfQogICAgICAgICAgICBpZiAoJGZhdF9jb21tYV9jb3VudCkgeyAkYXJnX2NvdW50ICs9ICRmYXRfY29tbWFfY291bnQgfQogICAgICAgIH0KCiAgICAgICAgIyBUaGUgY29tbWEgY291bnQgZG9lcyBub3QgaW5jbHVkZSBhbnkgdHJhaWxpbmcgY29tbWEsIHNvIGFkZCAxLi4KICAgICAgICBpZiAoICEkYXJnX2NvdW50ICkgewoKICAgICAgICAgICAgIyAuLmJ1dCBub3QgaWYgcGFyZW5zIGFyZSBlbXB0eQogICAgICAgICAgICBteSAkS2MgPSAkS19jbG9zaW5nX2NvbnRhaW5lci0+eyRzZXFub307CiAgICAgICAgICAgIG15ICRLbiA9ICRLbyArIDE7CiAgICAgICAgICAgIGlmICggJEtuIDwgJEtjICkgewogICAgICAgICAgICAgICAgbXkgJHR5cGVfbiA9ICRyTEwtPlskS25dLT5bX1RZUEVfXTsKICAgICAgICAgICAgICAgIGlmICggJHR5cGVfbiBlcSAnYicgKSB7CiAgICAgICAgICAgICAgICAgICAgJEtuICs9IDE7CiAgICAgICAgICAgICAgICAgICAgJHR5cGVfbiA9ICRyTEwtPlskS25dLT5bX1RZUEVfXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICggJHR5cGVfbiBlcSAnIycgKSB7CiAgICAgICAgICAgICAgICAgICAgJEtuID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLbyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoICRLbiAhPSAkS2MgKSB7ICRhcmdfY291bnQgKz0gMSB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRhcmdfY291bnQgKz0gMTsKICAgICAgICB9CgogICAgICAgICMgVGhlIGFyZyBjb3VudCBpcyB1bmRlZmluZWQgaWYgdGhlcmUgYXJlIG5vbi1zY2FsYXJzIGluIHRoZSBsaXN0CiAgICAgICAgJGl0ZW0tPntzZXFub19saXN0fSA9ICRzZXFubzsKICAgICAgICBpZiAoJGFyZ19jb3VudCkgewogICAgICAgICAgICAkaXRlbS0+e2lzX3NpZ25hdHVyZX0gICAgPSAwOwogICAgICAgICAgICAkaXRlbS0+e3NoaWZ0X2NvdW50X21pbn0gPSAwOwogICAgICAgICAgICAkaXRlbS0+e3NlbGZfbmFtZX0gICAgICAgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgICRzZWxmLT5jb3VudF9saXN0X2VsZW1lbnRzKCRpdGVtKTsKICAgICAgICAgICAgJGFyZ19jb3VudCA9ICRpdGVtLT57c2hpZnRfY291bnRfbWlufTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHRoZSByZXR1cm4gY291bnQgZXhwZWN0ZWQgZm9yIHRoaXMgY2FsbCBieSBzY2FubmluZyB0byB0aGUgbGVmdAogICAgICAgICRzZWxmLT5jb3VudF9yZXR1cm5fdmFsdWVzX3dhbnRlZCgkaXRlbSk7CgogICAgICAgICMgdXBkYXRlIHRoZSBoYXNoIG9mIGluZm8gZm9yIHRoaXMgaXRlbQogICAgICAgIG15ICRsaW5lX251bWJlciA9ICRyTEwtPlskS29dLT5bX0xJTkVfSU5ERVhfXSArIDE7CiAgICAgICAgJGl0ZW0tPnthcmdfY291bnR9ICAgPSAkYXJnX2NvdW50OwogICAgICAgICRpdGVtLT57cGFja2FnZX0gICAgID0gJHBhY2thZ2U7CiAgICAgICAgJGl0ZW0tPntuYW1lfSAgICAgICAgPSAkbmFtZTsKICAgICAgICAkaXRlbS0+e2xpbmVfbnVtYmVyfSA9ICRsaW5lX251bWJlcjsKICAgICAgICAkaXRlbS0+e2NhbGxfdHlwZX0gICA9ICRjYWxsX3R5cGU7CiAgICAgICAgJGl0ZW0tPntjYWxsZXJfbmFtZX0gPSAkY2FsbGVyX25hbWU7CiAgICAgICAgJGl0ZW0tPntjbGFzc19uYW1lfSAgPSAkY2xhc3NfbmFtZTsKICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHVwZGF0ZV9zdWJfY2FsbF9wYXJlbl9pbmZvCgp7CiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgU3ViIHRvIGxvb2sgYXQgZmlyc3QgdXNlIG9mICRzZWxmIGluIGEgc3BlY2lmaWVkIHN1YgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBteSAlc2VsZl9jYWxsX2NhY2hlOwogICAgbXkgJWlzX29vX2NhbGxfY2FjaGU7CgogICAgc3ViIGluaXRpYWxpemVfc2VsZl9jYWxsX2NhY2hlIHsKICAgICAgICBteSAkc2VsZiA9IHNoaWZ0OwoKICAgICAgICAjIG11c3QgYmUgY2FsbGVkIG9uY2UgcGVyIGZpbGUgYmVmb3JlIGZpcnN0IGNhbGwgdG8gc3ViIHNlbGZfY2FsbF9jaGVjawogICAgICAgICVzZWxmX2NhbGxfY2FjaGUgID0gKCk7CiAgICAgICAgJWlzX29vX2NhbGxfY2FjaGUgPSAoKTsKICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgaW5pdGlhbGl6ZV9zZWxmX2NhbGxfY2FjaGUKCiAgICBzdWIgc2VsZl9jYWxsX2NoZWNrIHsKICAgICAgICBteSAoICRzZWxmLCAkc2Vxbm9fc3ViICkgPSBAXzsKCiAgICAgICAgIyBUcnkgdG8gZGVjaWRlIGlmIGEgc3ViIGNhbGwgd2l0aCAnJHNlbGYtPicgaXMgYSBjYWxsIHRvIGFuCiAgICAgICAgIyBpbnRlcm5hbCBzdWIgYnkgbG9va2luZyBhdCB0aGUgZmlyc3QgJyRzZWxmJyB1c2FnZS4KCiAgICAgICAgIyBHaXZlbjoKICAgICAgICAjICAgJHNlcW5vX3N1YiA9IHNlcXVlbmNlIG51bWJlciBvZiBzdWIgdG8gYmUgY2hlY2tlZAogICAgICAgICMgUmV0dXJuOgogICAgICAgICMgICAkaXNfc2VsZl9jYWxsID0gdHJ1ZSBpZiB0aGlzIGlzIGFuIGludGVybmFsICRzZWxmLT4gY2FsbAogICAgICAgICMgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gdGhlIGZpcnN0ICRzZWxmIGluIHRoZSBzdWIuCiAgICAgICAgIyAgICRpc19vb19jYWxsICAgPSB0cnVlIGlmIGEgY2FsbCAnJHNlbGYtPicgYXBwZWFycyB0byBiZQogICAgICAgICMgICAgICAgICB3aXRoaW4gYW4gT08gZnJhbWV3b3JrIHdoaWNoIGhpZGVzIHRoZSAkc2VsZiBhcmcuCiAgICAgICAgIyBUaGlzIHVzZXMgdGhlIHZhcmlhYmxlIF9yS19maXJzdF9zZWxmX2J5X3N1Yl9zZXFub18gd2hpY2gKICAgICAgICAjIGlzIHNldCBieSBzdWIgcmVzcGFjZV90b2tlbnMuCgogICAgICAgIG15ICRpc19zZWxmX2NhbGwgPSAkc2VsZl9jYWxsX2NhY2hleyRzZXFub19zdWJ9OwogICAgICAgIG15ICRpc19vb19jYWxsICAgPSAkaXNfb29fY2FsbF9jYWNoZXskc2Vxbm9fc3VifTsKCiAgICAgICAgaWYgKCAhZGVmaW5lZCgkaXNfc2VsZl9jYWxsKSApIHsKICAgICAgICAgICAgJGlzX3NlbGZfY2FsbCA9IDA7CiAgICAgICAgICAgICRpc19vb19jYWxsICAgPSAwOwoKICAgICAgICAgICAgbXkgJHJMTCA9ICRzZWxmLT5bX3JMTF9dOwogICAgICAgICAgICBteSAkS19maXJzdF9zZWxmID0KICAgICAgICAgICAgICAkc2VsZi0+W19yS19maXJzdF9zZWxmX2J5X3N1Yl9zZXFub19dLT57JHNlcW5vX3N1Yn07CgogICAgICAgICAgICAjIGFuIGluZGV4IEsgc3RvcmVkIGJ5IHJlc3BhY2VfdG9rZW5zIG1heSBiZSAxIGxvdwogICAgICAgICAgICAkS19maXJzdF9zZWxmKysKICAgICAgICAgICAgICBpZiAoICRLX2ZpcnN0X3NlbGYKICAgICAgICAgICAgICAgICYmICRyTEwtPlskS19maXJzdF9zZWxmXS0+W19UWVBFX10gZXEgJ2InICk7CgogICAgICAgICAgICBteSAkS24gICAgID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLX2ZpcnN0X3NlbGYpOwogICAgICAgICAgICBteSAkdHlwZV9uID0gJEtuID8gJHJMTC0+WyRLbl0tPltfVFlQRV9dIDogJ2InOwoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgVHJ5IDNhLiBpZiAiJHNlbGYtPiIgdGhlbiBhc3N1bWUgT08gY2FsbAogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgaWYgKCAkdHlwZV9uIGVxICctPicgKSB7CiAgICAgICAgICAgICAgICAkaXNfc2VsZl9jYWxsID0gMTsKCiAgICAgICAgICAgICAgICAjIEFsc28gc2V0IGEgZmxhZyB0byByZWR1Y2UgdGhlIGNhbGwgYXJnIGNvdW50IGJ5IDEKICAgICAgICAgICAgICAgICMgYmVjYXVzZSBpdCBsb29rcyB0aGlzIGlzIGFuIE9PIHN5c3RlbSB3aGljaAogICAgICAgICAgICAgICAgIyBoaWRlcyB0aGUgJHNlbGYgY2FsbCBhcmcuCiAgICAgICAgICAgICAgICAjIE5PVEU6IHRvIGJlIHN1cmUsIHdlIGNvdWxkIHNjYW4gYWxsIHN1YiBhcmdzCiAgICAgICAgICAgICAgICAjIGluIGFkdmFuY2UgdG8gY2hlY2sgdGhhdCBhbGwgZmlyc3Qgc3ViIGFyZ3MKICAgICAgICAgICAgICAgICMgYXJlIG5vdCBuYW1lZCAkc2VsZgogICAgICAgICAgICAgICAgJGlzX29vX2NhbGwgPSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgIyBUcnkgM2IuICIkc2VsZiA9IGJsZXNzIgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgZWxzaWYgKCAkdHlwZV9uIGVxICc9JyApIHsKICAgICAgICAgICAgICAgIG15ICRLbm4gPSAkc2VsZi0+S19uZXh0X2NvZGUoJEtuKTsKICAgICAgICAgICAgICAgICRpc19zZWxmX2NhbGwgPSAkS25uICYmICRyTEwtPlskS25uXS0+W19UT0tFTl9dIGVxICdibGVzcyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgbm9uZSBvZiB0aGUgYWJvdmUKICAgICAgICAgICAgZWxzZSB7IH0KCiAgICAgICAgICAgICRzZWxmX2NhbGxfY2FjaGV7JHNlcW5vX3N1Yn0gID0gJGlzX3NlbGZfY2FsbDsKICAgICAgICAgICAgJGlzX29vX2NhbGxfY2FjaGV7JHNlcW5vX3N1Yn0gPSAkaXNfb29fY2FsbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICggJGlzX3NlbGZfY2FsbCwgJGlzX29vX2NhbGwgKTsKICAgIH0gIyMgZW5kIHN1YiBzZWxmX2NhbGxfY2hlY2sKfQoKdXNlIGNvbnN0YW50IERFQlVHX1NFTEYgPT4gMDsKCnN1YiBjcm9zc19jaGVja19zdWJfY2FsbHMgewoKICAgIG15ICgkc2VsZikgPSBAXzsKCiAgICAjIFRoaXMgcm91dGluZSBsb29rcyBmb3IgaXNzdWVzIGZvciB0aGVzZSBwYXJhbWV0ZXJzOgogICAgIyAgIC0tZHVtcC1taXNtYXRjaGVkLWFyZ3MKICAgICMgICAtLXdhcm4tbWlzbWF0Y2hlZC1hcmdzCiAgICAjICAgLS1kdW1wLW1pc21hdGNoZWQtcmV0dXJucwogICAgIyAgIC0td2Fybi1taXNtYXRjaGVkLXJldHVybnMKCiAgICAjIEl0IHJldHVybnMgYSBoYXNoIG9mIHZhbHVlcyB3aXRoIGFueSB3YXJuaW5ncyBmb3VuZAoKICAgIG15ICRyTEwgPSAkc2VsZi0+W19yTExfXTsKCiAgICAjIFRoZSBtaXNtYXRjaGVkLWFyZ3MgY2hlY2tzIGFyZSBpbmRpY2F0ZWQgYnkgdGhlc2UgbGV0dGVyczoKICAgICMgYSA9IGJvdGggbWV0aG9kIGFuZCBub24tbWV0aG9kIGNhbGxzIHRvIGEgc3ViCiAgICAjICAgICAtIGV2ZW4gZm9yIHR3byBzdWJzIGluIGEgZGlmZmVyZW50IHBhY2thZ2UKICAgICMgbyA9IG92ZXJjb3VudDogY2FsbCBhcmcgY291bnRzIGV4Y2VlZCBudW1iZXIgZXhwZWN0ZWQgYnkgYSBzdWIKICAgICMgdSA9IHVuZGVyY291bnQ6IGNhbGwgYXJnIGNvdW50cyBsZXNzIHRoYW4gbnVtYmVyIGV4cGVjdGVkIGJ5IGEgc3ViCiAgICAjICAgICAtIGV4Y2VwdCBpZiBleHBlY3RpbmcgTiBvciBsZXNzIChOPTQgYnkgZGVmYXVsdCkKICAgICMgaSA9IGluZGV0ZXJtaW5hdGU6IGV4cGVjdGVkIG51bWJlciBvZiBhcmdzIHdhcyBub3QgZGV0ZXJtaW5lZAogICAgbXkgJWNhbGxfYXJnX2lzc3VlX25vdGUgPSAoCiAgICAgICAgYSA9PiAiYm90aCBtZXRob2QgYW5kIG5vbi1tZXRob2QgY2FsbHMgdG8gYSBzdWIiLAogICAgICAgIG8gPT4gImV4Y2VzcyBhcmdzIHBhc3NlZCIsCiAgICAgICAgdSA9PiAiZmV3ZXIgYXJncyB0aGFuIGV4cGVjdGVkIHBhc3NlZCIsCiAgICAgICAgaSA9PiAiaW5kZXRlcm1pbmF0ZSBzdWIgYXJnIGNvdW50IiwKICAgICk7CiAgICBteSAlZG9fbWlzbWF0Y2hlZF9jYWxsX3R5cGUgICAgICAgICAgID0gJWNhbGxfYXJnX2lzc3VlX25vdGU7CiAgICBteSAkbWlzbWF0Y2hlZF9hcmdfdW5kZXJjb3VudF9jdXRvZmYgID0gMDsKICAgIG15ICRtaXNtYXRjaGVkX2FyZ19vdmVyY291bnRfY3V0b2ZmICAgPSAwOwogICAgbXkgJHJpc19taXNtYXRjaGVkX2NhbGxfZXhjbHVkZWRfbmFtZSA9IHt9OwoKICAgICMgVGhlIG1pc21hdGNoZWQtcmV0dXJucyBjaGVja3MgYXJlIGluZGljYXRlZCBieSB0aGVzZSBsZXR0ZXJzOgogICAgbXkgJXJldHVybl9pc3N1ZV9ub3RlID0gKAogICAgICAgIHggPT4gIndhbnQgYXJyYXkgYnV0IG5vIHJldHVybiBzZWVuIiwKICAgICAgICB5ID0+ICJ3YW50IHNjYWxhciBidXQgbm8gcmV0dXJuIHNlZW4iLAogICAgICAgIG8gPT4gIndhbnQgYXJyYXkgd2l0aCBleGNlc3MgY291bnQiLAogICAgICAgIHUgPT4gIndhbnQgYXJyYXkgd2l0aCBjb3VudCBub3QgbWF0Y2hlZCBieSBzdWIiLAogICAgICAgIHMgPT4gIndhbnQgc2NhbGFyIGJ1dCBzdWIgb25seSByZXR1cm5zIGFycmF5cyB3aXRoIGNvdW50ID4xIiwKICAgICk7CiAgICBteSAlZG9fbWlzbWF0Y2hlZF9yZXR1cm5fdHlwZSAgICAgICAgICAgPSAlcmV0dXJuX2lzc3VlX25vdGU7CiAgICBteSAkcmlzX21pc21hdGNoZWRfcmV0dXJuX2V4Y2x1ZGVkX25hbWUgPSB7fTsKCiAgICAjIGluaXRpYWxpemUgYSBjYWNoZSB1c2VkIGZvciBlZmZpY2llbmN5CiAgICAkc2VsZi0+aW5pdGlhbGl6ZV9zZWxmX2NhbGxfY2FjaGUoKTsKCiAgICBteSAkaXNfZHVtcCA9CiAgICAgICRyT3B0cy0+eydkdW1wLW1pc21hdGNoZWQtYXJncyd9IHx8ICRyT3B0cy0+eydkdW1wLW1pc21hdGNoZWQtcmV0dXJucyd9OwoKICAgICMgaW5pdGlhbGl6ZSBpZiBub3QgaW4gYSBkdW1wIG1vZGUKICAgIGlmICggISRpc19kdW1wICkgewoKICAgICAgICAlZG9fbWlzbWF0Y2hlZF9jYWxsX3R5cGUgPSAleyRyd2Fybl9taXNtYXRjaGVkX2FyZ190eXBlc307CiAgICAgICAgJG1pc21hdGNoZWRfYXJnX3VuZGVyY291bnRfY3V0b2ZmID0KICAgICAgICAgICRyT3B0cy0+eyd3YXJuLW1pc21hdGNoZWQtYXJnLXVuZGVyY291bnQtY3V0b2ZmJ307CiAgICAgICAgJG1pc21hdGNoZWRfYXJnX292ZXJjb3VudF9jdXRvZmYgPQogICAgICAgICAgJHJPcHRzLT57J3dhcm4tbWlzbWF0Y2hlZC1hcmctb3ZlcmNvdW50LWN1dG9mZid9OwogICAgICAgICRyaXNfbWlzbWF0Y2hlZF9jYWxsX2V4Y2x1ZGVkX25hbWUgPQogICAgICAgICAgJHJpc193YXJuX21pc21hdGNoZWRfYXJnX2V4Y2x1ZGVkX25hbWU7CgogICAgICAgICVkb19taXNtYXRjaGVkX3JldHVybl90eXBlID0gJXskcndhcm5fbWlzbWF0Y2hlZF9yZXR1cm5fdHlwZXN9OwogICAgICAgICRyaXNfbWlzbWF0Y2hlZF9yZXR1cm5fZXhjbHVkZWRfbmFtZSA9CiAgICAgICAgICAkcmlzX3dhcm5fbWlzbWF0Y2hlZF9yZXR1cm5fZXhjbHVkZWRfbmFtZTsKICAgIH0KCiAgICAjIGhhcmR3aXJlZCBuYW1lIGV4Y2x1c2lvbnMKICAgICRyaXNfbWlzbWF0Y2hlZF9jYWxsX2V4Y2x1ZGVkX25hbWUtPntBVVRPTE9BRH0gPSAxOwogICAgJHJpc19taXNtYXRjaGVkX2NhbGxfZXhjbHVkZWRfbmFtZS0+e0RFU1RST1l9ICA9IDE7CgogICAgbXkgJEtfb3BlbmluZ19jb250YWluZXIgPSAkc2VsZi0+W19LX29wZW5pbmdfY29udGFpbmVyX107CiAgICBteSAkcktfcGFja2FnZV9saXN0ICAgICA9ICRzZWxmLT5bX3JLX3BhY2thZ2VfbGlzdF9dOwogICAgbXkgJHJpc19teV9zdWJfYnlfc2Vxbm8gPSAkc2VsZi0+W19yaXNfbXlfc3ViX2J5X3NlcW5vX107CiAgICBteSAkcnN1Yl9jYWxsX3BhcmVuX2luZm9fYnlfc2Vxbm8gPQogICAgICAkc2VsZi0+W19yc3ViX2NhbGxfcGFyZW5faW5mb19ieV9zZXFub19dOwogICAgbXkgJHJLX2JsZXNzX2J5X3N1Yl9zZXFubyA9ICRzZWxmLT5bX3JLX2JsZXNzX2J5X3N1Yl9zZXFub19dOwoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIE1ha2UgYSBwYWNrYWdlIGxvb2t1cCB0YWJsZQogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIG15ICRycGFja2FnZV9saXN0cyAgICAgICA9ICRzZWxmLT5wYWNrYWdlX2luZm9fbWFrZXIoJHJLX3BhY2thZ2VfbGlzdCk7CiAgICBteSAkcnBhY2thZ2VfbG9va3VwX2xpc3QgPSAkcnBhY2thZ2VfbGlzdHMtPnsncnBhY2thZ2VfbG9va3VwX2xpc3QnfTsKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBVcGRhdGUgc3ViIGNhbGwgcGFyZW4gaW5mbyB3aXRoIGFyZyBjb3VudHMKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAkc2VsZi0+dXBkYXRlX3N1Yl9jYWxsX3BhcmVuX2luZm8oJHJwYWNrYWdlX2xvb2t1cF9saXN0KTsKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBQcmVsaW1pbmFyeSBtaW4gYW5kIG1heCBjYWxsIGFyZ3MKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFRoaXMgaXMgcHJlbGltaW5hcnkgYmVjYXVzZSBzb21lIG9mIHRoZSBjYWxscyB3aWxsIGV2ZW50dWFsbHkgYmUKICAgICMgcmVqZWN0ZWQgaWYgdGhleSBhcHBlYXIgdG8gYmUgdG8gZXh0ZXJuYWwgb2JqZWN0cy4gVGhpcyBpbmZvIGlzCiAgICAjIG5lZWRlZCB0byBvcHRpbWl6ZSB0aGUgc3ViIGFyZyBzZWFyY2ggaW4gdGhlIGNhc2Ugb2YgemVybyBhcmdzLgogICAgbXkgJXVwcGVyX2JvdW5kX2NhbGxfaW5mbzsKICAgIGZvcmVhY2ggbXkgJHNlcW5vICgga2V5cyAleyRyc3ViX2NhbGxfcGFyZW5faW5mb19ieV9zZXFub30gKSB7CiAgICAgICAgbXkgJHJjYWxsX2l0ZW0gPSAkcnN1Yl9jYWxsX3BhcmVuX2luZm9fYnlfc2Vxbm8tPnskc2Vxbm99OwoKICAgICAgICBteSAkY2FsbF90eXBlID0gJHJjYWxsX2l0ZW0tPntjYWxsX3R5cGV9OwogICAgICAgIG15ICRwYWNrYWdlICAgPSAkcmNhbGxfaXRlbS0+e3BhY2thZ2V9OwogICAgICAgIG15ICRuYW1lICAgICAgPSAkcmNhbGxfaXRlbS0+e25hbWV9OwogICAgICAgIG15ICRhcmdfY291bnQgPSAkcmNhbGxfaXRlbS0+e2FyZ19jb3VudH07CiAgICAgICAgbXkgJGtleSAgICAgICA9ICRwYWNrYWdlIC4gJzo6JyAuICRuYW1lOwoKICAgICAgICBuZXh0IHVubGVzcyBkZWZpbmVkKCRhcmdfY291bnQpOwogICAgICAgIGlmICggJGNhbGxfdHlwZSBlcSAnLT4nICkgewogICAgICAgICAgICAkYXJnX2NvdW50ICs9IDE7CiAgICAgICAgICAgICR1cHBlcl9ib3VuZF9jYWxsX2luZm97JGtleX0tPnttZXRob2RfY2FsbF9jb3VudH0rKzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICR1cHBlcl9ib3VuZF9jYWxsX2luZm97JGtleX0tPntkaXJlY3RfY2FsbF9jb3VudH0rKzsKICAgICAgICB9CiAgICAgICAgbXkgJG1heCA9ICR1cHBlcl9ib3VuZF9jYWxsX2luZm97JGtleX0tPnttYXhfYXJnX2NvdW50fTsKICAgICAgICBteSAkbWluID0gJHVwcGVyX2JvdW5kX2NhbGxfaW5mb3ska2V5fS0+e21pbl9hcmdfY291bnR9OwogICAgICAgIGlmICggIWRlZmluZWQoJG1heCkgfHwgJGFyZ19jb3VudCA+ICRtYXggKSB7CiAgICAgICAgICAgICR1cHBlcl9ib3VuZF9jYWxsX2luZm97JGtleX0tPnttYXhfYXJnX2NvdW50fSA9ICRhcmdfY291bnQ7CiAgICAgICAgfQogICAgICAgIGlmICggIWRlZmluZWQoJG1pbikgfHwgJGFyZ19jb3VudCA8ICRtaW4gKSB7CiAgICAgICAgICAgICR1cHBlcl9ib3VuZF9jYWxsX2luZm97JGtleX0tPnttaW5fYXJnX2NvdW50fSA9ICRhcmdfY291bnQ7CiAgICAgICAgfQogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBHZXQgYXJnIGNvdW50cyBmb3Igc3ViIGRlZmluaXRpb25zCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIG15ICggJHJzdWJfaW5mb19ieV9zZXFubywgJHJzdWJfc2Vxbm9fYnlfa2V5ICkgPQogICAgICAkc2VsZi0+c3ViX2RlZl9pbmZvX21ha2VyKCAkcnBhY2thZ2VfbG9va3VwX2xpc3QsCiAgICAgICAgXCV1cHBlcl9ib3VuZF9jYWxsX2luZm8gKTsKCiAgICAjIEhhc2ggdG8gaG9sZCBjb21iaW5lZCBpbmZvIGZvciBzdWJzIGFuZCBjYWxscwogICAgbXkgJWNvbW1vbl9oYXNoOwoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgRmlyc3Qgc3BsaXQgdGhlIGNhbGxzIGludG8gZGlyZWN0IGFuZCBtZXRob2QKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIG15IEBtZXRob2RfY2FsbF9zZXFub3M7CiAgICBmb3JlYWNoIG15ICRzZXFubyAoIGtleXMgJXskcnN1Yl9jYWxsX3BhcmVuX2luZm9fYnlfc2Vxbm99ICkgewogICAgICAgIG15ICRyY2FsbF9pdGVtID0gJHJzdWJfY2FsbF9wYXJlbl9pbmZvX2J5X3NlcW5vLT57JHNlcW5vfTsKICAgICAgICBteSAkcGFja2FnZSAgICA9ICRyY2FsbF9pdGVtLT57cGFja2FnZX07CiAgICAgICAgbXkgJG5hbWUgICAgICAgPSAkcmNhbGxfaXRlbS0+e25hbWV9OwogICAgICAgIG15ICRrZXkgICAgICAgID0gJHBhY2thZ2UgLiAnOjonIC4gJG5hbWU7CiAgICAgICAgaWYgKCAkcmNhbGxfaXRlbS0+e2NhbGxfdHlwZX0gZXEgJy0+JyApIHsKICAgICAgICAgICAgcHVzaCBAbWV0aG9kX2NhbGxfc2Vxbm9zLCAkc2Vxbm87CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBwdXNoIEB7ICRjb21tb25faGFzaHska2V5fS0+e2RpcmVjdF9jYWxsc30gfSwgJHJjYWxsX2l0ZW07CiAgICAgICAgfQogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIE5vdyBzcGxpdCBtZXRob2QgY2FsbHMgaW50byBzZWxmIGFuZCBleHRlcm5hbAogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIG15IEBkZWJ1Z193YXJuaW5nczsKICAgIGZvcmVhY2ggbXkgJHNlcW5vIChAbWV0aG9kX2NhbGxfc2Vxbm9zKSB7CiAgICAgICAgbXkgJHJjYWxsX2l0ZW0gICAgICAgPSAkcnN1Yl9jYWxsX3BhcmVuX2luZm9fYnlfc2Vxbm8tPnskc2Vxbm99OwogICAgICAgIG15ICRwYWNrYWdlICAgICAgICAgID0gJHJjYWxsX2l0ZW0tPntwYWNrYWdlfTsKICAgICAgICBteSAkbmFtZSAgICAgICAgICAgICA9ICRyY2FsbF9pdGVtLT57bmFtZX07CiAgICAgICAgbXkgJGNhbGxlcl9uYW1lICAgICAgPSAkcmNhbGxfaXRlbS0+e2NhbGxlcl9uYW1lfTsKICAgICAgICBteSAkY2xhc3NfbmFtZSAgICAgICA9ICRyY2FsbF9pdGVtLT57Y2xhc3NfbmFtZX07CiAgICAgICAgbXkgJGtleV9yZWNlaXZlcl9zdWIgPSAkcGFja2FnZSAuICc6OicgLiAkbmFtZTsKICAgICAgICBteSAkaXNfc2VsZl9jYWxsOwoKICAgICAgICAjIEZpbmQgdGhlIHN1YiB3aGljaCBjb250YWlucyB0aGlzIGNhbGwKICAgICAgICBteSAkc2Vxbm9fc3ViX3BhcmVudCA9ICRzZWxmLT5wYXJlbnRfc3ViX3NlcW5vKCRzZXFubyk7CiAgICAgICAgaWYgKCRzZXFub19zdWJfcGFyZW50KSB7CiAgICAgICAgICAgIG15ICRpdGVtID0gJHJzdWJfaW5mb19ieV9zZXFuby0+eyRzZXFub19zdWJfcGFyZW50fTsKICAgICAgICAgICAgaWYgKCRpdGVtKSB7CgogICAgICAgICAgICAgICAgbXkgJGtleV9wYXJlbnRfc3ViICAgPSAkaXRlbS0+e3BhY2thZ2V9IC4gJzo6JyAuICRpdGVtLT57bmFtZX07CiAgICAgICAgICAgICAgICBteSAkcGFyZW50X3NlbGZfbmFtZSA9ICRpdGVtLT57c2VsZl9uYW1lfTsKICAgICAgICAgICAgICAgIG15ICRjYWxsZXJfaXNfZG9sbGFyX3NlbGYgPSAkY2FsbGVyX25hbWUgZXEgJyRzZWxmJzsKCiAgICAgICAgICAgICAgICAjIERlY2lkZSBpZiB0aGlzIG1ldGhvZCBjYWxsIGlzIHRvIGFuIGludGVybmFsIHN1YjoKICAgICAgICAgICAgICAgICMgIFRyeSAxIGFuZCBUcnkgMiBhcmUgZ2VuZXJhbCwgZm9yIGFueSBvYmplY3QgbmFtZQogICAgICAgICAgICAgICAgIyAgVHJ5IDMgYW5kIFRyeSA0IGFyZSBndWVzc2VzIGZvciBjb21tb24gdXNlcyBvZiAnJHNlbGYnCgogICAgICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgIyBUcnkgMTogUGFyZW50IHN1YiBzZWxmIG5hbWUgbWF0Y2hlcyBjYWxsZXIgbmFtZQogICAgICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgaWYgKCRwYXJlbnRfc2VsZl9uYW1lKSB7CgogICAgICAgICAgICAgICAgICAgICMgYW5kIHRoZSBvbmx5IGNhbGxzIHRvIHBhcmVudCBzdWIgKGlmIGFueSkgYXJlIGFycm93IGNhbGxzLgogICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgJHBhcmVudF9zZWxmX25hbWUgZXEgJGNhbGxlcl9uYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICYmICggICEkY29tbW9uX2hhc2h7JGtleV9wYXJlbnRfc3VifS0+e2RpcmVjdF9jYWxsc30KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRjYWxsZXJfaXNfZG9sbGFyX3NlbGYgKQogICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGlzX3NlbGZfY2FsbCA9IDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICMgVHJ5IDIuIFNlZSBpZiB0aGUgbmFtZSB3YXMgYmxlc3NlZCBpbiB0aGUgY29udGFpbmluZyBzdWIKICAgICAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgIGlmICggISRpc19zZWxmX2NhbGwgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJGl0ZW1fc2VsZiA9ICRpdGVtLT57c2VsZl9uYW1lfTsKICAgICAgICAgICAgICAgICAgICAkaXRlbV9zZWxmID0gJ3VuZGVmJyB1bmxlc3MgJGl0ZW1fc2VsZjsKICAgICAgICAgICAgICAgICAgICBteSAkcktfYmxlc3NfbGlzdCA9CiAgICAgICAgICAgICAgICAgICAgICAkcktfYmxlc3NfYnlfc3ViX3NlcW5vLT57JHNlcW5vX3N1Yl9wYXJlbnR9OwogICAgICAgICAgICAgICAgICAgIGlmICgkcktfYmxlc3NfbGlzdCkgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkS28gPSAkS19vcGVuaW5nX2NvbnRhaW5lci0+eyRzZXFub307CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggbXkgJGJsZXNzaW5nICggQHskcktfYmxlc3NfbGlzdH0gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJbmRleCBLIGFuZCBibGVzc2VkIG5hbWUgd2VyZSBzdG9yZWQgd2l0aCBzdWIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICRLX2JsZXNzZWQgbWF5IGJlIDEgdG9rZW4gYmVmb3JlIEsgb2YgJyRzZWxmJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgKCAkS19ibGVzc2VkLCAkbmFtZV9ibGVzc2VkICkgPSBAeyRibGVzc2luZ307CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBuYW1lIG9mIGJsZXNzZWQgb2JqZWN0IG11c3QgbWF0Y2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgaWYgKCAkbmFtZV9ibGVzc2VkIG5lICRjYWxsZXJfbmFtZSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMga2V5d29yZCAnYmxlc3MnIG11c3QgYmUgYXQgdG9wIHN1YiBsZXZlbC4gV2UgaGF2ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0byBiYWNrIHVwIDEgdG9rZW4gaW4gY2FzZSAkc2VsZiBpcyBpbiBwYXJlbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkS3AgPSAkc2VsZi0+S19wcmV2aW91c19jb2RlKCRLX2JsZXNzZWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBpZiAoICEkS3AgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRwYXJlbnRfc2Vxbm8gPSAkc2VsZi0+cGFyZW50X3NlcW5vX2J5X0soJEtwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkcGFyZW50X3NlcW5vCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgJHBhcmVudF9zZXFubyAhPSAkc2Vxbm9fc3ViX3BhcmVudCApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYmxlc3MgbXVzdCBiZSBiZWZvcmUgdGhlIGNhbGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgaWYgKCAkS19ibGVzc2VkID4gJEtvICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlzX3NlbGZfY2FsbCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAjIFRyeSAzLiBDYWxsZXIgaXMgJyRzZWxmJzsgbG9vayBhdCBmaXJzdCAnJHNlbGYnIGluIHN1YgogICAgICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgIGlmICggISRpc19zZWxmX2NhbGwgJiYgJGNhbGxlcl9pc19kb2xsYXJfc2VsZiApIHsKICAgICAgICAgICAgICAgICAgICAoICRpc19zZWxmX2NhbGwsICRyY2FsbF9pdGVtLT57aXNfb29fY2FsbH0gKSA9CiAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+c2VsZl9jYWxsX2NoZWNrKCRzZXFub19zdWJfcGFyZW50KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgIyBUcnkgNC4gY2FsbGVyIGlzICckc2VsZic6IHJlY2VpdmVyPSckc2VsZicsICckY2xhc3MnLCAnJF9bMF0nCiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgaWYgKCAhJGlzX3NlbGZfY2FsbCAmJiAkY2FsbGVyX2lzX2RvbGxhcl9zZWxmICkgewogICAgICAgICAgICAgICAgICAgIG15ICRzZXFub19zdWJfY2FsbGVkID0KICAgICAgICAgICAgICAgICAgICAgICRyc3ViX3NlcW5vX2J5X2tleS0+eyRrZXlfcmVjZWl2ZXJfc3VifTsKICAgICAgICAgICAgICAgICAgICBpZiAoJHNlcW5vX3N1Yl9jYWxsZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGl0ZW1fY2FsbGVkID0KICAgICAgICAgICAgICAgICAgICAgICAgICAkcnN1Yl9pbmZvX2J5X3NlcW5vLT57JHNlcW5vX3N1Yl9jYWxsZWR9OwogICAgICAgICAgICAgICAgICAgICAgICBteSAkcmVjZWl2ZXIgPSAkaXRlbV9jYWxsZWQtPntzZWxmX25hbWV9OwoKICAgICAgICAgICAgICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAjIFRyeSA0YTogcmVjZWl2ZXIgaGFzIHNvbWUgcmVjb2duaXplZCBzZWxmIG5hbWVzCiAgICAgICAgICAgICAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlY2VpdmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoICAgJHJlY2VpdmVyIGVxICRjYWxsZXJfbmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRyZWNlaXZlciBlcSAnJGNsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRyZWNlaXZlciBlcSAnJF9bMF0nICkKICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpc19zZWxmX2NhbGwgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgIyBUcnkgNGI6IGNoZWNrIGZvciBhIHJlY3Vyc2l2ZSBjYWxsCiAgICAgICAgICAgICAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpc19zZWxmX2NhbGwgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2Vxbm9fc3ViX2NhbGxlZCA9PSAkc2Vxbm9fc3ViX3BhcmVudDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICAgREVCVUdfU0VMRgogICAgICAgICAgICAgICAgICAgICYmICEkaXNfc2VsZl9jYWxsCiAgICAgICAgICAgICAgICAgICAgJiYgJGNhbGxlcl9pc19kb2xsYXJfc2VsZgogICAgICAgICAgICAgICAgICAgICYmICRzZXFub19zdWJfcGFyZW50ICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBteSAkS29fc3ViICAgICAgPSAkS19vcGVuaW5nX2NvbnRhaW5lci0+eyRzZXFub19zdWJfcGFyZW50fTsKICAgICAgICAgICAgICAgICAgICBteSAkbG5fcGFyZW50ICAgPSAkckxMLT5bJEtvX3N1Yl0tPltfTElORV9JTkRFWF9dICsgMTsKICAgICAgICAgICAgICAgICAgICBteSAkS28gICAgICAgICAgPSAkS19vcGVuaW5nX2NvbnRhaW5lci0+eyRzZXFub307CiAgICAgICAgICAgICAgICAgICAgbXkgJGxuICAgICAgICAgID0gJHJMTC0+WyRLb10tPltfTElORV9JTkRFWF9dICsgMTsKICAgICAgICAgICAgICAgICAgICBteSAkcGFyZW50X3NlbGYgPSAkaXRlbS0+e3NlbGZfbmFtZX07CiAgICAgICAgICAgICAgICAgICAgbXkgJHJlY2VpdmVyX3NlbGYgPSAnbWlzc2luZyc7CiAgICAgICAgICAgICAgICAgICAgbXkgJGxuX3JlY2VpdmVyICAgPSAndW5kZWYnOwogICAgICAgICAgICAgICAgICAgIG15ICRzZXFub19zdWJfY2FsbGVkID0KICAgICAgICAgICAgICAgICAgICAgICRyc3ViX3NlcW5vX2J5X2tleS0+eyRrZXlfcmVjZWl2ZXJfc3VifTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCRzZXFub19zdWJfY2FsbGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRpdGVtX2NhbGxlZCA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgJHJzdWJfaW5mb19ieV9zZXFuby0+eyRzZXFub19zdWJfY2FsbGVkfTsKICAgICAgICAgICAgICAgICAgICAgICAgJHJlY2VpdmVyX3NlbGYgPSAkaXRlbV9jYWxsZWQtPntzZWxmX25hbWV9OwogICAgICAgICAgICAgICAgICAgICAgICBteSAkS29fcmVjZWl2ZXIgPQogICAgICAgICAgICAgICAgICAgICAgICAgICRLX29wZW5pbmdfY29udGFpbmVyLT57JHNlcW5vX3N1Yl9jYWxsZWR9OwogICAgICAgICAgICAgICAgICAgICAgICAkbG5fcmVjZWl2ZXIgPSAkckxMLT5bJEtvX3JlY2VpdmVyXS0+W19MSU5FX0lOREVYX10gKyAxOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyB1c2UgREVCVUdfU0VMRj0zIHRvIHNlZSBtaXNzaW5nIHN1YnMKICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBpZiAoIERFQlVHX1NFTEYgPCAzICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIHVzZSBERUJVR19TRUxGPTIgdG8gc2VlIHVuZGVmLXNlbGYtdW5kZWYKICAgICAgICAgICAgICAgICAgICBuZXh0CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIERFQlVHX1NFTEYgPCAyICYmICEkcGFyZW50X3NlbGYgJiYgISRyZWNlaXZlcl9zZWxmICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJHBhcmVudF9zZWxmICkgICB7ICRwYXJlbnRfc2VsZiAgID0gJ3VuZGVmJyB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJHJlY2VpdmVyX3NlbGYgKSB7ICRyZWNlaXZlcl9zZWxmID0gJ3VuZGVmJyB9CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAZGVidWdfd2FybmluZ3MsCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIEtvICAgICAgICAgICAgPT4gJEtvLAogICAgICAgICAgICAgICAgICAgICAgICBjYWxsZXJfbmFtZSAgID0+ICRjYWxsZXJfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50X3NlbGYgICA9PiAkcGFyZW50X3NlbGYsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVyX3NlbGYgPT4gJHJlY2VpdmVyX3NlbGYsCiAgICAgICAgICAgICAgICAgICAgICAgIHN1Yl9jYWxsZWQgICAgPT4gJG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbnVtYmVyICAgPT4gJGxuLAogICAgICAgICAgICAgICAgICAgICAgICBsbl9wYXJlbnQgICAgID0+ICRsbl9wYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIGxuX3JlY2VpdmVyICAgPT4gJGxuX3JlY2VpdmVyLAogICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBTYXZlIHRoaXMgbWV0aG9kIGNhbGwgYXMgZWl0aGVyIGFuIGludGVybmFsIChzZWxmKSBvciBleHRlcm5hbCBjYWxsCiAgICAgICAgaWYgKCRpc19zZWxmX2NhbGwpIHsKICAgICAgICAgICAgcHVzaCBAeyAkY29tbW9uX2hhc2h7JGtleV9yZWNlaXZlcl9zdWJ9LT57c2VsZl9jYWxsc30gfSwKICAgICAgICAgICAgICAkcmNhbGxfaXRlbTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIG1hcmsgY2FsbHMgbWFkZSBieSB1bmtub3duIChub24tc2VsZikgb2JqZWN0cywgd2UgY2FuJ3QgdHJhY2sKICAgICAgICAgICAgIyB0aGVtLCBidXQgd2UgY2FuIHRyYWNrIGNhbGxzIGF0IHRoZSBjbGFzcyBsZXZlbC4KICAgICAgICAgICAgaWYgKCAhJGNsYXNzX25hbWUgKSB7CiAgICAgICAgICAgICAgICAkcmNhbGxfaXRlbS0+e2lzX3Vua25vd25fb2JqZWN0X2NhbGx9ID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBpZiAoIERFQlVHX1NFTEYgJiYgQGRlYnVnX3dhcm5pbmdzICkgewogICAgICAgIEBkZWJ1Z193YXJuaW5ncyA9IHNvcnQgeyAkYS0+e0tvfSA8PT4gJGItPntLb30gfSBAZGVidWdfd2FybmluZ3M7CiAgICAgICAgbXkgJG91dHB1dF9zdHJpbmcgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgZm9yZWFjaCBteSAkaXRlbSAoQGRlYnVnX3dhcm5pbmdzKSB7CiMjICAgICAgICAgIG15ICRjYWxsZXJfbmFtZSAgID0gJGl0ZW0tPntjYWxsZXJfbmFtZX07CiAgICAgICAgICAgIG15ICRwYXJlbnRfc2VsZiAgID0gJGl0ZW0tPntwYXJlbnRfc2VsZn07CiAgICAgICAgICAgIG15ICRyZWNlaXZlcl9zZWxmID0gJGl0ZW0tPntyZWNlaXZlcl9zZWxmfTsKICAgICAgICAgICAgbXkgJHN1Yl9jYWxsZWQgICAgPSAkaXRlbS0+e3N1Yl9jYWxsZWR9OwogICAgICAgICAgICBteSAkbGluZV9udW1iZXIgICA9ICRpdGVtLT57bGluZV9udW1iZXJ9OwogICAgICAgICAgICBteSAkbG5fcGFyZW50ICAgICA9ICRpdGVtLT57bG5fcGFyZW50fTsKICAgICAgICAgICAgbXkgJGxuX3JlY2VpdmVyICAgPSAkaXRlbS0+e2xuX3JlY2VpdmVyfTsKICAgICAgICAgICAgJG91dHB1dF9zdHJpbmcgLj0KIiRsaW5lX251bWJlcjogXCRzZWxmLT4kc3ViX2NhbGxlZCBpbiBwYXJlbnQgbGluZSAkbG5fcGFyZW50IHdpdGggc2VsZj0kcGFyZW50X3NlbGYgdG8gcmVjZWl2ZXIgbGluZSAkbG5fcmVjZWl2ZXIgd2l0aCBzZWxmPSRyZWNlaXZlcl9zZWxmXG4iOwogICAgICAgIH0KICAgICAgICB3YXJuaW5nKCRvdXRwdXRfc3RyaW5nKTsKICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBMb29wIHRvIG1lcmdlIHByb3RvdHlwZSBjb3VudHMKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmb3JlYWNoIG15ICRrZXkgKCBrZXlzICVjb21tb25faGFzaCApIHsKICAgICAgICBteSAkc2Vxbm9fc3ViID0gJHJzdWJfc2Vxbm9fYnlfa2V5LT57JGtleX07CiAgICAgICAgbmV4dCBpZiAoICFkZWZpbmVkKCRzZXFub19zdWIpICk7CiAgICAgICAgbXkgJHJzdWJfaXRlbSA9ICRyc3ViX2luZm9fYnlfc2Vxbm8tPnskc2Vxbm9fc3VifTsKICAgICAgICBuZXh0IGlmICggISRyc3ViX2l0ZW0tPntwcm90b3R5cGV9ICk7CiAgICAgICAgbXkgJGl0ZW0gICAgICAgICAgPSAkY29tbW9uX2hhc2h7JGtleX07CiAgICAgICAgbXkgJHJkaXJlY3RfY2FsbHMgPSAkaXRlbS0+e2RpcmVjdF9jYWxsc307CiAgICAgICAgbXkgJHJzZWxmX2NhbGxzICAgPSAkaXRlbS0+e3NlbGZfY2FsbHN9OwogICAgICAgIG15ICRudW1fZGlyZWN0ICAgID0gZGVmaW5lZCgkcmRpcmVjdF9jYWxscykgPyBAeyRyZGlyZWN0X2NhbGxzfSA6IDA7CiAgICAgICAgbXkgJG51bV9zZWxmICAgICAgPSBkZWZpbmVkKCRyc2VsZl9jYWxscykgICA/IEB7JHJzZWxmX2NhbGxzfSAgIDogMDsKCiAgICAgICAgIyBVc2UgcHJvdG90eXBlIHZhbHVlcyBpZiBnaXZlbiBhbmQgYWxsIGNhbGxzIGFyZSBkaXJlY3QKICAgICAgICAjIE90aGVyd2lzZSwgaWdub3JlIHRoZSBwcm90b3R5cGUuCiAgICAgICAgbmV4dCBpZiAoJG51bV9zZWxmKTsKICAgICAgICBuZXh0IGlmICggISRudW1fZGlyZWN0ICk7CgogICAgICAgIG15ICRzaGlmdF9jb3VudF9taW4gPSAkcnN1Yl9pdGVtLT57cHJvdG90eXBlX2NvdW50X21pbn07CiAgICAgICAgbXkgJHNoaWZ0X2NvdW50X21heCA9ICRyc3ViX2l0ZW0tPntwcm90b3R5cGVfY291bnRfbWF4fTsKICAgICAgICBpZiAoJG51bV9zZWxmKSB7CiAgICAgICAgICAgIGlmICggZGVmaW5lZCgkc2hpZnRfY291bnRfbWluKSApIHsgJHNoaWZ0X2NvdW50X21pbisrIH0KICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRzaGlmdF9jb3VudF9tYXgpICkgeyAkc2hpZnRfY291bnRfbWF4KysgfQogICAgICAgIH0KCiAgICAgICAgIyBGb3IgY2FsbHMgd2l0aCAnJicgdG8gc3VicyB3aXRoIHByb3RvdHlwZXMsIHVzZSB0aGUgdXBwZXIgYm91bmQgb2YKICAgICAgICAjIHRoZSBwcm90b3R5cGUgbWF4IGFuZCB0aGUgbWF4IGZvdW5kIGJ5IHNjYW5uaW5nIHRoZSBzY3JpcHQuCiAgICAgICAgbXkgJHNoaWZ0X2NvdW50X21heF9hbXAgPSAkc2hpZnRfY291bnRfbWF4OwogICAgICAgIGlmICggZGVmaW5lZCgkc2hpZnRfY291bnRfbWF4KSApIHsKICAgICAgICAgICAgbXkgJHN0YW5kYXJkX21heCA9ICRyc3ViX2l0ZW0tPntzaGlmdF9jb3VudF9tYXh9OwogICAgICAgICAgICBpZiAoICFkZWZpbmVkKCRzdGFuZGFyZF9tYXgpIHx8ICRzdGFuZGFyZF9tYXggPiAkc2hpZnRfY291bnRfbWF4ICkgewogICAgICAgICAgICAgICAgJHNoaWZ0X2NvdW50X21heF9hbXAgPSAkc3RhbmRhcmRfbWF4OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRyc3ViX2l0ZW0tPntzaGlmdF9jb3VudF9tYXhfYW1wfSA9ICRzaGlmdF9jb3VudF9tYXhfYW1wOwoKICAgICAgICAjIG92ZXJ3cml0ZSB2YWx1ZXMgZm91bmQgYnkgc2Nhbm5pbmcgdGhlIHNjcmlwdCB3aXRoIHByb3RvdHlwZSB2YWx1ZXMKICAgICAgICAkcnN1Yl9pdGVtLT57c2hpZnRfY291bnRfbWlufSA9ICRzaGlmdF9jb3VudF9taW47CiAgICAgICAgJHJzdWJfaXRlbS0+e3NoaWZ0X2NvdW50X21heH0gPSAkc2hpZnRfY291bnRfbWF4OwoKICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgTG9vcCBvdmVyIGFsbCBzdWIgY2FsbHMgdG8gY29tcGFyZSBjYWxsIGFuZCByZXR1cm4gYXJnIGNvdW50cwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmb3JlYWNoIG15ICRzZXFubyAoIGtleXMgJXskcnN1Yl9jYWxsX3BhcmVuX2luZm9fYnlfc2Vxbm99ICkgewoKICAgICAgICBteSAkcmNhbGxfaXRlbSA9ICRyc3ViX2NhbGxfcGFyZW5faW5mb19ieV9zZXFuby0+eyRzZXFub307CgogICAgICAgICMgU2tpcCBtZXRob2QgY2FsbHMgYnkgdW5rbm93biBvYmplY3RzCiAgICAgICAgbmV4dCBpZiAoICRyY2FsbF9pdGVtLT57aXNfdW5rbm93bl9vYmplY3RfY2FsbH0gKTsKCiAgICAgICAgbXkgJGFyZ19jb3VudCAgICAgICAgICAgPSAkcmNhbGxfaXRlbS0+e2FyZ19jb3VudH07CiAgICAgICAgbXkgJHJldHVybl9jb3VudF93YW50ZWQgPSAkcmNhbGxfaXRlbS0+e3JldHVybl9jb3VudF93YW50ZWR9OwogICAgICAgIG15ICR3YW50X3NjYWxhciAgICAgICAgID0gJHJjYWxsX2l0ZW0tPnt3YW50X3NjYWxhcn07CiAgICAgICAgbXkgJHBhY2thZ2UgICAgICAgICAgICAgPSAkcmNhbGxfaXRlbS0+e3BhY2thZ2V9OwogICAgICAgIG15ICRuYW1lICAgICAgICAgICAgICAgID0gJHJjYWxsX2l0ZW0tPntuYW1lfTsKICAgICAgICBteSAkY2FsbF90eXBlICAgICAgICAgICA9ICRyY2FsbF9pdGVtLT57Y2FsbF90eXBlfTsKICAgICAgICBteSAka2V5ICAgICAgICAgICAgICAgICA9ICRwYWNrYWdlIC4gJzo6JyAuICRuYW1lOwoKICAgICAgICBteSAoICRzaGlmdF9jb3VudF9taW4sICAkc2hpZnRfY291bnRfbWF4LCAgJHNlbGZfbmFtZSApOwogICAgICAgIG15ICggJHJldHVybl9jb3VudF9taW4sICRyZXR1cm5fY291bnRfbWF4LCAkcmV0dXJuX2NvdW50X2luZGVmaW5pdGUgKTsKICAgICAgICBteSAoJHJLX3JldHVybl9jb3VudF9oYXNoKTsKCiAgICAgICAgIyBsb29rIGZvciB0aGUgc3ViIC4uCiAgICAgICAgbXkgJHNlcW5vX3N1YiA9ICRyc3ViX3NlcW5vX2J5X2tleS0+eyRrZXl9OwogICAgICAgIG15ICRyS19yZXR1cm5fbGlzdDsKICAgICAgICBteSAkc2F3X3dhbnRhcnJheTsKICAgICAgICBpZiAoIGRlZmluZWQoJHNlcW5vX3N1YikgKSB7CgogICAgICAgICAgICBteSAkcnN1Yl9pdGVtID0gJHJzdWJfaW5mb19ieV9zZXFuby0+eyRzZXFub19zdWJ9OwogICAgICAgICAgICAkc2F3X3dhbnRhcnJheSA9CiAgICAgICAgICAgICAgZGVmaW5lZCggJHNlbGYtPltfcktfd2FudGFycmF5X2J5X3N1Yl9zZXFub19dLT57JHNlcW5vX3N1Yn0gKTsKCiAgICAgICAgICAgICMgc2tpcCAnbXknIHN1YnMgZm9yIG5vdywgdGhleSBuZWVkIHNwZWNpYWwgdHJlYXRtZW50LiBJZgogICAgICAgICAgICAjIGFub255bW91cyBzdWJzIGFyZSBhZGRlZCwgJ215JyBzdWJzIGNvdWxkIGFsc28gYmUgYWRkZWQgdGhlbi4KICAgICAgICAgICAgaWYgKCAhJHJpc19teV9zdWJfYnlfc2Vxbm8tPnskc2Vxbm9fc3VifSApIHsKICAgICAgICAgICAgICAgICRjb21tb25faGFzaHska2V5fS0+e3JzdWJfaXRlbX0gPSAkcnN1Yl9pdGVtOwogICAgICAgICAgICAgICAgJHNoaWZ0X2NvdW50X21pbiAgICAgICAgICAgICAgICA9ICRyc3ViX2l0ZW0tPntzaGlmdF9jb3VudF9taW59OwogICAgICAgICAgICAgICAgJHNoaWZ0X2NvdW50X21heCAgICAgICAgICAgICAgICA9ICRyc3ViX2l0ZW0tPntzaGlmdF9jb3VudF9tYXh9OwogICAgICAgICAgICAgICAgaWYgKCAkY2FsbF90eXBlIGVxICcmJyAmJiAkcnN1Yl9pdGVtLT57cHJvdG90eXBlfSApIHsKICAgICAgICAgICAgICAgICAgICAkc2hpZnRfY291bnRfbWF4ID0gJHJzdWJfaXRlbS0+e3NoaWZ0X2NvdW50X21heF9hbXB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHNlbGZfbmFtZSAgICAgICAgPSAkcnN1Yl9pdGVtLT57c2VsZl9uYW1lfTsKICAgICAgICAgICAgICAgICRyZXR1cm5fY291bnRfbWluID0gJHJzdWJfaXRlbS0+e3JldHVybl9jb3VudF9taW59OwogICAgICAgICAgICAgICAgJHJldHVybl9jb3VudF9tYXggPSAkcnN1Yl9pdGVtLT57cmV0dXJuX2NvdW50X21heH07CiAgICAgICAgICAgICAgICAkcmV0dXJuX2NvdW50X2luZGVmaW5pdGUgPQogICAgICAgICAgICAgICAgICAkcnN1Yl9pdGVtLT57cmV0dXJuX2NvdW50X2luZGVmaW5pdGV9OwogICAgICAgICAgICAgICAgJHJLX3JldHVybl9saXN0ID0KICAgICAgICAgICAgICAgICAgJHNlbGYtPltfcktfcmV0dXJuX2J5X3N1Yl9zZXFub19dLT57JHNlcW5vX3N1Yn07CiAgICAgICAgICAgICAgICAkY29tbW9uX2hhc2h7JGtleX0tPntyS19yZXR1cm5fbGlzdH0gPSAkcktfcmV0dXJuX2xpc3Q7CiAgICAgICAgICAgICAgICAkcktfcmV0dXJuX2NvdW50X2hhc2ggPSAkcnN1Yl9pdGVtLT57cktfcmV0dXJuX2NvdW50X2hhc2h9OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBjb21wYXJlIGNhbGxlci9zdWIgaW5wdXQgYXJnIGNvdW50cwogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpZiAoIGRlZmluZWQoJHNoaWZ0X2NvdW50X21pbikgJiYgZGVmaW5lZCgkYXJnX2NvdW50KSApIHsKICAgICAgICAgICAgaWYgKCAkY2FsbF90eXBlIGVxICctPicgJiYgISRyY2FsbF9pdGVtLT57aXNfb29fY2FsbH0gKSB7CiAgICAgICAgICAgICAgICAkYXJnX2NvdW50ICs9IDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbXkgJGV4Y2VzcyA9ICRhcmdfY291bnQgLSAkc2hpZnRfY291bnRfbWluOwoKICAgICAgICAgICAgbXkgJG1heCA9ICRjb21tb25faGFzaHska2V5fS0+e21heF9hcmdfY291bnR9OwogICAgICAgICAgICBteSAkbWluID0gJGNvbW1vbl9oYXNoeyRrZXl9LT57bWluX2FyZ19jb3VudH07CiAgICAgICAgICAgIGlmICggIWRlZmluZWQoJG1heCkgfHwgJGFyZ19jb3VudCA+ICRtYXggKSB7CiAgICAgICAgICAgICAgICAkY29tbW9uX2hhc2h7JGtleX0tPnttYXhfYXJnX2NvdW50fSA9ICRhcmdfY291bnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkbWluKSB8fCAkYXJnX2NvdW50IDwgJG1pbiApIHsKICAgICAgICAgICAgICAgICRjb21tb25faGFzaHska2V5fS0+e21pbl9hcmdfY291bnR9ID0gJGFyZ19jb3VudDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICRleGNlc3MgPCAwICkgewogICAgICAgICAgICAgICAgcHVzaCBAeyAkY29tbW9uX2hhc2h7JGtleX0tPnt1bmRlcl9jb3VudH0gfSwgJHJjYWxsX2l0ZW07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkZXhjZXNzID4gMCApIHsKICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCgkc2hpZnRfY291bnRfbWF4KSApIHsKICAgICAgICAgICAgICAgICAgICAkZXhjZXNzID0gJGFyZ19jb3VudCAtICRzaGlmdF9jb3VudF9tYXg7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkZXhjZXNzID4gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAeyAkY29tbW9uX2hhc2h7JGtleX0tPntvdmVyX2NvdW50fSB9LCAkcmNhbGxfaXRlbTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAjIyAkZXhjZXNzID0gMAogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBjb21wYXJlIGNhbGxlci9zdWIgcmV0dXJuIGNvdW50cyBpZiBwb3NzaWJsZQogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgIyByaHMgY2hlY2s6IG9ubHkgY2hlY2sgc3VicyByZXR1cm5pbmcgZmluaXRlIGxpc3RzIChpLmUuIG5vdCAnQGxpc3QnKTsKICAgICAgICBuZXh0IGlmICgkcmV0dXJuX2NvdW50X2luZGVmaW5pdGUpOwoKICAgICAgICAjIGxocyBjaGVjazogb25seSBjaGVjayB3aGVuIGEgZmluaXRlIHJldHVybiBsaXN0IGlzIHdhbnRlZAogICAgICAgIG5leHQgaWYgKCAhJHJldHVybl9jb3VudF93YW50ZWQgKTsKCiAgICAgICAgIyBpZ25vcmUgc2NhbGFyIGlmIHdhbnRhcnJheSBzZWVuCiAgICAgICAgbmV4dCBpZiAoICR3YW50X3NjYWxhciAmJiAkc2F3X3dhbnRhcnJheSApOwoKICAgICAgICAjIHVwZGF0ZSBtaW4tbWF4IHdhbnQgcmFuZ2VzIGZvciB0aGUgb3V0cHV0IHJlcG9ydAogICAgICAgIG15ICRtYXggPSAkY29tbW9uX2hhc2h7JGtleX0tPnt3YW50X2NvdW50X21heH07CiAgICAgICAgbXkgJG1pbiA9ICRjb21tb25faGFzaHska2V5fS0+e3dhbnRfY291bnRfbWlufTsKICAgICAgICBpZiAoICFkZWZpbmVkKCRtYXgpIHx8ICRyZXR1cm5fY291bnRfd2FudGVkID4gJG1heCApIHsKICAgICAgICAgICAgJGNvbW1vbl9oYXNoeyRrZXl9LT57d2FudF9jb3VudF9tYXh9ID0gJHJldHVybl9jb3VudF93YW50ZWQ7CiAgICAgICAgfQogICAgICAgIGlmICggIWRlZmluZWQoJG1pbikgfHwgJHJldHVybl9jb3VudF93YW50ZWQgPCAkbWluICkgewogICAgICAgICAgICAkY29tbW9uX2hhc2h7JGtleX0tPnt3YW50X2NvdW50X21pbn0gPSAkcmV0dXJuX2NvdW50X3dhbnRlZDsKICAgICAgICB9CgogICAgICAgICMgcmV0dXJuIGlzc3VlICd4Jzogd2FudCBhcnJheSBidXQgbm8gcmV0dXJuIHNlZW4KICAgICAgICAjIHJldHVybiBpc3N1ZSAneSc6IHdhbnQgc2NhbGFyIGJ1dCBubyByZXR1cm4gc2VlbgogICAgICAgIGlmICggIWRlZmluZWQoJHJLX3JldHVybl9saXN0KSApIHsKICAgICAgICAgICAgaWYgKCR3YW50X3NjYWxhcikgewogICAgICAgICAgICAgICAgcHVzaCBAeyAkY29tbW9uX2hhc2h7JGtleX0tPntyZXR1cm5faXNzdWVzfS0+e3l9IH0sICRyY2FsbF9pdGVtOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcHVzaCBAeyAkY29tbW9uX2hhc2h7JGtleX0tPntyZXR1cm5faXNzdWVzfS0+e3h9IH0sICRyY2FsbF9pdGVtOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHNhZmV0eSBjaGVjawogICAgICAgIGVsc2lmICggIWRlZmluZWQoJHJldHVybl9jb3VudF9tYXgpICkgewoKICAgICAgICAgICAgIyBzaG91bGRuJ3QgaGFwcGVuLXNob3VsZCBiZSBkZWZpbmVkIGlmICRyS19yZXR1cm5fbGlzdCBpcyBkZWZpbmVkCiAgICAgICAgICAgIERFVkVMX01PREUgJiYgRmF1bHQoInJldHVybl9jb3VudF9tYXggc2hvdWxkIGJlIGRlZmluZWQgaGVyZVxuIik7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGZvciBleGFjdCBtYXRjaAogICAgICAgIGVsc2lmICggJHJldHVybl9jb3VudF93YW50ZWQgPT0gJHJldHVybl9jb3VudF9tYXggKSB7CiAgICAgICAgICAgICMjIG9rCiAgICAgICAgfQoKICAgICAgICAjIHJldHVybiBpc3N1ZSAnbyc6IG92ZXJ3YW50CiAgICAgICAgZWxzaWYgKCAkcmV0dXJuX2NvdW50X3dhbnRlZCA+ICRyZXR1cm5fY291bnRfbWF4ICkgewoKICAgICAgICAgICAgIyBidXQgbm8gZXJyb3IgZm9yIHNjYWxhciByZXF1ZXN0IG9mIDEgd2hlbiBtYXggMCByZXR1cm5lZAogICAgICAgICAgICBpZiAoICEkd2FudF9zY2FsYXIgKSB7CiAgICAgICAgICAgICAgICBwdXNoIEB7ICRjb21tb25faGFzaHska2V5fS0+e3JldHVybl9pc3N1ZXN9LT57b30gfSwgJHJjYWxsX2l0ZW07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgaWYgd2FudCBsZXNzIHRoYW4gbWF4Li4uCiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIGlzc3VlICd1Jzogd2FudCBhcnJheSBmb3IgYW4gdW5tYXRjaGVkIGNvdW50IGxlc3MgdGhhbiBtYXgKICAgICAgICAgICAgIyBpc3N1ZSAncyc6IHdhbnQgc2NhbGFyIGJ1dCBhbGwgcmV0dXJuIGNvdW50cyBhcmUgPjEKICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRyS19yZXR1cm5fY291bnRfaGFzaCkgKSB7CiAgICAgICAgICAgICAgICBteSAkS19yZXR1cm4gPSAkcktfcmV0dXJuX2NvdW50X2hhc2gtPnskcmV0dXJuX2NvdW50X3dhbnRlZH07CiAgICAgICAgICAgICAgICBpZiAoICFkZWZpbmVkKCRLX3JldHVybikgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCR3YW50X3NjYWxhcikgewogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEB7ICRjb21tb25faGFzaHska2V5fS0+e3JldHVybl9pc3N1ZXN9LT57c30gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAkcmNhbGxfaXRlbTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQHsgJGNvbW1vbl9oYXNoeyRrZXl9LT57cmV0dXJuX2lzc3Vlc30tPnt1fSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICRyY2FsbF9pdGVtOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICMjIHNhZmV0eSBjaGVjaywgc2hvdWxkbid0IGhhcHBlbgogICAgICAgICAgICAgICAgREVWRUxfTU9ERSAmJiBGYXVsdCgicmV0dXJuIGNvdW50IGhhc2ggbm90IGRlZmluZWRcbiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgQ29uc3RydWN0IG9uZS1saW5lIHdhcm5pbmcgbWVzc2FnZXMKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIG15IEBjYWxsX2FyZ193YXJuaW5nczsKICAgIG15IEByZXR1cm5fd2FybmluZ3M7CiAgICBteSAkbWF4X3NoaWZ0X2NvdW50X3dpdGhfdW5kZXJjb3VudCA9IDA7CiAgICBteSAkbnVtYmVyX29mX3VuZGVyY291bnRfd2FybmluZ3MgICA9IDA7CgogICAgIyB2YXJpYWJsZXMgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBhIHN1YiBuZWVkZWQgZm9yIHdhcm5pbmcgb3V0cHV0OgogICAgbXkgKAoKICAgICAgICAkbG5vLCAgICAgICAgICAgICAgJG5hbWUsCiAgICAgICAgJHNoaWZ0X2NvdW50X21pbiwgICRzaGlmdF9jb3VudF9tYXgsCiAgICAgICAgJG1pbl9hcmdfY291bnQsICAgICRtYXhfYXJnX2NvdW50LAogICAgICAgICRyZXR1cm5fY291bnRfbWluLCAkcmV0dXJuX2NvdW50X21heCwKICAgICAgICAkd2FudF9jb3VudF9taW4sICAgJHdhbnRfY291bnRfbWF4LAogICAgKTsKCiAgICBteSAkcHVzaF9jYWxsX2FyZ193YXJuaW5nID0gc3ViIHsKICAgICAgICBteSAoICRsZXR0ZXIsICRub3RlICkgPSBAXzsKICAgICAgICBteSAkc2hpZnRfY291bnQgPSAkc2hpZnRfY291bnRfbWluOwogICAgICAgIGlmICggJHNoaWZ0X2NvdW50X21pbiBuZSAnKicgJiYgJHNoaWZ0X2NvdW50X21pbiBuZSAkc2hpZnRfY291bnRfbWF4ICkgewogICAgICAgICAgICAkc2hpZnRfY291bnQgPSAiJHNoaWZ0X2NvdW50X21pbi0kc2hpZnRfY291bnRfbWF4IjsKICAgICAgICB9CiAgICAgICAgbXkgJG91dHB1dF9saW5lID0KIiRsbm86JGxldHRlcjokbmFtZTokc2hpZnRfY291bnQ6JG1pbl9hcmdfY291bnQ6JG1heF9hcmdfY291bnQ6ICRub3RlXG4iOwogICAgICAgIHB1c2ggQGNhbGxfYXJnX3dhcm5pbmdzLAogICAgICAgICAgewogICAgICAgICAgICBsaW5lX251bWJlciA9PiAkbG5vLAogICAgICAgICAgICBsZXR0ZXIgICAgICA9PiAkbGV0dGVyLAogICAgICAgICAgICBuYW1lICAgICAgICA9PiAkbmFtZSwKICAgICAgICAgICAgb3V0cHV0X2xpbmUgPT4gJG91dHB1dF9saW5lLAogICAgICAgICAgfTsKICAgICAgICByZXR1cm47CiAgICB9OyAjIyBlbmQgJHB1c2hfY2FsbF9hcmdfd2FybmluZyA9IHN1YgoKICAgIG15ICRwdXNoX3JldHVybl93YXJuaW5nID0gc3ViIHsKICAgICAgICBteSAoICRsZXR0ZXIsICRub3RlLCAkbG5vX3JldHVybiApID0gQF87CiAgICAgICAgbXkgJHJldHVybl9jb3VudCA9ICRyZXR1cm5fY291bnRfbWluOwogICAgICAgIGlmICggICAkcmV0dXJuX2NvdW50X21pbiBuZSAnKicKICAgICAgICAgICAgJiYgJHJldHVybl9jb3VudF9taW4gbmUgJHJldHVybl9jb3VudF9tYXggKQogICAgICAgIHsKICAgICAgICAgICAgJHJldHVybl9jb3VudCA9ICIkcmV0dXJuX2NvdW50X21pbi0kcmV0dXJuX2NvdW50X21heCI7CiAgICAgICAgfQogICAgICAgIG15ICRvdXRwdXRfbGluZSA9CiIkbG5vX3JldHVybjokbGV0dGVyOiRuYW1lOiRyZXR1cm5fY291bnQ6JHdhbnRfY291bnRfbWluOiR3YW50X2NvdW50X21heDogJG5vdGVcbiI7CiAgICAgICAgcHVzaCBAcmV0dXJuX3dhcm5pbmdzLAogICAgICAgICAgewogICAgICAgICAgICBsaW5lX251bWJlciA9PiAkbG5vX3JldHVybiwKICAgICAgICAgICAgbGV0dGVyICAgICAgPT4gJGxldHRlciwKICAgICAgICAgICAgbmFtZSAgICAgICAgPT4gJG5hbWUsCiAgICAgICAgICAgIG91dHB1dF9saW5lID0+ICRvdXRwdXRfbGluZSwKICAgICAgICAgIH07CiAgICAgICAgcmV0dXJuOwogICAgfTsgIyMgZW5kICRwdXNoX3JldHVybl93YXJuaW5nID0gc3ViCgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgTG9vcCBvdmVyIGVhY2ggc3ViCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZm9yZWFjaCBteSAka2V5ICgga2V5cyAlY29tbW9uX2hhc2ggKSB7CiAgICAgICAgbXkgJGl0ZW0gPSAkY29tbW9uX2hhc2h7JGtleX07CgogICAgICAgICMgQ2hlY2sgZm9yIG1peGVkIG1ldGhvZC9kaXJlY3QgY2FsbHM6CiAgICAgICAgbXkgJHJzdWJfaXRlbSA9ICRpdGVtLT57cnN1Yl9pdGVtfTsKICAgICAgICBuZXh0IHVubGVzcyBkZWZpbmVkKCRyc3ViX2l0ZW0pOwoKICAgICAgICAkbmFtZSA9ICRyc3ViX2l0ZW0tPntuYW1lfTsKICAgICAgICAkbG5vICA9ICRyc3ViX2l0ZW0tPntsaW5lX251bWJlcn07CiMjICAgICAgbXkgJHJLX3JldHVybl9saXN0ID0gJGl0ZW0tPntyS19yZXR1cm5fbGlzdH07CiAgICAgICAgbXkgJHJzZWxmX2NhbGxzICAgPSAkaXRlbS0+e3NlbGZfY2FsbHN9OwogICAgICAgIG15ICRyZGlyZWN0X2NhbGxzID0gJGl0ZW0tPntkaXJlY3RfY2FsbHN9OwogICAgICAgIG15ICRudW1fc2VsZiAgICAgID0gZGVmaW5lZCgkcnNlbGZfY2FsbHMpICAgPyBAeyRyc2VsZl9jYWxsc30gICA6IDA7CiAgICAgICAgbXkgJG51bV9kaXJlY3QgICAgPSBkZWZpbmVkKCRyZGlyZWN0X2NhbGxzKSA/IEB7JHJkaXJlY3RfY2FsbHN9IDogMDsKCiMjICAgICAgbXkgJEtfcmV0dXJuX2NvdW50X21pbiA9ICRyc3ViX2l0ZW0tPntLX3JldHVybl9jb3VudF9taW59OwogICAgICAgIG15ICRLX3JldHVybl9jb3VudF9tYXggPSAkcnN1Yl9pdGVtLT57S19yZXR1cm5fY291bnRfbWF4fTsKCiAgICAgICAgJHNoaWZ0X2NvdW50X21pbiAgPSAkcnN1Yl9pdGVtLT57c2hpZnRfY291bnRfbWlufTsKICAgICAgICAkc2hpZnRfY291bnRfbWF4ICA9ICRyc3ViX2l0ZW0tPntzaGlmdF9jb3VudF9tYXh9OwogICAgICAgICRyZXR1cm5fY291bnRfbWluID0gJHJzdWJfaXRlbS0+e3JldHVybl9jb3VudF9taW59OwogICAgICAgICRyZXR1cm5fY291bnRfbWF4ID0gJHJzdWJfaXRlbS0+e3JldHVybl9jb3VudF9tYXh9OwogICAgICAgICRtaW5fYXJnX2NvdW50ICAgID0gJGl0ZW0tPnttaW5fYXJnX2NvdW50fTsKICAgICAgICAkbWF4X2FyZ19jb3VudCAgICA9ICRpdGVtLT57bWF4X2FyZ19jb3VudH07CiAgICAgICAgJHdhbnRfY291bnRfbWluICAgPSAkaXRlbS0+e3dhbnRfY291bnRfbWlufTsKICAgICAgICAkd2FudF9jb3VudF9tYXggICA9ICRpdGVtLT57d2FudF9jb3VudF9tYXh9OwoKICAgICAgICAjIGNoYW5nZSB1bmRlZnMgdG8gJyonIGZvciB0aGUgb3V0cHV0IHRleHQKICAgICAgICBmb3JlYWNoICgKCiAgICAgICAgICAgICRzaGlmdF9jb3VudF9taW4sICAkc2hpZnRfY291bnRfbWF4LAogICAgICAgICAgICAkcmV0dXJuX2NvdW50X21pbiwgJHJldHVybl9jb3VudF9tYXgsCiAgICAgICAgICAgICRtaW5fYXJnX2NvdW50LCAgICAkbWF4X2FyZ19jb3VudCwKICAgICAgICAgICAgJHdhbnRfY291bnRfbWluLCAgICR3YW50X2NvdW50X21heCwKICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRfID0gJyonIHVubGVzcyBkZWZpbmVkKCRfKTsKICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgTWFrZSBhIG9uZS1saW5lIG1lc3NhZ2UgZm9yIGVhY2ggbWlzbWF0Y2ggY2FsbCBpc3N1ZSBvZiB0aGlzIHN1YgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICBteSAkcm92ZXJfY291bnQgICAgID0gJGl0ZW0tPntvdmVyX2NvdW50fTsKICAgICAgICBteSAkcnVuZGVyX2NvdW50ICAgID0gJGl0ZW0tPnt1bmRlcl9jb3VudH07CiAgICAgICAgbXkgJG51bV9vdmVyX2NvdW50ICA9IGRlZmluZWQoJHJvdmVyX2NvdW50KSAgPyBAeyRyb3Zlcl9jb3VudH0gIDogMDsKICAgICAgICBteSAkbnVtX3VuZGVyX2NvdW50ID0gZGVmaW5lZCgkcnVuZGVyX2NvdW50KSA/IEB7JHJ1bmRlcl9jb3VudH0gOiAwOwoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIGlzc3VlICdhJzogc3VicyB3aXRoIGJvdGggc2VsZi0+IGFuZCBkaXJlY3QgY2FsbHMKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpZiAoICRudW1fc2VsZiAmJiAkbnVtX2RpcmVjdCAmJiAkZG9fbWlzbWF0Y2hlZF9jYWxsX3R5cGV7J2EnfSApIHsKCiAgICAgICAgICAgIG15ICRsZXR0ZXIgICAgICAgICAgICAgPSAnYSc7CiAgICAgICAgICAgIG15ICRsaW5lc19zZWxmX2NhbGxzICAgPSBzdHJpbmdpZnlfbGluZV9yYW5nZSgkcnNlbGZfY2FsbHMpOwogICAgICAgICAgICBteSAkbGluZXNfZGlyZWN0X2NhbGxzID0gc3RyaW5naWZ5X2xpbmVfcmFuZ2UoJHJkaXJlY3RfY2FsbHMpOwogICAgICAgICAgICBteSAkc2VsZl9uYW1lICAgICAgICAgID0gJHJzdWJfaXRlbS0+e3NlbGZfbmFtZX07CiAgICAgICAgICAgIGlmICggIWRlZmluZWQoJHNlbGZfbmFtZSkgKSB7ICRzZWxmX25hbWUgPSBFTVBUWV9TVFJJTkcgfQogICAgICAgICAgICBteSAkZXNzMSA9ICRudW1fc2VsZiA+IDEgICA/ICdzJyA6IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgbXkgJGVzczIgPSAkbnVtX2RpcmVjdCA+IDEgPyAncycgOiBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgIG15ICRzdHIgID0gJHNlbGZfbmFtZSAuICctPmNhbGwnIC4gJGVzczE7CiAgICAgICAgICAgIG15ICRub3RlID0KIiRudW1fc2VsZiAkc3RyKCRsaW5lc19zZWxmX2NhbGxzKSBhbmQgJG51bV9kaXJlY3QgY2FsbCRlc3MyKCRsaW5lc19kaXJlY3RfY2FsbHMpIjsKICAgICAgICAgICAgJHB1c2hfY2FsbF9hcmdfd2FybmluZy0+KCAkbGV0dGVyLCAkbm90ZSApOwogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgSWdub3JlIGNhbGxzIHRvIGEgc3ViIHdoaWNoIHdhcyBub3QgZGVmaW5lZCBpbiB0aGlzIGZpbGUKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaWYgKCAhZGVmaW5lZCgkcnN1Yl9pdGVtKSApIHsKICAgICAgICAgICAgbmV4dDsKICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBpc3N1ZSAnaSc6IGluZGV0ZXJtaW5hdGUuIENvdWxkIG5vdCBkZXRlcm1pbmUgYSBzcGVjaWZpYyBhcmcgY291bnQKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGlmICggJHNoaWZ0X2NvdW50X21pbiBlcSAnKicgKSB7CiAgICAgICAgICAgIG15ICRsZXR0ZXIgPSAnaSc7CiAgICAgICAgICAgIGlmICggJGRvX21pc21hdGNoZWRfY2FsbF90eXBleyRsZXR0ZXJ9ICkgewoKICAgICAgICAgICAgICAgICMgc2tpcCAqOio6KiAobm8gZGlzYWdyZWVtZW50IC0gY2FsbCBjb3VudHMgYWxzbyBpbmRldGVybWluYXRlKQogICAgICAgICAgICAgICAgbmV4dAogICAgICAgICAgICAgICAgICBpZiAoICRzaGlmdF9jb3VudF9taW4gZXEgJG1pbl9hcmdfY291bnQKICAgICAgICAgICAgICAgICAgICAmJiAkc2hpZnRfY291bnRfbWluIGVxICRtYXhfYXJnX2NvdW50ICk7CgogICAgICAgICAgICAgICAgbXkgJG5vdGUgPSAkY2FsbF9hcmdfaXNzdWVfbm90ZXskbGV0dGVyfTsKICAgICAgICAgICAgICAgICRwdXNoX2NhbGxfYXJnX3dhcm5pbmctPiggJGxldHRlciwgJG5vdGUgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBvdGhlcndpc2UgY2hlY2sgY2FsbCBhcmcgY291bnRzCiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgaXNzdWUgJ28nOiBvdmVyY291bnQKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICBpZiAoICAgJG51bV9vdmVyX2NvdW50CiAgICAgICAgICAgICAgICAmJiAkZG9fbWlzbWF0Y2hlZF9jYWxsX3R5cGV7J28nfQogICAgICAgICAgICAgICAgJiYgJHNoaWZ0X2NvdW50X21heCA+PSAkbWlzbWF0Y2hlZF9hcmdfb3ZlcmNvdW50X2N1dG9mZiApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG15ICRsZXR0ZXIgICAgID0gJ28nOwogICAgICAgICAgICAgICAgbXkgJGxpbmVfcmFuZ2UgPSBzdHJpbmdpZnlfbGluZV9yYW5nZSgkcm92ZXJfY291bnQpOwogICAgICAgICAgICAgICAgbXkgJHRvdGFsICAgICAgPSAkbnVtX2RpcmVjdCArICRudW1fc2VsZjsKICAgICAgICAgICAgICAgIG15ICRub3RlICAgICAgID0gJGNhbGxfYXJnX2lzc3VlX25vdGV7JGxldHRlcn07CiAgICAgICAgICAgICAgICAkbm90ZSAuPQogICAgICAgICAgICAgICAgICAkdG90YWwgPiAxCiAgICAgICAgICAgICAgICAgID8gIiBhdCAkbnVtX292ZXJfY291bnQgb2YgJHRvdGFsIGNhbGxzICgkbGluZV9yYW5nZSkiCiAgICAgICAgICAgICAgICAgIDogIiBhdCAkbGluZV9yYW5nZSI7CiAgICAgICAgICAgICAgICAkcHVzaF9jYWxsX2FyZ193YXJuaW5nLT4oICRsZXR0ZXIsICRub3RlICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgaXNzdWUgJ3UnOiB1bmRlcmNvdW50CiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgIGlmICgkbnVtX3VuZGVyX2NvdW50KSB7CgogICAgICAgICAgICAgICAgaWYgKCAkc2hpZnRfY291bnRfbWluID4gJG1heF9zaGlmdF9jb3VudF93aXRoX3VuZGVyY291bnQgKSB7CiAgICAgICAgICAgICAgICAgICAgJG1heF9zaGlmdF9jb3VudF93aXRoX3VuZGVyY291bnQgPSAkc2hpZnRfY291bnRfbWluOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgU2tpcCB0aGUgd2FybmluZyBmb3Igc21hbGwgbGlzdHMgd2l0aCB1bmRlcmNvdW50CiAgICAgICAgICAgICAgICBpZiAoICAgJGRvX21pc21hdGNoZWRfY2FsbF90eXBleyd1J30KICAgICAgICAgICAgICAgICAgICAmJiAkc2hpZnRfY291bnRfbWluID49ICRtaXNtYXRjaGVkX2FyZ191bmRlcmNvdW50X2N1dG9mZiApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbXkgJGxldHRlciAgICAgPSAndSc7CiAgICAgICAgICAgICAgICAgICAgbXkgJGxpbmVfcmFuZ2UgPSBzdHJpbmdpZnlfbGluZV9yYW5nZSgkcnVuZGVyX2NvdW50KTsKICAgICAgICAgICAgICAgICAgICBteSAkdG90YWwgICAgICA9ICRudW1fZGlyZWN0ICsgJG51bV9zZWxmOwoKICAgICAgICAgICAgICAgICAgICBteSAkbm90ZSA9ICRjYWxsX2FyZ19pc3N1ZV9ub3RleyRsZXR0ZXJ9OwogICAgICAgICAgICAgICAgICAgICRub3RlIC49CiAgICAgICAgICAgICAgICAgICAgICAkdG90YWwgPiAxCiAgICAgICAgICAgICAgICAgICAgICA/ICIgYXQgJG51bV91bmRlcl9jb3VudCBvZiAkdG90YWwgY2FsbHMgKCRsaW5lX3JhbmdlKSIKICAgICAgICAgICAgICAgICAgICAgIDogIiBhdCAkbGluZV9yYW5nZSI7CgogICAgICAgICAgICAgICAgICAgICRudW1iZXJfb2ZfdW5kZXJjb3VudF93YXJuaW5ncysrOwogICAgICAgICAgICAgICAgICAgICRwdXNoX2NhbGxfYXJnX3dhcm5pbmctPiggJGxldHRlciwgJG5vdGUgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIE1ha2UgYSBvbmUtbGluZSBtZXNzYWdlIGZvciBlYWNoIG1pc21hdGNoIHJldHVybiBpc3N1ZSBvZiB0aGlzIHN1YgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgbXkgJHJldHVybl9pc3N1ZXMgPSAkaXRlbS0+e3JldHVybl9pc3N1ZXN9OwogICAgICAgIGlmICgkcmV0dXJuX2lzc3VlcykgewogICAgICAgICAgICBmb3JlYWNoIG15ICRsZXR0ZXIgKCBrZXlzICVyZXR1cm5faXNzdWVfbm90ZSApIHsKICAgICAgICAgICAgICAgIG5leHQgaWYgKCAhJGRvX21pc21hdGNoZWRfcmV0dXJuX3R5cGV7JGxldHRlcn0gKTsKICAgICAgICAgICAgICAgIG15ICRyaXNzdWVzID0gJHJldHVybl9pc3N1ZXMtPnskbGV0dGVyfTsKICAgICAgICAgICAgICAgIG15ICRudW1iZXIgID0gZGVmaW5lZCgkcmlzc3VlcykgPyBAeyRyaXNzdWVzfSA6IDA7CiAgICAgICAgICAgICAgICBuZXh0IHVubGVzcyAoJG51bWJlcik7CiAgICAgICAgICAgICAgICBteSAkbGluZV9yYW5nZSA9IHN0cmluZ2lmeV9saW5lX3JhbmdlKCRyaXNzdWVzKTsKICAgICAgICAgICAgICAgIG15ICR0b3RhbCAgICAgID0gJG51bV9kaXJlY3QgKyAkbnVtX3NlbGY7CgogICAgICAgICAgICAgICAgbXkgJG5vdGUgPSAkcmV0dXJuX2lzc3VlX25vdGV7JGxldHRlcn07CiAgICAgICAgICAgICAgICAkbm90ZSAuPQogICAgICAgICAgICAgICAgICAkdG90YWwgPiAxCiAgICAgICAgICAgICAgICAgID8gIiBhdCAkbnVtYmVyIG9mICR0b3RhbCBjYWxscyAoJGxpbmVfcmFuZ2UpIgogICAgICAgICAgICAgICAgICA6ICIgYXQgJGxpbmVfcmFuZ2UiOwoKICAgICAgICAgICAgICAgICMgVGhlIG9uZS1saW5lIG1lc3NhZ2Ugc2hvd3MgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSByZXR1cm4KICAgICAgICAgICAgICAgICMgd2l0aCB0aGUgbWF4aW11bSBjb3VudCBpZiB0aGVyZSBhcmUgcmV0dXJucy4gSWYgbm8gcmV0dXJucwogICAgICAgICAgICAgICAgIyAodHlwZXMgJ3gnIGFuZCAneScpIGl0IHNob3dzIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBzdWIgKCRsbm8pLgogICAgICAgICAgICAgICAgbXkgJGxub19yZXR1cm4gPQogICAgICAgICAgICAgICAgICBkZWZpbmVkKCRLX3JldHVybl9jb3VudF9tYXgpCiAgICAgICAgICAgICAgICAgID8gJHJMTC0+WyRLX3JldHVybl9jb3VudF9tYXhdLT5bX0xJTkVfSU5ERVhfXSArIDEKICAgICAgICAgICAgICAgICAgOiAkbG5vOwoKICAgICAgICAgICAgICAgICRwdXNoX3JldHVybl93YXJuaW5nLT4oICRsZXR0ZXIsICRub3RlLCAkbG5vX3JldHVybiApOwogICAgICAgICAgICB9ICMjIGVuZCBsb29wIHRvIHNhdmUgb25lIGxpbmUgZm9yIG1pc21hdGNoZWQgcmV0dXJucwogICAgICAgIH0KICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgTWFrZSB0aGUgc29ydGVkL2ZpbHRlcmVkIGNhbGwgYXJnIGlzc3VlIHJlcG9ydAogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBteSAkcmNhbGxfYXJnX3dhcm5pbmdzID0gc29ydF93YXJuaW5ncyggXEBjYWxsX2FyZ193YXJuaW5ncyApOwogICAgJHJjYWxsX2FyZ193YXJuaW5ncyA9IGZpbHRlcl9leGNsdWRlZF9uYW1lcyggJHJjYWxsX2FyZ193YXJuaW5ncywKICAgICAgICAkcmlzX21pc21hdGNoZWRfY2FsbF9leGNsdWRlZF9uYW1lICk7CiAgICBteSAkY2FsbF9hcmdfd2FybmluZ19vdXRwdXQgPSBFTVBUWV9TVFJJTkc7CiAgICBteSAkY2FsbF9hcmdfaGludCAgICAgICAgICAgPSBFTVBUWV9TVFJJTkc7CiAgICBpZiAoIEB7JHJjYWxsX2FyZ193YXJuaW5nc30gKSB7CiAgICAgICAgbXkgJGhlYWRlciA9CiAgICAgICAgICAiSXNzdWUgdHlwZXMgYXJlICdhJz1hcnJvdyBtaXNtYXRjaCAndSc9dW5kZXJjb3VudCAnbyc9b3ZlcmNvdW50IjsKICAgICAgICBpZiAoJGlzX2R1bXApIHsgJGhlYWRlciAuPSAiICdpJz1pbmRldGVybWluYXRlIiB9CiAgICAgICAgJGNhbGxfYXJnX3dhcm5pbmdfb3V0cHV0ID0gPDxFT007CiRoZWFkZXIKTGluZTpJc3N1ZTpTdWI6I2FyZ3M6TWluOk1heDogbm90ZQpFT00KICAgICAgICBmb3JlYWNoICggQHskcmNhbGxfYXJnX3dhcm5pbmdzfSApIHsKICAgICAgICAgICAgJGNhbGxfYXJnX3dhcm5pbmdfb3V0cHV0IC49ICRfLT57b3V0cHV0X2xpbmV9OwogICAgICAgIH0KICAgICAgICBpZiAoICEkaXNfZHVtcCAmJiAkbnVtYmVyX29mX3VuZGVyY291bnRfd2FybmluZ3MgKSB7CiAgICAgICAgICAgIG15ICR3bWF1Y19taW4gPSAkbWF4X3NoaWZ0X2NvdW50X3dpdGhfdW5kZXJjb3VudCArIDE7CiAgICAgICAgICAgICRjYWxsX2FyZ19oaW50ID0gPDxFT007Ck5vdGU6IHVzZSAtd21hdWM9JHdtYXVjX21pbiBvciBncmVhdGVyIHRvIHByZXZlbnQgdW5kZXJjb3VudCB3YXJuaW5ncyBpbiB0aGlzIGZpbGUKb3IgcHV0IHBhcmVudGhlc2VzIGFyb3VuZCBkZWZhdWx0IHN1YiBhcmdzIGFuZCB1c2UgLXdtYXVjPTAKRU9NCiAgICAgICAgICAgICRjYWxsX2FyZ193YXJuaW5nX291dHB1dCAuPSAkY2FsbF9hcmdfaGludDsKICAgICAgICB9CiAgICB9CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBNYWtlIHRoZSBzb3J0ZWQvZmlsdGVyZWQgcmV0dXJuIGlzc3VlIHJlcG9ydAogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgbXkgJHJyZXR1cm5fd2FybmluZ3MgPSBzb3J0X3dhcm5pbmdzKCBcQHJldHVybl93YXJuaW5ncyApOwogICAgJHJyZXR1cm5fd2FybmluZ3MgPSBmaWx0ZXJfZXhjbHVkZWRfbmFtZXMoICRycmV0dXJuX3dhcm5pbmdzLAogICAgICAgICRyaXNfbWlzbWF0Y2hlZF9yZXR1cm5fZXhjbHVkZWRfbmFtZSApOwoKICAgIG15ICRyZXR1cm5fd2FybmluZ19vdXRwdXQgPSBFTVBUWV9TVFJJTkc7CiAgICBpZiAoIEB7JHJyZXR1cm5fd2FybmluZ3N9ICkgewogICAgICAgICRyZXR1cm5fd2FybmluZ19vdXRwdXQgPSA8PEVPTTsKSXNzdWUgdHlwZXMgJ3UnPXVuZGVyLXdhbnQgJ28nPW92ZXItd2FudCAneCcsJ3knPW5vIHJldHVybiAncyc9c2NhbGFyLWFycmF5IG1peApMaW5lOklzc3VlOlN1YjojUmV0dXJuZWQ6TWluX3dhbnRlZDpNYXhfd2FudGVkOiBub3RlCkVPTQogICAgICAgIGZvcmVhY2ggKCBAeyRycmV0dXJuX3dhcm5pbmdzfSApIHsKICAgICAgICAgICAgJHJldHVybl93YXJuaW5nX291dHB1dCAuPSAkXy0+e291dHB1dF9saW5lfTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBjYWxsX2FyZ193YXJuaW5nX291dHB1dCA9PiAkY2FsbF9hcmdfd2FybmluZ19vdXRwdXQsCiAgICAgICAgcmV0dXJuX3dhcm5pbmdfb3V0cHV0ICAgPT4gJHJldHVybl93YXJuaW5nX291dHB1dCwKICAgIH07Cn0gIyMgZW5kIHN1YiBjcm9zc19jaGVja19zdWJfY2FsbHMKCnN1YiBzb3J0X3dhcm5pbmdzIHsKCiAgICBteSAoJHJ3YXJuaW5ncykgPSBAXzsKCiAgICAjIEdpdmVuOgogICAgIyAgICRyd2FybmlnbnMgPSByZWYgdG8gbGlzdCBvZiB3YXJuaW5nIGluZm8gaGFzaGVzCiAgICAjIFJldHVybiB1cGRhdGVkICRyd2FybmluZ3MKICAgICMgICAtIFNvcnRlZCBieSBsaW5lIG51bWJlcgogICAgaWYgKCBAeyRyd2FybmluZ3N9ICkgewoKICAgICAgICAjIHNvcnQgYnkgbGluZSBudW1iZXIKICAgICAgICAkcndhcm5pbmdzID0gWwogICAgICAgICAgICBzb3J0IHsKICAgICAgICAgICAgICAgICAgICAgJGEtPntsaW5lX251bWJlcn0gPD0+ICRiLT57bGluZV9udW1iZXJ9CiAgICAgICAgICAgICAgICAgIHx8ICRhLT57bGV0dGVyfSBjbXAgJGItPntsZXR0ZXJ9CiAgICAgICAgICAgIH0gQHskcndhcm5pbmdzfQogICAgICAgIF07CiAgICB9CiAgICByZXR1cm4gJHJ3YXJuaW5nczsKfSAjIyBlbmQgc3ViIHNvcnRfd2FybmluZ3MKCnN1YiBzdHJpbmdpZnlfbGluZV9yYW5nZSB7CiAgICBteSAoJHJjYWxscykgPSBAXzsKCiAgICAjIEdpdmVuOgogICAgIyAgICRyY2FsbHMgPSByZWYgdG8gbGlzdCBvZiBjYWxsIGluZm8KICAgICMgUmV0dXJuOgogICAgIyAgICRzdHJpbmcgPSBzaW5nbGUgbGluZSBvZiB0ZXh0IHdpdGgganVzdCB0aGUgbGluZSByYW5nZQoKICAgIG15ICRzdHJpbmcgPSBFTVBUWV9TVFJJTkc7CiAgICBpZiAoICRyY2FsbHMgJiYgQHskcmNhbGxzfSApIHsKICAgICAgICBteSBAc29ydGVkID0KICAgICAgICAgIHNvcnQgeyAkYS0+e2xpbmVfbnVtYmVyfSA8PT4gJGItPntsaW5lX251bWJlcn0gfSBAeyRyY2FsbHN9OwogICAgICAgIG15ICRudW0gICAgID0gQHNvcnRlZDsKICAgICAgICBteSAkbG5vX2JlZyA9ICRzb3J0ZWRbMF0tPntsaW5lX251bWJlcn07CiAgICAgICAgbXkgJGxub19lbmQgPSAkc29ydGVkWy0xXS0+e2xpbmVfbnVtYmVyfTsKICAgICAgICBpZiAoICRudW0gPT0gMSApIHsKICAgICAgICAgICAgJHN0cmluZyA9ICJsaW5lICRsbm9fYmVnIjsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkbnVtID09IDIgKSB7CiAgICAgICAgICAgICRzdHJpbmcgPSAibGluZXMgJGxub19iZWcsJGxub19lbmQiOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJHN0cmluZyA9ICJsaW5lcyAkbG5vX2JlZy4uJGxub19lbmQiOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAkc3RyaW5nOwp9ICMjIGVuZCBzdWIgc3RyaW5naWZ5X2xpbmVfcmFuZ2UKCnN1YiBpbml0aWFsaXplX3dhcm5fbWlzbWF0Y2hlZCB7CgogICAgIyAgYSAtIG1pc21hdGNoZWQgYXJyb3cgb3BlcmF0b3IgY2FsbHMKICAgICMgIG8gLSBvdmVyY291bnQKICAgICMgIHUgLSB1bmRlcmNvdW50CiAgICAkcndhcm5fbWlzbWF0Y2hlZF9hcmdfdHlwZXMgPQogICAgICBpbml0aWFsaXplX3dhcm5faGFzaCggJ3dhcm4tbWlzbWF0Y2hlZC1hcmctdHlwZXMnLCAxLCBbcXcoIGEgbyB1ICldICk7CiAgICAkcmlzX3dhcm5fbWlzbWF0Y2hlZF9hcmdfZXhjbHVkZWRfbmFtZSA9CiAgICAgIG1ha2VfZXhjbHVkZWRfbmFtZV9oYXNoKCd3YXJuLW1pc21hdGNoZWQtYXJnLWV4Y2x1c2lvbi1saXN0Jyk7CgogICAgIyAgeCAtIHdhbnQgYXJyYXkgYnV0IG5vIHJldHVybiBzZWVuCiAgICAjICBvIC0gd2FudCBhcnJheSB3aXRoIGV4Y2VzcyBjb3VudAogICAgIyAgdSAtIHdhbnQgYXJyYXkgd2l0aCB1bm1hdGNoZWQgY291bnQKICAgICMgIHkgLSB3YW50IHNjYWxhciBidXQgbm8gcmV0dXJuIHNlZW4KICAgICMgIHMgLSB3YW50IHNjYWxhciBidXQgb25seSBhcnJheXMgd2l0aCBjb3VudCA+IDEgcmV0dXJuZWQKICAgICRyd2Fybl9taXNtYXRjaGVkX3JldHVybl90eXBlcyA9CiAgICAgIGluaXRpYWxpemVfd2Fybl9oYXNoKCAnd2Fybi1taXNtYXRjaGVkLXJldHVybi10eXBlcycsCiAgICAgICAgMSwgW3F3KCB4IG8gdSB5IHMgKV0gKTsKICAgICRyaXNfd2Fybl9taXNtYXRjaGVkX3JldHVybl9leGNsdWRlZF9uYW1lID0KICAgICAgbWFrZV9leGNsdWRlZF9uYW1lX2hhc2goJ3dhcm4tbWlzbWF0Y2hlZC1yZXR1cm4tZXhjbHVzaW9uLWxpc3QnKTsKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGluaXRpYWxpemVfd2Fybl9taXNtYXRjaGVkCgpzdWIgd2Fybl9taXNtYXRjaGVkIHsKICAgIG15ICgkc2VsZikgPSBAXzsKCiAgICAjIHByb2Nlc3MgYm90aCAtLXdhcm4tbWlzbWF0Y2hlZC1hcmdzIGFuZCAtLXdhcm4tbWlzbWF0Y2hlZC1yZXR1cm5zLAogICAgbXkgJHJoYXNoID0gJHNlbGYtPmNyb3NzX2NoZWNrX3N1Yl9jYWxscygpOwoKICAgIG15ICR3bWFfa2V5ID0gJ3dhcm4tbWlzbWF0Y2hlZC1hcmdzJzsKICAgIGlmICggJHJPcHRzLT57JHdtYV9rZXl9ICkgewogICAgICAgIG15ICRvdXRwdXRfbGluZXMgPSAkcmhhc2gtPntjYWxsX2FyZ193YXJuaW5nX291dHB1dH07CiAgICAgICAgaWYgKCRvdXRwdXRfbGluZXMpIHsKICAgICAgICAgICAgY2hvbXAgJG91dHB1dF9saW5lczsKICAgICAgICAgICAgd2FybmluZyg8PEVPTSk7CkJlZ2luIHNjYW4gZm9yIC0tJHdtYV9rZXkKJG91dHB1dF9saW5lcwpFbmQgc2NhbiBmb3IgLS0kd21hX2tleQpFT00KICAgICAgICB9CiAgICB9CgogICAgbXkgJHdtcl9rZXkgPSAnd2Fybi1taXNtYXRjaGVkLXJldHVybnMnOwogICAgaWYgKCAkck9wdHMtPnskd21yX2tleX0gKSB7CiAgICAgICAgbXkgJG91dHB1dF9saW5lcyA9ICRyaGFzaC0+e3JldHVybl93YXJuaW5nX291dHB1dH07CiAgICAgICAgaWYgKCRvdXRwdXRfbGluZXMpIHsKICAgICAgICAgICAgY2hvbXAgJG91dHB1dF9saW5lczsKICAgICAgICAgICAgd2FybmluZyg8PEVPTSk7CkJlZ2luIHNjYW4gZm9yIC0tJHdtcl9rZXkKJG91dHB1dF9saW5lcwpFbmQgc2NhbiBmb3IgLS0kd21yX2tleQpFT00KICAgICAgICB9CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiB3YXJuX21pc21hdGNoZWQKCnN1YiBkdW1wX21pc21hdGNoZWRfYXJncyB7CiAgICBteSAoJHNlbGYpID0gQF87CgogICAgIyBwcm9jZXNzIGEgLS1kdW1wLW1pc21hdGNoZWQtYXJncyBjb21tYW5kCiAgICBteSAkcmhhc2ggICAgICAgICA9ICRzZWxmLT5jcm9zc19jaGVja19zdWJfY2FsbHMoKTsKICAgIG15ICRvdXRwdXRfc3RyaW5nID0gJHJoYXNoLT57Y2FsbF9hcmdfd2FybmluZ19vdXRwdXR9OwogICAgaWYgKCRvdXRwdXRfc3RyaW5nKSB7CiAgICAgICAgbXkgJGlucHV0X3N0cmVhbV9uYW1lID0gZ2V0X2lucHV0X3N0cmVhbV9uYW1lKCk7CiAgICAgICAgY2hvbXAgJG91dHB1dF9zdHJpbmc7CiAgICAgICAgcHJpbnQgeypTVERPVVR9IDw8RU9NOwokaW5wdXRfc3RyZWFtX25hbWU6IG91dHB1dCBmb3IgLS1kdW1wLW1pc21hdGNoZWQtYXJncwokb3V0cHV0X3N0cmluZwpFT00KICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGR1bXBfbWlzbWF0Y2hlZF9hcmdzCgpzdWIgZHVtcF9taXNtYXRjaGVkX3JldHVybnMgewogICAgbXkgKCRzZWxmKSA9IEBfOwoKICAgICMgcHJvY2VzcyBhIC0tZHVtcC1taXNtYXRjaGVkLXJldHVybnMgY29tbWFuZAogICAgbXkgJHJoYXNoICAgICAgICAgPSAkc2VsZi0+Y3Jvc3NfY2hlY2tfc3ViX2NhbGxzKCk7CiAgICBteSAkb3V0cHV0X3N0cmluZyA9ICRyaGFzaC0+e3JldHVybl93YXJuaW5nX291dHB1dH07CiAgICBpZiAoJG91dHB1dF9zdHJpbmcpIHsKICAgICAgICBteSAkaW5wdXRfc3RyZWFtX25hbWUgPSBnZXRfaW5wdXRfc3RyZWFtX25hbWUoKTsKICAgICAgICBjaG9tcCAkb3V0cHV0X3N0cmluZzsKICAgICAgICBwcmludCB7KlNURE9VVH0gPDxFT007CiRpbnB1dF9zdHJlYW1fbmFtZTogb3V0cHV0IGZvciAtLWR1bXAtbWlzbWF0Y2hlZC1yZXR1cm5zCiRvdXRwdXRfc3RyaW5nCkVPTQogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgZHVtcF9taXNtYXRjaGVkX3JldHVybnMKCnN1YiBjaGVja19mb3Jfb2xkX2JyZWFrIHsKICAgIG15ICggJHNlbGYsICRLSywgJHJrZWVwX2JyZWFrX2hhc2gsICRyYnJlYWtfaGFzaCApID0gQF87CgogICAgIyBUaGlzIHN1YiBpcyBjYWxsZWQgdG8gaGVscCBpbXBsZW1lbnQgZmxhZ3M6CiAgICAjIC0ta2VlcC1vbGQtYnJlYWtwb2ludHMtYmVmb3JlIGFuZCAtLWtlZXAtb2xkLWJyZWFrcG9pbnRzLWFmdGVyCiAgICAjIEdpdmVuOgogICAgIyAgICRLSyAgICAgICAgICAgICAgID0gaW5kZXggb2YgYSB0b2tlbiwKICAgICMgICAkcmtlZXBfYnJlYWtfaGFzaCA9IHVzZXIgY29udHJvbCBmb3IgLS1rZWVwLW9sZC0uLi4KICAgICMgICAkcmJyZWFrX2hhc2ggICAgICA9IGhhc2ggb2YgdG9rZW5zIHdoZXJlIGJyZWFrcyBhcmUgcmVxdWVzdGVkCiAgICAjIFNldCAkcmJyZWFrX2hhc2ggYXMgZm9sbG93cyBpZiBhIHVzZXIgYnJlYWsgaXMgcmVxdWVzdGVkOgogICAgIyAgICA9IDEgbWFrZSBhIGhhcmQgYnJlYWsgKGZsdXNoIHRoZSBjdXJyZW50IGJhdGNoKQogICAgIyAgICAgICAgYmVzdCBmb3Igc29tZXRoaW5nIGxpa2UgbGVhZGluZyBjb21tYXMgKC1rYmI9JywnKQogICAgIyAgICA9IDIgbWFrZSBhIHNvZnQgYnJlYWsgKGtlZXAgYnVpbGRpbmcgY3VycmVudCBiYXRjaCkKICAgICMgICAgICAgIGJlc3QgZm9yIHNvbWV0aGluZyBsaWtlIGxlYWRpbmcgLT4KCiAgICBteSAkckxMID0gJHNlbGYtPltfckxMX107CgogICAgbXkgJHNlcW5vID0gJHJMTC0+WyRLS10tPltfVFlQRV9TRVFVRU5DRV9dOwoKICAgICMgbm9uLWNvbnRhaW5lciB0b2tlbnMgdXNlIHRoZSB0eXBlIGFzIHRoZSBrZXkKICAgIGlmICggISRzZXFubyApIHsKICAgICAgICBteSAkdHlwZSA9ICRyTEwtPlskS0tdLT5bX1RZUEVfXTsKICAgICAgICBpZiAoICRya2VlcF9icmVha19oYXNoLT57JHR5cGV9ICkgewogICAgICAgICAgICAkcmJyZWFrX2hhc2gtPnskS0t9ID0gJGlzX3NvZnRfa2VlcF9icmVha190eXBleyR0eXBlfSA/IDIgOiAxOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNvbnRhaW5lciB0b2tlbnMgdXNlIHRoZSB0b2tlbiBhcyB0aGUga2V5CiAgICBlbHNlIHsKICAgICAgICBteSAkdG9rZW4gPSAkckxMLT5bJEtLXS0+W19UT0tFTl9dOwogICAgICAgIG15ICRmbGFnICA9ICRya2VlcF9icmVha19oYXNoLT57JHRva2VufTsKICAgICAgICBpZiAoJGZsYWcpIHsKCiAgICAgICAgICAgIG15ICRtYXRjaCA9ICRmbGFnIGVxICcxJyB8fCAkZmxhZyBlcSAnKic7CgogICAgICAgICAgICAjIGNoZWNrIGZvciBzcGVjaWFsIG1hdGNoaW5nIGNvZGVzCiAgICAgICAgICAgIGlmICggISRtYXRjaCApIHsKICAgICAgICAgICAgICAgIGlmICggJHRva2VuIGVxICcoJyB8fCAkdG9rZW4gZXEgJyknICkgewogICAgICAgICAgICAgICAgICAgICRtYXRjaCA9ICRzZWxmLT5tYXRjaF9wYXJlbl9jb250cm9sX2ZsYWcoICRzZXFubywgJGZsYWcgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJHRva2VuIGVxICd7JyB8fCAkdG9rZW4gZXEgJ30nICkgewoKICAgICAgICAgICAgICAgICAgICAjIFRoZXNlIHRlbnRhdGl2ZSBjb2RlcyAnYicgYW5kICdCJyBmb3IgYnJhY2UgdHlwZXMgYXJlCiAgICAgICAgICAgICAgICAgICAgIyBwbGFjZWhvbGRlcnMgZm9yIHBvc3NpYmxlIGZ1dHVyZSBicmFjZSB0eXBlcy4gVGhleQogICAgICAgICAgICAgICAgICAgICMgYXJlIG5vdCBkb2N1bWVudGVkIGFuZCBtYXkgYmUgY2hhbmdlZC4KICAgICAgICAgICAgICAgICAgICBteSAkYmxvY2tfdHlwZSA9ICRzZWxmLT5bX3JibG9ja190eXBlX29mX3NlcW5vX10tPnskc2Vxbm99OwogICAgICAgICAgICAgICAgICAgIGlmICAgICggJGZsYWcgZXEgJ2InICkgeyAkbWF0Y2ggPSAkYmxvY2tfdHlwZSB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkZmxhZyBlcSAnQicgKSB7ICRtYXRjaCA9ICEkYmxvY2tfdHlwZSB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICMjIHVua25vd24gY29kZSAtIG5vIG1hdGNoCiAgICAgICAgICAgICAgICAgICAgICAgIERFVkVMX01PREUgJiYgRmF1bHQoPDxFT00pOwp1bmV4cGVjdGVkIGNvZGUgJyRmbGFnJyBmb3IgLS1rZWVwLW9sZC1icmVha3BvaW50czogZXhwZWN0aW5nICdiJyBvciAnQicKRU9NCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIyBubyBtYXRjaAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkbWF0Y2gpIHsKICAgICAgICAgICAgICAgIG15ICR0eXBlID0gJHJMTC0+WyRLS10tPltfVFlQRV9dOwogICAgICAgICAgICAgICAgJHJicmVha19oYXNoLT57JEtLfSA9ICRpc19zb2Z0X2tlZXBfYnJlYWtfdHlwZXskdHlwZX0gPyAyIDogMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGNoZWNrX2Zvcl9vbGRfYnJlYWsKCnN1YiBrZWVwX29sZF9saW5lX2JyZWFrcyB7CgogICAgbXkgKCRzZWxmKSA9IEBfOwoKICAgICMgQ2FsbGVkIG9uY2UgcGVyIGZpbGUgdG8gZmluZCBhbmQgbWFyayBhbnkgb2xkIGxpbmUgYnJlYWtzIHdoaWNoCiAgICAjIHNob3VsZCBiZSBrZXB0LiAgV2Ugd2lsbCBiZSB0cmFuc2xhdGluZyB0aGUgaW5wdXQgaGFzaGVzIGludG8KICAgICMgdG9rZW4gaW5kZXhlcy4KCiAgICAjIEEgZmxhZyBpcyBzZXQgYXMgZm9sbG93czoKICAgICMgPSAxIG1ha2UgYSBoYXJkIGJyZWFrIChmbHVzaCB0aGUgY3VycmVudCBiYXRjaCkKICAgICMgICAgIGJlc3QgZm9yIHNvbWV0aGluZyBsaWtlIGxlYWRpbmcgY29tbWFzICgta2JiPScsJykKICAgICMgPSAyIG1ha2UgYSBzb2Z0IGJyZWFrIChrZWVwIGJ1aWxkaW5nIGN1cnJlbnQgYmF0Y2gpCiAgICAjICAgICBiZXN0IGZvciBzb21ldGhpbmcgbGlrZSBsZWFkaW5nIC0+CgogICAgbXkgJHJMTCA9ICRzZWxmLT5bX3JMTF9dOwogICAgbXkgJHJLcmFuZ2VfY29kZV93aXRob3V0X2NvbW1lbnRzID0KICAgICAgJHNlbGYtPltfcktyYW5nZV9jb2RlX3dpdGhvdXRfY29tbWVudHNfXTsKICAgIG15ICRyYnJlYWtfYmVmb3JlX0tmaXJzdCA9ICRzZWxmLT5bX3JicmVha19iZWZvcmVfS2ZpcnN0X107CiAgICBteSAkcmJyZWFrX2FmdGVyX0tsYXN0ICAgPSAkc2VsZi0+W19yYnJlYWtfYWZ0ZXJfS2xhc3RfXTsKICAgIG15ICRyYnJlYWtfY29udGFpbmVyICAgICA9ICRzZWxmLT5bX3JicmVha19jb250YWluZXJfXTsKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBBcHBseSAtLWJyZWFrLWF0LW9sZC1tZXRob2QtYnJlYWtwb2ludHMKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgIyBUaGlzIGNvZGUgbW92ZWQgaGVyZSBmcm9tIHN1YiBicmVha19saXN0cyB0byBmaXggYjExMjAKICAgIGlmICggJHJPcHRzLT57J2JyZWFrLWF0LW9sZC1tZXRob2QtYnJlYWtwb2ludHMnfSApIHsKICAgICAgICBmb3JlYWNoIG15ICRpdGVtICggQHskcktyYW5nZV9jb2RlX3dpdGhvdXRfY29tbWVudHN9ICkgewogICAgICAgICAgICBteSAoICRLZmlyc3QsICRLbGFzdCApID0gQHskaXRlbX07CiAgICAgICAgICAgIG15ICR0eXBlICA9ICRyTEwtPlskS2ZpcnN0XS0+W19UWVBFX107CiAgICAgICAgICAgIG15ICR0b2tlbiA9ICRyTEwtPlskS2ZpcnN0XS0+W19UT0tFTl9dOwoKICAgICAgICAgICAgIyBsZWFkaW5nICctPicgdXNlIGEgdmFsdWUgb2YgMiB3aGljaCBjYXVzZXMgYSBzb2Z0CiAgICAgICAgICAgICMgYnJlYWsgcmF0aGVyIHRoYW4gYSBoYXJkIGJyZWFrCiAgICAgICAgICAgIGlmICggJHR5cGUgZXEgJy0+JyApIHsKCiAgICAgICAgICAgICAgICAjIGlnbm9yZSAtYm9tIGFmdGVyIGFuIG9wZW5pbmcgdG9rZW4gKCBhIHN5bnRheCBlcnJvciwgYjE0NzUgKQogICAgICAgICAgICAgICAgbXkgJEtwID0gJHNlbGYtPktfcHJldmlvdXNfbm9uYmxhbmsoJEtmaXJzdCk7CiAgICAgICAgICAgICAgICBuZXh0IGlmICggIWRlZmluZWQoJEtwKSApOwogICAgICAgICAgICAgICAgbmV4dCBpZiAoICRpc19vcGVuaW5nX3R5cGV7ICRyTEwtPlskS3BdLT5bX1RZUEVfXSB9ICk7CgogICAgICAgICAgICAgICAgIyBpZ25vcmUgLWJvbSBpZiB0aGlzIGRvZXMgbm90IGxvb2sgbGlrZSBhIG1ldGhvZCBjYWxsOyBjNDI2CiAgICAgICAgICAgICAgICBteSAkS24gPSAkc2VsZi0+S19uZXh0X25vbmJsYW5rKCRLZmlyc3QpOwogICAgICAgICAgICAgICAgbmV4dCBpZiAoICFkZWZpbmVkKCRLbikgKTsKICAgICAgICAgICAgICAgIG15ICR0b2tlbl9uID0gJHJMTC0+WyRLbl0tPltfVFlQRV9dOwogICAgICAgICAgICAgICAgbmV4dCBpZiAoICR0b2tlbl9uIGVxICd7JyB8fCAkdG9rZW5fbiBlcSAnWycgKTsKCiAgICAgICAgICAgICAgICAkcmJyZWFrX2JlZm9yZV9LZmlyc3QtPnskS2ZpcnN0fSA9IDI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgbGVhZGluZyAnKS0+JyB1c2UgYSBzcGVjaWFsIGZsYWcgdG8gaW5zdXJlIHRoYXQgYm90aAogICAgICAgICAgICAjIG9wZW5pbmcgYW5kIGNsb3NpbmcgcGFyZW5zIGdldCBvcGVuZWQKICAgICAgICAgICAgIyBGaXggZm9yIGIxMTIwOiBvbmx5IGZvciBwYXJlbnMsIG5vdCBicmFjZXMKICAgICAgICAgICAgZWxzaWYgKCAkdG9rZW4gZXEgJyknICkgewogICAgICAgICAgICAgICAgbXkgJEtuID0gJHNlbGYtPktfbmV4dF9ub25ibGFuaygkS2ZpcnN0KTsKICAgICAgICAgICAgICAgIG5leHQgaWYgKCAhZGVmaW5lZCgkS24pICk7CiAgICAgICAgICAgICAgICBuZXh0IGlmICggJEtuID4gJEtsYXN0ICk7CiAgICAgICAgICAgICAgICBuZXh0IGlmICggJHJMTC0+WyRLbl0tPltfVFlQRV9dIG5lICctPicgKTsKICAgICAgICAgICAgICAgIG15ICRzZXFubyA9ICRyTEwtPlskS2ZpcnN0XS0+W19UWVBFX1NFUVVFTkNFX107CiAgICAgICAgICAgICAgICBuZXh0IGlmICggISRzZXFubyApOwoKICAgICAgICAgICAgICAgICMgTm90ZTogaW4gcHJldmlvdXMgdmVyc2lvbnMgdGhlcmUgd2FzIGEgZml4IGhlcmUgdG8gYXZvaWQKICAgICAgICAgICAgICAgICMgaW5zdGFiaWxpdHkgYmV0d2VlbiBjb25mbGljdGluZyAtYm9tIGFuZCAtcHZ0IG9yIC1wdnRjIGZsYWdzLgogICAgICAgICAgICAgICAgIyBUaGUgZml4IHNraXBwZWQgLWJvbSBmb3IgYSBzbWFsbCBsaW5lIGRpZmZlcmVuY2UuICBCdXQgdGhpcwogICAgICAgICAgICAgICAgIyB3YXMgdHJvdWJsZXNvbWUsIGFuZCBpbnN0ZWFkIHRoZSBmaXggaGFzIGJlZW4gbW92ZWQgdG8KICAgICAgICAgICAgICAgICMgc3ViIHNldF92ZXJ0aWNhbF90aWdodG5lc3NfZmxhZ3Mgd2hlcmUgcHJpb3JpdHkgaXMgZ2l2ZW4gdG8KICAgICAgICAgICAgICAgICMgdGhlIC1ib20gZmxhZyBvdmVyIC1wdnQgYW5kIC1wdnRjIGZsYWdzLiAgQm90aCBvcGVuaW5nIGFuZAogICAgICAgICAgICAgICAgIyBjbG9zaW5nIHBhcmVuIGZsYWdzIGFyZSBpbnZvbHZlZCBiZWNhdXNlIGV2ZW4gdGhvdWdoIC1ib20gb25seQogICAgICAgICAgICAgICAgIyByZXF1ZXN0cyBicmVha2luZyBiZWZvcmUgdGhlIGNsb3NpbmcgcGFyZW4sIGF1dG9tYXRlZCBsb2dpYwogICAgICAgICAgICAgICAgIyBvcGVucyB0aGUgb3BlbmluZyBwYXJlbiB3aGVuIHRoZSBjbG9zaW5nIHBhcmVuIG9wZW5zLgogICAgICAgICAgICAgICAgIyBSZWxldmFudCBjYXNlcyBhcmUgYjk3NywgYjEyMTUsIGIxMjcwLCBiMTMwMwoKICAgICAgICAgICAgICAgICMgaWdub3JlIC1ib20gaWYgdGhpcyBkb2VzIG5vdCBsb29rIGxpa2UgYSBtZXRob2QgY2FsbDsgYzQyNgogICAgICAgICAgICAgICAgJEtuID0gJHNlbGYtPktfbmV4dF9ub25ibGFuaygkS24pOwogICAgICAgICAgICAgICAgbmV4dCBpZiAoICFkZWZpbmVkKCRLbikgKTsKICAgICAgICAgICAgICAgIG15ICR0b2tlbl9uID0gJHJMTC0+WyRLbl0tPltfVFlQRV9dOwogICAgICAgICAgICAgICAgbmV4dCBpZiAoICR0b2tlbl9uIGVxICd7JyB8fCAkdG9rZW5fbiBlcSAnWycgKTsKCiAgICAgICAgICAgICAgICAkcmJyZWFrX2NvbnRhaW5lci0+eyRzZXFub30gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIyBub3QgYSBzcGVjaWFsIGNhc2UKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIEFwcGx5IC0ta2VlcC1vbGQtYnJlYWtwb2ludHMtYmVmb3JlIGFuZCAtLWtlZXAtb2xkLWJyZWFrcG9pbnRzLWFmdGVyCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgcmV0dXJuIHVubGVzcyAoICVrZWVwX2JyZWFrX2JlZm9yZV90eXBlIHx8ICVrZWVwX2JyZWFrX2FmdGVyX3R5cGUgKTsKCiAgICBmb3JlYWNoIG15ICRpdGVtICggQHskcktyYW5nZV9jb2RlX3dpdGhvdXRfY29tbWVudHN9ICkgewogICAgICAgIG15ICggJEtmaXJzdCwgJEtsYXN0ICkgPSBAeyRpdGVtfTsKICAgICAgICAkc2VsZi0+Y2hlY2tfZm9yX29sZF9icmVhayggJEtmaXJzdCwgXCVrZWVwX2JyZWFrX2JlZm9yZV90eXBlLAogICAgICAgICAgICAkcmJyZWFrX2JlZm9yZV9LZmlyc3QgKTsKICAgICAgICAkc2VsZi0+Y2hlY2tfZm9yX29sZF9icmVhayggJEtsYXN0LCBcJWtlZXBfYnJlYWtfYWZ0ZXJfdHlwZSwKICAgICAgICAgICAgJHJicmVha19hZnRlcl9LbGFzdCApOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIga2VlcF9vbGRfbGluZV9icmVha3MKCnN1YiB3ZWxkX2NvbnRhaW5lcnMgewoKICAgIG15ICgkc2VsZikgPSBAXzsKCiAgICAjIENhbGxlZCBvbmNlIHBlciBmaWxlIHRvIGRvIGFueSB3ZWxkaW5nIG9wZXJhdGlvbnMgcmVxdWVzdGVkIGJ5IC0td2VsZCoKICAgICMgZmxhZ3MuCgogICAgIyBUaGlzIGNvdW50IGlzIHVzZWQgdG8gZWxpbWluYXRlIG5lZWRsZXNzIGNhbGxzIGZvciB3ZWxkIGNoZWNrcyBlbHNld2hlcmUKICAgICR0b3RhbF93ZWxkX2NvdW50ID0gMDsKCiAgICByZXR1cm4gaWYgKCAkck9wdHMtPnsnaW5kZW50LW9ubHknfSApOwogICAgcmV0dXJuIHVubGVzcyAoJHJPcHRzX2FkZF9uZXdsaW5lcyk7CgogICAgIyBJbXBvcnRhbnQ6IHN1YiAnd2VsZF9jdWRkbGVkX2Jsb2NrcycgbXVzdCBiZSBjYWxsZWQgYmVmb3JlCiAgICAjIHN1YiAnd2VsZF9uZXN0ZWRfY29udGFpbmVycycuIFRoaXMgaXMgYmVjYXVzZSB0aGUgY3VkZGxlZCBvcHRpb24gbmVlZHMgdG8KICAgICMgdXNlIHRoZSBvcmlnaW5hbCBfTEVWRUxfIHZhbHVlcyBvZiBjb250YWluZXJzLCBidXQgdGhlIHdlbGQgbmVzdGVkCiAgICAjIGNvbnRhaW5lcnMgY2hhbmdlcyBfTEVWRUxfIG9mIHdlbGRlZCBjb250YWluZXJzLgoKICAgICMgSGVyZSBpcyBhIGdvb2QgdGVzdCBjYXNlIHRvIGJlIHN1cmUgdGhhdCBib3RoIGN1ZGRsaW5nIGFuZCB3ZWxkaW5nCiAgICAjIGFyZSB3b3JraW5nIGFuZCBub3QgaW50ZXJmZXJpbmcgd2l0aCBlYWNoIG90aGVyOiA8PHNuaXBwZXRzL2NlX3duMS5pbj4+CgogICAgIyAgIHBlcmx0aWR5IC13biAtY2UKCiAgICMgaWYgKCRCT0xEX01BVEgpIHsgKAogICAjICAgICAkbGFiZWxzLCAkY29tbWVudCwKICAgIyAgICAgam9pbiggJycsICc8Qj4nLCAmbWFrZV9tYXRoKCAkbW9kZSwgJycsICcnLCAkXyApLCAnPC9CPicgKQogICAjICkgfSBlbHNlIHsgKAogICAjICAgICAmcHJvY2Vzc19tYXRoX2luX2xhdGV4KCAkbW9kZSwgJG1hdGhfc3R5bGUsICRzbGV2ZWwsICJcXG1ib3h7JHRleHR9IiApLAogICAjICAgICAkYWZ0ZXIKICAgIyApIH0KCiAgICAkc2VsZi0+d2VsZF9jdWRkbGVkX2Jsb2NrcygpIGlmICggJXskcmN1ZGRsZWRfYmxvY2tfdHlwZXN9ICk7CgogICAgaWYgKCAkck9wdHMtPnsnd2VsZC1uZXN0ZWQtY29udGFpbmVycyd9ICkgewoKICAgICAgICAkc2VsZi0+d2VsZF9uZXN0ZWRfY29udGFpbmVycygpOwoKICAgICAgICAkc2VsZi0+d2VsZF9uZXN0ZWRfcXVvdGVzKCk7CiAgICB9CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgQWxsIHdlbGRpbmcgaXMgZG9uZS4gRmluaXNoIHNldHRpbmcgdXAgd2VsZCBkYXRhIHN0cnVjdHVyZXMuCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIG15ICRyTEwgICAgICAgICAgICAgICAgICA9ICRzZWxmLT5bX3JMTF9dOwogICAgbXkgJHJLX3dlbGRfbGVmdCAgICAgICAgID0gJHNlbGYtPltfcktfd2VsZF9sZWZ0X107CiAgICBteSAkcktfd2VsZF9yaWdodCAgICAgICAgPSAkc2VsZi0+W19yS193ZWxkX3JpZ2h0X107CiAgICBteSAkcndlbGRfbGVuX3JpZ2h0X2F0X0sgPSAkc2VsZi0+W19yd2VsZF9sZW5fcmlnaHRfYXRfS19dOwoKICAgIG15IEBLX211bHRpX3dlbGQ7CiAgICBteSBAa2V5cyA9IGtleXMgJXskcktfd2VsZF9yaWdodH07CiAgICAkdG90YWxfd2VsZF9jb3VudCA9IEBrZXlzOwoKICAgICMgRmlyc3QgcGFzcyB0byBwcm9jZXNzIGJpbmFyeSB3ZWxkcy4KICAgICMgVGhpcyBsb29wIGlzIHByb2Nlc3NlZCBpbiB1bnNvcnRlZCBvcmRlciBmb3IgZWZmaWNpZW5jeS4KICAgIGZvcmVhY2ggbXkgJEtzdGFydCAoQGtleXMpIHsKICAgICAgICBteSAkS2VuZCA9ICRyS193ZWxkX3JpZ2h0LT57JEtzdGFydH07CgogICAgICAgICMgQW4gZXJyb3IgaGVyZSB3b3VsZCBiZSBkdWUgdG8gYW4gaW5jb3JyZWN0IGluaXRpYWxpemF0aW9uIGludHJvZHVjZWQKICAgICAgICAjIGluIG9uZSBvZiB0aGUgYWJvdmUgd2VsZCByb3V0aW5lcywgbGlrZSBzdWIgd2VsZF9uZXN0ZWQuCiAgICAgICAgaWYgKCAkS2VuZCA8PSAkS3N0YXJ0ICkgewogICAgICAgICAgICBGYXVsdCgiQmFkIHdlbGQgbGluazogS2VuZD0kS2VuZCA8PSBLc3RhcnQ9JEtzdGFydFxuIikKICAgICAgICAgICAgICBpZiAoREVWRUxfTU9ERSk7CiAgICAgICAgICAgIG5leHQ7CiAgICAgICAgfQoKICAgICAgICAjIFNldCB3ZWxkIHZhbHVlcyBmb3IgYWxsIHRva2VucyB0aGlzIHdlbGRlZCBwYWlyCiAgICAgICAgZm9yZWFjaCAoICRLc3RhcnQgKyAxIC4uICRLZW5kICkgewogICAgICAgICAgICAkcktfd2VsZF9sZWZ0LT57JF99ID0gJEtzdGFydDsKICAgICAgICB9CiAgICAgICAgZm9yZWFjaCBteSAkS3ggKCAkS3N0YXJ0IC4uICRLZW5kIC0gMSApIHsKICAgICAgICAgICAgJHJLX3dlbGRfcmlnaHQtPnskS3h9ID0gJEtlbmQ7CiAgICAgICAgICAgICRyd2VsZF9sZW5fcmlnaHRfYXRfSy0+eyRLeH0gPQogICAgICAgICAgICAgICRyTEwtPlskS2VuZF0tPltfQ1VNVUxBVElWRV9MRU5HVEhfXSAtCiAgICAgICAgICAgICAgJHJMTC0+WyRLeF0tPltfQ1VNVUxBVElWRV9MRU5HVEhfXTsKICAgICAgICB9CgogICAgICAgICMgUmVtZW1iZXIgdGhlIGxlZnRtb3N0IGluZGV4IG9mIHdlbGRzIHdoaWNoIGNvbnRpbnVlIHRvIHRoZSByaWdodAogICAgICAgIGlmICggZGVmaW5lZCggJHJLX3dlbGRfcmlnaHQtPnskS2VuZH0gKQogICAgICAgICAgICAmJiAhZGVmaW5lZCggJHJLX3dlbGRfbGVmdC0+eyRLc3RhcnR9ICkgKQogICAgICAgIHsKICAgICAgICAgICAgcHVzaCBAS19tdWx0aV93ZWxkLCAkS3N0YXJ0OwogICAgICAgIH0KICAgIH0KCiAgICAjIFNlY29uZCBwYXNzIHRvIHByb2Nlc3MgY2hhaW5zIG9mIHdlbGRzICh0aGVzZSBhcmUgcmFyZSkuCiAgICAjIFRoaXMgaGFzIHRvIGJlIHByb2Nlc3NlZCBpbiBzb3J0ZWQgb3JkZXIuCiAgICBpZiAoQEtfbXVsdGlfd2VsZCkgewogICAgICAgIG15ICRLZW5kID0gLTE7CiAgICAgICAgZm9yZWFjaCBteSAkS3N0YXJ0ICggc29ydCB7ICRhIDw9PiAkYiB9IEBLX211bHRpX3dlbGQgKSB7CgogICAgICAgICAgICAjIFNraXAgYW55IGludGVyaW9yIEsgd2hpY2ggd2FzIG9yaWdpbmFsbHkgbWlzc2luZyBhIGxlZnQgbGluawogICAgICAgICAgICBuZXh0IGlmICggJEtzdGFydCA8PSAkS2VuZCApOwoKICAgICAgICAgICAgIyBGaW5kIHRoZSBlbmQgb2YgdGhpcyBjaGFpbgogICAgICAgICAgICAkS2VuZCA9ICRyS193ZWxkX3JpZ2h0LT57JEtzdGFydH07CiAgICAgICAgICAgIG15ICRLbmV4dCA9ICRyS193ZWxkX3JpZ2h0LT57JEtlbmR9OwogICAgICAgICAgICB3aGlsZSAoIGRlZmluZWQoJEtuZXh0KSApIHsKICAgICAgICAgICAgICAgIGlmICggJEtuZXh0IDw9ICRLZW5kICkgewogICAgICAgICAgICAgICAgICAgICMjIHNob3VsZG4ndCBoYXBwZW46IEsgc2hvdWxkIGluY3JlYXNlIGZvciByaWdodCB3ZWxkCiAgICAgICAgICAgICAgICAgICAgREVWRUxfTU9ERSAmJiBGYXVsdCg8PEVPTSk7CkVycm9yOiBLbmV4dD0kS25leHQgPSByS193ZWxkX3JpZ2h0LT57JEtlbmR9IGlzIG5vdCBpbmNyZWFzaW5nCkVPTQogICAgICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkS2VuZCAgPSAkS25leHQ7CiAgICAgICAgICAgICAgICAkS25leHQgPSAkcktfd2VsZF9yaWdodC0+eyRLZW5kfTsKICAgICAgICAgICAgfSAjIyBlbmQgd2hpbGUgKCBkZWZpbmVkKCRLbmV4dCkgKQoKICAgICAgICAgICAgIyBTZXQgd2VsZCB2YWx1ZXMgdGhpcyBjaGFpbgogICAgICAgICAgICBmb3JlYWNoICggJEtzdGFydCArIDEgLi4gJEtlbmQgKSB7CiAgICAgICAgICAgICAgICAkcktfd2VsZF9sZWZ0LT57JF99ID0gJEtzdGFydDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3JlYWNoIG15ICRLeCAoICRLc3RhcnQgLi4gJEtlbmQgLSAxICkgewogICAgICAgICAgICAgICAgJHJLX3dlbGRfcmlnaHQtPnskS3h9ID0gJEtlbmQ7CiAgICAgICAgICAgICAgICAkcndlbGRfbGVuX3JpZ2h0X2F0X0stPnskS3h9ID0KICAgICAgICAgICAgICAgICAgJHJMTC0+WyRLZW5kXS0+W19DVU1VTEFUSVZFX0xFTkdUSF9dIC0KICAgICAgICAgICAgICAgICAgJHJMTC0+WyRLeF0tPltfQ1VNVUxBVElWRV9MRU5HVEhfXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiB3ZWxkX2NvbnRhaW5lcnMKCnN1YiB3ZWxkX2N1ZGRsZWRfYmxvY2tzIHsKCiAgICBteSAoJHNlbGYpID0gQF87CgogICAgIyBDYWxsZWQgb25jZSBwZXIgZmlsZSB0byBoYW5kbGUgY3VkZGxlZCBmb3JtYXR0aW5nCgogICAgbXkgJHJLX3dlbGRfbGVmdCAgICAgICAgID0gJHNlbGYtPltfcktfd2VsZF9sZWZ0X107CiAgICBteSAkcktfd2VsZF9yaWdodCAgICAgICAgPSAkc2VsZi0+W19yS193ZWxkX3JpZ2h0X107CiAgICBteSAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8gPSAkc2VsZi0+W19yYmxvY2tfdHlwZV9vZl9zZXFub19dOwoKICAgICMgVGhpcyByb3V0aW5lIGltcGxlbWVudHMgdGhlIC1jYiBmbGFnIGJ5IGZpbmRpbmcgdGhlIGFwcHJvcHJpYXRlCiAgICAjIGNsb3NpbmcgYW5kIG9wZW5pbmcgYmxvY2sgYnJhY2VzIGFuZCB3ZWxkaW5nIHRoZW0gdG9nZXRoZXIuCiAgICByZXR1cm4gdW5sZXNzICggJXskcmN1ZGRsZWRfYmxvY2tfdHlwZXN9ICk7CgogICAgbXkgJHJMTCA9ICRzZWxmLT5bX3JMTF9dOwogICAgcmV0dXJuIHVubGVzcyAoIGRlZmluZWQoJHJMTCkgJiYgQHskckxMfSApOwoKICAgIG15ICRyYnJlYWtfY29udGFpbmVyICAgICAgICAgID0gJHNlbGYtPltfcmJyZWFrX2NvbnRhaW5lcl9dOwogICAgbXkgJHJpc19icm9rZW5fY29udGFpbmVyICAgICAgPSAkc2VsZi0+W19yaXNfYnJva2VuX2NvbnRhaW5lcl9dOwogICAgbXkgJHJpc19jdWRkbGVkX2Nsb3NpbmdfYnJhY2UgPSAkc2VsZi0+W19yaXNfY3VkZGxlZF9jbG9zaW5nX2JyYWNlX107CiAgICBteSAkS19jbG9zaW5nX2NvbnRhaW5lciAgICAgICA9ICRzZWxmLT5bX0tfY2xvc2luZ19jb250YWluZXJfXTsKCiAgICAjIEEgc3RhY2sgdG8gcmVtZW1iZXIgb3BlbiBjaGFpbnMgYXQgYWxsIGxldmVsczogVGhpcyBpcyBhIGhhc2ggcmF0aGVyIHRoYW4KICAgICMgYW4gYXJyYXkgZm9yIHNhZmV0eSBiZWNhdXNlIG5lZ2F0aXZlIGxldmVscyBjYW4gb2NjdXIgaW4gZmlsZXMgd2l0aAogICAgIyBlcnJvcnMuICBUaGlzIGFsbG93cyB1cyB0byBrZWVwIHByb2Nlc3Npbmcgd2l0aCBuZWdhdGl2ZSBsZXZlbHMuCiAgICAjICRpbl9jaGFpbnskbGV2ZWx9ID0gWyRjaGFpbl90eXBlLCAkdHlwZV9zZXF1ZW5jZV07CiAgICBteSAlaW5fY2hhaW47CiAgICBteSAkQ0JPID0gJHJPcHRzLT57J2N1ZGRsZWQtYnJlYWstb3B0aW9uJ307CgogICAgIyBsb29wIG92ZXIgc3RydWN0dXJlIGl0ZW1zIHRvIGZpbmQgY3VkZGxlZCBwYWlycwogICAgbXkgJGxldmVsID0gMDsKICAgIGZvcmVhY2ggbXkgJEtLICggQHsgJHNlbGYtPltfcktfc2VxdWVuY2VkX3Rva2VuX2xpc3RfXSB9ICkgewogICAgICAgIG15ICRydG9rZW5fdmFycyAgID0gJHJMTC0+WyRLS107CiAgICAgICAgbXkgJHR5cGVfc2VxdWVuY2UgPSAkcnRva2VuX3ZhcnMtPltfVFlQRV9TRVFVRU5DRV9dOwogICAgICAgIGlmICggISR0eXBlX3NlcXVlbmNlICkgewogICAgICAgICAgICBuZXh0IGlmICggJEtLID09IDAgKTsgICAgIyBmaXJzdCB0b2tlbiBpbiBmaWxlIG1heSBub3QgYmUgY29udGFpbmVyCgogICAgICAgICAgICAjIEEgZmF1bHQgaGVyZSBpbXBsaWVzIHRoYXQgYW4gZXJyb3Igd2FzIG1hZGUgaW4gdGhlIGxpdHRsZSBsb29wIGF0CiAgICAgICAgICAgICMgdGhlIGJvdHRvbSBvZiBzdWIgJ3Jlc3BhY2VfdG9rZW5zJyB3aGljaCBzZXQgdGhlIHZhbHVlcyBvZgogICAgICAgICAgICAjIF9yS19zZXF1ZW5jZWRfdG9rZW5fbGlzdF8uICBPciBhbiBlcnJvciBoYXMgYmVlbiBpbnRyb2R1Y2VkIGluCiAgICAgICAgICAgICMgdGhlIGxvb3AgY29udHJvbCBsaW5lcyBhYm92ZS4KICAgICAgICAgICAgRmF1bHQoInNlcXVlbmNlID0gJHR5cGVfc2VxdWVuY2Ugbm90IGRlZmluZWQgYXQgSz0kS0siKQogICAgICAgICAgICAgIGlmIChERVZFTF9NT0RFKTsKICAgICAgICAgICAgbmV4dDsKICAgICAgICB9CgogICAgICAgICMgTk9URTogd2UgbXVzdCB1c2UgdGhlIG9yaWdpbmFsIGxldmVscyBoZXJlLiBUaGV5IGNhbiBnZXQgY2hhbmdlZAogICAgICAgICMgYnkgc3ViICd3ZWxkX25lc3RlZF9jb250YWluZXJzJywgc28gdGhpcyByb3V0aW5lIG11c3QgYmUgY2FsbGVkCiAgICAgICAgIyBiZWZvcmUgc3ViICd3ZWxkX25lc3RlZF9jb250YWluZXJzJy4KICAgICAgICBteSAkbGFzdF9sZXZlbCA9ICRsZXZlbDsKICAgICAgICAkbGV2ZWwgPSAkcnRva2VuX3ZhcnMtPltfTEVWRUxfXTsKCiAgICAgICAgaWYgICAgKCAkbGV2ZWwgPCAkbGFzdF9sZXZlbCApIHsgJGluX2NoYWlueyRsYXN0X2xldmVsfSA9IHVuZGVmIH0KICAgICAgICBlbHNpZiAoICRsZXZlbCA+ICRsYXN0X2xldmVsICkgeyAkaW5fY2hhaW57JGxldmVsfSAgICAgID0gdW5kZWYgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAjIGxldmVsIHVuY2hhbmdlZAogICAgICAgIH0KCiAgICAgICAgIyBXZSBhcmUgb25seSBsb29raW5nIGF0IGNvZGUgYmxvY2tzCiAgICAgICAgbXkgJHRva2VuID0gJHJ0b2tlbl92YXJzLT5bX1RPS0VOX107CiAgICAgICAgbXkgJHR5cGUgID0gJHJ0b2tlbl92YXJzLT5bX1RZUEVfXTsKICAgICAgICBuZXh0IHVubGVzcyAoICR0eXBlIGVxICR0b2tlbiApOwoKICAgICAgICBpZiAoICR0b2tlbiBlcSAneycgKSB7CgogICAgICAgICAgICBteSAkYmxvY2tfdHlwZSA9ICRyYmxvY2tfdHlwZV9vZl9zZXFuby0+eyR0eXBlX3NlcXVlbmNlfTsKICAgICAgICAgICAgaWYgKCAhJGJsb2NrX3R5cGUgKSB7CgogICAgICAgICAgICAgICAgIyBwYXRjaCBmb3IgdW5yZWNvZ25pemVkIGJsb2NrIHR5cGVzIHdoaWNoIG1heSBub3QgYmUgbGFiZWxlZAogICAgICAgICAgICAgICAgbXkgJEtwID0gJHNlbGYtPktfcHJldmlvdXNfY29kZSgkS0spOwogICAgICAgICAgICAgICAgbmV4dCB1bmxlc3MgJEtwOwogICAgICAgICAgICAgICAgJGJsb2NrX3R5cGUgPSAkckxMLT5bJEtwXS0+W19UT0tFTl9dOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggJGluX2NoYWlueyRsZXZlbH0gKSB7CgogICAgICAgICAgICAgICAgIyB3ZSBhcmUgaW4gYSBjaGFpbiBhbmQgYXJlIGF0IGFuIG9wZW5pbmcgYmxvY2sgYnJhY2UuCiAgICAgICAgICAgICAgICAjIFNlZSBpZiB3ZSBhcmUgd2VsZGluZyB0aGlzIG9wZW5pbmcgYnJhY2Ugd2l0aCB0aGUgcHJldmlvdXMKICAgICAgICAgICAgICAgICMgYmxvY2sgYnJhY2UuICBHZXQgdGhlaXIgaWRlbnRpZmljYXRpb24gbnVtYmVyczoKICAgICAgICAgICAgICAgIG15ICRjbG9zaW5nX3NlcW5vID0gJGluX2NoYWlueyRsZXZlbH0tPlsxXTsKICAgICAgICAgICAgICAgIG15ICRvcGVuaW5nX3NlcW5vID0gJHR5cGVfc2VxdWVuY2U7CgogICAgICAgICAgICAgICAgIyBUaGUgcHJlY2VkaW5nIGJsb2NrIG11c3QgYmUgb24gbXVsdGlwbGUgbGluZXMgc28gdGhhdCBpdHMKICAgICAgICAgICAgICAgICMgY2xvc2luZyBicmFjZSB3aWxsIHN0YXJ0IGEgbmV3IGxpbmUuCiAgICAgICAgICAgICAgICBpZiAoICAgISRyaXNfYnJva2VuX2NvbnRhaW5lci0+eyRjbG9zaW5nX3NlcW5vfQogICAgICAgICAgICAgICAgICAgICYmICEkcmJyZWFrX2NvbnRhaW5lci0+eyRjbG9zaW5nX3NlcW5vfSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCB1bmxlc3MgKCAkQ0JPID09IDIgKTsKICAgICAgICAgICAgICAgICAgICAkcmJyZWFrX2NvbnRhaW5lci0+eyRjbG9zaW5nX3NlcW5vfSA9IDE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBXZSBjYW4gd2VsZCB0aGUgY2xvc2luZyBicmFjZSB0byBpdHMgZm9sbG93aW5nIHdvcmQgLi4KICAgICAgICAgICAgICAgIG15ICRLbyA9ICRLX2Nsb3NpbmdfY29udGFpbmVyLT57JGNsb3Npbmdfc2Vxbm99OwogICAgICAgICAgICAgICAgbXkgJEtvbjsKICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCgkS28pICkgewogICAgICAgICAgICAgICAgICAgICRLb24gPSAkc2VsZi0+S19uZXh0X25vbmJsYW5rKCRLbyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyAuLnVubGVzcyBpdCBpcyBhIGNvbW1lbnQKICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCgkS29uKSAmJiAkckxMLT5bJEtvbl0tPltfVFlQRV9dIG5lICcjJyApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBPSyB0byB3ZWxkIHRoZXNlIHR3byB0b2tlbnMuLi4KICAgICAgICAgICAgICAgICAgICAkcktfd2VsZF9yaWdodC0+eyRLb30gPSAkS29uOwogICAgICAgICAgICAgICAgICAgICRyS193ZWxkX2xlZnQtPnskS29ufSA9ICRLbzsKCiAgICAgICAgICAgICAgICAgICAgIyBTZXQgZmxhZyB0aGF0IHdlIHdhbnQgdG8gYnJlYWsgdGhlIG5leHQgY29udGFpbmVyCiAgICAgICAgICAgICAgICAgICAgIyBzbyB0aGF0IHRoZSBjdWRkbGVkIGxpbmUgaXMgYmFsYW5jZWQuCiAgICAgICAgICAgICAgICAgICAgJHJicmVha19jb250YWluZXItPnskb3BlbmluZ19zZXFub30gPSAxCiAgICAgICAgICAgICAgICAgICAgICBpZiAoJENCTyk7CgogICAgICAgICAgICAgICAgICAgICMgUmVtZW1iZXIgd2hpY2ggYnJhY2VzIGFyZSBjdWRkbGVkLgogICAgICAgICAgICAgICAgICAgICMgVGhlIGNsb3NpbmcgYnJhY2UgaXMgdXNlZCB0byBzZXQgYWRqdXN0ZWQgaW5kZW50YXRpb25zLgogICAgICAgICAgICAgICAgICAgICMgVGhlIG9wZW5pbmcgYnJhY2UgaXMgbm90IHlldCB1c2VkIGJ1dCBtaWdodCBldmVudHVhbGx5CiAgICAgICAgICAgICAgICAgICAgIyBiZSBuZWVkZWQgaW4gc2V0dGluZyBhZGp1c3RlZCBpbmRlbnRhdGlvbi4KICAgICAgICAgICAgICAgICAgICAkcmlzX2N1ZGRsZWRfY2xvc2luZ19icmFjZS0+eyRjbG9zaW5nX3NlcW5vfSA9IDE7CgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIFdlIGFyZSBub3QgaW4gYSBjaGFpbi4gU3RhcnQgYSBuZXcgY2hhaW4gaWYgd2Ugc2VlIHRoZQogICAgICAgICAgICAgICAgIyBzdGFydGluZyBibG9jayB0eXBlLgogICAgICAgICAgICAgICAgaWYgKCAkcmN1ZGRsZWRfYmxvY2tfdHlwZXMtPnskYmxvY2tfdHlwZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgJGluX2NoYWlueyRsZXZlbH0gPSBbICRibG9ja190eXBlLCAkdHlwZV9zZXF1ZW5jZSBdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGJsb2NrX3R5cGUgPSAnKic7CiAgICAgICAgICAgICAgICAgICAgJGluX2NoYWlueyRsZXZlbH0gPSBbICRibG9ja190eXBlLCAkdHlwZV9zZXF1ZW5jZSBdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJHRva2VuIGVxICd9JyApIHsKICAgICAgICAgICAgaWYgKCAkaW5fY2hhaW57JGxldmVsfSApIHsKCiAgICAgICAgICAgICAgICAjIFdlIGFyZSBpbiBhIGNoYWluIGF0IGEgY2xvc2luZyBicmFjZS4gIFNlZSBpZiB0aGlzIGNoYWluCiAgICAgICAgICAgICAgICAjIGNvbnRpbnVlcy4uCiAgICAgICAgICAgICAgICBteSAkS25uID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLSyk7CiAgICAgICAgICAgICAgICBuZXh0IHVubGVzcyAkS25uOwoKICAgICAgICAgICAgICAgIG15ICRjaGFpbl90eXBlICAgICAgICAgID0gJGluX2NoYWlueyRsZXZlbH0tPlswXTsKICAgICAgICAgICAgICAgIG15ICRuZXh0X25vbmJsYW5rX3Rva2VuID0gJHJMTC0+WyRLbm5dLT5bX1RPS0VOX107CiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgJHJjdWRkbGVkX2Jsb2NrX3R5cGVzLT57JGNoYWluX3R5cGV9LT57JG5leHRfbm9uYmxhbmtfdG9rZW59CiAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQgd2UgZG8gbm90IHdlbGQgeWV0IGJlY2F1c2Ugd2UgbXVzdCB3YWl0IHVudGlsCiAgICAgICAgICAgICAgICAgICAgIyB3ZSB3ZSBhcmUgc3VyZSB0aGF0IGFuIG9wZW5pbmcgYnJhY2UgZm9yIHRoaXMgZm9sbG93cy4KICAgICAgICAgICAgICAgICAgICAkaW5fY2hhaW57JGxldmVsfS0+WzFdID0gJHR5cGVfc2VxdWVuY2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsgJGluX2NoYWlueyRsZXZlbH0gPSB1bmRlZiB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICMgbm90IGEgY3VybHkgYnJhY2UKICAgICAgICB9CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiB3ZWxkX2N1ZGRsZWRfYmxvY2tzCgpzdWIgZmluZF9uZXN0ZWRfcGFpcnMgewoKICAgIG15ICgkc2VsZikgPSBAXzsKCiAgICAjIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgb25jZSBwZXIgZmlsZSB0byBkbyBwcmVsaW1pbmFyeSB3b3JrIG5lZWRlZCBmb3IKICAgICMgdGhlIC0td2VsZC1uZXN0ZWQgb3B0aW9uLiAgVGhpcyBpbmZvcm1hdGlvbiBpcyBhbHNvIG5lZWRlZCBmb3IgYWRkaW5nCiAgICAjIHNlbWljb2xvbnMuCgogICAgIyBSZXR1cm5zOgogICAgIyAgIFxAbmVzdGVkX3BhaXJzID0gcmVmIHRvIGEgbGlzdCBpbiB3aGljaCBlYWNoIGl0ZW0gaXMgYSByZWYgdG8KICAgICMgICB0byB0aGUgc2VxdWVuY2UgbnVtYmVycyBvZiB0d28gbmVzdGVkIGNvbnRhaW5lcnM6CiAgICAjICAgICAgICBbICRzZXFub19pbm5lciwgJHNlcW5vX291dGVyIF0KCiAgICBteSAkckxMID0gJHNlbGYtPltfckxMX107CiAgICByZXR1cm4gdW5sZXNzICggZGVmaW5lZCgkckxMKSAmJiBAeyRyTEx9ICk7CiAgICBteSAkTnVtID0gQHskckxMfTsKCiAgICBteSAkS19vcGVuaW5nX2NvbnRhaW5lciAgPSAkc2VsZi0+W19LX29wZW5pbmdfY29udGFpbmVyX107CiAgICBteSAkS19jbG9zaW5nX2NvbnRhaW5lciAgPSAkc2VsZi0+W19LX2Nsb3NpbmdfY29udGFpbmVyX107CiAgICBteSAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8gPSAkc2VsZi0+W19yYmxvY2tfdHlwZV9vZl9zZXFub19dOwogICAgbXkgJHJLX25leHRfc2Vxbm9fYnlfSyAgID0gJHNlbGYtPltfcktfbmV4dF9zZXFub19ieV9LX107CgogICAgIyBXZSBkZWZpbmUgYW4gYXJyYXkgb2YgcGFpcnMgb2YgbmVzdGVkIGNvbnRhaW5lcnMKICAgIG15IEBuZXN0ZWRfcGFpcnM7CgogICAgIyBOYW1lcyBvZiBjYWxsaW5nIHJvdXRpbmVzIGNhbiBlaXRoZXIgYmUgbWFya2VkIGFzICdpJyBvciAndycsCiAgICAjIGFuZCB0aGV5IG1heSBpbnZva2UgYSBzdWIgY2FsbCB3aXRoIGFuICctPicuIFdlIHdpbGwgY29uc2lkZXIKICAgICMgYW55IGNvbnNlY3V0aXZlIHN0cmluZyBvZiBzdWNoIHR5cGVzIGFzIGEgc2luZ2xlIHVuaXQgd2hlbiBtYWtpbmcKICAgICMgd2VsZCBkZWNpc2lvbnMuICBXZSBhbHNvIGFsbG93IGEgbGVhZGluZyAhCiAgICBteSAkaXNfbmFtZV90eXBlID0gewogICAgICAgICdpJyAgPT4gMSwKICAgICAgICAndycgID0+IDEsCiAgICAgICAgJ1UnICA9PiAxLAogICAgICAgICctPicgPT4gMSwKICAgICAgICAnIScgID0+IDEsCiAgICB9OwoKICAgICMgTG9vcCBvdmVyIGFsbCBjbG9zaW5nIGNvbnRhaW5lciB0b2tlbnMKICAgIGZvcmVhY2ggbXkgJGlubmVyX3NlcW5vICgga2V5cyAleyRLX2Nsb3NpbmdfY29udGFpbmVyfSApIHsKICAgICAgICBteSAkS19pbm5lcl9jbG9zaW5nID0gJEtfY2xvc2luZ19jb250YWluZXItPnskaW5uZXJfc2Vxbm99OwoKICAgICAgICAjIFNlZSBpZiBpdCBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhbm90aGVyLCBvdXRlciBjbG9zaW5nIHRva2VuCiAgICAgICAgbXkgJEtfb3V0ZXJfY2xvc2luZyA9ICRLX2lubmVyX2Nsb3NpbmcgKyAxOwogICAgICAgICRLX291dGVyX2Nsb3NpbmcgKz0gMQogICAgICAgICAgaWYgKCAkS19vdXRlcl9jbG9zaW5nIDwgJE51bQogICAgICAgICAgICAmJiAkckxMLT5bJEtfb3V0ZXJfY2xvc2luZ10tPltfVFlQRV9dIGVxICdiJyApOwoKICAgICAgICBuZXh0IGlmICggJEtfb3V0ZXJfY2xvc2luZyA+PSAkTnVtICk7CiAgICAgICAgbXkgJG91dGVyX3NlcW5vID0gJHJMTC0+WyRLX291dGVyX2Nsb3NpbmddLT5bX1RZUEVfU0VRVUVOQ0VfXTsKICAgICAgICBuZXh0IGlmICggISRvdXRlcl9zZXFubyApOwogICAgICAgIG15ICR0b2tlbl9vdXRlcl9jbG9zaW5nID0gJHJMTC0+WyRLX291dGVyX2Nsb3NpbmddLT5bX1RPS0VOX107CiAgICAgICAgbmV4dCBpZiAoICEkaXNfY2xvc2luZ190b2tlbnskdG9rZW5fb3V0ZXJfY2xvc2luZ30gKTsKCiAgICAgICAgIyBTaW1wbGUgZmlsdGVyOiBObyBjb21tYXMgb3Igc2VtaWNvbG9ucyBpbiB0aGUgb3V0ZXIgY29udGFpbmVyCiAgICAgICAgbXkgJHJ0eXBlX2NvdW50ID0gJHNlbGYtPltfcnR5cGVfY291bnRfYnlfc2Vxbm9fXS0+eyRvdXRlcl9zZXFub307CiAgICAgICAgaWYgKCRydHlwZV9jb3VudCkgewogICAgICAgICAgICBuZXh0IGlmICggJHJ0eXBlX2NvdW50LT57JywnfSB8fCAkcnR5cGVfY291bnQtPnsnOyd9ICk7CiAgICAgICAgfQoKICAgICAgICAjIE5vdyB3ZSBoYXZlIHRvIGNoZWNrIHRoZSBvcGVuaW5nIHRva2Vucy4KICAgICAgICBteSAkS19vdXRlcl9vcGVuaW5nID0gJEtfb3BlbmluZ19jb250YWluZXItPnskb3V0ZXJfc2Vxbm99OwogICAgICAgIG15ICRLX2lubmVyX29wZW5pbmcgPSAkS19vcGVuaW5nX2NvbnRhaW5lci0+eyRpbm5lcl9zZXFub307CiAgICAgICAgbmV4dCBpZiAoICFkZWZpbmVkKCRLX291dGVyX29wZW5pbmcpICk7CiAgICAgICAgbmV4dCBpZiAoICFkZWZpbmVkKCRLX2lubmVyX29wZW5pbmcpICk7CgogICAgICAgIG15ICRpbm5lcl9ibG9ja3R5cGUgPSAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8tPnskaW5uZXJfc2Vxbm99OwogICAgICAgIG15ICRvdXRlcl9ibG9ja3R5cGUgPSAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8tPnskb3V0ZXJfc2Vxbm99OwoKICAgICAgICAjIFZlcmlmeSB0aGF0IHRoZSBpbm5lciBvcGVuaW5nIHRva2VuIGlzIHRoZSBuZXh0IGNvbnRhaW5lciBhZnRlciB0aGUKICAgICAgICAjIG91dGVyIG9wZW5pbmcgdG9rZW4uCiAgICAgICAgbXkgJEtfaW9fY2hlY2sgPSAkcktfbmV4dF9zZXFub19ieV9LLT5bJEtfb3V0ZXJfb3BlbmluZ107CiAgICAgICAgbmV4dCB1bmxlc3MgZGVmaW5lZCgkS19pb19jaGVjayk7CiAgICAgICAgaWYgKCAkS19pb19jaGVjayAhPSAkS19pbm5lcl9vcGVuaW5nICkgewoKICAgICAgICAgICAgIyBUaGUgaW5uZXIgb3BlbmluZyBjb250YWluZXIgZG9lcyBub3QgaW1tZWRpYXRlbHkgZm9sbG93IHRoZSBvdXRlcgogICAgICAgICAgICAjIG9wZW5pbmcgY29udGFpbmVyLCBidXQgd2UgbWF5IHN0aWxsIGFsbG93IGEgd2VsZCBpZiB0aGV5IGFyZQogICAgICAgICAgICAjIHNlcGFyYXRlZCBieSBhIHN1YiBzaWduYXR1cmUuICBGb3IgZXhhbXBsZSwgd2UgbWF5IGhhdmUgc29tZXRoaW5nCiAgICAgICAgICAgICMgbGlrZSB0aGlzLCB3aGVyZSAkS19pb19jaGVjayBtYXkgYmUgYXQgdGhlIGZpcnN0ICd4JyBpbnN0ZWFkIG9mCiAgICAgICAgICAgICMgJ2lvJy4gIFNvIHdlIG5lZWQgdG8gaG9wIG92ZXIgdGhlIHNpZ25hdHVyZSBhbmQgc2VlIGlmIHdlIGFycml2ZQogICAgICAgICAgICAjIGF0ICdpbycuCgogICAgICAgICAgICAjICAgICAgICAgICAgb28gICAgICAgICAgICAgICBpbwogICAgICAgICAgICAjICAgICAgICAgICAgIHwgICAgIHggICAgICAgeCB8CiAgICAgICAgICAgICMgICAkb2JqLT50aGVuKCBzdWIgKCAkY29kZSApIHsKICAgICAgICAgICAgIyAgICAgICAuLi4KICAgICAgICAgICAgIyAgICAgICByZXR1cm4gJGMtPnJlbmRlcih0ZXh0ID0+ICcnLCBzdGF0dXMgPT4gJGNvZGUpOwogICAgICAgICAgICAjICAgfSApOwogICAgICAgICAgICAjICAgfCB8CiAgICAgICAgICAgICMgIGljIG9jCgogICAgICAgICAgICBuZXh0IGlmICggISRpbm5lcl9ibG9ja3R5cGUgfHwgJGlubmVyX2Jsb2NrdHlwZSBuZSAnc3ViJyApOwogICAgICAgICAgICBuZXh0IGlmICRyTEwtPlskS19pb19jaGVja10tPltfVE9LRU5fXSBuZSAnKCc7CiAgICAgICAgICAgIG15ICRzZXFub19zaWduYXR1cmUgPSAkckxMLT5bJEtfaW9fY2hlY2tdLT5bX1RZUEVfU0VRVUVOQ0VfXTsKICAgICAgICAgICAgbmV4dCB1bmxlc3MgZGVmaW5lZCgkc2Vxbm9fc2lnbmF0dXJlKTsKICAgICAgICAgICAgbXkgJEtfc2lnbmF0dXJlX2Nsb3NpbmcgPSAkS19jbG9zaW5nX2NvbnRhaW5lci0+eyRzZXFub19zaWduYXR1cmV9OwogICAgICAgICAgICBuZXh0IHVubGVzcyBkZWZpbmVkKCRLX3NpZ25hdHVyZV9jbG9zaW5nKTsKICAgICAgICAgICAgbXkgJEtfdGVzdCA9ICRyS19uZXh0X3NlcW5vX2J5X0stPlskS19zaWduYXR1cmVfY2xvc2luZ107CiAgICAgICAgICAgIG5leHQKICAgICAgICAgICAgICB1bmxlc3MgKCBkZWZpbmVkKCRLX3Rlc3QpICYmICRLX3Rlc3QgPT0gJEtfaW5uZXJfb3BlbmluZyApOwoKICAgICAgICAgICAgIyBPSywgd2UgaGF2ZSBhcnJpdmVkIGF0ICdpbycgaW4gdGhlIGFib3ZlIGRpYWdyYW0uICBXZSBzaG91bGQgcHV0CiAgICAgICAgICAgICMgYSBsaW1pdCBvbiB0aGUgbGVuZ3RoIG9yIGNvbXBsZXhpdHkgb2YgdGhlIHNpZ25hdHVyZSBoZXJlLiAgVGhlcmUKICAgICAgICAgICAgIyBpcyBubyBwZXJmZWN0IHdheSB0byBkbyB0aGlzLCBvbmUgd2F5IGlzIHRvIHB1dCBhIGxpbWl0IG9uIHRva2VuCiAgICAgICAgICAgICMgY291bnQuICBGb3IgY29uc2lzdGVuY3kgd2l0aCBvbGRlciB2ZXJzaW9ucywgd2Ugc2hvdWxkIGFsbG93IGEKICAgICAgICAgICAgIyBzaWduYXR1cmUgd2l0aCBhIHNpbmdsZSB2YXJpYWJsZSB0byB3ZWxkLCBidXQgbm90IHdpdGgKICAgICAgICAgICAgIyBtdWx0aXBsZSB2YXJpYWJsZXMuICBBIHNpbmdsZSB2YXJpYWJsZSBhcyBpbiAnc3ViICgkY29kZSkgeycgY2FuCiAgICAgICAgICAgICMgaGF2ZSBhICRLZGlmZiBvZiAyIHRvIDQsIGRlcGVuZGluZyBvbiBzcGFjaW5nLgoKICAgICAgICAgICAgIyBCdXQgdHdvIHZhcmlhYmxlcyBsaWtlICdzdWIgKCR2MSwkdjIpIHsnIGNhbiBoYXZlIGEgZGlmZiBvZiA0IHRvCiAgICAgICAgICAgICMgNywgZGVwZW5kaW5nIG9uIHNwYWNpbmcuIFNvIHRvIGtlZXAgZm9ybWF0dGluZyBjb25zaXN0ZW50IHdpdGgKICAgICAgICAgICAgIyBwcmV2aW91cyB2ZXJzaW9ucywgd2Ugd2lsbCBhbHNvIGF2b2lkIHdlbGRpbmcgaWYgdGhlcmUgaXMgYSBjb21tYQogICAgICAgICAgICAjIGluIHRoZSBzaWduYXR1cmUuCgogICAgICAgICAgICBteSAkS2RpZmYgPSAkS19zaWduYXR1cmVfY2xvc2luZyAtICRLX2lvX2NoZWNrOwogICAgICAgICAgICBuZXh0IGlmICggJEtkaWZmID4gNCApOwoKICAgICAgICAgICAgIyBiYWNrdXAgY29tbWEgY291bnQgdGVzdDsgYnV0IHdlIGNhbm5vdCBnZXQgaGVyZSB3aXRoIEtkaWZmPD00CiAgICAgICAgICAgIG15ICRydGMgPSAkc2VsZi0+W19ydHlwZV9jb3VudF9ieV9zZXFub19dLT57JHNlcW5vX3NpZ25hdHVyZX07CiAgICAgICAgICAgIG5leHQgaWYgKCAkcnRjICYmICRydGMtPnsnLCd9ICk7CiAgICAgICAgfQoKICAgICAgICAjIFllcyAuLiB0aGlzIGlzIGEgcG9zc2libGUgbmVzdGluZyBwYWlyLgogICAgICAgICMgVGhleSBjYW4gYmUgc2VwYXJhdGVkIGJ5IGEgc21hbGwgYW1vdW50LgogICAgICAgIG15ICRLX2RpZmYgPSAkS19pbm5lcl9vcGVuaW5nIC0gJEtfb3V0ZXJfb3BlbmluZzsKCiAgICAgICAgIyBDb3VudCB0aGUgbnVtYmVyIG9mIG5vbmJsYW5rIGNoYXJhY3RlcnMgc2VwYXJhdGluZyB0aGVtLgogICAgICAgICMgTm90ZTogdGhlICRub25ibGFua19jb3VudCBpbmNsdWRlcyB0aGUgaW5uZXIgb3BlbmluZyBjb250YWluZXIKICAgICAgICAjIGJ1dCBub3QgdGhlIG91dGVyIG9wZW5pbmcgY29udGFpbmVyLCBzbyBpdCB3aWxsIGJlID49IDEuCiAgICAgICAgaWYgKCAkS19kaWZmIDwgMCApIHsKCiAgICAgICAgICAgICMgU2hvdWxkbid0IGhhcHBlbgogICAgICAgICAgICBERVZFTF9NT0RFCiAgICAgICAgICAgICAgJiYgRmF1bHQoCiJ1bmV4cGVjdGVkIG5lZ2F0aXZlIGluZGV4IGRpZmY9JEtfZGlmZiA9IEtpby1Lb28gPSRLX2lubmVyX29wZW5pbmcgLSAkS19vdXRlcl9vcGVuaW5nIgogICAgICAgICAgICAgICk7CiAgICAgICAgICAgIG5leHQ7CiAgICAgICAgfQogICAgICAgIG15ICRub25ibGFua19jb3VudCA9IDA7CiAgICAgICAgbXkgJHR5cGU7CiAgICAgICAgbXkgJGlzX25hbWU7CgogICAgICAgICMgSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgbG9uZyBpZGVudGlmaWVyIGNoYWluIHdoaWNoIGNvdW50cyBhcyBhCiAgICAgICAgIyBzaW5nbGUgbm9uYmxhbmsgaGVyZSAodGhpcyBzcGFucyBhYm91dCAxMCBLIGluZGV4ZXMpOgogICAgICAgICMgICAgIGlmICggIUJvdWNoZXJvdDo6U2V0T2ZDb25uZWN0aW9ucy0+bmV3LT5oYW5kbGVyLT5leGVjdXRlKAogICAgICAgICMgICAgICAgIF4tLUtfb19vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXi0tS19pX28KICAgICAgICAjICAgICAgIEBhcnJheSkgKQogICAgICAgIG15ICRLbl9maXJzdCA9ICRLX291dGVyX29wZW5pbmc7CiAgICAgICAgbXkgJEtuX2xhc3Rfbm9uYmxhbms7CiAgICAgICAgbXkgJHNhd19jb21tZW50OwoKICAgICAgICBmb3JlYWNoIG15ICRLbiAoICRLX291dGVyX29wZW5pbmcgKyAxIC4uICRLX2lubmVyX29wZW5pbmcgKSB7CiAgICAgICAgICAgIG5leHQgaWYgKCAkckxMLT5bJEtuXS0+W19UWVBFX10gZXEgJ2InICk7CiAgICAgICAgICAgIGlmICggISRub25ibGFua19jb3VudCApICAgICAgICB7ICRLbl9maXJzdCA9ICRLbiB9CiAgICAgICAgICAgIGlmICggJEtuIGVxICRLX2lubmVyX29wZW5pbmcgKSB7ICRub25ibGFua19jb3VudCsrOyBsYXN0OyB9CiAgICAgICAgICAgICRLbl9sYXN0X25vbmJsYW5rID0gJEtuOwoKICAgICAgICAgICAgIyBza2lwIGNoYWluIG9mIGlkZW50aWZpZXIgdG9rZW5zCiAgICAgICAgICAgIG15ICRsYXN0X3R5cGUgICAgPSAkdHlwZTsKICAgICAgICAgICAgbXkgJGxhc3RfaXNfbmFtZSA9ICRpc19uYW1lOwogICAgICAgICAgICAkdHlwZSA9ICRyTEwtPlskS25dLT5bX1RZUEVfXTsKICAgICAgICAgICAgaWYgKCAkdHlwZSBlcSAnIycgKSB7ICRzYXdfY29tbWVudCA9IDE7IGxhc3QgfQogICAgICAgICAgICAkaXNfbmFtZSA9ICRpc19uYW1lX3R5cGUtPnskdHlwZX07CiAgICAgICAgICAgIG5leHQgaWYgKCAkaXNfbmFtZSAmJiAkbGFzdF9pc19uYW1lICk7CgogICAgICAgICAgICAjIGRvIG5vdCBjb3VudCBhIHBvc3NpYmxlIGxlYWRpbmcgLSBvZiBiYXJld29yZCBoYXNoIGtleQogICAgICAgICAgICBuZXh0IGlmICggJHR5cGUgZXEgJ20nICYmICEkbGFzdF90eXBlICk7CgogICAgICAgICAgICAkbm9uYmxhbmtfY291bnQrKzsKICAgICAgICAgICAgbGFzdCBpZiAoICRub25ibGFua19jb3VudCA+IDIgKTsKICAgICAgICB9CgogICAgICAgICMgRG8gbm90IHdlbGQgYWNyb3NzIGEgY29tbWVudCAuLiBmaXggZm9yIGMwNTguCiAgICAgICAgbmV4dCBpZiAoJHNhd19jb21tZW50KTsKCiAgICAgICAgIyBQYXRjaCBmb3IgYjExMDQ6IGRvIG5vdCB3ZWxkIHRvIGEgcGFyZW4gcHJlY2VkZWQgYnkgc29ydC9tYXAvZ3JlcAogICAgICAgICMgYmVjYXVzZSB0aGUgc3BlY2lhbCBsaW5lIGJyZWFrIHJ1bGVzIG1heSBjYXVzZSBhIGJsaW5raW5nIHN0YXRlCiAgICAgICAgaWYgKCAgIGRlZmluZWQoJEtuX2xhc3Rfbm9uYmxhbmspCiAgICAgICAgICAgICYmICRyTEwtPlskS19pbm5lcl9vcGVuaW5nXS0+W19UT0tFTl9dIGVxICcoJwogICAgICAgICAgICAmJiAkckxMLT5bJEtuX2xhc3Rfbm9uYmxhbmtdLT5bX1RZUEVfXSBlcSAnaycgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJHRva2VuID0gJHJMTC0+WyRLbl9sYXN0X25vbmJsYW5rXS0+W19UT0tFTl9dOwoKICAgICAgICAgICAgIyBUdXJuIG9mZiB3ZWxkaW5nIGF0IHNvcnQvbWFwL2dyZXAgKAogICAgICAgICAgICBpZiAoICRpc19zb3J0X21hcF9ncmVweyR0b2tlbn0gKSB7ICRub25ibGFua19jb3VudCA9IDEwIH0KICAgICAgICB9CgogICAgICAgIG15ICR0b2tlbl9vbyA9ICRyTEwtPlskS19vdXRlcl9vcGVuaW5nXS0+W19UT0tFTl9dOwoKICAgICAgICBpZiAoCgogICAgICAgICAgICAjIDE6IGFkamFjZW50IG9wZW5pbmcgY29udGFpbmVycywgbGlrZTogZG8ge3sKICAgICAgICAgICAgJG5vbmJsYW5rX2NvdW50ID09IDEKCiAgICAgICAgICAgICMgMi4gYW5vbnltb3VzIHN1YiArIHByb3RvdHlwZSBvciBzaWc6ICApLT50aGVuKCBzdWIgKCRjb2RlKSB7CiAgICAgICAgICAgICMgLi4uIGJ1dCBpdCBzZWVtcyBiZXN0IG5vdCB0byBzdGFjayB0d28gc3RydWN0dXJhbCBibG9ja3MsIGxpa2UKICAgICAgICAgICAgIyB0aGlzCiAgICAgICAgICAgICMgICAgc3ViIG1ha2VfYW5vbl93aXRoX215X3N1YiB7IHN1YiB7CiAgICAgICAgICAgICMgYmVjYXVzZSBpdCBwcm9iYWJseSBoaWRlcyB0aGUgc3RydWN0dXJlIGEgbGl0dGxlIHRvbyBtdWNoLgogICAgICAgICAgICB8fCAoICAgJGlubmVyX2Jsb2NrdHlwZQogICAgICAgICAgICAgICAgJiYgJGlubmVyX2Jsb2NrdHlwZSBlcSAnc3ViJwogICAgICAgICAgICAgICAgJiYgJHJMTC0+WyRLbl9maXJzdF0tPltfVE9LRU5fXSBlcSAnc3ViJwogICAgICAgICAgICAgICAgJiYgISRvdXRlcl9ibG9ja3R5cGUgKQoKICAgICAgICAgICAgIyAzLiBzaG9ydCBpdGVtIGZvbGxvd2luZyBvcGVuaW5nIHBhcmVuLCBsaWtlOiAgZnVuKCB5eXkgKAogICAgICAgICAgICB8fCAkbm9uYmxhbmtfY291bnQgPT0gMiAmJiAkdG9rZW5fb28gZXEgJygnCgogICAgICAgICAgICAjIDQuIHdlbGQgYXJvdW5kIGZhdCBjb21tYXMsIGlmIHJlcXVlc3RlZCAoZ2l0ICMxMDgpLCBzdWNoIGFzCiAgICAgICAgICAgICMgICAgIGVsZi0+Y2FsbF9tZXRob2QoIG1ldGhvZF9uYW1lX2ZvbyA9PiB7CiAgICAgICAgICAgIHx8ICggICAkdHlwZSBlcSAnPT4nCiAgICAgICAgICAgICAgICAmJiAkbm9uYmxhbmtfY291bnQgPD0gMwogICAgICAgICAgICAgICAgJiYgJXdlbGRfZmF0X2NvbW1hX3J1bGVzCiAgICAgICAgICAgICAgICAmJiAkd2VsZF9mYXRfY29tbWFfcnVsZXN7JHRva2VuX29vfSApCiAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBwdXNoIEBuZXN0ZWRfcGFpcnMsCiAgICAgICAgICAgICAgWyAkaW5uZXJfc2Vxbm8sICRvdXRlcl9zZXFubywgJEtfaW5uZXJfY2xvc2luZyBdOwogICAgICAgIH0KICAgICAgICBuZXh0OwogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgTWFrZSB0aGUgZmluYWwgbGlzdCBvZiBuZXN0ZWQgcGFpcnMKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAjIFRoZSB3ZWxkIHJvdXRpbmUgZXhwZWN0cyB0aGUgcGFpcnMgaW4gb3JkZXIgaW4gdGhlIGZvcm0KICAgICMgICBbJHNlcW5vX2lubmVyLCAkc2Vxbm9fb3V0ZXJdCiAgICAjIEFuZCB0aGV5IG11c3QgYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIGlubmVyIGNsb3NpbmcgdG9rZW5zCiAgICAjIChvdGhlcndpc2UsIHdlbGRzIG9mIHRocmVlIG9yIG1vcmUgYWRqYWNlbnQgdG9rZW5zIHdpbGwgbm90IHdvcmspLiAgVGhlIEsKICAgICMgdmFsdWUgb2YgdGhpcyBpbm5lciBjbG9zaW5nIHRva2VuIGhhcyB0ZW1wb3JhcmlseSBiZWVuIHN0b3JlZCBmb3IKICAgICMgc29ydGluZy4KICAgIEBuZXN0ZWRfcGFpcnMgPQoKICAgICAgIyBEcm9wIHRoZSBLIGluZGV4IGFmdGVyIHNvcnRpbmcgKGl0IHdvdWxkIGNhdXNlIHRyb3VibGUgZG93bnN0cmVhbSkKICAgICAgbWFwIHsgWyAkXy0+WzBdLCAkXy0+WzFdIF0gfQoKICAgICAgIyBTb3J0IG9uIHRoZSBLIHZhbHVlcwogICAgICBzb3J0IHsgJGEtPlsyXSA8PT4gJGItPlsyXSB9IEBuZXN0ZWRfcGFpcnM7CgogICAgcmV0dXJuIFxAbmVzdGVkX3BhaXJzOwp9ICMjIGVuZCBzdWIgZmluZF9uZXN0ZWRfcGFpcnMKCnN1YiBtYXRjaF9wYXJlbl9jb250cm9sX2ZsYWcgewoKICAgIG15ICggJHNlbGYsICRzZXFubywgJGZsYWcsICgkckxMKSApID0gQF87CgogICAgIyBJbnB1dCBwYXJhbWV0ZXJzOgogICAgIyAgICRzZXFubyA9IHNlcXVlbmNlIG51bWJlciBvZiB0aGUgY29udGFpbmVyIChzaG91bGQgYmUgcGFyZW4pCiAgICAjICAgJGZsYWcgID0gdGhlIGZsYWcgd2hpY2ggZGVmaW5lcyB3aGF0IG1hdGNoZXMKICAgICMgICAkckxMICAgPSBhbiBvcHRpb25hbCBhbHRlcm5hdGUgdG9rZW4gbGlzdCBuZWVkZWQgZm9yIHJlc3BhY2Ugb3BlcmF0aW9ucwoKICAgICMgRGVjaWRlIGlmIHRoaXMgcGFyZW4gaXMgZXhjbHVkZWQgYnkgdXNlciByZXF1ZXN0OgogICAgIyAgIHVuZGVmIG1hdGNoZXMgbm8gcGFyZW5zCiAgICAjICAgJyonIG1hdGNoZXMgYWxsIHBhcmVucwogICAgIyAgICdrJyBtYXRjaGVzIG9ubHkgaWYgdGhlIHByZXZpb3VzIG5vbmJsYW5rIHRva2VuIGlzIGEgcGVybCBidWlsdGluCiAgICAjICAgICAgIGtleXdvcmQgKHN1Y2ggYXMgJ2lmJywgJ3doaWxlJyksCiAgICAjICAgJ0snIG1hdGNoZXMgaWYgJ2snIGRvZXMgbm90LCBtZWFuaW5nIGlmIHRoZSBwcmV2aW91cyB0b2tlbiBpcyBub3QgYQogICAgIyAgICAgICBrZXl3b3JkLgogICAgIyAgICdmJyBtYXRjaGVzIGlmIHRoZSBwcmV2aW91cyB0b2tlbiBpcyBhIGZ1bmN0aW9uIG90aGVyIHRoYW4gYSBrZXl3b3JkLgogICAgIyAgICdGJyBtYXRjaGVzIGlmICdmJyBkb2VzIG5vdC4KICAgICMgICAndycgbWF0Y2hlcyBpZiBlaXRoZXIgJ2snIG9yICdmJyBtYXRjaC4KICAgICMgICAnVycgbWF0Y2hlcyBpZiAndycgZG9lcyBub3QuCgogICAgJHJMTCA9ICRzZWxmLT5bX3JMTF9dIHVubGVzcyAoIGRlZmluZWQoJHJMTCkgKTsKCiAgICByZXR1cm4gMCB1bmxlc3MgKCBkZWZpbmVkKCRmbGFnKSApOwogICAgcmV0dXJuIDAgaWYgJGZsYWcgZXEgJzAnOwogICAgcmV0dXJuIDEgaWYgJGZsYWcgZXEgJzEnOwogICAgcmV0dXJuIDEgaWYgJGZsYWcgZXEgJyonOwogICAgcmV0dXJuIDAgdW5sZXNzICgkc2Vxbm8pOwogICAgbXkgJEtfb3BlbmluZyA9ICRzZWxmLT5bX0tfb3BlbmluZ19jb250YWluZXJfXS0+eyRzZXFub307CiAgICByZXR1cm4gdW5sZXNzICggZGVmaW5lZCgkS19vcGVuaW5nKSApOwoKICAgIG15ICggJGlzX2YsICRpc19rLCAkaXNfdyApOwogICAgbXkgJEtwID0gJHNlbGYtPktfcHJldmlvdXNfbm9uYmxhbmsoICRLX29wZW5pbmcsICRyTEwgKTsKICAgIGlmICggZGVmaW5lZCgkS3ApICkgewogICAgICAgIG15ICR0eXBlX3AgPSAkckxMLT5bJEtwXS0+W19UWVBFX107CgogICAgICAgICMga2V5d29yZD8KICAgICAgICAkaXNfayA9ICR0eXBlX3AgZXEgJ2snOwoKICAgICAgICAjIGZ1bmN0aW9uIGNhbGw/CiAgICAgICAgJGlzX2YgPSAkc2VsZi0+W19yaXNfZnVuY3Rpb25fY2FsbF9wYXJlbl9dLT57JHNlcW5vfTsKCiAgICAgICAgIyBlaXRoZXIga2V5d29yZCBvciBmdW5jdGlvbiBjYWxsPwogICAgICAgICRpc193ID0gJGlzX2sgfHwgJGlzX2Y7CiAgICB9CiAgICBteSAkbWF0Y2g7CiAgICBpZiAgICAoICRmbGFnIGVxICdrJyApIHsgJG1hdGNoID0gJGlzX2sgfQogICAgZWxzaWYgKCAkZmxhZyBlcSAnSycgKSB7ICRtYXRjaCA9ICEkaXNfayB9CiAgICBlbHNpZiAoICRmbGFnIGVxICdmJyApIHsgJG1hdGNoID0gJGlzX2YgfQogICAgZWxzaWYgKCAkZmxhZyBlcSAnRicgKSB7ICRtYXRjaCA9ICEkaXNfZiB9CiAgICBlbHNpZiAoICRmbGFnIGVxICd3JyApIHsgJG1hdGNoID0gJGlzX3cgfQogICAgZWxzaWYgKCAkZmxhZyBlcSAnVycgKSB7ICRtYXRjaCA9ICEkaXNfdyB9CiAgICBlbHNlIHsKICAgICAgICAjIyBubyBtYXRjaAogICAgICAgIERFVkVMX01PREUgJiYgRmF1bHQoPDxFT00pOwp1bmV4cGVjdGVkIGNvZGUgJyRmbGFnJyBpbiBzdWIgbWF0Y2hfcGFyZW5fY29udHJvbF9mbGFnOiBleHBlY3Rpbmcgb25lIG9mIGtLZkZ3VwpFT00KICAgIH0KICAgIHJldHVybiAkbWF0Y2g7Cn0gIyMgZW5kIHN1YiBtYXRjaF9wYXJlbl9jb250cm9sX2ZsYWcKCnN1YiBpc19leGNsdWRlZF93ZWxkIHsKCiAgICBteSAoICRzZWxmLCAkS0ssICRpc19sZWFkaW5nICkgPSBAXzsKCiAgICAjIERlY2lkZSBpZiB0aGlzIHdlbGQgaXMgZXhjbHVkZWQgYnkgdXNlciByZXF1ZXN0CgogICAgIyBHaXZlbjoKICAgICMgICAkS0sgPSBpbmRleCBvZiB0aGlzIHdlbGQgdG9rZW4KICAgICMgICAkaXNfbGVhZGluZyA9IHRydWUgaWYgdGhpcyB3aWxsIHRoZSBvdXRlciB0b2tlbiBvZiBhIHdlbGQKCiAgICBteSAkckxMICAgICAgICAgPSAkc2VsZi0+W19yTExfXTsKICAgIG15ICRydG9rZW5fdmFycyA9ICRyTEwtPlskS0tdOwogICAgbXkgJHRva2VuICAgICAgID0gJHJ0b2tlbl92YXJzLT5bX1RPS0VOX107CiAgICBteSAkcmZsYWdzICAgICAgPSAkd2VsZF9uZXN0ZWRfZXhjbHVzaW9uX3J1bGVzeyR0b2tlbn07CiAgICByZXR1cm4gMCB1bmxlc3MgKCBkZWZpbmVkKCRyZmxhZ3MpICk7CiAgICBteSAkZmxhZyA9ICRpc19sZWFkaW5nID8gJHJmbGFncy0+WzBdIDogJHJmbGFncy0+WzFdOwogICAgcmV0dXJuIDAgdW5sZXNzICggZGVmaW5lZCgkZmxhZykgKTsKICAgIHJldHVybiAxIGlmICRmbGFnIGVxICcqJzsKICAgIG15ICRzZXFubyA9ICRydG9rZW5fdmFycy0+W19UWVBFX1NFUVVFTkNFX107CiAgICByZXR1cm4gJHNlbGYtPm1hdGNoX3BhcmVuX2NvbnRyb2xfZmxhZyggJHNlcW5vLCAkZmxhZyApOwp9ICMjIGVuZCBzdWIgaXNfZXhjbHVkZWRfd2VsZAoKIyBoYXNoZXMgdG8gc2ltcGxpZnkgd2VsZGluZyBsb2dpYwpteSAldHlwZV9va19hZnRlcl9iYXJld29yZDsKbXkgJWhhc190aWdodF9wYXJlbjsKCkJFR0lOIHsKCiAgICAjIHR5cGVzIG5lZWRlZCBmb3Igd2VsZGluZyBSVUxFIDYKICAgIG15IEBxID0gcXcjID0+IC0+IHsgKCBbICM7CiAgICBAdHlwZV9va19hZnRlcl9iYXJld29yZHtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICMgdGhlc2UgdHlwZXMgZG8gbm90ICdsaWtlJyB0byBiZSBzZXBhcmF0ZWQgZnJvbSBhIGZvbGxvd2luZyBwYXJlbgogICAgQHEgPSBxdyggdyBpIHEgUSBHIEMgWiBVICk7CiAgICBAaGFzX3RpZ2h0X3BhcmVue0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7Cn0gIyMgZW5kIEJFR0lOCgp1c2UgY29uc3RhbnQgREVCVUdfV0VMRCA9PiAwOwoKc3ViIHNldHVwX25ld193ZWxkX21lYXN1cmVtZW50cyB7CgogICAgbXkgKCAkc2VsZiwgJEtvdXRlcl9vcGVuaW5nLCAkS2lubmVyX29wZW5pbmcgKSA9IEBfOwoKICAgICMgRGVmaW5lIHF1YW50aXRpZXMgdG8gY2hlY2sgZm9yIGV4Y2VzcyBsaW5lIGxlbmd0aHMgd2hlbiB3ZWxkZWQuCiAgICAjIENhbGxlZCBieSBzdWIgJ3dlbGRfbmVzdGVkX2NvbnRhaW5lcnMnIGFuZCBzdWIgJ3dlbGRfbmVzdGVkX3F1b3RlcycKCiAgICAjIEdpdmVuOgogICAgIyAgICgkS291dGVyX29wZW5pbmcsICRLaW5uZXJfb3BlbmluZykgPSBpbmRleGVzIG9mIG91dGVyIGFuZCBpbm5lciBvcGVuaW5nCiAgICAjICAgICBjb250YWluZXJzIHRvIGJlIHdlbGRlZAoKICAgICMgUmV0dXJucyB0aGVzZSB2YXJpYWJsZXM6CiAgICAjICAgJG5ld193ZWxkX29rID0gdHJ1ZSAobmV3IHdlbGQgb2spIG9yIGZhbHNlIChkbyBub3Qgc3RhcnQgbmV3IHdlbGQpCiAgICAjICAgJHN0YXJ0aW5nX2luZGVudCA9IHN0YXJ0aW5nIGluZGVudGF0aW9uCiAgICAjICAgJHN0YXJ0aW5nX2xlbnRvdCA9IHN0YXJ0aW5nIGN1bXVsYXRpdmUgbGVuZ3RoCiAgICAjICAgJG1zZyA9IGRpYWdub3N0aWMgbWVzc2FnZSBmb3IgZGVidWdnaW5nCgogICAgbXkgJHJMTCAgICAgICAgICAgICAgICA9ICRzZWxmLT5bX3JMTF9dOwogICAgbXkgJHJsaW5lcyAgICAgICAgICAgICA9ICRzZWxmLT5bX3JsaW5lc19dOwogICAgbXkgJHJLX25leHRfc2Vxbm9fYnlfSyA9ICRzZWxmLT5bX3JLX25leHRfc2Vxbm9fYnlfS19dOwoKICAgIG15ICRzdGFydGluZ19sZXZlbDsKICAgIG15ICRzdGFydGluZ19jaTsKICAgIG15ICRzdGFydGluZ19sZW50b3Q7CiAgICBteSAkbWF4aW11bV90ZXh0X2xlbmd0aDsKICAgIG15ICRtc2cgPSBFTVBUWV9TVFJJTkc7CgogICAgbXkgJGlsaW5lX29vID0gJHJMTC0+WyRLb3V0ZXJfb3BlbmluZ10tPltfTElORV9JTkRFWF9dOwogICAgbXkgJHJLX3JhbmdlID0gJHJsaW5lcy0+WyRpbGluZV9vb10tPntfcktfcmFuZ2V9OwogICAgbXkgKCAkS2ZpcnN0LCAkS2xhc3RfdXUgKSA9IEB7JHJLX3JhbmdlfTsKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBXZSBub3cgZGVmaW5lIGEgcmVmZXJlbmNlIGluZGV4LCAnJEtyZWYnLCBmcm9tIHdoaWNoIHRvIHN0YXJ0IG1lYXN1cmluZwogICAgIyBUaGlzIGNob2ljZSB0dXJucyBvdXQgdG8gYmUgY3JpdGljYWwgZm9yIGtlZXBpbmcgd2VsZHMgc3RhYmxlIGR1cmluZwogICAgIyBpdGVyYXRpb25zLCBzbyB3ZSBnbyB0aHJvdWdoIGEgbnVtYmVyIG9mIFNURVBTLi4uCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICMgU1RFUCAxOiBPdXIgc3RhcnRpbmcgZ3Vlc3MgaXMgdG8gdXNlIG1lYXN1cmUgZnJvbSB0aGUgZmlyc3QgdG9rZW4gb2YgdGhlCiAgICAjIGN1cnJlbnQgbGluZS4gIFRoaXMgaXMgdXN1YWxseSBhIGdvb2QgZ3Vlc3MuCiAgICBteSAkS3JlZiA9ICRLZmlyc3Q7CgogICAgIyBTVEVQIDI6IFNlZSBpZiB3ZSBzaG91bGQgZ28gYmFjayBhIGxpdHRsZSBmYXJ0aGVyCiAgICBteSAkS3ByZXYgPSAkc2VsZi0+S19wcmV2aW91c19ub25ibGFuaygkS2ZpcnN0KTsKICAgIGlmICggZGVmaW5lZCgkS3ByZXYpICkgewoKICAgICAgICAjIEF2b2lkIG1lYXN1cmluZyBmcm9tIGJldHdlZW4gYW4gb3BlbmluZyBwYXJlbiBhbmQgYSBwcmV2aW91cyB0b2tlbgogICAgICAgICMgd2hpY2ggc2hvdWxkIHN0YXkgY2xvc2UgdG8gaXQgLi4uIGZpeGVzIGIxMTg1CiAgICAgICAgbXkgJHRva2VuX29vICA9ICRyTEwtPlskS291dGVyX29wZW5pbmddLT5bX1RPS0VOX107CiAgICAgICAgbXkgJHR5cGVfcHJldiA9ICRyTEwtPlskS3ByZXZdLT5bX1RZUEVfXTsKICAgICAgICBpZiAoICAgJEtvdXRlcl9vcGVuaW5nID09ICRLZmlyc3QKICAgICAgICAgICAgJiYgJHRva2VuX29vIGVxICcoJwogICAgICAgICAgICAmJiAkaGFzX3RpZ2h0X3BhcmVueyR0eXBlX3ByZXZ9ICkKICAgICAgICB7CiAgICAgICAgICAgICRLcmVmID0gJEtwcmV2OwogICAgICAgIH0KCiAgICAgICAgIyBCYWNrIHVwIGFuZCBjb3VudCBsZW5ndGggZnJvbSBhIHRva2VuIGxpa2UgJz0nIG9yICc9PicgaWYgLWxwCiAgICAgICAgIyBpcyB1c2VkICh0aGlzIGZpeGVzIGI1MjApCiAgICAgICAgIyAuLi5vciBpZiBhIGJyZWFrIGlzIHdhbnRlZCBiZWZvcmUgdGhlcmUKICAgICAgICBlbHNpZiAoJHJPcHRzX2xpbmVfdXBfcGFyZW50aGVzZXMKICAgICAgICAgICAgfHwgJHdhbnRfYnJlYWtfYmVmb3JleyR0eXBlX3ByZXZ9ICkKICAgICAgICB7CgogICAgICAgICAgICAjIElmIHRoZXJlIGFyZSBvdGhlciBzZXF1ZW5jZSBpdGVtcyBiZXR3ZWVuIHRoZSBzdGFydCBvZiB0aGlzIGxpbmUKICAgICAgICAgICAgIyBhbmQgdGhlIG9wZW5pbmcgdG9rZW4gaW4gcXVlc3Rpb24sIHRoZW4gZG8gbm90IGluY2x1ZGUgdG9rZW5zIG9uCiAgICAgICAgICAgICMgdGhlIHByZXZpb3VzIGxpbmUgaW4gbGVuZ3RoIGNhbGN1bGF0aW9ucy4gIFRoaXMgY2hlY2sgYWRkZWQgdG8KICAgICAgICAgICAgIyBmaXggY2FzZSBiMTE3NCB3aGljaCBoYWQgYSAnPycgb24gdGhlIGxpbmUKICAgICAgICAgICAgbXkgJG5vX3ByZXZpb3VzX3NlcV9pdGVtID0gJEtyZWYgPT0gJEtvdXRlcl9vcGVuaW5nCiAgICAgICAgICAgICAgfHwgJHJLX25leHRfc2Vxbm9fYnlfSy0+WyRLcmVmXSA9PSAkS291dGVyX29wZW5pbmc7CiAgICAgICAgICAgIGlmICggJG5vX3ByZXZpb3VzX3NlcV9pdGVtCiAgICAgICAgICAgICAgICAmJiBzdWJzdHIoICR0eXBlX3ByZXYsIDAsIDEgKSBlcSAnPScgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkS3JlZiA9ICRLcHJldjsKCiAgICAgICAgICAgICAgICAjIEZpeCBmb3IgYjExNDQgYW5kIGIxMTEyOiBiYWNrdXAgdG8gdGhlIGZpcnN0IG5vbmJsYW5rCiAgICAgICAgICAgICAgICAjIGNoYXJhY3RlciBiZWZvcmUgdGhlID0+LCBvciB0byB0aGUgc3RhcnQgb2YgaXRzIGxpbmUuCiAgICAgICAgICAgICAgICBpZiAoICR0eXBlX3ByZXYgZXEgJz0+JyApIHsKICAgICAgICAgICAgICAgICAgICBteSAkaWxpbmVfcHJldiAgICA9ICRyTEwtPlskS3ByZXZdLT5bX0xJTkVfSU5ERVhfXTsKICAgICAgICAgICAgICAgICAgICBteSAkcktfcmFuZ2VfcHJldiA9ICRybGluZXMtPlskaWxpbmVfcHJldl0tPntfcktfcmFuZ2V9OwogICAgICAgICAgICAgICAgICAgIG15ICggJEtmaXJzdF9wcmV2LCAkS2xhc3RfcHJldl91dSApID0gQHskcktfcmFuZ2VfcHJldn07CiAgICAgICAgICAgICAgICAgICAgbXkgJG5iX2NvdW50ID0gMDsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRLSyAoIHJldmVyc2UoICRLZmlyc3RfcHJldiAuLiAkS3JlZiAtIDEgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBpZiAoICRyTEwtPlskS0tdLT5bX1RZUEVfXSBlcSAnYicgKTsKICAgICAgICAgICAgICAgICAgICAgICAgJEtyZWYgPSAkS0s7CgogICAgICAgICAgICAgICAgICAgICAgICAjIENvbnRpbnVlIGF0IHR5cGUgJ3cnIHRvIGdldCBwcmV2aW91cyBkYXNoLiAgRXhhbXBsZToKICAgICAgICAgICAgICAgICAgICAgICAgIyAgIC1jbGFzc2lmaWNhdGlvbiA9PiBbIHF3KAogICAgICAgICAgICAgICAgICAgICAgICAjIFRoaXMgZml4ZXMgYjE1MDIuCiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgaWYgKCAkbmJfY291bnQgfHwgJHJMTC0+WyRLS10tPltfVFlQRV9dIG5lICd3JyApOwogICAgICAgICAgICAgICAgICAgICAgICAkbmJfY291bnQrKzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICMgZG8gbm90IG5lZWQgdG8gYmFja3VwCiAgICAgICAgfQogICAgfQoKICAgICMgU1RFUCAzOiBOb3cgbG9vayBhaGVhZCBmb3IgYSB0ZXJuYXJ5IGFuZCwgaWYgZm91bmQsIHVzZSBpdC4KICAgICMgVGhpcyBmaXhlcyBjYXNlIGIxMTgyLgogICAgIyBBbHNvIGxvb2sgZm9yIGEgJyknIGF0IHRoZSBzYW1lIGxldmVsIGFuZCwgaWYgZm91bmQsIHVzZSBpdC4KICAgICMgVGhpcyBmaXhlcyBjYXNlIGIxMjI0LgogICAgaWYgKCAkS3JlZiA8ICRLb3V0ZXJfb3BlbmluZyApIHsKICAgICAgICBteSAkS25leHQgICAgICA9ICRyS19uZXh0X3NlcW5vX2J5X0stPlskS3JlZl07CiAgICAgICAgbXkgJGxldmVsX29vICAgPSAkckxMLT5bJEtvdXRlcl9vcGVuaW5nXS0+W19MRVZFTF9dOwogICAgICAgIG15ICRLbmV4dF9sYXN0ID0gJEtuZXh0OwogICAgICAgIHdoaWxlICggJEtuZXh0ICYmICRLbmV4dCA8ICRLb3V0ZXJfb3BlbmluZyApIHsKICAgICAgICAgICAgaWYgKCAkckxMLT5bJEtuZXh0XS0+W19MRVZFTF9dID09ICRsZXZlbF9vbyApIHsKICAgICAgICAgICAgICAgIGlmICggICAkaXNfdGVybmFyeXsgJHJMTC0+WyRLbmV4dF0tPltfVFlQRV9dIH0KICAgICAgICAgICAgICAgICAgICB8fCAkckxMLT5bJEtuZXh0XS0+W19UT0tFTl9dIGVxICcpJyApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJEtyZWYgPSAkS25leHQ7CiAgICAgICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkS25leHQgPSAkcktfbmV4dF9zZXFub19ieV9LLT5bJEtuZXh0XTsKICAgICAgICAgICAgaWYgKCAkS25leHQgPD0gJEtuZXh0X2xhc3QgKSB7CiAgICAgICAgICAgICAgICAjIyBzaG91bGRuJ3QgaGFwcGVuOiAkcktfbmV4dF9zZXFub19ieV9LIGlzIGNvcnJ1cHRlZAogICAgICAgICAgICAgICAgREVWRUxfTU9ERSAmJiBGYXVsdCg8PEVPTSk7CktuZXh0IHNob3VsZCBub3QgaW5jcmVhc2U6IEtuZXh0X2xhc3Q9JEtuZXh0X2xhc3QgPj0gS25leHQ9JEtuZXh0CkVPTQogICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgfQogICAgICAgICAgICAkS25leHRfbGFzdCA9ICRLbmV4dDsKICAgICAgICB9ICMjIGVuZCB3aGlsZSAoICRLbmV4dCAmJiAkS25leHQgLi4uKQogICAgfQoKICAgICMgZml4IGMxNDY4IC0gZG8gbm90IG1lYXN1cmUgZnJvbSBhIGxlYWRpbmcgb3BlbmluZyBibG9jayBicmFjZSAtCiAgICAjIHdoaWNoIGlzIG5vdCBhIG9uZS1saW5lIGJsb2NrCiAgICBpZiAoICAgJEtyZWYgPCAkS291dGVyX29wZW5pbmcKICAgICAgICAmJiAkS3JlZiA9PSAkS2ZpcnN0CiAgICAgICAgJiYgJHJMTC0+WyRLcmVmXS0+W19UT0tFTl9dIGVxICd7JyApCiAgICB7CiAgICAgICAgbXkgJHNlcW5vX3JlZiA9ICRyTEwtPlskS3JlZl0tPltfVFlQRV9TRVFVRU5DRV9dOwogICAgICAgIGlmICgkc2Vxbm9fcmVmKSB7CiAgICAgICAgICAgIG15ICRibG9ja190eXBlID0gJHNlbGYtPltfcmJsb2NrX3R5cGVfb2Zfc2Vxbm9fXS0+eyRzZXFub19yZWZ9OwogICAgICAgICAgICBpZiAoJGJsb2NrX3R5cGUpIHsKICAgICAgICAgICAgICAgIG15ICRLcmVmX2MgICA9ICRzZWxmLT5bX0tfY2xvc2luZ19jb250YWluZXJfXS0+eyRzZXFub19yZWZ9OwogICAgICAgICAgICAgICAgbXkgJGxuX3JlZl9vID0gJHJMTC0+WyRLcmVmXS0+W19MSU5FX0lOREVYX107CiAgICAgICAgICAgICAgICBteSAkbG5fcmVmX2MgPSAkckxMLT5bJEtyZWZfY10tPltfTElORV9JTkRFWF9dOwogICAgICAgICAgICAgICAgaWYgKCAkbG5fcmVmX2MgPiAkbG5fcmVmX28gKSB7CiAgICAgICAgICAgICAgICAgICAgJEtyZWYgPSAkc2VsZi0+S19uZXh0X25vbmJsYW5rKCRLcmVmKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIERlZmluZSB0aGUgc3RhcnRpbmcgbWVhc3VyZW1lbnRzIHdlIHdpbGwgbmVlZAogICAgJHN0YXJ0aW5nX2xlbnRvdCA9CiAgICAgICRLcmVmIDw9IDAgPyAwIDogJHJMTC0+WyAkS3JlZiAtIDEgXS0+W19DVU1VTEFUSVZFX0xFTkdUSF9dOwogICAgJHN0YXJ0aW5nX2xldmVsID0gJHJMTC0+WyRLcmVmXS0+W19MRVZFTF9dOwogICAgJHN0YXJ0aW5nX2NpICAgID0gJHJMTC0+WyRLcmVmXS0+W19DSV9MRVZFTF9dOwoKICAgICRtYXhpbXVtX3RleHRfbGVuZ3RoID0gJG1heGltdW1fdGV4dF9sZW5ndGhfYXRfbGV2ZWxbJHN0YXJ0aW5nX2xldmVsXSAtCiAgICAgICRzdGFydGluZ19jaSAqICRyT3B0c19jb250aW51YXRpb25faW5kZW50YXRpb247CgogICAgIyBTVEVQIDQ6IFN3aXRjaCB0byB1c2luZyB0aGUgb3V0ZXIgb3BlbmluZyB0b2tlbiBhcyB0aGUgcmVmZXJlbmNlCiAgICAjIHBvaW50IGlmIGEgbGluZSBicmVhayBiZWZvcmUgaXQgd291bGQgbWFrZSBhIGxvbmdlciBsaW5lLgogICAgIyBGaXhlcyBjYXNlIGIxMDU1IGFuZCBpcyBhbHNvIGFuIGFsdGVybmF0ZSBmaXggZm9yIGIxMDY1LgogICAgbXkgJHN0YXJ0aW5nX2xldmVsX29vID0gJHJMTC0+WyRLb3V0ZXJfb3BlbmluZ10tPltfTEVWRUxfXTsKICAgIGlmICggJEtyZWYgPCAkS291dGVyX29wZW5pbmcgKSB7CiAgICAgICAgbXkgJHN0YXJ0aW5nX2NpX29vID0gJHJMTC0+WyRLb3V0ZXJfb3BlbmluZ10tPltfQ0lfTEVWRUxfXTsKICAgICAgICBteSAkbGVudG90X29vID0gJHJMTC0+WyAkS291dGVyX29wZW5pbmcgLSAxIF0tPltfQ1VNVUxBVElWRV9MRU5HVEhfXTsKICAgICAgICBteSAkbWF4aW11bV90ZXh0X2xlbmd0aF9vbyA9CiAgICAgICAgICAkbWF4aW11bV90ZXh0X2xlbmd0aF9hdF9sZXZlbFskc3RhcnRpbmdfbGV2ZWxfb29dIC0KICAgICAgICAgICRzdGFydGluZ19jaV9vbyAqICRyT3B0c19jb250aW51YXRpb25faW5kZW50YXRpb247CgogICAgICAgICMgVGhlIGV4Y2VzcyBsZW5ndGggdG8gYW55IGN1bXVsYXRpdmUgbGVuZ3RoIEsgPSBsZW5LIGlzIGVpdGhlcgogICAgICAgICMgICAgICRleGNlc3MgPSAkbGVuayAtICgkbGVudG90ICAgICsgJG1heGltdW1fdGV4dF9sZW5ndGgpLCAgICAgb3IKICAgICAgICAjICAgICAkZXhjZXNzID0gJGxlbmsgLSAoJGxlbnRvdF9vbyArICRtYXhpbXVtX3RleHRfbGVuZ3RoX29vKSwKICAgICAgICAjIHNvIHRoZSB3b3JzdCBjYXNlIChtYXhpbXVtIGV4Y2VzcykgY29ycmVzcG9uZHMgdG8gdGhlIGNvbmZpZ3VyYXRpb24KICAgICAgICAjIHdpdGggbWluaW11bSB2YWx1ZSBvZiB0aGUgc3VtOiAkbGVudG90ICsgJG1heGltdW1fdGV4dF9sZW5ndGgKICAgICAgICBpZiAoICRsZW50b3Rfb28gKyAkbWF4aW11bV90ZXh0X2xlbmd0aF9vbyA8CiAgICAgICAgICAgICRzdGFydGluZ19sZW50b3QgKyAkbWF4aW11bV90ZXh0X2xlbmd0aCApCiAgICAgICAgewogICAgICAgICAgICAkS3JlZiAgICAgICAgICAgICAgICA9ICRLb3V0ZXJfb3BlbmluZzsKICAgICAgICAgICAgJHN0YXJ0aW5nX2xldmVsICAgICAgPSAkc3RhcnRpbmdfbGV2ZWxfb287CiAgICAgICAgICAgICRzdGFydGluZ19jaSAgICAgICAgID0gJHN0YXJ0aW5nX2NpX29vOwogICAgICAgICAgICAkc3RhcnRpbmdfbGVudG90ICAgICA9ICRsZW50b3Rfb287CiAgICAgICAgICAgICRtYXhpbXVtX3RleHRfbGVuZ3RoID0gJG1heGltdW1fdGV4dF9sZW5ndGhfb287CiAgICAgICAgfQogICAgfQoKICAgIG15ICRuZXdfd2VsZF9vayA9IDE7CgogICAgIyBTVEVQIDUsIGZpeCBiMTAyMDogQXZvaWQgcHJvYmxlbSBhcmVhcyB3aXRoIHRoZSAtd24gLWxwIGNvbWJpbmF0aW9uLiAgVGhlCiAgICAjIGNvbWJpbmF0aW9uIC13biAtbHAgLWR3cyAtbmF3cyBkb2VzIG5vdCB3b3JrIHdlbGwgYW5kIGNhbiBjYXVzZSBibGlua2Vycy4KICAgICMgSXQgd2lsbCBwcm9iYWJseSBvbmx5IG9jY3VyIGluIHN0cmVzcyB0ZXN0aW5nLiAgRm9yIHRoaXMgc2l0dWF0aW9uIHdlCiAgICAjIHdpbGwgb25seSBzdGFydCBhIG5ldyB3ZWxkIGlmIHdlIHN0YXJ0IGF0IGEgJ2dvb2QnIGxvY2F0aW9uLgogICAgIyAtIEFkZGVkICdpZicgdG8gZml4IGNhc2UgYjEwMzIuCiAgICAjIC0gUmVxdWlyZSBibGFuayBiZWZvcmUgY2VydGFpbiBwcmV2aW91cyBjaGFyYWN0ZXJzIHRvIGZpeCBiMTExMS4KICAgICMgLSBBZGQgJzsnIHRvIGZpeCBjYXNlIGIxMTM5CiAgICAjIC0gQ29udmVydCBmcm9tICckb2tfdG9fd2VsZCcgdG8gJyRuZXdfd2VsZF9vaycgdG8gZml4IGIxMTYyLgogICAgIyAtIHJlbGF4ZWQgY29uc3RyYWludHMgZm9yIGIxMjI3CiAgICAjIC0gYWRkZWQgc2tpcCBpZiB0eXBlIGlzICdxJyBmb3IgYjEzNDkgYW5kIGIxMzUwIGIxMzUxIGIxMzUyIGIxMzUzCiAgICAjIC0gYWRkZWQgc2tpcCBpZiB0eXBlIGlzICdRJyBmb3IgYjE0NDcKICAgIGlmICggICAkc3RhcnRpbmdfY2kKICAgICAgICAmJiAkck9wdHNfbGluZV91cF9wYXJlbnRoZXNlcwogICAgICAgICYmICRyT3B0c19kZWxldGVfb2xkX3doaXRlc3BhY2UKICAgICAgICAmJiAhJHJPcHRzX2FkZF93aGl0ZXNwYWNlCiAgICAgICAgJiYgJHJMTC0+WyRLaW5uZXJfb3BlbmluZ10tPltfVFlQRV9dIG5lICdxJwogICAgICAgICYmICRyTEwtPlskS2lubmVyX29wZW5pbmddLT5bX1RZUEVfXSBuZSAnUScKICAgICAgICAmJiBkZWZpbmVkKCRLcHJldikgKQogICAgewogICAgICAgIG15ICR0eXBlX2ZpcnN0ICA9ICRyTEwtPlskS2ZpcnN0XS0+W19UWVBFX107CiAgICAgICAgbXkgJHRva2VuX2ZpcnN0ID0gJHJMTC0+WyRLZmlyc3RdLT5bX1RPS0VOX107CiAgICAgICAgbXkgJHR5cGVfcHJldiAgID0gJHJMTC0+WyRLcHJldl0tPltfVFlQRV9dOwogICAgICAgIG15ICR0eXBlX3BwICAgICA9ICdiJzsKICAgICAgICBpZiAoICRLcHJldiA+PSAwICkgeyAkdHlwZV9wcCA9ICRyTEwtPlsgJEtwcmV2IC0gMSBdLT5bX1RZUEVfXSB9CgogICAgICAgIG15ICRpc19nb29kX2xvY2F0aW9uID0KCiAgICAgICAgICAkdHlwZV9wcmV2ID1+IC9eW1wsXC5cO10vCiAgICAgICAgICB8fCAoICR0eXBlX3ByZXYgPX4gL15bPVx7XFtcKFxMXS8KICAgICAgICAgICAgJiYgKCAkdHlwZV9wcCBlcSAnYicgfHwgJHR5cGVfcHAgZXEgJ30nIHx8ICR0eXBlX2ZpcnN0IGVxICdrJyApICkKICAgICAgICAgIHx8ICR0eXBlX2ZpcnN0ID1+IC9eWz1cLFwuXDtce1xbXChcTF0vCiAgICAgICAgICB8fCAkdHlwZV9maXJzdCBlcSAnfHwnCiAgICAgICAgICB8fCAoCiAgICAgICAgICAgICR0eXBlX2ZpcnN0IGVxICdrJwogICAgICAgICAgICAmJiAoICAgJHRva2VuX2ZpcnN0IGVxICdpZicKICAgICAgICAgICAgICAgIHx8ICR0b2tlbl9maXJzdCBlcSAnb3InICkKICAgICAgICAgICk7CgogICAgICAgIGlmICggISRpc19nb29kX2xvY2F0aW9uICkgewogICAgICAgICAgICAkbXNnID0KIlNraXBwaW5nIHdlbGQ6IHBvb3IgYnJlYWsgd2l0aCAtbHAgYW5kIGNpIGF0IHR5cGVfZmlyc3Q9JyR0eXBlX2ZpcnN0JyB0eXBlX3ByZXY9JyR0eXBlX3ByZXYnIHR5cGVfcHA9JHR5cGVfcHBcbiI7CiAgICAgICAgICAgICRuZXdfd2VsZF9vayA9IDA7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuICggJG5ld193ZWxkX29rLCAkbWF4aW11bV90ZXh0X2xlbmd0aCwgJHN0YXJ0aW5nX2xlbnRvdCwgJG1zZyApOwp9ICMjIGVuZCBzdWIgc2V0dXBfbmV3X3dlbGRfbWVhc3VyZW1lbnRzCgpzdWIgZXhjZXNzX2xpbmVfbGVuZ3RoX2Zvcl9LcmFuZ2UgewoKICAgIG15ICggJHNlbGYsICRLZmlyc3QsICRLbGFzdCApID0gQF87CgogICAgIyByZXR1cm5zICRleGNlc3NfbGVuZ3RoID0KICAgICMgICBieSBob3cgbWFueSBjaGFyYWN0ZXJzIGEgbGluZSBjb21wb3NlZCBvZiB0b2tlbnMgJEtmaXJzdCAuLiAkS2xhc3Qgd2lsbAogICAgIyAgIGV4Y2VlZCB0aGUgYWxsb3dlZCBsaW5lIGxlbmd0aAoKICAgIG15ICRyTEwgPSAkc2VsZi0+W19yTExfXTsKICAgIG15ICRsZW5ndGhfYmVmb3JlX0tmaXJzdCA9CiAgICAgICRLZmlyc3QgPD0gMAogICAgICA/IDAKICAgICAgOiAkckxMLT5bICRLZmlyc3QgLSAxIF0tPltfQ1VNVUxBVElWRV9MRU5HVEhfXTsKCiAgICAjIGJhY2t1cCBiZWZvcmUgYSBzaWRlIGNvbW1lbnQgaWYgbmVjZXNzYXJ5CiAgICBteSAkS2VuZCA9ICRLbGFzdDsKICAgIGlmICggICAkck9wdHNfaWdub3JlX3NpZGVfY29tbWVudF9sZW5ndGhzCiAgICAgICAgJiYgJHJMTC0+WyRLbGFzdF0tPltfVFlQRV9dIGVxICcjJyApCiAgICB7CiAgICAgICAgbXkgJEtwcmV2ID0gJHNlbGYtPktfcHJldmlvdXNfbm9uYmxhbmsoJEtsYXN0KTsKICAgICAgICBpZiAoIGRlZmluZWQoJEtwcmV2KSAmJiAkS3ByZXYgPj0gJEtmaXJzdCApIHsgJEtlbmQgPSAkS3ByZXYgfQogICAgfQoKICAgICMgZ2V0IHRoZSBsZW5ndGggb2YgdGhlIHRleHQKICAgIG15ICRsZW5ndGggPSAkckxMLT5bJEtlbmRdLT5bX0NVTVVMQVRJVkVfTEVOR1RIX10gLSAkbGVuZ3RoX2JlZm9yZV9LZmlyc3Q7CgogICAgIyBnZXQgdGhlIHNpemUgb2YgdGhlIHRleHQgd2luZG93CiAgICBteSAkbGV2ZWwgICAgICAgICAgID0gJHJMTC0+WyRLZmlyc3RdLT5bX0xFVkVMX107CiAgICBteSAkY2lfbGV2ZWwgICAgICAgID0gJHJMTC0+WyRLZmlyc3RdLT5bX0NJX0xFVkVMX107CiAgICBteSAkbWF4X3RleHRfbGVuZ3RoID0gJG1heGltdW1fdGV4dF9sZW5ndGhfYXRfbGV2ZWxbJGxldmVsXSAtCiAgICAgICRjaV9sZXZlbCAqICRyT3B0c19jb250aW51YXRpb25faW5kZW50YXRpb247CgogICAgbXkgJGV4Y2Vzc19sZW5ndGggPSAkbGVuZ3RoIC0gJG1heF90ZXh0X2xlbmd0aDsKCiAgICBERUJVR19XRUxECiAgICAgICYmIHByaW50CiJLZmlyc3Q9JEtmaXJzdCwgS2xhc3Q9JEtsYXN0LCBLZW5kPSRLZW5kLCBsZXZlbD0kbGV2ZWwsIGNpPSRjaV9sZXZlbCwgbWF4X3RleHRfbGVuZ3RoPSRtYXhfdGV4dF9sZW5ndGgsIGxlbmd0aD0kbGVuZ3RoXG4iOwogICAgcmV0dXJuICgkZXhjZXNzX2xlbmd0aCk7Cn0gIyMgZW5kIHN1YiBleGNlc3NfbGluZV9sZW5ndGhfZm9yX0tyYW5nZQoKc3ViIHdlbGRfbmVzdGVkX2NvbnRhaW5lcnMgewoKICAgIG15ICgkc2VsZikgPSBAXzsKCiAgICAjIENhbGxlZCBvbmNlIHBlciBmaWxlIGZvciBvcHRpb24gJy0td2VsZC1uZXN0ZWQtY29udGFpbmVycycKCiAgICBteSAkcktfd2VsZF9sZWZ0ICA9ICRzZWxmLT5bX3JLX3dlbGRfbGVmdF9dOwogICAgbXkgJHJLX3dlbGRfcmlnaHQgPSAkc2VsZi0+W19yS193ZWxkX3JpZ2h0X107CgogICAgIyBUaGlzIHJvdXRpbmUgaW1wbGVtZW50cyB0aGUgLXduIGZsYWcgYnkgIndlbGRpbmcgdG9nZXRoZXIiCiAgICAjIHRoZSBuZXN0ZWQgY2xvc2luZyBhbmQgb3BlbmluZyB0b2tlbnMgd2hpY2ggd2VyZSBwcmV2aW91c2x5CiAgICAjIGlkZW50aWZpZWQgYnkgc3ViICdmaW5kX25lc3RlZF9wYWlycycuICAid2VsZGluZyIgc2ltcGx5CiAgICAjIGludm9sdmVzIHNldHRpbmcgY2VydGFpbiBoYXNoIHZhbHVlcyB3aGljaCB3aWxsIGJlIGNoZWNrZWQKICAgICMgbGF0ZXIgZHVyaW5nIGZvcm1hdHRpbmcuCgogICAgbXkgJHJMTCAgICAgICAgICAgICAgICAgICAgID0gJHNlbGYtPltfckxMX107CiAgICBteSAkcmxpbmVzICAgICAgICAgICAgICAgICAgPSAkc2VsZi0+W19ybGluZXNfXTsKICAgIG15ICRLX29wZW5pbmdfY29udGFpbmVyICAgICA9ICRzZWxmLT5bX0tfb3BlbmluZ19jb250YWluZXJfXTsKICAgIG15ICRLX2Nsb3NpbmdfY29udGFpbmVyICAgICA9ICRzZWxmLT5bX0tfY2xvc2luZ19jb250YWluZXJfXTsKICAgIG15ICRyS19uZXh0X3NlcW5vX2J5X0sgICAgICA9ICRzZWxmLT5bX3JLX25leHRfc2Vxbm9fYnlfS19dOwogICAgbXkgJHJibG9ja190eXBlX29mX3NlcW5vICAgID0gJHNlbGYtPltfcmJsb2NrX3R5cGVfb2Zfc2Vxbm9fXTsKICAgIG15ICRyaXNfYXN1Yl9ibG9jayAgICAgICAgICA9ICRzZWxmLT5bX3Jpc19hc3ViX2Jsb2NrX107CiAgICBteSAkcm1heF92ZXJ0aWNhbF90aWdodG5lc3MgPSAkc2VsZi0+W19ybWF4X3ZlcnRpY2FsX3RpZ2h0bmVzc19dOwoKICAgIG15ICRyT3B0c19hc2JsID0gJHJPcHRzLT57J29wZW5pbmctYW5vbnltb3VzLXN1Yi1icmFjZS1vbi1uZXctbGluZSd9OwoKICAgICMgRmluZCBuZXN0ZWQgcGFpcnMgb2YgY29udGFpbmVyIHRva2VucyBmb3IgYW55IHdlbGRpbmcuCiAgICBteSAkcm5lc3RlZF9wYWlycyA9ICRzZWxmLT5maW5kX25lc3RlZF9wYWlycygpOwoKICAgICMgUmV0dXJuIHVubGVzcyB0aGVyZSBhcmUgbmVzdGVkIHBhaXJzIHRvIHdlbGQKICAgIHJldHVybiB1bmxlc3MgKCBkZWZpbmVkKCRybmVzdGVkX3BhaXJzKSAmJiBAeyRybmVzdGVkX3BhaXJzfSApOwoKICAgICMgTk9URTogSXQgd291bGQgYmUgbmljZSB0byBhcHBseSBSVUxFIDUgcmlnaHQgaGVyZSBieSBkZWxldGluZyB1bndhbnRlZAogICAgIyBwYWlycy4gIEJ1dCBpdCBpc24ndCBjbGVhciBpZiB0aGlzIGlzIHBvc3NpYmxlIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdwogICAgIyB3aGljaCBzZXF1ZW5jZXMgbWlnaHQgYWN0dWFsbHkgc3RhcnQgYSB3ZWxkLgoKICAgIG15ICRyT3B0c19icmVha19hdF9vbGRfbWV0aG9kX2JyZWFrcG9pbnRzID0KICAgICAgJHJPcHRzLT57J2JyZWFrLWF0LW9sZC1tZXRob2QtYnJlYWtwb2ludHMnfTsKCiAgICAjIFRoaXMgYXJyYXkgd2lsbCBob2xkIHRoZSBzZXF1ZW5jZSBudW1iZXJzIG9mIHRoZSB0b2tlbnMgdG8gYmUgd2VsZGVkLgogICAgbXkgQHdlbGRzOwoKICAgICMgVmFyaWFibGVzIG5lZWRlZCBmb3IgZXN0aW1hdGluZyBsaW5lIGxlbmd0aHMKICAgIG15ICRtYXhpbXVtX3RleHRfbGVuZ3RoOyAgICAjIG1heGltdW0gc3BhY2VzIGF2YWlsYWJsZSBmb3IgdGV4dAogICAgbXkgJHN0YXJ0aW5nX2xlbnRvdDsgICAgICAgICMgY3VtdWxhdGl2ZSB0ZXh0IHRvIHN0YXJ0IG9mIGN1cnJlbnQgbGluZQoKICAgIG15ICRpbGluZV9vdXRlcl9vcGVuaW5nICAgPSAtMTsKICAgIG15ICR3ZWxkX2NvdW50X3RoaXNfc3RhcnQgPSAwOwogICAgbXkgJHdlbGRfc3RhcnRzX2luX2Jsb2NrICA9IDA7CgogICAgIyBPTEQ6ICRzaW5nbGVfbGluZV90b2wgYWRkZWQgdG8gZml4IGNhc2VzIGIxMTgwIGIxMTgxCiAgICAjICAgICAgID0gJHJPcHRzX2NvbnRpbnVhdGlvbl9pbmRlbnRhdGlvbiA+ICRyT3B0c19pbmRlbnRfY29sdW1ucyA/IDEgOiAwOwogICAgIyBORVc6ICRzaW5nbGVfbGluZV90b2w9MCAgZml4ZXMgYjEyMTI7IGFuZCBiMTE4MC0xMTgxIHdvcmsgb2sgbm93CiAgICAjICAgICAgICAgICAgICAgICAgICAgID0xICBmb3IgLXZtbGwgYW5kIC1scDsgZml4ZXMgYjE0NTIsIGIxNDUzLCBiMTQ1NAogICAgIyBOT1RFOiB0aGUgY29tYmluYXRpb24gLXZtbGwgYW5kIC1scCBjYW4gYmUgdW5zdGFibGUsIGVzcGVjaWFsbHkgd2hlbgogICAgIyBhbHNvIGNvbWJpbmVkIHdpdGggLXduLiBJdCBtYXkgZXZlbnR1YWxseSBiZSBuZWNlc3NhcnkgdG8gdHVybiBvZmYgLXZtbGwKICAgICMgaWYgLWxwIGlzIHNldC4gRm9yIG5vdywgdGhpcyB3b3Jrcy4gVGhlIHZhbHVlICcxJyBpcyBhIG1pbmltdW0gd2hpY2gKICAgICMgd29ya3MgYnV0IGNhbiBiZSBpbmNyZWFzZWQgaWYgbmVjZXNzYXJ5LgogICAgbXkgJHNpbmdsZV9saW5lX3RvbCA9CiAgICAgICRyT3B0c192YXJpYWJsZV9tYXhpbXVtX2xpbmVfbGVuZ3RoICYmICRyT3B0c19saW5lX3VwX3BhcmVudGhlc2VzCiAgICAgID8gMQogICAgICA6IDA7CgogICAgbXkgJG11bHRpbGluZV90b2wgPSAkc2luZ2xlX2xpbmVfdG9sICsgMSArCiAgICAgIG1heCggJHJPcHRzX2luZGVudF9jb2x1bW5zLCAkck9wdHNfY29udGludWF0aW9uX2luZGVudGF0aW9uICk7CgogICAgIyBEZWZpbmUgYSB3ZWxkaW5nIGN1dG9mZiBsZXZlbDogZG8gbm90IHN0YXJ0IGEgd2VsZCBpZiB0aGUgaW5zaWRlCiAgICAjIGNvbnRhaW5lciBsZXZlbCBlcXVhbHMgb3IgZXhjZWVkcyB0aGlzIGxldmVsLgoKICAgICMgV2UgdXNlIHRoZSBtaW5pbXVtIG9mIHR3byBjcml0ZXJpYSwgZWl0aGVyIG9mIHdoaWNoIG1heSBiZSBtb3JlCiAgICAjIHJlc3RyaWN0aXZlLiAgVGhlICdhbHBoYScgdmFsdWUgaXMgbW9yZSByZXN0cmljdGl2ZSBpbiAoYjEyMDYsIGIxMjUyKSBhbmQKICAgICMgdGhlICdiZXRhJyB2YWx1ZSBpcyBtb3JlIHJlc3RyaWN0aXZlIGluIG90aGVyIGNhc2VzIChiMTI0MykuCiAgICAjIFJlZHVjZWQgYmV0YSB0ZXJtIGZyb20gYmV0YSszIHRvIGJldGErMiB0byBmaXggYjE0MDEuIFByZXZpb3VzbHk6CiAgICAjIG15ICR3ZWxkX2N1dG9mZl9sZXZlbCA9IG1pbigkc3RyZXNzX2xldmVsX2FscGhhLCAkc3RyZXNzX2xldmVsX2JldGEgKyAyKTsKICAgICMgVGhpcyBpcyBub3cgJyRoaWdoX3N0cmVzc19sZXZlbCcuCgogICAgIyBUaGUgdmVydGljYWwgdGlnaHRuZXNzIGZsYWdzIGNhbiB0aHJvdyBvZmYgbGluZSBsZW5ndGggY2FsY3VsYXRpb25zLgogICAgIyBUaGlzIHBhdGNoIHdhcyBhZGRlZCB0byBmaXggaW5zdGFiaWxpdHkgaXNzdWUgYjEyODQuCiAgICAjIEl0IHdvcmtzIHRvIGFsd2F5cyB1c2UgYSB0b2wgb2YgMSBmb3IgMSBsaW5lIGJsb2NrIGxlbmd0aCB0ZXN0cywgYnV0CiAgICAjIHRoaXMgcmVzdHJpY3RlZCB2YWx1ZSBrZWVwcyB0ZXN0IGNhc2Ugd242LnduIHdvcmtpbmcgYXMgYmVmb3JlLgogICAgIyBJdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIGluY2x1ZGUgJ1snIGFuZCAneycgaGVyZSBpbiB0aGUgZnV0dXJlLgogICAgbXkgJG9uZV9saW5lX3RvbCA9ICRvcGVuaW5nX3ZlcnRpY2FsX3RpZ2h0bmVzc3snKCd9ID8gMSA6IDA7CgogICAgIyBBYmJyZXZpYXRpb25zOgogICAgIyAgX29vPW91dGVyIG9wZW5pbmcsIGkuZS4gZmlyc3Qgb2YgIHsgewogICAgIyAgX2lvPWlubmVyIG9wZW5pbmcsIGkuZS4gc2Vjb25kIG9mIHsgewogICAgIyAgX29jPW91dGVyIGNsb3NpbmcsIGkuZS4gc2Vjb25kIG9mIH0gewogICAgIyAgX2ljPWlubmVyIGNsb3NpbmcsIGkuZS4gZmlyc3Qgb2YgIH0gfQoKICAgIG15ICRwcmV2aW91c19wYWlyOwoKICAgICMgTWFpbiBsb29wIG92ZXIgbmVzdGVkIHBhaXJzLi4uCiAgICAjIFdlIGFyZSB3b3JraW5nIGZyb20gb3V0ZXJtb3N0IHRvIGlubmVybW9zdCBwYWlycyBzbyB0aGF0CiAgICAjIGxldmVsIGNoYW5nZXMgd2lsbCBiZSBjb21wbGV0ZSB3aGVuIHdlIGFycml2ZSBhdCB0aGUgaW5uZXIgcGFpcnMuCiAgICB3aGlsZSAoIEB7JHJuZXN0ZWRfcGFpcnN9ICkgewogICAgICAgIG15ICRpdGVtID0gcG9wIEB7JHJuZXN0ZWRfcGFpcnN9OwogICAgICAgIG15ICggJGlubmVyX3NlcW5vLCAkb3V0ZXJfc2Vxbm8gKSA9IEB7JGl0ZW19OwoKICAgICAgICBteSAkS291dGVyX29wZW5pbmcgPSAkS19vcGVuaW5nX2NvbnRhaW5lci0+eyRvdXRlcl9zZXFub307CiAgICAgICAgbXkgJEtpbm5lcl9vcGVuaW5nID0gJEtfb3BlbmluZ19jb250YWluZXItPnskaW5uZXJfc2Vxbm99OwogICAgICAgIG15ICRLb3V0ZXJfY2xvc2luZyA9ICRLX2Nsb3NpbmdfY29udGFpbmVyLT57JG91dGVyX3NlcW5vfTsKICAgICAgICBteSAkS2lubmVyX2Nsb3NpbmcgPSAkS19jbG9zaW5nX2NvbnRhaW5lci0+eyRpbm5lcl9zZXFub307CgogICAgICAgICMgUlVMRTogZG8gbm90IHdlbGQgaWYgaW5uZXIgY29udGFpbmVyIGhhcyA8PSAzIHRva2VucyB1bmxlc3MgdGhlIG5leHQKICAgICAgICAjIHRva2VuIGlzIGEgaGVyZWRvYyAoc28gd2Uga25vdyB0aGVyZSB3aWxsIGJlIG11bHRpcGxlIGxpbmVzKQogICAgICAgIGlmICggJEtpbm5lcl9jbG9zaW5nIC0gJEtpbm5lcl9vcGVuaW5nIDw9IDQgKSB7CiAgICAgICAgICAgIG15ICRLbmV4dF9ub25ibGFuayA9ICRzZWxmLT5LX25leHRfbm9uYmxhbmsoJEtpbm5lcl9vcGVuaW5nKTsKICAgICAgICAgICAgbmV4dCB1bmxlc3MgZGVmaW5lZCgkS25leHRfbm9uYmxhbmspOwogICAgICAgICAgICBteSAkdHlwZSA9ICRyTEwtPlskS25leHRfbm9uYmxhbmtdLT5bX1RZUEVfXTsKICAgICAgICAgICAgbmV4dCB1bmxlc3MgKCAkdHlwZSBlcSAnaCcgKTsKICAgICAgICB9CgogICAgICAgIG15ICRvdXRlcl9vcGVuaW5nID0gJHJMTC0+WyRLb3V0ZXJfb3BlbmluZ107CiAgICAgICAgbXkgJGlubmVyX29wZW5pbmcgPSAkckxMLT5bJEtpbm5lcl9vcGVuaW5nXTsKICAgICAgICBteSAkb3V0ZXJfY2xvc2luZyA9ICRyTEwtPlskS291dGVyX2Nsb3NpbmddOwogICAgICAgIG15ICRpbm5lcl9jbG9zaW5nID0gJHJMTC0+WyRLaW5uZXJfY2xvc2luZ107CgogICAgICAgICMgUlVMRTogZG8gbm90IHdlbGQgdG8gYSBoYXNoIGJyYWNlLiAgVGhlIHJlYXNvbiBpcyB0aGF0IGl0IGhhcyBhIHZlcnkKICAgICAgICAjIHN0cm9uZyBib25kIHN0cmVuZ3RoIHRvIHRoZSBuZXh0IHRva2VuLCBzbyBhIGxpbmUgYnJlYWsgYWZ0ZXIgaXQKICAgICAgICAjIG1heSBub3Qgd29yay4gIFByZXZpb3VzbHkgd2UgYWxsb3dlZCB3ZWxkaW5nIHRvIHNvbWV0aGluZyBsaWtlIEB7CiAgICAgICAgIyBidXQgdGhhdCBjYXVzZWQgYmxpbmtpbmcgc3RhdGVzIChjYXNlcyBiNzUxLCBiNzc5KS4KICAgICAgICBpZiAoICRpbm5lcl9vcGVuaW5nLT5bX1RZUEVfXSBlcSAnTCcgKSB7CiAgICAgICAgICAgIG5leHQ7CiAgICAgICAgfQoKICAgICAgICAjIFJVTEU6IGRvIG5vdCB3ZWxkIHRvIGEgc3F1YXJlIGJyYWNrZXQgd2hpY2ggZG9lcyBub3QgY29udGFpbiBjb21tYXMKICAgICAgICBpZiAoICRpbm5lcl9vcGVuaW5nLT5bX1RZUEVfXSBlcSAnWycgKSB7CiAgICAgICAgICAgIG15ICRydHlwZV9jb3VudCA9ICRzZWxmLT5bX3J0eXBlX2NvdW50X2J5X3NlcW5vX10tPnskaW5uZXJfc2Vxbm99OwogICAgICAgICAgICBuZXh0IHVubGVzcyAoICRydHlwZV9jb3VudCAmJiAkcnR5cGVfY291bnQtPnsnLCd9ICk7CgogICAgICAgICAgICAjIERvIG5vdCB3ZWxkIGlmIHRoZXJlIGlzIHRleHQgYmVmb3JlIGEgJ1snIHN1Y2ggYXMgaGVyZToKICAgICAgICAgICAgIyAgICAgIGN1cnJfb3B0ICggQGJlZyBbMiw1XSApCiAgICAgICAgICAgICMgSXQgd2lsbCBub3QgYnJlYWsgaW50byB0aGUgZGVzaXJlZCBzYW5kd2ljaCBzdHJ1Y3R1cmUuCiAgICAgICAgICAgICMgVGhpcyBmaXhlcyBjYXNlIGIxMDksIDExMC4KICAgICAgICAgICAgbXkgJEtkaWZmID0gJEtpbm5lcl9vcGVuaW5nIC0gJEtvdXRlcl9vcGVuaW5nOwogICAgICAgICAgICBuZXh0IGlmICggJEtkaWZmID4gMiApOwogICAgICAgICAgICBuZXh0CiAgICAgICAgICAgICAgaWYgKCAkS2RpZmYgPT0gMgogICAgICAgICAgICAgICAgJiYgJHJMTC0+WyAkS291dGVyX29wZW5pbmcgKyAxIF0tPltfVFlQRV9dIG5lICdiJyApOwoKICAgICAgICB9CgogICAgICAgICMgUlVMRTogQXZvaWQgd2VsZGluZyB1bmRlciBzdHJlc3MuICBUaGUgaWRlYSBpcyB0aGF0IHdlIG5lZWQgdG8gaGF2ZSBhCiAgICAgICAgIyBsaXR0bGUgc3BhY2UqIHdpdGhpbiBhIHdlbGRlZCBjb250YWluZXIgdG8gYXZvaWQgaW5zdGFiaWxpdHkuICBOb3RlCiAgICAgICAgIyB0aGF0IGFmdGVyIGVhY2ggd2VsZCB0aGUgbGV2ZWwgdmFsdWVzIGFyZSByZWR1Y2VkLCBzbyBsb25nIG11bHRpcGxlCiAgICAgICAgIyB3ZWxkcyBjYW4gc3RpbGwgYmUgbWFkZS4gIFRoaXMgcnVsZSB3aWxsIHNlbGRvbSBiZSBhIGxpbWl0aW5nIGZhY3RvcgogICAgICAgICMgaW4gYWN0dWFsIHdvcmtpbmcgY29kZS4gRml4ZXMgYjEyMDYsIGIxMjQzLgogICAgICAgIG15ICRpbm5lcl9sZXZlbCA9ICRpbm5lcl9vcGVuaW5nLT5bX0xFVkVMX107CiAgICAgICAgaWYgKCAkaW5uZXJfbGV2ZWwgPj0gJGhpZ2hfc3RyZXNzX2xldmVsICkgeyBuZXh0IH0KCiAgICAgICAgIyBleHRyYSB0b2xlcmFuY2UgYWRkZWQgdW5kZXIgaGlnaCBzdHJlc3MgdG8gZml4IGIxNDgxCiAgICAgICAgbXkgJHN0cmVzc190b2wgPSAoICRoaWdoX3N0cmVzc19sZXZlbCAtICRpbm5lcl9sZXZlbCA8PSAxICkgPyAxIDogMDsKCiAgICAgICAgIyBTZXQgZmxhZyBzYXlpbmcgaWYgdGhpcyBwYWlyIHN0YXJ0cyBhIG5ldyB3ZWxkCiAgICAgICAgbXkgJHN0YXJ0aW5nX25ld193ZWxkID0gISggQHdlbGRzICYmICRvdXRlcl9zZXFubyA9PSAkd2VsZHNbLTFdLT5bMF0gKTsKCiAgICAgICAgIyBTZXQgZmxhZyBzYXlpbmcgaWYgdGhpcyBwYWlyIGlzIGFkamFjZW50IHRvIHRoZSBwcmV2aW91cyBuZXN0aW5nIHBhaXIKICAgICAgICAjIChldmVuIGlmIHByZXZpb3VzIHBhaXIgd2FzIHJlamVjdGVkIGFzIGEgd2VsZCkKICAgICAgICBteSAkdG91Y2hfcHJldmlvdXNfcGFpciA9CiAgICAgICAgICBkZWZpbmVkKCRwcmV2aW91c19wYWlyKSAmJiAkb3V0ZXJfc2Vxbm8gPT0gJHByZXZpb3VzX3BhaXItPlswXTsKICAgICAgICAkcHJldmlvdXNfcGFpciA9ICRpdGVtOwoKICAgICAgICBteSAkZG9fbm90X3dlbGRfcnVsZSA9IDA7CiAgICAgICAgbXkgJE1zZyAgICAgICAgICAgICAgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgbXkgJGlzX29uZV9saW5lX3dlbGQ7CgogICAgICAgIG15ICRpbGluZV9vbyA9ICRvdXRlcl9vcGVuaW5nLT5bX0xJTkVfSU5ERVhfXTsKICAgICAgICBteSAkaWxpbmVfaW8gPSAkaW5uZXJfb3BlbmluZy0+W19MSU5FX0lOREVYX107CiAgICAgICAgbXkgJGlsaW5lX2ljID0gJGlubmVyX2Nsb3NpbmctPltfTElORV9JTkRFWF9dOwogICAgICAgIG15ICRpbGluZV9vYyA9ICRvdXRlcl9jbG9zaW5nLT5bX0xJTkVfSU5ERVhfXTsKICAgICAgICBteSAkdG9rZW5fb28gPSAkb3V0ZXJfb3BlbmluZy0+W19UT0tFTl9dOwogICAgICAgIG15ICR0b2tlbl9pbyA9ICRpbm5lcl9vcGVuaW5nLT5bX1RPS0VOX107CgogICAgICAgICMgRE8tTk9ULVdFTEQgUlVMRSA3OiBEbyBub3Qgd2VsZCBpZiB0aGlzIGNvbmZsaWN0cyB3aXRoIC1ib20KICAgICAgICAjIEFkZGVkIGZvciBjYXNlIGI5NzMuIE1vdmVkIGhlcmUgZnJvbSBiZWxvdyB0byBmaXggYjE0MjMuCiAgICAgICAgaWYgKCAgISRkb19ub3Rfd2VsZF9ydWxlCiAgICAgICAgICAgICYmICRyT3B0c19icmVha19hdF9vbGRfbWV0aG9kX2JyZWFrcG9pbnRzCiAgICAgICAgICAgICYmICRpbGluZV9pbyA+ICRpbGluZV9vbyApCiAgICAgICAgewoKICAgICAgICAgICAgZm9yZWFjaCBteSAkaWxpbmUgKCAkaWxpbmVfb28gKyAxIC4uICRpbGluZV9pbyApIHsKICAgICAgICAgICAgICAgIG15ICRyS19yYW5nZSA9ICRybGluZXMtPlskaWxpbmVdLT57X3JLX3JhbmdlfTsKICAgICAgICAgICAgICAgIG5leHQgdW5sZXNzIGRlZmluZWQoJHJLX3JhbmdlKTsKICAgICAgICAgICAgICAgIG15ICggJEtmaXJzdCwgJEtsYXN0X3V1ICkgPSBAeyRyS19yYW5nZX07CiAgICAgICAgICAgICAgICBuZXh0IHVubGVzcyBkZWZpbmVkKCRLZmlyc3QpOwogICAgICAgICAgICAgICAgaWYgKCAkckxMLT5bJEtmaXJzdF0tPltfVFlQRV9dIGVxICctPicgKSB7CiAgICAgICAgICAgICAgICAgICAgJGRvX25vdF93ZWxkX3J1bGUgPSA3OwogICAgICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbmV4dCBpZiAoJGRvX25vdF93ZWxkX3J1bGUpOwoKICAgICAgICAjIFR1cm4gb2ZmIHZlcnRpY2FsIHRpZ2h0bmVzcyBhdCBwb3NzaWJsZSBvbmUtbGluZSB3ZWxkcy4gIEZpeGVzIGIxNDAyLAogICAgICAgICMgYjE0MTksIGIxNDIxLCBiMTQyNCwgYjE0MjUuIFRoaXMgYWxzbyBmaXhlcyBpc3N1ZXMgYjEzMzgsIGIxMzM5LAogICAgICAgICMgYjEzNDAsIGIxMzQxLCBiMTM0MiwgYjEzNDMsIHdoaWNoIHByZXZpb3VzbHkgdXNlZCBhIHNlcGFyYXRlIGZpeC4KICAgICAgICAjIElzc3VlIGMxNjEgaXMgdGhlIGxhdGVzdCBhbmQgc2ltcGxlc3QgY2hlY2ssIHVzaW5nCiAgICAgICAgIyAkaWxpbmVfaWM9PSRpbGluZV9pbyBhcyB0aGUgdGVzdC4KICAgICAgICBpZiAoICAgJW9wZW5pbmdfdmVydGljYWxfdGlnaHRuZXNzCiAgICAgICAgICAgICYmICRpbGluZV9pYyA9PSAkaWxpbmVfaW8KICAgICAgICAgICAgJiYgJG9wZW5pbmdfdmVydGljYWxfdGlnaHRuZXNzeyR0b2tlbl9vb30gKQogICAgICAgIHsKICAgICAgICAgICAgJHJtYXhfdmVydGljYWxfdGlnaHRuZXNzLT57JG91dGVyX3NlcW5vfSA9IDA7CiAgICAgICAgfQoKICAgICAgICBteSAkaXNfbXVsdGlsaW5lX3dlbGQgPQogICAgICAgICAgICAgJGlsaW5lX29vID09ICRpbGluZV9pbwogICAgICAgICAgJiYgJGlsaW5lX2ljID09ICRpbGluZV9vYwogICAgICAgICAgJiYgJGlsaW5lX2lvICE9ICRpbGluZV9pYzsKCiAgICAgICAgaWYgKERFQlVHX1dFTEQpIHsKICAgICAgICAgICAgbXkgJGxlbl9vbyA9ICRyTEwtPlskS291dGVyX29wZW5pbmddLT5bX0NVTVVMQVRJVkVfTEVOR1RIX107CiAgICAgICAgICAgIG15ICRsZW5faW8gPSAkckxMLT5bJEtpbm5lcl9vcGVuaW5nXS0+W19DVU1VTEFUSVZFX0xFTkdUSF9dOwogICAgICAgICAgICAkTXNnIC49IDw8RU9NOwpQYWlyIHNlcW89JG91dGVyX3NlcW5vIHNlcWk9JGlubmVyX3NlcW5vICBsaW5lczogbG9vPSRpbGluZV9vbyBsaW89JGlsaW5lX2lvIGxpYz0kaWxpbmVfaWMgbG9jPSRpbGluZV9vYwpLb289JEtvdXRlcl9vcGVuaW5nIEtpbz0kS2lubmVyX29wZW5pbmcgS2ljPSRLaW5uZXJfY2xvc2luZyBLb2M9JEtvdXRlcl9jbG9zaW5nIGxlbm9vPSRsZW5fb28gbGVuaW89JGxlbl9pbwp0b2tlbnMgJyR0b2tlbl9vbycgLi4gJyR0b2tlbl9pbycKRU9NCiAgICAgICAgfQoKICAgICAgICAjIERPLU5PVC1XRUxEIFJVTEUgMDoKICAgICAgICAjIEF2b2lkIGEgbmV3IHBhcmVuLXBhcmVuIHdlbGQgaWYgaW5uZXIgcGFyZW5zIGFyZSAnc2hlYXJlZCcgKHNlcGFyYXRlZAogICAgICAgICMgYnkgb25lIGxpbmUpLiAgVGhpcyBjYW4gcHJvZHVjZSBpbnN0YWJpbGl0aWVzIChmaXhlcyBiMTI1MCBiMTI1MQogICAgICAgICMgMTI1NikuCiAgICAgICAgaWYgKCAgISRpc19tdWx0aWxpbmVfd2VsZAogICAgICAgICAgICAmJiAkaWxpbmVfaWMgPT0gJGlsaW5lX2lvICsgMQogICAgICAgICAgICAmJiAkdG9rZW5fb28gZXEgJygnCiAgICAgICAgICAgICYmICR0b2tlbl9pbyBlcSAnKCcgKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKERFQlVHX1dFTEQpIHsKICAgICAgICAgICAgICAgICRNc2cgLj0gIlJVTEUgMDogTm90IHdlbGRpbmcgZHVlIHRvIHNoZWFyZWQgaW5uZXIgcGFyZW5zXG4iOwogICAgICAgICAgICAgICAgcHJpbnQgeypTVERPVVR9ICRNc2c7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbmV4dDsKICAgICAgICB9CgogICAgICAgICMgSWYgdGhpcyBwYWlyIGlzIG5vdCBhZGphY2VudCB0byB0aGUgcHJldmlvdXMgcGFpciAoc2tpcHBlZCBvciBub3QpLAogICAgICAgICMgdGhlbiBtZWFzdXJlIGxlbmd0aHMgZnJvbSB0aGUgc3RhcnQgb2YgbGluZSBvZiBvby4KICAgICAgICBpZiAoCiAgICAgICAgICAgICEkdG91Y2hfcHJldmlvdXNfcGFpcgoKICAgICAgICAgICAgIyBBbHNvIGRvIHRoaXMgaWYgcmVzdGFydGluZyBhdCBhIG5ldyBsaW5lOyBmaXhlcyBjYXNlIGI5NjUsIHMwMDEKICAgICAgICAgICAgfHwgKCAhJHdlbGRfY291bnRfdGhpc19zdGFydCAmJiAkaWxpbmVfb28gPiAkaWxpbmVfb3V0ZXJfb3BlbmluZyApCiAgICAgICAgICApCiAgICAgICAgewoKICAgICAgICAgICAgIyBSZW1lbWJlciB0aGUgbGluZSB3ZSBhcmUgdXNpbmcgYXMgYSByZWZlcmVuY2UKICAgICAgICAgICAgJGlsaW5lX291dGVyX29wZW5pbmcgICA9ICRpbGluZV9vbzsKICAgICAgICAgICAgJHdlbGRfY291bnRfdGhpc19zdGFydCA9IDA7CiAgICAgICAgICAgICR3ZWxkX3N0YXJ0c19pbl9ibG9jayAgPSAwOwoKICAgICAgICAgICAgKCBteSAkbmV3X3dlbGRfb2ssICRtYXhpbXVtX3RleHRfbGVuZ3RoLCAkc3RhcnRpbmdfbGVudG90LCBteSAkbXNnICkKICAgICAgICAgICAgICA9ICRzZWxmLT5zZXR1cF9uZXdfd2VsZF9tZWFzdXJlbWVudHMoICRLb3V0ZXJfb3BlbmluZywKICAgICAgICAgICAgICAgICRLaW5uZXJfb3BlbmluZyApOwoKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgISRuZXdfd2VsZF9vawogICAgICAgICAgICAgICAgJiYgKCAgICRpbGluZV9vbyAhPSAkaWxpbmVfaW8KICAgICAgICAgICAgICAgICAgICB8fCAkaWxpbmVfaWMgIT0gJGlsaW5lX29jICkKICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChERUJVR19XRUxEKSB7IHByaW50IHsqU1RET1VUfSAkbXNnIH0KICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRyS19yYW5nZSA9ICRybGluZXMtPlskaWxpbmVfb29dLT57X3JLX3JhbmdlfTsKICAgICAgICAgICAgbXkgKCAkS2ZpcnN0LCAkS2xhc3QgKSA9IEB7JHJLX3JhbmdlfTsKCiAgICAgICAgICAgICMgQW4gZXhpc3Rpbmcgb25lLWxpbmUgd2VsZCBpcyBhIGxpbmUgaW4gd2hpY2gKICAgICAgICAgICAgIyAoMSkgdGhlIGNvbnRhaW5lcnMgYXJlIGFsbCBvbiBvbmUgbGluZSwgYW5kCiAgICAgICAgICAgICMgKDIpIHRoZSBsaW5lIGRvZXMgbm90IGV4Y2VlZCB0aGUgYWxsb3dhYmxlIGxlbmd0aAogICAgICAgICAgICBpZiAoICRpbGluZV9vbyA9PSAkaWxpbmVfb2MgKSB7CgogICAgICAgICAgICAgICAgIyBBbGwgdGhlIHRva2VucyBhcmUgb24gb25lIGxpbmUsIG5vdyBjaGVjayB0aGVpciBsZW5ndGguCiAgICAgICAgICAgICAgICAjIFN0YXJ0IHdpdGggdGhlIGZ1bGwgbGluZSBpbmRleCByYW5nZS4gV2Ugd2lsbCByZWR1Y2UgdGhpcwogICAgICAgICAgICAgICAgIyBpbiB0aGUgY29kaW5nIGJlbG93IGluIHNvbWUgY2FzZXMuCiAgICAgICAgICAgICAgICBteSAkS3N0YXJ0ID0gJEtmaXJzdDsKICAgICAgICAgICAgICAgIG15ICRLc3RvcCAgPSAkS2xhc3Q7CgogICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQgdGhlIGZvbGxvd2luZyBtaW5pbWFsIGNob2ljZSBmb3IgbWVhc3VyaW5nIHdpbGwKICAgICAgICAgICAgICAgICMgd29yayBhbmQgd2lsbCBub3QgY2F1c2UgYW55IGluc3RhYmlsaXRpZXMgYmVjYXVzZSBpdCBpcwogICAgICAgICAgICAgICAgIyBpbnZhcmlhbnQ6CgogICAgICAgICAgICAgICAgIyMgIG15ICRLc3RhcnQgPSAkS291dGVyX29wZW5pbmc7CiAgICAgICAgICAgICAgICAjIyAgbXkgJEtzdG9wICA9ICRLb3V0ZXJfY2xvc2luZzsKCiAgICAgICAgICAgICAgICAjIEJ1dCB0aGF0IGNhbiBsZWFkIHRvIHNvbWUgdW5kZXNpcmFibGUgd2VsZHMuICBTbyBhIGxpdHRsZQogICAgICAgICAgICAgICAgIyBtb3JlIGNvbXBsaWNhdGVkIG1ldGhvZCBoYXMgYmVlbiBkZXZlbG9wZWQuCgogICAgICAgICAgICAgICAgIyBXZSBhcmUgdHJ5aW5nIHRvIGF2b2lkIGNyZWF0aW5nIGJhZCB0d28tbGluZSB3ZWxkcyB3aGVuIHdlIGFyZQogICAgICAgICAgICAgICAgIyB3b3JraW5nIG9uIGxvbmcsIHByZXZpb3VzbHkgdW4td2VsZGVkIGlucHV0IHRleHQsIHN1Y2ggYXMKCiAgICAgICAgICAgICAgICAjIElOUFVUIChleGFtcGxlIG9mIGEgbG9uZyBpbnB1dCBsaW5lIHdlbGQgY2FuZGlkYXRlKToKICAgICAgICAgICAgICAgICMjICRtdXRhdGlvbi0+dHJhbnNwb3MoICRzZWxmLT5STkEtPnBvc2l0aW9uKCRtdXRhdGlvbi0+bGFiZWwsICRhdGdfbGFiZWwpKTsKCiAgICAgICAgICAgICAgICAjICBHT09EIHR3by1saW5lIGJyZWFrOiAobm90IHdlbGRlZDsgcmVzdWx0IG1hcmtlZCB0b28gbG9uZyk6CiAgICAgICAgICAgICAgICAjIyAkbXV0YXRpb24tPnRyYW5zcG9zKAogICAgICAgICAgICAgICAgIyMgICAgICAgICAgICAgICAgICRzZWxmLT5STkEtPnBvc2l0aW9uKCRtdXRhdGlvbi0+bGFiZWwsICRhdGdfbGFiZWwpKTsKCiAgICAgICAgICAgICAgICAjICBCQUQgdHdvLWxpbmUgYnJlYWs6ICh3ZWxkZWQ7IHJlc3VsdCBpZiB3ZSB3ZWxkKToKICAgICAgICAgICAgICAgICMjICRtdXRhdGlvbi0+dHJhbnNwb3MoJHNlbGYtPlJOQS0+cG9zaXRpb24oCiAgICAgICAgICAgICAgICAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG11dGF0aW9uLT5sYWJlbCwgJGF0Z19sYWJlbCkpOwoKICAgICAgICAgICAgICAgICMgV2UgY2FuIG9ubHkgZ2V0IGFuIGFwcHJveGltYXRlIGVzdGltYXRlIG9mIHRoZSBmaW5hbCBsZW5ndGgsCiAgICAgICAgICAgICAgICAjIHNpbmNlIHRoZSBsaW5lIGJyZWFrcyBtYXkgY2hhbmdlLCBhbmQgZm9yIC1scCBtb2RlIGJlY2F1c2UKICAgICAgICAgICAgICAgICMgZXZlbiB0aGUgaW5kZW50YXRpb24gaXMgbm90IHlldCBrbm93bi4KCiAgICAgICAgICAgICAgICBteSAkbGV2ZWxfZmlyc3QgPSAkckxMLT5bJEtmaXJzdF0tPltfTEVWRUxfXTsKICAgICAgICAgICAgICAgIG15ICRsZXZlbF9sYXN0ICA9ICRyTEwtPlskS2xhc3RdLT5bX0xFVkVMX107CiAgICAgICAgICAgICAgICBteSAkbGV2ZWxfb28gICAgPSAkckxMLT5bJEtvdXRlcl9vcGVuaW5nXS0+W19MRVZFTF9dOwogICAgICAgICAgICAgICAgbXkgJGxldmVsX29jICAgID0gJHJMTC0+WyRLb3V0ZXJfY2xvc2luZ10tPltfTEVWRUxfXTsKCiAgICAgICAgICAgICAgICAjIC0gbWVhc3VyZSB0byB0aGUgZW5kIG9mIHRoZSBvcmlnaW5hbCBsaW5lIGlmIGJhbGFuY2VkCiAgICAgICAgICAgICAgICAjIC0gbWVhc3VyZSB0byB0aGUgY2xvc2luZyBjb250YWluZXIgaWYgdW5iYWxhbmNlZCAoZml4ZXMgYjEyMzApCiAgICAgICAgICAgICAgICAjaWYgKCAkbGV2ZWxfZmlyc3QgIT0gJGxldmVsX2xhc3QgKSB7ICRLc3RvcCA9ICRLb3V0ZXJfY2xvc2luZyB9CiAgICAgICAgICAgICAgICBpZiAoICRsZXZlbF9vYyA+ICRsZXZlbF9sYXN0ICkgeyAkS3N0b3AgPSAkS291dGVyX2Nsb3NpbmcgfQoKICAgICAgICAgICAgICAgICMgLSBtZWFzdXJlIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBvcmlnaW5hbCBsaW5lIGlmIGJhbGFuY2VkCiAgICAgICAgICAgICAgICAjIC0gbWVhc3VyZSBmcm9tIHRoZSBtb3N0IHByZXZpb3VzIHRva2VuIHdpdGggc2FtZSBsZXZlbAogICAgICAgICAgICAgICAgIyAgIGlmIHVuYmFsYW5jZWQgKGIxMjMyKQogICAgICAgICAgICAgICAgaWYgKCAkS291dGVyX29wZW5pbmcgPiAkS2ZpcnN0ICYmICRsZXZlbF9vbyA+ICRsZXZlbF9maXJzdCApIHsKICAgICAgICAgICAgICAgICAgICAkS3N0YXJ0ID0gJEtvdXRlcl9vcGVuaW5nOwoKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoCiAgICAgICAgICAgICAgICAgICAgICBteSAkS0sgKCByZXZlcnNlKCAkS2ZpcnN0ICsgMSAuLiAkS291dGVyX29wZW5pbmcgLSAxICkgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBpZiAoICRyTEwtPlskS0tdLT5bX1RZUEVfXSBlcSAnYicgKTsKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCBpZiAoICRyTEwtPlskS0tdLT5bX0xFVkVMX10gPCAkbGV2ZWxfb28gKTsKICAgICAgICAgICAgICAgICAgICAgICAgJEtzdGFydCA9ICRLSzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbXkgJGV4Y2VzcyA9CiAgICAgICAgICAgICAgICAgICRzZWxmLT5leGNlc3NfbGluZV9sZW5ndGhfZm9yX0tyYW5nZSggJEtzdGFydCwgJEtzdG9wICk7CgogICAgICAgICAgICAgICAgIyBDb2Rpbmcgc2ltcGxpZmllZCBoZXJlIGZvciBjYXNlIGIxMjE5LgogICAgICAgICAgICAgICAgIyBJbmNyZWFzZWQgdG9sIGZyb20gMCB0byAxIHdoZW4gcHZ0PjAgdG8gZml4IGIxMjg0LgogICAgICAgICAgICAgICAgJGlzX29uZV9saW5lX3dlbGQgPSAkZXhjZXNzIDw9ICRvbmVfbGluZV90b2w7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgRE8tTk9ULVdFTEQgUlVMRSAxOgogICAgICAgICAgICAjIERvIG5vdCB3ZWxkIHNvbWV0aGluZyB0aGF0IGxvb2tzIGxpa2UgdGhlIHN0YXJ0IG9mIGEgdHdvLWxpbmUKICAgICAgICAgICAgIyBmdW5jdGlvbiBjYWxsLCBsaWtlIHRoaXM6IDw8c25pcHBldHMvd242LmluPj4KICAgICAgICAgICAgIyAgICAkdHJhbnMtPmFkZF90cmFuc2Zvcm1hdGlvbigKICAgICAgICAgICAgIyAgICAgICAgUERMOjpHcmFwaGljczo6VHJpRDo6U2NhbGUtPm5ldyggJHN4LCAkc3ksICRzeiApICk7CiAgICAgICAgICAgICMgV2Ugd2lsbCBsb29rIGZvciBhIHNlbWljb2xvbiBhZnRlciB0aGUgY2xvc2luZyBwYXJlbi4KCiAgICAgICAgICAgICMgV2Ugd2FudCB0byB3ZWxkIHNvbWV0aGluZyBjb21wbGV4LCBsaWtlIHRoaXMgdGhvdWdoCiAgICAgICAgICAgICMgbXkgJGNvbXBhc3MgPSB1Yyggb3Bwb3NpdGVfZGlyZWN0aW9uKCBsaW5lX3RvX2NhbnZhc19kaXJlY3Rpb24oCiAgICAgICAgICAgICMgICAgIEB7ICRjb29yZHNbMF0gfSwgQHsgJGNvb3Jkc1sxXSB9ICkgKSApOwogICAgICAgICAgICAjIE90aGVyd2lzZSB3ZSB3aWxsIGdldCBhICdibGlua2VyJy4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcKICAgICAgICAgICAgIyB3b3VsZCBiZWNvbWUgYSBibGlua2VyIHdpdGhvdXQgdGhpcyBydWxlOgogICAgICAgICAgICAjICAgICAgICAkU2VsZi0+X0FkZCggJFNvcnRPcmRlckRpc3BsYXl7ICRGaWVsZAogICAgICAgICAgICAjICAgICAgICAgICAgICAtPkdlbmVyYXRlRmllbGRGb3JTZWxlY3RTUUwoKSB9ICk7CiAgICAgICAgICAgICMgQnV0IGl0IGlzIG9rYXkgdG8gd2VsZCBhIHR3by1saW5lIHN0YXRlbWVudCBpZiBpdCBsb29rcyBsaWtlCiAgICAgICAgICAgICMgaXQgd2FzIGFscmVhZHkgd2VsZGVkLCBtZWFuaW5nIHRoYXQgdGhlIHR3byBvcGVuaW5nIGNvbnRhaW5lcnMgYXJlCiAgICAgICAgICAgICMgb24gYSBkaWZmZXJlbnQgbGluZSB0aGF0IHRoZSB0d28gY2xvc2luZyBjb250YWluZXJzLiAgVGhpcyBpcwogICAgICAgICAgICAjIG5lY2Vzc2FyeSB0byBwcmV2ZW50IGJsaW5raW5nIG9mIHNvbWV0aGluZyBsaWtlIHRoaXMgd2l0aAogICAgICAgICAgICAjIHBlcmx0aWR5IC13biAtcGJwIChzdGFydGluZyBpbmRlbnRhdGlvbiB0d28gbGV2ZWxzIGRlZXApOgoKICAgICAgICAgICAgIyAkdG9wX2xhYmVsLT5zZXRfdGV4dCggZ2V0dGV4dCgKICAgICAgICAgICAgIyAgICAiVW5hYmxlIHRvIGNyZWF0ZSBwZXJzb25hbCBkaXJlY3RvcnkgLSBjaGVjayBwZXJtaXNzaW9ucy4iKSApOwogICAgICAgICAgICBpZiAoICAgJGlsaW5lX29jID09ICRpbGluZV9vbyArIDEKICAgICAgICAgICAgICAgICYmICRpbGluZV9pbyA9PSAkaWxpbmVfaWMKICAgICAgICAgICAgICAgICYmICR0b2tlbl9vbyBlcSAnKCcgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgIyBMb29rIGZvciBmb2xsb3dpbmcgc2VtaWNvbG9uLi4uCiAgICAgICAgICAgICAgICBteSAkS25leHRfbm9uYmxhbmsgPSAkc2VsZi0+S19uZXh0X25vbmJsYW5rKCRLb3V0ZXJfY2xvc2luZyk7CiAgICAgICAgICAgICAgICBteSAkbmV4dF9ub25ibGFua190eXBlID0KICAgICAgICAgICAgICAgICAgZGVmaW5lZCgkS25leHRfbm9uYmxhbmspCiAgICAgICAgICAgICAgICAgID8gJHJMTC0+WyRLbmV4dF9ub25ibGFua10tPltfVFlQRV9dCiAgICAgICAgICAgICAgICAgIDogJ2InOwogICAgICAgICAgICAgICAgaWYgKCAkbmV4dF9ub25ibGFua190eXBlIGVxICc7JyApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBUaGVuIGRvIG5vdCB3ZWxkIGlmIG5vIG90aGVyIGNvbnRhaW5lcnMgYmV0d2VlbiBpbm5lcgogICAgICAgICAgICAgICAgICAgICMgb3BlbmluZyBhbmQgY2xvc2luZy4KICAgICAgICAgICAgICAgICAgICBteSAkS25leHRfc2VxX2l0ZW0gPSAkcktfbmV4dF9zZXFub19ieV9LLT5bJEtpbm5lcl9vcGVuaW5nXTsKICAgICAgICAgICAgICAgICAgICBpZiAoICRLbmV4dF9zZXFfaXRlbSA9PSAkS2lubmVyX2Nsb3NpbmcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRkb19ub3Rfd2VsZF9ydWxlID0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9ICMjIGVuZCBzdGFydGluZyBuZXcgd2VsZCBzZXF1ZW5jZQoKICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgc2V0IHRoZSAxLWxpbmUgZmxhZyBpZiBjb250aW51aW5nIGEgd2VsZCBzZXF1ZW5jZTsgZml4ZXMgYjEyMzkKICAgICAgICAgICAgJGlzX29uZV9saW5lX3dlbGQgPSAoICRpbGluZV9vbyA9PSAkaWxpbmVfb2MgKTsKICAgICAgICB9CgogICAgICAgICMgRE8tTk9ULVdFTEQgUlVMRSAyOgogICAgICAgICMgRG8gbm90IHdlbGQgYW4gb3BlbmluZyBwYXJlbiB0byBhbiBpbm5lciBvbmUgbGluZSBicmFjZSBibG9jawogICAgICAgICMgV2Ugd2lsbCBqdXN0IHVzZSBvbGQgbGluZSBudW1iZXJzIGZvciB0aGlzIHRlc3QgYW5kIHJlcXVpcmUKICAgICAgICAjIGl0ZXJhdGlvbnMgaWYgbmVjZXNzYXJ5IGZvciBjb252ZXJnZW5jZQoKICAgICAgICAjIEZvciBleGFtcGxlLCBvdGhlcndpc2Ugd2UgY291bGQgY2F1c2UgdGhlIG9wZW5pbmcgcGFyZW4KICAgICAgICAjIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSB0byBzZXBhcmF0ZSBmcm9tIHRoZSBjYWxsZXIgbmFtZQogICAgICAgICMgYXMgaGVyZToKCiAgICAgICAgIyAgICAkX1swXS0+Y29kZV9oYW5kbGVyCiAgICAgICAgIyAgICAgICggc3ViIHsgJG1vcmUgLj0gJF9bMV0gLiAiOiIgLiAkX1swXSAuICJcbiIgfSApOwoKICAgICAgICAjIEhlcmUgaXMgYW5vdGhlciBleGFtcGxlIHdoZXJlIHdlIGRvIG5vdCB3YW50IHRvIHdlbGQ6CiAgICAgICAgIyAgJHdyYXBwZWQtPmFkZF9hcm91bmRfbW9kaWZpZXIoCiAgICAgICAgIyAgICBzdWIgeyBwdXNoIEB0cmFjZWxvZyA9PiAnYXJvdW5kIDEnOyAkX1swXS0+KCk7IH0gKTsKCiAgICAgICAgIyBJZiB0aGUgb25lIGxpbmUgc3ViIGJsb2NrIGdldHMgYnJva2VuIGR1ZSB0byBsZW5ndGggb3IgYnkgdGhlCiAgICAgICAgIyB1c2VyLCB0aGVuIHdlIGNhbiB3ZWxkLiAgVGhlIHJlc3VsdCB3aWxsIHRoZW4gYmU6CiAgICAgICAgIyAkd3JhcHBlZC0+YWRkX2Fyb3VuZF9tb2RpZmllciggc3ViIHsKICAgICAgICAjICAgIHB1c2ggQHRyYWNlbG9nID0+ICdhcm91bmQgMSc7CiAgICAgICAgIyAgICAkX1swXS0+KCk7CiAgICAgICAgIyB9ICk7CgogICAgICAgICMgVXBkYXRlZCB0byBmaXggY2FzZXMgYjEwODIgYjExMDIgYjExMDYgYjExMTU6CiAgICAgICAgIyBBbHNvLCBkbyBub3Qgd2VsZCB0byBhbiBpbnRhY3QgaW5uZXIgYmxvY2sgaWYgdGhlIG91dGVyIG9wZW5pbmcgdG9rZW4KICAgICAgICAjIGlzIG9uIGEgZGlmZmVyZW50IGxpbmUuIEZvciBleGFtcGxlLCB0aGlzIHByZXZlbnRzIG9zY2lsbGF0aW9uCiAgICAgICAgIyBiZXR3ZWVuIHRoZXNlIHR3byBzdGF0ZXMgaW4gY2FzZSBiMTEwNjoKCiAgICAgICAgIyAgICByZXR1cm4gbWFwewogICAgICAgICMgICAgICAgICgkXyxbJHNlbGYtPiRfKEBfWzEuLiQjX10pXSkKICAgICAgICAjICAgIH1AZXZlcnk7CgogICAgICAgICMgICAgcmV0dXJuIG1hcCB7ICgKICAgICAgICAjICAgICAgICAkXywgWyAkc2VsZi0+JF8oIEBfWyAxIC4uICQjXyBdICkgXQogICAgICAgICMgICAgKSB9IEBldmVyeTsKCiAgICAgICAgIyBUaGUgZWZmZWN0IG9mIHRoaXMgY2hhbmdlIG9uIHR5cGljYWwgY29kZSBpcyB2ZXJ5IG1pbmltYWwuICBTb21ldGltZXMKICAgICAgICAjIGl0IG1heSB0YWtlIGEgc2Vjb25kIGl0ZXJhdGlvbiB0byBjb252ZXJnZSwgYnV0IHRoaXMgZ2l2ZXMgcHJvdGVjdGlvbgogICAgICAgICMgYWdhaW5zdCBibGlua2luZy4KICAgICAgICBpZiAoICAgISRkb19ub3Rfd2VsZF9ydWxlCiAgICAgICAgICAgICYmICEkaXNfb25lX2xpbmVfd2VsZAogICAgICAgICAgICAmJiAkaWxpbmVfaWMgPT0gJGlsaW5lX2lvICkKICAgICAgICB7CiAgICAgICAgICAgICRkb19ub3Rfd2VsZF9ydWxlID0gMgogICAgICAgICAgICAgIGlmICggJHRva2VuX29vIGVxICcoJyB8fCAkaWxpbmVfb28gIT0gJGlsaW5lX2lvICk7CiAgICAgICAgfQoKICAgICAgICAjIERPLU5PVC1XRUxEIFJVTEUgMkE6CiAgICAgICAgIyBEbyBub3Qgd2VsZCBhbiBvcGVuaW5nIGFzdWIgYnJhY2UgaW4gLWxwIG1vZGUgaWYgLWFzYmwgaXMgc2V0LiBUaGlzCiAgICAgICAgIyBoZWxwcyBhdm9pZCBpbnN0YWJpbGl0aWVzIGluIG9uZS1saW5lIGJsb2NrIGZvcm1hdGlvbiwgYW5kIGZpeGVzCiAgICAgICAgIyBiMTI0MS4gIFByZXZpb3VzbHksIHRoZSAnJGlzX29uZV9saW5lX3dlbGQnIGZsYWcgd2FzIHRlc3RlZCBoZXJlCiAgICAgICAgIyBpbnN0ZWFkIG9mIC1hc2JsLCBhbmQgdGhpcyBmaXhlZCBtb3N0IGNhc2VzLiBCdXQgaXQgdHVybnMgb3V0IHRoYXQKICAgICAgICAjIHRoZSByZWFsIHByb2JsZW0gd2FzIHRoZSAtYXNibCBmbGFnLCBhbmQgc3dpdGNoaW5nIHRvIHRoaXMgd2FzCiAgICAgICAgIyBuZWNlc3NhcnkgdG8gZml4ZSBiMTI2OC4gIFRoaXMgYWxzbyBmaXhlcyBiMTI2OSwgYjEyNzcsIGIxMjc4LgogICAgICAgIGlmICggICEkZG9fbm90X3dlbGRfcnVsZQogICAgICAgICAgICAmJiAkck9wdHNfbGluZV91cF9wYXJlbnRoZXNlcwogICAgICAgICAgICAmJiAkck9wdHNfYXNibAogICAgICAgICAgICAmJiAkcmlzX2FzdWJfYmxvY2stPnskb3V0ZXJfc2Vxbm99ICkKICAgICAgICB7CiAgICAgICAgICAgICRkb19ub3Rfd2VsZF9ydWxlID0gJzJBJzsKICAgICAgICB9CgogICAgICAgICMgRE8tTk9ULVdFTEQgUlVMRSAzOgogICAgICAgICMgRG8gbm90IHdlbGQgaWYgdGhpcyBtYWtlcyBvdXIgbGluZSB0b28gbG9uZy4KICAgICAgICAjIFVzZSBhIHRvbGVyYW5jZSB3aGljaCBkZXBlbmRzIG9uIGlmIHRoZSBvbGQgdG9rZW5zIHdlcmUgd2VsZGVkCiAgICAgICAgIyAoZml4ZXMgY2FzZXMgYjc0NiBiNzQ4IGI3NDkgYjc1MCBiNzUyIGI3NTMgYjc1NCBiNzU1IGI3NTYgYjc1OCBiNzU5KQogICAgICAgIGlmICggISRkb19ub3Rfd2VsZF9ydWxlICkgewoKICAgICAgICAgICAgIyBNZWFzdXJlIHRvIGEgbGl0dGxlIGJleW9uZCB0aGUgaW5uZXIgb3BlbmluZyB0b2tlbiBpZiBpdCBpcwogICAgICAgICAgICAjIGZvbGxvd2VkIGJ5IGEgYmFyZSB3b3JkLCB3aGljaCBtYXkgaGF2ZSB1bnVzdWFsIGxpbmUgYnJlYWsgcnVsZXMuCgogICAgICAgICAgICAjIE5PVEU6IE9yaWdpbmFsbHkgdGhpcyB3YXMgT0xEIFJVTEUgNjogZG8gbm90IHdlbGQgdG8gYSBjb250YWluZXIKICAgICAgICAgICAgIyB3aGljaCBpcyBmb2xsb3dlZCBvbiB0aGUgc2FtZSBsaW5lIGJ5IGFuIHVua25vd24gYmFyZXdvcmQgdG9rZW4uCiAgICAgICAgICAgICMgVGhpcyBjYW4gY2F1c2UgYmxpbmtlcnMgKGNhc2VzIGI2MjYsIGI2MTEpLiAgQnV0IE9LIHRvIHdlbGQgb25lCiAgICAgICAgICAgICMgbGluZSB3ZWxkcyB0byBmaXggY2FzZXMgYjEwNTcgYjEwNjQuICBGb3IgZ2VuZXJhbGl0eSwgT0xEIFJVTEUgNgogICAgICAgICAgICAjIGhhcyBiZWVuIG1lcmdlZCBpbnRvIFJVTEUgMyBoZXJlIHRvIGFsc28gZml4IGNhc2VzIGIxMDc4IGIxMDkxLgoKICAgICAgICAgICAgbXkgJEtfZm9yX2xlbmd0aCA9ICRLaW5uZXJfb3BlbmluZzsKICAgICAgICAgICAgbXkgJEtuZXh0X2lvICAgICA9ICRzZWxmLT5LX25leHRfbm9uYmxhbmsoJEtpbm5lcl9vcGVuaW5nKTsKICAgICAgICAgICAgbmV4dCB1bmxlc3MgKCBkZWZpbmVkKCRLbmV4dF9pbykgKTsgICAgIyBzaG91bGRuJ3QgaGFwcGVuCiAgICAgICAgICAgIG15ICR0eXBlX2lvX25leHQgPSAkckxMLT5bJEtuZXh0X2lvXS0+W19UWVBFX107CgogICAgICAgICAgICAjIE5vdGU6IG1heSBuZWVkIHRvIGV2ZW50dWFsbHkgYWxzbyBpbmNsdWRlIG90aGVyIHR5cGVzIGhlcmUsCiAgICAgICAgICAgICMgc3VjaCBhcyAnWicgYW5kICdZJzogICBpZiAoJHR5cGVfaW9fbmV4dCA9fiAvXltaWXddJC8pIHsKICAgICAgICAgICAgaWYgKCAkdHlwZV9pb19uZXh0IGVxICd3JyApIHsKICAgICAgICAgICAgICAgIG15ICRLbmV4dF9pbzIgPSAkc2VsZi0+S19uZXh0X25vbmJsYW5rKCRLbmV4dF9pbyk7CiAgICAgICAgICAgICAgICBuZXh0IHVubGVzcyAoIGRlZmluZWQoJEtuZXh0X2lvMikgKTsKICAgICAgICAgICAgICAgIG15ICR0eXBlX2lvX25leHQyID0gJHJMTC0+WyRLbmV4dF9pbzJdLT5bX1RZUEVfXTsKICAgICAgICAgICAgICAgIGlmICggISR0eXBlX29rX2FmdGVyX2JhcmV3b3JkeyR0eXBlX2lvX25leHQyfSApIHsKICAgICAgICAgICAgICAgICAgICAkS19mb3JfbGVuZ3RoID0gJEtuZXh0X2lvMjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBVc2UgYSB0b2xlcmFuY2UgZm9yIHdlbGRzIG92ZXIgbXVsdGlwbGUgbGluZXMgdG8gYXZvaWQgYmxpbmtlcnMuCiAgICAgICAgICAgICMgV2UgY2FuIHVzZSB6ZXJvIHRvbGVyYW5jZSBpZiBpdCBsb29rcyBsaWtlIHdlIGFyZSB3b3JraW5nIG9uIGFuCiAgICAgICAgICAgICMgZXhpc3Rpbmcgd2VsZC4KICAgICAgICAgICAgbXkgJHRvbCA9CiAgICAgICAgICAgICAgICAkaXNfb25lX2xpbmVfd2VsZCB8fCAkaXNfbXVsdGlsaW5lX3dlbGQKICAgICAgICAgICAgICA/ICRzaW5nbGVfbGluZV90b2wKICAgICAgICAgICAgICA6ICRtdWx0aWxpbmVfdG9sOwogICAgICAgICAgICAkdG9sICs9ICRzdHJlc3NfdG9sOwoKICAgICAgICAgICAgIyBCeSBob3cgbWFueSBjaGFyYWN0ZXJzIGRvZXMgdGhpcyBleGNlZWQgdGhlIHRleHQgd2luZG93PwogICAgICAgICAgICBteSAkZXhjZXNzID0KICAgICAgICAgICAgICAkc2VsZi0+Y3VtdWxhdGl2ZV9sZW5ndGhfYmVmb3JlX0soJEtfZm9yX2xlbmd0aCkgLQogICAgICAgICAgICAgICRzdGFydGluZ19sZW50b3QgKyAxICsgJHRvbCAtCiAgICAgICAgICAgICAgJG1heGltdW1fdGV4dF9sZW5ndGg7CgogICAgICAgICAgICAjIE9sZCBwYXRjaDogVXNlICc+PTAnIGluc3RlYWQgb2YgJz4gMCcgaGVyZSB0byBmaXggY2FzZXMgYjk5NSBiOTk4CiAgICAgICAgICAgICMgYjEwMDAgYjEwMDEgYjEwMDcgYjEwMDggYjEwMDkgYjEwMTAgYjEwMTEgYjEwMTIgYjEwMTYgYjEwMTcgYjEwMTgKICAgICAgICAgICAgIyBSZXZpc2VkIHBhdGNoOiBOZXcgdG9sZXJhbmNlIGRlZmluaXRpb24gYWxsb3dzIGdvaW5nIGJhY2sgdG8gJz4gMCcKICAgICAgICAgICAgIyBoZXJlLiAgVGhpcyBmaXhlcyBjYXNlIGIxMTI0LiAgU2VlIGFsc28gY2FzZXMgYjEwODcgYW5kIGIxMDg3YS4KICAgICAgICAgICAgaWYgKCAkZXhjZXNzID4gMCApIHsgJGRvX25vdF93ZWxkX3J1bGUgPSAzIH0KCiAgICAgICAgICAgIGlmIChERUJVR19XRUxEKSB7CiAgICAgICAgICAgICAgICAkTXNnIC49CiJSVUxFIDMgdGVzdDogZXhjZXNzIGxlbmd0aCB0byBLPSRLaW5uZXJfb3BlbmluZyBpcyAkZXhjZXNzID4gMCB3aXRoIHRvbD0gJHRvbCA/KSBcbiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgRE8tTk9ULVdFTEQgUlVMRSA0OyBpbXBsZW1lbnRlZCBmb3IgZ2l0IzEwOgogICAgICAgICMgRG8gbm90IHdlbGQgYW4gb3BlbmluZyAtY2UgYnJhY2UgaWYgdGhlIG5leHQgY29udGFpbmVyIGlzIG9uIGEgc2luZ2xlCiAgICAgICAgIyBsaW5lLCBkaWZmZXJlbnQgZnJvbSB0aGUgb3BlbmluZyBicmFjZS4gKFRoaXMgaXMgdmVyeSByYXJlKS4gIEZvcgogICAgICAgICMgZXhhbXBsZSwgZ2l2ZW4gdGhlIGZvbGxvd2luZyB3aXRoIC1jZSwgd2Ugd2lsbCBhdm9pZCBqb2luaW5nIHRoZSB7CiAgICAgICAgIyBhbmQgWwoKICAgICAgICAjICB9IGVsc2UgewogICAgICAgICMgICAgICBbICRfLCBsZW5ndGgoJF8pIF0KICAgICAgICAjICB9CgogICAgICAgICMgYmVjYXVzZSB0aGlzIHdvdWxkIHByb2R1Y2UgYSB0ZXJtaW5hbCBvbmUtbGluZSBibG9jazoKCiAgICAgICAgIyAgfSBlbHNlIHsgWyAkXywgbGVuZ3RoKCRfKSBdICB9CgogICAgICAgICMgd2hpY2ggbWF5IG5vdCBiZSB3aGF0IGlzIGRlc2lyZWQuIEJ1dCBnaXZlbiB0aGlzIGlucHV0OgoKICAgICAgICAjICB9IGVsc2UgeyBbICRfLCBsZW5ndGgoJF8pIF0gIH0KCiAgICAgICAgIyB0aGVuIHdlIHdpbGwgZG8gdGhlIHdlbGQgYW5kIHJldGFpbiB0aGUgb25lLWxpbmUgYmxvY2sKICAgICAgICBpZiAoICEkZG9fbm90X3dlbGRfcnVsZSAmJiAkck9wdHMtPnsnY3VkZGxlZC1lbHNlJ30gKSB7CiAgICAgICAgICAgIG15ICRibG9ja190eXBlID0gJHJibG9ja190eXBlX29mX3NlcW5vLT57JG91dGVyX3NlcW5vfTsKICAgICAgICAgICAgaWYgKCAkYmxvY2tfdHlwZSAmJiAkcmN1ZGRsZWRfYmxvY2tfdHlwZXMtPnsnKid9LT57JGJsb2NrX3R5cGV9ICkgewogICAgICAgICAgICAgICAgbXkgJGlvX2xpbmUgPSAkaW5uZXJfb3BlbmluZy0+W19MSU5FX0lOREVYX107CiAgICAgICAgICAgICAgICBteSAkaWNfbGluZSA9ICRpbm5lcl9jbG9zaW5nLT5bX0xJTkVfSU5ERVhfXTsKICAgICAgICAgICAgICAgIG15ICRvb19saW5lID0gJG91dGVyX29wZW5pbmctPltfTElORV9JTkRFWF9dOwogICAgICAgICAgICAgICAgaWYgKCAkb29fbGluZSA8ICRpb19saW5lICYmICRpY19saW5lID09ICRpb19saW5lICkgewogICAgICAgICAgICAgICAgICAgICRkb19ub3Rfd2VsZF9ydWxlID0gNDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBETy1OT1QtV0VMRCBSVUxFIDU6IGRvIG5vdCBpbmNsdWRlIHdlbGRzIGV4Y2x1ZGVkIGJ5IHVzZXIKICAgICAgICBpZiAoCiAgICAgICAgICAgICAgISRkb19ub3Rfd2VsZF9ydWxlCiAgICAgICAgICAgICYmICV3ZWxkX25lc3RlZF9leGNsdXNpb25fcnVsZXMKICAgICAgICAgICAgJiYgKCAkc2VsZi0+aXNfZXhjbHVkZWRfd2VsZCggJEtvdXRlcl9vcGVuaW5nLCAkc3RhcnRpbmdfbmV3X3dlbGQgKQogICAgICAgICAgICAgICAgfHwgJHNlbGYtPmlzX2V4Y2x1ZGVkX3dlbGQoICRLaW5uZXJfb3BlbmluZywgMCApICkKICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRkb19ub3Rfd2VsZF9ydWxlID0gNTsKICAgICAgICB9CgogICAgICAgICMgRE8tTk9ULVdFTEQgUlVMRSA2OiBUaGlzIGhhcyBiZWVuIG1lcmdlZCBpbnRvIFJVTEUgMyBhYm92ZS4KCiAgICAgICAgaWYgKCRkb19ub3Rfd2VsZF9ydWxlKSB7CgogICAgICAgICAgICAjIEFmdGVyIG5lZ2xlY3RpbmcgYSBwYWlyLCB3ZSBzdGFydCBtZWFzdXJpbmcgZnJvbSBzdGFydCBvZiBwb2ludAogICAgICAgICAgICAjIGlvIC4uLiBidXQgbm90IGlmIHByZXZpb3VzIHR5cGUgZG9lcyBub3QgbGlrZSB0byBiZSBzZXBhcmF0ZWQKICAgICAgICAgICAgIyBmcm9tIGl0cyBjb250YWluZXIgKGZpeGVzIGNhc2UgYjExODQpCiAgICAgICAgICAgIG15ICRLcHJldiAgICAgPSAkc2VsZi0+S19wcmV2aW91c19ub25ibGFuaygkS2lubmVyX29wZW5pbmcpOwogICAgICAgICAgICBteSAkdHlwZV9wcmV2ID0gZGVmaW5lZCgkS3ByZXYpID8gJHJMTC0+WyRLcHJldl0tPltfVFlQRV9dIDogJ3cnOwogICAgICAgICAgICBpZiAoICEkaGFzX3RpZ2h0X3BhcmVueyR0eXBlX3ByZXZ9ICkgewogICAgICAgICAgICAgICAgbXkgJHN0YXJ0aW5nX2xldmVsICAgID0gJGlubmVyX29wZW5pbmctPltfTEVWRUxfXTsKICAgICAgICAgICAgICAgIG15ICRzdGFydGluZ19jaV9sZXZlbCA9ICRpbm5lcl9vcGVuaW5nLT5bX0NJX0xFVkVMX107CiAgICAgICAgICAgICAgICAkc3RhcnRpbmdfbGVudG90ID0KICAgICAgICAgICAgICAgICAgJHNlbGYtPmN1bXVsYXRpdmVfbGVuZ3RoX2JlZm9yZV9LKCRLaW5uZXJfb3BlbmluZyk7CiAgICAgICAgICAgICAgICAkbWF4aW11bV90ZXh0X2xlbmd0aCA9CiAgICAgICAgICAgICAgICAgICRtYXhpbXVtX3RleHRfbGVuZ3RoX2F0X2xldmVsWyRzdGFydGluZ19sZXZlbF0gLQogICAgICAgICAgICAgICAgICAkc3RhcnRpbmdfY2lfbGV2ZWwgKiAkck9wdHNfY29udGludWF0aW9uX2luZGVudGF0aW9uOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoREVCVUdfV0VMRCkgewogICAgICAgICAgICAgICAgJE1zZyAuPSAiTm90IHdlbGRpbmcgZHVlIHRvIFJVTEUgJGRvX25vdF93ZWxkX3J1bGVcbiI7CiAgICAgICAgICAgICAgICBwcmludCB7KlNURE9VVH0gJE1zZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBOb3JtYWxseSwgYSBicm9rZW4gcGFpciBzaG91bGQgbm90IGRlY3JlYXNlIGluZGVudGF0aW9uIG9mCiAgICAgICAgICAgICMgaW50ZXJtZWRpYXRlIHRva2VuczoKICAgICAgICAgICAgIyMgICAgICBpZiAoICRsYXN0X3BhaXJfYnJva2VuICkgeyBuZXh0IH0KICAgICAgICAgICAgIyBIb3dldmVyLCBmb3IgbG9uZyBzdHJpbmdzIG9mIHdlbGRlZCB0b2tlbnMsIHN1Y2ggYXMgJ3t7e3t7ey4uLicKICAgICAgICAgICAgIyB3ZSB3aWxsIGFsbG93IGJyb2tlbiBwYWlycyB0byBhbHNvIHJlbW92ZSBpbmRlbnRhdGlvbi4KICAgICAgICAgICAgIyBUaGlzIHdpbGwga2VlcCB2ZXJ5IGxvbmcgc3RyaW5ncyBvZiBvcGVuaW5nIGFuZCBjbG9zaW5nCiAgICAgICAgICAgICMgYnJhY2VzIGZyb20gbWFyY2hpbmcgb2ZmIHRvIHRoZSByaWdodC4gIFdlIHdpbGwgZG8gdGhpcyBpZiB0aGUKICAgICAgICAgICAgIyBudW1iZXIgb2YgdG9rZW5zIGluIGEgd2VsZCBiZWZvcmUgdGhlIGJyb2tlbiB3ZWxkIGlzIDQgb3IgbW9yZS4KICAgICAgICAgICAgIyBUaGlzIHJ1bGUgd2lsbCBtYWlubHkgYmUgbmVlZGVkIGZvciB0ZXN0IHNjcmlwdHMsIHNpbmNlIHR5cGljYWwKICAgICAgICAgICAgIyB3ZWxkcyBoYXZlIGZld2VyIHRoYW4gYWJvdXQgNCB3ZWxkZWQgdG9rZW5zLgogICAgICAgICAgICBpZiAoICFAd2VsZHMgfHwgQHsgJHdlbGRzWy0xXSB9IDwgNCApIHsgbmV4dCB9CiAgICAgICAgfQoKICAgICAgICAjIG90aGVyd2lzZSBzdGFydCBuZXcgd2VsZCAuLi4KICAgICAgICBlbHNpZiAoJHN0YXJ0aW5nX25ld193ZWxkKSB7CiAgICAgICAgICAgICR3ZWxkX2NvdW50X3RoaXNfc3RhcnQrKzsKICAgICAgICAgICAgaWYgKERFQlVHX1dFTEQpIHsKICAgICAgICAgICAgICAgICRNc2cgLj0gIlN0YXJ0aW5nIG5ldyB3ZWxkXG4iOwogICAgICAgICAgICAgICAgcHJpbnQgeypTVERPVVR9ICRNc2c7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcHVzaCBAd2VsZHMsICRpdGVtOwoKICAgICAgICAgICAgbXkgJHBhcmVudF9zZXFubyA9ICRzZWxmLT5wYXJlbnRfc2Vxbm9fYnlfSygkS291dGVyX2Nsb3NpbmcpOwogICAgICAgICAgICAkd2VsZF9zdGFydHNfaW5fYmxvY2sgPSAkcGFyZW50X3NlcW5vID09IFNFUV9ST09UCiAgICAgICAgICAgICAgfHwgJHJibG9ja190eXBlX29mX3NlcW5vLT57JHBhcmVudF9zZXFub307CgogICAgICAgICAgICAkcktfd2VsZF9yaWdodC0+eyRLb3V0ZXJfb3BlbmluZ30gPSAkS2lubmVyX29wZW5pbmc7CiAgICAgICAgICAgICRyS193ZWxkX2xlZnQtPnskS2lubmVyX29wZW5pbmd9ICA9ICRLb3V0ZXJfb3BlbmluZzsKCiAgICAgICAgICAgICRyS193ZWxkX3JpZ2h0LT57JEtpbm5lcl9jbG9zaW5nfSA9ICRLb3V0ZXJfY2xvc2luZzsKICAgICAgICAgICAgJHJLX3dlbGRfbGVmdC0+eyRLb3V0ZXJfY2xvc2luZ30gID0gJEtpbm5lcl9jbG9zaW5nOwogICAgICAgIH0KCiAgICAgICAgIyAuLi4gb3IgZXh0ZW5kIGN1cnJlbnQgd2VsZAogICAgICAgIGVsc2UgewogICAgICAgICAgICAkd2VsZF9jb3VudF90aGlzX3N0YXJ0Kys7CiAgICAgICAgICAgIGlmIChERUJVR19XRUxEKSB7CiAgICAgICAgICAgICAgICAkTXNnIC49ICJFeHRlbmRpbmcgY3VycmVudCB3ZWxkXG4iOwogICAgICAgICAgICAgICAgcHJpbnQgeypTVERPVVR9ICRNc2c7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdW5zaGlmdCBAeyAkd2VsZHNbLTFdIH0sICRpbm5lcl9zZXFubzsKICAgICAgICAgICAgJHJLX3dlbGRfcmlnaHQtPnskS291dGVyX29wZW5pbmd9ID0gJEtpbm5lcl9vcGVuaW5nOwogICAgICAgICAgICAkcktfd2VsZF9sZWZ0LT57JEtpbm5lcl9vcGVuaW5nfSAgPSAkS291dGVyX29wZW5pbmc7CgogICAgICAgICAgICAkcktfd2VsZF9yaWdodC0+eyRLaW5uZXJfY2xvc2luZ30gPSAkS291dGVyX2Nsb3Npbmc7CiAgICAgICAgICAgICRyS193ZWxkX2xlZnQtPnskS291dGVyX2Nsb3Npbmd9ICA9ICRLaW5uZXJfY2xvc2luZzsKCiAgICAgICAgICAgICMgS2VlcCBhIGJyb2tlbiBjb250YWluZXIgYnJva2VuIGF0IG11bHRpcGxlIHdlbGRzLiAgVGhpcyBtaWdodAogICAgICAgICAgICAjIGFsc28gYmUgdXNlZnVsIGZvciBzaW1wbGUgd2VsZHMsIGJ1dCBmb3Igbm93IGl0IGlzIHJlc3RyaWN0ZWQKICAgICAgICAgICAgIyB0byBtdWx0aXBsZSB3ZWxkcyB0byBtaW5pbWl6ZSBjaGFuZ2VzIHRvIGV4aXN0aW5nIGNvZGluZy4gIFRoaXMKICAgICAgICAgICAgIyBmaXhlcyBiMTQyOSwgYjE0MzAuICBVcGRhdGVkIGZvciBpc3N1ZSBjMTk4OiBidXQgYWxsb3cgYQogICAgICAgICAgICAjIGxpbmUgZGlmZmVyZW5jZXMgb2YgMSAoc2ltcGxlIHNoZWFyKSBzbyB0aGF0IGEgc2ltcGxlIHNoZWFyCiAgICAgICAgICAgICMgY2FuIHJlbWFpbiBvciBiZWNvbWUgYSBzaW5nbGUgbGluZS4KICAgICAgICAgICAgaWYgKCAkaWxpbmVfaWMgLSAkaWxpbmVfaW8gPiAxICkgewoKICAgICAgICAgICAgICAgICMgT25seSBzZXQgdGhpcyBicmVhayBpZiBpdCBpcyB0aGUgbGFzdCBwb3NzaWJsZSB3ZWxkIGluIHRoaXMKICAgICAgICAgICAgICAgICMgY2hhaW4uICBUaGlzIHdpbGwga2VlcCBzb21lIGV4dHJlbWUgdGVzdCBjYXNlcyB1bmNoYW5nZWQuCiAgICAgICAgICAgICAgICBteSAkaXNfY2hhaW5fZW5kID0gIUB7JHJuZXN0ZWRfcGFpcnN9CiAgICAgICAgICAgICAgICAgIHx8ICRybmVzdGVkX3BhaXJzLT5bLTFdLT5bMV0gIT0gJGlubmVyX3NlcW5vOwogICAgICAgICAgICAgICAgaWYgKCRpc19jaGFpbl9lbmQpIHsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+W19yYnJlYWtfY29udGFpbmVyX10tPnskaW5uZXJfc2Vxbm99ID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBBZnRlciB3ZWxkaW5nLCByZWR1Y2UgdGhlIGluZGVudGF0aW9uIGxldmVsIGlmIGFsbCBpbnRlcm1lZGlhdGUgdG9rZW5zCiAgICAgICAgbXkgJGRsZXZlbCA9ICRvdXRlcl9vcGVuaW5nLT5bX0xFVkVMX10gLSAkaW5uZXJfb3BlbmluZy0+W19MRVZFTF9dOwogICAgICAgIGlmICggJGRsZXZlbCAhPSAwICkgewogICAgICAgICAgICBteSAkS3N0YXJ0ID0gJEtpbm5lcl9vcGVuaW5nOwogICAgICAgICAgICBteSAkS3N0b3AgID0gJEtpbm5lcl9jbG9zaW5nOwogICAgICAgICAgICBmb3JlYWNoIG15ICRLSyAoICRLc3RhcnQgLi4gJEtzdG9wICkgewogICAgICAgICAgICAgICAgJHJMTC0+WyRLS10tPltfTEVWRUxfXSArPSAkZGxldmVsOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIENvcHkgb3BlbmluZyBjaSBsZXZlbCB0byBoZWxwIGJyZWFrIGF0ID0gZm9yIC1scCBtb2RlIChjYXNlIGIxMTI0KQogICAgICAgICAgICAkckxMLT5bJEtpbm5lcl9vcGVuaW5nXS0+W19DSV9MRVZFTF9dID0KICAgICAgICAgICAgICAkckxMLT5bJEtvdXRlcl9vcGVuaW5nXS0+W19DSV9MRVZFTF9dOwoKICAgICAgICAgICAgIyBCdXQgb25seSBjb3B5IHRoZSBjbG9zaW5nIGNpIGxldmVsIGlmIHRoZSBvdXRlciBjb250YWluZXIgaXMKICAgICAgICAgICAgIyBpbiBhIGJsb2NrOyBvdGhlcndpc2UgcG9vciByZXN1bHRzIGNhbiBiZSBwcm9kdWNlZC4KICAgICAgICAgICAgaWYgKCR3ZWxkX3N0YXJ0c19pbl9ibG9jaykgewogICAgICAgICAgICAgICAgJHJMTC0+WyRLaW5uZXJfY2xvc2luZ10tPltfQ0lfTEVWRUxfXSA9CiAgICAgICAgICAgICAgICAgICRyTEwtPlskS291dGVyX2Nsb3NpbmddLT5bX0NJX0xFVkVMX107CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9ICMjIGVuZCB3aGlsZSAoIEB7JHJuZXN0ZWRfcGFpcnN9KQoKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHdlbGRfbmVzdGVkX2NvbnRhaW5lcnMKCnN1YiB3ZWxkX25lc3RlZF9xdW90ZXMgewoKICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgIyBDYWxsZWQgb25jZSBwZXIgZmlsZSBmb3Igb3B0aW9uICctLXdlbGQtbmVzdGVkLWNvbnRhaW5lcnMnLiBUaGlzCiAgICAjIGRvZXMgd2VsZGluZyBvbiBxdyBxdW90ZXMuCgogICAgIyBTZWUgaWYgcXVvdGVzIGFyZSBleGNsdWRlZCBmcm9tIHdlbGRpbmcKICAgIG15ICRyZmxhZ3MgPSAkd2VsZF9uZXN0ZWRfZXhjbHVzaW9uX3J1bGVzeydxJ307CiAgICByZXR1cm4gaWYgKCBkZWZpbmVkKCRyZmxhZ3MpICYmIGRlZmluZWQoICRyZmxhZ3MtPlsxXSApICk7CgogICAgbXkgJHJMTCA9ICRzZWxmLT5bX3JMTF9dOwogICAgcmV0dXJuIHVubGVzcyAoIGRlZmluZWQoJHJMTCkgJiYgQHskckxMfSApOwogICAgbXkgJE51bSA9IEB7JHJMTH07CgogICAgbXkgJHJLX3dlbGRfbGVmdCAgICAgICAgPSAkc2VsZi0+W19yS193ZWxkX2xlZnRfXTsKICAgIG15ICRyS193ZWxkX3JpZ2h0ICAgICAgID0gJHNlbGYtPltfcktfd2VsZF9yaWdodF9dOwogICAgbXkgJEtfb3BlbmluZ19jb250YWluZXIgPSAkc2VsZi0+W19LX29wZW5pbmdfY29udGFpbmVyX107CiAgICBteSAkS19jbG9zaW5nX2NvbnRhaW5lciA9ICRzZWxmLT5bX0tfY2xvc2luZ19jb250YWluZXJfXTsKICAgIG15ICRybGluZXMgICAgICAgICAgICAgID0gJHNlbGYtPltfcmxpbmVzX107CgogICAgbXkgJHN0YXJ0aW5nX2xlbnRvdDsKICAgIG15ICRtYXhpbXVtX3RleHRfbGVuZ3RoOwoKICAgIG15ICRpc19zaW5nbGVfcXVvdGUgPSBzdWIgewogICAgICAgIG15ICggJEtiZWcsICRLZW5kLCAkcXVvdGVfdHlwZSApID0gQF87CiAgICAgICAgZm9yZWFjaCBteSAkSyAoICRLYmVnIC4uICRLZW5kICkgewogICAgICAgICAgICBteSAkdGVzdF90eXBlID0gJHJMTC0+WyRLXS0+W19UWVBFX107CiAgICAgICAgICAgIG5leHQgICBpZiAoICR0ZXN0X3R5cGUgZXEgJ2InICk7CiAgICAgICAgICAgIHJldHVybiBpZiAoICR0ZXN0X3R5cGUgbmUgJHF1b3RlX3R5cGUgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIDE7CiAgICB9OyAjIyBlbmQgJGlzX3NpbmdsZV9xdW90ZSA9IHN1YgoKICAgICMgTGVuZ3RoIHRvbGVyYW5jZSAtIHNhbWUgYXMgcHJldmlvdXNseSB1c2VkIGZvciBzdWIgd2VsZF9uZXN0ZWQKICAgIG15ICRtdWx0aWxpbmVfdG9sID0KICAgICAgMSArIG1heCggJHJPcHRzX2luZGVudF9jb2x1bW5zLCAkck9wdHNfY29udGludWF0aW9uX2luZGVudGF0aW9uICk7CgogICAgIyBsb29rIGZvciBzaW5nbGUgcXcgcXVvdGVzIG5lc3RlZCBpbiBjb250YWluZXJzCiAgICBmb3JlYWNoIG15ICRvdXRlcl9zZXFubyAoIGtleXMgJXskS19vcGVuaW5nX2NvbnRhaW5lcn0gKSB7CiAgICAgICAgbXkgJEtvdXRlcl9vcGVuaW5nID0gJEtfb3BlbmluZ19jb250YWluZXItPnskb3V0ZXJfc2Vxbm99OwoKICAgICAgICAjIHNlZSBpZiB0aGUgbmV4dCB0b2tlbiBpcyBhIHF1b3RlIG9mIHNvbWUgdHlwZQogICAgICAgIG15ICRLbiA9ICRLb3V0ZXJfb3BlbmluZyArIDE7CiAgICAgICAgbmV4dCBpZiAoICRLbiA+PSAkTnVtIC0gMSApOwogICAgICAgIG15ICRuZXh0X3R5cGUgPSAkckxMLT5bJEtuXS0+W19UWVBFX107CiAgICAgICAgaWYgKCAkbmV4dF90eXBlIGVxICdiJyApIHsKICAgICAgICAgICAgJG5leHRfdHlwZSA9ICRyTEwtPlsgKyskS24gXS0+W19UWVBFX107CiAgICAgICAgfQoKICAgICAgICBuZXh0IGlmICggJG5leHRfdHlwZSBuZSAncScgJiYgJG5leHRfdHlwZSBuZSAnUScgKTsKICAgICAgICBteSAkbmV4dF90b2tlbiA9ICRyTEwtPlskS25dLT5bX1RPS0VOX107CiAgICAgICAgbmV4dCBpZiAoIHN1YnN0ciggJG5leHRfdG9rZW4sIDAsIDEgKSBuZSAncScgKTsKCiAgICAgICAgIyBUaGUgdG9rZW4gYmVmb3JlIHRoZSBjbG9zaW5nIGNvbnRhaW5lciBtdXN0IGFsc28gYmUgYSBxdW90ZQogICAgICAgIG15ICRLb3V0ZXJfY2xvc2luZyA9ICRLX2Nsb3NpbmdfY29udGFpbmVyLT57JG91dGVyX3NlcW5vfTsKICAgICAgICBteSAkS2lubmVyX2Nsb3NpbmcgPSAkc2VsZi0+S19wcmV2aW91c19ub25ibGFuaygkS291dGVyX2Nsb3NpbmcpOwogICAgICAgIG5leHQgdW5sZXNzICggJHJMTC0+WyRLaW5uZXJfY2xvc2luZ10tPltfVFlQRV9dIGVxICRuZXh0X3R5cGUgKTsKCiAgICAgICAgIyBUaGlzIGlzIGFuIGlubmVyIG9wZW5pbmcgY29udGFpbmVyCiAgICAgICAgbXkgJEtpbm5lcl9vcGVuaW5nID0gJEtuOwoKICAgICAgICAjIERvIG5vdCB3ZWxkIHRvIHNpbmdsZS1saW5lIHF1b3Rlcy4gTm90aGluZyBpcyBnYWluZWQsIGFuZCBpdCBtYXkKICAgICAgICAjIGxvb2sgYmFkLgogICAgICAgIG5leHQgaWYgKCAkS2lubmVyX2Nsb3NpbmcgPT0gJEtpbm5lcl9vcGVuaW5nICk7CgogICAgICAgICMgUlVMRTogQXZvaWQgd2VsZGluZyB1bmRlciBzdHJlc3MuIFRoaXMgaXMgYW4gYWx0ZXJuYXRlIGIxNTAyIGZpeC4KICAgICAgICBteSAkaW5uZXJfbGV2ZWwgPSAkckxMLT5bJEtpbm5lcl9vcGVuaW5nXS0+W19MRVZFTF9dOwogICAgICAgIGlmICggJGlubmVyX2xldmVsID49ICRoaWdoX3N0cmVzc19sZXZlbCApIHsgbmV4dCB9CgogICAgICAgICMgT25seSB3ZWxkIHRvIHF1b3RlcyBkZWxpbWl0ZWQgd2l0aCBjb250YWluZXIgdG9rZW5zLiBUaGlzIGlzCiAgICAgICAgIyBiZWNhdXNlIHdlbGRpbmcgdG8gYXJiaXRyYXJ5IHF1b3RlIGRlbGltaXRlcnMgY2FuIHByb2R1Y2UgY29kZQogICAgICAgICMgd2hpY2ggaXMgbGVzcyByZWFkYWJsZSB0aGFuIHdpdGhvdXQgd2VsZGluZy4KICAgICAgICBteSAkY2xvc2luZ19kZWxpbWl0ZXIgPQogICAgICAgICAgc3Vic3RyKCAkckxMLT5bJEtpbm5lcl9jbG9zaW5nXS0+W19UT0tFTl9dLCAtMSwgMSApOwogICAgICAgIG5leHQKICAgICAgICAgIHVubGVzcyAoICRpc19jbG9zaW5nX3Rva2VueyRjbG9zaW5nX2RlbGltaXRlcn0KICAgICAgICAgICAgfHwgJGNsb3NpbmdfZGVsaW1pdGVyIGVxICc+JyApOwoKICAgICAgICAjIE5vdyBtYWtlIHN1cmUgdGhhdCB0aGVyZSBpcyBqdXN0IGEgc2luZ2xlIHF1b3RlIGluIHRoZSBjb250YWluZXIKICAgICAgICBuZXh0CiAgICAgICAgICB1bmxlc3MgKAogICAgICAgICAgICAkaXNfc2luZ2xlX3F1b3RlLT4oCiAgICAgICAgICAgICAgICAkS2lubmVyX29wZW5pbmcgKyAxLAogICAgICAgICAgICAgICAgJEtpbm5lcl9jbG9zaW5nIC0gMSwKICAgICAgICAgICAgICAgICRuZXh0X3R5cGUKICAgICAgICAgICAgKQogICAgICAgICAgKTsKCiAgICAgICAgIyBPSzogVGhpcyBpcyBhIGNhbmRpZGF0ZSBmb3Igd2VsZGluZwogICAgICAgIG15ICRNc2cgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgbXkgJGRvX25vdF93ZWxkOwoKICAgICAgICBteSAkaWxpbmVfb28gICAgPSAkckxMLT5bJEtvdXRlcl9vcGVuaW5nXS0+W19MSU5FX0lOREVYX107CiAgICAgICAgbXkgJGlsaW5lX2lvICAgID0gJHJMTC0+WyRLaW5uZXJfb3BlbmluZ10tPltfTElORV9JTkRFWF9dOwogICAgICAgIG15ICRpbGluZV9vYyAgICA9ICRyTEwtPlskS291dGVyX2Nsb3NpbmddLT5bX0xJTkVfSU5ERVhfXTsKICAgICAgICBteSAkaWxpbmVfaWMgICAgPSAkckxMLT5bJEtpbm5lcl9jbG9zaW5nXS0+W19MSU5FX0lOREVYX107CiAgICAgICAgbXkgJGlzX29sZF93ZWxkID0gKCAkaWxpbmVfb28gPT0gJGlsaW5lX2lvICYmICRpbGluZV9pYyA9PSAkaWxpbmVfb2MgKTsKCiAgICAgICAgIyBGaXggZm9yIGNhc2UgYjExODkuIElmIHF1b3RlIGlzIG1hcmtlZCBhcyB0eXBlICdRJyB0aGVuIG9ubHkgd2VsZAogICAgICAgICMgaWYgdGhlIHR3byBjbG9zaW5nIHRva2VucyBhcmUgb24gdGhlIHNhbWUgaW5wdXQgbGluZS4gIE90aGVyd2lzZSwKICAgICAgICAjIHRoZSBjbG9zaW5nIGxpbmUgd2lsbCBiZSBvdXRwdXQgZWFybGllciBpbiB0aGUgcGlwZWxpbmUgdGhhbgogICAgICAgICMgb3RoZXIgQ09ERSBsaW5lcyBhbmQgd2VsZGluZyB3aWxsIG5vdCBhY3R1YWxseSBvY2N1ci4gVGhpcyB3aWxsCiAgICAgICAgIyBsZWF2ZSBhIGhhbGYtd2VsZGVkIHN0cnVjdHVyZSB3aXRoIHBvdGVudGlhbCBmb3JtYXR0aW5nCiAgICAgICAgIyBpbnN0YWJpbGl0eS4gIFRoaXMgbWlnaHQgYmUgZml4ZWQgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIGEgd2VsZCBvbgogICAgICAgICMgYSBjbG9zaW5nIFEgdG9rZW4gYW5kIHNlbmRpbmcgaXQgZG93biB0aGUgbm9ybWFsIGNoYW5uZWwsIGJ1dCBpdAogICAgICAgICMgd291bGQgY29tcGxpY2F0ZSB0aGUgY29kZSBhbmQgaXMgcG90ZW50aWFsbHkgcmlza3kuCiAgICAgICAgbmV4dAogICAgICAgICAgaWYgKCEkaXNfb2xkX3dlbGQKICAgICAgICAgICAgJiYgJG5leHRfdHlwZSBlcSAnUScKICAgICAgICAgICAgJiYgJGlsaW5lX2ljICE9ICRpbGluZV9vYyApOwoKICAgICAgICAjIElmIHdlbGRlZCwgdGhlIGxpbmUgbXVzdCBub3QgZXhjZWVkIGFsbG93ZWQgbGluZSBsZW5ndGgKICAgICAgICAoIG15ICRva190b193ZWxkLCAkbWF4aW11bV90ZXh0X2xlbmd0aCwgJHN0YXJ0aW5nX2xlbnRvdCwgbXkgJG1zZyApID0KICAgICAgICAgICRzZWxmLT5zZXR1cF9uZXdfd2VsZF9tZWFzdXJlbWVudHMoICRLb3V0ZXJfb3BlbmluZywKICAgICAgICAgICAgJEtpbm5lcl9vcGVuaW5nICk7CiAgICAgICAgaWYgKCAhJG9rX3RvX3dlbGQgKSB7CiAgICAgICAgICAgIGlmIChERUJVR19XRUxEKSB7IHByaW50IHsqU1RET1VUfSAkbXNnIH0KICAgICAgICAgICAgbmV4dDsKICAgICAgICB9CgogICAgICAgIG15ICRsZW5ndGggPQogICAgICAgICAgJHJMTC0+WyRLaW5uZXJfb3BlbmluZ10tPltfQ1VNVUxBVElWRV9MRU5HVEhfXSAtICRzdGFydGluZ19sZW50b3Q7CiAgICAgICAgbXkgJGV4Y2VzcyA9ICRsZW5ndGggKyAkbXVsdGlsaW5lX3RvbCAtICRtYXhpbXVtX3RleHRfbGVuZ3RoOwoKICAgICAgICBteSAkZXhjZXNzX21heCA9ICggJGlzX29sZF93ZWxkID8gJG11bHRpbGluZV90b2wgOiAwICk7CiAgICAgICAgaWYgKCAkZXhjZXNzID49ICRleGNlc3NfbWF4ICkgewogICAgICAgICAgICAkZG9fbm90X3dlbGQgPSAxOwogICAgICAgIH0KCiAgICAgICAgaWYgKERFQlVHX1dFTEQpIHsKICAgICAgICAgICAgaWYgKCAhJGlzX29sZF93ZWxkICkgeyAkaXNfb2xkX3dlbGQgPSBFTVBUWV9TVFJJTkcgfQogICAgICAgICAgICAkTXNnIC49CiJleGNlc3M9JGV4Y2Vzcz49JGV4Y2Vzc19tYXgsIG11bHRpbGluZV90b2w9JG11bHRpbGluZV90b2wsIGlzX29sZF93ZWxkPSckaXNfb2xkX3dlbGQnXG4iOwogICAgICAgIH0KCiAgICAgICAgIyBDaGVjayB3ZWxkIGV4Y2x1c2lvbiBydWxlcyBmb3Igb3V0ZXIgY29udGFpbmVyCiAgICAgICAgaWYgKCAhJGRvX25vdF93ZWxkICkgewogICAgICAgICAgICBteSAkaXNfbGVhZGluZyA9ICFkZWZpbmVkKCAkcktfd2VsZF9sZWZ0LT57JEtvdXRlcl9vcGVuaW5nfSApOwogICAgICAgICAgICBpZiAoICRzZWxmLT5pc19leGNsdWRlZF93ZWxkKCAkS291dGVyX29wZW5pbmcsICRpc19sZWFkaW5nICkgKSB7CiAgICAgICAgICAgICAgICBpZiAoREVCVUdfV0VMRCkgewogICAgICAgICAgICAgICAgICAgICRNc2cgLj0KIk5vIHF3IHdlbGQgZHVlIHRvIHdlbGQgZXhjbHVzaW9uIHJ1bGVzIGZvciBvdXRlciBjb250YWluZXJcbiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkZG9fbm90X3dlbGQgPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIENoZWNrIHRoZSBsZW5ndGggb2YgdGhlIGxhc3QgbGluZSAoZml4ZXMgY2FzZSBiMTAzOSkKICAgICAgICBpZiAoICEkZG9fbm90X3dlbGQgKSB7CiAgICAgICAgICAgIG15ICRyS19yYW5nZV9pYyA9ICRybGluZXMtPlskaWxpbmVfaWNdLT57X3JLX3JhbmdlfTsKICAgICAgICAgICAgbXkgKCAkS2ZpcnN0X2ljLCAkS2xhc3RfaWNfdXUgKSA9IEB7JHJLX3JhbmdlX2ljfTsKICAgICAgICAgICAgbXkgJGV4Y2Vzc19pYyA9CiAgICAgICAgICAgICAgJHNlbGYtPmV4Y2Vzc19saW5lX2xlbmd0aF9mb3JfS3JhbmdlKCAkS2ZpcnN0X2ljLAogICAgICAgICAgICAgICAgJEtvdXRlcl9jbG9zaW5nICk7CgogICAgICAgICAgICAjIEFsbG93IGV4dHJhIHNwYWNlIGZvciBhZGRpdGlvbmFsIHdlbGRlZCBjbG9zaW5nIGNvbnRhaW5lcihzKQogICAgICAgICAgICAjIGFuZCBhIHNwYWNlIGFuZCBjb21tYSBvciBzZW1pY29sb24uCiAgICAgICAgICAgICMgTk9URTogd2VsZCBsZW4gaGFzIG5vdCBiZWVuIGNvbXB1dGVkIHlldC4gVXNlIDIgc3BhY2VzCiAgICAgICAgICAgICMgZm9yIG5vdywgY29ycmVjdCBmb3IgYSBzaW5nbGUgd2VsZC4gVGhpcyBlc3RpbWF0ZSBjb3VsZAogICAgICAgICAgICAjIGJlIG1hZGUgbW9yZSBhY2N1cmF0ZSBpZiBuZWNlc3NhcnkuCiAgICAgICAgICAgIG15ICR3ZWxkX2xlbiA9IGRlZmluZWQoICRyS193ZWxkX3JpZ2h0LT57JEtvdXRlcl9jbG9zaW5nfSApID8gMiA6IDA7CiAgICAgICAgICAgIGlmICggJGV4Y2Vzc19pYyArICR3ZWxkX2xlbiArIDIgPiAwICkgewogICAgICAgICAgICAgICAgaWYgKERFQlVHX1dFTEQpIHsKICAgICAgICAgICAgICAgICAgICAkTXNnIC49CiJObyBxdyB3ZWxkIGR1ZSB0byBleGNlc3MgZW5kaW5nIGxpbmUgbGVuZ3RoPSRleGNlc3NfaWMgKyAkd2VsZF9sZW4gKyAyID4gMFxuIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRkb19ub3Rfd2VsZCA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgkZG9fbm90X3dlbGQpIHsKICAgICAgICAgICAgaWYgKERFQlVHX1dFTEQpIHsKICAgICAgICAgICAgICAgICRNc2cgLj0gIk5vdCBXZWxkaW5nIFFXXG4iOwogICAgICAgICAgICAgICAgcHJpbnQgeypTVERPVVR9ICRNc2c7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbmV4dDsKICAgICAgICB9CgogICAgICAgICMgT0sgdG8gd2VsZAogICAgICAgIGlmIChERUJVR19XRUxEKSB7CiAgICAgICAgICAgICRNc2cgLj0gIldlbGRpbmcgUVdcbiI7CiAgICAgICAgICAgIHByaW50IHsqU1RET1VUfSAkTXNnOwogICAgICAgIH0KCiAgICAgICAgJHJLX3dlbGRfcmlnaHQtPnskS291dGVyX29wZW5pbmd9ID0gJEtpbm5lcl9vcGVuaW5nOwogICAgICAgICRyS193ZWxkX2xlZnQtPnskS2lubmVyX29wZW5pbmd9ICA9ICRLb3V0ZXJfb3BlbmluZzsKCiAgICAgICAgJHJLX3dlbGRfcmlnaHQtPnskS2lubmVyX2Nsb3Npbmd9ID0gJEtvdXRlcl9jbG9zaW5nOwogICAgICAgICRyS193ZWxkX2xlZnQtPnskS291dGVyX2Nsb3Npbmd9ICA9ICRLaW5uZXJfY2xvc2luZzsKCiAgICAgICAgIyBVbmRvIG9uZSBpbmRlbnRhdGlvbiBsZXZlbCBpZiBhbiBleHRyYSBsZXZlbCB3YXMgYWRkZWQgdG8gdGhpcwogICAgICAgICMgbXVsdGlsaW5lIHF1b3RlCiAgICAgICAgbXkgJHF3X3NlcW5vID0KICAgICAgICAgICRzZWxmLT5bX3JzdGFydGluZ19tdWx0aWxpbmVfcXdfc2Vxbm9fYnlfS19dLT57JEtpbm5lcl9vcGVuaW5nfTsKICAgICAgICBpZiAoICAgJHF3X3NlcW5vCiAgICAgICAgICAgICYmICRzZWxmLT5bX3JtdWx0aWxpbmVfcXdfaGFzX2V4dHJhX2xldmVsX10tPnskcXdfc2Vxbm99ICkKICAgICAgICB7CiAgICAgICAgICAgIGZvcmVhY2ggbXkgJEsgKCAkS2lubmVyX29wZW5pbmcgKyAxIC4uICRLaW5uZXJfY2xvc2luZyAtIDEgKSB7CiAgICAgICAgICAgICAgICAkckxMLT5bJEtdLT5bX0xFVkVMX10gLT0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkckxMLT5bJEtpbm5lcl9vcGVuaW5nXS0+W19DSV9MRVZFTF9dID0gMDsKICAgICAgICAgICAgJHJMTC0+WyRLaW5uZXJfY2xvc2luZ10tPltfQ0lfTEVWRUxfXSA9IDA7CiAgICAgICAgfQoKICAgICAgICAjIHVuZG8gQ0kgZm9yIG90aGVyIHdlbGRlZCBxdW90ZXMKICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgIGZvcmVhY2ggbXkgJEsgKCAkS2lubmVyX29wZW5pbmcgLi4gJEtpbm5lcl9jbG9zaW5nICkgewogICAgICAgICAgICAgICAgJHJMTC0+WyRLXS0+W19DSV9MRVZFTF9dID0gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBDaGFuZ2UgdGhlIGxldmVsIG9mIGEgY2xvc2luZyBxdyB0b2tlbiB0byBiZSB0aGF0IG9mIHRoZSBvdXRlcgogICAgICAgICMgY29udGFpbmluZyB0b2tlbi4gVGhpcyB3aWxsIGFsbG93IC1scCBpbmRlbnRhdGlvbiB0byBmdW5jdGlvbgogICAgICAgICMgY29ycmVjdGx5IGluIHRoZSB2ZXJ0aWNhbCBhbGlnbmVyLgogICAgICAgICMgUGF0Y2ggdG8gZml4IGMwMDI6IGJ1dCBub3QgaWYgaXQgY29udGFpbnMgdGV4dAogICAgICAgIGlmICggbGVuZ3RoKCAkckxMLT5bJEtpbm5lcl9jbG9zaW5nXS0+W19UT0tFTl9dICkgPT0gMSApIHsKICAgICAgICAgICAgJHJMTC0+WyRLaW5uZXJfY2xvc2luZ10tPltfTEVWRUxfXSA9CiAgICAgICAgICAgICAgJHJMTC0+WyRLb3V0ZXJfY2xvc2luZ10tPltfTEVWRUxfXTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiB3ZWxkX25lc3RlZF9xdW90ZXMKCnN1YiBpc193ZWxkZWRfYXRfc2Vxbm8gewoKICAgIG15ICggJHNlbGYsICRzZXFubyApID0gQF87CgogICAgIyBHaXZlbjoKICAgICMgICAkc2Vxbm8gPSBhIHNlcXVlbmNlIG51bWJlcjoKICAgICMgUmV0dXJuOgogICAgIyAgIHRydWUgaWYgaXQgaXMgd2VsZGVkIGVpdGhlciBsZWZ0IG9yIHJpZ2h0CiAgICAjICAgZmFsc2Ugb3RoZXJ3aXNlCiAgICByZXR1cm4gdW5sZXNzICggJHRvdGFsX3dlbGRfY291bnQgJiYgZGVmaW5lZCgkc2Vxbm8pICk7CiAgICBteSAkS0tfbyA9ICRzZWxmLT5bX0tfb3BlbmluZ19jb250YWluZXJfXS0+eyRzZXFub307CiAgICByZXR1cm4gdW5sZXNzIGRlZmluZWQoJEtLX28pOwogICAgcmV0dXJuIGRlZmluZWQoICRzZWxmLT5bX3JLX3dlbGRfbGVmdF9dLT57JEtLX299ICkKICAgICAgfHwgZGVmaW5lZCggJHNlbGYtPltfcktfd2VsZF9yaWdodF9dLT57JEtLX299ICk7Cn0gIyMgZW5kIHN1YiBpc193ZWxkZWRfYXRfc2Vxbm8KCnN1YiBtYXJrX3Nob3J0X25lc3RlZF9ibG9ja3MgewoKICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgIyBUaGlzIHJvdXRpbmUgbG9va3MgYXQgdGhlIGVudGlyZSBmaWxlIGFuZCBtYXJrcyBhbnkgc2hvcnQgbmVzdGVkIGJsb2NrcwogICAgIyB3aGljaCBzaG91bGQgbm90IGJlIGJyb2tlbi4gIFRoZSByZXN1bHRzIGFyZSBzdG9yZWQgaW4gdGhlIGhhc2gKICAgICMgICAgICRyc2hvcnRfbmVzdGVkLT57JHR5cGVfc2VxdWVuY2V9CiAgICAjIHdoaWNoIHdpbGwgYmUgdHJ1ZSBpZiB0aGUgY29udGFpbmVyIHNob3VsZCByZW1haW4gaW50YWN0LgogICAgIwogICAgIyBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBsaW5lOgoKICAgICMgICBzdWIgY3h0X3R3byB7IHNvcnQgeyAkYSA8PT4gJGIgfSB0ZXN0X2lmX2xpc3QoKSB9CgogICAgIyBUaGUgJ3NvcnQnIGJsb2NrIGlzIHNob3J0IGFuZCBuZXN0ZWQgd2l0aGluIGFuIG91dGVyIHN1YiBibG9jay4KICAgICMgTm9ybWFsbHksIHRoZSBleGlzdGVuY2Ugb2YgdGhlICdzb3J0JyBibG9jayB3aWxsIGZvcmNlIHRoZSBzdWIgYmxvY2sgdG8KICAgICMgYnJlYWsgb3BlbiwgYnV0IHRoaXMgaXMgbm90IGFsd2F5cyBkZXNpcmFibGUuIEhlcmUgd2Ugd2lsbCBzZXQgYSBmbGFnIGZvcgogICAgIyB0aGUgc29ydCBibG9jayB0byBwcmV2ZW50IHRoaXMuICBUbyBnaXZlIHRoZSB1c2VyIGNvbnRyb2wsIHdlIHdpbGwKICAgICMgZm9sbG93IHRoZSBpbnB1dCBmaWxlIGZvcm1hdHRpbmcuICBJZiBlaXRoZXIgb2YgdGhlIGJsb2NrcyBpcyBicm9rZW4gaW4KICAgICMgdGhlIGlucHV0IGZpbGUgdGhlbiB3ZSB3aWxsIGFsbG93IGl0IHRvIHJlbWFpbiBicm9rZW4uIE90aGVyd2lzZSB3ZSB3aWxsCiAgICAjIHNldCBhIGZsYWcgdG8ga2VlcCBpdCB0b2dldGhlciBpbiBsYXRlciBmb3JtYXR0aW5nIHN0ZXBzLgoKICAgICMgVGhlIGZsYWcgd2hpY2ggaXMgc2V0IGhlcmUgd2lsbCBiZSBjaGVja2VkIGluIHR3byBwbGFjZXM6CiAgICAjICdzdWIgcHJvY2Vzc19saW5lX29mX0NPREUnIGFuZCAnc3ViIHN0YXJ0aW5nX29uZV9saW5lX2Jsb2NrJwoKICAgIHJldHVybiBpZiAkck9wdHMtPnsnaW5kZW50LW9ubHknfTsKCiAgICBteSAkckxMID0gJHNlbGYtPltfckxMX107CiAgICByZXR1cm4gdW5sZXNzICggZGVmaW5lZCgkckxMKSAmJiBAeyRyTEx9ICk7CgogICAgcmV0dXJuIHVubGVzcyAoICRyT3B0cy0+eydvbmUtbGluZS1ibG9jay1uZXN0aW5nJ30gKTsKCiAgICBteSAkS19vcGVuaW5nX2NvbnRhaW5lciAgICAgPSAkc2VsZi0+W19LX29wZW5pbmdfY29udGFpbmVyX107CiAgICBteSAkS19jbG9zaW5nX2NvbnRhaW5lciAgICAgPSAkc2VsZi0+W19LX2Nsb3NpbmdfY29udGFpbmVyX107CiAgICBteSAkcmJyZWFrX2NvbnRhaW5lciAgICAgICAgPSAkc2VsZi0+W19yYnJlYWtfY29udGFpbmVyX107CiAgICBteSAkcmlzX2Jyb2tlbl9jb250YWluZXIgICAgPSAkc2VsZi0+W19yaXNfYnJva2VuX2NvbnRhaW5lcl9dOwogICAgbXkgJHJzaG9ydF9uZXN0ZWQgICAgICAgICAgID0gJHNlbGYtPltfcnNob3J0X25lc3RlZF9dOwogICAgbXkgJHJibG9ja190eXBlX29mX3NlcW5vICAgID0gJHNlbGYtPltfcmJsb2NrX3R5cGVfb2Zfc2Vxbm9fXTsKICAgIG15ICRyS19zZXF1ZW5jZWRfdG9rZW5fbGlzdCA9ICRzZWxmLT5bX3JLX3NlcXVlbmNlZF90b2tlbl9saXN0X107CgogICAgIyBWYXJpYWJsZXMgbmVlZGVkIGZvciBlc3RpbWF0aW5nIGxpbmUgbGVuZ3RocwogICAgbXkgJG1heGltdW1fdGV4dF9sZW5ndGg7CiAgICBteSAkc3RhcnRpbmdfbGVudG90OwogICAgbXkgJGxlbmd0aF90b2wgPSAxOwoKICAgIG15ICRleGNlc3NfbGVuZ3RoX3RvX0sgPSBzdWIgewogICAgICAgIG15ICgkSykgPSBAXzsKCiAgICAgICAgIyBFc3RpbWF0ZSB0aGUgbGVuZ3RoIGZyb20gdGhlIGxpbmUgc3RhcnQgdG8gYSBnaXZlbiB0b2tlbgogICAgICAgIG15ICRsZW5ndGggPSAkc2VsZi0+Y3VtdWxhdGl2ZV9sZW5ndGhfYmVmb3JlX0soJEspIC0gJHN0YXJ0aW5nX2xlbnRvdDsKICAgICAgICBteSAkZXhjZXNzX2xlbmd0aCA9ICRsZW5ndGggKyAkbGVuZ3RoX3RvbCAtICRtYXhpbXVtX3RleHRfbGVuZ3RoOwogICAgICAgIHJldHVybiAoJGV4Y2Vzc19sZW5ndGgpOwogICAgfTsgIyMgZW5kICRleGNlc3NfbGVuZ3RoX3RvX0sgPSBzdWIKCiAgICAjIGxvb3Agb3ZlciBhbGwgY29udGFpbmVycwogICAgbXkgQG9wZW5fYmxvY2tfc3RhY2s7CiAgICBteSAkaWxpbmUgPSAtMTsKICAgIGZvcmVhY2ggbXkgJEtLICggQHskcktfc2VxdWVuY2VkX3Rva2VuX2xpc3R9ICkgewogICAgICAgIG15ICRydG9rZW5fdmFycyAgID0gJHJMTC0+WyRLS107CiAgICAgICAgbXkgJHR5cGVfc2VxdWVuY2UgPSAkcnRva2VuX3ZhcnMtPltfVFlQRV9TRVFVRU5DRV9dOwogICAgICAgIGlmICggISR0eXBlX3NlcXVlbmNlICkgewogICAgICAgICAgICBuZXh0IGlmICggJEtLID09IDAgKTsgICAgIyBmaXJzdCB0b2tlbiBpbiBmaWxlIG1heSBub3QgYmUgY29udGFpbmVyCgogICAgICAgICAgICAjIEEgZmF1bHQgaGVyZSBpbXBsaWVzIHRoYXQgYW4gZXJyb3Igd2FzIG1hZGUgaW4gdGhlIGxpdHRsZSBsb29wIGF0CiAgICAgICAgICAgICMgdGhlIGJvdHRvbSBvZiBzdWIgJ3Jlc3BhY2VfdG9rZW5zJyB3aGljaCBzZXQgdGhlIHZhbHVlcyBvZgogICAgICAgICAgICAjICRyS19zZXF1ZW5jZWRfdG9rZW5fbGlzdC4gIE9yIGFuIGVycm9yIGhhcyBiZWVuIGludHJvZHVjZWQgaW4gdGhlCiAgICAgICAgICAgICMgbG9vcCBjb250cm9sIGxpbmVzIGFib3ZlLgogICAgICAgICAgICBGYXVsdCgic2VxdWVuY2UgPSAkdHlwZV9zZXF1ZW5jZSBub3QgZGVmaW5lZCBhdCBLPSRLSyIpCiAgICAgICAgICAgICAgaWYgKERFVkVMX01PREUpOwogICAgICAgICAgICBuZXh0OwogICAgICAgIH0KCiAgICAgICAgIyBQYXRjaDogZG8gbm90IG1hcmsgc2hvcnQgYmxvY2tzIHdpdGggd2VsZHMuCiAgICAgICAgIyBJbiBzb21lIGNhc2VzIGJsaW5rZXJzIGNhbiBmb3JtIChjYXNlIGI2OTApLgogICAgICAgIGlmICggJHRvdGFsX3dlbGRfY291bnQgJiYgJHNlbGYtPmlzX3dlbGRlZF9hdF9zZXFubygkdHlwZV9zZXF1ZW5jZSkgKSB7CiAgICAgICAgICAgIG5leHQ7CiAgICAgICAgfQoKICAgICAgICAjIFdlIGFyZSBqdXN0IGxvb2tpbmcgYXQgY29kZSBibG9ja3MKICAgICAgICBteSAkdG9rZW4gPSAkcnRva2VuX3ZhcnMtPltfVE9LRU5fXTsKICAgICAgICBteSAkdHlwZSAgPSAkcnRva2VuX3ZhcnMtPltfVFlQRV9dOwogICAgICAgIG5leHQgdW5sZXNzICggJHR5cGUgZXEgJHRva2VuICk7CiAgICAgICAgbmV4dCB1bmxlc3MgKCAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8tPnskdHlwZV9zZXF1ZW5jZX0gKTsKCiAgICAgICAgIyBLZWVwIGEgc3RhY2sgb2YgYWxsIGFjY2VwdGFibGUgYmxvY2sgYnJhY2VzIHNlZW4uCiAgICAgICAgIyBPbmx5IGNvbnNpZGVyIGJsb2NrcyBlbnRpcmVseSBvbiBvbmUgbGluZSBzbyBkdW1wIHRoZSBzdGFjayB3aGVuIGxpbmUKICAgICAgICAjIGNoYW5nZXMuCiAgICAgICAgbXkgJGlsaW5lX2xhc3QgPSAkaWxpbmU7CiAgICAgICAgJGlsaW5lID0gJHJMTC0+WyRLS10tPltfTElORV9JTkRFWF9dOwogICAgICAgIGlmICggJGlsaW5lICE9ICRpbGluZV9sYXN0ICkgeyBAb3Blbl9ibG9ja19zdGFjayA9ICgpIH0KCiAgICAgICAgaWYgKCAkdG9rZW4gZXEgJ30nICkgewogICAgICAgICAgICBpZiAoQG9wZW5fYmxvY2tfc3RhY2spIHsgcG9wIEBvcGVuX2Jsb2NrX3N0YWNrIH0KICAgICAgICB9CiAgICAgICAgbmV4dCB1bmxlc3MgKCAkdG9rZW4gZXEgJ3snICk7CgogICAgICAgICMgYmxvY2sgbXVzdCBiZSBiYWxhbmNlZCAoYmFkIHNjcmlwdHMgbWF5IGJlIHVuYmFsYW5jZWQpCiAgICAgICAgbXkgJEtfb3BlbmluZyA9ICRLX29wZW5pbmdfY29udGFpbmVyLT57JHR5cGVfc2VxdWVuY2V9OwogICAgICAgIG15ICRLX2Nsb3NpbmcgPSAkS19jbG9zaW5nX2NvbnRhaW5lci0+eyR0eXBlX3NlcXVlbmNlfTsKICAgICAgICBuZXh0IHVubGVzcyAoIGRlZmluZWQoJEtfb3BlbmluZykgJiYgZGVmaW5lZCgkS19jbG9zaW5nKSApOwoKICAgICAgICAjIHJlcXVpcmUgdGhhdCB0aGlzIGJsb2NrIGJlIGVudGlyZWx5IG9uIG9uZSBsaW5lCiAgICAgICAgbmV4dAogICAgICAgICAgaWYgKCAkcmlzX2Jyb2tlbl9jb250YWluZXItPnskdHlwZV9zZXF1ZW5jZX0KICAgICAgICAgICAgfHwgJHJicmVha19jb250YWluZXItPnskdHlwZV9zZXF1ZW5jZX0gKTsKCiAgICAgICAgIyBTZWUgaWYgdGhpcyBibG9jayBmaXRzIG9uIG9uZSBsaW5lIG9mIGFsbG93ZWQgbGVuZ3RoICh3aGljaCBtYXkKICAgICAgICAjIGJlIGRpZmZlcmVudCBmcm9tIHRoZSBpbnB1dCBzY3JpcHQpCiAgICAgICAgJHN0YXJ0aW5nX2xlbnRvdCA9CiAgICAgICAgICAkS0sgPD0gMCA/IDAgOiAkckxMLT5bICRLSyAtIDEgXS0+W19DVU1VTEFUSVZFX0xFTkdUSF9dOwogICAgICAgIG15ICRsZXZlbCAgICA9ICRyTEwtPlskS0tdLT5bX0xFVkVMX107CiAgICAgICAgbXkgJGNpX2xldmVsID0gJHJMTC0+WyRLS10tPltfQ0lfTEVWRUxfXTsKICAgICAgICAkbWF4aW11bV90ZXh0X2xlbmd0aCA9CiAgICAgICAgICAkbWF4aW11bV90ZXh0X2xlbmd0aF9hdF9sZXZlbFskbGV2ZWxdIC0KICAgICAgICAgICRjaV9sZXZlbCAqICRyT3B0c19jb250aW51YXRpb25faW5kZW50YXRpb247CgogICAgICAgICMgRHVtcCB0aGUgc3RhY2sgaWYgYmxvY2sgaXMgdG9vIGxvbmcgYW5kIHNraXAgdGhpcyBibG9jawogICAgICAgIGlmICggJGV4Y2Vzc19sZW5ndGhfdG9fSy0+KCRLX2Nsb3NpbmcpID4gMCApIHsKICAgICAgICAgICAgQG9wZW5fYmxvY2tfc3RhY2sgPSAoKTsKICAgICAgICAgICAgbmV4dDsKICAgICAgICB9CgogICAgICAgICMgT0ssIEJsb2NrIHBhc3NlcyB0ZXN0cywgcmVtZW1iZXIgaXQKICAgICAgICBwdXNoIEBvcGVuX2Jsb2NrX3N0YWNrLCAkdHlwZV9zZXF1ZW5jZTsKCiAgICAgICAgIyBXZSBhcmUgb25seSBtYXJraW5nIG5lc3RlZCBjb2RlIGJsb2NrcywKICAgICAgICAjIHNvIGNoZWNrIGZvciBhIHByZXZpb3VzIGJsb2NrIG9uIHRoZSBzdGFjawogICAgICAgIG5leHQgaWYgKCBAb3Blbl9ibG9ja19zdGFjayA8PSAxICk7CgogICAgICAgICMgTG9va3MgT0ssIG1hcmsgdGhpcyBhcyBhIHNob3J0IG5lc3RlZCBibG9jawogICAgICAgICRyc2hvcnRfbmVzdGVkLT57JHR5cGVfc2VxdWVuY2V9ID0gMTsKCiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBtYXJrX3Nob3J0X25lc3RlZF9ibG9ja3MKCnN1YiBzcGVjaWFsX2luZGVudGF0aW9uX2FkanVzdG1lbnRzIHsKCiAgICBteSAoJHNlbGYpID0gQF87CgogICAgIyBDYWxsZWQgb25jZSBwZXIgZmlsZSB0byBkZWZpbmUgdGhlIGxldmVscyB0byBiZSB1c2VkIGZvciBjb21wdXRpbmcKICAgICMgYWN0dWFsIGluZGVudGF0aW9uLiBUaGVzZSBsZXZlbHMgYXJlIGluaXRpYWxpemVkIHRvIGJlIHRoZSBzdHJ1Y3R1cmFsCiAgICAjIGxldmVscyBhbmQgdGhlbiBhcmUgYWRqdXN0ZWQgaWYgbmVjZXNzYXJ5IGZvciBzcGVjaWFsIHB1cnBvc2VzLgogICAgIyBUaGUgYWRqdXN0bWVudHMgYXJlIG1hZGUgZWl0aGVyIGJ5IGNoYW5naW5nIF9DSV9MRVZFTF8gZGlyZWN0bHkgb3IKICAgICMgYnkgc2V0dGluZyBtb2RpZmllZCBsZXZlbHMgaW4gdGhlIGFycmF5ICRzZWxmLT5bX3JhZGp1c3RlZF9sZXZlbHNfXS4KCiAgICAjIE5PVEU6IFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYWZ0ZXIgdGhlIHdlbGQgcm91dGluZXMsIHdoaWNoIG1heSBoYXZlCiAgICAjIGFscmVhZHkgYWRqdXN0ZWQgdGhlIGluaXRpYWwgdmFsdWVzIG9mIF9MRVZFTF8sIHNvIHdlIGFyZSBtYWtpbmcKICAgICMgYWRqdXN0bWVudHMgb24gdG9wIG9mIHRob3NlIGxldmVscy4gIEl0IHdvdWxkIGJlIG5pY2VyIHRvIGhhdmUgdGhlCiAgICAjIHdlbGQgcm91dGluZXMgYWxzbyB1c2UgdGhpcyBhZGp1c3RtZW50LCBidXQgdGhhdCBnZXRzIGNvbXBsaWNhdGVkCiAgICAjIHdoZW4gd2UgY29tYmluZSAtZ251IC13biBhbmQgYWxzbyBoYXZlIHNvbWUgd2VsZGVkIHF1b3Rlcy4KICAgIG15ICRyTEwgPSAkc2VsZi0+W19yTExfXTsKICAgIHJldHVybiB1bmxlc3MgKCBAeyRyTEx9ICk7CgogICAgIyBJbml0aWFsaXplIHRoZSBhZGp1c3RlZCBsZXZlbHMgdG8gYmUgdGhlIHN0cnVjdHVyYWwgbGV2ZWxzCiAgICBteSBAYWRqdXN0ZWRfbGV2ZWxzID0gbWFwIHsgJF8tPltfTEVWRUxfXSB9IEB7JHJMTH07CiAgICAkc2VsZi0+W19yYWRqdXN0ZWRfbGV2ZWxzX10gPSBcQGFkanVzdGVkX2xldmVsczsKCiAgICBteSAkbWluX3N0YXJ0aW5nX2xldmVsID0gbWluKEBhZGp1c3RlZF9sZXZlbHMpOwoKICAgICMgRmlyc3Qgc2V0IGFkanVzdGVkIGxldmVscyBmb3IgYW55IG5vbi1pbmRlbnRpbmcgYnJhY2VzLgogICAgJHNlbGYtPmRvX25vbl9pbmRlbnRpbmdfYnJhY2VzKCk7CgogICAgIyBBZGp1c3QgYnJlYWtzIGFuZCBpbmRlbnRhdGlvbiBsaXN0IGNvbnRhaW5lcnMKICAgICRzZWxmLT5icmVha19iZWZvcmVfbGlzdF9vcGVuaW5nX2NvbnRhaW5lcnMoKTsKCiAgICAjIFNldCBhZGp1c3RlZCBsZXZlbHMgZm9yIHRoZSB3aGl0ZXNwYWNlIGN5Y2xlIG9wdGlvbi4KICAgICRzZWxmLT53aGl0ZXNwYWNlX2N5Y2xlX2FkanVzdG1lbnQoKTsKCiAgICAkc2VsZi0+YnJhY2VzX2xlZnRfc2V0dXAoKTsKCiAgICAjIEFkanVzdCBjb250aW51YXRpb24gaW5kZW50YXRpb24gaWYgLWJsaSBpcyBzZXQKICAgICRzZWxmLT5ibGlfYWRqdXN0bWVudCgpOwoKICAgICRzZWxmLT5leHRlbmRlZF9jaSgpCiAgICAgIGlmICgkck9wdHNfZXh0ZW5kZWRfY29udGludWF0aW9uX2luZGVudGF0aW9uKTsKCiAgICAjIE5vdyBjbGlwIGFueSBzdGFydGluZyBvciBhZGp1c3RlZCBsZXZlbHMgdG8gYmUgbm9uLW5lZ2F0aXZlCiAgICAkc2VsZi0+Y2xpcF9hZGp1c3RlZF9sZXZlbHMoJG1pbl9zdGFydGluZ19sZXZlbCk7CgogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgc3BlY2lhbF9pbmRlbnRhdGlvbl9hZGp1c3RtZW50cwoKc3ViIGNsaXBfYWRqdXN0ZWRfbGV2ZWxzIHsKCiAgICBteSAoICRzZWxmLCAkbWluX3N0YXJ0aW5nX2xldmVsICkgPSBAXzsKCiAgICAjIFJlcGxhY2UgYW55IG5lZ2F0aXZlIGFkanVzdGVkIGxldmVscyB3aXRoIHplcm8uCiAgICAjIE5lZ2F0aXZlIGxldmVscyBjYW4gb25seSBvY2N1ciBpbiBmaWxlcyB3aXRoIGJyYWNlIGVycm9ycy4KICAgICMgR2l2ZW46CiAgICAjICAgJG1pbl9zdGFydGluZ19sZXZlbCA9IG1pbmltdW0gKGFkanVzdGVkKSBsZXZlbCBvZiB0aGUgaW5wdXQgc3RyZWFtCgogICAgIyBDbGlwIHRoZSBvcmlnaW5hbCBfTEVWRUxfIHZhbHVlcyB0byB6ZXJvIGlmIG5lY2Vzc2FyeQogICAgbXkgJHJMTCA9ICRzZWxmLT5bX3JMTF9dOwogICAgaWYgKCAkbWluX3N0YXJ0aW5nX2xldmVsIDwgMCApIHsKICAgICAgICBmb3JlYWNoIG15ICRpdGVtICggQHskckxMfSApIHsKICAgICAgICAgICAgaWYgKCAkaXRlbS0+W19MRVZFTF9dIDwgMCApIHsgJGl0ZW0tPltfTEVWRUxfXSA9IDAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIENsaXAgdGhlIGFkanVzdGVkIGxldmVscyB0byB6ZXJvIGlmIG5lY2Vzc2FyeQogICAgbXkgJHJhZGp1c3RlZF9sZXZlbHMgPSAkc2VsZi0+W19yYWRqdXN0ZWRfbGV2ZWxzX107CiAgICByZXR1cm4gdW5sZXNzICggZGVmaW5lZCgkcmFkanVzdGVkX2xldmVscykgJiYgQHskcmFkanVzdGVkX2xldmVsc30gKTsKICAgIG15ICRtaW4gPSBtaW4oIEB7JHJhZGp1c3RlZF9sZXZlbHN9ICk7ICAgICMgZmFzdCBjaGVjayBmb3IgbWluCiAgICBpZiAoICRtaW4gPCAwICkgewoKICAgICAgICAjIHNsb3cgbG9vcCwgYnV0IHJhcmVseSBuZWVkZWQKICAgICAgICBmb3JlYWNoICggQHskcmFkanVzdGVkX2xldmVsc30gKSB7ICRfID0gMCBpZiAoICRfIDwgMCApIH0KICAgIH0KCiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBjbGlwX2FkanVzdGVkX2xldmVscwoKc3ViIGRvX25vbl9pbmRlbnRpbmdfYnJhY2VzIHsKCiAgICBteSAoJHNlbGYpID0gQF87CgogICAgIyBDYWxsZWQgb25jZSBwZXIgZmlsZSB0byBoYW5kbGUgdGhlIC0tbm9uLWluZGVudGluZy1icmFjZXMgcGFyYW1ldGVyLgogICAgIyBSZW1vdmUgaW5kZW50YXRpb24gd2l0aGluIG1hcmtlZCBicmFjZXMgaWYgcmVxdWVzdGVkCgogICAgIyBBbnkgbm9uLWluZGVudGluZyBicmFjZXMgaGF2ZSBiZWVuIGZvdW5kIGJ5IHN1YiBmaW5kX25vbl9pbmRlbnRpbmdfYnJhY2VzCiAgICAjIGFuZCBhcmUgZGVmaW5lZCBieSB0aGUgZm9sbG93aW5nIGhhc2g6CiAgICBteSAkcnNlcW5vX25vbl9pbmRlbnRpbmdfYnJhY2VfYnlfaXggPQogICAgICAkc2VsZi0+W19yc2Vxbm9fbm9uX2luZGVudGluZ19icmFjZV9ieV9peF9dOwogICAgcmV0dXJuIHVubGVzcyAoICV7JHJzZXFub19ub25faW5kZW50aW5nX2JyYWNlX2J5X2l4fSApOwoKICAgIG15ICRybGluZXMgICAgICAgICAgICAgICAgICAgICA9ICRzZWxmLT5bX3JsaW5lc19dOwogICAgbXkgJEtfb3BlbmluZ19jb250YWluZXIgICAgICAgID0gJHNlbGYtPltfS19vcGVuaW5nX2NvbnRhaW5lcl9dOwogICAgbXkgJEtfY2xvc2luZ19jb250YWluZXIgICAgICAgID0gJHNlbGYtPltfS19jbG9zaW5nX2NvbnRhaW5lcl9dOwogICAgbXkgJHJzcGVjaWFsX3NpZGVfY29tbWVudF90eXBlID0gJHNlbGYtPltfcnNwZWNpYWxfc2lkZV9jb21tZW50X3R5cGVfXTsKICAgIG15ICRyYWRqdXN0ZWRfbGV2ZWxzICAgICAgICAgICA9ICRzZWxmLT5bX3JhZGp1c3RlZF9sZXZlbHNfXTsKCiAgICAjIEZpcnN0IGxvY2F0ZSBhbGwgb2YgdGhlIG1hcmtlZCBibG9ja3MKICAgIG15IEBLX3N0YWNrOwogICAgZm9yZWFjaCBteSAkaXggKCBrZXlzICV7JHJzZXFub19ub25faW5kZW50aW5nX2JyYWNlX2J5X2l4fSApIHsKICAgICAgICBteSAkc2Vxbm8gICAgICAgICAgPSAkcnNlcW5vX25vbl9pbmRlbnRpbmdfYnJhY2VfYnlfaXgtPnskaXh9OwogICAgICAgIG15ICRLSyAgICAgICAgICAgICA9ICRLX29wZW5pbmdfY29udGFpbmVyLT57JHNlcW5vfTsKICAgICAgICBteSAkbGluZV9vZl90b2tlbnMgPSAkcmxpbmVzLT5bJGl4XTsKICAgICAgICBteSAkcktfcmFuZ2UgICAgICAgPSAkbGluZV9vZl90b2tlbnMtPntfcktfcmFuZ2V9OwogICAgICAgIG15ICggJEtmaXJzdF91dSwgJEtsYXN0ICkgPSBAeyRyS19yYW5nZX07CiAgICAgICAgJHJzcGVjaWFsX3NpZGVfY29tbWVudF90eXBlLT57JEtsYXN0fSA9ICdOSUInOwogICAgICAgIHB1c2ggQEtfc3RhY2ssIFsgJEtLLCAxIF07CiAgICAgICAgbXkgJEtjID0gJEtfY2xvc2luZ19jb250YWluZXItPnskc2Vxbm99OwogICAgICAgIHB1c2ggQEtfc3RhY2ssIFsgJEtjLCAtMSBdIGlmICggZGVmaW5lZCgkS2MpICk7CiAgICB9CiAgICByZXR1cm4gdW5sZXNzIChAS19zdGFjayk7CiAgICBAS19zdGFjayA9IHNvcnQgeyAkYS0+WzBdIDw9PiAkYi0+WzBdIH0gQEtfc3RhY2s7CgogICAgIyBUaGVuIGxvb3AgdG8gcmVtb3ZlIGluZGVudGF0aW9uIHdpdGhpbiBtYXJrZWQgYmxvY2tzCiAgICBteSAkS0tfbGFzdCA9IDA7CiAgICBteSAkbmRlZXAgICA9IDA7CiAgICBmb3JlYWNoIG15ICRpdGVtIChAS19zdGFjaykgewogICAgICAgIG15ICggJEtLLCAkaW5jICkgPSBAeyRpdGVtfTsKICAgICAgICBpZiAoICRuZGVlcCA+IDAgKSB7CgogICAgICAgICAgICBmb3JlYWNoICggJEtLX2xhc3QgKyAxIC4uICRLSyApIHsKICAgICAgICAgICAgICAgICRyYWRqdXN0ZWRfbGV2ZWxzLT5bJF9dIC09ICRuZGVlcDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBXZSBqdXN0IHN1YnRyYWN0ZWQgdGhlIG9sZCAkbmRlZXAgdmFsdWUsIHdoaWNoIG9ubHkgYXBwbGllcyB0byBhCiAgICAgICAgICAgICMgJ3snLiAgVGhlIG5ldyAkbmRlZXAgYXBwbGllcyB0byBhICd9Jywgc28gd2UgdW5kbyB0aGUgZXJyb3IuCiAgICAgICAgICAgIGlmICggJGluYyA8IDAgKSB7ICRyYWRqdXN0ZWRfbGV2ZWxzLT5bJEtLXSArPSAxIH0KICAgICAgICB9CgogICAgICAgICRuZGVlcCArPSAkaW5jOwogICAgICAgICRLS19sYXN0ID0gJEtLOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgZG9fbm9uX2luZGVudGluZ19icmFjZXMKCnN1YiB3aGl0ZXNwYWNlX2N5Y2xlX2FkanVzdG1lbnQgewoKICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgIyBDYWxsZWQgb25jZSBwZXIgZmlsZSB0byBpbXBsZW1lbnQgdGhlIC0td2hpdGVzcGFjZS1jeWNsZSBvcHRpb24KICAgIG15ICRyTEwgPSAkc2VsZi0+W19yTExfXTsKICAgIHJldHVybiB1bmxlc3MgKCBkZWZpbmVkKCRyTEwpICYmIEB7JHJMTH0gKTsKICAgIG15ICRyYWRqdXN0ZWRfbGV2ZWxzID0gJHNlbGYtPltfcmFkanVzdGVkX2xldmVsc19dOwogICAgbXkgJG1heGltdW1fbGV2ZWwgICAgPSAkc2VsZi0+W19tYXhpbXVtX2xldmVsX107CgogICAgaWYgKCAgICRyT3B0c193aGl0ZXNwYWNlX2N5Y2xlCiAgICAgICAgJiYgJHJPcHRzX3doaXRlc3BhY2VfY3ljbGUgPiAwCiAgICAgICAgJiYgJHJPcHRzX3doaXRlc3BhY2VfY3ljbGUgPCAkbWF4aW11bV9sZXZlbCApCiAgICB7CgogICAgICAgIG15ICRLbWF4ID0gQHskckxMfSAtIDE7CgogICAgICAgIG15ICR3aGl0ZXNwYWNlX2xhc3RfbGV2ZWwgID0gLTE7CiAgICAgICAgbXkgQHdoaXRlc3BhY2VfbGV2ZWxfc3RhY2sgPSAoKTsKICAgICAgICBteSAkbGFzdF9ub25ibGFua190eXBlICAgICA9ICdiJzsKICAgICAgICBteSAkbGFzdF9ub25ibGFua190b2tlbiAgICA9IEVNUFRZX1NUUklORzsKICAgICAgICBmb3JlYWNoIG15ICRLSyAoIDAgLi4gJEttYXggKSB7CiAgICAgICAgICAgIG15ICRsZXZlbF9hYnMgPSAkcmFkanVzdGVkX2xldmVscy0+WyRLS107CiAgICAgICAgICAgIG15ICRsZXZlbCAgICAgPSAkbGV2ZWxfYWJzOwogICAgICAgICAgICBpZiAoICRsZXZlbF9hYnMgPCAkd2hpdGVzcGFjZV9sYXN0X2xldmVsICkgewogICAgICAgICAgICAgICAgcG9wKEB3aGl0ZXNwYWNlX2xldmVsX3N0YWNrKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICFAd2hpdGVzcGFjZV9sZXZlbF9zdGFjayApIHsKICAgICAgICAgICAgICAgIHB1c2ggQHdoaXRlc3BhY2VfbGV2ZWxfc3RhY2ssICRsZXZlbF9hYnM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoICRsZXZlbF9hYnMgPiAkd2hpdGVzcGFjZV9sYXN0X2xldmVsICkgewogICAgICAgICAgICAgICAgICAgICRsZXZlbCA9ICR3aGl0ZXNwYWNlX2xldmVsX3N0YWNrWy0xXSArCiAgICAgICAgICAgICAgICAgICAgICAoICRsZXZlbF9hYnMgLSAkd2hpdGVzcGFjZV9sYXN0X2xldmVsICk7CgogICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgIyAxIFRyeSB0byBicmVhayBhdCBhIGJsb2NrIGJyYWNlCiAgICAgICAgICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsZXZlbCA+ICRyT3B0c193aGl0ZXNwYWNlX2N5Y2xlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkbGFzdF9ub25ibGFua190eXBlIGVxICd7JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJGxhc3Rfbm9uYmxhbmtfdG9rZW4gZXEgJ3snCiAgICAgICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICAgICAgICAgICMgMiBUaGVuIGVpdGhlciBhIGJyYWNlIG9yIGJyYWNrZXQKICAgICAgICAgICAgICAgICAgICAgICAgfHwgKCAgICRsZXZlbCA+ICRyT3B0c193aGl0ZXNwYWNlX2N5Y2xlICsgMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJGxhc3Rfbm9uYmxhbmtfdG9rZW4gPX4gL15bXHtcW10kLyApCgogICAgICAgICAgICAgICAgICAgICAgICAjIDMgVGhlbiBhIHBhcmVuIHRvbwogICAgICAgICAgICAgICAgICAgICAgICB8fCAkbGV2ZWwgPiAkck9wdHNfd2hpdGVzcGFjZV9jeWNsZSArIDIKICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRsZXZlbCA9IDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHB1c2ggQHdoaXRlc3BhY2VfbGV2ZWxfc3RhY2ssICRsZXZlbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkbGV2ZWwgPSAkd2hpdGVzcGFjZV9sZXZlbF9zdGFja1stMV07CiAgICAgICAgICAgICRyYWRqdXN0ZWRfbGV2ZWxzLT5bJEtLXSA9ICRsZXZlbDsKCiAgICAgICAgICAgICR3aGl0ZXNwYWNlX2xhc3RfbGV2ZWwgPSAkbGV2ZWxfYWJzOwogICAgICAgICAgICBteSAkdHlwZSAgPSAkckxMLT5bJEtLXS0+W19UWVBFX107CiAgICAgICAgICAgIG15ICR0b2tlbiA9ICRyTEwtPlskS0tdLT5bX1RPS0VOX107CiAgICAgICAgICAgIGlmICggJHR5cGUgbmUgJ2InICkgewogICAgICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfdHlwZSAgPSAkdHlwZTsKICAgICAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX3Rva2VuID0gJHRva2VuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgd2hpdGVzcGFjZV9jeWNsZV9hZGp1c3RtZW50Cgp1c2UgY29uc3RhbnQgREVCVUdfQkJYID0+IDA7CgpzdWIgYnJlYWtfYmVmb3JlX2xpc3Rfb3BlbmluZ19jb250YWluZXJzIHsKCiAgICBteSAoJHNlbGYpID0gQF87CgogICAgIyBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIG9uY2UgcGVyIGJhdGNoIHRvIGltcGxlbWVudCBwYXJhbWV0ZXJzOgogICAgIyAtLWJyZWFrLWJlZm9yZS1oYXNoLWJyYWNlPW4gYW5kIHNpbWlsYXIgLWJieD1uIGZsYWdzCiAgICAjICAgIGFuZCB0aGVpciBhc3NvY2lhdGVkIGluZGVudGF0aW9uIGZsYWdzOgogICAgIyAtLWJyZWFrLWJlZm9yZS1oYXNoLWJyYWNlLWFuZC1pbmRlbnQgYW5kIHNpbWlsYXIgLWJieGk9bgoKICAgICMgTm90aGluZyB0byBkbyBpZiBub25lIG9mIHRoZSAtYmJ4PW4gcGFyYW1ldGVycyBoYXMgYmVlbiBzZXQKICAgIHJldHVybiB1bmxlc3MgJWJyZWFrX2JlZm9yZV9jb250YWluZXJfdHlwZXM7CgogICAgbXkgJHJMTCA9ICRzZWxmLT5bX3JMTF9dOwogICAgcmV0dXJuIHVubGVzcyAoIGRlZmluZWQoJHJMTCkgJiYgQHskckxMfSApOwoKICAgICMgTG9vcCBvdmVyIGFsbCBvcGVuaW5nIGNvbnRhaW5lciB0b2tlbnMKICAgIG15ICRLX29wZW5pbmdfY29udGFpbmVyICAgICAgID0gJHNlbGYtPltfS19vcGVuaW5nX2NvbnRhaW5lcl9dOwogICAgbXkgJEtfY2xvc2luZ19jb250YWluZXIgICAgICAgPSAkc2VsZi0+W19LX2Nsb3NpbmdfY29udGFpbmVyX107CiAgICBteSAkcmlzX2Jyb2tlbl9jb250YWluZXIgICAgICA9ICRzZWxmLT5bX3Jpc19icm9rZW5fY29udGFpbmVyX107CiAgICBteSAkcmlzX3Blcm1hbmVudGx5X2Jyb2tlbiAgICA9ICRzZWxmLT5bX3Jpc19wZXJtYW5lbnRseV9icm9rZW5fXTsKICAgIG15ICRyaGFzX2xpc3QgICAgICAgICAgICAgICAgID0gJHNlbGYtPltfcmhhc19saXN0X107CiAgICBteSAkcmhhc19icm9rZW5fbGlzdF93aXRoX2xlYyA9ICRzZWxmLT5bX3JoYXNfYnJva2VuX2xpc3Rfd2l0aF9sZWNfXTsKICAgIG15ICRyYWRqdXN0ZWRfbGV2ZWxzICAgICAgICAgID0gJHNlbGYtPltfcmFkanVzdGVkX2xldmVsc19dOwogICAgbXkgJHJwYXJlbnRfb2Zfc2Vxbm8gICAgICAgICAgPSAkc2VsZi0+W19ycGFyZW50X29mX3NlcW5vX107CiAgICBteSAkcmxpbmVzICAgICAgICAgICAgICAgICAgICA9ICRzZWxmLT5bX3JsaW5lc19dOwogICAgbXkgJHJ0eXBlX2NvdW50X2J5X3NlcW5vICAgICAgPSAkc2VsZi0+W19ydHlwZV9jb3VudF9ieV9zZXFub19dOwogICAgbXkgJHJsZWNfY291bnRfYnlfc2Vxbm8gICAgICAgPSAkc2VsZi0+W19ybGVjX2NvdW50X2J5X3NlcW5vX107CiAgICBteSAkcm5vX3hjaV9ieV9zZXFubyAgICAgICAgICA9ICRzZWxmLT5bX3Jub194Y2lfYnlfc2Vxbm9fXTsKICAgIG15ICRyS193ZWxkX3JpZ2h0ICAgICAgICAgICAgID0gJHNlbGYtPltfcktfd2VsZF9yaWdodF9dOwogICAgbXkgJHJibG9ja190eXBlX29mX3NlcW5vICAgICAgPSAkc2VsZi0+W19yYmxvY2tfdHlwZV9vZl9zZXFub19dOwoKICAgIG15ICRsZW5ndGhfdG9sID0KICAgICAgbWF4KCAxLCAkck9wdHNfY29udGludWF0aW9uX2luZGVudGF0aW9uLCAkck9wdHNfaW5kZW50X2NvbHVtbnMgKTsKICAgIGlmICgkck9wdHNfaWdub3JlX29sZF9icmVha3BvaW50cykgewoKICAgICAgICAjIFBhdGNoIHN1Z2dlc3RlZCBieSBiMTIzMTsgdGhlIG9sZCB0b2wgd2FzIGV4Y2Vzc2l2ZS4KICAgICAgICAjIyAkbGVuZ3RoX3RvbCArPSAkck9wdHNfbWF4aW11bV9saW5lX2xlbmd0aDsKICAgICAgICAkbGVuZ3RoX3RvbCAqPSAyOwogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFRoZXNlIGFycmF5cyBhcmUgdXNlZCB0byBtYXJrIHRoZSBhZmZlY3RlZCBjb250YWluZXJzOgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIG15ICRyYnJlYWtfYmVmb3JlX2NvbnRhaW5lcl9ieV9zZXFubyA9IHt9OwogICAgbXkgJHJ3YW50X3JlZHVjZWRfY2kgICAgICAgICAgICAgICAgID0ge307CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBNYWluIGxvb3Agb3ZlciBhbGwgY29udGFpbmVycwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZm9yZWFjaCBteSAkc2Vxbm8gKCBrZXlzICV7JEtfb3BlbmluZ19jb250YWluZXJ9ICkgewoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgUGFydCAxOiBFeGFtaW5lIGFueSAtYmJ4PW4gZmxhZ3MKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICBuZXh0IGlmICggJHJibG9ja190eXBlX29mX3NlcW5vLT57JHNlcW5vfSApOwogICAgICAgIG15ICRLSyA9ICRLX29wZW5pbmdfY29udGFpbmVyLT57JHNlcW5vfTsKCiAgICAgICAgIyBUaGlzIG11c3QgYmUgYSBsaXN0IG9yIGNvbnRhaW4gYSBsaXN0LgogICAgICAgICMgTm90ZTE6IHN3aXRjaGVkIGZyb20gJ2hhc19icm9rZW5fbGlzdCcgdG8gJ2hhc19saXN0JyB0byBmaXggYjEwMjQuCiAgICAgICAgIyBOb3RlMjogJ2hhc19saXN0JyBob2xkcyB0aGUgZGVwdGggdG8gdGhlIHN1Yi1saXN0LiAgV2Ugd2lsbCByZXF1aXJlCiAgICAgICAgIyAgYSBkZXB0aCBvZiBqdXN0IDEKICAgICAgICBteSAkaXNfbGlzdCAgPSAkc2VsZi0+aXNfbGlzdF9ieV9zZXFubygkc2Vxbm8pOwogICAgICAgIG15ICRoYXNfbGlzdCA9ICRyaGFzX2xpc3QtPnskc2Vxbm99OwoKICAgICAgICAjIEZpeCBmb3IgYjExNzM6IGlmIHdlbGRlZCBvcGVuaW5nIGNvbnRhaW5lciwgdXNlIGZsYWcgb2YgaW5uZXJtb3N0CiAgICAgICAgIyBzZXFuby4gIE90aGVyd2lzZSwgdGhlIHJlc3RyaWN0aW9uICRoYXNfbGlzdD09MSBwcmV2ZW50cyB0cmlwbGUgYW5kCiAgICAgICAgIyBoaWdoZXIgd2VsZHMgZnJvbSBmb2xsb3dpbmcgdGhlIC1CQlggcGFyYW1ldGVycy4KICAgICAgICBpZiAoJHRvdGFsX3dlbGRfY291bnQpIHsKICAgICAgICAgICAgbXkgJEtLX3Rlc3QgPSAkcktfd2VsZF9yaWdodC0+eyRLS307CiAgICAgICAgICAgIGlmICggZGVmaW5lZCgkS0tfdGVzdCkgKSB7CiAgICAgICAgICAgICAgICBteSAkc2Vxbm9faW5uZXIgPSAkckxMLT5bJEtLX3Rlc3RdLT5bX1RZUEVfU0VRVUVOQ0VfXTsKICAgICAgICAgICAgICAgICRpc19saXN0IHx8PSAkc2VsZi0+aXNfbGlzdF9ieV9zZXFubygkc2Vxbm9faW5uZXIpOwogICAgICAgICAgICAgICAgJGhhc19saXN0ID0gJHJoYXNfbGlzdC0+eyRzZXFub19pbm5lcn07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG5leHQgdW5sZXNzICggJGlzX2xpc3QgfHwgJGhhc19saXN0ICYmICRoYXNfbGlzdCA9PSAxICk7CgogICAgICAgIG15ICRoYXNfbGlzdF93aXRoX2xlYyA9ICRyaGFzX2Jyb2tlbl9saXN0X3dpdGhfbGVjLT57JHNlcW5vfTsKCiAgICAgICAgIyBPbmx5IGZvciB0eXBlcyBvZiBjb250YWluZXIgdG9rZW5zIHdpdGggYSBub24tZGVmYXVsdCBicmVhayBvcHRpb24KICAgICAgICBteSAkdG9rZW4gICAgICAgID0gJHJMTC0+WyRLS10tPltfVE9LRU5fXTsKICAgICAgICBteSAkYnJlYWtfb3B0aW9uID0gJGJyZWFrX2JlZm9yZV9jb250YWluZXJfdHlwZXN7JHRva2VufTsKICAgICAgICBuZXh0IHVubGVzcyAoJGJyZWFrX29wdGlvbik7CgogICAgICAgICMgRG8gbm90IHVzZSAtYmJ4IHVuZGVyIHN0cmVzcyBmb3Igc3RhYmlsaXR5IC4uLiBmaXhlcyBiMTMwMAogICAgICAgICMgVE9ETzogcmV2aWV3IHRoaXM7IGRvIHdlIGFsc28gbmVlZCB0byBsb29rIGF0IHN0cmVzc19sZXZlbF9sYWxwaGE/CiAgICAgICAgbXkgJGxldmVsID0gJHJMTC0+WyRLS10tPltfTEVWRUxfXTsKICAgICAgICBpZiAoICRsZXZlbCA+PSAkc3RyZXNzX2xldmVsX2JldGEgKSB7CiAgICAgICAgICAgIERFQlVHX0JCWAogICAgICAgICAgICAgICYmIHByaW50CiJCQlg6IFN3aXRjaGluZyBvZmYgYXQgJHNlcW5vOiBsZXZlbD0kbGV2ZWwgZXhjZWVkcyBiZXRhIHN0cmVzcyBsZXZlbD0kc3RyZXNzX2xldmVsX2JldGFcbiI7CiAgICAgICAgICAgIG5leHQ7CiAgICAgICAgfQoKICAgICAgICAjIFJlcXVpcmUgcHJldmlvdXMgbm9uYmxhbmsgdG8gYmUgJz0nIG9yICc9PicKICAgICAgICBteSAkS3ByZXYgPSAkS0sgLSAxOwogICAgICAgIG5leHQgaWYgKCAkS3ByZXYgPCAwICk7CiAgICAgICAgbXkgJHByZXZfdHlwZSA9ICRyTEwtPlskS3ByZXZdLT5bX1RZUEVfXTsKICAgICAgICBpZiAoICRwcmV2X3R5cGUgZXEgJ2InICkgewogICAgICAgICAgICAkS3ByZXYtLTsKICAgICAgICAgICAgbmV4dCBpZiAoICRLcHJldiA8IDAgKTsKICAgICAgICAgICAgJHByZXZfdHlwZSA9ICRyTEwtPlskS3ByZXZdLT5bX1RZUEVfXTsKICAgICAgICB9CiAgICAgICAgbmV4dCB1bmxlc3MgKCAkaXNfZXF1YWxfb3JfZmF0X2NvbW1heyRwcmV2X3R5cGV9ICk7CgogICAgICAgIG15ICRjaSA9ICRyTEwtPlskS0tdLT5bX0NJX0xFVkVMX107CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgTmV3IGNvZGluZyBmb3Igb3B0aW9uIDIgKGJyZWFrIGlmIGNvbXBsZXgpLgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgVGhpcyBuZXcgY29kaW5nIHVzZXMgY2x1ZXMgd2hpY2ggYXJlIGludmFyaWFudCB1bmRlciBmb3JtYXR0aW5nIHRvCiAgICAgICAgIyBkZWNpZGUgaWYgYSBsaXN0IGlzIGNvbXBsZXguICBGb3Igbm93IGl0IGlzIG9ubHkgYXBwbGllZCB3aGVuIC1scAogICAgICAgICMgYW5kIC12bWxsIGFyZSB1c2VkLCBidXQgZXZlbnR1YWxseSBpdCBtYXkgYmVjb21lIHRoZSBzdGFuZGFyZCBtZXRob2QuCiAgICAgICAgIyBGaXhlcyBiMTI3NCwgYjEyNzUsIGFuZCBvdGhlcnMsIGluY2x1ZGluZyBiMTA5OS4KICAgICAgICAjIFVwZGF0ZTogY2FzZSBiMTQ2OSBhbHNvIGhhZCB0aGlzIHR5cGUgb2YgcHJvYmxlbTsgaXQgaGFkIHRoZQogICAgICAgICMgY29tYmluYXRpb24gY2k+aSBhbmQgdXNlZCAteGNpLiBUaGlzIGlzIGp1c3QgYSBiYW5kLWFpZDsgZXZlbnR1YWxseQogICAgICAgICMgaXQgbWlnaHQgYmUgYmVzdCBpZiBhbGwgY2FzZXMgdXNlIHRoaXMgbG9naWMsIGJ1dCB0aGF0IHdvdWxkIGNoYW5nZQogICAgICAgICMgZXhpc3RpbmcgZm9ybWF0dGluZy4KICAgICAgICBpZiAoICRicmVha19vcHRpb24gPT0gMiApIHsKCiAgICAgICAgICAgIG15ICRiMTQ2OSA9ICRyT3B0c19jb250aW51YXRpb25faW5kZW50YXRpb24gPiAkck9wdHNfaW5kZW50X2NvbHVtbnMKICAgICAgICAgICAgICAmJiAkck9wdHNfZXh0ZW5kZWRfY29udGludWF0aW9uX2luZGVudGF0aW9uOwoKICAgICAgICAgICAgaWYgKCAgICRyT3B0c19saW5lX3VwX3BhcmVudGhlc2VzCiAgICAgICAgICAgICAgICB8fCAkck9wdHNfdmFyaWFibGVfbWF4aW11bV9saW5lX2xlbmd0aAogICAgICAgICAgICAgICAgfHwgJGIxNDY5ICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICMgU3RhcnQgd2l0aCB0aGUgYmFzaWMgZGVmaW5pdGlvbiBvZiBhIGNvbXBsZXggbGlzdC4uLgogICAgICAgICAgICAgICAgbXkgJGlzX2NvbXBsZXggPSAkaXNfbGlzdCAmJiAkaGFzX2xpc3Q7CgogICAgICAgICAgICAgICAgIyBhbmQgaXQgaXMgYWxzbyBjb21wbGV4IGlmIHRoZSBwYXJlbnQgaXMgYSBsaXN0CiAgICAgICAgICAgICAgICBpZiAoICEkaXNfY29tcGxleCApIHsKICAgICAgICAgICAgICAgICAgICBteSAkcGFyZW50ID0gJHJwYXJlbnRfb2Zfc2Vxbm8tPnskc2Vxbm99OwogICAgICAgICAgICAgICAgICAgIGlmICggJHNlbGYtPmlzX2xpc3RfYnlfc2Vxbm8oJHBhcmVudCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRpc19jb21wbGV4ID0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBmaW5hbGx5LCB3ZSB3aWxsIGNhbGwgaXQgY29tcGxleCBpZiB0aGVyZSBhcmUgaW5uZXIgb3BlbmluZwogICAgICAgICAgICAgICAgIyBhbmQgY2xvc2luZyBjb250YWluZXIgdG9rZW5zLCBub3QgcGFyZW5zLCB3aXRoaW4gdGhlIG91dGVyCiAgICAgICAgICAgICAgICAjIGNvbnRhaW5lciB0b2tlbnMuCiAgICAgICAgICAgICAgICBpZiAoICEkaXNfY29tcGxleCApIHsKICAgICAgICAgICAgICAgICAgICBteSAkS3AgICAgICA9ICRzZWxmLT5LX25leHRfbm9uYmxhbmsoJEtLKTsKICAgICAgICAgICAgICAgICAgICBteSAkdG9rZW5fcCA9IGRlZmluZWQoJEtwKSA/ICRyTEwtPlskS3BdLT5bX1RPS0VOX10gOiAnYic7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkaXNfb3BlbmluZ190b2tlbnskdG9rZW5fcH0gJiYgJHRva2VuX3AgbmUgJygnICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJEtjICAgICAgPSAkS19jbG9zaW5nX2NvbnRhaW5lci0+eyRzZXFub307CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRLbSAgICAgID0gJHNlbGYtPktfcHJldmlvdXNfbm9uYmxhbmsoJEtjKTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHRva2VuX20gPSAnYic7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICR0eXBlX20gID0gU1BBQ0U7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCgkS20pICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRva2VuX20gPSAkckxMLT5bJEttXS0+W19UT0tFTl9dOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGVfbSAgPSAkckxMLT5bJEttXS0+W19UWVBFX107CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgaWdub3JlIGFueSBvcHRpb25hbCBlbmRpbmcgY29tbWEKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkdHlwZV9tIGVxICcsJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRLbSA9ICRzZWxmLT5LX3ByZXZpb3VzX25vbmJsYW5rKCRLbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdG9rZW5fbSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQoJEttKSA/ICRyTEwtPlskS21dLT5bX1RPS0VOX10gOiAnYic7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICRpc19jb21wbGV4IHx8PQogICAgICAgICAgICAgICAgICAgICAgICAgICRpc19jbG9zaW5nX3Rva2VueyR0b2tlbl9tfSAmJiAkdG9rZW5fbSBuZSAnKSc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgQ29udmVydCB0byBvcHRpb24gMyAoYWx3YXlzIGJyZWFrKSBpZiBjb21wbGV4CiAgICAgICAgICAgICAgICBuZXh0IHVubGVzcyAoJGlzX2NvbXBsZXgpOwogICAgICAgICAgICAgICAgJGJyZWFrX29wdGlvbiA9IDM7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgRml4IGZvciBiMTIzMTogdGhlIGhhc19saXN0X3dpdGhfbGVjIGRvZXMgbm90IGNvdmVyIGFsbCBjYXNlcy4KICAgICAgICAjIEEgYnJva2VuIGNvbnRhaW5lciBjb250YWluaW5nIGEgbGlzdCBhbmQgd2l0aCBsaW5lLWVuZGluZyBjb21tYXMKICAgICAgICAjIHdpbGwgc3RheSBicm9rZW4sIHNvIGNhbiBiZSB0cmVhdGVkIGFzIGlmIGl0IGhhZCBhIGxpc3Qgd2l0aCBsZWMuCiAgICAgICAgJGhhc19saXN0X3dpdGhfbGVjIHx8PQogICAgICAgICAgICAgJGhhc19saXN0CiAgICAgICAgICAmJiAkcmlzX2Jyb2tlbl9jb250YWluZXItPnskc2Vxbm99CiAgICAgICAgICAmJiAkcmxlY19jb3VudF9ieV9zZXFuby0+eyRzZXFub307CgogICAgICAgIERFQlVHX0JCWAogICAgICAgICAgJiYgcHJpbnQgeypTVERPVVR9CiJCQlg6IExvb2tpbmcgYXQgc2Vxbm89JHNlcW5vLCB0b2tlbiA9ICR0b2tlbiB3aXRoIG9wdGlvbj0kYnJlYWtfb3B0aW9uXG4iOwoKICAgICAgICAjIC1iYng9MSA9IHN0YWJsZSwgdHJ5IHRvIGZvbGxvdyBpbnB1dAogICAgICAgIGlmICggJGJyZWFrX29wdGlvbiA9PSAxICkgewoKICAgICAgICAgICAgbXkgJGlsaW5lICAgID0gJHJMTC0+WyRLS10tPltfTElORV9JTkRFWF9dOwogICAgICAgICAgICBteSAkcktfcmFuZ2UgPSAkcmxpbmVzLT5bJGlsaW5lXS0+e19yS19yYW5nZX07CiAgICAgICAgICAgIG15ICggJEtmaXJzdCwgJEtsYXN0X3V1ICkgPSBAeyRyS19yYW5nZX07CiAgICAgICAgICAgIG5leHQgdW5sZXNzICggJEtLID09ICRLZmlyc3QgKTsKICAgICAgICB9CgogICAgICAgICMgLWJieD0yID0+IGFwcGx5IHRoaXMgc3R5bGUgb25seSBmb3IgYSAnY29tcGxleCcgbGlzdAogICAgICAgIGVsc2lmICggJGJyZWFrX29wdGlvbiA9PSAyICkgewoKICAgICAgICAgICAgIyAgYnJlYWsgaWYgdGhpcyBsaXN0IGNvbnRhaW5zIGEgYnJva2VuIGxpc3Qgd2l0aCBsaW5lLWVuZGluZyBjb21tYQogICAgICAgICAgICBteSAkb2tfdG9fYnJlYWs7CiAgICAgICAgICAgIG15ICRNc2cgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgIGlmICgkaGFzX2xpc3Rfd2l0aF9sZWMpIHsKICAgICAgICAgICAgICAgICRva190b19icmVhayA9IDE7CiAgICAgICAgICAgICAgICBERUJVR19CQlggJiYgZG8geyAkTXNnID0gImhhcyBsaXN0IHdpdGggbGVjOyIgfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAhJG9rX3RvX2JyZWFrICkgewoKICAgICAgICAgICAgICAgICMgVHVybiBvZmYgLXhjaSBpZiAtYmJ4PTIgYW5kIHRoaXMgY29udGFpbmVyIGhhcyBhIHN1Ymxpc3QgYnV0CiAgICAgICAgICAgICAgICAjIG5vdCBhIGJyb2tlbiBzdWJsaXN0LiBUaGlzIGF2b2lkcyBjcmVhdGluZyBibGlua2Vycy4gIFRoZQogICAgICAgICAgICAgICAgIyBwcm9ibGVtIGlzIHRoYXQgLXhjaSBjYW4gY2F1c2Ugb25lLWxpbmUgbGlzdHMgdG8gYnJlYWsgb3BlbiwKICAgICAgICAgICAgICAgICMgYW5kIHRoZXJlYnkgY3JlYXRpbmcgZm9ybWF0dGluZyBpbnN0YWJpbGl0eS4KICAgICAgICAgICAgICAgICMgVGhpcyBmaXhlcyBjYXNlcyBiMTAzMyBiMTAzNiBiMTAzNyBiMTAzOCBiMTA0MiBiMTA0MyBiMTA0NAogICAgICAgICAgICAgICAgIyBiMTA0NSBiMTA0NiBiMTA0NyBiMTA1MSBiMTA1MiBiMTA2MS4KICAgICAgICAgICAgICAgIGlmICgkaGFzX2xpc3QpIHsgJHJub194Y2lfYnlfc2Vxbm8tPnskc2Vxbm99ID0gMSB9CgogICAgICAgICAgICAgICAgbXkgJHBhcmVudCA9ICRycGFyZW50X29mX3NlcW5vLT57JHNlcW5vfTsKICAgICAgICAgICAgICAgIGlmICggJHNlbGYtPmlzX2xpc3RfYnlfc2Vxbm8oJHBhcmVudCkgKSB7CiAgICAgICAgICAgICAgICAgICAgREVCVUdfQkJYICYmIGRvIHsgJE1zZyA9ICJwYXJlbnQgaXMgbGlzdCIgfTsKICAgICAgICAgICAgICAgICAgICAkb2tfdG9fYnJlYWsgPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICEkb2tfdG9fYnJlYWsgKSB7CiAgICAgICAgICAgICAgICBERUJVR19CQlgKICAgICAgICAgICAgICAgICAgJiYgcHJpbnQgeypTVERPVVR9ICJOb3QgYnJlYWtpbmcgYXQgc2Vxbm89JHNlcW5vOiAkTXNnXG4iOwogICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgREVCVUdfQkJYCiAgICAgICAgICAgICAgJiYgcHJpbnQgeypTVERPVVR9ICJPSyB0byBicmVhayBhdCBzZXFubz0kc2Vxbm86ICRNc2dcbiI7CgogICAgICAgICAgICAjIFBhdGNoOiB0dXJuIG9mZiAteGNpIGlmIC1iYng9MiBhbmQgLWxwCiAgICAgICAgICAgICMgVGhpcyBmaXhlcyBjYXNlcyBiMTA5MCBiMTA5NSBiMTEwMSBiMTExNiBiMTExOCBiMTEyMSBiMTEyMgogICAgICAgICAgICAkcm5vX3hjaV9ieV9zZXFuby0+eyRzZXFub30gPSAxIGlmICgkck9wdHNfbGluZV91cF9wYXJlbnRoZXNlcyk7CiAgICAgICAgfQoKICAgICAgICAjIC1iYng9MyA9IGFsd2F5cyBicmVhawogICAgICAgIGVsc2lmICggJGJyZWFrX29wdGlvbiA9PSAzICkgewoKICAgICAgICAgICAgIyBvayB0byBicmVhawogICAgICAgIH0KCiAgICAgICAgIyBCYWQgZmxhZywgdGhpcyBzaG91bGRuJ3QgaGFwcGVuIGJlY2F1c2Ugb2YgdGhlIGludGVnZXIgcmFuZ2UgY2hlY2tzLgogICAgICAgICMgQ29udGludWUgdXNpbmcgYmVoYXZpb3Igc2FtZSBhcyBvcHRpb24gMyBpZiBub3QgaW4gREVWRUxfTU9ERQogICAgICAgIGVsc2UgewogICAgICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KDw8RU9NKTsKQmFkIC1iYnggYnJlYWsgb3B0aW9uPSRicmVha19vcHRpb24gZm9yICckdG9rZW4nOiBmaXggaW50ZWdlciByYW5nZSBjaGVja3MuCkVPTQogICAgICAgIH0KCiAgICAgICAgIyBTZXQgYSBmbGFnIGZvciBhY3R1YWwgaW1wbGVtZW50YXRpb24gbGF0ZXIgaW4KICAgICAgICAjIHN1YiBpbnNlcnRfYnJlYWtzX2JlZm9yZV9saXN0X29wZW5pbmdfY29udGFpbmVycwogICAgICAgICRyYnJlYWtfYmVmb3JlX2NvbnRhaW5lcl9ieV9zZXFuby0+eyRzZXFub30gPSAxOwogICAgICAgIERFQlVHX0JCWAogICAgICAgICAgJiYgcHJpbnQgeypTVERPVVR9ICJCQlg6IG9rIHRvIGJyZWFrIGF0IHNlcW5vPSRzZXFub1xuIjsKCiAgICAgICAgIyAtYmJ4aT0wOiBOb3RoaW5nIG1vcmUgdG8gZG8gaWYgdGhlIGNpIHZhbHVlIHJlbWFpbnMgdW5jaGFuZ2VkCiAgICAgICAgbXkgJGNpX2ZsYWcgPSAkY29udGFpbmVyX2luZGVudGF0aW9uX29wdGlvbnN7JHRva2VufTsKICAgICAgICBuZXh0IHVubGVzcyAoJGNpX2ZsYWcpOwoKICAgICAgICAjIC1iYnhpPTE6IFRoaXMgb3B0aW9uIHJlbW92ZXMgY2kgYW5kIGlzIGhhbmRsZWQgaW4KICAgICAgICAjIGxhdGVyIHN1YiBnZXRfZmluYWxfaW5kZW50YXRpb24KICAgICAgICBpZiAoICRjaV9mbGFnID09IDEgKSB7CiAgICAgICAgICAgICRyd2FudF9yZWR1Y2VkX2NpLT57JHNlcW5vfSA9IDE7CiAgICAgICAgICAgIG5leHQ7CiAgICAgICAgfQoKICAgICAgICAjIC1iYnhpPTI6IFRoaXMgb3B0aW9uIGNoYW5nZXMgdGhlIGxldmVsIC4uLgogICAgICAgICMgVGhpcyBvcHRpb24gY2FuIGNvbmZsaWN0IHdpdGggLXhjaSBpbiBzb21lIGNhc2VzLiAgV2UgY2FuIHR1cm4gb2ZmCiAgICAgICAgIyAteGNpIGZvciB0aGlzIGNvbnRhaW5lciB0byBhdm9pZCBibGlua2luZy4gIEZvciBub3csIG9ubHkgZG8gdGhpcyBpZgogICAgICAgICMgLXZtbGwgaXMgc2V0LiAgKCBmaXhlcyBiMTMzNSwgYjEzMzYgKQogICAgICAgIGlmICgkck9wdHNfdmFyaWFibGVfbWF4aW11bV9saW5lX2xlbmd0aCkgewogICAgICAgICAgICAkcm5vX3hjaV9ieV9zZXFuby0+eyRzZXFub30gPSAxOwogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIFBhcnQgMjogUGVyZm9ybSB0ZXN0cyBiZWZvcmUgY29tbWl0dGluZyB0byBjaGFuZ2luZyBjaSBhbmQgbGV2ZWwKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAjIEJlZm9yZSBjaGFuZ2luZyB0aGUgY2kgbGV2ZWwgb2YgdGhlIG9wZW5pbmcgY29udGFpbmVyLCB3ZSBuZWVkCiAgICAgICAgIyB0byBiZSBzdXJlIHRoYXQgdGhlIGNvbnRhaW5lciB3aWxsIGJlIGJyb2tlbiBpbiB0aGUgbGF0ZXIgc3RhZ2VzIG9mCiAgICAgICAgIyBmb3JtYXR0aW5nLiAgV2UgaGF2ZSB0byBkbyB0aGlzIGJlY2F1c2Ugd2UgYXJlIHdvcmtpbmcgZWFybHkgaW4gdGhlCiAgICAgICAgIyBmb3JtYXR0aW5nIHBpcGVsaW5lLiAgQSBwcm9ibGVtIGNhbiBvY2N1ciBpZiB3ZSBjaGFuZ2UgdGhlIGNpIG9yCiAgICAgICAgIyBsZXZlbCBvZiB0aGUgb3BlbmluZyB0b2tlbiBidXQgZG8gbm90IGFjdHVhbGx5IGJyZWFrIHRoZSBjb250YWluZXIKICAgICAgICAjIG9wZW4gYXMgZXhwZWN0ZWQuICBJbiBtb3N0IGNhc2VzIGl0IHdvdWxkbid0IG1ha2UgYW55IGRpZmZlcmVuY2UgaWYKICAgICAgICAjIHdlIGNoYW5nZWQgY2kgb3Igbm90LCBidXQgdGhlcmUgYXJlIHNvbWUgZWRnZSBjYXNlcyB3aGVyZSB0aGlzCiAgICAgICAgIyBjYW4gY2F1c2UgYmxpbmtpbmcgc3RhdGVzLCBzbyB3ZSBuZWVkIHRvIHRyeSB0byBvbmx5IGNoYW5nZSBjaSBpZgogICAgICAgICMgdGhlIGNvbnRhaW5lciB3aWxsIHJlYWxseSBiZSBicm9rZW4uCgogICAgICAgICMgT25seSBjb25zaWRlciBjb250YWluZXJzIGFscmVhZHkgYnJva2VuCiAgICAgICAgbmV4dCBpZiAoICEkcmlzX2Jyb2tlbl9jb250YWluZXItPnskc2Vxbm99ICk7CgogICAgICAgICMgUGF0Y2ggdG8gZml4IGlzc3VlIGIxMzA1OiB0aGUgY29tYmluYXRpb24gb2YgLW5hd3MgYW5kIGNpPmkgYXBwZWFycwogICAgICAgICMgdG8gY2F1c2UgYW4gaW5zdGFiaWxpdHkuICBJdCBzaG91bGQgYWxtb3N0IG5ldmVyIG9jY3VyIGluIHByYWN0aWNlLgogICAgICAgIG5leHQKICAgICAgICAgIGlmICghJHJPcHRzX2FkZF93aGl0ZXNwYWNlCiAgICAgICAgICAgICYmICRyT3B0c19jb250aW51YXRpb25faW5kZW50YXRpb24gPiAkck9wdHNfaW5kZW50X2NvbHVtbnMgKTsKCiAgICAgICAgIyBBbHdheXMgb2sgdG8gY2hhbmdlIGNpIGZvciBwZXJtYW5lbnRseSBicm9rZW4gY29udGFpbmVycwogICAgICAgIGlmICggJHJpc19wZXJtYW5lbnRseV9icm9rZW4tPnskc2Vxbm99ICkgeyB9CgogICAgICAgICMgQWx3YXlzIE9LIGlmIHRoaXMgbGlzdCBjb250YWlucyBhIGJyb2tlbiBzdWItY29udGFpbmVyIHdpdGgKICAgICAgICAjIGEgbm9uLXRlcm1pbmFsIGxpbmUtZW5kaW5nIGNvbW1hCiAgICAgICAgZWxzaWYgKCRoYXNfbGlzdF93aXRoX2xlYykgeyB9CgogICAgICAgICMgT3RoZXJ3aXNlLCB3ZSBhcmUgY29uc2lkZXJpbmcgYSBzaW5nbGUgY29udGFpbmVyLi4uCiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIEEgc2luZ2xlIGNvbnRhaW5lciBtdXN0IGhhdmUgYXQgbGVhc3QgMSBsaW5lLWVuZGluZyBjb21tYToKICAgICAgICAgICAgbmV4dCB1bmxlc3MgKCAkcmxlY19jb3VudF9ieV9zZXFuby0+eyRzZXFub30gKTsKCiAgICAgICAgICAgIG15ICRPSzsKCiAgICAgICAgICAgICMgU2luY2UgaXQgaGFzIGEgbGluZS1lbmRpbmcgY29tbWEsIGl0IHdpbGwgc3RheSBicm9rZW4gaWYgdGhlCiAgICAgICAgICAgICMgLWJvYyBmbGFnIGlzIHNldAogICAgICAgICAgICBpZiAoJHJPcHRzX2JyZWFrX2F0X29sZF9jb21tYV9icmVha3BvaW50cykgeyAkT0sgPSAxIH0KCiAgICAgICAgICAgICMgT0sgaWYgdGhlIGNvbnRhaW5lciBjb250YWlucyBtdWx0aXBsZSBmYXQgY29tbWFzCiAgICAgICAgICAgICMgQmV0dGVyOiBtdWx0aXBsZSBsaW5lcyB3aXRoIGZhdCBjb21tYXMKICAgICAgICAgICAgaWYgKCAhJE9LICYmICEkck9wdHNfaWdub3JlX29sZF9icmVha3BvaW50cyApIHsKICAgICAgICAgICAgICAgIG15ICRydHlwZV9jb3VudCA9ICRydHlwZV9jb3VudF9ieV9zZXFuby0+eyRzZXFub307CiAgICAgICAgICAgICAgICBuZXh0IHVubGVzcyAoJHJ0eXBlX2NvdW50KTsKICAgICAgICAgICAgICAgIG15ICRmYXRfY29tbWFfY291bnQgPSAkcnR5cGVfY291bnQtPnsnPT4nfTsKICAgICAgICAgICAgICAgIERFQlVHX0JCWAogICAgICAgICAgICAgICAgICAmJiBwcmludCB7KlNURE9VVH0gIkJCWDogZmF0IGNvbW1hIGNvdW50PSRmYXRfY29tbWFfY291bnRcbiI7CiAgICAgICAgICAgICAgICBpZiAoICRmYXRfY29tbWFfY291bnQgJiYgJGZhdF9jb21tYV9jb3VudCA+PSAyICkgeyAkT0sgPSAxIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBUaGUgbGFzdCBjaGVjayB3ZSBjYW4gbWFrZSBpcyB0byBzZWUgaWYgdGhpcyBjb250YWluZXIgY291bGQKICAgICAgICAgICAgIyBmaXQgb24gYSBzaW5nbGUgbGluZS4gIFVzZSB0aGUgbGVhc3QgcG9zc2libGUgaW5kZW50YXRpb24KICAgICAgICAgICAgIyBlc3RpbWF0ZSwgY2k9MCwgc28gd2UgYXJlIG5vdCBzdWJ0cmFjdGluZyAkY2kgKgogICAgICAgICAgICAjICRyT3B0c19jb250aW51YXRpb25faW5kZW50YXRpb24gZnJvbSB0YWJ1bGF0ZWQKICAgICAgICAgICAgIyAkbWF4aW11bV90ZXh0X2xlbmd0aCAgdmFsdWUuCiAgICAgICAgICAgIGlmICggISRPSyApIHsKICAgICAgICAgICAgICAgIG15ICRtYXhpbXVtX3RleHRfbGVuZ3RoID0gJG1heGltdW1fdGV4dF9sZW5ndGhfYXRfbGV2ZWxbJGxldmVsXTsKICAgICAgICAgICAgICAgIG15ICRLX2Nsb3NpbmcgICAgICAgICAgID0gJEtfY2xvc2luZ19jb250YWluZXItPnskc2Vxbm99OwogICAgICAgICAgICAgICAgbXkgJGxlbmd0aCA9ICRzZWxmLT5jdW11bGF0aXZlX2xlbmd0aF9iZWZvcmVfSygkS19jbG9zaW5nKSAtCiAgICAgICAgICAgICAgICAgICRzZWxmLT5jdW11bGF0aXZlX2xlbmd0aF9iZWZvcmVfSygkS0spOwogICAgICAgICAgICAgICAgbXkgJGV4Y2Vzc19sZW5ndGggPSAkbGVuZ3RoIC0gJG1heGltdW1fdGV4dF9sZW5ndGg7CiAgICAgICAgICAgICAgICBERUJVR19CQlgKICAgICAgICAgICAgICAgICAgJiYgcHJpbnQgeypTVERPVVR9CiJCQlg6IGV4Y2Vzcz0kZXhjZXNzX2xlbmd0aDogbWF4aW11bV90ZXh0X2xlbmd0aD0kbWF4aW11bV90ZXh0X2xlbmd0aCwgbGVuZ3RoPSRsZW5ndGgsIGNpPSRjaVxuIjsKCiAgICAgICAgICAgICAgICAjIE9LIGlmIHRoZSBuZXQgY29udGFpbmVyIGRlZmluaXRlbHkgYnJlYWtzIG9uIGxlbmd0aAogICAgICAgICAgICAgICAgaWYgKCAkZXhjZXNzX2xlbmd0aCA+ICRsZW5ndGhfdG9sICkgewogICAgICAgICAgICAgICAgICAgICRPSyA9IDE7CiAgICAgICAgICAgICAgICAgICAgREVCVUdfQkJYCiAgICAgICAgICAgICAgICAgICAgICAmJiBwcmludCB7KlNURE9VVH0gIkJCWDogZXhjZXNzX2xlbmd0aD0kZXhjZXNzX2xlbmd0aFxuIjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIE90aGVyd2lzZSBza2lwIGl0CiAgICAgICAgICAgICAgICBlbHNlIHsgbmV4dCB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIFBhcnQgMzogTG9va3MgT0s6IGFwcGx5IC1iYng9biBhbmQgYW55IHJlbGF0ZWQgLWJieGk9biBmbGFnCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICBERUJVR19CQlggJiYgcHJpbnQgeypTVERPVVR9ICJCQlg6IE9LIHRvIGJyZWFrXG4iOwoKICAgICAgICAjIC1iYmhiaT1uCiAgICAgICAgIyAtYmJzYmk9bgogICAgICAgICMgLWJicGk9bgoKICAgICAgICAjIHdoZXJlOgoKICAgICAgICAjIG49MCAgZGVmYXVsdCBpbmRlbnRhdGlvbiAodXN1YWxseSBvbmUgY2kpCiAgICAgICAgIyBuPTEgIG91dGRlbnQgb25lIGNpCiAgICAgICAgIyBuPTIgIGluZGVudCBvbmUgbGV2ZWwgKG1pbnVzIG9uZSBjaSkKCiAgICAgICAgIyBOT1RFOiBXZSBhcmUgYWRqdXN0aW5nIGluZGVudGF0aW9uIG9mIHRoZSBvcGVuaW5nIGNvbnRhaW5lci4gVGhlCiAgICAgICAgIyBjbG9zaW5nIGNvbnRhaW5lciB3aWxsIG5vcm1hbGx5IGZvbGxvdyB0aGUgaW5kZW50YXRpb24gb2YgdGhlIG9wZW5pbmcKICAgICAgICAjIGNvbnRhaW5lciBhdXRvbWF0aWNhbGx5LCBzbyB0aGlzIGlzIG5vdCBjdXJyZW50bHkgZG9uZS4KICAgICAgICBuZXh0IHVubGVzcyAoJGNpKTsKCiAgICAgICAgIyBvcHRpb24gMTogb3V0ZGVudAogICAgICAgIGlmICggJGNpX2ZsYWcgPT0gMSApIHsKICAgICAgICAgICAgJGNpIC09IDE7CiAgICAgICAgfQoKICAgICAgICAjIG9wdGlvbiAyOiBpbmRlbnQgb25lIGxldmVsCiAgICAgICAgZWxzaWYgKCAkY2lfZmxhZyA9PSAyICkgewogICAgICAgICAgICAkY2kgLT0gMTsKICAgICAgICAgICAgJHJhZGp1c3RlZF9sZXZlbHMtPlskS0tdICs9IDE7CiAgICAgICAgfQoKICAgICAgICAjIHVua25vd24gb3B0aW9uCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICMgU2hvdWxkbid0IGhhcHBlbiAtIGxlYXZlIGNpIHVuY2hhbmdlZAogICAgICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KDw8RU9NKTsKdW5leHBlY3RlZCBjaSBmbGFnICckY2lfZmxhZycgZm9yIC1iYnBpIC1iYnNiaSAtYmJoYmk6IGV4cGVjdGluZyBvbmUgb2YgMCAxIDIKRU9NCiAgICAgICAgfQoKICAgICAgICAkckxMLT5bJEtLXS0+W19DSV9MRVZFTF9dID0gJGNpIGlmICggJGNpID49IDAgKTsKICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFN0b3JlIHRoZSByZXN1bHRzCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAkc2VsZi0+W19yYnJlYWtfYmVmb3JlX2NvbnRhaW5lcl9ieV9zZXFub19dID0KICAgICAgJHJicmVha19iZWZvcmVfY29udGFpbmVyX2J5X3NlcW5vOwogICAgJHNlbGYtPltfcndhbnRfcmVkdWNlZF9jaV9dID0gJHJ3YW50X3JlZHVjZWRfY2k7CgogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgYnJlYWtfYmVmb3JlX2xpc3Rfb3BlbmluZ19jb250YWluZXJzCgp1c2UgY29uc3RhbnQgREVCVUdfWENJID0+IDA7CgpzdWIgZXh0ZW5kZWRfY2kgewoKICAgIG15ICgkc2VsZikgPSBAXzsKCiAgICAjIFRoaXMgcm91dGluZSBpbXBsZW1lbnRzIHRoZSAteGNpICgtLWV4dGVuZGVkLWNvbnRpbnVhdGlvbi1pbmRlbnRhdGlvbikKICAgICMgZmxhZy4gIFdlIGFkZCBDSSB0byBpbnRlcmlvciB0b2tlbnMgb2YgYSBjb250YWluZXIgd2hpY2ggaXRzZWxmIGhhcyBDSSBidXQKICAgICMgb25seSBpZiBhIHRva2VuIGRvZXMgbm90IGFscmVhZHkgaGF2ZSBDSS4KCiAgICAjIFRvIGRvIHRoaXMsIHdlIHdpbGwgbG9jYXRlIG9wZW5pbmcgdG9rZW5zIHdoaWNoIHRoZW1zZWx2ZXMgaGF2ZQogICAgIyBjb250aW51YXRpb24gaW5kZW50YXRpb24gKENJKS4gIFdlIHRyYWNrIHRoZW0gd2l0aCB0aGVpciBzZXF1ZW5jZQogICAgIyBudW1iZXJzLiAgVGhlc2Ugc2VxdWVuY2UgbnVtYmVycyBhcmUgY2FsbGVkICdjb250cm9sbGluZyBzZXF1ZW5jZQogICAgIyBudW1iZXJzJy4gIFRoZXkgYXBwbHkgY29udGludWF0aW9uIGluZGVudGF0aW9uIHRvIHRoZSB0b2tlbnMgdGhhdCB0aGV5CiAgICAjIGNvbnRhaW4uICBUaGVzZSBpbm5lciB0b2tlbnMgcmVtZW1iZXIgdGhlaXIgY29udHJvbGxpbmcgc2VxdWVuY2UgbnVtYmVycy4KICAgICMgTGF0ZXIsIHdoZW4gdGhlc2UgaW5uZXIgdG9rZW5zIGFyZSBvdXRwdXQsIHRoZXkgaGF2ZSB0byBzZWUgaWYgdGhlIG91dHB1dAogICAgIyBsaW5lcyB3aXRoIHRoZWlyIGNvbnRyb2xsaW5nIHRva2VucyB3ZXJlIG91dHB1dCB3aXRoIENJIG9yIG5vdC4gIElmIG5vdCwKICAgICMgdGhlbiB0aGV5IG11c3QgcmVtb3ZlIHRoZWlyIENJIHRvby4KCiAgICAjIFRoZSBjb250cm9sbGluZyBDSSBjb25jZXB0IHdvcmtzIGhpZXJhcmNoaWNhbGx5LiAgQnV0IENJIGl0c2VsZiBpcyBub3QKICAgICMgaGllcmFyY2hpY2FsOyBpdCBpcyBlaXRoZXIgb24gb3Igb2ZmLiBUaGVyZSBhcmUgc29tZSByYXJlIGluc3RhbmNlcyB3aGVyZQogICAgIyBpdCB3b3VsZCBiZSBiZXN0IHRvIGhhdmUgaGllcmFyY2hpY2FsIENJIHRvbywgYnV0IG5vdCBlbm91Z2ggdG8gYmUgd29ydGgKICAgICMgdGhlIHByb2dyYW1taW5nIGVmZm9ydC4KCiAgICAjIFRoZSBvcGVyYXRpb25zIHRvIHJlbW92ZSB1bndhbnRlZCBDSSBhcmUgZG9uZSBpbiBzdWIgJ3VuZG9fY2knLgoKICAgIG15ICRyTEwgPSAkc2VsZi0+W19yTExfXTsKICAgIHJldHVybiB1bmxlc3MgKCBkZWZpbmVkKCRyTEwpICYmIEB7JHJMTH0gKTsKCiAgICBteSAkcmlzX2xpc3RfYnlfc2Vxbm8gICAgICAgID0gJHNlbGYtPltfcmlzX2xpc3RfYnlfc2Vxbm9fXTsKICAgIG15ICRyaXNfc2Vxbm9fY29udHJvbGxpbmdfY2kgPSAkc2VsZi0+W19yaXNfc2Vxbm9fY29udHJvbGxpbmdfY2lfXTsKICAgIG15ICRyc2Vxbm9fY29udHJvbGxpbmdfbXlfY2kgPSAkc2VsZi0+W19yc2Vxbm9fY29udHJvbGxpbmdfbXlfY2lfXTsKICAgIG15ICRybm9feGNpX2J5X3NlcW5vICAgICAgICAgPSAkc2VsZi0+W19ybm9feGNpX2J5X3NlcW5vX107CiAgICBteSAkcmlzX2JsaV9jb250YWluZXIgICAgICAgID0gJHNlbGYtPltfcmlzX2JsaV9jb250YWluZXJfXTsKICAgIG15ICRyYmxvY2tfdHlwZV9vZl9zZXFubyAgICAgPSAkc2VsZi0+W19yYmxvY2tfdHlwZV9vZl9zZXFub19dOwoKICAgIG15ICVhdmFpbGFibGVfc3BhY2U7CgogICAgIyBMb29wIG92ZXIgYWxsIG9wZW5pbmcgY29udGFpbmVyIHRva2VucwogICAgbXkgJEtfb3BlbmluZ19jb250YWluZXIgICAgID0gJHNlbGYtPltfS19vcGVuaW5nX2NvbnRhaW5lcl9dOwogICAgbXkgJEtfY2xvc2luZ19jb250YWluZXIgICAgID0gJHNlbGYtPltfS19jbG9zaW5nX2NvbnRhaW5lcl9dOwogICAgbXkgJHJLX3NlcXVlbmNlZF90b2tlbl9saXN0ID0gJHNlbGYtPltfcktfc2VxdWVuY2VkX3Rva2VuX2xpc3RfXTsKICAgIG15IEBzZXFub19zdGFjazsKICAgIG15ICRzZXFub190b3A7CiAgICBteSAkS19sYXN0OwoKICAgICMgVGhlIGZvbGxvd2luZyB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byBhbGxvdyBhIGxpdHRsZSBleHRyYSBzcGFjZSB0bwogICAgIyBhdm9pZCBibGlua2Vycy4gIEEgdmFsdWUgJGxlbl90b2wgPSAyMCBmaXhlZCB0aGUgZm9sbG93aW5nCiAgICAjIGZpeGVzIGNhc2VzOiBiMTAyNSBiMTAyNiBiMTAyNyBiMTAyOCBiMTAyOSBiMTAzMCBidXQgTk9UIGIxMDMxLgogICAgIyBJdCB0dXJuZWQgb3V0IHRoYXQgdGhlIHJlYWwgcHJvYmxlbSB3YXMgbWlzLXBhcnNpbmcgYSBsaXN0IGJyYWNlIGFzCiAgICAjIGEgY29kZSBibG9jayBpbiBhICd1c2UnIHN0YXRlbWVudCB3aGVuIHRoZSBsaW5lIGxlbmd0aCB3YXMgZXh0cmVtZWx5CiAgICAjIHNtYWxsLiAgQSB2YWx1ZSBvZiAwIHdvcmtzIG5vdywgYnV0IGEgc2xpZ2h0bHkgbGFyZ2VyIHZhbHVlIGNhbgogICAgIyBiZSB1c2VkIHRvIG1pbmltaXplIHRoZSBjaGFuY2Ugb2YgYSBibGlua2VyLgogICAgbXkgJGxlbl90b2wgPSAwOwoKICAgIGZvcmVhY2ggbXkgJEtLICggQHskcktfc2VxdWVuY2VkX3Rva2VuX2xpc3R9ICkgewoKICAgICAgICAjIEZpeCBhbGwgdG9rZW5zIHVwIHRvIHRoZSBuZXh0IHNlcXVlbmNlIGl0ZW0gaWYgd2UgYXJlIGNoYW5naW5nIENJCiAgICAgICAgaWYgKCRzZXFub190b3ApIHsKCiAgICAgICAgICAgIG15ICRpc19saXN0ID0gJHJpc19saXN0X2J5X3NlcW5vLT57JHNlcW5vX3RvcH07CiAgICAgICAgICAgIG15ICRzcGFjZSAgID0gJGF2YWlsYWJsZV9zcGFjZXskc2Vxbm9fdG9wfTsKICAgICAgICAgICAgbXkgJGNvdW50ICAgPSAwOwogICAgICAgICAgICBmb3JlYWNoIG15ICRLdCAoICRLX2xhc3QgKyAxIC4uICRLSyAtIDEgKSB7CgogICAgICAgICAgICAgICAgbmV4dCBpZiAoICRyTEwtPlskS3RdLT5bX0NJX0xFVkVMX10gKTsKCiAgICAgICAgICAgICAgICAjIEJ1dCBkbyBub3QgaW5jbHVkZSB0b2tlbnMgd2hpY2ggbWlnaHQgZXhjZWVkIHRoZSBsaW5lIGxlbmd0aAogICAgICAgICAgICAgICAgIyBhbmQgYXJlIG5vdCBpbiBhIGxpc3QuCiAgICAgICAgICAgICAgICAjIC4uLiBUaGlzIGZpeGVzIGNhc2UgYjEwMzEKICAgICAgICAgICAgICAgIGlmICggICAkaXNfbGlzdAogICAgICAgICAgICAgICAgICAgIHx8ICRyTEwtPlskS3RdLT5bX1RPS0VOX0xFTkdUSF9dIDwgJHNwYWNlCiAgICAgICAgICAgICAgICAgICAgfHwgJHJMTC0+WyRLdF0tPltfVFlQRV9dIGVxICcjJyApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJHJMTC0+WyRLdF0tPltfQ0lfTEVWRUxfXSA9IDE7CiAgICAgICAgICAgICAgICAgICAgJHJzZXFub19jb250cm9sbGluZ19teV9jaS0+eyRLdH0gPSAkc2Vxbm9fdG9wOwogICAgICAgICAgICAgICAgICAgICRjb3VudCsrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgICRyaXNfc2Vxbm9fY29udHJvbGxpbmdfY2ktPnskc2Vxbm9fdG9wfSArPSAkY291bnQ7CiAgICAgICAgfQoKICAgICAgICAkS19sYXN0ID0gJEtLOwoKICAgICAgICBteSAkc2Vxbm8gPSAkckxMLT5bJEtLXS0+W19UWVBFX1NFUVVFTkNFX107CgogICAgICAgICMgc2VlIGlmIHdlIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGNvbnRyb2xsaW5nIGNvbnRhaW5lcgogICAgICAgIGlmICggJHNlcW5vX3RvcCAmJiAkc2Vxbm8gPT0gJHNlcW5vX3RvcCApIHsKICAgICAgICAgICAgJHNlcW5vX3RvcCA9IHBvcCBAc2Vxbm9fc3RhY2s7CiAgICAgICAgfQoKICAgICAgICAjIFBhdGNoIHRvIGZpeCBzb21lIGJsb2NrIHR5cGVzLi4uCiAgICAgICAgIyBDZXJ0YWluIGJsb2NrIHR5cGVzIGFycml2ZSBmcm9tIHRoZSB0b2tlbml6ZXIgd2l0aG91dCBDSSBidXQgc2hvdWxkCiAgICAgICAgIyBoYXZlIGl0IGZvciB0aGlzIG9wdGlvbi4gIFRoZXNlIGluY2x1ZGUgYW5vbnltb3VzIHN1YnMgYW5kCiAgICAgICAgIyAgICAgZG8gc29ydCBtYXAgZ3JlcCBldmFsCiAgICAgICAgbXkgJGJsb2NrX3R5cGUgPSAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8tPnskc2Vxbm99OwogICAgICAgIGlmICggJGJsb2NrX3R5cGUgJiYgJGlzX2Jsb2NrX3dpdGhfY2l7JGJsb2NrX3R5cGV9ICkgewogICAgICAgICAgICAkckxMLT5bJEtLXS0+W19DSV9MRVZFTF9dID0gMTsKICAgICAgICAgICAgaWYgKCRzZXFub190b3ApIHsKICAgICAgICAgICAgICAgICRyc2Vxbm9fY29udHJvbGxpbmdfbXlfY2ktPnskS0t9ID0gJHNlcW5vX3RvcDsKICAgICAgICAgICAgICAgICRyaXNfc2Vxbm9fY29udHJvbGxpbmdfY2ktPnskc2Vxbm9fdG9wfSsrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIElmIHRoaXMgZG9lcyBub3QgaGF2ZSBjaSwgdXBkYXRlIGNpIGlmIG5lY2Vzc2FyeSBhbmQgY29udGludWUgbG9va2luZwogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAoICEkckxMLT5bJEtLXS0+W19DSV9MRVZFTF9dICkgewogICAgICAgICAgICAgICAgaWYgKCRzZXFub190b3ApIHsKICAgICAgICAgICAgICAgICAgICAkckxMLT5bJEtLXS0+W19DSV9MRVZFTF9dID0gMTsKICAgICAgICAgICAgICAgICAgICAkcnNlcW5vX2NvbnRyb2xsaW5nX215X2NpLT57JEtLfSA9ICRzZXFub190b3A7CiAgICAgICAgICAgICAgICAgICAgJHJpc19zZXFub19jb250cm9sbGluZ19jaS0+eyRzZXFub190b3B9Kys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIFdlIGFyZSBsb29raW5nIGZvciBvcGVuaW5nIGNvbnRhaW5lciB0b2tlbnMgd2l0aCBjaQogICAgICAgIG15ICRLX29wZW5pbmcgPSAkS19vcGVuaW5nX2NvbnRhaW5lci0+eyRzZXFub307CiAgICAgICAgbmV4dCB1bmxlc3MgKCBkZWZpbmVkKCRLX29wZW5pbmcpICYmICRLSyA9PSAkS19vcGVuaW5nICk7CgogICAgICAgICMgTWFrZSBzdXJlIHRoZXJlIGlzIGEgY29ycmVzcG9uZGluZyBjbG9zaW5nIGNvbnRhaW5lcgogICAgICAgICMgKGNvdWxkIGJlIG1pc3NpbmcgaWYgdGhlIHNjcmlwdCBoYXMgYSBicmFjZSBlcnJvcikKICAgICAgICBteSAkS19jbG9zaW5nID0gJEtfY2xvc2luZ19jb250YWluZXItPnskc2Vxbm99OwogICAgICAgIG5leHQgdW5sZXNzIGRlZmluZWQoJEtfY2xvc2luZyk7CgogICAgICAgICMgU2tpcCBpZiByZXF1ZXN0ZWQgYnkgLWJieCB0byBhdm9pZCBibGlua2VycwogICAgICAgIG5leHQgaWYgKCAkcm5vX3hjaV9ieV9zZXFuby0+eyRzZXFub30gKTsKCiAgICAgICAgIyBTa2lwIGlmIHRoaXMgaXMgYSAtYmxpIGNvbnRhaW5lciAodGhpcyBmaXhlcyBjYXNlIGIxMDY1KSBOb3RlOiBjYXNlCiAgICAgICAgIyBiMTA2NSBpcyBhbHNvIGZpeGVkIGJ5IHRoZSB1cGRhdGUgZm9yIGIxMDU1LCBzbyB0aGlzIHVwZGF0ZSBpcyBub3QKICAgICAgICAjIGVzc2VudGlhbCBub3cuICBCdXQgdGhlcmUgZG9lcyBub3Qgc2VlbSB0byBiZSBhIGdvb2QgcmVhc29uIHRvIGFkZAogICAgICAgICMgeGNpIGFuZCBibGkgdG9nZXRoZXIsIHNvIHRoZSB1cGRhdGUgaXMgcmV0YWluZWQuCiAgICAgICAgbmV4dCBpZiAoICRyaXNfYmxpX2NvbnRhaW5lci0+eyRzZXFub30gKTsKCiAgICAgICAgIyBSZXF1aXJlIGRpZmZlcmVudCBpbnB1dCBsaW5lcy4gVGhpcyB3aWxsIGZpbHRlciBvdXQgYSBsYXJnZSBudW1iZXIKICAgICAgICAjIG9mIHNtYWxsIGhhc2ggYnJhY2VzIGFuZCBhcnJheSBicmFja2V0cy4gIElmIHdlIGFjY2lkZW50YWxseSBmaWx0ZXIKICAgICAgICAjIG91dCBhbiBpbXBvcnRhbnQgY29udGFpbmVyLCBpdCB3aWxsIGdldCBmaXhlZCBvbiB0aGUgbmV4dCBwYXNzLgogICAgICAgIGlmICgKICAgICAgICAgICAgJHJMTC0+WyRLX29wZW5pbmddLT5bX0xJTkVfSU5ERVhfXSA9PQogICAgICAgICAgICAkckxMLT5bJEtfY2xvc2luZ10tPltfTElORV9JTkRFWF9dCiAgICAgICAgICAgICYmICggJHJMTC0+WyRLX2Nsb3NpbmddLT5bX0NVTVVMQVRJVkVfTEVOR1RIX10gLQogICAgICAgICAgICAgICAgJHJMTC0+WyRLX29wZW5pbmddLT5bX0NVTVVMQVRJVkVfTEVOR1RIX10gPgogICAgICAgICAgICAgICAgJHJPcHRzX21heGltdW1fbGluZV9sZW5ndGggKQogICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgREVCVUdfWENJCiAgICAgICAgICAgICAgJiYgcHJpbnQgIlhDSTogU2tpcHBpbmcgc2Vxbm89JHNlcW5vLCByZXF1aXJlIGRpZmZlcmVudCBsaW5lc1xuIjsKICAgICAgICAgICAgbmV4dDsKICAgICAgICB9CgogICAgICAgICMgRG8gbm90IGFwcGx5IC14Y2kgaWYgYWRkaW5nIGV4dHJhIGNpIHdpbGwgcHV0IHRoZSBjb250YWluZXIgY29udGVudHMKICAgICAgICAjIGJleW9uZCB0aGUgbGluZSBsZW5ndGggbGltaXQgKGZpeGVzIGNhc2VzIGI4OTkgYjkzNSkKICAgICAgICBteSAkbGV2ZWwgICAgPSAkckxMLT5bJEtfb3BlbmluZ10tPltfTEVWRUxfXTsKICAgICAgICBteSAkY2lfbGV2ZWwgPSAkckxMLT5bJEtfb3BlbmluZ10tPltfQ0lfTEVWRUxfXTsKICAgICAgICBteSAkbWF4aW11bV90ZXh0X2xlbmd0aCA9CiAgICAgICAgICAkbWF4aW11bV90ZXh0X2xlbmd0aF9hdF9sZXZlbFskbGV2ZWxdIC0KICAgICAgICAgICRjaV9sZXZlbCAqICRyT3B0c19jb250aW51YXRpb25faW5kZW50YXRpb247CgogICAgICAgICMgRml4IGZvciBiMTE5NyBiMTE5OCBiMTE5OSBiMTIwMCBiMTIwMSBiMTIwMgogICAgICAgICMgRG8gbm90IGFwcGx5IC14Y2kgaWYgd2UgYXJlIHJ1bm5pbmcgb3V0IG9mIHNwYWNlCiAgICAgICAgIyBUT0RPOiByZXZpZXcgdGhpczsgZG8gd2UgYWxzbyBuZWVkIHRvIGxvb2sgYXQgc3RyZXNzX2xldmVsX2FscGhhPwogICAgICAgIGlmICggJGxldmVsID49ICRzdHJlc3NfbGV2ZWxfYmV0YSApIHsKICAgICAgICAgICAgREVCVUdfWENJCiAgICAgICAgICAgICAgJiYgcHJpbnQKIlhDSTogU2tpcHBpbmcgc2Vxbm89JHNlcW5vLCBsZXZlbD0kbGV2ZWwgZXhjZWVkcyBzdHJlc3MgbGV2ZWw9JHN0cmVzc19sZXZlbF9iZXRhXG4iOwogICAgICAgICAgICBuZXh0OwogICAgICAgIH0KCiAgICAgICAgIyByZW1lbWJlciBob3cgbXVjaCBzcGFjZSBpcyBhdmFpbGFibGUgZm9yIHBhdGNoIGIxMDMxIGFib3ZlCiAgICAgICAgbXkgJHNwYWNlID0KICAgICAgICAgICRtYXhpbXVtX3RleHRfbGVuZ3RoIC0gJGxlbl90b2wgLSAkck9wdHNfY29udGludWF0aW9uX2luZGVudGF0aW9uOwoKICAgICAgICBpZiAoICRzcGFjZSA8IDAgKSB7CiAgICAgICAgICAgIERFQlVHX1hDSSAmJiBwcmludCAiWENJOiBTa2lwcGluZyBzZXFubz0kc2Vxbm8sIHNwYWNlPSRzcGFjZVxuIjsKICAgICAgICAgICAgbmV4dDsKICAgICAgICB9CiAgICAgICAgREVCVUdfWENJICYmIHByaW50ICJYQ0k6IE9LIHNlcW5vPSRzZXFubywgc3BhY2U9JHNwYWNlXG4iOwoKICAgICAgICAkYXZhaWxhYmxlX3NwYWNleyRzZXFub30gPSAkc3BhY2U7CgogICAgICAgICMgVGhpcyBiZWNvbWVzIHRoZSBuZXh0IGNvbnRyb2xsaW5nIGNvbnRhaW5lcgogICAgICAgIHB1c2ggQHNlcW5vX3N0YWNrLCAkc2Vxbm9fdG9wIGlmICgkc2Vxbm9fdG9wKTsKICAgICAgICAkc2Vxbm9fdG9wID0gJHNlcW5vOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgZXh0ZW5kZWRfY2kKCnN1YiBicmFjZXNfbGVmdF9zZXR1cCB7CgogICAgIyBDYWxsZWQgb25jZSBwZXIgZmlsZSB0byBtYXJrIGFsbCAtYmwsIC1zYmwsIGFuZCAtYXNibCBjb250YWluZXJzCiAgICBteSAkc2VsZiA9IHNoaWZ0OwoKICAgIG15ICRyT3B0c19ibCAgID0gJHJPcHRzLT57J29wZW5pbmctYnJhY2Utb24tbmV3LWxpbmUnfTsKICAgIG15ICRyT3B0c19zYmwgID0gJHJPcHRzLT57J29wZW5pbmctc3ViLWJyYWNlLW9uLW5ldy1saW5lJ307CiAgICBteSAkck9wdHNfYXNibCA9ICRyT3B0cy0+eydvcGVuaW5nLWFub255bW91cy1zdWItYnJhY2Utb24tbmV3LWxpbmUnfTsKICAgIHJldHVybiB1bmxlc3MgKCAkck9wdHNfYmwgfHwgJHJPcHRzX3NibCB8fCAkck9wdHNfYXNibCApOwoKICAgIG15ICRyTEwgPSAkc2VsZi0+W19yTExfXTsKICAgIHJldHVybiB1bmxlc3MgKCBkZWZpbmVkKCRyTEwpICYmIEB7JHJMTH0gKTsKCiAgICAjIFdlIHdpbGwgdHVybiBvbiB0aGlzIGhhc2ggZm9yIGJyYWNlcyBjb250cm9sbGVkIGJ5IHRoZXNlIGZsYWdzOgogICAgbXkgJHJicmFjZV9sZWZ0ID0gJHNlbGYtPltfcmJyYWNlX2xlZnRfXTsKCiAgICBteSAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8gPSAkc2VsZi0+W19yYmxvY2tfdHlwZV9vZl9zZXFub19dOwogICAgbXkgJHJpc19hc3ViX2Jsb2NrICAgICAgID0gJHNlbGYtPltfcmlzX2FzdWJfYmxvY2tfXTsKICAgIG15ICRyaXNfc3ViX2Jsb2NrICAgICAgICA9ICRzZWxmLT5bX3Jpc19zdWJfYmxvY2tfXTsKICAgIGZvcmVhY2ggbXkgJHNlcW5vICgga2V5cyAleyRyYmxvY2tfdHlwZV9vZl9zZXFub30gKSB7CgogICAgICAgIG15ICRibG9ja190eXBlID0gJHJibG9ja190eXBlX29mX3NlcW5vLT57JHNlcW5vfTsKCiAgICAgICAgIyB1c2UgLWFzYmwgZmxhZyBmb3IgYW4gYW5vbnltb3VzIHN1YiBibG9jawogICAgICAgIGlmICggJHJpc19hc3ViX2Jsb2NrLT57JHNlcW5vfSApIHsKICAgICAgICAgICAgaWYgKCRyT3B0c19hc2JsKSB7CiAgICAgICAgICAgICAgICAkcmJyYWNlX2xlZnQtPnskc2Vxbm99ID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyB1c2UgLXNibCBmbGFnIGZvciBhIG5hbWVkIHN1YgogICAgICAgIGVsc2lmICggJHJpc19zdWJfYmxvY2stPnskc2Vxbm99ICkgewogICAgICAgICAgICBpZiAoJHJPcHRzX3NibCkgewogICAgICAgICAgICAgICAgJHJicmFjZV9sZWZ0LT57JHNlcW5vfSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgdXNlIC1ibCBmbGFnIGlmIG5vdCBhIHN1YiBibG9jayBvZiBhbnkgdHlwZQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAoICAgJHJPcHRzX2JsCiAgICAgICAgICAgICAgICAmJiAkYmxvY2tfdHlwZSA9fiAvJGJsX3BhdHRlcm4vCiAgICAgICAgICAgICAgICAmJiAkYmxvY2tfdHlwZSAhfiAvJGJsX2V4Y2x1c2lvbl9wYXR0ZXJuLyApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRyYnJhY2VfbGVmdC0+eyRzZXFub30gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgYnJhY2VzX2xlZnRfc2V0dXAKCnN1YiBibGlfYWRqdXN0bWVudCB7CgogICAgIyBDYWxsZWQgb25jZSBwZXIgZmlsZSB0byBpbXBsZW1lbnQgdGhlIC0tYnJhY2UtbGVmdC1hbmQtaW5kZW50IG9wdGlvbi4KICAgICMgSWYgLWJsaSBpcyBzZXQsIGFkZHMgb25lIGNvbnRpbnVhdGlvbiBpbmRlbnRhdGlvbiBmb3IgY2VydGFpbiBicmFjZXMKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICByZXR1cm4gdW5sZXNzICggJHJPcHRzLT57J2JyYWNlLWxlZnQtYW5kLWluZGVudCd9ICk7CiAgICBteSAkckxMID0gJHNlbGYtPltfckxMX107CiAgICByZXR1cm4gdW5sZXNzICggZGVmaW5lZCgkckxMKSAmJiBAeyRyTEx9ICk7CgogICAgbXkgJHJibG9ja190eXBlX29mX3NlcW5vID0gJHNlbGYtPltfcmJsb2NrX3R5cGVfb2Zfc2Vxbm9fXTsKICAgIG15ICRyaXNfYmxpX2NvbnRhaW5lciAgICA9ICRzZWxmLT5bX3Jpc19ibGlfY29udGFpbmVyX107CiAgICBteSAkcmJyYWNlX2xlZnQgICAgICAgICAgPSAkc2VsZi0+W19yYnJhY2VfbGVmdF9dOwogICAgbXkgJEtfb3BlbmluZ19jb250YWluZXIgID0gJHNlbGYtPltfS19vcGVuaW5nX2NvbnRhaW5lcl9dOwogICAgbXkgJEtfY2xvc2luZ19jb250YWluZXIgID0gJHNlbGYtPltfS19jbG9zaW5nX2NvbnRhaW5lcl9dOwoKICAgIGZvcmVhY2ggbXkgJHNlcW5vICgga2V5cyAleyRyYmxvY2tfdHlwZV9vZl9zZXFub30gKSB7CiAgICAgICAgbXkgJGJsb2NrX3R5cGUgPSAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8tPnskc2Vxbm99OwogICAgICAgIGlmICggICAkYmxvY2tfdHlwZQogICAgICAgICAgICAmJiAkYmxvY2tfdHlwZSA9fiAvJGJsaV9wYXR0ZXJuLwogICAgICAgICAgICAmJiAkYmxvY2tfdHlwZSAhfiAvJGJsaV9leGNsdXNpb25fcGF0dGVybi8gKQogICAgICAgIHsKICAgICAgICAgICAgJHJpc19ibGlfY29udGFpbmVyLT57JHNlcW5vfSA9IDE7CiAgICAgICAgICAgICRyYnJhY2VfbGVmdC0+eyRzZXFub30gICAgICAgPSAxOwogICAgICAgICAgICBteSAkS28gPSAkS19vcGVuaW5nX2NvbnRhaW5lci0+eyRzZXFub307CiAgICAgICAgICAgIG15ICRLYyA9ICRLX2Nsb3NpbmdfY29udGFpbmVyLT57JHNlcW5vfTsKICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRLbykgJiYgZGVmaW5lZCgkS2MpICkgewogICAgICAgICAgICAgICAgJHJMTC0+WyRLY10tPltfQ0lfTEVWRUxfXSA9ICsrJHJMTC0+WyRLb10tPltfQ0lfTEVWRUxfXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGJsaV9hZGp1c3RtZW50CgpzdWIgZmluZF9tdWx0aWxpbmVfcXcgewoKICAgIG15ICggJHNlbGYsICRycXdfbGluZXMgKSA9IEBfOwoKICAgICMgTXVsdGlsaW5lIHF3IHF1b3RlcyBhcmUgbm90IHNlcXVlbmNlZCBpdGVtcyBsaWtlIGNvbnRhaW5lcnMgeyBbICgKICAgICMgYnV0IGJlaGF2ZSBpbiBzb21lIHJlc3BlY3RzIGluIGEgc2ltaWxhciB3YXkuIFNvIHRoaXMgcm91dGluZSBmaW5kcyB0aGVtCiAgICAjIGFuZCBjcmVhdGVzIGEgc2VwYXJhdGUgc2VxdWVuY2UgbnVtYmVyIHN5c3RlbSBmb3IgbGF0ZXIgdXNlLgoKICAgICMgVGhpcyBpcyBzdHJhaWdodGZvcndhcmQgYmVjYXVzZSB0aGV5IGFsd2F5cyBiZWdpbiBhdCB0aGUgZW5kIG9mIG9uZSBsaW5lCiAgICAjIGFuZCBlbmQgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxhdGVyIGxpbmUuIFRoaXMgaXMgdHJ1ZSBubyBtYXR0ZXIgaG93IHdlCiAgICAjIGZpbmFsbHkgbWFrZSBvdXIgbGluZSBicmVha3MsIHNvIHdlIGNhbiBmaW5kIHRoZW0gYmVmb3JlIGRlY2lkaW5nIG9uIG5ldwogICAgIyBsaW5lIGJyZWFrcy4KCiAgICAjIElucHV0IHBhcmFtZXRlcjoKICAgICMgICBpZiAkcnF3X2xpbmVzIGlzIGRlZmluZWQgaXQgaXMgYSByZWYgdG8gYXJyYXkgb2YgYWxsIGxpbmUgaW5kZXggbnVtYmVycwogICAgIyAgIGZvciB3aGljaCB0aGVyZSBpcyBhIHR5cGUgJ3EnIHF3IHF1b3RlIGF0IGVpdGhlciBlbmQgb2YgdGhlIGxpbmUuIFRoaXMKICAgICMgICB3YXMgZGVmaW5lZCBieSBzdWIgcmVzeW5jX2xpbmVzX2FuZF90b2tlbnMgZm9yIGVmZmljaWVuY3kuCiAgICAjCgogICAgbXkgJHJsaW5lcyA9ICRzZWxmLT5bX3JsaW5lc19dOwoKICAgICMgaWYgJHJxd19saW5lcyBpcyBub3QgZGVmaW5lZCAodGhpcyB3aWxsIG9jY3VyIHdpdGggLWlvIG9wdGlvbikgdGhlbiB3ZQogICAgIyB3aWxsIGhhdmUgdG8gc2NhbiBhbGwgbGluZXMuCiAgICBpZiAoICFkZWZpbmVkKCRycXdfbGluZXMpICkgewogICAgICAgICRycXdfbGluZXMgPSBbIDAgLi4gQHskcmxpbmVzfSAtIDEgXTsKICAgIH0KCiAgICAjIGlmICRycXdfbGluZXMgaXMgZGVmaW5lZCBidXQgZW1wdHksIGp1c3QgcmV0dXJuIGJlY2F1c2UgdGhlcmUgYXJlIG5vCiAgICAjIG11bHRpbGluZSBxdydzCiAgICBlbHNlIHsKICAgICAgICBpZiAoICFAeyRycXdfbGluZXN9ICkgeyByZXR1cm4gfQogICAgfQoKICAgIG15ICRyc3RhcnRpbmdfbXVsdGlsaW5lX3F3X3NlcW5vX2J5X0sgPSB7fTsKICAgIG15ICRyZW5kaW5nX211bHRpbGluZV9xd19zZXFub19ieV9LICAgPSB7fTsKICAgIG15ICRyS3JhbmdlX211bHRpbGluZV9xd19ieV9zZXFubyAgICAgPSB7fTsKICAgIG15ICRybXVsdGlsaW5lX3F3X2hhc19leHRyYV9sZXZlbCAgICAgPSB7fTsKCiAgICBteSAkcmlzX2V4Y2x1ZGVkX2xwX2NvbnRhaW5lciA9ICRzZWxmLT5bX3Jpc19leGNsdWRlZF9scF9jb250YWluZXJfXTsKCiAgICBteSAkckxMID0gJHNlbGYtPltfckxMX107CiAgICBteSAkcXdfc2Vxbm87CiAgICBteSAkbnVtX3F3X3NlcW5vID0gMDsKICAgIG15ICRLX3N0YXJ0X211bHRpbGluZV9xdzsKCiAgICAjIEZvciByZWZlcmVuY2UsIGhlcmUgaXMgdGhlIG9sZCBsb29wLCBiZWZvcmUgJHJxd19saW5lcyBiZWNhbWUgYXZhaWxhYmxlOgogICAgIyMgIGZvcmVhY2ggbXkgJGxpbmVfb2ZfdG9rZW5zICggQHskcmxpbmVzfSApIHsKICAgIGZvcmVhY2ggbXkgJGlsaW5lICggQHskcnF3X2xpbmVzfSApIHsKICAgICAgICBteSAkbGluZV9vZl90b2tlbnMgPSAkcmxpbmVzLT5bJGlsaW5lXTsKCiAgICAgICAgIyBOb3RlIHRoYXQgdGhlc2UgZmlyc3QgY2hlY2tzIGFyZSByZXF1aXJlZCBpbiBjYXNlIHdlIGhhdmUgdG8gc2NhbgogICAgICAgICMgYWxsIGxpbmVzLCBub3QganVzdCBsaW5lcyB3aXRoIHR5cGUgJ3EnIGF0IHRoZSBlbmRzLgogICAgICAgIG15ICRsaW5lX3R5cGUgPSAkbGluZV9vZl90b2tlbnMtPntfbGluZV90eXBlfTsKICAgICAgICBuZXh0IHVubGVzcyAoICRsaW5lX3R5cGUgZXEgJ0NPREUnICk7CiAgICAgICAgbXkgJHJLX3JhbmdlID0gJGxpbmVfb2ZfdG9rZW5zLT57X3JLX3JhbmdlfTsKICAgICAgICBteSAoICRLZmlyc3QsICRLbGFzdCApID0gQHskcktfcmFuZ2V9OwogICAgICAgIG5leHQgdW5sZXNzICggZGVmaW5lZCgkS2ZpcnN0KSAmJiBkZWZpbmVkKCRLbGFzdCkgKTsgICAjIHNraXAgYmxhbmsgbGluZQoKICAgICAgICAjIENvbnRpbnVpbmcgYSBzZXF1ZW5jZSBvZiBxdyBsaW5lcyAuLi4KICAgICAgICBpZiAoIGRlZmluZWQoJEtfc3RhcnRfbXVsdGlsaW5lX3F3KSApIHsKICAgICAgICAgICAgbXkgJHR5cGUgPSAkckxMLT5bJEtmaXJzdF0tPltfVFlQRV9dOwoKICAgICAgICAgICAgIyBzaG91bGRuJ3QgaGFwcGVuCiAgICAgICAgICAgIGlmICggJHR5cGUgbmUgJ3EnICkgewogICAgICAgICAgICAgICAgREVWRUxfTU9ERSAmJiBwcmludCB7KlNUREVSUn0gPDxFT007ClNUUkFOR0U6IHN0YXJ0ZWQgbXVsdGlsaW5lIHF3IGF0IEs9JEtfc3RhcnRfbXVsdGlsaW5lX3F3IGJ1dCBkaWRuJ3Qgc2VlIHEgcXcgYXQgSz0kS2ZpcnN0XG4iOwpFT00KICAgICAgICAgICAgICAgICRLX3N0YXJ0X211bHRpbGluZV9xdyA9IHVuZGVmOwogICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgfQogICAgICAgICAgICBteSAkS3ByZXYgID0gJHNlbGYtPktfcHJldmlvdXNfbm9uYmxhbmsoJEtmaXJzdCk7CiAgICAgICAgICAgIG15ICRLbmV4dCAgPSAkc2VsZi0+S19uZXh0X25vbmJsYW5rKCRLZmlyc3QpOwogICAgICAgICAgICBteSAkdHlwZV9tID0gZGVmaW5lZCgkS3ByZXYpID8gJHJMTC0+WyRLcHJldl0tPltfVFlQRV9dIDogJ2InOwogICAgICAgICAgICBteSAkdHlwZV9wID0gZGVmaW5lZCgkS25leHQpID8gJHJMTC0+WyRLbmV4dF0tPltfVFlQRV9dIDogJ2InOwogICAgICAgICAgICBpZiAoICR0eXBlX20gZXEgJ3EnICYmICR0eXBlX3AgbmUgJ3EnICkgewogICAgICAgICAgICAgICAgJHJlbmRpbmdfbXVsdGlsaW5lX3F3X3NlcW5vX2J5X0stPnskS2ZpcnN0fSA9ICRxd19zZXFubzsKICAgICAgICAgICAgICAgICRyS3JhbmdlX211bHRpbGluZV9xd19ieV9zZXFuby0+eyRxd19zZXFub30gPQogICAgICAgICAgICAgICAgICBbICRLX3N0YXJ0X211bHRpbGluZV9xdywgJEtmaXJzdCBdOwogICAgICAgICAgICAgICAgJEtfc3RhcnRfbXVsdGlsaW5lX3F3ID0gdW5kZWY7CiAgICAgICAgICAgICAgICAkcXdfc2Vxbm8gICAgICAgICAgICAgPSB1bmRlZjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBTdGFydGluZyBhIG5ldyBhIHNlcXVlbmNlIG9mIHF3IGxpbmVzID8KICAgICAgICBpZiAoICFkZWZpbmVkKCRLX3N0YXJ0X211bHRpbGluZV9xdykKICAgICAgICAgICAgJiYgJHJMTC0+WyRLbGFzdF0tPltfVFlQRV9dIGVxICdxJyApCiAgICAgICAgewogICAgICAgICAgICBteSAkS3ByZXYgID0gJHNlbGYtPktfcHJldmlvdXNfbm9uYmxhbmsoJEtsYXN0KTsKICAgICAgICAgICAgbXkgJEtuZXh0ICA9ICRzZWxmLT5LX25leHRfbm9uYmxhbmsoJEtsYXN0KTsKICAgICAgICAgICAgbXkgJHR5cGVfbSA9IGRlZmluZWQoJEtwcmV2KSA/ICRyTEwtPlskS3ByZXZdLT5bX1RZUEVfXSA6ICdiJzsKICAgICAgICAgICAgbXkgJHR5cGVfcCA9IGRlZmluZWQoJEtuZXh0KSA/ICRyTEwtPlskS25leHRdLT5bX1RZUEVfXSA6ICdiJzsKICAgICAgICAgICAgaWYgKCAkdHlwZV9tIG5lICdxJyAmJiAkdHlwZV9wIGVxICdxJyApIHsKICAgICAgICAgICAgICAgICRudW1fcXdfc2Vxbm8rKzsKICAgICAgICAgICAgICAgICRxd19zZXFubyAgICAgICAgICAgICA9ICdxJyAuICRudW1fcXdfc2Vxbm87CiAgICAgICAgICAgICAgICAkS19zdGFydF9tdWx0aWxpbmVfcXcgPSAkS2xhc3Q7CiAgICAgICAgICAgICAgICAkcnN0YXJ0aW5nX211bHRpbGluZV9xd19zZXFub19ieV9LLT57JEtsYXN0fSA9ICRxd19zZXFubzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIEdpdmUgbXVsdGlsaW5lIHF3IGxpc3RzIGV4dHJhIGluZGVudGF0aW9uIGluc3RlYWQgb2YgQ0kuICBUaGlzIG9wdGlvbgogICAgIyB3b3JrcyB3ZWxsIGJ1dCBpcyBjdXJyZW50bHkgb25seSBhY3RpdmF0ZWQgd2hlbiB0aGUgLXhjaSBmbGFnIGlzIHNldC4KICAgICMgVGhlIHJlYXNvbiBpcyB0byBhdm9pZCB1bmV4cGVjdGVkIGNoYW5nZXMgaW4gZm9ybWF0dGluZy4KICAgIGlmICgkck9wdHNfZXh0ZW5kZWRfY29udGludWF0aW9uX2luZGVudGF0aW9uKSB7CiAgICAgICAgZm9yZWFjaCBteSAkcXdfc2Vxbm9feCAoIGtleXMgJXskcktyYW5nZV9tdWx0aWxpbmVfcXdfYnlfc2Vxbm99ICkgewogICAgICAgICAgICBteSAkcktyYW5nZSA9ICRyS3JhbmdlX211bHRpbGluZV9xd19ieV9zZXFuby0+eyRxd19zZXFub194fTsKICAgICAgICAgICAgbXkgKCAkS2JlZywgJEtlbmQgKSA9IEB7JHJLcmFuZ2V9OwoKICAgICAgICAgICAgIyByZXF1aXJlIGlzb2xhdGVkIGNsb3NpbmcgdG9rZW4KICAgICAgICAgICAgbXkgJHRva2VuX2VuZCAgICAgICAgICAgPSAkckxMLT5bJEtlbmRdLT5bX1RPS0VOX107CiAgICAgICAgICAgIG15ICRpc19pc29sYXRlZF9jbG9zaW5nID0gbGVuZ3RoKCR0b2tlbl9lbmQpID09IDEKICAgICAgICAgICAgICAmJiAoICRpc19jbG9zaW5nX3Rva2VueyR0b2tlbl9lbmR9IHx8ICR0b2tlbl9lbmQgZXEgJz4nICk7CiAgICAgICAgICAgIG5leHQgdW5sZXNzICgkaXNfaXNvbGF0ZWRfY2xvc2luZyk7CgogICAgICAgICAgICAjIHJlcXVpcmUgaXNvbGF0ZWQgb3BlbmluZyB0b2tlbgogICAgICAgICAgICBteSAkdG9rZW5fYmVnID0gJHJMTC0+WyRLYmVnXS0+W19UT0tFTl9dOwoKICAgICAgICAgICAgIyBhbGxvdyBzcGFjZShzKSBhZnRlciB0aGUgcXcKICAgICAgICAgICAgaWYgKCBsZW5ndGgoJHRva2VuX2JlZykgPiAzICYmIHN1YnN0ciggJHRva2VuX2JlZywgMiwgMSApID1+IG0vXHMvICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJHRva2VuX2JlZyA9fiBzL1xzKy8vOwogICAgICAgICAgICB9CgogICAgICAgICAgICBuZXh0IHVubGVzcyAoIGxlbmd0aCgkdG9rZW5fYmVnKSA9PSAzICk7CgogICAgICAgICAgICBmb3JlYWNoIG15ICRLSyAoICRLYmVnICsgMSAuLiAkS2VuZCAtIDEgKSB7CiAgICAgICAgICAgICAgICAkckxMLT5bJEtLXS0+W19MRVZFTF9dKys7CiAgICAgICAgICAgICAgICAkckxMLT5bJEtLXS0+W19DSV9MRVZFTF9dID0gMDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzZXQgZmxhZyBmb3IgLXduIG9wdGlvbiwgd2hpY2ggd2lsbCByZW1vdmUgdGhlIGxldmVsCiAgICAgICAgICAgICRybXVsdGlsaW5lX3F3X2hhc19leHRyYV9sZXZlbC0+eyRxd19zZXFub194fSA9IDE7CiAgICAgICAgfQogICAgfQoKICAgICMgRm9yIHRoZSAtbHAgb3B0aW9uIHdlIG5lZWQgdG8gbWFyayBhbGwgcGFyZW50IGNvbnRhaW5lcnMgb2YKICAgICMgbXVsdGlsaW5lIHF1b3RlcwogICAgaWYgKCAkck9wdHNfbGluZV91cF9wYXJlbnRoZXNlcyAmJiAhJHJPcHRzX2V4dGVuZGVkX2xpbmVfdXBfcGFyZW50aGVzZXMgKSB7CgogICAgICAgIGZvcmVhY2ggbXkgJHF3X3NlcW5vX3ggKCBrZXlzICV7JHJLcmFuZ2VfbXVsdGlsaW5lX3F3X2J5X3NlcW5vfSApIHsKICAgICAgICAgICAgbXkgJHJLcmFuZ2UgPSAkcktyYW5nZV9tdWx0aWxpbmVfcXdfYnlfc2Vxbm8tPnskcXdfc2Vxbm9feH07CiAgICAgICAgICAgIG15ICggJEtiZWcsICRLZW5kICkgPSBAeyRyS3JhbmdlfTsKICAgICAgICAgICAgbXkgJHBhcmVudF9zZXFubyA9ICRzZWxmLT5wYXJlbnRfc2Vxbm9fYnlfSygkS2VuZCk7CiAgICAgICAgICAgIG5leHQgdW5sZXNzICgkcGFyZW50X3NlcW5vKTsKCiAgICAgICAgICAgICMgSWYgdGhlIHBhcmVudCBjb250YWluZXIgZXhhY3RseSBzdXJyb3VuZHMgdGhpcyBxdywgdGhlbiAtbHAKICAgICAgICAgICAgIyBmb3JtYXR0aW5nIHNlZW1zIHRvIHdvcmsgc28gd2Ugd2lsbCBub3QgbWFyayBpdC4KICAgICAgICAgICAgbXkgJGlzX3RpZ2h0bHlfY29udGFpbmVkOwogICAgICAgICAgICBteSAkS24gICAgICA9ICRzZWxmLT5LX25leHRfbm9uYmxhbmsoJEtlbmQpOwogICAgICAgICAgICBteSAkc2Vxbm9fbiA9IGRlZmluZWQoJEtuKSA/ICRyTEwtPlskS25dLT5bX1RZUEVfU0VRVUVOQ0VfXSA6IHVuZGVmOwogICAgICAgICAgICBpZiAoIGRlZmluZWQoJHNlcW5vX24pICYmICRzZXFub19uIGVxICRwYXJlbnRfc2Vxbm8gKSB7CgogICAgICAgICAgICAgICAgbXkgJEtwID0gJHNlbGYtPktfcHJldmlvdXNfbm9uYmxhbmsoJEtiZWcpOwogICAgICAgICAgICAgICAgbXkgJHNlcW5vX3AgPQogICAgICAgICAgICAgICAgICBkZWZpbmVkKCRLcCkgPyAkckxMLT5bJEtwXS0+W19UWVBFX1NFUVVFTkNFX10gOiB1bmRlZjsKICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCgkc2Vxbm9fcCkgJiYgJHNlcW5vX3AgZXEgJHBhcmVudF9zZXFubyApIHsKICAgICAgICAgICAgICAgICAgICAkaXNfdGlnaHRseV9jb250YWluZWQgPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAkcmlzX2V4Y2x1ZGVkX2xwX2NvbnRhaW5lci0+eyRwYXJlbnRfc2Vxbm99ID0gMQogICAgICAgICAgICAgIHVubGVzcyAoJGlzX3RpZ2h0bHlfY29udGFpbmVkKTsKCiAgICAgICAgICAgICMgY29udGludWUgdXAgdGhlIHRyZWUgbWFya2luZyBwYXJlbnQgY29udGFpbmVycwogICAgICAgICAgICAkc2VsZi0+bWFya19wYXJlbnRfY29udGFpbmVycyggJHBhcmVudF9zZXFubywKICAgICAgICAgICAgICAgICRyaXNfZXhjbHVkZWRfbHBfY29udGFpbmVyICk7CiAgICAgICAgfQogICAgfQoKICAgICRzZWxmLT5bX3JzdGFydGluZ19tdWx0aWxpbmVfcXdfc2Vxbm9fYnlfS19dID0KICAgICAgJHJzdGFydGluZ19tdWx0aWxpbmVfcXdfc2Vxbm9fYnlfSzsKICAgICRzZWxmLT5bX3JlbmRpbmdfbXVsdGlsaW5lX3F3X3NlcW5vX2J5X0tfXSA9CiAgICAgICRyZW5kaW5nX211bHRpbGluZV9xd19zZXFub19ieV9LOwogICAgJHNlbGYtPltfcktyYW5nZV9tdWx0aWxpbmVfcXdfYnlfc2Vxbm9fXSA9ICRyS3JhbmdlX211bHRpbGluZV9xd19ieV9zZXFubzsKICAgICRzZWxmLT5bX3JtdWx0aWxpbmVfcXdfaGFzX2V4dHJhX2xldmVsX10gPSAkcm11bHRpbGluZV9xd19oYXNfZXh0cmFfbGV2ZWw7CgogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgZmluZF9tdWx0aWxpbmVfcXcKCnVzZSBjb25zdGFudCBERUJVR19DT0xMQVBTRURfTEVOR1RIUyA9PiAwOwoKIyBNaW5pbXVtIHNwYWNlIHJlc2VydmVkIGZvciBjb250ZW50cyBvZiBhIGNvZGUgYmxvY2suICBBIHZhbHVlIG9mIDQwIGhhcyBnaXZlbgojIHJlYXNvbmFibGUgcmVzdWx0cy4gIFdpdGggYSBsYXJnZSBsaW5lIGxlbmd0aCwgc2F5IC1sPTEyMCwgdGhpcyB3aWxsIG5vdAojIG5vcm1hbGx5IGJlIG5vdGljZWFibGUgYnV0IGl0IHdpbGwgcHJldmVudCBtYWtpbmcgYSBtZXNzIGluIHNvbWUgZWRnZSBjYXNlcy4KdXNlIGNvbnN0YW50IE1JTl9CTE9DS19MRU4gPT4gNDA7CgpteSAlaXNfaGFuZGxlX3R5cGU7CgpCRUdJTiB7CiAgICBteSBAcSA9IHF3KCB3IEMgVSBHIGkgayA9PiApOwogICAgQGlzX2hhbmRsZV90eXBle0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgbXkgJGkgPSAwOwogICAgdXNlIGNvbnN0YW50IHsKICAgICAgICBfbWF4X3Byb25nX2xlbl8gICAgICAgICA9PiAkaSsrLAogICAgICAgIF9oYW5kbGVfbGVuXyAgICAgICAgICAgID0+ICRpKyssCiAgICAgICAgX3NlcW5vX29fICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfaWxpbmVfb18gICAgICAgICAgICAgICA9PiAkaSsrLAogICAgICAgIF9LX29fICAgICAgICAgICAgICAgICAgID0+ICRpKyssCiAgICAgICAgX0tfY18gICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfaW50ZXJydXB0ZWRfbGlzdF9ydWxlXyA9PiAkaSsrLAogICAgfTsKfSAjIyBlbmQgQkVHSU4KCnN1YiBpc19mcmFnaWxlX2Jsb2NrX3R5cGUgewoKICAgIG15ICggJHNlbGYsICRibG9ja190eXBlLCAkc2Vxbm8gKSA9IEBfOwoKICAgICMgR2l2ZW46CiAgICAjICAkYmxvY2tfdHlwZSA9IHRoZSBibG9jayB0eXBlIG9mIGEgdG9rZW4sIGFuZAogICAgIyAgJHNlcW5vICAgICAgPSBpdHMgc2VxdWVuY2UgbnVtYmVyCgogICAgIyBSZXR1cm46CiAgICAjICB0cnVlIGlmIHRoaXMgYmxvY2sgdHlwZSBzdGF5cyBicm9rZW4gYWZ0ZXIgYmVpbmcgYnJva2VuLAogICAgIyAgZmFsc2Ugb3RoZXJ3aXNlCgogICAgIyBUaGlzIHN1YiBoYXMgYmVlbiBhZGRlZCB0byBpc29sYXRlIGEgdHJpY2t5IGRlY2lzaW9uIG5lZWRlZAogICAgIyB0byBmaXggaXNzdWUgYjE0MjguCgogICAgIyBUaGUgY29kaW5nIGhlcmUgbmVlZHMgdG8gYWdyZWUgd2l0aDoKICAgICMgLSBzdWIgcHJvY2Vzc19saW5lIHdoZXJlIHZhcmlhYmxlICckcmJyYWNlX2ZvbGxvd2VyJyBpcyBzZXQKICAgICMgLSBzdWIgcHJvY2Vzc19saW5lX2lubmVyX2xvb3Agd2hlcmUgdmFyaWFibGUgJyRpc19vcGVuaW5nX0JMT0NLJyBpcyBzZXQsCgogICAgaWYgKCAgICRpc19zb3J0X21hcF9ncmVwX2V2YWx7JGJsb2NrX3R5cGV9CiAgICAgICAgfHwgJGJsb2NrX3R5cGUgZXEgJ3QnCiAgICAgICAgfHwgJHNlbGYtPltfcnNob3J0X25lc3RlZF9dLT57JHNlcW5vfSApCiAgICB7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgcmV0dXJuIDE7Cgp9ICMjIGVuZCBzdWIgaXNfZnJhZ2lsZV9ibG9ja190eXBlCgp7ICAgICMjIGNsb3N1cmUgeGxwX2NvbGxhcHNlZF9sZW5ndGhzCgogICAgbXkgJG1heF9wcm9uZ19sZW47CiAgICBteSAkbGVuOwogICAgbXkgJGxhc3Rfbm9uYmxhbmtfdHlwZTsKICAgIG15IEBzdGFjazsKCiAgICBzdWIgeGxwX2NvbGxhcHNlZF9sZW5ndGhzX2luaXRpYWxpemUgewoKICAgICAgICAkbWF4X3Byb25nX2xlbiAgICAgID0gMDsKICAgICAgICAkbGVuICAgICAgICAgICAgICAgID0gMDsKICAgICAgICAkbGFzdF9ub25ibGFua190eXBlID0gJ2InOwogICAgICAgIEBzdGFjayAgICAgICAgICAgICAgPSAoKTsKCiAgICAgICAgcHVzaCBAc3RhY2ssIFsKICAgICAgICAgICAgMCwgICAgICAgICAgICMgJG1heF9wcm9uZ19sZW4sCiAgICAgICAgICAgIDAsICAgICAgICAgICAjICRoYW5kbGVfbGVuLAogICAgICAgICAgICBTRVFfUk9PVCwgICAgIyAkc2Vxbm8sCiAgICAgICAgICAgIHVuZGVmLCAgICAgICAjICRpbGluZSwKICAgICAgICAgICAgdW5kZWYsICAgICAgICMgJEtLLAogICAgICAgICAgICB1bmRlZiwgICAgICAgIyAkS19jLAogICAgICAgICAgICB1bmRlZiwgICAgICAgIyAkaW50ZXJydXB0ZWRfbGlzdF9ydWxlCiAgICAgICAgXTsKCiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIHhscF9jb2xsYXBzZWRfbGVuZ3Roc19pbml0aWFsaXplCgogICAgc3ViIGN1bXVsYXRpdmVfbGVuZ3RoX3RvX2NvbW1hIHsKCiAgICAgICAgbXkgKCAkc2VsZiwgJEtLLCAkS19jb21tYSwgJEtfY2xvc2luZyApID0gQF87CgogICAgICAgICMgR2l2ZW46CiAgICAgICAgIyAgJEtLICAgICAgICA9IGluZGV4IG9mIHN0YXJ0aW5nIHRva2VuLCBvciBibGFuayBiZWZvcmUgc3RhcnQKICAgICAgICAjICAkS19jb21tYSAgID0gaW5kZXggb2YgbGluZS1lbmRpbmcgY29tbWEKICAgICAgICAjICAkS19jbG9zaW5nID0gaW5kZXggb2YgdGhlIGNvbnRhaW5lciBjbG9zaW5nIHRva2VuCgogICAgICAgICMgUmV0dXJuOgogICAgICAgICMgICRsZW5ndGggPSBjdW11bGF0aXZlIGxlbmd0aCBvZiB0aGUgdGVybQoKICAgICAgICBteSAkckxMID0gJHNlbGYtPltfckxMX107CiAgICAgICAgaWYgKCAkckxMLT5bJEtLXS0+W19UWVBFX10gZXEgJ2InICkgeyAkS0srKyB9CiAgICAgICAgbXkgJGxlbmd0aCA9IDA7CiAgICAgICAgaWYgKAogICAgICAgICAgICAgICAkS0sgPCAkS19jb21tYQogICAgICAgICAgICAmJiAkckxMLT5bJEtfY29tbWFdLT5bX1RZUEVfXSBlcSAnLCcgICAgIyBzaG91bGQgYmUgdHJ1ZQoKICAgICAgICAgICAgIyBJZ25vcmUgaWYgdGVybWluYWwgY29tbWEsIGNhdXNlcyBpbnN0YWJpbGl0eSAoYjEyOTcsCiAgICAgICAgICAgICMgYjEzMzApCiAgICAgICAgICAgICYmICgKICAgICAgICAgICAgICAgICRLX2Nsb3NpbmcgLSAkS19jb21tYSA+IDIKICAgICAgICAgICAgICAgIHx8ICggICAkS19jbG9zaW5nIC0gJEtfY29tbWEgPT0gMgogICAgICAgICAgICAgICAgICAgICYmICRyTEwtPlsgJEtfY29tbWEgKyAxIF0tPltfVFlQRV9dIG5lICdiJyApCiAgICAgICAgICAgICkKCiAgICAgICAgICAgICMgVGhlIGNvbW1hIHNob3VsZCBiZSBpbiB0aGlzIGNvbnRhaW5lcgogICAgICAgICAgICAmJiAoICRyTEwtPlskS19jb21tYV0tPltfTEVWRUxfXSAtIDEgPT0KICAgICAgICAgICAgICAgICRyTEwtPlskS19jbG9zaW5nXS0+W19MRVZFTF9dICkKICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICAjIEFuIGFkZGl0aW9uYWwgY2hlY2s6IGlmIGxpbmUgZW5kcyBpbiApLCBhbmQgdGhlICkgaGFzIHZ0YyB0aGVuCiAgICAgICAgICAgICMgc2tpcCB0aGlzIGVzdGltYXRlLiBPdGhlcndpc2UsIHZ0YyBjYW4gZ2l2ZSBvc2NpbGxhdGluZyByZXN1bHRzLgogICAgICAgICAgICAjIEZpeGVzIGIxNDQ4LiBGb3IgZXhhbXBsZSwgdGhpcyBjb3VsZCBiZSB1bnN0YWJsZToKCiAgICAgICAgICAgICMgICggJG9zIG5lICd3aW4nID8gKCAtc2VsZWN0Y29sb3IgPT4gInJlZCIgKSA6ICgpICksCiAgICAgICAgICAgICMgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxeLS1LX2NvbW1hCiAgICAgICAgICAgICMgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4tLSBLX3ByZXYKICAgICAgICAgICAgIyAgXi0tLSBLSwoKICAgICAgICAgICAgIyBBbiBhbHRlcm5hdGl2ZSwgcG9zc2libHkgYmV0dGVyIHN0cmF0ZWd5IHdvdWxkIGJlIHRvIHRyeSB0byB0dXJuCiAgICAgICAgICAgICMgb2ZmIC12dGMgbG9jYWxseSwgYnV0IGl0IHR1cm5zIG91dCB0byBiZSBkaWZmaWN1bHQgdG8gbG9jYXRlIHRoZQogICAgICAgICAgICAjIGFwcHJvcHJpYXRlIGNsb3NpbmcgdG9rZW4gd2hlbiBpdCBpcyBub3Qgb24gdGhlIHNhbWUgbGluZSBhcyBpdHMKICAgICAgICAgICAgIyBvcGVuaW5nIHRva2VuLgoKICAgICAgICAgICAgbXkgJEtfcHJldiA9ICRzZWxmLT5LX3ByZXZpb3VzX25vbmJsYW5rKCRLX2NvbW1hKTsKICAgICAgICAgICAgaWYgKCAgIGRlZmluZWQoJEtfcHJldikKICAgICAgICAgICAgICAgICYmICRLX3ByZXYgPj0gJEtLCiAgICAgICAgICAgICAgICAmJiAkckxMLT5bJEtfcHJldl0tPltfVFlQRV9TRVFVRU5DRV9dICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbXkgJHRva2VuID0gJHJMTC0+WyRLX3ByZXZdLT5bX1RPS0VOX107CiAgICAgICAgICAgICAgICBteSAkdHlwZSAgPSAkckxMLT5bJEtfcHJldl0tPltfVFlQRV9dOwogICAgICAgICAgICAgICAgaWYgKCAkY2xvc2luZ192ZXJ0aWNhbF90aWdodG5lc3N7JHRva2VufSAmJiAkdHlwZSBuZSAnUicgKSB7CiAgICAgICAgICAgICAgICAgICAgIyMgdHlwZSAnUicgZG9lcyBub3Qgbm9ybWFsbHkgZ2V0IGJyb2tlbiwgc28gaWdub3JlCiAgICAgICAgICAgICAgICAgICAgIyMgc2tpcCBsZW5ndGggY2FsY3VsYXRpb24KICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBteSAkc3RhcnRpbmdfbGVuID0KICAgICAgICAgICAgICAkS0sgPj0gMCA/ICRyTEwtPlsgJEtLIC0gMSBdLT5bX0NVTVVMQVRJVkVfTEVOR1RIX10gOiAwOwogICAgICAgICAgICAkbGVuZ3RoID0gJHJMTC0+WyRLX2NvbW1hXS0+W19DVU1VTEFUSVZFX0xFTkdUSF9dIC0gJHN0YXJ0aW5nX2xlbjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRsZW5ndGg7CiAgICB9ICMjIGVuZCBzdWIgY3VtdWxhdGl2ZV9sZW5ndGhfdG9fY29tbWEKCiAgICBzdWIgeGxwX2NvbGxhcHNlZF9sZW5ndGhzIHsKCiAgICAgICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIERlZmluZSB0aGUgY29sbGFwc2VkIGxlbmd0aHMgb2YgY29udGFpbmVycyBmb3IgLXhscCBpbmRlbnRhdGlvbgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICMgV2UgbmVlZCBhbiBlc3RpbWF0ZSBvZiB0aGUgbWluaW11bSByZXF1aXJlZCBsaW5lIGxlbmd0aCBzdGFydGluZyBhdAogICAgICAgICMgYW55IG9wZW5pbmcgY29udGFpbmVyIGZvciB0aGUgLXhscCBzdHlsZS4gVGhpcyBpcyBuZWVkZWQgdG8gYXZvaWQKICAgICAgICAjIHVzaW5nIHRvbyBtdWNoIGluZGVudGF0aW9uIHNwYWNlIGZvciBsb3dlciBsZXZlbCBjb250YWluZXJzIGFuZAogICAgICAgICMgdGhlcmVieSBydW5uaW5nIG91dCBvZiBzcGFjZSBmb3Igb3V0ZXIgY29udGFpbmVyIHRva2VucyBkdWUgdG8gdGhlCiAgICAgICAgIyBtYXhpbXVtIGxpbmUgbGVuZ3RoIGxpbWl0LgoKICAgICAgICAjIFRoZSBiYXNpYyBpZGVhIGlzIHRoYXQgYXQgZWFjaCBub2RlIGluIHRoZSB0cmVlIHdlIGltYWdpbmUgdGhhdCB3ZQogICAgICAgICMgaGF2ZSBhIGZvcmsgd2l0aCBhIGhhbmRsZSBhbmQgY29sbGFwc2libGUgcHJvbmdzOgogICAgICAgICMKICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0KICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLQogICAgICAgICMgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tfC0tLS0tLS0KICAgICAgICAjICAgICAgICAgICAgICAgICBoYW5kbGUgICAgIHwtLS0tLS0tLS0tLS0KICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLQogICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9uZ3MKICAgICAgICAjCiAgICAgICAgIyBFYWNoIHByb25nIGhhcyBhIG1pbmltdW0gY29sbGFwc2VkIGxlbmd0aC4gVGhlIGNvbGxhcHNlZCBsZW5ndGggYXQgYQogICAgICAgICMgbm9kZSBpcyB0aGUgbWF4aW11bSBvZiB0aGVzZSBtaW5pbXVtIGxlbmd0aHMsIHBsdXMgdGhlIGhhbmRsZSBsZW5ndGguCiAgICAgICAgIyBFYWNoIG9mIHRoZSBwcm9uZ3MgbWF5IGl0c2VsZiBiZSBhIHRyZWUgbm9kZS4KCiAgICAgICAgIyBUaGlzIGlzIGp1c3QgYSByb3VnaCBjYWxjdWxhdGlvbiB0byBnZXQgYW4gYXBwcm94aW1hdGUgc3RhcnRpbmcgcG9pbnQKICAgICAgICAjIGZvciBpbmRlbnRhdGlvbi4gIExhdGVyIHJvdXRpbmVzIHdpbGwgYmUgbW9yZSBwcmVjaXNlLiAgSXQgaXMKICAgICAgICAjIGltcG9ydGFudCB0aGF0IHRoZXNlIGVzdGltYXRlcyBiZSBpbmRlcGVuZGVudCBvZiB0aGUgbGluZSBicmVha3Mgb2YKICAgICAgICAjIHRoZSBpbnB1dCBzdHJlYW0gaW4gb3JkZXIgdG8gYXZvaWQgaW5zdGFiaWxpdGllcy4KCiAgICAgICAgbXkgJHJMTCAgICAgICAgICAgICAgICAgICAgICAgID0gJHNlbGYtPltfckxMX107CiAgICAgICAgbXkgJHJsaW5lcyAgICAgICAgICAgICAgICAgICAgID0gJHNlbGYtPltfcmxpbmVzX107CiAgICAgICAgbXkgJHJjb2xsYXBzZWRfbGVuZ3RoX2J5X3NlcW5vID0gJHNlbGYtPltfcmNvbGxhcHNlZF9sZW5ndGhfYnlfc2Vxbm9fXTsKICAgICAgICBteSAkcnR5cGVfY291bnRfYnlfc2Vxbm8gICAgICAgPSAkc2VsZi0+W19ydHlwZV9jb3VudF9ieV9zZXFub19dOwogICAgICAgIG15ICRyS19uZXh0X3NlcW5vX2J5X0sgICAgICAgICA9ICRzZWxmLT5bX3JLX25leHRfc2Vxbm9fYnlfS19dOwoKICAgICAgICBteSAkS19zdGFydF9tdWx0aWxpbmVfcXc7CiAgICAgICAgbXkgJGxldmVsX3N0YXJ0X211bHRpbGluZV9xdyA9IDA7CgogICAgICAgIHhscF9jb2xsYXBzZWRfbGVuZ3Roc19pbml0aWFsaXplKCk7CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgTG9vcCBvdmVyIGFsbCBsaW5lcyBpbiB0aGUgZmlsZQogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIG15ICRpbGluZSA9IC0xOwogICAgICAgIG15ICRza2lwX25leHRfbGluZTsKICAgICAgICBmb3JlYWNoIG15ICRsaW5lX29mX3Rva2VucyAoIEB7JHJsaW5lc30gKSB7CiAgICAgICAgICAgICRpbGluZSsrOwogICAgICAgICAgICBpZiAoJHNraXBfbmV4dF9saW5lKSB7CiAgICAgICAgICAgICAgICAkc2tpcF9uZXh0X2xpbmUgPSAwOwogICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgfQogICAgICAgICAgICBteSAkbGluZV90eXBlID0gJGxpbmVfb2ZfdG9rZW5zLT57X2xpbmVfdHlwZX07CiAgICAgICAgICAgIG5leHQgaWYgKCAkbGluZV90eXBlIG5lICdDT0RFJyApOwogICAgICAgICAgICBteSAkQ09ERV90eXBlID0gJGxpbmVfb2ZfdG9rZW5zLT57X2NvZGVfdHlwZX07CgogICAgICAgICAgICAjIEFsd2F5cyBza2lwIGJsYW5rIGxpbmVzCiAgICAgICAgICAgIG5leHQgaWYgKCAkQ09ERV90eXBlIGVxICdCTCcgKTsKCiAgICAgICAgICAgICMgTm90ZSBvbiBvdGhlciBsaW5lIHR5cGVzOgogICAgICAgICAgICAjICdGUycgKEZvcm1hdCBTa2lwcGluZykgbGluZXMgbWF5IGNvbnRhaW4gb3BlbmluZy9jbG9zaW5nIHRva2VucyBzbwogICAgICAgICAgICAjICAgICAgd2UgaGF2ZSB0byBwcm9jZXNzIHRoZW0gdG8ga2VlcCB0aGUgc3RhY2sgY29ycmVjdGx5IHNlcXVlbmNlZAogICAgICAgICAgICAjICdWQicgKFZlcmJhdGltKSBsaW5lcyBjb3VsZCBiZSBza2lwcGVkLCBidXQgdGVzdGluZyBzaG93cyB0aGF0CiAgICAgICAgICAgICMgICAgICByZXN1bHRzIGxvb2sgYmV0dGVyIGlmIHdlIGluY2x1ZGUgdGhlaXIgbGVuZ3Rocy4KCiAgICAgICAgICAgICMgQWxzbyBub3RlIHRoYXQgd2UgY291bGQgZXhjbHVkZSAteGxwIGZvcm1hdHRpbmcgb2YgY29udGFpbmVycyB3aXRoCiAgICAgICAgICAgICMgJ0ZTJyBhbmQgJ1ZCJyBsaW5lcywgYnV0IGluIHRlc3RpbmcgdGhhdCB3YXMgbm90IHJlYWxseSBiZW5lZmljaWFsCgogICAgICAgICAgICAjIFNvIHdlIHByb2Nlc3MgdG9rZW5zIGluICdGUycgYW5kICdWQicgbGluZXMgbGlrZSBhbGwgdGhlIHJlc3QuLi4KCiAgICAgICAgICAgIG15ICRyS19yYW5nZSA9ICRsaW5lX29mX3Rva2Vucy0+e19yS19yYW5nZX07CiAgICAgICAgICAgIG15ICggJEtfZmlyc3QsICRLX2xhc3QgKSA9IEB7JHJLX3JhbmdlfTsKICAgICAgICAgICAgbmV4dCB1bmxlc3MgKCBkZWZpbmVkKCRLX2ZpcnN0KSAmJiBkZWZpbmVkKCRLX2xhc3QpICk7CgogICAgICAgICAgICBteSAkaGFzX2NvbW1lbnQgPSAkckxMLT5bJEtfbGFzdF0tPltfVFlQRV9dIGVxICcjJzsKCiAgICAgICAgICAgICMgQWx3YXlzIGlnbm9yZSBibG9jayBjb21tZW50cwogICAgICAgICAgICBuZXh0IGlmICggJGhhc19jb21tZW50ICYmICRLX2ZpcnN0ID09ICRLX2xhc3QgKTsKCiAgICAgICAgICAgICMgSGFuZGxlIGFuIGludGVybWVkaWF0ZSBsaW5lIG9mIGEgbXVsdGlsaW5lIHF3IHF1b3RlLiBUaGVzZSBtYXkKICAgICAgICAgICAgIyByZXF1aXJlIGluY2x1ZGluZyBzb21lIC1jaSBvciAtaSBzcGFjZXMuICBTZWUgY2FzZXMgYzA5OC94MDYzLgogICAgICAgICAgICAjIFVwZGF0ZWQgdG8gY2hlY2sgYWxsIGxpbmVzIChub3QganVzdCAkS19maXJzdD09JEtfbGFzdCkgdG8gZml4CiAgICAgICAgICAgICMgYjEzMTYKICAgICAgICAgICAgbXkgJEtfYmVnaW5fbG9vcCA9ICRLX2ZpcnN0OwogICAgICAgICAgICBpZiAoICRyTEwtPlskS19maXJzdF0tPltfVFlQRV9dIGVxICdxJyApIHsKCiAgICAgICAgICAgICAgICBteSAkS0sgICAgICAgPSAkS19maXJzdDsKICAgICAgICAgICAgICAgIG15ICRsZXZlbCAgICA9ICRyTEwtPlskS0tdLT5bX0xFVkVMX107CiAgICAgICAgICAgICAgICBteSAkY2lfbGV2ZWwgPSAkckxMLT5bJEtLXS0+W19DSV9MRVZFTF9dOwoKICAgICAgICAgICAgICAgICMgcmVtZW1iZXIgdGhlIGxldmVsIG9mIHRoZSBzdGFydAogICAgICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkS19zdGFydF9tdWx0aWxpbmVfcXcpICkgewogICAgICAgICAgICAgICAgICAgICRLX3N0YXJ0X211bHRpbGluZV9xdyAgICAgPSAkS19maXJzdDsKICAgICAgICAgICAgICAgICAgICAkbGV2ZWxfc3RhcnRfbXVsdGlsaW5lX3F3ID0gJGxldmVsOwogICAgICAgICAgICAgICAgICAgIG15ICRzZXFub19xdyA9CiAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+W19yc3RhcnRpbmdfbXVsdGlsaW5lX3F3X3NlcW5vX2J5X0tfXQogICAgICAgICAgICAgICAgICAgICAgLT57JEtfc3RhcnRfbXVsdGlsaW5lX3F3fTsKICAgICAgICAgICAgICAgICAgICBpZiAoICEkc2Vxbm9fcXcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRLcCA9ICRzZWxmLT5LX3ByZXZpb3VzX25vbmJsYW5rKCRLX2ZpcnN0KTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRLcCkgJiYgJHJMTC0+WyRLcF0tPltfVFlQRV9dIGVxICdxJyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkS19zdGFydF9tdWx0aWxpbmVfcXcgPSAkS3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGV2ZWxfc3RhcnRfbXVsdGlsaW5lX3F3ID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJMTC0+WyRLX3N0YXJ0X211bHRpbGluZV9xd10tPltfTEVWRUxfXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEZpeCBmb3IgYjEzMTksIGIxMzIwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkS19zdGFydF9tdWx0aWxpbmVfcXcgPSB1bmRlZjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQoJEtfc3RhcnRfbXVsdGlsaW5lX3F3KSApIHsKICAgICAgICAgICAgICAgICAgICAkbGVuID0gJHJMTC0+WyRLS10tPltfQ1VNVUxBVElWRV9MRU5HVEhfXSAtCiAgICAgICAgICAgICAgICAgICAgICAkckxMLT5bICRLSyAtIDEgXS0+W19DVU1VTEFUSVZFX0xFTkdUSF9dOwoKICAgICAgICAgICAgICAgICAgICAjIFdlIG1heSBoYXZlIHRvIGFkZCB0aGUgc3BhY2VzIG9mIG9uZSBsZXZlbCBvciBjaSBsZXZlbAogICAgICAgICAgICAgICAgICAgICMgLi4uICBpdCBkZXBlbmRzIGRlcGVuZHMgb24gdGhlIC14Y2kgZmxhZywgdGhlIC13biBmbGFnLAogICAgICAgICAgICAgICAgICAgICMgYW5kIGlmIHRoZSBxdyB1c2VzIGEgY29udGFpbmVyIHRva2VuIGFzIHRoZSBxdW90ZQogICAgICAgICAgICAgICAgICAgICMgZGVsaW1pdGVyLgoKICAgICAgICAgICAgICAgICAgICAjIEZpcnN0IHJ1bGU6IGFkZCBjaSBpZiB0aGVyZSBpcyBhICRjaV9sZXZlbAogICAgICAgICAgICAgICAgICAgIGlmICgkY2lfbGV2ZWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGxlbiArPSAkck9wdHNfY29udGludWF0aW9uX2luZGVudGF0aW9uOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBTZWNvbmQgcnVsZTogb3RoZXJ3aXNlLCBsb29rIGZvciBhbiBleHRyYSBpbmRlbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICMgbGV2ZWwgZnJvbSB0aGUgc3RhcnQgYW5kIGFkZCBvbmUgaW5kZW50YXRpb24gbGV2ZWwgaWYKICAgICAgICAgICAgICAgICAgICAjIGZvdW5kLgogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRsZXZlbCA+ICRsZXZlbF9zdGFydF9tdWx0aWxpbmVfcXcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGVuICs9ICRyT3B0c19pbmRlbnRfY29sdW1uczsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkbGVuID4gJG1heF9wcm9uZ19sZW4gKSB7ICRtYXhfcHJvbmdfbGVuID0gJGxlbiB9CgogICAgICAgICAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX3R5cGUgPSAncSc7CgogICAgICAgICAgICAgICAgICAgICRLX2JlZ2luX2xvb3AgPSAkS19maXJzdCArIDE7CgogICAgICAgICAgICAgICAgICAgICMgV2UgY2FuIHNraXAgdG8gdGhlIG5leHQgbGluZSBpZiBtb3JlIHRva2VucwogICAgICAgICAgICAgICAgICAgIG5leHQgaWYgKCAkS19iZWdpbl9sb29wID4gJEtfbGFzdCApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIElmIHN0YXJ0aW5nIGluIHF1b3RlIHR5cGUgUSB3ZSBoYXZlIG5vIGNvbnRyb2wgb3ZlciBpbmRlbnRhdGlvbgogICAgICAgICAgICAjIHNvIGp1c3QgaWdub3JlIHRoZSBsZW5ndGggb2YgdGhpcyB0b2tlbiAoc2VlIGdpdCAjMTM4KQogICAgICAgICAgICBlbHNpZiAoICRyTEwtPlskS19maXJzdF0tPltfVFlQRV9dIGVxICdRJyApIHsKICAgICAgICAgICAgICAgIGlmICggJGxpbmVfb2ZfdG9rZW5zLT57X3N0YXJ0aW5nX2luX3F1b3RlfSApIHsKICAgICAgICAgICAgICAgICAgICAkS19iZWdpbl9sb29wID0gJEtfZmlyc3QgKyAxOwogICAgICAgICAgICAgICAgICAgIG5leHQgaWYgKCAkS19iZWdpbl9sb29wID4gJEtfbGFzdCApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICB9CgogICAgICAgICAgICAkS19zdGFydF9tdWx0aWxpbmVfcXcgPSB1bmRlZjsKCiAgICAgICAgICAgICMgRmluZCB0aGUgdGVybWluYWwgdG9rZW4sIGJlZm9yZSBhbnkgc2lkZSBjb21tZW50CiAgICAgICAgICAgIG15ICRLX3Rlcm1pbmFsID0gJEtfbGFzdDsKICAgICAgICAgICAgaWYgKCRoYXNfY29tbWVudCkgewogICAgICAgICAgICAgICAgJEtfdGVybWluYWwgLT0gMTsKICAgICAgICAgICAgICAgICRLX3Rlcm1pbmFsIC09IDEKICAgICAgICAgICAgICAgICAgaWYgKCAkckxMLT5bJEtfdGVybWluYWxdLT5bX1RZUEVfXSBlcSAnYicKICAgICAgICAgICAgICAgICAgICAmJiAkS190ZXJtaW5hbCA+ICRLX2ZpcnN0ICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgVXNlIGxlbmd0aCB0byB0ZXJtaW5hbCBjb21tYSBpZiBpbnRlcnJ1cHRlZCBsaXN0IHJ1bGUgYXBwbGllcwogICAgICAgICAgICBpZiAoIEBzdGFjayAmJiAkc3RhY2tbLTFdLT5bX2ludGVycnVwdGVkX2xpc3RfcnVsZV9dICkgewogICAgICAgICAgICAgICAgbXkgJEtfYyA9ICRzdGFja1stMV0tPltfS19jX107CiAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQoJEtfYykgKSB7CgogICAgICAgICAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgIyBCRUdJTiBwYXRjaCBmb3IgaXNzdWUgYjE0MDg6IElmIHRoaXMgbGluZSBlbmRzIGluIGFuCiAgICAgICAgICAgICAgICAgICAgIyBvcGVuaW5nIHRva2VuLCBsb29rIGZvciB0aGUgY2xvc2luZyB0b2tlbiBhbmQgY29tbWEgYXQKICAgICAgICAgICAgICAgICAgICAjIHRoZSBlbmQgb2YgdGhlIG5leHQgbGluZS4gSWYgc28sIGNvbWJpbmUgdGhlIHR3byBsaW5lcyB0bwogICAgICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBjb3JyZWN0IHN1bXMuICBUaGlzIHByb2JsZW0gc2VlbXMgdG8gcmVxdWlyZSAteGxwCiAgICAgICAgICAgICAgICAgICAgIyAtdnRjPTIgYW5kIGJsYW5rIGxpbmVzIHRvIG9jY3VyLiBVc2UgJWlzX29wZW5pbmdfdHlwZSB0bwogICAgICAgICAgICAgICAgICAgICMgZml4IGIxNDMxLgogICAgICAgICAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkaXNfb3BlbmluZ190eXBleyAkckxMLT5bJEtfdGVybWluYWxdLT5bX1RZUEVfXSB9CiAgICAgICAgICAgICAgICAgICAgICAgICYmICEkaGFzX2NvbW1lbnQgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHNlcW5vX2VuZCA9ICRyTEwtPlskS190ZXJtaW5hbF0tPltfVFlQRV9TRVFVRU5DRV9dOwogICAgICAgICAgICAgICAgICAgICAgICBteSAkS2NfdGVzdCAgID0gJHJLX25leHRfc2Vxbm9fYnlfSy0+WyRLX3Rlcm1pbmFsXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgYXJlIGxvb2tpbmcgZm9yIGEgc2hvcnQgYnJva2VuIHJlbW5hbnQgb24gdGhlIG5leHQKICAgICAgICAgICAgICAgICAgICAgICAgIyBsaW5lOyBzb21ldGhpbmcgbGlrZSB0aGUgdGhpcmQgbGluZSBoZXJlIChiMTQwOCk6CgogICAgICAgICAgICAgICAgICAgICMgICAgIHBhcmVudCA9PgogICAgICAgICAgICAgICAgICAgICMgICAgICAgTW9vc2U6OlV0aWw6OlR5cGVDb25zdHJhaW50czo6ZmluZF90eXBlX2NvbnN0cmFpbnQoCiAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICdSZWZYWCcgKSwKICAgICAgICAgICAgICAgICAgICAjIG9yIHRoaXMKICAgICAgICAgICAgICAgICAgICAjCiAgICAgICAgICAgICAgICAgICAgIyAgSGVscDo6V29ya1N1Ym1pdHRlci0+X2ZpbHRlcl9jaG9yZXNfYW5kX21heWJlX3dhcm5fdXNlcigKICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0b3J5X3NldF9hbGxfY2hvcmVzKSwKICAgICAgICAgICAgICAgICAgICAjIG9yIHRoaXMgKGIxNDMxKToKICAgICAgICAgICAgICAgICAgICAjICAgICAgICAkaXNzdWUtPnsKICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAnYm9ycm93ZXJudW1iZXInfSwgICMgYm9ycm93ZXJudW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAgIGRlZmluZWQoJEtjX3Rlc3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkc2Vxbm9fZW5kID09ICRyTEwtPlskS2NfdGVzdF0tPltfVFlQRV9TRVFVRU5DRV9dCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkckxMLT5bJEtjX3Rlc3RdLT5bX0xJTkVfSU5ERVhfXSA9PSAkaWxpbmUgKyAxICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGxpbmVfb2ZfdG9rZW5zX25leHQgPSAkcmxpbmVzLT5bICRpbGluZSArIDEgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRydHlwZV9jb3VudCA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRydHlwZV9jb3VudF9ieV9zZXFuby0+eyRzZXFub19lbmR9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgKCAkS19maXJzdF9uZXh0LCAkS190ZXJtaW5hbF9uZXh0ICkgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAeyAkbGluZV9vZl90b2tlbnNfbmV4dC0+e19yS19yYW5nZX0gfTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGJhY2t1cCBhdCBhIHNpZGUgY29tbWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRLX3Rlcm1pbmFsX25leHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHJMTC0+WyRLX3Rlcm1pbmFsX25leHRdLT5bX1RZUEVfXSBlcSAnIycgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRLcHJldiA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+S19wcmV2aW91c19ub25ibGFuaygkS190ZXJtaW5hbF9uZXh0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQoJEtwcmV2KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkS3ByZXYgPj0gJEtfZmlyc3RfbmV4dCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkS190ZXJtaW5hbF9uZXh0ID0gJEtwcmV2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCgkS190ZXJtaW5hbF9uZXh0KQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG5leHQgbGluZSBlbmRzIHdpdGggYSBjb21tYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRyTEwtPlskS190ZXJtaW5hbF9uZXh0XS0+W19UWVBFX10gZXEgJywnCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2hpY2ggZm9sbG93cyB0aGUgY2xvc2luZyBjb250YWluZXIgdG9rZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRLX3Rlcm1pbmFsX25leHQgLSAkS2NfdGVzdCA9PSAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICggICAkS190ZXJtaW5hbF9uZXh0IC0gJEtjX3Rlc3QgPT0gMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHJMTC0+WyAkS190ZXJtaW5hbF9uZXh0IC0gMSBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPltfVFlQRV9dIGVxICdiJyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG5vIGNvbW1hcyBpbiB0aGUgY29udGFpbmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCAgICFkZWZpbmVkKCRydHlwZV9jb3VudCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgISRydHlwZV9jb3VudC0+eycsJ30gKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZvciBub3csIHJlc3RyaWN0IHRoaXMgdG8gYSBjb250YWluZXIgd2l0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMganVzdCAxIG9yIHR3byB0b2tlbnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkS190ZXJtaW5hbF9uZXh0IC0gJEtfdGVybWluYWwgPD0gNQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbWJpbmUgdGhlIG5leHQgbGluZSB3aXRoIHRoZSBjdXJyZW50IGxpbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkS190ZXJtaW5hbCAgICAgPSAkS190ZXJtaW5hbF9uZXh0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRza2lwX25leHRfbGluZSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX0NPTExBUFNFRF9MRU5HVEhTKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJDb21iaW5pbmcgbGluZXMgYXQgbGluZSAkaWxpbmVcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAjIEVORCBwYXRjaCBmb3IgaXNzdWUgYjE0MDgKICAgICAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICBpZiAoICRyTEwtPlskS190ZXJtaW5hbF0tPltfVFlQRV9dIGVxICcsJyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRsZW5ndGggPQogICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5jdW11bGF0aXZlX2xlbmd0aF90b19jb21tYSggJEtfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkS190ZXJtaW5hbCwgJEtfYyApOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBGaXggZm9yIGIxMzMxOiBhdCBhIGJyb2tlbiA9PiBpdGVtLCBpbmNsdWRlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAjIGxlbmd0aCBvZiB0aGUgcHJldmlvdXMgaGFsZiBvZiB0aGUgaXRlbSBwbHVzIG9uZSBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgbWlzc2luZyBzcGFjZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRsYXN0X25vbmJsYW5rX3R5cGUgZXEgJz0+JyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsZW5ndGggKz0gJGxlbiArIDE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkbGVuZ3RoID4gJG1heF9wcm9uZ19sZW4gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWF4X3Byb25nX2xlbiA9ICRsZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgTG9vcCBvdmVyIGFsbCB0b2tlbnMgb24gdGhpcyBsaW5lCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICRzZWxmLT54bHBfY29sbGFwc2VfbGVuZ3Roc19pbm5lcl9sb29wKCAkaWxpbmUsICRLX2JlZ2luX2xvb3AsCiAgICAgICAgICAgICAgICAkS190ZXJtaW5hbCwgJEtfbGFzdCApOwoKICAgICAgICAgICAgIyBOb3cgdGFrZSBjYXJlIG9mIGFueSBzaWRlIGNvbW1lbnQ7CiAgICAgICAgICAgIGlmICgkaGFzX2NvbW1lbnQpIHsKICAgICAgICAgICAgICAgIGlmICgkck9wdHNfaWdub3JlX3NpZGVfY29tbWVudF9sZW5ndGhzKSB7CiAgICAgICAgICAgICAgICAgICAgJGxlbiA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgIyBGb3IgYSBzaWRlIGNvbW1lbnQgd2hlbiAtaXNjbCBpcyBub3Qgc2V0LCBtZWFzdXJlIGxlbmd0aCBmcm9tCiAgICAgICAgICAgICAgICAgIyB0aGUgc3RhcnQgb2YgdGhlIHByZXZpb3VzIG5vbmJsYW5rIHRva2VuCiAgICAgICAgICAgICAgICAgICAgbXkgJGxlbjAgPQogICAgICAgICAgICAgICAgICAgICAgICAkS190ZXJtaW5hbCA+IDAKICAgICAgICAgICAgICAgICAgICAgID8gJHJMTC0+WyAkS190ZXJtaW5hbCAtIDEgXS0+W19DVU1VTEFUSVZFX0xFTkdUSF9dCiAgICAgICAgICAgICAgICAgICAgICA6IDA7CiAgICAgICAgICAgICAgICAgICAgJGxlbiA9ICRyTEwtPlskS19sYXN0XS0+W19DVU1VTEFUSVZFX0xFTkdUSF9dIC0gJGxlbjA7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkbGVuID4gJG1heF9wcm9uZ19sZW4gKSB7ICRtYXhfcHJvbmdfbGVuID0gJGxlbiB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgfSAjIyBlbmQgbG9vcCBvdmVyIGxpbmVzCgogICAgICAgIGlmIChERUJVR19DT0xMQVBTRURfTEVOR1RIUykgewogICAgICAgICAgICBwcmludCAiXG5Db2xsYXBzZWQgbGVuZ3Rocy0tXG4iOwogICAgICAgICAgICBmb3JlYWNoCiAgICAgICAgICAgICAgbXkgJGtleSAoIHNvcnQgeyAkYSA8PT4gJGIgfSBrZXlzICV7JHJjb2xsYXBzZWRfbGVuZ3RoX2J5X3NlcW5vfSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG15ICRjbGVuID0gJHJjb2xsYXBzZWRfbGVuZ3RoX2J5X3NlcW5vLT57JGtleX07CiAgICAgICAgICAgICAgICBwcmludCAiJGtleSAtPiAkY2xlblxuIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIHhscF9jb2xsYXBzZWRfbGVuZ3RocwoKICAgIHN1YiB4bHBfY29sbGFwc2VfbGVuZ3Roc19pbm5lcl9sb29wIHsKCiAgICAgICAgbXkgKCAkc2VsZiwgJGlsaW5lLCAkS19iZWdpbl9sb29wLCAkS190ZXJtaW5hbCwgJEtfbGFzdCApID0gQF87CgogICAgICAgICMgTG9vcCBvdmVyIHRva2VucyBvbiBhIGxpbmUgZm9yIHN1YiB4bHBfY29sbGFwc2VfbGVuZ3RocwoKICAgICAgICAjIEdpdmVuOgogICAgICAgICMgICAkaWxpbmUgPSBsaW5lIG51bWJlciBpbiBpbnB1dCBzdHJlYW0KICAgICAgICAjICAgKCRLX2JlZ2luX2xvb3AsICRLX3Rlcm1pbmFsKSA9IHRva2VuIGluZGV4IHJhbmdlIHRvIHNjYW4KICAgICAgICAjICAgJEtfbGFzdCA9IGxhc3QgdG9rZW4gaW5kZXggb24gdGhpcyBsaW5lCgogICAgICAgIG15ICRyTEwgICAgICAgICAgICAgICAgID0gJHNlbGYtPltfckxMX107CiAgICAgICAgbXkgJEtfY2xvc2luZ19jb250YWluZXIgPSAkc2VsZi0+W19LX2Nsb3NpbmdfY29udGFpbmVyX107CgogICAgICAgIG15ICRyYmxvY2tfdHlwZV9vZl9zZXFubyAgICAgICA9ICRzZWxmLT5bX3JibG9ja190eXBlX29mX3NlcW5vX107CiAgICAgICAgbXkgJHJjb2xsYXBzZWRfbGVuZ3RoX2J5X3NlcW5vID0gJHNlbGYtPltfcmNvbGxhcHNlZF9sZW5ndGhfYnlfc2Vxbm9fXTsKICAgICAgICBteSAkcmlzX3Blcm1hbmVudGx5X2Jyb2tlbiAgICAgPSAkc2VsZi0+W19yaXNfcGVybWFuZW50bHlfYnJva2VuX107CiAgICAgICAgbXkgJHJpc19saXN0X2J5X3NlcW5vICAgICAgICAgID0gJHNlbGYtPltfcmlzX2xpc3RfYnlfc2Vxbm9fXTsKICAgICAgICBteSAkcmhhc19icm9rZW5fbGlzdCAgICAgICAgICAgPSAkc2VsZi0+W19yaGFzX2Jyb2tlbl9saXN0X107CiAgICAgICAgbXkgJHJ0eXBlX2NvdW50X2J5X3NlcW5vICAgICAgID0gJHNlbGYtPltfcnR5cGVfY291bnRfYnlfc2Vxbm9fXTsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIExvb3Agb3ZlciB0b2tlbnMgb24gdGhpcyBsaW5lIC4uLgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgbXkgJHR5cGU7CiAgICAgICAgZm9yZWFjaCBteSAkS0sgKCAkS19iZWdpbl9sb29wIC4uICRLX3Rlcm1pbmFsICkgewoKICAgICAgICAgICAgbmV4dCBpZiAoICggJHR5cGUgPSAkckxMLT5bJEtLXS0+W19UWVBFX10gKSBlcSAnYicgKTsKCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgIyBIYW5kbGUgc2VxdWVuY2VkIHRva2VucwogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgIG15ICRzZXFubyA9ICRyTEwtPlskS0tdLT5bX1RZUEVfU0VRVUVOQ0VfXTsKICAgICAgICAgICAgaWYgKCRzZXFubykgewoKICAgICAgICAgICAgICAgIG15ICR0b2tlbiA9ICRyTEwtPlskS0tdLT5bX1RPS0VOX107CgogICAgICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICMgRW50ZXJpbmcgYSBuZXcgY29udGFpbmVyLi4uCiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgaWYgKCAkaXNfb3BlbmluZ190b2tlbnskdG9rZW59CiAgICAgICAgICAgICAgICAgICAgJiYgZGVmaW5lZCggJEtfY2xvc2luZ19jb250YWluZXItPnskc2Vxbm99ICkgKQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAjIHNhdmUgY3VycmVudCBwcm9uZyBsZW5ndGgKICAgICAgICAgICAgICAgICAgICAkc3RhY2tbLTFdLT5bX21heF9wcm9uZ19sZW5fXSA9ICRtYXhfcHJvbmdfbGVuOwogICAgICAgICAgICAgICAgICAgICRtYXhfcHJvbmdfbGVuID0gMDsKCiAgICAgICAgICAgICAgICAgICAgIyBTdGFydCBuZXcgcHJvbmcgb25lIGxldmVsIGRlZXBlcgogICAgICAgICAgICAgICAgICAgIG15ICRoYW5kbGVfbGVuID0gMDsKICAgICAgICAgICAgICAgICAgICBpZiAoICRyYmxvY2tfdHlwZV9vZl9zZXFuby0+eyRzZXFub30gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGNvZGUgYmxvY2tzIGRvIG5vdCB1c2UgLWxwIGluZGVudGF0aW9uLCBidXQgYmVoYXZlIGFzCiAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgdGhleSBoYWQgYSBoYW5kbGUgb2Ygb25lIGluZGVudGF0aW9uIGxlbmd0aAogICAgICAgICAgICAgICAgICAgICAgICAkaGFuZGxlX2xlbiA9ICRyT3B0c19pbmRlbnRfY29sdW1uczsKCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRpc19oYW5kbGVfdHlwZXskbGFzdF9ub25ibGFua190eXBlfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoYW5kbGVfbGVuID0gJGxlbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoYW5kbGVfbGVuICs9IDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkS0sgPiAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHJMTC0+WyAkS0sgLSAxIF0tPltfVFlQRV9dIGVxICdiJyApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIFNldCBhIGZsYWcgaWYgdGhlICdJbnRlcnJ1cHRlZCBMaXN0IFJ1bGUnIHdpbGwgYmUgYXBwbGllZAogICAgICAgICAgICAgICAgICAgICMgKHNlZSBzdWIgY29weV9vbGRfYnJlYWtwb2ludHMpLgogICAgICAgICAgICAgICAgICAgICMgLSBBZGRlZCBjaGVjayBvbiBoYXNfYnJva2VuX2xpc3QgdG8gZml4IGlzc3VlIGIxMjk4CgogICAgICAgICAgICAgICAgICAgIG15ICRpbnRlcnJ1cHRlZF9saXN0X3J1bGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgJHJpc19wZXJtYW5lbnRseV9icm9rZW4tPnskc2Vxbm99CiAgICAgICAgICAgICAgICAgICAgICAmJiAkcmlzX2xpc3RfYnlfc2Vxbm8tPnskc2Vxbm99CiAgICAgICAgICAgICAgICAgICAgICAmJiAhJHJoYXNfYnJva2VuX2xpc3QtPnskc2Vxbm99CiAgICAgICAgICAgICAgICAgICAgICAmJiAhJHJPcHRzX2lnbm9yZV9vbGRfYnJlYWtwb2ludHM7CgogICAgICAgICAgICAgICAgICAgICMgTk9URVM6IFNpbmNlIHdlIGFyZSBsb29raW5nIGF0IG9sZCBsaW5lIG51bWJlcnMgd2UgaGF2ZQogICAgICAgICAgICAgICAgICAgICMgdG8gYmUgdmVyeSBjYXJlZnVsIG5vdCB0byBpbnRyb2R1Y2UgYW4gaW5zdGFiaWxpdHkuCgogICAgICAgICAgICAgICAgICAgICMgVGhpcyBmb2xsb3dpbmcgY2F1c2VzIGluc3RhYmlsaXR5IChiMTI4OC1iMTI5Nik6CiAgICAgICAgICAgICAgICAgICAgIyAgICRpbnRlcnJ1cHRlZF9saXN0X3J1bGUgfHw9CiAgICAgICAgICAgICAgICAgICAgIyAgICAgJHJPcHRzX2JyZWFrX2F0X29sZF9jb21tYV9icmVha3BvaW50czsKCiAgICAgICAgICAgICAgICAgICAgIyAgLSBXZSBjb3VsZCB0dXJuIG9mZiB0aGUgaW50ZXJydXB0ZWQgbGlzdCBydWxlIGlmIHRoZXJlIGlzCiAgICAgICAgICAgICAgICAgICAgIyAgICBhIGJyb2tlbiBzdWJsaXN0LCB0byBmb2xsb3cgJ0NvbXBvdW5kIExpc3QgUnVsZSAxJy4KICAgICAgICAgICAgICAgICAgICAjICAtIFdlIGNvdWxkIHVzZSB0aGUgX3JoYXNfYnJva2VuX2xpc3RfIGZsYWcgZm9yIHRoaXMuCiAgICAgICAgICAgICAgICAgICAgIyAgLSBCdXQgaXQgc2VlbXMgc2FmZXIgbm90IHRvIGRvIHRoaXMsIHRvIGF2b2lkCiAgICAgICAgICAgICAgICAgICAgIyAgICBpbnN0YWJpbGl0eSwgc2luY2UgdGhlIGJyb2tlbiBzdWJsaXN0IGNvdWxkIGJlCiAgICAgICAgICAgICAgICAgICAgIyAgICB0ZW1wb3JhcnkuICBJdCBzZWVtcyBiZXR0ZXIgdG8gbGV0IHRoZSBmb3JtYXR0aW5nCiAgICAgICAgICAgICAgICAgICAgIyAgICBzdGFiaWxpemUgYnkgaXRzZWxmIGFmdGVyIG9uZSBvciB0d28gaXRlcmF0aW9ucy4KICAgICAgICAgICAgICAgICAgICAjICAtIFNvLCBub3QgZG9pbmcgdGhpcyBmb3Igbm93CgogICAgICAgICAgICAgICAgICAgICMgVHVybiBvZmYgdGhlIGludGVycnVwdGVkIGxpc3QgcnVsZSBpZiAtdm1sbCBpcyBzZXQgYW5kIGEKICAgICAgICAgICAgICAgICAgICAjIGxpc3QgaGFzICc9PicgY2hhcmFjdGVycy4gIFRoaXMgYXZvaWRzIGluc3RhYmlsaXRpZXMgZHVlCiAgICAgICAgICAgICAgICAgICAgIyB0byBkZXBlbmRlbmNlIG9uIG9sZCBsaW5lIGJyZWFrczsgaXNzdWUgYjEzMjUuCiAgICAgICAgICAgICAgICAgICAgaWYgKCAgICRpbnRlcnJ1cHRlZF9saXN0X3J1bGUKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHJPcHRzX3ZhcmlhYmxlX21heGltdW1fbGluZV9sZW5ndGggKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHJ0eXBlX2NvdW50ID0gJHJ0eXBlX2NvdW50X2J5X3NlcW5vLT57JHNlcW5vfTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkcnR5cGVfY291bnQgJiYgJHJ0eXBlX2NvdW50LT57Jz0+J30gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW50ZXJydXB0ZWRfbGlzdF9ydWxlID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgbXkgJEtfYyA9ICRLX2Nsb3NpbmdfY29udGFpbmVyLT57JHNlcW5vfTsKCiAgICAgICAgICAgICAgICAgICAgIyBBZGQgbGVuZ3RoIG9mIGFueSB0ZXJtaW5hbCBsaXN0IGl0ZW0gaWYgaW50ZXJydXB0ZWQKICAgICAgICAgICAgICAgICAgICAjIHNvIHRoYXQgdGhlIHJlc3VsdCBpcyB0aGUgc2FtZSBhcyBpZiB0aGUgdGVybSBpcwogICAgICAgICAgICAgICAgICAgICMgaW4gdGhlIG5leHQgbGluZSAoYjE0NDYpLgoKICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbnRlcnJ1cHRlZF9saXN0X3J1bGUKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJEtLIDwgJEtfdGVybWluYWwKCiAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIGxpbmUgc2hvdWxkIGVuZCBpbiBhIGNvbW1hCiAgICAgICAgICAgICAgICAgICAgICAgICMgTk9URTogdGhpcyBjdXJyZW50bHkgYXNzdW1lcyBicmVhayBhZnRlciBjb21tYS4KICAgICAgICAgICAgICAgICAgICAgICAgIyBBcyBsb25nIGFzIHRoZSBvdGhlciBjYWxsIHRvIGN1bXVsYXRpdmVfbGVuZ3RoLi4KICAgICAgICAgICAgICAgICAgICAgICAgIyBtYWtlcyB0aGUgc2FtZSBhc3N1bXB0aW9uIHdlIHNob3VsZCByZW1haW4gc3RhYmxlLgogICAgICAgICAgICAgICAgICAgICAgICAmJiAkckxMLT5bJEtfdGVybWluYWxdLT5bX1RZUEVfXSBlcSAnLCcKCiAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkbWF4X3Byb25nX2xlbiA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPmN1bXVsYXRpdmVfbGVuZ3RoX3RvX2NvbW1hKCAkS0sgKyAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEtfdGVybWluYWwsICRLX2MgKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHB1c2ggQHN0YWNrLCBbCgogICAgICAgICAgICAgICAgICAgICAgICAkbWF4X3Byb25nX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgJGhhbmRsZV9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICRzZXFubywKICAgICAgICAgICAgICAgICAgICAgICAgJGlsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAkS0ssCiAgICAgICAgICAgICAgICAgICAgICAgICRLX2MsCiAgICAgICAgICAgICAgICAgICAgICAgICRpbnRlcnJ1cHRlZF9saXN0X3J1bGUKICAgICAgICAgICAgICAgICAgICBdOwoKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICMgRXhpdGluZyBhIGNvbnRhaW5lcgogICAgICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICBlbHNpZiAoICRpc19jbG9zaW5nX3Rva2VueyR0b2tlbn0gJiYgQHN0YWNrICkgewoKICAgICAgICAgICAgICAgICAgICAjIFRoZSBjdXJyZW50IHByb25nIGVuZHMgLSBnZXQgaXRzIGhhbmRsZQogICAgICAgICAgICAgICAgICAgIG15ICRpdGVtICAgICAgICAgID0gcG9wIEBzdGFjazsKICAgICAgICAgICAgICAgICAgICBteSAkaGFuZGxlX2xlbiAgICA9ICRpdGVtLT5bX2hhbmRsZV9sZW5fXTsKICAgICAgICAgICAgICAgICAgICBteSAkc2Vxbm9fbyAgICAgICA9ICRpdGVtLT5bX3NlcW5vX29fXTsKICAgICAgICAgICAgICAgICAgICBteSAkaWxpbmVfbyAgICAgICA9ICRpdGVtLT5bX2lsaW5lX29fXTsKICAgICAgICAgICAgICAgICAgICBteSAkS19vICAgICAgICAgICA9ICRpdGVtLT5bX0tfb19dOwogICAgICAgICAgICAgICAgICAgIG15ICRLX2NfZXhwZWN0ICAgID0gJGl0ZW0tPltfS19jX107CiAgICAgICAgICAgICAgICAgICAgbXkgJGNvbGxhcHNlZF9sZW4gPSAkbWF4X3Byb25nX2xlbjsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkc2Vxbm9fbyBuZSAkc2Vxbm8gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIFRoaXMgY2FuIGhhcHBlbiBpZiBpbnB1dCBmaWxlIGhhcyBicmFjZSBlcnJvcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICMgT3RoZXJ3aXNlIGl0IHNob3VsZG4ndCBoYXBwZW4uICBOb3QgZmF0YWwgYnV0IC1scAogICAgICAgICAgICAgICAgICAgICAgICAjIGZvcm1hdHRpbmcgY291bGQgZ2V0IG1lc3NlZCB1cC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBERVZFTF9NT0RFICYmICFnZXRfc2F3X2JyYWNlX2Vycm9yKCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYXVsdCg8PEVPTSk7CnNlcXVlbmNlIG51bWJlcnMgZGlmZmVyOyBhdCBDTE9TSU5HIGxpbmUgJGlsaW5lLCBzZXE9JHNlcW5vLCBLYz0kS0sgLi4gYXQgT1BFTklORyBsaW5lICRpbGluZV9vLCBzZXE9JHNlcW5vX28sIEtvPSRLX28sIGV4cGVjdGluZyBLYz0kS19jX2V4cGVjdApFT00KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICMgUnVsZXMgdG8gYXZvaWQgc2NydW5jaGluZyBjb2RlIGJsb2NrcyAuLi4KICAgICAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgIyBTb21lIHRlc3QgY2FzZXM6CiAgICAgICAgICAgICAgICAgICAgIyBjMDk4L3gxMDcgeDEwOCB4MTEwIHgxMTIgeDExNCB4MTE1IHgxMTcgeDExOCB4MTE5CiAgICAgICAgICAgICAgICAgICAgbXkgJGJsb2NrX3R5cGUgPSAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8tPnskc2Vxbm99OwogICAgICAgICAgICAgICAgICAgIGlmICgkYmxvY2tfdHlwZSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJEtfYyAgICAgICAgICA9ICRLSzsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGJsb2NrX2xlbmd0aCA9IE1JTl9CTE9DS19MRU47CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRpc19vbmVfbGluZV9ibG9jazsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGxldmVsID0gJHJMTC0+WyRLX29dLT5bX0xFVkVMX107CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCgkS19vKSAmJiBkZWZpbmVkKCRLX2MpICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbm90ZTogZml4ZWQgMyBNYXkgMjAyMiAocmVtb3ZlZCAnbXknKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGJsb2NrX2xlbmd0aCA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyTEwtPlsgJEtfYyAtIDEgXS0+W19DVU1VTEFUSVZFX0xFTkdUSF9dIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJMTC0+WyRLX29dLT5bX0NVTVVMQVRJVkVfTEVOR1RIX107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXNfb25lX2xpbmVfYmxvY2sgPSAkaWxpbmUgPT0gJGlsaW5lX287CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgQ29kZSBibG9jayBydWxlIDE6IFVzZSB0aGUgdG90YWwgYmxvY2sgbGVuZ3RoIGlmCiAgICAgICAgICAgICAgICAgICAgICAgICMgaXQgaXMgbGVzcyB0aGFuIHRoZSBtaW5pbXVtLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRibG9ja19sZW5ndGggPCBNSU5fQkxPQ0tfTEVOICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbGxhcHNlZF9sZW4gPSAkYmxvY2tfbGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAjIENvZGUgYmxvY2sgcnVsZSAyOiBVc2UgdGhlIGZ1bGwgbGVuZ3RoIG9mIGEKICAgICAgICAgICAgICAgICAgICAgICAgIyBvbmUtbGluZSBibG9jayB0byBhdm9pZCBicmVha2luZyBpdCwgdW5sZXNzCiAgICAgICAgICAgICAgICAgICAgICAgICMgZXh0cmVtZWx5IGxvbmcuICBXZSBkbyBub3QgbmVlZCB0byBkbyBhIHByZWNpc2UKICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBoZXJlLCBiZWNhdXNlIGlmIGl0IGJyZWFrcyB0aGVuIGl0IHdpbGwKICAgICAgICAgICAgICAgICAgICAgICAgIyBzdGF5IGJyb2tlbiBvbiBsYXRlciBpdGVyYXRpb25zLgogICAgICAgICAgICAgICAgICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXNfb25lX2xpbmVfYmxvY2sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRibG9ja19sZW5ndGggPAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1heGltdW1fbGluZV9sZW5ndGhfYXRfbGV2ZWxbJGxldmVsXQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQnV0IHNraXAgdGhpcyBmb3IgYmxvY2tzIHR5cGVzIHdoaWNoIGNhbiByZWZvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGxpa2Ugc29ydC9tYXAvZ3JlcC9ldmFsIGJsb2NrcywgdG8gYXZvaWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaW5zdGFiaWxpdHkgKGIxMzQ1LCBiMTQyOCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRzZWxmLT5pc19mcmFnaWxlX2Jsb2NrX3R5cGUoICRibG9ja190eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZXFubyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29sbGFwc2VkX2xlbiA9ICRibG9ja19sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgQ29kZSBibG9jayBydWxlIDM6IE90aGVyd2lzZSB0aGUgbGVuZ3RoIHNob3VsZCBiZQogICAgICAgICAgICAgICAgICAgICAgICAjIGF0IGxlYXN0IE1JTl9CTE9DS19MRU4gdG8gYXZvaWQgc2NydW5jaGluZyBjb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICMgYmxvY2tzLgogICAgICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRjb2xsYXBzZWRfbGVuIDwgTUlOX0JMT0NLX0xFTiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb2xsYXBzZWRfbGVuID0gTUlOX0JMT0NLX0xFTjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbm9uZSBvZiB0aGVzZSBydWxlcyBhcHBsaWVzCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgU3RvcmUgdGhlIHJlc3VsdC4gIFNvbWUgZXh0cmEgc3BhY2UsICcyJywgYWxsb3dzIGZvcgogICAgICAgICAgICAgICAgICAgICMgbGVuZ3RoIG9mIGFuIG9wZW5pbmcgdG9rZW4sIGluc2lkZSBzcGFjZSwgY29tbWEsIC4uLgogICAgICAgICAgICAgICAgICAgICMgVGhpcyBjb25zdGFudCBoYXMgYmVlbiB0dW5lZCB0byBnaXZlIGdvb2Qgb3ZlcmFsbAogICAgICAgICAgICAgICAgICAgICMgcmVzdWx0cy4KICAgICAgICAgICAgICAgICAgICAkY29sbGFwc2VkX2xlbiArPSAyOwogICAgICAgICAgICAgICAgICAgICRyY29sbGFwc2VkX2xlbmd0aF9ieV9zZXFuby0+eyRzZXFub30gPSAkY29sbGFwc2VkX2xlbjsKCiAgICAgICAgICAgICAgICAgICAgIyBSZXN0YXJ0IHNjYW5uaW5nIHRoZSBsb3dlciBsZXZlbCBwcm9uZwogICAgICAgICAgICAgICAgICAgIGlmIChAc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG1heF9wcm9uZ19sZW4gPSAkc3RhY2tbLTFdLT5bX21heF9wcm9uZ19sZW5fXTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbGxhcHNlZF9sZW4gKz0gJGhhbmRsZV9sZW47CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJGNvbGxhcHNlZF9sZW4gPiAkbWF4X3Byb25nX2xlbiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtYXhfcHJvbmdfbGVuID0gJGNvbGxhcHNlZF9sZW47CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBpdCBpcyBhIHRlcm5hcnkgb3IgaW5wdXQgZmlsZSBpcyB1bmJhbGFuY2VkCiAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGxlbiAgICAgICAgICAgICAgICA9IDA7CiAgICAgICAgICAgICAgICAkbGFzdF9ub25ibGFua190eXBlID0gJHR5cGU7CiAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIEhhbmRsZSBub24tY29udGFpbmVyIHRva2VucwogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICBteSAkdG9rZW5fbGVuZ3RoID0gJHJMTC0+WyRLS10tPltfVE9LRU5fTEVOR1RIX107CgogICAgICAgICAgICAjIENvdW50IGxlbmd0aHMgb2YgdGhpbmdzIGxpa2UgJ3h4ID0+IHl5JyBhcyBhIHNpbmdsZSBpdGVtCiAgICAgICAgICAgIGlmICggJHR5cGUgZXEgJz0+JyApIHsKICAgICAgICAgICAgICAgICRsZW4gKz0gJHRva2VuX2xlbmd0aCArIDE7CgogICAgICAgICAgICAgICAgIyBmaXggJGxlbiBmb3IgLW5hd3MsIGlzc3VlIGIxNDU3CiAgICAgICAgICAgICAgICBpZiAoICEkck9wdHNfYWRkX3doaXRlc3BhY2UgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCAkckxMLT5bICRLSyArIDEgXSApCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRyTEwtPlsgJEtLICsgMSBdLT5bX1RZUEVfXSBuZSAnYicgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGxlbiAtPSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICRsZW4gPiAkbWF4X3Byb25nX2xlbiApIHsgJG1heF9wcm9uZ19sZW4gPSAkbGVuIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRsYXN0X25vbmJsYW5rX3R5cGUgZXEgJz0+JyApIHsKICAgICAgICAgICAgICAgICRsZW4gKz0gJHRva2VuX2xlbmd0aDsKICAgICAgICAgICAgICAgIGlmICggJGxlbiA+ICRtYXhfcHJvbmdfbGVuICkgeyAkbWF4X3Byb25nX2xlbiA9ICRsZW4gfQoKICAgICAgICAgICAgICAgICMgYnV0IG9ubHkgaW5jbHVkZSBvbmUgPT4gcGVyIGl0ZW0KICAgICAgICAgICAgICAgICRsZW4gPSAkdG9rZW5fbGVuZ3RoOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGluY2x1ZGUgZXZlcnl0aGluZyB0byBlbmQgb2YgbGluZSBhZnRlciBhIGhlcmUgdGFyZ2V0CiAgICAgICAgICAgIGVsc2lmICggJHR5cGUgZXEgJ2gnICkgewogICAgICAgICAgICAgICAgJGxlbiA9ICRyTEwtPlskS19sYXN0XS0+W19DVU1VTEFUSVZFX0xFTkdUSF9dIC0KICAgICAgICAgICAgICAgICAgJHJMTC0+WyAkS0sgLSAxIF0tPltfQ1VNVUxBVElWRV9MRU5HVEhfXTsKICAgICAgICAgICAgICAgIGlmICggJGxlbiA+ICRtYXhfcHJvbmdfbGVuICkgeyAkbWF4X3Byb25nX2xlbiA9ICRsZW4gfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGZvciBldmVyeXRoaW5nIGVsc2UganVzdCB1c2UgdGhlIHRva2VuIGxlbmd0aAogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRsZW4gPSAkdG9rZW5fbGVuZ3RoOwogICAgICAgICAgICAgICAgaWYgKCAkbGVuID4gJG1heF9wcm9uZ19sZW4gKSB7ICRtYXhfcHJvbmdfbGVuID0gJGxlbiB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfdHlwZSA9ICR0eXBlOwoKICAgICAgICB9ICMjIGVuZCBsb29wIG92ZXIgdG9rZW5zIG9uIHRoaXMgbGluZQoKICAgICAgICByZXR1cm47CgogICAgfSAjIyBlbmQgc3ViIHhscF9jb2xsYXBzZV9sZW5ndGhzX2lubmVyX2xvb3AKCn0gIyMgZW5kIGNsb3N1cmUgeGxwX2NvbGxhcHNlZF9sZW5ndGhzCgpzdWIgaXNfZXhjbHVkZWRfbHAgewoKICAgIG15ICggJHNlbGYsICRLSyApID0gQF87CgogICAgIyBEZWNpZGUgaWYgdGhpcyBjb250YWluZXIgaXMgZXhjbHVkZWQgYnkgdXNlciByZXF1ZXN0CgogICAgIyBHaXZlbjoKICAgICMgICAkS0sgPSBpbmRleCBvZiB0aGUgY29udGFpbmVyIG9wZW5pbmcgdG9rZW4KICAgICMgUmV0dXJuOgogICAgIyAgIHRydWUgaWYgdGhpcyB0b2tlbiBpcyBleGNsdWRlZCAoaS5lLiwgbWF5IG5vdCB1c2UgLWxwKQogICAgIyAgIGZhbHNlIG90aGVyd2lzZQoKICAgICMgVGhlIGNvbnRyb2wgaGFzaCBjYW4gZWl0aGVyIGRlc2NyaWJlOgogICAgIyAgIHdoYXQgdG8gZXhjbHVkZTogICRsaW5lX3VwX3BhcmVudGhlc2VzX2NvbnRyb2xfaXNfbHB4bCA9IDEsIG9yCiAgICAjICAgd2hhdCB0byBpbmNsdWRlOiAgJGxpbmVfdXBfcGFyZW50aGVzZXNfY29udHJvbF9pc19scHhsID0gMAoKICAgIG15ICRyTEwgICAgICAgICA9ICRzZWxmLT5bX3JMTF9dOwogICAgbXkgJHJ0b2tlbl92YXJzID0gJHJMTC0+WyRLS107CiAgICBteSAkdG9rZW4gICAgICAgPSAkcnRva2VuX3ZhcnMtPltfVE9LRU5fXTsKICAgIG15ICRyZmxhZ3MgICAgICA9ICRsaW5lX3VwX3BhcmVudGhlc2VzX2NvbnRyb2xfaGFzaHskdG9rZW59OwoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBURVNUICMxOiBjaGVjayBtYXRjaCB0byBsaXN0ZWQgY29udGFpbmVyIHR5cGVzCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGlmICggIWRlZmluZWQoJHJmbGFncykgKSB7CgogICAgICAgICMgVGhlcmUgaXMgbm8gZW50cnkgZm9yIHRoaXMgY29udGFpbmVyLCBzbyB3ZSBhcmUgZG9uZQogICAgICAgIHJldHVybiAhJGxpbmVfdXBfcGFyZW50aGVzZXNfY29udHJvbF9pc19scHhsOwogICAgfQoKICAgIG15ICggJGZsYWcxLCAkZmxhZzIgKSA9IEB7JHJmbGFnc307CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFRFU1QgIzI6IGNoZWNrIG1hdGNoIHRvIGZsYWcxLCB0aGUgcHJlY2VkaW5nIG5vbmJsYW5rIHdvcmQKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgbXkgJG1hdGNoX2ZsYWcxID0gIWRlZmluZWQoJGZsYWcxKSB8fCAkZmxhZzEgZXEgJyonOwogICAgaWYgKCAhJG1hdGNoX2ZsYWcxICkgewoKICAgICAgICAjIEZpbmQgdGhlIHByZXZpb3VzIHRva2VuCiAgICAgICAgbXkgKCAkaXNfZiwgJGlzX2ssICRpc193ICk7CiAgICAgICAgbXkgJEtwID0gJHNlbGYtPktfcHJldmlvdXNfbm9uYmxhbmsoJEtLKTsKICAgICAgICBpZiAoIGRlZmluZWQoJEtwKSApIHsKICAgICAgICAgICAgbXkgJHR5cGVfcCA9ICRyTEwtPlskS3BdLT5bX1RZUEVfXTsKICAgICAgICAgICAgbXkgJHNlcW5vICA9ICRydG9rZW5fdmFycy0+W19UWVBFX1NFUVVFTkNFX107CgogICAgICAgICAgICAjIGtleXdvcmQ/CiAgICAgICAgICAgICRpc19rID0gJHR5cGVfcCBlcSAnayc7CgogICAgICAgICAgICAjIGZ1bmN0aW9uIGNhbGw/CiAgICAgICAgICAgICRpc19mID0gJHNlbGYtPltfcmlzX2Z1bmN0aW9uX2NhbGxfcGFyZW5fXS0+eyRzZXFub307CgogICAgICAgICAgICAjIGVpdGhlciBrZXl3b3JkIG9yIGZ1bmN0aW9uIGNhbGw/CiAgICAgICAgICAgICRpc193ID0gJGlzX2sgfHwgJGlzX2Y7CiAgICAgICAgfQoKICAgICAgICAjIENoZWNrIGZvciBtYXRjaCBiYXNlZCBvbiBmbGFnMSBhbmQgdGhlIHByZXZpb3VzIHRva2VuOgogICAgICAgIGlmICAgICggJGZsYWcxIGVxICdrJyApIHsgJG1hdGNoX2ZsYWcxID0gJGlzX2sgfQogICAgICAgIGVsc2lmICggJGZsYWcxIGVxICdLJyApIHsgJG1hdGNoX2ZsYWcxID0gISRpc19rIH0KICAgICAgICBlbHNpZiAoICRmbGFnMSBlcSAnZicgKSB7ICRtYXRjaF9mbGFnMSA9ICRpc19mIH0KICAgICAgICBlbHNpZiAoICRmbGFnMSBlcSAnRicgKSB7ICRtYXRjaF9mbGFnMSA9ICEkaXNfZiB9CiAgICAgICAgZWxzaWYgKCAkZmxhZzEgZXEgJ3cnICkgeyAkbWF0Y2hfZmxhZzEgPSAkaXNfdyB9CiAgICAgICAgZWxzaWYgKCAkZmxhZzEgZXEgJ1cnICkgeyAkbWF0Y2hfZmxhZzEgPSAhJGlzX3cgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAjIyBubyBtYXRjaAogICAgICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KDw8RU9NKTsKdW5leHBlY3RlZCAtLWxwLWV4Y2x1c2lvbiBjb2RlICckZmxhZzEnOiBleHBlY3Rpbmcgb25lIG9mIGtLZkZ3VwpFT00KICAgICAgICB9CiAgICB9CgogICAgIyBTZWUgaWYgd2UgY2FuIGV4Y2x1ZGUgdGhpcyBiYXNlZCBvbiB0aGUgZmxhZzEgdGVzdC4uLgogICAgaWYgKCRsaW5lX3VwX3BhcmVudGhlc2VzX2NvbnRyb2xfaXNfbHB4bCkgewogICAgICAgIHJldHVybiAxIGlmICgkbWF0Y2hfZmxhZzEpOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgcmV0dXJuIDEgaWYgKCAhJG1hdGNoX2ZsYWcxICk7CiAgICB9CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgVEVTVCAjMzogZXhjbHVzaW9uIGJhc2VkIG9uIGZsYWcyIGFuZCB0aGUgY29udGFpbmVyIGNvbnRlbnRzCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICMgTm90ZSB0aGF0IHRoaXMgaXMgYW4gZXhjbHVzaW9uIHRlc3QgZm9yIGJvdGggLWxweGwgb3IgLWxwaWwgaW5wdXQgbWV0aG9kcwogICAgIyBUaGUgb3B0aW9ucyBhcmU6CiAgICAjICAwIG9yIGJsYW5rOiBpZ25vcmUgY29udGFpbmVyIGNvbnRlbnRzCiAgICAjICAxIGV4Y2x1ZGUgbm9uLWxpc3RzIG9yIGxpc3RzIHdpdGggc3VibGlzdHMKICAgICMgIDIgc2FtZSBhcyAxIGJ1dCBhbHNvIGV4Y2x1ZGUgbGlzdHMgd2l0aCBjb2RlIGJsb2NrcwoKICAgIG15ICRtYXRjaF9mbGFnMjsKICAgIGlmICgkZmxhZzIpIHsKCiAgICAgICAgbXkgJHNlcW5vID0gJHJ0b2tlbl92YXJzLT5bX1RZUEVfU0VRVUVOQ0VfXTsKCiAgICAgICAgbXkgJGlzX2xpc3QgICAgICAgID0gJHNlbGYtPltfcmlzX2xpc3RfYnlfc2Vxbm9fXS0+eyRzZXFub307CiAgICAgICAgbXkgJGhhc19saXN0ICAgICAgID0gJHNlbGYtPltfcmhhc19saXN0X10tPnskc2Vxbm99OwogICAgICAgIG15ICRoYXNfY29kZV9ibG9jayA9ICRzZWxmLT5bX3JoYXNfY29kZV9ibG9ja19dLT57JHNlcW5vfTsKICAgICAgICBteSAkaGFzX3Rlcm5hcnkgICAgPSAkc2VsZi0+W19yaGFzX3Rlcm5hcnlfXS0+eyRzZXFub307CgogICAgICAgIGlmICggICEkaXNfbGlzdAogICAgICAgICAgICB8fCAkaGFzX2xpc3QKICAgICAgICAgICAgfHwgJGZsYWcyIGVxICcyJyAmJiAoICRoYXNfY29kZV9ibG9jayB8fCAkaGFzX3Rlcm5hcnkgKSApCiAgICAgICAgewogICAgICAgICAgICAkbWF0Y2hfZmxhZzIgPSAxOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAkbWF0Y2hfZmxhZzI7Cn0gIyMgZW5kIHN1YiBpc19leGNsdWRlZF9scAoKc3ViIHNldF9leGNsdWRlZF9scF9jb250YWluZXJzIHsKCiAgICBteSAoJHNlbGYpID0gQF87CiAgICByZXR1cm4gdW5sZXNzICgkck9wdHNfbGluZV91cF9wYXJlbnRoZXNlcyk7CiAgICBteSAkckxMID0gJHNlbGYtPltfckxMX107CiAgICByZXR1cm4gdW5sZXNzICggZGVmaW5lZCgkckxMKSAmJiBAeyRyTEx9ICk7CgogICAgbXkgJEtfb3BlbmluZ19jb250YWluZXIgICAgICAgPSAkc2VsZi0+W19LX29wZW5pbmdfY29udGFpbmVyX107CiAgICBteSAkcmlzX2V4Y2x1ZGVkX2xwX2NvbnRhaW5lciA9ICRzZWxmLT5bX3Jpc19leGNsdWRlZF9scF9jb250YWluZXJfXTsKICAgIG15ICRyYmxvY2tfdHlwZV9vZl9zZXFubyAgICAgID0gJHNlbGYtPltfcmJsb2NrX3R5cGVfb2Zfc2Vxbm9fXTsKCiAgICBmb3JlYWNoIG15ICRzZXFubyAoIGtleXMgJXskS19vcGVuaW5nX2NvbnRhaW5lcn0gKSB7CgogICAgICAgICMgY29kZSBibG9ja3MgYXJlIGFsd2F5cyBleGNsdWRlZCBieSB0aGUgLWxwIGNvZGluZyBzbyB3ZSBjYW4gc2tpcCB0aGVtCiAgICAgICAgbmV4dCBpZiAoICRyYmxvY2tfdHlwZV9vZl9zZXFuby0+eyRzZXFub30gKTsKCiAgICAgICAgbXkgJEtLID0gJEtfb3BlbmluZ19jb250YWluZXItPnskc2Vxbm99OwogICAgICAgIG5leHQgdW5sZXNzIGRlZmluZWQoJEtLKTsKCiAgICAgICAgIyBzZWUgaWYgYSB1c2VyIGV4Y2x1c2lvbiBydWxlIHR1cm5zIG9mZiAtbHAgZm9yIHRoaXMgY29udGFpbmVyCiAgICAgICAgaWYgKCAkc2VsZi0+aXNfZXhjbHVkZWRfbHAoJEtLKSApIHsKICAgICAgICAgICAgJHJpc19leGNsdWRlZF9scF9jb250YWluZXItPnskc2Vxbm99ID0gMTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBzZXRfZXhjbHVkZWRfbHBfY29udGFpbmVycwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDT0RFIFNFQ1RJT04gNjogUHJvY2VzcyBsaW5lLWJ5LWxpbmUKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnN1YiBwcm9jZXNzX2FsbF9saW5lcyB7CgogICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBNYWluIGxvb3AgdG8gZm9ybWF0IGFsbCBsaW5lcyBvZiBhIGZpbGUgYWNjb3JkaW5nIHRvIHR5cGUKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgbXkgJHJsaW5lcyAgICAgICAgICAgICAgICAgICAgID0gJHNlbGYtPltfcmxpbmVzX107CiAgICBteSAkck9wdHNfa2VlcF9vbGRfYmxhbmtfbGluZXMgPSAkck9wdHMtPnsna2VlcC1vbGQtYmxhbmstbGluZXMnfTsKICAgIG15ICRmaWxlX3dyaXRlcl9vYmplY3QgICAgICAgICA9ICRzZWxmLT5bX2ZpbGVfd3JpdGVyX29iamVjdF9dOwogICAgbXkgJGxvZ2dlcl9vYmplY3QgICAgICAgICAgICAgID0gJHNlbGYtPltfbG9nZ2VyX29iamVjdF9dOwogICAgbXkgJHZlcnRpY2FsX2FsaWduZXJfb2JqZWN0ICAgID0gJHNlbGYtPltfdmVydGljYWxfYWxpZ25lcl9vYmplY3RfXTsKICAgIG15ICRzYXZlX2xvZ2ZpbGUgICAgICAgICAgICAgICA9ICRzZWxmLT5bX3NhdmVfbG9nZmlsZV9dOwoKICAgICMgRmxhZyB0byBwcmV2ZW50IGJsYW5rIGxpbmVzIHdoZW4gUE9EIG9jY3VycyBpbiBhIGZvcm1hdCBza2lwcGluZyBzZWN0LgogICAgbXkgJGluX2Zvcm1hdF9za2lwcGluZ19zZWN0aW9uOwoKICAgICMgc2V0IGxvY2F0aW9ucyBmb3IgYmxhbmtzIGFyb3VuZCBsb25nIHJ1bnMgb2Yga2V5d29yZHMKICAgIG15ICRyd2FudF9ibGFua19saW5lX2FmdGVyID0gJHNlbGYtPmtleXdvcmRfZ3JvdXBfc2NhbigpOwoKICAgIG15ICRsaW5lX3R5cGUgICAgICA9IEVNUFRZX1NUUklORzsKICAgIG15ICRpX2xhc3RfUE9EX0VORCA9IC0xMDsKICAgIG15ICRpICAgICAgICAgICAgICA9IC0xOwogICAgZm9yZWFjaCBteSAkbGluZV9vZl90b2tlbnMgKCBAeyRybGluZXN9ICkgewoKICAgICAgICAjIGluc2VydCBibGFuayBsaW5lcyByZXF1ZXN0ZWQgZm9yIGtleXdvcmQgc2VxdWVuY2VzCiAgICAgICAgaWYgKCBkZWZpbmVkKCAkcndhbnRfYmxhbmtfbGluZV9hZnRlci0+eyRpfSApCiAgICAgICAgICAgICYmICRyd2FudF9ibGFua19saW5lX2FmdGVyLT57JGl9ID09IDEgKQogICAgICAgIHsKICAgICAgICAgICAgJHNlbGYtPndhbnRfYmxhbmtfbGluZSgpOwogICAgICAgIH0KCiAgICAgICAgJGkrKzsKCiAgICAgICAgbXkgJGxhc3RfbGluZV90eXBlID0gJGxpbmVfdHlwZTsKICAgICAgICAkbGluZV90eXBlID0gJGxpbmVfb2ZfdG9rZW5zLT57X2xpbmVfdHlwZX07CiAgICAgICAgbXkgJGlucHV0X2xpbmUgPSAkbGluZV9vZl90b2tlbnMtPntfbGluZV90ZXh0fTsKCiAgICAgICAgIyBfbGluZV90eXBlIGNvZGVzIGFyZToKICAgICAgICAjICAgU1lTVEVNICAgICAgICAgLSBzeXN0ZW0tc3BlY2lmaWMgY29kZSBiZWZvcmUgaGFzaC1iYW5nIGxpbmUKICAgICAgICAjICAgQ09ERSAgICAgICAgICAgLSBsaW5lIG9mIHBlcmwgY29kZSAoaW5jbHVkaW5nIGNvbW1lbnRzKQogICAgICAgICMgICBQT0RfU1RBUlQgICAgICAtIGxpbmUgc3RhcnRpbmcgcG9kLCBzdWNoIGFzICc9aGVhZCcKICAgICAgICAjICAgUE9EICAgICAgICAgICAgLSBwb2QgZG9jdW1lbnRhdGlvbiB0ZXh0CiAgICAgICAgIyAgIFBPRF9FTkQgICAgICAgIC0gbGFzdCBsaW5lIG9mIHBvZCBzZWN0aW9uLCAnPWN1dCcKICAgICAgICAjICAgSEVSRSAgICAgICAgICAgLSB0ZXh0IG9mIGhlcmUtZG9jdW1lbnQKICAgICAgICAjICAgSEVSRV9FTkQgICAgICAgLSBsYXN0IGxpbmUgb2YgaGVyZS1kb2MgKHRhcmdldCB3b3JkKQogICAgICAgICMgICBGT1JNQVQgICAgICAgICAtIGZvcm1hdCBzZWN0aW9uCiAgICAgICAgIyAgIEZPUk1BVF9FTkQgICAgIC0gbGFzdCBsaW5lIG9mIGZvcm1hdCBzZWN0aW9uLCAnLicKICAgICAgICAjICAgU0tJUCAgICAgICAgICAgLSBjb2RlIHNraXBwaW5nIHNlY3Rpb24KICAgICAgICAjICAgU0tJUF9FTkQgICAgICAgLSBsYXN0IGxpbmUgb2YgY29kZSBza2lwcGluZyBzZWN0aW9uLCAnIz4+VicKICAgICAgICAjICAgREFUQV9TVEFSVCAgICAgLSBfX0RBVEFfXyBsaW5lCiAgICAgICAgIyAgIERBVEEgICAgICAgICAgIC0gdW5pZGVudGlmaWVkIHRleHQgZm9sbG93aW5nIF9fREFUQV9fCiAgICAgICAgIyAgIEVORF9TVEFSVCAgICAgIC0gX19FTkRfXyBsaW5lCiAgICAgICAgIyAgIEVORCAgICAgICAgICAgIC0gdW5pZGVudGlmaWVkIHRleHQgZm9sbG93aW5nIF9fRU5EX18KICAgICAgICAjICAgRVJST1IgICAgICAgICAgLSB3ZSBhcmUgaW4gYmlnIHRyb3VibGUsIHByb2JhYmx5IG5vdCBhIHBlcmwgc2NyaXB0CgogICAgICAgICMgcHV0IGEgYmxhbmsgbGluZSBhZnRlciBhbiA9Y3V0IHdoaWNoIGNvbWVzIGJlZm9yZSBfX0VORF9fIGFuZCBfX0RBVEFfXwogICAgICAgICMgKHJlcXVpcmVkIGJ5IHBvZGNoZWNrZXIpCiAgICAgICAgaWYgKCAkbGFzdF9saW5lX3R5cGUgZXEgJ1BPRF9FTkQnICYmICEkc2VsZi0+W19zYXdfRU5EX29yX0RBVEFfXSApIHsKICAgICAgICAgICAgJGlfbGFzdF9QT0RfRU5EID0gJGk7CiAgICAgICAgICAgICRmaWxlX3dyaXRlcl9vYmplY3QtPnJlc2V0X2NvbnNlY3V0aXZlX2JsYW5rX2xpbmVzKCk7CiAgICAgICAgICAgIGlmICggISRpbl9mb3JtYXRfc2tpcHBpbmdfc2VjdGlvbiAmJiAkaW5wdXRfbGluZSAhfiAvXlxzKiQvICkgewogICAgICAgICAgICAgICAgJHNlbGYtPndhbnRfYmxhbmtfbGluZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGhhbmRsZSBsaW5lIG9mIGNvZGUuLgogICAgICAgIGlmICggJGxpbmVfdHlwZSBlcSAnQ09ERScgKSB7CgogICAgICAgICAgICBteSAkQ09ERV90eXBlID0gJGxpbmVfb2ZfdG9rZW5zLT57X2NvZGVfdHlwZX07CiAgICAgICAgICAgICRpbl9mb3JtYXRfc2tpcHBpbmdfc2VjdGlvbiA9ICRDT0RFX3R5cGUgZXEgJ0ZTJzsKCiAgICAgICAgICAgICMgSGFuZGxlIGJsYW5rIGxpbmVzCiAgICAgICAgICAgIGlmICggJENPREVfdHlwZSBlcSAnQkwnICkgewoKICAgICAgICAgICAgICAgICMgS2VlcCB0aGlzIGJsYW5rPyBTdGFydCB3aXRoIHRoZSBmbGFnIC1rYmw9biwgd2hlcmUKICAgICAgICAgICAgICAgICMgICBuPTAgaWdub3JlIGFsbCBvbGQgYmxhbmsgbGluZXMKICAgICAgICAgICAgICAgICMgICBuPTEgc3RhYmxlOiBrZWVwIG9sZCBibGFua3MsIGJ1dCBsaW1pdGVkIGJ5IC1tYmw9bgogICAgICAgICAgICAgICAgIyAgIG49MiBrZWVwIGFsbCBvbGQgYmxhbmsgbGluZXMsIHJlZ2FyZGxlc3Mgb2YgLW1ibD1uCiAgICAgICAgICAgICAgICAjIElmIG49MCB3ZSBkZWxldGUgYWxsIG9sZCBibGFuayBsaW5lcyBhbmQgbGV0IGJsYW5rIGxpbmUKICAgICAgICAgICAgICAgICMgcnVsZXMgZ2VuZXJhdGUgYW55IG5lZWRlZCBibGFuayBsaW5lcy4KICAgICAgICAgICAgICAgIG15ICRrZ2Jfa2VlcCA9ICRyT3B0c19rZWVwX29sZF9ibGFua19saW5lczsKCiAgICAgICAgICAgICAgICAjIFRoZW4gZGVsZXRlIGxpbmVzIHJlcXVlc3RlZCBieSB0aGUga2V5d29yZC1ncm91cCBsb2dpYyBpZgogICAgICAgICAgICAgICAgIyBhbGxvd2VkCiAgICAgICAgICAgICAgICBpZiAoICAgJGtnYl9rZWVwID09IDEKICAgICAgICAgICAgICAgICAgICAmJiBkZWZpbmVkKCAkcndhbnRfYmxhbmtfbGluZV9hZnRlci0+eyRpfSApCiAgICAgICAgICAgICAgICAgICAgJiYgJHJ3YW50X2JsYW5rX2xpbmVfYWZ0ZXItPnskaX0gPT0gMiApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJGtnYl9rZWVwID0gMDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIEJ1dCBhbHdheXMga2VlcCBhIGJsYW5rIGxpbmUgZm9sbG93aW5nIGFuID1jdXQKICAgICAgICAgICAgICAgIGlmICggJGkgLSAkaV9sYXN0X1BPRF9FTkQgPCAzICYmICEka2diX2tlZXAgKSB7CiAgICAgICAgICAgICAgICAgICAgJGtnYl9rZWVwID0gMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJGtnYl9rZWVwKSB7CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPmZsdXNoKCRDT0RFX3R5cGUpOwogICAgICAgICAgICAgICAgICAgICRmaWxlX3dyaXRlcl9vYmplY3QtPndyaXRlX2JsYW5rX2NvZGVfbGluZSgKICAgICAgICAgICAgICAgICAgICAgICAgJHJPcHRzX2tlZXBfb2xkX2JsYW5rX2xpbmVzID09IDIgKTsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+W19sYXN0X2xpbmVfbGVhZGluZ190eXBlX10gPSAnYic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgTGV0IGxvZ2dlciBzZWUgYWxsIG5vbi1ibGFuayBsaW5lcyBvZiBjb2RlLiBUaGlzIGlzIGEgc2xvdwogICAgICAgICAgICAgICAgIyBvcGVyYXRpb24gc28gd2UgYXZvaWQgaXQgaWYgaXQgaXMgbm90IGdvaW5nIHRvIGJlIHNhdmVkLgogICAgICAgICAgICAgICAgaWYgKCAkc2F2ZV9sb2dmaWxlICYmICRsb2dnZXJfb2JqZWN0ICkgewoKICAgICAgICAgICAgICAgICAgICAjIGdldCB1cGRhdGVkIGluZGVudGF0aW9uIGxldmVscwogICAgICAgICAgICAgICAgICAgIG15ICRyS19yYW5nZSA9ICRsaW5lX29mX3Rva2Vucy0+e19yS19yYW5nZX07CiAgICAgICAgICAgICAgICAgICAgbXkgKCAkS2ZpcnN0LCAkS2xhc3RfdXUgKSA9IEB7JHJLX3JhbmdlfTsKICAgICAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQoJEtmaXJzdCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRsZXZlbF8wID0gJHNlbGYtPltfcmFkanVzdGVkX2xldmVsc19dLT5bJEtmaXJzdF07CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRjaV9sZXZlbF8wID0KICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+W19yTExfXS0+WyRLZmlyc3RdLT5bX0NJX0xFVkVMX107CiAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lX29mX3Rva2Vucy0+e19sZXZlbF8wfSAgICA9ICRsZXZlbF8wOwogICAgICAgICAgICAgICAgICAgICAgICAkbGluZV9vZl90b2tlbnMtPntfY2lfbGV2ZWxfMH0gPSAkY2lfbGV2ZWxfMDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRsb2dnZXJfb2JqZWN0LT5ibGFja19ib3goICRsaW5lX29mX3Rva2VucywKICAgICAgICAgICAgICAgICAgICAgICAgJHZlcnRpY2FsX2FsaWduZXJfb2JqZWN0LT5nZXRfb3V0cHV0X2xpbmVfbnVtYmVyKCkgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBIYW5kbGUgRm9ybWF0IFNraXBwaW5nIChGUykgYW5kIFZlcmJhdGltIChWQikgTGluZXMKICAgICAgICAgICAgaWYgKCAkQ09ERV90eXBlIGVxICdWQicgfHwgJENPREVfdHlwZSBlcSAnRlMnICkgewogICAgICAgICAgICAgICAgJHNlbGYtPndyaXRlX3VuaW5kZW50ZWRfbGluZSgkaW5wdXRfbGluZSk7CiAgICAgICAgICAgICAgICAkZmlsZV93cml0ZXJfb2JqZWN0LT5yZXNldF9jb25zZWN1dGl2ZV9ibGFua19saW5lcygpOwogICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBIYW5kbGUgYWxsIG90aGVyIGxpbmVzIG9mIGNvZGUKICAgICAgICAgICAgJHNlbGYtPnByb2Nlc3NfbGluZV9vZl9DT0RFKCRsaW5lX29mX3Rva2Vucyk7CiAgICAgICAgfQoKICAgICAgICAjIGhhbmRsZSBsaW5lIG9mIG5vbi1jb2RlLi4KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgc2V0IHNwZWNpYWwgZmxhZ3MKICAgICAgICAgICAgbXkgJHNraXBfbGluZSA9IDA7CiAgICAgICAgICAgIGlmICggc3Vic3RyKCAkbGluZV90eXBlLCAwLCAzICkgZXEgJ1BPRCcgKSB7CgogICAgICAgICAgICAgICAgIyBQb2QgZG9jcyBzaG91bGQgaGF2ZSBhIHByZWNlZGluZyBibGFuayBsaW5lLiAgQnV0IHN0YXkKICAgICAgICAgICAgICAgICMgb3V0IG9mIF9fRU5EX18gYW5kIF9fREFUQV9fIHNlY3Rpb25zLCBiZWNhdXNlCiAgICAgICAgICAgICAgICAjIHRoZSB1c2VyIG1heSBiZSB1c2luZyB0aGlzIHNlY3Rpb24gZm9yIGFueSBwdXJwb3NlIHdoYXRzb2V2ZXIKICAgICAgICAgICAgICAgIGlmICggJHJPcHRzLT57J2RlbGV0ZS1wb2QnfSApIHsgJHNraXBfbGluZSA9IDE7IH0KICAgICAgICAgICAgICAgIGlmICggJHJPcHRzLT57J3RyaW0tcG9kJ30gKSB7CiAgICAgICAgICAgICAgICAgICAgY2hvbXAgJGlucHV0X2xpbmU7CiAgICAgICAgICAgICAgICAgICAgJGlucHV0X2xpbmUgPX4gcy9ccyskLy87CiAgICAgICAgICAgICAgICAgICAgJGlucHV0X2xpbmUgLj0gIlxuIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICggICAhJHNraXBfbGluZQogICAgICAgICAgICAgICAgICAgICYmICEkaW5fZm9ybWF0X3NraXBwaW5nX3NlY3Rpb24KICAgICAgICAgICAgICAgICAgICAmJiAkbGluZV90eXBlIGVxICdQT0RfU1RBUlQnCiAgICAgICAgICAgICAgICAgICAgJiYgISRzZWxmLT5bX3Nhd19FTkRfb3JfREFUQV9dICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+d2FudF9ibGFua19saW5lKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgbGVhdmUgdGhlIGJsYW5rIGNvdW50ZXJzIGluIGEgcHJlZGljdGFibGUgc3RhdGUKICAgICAgICAgICAgIyBhZnRlciBfX0VORF9fIG9yIF9fREFUQV9fCiAgICAgICAgICAgIGVsc2lmICggJGxpbmVfdHlwZSBlcSAnRU5EX1NUQVJUJyB8fCAkbGluZV90eXBlIGVxICdEQVRBX1NUQVJUJyApIHsKICAgICAgICAgICAgICAgICRmaWxlX3dyaXRlcl9vYmplY3QtPnJlc2V0X2NvbnNlY3V0aXZlX2JsYW5rX2xpbmVzKCk7CiAgICAgICAgICAgICAgICAkc2VsZi0+W19zYXdfRU5EX29yX0RBVEFfXSA9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgUGF0Y2ggdG8gYXZvaWQgbG9zaW5nIGJsYW5rIGxpbmVzIGFmdGVyIGEgY29kZS1za2lwcGluZyBibG9jazsKICAgICAgICAgICAgIyBmaXhlcyBjYXNlIGMwNDcuCiAgICAgICAgICAgIGVsc2lmICggJGxpbmVfdHlwZSBlcSAnU0tJUF9FTkQnICkgewogICAgICAgICAgICAgICAgJGZpbGVfd3JpdGVyX29iamVjdC0+cmVzZXRfY29uc2VjdXRpdmVfYmxhbmtfbGluZXMoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICMjIHNvbWUgb3RoZXIgbGluZSB0eXBlCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgd3JpdGUgdW5pbmRlbnRlZCBub24tY29kZSBsaW5lCiAgICAgICAgICAgIGlmICggISRza2lwX2xpbmUgKSB7CiAgICAgICAgICAgICAgICAkc2VsZi0+d3JpdGVfdW5pbmRlbnRlZF9saW5lKCRpbnB1dF9saW5lKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybjsKCn0gIyMgZW5kIHN1YiBwcm9jZXNzX2FsbF9saW5lcwoKeyAgICAjIyBjbG9zdXJlIGtleXdvcmRfZ3JvdXBfc2NhbgoKICAgICMgdGhpcyBpcyB0aGUgcmV0dXJuIHZhcgogICAgbXkgJHJoYXNoX29mX2Rlc2lyZXM7CgogICAgIyB1c2VyIG9wdGlvbiB2YXJpYWJsZXMgZm9yIC1rZ2IKICAgIG15ICgKCiAgICAgICAgJHJPcHRzX2tnYl9hZnRlciwKICAgICAgICAkck9wdHNfa2diX2JlZm9yZSwKICAgICAgICAkck9wdHNfa2diX2RlbGV0ZSwKICAgICAgICAkck9wdHNfa2diX2luc2lkZSwKICAgICAgICAkck9wdHNfa2diX3NpemVfbWF4LAogICAgICAgICRyT3B0c19rZ2Jfc2l6ZV9taW4sCgogICAgKTsKCiAgICAjIGdyb3VwIHZhcmlhYmxlcywgaW5pdGlhbGl6ZWQgYnkga2diX2luaXRpYWxpemVfZ3JvdXBfdmFycwogICAgbXkgKCAkaWJlZywgJGllbmQsICRjb3VudCwgJGxldmVsX2JlZywgJEtfY2xvc2luZyApOwogICAgbXkgKCBAaWJsYW5rcywgQGdyb3VwLCBAc3ViZ3JvdXAgKTsKCiAgICAjIGxpbmUgdmFyaWFibGVzLCB1cGRhdGVkIGJ5IHN1YiBrZXl3b3JkX2dyb3VwX3NjYW4KICAgIG15ICggJGxpbmVfdHlwZSwgJENPREVfdHlwZSwgJEtfZmlyc3QsICRLX2xhc3QgKTsKICAgIG15ICRudW1iZXJfb2ZfZ3JvdXBzX3NlZW47CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyAta2diIGhlbHBlciBzdWJyb3V0aW5lcwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIHN1YiBrZ2JfaW5pdGlhbGl6ZV9vcHRpb25zIHsKCiAgICAgICAgIyBjaGVjayBhbmQgaW5pdGlhbGl6ZSB1c2VyIG9wdGlvbnMgZm9yIC1rZ2IKICAgICAgICAjIHJldHVybiBlcnJvciBmbGFnOgogICAgICAgICMgIHRydWUgZm9yIHNvbWUgaW5wdXQgZXJyb3IsIGRvIG5vdCBjb250aW51ZQogICAgICAgICMgIGZhbHNlIGlmIG9rCgogICAgICAgICMgTG9jYWwgY29waWVzIG9mIHRoZSB2YXJpb3VzIGNvbnRyb2wgcGFyYW1ldGVycwogICAgICAgICRyT3B0c19rZ2JfYWZ0ZXIgID0gJHJPcHRzLT57J2tleXdvcmQtZ3JvdXAtYmxhbmtzLWFmdGVyJ307ICAgICMgJy1rZ2JhJwogICAgICAgICRyT3B0c19rZ2JfYmVmb3JlID0gJHJPcHRzLT57J2tleXdvcmQtZ3JvdXAtYmxhbmtzLWJlZm9yZSd9OyAgICMgJy1rZ2JiJwogICAgICAgICRyT3B0c19rZ2JfZGVsZXRlID0gJHJPcHRzLT57J2tleXdvcmQtZ3JvdXAtYmxhbmtzLWRlbGV0ZSd9OyAgICMgJy1rZ2JkJwogICAgICAgICRyT3B0c19rZ2JfaW5zaWRlID0gJHJPcHRzLT57J2tleXdvcmQtZ3JvdXAtYmxhbmtzLWluc2lkZSd9OyAgICMgJy1rZ2JpJwoKICAgICAgICAjIEEgcmFuZ2Ugb2Ygc2l6ZXMgY2FuIGJlIGlucHV0IHdpdGggZGVjaW1hbCBub3RhdGlvbiBsaWtlICdtaW4ubWF4JwogICAgICAgICMgd2l0aCBhbnkgbnVtYmVyIG9mIGRvdHMgYmV0d2VlbiB0aGUgdHdvIG51bWJlcnMuIEV4YW1wbGVzOgogICAgICAgICMgICAgc3RyaW5nICAgID0+ICAgIG1pbiAgICBtYXggIG1hdGNoZXMKICAgICAgICAjICAgIDEuMSAgICAgICAgICAgICAxICAgICAgMSAgICBleGFjdGx5IDEKICAgICAgICAjICAgIDEuMyAgICAgICAgICAgICAxICAgICAgMyAgICAxLDIsIG9yIDMKICAgICAgICAjICAgIDEuLjMgICAgICAgICAgICAxICAgICAgMyAgICAxLDIsIG9yIDMKICAgICAgICAjICAgIDUgICAgICAgICAgICAgICA1ICAgICAgLSAgICA1IG9yIG1vcmUKICAgICAgICAjICAgIDYuICAgICAgICAgICAgICA2ICAgICAgLSAgICA2IG9yIG1vcmUKICAgICAgICAjICAgIC4yICAgICAgICAgICAgICAtICAgICAgMiAgICB1cCB0byAyCiAgICAgICAgIyAgICAxLjAgICAgICAgICAgICAgMSAgICAgIDAgICAgbm90aGluZwogICAgICAgIG15ICRyT3B0c19rZ2Jfc2l6ZSA9ICRyT3B0cy0+eydrZXl3b3JkLWdyb3VwLWJsYW5rcy1zaXplJ307ICAgICMgJy1rZ2JzJwogICAgICAgICggJHJPcHRzX2tnYl9zaXplX21pbiwgJHJPcHRzX2tnYl9zaXplX21heCApID0gc3BsaXQgL1wuKy8sCiAgICAgICAgICAkck9wdHNfa2diX3NpemU7CiAgICAgICAgaWYgKCAgICRyT3B0c19rZ2Jfc2l6ZV9taW4gJiYgJHJPcHRzX2tnYl9zaXplX21pbiAhfiAvXlxkKyQvCiAgICAgICAgICAgIHx8ICRyT3B0c19rZ2Jfc2l6ZV9tYXggJiYgJHJPcHRzX2tnYl9zaXplX21heCAhfiAvXlxkKyQvICkKICAgICAgICB7CiAgICAgICAgICAgIFdhcm4oPDxFT00pOwpVbmV4cGVjdGVkIHZhbHVlIGZvciAta2diczogJyRyT3B0c19rZ2Jfc2l6ZSc7IGV4cGVjdGluZyAnbWluJyBvciAnbWluLm1heCc7Cmlnbm9yaW5nIGFsbCAta2diIGZsYWdzCkVPTQoKICAgICAgICAgICAgIyBUdXJuIHRoaXMgb3B0aW9uIG9mZiBzbyB0aGF0IHRoaXMgbWVzc2FnZSBkb2VzIG5vdCBrZWVwIHJlcGVhdGluZwogICAgICAgICAgICAjIGR1cmluZyBpdGVyYXRpb25zIGFuZCBvdGhlciBmaWxlcy4KICAgICAgICAgICAgJHJPcHRzLT57J2tleXdvcmQtZ3JvdXAtYmxhbmtzLXNpemUnfSA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgcmV0dXJuICRyaGFzaF9vZl9kZXNpcmVzOwogICAgICAgIH0KICAgICAgICAkck9wdHNfa2diX3NpemVfbWluID0gMSB1bmxlc3MgKCRyT3B0c19rZ2Jfc2l6ZV9taW4pOwoKICAgICAgICBpZiAoICRyT3B0c19rZ2Jfc2l6ZV9tYXggJiYgJHJPcHRzX2tnYl9zaXplX21heCA8ICRyT3B0c19rZ2Jfc2l6ZV9taW4gKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICRyaGFzaF9vZl9kZXNpcmVzOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBjb2RlcyBmb3IgJHJPcHRzX2tnYl9iZWZvcmUgYW5kCiAgICAgICAgIyAkck9wdHNfa2diX2FmdGVyOgogICAgICAgICMgICAwID0gbmV2ZXIgKGRlbGV0ZSBpZiBleGlzdCkKICAgICAgICAjICAgMSA9IHN0YWJsZSAoa2VlcCB1bmNoYW5nZWQpCiAgICAgICAgIyAgIDIgPSBhbHdheXMgKGluc2VydCBpZiBtaXNzaW5nKQogICAgICAgIG15ICRvayA9ICRyT3B0c19rZ2Jfc2l6ZV9taW4gPiAwCiAgICAgICAgICAmJiAoICRyT3B0c19rZ2JfYmVmb3JlICE9IDEKICAgICAgICAgICAgfHwgJHJPcHRzX2tnYl9hZnRlciAhPSAxCiAgICAgICAgICAgIHx8ICRyT3B0c19rZ2JfaW5zaWRlCiAgICAgICAgICAgIHx8ICRyT3B0c19rZ2JfZGVsZXRlICk7CgogICAgICAgIHJldHVybiAkcmhhc2hfb2ZfZGVzaXJlcyBpZiAoICEkb2sgKTsKCiAgICAgICAgIyBUaGUgZm9sbG93aW5nIHBhcmFtZXRlciBjb21iaW5hdGlvbiBjYW4gYmUgdW5zdGFibGUgKGMzMDIpOgogICAgICAgIGlmICggICAkck9wdHNfa2diX3NpemVfbWF4CiAgICAgICAgICAgICYmICRyT3B0c19rZ2JfYWZ0ZXIgPT0gSU5TRVJUCiAgICAgICAgICAgICYmICRyT3B0c19rZ2JfYmVmb3JlID09IERFTEVURSApCiAgICAgICAgewogICAgICAgICAgICAjIFdlIHJlc2V0IGtnYl9iZWZvcmU9U1RBQkxFIHRvIGZpeCBhbmQgY29udGludWUKICAgICAgICAgICAgJHJPcHRzX2tnYl9iZWZvcmUgPSBTVEFCTEU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIga2diX2luaXRpYWxpemVfb3B0aW9ucwoKICAgIHN1YiBrZ2JfaW5pdGlhbGl6ZV9ncm91cF92YXJzIHsKCiAgICAgICAgIyBEZWZpbml0aW9uczoKICAgICAgICAjICAgICAgJGliZWcgPSBmaXJzdCBsaW5lIGluZGV4IG9mIHRoaXMgZW50aXJlIGdyb3VwCiAgICAgICAgIyAgICAgICRpZW5kID0gIGxhc3QgbGluZSBpbmRleCBvZiB0aGlzIGVudGlyZSBncm91cAogICAgICAgICMgICAgICRjb3VudCA9IHRvdGFsIG51bWJlciBvZiBrZXl3b3JkcyBzZWVuIGluIHRoaXMgZW50aXJlIGdyb3VwCiAgICAgICAgIyAkbGV2ZWxfYmVnID0gaW5kZW50YXRpb24gbGV2ZWwgb2YgdGhpcyBncm91cAogICAgICAgICMgICAgIEBncm91cCA9IFsgJGksICR0b2tlbiwgJGNvdW50IF0gPWxpc3Qgb2YgYWxsIGtleXdvcmRzICYgYmxhbmtzCiAgICAgICAgIyAgQHN1Ymdyb3VwID0gICRqLCBpbmRleCBvZiBncm91cCB3aGVyZSB0b2tlbiBjaGFuZ2VzCiAgICAgICAgIyAgIEBpYmxhbmtzID0gbGluZSBpbmRleGVzIG9mIGJsYW5rIGxpbmVzIGluIGlucHV0IHN0cmVhbSBpbiB0aGlzIGdyb3VwCiAgICAgICAgIyAgd2hlcmUgaT1zdGFydGluZyBsaW5lIGluZGV4CiAgICAgICAgIyAgICAgICAgdG9rZW4gKHRoZSBrZXl3b3JkKQogICAgICAgICMgICAgICAgIGNvdW50ID0gbnVtYmVyIG9mIHRoaXMgdG9rZW4gaW4gdGhpcyBzdWJncm91cAogICAgICAgICMgICAgICAgICAgICBqID0gaW5kZXggaW4gZ3JvdXAgd2hlcmUgdG9rZW4gY2hhbmdlcwogICAgICAgICRpYmVnICAgICAgPSAtMTsKICAgICAgICAkaWVuZCAgICAgID0gdW5kZWY7CiAgICAgICAgJGxldmVsX2JlZyA9IC0xOwogICAgICAgICRLX2Nsb3NpbmcgPSB1bmRlZjsKICAgICAgICAkY291bnQgICAgID0gMDsKICAgICAgICBAZ3JvdXAgICAgID0gKCk7CiAgICAgICAgQHN1Ymdyb3VwICA9ICgpOwogICAgICAgIEBpYmxhbmtzICAgPSAoKTsKICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIga2diX2luaXRpYWxpemVfZ3JvdXBfdmFycwoKICAgIHN1YiBrZ2JfaW5pdGlhbGl6ZV9saW5lX3ZhcnMgewogICAgICAgICRDT0RFX3R5cGUgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgJEtfZmlyc3QgICA9IHVuZGVmOwogICAgICAgICRLX2xhc3QgICAgPSB1bmRlZjsKICAgICAgICAkbGluZV90eXBlID0gRU1QVFlfU1RSSU5HOwogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBrZ2JfaW5pdGlhbGl6ZV9saW5lX3ZhcnMKCiAgICBzdWIga2diX2luaXRpYWxpemUgewoKICAgICAgICAjIGluaXRpYWxpemUgYWxsIGNsb3N1cmUgdmFyaWFibGVzIGZvciAta2diCiAgICAgICAgIyByZXR1cm46CiAgICAgICAgIyAgIHRydWUgdG8gY2F1c2UgaW1tZWRpYXRlIGV4aXQgKHNvbWV0aGluZyBpcyB3cm9uZykKICAgICAgICAjICAgZmFsc2UgdG8gY29udGludWUgLi4uIGFsbCBpcyBva2F5CgogICAgICAgICMgVGhpcyBpcyB0aGUgcmV0dXJuIHZhcmlhYmxlOgogICAgICAgICRyaGFzaF9vZl9kZXNpcmVzID0ge307CgogICAgICAgICMgaW5pdGlhbGl6ZSBhbmQgY2hlY2sgdXNlciBvcHRpb25zOwogICAgICAgIG15ICRxdWl0ID0ga2diX2luaXRpYWxpemVfb3B0aW9ucygpOwogICAgICAgIGlmICgkcXVpdCkgeyByZXR1cm4gJHF1aXQgfQoKICAgICAgICAjIGluaXRpYWxpemUgdmFyaWFibGVzIGZvciB0aGUgY3VycmVudCBncm91cCBhbmQgc3ViZ3JvdXBzOgogICAgICAgIGtnYl9pbml0aWFsaXplX2dyb3VwX3ZhcnMoKTsKCiAgICAgICAgIyBpbml0aWFsaXplIHZhcmlhYmxlcyBmb3IgdGhlIG1vc3QgcmVjZW50bHkgc2VlbiBsaW5lOgogICAgICAgIGtnYl9pbml0aWFsaXplX2xpbmVfdmFycygpOwoKICAgICAgICAkbnVtYmVyX29mX2dyb3Vwc19zZWVuID0gMDsKCiAgICAgICAgIyBhbGwgb2theQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBrZ2JfaW5pdGlhbGl6ZQoKICAgIHN1YiBrZ2JfaW5zZXJ0X2JsYW5rX2FmdGVyIHsKCiAgICAgICAgbXkgKCRpKSA9IEBfOwoKICAgICAgICAjIEdpdmVuOgogICAgICAgICMgICAkaSA9IGxpbmUgbnVtYmVyIGFmdGVyIHdoaWNoIGJsYW5rIGlzIHJlcXVlc3RlZAoKICAgICAgICAkcmhhc2hfb2ZfZGVzaXJlcy0+eyRpfSA9IDE7CiAgICAgICAgbXkgJGlwID0gJGkgKyAxOwogICAgICAgIGlmICggZGVmaW5lZCggJHJoYXNoX29mX2Rlc2lyZXMtPnskaXB9ICkKICAgICAgICAgICAgJiYgJHJoYXNoX29mX2Rlc2lyZXMtPnskaXB9ID09IDIgKQogICAgICAgIHsKICAgICAgICAgICAgJHJoYXNoX29mX2Rlc2lyZXMtPnskaXB9ID0gMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGtnYl9pbnNlcnRfYmxhbmtfYWZ0ZXIKCiAgICBzdWIga2diX3NwbGl0X2ludG9fc3ViX2dyb3VwcyB7CgogICAgICAgICMgcGxhY2UgYmxhbmtzIGFyb3VuZCBsb25nIHN1Yi1ncm91cHMgb2Yga2V5d29yZHMKICAgICAgICAjIC4uLmlmIHJlcXVlc3RlZAogICAgICAgIHJldHVybiB1bmxlc3MgKCRyT3B0c19rZ2JfaW5zaWRlKTsKCiAgICAgICAgIyBsb29wIG92ZXIgc3ViLWdyb3VwcywgaW5kZXggawogICAgICAgIHB1c2ggQHN1Ymdyb3VwLCBzY2FsYXIoQGdyb3VwKTsKICAgICAgICBteSAka2JlZyA9IDE7CiAgICAgICAgbXkgJGtlbmQgPSBAc3ViZ3JvdXAgLSAxOwogICAgICAgIGZvcmVhY2ggbXkgJGsgKCAka2JlZyAuLiAka2VuZCApIHsKCiAgICAgICAgICAgICMgaW5kZXggaiBydW5zIHRocm91Z2ggYWxsIGtleXdvcmRzIGZvdW5kCiAgICAgICAgICAgIG15ICRqX2IgPSAkc3ViZ3JvdXBbICRrIC0gMSBdOwogICAgICAgICAgICBteSAkal9lID0gJHN1Ymdyb3VwWyRrXSAtIDE7CgogICAgICAgICAgICAjIGluZGV4IGkgaXMgdGhlIGFjdHVhbCBsaW5lIG51bWJlciBvZiBhIGtleXdvcmQKICAgICAgICAgICAgbXkgKCAkaV9iLCAgICAkdG9rX2JfdXUsICRjb3VudF9iICkgPSBAeyAkZ3JvdXBbJGpfYl0gfTsKICAgICAgICAgICAgbXkgKCAkaV9lX3V1LCAkdG9rX2VfdXUsICRjb3VudF9lICkgPSBAeyAkZ3JvdXBbJGpfZV0gfTsKICAgICAgICAgICAgbXkgJG51bSA9ICRjb3VudF9lIC0gJGNvdW50X2IgKyAxOwoKICAgICAgICAgICAgIyBUaGlzIHN1Ymdyb3VwIHJ1bnMgZnJvbSBsaW5lICRpYiB0byBsaW5lICRpZS0xLCBidXQgbWF5IGNvbnRhaW4KICAgICAgICAgICAgIyBibGFuayBsaW5lcwogICAgICAgICAgICBpZiAoICRudW0gPj0gJHJPcHRzX2tnYl9zaXplX21pbiApIHsKCiAgICAgICAgICAgICAgICAjIGlmIHRoZXJlIGFyZSBibGFuayBsaW5lcywgd2UgcmVxdWlyZSB0aGF0IGF0IGxlYXN0ICRudW0gbGluZXMKICAgICAgICAgICAgICAgICMgYmUgbm9uLWJsYW5rIHVwIHRvIHRoZSBib3VuZGFyeSB3aXRoIHRoZSBuZXh0IHN1Ymdyb3VwLgogICAgICAgICAgICAgICAgbXkgJG5vZ19iID0gbXkgJG5vZ19lID0gMTsKICAgICAgICAgICAgICAgIGlmICggQGlibGFua3MgJiYgISRyT3B0c19rZ2JfZGVsZXRlICkgewogICAgICAgICAgICAgICAgICAgIG15ICRqX2JiID0gJGpfYiArICRudW0gLSAxOwogICAgICAgICAgICAgICAgICAgIG15ICggJGlfYmJfdXUsICR0b2tfYmJfdXUsICRjb3VudF9iYiApID0gQHsgJGdyb3VwWyRqX2JiXSB9OwogICAgICAgICAgICAgICAgICAgICRub2dfYiA9ICRjb3VudF9iYiAtICRjb3VudF9iICsgMSA9PSAkbnVtOwoKICAgICAgICAgICAgICAgICAgICBteSAkal9lZSA9ICRqX2UgLSAoICRudW0gLSAxICk7CiAgICAgICAgICAgICAgICAgICAgbXkgKCAkaV9lZV91dSwgJHRva19lZV91dSwgJGNvdW50X2VlICkgPSBAeyAkZ3JvdXBbJGpfZWVdIH07CiAgICAgICAgICAgICAgICAgICAgJG5vZ19lID0gJGNvdW50X2UgLSAkY291bnRfZWUgKyAxID09ICRudW07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoICRub2dfYiAmJiAkayA+ICRrYmVnICkgewogICAgICAgICAgICAgICAgICAgIGtnYl9pbnNlcnRfYmxhbmtfYWZ0ZXIoICRpX2IgLSAxICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoICRub2dfZSAmJiAkayA8ICRrZW5kICkgewogICAgICAgICAgICAgICAgICAgIG15ICggJGlfZXAsICR0b2tfZXBfdXUsICRjb3VudF9lcF91dSApID0KICAgICAgICAgICAgICAgICAgICAgIEB7ICRncm91cFsgJGpfZSArIDEgXSB9OwogICAgICAgICAgICAgICAgICAgIGtnYl9pbnNlcnRfYmxhbmtfYWZ0ZXIoICRpX2VwIC0gMSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBrZ2Jfc3BsaXRfaW50b19zdWJfZ3JvdXBzCgogICAgc3ViIGtnYl9kZWxldGVfaWZfYmxhbmsgewogICAgICAgIG15ICggJHNlbGYsICRpICkgPSBAXzsKCiAgICAgICAgIyBkZWxldGUgbGluZSAkaSBpZiBpdCBpcyBibGFuawogICAgICAgIG15ICRybGluZXMgPSAkc2VsZi0+W19ybGluZXNfXTsKICAgICAgICByZXR1cm4gaWYgKCAkaSA8IDAgfHwgJGkgPj0gQHskcmxpbmVzfSApOwogICAgICAgIHJldHVybiBpZiAoICRybGluZXMtPlskaV0tPntfbGluZV90eXBlfSBuZSAnQ09ERScgKTsKICAgICAgICBteSAkY29kZV90eXBlID0gJHJsaW5lcy0+WyRpXS0+e19jb2RlX3R5cGV9OwogICAgICAgIGlmICggJGNvZGVfdHlwZSBlcSAnQkwnICkgeyAkcmhhc2hfb2ZfZGVzaXJlcy0+eyRpfSA9IDI7IH0KICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIga2diX2RlbGV0ZV9pZl9ibGFuawoKICAgIHN1YiBrZ2JfZGVsZXRlX2lubmVyX2JsYW5rX2xpbmVzIHsKCiAgICAgICAgIyBhbHdheXMgcmVtb3ZlIHVud2FudGVkIHRyYWlsaW5nIGJsYW5rIGxpbmVzIGZyb20gb3VyIGxpc3QKICAgICAgICByZXR1cm4gdW5sZXNzIChAaWJsYW5rcyk7CiAgICAgICAgd2hpbGUgKEBpYmxhbmtzKSB7CiAgICAgICAgICAgIG15ICRpYmwgPSBwb3AgQGlibGFua3M7CiAgICAgICAgICAgIGlmICggJGlibCA8ICRpZW5kICkgeyBwdXNoIEBpYmxhbmtzLCAkaWJsOyBsYXN0IH0KICAgICAgICAgICAgJGllbmQgPSAkaWJsOwogICAgICAgIH0KCiAgICAgICAgIyBub3cgbWFyayBtYXJrIGludGVyaW9yIGJsYW5rIGxpbmVzIGZvciBkZWxldGlvbiBpZiByZXF1ZXN0ZWQKICAgICAgICByZXR1cm4gdW5sZXNzICgkck9wdHNfa2diX2RlbGV0ZSk7CgogICAgICAgIHdoaWxlIChAaWJsYW5rcykgewogICAgICAgICAgICBteSAkaWJsID0gcG9wIEBpYmxhbmtzOwogICAgICAgICAgICAkcmhhc2hfb2ZfZGVzaXJlcy0+eyRpYmx9ID0gMjsKICAgICAgICB9CgogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBrZ2JfZGVsZXRlX2lubmVyX2JsYW5rX2xpbmVzCgogICAgc3ViIGtnYl9lbmRfZ3JvdXAgewoKICAgICAgICBteSAoICRzZWxmLCAoJGJhZF9lbmRpbmcpICkgPSBAXzsKCiAgICAgICAgIyBFbmQgYSBncm91cCBvZiBrZXl3b3JkcwoKICAgICAgICAjIEdpdmVuOgogICAgICAgICMgICAkYmFkX2VuZGluZyA9IGZhbHNlIGlmIGdyb3VwIGVuZHMgb2sKICAgICAgICAjICAgICAgICAgICAgICAgICB0cnVlICBpZiBncm91cCBlbmRzIGJhZGx5IChzdHJhbmdlIHBhdHRlcm4pCgogICAgICAgIGlmICggZGVmaW5lZCgkaWJlZykgJiYgJGliZWcgPj0gMCApIHsKCiAgICAgICAgICAgICMgdGhlbiBoYW5kbGUgc3VmZmljaWVudGx5IGxhcmdlIGdyb3VwcwogICAgICAgICAgICBpZiAoICRjb3VudCA+PSAkck9wdHNfa2diX3NpemVfbWluICkgewoKICAgICAgICAgICAgICAgICRudW1iZXJfb2ZfZ3JvdXBzX3NlZW4rKzsKCiAgICAgICAgICAgICAgICAjIGRvIGFueSBibGFuayBkZWxldGlvbnMgcmVnYXJkbGVzcyBvZiB0aGUgY291bnQKICAgICAgICAgICAgICAgIGtnYl9kZWxldGVfaW5uZXJfYmxhbmtfbGluZXMoKTsKCiAgICAgICAgICAgICAgICBteSAkcmxpbmVzID0gJHNlbGYtPltfcmxpbmVzX107CiAgICAgICAgICAgICAgICBpZiAoICRpYmVnID4gMCApIHsKICAgICAgICAgICAgICAgICAgICBteSAkY29kZV90eXBlID0gJHJsaW5lcy0+WyAkaWJlZyAtIDEgXS0+e19jb2RlX3R5cGV9OwoKICAgICAgICAgICAgICAgICAgICAjIHBhdGNoIGZvciBoYXNoIGJhbmcgbGluZSB3aGljaCBpcyBub3QgY3VycmVudGx5IG1hcmtlZCBhcwogICAgICAgICAgICAgICAgICAgICMgYSBjb21tZW50OyBtYXJrIGl0IGFzIGEgY29tbWVudAogICAgICAgICAgICAgICAgICAgIGlmICggJGliZWcgPT0gMSAmJiAhJGNvZGVfdHlwZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGxpbmVfdGV4dCA9ICRybGluZXMtPlsgJGliZWcgLSAxIF0tPntfbGluZV90ZXh0fTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvZGVfdHlwZSA9ICdCQycKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRsaW5lX3RleHQgJiYgJGxpbmVfdGV4dCA9fiAvXiMvICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIERvIG5vdCBpbnNlcnQgYSBibGFuayBhZnRlciBhIGNvbW1lbnQKICAgICAgICAgICAgICAgICAgICAjICh0aGlzIGNvdWxkIGJlIHN1YmplY3QgdG8gYSBmbGFnIGluIHRoZSBmdXR1cmUpCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkY29kZV90eXBlICF+IC8oPzpCQ3xTQkN8U0JDWCkvICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRyT3B0c19rZ2JfYmVmb3JlID09IElOU0VSVCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtnYl9pbnNlcnRfYmxhbmtfYWZ0ZXIoICRpYmVnIC0gMSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRyT3B0c19rZ2JfYmVmb3JlID09IERFTEVURSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5rZ2JfZGVsZXRlX2lmX2JsYW5rKCAkaWJlZyAtIDEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjID09IFNUQUJMRQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgV2Ugd2lsbCBvbmx5IHB1dCBibGFua3MgYmVmb3JlIGNvZGUgbGluZXMuIFdlIGNvdWxkIGxvb3NlbgogICAgICAgICAgICAgICAgIyB0aGlzIHJ1bGUgYSBsaXR0bGUsIGJ1dCB3ZSBoYXZlIHRvIGJlIHZlcnkgY2FyZWZ1bCBiZWNhdXNlCiAgICAgICAgICAgICAgICAjIGZvciBleGFtcGxlIHdlIGNlcnRhaW5seSBkb24ndCB3YW50IHRvIGRyb3AgYSBibGFuayBsaW5lCiAgICAgICAgICAgICAgICAjIGFmdGVyIGEgbGluZSBsaWtlIHRoaXM6CiAgICAgICAgICAgICAgICAjICAgbXkgJHZhciA9IDw8RU9NOwogICAgICAgICAgICAgICAgaWYgKCAkbGluZV90eXBlIGVxICdDT0RFJyAmJiBkZWZpbmVkKCRLX2ZpcnN0KSApIHsKCiAgICAgICAgICAgICAgICAgICAgIyAtIERvIG5vdCBwdXQgYSBibGFuayBiZWZvcmUgYSBsaW5lIG9mIGRpZmZlcmVudCBsZXZlbAogICAgICAgICAgICAgICAgICAgICMgLSBEbyBub3QgcHV0IGEgYmxhbmsgbGluZSBpZiB3ZSBlbmRlZCB0aGUgc2VhcmNoIGJhZGx5CiAgICAgICAgICAgICAgICAgICAgIyAtIERvIG5vdCBwdXQgYSBibGFuayBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlCiAgICAgICAgICAgICAgICAgICAgIyAtIERvIG5vdCBwdXQgYSBibGFuayBsaW5lIGJlZm9yZSBhIGhhbmdpbmcgc2lkZSBjb21tZW50CiAgICAgICAgICAgICAgICAgICAgbXkgJHJMTCAgICAgID0gJHNlbGYtPltfckxMX107CiAgICAgICAgICAgICAgICAgICAgbXkgJGxldmVsICAgID0gJHJMTC0+WyRLX2ZpcnN0XS0+W19MRVZFTF9dOwogICAgICAgICAgICAgICAgICAgIG15ICRjaV9sZXZlbCA9ICRyTEwtPlskS19maXJzdF0tPltfQ0lfTEVWRUxfXTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAgICRsZXZlbCA9PSAkbGV2ZWxfYmVnCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRjaV9sZXZlbCA9PSAwCiAgICAgICAgICAgICAgICAgICAgICAgICYmICEkYmFkX2VuZGluZwogICAgICAgICAgICAgICAgICAgICAgICAmJiAkaWVuZCA8IEB7JHJsaW5lc30KICAgICAgICAgICAgICAgICAgICAgICAgJiYgJENPREVfdHlwZSBuZSAnSFNDJyApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRyT3B0c19rZ2JfYWZ0ZXIgPT0gSU5TRVJUICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAga2diX2luc2VydF9ibGFua19hZnRlcigkaWVuZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkck9wdHNfa2diX2FmdGVyID09IERFTEVURSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5rZ2JfZGVsZXRlX2lmX2JsYW5rKCAkaWVuZCArIDEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjID09IFNUQUJMRQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGtnYl9zcGxpdF9pbnRvX3N1Yl9ncm91cHMoKTsKICAgICAgICB9CgogICAgICAgICMgcmVzZXQgZm9yIGFub3RoZXIgZ3JvdXAKICAgICAgICBrZ2JfaW5pdGlhbGl6ZV9ncm91cF92YXJzKCk7CgogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBrZ2JfZW5kX2dyb3VwCgogICAgc3ViIGtnYl9maW5kX2NvbnRhaW5lcl9lbmQgewoKICAgICAgICBteSAoJHNlbGYpID0gQF87CgogICAgICAgICMgSWYgdGhlIGtleXdvcmQgbGluZSBpcyBjb250aW51ZWQgb250byBzdWJzZXF1ZW50IGxpbmVzLCBmaW5kIHRoZQogICAgICAgICMgY2xvc2luZyB0b2tlbiAnJEtfY2xvc2luZycgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IHNraXAgcGFzdCB0aGUKICAgICAgICAjIGNvbnRlbnRzIG9mIHRoZSBjb250YWluZXIuCgogICAgICAgICMgV2Ugb25seSBzZXQgdGhpcyB2YWx1ZSBpZiB3ZSBmaW5kIGEgc2ltcGxlIGxpc3QsIG1lYW5pbmcKICAgICAgICAjIC1jb250ZW50cyBvbmx5IG9uZSBsZXZlbCBkZWVwCiAgICAgICAgIyAtbm90IHdlbGRlZAoKICAgICAgICAjIEZpcnN0IGNoZWNrOiBza2lwIGlmIG5leHQgbGluZSBpcyBub3Qgb25lIGRlZXBlcgogICAgICAgIG15ICRLbmV4dF9ub25ibGFuayA9ICRzZWxmLT5LX25leHRfbm9uYmxhbmsoJEtfbGFzdCk7CiAgICAgICAgcmV0dXJuIGlmICggIWRlZmluZWQoJEtuZXh0X25vbmJsYW5rKSApOwogICAgICAgIG15ICRyTEwgICAgICAgID0gJHNlbGYtPltfckxMX107CiAgICAgICAgbXkgJGxldmVsX25leHQgPSAkckxMLT5bJEtuZXh0X25vbmJsYW5rXS0+W19MRVZFTF9dOwogICAgICAgIHJldHVybiBpZiAoICRsZXZlbF9uZXh0ICE9ICRsZXZlbF9iZWcgKyAxICk7CgogICAgICAgICMgRmluZCB0aGUgcGFyZW50IGNvbnRhaW5lciBvZiB0aGUgZmlyc3QgdG9rZW4gb24gdGhlIG5leHQgbGluZQogICAgICAgIG15ICRwYXJlbnRfc2Vxbm8gPSAkc2VsZi0+cGFyZW50X3NlcW5vX2J5X0soJEtuZXh0X25vbmJsYW5rKTsKICAgICAgICByZXR1cm4gdW5sZXNzICggZGVmaW5lZCgkcGFyZW50X3NlcW5vKSApOwoKICAgICAgICAjIE11c3Qgbm90IGJlIGEgd2VsZCAoY2FuIGJlIHVuc3RhYmxlKQogICAgICAgIHJldHVybgogICAgICAgICAgaWYgKCAkdG90YWxfd2VsZF9jb3VudAogICAgICAgICAgICAmJiAkc2VsZi0+aXNfd2VsZGVkX2F0X3NlcW5vKCRwYXJlbnRfc2Vxbm8pICk7CgogICAgICAgICMgT3BlbmluZyBjb250YWluZXIgbXVzdCBleGlzdCBhbmQgYmUgb24gdGhpcyBsaW5lCiAgICAgICAgbXkgJEtvID0gJHNlbGYtPltfS19vcGVuaW5nX2NvbnRhaW5lcl9dLT57JHBhcmVudF9zZXFub307CiAgICAgICAgcmV0dXJuIGlmICggIWRlZmluZWQoJEtvKSB8fCAkS28gPD0gJEtfZmlyc3QgfHwgJEtvID4gJEtfbGFzdCApOwoKICAgICAgICAjIFZlcmlmeSB0aGF0IHRoZSBjbG9zaW5nIGNvbnRhaW5lciBleGlzdHMgYW5kIGlzIG9uIGEgbGF0ZXIgbGluZQogICAgICAgIG15ICRLYyA9ICRzZWxmLT5bX0tfY2xvc2luZ19jb250YWluZXJfXS0+eyRwYXJlbnRfc2Vxbm99OwogICAgICAgIHJldHVybiBpZiAoICFkZWZpbmVkKCRLYykgfHwgJEtjIDw9ICRLX2xhc3QgKTsKCiAgICAgICAgIyBUaGF0J3MgaXQKICAgICAgICAkS19jbG9zaW5nID0gJEtjOwoKICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIga2diX2ZpbmRfY29udGFpbmVyX2VuZAoKICAgIHN1YiBrZ2JfYWRkX3RvX2dyb3VwIHsKCiAgICAgICAgbXkgKCAkc2VsZiwgJGksICR0b2tlbiwgJGxldmVsICkgPSBAXzsKCiAgICAgICAgIyBFbmQgdGhlIHByZXZpb3VzIGdyb3VwIGlmIHdlIGhhdmUgcmVhY2hlZCB0aGUgbWF4aW11bQogICAgICAgICMgZ3JvdXAgc2l6ZQogICAgICAgIGlmICggJHJPcHRzX2tnYl9zaXplX21heCAmJiBAZ3JvdXAgPj0gJHJPcHRzX2tnYl9zaXplX21heCApIHsKICAgICAgICAgICAgJHNlbGYtPmtnYl9lbmRfZ3JvdXAoKTsKICAgICAgICB9CgogICAgICAgIGlmICggQGdyb3VwID09IDAgKSB7CiAgICAgICAgICAgICRpYmVnICAgICAgPSAkaTsKICAgICAgICAgICAgJGxldmVsX2JlZyA9ICRsZXZlbDsKICAgICAgICAgICAgJGNvdW50ICAgICA9IDA7CiAgICAgICAgfQoKICAgICAgICAkY291bnQrKzsKICAgICAgICAkaWVuZCA9ICRpOwoKICAgICAgICAjIE5ldyBzdWItZ3JvdXA/CiAgICAgICAgaWYgKCAhQGdyb3VwIHx8ICR0b2tlbiBuZSAkZ3JvdXBbLTFdLT5bMV0gKSB7CiAgICAgICAgICAgIHB1c2ggQHN1Ymdyb3VwLCBzY2FsYXIoQGdyb3VwKTsKICAgICAgICB9CiAgICAgICAgcHVzaCBAZ3JvdXAsIFsgJGksICR0b2tlbiwgJGNvdW50IF07CgogICAgICAgICMgcmVtZW1iZXIgaWYgdGhpcyBsaW5lIGVuZHMgaW4gYW4gb3BlbiBjb250YWluZXIKICAgICAgICAkc2VsZi0+a2diX2ZpbmRfY29udGFpbmVyX2VuZCgpOwoKICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIga2diX2FkZF90b19ncm91cAoKICAgIHN1YiBrZXl3b3JkX2dyb3VwX3NjYW4gewoKICAgICAgICBteSAkc2VsZiA9IHNoaWZ0OwoKICAgICAgICAjIENhbGxlZCBvbmNlIHBlciBmaWxlIHRvIHByb2Nlc3MgLS1rZXl3b3JkLWdyb3VwLWJsYW5rcy0qIHBhcmFtZXRlcnMuCiAgICAgICAgIyBUaGlzIGlzIHRoZSBtYWluIHN1YnJvdXRpbmUgZm9yIHRoZSAta2diIG9wdGlvbgoKICAgICAgICAjIFRhc2s6CiAgICAgICAgIyBNYW5pcHVsYXRlIGJsYW5rIGxpbmVzIGFyb3VuZCBrZXl3b3JkIGdyb3VwcyAoa2diKiBmbGFncykKICAgICAgICAjIFNjYW4gYWxsIGxpbmVzIGxvb2tpbmcgZm9yIHJ1bnMgb2YgY29uc2VjdXRpdmUgbGluZXMgYmVnaW5uaW5nIHdpdGgKICAgICAgICAjIHNlbGVjdGVkIGtleXdvcmRzLiAgRXhhbXBsZSBrZXl3b3JkcyBhcmUgJ215JywgJ291cicsICdsb2NhbCcsIC4uLiBidXQKICAgICAgICAjIHRoZXkgbWF5IGJlIGFueXRoaW5nLiAgV2Ugd2lsbCBzZXQgZmxhZ3MgcmVxdWVzdGluZyB0aGF0IGJsYW5rcyBiZQogICAgICAgICMgaW5zZXJ0ZWQgYXJvdW5kIGFuZCB3aXRoaW4gdGhlbSBhY2NvcmRpbmcgdG8gaW5wdXQgcGFyYW1ldGVycy4gIE5vdGUKICAgICAgICAjIHRoYXQgd2UgYXJlIHNjYW5uaW5nIHRoZSBsaW5lcyBhcyB0aGV5IGNhbWUgaW4gaW4gdGhlIGlucHV0IHN0cmVhbSwgc28KICAgICAgICAjIHRoZXkgYXJlIG5vdCBuZWNlc3NhcmlseSB3ZWxsIGZvcm1hdHRlZC4KCiAgICAgICAgIyBSZXR1cm5zOgogICAgICAgICMgVGhlIG91dHB1dCBvZiB0aGlzIHN1YiBpcyBhIHJldHVybiBoYXNoIHJlZiB3aG9zZSBrZXlzIGFyZSB0aGUgaW5kZXhlcwogICAgICAgICMgb2YgbGluZXMgYWZ0ZXIgd2hpY2ggd2UgZGVzaXJlIGEgYmxhbmsgbGluZS4gIEZvciBsaW5lIGluZGV4ICRpOgogICAgICAgICMgICRyaGFzaF9vZl9kZXNpcmVzLT57JGl9ID0gMSBtZWFucyB3ZSB3YW50IGEgYmxhbmsgbGluZSBBRlRFUiBsaW5lICRpCiAgICAgICAgIyAgJHJoYXNoX29mX2Rlc2lyZXMtPnskaX0gPSAyIG1lYW5zIHdlIHdhbnQgYmxhbmsgbGluZSAkaSByZW1vdmVkCgogICAgICAgICMgTm90aGluZyB0byBkbyBpZiBubyBibGFua3MgY2FuIGJlIG91dHB1dC4gVGhpcyB0ZXN0IGFkZGVkIHRvIGZpeAogICAgICAgICMgY2FzZSBiNzYwLgogICAgICAgIGlmICggISRyT3B0c19tYXhpbXVtX2NvbnNlY3V0aXZlX2JsYW5rX2xpbmVzICkgewogICAgICAgICAgICByZXR1cm4gJHJoYXNoX29mX2Rlc2lyZXM7CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBpbml0aWFsaXphdGlvbgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0KICAgICAgICBteSAkcXVpdCA9IGtnYl9pbml0aWFsaXplKCk7CiAgICAgICAgaWYgKCRxdWl0KSB7IHJldHVybiAkcmhhc2hfb2ZfZGVzaXJlcyB9CgogICAgICAgIG15ICRyTEwgICAgPSAkc2VsZi0+W19yTExfXTsKICAgICAgICBteSAkcmxpbmVzID0gJHNlbGYtPltfcmxpbmVzX107CgogICAgICAgICRzZWxmLT5rZ2JfZW5kX2dyb3VwKCk7CiAgICAgICAgbXkgJGkgPSAtMTsKICAgICAgICBteSAkT3B0X3JlcGVhdF9jb3VudCA9CiAgICAgICAgICAkck9wdHMtPnsna2V5d29yZC1ncm91cC1ibGFua3MtcmVwZWF0LWNvdW50J307ICAgICMgJy1rZ2JyJwoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgbG9vcCBvdmVyIGFsbCBsaW5lcyBvZiB0aGUgc291cmNlCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBmb3JlYWNoIG15ICRsaW5lX29mX3Rva2VucyAoIEB7JHJsaW5lc30gKSB7CgogICAgICAgICAgICAkaSsrOwogICAgICAgICAgICBsYXN0CiAgICAgICAgICAgICAgaWYgKCAkT3B0X3JlcGVhdF9jb3VudCA+IDAKICAgICAgICAgICAgICAgICYmICRudW1iZXJfb2ZfZ3JvdXBzX3NlZW4gPj0gJE9wdF9yZXBlYXRfY291bnQgKTsKCiAgICAgICAgICAgIGtnYl9pbml0aWFsaXplX2xpbmVfdmFycygpOwoKICAgICAgICAgICAgJGxpbmVfdHlwZSA9ICRsaW5lX29mX3Rva2Vucy0+e19saW5lX3R5cGV9OwoKICAgICAgICAgICAgIyBhbHdheXMgZW5kIGEgZ3JvdXAgYXQgbm9uLUNPREUKICAgICAgICAgICAgaWYgKCAkbGluZV90eXBlIG5lICdDT0RFJyApIHsgJHNlbGYtPmtnYl9lbmRfZ3JvdXAoKTsgbmV4dCB9CgogICAgICAgICAgICAkQ09ERV90eXBlID0gJGxpbmVfb2ZfdG9rZW5zLT57X2NvZGVfdHlwZX07CgogICAgICAgICAgICAjIGVuZCBhbnkgZ3JvdXAgYXQgYSBmb3JtYXQgc2tpcHBpbmcgbGluZQogICAgICAgICAgICBpZiAoICRDT0RFX3R5cGUgJiYgJENPREVfdHlwZSBlcSAnRlMnICkgewogICAgICAgICAgICAgICAgJHNlbGYtPmtnYl9lbmRfZ3JvdXAoKTsKICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY29udGludWUgaW4gYSB2ZXJiYXRpbSAoVkIpIHR5cGU7IGl0IG1heSBiZSBxdW90ZWQgdGV4dAogICAgICAgICAgICBpZiAoICRDT0RFX3R5cGUgZXEgJ1ZCJyApIHsKICAgICAgICAgICAgICAgIGlmICggJGliZWcgPj0gMCApIHsgJGllbmQgPSAkaTsgfQogICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBhbmQgY29udGludWUgaW4gYmxhbmsgKEJMKSB0eXBlcwogICAgICAgICAgICBpZiAoICRDT0RFX3R5cGUgZXEgJ0JMJyApIHsKICAgICAgICAgICAgICAgIGlmICggJGliZWcgPj0gMCApIHsKICAgICAgICAgICAgICAgICAgICAkaWVuZCA9ICRpOwogICAgICAgICAgICAgICAgICAgIHB1c2ggQGlibGFua3MsICRpOwoKICAgICAgICAgICAgICAgICAgICAjIHByb3BhZ2F0ZSBjdXJyZW50IHN1Ymdyb3VwIHRva2VuCiAgICAgICAgICAgICAgICAgICAgbXkgJHRvayA9ICRncm91cFstMV0tPlsxXTsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBncm91cCwgWyAkaSwgJHRvaywgJGNvdW50IF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGV4YW1pbmUgdGhlIGZpcnN0IHRva2VuIG9mIHRoaXMgbGluZQogICAgICAgICAgICBteSAkcktfcmFuZ2UgPSAkbGluZV9vZl90b2tlbnMtPntfcktfcmFuZ2V9OwogICAgICAgICAgICAoICRLX2ZpcnN0LCAkS19sYXN0ICkgPSBAeyRyS19yYW5nZX07CiAgICAgICAgICAgIGlmICggIWRlZmluZWQoJEtfZmlyc3QpICkgewoKICAgICAgICAgICAgICAgICMgU29tZXdoYXQgdW5leHBlY3RlZCBibGFuayBsaW5lLi4KICAgICAgICAgICAgICAgICMgJHJLX3JhbmdlIGlzIG5vcm1hbGx5IGRlZmluZWQgZm9yIGxpbmUgdHlwZSBDT0RFLCBidXQgdGhpcyBjYW4KICAgICAgICAgICAgICAgICMgaGFwcGVuIGZvciBleGFtcGxlIGlmIHRoZSBpbnB1dCBsaW5lIHdhcyBhIHNpbmdsZSBzZW1pY29sb24KICAgICAgICAgICAgICAgICMgd2hpY2ggaXMgYmVpbmcgZGVsZXRlZC4gIEluIHRoYXQgY2FzZSB0aGVyZSB3YXMgY29kZSBpbiB0aGUKICAgICAgICAgICAgICAgICMgaW5wdXQgZmlsZSBidXQgaXQgaXMgbm90IGJlaW5nIHJldGFpbmVkLiBTbyB3ZSBjYW4gc2lsZW50bHkKICAgICAgICAgICAgICAgICMgcmV0dXJuLgogICAgICAgICAgICAgICAgcmV0dXJuICRyaGFzaF9vZl9kZXNpcmVzOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkbGV2ZWwgICAgPSAkckxMLT5bJEtfZmlyc3RdLT5bX0xFVkVMX107CiAgICAgICAgICAgIG15ICR0eXBlICAgICA9ICRyTEwtPlskS19maXJzdF0tPltfVFlQRV9dOwogICAgICAgICAgICBteSAkdG9rZW4gICAgPSAkckxMLT5bJEtfZmlyc3RdLT5bX1RPS0VOX107CiAgICAgICAgICAgIG15ICRjaV9sZXZlbCA9ICRyTEwtPlskS19maXJzdF0tPltfQ0lfTEVWRUxfXTsKCiAgICAgICAgICAgICMgRW5kIGEgZ3JvdXAgJ2JhZGx5JyBhdCBhbiB1bmV4cGVjdGVkIGxldmVsLiAgVGhpcyB3aWxsIHByZXZlbnQKICAgICAgICAgICAgIyBibGFuayBsaW5lcyBiZWluZyBpbmNvcnJlY3RseSBwbGFjZWQgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgZ3JvdXAuCiAgICAgICAgICAgICMgV2UgYXJlIGxvb2tpbmcgZm9yIGFueSBkZXZpYXRpb24gZnJvbSB0d28gYWNjZXB0YWJsZSBwYXR0ZXJuczoKICAgICAgICAgICAgIyAgIFBBVFRFUk4gMTogYSBzaW1wbGUgbGlzdDsgc2Vjb25kYXJ5IGxpbmVzIGFyZSBhdCBsZXZlbCsxCiAgICAgICAgICAgICMgICBQQVRURVJOIDI6IGEgbG9uZyBzdGF0ZW1lbnQ7IGFsbCBzZWNvbmRhcnkgbGluZXMgc2FtZSBsZXZlbAogICAgICAgICAgICAjIFRoaXMgd2FzIGFkZGVkIGFzIGEgZml4IGZvciBjYXNlIGIxMTc3LCBpbiB3aGljaCBhIGNvbXBsZXgKICAgICAgICAgICAgIyBzdHJ1Y3R1cmUgZ290IGluY29ycmVjdGx5IGluc2VydGVkIGJsYW5rIGxpbmVzLgogICAgICAgICAgICBpZiAoICRpYmVnID49IDAgKSB7CgogICAgICAgICAgICAgICAgIyBDaGVjayBmb3IgZGV2aWF0aW9uIGZyb20gUEFUVEVSTiAxLCBzaW1wbGUgbGlzdDoKICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCgkS19jbG9zaW5nKSAmJiAkS19maXJzdCA8ICRLX2Nsb3NpbmcgKSB7CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPmtnYl9lbmRfZ3JvdXAoMSkgaWYgKCAkbGV2ZWwgIT0gJGxldmVsX2JlZyArIDEgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIENoZWNrIGZvciBkZXZpYXRpb24gZnJvbSBQQVRURVJOIDIsIHNpbmdsZSBzdGF0ZW1lbnQ6CiAgICAgICAgICAgICAgICBlbHNpZiAoICRsZXZlbCAhPSAkbGV2ZWxfYmVnICkgeyAkc2VsZi0+a2diX2VuZF9ncm91cCgxKSB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAjIyBubyBkZXZpYXRpb24KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBEbyBub3QgbG9vayBmb3Iga2V5d29yZHMgaW4gbGlzdHMgKCBrZXl3b3JkICdteScgY2FuIG9jY3VyIGluCiAgICAgICAgICAgICMgbGlzdHMsIHNlZSBjYXNlIGI3NjApOyBmaXhlZCBmb3IgYzA0OC4KICAgICAgICAgICAgIyBTd2l0Y2ggZnJvbSAtPmlzX2xpc3RfYnlfSyB0byAhLT5pc19pbl9ibG9ja19ieV9LIHRvIGZpeCBiMTQ2NAogICAgICAgICAgICBpZiAoICEkc2VsZi0+aXNfaW5fYmxvY2tfYnlfSygkS19maXJzdCkgKSB7CiAgICAgICAgICAgICAgICBpZiAoICRpYmVnID49IDAgKSB7ICRpZW5kID0gJGkgfQogICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzZWUgaWYgdGhpcyBpcyBhIGNvZGUgdHlwZSB3ZSBzZWVrIChpLmUuIGNvbW1lbnQpCiAgICAgICAgICAgIGlmICggICAkQ09ERV90eXBlCiAgICAgICAgICAgICAgICAmJiAka2V5d29yZF9ncm91cF9saXN0X2NvbW1lbnRfcGF0dGVybgogICAgICAgICAgICAgICAgJiYgJENPREVfdHlwZSA9fiAvJGtleXdvcmRfZ3JvdXBfbGlzdF9jb21tZW50X3BhdHRlcm4vICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIG15ICR0b2sgPSAkQ09ERV90eXBlOwoKICAgICAgICAgICAgICAgICMgQ29udGludWluZyBhIGdyb3VwCiAgICAgICAgICAgICAgICBpZiAoICRpYmVnID49IDAgJiYgJGxldmVsID09ICRsZXZlbF9iZWcgKSB7CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPmtnYl9hZGRfdG9fZ3JvdXAoICRpLCAkdG9rLCAkbGV2ZWwgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIFN0YXJ0IG5ldyBncm91cAogICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICMgZmlyc3QgZW5kIG9sZCBncm91cCBpZiBhbnk7IHdlIG1pZ2h0IGJlIHN0YXJ0aW5nIG5ldwogICAgICAgICAgICAgICAgICAgICMga2V5d29yZHMgYXQgZGlmZmVyZW50IGxldmVsCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkaWJlZyA+PSAwICkgeyAkc2VsZi0+a2diX2VuZF9ncm91cCgpOyB9CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPmtnYl9hZGRfdG9fZ3JvdXAoICRpLCAkdG9rLCAkbGV2ZWwgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgU2VlIGlmIGl0IGlzIGEga2V5d29yZCB3ZSBzZWVrLCBidXQgbmV2ZXIgc3RhcnQgYSBncm91cCBpbiBhCiAgICAgICAgICAgICMgY29udGludWF0aW9uIGxpbmU7IHRoZSBjb2RlIG1heSBiZSBiYWRseSBmb3JtYXR0ZWQuCiAgICAgICAgICAgIGlmICggICAkY2lfbGV2ZWwgPT0gMAogICAgICAgICAgICAgICAgJiYgJHR5cGUgZXEgJ2snCiAgICAgICAgICAgICAgICAmJiAkdG9rZW4gPX4gLyRrZXl3b3JkX2dyb3VwX2xpc3RfcGF0dGVybi8gKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgIyBDb250aW51aW5nIGEga2V5d29yZCBncm91cAogICAgICAgICAgICAgICAgaWYgKCAkaWJlZyA+PSAwICYmICRsZXZlbCA9PSAkbGV2ZWxfYmVnICkgewogICAgICAgICAgICAgICAgICAgICRzZWxmLT5rZ2JfYWRkX3RvX2dyb3VwKCAkaSwgJHRva2VuLCAkbGV2ZWwgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIFN0YXJ0IG5ldyBrZXl3b3JkIGdyb3VwCiAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgIyBmaXJzdCBlbmQgb2xkIGdyb3VwIGlmIGFueTsgd2UgbWlnaHQgYmUgc3RhcnRpbmcgbmV3CiAgICAgICAgICAgICAgICAgICAgIyBrZXl3b3JkcyBhdCBkaWZmZXJlbnQgbGV2ZWwKICAgICAgICAgICAgICAgICAgICBpZiAoICRpYmVnID49IDAgKSB7ICRzZWxmLT5rZ2JfZW5kX2dyb3VwKCk7IH0KICAgICAgICAgICAgICAgICAgICAkc2VsZi0+a2diX2FkZF90b19ncm91cCggJGksICR0b2tlbiwgJGxldmVsICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFRoaXMgaXMgbm90IG9uZSBvZiBvdXIga2V5d29yZHMsIGJ1dCB3ZSBhcmUgaW4gYSBrZXl3b3JkIGdyb3VwCiAgICAgICAgICAgICMgc28gc2VlIGlmIHdlIHNob3VsZCBjb250aW51ZSBvciBxdWl0CiAgICAgICAgICAgIGVsc2lmICggJGliZWcgPj0gMCApIHsKCiAgICAgICAgICAgICAgICAjIC0gYmFpbCBvdXQgb24gYSBsYXJnZSBsZXZlbCBjaGFuZ2U7IHdlIG1heSBoYXZlIHdhbGtlZCBpbnRvIGEKICAgICAgICAgICAgICAgICMgICBkYXRhIHN0cnVjdHVyZSBvciBhbm9ueW1vdXMgc3ViIGNvZGUuCiAgICAgICAgICAgICAgICBpZiAoICRsZXZlbCA+ICRsZXZlbF9iZWcgKyAxIHx8ICRsZXZlbCA8ICRsZXZlbF9iZWcgKSB7CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPmtnYl9lbmRfZ3JvdXAoMSk7CiAgICAgICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIC0ga2VlcCBnb2luZyBvbiBhIGNvbnRpbnVhdGlvbiBsaW5lIG9mIHRoZSBzYW1lIGxldmVsLCBzaW5jZQogICAgICAgICAgICAgICAgIyAgIGl0IGlzIHByb2JhYmx5IGEgY29udGludWF0aW9uIG9mIG91ciBwcmV2aW91cyBrZXl3b3JkLAogICAgICAgICAgICAgICAgIyAtIGFuZCBrZWVwIGdvaW5nIHBhc3QgaGFuZ2luZyBzaWRlIGNvbW1lbnRzIGJlY2F1c2Ugd2UgbmV2ZXIKICAgICAgICAgICAgICAgICMgICB3YW50IHRvIGludGVycnVwdCB0aGVtLgogICAgICAgICAgICAgICAgaWYgKCAoICggJGxldmVsID09ICRsZXZlbF9iZWcgKSAmJiAkY2lfbGV2ZWwgPiAwICkKICAgICAgICAgICAgICAgICAgICB8fCAkQ09ERV90eXBlIGVxICdIU0MnICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkaWVuZCA9ICRpOwogICAgICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyAtIGNvbnRpbnVlIGlmIGlmIHdlIGFyZSB3aXRoaW4gaW4gYSBjb250YWluZXIgd2hpY2ggc3RhcnRlZAogICAgICAgICAgICAgICAgIyB3aXRoIHRoZSBsaW5lIG9mIHRoZSBwcmV2aW91cyBrZXl3b3JkLgogICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRLX2Nsb3NpbmcpICYmICRLX2ZpcnN0IDw9ICRLX2Nsb3NpbmcgKSB7CgogICAgICAgICAgICAgICAgICAgICMgY29udGludWUgaWYgZW50aXJlIGxpbmUgaXMgd2l0aGluIGNvbnRhaW5lcgogICAgICAgICAgICAgICAgICAgIGlmICggJEtfbGFzdCA8PSAkS19jbG9zaW5nICkgeyAkaWVuZCA9ICRpOyBuZXh0IH0KCiAgICAgICAgICAgICAgICAgICAgIyBjb250aW51ZSBhdCApOyBvciB9OyBvciBdOwogICAgICAgICAgICAgICAgICAgIG15ICRLSyA9ICRLX2Nsb3NpbmcgKyAxOwogICAgICAgICAgICAgICAgICAgIGlmICggJHJMTC0+WyRLS10tPltfVFlQRV9dIGVxICc7JyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkS0sgPCAkS19sYXN0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkckxMLT5bICsrJEtLIF0tPltfVFlQRV9dIGVxICdiJyApIHsgKyskS0sgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkS0sgPiAkS19sYXN0IHx8ICRyTEwtPlskS0tdLT5bX1RZUEVfXSBuZSAnIycgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5rZ2JfZW5kX2dyb3VwKDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJGllbmQgPSAkaTsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRzZWxmLT5rZ2JfZW5kX2dyb3VwKDEpOwogICAgICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyAtIGVuZCB0aGUgZ3JvdXAgaWYgbm9uZSBvZiB0aGUgYWJvdmUKICAgICAgICAgICAgICAgICRzZWxmLT5rZ2JfZW5kX2dyb3VwKCk7CiAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIG5vdCBpbiBhIGtleXdvcmQgZ3JvdXA7IGNvbnRpbnVlCiAgICAgICAgICAgIGVsc2UgeyBuZXh0IH0KICAgICAgICB9ICMjIGVuZCBvZiBsb29wIG92ZXIgYWxsIGxpbmVzCgogICAgICAgICRzZWxmLT5rZ2JfZW5kX2dyb3VwKCk7CiAgICAgICAgcmV0dXJuICRyaGFzaF9vZl9kZXNpcmVzOwoKICAgIH0gIyMgZW5kIHN1YiBrZXl3b3JkX2dyb3VwX3NjYW4KfSAjIyBlbmQgY2xvc3VyZSBrZXl3b3JkX2dyb3VwX3NjYW4KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIENPREUgU0VDVElPTiA3OiBQcm9jZXNzIGxpbmVzIG9mIGNvZGUKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgp7ICAgICMjIGJlZ2luIGNsb3N1cmUgcHJvY2Vzc19saW5lX29mX0NPREUKCiAgICAjIFRoZSByb3V0aW5lcyBpbiB0aGlzIGNsb3N1cmUgcmVjZWl2ZSBsaW5lcyBvZiBjb2RlIGFuZCBjb21iaW5lIHRoZW0gaW50bwogICAgIyAnYmF0Y2hlcycgYW5kIHNlbmQgdGhlbSBhbG9uZy4gQSAnYmF0Y2gnIGlzIHRoZSB1bml0IG9mIGNvZGUgd2hpY2ggY2FuIGJlCiAgICAjIHByb2Nlc3NlZCBmdXJ0aGVyIGFzIGEgdW5pdC4gSXQgaGFzIHRoZSBwcm9wZXJ0eSB0aGF0IGl0IGlzIHRoZSBsYXJnZXN0CiAgICAjIGFtb3VudCBvZiBjb2RlIGludG8gd2hpY2ggd2hpY2ggcGVybHRpZHkgaXMgZnJlZSB0byBwbGFjZSBvbmUgb3IgbW9yZQogICAgIyBsaW5lIGJyZWFrcyB3aXRoaW4gaXQgd2l0aG91dCB2aW9sYXRpbmcgYW55IGNvbnN0cmFpbnRzLgoKICAgICMgV2hlbiBhIG5ldyBiYXRjaCBpcyBmb3JtZWQgaXQgaXMgc2VudCB0byBzdWIgJ2dyaW5kX2JhdGNoX29mX2NvZGUnLgoKICAgICMgZmxhZ3MgbmVlZGVkIGJ5IHRoZSBzdG9yZSByb3V0aW5lCiAgICBteSAkbGluZV9vZl90b2tlbnM7CiAgICBteSAkbm9faW50ZXJuYWxfbmV3bGluZXM7CiAgICBteSAkQ09ERV90eXBlOwogICAgbXkgJGN1cnJlbnRfbGluZV9zdGFydHNfaW5fcXVvdGU7CgogICAgIyByYW5nZSBvZiBLIG9mIHRva2VucyBmb3IgdGhlIGN1cnJlbnQgbGluZQogICAgbXkgKCAkS19maXJzdCwgJEtfbGFzdCApOwoKICAgIG15ICggJHJMTCwgJHJhZGp1c3RlZF9sZXZlbHMsICRycGFyZW50X29mX3NlcW5vLCAkcmRlcHRoX29mX29wZW5pbmdfc2Vxbm8sCiAgICAgICAgJHJibG9ja190eXBlX29mX3NlcW5vLCAkcmlfc3RhcnRpbmdfb25lX2xpbmVfYmxvY2sgKTsKCiAgICAjIHBhc3Qgc3RvcmVkIG5vbmJsYW5rIHRva2VucyBhbmQgZmxhZ3MKICAgIG15ICgKICAgICAgICAkS19sYXN0X25vbmJsYW5rX2NvZGUsICAgICAgICRLX2RhbmdsaW5nX2Vsc2lmLAogICAgICAgICRpc19zdGF0aWNfYmxvY2tfY29tbWVudCwgICAgJGxhc3RfQ09ERV90eXBlLAogICAgICAgICRsYXN0X2xpbmVfaGFkX3NpZGVfY29tbWVudCwgJG5leHRfcGFyZW50X3NlcW5vLAogICAgICAgICRuZXh0X3NsZXZlbCwKICAgICk7CgogICAgIyBDYWxsZWQgb25jZSBhdCB0aGUgc3RhcnQgb2YgYSBuZXcgZmlsZQogICAgc3ViIGluaXRpYWxpemVfcHJvY2Vzc19saW5lX29mX0NPREUgewogICAgICAgICRLX2xhc3Rfbm9uYmxhbmtfY29kZSAgICAgICA9IHVuZGVmOwogICAgICAgICRLX2RhbmdsaW5nX2Vsc2lmICAgICAgICAgICA9IDA7CiAgICAgICAgJGlzX3N0YXRpY19ibG9ja19jb21tZW50ICAgID0gMDsKICAgICAgICAkbGFzdF9saW5lX2hhZF9zaWRlX2NvbW1lbnQgPSAwOwogICAgICAgICRuZXh0X3BhcmVudF9zZXFubyAgICAgICAgICA9IFNFUV9ST09UOwogICAgICAgICRuZXh0X3NsZXZlbCAgICAgICAgICAgICAgICA9IHVuZGVmOwogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBpbml0aWFsaXplX3Byb2Nlc3NfbGluZV9vZl9DT0RFCgogICAgIyBCYXRjaCB2YXJpYWJsZXM6IHRoZXNlIGRlc2NyaWJlIHRoZSBjdXJyZW50IGJhdGNoIG9mIGNvZGUgYmVpbmcgZm9ybWVkCiAgICAjIGFuZCBzZW50IGRvd24gdGhlIHBpcGVsaW5lLiAgVGhleSBhcmUgaW5pdGlhbGl6ZWQgaW4gdGhlIG5leHQKICAgICMgc3ViLgogICAgbXkgKAogICAgICAgICRyYnJhY2VfZm9sbG93ZXIsICAgJGluZGV4X3N0YXJ0X29uZV9saW5lX2Jsb2NrLAogICAgICAgICRzdGFydGluZ19pbl9xdW90ZSwgJGVuZGluZ19pbl9xdW90ZSwKICAgICk7CgogICAgIyBDYWxsZWQgYmVmb3JlIHRoZSBzdGFydCBvZiBlYWNoIG5ldyBiYXRjaAogICAgc3ViIGluaXRpYWxpemVfYmF0Y2hfdmFyaWFibGVzIHsKCiAgICAgICAgIyBJbml0aWFsaXplIGFycmF5IHZhbHVlcyBmb3IgYSBuZXcgYmF0Y2guICBBbnkgY2hhbmdlcyBoZXJlIG11c3QgYmUKICAgICAgICAjIGNhcmVmdWxseSBjb29yZGluYXRlZCB3aXRoIHN1YiBzdG9yZV90b2tlbl90b19nby4KCiAgICAgICAgJG1heF9pbmRleF90b19nbyAgICAgICAgICAgID0gVU5ERUZJTkVEX0lOREVYOwogICAgICAgICRzdW1tZWRfbGVuZ3Roc190b19nb1swXSAgICA9IDA7CiAgICAgICAgJG5lc3RpbmdfZGVwdGhfdG9fZ29bMF0gICAgID0gMDsKICAgICAgICAkcmlfc3RhcnRpbmdfb25lX2xpbmVfYmxvY2sgPSBbXTsKCiAgICAgICAgIyBSZWRlZmluZSBzb21lIHNwYXJzZSBhcnJheXMuCiAgICAgICAgIyBJdCBpcyBtb3JlIGVmZmljaWVudCB0byByZWRlZmluZSB0aGVzZSBzcGFyc2UgYXJyYXlzIGFuZCByZWx5IG9uCiAgICAgICAgIyB1bmRlZidzIGluc3RlYWQgb2YgaW5pdGlhbGl6aW5nIHRvIDAncy4gIFRlc3Rpbmcgc2hvd2VkIHRoYXQgdXNpbmcKICAgICAgICAjIEBhcnJheT0oKSBpcyBtb3JlIGVmZmljaWVudCB0aGFuICQjYXJyYXk9LTEKCiAgICAgICAgQG9sZF9icmVha3BvaW50X3RvX2dvICAgID0gKCk7CiAgICAgICAgQGZvcmNlZF9icmVha3BvaW50X3RvX2dvID0gKCk7CiAgICAgICAgQGJsb2NrX3R5cGVfdG9fZ28gICAgICAgID0gKCk7CiAgICAgICAgQG1hdGVfaW5kZXhfdG9fZ28gICAgICAgID0gKCk7CiAgICAgICAgQHR5cGVfc2VxdWVuY2VfdG9fZ28gICAgID0gKCk7CgogICAgICAgICMgTk9URTogQG5vYnJlYWtfdG9fZ28gaXMgc3BhcnNlIGFuZCBjb3VsZCBiZSB0cmVhdGVkIHRoaXMgd2F5LCBidXQKICAgICAgICAjIHRlc3Rpbmcgc2hvd2VkIHRoYXQgdGhlcmUgd291bGQgYmUgdmVyeSBsaXR0bGUgZWZmaWNpZW5jeSBnYWluCiAgICAgICAgIyBiZWNhdXNlIGFuICdpZicgdGVzdCBtdXN0IGJlIGFkZGVkIGluIHN0b3JlX3Rva2VuX3RvX2dvLgoKICAgICAgICAjIFRoZSBpbml0aWFsaXphdGlvbiBjb2RlIGZvciB0aGUgcmVtYWluaW5nIGJhdGNoIGFycmF5cyBpcyBhcyBmb2xsb3dzCiAgICAgICAgIyBhbmQgY2FuIGJlIGFjdGl2YXRlZCBmb3IgdGVzdGluZy4gIEJ1dCBwcm9maWxpbmcgc2hvd3MgdGhhdCBpdCBpcwogICAgICAgICMgdGltZS1jb25zdW1pbmcgdG8gcmUtaW5pdGlhbGl6ZSB0aGUgYmF0Y2ggYXJyYXlzIGFuZCBpcyBub3QgbmVjZXNzYXJ5CiAgICAgICAgIyBiZWNhdXNlIHRoZSBtYXhpbXVtIHZhbGlkIHRva2VuLCAkbWF4X2luZGV4X3RvX2dvLCBpcyBjYXJlZnVsbHkKICAgICAgICAjIGNvbnRyb2xsZWQuICBUaGlzIG1lYW5zIGhvd2V2ZXIgdGhhdCBpdCBpcyBub3QgcG9zc2libGUgdG8gZG8gYW55CiAgICAgICAgIyB0eXBlIG9mIGZpbHRlciBvciBtYXAgb3BlcmF0aW9uIGRpcmVjdGx5IG9uIHRoZXNlIGFycmF5cy4gIEFuZCBpdCBpcwogICAgICAgICMgbm90IHBvc3NpYmxlIHRvIHVzZSBuZWdhdGl2ZSBpbmRleGVzLiBBcyBhIHByZWNhdXRpb24gYWdhaW5zdCBwcm9ncmFtCiAgICAgICAgIyBjaGFuZ2VzIHdoaWNoIG1pZ2h0IGRvIHRoaXMsIHN1YiBwYWRfYXJyYXlfdG9fZ28gYWRkcyBzb21lIHVuZGVmcyBhdAogICAgICAgICMgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBiYXRjaCBvZiBkYXRhLgoKICAgICAgICAjIyAwICYmIGRvIHsgIzw8PAogICAgICAgICMjIEBub2JyZWFrX3RvX2dvICAgICAgICAgICA9ICgpOwogICAgICAgICMjIEB0b2tlbl9sZW5ndGhzX3RvX2dvICAgICA9ICgpOwogICAgICAgICMjIEBsZXZlbHNfdG9fZ28gICAgICAgICAgICA9ICgpOwogICAgICAgICMjIEBjaV9sZXZlbHNfdG9fZ28gICAgICAgICA9ICgpOwogICAgICAgICMjIEB0b2tlbnNfdG9fZ28gICAgICAgICAgICA9ICgpOwogICAgICAgICMjIEBLX3RvX2dvICAgICAgICAgICAgICAgICA9ICgpOwogICAgICAgICMjIEB0eXBlc190b19nbyAgICAgICAgICAgICA9ICgpOwogICAgICAgICMjIEBsZWFkaW5nX3NwYWNlc190b19nbyAgICA9ICgpOwogICAgICAgICMjIEByZWR1Y2VkX3NwYWNlc190b19nbyAgICA9ICgpOwogICAgICAgICMjIEBpbmV4dF90b19nbyAgICAgICAgICAgICA9ICgpOwogICAgICAgICMjIEBwYXJlbnRfc2Vxbm9fdG9fZ28gICAgICA9ICgpOwogICAgICAgICMjIH07CgogICAgICAgICRyYnJhY2VfZm9sbG93ZXIgPSB1bmRlZjsKICAgICAgICAkZW5kaW5nX2luX3F1b3RlID0gMDsKCiAgICAgICAgJGluZGV4X3N0YXJ0X29uZV9saW5lX2Jsb2NrID0gdW5kZWY7CgogICAgICAgICMgaW5pdGlhbGl6ZSBmb3JjZWQgYnJlYWtwb2ludCB2YXJzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIG91dHB1dCBiYXRjaAogICAgICAgICRmb3JjZWRfYnJlYWtwb2ludF9jb3VudCAgICAgID0gMDsKICAgICAgICAkaW5kZXhfbWF4X2ZvcmNlZF9icmVhayAgICAgICA9IFVOREVGSU5FRF9JTkRFWDsKICAgICAgICAkZm9yY2VkX2JyZWFrcG9pbnRfdW5kb19jb3VudCA9IDA7CgogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBpbml0aWFsaXplX2JhdGNoX3ZhcmlhYmxlcwoKICAgIHN1YiBsZWFkaW5nX3NwYWNlc190b19nbyB7CgogICAgICAgIG15ICgkaWkpID0gQF87CgogICAgICAgICMgUmV0dXJuIHRoZSBudW1iZXIgb2YgaW5kZW50YXRpb24gc3BhY2VzIGZvciB0b2tlbiBhdCBpbmRleCAkaWkKICAgICAgICAjIGluIHRoZSBvdXRwdXQgc3RyZWFtCgogICAgICAgIHJldHVybiAwIGlmICggJGlpIDwgMCApOwogICAgICAgIG15ICRpbmRlbnRhdGlvbiA9ICRsZWFkaW5nX3NwYWNlc190b19nb1skaWldOwogICAgICAgIHJldHVybiByZWYoJGluZGVudGF0aW9uKSA/ICRpbmRlbnRhdGlvbi0+Z2V0X3NwYWNlcygpIDogJGluZGVudGF0aW9uOwogICAgfSAjIyBlbmQgc3ViIGxlYWRpbmdfc3BhY2VzX3RvX2dvCgogICAgc3ViIGNyZWF0ZV9vbmVfbGluZV9ibG9jayB7CgogICAgICAgICMgbm90ZSB0aGF0IHRoaXMgdXBkYXRlcyBhIGNsb3N1cmUgdmFyaWFibGUKICAgICAgICAkaW5kZXhfc3RhcnRfb25lX2xpbmVfYmxvY2sgPSBzaGlmdDsKCiAgICAgICAgIyBTZXQgaW5kZXggc3RhcnRpbmcgbmV4dCBvbmUtbGluZSBibG9jawogICAgICAgICMgR2l2ZW46CiAgICAgICAgIyAgICRpbmRleF9zdGFydF9vbmVfbGluZV9ibG9jayA9IHN0YXJ0aW5nIGluZGV4IGluIF90b19nbyBhcnJheQogICAgICAgICMgICB1bmRlZiA9PiBlbmQgY3VycmVudCBvbmUtbGluZSBibG9jawogICAgICAgICMKICAgICAgICAjIGNhbGwgd2l0aCBubyBhcmdzIHRvIGRlbGV0ZSB0aGUgY3VycmVudCBvbmUtbGluZSBibG9jawogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBjcmVhdGVfb25lX2xpbmVfYmxvY2sKCiAgICAjIFJvdXRpbmUgdG8gcGxhY2UgdGhlIGN1cnJlbnQgdG9rZW4gaW50byB0aGUgb3V0cHV0IHN0cmVhbS4KICAgICMgQ2FsbGVkIG9uY2UgcGVyIG91dHB1dCB0b2tlbi4KCiAgICB1c2UgY29uc3RhbnQgREVCVUdfU1RPUkUgPT4gMDsKCiAgICBzdWIgc3RvcmVfdG9rZW5fdG9fZ28gewoKICAgICAgICBteSAoICRzZWxmLCAkS3Rva2VuX3ZhcnMsICRydG9rZW5fdmFycyApID0gQF87CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBUb2tlbiBzdG9yYWdlIHV0aWxpdHkgZm9yIHN1YiBwcm9jZXNzX2xpbmVfb2ZfQ09ERS4KICAgICAgICAjIEFkZCBvbmUgdG9rZW4gdG8gdGhlIG5leHQgYmF0Y2ggb2YgJ190b19nbycgdmFyaWFibGVzLgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICMgSW5wdXQgcGFyYW1ldGVyczoKICAgICAgICAjICAgJEt0b2tlbl92YXJzID0gdGhlIGluZGV4IEsgaW4gdGhlIGdsb2JhbCB0b2tlbiBhcnJheQogICAgICAgICMgICAkcnRva2VuX3ZhcnMgPSAkckxMLT5bJEt0b2tlbl92YXJzXSA9IHRoZSBjb3JyZXNwb25kaW5nIHRva2VuIHZhbHVlcwogICAgICAgICMgICAgICAgICAgICAgICAgICB1bmxlc3MgdGhleSBhcmUgdGVtcG9yYXJpbHkgYmVpbmcgb3ZlcnJpZGRlbgoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBOT1RFOiBjYWxsZWQgb25jZSBwZXIgdG9rZW4gc28gY29kaW5nIGVmZmljaWVuY3kgaXMgY3JpdGljYWwgaGVyZS4KICAgICAgICAjIEFsbCBjaGFuZ2VzIG5lZWQgdG8gYmUgYmVuY2htYXJrZWQgd2l0aCBEZXZlbDo6TllUUHJvZi4KICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgIG15ICgKCiAgICAgICAgICAgICR0eXBlLAogICAgICAgICAgICAkdG9rZW4sCiAgICAgICAgICAgICRjaV9sZXZlbCwKICAgICAgICAgICAgJGxldmVsLAogICAgICAgICAgICAkc2Vxbm8sCiAgICAgICAgICAgICRsZW5ndGgsCgogICAgICAgICAgKSA9IEB7JHJ0b2tlbl92YXJzfVsKCiAgICAgICAgICBfVFlQRV8sCiAgICAgICAgICBfVE9LRU5fLAogICAgICAgICAgX0NJX0xFVkVMXywKICAgICAgICAgIF9MRVZFTF8sCiAgICAgICAgICBfVFlQRV9TRVFVRU5DRV8sCiAgICAgICAgICBfVE9LRU5fTEVOR1RIXywKCiAgICAgICAgICBdOwoKICAgICAgICAjIENoZWNrIGZvciBlbWVyZ2VuY3kgZmx1c2guLi4KICAgICAgICAjIFRoZSBLIGluZGV4ZXMgaW4gdGhlIGJhdGNoIG11c3QgYWx3YXlzIGJlIGEgY29udGludW91cyBzZXF1ZW5jZSBvZgogICAgICAgICMgdGhlIGdsb2JhbCB0b2tlbiBhcnJheS4gIFRoZSBiYXRjaCBwcm9jZXNzIHByb2dyYW1taW5nIGFzc3VtZXMgdGhpcy4KICAgICAgICAjIElmIHN0b3JpbmcgdGhpcyB0b2tlbiB3b3VsZCBjYXVzZSB0aGlzIHJlbGF0aW9uIHRvIGZhaWwgd2UgbXVzdCBkdW1wCiAgICAgICAgIyB0aGUgY3VycmVudCBiYXRjaCBiZWZvcmUgc3RvcmluZyB0aGUgbmV3IHRva2VuLiAgSXQgaXMgZXh0cmVtZWx5IHJhcmUKICAgICAgICAjIGZvciB0aGlzIHRvIGhhcHBlbi4gT25lIGtub3duIGV4YW1wbGUgaXMgdGhlIGZvbGxvd2luZyB0d28tbGluZQogICAgICAgICMgc25pcHBldCB3aGVuIHJ1biB3aXRoIHBhcmFtZXRlcnMKICAgICAgICAjIC0tbm9hZGQtbmV3bGluZXMgIC0tc3BhY2UtdGVybWluYWwtc2VtaWNvbG9uOgogICAgICAgICMgICAgaWYgKCAkXyA9fiAvUEVOQ0lMLyApIHsgJHBlbmNpbF9mbGFnPSAxIH0gOyA7CiAgICAgICAgIyAgICAkeXk9MTsKICAgICAgICBpZiAoICRtYXhfaW5kZXhfdG9fZ28gPj0gMCApIHsKICAgICAgICAgICAgaWYgKCAkS3Rva2VuX3ZhcnMgIT0gJEtfdG9fZ29bJG1heF9pbmRleF90b19nb10gKyAxICkgewogICAgICAgICAgICAgICAgJHNlbGYtPmZsdXNoX2JhdGNoX29mX0NPREUoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBEbyBub3Qgb3V0cHV0IGNvbnNlY3V0aXZlIGJsYW5rIHRva2VucyAuLi4gdGhpcyBzaG91bGQgbm90CiAgICAgICAgICAgICMgaGFwcGVuLCBidXQgaXQgaXMgd29ydGggY2hlY2tpbmcuICBMYXRlciBjb2RlIGNhbiB0aGVuIG1ha2UgdGhlCiAgICAgICAgICAgICMgc2ltcGxpZnlpbmcgYXNzdW1wdGlvbiB0aGF0IGJsYW5rIHRva2VucyBhcmUgbm90IGNvbnNlY3V0aXZlLgogICAgICAgICAgICBlbHNpZiAoICR0eXBlIGVxICdiJyAmJiAkdHlwZXNfdG9fZ29bJG1heF9pbmRleF90b19nb10gZXEgJ2InICkgewoKICAgICAgICAgICAgICAgIGlmIChERVZFTF9NT0RFKSB7CgogICAgICAgICAgICAgICAgICAgICMgaWYgdGhpcyBoYXBwZW5zLCBpdCBpcyBtYXkgYmUgdGhhdCBjb25zZWN1dGl2ZSBibGFua3MKICAgICAgICAgICAgICAgICAgICAjIHdlcmUgaW5zZXJ0ZWQgaW50byB0aGUgdG9rZW4gc3RyZWFtIGluICdyZXNwYWNlX3Rva2VucycKICAgICAgICAgICAgICAgICAgICBteSAkbG5vID0gJHJMTC0+WyRLdG9rZW5fdmFyc10tPltfTElORV9JTkRFWF9dICsgMTsKICAgICAgICAgICAgICAgICAgICBGYXVsdCgiY29uc2VjdXRpdmUgYmxhbmtzIG5lYXIgbGluZSAkbG5vOyBwbGVhc2UgZml4Iik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAjIyBhbGwgb2sKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBEbyBub3Qgc3RhcnQgYSBiYXRjaCB3aXRoIGEgYmxhbmsgdG9rZW4uCiAgICAgICAgIyBGaXhlcyBjYXNlcyBiMTQ5IGI4ODggYjk4NCBiOTg1IGI5ODYgYjk4NwogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAoICR0eXBlIGVxICdiJyApIHsgcmV0dXJuIH0KICAgICAgICB9CgogICAgICAgICMgVXBkYXRlIGNvdW50ZXIgYW5kIGRvIGluaXRpYWxpemF0aW9ucyBpZiBmaXJzdCB0b2tlbiBvZiBuZXcgYmF0Y2gKICAgICAgICBpZiAoICErKyRtYXhfaW5kZXhfdG9fZ28gKSB7CgogICAgICAgICAgICAjIFJlc2V0IGZsYWcgJyRzdGFydGluZ19pbl9xdW90ZScgZm9yIGEgbmV3IGJhdGNoLiAgSXQgbXVzdCBiZSBzZXQKICAgICAgICAgICAgIyB0byB0aGUgdmFsdWUgb2YgJyRpbl9jb250aW51ZWRfcXVvdGUnLCBidXQgaGVyZSBmb3IgZWZmaWNpZW5jeSB3ZQogICAgICAgICAgICAjIHNldCBpdCB0byB6ZXJvLCB3aGljaCBpcyBpdHMgbm9ybWFsIHZhbHVlLiBUaGVuIGluIGNvZGluZyBiZWxvdwogICAgICAgICAgICAjIHdlIHdpbGwgY2hhbmdlIGl0IGlmIHdlIGZpbmQgd2UgYXJlIGFjdHVhbGx5IGluIGEgY29udGludWVkIHF1b3RlLgogICAgICAgICAgICAkc3RhcnRpbmdfaW5fcXVvdGUgPSAwOwoKICAgICAgICAgICAgIyBVcGRhdGUgdGhlIG5leHQgcGFyZW50IHNlcXVlbmNlIG51bWJlciBmb3IgZWFjaCBuZXcgYmF0Y2guCgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIEJlZ2luIGNvZGluZyBmcm9tIHN1YiBwYXJlbnRfc2Vxbm9fYnlfSwogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAgICAgIyBUaGUgZm9sbG93aW5nIGlzIGVxdWl2YWxlbnQgdG8gdGhpcyBjYWxsIGJ1dCBtdWNoIGZhc3RlcjoKICAgICAgICAgICAgIyAgICAkbmV4dF9wYXJlbnRfc2Vxbm8gPSAkc2VsZi0+cGFyZW50X3NlcW5vX2J5X0soJEt0b2tlbl92YXJzKTsKCiAgICAgICAgICAgICRuZXh0X3BhcmVudF9zZXFubyA9IFNFUV9ST09UOwogICAgICAgICAgICBpZiAoJHNlcW5vKSB7CiAgICAgICAgICAgICAgICAkbmV4dF9wYXJlbnRfc2Vxbm8gPSAkcnBhcmVudF9vZl9zZXFuby0+eyRzZXFub307CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBteSAkS3QgPSAkc2VsZi0+W19yS19uZXh0X3NlcW5vX2J5X0tfXS0+WyRLdG9rZW5fdmFyc107CiAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQoJEt0KSApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBpZiBuZXh0IGNvbnRhaW5lciB0b2tlbiBpcyBjbG9zaW5nLCBpdCBpcyB0aGUgcGFyZW50IHNlcW5vCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkaXNfY2xvc2luZ190eXBleyAkckxMLT5bJEt0XS0+W19UWVBFX10gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG5leHRfcGFyZW50X3NlcW5vID0gJHJMTC0+WyRLdF0tPltfVFlQRV9TRVFVRU5DRV9dOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBvdGhlcndpc2Ugd2Ugd2FudCBpdHMgcGFyZW50IGNvbnRhaW5lcgogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkbmV4dF9wYXJlbnRfc2Vxbm8gPQogICAgICAgICAgICAgICAgICAgICAgICAgICRycGFyZW50X29mX3NlcW5vLT57ICRyTEwtPlskS3RdLT5bX1RZUEVfU0VRVUVOQ0VfXSB9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkbmV4dF9wYXJlbnRfc2Vxbm8gPSBTRVFfUk9PVAogICAgICAgICAgICAgIGlmICggIWRlZmluZWQoJG5leHRfcGFyZW50X3NlcW5vKSApOwoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgRW5kIGNvZGluZyBmcm9tIHN1YiBwYXJlbnRfc2Vxbm9fYnlfSwogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgICAgICRuZXh0X3NsZXZlbCA9ICRyZGVwdGhfb2Zfb3BlbmluZ19zZXFuby0+WyRuZXh0X3BhcmVudF9zZXFub10gKyAxOwogICAgICAgIH0KCiAgICAgICAgIyBTYWZldHkgY2hlY2sgdGhhdCBsZW5ndGggaXMgZGVmaW5lZC4gVGhpcyBpcyBzbG93IGFuZCBzaG91bGQgbm90IGJlCiAgICAgICAgIyBuZWVkZWQgbm93LCBzbyBqdXN0IGRvIGl0IGluIERFVkVMX01PREUgdG8gY2hlY2sgcHJvZ3JhbW1pbmcgY2hhbmdlcy4KICAgICAgICAjIEZvcm1lcmx5IG5lZWRlZCBmb3IgLS1pbmRlbnQtb25seSwgaW4gd2hpY2ggdGhlIGVudGlyZSBzZXQgb2YgdG9rZW5zCiAgICAgICAgIyBpcyBub3JtYWxseSB0dXJuZWQgaW50byB0eXBlICdxJy4gTGVuZ3RocyBhcmUgbm93IGRlZmluZWQgaW4gc3ViCiAgICAgICAgIyAncmVzcGFjZV90b2tlbnMnIHNvIHRoaXMgY2hlY2sgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KICAgICAgICBpZiAoIERFVkVMX01PREUgJiYgIWRlZmluZWQoJGxlbmd0aCkgKSB7CiAgICAgICAgICAgIG15ICRsbm8gPSAkckxMLT5bJEt0b2tlbl92YXJzXS0+W19MSU5FX0lOREVYX10gKyAxOwogICAgICAgICAgICAkbGVuZ3RoID0gbGVuZ3RoKCR0b2tlbik7CiAgICAgICAgICAgIEZhdWx0KDw8RU9NKTsKdW5kZWZpbmVkIGxlbmd0aCBuZWFyIGxpbmUgJGxubzsgbnVtIGNoYXJzPSRsZW5ndGgsIHRva2VuPSckdG9rZW4nCkVPTQogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIGFkZCB0aGlzIHRva2VuIHRvIHRoZSBiYXRjaAogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgJEtfdG9fZ29bJG1heF9pbmRleF90b19nb10gICAgICAgICAgICAgPSAkS3Rva2VuX3ZhcnM7CiAgICAgICAgJHR5cGVzX3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dICAgICAgICAgPSAkdHlwZTsKICAgICAgICAkdG9rZW5zX3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dICAgICAgICA9ICR0b2tlbjsKICAgICAgICAkY2lfbGV2ZWxzX3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dICAgICA9ICRjaV9sZXZlbDsKICAgICAgICAkbGV2ZWxzX3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dICAgICAgICA9ICRsZXZlbDsKICAgICAgICAkbm9icmVha190b19nb1skbWF4X2luZGV4X3RvX2dvXSAgICAgICA9ICRub19pbnRlcm5hbF9uZXdsaW5lczsKICAgICAgICAkdG9rZW5fbGVuZ3Roc190b19nb1skbWF4X2luZGV4X3RvX2dvXSA9ICRsZW5ndGg7CgogICAgICAgICMgU2tpcCBwb2ludCBpbml0aWFsaXphdGlvbiBmb3IgdGhlc2Ugc3BhcnNlIGFycmF5cyAtIHVuZGVmJ3Mgb2theTsKICAgICAgICAjIFNlZSBhbHNvIHJlbGF0ZWQgY29kZSBpbiBzdWIgaW5pdGlhbGl6ZV9iYXRjaF92YXJpYWJsZXMuCiAgICAgICAgIyMgJG9sZF9icmVha3BvaW50X3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dICAgID0gMDsKICAgICAgICAjIyAkZm9yY2VkX2JyZWFrcG9pbnRfdG9fZ29bJG1heF9pbmRleF90b19nb10gPSAwOwogICAgICAgICMjICRibG9ja190eXBlX3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dICAgICAgICA9IEVNUFRZX1NUUklORzsKICAgICAgICAjIyAkdHlwZV9zZXF1ZW5jZV90b19nb1skbWF4X2luZGV4X3RvX2dvXSAgICAgPSAkc2Vxbm87CgogICAgICAgICMgTk9URTogIG5vYnJlYWtfdG9fZ28gY2FuIGJlIHRyZWF0ZWQgYXMgYSBzcGFyc2UgYXJyYXksIGJ1dCB0ZXN0aW5nCiAgICAgICAgIyBzaG93ZWQgdGhhdCB0aGVyZSBpcyBhbG1vc3Qgbm8gZWZmaWNpZW5jeSBnYWluIGJlY2F1c2UgYW4gaWYgdGVzdAogICAgICAgICMgd291bGQgbmVlZCB0byBiZSBhZGRlZC4KCiAgICAgICAgIyBXZSBrZWVwIGEgcnVubmluZyBzdW0gb2YgdG9rZW4gbGVuZ3RocyBmcm9tIHRoZSBzdGFydCBvZiB0aGlzIGJhdGNoOgogICAgICAgICMgICBzdW1tZWRfbGVuZ3Roc190b19nb1skaV0gICA9IHRvdGFsIGxlbmd0aCB0byBqdXN0IGJlZm9yZSB0b2tlbiAkaQogICAgICAgICMgICBzdW1tZWRfbGVuZ3Roc190b19nb1skaSsxXSA9IHRvdGFsIGxlbmd0aCB0byBqdXN0IGFmdGVyIHRva2VuICRpCiAgICAgICAgJHN1bW1lZF9sZW5ndGhzX3RvX2dvWyAkbWF4X2luZGV4X3RvX2dvICsgMSBdID0KICAgICAgICAgICRzdW1tZWRfbGVuZ3Roc190b19nb1skbWF4X2luZGV4X3RvX2dvXSArICRsZW5ndGg7CgogICAgICAgICMgSW5pdGlhbGl6ZSBzb21lIHNlcXVlbmNlLWRlcGVuZGVudCB2YXJpYWJsZXMgdG8gdGhlaXIgbm9ybWFsIHZhbHVlcwogICAgICAgICRwYXJlbnRfc2Vxbm9fdG9fZ29bJG1heF9pbmRleF90b19nb10gID0gJG5leHRfcGFyZW50X3NlcW5vOwogICAgICAgICRuZXN0aW5nX2RlcHRoX3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dID0gJG5leHRfc2xldmVsOwoKICAgICAgICAjIFRoZW4gZml4IHRoZW0gYXQgY29udGFpbmVyIHRva2VuczoKICAgICAgICBpZiAoJHNlcW5vKSB7CgogICAgICAgICAgICAkdHlwZV9zZXF1ZW5jZV90b19nb1skbWF4X2luZGV4X3RvX2dvXSA9ICRzZXFubzsKCiAgICAgICAgICAgICRibG9ja190eXBlX3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dID0KICAgICAgICAgICAgICAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8tPnskc2Vxbm99OwoKICAgICAgICAgICAgaWYgKCAkaXNfb3BlbmluZ190b2tlbnskdG9rZW59ICkgewoKICAgICAgICAgICAgICAgIG15ICRzbGV2ZWwgPSAkcmRlcHRoX29mX29wZW5pbmdfc2Vxbm8tPlskc2Vxbm9dOwogICAgICAgICAgICAgICAgJG5lc3RpbmdfZGVwdGhfdG9fZ29bJG1heF9pbmRleF90b19nb10gPSAkc2xldmVsOwogICAgICAgICAgICAgICAgJG5leHRfc2xldmVsID0gJHNsZXZlbCArIDE7CgogICAgICAgICAgICAgICAgJG5leHRfcGFyZW50X3NlcW5vID0gJHNlcW5vOwoKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRpc19jbG9zaW5nX3Rva2VueyR0b2tlbn0gKSB7CgogICAgICAgICAgICAgICAgJG5leHRfc2xldmVsID0gJHJkZXB0aF9vZl9vcGVuaW5nX3NlcW5vLT5bJHNlcW5vXTsKICAgICAgICAgICAgICAgIG15ICRzbGV2ZWwgPSAkbmV4dF9zbGV2ZWwgKyAxOwogICAgICAgICAgICAgICAgJG5lc3RpbmdfZGVwdGhfdG9fZ29bJG1heF9pbmRleF90b19nb10gPSAkc2xldmVsOwoKICAgICAgICAgICAgICAgIG15ICRwYXJlbnRfc2Vxbm8gPSAkcnBhcmVudF9vZl9zZXFuby0+eyRzZXFub307CiAgICAgICAgICAgICAgICAkcGFyZW50X3NlcW5vID0gU0VRX1JPT1QgdW5sZXNzIGRlZmluZWQoJHBhcmVudF9zZXFubyk7CiAgICAgICAgICAgICAgICAkcGFyZW50X3NlcW5vX3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dID0gJHBhcmVudF9zZXFubzsKICAgICAgICAgICAgICAgICRuZXh0X3BhcmVudF9zZXFubyAgICAgICAgICAgICAgICAgICAgPSAkcGFyZW50X3NlcW5vOwoKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICMgdGVybmFyeSB0b2tlbjogbm90aGluZyB0byBkbwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIERlZmluZSB0aGUgaW5kZW50YXRpb24gdGhhdCB0aGlzIHRva2VuIHdpbGwgaGF2ZSBpbiB0d28gY2FzZXM6CiAgICAgICAgIyBXaXRob3V0IENJID0gcmVkdWNlZF9zcGFjZXNfdG9fZ28KICAgICAgICAjIFdpdGggQ0kgICAgPSBsZWFkaW5nX3NwYWNlc190b19nbwogICAgICAgICRsZWFkaW5nX3NwYWNlc190b19nb1skbWF4X2luZGV4X3RvX2dvXSA9CiAgICAgICAgICAkcmVkdWNlZF9zcGFjZXNfdG9fZ29bJG1heF9pbmRleF90b19nb10gPQogICAgICAgICAgJHJPcHRzX2luZGVudF9jb2x1bW5zICogJHJhZGp1c3RlZF9sZXZlbHMtPlskS3Rva2VuX3ZhcnNdOwogICAgICAgIGlmICgkY2lfbGV2ZWwpIHsKICAgICAgICAgICAgJGxlYWRpbmdfc3BhY2VzX3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dICs9CiAgICAgICAgICAgICAgJHJPcHRzX2NvbnRpbnVhdGlvbl9pbmRlbnRhdGlvbjsKICAgICAgICB9CgogICAgICAgICMgQ29ycmVjdCB0aGVzZSB2YWx1ZXMgaWYgd2UgYXJlIHN0YXJ0aW5nIGluIGEgY29udGludWVkIHF1b3RlCiAgICAgICAgaWYgKCAgICRjdXJyZW50X2xpbmVfc3RhcnRzX2luX3F1b3RlCiAgICAgICAgICAgICYmICRLdG9rZW5fdmFycyA9PSAkS19maXJzdCApCiAgICAgICAgewogICAgICAgICAgICAjIGluIGEgY29udGludWVkIHF1b3RlIC0gY29ycmVjdCB2YWx1ZSBzZXQgYWJvdmUgaWYgZmlyc3QgdG9rZW4KICAgICAgICAgICAgaWYgKCAkbWF4X2luZGV4X3RvX2dvID09IDAgKSB7ICRzdGFydGluZ19pbl9xdW90ZSA9IDEgfQoKICAgICAgICAgICAgJGxlYWRpbmdfc3BhY2VzX3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dID0gMDsKICAgICAgICAgICAgJHJlZHVjZWRfc3BhY2VzX3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dID0gMDsKICAgICAgICB9CgogICAgICAgIERFQlVHX1NUT1JFICYmIGRvIHsKICAgICAgICAgICAgbXkgKCAkcGtnLCAkZmlsZV91dSwgJGxubyApID0gY2FsbGVyKCk7CiAgICAgICAgICAgIHByaW50IHsqU1RET1VUfQoiU1RPUkU6IGZyb20gJHBrZyAkbG5vOiBzdG9yaW5nIHRva2VuICR0b2tlbiB0eXBlICR0eXBlIGxldj0kbGV2ZWwgYXQgJG1heF9pbmRleF90b19nb1xuIjsKICAgICAgICB9OwogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBzdG9yZV90b2tlbl90b19nbwoKICAgIHN1YiBmbHVzaF9iYXRjaF9vZl9DT0RFIHsKCiAgICAgICAgbXkgKCRzZWxmKSA9IEBfOwoKICAgICAgICAjIEZpbmlzaCBhbmQgcHJvY2VzcyB0aGUgY3VycmVudCBiYXRjaC4KICAgICAgICAjIFRoaXMgbXVzdCBiZSB0aGUgb25seSBjYWxsIHRvIGdyaW5kX2JhdGNoX29mX0NPREUoKQoKICAgICAgICByZXR1cm4gaWYgKCAkbWF4X2luZGV4X3RvX2dvIDwgMCApOwoKICAgICAgICAjIENyZWF0ZSBhbiBhcnJheSB0byBob2xkIHZhcmlhYmxlcyBmb3IgdGhpcyBiYXRjaAogICAgICAgIG15ICR0aGlzX2JhdGNoID0gJHNlbGYtPltfdGhpc19iYXRjaF9dID0gW107CgogICAgICAgICR0aGlzX2JhdGNoLT5bX3N0YXJ0aW5nX2luX3F1b3RlX10gPSAxIGlmICgkc3RhcnRpbmdfaW5fcXVvdGUpOwogICAgICAgICR0aGlzX2JhdGNoLT5bX2VuZGluZ19pbl9xdW90ZV9dICAgPSAxIGlmICgkZW5kaW5nX2luX3F1b3RlKTsKCiAgICAgICAgaWYgKCAkQ09ERV90eXBlIHx8ICRsYXN0X0NPREVfdHlwZSApIHsKICAgICAgICAgICAgJHRoaXNfYmF0Y2gtPltfYmF0Y2hfQ09ERV90eXBlX10gPQogICAgICAgICAgICAgICAgJEtfdG9fZ29bJG1heF9pbmRleF90b19nb10gPj0gJEtfZmlyc3QKICAgICAgICAgICAgICA/ICRDT0RFX3R5cGUKICAgICAgICAgICAgICA6ICRsYXN0X0NPREVfdHlwZTsKICAgICAgICB9CgogICAgICAgICRsYXN0X2xpbmVfaGFkX3NpZGVfY29tbWVudCA9CiAgICAgICAgICAoICRtYXhfaW5kZXhfdG9fZ28gPiAwICYmICR0eXBlc190b19nb1skbWF4X2luZGV4X3RvX2dvXSBlcSAnIycgKTsKCiAgICAgICAgIyBUaGUgZmxhZyAkaXNfc3RhdGljX2Jsb2NrX2NvbW1lbnQgYXBwbGllcyB0byB0aGUgbGluZSB3aGljaCBqdXN0CiAgICAgICAgIyBhcnJpdmVkLiBTbyBpdCBvbmx5IGFwcGxpZXMgaWYgd2UgYXJlIG91dHB1dHRpbmcgdGhhdCBsaW5lLgogICAgICAgIGlmICggJGlzX3N0YXRpY19ibG9ja19jb21tZW50ICYmICEkbGFzdF9saW5lX2hhZF9zaWRlX2NvbW1lbnQgKSB7CiAgICAgICAgICAgICR0aGlzX2JhdGNoLT5bX2lzX3N0YXRpY19ibG9ja19jb21tZW50X10gPSAkS190b19nb1swXSA9PSAkS19maXJzdDsKICAgICAgICB9CgogICAgICAgICR0aGlzX2JhdGNoLT5bX3JpX3N0YXJ0aW5nX29uZV9saW5lX2Jsb2NrX10gPQogICAgICAgICAgJHJpX3N0YXJ0aW5nX29uZV9saW5lX2Jsb2NrOwoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgcHJvY2VzcyB0aGlzIGJhdGNoCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAkc2VsZi0+Z3JpbmRfYmF0Y2hfb2ZfQ09ERSgpOwoKICAgICAgICAjIERvbmUgLi4gdGhpcyBiYXRjaCBpcyBoaXN0b3J5CiAgICAgICAgaW5pdGlhbGl6ZV9iYXRjaF92YXJpYWJsZXMoKTsKCiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGZsdXNoX2JhdGNoX29mX0NPREUKCiAgICBzdWIgZW5kX2JhdGNoIHsKCiAgICAgICAgIyBFbmQgdGhlIGN1cnJlbnQgYmF0Y2gsIEVYQ0VQVCBmb3IgYSBmZXcgc3BlY2lhbCBjYXNlcwogICAgICAgIG15ICgkc2VsZikgPSBAXzsKCiAgICAgICAgaWYgKCAkbWF4X2luZGV4X3RvX2dvIDwgMCApIHsKCiAgICAgICAgICAgICMgbm90aGluZyB0byBkbyAuLiB0aGlzIGlzIGhhcm1sZXNzIGJ1dCB3YXN0ZXMgdGltZS4KICAgICAgICAgICAgaWYgKERFVkVMX01PREUpIHsKICAgICAgICAgICAgICAgIEZhdWx0KCJzdWIgZW5kX2JhdGNoIGNhbGxlZCB3aXRoIG5vdGhpbmcgdG8gZG87IHBsZWFzZSBmaXhcbiIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgRXhjZXB0aW9ucyB3aGVuIGEgbGluZSBkb2VzIG5vdCBlbmQgd2l0aCBhIGNvbW1lbnQuLi4gKGZpeGVzIGMwNTgpCiAgICAgICAgaWYgKCAkdHlwZXNfdG9fZ29bJG1heF9pbmRleF90b19nb10gbmUgJyMnICkgewoKICAgICAgICAgICAgIyBFeGNlcHRpb24gMTogRG8gbm90IGVuZCBsaW5lIGluIGEgd2VsZAogICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICBpZiAoICR0b3RhbF93ZWxkX2NvdW50CiAgICAgICAgICAgICAgICAmJiAkc2VsZi0+W19yS193ZWxkX3JpZ2h0X10tPnsgJEtfdG9fZ29bJG1heF9pbmRleF90b19nb10gfSApOwoKICAgICAgICAgICAgIyBFeGNlcHRpb24gMjoganVzdCBzZXQgYSB0ZW50YXRpdmUgYnJlYWtwb2ludCBpZiB3ZSBtaWdodCBiZSBpbiBhCiAgICAgICAgICAgICMgb25lLWxpbmUgYmxvY2sKICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRpbmRleF9zdGFydF9vbmVfbGluZV9ibG9jaykgKSB7CiAgICAgICAgICAgICAgICAkc2VsZi0+c2V0X2ZvcmNlZF9icmVha3BvaW50KCRtYXhfaW5kZXhfdG9fZ28pOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkc2VsZi0+Zmx1c2hfYmF0Y2hfb2ZfQ09ERSgpOwogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBlbmRfYmF0Y2gKCiAgICBzdWIgZmx1c2hfdmVydGljYWxfYWxpZ25lciB7CiAgICAgICAgbXkgKCRzZWxmKSA9IEBfOwogICAgICAgIG15ICR2YW8gPSAkc2VsZi0+W192ZXJ0aWNhbF9hbGlnbmVyX29iamVjdF9dOwogICAgICAgICR2YW8tPmZsdXNoKCk7CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGZsdXNoX3ZlcnRpY2FsX2FsaWduZXIKCiAgICBzdWIgZmx1c2ggewogICAgICAgIG15ICggJHNlbGYsICgkQ09ERV90eXBlX2ZsdXNoKSApID0gQF87CgogICAgICAgICMgU3ViIGZsdXNoIGlzIGNhbGxlZCB0byBvdXRwdXQgYW55IHRva2VucyBpbiB0aGUgcGlwZWxpbmUsIHNvIHRoYXQKICAgICAgICAjIGFuIGFsdGVybmF0ZSBzb3VyY2Ugb2YgbGluZXMgY2FuIGJlIHdyaXR0ZW4gaW4gdGhlIGNvcnJlY3Qgb3JkZXIKICAgICAgICAjIE9wdGlvbmFsIHBhcmFtZXRlcjoKICAgICAgICAjICAgJENPREVfdHlwZV9mbHVzaCA9ICdCTCcgZm9yIGZsdXNoaW5nIHRvIGluc2VydCBhIGJsYW5rIGxpbmUKCiAgICAgICAgJGluZGV4X3N0YXJ0X29uZV9saW5lX2Jsb2NrID0gdW5kZWY7CgogICAgICAgICMgRW5kIHRoZSBjdXJyZW50IGJhdGNoLCBpZiBpdCBob2xkcyBhbnkgdG9rZW5zLCB3aXRoIDEgZXhjZXB0aW9uCiAgICAgICAgaWYgKCAkbWF4X2luZGV4X3RvX2dvID49IDAgKSB7CgogICAgICAgICAgICAjIEV4Y2VwdGlvbjogaWYgd2UgYXJlIGZsdXNoaW5nIHdpdGhpbiB0aGUgY29kZSBzdHJlYW0gb25seSB0bwogICAgICAgICAgICAjIGluc2VydCBibGFuayBsaW5lKHMpLCB0aGVuIHdlIGNhbiBrZWVwIHRoZSBiYXRjaCBpbnRhY3QgYXQgYQogICAgICAgICAgICAjIHdlbGQuIFRoaXMgaW1wcm92ZXMgZm9ybWF0dGluZyBvZiAtY2UuICBTZWUgdGVzdCAnY2UxLmNlJwogICAgICAgICAgICBpZiAoICRDT0RFX3R5cGVfZmx1c2ggJiYgJENPREVfdHlwZV9mbHVzaCBlcSAnQkwnICkgewogICAgICAgICAgICAgICAgJHNlbGYtPmVuZF9iYXRjaCgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIG90aGVyd2lzZSwgd2UgaGF2ZSB0byBzaHV0IHRoaW5ncyBkb3duIGNvbXBsZXRlbHkuCiAgICAgICAgICAgIGVsc2UgeyAkc2VsZi0+Zmx1c2hfYmF0Y2hfb2ZfQ09ERSgpIH0KICAgICAgICB9CgogICAgICAgICRzZWxmLT5mbHVzaF92ZXJ0aWNhbF9hbGlnbmVyKCk7CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGZsdXNoCgogICAgbXkgJWlzX2Fzc2lnbm1lbnRfb3JfZmF0X2NvbW1hOwoKICAgIEJFR0lOIHsKICAgICAgICAlaXNfYXNzaWdubWVudF9vcl9mYXRfY29tbWEgPSAlaXNfYXNzaWdubWVudDsKICAgICAgICAkaXNfYXNzaWdubWVudF9vcl9mYXRfY29tbWF7Jz0+J30gPSAxOwogICAgfQoKICAgIHN1YiBhZGRfbWlzc2luZ19lbHNlIHsKCiAgICAgICAgbXkgKCRzZWxmKSA9IEBfOwoKICAgICAgICAjIEFkZCBhIG1pc3NpbmcgJ2Vsc2UnIGJsb2NrLgogICAgICAgICMgJEtfZGFuZ2xpbmdfZWxzaWYgPSBpbmRleCBvZiBjbG9zaW5nIGVsc2lmIGJyYWNlIG5vdCBmb2xsb3dlZCBieSBlbHNlCgogICAgICAgICMgTWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbG9va3Mgb2theQogICAgICAgIGlmICggICEkS19kYW5nbGluZ19lbHNpZgogICAgICAgICAgICB8fCAkS19kYW5nbGluZ19lbHNpZiA8ICRLX2ZpcnN0CiAgICAgICAgICAgIHx8ICRyTEwtPlskS19kYW5nbGluZ19lbHNpZl0tPltfVFlQRV9dIG5lICd9JyApCiAgICAgICAgewogICAgICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KCJjb3VsZCBub3QgZmluZCBjbG9zaW5nIGVsc2lmIGJyYWNlXG4iKTsKICAgICAgICB9CgogICAgICAgIG15ICRjb21tZW50ID0gJHJPcHRzLT57J2FkZC1taXNzaW5nLWVsc2UtY29tbWVudCd9OwoKICAgICAgICAjIFNhZmV0eSBjaGVjawogICAgICAgIGlmICggc3Vic3RyKCAkY29tbWVudCwgMCwgMSApIG5lICcjJyApIHsgJGNvbW1lbnQgPSAnIycgLiAkY29tbWVudCB9CgogICAgICAgICMgQ2FsY3VsYXRlIGluZGVudGF0aW9uCiAgICAgICAgbXkgJGxldmVsICA9ICRyYWRqdXN0ZWRfbGV2ZWxzLT5bJEtfZGFuZ2xpbmdfZWxzaWZdOwogICAgICAgIG15ICRzcGFjZXMgPSBTUEFDRSB4ICggJGxldmVsICogJHJPcHRzX2luZGVudF9jb2x1bW5zICk7CiAgICAgICAgbXkgJGxpbmUxICA9ICRzcGFjZXMgLiAiZWxzZSB7XG4iOwogICAgICAgIG15ICRsaW5lMyAgPSAkc3BhY2VzIC4gIn1cbiI7CiAgICAgICAgJHNwYWNlcyAuPSBTUEFDRSB4ICRyT3B0c19pbmRlbnRfY29sdW1uczsKICAgICAgICBteSAkbGluZTIgPSAkc3BhY2VzIC4gJGNvbW1lbnQgLiAiXG4iOwoKICAgICAgICAjIGNsZWFyIHRoZSBvdXRwdXQgcGlwZWxpbmUKICAgICAgICAkc2VsZi0+Zmx1c2goKTsKCiAgICAgICAgbXkgJGZpbGVfd3JpdGVyX29iamVjdCA9ICRzZWxmLT5bX2ZpbGVfd3JpdGVyX29iamVjdF9dOwoKICAgICAgICAkZmlsZV93cml0ZXJfb2JqZWN0LT53cml0ZV9jb2RlX2xpbmUoJGxpbmUxKTsKICAgICAgICAkZmlsZV93cml0ZXJfb2JqZWN0LT53cml0ZV9jb2RlX2xpbmUoJGxpbmUyKTsKICAgICAgICAkZmlsZV93cml0ZXJfb2JqZWN0LT53cml0ZV9jb2RlX2xpbmUoJGxpbmUzKTsKICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgYWRkX21pc3NpbmdfZWxzZQoKICAgIHN1YiBwcm9jZXNzX2xpbmVfb2ZfQ09ERSB7CgogICAgICAgIG15ICggJHNlbGYsICRteV9saW5lX29mX3Rva2VucyApID0gQF87CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIG9uY2UgcGVyIElOUFVUIGxpbmUgdG8gZm9ybWF0IGFsbCBvZiB0aGUKICAgICAgICAjIHRva2VucyBvbiB0aGF0IGxpbmUuCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgIyBJdCBvdXRwdXRzIGZ1bGwtbGluZSBjb21tZW50cyBhbmQgYmxhbmsgbGluZXMgaW1tZWRpYXRlbHkuCgogICAgICAgICMgRm9yIGxpbmVzIG9mIGNvZGU6CiAgICAgICAgIyAtIFRva2VucyBhcmUgY29waWVkIG9uZS1ieS1vbmUgZnJvbSB0aGUgZ2xvYmFsIHRva2VuCiAgICAgICAgIyAgIGFycmF5ICRyTEwgdG8gYSBzZXQgb2YgJ190b19nbycgYXJyYXlzIHdoaWNoIGNvbGxlY3QgYmF0Y2hlcyBvZgogICAgICAgICMgICB0b2tlbnMuIFRoaXMgaXMgZG9uZSB3aXRoIGNhbGxzIHRvICdzdG9yZV90b2tlbl90b19nbycuCiAgICAgICAgIyAtIEEgYmF0Y2ggaXMgY2xvc2VkIGFuZCBwcm9jZXNzZWQgdXBvbiByZWFjaGluZyBhIHdlbGwgZGVmaW5lZAogICAgICAgICMgICBzdHJ1Y3R1cmFsIGJyZWFrIHBvaW50IChpLmUuIGNvZGUgYmxvY2sgYm91bmRhcnkpIG9yIGZvcmNlZAogICAgICAgICMgICBicmVha3BvaW50IChpLmUuIHNpZGUgY29tbWVudCBvciBzcGVjaWFsIHVzZXIgY29udHJvbHMpLgogICAgICAgICMgLSBTdWJzZXF1ZW50IHN0YWdlcyBvZiBmb3JtYXR0aW5nIG1ha2UgYWRkaXRpb25hbCBsaW5lIGJyZWFrcwogICAgICAgICMgICBhcHByb3ByaWF0ZSBmb3IgbGlzdHMgYW5kIGxvZ2ljYWwgc3RydWN0dXJlcywgYW5kIGFzIG5lY2Vzc2FyeSB0bwogICAgICAgICMgICBrZWVwIGxpbmUgbGVuZ3RocyBiZWxvdyB0aGUgcmVxdWVzdGVkIG1heGltdW0gbGluZSBsZW5ndGguCgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgYmVnaW4gaW5pdGlhbGl6ZSBjbG9zdXJlIHZhcmlhYmxlcwogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICRsaW5lX29mX3Rva2VucyA9ICRteV9saW5lX29mX3Rva2VuczsKICAgICAgICBteSAkcktfcmFuZ2UgPSAkbGluZV9vZl90b2tlbnMtPntfcktfcmFuZ2V9OwogICAgICAgIGlmICggIWRlZmluZWQoICRyS19yYW5nZS0+WzBdICkgKSB7CgogICAgICAgICAgICAjIEVtcHR5IGxpbmU6IFRoaXMgY2FuIGhhcHBlbiBpZiB0b2tlbnMgYXJlIGRlbGV0ZWQsIGZvciBleGFtcGxlCiAgICAgICAgICAgICMgd2l0aCB0aGUgLW1hbmdsZSBwYXJhbWV0ZXIKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgKCAkS19maXJzdCwgJEtfbGFzdCApID0gQHskcktfcmFuZ2V9OwogICAgICAgICRsYXN0X0NPREVfdHlwZSAgICAgICAgICAgICAgID0gJENPREVfdHlwZTsKICAgICAgICAkQ09ERV90eXBlICAgICAgICAgICAgICAgICAgICA9ICRsaW5lX29mX3Rva2Vucy0+e19jb2RlX3R5cGV9OwogICAgICAgICRjdXJyZW50X2xpbmVfc3RhcnRzX2luX3F1b3RlID0gJGxpbmVfb2ZfdG9rZW5zLT57X3N0YXJ0aW5nX2luX3F1b3RlfTsKCiAgICAgICAgJHJMTCAgICAgICAgICAgICAgICAgICAgID0gJHNlbGYtPltfckxMX107CiAgICAgICAgJHJhZGp1c3RlZF9sZXZlbHMgICAgICAgID0gJHNlbGYtPltfcmFkanVzdGVkX2xldmVsc19dOwogICAgICAgICRycGFyZW50X29mX3NlcW5vICAgICAgICA9ICRzZWxmLT5bX3JwYXJlbnRfb2Zfc2Vxbm9fXTsKICAgICAgICAkcmRlcHRoX29mX29wZW5pbmdfc2Vxbm8gPSAkc2VsZi0+W19yZGVwdGhfb2Zfb3BlbmluZ19zZXFub19dOwogICAgICAgICRyYmxvY2tfdHlwZV9vZl9zZXFubyAgICA9ICRzZWxmLT5bX3JibG9ja190eXBlX29mX3NlcW5vX107CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIGVuZCBpbml0aWFsaXplIGNsb3N1cmUgdmFyaWFibGVzCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAjIFRoaXMgZmxhZyB3aWxsIGJlY29tZSBub2JyZWFrX3RvX2dvIGFuZCBzaG91bGQgYmUgc2V0IHRvIDIgdG8gcHJldmVudAogICAgICAgICMgYSBsaW5lIGJyZWFrIEFGVEVSIHRoZSBjdXJyZW50IHRva2VuLgogICAgICAgICRub19pbnRlcm5hbF9uZXdsaW5lcyA9IDA7CiAgICAgICAgaWYgKCAhJHJPcHRzX2FkZF9uZXdsaW5lcyB8fCAkQ09ERV90eXBlIGVxICdOSU4nICkgewogICAgICAgICAgICAkbm9faW50ZXJuYWxfbmV3bGluZXMgPSAyOwogICAgICAgIH0KCiAgICAgICAgbXkgJGlucHV0X2xpbmUgPSAkbGluZV9vZl90b2tlbnMtPntfbGluZV90ZXh0fTsKCiAgICAgICAgbXkgKCAkaXNfYmxvY2tfY29tbWVudCwgJGhhc19zaWRlX2NvbW1lbnQgKTsKICAgICAgICBpZiAoICRyTEwtPlskS19sYXN0XS0+W19UWVBFX10gZXEgJyMnICkgewogICAgICAgICAgICBpZiAoICRLX2xhc3QgPT0gJEtfZmlyc3QgJiYgJENPREVfdHlwZSBuZSAnSFNDJyApIHsKICAgICAgICAgICAgICAgICRpc19ibG9ja19jb21tZW50ID0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsgJGhhc19zaWRlX2NvbW1lbnQgPSAxIH0KICAgICAgICB9CgogICAgICAgIG15ICRpc19zdGF0aWNfYmxvY2tfY29tbWVudF93aXRob3V0X2xlYWRpbmdfc3BhY2UgPQogICAgICAgICAgJENPREVfdHlwZSBlcSAnU0JDWCc7CiAgICAgICAgJGlzX3N0YXRpY19ibG9ja19jb21tZW50ID0KICAgICAgICAgICRDT0RFX3R5cGUgZXEgJ1NCQycgfHwgJGlzX3N0YXRpY19ibG9ja19jb21tZW50X3dpdGhvdXRfbGVhZGluZ19zcGFjZTsKCiAgICAgICAgIyBjaGVjayBmb3IgYSAkVkVSU0lPTiBzdGF0ZW1lbnQKICAgICAgICBpZiAoICRDT0RFX3R5cGUgZXEgJ1ZFUicgKSB7CiAgICAgICAgICAgICRzZWxmLT5bX3Nhd19WRVJTSU9OX2luX3RoaXNfZmlsZV9dID0gMTsKICAgICAgICAgICAgJG5vX2ludGVybmFsX25ld2xpbmVzID0gMjsKICAgICAgICB9CgogICAgICAgICMgQWRkIGludGVybGluZSBibGFuayBpZiBhbnkKICAgICAgICBteSAkbGFzdF9vbGRfbm9uYmxhbmtfdHlwZSAgID0gImIiOwogICAgICAgIG15ICRmaXJzdF9uZXdfbm9uYmxhbmtfdG9rZW4gPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgbXkgJEtfZmlyc3RfdHJ1ZSAgICAgICAgICAgICA9ICRLX2ZpcnN0OwogICAgICAgIGlmICggJG1heF9pbmRleF90b19nbyA+PSAwICkgewogICAgICAgICAgICAkbGFzdF9vbGRfbm9uYmxhbmtfdHlwZSAgID0gJHR5cGVzX3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dOwogICAgICAgICAgICAkZmlyc3RfbmV3X25vbmJsYW5rX3Rva2VuID0gJHJMTC0+WyRLX2ZpcnN0XS0+W19UT0tFTl9dOwogICAgICAgICAgICBpZiAoICAhJGlzX2Jsb2NrX2NvbW1lbnQKICAgICAgICAgICAgICAgICYmICR0eXBlc190b19nb1skbWF4X2luZGV4X3RvX2dvXSBuZSAnYicKICAgICAgICAgICAgICAgICYmICRLX2ZpcnN0ID4gMAogICAgICAgICAgICAgICAgJiYgJHJMTC0+WyAkS19maXJzdCAtIDEgXS0+W19UWVBFX10gZXEgJ2InICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJEtfZmlyc3QgLT0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbXkgJHJ0b2tfZmlyc3QgPSAkckxMLT5bJEtfZmlyc3RdOwoKICAgICAgICBteSAkaW5fcXVvdGUgPSAkbGluZV9vZl90b2tlbnMtPntfZW5kaW5nX2luX3F1b3RlfTsKICAgICAgICAkZW5kaW5nX2luX3F1b3RlID0gJGluX3F1b3RlOwoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBIYW5kbGUgYSBibG9jayAoZnVsbC1saW5lKSBjb21tZW50LgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpZiAoJGlzX2Jsb2NrX2NvbW1lbnQpIHsKCiAgICAgICAgICAgIGlmICggJHJPcHRzLT57J2RlbGV0ZS1ibG9jay1jb21tZW50cyd9ICkgewogICAgICAgICAgICAgICAgJHNlbGYtPmZsdXNoKCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRpbmRleF9zdGFydF9vbmVfbGluZV9ibG9jayA9IHVuZGVmOwogICAgICAgICAgICAkc2VsZi0+ZW5kX2JhdGNoKCkgaWYgKCAkbWF4X2luZGV4X3RvX2dvID49IDAgKTsKCiAgICAgICAgICAgICMgb3V0cHV0IGEgYmxhbmsgbGluZSBiZWZvcmUgYmxvY2sgY29tbWVudHMKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgIyB1bmxlc3Mgd2UgZm9sbG93IGEgYmxhbmsgb3IgY29tbWVudCBsaW5lCiAgICAgICAgICAgICAgICAkc2VsZi0+W19sYXN0X2xpbmVfbGVhZGluZ190eXBlX10gbmUgJyMnCiAgICAgICAgICAgICAgICAmJiAkc2VsZi0+W19sYXN0X2xpbmVfbGVhZGluZ190eXBlX10gbmUgJ2InCgogICAgICAgICAgICAgICAgIyBvbmx5IGlmIGFsbG93ZWQKICAgICAgICAgICAgICAgICYmICRyT3B0cy0+eydibGFua3MtYmVmb3JlLWNvbW1lbnRzJ30KCiAgICAgICAgICAgICAgICAjIGlmIHRoaXMgaXMgTk9UIGFuIGVtcHR5IGNvbW1lbnQsIHVubGVzcyBpdCBmb2xsb3dzIGEgc2lkZQogICAgICAgICAgICAgICAgIyBjb21tZW50IGFuZCBjb3VsZCBiZWNvbWUgYSBoYW5naW5nIHNpZGUgY29tbWVudC4KICAgICAgICAgICAgICAgICYmICgKICAgICAgICAgICAgICAgICAgICAkcnRva19maXJzdC0+W19UT0tFTl9dIG5lICcjJwogICAgICAgICAgICAgICAgICAgIHx8ICggICAkbGFzdF9saW5lX2hhZF9zaWRlX2NvbW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHJMTC0+WyRLX2ZpcnN0XS0+W19MRVZFTF9dID4gMCApCiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAgIyBub3QgYWZ0ZXIgYSBzaG9ydCBsaW5lIGVuZGluZyBpbiBhbiBvcGVuaW5nIHRva2VuCiAgICAgICAgICAgICAgICAjIGJlY2F1c2Ugd2UgYWxyZWFkeSBoYXZlIHNwYWNlIGFib3ZlIHRoaXMgY29tbWVudC4KICAgICAgICAgICAgICAgICMgTm90ZSB0aGF0IHRoZSBmaXJzdCBjb21tZW50IGluIHRoaXMgaWYgYmxvY2ssIGFmdGVyCiAgICAgICAgICAgICAgICAjIHRoZSAnaWYgKCcsIGRvZXMgbm90IGdldCBhIGJsYW5rIGxpbmUgYmVjYXVzZSBvZiB0aGlzLgogICAgICAgICAgICAgICAgJiYgISRzZWxmLT5bX2xhc3Rfb3V0cHV0X3Nob3J0X29wZW5pbmdfdG9rZW5fXQoKICAgICAgICAgICAgICAgICMgbmV2ZXIgYmVmb3JlIHN0YXRpYyBibG9jayBjb21tZW50cwogICAgICAgICAgICAgICAgJiYgISRpc19zdGF0aWNfYmxvY2tfY29tbWVudAogICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJHNlbGYtPmZsdXNoKCk7ICAgICMgc3dpdGNoaW5nIHRvIG5ldyBvdXRwdXQgc3RyZWFtCiAgICAgICAgICAgICAgICBteSAkZmlsZV93cml0ZXJfb2JqZWN0ID0gJHNlbGYtPltfZmlsZV93cml0ZXJfb2JqZWN0X107CiAgICAgICAgICAgICAgICAkZmlsZV93cml0ZXJfb2JqZWN0LT53cml0ZV9ibGFua19jb2RlX2xpbmUoKTsKICAgICAgICAgICAgICAgICRzZWxmLT5bX2xhc3RfbGluZV9sZWFkaW5nX3R5cGVfXSA9ICdiJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJHJPcHRzLT57J2luZGVudC1ibG9jay1jb21tZW50cyd9CiAgICAgICAgICAgICAgICAmJiAoICAhJHJPcHRzLT57J2luZGVudC1zcGFjZWQtYmxvY2stY29tbWVudHMnfQogICAgICAgICAgICAgICAgICAgIHx8ICRpbnB1dF9saW5lID1+IC9eXHMrLyApCiAgICAgICAgICAgICAgICAmJiAhJGlzX3N0YXRpY19ibG9ja19jb21tZW50X3dpdGhvdXRfbGVhZGluZ19zcGFjZQogICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbXkgJEt0b2tlbl92YXJzID0gJEtfZmlyc3Q7CiAgICAgICAgICAgICAgICBteSAkcnRva2VuX3ZhcnMgPSAkckxMLT5bJEt0b2tlbl92YXJzXTsKICAgICAgICAgICAgICAgICRzZWxmLT5zdG9yZV90b2tlbl90b19nbyggJEt0b2tlbl92YXJzLCAkcnRva2VuX3ZhcnMgKTsKICAgICAgICAgICAgICAgICRzZWxmLT5lbmRfYmF0Y2goKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIHN3aXRjaGluZyB0byBuZXcgb3V0cHV0IHN0cmVhbQogICAgICAgICAgICAgICAgJHNlbGYtPmZsdXNoKCk7CgogICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQgbGFzdCBhcmcgaW4gY2FsbCBoZXJlIGlzICd1bmRlZicgZm9yIGNvbW1lbnRzCiAgICAgICAgICAgICAgICBteSAkZmlsZV93cml0ZXJfb2JqZWN0ID0gJHNlbGYtPltfZmlsZV93cml0ZXJfb2JqZWN0X107CiAgICAgICAgICAgICAgICAkZmlsZV93cml0ZXJfb2JqZWN0LT53cml0ZV9jb2RlX2xpbmUoCiAgICAgICAgICAgICAgICAgICAgJHJ0b2tfZmlyc3QtPltfVE9LRU5fXSAuICJcbiIsIHVuZGVmICk7CiAgICAgICAgICAgICAgICAkc2VsZi0+W19sYXN0X2xpbmVfbGVhZGluZ190eXBlX10gPSAnIyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBDb21wYXJlIGlucHV0L291dHB1dCBpbmRlbnRhdGlvbiBpbiBsb2dmaWxlCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaWYgKCAkc2VsZi0+W19zYXZlX2xvZ2ZpbGVfXSApIHsKCiAgICAgICAgICAgIG15ICRndWVzc2VkX2luZGVudGF0aW9uX2xldmVsID0KICAgICAgICAgICAgICAkbGluZV9vZl90b2tlbnMtPntfZ3Vlc3NlZF9pbmRlbnRhdGlvbl9sZXZlbH07CgogICAgICAgICAgICAjIENvbXBhcmUgaW5wdXQvb3V0cHV0IGluZGVudGF0aW9uIGV4Y2VwdCBmb3I6CiAgICAgICAgICAgICMgIC0gaGFuZ2luZyBzaWRlIGNvbW1lbnRzCiAgICAgICAgICAgICMgIC0gY29udGludWF0aW9uIGxpbmVzIChoYXZlIHVua25vd24gbGVhZGluZyBibGFuayBzcGFjZSkKICAgICAgICAgICAgIyAgLSBhbmQgbGluZXMgd2hpY2ggYXJlIHF1b3RlcyAodGhleSBtYXkgaGF2ZSBiZWVuIG91dGRlbnRlZCkKICAgICAgICAgICAgbXkgJGV4Y2VwdGlvbiA9CiAgICAgICAgICAgICAgICAgJENPREVfdHlwZSBlcSAnSFNDJwogICAgICAgICAgICAgIHx8ICRydG9rX2ZpcnN0LT5bX0NJX0xFVkVMX10gPiAwCiAgICAgICAgICAgICAgfHwgJGd1ZXNzZWRfaW5kZW50YXRpb25fbGV2ZWwgPT0gMAogICAgICAgICAgICAgICYmICRydG9rX2ZpcnN0LT5bX1RZUEVfXSBlcSAnUSc7CgogICAgICAgICAgICBpZiAoICEkZXhjZXB0aW9uICkgewogICAgICAgICAgICAgICAgbXkgJGlucHV0X2xpbmVfbnVtYmVyID0gJGxpbmVfb2ZfdG9rZW5zLT57X2xpbmVfbnVtYmVyfTsKICAgICAgICAgICAgICAgICRzZWxmLT5jb21wYXJlX2luZGVudGF0aW9uX2xldmVscyggJEtfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgJGd1ZXNzZWRfaW5kZW50YXRpb25fbGV2ZWwsICRpbnB1dF9saW5lX251bWJlciApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIEhhbmRsZSBhIGxpbmUgbWFya2VkIGFzIGluZGVudGF0aW9uLW9ubHkKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgaWYgKCAkQ09ERV90eXBlIGVxICdJTycgKSB7CiAgICAgICAgICAgICRzZWxmLT5mbHVzaCgpOwogICAgICAgICAgICBteSAkbGluZSA9ICRpbnB1dF9saW5lOwoKICAgICAgICAgICAgIyBGaXggZm9yIHJ0ICMxMjU1MDYgVW5leHBlY3RlZCBzdHJpbmcgZm9ybWF0dGluZwogICAgICAgICAgICAjIGluIHdoaWNoIGxlYWRpbmcgc3BhY2Ugb2YgYSB0ZXJtaW5hbCBxdW90ZSB3YXMgcmVtb3ZlZAogICAgICAgICAgICAkbGluZSA9fiBzL1xzKyQvLzsKICAgICAgICAgICAgJGxpbmUgPX4gcy9eXHMrLy8gdW5sZXNzICggJGxpbmVfb2ZfdG9rZW5zLT57X3N0YXJ0aW5nX2luX3F1b3RlfSApOwoKICAgICAgICAgICAgbXkgJEt0b2tlbl92YXJzID0gJEtfZmlyc3Q7CgogICAgICAgICAgICAjIFdlIHdvcmsgd2l0aCBhIGNvcHkgb2YgdGhlIHRva2VuIHZhcmlhYmxlcyBhbmQgY2hhbmdlIHRoZQogICAgICAgICAgICAjIGZpcnN0IHRva2VuIHRvIGJlIHRoZSBlbnRpcmUgbGluZSBhcyBhIHF1b3RlIHZhcmlhYmxlCiAgICAgICAgICAgIG15ICRydG9rZW5fdmFycyA9ICRyTEwtPlskS3Rva2VuX3ZhcnNdOwogICAgICAgICAgICAkcnRva2VuX3ZhcnMgPSBjb3B5X3Rva2VuX2FzX3R5cGUoICRydG9rZW5fdmFycywgJ3EnLCAkbGluZSApOwoKICAgICAgICAgICAgIyBQYXRjaDogbGVuZ3RoIGlzIG5vdCByZWFsbHkgaW1wb3J0YW50IGhlcmUgYnV0IG11c3QgYmUgZGVmaW5lZAogICAgICAgICAgICAkcnRva2VuX3ZhcnMtPltfVE9LRU5fTEVOR1RIX10gPSBsZW5ndGgoJGxpbmUpOwoKICAgICAgICAgICAgJHNlbGYtPnN0b3JlX3Rva2VuX3RvX2dvKCAkS3Rva2VuX3ZhcnMsICRydG9rZW5fdmFycyApOwogICAgICAgICAgICAkc2VsZi0+ZW5kX2JhdGNoKCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIEhhbmRsZSBhbGwgb3RoZXIgbGluZXMgLi4uCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAkS19kYW5nbGluZ19lbHNpZiA9IDA7CgogICAgICAgICMgVGhpcyBpcyBhIGdvb2QgcGxhY2UgdG8ga2lsbCBpbmNvbXBsZXRlIG9uZS1saW5lIGJsb2NrcwogICAgICAgIGlmICggJG1heF9pbmRleF90b19nbyA+PSAwICkgewoKICAgICAgICAgICAgIyBGb3IgLWlvYiBhbmQgLWxwLCBtYXJrIGVzc2VudGlhbCBvbGQgYnJlYWtwb2ludHMuCiAgICAgICAgICAgICMgRml4ZXMgYjEwMjEgYjEwMjMgYjEwMzQgYjEwNDggYjEwNDkgYjEwNTAgYjEwNTYgYjEwNTgKICAgICAgICAgICAgIyBTZWUgcmVsYXRlZCBjb2RlIGJlbG93LgogICAgICAgICAgICBpZiAoICRyT3B0c19pZ25vcmVfb2xkX2JyZWFrcG9pbnRzICYmICRyT3B0c19saW5lX3VwX3BhcmVudGhlc2VzICkgewogICAgICAgICAgICAgICAgbXkgJHR5cGVfZmlyc3QgPSAkckxMLT5bJEtfZmlyc3RfdHJ1ZV0tPltfVFlQRV9dOwogICAgICAgICAgICAgICAgaWYgKCAkaXNfYXNzaWdubWVudF9vcl9mYXRfY29tbWF7JHR5cGVfZmlyc3R9ICkgewogICAgICAgICAgICAgICAgICAgICRvbGRfYnJlYWtwb2ludF90b19nb1skbWF4X2luZGV4X3RvX2dvXSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgKCiAgICAgICAgICAgICAgICAjIHRoaXMgY2hlY2sgbmVlZGVkIC1tYW5nbGUgKGZvciBleGFtcGxlIHJ0MTI1MDEyKQogICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICggISRpbmRleF9zdGFydF9vbmVfbGluZV9ibG9jayApCiAgICAgICAgICAgICAgICAgICAgJiYgKCAkbGFzdF9vbGRfbm9uYmxhbmtfdHlwZSBlcSAnOycgKQogICAgICAgICAgICAgICAgICAgICYmICggJGZpcnN0X25ld19ub25ibGFua190b2tlbiBuZSAnfScgKQogICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgICAgICMgUGF0Y2ggZm9yIFJUICM5ODkwMi4gSG9ub3IgcmVxdWVzdCB0byBicmVhayBhdCBvbGQgY29tbWFzLgogICAgICAgICAgICAgICAgfHwgKCAgICRyT3B0c19icmVha19hdF9vbGRfY29tbWFfYnJlYWtwb2ludHMKICAgICAgICAgICAgICAgICAgICAmJiAkbGFzdF9vbGRfbm9uYmxhbmtfdHlwZSBlcSAnLCcgKQogICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJGZvcmNlZF9icmVha3BvaW50X3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dID0gMQogICAgICAgICAgICAgICAgICBpZiAoJHJPcHRzX2JyZWFrX2F0X29sZF9jb21tYV9icmVha3BvaW50cyk7CiAgICAgICAgICAgICAgICAkaW5kZXhfc3RhcnRfb25lX2xpbmVfYmxvY2sgPSB1bmRlZjsKICAgICAgICAgICAgICAgICRzZWxmLT5lbmRfYmF0Y2goKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBLZWVwIGFueSByZXF1ZXN0ZWQgYnJlYWtzIGJlZm9yZSB0aGlzIGxpbmUuICBOb3RlIHRoYXQgd2UgaGF2ZSB0bwogICAgICAgICAgICAjIHVzZSB0aGUgb3JpZ2luYWwgS19maXJzdCBiZWNhdXNlIGl0IG1heSBoYXZlIGJlZW4gcmVkdWNlZCBhYm92ZQogICAgICAgICAgICAjIHRvIGFkZCBhIGJsYW5rLiAgVGhlIHZhbHVlIG9mIHRoZSBmbGFnIGlzIGFzIGZvbGxvd3M6CiAgICAgICAgICAgICMgICAxID0+IGhhcmQgYnJlYWssIGZsdXNoIHRoZSBiYXRjaAogICAgICAgICAgICAjICAgMiA9PiBzb2Z0IGJyZWFrLCBzZXQgYnJlYWtwb2ludCBhbmQgY29udGludWUgYnVpbGRpbmcgdGhlIGJhdGNoCiAgICAgICAgICAgICMgYWRkZWQgY2hlY2sgb24gbWF4X2luZGV4X3RvX2dvIGZvciBjMTc3CiAgICAgICAgICAgIGlmICggICAkbWF4X2luZGV4X3RvX2dvID49IDAKICAgICAgICAgICAgICAgICYmICRzZWxmLT5bX3JicmVha19iZWZvcmVfS2ZpcnN0X10tPnskS19maXJzdF90cnVlfSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRpbmRleF9zdGFydF9vbmVfbGluZV9ibG9jayA9IHVuZGVmOwogICAgICAgICAgICAgICAgaWYgKCAkc2VsZi0+W19yYnJlYWtfYmVmb3JlX0tmaXJzdF9dLT57JEtfZmlyc3RfdHJ1ZX0gPT0gMiApIHsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+c2V0X2ZvcmNlZF9icmVha3BvaW50KCRtYXhfaW5kZXhfdG9fZ28pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPmVuZF9iYXRjaCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIGxvb3AgdG8gcHJvY2VzcyB0aGUgdG9rZW5zIG9uZS1ieS1vbmUKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAkc2VsZi0+cHJvY2Vzc19saW5lX2lubmVyX2xvb3AoJGhhc19zaWRlX2NvbW1lbnQpOwoKICAgICAgICAjIGlmIHRoZXJlIGlzIGFueXRoaW5nIGxlZnQgaW4gdGhlIG91dHB1dCBidWZmZXIgLi4uCiAgICAgICAgaWYgKCAkbWF4X2luZGV4X3RvX2dvID49IDAgKSB7CgogICAgICAgICAgICBteSAkdHlwZSAgICAgICA9ICRyTEwtPlskS19sYXN0XS0+W19UWVBFX107CiAgICAgICAgICAgIG15ICRicmVha19mbGFnID0gJHNlbGYtPltfcmJyZWFrX2FmdGVyX0tsYXN0X10tPnskS19sYXN0fTsKCiAgICAgICAgICAgICMgd2UgaGF2ZSB0byBmbHVzaCAuLgogICAgICAgICAgICBpZiAoCgogICAgICAgICAgICAgICAgIyBpZiB0aGVyZSBpcyBhIHNpZGUgY29tbWVudC4uLgogICAgICAgICAgICAgICAgJHR5cGUgZXEgJyMnCgogICAgICAgICAgICAgICAgIyBpZiB0aGlzIGxpbmUgZW5kcyBpbiBhIHF1b3RlCiAgICAgICAgICAgICAgICAjIE5PVEU6IFRoaXMgaXMgY3JpdGljYWxseSBpbXBvcnRhbnQgZm9yIGluc3VyaW5nIHRoYXQgcXVvdGVkCiAgICAgICAgICAgICAgICAjIGxpbmVzIGRvIG5vdCBnZXQgcHJvY2Vzc2VkIGJ5IHRoaW5ncyBsaWtlIC1zb3QgYW5kIC1zY3QKICAgICAgICAgICAgICAgIHx8ICRpbl9xdW90ZQoKICAgICAgICAgICAgICAgICMgaWYgdGhpcyBpcyBhIFZFUlNJT04gc3RhdGVtZW50CiAgICAgICAgICAgICAgICB8fCAkQ09ERV90eXBlIGVxICdWRVInCgogICAgICAgICAgICAgICAgIyB0byBrZWVwIGEgbGFiZWwgYXQgdGhlIGVuZCBvZiBhIGxpbmUKICAgICAgICAgICAgICAgIHx8ICggJHR5cGUgZXEgJ0onICYmICRyT3B0c19icmVha19hZnRlcl9sYWJlbHMgIT0gMiApCgogICAgICAgICAgICAgICAgIyBpZiB3ZSBoYXZlIGEgaGFyZCBicmVhayByZXF1ZXN0CiAgICAgICAgICAgICAgICB8fCAkYnJlYWtfZmxhZyAmJiAkYnJlYWtfZmxhZyAhPSAyCgogICAgICAgICAgICAgICAgIyBpZiB3ZSBhcmUgaW5zdHJ1Y3RlZCB0byBrZWVwIGFsbCBvbGQgbGluZSBicmVha3MKICAgICAgICAgICAgICAgIHx8ICEkck9wdHMtPnsnZGVsZXRlLW9sZC1uZXdsaW5lcyd9CgogICAgICAgICAgICAgICAgIyBpZiB0aGlzIGlzIGEgbGluZSBvZiB0aGUgZm9ybSAndXNlIG92ZXJsb2FkJy4gQSBicmVhayBoZXJlIGluCiAgICAgICAgICAgICAgICAjIHRoZSBpbnB1dCBmaWxlIGlzIGEgZ29vZCBicmVhayBiZWNhdXNlIGl0IHdpbGwgYWxsb3cgdGhlCiAgICAgICAgICAgICAgICAjIG9wZXJhdG9ycyB3aGljaCBmb2xsb3cgdG8gYmUgZm9ybWF0dGVkIHdlbGwuIFdpdGhvdXQgdGhpcwogICAgICAgICAgICAgICAgIyBicmVhayB0aGUgZm9ybWF0dGluZyB3aXRoIC1jaT00IC14Y2kgaXMgcG9vciwgZm9yIGV4YW1wbGUuCgogICAgICAgICAgICAgICAgIyAgIHVzZSBvdmVybG9hZAogICAgICAgICAgICAgICAgIyAgICAgJysnID0+IHN1YiB7CiAgICAgICAgICAgICAgICAjICAgICAgIHByaW50IGxlbmd0aCAkX1syXSwgIlxuIjsKICAgICAgICAgICAgICAgICMgICAgICAgbXkgKCAkeCwgJHkgKSA9IF9vcmRlcihAXyk7CiAgICAgICAgICAgICAgICAjICAgICAgIE51bWJlcjo6Um9tYW4tPm5ldyggaW50ICR4ICsgJHkgKTsKICAgICAgICAgICAgICAgICMgICAgIH0sCiAgICAgICAgICAgICAgICAjICAgICAnLScgPT4gc3ViIHsKICAgICAgICAgICAgICAgICMgICAgICAgbXkgKCAkeCwgJHkgKSA9IF9vcmRlcihAXyk7CiAgICAgICAgICAgICAgICAjICAgICAgIE51bWJlcjo6Um9tYW4tPm5ldyggaW50ICR4IC0gJHkgKTsKICAgICAgICAgICAgICAgICMgICAgIH07CiAgICAgICAgICAgICAgICB8fCAoICAgJG1heF9pbmRleF90b19nbyA9PSAyCiAgICAgICAgICAgICAgICAgICAgJiYgJHR5cGVzX3RvX2dvWzBdIGVxICdrJwogICAgICAgICAgICAgICAgICAgICYmICR0b2tlbnNfdG9fZ29bMF0gZXEgJ3VzZScKICAgICAgICAgICAgICAgICAgICAmJiAkdG9rZW5zX3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dIGVxICdvdmVybG9hZCcgKQogICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJGluZGV4X3N0YXJ0X29uZV9saW5lX2Jsb2NrID0gdW5kZWY7CiAgICAgICAgICAgICAgICAkc2VsZi0+ZW5kX2JhdGNoKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgQ2hlY2sgZm9yIGEgc29mdCBicmVhayByZXF1ZXN0CiAgICAgICAgICAgICAgICBpZiAoICRicmVha19mbGFnICYmICRicmVha19mbGFnID09IDIgKSB7CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPnNldF9mb3JjZWRfYnJlYWtwb2ludCgkbWF4X2luZGV4X3RvX2dvKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIG1hcmsgb2xkIGxpbmUgYnJlYWtwb2ludHMgaW4gY3VycmVudCBvdXRwdXQgc3RyZWFtCiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgISRyT3B0c19pZ25vcmVfb2xkX2JyZWFrcG9pbnRzCgogICAgICAgICAgICAgICAgICAgICMgTWFyayBlc3NlbnRpYWwgb2xkIGJyZWFrcG9pbnRzIGlmIGNvbWJpbmF0aW9uIC1pb2IgLWxwIGlzCiAgICAgICAgICAgICAgICAgICAgIyB1c2VkLiAgVGhlc2UgdHdvIG9wdGlvbnMgZG8gbm90IHdvcmsgd2VsbCB0b2dldGhlciwgYnV0CiAgICAgICAgICAgICAgICAgICAgIyB3ZSBjYW4gYXZvaWQgdHVybmluZyAtaW9iIG9mZiBieSBpZ25vcmluZyAtaW9iIGF0IGNlcnRhaW4KICAgICAgICAgICAgICAgICAgICAjIGVzc2VudGlhbCBsaW5lIGJyZWFrcy4gIFNlZSBhbHNvIHJlbGF0ZWQgY29kZSBhYm92ZS4KICAgICAgICAgICAgICAgICAgICAjIEZpeGVzIGIxMDIxIGIxMDIzIGIxMDM0IGIxMDQ4IGIxMDQ5IGIxMDUwIGIxMDU2IGIxMDU4CiAgICAgICAgICAgICAgICAgICAgfHwgKCAgICRyT3B0c19saW5lX3VwX3BhcmVudGhlc2VzCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRpc19hc3NpZ25tZW50X29yX2ZhdF9jb21tYXskdHlwZX0gKQogICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJG9sZF9icmVha3BvaW50X3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCAkS19kYW5nbGluZ19lbHNpZiAmJiAkck9wdHNfYWRkX21pc3NpbmdfZWxzZSApIHsKICAgICAgICAgICAgJHNlbGYtPmFkZF9taXNzaW5nX2Vsc2UoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBwcm9jZXNzX2xpbmVfb2ZfQ09ERQoKICAgIHN1YiBwcm9jZXNzX2xpbmVfaW5uZXJfbG9vcCB7CgogICAgICAgIG15ICggJHNlbGYsICRoYXNfc2lkZV9jb21tZW50ICkgPSBAXzsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBMb29wIHRvIG1vdmUgYWxsIHRva2VucyBmcm9tIG9uZSBpbnB1dCBsaW5lIHRvIGEgbmV3bHkgZm9ybWluZyBiYXRjaAogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAjIERvIG5vdCBzdGFydCBhIG5ldyBiYXRjaCB3aXRoIGEgYmxhbmsgc3BhY2UKICAgICAgICBpZiAoICRtYXhfaW5kZXhfdG9fZ28gPCAwICYmICRyTEwtPlskS19maXJzdF0tPltfVFlQRV9dIGVxICdiJyApIHsKICAgICAgICAgICAgJEtfZmlyc3QrKzsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggbXkgJEt0b2tlbl92YXJzICggJEtfZmlyc3QgLi4gJEtfbGFzdCApIHsKCiAgICAgICAgICAgIG15ICRydG9rZW5fdmFycyA9ICRyTEwtPlskS3Rva2VuX3ZhcnNdOwoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgaGFuZGxlIGJsYW5rcwogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgaWYgKCAkcnRva2VuX3ZhcnMtPltfVFlQRV9dIGVxICdiJyApIHsKICAgICAgICAgICAgICAgICRzZWxmLT5zdG9yZV90b2tlbl90b19nbyggJEt0b2tlbl92YXJzLCAkcnRva2VuX3ZhcnMgKTsKICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgIyBoYW5kbGUgbm9uLWJsYW5rcwogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgIG15ICR0eXBlID0gJHJ0b2tlbl92YXJzLT5bX1RZUEVfXTsKCiAgICAgICAgICAgICMgSWYgd2UgYXJlIGNvbnRpbnVpbmcgYWZ0ZXIgc2VlaW5nIGEgcmlnaHQgY3VybHkgYnJhY2UsIGZsdXNoCiAgICAgICAgICAgICMgYnVmZmVyIHVubGVzcyB3ZSBzZWUgd2hhdCB3ZSBhcmUgbG9va2luZyBmb3IsIGFzIGluCiAgICAgICAgICAgICMgICB9IGVsc2UgLi4uCiAgICAgICAgICAgIGlmICgkcmJyYWNlX2ZvbGxvd2VyKSB7CiAgICAgICAgICAgICAgICBteSAkdG9rZW4gPSAkcnRva2VuX3ZhcnMtPltfVE9LRU5fXTsKICAgICAgICAgICAgICAgIGlmICggISRyYnJhY2VfZm9sbG93ZXItPnskdG9rZW59ICkgewogICAgICAgICAgICAgICAgICAgICRzZWxmLT5lbmRfYmF0Y2goKSBpZiAoICRtYXhfaW5kZXhfdG9fZ28gPj0gMCApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHJicmFjZV9mb2xsb3dlciA9IHVuZGVmOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAoCiAgICAgICAgICAgICAgICAkYmxvY2tfdHlwZSwgICAgICAgJHR5cGVfc2VxdWVuY2UsCiAgICAgICAgICAgICAgICAkaXNfb3BlbmluZ19CTE9DSywgJGlzX2Nsb3NpbmdfQkxPQ0ssCiAgICAgICAgICAgICAgICAkbm9icmVha19CRUZPUkVfQkxPQ0sKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggJHJ0b2tlbl92YXJzLT5bX1RZUEVfU0VRVUVOQ0VfXSApIHsKCiAgICAgICAgICAgICAgICBteSAkdG9rZW4gPSAkcnRva2VuX3ZhcnMtPltfVE9LRU5fXTsKICAgICAgICAgICAgICAgICR0eXBlX3NlcXVlbmNlID0gJHJ0b2tlbl92YXJzLT5bX1RZUEVfU0VRVUVOQ0VfXTsKICAgICAgICAgICAgICAgICRibG9ja190eXBlICAgID0gJHJibG9ja190eXBlX29mX3NlcW5vLT57JHR5cGVfc2VxdWVuY2V9OwoKICAgICAgICAgICAgICAgIGlmICggICAkYmxvY2tfdHlwZQogICAgICAgICAgICAgICAgICAgICYmICR0b2tlbiBlcSAkdHlwZQogICAgICAgICAgICAgICAgICAgICYmICRibG9ja190eXBlIG5lICd0JwogICAgICAgICAgICAgICAgICAgICYmICEkc2VsZi0+W19yc2hvcnRfbmVzdGVkX10tPnskdHlwZV9zZXF1ZW5jZX0gKQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICBpZiAoICR0eXBlIGVxICd7JyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGlzX29wZW5pbmdfQkxPQ0sgICAgID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgJG5vYnJlYWtfQkVGT1JFX0JMT0NLID0gJG5vX2ludGVybmFsX25ld2xpbmVzOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICR0eXBlIGVxICd9JyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGlzX2Nsb3NpbmdfQkxPQ0sgICAgID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgJG5vYnJlYWtfQkVGT1JFX0JMT0NLID0gJG5vX2ludGVybmFsX25ld2xpbmVzOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIyMgZXJyb3IgLSBibG9jayBzaG91bGQgYmUgZW5jbG9zZWQgYnkgY3VybHkgYnJhY2UKICAgICAgICAgICAgICAgICAgICAgICAgREVWRUxfTU9ERSAmJiBGYXVsdCg8PEVPTSk7CmJsb2NrIHR5cGUgJyRibG9ja190eXBlJyBoYXMgdW5leHBlY3RlZCBjb250YWluZXIgdHlwZSAnJHR5cGUnCkVPTQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIGhhbmRsZSBzaWRlIGNvbW1lbnRzCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgaWYgKCRoYXNfc2lkZV9jb21tZW50KSB7CgogICAgICAgICAgICAgICAgIyBpZiBhdCBsYXN0IHRva2VuIC4uLgogICAgICAgICAgICAgICAgaWYgKCAkS3Rva2VuX3ZhcnMgPT0gJEtfbGFzdCApIHsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+c3RvcmVfdG9rZW5fdG9fZ28oICRLdG9rZW5fdmFycywgJHJ0b2tlbl92YXJzICk7CiAgICAgICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGlmIGJlZm9yZSBsYXN0IHRva2VuIC4uLiBkbyBub3QgYWxsb3cgYnJlYWtzIHdoaWNoIHdvdWxkCiAgICAgICAgICAgICAgICAjIHByb21vdGUgYSBzaWRlIGNvbW1lbnQgdG8gYSBibG9jayBjb21tZW50CiAgICAgICAgICAgICAgICBpZiAoICAgJEt0b2tlbl92YXJzID09ICRLX2xhc3QgLSAxCiAgICAgICAgICAgICAgICAgICAgfHwgJEt0b2tlbl92YXJzID09ICRLX2xhc3QgLSAyCiAgICAgICAgICAgICAgICAgICAgJiYgJHJMTC0+WyAkS19sYXN0IC0gMSBdLT5bX1RZUEVfXSBlcSAnYicgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRub19pbnRlcm5hbF9uZXdsaW5lcyA9IDI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgUHJvY2VzcyBub24tYmxhbmsgYW5kIG5vbi1jb21tZW50IHRva2VucyAuLi4KCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIGhhbmRsZSBzZW1pY29sb24KICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgIGlmICggJHR5cGUgZXEgJzsnICkgewoKICAgICAgICAgICAgICAgIG15ICRuZXh0X25vbmJsYW5rX3Rva2VuX3R5cGUgPSAnYic7CiAgICAgICAgICAgICAgICBteSAkbmV4dF9ub25ibGFua190b2tlbiAgICAgID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICAgICAgaWYgKCAkS3Rva2VuX3ZhcnMgPCAkS19sYXN0ICkgewogICAgICAgICAgICAgICAgICAgIG15ICRLbm5iID0gJEt0b2tlbl92YXJzICsgMTsKICAgICAgICAgICAgICAgICAgICAkS25uYisrIGlmICggJHJMTC0+WyRLbm5iXS0+W19UWVBFX10gZXEgJ2InICk7CiAgICAgICAgICAgICAgICAgICAgJG5leHRfbm9uYmxhbmtfdG9rZW4gICAgICA9ICRyTEwtPlskS25uYl0tPltfVE9LRU5fXTsKICAgICAgICAgICAgICAgICAgICAkbmV4dF9ub25ibGFua190b2tlbl90eXBlID0gJHJMTC0+WyRLbm5iXS0+W19UWVBFX107CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAgICRyT3B0c19icmVha19hdF9vbGRfc2VtaWNvbG9uX2JyZWFrcG9pbnRzCiAgICAgICAgICAgICAgICAgICAgJiYgKCAkS3Rva2VuX3ZhcnMgPT0gJEtfZmlyc3QgKQogICAgICAgICAgICAgICAgICAgICYmICRtYXhfaW5kZXhfdG9fZ28gPj0gMAogICAgICAgICAgICAgICAgICAgICYmICFkZWZpbmVkKCRpbmRleF9zdGFydF9vbmVfbGluZV9ibG9jaykgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRzZWxmLT5lbmRfYmF0Y2goKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkc2VsZi0+c3RvcmVfdG9rZW5fdG9fZ28oICRLdG9rZW5fdmFycywgJHJ0b2tlbl92YXJzICk7CgogICAgICAgICAgICAgICAgJHNlbGYtPmVuZF9iYXRjaCgpCiAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAhJG5vX2ludGVybmFsX25ld2xpbmVzCiAgICAgICAgICAgICAgICAgICAgJiYgKCAgISRyT3B0c19rZWVwX2ludGVyaW9yX3NlbWljb2xvbnMKICAgICAgICAgICAgICAgICAgICAgICAgfHwgJEt0b2tlbl92YXJzID49ICRLX2xhc3QgKQogICAgICAgICAgICAgICAgICAgICYmICggJG5leHRfbm9uYmxhbmtfdG9rZW4gbmUgJ30nICkKICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgaGFuZGxlICd7JwogICAgICAgICAgICAjLS0tLS0tLS0tLS0KICAgICAgICAgICAgZWxzaWYgKCRpc19vcGVuaW5nX0JMT0NLKSB7CgogICAgICAgICAgICAgICAgIyBUZW50YXRpdmVseSBvdXRwdXQgdGhpcyB0b2tlbi4gIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlCiAgICAgICAgICAgICAgICAjIGNhbGxpbmcgc3RhcnRpbmdfb25lX2xpbmVfYmxvY2suICBXZSBtYXkgaGF2ZSB0byB1bnN0b3JlCiAgICAgICAgICAgICAgICAjIGl0LCB0aG91Z2gsIGlmIHdlIGhhdmUgdG8gYnJlYWsgYmVmb3JlIGl0LgogICAgICAgICAgICAgICAgJHNlbGYtPnN0b3JlX3Rva2VuX3RvX2dvKCAkS3Rva2VuX3ZhcnMsICRydG9rZW5fdmFycyApOwoKICAgICAgICAgICAgICAgICMgTG9vayBhaGVhZCB0byBzZWUgaWYgd2UgbWlnaHQgZm9ybSBhIG9uZS1saW5lIGJsb2NrLi4KICAgICAgICAgICAgICAgIG15ICR0b29fbG9uZyA9CiAgICAgICAgICAgICAgICAgICRzZWxmLT5zdGFydGluZ19vbmVfbGluZV9ibG9jayggJEt0b2tlbl92YXJzLAogICAgICAgICAgICAgICAgICAgICRLX2xhc3Rfbm9uYmxhbmtfY29kZSwgJEtfbGFzdCApOwogICAgICAgICAgICAgICAgJHNlbGYtPmNsZWFyX2JyZWFrcG9pbnRfdW5kb19zdGFjaygpOwoKICAgICAgICAgICAgICAgICMgdG8gc2ltcGxpZnkgdGhlIGxvZ2ljIGJlbG93LCBzZXQgYSBmbGFnIHRvIGluZGljYXRlIGlmCiAgICAgICAgICAgICAgICAjIHRoaXMgb3BlbmluZyBicmFjZSBpcyBmYXIgZnJvbSB0aGUga2V5d29yZCB3aGljaCBpbnRyb2R1Y2VzIGl0CiAgICAgICAgICAgICAgICBteSAka2V5d29yZF9vbl9zYW1lX2xpbmUgPSAxOwogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICRtYXhfaW5kZXhfdG9fZ28gPj0gMAogICAgICAgICAgICAgICAgICAgICYmIGRlZmluZWQoJEtfbGFzdF9ub25ibGFua19jb2RlKQogICAgICAgICAgICAgICAgICAgICYmICRyTEwtPlskS19sYXN0X25vbmJsYW5rX2NvZGVdLT5bX1RZUEVfXSBlcSAnKScKICAgICAgICAgICAgICAgICAgICAmJiAoICggJHJ0b2tlbl92YXJzLT5bX0xFVkVMX10gPCAkbGV2ZWxzX3RvX2dvWzBdICkKICAgICAgICAgICAgICAgICAgICAgICAgfHwgJHRvb19sb25nICkKICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRrZXl3b3JkX29uX3NhbWVfbGluZSA9IDA7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBCcmVhayBiZWZvcmUgJ3snIGlmIHJlcXVlc3RlZCB3aXRoIC1ibCBvciAtYmxpIGZsYWcKICAgICAgICAgICAgICAgIG15ICR3YW50X2JyZWFrID0gJHNlbGYtPltfcmJyYWNlX2xlZnRfXS0+eyR0eXBlX3NlcXVlbmNlfTsKCiAgICAgICAgICAgICAgICAjIEJ1dCBkbyBub3QgYnJlYWsgaWYgdGhpcyB0b2tlbiBpcyB3ZWxkZWQgdG8gdGhlIGxlZnQKICAgICAgICAgICAgICAgIGlmICggJHRvdGFsX3dlbGRfY291bnQKICAgICAgICAgICAgICAgICAgICAmJiBkZWZpbmVkKCAkc2VsZi0+W19yS193ZWxkX2xlZnRfXS0+eyRLdG9rZW5fdmFyc30gKSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJHdhbnRfYnJlYWsgPSAwOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgQnJlYWsgQkVGT1JFIGFuIG9wZW5pbmcgJ3snIC4uLgogICAgICAgICAgICAgICAgaWYgKAoKICAgICAgICAgICAgICAgICAgICAjIGlmIHJlcXVlc3RlZAogICAgICAgICAgICAgICAgICAgICR3YW50X2JyZWFrCgogICAgICAgICAgICAgICAgICAgICMgYW5kIHdlIHdlcmUgdW5hYmxlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIGEgYmxvY2ssCiAgICAgICAgICAgICAgICAgICAgJiYgIWRlZmluZWQoJGluZGV4X3N0YXJ0X29uZV9saW5lX2Jsb2NrKQoKICAgICAgICAgICAgICAgICAgICAjIG9yIGlmIGl0IHdpbGwgbm90IGJlIG9uIHNhbWUgbGluZSBhcyBpdHMga2V5d29yZCwgc28gdGhhdAogICAgICAgICAgICAgICAgICAgICMgaXQgd2lsbCBiZSBvdXRkZW50ZWQgKGV2YWwudCwgb3ZlcmxvYWQudCksIGFuZCB0aGUgdXNlcgogICAgICAgICAgICAgICAgICAgICMgaGFzIG5vdCBpbnNpc3RlZCBvbiBrZWVwaW5nIGl0IG9uIHRoZSByaWdodAogICAgICAgICAgICAgICAgICAgIHx8ICggICAhJGtleXdvcmRfb25fc2FtZV9saW5lCiAgICAgICAgICAgICAgICAgICAgICAgICYmICEkck9wdHNfb3BlbmluZ19icmFjZV9hbHdheXNfb25fcmlnaHQgKQogICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICMgYnV0IG9ubHkgaWYgYWxsb3dlZAogICAgICAgICAgICAgICAgICAgIGlmICggISRub2JyZWFrX0JFRk9SRV9CTE9DSyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgc2luY2Ugd2UgYWxyZWFkeSBzdG9yZWQgdGhpcyB0b2tlbiwgd2UgbXVzdCB1bnN0b3JlIGl0CiAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT51bnN0b3JlX3Rva2VuX3RvX2dvKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAjIHRoZW4gb3V0cHV0IHRoZSBsaW5lCiAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5lbmRfYmF0Y2goKSBpZiAoICRtYXhfaW5kZXhfdG9fZ28gPj0gMCApOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBhbmQgbm93IHN0b3JlIHRoaXMgdG9rZW4gYXQgdGhlIHN0YXJ0IG9mIGEgbmV3IGxpbmUKICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPnN0b3JlX3Rva2VuX3RvX2dvKCAkS3Rva2VuX3ZhcnMsICRydG9rZW5fdmFycyApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIG5vdyBvdXRwdXQgdGhpcyBsaW5lCiAgICAgICAgICAgICAgICAkc2VsZi0+ZW5kX2JhdGNoKCkKICAgICAgICAgICAgICAgICAgaWYgKCAkbWF4X2luZGV4X3RvX2dvID49IDAgJiYgISRub19pbnRlcm5hbF9uZXdsaW5lcyApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjLS0tLS0tLS0tLS0KICAgICAgICAgICAgIyBoYW5kbGUgJ30nCiAgICAgICAgICAgICMtLS0tLS0tLS0tLQogICAgICAgICAgICBlbHNpZiAoJGlzX2Nsb3NpbmdfQkxPQ0spIHsKCiAgICAgICAgICAgICAgICBteSAkbmV4dF9ub25ibGFua190b2tlbl90eXBlID0gJ2InOwogICAgICAgICAgICAgICAgbXkgJG5leHRfbm9uYmxhbmtfdG9rZW4gICAgICA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgICAgIG15ICRLbm5iOwogICAgICAgICAgICAgICAgaWYgKCAkS3Rva2VuX3ZhcnMgPCAkS19sYXN0ICkgewogICAgICAgICAgICAgICAgICAgICRLbm5iID0gJEt0b2tlbl92YXJzICsgMTsKICAgICAgICAgICAgICAgICAgICAkS25uYisrIGlmICggJHJMTC0+WyRLbm5iXS0+W19UWVBFX10gZXEgJ2InICk7CiAgICAgICAgICAgICAgICAgICAgJG5leHRfbm9uYmxhbmtfdG9rZW4gICAgICA9ICRyTEwtPlskS25uYl0tPltfVE9LRU5fXTsKICAgICAgICAgICAgICAgICAgICAkbmV4dF9ub25ibGFua190b2tlbl90eXBlID0gJHJMTC0+WyRLbm5iXS0+W19UWVBFX107CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBJZiB0aGVyZSBpcyBhIHBlbmRpbmcgb25lLWxpbmUgYmxvY2sgLi4KICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCgkaW5kZXhfc3RhcnRfb25lX2xpbmVfYmxvY2spICkgewoKICAgICAgICAgICAgICAgICAgICAjIEZpeCBmb3IgYjEyMDg6IGlmIGEgc2lkZSBjb21tZW50IGZvbGxvd3MgdGhpcyBjbG9zaW5nCiAgICAgICAgICAgICAgICAgICAgIyBicmFjZSB0aGVuIHdlIG11c3QgaW5jbHVkZSBpdHMgbGVuZ3RoIGluIHRoZSBsZW5ndGggdGVzdAogICAgICAgICAgICAgICAgICAgICMgLi4uIHVubGVzcyB0aGUgLWlzc2wgZmxhZyBpcyBzZXQgKGZpeGVzIGIxMzA3LTEzMDkpLgogICAgICAgICAgICAgICAgICAgICMgQXNzdW1lIGEgbWluaW11bSBvZiAxIGJsYW5rIHNwYWNlIHRvIHRoZSBjb21tZW50LgogICAgICAgICAgICAgICAgICAgIG15ICRhZGRlZF9sZW5ndGggPSAwOwogICAgICAgICAgICAgICAgICAgIGlmICggICAkaGFzX3NpZGVfY29tbWVudAogICAgICAgICAgICAgICAgICAgICAgICAmJiAhJHJPcHRzX2lnbm9yZV9zaWRlX2NvbW1lbnRfbGVuZ3RocwogICAgICAgICAgICAgICAgICAgICAgICAmJiAkbmV4dF9ub25ibGFua190b2tlbl90eXBlIGVxICcjJyApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkYWRkZWRfbGVuZ3RoID0gMSArICRyTEwtPlskS19sYXN0XS0+W19UT0tFTl9MRU5HVEhfXTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgd2UgaGF2ZSB0byB0ZXJtaW5hdGUgaXQgaWYuLgogICAgICAgICAgICAgICAgICAgIGlmICgKCiAgICAgICAgICAgICAgICAgICAgICAgICMgaXQgaXMgdG9vIGxvbmcgKGZpbmFsIGxlbmd0aCBtYXkgYmUgZGlmZmVyZW50IGZyb20KICAgICAgICAgICAgICAgICAgICAgICAgIyBpbml0aWFsIGVzdGltYXRlKS4gbm90ZTogbXVzdCBhbGxvdyAxIHNwYWNlIGZvciB0aGlzCiAgICAgICAgICAgICAgICAgICAgICAgICMgdG9rZW4KICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPmV4Y2Vzc19saW5lX2xlbmd0aCggJGluZGV4X3N0YXJ0X29uZV9saW5lX2Jsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1heF9pbmRleF90b19nbyApICsgJGFkZGVkX2xlbmd0aCA+PSAwCiAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkaW5kZXhfc3RhcnRfb25lX2xpbmVfYmxvY2sgPSB1bmRlZjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBwdXQgYSBicmVhayBiZWZvcmUgdGhpcyBjbG9zaW5nIGN1cmx5IGJyYWNlIGlmIGFwcHJvcHJpYXRlCiAgICAgICAgICAgICAgICAkc2VsZi0+ZW5kX2JhdGNoKCkKICAgICAgICAgICAgICAgICAgaWYgKCAkbWF4X2luZGV4X3RvX2dvID49IDAKICAgICAgICAgICAgICAgICAgICAmJiAhJG5vYnJlYWtfQkVGT1JFX0JMT0NLCiAgICAgICAgICAgICAgICAgICAgJiYgIWRlZmluZWQoJGluZGV4X3N0YXJ0X29uZV9saW5lX2Jsb2NrKSApOwoKICAgICAgICAgICAgICAgICMgc3RvcmUgdGhlIGNsb3NpbmcgY3VybHkgYnJhY2UKICAgICAgICAgICAgICAgICRzZWxmLT5zdG9yZV90b2tlbl90b19nbyggJEt0b2tlbl92YXJzLCAkcnRva2VuX3ZhcnMgKTsKCiAgICAgICAgICAgICAgICAjIG9rLCB3ZSBqdXN0IHN0b3JlZCBhIGNsb3NpbmcgY3VybHkgYnJhY2UuICBPZnRlbiwgYnV0CiAgICAgICAgICAgICAgICAjIG5vdCBhbHdheXMsIHdlIHdhbnQgdG8gZW5kIHRoZSBsaW5lIGltbWVkaWF0ZWx5LgogICAgICAgICAgICAgICAgIyBTbyBub3cgd2UgaGF2ZSB0byBjaGVjayBmb3Igc3BlY2lhbCBjYXNlcy4KCiAgICAgICAgICAgICAgICAjIGlmIHRoaXMgJ30nIHN1Y2Nlc3NmdWxseSBlbmRzIGEgb25lLWxpbmUgYmxvY2suLgogICAgICAgICAgICAgICAgbXkgJG9uZV9saW5lX2Jsb2NrX3R5cGUgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgICAgICBteSAka2VlcF9nb2luZzsKICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCgkaW5kZXhfc3RhcnRfb25lX2xpbmVfYmxvY2spICkgewoKICAgICAgICAgICAgICAgICAgICAjIFJlbWVtYmVyIHRoZSB0eXBlIG9mIHRva2VuIGp1c3QgYmVmb3JlIHRoZQogICAgICAgICAgICAgICAgICAgICMgb3BlbmluZyBicmFjZS4gIEl0IHdvdWxkIGJlIG1vcmUgZ2VuZXJhbCB0byB1c2UKICAgICAgICAgICAgICAgICAgICAjIGEgc3RhY2ssIGJ1dCB0aGlzIHdpbGwgd29yayBmb3Igb25lLWxpbmUgYmxvY2tzLgogICAgICAgICAgICAgICAgICAgICMgYzE0NjEgZml4CiAgICAgICAgICAgICAgICAgICAgbXkgJEtvICA9ICRzZWxmLT5bX0tfb3BlbmluZ19jb250YWluZXJfXS0+eyR0eXBlX3NlcXVlbmNlfTsKICAgICAgICAgICAgICAgICAgICBteSAkS29tID0gJHNlbGYtPktfcHJldmlvdXNfbm9uYmxhbmsoJEtvKTsKICAgICAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQoJEtvbSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRvbmVfbGluZV9ibG9ja190eXBlID0gJHJMTC0+WyRLb21dLT5bX1RZUEVfXTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgd2UgaGF2ZSB0byBhY3R1YWxseSBtYWtlIGl0IGJ5IHJlbW92aW5nIHRlbnRhdGl2ZQogICAgICAgICAgICAgICAgICAgICMgYnJlYWtzIHRoYXQgd2VyZSBzZXQgd2l0aGluIGl0CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPnVuZG9fZm9yY2VkX2JyZWFrcG9pbnRfc3RhY2soMCk7CgogICAgICAgICAgICAgICAgICAgICMgRm9yIC1scCwgZXh0ZW5kIHRoZSBub2JyZWFrIHRvIGluY2x1ZGUgYSB0cmFpbGluZwogICAgICAgICAgICAgICAgICAgICMgdGVybWluYWwgJywnLiAgVGhpcyBpcyBiZWNhdXNlIHRoZSAtbHAgaW5kZW50YXRpb24gd2FzCiAgICAgICAgICAgICAgICAgICAgIyBub3Qga25vd24gd2hlbiBtYWtpbmcgb25lLWxpbmUgYmxvY2tzLCBzbyB3ZSBtYXkgYmUgYWJsZQogICAgICAgICAgICAgICAgICAgICMgdG8gbW92ZSB0aGUgbGluZSBiYWNrIHRvIGZpdC4gIE90aGVyd2lzZSB3ZSBtYXkgY3JlYXRlIGEKICAgICAgICAgICAgICAgICAgICAjIG5lZWRsZXNzbHkgc3RyYW5kZWQgY29tbWEgb24gdGhlIG5leHQgbGluZS4KICAgICAgICAgICAgICAgICAgICBteSAkaWVuZF9ub2JyZWFrID0gJG1heF9pbmRleF90b19nbyAtIDE7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAgICRyT3B0c19saW5lX3VwX3BhcmVudGhlc2VzCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRuZXh0X25vbmJsYW5rX3Rva2VuX3R5cGUgZXEgJywnCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRLbm5iIGVxICRLX2xhc3QgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHBfc2Vxbm8gPSAkcGFyZW50X3NlcW5vX3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dOwogICAgICAgICAgICAgICAgICAgICAgICBteSAkaXNfZXhjbHVkZWQgPQogICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5bX3Jpc19leGNsdWRlZF9scF9jb250YWluZXJfXS0+eyRwX3NlcW5vfTsKICAgICAgICAgICAgICAgICAgICAgICAgJGllbmRfbm9icmVhayA9ICRtYXhfaW5kZXhfdG9fZ28gaWYgKCAhJGlzX2V4Y2x1ZGVkICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+c2V0X25vYnJlYWtzKCAkaW5kZXhfc3RhcnRfb25lX2xpbmVfYmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICRpZW5kX25vYnJlYWsgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBzYXZlIHN0YXJ0aW5nIGJsb2NrIGluZGV4ZXMgc28gdGhhdCBzdWIgY29ycmVjdF9scCBjYW4KICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGFuZCBhZGp1c3QgLWxwIGluZGVudGF0aW9uIChjMDk4KQogICAgICAgICAgICAgICAgICAgIHB1c2ggQHskcmlfc3RhcnRpbmdfb25lX2xpbmVfYmxvY2t9LAogICAgICAgICAgICAgICAgICAgICAgJGluZGV4X3N0YXJ0X29uZV9saW5lX2Jsb2NrOwoKICAgICAgICAgICAgICAgICAgICAjIHRoZW4gcmUtaW5pdGlhbGl6ZSBmb3IgdGhlIG5leHQgb25lLWxpbmUgYmxvY2sKICAgICAgICAgICAgICAgICAgICAkaW5kZXhfc3RhcnRfb25lX2xpbmVfYmxvY2sgPSB1bmRlZjsKCiAgICAgICAgICAgICAgICAgICAgIyB0aGVuIGRlY2lkZSBpZiB3ZSB3YW50IHRvIGJyZWFrIGFmdGVyIHRoZSAnfScgLi4KICAgICAgICAgICAgICAgICAgICAjIFdlIHdpbGwga2VlcCBnb2luZyB0byBhbGxvdyBjZXJ0YWluIGJyYWNlIGZvbGxvd2VycyBhcyBpbjoKICAgICAgICAgICAgICAgICAgICAjICAgZG8geyAkaWZjbG9zZWQgPSAxOyBsYXN0IH0gdW5sZXNzICRsb3Npbmc7CiAgICAgICAgICAgICAgICAgICAgIwogICAgICAgICAgICAgICAgICAgICMgQnV0IG1ha2UgYSBsaW5lIGJyZWFrIGlmIHRoZSBjdXJseSBlbmRzIGEKICAgICAgICAgICAgICAgICAgICAjIHNpZ25pZmljYW50IGJsb2NrOgogICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlzX2Jsb2NrX3dpdGhvdXRfc2VtaWNvbG9ueyRibG9ja190eXBlfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRm9sbG93IHVzZXJzIGJyZWFrIHBvaW50IGZvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvbmUgbGluZSBibG9jayB0eXBlcyBVICYgRywgc3VjaCBhcyBhICd0cnknIGJsb2NrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAkb25lX2xpbmVfYmxvY2tfdHlwZSA9fiAvXltVR10kLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJEt0b2tlbl92YXJzID09ICRLX2xhc3QKICAgICAgICAgICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBuZWVkbGVzcyBzZW1pY29sb24gZm9sbG93cyB3ZSBoYW5kbGUgaXQgbGF0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJG5leHRfbm9uYmxhbmtfdG9rZW4gbmUgJzsnCiAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+ZW5kX2JhdGNoKCkKICAgICAgICAgICAgICAgICAgICAgICAgICB1bmxlc3MgKCRub19pbnRlcm5hbF9uZXdsaW5lcyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgc2V0IHN0cmluZyBpbmRpY2F0aW5nIHdoYXQgd2UgbmVlZCB0byBsb29rIGZvciBicmFjZSBmb2xsb3dlcgogICAgICAgICAgICAgICAgIyB0b2tlbnMKICAgICAgICAgICAgICAgIGlmICggJGlzX2lmX3VubGVzc19lbHNpZl9lbHNleyRibG9ja190eXBlfSApIHsKICAgICAgICAgICAgICAgICAgICAkcmJyYWNlX2ZvbGxvd2VyID0gdW5kZWY7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoICRibG9ja190eXBlIGVxICdkbycgKSB7CiAgICAgICAgICAgICAgICAgICAgJHJicmFjZV9mb2xsb3dlciA9IFwlaXNfZG9fZm9sbG93ZXI7CiAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+dGlnaHRfcGFyZW5fZm9sbG93cyggJEtfdG9fZ29bMF0sICRLdG9rZW5fdmFycyApCiAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkcmJyYWNlX2ZvbGxvd2VyID0geyAnKScgPT4gMSB9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGFkZGVkIGV2YWwgZm9yIGJvcnJpcy50CiAgICAgICAgICAgICAgICBlbHNpZiAoJGlzX3NvcnRfbWFwX2dyZXBfZXZhbHskYmxvY2tfdHlwZX0KICAgICAgICAgICAgICAgICAgICB8fCAkb25lX2xpbmVfYmxvY2tfdHlwZSBlcSAnRycgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRyYnJhY2VfZm9sbG93ZXIgPSB1bmRlZjsKICAgICAgICAgICAgICAgICAgICAka2VlcF9nb2luZyAgICAgID0gMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGFub255bW91cyBzdWIKICAgICAgICAgICAgICAgIGVsc2lmICggJHNlbGYtPltfcmlzX2FzdWJfYmxvY2tfXS0+eyR0eXBlX3NlcXVlbmNlfSApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJG9uZV9saW5lX2Jsb2NrX3R5cGUpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICRyYnJhY2VfZm9sbG93ZXIgPSBcJWlzX2Fub25fc3ViXzFfYnJhY2VfZm9sbG93ZXI7CgogICAgICAgICAgICAgICAgICAgICAgICAjIEV4Y2VwdGlvbnMgdG8gaGVscCBrZWVwIC1scCBpbnRhY3QsIHNlZSBnaXQgIzc0IC4uLgogICAgICAgICAgICAgICAgICAgICAgICAjIEV4Y2VwdGlvbiAxOiBmb2xsb3dlZCBieSAnfScgb24gdGhpcyBsaW5lCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggICAkS3Rva2VuX3ZhcnMgPCAkS19sYXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkbmV4dF9ub25ibGFua190b2tlbiBlcSAnfScgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmJyYWNlX2ZvbGxvd2VyID0gdW5kZWY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAka2VlcF9nb2luZyAgICAgID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBFeGNlcHRpb24gMjogZm9sbG93ZWQgYnkgJ30nIG9uIG5leHQgbGluZSBpZiAtbHAgc2V0LgogICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSAtbHAgcmVxdWlyZW1lbnQgYWxsb3dzIHRoZSBmb3JtYXR0aW5nIHRvIGZvbGxvdwogICAgICAgICAgICAgICAgICAgICAgICAjIG9sZCBicmVha3Mgd2hlbiAtbHAgaXMgbm90IHVzZWQsIG1pbmltaXppbmcgY2hhbmdlcy4KICAgICAgICAgICAgICAgICAgICAgICAgIyBGaXhlcyBpc3N1ZSBjMDg3LgogICAgICAgICAgICAgICAgICAgICAgICBlbHNpZiAoJEt0b2tlbl92YXJzID09ICRLX2xhc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRyT3B0c19saW5lX3VwX3BhcmVudGhlc2VzICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJEtfY2xvc2luZ19jb250YWluZXIgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+W19LX2Nsb3NpbmdfY29udGFpbmVyX107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkcF9zZXFubyA9ICRwYXJlbnRfc2Vxbm9fdG9fZ29bJG1heF9pbmRleF90b19nb107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkS2MgICAgICA9ICRLX2Nsb3NpbmdfY29udGFpbmVyLT57JHBfc2Vxbm99OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGlzX2V4Y2x1ZGVkID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPltfcmlzX2V4Y2x1ZGVkX2xwX2NvbnRhaW5lcl9dLT57JHBfc2Vxbm99OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGtlZXBfZ29pbmcgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICAgICAgZGVmaW5lZCgkS2MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkckxMLT5bJEtjXS0+W19UT0tFTl9dIGVxICd9JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgISRpc19leGNsdWRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJEtjIC0gJEt0b2tlbl92YXJzIDw9IDIgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyYnJhY2VfZm9sbG93ZXIgPSB1bmRlZiBpZiAoJGtlZXBfZ29pbmcpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMgbm90IGFuIGV4Y2VwdGlvbgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkcmJyYWNlX2ZvbGxvd2VyID0gXCVpc19hbm9uX3N1Yl9icmFjZV9mb2xsb3dlcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBOb25lIG9mIHRoZSBhYm92ZTogc3BlY2lmeSB3aGF0IGNhbiBmb2xsb3cgYSBjbG9zaW5nCiAgICAgICAgICAgICAgICAjIGJyYWNlIG9mIGEgYmxvY2sgd2hpY2ggaXMgbm90IGFuCiAgICAgICAgICAgICAgICAjIGlmL2Vsc2lmL2Vsc2UvZG8vc29ydC9tYXAvZ3JlcC9ldmFsCiAgICAgICAgICAgICAgICAjIFRlc3RmaWxlczoKICAgICAgICAgICAgICAgICMgJ1Rvb2xiYXIucG0nLCAnTWVudWJhci5wbScsIGJsZXNzLnQsICczcnVsZXMucGwnLCAnYnJlYWsxLnQKICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRyYnJhY2VfZm9sbG93ZXIgPSBcJWlzX290aGVyX2JyYWNlX2ZvbGxvd2VyOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgU2VlIGlmIGFuIGVsc2lmIGJsb2NrIGlzIGZvbGxvd2VkIGJ5IGFub3RoZXIgZWxzaWYgb3IgZWxzZTsKICAgICAgICAgICAgICAgICMgY29tcGxhaW4gaWYgbm90LgogICAgICAgICAgICAgICAgaWYgKCAkYmxvY2tfdHlwZSBlcSAnZWxzaWYnICkgewoKICAgICAgICAgICAgICAgICAgICAjIG1vcmUgY29kZSBvbiB0aGlzIGxpbmUgPyAoIHRoaXMgaXMgdW51c3VhbCApCiAgICAgICAgICAgICAgICAgICAgaWYgKCAgICRuZXh0X25vbmJsYW5rX3Rva2VuX3R5cGUgbmUgJ2InCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRuZXh0X25vbmJsYW5rX3Rva2VuX3R5cGUgbmUgJyMnICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICMgY2hlY2sgZm9yICdlbHNpZicgb3IgJ2Vsc2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISRpc19lbHNpZl9lbHNleyRuZXh0X25vbmJsYW5rX3Rva2VufSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlX2xvZ2ZpbGVfZW50cnkoIihObyBlbHNlIGJsb2NrKVxuIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQgd2UgY2Fubm90IGFkZCBhIG1pc3NpbmcgZWxzZSBibG9jawogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbiB0aGlzIGNhc2UgYmVjYXVzZSBtb3JlIGNvZGUgZm9sbG93cyB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2xvc2luZyBlbHNpZiBicmFjZSBvbiB0aGUgc2FtZSBsaW5lLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkck9wdHNfd2Fybl9taXNzaW5nX2Vsc2UgJiYgIURFVkVMX01PREUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGxubyA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkckxMLT5bJEt0b2tlbl92YXJzXS0+W19MSU5FX0lOREVYX10gKyAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcoIiRsbm86IE5vIGVsc2UgYmxvY2tcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIG5vIG1vcmUgY29kZSBvbiB0aGlzIGxpbmUsIHNvIGNoZWNrIG9uIG5leHQgbGluZQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkS19uZXh0ID0gJHNlbGYtPktfbmV4dF9jb2RlKCRLX2xhc3QpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICAgIWRlZmluZWQoJEtfbmV4dCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRyTEwtPlskS19uZXh0XS0+W19UWVBFX10gbmUgJ2snCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhJGlzX2Vsc2lmX2Vsc2V7ICRyTEwtPlskS19uZXh0XS0+W19UT0tFTl9dIH0gKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkS19kYW5nbGluZ19lbHNpZiA9ICRLdG9rZW5fdmFyczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlX2xvZ2ZpbGVfZW50cnkoIihObyBlbHNlIGJsb2NrKVxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRyT3B0c193YXJuX21pc3NpbmdfZWxzZSAmJiAhREVWRUxfTU9ERSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkbG5vID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyTEwtPlskS3Rva2VuX3ZhcnNdLT5bX0xJTkVfSU5ERVhfXSArIDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRyT3B0c19hZGRfbWlzc2luZ19lbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJGxubzogQWRkaW5nIG1pc3NpbmcgZWxzZSBibG9ja1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKAoiJGxubzogTm8gZWxzZSBibG9jayAodXNlIC1hbWUgdG8gYWRkIG9uZSlcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBrZWVwIGdvaW5nIGFmdGVyIGNlcnRhaW4gYmxvY2sgdHlwZXMgKG1hcCxzb3J0LGdyZXAsZXZhbCkKICAgICAgICAgICAgICAgICMgYWRkZWQgZXZhbCBmb3IgYm9ycmlzLnQKICAgICAgICAgICAgICAgIGlmICgka2VlcF9nb2luZykgewoKICAgICAgICAgICAgICAgICAgICAjIGtlZXAgZ29pbmcKICAgICAgICAgICAgICAgICAgICAkcmJyYWNlX2ZvbGxvd2VyID0gdW5kZWY7CgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgaWYgbm8gbW9yZSB0b2tlbnMsIHBvc3Rwb25lIGRlY2lzaW9uIHVudGlsIHJlLWVudGVyaW5nCiAgICAgICAgICAgICAgICBlbHNpZiAoICggJG5leHRfbm9uYmxhbmtfdG9rZW5fdHlwZSBlcSAnYicgKQogICAgICAgICAgICAgICAgICAgICYmICRyT3B0c19hZGRfbmV3bGluZXMgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmICggISRyYnJhY2VfZm9sbG93ZXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5lbmRfYmF0Y2goKQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJG5vX2ludGVybmFsX25ld2xpbmVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkbWF4X2luZGV4X3RvX2dvID49IDAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoJHJicmFjZV9mb2xsb3dlcikgewoKICAgICAgICAgICAgICAgICAgICBpZiAoICRyYnJhY2VfZm9sbG93ZXItPnskbmV4dF9ub25ibGFua190b2tlbn0gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIEZpeCBmb3IgYjEzODU6IGtlZXAgYnJlYWsgYWZ0ZXIgYSBjb21tYSBmb2xsb3dpbmcgYQogICAgICAgICAgICAgICAgICAgICAgICAjICdkbycgYmxvY2suIFRoaXMgY291bGQgYWxzbyBiZSB1c2VkIGZvciBvdGhlciBibG9jawogICAgICAgICAgICAgICAgICAgICAgICAjIHR5cGVzLCBidXQgdGhhdCB3b3VsZCBjYXVzZSBhIHNpZ25pZmljYW50IGNoYW5nZSBpbgogICAgICAgICAgICAgICAgICAgICAgICAjIGV4aXN0aW5nIGZvcm1hdHRpbmcgd2l0aG91dCBtdWNoIGJlbmVmaXQuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggICAkbmV4dF9ub25ibGFua190b2tlbl90eXBlIGVxICcsJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJEtubmIgZXEgJEtfbGFzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJGJsb2NrX3R5cGUgZXEgJ2RvJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHJPcHRzX2FkZF9uZXdsaW5lcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHNlbGYtPmlzX3RyYWlsaW5nX2NvbW1hKCRLbm5iKSApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5bX3JicmVha19hZnRlcl9LbGFzdF9dLT57JEtfbGFzdH0gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+ZW5kX2JhdGNoKCkKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRub19pbnRlcm5hbF9uZXdsaW5lcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJG1heF9pbmRleF90b19nbyA+PSAwICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkcmJyYWNlX2ZvbGxvd2VyID0gdW5kZWY7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPmVuZF9iYXRjaCgpCiAgICAgICAgICAgICAgICAgICAgICBpZiAoICEkbm9faW50ZXJuYWxfbmV3bGluZXMgJiYgJG1heF9pbmRleF90b19nbyA+PSAwICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9ICMjIGVuZCB0cmVhdG1lbnQgb2YgY2xvc2luZyBibG9jayB0b2tlbgoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIGhhbmRsZSBoZXJlX2RvYyB0YXJnZXQgc3RyaW5nCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgZWxzaWYgKCAkdHlwZSBlcSAnaCcgKSB7CgogICAgICAgICAgICAgICAgIyBubyBuZXdsaW5lcyBhZnRlciBzZWVpbmcgaGVyZS10YXJnZXQKICAgICAgICAgICAgICAgICRub19pbnRlcm5hbF9uZXdsaW5lcyA9IDI7CiAgICAgICAgICAgICAgICAkc2VsZi0+c3RvcmVfdG9rZW5fdG9fZ28oICRLdG9rZW5fdmFycywgJHJ0b2tlbl92YXJzICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIGhhbmRsZSBhbGwgb3RoZXIgdG9rZW4gdHlwZXMKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICRzZWxmLT5zdG9yZV90b2tlbl90b19nbyggJEt0b2tlbl92YXJzLCAkcnRva2VuX3ZhcnMgKTsKCiAgICAgICAgICAgICAgICAjIGJyZWFrIGFmdGVyIGEgbGFiZWwgaWYgcmVxdWVzdGVkCiAgICAgICAgICAgICAgICBpZiAoICAgJHJPcHRzX2JyZWFrX2FmdGVyX2xhYmVscwogICAgICAgICAgICAgICAgICAgICYmICR0eXBlIGVxICdKJwogICAgICAgICAgICAgICAgICAgICYmICRyT3B0c19icmVha19hZnRlcl9sYWJlbHMgPT0gMSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPmVuZF9iYXRjaCgpCiAgICAgICAgICAgICAgICAgICAgICB1bmxlc3MgKCRub19pbnRlcm5hbF9uZXdsaW5lcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcmVtZW1iZXIgcHJldmlvdXMgbm9uYmxhbmssIG5vbi1jb21tZW50IE9VVFBVVCB0b2tlbgogICAgICAgICAgICAkS19sYXN0X25vbmJsYW5rX2NvZGUgPSAkS3Rva2VuX3ZhcnM7CgogICAgICAgIH0gIyMgZW5kIG9mIGxvb3Agb3ZlciBhbGwgdG9rZW5zIGluIHRoaXMgbGluZQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBwcm9jZXNzX2xpbmVfaW5uZXJfbG9vcAoKfSAjIyBlbmQgY2xvc3VyZSBwcm9jZXNzX2xpbmVfb2ZfQ09ERQoKc3ViIHRpZ2h0X3BhcmVuX2ZvbGxvd3MgewoKICAgIG15ICggJHNlbGYsICRLX3RvX2dvXzAsICRLX2ljICkgPSBAXzsKCiAgICAjIEdpdmVuOgogICAgIyAgICRLX3RvX2dvXzAgPSBmaXJzdCB0b2tlbiBpbmRleCBLIG9mIHRoaXMgb3V0cHV0IGJhdGNoICg9S190b19nb1swXSkKICAgICMgICAkS19pYyA9IGluZGV4IG9mIHRoZSBjbG9zaW5nIGRvIGJyYWNlICg9S190b19nb1skbWF4X2luZGV4X3RvX2dvXSkKICAgICMgUmV0dXJuOgogICAgIyAgIGZhbHNlIGlmIHdlIHdhbnQgYSBicmVhayBhZnRlciB0aGUgY2xvc2luZyBkbyBicmFjZQogICAgIyAgIHRydWUgaWYgd2UgZG8gbm90IHdhbnQgYSBicmVhayBhZnRlciB0aGUgY2xvc2luZyBkbyBicmFjZQoKICAgICMgV2UgYXJlIGF0IHRoZSBjbG9zaW5nIGJyYWNlIG9mIGEgJ2RvJyBibG9jay4gIFNlZSBpZiB0aGlzIGJyYWNlIGlzCiAgICAjIGZvbGxvd2VkIGJ5IGEgY2xvc2luZyBwYXJlbiwgYW5kIGlmIHNvLCBzZXQgYSBmbGFnIHdoaWNoIGluZGljYXRlcwogICAgIyB0aGF0IHdlIGRvIG5vdCB3YW50IGEgbGluZSBicmVhayBiZXR3ZWVuIHRoZSAnfScgYW5kICcpJy4KCiAgICAjIHh4eHh4ICggLi4uLi4uIGRvIHsgIC4uLiB9ICkgewogICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgXi0tLS0tLS1sb29raW5nIGF0IHRoaXMgYnJhY2UsIEtfaWMKCiAgICAjIFN1YnNjcmlwdCBub3RhdGlvbjoKICAgICMgX2kgPSBpbm5lciBjb250YWluZXIgKGJyYWNlcyBpbiB0aGlzIGNhc2UpCiAgICAjIF9vID0gb3V0ZXIgY29udGFpbmVyIChwYXJlbnMgaW4gdGhpcyBjYXNlKQogICAgIyBfaW8gPSBpbm5lciBvcGVuaW5nID0gJ3snCiAgICAjIF9pYyA9IGlubmVyIGNsb3NpbmcgPSAnfScKICAgICMgX29vID0gb3V0ZXIgb3BlbmluZyA9ICcoJwogICAgIyBfb2MgPSBvdXRlciBjbG9zaW5nID0gJyknCgogICAgIyAgICAgICB8LS1LX29vICAgICAgICAgICAgICAgICB8LS1LX29jICA9IG91dGVyIGNvbnRhaW5lcgogICAgIyB4eHh4eCAoIC4uLi4uLiBkbyB7ICAuLi4uLi4gfSApIHsKICAgICMgICAgICAgICAgICAgICAgICAgfC0tS19pbyAgIHwtLUtfaWMgICAgPSBpbm5lciBjb250YWluZXIKCiAgICAjIEluIGdlbmVyYWwsIHRoZSBzYWZlIHRoaW5nIHRvIGRvIGlzIHJldHVybiBhICdmYWxzZScgdmFsdWUKICAgICMgaWYgdGhlIHN0YXRlbWVudCBhcHBlYXJzIHRvIGJlIGNvbXBsZXguICBUaGlzIHdpbGwgaGF2ZQogICAgIyB0aGUgZG93bnN0cmVhbSBzaWRlLWVmZmVjdCBvZiBvcGVuaW5nIHVwIG91dGVyIGNvbnRhaW5lcnMKICAgICMgdG8gaGVscCBtYWtlIGNvbXBsZXggY29kZSByZWFkYWJsZS4gIEJ1dCBmb3Igc2ltcGxlcgogICAgIyBkbyBibG9ja3MgaXQgY2FuIGJlIHByZWZlcmFibGUgdG8ga2VlcCB0aGUgY29kZSBjb21wYWN0CiAgICAjIGJ5IHJldHVybmluZyBhICd0cnVlJyB2YWx1ZS4KCiAgICByZXR1cm4gdW5sZXNzIGRlZmluZWQoJEtfaWMpOwogICAgbXkgJHJMTCA9ICRzZWxmLT5bX3JMTF9dOwoKICAgICMgd2Ugc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGF0IGEgY2xvc2luZyBibG9jawogICAgbXkgJHNlcW5vX2kgPSAkckxMLT5bJEtfaWNdLT5bX1RZUEVfU0VRVUVOQ0VfXTsKICAgIHJldHVybiB1bmxlc3MgKCRzZXFub19pKTsgICAgIyBzaG91bGRuJ3QgaGFwcGVuOwoKICAgICMgVGhpcyBvbmx5IGFwcGxpZXMgaWYgdGhlIG5leHQgbm9uYmxhbmsgaXMgYSAnKScKICAgIG15ICRLX29jID0gJHNlbGYtPktfbmV4dF9ub25ibGFuaygkS19pYyk7CiAgICByZXR1cm4gdW5sZXNzIGRlZmluZWQoJEtfb2MpOwogICAgbXkgJHRva2VuX25leHQgPSAkckxMLT5bJEtfb2NdLT5bX1RPS0VOX107CiAgICByZXR1cm4gdW5sZXNzICggJHRva2VuX25leHQgZXEgJyknICk7CgogICAgbXkgJHNlcW5vX28gPSAkckxMLT5bJEtfb2NdLT5bX1RZUEVfU0VRVUVOQ0VfXTsKICAgIG15ICRLX2lvICAgID0gJHNlbGYtPltfS19vcGVuaW5nX2NvbnRhaW5lcl9dLT57JHNlcW5vX2l9OwogICAgbXkgJEtfb28gICAgPSAkc2VsZi0+W19LX29wZW5pbmdfY29udGFpbmVyX10tPnskc2Vxbm9fb307CiAgICByZXR1cm4gdW5sZXNzICggZGVmaW5lZCgkS19pbykgJiYgZGVmaW5lZCgkS19vbykgKTsKCiAgICAjIFJVTEUgMTogRG8gbm90IGJyZWFrIGJlZm9yZSBhIGNsb3Npbmcgc2lnbmF0dXJlIHBhcmVuCiAgICAjIChyZWdhcmRsZXNzIG9mIGNvbXBsZXhpdHkpLiAgVGhpcyBpcyBhIGZpeCBmb3IgaXNzdWUgZ2l0IzIyLgogICAgIyBMb29raW5nIGZvciBzb21ldGhpbmcgbGlrZToKICAgICMgICBzdWIgeHh4ICggLi4uIGRvIHsgIC4uLiB9ICkgewogICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeLS0tLS0gbmV4dCBibG9ja190eXBlCiAgICBteSAkS190ZXN0ID0gJHNlbGYtPktfbmV4dF9ub25ibGFuaygkS19vYyk7CiAgICBpZiAoIGRlZmluZWQoJEtfdGVzdCkgJiYgJHJMTC0+WyRLX3Rlc3RdLT5bX1RZUEVfXSBlcSAneycgKSB7CiAgICAgICAgbXkgJHNlcW5vX3Rlc3QgPSAkckxMLT5bJEtfdGVzdF0tPltfVFlQRV9TRVFVRU5DRV9dOwogICAgICAgIGlmICgkc2Vxbm9fdGVzdCkgewogICAgICAgICAgICBpZiAoICAgJHNlbGYtPltfcmlzX2FzdWJfYmxvY2tfXS0+eyRzZXFub190ZXN0fQogICAgICAgICAgICAgICAgfHwgJHNlbGYtPltfcmlzX3N1Yl9ibG9ja19dLT57JHNlcW5vX3Rlc3R9ICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBSVUxFIDI6IEJyZWFrIGlmIHRoZSBjb250ZW50cyB3aXRoaW4gYnJhY2VzIGFwcGVhcnMgdG8gYmUgJ2NvbXBsZXgnLiAgV2UKICAgICMgYmFzZSB0aGlzIGRlY2lzaW9uIG9uIHRoZSBudW1iZXIgb2YgdG9rZW5zIGJldHdlZW4gYnJhY2VzLgoKICAgICMgeHh4eHggKCAuLi4gZG8geyAgLi4uIH0gKSB7CiAgICAjICAgICAgICAgICAgICAgICBeXl5eXl4KCiAgICAjIEFsdGhvdWdoIHZlcnkgc2ltcGxlLCBpdCBoYXMgdGhlIGFkdmFudGFnZXMgb2YgKDEpIGJlaW5nIGluc2Vuc2l0aXZlIHRvCiAgICAjIGNoYW5nZXMgaW4gbGVuZ3RocyBvZiBpZGVudGlmaWVyIG5hbWVzLCAoMikgZWFzeSB0byB1bmRlcnN0YW5kLCBpbXBsZW1lbnQKICAgICMgYW5kIHRlc3QuICBBIHRlc3QgY2FzZSBmb3IgdGhpcyBpcyAndC9zbmlwcGV0cy9sb25nX2xpbmUuaW4nLgoKICAgICMgRXhhbXBsZTogJEtfaWMgLSAkS19vbyA9IDkgICAgICAgW1Bhc3MgUnVsZSAyXQogICAgIyBpZiAoIGRvIHsgJDIgIX4gLyYvIH0gKSB7IC4uLiB9CgogICAgIyBFeGFtcGxlOiAkS19pYyAtICRLX29vID0gMTAgICAgICBbUGFzcyBSdWxlIDJdCiAgICAjIGZvciAoIHNwbGl0IC9ccyo9ezcwLH1ccyovLCBkbyB7IGxvY2FsICQvOyA8REFUQT4gfSkgeyAuLi4gfQoKICAgICMgRXhhbXBsZTogJEtfaWMgLSAkS19vbyA9IDIwICAgICAgW0ZhaWwgUnVsZSAyXQogICAgIyB0ZXN0X3plcm9fYXJncyggImRvLXJldHVybmVkIGxpc3Qgc2xpY2UiLCBkbyB7ICggMTAsIDExIClbIDIsIDMgXTsgfSk7CgogICAgcmV0dXJuIGlmICggJEtfaWMgLSAkS19pbyA+IDE2ICk7CgogICAgIyBSVUxFIDM6IGJyZWFrIGlmIHRoZSBjb2RlIGJldHdlZW4gdGhlIG9wZW5pbmcgJygnIGFuZCB0aGUgJ3snIGlzICdjb21wbGV4JwogICAgIyBBcyB3aXRoIHRoZSBwcmV2aW91cyBydWxlLCB3ZSBkZWNpZGUgYmFzZWQgb24gdGhlIHRva2VuIGNvdW50CgogICAgIyB4eHh4eCAoIC4uLiBkbyB7ICAuLi4gfSApIHsKICAgICMgICAgICAgIF5eXl5eXl5eCgogICAgIyBFeGFtcGxlOiAkS19pYyAtICRLX29vID0gOSAgICAgICBbUGFzcyBSdWxlIDJdCiAgICAjICAgICAgICAgICRLX2lvIC0gJEtfb28gPSA0ICAgICAgIFtQYXNzIFJ1bGUgM10KICAgICMgaWYgKCBkbyB7ICQyICF+IC8mLyB9ICkgeyAuLi4gfQoKICAgICMgRXhhbXBsZTogJEtfaWMgLSAkS19vbyA9IDEwICAgIFtQYXNzIHJ1bGUgMl0KICAgICMgICAgICAgICAgJEtfaW8gLSAkS19vbyA9IDkgICAgIFtQYXNzIHJ1bGUgM10KICAgICMgZm9yICggc3BsaXQgL1xzKj17NzAsfVxzKi8sIGRvIHsgbG9jYWwgJC87IDxEQVRBPiB9KSB7IC4uLiB9CgogICAgcmV0dXJuIGlmICggJEtfaW8gLSAkS19vbyA+IDkgKTsKCiAgICAjIFJVTEUgNDogQnJlYWsgaWYgd2UgaGF2ZSBhbHJlYWR5IGJyb2tlbiB0aGlzIGJhdGNoIG9mIG91dHB1dCB0b2tlbnMKICAgIHJldHVybiBpZiAoICRLX29vIDwgJEtfdG9fZ29fMCApOwoKICAgICMgUlVMRSA1OiBCcmVhayBpZiBpbnB1dCBpcyBub3Qgb24gb25lIGxpbmUKICAgICMgRm9yIGV4YW1wbGUsIHdlIHdpbGwgc2V0IHRoZSBmbGFnIGZvciB0aGUgZm9sbG93aW5nIGV4cHJlc3Npb24KICAgICMgd3JpdHRlbiBpbiBvbmUgbGluZToKCiAgICAjIFRoaXMgaGFzOiAkS19pYyAtICRLX29vID0gMTAgICAgW1Bhc3MgcnVsZSAyXQogICAgIyAgICAgICAgICAgJEtfaW8gLSAkS19vbyA9IDggICAgIFtQYXNzIHJ1bGUgM10KICAgICMgICAkc2VsZi0+ZGVidWcoICdFcnJvcjogJyAuIGRvIHsgbG9jYWwgJC87IDwkZXJyPiB9ICk7CgogICAgIyBidXQgd2UgYnJlYWsgYWZ0ZXIgdGhlIGJyYWNlIGlmIGl0IGlzIG9uIG11bHRpcGxlIGxpbmVzIG9uIGlucHV0LCBzaW5jZQogICAgIyB0aGUgdXNlciBtYXkgcHJlZmVyIGl0IG9uIG11bHRpcGxlIGxpbmVzOgoKICAgICMgW0ZhaWwgcnVsZSA1XQogICAgIyAgICRzZWxmLT5kZWJ1ZygKICAgICMgICAgICAgJ0Vycm9yOiAnIC4gZG8geyBsb2NhbCAkLzsgPCRlcnI+IH0KICAgICMgICApOwoKICAgIGlmICggISRyT3B0c19pZ25vcmVfb2xkX2JyZWFrcG9pbnRzICkgewogICAgICAgIG15ICRpbGluZV9vbyA9ICRyTEwtPlskS19vb10tPltfTElORV9JTkRFWF9dOwogICAgICAgIG15ICRpbGluZV9vYyA9ICRyTEwtPlskS19vY10tPltfTElORV9JTkRFWF9dOwogICAgICAgIHJldHVybiBpZiAoICRpbGluZV9vbyAhPSAkaWxpbmVfb2MgKTsKICAgIH0KCiAgICAjIE9LIHRvIGtlZXAgdGhlIHBhcmVuIHRpZ2h0CiAgICByZXR1cm4gMTsKfSAjIyBlbmQgc3ViIHRpZ2h0X3BhcmVuX2ZvbGxvd3MKCm15ICVpc19icmFjZV9zZW1pY29sb25fY29sb247CgpCRUdJTiB7CiAgICBteSBAcSA9IHF3KCB7IH0gOyA6ICk7CiAgICBAaXNfYnJhY2Vfc2VtaWNvbG9uX2NvbG9ue0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7Cn0KCnN1YiBzdGFydGluZ19vbmVfbGluZV9ibG9jayB7CgogICAgbXkgKCAkc2VsZiwgJEtqLCAkS19sYXN0X25vbmJsYW5rLCAkS19sYXN0ICkgPSBAXzsKCiAgICAjIEFmdGVyIHNlZWluZyBhbiBvcGVuaW5nIGN1cmx5IGJyYWNlLCBsb29rIGZvciB0aGUgY2xvc2luZyBicmFjZSBhbmQgc2VlCiAgICAjIGlmIHRoZSBlbnRpcmUgYmxvY2sgd2lsbCBmaXQgb24gYSBsaW5lLiAgVGhpcyByb3V0aW5lIGlzIG5vdCBhbHdheXMgcmlnaHQKICAgICMgc28gYSBjaGVjayBpcyBtYWRlIGxhdGVyIChhdCB0aGUgY2xvc2luZyBicmFjZSkgdG8gbWFrZSBzdXJlIHdlIHJlYWxseQogICAgIyBoYXZlIGEgb25lLWxpbmUgYmxvY2suICBXZSBoYXZlIHRvIGRvIHRoaXMgcHJlbGltaW5hcnkgY2hlY2ssIHRob3VnaCwKICAgICMgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd291bGQgYWx3YXlzIGJyZWFrIGF0IGEgc2VtaWNvbG9uIHdpdGhpbiBhIG9uZS1saW5lCiAgICAjIGJsb2NrIGlmIHRoZSBibG9jayBjb250YWlucyBtdWx0aXBsZSBzdGF0ZW1lbnRzLgoKICAgICMgR2l2ZW46CiAgICAjICAkS2ogICAgICAgICAgICAgID0gaW5kZXggb2Ygb3BlbmluZyBicmFjZQogICAgIyAgJEtfbGFzdF9ub25ibGFuayA9IGluZGV4IG9mIHByZXZpb3VzIG5vbmJsYW5rIGNvZGUgdG9rZW4KICAgICMgICRLX2xhc3QgICAgICAgICAgPSBpbmRleCBvZiBsYXN0IHRva2VuIG9mIGlucHV0IGxpbmUKCiAgICAjIENhbGxzICdjcmVhdGVfb25lX2xpbmVfYmxvY2snIGlmIG9uZS1saW5lIGJsb2NrIG1pZ2h0IGJlIGZvcm1lZC4KCiAgICAjIFJldHVybnM6CiAgICAjICAkdG9vX2xvbmc6CiAgICAjICAgdHJ1ZSAgPSBkaXN0YW5jZSBmcm9tIG9wZW5pbmcga2V5d29yZCB0byBPUEVOSU5HIGJyYWNlIGV4Y2VlZHMKICAgICMgICAgICAgICAgdGhlIG1heGltdW0gbGluZSBsZW5ndGguCiAgICAjICAgZmFsc2Ugb3RoZXJ3aXNlCiAgICAjIE5vdGUgdGhhdCB0aGlzIGZsYWcgaXMgZm9yIGRpc3RhbmNlIGZyb20gdGhlIHN0YXRlbWVudCBzdGFydCB0byB0aGUKICAgICMgT1BFTklORyBicmFjZSwgbm90IHRoZSBjbG9zaW5nIGJyYWNlLgoKICAgIG15ICRyYnJlYWtfY29udGFpbmVyICAgICA9ICRzZWxmLT5bX3JicmVha19jb250YWluZXJfXTsKICAgIG15ICRyc2hvcnRfbmVzdGVkICAgICAgICA9ICRzZWxmLT5bX3JzaG9ydF9uZXN0ZWRfXTsKICAgIG15ICRyTEwgICAgICAgICAgICAgICAgICA9ICRzZWxmLT5bX3JMTF9dOwogICAgbXkgJEtfb3BlbmluZ19jb250YWluZXIgID0gJHNlbGYtPltfS19vcGVuaW5nX2NvbnRhaW5lcl9dOwogICAgbXkgJHJibG9ja190eXBlX29mX3NlcW5vID0gJHNlbGYtPltfcmJsb2NrX3R5cGVfb2Zfc2Vxbm9fXTsKCiAgICAjIGtpbGwgYW55IGN1cnJlbnQgYmxvY2sgLSB3ZSBjYW4gb25seSBnbyAxIGRlZXAKICAgIGNyZWF0ZV9vbmVfbGluZV9ibG9jayh1bmRlZik7CgogICAgbXkgJGlfc3RhcnQgPSAwOwoKICAgICMgVGhpcyByb3V0aW5lIHNob3VsZCBub3QgaGF2ZSBiZWVuIGNhbGxlZCBpZiB0aGVyZSBhcmUgbm8gdG9rZW5zIGluIHRoZQogICAgIyAndG9fZ28nIGFycmF5cyBvZiBwcmV2aW91c2x5IHN0b3JlZCB0b2tlbnMuICBBIHByZXZpb3VzIGNhbGwgdG8KICAgICMgJ3N0b3JlX3Rva2VuX3RvX2dvJyBzaG91bGQgaGF2ZSBzdG9yZWQgYW4gb3BlbmluZyBicmFjZS4gQW4gZXJyb3IgaGVyZQogICAgIyBpbmRpY2F0ZXMgdGhhdCBhIHByb2dyYW1taW5nIGNoYW5nZSBtYXkgaGF2ZSBjYXVzZWQgYSBmbHVzaCBvcGVyYXRpb24gdG8KICAgICMgY2xlYW4gb3V0IHRoZSBwcmV2aW91c2x5IHN0b3JlZCB0b2tlbnMuCiAgICBpZiAoICFkZWZpbmVkKCRtYXhfaW5kZXhfdG9fZ28pIHx8ICRtYXhfaW5kZXhfdG9fZ28gPCAwICkgewogICAgICAgIEZhdWx0KCJwcm9ncmFtIGJ1Zzogc3RvcmVfdG9rZW5fdG9fZ28gY2FsbGVkIGluY29ycmVjdGx5XG4iKQogICAgICAgICAgaWYgKERFVkVMX01PREUpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIFJldHVybiBpZiBibG9jayBzaG91bGQgYmUgYnJva2VuCiAgICBteSAkdHlwZV9zZXF1ZW5jZV9qID0gJHJMTC0+WyRLal0tPltfVFlQRV9TRVFVRU5DRV9dOwogICAgaWYgKCAkcmJyZWFrX2NvbnRhaW5lci0+eyR0eXBlX3NlcXVlbmNlX2p9ICkgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAkcmlzX2JsaV9jb250YWluZXIgPSAkc2VsZi0+W19yaXNfYmxpX2NvbnRhaW5lcl9dOwogICAgbXkgJGlzX2JsaSAgICAgICAgICAgID0gJHJpc19ibGlfY29udGFpbmVyLT57JHR5cGVfc2VxdWVuY2Vfan07CgogICAgbXkgJGJsb2NrX3R5cGUgPSAkcmJsb2NrX3R5cGVfb2Zfc2Vxbm8tPnskdHlwZV9zZXF1ZW5jZV9qfTsKICAgICRibG9ja190eXBlID0gRU1QVFlfU1RSSU5HIHVubGVzcyAoIGRlZmluZWQoJGJsb2NrX3R5cGUpICk7CgogICAgbXkgJHByZXZpb3VzX25vbmJsYW5rX3Rva2VuID0gRU1QVFlfU1RSSU5HOwogICAgbXkgJGlfbGFzdF9ub25ibGFuayAgICAgICAgID0gLTE7CiAgICBpZiAoIGRlZmluZWQoJEtfbGFzdF9ub25ibGFuaykgKSB7CiAgICAgICAgJGlfbGFzdF9ub25ibGFuayA9ICRLX2xhc3Rfbm9uYmxhbmsgLSAkS190b19nb1swXTsKICAgICAgICBpZiAoICRpX2xhc3Rfbm9uYmxhbmsgPj0gMCApIHsKICAgICAgICAgICAgJHByZXZpb3VzX25vbmJsYW5rX3Rva2VuID0gJHJMTC0+WyRLX2xhc3Rfbm9uYmxhbmtdLT5bX1RPS0VOX107CiAgICAgICAgfQogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgZmluZCB0aGUgc3RhcnRpbmcga2V5d29yZCBmb3IgdGhpcyBibG9jayAoc3VjaCBhcyAnaWYnLCAnZWxzZScsIC4uLikKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGlmICgKICAgICAgICAkbWF4X2luZGV4X3RvX2dvID09IDAKICAgICAgICAjI3x8ICRibG9ja190eXBlID1+IC9eW1x7XH1cO1w6XSQvCiAgICAgICAgfHwgJGlzX2JyYWNlX3NlbWljb2xvbl9jb2xvbnskYmxvY2tfdHlwZX0KICAgICAgICB8fCBzdWJzdHIoICRibG9ja190eXBlLCAwLCA3ICkgZXEgJ3BhY2thZ2UnCiAgICAgICkKICAgIHsKICAgICAgICAkaV9zdGFydCA9ICRtYXhfaW5kZXhfdG9fZ287CiAgICB9CgogICAgIyB0aGUgcHJldmlvdXMgbm9uYmxhbmsgdG9rZW4gc2hvdWxkIHN0YXJ0IHRoZXNlIGJsb2NrIHR5cGVzCiAgICBlbHNpZiAoCiAgICAgICAgJGlfbGFzdF9ub25ibGFuayA+PSAwCiAgICAgICAgJiYgKCAgICRwcmV2aW91c19ub25ibGFua190b2tlbiBlcSAkYmxvY2tfdHlwZQogICAgICAgICAgICB8fCAkc2VsZi0+W19yaXNfYXN1Yl9ibG9ja19dLT57JHR5cGVfc2VxdWVuY2Vfan0KICAgICAgICAgICAgfHwgJHNlbGYtPltfcmlzX3N1Yl9ibG9ja19dLT57JHR5cGVfc2VxdWVuY2Vfan0KICAgICAgICAgICAgfHwgc3Vic3RyKCAkYmxvY2tfdHlwZSwgLTIsIDIgKSBlcSAnKCknICkKICAgICAgKQogICAgewogICAgICAgICRpX3N0YXJ0ID0gJGlfbGFzdF9ub25ibGFuazsKCiAgICAgICAgIyBGb3Igc2lnbmF0dXJlcyBhbmQgZXh0ZW5kZWQgc3ludGF4IC4uLgogICAgICAgICMgSWYgdGhpcyBicmFjZSBmb2xsb3dzIGEgcGFyZW50aGVzaXplZCBsaXN0LCB3ZSBzaG91bGQgbG9vayBiYWNrIHRvCiAgICAgICAgIyBmaW5kIHRoZSBrZXl3b3JkIGJlZm9yZSB0aGUgb3BlbmluZyBwYXJlbiBiZWNhdXNlIG90aGVyd2lzZSB3ZSBtaWdodAogICAgICAgICMgZm9ybSBhIG9uZSBsaW5lIGJsb2NrIHdoaWNoIHN0YXlzIGludGFjdCwgYW5kIGNhdXNlIHRoZSBwYXJlbnRoZXNpemVkCiAgICAgICAgIyBleHByZXNzaW9uIHRvIGJyZWFrIG9wZW4uIFRoYXQgbG9va3MgYmFkLgogICAgICAgIGlmICggJHRva2Vuc190b19nb1skaV9zdGFydF0gZXEgJyknICkgewoKICAgICAgICAgICAgIyBGaW5kIHRoZSBvcGVuaW5nIHBhcmVuCiAgICAgICAgICAgIG15ICRLX3N0YXJ0ID0gJEtfdG9fZ29bJGlfc3RhcnRdOwogICAgICAgICAgICByZXR1cm4gdW5sZXNzIGRlZmluZWQoJEtfc3RhcnQpOwogICAgICAgICAgICBteSAkc2Vxbm8gPSAkdHlwZV9zZXF1ZW5jZV90b19nb1skaV9zdGFydF07CiAgICAgICAgICAgIHJldHVybiB1bmxlc3MgKCRzZXFubyk7CiAgICAgICAgICAgIG15ICRLX29wZW5pbmcgPSAkS19vcGVuaW5nX2NvbnRhaW5lci0+eyRzZXFub307CiAgICAgICAgICAgIHJldHVybiBpZiAoICFkZWZpbmVkKCRLX29wZW5pbmcpICk7CiAgICAgICAgICAgIG15ICRpX29wZW5pbmcgPSAkaV9zdGFydCArICggJEtfb3BlbmluZyAtICRLX3N0YXJ0ICk7CgogICAgICAgICAgICAjIGdpdmUgdXAgaWYgbm90IG9uIHRoaXMgbGluZQogICAgICAgICAgICByZXR1cm4gaWYgKCAkaV9vcGVuaW5nIDwgMCApOwogICAgICAgICAgICAkaV9zdGFydCA9ICRpX29wZW5pbmc7CgogICAgICAgICAgICAjIGdvIGJhY2sgb25lIHRva2VuIGJlZm9yZSB0aGUgb3BlbmluZyBwYXJlbgogICAgICAgICAgICBpZiAoICRpX3N0YXJ0ID4gMCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJGlfc3RhcnQtLSB9CiAgICAgICAgICAgIGlmICggJHR5cGVzX3RvX2dvWyRpX3N0YXJ0XSBlcSAnYicgJiYgJGlfc3RhcnQgPiAwICkgeyAkaV9zdGFydC0tOyB9CiAgICAgICAgICAgIG15ICRsZXYgPSAkbGV2ZWxzX3RvX2dvWyRpX3N0YXJ0XTsKICAgICAgICAgICAgaWYgKCAkbGV2ID4gJHJMTC0+WyRLal0tPltfTEVWRUxfXSApIHsgcmV0dXJuIH0KICAgICAgICB9CgogICAgICAgICMgaW5jbHVkZSBhIGxlbmd0aCBvZiBhbnkgcHJlY2VkaW5nIGFzc2lnbm1lbnQgdG9rZW4gaWYgd2UgYnJlYWsgYmVmb3JlCiAgICAgICAgIyBpdCAoYjE0NjEpCiAgICAgICAgZWxzaWYgKCAkaV9zdGFydCA+IDAgKSB7CiAgICAgICAgICAgIG15ICRpX2VxID0gJGlfc3RhcnQgLSAxOwogICAgICAgICAgICBpZiAoICR0eXBlc190b19nb1skaV9lcV0gZXEgJ2InICYmICRpX2VxID4gMCApIHsgJGlfZXEtLTsgfQogICAgICAgICAgICBteSAkdHlwZV9lcSA9ICR0eXBlc190b19nb1skaV9lcV07CiAgICAgICAgICAgIGlmICggJGlzX2Fzc2lnbm1lbnR7JHR5cGVfZXF9ICYmICR3YW50X2JyZWFrX2JlZm9yZXskdHlwZV9lcX0gKSB7CiAgICAgICAgICAgICAgICAkaV9zdGFydCA9ICRpX2VxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAjICRpX3N0YXJ0IGlzIDAgLSBjYW5ub3QgYmFjayB1cAogICAgICAgIH0KICAgIH0KICAgIGVsc2lmICggJHByZXZpb3VzX25vbmJsYW5rX3Rva2VuIGVxICcpJyApIHsKCiAgICAgICAgIyBGb3Igc29tZXRoaW5nIGxpa2UgImlmICh4eHgpIHsiLCB0aGUga2V5d29yZCAiaWYiIHdpbGwgYmUKICAgICAgICAjIGp1c3QgYWZ0ZXIgdGhlIG1vc3QgcmVjZW50IGJyZWFrLiBUaGlzIHdpbGwgYmUgMCB1bmxlc3MKICAgICAgICAjIHdlIGhhdmUganVzdCBraWxsZWQgYSBvbmUtbGluZSBibG9jayBhbmQgYXJlIHN0YXJ0aW5nIGFub3RoZXIuCiAgICAgICAgIyAoZG9pZi50KQogICAgICAgICMgTm90ZTogY2Fubm90IHVzZSBpbmV4dF9pbmRleF90b19nb1tdIGhlcmUgYmVjYXVzZSB0aGF0IGFycmF5CiAgICAgICAgIyBpcyBzdGlsbCBiZWluZyBjb25zdHJ1Y3RlZC4KICAgICAgICAkaV9zdGFydCA9ICRpbmRleF9tYXhfZm9yY2VkX2JyZWFrICsgMTsKICAgICAgICBpZiAoICR0eXBlc190b19nb1skaV9zdGFydF0gZXEgJ2InICkgewogICAgICAgICAgICAkaV9zdGFydCsrOwogICAgICAgIH0KCiAgICAgICAgIyBQYXRjaCB0byBhdm9pZCBicmVha2luZyBzaG9ydCBibG9ja3MgZGVmaW5lZCB3aXRoIGV4dGVuZGVkX3N5bnRheDoKICAgICAgICAjIFN0cmlwIG9mZiBhbnkgdHJhaWxpbmcgKCkgd2hpY2ggd2FzIGFkZGVkIGluIHRoZSBwYXJzZXIgdG8gbWFyawogICAgICAgICMgdGhlIG9wZW5pbmcga2V5d29yZC4gIEZvciBleGFtcGxlLCBpbiB0aGUgZm9sbG93aW5nCiAgICAgICAgIyAgICBjcmVhdGUoIFR5cGVGb28gJGUpIHskYnViYmF9CiAgICAgICAgIyB0aGUgYmxvY2t0eXBlIHdvdWxkIGJlIG1hcmtlZCBhcyBjcmVhdGUoKQogICAgICAgIG15ICRzdHJpcHBlZF9ibG9ja190eXBlID0gJGJsb2NrX3R5cGU7CiAgICAgICAgaWYgKCBzdWJzdHIoICRibG9ja190eXBlLCAtMiwgMiApIGVxICcoKScgKSB7CiAgICAgICAgICAgICRzdHJpcHBlZF9ibG9ja190eXBlID0gc3Vic3RyKCAkYmxvY2tfdHlwZSwgMCwgLTIgKTsKICAgICAgICB9CiAgICAgICAgaWYgKCAkdG9rZW5zX3RvX2dvWyRpX3N0YXJ0XSBuZSAkc3RyaXBwZWRfYmxvY2tfdHlwZSApIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHBhdGNoIGZvciBTV0lUQ0gvQ0FTRSB0byByZXRhaW4gb25lLWxpbmUgY2FzZS93aGVuIGJsb2NrcwogICAgZWxzaWYgKCAkYmxvY2tfdHlwZSBlcSAnY2FzZScgfHwgJGJsb2NrX3R5cGUgZXEgJ3doZW4nICkgewoKICAgICAgICAjIE5vdGU6IGNhbm5vdCB1c2UgaW5leHRfaW5kZXhfdG9fZ29bXSBoZXJlIGJlY2F1c2UgdGhhdCBhcnJheQogICAgICAgICMgaXMgc3RpbGwgYmVpbmcgY29uc3RydWN0ZWQuCiAgICAgICAgJGlfc3RhcnQgPSAkaW5kZXhfbWF4X2ZvcmNlZF9icmVhayArIDE7CiAgICAgICAgaWYgKCAkdHlwZXNfdG9fZ29bJGlfc3RhcnRdIGVxICdiJyApIHsKICAgICAgICAgICAgJGlfc3RhcnQrKzsKICAgICAgICB9CiAgICAgICAgaWYgKCAkdG9rZW5zX3RvX2dvWyRpX3N0YXJ0XSBuZSAkYmxvY2tfdHlwZSApIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgQ291bGRuJ3QgZmluZCBzdGFydCAtIHJldHVybiB0b29fbG9uZyBmbGFnCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICBteSAkcG9zID0gdG90YWxfbGluZV9sZW5ndGgoICRpX3N0YXJ0LCAkbWF4X2luZGV4X3RvX2dvICkgLSAxOwoKICAgIG15ICRtYXhpbXVtX2xpbmVfbGVuZ3RoID0KICAgICAgJG1heGltdW1fbGluZV9sZW5ndGhfYXRfbGV2ZWxbICRsZXZlbHNfdG9fZ29bJGlfc3RhcnRdIF07CgogICAgIyBzZWUgaWYgZGlzdGFuY2UgdG8gdGhlIG9wZW5pbmcgY29udGFpbmVyIGlzIHRvbyBncmVhdCB0byBldmVuIHN0YXJ0CiAgICBpZiAoICRwb3MgPiAkbWF4aW11bV9saW5lX2xlbmd0aCApIHsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgdG9vIGxvbmcgdG8gdGhlIG9wZW5pbmcgdG9rZW4KICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIE9LIHNvIGZhcjogdGhlIHN0YXRlbWVudCBpcyBub3QgdG8gbG9uZyBqdXN0IHRvIHRoZSBPUEVOSU5HIHRva2VuLiBOb3cKICAgICMgc2VlIGlmIGV2ZXJ5dGhpbmcgdG8gdGhlIGNsb3NpbmcgdG9rZW4gd2lsbCBmaXQgb24gb25lIGxpbmUKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICMgVGhpcyBpcyBwYXJ0IG9mIGFuIHVwZGF0ZSB0byBmaXggY2FzZXMgYjU2MiAuLiBiOTgzCiAgICBteSAkS19jbG9zaW5nID0gJHNlbGYtPltfS19jbG9zaW5nX2NvbnRhaW5lcl9dLT57JHR5cGVfc2VxdWVuY2Vfan07CiAgICByZXR1cm4gdW5sZXNzICggZGVmaW5lZCgkS19jbG9zaW5nKSApOwogICAgbXkgJGNvbnRhaW5lcl9sZW5ndGggPSAkckxMLT5bJEtfY2xvc2luZ10tPltfQ1VNVUxBVElWRV9MRU5HVEhfXSAtCiAgICAgICRyTEwtPlskS2pdLT5bX0NVTVVMQVRJVkVfTEVOR1RIX107CgogICAgbXkgJGV4Y2VzcyA9ICRwb3MgKyAxICsgJGNvbnRhaW5lcl9sZW5ndGggLSAkbWF4aW11bV9saW5lX2xlbmd0aDsKCiAgICAjIEFkZCBhIHNtYWxsIHRvbGVyYW5jZSBmb3Igd2VsZGVkIHRva2VucyAoY2FzZSBiOTAxKQogICAgaWYgKCAkdG90YWxfd2VsZF9jb3VudCAmJiAkc2VsZi0+aXNfd2VsZGVkX2F0X3NlcW5vKCR0eXBlX3NlcXVlbmNlX2opICkgewogICAgICAgICRleGNlc3MgKz0gMjsKICAgIH0KCiAgICBpZiAoICRleGNlc3MgPiAwICkgewoKICAgICAgICAjIGxpbmUgaXMgdG9vIGxvbmcuLi4gIHRoZXJlIGlzIG5vIGNoYW5jZSBvZiBmb3JtaW5nIGEgb25lIGxpbmUgYmxvY2sKICAgICAgICAjIGlmIHRoZSBleGNlc3MgaXMgbW9yZSB0aGFuIDEgY2hhcgogICAgICAgIHJldHVybiBpZiAoICRleGNlc3MgPiAxICk7CgogICAgICAgICMgLi4uIGFuZCBnaXZlIHVwIGlmIGl0IGlzIG5vdCBhIG9uZS1saW5lIGJsb2NrIG9uIGlucHV0LgogICAgICAgICMgbm90ZTogZm9yIGEgb25lLWxpbmUgYmxvY2sgb24gaW5wdXQsIGl0IG1heSBiZSBwb3NzaWJsZSB0byBrZWVwCiAgICAgICAgIyBpdCBhcyBhIG9uZS1saW5lIGJsb2NrIChieSByZW1vdmluZyBhIG5lZWRsZXNzIHNlbWljb2xvbiApLgogICAgICAgIG15ICRLX3N0YXJ0ID0gJEtfdG9fZ29bJGlfc3RhcnRdOwogICAgICAgIG15ICRsZGlmZiA9CiAgICAgICAgICAkckxMLT5bJEtfY2xvc2luZ10tPltfTElORV9JTkRFWF9dIC0gJHJMTC0+WyRLX3N0YXJ0XS0+W19MSU5FX0lOREVYX107CiAgICAgICAgcmV0dXJuIGlmICgkbGRpZmYpOwogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgTG9vcCB0byBjaGVjayBjb250ZW50cyBhbmQgbGVuZ3RoIG9mIHRoZSBwb3RlbnRpYWwgb25lLWxpbmUgYmxvY2sKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZvcmVhY2ggbXkgJEtpICggJEtqICsgMSAuLiAkS19sYXN0ICkgewoKICAgICAgICAjIG9sZCB3aGl0ZXNwYWNlIGNvdWxkIGJlIGFyYml0cmFyaWx5IGxhcmdlLCBzbyBkb24ndCB1c2UgaXQKICAgICAgICBpZiAoICRyTEwtPlskS2ldLT5bX1RZUEVfXSBlcSAnYicgKSB7ICRwb3MgKz0gMSB9CiAgICAgICAgZWxzZSB7ICRwb3MgKz0gJHJMTC0+WyRLaV0tPltfVE9LRU5fTEVOR1RIX10gfQoKICAgICAgICAjIGlnbm9yZSBzb21lIHNtYWxsIGJsb2NrcwogICAgICAgIG15ICR0eXBlX3NlcXVlbmNlX2kgPSAkckxMLT5bJEtpXS0+W19UWVBFX1NFUVVFTkNFX107CiAgICAgICAgbXkgJG5vYnJlYWsgICAgICAgICA9ICRyc2hvcnRfbmVzdGVkLT57JHR5cGVfc2VxdWVuY2VfaX07CgogICAgICAgICMgUmV0dXJuIGZhbHNlIHJlc3VsdCBpZiB3ZSBleGNlZWQgdGhlIG1heGltdW0gbGluZSBsZW5ndGgsCiAgICAgICAgaWYgKCAkcG9zID4gJG1heGltdW1fbGluZV9sZW5ndGggKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMga2VlcCBnb2luZyBmb3Igbm9uLWNvbnRhaW5lcnMKICAgICAgICBlbHNpZiAoICEkdHlwZV9zZXF1ZW5jZV9pICkgewoKICAgICAgICB9CgogICAgICAgICMgcmV0dXJuIGlmIHdlIGVuY291bnRlciBhbm90aGVyIG9wZW5pbmcgYnJhY2UgYmVmb3JlIGZpbmRpbmcgdGhlCiAgICAgICAgIyBjbG9zaW5nIGJyYWNlLgogICAgICAgIGVsc2lmICgkckxMLT5bJEtpXS0+W19UT0tFTl9dIGVxICd7JwogICAgICAgICAgICAmJiAkckxMLT5bJEtpXS0+W19UWVBFX10gZXEgJ3snCiAgICAgICAgICAgICYmICRyYmxvY2tfdHlwZV9vZl9zZXFuby0+eyR0eXBlX3NlcXVlbmNlX2l9CiAgICAgICAgICAgICYmICEkbm9icmVhayApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGlmIHdlIGZpbmQgb3VyIGNsb3NpbmcgYnJhY2UuLgogICAgICAgIGVsc2lmICgkckxMLT5bJEtpXS0+W19UT0tFTl9dIGVxICd9JwogICAgICAgICAgICAmJiAkckxMLT5bJEtpXS0+W19UWVBFX10gZXEgJ30nCiAgICAgICAgICAgICYmICRyYmxvY2tfdHlwZV9vZl9zZXFuby0+eyR0eXBlX3NlcXVlbmNlX2l9CiAgICAgICAgICAgICYmICEkbm9icmVhayApCiAgICAgICAgewoKICAgICAgICAgICAgIyBiZSBzdXJlIGFueSB0cmFpbGluZyBjb21tZW50IGFsc28gZml0cyBvbiB0aGUgbGluZQogICAgICAgICAgICBteSAkS2lfbm9uYmxhbmsgPSAkS2k7CiAgICAgICAgICAgIGlmICggJEtpX25vbmJsYW5rIDwgJEtfbGFzdCApIHsKICAgICAgICAgICAgICAgICRLaV9ub25ibGFuaysrOwogICAgICAgICAgICAgICAgaWYgKCAgICRyTEwtPlskS2lfbm9uYmxhbmtdLT5bX1RZUEVfXSBlcSAnYicKICAgICAgICAgICAgICAgICAgICAmJiAkS2lfbm9uYmxhbmsgPCAkS19sYXN0ICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkS2lfbm9uYmxhbmsrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBQYXRjaCBmb3Igb25lLWxpbmUgc29ydC9tYXAvZ3JlcC9ldmFsIGJsb2NrcyB3aXRoIHNpZGUgY29tbWVudHM6CiAgICAgICAgICAgICMgV2Ugd2lsbCBpZ25vcmUgdGhlIHNpZGUgY29tbWVudCBsZW5ndGggZm9yIHNvcnQvbWFwL2dyZXAvZXZhbAogICAgICAgICAgICAjIGJlY2F1c2UgdGhpcyBjYW4gbGVhZCB0byBzdGF0ZW1lbnRzIHdoaWNoIGNoYW5nZSBldmVyeSB0aW1lCiAgICAgICAgICAgICMgcGVybHRpZHkgaXMgcnVuLiAgSGVyZSBpcyBhbiBleGFtcGxlIGZyb20gRGVuaXMgTW9za293aXR6IHdoaWNoCiAgICAgICAgICAgICMgb3NjaWxsYXRlcyBiZXR3ZWVuIHRoZXNlIHR3byBzdGF0ZXMgd2l0aG91dCB0aGlzIHBhdGNoOgoKIyMgLS0tLS0tLS0KIyMgZ3JlcCB7ICRfLT5mb28gbmUgJ2JhcicgfSAjIGFzZGZhIGFzZGYgYXNkZiBhc2RmIGFzZGYgYXNkZiBhc2RmIGFzZGYgYXNkZiBhc2RmIGFzZGYKIyMgIEBiYXo7CiMjCiMjIGdyZXAgewojIyAgICAgJF8tPmZvbyBuZSAnYmFyJwojIyAgIH0gICAgIyBhc2RmYSBhc2RmIGFzZGYgYXNkZiBhc2RmIGFzZGYgYXNkZiBhc2RmIGFzZGYgYXNkZiBhc2RmCiMjICAgQGJhejsKIyMgLS0tLS0tLS0KCiAgICAgICAgICAgICMgV2hlbiB0aGUgZmlyc3QgbGluZSBpcyBpbnB1dCBpdCBnZXRzIGJyb2tlbiBhcGFydCBieSB0aGUgbWFpbgogICAgICAgICAgICAjIGxpbmUgYnJlYWsgbG9naWMgaW4gc3ViIHByb2Nlc3NfbGluZV9vZl9DT0RFLgogICAgICAgICAgICAjIFdoZW4gdGhlIHNlY29uZCBsaW5lIGlzIGlucHV0IGl0IGdldHMgcmVjb21iaW5lZCBieQogICAgICAgICAgICAjIHByb2Nlc3NfbGluZV9vZl9DT0RFIGFuZCBwYXNzZWQgdG8gdGhlIG91dHB1dCByb3V0aW5lcy4gIFRoZQogICAgICAgICAgICAjIG91dHB1dCByb3V0aW5lcyAoYnJlYWtfbG9uZ19saW5lcykgZG8gbm90IGJyZWFrIGl0IGFwYXJ0CiAgICAgICAgICAgICMgYmVjYXVzZSB0aGUgYm9uZCBzdHJlbmd0aHMgYXJlIHNldCB0byB0aGUgaGlnaGVzdCBwb3NzaWJsZSB2YWx1ZQogICAgICAgICAgICAjIGZvciBncmVwL21hcC9ldmFsL3NvcnQgYmxvY2tzLCBzbyB0aGUgZmlyc3QgdmVyc2lvbiBnZXRzIG91dHB1dC4KICAgICAgICAgICAgIyBJdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBmaXggdGhpcyBieSBjaGFuZ2luZyBib25kIHN0cmVuZ3RocywKICAgICAgICAgICAgIyBidXQgdGhleSBhcmUgaGlnaCB0byBwcmV2ZW50IGVycm9ycyBpbiBvbGRlciB2ZXJzaW9ucyBvZiBwZXJsLgogICAgICAgICAgICAjIFNlZSBjMTAwIGZvciBldmFsIHRlc3QuCiAgICAgICAgICAgIGlmICggICAkS2kgPCAkS19sYXN0CiAgICAgICAgICAgICAgICAmJiAkckxMLT5bJEtfbGFzdF0tPltfVFlQRV9dIGVxICcjJwogICAgICAgICAgICAgICAgJiYgJHJMTC0+WyRLX2xhc3RdLT5bX0xFVkVMX10gPT0gJHJMTC0+WyRLaV0tPltfTEVWRUxfXQogICAgICAgICAgICAgICAgJiYgISRyT3B0c19pZ25vcmVfc2lkZV9jb21tZW50X2xlbmd0aHMKICAgICAgICAgICAgICAgICYmICEkaXNfc29ydF9tYXBfZ3JlcF9ldmFseyRibG9ja190eXBlfQogICAgICAgICAgICAgICAgJiYgJEtfbGFzdCAtICRLaV9ub25ibGFuayA8PSAyICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIyBPbmx5IGluY2x1ZGUgdGhlIHNpZGUgY29tbWVudCBmb3IgaWYvZWxzZS9lbHNpZi91bmxlc3MgaWYgaXQKICAgICAgICAgICAgICAgICMgaW1tZWRpYXRlbHkgZm9sbG93cyAoYmVjYXVzZSB0aGUgY3VycmVudCAnJHJicmFjZV9mb2xsb3dlcicKICAgICAgICAgICAgICAgICMgbG9naWMgZm9yIHRoZXNlIHdpbGwgZ2l2ZSBhbiBpbW1lZGlhdGUgYnJha2UgYWZ0ZXIgdGhlc2UKICAgICAgICAgICAgICAgICMgY2xvc2luZyBicmFjZXMpLiAgU28gZm9yIGV4YW1wbGUgYSBsaW5lIGxpa2UgdGhpcwogICAgICAgICAgICAgICAgIyAgICAgaWYgKC4uLikgeyAuLi4gfSA7ICMgdmVyeSBsb25nIGNvbW1lbnQuLi4uLi4KICAgICAgICAgICAgICAgICMgd2lsbCBhbHJlYWR5IGJyZWFrIGxpa2UgdGhpczoKICAgICAgICAgICAgICAgICMgICAgIGlmICguLi4pIHsgLi4uIH0KICAgICAgICAgICAgICAgICMgICAgIDsgIyB2ZXJ5IGxvbmcgY29tbWVudC4uLi4uLgogICAgICAgICAgICAgICAgIyBzbyB3ZSBkbyBub3QgbmVlZCB0byBpbmNsdWRlIHRoZSBsZW5ndGggb2YgdGhlIGNvbW1lbnQsIHdoaWNoCiAgICAgICAgICAgICAgICAjIHdvdWxkIGJyZWFrIHRoZSBibG9jay4gUHJvamVjdCAnYmlvcGVybCcgaGFzIGNvZGluZyBsaWtlIHRoaXMuCiAgICAgICAgICAgICAgICBpZiAoICAhJGlzX2lmX3VubGVzc19lbHNpZl9lbHNleyRibG9ja190eXBlfQogICAgICAgICAgICAgICAgICAgIHx8ICRLX2xhc3QgPT0gJEtpX25vbmJsYW5rICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkS2lfbm9uYmxhbmsgPSAkS19sYXN0OwogICAgICAgICAgICAgICAgICAgICRwb3MgKz0gJHJMTC0+WyRLaV9ub25ibGFua10tPltfVE9LRU5fTEVOR1RIX107CgogICAgICAgICAgICAgICAgICAgIGlmICggJEtpX25vbmJsYW5rID4gJEtpICsgMSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgc291cmNlIHdoaXRlc3BhY2UgY291bGQgYmUgYW55dGhpbmcsIGFzc3VtZQogICAgICAgICAgICAgICAgICAgICAgICAjIGF0IGxlYXN0IG9uZSBzcGFjZSBiZWZvcmUgdGhlIGhhc2ggb24gb3V0cHV0CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJHJMTC0+WyAkS2kgKyAxIF0tPltfVFlQRV9dIGVxICdiJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwb3MgKz0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJHBvcyArPSAkckxMLT5bICRLaSArIDEgXS0+W19UT0tFTl9MRU5HVEhfXSB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoICRwb3MgPj0gJG1heGltdW1fbGluZV9sZW5ndGggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIG9rLCBpdCdzIGEgb25lLWxpbmUgYmxvY2sKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgIGNyZWF0ZV9vbmVfbGluZV9ibG9jaygkaV9zdGFydCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMganVzdCBrZWVwIGdvaW5nIGZvciBvdGhlciBjaGFyYWN0ZXJzCiAgICAgICAgZWxzZSB7CiAgICAgICAgfQogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBFbmQgTG9vcCB0byBleGFtaW5lIHRva2VucyBpbiBwb3RlbnRpYWwgb25lLWJsb2NrCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAjIFdlIGhhdmVuJ3QgaGl0IHRoZSBjbG9zaW5nIGJyYWNlLCBidXQgdGhlcmUgaXMgc3RpbGwgc3BhY2UuIFNvIHRoZQogICAgIyBxdWVzdGlvbiBoZXJlIGlzLCBzaG91bGQgd2Uga2VlcCBnb2luZyB0byBsb29rIGF0IG1vcmUgbGluZXMgaW4gaG9wZXMgb2YKICAgICMgZm9ybWluZyBhIG5ldyBvbmUtbGluZSBibG9jaywgb3Igc2hvdWxkIHdlIHN0b3AgcmlnaHQgbm93LiBUaGUgcHJvYmxlbQogICAgIyB3aXRoIGNvbnRpbnVpbmcgaXMgdGhhdCB3ZSB3aWxsIG5vdCBiZSBhYmxlIHRvIGhvbm9yIGJyZWFrcyBiZWZvcmUgdGhlCiAgICAjIG9wZW5pbmcgYnJhY2UgaWYgd2UgY29udGludWUuCgogICAgIyBUeXBpY2FsbHkgd2Ugd2lsbCB3YW50IHRvIGtlZXAgdHJ5aW5nIHRvIG1ha2Ugb25lLWxpbmUgYmxvY2tzIGZvciB0aGluZ3MKICAgICMgbGlrZSBzb3J0L21hcC9ncmVwL2V2YWwuICBCdXQgaXQgaXMgbm90IGFsd2F5cyBhIGdvb2QgaWRlYSB0byBtYWtlIGFzCiAgICAjIG1hbnkgb25lLWxpbmUgYmxvY2tzIGFzIHBvc3NpYmxlLCBzbyBvdGhlciB0eXBlcyBhcmUgbm90IGRvbmUuICBUaGUgdXNlcgogICAgIyBjYW4gYWx3YXlzIHVzZSAtbWFuZ2xlLgoKICAgICMgSWYgd2Ugd2FudCB0byBrZWVwIGdvaW5nLCB3ZSB3aWxsIGNyZWF0ZSBhIG5ldyBvbmUtbGluZSBibG9jay4KICAgICMgVGhlIGJsb2NrcyB3aGljaCB3ZSBjYW4ga2VlcCBnb2luZyBhcmUgaW4gYSBoYXNoLCBidXQgd2UgbmV2ZXIgd2FudAogICAgIyB0byBjb250aW51ZSBpZiB3ZSBhcmUgYXQgYSAnLWJsaScgYmxvY2suCiAgICBpZiAoICR3YW50X29uZV9saW5lX2Jsb2NreyRibG9ja190eXBlfSAmJiAhJGlzX2JsaSApIHsKICAgICAgICBteSAkcnR5cGVfY291bnQgPSAkc2VsZi0+W19ydHlwZV9jb3VudF9ieV9zZXFub19dLT57JHR5cGVfc2VxdWVuY2Vfan07CiAgICAgICAgbXkgJHNlbWljb2xvbl9jb3VudCA9ICRydHlwZV9jb3VudAogICAgICAgICAgJiYgJHJ0eXBlX2NvdW50LT57JzsnfSA/ICRydHlwZV9jb3VudC0+eyc7J30gOiAwOwoKICAgICAgICAjIElnbm9yZSBhIHRlcm1pbmFsIHNlbWljb2xvbiBpbiB0aGUgY291bnQKICAgICAgICBpZiAoICRzZW1pY29sb25fY291bnQgPD0gMiApIHsKICAgICAgICAgICAgbXkgJEtfY2xvc2luZ19jb250YWluZXIgPSAkc2VsZi0+W19LX2Nsb3NpbmdfY29udGFpbmVyX107CiAgICAgICAgICAgIG15ICRLX2Nsb3NpbmdfaiAgICAgICAgID0gJEtfY2xvc2luZ19jb250YWluZXItPnskdHlwZV9zZXF1ZW5jZV9qfTsKICAgICAgICAgICAgbXkgJEtwICAgICAgICAgICAgICAgICAgPSAkc2VsZi0+S19wcmV2aW91c19ub25ibGFuaygkS19jbG9zaW5nX2opOwogICAgICAgICAgICBpZiAoIGRlZmluZWQoJEtwKQogICAgICAgICAgICAgICAgJiYgJHJMTC0+WyRLcF0tPltfVFlQRV9dIGVxICc7JyApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRzZW1pY29sb25fY291bnQgLT0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoICRzZW1pY29sb25fY291bnQgPD0gMCApIHsKICAgICAgICAgICAgY3JlYXRlX29uZV9saW5lX2Jsb2NrKCRpX3N0YXJ0KTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkc2VtaWNvbG9uX2NvdW50ID09IDEgJiYgJGJsb2NrX3R5cGUgZXEgJ2V2YWwnICkgewoKICAgICAgICAgICAgIyBNYXJrIHNob3J0IGJyb2tlbiBldmFsIGJsb2NrcyBmb3IgcG9zc2libGUgbGF0ZXIgdXNlIGluCiAgICAgICAgICAgICMgYXZvaWRpbmcgYWRkaW5nIHNwYWNlcyBiZWZvcmUgYSAncGFja2FnZScgbGluZS4gVGhpcyBpcyBub3QKICAgICAgICAgICAgIyBlc3NlbnRpYWwgYnV0IGhlbHBzIGtlZXAgbmV3ZXIgYW5kIG9sZGVyIGZvcm1hdHRpbmcgdGhlIHNhbWUuCiAgICAgICAgICAgICRzZWxmLT5bX3Jpc19zaG9ydF9icm9rZW5fZXZhbF9ibG9ja19dLT57JHR5cGVfc2VxdWVuY2Vfan0gPSAxOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIyBkbyBub3QgY29udGludWUgdGhlIHNlYXJjaAogICAgICAgIH0KICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHN0YXJ0aW5nX29uZV9saW5lX2Jsb2NrCgpzdWIgdW5zdG9yZV90b2tlbl90b19nbyB7CgogICAgIyByZW1vdmUgbW9zdCByZWNlbnQgdG9rZW4gZnJvbSBvdXRwdXQgc3RyZWFtCiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgaWYgKCAkbWF4X2luZGV4X3RvX2dvID4gMCApIHsKICAgICAgICAkbWF4X2luZGV4X3RvX2dvLS07CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkbWF4X2luZGV4X3RvX2dvID0gVU5ERUZJTkVEX0lOREVYOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgdW5zdG9yZV90b2tlbl90b19nbwoKc3ViIGNvbXBhcmVfaW5kZW50YXRpb25fbGV2ZWxzIHsKCiAgICBteSAoICRzZWxmLCAkS19maXJzdCwgJGd1ZXNzZWRfaW5kZW50YXRpb25fbGV2ZWwsICRsaW5lX251bWJlciApID0gQF87CgogICAgIyBDaGVjayB0byBzZWUgaWYgb3V0cHV0IGxpbmUgbGVhZGluZyBzcGFjZSBhZ3JlZXMgd2l0aCBpbnB1dCBsaW5lLgogICAgIyBUaGlzIGNhbiBiZSB2ZXJ5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIGEgc2NyaXB0IHdoaWNoIGhhcyBhbiBleHRyYQogICAgIyBvciBtaXNzaW5nIGJyYWNlLgogICAgIyBHaXZlbjoKICAgICMgICAkS19maXJzdCA9IGluZGV4IG9mIGZpcnN0IHRva2VuIG9uIHRoZSBsaW5lCiAgICAjICAgJGd1ZXNzZWRfaW5kZW50YXRpb25fbGV2ZWwgPSBndWVzcyBiYXNlZCBvbiBsZWFkaW5nIHNwYWNlcyBpbiBpbnB1dAogICAgIyAgICRsaW5lX251bWJlciA9IGxpbmUgbnVtYmVyIGluIGlucHV0IHN0cmVhbQoKICAgIHJldHVybiB1bmxlc3MgKCBkZWZpbmVkKCRLX2ZpcnN0KSApOwoKICAgIG15ICRyTEwgPSAkc2VsZi0+W19yTExfXTsKCiAgICAjIGlnbm9yZSBhIGxpbmUgd2l0aCBhIGxlYWRpbmcgYmxhbmsgdG9rZW4gLSBpc3N1ZSBjMTk1CiAgICBteSAkdHlwZSA9ICRyTEwtPlskS19maXJzdF0tPltfVFlQRV9dOwogICAgcmV0dXJuIGlmICggJHR5cGUgZXEgJ2InICk7CgogICAgbXkgJHN0cnVjdHVyYWxfaW5kZW50YXRpb25fbGV2ZWwgPSAkc2VsZi0+W19yYWRqdXN0ZWRfbGV2ZWxzX10tPlskS19maXJzdF07CgogICAgIyByZWNvcmQgbWF4IHN0cnVjdHVyYWwgZGVwdGggZm9yIGxvZyBmaWxlCiAgICBpZiAoICRzdHJ1Y3R1cmFsX2luZGVudGF0aW9uX2xldmVsID4gJHNlbGYtPltfbWF4aW11bV9CTE9DS19sZXZlbF9dICkgewogICAgICAgICRzZWxmLT5bX21heGltdW1fQkxPQ0tfbGV2ZWxfXSAgICAgICAgID0gJHN0cnVjdHVyYWxfaW5kZW50YXRpb25fbGV2ZWw7CiAgICAgICAgJHNlbGYtPltfbWF4aW11bV9CTE9DS19sZXZlbF9hdF9saW5lX10gPSAkbGluZV9udW1iZXI7CiAgICB9CgogICAgbXkgJHR5cGVfc2VxdWVuY2UgPSAkckxMLT5bJEtfZmlyc3RdLT5bX1RZUEVfU0VRVUVOQ0VfXTsKICAgIG15ICRpc19jbG9zaW5nX2Jsb2NrID0KICAgICAgICAgJHR5cGVfc2VxdWVuY2UKICAgICAgJiYgJHNlbGYtPltfcmJsb2NrX3R5cGVfb2Zfc2Vxbm9fXS0+eyR0eXBlX3NlcXVlbmNlfQogICAgICAmJiAkdHlwZSBlcSAnfSc7CgogICAgaWYgKCAkZ3Vlc3NlZF9pbmRlbnRhdGlvbl9sZXZlbCBuZSAkc3RydWN0dXJhbF9pbmRlbnRhdGlvbl9sZXZlbCApIHsKICAgICAgICAkc2VsZi0+W19sYXN0X3RhYmJpbmdfZGlzYWdyZWVtZW50X10gPSAkbGluZV9udW1iZXI7CgogICAgICAgIGlmICgkaXNfY2xvc2luZ19ibG9jaykgewoKICAgICAgICAgICAgaWYgKCAhJHNlbGYtPltfaW5fYnJhY2VfdGFiYmluZ19kaXNhZ3JlZW1lbnRfXSApIHsKICAgICAgICAgICAgICAgICRzZWxmLT5bX2luX2JyYWNlX3RhYmJpbmdfZGlzYWdyZWVtZW50X10gPSAkbGluZV9udW1iZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAhJHNlbGYtPltfZmlyc3RfYnJhY2VfdGFiYmluZ19kaXNhZ3JlZW1lbnRfXSApIHsKICAgICAgICAgICAgICAgICRzZWxmLT5bX2ZpcnN0X2JyYWNlX3RhYmJpbmdfZGlzYWdyZWVtZW50X10gPSAkbGluZV9udW1iZXI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICggISRzZWxmLT5bX2luX3RhYmJpbmdfZGlzYWdyZWVtZW50X10gKSB7CiAgICAgICAgICAgICRzZWxmLT5bX3RhYmJpbmdfZGlzYWdyZWVtZW50X2NvdW50X10rKzsKCiAgICAgICAgICAgIGlmICggJHNlbGYtPltfdGFiYmluZ19kaXNhZ3JlZW1lbnRfY291bnRfXSA8PSBNQVhfTkFHX01FU1NBR0VTICkgewogICAgICAgICAgICAgICAgd3JpdGVfbG9nZmlsZV9lbnRyeSgKIlN0YXJ0IGluZGVudGF0aW9uIGRpc2FncmVlbWVudDogaW5wdXQ9JGd1ZXNzZWRfaW5kZW50YXRpb25fbGV2ZWw7IG91dHB1dD0kc3RydWN0dXJhbF9pbmRlbnRhdGlvbl9sZXZlbFxuIgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkc2VsZi0+W19pbl90YWJiaW5nX2Rpc2FncmVlbWVudF9dICAgID0gJGxpbmVfbnVtYmVyOwogICAgICAgICAgICAkc2VsZi0+W19maXJzdF90YWJiaW5nX2Rpc2FncmVlbWVudF9dID0gJGxpbmVfbnVtYmVyCiAgICAgICAgICAgICAgdW5sZXNzICggJHNlbGYtPltfZmlyc3RfdGFiYmluZ19kaXNhZ3JlZW1lbnRfXSApOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewoKICAgICAgICAkc2VsZi0+W19pbl9icmFjZV90YWJiaW5nX2Rpc2FncmVlbWVudF9dID0gMCBpZiAoJGlzX2Nsb3NpbmdfYmxvY2spOwoKICAgICAgICBteSAkaW5fdGFiYmluZ19kaXNhZ3JlZW1lbnQgPSAkc2VsZi0+W19pbl90YWJiaW5nX2Rpc2FncmVlbWVudF9dOwogICAgICAgIGlmICgkaW5fdGFiYmluZ19kaXNhZ3JlZW1lbnQpIHsKCiAgICAgICAgICAgIGlmICggJHNlbGYtPltfdGFiYmluZ19kaXNhZ3JlZW1lbnRfY291bnRfXSA8PSBNQVhfTkFHX01FU1NBR0VTICkgewogICAgICAgICAgICAgICAgd3JpdGVfbG9nZmlsZV9lbnRyeSgKIkVuZCBpbmRlbnRhdGlvbiBkaXNhZ3JlZW1lbnQgZnJvbSBpbnB1dCBsaW5lICRpbl90YWJiaW5nX2Rpc2FncmVlbWVudFxuIgogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBpZiAoICRzZWxmLT5bX3RhYmJpbmdfZGlzYWdyZWVtZW50X2NvdW50X10gPT0gTUFYX05BR19NRVNTQUdFUyApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgd3JpdGVfbG9nZmlsZV9lbnRyeSgKICAgICAgICAgICAgICAgICAgICAgICAgIk5vIGZ1cnRoZXIgdGFiYmluZyBkaXNhZ3JlZW1lbnRzIHdpbGwgYmUgbm90ZWRcbiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgICRzZWxmLT5bX2luX3RhYmJpbmdfZGlzYWdyZWVtZW50X10gPSAwOwoKICAgICAgICB9CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBjb21wYXJlX2luZGVudGF0aW9uX2xldmVscwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQ09ERSBTRUNUSU9OIDg6IFV0aWxpdGllcyBmb3Igc2V0dGluZyBicmVha3BvaW50cwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnsgICAgIyMgYmVnaW4gY2xvc3VyZSBzZXRfZm9yY2VkX2JyZWFrcG9pbnQKCiAgICBteSBAZm9yY2VkX2JyZWFrcG9pbnRfdW5kb19zdGFjazsKCiAgICAjIFRoZXNlIGFyZSBnbG9iYWwgdmFycyBmb3IgZWZmaWNpZW5jeToKICAgICMgbXkgJGZvcmNlZF9icmVha3BvaW50X2NvdW50OwogICAgIyBteSAkZm9yY2VkX2JyZWFrcG9pbnRfdW5kb19jb3VudDsKICAgICMgbXkgJGluZGV4X21heF9mb3JjZWRfYnJlYWs7CgogICAgIyBCcmVhayBiZWZvcmUgb3IgYWZ0ZXIgY2VydGFpbiB0b2tlbnMgYmFzZWQgb24gdXNlciBzZXR0aW5ncwogICAgbXkgJWJyZWFrX2JlZm9yZV9vcl9hZnRlcl90b2tlbjsKCiAgICBCRUdJTiB7CgogICAgICAgICMgVXBkYXRlZCB0byB1c2UgYWxsIG9wZXJhdG9ycy4gVGhpcyBmaXhlcyBjYXNlIGIxMDU0CiAgICAgICAgIyBIZXJlIGlzIHRoZSBwcmV2aW91cyBzaW1wbGlmaWVkIHZlcnNpb246CiAgICAgICAgIyMgbXkgQHEgPSBxdyggLiA6ID8gYW5kIG9yIHhvciAmJiB8fCApOwogICAgICAgIG15IEBxID0gQGFsbF9vcGVyYXRvcnM7CgogICAgICAgIHB1c2ggQHEsICcsJzsKICAgICAgICBAYnJlYWtfYmVmb3JlX29yX2FmdGVyX3Rva2Vue0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CiAgICB9ICMjIGVuZCBCRUdJTgoKICAgIHN1YiBzZXRfZmFrZV9icmVha3BvaW50IHsKCiAgICAgICAgIyBKdXN0IGJ1bXAgdXAgdGhlIGJyZWFrcG9pbnQgY291bnQgYXMgYSBzaWduYWwgdGhhdCB0aGVyZSBhcmUgYnJlYWtzLgogICAgICAgICMgVGhpcyBpcyB1c2VmdWwgaWYgd2UgaGF2ZSBicmVha3MgYnV0IG1heSB3YW50IHRvIHBvc3Rwb25lIGRlY2lkaW5nCiAgICAgICAgIyB3aGVyZSB0byBtYWtlIHRoZW0uCiAgICAgICAgJGZvcmNlZF9icmVha3BvaW50X2NvdW50Kys7CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIHNldF9mYWtlX2JyZWFrcG9pbnQKCiAgICB1c2UgY29uc3RhbnQgREVCVUdfRk9SQ0UgPT4gMDsKCiAgICBzdWIgc2V0X2ZvcmNlZF9icmVha3BvaW50IHsKICAgICAgICBteSAoICRzZWxmLCAkaSApID0gQF87CgogICAgICAgICMgU2V0IGEgYnJlYWtwb2ludCBBRlRFUiB0aGUgdG9rZW4gYXQgaW5kZXggJGkgaW4gdGhlIF90b19nbyBhcnJheXMuCgogICAgICAgICMgRXhjZXB0aW9uczoKICAgICAgICAjIC0gSWYgdGhlIHRva2VuIGF0IGluZGV4ICRpIGlzIGEgYmxhbmssIGJhY2t1cCB0byAkaS0xIHRvCiAgICAgICAgIyAgIGdldCB0byB0aGUgcHJldmlvdXMgbm9uYmxhbmsgdG9rZW4uCiAgICAgICAgIyAtIEZvciBjZXJ0YWluIHRva2VucywgdGhlIGJyZWFrIG1heSBiZSBwbGFjZWQgQkVGT1JFIHRoZSB0b2tlbgogICAgICAgICMgICBhdCBpbmRleCAkaSwgZGVwZW5kaW5nIG9uIHVzZXIgYnJlYWsgcHJlZmVyZW5jZSBzZXR0aW5ncy4KICAgICAgICAjIC0gSWYgYSBicmVhayBpcyBtYWRlIGFmdGVyIGFuIG9wZW5pbmcgdG9rZW4sIHRoZW4gYSBicmVhayB3aWxsCiAgICAgICAgIyAgIGFsc28gYmUgbWFkZSBiZWZvcmUgdGhlIGNvcnJlc3BvbmRpbmcgY2xvc2luZyB0b2tlbi4KCiAgICAgICAgIyBSZXR1cm5zOiAkaV9ub25ibGFuawogICAgICAgICMgICA9IGluZGV4IG9mIHRoZSB0b2tlbiBhZnRlciB3aGljaCB0aGUgYnJlYWtwb2ludCB3YXMgYWN0dWFsbHkgcGxhY2VkCiAgICAgICAgIyAgID0gdW5kZWYgaWYgYnJlYWtwb2ludCB3YXMgbm90IHNldC4KICAgICAgICBteSAkaV9ub25ibGFuazsKCiAgICAgICAgaWYgKCAhZGVmaW5lZCgkaSkgfHwgJGkgPCAwICkgewoKICAgICAgICAgICAgIyBDYWxscyB3aXRoIGJhZCBpbmRleCAkaSBhcmUgaGFybWxlc3MgYnV0IHdhc3RlIHRpbWUgYW5kIHNob3VsZAogICAgICAgICAgICAjIGJlIGNhdWdodCBhbmQgZWxpbWluYXRlZCBkdXJpbmcgY29kZSBkZXZlbG9wbWVudC4KICAgICAgICAgICAgaWYgKERFVkVMX01PREUpIHsKICAgICAgICAgICAgICAgIG15ICggJGEsICRiLCAkYyApID0gY2FsbGVyKCk7CiAgICAgICAgICAgICAgICBGYXVsdCgKIkJhZCBjYWxsIHRvIGZvcmNlZCBicmVha3BvaW50IGZyb20gJGEgJGIgJGMgOyBjYWxsZWQgd2l0aCBpPSRpOyBwbGVhc2UgZml4XG4iCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgQnJlYWsgYWZ0ZXIgdG9rZW4gJGkKICAgICAgICAkaV9ub25ibGFuayA9ICRzZWxmLT5zZXRfZm9yY2VkX2JyZWFrcG9pbnRfQUZURVIoJGkpOwoKICAgICAgICAjIElmIHdlIGJyZWFrIGF0IGFuIG9wZW5pbmcgY29udGFpbmVyLi5icmVhayBhdCB0aGUgY2xvc2luZwogICAgICAgIG15ICRzZXRfY2xvc2luZzsKICAgICAgICBpZiAoIGRlZmluZWQoJGlfbm9uYmxhbmspCiAgICAgICAgICAgICYmICRpc19vcGVuaW5nX3NlcXVlbmNlX3Rva2VueyAkdG9rZW5zX3RvX2dvWyRpX25vbmJsYW5rXSB9ICkKICAgICAgICB7CiAgICAgICAgICAgICRzZXRfY2xvc2luZyA9IDE7CiAgICAgICAgICAgICRzZWxmLT5zZXRfY2xvc2luZ19icmVha3BvaW50KCRpX25vbmJsYW5rKTsKICAgICAgICB9CgogICAgICAgIERFQlVHX0ZPUkNFICYmIGRvIHsKICAgICAgICAgICAgbXkgKCAkcGtnLCAkZmlsZV91dSwgJGxubyApID0gY2FsbGVyKCk7CiAgICAgICAgICAgIG15ICRtc2cgPQoiRk9SQ0UgJGZvcmNlZF9icmVha3BvaW50X2NvdW50IGFmdGVyIGNhbGwgZnJvbSAkcGtnICRsbm8gd2l0aCBpPSRpIG1heD0kbWF4X2luZGV4X3RvX2dvIjsKICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkaV9ub25ibGFuaykgKSB7CiAgICAgICAgICAgICAgICAkaSA9IEVNUFRZX1NUUklORyB1bmxlc3MgZGVmaW5lZCgkaSk7CiAgICAgICAgICAgICAgICAkbXNnIC49ICIgYnV0IGNvdWxkIG5vdCBzZXQgYnJlYWsgYWZ0ZXIgaT0nJGknXG4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgbXkgJG5vYnIgPSAkbm9icmVha190b19nb1skaV9ub25ibGFua107CiAgICAgICAgICAgICAgICAkbm9iciA9IDAgaWYgKCAhZGVmaW5lZCgkbm9icikgKTsKICAgICAgICAgICAgICAgICRtc2cgLj0gPDxFT007CnNldCBicmVhayBhZnRlciAkaV9ub25ibGFuazogdG9rPSR0b2tlbnNfdG9fZ29bJGlfbm9uYmxhbmtdIHR5cGU9JHR5cGVzX3RvX2dvWyRpX25vbmJsYW5rXSBub2JyPSRub2JyCkVPTQogICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRzZXRfY2xvc2luZykgKSB7CiAgICAgICAgICAgICAgICAgICAgJG1zZyAuPQoiIEFsc28gc2V0IGNsb3NpbmcgYnJlYWtwb2ludCBjb3JyZXNwb25kaW5nIHRvIHRoaXMgdG9rZW5cbiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcHJpbnQgeypTVERPVVR9ICRtc2c7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuICRpX25vbmJsYW5rOwogICAgfSAjIyBlbmQgc3ViIHNldF9mb3JjZWRfYnJlYWtwb2ludAoKICAgIHN1YiBzZXRfZm9yY2VkX2JyZWFrcG9pbnRfQUZURVIgewogICAgICAgIG15ICggJHNlbGYsICRpICkgPSBAXzsKCiAgICAgICAgIyBTZXQgYSBicmVha3BvaW50IEFGVEVSIHRoZSB0b2tlbiBhdCBpbmRleCAkaSBpbiB0aGUgX3RvX2dvIGFycmF5cy4KCiAgICAgICAgIyBFeGNlcHRpb25zOgogICAgICAgICMgLSBJZiB0aGUgdG9rZW4gYXQgaW5kZXggJGkgaXMgYSBibGFuaywgYmFja3VwIHRvICRpLTEgdG8KICAgICAgICAjICAgZ2V0IHRvIHRoZSBwcmV2aW91cyBub25ibGFuayB0b2tlbi4KICAgICAgICAjIC0gRm9yIGNlcnRhaW4gdG9rZW5zLCB0aGUgYnJlYWsgbWF5IGJlIHBsYWNlZCBCRUZPUkUgdGhlIHRva2VuCiAgICAgICAgIyAgIGF0IGluZGV4ICRpLCBkZXBlbmRpbmcgb24gdXNlciBicmVhayBwcmVmZXJlbmNlIHNldHRpbmdzLgoKICAgICAgICAjIFJldHVybnM6CiAgICAgICAgIyAgIC0gdGhlIGluZGV4IG9mIHRoZSB0b2tlbiBhZnRlciB3aGljaCB0aGUgYnJlYWsgd2FzIHNldCwgb3IKICAgICAgICAjICAgLSB1bmRlZiBpZiBubyBicmVhayB3YXMgc2V0CgogICAgICAgICMgVGhpcyByb3V0aW5lIGlzIG9ubHkgY2FsbGVkIGJ5IHN1YiBzZXRfZm9yY2VkX2JyZWFrcG9pbnQgYW5kCiAgICAgICAgIyBzdWIgc2V0X2Nsb3NpbmdfYnJlYWtwb2ludC4KCiAgICAgICAgcmV0dXJuIGlmICggIWRlZmluZWQoJGkpICk7CiAgICAgICAgcmV0dXJuIGlmICggJGkgPCAwICk7CgogICAgICAgICMgQmFjayB1cCBhdCBhIGJsYW5rIHNvIHdlIGhhdmUgYSB0b2tlbiB0byBleGFtaW5lLgogICAgICAgICMgVGhpcyB3YXMgYWRkZWQgdG8gZml4IGZvciBjYXNlcyBsaWtlIGI5MzIgaW52b2x2aW5nIGFuICc9JyBicmVhay4KICAgICAgICBpZiAoICRpID4gMCAmJiAkdHlwZXNfdG9fZ29bJGldIGVxICdiJyApIHsgJGktLSB9CgogICAgICAgICMgTmV2ZXIgYnJlYWsgYmV0d2VlbiB3ZWxkZWQgdG9rZW5zCiAgICAgICAgcmV0dXJuCiAgICAgICAgICBpZiAoICR0b3RhbF93ZWxkX2NvdW50CiAgICAgICAgICAgICYmICRzZWxmLT5bX3JLX3dlbGRfcmlnaHRfXS0+eyAkS190b19nb1skaV0gfSApOwoKICAgICAgICBteSAkdG9rZW4gPSAkdG9rZW5zX3RvX2dvWyRpXTsKICAgICAgICBteSAkdHlwZSAgPSAkdHlwZXNfdG9fZ29bJGldOwoKICAgICAgICAjIHBhdGNoIGZvciBwaGFudG9tIGNvbW1hcywgdXNlZCBmb3IgLXF3YWYKICAgICAgICBpZiAoICEkdG9rZW4gJiYgJHR5cGUgZXEgJywnICkgeyAkdG9rZW4gPSAnLCcgfQoKICAgICAgICAjIEZvciBjZXJ0YWluIHRva2VucywgdXNlIHVzZXIgc2V0dGluZ3MgdG8gZGVjaWRlIGlmIHdlIGJyZWFrIGJlZm9yZSBvcgogICAgICAgICMgYWZ0ZXIgaXQKICAgICAgICBpZiAoICRicmVha19iZWZvcmVfb3JfYWZ0ZXJfdG9rZW57JHRva2VufQogICAgICAgICAgICAmJiAoICR0eXBlIGVxICR0b2tlbiB8fCAkdHlwZSBlcSAnaycgKSApCiAgICAgICAgewogICAgICAgICAgICBpZiAoICR3YW50X2JyZWFrX2JlZm9yZXskdG9rZW59ICYmICRpID49IDAgKSB7ICRpLS0gfQogICAgICAgIH0KCiAgICAgICAgIyBicmVha3MgYXJlIGZvcmNlZCBiZWZvcmUgJ2lmJyBhbmQgJ3VubGVzcycKICAgICAgICBlbHNpZiAoICRpc19pZl91bmxlc3N7JHRva2VufSAmJiAkdHlwZSBlcSAnaycgKSB7ICRpLS0gfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAjIGRvIG5vdCBicmVhayBiZWZvcmUKICAgICAgICB9CgogICAgICAgIGlmICggJGkgPj0gMCAmJiAkaSA8PSAkbWF4X2luZGV4X3RvX2dvICkgewogICAgICAgICAgICBteSAkaV9ub25ibGFuayA9ICggJHR5cGVzX3RvX2dvWyRpXSBuZSAnYicgKSA/ICRpIDogJGkgLSAxOwoKICAgICAgICAgICAgaWYgKCAgICRpX25vbmJsYW5rID49IDAKICAgICAgICAgICAgICAgICYmICEkbm9icmVha190b19nb1skaV9ub25ibGFua10KICAgICAgICAgICAgICAgICYmICEkZm9yY2VkX2JyZWFrcG9pbnRfdG9fZ29bJGlfbm9uYmxhbmtdICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJGZvcmNlZF9icmVha3BvaW50X3RvX2dvWyRpX25vbmJsYW5rXSA9IDE7CgogICAgICAgICAgICAgICAgaWYgKCAkaV9ub25ibGFuayA+ICRpbmRleF9tYXhfZm9yY2VkX2JyZWFrICkgewogICAgICAgICAgICAgICAgICAgICRpbmRleF9tYXhfZm9yY2VkX2JyZWFrID0gJGlfbm9uYmxhbms7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkZm9yY2VkX2JyZWFrcG9pbnRfY291bnQrKzsKICAgICAgICAgICAgICAgICRmb3JjZWRfYnJlYWtwb2ludF91bmRvX3N0YWNrWyAkZm9yY2VkX2JyZWFrcG9pbnRfdW5kb19jb3VudCsrIF0KICAgICAgICAgICAgICAgICAgPSAkaV9ub25ibGFuazsKCiAgICAgICAgICAgICAgICAjIHN1Y2Nlc3MKICAgICAgICAgICAgICAgIHJldHVybiAkaV9ub25ibGFuazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgc2V0X2ZvcmNlZF9icmVha3BvaW50X0FGVEVSCgogICAgc3ViIGNsZWFyX2JyZWFrcG9pbnRfdW5kb19zdGFjayB7CiAgICAgICAgbXkgKCRzZWxmKSA9IEBfOwogICAgICAgICRmb3JjZWRfYnJlYWtwb2ludF91bmRvX2NvdW50ID0gMDsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgdXNlIGNvbnN0YW50IERFQlVHX1VORE9CUCA9PiAwOwoKICAgIHN1YiB1bmRvX2ZvcmNlZF9icmVha3BvaW50X3N0YWNrIHsKCiAgICAgICAgbXkgKCAkc2VsZiwgJGlfc3RhcnQgKSA9IEBfOwoKICAgICAgICAjIEdpdmVuICRpX3N0YXJ0LCBhIG5vbi1uZWdhdGl2ZSBpbmRleCB0aGUgJ3VuZG8gc3RhY2snIG9mIGJyZWFrcG9pbnRzLAogICAgICAgICMgcmVtb3ZlIGFsbCBicmVha3BvaW50cyBmcm9tIHRoZSB0b3Agb2YgdGhlICd1bmRvIHN0YWNrJyBkb3duIHRvIGFuZAogICAgICAgICMgaW5jbHVkaW5nIGluZGV4ICRpX3N0YXJ0LgoKICAgICAgICAjIFRoZSAndW5kbyBzdGFjaycgaXMgYSBzdGFjayBvZiBhbGwgYnJlYWtwb2ludHMgbWFkZSBmb3IgYSBiYXRjaCBvZgogICAgICAgICMgY29kZS4KCiAgICAgICAgaWYgKCAkaV9zdGFydCA8IDAgKSB7CiAgICAgICAgICAgICRpX3N0YXJ0ID0gMDsKICAgICAgICAgICAgbXkgKCAkcGtnLCAkZmlsZV91dSwgJGxubyApID0gY2FsbGVyKCk7CgogICAgICAgICAgICAjIEJhZCBjYWxsLCBjYW4gb25seSBiZSBkdWUgdG8gYSByZWNlbnQgcHJvZ3JhbW1pbmcgY2hhbmdlLgogICAgICAgICAgICBGYXVsdCgKIlByb2dyYW0gQnVnOiB1bmRvX2ZvcmNlZF9icmVha3BvaW50X3N0YWNrIGZyb20gJHBrZyAkbG5vIGhhcyBiYWQgaT0kaV9zdGFydCAiCiAgICAgICAgICAgICkgaWYgKERFVkVMX01PREUpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICB3aGlsZSAoICRmb3JjZWRfYnJlYWtwb2ludF91bmRvX2NvdW50ID4gJGlfc3RhcnQgKSB7CiAgICAgICAgICAgICRmb3JjZWRfYnJlYWtwb2ludF91bmRvX2NvdW50LS07CiAgICAgICAgICAgIG15ICRpID0KICAgICAgICAgICAgICAkZm9yY2VkX2JyZWFrcG9pbnRfdW5kb19zdGFja1skZm9yY2VkX2JyZWFrcG9pbnRfdW5kb19jb3VudF07CiAgICAgICAgICAgIGlmICggJGkgPj0gMCAmJiAkaSA8PSAkbWF4X2luZGV4X3RvX2dvICkgewogICAgICAgICAgICAgICAgJGZvcmNlZF9icmVha3BvaW50X3RvX2dvWyRpXSA9IDA7CiAgICAgICAgICAgICAgICAkZm9yY2VkX2JyZWFrcG9pbnRfY291bnQtLTsKCiAgICAgICAgICAgICAgICBERUJVR19VTkRPQlAgJiYgZG8gewogICAgICAgICAgICAgICAgICAgIG15ICggJHBrZywgJGZpbGVfdXUsICRsbm8gKSA9IGNhbGxlcigpOwogICAgICAgICAgICAgICAgICAgIHByaW50IHsqU1RET1VUfQoiVU5ET0JQOiB1bmRvIGZvcmNlZF9icmVha3BvaW50IGk9JGkgJGZvcmNlZF9icmVha3BvaW50X3VuZG9fY291bnQgZnJvbSAkcGtnICRsbm8gbWF4PSRtYXhfaW5kZXhfdG9fZ29cbiI7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHNob3VsZG4ndCBoYXBwZW4sIGJ1dCBub3QgYSBjcml0aWNhbCBlcnJvcgogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChERVZFTF9NT0RFKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgKCAkcGtnLCAkZmlsZV91dSwgJGxubyApID0gY2FsbGVyKCk7CiAgICAgICAgICAgICAgICAgICAgRmF1bHQoPDxFT00pOwpQcm9ncmFtIEJ1ZzogdW5kb19mb3JjZWRfYnJlYWtwb2ludCBmcm9tICRwa2cgJGxubyBoYXMgaT0kaSBidXQgbWF4PSRtYXhfaW5kZXhfdG9fZ28KRU9NCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9ICMjIGVuZCB3aGlsZSAoICRmb3JjZWRfYnJlYWtwb2ludF91bmRvX2NvdW50Li4uKQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiB1bmRvX2ZvcmNlZF9icmVha3BvaW50X3N0YWNrCn0gIyMgZW5kIGNsb3N1cmUgc2V0X2ZvcmNlZF9icmVha3BvaW50Cgp7ICAgICMjIGJlZ2luIGNsb3N1cmUgc2V0X2Nsb3NpbmdfYnJlYWtwb2ludAoKICAgIG15ICVwb3N0cG9uZWRfYnJlYWtwb2ludDsKCiAgICBzdWIgaW5pdGlhbGl6ZV9wb3N0cG9uZWRfYnJlYWtwb2ludCB7CiAgICAgICAgJXBvc3Rwb25lZF9icmVha3BvaW50ID0gKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHN1YiBoYXNfcG9zdHBvbmVkX2JyZWFrcG9pbnQgewogICAgICAgIG15ICgkc2Vxbm8pID0gQF87CiAgICAgICAgcmV0dXJuICRwb3N0cG9uZWRfYnJlYWtwb2ludHskc2Vxbm99OwogICAgfQoKICAgIHN1YiBzZXRfY2xvc2luZ19icmVha3BvaW50IHsKCiAgICAgICAgbXkgKCAkc2VsZiwgJGlfYnJlYWsgKSA9IEBfOwoKICAgICAgICAjIFNldCBhIGJyZWFrcG9pbnQgYXQgYSBtYXRjaGluZyBjbG9zaW5nIHRva2VuCiAgICAgICAgIyBHaXZlbjoKICAgICAgICAjICAgJGlfYnJlYWsgPSBpbmRleCBvZiB0aGUgb3BlbmluZyB0b2tlbgoKICAgICAgICBpZiAoIGRlZmluZWQoICRtYXRlX2luZGV4X3RvX2dvWyRpX2JyZWFrXSApICkgewoKICAgICAgICAgICAgIyBEb24ndCByZWR1Y2UgdGhlICcyJyBpbiB0aGUgc3RhdGVtZW50IGJlbG93LgogICAgICAgICAgICAjIFRlc3QgZmlsZXM6IGF0dHJpYi50LCBCYXNpY0x5eC5wbS5odG1sCiAgICAgICAgICAgIGlmICggJG1hdGVfaW5kZXhfdG9fZ29bJGlfYnJlYWtdID4gJGlfYnJlYWsgKyAyICkgewoKICAgICAgICAgICAgICMgYnJlYWsgYmVmb3JlIH0gXSBhbmQgKSwgYnV0IHN1YiBzZXRfZm9yY2VkX2JyZWFrcG9pbnQgd2lsbCBkZWNpZGUKICAgICAgICAgICAgICMgdG8gYnJlYWsgYmVmb3JlIG9yIGFmdGVyIGEgPyBhbmQgOgogICAgICAgICAgICAgICAgbXkgJGluYyA9ICggJHRva2Vuc190b19nb1skaV9icmVha10gZXEgJz8nICkgPyAwIDogMTsKICAgICAgICAgICAgICAgICRzZWxmLT5zZXRfZm9yY2VkX2JyZWFrcG9pbnRfQUZURVIoCiAgICAgICAgICAgICAgICAgICAgJG1hdGVfaW5kZXhfdG9fZ29bJGlfYnJlYWtdIC0gJGluYyApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBteSAkdHlwZV9zZXF1ZW5jZSA9ICR0eXBlX3NlcXVlbmNlX3RvX2dvWyRpX2JyZWFrXTsKICAgICAgICAgICAgaWYgKCR0eXBlX3NlcXVlbmNlKSB7CiAgICAgICAgICAgICAgICAkcG9zdHBvbmVkX2JyZWFrcG9pbnR7JHR5cGVfc2VxdWVuY2V9ID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgc2V0X2Nsb3NpbmdfYnJlYWtwb2ludAp9ICMjIGVuZCBjbG9zdXJlIHNldF9jbG9zaW5nX2JyZWFrcG9pbnQKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQ09ERSBTRUNUSU9OIDk6IFByb2Nlc3MgYmF0Y2hlcyBvZiBjb2RlCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgp7ICAgICMjIGJlZ2luIGNsb3N1cmUgZ3JpbmRfYmF0Y2hfb2ZfQ09ERQoKICAgICMgVGhlIHJvdXRpbmVzIGluIHRoaXMgY2xvc3VyZSBiZWdpbiB0aGUgcHJvY2Vzc2luZyBvZiBhICdiYXRjaCcgb2YgY29kZS4KCiAgICAjIEEgdmFyaWFibGUgdG8ga2VlcCB0cmFjayBvZiBjb25zZWN1dGl2ZSBub25ibGFuayBsaW5lcyBzbyB0aGF0IHdlIGNhbgogICAgIyBpbnNlcnQgb2NjYXNpb25hbCBibGFua3MKICAgIG15IEBub25ibGFua19saW5lc19hdF9kZXB0aDsKCiAgICAjIEEgdmFyaWFibGUgdG8gcmVtZW1iZXIgbWF4aW11bSBzaXplIG9mIHByZXZpb3VzIGJhdGNoZXM7IHRoaXMgaXMgbmVlZGVkCiAgICAjIGJ5IHRoZSBsb2dpY2FsIHBhZGRpbmcgcm91dGluZQogICAgbXkgJHBlYWtfYmF0Y2hfc2l6ZTsKICAgIG15ICRiYXRjaF9jb3VudDsKCiAgICAjIHZhcmlhYmxlcyB0byBrZWVwIHRyYWNrIG9mIGluZGVudGF0aW9uIG9mIHVubWF0Y2hlZCBjb250YWluZXJzLgogICAgbXkgJXNhdmVkX29wZW5pbmdfaW5kZW50YXRpb247CgogICAgc3ViIGluaXRpYWxpemVfZ3JpbmRfYmF0Y2hfb2ZfQ09ERSB7CiAgICAgICAgQG5vbmJsYW5rX2xpbmVzX2F0X2RlcHRoICAgPSAoKTsKICAgICAgICAkcGVha19iYXRjaF9zaXplICAgICAgICAgICA9IDA7CiAgICAgICAgJGJhdGNoX2NvdW50ICAgICAgICAgICAgICAgPSAwOwogICAgICAgICVzYXZlZF9vcGVuaW5nX2luZGVudGF0aW9uID0gKCk7CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGluaXRpYWxpemVfZ3JpbmRfYmF0Y2hfb2ZfQ09ERQoKICAgICMgc3ViIGdyaW5kX2JhdGNoX29mX0NPREUgcmVjZWl2ZXMgc2VjdGlvbnMgb2YgY29kZSB3aGljaCBhcmUgdGhlIGxvbmdlc3QKICAgICMgcG9zc2libGUgbGluZXMgd2l0aG91dCBhIGJyZWFrLiAgSW4gb3RoZXIgd29yZHMsIGl0IHJlY2VpdmVzIHdoYXQgaXMgbGVmdAogICAgIyBhZnRlciBhcHBseWluZyBhbGwgYnJlYWtzIGZvcmNlZCBieSBibGFuayBsaW5lcywgYmxvY2sgY29tbWVudHMsIHNpZGUKICAgICMgY29tbWVudHMsIHBvZCB0ZXh0LCBhbmQgc3RydWN0dXJhbCBicmFjZXMuICBJdHMgam9iIGlzIHRvIGJyZWFrIHRoaXMgY29kZQogICAgIyBkb3duIGludG8gc21hbGxlciBwaWVjZXMsIGlmIG5lY2Vzc2FyeSwgd2hpY2ggZml0IHdpdGhpbiB0aGUgbWF4aW11bQogICAgIyBhbGxvd2VkIGxpbmUgbGVuZ3RoLiAgVGhlbiBpdCBzZW5kcyB0aGUgcmVzdWx0aW5nIGxpbmVzIG9mIGNvZGUgb24gZG93bgogICAgIyB0aGUgcGlwZWxpbmUgdG8gdGhlIFZlcnRpY2FsQWxpZ25lciBwYWNrYWdlLCBicmVha2luZyB0aGUgY29kZSBpbnRvCiAgICAjIGNvbnRpbnVhdGlvbiBsaW5lcyBhcyBuZWNlc3NhcnkuICBUaGUgYmF0Y2ggb2YgdG9rZW5zIGFyZSBpbiB0aGUgInRvX2dvIgogICAgIyBhcnJheXMuICBUaGUgbmFtZSAnZ3JpbmQnIGlzIHNsaWdodGx5IHN1Z2dlc3RpdmUgb2YgYSBtYWNoaW5lIGNvbnRpbnVhbGx5CiAgICAjIGJyZWFraW5nIGRvd24gbG9uZyBsaW5lcyBvZiBjb2RlLCBidXQgbWFpbmx5IGl0IGlzIHVuaXF1ZSBhbmQgZWFzeSB0bwogICAgIyByZW1lbWJlciBhbmQgZmluZCB3aXRoIGFuIGVkaXRvciBzZWFyY2guCgogICAgIyBUaGUgdHdvIHJvdXRpbmVzICdwcm9jZXNzX2xpbmVfb2ZfQ09ERScgYW5kICdncmluZF9iYXRjaF9vZl9DT0RFJyB3b3JrCiAgICAjIHRvZ2V0aGVyIGluIHRoZSBmb2xsb3dpbmcgd2F5OgoKICAgICMgLSAncHJvY2Vzc19saW5lX29mX0NPREUnIHJlY2VpdmVzIHRoZSBvcmlnaW5hbCBJTlBVVCBsaW5lcyBvbmUtYnktb25lIGFuZAogICAgIyBjb21iaW5lcyB0aGVtIGludG8gdGhlIGxhcmdlc3Qgc2VxdWVuY2VzIG9mIHRva2VucyB3aGljaCBtaWdodCBmb3JtIGEgbmV3CiAgICAjIGxpbmUuCiAgICAjIC0gJ2dyaW5kX2JhdGNoX29mX0NPREUnIGRldGVybWluZXMgd2hpY2ggdG9rZW5zIHdpbGwgZm9ybSB0aGUgT1VUUFVUCiAgICAjIGxpbmVzLgoKICAgICMgU28gc3ViICdwcm9jZXNzX2xpbmVfb2ZfQ09ERScgYnVpbGRzIHVwIHRoZSBsb25nZXN0IHBvc3NpYmxlIGNvbnRpbnVvdXMKICAgICMgc2VxdWVuY2VzIG9mIHRva2VucywgcmVnYXJkbGVzcyBvZiBsaW5lIGxlbmd0aCwgYW5kIHRoZW4KICAgICMgZ3JpbmRfYmF0Y2hfb2ZfQ09ERSBicmVha3MgdGhlc2Ugc2VxdWVuY2VzIGJhY2sgZG93biBpbnRvIHRoZSBuZXcgb3V0cHV0CiAgICAjIGxpbmVzLgoKICAgICMgU3ViICdncmluZF9iYXRjaF9vZl9DT0RFJyBzaGlwcyBpdHMgb3V0cHV0IGxpbmVzIHRvIHRoZSB2ZXJ0aWNhbCBhbGlnbmVyLgoKICAgIHVzZSBjb25zdGFudCBERUJVR19HUklORCA9PiAwOwoKICAgIHN1YiBjaGVja19ncmluZF9pbnB1dCB7CgogICAgICAgIG15ICgkc2VsZikgPSBAXzsKCiAgICAgICAgIyBDaGVjayBmb3IgdmFsaWQgaW5wdXQgdG8gc3ViIGdyaW5kX2JhdGNoX29mX0NPREUuICBBbiBlcnJvciBoZXJlCiAgICAgICAgIyB3b3VsZCBtb3N0IGxpa2VseSBiZSBkdWUgdG8gYW4gZXJyb3IgaW4gJ3N1YiBzdG9yZV90b2tlbl90b19nbycuCiAgICAgICAgIyBOT1RFOiBUaGlzIGlzIG9ubHkgY2FsbGVkIHdoZW4gREVWRUxfTU9ERSBpcyBzZXQuCgogICAgICAgICMgQmUgc3VyZSB0aGVyZSBhcmUgdG9rZW5zIGluIHRoZSBiYXRjaAogICAgICAgIGlmICggJG1heF9pbmRleF90b19nbyA8IDAgKSB7CiAgICAgICAgICAgIEZhdWx0KDw8RU9NKTsKc3ViIGdyaW5kIGluY29ycmVjdGx5IGNhbGxlZCB3aXRoIG1heF9pbmRleF90b19nbz0kbWF4X2luZGV4X3RvX2dvCkVPTQogICAgICAgIH0KICAgICAgICBteSAkS2xpbWl0ID0gJHNlbGYtPltfS2xpbWl0X107CgogICAgICAgICMgVGhlIGxvY2FsIGJhdGNoIHRva2VucyBtdXN0IGJlIGEgY29udGludW91cyBwYXJ0IG9mIHRoZSBnbG9iYWwgdG9rZW4KICAgICAgICAjIGFycmF5LgogICAgICAgIG15ICRLSzsKICAgICAgICBmb3JlYWNoIG15ICRpaSAoIDAgLi4gJG1heF9pbmRleF90b19nbyApIHsKCiAgICAgICAgICAgIG15ICRLbSA9ICRLSzsKCiAgICAgICAgICAgICRLSyA9ICRLX3RvX2dvWyRpaV07CiAgICAgICAgICAgIGlmICggIWRlZmluZWQoJEtLKSB8fCAkS0sgPCAwIHx8ICRLSyA+ICRLbGltaXQgKSB7CiAgICAgICAgICAgICAgICAkS0sgPSAnKHVuZGVmKScgdW5sZXNzIGRlZmluZWQoJEtLKTsKICAgICAgICAgICAgICAgIEZhdWx0KDw8RU9NKTsKYXQgYmF0Y2ggaW5kZXggYXQgaT0kaWksIHRoZSB2YWx1ZSBvZiBLX3RvX2dvWyRpaV0gPSAnJEtLJyBpcyBvdXQgb2YgdGhlIHZhbGlkIHJhbmdlICgwIC0gJEtsaW1pdCkKRU9NCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJGlpID4gMCAmJiAkS0sgIT0gJEttICsgMSApIHsKICAgICAgICAgICAgICAgIG15ICRpbSA9ICRpaSAtIDE7CiAgICAgICAgICAgICAgICBGYXVsdCg8PEVPTSk7Ck5vbi1zZXF1ZW50aWFsIEsgaW5kZXhlczogaT0kaW0gaGFzIEttPSRLbTsgYnV0IGk9JGlpIGhhcyBLPSRLSzsgIGV4cGVjdGluZyBLID0gS20rMQpFT00KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgY2hlY2tfZ3JpbmRfaW5wdXQKCiAgICAjIFRoaXMgZmlsdGVyIHNwZWVkcyB1cCBhIGNyaXRpY2FsIGlmLXRlc3QKICAgIG15ICVxdWlja19maWx0ZXI7CgogICAgQkVHSU4gewogICAgICAgIG15IEBxID0gcXcjIEwgeyAoIFsgUiBdICkgfSA/IDogZiA9PiAjOwogICAgICAgIHB1c2ggQHEsICcsJzsKICAgICAgICBAcXVpY2tfZmlsdGVye0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CiAgICB9CgogICAgc3ViIGdyaW5kX2JhdGNoX29mX0NPREUgewoKICAgICAgICBteSAoJHNlbGYpID0gQF87CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgVGhpcyBzdWIgZGlyZWN0cyB0aGUgZm9ybWF0dGluZyBvZiBvbmUgY29tcGxldGUgYmF0Y2ggb2YgdG9rZW5zLgogICAgICAgICMgVGhlIHRva2VucyBvZiB0aGUgYmF0Y2ggYXJlIGluIHRoZSAnX3RvX2dvJyBhcnJheXMuCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICMgJHRoaXNfYmF0Y2ggPSByZWYgdG8gYXJyYXkgb2YgdmFycyBmb3IgdGhpcyBvdXRwdXQgYmF0Y2gKICAgICAgICBteSAkdGhpc19iYXRjaCA9ICRzZWxmLT5bX3RoaXNfYmF0Y2hfXTsKCiAgICAgICAgJHRoaXNfYmF0Y2gtPltfcGVha19iYXRjaF9zaXplX10gPSAkcGVha19iYXRjaF9zaXplOwogICAgICAgICR0aGlzX2JhdGNoLT5bX2JhdGNoX2NvdW50X10gICAgID0gKyskYmF0Y2hfY291bnQ7CgogICAgICAgICRzZWxmLT5jaGVja19ncmluZF9pbnB1dCgpIGlmIChERVZFTF9NT0RFKTsKCiAgICAgICAgIyBUaGlzIHJvdXRpbmUgaXMgb25seSBjYWxsZWQgZnJvbSBzdWIgZmx1c2hfYmF0Y2hfb2ZfY29kZSwgc28gdGhhdAogICAgICAgICMgcm91dGluZSBpcyBhIGJldHRlciBzcG90IGZvciBkZWJ1Z2dpbmcuCiAgICAgICAgREVCVUdfR1JJTkQgJiYgZG8gewogICAgICAgICAgICBteSAkdG9rZW4gPSBteSAkdHlwZSA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgaWYgKCAkbWF4X2luZGV4X3RvX2dvID49IDAgKSB7CiAgICAgICAgICAgICAgICAkdG9rZW4gPSAkdG9rZW5zX3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dOwogICAgICAgICAgICAgICAgJHR5cGUgID0gJHR5cGVzX3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG15ICRvdXRwdXRfc3RyID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICBpZiAoICRtYXhfaW5kZXhfdG9fZ28gPiAyMCApIHsKICAgICAgICAgICAgICAgIG15ICRtbSA9ICRtYXhfaW5kZXhfdG9fZ28gLSAxMDsKICAgICAgICAgICAgICAgICRvdXRwdXRfc3RyID0KICAgICAgICAgICAgICAgICAgam9pbiggRU1QVFlfU1RSSU5HLCBAdG9rZW5zX3RvX2dvWyAwIC4uIDEwIF0gKSAuICIgLi4uICIKICAgICAgICAgICAgICAgICAgLiBqb2luKCBFTVBUWV9TVFJJTkcsCiAgICAgICAgICAgICAgICAgICAgQHRva2Vuc190b19nb1sgJG1tIC4uICRtYXhfaW5kZXhfdG9fZ28gXSApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJG91dHB1dF9zdHIgPSBqb2luIEVNUFRZX1NUUklORywKICAgICAgICAgICAgICAgICAgQHRva2Vuc190b19nb1sgMCAuLiAkbWF4X2luZGV4X3RvX2dvIF07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcHJpbnQgeypTVERPVVR9IDw8RU9NOwpncmluZCBnb3QgYmF0Y2ggbnVtYmVyICRiYXRjaF9jb3VudCB3aXRoICRtYXhfaW5kZXhfdG9fZ28gdG9rZW5zLCBsYXN0IHR5cGUgJyR0eXBlJyB0b2s9JyR0b2tlbicsIHRleHQ6CiRvdXRwdXRfc3RyCkVPTQogICAgICAgIH07CgogICAgICAgICMgUmVtb3ZlIGFueSB0cmFpbGluZyBibGFuaywgd2hpY2ggaXMgcG9zc2libGUgKGMxOTIgaGFzIGV4YW1wbGUpCiAgICAgICAgaWYgKCAkbWF4X2luZGV4X3RvX2dvID49IDAgJiYgJHR5cGVzX3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dIGVxICdiJyApIHsKICAgICAgICAgICAgJG1heF9pbmRleF90b19nbyAtPSAxOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGlmICggJG1heF9pbmRleF90b19nbyA8IDAgKTsKCiAgICAgICAgbXkgJGxwX29iamVjdF9jb3VudF90aGlzX2JhdGNoOwogICAgICAgIGlmICgkck9wdHNfbGluZV91cF9wYXJlbnRoZXNlcykgewogICAgICAgICAgICAkbHBfb2JqZWN0X2NvdW50X3RoaXNfYmF0Y2ggPSAkc2VsZi0+c2V0X2xwX2luZGVudGF0aW9uKCk7CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIFNob3J0Y3V0IGZvciBibG9jayBjb21tZW50cy4KICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgbXkgJGlzX0hTQzsKCiAgICAgICAgaWYgKCAgISRtYXhfaW5kZXhfdG9fZ28KICAgICAgICAgICAgJiYgJHR5cGVzX3RvX2dvWzBdIGVxICcjJyApCiAgICAgICAgewoKICAgICAgICAgICAgIyBCdXQgbm90IGZvciBibG9jayBjb21tZW50cyB3aXRoIGxwIGJlY2F1c2UgdGhleSBtdXN0IHVzZSB0aGUgbHAKICAgICAgICAgICAgIyBjb3JyZWN0b3Igc3RlcCBiZWxvdy4KICAgICAgICAgICAgIyBBbmQgbm90IGZvciBoYW5naW5nIHNpZGUgY29tbWVudHMuCgogICAgICAgICAgICBteSAkYmF0Y2hfQ09ERV90eXBlID0gJHRoaXNfYmF0Y2gtPltfYmF0Y2hfQ09ERV90eXBlX107CiAgICAgICAgICAgICRpc19IU0MgPSAkYmF0Y2hfQ09ERV90eXBlICYmICRiYXRjaF9DT0RFX3R5cGUgZXEgJ0hTQyc7CgogICAgICAgICAgICBpZiAoICAgISRpc19IU0MKICAgICAgICAgICAgICAgICYmICEkbHBfb2JqZWN0X2NvdW50X3RoaXNfYmF0Y2ggKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBteSAkaWJlZyA9IDA7CiAgICAgICAgICAgICAgICAkdGhpc19iYXRjaC0+W19yaV9maXJzdF9dID0gWyRpYmVnXTsKICAgICAgICAgICAgICAgICR0aGlzX2JhdGNoLT5bX3JpX2xhc3RfXSAgPSBbJGliZWddOwoKICAgICAgICAgICAgICAgICRzZWxmLT5jb252ZXlfYmF0Y2hfdG9fdmVydGljYWxfYWxpZ25lcigpOwoKICAgICAgICAgICAgICAgIG15ICRsZXZlbCA9ICRsZXZlbHNfdG9fZ29bJGliZWddOwogICAgICAgICAgICAgICAgJHNlbGYtPltfbGFzdF9saW5lX2xlYWRpbmdfdHlwZV9dICA9ICR0eXBlc190b19nb1skaWJlZ107CiAgICAgICAgICAgICAgICAkc2VsZi0+W19sYXN0X2xpbmVfbGVhZGluZ19sZXZlbF9dID0gJGxldmVsOwogICAgICAgICAgICAgICAgJG5vbmJsYW5rX2xpbmVzX2F0X2RlcHRoWyRsZXZlbF0gICA9IDE7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tCiAgICAgICAgIyBOb3JtYWwgcm91dGUKICAgICAgICAjLS0tLS0tLS0tLS0tLQoKICAgICAgICBteSAkckxMID0gJHNlbGYtPltfckxMX107CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBMb29wIG92ZXIgdGhlIGJhdGNoIHRvIGluaXRpYWxpemUgc29tZSBiYXRjaCB2YXJpYWJsZXMKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIG15ICRjb21tYV9jb3VudF9pbl9iYXRjaCA9IDA7CiAgICAgICAgbXkgQGNvbG9uX2xpc3Q7CiAgICAgICAgbXkgQGl4X3NlcW5vX2NvbnRyb2xsaW5nX2NpOwogICAgICAgIG15ICVjb21tYV9hcnJvd19jb3VudDsKICAgICAgICBteSAkY29tbWFfYXJyb3dfY291bnRfY29udGFpbmVkID0gMDsKICAgICAgICBteSBAdW5tYXRjaGVkX2Nsb3NpbmdfaW5kZXhlc19pbl90aGlzX2JhdGNoOwogICAgICAgIG15IEB1bm1hdGNoZWRfb3BlbmluZ19pbmRleGVzX2luX3RoaXNfYmF0Y2g7CgogICAgICAgIG15IEBpX2Zvcl9zZW1pY29sb247CiAgICAgICAgZm9yZWFjaCBteSAkaSAoIDAgLi4gJG1heF9pbmRleF90b19nbyApIHsKCiAgICAgICAgICAgIGlmICggJHR5cGVzX3RvX2dvWyRpXSBlcSAnYicgKSB7CiAgICAgICAgICAgICAgICAkaW5leHRfdG9fZ29bJGldID0gJGluZXh0X3RvX2dvWyAkaSAtIDEgXSA9ICRpICsgMTsKICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRpbmV4dF90b19nb1skaV0gPSAkaSArIDE7CgogICAgICAgICAgICAjIFRoaXMgaXMgYW4gb3B0aW9uYWwgc2hvcnRjdXQgdG8gc2F2ZSBhIGJpdCBvZiB0aW1lIGJ5IHNraXBwaW5nCiAgICAgICAgICAgICMgbW9zdCB0b2tlbnMuICBOb3RlOiB0aGUgZmlsdGVyIG1heSBuZWVkIHRvIGJlIHVwZGF0ZWQgaWYgdGhlCiAgICAgICAgICAgICMgbmV4dCAnaWYnIHRlc3RzIGFyZSBldmVyIGNoYW5nZWQgdG8gaW5jbHVkZSBtb3JlIHRva2VuIHR5cGVzLgogICAgICAgICAgICBuZXh0IGlmICggISRxdWlja19maWx0ZXJ7ICR0eXBlc190b19nb1skaV0gfSApOwoKICAgICAgICAgICAgbXkgJHR5cGUgPSAkdHlwZXNfdG9fZ29bJGldOwoKICAgICAgICAgICAgIyBnYXRoZXIgaW5mbyBuZWVkZWQgYnkgc3ViIGJyZWFrX2xvbmdfbGluZXMKICAgICAgICAgICAgaWYgKCAkdHlwZV9zZXF1ZW5jZV90b19nb1skaV0gKSB7CgogICAgICAgICAgICAgICAgIyByZW1lbWJlciBpbmRleGVzIG9mIGFueSB0b2tlbnMgY29udHJvbGxpbmcgeGNpCiAgICAgICAgICAgICAgICAjIGluIHRoaXMgYmF0Y2guIFRoaXMgbGlzdCBpcyBuZWVkZWQgYnkgc3ViIHVuZG9fY2kuCiAgICAgICAgICAgICAgICBteSAkc2Vxbm8gPSAkdHlwZV9zZXF1ZW5jZV90b19nb1skaV07CiAgICAgICAgICAgICAgICBpZiAoICRzZWxmLT5bX3Jpc19zZXFub19jb250cm9sbGluZ19jaV9dLT57JHNlcW5vfSApIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBpeF9zZXFub19jb250cm9sbGluZ19jaSwgJGk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAkaXNfb3BlbmluZ19zZXF1ZW5jZV90b2tlbnsgJHRva2Vuc190b19nb1skaV0gfSApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICRzZWxmLT5bX3JicmVha19jb250YWluZXJfXS0+eyRzZXFub30gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5zZXRfZm9yY2VkX2JyZWFrcG9pbnQoJGkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBwdXNoIEB1bm1hdGNoZWRfb3BlbmluZ19pbmRleGVzX2luX3RoaXNfYmF0Y2gsICRpOwogICAgICAgICAgICAgICAgICAgIGlmICggJHR5cGUgZXEgJz8nICkgewogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBjb2xvbl9saXN0LCAkdHlwZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsgICAgIyMgICRpc19jbG9zaW5nX3NlcXVlbmNlX3Rva2VueyR0b2tlbn0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkaSA+IDAgJiYgJHNlbGYtPltfcmJyZWFrX2NvbnRhaW5lcl9dLT57JHNlcW5vfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPnNldF9mb3JjZWRfYnJlYWtwb2ludCggJGkgLSAxICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBteSAkaV9tYXRlID0gcG9wIEB1bm1hdGNoZWRfb3BlbmluZ19pbmRleGVzX2luX3RoaXNfYmF0Y2g7CiAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRpX21hdGUpICYmICRpX21hdGUgPj0gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkdHlwZV9zZXF1ZW5jZV90b19nb1skaV9tYXRlXSA9PQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGVfc2VxdWVuY2VfdG9fZ29bJGldICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1hdGVfaW5kZXhfdG9fZ29bJGldICAgICAgPSAkaV9tYXRlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1hdGVfaW5kZXhfdG9fZ29bJGlfbWF0ZV0gPSAkaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRjYWMgPSAkY29tbWFfYXJyb3dfY291bnR7JHNlcW5vfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb21tYV9hcnJvd19jb3VudF9jb250YWluZWQgKz0gJGNhYyBpZiAoJGNhYyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEB1bm1hdGNoZWRfb3BlbmluZ19pbmRleGVzX2luX3RoaXNfYmF0Y2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpX21hdGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEB1bm1hdGNoZWRfY2xvc2luZ19pbmRleGVzX2luX3RoaXNfYmF0Y2gsICRpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEB1bm1hdGNoZWRfY2xvc2luZ19pbmRleGVzX2luX3RoaXNfYmF0Y2gsICRpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoICR0eXBlIGVxICc6JyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAY29sb25fbGlzdCwgJHR5cGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSAjIyBlbmQgaWYgKCRzZXFubykKCiAgICAgICAgICAgIGVsc2lmICggJHR5cGUgZXEgJywnICkgeyAkY29tbWFfY291bnRfaW5fYmF0Y2grKzsgfQogICAgICAgICAgICBlbHNpZiAoICR0eXBlIGVxICc9PicgKSB7CiAgICAgICAgICAgICAgICBpZiAoQHVubWF0Y2hlZF9vcGVuaW5nX2luZGV4ZXNfaW5fdGhpc19iYXRjaCkgewogICAgICAgICAgICAgICAgICAgIG15ICRqICAgICA9ICR1bm1hdGNoZWRfb3BlbmluZ19pbmRleGVzX2luX3RoaXNfYmF0Y2hbLTFdOwogICAgICAgICAgICAgICAgICAgIG15ICRzZXFubyA9ICR0eXBlX3NlcXVlbmNlX3RvX2dvWyRqXTsKICAgICAgICAgICAgICAgICAgICAkY29tbWFfYXJyb3dfY291bnR7JHNlcW5vfSsrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJHR5cGUgZXEgJ2YnICkgewogICAgICAgICAgICAgICAgcHVzaCBAaV9mb3Jfc2VtaWNvbG9uLCAkaTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICMjIG5vdCBhIHNwZWNpYWwgdHlwZQogICAgICAgICAgICB9CgogICAgICAgIH0gIyMgZW5kIGZvciAoIG15ICRpID0gMCA7ICRpIDw9Li4uKQoKICAgICAgICAjIEJyZWFrIGF0IGEgc2luZ2xlIGludGVyaW9yIEMtc3R5bGUgZm9yIHNlbWljb2xvbiBpbiB0aGlzIGJhdGNoIChjMTU0KQogICAgICAgIGlmICggQGlfZm9yX3NlbWljb2xvbiAmJiBAaV9mb3Jfc2VtaWNvbG9uID09IDEgKSB7CiAgICAgICAgICAgIG15ICRpICAgICA9ICRpX2Zvcl9zZW1pY29sb25bMF07CiAgICAgICAgICAgIG15ICRpbmV4dCA9ICRpbmV4dF90b19nb1skaV07CiAgICAgICAgICAgIGlmICggJGluZXh0IDw9ICRtYXhfaW5kZXhfdG9fZ28gJiYgJHR5cGVzX3RvX2dvWyRpbmV4dF0gbmUgJyMnICkgewogICAgICAgICAgICAgICAgJHNlbGYtPnNldF9mb3JjZWRfYnJlYWtwb2ludCgkaSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICRpc191bmJhbGFuY2VkX2JhdGNoID0gQHVubWF0Y2hlZF9vcGVuaW5nX2luZGV4ZXNfaW5fdGhpc19iYXRjaCArCiAgICAgICAgICBAdW5tYXRjaGVkX2Nsb3NpbmdfaW5kZXhlc19pbl90aGlzX2JhdGNoOwoKICAgICAgICBpZiAoQHVubWF0Y2hlZF9vcGVuaW5nX2luZGV4ZXNfaW5fdGhpc19iYXRjaCkgewogICAgICAgICAgICAkdGhpc19iYXRjaC0+W19ydW5tYXRjaGVkX29wZW5pbmdfaW5kZXhlc19dID0KICAgICAgICAgICAgICBcQHVubWF0Y2hlZF9vcGVuaW5nX2luZGV4ZXNfaW5fdGhpc19iYXRjaDsKICAgICAgICB9CgogICAgICAgIGlmIChAaXhfc2Vxbm9fY29udHJvbGxpbmdfY2kpIHsKICAgICAgICAgICAgJHRoaXNfYmF0Y2gtPltfcml4X3NlcW5vX2NvbnRyb2xsaW5nX2NpX10gPQogICAgICAgICAgICAgIFxAaXhfc2Vxbm9fY29udHJvbGxpbmdfY2k7CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBTZXQgc3BlY2lhbCBicmVha3BvaW50cwogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIElmIHRoaXMgbGluZSBlbmRzIGluIGEgY29kZSBibG9jayBicmFjZSwgc2V0IGJyZWFrcyBhdCBhbnkKICAgICAgICAjIHByZXZpb3VzIGNsb3NpbmcgY29kZSBibG9jayBicmFjZXMgdG8gYnJlYWt1cCBhIGNoYWluIG9mIGNvZGUKICAgICAgICAjIGJsb2NrcyBvbiBvbmUgbGluZS4gIFRoaXMgaXMgdmVyeSByYXJlIGJ1dCBjYW4gaGFwcGVuIGZvcgogICAgICAgICMgdXNlci1kZWZpbmVkIHN1YnMuICBGb3IgZXhhbXBsZSB3ZSBtaWdodCBiZSBsb29raW5nIGF0IHRoaXM6CiAgICAgICAgIyAgQk9PTCB7ICRzZXJ2ZXJfZGF0YXt1cHRpbWV9ID4gMDsgfSBOVU0geyAkc2VydmVyX2RhdGF7bG9hZH07IH0gU1RSIHsKICAgICAgICBteSAkc2F3X2dvb2RfYnJlYWs7ICAgICMgZmxhZyB0byBmb3JjZSBicmVha3MgZXZlbiBpZiBzaG9ydCBsaW5lCiAgICAgICAgaWYgKAoKICAgICAgICAgICAgIyBsb29raW5nIGZvciBvcGVuaW5nIG9yIGNsb3NpbmcgYmxvY2sgYnJhY2UKICAgICAgICAgICAgJGJsb2NrX3R5cGVfdG9fZ29bJG1heF9pbmRleF90b19nb10KCiAgICAgICAgICAgICMgbmV2ZXIgYW55IGdvb2QgYnJlYWtzIGlmIGp1c3Qgb25lIHRva2VuCiAgICAgICAgICAgICYmICRtYXhfaW5kZXhfdG9fZ28gPiAwCgogICAgICAgICAgICAjIGJ1dCBub3Qgb25lIG9mIHRoZXNlIHdoaWNoIGFyZSBuZXZlciBkdXBsaWNhdGVkIG9uIGEgbGluZToKICAgICAgICAgICAgIyB1bnRpbHx3aGlsZXxmb3J8aWZ8ZWxzaWZ8ZWxzZQogICAgICAgICAgICAmJiAhJGlzX2Jsb2NrX3dpdGhvdXRfc2VtaWNvbG9ueyAkYmxvY2tfdHlwZV90b19nb1skbWF4X2luZGV4X3RvX2dvXQogICAgICAgICAgICB9CiAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBteSAkbGV2ID0gJG5lc3RpbmdfZGVwdGhfdG9fZ29bJG1heF9pbmRleF90b19nb107CgogICAgICAgICAgICAjIFdhbGsgYmFja3dhcmRzIGZyb20gdGhlIGVuZCBhbmQKICAgICAgICAgICAgIyBzZXQgYnJlYWsgYXQgYW55IGNsb3NpbmcgYmxvY2sgYnJhY2VzIGF0IHRoZSBzYW1lIGxldmVsLgogICAgICAgICAgICAjIEJ1dCBxdWl0IGlmIHdlIGFyZSBub3QgaW4gYSBjaGFpbiBvZiBibG9ja3MuCiAgICAgICAgICAgIGZvcmVhY2ggbXkgJGkgKCByZXZlcnNlKCAwIC4uICRtYXhfaW5kZXhfdG9fZ28gLSAxICkgKSB7CiAgICAgICAgICAgICAgICBsYXN0IGlmICggJGxldmVsc190b19nb1skaV0gPCAkbGV2ICk7ICAgIyBzdG9wIGF0IGEgbG93ZXIgbGV2ZWwKICAgICAgICAgICAgICAgIG5leHQgaWYgKCAkbGV2ZWxzX3RvX2dvWyRpXSA+ICRsZXYgKTsgICAjIHNraXAgcGFzdCBoaWdoZXIgbGV2ZWwKCiAgICAgICAgICAgICAgICBpZiAoICRibG9ja190eXBlX3RvX2dvWyRpXSApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICR0b2tlbnNfdG9fZ29bJGldIGVxICd9JyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPnNldF9mb3JjZWRfYnJlYWtwb2ludCgkaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRzYXdfZ29vZF9icmVhayA9IDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgcXVpdCBpZiB3ZSBzZWUgYW55dGhpbmcgYmVzaWRlcyB3b3JkcywgZnVuY3Rpb24sIGJsYW5rcwogICAgICAgICAgICAgICAgIyBhdCB0aGlzIGxldmVsCiAgICAgICAgICAgICAgICBlbHNpZiAoICR0eXBlc190b19nb1skaV0gIX4gL15bXChcKUd3aWJdJC8gKSB7IGxhc3QgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIyMga2VlcCBnb2luZwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIGluc2VydGlvbiBvZiBhbnkgYmxhbmsgbGluZXMgYmVmb3JlIHRoaXMgYmF0Y2gKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgbXkgJGltaW4gPSAwOwogICAgICAgIG15ICRpbWF4ID0gJG1heF9pbmRleF90b19nbzsKCiAgICAgICAgIyB0cmltIGFueSBibGFuayB0b2tlbnMgLSBmb3Igc2FmZXR5LCBidXQgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkKICAgICAgICBpZiAoICR0eXBlc190b19nb1skaW1pbl0gZXEgJ2InICkgeyAkaW1pbisrIH0KICAgICAgICBpZiAoICR0eXBlc190b19nb1skaW1heF0gZXEgJ2InICkgeyAkaW1heC0tIH0KCiAgICAgICAgaWYgKCAkaW1pbiA+ICRpbWF4ICkgewogICAgICAgICAgICBpZiAoREVWRUxfTU9ERSkgewogICAgICAgICAgICAgICAgbXkgJEswICA9ICRLX3RvX2dvWzBdOwogICAgICAgICAgICAgICAgbXkgJGxubyA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCgkSzApICkgeyAkbG5vID0gJHJMTC0+WyRLMF0tPltfTElORV9JTkRFWF9dICsgMSB9CiAgICAgICAgICAgICAgICBGYXVsdCg8PEVPTSk7ClN0cmFuZ2U6IHJlY2VpdmVkIGJhdGNoIGNvbnRhaW5pbmcgb25seSBibGFua3MgbmVhciBpbnB1dCBsaW5lICRsbm86IGFmdGVyIHRyaW1taW5nIGltaW49JGltaW4sIGltYXg9JGltYXgKRU9NCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgbXkgJGxhc3RfbGluZV9sZWFkaW5nX3R5cGUgID0gJHNlbGYtPltfbGFzdF9saW5lX2xlYWRpbmdfdHlwZV9dOwogICAgICAgIG15ICRsYXN0X2xpbmVfbGVhZGluZ19sZXZlbCA9ICRzZWxmLT5bX2xhc3RfbGluZV9sZWFkaW5nX2xldmVsX107CgogICAgICAgIG15ICRsZWFkaW5nX3R5cGUgID0gJHR5cGVzX3RvX2dvWzBdOwogICAgICAgIG15ICRsZWFkaW5nX2xldmVsID0gJGxldmVsc190b19nb1swXTsKCiAgICAgICAgIyBhZGQgYmxhbmsgbGluZShzKSBiZWZvcmUgY2VydGFpbiBrZXkgdHlwZXMgYnV0IG5vdCBhZnRlciBhIGNvbW1lbnQKICAgICAgICBpZiAoICRsYXN0X2xpbmVfbGVhZGluZ190eXBlIG5lICcjJyApIHsKICAgICAgICAgICAgbXkgJGJsYW5rX2NvdW50ICAgPSAwOwogICAgICAgICAgICBteSAkbGVhZGluZ190b2tlbiA9ICR0b2tlbnNfdG9fZ29bMF07CgogICAgICAgICAgICAjIGJyZWFrIGJlZm9yZSBjZXJ0YWluIGtleSBibG9ja3MgZXhjZXB0IG9uZS1saW5lcnMKICAgICAgICAgICAgaWYgKCAkbGVhZGluZ190eXBlIGVxICdrJyApIHsKICAgICAgICAgICAgICAgIGlmICggJGxlYWRpbmdfdG9rZW4gZXEgJ0JFR0lOJyB8fCAkbGVhZGluZ190b2tlbiBlcSAnRU5EJyApIHsKICAgICAgICAgICAgICAgICAgICAkYmxhbmtfY291bnQgPSAkck9wdHMtPnsnYmxhbmstbGluZXMtYmVmb3JlLXN1YnMnfQogICAgICAgICAgICAgICAgICAgICAgaWYgKCB0ZXJtaW5hbF90eXBlX2koIDAsICRtYXhfaW5kZXhfdG9fZ28gKSBuZSAnfScgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIEJyZWFrIGJlZm9yZSBjZXJ0YWluIGJsb2NrIHR5cGVzIGlmIHdlIGhhdmVuJ3QgaGFkIGEKICAgICAgICAgICAgICAgICMgYnJlYWsgYXQgdGhpcyBsZXZlbCBmb3IgYSB3aGlsZS4gIFRoaXMgaXMgdGhlCiAgICAgICAgICAgICAgICAjIGRpZmZpY3VsdCBkZWNpc2lvbi4uCiAgICAgICAgICAgICAgICBlbHNpZiAoJGxhc3RfbGluZV9sZWFkaW5nX3R5cGUgbmUgJ2InCiAgICAgICAgICAgICAgICAgICAgJiYgJGlzX2lmX3VubGVzc193aGlsZV91bnRpbF9mb3JfZm9yZWFjaHskbGVhZGluZ190b2tlbn0gKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG15ICRsYyA9ICRub25ibGFua19saW5lc19hdF9kZXB0aFskbGFzdF9saW5lX2xlYWRpbmdfbGV2ZWxdOwogICAgICAgICAgICAgICAgICAgIGlmICggIWRlZmluZWQoJGxjKSApIHsgJGxjID0gMCB9CgogICAgICAgICAgICAgICAgICAgICMgcGF0Y2ggZm9yIFJUICMxMjgyMTY6IG5vIGJsYW5rIGxpbmUgaW5zZXJ0ZWQgYXQgYSBsZXZlbAogICAgICAgICAgICAgICAgICAgICMgY2hhbmdlCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkbGV2ZWxzX3RvX2dvWzBdICE9ICRsYXN0X2xpbmVfbGVhZGluZ19sZXZlbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGxjID0gMDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICggICAkck9wdHMtPnsnYmxhbmtzLWJlZm9yZS1ibG9ja3MnfQogICAgICAgICAgICAgICAgICAgICAgICAmJiAkbGMgPj0gJHJPcHRzLT57J2xvbmctYmxvY2stbGluZS1jb3VudCd9CiAgICAgICAgICAgICAgICAgICAgICAgICYmICRzZWxmLT5jb25zZWN1dGl2ZV9ub25ibGFua19saW5lcygpID49CiAgICAgICAgICAgICAgICAgICAgICAgICRyT3B0cy0+eydsb25nLWJsb2NrLWxpbmUtY291bnQnfQogICAgICAgICAgICAgICAgICAgICAgICAmJiB0ZXJtaW5hbF90eXBlX2koIDAsICRtYXhfaW5kZXhfdG9fZ28gKSBuZSAnfScgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGJsYW5rX2NvdW50ID0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAjIG5vIGJsYW5rIGxpbmUgbmVlZGVkCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYmxhbmsgbGluZXMgYmVmb3JlIHN1YnMgZXhjZXB0IGRlY2xhcmF0aW9ucyBhbmQgb25lLWxpbmVycwogICAgICAgICAgICAjIEZpeCBmb3IgYzI1MDogYWRkZWQgbmV3IHR5cGUgJ1AnLCBjaGFuZ2VkICdpJyB0byAnUycKICAgICAgICAgICAgZWxzaWYgKCAkbGVhZGluZ190eXBlIGVxICdTJyB8fCAkbGVhZGluZ190eXBlIGVxICdQJyApIHsKICAgICAgICAgICAgICAgIG15ICRzcGVjaWFsX2lkZW50aWZpZXIgPQogICAgICAgICAgICAgICAgICAkc2VsZi0+W19yaXNfc3BlY2lhbF9pZGVudGlmaWVyX3Rva2VuX10tPnskbGVhZGluZ190b2tlbn07CiAgICAgICAgICAgICAgICBpZiAoJHNwZWNpYWxfaWRlbnRpZmllcikgewogICAgICAgICAgICAgICAgICAgICMjICAgJGxlYWRpbmdfdG9rZW4gPX4gLyRTVUJfUEFUVEVSTi8KICAgICAgICAgICAgICAgICAgICBpZiAoICRzcGVjaWFsX2lkZW50aWZpZXIgZXEgJ3N1YicgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAkYmxhbmtfY291bnQgPSAkck9wdHMtPnsnYmxhbmstbGluZXMtYmVmb3JlLXN1YnMnfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGVybWluYWxfdHlwZV9pKCAwLCAkbWF4X2luZGV4X3RvX2dvICkgIX4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9eW1w7XH1cLF0kLyApOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBicmVhayBiZWZvcmUgYWxsIHBhY2thZ2UgZGVjbGFyYXRpb25zCiAgICAgICAgICAgICAgICAgICAgIyMgICAgICBzdWJzdHIoICRsZWFkaW5nX3Rva2VuLCAwLCA4ICkgZXEgJ3BhY2thZ2UgJwogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJHNwZWNpYWxfaWRlbnRpZmllciBlcSAncGFja2FnZScgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIC4uLiBleGNlcHQgaW4gYSB2ZXJ5IHNob3J0IGV2YWwgYmxvY2sKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHBzZXFubyA9ICRwYXJlbnRfc2Vxbm9fdG9fZ29bMF07CiAgICAgICAgICAgICAgICAgICAgICAgICRibGFua19jb3VudCA9ICRyT3B0cy0+eydibGFuay1saW5lcy1iZWZvcmUtcGFja2FnZXMnfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICEkc2VsZi0+W19yaXNfc2hvcnRfYnJva2VuX2V2YWxfYmxvY2tfXS0+eyRwc2Vxbm99CiAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIERFVkVMX01PREUgJiYgRmF1bHQoPDxFT00pOwpGb3VuZCBzcGVjaWFsIGlkZW50aWZpZXIgJyRzcGVjaWFsX2lkZW50aWZpZXInLCBidXQgZXhwZWN0aW5nICdzdWInIG9yICdwYWNrYWdlJwpFT00KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgQ2hlY2sgZm9yIGJsYW5rIGxpbmVzIHdhbnRlZCBiZWZvcmUgYSBjbG9zaW5nIGJyYWNlCiAgICAgICAgICAgIGVsc2lmICggJGxlYWRpbmdfdG9rZW4gZXEgJ30nICkgewogICAgICAgICAgICAgICAgaWYgKCAgICRyT3B0cy0+eydibGFuay1saW5lcy1iZWZvcmUtY2xvc2luZy1ibG9jayd9CiAgICAgICAgICAgICAgICAgICAgJiYgJGJsb2NrX3R5cGVfdG9fZ29bMF0KICAgICAgICAgICAgICAgICAgICAmJiAkYmxvY2tfdHlwZV90b19nb1swXSA9fgogICAgICAgICAgICAgICAgICAgIC8kYmxhbmtfbGluZXNfYmVmb3JlX2Nsb3NpbmdfYmxvY2tfcGF0dGVybi8gKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG15ICRuYmxhbmtzID0gJHJPcHRzLT57J2JsYW5rLWxpbmVzLWJlZm9yZS1jbG9zaW5nLWJsb2NrJ307CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkbmJsYW5rcyA+ICRibGFua19jb3VudCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGJsYW5rX2NvdW50ID0gJG5ibGFua3M7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIyBubyBibGFuayBsaW5lIG5lZWRlZAogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJGJsYW5rX2NvdW50KSB7CgogICAgICAgICAgICAgICAgIyBmdXR1cmU6IHNlbmQgYmxhbmsgbGluZSBkb3duIG5vcm1hbCBwYXRoIHRvIFZlcnRpY2FsQWxpZ25lcj8KICAgICAgICAgICAgICAgICRzZWxmLT5mbHVzaF92ZXJ0aWNhbF9hbGlnbmVyKCk7CiAgICAgICAgICAgICAgICBteSAkZmlsZV93cml0ZXJfb2JqZWN0ID0gJHNlbGYtPltfZmlsZV93cml0ZXJfb2JqZWN0X107CiAgICAgICAgICAgICAgICAkZmlsZV93cml0ZXJfb2JqZWN0LT5yZXF1aXJlX2JsYW5rX2NvZGVfbGluZXMoJGJsYW5rX2NvdW50KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyB1cGRhdGUgYmxhbmsgbGluZSB2YXJpYWJsZXMgYW5kIGNvdW50IG51bWJlciBvZiBjb25zZWN1dGl2ZQogICAgICAgICMgbm9uLWJsYW5rLCBub24tY29tbWVudCBsaW5lcyBhdCB0aGlzIGxldmVsCiAgICAgICAgaWYgKCAgICRsZWFkaW5nX2xldmVsID09ICRsYXN0X2xpbmVfbGVhZGluZ19sZXZlbAogICAgICAgICAgICAmJiAoICRsZWFkaW5nX3R5cGUgbmUgJyMnIHx8ICRpc19IU0MgKQogICAgICAgICAgICAmJiBkZWZpbmVkKCAkbm9uYmxhbmtfbGluZXNfYXRfZGVwdGhbJGxlYWRpbmdfbGV2ZWxdICkgKQogICAgICAgIHsKICAgICAgICAgICAgJG5vbmJsYW5rX2xpbmVzX2F0X2RlcHRoWyRsZWFkaW5nX2xldmVsXSsrOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJG5vbmJsYW5rX2xpbmVzX2F0X2RlcHRoWyRsZWFkaW5nX2xldmVsXSA9IDE7CiAgICAgICAgfQoKICAgICAgICAkc2VsZi0+W19sYXN0X2xpbmVfbGVhZGluZ190eXBlX10gID0gJGlzX0hTQyA/ICdxJyA6ICRsZWFkaW5nX3R5cGU7CiAgICAgICAgJHNlbGYtPltfbGFzdF9saW5lX2xlYWRpbmdfbGV2ZWxfXSA9ICRsZWFkaW5nX2xldmVsOwoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIHNjYW4gbGlzdHMgYW5kIGxvbmcgbGluZXMKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgIyBGbGFnIHRvIHJlbWVtYmVyIGlmIHdlIGNhbGxlZCBzdWIgJ3BhZF9hcnJheV90b19nbycuCiAgICAgICAgIyBTb21lIHJvdXRpbmVzIChicmVha19saXN0cygpLCBicmVha19sb25nX2xpbmVzKCkgKSBuZWVkIHNvbWUKICAgICAgICAjIGV4dHJhIHRva2VucyBhZGRlZCBhdCB0aGUgZW5kIG9mIHRoZSBiYXRjaC4gIE1vc3QgYmF0Y2hlcyBkbyBub3QKICAgICAgICAjIHVzZSB0aGVzZSByb3V0aW5lcywgc28gd2Ugd2lsbCBhdm9pZCBjYWxsaW5nICdwYWRfYXJyYXlfdG9fZ28nCiAgICAgICAgIyB1bmxlc3MgaXQgaXMgbmVlZGVkLgogICAgICAgIG15ICRjYWxsZWRfcGFkX2FycmF5X3RvX2dvOwoKICAgICAgICAjIHNldCBhbGwgZm9yY2VkIGJyZWFrcG9pbnRzIGZvciBnb29kIGxpc3QgZm9ybWF0dGluZwogICAgICAgIG15ICRpc19sb25nX2xpbmU7CiAgICAgICAgbXkgJG11bHRpcGxlX29sZF9saW5lc19pbl9iYXRjaDsKICAgICAgICBpZiAoICRtYXhfaW5kZXhfdG9fZ28gPiAwICkgewogICAgICAgICAgICAkaXNfbG9uZ19saW5lID0KICAgICAgICAgICAgICAkc2VsZi0+ZXhjZXNzX2xpbmVfbGVuZ3RoKCAkaW1pbiwgJG1heF9pbmRleF90b19nbyApID4gMDsKCiAgICAgICAgICAgIG15ICRLYmVnID0gJEtfdG9fZ29bMF07CiAgICAgICAgICAgIG15ICRLZW5kID0gJEtfdG9fZ29bJG1heF9pbmRleF90b19nb107CiAgICAgICAgICAgICRtdWx0aXBsZV9vbGRfbGluZXNfaW5fYmF0Y2ggPQogICAgICAgICAgICAgICRyTEwtPlskS2VuZF0tPltfTElORV9JTkRFWF9dIC0gJHJMTC0+WyRLYmVnXS0+W19MSU5FX0lOREVYX107CiAgICAgICAgfQoKICAgICAgICAjIE9wdGlvbmFsIG9wdGltaXphdGlvbjogYXZvaWQgY2FsbGluZyBicmVha19saXN0cyBmb3IgYSBzaW5nbGUgYmxvY2sKICAgICAgICAjIGJyYWNlLiAgVGhpcyBpcyBkb25lIGJ5IHR1cm5pbmcgb2ZmIHRoZSBmbGFnICRpc191bmJhbGFuY2VkX2JhdGNoLgogICAgICAgIGVsc2lmICgkaXNfdW5iYWxhbmNlZF9iYXRjaCkgewogICAgICAgICAgICBteSAkYmxvY2tfdHlwZSA9ICRibG9ja190eXBlX3RvX2dvWzBdOwogICAgICAgICAgICBpZiAoICAgJGJsb2NrX3R5cGUKICAgICAgICAgICAgICAgICYmICEkbHBfb2JqZWN0X2NvdW50X3RoaXNfYmF0Y2gKICAgICAgICAgICAgICAgICYmICRpc19ibG9ja193aXRob3V0X3NlbWljb2xvbnskYmxvY2tfdHlwZX0gKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAjIG9wZW5pbmcgYmxvY2tzIGNhbiBza2lwIGJyZWFrX2xpc3RzIGNhbGwgaWYgbm8gY29tbWFzIGluCiAgICAgICAgICAgICAgICAjIGNvbnRhaW5lci4KICAgICAgICAgICAgICAgIGlmICggJGxlYWRpbmdfdHlwZSBlcSAneycgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJHNlcW5vICAgICAgID0gJHR5cGVfc2VxdWVuY2VfdG9fZ29bMF07CiAgICAgICAgICAgICAgICAgICAgbXkgJHJ0eXBlX2NvdW50ID0gJHNlbGYtPltfcnR5cGVfY291bnRfYnlfc2Vxbm9fXS0+eyRzZXFub307CiAgICAgICAgICAgICAgICAgICAgaWYgKCRydHlwZV9jb3VudCkgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkY29tbWFfY291bnQgPSAkcnR5cGVfY291bnQtPnsnLCd9OwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEkY29tbWFfY291bnQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXNfdW5iYWxhbmNlZF9iYXRjaCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBjbG9zaW5nIGJsb2NrIGJyYWNlcyBjYW4gYmUgc2tpcHBlZAogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGlzX3VuYmFsYW5jZWRfYmF0Y2ggPSAwOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIyBzaW5nbGUgYmFsYW5jZWQgdG9rZW4KICAgICAgICB9CgogICAgICAgIG15ICRyYm9uZF9zdHJlbmd0aF9iaWFzID0gW107CiAgICAgICAgaWYgKAogICAgICAgICAgICAgICAkaXNfbG9uZ19saW5lCiAgICAgICAgICAgIHx8ICRtdWx0aXBsZV9vbGRfbGluZXNfaW5fYmF0Y2gKCiAgICAgICAgICAgICMgbXVzdCBhbHdheXMgY2FsbCBicmVha19saXN0cygpIHdpdGggdW5iYWxhbmNlZCBiYXRjaGVzIGJlY2F1c2UKICAgICAgICAgICAgIyBpdCBpcyBtYWludGFpbmluZyBzb21lIHN0YWNrcwogICAgICAgICAgICB8fCAkaXNfdW5iYWxhbmNlZF9iYXRjaAoKICAgICAgICAgICAgIyBjYWxsIGJyZWFrX2xpc3RzIGlmIHdlIG1pZ2h0IHdhbnQgdG8gYnJlYWsgYXQgY29tbWFzCiAgICAgICAgICAgIHx8ICgKICAgICAgICAgICAgICAgICRjb21tYV9jb3VudF9pbl9iYXRjaAogICAgICAgICAgICAgICAgJiYgKCAgICRyT3B0c19tYXhpbXVtX2ZpZWxkc19wZXJfdGFibGUgPiAwCiAgICAgICAgICAgICAgICAgICAgJiYgJHJPcHRzX21heGltdW1fZmllbGRzX3Blcl90YWJsZSA8PSAkY29tbWFfY291bnRfaW5fYmF0Y2gKICAgICAgICAgICAgICAgICAgICB8fCAkck9wdHNfY29tbWFfYXJyb3dfYnJlYWtwb2ludHMgPT0gMCApCiAgICAgICAgICAgICkKCiAgICAgICAgICAgICMgY2FsbCBicmVha19saXN0cyBpZiB1c2VyIG1heSB3YW50IHRvIGJyZWFrIG9wZW4gc29tZSBvbmUtbGluZQogICAgICAgICAgICAjIGhhc2ggcmVmZXJlbmNlcwogICAgICAgICAgICB8fCAoICAgJGNvbW1hX2Fycm93X2NvdW50X2NvbnRhaW5lZAogICAgICAgICAgICAgICAgJiYgJHJPcHRzX2NvbW1hX2Fycm93X2JyZWFrcG9pbnRzICE9IDMgKQogICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgIyBhZGQgYSBjb3VwbGUgb2YgZXh0cmEgdGVybWluYWwgYmxhbmsgdG9rZW5zCiAgICAgICAgICAgICRzZWxmLT5wYWRfYXJyYXlfdG9fZ28oKTsKICAgICAgICAgICAgJGNhbGxlZF9wYWRfYXJyYXlfdG9fZ28gPSAxOwoKICAgICAgICAgICAgbXkgJHNnYiA9ICRzZWxmLT5icmVha19saXN0cyggJGlzX2xvbmdfbGluZSwgJHJib25kX3N0cmVuZ3RoX2JpYXMgKTsKICAgICAgICAgICAgJHNhd19nb29kX2JyZWFrIHx8PSAkc2diOwogICAgICAgIH0KCiAgICAgICAgIyBsZXQgJHJpX2ZpcnN0IGFuZCAkcmlfbGFzdCBiZSByZWZlcmVuY2VzIHRvIGxpc3RzIG9mCiAgICAgICAgIyBmaXJzdCBhbmQgbGFzdCB0b2tlbnMgb2YgbGluZSBmcmFnbWVudHMgdG8gb3V0cHV0Li4KICAgICAgICBteSAoICRyaV9maXJzdCwgJHJpX2xhc3QgKTsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBhIHNpbmdsZSB0b2tlbiB1c2VzIG9uZSBsaW5lCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaWYgKCAhJG1heF9pbmRleF90b19nbyApIHsKICAgICAgICAgICAgJHJpX2ZpcnN0ID0gWyRpbWluXTsKICAgICAgICAgICAgJHJpX2xhc3QgID0gWyRpbWF4XTsKICAgICAgICB9CgogICAgICAgICMgZm9yIG11bHRpcGxlIHRva2VucwogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgIyB3cml0ZSBhIHNpbmdsZSBsaW5lIGlmLi4KICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgKAoKICAgICAgICAgICAgICAgICAgICAjIHRoaXMgbGluZSBpcyAnc2hvcnQnCiAgICAgICAgICAgICAgICAgICAgISRpc19sb25nX2xpbmUKCiAgICAgICAgICAgICAgICAgICAgIyBhbmQgd2UgZGlkbid0IHNlZSBhIGdvb2QgYnJlYWtwb2ludAogICAgICAgICAgICAgICAgICAgICYmICEkc2F3X2dvb2RfYnJlYWsKCiAgICAgICAgICAgICAgICAgICAgIyBhbmQgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGFuIGludGVyaW9yIGJyZWFrcG9pbnQKICAgICAgICAgICAgICAgICAgICAmJiAhJGZvcmNlZF9icmVha3BvaW50X2NvdW50CiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAgIyBvciwgd2UgYXJlbid0IGFsbG93ZWQgdG8gYWRkIGFueSBuZXdsaW5lcwogICAgICAgICAgICAgICAgfHwgISRyT3B0c19hZGRfbmV3bGluZXMKCiAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkcmlfZmlyc3QgPSBbJGltaW5dOwogICAgICAgICAgICAgICAgJHJpX2xhc3QgID0gWyRpbWF4XTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgb3RoZXJ3aXNlIHVzZSBtdWx0aXBsZSBsaW5lcwogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyBhZGQgYSBjb3VwbGUgb2YgZXh0cmEgdGVybWluYWwgYmxhbmsgdG9rZW5zIGlmIHdlIGhhdmVuJ3QKICAgICAgICAgICAgICAgICMgYWxyZWFkeSBkb25lIHNvCiAgICAgICAgICAgICAgICAkc2VsZi0+cGFkX2FycmF5X3RvX2dvKCkgdW5sZXNzICgkY2FsbGVkX3BhZF9hcnJheV90b19nbyk7CgogICAgICAgICAgICAgICAgKCAkcmlfZmlyc3QsICRyaV9sYXN0LCBteSAkcmJvbmRfc3RyZW5ndGhfdG9fZ28gKSA9CiAgICAgICAgICAgICAgICAgICRzZWxmLT5icmVha19sb25nX2xpbmVzKCAkc2F3X2dvb2RfYnJlYWssIFxAY29sb25fbGlzdCwKICAgICAgICAgICAgICAgICAgICAkcmJvbmRfc3RyZW5ndGhfYmlhcyApOwoKICAgICAgICAgICAgICAgICRzZWxmLT5icmVha19hbGxfY2hhaW5fdG9rZW5zKCAkcmlfZmlyc3QsICRyaV9sYXN0ICk7CgogICAgICAgICAgICAgICAgJHNlbGYtPmJyZWFrX21ldGhvZF9jYWxsX2NoYWlucyggJHJpX2ZpcnN0LCAkcmlfbGFzdCApCiAgICAgICAgICAgICAgICAgIGlmICggJXsgJHNlbGYtPltfcnNlcW5vX2Fycm93X2NhbGxfY2hhaW5fc3RhcnRfXSB9ICk7CgogICAgICAgICAgICAgICAgJHNlbGYtPmJyZWFrX2VxdWFscyggJHJpX2ZpcnN0LCAkcmlfbGFzdCApCiAgICAgICAgICAgICAgICAgIGlmIEB7JHJpX2ZpcnN0fSA+PSAzOwoKICAgICAgICAgICAgICAgICMgbm93IHdlIGRvIGEgY29ycmVjdGlvbiBzdGVwIHRvIGNsZWFuIHRoaXMgdXAgYSBiaXQKICAgICAgICAgICAgICAgICMgKFRoZSBvbmx5IHRpbWUgd2Ugd291bGQgbm90IGRvIHRoaXMgaXMgZm9yIGRlYnVnZ2luZykKICAgICAgICAgICAgICAgICRzZWxmLT5yZWNvbWJpbmVfYnJlYWtwb2ludHMoICRyaV9maXJzdCwgJHJpX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgJHJib25kX3N0cmVuZ3RoX3RvX2dvICkKICAgICAgICAgICAgICAgICAgaWYgKCAkck9wdHNfcmVjb21iaW5lICYmIEB7JHJpX2ZpcnN0fSA+IDEgKTsKCiAgICAgICAgICAgICAgICAkc2VsZi0+aW5zZXJ0X2ZpbmFsX3Rlcm5hcnlfYnJlYWtzKCAkcmlfZmlyc3QsICRyaV9sYXN0ICkKICAgICAgICAgICAgICAgICAgaWYgKEBjb2xvbl9saXN0KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHNlbGYtPmluc2VydF9icmVha3NfYmVmb3JlX2xpc3Rfb3BlbmluZ19jb250YWluZXJzKCAkcmlfZmlyc3QsCiAgICAgICAgICAgICAgICAkcmlfbGFzdCApCiAgICAgICAgICAgICAgaWYgKCAlYnJlYWtfYmVmb3JlX2NvbnRhaW5lcl90eXBlcyAmJiAkbWF4X2luZGV4X3RvX2dvID4gMCApOwoKICAgICAgICAgICAgIyBDaGVjayBmb3IgYSBwaGFudG9tIHNlbWljb2xvbiBhdCB0aGUgZW5kIG9mIHRoZSBiYXRjaAogICAgICAgICAgICBpZiAoICEkdG9rZW5fbGVuZ3Roc190b19nb1skaW1heF0gJiYgJHR5cGVzX3RvX2dvWyRpbWF4XSBlcSAnOycgKSB7CiAgICAgICAgICAgICAgICAkc2VsZi0+dW5tYXNrX3BoYW50b21fdG9rZW4oJGltYXgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICRyT3B0c19vbmVfbGluZV9ibG9ja19zZW1pY29sb25zID09IDAgKSB7CiAgICAgICAgICAgICAgICAkc2VsZi0+ZGVsZXRlX29uZV9saW5lX3NlbWljb2xvbnMoICRyaV9maXJzdCwgJHJpX2xhc3QgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBSZW1lbWJlciB0aGUgbGFyZ2VzdCBiYXRjaCBzaXplIHByb2Nlc3NlZC4gVGhpcyBpcyBuZWVkZWQgYnkgdGhlCiAgICAgICAgICAgICMgbG9naWNhbCBwYWRkaW5nIHJvdXRpbmUgdG8gYXZvaWQgcGFkZGluZyB0aGUgZmlyc3Qgbm9uYmxhbmsgdG9rZW4KICAgICAgICAgICAgaWYgKCAkbWF4X2luZGV4X3RvX2dvID4gJHBlYWtfYmF0Y2hfc2l6ZSApIHsKICAgICAgICAgICAgICAgICRwZWFrX2JhdGNoX3NpemUgPSAkbWF4X2luZGV4X3RvX2dvOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIFRoZSBiYXRjaCBoYXMgbm93IGJlZW4gZGl2aWRlZCBpbnRvIGxpbmVzCiAgICAgICAgJHRoaXNfYmF0Y2gtPltfcmlfZmlyc3RfXSA9ICRyaV9maXJzdDsKICAgICAgICAkdGhpc19iYXRjaC0+W19yaV9sYXN0X10gID0gJHJpX2xhc3Q7CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyAtbHAgY29ycmVjdG9yIHN0ZXAKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGlmICgkbHBfb2JqZWN0X2NvdW50X3RoaXNfYmF0Y2gpIHsKICAgICAgICAgICAgJHNlbGYtPmNvcnJlY3RfbHBfaW5kZW50YXRpb24oKTsKICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgc2hpcCB0aGlzIGJhdGNoIG91dAogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICRzZWxmLT5jb252ZXlfYmF0Y2hfdG9fdmVydGljYWxfYWxpZ25lcigpOwoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgV3JpdGUgcmVxdWVzdGVkIG51bWJlciBvZiBibGFuayBsaW5lcyBhZnRlciBhbiBvcGVuaW5nIGJsb2NrIGJyYWNlCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpZiAoJHJPcHRzX2JsYW5rX2xpbmVzX2FmdGVyX29wZW5pbmdfYmxvY2spIHsKICAgICAgICAgICAgbXkgJGl0ZXJtID0gJGltYXg7CiAgICAgICAgICAgIGlmICggJHR5cGVzX3RvX2dvWyRpdGVybV0gZXEgJyMnICYmICRpdGVybSA+ICRpbWluICkgewogICAgICAgICAgICAgICAgJGl0ZXJtIC09IDE7CiAgICAgICAgICAgICAgICBpZiAoICR0eXBlc190b19nb1skaXRlcm1dIGVxICdiJyAmJiAkaXRlcm0gPiAkaW1pbiApIHsKICAgICAgICAgICAgICAgICAgICAkaXRlcm0gLT0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAgICR0eXBlc190b19nb1skaXRlcm1dIGVxICd7JwogICAgICAgICAgICAgICAgJiYgJGJsb2NrX3R5cGVfdG9fZ29bJGl0ZXJtXQogICAgICAgICAgICAgICAgJiYgJGJsb2NrX3R5cGVfdG9fZ29bJGl0ZXJtXSA9fgogICAgICAgICAgICAgICAgLyRibGFua19saW5lc19hZnRlcl9vcGVuaW5nX2Jsb2NrX3BhdHRlcm4vICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbXkgJG5ibGFua3MgPSAkck9wdHNfYmxhbmtfbGluZXNfYWZ0ZXJfb3BlbmluZ19ibG9jazsKICAgICAgICAgICAgICAgICRzZWxmLT5mbHVzaF92ZXJ0aWNhbF9hbGlnbmVyKCk7CiAgICAgICAgICAgICAgICBteSAkZmlsZV93cml0ZXJfb2JqZWN0ID0gJHNlbGYtPltfZmlsZV93cml0ZXJfb2JqZWN0X107CiAgICAgICAgICAgICAgICAkZmlsZV93cml0ZXJfb2JqZWN0LT5yZXF1aXJlX2JsYW5rX2NvZGVfbGluZXMoJG5ibGFua3MpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgZ3JpbmRfYmF0Y2hfb2ZfQ09ERQoKICAgIHN1YiBpcHJldl90b19nbyB7CiAgICAgICAgbXkgKCRpKSA9IEBfOwoKICAgICAgICAjIEdpdmVuIGluZGV4ICRpIG9mIGEgdG9rZW4gaW4gdGhlICdfdG9fZ28nIGFycmF5cywgcmV0dXJuCiAgICAgICAgIyB0aGUgaW5kZXggb2YgdGhlIHByZXZpb3VzIG5vbmJsYW5rIHRva2VuLgogICAgICAgIHJldHVybiAkaSAtIDEgPiAwCiAgICAgICAgICAmJiAkdHlwZXNfdG9fZ29bICRpIC0gMSBdIGVxICdiJyA/ICRpIC0gMiA6ICRpIC0gMTsKICAgIH0gIyMgZW5kIHN1YiBpcHJldl90b19nbwoKICAgIHN1YiB1bm1hc2tfcGhhbnRvbV90b2tlbiB7CiAgICAgICAgbXkgKCAkc2VsZiwgJGllbmQgKSA9IEBfOwoKICAgICAgICAjIFR1cm4gYSBwaGFudG9tIHRva2VuIGludG8gYSByZWFsIHRva2VuLgoKICAgICAgICAjIElucHV0IHBhcmFtZXRlcjoKICAgICAgICAjICAgJGllbmQgPSB0aGUgaW5kZXggaW4gdGhlIG91dHB1dCBiYXRjaCBhcnJheSBvZiB0aGlzIHRva2VuLgoKICAgICAgICAjIFBoYW50b20gdG9rZW5zIGFyZSBzcGVjaWFsbHkgbWFya2VkIHRva2VuIHR5cGVzIChzdWNoIGFzICc7JykgIHdpdGgKICAgICAgICAjIG5vIHRva2VuIHRleHQgd2hpY2ggb25seSBiZWNvbWUgcmVhbCB0b2tlbnMgaWYgdGhleSBvY2N1ciBhdCB0aGUgZW5kCiAgICAgICAgIyBvZiBhbiBvdXRwdXQgbGluZS4gIEF0IG9uZSB0aW1lIHBoYW50b20gJywnIHRva2VucyB3ZXJlIGhhbmRsZWQKICAgICAgICAjIGhlcmUsIGJ1dCBub3cgdGhleSBhcmUgcHJvY2Vzc2VkIGVsc2V3aGVyZS4KCiAgICAgICAgbXkgJHJMTCAgICAgICAgID0gJHNlbGYtPltfckxMX107CiAgICAgICAgbXkgJEtLICAgICAgICAgID0gJEtfdG9fZ29bJGllbmRdOwogICAgICAgIG15ICRsaW5lX251bWJlciA9IDEgKyAkckxMLT5bJEtLXS0+W19MSU5FX0lOREVYX107CgogICAgICAgIG15ICR0eXBlID0gJHR5cGVzX3RvX2dvWyRpZW5kXTsKICAgICAgICByZXR1cm4gdW5sZXNzICggJHR5cGUgZXEgJzsnICk7CiAgICAgICAgbXkgJHRvayAgICAgPSAkdHlwZTsKICAgICAgICBteSAkdG9rX2xlbiA9IGxlbmd0aCgkdG9rKTsKICAgICAgICBpZiAoICR3YW50X2xlZnRfc3BhY2V7JHR5cGV9ICE9IFdTX05PICkgewogICAgICAgICAgICAkdG9rID0gU1BBQ0UgLiAkdG9rOwogICAgICAgICAgICAkdG9rX2xlbiArPSAxOwogICAgICAgIH0KCiAgICAgICAgJHRva2Vuc190b19nb1skaWVuZF0gICAgICAgID0gJHRvazsKICAgICAgICAkdG9rZW5fbGVuZ3Roc190b19nb1skaWVuZF0gPSAkdG9rX2xlbjsKCiAgICAgICAgJHJMTC0+WyRLS10tPltfVE9LRU5fXSAgICAgICAgPSAkdG9rOwogICAgICAgICRyTEwtPlskS0tdLT5bX1RPS0VOX0xFTkdUSF9dID0gJHRva19sZW47CgogICAgICAgICRzZWxmLT5ub3RlX2FkZGVkX3NlbWljb2xvbigkbGluZV9udW1iZXIpOwoKICAgICAgICAjIFRoaXMgY2hhbmdlcyB0aGUgc3VtbWVkIGxlbmd0aHMgb2YgdGhlIHJlc3Qgb2YgdGhpcyBiYXRjaAogICAgICAgIGZvcmVhY2ggKCAkaWVuZCAuLiAkbWF4X2luZGV4X3RvX2dvICkgewogICAgICAgICAgICAkc3VtbWVkX2xlbmd0aHNfdG9fZ29bICRfICsgMSBdICs9ICR0b2tfbGVuOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgdW5tYXNrX3BoYW50b21fdG9rZW4KCiAgICBzdWIgc2F2ZV9vcGVuaW5nX2luZGVudGF0aW9uIHsKCiAgICAgICAgbXkgKCAkc2VsZiwgJHJpbmRlbnRhdGlvbl9saXN0ICkgPSBAXzsKCiAgICAgICAgIyBTYXZlIGluZGVudGF0aW9ucyBvZiBsaW5lcyBvZiBhbGwgdW5tYXRjaGVkIG9wZW5pbmcgdG9rZW5zLgogICAgICAgICMgVGhlc2Ugd2lsbCBiZSB1c2VkIGJ5IHN1YiBnZXRfb3BlbmluZ19pbmRlbnRhdGlvbi4KICAgICAgICAjIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBlYWNoIGJhdGNoIG9mIHRva2VucyBpcyBvdXRwdXQuCgogICAgICAgICMgR2l2ZW46CiAgICAgICAgIyAgICRyaW5kZW50YXRpb25fbGlzdCA9IHJlZiB0byBpbmRlbnRhdGlvbnMgZm9yIGVhY2ggbGluZQoKICAgICAgICAjICRydW5tYXRjaGVkX29wZW5pbmdfaW5kZXhlcyA9IGxpc3Qgb2YgaW5kZXhlcyBvZiB1bm1hdGNoZWQgdG9rZW5zCiAgICAgICAgbXkgJHRoaXNfYmF0Y2ggPSAkc2VsZi0+W190aGlzX2JhdGNoX107CiAgICAgICAgbXkgJHJ1bm1hdGNoZWRfb3BlbmluZ19pbmRleGVzID0KICAgICAgICAgICR0aGlzX2JhdGNoLT5bX3J1bm1hdGNoZWRfb3BlbmluZ19pbmRleGVzX107CgogICAgICAgICRydW5tYXRjaGVkX29wZW5pbmdfaW5kZXhlcyA9IFtdCiAgICAgICAgICBpZiAoICFkZWZpbmVkKCRydW5tYXRjaGVkX29wZW5pbmdfaW5kZXhlcykgKTsKCiAgICAgICAgIyBRVyBJTkRFTlRBVElPTiBQQVRDSCAxOgogICAgICAgICMgQWxzbyBzYXZlIGluZGVudGF0aW9uIGZvciBtdWx0aWxpbmUgcXcgcXVvdGVzCiAgICAgICAgbXkgQGlfcXc7CiAgICAgICAgbXkgJHNlcW5vX3F3X29wZW5pbmc7CiAgICAgICAgaWYgKCAkdHlwZXNfdG9fZ29bJG1heF9pbmRleF90b19nb10gZXEgJ3EnICkgewogICAgICAgICAgICBteSAkS0sgPSAkS190b19nb1skbWF4X2luZGV4X3RvX2dvXTsKICAgICAgICAgICAgJHNlcW5vX3F3X29wZW5pbmcgPQogICAgICAgICAgICAgICRzZWxmLT5bX3JzdGFydGluZ19tdWx0aWxpbmVfcXdfc2Vxbm9fYnlfS19dLT57JEtLfTsKICAgICAgICAgICAgaWYgKCRzZXFub19xd19vcGVuaW5nKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBpX3F3LCAkbWF4X2luZGV4X3RvX2dvOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHdlIG5lZWQgdG8gc2F2ZSBpbmRlbnRhdGlvbnMgb2YgYW55IHVubWF0Y2hlZCBvcGVuaW5nIHRva2VucwogICAgICAgICMgaW4gdGhpcyBiYXRjaCBiZWNhdXNlIHdlIG1heSBuZWVkIHRoZW0gaW4gYSBzdWJzZXF1ZW50IGJhdGNoLgogICAgICAgIGZvcmVhY2ggbXkgJGlfb3BlbmluZyAoIEB7JHJ1bm1hdGNoZWRfb3BlbmluZ19pbmRleGVzfSwgQGlfcXcgKSB7CgogICAgICAgICAgICBteSAkc2Vxbm8gPSAkdHlwZV9zZXF1ZW5jZV90b19nb1skaV9vcGVuaW5nXTsKCiAgICAgICAgICAgIGlmICggISRzZXFubyApIHsKICAgICAgICAgICAgICAgIGlmICggJHNlcW5vX3F3X29wZW5pbmcgJiYgJGlfb3BlbmluZyA9PSAkbWF4X2luZGV4X3RvX2dvICkgewogICAgICAgICAgICAgICAgICAgICRzZXFubyA9ICRzZXFub19xd19vcGVuaW5nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICMgc2hvdWxkbid0IGhhcHBlbgogICAgICAgICAgICAgICAgICAgICRzZXFubyA9ICdVTktOT1dOJzsKICAgICAgICAgICAgICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KCJ1bmFibGUgdG8gZmluZCBzZXF1ZW5jZSBudW1iZXJcbiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAkc2F2ZWRfb3BlbmluZ19pbmRlbnRhdGlvbnskc2Vxbm99ID0gWwogICAgICAgICAgICAgICAgJHNlbGYtPmxvb2t1cF9vcGVuaW5nX2luZGVudGF0aW9uKAogICAgICAgICAgICAgICAgICAgICRpX29wZW5pbmcsICRyaW5kZW50YXRpb25fbGlzdAogICAgICAgICAgICAgICAgKQogICAgICAgICAgICBdOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgc2F2ZV9vcGVuaW5nX2luZGVudGF0aW9uCgogICAgc3ViIGdldF9zYXZlZF9vcGVuaW5nX2luZGVudGF0aW9uIHsKCiAgICAgICAgbXkgKCRzZXFubykgPSBAXzsKCiAgICAgICAgIyBMb29rdXAgaW5kZW50YXRpb24gb2YgYW4gb3V0cHV0IGxpbmUgd2l0aCBhIGdpdmVuIGNvbnRhaW5lciB0b2tlbgoKICAgICAgICAjIEdpdmVuOgogICAgICAgICMgICAkc2Vxbm8gPSBzZXF1ZW5jZSBudW1iZXIgb2YgYSBjb250YWluZXIgdG9rZW4KCiAgICAgICAgbXkgKCAkaW5kZW50LCAkb2Zmc2V0LCAkaXNfbGVhZGluZywgJGV4aXN0cyApID0gKCAwLCAwLCAwLCAwICk7CgogICAgICAgIGlmICgkc2Vxbm8pIHsKICAgICAgICAgICAgaWYgKCAkc2F2ZWRfb3BlbmluZ19pbmRlbnRhdGlvbnskc2Vxbm99ICkgewogICAgICAgICAgICAgICAgKCAkaW5kZW50LCAkb2Zmc2V0LCAkaXNfbGVhZGluZyApID0KICAgICAgICAgICAgICAgICAgQHsgJHNhdmVkX29wZW5pbmdfaW5kZW50YXRpb257JHNlcW5vfSB9OwogICAgICAgICAgICAgICAgJGV4aXN0cyA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc29tZSBraW5kIG9mIHNlcmlvdXMgZXJyb3IgaXQgZG9lc24ndCBleGlzdAogICAgICAgICMgKGV4YW1wbGUgaXMgYmFkZmlsZS50KQoKICAgICAgICByZXR1cm4gKCAkaW5kZW50LCAkb2Zmc2V0LCAkaXNfbGVhZGluZywgJGV4aXN0cyApOwogICAgfSAjIyBlbmQgc3ViIGdldF9zYXZlZF9vcGVuaW5nX2luZGVudGF0aW9uCn0gIyMgZW5kIGNsb3N1cmUgZ3JpbmRfYmF0Y2hfb2ZfQ09ERQoKc3ViIGxvb2t1cF9vcGVuaW5nX2luZGVudGF0aW9uIHsKCiAgICBteSAoICRzZWxmLCAkaV9vcGVuaW5nLCAkcmluZGVudGF0aW9uX2xpc3QgKSA9IEBfOwoKICAgICMgR2V0IHRoZSBpbmRlbnRhdGlvbiBvZiB0aGUgbGluZSBpbiB0aGUgY3VycmVudCBvdXRwdXQgYmF0Y2gKICAgICMgd2hpY2ggb3V0cHV0IGEgc2VsZWN0ZWQgb3BlbmluZyB0b2tlbgogICAgIwogICAgIyBHaXZlbjoKICAgICMgICAkaV9vcGVuaW5nIC0gaW5kZXggb2YgYW4gb3BlbmluZyB0b2tlbiBpbiB0aGUgY3VycmVudCBvdXRwdXQgYmF0Y2gKICAgICMgICAgICAgICAgICAgICAgd2hvc2UgbGluZSBpbmRlbnRhdGlvbiB3ZSBuZWVkCiAgICAjICAgJHJpbmRlbnRhdGlvbl9saXN0IC0gcmVmZXJlbmNlIHRvIGEgbGlzdCBjb250YWluaW5nIHRoZSBpbmRlbnRhdGlvbgogICAgIyAgICAgICAgICAgIHVzZWQgZm9yIGVhY2ggbGluZS4gIChOT1RFOiB0aGUgZmlyc3Qgc2xvdCBpbgogICAgIyAgICAgICAgICAgIHRoaXMgbGlzdCBpcyB0aGUgbGFzdCByZXR1cm5lZCBsaW5lIG51bWJlciwgYW5kIHRoaXMgaXMKICAgICMgICAgICAgICAgICBmb2xsb3dlZCBieSB0aGUgbGlzdCBvZiBpbmRlbnRhdGlvbnMpLgogICAgIwogICAgIyBSZXR1cm4KICAgICMgICAtdGhlIGluZGVudGF0aW9uIG9mIHRoZSBsaW5lIHdoaWNoIGNvbnRhaW5lZCB0b2tlbiAkaV9vcGVuaW5nCiAgICAjICAgLWFuZCBpdHMgb2Zmc2V0IChudW1iZXIgb2YgY29sdW1ucykgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGxpbmUKCiAgICAjICRyaV9maXJzdCAtIHJlZmVyZW5jZSB0byBsaXN0IG9mIHRoZSBmaXJzdCBpbmRleCAkaSBmb3IgZWFjaCBvdXRwdXQKICAgICMgIGxpbmUgaW4gdGhpcyBiYXRjaAogICAgIyAkcmlfbGFzdCAtIHJlZmVyZW5jZSB0byBsaXN0IG9mIHRoZSBsYXN0IGluZGV4ICRpIGZvciBlYWNoIG91dHB1dAogICAgIyAgbGluZSBpbiB0aGlzIGJhdGNoCiAgICBteSAkdGhpc19iYXRjaCA9ICRzZWxmLT5bX3RoaXNfYmF0Y2hfXTsKICAgIG15ICRyaV9maXJzdCAgID0gJHRoaXNfYmF0Y2gtPltfcmlfZmlyc3RfXTsKICAgIG15ICRyaV9sYXN0ICAgID0gJHRoaXNfYmF0Y2gtPltfcmlfbGFzdF9dOwoKICAgIGlmICggIUB7JHJpX2xhc3R9ICkgewoKICAgICAgICAjIEFuIGVycm9yIGhlcmUgaW1wbGllcyBhIGJ1ZyBpbnRyb2R1Y2VkIGJ5IGEgcmVjZW50IHByb2dyYW0gY2hhbmdlLgogICAgICAgICMgRXZlcnkgYmF0Y2ggb2YgY29kZSBoYXMgbGluZXMsIHNvIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4KICAgICAgICBpZiAoREVWRUxfTU9ERSkgewogICAgICAgICAgICBGYXVsdCgiRXJyb3IgaW4gb3BlbmluZ19pbmRlbnRhdGlvbjogbm8gbGluZXMiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICggMCwgMCwgMCApOwogICAgfQoKICAgIG15ICRubGluZSA9ICRyaW5kZW50YXRpb25fbGlzdC0+WzBdOyAgICAjIGxpbmUgbnVtYmVyIG9mIHByZXZpb3VzIGxvb2t1cAoKICAgICMgcmVzZXQgbGluZSBsb2NhdGlvbiBpZiBuZWNlc3NhcnkKICAgICRubGluZSA9IDAgaWYgKCAkaV9vcGVuaW5nIDwgJHJpX2ZpcnN0LT5bJG5saW5lXSApOwoKICAgICMgZmluZCB0aGUgY29ycmVjdCBsaW5lCiAgICBpZiAoICRpX29wZW5pbmcgPD0gJHJpX2xhc3QtPlstMV0gKSB7CiAgICAgICAgd2hpbGUgKCAkaV9vcGVuaW5nID4gJHJpX2xhc3QtPlskbmxpbmVdICkgeyAkbmxpbmUrKzsgfQogICAgfQoKICAgICMgRXJyb3IgLSB0b2tlbiBpbmRleCBpcyBvdXQgb2YgYm91bmRzIC0gc2hvdWxkbid0IGhhcHBlbgogICAgIyBBIHByb2dyYW0gYnVnIGhhcyBiZWVuIGludHJvZHVjZWQgaW4gb25lIG9mIHRoZSBjYWxsaW5nIHJvdXRpbmVzLgogICAgIyBXZSBiZXR0ZXIgc3RvcCBoZXJlLgogICAgZWxzZSB7CiAgICAgICAgbXkgJGlfbGFzdF9saW5lID0gJHJpX2xhc3QtPlstMV07CiAgICAgICAgaWYgKERFVkVMX01PREUpIHsKICAgICAgICAgICAgRmF1bHQoPDxFT00pOwpQcm9ncmFtIGJ1ZyBpbiBjYWxsIHRvIGxvb2t1cF9vcGVuaW5nX2luZGVudGF0aW9uIC0gaW5kZXggb3V0IG9mIHJhbmdlCiBjYWxsZWQgd2l0aCBpbmRleCBpX29wZW5pbmc9JGlfb3BlbmluZyAgPiAkaV9sYXN0X2xpbmUgPSBtYXggaW5kZXggb2YgbGFzdCBsaW5lClRoaXMgYmF0Y2ggaGFzIG1heCBpbmRleCA9ICRtYXhfaW5kZXhfdG9fZ28sCkVPTQogICAgICAgIH0KICAgICAgICAkbmxpbmUgPSAkI3skcmlfbGFzdH07CiAgICB9CgogICAgJHJpbmRlbnRhdGlvbl9saXN0LT5bMF0gPQogICAgICAkbmxpbmU7ICAgICMgc2F2ZSBsaW5lIG51bWJlciB0byBzdGFydCBsb29raW5nIG5leHQgY2FsbAogICAgbXkgJGliZWcgICAgICAgPSAkcmlfZmlyc3QtPlskbmxpbmVdOwogICAgbXkgJG9mZnNldCAgICAgPSB0b2tlbl9zZXF1ZW5jZV9sZW5ndGgoICRpYmVnLCAkaV9vcGVuaW5nICkgLSAxOwogICAgbXkgJGlzX2xlYWRpbmcgPSAoICRpYmVnID09ICRpX29wZW5pbmcgKTsKICAgIHJldHVybiAoICRyaW5kZW50YXRpb25fbGlzdC0+WyAkbmxpbmUgKyAxIF0sICRvZmZzZXQsICRpc19sZWFkaW5nICk7Cn0gIyMgZW5kIHN1YiBsb29rdXBfb3BlbmluZ19pbmRlbnRhdGlvbgoKc3ViIHRlcm1pbmFsX3R5cGVfaSB7CgogICAgbXkgKCAkaWJlZywgJGllbmQgKSA9IEBfOwoKICAgICMgR2l2ZW46CiAgICAjICAoJGliZWcsICRpZW5kKSA9IGluZGV4IHJhbmdlIG9mIHRoZSBjdXJyZW50IG91dHB1dCBidWZmZXIgbGluZQogICAgIyBSZXR1cm5zIHR5cGUgb2YgbGFzdCB0b2tlbiBvbiB0aGlzIGxpbmUgKHRlcm1pbmFsIHRva2VuKSwgYXMgZm9sbG93czoKICAgICMgICAjIGZvciBhIGZ1bGwtbGluZSBjb21tZW50CiAgICAjICAgJyAnIGZvciBhIGJsYW5rIGxpbmUKICAgICMgICBvdGhlcndpc2UgcmV0dXJucyBmaW5hbCB0b2tlbiB0eXBlCgogICAgIyBTdGFydCBhdCB0aGUgZW5kIGFuZCB3b3JrIGJhY2t3YXJkcwogICAgbXkgJGkgICAgICA9ICRpZW5kOwogICAgbXkgJHR5cGVfaSA9ICR0eXBlc190b19nb1skaV07CgogICAgIyBDaGVjayBmb3Igc2lkZSBjb21tZW50CiAgICBpZiAoICR0eXBlX2kgZXEgJyMnICkgewogICAgICAgICRpLS07CiAgICAgICAgaWYgKCAkaSA8ICRpYmVnICkgewogICAgICAgICAgICByZXR1cm4gJHR5cGVfaTsKICAgICAgICB9CiAgICAgICAgJHR5cGVfaSA9ICR0eXBlc190b19nb1skaV07CiAgICB9CgogICAgIyBTa2lwIHBhc3QgYSBibGFuawogICAgaWYgKCAkdHlwZV9pIGVxICdiJyApIHsKICAgICAgICAkaS0tOwogICAgICAgIGlmICggJGkgPCAkaWJlZyApIHsKICAgICAgICAgICAgcmV0dXJuICR0eXBlX2k7CiAgICAgICAgfQogICAgICAgICR0eXBlX2kgPSAkdHlwZXNfdG9fZ29bJGldOwogICAgfQoKICAgICMgRm91bmQgaXQuLm1ha2Ugc3VyZSBpdCBpcyBhIEJMT0NLIHRlcm1pbmF0aW9uLAogICAgIyBidXQgaGlkZSBhIHRlcm1pbmFsIH0gYWZ0ZXIgc29ydC9tYXAvZ3JlcC9ldmFsL2RvIGJlY2F1c2UgaXQgaXMgbm90CiAgICAjIG5lY2Vzc2FyaWx5IHRoZSBlbmQgb2YgdGhlIGxpbmUuICAodGVybWluYWwudCkKICAgIG15ICRibG9ja190eXBlID0gJGJsb2NrX3R5cGVfdG9fZ29bJGldOwogICAgaWYgKAogICAgICAgICR0eXBlX2kgZXEgJ30nCiAgICAgICAgJiYgKCAgISRibG9ja190eXBlCiAgICAgICAgICAgIHx8ICRpc19zb3J0X21hcF9ncmVwX2V2YWxfZG97JGJsb2NrX3R5cGV9ICkKICAgICAgKQogICAgewogICAgICAgICR0eXBlX2kgPSAnYic7CiAgICB9CiAgICByZXR1cm4gJHR5cGVfaTsKfSAjIyBlbmQgc3ViIHRlcm1pbmFsX3R5cGVfaQoKc3ViIHBhZF9hcnJheV90b19nbyB7CgogICAgbXkgKCRzZWxmKSA9IEBfOwoKICAgICMgVG8gc2ltcGxpZnkgY29kaW5nIGluIGJyZWFrX2xpc3RzIGFuZCBzZXRfYm9uZF9zdHJlbmd0aHMsIGl0IGhlbHBzIHRvCiAgICAjIGNyZWF0ZSBzb21lIGV4dHJhIGJsYW5rIHRva2VucyBhdCB0aGUgZW5kIG9mIHRoZSBhcnJheXMuICBXZSBhbHNvIGFkZAogICAgIyBzb21lIHVuZGVmJ3MgdG8gaGVscCBndWFyZCBhZ2FpbnN0IHVzaW5nIGludmFsaWQgZGF0YS4KICAgICRLX3RvX2dvWyAkbWF4X2luZGV4X3RvX2dvICsgMSBdICAgICAgICAgICAgID0gdW5kZWY7CiAgICAkdG9rZW5zX3RvX2dvWyAkbWF4X2luZGV4X3RvX2dvICsgMSBdICAgICAgICA9IEVNUFRZX1NUUklORzsKICAgICR0b2tlbnNfdG9fZ29bICRtYXhfaW5kZXhfdG9fZ28gKyAyIF0gICAgICAgID0gRU1QVFlfU1RSSU5HOwogICAgJHRva2Vuc190b19nb1sgJG1heF9pbmRleF90b19nbyArIDMgXSAgICAgICAgPSB1bmRlZjsKICAgICR0eXBlc190b19nb1sgJG1heF9pbmRleF90b19nbyArIDEgXSAgICAgICAgID0gJ2InOwogICAgJHR5cGVzX3RvX2dvWyAkbWF4X2luZGV4X3RvX2dvICsgMiBdICAgICAgICAgPSAnYic7CiAgICAkdHlwZXNfdG9fZ29bICRtYXhfaW5kZXhfdG9fZ28gKyAzIF0gICAgICAgICA9IHVuZGVmOwogICAgJG5lc3RpbmdfZGVwdGhfdG9fZ29bICRtYXhfaW5kZXhfdG9fZ28gKyAyIF0gPSB1bmRlZjsKICAgICRuZXN0aW5nX2RlcHRoX3RvX2dvWyAkbWF4X2luZGV4X3RvX2dvICsgMSBdID0KICAgICAgJG5lc3RpbmdfZGVwdGhfdG9fZ29bJG1heF9pbmRleF90b19nb107CgogICAgIyAgICAvXltSXH1cKVxdXSQvCiAgICBpZiAoICRpc19jbG9zaW5nX3R5cGV7ICR0eXBlc190b19nb1skbWF4X2luZGV4X3RvX2dvXSB9ICkgewogICAgICAgIGlmICggJG5lc3RpbmdfZGVwdGhfdG9fZ29bJG1heF9pbmRleF90b19nb10gPD0gMCApIHsKCiAgICAgICAgICAgICMgTmVzdGluZyBkZXB0aHMgYXJlIHNldCB0byBiZSA+PTAgaW4gc3ViIHdyaXRlX2xpbmUsIHNvIGl0IHNob3VsZAogICAgICAgICAgICAjIG5vdCBiZSBwb3NzaWJsZSB0byBnZXQgaGVyZSB1bmxlc3MgdGhlIGNvZGUgaGFzIGEgYnJhY2luZyBlcnJvcgogICAgICAgICAgICAjIHdoaWNoIGxlYXZlcyBhIGNsb3NpbmcgYnJhY2Ugd2l0aCB6ZXJvIG5lc3RpbmcgZGVwdGguCiAgICAgICAgICAgIGlmICggIWdldF9zYXdfYnJhY2VfZXJyb3IoKSApIHsKICAgICAgICAgICAgICAgIGlmIChERVZFTF9NT0RFKSB7CiAgICAgICAgICAgICAgICAgICAgRmF1bHQoPDxFT00pOwpQcm9ncmFtIGJ1ZyBpbiBwYWRfYXJyYXlfdG9fZ286IGhpdCBuZXN0aW5nIGVycm9yIHdoaWNoIHNob3VsZCBoYXZlIGJlZW4gY2F1Z2h0CkVPTQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkbmVzdGluZ19kZXB0aF90b19nb1sgJG1heF9pbmRleF90b19nbyArIDEgXSAtPSAxOwogICAgICAgIH0KICAgIH0KCiAgICAjICAgICAgIC9eW0xce1woXFtdJC8KICAgIGVsc2lmICggJGlzX29wZW5pbmdfdHlwZXsgJHR5cGVzX3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dIH0gKSB7CiAgICAgICAgJG5lc3RpbmdfZGVwdGhfdG9fZ29bICRtYXhfaW5kZXhfdG9fZ28gKyAxIF0gKz0gMTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICMjIG11c3QgYmUgPyBvciA6CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBwYWRfYXJyYXlfdG9fZ28KCnN1YiBicmVha19tZXRob2RfY2FsbF9jaGFpbnMgewoKICAgIG15ICggJHNlbGYsICRyaV9sZWZ0LCAkcmlfcmlnaHQgKSA9IEBfOwoKICAgICMgSWYgdGhlcmUgaXMgYSBicmVhayBhdCBhbnkgbWVtYmVyIG9mIGEgbWV0aG9kIGNhbGwgY2hhaW4sIGJyZWFrCiAgICAjIGF0IGVhY2ggbWV0aG9kIGNhbGwgaW4gdGhlIGNoYWluIChhbGwgb3Igbm9uZSBsb2dpYykuIGdpdCAjMTcxLgoKICAgICMgR2l2ZW46CiAgICAjICAgJHJpX2ZpcnN0IC0gcmVmZXJlbmNlIHRvIGxpc3Qgb2YgdGhlIGZpcnN0IGluZGV4ICRpIGZvciBlYWNoIG91dHB1dAogICAgIyAgICAgICAgICAgICAgIGxpbmUgaW4gdGhpcyBiYXRjaAogICAgIyAgICRyaV9sYXN0IC0gcmVmZXJlbmNlIHRvIGxpc3Qgb2YgdGhlIGxhc3QgaW5kZXggJGkgZm9yIGVhY2ggb3V0cHV0IGxpbmUKICAgICMgICAgICAgICAgICAgIGluIHRoaXMgYmF0Y2gKCiAgICByZXR1cm4gdW5sZXNzICggJXsgJHNlbGYtPltfcnNlcW5vX2Fycm93X2NhbGxfY2hhaW5fc3RhcnRfXSB9ICk7CgogICAgIyBMb29rIGZvciAnLT4nIGJyZWFrcG9pbnRzCiAgICBteSBAaV9hcnJvd19icmVha3M7CiAgICBteSAkcmxpc3QgPSAhJHdhbnRfYnJlYWtfYmVmb3JleyctPid9ID8gJHJpX3JpZ2h0IDogJHJpX2xlZnQ7CiAgICBmb3JlYWNoIG15ICRpaSAoIEB7JHJsaXN0fSApIHsKICAgICAgICBpZiAoICR0eXBlc190b19nb1skaWldIGVxICctPicgKSB7IHB1c2ggQGlfYXJyb3dfYnJlYWtzLCAkaWkgfQogICAgfQogICAgcmV0dXJuIHVubGVzcyAoQGlfYXJyb3dfYnJlYWtzKTsKCiAgICAjIFNlZSBpZiB0aGVzZSBhcmUgcGFydCBvZiBhIGNhbGwgY2hhaW4KICAgIG15IEBpbnNlcnRfbGlzdDsKICAgIG15ICVpc19lbmRfaTsKICAgIEBpc19lbmRfaXsgQHskcmlfbGVmdH0gfSAgPSAoMSkgeCBzY2FsYXIoIEB7JHJpX2xlZnR9ICk7CiAgICBAaXNfZW5kX2l7IEB7JHJpX3JpZ2h0fSB9ID0gKDEpIHggc2NhbGFyKCBAeyRyaV9yaWdodH0gKTsKICAgIG15ICRvbmUgPSAhJHdhbnRfYnJlYWtfYmVmb3JleyctPid9ID8gMCA6IDE7CiAgICBmb3JlYWNoIG15ICRpaSAoQGlfYXJyb3dfYnJlYWtzKSB7CgogICAgICAgIG15ICRpcCA9IGlwcmV2X3RvX2dvKCRpaSk7CiAgICAgICAgbmV4dCBpZiAoICRpcCA8IDAgfHwgJHRva2Vuc190b19nb1skaXBdIG5lICcpJyApOwogICAgICAgIG15ICRzZXFubyAgICAgICA9ICR0eXBlX3NlcXVlbmNlX3RvX2dvWyRpcF07CiAgICAgICAgbXkgJHNlcW5vX3N0YXJ0ID0gJHNlbGYtPltfcnNlcW5vX2Fycm93X2NhbGxfY2hhaW5fc3RhcnRfXS0+eyRzZXFub307CiAgICAgICAgbmV4dCB1bmxlc3MgKCRzZXFub19zdGFydCk7CgogICAgICAgICMgRm91bmQgYSBjYWxsIGNoYWluLi4uCiAgICAgICAgbXkgQEtsaXN0ID0gQHsgJHNlbGYtPltfcmFycm93X2NhbGxfY2hhaW5fXS0+eyRzZXFub19zdGFydH0gfTsKICAgICAgICBteSAkS3JlZiAgPSAkS190b19nb1swXTsKICAgICAgICBmb3JlYWNoIG15ICRLSyAoQEtsaXN0KSB7CgogICAgICAgICAgICAjIEFkZCBtaXNzaW5nIGJyZWFrcwogICAgICAgICAgICBteSAkaV9LID0gJEtLIC0gJEtyZWY7CiAgICAgICAgICAgIG5leHQgaWYgKCAkaV9LIDw9IDAgfHwgJGlfSyA+PSAkbWF4X2luZGV4X3RvX2dvICk7CiAgICAgICAgICAgIG5leHQgaWYgKCAkaXNfZW5kX2l7JGlfS30gKTsKICAgICAgICAgICAgaWYgKCAkS190b19nb1skaV9LXSAhPSAkS0sgKSB7CiAgICAgICAgICAgICAgICAjIyBzaG91bGRuJ3QgaGFwcGVuIGR1ZSB0byBwcmV2aW91cyBjaGVja3Mgb24gaSB2cyBLCiAgICAgICAgICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KDw8RU9NKTsKICAgICAgICAgICAgICAgICAgICAgICAgdW5leHBlY3RlZCBhcnJheSBvZmZzZXQgZXJyb3IgaT0kaV9LIEs9JEtLIEtyZWY9ICRLcmVmCkVPTQogICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgfQogICAgICAgICAgICBwdXNoIEBpbnNlcnRfbGlzdCwgJGlfSyAtICRvbmU7CiAgICAgICAgfQogICAgfQoKICAgICMgSW5zZXJ0IGFueSBuZXcgYnJlYWsgcG9pbnRzCiAgICBpZiAoQGluc2VydF9saXN0KSB7CiAgICAgICAgJHNlbGYtPmluc2VydF9hZGRpdGlvbmFsX2JyZWFrcyggXEBpbnNlcnRfbGlzdCwgJHJpX2xlZnQsICRyaV9yaWdodCApOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgYnJlYWtfbWV0aG9kX2NhbGxfY2hhaW5zCgpzdWIgYnJlYWtfYWxsX2NoYWluX3Rva2VucyB7CgogICAgbXkgKCAkc2VsZiwgJHJpX2xlZnQsICRyaV9yaWdodCApID0gQF87CgogICAgIyBTY2FuIHRoZSBjdXJyZW50IGJyZWFrcG9pbnRzIGxvb2tpbmcgZm9yIGJyZWFrcyBhdCBjZXJ0YWluICJjaGFpbgogICAgIyBvcGVyYXRvcnMiICguIDogJiYgfHwgKyBldGMpIHdoaWNoIG9mdGVuIG9jY3VyIHJlcGVhdGVkbHkgaW4gYSBsb25nCiAgICAjIHN0YXRlbWVudC4gIElmIHdlIHNlZSBhIGJyZWFrIGF0IGFueSBvbmUsIGJyZWFrIGF0IGFsbCBzaW1pbGFyIHRva2VucwogICAgIyB3aXRoaW4gdGhlIHNhbWUgY29udGFpbmVyLgoKICAgICMgR2l2ZW46CiAgICAjICAgJHJpX2ZpcnN0IC0gcmVmZXJlbmNlIHRvIGxpc3Qgb2YgdGhlIGZpcnN0IGluZGV4ICRpIGZvciBlYWNoIG91dHB1dAogICAgIyAgICAgICAgICAgICAgIGxpbmUgaW4gdGhpcyBiYXRjaAogICAgIyAgICRyaV9sYXN0IC0gcmVmZXJlbmNlIHRvIGxpc3Qgb2YgdGhlIGxhc3QgaW5kZXggJGkgZm9yIGVhY2ggb3V0cHV0IGxpbmUKICAgICMgICAgICAgICAgICAgIGluIHRoaXMgYmF0Y2gKCiAgICBteSAlc2F3X2NoYWluX3R5cGU7CiAgICBteSAlbGVmdF9jaGFpbl90eXBlOwogICAgbXkgJXJpZ2h0X2NoYWluX3R5cGU7CiAgICBteSAlaW50ZXJpb3JfY2hhaW5fdHlwZTsKICAgIG15IEBpbnNlcnRfbGlzdDsKICAgIG15ICRubWF4ID0gQHskcmlfcmlnaHR9IC0gMTsKCiAgICAjIHNjYW4gdGhlIGxlZnQgYW5kIHJpZ2h0IGVuZCB0b2tlbnMgb2YgYWxsIGxpbmVzCiAgICBteSAkZW5kX2NvdW50ID0gMDsKICAgIGZvciBteSAkbiAoIDAgLi4gJG5tYXggKSB7CiAgICAgICAgbXkgJGlsICAgID0gJHJpX2xlZnQtPlskbl07CiAgICAgICAgbXkgJGlyICAgID0gJHJpX3JpZ2h0LT5bJG5dOwogICAgICAgIG15ICR0eXBlbCA9ICR0eXBlc190b19nb1skaWxdOwogICAgICAgIG15ICR0eXBlciA9ICR0eXBlc190b19nb1skaXJdOwogICAgICAgICR0eXBlbCA9ICcrJyBpZiAoICR0eXBlbCBlcSAnLScgKTsgICAgIyB0cmVhdCArIGFuZCAtIHRoZSBzYW1lCiAgICAgICAgJHR5cGVyID0gJysnIGlmICggJHR5cGVyIGVxICctJyApOwogICAgICAgICR0eXBlbCA9ICcqJyBpZiAoICR0eXBlbCBlcSAnLycgKTsgICAgIyB0cmVhdCAqIGFuZCAvIHRoZSBzYW1lCiAgICAgICAgJHR5cGVyID0gJyonIGlmICggJHR5cGVyIGVxICcvJyApOwoKICAgICAgICBteSAka2V5bCA9ICR0eXBlbCBlcSAnaycgPyAkdG9rZW5zX3RvX2dvWyRpbF0gOiAkdHlwZWw7CiAgICAgICAgbXkgJGtleXIgPSAkdHlwZXIgZXEgJ2snID8gJHRva2Vuc190b19nb1skaXJdIDogJHR5cGVyOwogICAgICAgIGlmICggJGlzX2NoYWluX29wZXJhdG9yeyRrZXlsfSAmJiAkd2FudF9icmVha19iZWZvcmV7JHR5cGVsfSApIHsKICAgICAgICAgICAgbmV4dCBpZiAoICR0eXBlbCBlcSAnPycgKTsKICAgICAgICAgICAgcHVzaCBAeyAkbGVmdF9jaGFpbl90eXBleyRrZXlsfSB9LCAkaWw7CiAgICAgICAgICAgICRzYXdfY2hhaW5fdHlwZXska2V5bH0gPSAxOwogICAgICAgICAgICAkZW5kX2NvdW50Kys7CiAgICAgICAgfQogICAgICAgIGlmICggJGlzX2NoYWluX29wZXJhdG9yeyRrZXlyfSAmJiAhJHdhbnRfYnJlYWtfYmVmb3JleyR0eXBlcn0gKSB7CiAgICAgICAgICAgIG5leHQgaWYgKCAkdHlwZXIgZXEgJz8nICk7CiAgICAgICAgICAgIHB1c2ggQHsgJHJpZ2h0X2NoYWluX3R5cGV7JGtleXJ9IH0sICRpcjsKICAgICAgICAgICAgJHNhd19jaGFpbl90eXBleyRrZXlyfSA9IDE7CiAgICAgICAgICAgICRlbmRfY291bnQrKzsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHVubGVzcyAkZW5kX2NvdW50OwoKICAgICMgbm93IGxvb2sgZm9yIGFueSBpbnRlcmlvciB0b2tlbnMgb2YgdGhlIHNhbWUgdHlwZXMKICAgIG15ICRpbnRlcmlvcl9jb3VudCA9IDA7CiAgICBteSAkaGFzX2ludGVyaW9yX2RvdF9vcl9wbHVzOwogICAgZm9yIG15ICRuICggMCAuLiAkbm1heCApIHsKICAgICAgICBteSAkaWwgPSAkcmlfbGVmdC0+WyRuXTsKICAgICAgICBteSAkaXIgPSAkcmlfcmlnaHQtPlskbl07CiAgICAgICAgZm9yZWFjaCBteSAkaSAoICRpbCArIDEgLi4gJGlyIC0gMSApIHsKICAgICAgICAgICAgbXkgJHR5cGUgPSAkdHlwZXNfdG9fZ29bJGldOwogICAgICAgICAgICBteSAka2V5ICA9ICR0eXBlIGVxICdrJyA/ICR0b2tlbnNfdG9fZ29bJGldIDogJHR5cGU7CiAgICAgICAgICAgICRrZXkgPSAnKycgaWYgKCAka2V5IGVxICctJyApOwogICAgICAgICAgICAka2V5ID0gJyonIGlmICggJGtleSBlcSAnLycgKTsKICAgICAgICAgICAgaWYgKCAkc2F3X2NoYWluX3R5cGV7JGtleX0gKSB7CiAgICAgICAgICAgICAgICBwdXNoIEB7ICRpbnRlcmlvcl9jaGFpbl90eXBleyRrZXl9IH0sICRpOwogICAgICAgICAgICAgICAgJGludGVyaW9yX2NvdW50Kys7CiAgICAgICAgICAgICAgICAkaGFzX2ludGVyaW9yX2RvdF9vcl9wbHVzIHx8PSAoICRrZXkgZXEgJy4nIHx8ICRrZXkgZXEgJysnICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gdW5sZXNzICRpbnRlcmlvcl9jb3VudDsKCiAgICBteSBAa2V5cyA9IGtleXMgJXNhd19jaGFpbl90eXBlOwoKICAgICMgcXVpdCBpZiBqdXN0IE9ORSBjb250aW51YXRpb24gbGluZSB3aXRoIGxlYWRpbmcgLiAgRm9yIGV4YW1wbGUtLQogICAgIyBwcmludCBMQVRFWEZJTEUgJ1xmcmFtZWJveHtccGFyYm94W2NdWycgLiAkaCAuICddW3RdeycgLiAkdyAuICd9eycKICAgICMgIC4gJGNvbnRlbnRzOwogICAgIyBGaXhlZCBmb3IgYjEzOTkuCiAgICBpZiAoICRoYXNfaW50ZXJpb3JfZG90X29yX3BsdXMgJiYgJG5tYXggPT0gMSAmJiBAa2V5cyA9PSAxICkgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIG5vdyBtYWtlIGEgbGlzdCBvZiBhbGwgbmV3IGJyZWFrIHBvaW50cwoKICAgICMgbG9vcCBvdmVyIGFsbCBjaGFpbiB0eXBlcwogICAgZm9yZWFjaCBteSAka2V5IChAa2V5cykgewoKICAgICAgICAjIGxvb3Agb3ZlciBhbGwgaW50ZXJpb3IgY2hhaW4gdG9rZW5zCiAgICAgICAgZm9yZWFjaCBteSAkaXRlc3QgKCBAeyAkaW50ZXJpb3JfY2hhaW5fdHlwZXska2V5fSB9ICkgewoKICAgICAgICAgICAgIyBsb29wIG92ZXIgYWxsIGxlZnQgZW5kIHRva2VucyBvZiBzYW1lIHR5cGUKICAgICAgICAgICAgaWYgKCAkbGVmdF9jaGFpbl90eXBleyRrZXl9ICkgewogICAgICAgICAgICAgICAgbmV4dCBpZiAkbm9icmVha190b19nb1sgJGl0ZXN0IC0gMSBdOwogICAgICAgICAgICAgICAgZm9yZWFjaCBteSAkaSAoIEB7ICRsZWZ0X2NoYWluX3R5cGV7JGtleX0gfSApIHsKICAgICAgICAgICAgICAgICAgICBuZXh0IHVubGVzcyAkc2VsZi0+aW5fc2FtZV9jb250YWluZXJfaSggJGksICRpdGVzdCApOwogICAgICAgICAgICAgICAgICAgIHB1c2ggQGluc2VydF9saXN0LCAkaXRlc3QgLSAxOwoKICAgICAgICAgICAgICAgICAgICAjIEJyZWFrIGF0IG1hdGNoaW5nID8gaWYgdGhpcyA6IGlzIGF0IGEgZGlmZmVyZW50IGxldmVsLgogICAgICAgICAgICAgICAgICAgICMgRm9yIGV4YW1wbGUsIHRoZSA/IGJlZm9yZSAkVEhSZl9ERUFEIGluIHRoZSBmb2xsb3dpbmcKICAgICAgICAgICAgICAgICAgICAjIHNob3VsZCBnZXQgYSBicmVhayBpZiBpdHMgOiBnZXRzIGEgYnJlYWsuCiAgICAgICAgICAgICAgICAgICAgIwogICAgICAgICAgICAgICAgICAgICMgbXkgJGZsYWdzID0KICAgICAgICAgICAgICAgICAgICAjICAgICAoICRfICYgMSApID8gKCAkXyAmIDQgKSA/ICRUSFJmX0RFQUQgOiAkVEhSZl9aT01CSUUKICAgICAgICAgICAgICAgICAgICAjICAgOiAoICRfICYgNCApID8gJFRIUmZfUl9ERVRBQ0hFRAogICAgICAgICAgICAgICAgICAgICMgICA6ICAgICAgICAgICAgICAkVEhSZl9SX0pPSU5BQkxFOwogICAgICAgICAgICAgICAgICAgIGlmICggICAka2V5IGVxICc6JwogICAgICAgICAgICAgICAgICAgICAgICAmJiAkbGV2ZWxzX3RvX2dvWyRpXSAhPSAkbGV2ZWxzX3RvX2dvWyRpdGVzdF0gKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGlfcXVlc3Rpb24gPSAkbWF0ZV9pbmRleF90b19nb1skaXRlc3RdOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQoJGlfcXVlc3Rpb24pICYmICRpX3F1ZXN0aW9uID4gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQGluc2VydF9saXN0LCAkaV9xdWVzdGlvbiAtIDE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBsb29wIG92ZXIgYWxsIHJpZ2h0IGVuZCB0b2tlbnMgb2Ygc2FtZSB0eXBlCiAgICAgICAgICAgIGlmICggJHJpZ2h0X2NoYWluX3R5cGV7JGtleX0gKSB7CiAgICAgICAgICAgICAgICBuZXh0IGlmICRub2JyZWFrX3RvX2dvWyRpdGVzdF07CiAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRpICggQHsgJHJpZ2h0X2NoYWluX3R5cGV7JGtleX0gfSApIHsKICAgICAgICAgICAgICAgICAgICBuZXh0IHVubGVzcyAkc2VsZi0+aW5fc2FtZV9jb250YWluZXJfaSggJGksICRpdGVzdCApOwogICAgICAgICAgICAgICAgICAgIHB1c2ggQGluc2VydF9saXN0LCAkaXRlc3Q7CgogICAgICAgICAgICAgICAgICAgICMgYnJlYWsgYXQgbWF0Y2hpbmcgPyBpZiB0aGlzIDogaXMgYXQgYSBkaWZmZXJlbnQgbGV2ZWwKICAgICAgICAgICAgICAgICAgICBpZiAoICAgJGtleSBlcSAnOicKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJGxldmVsc190b19nb1skaV0gIT0gJGxldmVsc190b19nb1skaXRlc3RdICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRpX3F1ZXN0aW9uID0gJG1hdGVfaW5kZXhfdG9fZ29bJGl0ZXN0XTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRpX3F1ZXN0aW9uKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQGluc2VydF9saXN0LCAkaV9xdWVzdGlvbjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgaW5zZXJ0IGFueSBuZXcgYnJlYWsgcG9pbnRzCiAgICBpZiAoQGluc2VydF9saXN0KSB7CiAgICAgICAgJHNlbGYtPmluc2VydF9hZGRpdGlvbmFsX2JyZWFrcyggXEBpbnNlcnRfbGlzdCwgJHJpX2xlZnQsICRyaV9yaWdodCApOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgYnJlYWtfYWxsX2NoYWluX3Rva2VucwoKc3ViIGluc2VydF9hZGRpdGlvbmFsX2JyZWFrcyB7CgogICAgbXkgKCAkc2VsZiwgJHJpX2JyZWFrX2xpc3QsICRyaV9maXJzdCwgJHJpX2xhc3QgKSA9IEBfOwoKICAgICMgVGhpcyByb3V0aW5lIHdpbGwgYWRkIGxpbmUgYnJlYWtzIGF0IHJlcXVlc3RlZCBsb2NhdGlvbnMgYWZ0ZXIKICAgICMgc3ViIGJyZWFrX2xvbmdfbGluZXMgaGFzIG1hZGUgcHJlbGltaW5hcnkgYnJlYWtzLgoKICAgICMgR2l2ZW46CiAgICAjICAgJHJpX2JyZWFrX2xpc3QgPSBsaXN0IG9mIGluZGV4IGxvY2F0aW9ucyBmb3IgYWRkaXRpb25hbCBicmVha3MKICAgICMgICAkcmlfZmlyc3QgLSByZWZlcmVuY2UgdG8gY3VycmVudCBsaXN0IG9mIHRoZSBmaXJzdCBpbmRleCAkaSBmb3IgZWFjaAogICAgIyAgICAgICAgICAgICAgIG91dHB1dCBsaW5lIGluIHRoaXMgYmF0Y2gKICAgICMgICAkcmlfbGFzdCAtIHJlZmVyZW5jZSB0byBjdXJyZW50IGxpc3Qgb2YgdGhlIGxhc3QgaW5kZXggJGkgZm9yIGVhY2gKICAgICMgICAgICAgICAgICAgICBvdXRwdXQgbGluZSBpbiB0aGlzIGJhdGNoCgogICAgbXkgJGlfZjsKICAgIG15ICRpX2w7CiAgICBteSAkbGluZV9udW1iZXIgPSAwOwogICAgZm9yZWFjaCBteSAkaV9icmVha19sZWZ0ICggc29ydCB7ICRhIDw9PiAkYiB9IEB7JHJpX2JyZWFrX2xpc3R9ICkgewoKICAgICAgICBuZXh0IGlmICggJG5vYnJlYWtfdG9fZ29bJGlfYnJlYWtfbGVmdF0gKTsKCiAgICAgICAgJGlfZiA9ICRyaV9maXJzdC0+WyRsaW5lX251bWJlcl07CiAgICAgICAgJGlfbCA9ICRyaV9sYXN0LT5bJGxpbmVfbnVtYmVyXTsKICAgICAgICB3aGlsZSAoICRpX2wgPD0gJGlfYnJlYWtfbGVmdCApIHsKICAgICAgICAgICAgJGxpbmVfbnVtYmVyKys7CgogICAgICAgICAgICAjIHNob3VsZG4ndCBoYXBwZW4gdW5sZXNzIGNhbGxlciBwYXNzZXMgYmFkIGluZGV4ZXMKICAgICAgICAgICAgaWYgKCAkbGluZV9udW1iZXIgPj0gQHskcmlfbGFzdH0gKSB7CiAgICAgICAgICAgICAgICBpZiAoREVWRUxfTU9ERSkgewogICAgICAgICAgICAgICAgICAgIEZhdWx0KDw8RU9NKTsKTm9uLWZhdGFsIHByb2dyYW0gYnVnOiBjb3VsZG4ndCBzZXQgYnJlYWsgYXQgJGlfYnJlYWtfbGVmdApFT00KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICAkaV9mID0gJHJpX2ZpcnN0LT5bJGxpbmVfbnVtYmVyXTsKICAgICAgICAgICAgJGlfbCA9ICRyaV9sYXN0LT5bJGxpbmVfbnVtYmVyXTsKICAgICAgICB9ICMjIGVuZCB3aGlsZSAoICRpX2wgPD0gJGlfYnJlYWtfbGVmdCkKCiAgICAgICAgIyBEbyBub3QgbGVhdmUgYSBibGFuayBhdCB0aGUgZW5kIG9mIGEgbGluZTsgYmFjayB1cCBpZiBuZWNlc3NhcnkKICAgICAgICBpZiAoICR0eXBlc190b19nb1skaV9icmVha19sZWZ0XSBlcSAnYicgKSB7ICRpX2JyZWFrX2xlZnQtLSB9CgogICAgICAgIG15ICRpX2JyZWFrX3JpZ2h0ID0gJGluZXh0X3RvX2dvWyRpX2JyZWFrX2xlZnRdOwogICAgICAgIGlmICggICAkaV9icmVha19sZWZ0ID49ICRpX2YKICAgICAgICAgICAgJiYgJGlfYnJlYWtfbGVmdCA8ICRpX2wKICAgICAgICAgICAgJiYgJGlfYnJlYWtfcmlnaHQgPiAkaV9mCiAgICAgICAgICAgICYmICRpX2JyZWFrX3JpZ2h0IDw9ICRpX2wgKQogICAgICAgIHsKICAgICAgICAgICAgc3BsaWNlKCBAeyRyaV9maXJzdH0sICRsaW5lX251bWJlciwgMSwgKCAkaV9mLCAkaV9icmVha19yaWdodCApICk7CiAgICAgICAgICAgIHNwbGljZSggQHskcmlfbGFzdH0sICAkbGluZV9udW1iZXIsIDEsICggJGlfYnJlYWtfbGVmdCwgJGlfbCApICk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgaW5zZXJ0X2FkZGl0aW9uYWxfYnJlYWtzCgp7ICAgICMjIGJlZ2luIGNsb3N1cmUgaW5fc2FtZV9jb250YWluZXJfaQogICAgbXkgJHJpc19icmVha190b2tlbjsKICAgIG15ICRyaXNfY29tbWFfdG9rZW47CgogICAgQkVHSU4gewoKICAgICAgICAjIGFsbCBjYXNlcyBicmVhayBvbiBzZWVpbmcgY29tbWFzIGF0IHNhbWUgbGV2ZWwKICAgICAgICBteSBAcSA9IHF3KCA9PiApOwogICAgICAgIHB1c2ggQHEsICcsJzsKICAgICAgICBAeyRyaXNfY29tbWFfdG9rZW59e0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgICAgICMgTm9uLXRlcm5hcnkgdGV4dCBhbHNvIGJyZWFrcyBvbiBzZWVpbmcgYW55IG9mIHF3KD8gOiB8fCBvciApCiAgICAgICAgIyBFeGFtcGxlOiB3ZSB3b3VsZCBub3Qgd2FudCB0byBicmVhayBhdCBhbnkgb2YgdGhlc2UgLidzCiAgICAgICAgIyAgOiAiPEEgSFJFRj1cIiNpdGVtXyIgLiBodG1saWZ5KCAwLCAkczIgKSAuICJcIj4kc3RyPC9BPiIKICAgICAgICBwdXNoIEBxLCBxdyggb3IgfHwgPyA6ICk7CiAgICAgICAgQHskcmlzX2JyZWFrX3Rva2VufXtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwogICAgfSAjIyBlbmQgQkVHSU4KCiAgICBzdWIgaW5fc2FtZV9jb250YWluZXJfaSB7CgogICAgICAgIG15ICggJHNlbGYsICRpMSwgJGkyICkgPSBAXzsKCiAgICAgICAgIyBDaGVjayB0byBzZWUgaWYgdG9rZW5zIGF0ICRpMSBhbmQgJGkyIGFyZSBpbiB0aGUgc2FtZSBjb250YWluZXIsIGFuZAogICAgICAgICMgbm90IHNlcGFyYXRlZCBieSBjZXJ0YWluIGNoYXJhY3RlcnM6ID0+ICwgPyA6IHx8IG9yCiAgICAgICAgIyBUaGlzIGlzIGFuIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBfdG9fZ28gYXJyYXlzIHRvIHRoZSByTEwgYXJyYXkKCiAgICAgICAgIyBxdWljayBjaGVjawogICAgICAgIG15ICRwYXJlbnRfc2Vxbm9fMSA9ICRwYXJlbnRfc2Vxbm9fdG9fZ29bJGkxXTsKICAgICAgICByZXR1cm4gaWYgKCAkcGFyZW50X3NlcW5vX3RvX2dvWyRpMl0gbmUgJHBhcmVudF9zZXFub18xICk7CgogICAgICAgIGlmICggJGkyIDwgJGkxICkgeyAoICRpMSwgJGkyICkgPSAoICRpMiwgJGkxICkgfQogICAgICAgIG15ICRLMSA9ICRLX3RvX2dvWyRpMV07CiAgICAgICAgbXkgJEsyID0gJEtfdG9fZ29bJGkyXTsKCiAgICAgICAgbXkgJGRlcHRoXzEgPSAkbmVzdGluZ19kZXB0aF90b19nb1skaTFdOwogICAgICAgIHJldHVybiBpZiAoICRkZXB0aF8xIDwgMCApOwoKICAgICAgICAjIFNob3VsZG4ndCBoYXBwZW4gc2luY2UgaTEgYW5kIGkyIGhhdmUgc2FtZSBwYXJlbnQ6CiAgICAgICAgcmV0dXJuIHVubGVzcyAoICRuZXN0aW5nX2RlcHRoX3RvX2dvWyRpMl0gPT0gJGRlcHRoXzEgKTsKCiAgICAgICAgIyBTZWxlY3QgY2hhcmFjdGVyIHNldCB0byBzY2FuIGZvcgogICAgICAgIG15ICR0eXBlXzEgPSAkdHlwZXNfdG9fZ29bJGkxXTsKICAgICAgICBteSAkcmJyZWFrID0gKCAkdHlwZV8xIG5lICc6JyApID8gJHJpc19icmVha190b2tlbiA6ICRyaXNfY29tbWFfdG9rZW47CgogICAgICAgIG15ICRyS19uZXh0X3NlcW5vX2J5X0sgPSAkc2VsZi0+W19yS19uZXh0X3NlcW5vX2J5X0tfXTsKCiAgICAgICAgIyBGYXN0IHByZWxpbWluYXJ5IGxvb3AgdG8gdmVyaWZ5IHRoYXQgdG9rZW5zIGFyZSBpbiB0aGUgc2FtZSBjb250YWluZXIKICAgICAgICBteSAkS0sgICAgICAgICA9ICRLMTsKICAgICAgICBteSAkS25leHRfbGFzdCA9ICRLSzsKICAgICAgICB3aGlsZSAoIGRlZmluZWQoICRLSyA9ICRyS19uZXh0X3NlcW5vX2J5X0stPlskS0tdICkgKSB7CgogICAgICAgICAgICBpZiAoICRLSyA8PSAkS25leHRfbGFzdCApIHsKICAgICAgICAgICAgICAgICMjIHNob3VsZG4ndCBoYXBwZW46ICRyS19uZXh0X3NlcW5vX2J5X0sgaXMgY29ycnVwdGVkCiAgICAgICAgICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KDw8RU9NKTsKS25leHQgc2hvdWxkIG5vdCBpbmNyZWFzZTogS25leHRfbGFzdD0kS25leHRfbGFzdCA+PSBLbmV4dD0kS0sKRU9NCiAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICB9CiAgICAgICAgICAgICRLbmV4dF9sYXN0ID0gJEtLOwoKICAgICAgICAgICAgbGFzdCBpZiAoICRLSyA+PSAkSzIgKTsKICAgICAgICAgICAgbXkgJGlpICAgICAgPSAkaTEgKyAkS0sgLSAkSzE7CiAgICAgICAgICAgIG15ICRkZXB0aF9pID0gJG5lc3RpbmdfZGVwdGhfdG9fZ29bJGlpXTsKICAgICAgICAgICAgcmV0dXJuIGlmICggJGRlcHRoX2kgPCAkZGVwdGhfMSApOwogICAgICAgICAgICBuZXh0ICAgaWYgKCAkZGVwdGhfaSA+ICRkZXB0aF8xICk7CiAgICAgICAgICAgIGlmICggJHR5cGVfMSBuZSAnOicgKSB7CiAgICAgICAgICAgICAgICBteSAkdG9rX2kgPSAkdG9rZW5zX3RvX2dvWyRpaV07CiAgICAgICAgICAgICAgICByZXR1cm4gaWYgKCAkdG9rX2kgZXEgJz8nIHx8ICR0b2tfaSBlcSAnOicgKTsKICAgICAgICAgICAgfQogICAgICAgIH0gIyMgZW5kIHdoaWxlICggZGVmaW5lZCggJEtLID0gJHJLX25leHRfc2Vxbm9fYnlfSy4uLikpCgogICAgICAgICMgU2xvdyBsb29wIGNoZWNraW5nIGZvciBjZXJ0YWluIGNoYXJhY3RlcnMKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBUaGlzIGlzIHBvdGVudGlhbGx5IGEgc2xvdyByb3V0aW5lIGFuZCBub3QgY3JpdGljYWwuCiAgICAgICAgIyBGb3Igc2FmZXR5IGp1c3QgZ2l2ZSB1cCBmb3IgbGFyZ2UgZGlmZmVyZW5jZXMuCiAgICAgICAgIyBTZWUgdGVzdCBmaWxlICdpbmZpbml0ZV9sb29wLnR4dCcKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICByZXR1cm4gaWYgKCAkaTIgLSAkaTEgPiAyMDAgKTsKCiAgICAgICAgZm9yZWFjaCBteSAkaWkgKCAkaTEgKyAxIC4uICRpMiAtIDEgKSB7CgogICAgICAgICAgICBteSAkZGVwdGhfaSA9ICRuZXN0aW5nX2RlcHRoX3RvX2dvWyRpaV07CiAgICAgICAgICAgIG5leHQgICBpZiAoICRkZXB0aF9pID4gJGRlcHRoXzEgKTsKICAgICAgICAgICAgcmV0dXJuIGlmICggJGRlcHRoX2kgPCAkZGVwdGhfMSApOwogICAgICAgICAgICBteSAkdHlwX2kgPSAkdHlwZXNfdG9fZ29bJGlpXTsKICAgICAgICAgICAgaWYgKCAkdHlwX2kgZXEgJ2snICkgeyAkdHlwX2kgPSAkdG9rZW5zX3RvX2dvWyRpaV0gfQogICAgICAgICAgICByZXR1cm4gaWYgKCAkcmJyZWFrLT57JHR5cF9pfSApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gMTsKICAgIH0gIyMgZW5kIHN1YiBpbl9zYW1lX2NvbnRhaW5lcl9pCn0gIyMgZW5kIGNsb3N1cmUgaW5fc2FtZV9jb250YWluZXJfaQoKc3ViIGJyZWFrX2VxdWFscyB7CgogICAgbXkgKCAkc2VsZiwgJHJpX2xlZnQsICRyaV9yaWdodCApID0gQF87CgogICAgIyBMb29rIGZvciBhc3NpZ25tZW50IG9wZXJhdG9ycyB0aGF0IGNvdWxkIHVzZSBhIGJyZWFrcG9pbnQuCgogICAgIyBHaXZlbjoKICAgICMgICAkcmlfZmlyc3QgLSByZWZlcmVuY2UgdG8gY3VycmVudCBsaXN0IG9mIHRoZSBmaXJzdCBpbmRleCAkaSBmb3IgZWFjaAogICAgIyAgICAgICAgICAgICAgIG91dHB1dCBsaW5lIGluIHRoaXMgYmF0Y2gKICAgICMgICAkcmlfbGFzdCAtIHJlZmVyZW5jZSB0byBjdXJyZW50IGxpc3Qgb2YgdGhlIGxhc3QgaW5kZXggJGkgZm9yIGVhY2gKICAgICMgICAgICAgICAgICAgICBvdXRwdXQgbGluZSBpbiB0aGlzIGJhdGNoCgogICAgIyBGb3IgZXhhbXBsZSwgaW4gdGhlIGZvbGxvd2luZyBzbmlwcGV0CiAgICAjCiAgICAjICAgICRIT01FID0gJEVOVntIT01FfQogICAgIyAgICAgIHx8ICRFTlZ7TE9HRElSfQogICAgIyAgICAgIHx8ICRwd1s3XQogICAgIyAgICAgIHx8IGRpZSAibm8gaG9tZSBkaXJlY3RvcnkgZm9yIHVzZXIgJDwiOwogICAgIwogICAgIyB3ZSBjb3VsZCBicmVhayBhdCB0aGUgPSB0byBnZXQgdGhpcywgd2hpY2ggaXMgYSBsaXR0bGUgbmljZXI6CiAgICAjICAgICRIT01FID0KICAgICMgICAgICAgICAkRU5We0hPTUV9CiAgICAjICAgICAgfHwgJEVOVntMT0dESVJ9CiAgICAjICAgICAgfHwgJHB3WzddCiAgICAjICAgICAgfHwgZGllICJubyBob21lIGRpcmVjdG9yeSBmb3IgdXNlciAkPCI7CiAgICAjCiAgICAjIFRoZSBsb2dpYyBoZXJlIGZvbGxvd3MgdGhlIGxvZ2ljIGluIHNldF9sb2dpY2FsX3BhZGRpbmcsIHdoaWNoCiAgICAjIHdpbGwgYWRkIHRoZSBwYWRkaW5nIGluIHRoZSBzZWNvbmQgbGluZSB0byBpbXByb3ZlIGFsaWdubWVudC4KICAgICMKICAgIG15ICRubWF4ID0gQHskcmlfcmlnaHR9IC0gMTsKICAgIHJldHVybiBpZiAoICRubWF4IDwgMiApOwoKICAgICMgc2NhbiB0aGUgbGVmdCBlbmRzIG9mIGZpcnN0IHR3byBsaW5lcwogICAgbXkgJHRva2JlZyA9IEVNUFRZX1NUUklORzsKICAgIG15ICRkZXB0aF9iZWc7CiAgICBmb3IgbXkgJG4gKCAxIC4uIDIgKSB7CiAgICAgICAgbXkgJGlsICAgICA9ICRyaV9sZWZ0LT5bJG5dOwogICAgICAgIG15ICR0eXBlbCAgPSAkdHlwZXNfdG9fZ29bJGlsXTsKICAgICAgICBteSAkdG9rZW5sID0gJHRva2Vuc190b19nb1skaWxdOwogICAgICAgIG15ICRrZXlsICAgPSAkdHlwZWwgZXEgJ2snID8gJHRva2VubCA6ICR0eXBlbDsKCiAgICAgICAgbXkgJGhhc19sZWFkaW5nX29wID0gJGlzX2NoYWluX29wZXJhdG9yeyRrZXlsfTsKICAgICAgICByZXR1cm4gdW5sZXNzICgkaGFzX2xlYWRpbmdfb3ApOwogICAgICAgIGlmICggJG4gPiAxICkgewogICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICB1bmxlc3MgKCAkdG9rZW5sIGVxICR0b2tiZWcKICAgICAgICAgICAgICAgICYmICRuZXN0aW5nX2RlcHRoX3RvX2dvWyRpbF0gZXEgJGRlcHRoX2JlZyApOwogICAgICAgIH0KICAgICAgICAkdG9rYmVnICAgID0gJHRva2VubDsKICAgICAgICAkZGVwdGhfYmVnID0gJG5lc3RpbmdfZGVwdGhfdG9fZ29bJGlsXTsKICAgIH0KCiAgICAjIG5vdyBsb29rIGZvciBhbnkgaW50ZXJpb3IgdG9rZW5zIG9mIHRoZSBzYW1lIHR5cGVzCiAgICBteSAkaWwgPSAkcmlfbGVmdC0+WzBdOwogICAgbXkgJGlyID0gJHJpX3JpZ2h0LT5bMF07CgogICAgIyBub3cgbWFrZSBhIGxpc3Qgb2YgYWxsIG5ldyBicmVhayBwb2ludHMKICAgIG15IEBpbnNlcnRfbGlzdDsKICAgIGZvcmVhY2ggbXkgJGkgKCByZXZlcnNlKCAkaWwgKyAxIC4uICRpciAtIDEgKSApIHsKICAgICAgICBteSAkdHlwZSA9ICR0eXBlc190b19nb1skaV07CiAgICAgICAgaWYgKCAgICRpc19hc3NpZ25tZW50eyR0eXBlfQogICAgICAgICAgICAmJiAkbmVzdGluZ19kZXB0aF90b19nb1skaV0gZXEgJGRlcHRoX2JlZyApCiAgICAgICAgewogICAgICAgICAgICBpZiAoICR3YW50X2JyZWFrX2JlZm9yZXskdHlwZX0gKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBpbnNlcnRfbGlzdCwgJGkgLSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcHVzaCBAaW5zZXJ0X2xpc3QsICRpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgQnJlYWsgYWZ0ZXIgYSAncmV0dXJuJyBmb2xsb3dlZCBieSBhIGNoYWluIG9mIG9wZXJhdG9ycwogICAgIyAgcmV0dXJuICggJF5PICF+IC93aW4zMnxkb3MvaSApCiAgICAjICAgICYmICggJF5PIG5lICdWTVMnICkKICAgICMgICAgJiYgKCAkXk8gbmUgJ09TMicgKQogICAgIyAgICAmJiAoICReTyBuZSAnTWFjT1MnICk7CiAgICAjIFRvIGdpdmU6CiAgICAjICByZXR1cm4KICAgICMgICAgICAgKCAkXk8gIX4gL3dpbjMyfGRvcy9pICkKICAgICMgICAgJiYgKCAkXk8gbmUgJ1ZNUycgKQogICAgIyAgICAmJiAoICReTyBuZSAnT1MyJyApCiAgICAjICAgICYmICggJF5PIG5lICdNYWNPUycgKTsKICAgIG15ICRpID0gMDsKICAgIGlmICggICAkdHlwZXNfdG9fZ29bJGldIGVxICdrJwogICAgICAgICYmICR0b2tlbnNfdG9fZ29bJGldIGVxICdyZXR1cm4nCiAgICAgICAgJiYgJGlyID4gJGlsCiAgICAgICAgJiYgJG5lc3RpbmdfZGVwdGhfdG9fZ29bJGldIGVxICRkZXB0aF9iZWcgKQogICAgewogICAgICAgIHB1c2ggQGluc2VydF9saXN0LCAkaTsKICAgIH0KCiAgICByZXR1cm4gdW5sZXNzIChAaW5zZXJ0X2xpc3QpOwoKICAgICMgT25lIGZpbmFsIGNoZWNrLi4uCiAgICAjIHNjYW4gc2Vjb25kIGFuZCB0aGlyZCBsaW5lcyBhbmQgYmUgc3VyZSB0aGVyZSBhcmUgbm8gYXNzaWdubWVudHMKICAgICMgd2Ugd2FudCB0byBhdm9pZCBicmVha2luZyBhdCBhbiA9IHRvIG1ha2Ugc29tZXRoaW5nIGxpa2UgdGhpczoKICAgICMgICAgdW5sZXNzICggJGljb24gPQogICAgIyAgICAgICAgICAgJGh0bWxfaWNvbnN7IiR0eXBlLSRzdGF0ZSJ9CiAgICAjICAgICAgICBvciAkaWNvbiA9ICRodG1sX2ljb25zeyR0eXBlfQogICAgIyAgICAgICAgb3IgJGljb24gPSAkaHRtbF9pY29uc3skc3RhdGV9ICkKICAgIGZvciBteSAkbiAoIDEgLi4gMiApIHsKICAgICAgICBteSAkaWxfbiA9ICRyaV9sZWZ0LT5bJG5dOwogICAgICAgIG15ICRpcl9uID0gJHJpX3JpZ2h0LT5bJG5dOwogICAgICAgIGZvcmVhY2ggbXkgJGlpICggJGlsX24gKyAxIC4uICRpcl9uICkgewogICAgICAgICAgICBteSAkdHlwZSA9ICR0eXBlc190b19nb1skaWldOwogICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICBpZiAoICRpc19hc3NpZ25tZW50eyR0eXBlfQogICAgICAgICAgICAgICAgJiYgJG5lc3RpbmdfZGVwdGhfdG9fZ29bJGlpXSBlcSAkZGVwdGhfYmVnICk7CiAgICAgICAgfQogICAgfQoKICAgICMgb2ssIGluc2VydCBhbnkgbmV3IGJyZWFrIHBvaW50CiAgICBpZiAoQGluc2VydF9saXN0KSB7CiAgICAgICAgJHNlbGYtPmluc2VydF9hZGRpdGlvbmFsX2JyZWFrcyggXEBpbnNlcnRfbGlzdCwgJHJpX2xlZnQsICRyaV9yaWdodCApOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgYnJlYWtfZXF1YWxzCgp7ICAgICMjIGJlZ2luIGNsb3N1cmUgcmVjb21iaW5lX2JyZWFrcG9pbnRzCgogICAgIyBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIG9uY2UgcGVyIGJhdGNoIHRvIHNlZSBpZiBpdCB3b3VsZCBiZSBiZXR0ZXIKICAgICMgdG8gY29tYmluZSBzb21lIG9mIHRoZSBsaW5lcyBpbnRvIHdoaWNoIHRoZSBiYXRjaCBoYXMgYmVlbiBicm9rZW4uCgogICAgbXkgJWlzX2FtcF9hbXA7CiAgICBteSAlaXNfbWF0aF9vcDsKICAgIG15ICVpc19wbHVzX21pbnVzOwogICAgbXkgJWlzX211bHRfZGl2OwoKICAgIEJFR0lOIHsKCiAgICAgICAgbXkgQHE7CiAgICAgICAgQHEgPSBxdyggJiYgfHwgKTsKICAgICAgICBAaXNfYW1wX2FtcHtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICAgICBAcSA9IHF3KCArIC0gKiAvICk7CiAgICAgICAgQGlzX21hdGhfb3B7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICAgICAgQHEgPSBxdyggKyAtICk7CiAgICAgICAgQGlzX3BsdXNfbWludXN7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICAgICAgQHEgPSBxdyggKiAvICk7CiAgICAgICAgQGlzX211bHRfZGl2e0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CiAgICB9ICMjIGVuZCBCRUdJTgoKICAgIHN1YiBEZWJ1Z19kdW1wX2JyZWFrcG9pbnRzIHsKCiAgICAgICAgbXkgKCAkc2VsZiwgJHJpX2JlZywgJHJpX2VuZCwgJG1zZyApID0gQF87CgogICAgICAgICMgRGVidWcgcm91dGluZSB0byBkdW1wIGN1cnJlbnQgYnJlYWtwb2ludHMuLi5ub3Qgbm9ybWFsbHkgY2FsbGVkCiAgICAgICAgIyBHaXZlbjogaW5kZXhlcyB0byB0aGUgY3VycmVudCBsaW5lczoKICAgICAgICAjICAgJHJpX2JlZyA9IHJlZiB0byBhcnJheSBvZiBCRUdpbm5pbmcgaW5kZXhlcyBvZiBlYWNoIGxpbmUKICAgICAgICAjICAgJHJpX2VuZCA9IHJlZiB0byBhcnJheSBvZiBFTkRpbmcgaW5kZXhlcyBvZiBlYWNoIGxpbmUKICAgICAgICBwcmludCB7KlNURE9VVH0gIi0tLS1EdW1waW5nIGJyZWFrcG9pbnRzIGZyb206ICRtc2ctLS0tXG4iOwogICAgICAgIGZvciBteSAkbiAoIDAgLi4gQHskcmlfZW5kfSAtIDEgKSB7CiAgICAgICAgICAgIG15ICRpYmVnID0gJHJpX2JlZy0+WyRuXTsKICAgICAgICAgICAgbXkgJGllbmQgPSAkcmlfZW5kLT5bJG5dOwogICAgICAgICAgICBteSAkdGV4dCA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgZm9yZWFjaCBteSAkaSAoICRpYmVnIC4uICRpZW5kICkgewogICAgICAgICAgICAgICAgJHRleHQgLj0gJHRva2Vuc190b19nb1skaV07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcHJpbnQgeypTVERPVVR9ICIkbiAoJGliZWc6JGllbmQpICR0ZXh0XG4iOwogICAgICAgIH0KICAgICAgICBwcmludCB7KlNURE9VVH0gIi0tLS1cbiI7CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIERlYnVnX2R1bXBfYnJlYWtwb2ludHMKCiAgICBzdWIgZGVsZXRlX29uZV9saW5lX3NlbWljb2xvbnMgewoKICAgICAgICBteSAoICRzZWxmLCAkcmlfYmVnLCAkcmlfZW5kICkgPSBAXzsKCiAgICAgICAgIyBHaXZlbjogaW5kZXhlcyB0byB0aGUgY3VycmVudCBsaW5lczoKICAgICAgICAjICAgJHJpX2JlZyA9IHJlZiB0byBhcnJheSBvZiBiZWdpbm5pbmcgaW5kZXhlcyBvZiBlYWNoIGxpbmUKICAgICAgICAjICAgJHJpX2VuZCA9IHJlZiB0byBhcnJheSBvZiBlbmRpbmcgaW5kZXhlcyBvZiBlYWNoIGxpbmUKCiAgICAgICAgbXkgJHJMTCAgICAgICAgICAgICAgICAgPSAkc2VsZi0+W19yTExfXTsKICAgICAgICBteSAkS19vcGVuaW5nX2NvbnRhaW5lciA9ICRzZWxmLT5bX0tfb3BlbmluZ19jb250YWluZXJfXTsKCiAgICAgICAgIyBXYWxrIGRvd24gdGhlIGxpbmVzIG9mIHRoaXMgYmF0Y2ggYW5kIGRlbGV0ZSBhbnkgc2VtaWNvbG9ucwogICAgICAgICMgdGVybWluYXRpbmcgb25lLWxpbmUgYmxvY2tzOwogICAgICAgIG15ICRubWF4ID0gQHskcmlfZW5kfSAtIDE7CgogICAgICAgIGZvcmVhY2ggbXkgJG4gKCAwIC4uICRubWF4ICkgewogICAgICAgICAgICBteSAkaV9iZWcgICAgPSAkcmlfYmVnLT5bJG5dOwogICAgICAgICAgICBteSAkaV9lICAgICAgPSAkcmlfZW5kLT5bJG5dOwogICAgICAgICAgICBteSAkS19iZWcgICAgPSAkS190b19nb1skaV9iZWddOwogICAgICAgICAgICBteSAkS19lICAgICAgPSAkS190b19nb1skaV9lXTsKICAgICAgICAgICAgbXkgJEtfZW5kICAgID0gJEtfZTsKICAgICAgICAgICAgbXkgJHR5cGVfZW5kID0gJHJMTC0+WyRLX2VuZF0tPltfVFlQRV9dOwogICAgICAgICAgICBpZiAoICR0eXBlX2VuZCBlcSAnIycgKSB7CiAgICAgICAgICAgICAgICAkS19lbmQgPSAkc2VsZi0+S19wcmV2aW91c19ub25ibGFuaygkS19lbmQpOwogICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRLX2VuZCkgKSB7ICR0eXBlX2VuZCA9ICRyTEwtPlskS19lbmRdLT5bX1RZUEVfXTsgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHdlIGFyZSBsb29raW5nIGZvciBhIGxpbmUgZW5kaW5nIGluIGNsb3NpbmcgYnJhY2UKICAgICAgICAgICAgbmV4dAogICAgICAgICAgICAgIHVubGVzcyAoICR0eXBlX2VuZCBlcSAnfScgJiYgJHJMTC0+WyRLX2VuZF0tPltfVE9LRU5fXSBlcSAnfScgKTsKCiAgICAgICAgICAgICMgLi4uYW5kIHByZWNlZGVkIGJ5IGEgc2VtaWNvbG9uIG9uIHRoZSBzYW1lIGxpbmUKICAgICAgICAgICAgbXkgJEtfc2VtaWNvbG9uID0gJHNlbGYtPktfcHJldmlvdXNfbm9uYmxhbmsoJEtfZW5kKTsKICAgICAgICAgICAgbmV4dCB1bmxlc3MgZGVmaW5lZCgkS19zZW1pY29sb24pOwogICAgICAgICAgICBteSAkaV9zZW1pY29sb24gPSAkaV9iZWcgKyAoICRLX3NlbWljb2xvbiAtICRLX2JlZyApOwogICAgICAgICAgICBuZXh0IGlmICggJGlfc2VtaWNvbG9uIDw9ICRpX2JlZyApOwogICAgICAgICAgICBuZXh0IHVubGVzcyAoICRyTEwtPlskS19zZW1pY29sb25dLT5bX1RZUEVfXSBlcSAnOycgKTsKCiAgICAgICAgICAgICMgU2FmZXR5IGNoZWNrIC0gc2hvdWxkbid0IGhhcHBlbiAtIG5vdCBjcml0aWNhbAogICAgICAgICAgICAjIFRoaXMgaXMgbm90IHdvcnRoIHRocm93aW5nIGEgRmF1bHQsIGV4Y2VwdCBpbiBERVZFTF9NT0RFCiAgICAgICAgICAgIGlmICggJHR5cGVzX3RvX2dvWyRpX3NlbWljb2xvbl0gbmUgJzsnICkgewogICAgICAgICAgICAgICAgREVWRUxfTU9ERQogICAgICAgICAgICAgICAgICAmJiBGYXVsdCgidW5leHBlY3RlZCB0eXBlIGxvb2tpbmcgZm9yIHNlbWljb2xvbiIpOwogICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyAuLi4gd2l0aCB0aGUgY29ycmVzcG9uZGluZyBvcGVuaW5nIGJyYWNlIG9uIHRoZSBzYW1lIGxpbmUKICAgICAgICAgICAgbXkgJHR5cGVfc2VxdWVuY2UgPSAkckxMLT5bJEtfZW5kXS0+W19UWVBFX1NFUVVFTkNFX107CiAgICAgICAgICAgIG15ICRLX29wZW5pbmcgICAgID0gJEtfb3BlbmluZ19jb250YWluZXItPnskdHlwZV9zZXF1ZW5jZX07CiAgICAgICAgICAgIG5leHQgdW5sZXNzICggZGVmaW5lZCgkS19vcGVuaW5nKSApOwogICAgICAgICAgICBteSAkaV9vcGVuaW5nID0gJGlfYmVnICsgKCAkS19vcGVuaW5nIC0gJEtfYmVnICk7CiAgICAgICAgICAgIG5leHQgaWYgKCAkaV9vcGVuaW5nIDwgJGlfYmVnICk7CgogICAgICAgICAgICAjIC4uLiBhbmQgb25seSBvbmUgc2VtaWNvbG9uIGJldHdlZW4gdGhlc2UgYnJhY2VzCiAgICAgICAgICAgIG15ICRzZW1pY29sb25fY291bnQgPSAwOwogICAgICAgICAgICBmb3JlYWNoIG15ICRLICggJEtfb3BlbmluZyArIDEgLi4gJEtfc2VtaWNvbG9uIC0gMSApIHsKICAgICAgICAgICAgICAgIGlmICggJHJMTC0+WyRLXS0+W19UWVBFX10gZXEgJzsnICkgewogICAgICAgICAgICAgICAgICAgICRzZW1pY29sb25fY291bnQrKzsKICAgICAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIG5leHQgaWYgKCRzZW1pY29sb25fY291bnQpOwoKICAgICAgICAgICAgIyAuLi5vaywgdGhlbiBtYWtlIHRoZSBzZW1pY29sb24gaW52aXNpYmxlCiAgICAgICAgICAgIG15ICRsZW4gPSAkdG9rZW5fbGVuZ3Roc190b19nb1skaV9zZW1pY29sb25dOwogICAgICAgICAgICAkdG9rZW5zX3RvX2dvWyRpX3NlbWljb2xvbl0gICAgICAgICAgICA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgJHRva2VuX2xlbmd0aHNfdG9fZ29bJGlfc2VtaWNvbG9uXSAgICAgPSAwOwogICAgICAgICAgICAkckxMLT5bJEtfc2VtaWNvbG9uXS0+W19UT0tFTl9dICAgICAgICA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgJHJMTC0+WyRLX3NlbWljb2xvbl0tPltfVE9LRU5fTEVOR1RIX10gPSAwOwogICAgICAgICAgICBmb3JlYWNoICggJGlfc2VtaWNvbG9uIC4uICRtYXhfaW5kZXhfdG9fZ28gKSB7CiAgICAgICAgICAgICAgICAkc3VtbWVkX2xlbmd0aHNfdG9fZ29bICRfICsgMSBdIC09ICRsZW47CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGRlbGV0ZV9vbmVfbGluZV9zZW1pY29sb25zCgogICAgdXNlIGNvbnN0YW50IERFQlVHX1JFQ09NQklORSA9PiAwOwoKICAgIHN1YiByZWNvbWJpbmVfYnJlYWtwb2ludHMgewoKICAgICAgICBteSAoICRzZWxmLCAkcmlfYmVnLCAkcmlfZW5kLCAkcmJvbmRfc3RyZW5ndGhfdG9fZ28gKSA9IEBfOwoKICAgICAgICAjIFRoaXMgc3ViIGltcGxlbWVudHMgdGhlICdyZWNvbWJpbmUnIG9wZXJhdGlvbiBvbiBhIGJhdGNoLgogICAgICAgICMgSXRzIHRhc2sgaXMgdG8gY29tYmluZSBzb21lIG9mIHRoZXNlIGxpbmVzIGJhY2sgdG9nZXRoZXIgdG8KICAgICAgICAjIGltcHJvdmUgZm9ybWF0dGluZy4gIFRoZSBuZWVkIGZvciB0aGlzIGFyaXNlcyBiZWNhdXNlCiAgICAgICAgIyBzdWIgJ2JyZWFrX2xvbmdfbGluZXMnIGlzIHZlcnkgbGliZXJhbCBpbiBzZXR0aW5nIGxpbmUgYnJlYWtzCiAgICAgICAgIyBmb3IgbG9uZyBsaW5lcywgYWx3YXlzIHNldHRpbmcgYnJlYWtzIGF0IGdvb2QgYnJlYWtwb2ludHMsIGV2ZW4KICAgICAgICAjIHdoZW4gdGhhdCBjcmVhdGVzIHNtYWxsIGxpbmVzLiAgU29tZXRpbWVzIHNtYWxsIGxpbmUgZnJhZ21lbnRzCiAgICAgICAgIyBhcmUgcHJvZHVjZWQgd2hpY2ggd291bGQgbG9vayBiZXR0ZXIgaWYgdGhleSB3ZXJlIGNvbWJpbmVkLgoKICAgICAgICAjIElucHV0IHBhcmFtZXRlcnM6CiAgICAgICAgIyAgJHJpX2JlZyA9IHJlZiB0byBhcnJheSBvZiBCRUdpbm5pbmcgaW5kZXhlcyBvZiBlYWNoIGxpbmUKICAgICAgICAjICAkcmlfZW5kID0gcmVmIHRvIGFycmF5IG9mIEVORGluZyBpbmRleGVzIG9mIGVhY2ggbGluZQogICAgICAgICMgICRyYm9uZF9zdHJlbmd0aF90b19nbyA9IGFycmF5IG9mIGJvbmQgc3RyZW5ndGhzIHB1bGxpbmcKICAgICAgICAjICAgIHRva2VucyB0b2dldGhlciwgdXNlZCB0byBkZWNpZGUgd2hlcmUgYmVzdCB0byByZWNvbWJpbmUgbGluZXMuCgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBEbyBub3RoaW5nIHVuZGVyIGV4dHJlbWUgc3RyZXNzOyB1c2UgPD0gMiBmb3IgYzE3MS4KICAgICAgICAjIChOT1RFOiBOZXcgb3B0aW1pemF0aW9ucyBtYWtlIHRoaXMgdW5uZWNlc3NhcnkuICBCdXQgcmVtb3ZpbmcgdGhpcwogICAgICAgICMgY2hlY2sgaXMgbm90IHJlYWxseSB1c2VmdWwgYmVjYXVzZSB0aGlzIGNvbmRpdGlvbiBvbmx5IG9jY3VycyBpbgogICAgICAgICMgdGVzdCBydW5zLCBhbmQgYW5vdGhlciBmb3JtYXR0aW5nIHBhc3Mgd2lsbCBmaXggdGhpbmdzIGFueXdheS4pCiAgICAgICAgIyBUaGlzIHJvdXRpbmUgaGFzIGEgbG9uZyBoaXN0b3J5IG9mIGltcHJvdmVtZW50cy4gU29tZSBwYXN0CiAgICAgICAgIyByZWxldmFudCBpc3N1ZXMgYXJlIDogYzExOCwgYzE2NywgYzE3MSwgYzE4NiwgYzE4NywgYzE5MywgYzIwMC4KICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIHJldHVybiBpZiAoICRoaWdoX3N0cmVzc19sZXZlbCA8PSAyICk7CgogICAgICAgIG15ICRubWF4X3N0YXJ0ID0gQHskcmlfZW5kfSAtIDE7CiAgICAgICAgcmV0dXJuIGlmICggJG5tYXhfc3RhcnQgPD0gMCApOwoKICAgICAgICBteSAkaWVuZF9tYXggPSAkcmlfZW5kLT5bJG5tYXhfc3RhcnRdOwogICAgICAgIGlmICggJHR5cGVzX3RvX2dvWyRpZW5kX21heF0gZXEgJyMnICkgewogICAgICAgICAgICAkaWVuZF9tYXggPSBpcHJldl90b19nbygkaWVuZF9tYXgpOwogICAgICAgIH0KICAgICAgICBteSAkaGFzX3Rlcm1pbmFsX3NlbWljb2xvbiA9CiAgICAgICAgICAkaWVuZF9tYXggPj0gMCAmJiAkdHlwZXNfdG9fZ29bJGllbmRfbWF4XSBlcSAnOyc7CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgQnJlYWsgaW50byB0aGUgc21hbGxlc3QgcG9zc2libGUgc3ViLXNlY3Rpb25zIHRvIGltcHJvdmUgZWZmaWNpZW5jeQogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAjIEFsc28gbWFrZSBhIGxpc3Qgb2YgYWxsIGdvb2Qgam9pbmluZyB0b2tlbnMgYmV0d2VlbiB0aGUgbGluZXMKICAgICAgICAjIG4tMSBhbmQgbi4KICAgICAgICBteSBAam9pbnQ7CgogICAgICAgIG15ICRyc2VjdGlvbnMgPSBbXTsKICAgICAgICBteSAkbmJlZ19zZWMgID0gMDsKICAgICAgICBteSAkbmVuZF9zZWM7CiAgICAgICAgbXkgJG5tYXhfc2VjdGlvbiA9IDA7CiAgICAgICAgZm9yZWFjaCBteSAkbm4gKCAxIC4uICRubWF4X3N0YXJ0ICkgewogICAgICAgICAgICBteSAkaWJlZ18xID0gJHJpX2JlZy0+WyAkbm4gLSAxIF07CiAgICAgICAgICAgIG15ICRpZW5kXzEgPSAkcmlfZW5kLT5bICRubiAtIDEgXTsKICAgICAgICAgICAgbXkgJGllbmRfMiA9ICRyaV9lbmQtPlskbm5dOwogICAgICAgICAgICBteSAkaWJlZ18yID0gJHJpX2JlZy0+WyRubl07CgogICAgICAgICAgICAjIERlZmluZSBjZXJ0YWluIGdvb2Qgam9pbnQgdG9rZW5zCiAgICAgICAgICAgIG15ICRpdG9rOwogICAgICAgICAgICBmb3JlYWNoIG15ICRpdGVzdCAoICRpZW5kXzEsICRpYmVnXzIgKSB7CiAgICAgICAgICAgICAgICBteSAkdHlwZSA9ICR0eXBlc190b19nb1skaXRlc3RdOwogICAgICAgICAgICAgICAgaWYgKCAgICRpc19tYXRoX29weyR0eXBlfQogICAgICAgICAgICAgICAgICAgIHx8ICRpc19hbXBfYW1weyR0eXBlfQogICAgICAgICAgICAgICAgICAgIHx8ICRpc19hc3NpZ25tZW50eyR0eXBlfQogICAgICAgICAgICAgICAgICAgIHx8ICR0eXBlIGVxICc6JyApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJGl0b2sgPSAkaXRlc3Q7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgam9pbnRbJG5uXSA9IGluZGV4IG9mIGpvaW50IGNoYXJhY3RlcgogICAgICAgICAgICAkam9pbnRbJG5uXSA9ICRpdG9rOwoKICAgICAgICAgICAgIyBVcGRhdGUgdGhlIHNlY3Rpb24gbGlzdAogICAgICAgICAgICBteSAkZXhjZXNzID0gJHNlbGYtPmV4Y2Vzc19saW5lX2xlbmd0aCggJGliZWdfMSwgJGllbmRfMiwgMSApOwogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkZXhjZXNzIDw9IDEKCiAgICAgICAgICAgICAgICAjIFRoZSBudW1iZXIgNSBoZXJlIGlzIGFuIGFyYml0cmFyeSBzbWFsbCBudW1iZXIgaW50ZW5kZWQKICAgICAgICAgICAgICAgICMgdG8ga2VlcCBtb3N0IHNtYWxsIG1hdGNoZXMgaW4gb25lIHN1Yi1zZWN0aW9uLgogICAgICAgICAgICAgICAgfHwgKCBkZWZpbmVkKCRuZW5kX3NlYykKICAgICAgICAgICAgICAgICAgICAmJiAoICRubiA8IDUgfHwgJG5tYXhfc3RhcnQgLSAkbm4gPCA1ICkgKQogICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJG5lbmRfc2VjID0gJG5uOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRuZW5kX3NlYykgKSB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAeyRyc2VjdGlvbnN9LCBbICRuYmVnX3NlYywgJG5lbmRfc2VjIF07CiAgICAgICAgICAgICAgICAgICAgbXkgJG51bSA9ICRuZW5kX3NlYyAtICRuYmVnX3NlYzsKICAgICAgICAgICAgICAgICAgICBpZiAoICRudW0gPiAkbm1heF9zZWN0aW9uICkgeyAkbm1heF9zZWN0aW9uID0gJG51bSB9CiAgICAgICAgICAgICAgICAgICAgJG5iZWdfc2VjID0gJG5uOwogICAgICAgICAgICAgICAgICAgICRuZW5kX3NlYyA9IHVuZGVmOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJG5iZWdfc2VjID0gJG5uOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIGRlZmluZWQoJG5lbmRfc2VjKSApIHsKICAgICAgICAgICAgcHVzaCBAeyRyc2VjdGlvbnN9LCBbICRuYmVnX3NlYywgJG5lbmRfc2VjIF07CiAgICAgICAgICAgIG15ICRudW0gPSAkbmVuZF9zZWMgLSAkbmJlZ19zZWM7CiAgICAgICAgICAgIGlmICggJG51bSA+ICRubWF4X3NlY3Rpb24gKSB7ICRubWF4X3NlY3Rpb24gPSAkbnVtIH0KICAgICAgICB9CgogICAgICAgIG15ICRudW1fc2VjdGlvbnMgPSBAeyRyc2VjdGlvbnN9OwoKICAgICAgICBpZiAoIERFQlVHX1JFQ09NQklORSA+IDEgKSB7CiAgICAgICAgICAgIHByaW50IHsqU1RET1VUfSA8PEVPTTsKc2VjdGlvbnM9JG51bV9zZWN0aW9uczsgbm1heF9zZWM9JG5tYXhfc2VjdGlvbgpFT00KICAgICAgICB9CgogICAgICAgIGlmICggREVCVUdfUkVDT01CSU5FID4gMCApIHsKICAgICAgICAgICAgbXkgJG1heCA9IDA7CiAgICAgICAgICAgIHByaW50IHsqU1RET1VUfQogICAgICAgICAgICAgICItLS0tLVxuJG51bV9zZWN0aW9ucyBzZWN0aW9ucyBmb3VuZCBmb3Igbm1heD0kbm1heF9zdGFydFxuIjsKICAgICAgICAgICAgZm9yZWFjaCBteSAkc2VjdCAoIEB7JHJzZWN0aW9uc30gKSB7CiAgICAgICAgICAgICAgICBteSAoICRuYmVnLCAkbmVuZCApID0gQHskc2VjdH07CiAgICAgICAgICAgICAgICBteSAkbnVtID0gJG5lbmQgLSAkbmJlZzsKICAgICAgICAgICAgICAgIGlmICggJG51bSA+ICRtYXggKSB7ICRtYXggPSAkbnVtIH0KICAgICAgICAgICAgICAgIHByaW50IHsqU1RET1VUfSAiJG5iZWcgJG5lbmRcbiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcHJpbnQgeypTVERPVVR9ICJtYXggc2l6ZT0kbWF4IG9mICRubWF4X3N0YXJ0IGxpbmVzXG4iOwogICAgICAgIH0KCiAgICAgICAgIyBMb29wIG92ZXIgYWxsIHN1Yi1zZWN0aW9ucy4gIE5vdGUgdGhhdCB3ZSBoYXZlIHRvIHdvcmsgYmFja3dhcmRzCiAgICAgICAgIyBmcm9tIHRoZSBlbmQgb2YgdGhlIGJhdGNoIHNpbmNlIHRoZSBzZWN0aW9ucyB1c2Ugb3JpZ2luYWwgbGluZQogICAgICAgICMgbnVtYmVycywgYW5kIHRoZSBsaW5lIG51bWJlcnMgY2hhbmdlIGFzIHdlIGdvLgogICAgICAgIGZvcmVhY2ggbXkgJHNlY3Rpb24gKCByZXZlcnNlIEB7JHJzZWN0aW9uc30gKSB7CiAgICAgICAgICAgIG15ICggJG5iZWcsICRuZW5kICkgPSBAeyRzZWN0aW9ufTsKICAgICAgICAgICAgJHNlbGYtPnJlY29tYmluZV9zZWN0aW9uX2xvb3AoCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgX3JpX2JlZyAgICAgICAgICAgICAgICAgPT4gJHJpX2JlZywKICAgICAgICAgICAgICAgICAgICBfcmlfZW5kICAgICAgICAgICAgICAgICA9PiAkcmlfZW5kLAogICAgICAgICAgICAgICAgICAgIF9uYmVnICAgICAgICAgICAgICAgICAgID0+ICRuYmVnLAogICAgICAgICAgICAgICAgICAgIF9uZW5kICAgICAgICAgICAgICAgICAgID0+ICRuZW5kLAogICAgICAgICAgICAgICAgICAgIF9yam9pbnQgICAgICAgICAgICAgICAgID0+IFxAam9pbnQsCiAgICAgICAgICAgICAgICAgICAgX3Jib25kX3N0cmVuZ3RoX3RvX2dvICAgPT4gJHJib25kX3N0cmVuZ3RoX3RvX2dvLAogICAgICAgICAgICAgICAgICAgIF9oYXNfdGVybWluYWxfc2VtaWNvbG9uID0+ICRoYXNfdGVybWluYWxfc2VtaWNvbG9uLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApOwogICAgICAgIH0gIyMgZW5kIHdoaWxlICggbXkgJHNlY3Rpb24gPSBwb3AuLi4pCgogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiByZWNvbWJpbmVfYnJlYWtwb2ludHMKCiAgICBzdWIgcmVjb21iaW5lX3NlY3Rpb25fbG9vcCB7CiAgICAgICAgbXkgKCAkc2VsZiwgJHJoYXNoICkgPSBAXzsKCiAgICAgICAgIyBSZWNvbWJpbmUgYnJlYWtwb2ludHMgZm9yIG9uZSBzZWN0aW9uIG9mIGxpbmVzIGluIHRoZSBjdXJyZW50IGJhdGNoCgogICAgICAgICMgR2l2ZW46CiAgICAgICAgIyAgICRyaV9iZWcsICRyaV9lbmQgPSByZWYgdG8gYXJyYXlzIHdpdGggdG9rZW4gaW5kZXhlcyBvZiB0aGUgZmlyc3QKICAgICAgICAjICAgICBhbmQgbGFzdCBsaW5lCiAgICAgICAgIyAgICRuYmVnLCAkbmVuZCAgPSBsaW5lIG51bWJlcnMgYm91bmRpbmcgdGhpcyBzZWN0aW9uCiAgICAgICAgIyAgICRyam9pbnQgICAgICAgPSByZWYgdG8gYXJyYXkgb2YgZ29vZCBqb2luaW5nIHRva2VucyBwZXIgbGluZQoKICAgICAgICAjIFVwZGF0ZTogJHJpX2JlZywgJHJpX2VuZCwgJHJqb2ludCBpZiBsaW5lcyBhcmUgam9pbmVkCgogICAgICAgICMgUmV0dXJuczoKICAgICAgICAjICAgbm90aGluZwoKICAgICAgICAjLS0tLS0tLS0tLS0tLQogICAgICAgICMgRGVmaW5pdGlvbnM6CiAgICAgICAgIy0tLS0tLS0tLS0tLS0KICAgICAgICAjICRyaGFzaCA9IHsKCiAgICAgICAgIyAgIF9yaV9iZWcgID0gcmVmIHRvIGFycmF5IHdpdGggc3RhcnRpbmcgdG9rZW4gaW5kZXggYnkgbGluZQogICAgICAgICMgICBfcmlfZW5kICA9IHJlZiB0byBhcnJheSB3aXRoIGVuZGluZyB0b2tlbiBpbmRleCBieSBsaW5lCiAgICAgICAgIyAgIF9uYmVnICAgID0gZmlyc3QgbGluZSBudW1iZXIgb2YgdGhpcyBzZWN0aW9uCiAgICAgICAgIyAgIF9uZW5kICAgID0gbGFzdCBsaW5lIG51bWJlciBvZiB0aGlzIHNlY3Rpb24KICAgICAgICAjICAgX3Jqb2ludCAgPSByZWYgdG8gYXJyYXkgb2YgZ29vZCBqb2luaW5nIHRva2VucyBmb3IgZWFjaCBsaW5lCiAgICAgICAgIyAgIF9yYm9uZF9zdHJlbmd0aF90b19nbyAgID0gYXJyYXkgb2YgYm9uZCBzdHJlbmd0aHMKICAgICAgICAjICAgX2hhc190ZXJtaW5hbF9zZW1pY29sb24gPSB0cnVlIGlmIGxhc3QgbGluZSBvZiBiYXRjaCBoYXMgJzsnCgogICAgICAgICMgICBfbnVtX2ZyZWV6ZSAgICAgID0gZml4ZWQgbnVtYmVyIG9mIGxpbmVzIGF0IGVuZCBvZiB0aGlzIGJhdGNoCiAgICAgICAgIyAgIF9vcHRpbWl6YXRpb25fb24gPSB0cnVlIGR1cmluZyBmaW5hbCBvcHRpbWl6YXRpb24gbG9vcAogICAgICAgICMgICBfbnVtX2NvbXBhcmVzICAgID0gdG90YWwgbnVtYmVyIG9mIGxpbmUgY29tcGFyZXMgbWFkZSBzbyBmYXIKICAgICAgICAjICAgX3BhaXJfbGlzdCAgICAgICA9IGxpc3Qgb2YgbGluZSBwYWlycyBpbiBvcHRpbWFsIHNlYXJjaCBvcmRlcgoKICAgICAgICAjIH07CgogICAgICAgICMtLS0tLS0tLS0tLS0tCiAgICAgICAgIyBIb3cgaXQgd29ya3MKICAgICAgICAjLS0tLS0tLS0tLS0tLQoKICAgICAgICAjIFdlIGFyZSB3b3JraW5nIHdpdGggYSBzZXF1ZW5jZSBvZiBvdXRwdXQgbGluZXMgYW5kIGxvb2tpbmcgYXQKICAgICAgICAjIGVhY2ggcGFpci4gV2UgbXVzdCBkZWNpZGUgaWYgaXQgaXMgYmV0dGVyIHRvIGpvaW4gZWFjaCBvZgogICAgICAgICMgdGhlc2UgbGluZSBwYWlycy4KCiAgICAgICAgIyBUaGUgYnJ1dGUgZm9yY2UgbWV0aG9kIGlzIHRvIGxvb3AgdGhyb3VnaCBhbGwgbGluZSBwYWlycyBhbmQKICAgICAgICAjIGpvaW4gdGhlIGJlc3QgcG9zc2libGUgcGFpciwgYXMgZGV0ZXJtaW5lZCBieSBlaXRoZXIgc29tZQogICAgICAgICMgbG9naWNhbCBjcml0ZXJpb24gb3IgYnkgdGhlIG1heGltdW0gJ2JvbmQgc3RyZW5ndGgnIGFzc2lnbmVkCiAgICAgICAgIyB0byB0aGUgam9pbmluZyB0b2tlbi4gIFRoZW4ga2VlcCBkb2luZyB0aGlzIHVudGlsIHRoZXJlIGFyZQogICAgICAgICMgbm8gcmVtYWluaW5nIGxpbmUgcGFpcnMgdG8gam9pbi4KCiAgICAgICAgIyBUaGlzIHdvcmtzLCBidXQgYSBwcm9ibGVtIGlzIHRoYXQgaXQgY2FuIHRoZW9yZXRpY2FsbHkgdGFrZQogICAgICAgICMgb24gdGhlIG9yZGVyIG9mIE5eMiBjb21wYXJpc29ucyBpbiBzb21lIHBhdGhvbG9naWNhbCBjYXNlcy4KICAgICAgICAjIFRoaXMgY2FuIHJlcXVpcmUgYW4gZXhjZXNzaXZlIGFtb3VudCBvZiBydW4gdGltZS4KCiAgICAgICAgIyBXZSBjYW4gYXZvaWQgZXhjZXNzaXZlIHJ1biB0aW1lIGJ5IGNvbmNlcHR1YWxseSBkaXZpZGluZyB0aGUKICAgICAgICAjIHdvcmsgaW50byB0d28gcGhhc2VzLiBJbiB0aGUgZmlyc3QgcGhhc2Ugd2UgbWFrZSBhbnkgam9pbnRzCiAgICAgICAgIyByZXF1aXJlZCBieSB1c2VyIHNldHRpbmdzIG9yIGxvZ2ljIG90aGVyIHRoYW4gdGhlIHN0cmVuZ3RoIG9mCiAgICAgICAgIyBqb2ludHMuICBJbiB0aGUgc2Vjb25kIHBoYXNlIHdlIG1ha2UgYW55IHJlbWFpbmluZyBqb2ludHMKICAgICAgICAjIGJhc2VkIG9uIHN0cmVuZ3Rocy4gIFRvIGRvIHRoaXMgb3B0aW1hbGx5LCB3ZSBkbyBhIHByZWxpbWluYXJ5CiAgICAgICAgIyBzb3J0IG9uIGpvaW50IHN0cmVuZ3RocyBhbmQgYWx3YXlzIGxvb3AgaW4gdGhhdCBvcmRlci4gIFRoYXQKICAgICAgICAjIHdheSwgd2UgY2FuIHN0b3AgYSBzZWFyY2ggb24gdGhlIGZpcnN0IGpvaW50IHN0cmVuZ3RoIGJlY2F1c2UKICAgICAgICAjIGl0IHdpbGwgYmUgdGhlIG1heGltdW0uCgogICAgICAgICMgVGhpcyBtZXRob2QgaXMgdmVyeSBmYXN0LCByZXF1aXJpbmcgbm8gbW9yZSB0aGFuIDMqTiBsaW5lCiAgICAgICAgIyBjb21wYXJpc29ucywgd2hlcmUgTiBpcyB0aGUgbnVtYmVyIG9mIGxpbmVzIChzZWUgYmVsb3cpLgoKICAgICAgICBteSAkcmlfYmVnID0gJHJoYXNoLT57X3JpX2JlZ307CiAgICAgICAgbXkgJHJpX2VuZCA9ICRyaGFzaC0+e19yaV9lbmR9OwoKICAgICAgICAjIExpbmUgaW5kZXggcmFuZ2Ugb2YgdGhpcyBzZWN0aW9uOgogICAgICAgIG15ICRuYmVnID0gJHJoYXNoLT57X25iZWd9OyAgICAjIHN0YXlzIGNvbnN0YW50CiAgICAgICAgbXkgJG5lbmQgPSAkcmhhc2gtPntfbmVuZH07ICAgICMgd2lsbCBkZWNyZWFzZQoKICAgICAgICAjICRubWF4X2JhdGNoID0gc3RhcnRpbmcgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBmdWxsIGJhdGNoCiAgICAgICAgIyAkbnVtX2ZyZWV6ZSA9IG51bWJlciBvZiBsaW5lcyBmb2xsb3dpbmcgdGhpcyBzZWN0aW9uIHRvIGxlYXZlIGFsb25lCiAgICAgICAgbXkgJG5tYXhfYmF0Y2ggPSBAeyRyaV9lbmR9IC0gMTsKICAgICAgICAkcmhhc2gtPntfbnVtX2ZyZWV6ZX0gPSAkbm1heF9iYXRjaCAtICRuZW5kOwoKICAgICAgICAjIFNldHVwIHRoZSBsaXN0IG9mIGxpbmUgcGFpcnMgdG8gdGVzdC4gIFRoaXMgc3RvcmVzIHRoZSBmb2xsb3dpbmcKICAgICAgICAjIHZhbHVlcyBmb3IgZWFjaCBsaW5lIHBhaXI6CiAgICAgICAgIyAgIFsgJG49aW5kZXggb2YgdGhlIHNlY29uZCBsaW5lIG9mIHRoZSBwYWlyLCAkYnM9Ym9uZCBzdHJlbmd0aF0KICAgICAgICBteSBAcGFpcl9saXN0OwogICAgICAgIG15ICRyYm9uZF9zdHJlbmd0aF90b19nbyA9ICRyaGFzaC0+e19yYm9uZF9zdHJlbmd0aF90b19nb307CiAgICAgICAgZm9yZWFjaCBteSAkbiAoICRuYmVnICsgMSAuLiAkbmVuZCApIHsKICAgICAgICAgICAgbXkgJGllbmRfMSAgID0gJHJpX2VuZC0+WyAkbiAtIDEgXTsKICAgICAgICAgICAgbXkgJGliZWdfMiAgID0gJHJpX2JlZy0+WyRuXTsKICAgICAgICAgICAgbXkgJGJzX3R3ZWFrID0gMDsKICAgICAgICAgICAgaWYgKCAkaXNfYW1wX2FtcHsgJHR5cGVzX3RvX2dvWyRpYmVnXzJdIH0gKSB7ICRic190d2VhayA9IDAuMjUgfQogICAgICAgICAgICBteSAkYnMgPSAkcmJvbmRfc3RyZW5ndGhfdG9fZ28tPlskaWVuZF8xXSArICRic190d2VhazsKICAgICAgICAgICAgcHVzaCBAcGFpcl9saXN0LCBbICRuLCAkYnMgXTsKICAgICAgICB9CgogICAgICAgICMgQW55IG9yZGVyIGZvciB0ZXN0aW5nIGlzIHBvc3NpYmxlLCBidXQgb3B0aW1pemF0aW9uIGlzIG9ubHkgcG9zc2libGUKICAgICAgICAjIGlmIHdlIHNvcnQgdGhlIGxpbmUgcGFpcnMgb24gZGVjcmVhc2luZyBqb2ludCBzdHJlbmd0aC4KICAgICAgICBAcGFpcl9saXN0ID0KICAgICAgICAgIHNvcnQgeyAkYi0+WzFdIDw9PiAkYS0+WzFdIHx8ICRhLT5bMF0gPD0+ICRiLT5bMF0gfSBAcGFpcl9saXN0OwogICAgICAgICRyaGFzaC0+e19ycGFpcl9saXN0fSA9IFxAcGFpcl9saXN0OwoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgSXRlcmF0aW9uIGxpbWl0CiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgIyBUaGlzIGlzIG5vdyBhIHZlcnkgZmFzdCBsb29wIHdoaWNoIHJ1bnMgaW4gTyhuKSB0aW1lLCBidXQgYQogICAgICAgICMgY2hlY2sgb24gdG90YWwgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgaXMgcmV0YWluZWQgdG8gZ3VhcmQKICAgICAgICAjIGFnYWluc3QgZnV0dXJlIHByb2dyYW1taW5nIGVycm9ycy4KCiAgICAgICAgIyBNb3N0IGNhc2VzIHJlcXVpcmUgcm91Z2hseSAxIGNvbXBhcmlzb24gcGVyIGxpbmUgcGFpciAoMSBmdWxsIHBhc3MpLgogICAgICAgICMgVGhlIHVwcGVyIGJvdW5kIGlzIGVzdGltYXRlZCB0byBiZSBhYm91dCAzIGNvbXBhcmlzb25zIHBlciBsaW5lIHBhaXIKICAgICAgICAjIHVubGVzcyBvcHRpbWl6YXRpb24gaXMgZGVhY3RpdmF0ZWQuICBUaGUgYXBwcm94aW1hdGUgYnJlYWtkb3duIGlzOgogICAgICAgICMgICAxIHBhc3Mgd2l0aCAxIGNvbXBhcmUgcGVyIGpvaW50IHRvIGRvIGFueSBzcGVjaWFsIGNhc2VzLCBwbHVzCiAgICAgICAgIyAgIDEgcGFzcyB3aXRoIHVwIHRvIDIgY29tcGFyZXMgcGVyIGpvaW50IGluIG9wdGltaXphdGlvbiBtb2RlCiAgICAgICAgIyBUaGUgbW9zdCBleHRyZW1lIGNhc2VzIGluIG15IGNvbGxlY3Rpb24gYXJlOgogICAgICAgICMgICAgY2FtZWwxLnQgIC0gbmVlZHMgMi43IGNvbXBhcmVzIHBlciBsaW5lICgxMiB3aXRob3V0IG9wdGltaXphdGlvbikKICAgICAgICAjICAgIHRlcm5hcnkudCAtIG5lZWRzIDIuOCBjb21wYXJlcyBwZXIgbGluZSAoMTIgd2l0aG91dCBvcHRpbWl6YXRpb24pCiAgICAgICAgIyAgICBjMjA2ICAgICAgLSBuZWVkcyAzLjMgY29tcGFyZXMgcGVyIGxpbmUsIGZvdW5kIHdpdGggcmFuZG9tIHRlc3RpbmcKICAgICAgICAjIFNvIGEgdmFsdWUgb2YgTUFYX0NPTVBBUkVfUkFUSU8gPSA0IGxvb2tzIGxpa2UgYW4gdXBwZXIgYm91bmQgYXMKICAgICAgICAjIGxvbmcgYXMgb3B0aW1pemF0aW9uIGlzIHVzZWQuICBBIHZhbHVlIG9mIDIwIHNob3VsZCBhbGxvdyBhbGwgY29kZSB0bwogICAgICAgICMgcGFzcyBldmVuIGlmIG9wdGltaXphdGlvbiBpcyB0dXJuZWQgb2ZmIGZvciB0ZXN0aW5nLgogICAgICAgIHVzZSBjb25zdGFudCBNQVhfQ09NUEFSRV9SQVRJTyA9PiBERVZFTF9NT0RFID8gNCA6IDIwOwoKICAgICAgICBteSAkbnVtX3BhaXJzICAgID0gJG5lbmQgLSAkbmJlZyArIDE7CiAgICAgICAgbXkgJG1heF9jb21wYXJlcyA9IE1BWF9DT01QQVJFX1JBVElPICogJG51bV9wYWlyczsKCiAgICAgICAgIyBBbHdheXMgc3RhcnQgd2l0aCBvcHRpbWl6YXRpb24gb2ZmCiAgICAgICAgJHJoYXNoLT57X251bV9jb21wYXJlc30gICAgPSAwOwogICAgICAgICRyaGFzaC0+e19vcHRpbWl6YXRpb25fb259ID0gMDsKICAgICAgICAkcmhhc2gtPntfaXhfYmVzdF9sYXN0fSAgICA9IDA7CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgbG9vcCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSByZWNvbWJpbmF0aW9ucwogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIG15ICRubWF4X2xhc3QgPSAkbm1heF9iYXRjaCArIDE7CiAgICAgICAgd2hpbGUgKDEpIHsKCiAgICAgICAgICAgICMgU3RvcCB3aGVuIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIGJhdGNoIGRvZXMgbm90IGRlY3JlYXNlCiAgICAgICAgICAgICRubWF4X2JhdGNoID0gQHskcmlfZW5kfSAtIDE7CiAgICAgICAgICAgIGlmICggJG5tYXhfYmF0Y2ggPj0gJG5tYXhfbGFzdCApIHsKICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJG5tYXhfbGFzdCA9ICRubWF4X2JhdGNoOwoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgaW5uZXIgbG9vcCB0byBmaW5kIG5leHQgYmVzdCBjb21iaW5hdGlvbgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgJHNlbGYtPnJlY29tYmluZV9pbm5lcl9sb29wKCRyaGFzaCk7CgogICAgICAgICAgICAjIEl0ZXJhdGlvbiBsaW1pdCBjaGVjazoKICAgICAgICAgICAgaWYgKCAkcmhhc2gtPntfbnVtX2NvbXBhcmVzfSA+ICRtYXhfY29tcGFyZXMgKSB7CgogICAgICAgICAgICAgICAgIyBTZWUgbm90ZSBhYm92ZTsgc2hvdWxkIG9ubHkgZ2V0IGhlcmUgb24gYSBwcm9ncmFtbWluZyBlcnJvcgogICAgICAgICAgICAgICAgaWYgKERFVkVMX01PREUpIHsKICAgICAgICAgICAgICAgICAgICBteSAkaWJlZyA9ICRyaV9iZWctPlskbmJlZ107CiAgICAgICAgICAgICAgICAgICAgbXkgJEtiZWcgPSAkS190b19nb1skaWJlZ107CiAgICAgICAgICAgICAgICAgICAgbXkgJGxubyAgPSAkc2VsZi0+W19yTExfXS0+WyRLYmVnXS0+W19MSU5FX0lOREVYX107CiAgICAgICAgICAgICAgICAgICAgRmF1bHQoPDxFT00pOwppbm5lciBsb29wIHBhc3NlcyA9JHJoYXNoLT57X251bV9jb21wYXJlc30gZXhjZWVkcyBtYXg9JG1heF9jb21wYXJlcywgbmVhciBsaW5lICRsbm8KRU9NCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICB9CgogICAgICAgIH0gIyMgZW5kIHdoaWxlICgxKQoKICAgICAgICBpZiAoREVCVUdfUkVDT01CSU5FKSB7CiAgICAgICAgICAgIG15ICRyYXRpbyA9IHNwcmludGYgIiUwLjNmIiwgJHJoYXNoLT57X251bV9jb21wYXJlc30gLyAkbnVtX3BhaXJzOwogICAgICAgICAgICBwcmludCB7KlNURE9VVH0KImV4aXRpbmcgcmVjb21iaW5lX2lubmVyX2xvb3Agd2l0aCAkbm1heF9sYXN0IGxpbmVzLCBvcHQ9JHJoYXNoLT57X29wdGltaXphdGlvbl9vbn0sIHN0YXJ0aW5nIHBhaXJzPSRudW1fcGFpcnMsIG51bV9jb21wYXJlcz0kcmhhc2gtPntfbnVtX2NvbXBhcmVzfSwgcmF0aW89JHJhdGlvXG4iOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIHJlY29tYmluZV9zZWN0aW9uX2xvb3AKCiAgICBzdWIgcmVjb21iaW5lX2lubmVyX2xvb3AgewogICAgICAgIG15ICggJHNlbGYsICRyaGFzaCApID0gQF87CgogICAgICAgICMgVGhpcyBpcyB0aGUgaW5uZXIgbG9vcCBvZiB0aGUgcmVjb21iaW5lIG9wZXJhdGlvbi4gV2UgYXJlIHdvcmtpbmcgb24KICAgICAgICAjIGEgc2VxdWVuY2Ugb2YgbXVsdGlwbGUgbGluZXMuIFdlIGxvb2sgYXQgZWFjaCBwYWlyIG9mIGxpbmVzIGFuZAogICAgICAgICMgZGVjaWRlIGlmIGZvcm1hdHRpbmcgd291bGQgYmUgaW1wcm92ZWQgaWYgdGhlIHBhaXIgd2VyZSBqb2luZWQKICAgICAgICAjIGludG8gYSBzaW5nbGUgbGluZS4gSWYgdGhlcmUgYXJlIG11bHRpcGxlIG9mIHN1Y2ggcG9zc2libGUKICAgICAgICAjIHJlY29tYmluYXRpb25zLCB3ZSBzZWxlY3QgdGhlIGJlc3QuICBJZiBhIHJlY29tYmluYXRpb24gaXMgbWFkZSwKICAgICAgICAjIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhpcyBncm91cCBvZiBsaW5lcyB3aWxsIGJlIHJlZHVjZWQgYnkgb25lLgogICAgICAgICMgU2VlIGNvbW1lbnRzIGluIHRoZSBjYWxsaW5nIHJvdXRpbmUgZm9yIGZ1cnRoZXIgZXhwbGFuYXRpb24uCgogICAgICAgICMgSW5wdXQ6CiAgICAgICAgIyAgICAkcmhhc2ggaGFzIHBhcmFtZXRlcnMgY29udHJvbGxpbmcgdGhpcyByZWNvbWJpbmUgb3BlcmF0aW9uCiAgICAgICAgIyBSZXR1cm5zOiBub3RoaW5nCgogICAgICAgIG15ICRyS193ZWxkX3JpZ2h0ID0gJHNlbGYtPltfcktfd2VsZF9yaWdodF9dOwogICAgICAgIG15ICRyS193ZWxkX2xlZnQgID0gJHNlbGYtPltfcktfd2VsZF9sZWZ0X107CgogICAgICAgIG15ICRyaV9iZWcgICAgICAgICAgICAgICA9ICRyaGFzaC0+e19yaV9iZWd9OwogICAgICAgIG15ICRyaV9lbmQgICAgICAgICAgICAgICA9ICRyaGFzaC0+e19yaV9lbmR9OwogICAgICAgIG15ICRuYmVnICAgICAgICAgICAgICAgICA9ICRyaGFzaC0+e19uYmVnfTsKICAgICAgICBteSAkcmpvaW50ICAgICAgICAgICAgICAgPSAkcmhhc2gtPntfcmpvaW50fTsKICAgICAgICBteSAkcmJvbmRfc3RyZW5ndGhfdG9fZ28gPSAkcmhhc2gtPntfcmJvbmRfc3RyZW5ndGhfdG9fZ299OwogICAgICAgIG15ICRycGFpcl9saXN0ICAgICAgICAgICA9ICRyaGFzaC0+e19ycGFpcl9saXN0fTsKCiAgICAgICAgIyBUaGlzIHdpbGwgcmVtZW1iZXIgdGhlIGJlc3Qgam9pbnQ6CiAgICAgICAgbXkgJG5fYmVzdCAgPSAwOwogICAgICAgIG15ICRic19iZXN0ID0gMC47CiAgICAgICAgbXkgJGl4X2Jlc3QgPSAwOwogICAgICAgIG15ICRudW1fYnMgID0gMDsKCiAgICAgICAgIyBUaGUgaW5kZXggcmFuZ2Ugb2YgbGluZXMgaW4gdGhpcyBncm91cCBpcyAkbmJlZyB0byAkbnN0b3AKICAgICAgICBteSAkbm1heCAgICAgICA9IEB7JHJpX2VuZH0gLSAxOwogICAgICAgIG15ICRuc3RvcCAgICAgID0gJG5tYXggLSAkcmhhc2gtPntfbnVtX2ZyZWV6ZX07CiAgICAgICAgbXkgJG51bV9qb2ludHMgPSAkbnN0b3AgLSAkbmJlZzsKCiAgICAgICAgIyBUdXJuIG9mZiBvcHRpbWl6YXRpb24gaWYganVzdCB0d28gam9pbnRzIHJlbWFpbiB0byBhbGxvdwogICAgICAgICMgc3BlY2lhbCB0d28tbGluZSBsb2dpYyB0byBiZSBjaGVja2VkIChjMTkzKQogICAgICAgIGlmICggJHJoYXNoLT57X29wdGltaXphdGlvbl9vbn0gJiYgJG51bV9qb2ludHMgPD0gMiApIHsKICAgICAgICAgICAgJHJoYXNoLT57X29wdGltaXphdGlvbl9vbn0gPSAwOwogICAgICAgIH0KCiAgICAgICAgIyBTdGFydCB3aGVyZSB3ZSBlbmRlZCB0aGUgbGFzdCBzZWFyY2gKICAgICAgICBteSAkaXhfc3RhcnQgPSAkcmhhc2gtPntfaXhfYmVzdF9sYXN0fTsKCiAgICAgICAgIyBLZWVwIHRoZSBzdGFydGluZyBpbmRleCBpbiBib3VuZHMKICAgICAgICAkaXhfc3RhcnQgPSBtYXgoIDAsICRpeF9zdGFydCApOwoKICAgICAgICAjIE1ha2UgYSBzZWFyY2ggb3JkZXIgbGlzdCB3aGljaCBjeWNsZXMgYXJvdW5kIHRvIHZpc2l0CiAgICAgICAgIyBhbGwgbGluZSBwYWlycy4KICAgICAgICBteSAkaXhfbWF4ICA9IEB7JHJwYWlyX2xpc3R9IC0gMTsKICAgICAgICBteSBAaXhfbGlzdCA9ICggJGl4X3N0YXJ0IC4uICRpeF9tYXgsIDAgLi4gJGl4X3N0YXJ0IC0gMSApOwogICAgICAgIG15ICRpeF9sYXN0ID0gJGl4X2xpc3RbLTFdOwoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgbG9vcCBvdmVyIGFsbCBsaW5lIHBhaXJzCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBteSAkaW5jb21wbGV0ZV9sb29wOwogICAgICAgIGZvcmVhY2ggbXkgJGl4IChAaXhfbGlzdCkgewogICAgICAgICAgICBteSAkaXRlbSA9ICRycGFpcl9saXN0LT5bJGl4XTsKICAgICAgICAgICAgbXkgKCAkbiwgJGJzICkgPSBAeyRpdGVtfTsKCiAgICAgICAgICAgICMgVGhpcyBmbGFnIHdpbGwgYmUgdHJ1ZSBpZiB3ZSAnbGFzdCcgb3V0IG9mIHRoaXMgbG9vcCBlYXJseS4KICAgICAgICAgICAgIyBXZSBjYW5ub3QgdHVybiBvbiBvcHRpbWl6YXRpb24gaWYgdGhpcyBpcyB0cnVlLgogICAgICAgICAgICAkaW5jb21wbGV0ZV9sb29wID0gJGl4ICE9ICRpeF9sYXN0OwoKICAgICAgICAgICAgIyBVcGRhdGUgdGhlIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgdGltZXMgdGhyb3VnaCB0aGlzIGlubmVyIGxvb3AKICAgICAgICAgICAgJHJoYXNoLT57X251bV9jb21wYXJlc30rKzsKCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgSWYgd2Ugam9pbiB0aGUgY3VycmVudCBwYWlyIG9mIGxpbmVzLAogICAgICAgICAgICAjIGxpbmUgJG4tMSB3aWxsIGJlY29tZSB0aGUgbGVmdCBwYXJ0IG9mIHRoZSBqb2luZWQgbGluZQogICAgICAgICAgICAjIGxpbmUgJG4gd2lsbCBiZWNvbWUgdGhlIHJpZ2h0IHBhcnQgb2YgdGhlIGpvaW5lZCBsaW5lCiAgICAgICAgICAgICMKICAgICAgICAgICAgIyBIZXJlIGFyZSBJbmRleGVzIG9mIHRoZSBlbmRwb2ludCB0b2tlbnMgb2YgdGhlIHR3byBsaW5lczoKICAgICAgICAgICAgIwogICAgICAgICAgICAjICAtLS0tLWxpbmUgJG4tMS0tLSB8IC0tLS0tbGluZSAkbi0tLS0tCiAgICAgICAgICAgICMgICRpYmVnXzEgICAkaWVuZF8xIHwgJGliZWdfMiAgICRpZW5kXzIKICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgXgogICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICAgICMgV2Ugd2FudCB0byBkZWNpZGUgaWYgd2Ugc2hvdWxkIHJlbW92ZSB0aGUgbGluZSBicmVhawogICAgICAgICAgICAjIGJldHdlZW4gdGhlIHRva2VucyBhdCAkaWVuZF8xIGFuZCAkaWJlZ18yCiAgICAgICAgICAgICMKICAgICAgICAgICAgIyBXZSB3aWxsIGFwcGx5IGEgbnVtYmVyIG9mIGFkLWhvYyB0ZXN0cyB0byBzZWUgaWYgam9pbmluZwogICAgICAgICAgICAjIGhlcmUgd2lsbCBsb29rIG9rLiAgVGhlIGNvZGUgd2lsbCBqdXN0IG1vdmUgdG8gdGhlIG5leHQKICAgICAgICAgICAgIyBwYWlyIGlmIHRoZSBqb2luIGRvZXNuJ3QgbG9vayBnb29kLiAgSWYgd2UgZ2V0IHRocm91Z2gKICAgICAgICAgICAgIyB0aGUgZ2F1bnRsZXQgb2YgdGVzdHMsIHRoZSBsaW5lcyB3aWxsIGJlIHJlY29tYmluZWQuCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMKICAgICAgICAgICAgIyBiZWdpbm5pbmcgYW5kIGVuZGluZyB0b2tlbnMgb2YgdGhlIGxpbmVzIHdlIGFyZSB3b3JraW5nIG9uCiAgICAgICAgICAgIG15ICRpYmVnXzEgPSAkcmlfYmVnLT5bICRuIC0gMSBdOwogICAgICAgICAgICBteSAkaWVuZF8xID0gJHJpX2VuZC0+WyAkbiAtIDEgXTsKICAgICAgICAgICAgbXkgJGllbmRfMiA9ICRyaV9lbmQtPlskbl07CiAgICAgICAgICAgIG15ICRpYmVnXzIgPSAkcmlfYmVnLT5bJG5dOwoKICAgICAgICAgICAgIyBUaGUgY29tYmluZWQgbGluZSBjYW5ub3QgYmUgdG9vIGxvbmcKICAgICAgICAgICAgbXkgJGV4Y2VzcyA9ICRzZWxmLT5leGNlc3NfbGluZV9sZW5ndGgoICRpYmVnXzEsICRpZW5kXzIsIDEgKTsKICAgICAgICAgICAgbmV4dCBpZiAoICRleGNlc3MgPiAwICk7CgogICAgICAgICAgICBteSAkdHlwZV9pZW5kXzEgPSAkdHlwZXNfdG9fZ29bJGllbmRfMV07CiAgICAgICAgICAgIG15ICR0eXBlX2llbmRfMiA9ICR0eXBlc190b19nb1skaWVuZF8yXTsKICAgICAgICAgICAgbXkgJHR5cGVfaWJlZ18xID0gJHR5cGVzX3RvX2dvWyRpYmVnXzFdOwogICAgICAgICAgICBteSAkdHlwZV9pYmVnXzIgPSAkdHlwZXNfdG9fZ29bJGliZWdfMl07CgogICAgICAgICAgICBERUJVR19SRUNPTUJJTkUgPiAxICYmIGRvIHsKICAgICAgICAgICAgICAgIHByaW50IHsqU1RET1VUfQoiUkVDT01CSU5FOiBpeD0kaXggaWVuZDE9JGllbmRfMSBpZW5kMj0kaWVuZF8yIG49JG4gbm1heD0kbm1heCBpZj0kaWJlZ18xIHR5cGU9JHR5cGVfaWJlZ18xID0kdG9rZW5zX3RvX2dvWyRpYmVnXzFdIG5leHRfdHlwZT0kdHlwZV9pYmVnXzIgbmV4dF90b2s9JHRva2Vuc190b19nb1skaWJlZ18yXVxuIjsKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICMgSWYgbGluZSAkbiBpcyB0aGUgbGFzdCBsaW5lLCB3ZSBzZXQgc29tZSBmbGFncyBhbmQKICAgICAgICAgICAgIyBkbyBhbnkgc3BlY2lhbCBjaGVja3MgZm9yIGl0CiAgICAgICAgICAgIG15ICR0aGlzX2xpbmVfaXNfc2VtaWNvbG9uX3Rlcm1pbmF0ZWQ7CiAgICAgICAgICAgIGlmICggJG4gPT0gJG5tYXggKSB7CgogICAgICAgICAgICAgICAgaWYgKCAkdHlwZV9pYmVnXzIgZXEgJ3snICkgewoKICAgICAgICAgICAgICAgICAgICAjIGpvaW4gaXNvbGF0ZWQgJyknIGFuZCAneycgaWYgcmVxdWVzdGVkIChnaXQgIzExMCkKICAgICAgICAgICAgICAgICAgICBpZiAoICAgJHJPcHRzX2N1ZGRsZWRfcGFyZW5fYnJhY2UKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHR5cGVfaWVuZF8xIGVxICd9JwogICAgICAgICAgICAgICAgICAgICAgICAmJiAkaWVuZF8xID09ICRpYmVnXzEKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJGliZWdfMiA9PSAkaWVuZF8yICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggICAkdG9rZW5zX3RvX2dvWyRpZW5kXzFdIGVxICcpJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHRva2Vuc190b19nb1skaWJlZ18yXSBlcSAneycgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbl9iZXN0ICA9ICRuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl4X2Jlc3QgPSAkaXg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIG90aGVyd2lzZSwgYSB0ZXJtaW5hbCAneycgc2hvdWxkIHN0YXkgd2hlcmUgaXQgaXMKICAgICAgICAgICAgICAgICAgICAjIHVubGVzcyBwcmVjZWRlZCBieSBhIGZhdCBjb21tYQogICAgICAgICAgICAgICAgICAgIG5leHQgaWYgKCAkdHlwZV9pZW5kXzEgbmUgJz0+JyApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICR0aGlzX2xpbmVfaXNfc2VtaWNvbG9uX3Rlcm1pbmF0ZWQgPQogICAgICAgICAgICAgICAgICAkcmhhc2gtPntfaGFzX3Rlcm1pbmFsX3NlbWljb2xvbn07CgogICAgICAgICAgICB9CgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIFJlY29tYmluZSBTZWN0aW9uIDA6CiAgICAgICAgICAgICMgRXhhbWluZSB0aGUgc3BlY2lhbCB0b2tlbiBqb2luaW5nIHRoaXMgbGluZSBwYWlyLCBpZiBhbnkuCiAgICAgICAgICAgICMgUHV0IGFzIG1hbnkgdGVzdHMgaW4gdGhpcyBzZWN0aW9uIHRvIGF2b2lkIGR1cGxpY2F0ZSBjb2RlCiAgICAgICAgICAgICMgYW5kIHRvIG1ha2UgZm9ybWF0dGluZyBpbmRlcGVuZGVudCBvZiB3aGV0aGVyIGJyZWFrcyBhcmUKICAgICAgICAgICAgIyB0byB0aGUgbGVmdCBvciByaWdodCBvZiBhbiBvcGVyYXRvci4KICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgICAgIG15ICRpdG9rID0gJHJqb2ludC0+WyRuXTsKICAgICAgICAgICAgaWYgKCRpdG9rKSB7CiAgICAgICAgICAgICAgICBteSAkb2tfMCA9IHJlY29tYmluZV9zZWN0aW9uXzAoICRpdG9rLCAkcmlfYmVnLCAkcmlfZW5kLCAkbiApOwogICAgICAgICAgICAgICAgbmV4dCBpZiAoICEkb2tfMCApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIFJlY29tYmluZSBTZWN0aW9uIDE6CiAgICAgICAgICAgICMgSm9pbiB3ZWxkZWQgbmVzdGVkIGNvbnRhaW5lcnMgaW1tZWRpYXRlbHkKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICR0b3RhbF93ZWxkX2NvdW50CiAgICAgICAgICAgICAgICAmJiAoICR0eXBlX3NlcXVlbmNlX3RvX2dvWyRpZW5kXzFdCiAgICAgICAgICAgICAgICAgICAgJiYgZGVmaW5lZCggJHJLX3dlbGRfcmlnaHQtPnsgJEtfdG9fZ29bJGllbmRfMV0gfSApCiAgICAgICAgICAgICAgICAgICAgfHwgJHR5cGVfc2VxdWVuY2VfdG9fZ29bJGliZWdfMl0KICAgICAgICAgICAgICAgICAgICAmJiBkZWZpbmVkKCAkcktfd2VsZF9sZWZ0LT57ICRLX3RvX2dvWyRpYmVnXzJdIH0gKSApCiAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkbl9iZXN0ICA9ICRuOwogICAgICAgICAgICAgICAgJGl4X2Jlc3QgPSAkaXg7CiAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIFJlY29tYmluZSBTZWN0aW9uIDI6CiAgICAgICAgICAgICMgRXhhbWluZSB0b2tlbiBhdCAkaWVuZF8xIChyaWdodCBlbmQgb2YgZmlyc3QgbGluZSBvZiBwYWlyKQogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAgICAgbXkgKCAkb2tfMiwgJHNraXBfU2VjdGlvbl8zICkgPQogICAgICAgICAgICAgIHJlY29tYmluZV9zZWN0aW9uXzIoICRyaV9iZWcsICRyaV9lbmQsICRuLAogICAgICAgICAgICAgICAgJHRoaXNfbGluZV9pc19zZW1pY29sb25fdGVybWluYXRlZCApOwogICAgICAgICAgICBuZXh0IGlmICggISRva18yICk7CgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIFJlY29tYmluZSBTZWN0aW9uIDM6CiAgICAgICAgICAgICMgRXhhbWluZSB0b2tlbiBhdCAkaWJlZ18yIChsZWZ0IGVuZCBvZiBzZWNvbmQgbGluZSBvZiBwYWlyKQogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAgICAgIyBKb2luIGxpbmVzIGlkZW50aWZpZWQgYWJvdmUgYXMgY2FwYWJsZSBvZgogICAgICAgICAgICAjIGNhdXNpbmcgYW4gb3V0ZGVudGVkIGxpbmUgd2l0aCBsZWFkaW5nIGNsb3NpbmcgcGFyZW4uCiAgICAgICAgICAgICMgTm90ZSB0aGF0IHdlIGFyZSBza2lwcGluZyB0aGUgcmVzdCBvZiB0aGlzIHNlY3Rpb24KICAgICAgICAgICAgIyBhbmQgdGhlIHJlc3Qgb2YgdGhlIGxvb3AgdG8gZG8gdGhlIGpvaW4uCiAgICAgICAgICAgIGlmICgkc2tpcF9TZWN0aW9uXzMpIHsKICAgICAgICAgICAgICAgICRmb3JjZWRfYnJlYWtwb2ludF90b19nb1skaWVuZF8xXSA9IDA7CiAgICAgICAgICAgICAgICAkbl9iZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAkbjsKICAgICAgICAgICAgICAgICRpeF9iZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICA9ICRpeDsKICAgICAgICAgICAgICAgICRpbmNvbXBsZXRlX2xvb3AgICAgICAgICAgICAgICAgICA9IDE7CiAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAoICRva18zLCAkYnNfdHdlYWsgKSA9CiAgICAgICAgICAgICAgcmVjb21iaW5lX3NlY3Rpb25fMyggJHJpX2JlZywgJHJpX2VuZCwgJG4sCiAgICAgICAgICAgICAgICAkdGhpc19saW5lX2lzX3NlbWljb2xvbl90ZXJtaW5hdGVkICk7CiAgICAgICAgICAgIG5leHQgaWYgKCAhJG9rXzMgKTsKCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgUmVjb21iaW5lIFNlY3Rpb24gNDoKICAgICAgICAgICAgIyBDb21iaW5lIHRoZSBsaW5lcyBpZiB3ZSBhcnJpdmUgaGVyZSBhbmQgaXQgaXMgcG9zc2libGUKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgICAgICMgaG9ub3IgaGFyZCBicmVha3BvaW50cwogICAgICAgICAgICBuZXh0IGlmICggJGZvcmNlZF9icmVha3BvaW50X3RvX2dvWyRpZW5kXzFdICk7CgogICAgICAgICAgICBpZiAoREVWRUxfTU9ERSkgewoKICAgICAgICAgICAgICAgICMgVGhpcyBmYXVsdCBjYW4gb25seSBvY2N1ciBpZiBhbiBhcnJheSBpbmRleCBlcnJvciBoYXMgYmVlbgogICAgICAgICAgICAgICAgIyBpbnRyb2R1Y2VkIGJ5IGEgcmVjZW50IHByb2dyYW1taW5nIGNoYW5nZS4KICAgICAgICAgICAgICAgIG15ICRic19jaGVjayA9ICRyYm9uZF9zdHJlbmd0aF90b19nby0+WyRpZW5kXzFdICsgJGJzX3R3ZWFrOwogICAgICAgICAgICAgICAgaWYgKCAkYnNfY2hlY2sgIT0gJGJzICkgewogICAgICAgICAgICAgICAgICAgIEZhdWx0KDw8RU9NKTsKYnM9JGJzICE9ICRic19jaGVjayBmb3IgYnJlYWsgYWZ0ZXIgdHlwZSAkdHlwZV9pZW5kXzEgaXg9JGl4IG49JG4KRU9NCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgUmVxdWlyZSBhIGZldyBleHRyYSBzcGFjZXMgYmVmb3JlIHJlY29tYmluaW5nIGxpbmVzIGlmIHdlCiAgICAgICAgICAgICMgYXJlIGF0IGFuIG9sZCBicmVha3BvaW50IHVubGVzcyB0aGlzIGlzIGEgc2ltcGxlIGxpc3Qgb3IKICAgICAgICAgICAgIyB0ZXJtaW5hbCBsaW5lLiAgVGhlIGdvYWwgaXMgdG8gYXZvaWQgb3NjaWxsYXRpbmcgYmV0d2VlbgogICAgICAgICAgICAjIHR3byBxdWFzaS1zdGFibGUgZW5kIHN0YXRlcy4gIEZvciBleGFtcGxlIHRoaXMgc25pcHBldAogICAgICAgICAgICAjIGNhdXNlZCBwcm9ibGVtczoKCiMjICAgIG15ICR0aGlzID0KIyMgICAgYmxlc3MgewojIyAgICAgICAgVFRleHQgPT4gIlsiIC4gKCBqb2luICcsJywgbWFwIHsgIlwiJF9cIiIgfSBzcGxpdCAiXG4iLCAkXyApIC4gIl0iCiMjICAgICAgfSwKIyMgICAgICAkdHlwZTsKICAgICAgICAgICAgbmV4dAogICAgICAgICAgICAgIGlmICggJG9sZF9icmVha3BvaW50X3RvX2dvWyRpZW5kXzFdCiAgICAgICAgICAgICAgICAmJiAhJHRoaXNfbGluZV9pc19zZW1pY29sb25fdGVybWluYXRlZAogICAgICAgICAgICAgICAgJiYgJG4gPCAkbm1heAogICAgICAgICAgICAgICAgJiYgJGV4Y2VzcyArIDQgPiAwCiAgICAgICAgICAgICAgICAmJiAkdHlwZV9pZW5kXzIgbmUgJywnICk7CgogICAgICAgICAgICAjIGRvIG5vdCByZWNvbWJpbmUgaWYgd2Ugd291bGQgc2tpcCBpbiBpbmRlbnRhdGlvbiBsZXZlbHMKICAgICAgICAgICAgaWYgKCAkbiA8ICRubWF4ICkgewoKICAgICAgICAgICAgICAgIG15ICRpZl9uZXh0ICAgICAgID0gJHJpX2JlZy0+WyAkbiArIDEgXTsKICAgICAgICAgICAgICAgIG15ICRsZXZlbF8xICAgICAgID0gJGxldmVsc190b19nb1skaWJlZ18xXTsKICAgICAgICAgICAgICAgIG15ICRsZXZlbF8yICAgICAgID0gJGxldmVsc190b19nb1skaWJlZ18yXTsKICAgICAgICAgICAgICAgIG15ICRsZXZlbF9pZl9uZXh0ID0gJGxldmVsc190b19nb1skaWZfbmV4dF07CgogICAgICAgICAgICAgICAgbmV4dAogICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgJGxldmVsXzEgPCAkbGV2ZWxfMgogICAgICAgICAgICAgICAgICAgICYmICRsZXZlbF8yIDwgJGxldmVsX2lmX25leHQKCiAgICAgICAgICAgICAgICAgICAgIyBidXQgYW4gaXNvbGF0ZWQgJ2lmICgnIGlzIHVuZGVzaXJhYmxlCiAgICAgICAgICAgICAgICAgICAgJiYgISgKICAgICAgICAgICAgICAgICAgICAgICAgICAgJG4gPT0gMQogICAgICAgICAgICAgICAgICAgICAgICAmJiAkaWVuZF8xIC0gJGliZWdfMSA8PSAyCiAgICAgICAgICAgICAgICAgICAgICAgICYmICR0eXBlX2liZWdfMSBlcSAnaycKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHRva2Vuc190b19nb1skaWJlZ18xXSBlcSAnaWYnCiAgICAgICAgICAgICAgICAgICAgICAgICYmICR0b2tlbnNfdG9fZ29bJGllbmRfMV0gbmUgJygnCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIyBPTEQ6IGhvbm9yIG5vLWJyZWFrJ3MKICAgICAgICAgICAgIyMgbmV4dCBpZiAoICRicyA+PSBOT19CUkVBSyAtIDEgKTsgICMgcmVtb3ZlZCBmb3IgYjEyNTcKCiAgICAgICAgICAgICMgcmVtZW1iZXIgdGhlIHBhaXIgd2l0aCB0aGUgZ3JlYXRlc3QgYm9uZCBzdHJlbmd0aAogICAgICAgICAgICBpZiAoICEkbl9iZXN0ICkgewoKICAgICAgICAgICAgICAgICMgRmlyc3QgZ29vZCBqb2ludCAuLi4KICAgICAgICAgICAgICAgICRuX2Jlc3QgID0gJG47CiAgICAgICAgICAgICAgICAkaXhfYmVzdCA9ICRpeDsKICAgICAgICAgICAgICAgICRic19iZXN0ID0gJGJzOwogICAgICAgICAgICAgICAgJG51bV9icyAgPSAxOwoKICAgICAgICAgICAgICAgICMgSW4gb3B0aW1pemF0aW9uIG1vZGU6IHN0b3Agb24gdGhlIGZpcnN0IGFjY2VwdGFibGUgam9pbnQKICAgICAgICAgICAgICAgICMgYmVjYXVzZSB3ZSBhbHJlYWR5IGtub3cgaXQgaGFzIHRoZSBoaWdoZXN0IHN0cmVuZ3RoCiAgICAgICAgICAgICAgICBpZiAoICRyaGFzaC0+e19vcHRpbWl6YXRpb25fb259ID09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIFNlY29uZCBhbmQgbGF0ZXIgam9pbnRzIC4uCiAgICAgICAgICAgICAgICAkbnVtX2JzKys7CgogICAgICAgICAgICAgICAgIyBzYXZlIG1heGltdW0gc3RyZW5ndGg7IGluIGNhc2Ugb2YgYSB0aWUgc2VsZWN0IG1pbiAkbgogICAgICAgICAgICAgICAgaWYgKCAkYnMgPiAkYnNfYmVzdCB8fCAkYnMgPT0gJGJzX2Jlc3QgJiYgJG4gPCAkbl9iZXN0ICkgewogICAgICAgICAgICAgICAgICAgICRuX2Jlc3QgID0gJG47CiAgICAgICAgICAgICAgICAgICAgJGl4X2Jlc3QgPSAkaXg7CiAgICAgICAgICAgICAgICAgICAgJGJzX2Jlc3QgPSAkYnM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgfSAjIyBlbmQgbG9vcCBvdmVyIGFsbCBsaW5lIHBhaXJzCgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIHJlY29tYmluZSB0aGUgcGFpciB3aXRoIHRoZSBncmVhdGVzdCBib25kIHN0cmVuZ3RoCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGlmICgkbl9iZXN0KSB7CiAgICAgICAgICAgIERFQlVHX1JFQ09NQklORSA+IDEKICAgICAgICAgICAgICAmJiBwcmludCAiQkVTVDogbmI9JG5fYmVzdCBuYmVnPSRuYmVnIHN0b3A9JG5zdG9wIGJzPSRic19iZXN0XG4iOwogICAgICAgICAgICBzcGxpY2UgQHskcmlfYmVnfSwgJG5fYmVzdCwgICAgIDE7CiAgICAgICAgICAgIHNwbGljZSBAeyRyaV9lbmR9LCAkbl9iZXN0IC0gMSwgMTsKICAgICAgICAgICAgc3BsaWNlIEB7JHJqb2ludH0sICRuX2Jlc3QsICAgICAxOwoKICAgICAgICAgICAgc3BsaWNlIEB7JHJwYWlyX2xpc3R9LCAkaXhfYmVzdCwgMTsKCiAgICAgICAgICAgICMgVXBkYXRlIHRoZSBsaW5lIGluZGV4ZXMgaW4gdGhlIHBhaXIgbGlzdDoKICAgICAgICAgICAgIyBPbGQgJG4gdmFsdWVzIGdyZWF0ZXIgdGhhbiB0aGUgYmVzdCAkbiBkZWNyZWFzZSBieSAxCiAgICAgICAgICAgICMgYmVjYXVzZSBvZiB0aGUgc3BsaWNlIHdlIGp1c3QgZGlkLgogICAgICAgICAgICBmb3JlYWNoIG15ICRpdGVtICggQHskcnBhaXJfbGlzdH0gKSB7CiAgICAgICAgICAgICAgICBteSAkbl9vbGQgPSAkaXRlbS0+WzBdOwogICAgICAgICAgICAgICAgaWYgKCAkbl9vbGQgPiAkbl9iZXN0ICkgeyAkaXRlbS0+WzBdIC09IDEgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFN0b3JlIHRoZSBpbmRleCBvZiB0aGlzIGxvY2F0aW9uIGZvciBzdGFydGluZyB0aGUgbmV4dCBzZWFyY2guCiAgICAgICAgICAgICMgV2UgbXVzdCBzdWJ0cmFjdCAxIHRvIGdldCBhbiB1cGRhdGVkIGluZGV4IGJlY2F1c2UgdGhlIHNwbGljZQogICAgICAgICAgICAjIGFib3ZlIGp1c3QgcmVtb3ZlZCB0aGUgYmVzdCBwYWlyLgogICAgICAgICAgICAjIEJVVCBDQVVUSU9OOiBpZiB0aGlzIGlzIHRoZSBmaXJzdCBwYWlyIGluIHRoZSBwYWlyIGxpc3QsIHRoZW4KICAgICAgICAgICAgIyB0aGlzIHByb2R1Y2VzIGFuIGludmFsaWQgaW5kZXguIFNvIHRoaXMgaW5kZXggbXVzdCBiZSB0ZXN0ZWQKICAgICAgICAgICAgIyBiZWZvcmUgdXNlIGluIHRoZSBuZXh0IHBhc3MgdGhyb3VnaCB0aGUgb3V0ZXIgbG9vcC4KICAgICAgICAgICAgJHJoYXNoLT57X2l4X2Jlc3RfbGFzdH0gPSAkaXhfYmVzdCAtIDE7CgogICAgICAgICAgICAjIFR1cm4gb24gb3B0aW1pemF0aW9uIGlmIC4uLgogICAgICAgICAgICBpZiAoCgogICAgICAgICAgICAgICAgIyBpdCBpcyBub3QgYWxyZWFkeSBvbiwgYW5kCiAgICAgICAgICAgICAgICAhJHJoYXNoLT57X29wdGltaXphdGlvbl9vbn0KCiAgICAgICAgICAgICAgICAjIHdlIGhhdmUgbm90IHRha2VuIGEgc2hvcnRjdXQgdG8gZ2V0IGhlcmUsIGFuZAogICAgICAgICAgICAgICAgJiYgISRpbmNvbXBsZXRlX2xvb3AKCiAgICAgICAgICAgICAgICAjIHdlIGhhdmUgc2VlbiBhIGdvb2QgYnJlYWsgb24gc3RyZW5ndGgsIGFuZAogICAgICAgICAgICAgICAgJiYgJG51bV9icwoKICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIFRvIGRlYWN0aXZhdGUgb3B0aW1pemF0aW9uIGZvciB0ZXN0aW5nIHB1cnBvc2VzLCB0aGUgbmV4dAogICAgICAgICAgICAgICAgIyBsaW5lIGNhbiBiZSBjb21tZW50ZWQgb3V0LiBUaGlzIHdpbGwgaW5jcmVhc2UgcnVuIHRpbWUuCiAgICAgICAgICAgICAgICAkcmhhc2gtPntfb3B0aW1pemF0aW9uX29ufSA9IDE7CiAgICAgICAgICAgICAgICBpZiAoREVCVUdfUkVDT01CSU5FKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJG51bV9jb21wYXJlcyA9ICRyaGFzaC0+e19udW1fY29tcGFyZXN9OwogICAgICAgICAgICAgICAgICAgIG15ICRwYWlyX2NvdW50ICAgPSBAaXhfbGlzdDsKICAgICAgICAgICAgICAgICAgICBwcmludCB7KlNURE9VVH0KIkVudGVyaW5nIG9wdGltaXphdGlvbiBwaGFzZSBhdCAkbnVtX2NvbXBhcmVzIGNvbXBhcmVzLCBwYWlyIGNvdW50ID0gJHBhaXJfY291bnRcbiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIHJlY29tYmluZV9pbm5lcl9sb29wCgogICAgc3ViIHJlY29tYmluZV9zZWN0aW9uXzAgewogICAgICAgIG15ICggJGl0b2ssICRyaV9iZWcsICRyaV9lbmQsICRuICkgPSBAXzsKCiAgICAgICAgIyBSZWNvbWJpbmUgU2VjdGlvbiAwOgogICAgICAgICMgRXhhbWluZSBzcGVjaWFsIGNhbmRpZGF0ZSBqb2luaW5nIHRva2VuICRpdG9rCgogICAgICAgICMgR2l2ZW46CiAgICAgICAgIyAgJGl0b2sgPSBpbmRleCBvZiB0b2tlbiBhdCBhIHBvc3NpYmxlIGpvaW4gb2YgbGluZXMgJG4tMSBhbmQgJG4KCiAgICAgICAgIyBSZXR1cm46CiAgICAgICAgIyAgdHJ1ZSAgPT4gb2sgdG8gY29tYmluZQogICAgICAgICMgIGZhbHNlID0+IGRvIG5vdCBjb21iaW5lIGxpbmVzCgogICAgICAgICMgSGVyZSBhcmUgSW5kZXhlcyBvZiB0aGUgZW5kcG9pbnQgdG9rZW5zIG9mIHRoZSB0d28gbGluZXM6CiAgICAgICAgIwogICAgICAgICMgIC0tLS0tbGluZSAkbi0xLS0tIHwgLS0tLS1saW5lICRuLS0tLS0KICAgICAgICAjICAkaWJlZ18xICAgJGllbmRfMSB8ICRpYmVnXzIgICAkaWVuZF8yCiAgICAgICAgIyAgICAgICAgICAgICAgXiAgICAgICAgIF4KICAgICAgICAjICAgICAgICAgICAgICB8ICAgICAgICAgfAogICAgICAgICMgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLSRpdG9rIGlzIG9uZSBvZiB0aGVzZSB0b2tlbnMKCiAgICAgICAgIyBQdXQgYXMgbWFueSB0ZXN0cyBpbiB0aGlzIHNlY3Rpb24gdG8gYXZvaWQgZHVwbGljYXRlIGNvZGUKICAgICAgICAjIGFuZCB0byBtYWtlIGZvcm1hdHRpbmcgaW5kZXBlbmRlbnQgb2Ygd2hldGhlciBicmVha3MgYXJlCiAgICAgICAgIyB0byB0aGUgbGVmdCBvciByaWdodCBvZiBhbiBvcGVyYXRvci4KCiAgICAgICAgbXkgJG5tYXggICA9IEB7JHJpX2VuZH0gLSAxOwogICAgICAgIG15ICRpYmVnXzEgPSAkcmlfYmVnLT5bICRuIC0gMSBdOwogICAgICAgIG15ICRpZW5kXzEgPSAkcmlfZW5kLT5bICRuIC0gMSBdOwojIyAgICAgIG15ICRpYmVnXzIgPSAkcmlfYmVnLT5bJG5dOwogICAgICAgIG15ICRpZW5kXzIgPSAkcmlfZW5kLT5bJG5dOwoKICAgICAgICBpZiAoJGl0b2spIHsKCiAgICAgICAgICAgIG15ICR0eXBlID0gJHR5cGVzX3RvX2dvWyRpdG9rXTsKCiAgICAgICAgICAgIGlmICggJHR5cGUgZXEgJzonICkgewoKICAgICAgICAgICAgICAgICMgZG8gbm90IGpvaW4gYXQgYSBjb2xvbiB1bmxlc3MgaXQgZGlzb2JleXMgdGhlCiAgICAgICAgICAgICAgICAjIGJyZWFrIHJlcXVlc3QKICAgICAgICAgICAgICAgIGlmICggJGl0b2sgZXEgJGllbmRfMSApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5sZXNzICR3YW50X2JyZWFrX2JlZm9yZXskdHlwZX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWYgJHdhbnRfYnJlYWtfYmVmb3JleyR0eXBlfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSAjIyBlbmQgaWYgJzonCgogICAgICAgICAgICAjIGhhbmRsZSBtYXRoIG9wZXJhdG9ycyArIC0gKiAvCiAgICAgICAgICAgIGVsc2lmICggJGlzX21hdGhfb3B7JHR5cGV9ICkgewoKICAgICAgICAgICAgICAgICMgQ29tYmluZSB0aGVzZSBsaW5lcyBpZiB0aGlzIGxpbmUgaXMgYSBzaW5nbGUKICAgICAgICAgICAgICAgICMgbnVtYmVyLCBvciBpZiBpdCBpcyBhIHNob3J0IHRlcm0gd2l0aCBzYW1lCiAgICAgICAgICAgICAgICAjIG9wZXJhdG9yIGFzIHRoZSBwcmV2aW91cyBsaW5lLiAgRm9yIGV4YW1wbGUsIGluCiAgICAgICAgICAgICAgICAjIHRoZSBmb2xsb3dpbmcgY29kZSB3ZSB3aWxsIGNvbWJpbmUgYWxsIG9mIHRoZQogICAgICAgICAgICAgICAgIyBzaG9ydCB0ZXJtcyAkQSwgJEIsICRDLCAkRCwgJEUsICRGLCB0b2dldGhlcgogICAgICAgICAgICAgICAgIyBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlbSBvbmUgcGVyIGxpbmU6CiAgICAgICAgICAgICAgICAjICBteSAkdGltZSA9CiAgICAgICAgICAgICAgICAjICAgICRBICogJEIgKiAkQyAqICREICogJEUgKiAkRiAqCiAgICAgICAgICAgICAgICAjICAgICggMi4gKiAkZXBzICogJHNpZ21hICogJGFyZWEgKSAqCiAgICAgICAgICAgICAgICAjICAgICggMS4gLyAkdGNvbGQqKjMgLSAxLiAvICR0aG90KiozICk7CgogICAgICAgICAgICAgICAgIyBUaGlzIGNhbiBiZSBpbXBvcnRhbnQgaW4gbWF0aC1pbnRlbnNpdmUgY29kZS4KCiAgICAgICAgICAgICAgICBteSAkZ29vZF9jb21ibzsKCiAgICAgICAgICAgICAgICBteSAkaXRva3AgID0gbWluKCAkaW5leHRfdG9fZ29bJGl0b2tdLCAgJGllbmRfMiApOwogICAgICAgICAgICAgICAgbXkgJGl0b2twcCA9IG1pbiggJGluZXh0X3RvX2dvWyRpdG9rcF0sICRpZW5kXzIgKTsKICAgICAgICAgICAgICAgIG15ICRpdG9rbSAgPSBtYXgoIGlwcmV2X3RvX2dvKCRpdG9rKSwgICRpYmVnXzEgKTsKICAgICAgICAgICAgICAgIG15ICRpdG9rbW0gPSBtYXgoIGlwcmV2X3RvX2dvKCRpdG9rbSksICRpYmVnXzEgKTsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGZvciBhIG51bWJlciBvbiB0aGUgcmlnaHQKICAgICAgICAgICAgICAgIGlmICggJHR5cGVzX3RvX2dvWyRpdG9rcF0gZXEgJ24nICkgewoKICAgICAgICAgICAgICAgICAgICAjIG9rIGlmIG5vdGhpbmcgZWxzZSBvbiByaWdodAogICAgICAgICAgICAgICAgICAgIGlmICggJGl0b2twID09ICRpZW5kXzIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRnb29kX2NvbWJvID0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGxvb2sgb25lIG1vcmUgdG9rZW4gdG8gcmlnaHQuLgogICAgICAgICAgICAgICAgICAgICAgICAjIG9rYXkgaWYgbWF0aCBvcGVyYXRvciBvciBzb21lIHRlcm1pbmF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICRnb29kX2NvbWJvID0KICAgICAgICAgICAgICAgICAgICAgICAgICAoICggJGl0b2twcCA9PSAkaWVuZF8yICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJGlzX21hdGhfb3B7ICR0eXBlc190b19nb1skaXRva3BwXSB9ICkKICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAkdHlwZXNfdG9fZ29bJGl0b2twcF0gPX4gL15bIyw7XSQvOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGNoZWNrIGZvciBhIG51bWJlciBvbiB0aGUgbGVmdAogICAgICAgICAgICAgICAgaWYgKCAhJGdvb2RfY29tYm8gJiYgJHR5cGVzX3RvX2dvWyRpdG9rbV0gZXEgJ24nICkgewoKICAgICAgICAgICAgICAgICAgICAjIG9rYXkgaWYgbm90aGluZyBlbHNlIHRvIGxlZnQKICAgICAgICAgICAgICAgICAgICBpZiAoICRpdG9rbSA9PSAkaWJlZ18xICkgewogICAgICAgICAgICAgICAgICAgICAgICAkZ29vZF9jb21ibyA9IDE7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIG90aGVyd2lzZSBsb29rIG9uZSBtb3JlIHRva2VuIHRvIGxlZnQKICAgICAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgb2theSBpZiBtYXRoIG9wZXJhdG9yLCBjb21tYSwgb3IgYXNzaWdubWVudAogICAgICAgICAgICAgICAgICAgICAgICAkZ29vZF9jb21ibyA9ICggJGl0b2ttbSA9PSAkaWJlZ18xICkKICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoICRpc19tYXRoX29weyAkdHlwZXNfdG9fZ29bJGl0b2ttbV0gfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgJHR5cGVzX3RvX2dvWyRpdG9rbW1dID1+IC9eWyxdJC8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRpc19hc3NpZ25tZW50eyAkdHlwZXNfdG9fZ29bJGl0b2ttbV0gfSApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGxvb2sgZm9yIGEgc2luZ2xlIHNob3J0IHRva2VuIGVpdGhlciBzaWRlIG9mIHRoZQogICAgICAgICAgICAgICAgIyBvcGVyYXRvcgogICAgICAgICAgICAgICAgaWYgKCAhJGdvb2RfY29tYm8gKSB7CgogICAgICAgICAgICAgICAgICAgICMgU2xpZ2h0IGFkanVzdG1lbnQgZmFjdG9yIHRvIG1ha2UgcmVzdWx0cwogICAgICAgICAgICAgICAgICAgICMgaW5kZXBlbmRlbnQgb2YgYnJlYWsgYmVmb3JlIG9yIGFmdGVyIG9wZXJhdG9yCiAgICAgICAgICAgICAgICAgICAgIyBpbiBsb25nIHN1bW1lZCBsaXN0cy4gIChBbiBvcGVyYXRvciBhbmQgYQogICAgICAgICAgICAgICAgICAgICMgc3BhY2UgbWFrZSB0d28gc3BhY2VzKS4KICAgICAgICAgICAgICAgICAgICBteSAkdHdvID0gKCAkaXRvayBlcSAkaWVuZF8xICkgPyAyIDogMDsKCiAgICAgICAgICAgICAgICAgICAgJGdvb2RfY29tYm8gPQoKICAgICAgICAgICAgICAgICAgICAgICMgbnVtYmVycyBvciBpZCdzIG9uIGJvdGggc2lkZXMgb2YgdGhpcyBqb2ludAogICAgICAgICAgICAgICAgICAgICAgJHR5cGVzX3RvX2dvWyRpdG9rcF0gPX4gL15baW5dJC8KICAgICAgICAgICAgICAgICAgICAgICYmICR0eXBlc190b19nb1skaXRva21dID1+IC9eW2luXSQvCgogICAgICAgICAgICAgICAgICAgICAgIyBvbmUgb2YgdGhlIHR3byBsaW5lcyBtdXN0IGJlIHNob3J0OgogICAgICAgICAgICAgICAgICAgICAgJiYgKAogICAgICAgICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG5vIG1vcmUgdGhhbiAyIG5vbmJsYW5rIHRva2VucyByaWdodAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvZiBqb2ludAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0b2twcCA9PSAkaWVuZF8yCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzaG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdG9rZW5fc2VxdWVuY2VfbGVuZ3RoKCAkaXRva3AsICRpZW5kXzIgKSA8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHdvICsgJHJPcHRzX3Nob3J0X2NvbmNhdGVuYXRpb25faXRlbV9sZW5ndGgKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICB8fCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG5vIG1vcmUgdGhhbiAyIG5vbmJsYW5rIHRva2VucyBsZWZ0IG9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGpvaW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXRva21tID09ICRpYmVnXzEKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNob3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB0b2tlbl9zZXF1ZW5jZV9sZW5ndGgoICRpYmVnXzEsICRpdG9rbSApIDwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgLSAkdHdvICsgJHJPcHRzX3Nob3J0X2NvbmNhdGVuYXRpb25faXRlbV9sZW5ndGgKICAgICAgICAgICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICAgICAgICAjIGtlZXAgcHVyZSB0ZXJtczsgZG9uJ3QgbWl4ICstIHdpdGggKi8KICAgICAgICAgICAgICAgICAgICAgICYmICEoCiAgICAgICAgICAgICAgICAgICAgICAgICRpc19wbHVzX21pbnVzeyR0eXBlfQogICAgICAgICAgICAgICAgICAgICAgICAmJiAoICAgJGlzX211bHRfZGl2eyAkdHlwZXNfdG9fZ29bJGl0b2ttbV0gfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgJGlzX211bHRfZGl2eyAkdHlwZXNfdG9fZ29bJGl0b2twcF0gfSApCiAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAmJiAhKAogICAgICAgICAgICAgICAgICAgICAgICAkaXNfbXVsdF9kaXZ7JHR5cGV9CiAgICAgICAgICAgICAgICAgICAgICAgICYmICggICAkaXNfcGx1c19taW51c3sgJHR5cGVzX3RvX2dvWyRpdG9rbW1dIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRpc19wbHVzX21pbnVzeyAkdHlwZXNfdG9fZ29bJGl0b2twcF0gfSApCiAgICAgICAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgaXQgaXMgYWxzbyBnb29kIHRvIGNvbWJpbmUgaWYgd2UgY2FuIHJlZHVjZSB0byAyCiAgICAgICAgICAgICAgICAjIGxpbmVzCiAgICAgICAgICAgICAgICBpZiAoICEkZ29vZF9jb21ibyApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBpbmRleCBvbiBvdGhlciBsaW5lIHdoZXJlIHNhbWUgdG9rZW4gd291bGQgYmUKICAgICAgICAgICAgICAgICAgICAjIGluIGEgbG9uZyBjaGFpbi4KICAgICAgICAgICAgICAgICAgICBteSAkaW90aGVyID0gKCAkaXRvayA9PSAkaWVuZF8xICkgPyAkaWVuZF8yIDogJGliZWdfMTsKCiAgICAgICAgICAgICAgICAgICAgJGdvb2RfY29tYm8gPQogICAgICAgICAgICAgICAgICAgICAgICAgJG4gPT0gMgogICAgICAgICAgICAgICAgICAgICAgJiYgJG4gPT0gJG5tYXgKICAgICAgICAgICAgICAgICAgICAgICYmICR0eXBlc190b19nb1skaW90aGVyXSBuZSAkdHlwZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdW5sZXNzICgkZ29vZF9jb21ibyk7CgogICAgICAgICAgICB9ICMjIGVuZCBtYXRoCgogICAgICAgICAgICBlbHNpZiAoICRpc19hbXBfYW1weyR0eXBlfSApIHsKICAgICAgICAgICAgICAgICMjVEJECiAgICAgICAgICAgIH0gIyMgZW5kICYmLCB8fAoKICAgICAgICAgICAgZWxzaWYgKCAkaXNfYXNzaWdubWVudHskdHlwZX0gKSB7CiAgICAgICAgICAgICAgICAjI1RCRAogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIyBub3QgYSBzcGVjaWFsIHR5cGUKICAgICAgICAgICAgfQogICAgICAgICAgICAjIyBlbmQgYXNzaWdubWVudAogICAgICAgIH0KCiAgICAgICAgIyBvayB0byBjb21iaW5lIGxpbmVzCiAgICAgICAgcmV0dXJuIDE7CiAgICB9ICMjIGVuZCBzdWIgcmVjb21iaW5lX3NlY3Rpb25fMAoKICAgIHN1YiByZWNvbWJpbmVfc2VjdGlvbl8yIHsKCiAgICAgICAgbXkgKCAkcmlfYmVnLCAkcmlfZW5kLCAkbiwgJHRoaXNfbGluZV9pc19zZW1pY29sb25fdGVybWluYXRlZCApID0gQF87CgogICAgICAgICMgUmVjb21iaW5lIFNlY3Rpb24gMjoKICAgICAgICAjIFdlIGFyZSBjb21wYXJpbmcgdHdvIGxpbmVzIHRvIHNlZSBpZiB0aGV5IHNob3VsZCBiZSBjb21iaW5lZAogICAgICAgICMgaW50byBhIHNpbmdsZSBsaW5lLiBUaGlzIHN1YiBleGFtaW5lcyB0aGUgdG9rZW4gJyRpZW5kXzEnIGluCiAgICAgICAgIyB0aGUgZm9sbG93aW5nIGRpYWdyYW0gKHJpZ2h0IGVuZCBvZiBmaXJzdCBsaW5lIG9mIHBhaXIpOgoKICAgICAgICAjIEhlcmUgYXJlIEluZGV4ZXMgb2YgdGhlIGVuZHBvaW50IHRva2VucyBvZiB0aGUgdHdvIGxpbmVzOgogICAgICAgICMKICAgICAgICAjICAtLS0tLWxpbmUgJG4tMS0tLSB8IC0tLS0tbGluZSAkbi0tLS0tCiAgICAgICAgIyAgJGliZWdfMSAgICRpZW5kXzEgfCAkaWJlZ18yICAgJGllbmRfMgogICAgICAgICMgICAgICAgICAgICAgIF4KICAgICAgICAjICAgICAgICAgICAgICB8CiAgICAgICAgIyAgICAgICAgICAgICAgLS0tLS1TZWN0aW9uIDIgbG9va3MgYXQgdGhpcyB0b2tlbgoKICAgICAgICAjIFJldHVybnM6CiAgICAgICAgIyAgIChub3RoaW5nKSAgICAgICAgID0+IGRvIG5vdCBqb2luIGxpbmVzCiAgICAgICAgIyAgIDEsIHNraXBfU2VjdGlvbl8zID0+IG9rIHRvIGpvaW4gbGluZXMKCiAgICAgICAgIyAkc2tpcF9TZWN0aW9uXzMgaXMgYSBmbGFnIGZvciBza2lwcGluZyB0aGUgbmV4dCBzZWN0aW9uCiAgICAgICAgbXkgJHNraXBfU2VjdGlvbl8zID0gMDsKCiAgICAgICAgbXkgJG5tYXggICAgICA9IEB7JHJpX2VuZH0gLSAxOwogICAgICAgIG15ICRpYmVnXzEgICAgPSAkcmlfYmVnLT5bICRuIC0gMSBdOwogICAgICAgIG15ICRpZW5kXzEgICAgPSAkcmlfZW5kLT5bICRuIC0gMSBdOwogICAgICAgIG15ICRpZW5kXzIgICAgPSAkcmlfZW5kLT5bJG5dOwogICAgICAgIG15ICRpYmVnXzIgICAgPSAkcmlfYmVnLT5bJG5dOwogICAgICAgIG15ICRpYmVnXzMgICAgPSAkbiA8ICRubWF4ID8gJHJpX2JlZy0+WyAkbiArIDEgXSA6IC0xOwogICAgICAgIG15ICRpYmVnX25tYXggPSAkcmlfYmVnLT5bJG5tYXhdOwoKICAgICAgICBteSAkdHlwZV9pZW5kXzEgPSAkdHlwZXNfdG9fZ29bJGllbmRfMV07CiAgICAgICAgbXkgJHR5cGVfaWVuZF8yID0gJHR5cGVzX3RvX2dvWyRpZW5kXzJdOwogICAgICAgIG15ICR0eXBlX2liZWdfMSA9ICR0eXBlc190b19nb1skaWJlZ18xXTsKICAgICAgICBteSAkdHlwZV9pYmVnXzIgPSAkdHlwZXNfdG9fZ29bJGliZWdfMl07CgogICAgICAgICMgYW4gaXNvbGF0ZWQgJ30nIG1heSBqb2luIHdpdGggYSAnOycgdGVybWluYXRlZCBzZWdtZW50CiAgICAgICAgaWYgKCAkdHlwZV9pZW5kXzEgZXEgJ30nICkgewoKICAgICAgICAgICAgIyBDaGVjayBmb3IgY2FzZXMgd2hlcmUgY29tYmluaW5nIGEgc2VtaWNvbG9uIHRlcm1pbmF0ZWQKICAgICAgICAgICAgIyBzdGF0ZW1lbnQgd2l0aCBhIHByZXZpb3VzIGlzb2xhdGVkIGNsb3NpbmcgcGFyZW4gd2lsbAogICAgICAgICAgICAjIGFsbG93IHRoZSBjb21iaW5lZCBsaW5lIHRvIGJlIG91dGRlbnRlZC4gIFRoaXMgaXMKICAgICAgICAgICAgIyBnZW5lcmFsbHkgYSBnb29kIG1vdmUuICBGb3IgZXhhbXBsZSwgd2UgY2FuIGpvaW4gdXAKICAgICAgICAgICAgIyB0aGUgbGFzdCB0d28gbGluZXMgaGVyZToKICAgICAgICAgICAgIyAgKAogICAgICAgICAgICAjICAgICAgJGRldiwgICRpbm8sICAgJG1vZGUsICAkbmxpbmssICR1aWQsICAgICAkZ2lkLCAkcmRldiwKICAgICAgICAgICAgIyAgICAgICRzaXplLCAkYXRpbWUsICRtdGltZSwgJGN0aW1lLCAkYmxrc2l6ZSwgJGJsb2NrcwogICAgICAgICAgICAjICAgICkKICAgICAgICAgICAgIyAgICA9IHN0YXQoJGZpbGUpOwogICAgICAgICAgICAjCiAgICAgICAgICAgICMgdG8gZ2V0OgogICAgICAgICAgICAjICAoCiAgICAgICAgICAgICMgICAgICAkZGV2LCAgJGlubywgICAkbW9kZSwgICRubGluaywgJHVpZCwgICAgICRnaWQsICRyZGV2LAogICAgICAgICAgICAjICAgICAgJHNpemUsICRhdGltZSwgJG10aW1lLCAkY3RpbWUsICRibGtzaXplLCAkYmxvY2tzCiAgICAgICAgICAgICMgICkgPSBzdGF0KCRmaWxlKTsKICAgICAgICAgICAgIwogICAgICAgICAgICAjIHdoaWNoIG1ha2VzIHRoZSBwYXJlbnMgbGluZSB1cC4KICAgICAgICAgICAgIwogICAgICAgICAgICAjIEFub3RoZXIgZXhhbXBsZSwgZnJvbSBKb2UgTWF0YXJhenpvLCBwcm9iYWJseSBsb29rcyBiZXN0CiAgICAgICAgICAgICMgd2l0aCB0aGUgJ29yJyBjbGF1c2UgYXBwZW5kZWQgdG8gdGhlIHRyYWlsaW5nIHBhcmVuOgogICAgICAgICAgICAjICAkc2VsZi0+c29tZV9tZXRob2QoCiAgICAgICAgICAgICMgICAgICBQQVJBTTEgPT4gJ2ZvbycsCiAgICAgICAgICAgICMgICAgICBQQVJBTTIgPT4gJ2JhcicKICAgICAgICAgICAgIyAgKSBvciBkaWUgIlNvbWVfbWV0aG9kIGRpZG4ndCB3b3JrIjsKICAgICAgICAgICAgIwogICAgICAgICAgICAjIEJ1dCB3ZSBkbyBub3Qgd2FudCB0byBkbyB0aGlzIGZvciBzb21ldGhpbmcgbGlrZSB0aGUgLWxwCiAgICAgICAgICAgICMgb3B0aW9uIHdoZXJlIHRoZSBwYXJlbiBpcyBub3Qgb3V0ZGVudGFibGUgYmVjYXVzZSB0aGUKICAgICAgICAgICAgIyB0cmFpbGluZyBjbGF1c2Ugd2lsbCBiZSBmYXIgdG8gdGhlIHJpZ2h0LgogICAgICAgICAgICAjCiAgICAgICAgICAgICMgVGhlIGxvZ2ljIGhlcmUgaXMgc3luY2hyb25pemVkIHdpdGggdGhlIGxvZ2ljIGluIHN1YgogICAgICAgICAgICAjIHN1YiBnZXRfZmluYWxfaW5kZW50YXRpb24sIHdoaWNoIGFjdHVhbGx5IGRvZXMKICAgICAgICAgICAgIyB0aGUgb3V0ZGVudGluZy4KICAgICAgICAgICAgIwogICAgICAgICAgICBteSAkY29tYmluZV9vayA9ICR0aGlzX2xpbmVfaXNfc2VtaWNvbG9uX3Rlcm1pbmF0ZWQKCiAgICAgICAgICAgICAgIyBvbmx5IG9uZSB0b2tlbiBvbiBsYXN0IGxpbmUKICAgICAgICAgICAgICAmJiAkaWJlZ18xID09ICRpZW5kXzEKCiAgICAgICAgICAgICAgIyBtdXN0IGJlIHN0cnVjdHVyYWwgcGFyZW4KICAgICAgICAgICAgICAmJiAkdG9rZW5zX3RvX2dvWyRpZW5kXzFdIGVxICcpJwoKICAgICAgICAgICAgICAjIHN0eWxlIG11c3QgYWxsb3cgb3V0ZGVudGluZywKICAgICAgICAgICAgICAmJiAhJGNsb3NpbmdfdG9rZW5faW5kZW50YXRpb257JyknfQoKICAgICAgICAgICAgICAjIGJ1dCBsZWFkaW5nIGNvbG9ucyBwcm9iYWJseSBsaW5lIHVwIHdpdGggYQogICAgICAgICAgICAgICMgcHJldmlvdXMgY29sb24gb3IgcXVlc3Rpb24gKGNvdW50IGNvdWxkIGJlIHdyb25nKS4KICAgICAgICAgICAgICAmJiAkdHlwZV9pYmVnXzIgbmUgJzonCgogICAgICAgICAgICAgICMgb25seSBvbmUgc3RlcCBpbiBkZXB0aCBhbGxvd2VkLiAgdGhpcyBsaW5lIG11c3Qgbm90CiAgICAgICAgICAgICAgIyBiZWdpbiB3aXRoIGEgJyknIGl0c2VsZi4KICAgICAgICAgICAgICAmJiAoICRuZXN0aW5nX2RlcHRoX3RvX2dvWyRpZW5kXzFdID09CiAgICAgICAgICAgICAgICAkbmVzdGluZ19kZXB0aF90b19nb1skaWVuZF8yXSArIDEgKTsKCiAgICAgICAgICAgICMgQnV0IG9ubHkgY29tYmluZSBsZWFkaW5nICcmJicsICd8fCcsIGlmIG5vIHByZXZpb3VzICYmIHx8IDoKICAgICAgICAgICAgIyBzZWVuLiBUaGlzIGNvdW50IGluY2x1ZGVzIHRoZXNlIHRva2VucyBhdCBhbGwgbGV2ZWxzLiAgVGhlCiAgICAgICAgICAgICMgaWRlYSBpcyB0aGF0IHNlZWluZyB0aGVzZSBhdCBhbnkgbGV2ZWwgY2FuIG1ha2UgaXQgaGFyZCB0byByZWFkCiAgICAgICAgICAgICMgZm9ybWF0dGluZyBpZiB3ZSByZWNvbWJpbmUuCiAgICAgICAgICAgIGlmICggJGlzX2FtcF9hbXB7JHR5cGVfaWJlZ18yfSApIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggbXkgJG5fdCAoIHJldmVyc2UoIDAgLi4gJG4gLSAyICkgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJGliZWdfdCA9ICRyaV9iZWctPlskbl90XTsKICAgICAgICAgICAgICAgICAgICBteSAkdHlwZV90ID0gJHR5cGVzX3RvX2dvWyRpYmVnX3RdOwogICAgICAgICAgICAgICAgICAgIGlmICggJGlzX2FtcF9hbXB7JHR5cGVfdH0gfHwgJHR5cGVfdCBlcSAnOicgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb21iaW5lX29rID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRza2lwX1NlY3Rpb25fMyB8fD0gJGNvbWJpbmVfb2s7CgogICAgICAgICAgICAjIFlWRVMgcGF0Y2ggMiBvZiAyOgogICAgICAgICAgICAjIEFsbG93IGN1ZGRsZWQgZXZhbCBjaGFpbnMsIGxpa2UgdGhpczoKICAgICAgICAgICAgIyAgIGV2YWwgewogICAgICAgICAgICAjICAgICAgICNTVFVGRjsKICAgICAgICAgICAgIyAgICAgICAxOyAjIHJldHVybiB0cnVlCiAgICAgICAgICAgICMgICB9IG9yIGRvIHsKICAgICAgICAgICAgIyAgICAgICAjaGFuZGxlIGVycm9yCiAgICAgICAgICAgICMgICB9OwogICAgICAgICAgICAjIFRoaXMgcGF0Y2ggd29ya3MgdG9nZXRoZXIgd2l0aCBhIHBhdGNoIGluCiAgICAgICAgICAgICMgc2V0dGluZyBhZGp1c3RlZCBpbmRlbnRhdGlvbiAod2hlcmUgdGhlIGNsb3NpbmcgZXZhbAogICAgICAgICAgICAjIGJyYWNlIGlzIG91dGRlbnRlZCBpZiBwb3NzaWJsZSkuCiAgICAgICAgICAgICMgVGhlIHByb2JsZW0gaXMgdGhhdCBhbiAnZXZhbCcgYmxvY2sgaGFzIGNvbnRpbnVhdGlvbgogICAgICAgICAgICAjIGluZGVudGF0aW9uIGFuZCBpdCBsb29rcyBiZXR0ZXIgdG8gdW5kbyBpdCBpbiBzb21lCiAgICAgICAgICAgICMgY2FzZXMuICBJZiB3ZSBkbyBub3QgdXNlIHRoaXMgcGF0Y2ggd2Ugd291bGQgZ2V0OgogICAgICAgICAgICAjICAgZXZhbCB7CiAgICAgICAgICAgICMgICAgICAgI1NUVUZGOwogICAgICAgICAgICAjICAgICAgIDE7ICMgcmV0dXJuIHRydWUKICAgICAgICAgICAgIyAgICAgICB9CiAgICAgICAgICAgICMgICAgICAgb3IgZG8gewogICAgICAgICAgICAjICAgICAgICNoYW5kbGUgZXJyb3IKICAgICAgICAgICAgIyAgICAgfTsKICAgICAgICAgICAgIyBUaGUgYWx0ZXJuYXRpdmUsIGZvciB1bmN1ZGRsZWQgc3R5bGUsIGlzIHRvIGNyZWF0ZQogICAgICAgICAgICAjIGEgcGF0Y2ggaW4gZ2V0X2ZpbmFsX2luZGVudGF0aW9uIHdoaWNoIHVuZG9lcwogICAgICAgICAgICAjIHRoZSBpbmRlbnRhdGlvbiBvZiBhIGxlYWRpbmcgbGluZSBsaWtlICdvciBkbyB7Jy4KICAgICAgICAgICAgIyBUaGlzIGRvZXNuJ3Qgd29yayB3ZWxsIHdpdGggLWljYiB0aHJvdWdoCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICRibG9ja190eXBlX3RvX2dvWyRpZW5kXzFdCiAgICAgICAgICAgICAgICAmJiAkck9wdHNfYnJhY2VfZm9sbG93ZXJfdmVydGljYWxfdGlnaHRuZXNzID4gMAogICAgICAgICAgICAgICAgJiYgKAoKICAgICAgICAgICAgICAgICAgICAjIC1iZnZ0PTEsIGFsbG93IGN1ZGRsZWQgZXZhbCBjaGFpbnMgW2RlZmF1bHRdCiAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAkdG9rZW5zX3RvX2dvWyRpZW5kXzJdIGVxICd7JwogICAgICAgICAgICAgICAgICAgICAgICAmJiAkYmxvY2tfdHlwZV90b19nb1skaWVuZF8xXSBlcSAnZXZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXJlZiggJGxlYWRpbmdfc3BhY2VzX3RvX2dvWyRpZW5kXzFdICkKICAgICAgICAgICAgICAgICAgICAgICAgJiYgISRyT3B0c19pbmRlbnRfY2xvc2luZ19icmFjZQogICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICAgICAgIyAtYmZ2dD0yLCBhbGxvdyBtb3N0IGJyYWNlIGZvbGxvd2VycyBbcGFydCBvZiBnaXQgIzExMF0KICAgICAgICAgICAgICAgICAgICB8fCAoICAgJHJPcHRzX2JyYWNlX2ZvbGxvd2VyX3ZlcnRpY2FsX3RpZ2h0bmVzcyA+IDEKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJGliZWdfMSA9PSAkaWVuZF8xICkKCiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAgJiYgKAogICAgICAgICAgICAgICAgICAgICggJHR5cGVfaWJlZ18yID1+IC9eKFwmXCZ8XHxcfCkkLyApCiAgICAgICAgICAgICAgICAgICAgfHwgKCAgICR0eXBlX2liZWdfMiBlcSAnaycKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJGlzX2FuZF9vcnsgJHRva2Vuc190b19nb1skaWJlZ18yXSB9ICkKICAgICAgICAgICAgICAgICAgICB8fCAkaXNfaWZfdW5sZXNzeyAkdG9rZW5zX3RvX2dvWyRpYmVnXzJdIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRza2lwX1NlY3Rpb25fMyB8fD0gMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJGtlZXBfZ29pbmcgPSAoCiAgICAgICAgICAgICAgICAkc2tpcF9TZWN0aW9uXzMKCiAgICAgICAgICAgICAgICAgICMgaGFuZGxlICcuJyBhbmQgJz8nIHNwZWNpYWxseSBiZWxvdwogICAgICAgICAgICAgICAgICB8fCAoICR0eXBlX2liZWdfMiA9fiAvXltcLlw/XSQvICkKCiAgICAgICAgICAgICAgICAgICMgZml4IGZvciBjMDU0ICh1bnVzdWFsIC1wYnAgY2FzZSkKICAgICAgICAgICAgICAgICAgfHwgJHR5cGVfaWJlZ18yIGVxICc9PScKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybiB1bmxlc3MgKCRrZWVwX2dvaW5nKTsKICAgICAgICB9CgogICAgICAgIGVsc2lmICggJHR5cGVfaWVuZF8xIGVxICd7JyApIHsKCiAgICAgICAgICAgICMgWVZFUwogICAgICAgICAgICAjIGhvbm9yIGJyZWFrcyBhdCBvcGVuaW5nIGJyYWNlCiAgICAgICAgICAgICMgQWRkZWQgdG8gcHJldmVudCByZWNvbWJpbmluZyBzb21ldGhpbmcgbGlrZSB0aGlzOgogICAgICAgICAgICAjICB9IHx8IGV2YWwgeyBwYWNrYWdlIG1haW47CiAgICAgICAgICAgIHJldHVybiBpZiAoICRmb3JjZWRfYnJlYWtwb2ludF90b19nb1skaWVuZF8xXSApOwogICAgICAgIH0KCiAgICAgICAgIyBkbyBub3QgcmVjb21iaW5lIGxpbmVzIHdpdGggZW5kaW5nICYmLCB8fCwKICAgICAgICBlbHNpZiAoICRpc19hbXBfYW1weyR0eXBlX2llbmRfMX0gKSB7CiAgICAgICAgICAgIHJldHVybiB1bmxlc3MgKCAkd2FudF9icmVha19iZWZvcmV7JHR5cGVfaWVuZF8xfSApOwogICAgICAgIH0KCiAgICAgICAgIyBJZGVudGlmeSBhbmQgcmVjb21iaW5lIGEgYnJva2VuID8vOiBjaGFpbgogICAgICAgIGVsc2lmICggJHR5cGVfaWVuZF8xIGVxICc/JyApIHsKCiAgICAgICAgICAgICMgRG8gbm90IHJlY29tYmluZSBkaWZmZXJlbnQgbGV2ZWxzCiAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgIGlmICggJGxldmVsc190b19nb1skaWJlZ18xXSBuZSAkbGV2ZWxzX3RvX2dvWyRpYmVnXzJdICk7CgogICAgICAgICAgICAjIGRvIG5vdCByZWNvbWJpbmUgdW5sZXNzIG5leHQgbGluZSBlbmRzIGluIDoKICAgICAgICAgICAgcmV0dXJuIHVubGVzcyAoICR0eXBlX2llbmRfMiBlcSAnOicgKTsKICAgICAgICB9CgogICAgICAgICMgZm9yIGxpbmVzIGVuZGluZyBpbiBhIGNvbW1hLi4uCiAgICAgICAgZWxzaWYgKCAkdHlwZV9pZW5kXzEgZXEgJywnICkgewoKICAgICAgICAgICAgIyBEbyBub3QgcmVjb21iaW5lIGF0IGNvbW1hIHdoaWNoIGlzIGZvbGxvd2luZyB0aGUKICAgICAgICAgICAgIyBpbnB1dCBiaWFzLgogICAgICAgICAgICAjIE5PVEU6IHRoaXMgY291bGQgYmUgY29udHJvbGxlZCBieSBhIHNwZWNpYWwgZmxhZywKICAgICAgICAgICAgIyBidXQgaXQgc2VlbXMgdG8gd29yayBva2F5LgogICAgICAgICAgICByZXR1cm4gaWYgKCAkb2xkX2JyZWFrcG9pbnRfdG9fZ29bJGllbmRfMV0gKTsKCiAgICAgICAgICAgICMgQW4gaXNvbGF0ZWQgJ30sJyBtYXkgam9pbiB3aXRoIGFuIGlkZW50aWZpZXIgKyAnOycKICAgICAgICAgICAgIyBUaGlzIGlzIHVzZWZ1bCBmb3IgdGhlIGNsYXNzIG9mIGEgJ2JsZXNzJyBzdGF0ZW1lbnQKICAgICAgICAgICAgIyAoYmxlc3MudCkKICAgICAgICAgICAgaWYgKCAgICR0eXBlX2liZWdfMSBlcSAnfScKICAgICAgICAgICAgICAgICYmICR0eXBlX2liZWdfMiBlcSAnaScgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBteSAkY29tYmluZV9vayA9CiAgICAgICAgICAgICAgICAgICggICAgICAoICRpYmVnXzEgPT0gKCAkaWVuZF8xIC0gMSApICkKICAgICAgICAgICAgICAgICAgICAgICYmICggJGllbmRfMiA9PSAoICRpYmVnXzIgKyAxICkgKQogICAgICAgICAgICAgICAgICAgICAgJiYgJHRoaXNfbGluZV9pc19zZW1pY29sb25fdGVybWluYXRlZCApOwoKICAgICAgICAgICAgICAgIHJldHVybiBpZiAoICEkY29tYmluZV9vayApOwoKICAgICAgICAgICAgICAgICMgb3ZlcnJpZGUgYnJlYWtwb2ludAogICAgICAgICAgICAgICAgJGZvcmNlZF9icmVha3BvaW50X3RvX2dvWyRpZW5kXzFdID0gMDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBidXQgb3RoZXJ3aXNlIC4uCiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgZG8gbm90IHJlY29tYmluZSBhZnRlciBhIGNvbW1hIHVubGVzcyB0aGlzIHdpbGwKICAgICAgICAgICAgICAgICMgbGVhdmUganVzdCAxIG1vcmUgbGluZQogICAgICAgICAgICAgICAgcmV0dXJuIGlmICggJG4gKyAxIDwgJG5tYXggKTsKCiAgICAgICAgICAgICAgICAjIGRvIG5vdCByZWNvbWJpbmUgaWYgdGhlcmUgaXMgYSBjaGFuZ2UgaW4KICAgICAgICAgICAgICAgICMgaW5kZW50YXRpb24gZGVwdGgKICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgICBpZiAoICRsZXZlbHNfdG9fZ29bJGllbmRfMV0gIT0gJGxldmVsc190b19nb1skaWVuZF8yXSApOwoKICAgICAgICAgICAgICAgICMgZG8gbm90IHJlY29tYmluZSBhICJjb21wbGV4IGV4cHJlc3Npb24iIGFmdGVyIGEKICAgICAgICAgICAgICAgICMgY29tbWEuICAiY29tcGxleCIgbWVhbnMgbm8gcGFyZW5zLgogICAgICAgICAgICAgICAgbXkgJHNhd19wYXJlbjsKICAgICAgICAgICAgICAgIGZvcmVhY2ggbXkgJGlpICggJGliZWdfMiAuLiAkaWVuZF8yICkgewogICAgICAgICAgICAgICAgICAgIGlmICggJHRva2Vuc190b19nb1skaWldIGVxICcoJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHNhd19wYXJlbiA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGlmICRzYXdfcGFyZW47CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgb3BlbmluZyBwYXJlbi4uCiAgICAgICAgZWxzaWYgKCAkdHlwZV9pZW5kXzEgZXEgJygnICkgewoKICAgICAgICAgICAgIyBObyBsb25nZXIgZG9pbmcgdGhpcwogICAgICAgIH0KCiAgICAgICAgZWxzaWYgKCAkdHlwZV9pZW5kXzEgZXEgJyknICkgewoKICAgICAgICAgICAgIyBObyBsb25nZXIgZG9pbmcgdGhpcwogICAgICAgIH0KCiAgICAgICAgIyBrZWVwIGEgdGVybWluYWwgZm9yLXNlbWljb2xvbgogICAgICAgIGVsc2lmICggJHR5cGVfaWVuZF8xIGVxICdmJyApIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBpZiAnPScgYXQgZW5kIG9mIGxpbmUgLi4uCiAgICAgICAgZWxzaWYgKCAkaXNfYXNzaWdubWVudHskdHlwZV9pZW5kXzF9ICkgewoKICAgICAgICAgICAgIyBrZWVwIGJyZWFrIGFmdGVyID0gaWYgaXQgd2FzIGluIGlucHV0IHN0cmVhbQogICAgICAgICAgICAjIHRoaXMgaGVscHMgcHJldmVudCAnYmxpbmtlcnMnCiAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRvbGRfYnJlYWtwb2ludF90b19nb1skaWVuZF8xXQoKICAgICAgICAgICAgICAgICMgZG9uJ3Qgc3RyYW5kIGFuIGlzb2xhdGVkICc9JwogICAgICAgICAgICAgICAgJiYgJGllbmRfMSAhPSAkaWJlZ18xCiAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICRpc19zaG9ydF9xdW90ZSA9CiAgICAgICAgICAgICAgKCAgICAgICR0eXBlX2liZWdfMiBlcSAnUScKICAgICAgICAgICAgICAgICAgJiYgJGliZWdfMiA9PSAkaWVuZF8yCiAgICAgICAgICAgICAgICAgICYmIHRva2VuX3NlcXVlbmNlX2xlbmd0aCggJGliZWdfMiwgJGliZWdfMiApIDwKICAgICAgICAgICAgICAgICAgJHJPcHRzX3Nob3J0X2NvbmNhdGVuYXRpb25faXRlbV9sZW5ndGggKTsKICAgICAgICAgICAgbXkgJGlzX3Rlcm5hcnlfam9pbnQgPSAoCiAgICAgICAgICAgICAgICAkdHlwZV9pYmVnXzEgZXEgJz8nICYmICggJGliZWdfMyA+PSAwCiAgICAgICAgICAgICAgICAgICAgJiYgJHR5cGVzX3RvX2dvWyRpYmVnXzNdIGVxICc6JyApCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGFsd2F5cyBqb2luIGFuIGlzb2xhdGVkICc9JywgYSBzaG9ydCBxdW90ZSwgb3IgaWYgdGhpcwogICAgICAgICAgICAjIHdpbGwgcHV0ID8vOiBhdCBzdGFydCBvZiBhZGphY2VudCBsaW5lcwogICAgICAgICAgICBpZiAoICAgJGliZWdfMSAhPSAkaWVuZF8xCiAgICAgICAgICAgICAgICAmJiAhJGlzX3Nob3J0X3F1b3RlCiAgICAgICAgICAgICAgICAmJiAhJGlzX3Rlcm5hcnlfam9pbnQgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBteSAkY29tYmluZV9vayA9ICgKICAgICAgICAgICAgICAgICAgICAoCgogICAgICAgICAgICAgICAgICAgICAgICAjIHVubGVzcyB3ZSBjYW4gcmVkdWNlIHRoaXMgdG8gdHdvIGxpbmVzCiAgICAgICAgICAgICAgICAgICAgICAgICRubWF4IDwgJG4gKyAyCgogICAgICAgICAgICAgICAgICAgICAgICAgICMgb3IgdGhyZWUgbGluZXMsIHRoZSBsYXN0IHdpdGggYSBsZWFkaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzZW1pY29sb24KICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoICRubWF4ID09ICRuICsgMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHR5cGVzX3RvX2dvWyRpYmVnX25tYXhdIGVxICc7JyApCgogICAgICAgICAgICAgICAgICAgICAgICAgICMgb3IgdGhlIG5leHQgbGluZSBlbmRzIHdpdGggYSBoZXJlIGRvYwogICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICR0eXBlX2llbmRfMiBlcSAnaCcKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvciB0aGUgbmV4dCBsaW5lIGVuZHMgaW4gYW4gb3BlbiBwYXJlbiBvcgogICAgICAgICAgICAgICAgICAgICAgICAgICMgYnJhY2UgYW5kIHRoZSBicmVhayBoYXNuJ3QgYmVlbiBmb3JjZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAjIFtkaW1hLnRdCiAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKCEkZm9yY2VkX2JyZWFrcG9pbnRfdG9fZ29bJGllbmRfMV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICR0eXBlX2llbmRfMiBlcSAneycgKQogICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICAgICAgICAjIGRvIG5vdCByZWNvbWJpbmUgaWYgdGhlIHR3byBsaW5lcyBtaWdodCBhbGlnbgogICAgICAgICAgICAgICAgICAgICAgIyB3ZWxsIHRoaXMgaXMgYSB2ZXJ5IGFwcHJveGltYXRlIHRlc3QgZm9yIHRoaXMKICAgICAgICAgICAgICAgICAgICAgICYmICgKCiAgICAgICAgICAgICAgICAgICAgICAgICMgUlQjMTI3NjMzIC0gdGhlIGxlYWRpbmcgdG9rZW5zIGFyZSBub3QKICAgICAgICAgICAgICAgICAgICAgICAgIyBvcGVyYXRvcnMKICAgICAgICAgICAgICAgICAgICAgICAgKCAkdHlwZV9pYmVnXzIgbmUgJHRva2Vuc190b19nb1skaWJlZ18yXSApCgogICAgICAgICAgICAgICAgICAgICAgICAjIG9yIHRoZXkgYXJlIGRpZmZlcmVudAogICAgICAgICAgICAgICAgICAgICAgICB8fCAoICAgJGliZWdfMyA+PSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkdHlwZV9pYmVnXzIgbmUgJHR5cGVzX3RvX2dvWyRpYmVnXzNdICkKICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgcmV0dXJuIGlmICggISRjb21iaW5lX29rICk7CgogICAgICAgICAgICAgICAgaWYgKAoKICAgICAgICAgICAgICAgICAgICAjIFJlY29tYmluZSBpZiB3ZSBjYW4gbWFrZSB0d28gbGluZXMKICAgICAgICAgICAgICAgICAgICAkbm1heCA+PSAkbiArIDIKCiAgICAgICAgICAgICAgICAgICAgIyAtbHAgdXNlcnMgb2Z0ZW4gcHJlZmVyIHRoaXM6CiAgICAgICAgICAgICAgICAgICAgIyAgbXkgJHRpdGxlID0gZnVuY3Rpb24oJGVudiwgJGVudiwgJHN5c2FyZWEsCiAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgImJ1YmJhIEJvcnJvd2VyIEVudHJ5Iik7CiAgICAgICAgICAgICAgICAgICAgIyAgc28gd2Ugd2lsbCByZWNvbWJpbmUgaWYgLWxwIGlzIHVzZWQgd2UgaGF2ZQogICAgICAgICAgICAgICAgICAgICMgIGVuZGluZyBjb21tYQogICAgICAgICAgICAgICAgICAgICYmICEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICRpYmVnXzMgPiAwCiAgICAgICAgICAgICAgICAgICAgICAgICYmIHJlZiggJGxlYWRpbmdfc3BhY2VzX3RvX2dvWyRpYmVnXzNdICkKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHR5cGVfaWVuZF8yIGVxICcsJwogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAjIG90aGVyd2lzZSwgc2NhbiB0aGUgcmhzIGxpbmUgdXAgdG8gbGFzdCB0b2tlbiBmb3IKICAgICAgICAgICAgICAgICAgICAjIGNvbXBsZXhpdHkuICBOb3RlIHRoYXQgd2UgYXJlIG5vdCBjb3VudGluZyB0aGUgbGFzdCB0b2tlbgogICAgICAgICAgICAgICAgICAgICMgaW4gY2FzZSBpdCBpcyBhbiBvcGVuaW5nIHBhcmVuLgogICAgICAgICAgICAgICAgICAgIG15ICRvayA9IHNpbXBsZV9yaHMoICRyaV9lbmQsICRuLCAkbm1heCwgJGliZWdfMiwgJGllbmRfMiApOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBpZiAoICEkb2sgKTsKCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJHRva2Vuc190b19nb1skaWJlZ18yXSAhfiAvXltce1woXFtdJC8gKSB7CiAgICAgICAgICAgICAgICAkZm9yY2VkX2JyZWFrcG9pbnRfdG9fZ29bJGllbmRfMV0gPSAwOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGZvciBrZXl3b3Jkcy4uCiAgICAgICAgZWxzaWYgKCAkdHlwZV9pZW5kXzEgZXEgJ2snICkgewoKICAgICAgICAgICAgIyBtYWtlIG1ham9yIGNvbnRyb2wga2V5d29yZHMgc3RhbmQgb3V0CiAgICAgICAgICAgICMgKHJlY29tYmluZS50KQogICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICBpZiAoCgogICAgICAgICAgICAgICAgIy9eKGxhc3R8bmV4dHxyZWRvfHJldHVybikkLwogICAgICAgICAgICAgICAgJGlzX2xhc3RfbmV4dF9yZWRvX3JldHVybnsgJHRva2Vuc190b19nb1skaWVuZF8xXSB9CgogICAgICAgICAgICAgICAgIyBidXQgb25seSBpZiBmb2xsb3dlZCBieSBtdWx0aXBsZSBsaW5lcwogICAgICAgICAgICAgICAgJiYgJG4gPCAkbm1heAogICAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICRpc19hbmRfb3J7ICR0b2tlbnNfdG9fZ29bJGllbmRfMV0gfSApIHsKICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgICB1bmxlc3MgJHdhbnRfYnJlYWtfYmVmb3JleyAkdG9rZW5zX3RvX2dvWyRpZW5kXzFdIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkdHlwZV9pZW5kXzEgZXEgJy4nICkgewoKICAgICAgICAgICAgIyBOT1RFOiB0aGUgbG9naWMgaGVyZSBzaG91bGQgbWF0Y2ggdGhhdCBvZiBzZWN0aW9uIDMgc28gdGhhdAogICAgICAgICAgICAjIGxpbmUgYnJlYWtzIGFyZSBpbmRlcGVuZGVudCBvZiBjaG9pY2Ugb2YgYnJlYWsgYmVmb3JlIG9yIGFmdGVyLgogICAgICAgICAgICAjIEl0IHdvdWxkIGJlIG5pY2UgdG8gY29tYmluZSB0aGVtIGluIHNlY3Rpb24gMCwgYnV0IHRoZQogICAgICAgICAgICAjIHNwZWNpYWwganVuY3Rpb24gY2FzZSAnKSAuJyBtYWtlcyB0aGF0IGRpZmZpY3VsdC4KICAgICAgICAgICAgIyBUaGlzIHNlY3Rpb24gYWRkZWQgdG8gZml4IGlzc3VlcyBjMTcyLCBjMTc0LgogICAgICAgICAgICBteSAkaV9uZXh0X25vbmJsYW5rID0gJGliZWdfMjsKICAgICAgICAgICAgbXkgJHN1bW1lZF9sZW5fMSAgICA9ICRzdW1tZWRfbGVuZ3Roc190b19nb1sgJGllbmRfMSArIDEgXSAtCiAgICAgICAgICAgICAgJHN1bW1lZF9sZW5ndGhzX3RvX2dvWyRpYmVnXzFdOwogICAgICAgICAgICBteSAkc3VtbWVkX2xlbl8yID0gJHN1bW1lZF9sZW5ndGhzX3RvX2dvWyAkaWVuZF8yICsgMSBdIC0KICAgICAgICAgICAgICAkc3VtbWVkX2xlbmd0aHNfdG9fZ29bJGliZWdfMl07CiAgICAgICAgICAgIG15ICRpZW5kXzFfbWludXMgPSBtYXgoICRpYmVnXzEsIGlwcmV2X3RvX2dvKCRpZW5kXzEpICk7CgogICAgICAgICAgICBteSAkY29tYmluZV9vayA9ICgKCiAgICAgICAgICAgICAgICAjIC4uLiB1bmxlc3MgdGhlcmUgaXMganVzdCBvbmUgYW5kIHdlIGNhbiByZWR1Y2UKICAgICAgICAgICAgICAgICMgdGhpcyB0byB0d28gbGluZXMgaWYgd2UgZG8uICBGb3IgZXhhbXBsZSwgdGhpcwogICAgICAgICAgICAgICAgIwogICAgICAgICAgICAgICAgIwogICAgICAgICAgICAgICAgIyAgJGJvZHlBIC49CiAgICAgICAgICAgICAgICAjICAgICcoJGR1bW15LCAkcGF0KSA9ICZnZXRfbmV4dF90ZXhfY21kOycgLiAnJGFyZ3MgLj0gJHBhdDsnCiAgICAgICAgICAgICAgICAjCiAgICAgICAgICAgICAgICAjICBsb29rcyBiZXR0ZXIgdGhhbiB0aGlzOgogICAgICAgICAgICAgICAgIyAgJGJvZHlBIC49ICcoJGR1bW15LCAkcGF0KSA9ICZnZXRfbmV4dF90ZXhfY21kOycgLgogICAgICAgICAgICAgICAgIyAgICAnJGFyZ3MgLj0gJHBhdDsnCgogICAgICAgICAgICAgICAgIyBjaGVjayBmb3IgMiBsaW5lcywgbm90IGluIGEgbG9uZyBicm9rZW4gJy4nIGNoYWluCiAgICAgICAgICAgICAgICAoICRuID09IDIgJiYgJG4gPT0gJG5tYXggJiYgJHR5cGVfaWVuZF8xIG5lICR0eXBlX2llbmRfMiApCgogICAgICAgICAgICAgICAgICAjIC4uLiBvciB0aGlzIHdvdWxkIHN0cmFuZCBhIHNob3J0IHF1b3RlICwgbGlrZSB0aGlzCiAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgInNvbWUgbG9uZyBxdW90ZSIgLgogICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAgICAgICAgICAgIHx8ICgKICAgICAgICAgICAgICAgICAgICAgICAkdHlwZXNfdG9fZ29bJGlfbmV4dF9ub25ibGFua10gZXEgJ1EnCiAgICAgICAgICAgICAgICAgICAgJiYgJGlfbmV4dF9ub25ibGFuayA+PSAkaWVuZF8yIC0gMgogICAgICAgICAgICAgICAgICAgICYmICR0b2tlbl9sZW5ndGhzX3RvX2dvWyRpX25leHRfbm9uYmxhbmtdIDwKICAgICAgICAgICAgICAgICAgICAkck9wdHNfc2hvcnRfY29uY2F0ZW5hdGlvbl9pdGVtX2xlbmd0aAoKICAgICAgICAgICAgICAgICAgICAjICBhZGRpdGlvbmFsIGNvbnN0cmFpbnRzIHRvIGZpeCBjMTY3CiAgICAgICAgICAgICAgICAgICAgJiYgKCAgICR0eXBlc190b19nb1skaWVuZF8xX21pbnVzXSBuZSAnUScKICAgICAgICAgICAgICAgICAgICAgICAgfHwgJHN1bW1lZF9sZW5fMiA8ICRzdW1tZWRfbGVuXzEgKQogICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybiBpZiAoICEkY29tYmluZV9vayApOwoKICAgICAgICAgICAgIyBhZGRlZCBmb3IgaXNzdWUgYzM1MgogICAgICAgICAgICBpZiAoJHRoaXNfbGluZV9pc19zZW1pY29sb25fdGVybWluYXRlZCkgewogICAgICAgICAgICAgICAgJGZvcmNlZF9icmVha3BvaW50X3RvX2dvWyRpZW5kXzFdID0gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIyBub3QgYSBzcGVjaWFsIHR5cGUKICAgICAgICB9CiAgICAgICAgcmV0dXJuICggMSwgJHNraXBfU2VjdGlvbl8zICk7CiAgICB9ICMjIGVuZCBzdWIgcmVjb21iaW5lX3NlY3Rpb25fMgoKICAgIHN1YiBzaW1wbGVfcmhzIHsKCiAgICAgICAgbXkgKCAkcmlfZW5kLCAkbiwgJG5tYXgsICRpYmVnXzIsICRpZW5kXzIgKSA9IEBfOwoKICAgICAgICAjIFNjYW4gbGluZSBpYmVnXzIgdG8gJGllbmRfMiB1cCB0byBsYXN0IHRva2VuIGZvciBjb21wbGV4aXR5LgogICAgICAgICMgV2UgYXJlIG5vdCBjb3VudGluZyB0aGUgbGFzdCB0b2tlbiBpbiBjYXNlIGl0IGlzIGFuIG9wZW5pbmcgcGFyZW4uCgogICAgICAgICMgR2l2ZW46CiAgICAgICAgIyAgICRyaV9lbmQgLSByZWYgdG8gbGlzdCBvZiBpbmRleGVzIG9mIGxpbmUtZW5kaW5nIHRva2VucwogICAgICAgICMgICAkbiA9IGN1cnJlbnQgbGluZSBpbmRleAogICAgICAgICMgICAkbm1heCA9IG1heGltdW0gbGluZSBpbmRleAogICAgICAgICMgICAoJGliZWdfMiwgJGllbmRfMikgPSBpbmRleCByYW5nZSBvZiBsaW5lIHRvIHNjYW4KCiAgICAgICAgIyBSZXR1cm46CiAgICAgICAgIyAgIHRydWUgIGlmIHJocyBpcyBzaW1wbGUsIG9rIHRvIHJlY29tYmluZQogICAgICAgICMgICBmYWxzZSBvdGhlcndpc2UKCiAgICAgICAgbXkgJHR2ICAgID0gMDsKICAgICAgICBteSAkZGVwdGggPSAkbmVzdGluZ19kZXB0aF90b19nb1skaWJlZ18yXTsKICAgICAgICBmb3JlYWNoIG15ICRpICggJGliZWdfMiArIDEgLi4gJGllbmRfMiAtIDEgKSB7CiAgICAgICAgICAgIGlmICggJG5lc3RpbmdfZGVwdGhfdG9fZ29bJGldICE9ICRkZXB0aCApIHsKICAgICAgICAgICAgICAgICR0disrOwogICAgICAgICAgICAgICAgbGFzdCBpZiAoICR0diA+IDEgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkZGVwdGggPSAkbmVzdGluZ19kZXB0aF90b19nb1skaV07CiAgICAgICAgfQoKICAgICAgICAjIG9rIHRvIHJlY29tYmluZSBpZiBubyBsZXZlbCBjaGFuZ2VzIGJlZm9yZQogICAgICAgICMgbGFzdCB0b2tlbgogICAgICAgIGlmICggJHR2ID4gMCApIHsKCiAgICAgICAgICAgICMgb3RoZXJ3aXNlLCBkbyBub3QgcmVjb21iaW5lIGlmIG1vcmUgdGhhbgogICAgICAgICAgICAjIHR3byBsZXZlbCBjaGFuZ2VzLgogICAgICAgICAgICByZXR1cm4gaWYgKCAkdHYgPiAxICk7CgogICAgICAgICAgICAjIGNoZWNrIHRvdGFsIGNvbXBsZXhpdHkgb2YgdGhlIHR3bwogICAgICAgICAgICAjIGFkamFjZW50IGxpbmVzIHRoYXQgd2lsbCBvY2N1ciBpZiB3ZSBkbwogICAgICAgICAgICAjIHRoaXMgam9pbgogICAgICAgICAgICBteSAkaXN0b3AgPQogICAgICAgICAgICAgICggJG4gPCAkbm1heCApCiAgICAgICAgICAgICAgPyAkcmlfZW5kLT5bICRuICsgMSBdCiAgICAgICAgICAgICAgOiAkaWVuZF8yOwogICAgICAgICAgICBmb3JlYWNoIG15ICRpICggJGllbmRfMiAuLiAkaXN0b3AgKSB7CiAgICAgICAgICAgICAgICBpZiAoICRuZXN0aW5nX2RlcHRoX3RvX2dvWyRpXSAhPSAkZGVwdGggKSB7CiAgICAgICAgICAgICAgICAgICAgJHR2Kys7CiAgICAgICAgICAgICAgICAgICAgbGFzdCBpZiAoICR0diA+IDIgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRkZXB0aCA9ICRuZXN0aW5nX2RlcHRoX3RvX2dvWyRpXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBkbyBub3QgcmVjb21iaW5lIGlmIHRvdGFsIGlzIG1vcmUgdGhhbiAyCiAgICAgICAgICAgICMgbGV2ZWwgY2hhbmdlcwogICAgICAgICAgICByZXR1cm4gaWYgKCAkdHYgPiAyICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAxOwogICAgfSAjIyBlbmQgc3ViIHNpbXBsZV9yaHMKCiAgICBzdWIgcmVjb21iaW5lX3NlY3Rpb25fMyB7CgogICAgICAgIG15ICggJHJpX2JlZywgJHJpX2VuZCwgJG4sICR0aGlzX2xpbmVfaXNfc2VtaWNvbG9uX3Rlcm1pbmF0ZWQgKSA9IEBfOwoKICAgICAgICAjIFJlY29tYmluZSBTZWN0aW9uIDM6CiAgICAgICAgIyBXZSBhcmUgY29tcGFyaW5nIHR3byBsaW5lcyB0byBzZWUgaWYgdGhleSBzaG91bGQgYmUgY29tYmluZWQKICAgICAgICAjIGludG8gYSBzaW5nbGUgbGluZS4gVGhpcyBzdWIgZXhhbWluZXMgdGhlIHRva2VuICckaWJlZ18yJyBpbgogICAgICAgICMgdGhlIGZvbGxvd2luZyBkaWFncmFtIChsZWZ0IGVuZCBvZiBzZWNvbmQgbGluZSBvZiBwYWlyKToKCiAgICAgICAgIyBIZXJlIGFyZSBJbmRleGVzIG9mIHRoZSBlbmRwb2ludCB0b2tlbnMgb2YgdGhlIHR3byBsaW5lczoKICAgICAgICAjCiAgICAgICAgIyAgLS0tLS1saW5lICRuLTEtLS0gfCAtLS0tLWxpbmUgJG4tLS0tLQogICAgICAgICMgICRpYmVnXzEgICAkaWVuZF8xIHwgJGliZWdfMiAgICRpZW5kXzIKICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgXgogICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tU2VjdGlvbiAzIGxvb2tzIGF0IHRoaXMgdG9rZW4KCiAgICAgICAgIyBSZXR1cm5zOgogICAgICAgICMgICAobm90aGluZykgICAgICAgICA9PiBkbyBub3Qgam9pbiBsaW5lcwogICAgICAgICMgICAxLCBic190d2VhayA9PiBvayB0byBqb2luIGxpbmVzCgogICAgICAgICMgJGJzdHdlYWsgaXMgYSBzbWFsbCB0b2xlcmFuY2UgdG8gYWRkIHRvIGJvbmQgc3RyZW5ndGhzCiAgICAgICAgbXkgJGJzX3R3ZWFrID0gMDsKCiAgICAgICAgbXkgJG5tYXggICA9IEB7JHJpX2VuZH0gLSAxOwogICAgICAgIG15ICRpYmVnXzEgPSAkcmlfYmVnLT5bICRuIC0gMSBdOwogICAgICAgIG15ICRpZW5kXzEgPSAkcmlfZW5kLT5bICRuIC0gMSBdOwogICAgICAgIG15ICRpZW5kXzIgPSAkcmlfZW5kLT5bJG5dOwogICAgICAgIG15ICRpYmVnXzIgPSAkcmlfYmVnLT5bJG5dOwoKICAgICAgICBteSAkaWJlZ18wICAgID0gJG4gPiAxICAgICAgICAgID8gJHJpX2JlZy0+WyAkbiAtIDIgXSA6IC0xOwogICAgICAgIG15ICRpYmVnXzMgICAgPSAkbiA8ICRubWF4ICAgICAgPyAkcmlfYmVnLT5bICRuICsgMSBdIDogLTE7CiAgICAgICAgbXkgJGliZWdfNCAgICA9ICRuICsgMiA8PSAkbm1heCA/ICRyaV9iZWctPlsgJG4gKyAyIF0gOiAtMTsKICAgICAgICBteSAkaWJlZ19ubWF4ID0gJHJpX2JlZy0+WyRubWF4XTsKCiAgICAgICAgbXkgJHR5cGVfaWVuZF8xID0gJHR5cGVzX3RvX2dvWyRpZW5kXzFdOwogICAgICAgIG15ICR0eXBlX2llbmRfMiA9ICR0eXBlc190b19nb1skaWVuZF8yXTsKICAgICAgICBteSAkdHlwZV9pYmVnXzEgPSAkdHlwZXNfdG9fZ29bJGliZWdfMV07CiAgICAgICAgbXkgJHR5cGVfaWJlZ18yID0gJHR5cGVzX3RvX2dvWyRpYmVnXzJdOwoKICAgICAgICAjIGhhbmRsZSBsaW5lcyB3aXRoIGxlYWRpbmcgJiYsIHx8CiAgICAgICAgaWYgKCAkaXNfYW1wX2FtcHskdHlwZV9pYmVnXzJ9ICkgewoKICAgICAgICAgICAgIyBvayB0byByZWNvbWJpbmUgaWYgaXQgZm9sbG93cyBhID8gb3IgOgogICAgICAgICAgICAjIGFuZCBpcyBmb2xsb3dlZCBieSBhbiBvcGVuIHBhcmVuLi4KICAgICAgICAgICAgbXkgJG9rID0KICAgICAgICAgICAgICAoICRpc190ZXJuYXJ5eyR0eXBlX2liZWdfMX0gJiYgJHRva2Vuc190b19nb1skaWVuZF8yXSBlcSAnKCcgKQoKICAgICAgICAgICAgICAjIG9yIGlzIGZvbGxvd2VkIGJ5IGEgPyBvciA6IGF0IHNhbWUgZGVwdGgKICAgICAgICAgICAgICAjCiAgICAgICAgICAgICAgIyBXZSBhcmUgbG9va2luZyBmb3Igc29tZXRoaW5nIGxpa2UgdGhpcy4gV2UgY2FuCiAgICAgICAgICAgICAgIyByZWNvbWJpbmUgdGhlICYmIGxpbmUgd2l0aCB0aGUgbGluZSBhYm92ZSB0byBtYWtlIHRoZQogICAgICAgICAgICAgICMgc3RydWN0dXJlIG1vcmUgY2xlYXI6CiAgICAgICAgICAgICAgIyAgcmV0dXJuCiAgICAgICAgICAgICAgIyAgICBleGlzdHMgJEctPntBdHRyfS0+e1Z9CiAgICAgICAgICAgICAgIyAgICAmJiBleGlzdHMgJEctPntBdHRyfS0+e1Z9LT57JHV9CiAgICAgICAgICAgICAgIyAgICA/ICV7ICRHLT57QXR0cn0tPntWfS0+eyR1fSB9CiAgICAgICAgICAgICAgIyAgICA6ICgpOwogICAgICAgICAgICAgICMKICAgICAgICAgICAgICAjIFdlIHNob3VsZCBwcm9iYWJseSBsZWF2ZSBzb21ldGhpbmcgbGlrZSB0aGlzIGFsb25lOgogICAgICAgICAgICAgICMgIHJldHVybgogICAgICAgICAgICAgICMgICAgICAgZXhpc3RzICRHLT57QXR0cn0tPntFfQogICAgICAgICAgICAgICMgICAgJiYgZXhpc3RzICRHLT57QXR0cn0tPntFfS0+eyR1fQogICAgICAgICAgICAgICMgICAgJiYgZXhpc3RzICRHLT57QXR0cn0tPntFfS0+eyR1fS0+eyR2fQogICAgICAgICAgICAgICMgICAgPyAleyAkRy0+e0F0dHJ9LT57RX0tPnskdX0tPnskdn0gfQogICAgICAgICAgICAgICMgICAgOiAoKTsKICAgICAgICAgICAgICAjIHNvIHRoYXQgd2UgZWl0aGVyIGhhdmUgYWxsIG9mIHRoZSAmJidzIChvciB8fCdzKQogICAgICAgICAgICAgICMgb24gb25lIGxpbmUsIGFzIGluIHRoZSBmaXJzdCBleGFtcGxlLCBvciBicmVhayBhdAogICAgICAgICAgICAgICMgZWFjaCBvbmUgYXMgaW4gdGhlIHNlY29uZCBleGFtcGxlLiAgSG93ZXZlciwgaXQKICAgICAgICAgICAgICAjIHNvbWV0aW1lcyBtYWtlcyB0aGluZ3Mgd29yc2UgdG8gY2hlY2sgZm9yIHRoaXMgYmVjYXVzZQogICAgICAgICAgICAgICMgaXQgcHJldmVudHMgbXVsdGlwbGUgcmVjb21iaW5hdGlvbnMuICBTbyB0aGlzIGlzIG5vdCBkb25lLgogICAgICAgICAgICAgIHx8ICggJGliZWdfMyA+PSAwCiAgICAgICAgICAgICAgICAmJiAkaXNfdGVybmFyeXsgJHR5cGVzX3RvX2dvWyRpYmVnXzNdIH0KICAgICAgICAgICAgICAgICYmICRuZXN0aW5nX2RlcHRoX3RvX2dvWyRpYmVnXzNdID09CiAgICAgICAgICAgICAgICAkbmVzdGluZ19kZXB0aF90b19nb1skaWJlZ18yXSApOwoKICAgICAgICAgICAgIyBDb21iaW5lIGEgdHJhaWxpbmcgJiYgdGVybSB3aXRoIGFuIHx8IHRlcm06IGZpeCBmb3IKICAgICAgICAgICAgIyBjMDYwIFRoaXMgaXMgcmFyZSBidXQgY2FuIGhhcHBlbi4KICAgICAgICAgICAgJG9rIHx8PSAxCiAgICAgICAgICAgICAgaWYgKCAkaWJlZ18zIDwgMAogICAgICAgICAgICAgICAgJiYgJHR5cGVfaWJlZ18yIGVxICcmJicKICAgICAgICAgICAgICAgICYmICR0eXBlX2liZWdfMSBlcSAnfHwnCiAgICAgICAgICAgICAgICAmJiAkbmVzdGluZ19kZXB0aF90b19nb1skaWJlZ18yXSA9PQogICAgICAgICAgICAgICAgJG5lc3RpbmdfZGVwdGhfdG9fZ29bJGliZWdfMV0gKTsKCiAgICAgICAgICAgIHJldHVybiBpZiAhJG9rICYmICR3YW50X2JyZWFrX2JlZm9yZXskdHlwZV9pYmVnXzJ9OwogICAgICAgICAgICAkZm9yY2VkX2JyZWFrcG9pbnRfdG9fZ29bJGllbmRfMV0gPSAwOwoKICAgICAgICAgICAgIyB0d2VhayB0aGUgYm9uZCBzdHJlbmd0aCB0byBnaXZlIHRoaXMgam9pbnQgcHJpb3JpdHkKICAgICAgICAgICAgIyBvdmVyID8gYW5kIDoKICAgICAgICAgICAgJGJzX3R3ZWFrID0gMC4yNTsKICAgICAgICB9CgogICAgICAgICMgSWRlbnRpZnkgYW5kIHJlY29tYmluZSBhIGJyb2tlbiA/LzogY2hhaW4KICAgICAgICBlbHNpZiAoICR0eXBlX2liZWdfMiBlcSAnPycgKSB7CgogICAgICAgICAgICAjIERvIG5vdCByZWNvbWJpbmUgZGlmZmVyZW50IGxldmVscwogICAgICAgICAgICBteSAkbGV2ID0gJGxldmVsc190b19nb1skaWJlZ18yXTsKICAgICAgICAgICAgcmV0dXJuIGlmICggJGxldiBuZSAkbGV2ZWxzX3RvX2dvWyRpYmVnXzFdICk7CgogICAgICAgICAgICAjIERvIG5vdCByZWNvbWJpbmUgYSAnPycgaWYgZWl0aGVyIG5leHQgbGluZSBvcgogICAgICAgICAgICAjIHByZXZpb3VzIGxpbmUgZG9lcyBub3Qgc3RhcnQgd2l0aCBhICc6Jy4gIFRoZSByZWFzb25zCiAgICAgICAgICAgICMgYXJlIHRoYXQgKDEpIG5vIGFsaWdubWVudCBvZiB0aGUgPyB3aWxsIGJlIHBvc3NpYmxlCiAgICAgICAgICAgICMgYW5kICgyKSB0aGUgZXhwcmVzc2lvbiBpcyBzb21ld2hhdCBjb21wbGV4LCBzbyB0aGUKICAgICAgICAgICAgIyAnPycgaXMgaGFyZGVyIHRvIHNlZSBpbiB0aGUgaW50ZXJpb3Igb2YgdGhlIGxpbmUuCiAgICAgICAgICAgIG15ICRmb2xsb3dzX2NvbG9uICA9ICRpYmVnXzEgPj0gMCAmJiAkdHlwZV9pYmVnXzEgZXEgJzonOwogICAgICAgICAgICBteSAkcHJlY2VkZXNfY29sb24gPSAkaWJlZ18zID49IDAgJiYgJHR5cGVzX3RvX2dvWyRpYmVnXzNdIGVxICc6JzsKICAgICAgICAgICAgcmV0dXJuIHVubGVzcyAoICRmb2xsb3dzX2NvbG9uIHx8ICRwcmVjZWRlc19jb2xvbiApOwoKICAgICAgICAgICAgIyB3ZSB3aWxsIGFsd2F5cyBjb21iaW5pbmcgYSA/IGxpbmUgZm9sbG93aW5nIGEgOiBsaW5lCiAgICAgICAgICAgIGlmICggISRmb2xsb3dzX2NvbG9uICkgewoKICAgICAgICAgICAgICAgICMgLi4ub3RoZXJ3aXNlIHJlY29tYmluZSBvbmx5IGlmIGl0IGxvb2tzIGxpa2UgYQogICAgICAgICAgICAgICAgIyBjaGFpbi4gIHdlIHdpbGwganVzdCBsb29rIGF0IGEgZmV3IG5lYXJieSBsaW5lcwogICAgICAgICAgICAgICAgIyB0byBzZWUgaWYgdGhpcyBsb29rcyBsaWtlIGEgY2hhaW4uCiAgICAgICAgICAgICAgICBteSAkbG9jYWxfY291bnQgPSAwOwogICAgICAgICAgICAgICAgZm9yZWFjaCBteSAkaWkgKCAkaWJlZ18wLCAkaWJlZ18xLCAkaWJlZ18zLCAkaWJlZ180ICkgewogICAgICAgICAgICAgICAgICAgICRsb2NhbF9jb3VudCsrCiAgICAgICAgICAgICAgICAgICAgICBpZiAkaWkgPj0gMAogICAgICAgICAgICAgICAgICAgICAgJiYgJHR5cGVzX3RvX2dvWyRpaV0gZXEgJzonCiAgICAgICAgICAgICAgICAgICAgICAmJiAkbGV2ZWxzX3RvX2dvWyRpaV0gPT0gJGxldjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBpZiAoICRsb2NhbF9jb3VudCA8PSAxICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGZvcmNlZF9icmVha3BvaW50X3RvX2dvWyRpZW5kXzFdID0gMDsKICAgICAgICB9CgogICAgICAgICMgZG8gbm90IHJlY29tYmluZSBsaW5lcyB3aXRoIGxlYWRpbmcgJy4nCiAgICAgICAgZWxzaWYgKCAkdHlwZV9pYmVnXzIgZXEgJy4nICkgewogICAgICAgICAgICBteSAkaV9uZXh0X25vbmJsYW5rID0gbWluKCAkaW5leHRfdG9fZ29bJGliZWdfMl0sICRpZW5kXzIgKTsKICAgICAgICAgICAgbXkgJHN1bW1lZF9sZW5fMSAgICA9ICRzdW1tZWRfbGVuZ3Roc190b19nb1sgJGllbmRfMSArIDEgXSAtCiAgICAgICAgICAgICAgJHN1bW1lZF9sZW5ndGhzX3RvX2dvWyRpYmVnXzFdOwogICAgICAgICAgICBteSAkc3VtbWVkX2xlbl8yID0gJHN1bW1lZF9sZW5ndGhzX3RvX2dvWyAkaWVuZF8yICsgMSBdIC0KICAgICAgICAgICAgICAkc3VtbWVkX2xlbmd0aHNfdG9fZ29bJGliZWdfMl07CgogICAgICAgICAgICBteSAkY29tYmluZV9vayA9ICgKCiAgICAgICAgICAgICAgICAjIC4uLiB1bmxlc3MgdGhlcmUgaXMganVzdCBvbmUgYW5kIHdlIGNhbiByZWR1Y2UKICAgICAgICAgICAgICAgICMgdGhpcyB0byB0d28gbGluZXMgaWYgd2UgZG8uICBGb3IgZXhhbXBsZSwgdGhpcwogICAgICAgICAgICAgICAgIwogICAgICAgICAgICAgICAgIwogICAgICAgICAgICAgICAgIyAgJGJvZHlBIC49CiAgICAgICAgICAgICAgICAjICAgICcoJGR1bW15LCAkcGF0KSA9ICZnZXRfbmV4dF90ZXhfY21kOycgLiAnJGFyZ3MgLj0gJHBhdDsnCiAgICAgICAgICAgICAgICAjCiAgICAgICAgICAgICAgICAjICBsb29rcyBiZXR0ZXIgdGhhbiB0aGlzOgogICAgICAgICAgICAgICAgIyAgJGJvZHlBIC49ICcoJGR1bW15LCAkcGF0KSA9ICZnZXRfbmV4dF90ZXhfY21kOycKICAgICAgICAgICAgICAgICMgICAgLiAnJGFyZ3MgLj0gJHBhdDsnCgogICAgICAgICAgICAgICAgKCAkbiA9PSAyICYmICRuID09ICRubWF4ICYmICR0eXBlX2liZWdfMSBuZSAkdHlwZV9pYmVnXzIgKQoKICAgICAgICAgICAgICAgICAgIyAuLi4gb3IgdGhpcyB3b3VsZCBzdHJhbmQgYSBzaG9ydCBxdW90ZSAsIGxpa2UgdGhpcwogICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgIC4gInNvbWUgbG9uZyBxdW90ZSIKICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAuICJcbiI7CiAgICAgICAgICAgICAgICAgIHx8ICgKICAgICAgICAgICAgICAgICAgICAgICAkdHlwZXNfdG9fZ29bJGlfbmV4dF9ub25ibGFua10gZXEgJ1EnCiAgICAgICAgICAgICAgICAgICAgJiYgJGlfbmV4dF9ub25ibGFuayA+PSAkaWVuZF8yIC0gMQogICAgICAgICAgICAgICAgICAgICYmICR0b2tlbl9sZW5ndGhzX3RvX2dvWyRpX25leHRfbm9uYmxhbmtdIDwKICAgICAgICAgICAgICAgICAgICAkck9wdHNfc2hvcnRfY29uY2F0ZW5hdGlvbl9pdGVtX2xlbmd0aAoKICAgICAgICAgICAgICAgICAgICAjICBhZGRpdGlvbmFsIGNvbnN0cmFpbnRzIHRvIGZpeCBjMTY3CiAgICAgICAgICAgICAgICAgICAgJiYgKAogICAgICAgICAgICAgICAgICAgICAgICAkdHlwZXNfdG9fZ29bJGllbmRfMV0gbmUgJ1EnCgogICAgICAgICAgICAgICAgICAgICAgICAjIGFsbG93IGEgdGVybSBzaG9ydGVyIHRoYW4gdGhlIHByZXZpb3VzIHRlcm0KICAgICAgICAgICAgICAgICAgICAgICAgfHwgJHN1bW1lZF9sZW5fMiA8ICRzdW1tZWRfbGVuXzEKCiAgICAgICAgICAgICAgICAgICAgICAgICMgb3IgYWxsb3cgYSBzaG9ydCBzZW1pY29sb24tdGVybWluYXRlZCB0ZXJtIGlmIHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgIyBtYWtlcyB0d28gbGluZXMgKHNlZSBjMTY5KQogICAgICAgICAgICAgICAgICAgICAgICB8fCAoICAgJG4gPT0gMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJG4gPT0gJG5tYXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICR0aGlzX2xpbmVfaXNfc2VtaWNvbG9uX3Rlcm1pbmF0ZWQgKQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuIGlmICggISRjb21iaW5lX29rICk7CgogICAgICAgICAgICAjIGFkZGVkIGZvciBpc3N1ZSBjMzUyCiAgICAgICAgICAgIGlmICgkdGhpc19saW5lX2lzX3NlbWljb2xvbl90ZXJtaW5hdGVkKSB7CiAgICAgICAgICAgICAgICAkZm9yY2VkX2JyZWFrcG9pbnRfdG9fZ29bJGllbmRfMV0gPSAwOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGhhbmRsZSBsZWFkaW5nIGtleXdvcmQuLgogICAgICAgIGVsc2lmICggJHR5cGVfaWJlZ18yIGVxICdrJyApIHsKCiAgICAgICAgICAgICMgaGFuZGxlIGxlYWRpbmcgIm9yIgogICAgICAgICAgICBpZiAoICR0b2tlbnNfdG9fZ29bJGliZWdfMl0gZXEgJ29yJyApIHsKCiAgICAgICAgICAgICAgICBteSAkY29tYmluZV9vayA9ICgKICAgICAgICAgICAgICAgICAgICAkdGhpc19saW5lX2lzX3NlbWljb2xvbl90ZXJtaW5hdGVkCiAgICAgICAgICAgICAgICAgICAgICAmJiAoCiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlX2liZWdfMSBlcSAnfScKICAgICAgICAgICAgICAgICAgICAgICAgfHwgKAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZm9sbG93aW5nICdpZicgb3IgJ3VubGVzcycgb3IgJ29yJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGVfaWJlZ18xIGVxICdrJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJGlzX2lmX3VubGVzc3sgJHRva2Vuc190b19nb1skaWJlZ18xXSB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbXBvcnRhbnQ6IG9ubHkgY29tYmluZSBhIHZlcnkgc2ltcGxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9yIHN0YXRlbWVudCBiZWNhdXNlIHRoZSBzdGVwIGJlbG93CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1heSBoYXZlIGNvbWJpbmVkIGEgdHJhaWxpbmcgJ2FuZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2l0aCB0aGlzIG9yLCBhbmQgd2UgZG8gbm90IHdhbnQgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlbiBjb21iaW5lIGV2ZXJ5dGhpbmcgdG9nZXRoZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICggJGllbmRfMiAtICRpYmVnXzIgPD0gNyApCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgcmV0dXJuIGlmICggISRjb21iaW5lX29rICk7CgogICAgICAgICAgICAgICAgI1g6IFJUICM4MTg1NAogICAgICAgICAgICAgICAgJGZvcmNlZF9icmVha3BvaW50X3RvX2dvWyRpZW5kXzFdID0gMAogICAgICAgICAgICAgICAgICBpZiAoICEkb2xkX2JyZWFrcG9pbnRfdG9fZ29bJGllbmRfMV0gKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBoYW5kbGUgbGVhZGluZyAnYW5kJyBhbmQgJ3hvcicKICAgICAgICAgICAgZWxzaWYgKCR0b2tlbnNfdG9fZ29bJGliZWdfMl0gZXEgJ2FuZCcKICAgICAgICAgICAgICAgIHx8ICR0b2tlbnNfdG9fZ29bJGliZWdfMl0gZXEgJ3hvcicgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgIyBEZWNpZGUgaWYgd2Ugd2lsbCBjb21iaW5lIGEgc2luZ2xlIHRlcm1pbmFsICdhbmQnCiAgICAgICAgICAgICAgICAjIGFmdGVyIGFuICdpZicgb3IgJ3VubGVzcycuCgogICAgICAgICAgICAgICAgIyAgICAgVGhpcyBsb29rcyBiZXN0IHdpdGggdGhlICdhbmQnIG9uIHRoZSBzYW1lCiAgICAgICAgICAgICAgICAjICAgICBsaW5lIGFzIHRoZSAnaWYnOgogICAgICAgICAgICAgICAgIwogICAgICAgICAgICAgICAgIyAgICAgICAgICRhID0gMQogICAgICAgICAgICAgICAgIyAgICAgICAgICAgaWYgJHNlY29uZHMgYW5kICRudSA8IDI7CiAgICAgICAgICAgICAgICAjCiAgICAgICAgICAgICAgICAjICAgICBCdXQgdGhpcyBsb29rcyBiZXR0ZXIgYXMgc2hvd246CiAgICAgICAgICAgICAgICAjCiAgICAgICAgICAgICAgICAjICAgICAgICAgJGEgPSAxCiAgICAgICAgICAgICAgICAjICAgICAgICAgICBpZiAhJHRoaXMtPntQYXJlbnRzfXskX30KICAgICAgICAgICAgICAgICMgICAgICAgICAgIG9yICR0aGlzLT57UGFyZW50c317JF99IGVxICRfOwogICAgICAgICAgICAgICAgIwogICAgICAgICAgICAgICAgbXkgJGNvbWJpbmVfb2sgPSAkdGhpc19saW5lX2lzX3NlbWljb2xvbl90ZXJtaW5hdGVkCiAgICAgICAgICAgICAgICAgICYmICgKCiAgICAgICAgICAgICAgICAgICAgIyBmb2xsb3dpbmcgJ2lmJyBvciAndW5sZXNzJyBvciAnb3InCiAgICAgICAgICAgICAgICAgICAgJHR5cGVfaWJlZ18xIGVxICdrJwogICAgICAgICAgICAgICAgICAgICYmICggICAkaXNfaWZfdW5sZXNzeyAkdG9rZW5zX3RvX2dvWyRpYmVnXzFdIH0KICAgICAgICAgICAgICAgICAgICAgICAgfHwgJHRva2Vuc190b19nb1skaWJlZ18xXSBlcSAnb3InICkKICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIHJldHVybiBpZiAoICEkY29tYmluZV9vayApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGhhbmRsZSBsZWFkaW5nICJpZiIgYW5kICJ1bmxlc3MiCiAgICAgICAgICAgIGVsc2lmICggJGlzX2lmX3VubGVzc3sgJHRva2Vuc190b19nb1skaWJlZ18yXSB9ICkgewoKICAgICAgICAgICAgICAgICMgQ29tYmluZSBzb21ldGhpbmcgbGlrZToKICAgICAgICAgICAgICAgICMgICAgbmV4dAogICAgICAgICAgICAgICAgIyAgICAgIGlmICggJGxhbmcgIX4gLyR7bH0kL2kgKTsKICAgICAgICAgICAgICAgICMgaW50bzoKICAgICAgICAgICAgICAgICMgICAgbmV4dCBpZiAoICRsYW5nICF+IC8ke2x9JC9pICk7CiAgICAgICAgICAgICAgICBteSAkY29tYmluZV9vayA9ICR0aGlzX2xpbmVfaXNfc2VtaWNvbG9uX3Rlcm1pbmF0ZWQKCiAgICAgICAgICAgICAgICAgICMgIHByZXZpb3VzIGxpbmUgYmVnaW5zIHdpdGggJ2FuZCcgb3IgJ29yJwogICAgICAgICAgICAgICAgICAmJiAkdHlwZV9pYmVnXzEgZXEgJ2snCiAgICAgICAgICAgICAgICAgICYmICRpc19hbmRfb3J7ICR0b2tlbnNfdG9fZ29bJGliZWdfMV0gfTsKICAgICAgICAgICAgICAgIHJldHVybiBpZiAoICEkY29tYmluZV9vayApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGhhbmRsZSBhbGwgb3RoZXIgbGVhZGluZyBrZXl3b3JkcwogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIGtleXdvcmRzIGxvb2sgYmVzdCBhdCBzdGFydCBvZiBsaW5lcywKICAgICAgICAgICAgICAgICMgYnV0IGNvbWJpbmUgdGhpbmdzIGxpa2UgIjEgd2hpbGUiCiAgICAgICAgICAgICAgICBpZiAoICEkaXNfYXNzaWdubWVudHskdHlwZV9pZW5kXzF9ICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgICAgICAgaWYgKCAoICR0eXBlX2llbmRfMSBuZSAnaycgKQogICAgICAgICAgICAgICAgICAgICAgICAmJiAoICR0b2tlbnNfdG9fZ29bJGliZWdfMl0gbmUgJ3doaWxlJyApICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc2ltaWxhciB0cmVhdG1lbnQgb2YgJiYgYW5kIHx8IGFzIGFib3ZlIGZvciAnYW5kJyBhbmQKICAgICAgICAjICdvcic6IE5PVEU6IFRoaXMgYmxvY2sgb2YgY29kZSBpcyBjdXJyZW50bHkgYnlwYXNzZWQKICAgICAgICAjIGJlY2F1c2Ugb2YgYSBwcmV2aW91cyBibG9jayBidXQgaXMgcmV0YWluZWQgZm9yIHBvc3NpYmxlCiAgICAgICAgIyBmdXR1cmUgdXNlLgogICAgICAgIGVsc2lmICggJGlzX2FtcF9hbXB7JHR5cGVfaWJlZ18yfSApIHsKCiAgICAgICAgICAgICMgbWF5YmUgbG9va2luZyBhdCBzb21ldGhpbmcgbGlrZToKICAgICAgICAgICAgIyB1bmxlc3MgJFRFWFRPTkxZIHx8ICRpdGVtID1+IG0lPC8/KGhyPnxwPnxhfGltZyklaTsKICAgICAgICAgICAgbXkgJGNvbWJpbmVfb2sgPSAkdGhpc19saW5lX2lzX3NlbWljb2xvbl90ZXJtaW5hdGVkCgogICAgICAgICAgICAgICMgcHJldmlvdXMgbGluZSBiZWdpbnMgd2l0aCBhbiAnaWYnIG9yICd1bmxlc3MnCiAgICAgICAgICAgICAgIyBrZXl3b3JkCiAgICAgICAgICAgICAgJiYgJHR5cGVfaWJlZ18xIGVxICdrJwogICAgICAgICAgICAgICYmICRpc19pZl91bmxlc3N7ICR0b2tlbnNfdG9fZ29bJGliZWdfMV0gfTsKCiAgICAgICAgICAgIHJldHVybiBpZiAoICEkY29tYmluZV9vayApOwogICAgICAgIH0KCiAgICAgICAgIyBoYW5kbGUgbGluZSB3aXRoIGxlYWRpbmcgPSBvciBzaW1pbGFyCiAgICAgICAgZWxzaWYgKCAkaXNfYXNzaWdubWVudHskdHlwZV9pYmVnXzJ9ICkgewogICAgICAgICAgICByZXR1cm4gdW5sZXNzICggJG4gPT0gMSB8fCAkbiA9PSAkbm1heCApOwogICAgICAgICAgICByZXR1cm4gaWYgKCAkb2xkX2JyZWFrcG9pbnRfdG9fZ29bJGllbmRfMV0gKTsKICAgICAgICAgICAgbXkgJGNvbWJpbmVfb2sgPSAoCgogICAgICAgICAgICAgICAgIyBpZiB3ZSBjYW4gcmVkdWNlIHRoaXMgdG8gdHdvIGxpbmVzCiAgICAgICAgICAgICAgICAkbm1heCA9PSAyCgogICAgICAgICAgICAgICAgICAjIG9yIHRocmVlIGxpbmVzLCB0aGUgbGFzdCB3aXRoIGEgbGVhZGluZyBzZW1pY29sb24KICAgICAgICAgICAgICAgICAgfHwgKCAkbm1heCA9PSAzICYmICR0eXBlc190b19nb1skaWJlZ19ubWF4XSBlcSAnOycgKQoKICAgICAgICAgICAgICAgICAgIyBvciB0aGUgbmV4dCBsaW5lIGVuZHMgd2l0aCBhIGhlcmUgZG9jCiAgICAgICAgICAgICAgICAgIHx8ICR0eXBlX2llbmRfMiBlcSAnaCcKCiAgICAgICAgICAgICAgICAgICMgb3IgdGhpcyBpcyBhIHNob3J0IGxpbmUgZW5kaW5nIGluIDsKICAgICAgICAgICAgICAgICAgfHwgKCAkbiA9PSAkbm1heAogICAgICAgICAgICAgICAgICAgICYmICR0aGlzX2xpbmVfaXNfc2VtaWNvbG9uX3Rlcm1pbmF0ZWQgKQogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm4gaWYgKCAhJGNvbWJpbmVfb2sgKTsKICAgICAgICAgICAgJGZvcmNlZF9icmVha3BvaW50X3RvX2dvWyRpZW5kXzFdID0gMDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgIH0KICAgICAgICByZXR1cm4gKCAxLCAkYnNfdHdlYWsgKTsKICAgIH0gIyMgZW5kIHN1YiByZWNvbWJpbmVfc2VjdGlvbl8zCgp9ICMjIGVuZCBjbG9zdXJlIHJlY29tYmluZV9icmVha3BvaW50cwoKc3ViIGluc2VydF9maW5hbF90ZXJuYXJ5X2JyZWFrcyB7CgogICAgbXkgKCAkc2VsZiwgJHJpX2xlZnQsICRyaV9yaWdodCApID0gQF87CgogICAgIyBDYWxsZWQgb25jZSBwZXIgYmF0Y2ggdG8gbG9vayBmb3IgYW5kIGRvIGFueSBmaW5hbCBsaW5lIGJyZWFrcyBmb3IKICAgICMgbG9uZyB0ZXJuYXJ5IGNoYWlucwogICAgIyBHaXZlbjoKICAgICMgICAkcmlfbGVmdCA9IHJlZiB0byBhcnJheSB3aXRoIHRva2VuIGluZGV4ZXMgb2YgdGhlIGxlZnQgbGluZSBlbmRzCiAgICAjICAgJHJpX3JpZ2h0ID0gcmVmIHRvIGFycmF5IHdpdGggdG9rZW4gaW5kZXhlcyBvZiB0aGUgcmlnaHQgbGluZSBlbmRzCgogICAgbXkgJG5tYXggPSBAeyRyaV9yaWdodH0gLSAxOwoKICAgICMgc2NhbiB0aGUgbGVmdCBhbmQgcmlnaHQgZW5kIHRva2VucyBvZiBhbGwgbGluZXMKICAgIG15ICRpX2ZpcnN0X2NvbG9uID0gLTE7CiAgICBmb3IgbXkgJG4gKCAwIC4uICRubWF4ICkgewogICAgICAgIG15ICRpbCAgICA9ICRyaV9sZWZ0LT5bJG5dOwogICAgICAgIG15ICRpciAgICA9ICRyaV9yaWdodC0+WyRuXTsKICAgICAgICBteSAkdHlwZWwgPSAkdHlwZXNfdG9fZ29bJGlsXTsKICAgICAgICBteSAkdHlwZXIgPSAkdHlwZXNfdG9fZ29bJGlyXTsKICAgICAgICByZXR1cm4gaWYgKCAkdHlwZWwgZXEgJz8nICk7CiAgICAgICAgcmV0dXJuIGlmICggJHR5cGVyIGVxICc/JyApOwogICAgICAgIGlmICggJHR5cGVsIGVxICc6JyApIHsgJGlfZmlyc3RfY29sb24gPSAkaWw7IGxhc3Q7IH0KICAgICAgICBpZiAoICR0eXBlciBlcSAnOicgKSB7ICRpX2ZpcnN0X2NvbG9uID0gJGlyOyBsYXN0OyB9CiAgICB9CgogICAgIyBGb3IgbG9uZyB0ZXJuYXJ5IGNoYWlucywKICAgICMgaWYgdGhlIGZpcnN0IDogd2Ugc2VlIGhhcyBpdHMgPyBpcyBpbiB0aGUgaW50ZXJpb3IKICAgICMgb2YgYSBwcmVjZWRpbmcgbGluZSwgdGhlbiBzZWUgaWYgdGhlcmUgYXJlIGFueSBnb29kCiAgICAjIGJyZWFrcG9pbnRzIGJlZm9yZSB0aGUgPy4KICAgIGlmICggJGlfZmlyc3RfY29sb24gPiAwICkgewogICAgICAgIG15ICRpX3F1ZXN0aW9uID0gJG1hdGVfaW5kZXhfdG9fZ29bJGlfZmlyc3RfY29sb25dOwogICAgICAgIGlmICggZGVmaW5lZCgkaV9xdWVzdGlvbikgJiYgJGlfcXVlc3Rpb24gPiAwICkgewogICAgICAgICAgICBteSBAaW5zZXJ0X2xpc3Q7CiAgICAgICAgICAgIGZvcmVhY2ggbXkgJGlpICggcmV2ZXJzZSggMCAuLiAkaV9xdWVzdGlvbiAtIDEgKSApIHsKICAgICAgICAgICAgICAgIG15ICR0b2tlbiA9ICR0b2tlbnNfdG9fZ29bJGlpXTsKICAgICAgICAgICAgICAgIG15ICR0eXBlICA9ICR0eXBlc190b19nb1skaWldOwoKICAgICAgICAgICAgICAgICMgRm9yIG5vdywgYSBnb29kIGJyZWFrIGlzIGVpdGhlciBhIGNvbW1hIG9yLAogICAgICAgICAgICAgICAgIyBpbiBhIGxvbmcgY2hhaW4sIGEgJ3JldHVybicuCiAgICAgICAgICAgICAgICAjIFBhdGNoIGZvciBSVCAjMTI2NjMzOiBhZGRlZCB0aGUgJG5tYXg+MSBjaGVjayB0byBhdm9pZAogICAgICAgICAgICAgICAgIyBicmVha2luZyBhZnRlciBhIHJldHVybiBmb3IgYSBzaW1wbGUgdGVybmFyeS4gIEZvciBsb25nZXIKICAgICAgICAgICAgICAgICMgY2hhaW5zIHRoZSBicmVhayBhZnRlciByZXR1cm4gYWxsb3dzIHZlcnRpY2FsIGFsaWdubWVudCwgc28KICAgICAgICAgICAgICAgICMgaXQgaXMgc3RpbGwgZG9uZS4gIFNvIHBlcmx0aWR5IC13YmE9Jz8nIHdpbGwgbm90IGJyZWFrCiAgICAgICAgICAgICAgICAjIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSByZXR1cm4gaW4gdGhlIGZvbGxvd2luZyBzdGF0ZW1lbnQ6CiAgICAgICAgICAgICAgICAjIHN1YiB4IHsKICAgICAgICAgICAgICAgICMgICAgcmV0dXJuIDAgPyAnYWFhYWFhYWFhYWFhYWFhYWFhYWFhJyA6CiAgICAgICAgICAgICAgICAjICAgICAgJ2JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiJzsKICAgICAgICAgICAgICAgICMgfQogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgZXEgJywnCiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICR0eXBlIGVxICdrJyAmJiAoICRubWF4ID4gMSAmJiAkdG9rZW4gZXEgJ3JldHVybicgKQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAmJiAkc2VsZi0+aW5fc2FtZV9jb250YWluZXJfaSggJGlpLCAkaV9xdWVzdGlvbiApCiAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBpbnNlcnRfbGlzdCwgJGlpOwogICAgICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaW5zZXJ0IGFueSBuZXcgYnJlYWsgcG9pbnRzCiAgICAgICAgICAgIGlmIChAaW5zZXJ0X2xpc3QpIHsKICAgICAgICAgICAgICAgICRzZWxmLT5pbnNlcnRfYWRkaXRpb25hbF9icmVha3MoIFxAaW5zZXJ0X2xpc3QsICRyaV9sZWZ0LAogICAgICAgICAgICAgICAgICAgICRyaV9yaWdodCApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgaW5zZXJ0X2ZpbmFsX3Rlcm5hcnlfYnJlYWtzCgpzdWIgaW5zZXJ0X2JyZWFrc19iZWZvcmVfbGlzdF9vcGVuaW5nX2NvbnRhaW5lcnMgewoKICAgIG15ICggJHNlbGYsICRyaV9sZWZ0LCAkcmlfcmlnaHQgKSA9IEBfOwoKICAgICMgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBvbmNlIHBlciBiYXRjaCB0byBpbXBsZW1lbnQgdGhlIHBhcmFtZXRlcnMKICAgICMgLS1icmVhay1iZWZvcmUtaGFzaC1icmFjZSwgZXRjLgoKICAgICMgR2l2ZW46CiAgICAjICAgJHJpX2xlZnQgPSByZWYgdG8gYXJyYXkgd2l0aCB0b2tlbiBpbmRleGVzIG9mIHRoZSBsZWZ0IGxpbmUgZW5kcwogICAgIyAgICRyaV9yaWdodCA9IHJlZiB0byBhcnJheSB3aXRoIHRva2VuIGluZGV4ZXMgb2YgdGhlIHJpZ2h0IGxpbmUgZW5kcwoKICAgICMgTm90aGluZyB0byBkbyBpZiBub25lIG9mIHRoZXNlIHBhcmFtZXRlcnMgaGFzIGJlZW4gc2V0CiAgICByZXR1cm4gdW5sZXNzICVicmVha19iZWZvcmVfY29udGFpbmVyX3R5cGVzOwoKICAgIG15ICRubWF4ID0gQHskcmlfcmlnaHR9IC0gMTsKICAgIHJldHVybiBpZiAoICRubWF4IDwgMCApOwoKICAgIG15ICRyTEwgPSAkc2VsZi0+W19yTExfXTsKCiAgICBteSAkcmJyZWFrX2JlZm9yZV9jb250YWluZXJfYnlfc2Vxbm8gPQogICAgICAkc2VsZi0+W19yYnJlYWtfYmVmb3JlX2NvbnRhaW5lcl9ieV9zZXFub19dOwogICAgbXkgJHJLX3dlbGRfbGVmdCA9ICRzZWxmLT5bX3JLX3dlbGRfbGVmdF9dOwoKICAgICMgc2NhbiB0aGUgZW5kcyBvZiBhbGwgbGluZXMKICAgIG15IEBpbnNlcnRfbGlzdDsKICAgIGZvciBteSAkbiAoIDAgLi4gJG5tYXggKSB7CiAgICAgICAgbXkgJGlsID0gJHJpX2xlZnQtPlskbl07CiAgICAgICAgbXkgJGlyID0gJHJpX3JpZ2h0LT5bJG5dOwogICAgICAgIG5leHQgaWYgKCAkaXIgPD0gJGlsICk7CiAgICAgICAgbXkgJEtsICAgICAgID0gJEtfdG9fZ29bJGlsXTsKICAgICAgICBteSAkS3IgICAgICAgPSAkS190b19nb1skaXJdOwogICAgICAgIG15ICRLZW5kICAgICA9ICRLcjsKICAgICAgICBteSAkdHlwZV9lbmQgPSAkckxMLT5bJEtyXS0+W19UWVBFX107CgogICAgICAgICMgQmFja3VwIGJlZm9yZSBhbnkgc2lkZSBjb21tZW50CiAgICAgICAgaWYgKCAkdHlwZV9lbmQgZXEgJyMnICkgewogICAgICAgICAgICAkS2VuZCA9ICRzZWxmLT5LX3ByZXZpb3VzX25vbmJsYW5rKCRLcik7CiAgICAgICAgICAgIG5leHQgdW5sZXNzIGRlZmluZWQoJEtlbmQpOwogICAgICAgICAgICAkdHlwZV9lbmQgPSAkckxMLT5bJEtlbmRdLT5bX1RZUEVfXTsKICAgICAgICB9CgogICAgICAgICMgQmFja3VwIHRvIHRoZSBzdGFydCBvZiBhbnkgd2VsZDsgZml4IGZvciBiMTE3My4KICAgICAgICBpZiAoJHRvdGFsX3dlbGRfY291bnQpIHsKICAgICAgICAgICAgbXkgJEtlbmRfdGVzdCA9ICRyS193ZWxkX2xlZnQtPnskS2VuZH07CiAgICAgICAgICAgIGlmICggZGVmaW5lZCgkS2VuZF90ZXN0KSAmJiAkS2VuZF90ZXN0ID4gJEtsICkgewogICAgICAgICAgICAgICAgJEtlbmQgICAgICA9ICRLZW5kX3Rlc3Q7CiAgICAgICAgICAgICAgICAkS2VuZF90ZXN0ID0gJHJLX3dlbGRfbGVmdC0+eyRLZW5kfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBEbyBub3QgYnJlYWsgaWYgd2UgZGlkIG5vdCBiYWNrIHVwIHRvIHRoZSBzdGFydCBvZiBhIHdlbGQKICAgICAgICAgICAgIyAoc2hvdWxkbid0IGhhcHBlbikKICAgICAgICAgICAgbmV4dCBpZiAoIGRlZmluZWQoJEtlbmRfdGVzdCkgKTsKICAgICAgICB9CgogICAgICAgIG15ICR0b2tlbiA9ICRyTEwtPlskS2VuZF0tPltfVE9LRU5fXTsKICAgICAgICBuZXh0IGlmICggISRpc19vcGVuaW5nX3Rva2VueyR0b2tlbn0gKTsKICAgICAgICBuZXh0IGlmICggJEtsID49ICRLZW5kIC0gMSApOwoKICAgICAgICBteSAkc2Vxbm8gPSAkckxMLT5bJEtlbmRdLT5bX1RZUEVfU0VRVUVOQ0VfXTsKICAgICAgICBuZXh0IGlmICggIWRlZmluZWQoJHNlcW5vKSApOwoKICAgICAgICAjIFVzZSB0aGUgZmxhZyB3aGljaCB3YXMgcHJldmlvdXNseSBzZXQKICAgICAgICBuZXh0IHVubGVzcyAoICRyYnJlYWtfYmVmb3JlX2NvbnRhaW5lcl9ieV9zZXFuby0+eyRzZXFub30gKTsKCiAgICAgICAgIyBJbnN0YWxsIGEgYnJlYWsgYmVmb3JlIHRoaXMgb3BlbmluZyB0b2tlbi4KICAgICAgICBteSAkS2JyZWFrID0gJHNlbGYtPktfcHJldmlvdXNfbm9uYmxhbmsoJEtlbmQpOwogICAgICAgIG15ICRpYnJlYWsgPSAkS2JyZWFrIC0gJEtsICsgJGlsOwogICAgICAgIG5leHQgaWYgKCAkaWJyZWFrIDwgJGlsICk7CiAgICAgICAgbmV4dCBpZiAoICRub2JyZWFrX3RvX2dvWyRpYnJlYWtdICk7CiAgICAgICAgcHVzaCBAaW5zZXJ0X2xpc3QsICRpYnJlYWs7CiAgICB9CgogICAgIyBpbnNlcnQgYW55IG5ldyBicmVhayBwb2ludHMKICAgIGlmIChAaW5zZXJ0X2xpc3QpIHsKICAgICAgICAkc2VsZi0+aW5zZXJ0X2FkZGl0aW9uYWxfYnJlYWtzKCBcQGluc2VydF9saXN0LCAkcmlfbGVmdCwgJHJpX3JpZ2h0ICk7CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBpbnNlcnRfYnJlYWtzX2JlZm9yZV9saXN0X29wZW5pbmdfY29udGFpbmVycwoKc3ViIG5vdGVfYWRkZWRfc2VtaWNvbG9uIHsKICAgIG15ICggJHNlbGYsICRsaW5lX251bWJlciApID0gQF87CiAgICAkc2VsZi0+W19sYXN0X2FkZGVkX3NlbWljb2xvbl9hdF9dID0gJGxpbmVfbnVtYmVyOwogICAgaWYgKCAkc2VsZi0+W19hZGRlZF9zZW1pY29sb25fY291bnRfXSA9PSAwICkgewogICAgICAgICRzZWxmLT5bX2ZpcnN0X2FkZGVkX3NlbWljb2xvbl9hdF9dID0gJGxpbmVfbnVtYmVyOwogICAgfQogICAgJHNlbGYtPltfYWRkZWRfc2VtaWNvbG9uX2NvdW50X10rKzsKICAgIHdyaXRlX2xvZ2ZpbGVfZW50cnkoIkFkZGVkICc7JyBoZXJlXG4iKTsKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIG5vdGVfYWRkZWRfc2VtaWNvbG9uCgpzdWIgbm90ZV9kZWxldGVkX3NlbWljb2xvbiB7CiAgICBteSAoICRzZWxmLCAkbGluZV9udW1iZXIgKSA9IEBfOwogICAgJHNlbGYtPltfbGFzdF9kZWxldGVkX3NlbWljb2xvbl9hdF9dID0gJGxpbmVfbnVtYmVyOwogICAgaWYgKCAkc2VsZi0+W19kZWxldGVkX3NlbWljb2xvbl9jb3VudF9dID09IDAgKSB7CiAgICAgICAgJHNlbGYtPltfZmlyc3RfZGVsZXRlZF9zZW1pY29sb25fYXRfXSA9ICRsaW5lX251bWJlcjsKICAgIH0KICAgICRzZWxmLT5bX2RlbGV0ZWRfc2VtaWNvbG9uX2NvdW50X10rKzsKICAgIHdyaXRlX2xvZ2ZpbGVfZW50cnkoIkRlbGV0ZWQgdW5uZWNlc3NhcnkgJzsnIGF0IGxpbmUgJGxpbmVfbnVtYmVyXG4iKTsKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIG5vdGVfZGVsZXRlZF9zZW1pY29sb24KCnN1YiBub3RlX2VtYmVkZGVkX3RhYiB7CiAgICBteSAoICRzZWxmLCAkbGluZV9udW1iZXIgKSA9IEBfOwogICAgJHNlbGYtPltfZW1iZWRkZWRfdGFiX2NvdW50X10rKzsKICAgICRzZWxmLT5bX2xhc3RfZW1iZWRkZWRfdGFiX2F0X10gPSAkbGluZV9udW1iZXI7CiAgICBpZiAoICEkc2VsZi0+W19maXJzdF9lbWJlZGRlZF90YWJfYXRfXSApIHsKICAgICAgICAkc2VsZi0+W19maXJzdF9lbWJlZGRlZF90YWJfYXRfXSA9ICRsaW5lX251bWJlcjsKICAgIH0KCiAgICBpZiAoICRzZWxmLT5bX2VtYmVkZGVkX3RhYl9jb3VudF9dIDw9IE1BWF9OQUdfTUVTU0FHRVMgKSB7CiAgICAgICAgd3JpdGVfbG9nZmlsZV9lbnRyeSgiRW1iZWRkZWQgdGFicyBpbiBxdW90ZSBvciBwYXR0ZXJuXG4iKTsKICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIG5vdGVfZW1iZWRkZWRfdGFiCgp1c2UgY29uc3RhbnQgREVCVUdfQ09SUkVDVF9MUCA9PiAwOwoKc3ViIGNvcnJlY3RfbHBfaW5kZW50YXRpb24gewoKICAgIG15ICgkc2VsZikgPSBAXzsKCiAgICAjIFdoZW4gdGhlIC1scCBvcHRpb24gaXMgdXNlZCwgd2UgbmVlZCB0byBtYWtlIGEgbGFzdCBwYXNzIHRocm91Z2gKICAgICMgZWFjaCBsaW5lIHRvIGNvcnJlY3QgdGhlIGluZGVudGF0aW9uIHBvc2l0aW9ucyBpbiBjYXNlIHRoZXkgZGlmZmVyCiAgICAjIGZyb20gdGhlIHByZWRpY3Rpb25zLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBwZXJsdGlkeSB1c2VzIGEKICAgICMgcHJlZGljdG9yL2NvcnJlY3RvciBtZXRob2QgZm9yIGFsaWduaW5nIHdpdGggb3BlbmluZyBwYXJlbnMuICBUaGUKICAgICMgcHJlZGljdG9yIGlzIHVzdWFsbHkgZ29vZCwgYnV0IHNvbWV0aW1lcyBzdHVtYmxlcy4gIFRoZSBjb3JyZWN0b3IKICAgICMgdHJpZXMgdG8gcGF0Y2ggdGhpbmdzIHVwIG9uY2UgdGhlIGFjdHVhbCBvcGVuaW5nIHBhcmVuIGxvY2F0aW9ucwogICAgIyBhcmUga25vd24uCgogICAgbXkgJHRoaXNfYmF0Y2ggPSAkc2VsZi0+W190aGlzX2JhdGNoX107CgogICAgbXkgJHJpX2ZpcnN0ID0gJHRoaXNfYmF0Y2gtPltfcmlfZmlyc3RfXTsKICAgIG15ICRyaV9sYXN0ICA9ICR0aGlzX2JhdGNoLT5bX3JpX2xhc3RfXTsKCiAgICAjIGZpcnN0IHJlbW92ZSBjb250aW51YXRpb24gaW5kZW50YXRpb24gaWYgYXBwcm9wcmlhdGUKICAgIG15ICRtYXhfbGluZSA9IEB7JHJpX2ZpcnN0fSAtIDE7CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBQQVNTIDE6IHJlZHVjZSBpbmRlbnRhdGlvbiBpZiBuZWNlc3NhcnkgYXQgYW55IGxvbmcgb25lLWxpbmUgYmxvY2tzIChjMDk4KQogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICMgVGhlIHBvaW50IGlzIHRoYXQgc3ViICdzdGFydGluZ19vbmVfbGluZV9ibG9jaycgbWFkZSBvbmUtbGluZSBibG9ja3MgYmFzZWQKICAgICMgb24gZGVmYXVsdCBpbmRlbnRhdGlvbiwgbm90IC1scCBpbmRlbnRhdGlvbi4gU28gc29tZSBvZiB0aGUgb25lLWxpbmUKICAgICMgYmxvY2tzIG1heSBiZSB0b28gbG9uZyB3aGVuIGdpdmVuIC1scCBpbmRlbnRhdGlvbi4gIFdlIHdpbGwgZml4IHRoYXQgbm93CiAgICAjIGlmIHBvc3NpYmxlLCB1c2luZyB0aGUgbGlzdCBvZiB0aGVzZSBjbG9zaW5nIGJsb2NrIGluZGV4ZXMuCiAgICBteSAkcmlfc3RhcnRpbmdfb25lX2xpbmVfYmxvY2sgPQogICAgICAkdGhpc19iYXRjaC0+W19yaV9zdGFydGluZ19vbmVfbGluZV9ibG9ja19dOwogICAgaWYgKCBAeyRyaV9zdGFydGluZ19vbmVfbGluZV9ibG9ja30gKSB7CiAgICAgICAgJHNlbGYtPmNvcnJlY3RfbHBfaW5kZW50YXRpb25fcGFzc18xKCAkcmlfZmlyc3QsICRyaV9sYXN0LAogICAgICAgICAgICAkcmlfc3RhcnRpbmdfb25lX2xpbmVfYmxvY2sgKTsKICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBQQVNTIDI6IGxvb2sgZm9yIGFuZCBmaXggb3RoZXIgcHJvYmxlbXMgaW4gZWFjaCBsaW5lIG9mIHRoaXMgYmF0Y2gKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgIyBsb29rIGF0IGVhY2ggb3V0cHV0IGxpbmUgLi4uCiAgICBmb3JlYWNoIG15ICRsaW5lICggMCAuLiAkbWF4X2xpbmUgKSB7CiAgICAgICAgbXkgJGliZWcgPSAkcmlfZmlyc3QtPlskbGluZV07CiAgICAgICAgbXkgJGllbmQgPSAkcmlfbGFzdC0+WyRsaW5lXTsKCiAgICAgICAgIyBsb29raW5nIGF0IGVhY2ggdG9rZW4gaW4gdGhpcyBvdXRwdXQgbGluZSAuLi4KICAgICAgICBmb3JlYWNoIG15ICRpICggJGliZWcgLi4gJGllbmQgKSB7CgogICAgICAgICAgICAjIEhvdyBtYW55IHNwYWNlIGNoYXJhY3RlcnMgdG8gcGxhY2UgYmVmb3JlIHRoaXMgdG9rZW4KICAgICAgICAgICAgIyBmb3Igc3BlY2lhbCBhbGlnbm1lbnQuICBBY3R1YWwgcGFkZGluZyBpcyBkb25lIGluIHRoZQogICAgICAgICAgICAjIGNvbnRpbnVlIGJsb2NrLgoKICAgICAgICAgICAgIyBsb29raW5nIGZvciBuZXh0IHVudmlzaXRlZCBpbmRlbnRhdGlvbiBpdGVtIC4uLgogICAgICAgICAgICBteSAkaW5kZW50YXRpb24gPSAkbGVhZGluZ19zcGFjZXNfdG9fZ29bJGldOwoKICAgICAgICAgICAgIyBUaGlzIGlzIGp1c3QgZm9yIGluZGVudGF0aW9uIG9iamVjdHMgKGMwOTgpCiAgICAgICAgICAgIG5leHQgdW5sZXNzICggcmVmKCRpbmRlbnRhdGlvbikgKTsKCiAgICAgICAgICAgICMgVmlzaXQgZWFjaCBpbmRlbnRhdGlvbiBvYmplY3QganVzdCBvbmNlCiAgICAgICAgICAgIG5leHQgaWYgKCAkaW5kZW50YXRpb24tPmdldF9tYXJrZWQoKSApOwoKICAgICAgICAgICAgIyBNYXJrIGZpcnN0IHZpc2l0CiAgICAgICAgICAgICRpbmRlbnRhdGlvbi0+c2V0X21hcmtlZCgxKTsKCiAgICAgICAgICAgICMgU2tpcCBpbmRlbnRhdGlvbiBvYmplY3RzIHdoaWNoIGRvIG5vdCBhbGlnbiB3aXRoIGNvbnRhaW5lciB0b2tlbnMKICAgICAgICAgICAgbXkgJGFsaWduX3NlcW5vID0gJGluZGVudGF0aW9uLT5nZXRfYWxpZ25fc2Vxbm8oKTsKICAgICAgICAgICAgbmV4dCB1bmxlc3MgKCRhbGlnbl9zZXFubyk7CgogICAgICAgICAgICAjIFNraXAgYSBjb250YWluZXIgd2hpY2ggaXMgZW50aXJlbHkgb24gdGhpcyBsaW5lCiAgICAgICAgICAgIG15ICRLbyA9ICRzZWxmLT5bX0tfb3BlbmluZ19jb250YWluZXJfXS0+eyRhbGlnbl9zZXFub307CiAgICAgICAgICAgIG15ICRLYyA9ICRzZWxmLT5bX0tfY2xvc2luZ19jb250YWluZXJfXS0+eyRhbGlnbl9zZXFub307CiAgICAgICAgICAgIGlmICggZGVmaW5lZCgkS28pICYmIGRlZmluZWQoJEtjKSApIHsKICAgICAgICAgICAgICAgIG5leHQgaWYgKCAkS28gPj0gJEtfdG9fZ29bJGliZWddICYmICRLYyA8PSAkS190b19nb1skaWVuZF0gKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyAgTm90ZSBvbiBmbGFnICckZG9fbm90X3BhZCc6CiAgICAgICAgICAgICMgIFdlIHdhbnQgdG8gYXZvaWQgYSBzaXR1YXRpb24gbGlrZSB0aGlzLCB3aGVyZSB0aGUgYWxpZ25lcgogICAgICAgICAgICAjICBpbnNlcnRzIHdoaXRlc3BhY2UgYmVmb3JlIHRoZSAnPScgdG8gYWxpZ24gaXQgd2l0aCBhIHByZXZpb3VzCiAgICAgICAgICAgICMgICc9JywgYmVjYXVzZSBvdGhlcndpc2UgdGhlIHBhcmVucyBtaWdodCBiZWNvbWUgbWlzLWFsaWduZWQgaW4gYQogICAgICAgICAgICAjICBzaXR1YXRpb24gbGlrZSB0aGlzLCB3aGVyZSB0aGUgJz0nIGhhcyBiZWNvbWUgYWxpZ25lZCB3aXRoIHRoZQogICAgICAgICAgICAjICBwcmV2aW91cyBsaW5lLCBwdXNoaW5nIHRoZSBvcGVuaW5nICcoJyBmb3J3YXJkIGJleW9uZCB3aGVyZSB3ZQogICAgICAgICAgICAjICB3YW50IGl0LgogICAgICAgICAgICAjCiAgICAgICAgICAgICMgICRta0Zsb29yOjpjdXJyZW50Um9vbSA9ICcnOwogICAgICAgICAgICAjICAkbWtGbG9vcjo6Y19lbnRyeSAgICAgPSAkYy0+RW50cnkoCiAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtd2lkdGggICAgICAgID0+ICcxMCcsCiAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtcmVsaWVmICAgICAgID0+ICdzdW5rZW4nLAogICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCiAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAjCiAgICAgICAgICAgICMgIFdlIGxlYXZlIGl0IHRvIHRoZSBhbGlnbmVyIHRvIGRlY2lkZSBob3cgdG8gZG8gdGhpcy4KICAgICAgICAgICAgaWYgKCAkbGluZSA9PSAxICYmICRpID09ICRpYmVnICkgewogICAgICAgICAgICAgICAgJHRoaXNfYmF0Y2gtPltfZG9fbm90X3BhZF9dID0gMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgTm93IHNlZSB3aGF0IHRoZSBlcnJvciBpcyBhbmQgdHJ5IHRvIGZpeCBpdAogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgbXkgJGNsb3NpbmdfaW5kZXggPSAkaW5kZW50YXRpb24tPmdldF9jbG9zZWQoKTsKICAgICAgICAgICAgbXkgJHByZWRpY3RlZF9wb3MgPSAkaW5kZW50YXRpb24tPmdldF9zcGFjZXMoKTsKCiAgICAgICAgICAgICMgRmluZCBhY3R1YWwgcG9zaXRpb246CiAgICAgICAgICAgIG15ICRhY3R1YWxfcG9zOwoKICAgICAgICAgICAgaWYgKCAkaSA9PSAkaWJlZyApIHsKCiAgICAgICAgICAgICAgICAjIENhc2UgMTogdG9rZW4gaXMgZmlyc3QgY2hhcmFjdGVyIG9mIG9mIGJhdGNoIC0gdGFibGUgbG9va3VwCiAgICAgICAgICAgICAgICBpZiAoICRsaW5lID09IDAgKSB7CgogICAgICAgICAgICAgICAgICAgICRhY3R1YWxfcG9zID0gJHByZWRpY3RlZF9wb3M7CgogICAgICAgICAgICAgICAgICAgIG15ICggJGluZGVudCwgJG9mZnNldCwgJGlzX2xlYWRpbmdfdXUsICRleGlzdHNfdXUgKSA9CiAgICAgICAgICAgICAgICAgICAgICBnZXRfc2F2ZWRfb3BlbmluZ19pbmRlbnRhdGlvbigkYWxpZ25fc2Vxbm8pOwogICAgICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCgkaW5kZW50KSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgTk9URTogd2UgY291bGQgdXNlICcxJyBoZXJlIGlmIG5vIHNwYWNlIGFmdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICMgb3BlbmluZyBhbmQgJzInIGlmIHdhbnQgc3BhY2U7IGl0IGlzIGhhcmR3aXJlZCBhdCAxCiAgICAgICAgICAgICAgICAgICAgICAgICMgbGlrZSAtZ251LXN0eWxlLiBCdXQgaXQgaXMgcHJvYmFibHkgYmVzdCB0byBsZWF2ZQogICAgICAgICAgICAgICAgICAgICAgICAjIHRoaXMgYWxvbmUgYmVjYXVzZSBjaGFuZ2luZyBpdCB3b3VsZCBjaGFuZ2UKICAgICAgICAgICAgICAgICAgICAgICAgIyBmb3JtYXR0aW5nIG9mIG11Y2ggZXhpc3RpbmcgY29kZSB3aXRob3V0IGFueQogICAgICAgICAgICAgICAgICAgICAgICAjIHNpZ25pZmljYW50IGJlbmVmaXQuCiAgICAgICAgICAgICAgICAgICAgICAgICRhY3R1YWxfcG9zID0gZ2V0X3NwYWNlcygkaW5kZW50KSArICRvZmZzZXQgKyAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIENhc2UgMjogdG9rZW4gc3RhcnRzIGEgbmV3IGxpbmUgLSB1c2UgbGVuZ3RoIG9mIHByZXZpb3VzIGxpbmUKICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICBteSAkaWJlZ20gPSAkcmlfZmlyc3QtPlsgJGxpbmUgLSAxIF07CiAgICAgICAgICAgICAgICAgICAgbXkgJGllbmRtID0gJHJpX2xhc3QtPlsgJGxpbmUgLSAxIF07CiAgICAgICAgICAgICAgICAgICAgJGFjdHVhbF9wb3MgPSB0b3RhbF9saW5lX2xlbmd0aCggJGliZWdtLCAkaWVuZG0gKTsKCiAgICAgICAgICAgICAgICAgICAgIyBmb2xsb3cgLXB0IHN0eWxlCiAgICAgICAgICAgICAgICAgICAgKyskYWN0dWFsX3BvcwogICAgICAgICAgICAgICAgICAgICAgaWYgKCAkdHlwZXNfdG9fZ29bICRpZW5kbSArIDEgXSBlcSAnYicgKTsKCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgQ2FzZSAzOiAkaT4kaWJlZzogdG9rZW4gaXMgbWlkLWxpbmUgLSB1c2UgbGVuZ3RoIHRvIHByZXZpb3VzIHRva2VuCiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICRhY3R1YWxfcG9zID0gdG90YWxfbGluZV9sZW5ndGgoICRpYmVnLCAkaSAtIDEgKTsKCiAgICAgICAgICAgICAgICAjIGZvciBtaWQtbGluZSB0b2tlbiwgd2UgbXVzdCBjaGVjayB0byBzZWUgaWYgYWxsCiAgICAgICAgICAgICAgICAjIGFkZGl0aW9uYWwgbGluZXMgaGF2ZSBjb250aW51YXRpb24gaW5kZW50YXRpb24sCiAgICAgICAgICAgICAgICAjIGFuZCByZW1vdmUgaXQgaWYgc28uICBPdGhlcndpc2UsIHdlIGRvIG5vdCBnZXQKICAgICAgICAgICAgICAgICMgZ29vZCBhbGlnbm1lbnQuCiAgICAgICAgICAgICAgICBpZiAoICRjbG9zaW5nX2luZGV4ID4gJGllbmQgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJGliZWdfbmV4dCA9ICRyaV9maXJzdC0+WyAkbGluZSArIDEgXTsKICAgICAgICAgICAgICAgICAgICBpZiAoICRjaV9sZXZlbHNfdG9fZ29bJGliZWdfbmV4dF0gPiAwICkgewogICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+dW5kb19scF9jaSggJGxpbmUsICRpLCAkY2xvc2luZ19pbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyaV9maXJzdCwgJHJpX2xhc3QgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgQnkgaG93IG1hbnkgc3BhY2VzIChwbHVzIG9yIG1pbnVzKSB3b3VsZCB3ZSBuZWVkIHRvIGluY3JlYXNlIHRoZQogICAgICAgICAgICAjIGluZGVudGF0aW9uIHRvIGdldCBhbGlnbm1lbnQgd2l0aCB0aGUgb3BlbmluZyB0b2tlbj8KICAgICAgICAgICAgbXkgJG1vdmVfcmlnaHQgPSAkYWN0dWFsX3BvcyAtICRwcmVkaWN0ZWRfcG9zOwoKICAgICAgICAgICAgaWYgKERFQlVHX0NPUlJFQ1RfTFApIHsKICAgICAgICAgICAgICAgIG15ICR0b2sgICA9IHN1YnN0ciggJHRva2Vuc190b19nb1skaV0sIDAsIDggKTsKICAgICAgICAgICAgICAgIG15ICRhdmFpbCA9ICRzZWxmLT5nZXRfYXZhaWxhYmxlX3NwYWNlc190b19nbygkaWJlZyk7CiAgICAgICAgICAgICAgICBwcmludAoiQ09SUkVDVF9MUCBmb3Igc2VxPSRhbGlnbl9zZXFubywgcHJlZGljdGVkIHBvcz0kcHJlZGljdGVkX3BvcyBhY3R1YWw9JGFjdHVhbF9wb3MgPT4gbW92ZSByaWdodD0kbW92ZV9yaWdodCBhdmFpbGFibGU9JGF2YWlsIGk9JGkgbWF4PSRtYXhfaW5kZXhfdG9fZ28gdG9rPSR0b2tcbiI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgbm90aGluZyBtb3JlIHRvIGRvIGlmIG5vIGVycm9yIHRvIGNvcnJlY3QgKGdudTIudCkKICAgICAgICAgICAgaWYgKCAkbW92ZV9yaWdodCA9PSAwICkgewogICAgICAgICAgICAgICAgJGluZGVudGF0aW9uLT5zZXRfcmVjb3ZlcmFibGVfc3BhY2VzKCRtb3ZlX3JpZ2h0KTsKICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgR2V0IGFueSBjb2xsYXBzZWQgbGVuZ3RoIGRlZmluZWQgZm9yIC14bHAKICAgICAgICAgICAgbXkgJGNvbGxhcHNlZF9sZW5ndGggPQogICAgICAgICAgICAgICRzZWxmLT5bX3Jjb2xsYXBzZWRfbGVuZ3RoX2J5X3NlcW5vX10tPnskYWxpZ25fc2Vxbm99OwogICAgICAgICAgICAkY29sbGFwc2VkX2xlbmd0aCA9IDAgdW5sZXNzICggZGVmaW5lZCgkY29sbGFwc2VkX2xlbmd0aCkgKTsKCiAgICAgICAgICAgIGlmIChERUJVR19DT1JSRUNUX0xQKSB7CiAgICAgICAgICAgICAgICBwcmludAoiQ09SUkVDVF9MUCBmb3Igc2VxPSRhbGlnbl9zZXFubywgY29sbGFwc2VkIGxlbmd0aCBpcyAkY29sbGFwc2VkX2xlbmd0aFxuIjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpZiB3ZSBoYXZlIG5vdCBzZWVuIGNsb3N1cmUgZm9yIHRoaXMgaW5kZW50YXRpb24gaW4gdGhpcyBiYXRjaCwKICAgICAgICAgICAgIyBhbmQgZG8gbm90IGhhdmUgYSBjb2xsYXBzZWQgbGVuZ3RoIGVzdGltYXRlLCB3ZSBjYW4gb25seSBwYXNzIG9uCiAgICAgICAgICAgICMgYSByZXF1ZXN0IHRvIHRoZSB2ZXJ0aWNhbCBhbGlnbmVyCiAgICAgICAgICAgIGlmICggJGNsb3NpbmdfaW5kZXggPCAwICYmICEkY29sbGFwc2VkX2xlbmd0aCApIHsKICAgICAgICAgICAgICAgICRpbmRlbnRhdGlvbi0+c2V0X3JlY292ZXJhYmxlX3NwYWNlcygkbW92ZV9yaWdodCk7CiAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIElmIG5lY2Vzc2FyeSwgbG9vayBhaGVhZCB0byBzZWUgaWYgdGhlcmUgaXMgcmVhbGx5IGFueSBsZWFkaW5nCiAgICAgICAgICAgICMgd2hpdGVzcGFjZSBkZXBlbmRlbnQgb24gdGhpcyB3aGl0ZXNwYWNlLCBhbmQgYWxzbyBmaW5kIHRoZQogICAgICAgICAgICAjIGxvbmdlc3QgbGluZSB1c2luZyB0aGlzIHdoaXRlc3BhY2UuICBTaW5jZSBpdCBpcyBhbHdheXMgc2FmZSB0bwogICAgICAgICAgICAjIG1vdmUgbGVmdCBpZiB0aGVyZSBhcmUgbm8gZGVwZW5kZW50cywgd2Ugb25seSBuZWVkIHRvIGRvIHRoaXMgaWYKICAgICAgICAgICAgIyB3ZSBtYXkgaGF2ZSBkZXBlbmRlbnQgbm9kZXMgb3IgbmVlZCB0byBtb3ZlIHJpZ2h0LgoKICAgICAgICAgICAgbXkgJGhhdmVfY2hpbGQgPSAkaW5kZW50YXRpb24tPmdldF9oYXZlX2NoaWxkKCk7CiAgICAgICAgICAgIG15ICVzYXdfaW5kZW50YXRpb247CiAgICAgICAgICAgIG15ICRsaW5lX2NvdW50ID0gMTsKICAgICAgICAgICAgJHNhd19pbmRlbnRhdGlvbnskaW5kZW50YXRpb259ID0gJGluZGVudGF0aW9uOwoKICAgICAgICAgICAgIyBIb3cgZmFyIGNhbiB3ZSBtb3ZlIHJpZ2h0IGJlZm9yZSB3ZSBoaXQgdGhlIGxpbWl0PwogICAgICAgICAgICAjIGxldCAkcmlnaHRfbWFyZ2VuID0gdGhlIG51bWJlciBvZiBzcGFjZXMgdGhhdCB3ZSBjYW4gaW5jcmVhc2UKICAgICAgICAgICAgIyB0aGUgY3VycmVudCBpbmRlbnRhdGlvbiBiZWZvcmUgaGl0dGluZyB0aGUgbWF4aW11bSBsaW5lIGxlbmd0aC4KICAgICAgICAgICAgbXkgJHJpZ2h0X21hcmdpbiA9IDA7CgogICAgICAgICAgICBpZiAoICRoYXZlX2NoaWxkIHx8ICRtb3ZlX3JpZ2h0ID4gMCApIHsKICAgICAgICAgICAgICAgICRoYXZlX2NoaWxkID0gMDsKCiAgICAgICAgICAgICAgICAjIGluY2x1ZGUgZXN0aW1hdGVkIGNvbGxhcHNlZCBsZW5ndGggZm9yIGluY29tcGxldGUgY29udGFpbmVycwogICAgICAgICAgICAgICAgbXkgJG1heF9sZW5ndGggPSAwOwogICAgICAgICAgICAgICAgaWYgKCAkS2MgPiAkS190b19nb1skbWF4X2luZGV4X3RvX2dvXSApIHsKICAgICAgICAgICAgICAgICAgICAkbWF4X2xlbmd0aCA9ICRjb2xsYXBzZWRfbGVuZ3RoICsgJHByZWRpY3RlZF9wb3M7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAkaSA9PSAkaWJlZyApIHsKICAgICAgICAgICAgICAgICAgICBteSAkbGVuZ3RoID0gdG90YWxfbGluZV9sZW5ndGgoICRpYmVnLCAkaWVuZCApOwogICAgICAgICAgICAgICAgICAgIGlmICggJGxlbmd0aCA+ICRtYXhfbGVuZ3RoICkgeyAkbWF4X2xlbmd0aCA9ICRsZW5ndGggfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgbG9vayBhaGVhZCBhdCB0aGUgcmVzdCBvZiB0aGUgbGluZXMgb2YgdGhpcyBiYXRjaC4uCiAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRsaW5lX3QgKCAkbGluZSArIDEgLi4gJG1heF9saW5lICkgewogICAgICAgICAgICAgICAgICAgIG15ICRpYmVnX3QgPSAkcmlfZmlyc3QtPlskbGluZV90XTsKICAgICAgICAgICAgICAgICAgICBteSAkaWVuZF90ID0gJHJpX2xhc3QtPlskbGluZV90XTsKICAgICAgICAgICAgICAgICAgICBsYXN0IGlmICggJGNsb3NpbmdfaW5kZXggPD0gJGliZWdfdCApOwoKICAgICAgICAgICAgICAgICAgICAjIHJlbWVtYmVyIGFsbCBkaWZmZXJlbnQgaW5kZW50YXRpb24gb2JqZWN0cwogICAgICAgICAgICAgICAgICAgIG15ICRpbmRlbnRhdGlvbl90ID0gJGxlYWRpbmdfc3BhY2VzX3RvX2dvWyRpYmVnX3RdOwogICAgICAgICAgICAgICAgICAgICRzYXdfaW5kZW50YXRpb257JGluZGVudGF0aW9uX3R9ID0gJGluZGVudGF0aW9uX3Q7CiAgICAgICAgICAgICAgICAgICAgJGxpbmVfY291bnQrKzsKCiAgICAgICAgICAgICAgICAgICAgIyByZW1lbWJlciBsb25nZXN0IGxpbmUgaW4gdGhlIGdyb3VwCiAgICAgICAgICAgICAgICAgICAgbXkgJGxlbmd0aF90ID0gdG90YWxfbGluZV9sZW5ndGgoICRpYmVnX3QsICRpZW5kX3QgKTsKICAgICAgICAgICAgICAgICAgICBpZiAoICRsZW5ndGhfdCA+ICRtYXhfbGVuZ3RoICkgewogICAgICAgICAgICAgICAgICAgICAgICAkbWF4X2xlbmd0aCA9ICRsZW5ndGhfdDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHJpZ2h0X21hcmdpbiA9CiAgICAgICAgICAgICAgICAgICRtYXhpbXVtX2xpbmVfbGVuZ3RoX2F0X2xldmVsWyAkbGV2ZWxzX3RvX2dvWyRpYmVnXSBdIC0KICAgICAgICAgICAgICAgICAgJG1heF9sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAoICRyaWdodF9tYXJnaW4gPCAwICkgeyAkcmlnaHRfbWFyZ2luID0gMCB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRmaXJzdF9saW5lX2NvbW1hX2NvdW50ID0KICAgICAgICAgICAgICBncmVwIHsgJF8gZXEgJywnIH0gQHR5cGVzX3RvX2dvWyAkaWJlZyAuLiAkaWVuZCBdOwogICAgICAgICAgICBteSAkY29tbWFfY291bnQgPSAkaW5kZW50YXRpb24tPmdldF9jb21tYV9jb3VudCgpOwogICAgICAgICAgICBteSAkYXJyb3dfY291bnQgPSAkaW5kZW50YXRpb24tPmdldF9hcnJvd19jb3VudCgpOwoKICAgICAgICAgICAgIyBUaGlzIGlzIGEgc2ltcGxlIGFwcHJveGltYXRlIHRlc3QgZm9yIHZlcnRpY2FsIGFsaWdubWVudDoKICAgICAgICAgICAgIyBpZiB3ZSBicm9rZSBqdXN0IGFmdGVyIGFuIG9wZW5pbmcgcGFyZW4sIGJyYWNlLCBicmFja2V0LAogICAgICAgICAgICAjIGFuZCB0aGVyZSBhcmUgMiBvciBtb3JlIGNvbW1hcyBpbiB0aGUgZmlyc3QgbGluZSwKICAgICAgICAgICAgIyBhbmQgdGhlcmUgYXJlIG5vICc9PidzLAogICAgICAgICAgICAjIHRoZW4gd2UgYXJlIHByb2JhYmx5IHZlcnRpY2FsbHkgYWxpZ25lZC4gIFdlIGNvdWxkIHNldAogICAgICAgICAgICAjIGFuIGV4YWN0IGZsYWcgaW4gc3ViIGJyZWFrX2xpc3RzLCBidXQgdGhpcyBpcyBnb29kCiAgICAgICAgICAgICMgZW5vdWdoLgogICAgICAgICAgICBteSAkaW5kZW50YXRpb25fY291bnQgPSBrZXlzICVzYXdfaW5kZW50YXRpb247CiAgICAgICAgICAgIG15ICRpc192ZXJ0aWNhbGx5X2FsaWduZWQgPQogICAgICAgICAgICAgICggICAgICAkaSA9PSAkaWJlZwogICAgICAgICAgICAgICAgICAmJiAkZmlyc3RfbGluZV9jb21tYV9jb3VudCA+IDEKICAgICAgICAgICAgICAgICAgJiYgJGluZGVudGF0aW9uX2NvdW50ID09IDEKICAgICAgICAgICAgICAgICAgJiYgKCAkYXJyb3dfY291bnQgPT0gMCB8fCAkYXJyb3dfY291bnQgPT0gJGxpbmVfY291bnQgKSApOwoKICAgICAgICAgICAgIyBNYWtlIHRoZSBtb3ZlIGlmIHBvc3NpYmxlIC4uCiAgICAgICAgICAgIGlmICgKCiAgICAgICAgICAgICAgICAjIHdlIGNhbiBhbHdheXMgbW92ZSBsZWZ0CiAgICAgICAgICAgICAgICAkbW92ZV9yaWdodCA8IDAKCiAgICAgICAgICAgICAgICAjIC14bHAKCiAgICAgICAgICAgICAgICAjIGluY29tcGxldGUgY29udGFpbmVyCiAgICAgICAgICAgICAgICB8fCAoICAgJHJPcHRzX2V4dGVuZGVkX2xpbmVfdXBfcGFyZW50aGVzZXMKICAgICAgICAgICAgICAgICAgICAmJiAkS2MgPiAkS190b19nb1skbWF4X2luZGV4X3RvX2dvXSApCiAgICAgICAgICAgICAgICB8fCAkY2xvc2luZ19pbmRleCA8IDAKCiAgICAgICAgICAgICAgICAjIGJ1dCB3ZSBzaG91bGQgb25seSBtb3ZlIHJpZ2h0IGlmIHdlIGFyZSBzdXJlIGl0IHdpbGwKICAgICAgICAgICAgICAgICMgbm90IHNwb2lsIHZlcnRpY2FsIGFsaWdubWVudAogICAgICAgICAgICAgICAgfHwgKCAkY29tbWFfY291bnQgPT0gMCApCiAgICAgICAgICAgICAgICB8fCAoICRjb21tYV9jb3VudCA+IDAgJiYgISRpc192ZXJ0aWNhbGx5X2FsaWduZWQgKQogICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbXkgJG1vdmUgPQogICAgICAgICAgICAgICAgICAoICRtb3ZlX3JpZ2h0IDw9ICRyaWdodF9tYXJnaW4gKQogICAgICAgICAgICAgICAgICA/ICRtb3ZlX3JpZ2h0CiAgICAgICAgICAgICAgICAgIDogJHJpZ2h0X21hcmdpbjsKCiAgICAgICAgICAgICAgICBpZiAoREVCVUdfQ09SUkVDVF9MUCkgewogICAgICAgICAgICAgICAgICAgIHByaW50CiAgICAgICAgICAgICAgICAgICAgICAiQ09SUkVDVF9MUCBmb3Igc2VxPSRhbGlnbl9zZXFubywgbW92aW5nICRtb3ZlIHNwYWNlc1xuIjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBmb3JlYWNoICgga2V5cyAlc2F3X2luZGVudGF0aW9uICkgewogICAgICAgICAgICAgICAgICAgICRzYXdfaW5kZW50YXRpb257JF99CiAgICAgICAgICAgICAgICAgICAgICAtPnBlcm1hbmVudGx5X2RlY3JlYXNlX2F2YWlsYWJsZV9zcGFjZXMoIC0kbW92ZSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIE90aGVyd2lzZSwgcmVjb3JkIHdoYXQgd2Ugd2FudCBhbmQgdGhlIHZlcnRpY2FsIGFsaWduZXIKICAgICAgICAgICAgIyB3aWxsIHRyeSB0byByZWNvdmVyIGl0LgogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRpbmRlbnRhdGlvbi0+c2V0X3JlY292ZXJhYmxlX3NwYWNlcygkbW92ZV9yaWdodCk7CiAgICAgICAgICAgIH0KICAgICAgICB9ICMjIGVuZCBsb29wIG92ZXIgdG9rZW5zIGluIGEgbGluZQogICAgfSAjIyBlbmQgbG9vcCBvdmVyIGxpbmVzCiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBjb3JyZWN0X2xwX2luZGVudGF0aW9uCgpzdWIgY29ycmVjdF9scF9pbmRlbnRhdGlvbl9wYXNzXzEgewogICAgbXkgKCAkc2VsZiwgJHJpX2ZpcnN0LCAkcmlfbGFzdCwgJHJpX3N0YXJ0aW5nX29uZV9saW5lX2Jsb2NrICkgPSBAXzsKCiAgICAjIFNvIHNvbWUgb2YgdGhlIG9uZS1saW5lIGJsb2NrcyBtYXkgYmUgdG9vIGxvbmcgd2hlbiBnaXZlbiAtbHAKICAgICMgaW5kZW50YXRpb24uICBXZSB3aWxsIGZpeCB0aGF0IG5vdyBpZiBwb3NzaWJsZSwgdXNpbmcgdGhlIGxpc3Qgb2YgdGhlc2UKICAgICMgY2xvc2luZyBibG9jayBpbmRleGVzLgogICAgIyBHaXZlbjoKICAgICMgICAkcmlfZmlyc3QgLSByZWZlcmVuY2UgdG8gY3VycmVudCBsaXN0IG9mIHRoZSBmaXJzdCBpbmRleCAkaSBmb3IgZWFjaAogICAgIyAgICAgICAgICAgICAgIG91dHB1dCBsaW5lIGluIHRoaXMgYmF0Y2gKICAgICMgICAkcmlfbGFzdCAtIHJlZmVyZW5jZSB0byBjdXJyZW50IGxpc3Qgb2YgdGhlIGxhc3QgaW5kZXggJGkgZm9yIGVhY2gKICAgICMgICAgICAgICAgICAgICBvdXRwdXQgbGluZSBpbiB0aGlzIGJhdGNoCiAgICAjICAgJHJpX3N0YXJ0aW5nX29uZV9saW5lX2Jsb2NrID0gbGlzdCBvZiBpbmRleGVzIHN0YXJ0aW5nIDEtbGluZSBibG9ja3MKCiAgICBteSBAaWxpc3QgPSBAeyRyaV9zdGFydGluZ19vbmVfbGluZV9ibG9ja307CiAgICByZXR1cm4gdW5sZXNzIChAaWxpc3QpOwoKICAgIG15ICRtYXhfbGluZSA9IEB7JHJpX2ZpcnN0fSAtIDE7CiAgICBteSAkaW5leHQgICAgPSBzaGlmdCBAaWxpc3Q7CgogICAgIyBsb29wIG92ZXIgbGluZXMsIGNoZWNraW5nIGxlbmd0aCBvZiBlYWNoIHdpdGggYSBvbmUtbGluZSBibG9jawogICAgbXkgKCAkaWJlZywgJGllbmQgKTsKICAgIGZvcmVhY2ggbXkgJGxpbmUgKCAwIC4uICRtYXhfbGluZSApIHsKICAgICAgICAkaWVuZCA9ICRyaV9sYXN0LT5bJGxpbmVdOwogICAgICAgIG5leHQgaWYgKCAkaW5leHQgPiAkaWVuZCApOwogICAgICAgICRpYmVnID0gJHJpX2ZpcnN0LT5bJGxpbmVdOwoKICAgICAgICAjIFRoaXMgaXMganVzdCBmb3IgbGluZXMgd2l0aCBpbmRlbnRhdGlvbiBvYmplY3RzIChjMDk4KQogICAgICAgIG15ICRleGNlc3MgPQogICAgICAgICAgcmVmKCAkbGVhZGluZ19zcGFjZXNfdG9fZ29bJGliZWddICkKICAgICAgICAgID8gJHNlbGYtPmV4Y2Vzc19saW5lX2xlbmd0aCggJGliZWcsICRpZW5kICkKICAgICAgICAgIDogMDsKCiAgICAgICAgaWYgKCAkZXhjZXNzID4gMCApIHsKICAgICAgICAgICAgbXkgJGF2YWlsYWJsZV9zcGFjZXMgPSAkc2VsZi0+Z2V0X2F2YWlsYWJsZV9zcGFjZXNfdG9fZ28oJGliZWcpOwoKICAgICAgICAgICAgaWYgKCAkYXZhaWxhYmxlX3NwYWNlcyA+IDAgKSB7CiAgICAgICAgICAgICAgICBteSAkZGVsZXRlX3dhbnQgPSBtaW4oICRhdmFpbGFibGVfc3BhY2VzLCAkZXhjZXNzICk7CiAgICAgICAgICAgICAgICBteSAkZGVsZXRlZF9zcGFjZXNfdXUgPQogICAgICAgICAgICAgICAgICAkc2VsZi0+cmVkdWNlX2xwX2luZGVudGF0aW9uKCAkaWJlZywgJGRlbGV0ZV93YW50ICk7CiAgICAgICAgICAgICAgICAkYXZhaWxhYmxlX3NwYWNlcyA9ICRzZWxmLT5nZXRfYXZhaWxhYmxlX3NwYWNlc190b19nbygkaWJlZyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc2tpcCBmb3J3YXJkIHRvIG5leHQgb25lLWxpbmUgYmxvY2sgdG8gY2hlY2sKICAgICAgICB3aGlsZSAoQGlsaXN0KSB7CiAgICAgICAgICAgICRpbmV4dCA9IHNoaWZ0IEBpbGlzdDsKICAgICAgICAgICAgbmV4dCBpZiAoICRpbmV4dCA8PSAkaWVuZCApOwogICAgICAgICAgICBsYXN0IGlmICggJGluZXh0ID4gJGllbmQgKTsKICAgICAgICB9CiAgICAgICAgbGFzdCBpZiAoICRpbmV4dCA8PSAkaWVuZCApOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgY29ycmVjdF9scF9pbmRlbnRhdGlvbl9wYXNzXzEKCnN1YiB1bmRvX2xwX2NpIHsKCiAgICBteSAoICRzZWxmLCAkbGluZV9vcGVuLCAkaV9zdGFydCwgJGNsb3NpbmdfaW5kZXgsICRyaV9maXJzdCwgJHJpX2xhc3QgKSA9CiAgICAgIEBfOwoKICAgICMgSWYgdGhlcmUgaXMgYSBzaW5nbGUsIGxvbmcgcGFyYW1ldGVyIHdpdGhpbiBwYXJlbnMsIGxpa2UgdGhpczoKICAgICMKICAgICMgICRzZWxmLT5jb21tYW5kKCAiL21zZyAiCiAgICAjICAgICAgICAuICRpbmZvbGluZS0+Y2hhbgogICAgIyAgICAgICAgLiAiIFlvdSBzYWlkICQxLCBidXQgZGlkIHlvdSBrbm93IHRoYXQgaXQncyBzcXVhcmUgd2FzICIKICAgICMgICAgICAgIC4gJDEgKiAkMSAuICIgPyIgKTsKICAgICMKICAgICMgd2UgY2FuIHJlbW92ZSB0aGUgY29udGludWF0aW9uIGluZGVudGF0aW9uIG9mIHRoZSAybmQgYW5kIGhpZ2hlciBsaW5lcwogICAgIyB0byBhY2hpZXZlIHRoaXMgZWZmZWN0LCB3aGljaCBpcyBtb3JlIHBsZWFzaW5nOgogICAgIwogICAgIyAgJHNlbGYtPmNvbW1hbmQoIi9tc2cgIgogICAgIyAgICAgICAgICAgICAgICAgLiAkaW5mb2xpbmUtPmNoYW4KICAgICMgICAgICAgICAgICAgICAgIC4gIiBZb3Ugc2FpZCAkMSwgYnV0IGRpZCB5b3Uga25vdyB0aGF0IGl0J3Mgc3F1YXJlIHdhcyAiCiAgICAjICAgICAgICAgICAgICAgICAuICQxICogJDEgLiAiID8iKTsKICAgICMgR2l2ZW46CiAgICAjICAgJGxpbmVfb3BlbiA9IGluZGV4IG9mIGxpbmUgd2l0aCBvcGVuaW5nIHBhcmVuCiAgICAjICAgJGlfc3RhcnQgPSBpbmRleCBvZiB0b2tlbiBhdCBlbmQgb2Ygc3RhcnRpbmcgbGluZSBbIi9tc2ciIGFib3ZlXQogICAgIyAgICRjbG9zaW5nX2luZGV4ID0gaW5kZXggb2YgdGhlIGNsb3NpbmcgdG9rZW4KICAgICMgICAkcmlfZmlyc3QgLSByZWZlcmVuY2UgdG8gY3VycmVudCBsaXN0IG9mIHRoZSBmaXJzdCBpbmRleCAkaSBmb3IgZWFjaAogICAgIyAgICAgICAgICAgICAgIG91dHB1dCBsaW5lIGluIHRoaXMgYmF0Y2gKICAgICMgICAkcmlfbGFzdCAtIHJlZmVyZW5jZSB0byBjdXJyZW50IGxpc3Qgb2YgdGhlIGxhc3QgaW5kZXggJGkgZm9yIGVhY2gKICAgICMgICAgICAgICAgICAgICBvdXRwdXQgbGluZSBpbiB0aGlzIGJhdGNoCgogICAgbXkgJG1heF9saW5lID0gQHskcmlfZmlyc3R9IC0gMTsKCiAgICAjIG11c3QgYmUgbXVsdGlwbGUgbGluZXMKICAgIHJldHVybiBpZiAoICRtYXhfbGluZSA8PSAkbGluZV9vcGVuICk7CgogICAgbXkgJGxldl9zdGFydCAgICAgPSAkbGV2ZWxzX3RvX2dvWyRpX3N0YXJ0XTsKICAgIG15ICRjaV9zdGFydF9wbHVzID0gMSArICRjaV9sZXZlbHNfdG9fZ29bJGlfc3RhcnRdOwoKICAgICMgc2VlIGlmIGFsbCBhZGRpdGlvbmFsIGxpbmVzIGluIHRoaXMgY29udGFpbmVyIGhhdmUgY29udGludWF0aW9uCiAgICAjIGluZGVudGF0aW9uCiAgICBteSAkbGluZV8xID0gMSArICRsaW5lX29wZW47CiAgICBteSAkbiAgICAgID0gJGxpbmVfb3BlbjsKCiAgICB3aGlsZSAoICsrJG4gPD0gJG1heF9saW5lICkgewogICAgICAgIG15ICRpYmVnID0gJHJpX2ZpcnN0LT5bJG5dOwogICAgICAgIG15ICRpZW5kID0gJHJpX2xhc3QtPlskbl07CiAgICAgICAgaWYgKCAkaWJlZyBlcSAkY2xvc2luZ19pbmRleCApIHsgJG4tLTsgbGFzdCB9CiAgICAgICAgcmV0dXJuIGlmICggJGxldl9zdGFydCAhPSAkbGV2ZWxzX3RvX2dvWyRpYmVnXSApOwogICAgICAgIHJldHVybiBpZiAoICRjaV9zdGFydF9wbHVzICE9ICRjaV9sZXZlbHNfdG9fZ29bJGliZWddICk7CiAgICAgICAgbGFzdCAgIGlmICggJGNsb3NpbmdfaW5kZXggPD0gJGllbmQgKTsKICAgIH0gIyMgZW5kIHdoaWxlICggKyskbiA8PSAkbWF4X2xpbmUpCgogICAgIyB3ZSBjYW4gcmVkdWNlIHRoZSBpbmRlbnRhdGlvbiBvZiBhbGwgY29udGludWF0aW9uIGxpbmVzCiAgICBteSAkY29udGludWF0aW9uX2xpbmVfY291bnQgPSAkbiAtICRsaW5lX29wZW47CiAgICBAY2lfbGV2ZWxzX3RvX2dvWyBAeyRyaV9maXJzdH1bICRsaW5lXzEgLi4gJG4gXSBdID0KICAgICAgKDApIHggKCRjb250aW51YXRpb25fbGluZV9jb3VudCk7CiAgICBAbGVhZGluZ19zcGFjZXNfdG9fZ29bIEB7JHJpX2ZpcnN0fVsgJGxpbmVfMSAuLiAkbiBdIF0gPQogICAgICBAcmVkdWNlZF9zcGFjZXNfdG9fZ29bIEB7JHJpX2ZpcnN0fVsgJGxpbmVfMSAuLiAkbiBdIF07CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiB1bmRvX2xwX2NpCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDT0RFIFNFQ1RJT04gMTA6IENvZGUgdG8gYnJlYWsgbG9uZyBzdGF0ZW1lbnRzCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKdXNlIGNvbnN0YW50IERFQlVHX0JSRUFLX0xJTkVTID0+IDA7CgpzdWIgYnJlYWtfbG9uZ19saW5lcyB7CgogICAgbXkgKCAkc2VsZiwgJHNhd19nb29kX2JyZWFrLCAkcmNvbG9uX2xpc3QsICRyYm9uZF9zdHJlbmd0aF9iaWFzICkgPSBAXzsKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgQnJlYWsgYSBiYXRjaCBvZiB0b2tlbnMgaW50byBsaW5lcyB3aGljaCBkbyBub3QgZXhjZWVkIHRoZQogICAgIyBtYXhpbXVtIGxpbmUgbGVuZ3RoLgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgIyBJbnB1dCBwYXJhbWV0ZXJzOgogICAgIyAgJHNhd19nb29kX2JyZWFrIC0gYSBmbGFnIHNldCBieSBicmVha19saXN0cwogICAgIyAgJHJjb2xvbl9saXN0ICAgIC0gcmVmIHRvIGEgbGlzdCBvZiBhbGwgdGhlID8gYW5kIDogdG9rZW5zIGluIHRoZSBiYXRjaCwKICAgICMgICAgaW4gb3JkZXIuCiAgICAjICAkcmJvbmRfc3RyZW5ndGhfYmlhcyAtIHNtYWxsIGJvbmQgc3RyZW5ndGggYmlhcyB2YWx1ZXMgc2V0IGJ5IGJyZWFrX2xpc3RzCgogICAgIyBPdXRwdXQ6IHJldHVybnMgcmVmZXJlbmNlcyB0byB0aGUgYXJyYXlzOgogICAgIyAgQGlfZmlyc3QKICAgICMgIEBpX2xhc3QKICAgICMgd2hpY2ggY29udGFpbiB0aGUgaW5kZXhlcyAkaSBvZiB0aGUgZmlyc3QgYW5kIGxhc3QgdG9rZW5zIG9uIGVhY2gKICAgICMgbGluZS4KCiAgICAjIEluIGFkZGl0aW9uLCB0aGUgYXJyYXk6CiAgICAjICAgJGZvcmNlZF9icmVha3BvaW50X3RvX2dvWyRpXQogICAgIyBtYXkgYmUgdXBkYXRlZCB0byBiZSA9MSBmb3IgYW55IGluZGV4ICRpIGFmdGVyIHdoaWNoIHRoZXJlIG11c3QgYmUKICAgICMgYSBicmVhay4gIFRoaXMgc2lnbmFscyBsYXRlciByb3V0aW5lcyBub3QgdG8gdW5kbyB0aGUgYnJlYWtwb2ludC4KCiAgICAjIE1ldGhvZDoKICAgICMgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBpZiBhIHN0YXRlbWVudCBpcyBsb25nZXIgdGhhbiB0aGUgbWF4aW11bSBsaW5lCiAgICAjIGxlbmd0aCwgb3IgaWYgYSBwcmVsaW1pbmFyeSBzY2FubmluZyBsb2NhdGVkIGRlc2lyYWJsZSBicmVhayBwb2ludHMuCiAgICAjIFN1YiBicmVha19saXN0cyBoYXMgYWxyZWFkeSBsb29rZWQgYXQgdGhlc2UgdG9rZW5zIGFuZCBzZXQgYnJlYWtwb2ludHMKICAgICMgKGluIGFycmF5ICRmb3JjZWRfYnJlYWtwb2ludF90b19nb1skaV0pIHdoZXJlIGl0IHdhbnRzIGJyZWFrcyAoZm9yCiAgICAjIGV4YW1wbGUgYWZ0ZXIgY29tbWFzLCBhZnRlciBvcGVuaW5nIHBhcmVucywgYW5kIGJlZm9yZSBjbG9zaW5nIHBhcmVucykuCiAgICAjIFRoaXMgcm91dGluZSB3aWxsIGhvbm9yIHRoZXNlIGJyZWFrcG9pbnRzIGFuZCBhbHNvIGFkZCBhZGRpdGlvbmFsCiAgICAjIGJyZWFrcG9pbnRzIGFzIG5lY2Vzc2FyeSB0byBrZWVwIHRoZSBsaW5lIGxlbmd0aCBiZWxvdyB0aGUgbWF4aW11bQogICAgIyByZXF1ZXN0ZWQuICBJdCBiYXNlcyBpdHMgZGVjaXNpb24gb24gd2hlcmUgdGhlICdib25kIHN0cmVuZ3RoJyBpcwogICAgIyBsb3dlc3QuCgogICAgbXkgQGlfZmlyc3QgICAgICAgID0gKCk7ICAgICMgdGhlIGZpcnN0IGluZGV4IHRvIG91dHB1dAogICAgbXkgQGlfbGFzdCAgICAgICAgID0gKCk7ICAgICMgdGhlIGxhc3QgaW5kZXggdG8gb3V0cHV0CiAgICBteSBAaV9jb2xvbl9icmVha3MgPSAoKTsgICAgIyBuZWVkZWQgdG8gZGVjaWRlIGlmIHdlIGhhdmUgdG8gYnJlYWsgYXQgPydzCiAgICBpZiAoICR0eXBlc190b19nb1swXSBlcSAnOicgKSB7IHB1c2ggQGlfY29sb25fYnJlYWtzLCAwIH0KCiAgICAjIEdldCB0aGUgJ2JvbmQgc3RyZW5ndGhzJyBiZXR3ZWVuIHRva2VucwogICAgbXkgJHJib25kX3N0cmVuZ3RoX3RvX2dvID0gJHNlbGYtPnNldF9ib25kX3N0cmVuZ3RocygpOwoKICAgICMgQWRkIGFueSBjb21tYSBiaWFzIHNldCBieSBicmVha19saXN0cwogICAgaWYgKCBAeyRyYm9uZF9zdHJlbmd0aF9iaWFzfSApIHsKICAgICAgICBmb3JlYWNoIG15ICRpdGVtICggQHskcmJvbmRfc3RyZW5ndGhfYmlhc30gKSB7CiAgICAgICAgICAgIG15ICggJGlpLCAkYmlhcyApID0gQHskaXRlbX07CiAgICAgICAgICAgIGlmICggJGlpID49IDAgJiYgJGlpIDw9ICRtYXhfaW5kZXhfdG9fZ28gKSB7CiAgICAgICAgICAgICAgICAkcmJvbmRfc3RyZW5ndGhfdG9fZ28tPlskaWldICs9ICRiaWFzOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKERFVkVMX01PREUpIHsKICAgICAgICAgICAgICAgICAgICBteSAkS0sgID0gJEtfdG9fZ29bMF07CiAgICAgICAgICAgICAgICAgICAgbXkgJGxubyA9ICRzZWxmLT5bX3JMTF9dLT5bJEtLXS0+W19MSU5FX0lOREVYX107CiAgICAgICAgICAgICAgICAgICAgRmF1bHQoCiJCYWQgYm9uZCBzdHJlbmd0aCBiaWFzIG5lYXIgbGluZSAkbG5vOiBpPSRpaSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgJG1heF9pbmRleF90b19nb1xuIgogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbXkgJGltaW4gPSAwOwogICAgbXkgJGltYXggPSAkbWF4X2luZGV4X3RvX2dvOwogICAgaWYgKCAkdHlwZXNfdG9fZ29bJGltaW5dIGVxICdiJyApIHsgJGltaW4rKyB9CiAgICBpZiAoICR0eXBlc190b19nb1skaW1heF0gZXEgJ2InICkgeyAkaW1heC0tIH0KCiAgICBteSAkaV9iZWdpbiAgICAgICAgICAgICA9ICRpbWluOwogICAgbXkgJGxhc3RfYnJlYWtfc3RyZW5ndGggPSBOT19CUkVBSzsKICAgIG15ICRpX2xhc3RfYnJlYWsgICAgICAgID0gLTE7CiAgICBteSAkbGluZV9jb3VudCAgICAgICAgICA9IDA7CgogICAgIyBzZWUgaWYgYW55ID8vOidzIGFyZSBpbiBvcmRlcgogICAgbXkgJGNvbG9uc19pbl9vcmRlciA9IDE7CiAgICBteSAkbGFzdF90b2sgICAgICAgID0gRU1QVFlfU1RSSU5HOwogICAgZm9yZWFjaCAoIEB7JHJjb2xvbl9saXN0fSApIHsKICAgICAgICBpZiAoICRfIGVxICRsYXN0X3RvayApIHsgJGNvbG9uc19pbl9vcmRlciA9IDA7IGxhc3QgfQogICAgICAgICRsYXN0X3RvayA9ICRfOwogICAgfQoKICAgICMgVGhpcyBpcyBhIHN1ZmZpY2llbnQgYnV0IG5vdCBuZWNlc3NhcnkgY29uZGl0aW9uIGZvciBjb2xvbiBjaGFpbgogICAgbXkgJGlzX2NvbG9uX2NoYWluID0gKCAkY29sb25zX2luX29yZGVyICYmIEB7JHJjb2xvbl9saXN0fSA+IDIgKTsKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIEJFR0lOTklORyBvZiBtYWluIGxvb3AgdG8gc2V0IGJyZWFrcG9pbnRzCiAgICAjIEtlZXAgaXRlcmF0aW5nIHVudGlsIHdlIHJlYWNoIHRoZSBlbmQKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHdoaWxlICggJGlfYmVnaW4gPD0gJGltYXggKSB7CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIEZpbmQgdGhlIGJlc3QgbmV4dCBicmVha3BvaW50IGJhc2VkIG9uIHRva2VuLXRva2VuIGJvbmQgc3RyZW5ndGhzCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIG15ICggJGlfbG93ZXN0LCAkbG93ZXN0X3N0cmVuZ3RoLCAkTXNnICkgPQogICAgICAgICAgJHNlbGYtPmJyZWFrX2xpbmVzX2lubmVyX2xvb3AoCgogICAgICAgICAgICAkaV9iZWdpbiwKICAgICAgICAgICAgJGlfbGFzdF9icmVhaywKICAgICAgICAgICAgJGltYXgsCiAgICAgICAgICAgICRsYXN0X2JyZWFrX3N0cmVuZ3RoLAogICAgICAgICAgICAkbGluZV9jb3VudCwKICAgICAgICAgICAgJHJib25kX3N0cmVuZ3RoX3RvX2dvLAogICAgICAgICAgICAkc2F3X2dvb2RfYnJlYWssCgogICAgICAgICAgKTsKCiAgICAgICAgIyBOb3cgbWFrZSBhbnkgYWRqdXN0bWVudHMgcmVxdWlyZWQgYnkgdGVybmFyeSBicmVha3BvaW50IHJ1bGVzCiAgICAgICAgaWYgKCBAeyRyY29sb25fbGlzdH0gKSB7CgogICAgICAgICAgICBteSAkaV9uZXh0X25vbmJsYW5rID0gJGluZXh0X3RvX2dvWyRpX2xvd2VzdF07CgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjID8vOiBydWxlIDEgOiBpZiBhIGJyZWFrIGhlcmUgd2lsbCBzZXBhcmF0ZSBhICc/JyBvbiB0aGlzCiAgICAgICAgICAgICMgbGluZSBmcm9tIGl0cyBjbG9zaW5nICc6JywgdGhlbiBicmVhayBhdCB0aGUgJz8nIGluc3RlYWQuCiAgICAgICAgICAgICMgQnV0IGRvIG5vdCBicmVhayBhIHNlcXVlbnRpYWwgY2hhaW4gb2YgPy86IHN0YXRlbWVudHMKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgaWYgKCAhJGlzX2NvbG9uX2NoYWluICkgewogICAgICAgICAgICAgICAgZm9yZWFjaCBteSAkaSAoICRpX2JlZ2luICsgMSAuLiAkaV9sb3dlc3QgLSAxICkgewogICAgICAgICAgICAgICAgICAgIG5leHQgdW5sZXNzICggJHRva2Vuc190b19nb1skaV0gZXEgJz8nICk7CgogICAgICAgICAgICAgICAgICAgICMgZG8gbm90IGJyZWFrIGlmIHN0YXRlbWVudCBpcyBicm9rZW4gYnkgc2lkZSBjb21tZW50CiAgICAgICAgICAgICAgICAgICAgbmV4dAogICAgICAgICAgICAgICAgICAgICAgaWYgKCAkdG9rZW5zX3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dIGVxICcjJwogICAgICAgICAgICAgICAgICAgICAgICAmJiB0ZXJtaW5hbF90eXBlX2koIDAsICRtYXhfaW5kZXhfdG9fZ28gKSAhfgogICAgICAgICAgICAgICAgICAgICAgICAvXltcO1x9XSQvICk7CgogICAgICAgICAgICAgICAgICAgICMgbm8gYnJlYWsgbmVlZGVkIGlmIG1hdGNoaW5nIDogaXMgYWxzbyBvbiB0aGUgbGluZQogICAgICAgICAgICAgICAgICAgIG5leHQKICAgICAgICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCggJG1hdGVfaW5kZXhfdG9fZ29bJGldICkKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJG1hdGVfaW5kZXhfdG9fZ29bJGldIDw9ICRpX25leHRfbm9uYmxhbmsgKTsKCiAgICAgICAgICAgICAgICAgICAgJGlfbG93ZXN0ID0gJGk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkd2FudF9icmVha19iZWZvcmV7Jz8nfSApIHsgJGlfbG93ZXN0LS0gfQogICAgICAgICAgICAgICAgICAgICRpX25leHRfbm9uYmxhbmsgPSAkaW5leHRfdG9fZ29bJGlfbG93ZXN0XTsKICAgICAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkbmV4dF9ub25ibGFua190eXBlID0gJHR5cGVzX3RvX2dvWyRpX25leHRfbm9uYmxhbmtdOwoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgIyA/LzogcnVsZSAyIDogaWYgd2UgYnJlYWsgYXQgYSAnPycsIHRoZW4gYnJlYWsgYXQgaXRzICc6JwogICAgICAgICAgICAjCiAgICAgICAgICAgICMgTm90ZTogdGhpcyBydWxlIGlzIGFsc28gaW4gc3ViIGJyZWFrX2xpc3RzIHRvIGhhbmRsZSBhIGJyZWFrCiAgICAgICAgICAgICMgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgYSBsaW5lIChpbiBjYXNlIGJyZWFrcyBhcmUgZGljdGF0ZWQKICAgICAgICAgICAgIyBieSBzaWRlIGNvbW1lbnRzKS4KICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgaWYgKCAkbmV4dF9ub25ibGFua190eXBlIGVxICc/JyApIHsKICAgICAgICAgICAgICAgICRzZWxmLT5zZXRfY2xvc2luZ19icmVha3BvaW50KCRpX25leHRfbm9uYmxhbmspOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJHR5cGVzX3RvX2dvWyRpX2xvd2VzdF0gZXEgJz8nICkgewogICAgICAgICAgICAgICAgJHNlbGYtPnNldF9jbG9zaW5nX2JyZWFrcG9pbnQoJGlfbG93ZXN0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICMgbm90IGF0IGEgJz8nCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjID8vOiBydWxlIDMgOiBpZiB3ZSBicmVhayBhdCBhICc6JyB0aGVuIHdlIHNhdmUKICAgICAgICAgICAgIyBpdHMgbG9jYXRpb24gZm9yIGZ1cnRoZXIgd29yayBiZWxvdy4gIFdlIG1heSBuZWVkIHRvIGdvCiAgICAgICAgICAgICMgYmFjayBhbmQgYnJlYWsgYXQgaXRzICc/Jy4KICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgIGlmICggJG5leHRfbm9uYmxhbmtfdHlwZSBlcSAnOicgKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBpX2NvbG9uX2JyZWFrcywgJGlfbmV4dF9ub25ibGFuazsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICR0eXBlc190b19nb1skaV9sb3dlc3RdIGVxICc6JyApIHsKICAgICAgICAgICAgICAgIHB1c2ggQGlfY29sb25fYnJlYWtzLCAkaV9sb3dlc3Q7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAjIG5vdCBhdCBhICc6JwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGhlcmUgd2Ugc2hvdWxkIHNldCBicmVha3MgZm9yIGFsbCAnPycvJzonIHBhaXJzIHdoaWNoIGFyZQogICAgICAgICAgICAjIHNlcGFyYXRlZCBieSB0aGlzIGxpbmUKICAgICAgICB9CgogICAgICAgICMgRml4IHR3by1saW5lIHNoZWFyIChjNDA2KQogICAgICAgIG15ICRpX25leHRfbm9uYmxhbmsgPSAkaW5leHRfdG9fZ29bJGlfbG93ZXN0XTsKICAgICAgICBpZiAoICR0b2tlbnNfdG9fZ29bJGlfbmV4dF9ub25ibGFua10gZXEgJyknICkgewoKICAgICAgICAgICAgIyBFeGFtcGxlIG9mIGEgJzIgbGluZSBzaGVhcic6CgogICAgICAgICAgICAjICAgJHdyYXBwZWQtPmFkZF9hcm91bmRfbW9kaWZpZXIoCiAgICAgICAgICAgICMgICAgICAgc3ViIHsgcHVzaCBAdHJhY2Vsb2cgPT4gJ2Fyb3VuZCAxJzsgJF9bMF0tPigpOyB9ICk7CgogICAgICAgICAgICAjIElmIHdlIHRyeSBmb3JtYXR0aW5nIHRoaXMgd2l0aCBpbmNyZWFzaW5nIGxpbmUgbGVuZ3RocywgdGhlCiAgICAgICAgICAgICMgYnJlYWsgYmFzZWQgb24gYm9uZCBzdHJlbmd0aHMgaXMgYWZ0ZXIgdGhlICcoJyB1bnRpbCB0aGUgY2xvc2luZwogICAgICAgICAgICAjIHBhcmVuIGlzIGp1c3QgYmV5b25kIHRoZSBsaW5lIGxlbmd0aCBsaW1pdC4gSW4gdGhhdCBjYXNlLCBpdCBjYW4KICAgICAgICAgICAgIyBzd2l0Y2ggdG8gYmVpbmcganVzdCBiZWZvcmUgdGhlICcpJy4gIFRoaXMgaXMgcmFyZSwgYW5kIG1heSBiZQogICAgICAgICAgICAjIHVuZGVzaXJhYmxlIGJlY2F1c2UgaXQgY2FuIGNhdXNlIHVuZXhwZWN0ZWQgZm9ybWF0dGluZwogICAgICAgICAgICAjIHZhcmlhdGlvbnMgYmV0d2VlbiBzaW1pbGFyIGNvZGUsIGFuZCB3b3JzZSwgaW5zdGFiaWxpdHkgd2l0aAogICAgICAgICAgICAjIHRyYWlsaW5nIGNvbW1hcy4gIFNvIHdlIGNoZWNrIGZvciB0aGF0IGhlcmUgYW5kIHB1dCB0aGUgYnJlYWsKICAgICAgICAgICAgIyBiYWNrIGFmdGVyIHRoZSBvcGVuaW5nICcoJyBpZiB0aGUgJyknIGlzIG5vdCBwcmVjZWRlZCBieSBhICcsJy4KICAgICAgICAgICAgIyBJc3N1ZSBjNDA2LgogICAgICAgICAgICBteSAkaV9wcmV2ICAgID0gaXByZXZfdG9fZ28oJGlfbmV4dF9ub25ibGFuayk7CiAgICAgICAgICAgIG15ICRpX29wZW5pbmcgPSAkbWF0ZV9pbmRleF90b19nb1skaV9uZXh0X25vbmJsYW5rXTsKICAgICAgICAgICAgaWYgKCAgICR0eXBlc190b19nb1skaV9wcmV2XSBuZSAnLCcKICAgICAgICAgICAgICAgICYmIGRlZmluZWQoJGlfb3BlbmluZykKICAgICAgICAgICAgICAgICYmICRpX29wZW5pbmcgPiAkaV9sYXN0X2JyZWFrICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIyBzZXQgYSBmb3JjZWQgYnJlYWtwb2ludCB0byBibG9jayByZWNvbWJpbmF0aW9uCiAgICAgICAgICAgICAgICAkaV9sb3dlc3QgPSAkaV9vcGVuaW5nOwogICAgICAgICAgICAgICAgJGZvcmNlZF9icmVha3BvaW50X3RvX2dvWyRpX2xvd2VzdF0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIGd1YXJkIGFnYWluc3QgaW5maW5pdGUgbG9vcCAoc2hvdWxkIG5ldmVyIGhhcHBlbikKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpZiAoICRpX2xvd2VzdCA8PSAkaV9sYXN0X2JyZWFrICkgewogICAgICAgICAgICBERVZFTF9NT0RFCiAgICAgICAgICAgICAgJiYgRmF1bHQoImlfbG93ZXN0PSRpX2xvd2VzdCA8PSBpX2xhc3RfYnJlYWs9JGlfbGFzdF9icmVha1xuIik7CiAgICAgICAgICAgICRpX2xvd2VzdCA9ICRpbWF4OwogICAgICAgIH0KCiAgICAgICAgREVCVUdfQlJFQUtfTElORVMKICAgICAgICAgICYmIHByaW50IHsqU1RET1VUfQoiQlJFQUs6IGJlc3QgaXMgaSA9ICRpX2xvd2VzdCBzdHJlbmd0aCA9ICRsb3dlc3Rfc3RyZW5ndGg7XG5SZWFzb24+PiAkTXNnXG4iOwoKICAgICAgICAkbGluZV9jb3VudCsrOwoKICAgICAgICAjIHNhdmUgdGhpcyBsaW5lIHNlZ21lbnQsIGFmdGVyIHRyaW1taW5nIGJsYW5rcyBhdCB0aGUgZW5kcwogICAgICAgIHB1c2goIEBpX2ZpcnN0LAogICAgICAgICAgICAoICR0eXBlc190b19nb1skaV9iZWdpbl0gZXEgJ2InICkgPyAkaV9iZWdpbiArIDEgOiAkaV9iZWdpbiApOwogICAgICAgIHB1c2goIEBpX2xhc3QsCiAgICAgICAgICAgICggJHR5cGVzX3RvX2dvWyRpX2xvd2VzdF0gZXEgJ2InICkgPyAkaV9sb3dlc3QgLSAxIDogJGlfbG93ZXN0ICk7CgogICAgICAgICMgc2V0IGEgZm9yY2VkIGJyZWFrcG9pbnQgYXQgYSBjb250YWluZXIgb3BlbmluZywgaWYgbmVjZXNzYXJ5LCB0bwogICAgICAgICMgc2lnbmFsIGEgYnJlYWsgYXQgYSBjbG9zaW5nIGNvbnRhaW5lci4gIEV4Y2VwdGluZyAnKCcgZm9yIG5vdy4KICAgICAgICBpZiAoCiAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICR0b2tlbnNfdG9fZ29bJGlfbG93ZXN0XSBlcSAneycKICAgICAgICAgICAgICAgIHx8ICR0b2tlbnNfdG9fZ29bJGlfbG93ZXN0XSBlcSAnWycKICAgICAgICAgICAgKQogICAgICAgICAgICAmJiAhJGZvcmNlZF9icmVha3BvaW50X3RvX2dvWyRpX2xvd2VzdF0KICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRzZWxmLT5zZXRfY2xvc2luZ19icmVha3BvaW50KCRpX2xvd2VzdCk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCByZWFkeSB0byBmaW5kIHRoZSBuZXh0IGJyZWFrcG9pbnQKICAgICAgICAkbGFzdF9icmVha19zdHJlbmd0aCA9ICRsb3dlc3Rfc3RyZW5ndGg7CiAgICAgICAgJGlfbGFzdF9icmVhayAgICAgICAgPSAkaV9sb3dlc3Q7CiAgICAgICAgJGlfYmVnaW4gICAgICAgICAgICAgPSAkaV9sb3dlc3QgKyAxOwoKICAgICAgICAjIHNraXAgcGFzdCBhIGJsYW5rCiAgICAgICAgaWYgKCAoICRpX2JlZ2luIDw9ICRpbWF4ICkgJiYgKCAkdHlwZXNfdG9fZ29bJGlfYmVnaW5dIGVxICdiJyApICkgewogICAgICAgICAgICAkaV9iZWdpbisrOwogICAgICAgIH0KICAgIH0gIyMgZW5kIHdoaWxlICggJGlfYmVnaW4gPD0gJGltYXgpCgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgRU5EIG9mIG1haW4gbG9vcCB0byBzZXQgY29udGludWF0aW9uIGJyZWFrcG9pbnRzCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyA/LzogcnVsZSA0IC0tIGlmIHdlIGJyb2tlIGF0IGEgJzonLCB0aGVuIGJyZWFrIGF0CiAgICAjIGNvcnJlc3BvbmRpbmcgJz8nIHVubGVzcyB0aGlzIGlzIGEgY2hhaW4gb2YgPzogZXhwcmVzc2lvbnMKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgaWYgKEBpX2NvbG9uX2JyZWFrcykgewogICAgICAgIG15ICRpc19jaGFpbiA9ICggJGNvbG9uc19pbl9vcmRlciAmJiBAaV9jb2xvbl9icmVha3MgPiAxICk7CiAgICAgICAgaWYgKCAhJGlzX2NoYWluICkgewogICAgICAgICAgICAkc2VsZi0+ZG9fY29sb25fYnJlYWtzKCBcQGlfY29sb25fYnJlYWtzLCBcQGlfZmlyc3QsIFxAaV9sYXN0ICk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAoIFxAaV9maXJzdCwgXEBpX2xhc3QsICRyYm9uZF9zdHJlbmd0aF90b19nbyApOwp9ICMjIGVuZCBzdWIgYnJlYWtfbG9uZ19saW5lcwoKIyBzbWFsbCBib25kIHN0cmVuZ3RoIG51bWJlcnMgdG8gaGVscCBicmVhayB0aWVzCnVzZSBjb25zdGFudCBUSU5ZX0JJQVMgPT4gMC4wMDAxOwp1c2UgY29uc3RhbnQgTUFYX0JJQVMgID0+IDAuMDAxOwoKbXkgJWlzX2RvdF9hbmRfb3I7CgpCRUdJTiB7CiAgICBteSBAcSA9IHF3KCAuICYmIHx8ICk7CiAgICBAaXNfZG90X2FuZF9vcntAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwp9CgpzdWIgYnJlYWtfbGluZXNfaW5uZXJfbG9vcCB7CgogICAgIyBGaW5kIHRoZSBiZXN0IG5leHQgYnJlYWtwb2ludCBpbiBpbmRleCByYW5nZSAoJGlfYmVnaW4gLi4gJGltYXgpCiAgICAjIHdoaWNoLCBpZiBwb3NzaWJsZSwgZG9lcyBub3QgZXhjZWVkIHRoZSBtYXhpbXVtIGxpbmUgbGVuZ3RoLgoKICAgIG15ICgKICAgICAgICAkc2VsZiwKCiAgICAgICAgJGlfYmVnaW4sCiAgICAgICAgJGlfbGFzdF9icmVhaywKICAgICAgICAkaW1heCwKICAgICAgICAkbGFzdF9icmVha19zdHJlbmd0aCwKICAgICAgICAkbGluZV9jb3VudCwKICAgICAgICAkcmJvbmRfc3RyZW5ndGhfdG9fZ28sCiAgICAgICAgJHNhd19nb29kX2JyZWFrLAoKICAgICkgPSBAXzsKCiAgICAjIEdpdmVuOgogICAgIyAgICRpX2JlZ2luICAgICAgICAgICAgICAgPSBmaXJzdCBpbmRleCBvZiByYW5nZQogICAgIyAgICRpX2xhc3RfYnJlYWsgICAgICAgICAgPSBpbmRleCBvZiBwcmV2aW91cyBicmVhawogICAgIyAgICRpbWF4ICAgICAgICAgICAgICAgICAgPSBsYXN0IGluZGV4IG9mIHJhbmdlCiAgICAjICAgJGxhc3RfYnJlYWtfc3RyZW5ndGggICA9IGJvbmQgc3RyZW5ndGggb2YgbGFzdCBicmVhawogICAgIyAgICRsaW5lX2NvdW50ICAgICAgICAgICAgPSBudW1iZXIgb2Ygb3V0cHV0IGxpbmVzIHNvIGZhcgogICAgIyAgICRyYm9uZF9zdHJlbmd0aF90b19nbyAgPSByZWYgdG8gYXJyYXkgb2YgYm9uZCBzdHJlbmd0aHMKICAgICMgICAkc2F3X2dvb2RfYnJlYWsgICAgICAgID0gdHJ1ZSBpZiBvbGQgbGluZSBoYWQgYSBnb29kIGJyZWFrcG9pbnQKCiAgICAjIFJldHVybnM6CiAgICAjICAgJGlfbG93ZXN0ICAgICAgICAgICAgICAgPSBpbmRleCBvZiBiZXN0IGJyZWFrcG9pbnQKICAgICMgICAkbG93ZXN0X3N0cmVuZ3RoICAgICAgICA9ICdib25kIHN0cmVuZ3RoJyBhdCBiZXN0IGJyZWFrcG9pbnQKICAgICMgICAkTXNnICAgICAgICAgICAgICAgICAgICA9IHN0cmluZyBvZiBkZWJ1ZyBpbmZvCgogICAgbXkgJE1zZyAgICAgICAgICAgICAgICAgICAgPSBFTVBUWV9TVFJJTkc7CiAgICBteSAkc3RyZW5ndGggICAgICAgICAgICAgICA9IE5PX0JSRUFLOwogICAgbXkgJGlfdGVzdCAgICAgICAgICAgICAgICAgPSAkaV9iZWdpbiAtIDE7CiAgICBteSAkaV9sb3dlc3QgICAgICAgICAgICAgICA9IC0xOwogICAgbXkgJHN0YXJ0aW5nX3N1bSAgICAgICAgICAgPSAkc3VtbWVkX2xlbmd0aHNfdG9fZ29bJGlfYmVnaW5dOwogICAgbXkgJGxvd2VzdF9zdHJlbmd0aCAgICAgICAgPSBOT19CUkVBSzsKICAgIG15ICRsZWFkaW5nX2FsaWdubWVudF90eXBlID0gRU1QVFlfU1RSSU5HOwogICAgbXkgJGxlYWRpbmdfc3BhY2VzICAgICAgICAgPSBsZWFkaW5nX3NwYWNlc190b19nbygkaV9iZWdpbik7CiAgICBteSAkbWF4aW11bV9saW5lX2xlbmd0aCA9CiAgICAgICRtYXhpbXVtX2xpbmVfbGVuZ3RoX2F0X2xldmVsWyAkbGV2ZWxzX3RvX2dvWyRpX2JlZ2luXSBdOwogICAgREVCVUdfQlJFQUtfTElORVMKICAgICAgJiYgZG8gewogICAgICAgICRNc2cgLj0gInVwZGF0aW5nIGxlYWRpbmcgc3BhY2VzIHRvIGJlICRsZWFkaW5nX3NwYWNlcyBhdCBpPSRpX2JlZ2luXG4iOwogICAgICB9OwoKICAgICMgRG8gbm90IHNlcGFyYXRlIGFuIGlzb2xhdGVkIGJhcmUgd29yZCBmcm9tIGFuIG9wZW5pbmcgcGFyZW4uCiAgICAjIEFsdGVybmF0ZSBGaXggIzIgZm9yIGlzc3VlIGIxMjk5LiAgVGhpcyB3YWl0cyBhcyBsb25nIGFzIHBvc3NpYmxlCiAgICAjIHRvIG1ha2UgdGhlIGRlY2lzaW9uLgogICAgIyBOb3RlIGZvciBmaXggI2MyNTA6IHRvIGtlZXAgbGluZSBicmVha3MgdW5jaGFuZ2VkIHVuZGVyIC1leHRydWRlIHdoZW4KICAgICMgc3dpdGNoaW5nIGZyb20gJ2knIHRvICdTJyBmb3Igc3Vicywgd2Ugd291bGQgaGF2ZSB0byBhbHNvIGNoZWNrICdTJywgaS5lLgogICAgIyA9fi9eW1NpXSQvLiAgQnV0IHRoaXMgd2FzIG5ldmVyIG5lY2Vzc2FyeSBhdCBhIHN1YiBzaWduYXR1cmUsIHNvIHdlIGxlYXZlCiAgICAjIGl0IGFsb25lIGFuZCBhbGxvdyB0aGUgbmV3IHZlcnNpb24gdG8gYmUgZGlmZmVyZW50IGZvciAtLWV4dHJ1ZGUuIEZvciBhCiAgICAjIHRlc3QgZmlsZSBydW4gcGVybDUyNy9zaWduYXR1cmVzLnQgd2l0aCAtLWV4dHJ1ZGUuCiAgICBpZiAoICR0eXBlc190b19nb1skaV9iZWdpbl0gZXEgJ2knCiAgICAgICAgJiYgc3Vic3RyKCAkdG9rZW5zX3RvX2dvWyRpX2JlZ2luXSwgMCwgMSApID1+IC9cdy8gKQogICAgewogICAgICAgIG15ICRpX25leHRfbm9uYmxhbmsgPSAkaW5leHRfdG9fZ29bJGlfYmVnaW5dOwogICAgICAgIGlmICggJHRva2Vuc190b19nb1skaV9uZXh0X25vbmJsYW5rXSBlcSAnKCcgKSB7CiAgICAgICAgICAgICRyYm9uZF9zdHJlbmd0aF90b19nby0+WyRpX2JlZ2luXSA9IE5PX0JSRUFLOwogICAgICAgIH0KICAgIH0KCiAgICAjIEF2b2lkIGEgYnJlYWsgd2hpY2ggd291bGQgc3RyYW5kIGEgc2luZ2xlIHB1bmN0dWF0aW9uCiAgICAjIHRva2VuLiAgRm9yIGV4YW1wbGUsIHdlIGRvIG5vdCB3YW50IHRvIHN0cmFuZCBhIGxlYWRpbmcKICAgICMgJy4nIHdoaWNoIGlzIGZvbGxvd2VkIGJ5IGEgbG9uZyBxdW90ZWQgc3RyaW5nLgogICAgIyBCdXQgbm90ZSB0aGF0IHdlIGRvIHdhbnQgdG8gZG8gdGhpcyB3aXRoIC1leHRydWRlIChsPTEpCiAgICAjIHNvIHBsZWFzZSB0ZXN0IGFueSBjaGFuZ2VzIHRvIHRoaXMgY29kZSBvbiAtZXh0cnVkZS4KICAgIGlmICgKICAgICAgICAgICAoICRpX2JlZ2luIDwgJGltYXggKQogICAgICAgICYmICggJHRva2Vuc190b19nb1skaV9iZWdpbl0gZXEgJHR5cGVzX3RvX2dvWyRpX2JlZ2luXSApCiAgICAgICAgJiYgISRmb3JjZWRfYnJlYWtwb2ludF90b19nb1skaV9iZWdpbl0KICAgICAgICAmJiAhKAoKICAgICAgICAgICAgIyBBbGxvdyBicmVhayBhZnRlciBhIGNsb3NpbmcgZXZhbCBicmFjZS4gVGhpcyBpcyBhbgogICAgICAgICAgICAjIGFwcHJveGltYXRlIHdheSB0byBzaW11bGF0ZSBhIGZvcmNlZCBicmVha3BvaW50IG1hZGUgaW4KICAgICAgICAgICAgIyBTZWN0aW9uIEIgYmVsb3cuICBObyBkaWZmZXJlbmNlcyBoYXZlIGJlZW4gZm91bmQsIGJ1dCBpZgogICAgICAgICAgICAjIG5lY2Vzc2FyeSB0aGUgZnVsbCBsb2dpYyBvZiBTZWN0aW9uIEIgY291bGQgYmUgdXNlZCBoZXJlCiAgICAgICAgICAgICMgKHNlZSBjMTY1KS4KICAgICAgICAgICAgJHRva2Vuc190b19nb1skaV9iZWdpbl0gZXEgJ30nCiAgICAgICAgICAgICYmICRibG9ja190eXBlX3RvX2dvWyRpX2JlZ2luXQogICAgICAgICAgICAmJiAkYmxvY2tfdHlwZV90b19nb1skaV9iZWdpbl0gZXEgJ2V2YWwnCiAgICAgICAgKQogICAgICAgICYmICgKICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgJGxlYWRpbmdfc3BhY2VzICsKICAgICAgICAgICAgICAgICRzdW1tZWRfbGVuZ3Roc190b19nb1sgJGlfYmVnaW4gKyAxIF0gLQogICAgICAgICAgICAgICAgJHN0YXJ0aW5nX3N1bQogICAgICAgICAgICApIDwgJG1heGltdW1fbGluZV9sZW5ndGgKICAgICAgICApCiAgICAgICkKICAgIHsKICAgICAgICAkaV90ZXN0ID0gbWluKCAkaW1heCwgJGluZXh0X3RvX2dvWyRpX2JlZ2luXSApIC0gMTsKICAgICAgICBERUJVR19CUkVBS19MSU5FUyAmJiBkbyB7CiAgICAgICAgICAgICRNc2cgLj0gIiA6c2tpcCBhaGVhZCBhdCBpPSRpX3Rlc3QiOwogICAgICAgIH07CiAgICB9CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgQmVnaW4gSU5ORVJfTE9PUCBvdmVyIHRoZSBpbmRleGVzIGluIHRoZSBfdG9fZ28gYXJyYXlzCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgd2hpbGUgKCArKyRpX3Rlc3QgPD0gJGltYXggKSB7CiAgICAgICAgbXkgJHR5cGUgICAgICAgICAgICAgICAgICAgICA9ICR0eXBlc190b19nb1skaV90ZXN0XTsKICAgICAgICBteSAkdG9rZW4gICAgICAgICAgICAgICAgICAgID0gJHRva2Vuc190b19nb1skaV90ZXN0XTsKICAgICAgICBteSAkaV9uZXh0X25vbmJsYW5rICAgICAgICAgID0gJGluZXh0X3RvX2dvWyRpX3Rlc3RdOwogICAgICAgIG15ICRuZXh0X25vbmJsYW5rX3R5cGUgICAgICAgPSAkdHlwZXNfdG9fZ29bJGlfbmV4dF9ub25ibGFua107CiAgICAgICAgbXkgJG5leHRfbm9uYmxhbmtfdG9rZW4gICAgICA9ICR0b2tlbnNfdG9fZ29bJGlfbmV4dF9ub25ibGFua107CiAgICAgICAgbXkgJG5leHRfbm9uYmxhbmtfYmxvY2tfdHlwZSA9ICRibG9ja190eXBlX3RvX2dvWyRpX25leHRfbm9uYmxhbmtdOwoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBTZWN0aW9uIEE6IEdldCB0b2tlbi10b2tlbiBzdHJlbmd0aCBhbmQgaGFuZGxlIGFueSBhZGp1c3RtZW50cwogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgIyBhZGp1c3RtZW50cyB0byB0aGUgcHJldmlvdXMgYm9uZCBzdHJlbmd0aCBtYXkgaGF2ZSBiZWVuIG1hZGUsIGFuZAogICAgICAgICMgd2UgbXVzdCBrZWVwIHRoZSBib25kIHN0cmVuZ3RoIG9mIGEgdG9rZW4gYW5kIGl0cyBmb2xsb3dpbmcgYmxhbmsKICAgICAgICAjIHRoZSBzYW1lOwogICAgICAgIG15ICRsYXN0X3N0cmVuZ3RoID0gJHN0cmVuZ3RoOwogICAgICAgICRzdHJlbmd0aCA9ICRyYm9uZF9zdHJlbmd0aF90b19nby0+WyRpX3Rlc3RdOwogICAgICAgIGlmICggJHR5cGUgZXEgJ2InICkgeyAkc3RyZW5ndGggPSAkbGFzdF9zdHJlbmd0aCB9CgogICAgICAgICMgcmVkdWNlIHN0cmVuZ3RoIGEgYml0IHRvIGJyZWFrIHRpZXMgYXQgYW4gb2xkIGNvbW1hIGJyZWFrcG9pbnQgLi4uCiAgICAgICAgaWYgKAoKICAgICAgICAgICAgJG9sZF9icmVha3BvaW50X3RvX2dvWyRpX3Rlc3RdCgogICAgICAgICAgICAjIFBhdGNoOiBsaW1pdGVkIHRvIGp1c3QgY29tbWFzIHRvIGF2b2lkIGJsaW5raW5nIHN0YXRlcwogICAgICAgICAgICAmJiAkdHlwZSBlcSAnLCcKCiAgICAgICAgICAgICMgd2hpY2ggaXMgYSAnZ29vZCcgYnJlYWtwb2ludCwgbWVhbmluZyAuLi4KICAgICAgICAgICAgIyB3ZSBkb24ndCB3YW50IHRvIGJyZWFrIGJlZm9yZSBpdAogICAgICAgICAgICAmJiAhJHdhbnRfYnJlYWtfYmVmb3JleyR0eXBlfQoKICAgICAgICAgICAgIyBhbmQgZWl0aGVyIHdlIHdhbnQgdG8gYnJlYWsgYmVmb3JlIHRoZSBuZXh0IHRva2VuCiAgICAgICAgICAgICMgb3IgdGhlIG5leHQgdG9rZW4gaXMgbm90IHNob3J0IChpLmUuIG5vdCBhICcqJywgJy8nIGV0Yy4pCiAgICAgICAgICAgICYmICRpX25leHRfbm9uYmxhbmsgPD0gJGltYXgKICAgICAgICAgICAgJiYgKCAgICR3YW50X2JyZWFrX2JlZm9yZXskbmV4dF9ub25ibGFua190eXBlfQogICAgICAgICAgICAgICAgfHwgJHRva2VuX2xlbmd0aHNfdG9fZ29bJGlfbmV4dF9ub25ibGFua10gPiAyCiAgICAgICAgICAgICAgICB8fCAkbmV4dF9ub25ibGFua190eXBlIGVxICcsJwogICAgICAgICAgICAgICAgfHwgJGlzX29wZW5pbmdfdHlwZXskbmV4dF9ub25ibGFua190eXBlfSApCiAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkc3RyZW5ndGggLT0gVElOWV9CSUFTOwogICAgICAgICAgICBERUJVR19CUkVBS19MSU5FUyAmJiBkbyB7ICRNc2cgLj0gIiA6LWJpYXMgYXQgaT0kaV90ZXN0IiB9OwogICAgICAgIH0KCiAgICAgICAgIyBvdGhlcndpc2UgaW5jcmVhc2Ugc3RyZW5ndGggYSBiaXQgaWYgdGhpcyB0b2tlbiB3b3VsZCBiZSBhdCB0aGUKICAgICAgICAjIG1heGltdW0gbGluZSBsZW5ndGguICBUaGlzIGlzIG5lY2Vzc2FyeSB0byBhdm9pZCBibGlua2luZwogICAgICAgICMgaW4gdGhlIGFib3ZlIGV4YW1wbGUgd2hlbiB0aGUgLWlvYiBmbGFnIGlzIGFkZGVkLgogICAgICAgIGVsc2UgewogICAgICAgICAgICBteSAkbGVuID0KICAgICAgICAgICAgICAkbGVhZGluZ19zcGFjZXMgKwogICAgICAgICAgICAgICRzdW1tZWRfbGVuZ3Roc190b19nb1sgJGlfdGVzdCArIDEgXSAtCiAgICAgICAgICAgICAgJHN0YXJ0aW5nX3N1bTsKICAgICAgICAgICAgaWYgKCAkbGVuID49ICRtYXhpbXVtX2xpbmVfbGVuZ3RoICkgewogICAgICAgICAgICAgICAgJHN0cmVuZ3RoICs9IFRJTllfQklBUzsKICAgICAgICAgICAgICAgIERFQlVHX0JSRUFLX0xJTkVTICYmIGRvIHsgJE1zZyAuPSAiIDorYmlhcyBhdCBpPSRpX3Rlc3QiIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBTZWN0aW9uIEI6IEhhbmRsZSBmb3JjZWQgYnJlYWtwb2ludHMKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIG15ICRtdXN0X2JyZWFrOwoKICAgICAgICAjIEZvcmNlIGFuIGltbWVkaWF0ZSBicmVhayBhdCBjZXJ0YWluIG9wZXJhdG9ycwogICAgICAgICMgd2l0aCBsb3dlciBsZXZlbCB0aGFuIHRoZSBzdGFydCBvZiB0aGUgbGluZSwKICAgICAgICAjIHVubGVzcyB3ZSd2ZSBhbHJlYWR5IHNlZW4gYSBiZXR0ZXIgYnJlYWsuCiAgICAgICAgIwogICAgICAgICMgTm90ZSBvbiBhbiBpc3N1ZSB3aXRoIGEgcHJlY2VkaW5nICc/JyA6CgogICAgICAgICMgVGhlcmUgbWF5IGJlIGEgYnJlYWsgYXQgYSBwcmV2aW91cyA/IGlmIHRoZSBsaW5lIGlzIGxvbmcuICBCZWNhdXNlCiAgICAgICAgIyBvZiB0aGlzIHdlIGRvIG5vdCB3YW50IHRvIGZvcmNlIGEgYnJlYWsgaWYgdGhlcmUgaXMgYSBwcmV2aW91cyA/IG9uCiAgICAgICAgIyB0aGlzIGxpbmUuICBGb3Igbm93IHRoZSBiZXN0IHdheSB0byBkbyB0aGlzIGlzIHRvIG5vdCBicmVhayBpZiB3ZQogICAgICAgICMgaGF2ZSBzZWVuIGEgbG93ZXIgc3RyZW5ndGggcG9pbnQsIHdoaWNoIGlzIHByb2JhYmx5IGEgPy4KICAgICAgICAjCiAgICAgICAgIyBFeGFtcGxlIG9mIHVud2FudGVkIGJyZWFrcyB3ZSBhcmUgYXZvaWRpbmcgYXQgYSAnLicgZm9sbG93aW5nIGEgPwogICAgICAgICMgZnJvbSBwb2QyaHRtbCB1c2luZyBwZXJsdGlkeSAtZ251OgogICAgICAgICMgKQogICAgICAgICMgPyAiXG4mbHQ7QSBOQU1FPVwiIgogICAgICAgICMgLiAkdmFsdWUKICAgICAgICAjIC4gIlwiJmd0O1xuJHRleHQmbHQ7L0EmZ3Q7XG4iCiAgICAgICAgIyA6ICJcbiR0eXBlJHBvZDIuaHRtbFwjIiAuICR2YWx1ZSAuICJcIiZndDskdGV4dCZsdDtcL0EmZ3Q7XG4iOwogICAgICAgIGlmICgKICAgICAgICAgICAgKCAkc3RyZW5ndGggPD0gJGxvd2VzdF9zdHJlbmd0aCApCiAgICAgICAgICAgICYmICggJG5lc3RpbmdfZGVwdGhfdG9fZ29bJGlfYmVnaW5dID4KICAgICAgICAgICAgICAgICRuZXN0aW5nX2RlcHRoX3RvX2dvWyRpX25leHRfbm9uYmxhbmtdICkKICAgICAgICAgICAgJiYgKAogICAgICAgICAgICAgICAgIyMgL14oXC58XCZcJnxcfFx8KSQvCiAgICAgICAgICAgICAgICAkaXNfZG90X2FuZF9vcnskbmV4dF9ub25ibGFua190eXBlfQogICAgICAgICAgICAgICAgfHwgKAogICAgICAgICAgICAgICAgICAgICRuZXh0X25vbmJsYW5rX3R5cGUgZXEgJ2snCgogICAgICAgICAgICAgICAgICAgICMjICAvXihhbmR8b3IpJC8gICMgbm90ZTogaW5jbHVkZXMgJ3hvcicgbm93CiAgICAgICAgICAgICAgICAgICAgJiYgJGlzX2FuZF9vcnskbmV4dF9ub25ibGFua190b2tlbn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKQogICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJHNlbGYtPnNldF9mb3JjZWRfYnJlYWtwb2ludCgkaV9uZXh0X25vbmJsYW5rKTsKICAgICAgICAgICAgREVCVUdfQlJFQUtfTElORVMKICAgICAgICAgICAgICAmJiBkbyB7ICRNc2cgLj0gIiA6Rm9yY2VkIGJyZWFrIGF0IGk9JGlfbmV4dF9ub25ibGFuayIgfTsKICAgICAgICB9CgogICAgICAgIGlmICgKCiAgICAgICAgICAgICMgVHJ5IHRvIHB1dCBhIGJyZWFrIHdoZXJlIHJlcXVlc3RlZCBieSBicmVha19saXN0cwogICAgICAgICAgICAkZm9yY2VkX2JyZWFrcG9pbnRfdG9fZ29bJGlfdGVzdF0KCiAgICAgICAgICAgICMgYnJlYWsgYmV0d2VlbiApIHsgaW4gYSBjb250aW51ZWQgbGluZSBzbyB0aGF0IHRoZSAneycgY2FuCiAgICAgICAgICAgICMgYmUgb3V0ZGVudGVkCiAgICAgICAgICAgICMgU2VlIHNpbWlsYXIgbG9naWMgaW4gYnJlYWtfbGlzdHMgd2hpY2ggY2F0Y2hlcyBpbnN0YW5jZXMKICAgICAgICAgICAgIyB3aGVyZSBhIGxpbmUgaXMganVzdCBzb21ldGhpbmcgbGlrZSAnKSB7Jy4gIFdlIGhhdmUgdG8KICAgICAgICAgICAgIyBiZSBjYXJlZnVsIGJlY2F1c2UgdGhlIGNvcnJlc3BvbmRpbmcgYmxvY2sga2V5d29yZCBtaWdodAogICAgICAgICAgICAjIG5vdCBiZSBvbiB0aGUgZmlyc3QgbGluZSwgc3VjaCBhcyAnZm9yJyBoZXJlOgogICAgICAgICAgICAjCiAgICAgICAgICAgICMgZXZhbCB7CiAgICAgICAgICAgICMgICAgIGZvciAoImEiKSB7CiAgICAgICAgICAgICMgICAgICAgICBmb3IgJHggKCAxLCAyICkgeyBsb2NhbCAkXyA9ICJiIjsgcy8oLiopLyskMS8gfQogICAgICAgICAgICAjICAgICB9CiAgICAgICAgICAgICMgfTsKICAgICAgICAgICAgIwogICAgICAgICAgICB8fCAoCiAgICAgICAgICAgICAgICAgICAkbGluZV9jb3VudAogICAgICAgICAgICAgICAgJiYgKCAkdG9rZW4gZXEgJyknICkKICAgICAgICAgICAgICAgICYmICggJG5leHRfbm9uYmxhbmtfdHlwZSBlcSAneycgKQogICAgICAgICAgICAgICAgJiYgKCRuZXh0X25vbmJsYW5rX2Jsb2NrX3R5cGUpCiAgICAgICAgICAgICAgICAmJiAoICRuZXh0X25vbmJsYW5rX2Jsb2NrX3R5cGUgbmUgJHRva2Vuc190b19nb1skaV9iZWdpbl0gKQoKICAgICAgICAgICAgICAgICMgUlQgIzEwNDQyNzogRG9udCBicmVhayBiZWZvcmUgb3BlbmluZyBzdWIgYnJhY2UgYmVjYXVzZQogICAgICAgICAgICAgICAgIyBzdWIgYmxvY2sgYnJlYWtzIGhhbmRsZWQgYXQgaGlnaGVyIGxldmVsLCB1bmxlc3MKICAgICAgICAgICAgICAgICMgaXQgbG9va3MgbGlrZSB0aGUgcHJlY2VkaW5nIGxpc3QgaXMgbG9uZyBhbmQgYnJva2VuCiAgICAgICAgICAgICAgICAmJiAhKAoKICAgICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXh0X25vbmJsYW5rX2Jsb2NrX3R5cGUgPX4gLyRTVUJfUEFUVEVSTi8KICAgICAgICAgICAgICAgICAgICAgICAgfHwgJG1hdGNoZXNfQVNVQnskbmV4dF9ub25ibGFua19ibG9ja190eXBlfQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAmJiAoICRuZXN0aW5nX2RlcHRoX3RvX2dvWyRpX2JlZ2luXSA9PQogICAgICAgICAgICAgICAgICAgICAgICAkbmVzdGluZ19kZXB0aF90b19nb1skaV9uZXh0X25vbmJsYW5rXSApCiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAgJiYgISRyT3B0c19vcGVuaW5nX2JyYWNlX2Fsd2F5c19vbl9yaWdodAogICAgICAgICAgICApCgogICAgICAgICAgICAjIFRoZXJlIGlzIGFuIGltcGxpZWQgZm9yY2VkIGJyZWFrIGF0IGEgdGVybWluYWwgb3BlbmluZyBicmFjZQogICAgICAgICAgICB8fCAoICggJHR5cGUgZXEgJ3snICkgJiYgKCAkaV90ZXN0ID09ICRpbWF4ICkgKQogICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgRm9yY2VkIGJyZWFrcG9pbnRzIG11c3Qgc29tZXRpbWVzIGJlIG92ZXJyaWRkZW4sIGZvciBleGFtcGxlCiAgICAgICAgICAgICMgYmVjYXVzZSBvZiBhIHNpZGUgY29tbWVudCBjYXVzaW5nIGEgTk9fQlJFQUsuICBJdCBpcyBlYXNpZXIKICAgICAgICAgICAgIyB0byBjYXRjaCB0aGlzIGhlcmUgdGhhbiB3aGVuIHRoZXkgYXJlIHNldC4KICAgICAgICAgICAgaWYgKCAkc3RyZW5ndGggPCBOT19CUkVBSyAtIDEgKSB7CiAgICAgICAgICAgICAgICAkc3RyZW5ndGggICA9ICRsb3dlc3Rfc3RyZW5ndGggLSBUSU5ZX0JJQVM7CiAgICAgICAgICAgICAgICAkbXVzdF9icmVhayA9IDE7CiAgICAgICAgICAgICAgICBERUJVR19CUkVBS19MSU5FUwogICAgICAgICAgICAgICAgICAmJiBkbyB7ICRNc2cgLj0gIiA6c2V0IG11c3RfYnJlYWsgYXQgaT0kaV9uZXh0X25vbmJsYW5rIiB9OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHF1aXQgaWYgYSBicmVhayBoZXJlIHdvdWxkIHB1dCBhIGdvb2QgdGVybWluYWwgdG9rZW4gb24KICAgICAgICAjIHRoZSBuZXh0IGxpbmUgYW5kIHdlIGFscmVhZHkgaGF2ZSBhIHBvc3NpYmxlIGJyZWFrCiAgICAgICAgaWYgKAogICAgICAgICAgICAgICAoICRuZXh0X25vbmJsYW5rX3R5cGUgZXEgJzsnIHx8ICRuZXh0X25vbmJsYW5rX3R5cGUgZXEgJywnICkKICAgICAgICAgICAgJiYgISRtdXN0X2JyZWFrCiAgICAgICAgICAgICYmICgKICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAkbGVhZGluZ19zcGFjZXMgKwogICAgICAgICAgICAgICAgICAgICRzdW1tZWRfbGVuZ3Roc190b19nb1sgJGlfbmV4dF9ub25ibGFuayArIDEgXSAtCiAgICAgICAgICAgICAgICAgICAgJHN0YXJ0aW5nX3N1bQogICAgICAgICAgICAgICAgKSA+ICRtYXhpbXVtX2xpbmVfbGVuZ3RoCiAgICAgICAgICAgICkKICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIGlmICggJGlfbG93ZXN0ID49IDAgKSB7CiAgICAgICAgICAgICAgICBERUJVR19CUkVBS19MSU5FUyAmJiBkbyB7CiAgICAgICAgICAgICAgICAgICAgJE1zZyAuPSAiIDpxdWl0IGF0IGdvb2QgdGVybWluYWw9JyRuZXh0X25vbmJsYW5rX3R5cGUnIjsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBTZWN0aW9uIEM6IExvb2sgZm9yIHRoZSBsb3dlc3QgYm9uZCBzdHJlbmd0aCBiZXR3ZWVuIHRva2VucwogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpZiAoICggJHN0cmVuZ3RoIDw9ICRsb3dlc3Rfc3RyZW5ndGggKSAmJiAoICRzdHJlbmd0aCA8IE5PX0JSRUFLICkgKSB7CgogICAgICAgICAgICAjIGJyZWFrIGF0IHByZXZpb3VzIGJlc3QgYnJlYWsgaWYgaXQgd291bGQgaGF2ZSBwcm9kdWNlZAogICAgICAgICAgICAjIGEgbGVhZGluZyBhbGlnbm1lbnQgb2YgY2VydGFpbiBjb21tb24gdG9rZW5zLCBhbmQgaXQKICAgICAgICAgICAgIyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgbGF0ZXN0IGNhbmRpZGF0ZSBicmVhawogICAgICAgICAgICBpZiAoJGxlYWRpbmdfYWxpZ25tZW50X3R5cGUpIHsKICAgICAgICAgICAgICAgIERFQlVHX0JSRUFLX0xJTkVTICYmIGRvIHsKICAgICAgICAgICAgICAgICAgICAkTXNnIC49CiAgICAgICAgICAgICAgICAgICAgICAiIDpsYXN0IGF0IGxlYWRpbmdfYWxpZ25tZW50PSckbGVhZGluZ19hbGlnbm1lbnRfdHlwZSciOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgRm9yY2UgYXQgbGVhc3Qgb25lIGJyZWFrcG9pbnQgaWYgb2xkIGNvZGUgaGFkIGdvb2QKICAgICAgICAgICAgIyBicmVhayBJdCBpcyBvbmx5IGNhbGxlZCBpZiBhIGJyZWFrcG9pbnQgaXMgcmVxdWlyZWQgb3IKICAgICAgICAgICAgIyBkZXNpcmVkLiAgVGhpcyB3aWxsIHByb2JhYmx5IG5lZWQgc29tZSBhZGp1c3RtZW50cwogICAgICAgICAgICAjIG92ZXIgdGltZS4gIEEgZ29hbCBpcyB0byB0cnkgdG8gYmUgc3VyZSB0aGF0LCBpZiBhIG5ldwogICAgICAgICAgICAjIHNpZGUgY29tbWVudCBpcyBpbnRyb2R1Y2VkIGludG8gZm9ybWF0dGVkIHRleHQsIHRoZW4KICAgICAgICAgICAgIyB0aGUgc2FtZSBicmVha3BvaW50cyB3aWxsIG9jY3VyLiAgc2NicmVhay50CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRpX3Rlc3QgPT0gJGltYXggICAgICAgICAgICAjIHdlIGFyZSBhdCB0aGUgZW5kCiAgICAgICAgICAgICAgICAmJiAhJGZvcmNlZF9icmVha3BvaW50X2NvdW50CiAgICAgICAgICAgICAgICAmJiAkc2F3X2dvb2RfYnJlYWsgICAgICAgICAgIyBvbGQgbGluZSBoYWQgZ29vZCBicmVhawogICAgICAgICAgICAgICAgJiYgJHR5cGUgPX4gL15bIztce10kLyAgICAgICMgYW5kIHRoaXMgbGluZSBlbmRzIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAnOycgb3Igc2lkZSBjb21tZW50CiAgICAgICAgICAgICAgICAmJiAkaV9sYXN0X2JyZWFrIDwgMCAgICAgICAgIyBhbmQgd2UgaGF2ZW4ndCBtYWRlIGEgYnJlYWsKICAgICAgICAgICAgICAgICYmICRpX2xvd2VzdCA+PSAwICAgICAgICAgICAjIGFuZCB3ZSBzYXcgYSBwb3NzaWJsZSBicmVhawogICAgICAgICAgICAgICAgJiYgJGlfbG93ZXN0IDwgJGltYXggLSAxICAgICMgKGJ1dCBub3QganVzdCBiZWZvcmUgdGhpcyA7KQogICAgICAgICAgICAgICAgJiYgJHN0cmVuZ3RoIC0gJGxvd2VzdF9zdHJlbmd0aCA8IDAuNSAqIFdFQUsgICAgIyBhbmQgaXQncyBnb29kCiAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgREVCVUdfQlJFQUtfTElORVMgJiYgZG8gewogICAgICAgICAgICAgICAgICAgICRNc2cgLj0gIiA6bGFzdCBhdCBnb29kIG9sZCBicmVha1xuIjsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIERvIG5vdCBza2lwIHBhc3QgYW4gaW1wb3J0YW50IGJyZWFrIHBvaW50IGluIGEgc2hvcnQgZmluYWwKICAgICAgICAgICAgIyBzZWdtZW50LiAgRm9yIGV4YW1wbGUsIHdpdGhvdXQgdGhpcyBjaGVjayB3ZSB3b3VsZCBtaXNzIHRoZQogICAgICAgICAgICAjIGJyZWFrIGF0IHRoZSBmaW5hbCAvIGluIHRoZSBmb2xsb3dpbmcgY29kZToKICAgICAgICAgICAgIwogICAgICAgICAgICAjICAkZGVwdGhfc3RvcCA9CiAgICAgICAgICAgICMgICAgKCAkdGF1ICogJG1hc3NfcGVsbGV0ICogJHFfMCAqCiAgICAgICAgICAgICMgICAgICAgICggMS4gLSBleHAoIC0kdF9zdG9wIC8gJHRhdSApICkgLQogICAgICAgICAgICAjICAgICAgICA0LiAqICRwaSAqICRmYWN0b3IgKiAka19pY2UgKgogICAgICAgICAgICAjICAgICAgICAoICR0X21lbHQgLSAkdF9pY2UgKSAqCiAgICAgICAgICAgICMgICAgICAgICRyX3BlbGxldCAqCiAgICAgICAgICAgICMgICAgICAgICR0X3N0b3AgKSAvCiAgICAgICAgICAgICMgICAgKCAkcmhvX2ljZSAqICRRcyAqICRwaSAqICRyX3BlbGxldCoqMiApOwogICAgICAgICAgICAjCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICRsaW5lX2NvdW50ID4gMgogICAgICAgICAgICAgICAgJiYgJGlfbG93ZXN0ID49IDAgICAgIyBhbmQgd2Ugc2F3IGEgcG9zc2libGUgYnJlYWsKICAgICAgICAgICAgICAgICYmICRpX2xvd2VzdCA8ICRpX3Rlc3QKICAgICAgICAgICAgICAgICYmICRpX3Rlc3QgPiAkaW1heCAtIDIKICAgICAgICAgICAgICAgICYmICRuZXN0aW5nX2RlcHRoX3RvX2dvWyRpX2JlZ2luXSA+CiAgICAgICAgICAgICAgICAkbmVzdGluZ19kZXB0aF90b19nb1skaV9sb3dlc3RdCiAgICAgICAgICAgICAgICAmJiAkbG93ZXN0X3N0cmVuZ3RoIDwgJGxhc3RfYnJlYWtfc3RyZW5ndGggLSAuNSAqIFdFQUsKICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICMgTWFrZSB0aGlzIGJyZWFrIGZvciBtYXRoIG9wZXJhdG9ycyBmb3Igbm93CiAgICAgICAgICAgICAgICBteSAkaXIgPSAkaW5leHRfdG9fZ29bJGlfbG93ZXN0XTsKICAgICAgICAgICAgICAgIG15ICRpbCA9IGlwcmV2X3RvX2dvKCRpcik7CiAgICAgICAgICAgICAgICBpZiAoICAgJHR5cGVzX3RvX2dvWyRpbF0gPX4gL15bXC9cKlwrXC1cJV0kLwogICAgICAgICAgICAgICAgICAgIHx8ICR0eXBlc190b19nb1skaXJdID1+IC9eW1wvXCpcK1wtXCVdJC8gKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIERFQlVHX0JSRUFLX0xJTkVTICYmIGRvIHsKICAgICAgICAgICAgICAgICAgICAgICAgJE1zZyAuPSAiIDpsYXN0LW5vc2tpcF9zaG9ydCI7CiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFVwZGF0ZSB0aGUgbWluaW11bSBib25kIHN0cmVuZ3RoIGxvY2F0aW9uCiAgICAgICAgICAgICRsb3dlc3Rfc3RyZW5ndGggPSAkc3RyZW5ndGg7CiAgICAgICAgICAgICRpX2xvd2VzdCAgICAgICAgPSAkaV90ZXN0OwogICAgICAgICAgICBpZiAoJG11c3RfYnJlYWspIHsKICAgICAgICAgICAgICAgIERFQlVHX0JSRUFLX0xJTkVTICYmIGRvIHsKICAgICAgICAgICAgICAgICAgICAkTXNnIC49ICIgOmxhc3QtbXVzdF9icmVhayI7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzZXQgZmxhZ3MgdG8gcmVtZW1iZXIgaWYgYSBicmVhayBoZXJlIHdpbGwgcHJvZHVjZSBhCiAgICAgICAgICAgICMgbGVhZGluZyBhbGlnbm1lbnQgb2YgY2VydGFpbiBjb21tb24gdG9rZW5zCiAgICAgICAgICAgIGlmICggICAkbGluZV9jb3VudCA+IDAKICAgICAgICAgICAgICAgICYmICRpX3Rlc3QgPCAkaW1heAogICAgICAgICAgICAgICAgJiYgKCAkbG93ZXN0X3N0cmVuZ3RoIC0gJGxhc3RfYnJlYWtfc3RyZW5ndGggPD0gTUFYX0JJQVMgKSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG15ICRpX2xhc3RfZW5kID0gaXByZXZfdG9fZ28oJGlfYmVnaW4pOwogICAgICAgICAgICAgICAgbXkgJHRva19iZWcgICAgPSAkdG9rZW5zX3RvX2dvWyRpX2JlZ2luXTsKICAgICAgICAgICAgICAgIG15ICR0eXBlX2JlZyAgID0gJHR5cGVzX3RvX2dvWyRpX2JlZ2luXTsKICAgICAgICAgICAgICAgIGlmICgKCiAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBmb3IgbGVhZGluZyBhbGlnbm1lbnQgb2YgY2VydGFpbiB0b2tlbnMKICAgICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICR0b2tfYmVnIGVxICRuZXh0X25vbmJsYW5rX3Rva2VuCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRpc19jaGFpbl9vcGVyYXRvcnskdG9rX2JlZ30KICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCAgICR0eXBlX2JlZyBlcSAnaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICR0eXBlX2JlZyBlcSAkdG9rX2JlZyApCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRuZXN0aW5nX2RlcHRoX3RvX2dvWyRpX2JlZ2luXSA+PQogICAgICAgICAgICAgICAgICAgICAgICAkbmVzdGluZ19kZXB0aF90b19nb1skaV9uZXh0X25vbmJsYW5rXQogICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICAgICAgfHwgKCAgICR0b2tlbnNfdG9fZ29bJGlfbGFzdF9lbmRdIGVxICR0b2tlbgogICAgICAgICAgICAgICAgICAgICAgICAmJiAkaXNfY2hhaW5fb3BlcmF0b3J7JHRva2VufQogICAgICAgICAgICAgICAgICAgICAgICAmJiAoICR0eXBlIGVxICdrJyB8fCAkdHlwZSBlcSAkdG9rZW4gKQogICAgICAgICAgICAgICAgICAgICAgICAmJiAkbmVzdGluZ19kZXB0aF90b19nb1skaV9sYXN0X2VuZF0gPj0KICAgICAgICAgICAgICAgICAgICAgICAgJG5lc3RpbmdfZGVwdGhfdG9fZ29bJGlfdGVzdF0gKQogICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJGxlYWRpbmdfYWxpZ25tZW50X3R5cGUgPSAkbmV4dF9ub25ibGFua190eXBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIFNlY3Rpb24gRDogU2VlIGlmIHRoZSBtYXhpbXVtIGxpbmUgbGVuZ3RoIHdpbGwgYmUgZXhjZWVkZWQKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgIyBRdWl0IGlmIHRoZXJlIGFyZSBubyBtb3JlIHRva2VucyB0byB0ZXN0CiAgICAgICAgbGFzdCBpZiAoICRpX3Rlc3QgPj0gJGltYXggKTsKCiAgICAgICAgIyBLZWVwIGdvaW5nIGlmIHdlIGhhdmUgbm90IHJlYWNoZWQgdGhlIGxpbWl0CiAgICAgICAgbXkgJGV4Y2VzcyA9CiAgICAgICAgICAkbGVhZGluZ19zcGFjZXMgKwogICAgICAgICAgJHN1bW1lZF9sZW5ndGhzX3RvX2dvWyAkaV90ZXN0ICsgMiBdIC0KICAgICAgICAgICRzdGFydGluZ19zdW0gLQogICAgICAgICAgJG1heGltdW1fbGluZV9sZW5ndGg7CgogICAgICAgIGlmICggJGV4Y2VzcyA8IDAgKSB7CiAgICAgICAgICAgIG5leHQ7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJGV4Y2VzcyA9PSAwICkgewoKICAgICAgICAgICAgIyBUbyBwcmV2ZW50IGJsaW5rZXJzIHdlIHdpbGwgYXZvaWQgbGVhdmluZyBhIHRva2VuIGV4YWN0bHkgYXQKICAgICAgICAgICAgIyB0aGUgbGluZSBsZW5ndGggbGltaXQgdW5sZXNzIGl0IGlzIHRoZSBsYXN0IHRva2VuIG9yIG9uZSBvZgogICAgICAgICAgICAjIHNldmVyYWwgImdvb2QiIHR5cGVzLgogICAgICAgICAgICAjCiAgICAgICAgICAgICMgVGhlIGZvbGxvd2luZyBjb2RlIHdhcyBhIGJsaW5rZXIgd2l0aCAtcGJwIGJlZm9yZSB0aGlzCiAgICAgICAgICAgICMgbW9kaWZpY2F0aW9uOgogICAgICAgICAgICAjICAgICAkbGFzdF9ub25ibGFua190b2tlbiBlcSAnKCcKICAgICAgICAgICAgIyAgICAgICAgICYmICRpc19pbmRpcmVjdF9vYmplY3RfdGFrZXJ7ICRwYXJlbl90eXBlCiAgICAgICAgICAgICMgICAgICAgICAgICAgWyRwYXJlbl9kZXB0aF0gfQogICAgICAgICAgICAjIFRoZSBpc3N1ZSBjYXVzaW5nIHRoZSBwcm9ibGVtIGlzIHRoYXQgaWYgdGhlCiAgICAgICAgICAgICMgdGVybSBbJHBhcmVuX2RlcHRoXSBnZXRzIGJyb2tlbiBhY3Jvc3MgYSBsaW5lIHRoZW4KICAgICAgICAgICAgIyB0aGUgd2hpdGVzcGFjZSByb3V0aW5lIGRvZXNuJ3Qgc2VlIGJvdGggb3BlbmluZyBhbmQgY2xvc2luZwogICAgICAgICAgICAjIGJyYWNrZXRzIGFuZCB3aWxsIGZvcm1hdCBsaWtlICdbICRwYXJlbl9kZXB0aCBdJy4gIFRoaXMKICAgICAgICAgICAgIyBsZWFkcyB0byBhbiBvc2NpbGxhdGlvbiBpbiBsZW5ndGggZGVwZW5kaW5nIGlmIHdlIGJyZWFrCiAgICAgICAgICAgICMgYmVmb3JlIHRoZSBjbG9zaW5nIGJyYWNrZXQgb3Igbm90LgogICAgICAgICAgICBpZiAoICAgJGlfdGVzdCArIDEgPCAkaW1heAogICAgICAgICAgICAgICAgJiYgJG5leHRfbm9uYmxhbmtfdHlwZSBuZSAnLCcKICAgICAgICAgICAgICAgICYmICEkaXNfY2xvc2luZ190eXBleyRuZXh0X25vbmJsYW5rX3R5cGV9ICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIyB0b28gbG9uZwogICAgICAgICAgICAgICAgREVCVUdfQlJFQUtfTElORVMgJiYgZG8gewogICAgICAgICAgICAgICAgICAgICRNc2cgLj0gIiA6dG9vX2xvbmciOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIyB0b28gbG9uZwogICAgICAgIH0KCiAgICAgICAgIyBhIGJyZWFrIGhlcmUgbWFrZXMgdGhlIGxpbmUgdG9vIGxvbmcgLi4uCgogICAgICAgIERFQlVHX0JSRUFLX0xJTkVTICYmIGRvIHsKICAgICAgICAgICAgbXkgJGx0b2sgPSAkdG9rZW47CiAgICAgICAgICAgIG15ICRydG9rID0KICAgICAgICAgICAgICAkbmV4dF9ub25ibGFua190b2tlbiA/ICRuZXh0X25vbmJsYW5rX3Rva2VuIDogRU1QVFlfU1RSSU5HOwogICAgICAgICAgICBteSAkaV90ZXN0cDIgPSAkaV90ZXN0ICsgMjsKICAgICAgICAgICAgaWYgKCAkaV90ZXN0cDIgPiAkbWF4X2luZGV4X3RvX2dvICsgMSApIHsKICAgICAgICAgICAgICAgICRpX3Rlc3RwMiA9ICRtYXhfaW5kZXhfdG9fZ28gKyAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggbGVuZ3RoKCRsdG9rKSA+IDYgKSB7ICRsdG9rID0gc3Vic3RyKCAkbHRvaywgMCwgOCApIH0KICAgICAgICAgICAgaWYgKCBsZW5ndGgoJHJ0b2spID4gNiApIHsgJHJ0b2sgPSBzdWJzdHIoICRydG9rLCAwLCA4ICkgfQogICAgICAgICAgICBwcmludCB7KlNURE9VVH0KIkJSRUFLOiBpPSRpX3Rlc3QgaW1heD0kaW1heCAkdHlwZXNfdG9fZ29bJGlfdGVzdF0gJG5leHRfbm9uYmxhbmtfdHlwZSBzcD0oJGxlYWRpbmdfc3BhY2VzKSBsbmV4dD0gJHN1bW1lZF9sZW5ndGhzX3RvX2dvWyRpX3Rlc3RwMl0gc3RyPSRzdHJlbmd0aCAgICAkbHRvayAkcnRva1xuIjsKICAgICAgICB9OwoKICAgICAgICAjIEV4Y2VwdGlvbjogYWxsb3cgb25lIGV4dHJhIHRlcm1pbmFsIHRva2VuIGFmdGVyIGV4Y2VlZGluZyBsaW5lIGxlbmd0aAogICAgICAgICMgaWYgaXQgd291bGQgc3RyYW5kIHRoaXMgdG9rZW4uCiAgICAgICAgaWYgKCAgICRpX2xvd2VzdCA9PSAkaV90ZXN0CiAgICAgICAgICAgICYmICR0b2tlbl9sZW5ndGhzX3RvX2dvWyRpX3Rlc3RdID4gMQogICAgICAgICAgICAmJiAoICRuZXh0X25vbmJsYW5rX3R5cGUgZXEgJzsnIHx8ICRuZXh0X25vbmJsYW5rX3R5cGUgZXEgJywnICkKICAgICAgICAgICAgJiYgJHJPcHRzX2Z1enp5X2xpbmVfbGVuZ3RoICkKICAgICAgICB7CiAgICAgICAgICAgIERFQlVHX0JSRUFLX0xJTkVTICYmIGRvIHsKICAgICAgICAgICAgICAgICRNc2cgLj0gIiA6ZG9fbm90X3N0cmFuZCBuZXh0PSckbmV4dF9ub25ibGFua190eXBlJyI7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIG5leHQ7CiAgICAgICAgfQoKICAgICAgICAjIFN0b3AgaWYgaGVyZSBpZiB3ZSBoYXZlIGEgc29sdXRpb24gYW5kIHRoZSBsaW5lIHdpbGwgYmUgdG9vIGxvbmcKICAgICAgICBpZiAoICRpX2xvd2VzdCA+PSAwICkgewogICAgICAgICAgICBERUJVR19CUkVBS19MSU5FUyAmJiBkbyB7CiAgICAgICAgICAgICAgICAkTXNnIC49CiIgOkRvbmUtdG9vX2xvbmcgJiYgaV9sb3dlc3Q9JGlfbG93ZXN0IGF0IGl0ZXN0PSRpX3Rlc3QsIGltYXg9JGltYXgiOwogICAgICAgICAgICB9OwogICAgICAgICAgICBsYXN0OwogICAgICAgIH0KICAgIH0gIyMgZW5kIHdoaWxlICggKyskaV90ZXN0IDw9ICRpbWF4KQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBFbmQgSU5ORVJfTE9PUCBvdmVyIHRoZSBpbmRleGVzIGluIHRoZSBfdG9fZ28gYXJyYXlzCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAjIEJlIHN1cmUgd2UgcmV0dXJuIGFuIGluZGV4IGluIHRoZSByYW5nZSAoJGliZWdpbiAuLiAkaW1heCkuCiAgICAjIFdlIHdpbGwgYnJlYWsgYXQgaW1heCBpZiBubyBvdGhlciBicmVhayB3YXMgZm91bmQuCiAgICBpZiAoICRpX2xvd2VzdCA8IDAgKSB7ICRpX2xvd2VzdCA9ICRpbWF4IH0KCiAgICByZXR1cm4gKCAkaV9sb3dlc3QsICRsb3dlc3Rfc3RyZW5ndGgsICRNc2cgKTsKfSAjIyBlbmQgc3ViIGJyZWFrX2xpbmVzX2lubmVyX2xvb3AKCnN1YiBkb19jb2xvbl9icmVha3MgewoKICAgIG15ICggJHNlbGYsICRyaV9jb2xvbl9icmVha3MsICRyaV9maXJzdCwgJHJpX2xhc3QgKSA9IEBfOwoKICAgICMgR2l2ZW46CiAgICAjICAgJHJpX2NvbG9uX2JyZWFrcyA9IHJlZiB0byBsaXN0IG9mIGluZGV4ZXMgYnJlYWtzIGF0ICc6JyB0b2tlbnMKICAgICMgICAkcmlfZmlyc3QgLSByZWZlcmVuY2UgdG8gY3VycmVudCBsaXN0IG9mIHRoZSBmaXJzdCBpbmRleCAkaSBmb3IgZWFjaAogICAgIyAgICAgICAgICAgICAgIG91dHB1dCBsaW5lIGluIHRoaXMgYmF0Y2gKICAgICMgICAkcmlfbGFzdCAtIHJlZmVyZW5jZSB0byBjdXJyZW50IGxpc3Qgb2YgdGhlIGxhc3QgaW5kZXggJGkgZm9yIGVhY2gKICAgICMgICAgICAgICAgICAgICBvdXRwdXQgbGluZSBpbiB0aGlzIGJhdGNoCgogICAgIyBBZGQgYWRkaXRpb25hbCBicmVha3MgaWYgd2UgYXJlIGluIGEgPy86IGNoYWluLgogICAgIyBTaW1wbGlmaWVkIG1ldGhvZCB1c2VkIGhlcmU6IFRoaXMgaXMgYSA/LzogY2hhaW4gaWYgaXQgaGFzCiAgICAjIG11bHRpcGxlID8vOiBwYWlycyBhbGwgaW4gb3JkZXI7IG90aGVyd2lzZSBub3QuCgogICAgbXkgQGluc2VydF9saXN0ID0gKCk7CiAgICBmb3JlYWNoICggQHskcmlfY29sb25fYnJlYWtzfSApIHsKICAgICAgICBteSAkaV9xdWVzdGlvbiA9ICRtYXRlX2luZGV4X3RvX2dvWyRfXTsKICAgICAgICBpZiAoIGRlZmluZWQoJGlfcXVlc3Rpb24pICkgewogICAgICAgICAgICBpZiAoICR3YW50X2JyZWFrX2JlZm9yZXsnPyd9ICkgewogICAgICAgICAgICAgICAgJGlfcXVlc3Rpb24gPSBpcHJldl90b19nbygkaV9xdWVzdGlvbik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJGlfcXVlc3Rpb24gPj0gMCApIHsKICAgICAgICAgICAgICAgIHB1c2ggQGluc2VydF9saXN0LCAkaV9xdWVzdGlvbjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkc2VsZi0+aW5zZXJ0X2FkZGl0aW9uYWxfYnJlYWtzKCBcQGluc2VydF9saXN0LCAkcmlfZmlyc3QsICRyaV9sYXN0ICk7CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBkb19jb2xvbl9icmVha3MKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDT0RFIFNFQ1RJT04gMTE6IENvZGUgdG8gYnJlYWsgbG9uZyBsaXN0cwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgp7ICAgICMjIGJlZ2luIGNsb3N1cmUgYnJlYWtfbGlzdHMKCiAgICAjIFRoZXNlIHJvdXRpbmVzIGFuZCB2YXJpYWJsZXMgYXJlIGludm9sdmVkIGluIGZpbmRpbmcgZ29vZAogICAgIyBwbGFjZXMgdG8gYnJlYWsgbG9uZyBsaXN0cy4KCiAgICBteSAoCgogICAgICAgICRibG9ja190eXBlLAogICAgICAgICRjdXJyZW50X2RlcHRoLAogICAgICAgICRkZXB0aCwKICAgICAgICAkaV9sYXN0X2NvbG9uLAogICAgICAgICRpX2xpbmVfZW5kLAogICAgICAgICRpX2xpbmVfc3RhcnQsCiAgICAgICAgJGlfbGFzdF9ub25ibGFua190b2tlbiwKICAgICAgICAkbGFzdF9ub25ibGFua19ibG9ja190eXBlLAogICAgICAgICRsYXN0X25vbmJsYW5rX3Rva2VuLAogICAgICAgICRsYXN0X25vbmJsYW5rX3R5cGUsCiAgICAgICAgJGxhc3Rfb2xkX2JyZWFrcG9pbnRfY291bnQsCiAgICAgICAgJG1pbmltdW1fZGVwdGgsCiAgICAgICAgJG5leHRfbm9uYmxhbmtfYmxvY2tfdHlwZSwKICAgICAgICAkbmV4dF9ub25ibGFua190b2tlbiwKICAgICAgICAkbmV4dF9ub25ibGFua190eXBlLAogICAgICAgICRvbGRfYnJlYWtwb2ludF9jb3VudCwKICAgICAgICAkc3RhcnRpbmdfYnJlYWtwb2ludF9jb3VudCwKICAgICAgICAkc3RhcnRpbmdfZGVwdGgsCiAgICAgICAgJHRva2VuLAogICAgICAgICR0eXBlLAogICAgICAgICR0eXBlX3NlcXVlbmNlLAoKICAgICk7CgogICAgbXkgKAoKICAgICAgICBAYnJlYWtwb2ludF9zdGFjaywKICAgICAgICBAYnJlYWtwb2ludF91bmRvX3N0YWNrLAogICAgICAgIEBjb21tYV9pbmRleCwKICAgICAgICBAY29udGFpbmVyX3R5cGUsCiAgICAgICAgQGlkZW50aWZpZXJfY291bnRfc3RhY2ssCiAgICAgICAgQGluZGV4X2JlZm9yZV9hcnJvdywKICAgICAgICBAaW50ZXJydXB0ZWRfbGlzdCwKICAgICAgICBAaXRlbV9jb3VudF9zdGFjaywKICAgICAgICBAbGFzdF9jb21tYV9pbmRleCwKICAgICAgICBAbGFzdF9kb3RfaW5kZXgsCiAgICAgICAgQGxhc3Rfbm9uYmxhbmtfdHlwZV9zdGFjaywKICAgICAgICBAb2xkX2JyZWFrcG9pbnRfY291bnRfc3RhY2ssCiAgICAgICAgQG9wZW5pbmdfc3RydWN0dXJlX2luZGV4X3N0YWNrLAogICAgICAgIEByZm9yX3NlbWljb2xvbl9saXN0LAogICAgICAgIEBoYXNfb2xkX2xvZ2ljYWxfYnJlYWtwb2ludHMsCiAgICAgICAgQHJhbmRfb3JfbGlzdCwKICAgICAgICBAaV9lcXVhbHMsCiAgICAgICAgQG92ZXJyaWRlX2NhYjMsCiAgICAgICAgQHR5cGVfc2VxdWVuY2Vfc3RhY2ssCgogICAgKTsKCiAgICAjIHRoZXNlIGFycmF5cyBtdXN0IHJldGFpbiB2YWx1ZXMgYmV0d2VlbiBjYWxscwogICAgbXkgKCBAaGFzX2Jyb2tlbl9zdWJsaXN0LCBAZG9udF9hbGlnbiwgQHdhbnRfY29tbWFfYnJlYWsgKTsKCiAgICBteSAkbGVuZ3RoX3RvbDsKICAgIG15ICRscF90b2xfYm9vc3Q7CgogICAgc3ViIGluaXRpYWxpemVfYnJlYWtfbGlzdHMgewogICAgICAgIEBkb250X2FsaWduICAgICAgICAgPSAoKTsKICAgICAgICBAaGFzX2Jyb2tlbl9zdWJsaXN0ID0gKCk7CiAgICAgICAgQHdhbnRfY29tbWFfYnJlYWsgICA9ICgpOwoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBTZXQgdG9sZXJhbmNlcyB0byBwcmV2ZW50IGZvcm1hdHRpbmcgaW5zdGFiaWxpdGllcwogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgIyBEZWZpbmUgdG9sZXJhbmNlcyB0byB1c2Ugd2hlbiBjaGVja2luZyBpZiBjbG9zZWQKICAgICAgICAjIGNvbnRhaW5lcnMgd2lsbCBmaXQgb24gb25lIGxpbmUuICBUaGlzIGlzIG5lY2Vzc2FyeSB0byBhdm9pZAogICAgICAgICMgZm9ybWF0dGluZyBpbnN0YWJpbGl0eS4gVGhlIGJhc2ljIHRvbGVyYW5jZSBpcyBiYXNlZCBvbiB0aGUKICAgICAgICAjIGZvbGxvd2luZzoKCiAgICAgICAgIyAtIEFsd2F5cyBhbGxvdyBmb3IgYXQgbGVhc3Qgb25lIGV4dHJhIHNwYWNlIGFmdGVyIGEgY2xvc2luZyB0b2tlbiBzbwogICAgICAgICMgdGhhdCB3ZSBkbyBub3Qgc3RyYW5kIGEgY29tbWEgb3Igc2VtaWNvbG9uLiAob25lbGluZS50KS4KCiAgICAgICAgIyAtIFVzZSBhbiBpbmNyZWFzZWQgbGluZSBsZW5ndGggdG9sZXJhbmNlIHdoZW4gLWNpID4gLWkgdG8gYXZvaWQKICAgICAgICAjIGJsaW5raW5nIHN0YXRlcyAoY2FzZSBiOTIzIGFuZCBvdGhlcnMpLgogICAgICAgICRsZW5ndGhfdG9sID0KICAgICAgICAgIDEgKyBtYXgoIDAsICRyT3B0c19jb250aW51YXRpb25faW5kZW50YXRpb24gLSAkck9wdHNfaW5kZW50X2NvbHVtbnMgKTsKCiAgICAgICAgIyBJbiBhZGRpdGlvbiwgaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byB1c2UgYSBmZXcgZXh0cmEgdG9sZXJhbmNlIHNwYWNlcwogICAgICAgICMgd2hlbiAtbHAgaXMgdXNlZCBhbmQvb3Igd2hlbiAteGNpIGlzIHVzZWQuICBUaGUgaGlzdG9yeSBvZiB0aGlzCiAgICAgICAgIyBzbyBmYXIgaXMgYXMgZm9sbG93czoKCiAgICAgICAgIyBGSVgxOiBBdCBsZWFzdCAzIGNoYXJhY3RlcnMgd2VyZSBiZWVuIGZvdW5kIHRvIGJlIHJlcXVpcmVkIGZvciAtbHAKICAgICAgICAjIHRvIGZpeGVzIGNhc2VzIGIxMDU5IGIxMDYzIGIxMTE3LgoKICAgICAgICAjIEZJWDI6IEZ1cnRoZXIgdGVzdGluZyBzaG93ZWQgdGhhdCB3ZSBuZWVkIGEgdG90YWwgb2YgMyBleHRyYSBzcGFjZXMKICAgICAgICAjIHdoZW4gLWxwIGlzIHNldCBmb3Igbm9uLWxpc3RzLCBhbmQgYXQgbGVhc3QgMiBzcGFjZXMgd2hlbiAtbHAgYW5kCiAgICAgICAgIyAteGNpIGFyZSBzZXQuCiAgICAgICAgIyBGaXhlcyBjYXNlcyBiMTA2MyBiMTEwMyBiMTEzNCBiMTEzNSBiMTEzNiBiMTEzOCBiMTE0MCBiMTE0MyBiMTE0NAogICAgICAgICMgYjExNDUgYjExNDYgYjExNDcgYjExNDggYjExNTEgYjExNTIgYjExNTMgYjExNTQgYjExNTYgYjExNTcgYjExNjQKICAgICAgICAjIGIxMTY1CgogICAgICAgICMgRklYMzogVG8gZml4IGNhc2VzIGIxMTY5IGIxMTcwIGIxMTcxLCBhbiB1cGRhdGUgd2FzIG1hZGUgaW4gc3ViCiAgICAgICAgIyAnZmluZF90b2tlbl9zdGFydGluZ19saXN0JyB0byBnbyBiYWNrIGJlZm9yZSBhbiBpbml0aWFsIGJsYW5rIHNwYWNlLgogICAgICAgICMgVGhpcyBmaXhlZCB0aGVzZSB0aHJlZSBjYXNlcywgYW5kIGFsbG93ZWQgdGhlIHRvbGVyYW5jZXMgdG8gYmUKICAgICAgICAjIHJlZHVjZWQgdG8gY29udGludWUgdG8gZml4IGFsbCBvdGhlciBrbm93biBjYXNlcyBvZiBpbnN0YWJpbGl0eS4KICAgICAgICAjIFRoaXMgZ2l2ZXMgdGhlIGN1cnJlbnQgdG9sZXJhbmNlIGZvcm11bGF0aW9uLgoKICAgICAgICAkbHBfdG9sX2Jvb3N0ID0gMDsKCiAgICAgICAgaWYgKCRyT3B0c19saW5lX3VwX3BhcmVudGhlc2VzKSB7CgogICAgICAgICAgICAjIGJvb3N0IHRvbCBmb3IgY29tYmluYXRpb24gLWxwIC14Y2kKICAgICAgICAgICAgaWYgKCRyT3B0c19leHRlbmRlZF9jb250aW51YXRpb25faW5kZW50YXRpb24pIHsKICAgICAgICAgICAgICAgICRscF90b2xfYm9vc3QgPSAyOwoKICAgICAgICAgICAgICAgICMgYW5kIG9uZSBtb3JlIGZvciAtbHAgLXhjaSAtdm1sbCAoYjE0NzAsIGIxNDc0LCBiMTI2NikKICAgICAgICAgICAgICAgIGlmICgkck9wdHNfdmFyaWFibGVfbWF4aW11bV9saW5lX2xlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICRscF90b2xfYm9vc3QgPSBtYXgoIDIsICRyT3B0c19pbmRlbnRfY29sdW1ucyApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGJvb3N0IHRvbCBmb3IgY29tYmluYXRpb24gLWxwIGFuZCBhbnkgLXZ0YyA+IDAsIGJ1dCBvbmx5IGZvcgogICAgICAgICAgICAjIG5vbi1saXN0IGNvbnRhaW5lcnMKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgga2V5cyAlY2xvc2luZ192ZXJ0aWNhbF90aWdodG5lc3MgKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dAogICAgICAgICAgICAgICAgICAgICAgdW5sZXNzICggJGNsb3NpbmdfdmVydGljYWxfdGlnaHRuZXNzeyRffSApOwogICAgICAgICAgICAgICAgICAgICRscF90b2xfYm9vc3QgPSAxOyAgICAjIEZpeGVzIEIxMTkzOwogICAgICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgRGVmaW5lIGEgbGV2ZWwgd2hlcmUgbGlzdCBmb3JtYXR0aW5nIGJlY29tZXMgaGlnaGx5IHN0cmVzc2VkIGFuZAogICAgICAgICMgbmVlZHMgdG8gYmUgc2ltcGxpZmllZC4gSW50cm9kdWNlZCBmb3IgY2FzZSBiMTI2Mi4KICAgICAgICAjICRsaXN0X3N0cmVzc19sZXZlbCA9IG1pbigkc3RyZXNzX2xldmVsX2FscGhhLCAkc3RyZXNzX2xldmVsX2JldGEgKyAyKTsKICAgICAgICAjIFRoaXMgaXMgbm93ICckaGlnaF9zdHJlc3NfbGV2ZWwnLgoKICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgaW5pdGlhbGl6ZV9icmVha19saXN0cwoKICAgICMgcm91dGluZSB0byBkZWZpbmUgZXNzZW50aWFsIHZhcmlhYmxlcyB3aGVuIHdlIGdvICd1cCcgdG8KICAgICMgYSBuZXcgZGVwdGgKICAgIHN1YiBjaGVja19mb3JfbmV3X21pbmltdW1fZGVwdGggewogICAgICAgIG15ICggJHNlbGYsICRkZXB0aF90LCAkc2Vxbm8gKSA9IEBfOwoKICAgICAgICAjIEluaXRpYWxpemUgZm9yIGEgbmV3IG1pbmltdW0gZGVwdGgKCiAgICAgICAgIyBHaXZlbjoKICAgICAgICAjICAgJGRlcHRoX3QgPSBuZXcgZGVwdGgKICAgICAgICAjICAgJHNlcW5vID0gc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBwYXJlbnQgY29udGFpbmVyCiAgICAgICAgaWYgKCAkZGVwdGhfdCA8ICRtaW5pbXVtX2RlcHRoICkgewoKICAgICAgICAgICAgJG1pbmltdW1fZGVwdGggPSAkZGVwdGhfdDsKCiAgICAgICAgICAgICMgdGhlc2UgYXJyYXlzIG5lZWQgbm90IHJldGFpbiB2YWx1ZXMgYmV0d2VlbiBjYWxscwogICAgICAgICAgICBteSAkb2xkX3NlcW5vICAgICA9ICR0eXBlX3NlcXVlbmNlX3N0YWNrWyRkZXB0aF90XTsKICAgICAgICAgICAgbXkgJGNoYW5nZWRfc2Vxbm8gPSAhZGVmaW5lZCgkb2xkX3NlcW5vKSB8fCAkb2xkX3NlcW5vICE9ICRzZXFubzsKICAgICAgICAgICAgJHR5cGVfc2VxdWVuY2Vfc3RhY2tbJGRlcHRoX3RdID0gJHNlcW5vOwogICAgICAgICAgICAkb3ZlcnJpZGVfY2FiM1skZGVwdGhfdF0gICAgICAgPSB1bmRlZjsKICAgICAgICAgICAgaWYgKCAkck9wdHNfY29tbWFfYXJyb3dfYnJlYWtwb2ludHMgPT0gMyAmJiAkc2Vxbm8gKSB7CiAgICAgICAgICAgICAgICAkb3ZlcnJpZGVfY2FiM1skZGVwdGhfdF0gPSAkc2VsZi0+W19yb3ZlcnJpZGVfY2FiM19dLT57JHNlcW5vfTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkYnJlYWtwb2ludF9zdGFja1skZGVwdGhfdF0gICAgICAgICA9ICRzdGFydGluZ19icmVha3BvaW50X2NvdW50OwogICAgICAgICAgICAkY29udGFpbmVyX3R5cGVbJGRlcHRoX3RdICAgICAgICAgICA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgJGlkZW50aWZpZXJfY291bnRfc3RhY2tbJGRlcHRoX3RdICAgPSAwOwogICAgICAgICAgICAkaW5kZXhfYmVmb3JlX2Fycm93WyRkZXB0aF90XSAgICAgICA9IC0xOwogICAgICAgICAgICAkaW50ZXJydXB0ZWRfbGlzdFskZGVwdGhfdF0gICAgICAgICA9IDE7CiAgICAgICAgICAgICRpdGVtX2NvdW50X3N0YWNrWyRkZXB0aF90XSAgICAgICAgID0gMDsKICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfdHlwZV9zdGFja1skZGVwdGhfdF0gPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgICRvcGVuaW5nX3N0cnVjdHVyZV9pbmRleF9zdGFja1skZGVwdGhfdF0gPSAtMTsKCiAgICAgICAgICAgICRicmVha3BvaW50X3VuZG9fc3RhY2tbJGRlcHRoX3RdICAgICAgID0gdW5kZWY7CiAgICAgICAgICAgICRjb21tYV9pbmRleFskZGVwdGhfdF0gICAgICAgICAgICAgICAgID0gdW5kZWY7CiAgICAgICAgICAgICRsYXN0X2NvbW1hX2luZGV4WyRkZXB0aF90XSAgICAgICAgICAgID0gdW5kZWY7CiAgICAgICAgICAgICRsYXN0X2RvdF9pbmRleFskZGVwdGhfdF0gICAgICAgICAgICAgID0gdW5kZWY7CiAgICAgICAgICAgICRvbGRfYnJlYWtwb2ludF9jb3VudF9zdGFja1skZGVwdGhfdF0gID0gdW5kZWY7CiAgICAgICAgICAgICRoYXNfb2xkX2xvZ2ljYWxfYnJlYWtwb2ludHNbJGRlcHRoX3RdID0gMDsKICAgICAgICAgICAgJHJhbmRfb3JfbGlzdFskZGVwdGhfdF0gICAgICAgICAgICAgICAgPSBbXTsKICAgICAgICAgICAgJHJmb3Jfc2VtaWNvbG9uX2xpc3RbJGRlcHRoX3RdICAgICAgICAgPSBbXTsKICAgICAgICAgICAgJGlfZXF1YWxzWyRkZXB0aF90XSAgICAgICAgICAgICAgICAgICAgPSAtMTsKCiAgICAgICAgICAgICMgdGhlc2UgYXJyYXlzIG11c3QgcmV0YWluIHZhbHVlcyBiZXR3ZWVuIGNhbGxzCiAgICAgICAgICAgIGlmICggJGNoYW5nZWRfc2Vxbm8gfHwgIWRlZmluZWQoICRoYXNfYnJva2VuX3N1Ymxpc3RbJGRlcHRoX3RdICkgKSB7CiAgICAgICAgICAgICAgICAkZG9udF9hbGlnblskZGVwdGhfdF0gICAgICAgICA9IDA7CiAgICAgICAgICAgICAgICAkaGFzX2Jyb2tlbl9zdWJsaXN0WyRkZXB0aF90XSA9IDA7CiAgICAgICAgICAgICAgICAkd2FudF9jb21tYV9icmVha1skZGVwdGhfdF0gICA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGNoZWNrX2Zvcl9uZXdfbWluaW11bV9kZXB0aAoKICAgIHN1YiBzZXRfY29tbWFfYnJlYWtwb2ludHMgewoKICAgICAgICBteSAoICRzZWxmLCAkaSwgJGRkLCAkcmJvbmRfc3RyZW5ndGhfYmlhcyApID0gQF87CgogICAgICAgICMgRGVjaWRlIHdoaWNoIGNvbW1hcyB0byBicmVhayBhdCB3aXRoaW4gYSBjb250YWluZXIKICAgICAgICAjIEdpdmVuOgogICAgICAgICMgICAkaSAgPSBpbmRleCBvZiBjdXJyZW50IHRva2VuIGluIG1haW4gbG9vcCBvdmVyIHRva2Vucywgb3IKICAgICAgICAjICAgICAgID0gJG1heF9pbmRleF90b19nbyArIDEgZm9yIHBvc3QtbG9vcCBvcGVyYXRpb25zIChjNDEwKQogICAgICAgICMgICAkZGQgPSBzdGFjayBkZXB0aAogICAgICAgICMgICAkcmJvbmQtc3RyZW5ndGhfYmlhcyA9IHJlZiB0byBhcnJheSBvZiBib25kIHN0cmVuZ3RoIGJpYXNlcyB3aGljaAogICAgICAgICMgICAgICAgICAgICBtYXkgYmUgdXBkYXRlZCBmb3IgY29tbWFzIG5vdCBpbiBsaXN0cwogICAgICAgICMgUmV0dXJuOgogICAgICAgICMgICAkYnBfY291bnQgPSBudW1iZXIgb2YgY29tbWEgYnJlYWtwb2ludHMgc2V0CiAgICAgICAgIyAgICRkb19ub3RfYnJlYWtfYXBhcnQgPSBhIGZsYWcgaW5kaWNhdGluZyBpZiBjb250YWluZXIgbmVlZCBub3QKICAgICAgICAjICAgICBiZSBicm9rZW4gb3BlbgogICAgICAgIG15ICRicF9jb3VudCAgICAgICAgICAgPSAwOwogICAgICAgIG15ICRkb19ub3RfYnJlYWtfYXBhcnQgPSAwOwoKICAgICAgICAjIGFueXRoaW5nIHRvIGRvPwogICAgICAgIGlmICggJGl0ZW1fY291bnRfc3RhY2tbJGRkXSApIHsKCiAgICAgICAgICAgICMgRG8gbm90IGJyZWFrIGEgbGlzdCB1bmxlc3MgdGhlcmUgYXJlIHNvbWUgbm9uLWxpbmUtZW5kaW5nIGNvbW1hcy4KICAgICAgICAgICAgIyBUaGlzIGF2b2lkcyBnZXR0aW5nIGRpZmZlcmVudCByZXN1bHRzIHdpdGggb25seSBub24tZXNzZW50aWFsCiAgICAgICAgICAgICMgY29tbWFzLCBhbmQgZml4ZXMgYjExOTIuCiAgICAgICAgICAgIG15ICRzZXFubyA9ICR0eXBlX3NlcXVlbmNlX3N0YWNrWyRkZF07CgogICAgICAgICAgICBteSAkcmVhbF9jb21tYV9jb3VudCA9CiAgICAgICAgICAgICAgJHNlcW5vID8gJHNlbGYtPltfcnR5cGVfY291bnRfYnlfc2Vxbm9fXS0+eyRzZXFub30tPnsnLCd9IDogMTsKCiAgICAgICAgICAgICMgaGFuZGxlIGNvbW1hcyBub3QgaW4gY29udGFpbmVycy4uLgogICAgICAgICAgICBpZiAoICRkb250X2FsaWduWyRkZF0gKSB7CiAgICAgICAgICAgICAgICAkc2VsZi0+ZG9fdW5jb250YWluZWRfY29tbWFfYnJlYWtzKCAkZGQsICRyYm9uZF9zdHJlbmd0aF9iaWFzICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaGFuZGxlIGNvbW1hcyB3aXRoaW4gY29udGFpbmVycy4uLgogICAgICAgICAgICBlbHNpZiAoJHJlYWxfY29tbWFfY291bnQpIHsKICAgICAgICAgICAgICAgIG15ICRmYmMgPSAkZm9yY2VkX2JyZWFrcG9pbnRfY291bnQ7CgogICAgICAgICAgICAgICAgIyBhbHdheXMgb3BlbiBjb21tYSBsaXN0cyBub3QgcHJlY2VkZWQgYnkga2V5d29yZHMsCiAgICAgICAgICAgICAgICAjIGJhcmV3b3JkcywgaWRlbnRpZmllcnMgKHRoYXQgaXMsIGFueXRoaW5nIHRoYXQgZG9lc24ndAogICAgICAgICAgICAgICAgIyBsb29rIGxpa2UgYSBmdW5jdGlvbiBjYWxsKQogICAgICAgICAgICAgICAgIyBjMjUwOiBhZGRlZCBuZXcgc3ViIGlkZW50aWZpZXIgdHlwZSAnUycKICAgICAgICAgICAgICAgIG15ICRtdXN0X2JyZWFrX29wZW4gPQogICAgICAgICAgICAgICAgICAkbGFzdF9ub25ibGFua190eXBlX3N0YWNrWyRkZF0gIX4gL15ba3dpVVNdJC87CgogICAgICAgICAgICAgICAgJHNlbGYtPnRhYmxlX21ha2VyKAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGggICAgICAgICAgICA9PiAkZGQsCiAgICAgICAgICAgICAgICAgICAgICAgIGlfb3BlbmluZ19wYXJlbiAgPT4gJG9wZW5pbmdfc3RydWN0dXJlX2luZGV4X3N0YWNrWyRkZF0sCiAgICAgICAgICAgICAgICAgICAgICAgIGlfY2xvc2luZ19wYXJlbiAgPT4gJGksCiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fY291bnQgICAgICAgPT4gJGl0ZW1fY291bnRfc3RhY2tbJGRkXSwKICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcl9jb3VudCA9PiAkaWRlbnRpZmllcl9jb3VudF9zdGFja1skZGRdLAogICAgICAgICAgICAgICAgICAgICAgICByY29tbWFfaW5kZXggICAgID0+ICRjb21tYV9pbmRleFskZGRdLAogICAgICAgICAgICAgICAgICAgICAgICBuZXh0X25vbmJsYW5rX3R5cGUgID0+ICRuZXh0X25vbmJsYW5rX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfdHlwZSAgICAgICAgICAgPT4gJGNvbnRhaW5lcl90eXBlWyRkZF0sCiAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdGVkICAgICAgICAgPT4gJGludGVycnVwdGVkX2xpc3RbJGRkXSwKICAgICAgICAgICAgICAgICAgICAgICAgcmRvX25vdF9icmVha19hcGFydCA9PiBcJGRvX25vdF9icmVha19hcGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgbXVzdF9icmVha19vcGVuICAgICA9PiAkbXVzdF9icmVha19vcGVuLAogICAgICAgICAgICAgICAgICAgICAgICBoYXNfYnJva2VuX3N1Ymxpc3QgID0+ICRoYXNfYnJva2VuX3N1Ymxpc3RbJGRkXSwKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJGJwX2NvdW50ICAgICAgICAgICA9ICRmb3JjZWRfYnJlYWtwb2ludF9jb3VudCAtICRmYmM7CiAgICAgICAgICAgICAgICAkZG9fbm90X2JyZWFrX2FwYXJ0ID0gMCBpZiAkbXVzdF9icmVha19vcGVuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIyMgbm8gcmVhbCBjb21tYXMsIG5vdGhpbmcgdG8gZG8KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gKCAkYnBfY291bnQsICRkb19ub3RfYnJlYWtfYXBhcnQgKTsKICAgIH0gIyMgZW5kIHN1YiBzZXRfY29tbWFfYnJlYWtwb2ludHMKCiAgICAjIFRoZXNlIHR5cGVzIGFyZSBleGNsdWRlZCBhdCBicmVha3BvaW50cyB0byBwcmV2ZW50IGJsaW5raW5nCiAgICAjIFN3aXRjaGVkIGZyb20gZXhjbHVkZWQgdG8gaW5jbHVkZWQgYXMgcGFydCBvZiBmaXggZm9yIGIxMjE0CiAgICBteSAlaXNfdW5jb250YWluZWRfY29tbWFfYnJlYWtfaW5jbHVkZWRfdHlwZTsKCiAgICBCRUdJTiB7CgogICAgICAgIG15IEBxID0gcXcjIGsgUiB9ICkgXSBZIFogVSB3IGkgcSBRIC4KICAgICAgICAgID0gKio9ICs9ICo9ICY9IDw8PSAmJj0gLT0gLz0gfD0gPj49IHx8PSAvLz0gLj0gJT0gXj0geD0gIzsKICAgICAgICBAaXNfdW5jb250YWluZWRfY29tbWFfYnJlYWtfaW5jbHVkZWRfdHlwZXtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwogICAgfSAjIyBlbmQgQkVHSU4KCiAgICBzdWIgZG9fdW5jb250YWluZWRfY29tbWFfYnJlYWtzIHsKCiAgICAgICAgbXkgKCAkc2VsZiwgJGRkLCAkcmJvbmRfc3RyZW5ndGhfYmlhcyApID0gQF87CgogICAgICAgICMgSGFuZGxlIGNvbW1hcyBub3QgaW4gY29udGFpbmVycwoKICAgICAgICAjIEdpdmVuOgogICAgICAgICMgICAkZGQgPSBkZXB0aCBvZiB0aGlzIGxheWVyIG9mIGNvbW1hcwogICAgICAgICMgICAkcmJvbmRfc3RyZW5ndGhfYmlhcyA9IGFycmF5IG9mIGJvbmQgc3RyZW5ndGhzIHRvIGJlIHVwZGF0ZWQKCiAgICAgICAgIyBUaGlzIGlzIGEgY2F0Y2gtYWxsIHJvdXRpbmUgZm9yIGNvbW1hcyB0aGF0IHdlCiAgICAgICAgIyBkb24ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCBiZWNhdXNlIHRoZSBkb24ndCBmYWxsCiAgICAgICAgIyB3aXRoaW4gY29udGFpbmVycy4gIFdlIHdpbGwgYmlhcyB0aGUgYm9uZCBzdHJlbmd0aAogICAgICAgICMgdG8gYnJlYWsgYXQgY29tbWFzIHdoaWNoIGVuZGVkIGxpbmVzIGluIHRoZSBpbnB1dAogICAgICAgICMgZmlsZS4gIFRoaXMgdXN1YWxseSB3b3JrcyBiZXR0ZXIgdGhhbiBqdXN0IHRyeWluZwogICAgICAgICMgdG8gcHV0IGFzIG1hbnkgaXRlbXMgb24gYSBsaW5lIGFzIHBvc3NpYmxlLiAgQQogICAgICAgICMgZG93bnNpZGUgaXMgdGhhdCBpZiB0aGUgaW5wdXQgZmlsZSBpcyBnYXJiYWdlIGl0CiAgICAgICAgIyB3b24ndCB3b3JrIHZlcnkgd2VsbC4gSG93ZXZlciwgdGhlIHVzZXIgY2FuIGFsd2F5cwogICAgICAgICMgcHJldmVudCBmb2xsb3dpbmcgdGhlIG9sZCBicmVha3BvaW50cyB3aXRoIHRoZQogICAgICAgICMgLWlvYiBmbGFnLgoKICAgICAgICAjIENoZWNrIGFkZGVkIGZvciBpc3N1ZSBjMTMxOyBhbiBlcnJvciBoZXJlIHdvdWxkIGJlIGR1ZSB0byBhbgogICAgICAgICMgZXJyb3IgaW5pdGlhbGl6aW5nIEBjb21tYV9pbmRleCB3aGVuIGVudGVyaW5nIGRlcHRoICRkZC4KICAgICAgICBpZiAoREVWRUxfTU9ERSkgewogICAgICAgICAgICBmb3JlYWNoIG15ICRpaSAoIEB7ICRjb21tYV9pbmRleFskZGRdIH0gKSB7CiAgICAgICAgICAgICAgICBpZiAoICRpaSA8IDAgfHwgJGlpID4gJG1heF9pbmRleF90b19nbyApIHsKICAgICAgICAgICAgICAgICAgICBteSAkS0sgID0gJEtfdG9fZ29bMF07CiAgICAgICAgICAgICAgICAgICAgbXkgJGxubyA9ICRzZWxmLT5bX3JMTF9dLT5bJEtLXS0+W19MSU5FX0lOREVYX107CiAgICAgICAgICAgICAgICAgICAgRmF1bHQoPDxFT00pOwpCYWQgY29tbWEgaW5kZXggbmVhciBsaW5lICRsbm86IGk9JGlpIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAkbWF4X2luZGV4X3RvX2dvCkVPTQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAkYmlhcyAgICAgICAgICAgICAgICAgID0gLS4wMTsKICAgICAgICBteSAkb2xkX2NvbW1hX2JyZWFrX2NvdW50ID0gMDsKICAgICAgICBmb3JlYWNoIG15ICRpaSAoIEB7ICRjb21tYV9pbmRleFskZGRdIH0gKSB7CgogICAgICAgICAgICBpZiAoICRvbGRfYnJlYWtwb2ludF90b19nb1skaWldICkgewogICAgICAgICAgICAgICAgJG9sZF9jb21tYV9icmVha19jb3VudCsrOwoKICAgICAgICAgICAgICAgICMgU3RvcmUgdGhlIGJpYXMgaW5mbyBmb3IgdXNlIGJ5IHN1YiBzZXRfYm9uZF9zdHJlbmd0aAogICAgICAgICAgICAgICAgcHVzaCBAeyRyYm9uZF9zdHJlbmd0aF9iaWFzfSwgWyAkaWksICRiaWFzIF07CgogICAgICAgICAgICAgICAgIyByZWR1Y2UgYmlhcyBtYWduaXR1ZGUgdG8gZm9yY2UgYnJlYWtzIGluIG9yZGVyCiAgICAgICAgICAgICAgICAkYmlhcyAqPSAwLjk5OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIEFsc28gcHV0IGEgYnJlYWsgYmVmb3JlIHRoZSBmaXJzdCBjb21tYSBpZgogICAgICAgICMgKDEpIHRoZXJlIHdhcyBhIGJyZWFrIHRoZXJlIGluIHRoZSBpbnB1dCwgYW5kCiAgICAgICAgIyAoMikgdGhlcmUgd2FzIGV4YWN0bHkgb25lIG9sZCBicmVhayBiZWZvcmUgdGhlIGZpcnN0IGNvbW1hIGJyZWFrCiAgICAgICAgIyAoMykgT0xEOiB0aGVyZSBhcmUgbXVsdGlwbGUgb2xkIGNvbW1hIGJyZWFrcwogICAgICAgICMgKDMpIE5FVzogdGhlcmUgYXJlIG9uZSBvciBtb3JlIG9sZCBjb21tYSBicmVha3MgKHNlZSByZXR1cm4gZXhhbXBsZSkKICAgICAgICAjICg0KSB0aGUgZmlyc3QgY29tbWEgaXMgYXQgdGhlIHN0YXJ0aW5nIGxldmVsIC4uLgogICAgICAgICMgICAgIC4uLiBmaXhlcyBjYXNlcyBiMDY0IGIwNjUgYjA2OCBiMjEwIGI3NDcKICAgICAgICAjICg1KSB0aGUgYmF0Y2ggZG9lcyBub3Qgc3RhcnQgd2l0aCBhIGNpPjAgW2lnbm9yZSBhIGNpIGNoYW5nZSBieSAteGNpXQogICAgICAgICMgICAgIC4uLiBmaXhlcyBiMTIyMC4gIElmIGNpPjAgd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBzbmlwcGV0LAogICAgICAgICMgICAgIG1heWJlIGJlY2F1c2UgLWJvYyBoYXMgYmVlbiBmb3JjaW5nIG91dCBwcmV2aW91cyBsaW5lcy4KCiAgICAgICAgIyBGb3IgZXhhbXBsZSwgd2Ugd2lsbCBmb2xsb3cgdGhlIHVzZXIgYW5kIGJyZWFrIGFmdGVyCiAgICAgICAgIyAncHJpbnQnIGluIHRoaXMgc25pcHBldDoKICAgICAgICAjICAgIHByaW50CiAgICAgICAgIyAgICAgICJjb25mb3JtYWJpbGl0eSAoTm90IHRoZSBzYW1lIGRpbWVuc2lvbilcbiIsCiAgICAgICAgIyAgICAgICJcdCIsICRoYXZlLCAiIGlzICIsIHRleHRfdW5pdCgkaHUpLCAiXG4iLAogICAgICAgICMgICAgICAiXHQiLCAkd2FudCwgIiBpcyAiLCB0ZXh0X3VuaXQoJHd1KSwgIlxuIiwKICAgICAgICAjICAgICAgOwogICAgICAgICMKICAgICAgICAjIEFub3RoZXIgZXhhbXBsZSwganVzdCBvbmUgY29tbWEsIHdoZXJlIHdlIHdpbGwgYnJlYWsgYWZ0ZXIKICAgICAgICAjIHRoZSByZXR1cm46CiAgICAgICAgIyAgcmV0dXJuCiAgICAgICAgIyAgICAkeCAqIGNvcygkYSkgLSAkeSAqIHNpbigkYSksCiAgICAgICAgIyAgICAkeCAqIHNpbigkYSkgKyAkeSAqIGNvcygkYSk7CgogICAgICAgICMgQnJlYWtpbmcgYSBwcmludCBzdGF0ZW1lbnQ6CiAgICAgICAgIyBwcmludCBTQVZFT1VUCiAgICAgICAgIyAgICggJD8gJiAxMjcgKSA/ICIgKFNJRyMiIC4gKCAkPyAmIDEyNyApIC4gIikiIDogIiIsCiAgICAgICAgIyAgICggJD8gJiAxMjggKSA/ICIgLS0gY29yZSBkdW1wZWQiIDogIiIsICJcbiI7CiAgICAgICAgIwogICAgICAgICMgIEJ1dCB3ZSB3aWxsIG5vdCBmb3JjZSBhIGJyZWFrIGFmdGVyIHRoZSBvcGVuaW5nIHBhcmVuIGhlcmUKICAgICAgICAjICAoY2F1c2VzIGEgYmxpbmtlcik6CiAgICAgICAgIyAgICAgICAgJGhlYXAtPntzdHJlYW19LT5zZXRfb3V0cHV0X2ZpbHRlcigKICAgICAgICAjICAgICAgICAgICAgcG9lOjpmaWx0ZXI6OnJlZmVyZW5jZS0+bmV3KCdteW90aGVyZnJlZXplcicpICksCiAgICAgICAgIyAgICAgICAgICA7CiAgICAgICAgIwogICAgICAgIG15ICRpX2ZpcnN0X2NvbW1hID0gJGNvbW1hX2luZGV4WyRkZF0tPlswXTsKICAgICAgICBteSAkbGV2ZWxfY29tbWEgICA9ICRsZXZlbHNfdG9fZ29bJGlfZmlyc3RfY29tbWFdOwogICAgICAgIG15ICRjaV9zdGFydCAgICAgID0gJGNpX2xldmVsc190b19nb1swXTsKCiAgICAgICAgIyBIZXJlIHdlIHdhbnQgdG8gdXNlIHRoZSB2YWx1ZSBvZiBjaSBiZWZvcmUgYW55IC14Y2kgYWRqdXN0bWVudAogICAgICAgIGlmICggJGNpX3N0YXJ0ICYmICRyT3B0c19leHRlbmRlZF9jb250aW51YXRpb25faW5kZW50YXRpb24gKSB7CiAgICAgICAgICAgIG15ICRLMCA9ICRLX3RvX2dvWzBdOwogICAgICAgICAgICBpZiAoICRzZWxmLT5bX3JzZXFub19jb250cm9sbGluZ19teV9jaV9dLT57JEswfSApIHsgJGNpX3N0YXJ0ID0gMCB9CiAgICAgICAgfQogICAgICAgIGlmICggICEkY2lfc3RhcnQKICAgICAgICAgICAgJiYgJG9sZF9icmVha3BvaW50X3RvX2dvWyRpX2ZpcnN0X2NvbW1hXQogICAgICAgICAgICAmJiAkbGV2ZWxfY29tbWEgPT0gJGxldmVsc190b19nb1swXSApCiAgICAgICAgewogICAgICAgICAgICBteSAkaWJyZWFrICAgID0gLTE7CiAgICAgICAgICAgIG15ICRvYnBfY291bnQgPSAwOwogICAgICAgICAgICBmb3JlYWNoIG15ICRpaSAoIHJldmVyc2UoIDAgLi4gJGlfZmlyc3RfY29tbWEgLSAxICkgKSB7CiAgICAgICAgICAgICAgICBpZiAoICRvbGRfYnJlYWtwb2ludF90b19nb1skaWldICkgewogICAgICAgICAgICAgICAgICAgICRvYnBfY291bnQrKzsKICAgICAgICAgICAgICAgICAgICBsYXN0IGlmICggJG9icF9jb3VudCA+IDEgKTsKICAgICAgICAgICAgICAgICAgICAkaWJyZWFrID0gJGlpCiAgICAgICAgICAgICAgICAgICAgICBpZiAoICRsZXZlbHNfdG9fZ29bJGlpXSA9PSAkbGV2ZWxfY29tbWEgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBDaGFuZ2VkIHJ1bGUgZnJvbSBtdWx0aXBsZSBvbGQgY29tbWFzIHRvIGp1c3Qgb25lIGhlcmU6CiAgICAgICAgICAgIGlmICggJGlicmVhayA+PSAwICYmICRvYnBfY291bnQgPT0gMSAmJiAkb2xkX2NvbW1hX2JyZWFrX2NvdW50ID4gMCApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG15ICRpYnJlYWtfbSA9ICRpYnJlYWs7CiAgICAgICAgICAgICAgICAkaWJyZWFrX20tLSBpZiAoICR0eXBlc190b19nb1skaWJyZWFrX21dIGVxICdiJyApOwogICAgICAgICAgICAgICAgaWYgKCAkaWJyZWFrX20gPj0gMCApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBJbiBvcmRlciB0byBhdm9pZCBibGlua2VycyB3ZSBoYXZlIHRvIGJlIGZhaXJseQogICAgICAgICAgICAgICAgICAgICMgcmVzdHJpY3RpdmU6CgogICAgICAgICAgICAgICAgICAgICMgT0xEIFJ1bGVzOgogICAgICAgICAgICAgICAgICAgICMgIFJ1bGUgMTogRG8gbm90IHRvIGJyZWFrIGJlZm9yZSBhbiBvcGVuaW5nIHRva2VuCiAgICAgICAgICAgICAgICAgICAgIyAgUnVsZSAyOiBhdm9pZCBicmVha2luZyBhdCB0ZXJuYXJ5IG9wZXJhdG9ycwogICAgICAgICAgICAgICAgICAgICMgIChzZWUgYjkzMSwgd2hpY2ggaXMgc2ltaWxhciB0byB0aGUgYWJvdmUgcHJpbnQgZXhhbXBsZSkKICAgICAgICAgICAgICAgICAgICAjICBSdWxlIDM6IERvIG5vdCBicmVhayBhdCBjaGFpbiBvcGVyYXRvcnMgdG8gZml4IGNhc2UgYjExMTkKICAgICAgICAgICAgICAgICAgICAjICAgLSBUaGUgcHJldmlvdXMgdGVzdCB3YXMgJyR0eXBlbSAhfiAvXltcKFx7XFtMXD9cOl0kLycKCiAgICAgICAgICAgICAgICAgICAgIyBORVcgUnVsZSwgcmVwbGFjZWQgYWJvdmUgcnVsZXMgYWZ0ZXIgY2FzZSBiMTIxNDoKICAgICAgICAgICAgICAgICAgICAjICBvbmx5IGJyZWFrIGF0IG9uZSBvZiB0aGUgaW5jbHVkZWQgdHlwZXMKCiAgICAgICAgICAgICAgICAgICAgIyBCZSBzdXJlIHRvIHRlc3QgYW55IGNoYW5nZXMgdG8gdGhlc2UgcnVsZXMgYWdhaW5zdCBydW5zCiAgICAgICAgICAgICAgICAgICAgIyB3aXRoIC1sPTAgc3VjaCBhcyB0aGUgJ2JidnQnIHRlc3QgKHBlcmx0aWR5cmNfY29saW4pCiAgICAgICAgICAgICAgICAgICAgIyBzZXJpZXMuCiAgICAgICAgICAgICAgICAgICAgbXkgJHR5cGVfbSA9ICR0eXBlc190b19nb1skaWJyZWFrX21dOwoKICAgICAgICAgICAgICAgICAgICAjIFN3aXRjaGVkIGZyb20gZXhjbHVkZWQgdG8gaW5jbHVkZWQgZm9yIGIxMjE0LiBJZiBuZWNlc3NhcnkKICAgICAgICAgICAgICAgICAgICAjIHRoZSB0b2tlbiBjb3VsZCBhbHNvIGJlIGNoZWNrZWQgaWYgdHlwZV9tIGVxICdrJwogICAgICAgICAgICAgICAgICAgIGlmICggJGlzX3VuY29udGFpbmVkX2NvbW1hX2JyZWFrX2luY2x1ZGVkX3R5cGV7JHR5cGVfbX0gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIFJ1bGUgYWRkZWQgdG8gZml4IGIxNDQ5OgogICAgICAgICAgICAgICAgICAgICAgICAjIERvIG5vdCBicmVhayBiZWZvcmUgYSAnPycgaWYgLW5ib3QgaXMgc2V0CiAgICAgICAgICAgICAgICAgICAgICAgICMgT3RoZXJ3aXNlLCB3ZSBtYXkgYWx0ZXJuYXRlbHkgYXJyaXZlIGhlcmUgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICMgc2V0IHRoZSBicmVhaywgb3Igbm90LCBkZXBlbmRpbmcgb24gdGhlIGlucHV0LgogICAgICAgICAgICAgICAgICAgICAgICBteSAkbm9fYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRpYnJlYWtfcCA9ICRpbmV4dF90b19nb1skaWJyZWFrX21dOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICAhJHJPcHRzX2JyZWFrX2F0X29sZF90ZXJuYXJ5X2JyZWFrcG9pbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkaWJyZWFrX3AgPD0gJG1heF9pbmRleF90b19nbyApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICR0eXBlX3AgPSAkdHlwZXNfdG9fZ29bJGlicmVha19wXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRub19icmVhayA9ICR0eXBlX3AgZXEgJz8nOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+c2V0X2ZvcmNlZF9icmVha3BvaW50KCRpYnJlYWspCiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhJG5vX2JyZWFrICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBkb191bmNvbnRhaW5lZF9jb21tYV9icmVha3MKCiAgICBteSAlaXNfbG9naWNhbF9jb250YWluZXI7CiAgICBteSAlcXVpY2tfZmlsdGVyX0E7CiAgICBteSAlcXVpY2tfZmlsdGVyX0I7CgogICAgQkVHSU4gewogICAgICAgIG15IEBxID0gcXcjIGlmIGVsc2lmIHVubGVzcyB3aGlsZSBhbmQgb3IgZXJyIG5vdCAmJiB8IHx8ID8gOiAhICM7CiAgICAgICAgQGlzX2xvZ2ljYWxfY29udGFpbmVye0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgICAgICMgRmlsdGVycyB0byBhbGxvdyBtb3N0IHRva2VucyB0byBza2lwIHBhc3QgdGVkaW91cyBpZi1lbHNpZiBibG9ja3MKICAgICAgICAlcXVpY2tfZmlsdGVyX0EgICAgID0gJWlzX2Fzc2lnbm1lbnQ7CiAgICAgICAgQHEgICAgICAgICAgICAgICAgICA9IHF3KCB8fCAmJiBmIGsgKTsKICAgICAgICBAcXVpY2tfZmlsdGVyX0F7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICAgICAgJXF1aWNrX2ZpbHRlcl9CID0gJWlzX2Fzc2lnbm1lbnQ7CiAgICAgICAgQHEgICAgICAgICAgICAgID0gcXcjID0+IC4gOyA8ID4gfiAjOwogICAgICAgIHB1c2ggQHEsICcsJzsKICAgICAgICBwdXNoIEBxLCAnZic7ICAgICMgYWRkZWQgZm9yICc7JyBmb3IgaXNzdWUgYzE1NAogICAgICAgIEBxdWlja19maWx0ZXJfQntAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgIH0gIyMgZW5kIEJFR0lOCgogICAgc3ViIHNldF9mb3Jfc2VtaWNvbG9uX2JyZWFrcG9pbnRzIHsKICAgICAgICBteSAoICRzZWxmLCAkZGQgKSA9IEBfOwoKICAgICAgICAjIEdpdmVuOgogICAgICAgICMgICAkZGQgPSBkZXB0aCBvZiB0aGlzIGxheWVyCgogICAgICAgICMgU2V0IGJyZWFrcG9pbnRzIGZvciBzZW1pY29sb25zIGluIEMtc3R5bGUgJ2ZvcicgY29udGFpbmVycwogICAgICAgIGZvcmVhY2ggKCBAeyAkcmZvcl9zZW1pY29sb25fbGlzdFskZGRdIH0gKSB7CiAgICAgICAgICAgICRzZWxmLT5zZXRfZm9yY2VkX2JyZWFrcG9pbnQoJF8pOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgc2V0X2Zvcl9zZW1pY29sb25fYnJlYWtwb2ludHMKCiAgICBzdWIgc2V0X2xvZ2ljYWxfYnJlYWtwb2ludHMgewogICAgICAgIG15ICggJHNlbGYsICRkZCApID0gQF87CgogICAgICAgICMgR2l2ZW46CiAgICAgICAgIyAgICRkZCA9IGRlcHRoIG9mIHRoaXMgbGF5ZXIKCiAgICAgICAgIyBTZXQgYnJlYWtwb2ludHMgYXQgbG9naWNhbCBvcGVyYXRvcnMKICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICRpdGVtX2NvdW50X3N0YWNrWyRkZF0gPT0gMAogICAgICAgICAgICAmJiAkaXNfbG9naWNhbF9jb250YWluZXJ7ICRjb250YWluZXJfdHlwZVskZGRdIH0KCiAgICAgICAgICAgIHx8ICRoYXNfb2xkX2xvZ2ljYWxfYnJlYWtwb2ludHNbJGRkXQogICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgTG9vayBmb3IgYnJlYWtzIGluIHRoaXMgb3JkZXI6CiAgICAgICAgICAgICMgMCAgIDEgICAgMiAgIDMKICAgICAgICAgICAgIyBvciAgYW5kICB8fCAgJiYKICAgICAgICAgICAgZm9yZWFjaCBteSAkaWkgKCAwIC4uIDMgKSB7CiAgICAgICAgICAgICAgICBpZiAoICRyYW5kX29yX2xpc3RbJGRkXVskaWldICkgewogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCBAeyAkcmFuZF9vcl9saXN0WyRkZF1bJGlpXSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+c2V0X2ZvcmNlZF9icmVha3BvaW50KCRfKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgYnJlYWsgYXQgYW55ICdpZicgYW5kICd1bmxlc3MnIHRvbwogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCBAeyAkcmFuZF9vcl9saXN0WyRkZF1bNF0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPnNldF9mb3JjZWRfYnJlYWtwb2ludCgkXyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRyYW5kX29yX2xpc3RbJGRkXSA9IFtdOwogICAgICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIHNldF9sb2dpY2FsX2JyZWFrcG9pbnRzCgogICAgc3ViIGlzX3VuYnJlYWthYmxlX2NvbnRhaW5lciB7CgogICAgICAgIG15ICRkZCA9IHNoaWZ0OwoKICAgICAgICAjIEdpdmVuOgogICAgICAgICMgICAkZGQgPSBkZXB0aCBvZiB0aGlzIGxheWVyCiAgICAgICAgIyBSZXR1cm46CiAgICAgICAgIyAgIHRydWUgaWYgdGhlIGNvbnRhaW5lciBzaG91bGQgbm90IGJlIGJyb2tlbgogICAgICAgICMgICBmYWxzZSBvdGhlcndpc2UKCiAgICAgICAgIyBuZXZlciBicmVhayBhIGNvbnRhaW5lciBvZiBvbmUgb2YgdGhlc2UgdHlwZXMKICAgICAgICAjIGJlY2F1c2UgYmFkIHRoaW5ncyBjYW4gaGFwcGVuIChtYXAxLnQpOgogICAgICAgIHJldHVybiAkaXNfc29ydF9tYXBfZ3JlcHsgJGNvbnRhaW5lcl90eXBlWyRkZF0gfTsKICAgIH0gIyMgZW5kIHN1YiBpc191bmJyZWFrYWJsZV9jb250YWluZXIKCiAgICBzdWIgYnJlYWtfbGlzdHMgewoKICAgICAgICBteSAoICRzZWxmLCAkaXNfbG9uZ19saW5lLCAkcmJvbmRfc3RyZW5ndGhfYmlhcyApID0gQF87CgogICAgICAgICMgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBvbmNlIHBlciBiYXRjaCwgaWYgdGhlIGJhdGNoIGlzIGEgbGlzdCwgdG8KICAgICAgICAjIHNldCBsaW5lIGJyZWFrcyBzbyB0aGF0IGhpZXJhcmNoaWNhbCBzdHJ1Y3R1cmUgY2FuIGJlIGRpc3BsYXllZCBhbmQKICAgICAgICAjIHNvIHRoYXQgbGlzdCBpdGVtcyBjYW4gYmUgdmVydGljYWxseSBhbGlnbmVkLgoKICAgICAgICAjIEdpdmVuOgogICAgICAgICMgICAkaXNfbG9uZ19saW5lID0gdHJ1ZSBpZiB0aGlzIGJhdGNoIHJlcXVpcmVzIG11bHRpcGxlIG91dHB1dCBsaW5lcwogICAgICAgICMgICAkcmJvbmRfc3RyZW5ndGhfYmlhcyA9IGFycmF5IG9mIGJvbmQgc3RyZW5ndGhzIHRvIGJlIHVwZGF0ZWQKICAgICAgICAjIFRhc2s6CiAgICAgICAgIyAgIFVwZGF0ZSB0aGUgYXJyYXkgQGZvcmNlZF9icmVha3BvaW50X3RvX2dvIHdpdGggYnJlYWtwb2ludHMuCiAgICAgICAgIyAgIFRoaXMgYXJyYXkgaXMgdXNlZCBieSBzdWIgJ2JyZWFrX2xvbmdfbGluZXMnIHRvIHNldCBmaW5hbAogICAgICAgICMgICBicmVha3BvaW50cy4KCiAgICAgICAgIyBUaGlzIGlzIHByb2JhYmx5IHRoZSBtb3N0IGNvbXBsZXggcm91dGluZSBpbiBwZXJsdGlkeSwKICAgICAgICAjIHNvIEkgaGF2ZSBicm9rZW4gaXQgaW50byBwaWVjZXMgYW5kIG92ZXItY29tbWVudGVkIGl0LgoKICAgICAgICAkc3RhcnRpbmdfZGVwdGggPSAkbmVzdGluZ19kZXB0aF90b19nb1swXTsKCiAgICAgICAgJGJsb2NrX3R5cGUgICAgICAgICAgICAgICAgPSBTUEFDRTsKICAgICAgICAkY3VycmVudF9kZXB0aCAgICAgICAgICAgICA9ICRzdGFydGluZ19kZXB0aDsKICAgICAgICAkaV9sYXN0X2NvbG9uICAgICAgICAgICAgICA9IC0xOwogICAgICAgICRpX2xpbmVfZW5kICAgICAgICAgICAgICAgID0gLTE7CiAgICAgICAgJGlfbGluZV9zdGFydCAgICAgICAgICAgICAgPSAtMTsKICAgICAgICAkbGFzdF9ub25ibGFua190b2tlbiAgICAgICA9ICc7JzsKICAgICAgICAkbGFzdF9ub25ibGFua190eXBlICAgICAgICA9ICc7JzsKICAgICAgICAkbGFzdF9ub25ibGFua19ibG9ja190eXBlICA9IFNQQUNFOwogICAgICAgICRsYXN0X29sZF9icmVha3BvaW50X2NvdW50ID0gMDsKICAgICAgICAkbWluaW11bV9kZXB0aCA9ICRjdXJyZW50X2RlcHRoICsgMTsgICAgIyBmb3JjZXMgdXBkYXRlIGluIGNoZWNrIGJlbG93CiAgICAgICAgJG9sZF9icmVha3BvaW50X2NvdW50ICAgICAgPSAwOwogICAgICAgICRzdGFydGluZ19icmVha3BvaW50X2NvdW50ID0gJGZvcmNlZF9icmVha3BvaW50X2NvdW50OwogICAgICAgICR0b2tlbiAgICAgICAgICAgICAgICAgICAgID0gJzsnOwogICAgICAgICR0eXBlICAgICAgICAgICAgICAgICAgICAgID0gJzsnOwogICAgICAgICR0eXBlX3NlcXVlbmNlICAgICAgICAgICAgID0gRU1QVFlfU1RSSU5HOwoKICAgICAgICBteSAkdG90YWxfZGVwdGhfdmFyaWF0aW9uID0gMDsKICAgICAgICBteSAkaV9vbGRfYXNzaWdubWVudF9icmVhazsKICAgICAgICBteSAkZGVwdGhfbGFzdCA9ICRzdGFydGluZ19kZXB0aDsKICAgICAgICBteSAkY29tbWFfZm9sbG93c19sYXN0X2Nsb3NpbmdfdG9rZW47CgogICAgICAgICRzZWxmLT5jaGVja19mb3JfbmV3X21pbmltdW1fZGVwdGgoICRjdXJyZW50X2RlcHRoLAogICAgICAgICAgICAkcGFyZW50X3NlcW5vX3RvX2dvWzBdICkKICAgICAgICAgIGlmICggJGN1cnJlbnRfZGVwdGggPCAkbWluaW11bV9kZXB0aCApOwoKICAgICAgICBteSAkaV93YW50X3ByZXZpb3VzX2JyZWFrID0gLTE7CgogICAgICAgIG15ICRzYXdfZ29vZF9icmVha3BvaW50OwoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgTWFpbiBsb29wIG92ZXIgYWxsIHRva2VucyBpbiB0aGlzIGJhdGNoCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBmb3JlYWNoIG15ICRpICggMCAuLiAkbWF4X2luZGV4X3RvX2dvICkgewogICAgICAgICAgICBpZiAoICR0eXBlIG5lICdiJyApIHsKICAgICAgICAgICAgICAgICRpX2xhc3Rfbm9uYmxhbmtfdG9rZW4gICAgPSAkaSAtIDE7CiAgICAgICAgICAgICAgICAkbGFzdF9ub25ibGFua190eXBlICAgICAgID0gJHR5cGU7CiAgICAgICAgICAgICAgICAkbGFzdF9ub25ibGFua190b2tlbiAgICAgID0gJHRva2VuOwogICAgICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfYmxvY2tfdHlwZSA9ICRibG9ja190eXBlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHNldCBicmVhayBpZiBmbGFnIHdhcyBzZXQKICAgICAgICAgICAgaWYgKCAkaV93YW50X3ByZXZpb3VzX2JyZWFrID49IDAgKSB7CiAgICAgICAgICAgICAgICAkc2VsZi0+c2V0X2ZvcmNlZF9icmVha3BvaW50KCRpX3dhbnRfcHJldmlvdXNfYnJlYWspOwogICAgICAgICAgICAgICAgJGlfd2FudF9wcmV2aW91c19icmVhayA9IC0xOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdHlwZSA9ICR0eXBlc190b19nb1skaV07CiAgICAgICAgICAgIG5leHQgaWYgKCAkdHlwZSBlcSAnYicgKTsKCiAgICAgICAgICAgICRsYXN0X29sZF9icmVha3BvaW50X2NvdW50ID0gJG9sZF9icmVha3BvaW50X2NvdW50OwoKICAgICAgICAgICAgJGJsb2NrX3R5cGUgICAgPSAkYmxvY2tfdHlwZV90b19nb1skaV07CiAgICAgICAgICAgICR0b2tlbiAgICAgICAgID0gJHRva2Vuc190b19nb1skaV07CiAgICAgICAgICAgICR0eXBlX3NlcXVlbmNlID0gJHR5cGVfc2VxdWVuY2VfdG9fZ29bJGldOwoKICAgICAgICAgICAgbXkgJGlfbmV4dF9ub25ibGFuayA9ICRpbmV4dF90b19nb1skaV07CiAgICAgICAgICAgICRuZXh0X25vbmJsYW5rX3R5cGUgICAgICAgPSAkdHlwZXNfdG9fZ29bJGlfbmV4dF9ub25ibGFua107CiAgICAgICAgICAgICRuZXh0X25vbmJsYW5rX3Rva2VuICAgICAgPSAkdG9rZW5zX3RvX2dvWyRpX25leHRfbm9uYmxhbmtdOwogICAgICAgICAgICAkbmV4dF9ub25ibGFua19ibG9ja190eXBlID0gJGJsb2NrX3R5cGVfdG9fZ29bJGlfbmV4dF9ub25ibGFua107CgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIExvb3AgU2VjdGlvbiBBOiBMb29rIGZvciBzcGVjaWFsIGJyZWFrcG9pbnRzLi4uCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICAgICAjIENoZWNrIGZvciBhIGdvb2Qgb2xkIGJyZWFrcG9pbnQgLi4KICAgICAgICAgICAgaWYgKCAkb2xkX2JyZWFrcG9pbnRfdG9fZ29bJGldICkgewogICAgICAgICAgICAgICAgKCAkaV93YW50X3ByZXZpb3VzX2JyZWFrLCAkaV9vbGRfYXNzaWdubWVudF9icmVhayApID0KICAgICAgICAgICAgICAgICAgJHNlbGYtPmV4YW1pbmVfb2xkX2JyZWFrcG9pbnQoICRpLCAkaV9uZXh0X25vbmJsYW5rLAogICAgICAgICAgICAgICAgICAgICRpX3dhbnRfcHJldmlvdXNfYnJlYWssICRpX29sZF9hc3NpZ25tZW50X2JyZWFrICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRkZXB0aCA9ICRuZXN0aW5nX2RlcHRoX3RvX2dvWyAkaSArIDEgXTsKCiAgICAgICAgICAgICR0b3RhbF9kZXB0aF92YXJpYXRpb24gKz0gYWJzKCAkZGVwdGggLSAkZGVwdGhfbGFzdCApOwogICAgICAgICAgICAkZGVwdGhfbGFzdCA9ICRkZXB0aDsKCiAgICAgICAgICAgICMgc2FmZXR5IGNoZWNrIC0gYmUgc3VyZSB3ZSBhbHdheXMgYnJlYWsgYWZ0ZXIgYSBjb21tZW50CiAgICAgICAgICAgICMgU2hvdWxkbid0IGhhcHBlbiAuLiBhbiBlcnJvciBoZXJlIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlCiAgICAgICAgICAgICMgbm9icmVhayBmbGFnIGRpZCBub3QgZ2V0IHR1cm5lZCBvZmYgY29ycmVjdGx5IGR1cmluZwogICAgICAgICAgICAjIGZvcm1hdHRpbmcuCiAgICAgICAgICAgIGlmICggJHR5cGUgZXEgJyMnICkgewogICAgICAgICAgICAgICAgaWYgKCAkaSAhPSAkbWF4X2luZGV4X3RvX2dvICkgewogICAgICAgICAgICAgICAgICAgIGlmIChERVZFTF9NT0RFKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEZhdWx0KDw8RU9NKTsKTm9uLWZhdGFsIHByb2dyYW0gYnVnOiBiYWNrdXAgbG9naWMgcmVxdWlyZWQgdG8gYnJlYWsgYWZ0ZXIgYSBjb21tZW50CkVPTQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkbm9icmVha190b19nb1skaV0gPSAwOwogICAgICAgICAgICAgICAgICAgICRzZWxmLT5zZXRfZm9yY2VkX2JyZWFrcG9pbnQoJGkpOwogICAgICAgICAgICAgICAgfSAjIyBlbmQgaWYgKCAkaSAhPSAkbWF4X2luZGV4X3RvX2dvKQogICAgICAgICAgICB9ICMjIGVuZCBpZiAoICR0eXBlIGVxICcjJyApCgogICAgICAgICAgICAjIEZvcmNlIGJyZWFrcG9pbnRzIGF0IGNlcnRhaW4gdG9rZW5zIGluIGxvbmcgbGluZXMuCiAgICAgICAgICAgICMgTm90ZSB0aGF0IHN1Y2ggYnJlYWtwb2ludHMgd2lsbCBiZSB1bmRvbmUgbGF0ZXIgaWYgdGhlc2UgdG9rZW5zCiAgICAgICAgICAgICMgYXJlIGZ1bGx5IGNvbnRhaW5lZCB3aXRoaW4gcGFyZW5zIG9uIGEgbGluZS4KICAgICAgICAgICAgaWYgKAoKICAgICAgICAgICAgICAgICMgYnJlYWsgYmVmb3JlIGEga2V5d29yZCB3aXRoaW4gYSBsaW5lCiAgICAgICAgICAgICAgICAkdHlwZSBlcSAnaycKICAgICAgICAgICAgICAgICYmICRpID4gMAoKICAgICAgICAgICAgICAgICMgaWYgb25lIG9mIHRoZXNlIGtleXdvcmRzOgogICAgICAgICAgICAgICAgJiYgJGlzX2lmX3VubGVzc193aGlsZV91bnRpbF9mb3JfZm9yZWFjaHskdG9rZW59CgogICAgICAgICAgICAgICAgIyBidXQgZG8gbm90IGJyZWFrIGF0IHNvbWV0aGluZyBsaWtlICcxIHdoaWxlJwogICAgICAgICAgICAgICAgJiYgKCAkbGFzdF9ub25ibGFua190eXBlIG5lICduJyB8fCAkaSA+IDIgKQoKICAgICAgICAgICAgICAgICMgYW5kIGxldCBrZXl3b3JkcyBmb2xsb3cgYSBjbG9zaW5nICdkbycgYnJhY2UKICAgICAgICAgICAgICAgICYmICggICEkbGFzdF9ub25ibGFua19ibG9ja190eXBlCiAgICAgICAgICAgICAgICAgICAgfHwgJGxhc3Rfbm9uYmxhbmtfYmxvY2tfdHlwZSBuZSAnZG8nICkKCiAgICAgICAgICAgICAgICAmJiAoCiAgICAgICAgICAgICAgICAgICAgJGlzX2xvbmdfbGluZQoKICAgICAgICAgICAgICAgICAgICAjIG9yIGNvbnRhaW5lciBpcyBicm9rZW4gKGJ5IHNpZGUtY29tbWVudCwgZXRjKQogICAgICAgICAgICAgICAgICAgIHx8ICgKICAgICAgICAgICAgICAgICAgICAgICAgJG5leHRfbm9uYmxhbmtfdG9rZW4gZXEgJygnCiAgICAgICAgICAgICAgICAgICAgICAgICYmICggIWRlZmluZWQoICRtYXRlX2luZGV4X3RvX2dvWyRpX25leHRfbm9uYmxhbmtdICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRtYXRlX2luZGV4X3RvX2dvWyRpX25leHRfbm9uYmxhbmtdIDwgJGkgKQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRzZWxmLT5zZXRfZm9yY2VkX2JyZWFrcG9pbnQoICRpIC0gMSApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHJlbWVtYmVyIGxvY2F0aW9ucyBvZiAnfHwnICBhbmQgJyYmJyBmb3IgcG9zc2libGUgYnJlYWtzIGlmIHdlCiAgICAgICAgICAgICMgZGVjaWRlIHRoaXMgaXMgYSBsb25nIGxvZ2ljYWwgZXhwcmVzc2lvbi4KICAgICAgICAgICAgaWYgKCAkcXVpY2tfZmlsdGVyX0F7JHR5cGV9ICkgewogICAgICAgICAgICAgICAgaWYgKCAkdHlwZSBlcSAnfHwnICkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQHsgJHJhbmRfb3JfbGlzdFskZGVwdGhdWzJdIH0sICRpOwogICAgICAgICAgICAgICAgICAgICsrJGhhc19vbGRfbG9naWNhbF9icmVha3BvaW50c1skZGVwdGhdCiAgICAgICAgICAgICAgICAgICAgICBpZiAoICggJGkgPT0gJGlfbGluZV9zdGFydCB8fCAkaSA9PSAkaV9saW5lX2VuZCApCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRyT3B0c19icmVha19hdF9vbGRfbG9naWNhbF9icmVha3BvaW50cyApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKCAkdHlwZSBlcSAnJiYnICkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQHsgJHJhbmRfb3JfbGlzdFskZGVwdGhdWzNdIH0sICRpOwogICAgICAgICAgICAgICAgICAgICsrJGhhc19vbGRfbG9naWNhbF9icmVha3BvaW50c1skZGVwdGhdCiAgICAgICAgICAgICAgICAgICAgICBpZiAoICggJGkgPT0gJGlfbGluZV9zdGFydCB8fCAkaSA9PSAkaV9saW5lX2VuZCApCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRyT3B0c19icmVha19hdF9vbGRfbG9naWNhbF9icmVha3BvaW50cyApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKCAkdHlwZSBlcSAnZicgKSB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAeyAkcmZvcl9zZW1pY29sb25fbGlzdFskZGVwdGhdIH0sICRpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKCAkdHlwZSBlcSAnaycgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkdG9rZW4gZXEgJ2FuZCcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQHsgJHJhbmRfb3JfbGlzdFskZGVwdGhdWzFdIH0sICRpOwogICAgICAgICAgICAgICAgICAgICAgICArKyRoYXNfb2xkX2xvZ2ljYWxfYnJlYWtwb2ludHNbJGRlcHRoXQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKCAkaSA9PSAkaV9saW5lX3N0YXJ0IHx8ICRpID09ICRpX2xpbmVfZW5kICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRyT3B0c19icmVha19hdF9vbGRfbG9naWNhbF9icmVha3BvaW50cyApOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBicmVhayBpbW1lZGlhdGVseSBhdCAnb3IncyB3aGljaCBhcmUgcHJvYmFibHkgbm90IGluIGEKICAgICAgICAgICAgICAgICAgICAjIGxvZ2ljYWwgYmxvY2sgLS0gYnV0IHdlIHdpbGwgYnJlYWsgaW4gbG9naWNhbCBicmVha3MKICAgICAgICAgICAgICAgICAgICAjIGJlbG93IHNvIHRoYXQgdGhleSBkbyBub3QgYWRkIHRvIHRoZQogICAgICAgICAgICAgICAgICAgICMgZm9yY2VkX2JyZWFrcG9pbnRfY291bnQKICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICR0b2tlbiBlcSAnb3InICkgewogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEB7ICRyYW5kX29yX2xpc3RbJGRlcHRoXVswXSB9LCAkaTsKICAgICAgICAgICAgICAgICAgICAgICAgKyskaGFzX29sZF9sb2dpY2FsX2JyZWFrcG9pbnRzWyRkZXB0aF0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICggJGkgPT0gJGlfbGluZV9zdGFydCB8fCAkaSA9PSAkaV9saW5lX2VuZCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkck9wdHNfYnJlYWtfYXRfb2xkX2xvZ2ljYWxfYnJlYWtwb2ludHMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkaXNfbG9naWNhbF9jb250YWluZXJ7ICRjb250YWluZXJfdHlwZVskZGVwdGhdIH0gKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGlzX2xvbmdfbGluZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5zZXRfZm9yY2VkX2JyZWFrcG9pbnQoJGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAoICRpID09ICRpX2xpbmVfc3RhcnQgfHwgJGkgPT0gJGlfbGluZV9lbmQgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRyT3B0c19icmVha19hdF9vbGRfbG9naWNhbF9icmVha3BvaW50cyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNhd19nb29kX2JyZWFrcG9pbnQgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMgbm90IGEgZ29vZCBicmVhawogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJHRva2VuIGVxICdpZicgfHwgJHRva2VuIGVxICd1bmxlc3MnICkgewogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEB7ICRyYW5kX29yX2xpc3RbJGRlcHRoXVs0XSB9LCAkaTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoICRpID09ICRpX2xpbmVfc3RhcnQgfHwgJGkgPT0gJGlfbGluZV9lbmQgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHJPcHRzX2JyZWFrX2F0X29sZF9sb2dpY2FsX2JyZWFrcG9pbnRzICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPnNldF9mb3JjZWRfYnJlYWtwb2ludCgkaSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICMjIG5vdCBvbmUgb2Y6ICdhbmQnICdvcicgJ2lmJyAndW5sZXNzJwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJGlzX2Fzc2lnbm1lbnR7JHR5cGV9ICkgewogICAgICAgICAgICAgICAgICAgICRpX2VxdWFsc1skZGVwdGhdID0gJGk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAjIGVycm9yIDogbm8gY29kZSB0byBoYW5kbGUgYSB0eXBlIGluICVxdWlja19maWx0ZXJfQQogICAgICAgICAgICAgICAgICAgIERFVkVMX01PREUgJiYgRmF1bHQoPDxFT00pOwpNaXNzaW5nIGNvZGUgdG8gaGFuZGxlIHRva2VuIHR5cGUgJyR0eXBlJyB3aGljaCBpcyBpbiB0aGUgcXVpY2tfZmlsdGVyX0EKRU9NCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkdHlwZV9zZXF1ZW5jZSkgewoKICAgICAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgIyBMb29wIFNlY3Rpb24gQjogSGFuZGxlIGEgc2VxdWVuY2VkIHRva2VuCiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICRzZWxmLT5icmVha19saXN0c190eXBlX3NlcXVlbmNlKCRpKTsKCiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAjIExvb3AgU2VjdGlvbiBDOiBIYW5kbGUgSW5jcmVhc2luZyBEZXB0aC4uCiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICAgICAgICAgIyBoYXJkZW5lZCBhZ2FpbnN0IGJhZCBpbnB1dCBzeW50YXg6IGRlcHRoIGp1bXAgbXVzdCBiZSAxIGFuZAogICAgICAgICAgICAgICAgIyB0eXBlIG11c3QgYmUgb3BlbmluZy4uZml4ZXMgYzEwMgogICAgICAgICAgICAgICAgaWYgKCAkZGVwdGggPT0gJGN1cnJlbnRfZGVwdGggKyAxICYmICRpc19vcGVuaW5nX3R5cGV7JHR5cGV9ICkgewogICAgICAgICAgICAgICAgICAgICRzZWxmLT5icmVha19saXN0c19pbmNyZWFzaW5nX2RlcHRoKCRpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAjIExvb3AgU2VjdGlvbiBEOiBIYW5kbGUgRGVjcmVhc2luZyBEZXB0aC4uCiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICAgICAgICAgIyBoYXJkZW5lZCBhZ2FpbnN0IGJhZCBpbnB1dCBzeW50YXg6IGRlcHRoIGp1bXAgbXVzdCBiZSAxIGFuZAogICAgICAgICAgICAgICAgIyB0eXBlIG11c3QgYmUgY2xvc2luZyAuLiBmaXhlcyBjMTAyCiAgICAgICAgICAgICAgICBlbHNpZiAoJGRlcHRoID09ICRjdXJyZW50X2RlcHRoIC0gMQogICAgICAgICAgICAgICAgICAgICYmICRpc19jbG9zaW5nX3R5cGV7JHR5cGV9ICkKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQgJHJib25kX3N0cmVuZ3RoX2JpYXMgd2lsbCBub3QgZ2V0IGNoYW5nZWQgYnkKICAgICAgICAgICAgICAgICAgICAjIHRoaXMgY2FsbC4gSXQgZ2V0cyBjaGFuZ2VkIGluIHRoZSBjYWxsIHRvCiAgICAgICAgICAgICAgICAgICAgIyBzZXRfY29tbWFfYnJlYWtwb2ludHMgYXQgdGhlIGVuZCBvZiB0aGlzIHJvdXRpbmUgZm9yCiAgICAgICAgICAgICAgICAgICAgIyBjb21tYXMgbm90IGluIGxpc3RzLgogICAgICAgICAgICAgICAgICAgICRzZWxmLT5icmVha19saXN0c19kZWNyZWFzaW5nX2RlcHRoKCAkaSwKICAgICAgICAgICAgICAgICAgICAgICAgJHJib25kX3N0cmVuZ3RoX2JpYXMgKTsKCiAgICAgICAgICAgICAgICAgICAgJGNvbW1hX2ZvbGxvd3NfbGFzdF9jbG9zaW5nX3Rva2VuID0KICAgICAgICAgICAgICAgICAgICAgICRuZXh0X25vbmJsYW5rX3R5cGUgZXEgJywnIHx8ICRuZXh0X25vbmJsYW5rX3R5cGUgZXEgJz0+JzsKCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAjIyBub3QgYSBkZXB0aCBjaGFuZ2UKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgIyBMb29wIFNlY3Rpb24gRTogSGFuZGxlIHRoaXMgdG9rZW4KICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgICAgICRjdXJyZW50X2RlcHRoID0gJGRlcHRoOwoKICAgICAgICAgICAgIyBtb3N0IHRva2VuIHR5cGVzIGNhbiBza2lwIHRoZSByZXN0IG9mIHRoaXMgbG9vcAogICAgICAgICAgICBuZXh0IGlmICggISRxdWlja19maWx0ZXJfQnskdHlwZX0gKTsKCiAgICAgICAgICAgICMgVHVybiBvZmYgY29tbWEgYWxpZ25tZW50IGlmIHdlIGFyZSBzdXJlIHRoYXQgdGhpcyBpcyBub3QgYSBsaXN0CiAgICAgICAgICAgICMgZW52aXJvbm1lbnQuICBUbyBiZSBzYWZlLCB3ZSB3aWxsIGRvIHRoaXMgaWYgd2Ugc2VlIGNlcnRhaW4KICAgICAgICAgICAgIyBub24tbGlzdCB0b2tlbnMsIHN1Y2ggYXMgJzsnLCAnPScsIGFuZCBhbHNvIHRoZSBlbnZpcm9ubWVudCBpcwogICAgICAgICAgICAjIG5vdCBhIGxpc3QuCiAgICAgICAgICAgICMjICAgICAgJHR5cGUgPX4gL15bXDtcPFw+XH5mXSQvIHx8ICRpc19hc3NpZ25tZW50eyR0eXBlfQogICAgICAgICAgICBpZiAoICRpc19ub25fbGlzdF90eXBleyR0eXBlfSApIHsKICAgICAgICAgICAgICAgIGlmICggISRzZWxmLT5pc19pbl9saXN0X2J5X2koJGkpICkgewogICAgICAgICAgICAgICAgICAgICRkb250X2FsaWduWyRkZXB0aF0gICAgICAgICA9IDE7CiAgICAgICAgICAgICAgICAgICAgJHdhbnRfY29tbWFfYnJlYWtbJGRlcHRoXSAgID0gMDsKICAgICAgICAgICAgICAgICAgICAkaW5kZXhfYmVmb3JlX2Fycm93WyRkZXB0aF0gPSAtMTsKCiAgICAgICAgICAgICAgICAgICAgIyBubyBzcGVjaWFsIGNvbW1hIGJyZWFrcyBpbiBDLXN0eWxlICdmb3InIHRlcm1zIChjMTU0KQogICAgICAgICAgICAgICAgICAgIGlmICggJHR5cGUgZXEgJ2YnICkgeyAkbGFzdF9jb21tYV9pbmRleFskZGVwdGhdID0gdW5kZWYgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGhhbmRsZSBhbnkgY29tbWFzCiAgICAgICAgICAgIGVsc2lmICggJHR5cGUgZXEgJywnICkgewogICAgICAgICAgICAgICAgJHNlbGYtPnN0dWR5X2NvbW1hKCAkaSwgJGNvbW1hX2ZvbGxvd3NfbGFzdF9jbG9zaW5nX3Rva2VuICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaGFuZGxlIGNvbW1hLWFycm93CiAgICAgICAgICAgIGVsc2lmICggJHR5cGUgZXEgJz0+JyApIHsKICAgICAgICAgICAgICAgIG5leHQgaWYgKCAkbGFzdF9ub25ibGFua190eXBlIGVxICc9PicgKTsKICAgICAgICAgICAgICAgIG5leHQgaWYgJHJPcHRzX2JyZWFrX2F0X29sZF9jb21tYV9icmVha3BvaW50czsKICAgICAgICAgICAgICAgIG5leHQKICAgICAgICAgICAgICAgICAgaWYgKCAkck9wdHNfY29tbWFfYXJyb3dfYnJlYWtwb2ludHMgPT0gMwogICAgICAgICAgICAgICAgICAgICYmICFkZWZpbmVkKCAkb3ZlcnJpZGVfY2FiM1skZGVwdGhdICkgKTsKICAgICAgICAgICAgICAgICR3YW50X2NvbW1hX2JyZWFrWyRkZXB0aF0gICA9IDE7CiAgICAgICAgICAgICAgICAkaW5kZXhfYmVmb3JlX2Fycm93WyRkZXB0aF0gPSAkaV9sYXN0X25vbmJsYW5rX3Rva2VuOwogICAgICAgICAgICAgICAgbmV4dDsKCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkdHlwZSBlcSAnLicgKSB7CiAgICAgICAgICAgICAgICAkbGFzdF9kb3RfaW5kZXhbJGRlcHRoXSA9ICRpOwoKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIGVycm9yIDogbm8gY29kZSB0byBoYW5kbGUgYSB0eXBlIGluICVxdWlja19maWx0ZXJfQgogICAgICAgICAgICAgICAgREVWRUxfTU9ERSAmJiBGYXVsdCg8PEVPTSk7Ck1pc3NpbmcgY29kZSB0byBoYW5kbGUgdG9rZW4gdHlwZSAnJHR5cGUnIHdoaWNoIGlzIGluIHRoZSBxdWlja19maWx0ZXJfQgpFT00KICAgICAgICAgICAgfQoKICAgICAgICB9ICMjIGVuZCBtYWluIGxvb3Agb3ZlciB0b2tlbnMKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIE5vdyBzZXQgYnJlYWtzIGZvciBhbnkgdW5maW5pc2hlZCBsaXN0cwogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgZm9yZWFjaCBteSAkZGQgKCByZXZlcnNlKCAkbWluaW11bV9kZXB0aCAuLiAkY3VycmVudF9kZXB0aCApICkgewoKICAgICAgICAgICAgJGludGVycnVwdGVkX2xpc3RbJGRkXSAgID0gMTsKICAgICAgICAgICAgJGhhc19icm9rZW5fc3VibGlzdFskZGRdID0gMSBpZiAoICRkZCA8ICRjdXJyZW50X2RlcHRoICk7CiAgICAgICAgICAgIGlmICggJGl0ZW1fY291bnRfc3RhY2tbJGRkXSApIHsKICAgICAgICAgICAgICAgICRzZWxmLT5zZXRfY29tbWFfYnJlYWtwb2ludHMoICRtYXhfaW5kZXhfdG9fZ28gKyAxLAogICAgICAgICAgICAgICAgICAgICRkZCwgJHJib25kX3N0cmVuZ3RoX2JpYXMgKTsKCiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHNlbGYtPnNldF9sb2dpY2FsX2JyZWFrcG9pbnRzKCRkZCkKICAgICAgICAgICAgICBpZiAoICRoYXNfb2xkX2xvZ2ljYWxfYnJlYWtwb2ludHNbJGRkXSApOwogICAgICAgICAgICAkc2VsZi0+c2V0X2Zvcl9zZW1pY29sb25fYnJlYWtwb2ludHMoJGRkKQogICAgICAgICAgICAgIGlmICggQHsgJHJmb3Jfc2VtaWNvbG9uX2xpc3RbJGRkXSB9ICk7CgogICAgICAgICAgICAjIGJyZWFrIG9wZW4gY29udGFpbmVyLi4uCiAgICAgICAgICAgIG15ICRpX29wZW5pbmcgPSAkb3BlbmluZ19zdHJ1Y3R1cmVfaW5kZXhfc3RhY2tbJGRkXTsKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgZGVmaW5lZCgkaV9vcGVuaW5nKQogICAgICAgICAgICAgICAgJiYgJGlfb3BlbmluZyA+PSAwCiAgICAgICAgICAgICAgICAmJiAhaXNfdW5icmVha2FibGVfY29udGFpbmVyKCRkZCkKCiAgICAgICAgICAgICAgICAjIEF2b2lkIGEgYnJlYWsgd2hpY2ggd291bGQgcGxhY2UgYW4gaXNvbGF0ZWQgJyBvciAiCiAgICAgICAgICAgICAgICAjIG9uIGEgbGluZQogICAgICAgICAgICAgICAgJiYgISgKICAgICAgICAgICAgICAgICAgICAgICAkdHlwZSBlcSAnUScKICAgICAgICAgICAgICAgICAgICAmJiAkaV9vcGVuaW5nID49ICRtYXhfaW5kZXhfdG9fZ28gLSAyCiAgICAgICAgICAgICAgICAgICAgJiYgKCAkdG9rZW4gZXEgIiciIHx8ICR0b2tlbiBlcSAnIicgKQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJHNlbGYtPnNldF9mb3JjZWRfYnJlYWtwb2ludCgkaV9vcGVuaW5nKTsKICAgICAgICAgICAgfQogICAgICAgIH0gIyMgZW5kIGZvciAoIG15ICRkZCA9ICRjdXJyZW50X2RlcHRoLi4uKQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBTZXQgdGhlIHJldHVybiB0aGUgZmxhZyAnJHNhd19nb29kX2JyZWFrcG9pbnQnLgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIFRoaXMgZmxhZyBpbmRpY2F0ZXMgaWYgdGhlIGlucHV0IGZpbGUgaGFkIHNvbWUgZ29vZCBicmVha3BvaW50cy4KICAgICAgICAjIEl0IHdpbGwgYmUgdXNlZCB0byBmb3JjZSBhIGJyZWFrIGluIGEgbGluZSBzaG9ydGVyIHRoYW4gdGhlCiAgICAgICAgIyBhbGxvd2VkIGxpbmUgbGVuZ3RoLgogICAgICAgIGlmICggJGhhc19vbGRfbG9naWNhbF9icmVha3BvaW50c1skY3VycmVudF9kZXB0aF0gKSB7CiAgICAgICAgICAgICRzYXdfZ29vZF9icmVha3BvaW50ID0gMTsKICAgICAgICB9CgogICAgICAgICMgQSBjb21wbGV4IGxpbmUgd2l0aCBvbmUgYnJlYWsgYXQgYW4gPSBoYXMgYSBnb29kIGJyZWFrcG9pbnQuCiAgICAgICAgIyBUaGlzIGlzIG5vdCBjb21wbGV4ICgkdG90YWxfZGVwdGhfdmFyaWF0aW9uPTApOgogICAgICAgICMgJHJlczEKICAgICAgICAjICAgPSAxMDsKICAgICAgICAjCiAgICAgICAgIyBUaGlzIGlzIGNvbXBsZXggKCR0b3RhbF9kZXB0aF92YXJpYXRpb249Nik6CiAgICAgICAgIyAkcmVzMiA9CiAgICAgICAgIyAgKGlzX2JvdW5kcCgiYSIsICdzZWxmLWluc2VydCcpICYmIGlzX2JvdW5kcCgiYiIsICdzZWxmLWluc2VydCcpKTsKCiAgICAgICAgIyBUaGUgY2hlY2sgKCRpX29sZF8uLiA8ICRtYXhfaW5kZXhfdG9fZ28pIHdhcyBhZGRlZCB0byBmaXggYjEzMzMKICAgICAgICBlbHNpZiAoJGlfb2xkX2Fzc2lnbm1lbnRfYnJlYWsKICAgICAgICAgICAgJiYgJHRvdGFsX2RlcHRoX3ZhcmlhdGlvbiA+IDQKICAgICAgICAgICAgJiYgJG9sZF9icmVha3BvaW50X2NvdW50ID09IDEKICAgICAgICAgICAgJiYgJGlfb2xkX2Fzc2lnbm1lbnRfYnJlYWsgPCAkbWF4X2luZGV4X3RvX2dvICkKICAgICAgICB7CiAgICAgICAgICAgICRzYXdfZ29vZF9icmVha3BvaW50ID0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICMjIG5vdCBhIGdvb2QgYnJlYWtwb2ludAogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRzYXdfZ29vZF9icmVha3BvaW50OwogICAgfSAjIyBlbmQgc3ViIGJyZWFrX2xpc3RzCgogICAgc3ViIHN0dWR5X2NvbW1hIHsKCiAgICAgICAgbXkgKCAkc2VsZiwgJGksICRjb21tYV9mb2xsb3dzX2xhc3RfY2xvc2luZ190b2tlbiApID0gQF87CgogICAgICAgICMgU3R1ZHkgYW5kIHN0b3JlIGluZm8gZm9yIGEgbGlzdCBjb21tYQogICAgICAgICMgR2l2ZW46CiAgICAgICAgIyAgJGkgPSBpbmRleCBvZiB0aGlzIGNvbW1hIGluIHRoZSBfdG9fZ28gb3V0cHV0IGJhdGNoIGFycmF5CiAgICAgICAgIyAgJGNvbW1hX2ZvbGxvd3NfbGFzdF9jbG9zaW5nX3Rva2VuID0gdHJ1ZSBpZiBpdCBmb2xsb3dzICcpJyAnfScgb3IgJ10nCgogICAgICAgICRsYXN0X2RvdF9pbmRleFskZGVwdGhdICAgPSB1bmRlZjsKICAgICAgICAkbGFzdF9jb21tYV9pbmRleFskZGVwdGhdID0gJGk7CgogICAgICAgICMgYnJlYWsgaGVyZSBpZiB0aGlzIGNvbW1hIGZvbGxvd3MgYSAnPT4nCiAgICAgICAgIyBidXQgbm90IGlmIHRoZXJlIGlzIGEgc2lkZSBjb21tZW50IGFmdGVyIHRoZSBjb21tYQogICAgICAgIGlmICggJHdhbnRfY29tbWFfYnJlYWtbJGRlcHRoXSApIHsKCiAgICAgICAgICAgIGlmICggJGlzX2Nsb3NpbmdfdHlwZXskbmV4dF9ub25ibGFua190eXBlfSApIHsKICAgICAgICAgICAgICAgIGlmICgkck9wdHNfY29tbWFfYXJyb3dfYnJlYWtwb2ludHMpIHsKICAgICAgICAgICAgICAgICAgICAkd2FudF9jb21tYV9icmVha1skZGVwdGhdID0gMDsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRzZWxmLT5zZXRfZm9yY2VkX2JyZWFrcG9pbnQoJGkpCiAgICAgICAgICAgICAgdW5sZXNzICggJG5leHRfbm9uYmxhbmtfdHlwZSBlcSAnIycgKTsKCiAgICAgICAgICAgICMgYnJlYWsgYmVmb3JlIHRoZSBwcmV2aW91cyB0b2tlbiBpZiBpdCBsb29rcyBzYWZlCiAgICAgICAgICAgICMgRXhhbXBsZSBvZiBzb21ldGhpbmcgdGhhdCB3ZSB3aWxsIG5vdCB0cnkgdG8gYnJlYWsgYmVmb3JlOgogICAgICAgICAgICAjICAgREJJOjpTUUxfU01BTExJTlQoKSA9PiAkYWRvX2NvbnN0cy0+e2FkU21hbGxJbnR9LAogICAgICAgICAgICAjIEFsc28gd2UgZG9uJ3Qgd2FudCB0byBicmVhayBhdCBhIGJpbmFyeSBvcGVyYXRvciAobGlrZSArKToKICAgICAgICAgICAgIyAkYy0+Y3JlYXRlT3ZhbCgKICAgICAgICAgICAgIyAgICAkeCArICRSLCAkeSArCiAgICAgICAgICAgICMgICAgJFIgPT4gJHggLSAkUiwKICAgICAgICAgICAgIyAgICAkeSAtICRSLCAtZmlsbCAgID0+ICdibGFjaycsCiAgICAgICAgICAgICMgKTsKICAgICAgICAgICAgbXkgJGlicmVhayA9ICRpbmRleF9iZWZvcmVfYXJyb3dbJGRlcHRoXSAtIDE7CiAgICAgICAgICAgIGlmICggJGlicmVhayA+IDAKICAgICAgICAgICAgICAgICYmICEkaXNfY2xvc2luZ190b2tlbnsgJHRva2Vuc190b19nb1sgJGlicmVhayArIDEgXSB9ICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKCAkdG9rZW5zX3RvX2dvWyRpYnJlYWtdIGVxICctJyApIHsgJGlicmVhay0tIH0KICAgICAgICAgICAgICAgIGlmICggJHR5cGVzX3RvX2dvWyRpYnJlYWtdIGVxICdiJyApICB7ICRpYnJlYWstLSB9CiAgICAgICAgICAgICAgICBpZiAoICR0eXBlc190b19nb1skaWJyZWFrXSA9fiAvXlssd2laQ1VHXChce1xbXSQvICkgewoKICAgICAgICAgICAgICAgICAgICAjIGRvbid0IGJyZWFrIGJlZm9yZSBhIGNvbW1hLCBhcyBpbiB0aGUgZm9sbG93aW5nOgogICAgICAgICAgICAgICAgICAgICMgKCBMT05HRVJfVEhBTiw9PiAxLAogICAgICAgICAgICAgICAgICAgICMgICAgRUlHSFRZX0NIQVJBQ1RFUlMsPT4gMiwKICAgICAgICAgICAgICAgICAgICAjICAgIENBVVNFU19GT1JNQVRUSU5HLD0+IDMsCiAgICAgICAgICAgICAgICAgICAgIyAgICBMSUtFX1RISVMsPT4gNCwKICAgICAgICAgICAgICAgICAgICAjICk7CiAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGV4YW1wbGUgaXMgZm9yIC10c28gYnV0IHNob3VsZCBiZSBnZW5lcmFsIHJ1bGUKICAgICAgICAgICAgICAgICAgICBpZiAoICAgJHR5cGVzX3RvX2dvWyAkaWJyZWFrICsgMSBdIG5lICctPicKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHR5cGVzX3RvX2dvWyAkaWJyZWFrICsgMSBdIG5lICcsJyApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+c2V0X2ZvcmNlZF9icmVha3BvaW50KCRpYnJlYWspOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHdhbnRfY29tbWFfYnJlYWtbJGRlcHRoXSAgID0gMDsKICAgICAgICAgICAgJGluZGV4X2JlZm9yZV9hcnJvd1skZGVwdGhdID0gLTE7CgogICAgICAgICAgICAjIGhhbmRsZSBsaXN0IHdoaWNoIG1peGVzICc9PidzIGFuZCAnLCdzOgogICAgICAgICAgICAjIHRyZWF0IGFueSBsaXN0IGl0ZW1zIHNvIGZhciBhcyBhbiBpbnRlcnJ1cHRlZCBsaXN0CiAgICAgICAgICAgICRpbnRlcnJ1cHRlZF9saXN0WyRkZXB0aF0gPSAxOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIEJyZWFrIGFmdGVyIGFsbCBjb21tYXMgYWJvdmUgc3RhcnRpbmcgZGVwdGguLi4KICAgICAgICAjIEJ1dCBvbmx5IGlmIHRoZSBsYXN0IGNsb3NpbmcgdG9rZW4gd2FzIGZvbGxvd2VkIGJ5IGEgY29tbWEsCiAgICAgICAgIyAgIHRvIGF2b2lkIGJyZWFraW5nIGEgbGlzdCBvcGVyYXRvciAoaXNzdWUgYzExOSkKICAgICAgICBpZiAoICAgJGRlcHRoIDwgJHN0YXJ0aW5nX2RlcHRoCiAgICAgICAgICAgICYmICRjb21tYV9mb2xsb3dzX2xhc3RfY2xvc2luZ190b2tlbgogICAgICAgICAgICAmJiAhJGRvbnRfYWxpZ25bJGRlcHRoXSApCiAgICAgICAgewogICAgICAgICAgICAkc2VsZi0+c2V0X2ZvcmNlZF9icmVha3BvaW50KCRpKQogICAgICAgICAgICAgIHVubGVzcyAoICRuZXh0X25vbmJsYW5rX3R5cGUgZXEgJyMnICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgYWRkIHRoaXMgY29tbWEgdG8gdGhlIGxpc3QuLgogICAgICAgIG15ICRpdGVtX2NvdW50ID0gJGl0ZW1fY291bnRfc3RhY2tbJGRlcHRoXTsKICAgICAgICBpZiAoICRpdGVtX2NvdW50ID09IDAgKSB7CgogICAgICAgICAgICAjIGJ1dCBkbyBub3QgZm9ybSBhIGxpc3Qgd2l0aCBubyBvcGVuaW5nIHN0cnVjdHVyZQogICAgICAgICAgICAjIGZvciBleGFtcGxlOgoKICAgICAgICAgICAgIyAgICAgICAgICAgIG9wZW4gSU5GSUxFX0NPUFksICI+JGlucHV0X2ZpbGVfY29weSIKICAgICAgICAgICAgIyAgICAgICAgICAgICAgb3IgZGllICgidmVyeSBsb25nIG1lc3NhZ2UiKTsKICAgICAgICAgICAgaWYgKCAoICRvcGVuaW5nX3N0cnVjdHVyZV9pbmRleF9zdGFja1skZGVwdGhdIDwgMCApCiAgICAgICAgICAgICAgICAmJiAkc2VsZi0+aXNfaW5fYmxvY2tfYnlfaSgkaSkgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkZG9udF9hbGlnblskZGVwdGhdID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJGNvbW1hX2luZGV4WyRkZXB0aF1bJGl0ZW1fY291bnRdID0gJGk7CiAgICAgICAgKyskaXRlbV9jb3VudF9zdGFja1skZGVwdGhdOwogICAgICAgIGlmICggJGxhc3Rfbm9uYmxhbmtfdHlwZSA9fiAvXltpUlxdXSQvICkgewogICAgICAgICAgICAkaWRlbnRpZmllcl9jb3VudF9zdGFja1skZGVwdGhdKys7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBzdHVkeV9jb21tYQoKICAgIG15ICVwb29yX3R5cGVzOwogICAgbXkgJXBvb3Jfa2V5d29yZHM7CiAgICBteSAlcG9vcl9uZXh0X3R5cGVzOwogICAgbXkgJXBvb3JfbmV4dF9rZXl3b3JkczsKCiAgICBCRUdJTiB7CgogICAgICAgICMgU2V0dXAgZmlsdGVycyBmb3IgZGV0ZWN0aW5nIHZlcnkgcG9vciBicmVha3MgdG8gaWdub3JlLgogICAgICAgICMgYjEwOTc6IG9sZCBicmVha3MgYWZ0ZXIgdHlwZSAnTCcgYW5kIGJlZm9yZSAnUicgYXJlIHBvb3IKICAgICAgICAjIGIxNDUwOiBvbGQgYnJlYWtzIGF0ICdlcScgYW5kIHJlbGF0ZWQgb3BlcmF0b3JzIGFyZSBwb29yCiAgICAgICAgbXkgQHEgPSBxdyggPT0gPD0gPj0gIT0gKTsKCiAgICAgICAgQHBvb3JfdHlwZXN7QHF9ICAgICAgID0gKDEpIHggc2NhbGFyKEBxKTsKICAgICAgICBAcG9vcl9uZXh0X3R5cGVze0BxfSAgPSAoMSkgeCBzY2FsYXIoQHEpOwogICAgICAgICRwb29yX3R5cGVzeydMJ30gICAgICA9IDE7CiAgICAgICAgJHBvb3JfbmV4dF90eXBlc3snUid9ID0gMTsKCiAgICAgICAgQHEgICAgICAgICAgICAgICAgICAgICAgPSBxdyggZXEgbmUgbGUgZ2UgbHQgZ3QgKTsKICAgICAgICBAcG9vcl9rZXl3b3Jkc3tAcX0gICAgICA9ICgxKSB4IHNjYWxhcihAcSk7CiAgICAgICAgQHBvb3JfbmV4dF9rZXl3b3Jkc3tAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwogICAgfSAjIyBlbmQgQkVHSU4KCiAgICBzdWIgZXhhbWluZV9vbGRfYnJlYWtwb2ludCB7CgogICAgICAgIG15ICggJHNlbGYsICRpLCAkaV9uZXh0X25vbmJsYW5rLCAkaV93YW50X3ByZXZpb3VzX2JyZWFrLAogICAgICAgICAgICAkaV9vbGRfYXNzaWdubWVudF9icmVhayApCiAgICAgICAgICA9IEBfOwoKICAgICAgICAjIExvb2sgYXQgYW4gb2xkIGJyZWFrcG9pbnQgYW5kIHNldC91cGRhdGUgY2VydGFpbiBmbGFnczoKCiAgICAgICAgIyBHaXZlbiBpbmRleGVzIG9mIHRocmVlIHRva2VucyBpbiB0aGlzIGJhdGNoOgogICAgICAgICMgICAkaV9uZXh0X25vbmJsYW5rICAgICAgICAtIGluZGV4IG9mIHRoZSBuZXh0IG5vbmJsYW5rIHRva2VuCiAgICAgICAgIyAgICRpX3dhbnRfcHJldmlvdXNfYnJlYWsgIC0gd2Ugd2FudCBhIGJyZWFrIGJlZm9yZSB0aGlzIGluZGV4CiAgICAgICAgIyAgICRpX29sZF9hc3NpZ25tZW50X2JyZWFrIC0gdGhlIGluZGV4IG9mIGFuICc9JyBvciBlcXVpdmFsZW50CiAgICAgICAgIyBVcGRhdGU6CiAgICAgICAgIyAgICRvbGRfYnJlYWtwb2ludF9jb3VudCAgIC0gYSBjb3VudGVyIHRvIGluY3JlbWVudCB1bmxlc3MgcG9vciBicmVhawogICAgICAgICMgVXBkYXRlIGFuZCByZXR1cm46CiAgICAgICAgIyAgICRpX3dhbnRfcHJldmlvdXNfYnJlYWsKICAgICAgICAjICAgJGlfb2xkX2Fzc2lnbm1lbnRfYnJlYWsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBGaWx0ZXIgb3V0IHBvb3IgYnJlYWtzCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBKdXN0IHJldHVybiBpZiB0aGlzIGlzIGEgcG9vciBicmVhayBhbmQgcHJldGVuZCBpdCBkb2VzIG5vdCBleGlzdC4KICAgICAgICAjIE90aGVyd2lzZSwgcG9vciBicmVha3MgbWFkZSB1bmRlciBzdHJlc3MgY2FuIGNhdXNlIGluc3RhYmlsaXR5LgogICAgICAgIG15ICRwb29yX2JyZWFrOwogICAgICAgIGlmICAgKCAkdHlwZSBlcSAnaycgKSB7ICRwb29yX2JyZWFrIHx8PSAkcG9vcl9rZXl3b3Jkc3skdG9rZW59IH0KICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgeyAkcG9vcl9icmVhayB8fD0gJHBvb3JfdHlwZXN7JHR5cGV9IH0KCiAgICAgICAgaWYgKCAkbmV4dF9ub25ibGFua190eXBlIGVxICdrJyApIHsKICAgICAgICAgICAgJHBvb3JfYnJlYWsgfHw9ICRwb29yX25leHRfa2V5d29yZHN7JG5leHRfbm9uYmxhbmtfdG9rZW59OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJHBvb3JfYnJlYWsgfHw9ICRwb29yX25leHRfdHlwZXN7JG5leHRfbm9uYmxhbmtfdHlwZX07CiAgICAgICAgfQoKICAgICAgICAjIEFsc28gaWdub3JlIGFueSBoaWdoIHN0cmVzcyBsZXZlbCBicmVha3M7IGZpeGVzIGIxMzk1CiAgICAgICAgJHBvb3JfYnJlYWsgfHw9ICRsZXZlbHNfdG9fZ29bJGldID49ICRoaWdoX3N0cmVzc19sZXZlbDsKICAgICAgICBpZiAoJHBvb3JfYnJlYWspIHsgZ290byBSRVRVUk4gfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIE5vdCBhIHBvb3IgYnJlYWssIHNvIGNvbnRpbnVlIHRvIGV4YW1pbmUgaXQKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAkb2xkX2JyZWFrcG9pbnRfY291bnQrKzsKICAgICAgICAkaV9saW5lX2VuZCAgID0gJGk7CiAgICAgICAgJGlfbGluZV9zdGFydCA9ICRpX25leHRfbm9uYmxhbms7CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIERvIHdlIHdhbnQgdG8gYnJlYWsgYmVmb3JlIHRoaXMgdG9rZW4/CiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAjIEJyZWFrIGJlZm9yZSBjZXJ0YWluIGtleXdvcmRzIGlmIHVzZXIgYnJva2UgdGhlcmUgYW5kCiAgICAgICAgIyB0aGlzIGlzIGEgJ3NhZmUnIGJyZWFrIHBvaW50LiBUaGUgaWRlYSBpcyB0byByZXRhaW4KICAgICAgICAjIGFueSBwcmVmZXJyZWQgYnJlYWtzIGZvciBzZXF1ZW50aWFsIGxpc3Qgb3BlcmF0aW9ucywKICAgICAgICAjIGxpa2UgYSBzY2h3YXJ0emlhbiB0cmFuc2Zvcm0uCiAgICAgICAgaWYgKCRyT3B0c19icmVha19hdF9vbGRfa2V5d29yZF9icmVha3BvaW50cykgewogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAkbmV4dF9ub25ibGFua190eXBlIGVxICdrJwogICAgICAgICAgICAgICAgJiYgJGlzX2tleXdvcmRfcmV0dXJuaW5nX2xpc3R7JG5leHRfbm9uYmxhbmtfdG9rZW59CiAgICAgICAgICAgICAgICAmJiAoICAgJHR5cGUgPX4gL15bPVwpXF1cfVJpd10kLwogICAgICAgICAgICAgICAgICAgIHx8ICR0eXBlIGVxICdrJyAmJiAkaXNfa2V5d29yZF9yZXR1cm5pbmdfbGlzdHskdG9rZW59ICkKICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIHdlIGFjdHVhbGx5IGhhdmUgdG8gc2V0IHRoaXMgYnJlYWsgbmV4dCB0aW1lIHRocm91Z2gKICAgICAgICAgICAgICAgICMgdGhlIGxvb3AgYmVjYXVzZSBpZiB3ZSBhcmUgYXQgYSBjbG9zaW5nIHRva2VuIChzdWNoCiAgICAgICAgICAgICAgICAjIGFzICd9Jykgd2hpY2ggZm9ybXMgYSBvbmUtbGluZSBibG9jaywgdGhpcyBicmVhayBtaWdodAogICAgICAgICAgICAgICAgIyBnZXQgdW5kb25lLgoKICAgICAgICAgICAgICAgICMgQnV0IGRvIG5vdCBkbyB0aGlzIGF0IGFuICc9JyBpZjoKICAgICAgICAgICAgICAgICMgLSB0aGUgdXNlciB3YW50cyBicmVha3MgYmVmb3JlIGFuIGVxdWFscyAoYjQzNCBiOTAzKQogICAgICAgICAgICAgICAgIyAtIG9yIC1uYXdzIGlzIHNldCAoY2FuIGJlIHVuc3RhYmxlLCBzZWUgYjEzNTQpCiAgICAgICAgICAgICAgICBteSAkc2tpcCA9ICR0eXBlIGVxICc9JwogICAgICAgICAgICAgICAgICAmJiAoICR3YW50X2JyZWFrX2JlZm9yZXskdHlwZX0KICAgICAgICAgICAgICAgICAgICB8fCAhJHJPcHRzX2FkZF93aGl0ZXNwYWNlICk7CgogICAgICAgICAgICAgICAgJGlfd2FudF9wcmV2aW91c19icmVhayA9ICRpCiAgICAgICAgICAgICAgICAgIHVubGVzcyAoJHNraXApOwoKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBCcmVhayBiZWZvcmUgYXR0cmlidXRlcyBpZiB1c2VyIGJyb2tlIHRoZXJlCiAgICAgICAgaWYgKCRyT3B0c19icmVha19hdF9vbGRfYXR0cmlidXRlX2JyZWFrcG9pbnRzKSB7CiAgICAgICAgICAgIGlmICggJG5leHRfbm9uYmxhbmtfdHlwZSBlcSAnQScgKSB7CiAgICAgICAgICAgICAgICAkaV93YW50X3ByZXZpb3VzX2JyZWFrID0gJGk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIElzIHRoaXMgYW4gb2xkIGFzc2lnbm1lbnQgYnJlYWs/CiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGlmICggJGlzX2Fzc2lnbm1lbnR7JHR5cGV9ICkgewogICAgICAgICAgICAkaV9vbGRfYXNzaWdubWVudF9icmVhayA9ICRpOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRpc19hc3NpZ25tZW50eyRuZXh0X25vbmJsYW5rX3R5cGV9ICkgewogICAgICAgICAgICAkaV9vbGRfYXNzaWdubWVudF9icmVhayA9ICRpX25leHRfbm9uYmxhbms7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAjIyBub3Qgb2xkIGFzc2lnbm1lbnQgYnJlYWsKICAgICAgICB9CgogICAgICBSRVRVUk46CiAgICAgICAgcmV0dXJuICggJGlfd2FudF9wcmV2aW91c19icmVhaywgJGlfb2xkX2Fzc2lnbm1lbnRfYnJlYWsgKTsKICAgIH0gIyMgZW5kIHN1YiBleGFtaW5lX29sZF9icmVha3BvaW50CgogICAgc3ViIGJyZWFrX2xpc3RzX3R5cGVfc2VxdWVuY2UgewoKICAgICAgICBteSAoICRzZWxmLCAkaSApID0gQF87CgogICAgICAgICMgV2UgaGF2ZSBlbmNvdW50ZXJlZCBhIHNlcXVlbmNlZCB0b2tlbiB3aGlsZSBzZXR0aW5nIGxpc3QgYnJlYWtwb2ludHMKCiAgICAgICAgIyBHaXZlbjoKICAgICAgICAjICAkaSA9IGluZGV4IG9mIHRoaXMgdG9rZW4gaW4gdGhlIF90b19nbyBvdXRwdXQgYmF0Y2ggYXJyYXkKCiAgICAgICAgIyBpZiBjbG9zaW5nIHR5cGUsIG9uZSBvZiB9ICkgXSA6CiAgICAgICAgaWYgKCAkaXNfY2xvc2luZ19zZXF1ZW5jZV90b2tlbnskdG9rZW59ICkgewoKICAgICAgICAgICAgaWYgKCAkdHlwZSBlcSAnOicgKSB7CiAgICAgICAgICAgICAgICAkaV9sYXN0X2NvbG9uID0gJGk7CgogICAgICAgICAgICAgICAgIyByZXRhaW4gYnJlYWsgYXQgYSAnOicgbGluZSBicmVhawogICAgICAgICAgICAgICAgaWYgKCAgICggJGkgPT0gJGlfbGluZV9zdGFydCB8fCAkaSA9PSAkaV9saW5lX2VuZCApCiAgICAgICAgICAgICAgICAgICAgJiYgJHJPcHRzX2JyZWFrX2F0X29sZF90ZXJuYXJ5X2JyZWFrcG9pbnRzCiAgICAgICAgICAgICAgICAgICAgJiYgJGxldmVsc190b19nb1skaV0gPCAkaGlnaF9zdHJlc3NfbGV2ZWwgKQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+c2V0X2ZvcmNlZF9icmVha3BvaW50KCRpKTsKCiAgICAgICAgICAgICAgICAgICAgIyBCcmVhayBhdCBhIHByZXZpb3VzICc9JywgYnV0IG9ubHkgaWYgaXQgaXMgYmVmb3JlCiAgICAgICAgICAgICAgICAgICAgIyB0aGUgbWF0aW5nICc/Jy4gTWF0ZV9pbmRleCB0ZXN0IGZpeGVzIGIxMjg3LgogICAgICAgICAgICAgICAgICAgIG15ICRpZXEgPSAkaV9lcXVhbHNbJGRlcHRoXTsKICAgICAgICAgICAgICAgICAgICBteSAkbWl4ID0gJG1hdGVfaW5kZXhfdG9fZ29bJGldOwogICAgICAgICAgICAgICAgICAgIGlmICggIWRlZmluZWQoJG1peCkgKSB7ICRtaXggPSAtMSB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkaWVxID4gMCAmJiAkaWVxIDwgJG1peCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPnNldF9mb3JjZWRfYnJlYWtwb2ludCggJGlfZXF1YWxzWyRkZXB0aF0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGlfZXF1YWxzWyRkZXB0aF0gPSAtMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaGFuZGxlIGFueSBwb3N0cG9uZWQgY2xvc2luZyBicmVha3BvaW50cwogICAgICAgICAgICBpZiAoIGhhc19wb3N0cG9uZWRfYnJlYWtwb2ludCgkdHlwZV9zZXF1ZW5jZSkgKSB7CiAgICAgICAgICAgICAgICBteSAkaW5jID0gKCAkdHlwZSBlcSAnOicgKSA/IDAgOiAxOwogICAgICAgICAgICAgICAgaWYgKCAkaSA+PSAkaW5jICkgewogICAgICAgICAgICAgICAgICAgICRzZWxmLT5zZXRfZm9yY2VkX2JyZWFrcG9pbnQoICRpIC0gJGluYyApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIG11c3QgYmUgb3BlbmluZyB0b2tlbiwgb25lIG9mIHsgKCBbID8KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgc2V0IGJyZWFrcyBhdCA/LzogaWYgdGhleSB3aWxsIGdldCBzZXBhcmF0ZWQgKGFuZCBhcmUKICAgICAgICAgICAgIyBub3QgYSA/LzogY2hhaW4pLCBvciBpZiB0aGUgJz8nIGlzIGF0IHRoZSBlbmQgb2YgdGhlCiAgICAgICAgICAgICMgbGluZQogICAgICAgICAgICBpZiAoICR0b2tlbiBlcSAnPycgKSB7CiAgICAgICAgICAgICAgICBteSAkaV9jb2xvbiA9ICRtYXRlX2luZGV4X3RvX2dvWyRpXTsKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAhZGVmaW5lZCgkaV9jb2xvbikgIyB0aGUgJzonIGlzIG5vdCBpbiB0aGlzIGJhdGNoCiAgICAgICAgICAgICAgICAgICAgfHwgJGkgPT0gMCAgICAgICAgICMgdGhpcyAnPycgaXMgdGhlIGZpcnN0IHRva2VuIG9mIHRoZSBsaW5lCiAgICAgICAgICAgICAgICAgICAgfHwgJGkgPT0gJG1heF9pbmRleF90b19nbyAgICAjIG9yIHRoaXMgJz8nIGlzIHRoZSBsYXN0IHRva2VuCiAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgIyBkb24ndCBicmVhayBpZiAjIHRoaXMgaGFzIGEgc2lkZSBjb21tZW50LCBhbmQKICAgICAgICAgICAgICAgICAgICAjIGRvbid0IGJyZWFrIGF0IGEgJz8nIGlmIHByZWNlZGVkIGJ5ICc6JyBvbgogICAgICAgICAgICAgICAgICAgICMgdGhpcyBsaW5lIG9mIHByZXZpb3VzID8vOiBwYWlyIG9uIHRoaXMgbGluZS4KICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgYW4gYXR0ZW1wdCB0byBwcmVzZXJ2ZSBhIGNoYWluIG9mID8vOgogICAgICAgICAgICAgICAgICAgICMgZXhwcmVzc2lvbnMgKGVsc2lmMi50KS4KICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpX2xhc3RfY29sb24gPCAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAkcGFyZW50X3NlcW5vX3RvX2dvWyRpX2xhc3RfY29sb25dICE9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFyZW50X3NlcW5vX3RvX2dvWyRpXQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICYmICR0b2tlbnNfdG9fZ29bJG1heF9pbmRleF90b19nb10gbmUgJyMnCiAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+c2V0X2ZvcmNlZF9icmVha3BvaW50KCRpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPnNldF9jbG9zaW5nX2JyZWFrcG9pbnQoJGkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIG11c3QgYmUgb25lIG9mIHsgKCBbCiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgZG8gcmVxdWVzdGVkIC1scCBicmVha3MgYXQgdGhlIE9QRU5JTkcgdG9rZW4gZm9yIEJST0tFTgogICAgICAgICAgICAgICAgIyBibG9ja3MuICBOT1RFOiB0aGlzIGNhbiBiZSBkb25lIGZvciBib3RoIC1scCBhbmQgLXhscCwKICAgICAgICAgICAgICAgICMgYnV0IG9ubHkgLXhscCBjYW4gcmVhbGx5IHRha2UgYWR2YW50YWdlIG9mIHRoaXMuICBTbyB0aGlzCiAgICAgICAgICAgICAgICAjIGlzIGN1cnJlbnRseSByZXN0cmljdGVkIHRvIC14bHAgdG8gYXZvaWQgZXhjZXNzIGNoYW5nZXMgdG8KICAgICAgICAgICAgICAgICMgZXhpc3RpbmcgLWxwIGZvcm1hdHRpbmcuCiAgICAgICAgICAgICAgICBpZiAoICRyT3B0c19leHRlbmRlZF9saW5lX3VwX3BhcmVudGhlc2VzCiAgICAgICAgICAgICAgICAgICAgJiYgIWRlZmluZWQoICRtYXRlX2luZGV4X3RvX2dvWyRpXSApICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBteSAkbHBfb2JqZWN0ID0KICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5bX3JscF9vYmplY3RfYnlfc2Vxbm9fXS0+eyR0eXBlX3NlcXVlbmNlfTsKICAgICAgICAgICAgICAgICAgICBpZiAoJGxwX29iamVjdCkgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkS19iZWdpbl9saW5lID0gJGxwX29iamVjdC0+Z2V0X0tfYmVnaW5fbGluZSgpOwogICAgICAgICAgICAgICAgICAgICAgICBteSAkaV9iZWdpbl9saW5lID0gJEtfYmVnaW5fbGluZSAtICRLX3RvX2dvWzBdOwogICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+c2V0X2ZvcmNlZF9scF9icmVhayggJGlfYmVnaW5fbGluZSwgJGkgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGJyZWFrX2xpc3RzX3R5cGVfc2VxdWVuY2UKCiAgICBzdWIgYnJlYWtfbGlzdHNfaW5jcmVhc2luZ19kZXB0aCB7CgogICAgICAgIG15ICggJHNlbGYsICRpICkgPSBAXzsKCiAgICAgICAgIyBHaXZlbjoKICAgICAgICAjICAkaSA9IGluZGV4IG9mIHRoaXMgdG9rZW4gaW4gdGhlIF90b19nbyBvdXRwdXQgYmF0Y2ggYXJyYXkKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBwcmVwYXJlIGZvciBhIG5ldyBsaXN0IHdoZW4gZGVwdGggaW5jcmVhc2VzCiAgICAgICAgIyB0b2tlbiAkaSBpcyBhICcoJywneycsIG9yICdbJwogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgQkVHSU4gaW5pdGlhbGl6ZSBkZXB0aCBhcnJheXMKICAgICAgICAjIC4uLiB1c2UgdGhlIHNhbWUgb3JkZXIgYXMgc3ViIGNoZWNrX2Zvcl9uZXdfbWluaW11bV9kZXB0aAogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgJHR5cGVfc2VxdWVuY2Vfc3RhY2tbJGRlcHRoXSA9ICR0eXBlX3NlcXVlbmNlOwoKICAgICAgICAkb3ZlcnJpZGVfY2FiM1skZGVwdGhdID0gdW5kZWY7CiAgICAgICAgaWYgKCAkck9wdHNfY29tbWFfYXJyb3dfYnJlYWtwb2ludHMgPT0gMyAmJiAkdHlwZV9zZXF1ZW5jZSApIHsKICAgICAgICAgICAgJG92ZXJyaWRlX2NhYjNbJGRlcHRoXSA9CiAgICAgICAgICAgICAgJHNlbGYtPltfcm92ZXJyaWRlX2NhYjNfXS0+eyR0eXBlX3NlcXVlbmNlfTsKICAgICAgICB9CgogICAgICAgICRicmVha3BvaW50X3N0YWNrWyRkZXB0aF0gPSAkZm9yY2VkX2JyZWFrcG9pbnRfY291bnQ7CiAgICAgICAgJGNvbnRhaW5lcl90eXBlWyRkZXB0aF0gPQoKICAgICAgICAgICMgICAgICBrID0+ICYmIHx8ID8gOiAuCiAgICAgICAgICAkaXNfY29udGFpbmVyX2xhYmVsX3R5cGV7JGxhc3Rfbm9uYmxhbmtfdHlwZX0KICAgICAgICAgID8gJGxhc3Rfbm9uYmxhbmtfdG9rZW4KICAgICAgICAgIDogRU1QVFlfU1RSSU5HOwogICAgICAgICRpZGVudGlmaWVyX2NvdW50X3N0YWNrWyRkZXB0aF0gICAgICAgID0gMDsKICAgICAgICAkaW5kZXhfYmVmb3JlX2Fycm93WyRkZXB0aF0gICAgICAgICAgICA9IC0xOwogICAgICAgICRpbnRlcnJ1cHRlZF9saXN0WyRkZXB0aF0gICAgICAgICAgICAgID0gMDsKICAgICAgICAkaXRlbV9jb3VudF9zdGFja1skZGVwdGhdICAgICAgICAgICAgICA9IDA7CiAgICAgICAgJGxhc3Rfbm9uYmxhbmtfdHlwZV9zdGFja1skZGVwdGhdICAgICAgPSAkbGFzdF9ub25ibGFua190eXBlOwogICAgICAgICRvcGVuaW5nX3N0cnVjdHVyZV9pbmRleF9zdGFja1skZGVwdGhdID0gJGk7CgogICAgICAgICRicmVha3BvaW50X3VuZG9fc3RhY2tbJGRlcHRoXSAgICAgICA9ICRmb3JjZWRfYnJlYWtwb2ludF91bmRvX2NvdW50OwogICAgICAgICRjb21tYV9pbmRleFskZGVwdGhdICAgICAgICAgICAgICAgICA9IHVuZGVmOwogICAgICAgICRsYXN0X2NvbW1hX2luZGV4WyRkZXB0aF0gICAgICAgICAgICA9IHVuZGVmOwogICAgICAgICRsYXN0X2RvdF9pbmRleFskZGVwdGhdICAgICAgICAgICAgICA9IHVuZGVmOwogICAgICAgICRvbGRfYnJlYWtwb2ludF9jb3VudF9zdGFja1skZGVwdGhdICA9ICRvbGRfYnJlYWtwb2ludF9jb3VudDsKICAgICAgICAkaGFzX29sZF9sb2dpY2FsX2JyZWFrcG9pbnRzWyRkZXB0aF0gPSAwOwogICAgICAgICRyYW5kX29yX2xpc3RbJGRlcHRoXSAgICAgICAgICAgICAgICA9IFtdOwogICAgICAgICRyZm9yX3NlbWljb2xvbl9saXN0WyRkZXB0aF0gICAgICAgICA9IFtdOwogICAgICAgICRpX2VxdWFsc1skZGVwdGhdICAgICAgICAgICAgICAgICAgICA9IC0xOwoKICAgICAgICAjIGlmIGxpbmUgZW5kcyBoZXJlIHRoZW4gc2lnbmFsIGNsb3NpbmcgdG9rZW4gdG8gYnJlYWsKICAgICAgICBpZiAoICRuZXh0X25vbmJsYW5rX3R5cGUgZXEgJ2InIHx8ICRuZXh0X25vbmJsYW5rX3R5cGUgZXEgJyMnICkgewogICAgICAgICAgICAkc2VsZi0+c2V0X2Nsb3NpbmdfYnJlYWtwb2ludCgkaSk7CiAgICAgICAgfQoKICAgICAgICAjIE5vdCBhbGwgbGlzdHMgb2YgdmFsdWVzIHNob3VsZCBiZSB2ZXJ0aWNhbGx5IGFsaWduZWQuLgogICAgICAgICRkb250X2FsaWduWyRkZXB0aF0gPQoKICAgICAgICAgICMgY29kZSBCTE9DS1MgYXJlIGhhbmRsZWQgYXQgYSBoaWdoZXIgbGV2ZWwKICAgICAgICAgICRibG9ja190eXBlCgogICAgICAgICAgIyBjZXJ0YWluIHBhcmVuIGxpc3RzCiAgICAgICAgICB8fCAoICR0eXBlIGVxICcoJyApICYmICgKCiAgICAgICAgICAgICMgaXQgZG9lcyBub3QgdXN1YWxseSBsb29rIGdvb2QgdG8gYWxpZ24gYSBsaXN0IG9mCiAgICAgICAgICAgICMgaWRlbnRpZmllcnMgaW4gYSBwYXJhbWV0ZXIgbGlzdCwgYXMgaW46CiAgICAgICAgICAgICMgICAgbXkoJHZhcjEsICR2YXIyLCAuLi4pCiAgICAgICAgICAgICMgKFRoaXMgdGVzdCBzaG91bGQgcHJvYmFibHkgYmUgcmVmaW5lZCwgZm9yIG5vdyBJJ20ganVzdAogICAgICAgICAgICAjIHRlc3RpbmcgZm9yIGFueSBrZXl3b3JkKQogICAgICAgICAgICAoICRsYXN0X25vbmJsYW5rX3R5cGUgZXEgJ2snICkKCiAgICAgICAgICAgICMgYSB0cmFpbGluZyAnKCcgdXN1YWxseSBpbmRpY2F0ZXMgYSBub24tbGlzdAogICAgICAgICAgICB8fCAoICRuZXh0X25vbmJsYW5rX3R5cGUgZXEgJygnICkKICAgICAgICAgICk7CiAgICAgICAgJGhhc19icm9rZW5fc3VibGlzdFskZGVwdGhdID0gMDsKICAgICAgICAkd2FudF9jb21tYV9icmVha1skZGVwdGhdICAgPSAwOwoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgRU5EIGluaXRpYWxpemUgZGVwdGggYXJyYXlzCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgIyBwYXRjaCB0byBvdXRkZW50IG9wZW5pbmcgYnJhY2Ugb2YgbG9uZyBpZi9mb3IvLi4KICAgICAgICAjIHN0YXRlbWVudHMgKGxpa2UgdGhpcyBvbmUpLiAgU2VlIHNpbWlsYXIgY29kaW5nIGluCiAgICAgICAgIyBzZXRfY29udGludWF0aW9uIGJyZWFrcy4gIFdlIGhhdmUgYWxzbyBjYXRjaCBpdCBoZXJlIGZvcgogICAgICAgICMgc2hvcnQgbGluZSBmcmFnbWVudHMgd2hpY2ggb3RoZXJ3aXNlIHdpbGwgbm90IGdvIHRocm91Z2gKICAgICAgICAjIGJyZWFrX2xvbmdfbGluZXMuCiAgICAgICAgaWYgKAogICAgICAgICAgICAkYmxvY2tfdHlwZQoKICAgICAgICAgICAgIyBpZiB3ZSBoYXZlIHRoZSAnKScgYnV0IG5vdCBpdHMgJygnIGluIHRoaXMgYmF0Y2guLgogICAgICAgICAgICAmJiAoICRsYXN0X25vbmJsYW5rX3Rva2VuIGVxICcpJyApCiAgICAgICAgICAgICYmICFkZWZpbmVkKCAkbWF0ZV9pbmRleF90b19nb1skaV9sYXN0X25vbmJsYW5rX3Rva2VuXSApCgogICAgICAgICAgICAjIGFuZCB1c2VyIHdhbnRzIGJyYWNlIHRvIGxlZnQKICAgICAgICAgICAgJiYgISRyT3B0c19vcGVuaW5nX2JyYWNlX2Fsd2F5c19vbl9yaWdodAoKICAgICAgICAgICAgJiYgKCAkdHlwZSBlcSAneycgKSAgICAgIyBzaG91bGQgYmUgdHJ1ZQogICAgICAgICAgICAmJiAoICR0b2tlbiBlcSAneycgKSAgICAjIHNob3VsZCBiZSB0cnVlCiAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkc2VsZi0+c2V0X2ZvcmNlZF9icmVha3BvaW50KCAkaSAtIDEgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBicmVha19saXN0c19pbmNyZWFzaW5nX2RlcHRoCgogICAgc3ViIGJyZWFrX2xpc3RzX2RlY3JlYXNpbmdfZGVwdGggewoKICAgICAgICBteSAoICRzZWxmLCAkaSwgJHJib25kX3N0cmVuZ3RoX2JpYXMgKSA9IEBfOwoKICAgICAgICAjIEdpdmVuOgogICAgICAgICMgICRpID0gaW5kZXggb2YgdGhpcyB0b2tlbiBpbiB0aGUgX3RvX2dvIG91dHB1dCBiYXRjaCBhcnJheQogICAgICAgICMgICRyYm9uZF9zdHJlbmd0aF9iaWFzID0gbGlzdCBvZiBib25kIHN0cmVuZ3RocyB0byBiZSB1cGRhdGVkCgogICAgICAgICMgV2UgaGF2ZSBhcnJpdmVkIGF0IGEgY2xvc2luZyBjb250YWluZXIgdG9rZW4gaW4gc3ViIGJyZWFrX2xpc3RzOgogICAgICAgICMgdGhlIHRva2VuIGF0IGluZGV4ICRpIGlzIG9uZSBvZiB0aGVzZTogJyknLCd9JywgJ10nCiAgICAgICAgIyBBIG51bWJlciBvZiBpbXBvcnRhbnQgYnJlYWtwb2ludHMgZm9yIHRoaXMgY29udGFpbmVyIGNhbiBub3cgYmUgc2V0CiAgICAgICAgIyBiYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gdGhhdCB3ZSBoYXZlIGNvbGxlY3RlZC4gVGhpcyBpbmNsdWRlczoKICAgICAgICAjIC0gYnJlYWtzIGF0IGNvbW1hcyB0byBmb3JtYXQgdGFibGVzCiAgICAgICAgIyAtIGJyZWFrcyBhdCBjZXJ0YWluIGxvZ2ljYWwgb3BlcmF0b3JzIGFuZCBvdGhlciBnb29kIGJyZWFrcG9pbnRzCiAgICAgICAgIyAtIGJyZWFrcyBhdCBvcGVuaW5nIGFuZCBjbG9zaW5nIGNvbnRhaW5lcnMgaWYgbmVlZGVkIGJ5IHNlbGVjdGVkCiAgICAgICAgIyAgIGZvcm1hdHRpbmcgc3R5bGVzCiAgICAgICAgIyBUaGVzZSBicmVha3MgYXJlIG1hZGUgYnkgY2FsbGluZyBzdWIgJ3NldF9mb3JjZWRfYnJlYWtwb2ludCcKCiAgICAgICAgIyBOb3RlIHRoYXQgJHJib25kX3N0cmVuZ3RoX2JpYXMgaXMgcGFzc2VkIHRvIHN1YgogICAgICAgICMgc2V0X2NvbW1hX2JyZWFrcG9pbnRzLCBidXQgaXQgd2lsbCBub3QgYmUgY2hhbmdlZC4gIEl0IG9ubHkgZ2V0cwogICAgICAgICMgY2hhbmdlZCBieSBsYXRlciBjYWxscyBmb3IgaW5jb21wbGV0ZSBsaXN0cy4KCiAgICAgICAgJHNlbGYtPmNoZWNrX2Zvcl9uZXdfbWluaW11bV9kZXB0aCggJGRlcHRoLCAkcGFyZW50X3NlcW5vX3RvX2dvWyRpXSApCiAgICAgICAgICBpZiAoICRkZXB0aCA8ICRtaW5pbXVtX2RlcHRoICk7CgogICAgICAgICMgZm9yY2UgYWxsIG91dGVyIGxvZ2ljYWwgY29udGFpbmVycyB0byBicmVhayBhZnRlciB3ZSBzZWUgb24KICAgICAgICAjIG9sZCBicmVha3BvaW50CiAgICAgICAgJGhhc19vbGRfbG9naWNhbF9icmVha3BvaW50c1skZGVwdGhdIHx8PQogICAgICAgICAgJGhhc19vbGRfbG9naWNhbF9icmVha3BvaW50c1skY3VycmVudF9kZXB0aF07CgogICAgICAgICMgUGF0Y2ggdG8gYnJlYWsgYmV0d2VlbiAnKSB7JyBpZiB0aGUgcGFyZW4gbGlzdCBpcyBicm9rZW4uCiAgICAgICAgIyBUaGVyZSBpcyBzaW1pbGFyIGxvZ2ljIGluIGJyZWFrX2xvbmdfbGluZXMgZm9yCiAgICAgICAgIyBub24tYnJva2VuIGxpc3RzLgogICAgICAgIGlmICggICAkdG9rZW4gZXEgJyknCiAgICAgICAgICAgICYmICRuZXh0X25vbmJsYW5rX2Jsb2NrX3R5cGUKICAgICAgICAgICAgJiYgJGludGVycnVwdGVkX2xpc3RbJGN1cnJlbnRfZGVwdGhdCiAgICAgICAgICAgICYmICRuZXh0X25vbmJsYW5rX3R5cGUgZXEgJ3snCiAgICAgICAgICAgICYmICEkck9wdHNfb3BlbmluZ19icmFjZV9hbHdheXNfb25fcmlnaHQgKQogICAgICAgIHsKICAgICAgICAgICAgJHNlbGYtPnNldF9mb3JjZWRfYnJlYWtwb2ludCgkaSk7CiAgICAgICAgfQoKI3ByaW50ICJMSVNUWSBzZWVzOiBpPSRpIHR5cGU9JHR5cGUgIHRvaz0kdG9rZW4gIGJsb2NrPSRibG9ja190eXBlIGRlcHRoPSRkZXB0aCBuZXh0PSRuZXh0X25vbmJsYW5rX3R5cGUgbmV4dF9ibG9jaz0kbmV4dF9ub25ibGFua19ibG9ja190eXBlIGludGVyPSRpbnRlcnJ1cHRlZF9saXN0WyRjdXJyZW50X2RlcHRoXVxuIjsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBTZXQgYnJlYWtzIGF0IGNvbW1hcyB0byBkaXNwbGF5IGEgdGFibGUgb2YgdmFsdWVzIGlmIGFwcHJvcHJpYXRlCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgbXkgKCAkYnBfY291bnQsICRkb19ub3RfYnJlYWtfYXBhcnQgKSA9ICggMCwgMCApOwogICAgICAgIGlmICggJGl0ZW1fY291bnRfc3RhY2tbJGN1cnJlbnRfZGVwdGhdICkgewogICAgICAgICAgICAoICRicF9jb3VudCwgJGRvX25vdF9icmVha19hcGFydCApID0KICAgICAgICAgICAgICAkc2VsZi0+c2V0X2NvbW1hX2JyZWFrcG9pbnRzKCAkaSwgJGN1cnJlbnRfZGVwdGgsCiAgICAgICAgICAgICAgICAkcmJvbmRfc3RyZW5ndGhfYmlhcyApOwogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBOb3cgc2V0IGZsYWdzIG5lZWRlZCB0byBkZWNpZGUgaWYgd2Ugc2hvdWxkIGJyZWFrIG9wZW4gdGhlCiAgICAgICAgIyBjb250YWluZXIgLi4uIFRoaXMgaXMgYSBsb25nIHJhbWJsaW5nIHNlY3Rpb24gd2hpY2ggaGFzCiAgICAgICAgIyBncm93biBvdmVyIHRpbWUgdG8gaGFuZGxlIGFsbCBzaXR1YXRpb25zLgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIG15ICRpX29wZW5pbmcgPSAkb3BlbmluZ19zdHJ1Y3R1cmVfaW5kZXhfc3RhY2tbJGN1cnJlbnRfZGVwdGhdOwogICAgICAgIG15ICRzYXdfb3BlbmluZ19zdHJ1Y3R1cmUgPSAoICRpX29wZW5pbmcgPj0gMCApOwogICAgICAgIG15ICRscF9vYmplY3Q7CiAgICAgICAgaWYgKCAkck9wdHNfbGluZV91cF9wYXJlbnRoZXNlcyAmJiAkc2F3X29wZW5pbmdfc3RydWN0dXJlICkgewogICAgICAgICAgICAkbHBfb2JqZWN0ID0gJHNlbGYtPltfcmxwX29iamVjdF9ieV9zZXFub19dCiAgICAgICAgICAgICAgLT57ICR0eXBlX3NlcXVlbmNlX3RvX2dvWyRpX29wZW5pbmddIH07CiAgICAgICAgfQoKICAgICAgICAjIHRoaXMgdGVybSBpcyBsb25nIGlmIHdlIGhhZCB0byBicmVhayBhdCBpbnRlcmlvciBjb21tYXMuLgogICAgICAgIG15ICRpc19sb25nX3Rlcm0gPSAkYnBfY291bnQgPiAwOwoKICAgICAgICAjIElmIHRoaXMgaXMgYSBzaG9ydCBjb250YWluZXIgd2l0aCBvbmUgb3IgbW9yZSBjb21tYSBhcnJvd3MsCiAgICAgICAgIyB0aGVuIHdlIHdpbGwgbWFyayBpdCBhcyBhIGxvbmcgdGVybSB0byBvcGVuIGl0IGlmIHJlcXVlc3RlZC4KICAgICAgICAjICRyT3B0c19jb21tYV9hcnJvd19icmVha3BvaW50cyA9CiAgICAgICAgIyAgICAwIC0gb3BlbiBvbmx5IGlmIGNvbW1hIHByZWNlZGVzIGNsb3NpbmcgYnJhY2UKICAgICAgICAjICAgIDEgLSBzdGFibGU6IGV4Y2VwdCBmb3Igb25lIGxpbmUgYmxvY2tzCiAgICAgICAgIyAgICAyIC0gdHJ5IHRvIGZvcm0gMSBsaW5lIGJsb2NrcwogICAgICAgICMgICAgMyAtIGlnbm9yZSA9PgogICAgICAgICMgICAgNCAtIGFsd2F5cyBvcGVuIHVwIGlmIHZ0PTAKICAgICAgICAjICAgIDUgLSBzdGFibGU6IGV2ZW4gZm9yIG9uZSBsaW5lIGJsb2NrcyBpZiB2dD0wCgogICAgICAgIG15ICRjYWJfZmxhZyA9ICRyT3B0c19jb21tYV9hcnJvd19icmVha3BvaW50czsKCiAgICAgICAgIyByZXBsYWNlIC1jYWI9MyBpZiBvdmVycmlkZW4KICAgICAgICBpZiAoICRjYWJfZmxhZyA9PSAzICYmICR0eXBlX3NlcXVlbmNlICkgewogICAgICAgICAgICBteSAkdGVzdF9jYWIgPSAkc2VsZi0+W19yb3ZlcnJpZGVfY2FiM19dLT57JHR5cGVfc2VxdWVuY2V9OwogICAgICAgICAgICBpZiAoIGRlZmluZWQoJHRlc3RfY2FiKSApIHsgJGNhYl9mbGFnID0gJHRlc3RfY2FiIH0KICAgICAgICB9CgogICAgICAgICMgUEFUQ0g6IE1vZGlmeSB0aGUgLWNhYiBmbGFnIGlmIHdlIGFyZSBub3QgcHJvY2Vzc2luZyBhIGxpc3Q6CiAgICAgICAgIyBXZSBvbmx5IHdhbnQgdGhlIC1jYWIgZmxhZyB0byBhcHBseSB0byBsaXN0IGNvbnRhaW5lcnMsIHNvCiAgICAgICAgIyBmb3Igbm9uLWxpc3RzIHdlIHVzZSB0aGUgZGVmYXVsdCBhbmQgc3RhYmxlIC1jYWI9NSB2YWx1ZS4KICAgICAgICAjIEZpeGVzIGNhc2UgYjkzOWEuCiAgICAgICAgaWYgKCAkdHlwZV9zZXF1ZW5jZSAmJiAhJHNlbGYtPltfcmlzX2xpc3RfYnlfc2Vxbm9fXS0+eyR0eXBlX3NlcXVlbmNlfSApCiAgICAgICAgewogICAgICAgICAgICAkY2FiX2ZsYWcgPSA1OwogICAgICAgIH0KCiAgICAgICAgIyBJZ25vcmUgb2xkIGJyZWFrcG9pbnRzIHdoZW4gdW5kZXIgc3RyZXNzLgogICAgICAgICMgRml4ZXMgYjEyMDMgYjEyMDQgYXMgd2VsbCBhcyBiMTE5Ny1iMTIwMC4KICAgICAgICAjIEJ1dCBub3QgaWYgLWxwOiBmaXhlcyBiMTI2NCwgYjEyNjUuICBOT1RFOiByZWNoZWNrZWQgd2l0aAogICAgICAgICMgYjEyNjQgdG8gc2VlIGlmIHRoaXMgY2hlY2sgaXMgc3RpbGwgcmVxdWlyZWQgYXQgYWxsLCBhbmQKICAgICAgICAjIHRoZXNlIHN0aWxsIHJlcXVpcmUgYSBjaGVjaywgYnV0IGF0IGhpZ2hlciBsZXZlbCBiZXRhKzMKICAgICAgICAjIGluc3RlYWQgb2YgYmV0YTogIGIxMTkzIGI3ODAKICAgICAgICBpZiAoICAgJHNhd19vcGVuaW5nX3N0cnVjdHVyZQogICAgICAgICAgICAmJiAhJGxwX29iamVjdAogICAgICAgICAgICAmJiAkbGV2ZWxzX3RvX2dvWyRpX29wZW5pbmddID49ICRoaWdoX3N0cmVzc19sZXZlbCApCiAgICAgICAgewogICAgICAgICAgICAkY2FiX2ZsYWcgPSAyOwoKICAgICAgICAgICAgIyBEbyBub3QgYnJlYWsgaGFzaCBicmFjZXMgdW5kZXIgc3RyZXNzIChmaXhlcyBiMTIzOCkKICAgICAgICAgICAgJGRvX25vdF9icmVha19hcGFydCB8fD0gJHR5cGVzX3RvX2dvWyRpX29wZW5pbmddIGVxICdMJzsKCiAgICAgICAgICAgICMgVGhpcyBvcHRpb24gZml4ZXMgYjEyMzUsIGIxMjM3LCBiMTI0MCB3aXRoIG9sZCBhbmQgbmV3CiAgICAgICAgICAgICMgLWxwLCBidXQgZm9ybWF0dGluZyBpcyBuaWNlciB3aXRoIG5leHQgb3B0aW9uLgogICAgICAgICAgICAjIyAkaXNfbG9uZ190ZXJtIHx8PQogICAgICAgICAgICAjIyAgJGxldmVsc190b19nb1skaV9vcGVuaW5nXSA+ICRzdHJlc3NfbGV2ZWxfYmV0YSArIDE7CgogICAgICAgICAgICAjIFRoaXMgb3B0aW9uIGZpeGVzIGIxMjQwIGJ1dCBub3QgYjEyMzUsIGIxMjM3IHdpdGggbmV3IC1scCwKICAgICAgICAgICAgIyBidXQgdGhpcyBnaXZlcyBiZXR0ZXIgZm9ybWF0dGluZyB0aGFuIHRoZSBwcmV2aW91cyBvcHRpb24uCiAgICAgICAgICAgICMgVE9ETzogc2VlIGlmIHN0cmVzc19sZXZlbF9hbHBoYSBzaG91bGQgYWxzbyBiZSBjb25zaWRlcmVkCiAgICAgICAgICAgICRkb19ub3RfYnJlYWtfYXBhcnQgfHw9CiAgICAgICAgICAgICAgJGxldmVsc190b19nb1skaV9vcGVuaW5nXSA+ICRzdHJlc3NfbGV2ZWxfYmV0YTsKICAgICAgICB9CgogICAgICAgIGlmICggICEkaXNfbG9uZ190ZXJtCiAgICAgICAgICAgICYmICRzYXdfb3BlbmluZ19zdHJ1Y3R1cmUKICAgICAgICAgICAgJiYgJGlzX29wZW5pbmdfdG9rZW57ICR0b2tlbnNfdG9fZ29bJGlfb3BlbmluZ10gfQogICAgICAgICAgICAmJiAkaW5kZXhfYmVmb3JlX2Fycm93WyAkZGVwdGggKyAxIF0gPiAwCiAgICAgICAgICAgICYmICEkb3BlbmluZ192ZXJ0aWNhbF90aWdodG5lc3N7ICR0b2tlbnNfdG9fZ29bJGlfb3BlbmluZ10gfSApCiAgICAgICAgewogICAgICAgICAgICAkaXNfbG9uZ190ZXJtID0KICAgICAgICAgICAgICAgICAkY2FiX2ZsYWcgPT0gNAogICAgICAgICAgICAgIHx8ICRjYWJfZmxhZyA9PSAwICYmICRsYXN0X25vbmJsYW5rX3R5cGUgZXEgJywnCiAgICAgICAgICAgICAgfHwgJGNhYl9mbGFnID09IDUgJiYgJG9sZF9icmVha3BvaW50X3RvX2dvWyRpX29wZW5pbmddOwogICAgICAgIH0KCiAgICAgICAgIyBtYXJrIHRlcm0gYXMgbG9uZyBpZiB0aGUgbGVuZ3RoIGJldHdlZW4gb3BlbmluZyBhbmQgY2xvc2luZwogICAgICAgICMgcGFyZW5zIGV4Y2VlZHMgYWxsb3dlZCBsaW5lIGxlbmd0aAogICAgICAgIGlmICggISRpc19sb25nX3Rlcm0gJiYgJHNhd19vcGVuaW5nX3N0cnVjdHVyZSApIHsKCiAgICAgICAgICAgIG15ICRpX29wZW5pbmdfbWludXMgPSAkc2VsZi0+ZmluZF90b2tlbl9zdGFydGluZ19saXN0KCRpX29wZW5pbmcpOwoKICAgICAgICAgICAgbXkgJGV4Y2VzcyA9ICRzZWxmLT5leGNlc3NfbGluZV9sZW5ndGgoICRpX29wZW5pbmdfbWludXMsICRpICk7CgogICAgICAgICAgICAjIFVzZSBzdGFuZGFyZCBzcGFjZXMgZm9yIGluZGVudGF0aW9uIG9mIGxpc3RzIGluIC1scCBtb2RlCiAgICAgICAgICAgICMgaWYgaXQgZ2l2ZXMgYSBsb25nZXIgbGluZSBsZW5ndGguIFRoaXMgaGVscHMgdG8gYXZvaWQgYW4KICAgICAgICAgICAgIyBpbnN0YWJpbGl0eSBkdWUgdG8gZm9ybWluZyBhbmQgYnJlYWtpbmcgb25lLWxpbmUgYmxvY2tzLgogICAgICAgICAgICAjIFRoaXMgZml4ZXMgY2FzZSBiMTMxNC4KICAgICAgICAgICAgbXkgJGluZGVudGF0aW9uID0gJGxlYWRpbmdfc3BhY2VzX3RvX2dvWyRpX29wZW5pbmdfbWludXNdOwogICAgICAgICAgICBpZiAoIHJlZigkaW5kZW50YXRpb24pCiAgICAgICAgICAgICAgICAmJiAkc2VsZi0+W19yaXNfYnJva2VuX2NvbnRhaW5lcl9dLT57JHR5cGVfc2VxdWVuY2V9ICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbXkgJGxwX3NwYWNlcyAgPSAkaW5kZW50YXRpb24tPmdldF9zcGFjZXMoKTsKICAgICAgICAgICAgICAgIG15ICRzdGRfc3BhY2VzID0gJGluZGVudGF0aW9uLT5nZXRfc3RhbmRhcmRfc3BhY2VzKCk7CiAgICAgICAgICAgICAgICBteSAkZGlmZiAgICAgICA9ICRzdGRfc3BhY2VzIC0gJGxwX3NwYWNlczsKICAgICAgICAgICAgICAgIGlmICggJGRpZmYgPiAwICkgeyAkZXhjZXNzICs9ICRkaWZmIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJHRvbCA9ICRsZW5ndGhfdG9sOwoKICAgICAgICAgICAgIyBib29zdCB0b2wgZm9yIGFuIC1scCBjb250YWluZXIKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgJGxwX3RvbF9ib29zdAogICAgICAgICAgICAgICAgJiYgJGxwX29iamVjdAogICAgICAgICAgICAgICAgJiYgKCAkck9wdHNfZXh0ZW5kZWRfY29udGludWF0aW9uX2luZGVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgfHwgISRzZWxmLT5bX3Jpc19saXN0X2J5X3NlcW5vX10tPnskdHlwZV9zZXF1ZW5jZX0gKQogICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJHRvbCArPSAkbHBfdG9sX2Jvb3N0OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFBhdGNoIHRvIGF2b2lkIGJsaW5raW5nIHdpdGggLWJieGk9MiBhbmQgLWNhYj0yCiAgICAgICAgICAgICMgaW4gd2hpY2ggdmFyaWF0aW9ucyBpbiAtY2kgY2F1c2UgdW5zdGFibGUgZm9ybWF0dGluZwogICAgICAgICAgICAjIGluIGVkZ2UgY2FzZXMuIFdlIGp1c3QgYWx3YXlzIGFkZCBvbmUgY2kgbGV2ZWwgc28gdGhhdAogICAgICAgICAgICAjIHRoZSBmb3JtYXR0aW5nIGlzIGluZGVwZW5kZW50IG9mIHRoZSAtQkJYIHJlc3VsdHMuCiAgICAgICAgICAgICMgRml4ZXMgY2FzZXMgYjExMzcgYjExNDkgYjExNTAgYjExNTUgYjExNTggYjExNTkgYjExNjAKICAgICAgICAgICAgIyBiMTE2MSBiMTE2NiBiMTE2NyBiMTE2OAogICAgICAgICAgICBpZiAoICAhJGNpX2xldmVsc190b19nb1skaV9vcGVuaW5nXQogICAgICAgICAgICAgICAgJiYgJHNlbGYtPltfcmJyZWFrX2JlZm9yZV9jb250YWluZXJfYnlfc2Vxbm9fXS0+eyR0eXBlX3NlcXVlbmNlfQogICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJHRvbCArPSAkck9wdHNfY29udGludWF0aW9uX2luZGVudGF0aW9uOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkaXNfbG9uZ190ZXJtID0gJGV4Y2VzcyArICR0b2wgPiAwOwoKICAgICAgICB9CgogICAgICAgICMgV2UndmUgc2V0IGJyZWFrcyBhZnRlciBhbGwgY29tbWEtYXJyb3dzLiAgTm93IHdlIGhhdmUgdG8KICAgICAgICAjIHVuZG8gdGhlbSBpZiB0aGlzIGNhbiBiZSBhIG9uZS1saW5lIGJsb2NrCiAgICAgICAgIyAodGhlIG9ubHkgYnJlYWtwb2ludHMgc2V0IHdpbGwgYmUgZHVlIHRvIGNvbW1hLWFycm93cykKCiAgICAgICAgaWYgKAoKICAgICAgICAgICAgIyB1c2VyIGRvZXNuJ3QgcmVxdWlyZSBicmVha2luZyBhZnRlciBhbGwgY29tbWEtYXJyb3dzCiAgICAgICAgICAgICggJGNhYl9mbGFnICE9IDAgKSAmJiAoICRjYWJfZmxhZyAhPSA0ICkKCiAgICAgICAgICAgICMgYW5kIGlmIHRoZSBvcGVuaW5nIHN0cnVjdHVyZSBpcyBpbiB0aGlzIGJhdGNoCiAgICAgICAgICAgICYmICRzYXdfb3BlbmluZ19zdHJ1Y3R1cmUKCiAgICAgICAgICAgICMgYW5kIGVpdGhlciBvbiB0aGUgc2FtZSBvbGQgbGluZQogICAgICAgICAgICAmJiAoCiAgICAgICAgICAgICAgICAkb2xkX2JyZWFrcG9pbnRfY291bnRfc3RhY2tbJGN1cnJlbnRfZGVwdGhdID09CiAgICAgICAgICAgICAgICAkbGFzdF9vbGRfYnJlYWtwb2ludF9jb3VudAoKICAgICAgICAgICAgICAgICMgb3IgdXNlciB3YW50cyB0byBmb3JtIGxvbmcgYmxvY2tzIHdpdGggYXJyb3dzCiAgICAgICAgICAgICAgICAjIGNoZWNrIG9uIF9yYnJlYWtfY29udGFpbmVyXyBhZGRlZCBmb3IgYjE1MDAKICAgICAgICAgICAgICAgIHx8ICggJGNhYl9mbGFnID09IDIKICAgICAgICAgICAgICAgICAgICAmJiAhJHNlbGYtPltfcmJyZWFrX2NvbnRhaW5lcl9dLT57JHR5cGVfc2VxdWVuY2V9ICkKICAgICAgICAgICAgKQoKICAgICAgICAgICAgIyBhbmQgd2UgbWFkZSBicmVha3BvaW50cyBiZXR3ZWVuIHRoZSBvcGVuaW5nIGFuZCBjbG9zaW5nCiAgICAgICAgICAgICYmICggJGJyZWFrcG9pbnRfdW5kb19zdGFja1skY3VycmVudF9kZXB0aF0gPAogICAgICAgICAgICAgICAgJGZvcmNlZF9icmVha3BvaW50X3VuZG9fY291bnQgKQoKICAgICAgICAgICAgIyBhbmQgdGhpcyBibG9jayBpcyBzaG9ydCBlbm91Z2ggdG8gZml0IG9uIG9uZSBsaW5lCiAgICAgICAgICAgICMgTm90ZTogdXNlIDwgYmVjYXVzZSBuZWVkIDEgbW9yZSBzcGFjZSBmb3IgcG9zc2libGUgY29tbWEKICAgICAgICAgICAgJiYgISRpc19sb25nX3Rlcm0KCiAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkc2VsZi0+dW5kb19mb3JjZWRfYnJlYWtwb2ludF9zdGFjaygKICAgICAgICAgICAgICAgICRicmVha3BvaW50X3VuZG9fc3RhY2tbJGN1cnJlbnRfZGVwdGhdICk7CiAgICAgICAgfQoKICAgICAgICAjIG5vdyBzZWUgaWYgd2UgaGF2ZSBhbnkgY29tbWEgYnJlYWtwb2ludHMgbGVmdAogICAgICAgIG15ICRoYXNfY29tbWFfYnJlYWtwb2ludHMgPQogICAgICAgICAgKCAkYnJlYWtwb2ludF9zdGFja1skY3VycmVudF9kZXB0aF0gIT0gJGZvcmNlZF9icmVha3BvaW50X2NvdW50ICk7CgogICAgICAgICMgdXBkYXRlIGJyb2tlbi1zdWJsaXN0IGZsYWcgb2YgdGhlIG91dGVyIGNvbnRhaW5lcgogICAgICAgICRoYXNfYnJva2VuX3N1Ymxpc3RbJGRlcHRoXSA9CiAgICAgICAgICAgICAkaGFzX2Jyb2tlbl9zdWJsaXN0WyRkZXB0aF0KICAgICAgICAgIHx8ICRoYXNfYnJva2VuX3N1Ymxpc3RbJGN1cnJlbnRfZGVwdGhdCiAgICAgICAgICB8fCAkaXNfbG9uZ190ZXJtCiAgICAgICAgICB8fCAkaGFzX2NvbW1hX2JyZWFrcG9pbnRzOwoKICAgICAgICAjIEhhdmluZyBjb21lIHRvIHRoZSBjbG9zaW5nICcpJywgJ30nLCBvciAnXScsIG5vdyB3ZSBoYXZlIHRvIGRlY2lkZQogICAgICAgICMgaWYgd2Ugc2hvdWxkICdvcGVuIHVwJyB0aGUgc3RydWN0dXJlIGJ5IHBsYWNpbmcgYnJlYWtzIGF0IHRoZQogICAgICAgICMgb3BlbmluZyBhbmQgY2xvc2luZyBjb250YWluZXJzLiAgVGhpcyBpcyBhIHRyaWNreSBkZWNpc2lvbi4gIEhlcmUKICAgICAgICAjIGFyZSBzb21lIG9mIHRoZSBiYXNpYyBjb25zaWRlcmF0aW9uczoKICAgICAgICAjCiAgICAgICAgIyAtSWYgdGhpcyBpcyBhIEJMT0NLIGNvbnRhaW5lciwgdGhlbiBhbnkgYnJlYWtwb2ludHMgd2lsbCBoYXZlCiAgICAgICAgIyBhbHJlYWR5IGJlZW4gc2V0IChhbmQgYWNjb3JkaW5nIHRvIHVzZXIgcHJlZmVyZW5jZXMpLCBzbyB3ZSBuZWVkIGRvCiAgICAgICAgIyBub3RoaW5nIGhlcmUuCiAgICAgICAgIwogICAgICAgICMgLUlmIHdlIGhhdmUgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBmb3Igd2hpY2ggd2UgY2FuIGFsaWduIHRoZSBsaXN0CiAgICAgICAgIyBpdGVtcywgdGhlbiB3ZSBuZWVkIHRvIGRvIHNvIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSB2ZXJ0aWNhbCBhbGlnbmVyCiAgICAgICAgIyBjYW5ub3QgY3VycmVudGx5IGRvIHRoZSBhbGlnbm1lbnQuCiAgICAgICAgIwogICAgICAgICMgLUlmIHRoaXMgY29udGFpbmVyIGRvZXMgaXRzZWxmIGNvbnRhaW4gYSBjb250YWluZXIgd2hpY2ggaGFzIGJlZW4KICAgICAgICAjIGJyb2tlbiBvcGVuLCB0aGVuIGl0IHNob3VsZCBiZSBicm9rZW4gb3BlbiB0byBwcm9wZXJseSBzaG93IHRoZQogICAgICAgICMgc3RydWN0dXJlLgogICAgICAgICMKICAgICAgICAjIC1JZiB0aGVyZSBpcyBub3RoaW5nIHRvIGFsaWduLCBhbmQgbm8gb3RoZXIgcmVhc29uIHRvIGJyZWFrIGFwYXJ0LAogICAgICAgICMgdGhlbiBkbyBub3QgZG8gaXQuCiAgICAgICAgIwogICAgICAgICMgV2Ugd2lsbCBub3QgYnJlYWsgb3BlbiB0aGUgcGFyZW5zIG9mIGEgbG9uZyBidXQgJ3NpbXBsZScgbG9naWNhbAogICAgICAgICMgZXhwcmVzc2lvbi4gIEZvciBleGFtcGxlOgogICAgICAgICMKICAgICAgICAjIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBsb2dpY2FsIGV4cHJlc3Npb24gYW5kIGl0cyBmb3JtYXR0aW5nOgogICAgICAgICMKICAgICAgICAjICAgICBpZiAoICRiaWd3YXN0ZW9mc3BhY2UxICYmICRiaWd3YXN0ZW9mc3BhY2UyCiAgICAgICAgIyAgICAgICAgIHx8ICRiaWd3YXN0ZW9mc3BhY2UzICYmICRiaWd3YXN0ZW9mc3BhY2U0ICkKICAgICAgICAjCiAgICAgICAgIyBNb3N0IHBlb3BsZSB3b3VsZCBwcmVmZXIgdGhpcyB0aGFuIHRoZSAnc3BhY2V5JyB2ZXJzaW9uOgogICAgICAgICMKICAgICAgICAjICAgICBpZiAoCiAgICAgICAgIyAgICAgICAgICRiaWd3YXN0ZW9mc3BhY2UxICYmICRiaWd3YXN0ZW9mc3BhY2UyCiAgICAgICAgIyAgICAgICAgIHx8ICRiaWd3YXN0ZW9mc3BhY2UzICYmICRiaWd3YXN0ZW9mc3BhY2U0CiAgICAgICAgIyAgICAgKQogICAgICAgICMKICAgICAgICAjIFRvIGlsbHVzdHJhdGUgdGhlIHJ1bGVzIGZvciBicmVha2luZyBsb2dpY2FsIGV4cHJlc3Npb25zLCBjb25zaWRlcjoKICAgICAgICAjCiAgICAgICAgIyAgICAgICAgICAgICBGVUxMWSBERU5TRToKICAgICAgICAjICAgICAgICAgICAgIGlmICggJG9wdF9leGNsCiAgICAgICAgIyAgICAgICAgICAgICAgICAgYW5kICggZXhpc3RzICRpZHNfZXhjbF91Y3skaWRfdWN9CiAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgIG9yIGdyZXAgJGlkX3VjID1+IC8kXy8sIEBpZHNfZXhjbF91YyApKQogICAgICAgICMKICAgICAgICAjIFRoaXMgaXMgb24gdGhlIHZlcmdlIG9mIGJlaW5nIGRpZmZpY3VsdCB0byByZWFkLiAgVGhlIGN1cnJlbnQKICAgICAgICAjIGRlZmF1bHQgaXMgdG8gb3BlbiBpdCB1cCBsaWtlIHRoaXM6CiAgICAgICAgIwogICAgICAgICMgICAgICAgICAgICAgREVGQVVMVDoKICAgICAgICAjICAgICAgICAgICAgIGlmICgKICAgICAgICAjICAgICAgICAgICAgICAgICAkb3B0X2V4Y2wKICAgICAgICAjICAgICAgICAgICAgICAgICBhbmQgKCBleGlzdHMgJGlkc19leGNsX3VjeyRpZF91Y30KICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgb3IgZ3JlcCAkaWRfdWMgPX4gLyRfLywgQGlkc19leGNsX3VjICkKICAgICAgICAjICAgICAgICAgICAgICAgKQogICAgICAgICMKICAgICAgICAjIFRoaXMgaXMgYSBjb21wcm9taXNlIHdoaWNoIHRyaWVzIHRvIGF2b2lkIGJlaW5nIHRvbyBkZW5zZSBhbmQgdG8KICAgICAgICAjIHNwYWNleS4gIEEgbW9yZSBzcGFjZWQgdmVyc2lvbiB3b3VsZCBiZToKICAgICAgICAjCiAgICAgICAgIyAgICAgICAgICAgICBTUEFDRVk6CiAgICAgICAgIyAgICAgICAgICAgICBpZiAoCiAgICAgICAgIyAgICAgICAgICAgICAgICAgJG9wdF9leGNsCiAgICAgICAgIyAgICAgICAgICAgICAgICAgYW5kICgKICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgZXhpc3RzICRpZHNfZXhjbF91Y3skaWRfdWN9CiAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgIG9yIGdyZXAgJGlkX3VjID1+IC8kXy8sIEBpZHNfZXhjbF91YwogICAgICAgICMgICAgICAgICAgICAgICAgICkKICAgICAgICAjICAgICAgICAgICAgICAgKQogICAgICAgICMKICAgICAgICAjIFNvbWUgcGVvcGxlIG1pZ2h0IHByZWZlciB0aGUgc3BhY2V5IHZlcnNpb24gLS0gYW4gb3B0aW9uIGNvdWxkIGJlCiAgICAgICAgIyBhZGRlZC4gIFRoZSBpbm5lcm1vc3QgZXhwcmVzc2lvbiBjb250YWlucyBhIGxvbmcgYmxvY2sgJyggZXhpc3RzCiAgICAgICAgIyAkaWRzXy4uLiAgJyknLgogICAgICAgICMKICAgICAgICAjIEhlcmUgaXMgaG93IHRoZSBsb2dpYyBnb2VzOiBXZSB3aWxsIGZvcmNlIGEgYnJlYWsgYXQgdGhlICdvcicgdGhhdAogICAgICAgICMgdGhlIGlubmVybW9zdCBleHByZXNzaW9uIGNvbnRhaW5zLCBidXQgd2Ugd2lsbCBub3QgYnJlYWsgYXBhcnQgaXRzCiAgICAgICAgIyBvcGVuaW5nIGFuZCBjbG9zaW5nIGNvbnRhaW5lcnMgYmVjYXVzZSAoMSkgaXQgY29udGFpbnMgbm8KICAgICAgICAjIG11bHRpLWxpbmUgc3ViLWNvbnRhaW5lcnMgaXRzZWxmLCBhbmQgKDIpIHRoZXJlIGlzIG5vIGFsaWdubWVudCB0bwogICAgICAgICMgYmUgZ2FpbmVkIGJ5IGJyZWFraW5nIGl0IG9wZW4gbGlrZSB0aGlzCiAgICAgICAgIwogICAgICAgICMgICAgICAgICAgICAgYW5kICgKICAgICAgICAjICAgICAgICAgICAgICAgICBleGlzdHMgJGlkc19leGNsX3VjeyRpZF91Y30KICAgICAgICAjICAgICAgICAgICAgICAgICBvciBncmVwICRpZF91YyA9fiAvJF8vLCBAaWRzX2V4Y2xfdWMKICAgICAgICAjICAgICAgICAgICAgICkKICAgICAgICAjCiAgICAgICAgIyAoYWx0aG91Z2ggdGhpcyBsb29rcyBwZXJmZWN0bHkgb2sgYW5kIG1pZ2h0IGJlIGdvb2QgZm9yIGxvbmcKICAgICAgICAjIGV4cHJlc3Npb25zKS4gIFRoZSBvdXRlciAnaWYnIGNvbnRhaW5lciwgdGhvdWdoLCBjb250YWlucyBhIGJyb2tlbgogICAgICAgICMgc3ViLWNvbnRhaW5lciwgc28gaXQgd2lsbCBiZSBicm9rZW4gb3BlbiB0byBhdm9pZCB0b28gbXVjaCBkZW5zaXR5LgogICAgICAgICMgQWxzbywgc2luY2UgaXQgY29udGFpbnMgbm8gJ29yJ3MsIHRoZXJlIHdpbGwgYmUgYSBmb3JjZWQgYnJlYWsgYXQKICAgICAgICAjIGl0cyAnYW5kJy4KCiAgICAgICAgIyBIYW5kbGUgdGhlIGV4cGVyaW1lbnRhbCBmbGFnIC0tYnJlYWstb3Blbi1jb21wYWN0LXBhcmVucwogICAgICAgICMgTk9URTogVGhpcyBmbGFnIGlzIG5vdCBjdXJyZW50bHkgdXNlZCBhbmQgbWF5IGV2ZW50dWFsbHkgYmUgcmVtb3ZlZC4KICAgICAgICAjIElmIHRoaXMgZmxhZyBpcyBzZXQsIHdlIHdpbGwgaW1wbGVtZW50IGl0IGJ5CiAgICAgICAgIyBwcmV0ZW5kaW5nIHdlIGRpZCBub3Qgc2VlIHRoZSBvcGVuaW5nIHN0cnVjdHVyZSwgc2luY2UgaW4gdGhhdCBjYXNlCiAgICAgICAgIyBwYXJlbnMgYWx3YXlzIGdldCBvcGVuZWQgdXAuCiAgICAgICAgaWYgKCAgICRzYXdfb3BlbmluZ19zdHJ1Y3R1cmUKICAgICAgICAgICAgJiYgJHJPcHRzX2JyZWFrX29wZW5fY29tcGFjdF9wYXJlbnMgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgVGhpcyBwYXJhbWV0ZXIgaXMgYSBvbmUtY2hhcmFjdGVyIGZsYWcsIGFzIGZvbGxvd3M6CiAgICAgICAgICAgICMgICcwJyBtYXRjaGVzIG5vIHBhcmVucyAgLT4gYnJlYWsgb3BlbiBOT1QgT0sKICAgICAgICAgICAgIyAgJzEnIG1hdGNoZXMgYWxsIHBhcmVucyAtPiBicmVhayBvcGVuIE9LCiAgICAgICAgICAgICMgIE90aGVyIHZhbHVlcyBhcmUgc2FtZSBhcyB1c2VkIGJ5IHRoZSB3ZWxkLWV4Y2x1c2lvbi1saXN0CiAgICAgICAgICAgIG15ICRmbGFnID0gJHJPcHRzX2JyZWFrX29wZW5fY29tcGFjdF9wYXJlbnM7CiAgICAgICAgICAgIGlmICggICAkZmxhZyBlcSAnKicKICAgICAgICAgICAgICAgIHx8ICRmbGFnIGVxICcxJyApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRzYXdfb3BlbmluZ19zdHJ1Y3R1cmUgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgTk9URTogJHNlcW5vIHdpbGwgYmUgZXF1YWwgdG8gY2xvc3VyZSB2YXIgJHR5cGVfc2VxdWVuY2UgaGVyZQogICAgICAgICAgICAgICAgbXkgJHNlcW5vID0gJHR5cGVfc2VxdWVuY2VfdG9fZ29bJGlfb3BlbmluZ107CiAgICAgICAgICAgICAgICAkc2F3X29wZW5pbmdfc3RydWN0dXJlID0KICAgICAgICAgICAgICAgICAgISRzZWxmLT5tYXRjaF9wYXJlbl9jb250cm9sX2ZsYWcoICRzZXFubywgJGZsYWcgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBTZXQgc29tZSBtb3JlIGZsYWdzIHRlbGxpbmcgc29tZXRoaW5nIGFib3V0IHRoaXMgY29udGFpbmVyLi4KICAgICAgICBteSAkaXNfc2ltcGxlX2xvZ2ljYWxfZXhwcmVzc2lvbjsKICAgICAgICBpZiAoICAgJGl0ZW1fY291bnRfc3RhY2tbJGN1cnJlbnRfZGVwdGhdID09IDAKICAgICAgICAgICAgJiYgJHNhd19vcGVuaW5nX3N0cnVjdHVyZQogICAgICAgICAgICAmJiAkdG9rZW5zX3RvX2dvWyRpX29wZW5pbmddIGVxICcoJwogICAgICAgICAgICAmJiAkaXNfbG9naWNhbF9jb250YWluZXJ7ICRjb250YWluZXJfdHlwZVskY3VycmVudF9kZXB0aF0gfSApCiAgICAgICAgewoKICAgICAgICAgICAgIyBUaGlzIHNlZW1zIHRvIGJlIGEgc2ltcGxlIGxvZ2ljYWwgZXhwcmVzc2lvbiB3aXRoCiAgICAgICAgICAgICMgbm8gZXhpc3RpbmcgYnJlYWtwb2ludHMuICBTZXQgYSBmbGFnIHRvIHByZXZlbnQKICAgICAgICAgICAgIyBvcGVuaW5nIGl0IHVwLgogICAgICAgICAgICBpZiAoICEkaGFzX2NvbW1hX2JyZWFrcG9pbnRzICkgewogICAgICAgICAgICAgICAgJGlzX3NpbXBsZV9sb2dpY2FsX2V4cHJlc3Npb24gPSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgVGhpcyBzZWVtcyB0byBiZSBhIHNpbXBsZSBsb2dpY2FsIGV4cHJlc3Npb24gd2l0aAogICAgICAgICAgICAjIGJyZWFrcG9pbnRzIChicm9rZW4gc3VibGlzdHMsIGZvciBleGFtcGxlKS4gIEJyZWFrCiAgICAgICAgICAgICMgYXQgYWxsICdvcidzIGFuZCAnfHwncy4KICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRzZWxmLT5zZXRfbG9naWNhbF9icmVha3BvaW50cygkY3VycmVudF9kZXB0aCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgYnJlYWsgbG9uZyB0ZXJtcyBhdCBhbnkgQy1zdHlsZSBmb3Igc2VtaWNvbG9ucyAoYzE1NCkKICAgICAgICBpZiAoICRpc19sb25nX3Rlcm0KICAgICAgICAgICAgJiYgQHsgJHJmb3Jfc2VtaWNvbG9uX2xpc3RbJGN1cnJlbnRfZGVwdGhdIH0gKQogICAgICAgIHsKICAgICAgICAgICAgJHNlbGYtPnNldF9mb3Jfc2VtaWNvbG9uX2JyZWFrcG9pbnRzKCRjdXJyZW50X2RlcHRoKTsKCiAgICAgICAgICAgICMgYW5kIG9wZW4gdXAgYSBsb25nICdmb3InIG9yICdmb3JlYWNoJyBjb250YWluZXIgdG8gYWxsb3cKICAgICAgICAgICAgIyBsZWFkaW5nIHRlcm0gYWxpZ25tZW50IHVubGVzcyAtbHAgaXMgdXNlZC4KICAgICAgICAgICAgJGhhc19jb21tYV9icmVha3BvaW50cyA9IDEgdW5sZXNzICgkbHBfb2JqZWN0KTsKICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBGSU5BTExZOiBCcmVhayBvcGVuIGNvbnRhaW5lciBhY2NvcmRpbmcgdG8gdGhlIGZsYWdzIHdoaWNoIGhhdmUKICAgICAgICAjIGJlZW4gc2V0LgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaWYgKAoKICAgICAgICAgICAgIyBicmVha3MgZm9yIGNvZGUgQkxPQ0tTIGFyZSBoYW5kbGVkIGF0IGEgaGlnaGVyIGxldmVsCiAgICAgICAgICAgICEkYmxvY2tfdHlwZQoKICAgICAgICAgICAgIyB3ZSBkbyBub3QgbmVlZCB0byBicmVhayBhdCB0aGUgdG9wIGxldmVsIG9mIGFuICdpZicKICAgICAgICAgICAgIyB0eXBlIGV4cHJlc3Npb24KICAgICAgICAgICAgJiYgISRpc19zaW1wbGVfbG9naWNhbF9leHByZXNzaW9uCgogICAgICAgICAgICAjIyBtb2RpZmljYXRpb24gdG8ga2VlcCAnOiAoJyBjb250YWluZXJzIHZlcnRpY2FsbHkgdGlnaHQ7CiAgICAgICAgICAgICMjIGJ1dCBwcm9iYWJseSBiZXR0ZXIgdG8gbGV0IHVzZXIgc2V0IC12dD0xIHRvIGF2b2lkCiAgICAgICAgICAgICMjIGluY29uc2lzdGVuY3kgd2l0aCBvdGhlciBwYXJlbiB0eXBlcwogICAgICAgICAgICAjIyAmJiAoJGNvbnRhaW5lcl90eXBlWyRjdXJyZW50X2RlcHRoXSBuZSAnOicpCgogICAgICAgICAgICAjIG90aGVyd2lzZSwgd2UgcmVxdWlyZSBvbmUgb2YgdGhlc2UgcmVhc29ucyBmb3IgYnJlYWtpbmc6CiAgICAgICAgICAgICYmICgKCiAgICAgICAgICAgICAgICAjIC0gdGhpcyB0ZXJtIGhhcyBmb3JjZWQgbGluZSBicmVha3MKICAgICAgICAgICAgICAgICRoYXNfY29tbWFfYnJlYWtwb2ludHMKCiAgICAgICAgICAgICAgICAjIC0gdGhlIG9wZW5pbmcgY29udGFpbmVyIGlzIHNlcGFyYXRlZCBmcm9tIHRoaXMgYmF0Y2gKICAgICAgICAgICAgICAgICMgICBmb3Igc29tZSByZWFzb24gKGNvbW1lbnQsIGJsYW5rIGxpbmUsIGNvZGUgYmxvY2spCiAgICAgICAgICAgICAgICAjIC0gdGhpcyBpcyBhIG5vbi1wYXJlbiBjb250YWluZXIgc3Bhbm5pbmcgbXVsdGlwbGUgbGluZXMKICAgICAgICAgICAgICAgIHx8ICEkc2F3X29wZW5pbmdfc3RydWN0dXJlCgogICAgICAgICAgICAgICAgIyAtIHRoaXMgaXMgYSBsb25nIGJsb2NrIGNvbnRhaW5lZCBpbiBhbm90aGVyIGJyZWFrYWJsZQogICAgICAgICAgICAgICAgIyAgIGNvbnRhaW5lcgogICAgICAgICAgICAgICAgfHwgJGlzX2xvbmdfdGVybSAmJiAhJHNlbGYtPmlzX2luX2Jsb2NrX2J5X2koJGlfb3BlbmluZykKICAgICAgICAgICAgKQogICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgZG8gc3BlY2lhbCAtbHAgYnJlYWtzIGF0IHRoZSBDTE9TSU5HIHRva2VuIGZvciBJTlRBQ1QKICAgICAgICAgICAgIyBibG9ja3MgKGJlY2F1c2Ugd2UgbWlnaHQgbm90IGRvIHRoZW0gaWYgdGhlIGJsb2NrIGRvZXMKICAgICAgICAgICAgIyBub3QgYnJlYWsgb3BlbikKICAgICAgICAgICAgaWYgKCRscF9vYmplY3QpIHsKICAgICAgICAgICAgICAgIG15ICRLX2JlZ2luX2xpbmUgPSAkbHBfb2JqZWN0LT5nZXRfS19iZWdpbl9saW5lKCk7CiAgICAgICAgICAgICAgICBteSAkaV9iZWdpbl9saW5lID0gJEtfYmVnaW5fbGluZSAtICRLX3RvX2dvWzBdOwogICAgICAgICAgICAgICAgJHNlbGYtPnNldF9mb3JjZWRfbHBfYnJlYWsoICRpX2JlZ2luX2xpbmUsICRpX29wZW5pbmcgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBicmVhayBhZnRlciBvcGVuaW5nIHN0cnVjdHVyZS4KICAgICAgICAgICAgIyBub3RlOiBicmVhayBiZWZvcmUgY2xvc2luZyBzdHJ1Y3R1cmUgd2lsbCBiZSBhdXRvbWF0aWMKICAgICAgICAgICAgaWYgKCAkbWluaW11bV9kZXB0aCA8PSAkY3VycmVudF9kZXB0aCApIHsKCiAgICAgICAgICAgICAgICBpZiAoICRpX29wZW5pbmcgPj0gMCApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICAgISRkb19ub3RfYnJlYWtfYXBhcnQKICAgICAgICAgICAgICAgICAgICAgICAgJiYgIWlzX3VuYnJlYWthYmxlX2NvbnRhaW5lcigkY3VycmVudF9kZXB0aCkgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPnNldF9mb3JjZWRfYnJlYWtwb2ludCgkaV9vcGVuaW5nKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgRG8gbm90IGxldCBicmFjZSB0eXBlcyBML1IgdXNlIHZlcnRpY2FsIHRpZ2h0bmVzcwogICAgICAgICAgICAgICAgICAgICAgICAjIGZsYWdzIHRvIHJlY29tYmluZSBpZiB3ZSBoYXZlIHRvIGJyZWFrIG9uIGxlbmd0aAogICAgICAgICAgICAgICAgICAgICAgICAjIGJlY2F1c2UgaW5zdGFiaWxpdHkgaXMgcG9zc2libGUgaWYgYm90aCB2dCBhbmQgdnRjCiAgICAgICAgICAgICAgICAgICAgICAgICMgZmxhZ3MgYXJlIHNldCAuLi4gc2VlIGlzc3VlIGIxNDQ0LgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICAgJGlzX2xvbmdfdGVybQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHR5cGVzX3RvX2dvWyRpX29wZW5pbmddIGVxICdMJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJG9wZW5pbmdfdmVydGljYWxfdGlnaHRuZXNzeyd7J30KICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRjbG9zaW5nX3ZlcnRpY2FsX3RpZ2h0bmVzc3snfSd9ICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHNlcW5vID0gJHR5cGVfc2VxdWVuY2VfdG9fZ29bJGlfb3BlbmluZ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHNlcW5vKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPltfcmJyZWFrX2NvbnRhaW5lcl9dLT57JHNlcW5vfSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBicmVhayBhdCAnLCcgb2YgbG93ZXIgZGVwdGggbGV2ZWwgYmVmb3JlIG9wZW5pbmcgdG9rZW4KICAgICAgICAgICAgICAgIGlmICggJGxhc3RfY29tbWFfaW5kZXhbJGRlcHRoXSApIHsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+c2V0X2ZvcmNlZF9icmVha3BvaW50KCAkbGFzdF9jb21tYV9pbmRleFskZGVwdGhdICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBicmVhayBhdCAnLicgb2YgbG93ZXIgZGVwdGggbGV2ZWwgYmVmb3JlIG9wZW5pbmcgdG9rZW4KICAgICAgICAgICAgICAgIGlmICggJGxhc3RfZG90X2luZGV4WyRkZXB0aF0gKSB7CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPnNldF9mb3JjZWRfYnJlYWtwb2ludCggJGxhc3RfZG90X2luZGV4WyRkZXB0aF0gKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGJyZWFrIGJlZm9yZSBvcGVuaW5nIHN0cnVjdHVyZSBpZiBwcmVjZWRlZCBieSBhbm90aGVyCiAgICAgICAgICAgICAgICAjIGNsb3Npbmcgc3RydWN0dXJlIGFuZCBhIGNvbW1hLiAgVGhpcyBpcyBub3JtYWxseQogICAgICAgICAgICAgICAgIyBkb25lIGJ5IHRoZSBwcmV2aW91cyBjbG9zaW5nIGJyYWNlLCBidXQgbm90CiAgICAgICAgICAgICAgICAjIGlmIGl0IHdhcyBhIG9uZS1saW5lIGJsb2NrLgogICAgICAgICAgICAgICAgaWYgKCAkaV9vcGVuaW5nID4gMiApIHsKICAgICAgICAgICAgICAgICAgICBteSAkaV9wcmV2ID0KICAgICAgICAgICAgICAgICAgICAgICggJHR5cGVzX3RvX2dvWyAkaV9vcGVuaW5nIC0gMSBdIGVxICdiJyApCiAgICAgICAgICAgICAgICAgICAgICA/ICRpX29wZW5pbmcgLSAyCiAgICAgICAgICAgICAgICAgICAgICA6ICRpX29wZW5pbmcgLSAxOwoKICAgICAgICAgICAgICAgICAgICBteSAkdHlwZV9wcmV2ICA9ICR0eXBlc190b19nb1skaV9wcmV2XTsKICAgICAgICAgICAgICAgICAgICBteSAkdG9rZW5fcHJldiA9ICR0b2tlbnNfdG9fZ29bJGlfcHJldl07CiAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAkdHlwZV9wcmV2IGVxICcsJwogICAgICAgICAgICAgICAgICAgICAgICAmJiAoICAgJHR5cGVzX3RvX2dvWyAkaV9wcmV2IC0gMSBdIGVxICcpJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgJHR5cGVzX3RvX2dvWyAkaV9wcmV2IC0gMSBdIGVxICd9JyApCiAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+c2V0X2ZvcmNlZF9icmVha3BvaW50KCRpX3ByZXYpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBhbHNvIGJyZWFrIGJlZm9yZSBzb21ldGhpbmcgbGlrZSAnOignICBvciAnPygnCiAgICAgICAgICAgICAgICAgICAgIyBpZiBhcHByb3ByaWF0ZS4KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoJHR5cGVfcHJldiA9fiAvXihba1w6XD9dfCYmfFx8XHwpJC8KICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHdhbnRfYnJlYWtfYmVmb3JleyR0b2tlbl9wcmV2fSApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+c2V0X2ZvcmNlZF9icmVha3BvaW50KCRpX3ByZXYpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIyMgbm90IGEgYnJlYWtwb2ludAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBicmVhayBhZnRlciBjb21tYSBmb2xsb3dpbmcgY2xvc2luZyBzdHJ1Y3R1cmUKICAgICAgICAgICAgaWYgKCAkdHlwZXNfdG9fZ29bICRpICsgMSBdIGVxICcsJyApIHsKICAgICAgICAgICAgICAgICRzZWxmLT5zZXRfZm9yY2VkX2JyZWFrcG9pbnQoICRpICsgMSApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGJyZWFrIGJlZm9yZSBhbiAnPScgZm9sbG93aW5nIGNsb3Npbmcgc3RydWN0dXJlCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRpc19hc3NpZ25tZW50eyRuZXh0X25vbmJsYW5rX3R5cGV9CiAgICAgICAgICAgICAgICAmJiAoICRicmVha3BvaW50X3N0YWNrWyRjdXJyZW50X2RlcHRoXSAhPQogICAgICAgICAgICAgICAgICAgICRmb3JjZWRfYnJlYWtwb2ludF9jb3VudCApCiAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkc2VsZi0+c2V0X2ZvcmNlZF9icmVha3BvaW50KCRpKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBicmVhayBhdCBhbnkgY29tbWEgYmVmb3JlIHRoZSBvcGVuaW5nIHN0cnVjdHVyZSBBZGRlZAogICAgICAgICAgICAjIGZvciAtbHAsIGJ1dCBzZWVtcyB0byBiZSBnb29kIGluIGdlbmVyYWwuICBJdCBpc24ndAogICAgICAgICAgICAjIG9idmlvdXMgaG93IGZhciBiYWNrIHRvIGxvb2s7IHRoZSAnNScgYmVsb3cgc2VlbXMgdG8KICAgICAgICAgICAgIyB3b3JrIHdlbGwgYW5kIHdpbGwgY2F0Y2ggdGhlIGNvbW1hIGluIHNvbWV0aGluZyBsaWtlCiAgICAgICAgICAgICMgIHB1c2ggQGxpc3QsIG15ZnVuYyggJHBhcmFtLCAkcGFyYW0sIC4uCgogICAgICAgICAgICBteSAkaWNvbW1hID0gJGxhc3RfY29tbWFfaW5kZXhbJGRlcHRoXTsKICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRpY29tbWEpICYmICggJGlfb3BlbmluZyAtICRpY29tbWEgKSA8IDUgKSB7CiAgICAgICAgICAgICAgICBpZiAoICEkZm9yY2VkX2JyZWFrcG9pbnRfdG9fZ29bJGljb21tYV0gKSB7CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPnNldF9mb3JjZWRfYnJlYWtwb2ludCgkaWNvbW1hKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBCcmVhayBvcGVuIGEgbG9naWNhbCBjb250YWluZXIgb3BlbiBpZiBpdCB3YXMgYWxyZWFkeSBvcGVuCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgZWxzaWYgKCRpc19zaW1wbGVfbG9naWNhbF9leHByZXNzaW9uCiAgICAgICAgICAgICYmICRoYXNfb2xkX2xvZ2ljYWxfYnJlYWtwb2ludHNbJGN1cnJlbnRfZGVwdGhdICkKICAgICAgICB7CiAgICAgICAgICAgICRzZWxmLT5zZXRfbG9naWNhbF9icmVha3BvaW50cygkY3VycmVudF9kZXB0aCk7CiAgICAgICAgfQoKICAgICAgICAjIEhhbmRsZSBsb25nIGNvbnRhaW5lciB3aGljaCBkb2VzIG5vdCBnZXQgb3BlbmVkIHVwCiAgICAgICAgZWxzaWYgKCRpc19sb25nX3Rlcm0pIHsKCiAgICAgICAgICAgICMgbXVzdCBzZXQgZmFrZSBicmVha3BvaW50IHRvIGFsZXJ0IG91dGVyIGNvbnRhaW5lcnMgdGhhdAogICAgICAgICAgICAjIHRoZXkgYXJlIGNvbXBsZXgKICAgICAgICAgICAgc2V0X2Zha2VfYnJlYWtwb2ludCgpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIyMgZG8gbm90IGJyZWFrIG9wZW4KICAgICAgICB9CgogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBicmVha19saXN0c19kZWNyZWFzaW5nX2RlcHRoCn0gIyMgZW5kIGNsb3N1cmUgYnJlYWtfbGlzdHMKCm15ICVpc19rd2laOwpteSAlaXNfa2V5X3R5cGU7CgpCRUdJTiB7CgogICAgIyBBZGRlZCAndycgdG8gZml4IGIxMTcyCiAgICBteSBAcSA9IHF3KCBrIHcgaSBaIC0+ICk7CiAgICBAaXNfa3dpWntAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICMgYWRkZWQgPSBmb3IgYjEyMTEKICAgIEBxID0gcXc8ICggWyB7IEwgUiB9IF0gKSA9IGIgPjsKICAgIHB1c2ggQHEsICcsJzsKICAgIEBpc19rZXlfdHlwZXtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwp9ICMjIGVuZCBCRUdJTgoKdXNlIGNvbnN0YW50IERFQlVHX0ZJTkRfU1RBUlQgPT4gMDsKCnN1YiBmaW5kX3Rva2VuX3N0YXJ0aW5nX2xpc3QgewoKICAgICMgV2hlbiB0ZXN0aW5nIHRvIHNlZSBpZiBhIGJsb2NrIHdpbGwgZml0IG9uIG9uZSBsaW5lLCBzb21lCiAgICAjIHByZXZpb3VzIHRva2VuKHMpIG1heSBhbHNvIG5lZWQgdG8gYmUgb24gdGhlIGxpbmU7IHBhcnRpY3VsYXJseQogICAgIyBpZiB0aGlzIGlzIGEgc3ViIGNhbGwuICBTbyB3ZSB3aWxsIGxvb2sgYmFjayBhdCBsZWFzdCBvbmUKICAgICMgdG9rZW4uCiAgICBteSAoICRzZWxmLCAkaV9vcGVuaW5nX3BhcmVuICkgPSBAXzsKCiAgICAjIEdpdmVuOgogICAgIyAgICRpX29wZW5pbmdfcGFyZW4gPSBpbmRleCBvZiB0aGUgb3BlbmluZyB0b2tlbiBpbiB0aGUgX3RvX2dvIGFycmF5cwogICAgIyAgICAgICAgICAgICAgICAgICAgICBub3RlOiBpdCBjb3VsZCBiZSBhbnkgb2YgeyBbICgKCiAgICAjIFRoaXMgd2lsbCBiZSB0aGUgcmV0dXJuIGluZGV4CiAgICBteSAkaV9vcGVuaW5nX21pbnVzID0gJGlfb3BlbmluZ19wYXJlbjsKCiAgICBpZiAoICRpX29wZW5pbmdfbWludXMgPD0gMCApIHsKICAgICAgICByZXR1cm4gJGlfb3BlbmluZ19taW51czsKICAgIH0KCiAgICBteSAkaW0xID0gJGlfb3BlbmluZ19wYXJlbiAtIDE7CiAgICBteSAoICRpcHJldl9uYiwgJHR5cGVfcHJldl9uYiApID0gKCAkaW0xLCAkdHlwZXNfdG9fZ29bJGltMV0gKTsKICAgIGlmICggJHR5cGVfcHJldl9uYiBlcSAnYicgJiYgJGlwcmV2X25iID4gMCApIHsKICAgICAgICAkaXByZXZfbmIgLT0gMTsKICAgICAgICAkdHlwZV9wcmV2X25iID0gJHR5cGVzX3RvX2dvWyRpcHJldl9uYl07CiAgICB9CgogICAgaWYgKCAkdHlwZV9wcmV2X25iIGVxICcsJyApIHsKCiAgICAgICAgIyBhIHByZXZpb3VzIGNvbW1hIGlzIGEgZ29vZCBicmVhayBwb2ludAogICAgICAgICMgJGlfb3BlbmluZ19taW51cyA9ICRpX29wZW5pbmdfcGFyZW47CiAgICB9CgogICAgZWxzaWYgKAogICAgICAgICR0b2tlbnNfdG9fZ29bJGlfb3BlbmluZ19wYXJlbl0gZXEgJygnCgogICAgICAgICMgbm9uLXBhcmVucyBhZGRlZCBoZXJlIHRvIGZpeCBjYXNlIGIxMTg2CiAgICAgICAgfHwgJGlzX2t3aVp7JHR5cGVfcHJldl9uYn0KICAgICAgKQogICAgewogICAgICAgICRpX29wZW5pbmdfbWludXMgPSAkaW0xOwoKICAgICAgICAjIFdhbGsgYmFjayB0byBpbXByb3ZlIGxlbmd0aCBlc3RpbWF0ZS4uLgogICAgICAgICMgRklYIGZvciBjYXNlcyBiMTE2OSBiMTE3MCBiMTE3MTogc3RhcnQgd2Fsa2luZyBiYWNrCiAgICAgICAgIyBhdCB0aGUgcHJldmlvdXMgbm9uYmxhbmsuIFRoaXMgbWFrZXMgdGhlIHJlc3VsdCBpbnNlbnNpdGl2ZQogICAgICAgICMgdG8gdGhlIGZsYWcgLS1zcGFjZS1mdW5jdGlvbi1wYXJlbiwgYW5kIHNpbWlsYXIuCiAgICAgICAgIyBwcmV2aW91cyBsb29wOiBmb3IgKCBteSAkaiA9ICRpbTEgOyAkaiA+PSAwIDsgJGotLSApIHsKICAgICAgICBmb3JlYWNoIG15ICRqICggcmV2ZXJzZSggMCAuLiAkaXByZXZfbmIgKSApIHsKICAgICAgICAgICAgaWYgKCAkaXNfa2V5X3R5cGV7ICR0eXBlc190b19nb1skal0gfSApIHsKCiAgICAgICAgICAgICAgICAjIGZpeCBmb3IgYjEyMTEKICAgICAgICAgICAgICAgIGlmICggJHR5cGVzX3RvX2dvWyRqXSBlcSAnPScgKSB7ICRpX29wZW5pbmdfbWludXMgPSAkaiB9CiAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICB9CiAgICAgICAgICAgICRpX29wZW5pbmdfbWludXMgPSAkajsKICAgICAgICB9CiAgICAgICAgaWYgKCAkdHlwZXNfdG9fZ29bJGlfb3BlbmluZ19taW51c10gZXEgJ2InICkgeyAkaV9vcGVuaW5nX21pbnVzKysgfQogICAgfQoKICAgICMgZml4IGZvciBiMTQ2NwogICAgZWxzaWYgKCAkdHlwZV9wcmV2X25iIGVxICc9JyApIHsKICAgICAgICBpZiAoICR3YW50X2JyZWFrX2JlZm9yZXskdHlwZV9wcmV2X25ifSApIHsKICAgICAgICAgICAgJGlfb3BlbmluZ19taW51cyA9ICRpcHJldl9uYjsKICAgICAgICB9CiAgICB9CgogICAgZWxzZSB7CiAgICAgICAgIyMgcHJldmlvdXMgdG9rZW4gbm90IHNwZWNpYWwKICAgIH0KCiAgICBERUJVR19GSU5EX1NUQVJUICYmIHByaW50IDw8RU9NOwpGSU5EX1NUQVJUOiBpPSRpX29wZW5pbmdfcGFyZW4gdG9rPSR0b2tlbnNfdG9fZ29bJGlfb3BlbmluZ19wYXJlbl0gPT4gaW09JGlfb3BlbmluZ19taW51cyB0b2s9JHRva2Vuc190b19nb1skaV9vcGVuaW5nX21pbnVzXQpFT00KCiAgICByZXR1cm4gJGlfb3BlbmluZ19taW51czsKfSAjIyBlbmQgc3ViIGZpbmRfdG9rZW5fc3RhcnRpbmdfbGlzdAoKeyAgICAjIyBiZWdpbiBjbG9zdXJlIHRhYmxlX21ha2VyCgogICAgdXNlIGNvbnN0YW50IERFQlVHX1NQQVJTRSA9PiAwOwoKICAgIHN1YiB0YWJsZV9tYWtlciB7CgogICAgICAgIG15ICggJHNlbGYsICRyaGFzaF9JTiApID0gQF87CgogICAgICAgICMgR2l2ZW4gYSBsaXN0IG9mIGNvbW1hLXNlcGFyYXRlZCBpdGVtcywgc2V0IGJyZWFrcG9pbnRzIGF0IHNvbWUgb2YKICAgICAgICAjIHRoZSBjb21tYXMsIGlmIG5lY2Vzc2FyeSwgdG8gbWFrZSBpdCBlYXN5IHRvIHJlYWQuCiAgICAgICAgIyBUaGlzIGlzIGRvbmUgYnkgbWFraW5nIGNhbGxzIHRvICdzZXRfZm9yY2VkX2JyZWFrcG9pbnQnLgogICAgICAgICMgVGhpcyBpcyBhIGNvbXBsZXggcm91dGluZSBiZWNhdXNlIHRoZXJlIGFyZSBtYW55IHNwZWNpYWwgY2FzZXMuCgogICAgICAgICMgUmV0dXJuczogbm90aGluZwoKICAgICAgICAjIFRoZSBudW1lcm91cyB2YXJpYWJsZXMgaW52b2x2ZWQgYXJlIGNvbnRhaW5lZCB0aHJlZSBoYXNoZXM6CiAgICAgICAgIyAkcmhhc2hfSU4gOiBGb3IgY29udGVudHMgc2VlIHRoZSBjYWxsaW5nIHJvdXRpbmUKICAgICAgICAjICRyaGFzaF9BOiBGb3IgY29udGVudHMgc2VlIHJldHVybiBmcm9tIHN1YiAndGFibGVfbGF5b3V0X0EnCiAgICAgICAgIyAkcmhhc2hfQjogRm9yIGNvbnRlbnRzIHNlZSByZXR1cm4gZnJvbSBzdWIgJ3RhYmxlX2xheW91dF9CJwoKICAgICAgICAjIEZpbmQgbGVuZ3RocyBvZiBhbGwgbGlzdCBpdGVtcyBuZWVkZWQgZm9yIGNhbGN1bGF0aW5nIHBhZ2UgbGF5b3V0CiAgICAgICAgbXkgJHJoYXNoX0EgPSB0YWJsZV9sYXlvdXRfQSgkcmhhc2hfSU4pOwogICAgICAgIHJldHVybiBpZiAoICFkZWZpbmVkKCRyaGFzaF9BKSApOwoKICAgICAgICAjIFNvbWUgdmFyaWFibGVzIHJlY2VpdmVkIGZyb20gY2FsbGVyLi4uCiAgICAgICAgbXkgJGlfY2xvc2luZ19wYXJlbiAgICA9ICRyaGFzaF9JTi0+e2lfY2xvc2luZ19wYXJlbn07CiAgICAgICAgbXkgJGlfb3BlbmluZ19wYXJlbiAgICA9ICRyaGFzaF9JTi0+e2lfb3BlbmluZ19wYXJlbn07CiAgICAgICAgbXkgJGhhc19icm9rZW5fc3VibGlzdCA9ICRyaGFzaF9JTi0+e2hhc19icm9rZW5fc3VibGlzdH07CiAgICAgICAgbXkgJGludGVycnVwdGVkICAgICAgICA9ICRyaGFzaF9JTi0+e2ludGVycnVwdGVkfTsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBTZWN0aW9uIEE6IEhhbmRsZSBzb21lIHNwZWNpYWwgY2FzZXMgLi4uCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBTcGVjaWFsIENhc2UgQTE6IENvbXBvdW5kIExpc3QgUnVsZSAxOgogICAgICAgICMgQnJlYWsgYXQgKGFsbW9zdCkgZXZlcnkgY29tbWEgZm9yIGEgbGlzdCBjb250YWluaW5nIGEgYnJva2VuCiAgICAgICAgIyBzdWJsaXN0LiAgVGhpcyBoYXMgaGlnaGVyIHByaW9yaXR5IHRoYW4gdGhlIEludGVycnVwdGVkIExpc3QKICAgICAgICAjIFJ1bGUuCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpZiAoJGhhc19icm9rZW5fc3VibGlzdCkgewogICAgICAgICAgICAkc2VsZi0+YXBwbHlfYnJva2VuX3N1Ymxpc3RfcnVsZSggJHJoYXNoX0EsICRpbnRlcnJ1cHRlZCApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIFNwZWNpYWwgQ2FzZSBBMjogSW50ZXJydXB0ZWQgTGlzdCBSdWxlOgogICAgICAgICMgQSBsaXN0IGlzIGZvcmNlZCB0byB1c2Ugb2xkIGJyZWFrcG9pbnRzIGlmIGl0IHdhcyBpbnRlcnJ1cHRlZAogICAgICAgICMgYnkgc2lkZSBjb21tZW50cyBvciBibGFuayBsaW5lcywgb3IgcmVxdWVzdGVkIGJ5IHVzZXIuCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaWYgKCAgICRyT3B0c19icmVha19hdF9vbGRfY29tbWFfYnJlYWtwb2ludHMKICAgICAgICAgICAgfHwgJGludGVycnVwdGVkCiAgICAgICAgICAgIHx8ICRpX29wZW5pbmdfcGFyZW4gPCAwICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICRpX2ZpcnN0X2NvbW1hICAgICA9ICRyaGFzaF9BLT57X2lfZmlyc3RfY29tbWF9OwogICAgICAgICAgICBteSAkaV90cnVlX2xhc3RfY29tbWEgPSAkcmhhc2hfQS0+e19pX3RydWVfbGFzdF9jb21tYX07CiAgICAgICAgICAgICRzZWxmLT5jb3B5X29sZF9icmVha3BvaW50cyggJGlfZmlyc3RfY29tbWEsICRpX3RydWVfbGFzdF9jb21tYSApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIFNwZWNpYWwgQ2FzZSBBMzogSWYgaXQgZml0cyBvbiBvbmUgbGluZSwgcmV0dXJuIGFuZCBsZXQgdGhlIGxpbmUKICAgICAgICAjIGJyZWFrIGxvZ2ljIGRlY2lkZSBpZiBhbmQgd2hlcmUgdG8gYnJlYWsuCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICMgVGhlIC1iYnhpPTIgcGFyYW1ldGVycyBjYW4gYWRkIGFuIGV4dHJhIGhpZGRlbiBsZXZlbCBvZiBpbmRlbnRhdGlvbgogICAgICAgICMgc28gdGhleSBuZWVkIGEgdG9sZXJhbmNlIHRvIGF2b2lkIGluc3RhYmlsaXR5LiAgRml4ZXMgYjEyNTksIDEyNjAuCiAgICAgICAgbXkgJG9wZW5pbmdfdG9rZW4gPSAkdG9rZW5zX3RvX2dvWyRpX29wZW5pbmdfcGFyZW5dOwogICAgICAgIG15ICR0b2wgICAgICAgICAgID0gMDsKICAgICAgICBpZiAoICAgJGJyZWFrX2JlZm9yZV9jb250YWluZXJfdHlwZXN7JG9wZW5pbmdfdG9rZW59CiAgICAgICAgICAgICYmICRjb250YWluZXJfaW5kZW50YXRpb25fb3B0aW9uc3skb3BlbmluZ190b2tlbn0KICAgICAgICAgICAgJiYgJGNvbnRhaW5lcl9pbmRlbnRhdGlvbl9vcHRpb25zeyRvcGVuaW5nX3Rva2VufSA9PSAyICkKICAgICAgICB7CiAgICAgICAgICAgICR0b2wgPSAkck9wdHNfaW5kZW50X2NvbHVtbnM7CgogICAgICAgICAgICAjIHVzZSBncmVhdGVyIG9mIC1jaSBhbmQgLWkgKGZpeCBmb3IgY2FzZSBiMTMzNCkKICAgICAgICAgICAgaWYgKCAkdG9sIDwgJHJPcHRzX2NvbnRpbnVhdGlvbl9pbmRlbnRhdGlvbiApIHsKICAgICAgICAgICAgICAgICR0b2wgPSAkck9wdHNfY29udGludWF0aW9uX2luZGVudGF0aW9uOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIEluY3JlYXNlIHRvbCB3aGVuIC1hdGMgYW5kIC1kdGMgYXJlIGJvdGggdXNlZCB0byBhbGxvdyBmb3IKICAgICAgICAjIHBvc3NpYmxlIGxvc3MgaW4gbGVuZ3RoIG9uIG5leHQgcGFzcyBkdWUgdG8gYSBjb21tYS4gRml4ZXMgYjE0NTUuCiAgICAgICAgaWYgKAogICAgICAgICAgICAgICAkck9wdHNfZGVsZXRlX3RyYWlsaW5nX2NvbW1hcwogICAgICAgICAgICAmJiAkck9wdHNfYWRkX3RyYWlsaW5nX2NvbW1hcwoKICAgICAgICAgICAgIyBvcHRpb25hbCBhZGRpdGlvbmFsIHJlc3RyaWN0aW9uIHdoaWNoIHdvcmtzIGZvciBiMTQ1NToKICAgICAgICAgICAgJiYgJHJPcHRzX2V4dGVuZGVkX2NvbnRpbnVhdGlvbl9pbmRlbnRhdGlvbgogICAgICAgICAgICAmJiAkck9wdHNfY29udGludWF0aW9uX2luZGVudGF0aW9uID4gJHJPcHRzX2luZGVudF9jb2x1bW5zCiAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkdG9sICs9IDE7CiAgICAgICAgfQoKICAgICAgICAjIGM0MTA6IGNoZWNrIGZvciAkaV9jbG9zaW5nX3BhcmVuID4gJG1heF9pbmRleF90b19nbwogICAgICAgIG15ICRpX29wZW5pbmdfbWludXMgPSAkc2VsZi0+ZmluZF90b2tlbl9zdGFydGluZ19saXN0KCRpX29wZW5pbmdfcGFyZW4pOwogICAgICAgIG15ICRpZW5kICAgICAgICAgICAgPSBtaW4oICRpX2Nsb3NpbmdfcGFyZW4sICRtYXhfaW5kZXhfdG9fZ28gKTsKICAgICAgICBteSAkZXhjZXNzID0gJHNlbGYtPmV4Y2Vzc19saW5lX2xlbmd0aCggJGlfb3BlbmluZ19taW51cywgJGllbmQgKTsKICAgICAgICByZXR1cm4gaWYgKCAkZXhjZXNzICsgJHRvbCA8PSAwICk7CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIFNlY3Rpb24gQjogSGFuZGxlIGEgbXVsdGlsaW5lIGxpc3QgLi4uCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAkc2VsZi0+YnJlYWtfbXVsdGlsaW5lX2xpc3QoICRyaGFzaF9JTiwgJHJoYXNoX0EsICRpX29wZW5pbmdfbWludXMgKTsKICAgICAgICByZXR1cm47CgogICAgfSAjIyBlbmQgc3ViIHRhYmxlX21ha2VyCgogICAgc3ViIGFwcGx5X2Jyb2tlbl9zdWJsaXN0X3J1bGUgewoKICAgICAgICBteSAoICRzZWxmLCAkcmhhc2hfQSwgJGludGVycnVwdGVkICkgPSBAXzsKCiAgICAgICAgIyBCcmVhayBhdCAoYWxtb3N0KSBldmVyeSBjb21tYSBmb3IgYSBsaXN0IGNvbnRhaW5pbmcgYSBicm9rZW4KICAgICAgICAjIHN1Ymxpc3QuCgogICAgICAgIG15ICRyaXRlbV9sZW5ndGhzICAgICA9ICRyaGFzaF9BLT57X3JpdGVtX2xlbmd0aHN9OwogICAgICAgIG15ICRyaV90ZXJtX2JlZ2luICAgICA9ICRyaGFzaF9BLT57X3JpX3Rlcm1fYmVnaW59OwogICAgICAgIG15ICRyaV90ZXJtX2VuZCAgICAgICA9ICRyaGFzaF9BLT57X3JpX3Rlcm1fZW5kfTsKICAgICAgICBteSAkcmlfdGVybV9jb21tYSAgICAgPSAkcmhhc2hfQS0+e19yaV90ZXJtX2NvbW1hfTsKICAgICAgICBteSAkaXRlbV9jb3VudCAgICAgICAgPSAkcmhhc2hfQS0+e19pdGVtX2NvdW50X0F9OwogICAgICAgIG15ICRpX2ZpcnN0X2NvbW1hICAgICA9ICRyaGFzaF9BLT57X2lfZmlyc3RfY29tbWF9OwogICAgICAgIG15ICRpX3RydWVfbGFzdF9jb21tYSA9ICRyaGFzaF9BLT57X2lfdHJ1ZV9sYXN0X2NvbW1hfTsKCiAgICAgICAgIyBCcmVhayBhdCBldmVyeSBjb21tYSBleGNlcHQgZm9yIGEgY29tbWEgYmV0d2VlbiB0d28KICAgICAgICAjIHNpbXBsZSwgc21hbGwgdGVybXMuICBUaGlzIHByZXZlbnRzIGxvbmcgdmVydGljYWwKICAgICAgICAjIGNvbHVtbnMgb2YsIHNheSwganVzdCAwJ3MuCiAgICAgICAgbXkgJHNtYWxsX2xlbmd0aCA9IDEwOyAgICAjIDIgKyBhY3R1YWwgbWF4aW11bSBsZW5ndGggd2FudGVkCgogICAgICAgICMgV2UnbGwgaW5zZXJ0IGEgYnJlYWsgaW4gbG9uZyBydW5zIG9mIHNtYWxsIHRlcm1zIHRvCiAgICAgICAgIyBhbGxvdyBhbGlnbm1lbnQgaW4gdW5pZm9ybSB0YWJsZXMuCiAgICAgICAgbXkgJHNraXBwZWRfY291bnQgPSAwOwogICAgICAgIG15ICRjb2x1bW5zICAgICAgID0gdGFibGVfY29sdW1uc19hdmFpbGFibGUoJGlfZmlyc3RfY29tbWEpOwogICAgICAgIG15ICRmaWVsZHMgICAgICAgID0gaW50KCAkY29sdW1ucyAvICRzbWFsbF9sZW5ndGggKTsKICAgICAgICBpZiAoICAgJHJPcHRzX21heGltdW1fZmllbGRzX3Blcl90YWJsZQogICAgICAgICAgICAmJiAkZmllbGRzID4gJHJPcHRzX21heGltdW1fZmllbGRzX3Blcl90YWJsZSApCiAgICAgICAgewogICAgICAgICAgICAkZmllbGRzID0gJHJPcHRzX21heGltdW1fZmllbGRzX3Blcl90YWJsZTsKICAgICAgICB9CiAgICAgICAgbXkgJG1heF9za2lwcGVkX2NvdW50ID0gJGZpZWxkcyAtIDE7CgogICAgICAgIG15ICRpc19zaW1wbGVfbGFzdF90ZXJtID0gMDsKICAgICAgICBteSAkaXNfc2ltcGxlX25leHRfdGVybSA9IDA7CiAgICAgICAgZm9yZWFjaCBteSAkaiAoIDAgLi4gJGl0ZW1fY291bnQgKSB7CiAgICAgICAgICAgICRpc19zaW1wbGVfbGFzdF90ZXJtID0gJGlzX3NpbXBsZV9uZXh0X3Rlcm07CiAgICAgICAgICAgICRpc19zaW1wbGVfbmV4dF90ZXJtID0gMDsKICAgICAgICAgICAgaWYgKCAgICRqIDwgJGl0ZW1fY291bnQKICAgICAgICAgICAgICAgICYmICRyaV90ZXJtX2VuZC0+WyRqXSA9PSAkcmlfdGVybV9iZWdpbi0+WyRqXQogICAgICAgICAgICAgICAgJiYgJHJpdGVtX2xlbmd0aHMtPlskal0gPD0gJHNtYWxsX2xlbmd0aCApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRpc19zaW1wbGVfbmV4dF90ZXJtID0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBuZXh0IGlmICRqID09IDA7CiAgICAgICAgICAgIGlmICggICAkaXNfc2ltcGxlX2xhc3RfdGVybQogICAgICAgICAgICAgICAgJiYgJGlzX3NpbXBsZV9uZXh0X3Rlcm0KICAgICAgICAgICAgICAgICYmICRza2lwcGVkX2NvdW50IDwgJG1heF9za2lwcGVkX2NvdW50ICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJHNraXBwZWRfY291bnQrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRza2lwcGVkX2NvdW50ID0gMDsKICAgICAgICAgICAgICAgIG15ICRpX3RjID0gJHJpX3Rlcm1fY29tbWEtPlsgJGogLSAxIF07CiAgICAgICAgICAgICAgICBsYXN0IHVubGVzcyBkZWZpbmVkKCRpX3RjKTsKICAgICAgICAgICAgICAgICRzZWxmLT5zZXRfZm9yY2VkX2JyZWFrcG9pbnQoJGlfdGMpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGFsd2F5cyBicmVhayBhdCB0aGUgbGFzdCBjb21tYSBpZiB0aGlzIGxpc3QgaXMKICAgICAgICAjIGludGVycnVwdGVkOyB3ZSB3b3VsZG4ndCB3YW50IHRvIGxlYXZlIGEgdGVybWluYWwgJ3snLCBmb3IKICAgICAgICAjIGV4YW1wbGUuCiAgICAgICAgaWYgKCRpbnRlcnJ1cHRlZCkgewogICAgICAgICAgICAkc2VsZi0+c2V0X2ZvcmNlZF9icmVha3BvaW50KCRpX3RydWVfbGFzdF9jb21tYSk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBhcHBseV9icm9rZW5fc3VibGlzdF9ydWxlCgogICAgc3ViIHNldF9lbWVyZ2VuY3lfY29tbWFfYnJlYWtwb2ludHMgewoKICAgICAgICBteSAoCgogICAgICAgICAgICAkc2VsZiwgICAgIwoKICAgICAgICAgICAgJG51bWJlcl9vZl9maWVsZHNfYmVzdCwKICAgICAgICAgICAgJHJoYXNoX0lOLAogICAgICAgICAgICAkY29tbWFfY291bnQsCiAgICAgICAgICAgICRpX2ZpcnN0X2NvbW1hLAoKICAgICAgICApID0gQF87CgogICAgICAgICMgVGhlIGNvbXB1dGVkIG51bWJlciBvZiB0YWJsZSBmaWVsZHMgaXMgbmVnYXRpdmUsIHNvIHdlIGhhdmUgdG8gbWFrZQogICAgICAgICMgYW4gZW1lcmdlbmN5IGZpeC4KCiAgICAgICAgbXkgJHJjb21tYV9pbmRleCAgICAgICAgPSAkcmhhc2hfSU4tPntyY29tbWFfaW5kZXh9OwogICAgICAgIG15ICRuZXh0X25vbmJsYW5rX3R5cGUgID0gJHJoYXNoX0lOLT57bmV4dF9ub25ibGFua190eXBlfTsKICAgICAgICBteSAkcmRvX25vdF9icmVha19hcGFydCA9ICRyaGFzaF9JTi0+e3Jkb19ub3RfYnJlYWtfYXBhcnR9OwogICAgICAgIG15ICRtdXN0X2JyZWFrX29wZW4gICAgID0gJHJoYXNoX0lOLT57bXVzdF9icmVha19vcGVufTsKCiAgICAgICAgIyBhcmUgd2UgYW4gaXRlbSBjb250YWluZWQgaW4gYW4gb3V0ZXIgbGlzdD8KICAgICAgICBteSAkaW5faGllcmFyY2hpY2FsX2xpc3QgPSAkbmV4dF9ub25ibGFua190eXBlID1+IC9eW1x9XCxdJC87CgogICAgICAgICMgSW4gbWFueSBjYXNlcywgaXQgbWF5IGJlIGJlc3QgdG8gbm90IGZvcmNlIGEgYnJlYWsgaWYgdGhlcmUgaXMganVzdAogICAgICAgICMgb25lIGNvbW1hLCBiZWNhdXNlIHRoZSBzdGFuZGFyZCBjb250aW51YXRpb24gYnJlYWsgbG9naWMgd2lsbCBkbyBhCiAgICAgICAgIyBiZXR0ZXIgam9iIHdpdGhvdXQgaXQuCgogICAgICAgICMgSW4gdGhlIGNvbW1vbiBjYXNlIHRoYXQgYWxsIGJ1dCBvbmUgb2YgdGhlIHRlcm1zIGNhbiBmaXQKICAgICAgICAjIG9uIGEgc2luZ2xlIGxpbmUsIGl0IG1heSBsb29rIGJldHRlciBub3QgdG8gYnJlYWsgb3BlbiB0aGUKICAgICAgICAjIGNvbnRhaW5pbmcgcGFyZW5zLiAgQ29uc2lkZXIsIGZvciBleGFtcGxlCgogICAgICAgICMgICAgICRjb2xvciA9CiAgICAgICAgIyAgICAgICBqb2luICggJy8nLAogICAgICAgICMgICAgICAgICBzb3J0IHsgJGNvbG9yX3ZhbHVleyQ6OmF9IDw9PiAkY29sb3JfdmFsdWV7JDo6Yn07IH0KICAgICAgICAjICAgICAgICAga2V5cyAlY29sb3JzICk7CgogICAgICAgICMgd2hpY2ggd2lsbCBsb29rIGxpa2UgdGhpcyB3aXRoIHRoZSBjb250YWluZXIgYnJva2VuOgoKICAgICAgICAjICAgJGNvbG9yID0gam9pbiAoCiAgICAgICAgIyAgICAgICAnLycsCiAgICAgICAgIyAgICAgICBzb3J0IHsgJGNvbG9yX3ZhbHVleyQ6OmF9IDw9PiAkY29sb3JfdmFsdWV7JDo6Yn07IH0ga2V5cyAlY29sb3JzCiAgICAgICAgIyAgICk7CgogICAgICAgICMgSGVyZSBpcyBhbiBleGFtcGxlIG9mIHRoaXMgcnVsZSBmb3IgYSBsb25nIGxhc3QgdGVybToKCiAgICAgICAgIyAgIGxvZ19tZXNzYWdlKCAwLCAyNTYsIDEyOCwKICAgICAgICAjICAgICAgICJOdW1iZXIgb2Ygcm91dGVzIGluIGFkai1SSUItaW4gdG8gYmUgY29uc2lkZXJlZDogJHBlZXJjb3VudCIgKTsKCiAgICAgICAgIyBBbmQgaGVyZSBpcyBhbiBleGFtcGxlIHdpdGggYSBsb25nIGZpcnN0IHRlcm06CgogICAgICAgICMgJHMgPSBzcHJpbnRmKAogICAgICAgICMgIiUyZCB3YWxsY2xvY2sgc2VjcyAoJSRmIHVzciAlJGYgc3lzICsgJSRmIGN1c3IgJSRmIGNzeXMgPSAlJGYgQ1BVKSIsCiAgICAgICAgIyAgICAgJHIsICRwdSwgJHBzLCAkY3UsICRjcywgJHR0CiAgICAgICAgIyAgICkKICAgICAgICAjICAgaWYgJHN0eWxlIGVxICdhbGwnOwoKICAgICAgICBteSAkaV9sYXN0X2NvbW1hID0gJHJjb21tYV9pbmRleC0+WyAkY29tbWFfY291bnQgLSAxIF07CgogICAgICAgIG15ICRsb25nX2xhc3RfdGVybSA9ICRzZWxmLT5leGNlc3NfbGluZV9sZW5ndGgoIDAsICRpX2xhc3RfY29tbWEgKSA8PSAwOwogICAgICAgIG15ICRsb25nX2ZpcnN0X3Rlcm0gPQogICAgICAgICAgJHNlbGYtPmV4Y2Vzc19saW5lX2xlbmd0aCggJGlfZmlyc3RfY29tbWEgKyAxLCAkbWF4X2luZGV4X3RvX2dvICkgPD0KICAgICAgICAgIDA7CgogICAgICAgICMgYnJlYWsgYXQgZXZlcnkgY29tbWEgLi4uCiAgICAgICAgaWYgKAoKICAgICAgICAgICAgIyBpZiByZXF1ZXN0ZWQgYnkgdXNlciBvciBpcyBiZXN0IGxvb2tpbmcKICAgICAgICAgICAgJG51bWJlcl9vZl9maWVsZHNfYmVzdCA9PSAxCgogICAgICAgICAgICAjIG9yIGlmIHRoaXMgaXMgYSBzdWJsaXN0IG9mIGEgbGFyZ2VyIGxpc3QKICAgICAgICAgICAgfHwgJGluX2hpZXJhcmNoaWNhbF9saXN0CgogICAgICAgICAgICAjIG9yIGlmIG11bHRpcGxlIGNvbW1hcyBhbmQgd2UgZG9uJ3QgaGF2ZSBhIGxvbmcgZmlyc3Qgb3IgbGFzdAogICAgICAgICAgICAjIHRlcm0KICAgICAgICAgICAgfHwgKCAkY29tbWFfY291bnQgPiAxCiAgICAgICAgICAgICAgICAmJiAhKCAkbG9uZ19sYXN0X3Rlcm0gfHwgJGxvbmdfZmlyc3RfdGVybSApICkKICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIGZvcmVhY2ggKCAwIC4uICRjb21tYV9jb3VudCAtIDEgKSB7CiAgICAgICAgICAgICAgICAkc2VsZi0+c2V0X2ZvcmNlZF9icmVha3BvaW50KCAkcmNvbW1hX2luZGV4LT5bJF9dICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzaWYgKCRsb25nX2xhc3RfdGVybSkgewoKICAgICAgICAgICAgJHNlbGYtPnNldF9mb3JjZWRfYnJlYWtwb2ludCgkaV9sYXN0X2NvbW1hKTsKICAgICAgICAgICAgJHskcmRvX25vdF9icmVha19hcGFydH0gPSAxIHVubGVzcyAkbXVzdF9icmVha19vcGVuOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoJGxvbmdfZmlyc3RfdGVybSkgewoKICAgICAgICAgICAgJHNlbGYtPnNldF9mb3JjZWRfYnJlYWtwb2ludCgkaV9maXJzdF9jb21tYSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBsZXQgYnJlYWtzIGJlIGRlZmluZWQgYnkgZGVmYXVsdCBib25kIHN0cmVuZ3RoIGxvZ2ljCiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBzZXRfZW1lcmdlbmN5X2NvbW1hX2JyZWFrcG9pbnRzCgogICAgc3ViIGJyZWFrX211bHRpbGluZV9saXN0IHsKICAgICAgICBteSAoICRzZWxmLCAkcmhhc2hfSU4sICRyaGFzaF9BLCAkaV9vcGVuaW5nX21pbnVzICkgPSBAXzsKCiAgICAgICAgIyBXZSBoYXZlIGEgbGlzdCBzcGFubmluZyBtdWx0aXBsZSBsaW5lcyBhbmQgYXJlIHRyeWluZwogICAgICAgICMgdG8gZGVjaWRlIHRoZSBiZXN0IHdheSB0byBzZXQgY29tbWEgYnJlYWtwb2ludHMuCgogICAgICAgICMgT3ZlcnJpZGRlbiB2YXJpYWJsZXMKICAgICAgICBteSAkaXRlbV9jb3VudCAgICAgICA9ICRyaGFzaF9BLT57X2l0ZW1fY291bnRfQX07CiAgICAgICAgbXkgJGlkZW50aWZpZXJfY291bnQgPSAkcmhhc2hfQS0+e19pZGVudGlmaWVyX2NvdW50X0F9OwoKICAgICAgICAjIERlcml2ZWQgdmFyaWFibGVzOgojIyAgICAgIG15ICRyaXRlbV9sZW5ndGhzICAgICAgICAgID0gJHJoYXNoX0EtPntfcml0ZW1fbGVuZ3Roc307CiMjICAgICAgbXkgJHJpX3Rlcm1fYmVnaW4gICAgICAgICAgPSAkcmhhc2hfQS0+e19yaV90ZXJtX2JlZ2lufTsKIyMgICAgICBteSAkcmlfdGVybV9lbmQgICAgICAgICAgICA9ICRyaGFzaF9BLT57X3JpX3Rlcm1fZW5kfTsKICAgICAgICBteSAkcmlfdGVybV9jb21tYSAgICAgICAgICA9ICRyaGFzaF9BLT57X3JpX3Rlcm1fY29tbWF9OwogICAgICAgIG15ICRybWF4X2xlbmd0aCAgICAgICAgICAgID0gJHJoYXNoX0EtPntfcm1heF9sZW5ndGh9OwogICAgICAgIG15ICRjb21tYV9jb3VudCAgICAgICAgICAgID0gJHJoYXNoX0EtPntfY29tbWFfY291bnR9OwogICAgICAgIG15ICRpX2VmZmVjdGl2ZV9sYXN0X2NvbW1hID0gJHJoYXNoX0EtPntfaV9lZmZlY3RpdmVfbGFzdF9jb21tYX07CiAgICAgICAgbXkgJGZpcnN0X3Rlcm1fbGVuZ3RoICAgICAgPSAkcmhhc2hfQS0+e19maXJzdF90ZXJtX2xlbmd0aH07CiAgICAgICAgbXkgJGlfZmlyc3RfY29tbWEgICAgICAgICAgPSAkcmhhc2hfQS0+e19pX2ZpcnN0X2NvbW1hfTsKICAgICAgICBteSAkaV9sYXN0X2NvbW1hICAgICAgICAgICA9ICRyaGFzaF9BLT57X2lfbGFzdF9jb21tYX07CiMjICAgICAgbXkgJGlfdHJ1ZV9sYXN0X2NvbW1hICAgICAgPSAkcmhhc2hfQS0+e19pX3RydWVfbGFzdF9jb21tYX07CgogICAgICAgICMgVmFyaWFibGVzIHJlY2VpdmVkIGZyb20gY2FsbGVyCiAgICAgICAgbXkgJGlfb3BlbmluZ19wYXJlbiA9ICRyaGFzaF9JTi0+e2lfb3BlbmluZ19wYXJlbn07CiMjICAgICAgbXkgJGlfY2xvc2luZ19wYXJlbiAgICAgPSAkcmhhc2hfSU4tPntpX2Nsb3NpbmdfcGFyZW59OwogICAgICAgIG15ICRyY29tbWFfaW5kZXggICAgICAgPSAkcmhhc2hfSU4tPntyY29tbWFfaW5kZXh9OwogICAgICAgIG15ICRuZXh0X25vbmJsYW5rX3R5cGUgPSAkcmhhc2hfSU4tPntuZXh0X25vbmJsYW5rX3R5cGV9OwogICAgICAgIG15ICRsaXN0X3R5cGUgICAgICAgICAgPSAkcmhhc2hfSU4tPntsaXN0X3R5cGV9OwojIyAgICAgIG15ICRpbnRlcnJ1cHRlZCAgICAgICAgID0gJHJoYXNoX0lOLT57aW50ZXJydXB0ZWR9OwogICAgICAgIG15ICRyZG9fbm90X2JyZWFrX2FwYXJ0ID0gJHJoYXNoX0lOLT57cmRvX25vdF9icmVha19hcGFydH07CiAgICAgICAgbXkgJG11c3RfYnJlYWtfb3BlbiAgICAgPSAkcmhhc2hfSU4tPnttdXN0X2JyZWFrX29wZW59OwoKIyMgTk9URTogdGhlc2UgaW5wdXQgdmFycyBmcm9tIGNhbGxlciB1c2UgdGhlIHZhbHVlcyBmcm9tIHJoYXNoX0EgKHNlZSBhYm92ZSk6CiMjICAgICAgbXkgJGl0ZW1fY291bnQgICAgICAgICAgPSAkcmhhc2hfSU4tPntpdGVtX2NvdW50fTsKIyMgICAgICBteSAkaWRlbnRpZmllcl9jb3VudCAgICA9ICRyaGFzaF9JTi0+e2lkZW50aWZpZXJfY291bnR9OwoKICAgICAgICAjIE5PVEU6IGlfb3BlbmluZ19wYXJlbiBjaGFuZ2VzIHZhbHVlIGJlbG93IHNvIHdlIG5lZWQgdG8gZ2V0IHRoZXNlIGhlcmUKICAgICAgICBteSAkb3BlbmluZ19pc19pbl9ibG9jayA9ICRzZWxmLT5pc19pbl9ibG9ja19ieV9pKCRpX29wZW5pbmdfcGFyZW4pOwogICAgICAgIG15ICRvcGVuaW5nX3Rva2VuICAgICAgID0gJHRva2Vuc190b19nb1skaV9vcGVuaW5nX3BhcmVuXTsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgU2VjdGlvbiBCMTogRGV0ZXJtaW5lICckbnVtYmVyX29mX2ZpZWxkcycgPSB0aGUgYmVzdCBudW1iZXIgb2YKICAgICAgICAjIGZpZWxkcyB0byB1c2UgaWYgdGhpcyBpcyB0byBiZSBmb3JtYXR0ZWQgYXMgYSB0YWJsZS4KICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICMgTm93IHdlIGtub3cgdGhhdCB0aGlzIGJsb2NrIHNwYW5zIG11bHRpcGxlIGxpbmVzOyB3ZSBoYXZlIHRvIHNldAogICAgICAgICMgYXQgbGVhc3Qgb25lIGJyZWFrcG9pbnQgLS0gcmVhbCBvciBmYWtlIC0tIGFzIGEgc2lnbmFsIHRvIGJyZWFrCiAgICAgICAgIyBvcGVuIGFueSBvdXRlciBjb250YWluZXJzLgogICAgICAgIHNldF9mYWtlX2JyZWFrcG9pbnQoKTsKCiAgICAgICAgIyBTZXQgYSBmbGFnIGluZGljYXRpbmcgaWYgd2UgbmVlZCB0byBicmVhayBvcGVuIHRvIGtlZXAgLWxwCiAgICAgICAgIyBpdGVtcyBhbGlnbmVkLiAgVGhpcyBpcyBuZWNlc3NhcnkgaWYgYW55IG9mIHRoZSBsaXN0IHRlcm1zCiAgICAgICAgIyBleGNlZWRzIHRoZSBhdmFpbGFibGUgc3BhY2UgYWZ0ZXIgdGhlICcoJy4KICAgICAgICBteSAkbmVlZF9scF9icmVha19vcGVuID0gJG11c3RfYnJlYWtfb3BlbjsKICAgICAgICBteSAkaXNfbHBfZm9ybWF0dGluZyAgID0gcmVmKCAkbGVhZGluZ19zcGFjZXNfdG9fZ29bJGlfZmlyc3RfY29tbWFdICk7CiAgICAgICAgaWYgKCAkaXNfbHBfZm9ybWF0dGluZyAmJiAhJG11c3RfYnJlYWtfb3BlbiApIHsKICAgICAgICAgICAgbXkgJGNvbHVtbnNfaWZfdW5icm9rZW4gPQogICAgICAgICAgICAgICRtYXhpbXVtX2xpbmVfbGVuZ3RoX2F0X2xldmVsWyAkbGV2ZWxzX3RvX2dvWyRpX29wZW5pbmdfbWludXNdIF0KICAgICAgICAgICAgICAtIHRvdGFsX2xpbmVfbGVuZ3RoKCAkaV9vcGVuaW5nX21pbnVzLCAkaV9vcGVuaW5nX3BhcmVuICk7CiAgICAgICAgICAgICRuZWVkX2xwX2JyZWFrX29wZW4gPQogICAgICAgICAgICAgICAgICggJHJtYXhfbGVuZ3RoLT5bMF0gPiAkY29sdW1uc19pZl91bmJyb2tlbiApCiAgICAgICAgICAgICAgfHwgKCAkcm1heF9sZW5ndGgtPlsxXSA+ICRjb2x1bW5zX2lmX3VuYnJva2VuICkKICAgICAgICAgICAgICB8fCAoICRmaXJzdF90ZXJtX2xlbmd0aCA+ICRjb2x1bW5zX2lmX3VuYnJva2VuICk7CiAgICAgICAgfQoKICAgICAgICBteSAkaGFzaF9CID0KICAgICAgICAgICRzZWxmLT50YWJsZV9sYXlvdXRfQiggJHJoYXNoX0lOLCAkcmhhc2hfQSwgJGlzX2xwX2Zvcm1hdHRpbmcgKTsKICAgICAgICByZXR1cm4gaWYgKCAhZGVmaW5lZCgkaGFzaF9CKSApOwoKICAgICAgICAjIFVwZGF0ZWQgdmFyaWFibGVzCiAgICAgICAgJGlfZmlyc3RfY29tbWEgICA9ICRoYXNoX0ItPntfaV9maXJzdF9jb21tYV9CfTsKICAgICAgICAkaV9vcGVuaW5nX3BhcmVuID0gJGhhc2hfQi0+e19pX29wZW5pbmdfcGFyZW5fQn07CiAgICAgICAgJGl0ZW1fY291bnQgICAgICA9ICRoYXNoX0ItPntfaXRlbV9jb3VudF9CfTsKCiAgICAgICAgIyBOZXcgdmFyaWFibGVzCiAgICAgICAgbXkgJGNvbHVtbnMgICAgICAgICAgICAgID0gJGhhc2hfQi0+e19jb2x1bW5zfTsKICAgICAgICBteSAkZm9ybWF0dGVkX2NvbHVtbnMgICAgPSAkaGFzaF9CLT57X2Zvcm1hdHRlZF9jb2x1bW5zfTsKICAgICAgICBteSAkZm9ybWF0dGVkX2xpbmVzICAgICAgPSAkaGFzaF9CLT57X2Zvcm1hdHRlZF9saW5lc307CiAgICAgICAgbXkgJG1heF93aWR0aCAgICAgICAgICAgID0gJGhhc2hfQi0+e19tYXhfd2lkdGh9OwogICAgICAgIG15ICRuZXdfaWRlbnRpZmllcl9jb3VudCA9ICRoYXNoX0ItPntfbmV3X2lkZW50aWZpZXJfY291bnR9OwogICAgICAgIG15ICRudW1iZXJfb2ZfZmllbGRzICAgICA9ICRoYXNoX0ItPntfbnVtYmVyX29mX2ZpZWxkc307CiMjICAgICAgbXkgJG9kZF9vcl9ldmVuICAgICAgICAgICAgID0gJGhhc2hfQi0+e19vZGRfb3JfZXZlbn07CiAgICAgICAgbXkgJHBhY2tlZF9jb2x1bW5zICAgICAgICAgID0gJGhhc2hfQi0+e19wYWNrZWRfY29sdW1uc307CiAgICAgICAgbXkgJHBhY2tlZF9saW5lcyAgICAgICAgICAgID0gJGhhc2hfQi0+e19wYWNrZWRfbGluZXN9OwogICAgICAgIG15ICRwYWlyX3dpZHRoICAgICAgICAgICAgICA9ICRoYXNoX0ItPntfcGFpcl93aWR0aH07CiAgICAgICAgbXkgJHJpX3JhZ2dlZF9icmVha19saXN0ICAgID0gJGhhc2hfQi0+e19yaV9yYWdnZWRfYnJlYWtfbGlzdH07CiAgICAgICAgbXkgJHVzZV9zZXBhcmF0ZV9maXJzdF90ZXJtID0gJGhhc2hfQi0+e191c2Vfc2VwYXJhdGVfZmlyc3RfdGVybX07CgogICAgICAgICMgYXJlIHdlIGFuIGl0ZW0gY29udGFpbmVkIGluIGFuIG91dGVyIGxpc3Q/CiAgICAgICAgbXkgJGluX2hpZXJhcmNoaWNhbF9saXN0ID0gJG5leHRfbm9uYmxhbmtfdHlwZSA9fiAvXltcfVwsXSQvOwoKICAgICAgICBteSAkdW51c2VkX2NvbHVtbnMgPSAkZm9ybWF0dGVkX2NvbHVtbnMgLSAkcGFja2VkX2NvbHVtbnM7CgogICAgICAgICMgc2V0IHNvbWUgZW1waXJpY2FsIHBhcmFtZXRlcnMgdG8gaGVscCBkZWNpZGUgaWYgd2Ugc2hvdWxkIHRyeSB0bwogICAgICAgICMgYWxpZ247IGhpZ2ggc3BhcnNpdHkgZG9lcyBub3QgbG9vayBnb29kLCBlc3BlY2lhbGx5IHdpdGggZmV3IGxpbmVzCiAgICAgICAgbXkgJHNwYXJzaXR5ID0gKCR1bnVzZWRfY29sdW1ucykgLyAoJGZvcm1hdHRlZF9jb2x1bW5zKTsKICAgICAgICBteSAkbWF4X2FsbG93ZWRfc3BhcnNpdHkgPQogICAgICAgICAgICAoICRpdGVtX2NvdW50IDwgMyApICAgID8gMC4xCiAgICAgICAgICA6ICggJHBhY2tlZF9saW5lcyA9PSAxICkgPyAwLjE1CiAgICAgICAgICA6ICggJHBhY2tlZF9saW5lcyA9PSAyICkgPyAwLjQKICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgIDAuNzsKCiAgICAgICAgbXkgJHR3b19saW5lX3dvcmRfd3JhcF9vazsKICAgICAgICBpZiAoICRvcGVuaW5nX3Rva2VuIGVxICcoJyApIHsKCiAgICAgICAgICAgICMgZGVmYXVsdCBpcyB0byBhbGxvdyB3cmFwcGluZyBvZiBzaG9ydCBwYXJlbiBsaXN0cwogICAgICAgICAgICAkdHdvX2xpbmVfd29yZF93cmFwX29rID0gMTsKCiAgICAgICAgICAgICMgYnV0IHR1cm4gb2ZmIHdvcmQgd3JhcCB3aGVyZSByZXF1ZXN0ZWQKICAgICAgICAgICAgaWYgKCRyT3B0c19icmVha19vcGVuX2NvbXBhY3RfcGFyZW5zKSB7CgogICAgICAgICAgICAgICAgIyBUaGlzIHBhcmFtZXRlciBpcyBhIG9uZS1jaGFyYWN0ZXIgZmxhZywgYXMgZm9sbG93czoKICAgICAgICAgICAgICAgICMgICcwJyBtYXRjaGVzIG5vIHBhcmVucyAgLT4gYnJlYWsgb3BlbiBOT1QgT0sgLT4gd29yZCB3cmFwIE9LCiAgICAgICAgICAgICAgICAjICAnMScgbWF0Y2hlcyBhbGwgcGFyZW5zIC0+IGJyZWFrIG9wZW4gT0sgLT4gd29yZCB3cmFwIE5PVCBPSwogICAgICAgICAgICAgICAgIyAgT3RoZXIgdmFsdWVzIGFyZSB0aGUgc2FtZSBhcyB1c2VkIGJ5IHRoZSB3ZWxkLWV4Y2x1c2lvbi1saXN0CiAgICAgICAgICAgICAgICBteSAkZmxhZyA9ICRyT3B0c19icmVha19vcGVuX2NvbXBhY3RfcGFyZW5zOwogICAgICAgICAgICAgICAgaWYgKCAgICRmbGFnIGVxICcqJwogICAgICAgICAgICAgICAgICAgIHx8ICRmbGFnIGVxICcxJyApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJHR3b19saW5lX3dvcmRfd3JhcF9vayA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoICRmbGFnIGVxICcwJyApIHsKICAgICAgICAgICAgICAgICAgICAkdHdvX2xpbmVfd29yZF93cmFwX29rID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIG15ICRzZXFubyA9ICR0eXBlX3NlcXVlbmNlX3RvX2dvWyRpX29wZW5pbmdfcGFyZW5dOwogICAgICAgICAgICAgICAgICAgICR0d29fbGluZV93b3JkX3dyYXBfb2sgPQogICAgICAgICAgICAgICAgICAgICAgISRzZWxmLT5tYXRjaF9wYXJlbl9jb250cm9sX2ZsYWcoICRzZXFubywgJGZsYWcgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIFNlY3Rpb24gQjI6IENoZWNrIGZvciBzaG9ydGN1dCBtZXRob2RzLCB3aGljaCBhdm9pZCB0cmVhdGluZwogICAgICAgICMgYSBsaXN0IGFzIGEgdGFibGUgZm9yIHJlbGF0aXZlbHkgc21hbGwgcGFyZW50aGVzaXplZCBsaXN0cy4gIFRoZXNlCiAgICAgICAgIyBhcmUgdXN1YWxseSBlYXNpZXIgdG8gcmVhZCBpZiBub3QgZm9ybWF0dGVkIGFzIHRhYmxlcy4KICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGlmICgKICAgICAgICAgICAgJHBhY2tlZF9saW5lcyA8PSAyICAgICAgICAgICAjIHByb2JhYmx5IGNhbiBmaXQgaW4gMiBsaW5lcwogICAgICAgICAgICAmJiAkaXRlbV9jb3VudCA8IDkgICAgICAgICAgICMgZG9lc24ndCBoYXZlIHRvbyBtYW55IGl0ZW1zCiAgICAgICAgICAgICYmICRvcGVuaW5nX2lzX2luX2Jsb2NrICAgICAgIyBub3QgYSBzdWItY29udGFpbmVyCiAgICAgICAgICAgICYmICR0d29fbGluZV93b3JkX3dyYXBfb2sgICAgIyBvayB0byB3cmFwIHRoaXMgcGFyZW4gbGlzdAogICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgU2VjdGlvbiBCMkE6IFNob3J0Y3V0IG1ldGhvZCAxOiBmb3IgLWxwIGFuZCBqdXN0IG9uZSBjb21tYToKICAgICAgICAgICAgIyBUaGlzIGlzIGEgbm8tYnJhaW5lciwganVzdCBicmVhayBhdCB0aGUgY29tbWEuCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRpc19scF9mb3JtYXR0aW5nICAgICAgIyAtbHAKICAgICAgICAgICAgICAgICYmICRpdGVtX2NvdW50ID09IDIgICAgIyB0d28gaXRlbXMsIG9uZSBjb21tYQogICAgICAgICAgICAgICAgJiYgISRtdXN0X2JyZWFrX29wZW4KICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG15ICRpX2JyZWFrID0gJHJjb21tYV9pbmRleC0+WzBdOwogICAgICAgICAgICAgICAgJHNlbGYtPnNldF9mb3JjZWRfYnJlYWtwb2ludCgkaV9icmVhayk7CiAgICAgICAgICAgICAgICAkeyRyZG9fbm90X2JyZWFrX2FwYXJ0fSA9IDE7CiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFNlY3Rpb24gQjJCOiBTaG9ydGN1dCBtZXRob2QgMiBpcyBmb3IgbW9zdCBzbWFsbCByYWdnZWQgbGlzdHMKICAgICAgICAgICAgIyB3aGljaCBtaWdodCBsb29rIGJlc3QgaWYgbm90IGRpc3BsYXllZCBhcyBhIHRhYmxlLgogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAoICRudW1iZXJfb2ZfZmllbGRzID09IDIgJiYgJGl0ZW1fY291bnQgPT0gMyApCiAgICAgICAgICAgICAgICB8fCAoCiAgICAgICAgICAgICAgICAgICAgJG5ld19pZGVudGlmaWVyX2NvdW50ID4gMCAgICAjIGlzbid0IGFsbCBxdW90ZXMKICAgICAgICAgICAgICAgICAgICAmJiAkc3BhcnNpdHkgPiAwLjE1CiAgICAgICAgICAgICAgICApICAgICMgd291bGQgYmUgZmFpcmx5IHNwYWNlZCBnYXBzIGlmIGFsaWduZWQKICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICBteSAkYnJlYWtfY291bnQgPSAkc2VsZi0+c2V0X3JhZ2dlZF9icmVha3BvaW50cyggJHJpX3Rlcm1fY29tbWEsCiAgICAgICAgICAgICAgICAgICAgJHJpX3JhZ2dlZF9icmVha19saXN0ICk7CiAgICAgICAgICAgICAgICArKyRicmVha19jb3VudCBpZiAoJHVzZV9zZXBhcmF0ZV9maXJzdF90ZXJtKTsKCiAgICAgICAgICAgICAgICAjIE5PVEU6IHdlIHNob3VsZCByZWFsbHkgdXNlIHRoZSB0cnVlIGJyZWFrIGNvdW50IGhlcmUsCiAgICAgICAgICAgICAgICAjIHdoaWNoIGNhbiBiZSBncmVhdGVyIGlmIHRoZXJlIGFyZSBsYXJnZSB0ZXJtcyBhbmQKICAgICAgICAgICAgICAgICMgbGl0dGxlIHNwYWNlLCBidXQgdXN1YWxseSB0aGlzIHdpbGwgd29yayB3ZWxsIGVub3VnaC4KICAgICAgICAgICAgICAgIGlmICggISRtdXN0X2JyZWFrX29wZW4gKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkYnJlYWtfY291bnQgPD0gMQogICAgICAgICAgICAgICAgICAgICAgICB8fCAoICRpc19scF9mb3JtYXR0aW5nICYmICEkbmVlZF9scF9icmVha19vcGVuICkgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHskcmRvX25vdF9icmVha19hcGFydH0gPSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICB9ICMjIGVuZCBzaG9ydGN1dCBtZXRob2RzCgogICAgICAgICMgZGVidWcgc3R1ZmYKICAgICAgICBERUJVR19TUEFSU0UgJiYgZG8gewoKICAgICAgICAgICAgIyBIb3cgbWFueSBzcGFjZXMgYWNyb3NzIHRoZSBwYWdlIHdpbGwgd2UgZmlsbD8KICAgICAgICAgICAgbXkgJGNvbHVtbnNfcGVyX2xpbmUgPQogICAgICAgICAgICAgIGludCggJG51bWJlcl9vZl9maWVsZHMgLyAyICkgKiAkcGFpcl93aWR0aCArCiAgICAgICAgICAgICAgKCAkbnVtYmVyX29mX2ZpZWxkcyAlIDIgKSAqICRtYXhfd2lkdGg7CgogICAgICAgICAgICBwcmludCB7KlNURE9VVH0KIlNQQVJTRTpjb2xzPSRjb2x1bW5zIGNvbW1hcz0kY29tbWFfY291bnQgaXRlbXM6JGl0ZW1fY291bnQgaWRzPSRpZGVudGlmaWVyX2NvdW50IHBhaXJ3aWR0aD0kcGFpcl93aWR0aCBmaWVsZHM9JG51bWJlcl9vZl9maWVsZHMgbGluZXMgcGFja2VkOiAkcGFja2VkX2xpbmVzIHBhY2tlZF9jb2xzPSRwYWNrZWRfY29sdW1ucyBmbXRkOiRmb3JtYXR0ZWRfbGluZXMgY29scyAvbGluZTokY29sdW1uc19wZXJfbGluZSAgdW51c2VkOiR1bnVzZWRfY29sdW1ucyBmbXRkOiRmb3JtYXR0ZWRfY29sdW1ucyBzcGFyc2l0eT0kc3BhcnNpdHkgYWxsb3c9JG1heF9hbGxvd2VkX3NwYXJzaXR5XG4iOwoKICAgICAgICB9OwoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBTZWN0aW9uIEIzOiBDb21wb3VuZCBMaXN0IFJ1bGUgMjoKICAgICAgICAjIElmIHRoaXMgbGlzdCBpcyB0b28gbG9uZyBmb3Igb25lIGxpbmUsIGFuZCBpdCBpcyBhbiBpdGVtIG9mIGEKICAgICAgICAjIGxhcmdlciBsaXN0LCB0aGVuIHdlIG11c3QgZm9ybWF0IGl0LCByZWdhcmRsZXNzIG9mIHNwYXJzaXR5CiAgICAgICAgIyAoaWFuLnQpLiAgT25lIHJlYXNvbiB0aGF0IHdlIGhhdmUgdG8gZG8gdGhpcyBpcyB0byB0cmlnZ2VyCiAgICAgICAgIyBDb21wb3VuZCBMaXN0IFJ1bGUgMSwgYWJvdmUsIHdoaWNoIGNhdXNlcyBicmVha3MgYXQgYWxsIGNvbW1hcyBvZgogICAgICAgICMgYWxsIG91dGVyIGxpc3RzLiAgSW4gdGhpcyB3YXksIHRoZSBzdHJ1Y3R1cmUgd2lsbCBiZSBwcm9wZXJseQogICAgICAgICMgZGlzcGxheWVkLgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgIyBEZWNpZGUgaWYgdGhpcyBsaXN0IGlzIHRvbyBsb25nIGZvciBvbmUgbGluZSB1bmxlc3MgYnJva2VuCiAgICAgICAgbXkgJHRvdGFsX2NvbHVtbnMgPSB0YWJsZV9jb2x1bW5zX2F2YWlsYWJsZSgkaV9vcGVuaW5nX3BhcmVuKTsKICAgICAgICBteSAkdG9vX2xvbmcgICAgICA9ICRwYWNrZWRfY29sdW1ucyA+ICR0b3RhbF9jb2x1bW5zOwoKICAgICAgICAjIEZvciBhIHBhcmVuIGxpc3QsIGluY2x1ZGUgdGhlIGxlbmd0aCBvZiB0aGUgdG9rZW4ganVzdCBiZWZvcmUgdGhlCiAgICAgICAgIyAnKCcgYmVjYXVzZSB0aGlzIGlzIGxpa2VseSBhIHN1YiBjYWxsLCBhbmQgd2Ugd291bGQgaGF2ZSB0bwogICAgICAgICMgaW5jbHVkZSB0aGUgc3ViIG5hbWUgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgbGlzdC4gIFRoaXMgaXMgc3RpbGwKICAgICAgICAjIGltcHJlY2lzZSwgYnV0IG5vdCB0b28gYmFkLiAgKHN0ZXZlLnQpCiAgICAgICAgaWYgKCAhJHRvb19sb25nICYmICRpX29wZW5pbmdfcGFyZW4gPiAwICYmICRvcGVuaW5nX3Rva2VuIGVxICcoJyApIHsKCiAgICAgICAgICAgICR0b29fbG9uZyA9ICRzZWxmLT5leGNlc3NfbGluZV9sZW5ndGgoICRpX29wZW5pbmdfbWludXMsCiAgICAgICAgICAgICAgICAkaV9lZmZlY3RpdmVfbGFzdF9jb21tYSArIDEgKSA+IDA7CiAgICAgICAgfQoKICAgICAgICAjIFRPRE86IEZvciBhbiBpdGVtIGFmdGVyIGEgJz0+JywgdHJ5IHRvIGluY2x1ZGUgdGhlIGxlbmd0aCBvZiB0aGUKICAgICAgICAjIHRoaW5nIGJlZm9yZSB0aGUgJz0+Jy4gIFRoaXMgaXMgY3J1ZGUgYW5kIHNob3VsZCBiZSBpbXByb3ZlZCBieQogICAgICAgICMgYWN0dWFsbHkgbG9va2luZyBiYWNrIHRva2VuIGJ5IHRva2VuLgogICAgICAgIGlmICggISR0b29fbG9uZyAmJiAkaV9vcGVuaW5nX3BhcmVuID4gMCAmJiAkbGlzdF90eXBlIGVxICc9PicgKSB7CiAgICAgICAgICAgIG15ICRpX29wZW5pbmdfbWludXNfdGVzdCA9ICRpX29wZW5pbmdfcGFyZW4gLSA0OwogICAgICAgICAgICBpZiAoICRpX29wZW5pbmdfbWludXNfdGVzdCA+PSAwICkgewogICAgICAgICAgICAgICAgJHRvb19sb25nID0gJHNlbGYtPmV4Y2Vzc19saW5lX2xlbmd0aCggJGlfb3BlbmluZ19taW51c190ZXN0LAogICAgICAgICAgICAgICAgICAgICRpX2VmZmVjdGl2ZV9sYXN0X2NvbW1hICsgMSApID4gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBBbHdheXMgYnJlYWsgbGlzdHMgY29udGFpbmVkIGluICdbJyBhbmQgJ3snIGlmIHRvbyBsb25nIGZvciAxIGxpbmUsCiAgICAgICAgIyBhbmQgYWx3YXlzIGJyZWFrIGxpc3RzIHdoaWNoIGFyZSB0b28gbG9uZyBhbmQgcGFydCBvZiBhIG1vcmUgY29tcGxleAogICAgICAgICMgc3RydWN0dXJlLgogICAgICAgIG15ICRtdXN0X2JyZWFrX29wZW5fY29udGFpbmVyID0gJG11c3RfYnJlYWtfb3BlbgogICAgICAgICAgfHwgKCAkdG9vX2xvbmcKICAgICAgICAgICAgJiYgKCAkaW5faGllcmFyY2hpY2FsX2xpc3QgfHwgISR0d29fbGluZV93b3JkX3dyYXBfb2sgKSApOwoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIFNlY3Rpb24gQjQ6IEEgdGFibGUgd2lsbCB3b3JrIGhlcmUuIEJ1dCBkbyBub3QgYXR0ZW1wdCB0byBhbGlnbgogICAgICAgICMgY29sdW1ucyBpZiB0aGlzIGlzIGEgdGlueSB0YWJsZSBvciBpdCB3b3VsZCBiZSB0b28gc3BhY2VkLiAgSXQKICAgICAgICAjIHNlZW1zIHRoYXQgdGhlIG1vcmUgcGFja2VkIGxpbmVzIHdlIGhhdmUsIHRoZSBzcGFyc2VyIHRoZSBsaXN0IHRoYXQKICAgICAgICAjIGNhbiBiZSBhbGxvd2VkIGFuZCBzdGlsbCBsb29rIG9rLgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICBpZiAoICAgKCAkZm9ybWF0dGVkX2xpbmVzIDwgMyAmJiAkcGFja2VkX2xpbmVzIDwgJGZvcm1hdHRlZF9saW5lcyApCiAgICAgICAgICAgIHx8ICggJGZvcm1hdHRlZF9saW5lcyA8IDIgKQogICAgICAgICAgICB8fCAoICR1bnVzZWRfY29sdW1ucyA+ICRtYXhfYWxsb3dlZF9zcGFyc2l0eSAqICRmb3JtYXR0ZWRfY29sdW1ucyApCiAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIFNlY3Rpb24gQjRBOiB0b28gc3BhcnNlOiB3b3VsZCBub3QgbG9vayBnb29kIGFsaWduZWQgaW4gYSB0YWJsZQogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAgICAgIyB1c2Ugb2xkIGJyZWFrcG9pbnRzIGlmIHRoaXMgaXMgYSAnYmlnJyBsaXN0CiAgICAgICAgICAgIGlmICggJHBhY2tlZF9saW5lcyA+IDIgJiYgJGl0ZW1fY291bnQgPiAxMCApIHsKICAgICAgICAgICAgICAgIHdyaXRlX2xvZ2ZpbGVfZW50cnkoIkxpc3Qgc3BhcnNlOiB1c2luZyBvbGQgYnJlYWtwb2ludHNcbiIpOwogICAgICAgICAgICAgICAgJHNlbGYtPmNvcHlfb2xkX2JyZWFrcG9pbnRzKCAkaV9maXJzdF9jb21tYSwgJGlfbGFzdF9jb21tYSApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGxldCB0aGUgY29udGludWF0aW9uIGxvZ2ljIGhhbmRsZSBpdCBpZiAyIGxpbmVzCiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgIG15ICRicmVha19jb3VudCA9ICRzZWxmLT5zZXRfcmFnZ2VkX2JyZWFrcG9pbnRzKCAkcmlfdGVybV9jb21tYSwKICAgICAgICAgICAgICAgICAgICAkcmlfcmFnZ2VkX2JyZWFrX2xpc3QgKTsKICAgICAgICAgICAgICAgICsrJGJyZWFrX2NvdW50IGlmICgkdXNlX3NlcGFyYXRlX2ZpcnN0X3Rlcm0pOwoKICAgICAgICAgICAgICAgIGlmICggISRtdXN0X2JyZWFrX29wZW5fY29udGFpbmVyICkgewogICAgICAgICAgICAgICAgICAgIGlmICggJGJyZWFrX2NvdW50IDw9IDEKICAgICAgICAgICAgICAgICAgICAgICAgfHwgKCAkaXNfbHBfZm9ybWF0dGluZyAmJiAhJG5lZWRfbHBfYnJlYWtfb3BlbiApICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICR7JHJkb19ub3RfYnJlYWtfYXBhcnR9ID0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBTZWN0aW9uIEI0QjogR28gYWhlYWQgYW5kIGZvcm1hdCBhcyBhIHRhYmxlCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgJHNlbGYtPndyaXRlX2Zvcm1hdHRlZF90YWJsZSggJG51bWJlcl9vZl9maWVsZHMsICRjb21tYV9jb3VudCwKICAgICAgICAgICAgJHJjb21tYV9pbmRleCwgJHVzZV9zZXBhcmF0ZV9maXJzdF90ZXJtICk7CgogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBicmVha19tdWx0aWxpbmVfbGlzdAoKICAgIHN1YiB0YWJsZV9sYXlvdXRfQSB7CgogICAgICAgIG15ICgkcmhhc2hfSU4pID0gQF87CgogICAgICAgICMgRmluZCBsZW5ndGhzIG9mIGFsbCBsaXN0IGl0ZW1zIG5lZWRlZCB0byBjYWxjdWxhdGUgcGFnZSBsYXlvdXQKCiAgICAgICAgIyBSZXR1cm5zOgogICAgICAgICMgICAgLSBub3RoaW5nIGlmIHRoaXMgbGlzdCBpcyBlbXB0eSwgb3IKICAgICAgICAjICAgIC0gYSByZWYgdG8gYSBoYXNoIGNvbnRhaW5pbmcgc29tZSBkZXJpdmVkIHBhcmFtZXRlcnMKCiAgICAgICAgbXkgJGlfb3BlbmluZ19wYXJlbiAgPSAkcmhhc2hfSU4tPntpX29wZW5pbmdfcGFyZW59OwogICAgICAgIG15ICRpX2Nsb3NpbmdfcGFyZW4gID0gJHJoYXNoX0lOLT57aV9jbG9zaW5nX3BhcmVufTsKICAgICAgICBteSAkaWRlbnRpZmllcl9jb3VudCA9ICRyaGFzaF9JTi0+e2lkZW50aWZpZXJfY291bnR9OwogICAgICAgIG15ICRyY29tbWFfaW5kZXggICAgID0gJHJoYXNoX0lOLT57cmNvbW1hX2luZGV4fTsKICAgICAgICBteSAkaXRlbV9jb3VudCAgICAgICA9ICRyaGFzaF9JTi0+e2l0ZW1fY291bnR9OwoKICAgICAgICAjIG5vdGhpbmcgdG8gZG8gaWYgbm8gY29tbWFzIHNlZW4KICAgICAgICByZXR1cm4gaWYgKCAkaXRlbV9jb3VudCA8IDEgKTsKCiAgICAgICAgbXkgJGlfZmlyc3RfY29tbWEgICAgID0gJHJjb21tYV9pbmRleC0+WzBdOwogICAgICAgIG15ICRpX3RydWVfbGFzdF9jb21tYSA9ICRyY29tbWFfaW5kZXgtPlsgJGl0ZW1fY291bnQgLSAxIF07CiAgICAgICAgbXkgJGlfbGFzdF9jb21tYSAgICAgID0gJGlfdHJ1ZV9sYXN0X2NvbW1hOwogICAgICAgIGlmICggJGlfbGFzdF9jb21tYSA+PSAkbWF4X2luZGV4X3RvX2dvICkgewogICAgICAgICAgICAkaXRlbV9jb3VudCAtPSAxOwogICAgICAgICAgICByZXR1cm4gaWYgKCAkaXRlbV9jb3VudCA8IDEgKTsKICAgICAgICAgICAgJGlfbGFzdF9jb21tYSA9ICRyY29tbWFfaW5kZXgtPlsgJGl0ZW1fY291bnQgLSAxIF07CiAgICAgICAgfQoKICAgICAgICBteSAkY29tbWFfY291bnQgPSAkaXRlbV9jb3VudDsKCiAgICAgICAgbXkgJHJpdGVtX2xlbmd0aHMgPSBbXTsKICAgICAgICBteSAkcmlfdGVybV9iZWdpbiA9IFtdOwogICAgICAgIG15ICRyaV90ZXJtX2VuZCAgID0gW107CiAgICAgICAgbXkgJHJpX3Rlcm1fY29tbWEgPSBbXTsKCiAgICAgICAgbXkgJHJtYXhfbGVuZ3RoID0gWyAwLCAwIF07CgogICAgICAgIG15ICRpX3ByZXZfcGx1czsKICAgICAgICBteSAkZmlyc3RfdGVybV9sZW5ndGg7CiAgICAgICAgbXkgJGkgICAgICA9ICRpX29wZW5pbmdfcGFyZW47CiAgICAgICAgbXkgJGlzX29kZCA9IDE7CgogICAgICAgIGZvcmVhY2ggbXkgJGogKCAwIC4uICRjb21tYV9jb3VudCAtIDEgKSB7CiAgICAgICAgICAgICRpc19vZGQgICAgICA9IDEgLSAkaXNfb2RkOwogICAgICAgICAgICAkaV9wcmV2X3BsdXMgPSAkaSArIDE7CiAgICAgICAgICAgICRpICAgICAgICAgICA9ICRyY29tbWFfaW5kZXgtPlskal07CgogICAgICAgICAgICBteSAkaV90ZXJtX2VuZCA9CiAgICAgICAgICAgICAgKCAkaSA9PSAwIHx8ICR0eXBlc190b19nb1sgJGkgLSAxIF0gZXEgJ2InICkKICAgICAgICAgICAgICA/ICRpIC0gMgogICAgICAgICAgICAgIDogJGkgLSAxOwogICAgICAgICAgICBteSAkaV90ZXJtX2JlZ2luID0KICAgICAgICAgICAgICAoICR0eXBlc190b19nb1skaV9wcmV2X3BsdXNdIGVxICdiJyApCiAgICAgICAgICAgICAgPyAkaV9wcmV2X3BsdXMgKyAxCiAgICAgICAgICAgICAgOiAkaV9wcmV2X3BsdXM7CiAgICAgICAgICAgIHB1c2ggQHskcmlfdGVybV9iZWdpbn0sICRpX3Rlcm1fYmVnaW47CiAgICAgICAgICAgIHB1c2ggQHskcmlfdGVybV9lbmR9LCAgICRpX3Rlcm1fZW5kOwogICAgICAgICAgICBwdXNoIEB7JHJpX3Rlcm1fY29tbWF9LCAkaTsKCiAgICAgICAgICAgICMgbm90ZTogY3VycmVudGx5IGFkZGluZyAyIHRvIGFsbCBsZW5ndGhzIChmb3IgY29tbWEgYW5kIHNwYWNlKQogICAgICAgICAgICBteSAkbGVuZ3RoID0KICAgICAgICAgICAgICAyICsgdG9rZW5fc2VxdWVuY2VfbGVuZ3RoKCAkaV90ZXJtX2JlZ2luLCAkaV90ZXJtX2VuZCApOwogICAgICAgICAgICBwdXNoIEB7JHJpdGVtX2xlbmd0aHN9LCAkbGVuZ3RoOwoKICAgICAgICAgICAgaWYgKCAkaiA9PSAwICkgewogICAgICAgICAgICAgICAgJGZpcnN0X3Rlcm1fbGVuZ3RoID0gJGxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICBpZiAoICRsZW5ndGggPiAkcm1heF9sZW5ndGgtPlskaXNfb2RkXSApIHsKICAgICAgICAgICAgICAgICAgICAkcm1heF9sZW5ndGgtPlskaXNfb2RkXSA9ICRsZW5ndGg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgbm93IHdlIGhhdmUgdG8gbWFrZSBhIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlIGNvbW1hIGNvdW50IGFuZCBpdGVtCiAgICAgICAgIyBjb3VudCwgYmVjYXVzZSB0aGUgaXRlbSBjb3VudCB3aWxsIGJlIG9uZSBncmVhdGVyIHRoYW4gdGhlIGNvbW1hCiAgICAgICAgIyBjb3VudCBpZiB0aGUgbGFzdCBpdGVtIGlzIG5vdCB0ZXJtaW5hdGVkIHdpdGggYSBjb21tYQogICAgICAgIG15ICRpX2IgPQogICAgICAgICAgKCAkdHlwZXNfdG9fZ29bICRpX2xhc3RfY29tbWEgKyAxIF0gZXEgJ2InICkKICAgICAgICAgID8gJGlfbGFzdF9jb21tYSArIDEKICAgICAgICAgIDogJGlfbGFzdF9jb21tYTsKCiAgICAgICAgIyBOT1RFOiAkaV9jbG9zaW5nX3BhcmVuID0gJG1heF9pbmRleF90b19nbysxIGZvciBhIGxpc3Qgd2hpY2ggZG9lcwogICAgICAgICMgbm90IGVuZCBpbiBhIGNsb3NpbmcgcGFyZW4uIFNvIHRoZSBmb2xsb3dpbmcgdGVzdCB3b3JrcyAoYzQxMCkKICAgICAgICBteSAkaV9lID0KICAgICAgICAgICggJHR5cGVzX3RvX2dvWyAkaV9jbG9zaW5nX3BhcmVuIC0gMSBdIGVxICdiJyApCiAgICAgICAgICA/ICRpX2Nsb3NpbmdfcGFyZW4gLSAyCiAgICAgICAgICA6ICRpX2Nsb3NpbmdfcGFyZW4gLSAxOwogICAgICAgIG15ICRpX2VmZmVjdGl2ZV9sYXN0X2NvbW1hID0gJGlfbGFzdF9jb21tYTsKCiAgICAgICAgbXkgJGxhc3RfaXRlbV9sZW5ndGggPSB0b2tlbl9zZXF1ZW5jZV9sZW5ndGgoICRpX2IgKyAxLCAkaV9lICk7CgogICAgICAgIGlmICggJGxhc3RfaXRlbV9sZW5ndGggPiAwICkgewoKICAgICAgICAgICAgIyBhZGQgMiB0byBsZW5ndGggYmVjYXVzZSBvdGhlciBsZW5ndGhzIGluY2x1ZGUgYSBjb21tYSBhbmQgYSBibGFuawogICAgICAgICAgICAkbGFzdF9pdGVtX2xlbmd0aCArPSAyOwogICAgICAgICAgICBwdXNoIEB7JHJpdGVtX2xlbmd0aHN9LCAkbGFzdF9pdGVtX2xlbmd0aDsKICAgICAgICAgICAgcHVzaCBAeyRyaV90ZXJtX2JlZ2lufSwgJGlfYiArIDE7CiAgICAgICAgICAgIHB1c2ggQHskcmlfdGVybV9lbmR9LCAgICRpX2U7CiAgICAgICAgICAgIHB1c2ggQHskcmlfdGVybV9jb21tYX0sIHVuZGVmOwoKICAgICAgICAgICAgbXkgJGlfb2RkID0gJGl0ZW1fY291bnQgJSAyOwoKICAgICAgICAgICAgaWYgKCAkbGFzdF9pdGVtX2xlbmd0aCA+ICRybWF4X2xlbmd0aC0+WyRpX29kZF0gKSB7CiAgICAgICAgICAgICAgICAkcm1heF9sZW5ndGgtPlskaV9vZGRdID0gJGxhc3RfaXRlbV9sZW5ndGg7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRpdGVtX2NvdW50Kys7CiAgICAgICAgICAgICRpX2VmZmVjdGl2ZV9sYXN0X2NvbW1hID0gJGlfZSArIDE7CgogICAgICAgICAgICBpZiAoICR0eXBlc190b19nb1sgJGlfYiArIDEgXSA9fiAvXltpUlxdXSQvICkgewogICAgICAgICAgICAgICAgJGlkZW50aWZpZXJfY291bnQrKzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBiZSBzdXJlIHdlIGRvIG5vdCBleHRlbmQgYmV5b25kIHRoZSBjdXJyZW50IGxpc3QgbGVuZ3RoCiAgICAgICAgaWYgKCAkaV9lZmZlY3RpdmVfbGFzdF9jb21tYSA+PSAkbWF4X2luZGV4X3RvX2dvICkgewogICAgICAgICAgICAkaV9lZmZlY3RpdmVfbGFzdF9jb21tYSA9ICRtYXhfaW5kZXhfdG9fZ28gLSAxOwogICAgICAgIH0KCiAgICAgICAgIyBSZXR1cm4gdGhlIGhhc2ggb2YgZGVyaXZlZCB2YXJpYWJsZXMuCiAgICAgICAgcmV0dXJuIHsKCiAgICAgICAgICAgICMgVXBkYXRlZCB2YXJpYWJsZXMKICAgICAgICAgICAgX2l0ZW1fY291bnRfQSAgICAgICA9PiAkaXRlbV9jb3VudCwKICAgICAgICAgICAgX2lkZW50aWZpZXJfY291bnRfQSA9PiAkaWRlbnRpZmllcl9jb3VudCwKCiAgICAgICAgICAgICMgTmV3IHZhcmlhYmxlcwogICAgICAgICAgICBfcml0ZW1fbGVuZ3RocyAgICAgICAgICA9PiAkcml0ZW1fbGVuZ3RocywKICAgICAgICAgICAgX3JpX3Rlcm1fYmVnaW4gICAgICAgICAgPT4gJHJpX3Rlcm1fYmVnaW4sCiAgICAgICAgICAgIF9yaV90ZXJtX2VuZCAgICAgICAgICAgID0+ICRyaV90ZXJtX2VuZCwKICAgICAgICAgICAgX3JpX3Rlcm1fY29tbWEgICAgICAgICAgPT4gJHJpX3Rlcm1fY29tbWEsCiAgICAgICAgICAgIF9ybWF4X2xlbmd0aCAgICAgICAgICAgID0+ICRybWF4X2xlbmd0aCwKICAgICAgICAgICAgX2NvbW1hX2NvdW50ICAgICAgICAgICAgPT4gJGNvbW1hX2NvdW50LAogICAgICAgICAgICBfaV9lZmZlY3RpdmVfbGFzdF9jb21tYSA9PiAkaV9lZmZlY3RpdmVfbGFzdF9jb21tYSwKICAgICAgICAgICAgX2ZpcnN0X3Rlcm1fbGVuZ3RoICAgICAgPT4gJGZpcnN0X3Rlcm1fbGVuZ3RoLAogICAgICAgICAgICBfaV9maXJzdF9jb21tYSAgICAgICAgICA9PiAkaV9maXJzdF9jb21tYSwKICAgICAgICAgICAgX2lfbGFzdF9jb21tYSAgICAgICAgICAgPT4gJGlfbGFzdF9jb21tYSwKICAgICAgICAgICAgX2lfdHJ1ZV9sYXN0X2NvbW1hICAgICAgPT4gJGlfdHJ1ZV9sYXN0X2NvbW1hLAogICAgICAgIH07CgogICAgfSAjIyBlbmQgc3ViIHRhYmxlX2xheW91dF9BCgogICAgc3ViIHRhYmxlX2xheW91dF9CIHsKCiAgICAgICAgbXkgKCAkc2VsZiwgJHJoYXNoX0lOLCAkcmhhc2hfQSwgJGlzX2xwX2Zvcm1hdHRpbmcgKSA9IEBfOwoKICAgICAgICAjIERldGVybWluZSB2YXJpYWJsZXMgZm9yIHRoZSBiZXN0IHRhYmxlIGxheW91dCwgaW5jbHVkaW5nCiAgICAgICAgIyB0aGUgYmVzdCBudW1iZXIgb2YgZmllbGRzLgoKICAgICAgICAjIFJldHVybnM6CiAgICAgICAgIyAgICAtIG5vdGhpbmcgaWYgbm90aGluZyBtb3JlIHRvIGRvCiAgICAgICAgIyAgICAtIGEgcmVmIHRvIGEgaGFzaCBjb250YWluaW5nIHNvbWUgZGVyaXZlZCBwYXJhbWV0ZXJzCgogICAgICAgICMgVmFyaWFibGVzIGZyb20gY2FsbGVyCiAgICAgICAgbXkgJGlfb3BlbmluZ19wYXJlbiAgICAgPSAkcmhhc2hfSU4tPntpX29wZW5pbmdfcGFyZW59OwogICAgICAgIG15ICRsaXN0X3R5cGUgICAgICAgICAgID0gJHJoYXNoX0lOLT57bGlzdF90eXBlfTsKICAgICAgICBteSAkbmV4dF9ub25ibGFua190eXBlICA9ICRyaGFzaF9JTi0+e25leHRfbm9uYmxhbmtfdHlwZX07CiAgICAgICAgbXkgJHJjb21tYV9pbmRleCAgICAgICAgPSAkcmhhc2hfSU4tPntyY29tbWFfaW5kZXh9OwogICAgICAgIG15ICRyZG9fbm90X2JyZWFrX2FwYXJ0ID0gJHJoYXNoX0lOLT57cmRvX25vdF9icmVha19hcGFydH07CgogICAgICAgICMgVGFibGUgc2l6ZSB2YXJpYWJsZXMKICAgICAgICBteSAkY29tbWFfY291bnQgICAgICAgICAgICA9ICRyaGFzaF9BLT57X2NvbW1hX2NvdW50fTsKICAgICAgICBteSAkZmlyc3RfdGVybV9sZW5ndGggICAgICA9ICRyaGFzaF9BLT57X2ZpcnN0X3Rlcm1fbGVuZ3RofTsKICAgICAgICBteSAkaV9lZmZlY3RpdmVfbGFzdF9jb21tYSA9ICRyaGFzaF9BLT57X2lfZWZmZWN0aXZlX2xhc3RfY29tbWF9OwogICAgICAgIG15ICRpX2ZpcnN0X2NvbW1hICAgICAgICAgID0gJHJoYXNoX0EtPntfaV9maXJzdF9jb21tYX07CiAgICAgICAgbXkgJGlkZW50aWZpZXJfY291bnQgICAgICAgPSAkcmhhc2hfQS0+e19pZGVudGlmaWVyX2NvdW50X0F9OwogICAgICAgIG15ICRpdGVtX2NvdW50ICAgICAgICAgICAgID0gJHJoYXNoX0EtPntfaXRlbV9jb3VudF9BfTsKICAgICAgICBteSAkcmlfdGVybV9iZWdpbiAgICAgICAgICA9ICRyaGFzaF9BLT57X3JpX3Rlcm1fYmVnaW59OwogICAgICAgIG15ICRyaV90ZXJtX2NvbW1hICAgICAgICAgID0gJHJoYXNoX0EtPntfcmlfdGVybV9jb21tYX07CiAgICAgICAgbXkgJHJpX3Rlcm1fZW5kICAgICAgICAgICAgPSAkcmhhc2hfQS0+e19yaV90ZXJtX2VuZH07CiAgICAgICAgbXkgJHJpdGVtX2xlbmd0aHMgICAgICAgICAgPSAkcmhhc2hfQS0+e19yaXRlbV9sZW5ndGhzfTsKICAgICAgICBteSAkcm1heF9sZW5ndGggICAgICAgICAgICA9ICRyaGFzaF9BLT57X3JtYXhfbGVuZ3RofTsKCiAgICAgICAgIyBTcGVjaWZ5IGlmIHRoZSBsaXN0IG11c3QgaGF2ZSBhbiBldmVuIG51bWJlciBvZiBmaWVsZHMgb3Igbm90LgogICAgICAgICMgSXQgaXMgZ2VuZXJhbGx5IHNhZmVzdCB0byBhc3N1bWUgYW4gZXZlbiBudW1iZXIsIGJlY2F1c2UgdGhlCiAgICAgICAgIyBsaXN0IGl0ZW1zIG1pZ2h0IGJlIGEgaGFzaCBsaXN0LiAgQnV0IGlmIHdlIGNhbiBiZSBzdXJlIHRoYXQKICAgICAgICAjIGl0IGlzIG5vdCBhIGhhc2gsIHRoZW4gd2UgY2FuIGFsbG93IGFuIG9kZCBudW1iZXIgZm9yIG1vcmUKICAgICAgICAjIGZsZXhpYmlsaXR5LgogICAgICAgICMgMSA9IG9kZCBmaWVsZCBjb3VudCBvaywgMiA9IHdhbnQgZXZlbiBjb3VudAogICAgICAgIG15ICRvZGRfb3JfZXZlbiA9IDI7CiAgICAgICAgaWYgKAogICAgICAgICAgICAgICAkaWRlbnRpZmllcl9jb3VudCA+PSAkaXRlbV9jb3VudCAtIDEKICAgICAgICAgICAgfHwgJGlzX2Fzc2lnbm1lbnR7JG5leHRfbm9uYmxhbmtfdHlwZX0KICAgICAgICAgICAgfHwgKCAgICRsaXN0X3R5cGUKICAgICAgICAgICAgICAgICYmICRsaXN0X3R5cGUgbmUgJz0+JwogICAgICAgICAgICAgICAgJiYgJGxpc3RfdHlwZSAhfiAvXltcOlw/XSQvICkKICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRvZGRfb3JfZXZlbiA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIGRvIHdlIGhhdmUgYSBsb25nIGZpcnN0IHRlcm0gd2hpY2ggc2hvdWxkIGJlCiAgICAgICAgIyBsZWZ0IG9uIGEgbGluZSBieSBpdHNlbGY/CiAgICAgICAgbXkgJHVzZV9zZXBhcmF0ZV9maXJzdF90ZXJtID0gKAogICAgICAgICAgICAkb2RkX29yX2V2ZW4gPT0gMSAgICAgICAgICAgICAgIyBvbmx5IGlmIHdlIGNhbiB1c2UgMSBmaWVsZC9saW5lCiAgICAgICAgICAgICAgJiYgJGl0ZW1fY291bnQgPiAzICAgICAgICAgICAjIG5lZWQgc2V2ZXJhbCBpdGVtcwogICAgICAgICAgICAgICYmICRmaXJzdF90ZXJtX2xlbmd0aCA+CiAgICAgICAgICAgICAgMiAqICRybWF4X2xlbmd0aC0+WzBdIC0gMiAgICAjIG5lZWQgbG9uZyBmaXJzdCB0ZXJtCiAgICAgICAgICAgICAgJiYgJGZpcnN0X3Rlcm1fbGVuZ3RoID4KICAgICAgICAgICAgICAyICogJHJtYXhfbGVuZ3RoLT5bMV0gLSAyICAgICMgbmVlZCBsb25nIGZpcnN0IHRlcm0KICAgICAgICApOwoKICAgICAgICAjIG9yIGRvIHdlIGtub3cgZnJvbSB0aGUgdHlwZSBvZiBsaXN0IHRoYXQgdGhlIGZpcnN0IHRlcm0gc2hvdWxkCiAgICAgICAgIyBiZSBwbGFjZWQgYWxvbmU/CiAgICAgICAgaWYgKCAhJHVzZV9zZXBhcmF0ZV9maXJzdF90ZXJtICkgewogICAgICAgICAgICBpZiAoICRpc19rZXl3b3JkX3dpdGhfc3BlY2lhbF9sZWFkaW5nX3Rlcm17JGxpc3RfdHlwZX0gKSB7CiAgICAgICAgICAgICAgICAkdXNlX3NlcGFyYXRlX2ZpcnN0X3Rlcm0gPSAxOwoKICAgICAgICAgICAgICAgICMgc2hvdWxkIHRoZSBjb250YWluZXIgYmUgYnJva2VuIG9wZW4/CiAgICAgICAgICAgICAgICBpZiAoICRpdGVtX2NvdW50IDwgMyApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICRpX2ZpcnN0X2NvbW1hIC0gJGlfb3BlbmluZ19wYXJlbiA8IDQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR7JHJkb19ub3RfYnJlYWtfYXBhcnR9ID0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoJGZpcnN0X3Rlcm1fbGVuZ3RoIDwgMjAKICAgICAgICAgICAgICAgICAgICAmJiAkaV9maXJzdF9jb21tYSAtICRpX29wZW5pbmdfcGFyZW4gPCA0ICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBteSAkY29sdW1ucyA9IHRhYmxlX2NvbHVtbnNfYXZhaWxhYmxlKCRpX2ZpcnN0X2NvbW1hKTsKICAgICAgICAgICAgICAgICAgICBpZiAoICRmaXJzdF90ZXJtX2xlbmd0aCA8ICRjb2x1bW5zICkgewogICAgICAgICAgICAgICAgICAgICAgICAkeyRyZG9fbm90X2JyZWFrX2FwYXJ0fSA9IDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIyBicmVhawogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGlmIHNvLAogICAgICAgIGlmICgkdXNlX3NlcGFyYXRlX2ZpcnN0X3Rlcm0pIHsKCiAgICAgICAgICAgICMgLi5zZXQgYSBicmVhayBhbmQgdXBkYXRlIHN0YXJ0aW5nIHZhbHVlcwogICAgICAgICAgICAkc2VsZi0+c2V0X2ZvcmNlZF9icmVha3BvaW50KCRpX2ZpcnN0X2NvbW1hKTsKICAgICAgICAgICAgJGl0ZW1fY291bnQtLTsKCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgIyBTZWN0aW9uIEIxQTogU3RvcCBpZiBvbmUgaXRlbSByZW1haW5zICgkaV9maXJzdF9jb21tYSA9IHVuZGVmKQogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgRml4IGZvciBiMTQ0MjogdXNlICckaXRlbV9jb3VudCcgaGVyZSBpbnN0ZWFkIG9mICckY29tbWFfY291bnQnCiAgICAgICAgICAgICMgdG8gbWFrZSB0aGUgcmVzdWx0IGluZGVwZW5kZW50IG9mIGFueSB0cmFpbGluZyBjb21tYS4KICAgICAgICAgICAgcmV0dXJuIGlmICggJGl0ZW1fY291bnQgPD0gMSApOwoKICAgICAgICAgICAgJGlfb3BlbmluZ19wYXJlbiA9ICRpX2ZpcnN0X2NvbW1hOwogICAgICAgICAgICAkaV9maXJzdF9jb21tYSAgID0gJHJjb21tYV9pbmRleC0+WzFdOwogICAgICAgICAgICBzaGlmdCBAeyRyaXRlbV9sZW5ndGhzfTsKICAgICAgICAgICAgc2hpZnQgQHskcmlfdGVybV9iZWdpbn07CiAgICAgICAgICAgIHNoaWZ0IEB7JHJpX3Rlcm1fZW5kfTsKICAgICAgICAgICAgc2hpZnQgQHskcmlfdGVybV9jb21tYX07CiAgICAgICAgfQoKICAgICAgICAjIGlmIG5vdCwgdXBkYXRlIHRoZSBtZXRyaWNzIHRvIGluY2x1ZGUgdGhlIGZpcnN0IHRlcm0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKCAkZmlyc3RfdGVybV9sZW5ndGggPiAkcm1heF9sZW5ndGgtPlswXSApIHsKICAgICAgICAgICAgICAgICRybWF4X2xlbmd0aC0+WzBdID0gJGZpcnN0X3Rlcm1fbGVuZ3RoOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIEZpZWxkIHdpZHRoIHBhcmFtZXRlcnMKICAgICAgICBteSAkcGFpcl93aWR0aCA9ICggJHJtYXhfbGVuZ3RoLT5bMF0gKyAkcm1heF9sZW5ndGgtPlsxXSApOwogICAgICAgIG15ICRtYXhfd2lkdGggPQogICAgICAgICAgKCAkcm1heF9sZW5ndGgtPlswXSA+ICRybWF4X2xlbmd0aC0+WzFdICkKICAgICAgICAgID8gJHJtYXhfbGVuZ3RoLT5bMF0KICAgICAgICAgIDogJHJtYXhfbGVuZ3RoLT5bMV07CgogICAgICAgICMgTnVtYmVyIG9mIGZyZWUgY29sdW1ucyBhY3Jvc3MgdGhlIHBhZ2Ugd2lkdGggZm9yIGxheWluZyBvdXQgdGFibGVzCiAgICAgICAgbXkgJGNvbHVtbnMgPSB0YWJsZV9jb2x1bW5zX2F2YWlsYWJsZSgkaV9maXJzdF9jb21tYSk7CgogICAgICAgICMgUGF0Y2ggZm9yIGIxMjEwIGFuZCBiMTIxNi1iMTIxOCB3aGVuIC12bWxsIGlzIHNldC4gIElmIHdlIGFyZSB1bmFibGUKICAgICAgICAjIHRvIGJyZWFrIGFmdGVyIGFuIG9wZW5pbmcgcGFyZW4sIHRoZW4gdGhlIG1heGltdW0gbGluZSBsZW5ndGggZm9yIHRoZQogICAgICAgICMgZmlyc3QgbGluZSBjb3VsZCBiZSBsZXNzIHRoYW4gdGhlIGxhdGVyIGxpbmVzLiAgU28gd2UgbmVlZCB0byByZWR1Y2UKICAgICAgICAjIHRoZSBsaW5lIGxlbmd0aC4gIE5vcm1hbGx5LCB3ZSB3aWxsIGdldCBhIGJyZWFrIGFmdGVyIGFuIG9wZW5pbmcKICAgICAgICAjIHBhcmVuLCBidXQgaW4gc29tZSBjYXNlcyB3ZSBtaWdodCBub3QuCiAgICAgICAgaWYgKCAgICRyT3B0c192YXJpYWJsZV9tYXhpbXVtX2xpbmVfbGVuZ3RoCiAgICAgICAgICAgICYmICR0b2tlbnNfdG9fZ29bJGlfb3BlbmluZ19wYXJlbl0gZXEgJygnCiAgICAgICAgICAgICYmIEB7JHJpX3Rlcm1fYmVnaW59ICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICRpYiAgID0gJHJpX3Rlcm1fYmVnaW4tPlswXTsKICAgICAgICAgICAgbXkgJHR5cGUgPSAkdHlwZXNfdG9fZ29bJGliXTsKCiAgICAgICAgICAgICMgU28gZmFyLCB0aGUgb25seSBrbm93biBpbnN0YW5jZSBvZiB0aGlzIHByb2JsZW0gaXMgd2hlbgogICAgICAgICAgICAjIGEgYmFyZXdvcmQgZm9sbG93cyBhbiBvcGVuaW5nIHBhcmVuIHdpdGggLXZtbGwKICAgICAgICAgICAgaWYgKCAkdHlwZSBlcSAndycgKSB7CgogICAgICAgICAgICAgICAgIyBJZiBhIGxpbmUgc3RhcnRzIHdpdGggcGFyZW4rc3BhY2UrdGVybXMsIHRoZW4gaXRzIG1heCBsZW5ndGgKICAgICAgICAgICAgICAgICMgY291bGQgYmUgdXAgdG8gY2krMi1pIHNwYWNlcyBsZXNzIHRoYW4gaWYgdGhlIHRlcm0gd2VudCBvdXQKICAgICAgICAgICAgICAgICMgb24gYSBsaW5lIGFmdGVyIHRoZSBwYXJlbi4gIFNvLi4KICAgICAgICAgICAgICAgIG15ICR0b2xfdyA9IG1heCggMCwKICAgICAgICAgICAgICAgICAgICAyICsgJHJPcHRzX2NvbnRpbnVhdGlvbl9pbmRlbnRhdGlvbiAtCiAgICAgICAgICAgICAgICAgICAgICAkck9wdHNfaW5kZW50X2NvbHVtbnMgKTsKICAgICAgICAgICAgICAgICRjb2x1bW5zID0gbWF4KCAwLCAkY29sdW1ucyAtICR0b2xfdyApOwoKICAgICAgICAgICAgICAgICMjIEhlcmUgaXMgdGhlIG9yaWdpbmFsIGIxMjEwIGZpeCwgYnV0IGl0IGZhaWxlZCBvbiBiMTIxNi1iMTIxOAogICAgICAgICAgICAgICAgIyNteSAkY29sdW1uczIgPSB0YWJsZV9jb2x1bW5zX2F2YWlsYWJsZSgkaV9vcGVuaW5nX3BhcmVuKTsKICAgICAgICAgICAgICAgICMjJGNvbHVtbnMgPSBtaW4oICRjb2x1bW5zLCAkY29sdW1uczIgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBFc3RpbWF0ZWQgbWF4aW11bSBudW1iZXIgb2YgZmllbGRzIHdoaWNoIGZpdCB0aGlzIHNwYWNlLgogICAgICAgICMgVGhpcyB3aWxsIGJlIG91ciBmaXJzdCBndWVzczoKICAgICAgICBteSAkbnVtYmVyX29mX2ZpZWxkc19tYXggPQogICAgICAgICAgbWF4aW11bV9udW1iZXJfb2ZfZmllbGRzKCAkY29sdW1ucywgJG9kZF9vcl9ldmVuLCAkbWF4X3dpZHRoLAogICAgICAgICAgICAkcGFpcl93aWR0aCApOwogICAgICAgIG15ICRudW1iZXJfb2ZfZmllbGRzID0gJG51bWJlcl9vZl9maWVsZHNfbWF4OwoKICAgICAgICAjIEZpbmQgdGhlIGJlc3QtbG9va2luZyBudW1iZXIgb2YgZmllbGRzLgogICAgICAgICMgVGhpcyB3aWxsIGJlIG91ciBzZWNvbmQgZ3Vlc3MsIGlmIHBvc3NpYmxlLgogICAgICAgIG15ICggJG51bWJlcl9vZl9maWVsZHNfYmVzdCwgJHJpX3JhZ2dlZF9icmVha19saXN0LAogICAgICAgICAgICAkbmV3X2lkZW50aWZpZXJfY291bnQgKQogICAgICAgICAgPSAkc2VsZi0+c3R1ZHlfbGlzdF9jb21wbGV4aXR5KCAkcmlfdGVybV9iZWdpbiwgJHJpX3Rlcm1fZW5kLAogICAgICAgICAgICAkcml0ZW1fbGVuZ3RocywgJG1heF93aWR0aCApOwoKICAgICAgICBpZiAoICAgJG51bWJlcl9vZl9maWVsZHNfYmVzdCAhPSAwCiAgICAgICAgICAgICYmICRudW1iZXJfb2ZfZmllbGRzX2Jlc3QgPCAkbnVtYmVyX29mX2ZpZWxkc19tYXggKQogICAgICAgIHsKICAgICAgICAgICAgJG51bWJlcl9vZl9maWVsZHMgPSAkbnVtYmVyX29mX2ZpZWxkc19iZXN0OwogICAgICAgIH0KCiAgICAgICAgIyBmaXggYjE0MjcKICAgICAgICBlbHNpZiAoJG51bWJlcl9vZl9maWVsZHNfYmVzdCA+IDEKICAgICAgICAgICAgJiYgJG51bWJlcl9vZl9maWVsZHNfYmVzdCA+ICRudW1iZXJfb2ZfZmllbGRzX21heCApCiAgICAgICAgewogICAgICAgICAgICAkbnVtYmVyX29mX2ZpZWxkc19iZXN0ID0gJG51bWJlcl9vZl9maWVsZHNfbWF4OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIyBubyBjaGFuZ2UKICAgICAgICB9CgogICAgICAgICMgSWYgd2UgYXJlIGNyb3dkZWQgYW5kIHRoZSAtbHAgb3B0aW9uIGlzIGJlaW5nIHVzZWQsIHRyeQogICAgICAgICMgdG8gdW5kbyBzb21lIGluZGVudGF0aW9uCiAgICAgICAgaWYgKAogICAgICAgICAgICAkaXNfbHBfZm9ybWF0dGluZwogICAgICAgICAgICAmJiAoCiAgICAgICAgICAgICAgICAkbnVtYmVyX29mX2ZpZWxkcyA9PSAwCiAgICAgICAgICAgICAgICB8fCAoICAgJG51bWJlcl9vZl9maWVsZHMgPT0gMQogICAgICAgICAgICAgICAgICAgICYmICRudW1iZXJfb2ZfZmllbGRzICE9ICRudW1iZXJfb2ZfZmllbGRzX2Jlc3QgKQogICAgICAgICAgICApCiAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAoICRudW1iZXJfb2ZfZmllbGRzLCAkbnVtYmVyX29mX2ZpZWxkc19iZXN0LCAkY29sdW1ucyApID0KICAgICAgICAgICAgICAkc2VsZi0+bHBfdGFibGVfZml4KAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGNvbHVtbnMgICAgICAgICAgICAgICA9PiAkY29sdW1ucywKICAgICAgICAgICAgICAgICAgICBpX2ZpcnN0X2NvbW1hICAgICAgICAgPT4gJGlfZmlyc3RfY29tbWEsCiAgICAgICAgICAgICAgICAgICAgbWF4X3dpZHRoICAgICAgICAgICAgID0+ICRtYXhfd2lkdGgsCiAgICAgICAgICAgICAgICAgICAgbnVtYmVyX29mX2ZpZWxkcyAgICAgID0+ICRudW1iZXJfb2ZfZmllbGRzLAogICAgICAgICAgICAgICAgICAgIG51bWJlcl9vZl9maWVsZHNfYmVzdCA9PiAkbnVtYmVyX29mX2ZpZWxkc19iZXN0LAogICAgICAgICAgICAgICAgICAgIG9kZF9vcl9ldmVuICAgICAgICAgICA9PiAkb2RkX29yX2V2ZW4sCiAgICAgICAgICAgICAgICAgICAgcGFpcl93aWR0aCAgICAgICAgICAgID0+ICRwYWlyX3dpZHRoLAogICAgICAgICAgICAgICAgICAgIHJpdGVtX2xlbmd0aHMgICAgICAgICA9PiAkcml0ZW1fbGVuZ3RocywKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyB0cnkgZm9yIG9uZSBjb2x1bW4gaWYgdHdvIHdvbid0IHdvcmsKICAgICAgICBpZiAoICRudW1iZXJfb2ZfZmllbGRzIDw9IDAgKSB7CiAgICAgICAgICAgICRudW1iZXJfb2ZfZmllbGRzID0gaW50KCAkY29sdW1ucyAvICRtYXhfd2lkdGggKTsKICAgICAgICB9CgogICAgICAgICMgVGhlIHVzZXIgY2FuIHBsYWNlIGFuIHVwcGVyIGJvdW5kIG9uIHRoZSBudW1iZXIgb2YgZmllbGRzLAogICAgICAgICMgd2hpY2ggY2FuIGJlIHVzZWZ1bCBmb3IgZG9pbmcgbWFpbnRlbmFuY2Ugb24gdGFibGVzCiAgICAgICAgaWYgKCAgICRyT3B0c19tYXhpbXVtX2ZpZWxkc19wZXJfdGFibGUKICAgICAgICAgICAgJiYgJG51bWJlcl9vZl9maWVsZHMgPiAkck9wdHNfbWF4aW11bV9maWVsZHNfcGVyX3RhYmxlICkKICAgICAgICB7CiAgICAgICAgICAgICRudW1iZXJfb2ZfZmllbGRzID0gJHJPcHRzX21heGltdW1fZmllbGRzX3Blcl90YWJsZTsKICAgICAgICB9CgogICAgICAgICMgSG93IG1hbnkgY29sdW1ucyAoY2hhcmFjdGVycykgYW5kIGxpbmVzIHdvdWxkIHRoaXMgY29udGFpbmVyIHRha2UKICAgICAgICAjIGlmIG5vIGFkZGl0aW9uYWwgd2hpdGVzcGFjZSB3ZXJlIGFkZGVkPwogICAgICAgIG15ICRwYWNrZWRfY29sdW1ucyA9IHRva2VuX3NlcXVlbmNlX2xlbmd0aCggJGlfb3BlbmluZ19wYXJlbiArIDEsCiAgICAgICAgICAgICRpX2VmZmVjdGl2ZV9sYXN0X2NvbW1hICsgMSApOwogICAgICAgIGlmICggJGNvbHVtbnMgPD0gMCApIHsgJGNvbHVtbnMgPSAxIH0gICAgIyBhdm9pZCBkaXZpZGUgYnkgemVybwogICAgICAgIG15ICRwYWNrZWRfbGluZXMgPSAxICsgaW50KCAkcGFja2VkX2NvbHVtbnMgLyAkY29sdW1ucyApOwoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIFNlY3Rpb24gQjFCOiBTdG9wIGhlcmUgaWYgd2UgZGlkIG5vdCBjb21wdXRlIGEgcG9zaXRpdmUgbnVtYmVyIG9mCiAgICAgICAgIyBmaWVsZHMuIEluIHRoaXMgY2FzZSB3ZSBqdXN0IGhhdmUgdG8gYmFpbCBvdXQuCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaWYgKCAkbnVtYmVyX29mX2ZpZWxkcyA8PSAwICkgewoKICAgICAgICAgICAgJHNlbGYtPnNldF9lbWVyZ2VuY3lfY29tbWFfYnJlYWtwb2ludHMoCgogICAgICAgICAgICAgICAgJG51bWJlcl9vZl9maWVsZHNfYmVzdCwKICAgICAgICAgICAgICAgICRyaGFzaF9JTiwKICAgICAgICAgICAgICAgICRjb21tYV9jb3VudCwKICAgICAgICAgICAgICAgICRpX2ZpcnN0X2NvbW1hLAoKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgU2VjdGlvbiBCMUI6IFdlIGhhdmUgYSB0ZW50YXRpdmUgZmllbGQgY291bnQgdGhhdCBzZWVtcyB0byB3b3JrLgogICAgICAgICMgTm93IHdlIG11c3QgbG9vayBtb3JlIGNsb3NlbHkgdG8gZGV0ZXJtaW5lIGlmIGEgdGFibGUgbGF5b3V0IHdpbGwKICAgICAgICAjIGFjdHVhbGx5IGxvb2sgb2theS4KICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICMgSG93IG1hbnkgbGluZXMgd2lsbCB0aGlzIHJlcXVpcmU/CiAgICAgICAgbXkgJGZvcm1hdHRlZF9saW5lcyA9ICRpdGVtX2NvdW50IC8gJG51bWJlcl9vZl9maWVsZHM7CiAgICAgICAgaWYgKCAkZm9ybWF0dGVkX2xpbmVzICE9IGludCgkZm9ybWF0dGVkX2xpbmVzKSApIHsKICAgICAgICAgICAgJGZvcm1hdHRlZF9saW5lcyA9IDEgKyBpbnQoJGZvcm1hdHRlZF9saW5lcyk7CiAgICAgICAgfQoKICAgICAgICAjIFNvIGZhciB3ZSd2ZSBiZWVuIHRyeWluZyB0byBmaWxsIG91dCB0byB0aGUgcmlnaHQgbWFyZ2luLiAgQnV0CiAgICAgICAgIyBjb21wYWN0IHRhYmxlcyBhcmUgZWFzaWVyIHRvIHJlYWQsIHNvIGxldCdzIHNlZSBpZiB3ZSBjYW4gdXNlIGZld2VyCiAgICAgICAgIyBmaWVsZHMgd2l0aG91dCBpbmNyZWFzaW5nIHRoZSBudW1iZXIgb2YgbGluZXMuCiAgICAgICAgJG51bWJlcl9vZl9maWVsZHMgPSBjb21wYWN0aWZ5X3RhYmxlKCAkaXRlbV9jb3VudCwgJG51bWJlcl9vZl9maWVsZHMsCiAgICAgICAgICAgICRmb3JtYXR0ZWRfbGluZXMsICRvZGRfb3JfZXZlbiApOwoKICAgICAgICBteSAkZm9ybWF0dGVkX2NvbHVtbnM7CgogICAgICAgIGlmICggJG51bWJlcl9vZl9maWVsZHMgPiAxICkgewogICAgICAgICAgICAkZm9ybWF0dGVkX2NvbHVtbnMgPQogICAgICAgICAgICAgICggJHBhaXJfd2lkdGggKiAoIGludCggJGl0ZW1fY291bnQgLyAyICkgKSArCiAgICAgICAgICAgICAgICAgICggJGl0ZW1fY291bnQgJSAyICkgKiAkbWF4X3dpZHRoICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkZm9ybWF0dGVkX2NvbHVtbnMgPSAkbWF4X3dpZHRoICogJGl0ZW1fY291bnQ7CiAgICAgICAgfQogICAgICAgIGlmICggJGZvcm1hdHRlZF9jb2x1bW5zIDwgJHBhY2tlZF9jb2x1bW5zICkgewogICAgICAgICAgICAkZm9ybWF0dGVkX2NvbHVtbnMgPSAkcGFja2VkX2NvbHVtbnM7CiAgICAgICAgfQoKICAgICAgICAjIENvbnN0cnVjZSBoYXNoX0I6CiAgICAgICAgcmV0dXJuIHsKCiAgICAgICAgICAgICMgVXBkYXRlZCB2YXJpYWJsZXMKICAgICAgICAgICAgX2lfZmlyc3RfY29tbWFfQiAgID0+ICRpX2ZpcnN0X2NvbW1hLAogICAgICAgICAgICBfaV9vcGVuaW5nX3BhcmVuX0IgPT4gJGlfb3BlbmluZ19wYXJlbiwKICAgICAgICAgICAgX2l0ZW1fY291bnRfQiAgICAgID0+ICRpdGVtX2NvdW50LAoKICAgICAgICAgICAgIyBOZXcgdmFyaWFibGVzCiAgICAgICAgICAgIF9jb2x1bW5zICAgICAgICAgICAgICAgICA9PiAkY29sdW1ucywKICAgICAgICAgICAgX2Zvcm1hdHRlZF9jb2x1bW5zICAgICAgID0+ICRmb3JtYXR0ZWRfY29sdW1ucywKICAgICAgICAgICAgX2Zvcm1hdHRlZF9saW5lcyAgICAgICAgID0+ICRmb3JtYXR0ZWRfbGluZXMsCiAgICAgICAgICAgIF9tYXhfd2lkdGggICAgICAgICAgICAgICA9PiAkbWF4X3dpZHRoLAogICAgICAgICAgICBfbmV3X2lkZW50aWZpZXJfY291bnQgICAgPT4gJG5ld19pZGVudGlmaWVyX2NvdW50LAogICAgICAgICAgICBfbnVtYmVyX29mX2ZpZWxkcyAgICAgICAgPT4gJG51bWJlcl9vZl9maWVsZHMsCiAgICAgICAgICAgIF9vZGRfb3JfZXZlbiAgICAgICAgICAgICA9PiAkb2RkX29yX2V2ZW4sCiAgICAgICAgICAgIF9wYWNrZWRfY29sdW1ucyAgICAgICAgICA9PiAkcGFja2VkX2NvbHVtbnMsCiAgICAgICAgICAgIF9wYWNrZWRfbGluZXMgICAgICAgICAgICA9PiAkcGFja2VkX2xpbmVzLAogICAgICAgICAgICBfcGFpcl93aWR0aCAgICAgICAgICAgICAgPT4gJHBhaXJfd2lkdGgsCiAgICAgICAgICAgIF9yaV9yYWdnZWRfYnJlYWtfbGlzdCAgICA9PiAkcmlfcmFnZ2VkX2JyZWFrX2xpc3QsCiAgICAgICAgICAgIF91c2Vfc2VwYXJhdGVfZmlyc3RfdGVybSA9PiAkdXNlX3NlcGFyYXRlX2ZpcnN0X3Rlcm0sCiAgICAgICAgfTsKICAgIH0gIyMgZW5kIHN1YiB0YWJsZV9sYXlvdXRfQgoKICAgIHN1YiBscF90YWJsZV9maXggewoKICAgICAgICAjIHRyeSB0byB1bmRvIHNvbWUgLWxwIGluZGVudGF0aW9uIHRvIGltcHJvdmUgdGFibGUgZm9ybWF0dGluZwoKICAgICAgICBteSAoICRzZWxmLCAkcmNhbGxfaGFzaCApID0gQF87CgogICAgICAgIG15ICRjb2x1bW5zICAgICAgICAgICAgICAgPSAkcmNhbGxfaGFzaC0+e2NvbHVtbnN9OwogICAgICAgIG15ICRpX2ZpcnN0X2NvbW1hICAgICAgICAgPSAkcmNhbGxfaGFzaC0+e2lfZmlyc3RfY29tbWF9OwogICAgICAgIG15ICRtYXhfd2lkdGggICAgICAgICAgICAgPSAkcmNhbGxfaGFzaC0+e21heF93aWR0aH07CiAgICAgICAgbXkgJG51bWJlcl9vZl9maWVsZHMgICAgICA9ICRyY2FsbF9oYXNoLT57bnVtYmVyX29mX2ZpZWxkc307CiAgICAgICAgbXkgJG51bWJlcl9vZl9maWVsZHNfYmVzdCA9ICRyY2FsbF9oYXNoLT57bnVtYmVyX29mX2ZpZWxkc19iZXN0fTsKICAgICAgICBteSAkb2RkX29yX2V2ZW4gICAgICAgICAgID0gJHJjYWxsX2hhc2gtPntvZGRfb3JfZXZlbn07CiAgICAgICAgbXkgJHBhaXJfd2lkdGggICAgICAgICAgICA9ICRyY2FsbF9oYXNoLT57cGFpcl93aWR0aH07CiAgICAgICAgbXkgJHJpdGVtX2xlbmd0aHMgICAgICAgICA9ICRyY2FsbF9oYXNoLT57cml0ZW1fbGVuZ3Roc307CgogICAgICAgIG15ICRhdmFpbGFibGVfc3BhY2VzID0KICAgICAgICAgICRzZWxmLT5nZXRfYXZhaWxhYmxlX3NwYWNlc190b19nbygkaV9maXJzdF9jb21tYSk7CiAgICAgICAgaWYgKCAkYXZhaWxhYmxlX3NwYWNlcyA+IDAgKSB7CgogICAgICAgICAgICBteSAkc3BhY2VzX3dhbnRlZCA9ICRtYXhfd2lkdGggLSAkY29sdW1uczsgICAgIyBmb3IgMSBmaWVsZAoKICAgICAgICAgICAgaWYgKCAkbnVtYmVyX29mX2ZpZWxkc19iZXN0ID09IDAgKSB7CiAgICAgICAgICAgICAgICAkbnVtYmVyX29mX2ZpZWxkc19iZXN0ID0KICAgICAgICAgICAgICAgICAgZ2V0X21heGltdW1fZmllbGRzX3dhbnRlZCgkcml0ZW1fbGVuZ3Rocyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJG51bWJlcl9vZl9maWVsZHNfYmVzdCAhPSAxICkgewogICAgICAgICAgICAgICAgbXkgJHNwYWNlc193YW50ZWRfMiA9IDEgKyAkcGFpcl93aWR0aCAtICRjb2x1bW5zOyAjIGZvciAyIGZpZWxkcwogICAgICAgICAgICAgICAgaWYgKCAkYXZhaWxhYmxlX3NwYWNlcyA+ICRzcGFjZXNfd2FudGVkXzIgKSB7CiAgICAgICAgICAgICAgICAgICAgJHNwYWNlc193YW50ZWQgPSAkc3BhY2VzX3dhbnRlZF8yOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICRzcGFjZXNfd2FudGVkID4gMCApIHsKICAgICAgICAgICAgICAgIG15ICRkZWxldGVkX3NwYWNlcyA9CiAgICAgICAgICAgICAgICAgICRzZWxmLT5yZWR1Y2VfbHBfaW5kZW50YXRpb24oICRpX2ZpcnN0X2NvbW1hLAogICAgICAgICAgICAgICAgICAgICRzcGFjZXNfd2FudGVkICk7CgogICAgICAgICAgICAgICAgIyByZWRvIHRoZSBtYXRoCiAgICAgICAgICAgICAgICBpZiAoICRkZWxldGVkX3NwYWNlcyA+IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbHVtbnMgPSB0YWJsZV9jb2x1bW5zX2F2YWlsYWJsZSgkaV9maXJzdF9jb21tYSk7CiAgICAgICAgICAgICAgICAgICAgJG51bWJlcl9vZl9maWVsZHMgPQogICAgICAgICAgICAgICAgICAgICAgbWF4aW11bV9udW1iZXJfb2ZfZmllbGRzKCAkY29sdW1ucywgJG9kZF9vcl9ldmVuLAogICAgICAgICAgICAgICAgICAgICAgICAkbWF4X3dpZHRoLCAkcGFpcl93aWR0aCApOwoKICAgICAgICAgICAgICAgICAgICBpZiAoICAgJG51bWJlcl9vZl9maWVsZHNfYmVzdCA9PSAxCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRudW1iZXJfb2ZfZmllbGRzID49IDEgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG51bWJlcl9vZl9maWVsZHMgPSAkbnVtYmVyX29mX2ZpZWxkc19iZXN0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gKCAkbnVtYmVyX29mX2ZpZWxkcywgJG51bWJlcl9vZl9maWVsZHNfYmVzdCwgJGNvbHVtbnMgKTsKICAgIH0gIyMgZW5kIHN1YiBscF90YWJsZV9maXgKCiAgICBzdWIgd3JpdGVfZm9ybWF0dGVkX3RhYmxlIHsKCiAgICAgICAgIyBXcml0ZSBhIHRhYmxlIG9mIGNvbW1hIHNlcGFyYXRlZCBpdGVtcyB3aXRoIGZpeGVkIG51bWJlciBvZiBmaWVsZHMKICAgICAgICBteSAoICRzZWxmLCAkbnVtYmVyX29mX2ZpZWxkcywgJGNvbW1hX2NvdW50LCAkcmNvbW1hX2luZGV4LAogICAgICAgICAgICAkdXNlX3NlcGFyYXRlX2ZpcnN0X3Rlcm0gKQogICAgICAgICAgPSBAXzsKCiAgICAgICAgd3JpdGVfbG9nZmlsZV9lbnRyeSgKICAgICAgICAgICAgIkxpc3Q6IGF1dG8gZm9ybWF0dGluZyB3aXRoICRudW1iZXJfb2ZfZmllbGRzIGZpZWxkcy9yb3dcbiIpOwoKICAgICAgICBpZiAoICRudW1iZXJfb2ZfZmllbGRzIDwgMSApIHsKICAgICAgICAgICAgIyMgc2hvdWxkbid0IGhhcHBlbiAtIGNhbGxlciBwYXNzZWQgYmFkIHBhcmFtZXRlcgogICAgICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KCJiYWQgbnVtYmVyIG9mIGZpZWxkcz0kbnVtYmVyX29mX2ZpZWxkc1xuIik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIG15ICRqX2ZpcnN0X2JyZWFrID0KICAgICAgICAgICAgJHVzZV9zZXBhcmF0ZV9maXJzdF90ZXJtCiAgICAgICAgICA/ICRudW1iZXJfb2ZfZmllbGRzCiAgICAgICAgICA6ICRudW1iZXJfb2ZfZmllbGRzIC0gMTsKCiAgICAgICAgbXkgJGogPSAkal9maXJzdF9icmVhazsKICAgICAgICB3aGlsZSAoICRqIDwgJGNvbW1hX2NvdW50ICkgewogICAgICAgICAgICBteSAkaV9jb21tYSA9ICRyY29tbWFfaW5kZXgtPlskal07CiAgICAgICAgICAgICRzZWxmLT5zZXRfZm9yY2VkX2JyZWFrcG9pbnQoJGlfY29tbWEpOwogICAgICAgICAgICAkaiArPSAkbnVtYmVyX29mX2ZpZWxkczsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIHdyaXRlX2Zvcm1hdHRlZF90YWJsZQoKfSAjIyBlbmQgY2xvc3VyZSBzZXRfY29tbWFfYnJlYWtwb2ludF9maW5hbAoKc3ViIHN0dWR5X2xpc3RfY29tcGxleGl0eSB7CgogICAgbXkgKCAkc2VsZiwgJHJpX3Rlcm1fYmVnaW4sICRyaV90ZXJtX2VuZCwgJHJpdGVtX2xlbmd0aHMsICRtYXhfd2lkdGggKSA9IEBfOwoKICAgICMgTG9vayBmb3IgY29tcGxleCB0YWJsZXMgd2hpY2ggc2hvdWxkIGJlIGZvcm1hdHRlZCB3aXRoIG9uZSB0ZXJtIHBlciBsaW5lLgogICAgIyBSZXR1cm5zIHRoZSBmb2xsb3dpbmc6CiAgICAjCiAgICAjICBcQGlfcmFnZ2VkX2JyZWFrX2xpc3QgPSBsaXN0IG9mIGdvb2QgYnJlYWtwb2ludHMgdG8gYXZvaWQgbGluZXMKICAgICMgICAgd2hpY2ggYXJlIGhhcmQgdG8gcmVhZAogICAgIyAgJG51bWJlcl9vZl9maWVsZHNfYmVzdCA9IHN1Z2dlc3RlZCBudW1iZXIgb2YgZmllbGRzIGJhc2VkIG9uCiAgICAjICAgIGNvbXBsZXhpdHk7ID0gMCBpZiBhbnkgbnVtYmVyIG1heSBiZSB1c2VkLgogICAgIwogICAgbXkgJGl0ZW1fY291bnQgICAgICAgICAgICA9IEB7JHJpX3Rlcm1fYmVnaW59OwogICAgbXkgJGNvbXBsZXhfaXRlbV9jb3VudCAgICA9IDA7CiAgICBteSAkbnVtYmVyX29mX2ZpZWxkc19iZXN0ID0gJHJPcHRzX21heGltdW1fZmllbGRzX3Blcl90YWJsZTsKICAgIG15ICRpX21heCAgICAgICAgICAgICAgICAgPSBAeyRyaXRlbV9sZW5ndGhzfSAtIDE7CgogICAgbXkgJGlfbGFzdF9sYXN0X2JyZWFrID0gLTM7CiAgICBteSAkaV9sYXN0X2JyZWFrICAgICAgPSAtMjsKICAgIG15IEBpX3JhZ2dlZF9icmVha19saXN0OwoKICAgIG15ICRkZWZpbml0ZWx5X2NvbXBsZXggPSAzMDsKICAgIG15ICRkZWZpbml0ZWx5X3NpbXBsZSAgPSAxMjsKICAgIG15ICRxdW90ZV9jb3VudCAgICAgICAgPSAwOwoKICAgIGZvciBteSAkaSAoIDAgLi4gJGlfbWF4ICkgewogICAgICAgIG15ICRpYiA9ICRyaV90ZXJtX2JlZ2luLT5bJGldOwogICAgICAgIG15ICRpZSA9ICRyaV90ZXJtX2VuZC0+WyRpXTsKCiAgICAgICAgIyBkZWZpbmUgY29tcGxleGl0eTogc3RhcnQgd2l0aCB0aGUgYWN0dWFsIHRlcm0gbGVuZ3RoCiAgICAgICAgbXkgJHdlaWdodGVkX2xlbmd0aCA9ICggJHJpdGVtX2xlbmd0aHMtPlskaV0gLSAyICk7CgogICAgICAgICMjVEJEOiBqb2luIHR5cGVzIGhlcmUgYW5kIGNoZWNrIGZvciB2YXJpYXRpb25zCiAgICAgICAgIyNteSAkc3RyPWpvaW4gIiIsIEB0b2tlbnNfdG9fZ29bJGliLi4kaWVdOwoKICAgICAgICBteSAkaXNfcXVvdGUgPSAwOwogICAgICAgIGlmICggJHR5cGVzX3RvX2dvWyRpYl0gPX4gL15bcVFdJC8gKSB7CiAgICAgICAgICAgICRpc19xdW90ZSA9IDE7CiAgICAgICAgICAgICRxdW90ZV9jb3VudCsrOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICR0eXBlc190b19nb1skaWJdID1+IC9eW3dcLV0kLyApIHsKICAgICAgICAgICAgJHF1b3RlX2NvdW50Kys7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAjIG5vdCBhIHF1b3RlCiAgICAgICAgfQoKICAgICAgICBpZiAoICRpYiBlcSAkaWUgKSB7CiAgICAgICAgICAgIGlmICggJGlzX3F1b3RlICYmICR0b2tlbnNfdG9fZ29bJGliXSA9fiAvXHMvICkgewogICAgICAgICAgICAgICAgJGNvbXBsZXhfaXRlbV9jb3VudCsrOwogICAgICAgICAgICAgICAgJHdlaWdodGVkX2xlbmd0aCAqPSAyOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAoIGZpcnN0IHsgJF8gZXEgJ2InIH0gQHR5cGVzX3RvX2dvWyAkaWIgLi4gJGllIF0gKSB7CiAgICAgICAgICAgICAgICAkY29tcGxleF9pdGVtX2NvdW50Kys7CiAgICAgICAgICAgICAgICAkd2VpZ2h0ZWRfbGVuZ3RoICo9IDI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCBmaXJzdCB7ICRfIGVxICcuLicgfSBAdHlwZXNfdG9fZ29bICRpYiAuLiAkaWUgXSApIHsKICAgICAgICAgICAgICAgICR3ZWlnaHRlZF9sZW5ndGggKz0gNDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBhZGQgd2VpZ2h0IGZvciBleHRyYSB0b2tlbnMuCiAgICAgICAgJHdlaWdodGVkX2xlbmd0aCArPSAyICogKCAkaWUgLSAkaWIgKTsKCiAgICAgICAgIyBtYXJrIGEgcmFnZ2VkIGJyZWFrIGFmdGVyIHRoaXMgaXRlbSBpdCBpZiBpdCBpcyAnbG9uZyBhbmQgY29tcGxleCc6CiAgICAgICAgaWYgKCAkd2VpZ2h0ZWRfbGVuZ3RoID49ICRkZWZpbml0ZWx5X2NvbXBsZXggKSB7CgogICAgICAgICAgICAjIGlmIHdlIGJyb2tlIGFmdGVyIHRoZSBwcmV2aW91cyB0ZXJtCiAgICAgICAgICAgICMgdGhlbiBicmVhayBiZWZvcmUgaXQgdG9vCiAgICAgICAgICAgIGlmICggICAkaV9sYXN0X2JyZWFrID09ICRpIC0gMQogICAgICAgICAgICAgICAgJiYgJGkgPiAxCiAgICAgICAgICAgICAgICAmJiAkaV9sYXN0X2xhc3RfYnJlYWsgIT0gJGkgLSAyICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICMjIFRPRE86IGRvbid0IHN0cmFuZCBhIHNtYWxsIHRlcm0KICAgICAgICAgICAgICAgIHBvcCBAaV9yYWdnZWRfYnJlYWtfbGlzdDsKICAgICAgICAgICAgICAgIHB1c2ggQGlfcmFnZ2VkX2JyZWFrX2xpc3QsICRpIC0gMjsKICAgICAgICAgICAgICAgIHB1c2ggQGlfcmFnZ2VkX2JyZWFrX2xpc3QsICRpIC0gMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHVzaCBAaV9yYWdnZWRfYnJlYWtfbGlzdCwgJGk7CiAgICAgICAgICAgICRpX2xhc3RfbGFzdF9icmVhayA9ICRpX2xhc3RfYnJlYWs7CiAgICAgICAgICAgICRpX2xhc3RfYnJlYWsgICAgICA9ICRpOwogICAgICAgIH0KCiAgICAgICAgIyBkb24ndCBicmVhayBiZWZvcmUgYSBzbWFsbCBsYXN0IHRlcm0gLS0gaXQgd2lsbAogICAgICAgICMgbm90IGxvb2sgZ29vZCBvbiBhIGxpbmUgYnkgaXRzZWxmLgogICAgICAgIGVsc2lmICgkaSA9PSAkaV9tYXgKICAgICAgICAgICAgJiYgJGlfbGFzdF9icmVhayA9PSAkaSAtIDEKICAgICAgICAgICAgJiYgJHdlaWdodGVkX2xlbmd0aCA8PSAkZGVmaW5pdGVseV9zaW1wbGUgKQogICAgICAgIHsKICAgICAgICAgICAgcG9wIEBpX3JhZ2dlZF9icmVha19saXN0OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIyBvayBhcyBpcwogICAgICAgIH0KICAgIH0KCiAgICBteSAkaWRlbnRpZmllcl9jb3VudCA9ICRpX21heCArIDEgLSAkcXVvdGVfY291bnQ7CgogICAgIyBOZWVkIG1vcmUgdHVuaW5nIGhlcmUuLgogICAgaWYgKCAgICRtYXhfd2lkdGggPiAxMgogICAgICAgICYmICRjb21wbGV4X2l0ZW1fY291bnQgPiAkaXRlbV9jb3VudCAvIDIKICAgICAgICAmJiAkbnVtYmVyX29mX2ZpZWxkc19iZXN0ICE9IDIgKQogICAgewogICAgICAgICRudW1iZXJfb2ZfZmllbGRzX2Jlc3QgPSAxOwogICAgfQoKICAgIHJldHVybiAoICRudW1iZXJfb2ZfZmllbGRzX2Jlc3QsIFxAaV9yYWdnZWRfYnJlYWtfbGlzdCwgJGlkZW50aWZpZXJfY291bnQgKTsKfSAjIyBlbmQgc3ViIHN0dWR5X2xpc3RfY29tcGxleGl0eQoKc3ViIGdldF9tYXhpbXVtX2ZpZWxkc193YW50ZWQgewoKICAgIG15ICgkcml0ZW1fbGVuZ3RocykgPSBAXzsKCiAgICAjIE5vdCBhbGwgdGFibGVzIGxvb2sgZ29vZCB3aXRoIG1vcmUgdGhhbiBvbmUgZmllbGQgb2YgaXRlbXMuCiAgICAjIFRoaXMgcm91dGluZSBsb29rcyBhdCBhIHRhYmxlIGFuZCBkZWNpZGVzIGlmIGl0IHNob3VsZCBiZQogICAgIyBmb3JtYXR0ZWQgd2l0aCBqdXN0IG9uZSBmaWVsZCBvciBub3QuCiAgICAjIFRoaXMgY29kaW5nIGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50LgogICAgbXkgJG51bWJlcl9vZl9maWVsZHNfYmVzdCA9IDA7CgogICAgIyBGb3IganVzdCBhIGZldyBpdGVtcywgd2UgdGVudGF0aXZlbHkgYXNzdW1lIGp1c3QgMSBmaWVsZC4KICAgIG15ICRpdGVtX2NvdW50ID0gQHskcml0ZW1fbGVuZ3Roc307CiAgICBpZiAoICRpdGVtX2NvdW50IDw9IDUgKSB7CiAgICAgICAgJG51bWJlcl9vZl9maWVsZHNfYmVzdCA9IDE7CiAgICB9CgogICAgIyBGb3IgbGFyZ2VyIHRhYmxlcywgbG9vayBhdCBpdCBib3RoIHdheXMgYW5kIHNlZSB3aGF0IGxvb2tzIGJlc3QKICAgIGVsc2UgewoKICAgICAgICBteSAkaXNfb2RkICAgICAgICAgICAgPSAxOwogICAgICAgIG15IEBtYXhfbGVuZ3RoICAgICAgICA9ICggMCwgICAgIDAgKTsKICAgICAgICBteSBAbGFzdF9sZW5ndGhfMiAgICAgPSAoIHVuZGVmLCB1bmRlZiApOwogICAgICAgIG15IEBmaXJzdF9sZW5ndGhfMiAgICA9ICggdW5kZWYsIHVuZGVmICk7CiAgICAgICAgbXkgJGxhc3RfbGVuZ3RoICAgICAgID0gdW5kZWY7CiAgICAgICAgbXkgJHRvdGFsX3ZhcmlhdGlvbl8xID0gMDsKICAgICAgICBteSAkdG90YWxfdmFyaWF0aW9uXzIgPSAwOwoKICAgICAgICBteSBAdG90YWxfdmFyaWF0aW9uXzJfc3VtcyA9ICggMCwgMCApOwoKICAgICAgICBmb3JlYWNoIG15ICRqICggMCAuLiAkaXRlbV9jb3VudCAtIDEgKSB7CgogICAgICAgICAgICAkaXNfb2RkID0gMSAtICRpc19vZGQ7CiAgICAgICAgICAgIG15ICRsZW5ndGggPSAkcml0ZW1fbGVuZ3Rocy0+WyRqXTsKICAgICAgICAgICAgaWYgKCAkbGVuZ3RoID4gJG1heF9sZW5ndGhbJGlzX29kZF0gKSB7CiAgICAgICAgICAgICAgICAkbWF4X2xlbmd0aFskaXNfb2RkXSA9ICRsZW5ndGg7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggZGVmaW5lZCgkbGFzdF9sZW5ndGgpICkgewogICAgICAgICAgICAgICAgbXkgJGRsID0gYWJzKCAkbGVuZ3RoIC0gJGxhc3RfbGVuZ3RoICk7CiAgICAgICAgICAgICAgICAkdG90YWxfdmFyaWF0aW9uXzEgKz0gJGRsOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRsYXN0X2xlbmd0aCA9ICRsZW5ndGg7CgogICAgICAgICAgICBteSAkbGwgPSAkbGFzdF9sZW5ndGhfMlskaXNfb2RkXTsKICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRsbCkgKSB7CiAgICAgICAgICAgICAgICBteSAkZGwgPSBhYnMoICRsZW5ndGggLSAkbGwgKTsKICAgICAgICAgICAgICAgICR0b3RhbF92YXJpYXRpb25fMl9zdW1zWyRpc19vZGRdICs9ICRkbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRmaXJzdF9sZW5ndGhfMlskaXNfb2RkXSA9ICRsZW5ndGg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGxhc3RfbGVuZ3RoXzJbJGlzX29kZF0gPSAkbGVuZ3RoOwogICAgICAgIH0KICAgICAgICAkdG90YWxfdmFyaWF0aW9uXzIgPQogICAgICAgICAgJHRvdGFsX3ZhcmlhdGlvbl8yX3N1bXNbMF0gKyAkdG90YWxfdmFyaWF0aW9uXzJfc3Vtc1sxXTsKCiAgICAgICAgbXkgJGZhY3RvciA9ICggJGl0ZW1fY291bnQgPiAxMCApID8gMSA6ICggJGl0ZW1fY291bnQgPiA1ICkgPyAwLjc1IDogMDsKICAgICAgICBpZiAoICR0b3RhbF92YXJpYXRpb25fMiA+PSAkZmFjdG9yICogJHRvdGFsX3ZhcmlhdGlvbl8xICkgewogICAgICAgICAgICAkbnVtYmVyX29mX2ZpZWxkc19iZXN0ID0gMTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gKCRudW1iZXJfb2ZfZmllbGRzX2Jlc3QpOwp9ICMjIGVuZCBzdWIgZ2V0X21heGltdW1fZmllbGRzX3dhbnRlZAoKc3ViIHRhYmxlX2NvbHVtbnNfYXZhaWxhYmxlIHsKICAgIG15ICRpX2ZpcnN0X2NvbW1hID0gc2hpZnQ7CiAgICBteSAkY29sdW1ucyA9CiAgICAgICRtYXhpbXVtX2xpbmVfbGVuZ3RoX2F0X2xldmVsWyAkbGV2ZWxzX3RvX2dvWyRpX2ZpcnN0X2NvbW1hXSBdIC0KICAgICAgbGVhZGluZ19zcGFjZXNfdG9fZ28oJGlfZmlyc3RfY29tbWEpOwoKICAgICMgUGF0Y2g6IHRoZSB2ZXJ0aWNhbCBmb3JtYXR0ZXIgZG9lcyBub3QgbGluZSB1cCBsaW5lcyB3aG9zZSBsZW5ndGhzCiAgICAjIGV4YWN0bHkgZXF1YWwgdGhlIGF2YWlsYWJsZSBsaW5lIGxlbmd0aCBiZWNhdXNlIG9mIGFsbG93YW5jZXMKICAgICMgdGhhdCBtdXN0IGJlIG1hZGUgZm9yIHNpZGUgY29tbWVudHMuICBUaGVyZWZvcmUsIHRoZSBudW1iZXIgb2YKICAgICMgYXZhaWxhYmxlIGNvbHVtbnMgaXMgcmVkdWNlZCBieSAxIGNoYXJhY3Rlci4KICAgICRjb2x1bW5zIC09IDE7CiAgICByZXR1cm4gJGNvbHVtbnM7Cn0gIyMgZW5kIHN1YiB0YWJsZV9jb2x1bW5zX2F2YWlsYWJsZQoKc3ViIG1heGltdW1fbnVtYmVyX29mX2ZpZWxkcyB7CgogICAgIyBob3cgbWFueSBmaWVsZHMgd2lsbCBmaXQgaW4gdGhlIGF2YWlsYWJsZSBzcGFjZT8KICAgIG15ICggJGNvbHVtbnMsICRvZGRfb3JfZXZlbiwgJG1heF93aWR0aCwgJHBhaXJfd2lkdGggKSA9IEBfOwogICAgbXkgJG1heF9wYWlycyAgICAgICAgPSBpbnQoICRjb2x1bW5zIC8gJHBhaXJfd2lkdGggKTsKICAgIG15ICRudW1iZXJfb2ZfZmllbGRzID0gJG1heF9wYWlycyAqIDI7CiAgICBpZiAoICAgJG9kZF9vcl9ldmVuID09IDEKICAgICAgICAmJiAkbWF4X3BhaXJzICogJHBhaXJfd2lkdGggKyAkbWF4X3dpZHRoIDw9ICRjb2x1bW5zICkKICAgIHsKICAgICAgICAkbnVtYmVyX29mX2ZpZWxkcysrOwogICAgfQogICAgcmV0dXJuICRudW1iZXJfb2ZfZmllbGRzOwp9ICMjIGVuZCBzdWIgbWF4aW11bV9udW1iZXJfb2ZfZmllbGRzCgpzdWIgY29tcGFjdGlmeV90YWJsZSB7CgogICAgbXkgKCAkaXRlbV9jb3VudCwgJG51bWJlcl9vZl9maWVsZHMsICRmb3JtYXR0ZWRfbGluZXMsICRvZGRfb3JfZXZlbiApID0gQF87CgogICAgIyBGb3IgYSB0YWJsZSB3aXRoIGEgY2VydGFpbiBudW1iZXIgb2YgZmllbGRzIGFuZCBhIGNlcnRhaW4gbnVtYmVyCiAgICAjIG9mIGxpbmVzLCBzZWUgaWYgcmVkdWNpbmcgdGhlIG51bWJlciBvZiBmaWVsZHMgd2lsbCBtYWtlIGl0IGxvb2sKICAgICMgYmV0dGVyLgoKICAgICMgR2l2ZW46CiAgICAjICAkaXRlbV9jb3VudCA9IGNvdW50IG9mIGxpc3QgaXRlbXMKICAgICMgICRudW1iZXJfb2ZfZmllbGRzID0gY3VycmVudCBudW1iZXIgb2YgaXRlbXMgcGVyIGxpbmUKICAgICMgICRmb3JtYXR0ZWRfbGluZXMgPSBudW1iZXIgb2YgbGluZXMgdGhpcyB3aWxsIHJlcXVpcmUKICAgICMgICRvZGRfb3JfZXZlbiA9ICAxPT5vZGQgZmllbGQgY291bnQgaXMgb2ssIDI9PndhbnQgZXZlbiBjb3VudAoKICAgICMgUmV0dXJuOgogICAgIyAgJG51bWJlcl9vZl9maWVsZHMgPSB1cGRhdGVkIG51bWJlciBvZiBpdGVtcyBwZXIgbGluZQoKICAgIGlmICggJG51bWJlcl9vZl9maWVsZHMgPj0gJG9kZF9vcl9ldmVuICogMiAmJiAkZm9ybWF0dGVkX2xpbmVzID4gMCApIHsKCiAgICAgICAgbXkgJG1pbl9maWVsZHMgPSAkbnVtYmVyX29mX2ZpZWxkczsKCiAgICAgICAgaWYgKCAkb2RkX29yX2V2ZW4gPCAxICkgewogICAgICAgICAgICAjIyBzaG91bGRuJ3QgaGFwcGVuIC0gY2FsbGVyIHBhc3NlZCBiYWQgcGFyYW1ldGVyCiAgICAgICAgICAgIERFVkVMX01PREUgJiYgRmF1bHQoImJhZCB2YWx1ZSBmb3Igb2RkX29yX2V2ZW49JG9kZF9vcl9ldmVuXG4iKTsKICAgICAgICAgICAgcmV0dXJuICRudW1iZXJfb2ZfZmllbGRzOwogICAgICAgIH0KCiAgICAgICAgd2hpbGUgKCRtaW5fZmllbGRzID49ICRvZGRfb3JfZXZlbgogICAgICAgICAgICAmJiAkbWluX2ZpZWxkcyAqICRmb3JtYXR0ZWRfbGluZXMgPj0gJGl0ZW1fY291bnQgKQogICAgICAgIHsKICAgICAgICAgICAgJG51bWJlcl9vZl9maWVsZHMgPSAkbWluX2ZpZWxkczsKICAgICAgICAgICAgJG1pbl9maWVsZHMgLT0gJG9kZF9vcl9ldmVuOwogICAgICAgIH0gIyMgZW5kIHdoaWxlICggJG1pbl9maWVsZHMgPj0gJG9kZF9vcl9ldmVuLi4uKQogICAgfQogICAgcmV0dXJuICRudW1iZXJfb2ZfZmllbGRzOwp9ICMjIGVuZCBzdWIgY29tcGFjdGlmeV90YWJsZQoKc3ViIHNldF9yYWdnZWRfYnJlYWtwb2ludHMgewoKICAgIG15ICggJHNlbGYsICRyaV90ZXJtX2NvbW1hLCAkcmlfcmFnZ2VkX2JyZWFrX2xpc3QgKSA9IEBfOwoKICAgICMgU2V0IGJyZWFrcG9pbnRzIGluIGEgbGlzdCB0aGF0IGNhbm5vdCBiZSBmb3JtYXR0ZWQgbmljZWx5IGFzIGEgdGFibGUuCgogICAgbXkgJGJyZWFrX2NvdW50ID0gMDsKICAgIGZvcmVhY2ggKCBAeyRyaV9yYWdnZWRfYnJlYWtfbGlzdH0gKSB7CiAgICAgICAgbXkgJGogPSAkcmlfdGVybV9jb21tYS0+WyRfXTsKICAgICAgICBpZiAoJGopIHsKICAgICAgICAgICAgJHNlbGYtPnNldF9mb3JjZWRfYnJlYWtwb2ludCgkaik7CiAgICAgICAgICAgICRicmVha19jb3VudCsrOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAkYnJlYWtfY291bnQ7Cn0gIyMgZW5kIHN1YiBzZXRfcmFnZ2VkX2JyZWFrcG9pbnRzCgpzdWIgY29weV9vbGRfYnJlYWtwb2ludHMgewogICAgbXkgKCAkc2VsZiwgJGlfZmlyc3RfY29tbWEsICRpX2xhc3RfY29tbWEgKSA9IEBfOwoKICAgICMgV2UgYXJlIGZvcm1hdHRpbmcgYSBsaXN0IGFuZCBoYXZlIGRlY2lkZWQgdG8gbWFrZSBjb21tYSBicmVha3MKICAgICMgdGhlIHNhbWUgYXMgaW4gdGhlIGlucHV0IGZpbGUuCgogICAgIyBJZiB0aGUgY29tbWEgc3R5bGUgaXMgdW5kZXIgY2VydGFpbiBjb250cm9scywgYW5kIGlmIHRoaXMgaXMgYQogICAgIyBjb21tYSBicmVha3BvaW50IHdpdGggdGhlIGNvbW1hIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQKICAgICMgbGluZSwgdGhlbiB3ZSBtdXN0IHBhc3MgdGhhdCBpbmRleCBpbnN0ZWFkLiBUaGlzIHdpbGwgYWxsb3cgc3ViCiAgICAjIHNldF9mb3JjZWRfYnJlYWtwb2ludHMgdG8gY2hlY2sgYW5kIGZvbGxvdyB0aGUgdXNlciBzZXR0aW5ncy4gVGhpcwogICAgIyBwcm9kdWNlcyBhIHVuaWZvcm0gc3R5bGUgYW5kIGNhbiBwcmV2ZW50IGluc3RhYmlsaXR5IChiMTQyMikuCiAgICAjCiAgICAjIFRoZSBmbGFnICckY29udHJvbGxlZF9jb21tYV9zdHlsZScgd2lsbCBiZSBzZXQgaWYgdGhlIHVzZXIKICAgICMgZW50ZXJlZCBhbnkgb2YgLXdiYj0nLCcgLXdiYT0nLCcgLWtiYj0nLCcgLWtiYT0nLCcuICBJdCBpcyBub3QKICAgICMgc2V0IGZvciB0aGUgLWJvYyBmbGFnLCBidXQgd2Ugd2lsbCBuZWVkIHRvIHRyZWF0IC1ib2MgaW4gdGhlCiAgICAjIHNhbWUgd2F5IGZvciBsaXN0cyB3aXRoIGJyZWFrcyBib3RoIGJlZm9yZSBhbmQgYWZ0ZXIgY29tbWFzIHRvCiAgICAjIGF2b2lkIGV4Y2VzcyBpdGVyYXRpb25zLgoKICAgIG15IEBpX29sZF9icmVha3M7CiAgICBmb3IgbXkgJGkgKCAkaV9maXJzdF9jb21tYSAuLiAkaV9sYXN0X2NvbW1hICkgewogICAgICAgIGlmICggJG9sZF9icmVha3BvaW50X3RvX2dvWyRpXSApIHsKICAgICAgICAgICAgcHVzaCBAaV9vbGRfYnJlYWtzLCAkaTsKICAgICAgICB9CiAgICB9CgogICAgIyBqdXN0IGNvcHkgb2xkIGJyZWFrcG9pbnRzIHVubGVzcyAkY29udHJvbGxlZF9jb21tYV9zdHlsZSBvciAtYm9jCiAgICBpZiAoICAgISRjb250cm9sbGVkX2NvbW1hX3N0eWxlCiAgICAgICAgJiYgISRyT3B0c19icmVha19hdF9vbGRfY29tbWFfYnJlYWtwb2ludHMgKQogICAgewogICAgICAgIGZvcmVhY2ggbXkgJGlpIChAaV9vbGRfYnJlYWtzKSB7CiAgICAgICAgICAgICRzZWxmLT5zZXRfZm9yY2VkX2JyZWFrcG9pbnQoJGlpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgU2NhbiBmb3IgY29tbWFzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9sZCBicmVha3BvaW50cy4uLgogICAgbXkgQGlfYnJlYWtzOwogICAgbXkgJG51bV9hZnRlcjsKICAgIG15ICRudW1fYmVmb3JlOwogICAgZm9yZWFjaCBteSAkaSAoQGlfb2xkX2JyZWFrcykgewogICAgICAgIG15ICRpX2JyZWFrID0gJGk7CiAgICAgICAgaWYgKCAkdHlwZXNfdG9fZ29bJGlfYnJlYWtdIG5lICcsJyApIHsKICAgICAgICAgICAgbXkgJGluZGV4ID0gJGluZXh0X3RvX2dvWyRpX2JyZWFrXTsKICAgICAgICAgICAgaWYgKCAkaW5kZXggPiAkaV9icmVhayAmJiAkdHlwZXNfdG9fZ29bJGluZGV4XSBlcSAnLCcgKSB7CiAgICAgICAgICAgICAgICAkaV9icmVhayA9ICRpbmRleDsKICAgICAgICAgICAgICAgICRudW1fYmVmb3JlKys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7ICRudW1fYWZ0ZXIrKzsgfQogICAgICAgIHB1c2ggQGlfYnJlYWtzLCAkaV9icmVhazsKICAgIH0KCiAgICAjIC1ib2MgYnkgaXRzZWxmIGNhbiB1c2Ugb2xkIGJyZWFrcyBleGNlcHQgd2hlbiB0aGVyZSBhcmUgbWl4ZWQKICAgICMgbGVhZGluZyBhbmQgdHJhaWxpbmcgY29tbWFzLiBJbiB0aGF0IGNhc2UgZXhjZXNzIGl0ZXJhdGlvbnMKICAgICMgY2FuIG9jY3VyIChzZWUgYjg3OCkKICAgIGlmICggICEkY29udHJvbGxlZF9jb21tYV9zdHlsZQogICAgICAgICYmICRyT3B0c19icmVha19hdF9vbGRfY29tbWFfYnJlYWtwb2ludHMgKQogICAgewoKICAgICAgICBteSAkbWl4ZWQgPSAkbnVtX2JlZm9yZSAmJiAkbnVtX2FmdGVyOwogICAgICAgIGlmICggISRtaXhlZCApIHsKICAgICAgICAgICAgQGlfYnJlYWtzID0gQGlfb2xkX2JyZWFrczsKICAgICAgICB9CiAgICB9CgogICAgZm9yZWFjaCBteSAkaWkgKEBpX2JyZWFrcykgewogICAgICAgICRzZWxmLT5zZXRfZm9yY2VkX2JyZWFrcG9pbnQoJGlpKTsKICAgIH0KCiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBjb3B5X29sZF9icmVha3BvaW50cwoKc3ViIHNldF9ub2JyZWFrcyB7CiAgICBteSAoICRzZWxmLCAkaSwgJGogKSA9IEBfOwoKICAgICMgR2l2ZW46CiAgICAjICAgJGkgPSBzdGFydGluZyBpbmRleCBpbiBfdG9fZ28gYXJyYXlzCiAgICAjICAgJGogPSBlbmRpbmcgaW5kZXggaW4gX3RvX2dvIGFycmF5cwogICAgIyBUYXNrOgogICAgIyAgIHNldCBub2JyZWFrX3RvX2dvIGZvciBpbmRleCByYW5nZSAkaSAuLiAkagogICAgaWYgKCAkaSA+PSAwICYmICRpIDw9ICRqICYmICRqIDw9ICRtYXhfaW5kZXhfdG9fZ28gKSB7CgogICAgICAgIDAgJiYgZG8gewogICAgICAgICAgICBteSAoICRwa2csICRmaWxlX3V1LCAkbG5vICkgPSBjYWxsZXIoKTsKICAgICAgICAgICAgcHJpbnQgeypTVERPVVR9CiJOT0JSRUFLOiBmb3JjZWRfYnJlYWtwb2ludCAkZm9yY2VkX2JyZWFrcG9pbnRfY291bnQgZnJvbSAkcGtnICRsbm8gd2l0aCBpPSRpIG1heD0kbWF4X2luZGV4X3RvX2dvIHR5cGU9JHR5cGVzX3RvX2dvWyRpXVxuIjsKICAgICAgICB9OwoKICAgICAgICBAbm9icmVha190b19nb1sgJGkgLi4gJGogXSA9ICgxKSB4ICggJGogLSAkaSArIDEgKTsKICAgIH0KCiAgICAjIHNob3VsZG4ndCBoYXBwZW47IG5vbi1jcml0aWNhbCBlcnJvcgogICAgZWxzZSB7CiAgICAgICAgaWYgKERFVkVMX01PREUpIHsKICAgICAgICAgICAgbXkgKCAkcGtnLCAkZmlsZV91dSwgJGxubyApID0gY2FsbGVyKCk7CiAgICAgICAgICAgIEZhdWx0KDw8RU9NKTsKTk9CUkVBSyBFUlJPUjogZnJvbSAkcGtnICRsbm8gd2l0aCBpPSRpIGo9JGogbWF4PSRtYXhfaW5kZXhfdG9fZ28KRU9NCiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgc2V0X25vYnJlYWtzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIENPREUgU0VDVElPTiAxMjogQ29kZSBmb3Igc2V0dGluZyBpbmRlbnRhdGlvbgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKc3ViIHRva2VuX3NlcXVlbmNlX2xlbmd0aCB7CgogICAgIyByZXR1cm4gbGVuZ3RoIG9mIHRva2VucyAoJGliZWcgLi4gJGllbmQpIGluY2x1ZGluZyAkaWJlZyAmICRpZW5kCiAgICBteSAoICRpYmVnLCAkaWVuZCApID0gQF87CgogICAgIyBmaXggcG9zc2libGUgbmVnYXRpdmUgc3RhcnRpbmcgaW5kZXgKICAgIGlmICggJGliZWcgPCAwICkgeyAkaWJlZyA9IDAgfQoKICAgICMgcmV0dXJucyAwIGlmIGluZGV4IHJhbmdlIGlzIGVtcHR5IChzb21lIHN1YnMgYXNzdW1lIHRoaXMpCiAgICBpZiAoICRpYmVnID4gJGllbmQgKSB7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgcmV0dXJuICRzdW1tZWRfbGVuZ3Roc190b19nb1sgJGllbmQgKyAxIF0gLSAkc3VtbWVkX2xlbmd0aHNfdG9fZ29bJGliZWddOwp9ICMjIGVuZCBzdWIgdG9rZW5fc2VxdWVuY2VfbGVuZ3RoCgpzdWIgdG90YWxfbGluZV9sZW5ndGggewoKICAgICMgcmV0dXJuIGxlbmd0aCBvZiBhIGxpbmUgb2YgdG9rZW5zICgkaWJlZyAuLiAkaWVuZCkKICAgIG15ICggJGliZWcsICRpZW5kICkgPSBAXzsKCiAgICAjIGdldCB0aGUgbGVhZGluZyBzcGFjZXMgb24gdGhpcyBsaW5lIC4uLgogICAgbXkgJHNwYWNlcyA9ICRsZWFkaW5nX3NwYWNlc190b19nb1skaWJlZ107CiAgICBpZiAoIHJlZigkc3BhY2VzKSApIHsgJHNwYWNlcyA9ICRzcGFjZXMtPmdldF9zcGFjZXMoKSB9CgogICAgIyAuLi4gdGhlbiBhZGQgdGhlIG5ldCB0b2tlbiBsZW5ndGgKICAgIHJldHVybiAkc3BhY2VzICsgJHN1bW1lZF9sZW5ndGhzX3RvX2dvWyAkaWVuZCArIDEgXSAtCiAgICAgICRzdW1tZWRfbGVuZ3Roc190b19nb1skaWJlZ107Cgp9ICMjIGVuZCBzdWIgdG90YWxfbGluZV9sZW5ndGgKCnN1YiBleGNlc3NfbGluZV9sZW5ndGggewoKICAgIG15ICggJHNlbGYsICRpYmVnLCAkaWVuZCwgKCRpZ25vcmVfcmlnaHRfd2VsZCkgKSA9IEBfOwoKICAgICMgUmV0dXJuIG51bWJlciBvZiBjaGFyYWN0ZXJzIGJ5IHdoaWNoIGEgbGluZSBvZiB0b2tlbnMgKCRpYmVnLi4kaWVuZCkKICAgICMgZXhjZWVkcyB0aGUgYWxsb3dhYmxlIGxpbmUgbGVuZ3RoLgogICAgIyBHaXZlbjoKICAgICMgICAkaWJlZywgJGllbmQgPSByYW5nZSBvZiBpbmRleGVzIG9mIHRoaXMgbGluZSBpbiB0aGUgX3RvX2dvIGFycmF5cwogICAgIyAgICRpZ25vcmVfcmlnaHRfd2VsZCA9IG9wdGlvbmFsIGZsYWcgPSB0cnVlIHRvIGV4Y2x1ZGUgYW55IHJpZ2h0IHdlbGQKICAgICMgTk9URTogcHJvZmlsaW5nIHNob3dzIHRoYXQgZWZmaWNpZW5jeSBvZiB0aGlzIHJvdXRpbmUgaXMgZXNzZW50aWFsLgoKICAgICMgU3RhcnQgd2l0aCB0aGUgbGVhZGluZyBzcGFjZXMgb24gdGhpcyBsaW5lIC4uLgogICAgbXkgJGV4Y2VzcyA9ICRsZWFkaW5nX3NwYWNlc190b19nb1skaWJlZ107CiAgICBpZiAoIHJlZigkZXhjZXNzKSApIHsgJGV4Y2VzcyA9ICRleGNlc3MtPmdldF9zcGFjZXMoKSB9CgogICAgIyAuLi4gYW5kIGluY2x1ZGUgcmlnaHQgd2VsZCBsZW5ndGhzIHVubGVzcyByZXF1ZXN0ZWQgbm90IHRvCiAgICBpZiAoICAgJHRvdGFsX3dlbGRfY291bnQKICAgICAgICAmJiAkdHlwZV9zZXF1ZW5jZV90b19nb1skaWVuZF0KICAgICAgICAmJiAhJGlnbm9yZV9yaWdodF93ZWxkICkKICAgIHsKICAgICAgICBteSAkd3IgPSAkc2VsZi0+W19yd2VsZF9sZW5fcmlnaHRfYXRfS19dLT57ICRLX3RvX2dvWyRpZW5kXSB9OwogICAgICAgICRleGNlc3MgKz0gJHdyIGlmIGRlZmluZWQoJHdyKTsKICAgIH0KCiAgICAjIC4uLiB0aGVuIGFkZCB0aGUgbmV0IHRva2VuIGxlbmd0aCwgbWludXMgdGhlIG1heGltdW0gbGVuZ3RoCiAgICByZXR1cm4gJGV4Y2VzcyArCiAgICAgICRzdW1tZWRfbGVuZ3Roc190b19nb1sgJGllbmQgKyAxIF0gLQogICAgICAkc3VtbWVkX2xlbmd0aHNfdG9fZ29bJGliZWddIC0KICAgICAgJG1heGltdW1fbGluZV9sZW5ndGhfYXRfbGV2ZWxbICRsZXZlbHNfdG9fZ29bJGliZWddIF07Cgp9ICMjIGVuZCBzdWIgZXhjZXNzX2xpbmVfbGVuZ3RoCgpzdWIgZ2V0X3NwYWNlcyB7CgogICAgIyByZXR1cm4gdGhlIG51bWJlciBvZiBsZWFkaW5nIHNwYWNlcyBhc3NvY2lhdGVkIHdpdGggYW4gaW5kZW50YXRpb24KICAgICMgdmFyaWFibGUgJGluZGVudGF0aW9uIGlzIGVpdGhlciBhIGNvbnN0YW50IG51bWJlciBvZiBzcGFjZXMgb3IgYW4gb2JqZWN0CiAgICAjIHdpdGggYSBnZXRfc3BhY2VzIG1ldGhvZC4KICAgIG15ICRpbmRlbnRhdGlvbiA9IHNoaWZ0OwogICAgcmV0dXJuIHJlZigkaW5kZW50YXRpb24pID8gJGluZGVudGF0aW9uLT5nZXRfc3BhY2VzKCkgOiAkaW5kZW50YXRpb247Cn0gIyMgZW5kIHN1YiBnZXRfc3BhY2VzCgpzdWIgZ2V0X3JlY292ZXJhYmxlX3NwYWNlcyB7CgogICAgIyByZXR1cm4gdGhlIG51bWJlciBvZiBzcGFjZXMgKCsgbWVhbnMgc2hpZnQgcmlnaHQsIC0gbWVhbnMgc2hpZnQgbGVmdCkKICAgICMgdGhhdCB3ZSB3b3VsZCBsaWtlIHRvIHNoaWZ0IGEgZ3JvdXAgb2YgbGluZXMgd2l0aCB0aGUgc2FtZSBpbmRlbnRhdGlvbgogICAgIyB0byBnZXQgdGhlbSB0byBsaW5lIHVwIHdpdGggdGhlaXIgb3BlbmluZyBwYXJlbnMKICAgIG15ICRpbmRlbnRhdGlvbiA9IHNoaWZ0OwogICAgcmV0dXJuIHJlZigkaW5kZW50YXRpb24pID8gJGluZGVudGF0aW9uLT5nZXRfcmVjb3ZlcmFibGVfc3BhY2VzKCkgOiAwOwp9ICMjIGVuZCBzdWIgZ2V0X3JlY292ZXJhYmxlX3NwYWNlcwoKc3ViIGdldF9hdmFpbGFibGVfc3BhY2VzX3RvX2dvIHsKCiAgICBteSAoICRzZWxmLCAkaWkgKSA9IEBfOwogICAgbXkgJGl0ZW0gPSAkbGVhZGluZ19zcGFjZXNfdG9fZ29bJGlpXTsKCiAgICAjIHJldHVybiB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBsZWFkaW5nIHNwYWNlcyBhc3NvY2lhdGVkIHdpdGggYW4KICAgICMgaW5kZW50YXRpb24gdmFyaWFibGUuICAkaW5kZW50YXRpb24gaXMgZWl0aGVyIGEgY29uc3RhbnQgbnVtYmVyIG9mCiAgICAjIHNwYWNlcyBvciBhbiBvYmplY3Qgd2l0aCBhIGdldF9hdmFpbGFibGVfc3BhY2VzIG1ldGhvZC4KICAgIHJldHVybiByZWYoJGl0ZW0pID8gJGl0ZW0tPmdldF9hdmFpbGFibGVfc3BhY2VzKCkgOiAwOwp9ICMjIGVuZCBzdWIgZ2V0X2F2YWlsYWJsZV9zcGFjZXNfdG9fZ28KCnsgICAgIyMgYmVnaW4gY2xvc3VyZSBzZXRfbHBfaW5kZW50YXRpb24KCiAgICB1c2UgY29uc3RhbnQgREVCVUdfTFAgPT4gMDsKCiAgICAjIFN0YWNrIG9mIC1scCBpbmRleCBvYmplY3RzIHdoaWNoIHN1cnZpdmVzIGJldHdlZW4gYmF0Y2hlcy4KICAgIG15ICRyTFA7CiAgICBteSAkbWF4X2xwX3N0YWNrOwoKICAgICMgVGhlIHByZWRpY3RlZCBwb3NpdGlvbiBvZiB0aGUgbmV4dCBvcGVuaW5nIGNvbnRhaW5lciB3aGljaCBtYXkgc3RhcnQKICAgICMgYW4gLWxwIGluZGVudGF0aW9uIGxldmVsLiAgVGhpcyBzdXJ2aXZlcyBiZXR3ZWVuIGJhdGNoZXMuCiAgICBteSAkbHBfcG9zaXRpb25fcHJlZGljdG9yOwoKICAgIEJFR0lOIHsKCiAgICAgICAgIyBJbmRleCBuYW1lcyBmb3IgdGhlIC1scCBzdGFjayB2YXJpYWJsZXMuCiAgICAgICAgIyBEbyBub3QgY29tYmluZSB3aXRoIG90aGVyIEJFR0lOIGJsb2NrcyAoYzEwMSkuCgogICAgICAgIG15ICRpID0gMDsKICAgICAgICB1c2UgY29uc3RhbnQgewogICAgICAgICAgICBfbHBfY2lfbGV2ZWxfICAgICAgICA9PiAkaSsrLAogICAgICAgICAgICBfbHBfbGV2ZWxfICAgICAgICAgICA9PiAkaSsrLAogICAgICAgICAgICBfbHBfb2JqZWN0XyAgICAgICAgICA9PiAkaSsrLAogICAgICAgICAgICBfbHBfY29udGFpbmVyX3NlcW5vXyA9PiAkaSsrLAogICAgICAgICAgICBfbHBfc3BhY2VfY291bnRfICAgICA9PiAkaSsrLAogICAgICAgIH07CiAgICB9ICMjIGVuZCBCRUdJTgoKICAgIHN1YiBpbml0aWFsaXplX2xwX3ZhcnMgewoKICAgICAgICAjIGluaXRpYWxpemUgZ251IHZhcmlhYmxlcyBmb3IgYSBuZXcgZmlsZTsKICAgICAgICAjIG11c3QgYmUgY2FsbGVkIG9uY2UgYXQgdGhlIHN0YXJ0IG9mIGEgbmV3IGZpbGUuCgogICAgICAgICRscF9wb3NpdGlvbl9wcmVkaWN0b3IgPSAwOwogICAgICAgICRtYXhfbHBfc3RhY2sgICAgICAgICAgPSAwOwoKICAgICAgICAjIHdlIGNhbiB0dXJuIG9mZiAtbHAgaWYgYWxsIGxldmVscyB3aWxsIGJlIGF0IG9yIGFib3ZlIHRoZSBjdXRvZmYKICAgICAgICBpZiAoICRoaWdoX3N0cmVzc19sZXZlbCA8PSAxICkgewogICAgICAgICAgICAkck9wdHNfbGluZV91cF9wYXJlbnRoZXNlcyAgICAgICAgICA9IDA7CiAgICAgICAgICAgICRyT3B0c19leHRlbmRlZF9saW5lX3VwX3BhcmVudGhlc2VzID0gMDsKICAgICAgICB9CgogICAgICAgICMgZml4IGZvciBiMTQ1OTogLW5hd3MgYWRkcyBzdHJlc3MgZm9yIC14bHAKICAgICAgICBpZiAoICRoaWdoX3N0cmVzc19sZXZlbCA8PSAyICYmICEkck9wdHNfYWRkX3doaXRlc3BhY2UgKSB7CiAgICAgICAgICAgICRyT3B0c19leHRlbmRlZF9saW5lX3VwX3BhcmVudGhlc2VzID0gMDsKICAgICAgICB9CgogICAgICAgICMgZml4IGZvciBiMTQ2NTogLXZtbGwgYWRkcyBzdHJlc3MgZm9yIC14bHAKICAgICAgICBpZiAoICRoaWdoX3N0cmVzc19sZXZlbCA8PSAyICYmICRyT3B0c192YXJpYWJsZV9tYXhpbXVtX2xpbmVfbGVuZ3RoICkgewogICAgICAgICAgICAkck9wdHNfZXh0ZW5kZWRfbGluZV91cF9wYXJlbnRoZXNlcyA9IDA7CiAgICAgICAgfQoKICAgICAgICAkckxQID0gW107CgogICAgICAgICMgaW5pdGlhbGl6ZSB0aGUgbGVhZGluZyB3aGl0ZXNwYWNlIHN0YWNrIHRvIG5lZ2F0aXZlIGxldmVscwogICAgICAgICMgc28gdGhhdCB3ZSBjYW4gbmV2ZXIgcnVuIG9mZiB0aGUgZW5kIG9mIHRoZSBzdGFjawogICAgICAgICRyTFAtPlskbWF4X2xwX3N0YWNrXS0+W19scF9jaV9sZXZlbF9dICAgICAgICA9IC0xOwogICAgICAgICRyTFAtPlskbWF4X2xwX3N0YWNrXS0+W19scF9sZXZlbF9dICAgICAgICAgICA9IC0xOwogICAgICAgICRyTFAtPlskbWF4X2xwX3N0YWNrXS0+W19scF9vYmplY3RfXSAgICAgICAgICA9IHVuZGVmOwogICAgICAgICRyTFAtPlskbWF4X2xwX3N0YWNrXS0+W19scF9jb250YWluZXJfc2Vxbm9fXSA9IFNFUV9ST09UOwogICAgICAgICRyTFAtPlskbWF4X2xwX3N0YWNrXS0+W19scF9zcGFjZV9jb3VudF9dICAgICA9IDA7CgogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBpbml0aWFsaXplX2xwX3ZhcnMKCiAgICAjIGhhc2hlcyBmb3IgZWZmaWNpZW50IHRlc3RpbmcKICAgIG15ICVoYXNoX3Rlc3QxOwogICAgbXkgJWhhc2hfdGVzdDI7CiAgICBteSAlaGFzaF90ZXN0MzsKCiAgICBCRUdJTiB7CiAgICAgICAgbXkgQHEgPSBxdzwgfSApIF0gPjsKICAgICAgICBAaGFzaF90ZXN0MXtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwogICAgICAgIEBxID0gcXcoIDogPyBmICk7CiAgICAgICAgcHVzaCBAcSwgJywnOwogICAgICAgIEBoYXNoX3Rlc3Qye0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CiAgICAgICAgQHEgICAgICAgICAgICAgID0gcXcoIC4gfHwgJiYgKTsKICAgICAgICBAaGFzaF90ZXN0M3tAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwogICAgfSAjIyBlbmQgQkVHSU4KCiAgICAjIHNoYXJlZCB2YXJpYWJsZXMsIHJlLWluaXRpYWxpemVkIGZvciBlYWNoIGJhdGNoCiAgICBteSAkcmxwX29iamVjdF9saXN0OwogICAgbXkgJG1heF9scF9vYmplY3RfbGlzdDsKICAgIG15ICVscF9jb21tYV9jb3VudDsKICAgIG15ICVscF9hcnJvd19jb3VudDsKICAgIG15ICRzcGFjZV9jb3VudDsKICAgIG15ICRjdXJyZW50X2xldmVsOwogICAgbXkgJGN1cnJlbnRfY2lfbGV2ZWw7CiAgICBteSAkaWlfYmVnaW5fbGluZTsKICAgIG15ICRpbl9scF9tb2RlOwogICAgbXkgJHN0YWNrX2NoYW5nZWQ7CiAgICBteSAkS19sYXN0X25vbmJsYW5rOwogICAgbXkgJGxhc3Rfbm9uYmxhbmtfdG9rZW47CiAgICBteSAkbGFzdF9ub25ibGFua190eXBlOwogICAgbXkgJGxhc3RfbGFzdF9ub25ibGFua190eXBlOwoKICAgIHN1YiBzZXRfbHBfaW5kZW50YXRpb24gewoKICAgICAgICBteSAoJHNlbGYpID0gQF87CgogICAgICAgICMgRGVmaW5lIHRoZSBsZWFkaW5nIHdoaXRlc3BhY2UgZm9yIGFsbCB0b2tlbnMgaW4gdGhlIGN1cnJlbnQgYmF0Y2gKICAgICAgICAjIHdoZW4gdGhlIC1scCBmb3JtYXR0aW5nIGlzIHNlbGVjdGVkLgoKICAgICAgICAjIFJldHVybnMgbnVtYmVyIG9mIHRva2VucyBpbiB0aGlzIGJhdGNoIHdoaWNoIGhhdmUgbGVhZGluZyBzcGFjZXMKICAgICAgICAjIGRlZmluZWQgYnkgYW4gbHAgb2JqZWN0OgogICAgICAgIG15ICRscF9vYmplY3RfY291bnRfdGhpc19iYXRjaCA9IDA7CgogICAgICAgICMgU2FmZXR5IGNoZWNrOiB0aGlzIHNob3VsZCBub3QgYmUgY2FsbGVkIHdoZW4gdGhlcmUgaXMgbm90aGluZyB0byBkbwogICAgICAgIGlmICggICAhJHJPcHRzX2xpbmVfdXBfcGFyZW50aGVzZXMKICAgICAgICAgICAgfHwgIWRlZmluZWQoJG1heF9pbmRleF90b19nbykKICAgICAgICAgICAgfHwgJG1heF9pbmRleF90b19nbyA8IDAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJGxwX3N0ciA9CiAgICAgICAgICAgICAgZGVmaW5lZCgkck9wdHNfbGluZV91cF9wYXJlbnRoZXNlcykKICAgICAgICAgICAgICA/ICRyT3B0c19saW5lX3VwX3BhcmVudGhlc2VzCiAgICAgICAgICAgICAgOiAndW5kZWYnOwogICAgICAgICAgICBteSAkbWF4X3N0ciA9CiAgICAgICAgICAgICAgZGVmaW5lZCgkbWF4X2luZGV4X3RvX2dvKSA/ICRtYXhfaW5kZXhfdG9fZ28gOiAndW5kZWYnOwogICAgICAgICAgICBERVZFTF9NT0RFCiAgICAgICAgICAgICAgJiYgRmF1bHQoCiJzaG91bGQgbm90IGJlIGhlcmUgd2l0aCAtbHA9JGxwX3N0ciAtbWF4X2luZGV4X3RvX2dvPSRtYXhfc3RyXG4iCiAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuICRscF9vYmplY3RfY291bnRfdGhpc19iYXRjaDsKICAgICAgICB9CgogICAgICAgICMgTGlzdCBvZiAtbHAgaW5kZW50YXRpb24gb2JqZWN0cyBjcmVhdGVkIGluIHRoaXMgYmF0Y2gKICAgICAgICAkcmxwX29iamVjdF9saXN0ICAgID0gW107CiAgICAgICAgJG1heF9scF9vYmplY3RfbGlzdCA9IC0xOwoKICAgICAgICAlbHBfY29tbWFfY291bnQgICAgICAgICAgPSAoKTsKICAgICAgICAlbHBfYXJyb3dfY291bnQgICAgICAgICAgPSAoKTsKICAgICAgICAkc3BhY2VfY291bnQgICAgICAgICAgICAgPSB1bmRlZjsKICAgICAgICAkY3VycmVudF9sZXZlbCAgICAgICAgICAgPSB1bmRlZjsKICAgICAgICAkY3VycmVudF9jaV9sZXZlbCAgICAgICAgPSB1bmRlZjsKICAgICAgICAkaWlfYmVnaW5fbGluZSAgICAgICAgICAgPSAwOwogICAgICAgICRpbl9scF9tb2RlICAgICAgICAgICAgICA9IDA7CiAgICAgICAgJHN0YWNrX2NoYW5nZWQgICAgICAgICAgID0gMTsKICAgICAgICAkS19sYXN0X25vbmJsYW5rICAgICAgICAgPSB1bmRlZjsKICAgICAgICAkbGFzdF9ub25ibGFua190b2tlbiAgICAgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgJGxhc3Rfbm9uYmxhbmtfdHlwZSAgICAgID0gRU1QVFlfU1RSSU5HOwogICAgICAgICRsYXN0X2xhc3Rfbm9uYmxhbmtfdHlwZSA9IEVNUFRZX1NUUklORzsKCiAgICAgICAgbXkgJWxhc3RfbHBfZXF1YWxzID0gKCk7CgogICAgICAgIG15ICRyTEwgICAgICAgID0gJHNlbGYtPltfckxMX107CiAgICAgICAgbXkgJHRoaXNfYmF0Y2ggPSAkc2VsZi0+W190aGlzX2JhdGNoX107CgogICAgICAgIG15ICRzdGFydGluZ19pbl9xdW90ZSA9ICR0aGlzX2JhdGNoLT5bX3N0YXJ0aW5nX2luX3F1b3RlX107CgogICAgICAgIG15ICRpbWluID0gMDsKCiAgICAgICAgIyBUaGUgJ3N0YXJ0aW5nX2luX3F1b3RlJyBmbGFnIG1lYW5zIHRoYXQgdGhlIGZpcnN0IHRva2VuIGlzIHRoZSBmaXJzdAogICAgICAgICMgdG9rZW4gb2YgYSBsaW5lIGFuZCBpdCBpcyBhbHNvIHRoZSBjb250aW51YXRpb24gb2Ygc29tZSBraW5kIG9mCiAgICAgICAgIyBtdWx0aS1saW5lIHF1b3RlIG9yIHBhdHRlcm4uICBJdCBtdXN0IGhhdmUgbm8gYWRkZWQgbGVhZGluZwogICAgICAgICMgd2hpdGVzcGFjZSwgc28gd2UgY2FuIHNraXAgaXQuCiAgICAgICAgaWYgKCRzdGFydGluZ19pbl9xdW90ZSkgewogICAgICAgICAgICAkaW1pbiArPSAxOwogICAgICAgIH0KCiAgICAgICAgbXkgJEtwbmIgPSAkS190b19nb1swXSAtIDE7CiAgICAgICAgaWYgKCAkS3BuYiA+IDAgJiYgJHJMTC0+WyRLcG5iXS0+W19UWVBFX10gZXEgJ2InICkgewogICAgICAgICAgICAkS3BuYiAtPSAxOwogICAgICAgIH0KICAgICAgICBpZiAoICRLcG5iID49IDAgJiYgJHJMTC0+WyRLcG5iXS0+W19UWVBFX10gbmUgJ2InICkgewogICAgICAgICAgICAkS19sYXN0X25vbmJsYW5rID0gJEtwbmI7CiAgICAgICAgfQoKICAgICAgICBpZiAoIGRlZmluZWQoJEtfbGFzdF9ub25ibGFuaykgKSB7CiAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX3Rva2VuID0gJHJMTC0+WyRLX2xhc3Rfbm9uYmxhbmtdLT5bX1RPS0VOX107CiAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX3R5cGUgID0gJHJMTC0+WyRLX2xhc3Rfbm9uYmxhbmtdLT5bX1RZUEVfXTsKICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgTG9vcCBvdmVyIGFsbCB0b2tlbnMgaW4gdGhpcyBiYXRjaAogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGZvcmVhY2ggbXkgJGlpICggJGltaW4gLi4gJG1heF9pbmRleF90b19nbyApIHsKCiAgICAgICAgICAgIG15ICR0eXBlICAgICAgICA9ICR0eXBlc190b19nb1skaWldOwogICAgICAgICAgICBteSAkdG9rZW4gICAgICAgPSAkdG9rZW5zX3RvX2dvWyRpaV07CiAgICAgICAgICAgIG15ICRsZXZlbCAgICAgICA9ICRsZXZlbHNfdG9fZ29bJGlpXTsKICAgICAgICAgICAgbXkgJGNpX2xldmVsICAgID0gJGNpX2xldmVsc190b19nb1skaWldOwogICAgICAgICAgICBteSAkdG90YWxfZGVwdGggPSAkbmVzdGluZ19kZXB0aF90b19nb1skaWldOwoKICAgICAgICAgICAgIyBnZXQgdGhlIHRvcCBzdGF0ZSBmcm9tIHRoZSBzdGFjayBpZiBpdCBoYXMgY2hhbmdlZAogICAgICAgICAgICBpZiAoJHN0YWNrX2NoYW5nZWQpIHsKICAgICAgICAgICAgICAgIG15ICRyTFBfdG9wICAgPSAkckxQLT5bJG1heF9scF9zdGFja107CiAgICAgICAgICAgICAgICBteSAkbHBfb2JqZWN0ID0gJHJMUF90b3AtPltfbHBfb2JqZWN0X107CiAgICAgICAgICAgICAgICBpZiAoJGxwX29iamVjdCkgewogICAgICAgICAgICAgICAgICAgICggJHNwYWNlX2NvdW50LCAkY3VycmVudF9sZXZlbCwgJGN1cnJlbnRfY2lfbGV2ZWwgKSA9CiAgICAgICAgICAgICAgICAgICAgICBAeyAkbHBfb2JqZWN0LT5nZXRfc3BhY2VzX2xldmVsX2NpKCkgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRjdXJyZW50X2NpX2xldmVsID0gJHJMUF90b3AtPltfbHBfY2lfbGV2ZWxfXTsKICAgICAgICAgICAgICAgICAgICAkY3VycmVudF9sZXZlbCAgICA9ICRyTFBfdG9wLT5bX2xwX2xldmVsX107CiAgICAgICAgICAgICAgICAgICAgJHNwYWNlX2NvdW50ICAgICAgPSAkckxQX3RvcC0+W19scF9zcGFjZV9jb3VudF9dOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHN0YWNrX2NoYW5nZWQgPSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgQnJlYWsgYXQgYSBwcmV2aW91cyAnPScgaWYgbmVjZXNzYXJ5IHRvIGNvbnRyb2wgbGluZSBsZW5ndGgKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICBpZiAoICR0eXBlIGVxICd7JyB8fCAkdHlwZSBlcSAnKCcgKSB7CiAgICAgICAgICAgICAgICAkbHBfY29tbWFfY291bnR7ICR0b3RhbF9kZXB0aCArIDEgfSA9IDA7CiAgICAgICAgICAgICAgICAkbHBfYXJyb3dfY291bnR7ICR0b3RhbF9kZXB0aCArIDEgfSA9IDA7CgogICAgICAgICAgICAgICAgIyBJZiB3ZSBjb21lIHRvIGFuIG9wZW5pbmcgdG9rZW4gYWZ0ZXIgYW4gJz0nIHRva2VuIG9mIHNvbWUKICAgICAgICAgICAgICAgICMgdHlwZSwgc2VlIGlmIGl0IHdvdWxkIGJlIGhlbHBmdWwgdG8gJ2JyZWFrJyBhZnRlciB0aGUgJz0nIHRvCiAgICAgICAgICAgICAgICAjIHNhdmUgc3BhY2UKICAgICAgICAgICAgICAgIG15ICRpaV9sYXN0X2VxdWFscyA9ICRsYXN0X2xwX2VxdWFsc3skdG90YWxfZGVwdGh9OwogICAgICAgICAgICAgICAgaWYgKCRpaV9sYXN0X2VxdWFscykgewogICAgICAgICAgICAgICAgICAgICRzZWxmLT5scF9lcXVhbHNfYnJlYWtfY2hlY2soICRpaSwgJGlpX2xhc3RfZXF1YWxzICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgIyBIYW5kbGUgZGVjcmVhc2luZyBkZXB0aAogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgTm90ZSB0aGF0IG9uZSB0b2tlbiBtYXkgaGF2ZSBib3RoIGRlY3JlYXNpbmcgYW5kIHRoZW4gaW5jcmVhc2luZwogICAgICAgICAgICAjIGRlcHRoLiBGb3IgZXhhbXBsZSwgKGxldmVsLCBjaSkgY2FuIGdvIGZyb20gKDEsMSkgdG8gKDIsMCkuICBTbywKICAgICAgICAgICAgIyBpbiB0aGlzIGV4YW1wbGUgd2Ugd291bGQgZmlyc3QgZ28gYmFjayB0byAoMSwwKSB0aGVuIHVwIHRvICgyLDApCiAgICAgICAgICAgICMgaW4gYSBzaW5nbGUgY2FsbC4KICAgICAgICAgICAgaWYgKCAkbGV2ZWwgPCAkY3VycmVudF9sZXZlbCB8fCAkY2lfbGV2ZWwgPCAkY3VycmVudF9jaV9sZXZlbCApIHsKICAgICAgICAgICAgICAgICRzZWxmLT5scF9kZWNyZWFzaW5nX2RlcHRoKCRpaSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgIyBoYW5kbGUgaW5jcmVhc2luZyBkZXB0aAogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgIGlmICggJGxldmVsID4gJGN1cnJlbnRfbGV2ZWwgfHwgJGNpX2xldmVsID4gJGN1cnJlbnRfY2lfbGV2ZWwgKSB7CiAgICAgICAgICAgICAgICAkc2VsZi0+bHBfaW5jcmVhc2luZ19kZXB0aCgkaWkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgSGFuZGxlIGFsbCB0b2tlbnMKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICBpZiAoICR0eXBlIG5lICdiJyApIHsKCiAgICAgICAgICAgICAgICAjIENvdW50IGNvbW1hcyBhbmQgbG9vayBmb3Igbm9uLWxpc3QgY2hhcmFjdGVycy4gIE9uY2Ugd2Ugc2VlIGEKICAgICAgICAgICAgICAgICMgbm9uLWxpc3QgY2hhcmFjdGVyLCB3ZSBnaXZlIHVwIGFuZCBkb24ndCBsb29rIGZvciBhbnkgbW9yZQogICAgICAgICAgICAgICAgIyBjb21tYXMuCiAgICAgICAgICAgICAgICBpZiAoICR0eXBlIGVxICc9PicgKSB7CiAgICAgICAgICAgICAgICAgICAgJGxwX2Fycm93X2NvdW50eyR0b3RhbF9kZXB0aH0rKzsKCiAgICAgICAgICAgICAgICAgICAgIyByZW1lbWJlciAnPT4nIGxpa2UgJz0nIGZvciBlc3RpbWF0aW5nIGJyZWFrcyAoYnV0IHNlZQogICAgICAgICAgICAgICAgICAgICMgYWJvdmUgbm90ZSBmb3IgYjEwMzUpCiAgICAgICAgICAgICAgICAgICAgJGxhc3RfbHBfZXF1YWxzeyR0b3RhbF9kZXB0aH0gPSAkaWk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZWxzaWYgKCAkdHlwZSBlcSAnLCcgKSB7CiAgICAgICAgICAgICAgICAgICAgJGxwX2NvbW1hX2NvdW50eyR0b3RhbF9kZXB0aH0rKzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBlbHNpZiAoICRpc19hc3NpZ25tZW50eyR0eXBlfSApIHsKICAgICAgICAgICAgICAgICAgICAkbGFzdF9scF9lcXVhbHN7JHRvdGFsX2RlcHRofSA9ICRpaTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICMjIG5vdCBhIHNwZWNpYWwgdHlwZQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgdGhpcyB0b2tlbiBtaWdodCBzdGFydCBhIG5ldyBsaW5lIGlmIC4uCiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgJGlpID4gJGlpX2JlZ2luX2xpbmUKCiAgICAgICAgICAgICAgICAgICAgJiYgKAoKICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGlzIGlzIHRoZSBmaXJzdCBub25ibGFuayB0b2tlbiBvZiB0aGUgbGluZQogICAgICAgICAgICAgICAgICAgICAgICAkaWkgPT0gMSAmJiAkdHlwZXNfdG9fZ29bMF0gZXEgJ2InCgogICAgICAgICAgICAgICAgICAgICAgICAjIG9yIHByZXZpb3VzIGNoYXJhY3RlciB3YXMgb25lIG9mIHRoZXNlOgogICAgICAgICAgICAgICAgICAgICAgICAjICAvXihbXDpcP1wsZl0pJC8KICAgICAgICAgICAgICAgICAgICAgICAgfHwgJGhhc2hfdGVzdDJ7JGxhc3Rfbm9uYmxhbmtfdHlwZX0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgb3IgcHJldmlvdXMgY2hhcmFjdGVyIHdhcyBvcGVuaW5nIGFuZCB0aGlzIGlzIG5vdAogICAgICAgICAgICAgICAgICAgICAgICAjIGNsb3NpbmcKICAgICAgICAgICAgICAgICAgICAgICAgfHwgKCAkbGFzdF9ub25ibGFua190eXBlIGVxICd7JyAmJiAkdHlwZSBuZSAnfScgKQogICAgICAgICAgICAgICAgICAgICAgICB8fCAoICRsYXN0X25vbmJsYW5rX3R5cGUgZXEgJygnIGFuZCAkdHlwZSBuZSAnKScgKQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBvciB0aGlzIHRva2VuIGlzIG9uZSBvZiB0aGVzZToKICAgICAgICAgICAgICAgICAgICAgICAgIyAgL14oW1wuXXxcfFx8fFwmXCYpJC8KICAgICAgICAgICAgICAgICAgICAgICAgfHwgJGhhc2hfdGVzdDN7JHR5cGV9CgogICAgICAgICAgICAgICAgICAgICAgICAjIG9yIHRoaXMgaXMgYSBjbG9zaW5nIHN0cnVjdHVyZQogICAgICAgICAgICAgICAgICAgICAgICB8fCAoICAgJGxhc3Rfbm9uYmxhbmtfdHlwZSBlcSAnfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRsYXN0X25vbmJsYW5rX3Rva2VuIGVxICRsYXN0X25vbmJsYW5rX3R5cGUgKQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBvciBwcmV2aW91cyB0b2tlbiB3YXMga2V5d29yZCAncmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICB8fCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGFzdF9ub25ibGFua190eXBlIGVxICdrJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCAgICRsYXN0X25vbmJsYW5rX3Rva2VuIGVxICdyZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHR5cGUgbmUgJ3snICkKICAgICAgICAgICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBvciBzdGFydGluZyBhIG5ldyBsaW5lIGF0IGNlcnRhaW4ga2V5d29yZHMgaXMgZmluZQogICAgICAgICAgICAgICAgICAgICAgICB8fCAoICR0eXBlIGVxICdrJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJGlzX2lmX3VubGVzc19hbmRfb3JfbGFzdF9uZXh0X3JlZG9fcmV0dXJuewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0b2tlbn0gKQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBvciB0aGlzIGlzIGFmdGVyIGFuIGFzc2lnbm1lbnQgYWZ0ZXIgYSBjbG9zaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICMgc3RydWN0dXJlCiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpc19hc3NpZ25tZW50eyRsYXN0X25vbmJsYW5rX3R5cGV9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAvXltcfVwpXF1dJC8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGFzaF90ZXN0MXskbGFzdF9sYXN0X25vbmJsYW5rX3R5cGV9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYW5kIGl0IGlzIHNpZ25pZmljYW50bHkgdG8gdGhlIHJpZ2h0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgJGxwX3Bvc2l0aW9uX3ByZWRpY3RvciA+ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1heGltdW1fbGluZV9sZW5ndGhfYXRfbGV2ZWxbJGxldmVsXSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJPcHRzX21heGltdW1fbGluZV9sZW5ndGggLyAyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgY2hlY2tfZm9yX2xvbmdfZ251X3N0eWxlX2xpbmVzKCRpaSk7CiAgICAgICAgICAgICAgICAgICAgJGlpX2JlZ2luX2xpbmUgPSAkaWk7CgogICAgICAgICAgICAgICAgICAgICMgYmFjayB1cCAxIHRva2VuIGlmIHdlIHdhbnQgdG8gYnJlYWsgYmVmb3JlIHRoYXQgdHlwZQogICAgICAgICAgICAgICAgICAgICMgb3RoZXJ3aXNlLCB3ZSBtYXkgc3RyYW5kIHRva2VucyBsaWtlICc/JyBvciAnOicgb24gYSBsaW5lCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkaWlfYmVnaW5fbGluZSA+IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICR3YmIgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfdHlwZSBlcSAnaycKICAgICAgICAgICAgICAgICAgICAgICAgICA/ICR3YW50X2JyZWFrX2JlZm9yZXskbGFzdF9ub25ibGFua190b2tlbn0KICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR3YW50X2JyZWFrX2JlZm9yZXskbGFzdF9ub25ibGFua190eXBlfTsKICAgICAgICAgICAgICAgICAgICAgICAgJGlpX2JlZ2luX2xpbmUtLSBpZiAoJHdiYik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRLX2xhc3Rfbm9uYmxhbmsgICAgICAgICA9ICRLX3RvX2dvWyRpaV07CiAgICAgICAgICAgICAgICAkbGFzdF9sYXN0X25vbmJsYW5rX3R5cGUgPSAkbGFzdF9ub25ibGFua190eXBlOwogICAgICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfdHlwZSAgICAgID0gJHR5cGU7CiAgICAgICAgICAgICAgICAkbGFzdF9ub25ibGFua190b2tlbiAgICAgPSAkdG9rZW47CgogICAgICAgICAgICB9ICMjIGVuZCBpZiAoICR0eXBlIG5lICdiJyApCgogICAgICAgICAgICAjIHJlbWVtYmVyIHRoZSBwcmVkaWN0ZWQgcG9zaXRpb24gb2YgdGhpcyB0b2tlbiBvbiB0aGUgb3V0cHV0IGxpbmUKICAgICAgICAgICAgaWYgKCAkaWkgPiAkaWlfYmVnaW5fbGluZSApIHsKCiAgICAgICAgICAgICAgICAjIyBOT1RFOiB0aGlzIGlzIGEgY3JpdGljYWwgbG9vcCAtIHRoZSBmb2xsb3dpbmcgY2FsbCBoYXMgYmVlbgogICAgICAgICAgICAgICAgIyMgZXhwYW5kZWQgZm9yIGFib3V0IDJ4IHNwZWVkdXA6CiAgICAgICAgICAgICAgICAjIyAkbHBfcG9zaXRpb25fcHJlZGljdG9yID0KICAgICAgICAgICAgICAgICMjICAgIHRvdGFsX2xpbmVfbGVuZ3RoKCAkaWlfYmVnaW5fbGluZSwgJGlpICk7CgogICAgICAgICAgICAgICAgbXkgJGluZGVudGF0aW9uID0gJGxlYWRpbmdfc3BhY2VzX3RvX2dvWyRpaV9iZWdpbl9saW5lXTsKICAgICAgICAgICAgICAgIGlmICggcmVmKCRpbmRlbnRhdGlvbikgKSB7CiAgICAgICAgICAgICAgICAgICAgJGluZGVudGF0aW9uID0gJGluZGVudGF0aW9uLT5nZXRfc3BhY2VzKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkbHBfcG9zaXRpb25fcHJlZGljdG9yID0KICAgICAgICAgICAgICAgICAgJGluZGVudGF0aW9uICsKICAgICAgICAgICAgICAgICAgJHN1bW1lZF9sZW5ndGhzX3RvX2dvWyAkaWkgKyAxIF0gLQogICAgICAgICAgICAgICAgICAkc3VtbWVkX2xlbmd0aHNfdG9fZ29bJGlpX2JlZ2luX2xpbmVdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJGxwX3Bvc2l0aW9uX3ByZWRpY3RvciA9CiAgICAgICAgICAgICAgICAgICRzcGFjZV9jb3VudCArICR0b2tlbl9sZW5ndGhzX3RvX2dvWyRpaV07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgU3RvcmUgdGhlIGluZGVudGF0aW9uIG9iamVjdCBmb3IgdGhpcyB0b2tlbi4KICAgICAgICAgICAgIyBUaGlzIGFsbG93cyB1cyB0byBtYW5pcHVsYXRlIHRoZSBsZWFkaW5nIHdoaXRlc3BhY2UKICAgICAgICAgICAgIyAoaW4gY2FzZSB3ZSBoYXZlIHRvIHJlZHVjZSBpbmRlbnRhdGlvbiB0byBmaXQgYSBsaW5lKSB3aXRob3V0CiAgICAgICAgICAgICMgaGF2aW5nIHRvIGNoYW5nZSBhbnkgdG9rZW4gdmFsdWVzLgoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIHJlcGxhY2UgbGVhZGluZyB3aGl0ZXNwYWNlIHdpdGggaW5kZW50YXRpb24gb2JqZWN0cyB3aGVyZSB1c2VkCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgaWYgKCAkckxQLT5bJG1heF9scF9zdGFja10tPltfbHBfb2JqZWN0X10gKSB7CiAgICAgICAgICAgICAgICAkbHBfb2JqZWN0X2NvdW50X3RoaXNfYmF0Y2grKzsKICAgICAgICAgICAgICAgIG15ICRscF9vYmplY3QgPSAkckxQLT5bJG1heF9scF9zdGFja10tPltfbHBfb2JqZWN0X107CiAgICAgICAgICAgICAgICAkbGVhZGluZ19zcGFjZXNfdG9fZ29bJGlpXSA9ICRscF9vYmplY3Q7CiAgICAgICAgICAgICAgICBpZiAoICAgJG1heF9scF9zdGFjayA+IDAKICAgICAgICAgICAgICAgICAgICAmJiAkY2lfbGV2ZWwKICAgICAgICAgICAgICAgICAgICAmJiAkckxQLT5bICRtYXhfbHBfc3RhY2sgLSAxIF0tPltfbHBfb2JqZWN0X10gKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRyZWR1Y2VkX3NwYWNlc190b19nb1skaWldID0KICAgICAgICAgICAgICAgICAgICAgICRyTFAtPlsgJG1heF9scF9zdGFjayAtIDEgXS0+W19scF9vYmplY3RfXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRyZWR1Y2VkX3NwYWNlc190b19nb1skaWldID0gJGxwX29iamVjdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gIyMgZW5kIGxvb3Agb3ZlciBhbGwgdG9rZW5zIGluIHRoaXMgYmF0Y2gKCiAgICAgICAgdW5kb19pbmNvbXBsZXRlX2xwX2luZGVudGF0aW9uKCkKICAgICAgICAgIGlmICggISRyT3B0c19leHRlbmRlZF9saW5lX3VwX3BhcmVudGhlc2VzICk7CgogICAgICAgIHJldHVybiAkbHBfb2JqZWN0X2NvdW50X3RoaXNfYmF0Y2g7CiAgICB9ICMjIGVuZCBzdWIgc2V0X2xwX2luZGVudGF0aW9uCgogICAgc3ViIGxwX2VxdWFsc19icmVha19jaGVjayB7CgogICAgICAgIG15ICggJHNlbGYsICRpaSwgJGlpX2xhc3RfZXF1YWxzICkgPSBAXzsKCiAgICAgICAgIyBJZiB3ZSBjb21lIHRvIGFuIG9wZW5pbmcgdG9rZW4gYWZ0ZXIgYW4gJz0nIHRva2VuIG9mIHNvbWUKICAgICAgICAjIHR5cGUsIHNlZSBpZiBpdCB3b3VsZCBiZSBoZWxwZnVsIHRvICdicmVhaycgYWZ0ZXIgdGhlICc9JyB0bwogICAgICAgICMgc2F2ZSBzcGFjZS4KCiAgICAgICAgIyBHaXZlbjoKICAgICAgICAjICAgJGlpID0gaW5kZXggb2YgYW4gb3BlbmluZyB0b2tlbiBpbiB0aGUgb3V0cHV0IGJhdGNoCiAgICAgICAgIyAgICRpaV9iZWdpbl9saW5lID0gaW5kZXggb2YgdG9rZW4gc3RhcnRpbmcgbmV4dCBvdXRwdXQgbGluZQogICAgICAgICMgVXBkYXRlOgogICAgICAgICMgICAkbHBfcG9zaXRpb25fcHJlZGljdG9yIC0gdXBkYXRlZCBwb3NpdGlvbiBwcmVkaWN0b3IKICAgICAgICAjICAgJGlpX2JlZ2luX2xpbmUgPSB1cGRhdGVkIHN0YXJ0aW5nIHRva2VuIGluZGV4CgogICAgICAgICMgU2tpcCBhbiBlbXB0eSBzZXQgb2YgcGFyZW5zLCBzdWNoIGFzIGFmdGVyIGNoYW5uZWwoKToKICAgICAgICAjICAgbXkgJGV4Y2hhbmdlID0gJHNlbGYtPl9jaGFubmVsKCktPmV4Y2hhbmdlKAogICAgICAgICMgVGhpcyBmaXhlcyBpc3N1ZXMgYjEzMTggYjEzMjIgYjEzMjMgYjEzMjgKICAgICAgICBteSAkaXNfZW1wdHlfY29udGFpbmVyOwogICAgICAgIGlmICggJGlpX2xhc3RfZXF1YWxzICYmICRpaSA8ICRtYXhfaW5kZXhfdG9fZ28gKSB7CiAgICAgICAgICAgIG15ICRzZXFubyAgICA9ICR0eXBlX3NlcXVlbmNlX3RvX2dvWyRpaV07CiAgICAgICAgICAgIG15ICRpbmV4dF9uYiA9ICRpaSArIDE7CiAgICAgICAgICAgICRpbmV4dF9uYisrCiAgICAgICAgICAgICAgaWYgKCAkdHlwZXNfdG9fZ29bJGluZXh0X25iXSBlcSAnYicgKTsKICAgICAgICAgICAgbXkgJHNlcW5vX25iID0gJHR5cGVfc2VxdWVuY2VfdG9fZ29bJGluZXh0X25iXTsKICAgICAgICAgICAgJGlzX2VtcHR5X2NvbnRhaW5lciA9ICRzZXFubyAmJiAkc2Vxbm9fbmIgJiYgJHNlcW5vX25iID09ICRzZXFubzsKICAgICAgICB9CgogICAgICAgIGlmICggICAkaWlfbGFzdF9lcXVhbHMKICAgICAgICAgICAgJiYgJGlpX2xhc3RfZXF1YWxzID4gJGlpX2JlZ2luX2xpbmUKICAgICAgICAgICAgJiYgISRpc19lbXB0eV9jb250YWluZXIgKQogICAgICAgIHsKCiAgICAgICAgICAgIG15ICRzZXFubyA9ICR0eXBlX3NlcXVlbmNlX3RvX2dvWyRpaV07CgogICAgICAgICAgICAjIGZpbmQgdGhlIHBvc2l0aW9uIGlmIHdlIGJyZWFrIGF0IHRoZSAnPScKICAgICAgICAgICAgbXkgJGlfdGVzdCA9ICRpaV9sYXN0X2VxdWFsczsKCiAgICAgICAgICAgICMgRml4IGZvciBpc3N1ZSBiMTIyOSwgY2hlY2sgaWYgd2FudCBicmVhayBiZWZvcmUgdGhpcyB0b2tlbgogICAgICAgICAgICAjIEZpeCBmb3IgaXNzdWUgYjEzNTYsIGlmIGlfdGVzdCBpcyBhIGJsYW5rLCB0aGUgbGVhZGluZyBzcGFjZXMgbWF5CiAgICAgICAgICAgICMgICBiZSBpbmNvcnJlY3QgKGlmIGl0IHdhcyBhbiBpbnRlcmxpbmUgYmxhbmspLgogICAgICAgICAgICAjIEZpeCBmb3IgaXNzdWUgYjEzNTcgLi4gYjEzNzAsIGlfdGVzdCBtdXN0IGJlIHByZXYgbm9uYmxhbmsKICAgICAgICAgICAgIyAgICggdGhlIGNpIHZhbHVlIGZvciBibGFua3MgY2FuIHZhcnkgKQogICAgICAgICAgICAjIFNlZSBhbHNvIGNhc2UgYjIyMwogICAgICAgICAgICAjIEZpeCBmb3IgaXNzdWUgYjEzNzEtYjEzNzQgOiBhbGwgb2YgdGhlc2UgYW5kIHRoZSBhYm92ZSBhcmUgZml4ZWQKICAgICAgICAgICAgIyBieSBzaW1wbHkgYmFja2luZyB1cCBvbmUgaW5kZXggYW5kIHNldHRpbmcgdGhlIGxlYWRpbmcgc3BhY2VzIG9mCiAgICAgICAgICAgICMgYSBibGFuayBlcXVhbCB0byB0aGF0IG9mIHRoZSBlcXVhbHMuCiAgICAgICAgICAgIGlmICggJHdhbnRfYnJlYWtfYmVmb3JleyAkdHlwZXNfdG9fZ29bJGlfdGVzdF0gfSApIHsKICAgICAgICAgICAgICAgICRpX3Rlc3QgLT0gMTsKICAgICAgICAgICAgICAgICRsZWFkaW5nX3NwYWNlc190b19nb1skaV90ZXN0XSA9CiAgICAgICAgICAgICAgICAgICRsZWFkaW5nX3NwYWNlc190b19nb1skaWlfbGFzdF9lcXVhbHNdCiAgICAgICAgICAgICAgICAgIGlmICggJHR5cGVzX3RvX2dvWyRpX3Rlc3RdIGVxICdiJyApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJHR5cGVzX3RvX2dvWyAkaV90ZXN0ICsgMSBdIGVxICdiJyApIHsgJGlfdGVzdCsrIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAjIG5vIGNoYW5nZSBuZWVkZWQKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJHRlc3RfcG9zaXRpb24gPSB0b3RhbF9saW5lX2xlbmd0aCggJGlfdGVzdCwgJGlpICk7CiAgICAgICAgICAgIG15ICRtbGwgPSAkbWF4aW11bV9saW5lX2xlbmd0aF9hdF9sZXZlbFsgJGxldmVsc190b19nb1skaV90ZXN0XSBdOwoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIEJyZWFrIGlmIHN0cnVjdHVyZSB3aWxsIHJlYWNoIHRoZSBtYXhpbXVtIGxpbmUgbGVuZ3RoCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgICAgICMgSGlzdG9yaWNhbGx5LCAtbHAganVzdCB1c2VkIG9uZS1oYWxmIGxpbmUgbGVuZ3RoIGhlcmUKICAgICAgICAgICAgbXkgJGxlbl9pbmNyZWFzZSA9ICRyT3B0c19tYXhpbXVtX2xpbmVfbGVuZ3RoIC8gMjsKCiAgICAgICAgICAgICMgRm9yIC14bHAsIHdlIGNhbiBhbHNvIHVzZSB0aGUgcHJlLWNvbXB1dGVkIGxlbmd0aHMKICAgICAgICAgICAgbXkgJG1pbl9sZW4gPSAkc2VsZi0+W19yY29sbGFwc2VkX2xlbmd0aF9ieV9zZXFub19dLT57JHNlcW5vfTsKICAgICAgICAgICAgaWYgKCAkbWluX2xlbiAmJiAkbWluX2xlbiA+ICRsZW5faW5jcmVhc2UgKSB7CiAgICAgICAgICAgICAgICAkbGVuX2luY3JlYXNlID0gJG1pbl9sZW47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgKCiAgICAgICAgICAgICAgICAjIGlmIHdlIG1pZ2h0IGV4Y2VlZCB0aGUgbWF4aW11bSBsaW5lIGxlbmd0aAogICAgICAgICAgICAgICAgJGxwX3Bvc2l0aW9uX3ByZWRpY3RvciArICRsZW5faW5jcmVhc2UgPiAkbWxsCgogICAgICAgICAgICAgICAgIyBpZiBhIC1iYnggZmxhZyBXQU5UUyBhIGJyZWFrIGJlZm9yZSB0aGlzIG9wZW5pbmcgdG9rZW4KICAgICAgICAgICAgICAgIHx8ICggICAkc2Vxbm8KICAgICAgICAgICAgICAgICAgICAmJiAkc2VsZi0+W19yYnJlYWtfYmVmb3JlX2NvbnRhaW5lcl9ieV9zZXFub19dLT57JHNlcW5vfSApCgogICAgICAgICAgICAgICAgIyBvciB3ZSBhcmUgYmV5b25kIHRoZSAxLzQgcG9pbnQgYW5kIHRoZXJlIHdhcyBhbiBvbGQKICAgICAgICAgICAgICAgICMgYnJlYWsgYXQgYW4gYXNzaWdubWVudCAobm90ICc9PicpIFtmaXggZm9yIGIxMDM1XQogICAgICAgICAgICAgICAgfHwgKAogICAgICAgICAgICAgICAgICAgICRscF9wb3NpdGlvbl9wcmVkaWN0b3IgPgogICAgICAgICAgICAgICAgICAgICRtbGwgLSAkck9wdHNfbWF4aW11bV9saW5lX2xlbmd0aCAqIDMgLyA0CiAgICAgICAgICAgICAgICAgICAgJiYgJHR5cGVzX3RvX2dvWyRpaV9sYXN0X2VxdWFsc10gbmUgJz0+JwogICAgICAgICAgICAgICAgICAgICYmICgKICAgICAgICAgICAgICAgICAgICAgICAgJG9sZF9icmVha3BvaW50X3RvX2dvWyRpaV9sYXN0X2VxdWFsc10KICAgICAgICAgICAgICAgICAgICAgICAgfHwgKCAgICRpaV9sYXN0X2VxdWFscyA+IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRvbGRfYnJlYWtwb2ludF90b19nb1sgJGlpX2xhc3RfZXF1YWxzIC0gMSBdICkKICAgICAgICAgICAgICAgICAgICAgICAgfHwgKCAgICRpaV9sYXN0X2VxdWFscyA+IDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICR0eXBlc190b19nb1sgJGlpX2xhc3RfZXF1YWxzIC0gMSBdIGVxICdiJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJG9sZF9icmVha3BvaW50X3RvX2dvWyAkaWlfbGFzdF9lcXVhbHMgLSAyIF0gKQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIHRoZW4gbWFrZSB0aGUgc3dpdGNoIC0tIG5vdGUgdGhhdCB3ZSBkbyBub3Qgc2V0IGEKICAgICAgICAgICAgICAgICMgcmVhbCBicmVha3BvaW50IGhlcmUgYmVjYXVzZSB3ZSBtYXkgbm90IHJlYWxseSBuZWVkCiAgICAgICAgICAgICAgICAjIG9uZTsgc3ViIGJyZWFrX2xpc3RzIHdpbGwgZG8gdGhhdCBpZiBuZWNlc3NhcnkuCgogICAgICAgICAgICAgICAgbXkgJEtjID0gJHNlbGYtPltfS19jbG9zaW5nX2NvbnRhaW5lcl9dLT57JHNlcW5vfTsKICAgICAgICAgICAgICAgIGlmICgKCiAgICAgICAgICAgICAgICAgICAgIyBGb3IgLWxwLCBvbmx5IGlmIHRoZSBjbG9zaW5nIHRva2VuIGlzIGluIHRoaXMKICAgICAgICAgICAgICAgICAgICAjIGJhdGNoIChjMTE3KS4gIE90aGVyd2lzZSBpdCBjYW5ub3QgYmUgZG9uZSBieSBzdWIKICAgICAgICAgICAgICAgICAgICAjIGJyZWFrX2xpc3RzLgogICAgICAgICAgICAgICAgICAgIGRlZmluZWQoJEtjKSAmJiAkS2MgPD0gJEtfdG9fZ29bJG1heF9pbmRleF90b19nb10KCiAgICAgICAgICAgICAgICAgICAgIyBGb3IgLXhscCwgd2Ugb25seSBuZWVkIG9uZSBub25ibGFuayB0b2tlbiBhZnRlcgogICAgICAgICAgICAgICAgICAgICMgdGhlIG9wZW5pbmcgdG9rZW4uCiAgICAgICAgICAgICAgICAgICAgfHwgJHJPcHRzX2V4dGVuZGVkX2xpbmVfdXBfcGFyZW50aGVzZXMKICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRpaV9iZWdpbl9saW5lICAgICAgICAgPSAkaV90ZXN0ICsgMTsKICAgICAgICAgICAgICAgICAgICAkbHBfcG9zaXRpb25fcHJlZGljdG9yID0gJHRlc3RfcG9zaXRpb247CgogICAgICAgICAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICMgRml4IGZvciBhbiBvcGVuaW5nIGNvbnRhaW5lciB0ZXJtaW5hdGluZyBhIGJhdGNoOgogICAgICAgICAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICMgVG8gZ2V0IGFsaWdubWVudCBvZiBhIC1scCBjb250YWluZXIgd2l0aCBpdHMKICAgICAgICAgICAgICAgICAgICAjIGNvbnRlbnRzLCB3ZSBoYXZlIHRvIHB1dCBhIGJyZWFrIGFmdGVyICRpX3Rlc3QuCiAgICAgICAgICAgICAgICAgICAgIyBGb3IgJGlpPCRtYXhfaW5kZXhfdG9fZ28sIHRoaXMgd2lsbCBiZSBkb25lIGJ5CiAgICAgICAgICAgICAgICAgICAgIyBzdWIgYnJlYWtfbGlzdHMgYmFzZWQgb24gdGhlIGluZGVudGF0aW9uIG9iamVjdC4KICAgICAgICAgICAgICAgICAgICAjIEJ1dCBmb3IgJGlpPSRtYXhfaW5kZXhfdG9fZ28sIHRoZSBpbmRlbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICMgb2JqZWN0IGZvciB0aGlzIHNlcW5vIHdpbGwgbm90IGJlIGNyZWF0ZWQgdW50aWwKICAgICAgICAgICAgICAgICAgICAjIHRoZSBuZXh0IGJhdGNoLCBzbyB3ZSBoYXZlIHRvIHNldCBhIGJyZWFrIGF0CiAgICAgICAgICAgICAgICAgICAgIyAkaV90ZXN0IHJpZ2h0IG5vdyBpbiBvcmRlciB0byBnZXQgb25lLgogICAgICAgICAgICAgICAgICAgIGlmICggICAkaWkgPT0gJG1heF9pbmRleF90b19nbwogICAgICAgICAgICAgICAgICAgICAgICAmJiAhJGJsb2NrX3R5cGVfdG9fZ29bJGlpXQogICAgICAgICAgICAgICAgICAgICAgICAmJiAkdHlwZXNfdG9fZ29bJGlpXSBlcSAneycKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHNlcW5vCiAgICAgICAgICAgICAgICAgICAgICAgICYmICEkc2VsZi0+W19yaXNfZXhjbHVkZWRfbHBfY29udGFpbmVyX10tPnskc2Vxbm99ICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5zZXRfZm9yY2VkX2xwX2JyZWFrKCAkaWlfYmVnaW5fbGluZSwgJGlpICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBscF9lcXVhbHNfYnJlYWtfY2hlY2sKCiAgICBzdWIgbHBfZGVjcmVhc2luZ19kZXB0aCB7CiAgICAgICAgbXkgKCAkc2VsZiwgJGlpICkgPSBAXzsKCiAgICAgICAgIyBUaGlzIGlzIGNhbGxlZCBieSBzdWIgc2V0X2xwX2luZGVudGF0aW9uIGZvciBhIHRva2VuIGF0IGluZGV4ICRpaQogICAgICAgICMgd2hpY2ggaGFzIGEgbG93ZXIgbmVzdGluZyBkZXB0aCBjb21wYXJlZCB0byB0aGUgcHJldmlvdXMgdG9rZW4uCiAgICAgICAgIyBXZSBoYXZlIHRvIHVwZGF0ZSB0aGUgc3RhY2sgdmFyaWFibGVzIGZvciB0aGUgbmV3IGluZGVudGF0aW9uLgoKICAgICAgICBteSAkckxMID0gJHNlbGYtPltfckxMX107CgogICAgICAgIG15ICRsZXZlbCAgICA9ICRsZXZlbHNfdG9fZ29bJGlpXTsKICAgICAgICBteSAkY2lfbGV2ZWwgPSAkY2lfbGV2ZWxzX3RvX2dvWyRpaV07CgogICAgICAgICMgbG9vcCB0byBkZWNyZWFzZSAkbWF4X2xwX3N0YWNrIHVudGlsIHdlIGZpbmQgdGhlIGZpcnN0IGVudHJ5IGF0IG9yCiAgICAgICAgIyBjb21wbGV0ZWx5IGJlbG93IHRoaXMgbGV2ZWwKICAgICAgICB3aGlsZSAoMSkgewoKICAgICAgICAgICAgIyBCZSBzdXJlIHdlIGhhdmUgbm90IGhpdCB0aGUgc3RhY2sgYm90dG9tIC0gc2hvdWxkIG5ldmVyCiAgICAgICAgICAgICMgaGFwcGVuIGJlY2F1c2Ugb25seSBuZWdhdGl2ZSBsZXZlbHMgY2FuIGdldCBoZXJlLCBhbmQKICAgICAgICAgICAgIyAkbGV2ZWwgd2FzIGZvcmNlZCB0byBiZSBwb3NpdGl2ZSBhYm92ZS4KICAgICAgICAgICAgaWYgKCAkbWF4X2xwX3N0YWNrIDw9IDAgKSB7CgogICAgICAgICAgICAgICAgIyBub24tZmF0YWwsIGp1c3Qga2VlcCBnb2luZyBleGNlcHQgaW4gREVWRUxfTU9ERQogICAgICAgICAgICAgICAgaWYgKERFVkVMX01PREUpIHsKICAgICAgICAgICAgICAgICAgICBGYXVsdCg8PEVPTSk7CnByb2dyYW0gYnVnIHdpdGggLWxwOiBzdGFja19lcnJvci4gbGV2ZWw9JGxldmVsOyBjaV9sZXZlbD0kY2lfbGV2ZWw7IHJlcnVuIHdpdGggLW5scApFT00KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc2F2ZSBpbmRleCBvZiB0b2tlbiB3aGljaCBjbG9zZXMgdGhpcyBsZXZlbAogICAgICAgICAgICBpZiAoICRyTFAtPlskbWF4X2xwX3N0YWNrXS0+W19scF9vYmplY3RfXSApIHsKICAgICAgICAgICAgICAgIG15ICRscF9vYmplY3QgPSAkckxQLT5bJG1heF9scF9zdGFja10tPltfbHBfb2JqZWN0X107CgogICAgICAgICAgICAgICAgJGxwX29iamVjdC0+c2V0X2Nsb3NlZCgkaWkpOwoKICAgICAgICAgICAgICAgIG15ICRjb21tYV9jb3VudCA9IDA7CiAgICAgICAgICAgICAgICBteSAkYXJyb3dfY291bnQgPSAwOwogICAgICAgICAgICAgICAgbXkgJHR5cGUgICAgICAgID0gJHR5cGVzX3RvX2dvWyRpaV07CiAgICAgICAgICAgICAgICBpZiAoICR0eXBlIGVxICd9JyB8fCAkdHlwZSBlcSAnKScgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJHRvdGFsX2RlcHRoID0gJG5lc3RpbmdfZGVwdGhfdG9fZ29bJGlpXTsKICAgICAgICAgICAgICAgICAgICAkY29tbWFfY291bnQgPSAkbHBfY29tbWFfY291bnR7JHRvdGFsX2RlcHRofTsKICAgICAgICAgICAgICAgICAgICAkYXJyb3dfY291bnQgPSAkbHBfYXJyb3dfY291bnR7JHRvdGFsX2RlcHRofTsKICAgICAgICAgICAgICAgICAgICAkY29tbWFfY291bnQgPSAwIGlmICggIWRlZmluZWQoJGNvbW1hX2NvdW50KSApOwogICAgICAgICAgICAgICAgICAgICRhcnJvd19jb3VudCA9IDAgaWYgKCAhZGVmaW5lZCgkYXJyb3dfY291bnQpICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGxwX29iamVjdC0+c2V0X2NvbW1hX2NvdW50KCRjb21tYV9jb3VudCk7CiAgICAgICAgICAgICAgICAkbHBfb2JqZWN0LT5zZXRfYXJyb3dfY291bnQoJGFycm93X2NvdW50KTsKCiAgICAgICAgICAgICAgICAjIFVuZG8gYW55IGV4dHJhIGluZGVudGF0aW9uIGlmIHdlIHNhdyBubyBjb21tYXMKICAgICAgICAgICAgICAgIG15ICRhdmFpbGFibGVfc3BhY2VzID0gJGxwX29iamVjdC0+Z2V0X2F2YWlsYWJsZV9zcGFjZXMoKTsKICAgICAgICAgICAgICAgIG15ICRLX3N0YXJ0ICAgICAgICAgID0gJGxwX29iamVjdC0+Z2V0X0tfYmVnaW5fbGluZSgpOwoKICAgICAgICAgICAgICAgIGlmICggICAkYXZhaWxhYmxlX3NwYWNlcyA+IDAKICAgICAgICAgICAgICAgICAgICAmJiAkS19zdGFydCA+PSAkS190b19nb1swXQogICAgICAgICAgICAgICAgICAgICYmICggJGNvbW1hX2NvdW50IDw9IDAgfHwgJGFycm93X2NvdW50ID4gMCApICkKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgbXkgJGkgPSAkbHBfb2JqZWN0LT5nZXRfbHBfaXRlbV9pbmRleCgpOwoKICAgICAgICAgICAgICAgICAgICAjIFNhZmV0eSBjaGVjayBmb3IgYSB2YWxpZCBzdGFjayBpbmRleC4gSXQKICAgICAgICAgICAgICAgICAgICAjIHNob3VsZCBiZSBvayBiZWNhdXNlIHdlIGp1c3QgY2hlY2tlZCB0aGF0IHRoZQogICAgICAgICAgICAgICAgICAgICMgaW5kZXggSyBvZiB0aGUgdG9rZW4gYXNzb2NpYXRlZCB3aXRoIHRoaXMKICAgICAgICAgICAgICAgICAgICAjIGluZGVudGF0aW9uIGlzIGluIHRoaXMgYmF0Y2guCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkaSA8IDAgfHwgJGkgPiAkbWF4X2xwX29iamVjdF9saXN0ICkgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkS0sgID0gJEtfdG9fZ29bJGlpXTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGxubyA9ICRyTEwtPlskS0tdLT5bX0xJTkVfSU5ERVhfXTsKICAgICAgICAgICAgICAgICAgICAgICAgREVWRUxfTU9ERSAmJiBGYXVsdCg8PEVPTSk7ClByb2dyYW0gYnVnIHdpdGggLWxwIG5lYXIgbGluZSAkbG5vLiAgU3RhY2sgaW5kZXggaT0kaSBzaG91bGQgYmUgPj0wIGFuZCA8PSBtYXg9JG1heF9scF9vYmplY3RfbGlzdApFT00KICAgICAgICAgICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICggJGFycm93X2NvdW50ID09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRybHBfb2JqZWN0X2xpc3QtPlskaV0KICAgICAgICAgICAgICAgICAgICAgICAgICAtPnBlcm1hbmVudGx5X2RlY3JlYXNlX2F2YWlsYWJsZV9zcGFjZXMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXZhaWxhYmxlX3NwYWNlcyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkcmxwX29iamVjdF9saXN0LT5bJGldCiAgICAgICAgICAgICAgICAgICAgICAgICAgLT50ZW50YXRpdmVseV9kZWNyZWFzZV9hdmFpbGFibGVfc3BhY2VzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGF2YWlsYWJsZV9zcGFjZXMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRqICggJGkgKyAxIC4uICRtYXhfbHBfb2JqZWN0X2xpc3QgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRybHBfb2JqZWN0X2xpc3QtPlskal0KICAgICAgICAgICAgICAgICAgICAgICAgICAtPmRlY3JlYXNlX1NQQUNFUygkYXZhaWxhYmxlX3NwYWNlcyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgZ28gZG93biBvbmUgbGV2ZWwKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAtLSRtYXhfbHBfc3RhY2s7CgogICAgICAgICAgICBteSAkckxQX3RvcCA9ICRyTFAtPlskbWF4X2xwX3N0YWNrXTsKICAgICAgICAgICAgbXkgJGNpX2xldiAgPSAkckxQX3RvcC0+W19scF9jaV9sZXZlbF9dOwogICAgICAgICAgICBteSAkbGV2ICAgICA9ICRyTFBfdG9wLT5bX2xwX2xldmVsX107CiAgICAgICAgICAgIG15ICRzcGFjZXMgID0gJHJMUF90b3AtPltfbHBfc3BhY2VfY291bnRfXTsKICAgICAgICAgICAgaWYgKCAkckxQX3RvcC0+W19scF9vYmplY3RfXSApIHsKICAgICAgICAgICAgICAgIG15ICRscF9vYmogPSAkckxQX3RvcC0+W19scF9vYmplY3RfXTsKICAgICAgICAgICAgICAgICggJHNwYWNlcywgJGxldiwgJGNpX2xldiApID0KICAgICAgICAgICAgICAgICAgQHsgJGxwX29iai0+Z2V0X3NwYWNlc19sZXZlbF9jaSgpIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc3RvcCB3aGVuIHdlIHJlYWNoIGEgbGV2ZWwgYXQgb3IgYmVsb3cgdGhlIGN1cnJlbnQKICAgICAgICAgICAgIyBsZXZlbAogICAgICAgICAgICBpZiAoICRsZXYgPD0gJGxldmVsICYmICRjaV9sZXYgPD0gJGNpX2xldmVsICkgewogICAgICAgICAgICAgICAgJHNwYWNlX2NvdW50ICAgICAgPSAkc3BhY2VzOwogICAgICAgICAgICAgICAgJGN1cnJlbnRfbGV2ZWwgICAgPSAkbGV2OwogICAgICAgICAgICAgICAgJGN1cnJlbnRfY2lfbGV2ZWwgPSAkY2lfbGV2OwogICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgfQogICAgICAgIH0gIyMgZW5kIHdoaWxlICgxKQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBscF9kZWNyZWFzaW5nX2RlcHRoCgogICAgc3ViIGxwX2luY3JlYXNpbmdfZGVwdGggewogICAgICAgIG15ICggJHNlbGYsICRpaSApID0gQF87CgogICAgICAgICMgVGhpcyBpcyBjYWxsZWQgYnkgc3ViIHNldF9scF9pbmRlbnRhdGlvbiBmb3IgYSB0b2tlbiBhdCBpbmRleCAkaWkKICAgICAgICAjIHdoaWNoIGhhcyBhbiBpbmNyZWFzaW5nIG5lc3RpbmcgZGVwdGggY29tcGFyZWQgdG8gdGhlIHByZXZpb3VzIHRva2VuLgogICAgICAgICMgV2UgaGF2ZSB0byB1cGRhdGUgdGhlIHN0YWNrIHZhcmlhYmxlcyBmb3IgdGhlIG5ldyBpbmRlbnRhdGlvbi4KCiAgICAgICAgbXkgJHJMTCA9ICRzZWxmLT5bX3JMTF9dOwoKICAgICAgICBteSAkdHlwZSAgICAgPSAkdHlwZXNfdG9fZ29bJGlpXTsKICAgICAgICBteSAkbGV2ZWwgICAgPSAkbGV2ZWxzX3RvX2dvWyRpaV07CiAgICAgICAgbXkgJGNpX2xldmVsID0gJGNpX2xldmVsc190b19nb1skaWldOwoKICAgICAgICAkc3RhY2tfY2hhbmdlZCA9IDE7CgogICAgICAgICMgQ29tcHV0ZSB0aGUgc3RhbmRhcmQgaW5jcmVtZW50YWwgd2hpdGVzcGFjZS4gIFRoaXMgd2lsbCBiZQogICAgICAgICMgdGhlIG1pbmltdW0gaW5jcmVtZW50YWwgd2hpdGVzcGFjZSB0aGF0IHdpbGwgYmUgdXNlZC4gIFRoaXMKICAgICAgICAjIGNob2ljZSByZXN1bHRzIGluIGEgc21vb3RoIHRyYW5zaXRpb24gYmV0d2VlbiB0aGUgZ251LXN0eWxlCiAgICAgICAgIyBhbmQgdGhlIHN0YW5kYXJkIHN0eWxlLgogICAgICAgIG15ICRzdGFuZGFyZF9pbmNyZW1lbnQgPQogICAgICAgICAgKCAkbGV2ZWwgLSAkY3VycmVudF9sZXZlbCApICogJHJPcHRzX2luZGVudF9jb2x1bW5zICsKICAgICAgICAgICggJGNpX2xldmVsIC0gJGN1cnJlbnRfY2lfbGV2ZWwgKSAqICRyT3B0c19jb250aW51YXRpb25faW5kZW50YXRpb247CgogICAgICAgICMgTm93IHdlIGhhdmUgdG8gZGVmaW5lIGhvdyBtdWNoIGV4dHJhIGluY3JlbWVudGFsIHNwYWNlCiAgICAgICAgIyAoIiRhdmFpbGFibGVfc3BhY2UiKSB3ZSB3YW50LiAgVGhpcyBleHRyYSBzcGFjZSB3aWxsIGJlCiAgICAgICAgIyByZWR1Y2VkIGFzIG5lY2Vzc2FyeSB3aGVuIGxvbmcgbGluZXMgYXJlIGVuY291bnRlcmVkIG9yIHdoZW4KICAgICAgICAjIGl0IGJlY29tZXMgY2xlYXIgdGhhdCB3ZSBkbyBub3QgaGF2ZSBhIGdvb2QgbGlzdC4KICAgICAgICBteSAkYXZhaWxhYmxlX3NwYWNlcyA9IDA7CiAgICAgICAgbXkgJGFsaWduX3NlcW5vICAgICAgPSAwOwogICAgICAgIG15ICRLX2V4dHJhX3NwYWNlOwoKICAgICAgICBteSAkbGFzdF9ub25ibGFua19zZXFubzsKICAgICAgICBteSAkbGFzdF9ub25ibGFua19ibG9ja190eXBlOwogICAgICAgIGlmICggZGVmaW5lZCgkS19sYXN0X25vbmJsYW5rKSApIHsKICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfc2Vxbm8gPSAkckxMLT5bJEtfbGFzdF9ub25ibGFua10tPltfVFlQRV9TRVFVRU5DRV9dOwogICAgICAgICAgICAkbGFzdF9ub25ibGFua19ibG9ja190eXBlID0KICAgICAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX3NlcW5vCiAgICAgICAgICAgICAgPyAkc2VsZi0+W19yYmxvY2tfdHlwZV9vZl9zZXFub19dLT57JGxhc3Rfbm9uYmxhbmtfc2Vxbm99CiAgICAgICAgICAgICAgOiB1bmRlZjsKICAgICAgICB9CgogICAgICAgICRpbl9scF9tb2RlID0gJHJMUC0+WyRtYXhfbHBfc3RhY2tdLT5bX2xwX29iamVjdF9dOwoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIEluaXRpYWxpemUgaW5kZW50YXRpb24gc3BhY2VzIG9uIGVtcHR5IHN0YWNrLi4KICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpZiAoICRtYXhfbHBfc3RhY2sgPT0gMCApIHsKICAgICAgICAgICAgJHNwYWNlX2NvdW50ID0gJGxldmVsICogJHJPcHRzX2luZGVudF9jb2x1bW5zOwogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIEFkZCB0aGUgc3RhbmRhcmQgc3BhY2UgaW5jcmVtZW50IGlmIC4uLgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgZWxzaWYgKAoKICAgICAgICAgICAgIyBpZiB0aGlzIGlzIGEgQkxPQ0ssIGFkZCB0aGUgc3RhbmRhcmQgaW5jcmVtZW50CiAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX2Jsb2NrX3R5cGUKCiAgICAgICAgICAgICMgb3IgaWYgdGhpcyBpcyBub3QgYSBzZXF1ZW5jZWQgaXRlbQogICAgICAgICAgICB8fCAhJGxhc3Rfbm9uYmxhbmtfc2Vxbm8KCiAgICAgICAgICAgICMgb3IgdGhpcyBjb250YWluZXIgaXMgZXhjbHVkZWQgYnkgdXNlciBydWxlcwogICAgICAgICAgICAjIG9yIGNvbnRhaW5zIGhlcmUtZG9jcyBvciBtdWx0aWxpbmUgcXcgdGV4dAogICAgICAgICAgICB8fCBkZWZpbmVkKCRsYXN0X25vbmJsYW5rX3NlcW5vKQogICAgICAgICAgICAmJiAkc2VsZi0+W19yaXNfZXhjbHVkZWRfbHBfY29udGFpbmVyX10tPnskbGFzdF9ub25ibGFua19zZXFub30KCiAgICAgICAgICAgICMgb3IgaWYgbGFzdCBub25ibGFuayB0b2tlbiB3YXMgbm90IHN0cnVjdHVyYWwgaW5kZW50YXRpb24KICAgICAgICAgICAgfHwgJGxhc3Rfbm9uYmxhbmtfdHlwZSBuZSAneycKCiAgICAgICAgICAgICMgYW5kIGRvIG5vdCBzdGFydCAtbHAgdW5kZXIgc3RyZXNzIC4uIGZpeGVzIGIxMjQ0LCBiMTI1NQogICAgICAgICAgICB8fCAhJGluX2xwX21vZGUgJiYgJGxldmVsID49ICRoaWdoX3N0cmVzc19sZXZlbAoKICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICAjIElmIHdlIGhhdmUgZW50ZXJlZCBscCBtb2RlLCB1c2UgdGhlIHRvcCBscCBvYmplY3QgdG8gZ2V0CiAgICAgICAgICAgICMgdGhlIGN1cnJlbnQgaW5kZW50YXRpb24gc3BhY2VzIGJlY2F1c2UgaXQgbWF5IGhhdmUKICAgICAgICAgICAgIyBjaGFuZ2VkLiAgRml4ZXMgYjEyODUsIGIxMjg2LgogICAgICAgICAgICBpZiAoJGluX2xwX21vZGUpIHsKICAgICAgICAgICAgICAgICRzcGFjZV9jb3VudCA9ICRpbl9scF9tb2RlLT5nZXRfc3BhY2VzKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHNwYWNlX2NvdW50ICs9ICRzdGFuZGFyZF9pbmNyZW1lbnQ7CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyAtbHAgbW9kZTogdHJ5IHRvIHVzZSBzcGFjZSB0byB0aGUgZmlyc3Qgbm9uLWJsYW5rIGxldmVsIGNoYW5nZQogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgc2VlIGhvdyBtdWNoIHNwYWNlIHdlIGhhdmUgYXZhaWxhYmxlCiAgICAgICAgICAgIG15ICR0ZXN0X3NwYWNlX2NvdW50ID0gJGxwX3Bvc2l0aW9uX3ByZWRpY3RvcjsKICAgICAgICAgICAgbXkgJGV4Y2VzcyAgICAgICAgICAgPSAwOwogICAgICAgICAgICBteSAkbWluX2xlbiA9CiAgICAgICAgICAgICAgJHNlbGYtPltfcmNvbGxhcHNlZF9sZW5ndGhfYnlfc2Vxbm9fXS0+eyRsYXN0X25vbmJsYW5rX3NlcW5vfTsKICAgICAgICAgICAgbXkgJG5leHRfb3BlbmluZ190b29fZmFyOwoKICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRtaW5fbGVuKSApIHsKICAgICAgICAgICAgICAgICRleGNlc3MgPQogICAgICAgICAgICAgICAgICAkdGVzdF9zcGFjZV9jb3VudCArCiAgICAgICAgICAgICAgICAgICRtaW5fbGVuIC0KICAgICAgICAgICAgICAgICAgJG1heGltdW1fbGluZV9sZW5ndGhfYXRfbGV2ZWxbJGxldmVsXTsKICAgICAgICAgICAgICAgIGlmICggJGV4Y2VzcyA+IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgJHRlc3Rfc3BhY2VfY291bnQgLT0gJGV4Y2VzczsKCiAgICAgICAgICAgICAgICAgICAgIyB3aWxsIHRoZSBuZXh0IG9wZW5pbmcgdG9rZW4gYmUgYSBsb25nIHdheSBvdXQ/CiAgICAgICAgICAgICAgICAgICAgJG5leHRfb3BlbmluZ190b29fZmFyID0KICAgICAgICAgICAgICAgICAgICAgICRscF9wb3NpdGlvbl9wcmVkaWN0b3IgKyAkZXhjZXNzID4KICAgICAgICAgICAgICAgICAgICAgICRtYXhpbXVtX2xpbmVfbGVuZ3RoX2F0X2xldmVsWyRsZXZlbF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRyTFBfdG9wICAgICAgICAgICAgID0gJHJMUC0+WyRtYXhfbHBfc3RhY2tdOwogICAgICAgICAgICBteSAkbWluX2dudV9pbmRlbnRhdGlvbiA9ICRyTFBfdG9wLT5bX2xwX3NwYWNlX2NvdW50X107CiAgICAgICAgICAgIGlmICggJHJMUF90b3AtPltfbHBfb2JqZWN0X10gKSB7CiAgICAgICAgICAgICAgICAkbWluX2dudV9pbmRlbnRhdGlvbiA9ICRyTFBfdG9wLT5bX2xwX29iamVjdF9dLT5nZXRfc3BhY2VzKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGF2YWlsYWJsZV9zcGFjZXMgPSAkdGVzdF9zcGFjZV9jb3VudCAtICRtaW5fZ251X2luZGVudGF0aW9uOwoKICAgICAgICAgICAgIyBGaXggZm9yIGNvbWJvIC1uYXdzIGFuZCAteGxwIChiMTUwMTsgYWxzbyBiMTQ2NikKICAgICAgICAgICAgbXkgJHRvbCA9ICEkck9wdHNfYWRkX3doaXRlc3BhY2UKICAgICAgICAgICAgICAmJiAkck9wdHNfZXh0ZW5kZWRfbGluZV91cF9wYXJlbnRoZXNlcyA/IDEgOiAwOwoKICAgICAgICAgICAgIyBEbyBub3Qgc3RhcnR1cCAtbHAgaW5kZW50YXRpb24gbW9kZSBpZiBubyBzcGFjZSAuLi4KICAgICAgICAgICAgIyAuLi4gb3IgaWYgaXQgcHV0cyB0aGUgb3BlbmluZyBmYXIgdG8gdGhlIHJpZ2h0CiAgICAgICAgICAgIGlmICggISRpbl9scF9tb2RlCiAgICAgICAgICAgICAgICAmJiAoICRhdmFpbGFibGVfc3BhY2VzIDw9ICR0b2wgfHwgJG5leHRfb3BlbmluZ190b29fZmFyICkgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkc3BhY2VfY291bnQgKz0gJHN0YW5kYXJkX2luY3JlbWVudDsKICAgICAgICAgICAgICAgICRhdmFpbGFibGVfc3BhY2VzID0gMDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBVc2UgLWxwIG1vZGUKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkc3BhY2VfY291bnQgPSAkdGVzdF9zcGFjZV9jb3VudDsKCiAgICAgICAgICAgICAgICAkaW5fbHBfbW9kZSA9IDE7CiAgICAgICAgICAgICAgICBpZiAoICRhdmFpbGFibGVfc3BhY2VzID49ICRzdGFuZGFyZF9pbmNyZW1lbnQgKSB7CiAgICAgICAgICAgICAgICAgICAgJG1pbl9nbnVfaW5kZW50YXRpb24gKz0gJHN0YW5kYXJkX2luY3JlbWVudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJGF2YWlsYWJsZV9zcGFjZXMgPiAxICkgewogICAgICAgICAgICAgICAgICAgICRtaW5fZ251X2luZGVudGF0aW9uICs9ICRhdmFpbGFibGVfc3BhY2VzICsgMTsKCiAgICAgICAgICAgICAgICAgICAgIyBUaGUgIisxIiBzcGFjZSBjYW4gY2F1c2UgbWlzLWFsaWdubWVudCBpZiB0aGVyZSBpcyBubwogICAgICAgICAgICAgICAgICAgICMgYmxhbmsgc3BhY2UgYmV0d2VlbiB0aGUgb3BlbmluZyBwYXJlbiBhbmQgdGhlIG5leHQKICAgICAgICAgICAgICAgICAgICAjIG5vbmJsYW5rIHRva2VuIChpLmUuLCAtcHQ9MikgYW5kIHRoZSBjb250YWluZXIgZG9lcyBub3QKICAgICAgICAgICAgICAgICAgICAjIGdldCBicm9rZW4gb3Blbi4gIFNvIHdlIHdpbGwgbWFyayB0aGlzIHRva2VuIGZvciBsYXRlcgogICAgICAgICAgICAgICAgICAgICMgc3BhY2UgcmVtb3ZhbCBieSBzdWIgJ3hscF90d2VhaycgaWYgdGhpcyBjb250YWluZXIKICAgICAgICAgICAgICAgICAgICAjIHJlbWFpbnMgaW50YWN0IChpc3N1ZSBnaXQgIzEwNikuCiAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAkdHlwZSBuZSAnYicKCiAgICAgICAgICAgICAgICAgICAgICAgICMgU2tpcCBpZiB0aGUgbWF4aW11bSBsaW5lIGxlbmd0aCBpcyBleGNlZWRlZCBoZXJlCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRleGNlc3MgPD0gMAoKICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIG9ubHkgZm9yIGxldmVsIGNoYW5nZXMsIG5vdCBjaSBsZXZlbCBjaGFuZ2VzLgogICAgICAgICAgICAgICAgICAgICAgICAjIEJ1dCBub3RlOiB0aGlzIHRlc3QgaXMgaGVyZSBvdXQgb2YgY2F1dGlvbiBidXQgSSBoYXZlCiAgICAgICAgICAgICAgICAgICAgICAgICMgbm90IGZvdW5kIGEgY2FzZSB3aGVyZSBpdCBpcyBhY3R1YWxseSBuZWNlc3NhcnkuCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRpc19vcGVuaW5nX3Rva2VueyRsYXN0X25vbmJsYW5rX3Rva2VufQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBCZSBzdXJlIHdlIGFyZSBhdCBjb25zZWN1dGl2ZSBub25ibGFua3MuICBUaGlzIHRlc3QKICAgICAgICAgICAgICAgICAgICAgICAgIyBzaG91bGQgYmUgdHJ1ZSwgYnV0IGl0IGd1YXJkcyBhZ2FpbnN0IGZ1dHVyZSBjb2RpbmcKICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGFuZ2VzIHRvIGxldmVsIHZhbHVlcyBhc3NpZ25lZCB0byBibGFuayBzcGFjZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRpaSA+IDAKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHR5cGVzX3RvX2dvWyAkaWkgLSAxIF0gbmUgJ2InCgogICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEtfZXh0cmFfc3BhY2UgPSAkS190b19nb1skaWldOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJGlzX29wZW5pbmdfdG9rZW57JGxhc3Rfbm9uYmxhbmtfdG9rZW59ICkgewogICAgICAgICAgICAgICAgICAgIGlmICggKCAkdGlnaHRuZXNzeyRsYXN0X25vbmJsYW5rX3Rva2VufSA8IDIgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG1pbl9nbnVfaW5kZW50YXRpb24gKz0gMjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRtaW5fZ251X2luZGVudGF0aW9uICs9IDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJG1pbl9nbnVfaW5kZW50YXRpb24gKz0gJHN0YW5kYXJkX2luY3JlbWVudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRhdmFpbGFibGVfc3BhY2VzID0gJHNwYWNlX2NvdW50IC0gJG1pbl9nbnVfaW5kZW50YXRpb247CgogICAgICAgICAgICAgICAgaWYgKCAkYXZhaWxhYmxlX3NwYWNlcyA8IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgJHNwYWNlX2NvdW50ICAgICAgPSAkbWluX2dudV9pbmRlbnRhdGlvbjsKICAgICAgICAgICAgICAgICAgICAkYXZhaWxhYmxlX3NwYWNlcyA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkYWxpZ25fc2Vxbm8gPSAkbGFzdF9ub25ibGFua19zZXFubzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIHVwZGF0ZSB0aGUgc3RhdGUsIGJ1dCBub3Qgb24gYSBibGFuayB0b2tlbgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaWYgKCAkdHlwZSBuZSAnYicgKSB7CgogICAgICAgICAgICBpZiAoICRyTFAtPlskbWF4X2xwX3N0YWNrXS0+W19scF9vYmplY3RfXSApIHsKICAgICAgICAgICAgICAgICRyTFAtPlskbWF4X2xwX3N0YWNrXS0+W19scF9vYmplY3RfXS0+c2V0X2hhdmVfY2hpbGQoMSk7CiAgICAgICAgICAgICAgICAkaW5fbHBfbW9kZSA9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgQ3JlYXRlIGluZGVudGF0aW9uIG9iamVjdCBpZiBpbiBscC1tb2RlCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICsrJG1heF9scF9zdGFjazsKICAgICAgICAgICAgbXkgJGxwX29iamVjdDsKICAgICAgICAgICAgaWYgKCRpbl9scF9tb2RlKSB7CgogICAgICAgICAgICAgICAgIyBBIG5lZ2F0aXZlIGxldmVsIGltcGxpZXMgbm90IHRvIHN0b3JlIHRoZSBpdGVtIGluIHRoZQogICAgICAgICAgICAgICAgIyBpdGVtX2xpc3QKICAgICAgICAgICAgICAgIG15ICRscF9pdGVtX2luZGV4ID0gMDsKICAgICAgICAgICAgICAgIGlmICggJGxldmVsID49IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgJGxwX2l0ZW1faW5kZXggPSArKyRtYXhfbHBfb2JqZWN0X2xpc3Q7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbXkgJEtfYmVnaW5fbGluZSA9IDA7CiAgICAgICAgICAgICAgICBpZiAoICAgJGlpX2JlZ2luX2xpbmUgPj0gMAogICAgICAgICAgICAgICAgICAgICYmICRpaV9iZWdpbl9saW5lIDw9ICRtYXhfaW5kZXhfdG9fZ28gKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRLX2JlZ2luX2xpbmUgPSAkS190b19nb1skaWlfYmVnaW5fbGluZV07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBNaW5vciBGaXg6IHdoZW4gY3JlYXRpbmcgaW5kZW50YXRpb24gYXQgYSBzaWRlCiAgICAgICAgICAgICAgICAjIGNvbW1lbnQgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBzcGFjZSB0byB0aGUgYWN0dWFsCiAgICAgICAgICAgICAgICAjIG5leHQgY29kZSB0b2tlbiB3aWxsIGJlLiAgV2Ugd2lsbCBhbGxvdyBhIHNwYWNlIGZvcgogICAgICAgICAgICAgICAgIyBzdWIgY29ycmVjdF9scCB0byBtb3ZlIGl0IGluIGlmIG5lY2Vzc2FyeS4KICAgICAgICAgICAgICAgICMgTk9URSBmb3IgYzMxNCwgYzQwMDogdGhpcyBmaXggaXMgbm90IHJlYWxseSBuZWNlc3NhcnksCiAgICAgICAgICAgICAgICAjIGFuZCBpdCBjYXVzZWQgYSBERVZFTF9NT0RFIGZhdWx0IHdoZW4gLWk9MC4KICAgICAgICAgICAgICAgICMgSXQgY291bGQgYmUgY29tcGxldGVseSByZW1vdmVkLCBidXQgdGhpcyB3b3VsZCBjaGFuZ2UKICAgICAgICAgICAgICAgICMgZXhpc3RpbmcgZm9ybWF0dGluZyBpbiBhIGZldyBjYXNlcy4gU28gZm9yIG5vdywgdGhlIGZpeAogICAgICAgICAgICAgICAgIyBpcyB0byBvbmx5IHNraXAgdGhpcyBpZiAtaT0wLgogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICR0eXBlIGVxICcjJwogICAgICAgICAgICAgICAgICAgICYmICRtYXhfaW5kZXhfdG9fZ28gPiAwCiAgICAgICAgICAgICAgICAgICAgJiYgJGFsaWduX3NlcW5vCgogICAgICAgICAgICAgICAgICAgICMgZml4IGZvciBjMzE0LCBjNDAwIChzZWUgYWJvdmUgbm90ZSkKICAgICAgICAgICAgICAgICAgICAmJiAkck9wdHNfaW5kZW50X2NvbHVtbnMgPiAwCiAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkYXZhaWxhYmxlX3NwYWNlcyArPSAxOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG15ICRzdGFuZGFyZF9zcGFjZXMgPSAkbGVhZGluZ19zcGFjZXNfdG9fZ29bJGlpXTsKICAgICAgICAgICAgICAgICRscF9vYmplY3QgPSBQZXJsOjpUaWR5OjpJbmRlbnRhdGlvbkl0ZW0tPm5ldygKICAgICAgICAgICAgICAgICAgICBzcGFjZXMgICAgICAgICAgID0+ICRzcGFjZV9jb3VudCwKICAgICAgICAgICAgICAgICAgICBsZXZlbCAgICAgICAgICAgID0+ICRsZXZlbCwKICAgICAgICAgICAgICAgICAgICBjaV9sZXZlbCAgICAgICAgID0+ICRjaV9sZXZlbCwKICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGVfc3BhY2VzID0+ICRhdmFpbGFibGVfc3BhY2VzLAogICAgICAgICAgICAgICAgICAgIGxwX2l0ZW1faW5kZXggICAgPT4gJGxwX2l0ZW1faW5kZXgsCiAgICAgICAgICAgICAgICAgICAgYWxpZ25fc2Vxbm8gICAgICA9PiAkYWxpZ25fc2Vxbm8sCiAgICAgICAgICAgICAgICAgICAgS19iZWdpbl9saW5lICAgICA9PiAkS19iZWdpbl9saW5lLAogICAgICAgICAgICAgICAgICAgIHN0YW5kYXJkX3NwYWNlcyAgPT4gJHN0YW5kYXJkX3NwYWNlcywKICAgICAgICAgICAgICAgICAgICBLX2V4dHJhX3NwYWNlICAgID0+ICRLX2V4dHJhX3NwYWNlLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBERUJVR19MUCAmJiBkbyB7CiAgICAgICAgICAgICAgICAgICAgbXkgJHRva19iZWcgPSAkckxMLT5bJEtfYmVnaW5fbGluZV0tPltfVE9LRU5fXTsKICAgICAgICAgICAgICAgICAgICBteSAkdG9rZW4gICA9ICR0b2tlbnNfdG9fZ29bJGlpXTsKICAgICAgICAgICAgICAgICAgICBwcmludCB7KlNURE9VVH0gPDxFT007CkRFQlVHX0xQOiBDcmVhdGVkIG9iamVjdCBhdCB0b2s9JHRva2VuIHR5cGU9JHR5cGUgZm9yIHNlcW5vICRhbGlnbl9zZXFubyBsZXZlbD0kbGV2ZWwgY2k9JGNpX2xldmVsIHNwYWNlcz0kc3BhY2VfY291bnQgYXZhaWw9JGF2YWlsYWJsZV9zcGFjZXMga2JlZz0kS19iZWdpbl9saW5lIHRva2JlZz0kdG9rX2JlZyBscD0kbHBfcG9zaXRpb25fcHJlZGljdG9yCkVPTQogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICBpZiAoICRsZXZlbCA+PSAwICkgewogICAgICAgICAgICAgICAgICAgICRybHBfb2JqZWN0X2xpc3QtPlskbWF4X2xwX29iamVjdF9saXN0XSA9ICRscF9vYmplY3Q7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAgICRpc19vcGVuaW5nX3Rva2VueyRsYXN0X25vbmJsYW5rX3Rva2VufQogICAgICAgICAgICAgICAgICAgICYmICRsYXN0X25vbmJsYW5rX3NlcW5vICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+W19ybHBfb2JqZWN0X2J5X3NlcW5vX10tPnskbGFzdF9ub25ibGFua19zZXFub30gPQogICAgICAgICAgICAgICAgICAgICAgJGxwX29iamVjdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIFN0b3JlIHRoaXMgaW5kZW50YXRpb24gb24gdGhlIHN0YWNrCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgJHJMUC0+WyRtYXhfbHBfc3RhY2tdLT5bX2xwX2NpX2xldmVsX10gPSAkY2lfbGV2ZWw7CiAgICAgICAgICAgICRyTFAtPlskbWF4X2xwX3N0YWNrXS0+W19scF9sZXZlbF9dICAgID0gJGxldmVsOwogICAgICAgICAgICAkckxQLT5bJG1heF9scF9zdGFja10tPltfbHBfb2JqZWN0X10gICA9ICRscF9vYmplY3Q7CiAgICAgICAgICAgICRyTFAtPlskbWF4X2xwX3N0YWNrXS0+W19scF9jb250YWluZXJfc2Vxbm9fXSA9CiAgICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfc2Vxbm87CiAgICAgICAgICAgICRyTFAtPlskbWF4X2xwX3N0YWNrXS0+W19scF9zcGFjZV9jb3VudF9dID0gJHNwYWNlX2NvdW50OwoKICAgICAgICAgICAgIyBJZiB0aGUgb3BlbmluZyBwYXJlbiBpcyBiZXlvbmQgdGhlIGhhbGYtbGluZSBsZW5ndGgsIHRoZW4KICAgICAgICAgICAgIyB3ZSB3aWxsIHVzZSB0aGUgbWluaW11bSAoc3RhbmRhcmQpIGluZGVudGF0aW9uLiAgVGhpcyB3aWxsCiAgICAgICAgICAgICMgaGVscCBhdm9pZCBwcm9ibGVtcyBhc3NvY2lhdGVkIHdpdGggcnVubmluZyBvdXQgb2Ygc3BhY2UKICAgICAgICAgICAgIyBuZWFyIHRoZSBlbmQgb2YgYSBsaW5lLiAgQXMgYSByZXN1bHQsIGluIGRlZXBseSBuZXN0ZWQKICAgICAgICAgICAgIyBsaXN0cywgdGhlcmUgd2lsbCBiZSBzb21lIGluZGVudGF0aW9ucyB3aGljaCBhcmUgbGltaXRlZAogICAgICAgICAgICAjIHRvIHRoaXMgbWluaW11bSBzdGFuZGFyZCBpbmRlbnRhdGlvbi4gQnV0IHRoZSBtb3N0IGRlZXBseQogICAgICAgICAgICAjIG5lc3RlZCBjb250YWluZXIgd2lsbCBzdGlsbCBwcm9iYWJseSBiZSBhYmxlIHRvIHNoaWZ0IGl0cwogICAgICAgICAgICAjIHBhcmFtZXRlcnMgdG8gdGhlIHJpZ2h0IGZvciBwcm9wZXIgYWxpZ25tZW50LCBzbyBpbiBtb3N0CiAgICAgICAgICAgICMgY2FzZXMgdGhpcyB3aWxsIG5vdCBiZSBub3RpY2VhYmxlLgogICAgICAgICAgICBpZiAoICRhdmFpbGFibGVfc3BhY2VzID4gMCAmJiAkbHBfb2JqZWN0ICkgewogICAgICAgICAgICAgICAgbXkgJGhhbGZ3YXkgPQogICAgICAgICAgICAgICAgICAkbWF4aW11bV9saW5lX2xlbmd0aF9hdF9sZXZlbFskbGV2ZWxdIC0KICAgICAgICAgICAgICAgICAgJHJPcHRzX21heGltdW1fbGluZV9sZW5ndGggLyAyOwogICAgICAgICAgICAgICAgJGxwX29iamVjdC0+dGVudGF0aXZlbHlfZGVjcmVhc2VfYXZhaWxhYmxlX3NwYWNlcygKICAgICAgICAgICAgICAgICAgICAkYXZhaWxhYmxlX3NwYWNlcykKICAgICAgICAgICAgICAgICAgaWYgKCAkc3BhY2VfY291bnQgPiAkaGFsZndheSApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBscF9pbmNyZWFzaW5nX2RlcHRoCgogICAgc3ViIGNoZWNrX2Zvcl9sb25nX2dudV9zdHlsZV9saW5lcyB7CgogICAgICAgICMgTG9vayBhdCB0aGUgY3VycmVudCBlc3RpbWF0ZWQgbWF4aW11bSBsaW5lIGxlbmd0aCwgYW5kCiAgICAgICAgIyByZW1vdmUgc29tZSB3aGl0ZXNwYWNlIGlmIGl0IGV4Y2VlZHMgdGhlIGRlc2lyZWQgbWF4aW11bQogICAgICAgIG15ICgkaWlfdG9fZ28pID0gQF87CgogICAgICAgICMgR2l2ZW46CiAgICAgICAgIyAgICRpaV90b19nbyA9IGluZGV4IG9mIGN1cnJlbnQgdG9rZW4gdW5kZXIgY29uc2lkZXJhdGlvbgoKICAgICAgICAjIG5vdGhpbmcgY2FuIGJlIGRvbmUgaWYgbm8gc3RhY2sgaXRlbXMgZGVmaW5lZCBmb3IgdGhpcyBsaW5lCiAgICAgICAgcmV0dXJuIGlmICggJG1heF9scF9vYmplY3RfbGlzdCA8IDAgKTsKCiAgICAgICAgIyBTZWUgaWYgd2UgaGF2ZSBleGNlZWRlZCB0aGUgbWF4aW11bSBkZXNpcmVkIGxpbmUgbGVuZ3RoIC4uCiAgICAgICAgIyBrZWVwIDIgZXh0cmEgZnJlZSBiZWNhdXNlIHRoZXkgYXJlIG5lZWRlZCBpbiBzb21lIGNhc2VzCiAgICAgICAgIyAocmVzdWx0IG9mIHRyaWFsLWFuZC1lcnJvciB0ZXN0aW5nKQogICAgICAgIG15ICR0b2wgPSAyOwoKICAgICAgICAjIEJ1dCByZWR1Y2UgdG9sIHRvIDAgYXQgYSB0ZXJtaW5hbCBjb21tYTsgZml4ZXMgYjE0MzIKICAgICAgICBpZiAoICAgJHR5cGVzX3RvX2dvWyRpaV90b19nb10gZXEgJywnCiAgICAgICAgICAgICYmICRpaV90b19nbyA8ICRtYXhfaW5kZXhfdG9fZ28gKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJGluID0gJGlpX3RvX2dvICsgMTsKICAgICAgICAgICAgaWYgKCAkdHlwZXNfdG9fZ29bJGluXSBlcSAnYicgJiYgJGluIDwgJG1heF9pbmRleF90b19nbyApIHsgJGluKysgfQogICAgICAgICAgICBpZiAoICRpc19jbG9zaW5nX3Rva2VueyAkdG9rZW5zX3RvX2dvWyRpbl0gfSApIHsKICAgICAgICAgICAgICAgICR0b2wgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAkc3BhY2VzX25lZWRlZCA9CiAgICAgICAgICAkbHBfcG9zaXRpb25fcHJlZGljdG9yIC0KICAgICAgICAgICRtYXhpbXVtX2xpbmVfbGVuZ3RoX2F0X2xldmVsWyAkbGV2ZWxzX3RvX2dvWyRpaV90b19nb10gXSArCiAgICAgICAgICAkdG9sOwoKICAgICAgICByZXR1cm4gaWYgKCAkc3BhY2VzX25lZWRlZCA8PSAwICk7CgogICAgICAgICMgV2UgYXJlIG92ZXIgdGhlIGxpbWl0LCBzbyB0cnkgdG8gcmVtb3ZlIGEgcmVxdWVzdGVkIG51bWJlciBvZgogICAgICAgICMgc3BhY2VzIGZyb20gbGVhZGluZyB3aGl0ZXNwYWNlLiAgV2UgYXJlIG9ubHkgYWxsb3dlZCB0byByZW1vdmUKICAgICAgICAjIGZyb20gd2hpdGVzcGFjZSBpdGVtcyBjcmVhdGVkIG9uIHRoaXMgYmF0Y2gsIHNpbmNlIG90aGVycyBoYXZlCiAgICAgICAgIyBhbHJlYWR5IGJlZW4gdXNlZCBhbmQgY2Fubm90IGJlIHVuZG9uZS4KICAgICAgICBteSBAY2FuZGlkYXRlcyA9ICgpOwoKICAgICAgICAjIGxvb3Agb3ZlciBhbGwgd2hpdGVzcGFjZSBpdGVtcyBjcmVhdGVkIGZvciB0aGUgY3VycmVudCBiYXRjaAogICAgICAgIGZvcmVhY2ggbXkgJGkgKCAwIC4uICRtYXhfbHBfb2JqZWN0X2xpc3QgKSB7CiAgICAgICAgICAgIG15ICRpdGVtID0gJHJscF9vYmplY3RfbGlzdC0+WyRpXTsKCiAgICAgICAgICAgICMgaXRlbSBtdXN0IHN0aWxsIGJlIG9wZW4gdG8gYmUgYSBjYW5kaWRhdGUgKG90aGVyd2lzZSBpdAogICAgICAgICAgICAjIGNhbm5vdCBpbmZsdWVuY2UgdGhlIGN1cnJlbnQgdG9rZW4pCiAgICAgICAgICAgIG5leHQgaWYgKCAkaXRlbS0+Z2V0X2Nsb3NlZCgpID49IDAgKTsKCiAgICAgICAgICAgIG15ICRhdmFpbGFibGVfc3BhY2VzID0gJGl0ZW0tPmdldF9hdmFpbGFibGVfc3BhY2VzKCk7CgogICAgICAgICAgICBpZiAoICRhdmFpbGFibGVfc3BhY2VzID4gMCApIHsKICAgICAgICAgICAgICAgIHB1c2goIEBjYW5kaWRhdGVzLCBbICRpLCAkYXZhaWxhYmxlX3NwYWNlcyBdICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiB1bmxlc3MgKEBjYW5kaWRhdGVzKTsKCiAgICAgICAgIyBzb3J0IGJ5IGF2YWlsYWJsZSB3aGl0ZXNwYWNlIHNvIHRoYXQgd2UgY2FuIHJlbW92ZSB3aGl0ZXNwYWNlCiAgICAgICAgIyBmcm9tIHRoZSBtYXhpbXVtIGF2YWlsYWJsZSBmaXJzdC4KICAgICAgICBAY2FuZGlkYXRlcyA9CiAgICAgICAgICBzb3J0IHsgJGItPlsxXSA8PT4gJGEtPlsxXSB8fCAkYS0+WzBdIDw9PiAkYi0+WzBdIH0gQGNhbmRpZGF0ZXM7CgogICAgICAgICMga2VlcCByZW1vdmluZyB3aGl0ZXNwYWNlIHVudGlsIHdlIGFyZSBkb25lIG9yIGhhdmUgbm8gbW9yZQogICAgICAgIGZvcmVhY2ggbXkgJGNhbmRpZGF0ZSAoQGNhbmRpZGF0ZXMpIHsKICAgICAgICAgICAgbXkgKCAkaSwgJGF2YWlsYWJsZV9zcGFjZXMgKSA9IEB7JGNhbmRpZGF0ZX07CiAgICAgICAgICAgIG15ICRkZWxldGVkX3NwYWNlcyA9CiAgICAgICAgICAgICAgKCAkYXZhaWxhYmxlX3NwYWNlcyA+ICRzcGFjZXNfbmVlZGVkICkKICAgICAgICAgICAgICA/ICRzcGFjZXNfbmVlZGVkCiAgICAgICAgICAgICAgOiAkYXZhaWxhYmxlX3NwYWNlczsKCiAgICAgICAgICAgICMgcmVtb3ZlIHRoZSBpbmNyZW1lbnRhbCBzcGFjZSBmcm9tIHRoaXMgaXRlbQogICAgICAgICAgICAkcmxwX29iamVjdF9saXN0LT5bJGldLT5kZWNyZWFzZV9hdmFpbGFibGVfc3BhY2VzKCRkZWxldGVkX3NwYWNlcyk7CgogICAgICAgICAgICBteSAkaV9kZWJ1ZyA9ICRpOwoKICAgICAgICAgICAgIyB1cGRhdGUgdGhlIGxlYWRpbmcgd2hpdGVzcGFjZSBvZiB0aGlzIGl0ZW0gYW5kIGFsbCBpdGVtcwogICAgICAgICAgICAjIHRoYXQgY2FtZSBhZnRlciBpdAogICAgICAgICAgICAkaSAtPSAxOwogICAgICAgICAgICB3aGlsZSAoICsrJGkgPD0gJG1heF9scF9vYmplY3RfbGlzdCApIHsKCiAgICAgICAgICAgICAgICBteSAkb2xkX3NwYWNlcyA9ICRybHBfb2JqZWN0X2xpc3QtPlskaV0tPmdldF9zcGFjZXMoKTsKICAgICAgICAgICAgICAgIGlmICggJG9sZF9zcGFjZXMgPj0gJGRlbGV0ZWRfc3BhY2VzICkgewogICAgICAgICAgICAgICAgICAgICRybHBfb2JqZWN0X2xpc3QtPlskaV0tPmRlY3JlYXNlX1NQQUNFUygkZGVsZXRlZF9zcGFjZXMpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgc2hvdWxkbid0IGhhcHBlbiBleGNlcHQgZm9yIGNvZGUgYnVnOgogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIyBub24tZmF0YWwsIGtlZXAgZ29pbmcgZXhjZXB0IGluIERFVkVMX01PREUKICAgICAgICAgICAgICAgICAgICBpZiAoREVWRUxfTU9ERSkgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkbGV2ZWwgPSAkcmxwX29iamVjdF9saXN0LT5bJGlfZGVidWddLT5nZXRfbGV2ZWwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGNpX2xldmVsID0KICAgICAgICAgICAgICAgICAgICAgICAgICAkcmxwX29iamVjdF9saXN0LT5bJGlfZGVidWddLT5nZXRfY2lfbGV2ZWwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJG9sZF9sZXZlbCA9ICRybHBfb2JqZWN0X2xpc3QtPlskaV0tPmdldF9sZXZlbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBteSAkb2xkX2NpX2xldmVsX3V1ID0KICAgICAgICAgICAgICAgICAgICAgICAgICAkcmxwX29iamVjdF9saXN0LT5bJGldLT5nZXRfY2lfbGV2ZWwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgRmF1bHQoPDxFT00pOwpwcm9ncmFtIGJ1ZyB3aXRoIC1scDogd2FudCB0byBkZWxldGUgJGRlbGV0ZWRfc3BhY2VzIGZyb20gaXRlbSAkaSwgYnV0IG9sZD0kb2xkX3NwYWNlcyBkZWxldGVkOiBsZXY9JGxldmVsIGNpPSRjaV9sZXZlbCAgZGVsZXRlZDogbGV2ZWw9JG9sZF9sZXZlbCBjaT0kY2lfbGV2ZWwKRU9NCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9ICMjIGVuZCB3aGlsZSAoICsrJGkgPD0gJG1heF9scF9vYmplY3RfbGlzdCkKICAgICAgICAgICAgJGxwX3Bvc2l0aW9uX3ByZWRpY3RvciAtPSAkZGVsZXRlZF9zcGFjZXM7CiAgICAgICAgICAgICRzcGFjZXNfbmVlZGVkICAgICAgICAgLT0gJGRlbGV0ZWRfc3BhY2VzOwogICAgICAgICAgICBsYXN0IGlmICggJHNwYWNlc19uZWVkZWQgPD0gMCApOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgY2hlY2tfZm9yX2xvbmdfZ251X3N0eWxlX2xpbmVzCgogICAgc3ViIHVuZG9faW5jb21wbGV0ZV9scF9pbmRlbnRhdGlvbiB7CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIFVuZG8gaW5kZW50YXRpb24gZm9yIGFsbCBpbmNvbXBsZXRlIC1scCBpbmRlbnRhdGlvbiBsZXZlbHMgb2YgdGhlCiAgICAgICAgIyBjdXJyZW50IGJhdGNoIHVubGVzcyAteGxwIGlzIHNldC4KICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICMgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBvbmNlIGFmdGVyIGVhY2ggb3V0cHV0IHN0cmVhbSBiYXRjaCBpcwogICAgICAgICMgZmluaXNoZWQgdG8gdW5kbyBpbmRlbnRhdGlvbiBmb3IgYWxsIGluY29tcGxldGUgLWxwIGluZGVudGF0aW9uCiAgICAgICAgIyBsZXZlbHMuICBJZiB0aGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRoZW4gY29tbWVudHMgYW5kIGJsYW5rIGxpbmVzIHdpbGwKICAgICAgICAjIGRpc3J1cHQgdGhpcyBpbmRlbnRhdGlvbiBzdHlsZS4gIEluIG9sZGVyIHZlcnNpb25zIG9mIHBlcmx0aWR5IHRoaXMKICAgICAgICAjIHdhcyBhbHdheXMgZG9uZSBiZWNhdXNlIGl0IGNvdWxkIGNhdXNlIHByb2JsZW1zIG90aGVyd2lzZSwgYnV0IHJlY2VudAogICAgICAgICMgaW1wcm92ZW1lbnRzIGFsbG93IGZhaXJseSBnb29kIHJlc3VsdHMgdG8gYmUgb2J0YWluZWQgYnkgc2tpcHBpbmcKICAgICAgICAjIHRoaXMgc3RlcCB3aXRoIHRoZSAteGxwIGZsYWcuCgogICAgICAgICMgbm90aGluZyB0byBkbyBpZiBubyBzdGFjayBpdGVtcyBkZWZpbmVkIGZvciB0aGlzIGxpbmUKICAgICAgICByZXR1cm4gaWYgKCAkbWF4X2xwX29iamVjdF9saXN0IDwgMCApOwoKICAgICAgICAjIGxvb3Agb3ZlciBhbGwgd2hpdGVzcGFjZSBpdGVtcyBjcmVhdGVkIGZvciB0aGUgY3VycmVudCBiYXRjaAogICAgICAgIGZvcmVhY2ggbXkgJGkgKCAwIC4uICRtYXhfbHBfb2JqZWN0X2xpc3QgKSB7CiAgICAgICAgICAgIG15ICRpdGVtID0gJHJscF9vYmplY3RfbGlzdC0+WyRpXTsKCiAgICAgICAgICAgICMgb25seSBsb29rIGZvciBvcGVuIGl0ZW1zCiAgICAgICAgICAgIG5leHQgaWYgKCAkaXRlbS0+Z2V0X2Nsb3NlZCgpID49IDAgKTsKCiAgICAgICAgICAgICMgVGVudGF0aXZlbHkgcmVtb3ZlIGFsbCBvZiB0aGUgYXZhaWxhYmxlIHNwYWNlCiAgICAgICAgICAgICMgKFRoZSB2ZXJ0aWNhbCBhbGlnbmVyIHdpbGwgdHJ5IHRvIGdldCBpdCBiYWNrIGxhdGVyKQogICAgICAgICAgICBteSAkYXZhaWxhYmxlX3NwYWNlcyA9ICRpdGVtLT5nZXRfYXZhaWxhYmxlX3NwYWNlcygpOwogICAgICAgICAgICBpZiAoICRhdmFpbGFibGVfc3BhY2VzID4gMCApIHsKCiAgICAgICAgICAgICAgICAjIGRlbGV0ZSBpbmNyZW1lbnRhbCBzcGFjZSBmb3IgdGhpcyBpdGVtCiAgICAgICAgICAgICAgICAkcmxwX29iamVjdF9saXN0LT5bJGldCiAgICAgICAgICAgICAgICAgIC0+dGVudGF0aXZlbHlfZGVjcmVhc2VfYXZhaWxhYmxlX3NwYWNlcygkYXZhaWxhYmxlX3NwYWNlcyk7CgogICAgICAgICAgICAgICAgIyBSZWR1Y2UgdGhlIHRvdGFsIGluZGVudGF0aW9uIHNwYWNlIG9mIGFueSBub2RlcyB0aGF0IGZvbGxvdwogICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQgYW55IHN1Y2ggbm9kZXMgbXVzdCBuZWNlc3NhcmlseSBiZSBkZXBlbmRlbnRzCiAgICAgICAgICAgICAgICAjIG9mIHRoaXMgbm9kZS4KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCAkaSArIDEgLi4gJG1heF9scF9vYmplY3RfbGlzdCApIHsKICAgICAgICAgICAgICAgICAgICAkcmxwX29iamVjdF9saXN0LT5bJF9dLT5kZWNyZWFzZV9TUEFDRVMoJGF2YWlsYWJsZV9zcGFjZXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiB1bmRvX2luY29tcGxldGVfbHBfaW5kZW50YXRpb24KfSAjIyBlbmQgY2xvc3VyZSBzZXRfbHBfaW5kZW50YXRpb24KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgc3ViIHRvIHNldCBhIHJlcXVlc3RlZCBicmVhayBiZWZvcmUgYW4gb3BlbmluZyBjb250YWluZXIgaW4gLWxwIG1vZGUuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBzZXRfZm9yY2VkX2xwX2JyZWFrIHsKCiAgICBteSAoICRzZWxmLCAkaV9iZWdpbl9saW5lLCAkaV9vcGVuaW5nICkgPSBAXzsKCiAgICAjIEdpdmVuOgogICAgIyAgICRpX2JlZ2luX2xpbmUgPSBpbmRleCBvZiBicmVhayBpbiB0aGUgX3RvX2dvIGFycmF5cwogICAgIyAgICRpX29wZW5pbmcgPSBpbmRleCBvZiB0aGUgb3BlbmluZyBjb250YWluZXIKCiAgICAjIFNldCBhbnkgcmVxdWVzdGVkIGJyZWFrIGF0IGEgdG9rZW4gYmVmb3JlIHRoaXMgb3BlbmluZyBjb250YWluZXIKICAgICMgdG9rZW4uIFRoaXMgaXMgb2Z0ZW4gYW4gJz0nIG9yICc9PicgYnV0IGNhbiBhbHNvIGJlIHRoaW5ncyBsaWtlCiAgICAjICcuJywgJywnLCAncmV0dXJuJy4gIEl0IHdhcyBkZWZpbmVkIGJ5IHN1YiBzZXRfbHBfaW5kZW50YXRpb24uCgogICAgIyBJbXBvcnRhbnQ6CiAgICAjICAgRm9yIGludGFjdCBjb250YWluZXJzLCBjYWxsIHRoaXMgYXQgdGhlIGNsb3NpbmcgdG9rZW4uCiAgICAjICAgRm9yIGJyb2tlbiBjb250YWluZXJzLCBjYWxsIHRoaXMgYXQgdGhlIG9wZW5pbmcgdG9rZW4uCiAgICAjIFRoaXMgd2lsbCBhdm9pZCBuZWVkbGVzcyBicmVha3Mgd2hlbiBpdCB0dXJucyBvdXQgdGhhdCB0aGUKICAgICMgY29udGFpbmVyIGRvZXMgbm90IGFjdHVhbGx5IGdldCBicm9rZW4uICBUaGlzIGlzbid0IGtub3duIHVudGlsCiAgICAjIHRoZSBjbG9zaW5nIGNvbnRhaW5lciBmb3IgaW50YWN0IGJsb2Nrcy4KCiAgICByZXR1cm4KICAgICAgaWYgKCAkaV9iZWdpbl9saW5lIDwgMAogICAgICAgIHx8ICRpX2JlZ2luX2xpbmUgPiAkbWF4X2luZGV4X3RvX2dvICk7CgogICAgIyBIYW5kbGUgcmVxdWVzdCB0byBwdXQgYSBicmVhayBicmVhayBpbW1lZGlhdGVseSBiZWZvcmUgdGhpcyB0b2tlbi4KICAgICMgV2UgbWF5IG5vdCB3YW50IHRvIGRvIHRoYXQgc2luY2Ugd2UgYXJlIGFsc28gYnJlYWtpbmcgYWZ0ZXIgaXQuCiAgICBpZiAoICRpX2JlZ2luX2xpbmUgPT0gJGlfb3BlbmluZyApIHsKCiAgICAgICAgIyBUaGUgZm9sbG93aW5nIHJ1bGVzIHNob3VsZCBiZSByZXZpZXdlZC4gIFdlIG1heSB3YW50IHRvIGFsd2F5cwogICAgICAgICMgYWxsb3cgdGhlIGJyZWFrLiAgSWYgd2UgZG8gbm90IGRvIHRoZSBicmVhaywgdGhlIGluZGVudGF0aW9uCiAgICAgICAgIyBtYXkgYmUgb2ZmLgoKICAgICAgICAjIFJVTEU6IGRvbid0IGJyZWFrIGJlZm9yZSBpdCB1bmxlc3MgaXQgaXMgd2VsZGVkIHRvIGEgcXcuCiAgICAgICAgIyBUaGlzIHdvcmtzIHdlbGwsIGJ1dCB3ZSBtYXkgd2FudCB0byByZWxheCB0aGlzIHRvIGFsbG93CiAgICAgICAgIyBicmVha3MgaW4gYWRkaXRpb25hbCBjYXNlcy4KICAgICAgICByZXR1cm4KICAgICAgICAgIGlmICggISRzZWxmLT5bX3JLX3dlbGRfcmlnaHRfXS0+eyAkS190b19nb1skaV9vcGVuaW5nXSB9ICk7CiAgICAgICAgcmV0dXJuIHVubGVzcyAoICR0eXBlc190b19nb1skbWF4X2luZGV4X3RvX2dvXSBlcSAncScgKTsKICAgIH0KCiAgICAjIE9ubHkgYnJlYWsgZm9yIGJyZWFrcG9pbnRzIGF0IHRoZSBzYW1lCiAgICAjIGluZGVudGF0aW9uIGxldmVsIGFzIHRoZSBvcGVuaW5nIHBhcmVuCiAgICBteSAkdGVzdDEgPSAkbmVzdGluZ19kZXB0aF90b19nb1skaV9vcGVuaW5nXTsKICAgIG15ICR0ZXN0MiA9ICRuZXN0aW5nX2RlcHRoX3RvX2dvWyRpX2JlZ2luX2xpbmVdOwogICAgcmV0dXJuIGlmICggJHRlc3QyICE9ICR0ZXN0MSApOwoKICAgICMgQmFjayB1cCBhdCBhIGJsYW5rIChmaXhlcyBjYXNlIGI5MzIpCiAgICBteSAkaWJyID0gJGlfYmVnaW5fbGluZSAtIDE7CiAgICBpZiAoICAgJGliciA+IDAKICAgICAgICAmJiAkdHlwZXNfdG9fZ29bJGlicl0gZXEgJ2InICkKICAgIHsKICAgICAgICAkaWJyLS07CiAgICB9CiAgICBpZiAoICRpYnIgPj0gMCApIHsKICAgICAgICBteSAkaV9ub25ibGFuayA9ICRzZWxmLT5zZXRfZm9yY2VkX2JyZWFrcG9pbnQoJGlicik7CgogICAgICAgICMgQ3J1ZGUgcGF0Y2ggdG8gcHJldmVudCBzdWIgcmVjb21iaW5lX2JyZWFrcG9pbnRzIGZyb20gdW5kb2luZwogICAgICAgICMgdGhpcyBicmVhaywgZXNwZWNpYWxseSBhZnRlciBhbiAnPScuICBJdCB3aWxsIGxlYXZlIG9sZAogICAgICAgICMgYnJlYWtwb2ludHMgYWxvbmUuIFNlZSBjMDk4L3gwNDUgZm9yIHNvbWUgZXhhbXBsZXMuCiAgICAgICAgaWYgKCBkZWZpbmVkKCRpX25vbmJsYW5rKSApIHsKICAgICAgICAgICAgJG9sZF9icmVha3BvaW50X3RvX2dvWyRpX25vbmJsYW5rXSA9IDE7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgc2V0X2ZvcmNlZF9scF9icmVhawoKc3ViIHJlZHVjZV9scF9pbmRlbnRhdGlvbiB7CgogICAgbXkgKCAkc2VsZiwgJGksICRzcGFjZXNfd2FudGVkICkgPSBAXzsKCiAgICAjIFJlZHVjZSB0aGUgbGVhZGluZyB3aGl0ZXNwYWNlIGF0IHRva2VuICRpIGlmIHBvc3NpYmxlIGJ5ICRzcGFjZXNfd2FudGVkCiAgICAjIChhIGxhcmdlIHZhbHVlIG9mICRzcGFjZXNfd2FudGVkIHdpbGwgcmVtb3ZlIGFsbCBleGNlc3Mgc3BhY2UpCiAgICAjIE5PVEU6IHRvIGJlIGNhbGxlZCBmcm9tIGJyZWFrX2xpc3RzIG9ubHkgZm9yIGEgc2VxdWVuY2Ugb2YgdG9rZW5zCiAgICAjIGNvbnRhaW5lZCBiZXR3ZWVuIG9wZW5pbmcgYW5kIGNsb3NpbmcgcGFyZW5zL2JyYWNlcy9icmFja2V0cwoKICAgIG15ICRkZWxldGVkX3NwYWNlcyA9IDA7CgogICAgbXkgJGl0ZW0gICAgICAgICAgICAgPSAkbGVhZGluZ19zcGFjZXNfdG9fZ29bJGldOwogICAgbXkgJGF2YWlsYWJsZV9zcGFjZXMgPSAkaXRlbS0+Z2V0X2F2YWlsYWJsZV9zcGFjZXMoKTsKCiAgICBpZiAoCiAgICAgICAgJGF2YWlsYWJsZV9zcGFjZXMgPiAwCiAgICAgICAgJiYgKCAoICRzcGFjZXNfd2FudGVkIDw9ICRhdmFpbGFibGVfc3BhY2VzICkKICAgICAgICAgICAgfHwgISRpdGVtLT5nZXRfaGF2ZV9jaGlsZCgpICkKICAgICAgKQogICAgewoKICAgICAgICAjIHdlJ2xsIHJlbW92ZSB0aGVzZSBzcGFjZXMsIGJ1dCBtYXJrIHRoZW0gYXMgcmVjb3ZlcmFibGUKICAgICAgICAkZGVsZXRlZF9zcGFjZXMgPQogICAgICAgICAgJGl0ZW0tPnRlbnRhdGl2ZWx5X2RlY3JlYXNlX2F2YWlsYWJsZV9zcGFjZXMoJHNwYWNlc193YW50ZWQpOwogICAgfQoKICAgIHJldHVybiAkZGVsZXRlZF9zcGFjZXM7Cn0gIyMgZW5kIHN1YiByZWR1Y2VfbHBfaW5kZW50YXRpb24KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQ09ERSBTRUNUSU9OIDEzOiBQcmVwYXJpbmcgYmF0Y2hlcyBmb3IgdmVydGljYWwgYWxpZ25tZW50CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpzdWIgY2hlY2tfY29udmV5X2JhdGNoX2lucHV0IHsKCiAgICBteSAoJHNlbGYpID0gQF87CgogICAgIyBDaGVjayBmb3IgdmFsaWQgaW5wdXQgdG8gc3ViIGNvbnZleV9iYXRjaF90b192ZXJ0aWNhbF9hbGlnbmVyLiAgQW4KICAgICMgZXJyb3IgaGVyZSB3b3VsZCBtb3N0IGxpa2VseSBiZSBkdWUgdG8gYW4gZXJyb3IgaW4gdGhlIGNhbGxpbmcKICAgICMgcm91dGluZSAnc3ViIGdyaW5kX2JhdGNoX29mX0NPREUnLgoKICAgIG15ICR0aGlzX2JhdGNoID0gJHNlbGYtPltfdGhpc19iYXRjaF9dOwogICAgbXkgJHJpX2ZpcnN0ICAgPSAkdGhpc19iYXRjaC0+W19yaV9maXJzdF9dOwogICAgbXkgJHJpX2xhc3QgICAgPSAkdGhpc19iYXRjaC0+W19yaV9sYXN0X107CgogICAgIyAkcmlfZmlyc3QgPSByZWYgdG8gbGlzdCBvZiBzdGFydGluZyBsaW5lIGluZGV4ZXMgaW4gX3RvX2dvIGFycmF5cwogICAgIyAkcmlfbGFzdCAgPSByZWYgdG8gbGlzdCBvZiBlbmRpbmcgbGluZSBpbmRleGVzIGluIF90b19nbyBhcnJheXMKICAgIGlmICggIWRlZmluZWQoJHJpX2ZpcnN0KSB8fCAhZGVmaW5lZCgkcmlfbGFzdCkgKSB7CiAgICAgICAgRmF1bHQoPDxFT00pOwpVbmRlZmluZWQgbGluZSByYW5nZXMgcmlfZmlyc3QgYW5kL3IgcmlfbGFzdApFT00KICAgIH0KCiAgICBteSAkbm1heCAgICAgICA9IEB7JHJpX2ZpcnN0fSAtIDE7CiAgICBteSAkbm1heF9jaGVjayA9IEB7JHJpX2xhc3R9IC0gMTsKICAgIGlmICggJG5tYXggPCAwIHx8ICRubWF4X2NoZWNrIDwgMCB8fCAkbm1heCAhPSAkbm1heF9jaGVjayApIHsKICAgICAgICBGYXVsdCg8PEVPTSk7CkxpbmUgcmFuZ2UgaW5kZXggZXJyb3I6IG5tYXg9JG5tYXggYnV0IG5tYXhfY2hlY2s9JG5tYXhfY2hlY2sKVGhlc2Ugc2hvdWxkIGJlIGVxdWFsIGFuZCA+PTAKRU9NCiAgICB9CiAgICBteSAoICRpYmVnLCAkaWVuZCApOwogICAgZm9yZWFjaCBteSAkbiAoIDAgLi4gJG5tYXggKSB7CiAgICAgICAgbXkgJGllbmRfbSA9ICRpZW5kOwogICAgICAgICRpYmVnID0gJHJpX2ZpcnN0LT5bJG5dOwogICAgICAgICRpZW5kID0gJHJpX2xhc3QtPlskbl07CiAgICAgICAgaWYgKCAkaWJlZyA8IDAgfHwgJGllbmQgPCAkaWJlZyB8fCAkaWVuZCA+ICRtYXhfaW5kZXhfdG9fZ28gKSB7CiAgICAgICAgICAgIEZhdWx0KDw8RU9NKTsKQmFkIGxpbmUgcmFuZ2UgYXQgbGluZSBpbmRleCAkbiBvZiAkbm1heDogaWJlZz0kaWJlZywgaWVuZD0kaWVuZApUaGVzZSBzaG91bGQgaGF2ZSBpZW5kID49IGliZWcgYW5kIGJlIGluIHRoZSByYW5nZSAoMC4uJG1heF9pbmRleF90b19nbykKRU9NCiAgICAgICAgfQogICAgICAgIG5leHQgaWYgKCAkbiA9PSAwICk7CiAgICAgICAgaWYgKCAkaWJlZyA8PSAkaWVuZF9tICkgewogICAgICAgICAgICBGYXVsdCg8PEVPTSk7CkxpbmUgcmFuZ2VzIG92ZXJsYXA6IGllbmQ9JGllbmRfbSBhdCBsaW5lICRuLTEgYnV0IGliZWc9JGliZWcgZm9yIGxpbmUgJG4KRU9NCiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgY2hlY2tfY29udmV5X2JhdGNoX2lucHV0CgpzdWIgY29udmV5X2JhdGNoX3RvX3ZlcnRpY2FsX2FsaWduZXIgewoKICAgIG15ICgkc2VsZikgPSBAXzsKCiAgICAjIFRoaXMgcm91dGluZSByZWNlaXZlcyBhIGJhdGNoIG9mIGNvZGUgZm9yIHdoaWNoIHRoZSBmaW5hbCBsaW5lIGJyZWFrcwogICAgIyBoYXZlIGJlZW4gZGVmaW5lZC4gSGVyZSB3ZSBwcmVwYXJlIHRoZSBsaW5lcyBmb3IgcGFzc2luZyB0byB0aGUgdmVydGljYWwKICAgICMgYWxpZ25lci4gIFdlIGRvIHRoZSBmb2xsb3dpbmcgdGFza3M6CiAgICAjIC0gbWFyayBjZXJ0YWluIHZlcnRpY2FsIGFsaWdubWVudCB0b2tlbnMsIHN1Y2ggYXMgJz0nLCBpbiBlYWNoIGxpbmUKICAgICMgLSBtYWtlIGZpbmFsIGluZGVudGF0aW9uIGFkanVzdG1lbnRzCiAgICAjIC0gZG8gbG9naWNhbCBwYWRkaW5nOiBpbnNlcnQgZXh0cmEgYmxhbmsgc3BhY2VzIHRvIGhlbHAgZGlzcGxheSBjZXJ0YWluCiAgICAjICAgbG9naWNhbCBjb25zdHJ1Y3Rpb25zCiAgICAjIC0gc2VuZCB0aGUgbGluZSB0byB0aGUgdmVydGljYWwgYWxpZ25lcgoKICAgIG15ICRyTEwgICAgICAgICAgICAgICA9ICRzZWxmLT5bX3JMTF9dOwogICAgbXkgJEtsaW1pdCAgICAgICAgICAgID0gJHNlbGYtPltfS2xpbWl0X107CiAgICBteSAkcmlzX2xpc3RfYnlfc2Vxbm8gPSAkc2VsZi0+W19yaXNfbGlzdF9ieV9zZXFub19dOwogICAgbXkgJHRoaXNfYmF0Y2ggICAgICAgID0gJHNlbGYtPltfdGhpc19iYXRjaF9dOwoKICAgIG15ICRkb19ub3RfcGFkICAgICAgPSAkdGhpc19iYXRjaC0+W19kb19ub3RfcGFkX107CiAgICBteSAkYmF0Y2hfQ09ERV90eXBlID0gJHRoaXNfYmF0Y2gtPltfYmF0Y2hfQ09ERV90eXBlX107CiAgICBteSAkcmlfZmlyc3QgICAgICAgID0gJHRoaXNfYmF0Y2gtPltfcmlfZmlyc3RfXTsKICAgIG15ICRyaV9sYXN0ICAgICAgICAgPSAkdGhpc19iYXRjaC0+W19yaV9sYXN0X107CgogICAgJHNlbGYtPmNoZWNrX2NvbnZleV9iYXRjaF9pbnB1dCgpIGlmIChERVZFTF9NT0RFKTsKCiAgICBteSAkbl9sYXN0X2xpbmUgPSBAeyRyaV9maXJzdH0gLSAxOwoKICAgIG15ICRpYmVnID0gJHJpX2ZpcnN0LT5bMF07CiAgICBteSAkaWVuZCA9ICRyaV9sYXN0LT5bMF07CgogICAgbXkgJHR5cGVfYmVnICA9ICR0eXBlc190b19nb1skaWJlZ107CiAgICBteSAkdHlwZV9lbmQgID0gJHR5cGVzX3RvX2dvWyRpZW5kXTsKICAgIG15ICR0b2tlbl9iZWcgPSAkdG9rZW5zX3RvX2dvWyRpYmVnXTsKCiAgICBteSAkcmluZGVudGF0aW9uX2xpc3QgPSBbMF07ICAgICMgcmVmIHRvIGluZGVudGF0aW9ucyBmb3IgZWFjaCBsaW5lCiAgICBteSAoICRjc2N3X2Jsb2NrX2NvbW1lbnQsICRjbG9zaW5nX3NpZGVfY29tbWVudCwgJGlzX2Jsb2NrX2NvbW1lbnQsCiAgICAgICAgJGlzX0hTQyApOwoKICAgIGlmICggICEkbWF4X2luZGV4X3RvX2dvCiAgICAgICAgJiYgJHR5cGVfYmVnIGVxICcjJyApCiAgICB7CiAgICAgICAgaWYgKCAkYmF0Y2hfQ09ERV90eXBlICYmICRiYXRjaF9DT0RFX3R5cGUgZXEgJ0hTQycgKSB7ICRpc19IU0MgPSAxIH0KICAgICAgICBlbHNlIHsgJGlzX2Jsb2NrX2NvbW1lbnQgPSAxIH0KICAgIH0KCiAgICBpZiAoJHJPcHRzX2Nsb3Npbmdfc2lkZV9jb21tZW50cykgewogICAgICAgICggJGNsb3Npbmdfc2lkZV9jb21tZW50LCAkY3Njd19ibG9ja19jb21tZW50ICkgPQogICAgICAgICAgJHNlbGYtPmFkZF9jbG9zaW5nX3NpZGVfY29tbWVudCgpOwogICAgfQoKICAgICMgZm9yIG11bHRpLWxpbmUgYmF0Y2hlcyAuLi4KICAgIGlmICggJG5fbGFzdF9saW5lID4gMCApIHsKCiAgICAgICAgIyB1bmRvIGNvbnRpbnVhdGlvbiBpbmRlbnRhdGlvbgogICAgICAgICRzZWxmLT51bmRvX2NpKCk7CgogICAgICAgICMgZmx1c2ggYmVmb3JlIGEgbG9uZyBpZiBzdGF0ZW1lbnQgdG8gYXZvaWQgdW53YW50ZWQgYWxpZ25tZW50CiAgICAgICAgJHNlbGYtPmZsdXNoX3ZlcnRpY2FsX2FsaWduZXIoKQogICAgICAgICAgaWYgKCAkdHlwZV9iZWcgZXEgJ2snCiAgICAgICAgICAgICYmICRpc19pZl91bmxlc3N7JHRva2VuX2JlZ30gKTsKCiAgICAgICAgJHNlbGYtPnNldF9sb2dpY2FsX3BhZGRpbmcoKQogICAgICAgICAgaWYgKCRyT3B0c19sb2dpY2FsX3BhZGRpbmcpOwoKICAgICAgICAkc2VsZi0+eGxwX3R3ZWFrKCkKICAgICAgICAgIGlmICgkck9wdHNfZXh0ZW5kZWRfbGluZV91cF9wYXJlbnRoZXNlcyk7CiAgICB9CgogICAgIyAteGNpIG11c3QgdW5kbyBjb250aW51YXRpb24gaW5kZW50YXRpb24gZXZlbiBmb3Igc2luZ2xlIGxpbmVzCiAgICBlbHNpZiAoJHJPcHRzX2V4dGVuZGVkX2NvbnRpbnVhdGlvbl9pbmRlbnRhdGlvbikgewogICAgICAgICRzZWxmLT51bmRvX2NpKCk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAjIG9rOiBzaW5nbGUgbGluZSwgbm8gLXhjaQogICAgfQoKICAgIGlmIChERVZFTF9NT0RFKSB7ICRzZWxmLT5jaGVja19iYXRjaF9zdW1tZWRfbGVuZ3RocygpIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgZGVmaW5lIHRoZSB2ZXJ0aWNhbCBhbGlnbm1lbnRzIGZvciBhbGwgbGluZXMgb2YgdGhpcyBiYXRjaAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBteSAkcmxpbmVfYWxpZ25tZW50czsKCiAgICAjIFF1aWNrIGhhbmRsaW5nIG9mIGxpbmVzIHdpdGggYSBzaW5nbGUgdG9rZW5zCiAgICBpZiAoICEkbWF4X2luZGV4X3RvX2dvICkgewoKICAgICAgICAjIEhhbmdpbmcgc2lkZSBjb21tZW50CiAgICAgICAgaWYgKCRpc19IU0MpIHsKICAgICAgICAgICAgJHJsaW5lX2FsaWdubWVudHMgPSBtYWtlX0hTQ192ZXJ0aWNhbF9hbGlnbm1lbnRzKCk7CiAgICAgICAgfQoKICAgICAgICAjIEFsbCBPdGhlciBzaW5nbGUgdG9rZW5zCiAgICAgICAgIyA9IFsgWyAkcnRva2VucywgJHJmaWVsZHMsICRycGF0dGVybnMsICRyZmllbGRfbGVuZ3RocyBdIF07CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAkcmxpbmVfYWxpZ25tZW50cyA9IFsKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICBbXSwKICAgICAgICAgICAgICAgICAgICBbICR0b2tlbnNfdG9fZ29bMF0gXSwKICAgICAgICAgICAgICAgICAgICBbICR0eXBlc190b19nb1swXSBdLAogICAgICAgICAgICAgICAgICAgIFsgJHN1bW1lZF9sZW5ndGhzX3RvX2dvWzFdIC0gJHN1bW1lZF9sZW5ndGhzX3RvX2dvWzBdIF0sCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIF07CiAgICAgICAgfQogICAgfQoKICAgICMgTXVsdGlwbGUgdG9rZW5zCiAgICBlbHNlIHsKICAgICAgICAkcmxpbmVfYWxpZ25tZW50cyA9ICRzZWxmLT5tYWtlX3ZlcnRpY2FsX2FsaWdubWVudHMoKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgbG9vcCB0byBzZW5kIGVhY2ggbGluZSB0byB0aGUgdmVydGljYWwgYWxpZ25lcgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBteSAoICR0eXBlX2JlZ19sYXN0LCAkdHlwZV9lbmRfbGFzdCwgJGliZWdfbmV4dCwgJGllbmRfbmV4dCwgJGxqdW1wICk7CgogICAgZm9yZWFjaCBteSAkbmxpbmUgKCAwIC4uICRuX2xhc3RfbGluZSApIHsKCiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBUaGlzIGhhc2ggd2lsbCBob2xkIHRoZSBhcmdzIGZvciB2ZXJ0aWNhbCBhbGlnbm1lbnQgb2YgdGhpcyBsaW5lCiAgICAgICAgIyBXZSB3aWxsIHBvcHVsYXRlIGl0IGFzIHdlIGdvLgogICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIG15ICRydmFvX2FyZ3MgPSB7fTsKCiAgICAgICAgaWYgKCAkbmxpbmUgPiAwICkgewogICAgICAgICAgICAkdHlwZV9iZWdfbGFzdCA9ICR0eXBlX2JlZzsKICAgICAgICAgICAgJHR5cGVfZW5kX2xhc3QgPSAkdHlwZV9lbmQ7CgogICAgICAgICAgICAkaWJlZyA9ICRpYmVnX25leHQ7CiAgICAgICAgICAgICRpZW5kID0gJGllbmRfbmV4dDsKCiAgICAgICAgICAgICR0eXBlX2JlZyAgPSAkdHlwZXNfdG9fZ29bJGliZWddOwogICAgICAgICAgICAkdHlwZV9lbmQgID0gJHR5cGVzX3RvX2dvWyRpZW5kXTsKICAgICAgICAgICAgJHRva2VuX2JlZyA9ICR0b2tlbnNfdG9fZ29bJGliZWddOwogICAgICAgIH0KCiAgICAgICAgbXkgJEtiZWcgPSAkS190b19nb1skaWJlZ107CiAgICAgICAgbXkgJEtlbmQgPSAkS190b19nb1skaWVuZF07CgogICAgICAgIGlmICggJG5saW5lIDwgJG5fbGFzdF9saW5lICkgewogICAgICAgICAgICAkaWJlZ19uZXh0ID0gJHJpX2ZpcnN0LT5bICRubGluZSArIDEgXTsKICAgICAgICAgICAgJGllbmRfbmV4dCA9ICRyaV9sYXN0LT5bICRubGluZSArIDEgXTsKCiAgICAgICAgICAgIG15ICRLYmVnX25leHQgPSAkS190b19nb1skaWJlZ19uZXh0XTsKICAgICAgICAgICAgJGxqdW1wID0KICAgICAgICAgICAgICAkckxMLT5bJEtiZWdfbmV4dF0tPltfTEVWRUxfXSAtICRyTEwtPlskS2VuZF0tPltfTEVWRUxfXTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAhJGlzX2Jsb2NrX2NvbW1lbnQgJiYgJEtlbmQgPCAkS2xpbWl0ICkgewoKICAgICAgICAgICAgIyBQYXRjaCBmb3IgZ2l0ICM1MSwgYSBiYXJlIGNsb3NpbmcgcXcgcGFyZW4gd2FzIG5vdCBvdXRkZW50ZWQKICAgICAgICAgICAgIyBpZiB0aGUgZmxhZyAnLW5vZGVsZXRlLW9sZC1uZXdsaW5lcyBpcyBzZXQKICAgICAgICAgICAgIyBOb3RlIHRoYXQgd2UgYXJlIGp1c3QgbG9va2luZyBhaGVhZCBmb3IgdGhlIG5leHQgbm9uYmxhbmsKICAgICAgICAgICAgIyBjaGFyYWN0ZXIuIFdlIGNvdWxkIHNjYW4gcGFzdCBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIGJsb2NrCiAgICAgICAgICAgICMgY29tbWVudHMgb3IgaGFuZ2luZyBzaWRlIGNvbW1lbnRzIGJ5IGNhbGxpbmcgS19uZXh0X2NvZGUsIGJ1dCBpdAogICAgICAgICAgICAjIGNvdWxkIGFkZCBzaWduaWZpY2FudCBydW4gdGltZSB3aXRoIHZlcnkgbGl0dGxlIHRvIGJlIGdhaW5lZC4KICAgICAgICAgICAgbXkgJEtiZWdfbmV4dCA9ICRLZW5kICsgMTsKICAgICAgICAgICAgaWYgKCAgICRLYmVnX25leHQgPCAkS2xpbWl0CiAgICAgICAgICAgICAgICAmJiAkckxMLT5bJEtiZWdfbmV4dF0tPltfVFlQRV9dIGVxICdiJyApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRLYmVnX25leHQgKz0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkbGp1bXAgPQogICAgICAgICAgICAgICRyTEwtPlskS2JlZ19uZXh0XS0+W19MRVZFTF9dIC0gJHJMTC0+WyRLZW5kXS0+W19MRVZFTF9dOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJGxqdW1wID0gMDsKICAgICAgICB9CgogICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBEZWZpbmUgdGhlIGNoZWNrIHZhbHVlICdLZW5kJyB0byBzZW5kIGZvciB0aGlzIGxpbmUKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgVGhlICdLZW5kJyB2YWx1ZSBpcyBhbiBpbnRlZ2VyIGZvciBjaGVja2luZyB0aGF0IGxpbmVzIGNvbWUgb3V0IG9mCiAgICAgICAgIyB0aGUgZmFyIGVuZCBvZiB0aGUgcGlwZWxpbmUgaW4gdGhlIHJpZ2h0IG9yZGVyLiAgSXQgaW5jcmVhc2VzCiAgICAgICAgIyBsaW5lYXJseSBhbG9uZyB0aGUgdG9rZW4gc3RyZWFtLiAgQnV0IHdlIG9ubHkgc2VuZCBlbmRpbmcgSyB2YWx1ZXMgb2YKICAgICAgICAjIG5vbi1jb21tZW50cyBkb3duIHRoZSBwaXBlbGluZS4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byBjaGVja2luZyB0aGF0CiAgICAgICAgIyB0aGUgbGFzdCBDT0RFX3R5cGUgaXMgYmxhbmsgb3IgZXF1YWwgdG8gJ1ZFUicuIFNlZSBhbHNvIHN1YgogICAgICAgICMgcmVzeW5jX2xpbmVzX2FuZF90b2tlbnMgZm9yIHJlbGF0ZWQgY29kaW5nLiAgTm90ZSB0aGF0CiAgICAgICAgIyAnJGJhdGNoX0NPREVfdHlwZScgaXMgdGhlIGNvZGUgdHlwZSBvZiB0aGUgbGluZSB0byB3aGljaCB0aGUgZW5kaW5nCiAgICAgICAgIyB0b2tlbiBiZWxvbmdzLgogICAgICAgIGlmICggISRiYXRjaF9DT0RFX3R5cGUgfHwgJGJhdGNoX0NPREVfdHlwZSBlcSAnVkVSJyApIHsKICAgICAgICAgICAgJHJ2YW9fYXJncy0+e0tlbmR9ID0gJEtlbmQ7CiAgICAgICAgfQoKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgZ2V0IHRoZSB2ZXJ0aWNhbCBhbGlnbm1lbnQgaW5mbyBmb3IgdGhpcyBsaW5lCiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgIyBUaGUgbGluZXMgYXJlIGJyb2tlbiBpbnRvIGZpZWxkcyB3aGljaCBjYW4gYmUgc3BhY2VkIGJ5IHRoZSB2ZXJ0aWNhbAogICAgICAgICMgdG8gYWNoaWV2ZSB2ZXJ0aWNhbCBhbGlnbm1lbnQuICBUaGVzZSBmaWVsZHMgYXJlIHRoZSBhY3R1YWwgdGV4dAogICAgICAgICMgd2hpY2ggd2lsbCBiZSBvdXRwdXQsIHNvIGZyb20gaGVyZSBvbiBubyBtb3JlIGNoYW5nZXMgY2FuIGJlIG1hZGUgdG8KICAgICAgICAjIHRoZSB0ZXh0LgogICAgICAgIG15ICRybGluZV9hbGlnbm1lbnQgPSAkcmxpbmVfYWxpZ25tZW50cy0+WyRubGluZV07CgogICAgICAgICMgUHJvZ3JhbW1pbmcgY2hlY2s6IChzaG91bGRuJ3QgaGFwcGVuKQogICAgICAgICMgVGhlIG51bWJlciBvZiB0b2tlbnMgd2hpY2ggc2VwYXJhdGUgdGhlIGZpZWxkcyBtdXN0IGFsd2F5cyBiZQogICAgICAgICMgb25lIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGZpZWxkcy4gSWYgdGhpcyBpcyBub3QgdHJ1ZSB0aGVuCiAgICAgICAgIyBhbiBlcnJvciBoYXMgYmVlbiBpbnRyb2R1Y2VkIGluIHN1YiBtYWtlX2FsaWdubWVudF9wYXR0ZXJucy4KICAgICAgICBpZiAoREVWRUxfTU9ERSkgewogICAgICAgICAgICBteSAoICRydG9rZW5zLCAkcmZpZWxkcywgJHJwYXR0ZXJuc191dSwgJHJmaWVsZF9sZW5ndGhzX3V1ICkgPQogICAgICAgICAgICAgIEB7JHJsaW5lX2FsaWdubWVudH07CiAgICAgICAgICAgIGlmICggQHskcmZpZWxkc30gJiYgKCBAeyRydG9rZW5zfSAhPSAoIEB7JHJmaWVsZHN9IC0gMSApICkgKSB7CiAgICAgICAgICAgICAgICBteSAkbnQgID0gQHskcnRva2Vuc307CiAgICAgICAgICAgICAgICBteSAkbmYgID0gQHskcmZpZWxkc307CiAgICAgICAgICAgICAgICBteSAkbXNnID0gPDxFT007ClByb2dyYW0gYnVnIGluIFBlcmw6OlRpZHk6OkZvcm1hdHRlciwgcHJvYmFibHkgaW4gc3ViICdtYWtlX2FsaWdubWVudF9wYXR0ZXJucyc6ClRoZSBudW1iZXIgb2YgdG9rZW5zID0gJG50IHNob3VsZCBiZSBvbmUgbGVzcyB0aGFuIG51bWJlciBvZiBmaWVsZHM6ICRuZgpFT00KICAgICAgICAgICAgICAgIEZhdWx0KCRtc2cpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBnZXQgdGhlIGZpbmFsIGluZGVudGF0aW9uIG9mIHRoaXMgbGluZQogICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBteSAoCgogICAgICAgICAgICAkaW5kZW50YXRpb24sCiAgICAgICAgICAgICRsZXYsCiAgICAgICAgICAgICRsZXZlbF9lbmQsCiAgICAgICAgICAgICRpX3Rlcm1pbmFsLAogICAgICAgICAgICAkaXNfb3V0ZGVudGVkX2xpbmUsCgogICAgICAgICkgPSAkc2VsZi0+Z2V0X2ZpbmFsX2luZGVudGF0aW9uKAoKICAgICAgICAgICAgJGliZWcsCiAgICAgICAgICAgICRpZW5kLAogICAgICAgICAgICAkcmluZGVudGF0aW9uX2xpc3QsCiAgICAgICAgICAgICRsanVtcCwKCiAgICAgICAgKTsKCiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgZGVmaW5lIGZsYWcgJ291dGRlbnRfbG9uZ19saW5lcycKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaWYgKAogICAgICAgICAgICAjIHdlIHdpbGwgYWxsb3cgb3V0ZGVudGluZyBvZiBsb25nIGxpbmVzLi4KICAgICAgICAgICAgIyB3aGljaCBhcmUgbG9uZyBxdW90ZXMsIGlmIGFsbG93ZWQKICAgICAgICAgICAgKCAkdHlwZV9iZWcgZXEgJ1EnICYmICRyT3B0c19vdXRkZW50X2xvbmdfcXVvdGVzICkKCiAgICAgICAgICAgICMgd2hpY2ggYXJlIGxvbmcgYmxvY2sgY29tbWVudHMsIGlmIGFsbG93ZWQKICAgICAgICAgICAgfHwgKAogICAgICAgICAgICAgICAgICAgJHR5cGVfYmVnIGVxICcjJwogICAgICAgICAgICAgICAgJiYgJHJPcHRzX291dGRlbnRfbG9uZ19jb21tZW50cwoKICAgICAgICAgICAgICAgICMgYnV0IG5vdCBpZiB0aGlzIGlzIGEgc3RhdGljIGJsb2NrIGNvbW1lbnQKICAgICAgICAgICAgICAgICYmICEkdGhpc19iYXRjaC0+W19pc19zdGF0aWNfYmxvY2tfY29tbWVudF9dCiAgICAgICAgICAgICkKICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRydmFvX2FyZ3MtPntvdXRkZW50X2xvbmdfbGluZXN9ID0gMTsKCiAgICAgICAgICAgICMgY29udmVydCAtbHAgaW5kZW50YXRpb24gb2JqZWN0cyB0byBzcGFjZXMgdG8gYWxsb3cgb3V0ZGVudGluZwogICAgICAgICAgICBpZiAoIHJlZigkaW5kZW50YXRpb24pICkgewogICAgICAgICAgICAgICAgJGluZGVudGF0aW9uID0gJGluZGVudGF0aW9uLT5nZXRfc3BhY2VzKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIGRlZmluZSBmbGFncyAnYnJlYWtfYWxpZ25tZW50X2JlZm9yZScgYW5kICdfYWZ0ZXInCiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAjIFRoZXNlIGZsYWdzIHRlbGwgdGhlIHZlcnRpY2FsIGFsaWduZXIgdG8gc3RvcCBhbGlnbm1lbnQgYmVmb3JlIG9yCiAgICAgICAgIyBhZnRlciB0aGlzIGxpbmUuCiAgICAgICAgaWYgKCRpc19vdXRkZW50ZWRfbGluZSkgewogICAgICAgICAgICAkcnZhb19hcmdzLT57YnJlYWtfYWxpZ25tZW50X2JlZm9yZX0gPSAxOwogICAgICAgICAgICAkcnZhb19hcmdzLT57YnJlYWtfYWxpZ25tZW50X2FmdGVyfSAgPSAxOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoJGRvX25vdF9wYWQpIHsKICAgICAgICAgICAgJHJ2YW9fYXJncy0+e2JyZWFrX2FsaWdubWVudF9iZWZvcmV9ID0gMTsKICAgICAgICB9CgogICAgICAgICMgZmx1c2ggYXQgYW4gJ2lmJyB3aGljaCBmb2xsb3dzIGEgbGluZSB3aXRoICgxKSB0ZXJtaW5hbCBzZW1pY29sb24KICAgICAgICAjIG9yICgyKSB0ZXJtaW5hbCBibG9ja190eXBlIHdoaWNoIGlzIG5vdCBhbiAnaWYnLiAgVGhpcyBwcmV2ZW50cwogICAgICAgICMgdW53YW50ZWQgYWxpZ25tZW50IGJldHdlZW4gdGhlIGxpbmVzLgogICAgICAgIGVsc2lmICggJHRva2VuX2JlZyBlcSAnaWYnICYmICR0eXBlX2JlZyBlcSAnaycgKSB7CiAgICAgICAgICAgIG15ICR0eXBlX20gPSAnYic7CiAgICAgICAgICAgIG15ICRibG9ja190eXBlX207CgogICAgICAgICAgICBpZiAoICRLYmVnID4gMCApIHsKICAgICAgICAgICAgICAgIG15ICRLbSA9ICRLYmVnIC0gMTsKICAgICAgICAgICAgICAgICR0eXBlX20gPSAkckxMLT5bJEttXS0+W19UWVBFX107CiAgICAgICAgICAgICAgICBpZiAoICR0eXBlX20gZXEgJ2InICYmICRLbSA+IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgJEttIC09IDE7CiAgICAgICAgICAgICAgICAgICAgJHR5cGVfbSA9ICRyTEwtPlskS21dLT5bX1RZUEVfXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICggJHR5cGVfbSBlcSAnIycgJiYgJEttID4gMCApIHsKICAgICAgICAgICAgICAgICAgICAkS20gLT0gMTsKICAgICAgICAgICAgICAgICAgICAkdHlwZV9tID0gJHJMTC0+WyRLbV0tPltfVFlQRV9dOwogICAgICAgICAgICAgICAgICAgIGlmICggJHR5cGVfbSBlcSAnYicgJiYgJEttID4gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEttIC09IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlX20gPSAkckxMLT5bJEttXS0+W19UWVBFX107CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG15ICRzZXFub19tID0gJHJMTC0+WyRLbV0tPltfVFlQRV9TRVFVRU5DRV9dOwogICAgICAgICAgICAgICAgaWYgKCRzZXFub19tKSB7CiAgICAgICAgICAgICAgICAgICAgJGJsb2NrX3R5cGVfbSA9ICRzZWxmLT5bX3JibG9ja190eXBlX29mX3NlcW5vX10tPnskc2Vxbm9fbX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYnJlYWsgYWZ0ZXIgYW55dGhpbmcgdGhhdCBpcyBub3QgaWYtbGlrZQogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkdHlwZV9tIGVxICc7JwogICAgICAgICAgICAgICAgfHwgKCAgICR0eXBlX20gZXEgJ30nCiAgICAgICAgICAgICAgICAgICAgJiYgJGJsb2NrX3R5cGVfbQogICAgICAgICAgICAgICAgICAgICYmICRibG9ja190eXBlX20gbmUgJ2lmJwogICAgICAgICAgICAgICAgICAgICYmICRibG9ja190eXBlX20gbmUgJ3VubGVzcycKICAgICAgICAgICAgICAgICAgICAmJiAkYmxvY2tfdHlwZV9tIG5lICdlbHNpZicKICAgICAgICAgICAgICAgICAgICAmJiAkYmxvY2tfdHlwZV9tIG5lICdlbHNlJyApCiAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkcnZhb19hcmdzLT57YnJlYWtfYWxpZ25tZW50X2JlZm9yZX0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAjIGRvIG5vdCBuZWVkIHRvIGJyZWFrIHZlcnRpY2FsIGFsaWdubWVudCBoZXJlCiAgICAgICAgfQoKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIGRlZmluZSAncnZlcnRpY2FsX3RpZ2h0bmVzc19mbGFncycKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIFRoZXNlIGZsYWdzIHRlbGwgdGhlIHZlcnRpY2FsIGFsaWduZXIgaWYvd2hlbiB0byBjb21iaW5lIGNvbnNlY3V0aXZlCiAgICAgICAgIyBsaW5lcywgYmFzZWQgb24gdGhlIHVzZXIgaW5wdXQgcGFyYW1ldGVycy4KICAgICAgICBpZiAoICAgISRpc19ibG9ja19jb21tZW50CiAgICAgICAgICAgICYmICEkc2VsZi0+W19ub192ZXJ0aWNhbF90aWdodG5lc3NfZmxhZ3NfXSApCiAgICAgICAgewogICAgICAgICAgICAkcnZhb19hcmdzLT57cnZlcnRpY2FsX3RpZ2h0bmVzc19mbGFnc30gPQogICAgICAgICAgICAgICRzZWxmLT5zZXRfdmVydGljYWxfdGlnaHRuZXNzX2ZsYWdzKCAkbmxpbmUsCiAgICAgICAgICAgICAgICAkY2xvc2luZ19zaWRlX2NvbW1lbnQgKTsKICAgICAgICB9CgogICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgZGVmaW5lICdpc190ZXJtaW5hbF90ZXJuYXJ5JyAgZmxhZwogICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAjIFRoaXMgZmxhZyBpcyBzZXQgYXQgdGhlIGZpbmFsICc6JyBvZiBhIHRlcm5hcnkgY2hhaW4gdG8gcmVxdWVzdAogICAgICAgICMgdmVydGljYWwgYWxpZ25tZW50IG9mIHRoZSBmaW5hbCB0ZXJtLiAgSGVyZSBpcyBhIHNsaWdodGx5IGNvbXBsZXgKICAgICAgICAjIGV4YW1wbGU6CiAgICAgICAgIwogICAgICAgICMgJHNlbGYtPntfdGV4dH0gPSAoCiAgICAgICAgIyAgICAhJHNlY3Rpb24gICAgICAgID8gJycKICAgICAgICAjICAgOiAkdHlwZSBlcSAnaXRlbScgPyAidGhlICRzZWN0aW9uIGVudHJ5IgogICAgICAgICMgICA6ICAgICAgICAgICAgICAgICAgICJ0aGUgc2VjdGlvbiBvbiAkc2VjdGlvbiIKICAgICAgICAjICkKICAgICAgICAjIC4gKAogICAgICAgICMgICAkcGFnZQogICAgICAgICMgICA/ICggJHNlY3Rpb24gPyAnIGluICcgOiAnJyApIC4gInRoZSAkcGFnZSRwYWdlX2V4dCBtYW5wYWdlIgogICAgICAgICMgICA6ICcgZWxzZXdoZXJlIGluIHRoaXMgZG9jdW1lbnQnCiAgICAgICAgIyApOwogICAgICAgICMKICAgICAgICBpZiAoICR0eXBlX2JlZyBlcSAnOicgfHwgJG5saW5lID4gMCAmJiAkdHlwZV9lbmRfbGFzdCBlcSAnOicgKSB7CgogICAgICAgICAgICBteSAkaXNfdGVybWluYWxfdGVybmFyeSA9IDA7CiAgICAgICAgICAgIG15ICRsYXN0X2xlYWRpbmdfdHlwZSAgID0gJG5saW5lID4gMCA/ICR0eXBlX2JlZ19sYXN0IDogJzonOwogICAgICAgICAgICBteSAkdGVybWluYWxfdHlwZSAgICAgICA9ICR0eXBlc190b19nb1skaV90ZXJtaW5hbF07CiAgICAgICAgICAgIGlmICggICAkdGVybWluYWxfdHlwZSBuZSAnOycKICAgICAgICAgICAgICAgICYmICRuX2xhc3RfbGluZSA+ICRubGluZQogICAgICAgICAgICAgICAgJiYgJGxldmVsX2VuZCA9PSAkbGV2ICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbXkgJEtiZWdfbmV4dCA9ICRLX3RvX2dvWyRpYmVnX25leHRdOwogICAgICAgICAgICAgICAgJGxldmVsX2VuZCAgICAgPSAkckxMLT5bJEtiZWdfbmV4dF0tPltfTEVWRUxfXTsKICAgICAgICAgICAgICAgICR0ZXJtaW5hbF90eXBlID0gJHJMTC0+WyRLYmVnX25leHRdLT5bX1RZUEVfXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkbGFzdF9sZWFkaW5nX3R5cGUgZXEgJzonCiAgICAgICAgICAgICAgICAmJiAoICAgKCAkdGVybWluYWxfdHlwZSBlcSAnOycgJiYgJGxldmVsX2VuZCA8PSAkbGV2ICkKICAgICAgICAgICAgICAgICAgICB8fCAoICR0ZXJtaW5hbF90eXBlIG5lICc6JyAmJiAkbGV2ZWxfZW5kIDwgJGxldiApICkKICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIHRoZSB0ZXJtaW5hbCB0ZXJtIG11c3Qgbm90IGNvbnRhaW4gYW55IHRlcm5hcnkgdGVybXMsIGFzIGluCiAgICAgICAgICAgICAgICAjIG15ICRFQ0hPID0gKAogICAgICAgICAgICAgICAgIyAgICAgICAkSXNfTVNXaW4zMiA/ICIuXFxlY2hvJCQiCiAgICAgICAgICAgICAgICAjICAgICA6ICRJc19NYWNPUyAgID8gIjplY2hvJCQiCiAgICAgICAgICAgICAgICAjICAgICA6ICggJElzX05ldFdhcmUgPyAiZWNobyQkIiA6ICIuL2VjaG8kJCIgKQogICAgICAgICAgICAgICAgIyApOwogICAgICAgICAgICAgICAgJGlzX3Rlcm1pbmFsX3Rlcm5hcnkgPSAxOwoKICAgICAgICAgICAgICAgIG15ICRyS19uZXh0X3NlcW5vX2J5X0sgPSAkc2VsZi0+W19yS19uZXh0X3NlcW5vX2J5X0tfXTsKICAgICAgICAgICAgICAgIG15ICRLUCAgICAgICAgICAgICAgICAgPSAkS2JlZzsKICAgICAgICAgICAgICAgIG15ICRLbmV4dF9sYXN0ICAgICAgICAgPSAkS1A7CiAgICAgICAgICAgICAgICB3aGlsZSAoIGRlZmluZWQoICRLUCA9ICRyS19uZXh0X3NlcW5vX2J5X0stPlskS1BdICkgKSB7CgogICAgICAgICAgICAgICAgICAgIGlmICggJEtQIDw9ICRLbmV4dF9sYXN0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAjIyBzaG91bGRuJ3QgaGFwcGVuOiAkcktfbmV4dF9zZXFub19ieV9LIGlzIGNvcnJ1cHRlZAogICAgICAgICAgICAgICAgICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KDw8RU9NKTsKS25leHQgc2hvdWxkIG5vdCBpbmNyZWFzZTogS25leHRfbGFzdD0kS25leHRfbGFzdCA+PSBLbmV4dD0kS1AKRU9NCiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRLbmV4dF9sYXN0ID0gJEtQOwoKICAgICAgICAgICAgICAgICAgICBsYXN0IGlmICggJEtQID4gJEtlbmQgKTsKICAgICAgICAgICAgICAgICAgICBteSAkdHlwZV9LUCA9ICRyTEwtPlskS1BdLT5bX1RZUEVfXTsKICAgICAgICAgICAgICAgICAgICBpZiAoICR0eXBlX0tQIGVxICc/JyB8fCAkdHlwZV9LUCBlcSAnOicgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRpc190ZXJtaW5hbF90ZXJuYXJ5ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9ICMjIGVuZCB3aGlsZSAoIGRlZmluZWQoICRLUCA9ICRyS19uZXh0X3NlcW5vX2J5X0suLi4pKQogICAgICAgICAgICB9CiAgICAgICAgICAgICRydmFvX2FyZ3MtPntpc190ZXJtaW5hbF90ZXJuYXJ5fSA9ICRpc190ZXJtaW5hbF90ZXJuYXJ5OwogICAgICAgIH0KCiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBhZGQgYW55IG5ldyBjbG9zaW5nIHNpZGUgY29tbWVudCB0byB0aGUgbGFzdCBsaW5lCiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaWYgKCAkY2xvc2luZ19zaWRlX2NvbW1lbnQgJiYgJG5saW5lID09ICRuX2xhc3RfbGluZSApIHsKICAgICAgICAgICAgbXkgKCAkcnRva2VucywgJHJmaWVsZHMsICRycGF0dGVybnMsICRyZmllbGRfbGVuZ3RocyApID0KICAgICAgICAgICAgICBAeyRybGluZV9hbGlnbm1lbnR9OwoKICAgICAgICAgICAgaWYgKCBAeyRyZmllbGRzfSApIHsKICAgICAgICAgICAgICAgICRyZmllbGRzLT5bLTFdIC49ICIgJGNsb3Npbmdfc2lkZV9jb21tZW50IjsKCiAgICAgICAgICAgICAgIyBOT1RFOiBQYXRjaCBmb3IgY3NjLiBXZSBjYW4ganVzdCB1c2UgMSBmb3IgdGhlIGxlbmd0aCBvZiB0aGUgY3NjCiAgICAgICAgICAgICAgIyBiZWNhdXNlIGl0cyBsZW5ndGggc2hvdWxkIG5vdCBiZSBhIGxpbWl0aW5nIGZhY3RvciBmcm9tIGhlcmUgb24uCiAgICAgICAgICAgICAgICAkcmZpZWxkX2xlbmd0aHMtPlstMV0gKz0gMjsKCiAgICAgICAgICAgICAgICAjIHJlcGFjawogICAgICAgICAgICAgICAgJHJsaW5lX2FsaWdubWVudCA9CiAgICAgICAgICAgICAgICAgIFsgJHJ0b2tlbnMsICRyZmllbGRzLCAkcnBhdHRlcm5zLCAkcmZpZWxkX2xlbmd0aHMgXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIGRlZmluZSBmbGFnICdsaXN0X3NlcW5vJwogICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICMgVGhpcyBmbGFnIGluZGljYXRlcyBpZiB0aGlzIGxpbmUgaXMgY29udGFpbmVkIGluIGEgbXVsdGktbGluZSBsaXN0CiAgICAgICAgaWYgKCAhJGlzX2Jsb2NrX2NvbW1lbnQgKSB7CiAgICAgICAgICAgIG15ICRwYXJlbnRfc2Vxbm8gPSAkcGFyZW50X3NlcW5vX3RvX2dvWyRpYmVnXTsKICAgICAgICAgICAgJHJ2YW9fYXJncy0+e2xpc3Rfc2Vxbm99ID0gJHJpc19saXN0X2J5X3NlcW5vLT57JHBhcmVudF9zZXFub307CiAgICAgICAgfQoKICAgICAgICAjIFRoZSBhbGlnbm1lbnQgdG9rZW5zIGhhdmUgYmVlbiBtYXJrZWQgd2l0aCBuZXN0aW5nX2RlcHRocywgc28gd2UgbmVlZAogICAgICAgICMgdG8gcGFzcyBuZXN0aW5nIGRlcHRocyB0byB0aGUgdmVydGljYWwgYWxpZ25lci4gVGhleSByZW1haW4gaW52YXJpYW50CiAgICAgICAgIyB1bmRlciBhbGwgZm9ybWF0dGluZyBvcGVyYXRpb25zLiAgUHJldmlvdXNseSwgbGV2ZWwgdmFsdWVzIHdlcmUgc2VudAogICAgICAgICMgdG8gdGhlIGFsaWduZXIuICBCdXQgdGhleSBjYW4gYmUgYWx0ZXJlZCBpbiB3ZWxkaW5nIGFuZCBvdGhlcgogICAgICAgICMgb3BlcmF0aW9ucywgYW5kIHRoaXMgY2FuIGxlYWQgdG8gYWxpZ25tZW50IGVycm9ycy4KICAgICAgICBteSAkbmVzdGluZ19kZXB0aF9iZWcgPSAkbmVzdGluZ19kZXB0aF90b19nb1skaWJlZ107CiAgICAgICAgbXkgJG5lc3RpbmdfZGVwdGhfZW5kID0gJG5lc3RpbmdfZGVwdGhfdG9fZ29bJGllbmRdOwoKICAgICAgICAjIEEgcXVpcmsgaW4gdGhlIGRlZmluaXRpb24gb2YgbmVzdGluZyBkZXB0aHMgaXMgdGhhdCB0aGUgY2xvc2luZyB0b2tlbgogICAgICAgICMgaGFzIHRoZSBzYW1lIGRlcHRoIGFzIGludGVybmFsIHRva2Vucy4gIFRoZSB2ZXJ0aWNhbCBhbGlnbmVyIGlzCiAgICAgICAgIyBwcm9ncmFtbWVkIHRvIGV4cGVjdCB0aGVtIHRvIGhhdmUgdGhlIGxvd2VyIGRlcHRoLCBzbyB3ZSBmaXggdGhpcy4KICAgICAgICBpZiAoICRpc19jbG9zaW5nX3R5cGV7ICR0eXBlc190b19nb1skaWJlZ10gfSApIHsgJG5lc3RpbmdfZGVwdGhfYmVnLS0gfQogICAgICAgIGlmICggJGlzX2Nsb3NpbmdfdHlwZXsgJHR5cGVzX3RvX2dvWyRpZW5kXSB9ICkgeyAkbmVzdGluZ19kZXB0aF9lbmQtLSB9CgogICAgICAgICMgQWRqdXN0IG5lc3RpbmcgZGVwdGhzIHRvIGtlZXAgLWxwIGluZGVudGF0aW9uIGZvciBxdyBsaXN0cy4gIFRoaXMgaXMKICAgICAgICAjIHJlcXVpcmVkIGJlY2F1c2UgcXcgbGlzdHMgY29udGFpbmVkIGluIGJyYWNrZXRzIGRvIG5vdCBnZXQgbmVzdGluZwogICAgICAgICMgZGVwdGhzLCBidXQgdGhlIHZlcnRpY2FsIGFsaWduZXIgaXMgd2F0Y2hpbmcgbmVzdGluZyBkZXB0aCBjaGFuZ2VzIHRvCiAgICAgICAgIyBkZWNpZGUgaWYgYSAtbHAgYmxvY2sgaXMgaW50YWN0LiAgV2l0aG91dCB0aGlzIHBhdGNoLCBxdyBsaXN0cwogICAgICAgICMgZW5jbG9zZWQgaW4gYW5nbGUgYnJhY2tldHMgd2lsbCBub3QgZ2V0IHRoZSBjb3JyZWN0IC1scCBpbmRlbnRhdGlvbi4KCiAgICAgICAgIyBMb29raW5nIGZvciBsaW5lIHdpdGggaXNvbGF0ZWQgcXcgLi4uCiAgICAgICAgaWYgKCAgICRyT3B0c19saW5lX3VwX3BhcmVudGhlc2VzCiAgICAgICAgICAgICYmICR0eXBlX2JlZyBlcSAncScKICAgICAgICAgICAgJiYgJGliZWcgPT0gJGllbmQgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgLi4uIHdoaWNoIGlzIHBhcnQgb2YgYSBtdWx0aWxpbmUgcXcKICAgICAgICAgICAgbXkgJEttID0gJHNlbGYtPktfcHJldmlvdXNfbm9uYmxhbmsoJEtiZWcpOwogICAgICAgICAgICBteSAkS3AgPSAkc2VsZi0+S19uZXh0X25vbmJsYW5rKCRLYmVnKTsKICAgICAgICAgICAgaWYgKCAgIGRlZmluZWQoJEttKSAmJiAkckxMLT5bJEttXS0+W19UWVBFX10gZXEgJ3EnCiAgICAgICAgICAgICAgICB8fCBkZWZpbmVkKCRLcCkgJiYgJHJMTC0+WyRLcF0tPltfVFlQRV9dIGVxICdxJyApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRuZXN0aW5nX2RlcHRoX2JlZysrOwogICAgICAgICAgICAgICAgJG5lc3RpbmdfZGVwdGhfZW5kKys7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBkZWZpbmUgZmxhZyAnZm9yZ2V0X3NpZGVfY29tbWVudCcKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAjIFRoaXMgZmxhZyB0ZWxscyB0aGUgdmVydGljYWwgYWxpZ25lciB0byByZXNldCB0aGUgc2lkZSBjb21tZW50CiAgICAgICAgIyBsb2NhdGlvbiBpZiB3ZSBhcmUgZW50ZXJpbmcgYSBuZXcgYmxvY2sgZnJvbSBsZXZlbCAwLiAgVGhpcyBpcwogICAgICAgICMgaW50ZW5kZWQgdG8ga2VlcCBzaWRlIGNvbW1lbnRzIGZyb20gZHJpZnRpbmcgdG9vIGZhciB0byB0aGUgcmlnaHQuCiAgICAgICAgaWYgKCAgICRibG9ja190eXBlX3RvX2dvWyRpX3Rlcm1pbmFsXQogICAgICAgICAgICAmJiAkbmVzdGluZ19kZXB0aF9lbmQgPiAkbmVzdGluZ19kZXB0aF9iZWcgKQogICAgICAgIHsKICAgICAgICAgICAgJHJ2YW9fYXJncy0+e2ZvcmdldF9zaWRlX2NvbW1lbnR9ID0KICAgICAgICAgICAgICAhJHNlbGYtPltfcmFkanVzdGVkX2xldmVsc19dLT5bJEtiZWddOwogICAgICAgIH0KCiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgU3RvcmUgdGhlIHJlbWFpbmluZyBub24tZmxhZyB2YWx1ZXMKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgJHJ2YW9fYXJncy0+e2NpX2xldmVsfSAgICAgICAgPSAkY2lfbGV2ZWxzX3RvX2dvWyRpYmVnXTsKICAgICAgICAkcnZhb19hcmdzLT57aW5kZW50YXRpb259ICAgICA9ICRpbmRlbnRhdGlvbjsKICAgICAgICAkcnZhb19hcmdzLT57bGV2ZWxfZW5kfSAgICAgICA9ICRuZXN0aW5nX2RlcHRoX2VuZDsKICAgICAgICAkcnZhb19hcmdzLT57bGV2ZWx9ICAgICAgICAgICA9ICRuZXN0aW5nX2RlcHRoX2JlZzsKICAgICAgICAkcnZhb19hcmdzLT57cmxpbmVfYWxpZ25tZW50fSA9ICRybGluZV9hbGlnbm1lbnQ7CiAgICAgICAgJHJ2YW9fYXJncy0+e21heGltdW1fbGluZV9sZW5ndGh9ID0KICAgICAgICAgICRtYXhpbXVtX2xpbmVfbGVuZ3RoX2F0X2xldmVsWyAkbGV2ZWxzX3RvX2dvWyRpYmVnXSBdOwoKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBzZW5kIHRoaXMgbGluZSB0byB0aGUgdmVydGljYWwgYWxpZ25lcgogICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBteSAkdmFvID0gJHNlbGYtPltfdmVydGljYWxfYWxpZ25lcl9vYmplY3RfXTsKICAgICAgICAkdmFvLT52YWxpZ25faW5wdXQoJHJ2YW9fYXJncyk7CgogICAgICAgICRkb19ub3RfcGFkID0gMDsKCiAgICB9ICMjIGVuZCBvZiBsb29wIHRvIG91dHB1dCBlYWNoIGxpbmUKCiAgICAjIFNldCBmbGFnIGluZGljYXRpbmcgaWYgdGhlIGxhc3QgbGluZSBlbmRzIGluIGFuIG9wZW5pbmcKICAgICMgdG9rZW4gYW5kIGlzIHZlcnkgc2hvcnQsIHNvIHRoYXQgYSBibGFuayBsaW5lIGlzIG5vdAogICAgIyBuZWVkZWQgaWYgdGhlIHN1YnNlcXVlbnQgbGluZSBpcyBhIGNvbW1lbnQuCiAgICAjIEV4YW1wbGVzIG9mIHdoYXQgd2UgYXJlIGxvb2tpbmcgZm9yOgogICAgIyAgIHsKICAgICMgICAmJiAoCiAgICAjICAgQkVHSU4gewogICAgIyAgIGRlZmF1bHQgewogICAgIyAgIHN1YiB7CiAgICAkc2VsZi0+W19sYXN0X291dHB1dF9zaG9ydF9vcGVuaW5nX3Rva2VuX10KCiAgICAgICMgbGluZSBlbmRzIGluIG9wZW5pbmcgdG9rZW4KICAgICAgIyAgICAgICAgICAgICAgL15bXHtcKFxbTF0kLwogICAgICA9ICRpc19vcGVuaW5nX3R5cGV7JHR5cGVfZW5kfQoKICAgICAgIyBhbmQgZWl0aGVyCiAgICAgICYmICgKICAgICAgICAjIGxpbmUgaGFzIGVpdGhlciBzaW5nbGUgb3BlbmluZyB0b2tlbgogICAgICAgICRpZW5kID09ICRpYmVnCgogICAgICAgICMgb3IgaXMgYSBzaW5nbGUgdG9rZW4gZm9sbG93ZWQgYnkgb3BlbmluZyB0b2tlbi4KICAgICAgICAjIE5vdGUgdGhhdCBzdWIgaWRlbnRpZmllcnMgaGF2ZSBibGFua3MgbGlrZSAnc3ViIGRvaXQnCiAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0b2tlbl9iZWcgIX4gL1xzKy8KICAgICAgICB8fCAoICRpZW5kIC0gJGliZWcgPD0gMiAmJiBpbmRleCggJHRva2VuX2JlZywgU1BBQ0UgKSA8IDAgKQogICAgICApCgogICAgICAjIGFuZCBsaW1pdCB0b3RhbCB0byAxMCBjaGFyYWN0ZXIgd2lkdGhzCiAgICAgICYmIHRva2VuX3NlcXVlbmNlX2xlbmd0aCggJGliZWcsICRpZW5kICkgPD0gMTA7CgogICAgIyBSZW1lbWJlciBpbmRlbnRhdGlvbiBvZiBsaW5lcyBjb250YWluaW5nIG9wZW5pbmcgY29udGFpbmVycyBmb3IKICAgICMgbGF0ZXIgdXNlIGJ5IHN1YiBnZXRfZmluYWxfaW5kZW50YXRpb24KICAgICRzZWxmLT5zYXZlX29wZW5pbmdfaW5kZW50YXRpb24oJHJpbmRlbnRhdGlvbl9saXN0KQogICAgICBpZiAoICR0aGlzX2JhdGNoLT5bX3J1bm1hdGNoZWRfb3BlbmluZ19pbmRleGVzX10KICAgICAgICB8fCAkdHlwZXNfdG9fZ29bJG1heF9pbmRleF90b19nb10gZXEgJ3EnICk7CgogICAgIyBPdXRwdXQgYW55IG5ldyAtY3NjdyBibG9jayBjb21tZW50CiAgICBpZiAoJGNzY3dfYmxvY2tfY29tbWVudCkgewogICAgICAgICRzZWxmLT5mbHVzaF92ZXJ0aWNhbF9hbGlnbmVyKCk7CiAgICAgICAgbXkgJGZpbGVfd3JpdGVyX29iamVjdCA9ICRzZWxmLT5bX2ZpbGVfd3JpdGVyX29iamVjdF9dOwogICAgICAgICRmaWxlX3dyaXRlcl9vYmplY3QtPndyaXRlX2NvZGVfbGluZSggJGNzY3dfYmxvY2tfY29tbWVudCAuICJcbiIgKTsKICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGNvbnZleV9iYXRjaF90b192ZXJ0aWNhbF9hbGlnbmVyCgpzdWIgY2hlY2tfYmF0Y2hfc3VtbWVkX2xlbmd0aHMgewoKICAgIG15ICggJHNlbGYsICgkbXNnKSApID0gQF87CgogICAgIyBEZWJ1ZyByb3V0aW5lIGZvciBzdW1tZWQgbGVuZ3RocwogICAgIyAgICRtc2cgPSBvcHRpb25hbCBkZWJ1ZyBtZXNzYWdlCgogICAgJG1zZyA9IEVNUFRZX1NUUklORyB1bmxlc3MgZGVmaW5lZCgkbXNnKTsKICAgIG15ICRyTEwgPSAkc2VsZi0+W19yTExfXTsKCiAgICAjIFZlcmlmeSB0aGF0IHRoZSBzdW1tZWQgbGVuZ3RocyBhcmUgY29ycmVjdC4gV2Ugd2FudCB0byBiZSBzdXJlIHRoYXQKICAgICMgZXJyb3JzIGhhdmUgbm90IGJlZW4gaW50cm9kdWNlZCBieSBwcm9ncmFtbWluZyBjaGFuZ2VzLiAgU3VtbWVkIGxlbmd0aHMKICAgICMgYXJlIGRlZmluZWQgaW4gc3ViIHN0b3JlX3Rva2VuLiAgT3BlcmF0aW9ucyBsaWtlIHBhZGRpbmcgYW5kIHVubWFza2luZwogICAgIyBzZW1pY29sb25zIGNhbiBjaGFuZ2UgdG9rZW4gbGVuZ3RocywgYnV0IHRob3NlIG9wZXJhdGlvbnMgYXJlIGV4cGVjdGVkIHRvCiAgICAjIHVwZGF0ZSB0aGUgc3VtbWVkIGxlbmd0aHMgd2hlbiB0aGV5IG1ha2UgY2hhbmdlcy4gIFNvIHRoZSBzdW1tZWQgbGVuZ3RocwogICAgIyBzaG91bGQgYWx3YXlzIGJlIGNvcnJlY3QuCiAgICBmb3JlYWNoIG15ICRpICggMCAuLiAkbWF4X2luZGV4X3RvX2dvICkgewogICAgICAgIG15ICRsZW5fYnlfc3VtID0KICAgICAgICAgICRzdW1tZWRfbGVuZ3Roc190b19nb1sgJGkgKyAxIF0gLSAkc3VtbWVkX2xlbmd0aHNfdG9fZ29bJGldOwogICAgICAgIG15ICRsZW5fdG9rX2kgPSAkdG9rZW5fbGVuZ3Roc190b19nb1skaV07CiAgICAgICAgbXkgJEtLICAgICAgICA9ICRLX3RvX2dvWyRpXTsKICAgICAgICBteSAkbGVuX3Rva19LOwoKICAgICAgICAjIEZvciAtLWluZGVudC1vbmx5LCB0aGVyZSBpcyBub3QgYWx3YXlzIGFncmVlbWVudCBiZXR3ZWVuCiAgICAgICAgIyB0b2tlbiBsZW5ndGhzIGluIF9yTExfIGFuZCB0b2tlbl9sZW5ndGhzX3RvX2dvLCBzbyBza2lwIHRoYXQgY2hlY2suCiAgICAgICAgaWYgKCBkZWZpbmVkKCRLSykgJiYgISRyT3B0c19pbmRlbnRfb25seSApIHsKICAgICAgICAgICAgJGxlbl90b2tfSyA9ICRyTEwtPlskS0tdLT5bX1RPS0VOX0xFTkdUSF9dOwogICAgICAgIH0KICAgICAgICBpZiAoICRsZW5fYnlfc3VtICE9ICRsZW5fdG9rX2kKICAgICAgICAgICAgfHwgZGVmaW5lZCgkbGVuX3Rva19LKSAmJiAkbGVuX2J5X3N1bSAhPSAkbGVuX3Rva19LICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICRsbm8gPSBkZWZpbmVkKCRLSykgPyAkckxMLT5bJEtLXS0+W19MSU5FX0lOREVYX10gKyAxIDogInVuZGVmIjsKICAgICAgICAgICAgJEtLID0gJ3VuZGVmJyB1bmxlc3MgZGVmaW5lZCgkS0spOwogICAgICAgICAgICBteSAkdG9rICA9ICR0b2tlbnNfdG9fZ29bJGldOwogICAgICAgICAgICBteSAkdHlwZSA9ICR0eXBlc190b19nb1skaV07CiAgICAgICAgICAgIEZhdWx0KDw8RU9NKTsKU3VtbWVkIGxlbmd0aHMgYXJlIGFwcGVhciB0byBiZSBpbmNvcnJlY3QuICAkbXNnCmxlbmd0aHMgZGlzYWdyZWU6IHRva2VuIGxlbmd0aCBieSBzdW09JGxlbl9ieV9zdW0gYnV0IHRva2VuX2xlbmd0aF90b19nb1skaV0gPSAkbGVuX3Rva19pIGFuZCByTEwtPlskS0tdLT5bX1RPS0VOX0xFTkdUSF9dPSRsZW5fdG9rX0sKbmVhciBsaW5lICRsbm8gc3RhcnRpbmcgd2l0aCAnJHRva2Vuc190b19nb1swXS4uJyBhdCB0b2tlbiBpPSRpIEs9JEtLIHRva2VuX3R5cGU9JyR0eXBlJyB0b2tlbj0nJHRvaycKRU9NCiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgY2hlY2tfYmF0Y2hfc3VtbWVkX2xlbmd0aHMKCnsgICAgIyMgYmVnaW4gY2xvc3VyZSBzZXRfdmVydGljYWxfYWxpZ25tZW50X21hcmtlcnMKICAgIG15ICVpc192ZXJ0aWNhbF9hbGlnbm1lbnRfdHlwZTsKICAgIG15ICVpc19ub3RfdmVydGljYWxfYWxpZ25tZW50X3Rva2VuOwogICAgbXkgJWlzX3ZlcnRpY2FsX2FsaWdubWVudF9rZXl3b3JkOwogICAgbXkgJWlzX3Rlcm1pbmFsX2FsaWdubWVudF90eXBlOwogICAgbXkgJWlzX2xvd19sZXZlbF9hbGlnbm1lbnRfdG9rZW47CgogICAgQkVHSU4gewoKICAgICAgICBteSBAcTsKCiAgICAgICAgIyBSZXBsYWNlZCA9fiBhbmQgLy8gaW4gdGhlIGxpc3QuICAvLyBoYWQgYmVlbiByZW1vdmVkIGluIFJUIDExOTU4OAogICAgICAgIEBxID0gcXcjCiAgICAgICAgICA9ICoqPSArPSAqPSAmPSA8PD0gJiY9IC09IC89IHw9ID4+PSB8fD0gLy89IC49ICU9IF49IHg9CiAgICAgICAgICB7ID8gOiA9PiAmJiB8fCB+fiAhfn4gPX4gIX4gLy8gPD0+IC0+CiAgICAgICAgICAjOwogICAgICAgIEBpc192ZXJ0aWNhbF9hbGlnbm1lbnRfdHlwZXtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICAgICAjIFRoZXNlICd0b2tlbnMnIGFyZSBub3QgYWxpZ25lZC4gV2UgbmVlZCB0aGlzIHRvIHJlbW92ZSBbCiAgICAgICAgIyBmcm9tIHRoZSBhYm92ZSBsaXN0IGJlY2F1c2UgaXQgaGFzIHR5cGUgPSd7JwogICAgICAgIEBxID0gcXcoIFsgKTsKICAgICAgICBAaXNfbm90X3ZlcnRpY2FsX2FsaWdubWVudF90b2tlbntAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICAgICAjIHRoZXNlIGFyZSB0aGUgb25seSB0eXBlcyBhbGlnbmVkIGF0IGEgbGluZSBlbmQKICAgICAgICBAcSA9IHF3KCAmJiB8fCA9PiApOwogICAgICAgIEBpc190ZXJtaW5hbF9hbGlnbm1lbnRfdHlwZXtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICAgICAjIHRoZXNlIHRva2VucyBvbmx5IGFsaWduIGF0IGxpbmUgbGV2ZWwKICAgICAgICBAcSA9ICggJ3snLCAnKCcgKTsKICAgICAgICBAaXNfbG93X2xldmVsX2FsaWdubWVudF90b2tlbntAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICAgICAjIGVxIGFuZCBuZSB3ZXJlIHJlbW92ZWQgZnJvbSB0aGlzIGxpc3QgdG8gaW1wcm92ZSBhbGlnbm1lbnQgY2hhbmNlcwogICAgICAgIEBxID0gcXcoIGlmIHVubGVzcyBhbmQgb3IgZXJyIGZvciBmb3JlYWNoIHdoaWxlIHVudGlsICk7CiAgICAgICAgQGlzX3ZlcnRpY2FsX2FsaWdubWVudF9rZXl3b3Jke0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CiAgICB9ICMjIGVuZCBCRUdJTgoKICAgICMgVGhlc2UgYXJlIHRoZSBtYWluIHJldHVybiB2YXJpYWJsZXMuIFRoZXkgYXJlIGNsb3N1cmUgdmFyaWFibGVzCiAgICAjIGZvciBlZmZpY2llbnQgYWNjZXNzIGJ5IHN1YiAuLl90b2tlbl9sb29wIG5lZWRzLgogICAgbXkgJHJhbGlnbm1lbnRfdHlwZV90b19nbzsKICAgIG15ICRyYWxpZ25tZW50X2NvdW50czsKCiAgICBzdWIgc2V0X3ZlcnRpY2FsX2FsaWdubWVudF9tYXJrZXJzIHsKCiAgICAgICAgbXkgKCRzZWxmKSA9IEBfOwoKICAgICAgICAjIFRoaXMgcm91dGluZSBsb29rcyBhdCBhbGwgb3V0cHV0IGxpbmVzIG9mIGEgYmF0Y2ggZm9yIGNlcnRhaW4gdG9rZW5zCiAgICAgICAgIyB3aGljaCBjYW4gc2VydmUgYXMgdmVydGljYWwgYWxpZ25tZW50IG1hcmtlcnMgKHN1Y2ggYXMgYW4gJz0nKS4KCiAgICAgICAgIyAkcmlfZmlyc3QgPSByZWYgdG8gbGlzdCBvZiBzdGFydGluZyBsaW5lIGluZGV4ZXMgaW4gX3RvX2dvIGFycmF5cwogICAgICAgICMgJHJpX2xhc3QgID0gcmVmIHRvIGxpc3Qgb2YgZW5kaW5nIGxpbmUgaW5kZXhlcyBpbiBfdG9fZ28gYXJyYXlzCiAgICAgICAgbXkgJHRoaXNfYmF0Y2ggPSAkc2VsZi0+W190aGlzX2JhdGNoX107CiAgICAgICAgbXkgJHJpX2ZpcnN0ICAgPSAkdGhpc19iYXRjaC0+W19yaV9maXJzdF9dOwogICAgICAgIG15ICRyaV9sYXN0ICAgID0gJHRoaXNfYmF0Y2gtPltfcmlfbGFzdF9dOwoKICAgICAgICAjIE1ldGhvZDogV2UgbG9vayBhdCBlYWNoIHRva2VuICRpIGluIHRoaXMgb3V0cHV0IGJhdGNoIGFuZCBzZXQKICAgICAgICAjICRyYWxpZ25tZW50X3R5cGVfdG9fZ28tPlskaV0gZXF1YWwgdG8gdGhvc2UgdG9rZW5zIGF0IHdoaWNoIHdlIHdvdWxkCiAgICAgICAgIyBhY2NlcHQgdmVydGljYWwgYWxpZ25tZW50LgoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgSW5pdGlhbGl6ZSByZXR1cm4gdmFyaWFibGVzCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAkcmFsaWdubWVudF90eXBlX3RvX2dvID0gW107CiAgICAgICAgJHJhbGlnbm1lbnRfY291bnRzICAgICA9IFtdOwoKICAgICAgICAjIE5PVEU6IGNsb3Npbmcgc2lkZSBjb21tZW50cyBjYW4gaW5zZXJ0IHVwIHRvIDIgYWRkaXRpb25hbCB0b2tlbnMKICAgICAgICAjIGJleW9uZCB0aGUgb3JpZ2luYWwgJG1heF9pbmRleF90b19nbywgc28gd2UgbmVlZCB0byBjaGVjayByaV9sYXN0IGZvcgogICAgICAgICMgdGhlIGxhc3QgaW5kZXguCiAgICAgICAgbXkgJG1heF9saW5lID0gQHskcmlfZmlyc3R9IC0gMTsKICAgICAgICBteSAkbWF4X2kgICAgPSAkcmlfbGFzdC0+WyRtYXhfbGluZV07CiAgICAgICAgaWYgKCAkbWF4X2kgPCAkbWF4X2luZGV4X3RvX2dvICkgeyAkbWF4X2kgPSAkbWF4X2luZGV4X3RvX2dvIH0KCiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgU2hvcnRjdXQ6CiAgICAgICAgIyAgICAtIG5vIGFsaWdubWVudHMgaWYgdGhlcmUgaXMgb25seSAxIHRva2VuLgogICAgICAgICMgICAgLSBhbmQgbm90aGluZyB0byBkbyBpZiB3ZSBhcmVuJ3QgYWxsb3dlZCB0byBjaGFuZ2Ugd2hpdGVzcGFjZS4KICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaWYgKCAkbWF4X2kgPD0gMCB8fCAhJHJPcHRzX2FkZF93aGl0ZXNwYWNlICkgewogICAgICAgICAgICBnb3RvIFJFVFVSTjsKICAgICAgICB9CgogICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgRmlyc3QgaGFuZGxlIGFueSBzaWRlIGNvbW1lbnQuCiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgbXkgJGlfdGVybWluYWwgPSAkbWF4X2k7CiAgICAgICAgaWYgKCAkdHlwZXNfdG9fZ29bJG1heF9pXSBlcSAnIycgKSB7CgogICAgICAgICAgICAjIFdlIGtub3cgJG1heF9pID4gMCBpZiB3ZSBnZXQgaGVyZS4KICAgICAgICAgICAgJGlfdGVybWluYWwgLT0gMTsKICAgICAgICAgICAgaWYgKCAkaV90ZXJtaW5hbCA+IDAgJiYgJHR5cGVzX3RvX2dvWyRpX3Rlcm1pbmFsXSBlcSAnYicgKSB7CiAgICAgICAgICAgICAgICAkaV90ZXJtaW5hbCAtPSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkdG9rZW4gPSAkdG9rZW5zX3RvX2dvWyRtYXhfaV07CiAgICAgICAgICAgIG15ICRLSyAgICA9ICRLX3RvX2dvWyRtYXhfaV07CgogICAgICAgICAgICBteSAkaXNfY2xvc2luZ19ibG9jayA9ICR0eXBlc190b19nb1skaV90ZXJtaW5hbF0gZXEgJ30nCiAgICAgICAgICAgICAgJiYgJHRva2Vuc190b19nb1skaV90ZXJtaW5hbF0gZXEgJ30nOwoKICAgICAgICAgICAgIyBQYXRjaCB0byBjaGVjayBmb3IgYXN1YiBjbG9zaW5nIHNpZGUgY29tbWVudHMgKGMzODApCiAgICAgICAgICAgICMgVGhlc2UgZm9sbG93ICd9OycgcmF0aGVyIHRoYW4gYmFyZSAnfScKICAgICAgICAgICAgJGlzX2Nsb3NpbmdfYmxvY2sgfHw9CiAgICAgICAgICAgICAgICAgJHR5cGVzX3RvX2dvWyRpX3Rlcm1pbmFsXSBlcSAnOycKICAgICAgICAgICAgICAmJiAkaV90ZXJtaW5hbCA9PSAkaW5leHRfdG9fZ29bMF0KICAgICAgICAgICAgICAmJiAkdHlwZXNfdG9fZ29bMF0gZXEgJ30nCiAgICAgICAgICAgICAgJiYgJHRva2Vuc190b19nb1swXSBlcSAnfSc7CgogICAgICAgICAgICAjIERvIG5vdCBhbGlnbiB2YXJpb3VzIHNwZWNpYWwgc2lkZSBjb21tZW50cwogICAgICAgICAgICBteSAkZG9fbm90X2FsaWduID0gKAoKICAgICAgICAgICAgICAgICMgaXQgaXMgYW55IHNwZWNpYWxseSBtYXJrZWQgc2lkZSBjb21tZW50CiAgICAgICAgICAgICAgICAoIGRlZmluZWQoJEtLKSAmJiAkc2VsZi0+W19yc3BlY2lhbF9zaWRlX2NvbW1lbnRfdHlwZV9dLT57JEtLfSApCgogICAgICAgICAgICAgICAgICAjIG9yIGl0IGlzIGEgc3RhdGljIHNpZGUgY29tbWVudAogICAgICAgICAgICAgICAgICB8fCAoICRyT3B0cy0+eydzdGF0aWMtc2lkZS1jb21tZW50cyd9CiAgICAgICAgICAgICAgICAgICAgJiYgJHRva2VuID1+IC8kc3RhdGljX3NpZGVfY29tbWVudF9wYXR0ZXJuLyApCgogICAgICAgICAgICAgICAgICAjIG9yIGEgY2xvc2luZyBzaWRlIGNvbW1lbnQKICAgICAgICAgICAgICAgICAgfHwgKCAkaXNfY2xvc2luZ19ibG9jawogICAgICAgICAgICAgICAgICAgICYmICR0b2tlbiA9fiAvJGNsb3Npbmdfc2lkZV9jb21tZW50X3ByZWZpeF9wYXR0ZXJuLyApCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIC0gRm9yIHRoZSBzcGVjaWZpYyBjb21iaW5hdGlvbiAtdmMgLW52c2MsIHdlIHB1dCBhbGwgc2lkZSBjb21tZW50cwogICAgICAgICAgICAjICAgYXQgZml4ZWQgbG9jYXRpb25zLiBOb3RlIHRoYXQgd2Ugd2lsbCBsb3NlIGhhbmdpbmcgc2lkZSBjb21tZW50CiAgICAgICAgICAgICMgICBhbGlnbm1lbnRzLiBPdGhlcndpc2UsIGhzYydzIGNhbiBtb3ZlIHRvIHN0cmFuZ2UgbG9jYXRpb25zLgogICAgICAgICAgICAjIC0gRm9yIC1udmMgLW52c2Mgd2UgbWFrZSBhbGwgc2lkZSBjb21tZW50cyB2ZXJ0aWNhbCBhbGlnbm1lbnRzCiAgICAgICAgICAgICMgICBiZWNhdXNlIHRoZSB2ZXJ0aWNhbCBhbGlnbmVyIHdpbGwgY2hlY2sgZm9yIC1udnNjIGFuZCBiZSBhYmxlCiAgICAgICAgICAgICMgICB0byByZWR1Y2UgdGhlIGZpbmFsIHBhZGRpbmcgdG8gdGhlIHNpZGUgY29tbWVudHMgZm9yIGxvbmcgbGluZXMuCiAgICAgICAgICAgICMgICBhbmQga2VlcCBoYW5naW5nIHNpZGUgY29tbWVudHMgYWxpZ25lZC4KICAgICAgICAgICAgaWYgKCAgICEkZG9fbm90X2FsaWduCiAgICAgICAgICAgICAgICAmJiAhJHJPcHRzX3ZhbGlnbl9zaWRlX2NvbW1lbnRzCiAgICAgICAgICAgICAgICAmJiAkck9wdHNfdmFsaWduX2NvZGUgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgJGRvX25vdF9hbGlnbiA9IDE7CiAgICAgICAgICAgICAgICBteSAkaXBhZCA9ICRtYXhfaSAtIDE7CiAgICAgICAgICAgICAgICBpZiAoICR0eXBlc190b19nb1skaXBhZF0gZXEgJ2InICkgewogICAgICAgICAgICAgICAgICAgIG15ICRwYWRfc3BhY2VzID0KICAgICAgICAgICAgICAgICAgICAgICRyT3B0cy0+eydtaW5pbXVtLXNwYWNlLXRvLWNvbW1lbnQnfSAtCiAgICAgICAgICAgICAgICAgICAgICAkdG9rZW5fbGVuZ3Roc190b19nb1skaXBhZF07CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPnBhZF90b2tlbiggJGlwYWQsICRwYWRfc3BhY2VzICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggISRkb19ub3RfYWxpZ24gKSB7CiAgICAgICAgICAgICAgICAkcmFsaWdubWVudF90eXBlX3RvX2dvLT5bJG1heF9pXSA9ICcjJzsKICAgICAgICAgICAgICAgICRyYWxpZ25tZW50X2NvdW50cy0+WyRtYXhfbGluZV0rKzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBOb3RoaW5nIG1vcmUgdG8gZG8gb24gdGhpcyBsaW5lIGlmIC1udmMgaXMgc2V0CiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaWYgKCAhJHJPcHRzX3ZhbGlnbl9jb2RlICkgewogICAgICAgICAgICBnb3RvIFJFVFVSTjsKICAgICAgICB9CgogICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgTG9vcCBvdmVyIGVhY2ggbGluZSBvZiB0aGlzIGJhdGNoIC4uLgogICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICBmb3JlYWNoIG15ICRubGluZSAoIDAgLi4gJG1heF9saW5lICkgewoKICAgICAgICAgICAgbXkgJGliZWcgPSAkcmlfZmlyc3QtPlskbmxpbmVdOwogICAgICAgICAgICBteSAkaWVuZCA9ICRyaV9sYXN0LT5bJG5saW5lXTsKCiAgICAgICAgICAgIG5leHQgaWYgKCAkaWVuZCA8PSAkaWJlZyApOwoKICAgICAgICAgICAgIyBiYWNrIHVwIGJlZm9yZSBhbnkgc2lkZSBjb21tZW50CiAgICAgICAgICAgIGlmICggJGllbmQgPiAkaV90ZXJtaW5hbCApIHsgJGllbmQgPSAkaV90ZXJtaW5hbCB9CgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIExvb3Agb3ZlciBhbGwgdG9rZW5zIG9uIHRoaXMgbGluZQogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAkc2VsZi0+c2V0X3ZlcnRpY2FsX2FsaWdubWVudF9tYXJrZXJzX3Rva2VuX2xvb3AoICRubGluZSwgJGliZWcsCiAgICAgICAgICAgICAgICAkaWVuZCApOwogICAgICAgIH0KCiAgICAgIFJFVFVSTjoKICAgICAgICByZXR1cm4gKCAkcmFsaWdubWVudF90eXBlX3RvX2dvLCAkcmFsaWdubWVudF9jb3VudHMgKTsKICAgIH0gIyMgZW5kIHN1YiBzZXRfdmVydGljYWxfYWxpZ25tZW50X21hcmtlcnMKCiAgICBteSAlaXNfZG90X3F1ZXN0aW9uX2NvbG9uOwoKICAgIEJFR0lOIHsKICAgICAgICBteSBAcSA9IHF3KCAuID8gOiApOwogICAgICAgIEBpc19kb3RfcXVlc3Rpb25fY29sb257QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKICAgIH0KCiAgICBzdWIgc2V0X3ZlcnRpY2FsX2FsaWdubWVudF9tYXJrZXJzX3Rva2VuX2xvb3AgewogICAgICAgIG15ICggJHNlbGYsICRubGluZSwgJGliZWcsICRpZW5kICkgPSBAXzsKCiAgICAgICAgIyBJbnB1dCBwYXJhbWV0ZXJzOgogICAgICAgICMgICAkbmxpbmUgPSBpbmRleCBvZiB0aGlzIGxpbmUgaW4gdGhlIGN1cnJlbnQgYmF0Y2gKICAgICAgICAjICAgJGliZWcsICRpZW5kID0gaW5kZXggcmFuZ2Ugb2YgdG9rZW5zIHRvIGNoZWNrIGluIHRoZSBfdG9fZ28gYXJyYXlzCgogICAgICAgICMgVGFzazoKICAgICAgICAjIFNldCB2ZXJ0aWNhbCBhbGlnbm1lbnQgbWFya2VycyBmb3IgdGhlIHRva2VucyBvbiBvbmUgbGluZQogICAgICAgICMgb2YgdGhlIGN1cnJlbnQgb3V0cHV0IGJhdGNoLiBUaGlzIGlzIGRvbmUgYnkgdXBkYXRpbmcgdGhlCiAgICAgICAgIyB0aHJlZSBjbG9zdXJlIHZhcmlhYmxlcyBuZWVkZWQgYnkgc3ViICdtYWtlX2FsaWdubWVudF9wYXR0ZXJucyc6CiAgICAgICAgIyAgJHJhbGlnbm1lbnRfdHlwZV90b19nbyAtIGFsaWdubWVudCB0eXBlIG9mIHRva2VucywgbGlrZSAnPScsIGlmIGFueQogICAgICAgICMgICRyYWxpZ25tZW50X2NvdW50cyAtIG51bWJlciBvZiBhbGlnbm1lbnQgdG9rZW5zIGluIHRoZSBsaW5lCgogICAgICAgIG15ICRsZXZlbF9iZWcgPSAkbGV2ZWxzX3RvX2dvWyRpYmVnXTsKICAgICAgICBteSAkdG9rZW5fYmVnID0gJHRva2Vuc190b19nb1skaWJlZ107CiAgICAgICAgbXkgJHR5cGVfYmVnICA9ICR0eXBlc190b19nb1skaWJlZ107CgogICAgICAgIG15ICRsYXN0X3ZlcnRpY2FsX2FsaWdubWVudF9CRUZPUkVfaW5kZXggPSAtMTsKICAgICAgICBteSAkdmVydF9sYXN0X25vbmJsYW5rX3R5cGUgICAgICAgICAgICAgID0gJHR5cGVfYmVnOwoKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIEluaXRpYWxpemF0aW9uIGNvZGUgbWVyZ2VkIGZyb20gJ3N1YiBkZWxldGVfbmVlZGxlc3NfYWxpZ25tZW50cycKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBteSAkaV9nb29kX3BhcmVuICA9IC0xOwogICAgICAgIG15ICRpX2Vsc2lmX2Nsb3NlID0gJGliZWcgLSAxOwogICAgICAgIG15ICRpX2Vsc2lmX29wZW4gID0gJGllbmQgKyAxOwogICAgICAgIG15IEBpbWF0Y2hfbGlzdDsKICAgICAgICBpZiAoICR0eXBlX2JlZyBlcSAnaycgKSB7CgogICAgICAgICAgICAjIEluaXRpYWxpemF0aW9uIGZvciBwYXJlbiBwYXRjaDogbWFyayBhIGxvY2F0aW9uIG9mIGEgcGFyZW4gd2UKICAgICAgICAgICAgIyBzaG91bGQga2VlcCwgc3VjaCBhcyBvbmUgZm9sbG93aW5nIHNvbWV0aGluZyBsaWtlIGEgbGVhZGluZwogICAgICAgICAgICAjICdpZicsICdlbHNpZicsCiAgICAgICAgICAgICRpX2dvb2RfcGFyZW4gPSAkaWJlZyArIDE7CiAgICAgICAgICAgIGlmICggJHR5cGVzX3RvX2dvWyRpX2dvb2RfcGFyZW5dIGVxICdiJyApIHsKICAgICAgICAgICAgICAgICRpX2dvb2RfcGFyZW4rKzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBJbml0aWFsaXphdGlvbiBmb3IgJ2Vsc2lmJyBwYXRjaDogcmVtZW1iZXIgdGhlIHBhcmVuIHJhbmdlIG9mCiAgICAgICAgICAgICMgYW4gZWxzaWYsIGFuZCBkbyBub3QgbWFrZSBhbGlnbm1lbnRzIHdpdGhpbiB0aGVtIGJlY2F1c2UgdGhpcwogICAgICAgICAgICAjIGNhbiBjYXVzZSBsb3NzIG9mIHBhZGRpbmcgYW5kIG92ZXJhbGwgYnJhY2UgYWxpZ25tZW50IGluIHRoZQogICAgICAgICAgICAjIHZlcnRpY2FsIGFsaWduZXIuCiAgICAgICAgICAgIGlmICggICAkdG9rZW5fYmVnIGVxICdlbHNpZicKICAgICAgICAgICAgICAgICYmICRpX2dvb2RfcGFyZW4gPCAkaWVuZAogICAgICAgICAgICAgICAgJiYgJHRva2Vuc190b19nb1skaV9nb29kX3BhcmVuXSBlcSAnKCcgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkaV9lbHNpZl9vcGVuICA9ICRpX2dvb2RfcGFyZW47CiAgICAgICAgICAgICAgICAkaV9lbHNpZl9jbG9zZSA9ICRtYXRlX2luZGV4X3RvX2dvWyRpX2dvb2RfcGFyZW5dOwogICAgICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkaV9lbHNpZl9jbG9zZSkgKSB7ICRpX2Vsc2lmX2Nsb3NlID0gLTEgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBMb29wIG92ZXIgZWFjaCB0b2tlbiBpbiB0aGlzIG91dHB1dCBsaW5lIC4uLgogICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBteSAkdHlwZTsKICAgICAgICBmb3JlYWNoIG15ICRpICggJGliZWcgKyAxIC4uICRpZW5kICkgewoKICAgICAgICAgICAgbmV4dCBpZiAoICggJHR5cGUgPSAkdHlwZXNfdG9fZ29bJGldICkgZXEgJ2InICk7CgogICAgICAgICAgICBteSAkdG9rZW4gPSAkdG9rZW5zX3RvX2dvWyRpXTsKICAgICAgICAgICAgbXkgJGFsaWdubWVudF90eXBlOwoKICAgICAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgQ2hlY2sgZm9yICdwYXJlbiBwYXRjaCcgOiBSZW1vdmUgZXhjZXNzIHBhcmVucwogICAgICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgICAgICMgRXhjZXNzIGFsaWdubWVudCBvZiBwYXJlbnMgY2FuIHByZXZlbnQgb3RoZXIgZ29vZCBhbGlnbm1lbnRzLgogICAgICAgICAgICAjIEZvciBleGFtcGxlLCBub3RlIHRoZSBwYXJlbnMgaW4gdGhlIGZpcnN0IHR3byByb3dzIG9mIHRoZQogICAgICAgICAgICAjIGZvbGxvd2luZyBzbmlwcGV0LiAgVGhleSB3b3VsZCBub3JtYWxseSBnZXQgbWFya2VkIGZvcgogICAgICAgICAgICAjIGFsaWdubWVudCBhbmQgYWxpZ25lZCBhcyBmb2xsb3dzOgoKICAgICAgICAgICAgIyAgICBteSAkdyA9ICRjb2x1bW5zICogJGNlbGxfdyArICggJGNvbHVtbnMgKyAxICkgKiAkYm9yZGVyOwogICAgICAgICAgICAjICAgIG15ICRoID0gJHJvd3MgKiAkY2VsbF9oICsgICAgKCAkcm93cyArIDEgKSAqICRib3JkZXI7CiAgICAgICAgICAgICMgICAgbXkgJGltZyA9IG5ldyBHaW1wOjpJbWFnZSggJHcsICRoLCBSR0IgKTsKCiAgICAgICAgICAgICMgVGhpcyBjYXVzZXMgdW5uZWNlc3NhcnkgcGFyZW4gYWxpZ25tZW50IGFuZCBwcmV2ZW50cyB0aGUKICAgICAgICAgICAgIyB0aGlyZCBlcXVhbHMgZnJvbSBhbGlnbmluZy4gSWYgd2UgcmVtb3ZlIHRoZSB1bndhbnRlZAogICAgICAgICAgICAjIGFsaWdubWVudHMgd2UgZ2V0OgoKICAgICAgICAgICAgIyAgICBteSAkdyAgID0gJGNvbHVtbnMgKiAkY2VsbF93ICsgKCAkY29sdW1ucyArIDEgKSAqICRib3JkZXI7CiAgICAgICAgICAgICMgICAgbXkgJGggICA9ICRyb3dzICogJGNlbGxfaCArICggJHJvd3MgKyAxICkgKiAkYm9yZGVyOwogICAgICAgICAgICAjICAgIG15ICRpbWcgPSBuZXcgR2ltcDo6SW1hZ2UoICR3LCAkaCwgUkdCICk7CgogICAgICAgICAgICAjIEEgcnVsZSBmb3IgZG9pbmcgdGhpcyB3aGljaCB3b3JrcyB3ZWxsIGlzIHRvIHJlbW92ZSBhbGlnbm1lbnQKICAgICAgICAgICAgIyBvZiBwYXJlbnMgd2hvc2UgY29udGFpbmVycyBkbyBub3QgY29udGFpbiBvdGhlciBhbGlnbmluZwogICAgICAgICAgICAjIHRva2Vucywgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgd2UgYWx3YXlzIGtlZXAgYWxpZ25tZW50IG9mCiAgICAgICAgICAgICMgdGhlIGZpcnN0IG9wZW5pbmcgcGFyZW4gb24gYSBsaW5lIChmb3IgdGhpbmdzIGxpa2UgJ2lmJyBhbmQKICAgICAgICAgICAgIyAnZWxzaWYnIHN0YXRlbWVudHMpLgogICAgICAgICAgICBpZiAoICR0b2tlbiBlcSAnKScgJiYgQGltYXRjaF9saXN0ICkgewoKICAgICAgICAgICAgICAgICMgdW5kbyB0aGUgY29ycmVzcG9uZGluZyBvcGVuaW5nIHBhcmVuIGlmOgogICAgICAgICAgICAgICAgIyAtIGl0IGlzIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrCiAgICAgICAgICAgICAgICAjIC0gYW5kIG5vdCB0aGUgZmlyc3Qgb3ZlcmFsbCBvcGVuaW5nIHBhcmVuCiAgICAgICAgICAgICAgICAjIC0gZG9lcyBub3QgZm9sbG93IGEgbGVhZGluZyBrZXl3b3JkIG9uIHRoaXMgbGluZQogICAgICAgICAgICAgICAgbXkgJGltYXRlID0gJG1hdGVfaW5kZXhfdG9fZ29bJGldOwogICAgICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkaW1hdGUpICkgeyAkaW1hdGUgPSAtMSB9CiAgICAgICAgICAgICAgICBpZiAoICAgJGltYXRjaF9saXN0Wy0xXSBlcSAkaW1hdGUKICAgICAgICAgICAgICAgICAgICAmJiAoICRpYmVnID4gMSB8fCBAaW1hdGNoX2xpc3QgPiAxICkKICAgICAgICAgICAgICAgICAgICAmJiAkaW1hdGUgPiAkaV9nb29kX3BhcmVuICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICRyYWxpZ25tZW50X3R5cGVfdG9fZ28tPlskaW1hdGVdICkgewogICAgICAgICAgICAgICAgICAgICAgICAkcmFsaWdubWVudF90eXBlX3RvX2dvLT5bJGltYXRlXSA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgICAgICAgICAgICAgJHJhbGlnbm1lbnRfY291bnRzLT5bJG5saW5lXS0tOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBwb3AgQGltYXRjaF9saXN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGRvIG5vdCBhbGlnbiB0b2tlbnMgYXQgbG93ZXIgbGV2ZWwgdGhhbiBzdGFydCBvZiBsaW5lCiAgICAgICAgICAgICMgZXhjZXB0IGZvciBzaWRlIGNvbW1lbnRzCiAgICAgICAgICAgIGlmICggJGxldmVsc190b19nb1skaV0gPCAkbGV2ZWxfYmVnICkgewogICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgRmlyc3Qgc2VlIGlmIHdlIHdhbnQgdG8gYWxpZ24gQkVGT1JFIHRoaXMgdG9rZW4KICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICAgICAjIFRoZSBmaXJzdCBwb3NzaWJsZSB0b2tlbiB0aGF0IHdlIGNhbiBhbGlnbiBiZWZvcmUKICAgICAgICAgICAgIyBpcyBpbmRleCAyIGJlY2F1c2U6IDEpIGl0IGRvZXNuJ3Qgbm9ybWFsbHkgbWFrZSBzZW5zZSB0bwogICAgICAgICAgICAjIGFsaWduIGJlZm9yZSB0aGUgZmlyc3QgdG9rZW4gYW5kIDIpIHRoZSBzZWNvbmQKICAgICAgICAgICAgIyB0b2tlbiBtdXN0IGJlIGEgYmxhbmsgaWYgd2UgYXJlIHRvIGFsaWduIGJlZm9yZQogICAgICAgICAgICAjIHRoZSB0aGlyZAogICAgICAgICAgICBpZiAoICRpIDwgJGliZWcgKyAyICkgeyB9CgogICAgICAgICAgICAjIG11c3QgZm9sbG93IGEgYmxhbmsgdG9rZW4KICAgICAgICAgICAgZWxzaWYgKCAkdHlwZXNfdG9fZ29bICRpIC0gMSBdIG5lICdiJyApIHsgfQoKICAgICAgICAgICAgIyBvdGhlcndpc2UsIGRvIG5vdCBhbGlnbiB0d28gaW4gYSByb3cgdG8gY3JlYXRlIGEKICAgICAgICAgICAgIyBibGFuayBmaWVsZAogICAgICAgICAgICBlbHNpZiAoICRsYXN0X3ZlcnRpY2FsX2FsaWdubWVudF9CRUZPUkVfaW5kZXggPT0gJGkgLSAyICkgeyB9CgogICAgICAgICAgICAjIGFsaWduIGJlZm9yZSBvbmUgb2YgdGhlc2Uga2V5d29yZHMKICAgICAgICAgICAgIyAod2l0aGluIGEgbGluZSwgc2luY2UgJGk+MSkKICAgICAgICAgICAgZWxzaWYgKCAkdHlwZSBlcSAnaycgKSB7CgogICAgICAgICAgICAgICAgIyAgL14oaWZ8dW5sZXNzfGFuZHxvcnxlcXxuZSkkLwogICAgICAgICAgICAgICAgaWYgKCAkaXNfdmVydGljYWxfYWxpZ25tZW50X2tleXdvcmR7JHRva2VufSApIHsKICAgICAgICAgICAgICAgICAgICAkYWxpZ25tZW50X3R5cGUgPSAkdG9rZW47CgogICAgICAgICAgICAgICAgICAgICMgQWxpZ24gcG9zdGZpeCAndW5sZXNzJyBhbmQgJ2lmJyBpZiByZXF1ZXN0ZWQgKGdpdCAjMTE2KQogICAgICAgICAgICAgICAgICAgICMgVGhlc2UgYXJlIHRoZSBvbmx5IGVxdWl2YWxlbnQga2V5d29yZHMuIEZvciBlcXVpdmFsZW50CiAgICAgICAgICAgICAgICAgICAgIyB0b2tlbiB0eXBlcyBzZWUgJyVvcGVyYXRvcl9tYXAnLgogICAgICAgICAgICAgICAgICAgIGlmICggJHRva2VuIGVxICd1bmxlc3MnICYmICRyT3B0c192YWxpZ25faWZfdW5sZXNzICkgewogICAgICAgICAgICAgICAgICAgICAgICAkYWxpZ25tZW50X3R5cGUgPSAnaWYnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBhbGlnbiBxdyBpbiBhICd1c2UnIHN0YXRlbWVudCAoaXNzdWUgZ2l0ICM5MykKICAgICAgICAgICAgZWxzaWYgKCAkdHlwZSBlcSAncScgKSB7CiAgICAgICAgICAgICAgICBpZiAoICR0eXBlc190b19nb1swXSBlcSAnaycgJiYgJHRva2Vuc190b19nb1swXSBlcSAndXNlJyApIHsKICAgICAgICAgICAgICAgICAgICAkYWxpZ25tZW50X3R5cGUgPSAkdHlwZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBhbGlnbiBiZWZvcmUgb25lIG9mIHRoZXNlIHR5cGVzLi4KICAgICAgICAgICAgZWxzaWYgKCAkaXNfdmVydGljYWxfYWxpZ25tZW50X3R5cGV7JHR5cGV9CiAgICAgICAgICAgICAgICAmJiAhJGlzX25vdF92ZXJ0aWNhbF9hbGlnbm1lbnRfdG9rZW57JHRva2VufSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRhbGlnbm1lbnRfdHlwZSA9ICR0b2tlbjsKCiAgICAgICAgICAgICAgICBpZiAoICRyT3B0c192YWxpZ25fd2lkZV9lcXVhbHMgJiYgJGlzX2Fzc2lnbm1lbnR7JHR5cGV9ICkgewogICAgICAgICAgICAgICAgICAgICRhbGlnbm1lbnRfdHlwZSA9ICc9JzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIERvIG5vdCBhbGlnbiBhIHRlcm1pbmFsIHRva2VuLiAgQWx0aG91Z2ggaXQgbWlnaHQKICAgICAgICAgICAgICAgICMgb2NjYXNpb25hbGx5IGxvb2sgb2sgdG8gZG8gdGhpcywgdGhpcyBoYXMgYmVlbiBmb3VuZCB0byBiZQogICAgICAgICAgICAgICAgIyBhIGdvb2QgZ2VuZXJhbCBydWxlLiAgVGhlIG1haW4gcHJvYmxlbXMgYXJlOgogICAgICAgICAgICAgICAgIyAoMSkgdGhhdCB0aGUgdGVybWluYWwgdG9rZW4gKHN1Y2ggYXMgYW4gPSBvciA6KSBtaWdodCBnZXQKICAgICAgICAgICAgICAgICMgbW92ZWQgZmFyIHRvIHRoZSByaWdodCB3aGVyZSBpdCBpcyBoYXJkIHRvIHNlZSBiZWNhdXNlCiAgICAgICAgICAgICAgICAjIG5vdGhpbmcgZm9sbG93cyBpdCwgYW5kCiAgICAgICAgICAgICAgICAjICgyKSBkb2luZyBzbyBtYXkgcHJldmVudCBvdGhlciBnb29kIGFsaWdubWVudHMuCiAgICAgICAgICAgICAgICAjIEN1cnJlbnQgZXhjZXB0aW9ucyBhcmUgJiYgYW5kIHx8IGFuZCA9PgogICAgICAgICAgICAgICAgaWYgKCAkaSA9PSAkaWVuZCApIHsKICAgICAgICAgICAgICAgICAgICAkYWxpZ25tZW50X3R5cGUgPSBFTVBUWV9TVFJJTkcKICAgICAgICAgICAgICAgICAgICAgIHVubGVzcyAoICRpc190ZXJtaW5hbF9hbGlnbm1lbnRfdHlwZXskdHlwZX0gKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIERvIG5vdCBhbGlnbiBsZWFkaW5nICc6ICgnIG9yICcuICgnLiAgVGhpcyB3b3VsZCBwcmV2ZW50CiAgICAgICAgICAgICAgICAjIGFsaWdubWVudCBpbiBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nOgogICAgICAgICAgICAgICAgIyAgICRleHRyYV9zcGFjZSAuPQogICAgICAgICAgICAgICAgIyAgICAgICAoICRpbnB1dF9saW5lX251bWJlciA8IDEwICkgID8gIiAgIgogICAgICAgICAgICAgICAgIyAgICAgOiAoICRpbnB1dF9saW5lX251bWJlciA8IDEwMCApID8gIiAiCiAgICAgICAgICAgICAgICAjICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIjsKICAgICAgICAgICAgICAgICMgb3IKICAgICAgICAgICAgICAgICMgICRjb2RlID0KICAgICAgICAgICAgICAgICMgICAgICAoICRjYXNlX21hdHRlcnMgPyAkYWNjZXNzb3IgOiAiIGxjKCRhY2Nlc3NvcikgIiApCiAgICAgICAgICAgICAgICAjICAgIC4gKCAkeWVzbm8gICAgICAgID8gIiBlcSAiICAgICAgIDogIiBuZSAiICkKCiAgICAgICAgICAgICAgICAjIEFsc28sIGRvIG5vdCBhbGlnbiBhICggZm9sbG93aW5nIGEgbGVhZGluZyA/IHNvIHdlIGNhbgogICAgICAgICAgICAgICAgIyBhbGlnbiBzb21ldGhpbmcgbGlrZSB0aGlzOgogICAgICAgICAgICAgICAgIyAgICRjb252ZXJ0ZXJ7JF99LT57dXNob3J0b2t9ID0KICAgICAgICAgICAgICAgICMgICAgICRQREw6OklPOjpQaWM6OmJpZ2dyYXlzCiAgICAgICAgICAgICAgICAjICAgICA/ICggbS9HSUYvICAgICAgICAgID8gMCA6IDEgKQogICAgICAgICAgICAgICAgIyAgICAgOiAoIG0vR0lGfFJBU1R8SUZGLyA/IDAgOiAxICk7CiAgICAgICAgICAgICAgICBpZiAoICAgJGkgPT0gJGliZWcgKyAyCiAgICAgICAgICAgICAgICAgICAgJiYgJGlzX2RvdF9xdWVzdGlvbl9jb2xvbnskdHlwZV9iZWd9CiAgICAgICAgICAgICAgICAgICAgJiYgJHR5cGVzX3RvX2dvWyAkaSAtIDEgXSBlcSAnYicgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRhbGlnbm1lbnRfdHlwZSA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIENlcnRhaW4gdG9rZW5zIG9ubHkgYWxpZ24gYXQgdGhlIHNhbWUgbGV2ZWwgYXMgdGhlCiAgICAgICAgICAgICAgICAjIGluaXRpYWwgbGluZSBsZXZlbAogICAgICAgICAgICAgICAgaWYgKCAgICRpc19sb3dfbGV2ZWxfYWxpZ25tZW50X3Rva2VueyR0b2tlbn0KICAgICAgICAgICAgICAgICAgICAmJiAkbGV2ZWxzX3RvX2dvWyRpXSAhPSAkbGV2ZWxfYmVnICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkYWxpZ25tZW50X3R5cGUgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAkdG9rZW4gZXEgJygnICkgewoKICAgICAgICAgICAgICAgICAgICAjIEZvciBhIHBhcmVuIGFmdGVyIGtleXdvcmQsIG9ubHkgYWxpZ24gaWYtbGlrZSBwYXJlbnMsCiAgICAgICAgICAgICAgICAgICAgIyBzdWNoIGFzOgogICAgICAgICAgICAgICAgICAgICMgICAgaWYgICAgKCAkYSApIHsgJmEgfQogICAgICAgICAgICAgICAgICAgICMgICAgZWxzaWYgKCAkYiApIHsgJmIgfQogICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgXi0tLS0tLS0tLS0tLS0tLS0tLS1hbGlnbmVkIHBhcmVucwogICAgICAgICAgICAgICAgICAgIGlmICggJHZlcnRfbGFzdF9ub25ibGFua190eXBlIGVxICdrJwogICAgICAgICAgICAgICAgICAgICAgICAmJiAhJGlzX2lmX3VubGVzc19lbHNpZnsgJHRva2Vuc190b19nb1sgJGkgLSAyIF0gfSApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkYWxpZ25tZW50X3R5cGUgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIERvIG5vdCBhbGlnbiBhIHNwYWNlZC1mdW5jdGlvbi1wYXJlbiBpZiByZXF1ZXN0ZWQuCiAgICAgICAgICAgICAgICAgICAgIyBJc3N1ZSBnaXQgIzUzLCAjNzMuCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJHJPcHRzX2Z1bmN0aW9uX3BhcmVuX3ZlcnRpY2FsX2FsaWdubWVudCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHNlcW5vID0gJHR5cGVfc2VxdWVuY2VfdG9fZ29bJGldOwogICAgICAgICAgICAgICAgICAgICAgICAkYWxpZ25tZW50X3R5cGUgPSBFTVBUWV9TVFJJTkcKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRzZWxmLT5bX3Jpc19mdW5jdGlvbl9jYWxsX3BhcmVuX10tPnskc2Vxbm99ICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIG1ha2UgKCkgYWxpZ24gd2l0aCBxdyBpbiBhICd1c2UnIHN0YXRlbWVudCAoZ2l0ICM5MykKICAgICAgICAgICAgICAgICAgICBpZiAoICAgJHRva2Vuc190b19nb1swXSBlcSAndXNlJwogICAgICAgICAgICAgICAgICAgICAgICAmJiAkdHlwZXNfdG9fZ29bMF0gZXEgJ2snCiAgICAgICAgICAgICAgICAgICAgICAgICYmIGRlZmluZWQoICRtYXRlX2luZGV4X3RvX2dvWyRpXSApCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRtYXRlX2luZGV4X3RvX2dvWyRpXSA9PSAkaSArIDEgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGFsaWdubWVudF90eXBlID0gJ3EnOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyMgTm90ZSBvbiBkaXNjdXNzaW9uIGdpdCAjMTAxLiBXZSBjb3VsZCBtYWtlIHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgIyMgYSBzZXBhcmF0ZSB0eXBlICcoKScgdG8gc2VwYXJhdGUgaXQgZnJvbSBxdydzOgogICAgICAgICAgICAgICAgICAgICAgICAjIyAkYWxpZ25tZW50X3R5cGUgPQogICAgICAgICAgICAgICAgICAgICAgICAjIyAgJHJPcHRzX3ZhbGlnbl9lbXB0eV9wYXJlbnNfd2l0aF9xdyA/ICdxJyA6ICcoKSc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgYmUgc3VyZSB0aGUgYWxpZ25tZW50IHRva2VucyBhcmUgdW5pcXVlCiAgICAgICAgICAgICAgICAjIFRoaXMgZXhwZXJpbWVudCBkaWRuJ3Qgd29yayB3ZWxsOiByZWFzb24gbm90IGRldGVybWluZWQKICAgICAgICAgICAgICAgICMgaWYgKCR0b2tlbiBuZSAkdHlwZSkgeyRhbGlnbm1lbnRfdHlwZSAuPSAkdHlwZX0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBtYWtlIHF3KCkgZnVuY3Rpb25zIHVzaW5nIC1xd2FmIGFsaWduICd1c2UnIHN0YXRlbWVudAogICAgICAgICAgICBlbHNpZiAoICR0eXBlIGVxICdVJyApIHsKICAgICAgICAgICAgICAgIGlmICggICAkdHlwZXNfdG9fZ29bMF0gZXEgJ2snCiAgICAgICAgICAgICAgICAgICAgJiYgJHRva2Vuc190b19nb1swXSBlcSAndXNlJwogICAgICAgICAgICAgICAgICAgICYmIHN1YnN0ciggJHRva2VuLCAwLCAyICkgZXEgJ3F3JyApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJGFsaWdubWVudF90eXBlID0gJ3EnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIyMgbm90IGEgc3BlY2lhbCB0eXBlCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgTk9URTogVGhpcyBpcyBkZWFjdGl2YXRlZCBiZWNhdXNlIGl0IGNhdXNlcyB0aGUgcHJldmlvdXMKICAgICAgICAgICAgIyBpZi9lbHNpZiBhbGlnbm1lbnQgdG8gZmFpbAogICAgICAgICAgICAjZWxzaWYgKCAkdHlwZSBlcSAnfScgJiYgJHRva2VuIGVxICd9JyAmJiAkYmxvY2tfdHlwZV90b19nb1skaV0pCiAgICAgICAgICAgICN7ICRhbGlnbm1lbnRfdHlwZSA9ICR0eXBlOyB9CgogICAgICAgICAgICBpZiAoJGFsaWdubWVudF90eXBlKSB7CiAgICAgICAgICAgICAgICAkbGFzdF92ZXJ0aWNhbF9hbGlnbm1lbnRfQkVGT1JFX2luZGV4ID0gJGk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIE5leHQgc2VlIGlmIHdlIHdhbnQgdG8gYWxpZ24gQUZURVIgdGhlIHByZXZpb3VzIG5vbmJsYW5rCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAgICAgIyBXZSB3YW50IHRvIGxpbmUgdXAgJywnIGFuZCBpbnRlcmlvciAnOycgdG9rZW5zLCB3aXRoIHRoZSBhZGRlZAogICAgICAgICAgICAjIHNwYWNlIEFGVEVSIHRoZXNlIHRva2Vucy4gIChOb3RlOiBpbnRlcmlvciAnOycgaXMgaW5jbHVkZWQKICAgICAgICAgICAgIyBiZWNhdXNlIGl0IG1heSBvY2N1ciBpbiBzaG9ydCBibG9ja3MpLgogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGlmICgKCiAgICAgICAgICAgICAgICAgICAgIyBwcmV2aW91cyB0b2tlbiBJUyBvbmUgb2YgdGhlc2U6CiAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAkdmVydF9sYXN0X25vbmJsYW5rX3R5cGUgZXEgJywnCiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICR2ZXJ0X2xhc3Rfbm9uYmxhbmtfdHlwZSBlcSAnOycKICAgICAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAgICAgICMgYW5kIGl0IGZvbGxvd3MgYSBibGFuawogICAgICAgICAgICAgICAgICAgICYmICR0eXBlc190b19nb1sgJGkgLSAxIF0gZXEgJ2InCgogICAgICAgICAgICAgICAgICAgICMgYW5kIGl0J3MgTk9UIG9uZSBvZiB0aGVzZQogICAgICAgICAgICAgICAgICAgICYmICEkaXNfY2xvc2luZ190b2tlbnskdHlwZX0KCiAgICAgICAgICAgICAgICAgICAgIyB0aGVuIGdvIGFoZWFkIGFuZCBhbGlnbgogICAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRhbGlnbm1lbnRfdHlwZSA9ICR2ZXJ0X2xhc3Rfbm9uYmxhbmtfdHlwZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgU2V0IHRoZSBhbGlnbm1lbnQgdHlwZQogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgaWYgKCRhbGlnbm1lbnRfdHlwZSkgewoKICAgICAgICAgICAgICAgICMgYnV0IGRvIG5vdCBhbGlnbiB0aGUgb3BlbmluZyBicmFjZSBvZiBhbiBhbm9ueW1vdXMgc3ViCiAgICAgICAgICAgICAgICBpZiAoICAgJHRva2VuIGVxICd7JwogICAgICAgICAgICAgICAgICAgICYmICRibG9ja190eXBlX3RvX2dvWyRpXQogICAgICAgICAgICAgICAgICAgICYmICRtYXRjaGVzX0FTVUJ7ICRibG9ja190eXBlX3RvX2dvWyRpXSB9ICkKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBhbmQgZG8gbm90IG1ha2UgYWxpZ25tZW50cyB3aXRoaW4gJ2Vsc2lmJyBwYXJlbnMKICAgICAgICAgICAgICAgIGVsc2lmICggJGkgPiAkaV9lbHNpZl9vcGVuICYmICRpIDwgJGlfZWxzaWZfY2xvc2UgKSB7CgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgYW5kIGlnbm9yZSBhbnkgdG9rZW5zIHdoaWNoIGhhdmUgbGVhZGluZyBwYWRkZWQgc3BhY2VzCiAgICAgICAgICAgICAgICAjIGV4YW1wbGU6IHBlcmw1MjcvbG9wLnQKICAgICAgICAgICAgICAgIGVsc2lmICggc3Vic3RyKCAkYWxpZ25tZW50X3R5cGUsIDAsIDEgKSBlcSBTUEFDRSApIHsKCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHJhbGlnbm1lbnRfdHlwZV90b19nby0+WyRpXSA9ICRhbGlnbm1lbnRfdHlwZTsKICAgICAgICAgICAgICAgICAgICAkcmFsaWdubWVudF9jb3VudHMtPlskbmxpbmVdKys7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAaW1hdGNoX2xpc3QsICRpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAkdmVydF9sYXN0X25vbmJsYW5rX3R5cGUgPSAkdHlwZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIHNldF92ZXJ0aWNhbF9hbGlnbm1lbnRfbWFya2Vyc190b2tlbl9sb29wCgp9ICMjIGVuZCBjbG9zdXJlIHNldF92ZXJ0aWNhbF9hbGlnbm1lbnRfbWFya2VycwoKc3ViIG1ha2VfSFNDX3ZlcnRpY2FsX2FsaWdubWVudHMgewoKICAgICMgVGhpcyBpcyB0aGUgYWxpZ25tZW50IGZvciBhIGhhbmdpbmcgc2lkZSBjb21tZW50CiAgICBteSAkcmxpbmVfYWxpZ25tZW50czsKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgQ2FzZSAxOiBubyBhbGlnbm1lbnRzIGlmIC1uYXdzIGlzIHNldAogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBpZiAoICEkck9wdHNfYWRkX3doaXRlc3BhY2UgKSB7CgogICAgICAgICMgTm90aGluZyB0byBkbyBpZiB3ZSBhcmUgbm90IGFsbG93ZWQgdG8gYWRkIHdoaXRlc3BhY2UKICAgICAgICAkcmxpbmVfYWxpZ25tZW50cyA9IFsKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgW10sIFsgU1BBQ0UgLiAkdG9rZW5zX3RvX2dvWzBdIF0sCiAgICAgICAgICAgICAgICBbJyMnXSwKICAgICAgICAgICAgICAgIFsgMSArICRzdW1tZWRfbGVuZ3Roc190b19nb1sxXSAtICRzdW1tZWRfbGVuZ3Roc190b19nb1swXSBdLAogICAgICAgICAgICBdCiAgICAgICAgXTsKICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgQ2FzZSAyOiAtbnZzYyBmbGFnIHNldAogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIC0gRm9yIHRoZSBzcGVjaWZpYyBjb21iaW5hdGlvbiAtdmMgLW52c2MsIHdlIHB1dCBhbGwgc2lkZSBjb21tZW50cwogICAgIyAgIGF0IGZpeGVkIGxvY2F0aW9ucy4gTm90ZSB0aGF0IHdlIHdpbGwgbG9zZSBoYW5naW5nIHNpZGUgY29tbWVudAogICAgIyAgIGFsaWdubWVudHMuIE90aGVyd2lzZSwgaHNjJ3MgY2FuIG1vdmUgdG8gc3RyYW5nZSBsb2NhdGlvbnMuCiAgICAjIC0gRm9yIC1udmMgLW52c2Mgd2UgbWFrZSBhbGwgc2lkZSBjb21tZW50cyB2ZXJ0aWNhbCBhbGlnbm1lbnRzCiAgICAjICAgYmVjYXVzZSB0aGUgdmVydGljYWwgYWxpZ25lciB3aWxsIGNoZWNrIGZvciAtbnZzYyBhbmQgYmUgYWJsZQogICAgIyAgIHRvIHJlZHVjZSB0aGUgZmluYWwgcGFkZGluZyB0byB0aGUgc2lkZSBjb21tZW50cyBmb3IgbG9uZyBsaW5lcy4KICAgICMgICBhbmQga2VlcCBoYW5naW5nIHNpZGUgY29tbWVudHMgYWxpZ25lZC4KICAgIGVsc2lmICggISRyT3B0c192YWxpZ25fc2lkZV9jb21tZW50cyAmJiAkck9wdHNfdmFsaWduX2NvZGUgKSB7CiAgICAgICAgbXkgJHBhZF9zcGFjZXMgPSAkck9wdHMtPnsnbWluaW11bS1zcGFjZS10by1jb21tZW50J307CiAgICAgICAgJHJsaW5lX2FsaWdubWVudHMgPSBbCiAgICAgICAgICAgIFsKCiAgICAgICAgICAgICAgICBbXSwKICAgICAgICAgICAgICAgIFsgU1BBQ0UgeCAkcGFkX3NwYWNlcyAuICR0b2tlbnNfdG9fZ29bMF0gXSwKICAgICAgICAgICAgICAgIFsncSddLAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICRwYWRfc3BhY2VzICsKICAgICAgICAgICAgICAgICAgICAgICRzdW1tZWRfbGVuZ3Roc190b19nb1sxXSAtCiAgICAgICAgICAgICAgICAgICAgICAkc3VtbWVkX2xlbmd0aHNfdG9fZ29bMF0KICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIF0KICAgICAgICBdOwogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBDYXNlIDM6IE5vcm1hbCBjYXNlIG9mIG5vIGNvbnN0cmFpbnRzCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgT3JpZ2luYWxseSwgYSBoYW5naW5nIHNpZGUgY29tbWVudCBsaW5lIHdhcyBjb25zdHJ1Y3RlZCBhcyB0aHJlZSB0b2tlbnM6CiAgICAjICAgIHR5cGUgJ3EnIHdpdGggemVybyBsZW5ndGgsCiAgICAjICAgIHR5cGUgJ2InIHdpdGggbGVuZ3RoIDEKICAgICMgICAgdHlwZSAnIycgd2l0aCB0aGUgdGV4dCBvZiB0aGUgY29tbWVudAogICAgIyBJbiB0aGlzIHdheSwgdGhlIGNvbW1lbnQgYmVjYW1lIGEgdHJ1ZSBzaWRlIGNvbW1lbnQgdGhyb3VnaCBhbGwgb2YgdGhlCiAgICAjIHRva2VuaXphdGlvbiBvcGVyYXRpb25zLiBIb3dldmVyLCB0aGlzIGNhdXNlZCBhIHByb2JsZW0gKGMyNjkpIHdpdGggc3VicwogICAgIyBLX25leHRfKiBhbmQgS19wcmV2aW91c18qLCB3aGljaCB3b3VsZCBzdG9wIGF0IHRoZSAncScgdG9rZW4uICBSYXRoZXIKICAgICMgdGhhbiBjaGFuZ2UgdGhvc2UgdG8gc2tpcCBhbiBlbXB0eSAncScsIHRoZSBoYW5naW5nIHNpZGUgY29tbWVudCB3YXMKICAgICMgbGVmdCBhcyBhIGJsb2NrIGNvbW1lbnQgYnV0IHRoZSBsaW5lIHdhcyBtYXJrZWQgYXMgJ0hTQycuIE9ubHkgd2hlbgogICAgIyB3ZSBtYWtlIHRoZSB2ZXJ0aWNhbCBhbGlnbm1lbnRzLCByaWdodCBoZXJlLCBkbyB3ZSBuZWVkIHRvIGNvbnN0cnVjdAogICAgIyB0aGUgYXJ0aWZpY2lhbCAncScsICdiJywgJyMnIHNlcXVlbmNlIGZvciB0aGUgdmVydGljYWwgYWxpZ25lci4KICAgIGVsc2UgewogICAgICAgICRybGluZV9hbGlnbm1lbnRzID0gWwogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICBbJyMnXSwKICAgICAgICAgICAgICAgIFsgU1BBQ0UsICR0b2tlbnNfdG9fZ29bMF0gXSwKICAgICAgICAgICAgICAgIFsgJ3FiJywgICcjJyBdLAogICAgICAgICAgICAgICAgWyAxLCAgICAgJHN1bW1lZF9sZW5ndGhzX3RvX2dvWzFdIC0gJHN1bW1lZF9sZW5ndGhzX3RvX2dvWzBdIF0sCiAgICAgICAgICAgIF0KICAgICAgICBdOwogICAgfQoKICAgIHJldHVybiAkcmxpbmVfYWxpZ25tZW50czsKfSAjIyBlbmQgc3ViIG1ha2VfSFNDX3ZlcnRpY2FsX2FsaWdubWVudHMKCnN1YiBtYWtlX3ZlcnRpY2FsX2FsaWdubWVudHMgewogICAgbXkgKCRzZWxmKSA9IEBfOwoKICAgIG15ICR0aGlzX2JhdGNoID0gJHNlbGYtPltfdGhpc19iYXRjaF9dOwogICAgbXkgJHJpX2ZpcnN0ICAgPSAkdGhpc19iYXRjaC0+W19yaV9maXJzdF9dOwogICAgbXkgJHJpX2xhc3QgICAgPSAkdGhpc19iYXRjaC0+W19yaV9sYXN0X107CgogICAgIyBHaXZlbjoKICAgICMgICAkcmlfZmlyc3QgPSByZWYgdG8gbGlzdCBvZiBzdGFydGluZyBsaW5lIGluZGV4ZXMgaW4gX3RvX2dvIGFycmF5cwogICAgIyAgICRyaV9sYXN0ICA9IHJlZiB0byBsaXN0IG9mIGVuZGluZyBsaW5lIGluZGV4ZXMgaW4gX3RvX2dvIGFycmF5cwoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFNob3J0Y3V0IGZvciBhIHNpbmdsZSB0b2tlbgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGlmICggJG1heF9pbmRleF90b19nbyA9PSAwICkgewogICAgICAgIGlmICggQHskcmlfZmlyc3R9ID09IDEgJiYgJHJpX2xhc3QtPlswXSA9PSAwICkgewogICAgICAgICAgICBteSAkcnRva2VucyAgID0gW107CiAgICAgICAgICAgIG15ICRyZmllbGRzICAgPSBbICR0b2tlbnNfdG9fZ29bMF0gXTsKICAgICAgICAgICAgbXkgJHJwYXR0ZXJucyA9IFsgJHR5cGVzX3RvX2dvWzBdIF07CiAgICAgICAgICAgIG15ICRyZmllbGRfbGVuZ3RocyA9CiAgICAgICAgICAgICAgWyAkc3VtbWVkX2xlbmd0aHNfdG9fZ29bMV0gLSAkc3VtbWVkX2xlbmd0aHNfdG9fZ29bMF0gXTsKICAgICAgICAgICAgcmV0dXJuIFsgWyAkcnRva2VucywgJHJmaWVsZHMsICRycGF0dGVybnMsICRyZmllbGRfbGVuZ3RocyBdIF07CiAgICAgICAgfQoKICAgICAgICAjIFN0cmFuZ2UgbGluZSBwYWNraW5nLCBub3QgZmF0YWwgYnV0IHNob3VsZCBub3QgaGFwcGVuCiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICBpZiAoREVWRUxfTU9ERSkgewogICAgICAgICAgICAgICAgbXkgJG1heF9saW5lID0gQHskcmlfZmlyc3R9IC0gMTsKICAgICAgICAgICAgICAgIG15ICRpYmVnICAgICA9ICRyaV9maXJzdC0+WzBdOwogICAgICAgICAgICAgICAgbXkgJGllbmQgICAgID0gJHJpX2xhc3QtPlswXTsKICAgICAgICAgICAgICAgIG15ICR0b2tfYiAgICA9ICR0b2tlbnNfdG9fZ29bJGliZWddOwogICAgICAgICAgICAgICAgbXkgJHRva19lICAgID0gJHRva2Vuc190b19nb1skaWVuZF07CiAgICAgICAgICAgICAgICBteSAkdHlwZV9iICAgPSAkdHlwZXNfdG9fZ29bJGliZWddOwogICAgICAgICAgICAgICAgbXkgJHR5cGVfZSAgID0gJHR5cGVzX3RvX2dvWyRpZW5kXTsKICAgICAgICAgICAgICAgIEZhdWx0KAoiU3RyYW5nZS4ubWF4X2luZGV4PTAgYnV0IG5saW5lcz0kbWF4X2xpbmUgaWJlZz0kaWJlZyB0b2s9JHRva19iIHR5cGU9JHR5cGVfYiBpZW5kPSRpZW5kIHRvaz0kdG9rX2UgdHlwZT0kdHlwZV9lOyBwbGVhc2UgY2hlY2tcbiIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBTdGVwIDE6IERlZmluZSB0aGUgYWxpZ25tZW50IHRva2VucyBmb3IgdGhlIGVudGlyZSBiYXRjaAogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgbXkgKCAkcmFsaWdubWVudF90eXBlX3RvX2dvLCAkcmFsaWdubWVudF9jb3VudHMgKTsKCiAgICAjIFdlIG9ubHkgbmVlZCB0byBtYWtlIHRoaXMgY2FsbCBpZiB2ZXJ0aWNhbCBhbGlnbm1lbnQgb2YgY29kZSBpcwogICAgIyByZXF1ZXN0ZWQgb3IgaWYgYSBsaW5lIG1pZ2h0IGhhdmUgYSBzaWRlIGNvbW1lbnQuCiAgICBpZiAoICAgJHJPcHRzX3ZhbGlnbl9jb2RlCiAgICAgICAgfHwgJHR5cGVzX3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dIGVxICcjJyApCiAgICB7CiAgICAgICAgKCAkcmFsaWdubWVudF90eXBlX3RvX2dvLCAkcmFsaWdubWVudF9jb3VudHMgKSA9CiAgICAgICAgICAkc2VsZi0+c2V0X3ZlcnRpY2FsX2FsaWdubWVudF9tYXJrZXJzKCk7CiAgICB9CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgU3RlcCAyOiBCcmVhayBlYWNoIGxpbmUgaW50byBhbGlnbm1lbnQgZmllbGRzCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgbXkgJHJsaW5lX2FsaWdubWVudHMgPSBbXTsKICAgIG15ICRtYXhfbGluZSAgICAgICAgID0gQHskcmlfZmlyc3R9IC0gMTsKICAgIGZvcmVhY2ggbXkgJGxpbmUgKCAwIC4uICRtYXhfbGluZSApIHsKCiAgICAgICAgbXkgJGliZWcgPSAkcmlfZmlyc3QtPlskbGluZV07CiAgICAgICAgbXkgJGllbmQgPSAkcmlfbGFzdC0+WyRsaW5lXTsKCiAgICAgICAgbXkgJHJ0b2tfZmxkX3BhdF9sZW4gPSAkc2VsZi0+bWFrZV9hbGlnbm1lbnRfcGF0dGVybnMoCgogICAgICAgICAgICAkaWJlZywKICAgICAgICAgICAgJGllbmQsCiAgICAgICAgICAgICRyYWxpZ25tZW50X3R5cGVfdG9fZ28sCiAgICAgICAgICAgICRyYWxpZ25tZW50X2NvdW50cy0+WyRsaW5lXSwKCiAgICAgICAgKTsKICAgICAgICBwdXNoIEB7JHJsaW5lX2FsaWdubWVudHN9LCAkcnRva19mbGRfcGF0X2xlbjsKICAgIH0KICAgIHJldHVybiAkcmxpbmVfYWxpZ25tZW50czsKfSAjIyBlbmQgc3ViIG1ha2VfdmVydGljYWxfYWxpZ25tZW50cwoKc3ViIGdldF9zZXFubyB7CgogICAgbXkgKCAkc2VsZiwgJGlpICkgPSBAXzsKCiAgICAjIEdldCBvcGVuaW5nIGFuZCBjbG9zaW5nIHNlcXVlbmNlIG51bWJlcnMgb2YgYSB0b2tlbiBmb3IgdGhlIHZlcnRpY2FsCiAgICAjIGFsaWduZXIuICBBc3NpZ24gcXcgcXVvdGVzIGEgdmFsdWUgdG8gYWxsb3cgcXcgb3BlbmluZyBhbmQgY2xvc2luZyB0b2tlbnMKICAgICMgdG8gYmUgdHJlYXRlZCBzb21ld2hhdCBsaWtlIG9wZW5pbmcgYW5kIGNsb3NpbmcgdG9rZW5zIGZvciBzdGFja2luZwogICAgIyB0b2tlbnMgYnkgdGhlIHZlcnRpY2FsIGFsaWduZXIuCgogICAgIyBHaXZlbjoKICAgICMgICAkaWkgPSBpbmRleCBvZiB0b2tlbiBpbiB0aGUgb3V0cHV0IGJhdGNoCgogICAgbXkgJHJMTCA9ICRzZWxmLT5bX3JMTF9dOwoKICAgIG15ICRLSyAgICA9ICRLX3RvX2dvWyRpaV07CiAgICBteSAkc2Vxbm8gPSAkckxMLT5bJEtLXS0+W19UWVBFX1NFUVVFTkNFX107CgogICAgaWYgKCAkckxMLT5bJEtLXS0+W19UWVBFX10gZXEgJ3EnICkgewogICAgICAgIG15ICRTRVFfUVcgPSAtMTsKICAgICAgICBteSAkdG9rZW4gID0gJHJMTC0+WyRLS10tPltfVE9LRU5fXTsKICAgICAgICBpZiAoICRpaSA+IDAgKSB7CiAgICAgICAgICAgICRzZXFubyA9ICRTRVFfUVcgaWYgKCAkdG9rZW4gPX4gL15xd1xzKltcKFx7XFtdLyApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIyBfZW5kaW5nX2luX3F1b3RlXyA9IHRydWUgaWYgbGluZSBlbmRzIGluIHF1b3RlCiAgICAgICAgICAgIGlmICggISRzZWxmLT5bX3RoaXNfYmF0Y2hfXS0+W19lbmRpbmdfaW5fcXVvdGVfXSApIHsKICAgICAgICAgICAgICAgICRzZXFubyA9ICRTRVFfUVcgaWYgKCAkdG9rZW4gPX4gL1tcKVx9XF1dJC8gKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAoJHNlcW5vKTsKfSAjIyBlbmQgc3ViIGdldF9zZXFubwoKc3ViIHVuZG9fY29udGFpbmVkX2NpIHsKCiAgICBteSAoICRzZWxmLCAkcmlfZmlyc3QsICRyaV9sYXN0ICkgPSBAXzsKCiAgICAjIEdpdmVuOgogICAgIyAgICRyaV9maXJzdCA9IHJlZiB0byBsaXN0IG9mIHN0YXJ0aW5nIGxpbmUgaW5kZXhlcyBpbiBfdG9fZ28gYXJyYXlzCiAgICAjICAgJHJpX2xhc3QgID0gcmVmIHRvIGxpc3Qgb2YgZW5kaW5nIGxpbmUgaW5kZXhlcyBpbiBfdG9fZ28gYXJyYXlzCgogICAgIyBVbmRvIGNpIGZvciBhIHNlcXVlbmNlIG9mIGxpbmVzIGluIGEgY29udGFpbmVyIHdoaWNoIGFsbCBoYXZlIGJvdGggY2kKICAgICMgYW5kIGEganVtcCBpbiBsZXZlbC4gV3JpdHRlbiBmb3IgaXNzdWUgZ2l0ICMxMzcuIFRoaXMgbWFpbmx5IG9jY3VycwogICAgIyBpbiBjb2RlIHdpdGggdmVyeSBsb25nIHF1b3RlcyB3aGVuIC1ub2xxIGlzIHNldC4gIEV4YW1wbGVzOgoKICAgICMgICAgZGlhZyggJ1Rlc3QgcnVuIHBlcmZvcm1lZCBhdDogJwogICAgIyAgICAgICAgICAgIC4gRGF0ZVRpbWUtPm5vdwogICAgIyAgICAgICAgICAgIC4gJyB3aXRoIE1vb3NlICcKICAgICMgICAgICAgICAgICAuICggTW9vc2UtPlZFUlNJT04gfHwgJ2dpdCByZXBvJyApICk7CiAgICAjICAgICRkID0gc3FydCggKCAkeC0+WyR4X2xdIC0gJHgtPlskeF9yXSApKioyICsKICAgICMgICAgICAgICAgICAoICR5LT5bJHhfbF0gLSAkeS0+WyR4X3JdICkqKjIgKTsKCiAgICAjIFRoZXNlIGFsbCBpbnZvbHZlIGxpbmVzIHdpdGggY2kgd2l0aGluIGEgY29tcGxldGUgY29udGFpbmVyLCB3aGVyZSB0aGUKICAgICMgYmF0Y2ggZW5kcyBpbiAnKTsnIG9yICddOycgb3IgJ307JyB3aXRoIHBvc3NpYmxlIHNpZGUgY29tbWVudC4gIFRoZQogICAgIyBvcGVuaW5nIGNvbnRhaW5lciB0b2tlbiBkb2VzIG5vdCBlbmQgYSBsaW5lLCBhbmQgdGhpcyBjYXVzZXMgdGhlIGRvdWJsZQogICAgIyBqdW1wLgoKICAgIG15ICRtYXhfbGluZSA9IEB7JHJpX2ZpcnN0fSAtIDE7CiAgICByZXR1cm4gaWYgKCAkbWF4X2xpbmUgPCAxICk7CgogICAgbXkgJGliZWdfbWF4ID0gJHJpX2ZpcnN0LT5bJG1heF9saW5lXTsKICAgIG15ICRpZW5kX21heCA9ICRyaV9sYXN0LT5bJG1heF9saW5lXTsKICAgIG15ICRpX29wZW5pbmc7CiAgICBteSAkbGluZV9sYXN0OwoKICAgICMgTG9vayBmb3IgQ2FzZSAxOiBsYXN0IGxpbmUgYmVnaW5zIHdpdGggJyk7JwogICAgaWYgKCAkaXNfY2xvc2luZ190b2tlbnsgJHRva2Vuc190b19nb1skaWJlZ19tYXhdIH0gKSB7CiAgICAgICAgbXkgJGlfbiA9ICRpbmV4dF90b19nb1skaWJlZ19tYXhdOwogICAgICAgIHJldHVybiBpZiAoICRpX24gPCAkaWJlZ19tYXggfHwgJGlfbiA+ICRpZW5kX21heCApOwogICAgICAgIHJldHVybiBpZiAoICR0eXBlc190b19nb1skaV9uXSBuZSAnOycgKTsKICAgICAgICAkaV9vcGVuaW5nID0gJG1hdGVfaW5kZXhfdG9fZ29bJGliZWdfbWF4XTsKICAgICAgICByZXR1cm4gaWYgKCAhZGVmaW5lZCgkaV9vcGVuaW5nKSB8fCAkaV9vcGVuaW5nIDw9IDAgKTsKICAgICAgICAkbGluZV9sYXN0ID0gJG1heF9saW5lIC0gMTsKICAgIH0KCiAgICAjIExvb2sgZm9yIENhc2UgMjogbGFzdCBsaW5lIGhhcyBzb21lIHRleHQgd2hpY2ggZW5kcyB3aXRoICcpOycKICAgIGVsc2UgewogICAgICAgIG15ICRpX3QgPSAkaWVuZF9tYXg7CiAgICAgICAgaWYgKCAkdHlwZXNfdG9fZ29bJGlfdF0gZXEgJyMnICkgewogICAgICAgICAgICAkaV90ID0gaXByZXZfdG9fZ28oJGlfdCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBpZiAoICRpX3QgPD0gJGliZWdfbWF4ICk7CiAgICAgICAgcmV0dXJuIGlmICggJHR5cGVzX3RvX2dvWyRpX3RdIG5lICc7JyApOwogICAgICAgICRpX3QgPSBpcHJldl90b19nbygkaV90KTsKICAgICAgICByZXR1cm4gaWYgKCAkaV90IDw9ICRpYmVnX21heCApOwogICAgICAgIHJldHVybiBpZiAoICEkaXNfY2xvc2luZ190b2tlbnsgJHRva2Vuc190b19nb1skaV90XSB9ICk7CiAgICAgICAgJGlfb3BlbmluZyA9ICRtYXRlX2luZGV4X3RvX2dvWyRpX3RdOwogICAgICAgIHJldHVybiBpZiAoICFkZWZpbmVkKCRpX29wZW5pbmcpIHx8ICRpX29wZW5pbmcgPCAwICk7CiAgICAgICAgJGxpbmVfbGFzdCA9ICRtYXhfbGluZTsKICAgIH0KCiAgICAjIFNjYW4gYmFja3dhcmRzIHRvIHRoZSBsaW5lIHdpdGggdGhlIG9wZW5pbmcgY29udGFpbmVyLAogICAgIyBsb29raW5nIGZvciBhIHNldCBvZiBsaW5lcyB3aXRoIGNpIHRvIHJlbW92ZSB3aGljaCBoYXZlCiAgICAjIHRoZSBzYW1lIGxldmVsIGFuZCBjaSBhcyB0aGUgZmluYWwgbGluZSBvZiB0aGUgZ3JvdXAKICAgIG15ICRpYmVnX2xhc3QgID0gJHJpX2ZpcnN0LT5bJGxpbmVfbGFzdF07CiAgICBteSAkbGV2ZWxfbGFzdCA9ICRsZXZlbHNfdG9fZ29bJGliZWdfbGFzdF07CiAgICByZXR1cm4gdW5sZXNzICggJGNpX2xldmVsc190b19nb1skaWJlZ19sYXN0XSApOwoKICAgICMgZG8gbm90IGNoYW5nZSBjaSB1bmRlciAtbHAgY29udHJvbAogICAgcmV0dXJuIGlmICggcmVmKCAkcmVkdWNlZF9zcGFjZXNfdG9fZ29bJGliZWdfbGFzdF0gKSApOwoKICAgIG15ICRsaW5lX3N0YXJ0ID0gJGxpbmVfbGFzdDsKICAgIGZvcmVhY2ggbXkgJGxpbmUgKCByZXZlcnNlKCAwIC4uICRsaW5lX2xhc3QgKSApIHsKICAgICAgICBteSAkaWJlZyA9ICRyaV9maXJzdC0+WyRsaW5lXTsKICAgICAgICByZXR1cm4gaWYgKCByZWYoICRyZWR1Y2VkX3NwYWNlc190b19nb1skaWJlZ10gKSApOwogICAgICAgIGxhc3QgICBpZiAoICEkY2lfbGV2ZWxzX3RvX2dvWyRpYmVnXSApOwogICAgICAgIGxhc3QgICBpZiAoICRsZXZlbHNfdG9fZ29bJGliZWddICE9ICRsZXZlbF9sYXN0ICk7CiAgICAgICAgJGxpbmVfc3RhcnQgPSAkbGluZTsKICAgIH0KCiAgICAjIFRoZXJlIG11c3QgYmUgYSBqdW1wIGluIGxldmVsIGFuZCBjaSBmcm9tIHRoZSBsaW5lIGJlZm9yZSB0aGUgc3RhcnQsCiAgICAjIGFuZCBpdCBtdXN0IGNvbnRhaW4gdGhlIG9wZW5pbmcgY29udGFpbmVyIHRva2VuLgogICAgbXkgJGxpbmVfbyA9ICRsaW5lX3N0YXJ0IC0gMTsKICAgIHJldHVybiBpZiAoICRsaW5lX28gPCAwICk7CiAgICBteSAkaWJlZ19vID0gJHJpX2ZpcnN0LT5bJGxpbmVfb107CiAgICBteSAkaWVuZF9vID0gJHJpX2xhc3QtPlskbGluZV9vXTsKICAgIHJldHVybiBpZiAoICRjaV9sZXZlbHNfdG9fZ29bJGliZWdfb10gKTsKICAgIHJldHVybiBpZiAoICRsZXZlbHNfdG9fZ29bJGliZWdfb10gPj0gJGxldmVsX2xhc3QgKTsKICAgIHJldHVybiBpZiAoICRpX29wZW5pbmcgPCAkaWJlZ19vIHx8ICRpX29wZW5pbmcgPiAkaWVuZF9vICk7CgogICAgIyBvayB0byB1bmRvIHRoZSBjaSBvZiB0aGlzIGdyb3VwCiAgICBmb3JlYWNoIG15ICRsaW5lX3QgKCAkbGluZV9zdGFydCAuLiAkbGluZV9sYXN0ICkgewogICAgICAgIG15ICRpYmVnX3QgPSAkcmlfZmlyc3QtPlskbGluZV90XTsKICAgICAgICAkY2lfbGV2ZWxzX3RvX2dvWyRpYmVnX3RdICAgICAgPSAwOwogICAgICAgICRsZWFkaW5nX3NwYWNlc190b19nb1skaWJlZ190XSA9ICRyZWR1Y2VkX3NwYWNlc190b19nb1skaWJlZ190XTsKICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHVuZG9fY29udGFpbmVkX2NpCgp7CiAgICBteSAldW5kb19leHRlbmRlZF9jaTsKCiAgICBzdWIgaW5pdGlhbGl6ZV91bmRvX2NpIHsKICAgICAgICAldW5kb19leHRlbmRlZF9jaSA9ICgpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBzdWIgdW5kb19jaSB7CgogICAgICAgICMgVW5kbyBjb250aW51YXRpb24gaW5kZW50YXRpb24gaW4gY2VydGFpbiBzZXF1ZW5jZXMKICAgICAgICBteSAoJHNlbGYpID0gQF87CgogICAgICAgIG15ICR0aGlzX2JhdGNoID0gJHNlbGYtPltfdGhpc19iYXRjaF9dOwogICAgICAgIG15ICRyaV9maXJzdCAgID0gJHRoaXNfYmF0Y2gtPltfcmlfZmlyc3RfXTsKICAgICAgICBteSAkcmlfbGFzdCAgICA9ICR0aGlzX2JhdGNoLT5bX3JpX2xhc3RfXTsKICAgICAgICBteSAkcml4X3NlcW5vX2NvbnRyb2xsaW5nX2NpID0KICAgICAgICAgICR0aGlzX2JhdGNoLT5bX3JpeF9zZXFub19jb250cm9sbGluZ19jaV9dOwoKICAgICAgICAjIEdpdmVuOgogICAgICAgICMgICAkcmlfZmlyc3QgPSByZWYgdG8gbGlzdCBvZiBzdGFydGluZyBsaW5lIGluZGV4ZXMgaW4gX3RvX2dvIGFycmF5cwogICAgICAgICMgICAkcmlfbGFzdCAgPSByZWYgdG8gbGlzdCBvZiBlbmRpbmcgbGluZSBpbmRleGVzIGluIF90b19nbyBhcnJheXMKICAgICAgICAjICAgJHJpeF9zZXFub19jb250cm9sbGluZ19jaSA9IGEgY29udHJvbCBhcnJheQoKICAgICAgICBteSAoICRsaW5lXzEsICRsaW5lXzIgKTsKICAgICAgICBteSAkbWF4X2xpbmUgPSBAeyRyaV9maXJzdH0gLSAxOwoKICAgICAgICBteSAkcnNlcW5vX2NvbnRyb2xsaW5nX215X2NpID0gJHNlbGYtPltfcnNlcW5vX2NvbnRyb2xsaW5nX215X2NpX107CgogICAgICAgICMgUHJlcGFyZSBhIGxpc3Qgb2YgY29udHJvbGxpbmcgaW5kZXhlcyBmb3IgZWFjaCBsaW5lIGlmIHJlcXVpcmVkLgogICAgICAgICMgVGhpcyBpcyB1c2VkIGZvciBlZmZpY2llbnQgcHJvY2Vzc2luZyBiZWxvdy4gIE5vdGU6IHRoaXMgaXMKICAgICAgICAjIGNyaXRpY2FsIGZvciBzcGVlZC4gSW4gdGhlIGluaXRpYWwgaW1wbGVtZW50YXRpb24gSSBqdXN0IGxvb3BlZAogICAgICAgICMgdGhyb3VnaCB0aGUgQCRyaXhfc2Vxbm9fY29udHJvbGxpbmdfY2kgbGlzdCBiZWxvdy4gVXNpbmcgTllUX3Byb2YsIEkKICAgICAgICAjIGZvdW5kIHRoYXQgdGhpcyByb3V0aW5lIHdhcyBjYXVzaW5nIGEgaHVnZSBydW4gdGltZSBpbiBsYXJnZSBsaXN0cy4KICAgICAgICAjIE9uIGEgdmVyeSBsYXJnZSBsaXN0IHRlc3QgY2FzZSwgdGhpcyBuZXcgY29kaW5nIGRyb3BwZWQgdGhlIHJ1biB0aW1lCiAgICAgICAgIyBvZiB0aGlzIHJvdXRpbmUgZnJvbSAzMCBzZWNvbmRzIHRvIDE2OSBtaWxsaXNlY29uZHMuCiAgICAgICAgbXkgQGlfY29udHJvbGxpbmdfY2k7CiAgICAgICAgaWYgKCAkcml4X3NlcW5vX2NvbnRyb2xsaW5nX2NpICYmIEB7JHJpeF9zZXFub19jb250cm9sbGluZ19jaX0gKSB7CiAgICAgICAgICAgIG15IEB0bXAgICAgID0gcmV2ZXJzZSBAeyRyaXhfc2Vxbm9fY29udHJvbGxpbmdfY2l9OwogICAgICAgICAgICBteSAkaXhfbmV4dCA9IHBvcCBAdG1wOwogICAgICAgICAgICBmb3JlYWNoIG15ICRsaW5lICggMCAuLiAkbWF4X2xpbmUgKSB7CiAgICAgICAgICAgICAgICBteSAkaWVuZCA9ICRyaV9sYXN0LT5bJGxpbmVdOwogICAgICAgICAgICAgICAgd2hpbGUgKCBkZWZpbmVkKCRpeF9uZXh0KSAmJiAkaXhfbmV4dCA8PSAkaWVuZCApIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEB7ICRpX2NvbnRyb2xsaW5nX2NpWyRsaW5lXSB9LCAkaXhfbmV4dDsKICAgICAgICAgICAgICAgICAgICAkaXhfbmV4dCA9IHBvcCBAdG1wOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIExvb3Agb3ZlciBhbGwgbGluZXMgb2YgdGhlIGJhdGNoIC4uLgoKICAgICAgICAjIFdvcmthcm91bmQgb3JpZ2luYWxseSBjcmVhdGVkIGZvciBwcm9ibGVtIGMwMDcsIGluIHdoaWNoIHRoZQogICAgICAgICMgY29tYmluYXRpb24gLWxwIC14Y2kgY291bGQgcHJvZHVjZSBhICJQcm9ncmFtIGJ1ZyIgbWVzc2FnZSBpbiB1bnVzdWFsCiAgICAgICAgIyBjaXJjdW1zdGFuY2VzLgogICAgICAgIG15ICRza2lwX1NFQ1RJT05fMTsKICAgICAgICBpZiAoICAgJHJPcHRzX2xpbmVfdXBfcGFyZW50aGVzZXMKICAgICAgICAgICAgJiYgJHJPcHRzX2V4dGVuZGVkX2NvbnRpbnVhdGlvbl9pbmRlbnRhdGlvbiApCiAgICAgICAgewoKICAgICAgICAgICAgIyBPbmx5IHNldCB0aGlzIGZsYWcgaWYgLWxwIGlzIGFjdHVhbGx5IHVzZWQgaGVyZQogICAgICAgICAgICBmb3JlYWNoIG15ICRsaW5lICggMCAuLiAkbWF4X2xpbmUgKSB7CiAgICAgICAgICAgICAgICBteSAkaWJlZyA9ICRyaV9maXJzdC0+WyRsaW5lXTsKICAgICAgICAgICAgICAgIGlmICggcmVmKCAkbGVhZGluZ19zcGFjZXNfdG9fZ29bJGliZWddICkgKSB7CiAgICAgICAgICAgICAgICAgICAgJHNraXBfU0VDVElPTl8xID0gMTsKICAgICAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAkbGluZV9kb3VibGVfanVtcDsKICAgICAgICBmb3JlYWNoIG15ICRsaW5lICggMCAuLiAkbWF4X2xpbmUgKSB7CgogICAgICAgICAgICBteSAkaWJlZyA9ICRyaV9maXJzdC0+WyRsaW5lXTsKICAgICAgICAgICAgbXkgJGllbmQgPSAkcmlfbGFzdC0+WyRsaW5lXTsKCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIFNFQ1RJT04gMTogVW5kbyBuZWVkbGVzcyBjb21tb24gQ0kKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICAgICAjIFdlIGFyZSBsb29raW5nIGF0IGxlYWRpbmcgdG9rZW5zIGFuZCBsb29raW5nIGZvciBhIHNlcXVlbmNlIGFsbAogICAgICAgICAgICAjIGF0IHRoZSBzYW1lIGxldmVsIGFuZCBhbGwgYXQgYSBoaWdoZXIgbGV2ZWwgdGhhbiBlbmNsb3NpbmcgbGluZXMuCgogICAgICAgICAgICAjIEZvciBleGFtcGxlLCB3ZSBjYW4gdW5kbyBjb250aW51YXRpb24gaW5kZW50YXRpb24gaW4gc29ydC9tYXAvZ3JlcAogICAgICAgICAgICAjIGNoYWlucwoKICAgICAgICAgICAgIyAgICBteSAkZGF0MSA9IHBhY2soICJuKiIsCiAgICAgICAgICAgICMgICAgICAgIG1hcCB7ICRfLCAkbG9va3VwLT57JF99IH0KICAgICAgICAgICAgIyAgICAgICAgICBzb3J0IHsgJGEgPD0+ICRiIH0KICAgICAgICAgICAgIyAgICAgICAgICBncmVwIHsgJGxvb2t1cC0+eyRffSBuZSAkZGVmYXVsdCB9IGtleXMgJSRsb29rdXAgKTsKCiAgICAgICAgICAgICMgdG8gYmVjb21lCgogICAgICAgICAgICAjICAgIG15ICRkYXQxID0gcGFjayggIm4qIiwKICAgICAgICAgICAgIyAgICAgICAgbWFwIHsgJF8sICRsb29rdXAtPnskX30gfQogICAgICAgICAgICAjICAgICAgICBzb3J0IHsgJGEgPD0+ICRiIH0KICAgICAgICAgICAgIyAgICAgICAgZ3JlcCB7ICRsb29rdXAtPnskX30gbmUgJGRlZmF1bHQgfSBrZXlzICUkbG9va3VwICk7CgogICAgICAgICAgICBpZiAoICRsaW5lICYmICEkc2tpcF9TRUNUSU9OXzEgKSB7CgogICAgICAgICAgICAgICAgbXkgJGliZWdfbGFzdCA9ICRyaV9maXJzdC0+WyAkbGluZSAtIDEgXTsKICAgICAgICAgICAgICAgIG15ICRsZXYgICAgICAgPSAkbGV2ZWxzX3RvX2dvWyRpYmVnXTsKICAgICAgICAgICAgICAgIG15ICRsZXZfbGFzdCAgPSAkbGV2ZWxzX3RvX2dvWyRpYmVnX2xhc3RdOwoKICAgICAgICAgICAgICAgICMgc2V0IGZsYWcgZm9yIGNhbGxpbmcgdW5kb19jb250YWluZWRfY2kKICAgICAgICAgICAgICAgIGlmICggICAkbGV2ID09ICRsZXZfbGFzdCArIDEKICAgICAgICAgICAgICAgICAgICAmJiAkY2lfbGV2ZWxzX3RvX2dvWyRpYmVnXQogICAgICAgICAgICAgICAgICAgICYmICEkY2lfbGV2ZWxzX3RvX2dvWyRpYmVnX2xhc3RdICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkbGluZV9kb3VibGVfanVtcCA9ICRsaW5lOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgaWYgd2UgaGF2ZSBzdGFydGVkIGEgY2hhaW4uLgogICAgICAgICAgICAgICAgaWYgKCRsaW5lXzEpIHsKCiAgICAgICAgICAgICAgICAgICAgIyBzZWUgaWYgaXQgY29udGludWVzLi4KICAgICAgICAgICAgICAgICAgICBpZiAoICRsZXYgPT0gJGxldl9sYXN0ICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICAgJHR5cGVzX3RvX2dvWyRpYmVnXSBlcSAnaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRpc19zb3J0X21hcF9ncmVweyAkdG9rZW5zX3RvX2dvWyRpYmVnXSB9ICkKICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2hhaW4gY29udGludWVzLi4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGZvciBjaGFpbiBlbmRpbmcgYXQgZW5kIG9mIGEgc3RhdGVtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkaXNfc2VtaWNvbG9uX3Rlcm1pbmF0ZWQgPSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmUgPT0gJG1heF9saW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlc190b19nb1skaWVuZF0gZXEgJzsnCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdpdGggcG9zc2libGUgc2lkZSBjb21tZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICggICAkdHlwZXNfdG9fZ29bJGllbmRdIGVxICcjJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJGllbmQgLSAkaWJlZyA+PSAyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkdHlwZXNfdG9fZ29bICRpZW5kIC0gMiBdIGVxICc7JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHR5cGVzX3RvX2dvWyAkaWVuZCAtIDEgXSBlcSAnYicgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGluZV8yID0gJGxpbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpc19zZW1pY29sb25fdGVybWluYXRlZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBraWxsIGNoYWluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGluZV8xID0gdW5kZWY7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkbGV2IDwgJGxldl9sYXN0ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGFpbiBlbmRzIHdpdGggcHJldmlvdXMgbGluZQogICAgICAgICAgICAgICAgICAgICAgICAkbGluZV8yID0gJGxpbmUgLSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgKCAkbGV2ID4gJGxldl9sYXN0ICkKICAgICAgICAgICAgICAgICAgICAgICAgIyBraWxsIGNoYWluCiAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lXzEgPSB1bmRlZjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgdW5kbyB0aGUgY29udGludWF0aW9uIGluZGVudGF0aW9uIGlmIGEgY2hhaW4gZW5kcwogICAgICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCgkbGluZV8yKSAmJiBkZWZpbmVkKCRsaW5lXzEpICkgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkY29udGludWF0aW9uX2xpbmVfY291bnQgPSAkbGluZV8yIC0gJGxpbmVfMSArIDE7CiAgICAgICAgICAgICAgICAgICAgICAgIEBjaV9sZXZlbHNfdG9fZ29bIEB7JHJpX2ZpcnN0fVsgJGxpbmVfMSAuLiAkbGluZV8yIF0gXQogICAgICAgICAgICAgICAgICAgICAgICAgID0gKDApIHggKCRjb250aW51YXRpb25fbGluZV9jb3VudCkKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRjb250aW51YXRpb25fbGluZV9jb3VudCA+PSAwICk7CiAgICAgICAgICAgICAgICAgICAgICAgIEBsZWFkaW5nX3NwYWNlc190b19nb1sgQHskcmlfZmlyc3R9CiAgICAgICAgICAgICAgICAgICAgICAgICAgWyAkbGluZV8xIC4uICRsaW5lXzIgXSBdID0KICAgICAgICAgICAgICAgICAgICAgICAgICBAcmVkdWNlZF9zcGFjZXNfdG9fZ29bIEB7JHJpX2ZpcnN0fQogICAgICAgICAgICAgICAgICAgICAgICAgIFsgJGxpbmVfMSAuLiAkbGluZV8yIF0gXTsKICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmVfMSA9IHVuZGVmOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIG5vdCBpbiBhIGNoYWluIHlldC4uCiAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgIyBsb29rIGZvciBzdGFydCBvZiBhIG5ldyBzb3J0L21hcC9ncmVwIGNoYWluCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkbGV2ID4gJGxldl9sYXN0ICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICAgJHR5cGVzX3RvX2dvWyRpYmVnXSBlcSAnaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRpc19zb3J0X21hcF9ncmVweyAkdG9rZW5zX3RvX2dvWyRpYmVnXSB9ICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmVfMSA9ICRsaW5lOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgIyBTRUNUSU9OIDI6IFVuZG8gY2kgYXQgY3VkZGxlZCBibG9ja3MKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgICAgICMgTm90ZSB0aGF0IHN1YiBnZXRfZmluYWxfaW5kZW50YXRpb24gd2lsbCBiZSBjYWxsZWQgbGF0ZXIgdG8KICAgICAgICAgICAgIyBhY3R1YWxseSBkbyB0aGlzLCBidXQgZm9yIG5vdyB3ZSB3aWxsIHRlbnRhdGl2ZWx5IG1hcmsgY3VkZGxlZAogICAgICAgICAgICAjIGxpbmVzIHdpdGggY2k9MCBzbyB0aGF0IHRoZSB0aGUgLXhjaSBsb29wIHdoaWNoIGZvbGxvd3Mgd2lsbCBiZQogICAgICAgICAgICAjIGNvcnJlY3QgYXQgY3VkZGxlcy4KICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJHR5cGVzX3RvX2dvWyRpYmVnXSBlcSAnfScKICAgICAgICAgICAgICAgICYmICggJG5lc3RpbmdfZGVwdGhfdG9fZ29bJGllbmRdICsgMSA9PQogICAgICAgICAgICAgICAgICAgICRuZXN0aW5nX2RlcHRoX3RvX2dvWyRpYmVnXSApCiAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBteSAkdGVybWluYWxfdHlwZSA9ICR0eXBlc190b19nb1skaWVuZF07CiAgICAgICAgICAgICAgICBpZiAoICR0ZXJtaW5hbF90eXBlIGVxICcjJyAmJiAkaWVuZCA+ICRpYmVnICkgewogICAgICAgICAgICAgICAgICAgICR0ZXJtaW5hbF90eXBlID0gJHR5cGVzX3RvX2dvWyAkaWVuZCAtIDEgXTsKICAgICAgICAgICAgICAgICAgICBpZiAoICR0ZXJtaW5hbF90eXBlIGVxICcjJyAmJiAkaWVuZCAtIDEgPiAkaWJlZyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRlcm1pbmFsX3R5cGUgPSAkdHlwZXNfdG9fZ29bICRpZW5kIC0gMiBdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIFBhdGNoIGZvciBydDE0NDk3OSwgcGFydCAyLiBDb29yZGluYXRlZCB3aXRoIHBhcnQgMS4KICAgICAgICAgICAgICAgICMgU2tpcCBjdWRkbGVkIGJyYWNlcy4KICAgICAgICAgICAgICAgIG15ICRzZXFub19iZWcgICAgICAgICAgICAgICAgPSAkdHlwZV9zZXF1ZW5jZV90b19nb1skaWJlZ107CiAgICAgICAgICAgICAgICBteSAkaXNfY3VkZGxlZF9jbG9zaW5nX2JyYWNlID0gJHNlcW5vX2JlZwogICAgICAgICAgICAgICAgICAmJiAkc2VsZi0+W19yaXNfY3VkZGxlZF9jbG9zaW5nX2JyYWNlX10tPnskc2Vxbm9fYmVnfTsKCiAgICAgICAgICAgICAgICBpZiAoICR0ZXJtaW5hbF90eXBlIGVxICd7JyAmJiAhJGlzX2N1ZGRsZWRfY2xvc2luZ19icmFjZSApIHsKICAgICAgICAgICAgICAgICAgICAkY2lfbGV2ZWxzX3RvX2dvWyRpYmVnXSA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIFNFQ1RJT04gMzogVW5kbyBjaSBzZXQgYnkgc3ViIGV4dGVuZGVkX2NpIGlmIG5vdCBuZWVkZWQKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICAgICAjIFVuZG8gdGhlIGNpIG9mIHRoZSBsZWFkaW5nIHRva2VuIGlmIGl0cyBjb250cm9sbGluZyB0b2tlbgogICAgICAgICAgICAjIHdlbnQgb3V0IG9uIGEgcHJldmlvdXMgbGluZSB3aXRob3V0IGNpCiAgICAgICAgICAgIGlmICggJGNpX2xldmVsc190b19nb1skaWJlZ10gKSB7CiAgICAgICAgICAgICAgICBteSAkS2JlZyAgPSAkS190b19nb1skaWJlZ107CiAgICAgICAgICAgICAgICBteSAkc2Vxbm8gPSAkcnNlcW5vX2NvbnRyb2xsaW5nX215X2NpLT57JEtiZWd9OwogICAgICAgICAgICAgICAgaWYgKCAkc2Vxbm8gJiYgJHVuZG9fZXh0ZW5kZWRfY2l7JHNlcW5vfSApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBidXQgZG8gbm90IHVuZG8gY2kgc2V0IGJ5IHRoZSAtbHAgZmxhZwogICAgICAgICAgICAgICAgICAgIGlmICggIXJlZiggJHJlZHVjZWRfc3BhY2VzX3RvX2dvWyRpYmVnXSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAkY2lfbGV2ZWxzX3RvX2dvWyRpYmVnXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICRsZWFkaW5nX3NwYWNlc190b19nb1skaWJlZ10gPQogICAgICAgICAgICAgICAgICAgICAgICAgICRyZWR1Y2VkX3NwYWNlc190b19nb1skaWJlZ107CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIEZsYWcgYW55IGNvbnRyb2xsaW5nIG9wZW5pbmcgdG9rZW5zIGluIGxpbmVzIHdpdGhvdXQgY2kuICBUaGlzCiAgICAgICAgICAgICMgd2lsbCBiZSB1c2VkIGxhdGVyIGluIHRoZSBhYm92ZSBpZiBzdGF0ZW1lbnQgdG8gdW5kbyB0aGUgY2kgd2hpY2gKICAgICAgICAgICAgIyB0aGV5IGFkZGVkLiAgVGhlIGFycmF5IGlfY29udHJvbGxpbmdfY2lbJGxpbmVdIHdhcyBwcmVwYXJlZCBhdAogICAgICAgICAgICAjIHRoZSB0b3Agb2YgdGhpcyByb3V0aW5lLgogICAgICAgICAgICBpZiAoICEkY2lfbGV2ZWxzX3RvX2dvWyRpYmVnXQogICAgICAgICAgICAgICAgJiYgZGVmaW5lZCggJGlfY29udHJvbGxpbmdfY2lbJGxpbmVdICkgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRpICggQHsgJGlfY29udHJvbGxpbmdfY2lbJGxpbmVdIH0gKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJHNlcW5vID0gJHR5cGVfc2VxdWVuY2VfdG9fZ29bJGldOwogICAgICAgICAgICAgICAgICAgICR1bmRvX2V4dGVuZGVkX2NpeyRzZXFub30gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgVW5kbyBjaSBpbiBjb250YWluZXJzIGlmIC1tY2kgaXMgc2V0CiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpZiAoICRsaW5lX2RvdWJsZV9qdW1wICYmICRyT3B0c19taW5pbWl6ZV9jb250aW51YXRpb25faW5kZW50YXRpb24gKSB7CiAgICAgICAgICAgICRzZWxmLT51bmRvX2NvbnRhaW5lZF9jaSggJHJpX2ZpcnN0LCAkcmlfbGFzdCApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIHVuZG9fY2kKfQoKeyAgICAjIyBiZWdpbiBjbG9zdXJlIHNldF9sb2dpY2FsX3BhZGRpbmcKICAgIG15ICVpc19tYXRoX29wOwoKICAgIEJFR0lOIHsKCiAgICAgICAgbXkgQHEgPSBxdyggKyAtICogLyApOwogICAgICAgIEBpc19tYXRoX29we0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CiAgICB9CgogICAgc3ViIHNldF9sb2dpY2FsX3BhZGRpbmcgewoKICAgICAgICBteSAoJHNlbGYpID0gQF87CgogICAgICAgICMgTG9vayBhdCBhIGJhdGNoIG9mIGxpbmVzIGFuZCBzZWUgaWYgZXh0cmEgcGFkZGluZyBjYW4gaW1wcm92ZSB0aGUKICAgICAgICAjIGFsaWdubWVudCB3aGVuIHRoZXJlIGFyZSBjZXJ0YWluIGxlYWRpbmcgb3BlcmF0b3JzLiBIZXJlIGlzIGFuCiAgICAgICAgIyBleGFtcGxlLCBpbiB3aGljaCBzb21lIGV4dHJhIHNwYWNlIGlzIGludHJvZHVjZWQgYmVmb3JlCiAgICAgICAgIyAnKCAkeWVhcicgdG8gbWFrZSBpdCBsaW5lIHVwIHdpdGggdGhlIHN1YnNlcXVlbnQgbGluZXM6CiAgICAgICAgIwogICAgICAgICMgICAgICAgaWYgKCAgICggJFllYXIgPCAxNjAxICkKICAgICAgICAjICAgICAgICAgICB8fCAoICRZZWFyID4gMjg5OSApCiAgICAgICAgIyAgICAgICAgICAgfHwgKCAkRW5kWWVhciA8IDE2MDEgKQogICAgICAgICMgICAgICAgICAgIHx8ICggJEVuZFllYXIgPiAyODk5ICkgKQogICAgICAgICMgICAgICAgewogICAgICAgICMgICAgICAgICAgICZFcnJvcl9PdXRPZlJhbmdlOwogICAgICAgICMgICAgICAgfQoKICAgICAgICBteSAkdGhpc19iYXRjaCA9ICRzZWxmLT5bX3RoaXNfYmF0Y2hfXTsKCiAgICAgICAgbXkgJHJpX2ZpcnN0ICAgICAgICAgID0gJHRoaXNfYmF0Y2gtPltfcmlfZmlyc3RfXTsKICAgICAgICBteSAkcmlfbGFzdCAgICAgICAgICAgPSAkdGhpc19iYXRjaC0+W19yaV9sYXN0X107CiAgICAgICAgbXkgJHN0YXJ0aW5nX2luX3F1b3RlID0gJHRoaXNfYmF0Y2gtPltfc3RhcnRpbmdfaW5fcXVvdGVfXTsKCiAgICAgICAgbXkgJG1heF9saW5lID0gQHskcmlfZmlyc3R9IC0gMTsKCiAgICAgICAgbXkgKCAkaWJlZywgJGliZWdfbmV4dCwgJGliZWdtLCAkaWVuZCwgJGllbmRtLCAkaXBhZCwgJHBhZF9zcGFjZXMsCiAgICAgICAgICAgICR0b2tfbmV4dCwgJHR5cGVfbmV4dCwgJGhhc19sZWFkaW5nX29wX25leHQsICRoYXNfbGVhZGluZ19vcCApOwoKICAgICAgICAjIFBhdGNoIHRvIHByb2R1Y2UgcGFkZGluZyBpbiB0aGUgZmlyc3QgbGluZSBvZiBzaG9ydCBjb2RlIGJsb2Nrcy4KICAgICAgICAjIFRoaXMgaXMgcGFydCBvZiBhbiB1cGRhdGUgdG8gZml4IGNhc2VzIGI1NjIgLi4gYjk4My4KICAgICAgICAjIFRoaXMgaXMgbmVlZGVkIHRvIGNvbXBlbnNhdGUgZm9yIGEgY2hhbmdlIHdoaWNoIHdhcyBtYWRlIGluICdzdWIKICAgICAgICAjIHN0YXJ0aW5nX29uZV9saW5lX2Jsb2NrJyB0byBwcmV2ZW50IGJsaW5rZXJzLiAgUHJldmlvdXNseSwgdGhhdCBzdWIKICAgICAgICAjIHdvdWxkIG5vdCBsb29rIGF0IHRoZSB0b3RhbCBibG9jayBzaXplIGFuZCByZWx5IG9uIHN1YgogICAgICAgICMgYnJlYWtfbG9uZ19saW5lcyB0byBicmVhayB1cCBsb25nIGJsb2Nrcy4gQ29uc2VxdWVudGx5LCB0aGUKICAgICAgICAjIGZpcnN0IGxpbmUgb2YgdGhvc2UgYmF0Y2hlcyB3b3VsZCBlbmQgaW4gdGhlIG9wZW5pbmcgYmxvY2sgYnJhY2Ugb2YgYQogICAgICAgICMgc29ydC9tYXAvZ3JlcC9ldmFsIGJsb2NrLiAgV2hlbiB0aGlzIHdhcyBjaGFuZ2VkIHRvIGltbWVkaWF0ZWx5IGNoZWNrCiAgICAgICAgIyBmb3IgYmxvY2tzIHdoaWNoIHdlcmUgdG9vIGxvbmcsIHRoZSBvcGVuaW5nIGJsb2NrIGJyYWNlIHdvdWxkIGdvIG91dAogICAgICAgICMgaW4gYSBzaW5nbGUgYmF0Y2gsIGFuZCB0aGUgYmxvY2sgY29udGVudHMgd291bGQgZ28gb3V0IGFzIHRoZSBuZXh0CiAgICAgICAgIyBiYXRjaC4gIFRoaXMgY2F1c2VkIHRoZSBsb2dpYyBpbiB0aGlzIHJvdXRpbmUgd2hpY2ggZGVjaWRlcyBpZiB0aGUKICAgICAgICAjIGZpcnN0IGxpbmUgc2hvdWxkIGJlIHBhZGRlZCB0byBiZSBpbmNvcnJlY3QuICBUbyBmaXggdGhpcywgd2Ugc2V0IGEKICAgICAgICAjIGZsYWcgaWYgdGhlIHByZXZpb3VzIGJhdGNoIGVuZGVkIGluIGFuIG9wZW5pbmcgc29ydC9tYXAvZ3JlcC9ldmFsCiAgICAgICAgIyBibG9jayBicmFjZSwgYW5kIHVzZSBpdCB0byBhZGp1c3QgdGhlIGxvZ2ljIHRvIGNvbXBlbnNhdGUuCgogICAgICAgICMgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgd291bGQgaGF2ZSBwcmV2aW91c2x5IGJlZW4gYSBzaW5nbGUgYmF0Y2gKICAgICAgICAjIGJ1dCBub3cgaXMgdHdvIGJhdGNoZXMuICBXZSB3YW50IHRvIHBhZCB0aGUgbGluZSBzdGFydGluZyBpbiAnJGRpcic6CiAgICAgICAgIyAgICBteSAoQGluZGljZXMpID0gICAgICAgICAgICAgICAgICAgICAgIyBiYXRjaCBuLTEgIChwcmV2IGJhdGNoIG4pCiAgICAgICAgIyAgICAgIHNvcnQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBiYXRjaCBuLTEgIChwcmV2IGJhdGNoIG4pCiAgICAgICAgIyAgICAgICAgICAgICRkaXIgZXEgJ2xlZnQnICAgICAgICAgICAgICAgIyBiYXRjaCBuCiAgICAgICAgIyAgICAgICAgICA/ICRjZWxsc1skYV0gPD0+ICRjZWxsc1skYl0gICAgIyBiYXRjaCBuCiAgICAgICAgIyAgICAgICAgICA6ICRjZWxsc1skYl0gPD0+ICRjZWxsc1skYV07ICAgIyBiYXRjaCBuCiAgICAgICAgIyAgICAgIH0gKCAwIC4uICQjY2VsbHMgKTsgICAgICAgICAgICAgICAgIyBiYXRjaCBuCgogICAgICAgIG15ICRyTEwgICAgICAgICAgICAgICAgICA9ICRzZWxmLT5bX3JMTF9dOwogICAgICAgIG15ICRyYmxvY2tfdHlwZV9vZl9zZXFubyA9ICRzZWxmLT5bX3JibG9ja190eXBlX29mX3NlcW5vX107CgogICAgICAgIG15ICRpc19zaG9ydF9ibG9jazsKICAgICAgICBpZiAoICRLX3RvX2dvWzBdID4gMCApIHsKICAgICAgICAgICAgbXkgJEtwID0gJEtfdG9fZ29bMF0gLSAxOwogICAgICAgICAgICBpZiAoICRLcCA+IDAgJiYgJHJMTC0+WyRLcF0tPltfVFlQRV9dIGVxICdiJyApIHsKICAgICAgICAgICAgICAgICRLcCAtPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggJEtwID4gMCAmJiAkckxMLT5bJEtwXS0+W19UWVBFX10gZXEgJyMnICkgewogICAgICAgICAgICAgICAgJEtwIC09IDE7CiAgICAgICAgICAgICAgICBpZiAoICRLcCA+IDAgJiYgJHJMTC0+WyRLcF0tPltfVFlQRV9dIGVxICdiJyApIHsKICAgICAgICAgICAgICAgICAgICAkS3AgLT0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBteSAkc2Vxbm8gPSAkckxMLT5bJEtwXS0+W19UWVBFX1NFUVVFTkNFX107CiAgICAgICAgICAgIGlmICgkc2Vxbm8pIHsKICAgICAgICAgICAgICAgIG15ICRibG9ja190eXBlID0gJHJibG9ja190eXBlX29mX3NlcW5vLT57JHNlcW5vfTsKICAgICAgICAgICAgICAgIGlmICgkYmxvY2tfdHlwZSkgewogICAgICAgICAgICAgICAgICAgICRpc19zaG9ydF9ibG9jayA9ICRpc19zb3J0X21hcF9ncmVwX2V2YWx7JGJsb2NrX3R5cGV9OwogICAgICAgICAgICAgICAgICAgICRpc19zaG9ydF9ibG9jayB8fD0gJHdhbnRfb25lX2xpbmVfYmxvY2t7JGJsb2NrX3R5cGV9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGxvb2tpbmcgYXQgZWFjaCBsaW5lIG9mIHRoaXMgYmF0Y2guLgogICAgICAgIGZvcmVhY2ggbXkgJGxpbmUgKCAwIC4uICRtYXhfbGluZSAtIDEgKSB7CgogICAgICAgICAgICAjIHNlZSBpZiB0aGUgbmV4dCBsaW5lIGJlZ2lucyB3aXRoIGEgbG9naWNhbCBvcGVyYXRvcgogICAgICAgICAgICAkaWJlZyAgICAgID0gJHJpX2ZpcnN0LT5bJGxpbmVdOwogICAgICAgICAgICAkaWVuZCAgICAgID0gJHJpX2xhc3QtPlskbGluZV07CiAgICAgICAgICAgICRpYmVnX25leHQgPSAkcmlfZmlyc3QtPlsgJGxpbmUgKyAxIF07CiAgICAgICAgICAgICR0b2tfbmV4dCAgPSAkdG9rZW5zX3RvX2dvWyRpYmVnX25leHRdOwogICAgICAgICAgICAkdHlwZV9uZXh0ID0gJHR5cGVzX3RvX2dvWyRpYmVnX25leHRdOwoKICAgICAgICAgICAgJGhhc19sZWFkaW5nX29wX25leHQgPSAoICR0eXBlX25leHQgZXEgJ2snICkKICAgICAgICAgICAgICA/ICRpc19jaGFpbl9vcGVyYXRvcnskdG9rX25leHR9ICAgICAgIyBhbmQsIG9yCiAgICAgICAgICAgICAgOiAkaXNfY2hhaW5fb3BlcmF0b3J7JHR5cGVfbmV4dH07ICAgICMgKyAtICogLyA6ID8gJiYgfHwKCiAgICAgICAgICAgICMgRml4IGZvciBnaXQxMzQKICAgICAgICAgICAgaWYgKCAgISRoYXNfbGVhZGluZ19vcF9uZXh0CiAgICAgICAgICAgICAgICAmJiAkaWVuZCA+ICRpYmVnICsgMgogICAgICAgICAgICAgICAgJiYgJHR5cGVzX3RvX2dvWyAkaWJlZyArIDEgXSBlcSAnYicKICAgICAgICAgICAgICAgICYmICRpc19vcGVuaW5nX3R5cGV7ICR0eXBlc190b19nb1skaWJlZ10gfQogICAgICAgICAgICAgICAgJiYgJG5lc3RpbmdfZGVwdGhfdG9fZ29bJGllbmRdID4gJG5lc3RpbmdfZGVwdGhfdG9fZ29bJGliZWddICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbXkgJGllbmRfbmV4dCA9ICRyaV9sYXN0LT5bICRsaW5lICsgMSBdOwogICAgICAgICAgICAgICAgJHNlbGYtPnBhZF9icm9rZW5fbGlzdCggJGliZWcsICRpZW5kLCAkaWJlZ19uZXh0LCAkaWVuZF9uZXh0ICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG5leHQgdW5sZXNzICgkaGFzX2xlYWRpbmdfb3BfbmV4dCk7CgogICAgICAgICAgICAjIG5leHQgbGluZSBtdXN0IG5vdCBiZSBhdCBsZXNzZXIgZGVwdGgKICAgICAgICAgICAgbmV4dAogICAgICAgICAgICAgIGlmICggJG5lc3RpbmdfZGVwdGhfdG9fZ29bJGliZWddID4KICAgICAgICAgICAgICAgICRuZXN0aW5nX2RlcHRoX3RvX2dvWyRpYmVnX25leHRdICk7CgogICAgICAgICAgICAjIGlkZW50aWZ5IHRoZSB0b2tlbiBpbiB0aGlzIGxpbmUgdG8gYmUgcGFkZGVkIG9uIHRoZSBsZWZ0CiAgICAgICAgICAgICRpcGFkID0gdW5kZWY7CgogICAgICAgICAgICAjIGhhbmRsZSBsaW5lcyBhdCBzYW1lIGRlcHRoLi4uCiAgICAgICAgICAgIGlmICggJG5lc3RpbmdfZGVwdGhfdG9fZ29bJGliZWddID09CiAgICAgICAgICAgICAgICAkbmVzdGluZ19kZXB0aF90b19nb1skaWJlZ19uZXh0XSApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIGlmIHRoaXMgaXMgbm90IGZpcnN0IGxpbmUgb2YgdGhlIGJhdGNoIC4uLgogICAgICAgICAgICAgICAgaWYgKCAkbGluZSA+IDAgKSB7CgogICAgICAgICAgICAgICAgICAgICMgYW5kIHdlIGhhdmUgbGVhZGluZyBvcGVyYXRvci4uCiAgICAgICAgICAgICAgICAgICAgbmV4dCBpZiAkaGFzX2xlYWRpbmdfb3A7CgogICAgICAgICAgICAgICAgICAgICMgSW50cm9kdWNlIHBhZGRpbmcgaWYuLgogICAgICAgICAgICAgICAgICAgICMgMS4gdGhlIHByZXZpb3VzIGxpbmUgaXMgYXQgbGVzc2VyIGRlcHRoLCBvcgogICAgICAgICAgICAgICAgICAgICMgMi4gdGhlIHByZXZpb3VzIGxpbmUgZW5kcyBpbiBhbiBhc3NpZ25tZW50CiAgICAgICAgICAgICAgICAgICAgIyAzLiB0aGUgcHJldmlvdXMgbGluZSBlbmRzIGluIGEgJ3JldHVybicKICAgICAgICAgICAgICAgICAgICAjIDQuIHRoZSBwcmV2aW91cyBsaW5lIGVuZHMgaW4gYSBjb21tYQogICAgICAgICAgICAgICAgICAgICMgRXhhbXBsZSAxOiBwcmV2aW91cyBsaW5lIGF0IGxlc3NlciBkZXB0aAogICAgICAgICAgICAgICAgICAgICMgICAgICAgaWYgKCAgICggJFllYXIgPCAxNjAxICkgICAgICAjIDwtIHdlIGFyZSBoZXJlIGJ1dAogICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIHx8ICggJFllYXIgPiAyODk5ICkgICAgICAjICBsaXN0IGhhcyBub3QgeWV0CiAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgfHwgKCAkRW5kWWVhciA8IDE2MDEgKSAgICMgY29sbGFwc2VkIHZlcnRpY2FsbHkKICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICB8fCAoICRFbmRZZWFyID4gMjg5OSApICkKICAgICAgICAgICAgICAgICAgICAjICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAjCiAgICAgICAgICAgICAgICAgICAgIyBFeGFtcGxlIDI6IHByZXZpb3VzIGxpbmUgZW5kaW5nIGluIGFzc2lnbm1lbnQ6CiAgICAgICAgICAgICAgICAgICAgIyAgICAkbGVhcHllYXIgPQogICAgICAgICAgICAgICAgICAgICMgICAgICAgICR5ZWFyICUgNCAgID8gMCAgICAgIyA8LSBXZSBhcmUgaGVyZQogICAgICAgICAgICAgICAgICAgICMgICAgICA6ICR5ZWFyICUgMTAwID8gMQogICAgICAgICAgICAgICAgICAgICMgICAgICA6ICR5ZWFyICUgNDAwID8gMAogICAgICAgICAgICAgICAgICAgICMgICAgICA6IDE7CiAgICAgICAgICAgICAgICAgICAgIwogICAgICAgICAgICAgICAgICAgICMgRXhhbXBsZSAzOiBwcmV2aW91cyBsaW5lIGVuZGluZyBpbiBjb21tYToKICAgICAgICAgICAgICAgICAgICAjICAgIHB1c2ggQGV4cHIsCiAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgL3Rlc3QvICAgPyB1bmRlZgogICAgICAgICAgICAgICAgICAgICMgICAgICA6IGV2YWwoJF8pID8gMQogICAgICAgICAgICAgICAgICAgICMgICAgICA6IGV2YWwoJF8pID8gMQogICAgICAgICAgICAgICAgICAgICMgICAgICA6ICAgICAgICAgICAgMDsKCiAgICAgICAgICAgICAgICAgICAgIyBiZSBzdXJlIGxldmVscyBhZ3JlZSAobmV2ZXIgaW5kZW50IGFmdGVyIGFuIGluZGVudGVkICdpZicpCiAgICAgICAgICAgICAgICAgICAgbmV4dAogICAgICAgICAgICAgICAgICAgICAgaWYgKCAkbGV2ZWxzX3RvX2dvWyRpYmVnXSBuZSAkbGV2ZWxzX3RvX2dvWyRpYmVnX25leHRdICk7CgogICAgICAgICAgICAgICAgICAgICMgYWxsb3cgcGFkZGluZyBvbiBmaXJzdCBsaW5lIGFmdGVyIGEgY29tbWEgYnV0IG9ubHkgaWY6CiAgICAgICAgICAgICAgICAgICAgIyAoMSkgdGhpcyBpcyBsaW5lIDIgYW5kCiAgICAgICAgICAgICAgICAgICAgIyAoMikgdGhlcmUgYXJlIGF0IG1vcmUgdGhhbiB0aHJlZSBsaW5lcyBhbmQKICAgICAgICAgICAgICAgICAgICAjICgzKSBsaW5lcyAzIGFuZCA0IGhhdmUgdGhlIHNhbWUgbGVhZGluZyBvcGVyYXRvcgogICAgICAgICAgICAgICAgICAgICMgVGhlc2UgcnVsZXMgdHJ5IHRvIHByZXZlbnQgcGFkZGluZyB3aXRoaW4gYSBsb25nCiAgICAgICAgICAgICAgICAgICAgIyBjb21tYS1zZXBhcmF0ZWQgbGlzdC4KICAgICAgICAgICAgICAgICAgICBteSAkb2tfY29tbWE7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAgICR0eXBlc190b19nb1skaWVuZG1dIGVxICcsJwogICAgICAgICAgICAgICAgICAgICAgICAmJiAkbGluZSA9PSAxCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRtYXhfbGluZSA+IDIgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGliZWdfbmV4dF9uZXh0ID0gJHJpX2ZpcnN0LT5bICRsaW5lICsgMiBdOwogICAgICAgICAgICAgICAgICAgICAgICBteSAkdG9rX25leHRfbmV4dCAgPSAkdG9rZW5zX3RvX2dvWyRpYmVnX25leHRfbmV4dF07CiAgICAgICAgICAgICAgICAgICAgICAgICRva19jb21tYSA9ICR0b2tfbmV4dF9uZXh0IGVxICR0b2tfbmV4dDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIG15ICRva19wYWQgPSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlzX2Fzc2lnbm1lbnR7ICR0eXBlc190b19nb1skaWVuZG1dIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAkb2tfY29tbWEKICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoICRuZXN0aW5nX2RlcHRoX3RvX2dvWyRpYmVnbV0gPAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5lc3RpbmdfZGVwdGhfdG9fZ29bJGliZWddICkKICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoICR0eXBlc190b19nb1skaWVuZG1dIGVxICdrJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHRva2Vuc190b19nb1skaWVuZG1dIGVxICdyZXR1cm4nICkKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIG5leHQgaWYgKCAhJG9rX3BhZCApOwoKICAgICAgICAgICAgICAgICAgICAjIHdlIHdpbGwgYWRkIHBhZGRpbmcgYmVmb3JlIHRoZSBmaXJzdCB0b2tlbgogICAgICAgICAgICAgICAgICAgICRpcGFkID0gJGliZWc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBmb3IgZmlyc3QgbGluZSBvZiB0aGUgYmF0Y2guLgogICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICMgV0FSTklORzogTmV2ZXIgaW5kZW50IGlmIGZpcnN0IGxpbmUgaXMgc3RhcnRpbmcgaW4gYQogICAgICAgICAgICAgICAgICAgICMgY29udGludWVkIHF1b3RlLCB3aGljaCB3b3VsZCBjaGFuZ2UgdGhlIHF1b3RlLgogICAgICAgICAgICAgICAgICAgIG5leHQgaWYgJHN0YXJ0aW5nX2luX3F1b3RlOwoKICAgICAgICAgICAgICAgICAgICAjIGlmIHRoaXMgaXMgdGV4dCBhZnRlciBjbG9zaW5nICd9JwogICAgICAgICAgICAgICAgICAgICMgdGhlbiBsb29rIGZvciBhbiBpbnRlcmlvciB0b2tlbiB0byBwYWQKICAgICAgICAgICAgICAgICAgICBpZiAoICR0eXBlc190b19nb1skaWJlZ10gZXEgJ30nICkgewoKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgb3RoZXJ3aXNlLCB3ZSBtaWdodCBwYWQgaWYgaXQgbG9va3MgcmVhbGx5IGdvb2QKICAgICAgICAgICAgICAgICAgICBlbHNpZiAoJGlzX3Nob3J0X2Jsb2NrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRpcGFkID0gJGliZWc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyB3ZSBtaWdodCBwYWQgdG9rZW4gJGliZWcsIHNvIGJlIHN1cmUgdGhhdCBpdAogICAgICAgICAgICAgICAgICAgICAgICAjIGlzIGF0IHRoZSBzYW1lIGRlcHRoIGFzIHRoZSBuZXh0IGxpbmUuCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRuZXN0aW5nX2RlcHRoX3RvX2dvWyRpYmVnXSAhPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5lc3RpbmdfZGVwdGhfdG9fZ29bJGliZWdfbmV4dF0gKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgY2FuIHBhZCBvbiBsaW5lIDEgb2YgYSBzdGF0ZW1lbnQgaWYgYXQgbGVhc3QgMwogICAgICAgICAgICAgICAgICAgICAgICAjIGxpbmVzIHdpbGwgYmUgYWxpZ25lZC4gT3RoZXJ3aXNlLCBpdAogICAgICAgICAgICAgICAgICAgICAgICAjIGNhbiBsb29rIHZlcnkgY29uZnVzaW5nLgoKICAgICAgICAgICAgICAgICAjIFdlIGhhdmUgdG8gYmUgY2FyZWZ1bCBub3QgdG8gcGFkIGlmIHRoZXJlIGFyZSB0b28gZmV3CiAgICAgICAgICAgICAgICAgIyBsaW5lcy4gIFRoZSBjdXJyZW50IHJ1bGUgaXM6CiAgICAgICAgICAgICAgICAgIyAoMSkgaW4gZ2VuZXJhbCB3ZSByZXF1aXJlIGF0IGxlYXN0IDMgY29uc2VjdXRpdmUgbGluZXMKICAgICAgICAgICAgICAgICAjIHdpdGggdGhlIHNhbWUgbGVhZGluZyBjaGFpbiBvcGVyYXRvciB0b2tlbiwKICAgICAgICAgICAgICAgICAjICgyKSBidXQgYW4gZXhjZXB0aW9uIGlzIHRoYXQgd2Ugb25seSByZXF1aXJlIHR3byBsaW5lcwogICAgICAgICAgICAgICAgICMgd2l0aCBsZWFkaW5nIGNvbG9ucyBpZiB0aGVyZSBhcmUgbm8gbW9yZSBsaW5lcy4gIEZvciBleGFtcGxlLAogICAgICAgICAgICAgICAgICMgdGhlIGZpcnN0ICRpIGluIHRoZSBmb2xsb3dpbmcgc25pcHBldCB3b3VsZCBnZXQgcGFkZGluZwogICAgICAgICAgICAgICAgICMgYnkgdGhlIHNlY29uZCBydWxlOgogICAgICAgICAgICAgICAgICMKICAgICAgICAgICAgICAgICAjICAgJGkgPT0gMSA/ICggIkZpcnN0IiwgIkNvbG9yIiApCiAgICAgICAgICAgICAgICAgIyA6ICRpID09IDIgPyAoICJUaGVuIiwgICJSYXJpdHkiICkKICAgICAgICAgICAgICAgICAjIDogICAgICAgICAgICggIlRoZW4iLCAgIk5hbWUiICk7CgogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IGlmICggJG1heF9saW5lIDw9IDEgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRsZWFkaW5nX3Rva2VuID0gJHRva2Vuc190b19nb1skaWJlZ19uZXh0XTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHRva2Vuc19kaWZmZXI7CgogICAgICAgICAgICAgICAgICAgICAgICAjIG5ldmVyIGluZGVudCBsaW5lIDEgb2YgYSAnLicgc2VyaWVzIGJlY2F1c2UKICAgICAgICAgICAgICAgICAgICAgICAgIyBwcmV2aW91cyBsaW5lIGlzIG1vc3QgbGlrZWx5IGF0IHNhbWUgbGV2ZWwuCiAgICAgICAgICAgICAgICAgICAgICAgICMgVE9ETzogd2Ugc2hvdWxkIGFsc28gbG9vayBhdCB0aGUgbGVhZGluZ19zcGFjZXMKICAgICAgICAgICAgICAgICAgICAgICAgIyBvZiB0aGUgbGFzdCBvdXRwdXQgbGluZSBhbmQgc2tpcCBpZiBpdCBpcyBzYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICMgYXMgdGhpcyBsaW5lLgogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IGlmICggJGxlYWRpbmdfdG9rZW4gZXEgJy4nICk7CgogICAgICAgICAgICAgICAgICAgICAgICBteSAkY291bnQgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRsICggMiAuLiAzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCBpZiAoICRsaW5lICsgJGwgPiAkbWF4X2xpbmUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb3VudCsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGliZWdfbmV4dF9uZXh0ID0gJHJpX2ZpcnN0LT5bICRsaW5lICsgJGwgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkdG9rZW5zX3RvX2dvWyRpYmVnX25leHRfbmV4dF0gZXEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGVhZGluZ190b2tlbiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRva2Vuc19kaWZmZXIgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IGlmICgkdG9rZW5zX2RpZmZlcik7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgaWYgKCAkY291bnQgPCAzICYmICRsZWFkaW5nX3Rva2VuIG5lICc6JyApOwogICAgICAgICAgICAgICAgICAgICAgICAkaXBhZCA9ICRpYmVnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBmaW5kIGludGVyaW9yIHRva2VuIHRvIHBhZCBpZiBuZWNlc3NhcnkKICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkaXBhZCkgKSB7CgogICAgICAgICAgICAgICAgZm9yZWFjaCBteSAkaSAoICRpYmVnIC4uICRpZW5kIC0gMSApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBmaW5kIGFueSB1bmNsb3NlZCBjb250YWluZXIKICAgICAgICAgICAgICAgICAgICBuZXh0CiAgICAgICAgICAgICAgICAgICAgICBpZiAoICEkdHlwZV9zZXF1ZW5jZV90b19nb1skaV0KICAgICAgICAgICAgICAgICAgICAgICAgfHwgIWRlZmluZWQoICRtYXRlX2luZGV4X3RvX2dvWyRpXSApCiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRtYXRlX2luZGV4X3RvX2dvWyRpXSA8PSAkaWVuZCApOwoKICAgICAgICAgICAgICAgICAgICAjIGZpbmQgbmV4dCBub25ibGFuayB0b2tlbiB0byBwYWQKICAgICAgICAgICAgICAgICAgICAkaXBhZCA9ICRpbmV4dF90b19nb1skaV07CiAgICAgICAgICAgICAgICAgICAgbGFzdCBpZiAkaXBhZDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxhc3QgaWYgKCAhJGlwYWQgfHwgJGlwYWQgPiAkaWVuZCApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFdlIGNhbm5vdCBwYWQgdGhlIGZpcnN0IGxlYWRpbmcgdG9rZW4gb2YgYSBmaWxlIGJlY2F1c2UKICAgICAgICAgICAgIyBpdCBjb3VsZCBjYXVzZSBhIGJ1ZyBpbiB3aGljaCB0aGUgc3RhcnRpbmcgaW5kZW50YXRpb24KICAgICAgICAgICAgIyBsZXZlbCBpcyBndWVzc2VkIGluY29ycmVjdGx5IGVhY2ggdGltZSB0aGUgY29kZSBpcyBydW4KICAgICAgICAgICAgIyB0aG91Z2ggcGVybHRpZHksIHRodXMgY2F1c2luZyB0aGUgY29kZSB0byBtYXJjaCBvZmYgdG8KICAgICAgICAgICAgIyB0aGUgcmlnaHQuICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzbmlwcGV0IHdvdWxkIGhhdmUKICAgICAgICAgICAgIyB0aGlzIHByb2JsZW06CgojIyAgICAgb3ZfbWV0aG9kIG15Y2FuKCAkcGFja2FnZSwgJygiIicgKSwgICAgICAgJHBhY2thZ2UKIyMgIG9yIG92X21ldGhvZCBteWNhbiggJHBhY2thZ2UsICcoMCsnICksICAgICAgICRwYWNrYWdlCiMjICBvciBvdl9tZXRob2QgbXljYW4oICRwYWNrYWdlLCAnKGJvb2wnICksICAgICAkcGFja2FnZQojIyAgb3Igb3ZfbWV0aG9kIG15Y2FuKCAkcGFja2FnZSwgJyhub21ldGhvZCcgKSwgJHBhY2thZ2U7CgogICAgICAgICAgICAjIElmIHRoaXMgc25pcHBldCBpcyB3aXRoaW4gYSBibG9jayB0aGlzIHdvbid0IGhhcHBlbgogICAgICAgICAgICAjIHVubGVzcyB0aGUgdXNlciBqdXN0IHByb2Nlc3NlcyB0aGUgc25pcHBldCBhbG9uZSB3aXRoaW4KICAgICAgICAgICAgIyBhbiBlZGl0b3IuICBJbiB0aGF0IGNhc2UgZWl0aGVyIHRoZSB1c2VyIHdpbGwgc2VlIGFuZAogICAgICAgICAgICAjIGZpeCB0aGUgcHJvYmxlbSBvciBpdCB3aWxsIGJlIGNvcnJlY3RlZCBuZXh0IHRpbWUgdGhlCiAgICAgICAgICAgICMgZW50aXJlIGZpbGUgaXMgcHJvY2Vzc2VkIHdpdGggcGVybHRpZHkuCiAgICAgICAgICAgIG15ICRwZWFrX2JhdGNoX3NpemUgPSAkdGhpc19iYXRjaC0+W19wZWFrX2JhdGNoX3NpemVfXTsKICAgICAgICAgICAgbmV4dCBpZiAoICRpcGFkID09IDAgJiYgJHBlYWtfYmF0Y2hfc2l6ZSA8PSAxICk7CgogICAgICAgICAgICAjIG5leHQgbGluZSBtdXN0IG5vdCBiZSBhdCBncmVhdGVyIGRlcHRoCiAgICAgICAgICAgIG15ICRpZW5kX25leHQgPSAkcmlfbGFzdC0+WyAkbGluZSArIDEgXTsKICAgICAgICAgICAgbmV4dAogICAgICAgICAgICAgIGlmICggJG5lc3RpbmdfZGVwdGhfdG9fZ29bICRpZW5kX25leHQgKyAxIF0gPgogICAgICAgICAgICAgICAgJG5lc3RpbmdfZGVwdGhfdG9fZ29bJGlwYWRdICk7CgogICAgICAgICAgICAjIGxpbmVzIG11c3QgYmUgc29tZXdoYXQgc2ltaWxhciB0byBiZSBwYWRkZWQuLgogICAgICAgICAgICBteSAkaW5leHRfbmV4dCA9ICRpbmV4dF90b19nb1skaWJlZ19uZXh0XTsKICAgICAgICAgICAgbXkgJHR5cGUgICAgICAgPSAkdHlwZXNfdG9fZ29bJGlwYWRdOwoKICAgICAgICAgICAgIyBzZWUgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGNvbnRpbnVhdGlvbiBsaW5lcwogICAgICAgICAgICBteSAkbG9naWNhbF9jb250aW51YXRpb25fbGluZXMgPSAxOwogICAgICAgICAgICBpZiAoICRsaW5lICsgMiA8PSAkbWF4X2xpbmUgKSB7CiAgICAgICAgICAgICAgICBteSAkbGVhZGluZ190b2tlbiAgPSAkdG9rZW5zX3RvX2dvWyRpYmVnX25leHRdOwogICAgICAgICAgICAgICAgbXkgJGliZWdfbmV4dF9uZXh0ID0gJHJpX2ZpcnN0LT5bICRsaW5lICsgMiBdOwogICAgICAgICAgICAgICAgaWYgKCAgICR0b2tlbnNfdG9fZ29bJGliZWdfbmV4dF9uZXh0XSBlcSAkbGVhZGluZ190b2tlbgogICAgICAgICAgICAgICAgICAgICYmICRuZXN0aW5nX2RlcHRoX3RvX2dvWyRpYmVnX25leHRdIGVxCiAgICAgICAgICAgICAgICAgICAgJG5lc3RpbmdfZGVwdGhfdG9fZ29bJGliZWdfbmV4dF9uZXh0XSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJGxvZ2ljYWxfY29udGludWF0aW9uX2xpbmVzKys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc2VlIGlmIGxlYWRpbmcgdHlwZXMgbWF0Y2gKICAgICAgICAgICAgbXkgJHR5cGVzX21hdGNoID0gJHR5cGVzX3RvX2dvWyRpbmV4dF9uZXh0XSBlcSAkdHlwZTsKICAgICAgICAgICAgbXkgJG1hdGNoZXNfd2l0aG91dF9iYW5nOwoKICAgICAgICAgICAgIyBpZiBmaXJzdCBsaW5lIGhhcyBsZWFkaW5nICEgdGhlbiBjb21wYXJlIHRoZSBmb2xsb3dpbmcgdG9rZW4KICAgICAgICAgICAgaWYgKCAhJHR5cGVzX21hdGNoICYmICR0eXBlIGVxICchJyApIHsKICAgICAgICAgICAgICAgICR0eXBlc19tYXRjaCA9ICRtYXRjaGVzX3dpdGhvdXRfYmFuZyA9CiAgICAgICAgICAgICAgICAgICR0eXBlc190b19nb1skaW5leHRfbmV4dF0gZXEgJHR5cGVzX3RvX2dvWyAkaXBhZCArIDEgXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoCgogICAgICAgICAgICAgICAgIyBlaXRoZXIgd2UgaGF2ZSBtdWx0aXBsZSBjb250aW51YXRpb24gbGluZXMgdG8gZm9sbG93CiAgICAgICAgICAgICAgICAjIGFuZCB3ZSBhcmUgbm90IHBhZGRpbmcgdGhlIGZpcnN0IHRva2VuCiAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgJGxvZ2ljYWxfY29udGludWF0aW9uX2xpbmVzID4gMQogICAgICAgICAgICAgICAgICAgICYmICggJGlwYWQgPiAwIHx8ICRpc19zaG9ydF9ibG9jayApCiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAgIyBvci4uCiAgICAgICAgICAgICAgICB8fCAoCgogICAgICAgICAgICAgICAgICAgICMgdHlwZXMgbXVzdCBtYXRjaAogICAgICAgICAgICAgICAgICAgICR0eXBlc19tYXRjaAoKICAgICAgICAgICAgICAgICAgICAjIGFuZCBrZXl3b3JkcyBtdXN0IG1hdGNoIGlmIGtleXdvcmQKICAgICAgICAgICAgICAgICAgICAmJiAhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAkdHlwZSBlcSAnaycKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHRva2Vuc190b19nb1skaXBhZF0gbmUgJHRva2Vuc190b19nb1skaW5leHRfbmV4dF0KICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1iZWdpbiBzcGVjaWFsIGNoZWNrcy0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAjCiAgICAgICAgICAgICAgICAjIFNQRUNJQUwgQ0hFQ0sgMToKICAgICAgICAgICAgICAgICMgQSBjaGVjayBpcyBuZWVkZWQgYmVmb3JlIHdlIGNhbiBtYWtlIHRoZSBwYWQuCiAgICAgICAgICAgICAgICAjIElmIHdlIGFyZSBpbiBhIGxpc3Qgd2l0aCBzb21lIGxvbmcgaXRlbXMsIHdlIHdhbnQgZWFjaAogICAgICAgICAgICAgICAgIyBpdGVtIHRvIHN0YW5kIG91dC4gIFNvIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgdGhlCiAgICAgICAgICAgICAgICAjIGZpcnN0IGxpbmUgYmVnaW5uaW5nIHdpdGggJyRjYXNlZm9sZC0+JyB3b3VsZCBsb29rIGdvb2QKICAgICAgICAgICAgICAgICMgcGFkZGVkIHRvIGFsaWduIHdpdGggdGhlIG5leHQgbGluZSwgYnV0IHRoZW4gaXQKICAgICAgICAgICAgICAgICMgd291bGQgYmUgaW5kZW50ZWQgbW9yZSB0aGFuIHRoZSBsYXN0IGxpbmUsIHNvIHdlCiAgICAgICAgICAgICAgICAjIHdvbid0IGRvIGl0LgogICAgICAgICAgICAgICAgIwogICAgICAgICAgICAgICAgIyAgb2soCiAgICAgICAgICAgICAgICAjICAgICAgJGNhc2Vmb2xkLT57Y29kZX0gICAgICAgICBlcSAnMDA0MScKICAgICAgICAgICAgICAgICMgICAgICAgICYmICRjYXNlZm9sZC0+e3N0YXR1c30gIGVxICdDJwogICAgICAgICAgICAgICAgIyAgICAgICAgJiYgJGNhc2Vmb2xkLT57bWFwcGluZ30gZXEgJzAwNjEnLAogICAgICAgICAgICAgICAgIyAgICAgICdjYXNlZm9sZCAweDQxJwogICAgICAgICAgICAgICAgIyAgKTsKICAgICAgICAgICAgICAgICMKICAgICAgICAgICAgICAgICMgTm90ZToKICAgICAgICAgICAgICAgICMgSXQgd291bGQgYmUgZmFzdGVyLCBhbmQgYWxtb3N0IGFzIGdvb2QsIHRvIHVzZSBhIGNvbW1hCiAgICAgICAgICAgICAgICAjIGNvdW50LCBhbmQgbm90IHBhZCBpZiBjb21tYV9jb3VudCA+IDEgYW5kIHRoZSBwcmV2aW91cwogICAgICAgICAgICAgICAgIyBsaW5lIGRpZCBub3QgZW5kIHdpdGggYSBjb21tYS4KICAgICAgICAgICAgICAgICMKICAgICAgICAgICAgICAgIG15ICRva190b19wYWQgPSAxOwoKICAgICAgICAgICAgICAgIG15ICRpYmcgICA9ICRyaV9maXJzdC0+WyAkbGluZSArIDEgXTsKICAgICAgICAgICAgICAgIG15ICRkZXB0aCA9ICRuZXN0aW5nX2RlcHRoX3RvX2dvWyAkaWJnICsgMSBdOwoKICAgICAgICAgICAgICAgICMganVzdCB1c2Ugc2ltcGxpZmllZCBmb3JtdWxhIGZvciBsZWFkaW5nIHNwYWNlcyB0byBhdm9pZAogICAgICAgICAgICAgICAgIyBuZWVkbGVzcyBzdWIgY2FsbHMKICAgICAgICAgICAgICAgIG15ICRsc3AgPSAkbGV2ZWxzX3RvX2dvWyRpYmddICsgJGNpX2xldmVsc190b19nb1skaWJnXTsKCiAgICAgICAgICAgICAgICAjIGxvb2sgYXQgZWFjaCBsaW5lIGJleW9uZCB0aGUgbmV4dCAuLgogICAgICAgICAgICAgICAgbXkgJGwgPSAkbGluZSArIDE7CiAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRsdGVzdCAoICRsaW5lICsgMiAuLiAkbWF4X2xpbmUgKSB7CiAgICAgICAgICAgICAgICAgICAgJGwgPSAkbHRlc3Q7CiAgICAgICAgICAgICAgICAgICAgbXkgJGliZWdfdCA9ICRyaV9maXJzdC0+WyRsXTsKCiAgICAgICAgICAgICAgICAgICAgIyBxdWl0IGxvb2tpbmcgYXQgdGhlIGVuZCBvZiB0aGlzIGNvbnRhaW5lcgogICAgICAgICAgICAgICAgICAgIGxhc3QKICAgICAgICAgICAgICAgICAgICAgIGlmICggJG5lc3RpbmdfZGVwdGhfdG9fZ29bICRpYmVnX3QgKyAxIF0gPCAkZGVwdGggKQogICAgICAgICAgICAgICAgICAgICAgfHwgKCAkbmVzdGluZ19kZXB0aF90b19nb1skaWJlZ190XSA8ICRkZXB0aCApOwoKICAgICAgICAgICAgICAgICAgICAjIGNhbm5vdCBkbyB0aGUgcGFkIGlmIGEgbGF0ZXIgbGluZSB3b3VsZCBiZQogICAgICAgICAgICAgICAgICAgICMgb3V0ZGVudGVkIG1vcmUKICAgICAgICAgICAgICAgICAgICBpZiAoICRsZXZlbHNfdG9fZ29bJGliZWdfdF0gKyAkY2lfbGV2ZWxzX3RvX2dvWyRpYmVnX3RdIDwKICAgICAgICAgICAgICAgICAgICAgICAgJGxzcCApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkb2tfdG9fcGFkID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBkb24ndCBwYWQgaWYgd2UgZW5kIGluIGEgYnJva2VuIGxpc3QKICAgICAgICAgICAgICAgIGlmICggJGwgPT0gJG1heF9saW5lICkgewogICAgICAgICAgICAgICAgICAgIG15ICRpMiA9ICRyaV9sYXN0LT5bJGxdOwogICAgICAgICAgICAgICAgICAgIGlmICggJHR5cGVzX3RvX2dvWyRpMl0gZXEgJyMnICkgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkaTEgPSAkcmlfZmlyc3QtPlskbF07CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgaWYgdGVybWluYWxfdHlwZV9pKCAkaTEsICRpMiApIGVxICcsJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBTUEVDSUFMIENIRUNLIDI6CiAgICAgICAgICAgICAgICAjIGEgbWludXMgbWF5IGludHJvZHVjZSBhIHF1b3RlZCB2YXJpYWJsZSwgYW5kIHdlIHdpbGwKICAgICAgICAgICAgICAgICMgYWRkIHRoZSBwYWQgb25seSBpZiB0aGlzIGxpbmUgYmVnaW5zIHdpdGggYSBiYXJlIHdvcmQsCiAgICAgICAgICAgICAgICAjIHN1Y2ggYXMgZm9yIHRoZSB3b3JkICdCdXR0b24nIGhlcmU6CiAgICAgICAgICAgICAgICAjICAgIFsKICAgICAgICAgICAgICAgICMgICAgICAgICBCdXR0b24gICAgICA9PiAiUHJpbnQgbGV0dGVyIFwifiRfXCIiLAogICAgICAgICAgICAgICAgIyAgICAgICAgLWNvbW1hbmQgICAgID0+IFsgc3ViIHsgcHJpbnQgIiRfWzBdXG4iIH0sICRfIF0sCiAgICAgICAgICAgICAgICAjICAgICAgICAtYWNjZWxlcmF0b3IgPT4gIk1ldGErJF8iCiAgICAgICAgICAgICAgICAjICAgIF07CiAgICAgICAgICAgICAgICAjCiAgICAgICAgICAgICAgICAjICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgJ0J1dHRvbicgaXMgcXVvdGVkLCBpdCBsb29rcyBiZXN0CiAgICAgICAgICAgICAgICAjICBub3QgdG8gcGFkOgogICAgICAgICAgICAgICAgIyAgICBbCiAgICAgICAgICAgICAgICAjICAgICAgICAnQnV0dG9uJyAgICAgPT4gIlByaW50IGxldHRlciBcIn4kX1wiIiwKICAgICAgICAgICAgICAgICMgICAgICAgIC1jb21tYW5kICAgICA9PiBbIHN1YiB7IHByaW50ICIkX1swXVxuIiB9LCAkXyBdLAogICAgICAgICAgICAgICAgIyAgICAgICAgLWFjY2VsZXJhdG9yID0+ICJNZXRhKyRfIgogICAgICAgICAgICAgICAgIyAgICBdOwogICAgICAgICAgICAgICAgaWYgKCAkdHlwZXNfdG9fZ29bJGliZWdfbmV4dF0gZXEgJ20nICkgewogICAgICAgICAgICAgICAgICAgICRva190b19wYWQgPSAwIGlmICR0eXBlc190b19nb1skaWJlZ10gZXEgJ1EnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG5leHQgdW5sZXNzICRva190b19wYWQ7CgogICAgICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1lbmQgc3BlY2lhbCBjaGVjay0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAgICAgICAgIG15ICRsZW5ndGhfMSA9IHRvdGFsX2xpbmVfbGVuZ3RoKCAkaWJlZywgICAgICAkaXBhZCAtIDEgKTsKICAgICAgICAgICAgICAgIG15ICRsZW5ndGhfMiA9IHRvdGFsX2xpbmVfbGVuZ3RoKCAkaWJlZ19uZXh0LCAkaW5leHRfbmV4dCAtIDEgKTsKICAgICAgICAgICAgICAgICRwYWRfc3BhY2VzID0gJGxlbmd0aF8yIC0gJGxlbmd0aF8xOwoKICAgICAgICAgICAgICAgICMgSWYgdGhlIGZpcnN0IGxpbmUgaGFzIGEgbGVhZGluZyAhIGFuZCB0aGUgc2Vjb25kIGRvZXMKICAgICAgICAgICAgICAgICMgbm90LCB0aGVuIHJlbW92ZSBvbmUgc3BhY2UgdG8gdHJ5IHRvIGFsaWduIHRoZSBuZXh0CiAgICAgICAgICAgICAgICAjIGxlYWRpbmcgY2hhcmFjdGVycywgd2hpY2ggYXJlIG9mdGVuIHRoZSBzYW1lLiAgRm9yIGV4YW1wbGU6CiAgICAgICAgICAgICAgICAjICBpZiAoICAhJHRzCiAgICAgICAgICAgICAgICAjICAgICAgfHwgJHRzID09ICRzZWxmLT5Ib2xkZXIKICAgICAgICAgICAgICAgICMgICAgICB8fCAkc2VsZi0+SG9sZGVyLT5UeXBlIGVxICJBcmVuYSIgKQogICAgICAgICAgICAgICAgIwogICAgICAgICAgICAgICAgIyBUaGlzIHVzdWFsbHkgaGVscHMgcmVhZGFiaWxpdHksIGJ1dCBpZiB0aGVyZSBhcmUgc3Vic2VxdWVudAogICAgICAgICAgICAgICAgIyAhIG9wZXJhdG9ycyB0aGluZ3Mgd2lsbCBzdGlsbCBnZXQgbWVzc2VkIHVwLiAgRm9yIGV4YW1wbGU6CiAgICAgICAgICAgICAgICAjCiAgICAgICAgICAgICAgICAjICBpZiAoICAhZXhpc3RzICROZXQ6OkROUzo6dHlwZXNieW5hbWV7JHF0eXBlfQogICAgICAgICAgICAgICAgIyAgICAgICYmIGV4aXN0cyAkTmV0OjpETlM6OmNsYXNzZXNieW5hbWV7JHF0eXBlfQogICAgICAgICAgICAgICAgIyAgICAgICYmICFleGlzdHMgJE5ldDo6RE5TOjpjbGFzc2VzYnluYW1leyRxY2xhc3N9CiAgICAgICAgICAgICAgICAjICAgICAgJiYgZXhpc3RzICROZXQ6OkROUzo6dHlwZXNieW5hbWV7JHFjbGFzc30gKQogICAgICAgICAgICAgICAgIyBXZSBjYW4ndCBmaXggdGhhdC4KICAgICAgICAgICAgICAgIGlmICgkbWF0Y2hlc193aXRob3V0X2JhbmcpIHsgJHBhZF9zcGFjZXMtLSB9CgogICAgICAgICAgICAgICAgIyBtYWtlIHN1cmUgdGhpcyB3b24ndCBjaGFuZ2UgaWYgLWxwIGlzIHVzZWQKICAgICAgICAgICAgICAgIG15ICRpbmRlbnRhdGlvbl8xID0gJGxlYWRpbmdfc3BhY2VzX3RvX2dvWyRpYmVnXTsKICAgICAgICAgICAgICAgIGlmICggcmVmKCRpbmRlbnRhdGlvbl8xKQogICAgICAgICAgICAgICAgICAgICYmICRpbmRlbnRhdGlvbl8xLT5nZXRfcmVjb3ZlcmFibGVfc3BhY2VzKCkgPT0gMCApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbXkgJGluZGVudGF0aW9uXzIgPSAkbGVhZGluZ19zcGFjZXNfdG9fZ29bJGliZWdfbmV4dF07CiAgICAgICAgICAgICAgICAgICAgaWYgKCByZWYoJGluZGVudGF0aW9uXzIpCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRpbmRlbnRhdGlvbl8yLT5nZXRfcmVjb3ZlcmFibGVfc3BhY2VzKCkgIT0gMCApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkcGFkX3NwYWNlcyA9IDA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgd2UgbWlnaHQgYmUgYWJsZSB0byBoYW5kbGUgYSBwYWQgb2YgLTEgYnkgcmVtb3ZpbmcgYSBibGFuawogICAgICAgICAgICAgICAgIyB0b2tlbi4KICAgICAgICAgICAgICAgIGlmICggJHBhZF9zcGFjZXMgPCAwICkgewoKICAgICAgICAgICAgICAgICAgICAjIERlYWN0aXZhdGVkIGZvciAta3BpdCBkdWUgdG8gY29uZmxpY3QuIFRoaXMgYmxvY2sgZGVsZXRlcwogICAgICAgICAgICAgICAgICAgICMgYSBzcGFjZSBpbiBhbiBhdHRlbXB0IHRvIGltcHJvdmUgYWxpZ25tZW50IGluIHNvbWUgY2FzZXMsCiAgICAgICAgICAgICAgICAgICAgIyBidXQgaXQgbWF5IGNvbmZsaWN0IHdpdGggdXNlciBzcGFjaW5nIHJlcXVlc3RzLiAgRm9yIG5vdwogICAgICAgICAgICAgICAgICAgICMgaXQgaXMganVzdCBkZWFjdGl2YXRlZCBpZiB0aGUgLWtwaXQgb3B0aW9uIGlzIHVzZWQuCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkcGFkX3NwYWNlcyA9PSAtMSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlwYWQgPiAkaWJlZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHR5cGVzX3RvX2dvWyAkaXBhZCAtIDEgXSBlcSAnYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICEla2V5d29yZF9wYXJlbl9pbm5lcl90aWdodG5lc3MKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFkZGl0aW9uYWwgdGVzdHMgYWRkZWQgZm9yIGMzODU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGVzX3RvX2dvWyRpbmV4dF9uZXh0XSBlcSAkdHlwZXNfdG9fZ29bJGlwYWRdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHlwZXNfdG9fZ29bJGlwYWRdIGVxICchJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoICR0eXBlc190b19nb1sgJGlwYWQgKyAxIF0gZXEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlc190b19nb1skaW5leHRfbmV4dF0gKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5wYWRfdG9rZW4oICRpcGFkIC0gMSwgJHBhZF9zcGFjZXMgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkcGFkX3NwYWNlcyA9IDA7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBub3cgYXBwbHkgYW55IHBhZGRpbmcgZm9yIGFsaWdubWVudAogICAgICAgICAgICAgICAgaWYgKCAkaXBhZCA+PSAwICYmICRwYWRfc3BhY2VzICkgewoKICAgICAgICAgICAgICAgICAgICBteSAkbGVuZ3RoX3QgPSB0b3RhbF9saW5lX2xlbmd0aCggJGliZWcsICRpZW5kICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkcGFkX3NwYWNlcyArICRsZW5ndGhfdCA8PQogICAgICAgICAgICAgICAgICAgICAgICAkbWF4aW11bV9saW5lX2xlbmd0aF9hdF9sZXZlbFsgJGxldmVsc190b19nb1skaWJlZ10gXSApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+cGFkX3Rva2VuKCAkaXBhZCwgJHBhZF9zcGFjZXMgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29udGludWUgewogICAgICAgICAgICAkaWVuZG0gICAgICAgICAgPSAkaWVuZDsKICAgICAgICAgICAgJGliZWdtICAgICAgICAgID0gJGliZWc7CiAgICAgICAgICAgICRoYXNfbGVhZGluZ19vcCA9ICRoYXNfbGVhZGluZ19vcF9uZXh0OwogICAgICAgIH0gIyMgZW5kIG9mIGxvb3Agb3ZlciBsaW5lcwogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBzZXRfbG9naWNhbF9wYWRkaW5nCn0gIyMgZW5kIGNsb3N1cmUgc2V0X2xvZ2ljYWxfcGFkZGluZwoKc3ViIHBhZF9icm9rZW5fbGlzdCB7CiAgICBteSAoICRzZWxmLCAkaWJlZywgJGllbmQsICRpYmVnX25leHQsICRpZW5kX25leHQgKSA9IEBfOwoKICAgICMgR2l2ZW46CiAgICAjICAgJGliZWcsICRpZW5kICAgICAgICAgICA9IGluZGV4IHJhbmdlIG9mIGxpbmUgdG8gZ2V0IHBhZGRpbmcKICAgICMgICAkaWJlZ19uZXh0LCAkaWVuZF9uZXh0ID0gaW5kZXggcmFuZ2Ugb2YgbmV4dCBsaW5lCgogICAgIyBUaGlzIGZpeGVzIGEgbWlub3IgaXNzdWUgZGlzY3Vzc2VkIGluIGdpdDEzNC4gSW4gdGhlIGV4YW1wbGUgc2hvd24KICAgICMgYmVsb3csIHRoZSBpcyBhIGJyb2tlbiBsaXN0IGJlY2F1c2Ugb2YgdGhlIHEgdGVybSwgc28gbGluZSBicmVha3MKICAgICMgYXJlIGNvcGllZCBmcm9tIHRoZSBpbnB1dC4gV2Ugd2FudCB0byBpbnNlcnQgcGFkZGluZyBhdAogICAgIyAnWyAkY2xpZW50S2V5LCcgdG8gYWxpZ24gd2l0aCB0aGUgbmV4dCBsaW5lLgoKICAgICMgICAgJHEtPmRvKAogICAgIyAgICAgICAgcXsKICAgICMgICAgICAgICAgU29tZXRoaW5nCiAgICAjICAgICAgICB9LAogICAgIyAgICAgICAgWyAkY2xpZW50S2V5LCAgICAgICAgIyMgPC0tIHBhZCBzcGFjZXMgbmVlZGVkIGhlcmUKICAgICMgICAgICAgICAgICAkc3lzdGVtS2V5LAogICAgIyAgICAgICAgXSwKICAgICMgICAgKTsKCiAgICAjIE5vdGF0aW9uIGZvciB0aGUgbGluZSBiZWluZyBwYWRkZWQ6CiAgICAjCiAgICAjICAgIFsgJGNsaWVudEtleSwKICAgICMgICAgfCB8ICAgICAgICAgfAogICAgIyAgICB8IHwgICAgICAgICAtLS0tLS0tICRpZW5kCiAgICAjICAgIHwgLS0tLS0tICRpYmVnKzIKICAgICMgICAgLS0tLSAkaWJlZwoKICAgICMgTk9URVM6CiAgICAjIC0gVGhpcyBwYXJ0aWN1bGFyIGxpc3QgaXMgYnJva2VuIGJlY2F1c2Ugb2YgdGhlICdxJyB0ZXJtIGluIHRoZSBsaXN0CiAgICAjIC0gSXQgaXMgZXh0cmVtZWx5IHJhcmUgZm9yIHRoaXMgcm91dGluZSB0byBiZSBjYWxsZWQgZm9yIHR5cGljYWwgY29kZQogICAgIyAgIChJIGZvdW5kIGp1c3QgdHdvIGV4YW1wbGVzIGluIG15IGxhcmdlIGNvbGxlY3Rpb24gb2YgdGVzdCBzY3JpcHRzKQogICAgIyAtIFRoaXMgcm91dGluZSBpcyBub3QgY2FsbGVkIGZvciB0aGUgbGFzdCBsaW5lIG9mIGEgYmF0Y2guIFRoaXMKICAgICMgICBpcyBub3QgbmVjZXNzYXJ5IGJlY2F1c2UgcGVybHRpZHkgd2lsbCBnZW5lcmFsbHkgcHV0IGEgYnJlYWsKICAgICMgICBhZnRlciB0aGUgb3BlbmluZyB0b2tlbiBpbiB0aGF0IGNhc2UuCgogICAgIyBUaGUgYmFzaWMgbG9naWMgaXMgdG8gcGFkIHRoZSBmaXJzdCBibGFuayBzcGFjZSAkaWJlZysxIHVzaW5nIHRoZQogICAgIyBsZWFkaW5nIHNwYWNlcyB0aGF0IHdvdWxkIGhhdmUgYmVlbiBnaXZlbiB0byB0b2tlbiBhdCAkaWJlZysyIGlmOgogICAgIyAtIHRoaXMgbGluZSBiZWdpbnMgd2l0aCBhbiBvcGVuaW5nIHRva2VuIHdoaWNoIGlzCiAgICAjIC0gZm9sbG93ZWQgYnkgYWRkaXRpb25hbCB0b2tlbnMgb24gdGhlIHNhbWUgbGluZSwKICAgICMgLSBhbmQgaXMgYSBsaXN0IGNvbnRhaW5lciwgYW5kCiAgICAjIC0gdGhlIGxpbmUgdGVybWluYXRlcyBpbiBhIGNvbW1hIHdob3NlIHBhcmVudCBpcyB0aGlzIGNvbnRhaW5lciwKICAgICMgLSB0aGVuIHBhZCB1c2luZyB0aGUgaW5kZW50YXRpb24gb2YgdGhlIHNlY29uZCB0b2tlbgoKICAgICMgU28gaW4gb3RoZXIgd29yZHMsIHdlIGFyZSBzaW11bGF0aW5nIGRvaW5nIGEgbGluZSBicmVhayBhZnRlciB0aGUKICAgICMgZmlyc3QgdG9rZW4gYW5kIHRoZW4gcmVjb21iaW5pbmcgd2l0aCBhIC12dCBvcGVyYXRpb24uIFRoYXQgY2Fubm90CiAgICAjIGFjdHVhbGx5IGhhcHBlbiBmb3IgYSBicm9rZW4gbGlzdC4KCiAgICAjIE5leHQgdG9rZW4gbXVzdCBiZSBibGFuayBmb3IgcGFkZGluZywgYW5kIG11c3QgYmUgZm9sbG93ZWQKICAgICMgYnkgYXQgbGVhc3Qgb25lIHRva2VuIGFuZCBjb21tYQogICAgcmV0dXJuIGlmICggJGllbmQgPCAkaWJlZyArIDMgfHwgJHR5cGVzX3RvX2dvWyAkaWJlZyArIDEgXSBuZSAnYicgKTsKCiAgICAjIFRoaXMgaXMgb25seSBmb3IgbGlzdHMKICAgIG15ICRzZXFubyA9ICR0eXBlX3NlcXVlbmNlX3RvX2dvWyRpYmVnXTsKICAgIHJldHVybiBpZiAoICEkc2Vxbm8gKTsKICAgIG15ICRpc19saXN0ID0gJHNlbGYtPltfcmlzX2xpc3RfYnlfc2Vxbm9fXS0+eyRzZXFub307CiAgICByZXR1cm4gaWYgKCAhJGlzX2xpc3QgKTsKCiAgICAjIEZpcnN0IHRva2VuIG9uIG5leHQgbGluZSBtdXN0IGJlIGluIHNhbWUgY29udGFpbmVyCiAgICBteSAkc2Vxbm9fYmVnX25leHQgPSAkcGFyZW50X3NlcW5vX3RvX2dvWyRpYmVnX25leHRdOwogICAgcmV0dXJuIGlmICggISRzZXFub19iZWdfbmV4dCB8fCAkc2Vxbm9fYmVnX25leHQgIT0gJHNlcW5vICk7CgogICAgIyBUaGlzIGRvZXMgbm90IHdvcmsgd2VsbCBpZiB0aGUgY2xvc2luZyB0b2tlbiBpcyBvbiB0aGUgbmV4dCBsaW5lCiAgICByZXR1cm4KICAgICAgaWYgKCAhZGVmaW5lZCggJG1hdGVfaW5kZXhfdG9fZ29bJGliZWddICkKICAgICAgICB8fCAkbWF0ZV9pbmRleF90b19nb1skaWJlZ10gPD0gJGllbmRfbmV4dCApOwoKICAgICMgTGluZSBtdXN0IGVuZCBpbiBhIGNvbW1hLCB3aXRoIHBvc3NpYmxlIHNpZGUgY29tbWVudAogICAgbXkgJGlfdGVybWluYWwgPSAkaWVuZDsKICAgIGlmICggJHR5cGVzX3RvX2dvWyRpX3Rlcm1pbmFsXSBlcSAnIycgKSB7CiAgICAgICAgJGlfdGVybWluYWwgLT0gMTsKICAgICAgICBpZiAoICR0eXBlc190b19nb1skaV90ZXJtaW5hbF0gZXEgJ2InICkgewogICAgICAgICAgICAkaV90ZXJtaW5hbCAtPSAxOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBpZiAoICRpX3Rlcm1pbmFsIDwgJGliZWcgKyAyICk7CiAgICByZXR1cm4gaWYgKCAkdHlwZXNfdG9fZ29bJGlfdGVybWluYWxdIG5lICcsJyApOwoKICAgICMgYWRkIHBhZGRpbmcgdG8gbWFrZSB0aGUgc2Vjb25kIHRva2VuIGhhdmUgdGhlIHNhbWUgbG9jYXRpb24KICAgICMgYXMgaWYgaXQgaGFkIGJlZW4gb3V0cHV0IHNlcGFyYXRlbHkgYW5kIGxhdGVyIGpvaW5lZCB3aXRoIC12dAogICAgbXkgJGxzcCAgICAgID0gJGxlYWRpbmdfc3BhY2VzX3RvX2dvWyRpYmVnXTsKICAgIG15ICRsc3BfbmV4dCA9ICRsZWFkaW5nX3NwYWNlc190b19nb1skaWJlZ19uZXh0XTsKCiAgICAjIHRoaXMgaXMgbm90IGZvciAtbHAgc3R5bGUKICAgIHJldHVybiBpZiAoIHJlZigkbHNwKSB8fCByZWYoJGxzcF9uZXh0KSApOwoKICAgIG15ICRwYWRfc3BhY2VzID0KICAgICAgJGxzcF9uZXh0IC0KICAgICAgKCAkbHNwICsgJHRva2VuX2xlbmd0aHNfdG9fZ29bJGliZWddICsKICAgICAgICAgICR0b2tlbl9sZW5ndGhzX3RvX2dvWyAkaWJlZyArIDEgXSApOwoKICAgIHJldHVybiBpZiAoICRwYWRfc3BhY2VzIDw9IDAgKTsKCiAgICAjIERvIG5vdCBwYWQgaWYgaXQgd2lsbCBjYXVzZSBleGNlc3MgbGluZSBsZW5ndGgKICAgIG15ICRleGNlc3MgPSAkc2VsZi0+ZXhjZXNzX2xpbmVfbGVuZ3RoKCAkaWJlZywgJGllbmQgKTsKICAgIHJldHVybiBpZiAoICRleGNlc3MgKyAkcGFkX3NwYWNlcyA+IDAgKTsKCiAgICAkc2VsZi0+cGFkX3Rva2VuKCAkaWJlZyArIDEsICRwYWRfc3BhY2VzICk7CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBwYWRfYnJva2VuX2xpc3QKCnN1YiBwYWRfdG9rZW4gewoKICAgICMgaW5zZXJ0ICRwYWRfc3BhY2VzIGJlZm9yZSB0b2tlbiBudW1iZXIgJGlwYWQKICAgIG15ICggJHNlbGYsICRpcGFkLCAkcGFkX3NwYWNlcyApID0gQF87CiAgICBteSAkckxMICAgICA9ICRzZWxmLT5bX3JMTF9dOwogICAgbXkgJEtLICAgICAgPSAkS190b19nb1skaXBhZF07CiAgICBteSAkdG9rICAgICA9ICRyTEwtPlskS0tdLT5bX1RPS0VOX107CiAgICBteSAkdG9rX2xlbiA9ICRyTEwtPlskS0tdLT5bX1RPS0VOX0xFTkdUSF9dOwoKICAgIGlmICggJHBhZF9zcGFjZXMgPiAwICkgewogICAgICAgICR0b2sgPSBTUEFDRSB4ICRwYWRfc3BhY2VzIC4gJHRvazsKICAgICAgICAkdG9rX2xlbiArPSAkcGFkX3NwYWNlczsKICAgIH0KICAgIGVsc2lmICggJHBhZF9zcGFjZXMgPT0gMCApIHsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBlbHNpZiAoICRwYWRfc3BhY2VzID09IC0xICYmICR0b2tlbnNfdG9fZ29bJGlwYWRdIGVxIFNQQUNFICkgewogICAgICAgICR0b2sgICAgID0gRU1QVFlfU1RSSU5HOwogICAgICAgICR0b2tfbGVuID0gMDsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIHNob3VsZG4ndCBoYXBwZW4KICAgICAgICBERVZFTF9NT0RFCiAgICAgICAgICAmJiBGYXVsdCgidW5leHBlY3RlZCByZXF1ZXN0IGZvciBwYWQgc3BhY2VzID0gJHBhZF9zcGFjZXNcbiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAkdG9rICAgICA9ICRyTEwtPlskS0tdLT5bX1RPS0VOX10gICAgICAgID0gJHRvazsKICAgICR0b2tfbGVuID0gJHJMTC0+WyRLS10tPltfVE9LRU5fTEVOR1RIX10gPSAkdG9rX2xlbjsKCiAgICAkdG9rZW5fbGVuZ3Roc190b19nb1skaXBhZF0gKz0gJHBhZF9zcGFjZXM7CiAgICAkdG9rZW5zX3RvX2dvWyRpcGFkXSA9ICR0b2s7CgogICAgZm9yZWFjaCBteSAkaSAoICRpcGFkIC4uICRtYXhfaW5kZXhfdG9fZ28gKSB7CiAgICAgICAgJHN1bW1lZF9sZW5ndGhzX3RvX2dvWyAkaSArIDEgXSArPSAkcGFkX3NwYWNlczsKICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHBhZF90b2tlbgoKc3ViIHhscF90d2VhayB7CgogICAgbXkgKCRzZWxmKSA9IEBfOwoKICAgICMgUmVtb3ZlIG9uZSBpbmRlbnRhdGlvbiBzcGFjZSBmcm9tIHVuYnJva2VuIGNvbnRhaW5lcnMgbWFya2VkIHdpdGgKICAgICMgJ0tfZXh0cmFfc3BhY2UnLiAgVGhlc2UgYXJlIG1vc3RseSB0d28tbGluZSBsaXN0cyB3aXRoIHNob3J0IG5hbWVzCiAgICAjIGZvcm1hdHRlZCB3aXRoIC14bHAgLXB0PTIuCiAgICAjCiAgICAjIEJlZm9yZSB0aGlzIGZpeCAoZXh0cmEgc3BhY2UgaW4gbGluZSAyKToKICAgICMgICAgaXMoJG1vZHVsZS0+VkVSU0lPTiwgJGV4cGVjdGVkLAogICAgIyAgICAgICAgIiRtYWluX21vZHVsZS0+VkVSU0lPTiBtYXRjaGVzICRtb2R1bGUtPlZFUlNJT04gKCRleHBlY3RlZCkiKTsKICAgICMKICAgICMgQWZ0ZXIgdGhpcyBmaXg6CiAgICAjICAgIGlzKCRtb2R1bGUtPlZFUlNJT04sICRleHBlY3RlZCwKICAgICMgICAgICAgIiRtYWluX21vZHVsZS0+VkVSU0lPTiBtYXRjaGVzICRtb2R1bGUtPlZFUlNJT04gKCRleHBlY3RlZCkiKTsKICAgICMKICAgICMgTm90ZXM6CiAgICAjICAtIFRoaXMgZml4ZXMgaXNzdWUgZ2l0ICMxMDYKICAgICMgIC0gVGhpcyBtdXN0IGJlIGNhbGxlZCBhZnRlciAnc2V0X2xvZ2ljYWxfcGFkZGluZycuCiAgICAjICAtIFRoaXMgaXMgY3VycmVudGx5IG9ubHkgYXBwbGllZCB0byAteGxwLiBJdCB3b3VsZCBhbHNvIHdvcmsgZm9yIC1scAogICAgIyAgICBidXQgdGhhdCBzdHlsZSBpcyBlc3NlbnRpYWxseSBmcm96ZW4uCgogICAgbXkgJHRoaXNfYmF0Y2ggPSAkc2VsZi0+W190aGlzX2JhdGNoX107CiAgICBteSAkcmlfZmlyc3QgICA9ICR0aGlzX2JhdGNoLT5bX3JpX2ZpcnN0X107CiAgICBteSAkcmlfbGFzdCAgICA9ICR0aGlzX2JhdGNoLT5bX3JpX2xhc3RfXTsKCiAgICAjIE11c3QgYmUgMiBvciBtb3JlIGxpbmVzCiAgICByZXR1cm4gaWYgKCBAeyRyaV9maXJzdH0gPD0gMSApOwoKICAgICMgUHVsbCBpbmRlbnRhdGlvbiBvYmplY3QgZnJvbSBzdGFydCBvZiBzZWNvbmQgbGluZQogICAgbXkgJGliZWdfMSAgICA9ICRyaV9maXJzdC0+WzFdOwogICAgbXkgJGxwX29iamVjdCA9ICRsZWFkaW5nX3NwYWNlc190b19nb1skaWJlZ18xXTsKICAgIHJldHVybiBpZiAoICFyZWYoJGxwX29iamVjdCkgKTsKCiAgICAjIFRoaXMgb25seSBhcHBsaWVzIHRvIGFuIGluZGVudGF0aW9uIG9iamVjdCB3aXRoIGEgbWFya2VkIHRva2VuCiAgICBteSAkS19leHRyYV9zcGFjZSA9ICRscF9vYmplY3QtPmdldF9LX2V4dHJhX3NwYWNlKCk7CiAgICByZXR1cm4gdW5sZXNzICgkS19leHRyYV9zcGFjZSk7CgogICAgIyBMb29rIGZvciB0aGUgbWFya2VkIHRva2VuIHdpdGhpbiB0aGUgZmlyc3QgbGluZSBvZiB0aGlzIGJhdGNoCiAgICBteSAkaWJlZ18wID0gJHJpX2ZpcnN0LT5bMF07CiAgICBteSAkaWVuZF8wID0gJHJpX2xhc3QtPlswXTsKICAgIG15ICRpaSAgICAgPSAkaWJlZ18wICsgJEtfZXh0cmFfc3BhY2UgLSAkS190b19nb1skaWJlZ18wXTsKICAgIHJldHVybiBpZiAoICRpaSA8PSAkaWJlZ18wIHx8ICRpaSA+ICRpZW5kXzAgKTsKCiAgICAjIFNraXAgcGFkZGVkIHRva2VucywgdGhleSBoYXZlIGFscmVhZHkgYmVlbiBhbGlnbmVkCiAgICBteSAkdG9rID0gJHRva2Vuc190b19nb1skaWldOwogICAgcmV0dXJuIGlmICggc3Vic3RyKCAkdG9rLCAwLCAxICkgZXEgU1BBQ0UgKTsKCiAgICAjIFNraXAgJ2lmJy1saWtlIHN0YXRlbWVudHMsIHRoaXMgZG9lcyBub3QgaW1wcm92ZSB0aGVtCiAgICByZXR1cm4KICAgICAgaWYgKCAkdHlwZXNfdG9fZ29bJGliZWdfMF0gZXEgJ2snCiAgICAgICAgJiYgJGlzX2lmX3VubGVzc19lbHNpZnsgJHRva2Vuc190b19nb1skaWJlZ18wXSB9ICk7CgogICAgIyBMb29rcyBva2F5LCByZWR1Y2UgaW5kZW50YXRpb24gYnkgMSBzcGFjZSBpZiBwb3NzaWJsZQogICAgbXkgJHNwYWNlcyA9ICRscF9vYmplY3QtPmdldF9zcGFjZXMoKTsKICAgIGlmICggJHNwYWNlcyA+IDAgKSB7CiAgICAgICAgJGxwX29iamVjdC0+ZGVjcmVhc2VfU1BBQ0VTKDEpOwogICAgfQoKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHhscF90d2VhawoKeyAgICAjIyBiZWdpbiBjbG9zdXJlIG1ha2VfYWxpZ25tZW50X3BhdHRlcm5zCgogICAgbXkgJWtleXdvcmRfbWFwOwogICAgbXkgJW9wZXJhdG9yX21hcDsKICAgIG15ICVpc19rX3dfbl9DX2Jhbmc7CiAgICBteSAlaXNfbXlfbG9jYWxfb3VyOwogICAgbXkgJWlzX3VzZV9saWtlOwogICAgbXkgJWlzX2JpbmFyeV90eXBlOwogICAgbXkgJWlzX2JpbmFyeV9rZXl3b3JkOwogICAgbXkgJW5hbWVfbWFwOwoKICAgIEJFR0lOIHsKCiAgICAgICAgIyBOb3RlOiAlYmxvY2tfdHlwZV9tYXAgaXMgbm93IGdsb2JhbCB0byBlbmFibGUgdGhlIC1nYWw9cyBvcHRpb24KCiAgICAgICAgIyBNYXAgY2VydGFpbiBrZXl3b3JkcyB0byB0aGUgc2FtZSAnaWYnIGNsYXNzIHRvIGFsaWduCiAgICAgICAgIyBsb25nIGlmL2Vsc2lmIHNlcXVlbmNlcy4gW2Vsc2lmLnBsXS4gQnV0IG5vdGUgdGhhdCB0aGlzIGlzCiAgICAgICAgIyBvbmx5IGZvciBwdXJwb3NlcyBvZiBtYWtpbmcgdGhlIHBhdHRlcm5zLCBub3QgYWxpZ25tZW50IHRva2Vucy4KICAgICAgICAjIFRoZSBvbmx5IHBvc3NpYmxlIGVxdWl2YWxlbnQgYWxpZ25tZW50IHRva2VucyBhcmUgJ2lmJyBhbmQgJ3VubGVzcycsCiAgICAgICAgIyBhbmQgdGhpcyBpcyBoYW5kbGVkIGVhcmxpZXIgdW5kZXIgY29udHJvbCBvZiAkck9wdHNfdmFsaWduX2lmX3VubGVzcwogICAgICAgICMgdG8gYXZvaWQgbWFraW5nIHRoaXMgYSBnbG9iYWwgaGFzaC4KICAgICAgICAla2V5d29yZF9tYXAgPSAoCiAgICAgICAgICAgICd1bmxlc3MnICA9PiAnaWYnLAogICAgICAgICAgICAnZWxzZScgICAgPT4gJ2lmJywKICAgICAgICAgICAgJ2Vsc2lmJyAgID0+ICdpZicsCiAgICAgICAgICAgICd3aGVuJyAgICA9PiAnZ2l2ZW4nLAogICAgICAgICAgICAnZGVmYXVsdCcgPT4gJ2dpdmVuJywKICAgICAgICAgICAgJ2Nhc2UnICAgID0+ICdzd2l0Y2gnLAoKICAgICAgICAgICAgIyB0cmVhdCBhbiAndW5kZWYnIHNpbWlsYXIgdG8gbnVtYmVycyBhbmQgcXVvdGVzCiAgICAgICAgICAgICd1bmRlZicgPT4gJ1EnLAogICAgICAgICk7CgogICAgICAgICMgTWFwIGNlcnRhaW4gb3BlcmF0b3JzIHRvIHRoZSBzYW1lIGNsYXNzIGZvciBhbGlnbm1lbnQuCiAgICAgICAgIyBOb3RlIHRoYXQgdGhpcyBtYXAgaXMgZm9yIHRoZSBhbGlnbm1lbnQgdG9rZW5zLCBub3QgdGhlIHBhdHRlcm5zLgogICAgICAgICMgV2UgY291bGQgaGF2ZSBwbGFjZWQgJ3VubGVzcycgPT4gJ2lmJyBoZXJlLCBidXQgc2luY2UgdGhhdCBpcwogICAgICAgICMgdW5kZXIgY29udHJvbCBvZiAkck9wdHNfdmFsaWduX2lmX3VubGVzcywgaXQgaXMgaGFuZGxlZCBlbHNld2hlcmUuCiAgICAgICAgJW9wZXJhdG9yX21hcCA9ICgKICAgICAgICAgICAgJyF+JyA9PiAnPX4nLAogICAgICAgICAgICAnKz0nID0+ICcrPScsCiAgICAgICAgICAgICctPScgPT4gJys9JywKICAgICAgICAgICAgJyo9JyA9PiAnKz0nLAogICAgICAgICAgICAnLz0nID0+ICcrPScsCiAgICAgICAgKTsKCiAgICAgICAgJWlzX2tfd19uX0NfYmFuZyA9ICgKICAgICAgICAgICAgJ2snID0+IDEsCiAgICAgICAgICAgICd3JyA9PiAxLAogICAgICAgICAgICAnbicgPT4gMSwKICAgICAgICAgICAgJ0MnID0+IDEsCiAgICAgICAgICAgICchJyA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgbGVhZGluZyBrZXl3b3JkcyB3aGljaCB0byBza2lwIGZvciBlZmZpY2llbmN5IHdoZW4gbWFraW5nIHBhcmVubGVzcwogICAgICAgICMgY29udGFpbmVyIG5hbWVzCiAgICAgICAgbXkgQHEgPSBxdyggbXkgbG9jYWwgb3VyIHJldHVybiApOwogICAgICAgIEBpc19teV9sb2NhbF9vdXJ7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICAgICAgIyBsZWFkaW5nIGtleXdvcmRzIHdoZXJlIHdlIHNob3VsZCBqdXN0IGpvaW4gb25lIHRva2VuIHRvIGZvcm0KICAgICAgICAjIHBhcmVubGVzcyBuYW1lCiAgICAgICAgQHEgPSBxdyggdXNlICk7CiAgICAgICAgQGlzX3VzZV9saWtle0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgICAgICMgdG9rZW4gdHlwZXMgd2hpY2ggcHJldmVudCB1c2luZyBsZWFkaW5nIHdvcmQgYXMgYSBjb250YWluZXIgbmFtZQogICAgICAgIEBxID0gcXd7CiAgICAgICAgICB4IC8gOiAlIC4gfCBeIDwgPSA+IHx8ID49ICE9ICo9ID0+ICF+ID09ICYmIHw9IC49IC09ID1+ICs9IDw9CiAgICAgICAgICAlPSBePSB4PSB+fiAqKiA8PCAvPSAmPSAvLyA+PiB+LiAmLiB8LiBeLgogICAgICAgICAgKio9IDw8PSA+Pj0gJiY9IHx8PSAvLz0gPD0+ICF+fiAmLj0gfC49IF4uPSA8PH4KICAgICAgICB9OwogICAgICAgIHB1c2ggQHEsICcsJzsKICAgICAgICBAaXNfYmluYXJ5X3R5cGV7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICAgICAgIyB0b2tlbiBrZXl3b3JkcyB3aGljaCBwcmV2ZW50IHVzaW5nIGxlYWRpbmcgd29yZCBhcyBhIGNvbnRhaW5lciBuYW1lCiAgICAgICAgQHEgPSBxdyggYW5kIG9yIGVyciBlcSBuZSBjbXAgKTsKICAgICAgICBAaXNfYmluYXJ5X2tleXdvcmR7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICAgICAgIyBTb21lIGNvbW1vbiBmdW5jdGlvbiBjYWxscyB3aG9zZSBhcmdzIGNhbiBiZSBhbGlnbmVkLiAgVGhlc2UgZG8gbm90CiAgICAgICAgIyBnaXZlIGdvb2QgYWxpZ25tZW50cyBpZiB0aGUgbGVuZ3RocyBkaWZmZXIgc2lnbmlmaWNhbnRseS4KICAgICAgICAlbmFtZV9tYXAgPSAoCiAgICAgICAgICAgICd1bmxpa2UnID0+ICdsaWtlJywKICAgICAgICAgICAgJ2lzbnQnICAgPT4gJ2lzJywKICAgICAgICAgICAgIyMnaXNfZGVlcGx5JyA9PiAnaXMnLCAgICMgcG9vcjsgbmFtZXMgbGVuZ3RocyB0b28gZGlmZmVyZW50CiAgICAgICAgKTsKCiAgICB9ICMjIGVuZCBCRUdJTgoKICAgIHN1YiBtYWtlX2FsaWdubWVudF9wYXR0ZXJucyB7CgogICAgICAgIG15ICgKICAgICAgICAgICAgJHNlbGYsCgogICAgICAgICAgICAkaWJlZywKICAgICAgICAgICAgJGllbmQsCiAgICAgICAgICAgICRyYWxpZ25tZW50X3R5cGVfdG9fZ28sCiAgICAgICAgICAgICRhbGlnbm1lbnRfY291bnQsCgogICAgICAgICkgPSBAXzsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgVGhpcyBzdWIgY3JlYXRlcyBhcnJheXMgb2YgdmVydGljYWwgYWxpZ25tZW50IGluZm8gZm9yIG9uZSBvdXRwdXQKICAgICAgICAjIGxpbmUuCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAjIElucHV0IHBhcmFtZXRlcnM6CiAgICAgICAgIyAgJGliZWcsICRpZW5kIC0gaW5kZXggcmFuZ2Ugb2YgdGhpcyBsaW5lIGluIHRoZSBfdG9fZ28gYXJyYXlzCiAgICAgICAgIyAgJHJhbGlnbm1lbnRfdHlwZV90b19nbyAtIGFsaWdubWVudCB0eXBlIG9mIHRva2VucywgbGlrZSAnPScsIGlmIGFueQogICAgICAgICMgICRhbGlnbm1lbnRfY291bnQgLSBudW1iZXIgb2YgYWxpZ25tZW50IHRva2VucyBpbiB0aGUgbGluZQoKICAgICAgICAjIFRoZSBhcnJheXMgd2hpY2ggYXJlIGNyZWF0ZWQgY29udGFpbiBzdHJpbmdzIHRoYXQgY2FuIGJlIHRlc3RlZCBieQogICAgICAgICMgdGhlIHZlcnRpY2FsIGFsaWduZXIgdG8gc2VlIGlmIGNvbnNlY3V0aXZlIGxpbmVzIGNhbiBiZSBhbGlnbmVkCiAgICAgICAgIyB2ZXJ0aWNhbGx5LgogICAgICAgICMKICAgICAgICAjIFRoZSBmb3VyIGFycmF5cyBhcmUgaW5kZXhlZCBvbiB0aGUgdmVydGljYWwKICAgICAgICAjIGFsaWdubWVudCBmaWVsZHMgYW5kIGFyZToKICAgICAgICAjIEB0b2tlbnMgLSBhIGxpc3Qgb2YgYW55IHZlcnRpY2FsIGFsaWdubWVudCB0b2tlbnMgZm9yIHRoaXMgbGluZS4KICAgICAgICAjICAgVGhlc2UgYXJlIHRva2Vucywgc3VjaCBhcyAnPScgJyYmJyAnIycgZXRjIHdoaWNoCiAgICAgICAgIyAgIHdlIHdhbnQgdG8gbWlnaHQgYWxpZ24gdmVydGljYWxseS4gIFRoZXNlIGFyZQogICAgICAgICMgICBkZWNvcmF0ZWQgd2l0aCB2YXJpb3VzIGluZm9ybWF0aW9uIHN1Y2ggYXMKICAgICAgICAjICAgbmVzdGluZyBkZXB0aCB0byBwcmV2ZW50IHVud2FudGVkIHZlcnRpY2FsCiAgICAgICAgIyAgIGFsaWdubWVudCBtYXRjaGVzLgogICAgICAgICMgQGZpZWxkcyAtIHRoZSBhY3R1YWwgdGV4dCBvZiB0aGUgbGluZSBiZXR3ZWVuIHRoZSB2ZXJ0aWNhbCBhbGlnbm1lbnQKICAgICAgICAjICAgdG9rZW5zLgogICAgICAgICMgQHBhdHRlcm5zIC0gYSBtb2RpZmllZCBsaXN0IG9mIHRva2VuIHR5cGVzLCBvbmUgZm9yIGVhY2ggYWxpZ25tZW50CiAgICAgICAgIyAgIGZpZWxkLiAgVGhlc2Ugc2hvdWxkIG5vcm1hbGx5IGVhY2ggbWF0Y2ggYmVmb3JlIGFsaWdubWVudCBpcwogICAgICAgICMgICBhbGxvd2VkLCBldmVuIHdoZW4gdGhlIGFsaWdubWVudCB0b2tlbnMgbWF0Y2guCiAgICAgICAgIyBAZmllbGRfbGVuZ3RocyAtIHRoZSBkaXNwbGF5IHdpZHRoIG9mIGVhY2ggZmllbGQKCiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBTaG9ydGN1dCBmb3IgbGluZXMgd2l0aG91dCBhbGlnbm1lbnRzCiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaWYgKCAhJGFsaWdubWVudF9jb3VudCApIHsKICAgICAgICAgICAgbXkgJHJ0b2tlbnMgPSBbXTsKICAgICAgICAgICAgbXkgJHJmaWVsZF9sZW5ndGhzID0KICAgICAgICAgICAgICBbICRzdW1tZWRfbGVuZ3Roc190b19nb1sgJGllbmQgKyAxIF0gLQogICAgICAgICAgICAgICAgICAkc3VtbWVkX2xlbmd0aHNfdG9fZ29bJGliZWddIF07CiAgICAgICAgICAgIG15ICRycGF0dGVybnM7CiAgICAgICAgICAgIG15ICRyZmllbGRzOwogICAgICAgICAgICBpZiAoICRpYmVnID09ICRpZW5kICkgewogICAgICAgICAgICAgICAgJHJmaWVsZHMgICA9IFsgJHRva2Vuc190b19nb1skaWJlZ10gXTsKICAgICAgICAgICAgICAgICRycGF0dGVybnMgPSBbICR0eXBlc190b19nb1skaWJlZ10gXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRyZmllbGRzID0KICAgICAgICAgICAgICAgICAgWyBqb2luKCBFTVBUWV9TVFJJTkcsIEB0b2tlbnNfdG9fZ29bICRpYmVnIC4uICRpZW5kIF0gKSBdOwogICAgICAgICAgICAgICAgJHJwYXR0ZXJucyA9CiAgICAgICAgICAgICAgICAgIFsgam9pbiggRU1QVFlfU1RSSU5HLCBAdHlwZXNfdG9fZ29bICRpYmVnIC4uICRpZW5kIF0gKSBdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbICRydG9rZW5zLCAkcmZpZWxkcywgJHJwYXR0ZXJucywgJHJmaWVsZF9sZW5ndGhzIF07CiAgICAgICAgfQoKICAgICAgICBteSAkaV9zdGFydCAgICAgICAgICAgICAgPSAkaWJlZzsKICAgICAgICBteSAkZGVwdGggICAgICAgICAgICAgICAgPSAwOwogICAgICAgIG15ICRpX2RlcHRoX3ByZXYgICAgICAgICA9ICRpX3N0YXJ0OwogICAgICAgIG15ICRkZXB0aF9wcmV2ICAgICAgICAgICA9ICRkZXB0aDsKICAgICAgICBteSAlY29udGFpbmVyX25hbWUgICAgICAgPSAoIDAgPT4gRU1QVFlfU1RSSU5HICk7CiAgICAgICAgbXkgJHNhd19leGNsYW1hdGlvbl9tYXJrID0gMDsKCiAgICAgICAgbXkgQHRva2VucyAgICAgICAgPSAoKTsKICAgICAgICBteSBAZmllbGRzICAgICAgICA9ICgpOwogICAgICAgIG15IEBwYXR0ZXJucyAgICAgID0gKCk7CiAgICAgICAgbXkgQGZpZWxkX2xlbmd0aHMgPSAoKTsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIE1ha2UgYSBjb250YWluZXIgbmFtZSBmb3IgYW55IHVuY29udGFpbmVkIGNvbW1hcywgaXNzdWUgYzA4OQogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBUaGlzIGlzIGEgZ2VuZXJhbGl6YXRpb24gb2YgdGhlIGZpeCBmb3IgcnQxMzY0MTYgd2hpY2ggd2FzIGEKICAgICAgICAjIHNwZWNpYWxpemVkIHBhdGNoIGp1c3QgZm9yICd1c2UgTW9kdWxlJyBzdGF0ZW1lbnRzLgogICAgICAgICMgV2UgcmVzdHJpY3QgdGhpcyB0byBzZW1pY29sb24tdGVybWluYXRlZCBzdGF0ZW1lbnRzOyB0aGF0IHdheQogICAgICAgICMgd2Uga25vdyB0aGF0IHRoZSB0b3AgbGV2ZWwgY29tbWFzIGFyZSBub3QgaW4gYSBsaXN0IGNvbnRhaW5lci4KICAgICAgICBpZiAoICRpYmVnID09IDAgJiYgJGllbmQgPT0gJG1heF9pbmRleF90b19nbyApIHsKICAgICAgICAgICAgbXkgJGl0ZXJtID0gJG1heF9pbmRleF90b19nbzsKICAgICAgICAgICAgaWYgKCAkdHlwZXNfdG9fZ29bJGl0ZXJtXSBlcSAnIycgKSB7CiAgICAgICAgICAgICAgICAkaXRlcm0gPSBpcHJldl90b19nbygkaXRlcm0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIEFsaWdubWVudCBsaW5lcyBlbmRpbmcgbGlrZSAnPT4gc3ViIHsnOyAgZml4ZXMgaXNzdWUgYzA5MwogICAgICAgICAgICBteSAkdGVybV90eXBlX29rID0gJHR5cGVzX3RvX2dvWyRpdGVybV0gZXEgJzsnOwogICAgICAgICAgICAkdGVybV90eXBlX29rIHx8PQogICAgICAgICAgICAgICR0b2tlbnNfdG9fZ29bJGl0ZXJtXSBlcSAneycgJiYgJGJsb2NrX3R5cGVfdG9fZ29bJGl0ZXJtXTsKCiAgICAgICAgICAgIGlmICggICAkaXRlcm0gPiAkaWJlZwogICAgICAgICAgICAgICAgJiYgJHRlcm1fdHlwZV9vawogICAgICAgICAgICAgICAgJiYgISRpc19teV9sb2NhbF9vdXJ7ICR0b2tlbnNfdG9fZ29bJGliZWddIH0KICAgICAgICAgICAgICAgICYmICRsZXZlbHNfdG9fZ29bJGliZWddIGVxICRsZXZlbHNfdG9fZ29bJGl0ZXJtXSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRjb250YWluZXJfbmFtZXsnMCd9ID0KICAgICAgICAgICAgICAgICAgbWFrZV91bmNvbnRhaW5lZF9jb21tYV9uYW1lKCAkaWJlZywgJGl0ZXJtICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgQmVnaW4gbWFpbiBsb29wIG92ZXIgYWxsIHRva2VucwogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIG15ICRqID0gMDsgICAgIyBmaWVsZCBpbmRleAoKICAgICAgICAkcGF0dGVybnNbMF0gPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgbXkgJXRva2VuX2NvdW50OwogICAgICAgIG15ICR0eXBlOwogICAgICAgIGZvciBteSAkaSAoICRpYmVnIC4uICRpZW5kICkgewoKICAgICAgICAgICAgIyBoYW5kbGUgYSBibGFuayBzcGFjZQogICAgICAgICAgICBpZiAoICggJHR5cGUgPSAkdHlwZXNfdG9fZ29bJGldICkgZXEgJ2InICkgewogICAgICAgICAgICAgICAgJHBhdHRlcm5zWyRqXSAuPSAkdHlwZTsKICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgUGFydCAxOiBrZWVwIHRyYWNrIG9mIGNvbnRhaW5lcnMgYmFsYW5jZWQgb24gdGhpcyBsaW5lIG9ubHkuCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgVGhlc2UgYXJlIHVzZWQgYmVsb3cgdG8gcHJldmVudCB1bndhbnRlZCBjcm9zcy1saW5lIGFsaWdubWVudHMuCiAgICAgICAgICAgICMgVW5iYWxhbmNlZCBjb250YWluZXJzIGFscmVhZHkgYXZvaWQgYWxpZ25pbmcgYWNyb3NzCiAgICAgICAgICAgICMgY29udGFpbmVyIGJvdW5kYXJpZXMuCiAgICAgICAgICAgIGlmICggJHR5cGVfc2VxdWVuY2VfdG9fZ29bJGldICkgewogICAgICAgICAgICAgICAgbXkgJHRva2VuID0gJHRva2Vuc190b19nb1skaV07CiAgICAgICAgICAgICAgICBpZiAoICRpc19vcGVuaW5nX3Rva2VueyR0b2tlbn0gKSB7CgogICAgICAgICAgICAgICAgICAgICMgaWYgY29udGFpbmVyIGlzIGJhbGFuY2VkIG9uIHRoaXMgbGluZS4uLgogICAgICAgICAgICAgICAgICAgIG15ICRpX21hdGUgPSAkbWF0ZV9pbmRleF90b19nb1skaV07CiAgICAgICAgICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkaV9tYXRlKSApIHsgJGlfbWF0ZSA9IC0xIH0KICAgICAgICAgICAgICAgICAgICBpZiAoICRpX21hdGUgPiAkaSAmJiAkaV9tYXRlIDw9ICRpZW5kICkgewogICAgICAgICAgICAgICAgICAgICAgICAkaV9kZXB0aF9wcmV2ID0gJGk7CiAgICAgICAgICAgICAgICAgICAgICAgICRkZXB0aF9wcmV2ICAgPSAkZGVwdGg7CiAgICAgICAgICAgICAgICAgICAgICAgICRkZXB0aCsrOwoKICAgICAgICAgICAgICAgICAgICAgIyBBcHBlbmQgdGhlIHByZXZpb3VzIHRva2VuIG5hbWUgdG8gbWFrZSB0aGUgY29udGFpbmVyIG5hbWUKICAgICAgICAgICAgICAgICAgICAgIyBtb3JlIHVuaXF1ZS4gIFRoaXMgbmFtZSB3aWxsIGFsc28gYmUgZ2l2ZW4gdG8gYW55IGNvbW1hcwogICAgICAgICAgICAgICAgICAgICAjIHdpdGhpbiB0aGlzIGNvbnRhaW5lciwgYW5kIGl0IGhlbHBzIGF2b2lkIHVuZGVzaXJhYmxlCiAgICAgICAgICAgICAgICAgICAgICMgYWxpZ25tZW50cyBvZiBkaWZmZXJlbnQgdHlwZXMgb2YgY29udGFpbmVycy4KCiAgICAgICAgICAgICAgICAgICAgICMgQ29udGFpbmVycyBiZWdpbm5pbmcgd2l0aCB7IGFuZCBbIGFyZSBnaXZlbiB0aG9zZSBuYW1lcwogICAgICAgICAgICAgICAgICAgICAjIGZvciB1bmlxdWVuZXNzLiBUaGF0IHdheSBjb21tYXMgaW4gZGlmZmVyZW50IGNvbnRhaW5lcnMKICAgICAgICAgICAgICAgICAgICAgIyB3aWxsIG5vdCBtYXRjaC4gSGVyZSBpcyBhbiBleGFtcGxlIG9mIHdoYXQgdGhpcyBwcmV2ZW50czoKICAgICAgICAgICAgICAgICAgICAgIyAgIGEgPT4gWyAxLCAgICAgICAyLCAzIF0sCiAgICAgICAgICAgICAgICAgICAgICMgICBiID0+IHsgYjEgPT4gNCwgYjIgPT4gNSB9LAogICAgICAgICAgICAgICAgICAgICAjIEhlcmUgaXMgYW5vdGhlciBleGFtcGxlIG9mIHdoYXQgd2UgYXZvaWQgYnkgbGFiZWxpbmcgdGhlCiAgICAgICAgICAgICAgICAgICAgICMgY29tbWFzIHByb3Blcmx5OgoKICAgICAgICAgICAgICAgICAgICMgaXNfZCggWyAkYSwgICAgICAgICRhIF0sIFsgJGIsICAgICAgICAgICAgICAgJGMgXSApOwogICAgICAgICAgICAgICAgICAgIyBpc19kKCB7IGZvbyA9PiAkYSwgYmFyID0+ICRhIH0sIHsgZm9vID0+ICRiLCBiYXIgPT4gJGMgfSApOwogICAgICAgICAgICAgICAgICAgIyBpc19kKCBbIFwkYSwgICAgICAgXCRhIF0sIFsgXCRiLCAgICAgICAgICAgICBcJGMgXSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJG5hbWUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICR0b2tlbiBlcSAnKCcgPyAkc2VsZi0+bWFrZV9wYXJlbl9uYW1lKCRpKSA6ICR0b2tlbjsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgbmFtZSBjYW5ub3QgYmUgJy4nLCBzbyBjaGFuZ2UgdG8gc29tZXRoaW5nIGVsc2UgaWYgc28KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkbmFtZSBlcSAnLicgKSB7ICRuYW1lID0gJ2RvdCcgfQoKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRhaW5lcl9uYW1leyRkZXB0aH0gPSAiKyIgLiAkbmFtZTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgTWFrZSB0aGUgY29udGFpbmVyIG5hbWUgZXZlbiBtb3JlIHVuaXF1ZSBpZiBuZWNlc3NhcnkuCiAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgd2UgYXJlIG5vdCB2ZXJ0aWNhbGx5IGFsaWduaW5nIHRoaXMgb3BlbmluZyBwYXJlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIyBhcHBlbmQgYSBjaGFyYWN0ZXIgY291bnQgdG8gYXZvaWQgYmFkIGFsaWdubWVudCBzaW5jZQogICAgICAgICAgICAgICAgICAgICAgICAjIGl0IHVzdWFsbHkgbG9va3MgYmFkIHRvIGFsaWduIGNvbW1hcyB3aXRoaW4gY29udGFpbmVycwogICAgICAgICAgICAgICAgICAgICAgICAjIGZvciB3aGljaCB0aGUgb3BlbmluZyBwYXJlbnMgZG8gbm90IGFsaWduLiAgSGVyZQogICAgICAgICAgICAgICAgICAgICAgICAjIGlzIGFuIGV4YW1wbGUgdmVyeSBCQUQgYWxpZ25tZW50IG9mIGNvbW1hcyAoYmVjYXVzZQogICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSBhdGFuMiBmdW5jdGlvbnMgYXJlIG5vdCBhbGwgYWxpZ25lZCk6CiAgICAgICAgICAgICAgICAgICAgICAgICMgICAgJFhZID0KICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICRYICogJFJUWVNRUDEgKiBhdGFuMiggJFgsICRSVFlTUVAxICkgKwogICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgJFkgKiAkUlRYU1FQMSAqIGF0YW4yKCAkWSwgJFJUWFNRUDEgKSAtCiAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAkWCAqIGF0YW4yKCAkWCwgICAgICAgICAgICAxICkgLQogICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgJFkgKiBhdGFuMiggJFksICAgICAgICAgICAgMSApOwogICAgICAgICAgICAgICAgICAgICAgICAjCiAgICAgICAgICAgICAgICAgICAgICAgICMgT24gdGhlIG90aGVyIGhhbmQsIGl0IGlzIHVzdWFsbHkgb2theSB0byBhbGlnbiBjb21tYXMKICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBvcGVuaW5nIHBhcmVucyBhbGlnbiwgc3VjaCBhczoKICAgICAgICAgICAgICAgICAgICAgICAgIyAgICBnbFZlcnRleDNkKCAkY3ggKyAkcyAqICR4cywgJGN5LCAgICAgICAgICAgICR6ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICMgICAgZ2xWZXJ0ZXgzZCggJGN4LCAgICAgICAgICAgICRjeSArICRzICogJHlzLCAkeiApOwogICAgICAgICAgICAgICAgICAgICAgICAjICAgIGdsVmVydGV4M2QoICRjeCAtICRzICogJHhzLCAkY3ksICAgICAgICAgICAgJHogKTsKICAgICAgICAgICAgICAgICAgICAgICAgIyAgICBnbFZlcnRleDNkKCAkY3gsICAgICAgICAgICAgJGN5IC0gJHMgKiAkeXMsICR6ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICMKICAgICAgICAgICAgICAgICAgICAgICAgIyBUbyBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZXNlIHNpdHVhdGlvbnMsIHdlIGFwcGVuZAogICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSBsZW5ndGggb2YgdGhlIGxpbmUgZnJvbSB0aGUgcHJldmlvdXMgbWF0Y2hpbmcKICAgICAgICAgICAgICAgICAgICAgICAgIyB0b2tlbiwgb3IgYmVnaW5uaW5nIG9mIGxpbmUsIHRvIHRoZSBmdW5jdGlvbiBuYW1lLgogICAgICAgICAgICAgICAgICAgICAgICAjIFRoaXMgd2lsbCBhbGxvdyB0aGUgdmVydGljYWwgYWxpZ25lciB0byByZWplY3QKICAgICAgICAgICAgICAgICAgICAgICAgIyB1bmRlc2lyYWJsZSBtYXRjaGVzLgoKICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiB3ZSBhcmUgbm90IGFsaWduaW5nIG9uIHRoaXMgcGFyZW4uLi4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhJHJhbGlnbm1lbnRfdHlwZV90b19nby0+WyRpXSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCB0aGUgbGVuZ3RoIHRvIHRoZSBuYW1lIC4uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGxlbiA9ICRzdW1tZWRfbGVuZ3Roc190b19nb1skaV0gLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3VtbWVkX2xlbmd0aHNfdG9fZ29bJGlfc3RhcnRdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRG8gbm90IGluY2x1ZGUgdGhlIGxlbmd0aCBvZiBhbnkgJyEnLiBPdGhlcndpc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbW1hcyBpbiB0aGUgZm9sbG93aW5nIGxpbmUgd2lsbCBub3QgbWF0Y2g6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICBvayggMjAsIHRhcHByb3goICggcGRsIDIsICAzICksICggcGRsIDIsIDMgKSApICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICBvayggMjEsICF0YXBwcm94KCAoIHBkbCAyLCAzICksICggcGRsIDIsIDQgKSApICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHNhd19leGNsYW1hdGlvbl9tYXJrKSB7ICRsZW4gLT0gMSB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBGb3IgZmlyc3QgdG9rZW4sIHVzZSBkaXN0YW5jZSBmcm9tIHN0YXJ0IG9mIGxpbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYnV0IHN1YnRyYWN0IG9mZiB0aGUgaW5kZW50YXRpb24gZHVlIHRvIGxldmVsLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBPdGhlcndpc2UsIHJlc3VsdHMgY291bGQgdmFyeSB3aXRoIGluZGVudGF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkaV9zdGFydCA9PSAkaWJlZyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGVuICs9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWFkaW5nX3NwYWNlc190b19nbygkaWJlZykgLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxldmVsc190b19nb1skaV9zdGFydF0gKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJPcHRzX2luZGVudF9jb2x1bW5zOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkbGVuIDwgMCApIHsgJGxlbiA9IDAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGFjayB0aGlzIGxlbmd0aCBvbnRvIHRoZSBjb250YWluZXIgbmFtZSB0byB0cnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdG8gbWFrZSBhIHVuaXF1ZSB0b2tlbiBuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29udGFpbmVyX25hbWV7JGRlcHRofSAuPSAiLSIgLiAkbGVuOwogICAgICAgICAgICAgICAgICAgICAgICB9ICMjIGVuZCBpZiAoICEkcmFsaWdubWVudF90eXBlX3RvX2dvLi4uKQogICAgICAgICAgICAgICAgICAgIH0gIyMgZW5kIGlmICggJGlfbWF0ZSA+ICRpICYmICRpX21hdGUuLi4pCiAgICAgICAgICAgICAgICB9ICMjIGVuZCBpZiAoICRpc19vcGVuaW5nX3Rva2VuLi4uKQoKICAgICAgICAgICAgICAgIGVsc2lmICggJGlzX2Nsb3NpbmdfdG9rZW57JHRva2VufSApIHsKICAgICAgICAgICAgICAgICAgICAkaV9kZXB0aF9wcmV2ID0gJGk7CiAgICAgICAgICAgICAgICAgICAgJGRlcHRoX3ByZXYgICA9ICRkZXB0aDsKICAgICAgICAgICAgICAgICAgICAkZGVwdGgtLSBpZiAkZGVwdGggPiAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIyMgbXVzdCBiZSB0ZXJuYXJ5CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gIyMgZW5kIGlmICggJHR5cGVfc2VxdWVuY2VfdG9fZ28uLi4pCgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgUGFydCAyOiBpZiB3ZSBmaW5kIGEgbmV3IHN5bmNocm9uaXphdGlvbiB0b2tlbiwgd2UgYXJlIGRvbmUKICAgICAgICAgICAgIyB3aXRoIGEgZmllbGQKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICBpZiAoICRpID4gJGlfc3RhcnQgJiYgJHJhbGlnbm1lbnRfdHlwZV90b19nby0+WyRpXSApIHsKCiAgICAgICAgICAgICAgICBteSAkdG9rID0gbXkgJHJhd190b2sgPSAkcmFsaWdubWVudF90eXBlX3RvX2dvLT5bJGldOwoKICAgICAgICAgICAgICAgICMgbWFwIHNpbWlsYXIgaXRlbXMKICAgICAgICAgICAgICAgIG15ICR0b2tfbWFwID0gJG9wZXJhdG9yX21hcHskdG9rfTsKICAgICAgICAgICAgICAgICR0b2sgPSAkdG9rX21hcCBpZiAoJHRva19tYXApOwoKICAgICAgICAgICAgICAgICMgbWFrZSBzZXBhcmF0b3JzIGluIGRpZmZlcmVudCBuZXN0aW5nIGRlcHRocyB1bmlxdWUKICAgICAgICAgICAgICAgICMgYnkgYXBwZW5kaW5nIHRoZSBuZXN0aW5nIGRlcHRoIGRpZ2l0LgogICAgICAgICAgICAgICAgaWYgKCAkcmF3X3RvayBuZSAnIycgKSB7CiAgICAgICAgICAgICAgICAgICAgJHRvayAuPSAiJG5lc3RpbmdfZGVwdGhfdG9fZ29bJGldIjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGFsc28gZGVjb3JhdGUgY29tbWFzIHdpdGggYW55IGNvbnRhaW5lciBuYW1lIHRvIGF2b2lkCiAgICAgICAgICAgICAgICAjIHVud2FudGVkIGNyb3NzLWxpbmUgYWxpZ25tZW50cy4KICAgICAgICAgICAgICAgIGlmICggJHJhd190b2sgZXEgJywnIHx8ICRyYXdfdG9rIGVxICc9PicgKSB7CgogICAgICAgICAgICAgICAgICAjIElmIHdlIGFyZSBhdCBhbiBvcGVuaW5nIHRva2VuIHdoaWNoIGluY3JlYXNlZCBkZXB0aCwgd2UgaGF2ZQogICAgICAgICAgICAgICAgICAjIHRvIHVzZSB0aGUgbmFtZSBmcm9tIHRoZSBwcmV2aW91cyBkZXB0aC4KICAgICAgICAgICAgICAgICAgICBteSAkZGVwdGhfbGFzdCA9ICRpID09ICRpX2RlcHRoX3ByZXYgPyAkZGVwdGhfcHJldiA6ICRkZXB0aDsKICAgICAgICAgICAgICAgICAgICBteSAkZGVwdGhfcCA9CiAgICAgICAgICAgICAgICAgICAgICAoICRkZXB0aF9sYXN0IDwgJGRlcHRoID8gJGRlcHRoX2xhc3QgOiAkZGVwdGggKTsKICAgICAgICAgICAgICAgICAgICBpZiAoICRjb250YWluZXJfbmFtZXskZGVwdGhfcH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0b2sgLj0gJGNvbnRhaW5lcl9uYW1leyRkZXB0aF9wfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBQYXRjaCB0byBhdm9pZCBhbGlnbmluZyBsZWFkaW5nIGFuZCB0cmFpbGluZyBpZiwgdW5sZXNzLgogICAgICAgICAgICAgICAgIyBNYXJrIHRyYWlsaW5nIGlmLCB1bmxlc3Mgc3RhdGVtZW50cyB3aXRoIGNvbnRhaW5lciBuYW1lcy4KICAgICAgICAgICAgICAgICMgVGhpcyBtYWtlcyB0aGVtIGRpZmZlcmVudCBmcm9tIGxlYWRpbmcgaWYsIHVubGVzcyB3aGljaAogICAgICAgICAgICAgICAgIyBhcmUgbm90IHNvIG1hcmtlZCBhdCBwcmVzZW50LiAgSWYgd2UgZXZlciBuZWVkIHRvIG5hbWUKICAgICAgICAgICAgICAgICMgdGhlbSB0b28sIHdlIGNvdWxkIHVzZSBjaSB0byBkaXN0aW5ndWlzaCB0aGVtLgogICAgICAgICAgICAgICAgIyBFeGFtcGxlIHByb2JsZW0gdG8gYXZvaWQ6CiAgICAgICAgICAgICAgICAjICAgIHJldHVybiAoIDIsICJEQkVSUk9SIiApCiAgICAgICAgICAgICAgICAjICAgICAgaWYgKCAkcmV0dmFsID09IDIgKTsKICAgICAgICAgICAgICAgICMgICAgaWYgICAoIHNjYWxhciBAXyApIHsKICAgICAgICAgICAgICAgICMgICAgICAgIG15ICggJGEsICRiLCAkYywgJGQsICRlLCAkZiApID0gQF87CiAgICAgICAgICAgICAgICAjICAgIH0KICAgICAgICAgICAgICAgIGlmICggJHJhd190b2sgZXEgJygnICkgewogICAgICAgICAgICAgICAgICAgIGlmICggICAkY2lfbGV2ZWxzX3RvX2dvWyRpYmVnXQogICAgICAgICAgICAgICAgICAgICAgICAmJiAkY29udGFpbmVyX25hbWV7JGRlcHRofSA9fiAvXlwrKGlmfHVubGVzcykvICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0b2sgLj0gJGNvbnRhaW5lcl9uYW1leyRkZXB0aH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgRGVjb3JhdGUgYmxvY2sgYnJhY2VzIHdpdGggYmxvY2sgdHlwZXMgdG8gYXZvaWQKICAgICAgICAgICAgICAgICMgdW53YW50ZWQgYWxpZ25tZW50cyBzdWNoIGFzIHRoZSBmb2xsb3dpbmc6CiAgICAgICAgICAgICAgICAjIGZvcmVhY2ggKCBAeyRyb3V0cHV0X2FycmF5fSApIHsgJGZoLT5wcmludCgkXykgfQogICAgICAgICAgICAgICAgIyBldmFsICAgICAgICAgICAgICAgICAgICAgICAgICB7ICRmaC0+Y2xvc2UoKSB9OwogICAgICAgICAgICAgICAgaWYgKCAkcmF3X3RvayBlcSAneycgJiYgJGJsb2NrX3R5cGVfdG9fZ29bJGldICkgewogICAgICAgICAgICAgICAgICAgIG15ICRibG9ja190eXBlID0gJGJsb2NrX3R5cGVfdG9fZ29bJGldOwoKICAgICAgICAgICAgICAgICAgICAjIG1hcCBjZXJ0YWluIHJlbGF0ZWQgYmxvY2sgdHlwZXMgdG8gYWxsb3cKICAgICAgICAgICAgICAgICAgICAjIGVsc2UgYmxvY2tzIHRvIGFsaWduCiAgICAgICAgICAgICAgICAgICAgJGJsb2NrX3R5cGUgPSAkYmxvY2tfdHlwZV9tYXB7JGJsb2NrX3R5cGV9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQoICRibG9ja190eXBlX21hcHskYmxvY2tfdHlwZX0gKSApOwoKICAgICAgICAgICAgICAgICAgICAjIHJlbW92ZSBzdWIgbmFtZXMgdG8gYWxsb3cgb25lLWxpbmUgc3ViIGJyYWNlcyB0byBhbGlnbgogICAgICAgICAgICAgICAgICAgICMgcmVnYXJkbGVzcyBvZiBuYW1lCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkYmxvY2tfdHlwZSA9fiAvJFNVQl9QQVRURVJOLyApIHsgJGJsb2NrX3R5cGUgPSAnc3ViJyB9CgogICAgICAgICAgICAgICAgICAgICMgYWxsb3cgYWxsIGNvbnRyb2wtdHlwZSBibG9ja3MgdG8gYWxpZ24KICAgICAgICAgICAgICAgICAgICBpZiAoICRibG9ja190eXBlID1+IC9eW0EtWl0rJC8gKSB7ICRibG9ja190eXBlID0gJ0JFR0lOJyB9CgogICAgICAgICAgICAgICAgICAgICR0b2sgLj0gJGJsb2NrX3R5cGU7CgogICAgICAgICAgICAgICAgICAgICMgQXZvaWQgYWxpZ25pbmcgb3BlbmluZyBicmFjZXMgYWNyb3NzIGxlYWRpbmcgY2kgbGV2ZWwKICAgICAgICAgICAgICAgICAgICAjIGNoYW5nZXMgYnkgbWFya2luZyBibG9jayB0eXBlIHdpdGggX2NpIChpc3N1ZSBjMjI0KQogICAgICAgICAgICAgICAgICAgIGlmICggJGNpX2xldmVsc190b19nb1skaWJlZ10gKSB7ICR0b2sgLj0gJ18xJyB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBNYXJrIG11bHRpcGxlIGNvcGllcyBvZiBjZXJ0YWluIHRva2VucyB3aXRoIGEgY29weSBudW1iZXIuCiAgICAgICAgICAgICAgICAjIFRoaXMgd2lsbCBhbGxvdyB0aGUgYWxpZ25lciB0byBkZWNpZGUgaWYgdGhleSBhcmUgbWF0Y2hlZC4KICAgICAgICAgICAgICAgICMgRm9yIGV4YW1wbGUsIHRoZSB0d28gZXF1YWxzIGluIHRoZSBleGFtcGxlIGJlbG93IHdpbGwgYmUKICAgICAgICAgICAgICAgICMgbGFiZWxlZCAnPTAnIGFuZCAnPTAuMicuICBMYXRlciwgdGhlICc9MC4yJyB3aWxsIGJlIGlnbm9yZWQKICAgICAgICAgICAgICAgICMgaW4gYWxpZ25tZW50IGJlY2F1c2UgaXQgaGFzIG5vIG1hdGNoLgogICAgICAgICAgICAgICAgIyAgICAkfCAgICAgICAgICA9ICRkZWJ1ZyA9IDEgaWYgJG9wdF9kOwogICAgICAgICAgICAgICAgIyAgICAkZnVsbF9pbmRleCA9IDEgICAgICAgICAgaWYgJG9wdF9pOwoKICAgICAgICAgICAgICAgIGlmICggJHJhd190b2sgZXEgJz0nIHx8ICRyYXdfdG9rIGVxICc9PicgKSB7CiAgICAgICAgICAgICAgICAgICAgJHRva2VuX2NvdW50eyR0b2t9Kys7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkdG9rZW5fY291bnR7JHRva30gPiAxICkgewogICAgICAgICAgICAgICAgICAgICAgICAkdG9rIC49ICcuJyAuICR0b2tlbl9jb3VudHskdG9rfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBjb25jYXRlbmF0ZSB0aGUgdGV4dCBvZiB0aGUgY29uc2VjdXRpdmUgdG9rZW5zIHRvIGZvcm0KICAgICAgICAgICAgICAgICMgdGhlIGZpZWxkCiAgICAgICAgICAgICAgICBwdXNoKCBAZmllbGRzLAogICAgICAgICAgICAgICAgICAgIGpvaW4oIEVNUFRZX1NUUklORywgQHRva2Vuc190b19nb1sgJGlfc3RhcnQgLi4gJGkgLSAxIF0gKSApOwoKICAgICAgICAgICAgICAgIHB1c2ggQGZpZWxkX2xlbmd0aHMsCiAgICAgICAgICAgICAgICAgICRzdW1tZWRfbGVuZ3Roc190b19nb1skaV0gLSAkc3VtbWVkX2xlbmd0aHNfdG9fZ29bJGlfc3RhcnRdOwoKICAgICAgICAgICAgICAgICMgc3RvcmUgdGhlIGFsaWdubWVudCB0b2tlbiBmb3IgdGhpcyBmaWVsZAogICAgICAgICAgICAgICAgcHVzaCggQHRva2VucywgJHRvayApOwoKICAgICAgICAgICAgICAgICMgZ2V0IHJlYWR5IGZvciB0aGUgbmV4dCBiYXRjaAogICAgICAgICAgICAgICAgJGlfc3RhcnQgICAgICAgICAgICAgID0gJGk7CiAgICAgICAgICAgICAgICAkc2F3X2V4Y2xhbWF0aW9uX21hcmsgPSAwOwogICAgICAgICAgICAgICAgJGorKzsKICAgICAgICAgICAgICAgICRwYXR0ZXJuc1skal0gPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgIH0gIyMgZW5kIGlmICggbmV3IHN5bmNocm9uaXphdGlvbiB0b2tlbgoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgUGFydCAzOiBjb250aW51ZSBhY2N1bXVsYXRpbmcgdGhlIG5leHQgcGF0dGVybgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgICAgIGlmICggJGlzX2tfd19uX0NfYmFuZ3skdHlwZX0gKSB7CgogICAgICAgICAgICAgICAgIyBmb3Iga2V5d29yZHMgd2UgaGF2ZSB0byB1c2UgdGhlIGFjdHVhbCB0ZXh0CiAgICAgICAgICAgICAgICBpZiAoICR0eXBlIGVxICdrJyApIHsKCiAgICAgICAgICAgICAgICAgICAgbXkgJHRva19maXggPSAkdG9rZW5zX3RvX2dvWyRpXTsKCiAgICAgICAgICAgICAgICAgICAgIyBidXQgbWFwIGNlcnRhaW4ga2V5d29yZHMgdG8gYSBjb21tb24gc3RyaW5nIHRvIGFsbG93CiAgICAgICAgICAgICAgICAgICAgIyBhbGlnbm1lbnQuCiAgICAgICAgICAgICAgICAgICAgJHRva19maXggPSAka2V5d29yZF9tYXB7JHRva19maXh9CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQoICRrZXl3b3JkX21hcHskdG9rX2ZpeH0gKSApOwoKICAgICAgICAgICAgICAgICAgICAjIFZTTiBQQVRDSDogYWxsICduJyBjaGFycyBpbiBhIHBhdHRlcm4gbXVzdCBiZSBmb3IgdG9rZW4KICAgICAgICAgICAgICAgICAgICAjIHR5cGUgJ24nIChudW1iZXIpLiBpLmUuIGNvbnZlcnQgJ3ByaW50JyB0byAncHJpTnQnCiAgICAgICAgICAgICAgICAgICAgJHRva19maXggPX4gdHIvbi9OLzsKCiAgICAgICAgICAgICAgICAgICAgJHBhdHRlcm5zWyRqXSAuPSAkdG9rX2ZpeDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGlnbm9yZSBhbnkgISBpbiBwYXR0ZXJucwogICAgICAgICAgICAgICAgZWxzaWYgKCAkdHlwZSBlcSAnIScgKSB7CiAgICAgICAgICAgICAgICAgICAgJHNhd19leGNsYW1hdGlvbl9tYXJrID0gMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIEhhbmRsZSAkdHlwZSA9fiAvXlt3bkNdJC8uLi4KICAgICAgICAgICAgICAgICMgTWFyayBtb3N0IHRoaW5ncyBiZWZvcmUgYXJyb3dzIGFzIGEgcXVvdGUgdG8KICAgICAgICAgICAgICAgICMgZ2V0IHRoZW0gdG8gbGluZSB1cC4gVGVzdGZpbGU6IG1peGVkLnBsLgogICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgIG15ICR0eXBlX2ZpeCA9ICR0eXBlOwoKICAgICAgICAgICAgICAgICAgICBpZiAoICRpIDwgJGllbmQgLSAxICkgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkbmV4dF90eXBlID0gJHR5cGVzX3RvX2dvWyAkaSArIDEgXTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGlfbmV4dF9ub25ibGFuayA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAoICRuZXh0X3R5cGUgZXEgJ2InICkgPyAkaSArIDIgOiAkaSArIDEgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJHR5cGVzX3RvX2dvWyRpX25leHRfbm9uYmxhbmtdIGVxICc9PicgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHlwZV9maXggPSAnUSc7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBQYXRjaCB0byBpZ25vcmUgbGVhZGluZyBtaW51cyBiZWZvcmUgd29yZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGJ5IGNoYW5naW5nIHBhdHRlcm4gJ21RJyBpbnRvIGp1c3QgJ1EnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzbyB0aGF0IHdlIGNhbiBhbGlnbiB0aGluZ3MgbGlrZSB0aGlzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgQnV0dG9uICAgPT4gIlByaW50IGxldHRlciBcIn4kX1wiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIC1jb21tYW5kID0+IFsgc3ViIHsgcHJpbnQgIiRfWzBdXG4iIH0sICRfIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRwYXR0ZXJuc1skal0gZXEgJ20nICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXR0ZXJuc1skal0gPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgQ29udmVydCBhIGJhcmV3b3JkIHdpdGhpbiBicmFjZXMgaW50byBhIHF1b3RlIGZvcgogICAgICAgICAgICAgICAgICAgICMgbWF0Y2hpbmcuICBUaGlzIHdpbGwgYWxsb3cgYWxpZ25tZW50IG9mIGV4cHJlc3Npb25zIGxpa2UKICAgICAgICAgICAgICAgICAgICAjIHRoaXM6CiAgICAgICAgICAgICAgICAgICAgIyAgICBsb2NhbCAoICRTSUd7J0lOVCd9ICkgPSBJR05PUkU7CiAgICAgICAgICAgICAgICAgICAgIyAgICBsb2NhbCAoICRTSUd7QUxSTX0gKSAgPSAnUE9TVE1BTic7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAgICR0eXBlIGVxICd3JwogICAgICAgICAgICAgICAgICAgICAgICAmJiAkaSA+ICRpYmVnCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRpIDwgJGllbmQKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHR5cGVzX3RvX2dvWyAkaSAtIDEgXSBlcSAnTCcKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHR5cGVzX3RvX2dvWyAkaSArIDEgXSBlcSAnUicgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGVfZml4ID0gJ1EnOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBWU04gUEFUQ0g6IG5vIGxvbmdlciBjaGFuZ2luZyAnbicgdG8gJ1EnIGhlcmU7IHRoaXMKICAgICAgICAgICAgICAgICAgICAjIHdpbGwgYmUgaGFuZGxlZCBpbiB0aGUgdmVydGljYWwgYWxpZ25lciBhbmQgYWxsb3cKICAgICAgICAgICAgICAgICAgICAjIHRoZSBhbGlnbmVyIHRvIGZpbmQgbnVtYmVycyBtb3JlIGVmZmljaWVudGx5LgogICAgICAgICAgICAgICAgICAgICMjOiBpZiAoICR0eXBlIGVxICduJyApIHsgJHR5cGVfZml4ID0gJ1EnIH0KCiAgICAgICAgICAgICAgICAgICAgJHBhdHRlcm5zWyRqXSAuPSAkdHlwZV9maXg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gIyMgZW5kIGVsc2lmICggJGlzX2tfd19uX0N7JHR5cGV9ICkKCiAgICAgICAgICAgICMgZXZlcnl0aGluZyBlbHNlCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJHBhdHRlcm5zWyRqXSAuPSAkdHlwZTsKCiAgICAgICAgICAgICAgICAjIHJlbW92ZSBhbnkgemVyby1sZXZlbCBuYW1lIGF0IGZpcnN0IGZhdCBjb21tYQogICAgICAgICAgICAgICAgaWYgKCAkZGVwdGggPT0gMCAmJiAkdHlwZSBlcSAnPT4nICkgewogICAgICAgICAgICAgICAgICAgICRjb250YWluZXJfbmFtZXskZGVwdGh9ID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgIH0gIyMgZW5kIGZvciBteSAkaSAoICRpYmVnIC4uICRpZW5kKQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBFbmQgb2YgbWFpbiBsb29wIC4uIGpvaW4gdGV4dCBvZiB0b2tlbnMgdG8gbWFrZSB0aGUgbGFzdCBmaWVsZAogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBwdXNoKCBAZmllbGRzLAogICAgICAgICAgICBqb2luKCBFTVBUWV9TVFJJTkcsIEB0b2tlbnNfdG9fZ29bICRpX3N0YXJ0IC4uICRpZW5kIF0gKSApOwogICAgICAgIHB1c2ggQGZpZWxkX2xlbmd0aHMsCiAgICAgICAgICAkc3VtbWVkX2xlbmd0aHNfdG9fZ29bICRpZW5kICsgMSBdIC0gJHN1bW1lZF9sZW5ndGhzX3RvX2dvWyRpX3N0YXJ0XTsKCiAgICAgICAgcmV0dXJuIFsgXEB0b2tlbnMsIFxAZmllbGRzLCBcQHBhdHRlcm5zLCBcQGZpZWxkX2xlbmd0aHMgXTsKICAgIH0gIyMgZW5kIHN1YiBtYWtlX2FsaWdubWVudF9wYXR0ZXJucwoKICAgIHN1YiBtYWtlX3VuY29udGFpbmVkX2NvbW1hX25hbWUgewogICAgICAgIG15ICggJGliZWcsICRpdGVybSApID0gQF87CgogICAgICAgICMgR2l2ZW46CiAgICAgICAgIyAgICRpYmVnID0gZmlyc3QgaW5kZXgKICAgICAgICAjICAgJGl0ZXJtID0gbGFzdCBpbmRleAoKICAgICAgICAjIE1ha2UgYSBjb250YWluZXIgbmFtZSBieSBjb21iaW5pbmcgYWxsIGxlYWRpbmcgYmFyZXdvcmRzLAogICAgICAgICMga2V5d29yZHMgYW5kIGZ1bmN0aW9ucy4KICAgICAgICBteSAkbmFtZSAgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgbXkgJGNvdW50ID0gMDsKICAgICAgICBteSAkY291bnRfbWF4OwogICAgICAgIG15ICRpbmFtZV9lbmQ7CiAgICAgICAgbXkgJGlsYXN0X2JsYW5rOwogICAgICAgIGZvciBteSAkaWkgKCAkaWJlZyAuLiAkaXRlcm0gKSB7CiAgICAgICAgICAgIG15ICR0eXBlID0gJHR5cGVzX3RvX2dvWyRpaV07CiAgICAgICAgICAgIGlmICggJHR5cGUgZXEgJ2InICkgewogICAgICAgICAgICAgICAgJGlsYXN0X2JsYW5rID0gJGlpOwogICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJHRva2VuID0gJHRva2Vuc190b19nb1skaWldOwoKICAgICAgICAgICAgIyBHaXZlIHVwIGlmIHdlIGZpbmQgYW4gb3BlbmluZyBwYXJlbiwgYmluYXJ5IG9wZXJhdG9yIG9yCiAgICAgICAgICAgICMgY29tbWEgd2l0aGluIG9yIGFmdGVyIHRoZSBwcm9wb3NlZCBjb250YWluZXIgbmFtZS4KICAgICAgICAgICAgaWYgKCAgICR0b2tlbiBlcSAnKCcKICAgICAgICAgICAgICAgIHx8ICRpc19iaW5hcnlfdHlwZXskdHlwZX0KICAgICAgICAgICAgICAgIHx8ICR0eXBlIGVxICdrJyAmJiAkaXNfYmluYXJ5X2tleXdvcmR7JHRva2VufSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRuYW1lID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBUaGUgY29udGFpbmVyIG5hbWUgaXMgb25seSBidWlsdCBvZiBjZXJ0YWluIHR5cGVzOgogICAgICAgICAgICAjICdrJz1idWlsdGluIGtleXdvcmQsICdVJz11c2VyIGRlZmluZWQgc3ViLCAndyc9dW5rbm93biBiYXJld29yZAogICAgICAgICAgICBsYXN0IGlmICggISRpc19rd1V7JHR5cGV9ICk7CgogICAgICAgICAgICAjIE5vcm1hbGx5IGl0IGlzIG1hZGUgb2Ygb25lIHdvcmQsIGJ1dCB0d28gd29yZHMgZm9yICd1c2UnCiAgICAgICAgICAgIGlmICggJGNvdW50ID09IDAgKSB7CiAgICAgICAgICAgICAgICBpZiAoICAgJHR5cGUgZXEgJ2snCiAgICAgICAgICAgICAgICAgICAgJiYgJGlzX3VzZV9saWtleyAkdG9rZW5zX3RvX2dvWyRpaV0gfSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJGNvdW50X21heCA9IDI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkY291bnRfbWF4ID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoIGRlZmluZWQoJGNvdW50X21heCkgJiYgJGNvdW50ID49ICRjb3VudF9tYXggKSB7CiAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIyMgY29udGludWUKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCAkbmFtZV9tYXB7JHRva2VufSApICkgewogICAgICAgICAgICAgICAgJHRva2VuID0gJG5hbWVfbWFweyR0b2tlbn07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRuYW1lIC49IFNQQUNFIC4gJHRva2VuOwogICAgICAgICAgICAkaW5hbWVfZW5kID0gJGlpOwogICAgICAgICAgICAkY291bnQrKzsKICAgICAgICB9CgogICAgICAgICMgUmVxdWlyZSBhIHNwYWNlIGFmdGVyIHRoZSBjb250YWluZXIgbmFtZSB0b2tlbihzKQogICAgICAgIGlmICggICAkbmFtZQogICAgICAgICAgICAmJiBkZWZpbmVkKCRpbGFzdF9ibGFuaykKICAgICAgICAgICAgJiYgJGlsYXN0X2JsYW5rID4gJGluYW1lX2VuZCApCiAgICAgICAgewogICAgICAgICAgICAkbmFtZSA9IHN1YnN0ciggJG5hbWUsIDEgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRuYW1lOwogICAgfSAjIyBlbmQgc3ViIG1ha2VfdW5jb250YWluZWRfY29tbWFfbmFtZQoKfSAjIyBlbmQgY2xvc3VyZSBtYWtlX2FsaWdubWVudF9wYXR0ZXJucwoKc3ViIG1ha2VfcGFyZW5fbmFtZSB7CiAgICBteSAoICRzZWxmLCAkaSApID0gQF87CgogICAgIyBUaGUgdG9rZW4gYXQgaW5kZXggJGkgaXMgYSAnKCcuCiAgICAjIENyZWF0ZSBhbiBhbGlnbm1lbnQgbmFtZSBmb3IgaXQgdG8gYXZvaWQgaW5jb3JyZWN0IGFsaWdubWVudHMuCgogICAgIyBTdGFydCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBwcmV2aW91cyBub25ibGFuayB0b2tlbi4uLgogICAgbXkgJG5hbWUgPSBFTVBUWV9TVFJJTkc7CiAgICBteSAkaW0gICA9ICRpIC0gMTsKICAgIHJldHVybiBFTVBUWV9TVFJJTkcgaWYgKCAkaW0gPCAwICk7CiAgICBpZiAoICR0eXBlc190b19nb1skaW1dIGVxICdiJyApIHsgJGltLS07IH0KICAgIHJldHVybiBFTVBUWV9TVFJJTkcgaWYgKCAkaW0gPCAwICk7CiAgICAkbmFtZSA9ICR0b2tlbnNfdG9fZ29bJGltXTsKCiAgICAjIFByZXBlbmQgYW55IHN1YiBuYW1lIHRvIGFuIGlzb2xhdGVkIC0+IHRvIGF2b2lkIHVud2FudGVkIGFsaWdubWVudHMKICAgICMgW3Rlc3QgY2FzZSBpcyB0ZXN0OC9wZW5jby5wbF0KICAgIGlmICggJG5hbWUgZXEgJy0+JyApIHsKICAgICAgICAkaW0tLTsKICAgICAgICBpZiAoICRpbSA+PSAwICYmICR0eXBlc190b19nb1skaW1dIG5lICdiJyApIHsKICAgICAgICAgICAgJG5hbWUgPSAkdG9rZW5zX3RvX2dvWyRpbV0gLiAkbmFtZTsKICAgICAgICB9CiAgICB9CgogICAgIyBGaW5hbGx5LCByZW1vdmUgYW55IGxlYWRpbmcgYXJyb3dzCiAgICBpZiAoIHN1YnN0ciggJG5hbWUsIDAsIDIgKSBlcSAnLT4nICkgewogICAgICAgICRuYW1lID0gc3Vic3RyKCAkbmFtZSwgMiApOwogICAgfQogICAgcmV0dXJuICRuYW1lOwp9ICMjIGVuZCBzdWIgbWFrZV9wYXJlbl9uYW1lCgp7ICAgICMjIGJlZ2luIGNsb3N1cmUgZ2V0X2ZpbmFsX2luZGVudGF0aW9uCgogICAgbXkgKCAkbGFzdF9pbmRlbnRhdGlvbl93cml0dGVuLCAkbGFzdF91bmFkanVzdGVkX2luZGVudGF0aW9uLAogICAgICAgICRsYXN0X2xlYWRpbmdfdG9rZW4gKTsKCiAgICBzdWIgaW5pdGlhbGl6ZV9nZXRfZmluYWxfaW5kZW50YXRpb24gewogICAgICAgICRsYXN0X2luZGVudGF0aW9uX3dyaXR0ZW4gICAgPSAwOwogICAgICAgICRsYXN0X3VuYWRqdXN0ZWRfaW5kZW50YXRpb24gPSAwOwogICAgICAgICRsYXN0X2xlYWRpbmdfdG9rZW4gICAgICAgICAgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGluaXRpYWxpemVfZ2V0X2ZpbmFsX2luZGVudGF0aW9uCgogICAgc3ViIGdldF9maW5hbF9pbmRlbnRhdGlvbiB7CgogICAgICAgIG15ICgKICAgICAgICAgICAgJHNlbGYsCgogICAgICAgICAgICAkaWJlZywKICAgICAgICAgICAgJGllbmQsCiAgICAgICAgICAgICRyaW5kZW50YXRpb25fbGlzdCwKICAgICAgICAgICAgJGxldmVsX2p1bXAsCgogICAgICAgICkgPSBAXzsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBUaGlzIHJvdXRpbmUgbWFrZXMgYW55IG5lY2Vzc2FyeSBhZGp1c3RtZW50cyB0byBnZXQgdGhlIGZpbmFsCiAgICAgICAgIyBpbmRlbnRhdGlvbiBvZiBhIGxpbmUgaW4gdGhlIEZvcm1hdHRlci4KICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgIyBHaXZlbjoKICAgICAgICAjICAgKCRpYmVnLCAkaWVuZCkgPSBpbmRleCByYW5nZSBvZiB0b2tlbnMgb24gdGhpcyBsaW5lCiAgICAgICAgIyAgICRyaW5kZW50YXRpb25fbGlzdCA9IHJlZiB0byBpbmRlbnRhdGlvbiBvZiBlYWNoIGxpbmUgaW4gdGhpcyBiYXRjaCwKICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgdXBkYXRlZCBieSB0aGlzIHN1YgogICAgICAgICMgICAkbGV2ZWxfanVtcCA9IGxldmVsIGNoYW5nZSB0byAkdG9rZW4gJGliZWcgZnJvbSBwcmV2aW91cyB0b2tlbgoKICAgICAgICAjIEl0IHN0YXJ0cyB3aXRoIHRoZSBiYXNpYyBpbmRlbnRhdGlvbiB3aGljaCBoYXMgYmVlbiBkZWZpbmVkIGZvciB0aGUKICAgICAgICAjIGxlYWRpbmcgdG9rZW4sIGFuZCB0aGVuIHRha2VzIGludG8gYWNjb3VudCBhbnkgb3B0aW9ucyB0aGF0IHRoZSB1c2VyCiAgICAgICAgIyBoYXMgc2V0IHJlZ2FyZGluZyBzcGVjaWFsIGluZGVudGluZyBhbmQgb3V0ZGVudGluZy4KCiAgICAgICAgIyBUaGlzIHJvdXRpbmUgaGFzIHRvIHJlc29sdmUgYSBudW1iZXIgb2YgY29tcGxleCBpbnRlcmFjdGluZyBpc3N1ZXMsCiAgICAgICAgIyBpbmNsdWRpbmc6CiAgICAgICAgIyAxLiBUaGUgdmFyaW91cyAtY3RpPW4gdHlwZSBmbGFncywgd2hpY2ggY29udGFpbiB0aGUgZGVzaXJlZCBjaGFuZ2UgaW4KICAgICAgICAjICAgIGluZGVudGF0aW9uIGZvciBsaW5lcyBlbmRpbmcgaW4gY29tbWFzIGFuZCBzZW1pY29sb25zLCBzaG91bGQgYmUKICAgICAgICAjICAgIGZvbGxvd2VkLAogICAgICAgICMgMi4gcXcgcXVvdGVzIHJlcXVpcmUgc3BlY2lhbCBwcm9jZXNzaW5nIGFuZCBkbyBub3QgZml0IHBlcmZlY3RseQogICAgICAgICMgICAgd2l0aCBub3JtYWwgY29udGFpbmVycywKICAgICAgICAjIDMuIGZvcm1hdHRpbmcgd2l0aCAtd24gY2FuIGNvbXBsaWNhdGUgdGhpbmdzLCBlc3BlY2lhbGx5IHdpdGggcXcKICAgICAgICAjICAgIHF1b3RlcywKICAgICAgICAjIDQuIGZvcm1hdHRpbmcgd2l0aCB0aGUgLWxwIG9wdGlvbiBpcyBjb21wbGljYXRlZCwgYW5kIGRvZXMgbm90CiAgICAgICAgIyAgICB3b3JrIHdlbGwgd2l0aCBxdyBxdW90ZXMgYW5kIHdpdGggLXduIGZvcm1hdHRpbmcuCiAgICAgICAgIyA1LiBhIG51bWJlciBvZiBzcGVjaWFsIHNpdHVhdGlvbnMsIHN1Y2ggYXMgJ2N1ZGRsZWQnIGZvcm1hdHRpbmcuCiAgICAgICAgIyA2LiBUaGlzIHJvdXRpbmUgaXMgbWFpbmx5IGNvbmNlcm5lZCB3aXRoIG91dGRlbnRpbmcgY2xvc2luZyB0b2tlbnMKICAgICAgICAjICAgIGJ1dCBub3RlIHRoYXQgdGhlcmUgaXMgc29tZSBvdmVybGFwIHdpdGggdGhlIGZ1bmN0aW9ucyBvZiBzdWIKICAgICAgICAjICAgIHVuZG9fY2ksIHdoaWNoIHdhcyBwcm9jZXNzZWQgZWFybGllciwgc28gY2FyZSBoYXMgdG8gYmUgdGFrZW4gdG8KICAgICAgICAjICAgIGtlZXAgdGhlbSBjb29yZGluYXRlZC4KCiAgICAgICAgbXkgJHRoaXNfYmF0Y2ggPSAkc2VsZi0+W190aGlzX2JhdGNoX107CgogICAgICAgICMgRmluZCB0aGUgbGFzdCBjb2RlIHRva2VuIG9mIHRoaXMgbGluZQogICAgICAgIG15ICRpX3Rlcm1pbmFsICAgID0gJGllbmQ7CiAgICAgICAgbXkgJHRlcm1pbmFsX3R5cGUgPSAkdHlwZXNfdG9fZ29bJGllbmRdOwogICAgICAgIGlmICggJHRlcm1pbmFsX3R5cGUgZXEgJyMnICYmICRpX3Rlcm1pbmFsID4gJGliZWcgKSB7CiAgICAgICAgICAgICRpX3Rlcm1pbmFsIC09IDE7CiAgICAgICAgICAgICR0ZXJtaW5hbF90eXBlID0gJHR5cGVzX3RvX2dvWyRpX3Rlcm1pbmFsXTsKICAgICAgICAgICAgaWYgKCAkdGVybWluYWxfdHlwZSBlcSAnYicgJiYgJGlfdGVybWluYWwgPiAkaWJlZyApIHsKICAgICAgICAgICAgICAgICRpX3Rlcm1pbmFsIC09IDE7CiAgICAgICAgICAgICAgICAkdGVybWluYWxfdHlwZSA9ICR0eXBlc190b19nb1skaV90ZXJtaW5hbF07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICRpc19vdXRkZW50ZWRfbGluZTsKCiAgICAgICAgbXkgJHR5cGVfYmVnICAgICAgICAgICAgPSAkdHlwZXNfdG9fZ29bJGliZWddOwogICAgICAgIG15ICR0b2tlbl9iZWcgICAgICAgICAgID0gJHRva2Vuc190b19nb1skaWJlZ107CiAgICAgICAgbXkgJGxldmVsX2JlZyAgICAgICAgICAgPSAkbGV2ZWxzX3RvX2dvWyRpYmVnXTsKICAgICAgICBteSAkYmxvY2tfdHlwZV9iZWcgICAgICA9ICRibG9ja190eXBlX3RvX2dvWyRpYmVnXTsKICAgICAgICBteSAkbGVhZGluZ19zcGFjZXNfYmVnICA9ICRsZWFkaW5nX3NwYWNlc190b19nb1skaWJlZ107CiAgICAgICAgbXkgJHNlcW5vX2JlZyAgICAgICAgICAgPSAkdHlwZV9zZXF1ZW5jZV90b19nb1skaWJlZ107CiAgICAgICAgbXkgJGlzX2Nsb3NpbmdfdHlwZV9iZWcgPSAkaXNfY2xvc2luZ190eXBleyR0eXBlX2JlZ307CgogICAgICAgICMgUVcgSU5ERU5UQVRJT04gUEFUQ0ggMzoKICAgICAgICBteSAkc2Vxbm9fcXdfY2xvc2luZzsKICAgICAgICBpZiAoICR0eXBlX2JlZyBlcSAncScgJiYgJGliZWcgPT0gMCApIHsKICAgICAgICAgICAgbXkgJEtLID0gJEtfdG9fZ29bJGliZWddOwogICAgICAgICAgICAkc2Vxbm9fcXdfY2xvc2luZyA9CiAgICAgICAgICAgICAgJHNlbGYtPltfcmVuZGluZ19tdWx0aWxpbmVfcXdfc2Vxbm9fYnlfS19dLT57JEtLfTsKICAgICAgICB9CgogICAgICAgIG15ICRpc19zZW1pY29sb25fdGVybWluYXRlZCA9ICR0ZXJtaW5hbF90eXBlIGVxICc7JwogICAgICAgICAgJiYgKCAkbmVzdGluZ19kZXB0aF90b19nb1skaWVuZF0gPCAkbmVzdGluZ19kZXB0aF90b19nb1skaWJlZ10KICAgICAgICAgICAgfHwgJHNlcW5vX3F3X2Nsb3NpbmcgKTsKCiAgICAgICAgIyBOT1RFOiBBIGZ1dHVyZSBpbXByb3ZlbWVudCB3b3VsZCBiZSB0byBtYWtlIGl0IHNlbWljb2xvbiB0ZXJtaW5hdGVkCiAgICAgICAgIyBldmVuIGlmIGl0IGRvZXMgbm90IGhhdmUgYSBzZW1pY29sb24gYnV0IGlzIGZvbGxvd2VkIGJ5IGEgY2xvc2luZwogICAgICAgICMgYmxvY2sgYnJhY2UuIFRoaXMgd291bGQgdW5kbyBjaSBldmVuIGZvciBzb21ldGhpbmcgbGlrZSB0aGUKICAgICAgICAjIGZvbGxvd2luZywgaW4gd2hpY2ggdGhlIGZpbmFsIHBhcmVuIGRvZXMgbm90IGhhdmUgYSBzZW1pY29sb24gYmVjYXVzZQogICAgICAgICMgaXQgaXMgYSBwb3NzaWJsZSB3ZWxkIGxvY2F0aW9uOgoKICAgICAgICAjIGlmICgkQk9MRF9NQVRIKSB7CiAgICAgICAgIyAgICAgKAogICAgICAgICMgICAgICAgICAkbGFiZWxzLCAkY29tbWVudCwKICAgICAgICAjICAgICAgICAgam9pbiggJycsICc8Qj4nLCAmbWFrZV9tYXRoKCAkbW9kZSwgJycsICcnLCAkXyApLCAnPC9CPicgKQogICAgICAgICMgICAgICkKICAgICAgICAjIH0KICAgICAgICAjCgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIFNlY3Rpb24gMTogc2V0IGEgZmxhZyBhbmQgYSBkZWZhdWx0IGluZGVudGF0aW9uCiAgICAgICAgIwogICAgICAgICMgTW9zdCBsaW5lcyBhcmUgaW5kZW50ZWQgYWNjb3JkaW5nIHRvIHRoZSBpbml0aWFsIHRva2VuLgogICAgICAgICMgQnV0IGl0IGlzIGNvbW1vbiB0byBvdXRkZW50IHRvIHRoZSBsZXZlbCBqdXN0IGFmdGVyIHRoZQogICAgICAgICMgdGVybWluYWwgdG9rZW4gaW4gY2VydGFpbiBjYXNlcy4uLgogICAgICAgICMgYWRqdXN0X2luZGVudGF0aW9uIGZsYWc6CiAgICAgICAgIyAgICAgICAwIC0gZG8gbm90IGFkanVzdAogICAgICAgICMgICAgICAgMSAtIG91dGRlbnQKICAgICAgICAjICAgICAgIDIgLSB2ZXJ0aWNhbGx5IGFsaWduIHdpdGggb3BlbmluZyB0b2tlbgogICAgICAgICMgICAgICAgMyAtIGluZGVudAogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgbXkgJGFkanVzdF9pbmRlbnRhdGlvbiAgICAgICAgID0gMDsKICAgICAgICBteSAkZGVmYXVsdF9hZGp1c3RfaW5kZW50YXRpb24gPSAwOwoKICAgICAgICAjIFBhcmFtZXRlcnMgbmVlZGVkIGZvciBvcHRpb24gMiwgYWxpZ25pbmcgd2l0aCBvcGVuaW5nIHRva2VuOgogICAgICAgIG15ICgKICAgICAgICAgICAgJG9wZW5pbmdfaW5kZW50YXRpb24sICRvcGVuaW5nX29mZnNldCwKICAgICAgICAgICAgJGlzX2xlYWRpbmcsICAgICAgICAgICRvcGVuaW5nX2V4aXN0cwogICAgICAgICk7CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBTZWN0aW9uIDFBOgogICAgICAgICMgaWYgbGluZSBzdGFydHMgd2l0aCBhIHNlcXVlbmNlZCBpdGVtCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpZiAoICRzZXFub19iZWcgfHwgJHNlcW5vX3F3X2Nsb3NpbmcgKSB7CgogICAgICAgICAgICAjIFRoaXMgY2FuIGJlIHRlZGlvdXMgc28gd2UgbGV0IGEgc3ViIGRvIGl0CiAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICRhZGp1c3RfaW5kZW50YXRpb24sCiAgICAgICAgICAgICAgICAkZGVmYXVsdF9hZGp1c3RfaW5kZW50YXRpb24sCiAgICAgICAgICAgICAgICAkb3BlbmluZ19pbmRlbnRhdGlvbiwKICAgICAgICAgICAgICAgICRvcGVuaW5nX29mZnNldCwKICAgICAgICAgICAgICAgICRpc19sZWFkaW5nLAogICAgICAgICAgICAgICAgJG9wZW5pbmdfZXhpc3RzLAoKICAgICAgICAgICAgKSA9ICRzZWxmLT5nZXRfY2xvc2luZ190b2tlbl9pbmRlbnRhdGlvbigKCiAgICAgICAgICAgICAgICAkaWJlZywKICAgICAgICAgICAgICAgICRpZW5kLAogICAgICAgICAgICAgICAgJHJpbmRlbnRhdGlvbl9saXN0LAogICAgICAgICAgICAgICAgJGxldmVsX2p1bXAsCiAgICAgICAgICAgICAgICAkaV90ZXJtaW5hbCwKICAgICAgICAgICAgICAgICRpc19zZW1pY29sb25fdGVybWluYXRlZCwKICAgICAgICAgICAgICAgICRzZXFub19xd19jbG9zaW5nLAoKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgU2VjdGlvbiAxQjoKICAgICAgICAjIGlmIGxpbmUgc3RhcnRzIHdpdGggYSBub24tc2VxdWVuY2VkIGl0ZW0KICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKCAkdHlwZV9iZWcgZXEgJzsnICYmICEkck9wdHNfaW5kZW50X2xlYWRpbmdfc2VtaWNvbG9uICkgewogICAgICAgICAgICAgICAgJGFkanVzdF9pbmRlbnRhdGlvbiA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIFNlY3Rpb24gMjogc2V0IGluZGVudGF0aW9uIGFjY29yZGluZyB0byBmbGFnIHNldCBhYm92ZQogICAgICAgICMKICAgICAgICAjIFNlbGVjdCB0aGUgaW5kZW50YXRpb24gb2JqZWN0IHRvIGRlZmluZSBsZWFkaW5nCiAgICAgICAgIyB3aGl0ZXNwYWNlLiAgSWYgd2UgYXJlIG91dGRlbnRpbmcgc29tZXRoaW5nIGxpa2UgJ30gfSApOycKICAgICAgICAjIHRoZW4gd2Ugd2FudCB0byB1c2Ugb25lIGxldmVsIGJlbG93IHRoZSBsYXN0IHRva2VuCiAgICAgICAgIyAoJGlfdGVybWluYWwpIGluIG9yZGVyIHRvIGdldCBpdCB0byBmdWxseSBvdXRkZW50IHRocm91Z2gKICAgICAgICAjIGFsbCBsZXZlbHMuCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIG15ICRpbmRlbnRhdGlvbjsKICAgICAgICBteSAkbGV2OwogICAgICAgIG15ICRsZXZlbF9lbmQgPSAkbGV2ZWxzX3RvX2dvWyRpZW5kXTsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgU2VjdGlvbiAyQTogYWRqdXN0X2luZGVudGF0aW9uID09IDAKICAgICAgICAjIE5vIGNoYW5nZSBpbiBpbmRlbnRhdGlvbgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpZiAoICRhZGp1c3RfaW5kZW50YXRpb24gPT0gMCApIHsKICAgICAgICAgICAgJGluZGVudGF0aW9uID0gJGxlYWRpbmdfc3BhY2VzX2JlZzsKICAgICAgICAgICAgJGxldiAgICAgICAgID0gJGxldmVsX2JlZzsKICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBTZWN0aW9uIDJCOiBhZGp1c3RfaW5kZW50YXRpb24gPT0gMQogICAgICAgICMgQ2hhbmdlIHRoZSBpbmRlbnRhdGlvbiB0byBiZSB0aGF0IG9mIGEgZGlmZmVyZW50IHRva2VuIG9uIHRoZSBsaW5lCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBlbHNpZiAoICRhZGp1c3RfaW5kZW50YXRpb24gPT0gMSApIHsKCiAgICAgICAgICAgICMgUHJldmlvdXNseSwgdGhlIGluZGVudGF0aW9uIG9mIHRoZSB0ZXJtaW5hbCB0b2tlbiB3YXMgdXNlZDoKICAgICAgICAgICAgIyBPTEQgQ09ESU5HOgogICAgICAgICAgICAjICRpbmRlbnRhdGlvbiA9ICRyZWR1Y2VkX3NwYWNlc190b19nb1skaV90ZXJtaW5hbF07CiAgICAgICAgICAgICMgJGxldiAgICAgICAgID0gJGxldmVsc190b19nb1skaV90ZXJtaW5hbF07CgogICAgICAgICAgICAjIEdlbmVyYWxpemF0aW9uIGZvciBNT0pPIHBhdGNoOgogICAgICAgICAgICAjIFVzZSB0aGUgbG93ZXN0IGxldmVsIGluZGVudGF0aW9uIG9mIHRoZSB0b2tlbnMgb24gdGhlIGxpbmUuCiAgICAgICAgICAgICMgRm9yIGV4YW1wbGUsIGhlcmUgd2UgY2FuIHVzZSB0aGUgaW5kZW50YXRpb24gb2YgdGhlIGVuZGluZyAnOyc6CiAgICAgICAgICAgICMgICAgfSB1bnRpbCAoJHNlbGVjdGlvbiA+IDAgYW5kICRzZWxlY3Rpb24gPCAxMCk7ICAgIyBvayB0byB1c2UgJzsnCiAgICAgICAgICAgICMgQnV0IHRoaXMgd2lsbCBub3Qgb3V0ZGVudCBpZiB3ZSB1c2UgdGhlIHRlcm1pbmFsIGluZGVudGF0aW9uOgogICAgICAgICAgICAjICAgICktPnRoZW4oIHN1YiB7ICAgICAgIyB1c2UgaW5kZW50YXRpb24gb2YgdGhlIC0+LCBub3QgdGhlIHsKICAgICAgICAgICAgIyBXYXJuaW5nOiByZWR1Y2VkX3NwYWNlc190b19nb1tdIG1heSBiZSBhIHJlZmVyZW5jZSwgZG8gbm90CiAgICAgICAgICAgICMgZG8gbnVtZXJpY2FsIGNoZWNrcyB3aXRoIGl0CgogICAgICAgICAgICBteSAkaV9pbmQgPSAkaWJlZzsKICAgICAgICAgICAgJGluZGVudGF0aW9uID0gJHJlZHVjZWRfc3BhY2VzX3RvX2dvWyRpX2luZF07CiAgICAgICAgICAgICRsZXYgICAgICAgICA9ICRsZXZlbHNfdG9fZ29bJGlfaW5kXTsKICAgICAgICAgICAgd2hpbGUgKCArKyRpX2luZCA8PSAkaV90ZXJtaW5hbCApIHsKICAgICAgICAgICAgICAgIGlmICggJGxldmVsc190b19nb1skaV9pbmRdIDwgJGxldiApIHsKICAgICAgICAgICAgICAgICAgICAkaW5kZW50YXRpb24gPSAkcmVkdWNlZF9zcGFjZXNfdG9fZ29bJGlfaW5kXTsKICAgICAgICAgICAgICAgICAgICAkbGV2ICAgICAgICAgPSAkbGV2ZWxzX3RvX2dvWyRpX2luZF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gIyMgZW5kIHdoaWxlICggKyskaV9pbmQgPD0gJGlfdGVybWluYWwpCiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIFNlY3Rpb24gMkM6IGFkanVzdF9pbmRlbnRhdGlvbiA9PSAyCiAgICAgICAgIyBIYW5kbGUgaW5kZW50ZWQgY2xvc2luZyB0b2tlbiB3aGljaCBhbGlnbnMgd2l0aCBvcGVuaW5nIHRva2VuCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgZWxzaWYgKCAkYWRqdXN0X2luZGVudGF0aW9uID09IDIgKSB7CgogICAgICAgICAgICAjIGhhbmRsZSBvcHRpb24gdG8gYWxpZ24gY2xvc2luZyB0b2tlbiB3aXRoIG9wZW5pbmcgdG9rZW4KICAgICAgICAgICAgJGxldiA9ICRsZXZlbF9iZWc7CgogICAgICAgICAgICAjIGNhbGN1bGF0ZSBzcGFjZXMgbmVlZGVkIHRvIGFsaWduIHdpdGggb3BlbmluZyB0b2tlbgogICAgICAgICAgICBteSAkc3BhY2VfY291bnQgPQogICAgICAgICAgICAgIGdldF9zcGFjZXMoJG9wZW5pbmdfaW5kZW50YXRpb24pICsgJG9wZW5pbmdfb2Zmc2V0OwoKICAgICAgICAgICAgIyBJbmRlbnQgbGVzcyB0aGFuIHRoZSBwcmV2aW91cyBsaW5lLgogICAgICAgICAgICAjCiAgICAgICAgICAgICMgUHJvYmxlbTogRm9yIC1scCB3ZSBkb24ndCBleGFjdGx5IGtub3cgd2hhdCBpdCB3YXMgaWYgdGhlcmUKICAgICAgICAgICAgIyB3ZXJlIHJlY292ZXJhYmxlIHNwYWNlcyBzZW50IHRvIHRoZSBhbGlnbmVyLiAgQSBnb29kIHNvbHV0aW9uCiAgICAgICAgICAgICMgd291bGQgYmUgdG8gZm9yY2UgYSBmbHVzaCBvZiB0aGUgdmVydGljYWwgYWxpZ25tZW50IGJ1ZmZlciwgc28KICAgICAgICAgICAgIyB0aGF0IHdlIHdvdWxkIGtub3cuICBGb3Igbm93LCB0aGlzIHJ1bGUgaXMgdXNlZCBmb3IgLWxwOgogICAgICAgICAgICAjCiAgICAgICAgICAgICMgV2hlbiB0aGUgbGFzdCBsaW5lIGRpZCBub3Qgc3RhcnQgd2l0aCBhIGNsb3NpbmcgdG9rZW4gd2Ugd2lsbAogICAgICAgICAgICAjIGJlIG9wdGltaXN0aWMgdGhhdCB0aGUgYWxpZ25lciB3aWxsIHJlY292ZXIgZXZlcnl0aGluZyB3YW50ZWQuCiAgICAgICAgICAgICMKICAgICAgICAgICAgIyBUaGlzIHJ1bGUgd2lsbCBwcmV2ZW50IHVzIGZyb20gYnJlYWtpbmcgYSBoaWVyYXJjaHkgb2YgY2xvc2luZwogICAgICAgICAgICAjIHRva2VucywgYW5kIGluIGEgd29yc3QgY2FzZSB3aWxsIGxlYXZlIGEgY2xvc2luZyBwYXJlbiB0b28gZmFyCiAgICAgICAgICAgICMgaW5kZW50ZWQsIGJ1dCB0aGlzIGlzIGJldHRlciB0aGFuIGZyZXF1ZW50bHkgbGVhdmluZyBpdCBub3QKICAgICAgICAgICAgIyBpbmRlbnRlZCBlbm91Z2guCiAgICAgICAgICAgIG15ICRsYXN0X3NwYWNlcyA9IGdldF9zcGFjZXMoJGxhc3RfaW5kZW50YXRpb25fd3JpdHRlbik7CgogICAgICAgICAgICBpZiAoIHJlZigkbGFzdF9pbmRlbnRhdGlvbl93cml0dGVuKQogICAgICAgICAgICAgICAgJiYgISRpc19jbG9zaW5nX3Rva2VueyRsYXN0X2xlYWRpbmdfdG9rZW59ICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJGxhc3Rfc3BhY2VzICs9CiAgICAgICAgICAgICAgICAgIGdldF9yZWNvdmVyYWJsZV9zcGFjZXMoJGxhc3RfaW5kZW50YXRpb25fd3JpdHRlbik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcmVzZXQgdGhlIGluZGVudGF0aW9uIHRvIHRoZSBuZXcgc3BhY2UgY291bnQgaWYgaXQgd29ya3MKICAgICAgICAgICAgIyBvbmx5IG9wdGlvbnMgYXJlIGFsbCBvciBub25lOiBub3RoaW5nIGluLWJldHdlZW4gbG9va3MgZ29vZAogICAgICAgICAgICAkbGV2ID0gJGxldmVsX2JlZzsKCiAgICAgICAgICAgIG15ICRkaWZmID0gJGxhc3Rfc3BhY2VzIC0gJHNwYWNlX2NvdW50OwogICAgICAgICAgICBpZiAoICRkaWZmID4gMCApIHsKICAgICAgICAgICAgICAgICRpbmRlbnRhdGlvbiA9ICRzcGFjZV9jb3VudDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIFdlIG5lZWQgdG8gZml4IHRoaW5ncyAuLi4gYnV0IHRoZXJlIGlzIG5vIGdvb2Qgd2F5IHRvIGRvIGl0LgogICAgICAgICAgICAgICAgIyBUaGUgYmVzdCBzb2x1dGlvbiBpcyBmb3IgdGhlIHVzZXIgdG8gdXNlIGEgbG9uZ2VyIG1heGltdW0KICAgICAgICAgICAgICAgICMgbGluZSBsZW5ndGguICBXZSBjb3VsZCBnZXQgYSBzbW9vdGggdmFyaWF0aW9uIGlmIHdlIGp1c3QgbW92ZQogICAgICAgICAgICAgICAgIyB0aGUgcGFyZW4gaW4gdXNpbmcKICAgICAgICAgICAgICAgICMgICAgJHNwYWNlX2NvdW50IC09ICggMSAtICRkaWZmICk7CiAgICAgICAgICAgICAgICAjIEJ1dCB1bmZvcnR1bmF0ZWx5IHRoaXMgY2FuIGdpdmUgYSByYXRoZXIgdW5iYWxhbmNlZCBsb29rLgoKICAgICAgICAgICAgICAgICMgRm9yIC14bHAgd2UgY3VycmVudGx5IGFsbG93IGEgdG9sZXJhbmNlIG9mIG9uZSBpbmRlbnRhdGlvbgogICAgICAgICAgICAgICAgIyBsZXZlbCBhbmQgdGhlbiByZXZlcnQgdG8gYSBzaW1wbGVyIGRlZmF1bHQuICBUaGlzIHdpbGwganVtcAogICAgICAgICAgICAgICAgIyBzdWRkZW5seSBidXQga2VlcHMgYSBiYWxhbmNlZCBsb29rLgogICAgICAgICAgICAgICAgaWYgKCAgICRyT3B0c19leHRlbmRlZF9saW5lX3VwX3BhcmVudGhlc2VzCiAgICAgICAgICAgICAgICAgICAgJiYgJGRpZmYgPj0gLSRyT3B0c19pbmRlbnRfY29sdW1ucwogICAgICAgICAgICAgICAgICAgICYmICRzcGFjZV9jb3VudCA+ICRsZWFkaW5nX3NwYWNlc19iZWcgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRpbmRlbnRhdGlvbiA9ICRzcGFjZV9jb3VudDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIE90aGVyd2lzZSByZXZlcnQgdG8gZGVmYXVsdHMKICAgICAgICAgICAgICAgIGVsc2lmICggJGRlZmF1bHRfYWRqdXN0X2luZGVudGF0aW9uID09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgJGluZGVudGF0aW9uID0gJGxlYWRpbmdfc3BhY2VzX2JlZzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJGRlZmF1bHRfYWRqdXN0X2luZGVudGF0aW9uID09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgJGluZGVudGF0aW9uID0gJHJlZHVjZWRfc3BhY2VzX3RvX2dvWyRpX3Rlcm1pbmFsXTsKICAgICAgICAgICAgICAgICAgICAkbGV2ICAgICAgICAgPSAkbGV2ZWxzX3RvX2dvWyRpX3Rlcm1pbmFsXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICMgc2hvdWxkbid0IGhhcHBlbiAtIGRlZmF1bHRfYWRqdXN0X2luZGVudGF0aW9uIGlzIDAgb3IgMQogICAgICAgICAgICAgICAgICAgIERFVkVMX01PREUKICAgICAgICAgICAgICAgICAgICAgICYmIEZhdWx0KAoiZGVmYXVsdF9pbmRlbnRhdGlvbj0kZGVmYXVsdF9hZGp1c3RfaW5kZW50YXRpb24gZXhwZWN0ZWQgdG8gYmUgMCBvciAxXG4iCiAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIGNvbnRpbnVlIHdpdGggMCBpZiBub3QgaW4gREVWRUxfTU9ERQogICAgICAgICAgICAgICAgICAgICRpbmRlbnRhdGlvbiA9ICRsZWFkaW5nX3NwYWNlc19iZWc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBTZWN0aW9uIDJEOiBhZGp1c3RfaW5kZW50YXRpb24gPT0gMwogICAgICAgICMgRnVsbCBpbmRlbnRhdGlvbiBvZiBjbG9zaW5nIHRva2VucyAoLWljYiBhbmQgLWljcCBvciAtY3RpPTIpCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgaGFuZGxlIC1pY2IgKGluZGVudGVkIGNsb3NpbmcgY29kZSBibG9jayBicmFjZXMpCiAgICAgICAgICAgICMgVXBkYXRlZCBtZXRob2QgZm9yIGluZGVudGVkIGJsb2NrIGJyYWNlczogaW5kZW50IG9uZSBmdWxsIGxldmVsIGlmCiAgICAgICAgICAgICMgdGhlcmUgaXMgbm8gY29udGludWF0aW9uIGluZGVudGF0aW9uLiAgVGhpcyB3aWxsIG9jY3VyIGZvciBtYWpvcgogICAgICAgICAgICAjIHN0cnVjdHVyZXMgc3VjaCBhcyBzdWIsIGlmLCBlbHNlLCBidXQgbm90IGZvciB0aGluZ3MgbGlrZSBtYXAKICAgICAgICAgICAgIyBibG9ja3MuCiAgICAgICAgICAgICMKICAgICAgICAgICAgIyBOb3RlOiBvbmx5IGNvZGUgYmxvY2tzIHdpdGhvdXQgY29udGludWF0aW9uIGluZGVudGF0aW9uIGFyZQogICAgICAgICAgICAjIGhhbmRsZWQgaGVyZSAoaWYsIGVsc2UsIHVubGVzcywgLi4pLiBJbiB0aGUgZm9sbG93aW5nIHNuaXBwZXQsCiAgICAgICAgICAgICMgdGhlIHRlcm1pbmFsIGJyYWNlIG9mIHRoZSBzb3J0IGJsb2NrIHdpbGwgaGF2ZSBjb250aW51YXRpb24KICAgICAgICAgICAgIyBpbmRlbnRhdGlvbiBhcyBzaG93biBzbyBpdCB3aWxsIG5vdCBiZSBoYW5kbGVkIGJ5IHRoZSBjb2RpbmcKICAgICAgICAgICAgIyBoZXJlLiAgV2Ugd291bGQgaGF2ZSB0byB1bmRvIHRoZSBjb250aW51YXRpb24gaW5kZW50YXRpb24gdG8gZG8KICAgICAgICAgICAgIyB0aGlzLCBidXQgaXQgcHJvYmFibHkgbG9va3Mgb2sgYXMgaXMuICBUaGlzIGlzIGEgcG9zc2libGUgZnV0dXJlCiAgICAgICAgICAgICMgdXBkYXRlIGZvciBzZW1pY29sb24gdGVybWluYXRlZCBsaW5lcy4KICAgICAgICAgICAgIwogICAgICAgICAgICAjICAgICBpZiAoJHNvcnRieSBlcSAnZGF0ZScgb3IgJHNvcnRieSBlcSAnc2l6ZScpIHsKICAgICAgICAgICAgIyAgICAgICAgIEBmaWxlcyA9IHNvcnQgewogICAgICAgICAgICAjICAgICAgICAgICAgICRmaWxlX2RhdGF7JGF9eyRzb3J0Ynl9IDw9PiAkZmlsZV9kYXRheyRifXskc29ydGJ5fQogICAgICAgICAgICAjICAgICAgICAgICAgICAgICBvciAkYSBjbXAgJGIKICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgfSBAZmlsZXM7CiAgICAgICAgICAgICMgICAgICAgICB9CiAgICAgICAgICAgICMKICAgICAgICAgICAgaWYgKCAgICRibG9ja190eXBlX2JlZwogICAgICAgICAgICAgICAgJiYgJGNpX2xldmVsc190b19nb1skaV90ZXJtaW5hbF0gPT0gMCApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG15ICRzcGFjZXMgPSBnZXRfc3BhY2VzKCAkbGVhZGluZ19zcGFjZXNfdG9fZ29bJGlfdGVybWluYWxdICk7CiAgICAgICAgICAgICAgICAkaW5kZW50YXRpb24gPSAkc3BhY2VzICsgJHJPcHRzX2luZGVudF9jb2x1bW5zOwoKICAgICAgICAgICAgICAgICMgTk9URTogZm9yIC1scCB3ZSBjb3VsZCBjcmVhdGUgYSBuZXcgaW5kZW50YXRpb24gb2JqZWN0LCBidXQKICAgICAgICAgICAgICAgICMgdGhlcmUgaXMgcHJvYmFibHkgbm8gbmVlZCB0byBkbyBpdAogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGhhbmRsZSAtaWNwIGFuZCBhbnkgLWljYiBibG9jayBicmFjZXMgd2hpY2ggZmFsbCB0aHJvdWdoIGFib3ZlCiAgICAgICAgICAgICMgdGVzdCBzdWNoIGFzIHRoZSAnc29ydCcgYmxvY2sgbWVudGlvbmVkIGFib3ZlLgogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIFRoZXJlIGFyZSBjdXJyZW50bHkgdHdvIHdheXMgdG8gaGFuZGxlIC1pY3AuLi4KICAgICAgICAgICAgICAgICMgT25lIHdheSBpcyB0byB1c2UgdGhlIGluZGVudGF0aW9uIG9mIHRoZSBwcmV2aW91cyBsaW5lOgogICAgICAgICAgICAgICAgIyAkaW5kZW50YXRpb24gPSAkbGFzdF9pbmRlbnRhdGlvbl93cml0dGVuOwoKICAgICAgICAgICAgICAgICMgVGhlIG90aGVyIHdheSBpcyB0byB1c2UgdGhlIGluZGVudGF0aW9uIHRoYXQgdGhlIHByZXZpb3VzIGxpbmUKICAgICAgICAgICAgICAgICMgd291bGQgaGF2ZSBoYWQgaWYgaXQgaGFkbid0IGJlZW4gYWRqdXN0ZWQ6CiAgICAgICAgICAgICAgICAkaW5kZW50YXRpb24gPSAkbGFzdF91bmFkanVzdGVkX2luZGVudGF0aW9uOwoKICAgICAgICAgICAgICAgICMgQ3VycmVudCBtZXRob2Q6IHVzZSB0aGUgbWluaW11bSBvZiB0aGUgdHdvLiBUaGlzIGF2b2lkcwogICAgICAgICAgICAgICAgIyBpbmNvbnNpc3RlbnQgaW5kZW50YXRpb24uCiAgICAgICAgICAgICAgICBpZiAoIGdldF9zcGFjZXMoJGxhc3RfaW5kZW50YXRpb25fd3JpdHRlbikgPAogICAgICAgICAgICAgICAgICAgIGdldF9zcGFjZXMoJGluZGVudGF0aW9uKSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJGluZGVudGF0aW9uID0gJGxhc3RfaW5kZW50YXRpb25fd3JpdHRlbjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyB1c2UgcHJldmlvdXMgaW5kZW50YXRpb24gYnV0IHVzZSBvd24gbGV2ZWwKICAgICAgICAgICAgIyB0byBjYXVzZSBsaXN0IHRvIGJlIGZsdXNoZWQgcHJvcGVybHkKICAgICAgICAgICAgJGxldiA9ICRsZXZlbF9iZWc7CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgUmVtZW1iZXIgaW5kZW50YXRpb24gZXhjZXB0IGZvciBtdWx0aS1saW5lIHF1b3Rlcywgd2hpY2ggZ2V0CiAgICAgICAgIyBubyBpbmRlbnRhdGlvbgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaWYgKCAhKCAkaWJlZyA9PSAwICYmICR0aGlzX2JhdGNoLT5bX3N0YXJ0aW5nX2luX3F1b3RlX10gKSApIHsKICAgICAgICAgICAgJGxhc3RfaW5kZW50YXRpb25fd3JpdHRlbiAgICA9ICRpbmRlbnRhdGlvbjsKICAgICAgICAgICAgJGxhc3RfdW5hZGp1c3RlZF9pbmRlbnRhdGlvbiA9ICRsZWFkaW5nX3NwYWNlc19iZWc7CiAgICAgICAgICAgICRsYXN0X2xlYWRpbmdfdG9rZW4gICAgICAgICAgPSAkdG9rZW5fYmVnOwoKICAgICAgICAgICAgIyBQYXRjaCB0byBtYWtlIGEgbGluZSB3aGljaCBpcyB0aGUgZW5kIG9mIGEgcXcgcXVvdGUgd29yayB3aXRoIHRoZQogICAgICAgICAgICAjIC1scCBvcHRpb24uICBNYWtlICR0b2tlbl9iZWcgbG9vayBsaWtlIGEgY2xvc2luZyB0b2tlbiBhcyBzb21lCiAgICAgICAgICAgICMgdHlwZSBldmVuIGlmIGl0IGlzIG5vdC4gIFRoaXMgdmFyaWFibGUgd2lsbCBiZWNvbWUKICAgICAgICAgICAgIyAkbGFzdF9sZWFkaW5nX3Rva2VuIGF0IHRoZSBlbmQgb2YgdGhpcyBsb29wLiAgVGhlbiwgaWYgdGhlIC1scAogICAgICAgICAgICAjIHN0eWxlIGlzIHNlbGVjdGVkLCBhbmQgdGhlIG5leHQgbGluZSBpcyBhbHNvIGEKICAgICAgICAgICAgIyBjbG9zaW5nIHRva2VuLCBpdCB3aWxsIG5vdCBnZXQgbW9yZSBpbmRlbnRhdGlvbiB0aGFuIHRoaXMgbGluZS4KICAgICAgICAgICAgIyBXZSBuZWVkIHRvIGRvIHRoaXMgYmVjYXVzZSBxdyBxdW90ZXMgKGF0IHByZXNlbnQpIG9ubHkgZ2V0CiAgICAgICAgICAgICMgY29udGludWF0aW9uIGluZGVudGF0aW9uLCBub3Qgb25lIGxldmVsIG9mIGluZGVudGF0aW9uLCBzbyB3ZQogICAgICAgICAgICAjIG5lZWQgdG8gdHVybiBvZmYgdGhlIC1scCBpbmRlbnRhdGlvbi4KCiAgICAgICAgICAgICMgLi4uIGEgcGljdHVyZSBpcyB3b3J0aCBhIHRob3VzYW5kIHdvcmRzOgoKICAgICAgICAgICAgIyBwZXJsdGlkeSAtd24gLWdudSAoV2l0aG91dCB0aGlzIHBhdGNoKToKICAgICAgICAgICAgIyAgIG9rKGRlZmluZWQoCiAgICAgICAgICAgICMgICAgICAgJHNlcWlvID0gJGdiLT5nZXRfU3RyZWFtX2J5X2JhdGNoKFtxdyhKMDA1MjIgQUYzMDMxMTIKICAgICAgICAgICAgIyAgICAgICAyOTgxMDE0KV0pCiAgICAgICAgICAgICMgICAgICAgICAgICAgKSk7CgogICAgICAgICAgICAjIHBlcmx0aWR5IC13biAtZ251IChXaXRoIHRoaXMgcGF0Y2gpOgogICAgICAgICAgICAjICBvayhkZWZpbmVkKAogICAgICAgICAgICAjICAgICAgJHNlcWlvID0gJGdiLT5nZXRfU3RyZWFtX2J5X2JhdGNoKFtxdyhKMDA1MjIgQUYzMDMxMTIKICAgICAgICAgICAgIyAgICAgIDI5ODEwMTQpXSkKICAgICAgICAgICAgIyAgKSk7CiAgICAgICAgICAgIGlmICggJHNlcW5vX3F3X2Nsb3NpbmcKICAgICAgICAgICAgICAgICYmICggbGVuZ3RoKCR0b2tlbl9iZWcpID4gMSB8fCAkdG9rZW5fYmVnIGVxICc+JyApICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJGxhc3RfbGVhZGluZ190b2tlbiA9ICcpJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgUnVsZTogbGluZXMgd2l0aCBsZWFkaW5nIGNsb3NpbmcgdG9rZW5zIHNob3VsZCBub3QgYmUgb3V0ZGVudGVkIG1vcmUKICAgICAgICAjIHRoYW4gdGhlIGxpbmUgd2hpY2ggY29udGFpbmVkIHRoZSBjb3JyZXNwb25kaW5nIG9wZW5pbmcgdG9rZW4uCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICBpZiAoIGRlZmluZWQoJG9wZW5pbmdfaW5kZW50YXRpb24pICkgewoKICAgICAgICAgICAgIyBNT0pPIHBhdGNoOiBTZXQgYSBmbGFnIGlmIHRoaXMgbGluZXMgYmVnaW5zIHdpdGggJyktPicKICAgICAgICAgICAgbXkgJGxlYWRpbmdfcGFyZW5fYXJyb3cgPSAoCiAgICAgICAgICAgICAgICAgICAgICRpc19jbG9zaW5nX3R5cGVfYmVnCiAgICAgICAgICAgICAgICAgICYmICR0b2tlbl9iZWcgZXEgJyknCiAgICAgICAgICAgICAgICAgICYmICgKICAgICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICRpYmVnIDwgJGlfdGVybWluYWwKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHR5cGVzX3RvX2dvWyAkaWJlZyArIDEgXSBlcSAnLT4nCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIHx8ICggICAkaWJlZyA8ICRpX3Rlcm1pbmFsIC0gMQogICAgICAgICAgICAgICAgICAgICAgICAmJiAkdHlwZXNfdG9fZ29bICRpYmVnICsgMSBdIGVxICdiJwogICAgICAgICAgICAgICAgICAgICAgICAmJiAkdHlwZXNfdG9fZ29bICRpYmVnICsgMiBdIGVxICctPicgKQogICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIFVwZGF0ZWQgcGVyIGJ1ZyByZXBvcnQgaW4gYWxleF9idWcucGw6IHdlIG11c3Qgbm90CiAgICAgICAgICAgICMgbWVzcyB3aXRoIHRoZSBpbmRlbnRhdGlvbiBvZiBjbG9zaW5nIGxvZ2ljYWwgYnJhY2VzLCBzbwogICAgICAgICAgICAjIHdlIG11c3QgdHJlYXQgc29tZXRoaW5nIGxpa2UgJ30gZWxzZSB7JyBhcyBpZiBpdCB3ZXJlCiAgICAgICAgICAgICMgYW4gaXNvbGF0ZWQgYnJhY2UKICAgICAgICAgICAgbXkgJGlzX2lzb2xhdGVkX2Jsb2NrX2JyYWNlID0gJGJsb2NrX3R5cGVfYmVnCiAgICAgICAgICAgICAgJiYgKAogICAgICAgICAgICAgICAgJGlfdGVybWluYWwgPT0gJGliZWcKICAgICAgICAgICAgICAgIHx8ICRpc19pZl9lbHNpZl9lbHNlX3VubGVzc193aGlsZV91bnRpbF9mb3JfZm9yZWFjaHsKICAgICAgICAgICAgICAgICAgICAkYmxvY2tfdHlwZV9iZWd9CiAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgb25seSBkbyB0aGlzIGZvciBhICc6OyB3aGljaCBpcyBhbGlnbmVkIHdpdGggaXRzIGxlYWRpbmcgJz8nCiAgICAgICAgICAgIG15ICRpc191bmFsaWduZWRfY29sb24gPSAkdHlwZV9iZWcgZXEgJzonICYmICEkaXNfbGVhZGluZzsKCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICEkbGVhZGluZ19wYXJlbl9hcnJvdwogICAgICAgICAgICAgICAgJiYgISRpc19pc29sYXRlZF9ibG9ja19icmFjZQogICAgICAgICAgICAgICAgJiYgISRpc191bmFsaWduZWRfY29sb24KICAgICAgICAgICAgICAgICYmICggZ2V0X3NwYWNlcygkb3BlbmluZ19pbmRlbnRhdGlvbikgPgogICAgICAgICAgICAgICAgICAgIGdldF9zcGFjZXMoJGluZGVudGF0aW9uKSApCiAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkaW5kZW50YXRpb24gPSAkb3BlbmluZ19pbmRlbnRhdGlvbjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIHJlbWVtYmVyIHRoZSBpbmRlbnRhdGlvbiBvZiBlYWNoIGxpbmUgb2YgdGhpcyBiYXRjaAogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgcHVzaCBAeyRyaW5kZW50YXRpb25fbGlzdH0sICRpbmRlbnRhdGlvbjsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgb3V0ZGVudCBsaW5lcyB3aXRoIGNlcnRhaW4gbGVhZGluZyB0b2tlbnMuLi4KICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaWYgKAoKICAgICAgICAgICAgIyBtdXN0IGJlIGZpcnN0IHdvcmQgb2YgdGhpcyBiYXRjaAogICAgICAgICAgICAkaWJlZyA9PSAwCgogICAgICAgICAgICAjIGFuZCAuLi4KICAgICAgICAgICAgJiYgKAoKICAgICAgICAgICAgICAgICMgY2VydGFpbiBsZWFkaW5nIGtleXdvcmRzIGlmIHJlcXVlc3RlZAogICAgICAgICAgICAgICAgJHJPcHRzX291dGRlbnRfa2V5d29yZHMKICAgICAgICAgICAgICAgICYmICR0eXBlX2JlZyBlcSAnaycKICAgICAgICAgICAgICAgICYmICRvdXRkZW50X2tleXdvcmR7JHRva2VuX2JlZ30KCiAgICAgICAgICAgICAgICAjIG9yIGxhYmVscyBpZiByZXF1ZXN0ZWQKICAgICAgICAgICAgICAgIHx8ICRyT3B0c19vdXRkZW50X2xhYmVscyAmJiAkdHlwZV9iZWcgZXEgJ0onCgogICAgICAgICAgICAgICAgIyBvciBzdGF0aWMgYmxvY2sgY29tbWVudHMgaWYgcmVxdWVzdGVkCiAgICAgICAgICAgICAgICB8fCAkdGhpc19iYXRjaC0+W19pc19zdGF0aWNfYmxvY2tfY29tbWVudF9dCiAgICAgICAgICAgICAgICAmJiAkck9wdHNfb3V0ZGVudF9zdGF0aWNfYmxvY2tfY29tbWVudHMKICAgICAgICAgICAgKQogICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJHNwYWNlX2NvdW50ID0gbGVhZGluZ19zcGFjZXNfdG9fZ28oJGliZWcpOwogICAgICAgICAgICBpZiAoICRzcGFjZV9jb3VudCA+IDAgKSB7CiAgICAgICAgICAgICAgICAkc3BhY2VfY291bnQgLT0gJHJPcHRzX2NvbnRpbnVhdGlvbl9pbmRlbnRhdGlvbjsKICAgICAgICAgICAgICAgICRpc19vdXRkZW50ZWRfbGluZSA9IDE7CiAgICAgICAgICAgICAgICBpZiAoICRzcGFjZV9jb3VudCA8IDAgKSB7ICRzcGFjZV9jb3VudCA9IDAgfQoKICAgICAgICAgICAgICAgICMgZG8gbm90IHByb21vdGUgYSBzcGFjZWQgc3RhdGljIGJsb2NrIGNvbW1lbnQgdG8gbm9uLXNwYWNlZDsKICAgICAgICAgICAgICAgICMgdGhpcyBpcyBub3Qgbm9ybWFsbHkgbmVjZXNzYXJ5IGJ1dCBjb3VsZCBiZSBmb3Igc29tZQogICAgICAgICAgICAgICAgIyB1bnVzdWFsIHVzZXIgaW5wdXRzIChzdWNoIGFzIC1jaSA9IC1pKQogICAgICAgICAgICAgICAgaWYgKCAkdHlwZV9iZWcgZXEgJyMnICYmICRzcGFjZV9jb3VudCA9PSAwICkgewogICAgICAgICAgICAgICAgICAgICRzcGFjZV9jb3VudCA9IDE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGluZGVudGF0aW9uID0gJHNwYWNlX2NvdW50OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gKAoKICAgICAgICAgICAgJGluZGVudGF0aW9uLAogICAgICAgICAgICAkbGV2LAogICAgICAgICAgICAkbGV2ZWxfZW5kLAogICAgICAgICAgICAkaV90ZXJtaW5hbCwKICAgICAgICAgICAgJGlzX291dGRlbnRlZF9saW5lLAoKICAgICAgICApOwogICAgfSAjIyBlbmQgc3ViIGdldF9maW5hbF9pbmRlbnRhdGlvbgoKICAgIHN1YiBnZXRfY2xvc2luZ190b2tlbl9pbmRlbnRhdGlvbiB7CgogICAgICAgICMgRGV0ZXJtaW5lIGluZGVudGF0aW9uIGFkanVzdG1lbnQgZm9yIGEgbGluZSB3aXRoIGEgbGVhZGluZyBjbG9zaW5nCiAgICAgICAgIyB0b2tlbiAtIGkuZS4gb25lIG9mIHRoZXNlOiAgICAgKSBdIH0gOgoKICAgICAgICAjIFRoZSBpbmRlbnRhdGlvbiBhZGp1c3RtZW50IGlzIGZvdW5kIGJ5IGNoZWNraW5nIGFsbCB1c2VyIGNvbnRyb2xzLAogICAgICAgICMgd2hpY2ggYXJlIHNvbWV0aW1lcyBpbiBjb25mbGljdC4gIFNvIHRoZSBsb2dpYyBpcyByYXRoZXIgY29tcGxleC4KCiAgICAgICAgIyBSZXR1cm5zOgogICAgICAgICMgIEZsYWdzIGdpdmluZyB0aGUgaW5kZW50YXRpb24gdG8gdXNlIGZvciB0aGlzIGxpbmU6CgogICAgICAgICMgICAkYWRqdXN0X2luZGVudGF0aW9uLAogICAgICAgICMgICAgICAgMCAtIGRvIG5vdCBhZGp1c3QKICAgICAgICAjICAgICAgIDEgLSBvdXRkZW50CiAgICAgICAgIyAgICAgICAyIC0gdmVydGljYWxseSBhbGlnbiB3aXRoIG9wZW5pbmcgdG9rZW4KICAgICAgICAjICAgICAgIDMgLSBpbmRlbnQKICAgICAgICAjICAgJGRlZmF1bHRfYWRqdXN0X2luZGVudGF0aW9uCiAgICAgICAgIyAgICAgICBhIGRlZmF1bHQgaW4gY2FzZSAkYWRqdXN0X2luZGVudGF0aW9uIGNhbm5vdCBiZSB1c2VkCiAgICAgICAgIwogICAgICAgICMgQWxzbyByZXR1cm5zIGluZm8gYWJvdXQgdGhlIGluZGVudGF0aW9uIG9mIHRoZSBvcGVuaW5nIHRva2VuLAogICAgICAgICMgb2J0YWluZWQgZnJvbSBzdWIgJ2dldF9vcGVuaW5nX2luZGVudGF0aW9uJzoKCiAgICAgICAgIyAgICRvcGVuaW5nX2luZGVudGF0aW9uLAogICAgICAgICMgICAkb3BlbmluZ19vZmZzZXQsCiAgICAgICAgIyAgICRpc19sZWFkaW5nLAogICAgICAgICMgICAkb3BlbmluZ19leGlzdHMsCgogICAgICAgIG15ICgKICAgICAgICAgICAgJHNlbGYsCgogICAgICAgICAgICAkaWJlZywKICAgICAgICAgICAgJGllbmQsCiAgICAgICAgICAgICRyaW5kZW50YXRpb25fbGlzdCwKICAgICAgICAgICAgJGxldmVsX2p1bXAsCiAgICAgICAgICAgICRpX3Rlcm1pbmFsLAogICAgICAgICAgICAkaXNfc2VtaWNvbG9uX3Rlcm1pbmF0ZWQsCiAgICAgICAgICAgICRzZXFub19xd19jbG9zaW5nLAoKICAgICAgICApID0gQF87CgogICAgICAgIG15ICRhZGp1c3RfaW5kZW50YXRpb24gICAgICAgICA9IDA7CiAgICAgICAgbXkgJGRlZmF1bHRfYWRqdXN0X2luZGVudGF0aW9uID0gJGFkanVzdF9pbmRlbnRhdGlvbjsKICAgICAgICBteSAkdGVybWluYWxfdHlwZSAgICAgICAgICAgICAgPSAkdHlwZXNfdG9fZ29bJGlfdGVybWluYWxdOwoKICAgICAgICBteSAkdHlwZV9iZWcgICAgICAgICAgICA9ICR0eXBlc190b19nb1skaWJlZ107CiAgICAgICAgbXkgJHRva2VuX2JlZyAgICAgICAgICAgPSAkdG9rZW5zX3RvX2dvWyRpYmVnXTsKICAgICAgICBteSAkbGV2ZWxfYmVnICAgICAgICAgICA9ICRsZXZlbHNfdG9fZ29bJGliZWddOwogICAgICAgIG15ICRibG9ja190eXBlX2JlZyAgICAgID0gJGJsb2NrX3R5cGVfdG9fZ29bJGliZWddOwogICAgICAgIG15ICRsZWFkaW5nX3NwYWNlc19iZWcgID0gJGxlYWRpbmdfc3BhY2VzX3RvX2dvWyRpYmVnXTsKICAgICAgICBteSAkc2Vxbm9fYmVnICAgICAgICAgICA9ICR0eXBlX3NlcXVlbmNlX3RvX2dvWyRpYmVnXTsKICAgICAgICBteSAkaXNfY2xvc2luZ190eXBlX2JlZyA9ICRpc19jbG9zaW5nX3R5cGV7JHR5cGVfYmVnfTsKCiAgICAgICAgIyBSZXR1cm4gdmFyaWFibGVzOgogICAgICAgIG15ICgKICAgICAgICAgICAgJG9wZW5pbmdfaW5kZW50YXRpb24sICRvcGVuaW5nX29mZnNldCwKICAgICAgICAgICAgJGlzX2xlYWRpbmcsICAgICAgICAgICRvcGVuaW5nX2V4aXN0cwogICAgICAgICk7CgogICAgICAgICMgSG9ub3IgYW55IGZsYWcgdG8gcmVkdWNlIC1jaSBzZXQgYnkgdGhlIC1iYnhpPW4gb3B0aW9uCiAgICAgICAgaWYgKCAkc2Vxbm9fYmVnICYmICRzZWxmLT5bX3J3YW50X3JlZHVjZWRfY2lfXS0+eyRzZXFub19iZWd9ICkgewoKICAgICAgICAgICAgIyBpZiB0aGlzIGlzIGFuIG9wZW5pbmcsIGl0IG11c3QgYmUgYWxvbmUgb24gdGhlIGxpbmUgLi4uCiAgICAgICAgICAgIGlmICggJGlzX2Nsb3NpbmdfdHlwZXskdHlwZV9iZWd9IHx8ICRpYmVnID09ICRpX3Rlcm1pbmFsICkgewogICAgICAgICAgICAgICAgJGFkanVzdF9pbmRlbnRhdGlvbiA9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgLi4uIG9yIGEgc2luZ2xlIHdlbGRlZCB1bml0IChmaXggZm9yIGIxMTczKQogICAgICAgICAgICBlbHNpZiAoJHRvdGFsX3dlbGRfY291bnQpIHsKICAgICAgICAgICAgICAgIG15ICRLX2JlZyAgICAgID0gJEtfdG9fZ29bJGliZWddOwogICAgICAgICAgICAgICAgbXkgJEt0ZXJtICAgICAgPSAkS190b19nb1skaV90ZXJtaW5hbF07CiAgICAgICAgICAgICAgICBteSAkS3Rlcm1fdGVzdCA9ICRzZWxmLT5bX3JLX3dlbGRfbGVmdF9dLT57JEt0ZXJtfTsKICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCgkS3Rlcm1fdGVzdCkgJiYgJEt0ZXJtX3Rlc3QgPj0gJEtfYmVnICkgewogICAgICAgICAgICAgICAgICAgICRLdGVybSA9ICRLdGVybV90ZXN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCAkS3Rlcm0gPT0gJEtfYmVnICkgeyAkYWRqdXN0X2luZGVudGF0aW9uID0gMSB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAjIG5vIGNoYW5nZSBpbiBjaSBuZWVkZWQKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbXkgJHJpc19ibGlfY29udGFpbmVyID0gJHNlbGYtPltfcmlzX2JsaV9jb250YWluZXJfXTsKICAgICAgICBteSAkaXNfYmxpX2JlZyA9ICRzZXFub19iZWcgPyAkcmlzX2JsaV9jb250YWluZXItPnskc2Vxbm9fYmVnfSA6IDA7CgogICAgICAgICMgVXBkYXRlIHRoZSAkaXNfYmxpIGZsYWcgYXMgd2UgZ28uIEl0IGlzIGluaXRpYWxseSAxLgogICAgICAgICMgV2Ugbm90ZSBzZWVpbmcgYSBsZWFkaW5nIG9wZW5pbmcgYnJhY2UgYnkgc2V0dGluZyBpdCB0byAyLgogICAgICAgICMgSWYgd2UgZ2V0IHRvIHRoZSBjbG9zaW5nIGJyYWNlIHdpdGhvdXQgc2VlaW5nIHRoZSBvcGVuaW5nIHRoZW4gd2UKICAgICAgICAjIHR1cm4gaXQgb2ZmLiAgVGhpcyBvY2N1cnMgaWYgdGhlIG9wZW5pbmcgYnJhY2UgZGlkIG5vdCBnZXQgb3V0cHV0CiAgICAgICAgIyBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lLCBzbyB3ZSB3aWxsIHRoZW4gaW5kZW50IHRoZSBjbG9zaW5nIGJyYWNlCiAgICAgICAgIyBpbiB0aGUgZGVmYXVsdCB3YXkuCiAgICAgICAgaWYgKCAkaXNfYmxpX2JlZyAmJiAkaXNfYmxpX2JlZyA9PSAxICkgewogICAgICAgICAgICBteSAkS19vcGVuaW5nX2NvbnRhaW5lciA9ICRzZWxmLT5bX0tfb3BlbmluZ19jb250YWluZXJfXTsKICAgICAgICAgICAgbXkgJEtfb3BlbmluZyAgICAgICAgICAgPSAkS19vcGVuaW5nX2NvbnRhaW5lci0+eyRzZXFub19iZWd9OwogICAgICAgICAgICBteSAkS19iZWcgICAgICAgICAgICAgICA9ICRLX3RvX2dvWyRpYmVnXTsKICAgICAgICAgICAgaWYgKCAkS19iZWcgZXEgJEtfb3BlbmluZyApIHsKICAgICAgICAgICAgICAgICRyaXNfYmxpX2NvbnRhaW5lci0+eyRzZXFub19iZWd9ID0gJGlzX2JsaV9iZWcgPSAyOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgeyAkaXNfYmxpX2JlZyA9IDAgfQogICAgICAgIH0KCiAgICAgICAgIyBRVyBQQVRDSCBmb3IgdGhlIGNvbWJpbmF0aW9uIC1scCAtd24KICAgICAgICAjIEZvciAtbHAgZm9ybWF0dGluZyB1c2UgJGliZWdfd2VsZF9maXggdG8gZ2V0IGFyb3VuZCB0aGUgcHJvYmxlbQogICAgICAgICMgdGhhdCB3aXRoIC1scCB0eXBlIGZvcm1hdHRpbmcgdGhlIG9wZW5pbmcgYW5kIGNsb3NpbmcgdG9rZW5zIHRvIG5vdAogICAgICAgICMgaGF2ZSBzZXF1ZW5jZSBudW1iZXJzLgogICAgICAgIG15ICRpYmVnX3dlbGRfZml4ID0gJGliZWc7CiAgICAgICAgaWYgKCAkc2Vxbm9fcXdfY2xvc2luZyAmJiAkdG90YWxfd2VsZF9jb3VudCApIHsKICAgICAgICAgICAgbXkgJGlfcGx1cyA9ICRpbmV4dF90b19nb1skaWJlZ107CiAgICAgICAgICAgIGlmICggJGlfcGx1cyA8PSAkbWF4X2luZGV4X3RvX2dvICkgewogICAgICAgICAgICAgICAgbXkgJEtfcGx1cyA9ICRLX3RvX2dvWyRpX3BsdXNdOwogICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCAkc2VsZi0+W19yS193ZWxkX2xlZnRfXS0+eyRLX3BsdXN9ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgJGliZWdfd2VsZF9maXggPSAkaV9wbHVzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGlmIHdlIGFyZSBhdCBhIGNsb3NpbmcgdG9rZW4gb2Ygc29tZSB0eXBlLi4KICAgICAgICBpZiAoICRpc19jbG9zaW5nX3R5cGVfYmVnIHx8ICRzZXFub19xd19jbG9zaW5nICkgewoKICAgICAgICAgICAgbXkgJEtfYmVnID0gJEtfdG9fZ29bJGliZWddOwoKICAgICAgICAgICAgIyBnZXQgdGhlIGluZGVudGF0aW9uIG9mIHRoZSBsaW5lIGNvbnRhaW5pbmcgdGhlIGNvcnJlc3BvbmRpbmcKICAgICAgICAgICAgIyBvcGVuaW5nIHRva2VuCiAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICRvcGVuaW5nX2luZGVudGF0aW9uLCAkb3BlbmluZ19vZmZzZXQsCiAgICAgICAgICAgICAgICAkaXNfbGVhZGluZywgICAgICAgICAgJG9wZW5pbmdfZXhpc3RzCiAgICAgICAgICAgICAgKQogICAgICAgICAgICAgID0gJHNlbGYtPmdldF9vcGVuaW5nX2luZGVudGF0aW9uKAoKICAgICAgICAgICAgICAgICRpYmVnX3dlbGRfZml4LAogICAgICAgICAgICAgICAgJHJpbmRlbnRhdGlvbl9saXN0LAogICAgICAgICAgICAgICAgJHNlcW5vX3F3X2Nsb3NpbmcKCiAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgUGF0Y2ggZm9yIHJ0MTQ0OTc5LCBwYXJ0IDEuIENvb3JkaW5hdGVkIHdpdGggcGFydCAyLgogICAgICAgICAgICAjIERvIG5vdCB1bmRvIGNpIGZvciBhIGN1ZGRsZWQgY2xvc2luZyBicmFjZSBjb250cm9sOyBpdAogICAgICAgICAgICAjIG5lZWRzIHRvIGJlIHRyZWF0ZWQgZXhhY3RseSB0aGUgc2FtZSBjaSBhcyBhbiBpc29sYXRlZAogICAgICAgICAgICAjIGNsb3NpbmcgYnJhY2UuCiAgICAgICAgICAgIG15ICRpc19jdWRkbGVkX2Nsb3NpbmdfYnJhY2UgPSAkc2Vxbm9fYmVnCiAgICAgICAgICAgICAgJiYgJHNlbGYtPltfcmlzX2N1ZGRsZWRfY2xvc2luZ19icmFjZV9dLT57JHNlcW5vX2JlZ307CgogICAgICAgICAgICAjIEZpcnN0IHNldCB0aGUgZGVmYXVsdCBiZWhhdmlvcjoKICAgICAgICAgICAgaWYgKAoKICAgICAgICAgICAgICAgICMgZGVmYXVsdCBiZWhhdmlvciBpcyB0byBvdXRkZW50IGNsb3NpbmcgbGluZXMKICAgICAgICAgICAgICAgICMgb2YgdGhlIGZvcm06ICAgIik7ICB9OyAgXTsgICktPnh4eDsiCiAgICAgICAgICAgICAgICAkaXNfc2VtaWNvbG9uX3Rlcm1pbmF0ZWQKCiAgICAgICAgICAgICAgICAjIGFuZCAnY3VkZGxlZCBwYXJlbnMnIG9mIHRoZSBmb3JtOiAgICIpLT5wYWNrKCIuIEJ1ZyBmaXggZm9yIFJUCiAgICAgICAgICAgICAgICAjICMxMjM3NDldOiB0aGUgVFlQRVMgaGVyZSB3ZXJlIGluY29ycmVjdGx5ICcpJyBhbmQgJygnLiAgVGhlCiAgICAgICAgICAgICAgICAjIGNvcnJlY3RlZCBUWVBFUyBhcmUgJ30nIGFuZCAneycuIEJ1dCBza2lwIGEgY3VkZGxlZCBibG9jay4KICAgICAgICAgICAgICAgIHx8ICgKICAgICAgICAgICAgICAgICAgICAgICAkdGVybWluYWxfdHlwZSBlcSAneycKICAgICAgICAgICAgICAgICAgICAmJiAkdHlwZV9iZWcgZXEgJ30nCiAgICAgICAgICAgICAgICAgICAgJiYgKCAkbmVzdGluZ19kZXB0aF90b19nb1skaWVuZF0gKyAxID09CiAgICAgICAgICAgICAgICAgICAgICAgICRuZXN0aW5nX2RlcHRoX3RvX2dvWyRpYmVnXSApCiAgICAgICAgICAgICAgICAgICAgJiYgISRpc19jdWRkbGVkX2Nsb3NpbmdfYnJhY2UKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICAjIHJlbW92ZSBjb250aW51YXRpb24gaW5kZW50YXRpb24gZm9yIGFueSBsaW5lIGxpa2UKICAgICAgICAgICAgICAgICMgICAgICAgfSAuLi4gewogICAgICAgICAgICAgICAgIyBvciB3aXRob3V0IGVuZGluZyAneycgYW5kIHVuYmFsYW5jZWQsIHN1Y2ggYXMKICAgICAgICAgICAgICAgICMgICAgICAgc3VjaCBhcyAnfS0+eyRvcGVyYXRvcn0nCiAgICAgICAgICAgICAgICB8fCAoCiAgICAgICAgICAgICAgICAgICAgJHR5cGVfYmVnIGVxICd9JwoKICAgICAgICAgICAgICAgICAgICAmJiAoICAgJHR5cGVzX3RvX2dvWyRpZW5kXSBlcSAneycKICAgICAgICAgICAgICAgICAgICAgICAgfHwgJGxldmVsc190b19nb1skaWVuZF0gPCAkbGV2ZWxfYmVnICkKCiAgICAgICAgICAgICAgICAgICAgIyBidXQgbm90IGlmIGEgY3VkZGxlZCBibG9jawogICAgICAgICAgICAgICAgICAgICYmICEkaXNfY3VkZGxlZF9jbG9zaW5nX2JyYWNlCiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAgIyBhbmQgd2hlbiB0aGUgbmV4dCBsaW5lIGlzIGF0IGEgbG93ZXIgaW5kZW50YXRpb24gbGV2ZWwuLi4KCiAgICAgICAgICAgICAgICAjIFBBVENIICMxOiBhbmQgb25seSBpZiB0aGUgc3R5bGUgYWxsb3dzIHVuZG9pbmcgY29udGludWF0aW9uCiAgICAgICAgICAgICAgICAjIGZvciBhbGwgY2xvc2luZyB0b2tlbiB0eXBlcy4gV2Ugc2hvdWxkIHJlYWxseSB3YWl0IHVudGlsCiAgICAgICAgICAgICAgICAjIHRoZSBpbmRlbnRhdGlvbiBvZiB0aGUgbmV4dCBsaW5lIGlzIGtub3duIGFuZCB0aGVuIG1ha2UKICAgICAgICAgICAgICAgICMgYSBkZWNpc2lvbiwgYnV0IHRoYXQgd291bGQgcmVxdWlyZSBhbm90aGVyIHBhc3MuCgogICAgICAgICAgICAgICAgIyBQQVRDSCAjMjogYW5kIG5vdCBpZiB0aGlzIHRva2VuIGlzIHVuZGVyIC14Y2kgY29udHJvbAogICAgICAgICAgICAgICAgfHwgKCAgICRsZXZlbF9qdW1wIDwgMAogICAgICAgICAgICAgICAgICAgICYmICEkc29tZV9jbG9zaW5nX3Rva2VuX2luZGVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgJiYgISRzZWxmLT5bX3JzZXFub19jb250cm9sbGluZ19teV9jaV9dLT57JEtfYmVnfSApCgogICAgICAgICAgICAgICAgIyBQYXRjaCBmb3IgLXduPTIsIG11bHRpcGxlIHdlbGRlZCBjbG9zaW5nIHRva2VucwogICAgICAgICAgICAgICAgfHwgKCAgICRpX3Rlcm1pbmFsID4gJGliZWcKICAgICAgICAgICAgICAgICAgICAmJiAkaXNfY2xvc2luZ190eXBleyAkdHlwZXNfdG9fZ29bJGllbmRdIH0gKQoKICAgICAgICAgICAgICAgICMgQWx0ZXJuYXRlIFBhdGNoIGZvciBnaXQgIzUxLCBpc29sYXRlZCBjbG9zaW5nIHF3IHRva2VuIG5vdAogICAgICAgICAgICAgICAgIyBvdXRkZW50ZWQgaWYgbm8tZGVsZXRlLW9sZC1uZXdsaW5lcyBpcyBzZXQuIFRoaXMgd29ya3MsIGJ1dAogICAgICAgICAgICAgICAgIyBhIG1vcmUgZ2VuZXJhbCBwYXRjaCBlbHNld2hlcmUgZml4ZXMgdGhlIHJlYWwgcHJvYmxlbTogbGp1bXAuCiAgICAgICAgICAgICAgICAjIHx8ICggJHNlcW5vX3F3X2Nsb3NpbmcgJiYgJGliZWcgPT0gJGlfdGVybWluYWwgKQoKICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRhZGp1c3RfaW5kZW50YXRpb24gPSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIG91dGRlbnQgc29tZXRoaW5nIGxpa2UgJyksJwogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkdGVybWluYWxfdHlwZSBlcSAnLCcKCiAgICAgICAgICAgICAgICAjIFJlbW92ZWQgdGhpcyBjb25zdHJhaW50IGZvciAtd24KICAgICAgICAgICAgICAgICMgT0xEOiBhbGxvdyBqdXN0IG9uZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBjb21tYQogICAgICAgICAgICAgICAgIyAmJiAkaV90ZXJtaW5hbCA9PSAkaWJlZyArIDEKCiAgICAgICAgICAgICAgICAjIHJlcXVpcmUgTElTVCBlbnZpcm9ubWVudDsgb3RoZXJ3aXNlLCB3ZSBtYXkgb3V0ZGVudCB0b28gbXVjaCAtCiAgICAgICAgICAgICAgICAjIHRoaXMgY2FuIGhhcHBlbiBpbiBjYWxscyB3aXRob3V0IHBhcmVudGhlc2VzIChvdmVybG9hZC50KTsKICAgICAgICAgICAgICAgICYmICRzZWxmLT5pc19pbl9saXN0X2J5X2koJGlfdGVybWluYWwpCiAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkYWRqdXN0X2luZGVudGF0aW9uID0gMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyB1bmRvIGNvbnRpbnVhdGlvbiBpbmRlbnRhdGlvbiBvZiBhIHRlcm1pbmFsIGNsb3NpbmcgdG9rZW4gaWYKICAgICAgICAgICAgIyBpdCBpcyB0aGUgbGFzdCB0b2tlbiBiZWZvcmUgYSBsZXZlbCBkZWNyZWFzZS4gIFRoaXMgd2lsbCBhbGxvdwogICAgICAgICAgICAjIGEgY2xvc2luZyB0b2tlbiB0byBsaW5lIHVwIHdpdGggaXRzIG9wZW5pbmcgY291bnRlcnBhcnQsIGFuZAogICAgICAgICAgICAjIGF2b2lkcyBhbiBpbmRlbnRhdGlvbiBqdW1wIGxhcmdlciB0aGFuIDEgbGV2ZWwuCiAgICAgICAgICAgIG15ICRyTEwgICAgPSAkc2VsZi0+W19yTExfXTsKICAgICAgICAgICAgbXkgJEtsaW1pdCA9ICRzZWxmLT5bX0tsaW1pdF9dOwogICAgICAgICAgICBpZiAoICAgJGlfdGVybWluYWwgPT0gJGliZWcKICAgICAgICAgICAgICAgICYmICRpc19jbG9zaW5nX3R5cGVfYmVnCiAgICAgICAgICAgICAgICAmJiBkZWZpbmVkKCRLX2JlZykKICAgICAgICAgICAgICAgICYmICRLX2JlZyA8ICRLbGltaXQgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBteSAkS19wbHVzICAgID0gJEtfYmVnICsgMTsKICAgICAgICAgICAgICAgIG15ICR0eXBlX3BsdXMgPSAkckxMLT5bJEtfcGx1c10tPltfVFlQRV9dOwoKICAgICAgICAgICAgICAgIGlmICggJHR5cGVfcGx1cyBlcSAnYicgJiYgJEtfcGx1cyA8ICRLbGltaXQgKSB7CiAgICAgICAgICAgICAgICAgICAgJHR5cGVfcGx1cyA9ICRyTEwtPlsgKyskS19wbHVzIF0tPltfVFlQRV9dOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggJHR5cGVfcGx1cyBlcSAnIycgJiYgJEtfcGx1cyA8ICRLbGltaXQgKSB7CiAgICAgICAgICAgICAgICAgICAgJHR5cGVfcGx1cyA9ICRyTEwtPlsgKyskS19wbHVzIF0tPltfVFlQRV9dOwogICAgICAgICAgICAgICAgICAgIGlmICggJHR5cGVfcGx1cyBlcSAnYicgJiYgJEtfcGx1cyA8ICRLbGltaXQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlX3BsdXMgPSAkckxMLT5bICsrJEtfcGx1cyBdLT5bX1RZUEVfXTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgTm90ZTogd2UgaGF2ZSBza2lwcGVkIHBhc3QganVzdCBvbmUgY29tbWVudCAocGVyaGFwcyBhCiAgICAgICAgICAgICAgICAgICAgIyBzaWRlIGNvbW1lbnQpLiAgVGhlcmUgY291bGQgYmUgbW9yZSwgYW5kIHdlIGNvdWxkIGVhc2lseQogICAgICAgICAgICAgICAgICAgICMgc2tpcCBwYXN0IGFsbCB0aGUgcmVzdCB3aXRoIHRoZSBmb2xsb3dpbmcgY29kZSwgb3Igd2l0aCBhCiAgICAgICAgICAgICAgICAgICAgIyB3aGlsZSBsb29wLiAgSXQgd291bGQgYmUgcmFyZSB0byBoYXZlIHRvIGRvIHRoaXMsIGFuZAogICAgICAgICAgICAgICAgICAgICMgdGhvc2UgYmxvY2sgY29tbWVudHMgd291bGQgc3RpbGwgYmUgaW5kZW50ZWQsIHNvIGl0IHdvdWxkCiAgICAgICAgICAgICAgICAgICAgIyB0byBsZWF2ZSB0aGVtIGluZGVudGVkLiAgU28gaXQgc2VlbXMgYmVzdCB0byBqdXN0IHN0b3AgYXQKICAgICAgICAgICAgICAgICAgICAjIGEgbWF4aW11bSBvZiBvbmUgY29tbWVudC4KICAgICAgICAgICAgICAgICAgICAjI2lmICgkdHlwZV9wbHVzIGVxICcjJykgewogICAgICAgICAgICAgICAgICAgICMjICAgJEtfcGx1cyA9ICRzZWxmLT5LX25leHRfY29kZSgkS19wbHVzKTsKICAgICAgICAgICAgICAgICAgICAjI30KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICEkaXNfYmxpX2JlZyAmJiBkZWZpbmVkKCRLX3BsdXMpICkgewogICAgICAgICAgICAgICAgICAgIG15ICRsZXYgICAgICAgID0gJGxldmVsX2JlZzsKICAgICAgICAgICAgICAgICAgICBteSAkbGV2ZWxfbmV4dCA9ICRyTEwtPlskS19wbHVzXS0+W19MRVZFTF9dOwoKICAgICAgICAgICAgICAgICAgICAjIGFuZCBkbyBub3QgdW5kbyBjaSBpZiBpdCB3YXMgc2V0IGJ5IHRoZSAteGNpIG9wdGlvbgogICAgICAgICAgICAgICAgICAgICRhZGp1c3RfaW5kZW50YXRpb24gPSAxCiAgICAgICAgICAgICAgICAgICAgICBpZiAoICRsZXZlbF9uZXh0IDwgJGxldgogICAgICAgICAgICAgICAgICAgICAgICAmJiAhJHNlbGYtPltfcnNlcW5vX2NvbnRyb2xsaW5nX215X2NpX10tPnskS19iZWd9ICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBQYXRjaCBmb3IgUlQgIzk2MTAxLCBpbiB3aGljaCBjbG9zaW5nIGJyYWNlIG9mIGFub255bW91cyBzdWJzCiAgICAgICAgICAgICAgICAjIHdhcyBub3Qgb3V0ZGVudGVkLiAgV2Ugc2hvdWxkIGxvb2sgYWhlYWQgYW5kIHNlZSBpZiB0aGVyZSBpcwogICAgICAgICAgICAgICAgIyBhIGxldmVsIGRlY3JlYXNlIGF0IHRoZSBuZXh0IHRva2VuIChpLmUuLCBhIGNsb3NpbmcgdG9rZW4pLAogICAgICAgICAgICAgICAgIyBidXQgcmlnaHQgbm93IHdlIGRvIG5vdCBoYXZlIHRoYXQgaW5mb3JtYXRpb24uICBGb3Igbm93CiAgICAgICAgICAgICAgICAjIHdlIHNlZSBpZiB3ZSBhcmUgaW4gYSBsaXN0LCBhbmQgdGhpcyB3b3JrcyB3ZWxsLgogICAgICAgICAgICAgICAgIyBTZWUgdGVzdCBmaWxlcyAnc3ViKi50JyBmb3IgZ29vZCB0ZXN0IGNhc2VzLgogICAgICAgICAgICAgICAgaWYgKCAgISRyT3B0c19pbmRlbnRfY2xvc2luZ19icmFjZQogICAgICAgICAgICAgICAgICAgICYmICRibG9ja190eXBlX2JlZwogICAgICAgICAgICAgICAgICAgICYmICRzZWxmLT5bX3Jpc19hc3ViX2Jsb2NrX10tPnskc2Vxbm9fYmVnfQogICAgICAgICAgICAgICAgICAgICYmICRzZWxmLT5pc19pbl9saXN0X2J5X2koJGlfdGVybWluYWwpICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgICRvcGVuaW5nX2luZGVudGF0aW9uLCAkb3BlbmluZ19vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICRpc19sZWFkaW5nLCAgICAgICAgICAkb3BlbmluZ19leGlzdHMKICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgID0gJHNlbGYtPmdldF9vcGVuaW5nX2luZGVudGF0aW9uKCAkaWJlZywKICAgICAgICAgICAgICAgICAgICAgICAgJHJpbmRlbnRhdGlvbl9saXN0LCB1bmRlZiApOwogICAgICAgICAgICAgICAgICAgIG15ICRpbmRlbnRhdGlvbiA9ICRsZWFkaW5nX3NwYWNlc19iZWc7CiAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRvcGVuaW5nX2luZGVudGF0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAmJiBnZXRfc3BhY2VzKCRpbmRlbnRhdGlvbikgPgogICAgICAgICAgICAgICAgICAgICAgICBnZXRfc3BhY2VzKCRvcGVuaW5nX2luZGVudGF0aW9uKSApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkYWRqdXN0X2luZGVudGF0aW9uID0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgWVZFUyBwYXRjaCAxIG9mIDI6CiAgICAgICAgICAgICMgVW5kbyBjaSBvZiBsaW5lIHdpdGggbGVhZGluZyBjbG9zaW5nIGV2YWwgYnJhY2UsCiAgICAgICAgICAgICMgYnV0IG5vdCBiZXlvbmQgdGhlIGluZGVudGF0aW9uIG9mIHRoZSBsaW5lIHdpdGgKICAgICAgICAgICAgIyB0aGUgb3BlbmluZyBicmFjZS4KICAgICAgICAgICAgaWYgKCAgICRibG9ja190eXBlX2JlZwogICAgICAgICAgICAgICAgJiYgJGJsb2NrX3R5cGVfYmVnIGVxICdldmFsJwogICAgICAgICAgICAgICAgJiYgIXJlZigkbGVhZGluZ19zcGFjZXNfYmVnKQogICAgICAgICAgICAgICAgJiYgISRyT3B0c19pbmRlbnRfY2xvc2luZ19icmFjZSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAkb3BlbmluZ19pbmRlbnRhdGlvbiwgJG9wZW5pbmdfb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICRpc19sZWFkaW5nLCAgICAgICAgICAkb3BlbmluZ19leGlzdHMKICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICA9ICRzZWxmLT5nZXRfb3BlbmluZ19pbmRlbnRhdGlvbiggJGliZWcsICRyaW5kZW50YXRpb25fbGlzdCwKICAgICAgICAgICAgICAgICAgICB1bmRlZiApOwogICAgICAgICAgICAgICAgbXkgJGluZGVudGF0aW9uID0gJGxlYWRpbmdfc3BhY2VzX2JlZzsKICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCgkb3BlbmluZ19pbmRlbnRhdGlvbikKICAgICAgICAgICAgICAgICAgICAmJiBnZXRfc3BhY2VzKCRpbmRlbnRhdGlvbikgPgogICAgICAgICAgICAgICAgICAgIGdldF9zcGFjZXMoJG9wZW5pbmdfaW5kZW50YXRpb24pICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkYWRqdXN0X2luZGVudGF0aW9uID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBwYXRjaCBmb3IgaXNzdWUgZ2l0ICM0MDogLWJsaSBzZXR0aW5nIGhhcyBwcmlvcml0eQogICAgICAgICAgICAkYWRqdXN0X2luZGVudGF0aW9uID0gMCBpZiAoJGlzX2JsaV9iZWcpOwoKICAgICAgICAgICAgJGRlZmF1bHRfYWRqdXN0X2luZGVudGF0aW9uID0gJGFkanVzdF9pbmRlbnRhdGlvbjsKCiAgICAgICAgICAgICMgTm93IG1vZGlmeSBkZWZhdWx0IGJlaGF2aW9yIGFjY29yZGluZyB0byB1c2VyIHJlcXVlc3Q6CiAgICAgICAgICAgICMgaGFuZGxlIG9wdGlvbiB0byBpbmRlbnQgbm9uLWJsb2NrcyBvZiB0aGUgZm9ybSApOyAgfTsgIF07CiAgICAgICAgICAgICMgQnV0IGRvbid0IGRvIHNwZWNpYWwgaW5kZW50YXRpb24gdG8gc29tZXRoaW5nIGxpa2UgJyktPnBhY2soJwogICAgICAgICAgICBpZiAoICEkYmxvY2tfdHlwZV9iZWcgKSB7CgogICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQgbG9naWNhbCBwYWRkaW5nIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZCwgc28gd2UgbWF5CiAgICAgICAgICAgICAgICAjIG5lZWQgdG8gcmVtb3ZlIHNvbWUgc3BhY2VzIHRvIGdldCBhIHZhbGlkIGhhc2gga2V5LgogICAgICAgICAgICAgICAgbXkgJHRvayA9ICR0b2tlbl9iZWc7CiAgICAgICAgICAgICAgICBteSAkY3RpID0gJGNsb3NpbmdfdG9rZW5faW5kZW50YXRpb257JHRva307CgogICAgICAgICAgICAgICAgIyBGaXggdGhlIHZhbHVlIG9mICdjdGknIGZvciBhbiBpc29sYXRlZCBub24td2VsZGVkIGNsb3NpbmcgcXcKICAgICAgICAgICAgICAgICMgZGVsaW1pdGVyLgogICAgICAgICAgICAgICAgaWYgKCAkc2Vxbm9fcXdfY2xvc2luZyAmJiAkaWJlZ193ZWxkX2ZpeCA9PSAkaWJlZyApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBBIHF1b3RlIGRlbGltaXRlciB3aGljaCBpcyBub3QgYSBjb250YWluZXIgd2lsbCBub3QgaGF2ZQogICAgICAgICAgICAgICAgICAgICMgYSBjdGkgdmFsdWUgZGVmaW5lZC4gIEluIHRoaXMgY2FzZSB1c2UgdGhlIHN0eWxlIG9mIGEKICAgICAgICAgICAgICAgICAgICAjIHBhcmVuLiBGb3IgZXhhbXBsZQogICAgICAgICAgICAgICAgICAgICMgICBteSBAZmFycyA9ICgKICAgICAgICAgICAgICAgICAgICAjICAgICAgcXc8CiAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgZmFyCiAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgZmFyZmFyCiAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgZmFyZmFycy1mYXIKICAgICAgICAgICAgICAgICAgICAjICAgICAgPiwKICAgICAgICAgICAgICAgICAgICAjICAgKTsKICAgICAgICAgICAgICAgICAgICBpZiAoICFkZWZpbmVkKCRjdGkpICYmIGxlbmd0aCgkdG9rKSA9PSAxICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBzb21ldGhpbmcgb3RoZXIgdGhhbiAnKScsICd9JywgJ10nIDsgdXNlIGZsYWcgZm9yICcpJwogICAgICAgICAgICAgICAgICAgICAgICAkY3RpID0gJGNsb3NpbmdfdG9rZW5faW5kZW50YXRpb257JyknfTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgQnV0IGZvciBub3csIGRvIG5vdCBvdXRkZW50IG5vbi1jb250YWluZXIgcXcKICAgICAgICAgICAgICAgICAgICAgICAgIyBkZWxpbWl0ZXJzIGJlY2F1c2UgaXQgd291bGQgd291bGQgY2hhbmdlIGV4aXN0aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICMgZm9ybWF0dGluZy4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkdG9rIG5lICc+JyApIHsgJGN0aSA9IDMgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBBIG5vbi13ZWxkZWQgY2xvc2luZyBxdyBjYW5ub3QgY3VycmVudGx5IHVzZSAtY3RpPTEKICAgICAgICAgICAgICAgICAgICAjIGJlY2F1c2UgdGhhdCBvcHRpb24gcmVxdWlyZXMgYSBzZXF1ZW5jZSBudW1iZXIgdG8gZmluZAogICAgICAgICAgICAgICAgICAgICMgdGhlIG9wZW5pbmcgaW5kZW50YXRpb24sIGFuZCBxdyBxdW90ZSBkZWxpbWl0ZXJzIGFyZSBub3QKICAgICAgICAgICAgICAgICAgICAjIHNlcXVlbmNlZCBpdGVtcy4KICAgICAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQoJGN0aSkgJiYgJGN0aSA9PSAxICkgeyAkY3RpID0gMCB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkY3RpKSApIHsKCiAgICAgICAgICAgICAgICAgICAgIyAkY3RpIG1heSBub3QgYmUgZGVmaW5lZCBmb3Igc2V2ZXJhbCByZWFzb25zLgogICAgICAgICAgICAgICAgICAgICMgLXBhZGRpbmcgbWF5IGhhdmUgYmVlbiBhcHBsaWVkIHNvIHRoZSBjaGFyYWN0ZXIKICAgICAgICAgICAgICAgICAgICAjICBoYXMgYSBsZW5ndGggPiAxCiAgICAgICAgICAgICAgICAgICAgIyAtIHdlIG1heSBoYXZlIHdlbGRlZCB0byBhIGNsb3NpbmcgcXVvdGUgdG9rZW4uCiAgICAgICAgICAgICAgICAgICAgIyAgIEhlcmUgaXMgYW4gZXhhbXBsZSAocGVybHRpZHkgLXduKToKICAgICAgICAgICAgICAgICAgICAjICAgICAgIF9fUEFDS0FHRV9fLT5sb2FkX2NvbXBvbmVudHMoIHF3KAogICAgICAgICAgICAgICAgICAgICMgID4gICAgICAgICBDb3JlCiAgICAgICAgICAgICAgICAgICAgIyAgPgogICAgICAgICAgICAgICAgICAgICMgID4gICAgICkgKTsKICAgICAgICAgICAgICAgICAgICAkYWRqdXN0X2luZGVudGF0aW9uID0gMDsKCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoICRjdGkgPT0gMSApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICAgJGlfdGVybWluYWwgPD0gJGliZWcgKyAxCiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRpc19zZW1pY29sb25fdGVybWluYXRlZCApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkYWRqdXN0X2luZGVudGF0aW9uID0gMjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRhZGp1c3RfaW5kZW50YXRpb24gPSAwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJGN0aSA9PSAyICkgewogICAgICAgICAgICAgICAgICAgIGlmICgkaXNfc2VtaWNvbG9uX3Rlcm1pbmF0ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGFkanVzdF9pbmRlbnRhdGlvbiA9IDM7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkYWRqdXN0X2luZGVudGF0aW9uID0gMDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoICRjdGkgPT0gMyApIHsKICAgICAgICAgICAgICAgICAgICAkYWRqdXN0X2luZGVudGF0aW9uID0gMzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICMjIGN0aSA9PSAwCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaGFuZGxlIG9wdGlvbiB0byBpbmRlbnQgYmxvY2tzCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICRyT3B0c19pbmRlbnRfY2xvc2luZ19icmFjZQogICAgICAgICAgICAgICAgICAgICYmICgKICAgICAgICAgICAgICAgICAgICAgICAgJGlfdGVybWluYWwgPT0gJGliZWcgICAgIyAgaXNvbGF0ZWQgdGVybWluYWwgJ30nCiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRpc19zZW1pY29sb25fdGVybWluYXRlZAogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgfSB4eHh4IDsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkYWRqdXN0X2luZGVudGF0aW9uID0gMzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gIyMgZW5kIGlmICggJGlzX2Nsb3NpbmdfdHlwZV9iZWcgfHwgJHNlcW5vX3F3X2Nsb3NpbmcgKQoKICAgICAgICAjIGlmIGxpbmUgYmVnaW5zIHdpdGggYSAnOicsIGFsaWduIGl0IHdpdGggYW55CiAgICAgICAgIyBwcmV2aW91cyBsaW5lIGxlYWRpbmcgd2l0aCBjb3JyZXNwb25kaW5nID8KICAgICAgICBlbHNpZiAoICR0eXBlX2JlZyBlcSAnOicgKSB7CiAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICRvcGVuaW5nX2luZGVudGF0aW9uLCAkb3BlbmluZ19vZmZzZXQsCiAgICAgICAgICAgICAgICAkaXNfbGVhZGluZywgICAgICAgICAgJG9wZW5pbmdfZXhpc3RzCiAgICAgICAgICAgICAgKQogICAgICAgICAgICAgID0gJHNlbGYtPmdldF9vcGVuaW5nX2luZGVudGF0aW9uKCAkaWJlZywKICAgICAgICAgICAgICAgICRyaW5kZW50YXRpb25fbGlzdCwgdW5kZWYgKTsKICAgICAgICAgICAgaWYgKCRpc19sZWFkaW5nKSB7ICRhZGp1c3RfaW5kZW50YXRpb24gPSAyOyB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAjIG5vdCBhIGNsb3NpbmcgdHlwZQogICAgICAgIH0KCiAgICAgICAgIyBBIGZpbmFsIGNoZWNrOiByZXNldCB0aGUgZmxhZyB2YWx1ZSBmcm9tIDEgdG8gMCBpZiBtb3ZpbmcgbGVmdCB3b3VsZAogICAgICAgICMgZ2l2ZSB0aGlzIGNsb3NpbmcgdG9rZW4gbGVzcyBpbmRlbnRhdGlvbiB0aGFuIHRoZSBsaW5lIHdpdGggaXRzCiAgICAgICAgIyBvcGVuaW5nIHRva2VuLiBXZSBjb3VsZCBkbyB0aGlzIGNoZWNrIGF0IHRoZSB0b3AgZm9yIG1vcmUgZWZmaWNpZW5jeQogICAgICAgICMgZXhjZXB0IGZvciAtbHAuICBGb3IgLWxwLCBpZiB0aGUgJGFkanVzdF9pbmRlbnRhdGlvbiBmbGFnIGZsaXBzIGZyb20KICAgICAgICAjIDEgdG8gMiwgdGhlbiB0aGUgLWxwIGxvZ2ljIGNhbiBkbyBhIGJldHRlciByZWNvdmVyeSBpZiBpdCBrbm93cyB0aGF0CiAgICAgICAgIyB0aGUgJGRlZmF1bHRfYWRqdXN0X2luZGVudGF0aW9uPTEgaW5zdGVhZCBvZiAwIChjNDM1KQogICAgICAgIGlmICggJGFkanVzdF9pbmRlbnRhdGlvbiA9PSAxICkgewogICAgICAgICAgICBteSAkbm9fbGVmdF9hZGp1c3RtZW50X3NwYWNlID0gZGVmaW5lZCgkb3BlbmluZ19pbmRlbnRhdGlvbikKICAgICAgICAgICAgICAmJiBnZXRfc3BhY2VzKCRsZWFkaW5nX3NwYWNlc19iZWcpIDw9CiAgICAgICAgICAgICAgZ2V0X3NwYWNlcygkb3BlbmluZ19pbmRlbnRhdGlvbik7CiAgICAgICAgICAgIGlmICgkbm9fbGVmdF9hZGp1c3RtZW50X3NwYWNlKSB7CiAgICAgICAgICAgICAgICAkYWRqdXN0X2luZGVudGF0aW9uID0gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICgKCiAgICAgICAgICAgICRhZGp1c3RfaW5kZW50YXRpb24sCiAgICAgICAgICAgICRkZWZhdWx0X2FkanVzdF9pbmRlbnRhdGlvbiwKICAgICAgICAgICAgJG9wZW5pbmdfaW5kZW50YXRpb24sCiAgICAgICAgICAgICRvcGVuaW5nX29mZnNldCwKICAgICAgICAgICAgJGlzX2xlYWRpbmcsCiAgICAgICAgICAgICRvcGVuaW5nX2V4aXN0cywKCiAgICAgICAgKTsKICAgIH0gIyMgZW5kIHN1YiBnZXRfY2xvc2luZ190b2tlbl9pbmRlbnRhdGlvbgp9ICMjIGVuZCBjbG9zdXJlIGdldF9maW5hbF9pbmRlbnRhdGlvbgoKc3ViIGdldF9vcGVuaW5nX2luZGVudGF0aW9uIHsKCiAgICAjIGdldCB0aGUgaW5kZW50YXRpb24gb2YgdGhlIGxpbmUgd2hpY2ggb3V0cHV0IHRoZSBvcGVuaW5nIHRva2VuCiAgICAjIGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbiBjbG9zaW5nIHRva2VuIGluIHRoZSBjdXJyZW50IG91dHB1dCBiYXRjaC4KICAgICMKICAgICMgZ2l2ZW46CiAgICAjICRpX2Nsb3NpbmcgLSBpbmRleCBpbiB0aGlzIGxpbmUgb2YgYSBjbG9zaW5nIHRva2VuICcpJyAnfScgb3IgJ10nCiAgICAjCiAgICAjICRyaV9maXJzdCAtIHJlZmVyZW5jZSB0byBsaXN0IG9mIHRoZSBmaXJzdCBpbmRleCAkaSBmb3IgZWFjaCBvdXRwdXQKICAgICMgICAgICAgICAgICAgICBsaW5lIGluIHRoaXMgYmF0Y2gKICAgICMgJHJpX2xhc3QgLSByZWZlcmVuY2UgdG8gbGlzdCBvZiB0aGUgbGFzdCBpbmRleCAkaSBmb3IgZWFjaCBvdXRwdXQgbGluZQogICAgIyAgICAgICAgICAgICAgaW4gdGhpcyBiYXRjaAogICAgIyAkcmluZGVudGF0aW9uX2xpc3QgLSByZWZlcmVuY2UgdG8gYSBsaXN0IGNvbnRhaW5pbmcgdGhlIGluZGVudGF0aW9uCiAgICAjICAgICAgICAgICAgdXNlZCBmb3IgZWFjaCBsaW5lLgogICAgIyAkcXdfc2Vxbm8gLSBvcHRpb25hbCBzZXF1ZW5jZSBudW1iZXIgdG8gdXNlIGlmIG5vcm1hbCBzZXFubyBub3QgZGVmaW5lZAogICAgIyAgICAgICAgICAgKE5PVEU6IHdvdWxkIGJlIG1vcmUgZ2VuZXJhbCB0byBqdXN0IGxvb2sgdGhpcyB1cCBmcm9tIGluZGV4IGkpCiAgICAjCiAgICAjIHJldHVybjoKICAgICMgICAtdGhlIGluZGVudGF0aW9uIG9mIHRoZSBsaW5lIHdoaWNoIGNvbnRhaW5lZCB0aGUgb3BlbmluZyB0b2tlbgogICAgIyAgICB3aGljaCBtYXRjaGVzIHRoZSB0b2tlbiBhdCBpbmRleCAkaV9vcGVuaW5nCiAgICAjICAgLWFuZCBpdHMgb2Zmc2V0IChudW1iZXIgb2YgY29sdW1ucykgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGxpbmUKICAgICMKICAgIG15ICgKICAgICAgICAkc2VsZiwKCiAgICAgICAgJGlfY2xvc2luZywKICAgICAgICAkcmluZGVudGF0aW9uX2xpc3QsCiAgICAgICAgJHF3X3NlcW5vCgogICAgKSA9IEBfOwoKICAgICMgZmlyc3QsIHNlZSBpZiB0aGUgb3BlbmluZyB0b2tlbiBpcyBpbiB0aGUgY3VycmVudCBiYXRjaAogICAgbXkgJGlfb3BlbmluZyA9ICRtYXRlX2luZGV4X3RvX2dvWyRpX2Nsb3NpbmddOwogICAgbXkgKCAkaW5kZW50LCAkb2Zmc2V0LCAkaXNfbGVhZGluZywgJGV4aXN0cyApOwogICAgJGV4aXN0cyA9IDE7CiAgICBpZiAoIGRlZmluZWQoJGlfb3BlbmluZykgJiYgJGlfb3BlbmluZyA+PSAwICkgewoKICAgICAgICAjIGl0IGlzLi5sb29rIHVwIHRoZSBpbmRlbnRhdGlvbgogICAgICAgICggJGluZGVudCwgJG9mZnNldCwgJGlzX2xlYWRpbmcgKSA9CiAgICAgICAgICAkc2VsZi0+bG9va3VwX29wZW5pbmdfaW5kZW50YXRpb24oICRpX29wZW5pbmcsICRyaW5kZW50YXRpb25fbGlzdCApOwogICAgfQoKICAgICMgaWYgbm90LCBpdCBzaG91bGQgaGF2ZSBiZWVuIHN0b3JlZCBpbiB0aGUgaGFzaCBieSBhIHByZXZpb3VzIGJhdGNoCiAgICBlbHNlIHsKICAgICAgICBteSAkc2Vxbm8gPSAkdHlwZV9zZXF1ZW5jZV90b19nb1skaV9jbG9zaW5nXTsKICAgICAgICAkc2Vxbm8gPSAkcXdfc2Vxbm8gdW5sZXNzICgkc2Vxbm8pOwogICAgICAgICggJGluZGVudCwgJG9mZnNldCwgJGlzX2xlYWRpbmcsICRleGlzdHMgKSA9CiAgICAgICAgICBnZXRfc2F2ZWRfb3BlbmluZ19pbmRlbnRhdGlvbigkc2Vxbm8pOwogICAgfQogICAgcmV0dXJuICggJGluZGVudCwgJG9mZnNldCwgJGlzX2xlYWRpbmcsICRleGlzdHMgKTsKfSAjIyBlbmQgc3ViIGdldF9vcGVuaW5nX2luZGVudGF0aW9uCgpzdWIgZXhhbWluZV92ZXJ0aWNhbF90aWdodG5lc3NfZmxhZ3MgewogICAgbXkgKCRzZWxmKSA9IEBfOwoKICAgICMgRm9yIGVmZmljaWVuY3ksIHdlIHdpbGwgc2V0IGEgZmxhZyB0byBza2lwIGFsbCBjYWxscyB0byBzdWIKICAgICMgJ3NldF92ZXJ0aWNhbF90aWdodG5lc3NfZmxhZ3MnIGlmIHZlcnRpY2FsIHRpZ2h0bmVzcyBpcyBub3QgcG9zc2libGUgd2l0aAogICAgIyB0aGUgdXNlciBpbnB1dCBwYXJhbWV0ZXJzLiAgSWYgdmVydGljYWwgdGlnaHRuZXNzIGlzIHBvc3NpYmxlLCB3ZSB3aWxsCiAgICAjIHNpbXBseSBsZWF2ZSB0aGUgZmxhZyB1bmRlZmluZWQgYW5kIHJldHVybi4KCiAgICAjIFZlcnRpY2FsIHRpZ2h0bmVzcyBpcyBuZXZlciBwb3NzaWJsZSB3aXRoIC0tZnJlZXplLXdoaXRlc3BhY2UKICAgIGlmICgkck9wdHNfZnJlZXplX3doaXRlc3BhY2UpIHsKICAgICAgICAkc2VsZi0+W19ub192ZXJ0aWNhbF90aWdodG5lc3NfZmxhZ3NfXSA9IDE7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgVGhpcyBzdWIgaXMgY29vcmRpbmF0ZWQgd2l0aCBzdWIgc2V0X3ZlcnRpY2FsX3RpZ2h0bmVzc19mbGFncy4KICAgICMgVGhlIFNlY3Rpb24gbnVtYmVycyBpbiB0aGUgZm9sbG93aW5nIGNvbW1lbnRzIGFyZSB0aGUgc2VjdGlvbnMKICAgICMgaW4gc3ViIHNldF92ZXJ0aWNhbF90aWdodG5lc3NfZmxhZ3M6CgogICAgIyBFeGFtaW5lIGNvbnRyb2xzIGZvciBTZWN0aW9uIDFhOgogICAgcmV0dXJuIGlmICgkck9wdHNfbGluZV91cF9wYXJlbnRoZXNlcyk7CgogICAgZm9yZWFjaCBteSAka2V5ICgga2V5cyAlb3BlbmluZ192ZXJ0aWNhbF90aWdodG5lc3MgKSB7CiAgICAgICAgcmV0dXJuIGlmICggJG9wZW5pbmdfdmVydGljYWxfdGlnaHRuZXNzeyRrZXl9ICk7CiAgICB9CgogICAgIyBFeGFtaW5lIGNvbnRyb2xzIGZvciBTZWN0aW9uIDFiOgogICAgZm9yZWFjaCBteSAka2V5ICgga2V5cyAlY2xvc2luZ192ZXJ0aWNhbF90aWdodG5lc3MgKSB7CiAgICAgICAgcmV0dXJuIGlmICggJGNsb3NpbmdfdmVydGljYWxfdGlnaHRuZXNzeyRrZXl9ICk7CiAgICB9CgogICAgIyBFeGFtaW5lIGNvbnRyb2xzIGZvciBTZWN0aW9uIDFjOgogICAgZm9yZWFjaCBteSAka2V5ICgga2V5cyAlb3BlbmluZ190b2tlbl9yaWdodCApIHsKICAgICAgICByZXR1cm4gaWYgKCAkb3BlbmluZ190b2tlbl9yaWdodHska2V5fSApOwogICAgfQoKICAgICMgRXhhbWluZSBjb250cm9scyBmb3IgU2VjdGlvbiAxZDoKICAgIGZvcmVhY2ggbXkgJGtleSAoIGtleXMgJXN0YWNrX29wZW5pbmdfdG9rZW4gKSB7CiAgICAgICAgcmV0dXJuIGlmICggJHN0YWNrX29wZW5pbmdfdG9rZW57JGtleX0gKTsKICAgIH0KICAgIGZvcmVhY2ggbXkgJGtleSAoIGtleXMgJXN0YWNrX2Nsb3NpbmdfdG9rZW4gKSB7CiAgICAgICAgcmV0dXJuIGlmICggJHN0YWNrX2Nsb3NpbmdfdG9rZW57JGtleX0gKTsKICAgIH0KCiAgICAjIEV4YW1pbmUgY29udHJvbHMgZm9yIFNlY3Rpb24gMjoKICAgIHJldHVybiBpZiAoJHJPcHRzX2Jsb2NrX2JyYWNlX3ZlcnRpY2FsX3RpZ2h0bmVzcyk7CgogICAgIyBFeGFtaW5lIGNvbnRyb2xzIGZvciBTZWN0aW9uIDM6CiAgICByZXR1cm4gaWYgKCRyT3B0c19zdGFja19jbG9zaW5nX2Jsb2NrX2JyYWNlKTsKCiAgICAjIE5vbmUgb2YgdGhlIGNvbnRyb2xzIHVzZWQgZm9yIHZlcnRpY2FsIHRpZ2h0bmVzcyBhcmUgc2V0LCBzbwogICAgIyB3ZSBjYW4gc2tpcCBhbGwgY2FsbHMgdG8gc3ViIHNldF92ZXJ0aWNhbF90aWdodG5lc3NfZmxhZ3MKICAgICRzZWxmLT5bX25vX3ZlcnRpY2FsX3RpZ2h0bmVzc19mbGFnc19dID0gMTsKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGV4YW1pbmVfdmVydGljYWxfdGlnaHRuZXNzX2ZsYWdzCgpteSAlaXNfdW5jb3ZlcmVkX29wZXJhdG9yOwoKIyBiMTA2MCwgYjE0OTkKQkVHSU4gewogICAgbXkgQHEgPSBxdyggPyA6ICYmIHx8ICk7CiAgICBAaXNfdW5jb3ZlcmVkX29wZXJhdG9ye0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7Cn0KCnN1YiBzZXRfdmVydGljYWxfdGlnaHRuZXNzX2ZsYWdzIHsKCiAgICBteSAoICRzZWxmLCAkbmxpbmUsICRjbG9zaW5nX3NpZGVfY29tbWVudCApID0gQF87CgogICAgIyBHaXZlbjoKICAgICMgICAkbmxpbmUgPSBpbmRleCBvZiB0aGlzIGxpbmUgaW4gdGhlIGN1cnJlbnQgb3V0cHV0IGJhdGNoCiAgICAjICAgJGNsb3Npbmdfc2lkZV9jb21tZW50ID0gdHJ1ZSBpZiBsaW5lIGhhcyBzaWRlIGNvbW1lbnQKCiAgICAjIERlZmluZSB2ZXJ0aWNhbCB0aWdodG5lc3MgY29udHJvbHMgZm9yIHRoZSBudGggbGluZSBvZiBhIGJhdGNoLgogICAgIyBOb3RlOiBkbyBub3QgY2FsbCB0aGlzIHN1YiBmb3IgYSBibG9jayBjb21tZW50IG9yIGlmCiAgICAjICRyT3B0c19mcmVlemVfd2hpdGVzcGFjZSBpcyBzZXQuCgogICAgIyBUaGVzZSBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdG8gdGhlIHZlcnRpY2FsIGFsaWduZXIgdG8gaW5kaWNhdGVkCiAgICAjIGlmIHdlIHNob3VsZCBjb21iaW5lIHRoaXMgbGluZSB3aXRoIHRoZSBuZXh0IGxpbmUgdG8gYWNoaWV2ZSB0aGUKICAgICMgZGVzaXJlZCB2ZXJ0aWNhbCB0aWdodG5lc3MuICBUaGlzIHdhcyBwcmV2aW91c2x5IGFuIGFycmF5IGJ1dAogICAgIyBoYXMgYmVlbiBjb252ZXJ0ZWQgdG8gYSBoYXNoOgoKICAgICMgb2xkICAgaGFzaCAgICAgICAgICAgICAgTWVhbmluZwogICAgIyBpbmRleCBrZXkKICAgICMKICAgICMgMCAgIF92dF90eXBlOiAgICAgICAgICAgMT1vcGVuaW5nIG5vbi1ibG9jayAgICAyPWNsb3Npbmcgbm9uLWJsb2NrCiAgICAjICAgICAgICAgICAgICAgICAgICAgICAgIDM9b3BlbmluZyBibG9jayBicmFjZSAgND1jbG9zaW5nIGJsb2NrIGJyYWNlCiAgICAjCiAgICAjIDFhICBfdnRfb3BlbmluZ19mbGFnOiAgIDE9bm8gbXVsdGlwbGUgc3RlcHMsIDI9bXVsdGlwbGUgc3RlcHMgb2sKICAgICMgMWIgIF92dF9jbG9zaW5nX2ZsYWc6ICAgc3BhY2VzIG9mIHBhZGRpbmcgdG8gdXNlIGlmIGNsb3NpbmcKICAgICMgMiAgIF92dF9zZXFubzogICAgICAgICAgc2VxdWVuY2UgbnVtYmVyIG9mIGNvbnRhaW5lcgogICAgIyAzICAgX3Z0X3ZhbGlkIGZsYWc6ICAgICBkbyBub3QgYXBwZW5kIGlmIHRoaXMgZmxhZyBpcyBmYWxzZS4gV2lsbCBiZQogICAgIyAgICAgICAgICAgdHJ1ZSBpZiBhcHByb3ByaWF0ZSAtdnQgZmxhZyBpcyBzZXQuICBPdGhlcndpc2UsIFdpbGwgYmUKICAgICMgICAgICAgICAgIG1hZGUgdHJ1ZSBvbmx5IGZvciAyIGxpbmUgY29udGFpbmVyIGluIHBhcmVucyB3aXRoIC1scAogICAgIyA0ICAgX3Z0X3NlcW5vX2JlZzogICAgICBzZXF1ZW5jZSBudW1iZXIgb2YgZmlyc3QgdG9rZW4gb2YgbGluZQogICAgIyA1ICAgX3Z0X3NlcW5vX2VuZDogICAgICBzZXF1ZW5jZSBudW1iZXIgb2YgbGFzdCB0b2tlbiBvZiBsaW5lCiAgICAjIDYgICBfdnRfbWluX2xpbmVzOiAgICAgIG1pbiBudW1iZXIgb2YgbGluZXMgZm9yIGpvaW5pbmcgb3BlbmluZyBjYWNoZSwKICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAwPW5vIGNvbnN0cmFpbnQKICAgICMgNyAgIF92dF9tYXhfbGluZXM6ICAgICAgbWF4IG51bWJlciBvZiBsaW5lcyBmb3Igam9pbmluZyBvcGVuaW5nIGNhY2hlLAogICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgIDA9bm8gY29uc3RyYWludAoKICAgICMgVGhlIHZlcnRpY2FsIHRpZ2h0bmVzcyBtZWNoYW5pc20gY2FuIGFkZCB3aGl0ZXNwYWNlLCBzbyB3aGl0ZXNwYWNlIGNhbgogICAgIyBjb250aW51YWxseSBpbmNyZWFzZSBpZiB3ZSBhbGxvd2VkIGl0IHdoZW4gdGhlIC1md3MgZmxhZyBpcyBzZXQuCiAgICAjIFNlZSBjYXNlIGI0OTkgZm9yIGFuIGV4YW1wbGUuCgogICAgIyBVc2VzIHRoZXNlIGdsb2JhbCBwYXJhbWV0ZXJzOgogICAgIyAgICRyT3B0c19ibG9ja19icmFjZV90aWdodG5lc3MKICAgICMgICAkck9wdHNfYmxvY2tfYnJhY2VfdmVydGljYWxfdGlnaHRuZXNzCiAgICAjICAgJHJPcHRzX3N0YWNrX2Nsb3NpbmdfYmxvY2tfYnJhY2UKICAgICMgICAkck9wdHNfbGluZV91cF9wYXJlbnRoZXNlcwogICAgIyAgICVvcGVuaW5nX3ZlcnRpY2FsX3RpZ2h0bmVzcwogICAgIyAgICVjbG9zaW5nX3ZlcnRpY2FsX3RpZ2h0bmVzcwogICAgIyAgICVvcGVuaW5nX3Rva2VuX3JpZ2h0CiAgICAjICAgJXN0YWNrX2Nsb3NpbmdfdG9rZW4KICAgICMgICAlc3RhY2tfb3BlbmluZ190b2tlbgoKICAgICMgUHVsbCBvdXQgbmVlZGVkIGJhdGNoIHZhcmlhYmxlcwogICAgbXkgJHRoaXNfYmF0Y2ggPSAkc2VsZi0+W190aGlzX2JhdGNoX107CiAgICBteSAkcmlfZmlyc3QgICA9ICR0aGlzX2JhdGNoLT5bX3JpX2ZpcnN0X107CiAgICBteSAkcmlfbGFzdCAgICA9ICR0aGlzX2JhdGNoLT5bX3JpX2xhc3RfXTsKCiAgICBteSAkbl9sYXN0X2xpbmUgPSBAeyRyaV9maXJzdH0gLSAxOwogICAgaWYgKCAkbmxpbmUgPCAwIHx8ICRubGluZSA+ICRuX2xhc3RfbGluZSApIHsKICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KCJiYWQgbGluZSBpbmRleCAnJG5saW5lJyA7IG1heCBpcyAkbl9sYXN0X2xpbmVcbiIpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIG15ICRpYmVnID0gJHJpX2ZpcnN0LT5bJG5saW5lXTsKICAgIG15ICRpZW5kID0gJHJpX2xhc3QtPlskbmxpbmVdOwoKICAgICMgRGVmaW5lIHRoZXNlIHZhbHVlcyBmb3IgZWFjaCB2ZXJ0aWNhbCB0aWdodG5lc3MgdHlwZToKICAgIG15ICgKCiAgICAgICAgJHZ0X3R5cGUsCiAgICAgICAgJHZ0X29wZW5pbmdfZmxhZywKICAgICAgICAkdnRfY2xvc2luZ19mbGFnLAogICAgICAgICR2dF9zZXFubywKICAgICAgICAkdnRfdmFsaWRfZmxhZywKICAgICAgICAkdnRfbWluX2xpbmVzLAogICAgICAgICR2dF9tYXhfbGluZXMKICAgICk7CgogICAgIyBnZXQgdGhlIHNlcXVlbmNlIG51bWJlcnMgb2YgdGhlIGVuZHMgb2YgdGhpcyBsaW5lCiAgICBteSAkdnRfc2Vxbm9fYmVnID0KICAgICAgICAkdHlwZV9zZXF1ZW5jZV90b19nb1skaWJlZ10gPyAkdHlwZV9zZXF1ZW5jZV90b19nb1skaWJlZ10KICAgICAgOiAkdHlwZXNfdG9fZ29bJGliZWddIGVxICdxJyAgPyAkc2VsZi0+Z2V0X3NlcW5vKCRpYmVnKQogICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORzsKICAgIG15ICR2dF9zZXFub19lbmQgPQogICAgICAgICR0eXBlX3NlcXVlbmNlX3RvX2dvWyRpZW5kXSA/ICR0eXBlX3NlcXVlbmNlX3RvX2dvWyRpZW5kXQogICAgICA6ICR0eXBlc190b19nb1skaWVuZF0gZXEgJ3EnICA/ICRzZWxmLT5nZXRfc2Vxbm8oJGllbmQpCiAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU1QVFlfU1RSSU5HOwoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBWZXJ0aWNhbCBUaWdodG5lc3MgRmxhZ3MgU2VjdGlvbiAxOgogICAgIyBIYW5kbGUgTGluZXMgMSAuLiBuLTEgYnV0IG5vdCB0aGUgbGFzdCBsaW5lCiAgICAjIEZvciBub24tQkxPQ0sgdG9rZW5zLCB3ZSB3aWxsIG5lZWQgdG8gZXhhbWluZSB0aGUgbmV4dCBsaW5lCiAgICAjIHRvbywgc28gd2Ugd29uJ3QgY29uc2lkZXIgdGhlIGxhc3QgbGluZS4KICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgaWYgKCAkbmxpbmUgPCAkbl9sYXN0X2xpbmUgKSB7CgogICAgICAgICMgTk9URTogU2VjdGlvbiAxIGhhcyA0IHN1Yi1zZWN0aW9uczogMWEsIDFiLCAxYywgYW5kIDFkLiAgVGhlIGxvZ2ljIHRvCiAgICAgICAgIyByZWFjaCBhbnkgb2YgdGhlc2UgZW5kIHN0YXRlcyBpcyBjb21wbGV4LCBhbmQgaXQgaXMgcG9zc2libGUgYnV0IHZlcnkKICAgICAgICAjIHVubGlrZWx5IHRoYXQgbW9yZSB0aGFuIG9uZSBvZiB0aGVzZSBlbmQgc3RhdGVzIGNvdWxkIGJlIHJlYWNoZWQuCiAgICAgICAgIyBUaGUgY3VycmVudCBsb2dpYyBpcyB0byBrZWVwIGdvaW5nIGFuZCB1c2UgdGhlIGxhc3Qgc3VjaCBzdGF0ZS4KICAgICAgICAjIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8ga25vd24gaW5zdGFuY2VzIHdoZXJlIG11bHRpcGxlIGVuZCBzdGF0ZXMgY2FuCiAgICAgICAgIyBiZSByZWFjaGVkLCBidXQgaXQgaXMgc29tZXRoaW5nIHRvIGJlIGF3YXJlIG9mIHdoZW4gbWFraW5nIGNoYW5nZXMuCgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgVmVydGljYWwgVGlnaHRuZXNzIEZsYWdzIFNlY3Rpb24gMWE6CiAgICAgICAgIyBMb29rIGZvciBUeXBlIDEsIGxhc3QgdG9rZW4gb2YgdGhpcyBsaW5lIGlzIGEgbm9uLWJsb2NrIG9wZW5pbmcgdG9rZW4KICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBteSAkaWJlZ19uZXh0ID0gJHJpX2ZpcnN0LT5bICRubGluZSArIDEgXTsKICAgICAgICBteSAkdG9rZW5fZW5kID0gJHRva2Vuc190b19nb1skaWVuZF07CiAgICAgICAgbXkgJGllbmRfbmV4dCA9ICRyaV9sYXN0LT5bICRubGluZSArIDEgXTsKCiAgICAgICAgaWYgKAogICAgICAgICAgICAgICAkdHlwZV9zZXF1ZW5jZV90b19nb1skaWVuZF0KICAgICAgICAgICAgJiYgISRibG9ja190eXBlX3RvX2dvWyRpZW5kXQogICAgICAgICAgICAmJiAkaXNfb3BlbmluZ190b2tlbnskdG9rZW5fZW5kfQogICAgICAgICAgICAmJiAoCiAgICAgICAgICAgICAgICAkb3BlbmluZ192ZXJ0aWNhbF90aWdodG5lc3N7JHRva2VuX2VuZH0gPiAwCgogICAgICAgICAgICAgICAgIyBhbGxvdyAyLWxpbmUgbWV0aG9kIGNhbGwgdG8gYmUgY2xvc2VkIHVwCiAgICAgICAgICAgICAgICB8fCAoICAgJHJPcHRzX2xpbmVfdXBfcGFyZW50aGVzZXMKICAgICAgICAgICAgICAgICAgICAmJiAkdG9rZW5fZW5kIGVxICcoJwogICAgICAgICAgICAgICAgICAgICYmICRzZWxmLT5bX3JscF9vYmplY3RfYnlfc2Vxbm9fXQogICAgICAgICAgICAgICAgICAgIC0+eyAkdHlwZV9zZXF1ZW5jZV90b19nb1skaWVuZF0gfQogICAgICAgICAgICAgICAgICAgICYmICRpZW5kID4gJGliZWcKICAgICAgICAgICAgICAgICAgICAmJiAkdHlwZXNfdG9fZ29bICRpZW5kIC0gMSBdIG5lICdiJyApCiAgICAgICAgICAgICkKICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICMgYXZvaWQgbXVsdGlwbGUganVtcHMgaW4gbmVzdGluZyBkZXB0aCBpbiBvbmUgbGluZSBpZgogICAgICAgICAgICAjIHJlcXVlc3RlZAogICAgICAgICAgICBteSAkb3Z0ID0gJG9wZW5pbmdfdmVydGljYWxfdGlnaHRuZXNzeyR0b2tlbl9lbmR9OwoKICAgICAgICAgICAgIyBpZiB3ZSBhcmUgaW4gLWxwIGFuZCB0aGUgbmV4dCBsaW5lIGVuZHMgaW4gYSB3ZWxkLi4KICAgICAgICAgICAgaWYgKCAgICRyT3B0c19saW5lX3VwX3BhcmVudGhlc2VzCiAgICAgICAgICAgICAgICAmJiAkc2VsZi0+W19yS193ZWxkX2xlZnRfXS0+eyAkS190b19nb1skaWVuZF9uZXh0XSB9ICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbXkgJHR5cGVfZW5kX25leHQgPSAkdHlwZXNfdG9fZ29bJGllbmRfbmV4dF07CgogICAgICAgICAgICAgICAgIyBUdXJuIG9mZiAtdnQgaWYgdGhlIG5leHQgbGluZSBlbmRzIGluIGEgY2xvc2luZyB0b2tlbi4gVGhpcwogICAgICAgICAgICAgICAgIyBhdm9pZHMgYW4gaW5zdGFiaWxpdHkgd2l0aCBvbmUtbGluZSB3ZWxkcyAoYjExODMpLgogICAgICAgICAgICAgICAgaWYgKCAkaXNfY2xvc2luZ190eXBleyR0eXBlX2VuZF9uZXh0fSApIHsKICAgICAgICAgICAgICAgICAgICAkb3Z0ID0gMDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIFR1cm4gb2ZmIC12dCBpZiB0aGUgbmV4dCBsaW5lIGVuZHMgaW4gYW4gb3BlbmluZyB0b2tlbi4gVGhpcwogICAgICAgICAgICAgICAgIyBhdm9pZHMgYW4gaW5zdGFiaWxpdHkgKGIxNDYwKS4KICAgICAgICAgICAgICAgIGVsc2lmICggJGlzX29wZW5pbmdfdHlwZXskdHlwZV9lbmRfbmV4dH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJG92dCA9IDA7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBuZWl0aGVyIG9wZW5pbmcgbm9yIGNsb3NpbmcKICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFRoZSBmbGFnICdfcmJyZWFrX2NvbnRhaW5lcl8nIGF2b2lkcyBjb25mbGljdCBvZiAtYm9tIGFuZCAtcHQ9MQogICAgICAgICAgICAjIG9yIC1wdD0yOyBmaXhlcyBiMTI3MC4gU2VlIHNpbWlsYXIgcGF0Y2ggYWJvdmUgZm9yICRjdnQuCiAgICAgICAgICAgIG15ICRzZXFubyA9ICR0eXBlX3NlcXVlbmNlX3RvX2dvWyRpZW5kXTsKICAgICAgICAgICAgaWYgKCAgICRvdnQKICAgICAgICAgICAgICAgICYmICRzZXFubwogICAgICAgICAgICAgICAgJiYgJHNlbGYtPltfcmJyZWFrX2NvbnRhaW5lcl9dLT57JHNlcW5vfSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRvdnQgPSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFRoZSBmbGFnICdfcm1heF92ZXJ0aWNhbF90aWdodG5lc3NfJyBhdm9pZHMgd2VsZGluZyBjb25mbGljdHMuCiAgICAgICAgICAgIGlmICggZGVmaW5lZCggJHNlbGYtPltfcm1heF92ZXJ0aWNhbF90aWdodG5lc3NfXS0+eyRzZXFub30gKSApIHsKICAgICAgICAgICAgICAgICRvdnQgPQogICAgICAgICAgICAgICAgICBtaW4oICRvdnQsICRzZWxmLT5bX3JtYXhfdmVydGljYWxfdGlnaHRuZXNzX10tPnskc2Vxbm99ICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRvdnQgPj0gMgogICAgICAgICAgICAgICAgfHwgKCAkbmVzdGluZ19kZXB0aF90b19nb1sgJGllbmRfbmV4dCArIDEgXSA9PQogICAgICAgICAgICAgICAgICAgICRuZXN0aW5nX2RlcHRoX3RvX2dvWyRpYmVnX25leHRdICkKICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIElmIC12dCBmbGFnIGhhcyBub3QgYmVlbiBzZXQsIG1hcmsgdGhpcyBhcyBpbnZhbGlkCiAgICAgICAgICAgICAgICAjIGFuZCBhbGlnbmVyIHdpbGwgdmFsaWRhdGUgaXQgaWYgaXQgc2VlcyB0aGUgY2xvc2luZyBwYXJlbgogICAgICAgICAgICAgICAgIyB3aXRoaW4gMiBsaW5lcy4KICAgICAgICAgICAgICAgIG15ICR2YWxpZF9mbGFnID0gJG92dDsKCiAgICAgICAgICAgICAgICAkdnRfdHlwZSAgICAgICAgID0gMTsKICAgICAgICAgICAgICAgICR2dF9vcGVuaW5nX2ZsYWcgPSAkb3Z0OwogICAgICAgICAgICAgICAgJHZ0X2Nsb3NpbmdfZmxhZyA9IDA7CiAgICAgICAgICAgICAgICAkdnRfc2Vxbm8gICAgICAgID0gJHR5cGVfc2VxdWVuY2VfdG9fZ29bJGllbmRdOwogICAgICAgICAgICAgICAgJHZ0X3ZhbGlkX2ZsYWcgICA9ICR2YWxpZF9mbGFnOwogICAgICAgICAgICAgICAgJHZ0X21pbl9saW5lcyAgICA9IDA7CiAgICAgICAgICAgICAgICAkdnRfbWF4X2xpbmVzICAgID0gMDsKCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgVmVydGljYWwgVGlnaHRuZXNzIEZsYWdzIFNlY3Rpb24gMWI6CiAgICAgICAgIyBMb29rIGZvciBUeXBlIDIsIGZpcnN0IHRva2VuIG9mIG5leHQgbGluZSBpcyBhIG5vbi1ibG9jayBjbG9zaW5nCiAgICAgICAgIyB0b2tlbiAuLiBhbmQgYmUgc3VyZSB0aGlzIGxpbmUgZG9lcyBub3QgaGF2ZSBhIHNpZGUgY29tbWVudAogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIG15ICR0b2tlbl9uZXh0ID0gJHRva2Vuc190b19nb1skaWJlZ19uZXh0XTsKICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICR0eXBlX3NlcXVlbmNlX3RvX2dvWyRpYmVnX25leHRdCiAgICAgICAgICAgICYmICEkYmxvY2tfdHlwZV90b19nb1skaWJlZ19uZXh0XQogICAgICAgICAgICAmJiAkaXNfY2xvc2luZ190b2tlbnskdG9rZW5fbmV4dH0KICAgICAgICAgICAgJiYgISRzZWxmLT5bX3JicmVha19jb250YWluZXJfXQogICAgICAgICAgICAtPnsgJHR5cGVfc2VxdWVuY2VfdG9fZ29bJGliZWdfbmV4dF0gfSAgICAjIGIxNDk4CiAgICAgICAgICAgICYmICR0eXBlc190b19nb1skaWVuZF0gbmUgJyMnCiAgICAgICAgICApICAgICMgZm9yIHNhZmV0eSwgc2hvdWxkbid0IGhhcHBlbiEKICAgICAgICB7CiAgICAgICAgICAgIG15ICRjdnQgICA9ICRjbG9zaW5nX3ZlcnRpY2FsX3RpZ2h0bmVzc3skdG9rZW5fbmV4dH07CiAgICAgICAgICAgIG15ICRzZXFubyA9ICR0eXBlX3NlcXVlbmNlX3RvX2dvWyRpYmVnX25leHRdOwoKICAgICAgICAgICAgIyBBdm9pZCBjb25mbGljdCBvZiAtYm9tIGFuZCAtcHZ0PTEgb3IgLXB2dD0yLCBmaXhlcyBiOTc3LCBiMTMwMwogICAgICAgICAgICAjIFNlZSBzaW1pbGFyIHBhdGNoIGFib3ZlIGZvciAkb3Z0LgogICAgICAgICAgICAjIE5PVEU6IHRoaXMgaXMgb3ZlcnJpZGVuIGJ5IGZpeCBmb3IgYjE0OTggYWJvdmUgYW5kIGNhbgogICAgICAgICAgICAjIGV2ZW50dWFsbHkgYmUgcmVtb3ZlZC4KICAgICAgICAgICAgaWYgKCAwICYmICRjdnQgJiYgJHNlbGYtPltfcmJyZWFrX2NvbnRhaW5lcl9dLT57JHNlcW5vfSApIHsKICAgICAgICAgICAgICAgICRjdnQgPSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIEltcGxlbWVudCBjdnQ9MzogbGlrZSBjdnQ9MCBmb3IgYXNzaWduZWQgc3RydWN0dXJlcywgbGlrZSBjdnQ9MQogICAgICAgICAgICAjIG90aGVyd2lzZS4gIEFkZGVkIGZvciBydDEzNjQxNy4KICAgICAgICAgICAgaWYgKCAkY3Z0ID09IDMgKSB7CiAgICAgICAgICAgICAgICAkY3Z0ID0gJHNlbGYtPltfcmlzX2Fzc2lnbmVkX3N0cnVjdHVyZV9dLT57JHNlcW5vfSA/IDAgOiAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFRoZSB1bnVzdWFsIGNvbWJpbmF0aW9uIC1wdnRjPTIgLWR3cyAtbmF3cyBjYW4gYmUgdW5zdGFibGUuCiAgICAgICAgICAgICMgVGhpcyBmaXhlcyBiMTI4MiwgYjEyODMuICBUaGlzIGNhbiBiZSBtb3ZlZCB0byBzZXRfb3B0aW9ucy4KICAgICAgICAgICAgaWYgKCAgICRjdnQgPT0gMgogICAgICAgICAgICAgICAgJiYgJHJPcHRzX2RlbGV0ZV9vbGRfd2hpdGVzcGFjZQogICAgICAgICAgICAgICAgJiYgISRyT3B0c19hZGRfd2hpdGVzcGFjZSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRjdnQgPSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIEZpeCBmb3IgYjEzNzksIGIxMzgwLCBiMTM4MSwgYjEzODIsIGIxMzg0IHBhcnQgMiwKICAgICAgICAgICAgIyBpbnN0YWJpbGl0eSB3aXRoIGFkZGluZyBhbmQgZGVsZXRpbmcgdHJhaWxpbmcgY29tbWFzOgogICAgICAgICAgICAjIFJlZHVjaW5nIC1jdnQ9MiB0byA9MSBmaXhlcyBzdGFiaWxpdHkgZm9yIC13dGM9YiBpbiBiMTM3OSwxMzgwLgogICAgICAgICAgICAjIFJlZHVjaW5nIC1jdnQ+MCB0byA9MCBmaXhlcyBzdGFiaWxpdHkgZm9yIC13dGM9YiBpbiBiMTM4MSwxMzgyLgogICAgICAgICAgICAjIFJlZHVjaW5nIC1jdnQ+MCB0byA9MCBmaXhlcyBzdGFiaWxpdHkgZm9yIC13dGM9bSBpbiBiMTM4NAogICAgICAgICAgICBpZiAoICAgJGN2dAogICAgICAgICAgICAgICAgJiYgJHNlbGYtPltfcmlzX2JhcmVfdHJhaWxpbmdfY29tbWFfYnlfc2Vxbm9fXS0+eyRzZXFub30gKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkY3Z0ID0gMDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKAoKICAgICAgICAgICAgICAgICMgTmV2ZXIgYXBwZW5kIGEgdHJhaWxpbmcgbGluZSBsaWtlICAgJyktPnBhY2soJyBiZWNhdXNlIGl0CiAgICAgICAgICAgICAgICAjIHdpbGwgdGhyb3cgb2ZmIGxhdGVyIGFsaWdubWVudC4gIFNvIHRoaXMgbGluZSBtdXN0IHN0YXJ0IGF0IGEKICAgICAgICAgICAgICAgICMgZGVlcGVyIGxldmVsIHRoYW4gdGhlIG5leHQgbGluZSAoZml4MSBmb3Igd2VsZGluZywgZ2l0ICM0NSkuCiAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgJG5lc3RpbmdfZGVwdGhfdG9fZ29bJGliZWdfbmV4dF0gPj0KICAgICAgICAgICAgICAgICAgICAkbmVzdGluZ19kZXB0aF90b19nb1sgJGllbmRfbmV4dCArIDEgXSArIDEKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICYmICgKICAgICAgICAgICAgICAgICAgICAkY3Z0ID09IDIKICAgICAgICAgICAgICAgICAgICB8fCAoCiAgICAgICAgICAgICAgICAgICAgICAgICEkc2VsZi0+aXNfaW5fbGlzdF9ieV9pKCRpYmVnX25leHQpCiAgICAgICAgICAgICAgICAgICAgICAgICYmICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjdnQgPT0gMQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWxsb3cgY2xvc2luZyB1cCAyLWxpbmUgbWV0aG9kIGNhbGxzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoICAgJHJPcHRzX2xpbmVfdXBfcGFyZW50aGVzZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkdG9rZW5fbmV4dCBlcSAnKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkdHlwZV9zZXF1ZW5jZV90b19nb1skaWJlZ19uZXh0XQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRzZWxmLT5bX3JscF9vYmplY3RfYnlfc2Vxbm9fXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+eyAkdHlwZV9zZXF1ZW5jZV90b19nb1skaWJlZ19uZXh0XSB9ICkKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIGRlY2lkZSB3aGljaCB0cmFpbGluZyBjbG9zaW5nIHRva2VucyB0byBhcHBlbmQuLgogICAgICAgICAgICAgICAgbXkgJG9rID0gMDsKICAgICAgICAgICAgICAgIGlmICggJGN2dCA9PSAyIHx8ICRpZW5kX25leHQgPT0gJGliZWdfbmV4dCApIHsgJG9rID0gMSB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBteSAkc3RyID0gam9pbiggRU1QVFlfU1RSSU5HLAogICAgICAgICAgICAgICAgICAgICAgICBAdHlwZXNfdG9fZ29bICRpYmVnX25leHQgKyAxIC4uICRpYmVnX25leHQgKyAyIF0gKTsKCiAgICAgICAgICAgICAgICAgICAgIyBhcHBlbmQgY2xvc2luZyB0b2tlbiBpZiBmb2xsb3dlZCBieSBjb21tZW50IG9yICc7JwogICAgICAgICAgICAgICAgICAgICMgb3IgYW5vdGhlciBjbG9zaW5nIHRva2VuIChmaXgyIGZvciB3ZWxkaW5nLCBnaXQgIzQ1KQogICAgICAgICAgICAgICAgICAgIGlmICggJHN0ciA9fiAvXmI/W1wpXF1cfVIjO10vICkgeyAkb2sgPSAxIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJG9rKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJHZhbGlkX2ZsYWcgPSAkY3Z0OwogICAgICAgICAgICAgICAgICAgIG15ICRtaW5fbGluZXMgID0gMDsKICAgICAgICAgICAgICAgICAgICBteSAkbWF4X2xpbmVzICA9IDA7CgogICAgICAgICAgICAgICAgICAgICMgRml4IGZvciBiMTE4NyBhbmQgYjExODg6IEJsaW5raW5nIGNhbiBvY2N1ciBpZiB3ZSBhbGxvdwogICAgICAgICAgICAgICAgICAgICMgd2VsZGVkIHRva2VucyB0byByZS1mb3JtIGludG8gb25lLWxpbmUgYmxvY2tzIGR1cmluZwogICAgICAgICAgICAgICAgICAgICMgdmVydGljYWwgYWxpZ25tZW50IHdoZW4gLWxwIHVzZWQuICBTbyBmb3IgdGhpcyBjYXNlIHdlCiAgICAgICAgICAgICAgICAgICAgIyBzZXQgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGxpbmVzIHRvIGJlIDEgaW5zdGVhZCBvZiAwLgogICAgICAgICAgICAgICAgICAgICMgVGhlIG1heGltdW0gc2hvdWxkIGJlIDEgaWYgLXZ0YyBpcyBub3QgdXNlZC4gIElmIC12dGMgaXMKICAgICAgICAgICAgICAgICAgICAjIHVzZWQsIHdlIHR1cm4gdGhlIHZhbGlkCiAgICAgICAgICAgICAgICAgICAgIyBmbGFnIG9mZiBhbmQgc2V0IHRoZSBtYXhpbXVtIHRvIDAuIFRoaXMgaXMgZXF1aXZhbGVudCB0bwogICAgICAgICAgICAgICAgICAgICMgdXNpbmcgYSBsYXJnZSBudW1iZXIuCiAgICAgICAgICAgICAgICAgICAgbXkgJHNlcW5vX2liZWdfbmV4dCA9ICR0eXBlX3NlcXVlbmNlX3RvX2dvWyRpYmVnX25leHRdOwogICAgICAgICAgICAgICAgICAgIGlmICggICAkck9wdHNfbGluZV91cF9wYXJlbnRoZXNlcwogICAgICAgICAgICAgICAgICAgICAgICAmJiAkdG90YWxfd2VsZF9jb3VudAogICAgICAgICAgICAgICAgICAgICAgICAmJiAkc2Vxbm9faWJlZ19uZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICYmICRzZWxmLT5bX3JscF9vYmplY3RfYnlfc2Vxbm9fXS0+eyRzZXFub19pYmVnX25leHR9CiAgICAgICAgICAgICAgICAgICAgICAgICYmICRzZWxmLT5pc193ZWxkZWRfYXRfc2Vxbm8oJHNlcW5vX2liZWdfbmV4dCkgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG1pbl9saW5lcyAgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAkbWF4X2xpbmVzICA9ICRjdnQgPyAwIDogMTsKICAgICAgICAgICAgICAgICAgICAgICAgJHZhbGlkX2ZsYWcgPSAwOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJHZ0X3R5cGUgICAgICAgICA9IDI7CiAgICAgICAgICAgICAgICAgICAgJHZ0X29wZW5pbmdfZmxhZyA9IDA7CiAgICAgICAgICAgICAgICAgICAgJHZ0X2Nsb3NpbmdfZmxhZyA9ICR0aWdodG5lc3N7JHRva2VuX25leHR9ID09IDIgPyAwIDogMTsKICAgICAgICAgICAgICAgICAgICAkdnRfc2Vxbm8gICAgICAgID0gJHR5cGVfc2VxdWVuY2VfdG9fZ29bJGliZWdfbmV4dF07CiAgICAgICAgICAgICAgICAgICAgJHZ0X3ZhbGlkX2ZsYWcgICA9ICR2YWxpZF9mbGFnOwogICAgICAgICAgICAgICAgICAgICR2dF9taW5fbGluZXMgICAgPSAkbWluX2xpbmVzOwogICAgICAgICAgICAgICAgICAgICR2dF9tYXhfbGluZXMgICAgPSAkbWF4X2xpbmVzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIFZlcnRpY2FsIFRpZ2h0bmVzcyBGbGFncyBTZWN0aW9uIDFjOgogICAgICAgICMgSW1wbGVtZW50IHRoZSBPcGVuaW5nIFRva2VuIFJpZ2h0IGZsYWcgKFR5cGUgMikuLgogICAgICAgICMgSWYgcmVxdWVzdGVkLCBtb3ZlIGFuIGlzb2xhdGVkIHRyYWlsaW5nIG9wZW5pbmcgdG9rZW4gdG8gdGhlIGVuZCBvZgogICAgICAgICMgdGhlIHByZXZpb3VzIGxpbmUgd2hpY2ggZW5kZWQgaW4gYSBjb21tYS4gIFdlIGNvdWxkIGRvIHRoaXMKICAgICAgICAjIGluIHN1YiByZWNvbWJpbmVfYnJlYWtwb2ludHMgYnV0IHRoYXQgd291bGQgY2F1c2UgcHJvYmxlbXMKICAgICAgICAjIHdpdGggLWxwIGZvcm1hdHRpbmcuICBUaGUgcHJvYmxlbSBpcyB0aGF0IGluZGVudGF0aW9uIHdpbGwKICAgICAgICAjIHF1aWNrbHkgbW92ZSBmYXIgdG8gdGhlIHJpZ2h0IGluIG5lc3RlZCBleHByZXNzaW9ucy4gIEJ5CiAgICAgICAgIyBkb2luZyBpdCBhZnRlciBpbmRlbnRhdGlvbiBoYXMgYmVlbiBzZXQsIHdlIGF2b2lkIGNoYW5nZXMKICAgICAgICAjIHRvIHRoZSBpbmRlbnRhdGlvbi4gIEFjdHVhbCBtb3ZlbWVudCBvZiB0aGUgdG9rZW4gdGFrZXMgcGxhY2UKICAgICAgICAjIGluIHN1YiB2YWxpZ25fb3V0cHV0X3N0ZXBfQi4KCiAgICAgICAgIyBOb3RlIGFkZGVkIDQgTWF5IDIwMjE6IHRoZSBtYW4gcGFnZSBzdWdnZXN0cyB0aGF0IHRoZSAtb3RyIGZsYWdzCiAgICAgICAgIyBhcmUgbWFpbmx5IGZvciBvcGVuaW5nIHRva2VucyBmb2xsb3dpbmcgY29tbWFzLiAgQnV0IHRoaXMgc2VlbXMKICAgICAgICAjIHRvIGhhdmUgYmVlbiBnZW5lcmFsaXplZCBsb25nIGFnbyB0byBpbmNsdWRlIG90aGVyIHNpdHVhdGlvbnMuCiAgICAgICAgIyBJIGNoZWNrZWQgdGhlIGNvZGluZyBiYWNrIHRvIDIwMTIgYW5kIGl0IGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lCiAgICAgICAgIyBhcyBoZXJlLCBzbyBpdCBpcyBiZXN0IHRvIGxlYXZlIHRoaXMgdW5jaGFuZ2VkIGZvciBub3cuCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgaWYgKAogICAgICAgICAgICAkb3BlbmluZ190b2tlbl9yaWdodHsgJHRva2Vuc190b19nb1skaWJlZ19uZXh0XSB9CgogICAgICAgICAgICAjIHByZXZpb3VzIGxpbmUgaXMgbm90IG9wZW5pbmcKICAgICAgICAgICAgIyAodXNlIC1zb3QgdG8gY29tYmluZSB3aXRoIGl0KQogICAgICAgICAgICAmJiAhJGlzX29wZW5pbmdfdG9rZW57JHRva2VuX2VuZH0KCiAgICAgICAgICAgICMgcHJldmlvdXMgbGluZSBlbmRlZCBpbiBvbmUgb2YgdGhlc2UKICAgICAgICAgICAgIyAoYWRkIG90aGVyIGNhc2VzIGlmIG5lY2Vzc2FyeTsgJz0+JyBhbmQgJy4nIGFyZSBub3QgbmVjZXNzYXJ5CiAgICAgICAgICAgICYmICEkYmxvY2tfdHlwZV90b19nb1skaWJlZ19uZXh0XQoKICAgICAgICAgICAgIyB0aGlzIGlzIGEgbGluZSB3aXRoIGp1c3QgYW4gb3BlbmluZyB0b2tlbgogICAgICAgICAgICAmJiAoICAgJGllbmRfbmV4dCA9PSAkaWJlZ19uZXh0CiAgICAgICAgICAgICAgICB8fCAkaWVuZF9uZXh0ID09ICRpYmVnX25leHQgKyAyCiAgICAgICAgICAgICAgICAmJiAkdHlwZXNfdG9fZ29bJGllbmRfbmV4dF0gZXEgJyMnICkKCiAgICAgICAgICAgICMgRml4IGZvciBjYXNlIGIxMDYwIHdoZW4gYm90aCAtYmFvbyBhbmQgLW90ciBhcmUgc2V0OgogICAgICAgICAgICAjIHRvIGF2b2lkIGJsaW5raW5nLCBob25vciB0aGUgLWJhb28gZmxhZyBvdmVyIHRoZSAtb3RyIGZsYWcuCiAgICAgICAgICAgICMgYjE0OTkgYWRkZWQgPyBhbmQgOiBmb3Igc2FtZSByZWFzb24KICAgICAgICAgICAgIyMmJiAkdG9rZW5fZW5kIG5lICd8fCcgJiYgJHRva2VuX2VuZCBuZSAnJiYnCiAgICAgICAgICAgICYmICEkaXNfdW5jb3ZlcmVkX29wZXJhdG9yeyR0b2tlbl9lbmR9CgogICAgICAgICAgICAjIEtlZXAgYnJlYWsgYWZ0ZXIgJz0nIGlmIC1scC4gRml4ZXMgYjk2NCBiMTA0MCBiMTA2MiBiMTA4MyBiMTA4OS4KICAgICAgICAgICAgIyBHZW5lcmFsaXplZCBmcm9tICc9JyB0byAkaXNfYXNzaWdubWVudCB0byBmaXggYjEzNzUuCiAgICAgICAgICAgICYmICEoCiAgICAgICAgICAgICAgICAgICAkaXNfYXNzaWdubWVudHsgJHR5cGVzX3RvX2dvWyRpZW5kXSB9CiAgICAgICAgICAgICAgICAmJiAkck9wdHNfbGluZV91cF9wYXJlbnRoZXNlcwogICAgICAgICAgICAgICAgJiYgJHR5cGVfc2VxdWVuY2VfdG9fZ29bJGliZWdfbmV4dF0KICAgICAgICAgICAgICAgICYmICRzZWxmLT5bX3JscF9vYmplY3RfYnlfc2Vxbm9fXQogICAgICAgICAgICAgICAgLT57ICR0eXBlX3NlcXVlbmNlX3RvX2dvWyRpYmVnX25leHRdIH0KICAgICAgICAgICAgKQoKICAgICAgICAgICAgIyBsb29rcyBiYWQgaWYgd2UgYWxpZ24gdmVydGljYWxseSB3aXRoIHRoZSB3cm9uZyBjb250YWluZXIKICAgICAgICAgICAgJiYgJHRva2Vuc190b19nb1skaWJlZ10gbmUgJHRva2Vuc190b19nb1skaWJlZ19uZXh0XQoKICAgICAgICAgICAgIyBnaXZlIC1rYmEgcHJpb3JpdHkgb3ZlciAtb3RyIChiMTQ0NSkKICAgICAgICAgICAgJiYgISRzZWxmLT5bX3JicmVha19hZnRlcl9LbGFzdF9dLT57ICRLX3RvX2dvWyRpZW5kXSB9CgogICAgICAgICAgICAjIEZpeCBiMTQ2MiwgYjE0NjM6IGF2b2lkIHBvc3NpYmxlIGVkZ2UgaW5zdGFiaWxpdHkgd2l0aAogICAgICAgICAgICAjIHRoZSBjb21iaW5hdGlvbiAteGxwIGFuZCAtZHdzCiAgICAgICAgICAgICYmICEoCiAgICAgICAgICAgICAgICAgICAkck9wdHNfZXh0ZW5kZWRfbGluZV91cF9wYXJlbnRoZXNlcwogICAgICAgICAgICAgICAgJiYgJHJPcHRzX2RlbGV0ZV9vbGRfd2hpdGVzcGFjZQogICAgICAgICAgICApCiAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBteSAkc3BhY2VzID0gKCAkdHlwZXNfdG9fZ29bICRpYmVnX25leHQgLSAxIF0gZXEgJ2InICkgPyAxIDogMDsKCiAgICAgICAgICAgICR2dF90eXBlICAgICAgICAgPSAyOwogICAgICAgICAgICAkdnRfb3BlbmluZ19mbGFnID0gMDsKICAgICAgICAgICAgJHZ0X2Nsb3NpbmdfZmxhZyA9ICRzcGFjZXM7CiAgICAgICAgICAgICR2dF9zZXFubyAgICAgICAgPSAkdHlwZV9zZXF1ZW5jZV90b19nb1skaWJlZ19uZXh0XTsKICAgICAgICAgICAgJHZ0X3ZhbGlkX2ZsYWcgICA9IDE7CiAgICAgICAgICAgICR2dF9taW5fbGluZXMgICAgPSAwOwogICAgICAgICAgICAkdnRfbWF4X2xpbmVzICAgID0gMDsKICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgVmVydGljYWwgVGlnaHRuZXNzIEZsYWdzIFNlY3Rpb24gMWQ6CiAgICAgICAgIyBTdGFja2luZyBvZiBvcGVuaW5nIGFuZCBjbG9zaW5nIHRva2VucyAoVHlwZSAyKQogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIG15ICRzdGFja2FibGU7CiAgICAgICAgbXkgJHRva2VuX2JlZ19uZXh0ID0gJHRva2Vuc190b19nb1skaWJlZ19uZXh0XTsKCiAgICAgICAgIyBwYXRjaCB0byBtYWtlIHNvbWV0aGluZyBsaWtlICdxdygnIGJlaGF2ZSBsaWtlIGFuIG9wZW5pbmcgcGFyZW4KICAgICAgICAjIChhcmFuLnQpCiAgICAgICAgaWYgKCAkdHlwZXNfdG9fZ29bJGliZWdfbmV4dF0gZXEgJ3EnICkgewogICAgICAgICAgICBpZiAoICR0b2tlbl9iZWdfbmV4dCA9fiAvXnF3XHMqKFtcW1woXHtdKSQvICkgewogICAgICAgICAgICAgICAgJHRva2VuX2JlZ19uZXh0ID0gJDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICggICAkaXNfY2xvc2luZ190b2tlbnskdG9rZW5fZW5kfQogICAgICAgICAgICAmJiAkaXNfY2xvc2luZ190b2tlbnskdG9rZW5fYmVnX25leHR9ICkKICAgICAgICB7CgogICAgICAgICAgICAjIGF2b2lkIGluc3RhYmlsaXR5IG9mIGNvbWJvIC1ib20gYW5kIC1zY3Q7IGIxMTc5CiAgICAgICAgICAgIG15ICRzZXFfbmV4dCA9ICR0eXBlX3NlcXVlbmNlX3RvX2dvWyRpYmVnX25leHRdOwogICAgICAgICAgICBteSAkYm9tID0gJHNlcV9uZXh0ICYmICRzZWxmLT5bX3JicmVha19jb250YWluZXJfXS0+eyRzZXFfbmV4dH07CiAgICAgICAgICAgICRzdGFja2FibGUgPSAkc3RhY2tfY2xvc2luZ190b2tlbnskdG9rZW5fYmVnX25leHR9CiAgICAgICAgICAgICAgdW5sZXNzICggJGJsb2NrX3R5cGVfdG9fZ29bJGliZWdfbmV4dF0gfHwgJGJvbSApOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoJGlzX29wZW5pbmdfdG9rZW57JHRva2VuX2VuZH0KICAgICAgICAgICAgJiYgJGlzX29wZW5pbmdfdG9rZW57JHRva2VuX2JlZ19uZXh0fSApCiAgICAgICAgewogICAgICAgICAgICAkc3RhY2thYmxlID0gJHN0YWNrX29wZW5pbmdfdG9rZW57JHRva2VuX2JlZ19uZXh0fQogICAgICAgICAgICAgIHVubGVzcyAoICRibG9ja190eXBlX3RvX2dvWyRpYmVnX25leHRdICk7ICAgICMgc2hvdWxkbid0IGhhcHBlbgogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIyMgbm90IHN0YWNrYWJsZQogICAgICAgIH0KCiAgICAgICAgaWYgKCRzdGFja2FibGUpIHsKCiAgICAgICAgICAgIG15ICRpc19zZW1pY29sb25fdGVybWluYXRlZDsKICAgICAgICAgICAgaWYgKCAkbmxpbmUgKyAxID09ICRuX2xhc3RfbGluZSApIHsKICAgICAgICAgICAgICAgIG15ICR0ZXJtaW5hbF90eXBlID0gdGVybWluYWxfdHlwZV9pKCAkaWJlZ19uZXh0LCAkaWVuZF9uZXh0ICk7CiAgICAgICAgICAgICAgICAkaXNfc2VtaWNvbG9uX3Rlcm1pbmF0ZWQgPSAkdGVybWluYWxfdHlwZSBlcSAnOycKICAgICAgICAgICAgICAgICAgJiYgJG5lc3RpbmdfZGVwdGhfdG9fZ29bJGllbmRfbmV4dF0gPAogICAgICAgICAgICAgICAgICAkbmVzdGluZ19kZXB0aF90b19nb1skaWJlZ19uZXh0XTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyB0aGlzIG11c3QgYmUgYSBsaW5lIHdpdGgganVzdCBhbiBvcGVuaW5nIHRva2VuCiAgICAgICAgICAgICMgb3IgZW5kIGluIGEgc2VtaWNvbG9uCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRpc19zZW1pY29sb25fdGVybWluYXRlZAogICAgICAgICAgICAgICAgfHwgKCAgICRpZW5kX25leHQgPT0gJGliZWdfbmV4dAogICAgICAgICAgICAgICAgICAgIHx8ICRpZW5kX25leHQgPT0gJGliZWdfbmV4dCArIDIKICAgICAgICAgICAgICAgICAgICAmJiAkdHlwZXNfdG9fZ29bJGllbmRfbmV4dF0gZXEgJyMnICkKICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG15ICRzcGFjZXMgPSAoICR0eXBlc190b19nb1sgJGliZWdfbmV4dCAtIDEgXSBlcSAnYicgKSA/IDEgOiAwOwoKICAgICAgICAgICAgICAgICR2dF90eXBlICAgICAgICAgPSAyOwogICAgICAgICAgICAgICAgJHZ0X29wZW5pbmdfZmxhZyA9IDA7CiAgICAgICAgICAgICAgICAkdnRfY2xvc2luZ19mbGFnID0gJHNwYWNlczsKICAgICAgICAgICAgICAgICR2dF9zZXFubyAgICAgICAgPSAkdHlwZV9zZXF1ZW5jZV90b19nb1skaWJlZ19uZXh0XTsKICAgICAgICAgICAgICAgICR2dF92YWxpZF9mbGFnICAgPSAxOwogICAgICAgICAgICAgICAgJHZ0X21pbl9saW5lcyAgICA9IDA7CiAgICAgICAgICAgICAgICAkdnRfbWF4X2xpbmVzICAgID0gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgVmVydGljYWwgVGlnaHRuZXNzIEZsYWdzIFNlY3Rpb24gMjoKICAgICMgSGFuZGxlIHR5cGUgMywgb3BlbmluZyBibG9jayBicmFjZXMgb24gbGFzdCBsaW5lIG9mIHRoZSBiYXRjaAogICAgIyBDaGVjayBmb3IgYSBsYXN0IGxpbmUgd2l0aCBpc29sYXRlZCBvcGVuaW5nIEJMT0NLIGN1cmx5CiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGVsc2lmICgkck9wdHNfYmxvY2tfYnJhY2VfdmVydGljYWxfdGlnaHRuZXNzCiAgICAgICAgJiYgJGliZWcgZXEgJGllbmQKICAgICAgICAmJiAkdHlwZXNfdG9fZ29bJGllbmRdIGVxICd7JwogICAgICAgICYmICRibG9ja190eXBlX3RvX2dvWyRpZW5kXQogICAgICAgICYmICRibG9ja190eXBlX3RvX2dvWyRpZW5kXSA9fgogICAgICAgIC8kYmxvY2tfYnJhY2VfdmVydGljYWxfdGlnaHRuZXNzX3BhdHRlcm4vICkKICAgIHsKICAgICAgICAkdnRfdHlwZSAgICAgICAgID0gMzsKICAgICAgICAkdnRfb3BlbmluZ19mbGFnID0gJHJPcHRzX2Jsb2NrX2JyYWNlX3ZlcnRpY2FsX3RpZ2h0bmVzczsKICAgICAgICAkdnRfY2xvc2luZ19mbGFnID0gMDsKICAgICAgICAkdnRfc2Vxbm8gICAgICAgID0gMDsKICAgICAgICAkdnRfdmFsaWRfZmxhZyAgID0gMTsKICAgICAgICAkdnRfbWluX2xpbmVzICAgID0gMDsKICAgICAgICAkdnRfbWF4X2xpbmVzICAgID0gMDsKICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgVmVydGljYWwgVGlnaHRuZXNzIEZsYWdzIFNlY3Rpb24gMzoKICAgICMgSGFuZGxlIHR5cGUgNCwgYSBjbG9zaW5nIGJsb2NrIGJyYWNlIG9uIHRoZSBsYXN0IGxpbmUgb2YgdGhlIGJhdGNoIENoZWNrCiAgICAjIGZvciBhIGxhc3QgbGluZSB3aXRoIGlzb2xhdGVkIGNsb3NpbmcgQkxPQ0sgY3VybHkKICAgICMgUGF0Y2g6IGFkZGVkIGEgY2hlY2sgZm9yIGFueSBuZXcgY2xvc2luZyBzaWRlIGNvbW1lbnQgd2hpY2ggdGhlCiAgICAjIC1jc2Mgb3B0aW9uIG1heSBnZW5lcmF0ZS4gSWYgaXQgZXhpc3RzLCB0aGVyZSB3aWxsIGJlIGEgc2lkZSBjb21tZW50CiAgICAjIHNvIHdlIGNhbm5vdCBjb21iaW5lIHdpdGggYSBicmFjZSBvbiB0aGUgbmV4dCBsaW5lLiAgVGhpcyBpc3N1ZQogICAgIyBvY2N1cnMgZm9yIHRoZSBjb21iaW5hdGlvbiAtc2NiYiBhbmQgLWNzYyBpcyB1c2VkLgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBlbHNpZiAoJHJPcHRzX3N0YWNrX2Nsb3NpbmdfYmxvY2tfYnJhY2UKICAgICAgICAmJiAkaWJlZyBlcSAkaWVuZAogICAgICAgICYmICRibG9ja190eXBlX3RvX2dvWyRpZW5kXQogICAgICAgICYmICR0eXBlc190b19nb1skaWVuZF0gZXEgJ30nCiAgICAgICAgJiYgKCAhJGNsb3Npbmdfc2lkZV9jb21tZW50IHx8ICRubGluZSA8ICRuX2xhc3RfbGluZSApICkKICAgIHsKICAgICAgICBteSAkc3BhY2VzID0gJHJPcHRzX2Jsb2NrX2JyYWNlX3RpZ2h0bmVzcyA9PSAyID8gMCA6IDE7CgogICAgICAgICR2dF90eXBlICAgICAgICAgPSA0OwogICAgICAgICR2dF9vcGVuaW5nX2ZsYWcgPSAwOwogICAgICAgICR2dF9jbG9zaW5nX2ZsYWcgPSAkc3BhY2VzOwogICAgICAgICR2dF9zZXFubyAgICAgICAgPSAkdHlwZV9zZXF1ZW5jZV90b19nb1skaWVuZF07CiAgICAgICAgJHZ0X3ZhbGlkX2ZsYWcgICA9IDE7CiAgICAgICAgJHZ0X21pbl9saW5lcyAgICA9IDA7CiAgICAgICAgJHZ0X21heF9saW5lcyAgICA9IDA7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAjIG5vIC12dCBmbGFncyBhcHBseQogICAgfQoKICAgIG15ICRsYXN0X3Z0X3R5cGUgPSAkc2VsZi0+W19sYXN0X3Z0X3R5cGVfXTsKICAgICRzZWxmLT5bX2xhc3RfdnRfdHlwZV9dID0gJHZ0X3R5cGU7CgogICAgaWYgKCAhJHZ0X3R5cGUgKSB7CgogICAgICAgICMgTWFrZSBhIHNpbXBsZSByZXR1cm4gaWYgdGhpcyBsaW5lIGlzIG5vdCBpbnZvbHZlZCBpbiB2ZXJ0aWNhbAogICAgICAgICMgdGlnaHRuZXNzIGF0IGFsbC4KICAgICAgICBpZiAoICAgISR2dF9zZXFub19iZWcKICAgICAgICAgICAgJiYgISR2dF9zZXFub19lbmQKICAgICAgICAgICAgJiYgISRsYXN0X3Z0X3R5cGUgKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJHZ0X3R5cGUgICAgICAgICA9IDA7CiAgICAgICAgJHZ0X29wZW5pbmdfZmxhZyA9IDA7CiAgICAgICAgJHZ0X2Nsb3NpbmdfZmxhZyA9IDA7CiAgICAgICAgJHZ0X3NlcW5vICAgICAgICA9IDA7CiAgICAgICAgJHZ0X3ZhbGlkX2ZsYWcgICA9IDA7CiAgICAgICAgJHZ0X21pbl9saW5lcyAgICA9IDA7CiAgICAgICAgJHZ0X21heF9saW5lcyAgICA9IDA7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBndWFyZCBhZ2FpbnN0IHVuZGVmaW5lZCBzZXF1ZW5jZSBudW1iZXJzIHB1bGxlZCBmcm9tIF90b19nbwogICAgICAgIGlmICggIWRlZmluZWQoJHZ0X3NlcW5vKSApIHsgJHZ0X3NlcW5vID0gMCB9CiAgICB9CgogICAgIyByZXR1cm4gdGhlIGZ1bGwgZGF0YSBzdHJ1Y3R1cmUKICAgIHJldHVybiB7CiAgICAgICAgX3Z0X3R5cGUgICAgICAgICA9PiAkdnRfdHlwZSwKICAgICAgICBfdnRfb3BlbmluZ19mbGFnID0+ICR2dF9vcGVuaW5nX2ZsYWcsCiAgICAgICAgX3Z0X2Nsb3NpbmdfZmxhZyA9PiAkdnRfY2xvc2luZ19mbGFnLAogICAgICAgIF92dF9zZXFubyAgICAgICAgPT4gJHZ0X3NlcW5vLAogICAgICAgIF92dF92YWxpZF9mbGFnICAgPT4gJHZ0X3ZhbGlkX2ZsYWcsCiAgICAgICAgX3Z0X21pbl9saW5lcyAgICA9PiAkdnRfbWluX2xpbmVzLAogICAgICAgIF92dF9tYXhfbGluZXMgICAgPT4gJHZ0X21heF9saW5lcywKICAgICAgICBfdnRfc2Vxbm9fYmVnICAgID0+ICR2dF9zZXFub19iZWcsCiAgICAgICAgX3Z0X3NlcW5vX2VuZCAgICA9PiAkdnRfc2Vxbm9fZW5kLAogICAgfTsKCn0gIyMgZW5kIHN1YiBzZXRfdmVydGljYWxfdGlnaHRuZXNzX2ZsYWdzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQ09ERSBTRUNUSU9OIDE0OiBDb2RlIGZvciBjcmVhdGluZyBjbG9zaW5nIHNpZGUgY29tbWVudHMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKeyAgICAjIyBiZWdpbiBjbG9zdXJlIGFjY3VtdWxhdGVfY3NjX3RleHQKCiMgVGhlc2Ugcm91dGluZXMgYXJlIGNhbGxlZCBvbmNlIHBlciBiYXRjaCB3aGVuIHRoZSAtLWNsb3Npbmctc2lkZS1jb21tZW50cyBmbGFnCiMgaGFzIGJlZW4gc2V0LgoKICAgIG15ICRyYmxvY2tfbGVhZGluZ190ZXh0OwogICAgbXkgJWJsb2NrX29wZW5pbmdfbGluZV9udW1iZXI7CiAgICBteSAkY3NjX25ld19zdGF0ZW1lbnRfb2s7CiAgICBteSAkY3NjX2xhc3RfbGFiZWw7CiAgICBteSAlY3NjX2Jsb2NrX2xhYmVsOwogICAgbXkgJGFjY3VtdWxhdGluZ190ZXh0X2Zvcl9ibG9jazsKICAgIG15ICRsZWFkaW5nX2Jsb2NrX3RleHQ7CiAgICBteSAkcmxlYWRpbmdfYmxvY2tfaWZfZWxzaWZfdGV4dDsKICAgIG15ICRsZWFkaW5nX2Jsb2NrX3RleHRfbGV2ZWw7CiAgICBteSAkbGVhZGluZ19ibG9ja190ZXh0X2xlbmd0aF9leGNlZWRlZDsKICAgIG15ICRsZWFkaW5nX2Jsb2NrX3RleHRfbGluZV9sZW5ndGg7CiAgICBteSAkbGVhZGluZ19ibG9ja190ZXh0X2xpbmVfbnVtYmVyOwoKICAgIHN1YiBpbml0aWFsaXplX2NzY192YXJzIHsKICAgICAgICAkcmJsb2NrX2xlYWRpbmdfdGV4dCAgICAgICAgICA9IHt9OwogICAgICAgICVibG9ja19vcGVuaW5nX2xpbmVfbnVtYmVyICAgID0gKCk7CiAgICAgICAgJGNzY19uZXdfc3RhdGVtZW50X29rICAgICAgICAgPSAxOwogICAgICAgICRjc2NfbGFzdF9sYWJlbCAgICAgICAgICAgICAgID0gRU1QVFlfU1RSSU5HOwogICAgICAgICVjc2NfYmxvY2tfbGFiZWwgICAgICAgICAgICAgID0gKCk7CiAgICAgICAgJHJsZWFkaW5nX2Jsb2NrX2lmX2Vsc2lmX3RleHQgPSBbXTsKICAgICAgICAkYWNjdW11bGF0aW5nX3RleHRfZm9yX2Jsb2NrICA9IEVNUFRZX1NUUklORzsKICAgICAgICByZXNldF9ibG9ja190ZXh0X2FjY3VtdWxhdG9yKCk7CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGluaXRpYWxpemVfY3NjX3ZhcnMKCiAgICBzdWIgcmVzZXRfYmxvY2tfdGV4dF9hY2N1bXVsYXRvciB7CgogICAgICAgICMgc2F2ZSB0ZXh0IGFmdGVyICdpZicgYW5kICdlbHNpZicgdG8gYXBwZW5kIGFmdGVyICdlbHNlJwogICAgICAgIGlmICgkYWNjdW11bGF0aW5nX3RleHRfZm9yX2Jsb2NrKSB7CgogICAgICAgICAgICAjIyAoICRhY2N1bXVsYXRpbmdfdGV4dF9mb3JfYmxvY2sgPX4gL14oaWZ8ZWxzaWYpJC8gKSB7CiAgICAgICAgICAgIGlmICggJGlzX2lmX2Vsc2lmeyRhY2N1bXVsYXRpbmdfdGV4dF9mb3JfYmxvY2t9ICkgewogICAgICAgICAgICAgICAgcHVzaCBAeyRybGVhZGluZ19ibG9ja19pZl9lbHNpZl90ZXh0fSwgJGxlYWRpbmdfYmxvY2tfdGV4dDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkYWNjdW11bGF0aW5nX3RleHRfZm9yX2Jsb2NrICAgICAgICA9IEVNUFRZX1NUUklORzsKICAgICAgICAkbGVhZGluZ19ibG9ja190ZXh0ICAgICAgICAgICAgICAgICA9IEVNUFRZX1NUUklORzsKICAgICAgICAkbGVhZGluZ19ibG9ja190ZXh0X2xldmVsICAgICAgICAgICA9IDA7CiAgICAgICAgJGxlYWRpbmdfYmxvY2tfdGV4dF9sZW5ndGhfZXhjZWVkZWQgPSAwOwogICAgICAgICRsZWFkaW5nX2Jsb2NrX3RleHRfbGluZV9udW1iZXIgICAgID0gMDsKICAgICAgICAkbGVhZGluZ19ibG9ja190ZXh0X2xpbmVfbGVuZ3RoICAgICA9IDA7CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIHJlc2V0X2Jsb2NrX3RleHRfYWNjdW11bGF0b3IKCiAgICBzdWIgc2V0X2Jsb2NrX3RleHRfYWNjdW11bGF0b3IgewogICAgICAgIG15ICggJHNlbGYsICRpICkgPSBAXzsKICAgICAgICAkYWNjdW11bGF0aW5nX3RleHRfZm9yX2Jsb2NrID0gJHRva2Vuc190b19nb1skaV07CiAgICAgICAgaWYgKCAkYWNjdW11bGF0aW5nX3RleHRfZm9yX2Jsb2NrICF+IC9eZWxzLyApIHsKICAgICAgICAgICAgJHJsZWFkaW5nX2Jsb2NrX2lmX2Vsc2lmX3RleHQgPSBbXTsKICAgICAgICB9CiAgICAgICAgJGxlYWRpbmdfYmxvY2tfdGV4dCAgICAgICAgICAgICAgICAgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgJGxlYWRpbmdfYmxvY2tfdGV4dF9sZXZlbCAgICAgICAgICAgPSAkbGV2ZWxzX3RvX2dvWyRpXTsKICAgICAgICAkbGVhZGluZ19ibG9ja190ZXh0X2xpbmVfbnVtYmVyICAgICA9ICRzZWxmLT5nZXRfb3V0cHV0X2xpbmVfbnVtYmVyKCk7CiAgICAgICAgJGxlYWRpbmdfYmxvY2tfdGV4dF9sZW5ndGhfZXhjZWVkZWQgPSAwOwoKICAgICAgICAjIHRoaXMgd2lsbCBjb250YWluIHRoZSBjb2x1bW4gbnVtYmVyIG9mIHRoZSBsYXN0IGNoYXJhY3RlcgogICAgICAgICMgb2YgdGhlIGNsb3Npbmcgc2lkZSBjb21tZW50CiAgICAgICAgJGxlYWRpbmdfYmxvY2tfdGV4dF9saW5lX2xlbmd0aCA9CiAgICAgICAgICBsZW5ndGgoJGNzY19sYXN0X2xhYmVsKSArCiAgICAgICAgICBsZW5ndGgoJGFjY3VtdWxhdGluZ190ZXh0X2Zvcl9ibG9jaykgKwogICAgICAgICAgbGVuZ3RoKCAkck9wdHMtPnsnY2xvc2luZy1zaWRlLWNvbW1lbnQtcHJlZml4J30gKSArCiAgICAgICAgICAkbGVhZGluZ19ibG9ja190ZXh0X2xldmVsICogJHJPcHRzX2luZGVudF9jb2x1bW5zICsgMzsKICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgc2V0X2Jsb2NrX3RleHRfYWNjdW11bGF0b3IKCiAgICBzdWIgYWNjdW11bGF0ZV9ibG9ja190ZXh0IHsKICAgICAgICBteSAoICRzZWxmLCAkaSApID0gQF87CgogICAgICAgICMgYWNjdW11bGF0ZSBsZWFkaW5nIHRleHQgZm9yIC1jc2MsIGlnbm9yaW5nIGFueSBzaWRlIGNvbW1lbnRzCiAgICAgICAgaWYgKCAgICRhY2N1bXVsYXRpbmdfdGV4dF9mb3JfYmxvY2sKICAgICAgICAgICAgJiYgISRsZWFkaW5nX2Jsb2NrX3RleHRfbGVuZ3RoX2V4Y2VlZGVkCiAgICAgICAgICAgICYmICR0eXBlc190b19nb1skaV0gbmUgJyMnICkKICAgICAgICB7CgogICAgICAgICAgICBteSAkYWRkZWRfbGVuZ3RoID0gJHRva2VuX2xlbmd0aHNfdG9fZ29bJGldOwogICAgICAgICAgICAkYWRkZWRfbGVuZ3RoICs9IDEgaWYgJGkgPT0gMDsKICAgICAgICAgICAgbXkgJG5ld19saW5lX2xlbmd0aCA9CiAgICAgICAgICAgICAgJGxlYWRpbmdfYmxvY2tfdGV4dF9saW5lX2xlbmd0aCArICRhZGRlZF9sZW5ndGg7CgogICAgICAgICAgICAjIHdlIGNhbiBhZGQgdGhpcyB0ZXh0IGlmIHdlIGRvbid0IGV4Y2VlZCBzb21lIGxpbWl0cy4uCiAgICAgICAgICAgIGlmICgKCiAgICAgICAgICAgICAgICAjIHdlIG11c3Qgbm90IGhhdmUgYWxyZWFkeSBleGNlZWRlZCB0aGUgdGV4dCBsZW5ndGggbGltaXQKICAgICAgICAgICAgICAgIGxlbmd0aCgkbGVhZGluZ19ibG9ja190ZXh0KSA8CiAgICAgICAgICAgICAgICAkck9wdHNfY2xvc2luZ19zaWRlX2NvbW1lbnRfbWF4aW11bV90ZXh0CgogICAgICAgICAgICAgICAgIyBhbmQgZWl0aGVyOgogICAgICAgICAgICAgICAgIyB0aGUgbmV3IHRvdGFsIGxpbmUgbGVuZ3RoIG11c3QgYmUgYmVsb3cgdGhlIGxpbmUgbGVuZ3RoIGxpbWl0CiAgICAgICAgICAgICAgICAjIG9yIHRoZSBuZXcgbGVuZ3RoIG11c3QgYmUgYmVsb3cgdGhlIHRleHQgbGVuZ3RoIGxpbWl0CiAgICAgICAgICAgICAgICAjIChpZSwgd2UgbWF5IGFsbG93IG9uZSB0b2tlbiB0byBleGNlZWQgdGhlIHRleHQgbGVuZ3RoIGxpbWl0KQogICAgICAgICAgICAgICAgJiYgKAogICAgICAgICAgICAgICAgICAgICRuZXdfbGluZV9sZW5ndGggPAogICAgICAgICAgICAgICAgICAgICRtYXhpbXVtX2xpbmVfbGVuZ3RoX2F0X2xldmVsWyRsZWFkaW5nX2Jsb2NrX3RleHRfbGV2ZWxdCgogICAgICAgICAgICAgICAgICAgIHx8IGxlbmd0aCgkbGVhZGluZ19ibG9ja190ZXh0KSArICRhZGRlZF9sZW5ndGggPAogICAgICAgICAgICAgICAgICAgICRyT3B0c19jbG9zaW5nX3NpZGVfY29tbWVudF9tYXhpbXVtX3RleHQKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICAjIFVOTEVTUzogd2UgYXJlIGFkZGluZyBhIGNsb3NpbmcgcGFyZW4gYmVmb3JlIHRoZSBicmFjZSB3ZQogICAgICAgICAgICAgICAgIyBzZWVrLiAgVGhpcyBpcyBhbiBhdHRlbXB0IHRvIGF2b2lkIHNpdHVhdGlvbnMgd2hlcmUgdGhlIC4uLgogICAgICAgICAgICAgICAgIyB0byBiZSBhZGRlZCBhcmUgbG9uZ2VyIHRoYW4gdGhlIG9taXR0ZWQgcmlnaHQgcGFyZW4sIGFzIGluOgoKICAgICAgICAgICAgICAgICNmb3JlYWNoIG15ICRpdGVtIChAYV9yYXRoZXJfbG9uZ192YXJpYWJsZV9uYW1lX2hlcmUpIHsKICAgICAgICAgICAgICAgICMgICAmd2hhdGV2ZXI7CiAgICAgICAgICAgICAgICAjfSAjIyBlbmQgZm9yZWFjaCBteSAkaXRlbSAoQGFfcmF0aGVyX2xvbmdfdmFyaWFibGVfbmFtZV9oZXJlLi4uCgogICAgICAgICAgICAgICAgfHwgKAogICAgICAgICAgICAgICAgICAgICR0b2tlbnNfdG9fZ29bJGldIGVxICcpJwogICAgICAgICAgICAgICAgICAgICYmICgKICAgICAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGkgKyAxIDw9ICRtYXhfaW5kZXhfdG9fZ28KICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRibG9ja190eXBlX3RvX2dvWyAkaSArIDEgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJGJsb2NrX3R5cGVfdG9fZ29bICRpICsgMSBdIGVxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWNjdW11bGF0aW5nX3RleHRfZm9yX2Jsb2NrCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgfHwgKCAgICRpICsgMiA8PSAkbWF4X2luZGV4X3RvX2dvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkYmxvY2tfdHlwZV90b19nb1sgJGkgKyAyIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRibG9ja190eXBlX3RvX2dvWyAkaSArIDIgXSBlcQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFjY3VtdWxhdGluZ190ZXh0X2Zvcl9ibG9jayApCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICMgYWRkIGFuIGV4dHJhIHNwYWNlIGF0IGVhY2ggbmV3bGluZQogICAgICAgICAgICAgICAgaWYgKCAkaSA9PSAwICYmICR0eXBlc190b19nb1skaV0gbmUgJ2InICkgewogICAgICAgICAgICAgICAgICAgICRsZWFkaW5nX2Jsb2NrX3RleHQgLj0gU1BBQ0U7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBhZGQgdGhlIHRva2VuIHRleHQKICAgICAgICAgICAgICAgICRsZWFkaW5nX2Jsb2NrX3RleHQgLj0gJHRva2Vuc190b19nb1skaV07CiAgICAgICAgICAgICAgICAkbGVhZGluZ19ibG9ja190ZXh0X2xpbmVfbGVuZ3RoID0gJG5ld19saW5lX2xlbmd0aDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzaG93IHRoYXQgdGV4dCB3YXMgdHJ1bmNhdGVkIGlmIG5lY2Vzc2FyeQogICAgICAgICAgICBlbHNpZiAoICR0eXBlc190b19nb1skaV0gbmUgJ2InICkgewogICAgICAgICAgICAgICAgJGxlYWRpbmdfYmxvY2tfdGV4dF9sZW5ndGhfZXhjZWVkZWQgPSAxOwogICAgICAgICAgICAgICAgJGxlYWRpbmdfYmxvY2tfdGV4dCAuPSAnLi4uJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICMgbm90IGVub3VnaCBzcGFjZSB0byBhZGQgdGV4dAogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBhY2N1bXVsYXRlX2Jsb2NrX3RleHQKCiAgICBzdWIgYWNjdW11bGF0ZV9jc2NfdGV4dCB7CgogICAgICAgIG15ICgkc2VsZikgPSBAXzsKCiAgICAgICAgIyBjYWxsZWQgb25jZSBwZXIgb3V0cHV0IGJ1ZmZlciB3aGVuIC1jc2MgaXMgdXNlZC4gQWNjdW11bGF0ZXMKICAgICAgICAjIHRoZSB0ZXh0IHBsYWNlZCBhZnRlciBjZXJ0YWluIGNsb3NpbmcgYmxvY2sgYnJhY2VzLgogICAgICAgICMgRGVmaW5lcyBhbmQgcmV0dXJucyB0aGUgZm9sbG93aW5nIGZvciB0aGlzIGJ1ZmZlcjoKCiAgICAgICAgbXkgJGJsb2NrX2xlYWRpbmdfdGV4dCA9CiAgICAgICAgICBFTVBUWV9TVFJJTkc7ICAgICMgdGhlIGxlYWRpbmcgdGV4dCBvZiB0aGUgbGFzdCAnfScKICAgICAgICBteSAkcmJsb2NrX2xlYWRpbmdfaWZfZWxzaWZfdGV4dDsKICAgICAgICBteSAkaV9ibG9ja19sZWFkaW5nX3RleHQgPQogICAgICAgICAgLTE7ICAgICAgICAgICAgICAjIGluZGV4IG9mIHRva2VuIG93bmluZyBibG9ja19sZWFkaW5nX3RleHQKICAgICAgICBteSAkYmxvY2tfbGluZV9jb3VudCAgICA9IDEwMDsgICAgICAgICAgIyBob3cgbWFueSBsaW5lcyB0aGUgYmxvY2sgc3BhbnMKICAgICAgICBteSAkdGVybWluYWxfdHlwZSAgICAgICA9ICdiJzsgICAgICAgICAgIyB0eXBlIG9mIGxhc3Qgbm9uYmxhbmsgdG9rZW4KICAgICAgICBteSAkaV90ZXJtaW5hbCAgICAgICAgICA9IDA7ICAgICAgICAgICAgIyBpbmRleCBvZiBsYXN0IG5vbmJsYW5rIHRva2VuCiAgICAgICAgbXkgJHRlcm1pbmFsX2Jsb2NrX3R5cGUgPSBFTVBUWV9TVFJJTkc7CgogICAgICAgICMgdXBkYXRlIG1vc3QgcmVjZW50IHN0YXRlbWVudCBsYWJlbAogICAgICAgICRjc2NfbGFzdF9sYWJlbCA9IEVNUFRZX1NUUklORyB1bmxlc3MgKCRjc2NfbGFzdF9sYWJlbCk7CiAgICAgICAgaWYgKCAkdHlwZXNfdG9fZ29bMF0gZXEgJ0onICkgeyAkY3NjX2xhc3RfbGFiZWwgPSAkdG9rZW5zX3RvX2dvWzBdIH0KICAgICAgICBteSAkYmxvY2tfbGFiZWwgPSAkY3NjX2xhc3RfbGFiZWw7CgogICAgICAgICMgTG9vcCBvdmVyIGFsbCB0b2tlbnMgb2YgdGhpcyBiYXRjaAogICAgICAgIGZvciBteSAkaSAoIDAgLi4gJG1heF9pbmRleF90b19nbyApIHsKICAgICAgICAgICAgbXkgJHR5cGUgICAgICAgPSAkdHlwZXNfdG9fZ29bJGldOwogICAgICAgICAgICBteSAkYmxvY2tfdHlwZSA9ICRibG9ja190eXBlX3RvX2dvWyRpXTsKICAgICAgICAgICAgbXkgJHRva2VuICAgICAgPSAkdG9rZW5zX3RvX2dvWyRpXTsKICAgICAgICAgICAgJGJsb2NrX3R5cGUgPSBFTVBUWV9TVFJJTkcgdW5sZXNzICgkYmxvY2tfdHlwZSk7CgogICAgICAgICAgICAjIHJlbWVtYmVyIGxhc3Qgbm9uYmxhbmsgdG9rZW4gdHlwZQogICAgICAgICAgICBpZiAoICR0eXBlIG5lICcjJyAmJiAkdHlwZSBuZSAnYicgKSB7CiAgICAgICAgICAgICAgICAkdGVybWluYWxfdHlwZSAgICAgICA9ICR0eXBlOwogICAgICAgICAgICAgICAgJHRlcm1pbmFsX2Jsb2NrX3R5cGUgPSAkYmxvY2tfdHlwZTsKICAgICAgICAgICAgICAgICRpX3Rlcm1pbmFsICAgICAgICAgID0gJGk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICR0eXBlX3NlcXVlbmNlID0gJHR5cGVfc2VxdWVuY2VfdG9fZ29bJGldOwogICAgICAgICAgICBpZiAoICRibG9ja190eXBlICYmICR0eXBlX3NlcXVlbmNlICkgewoKICAgICAgICAgICAgICAgIGlmICggJHRva2VuIGVxICd9JyApIHsKCiAgICAgICAgICAgICAgICAgICAgIyByZXN0b3JlIGFueSBsZWFkaW5nIHRleHQgc2F2ZWQgd2hlbiB3ZSBlbnRlcmVkIHRoaXMgYmxvY2sKICAgICAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQoICRyYmxvY2tfbGVhZGluZ190ZXh0LT57JHR5cGVfc2VxdWVuY2V9ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICggJGJsb2NrX2xlYWRpbmdfdGV4dCwgJHJibG9ja19sZWFkaW5nX2lmX2Vsc2lmX3RleHQgKQogICAgICAgICAgICAgICAgICAgICAgICAgID0gQHsgJHJibG9ja19sZWFkaW5nX3RleHQtPnskdHlwZV9zZXF1ZW5jZX0gfTsKICAgICAgICAgICAgICAgICAgICAgICAgJGlfYmxvY2tfbGVhZGluZ190ZXh0ID0gJGk7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAkcmJsb2NrX2xlYWRpbmdfdGV4dC0+eyR0eXBlX3NlcXVlbmNlfTsKICAgICAgICAgICAgICAgICAgICAgICAgJHJsZWFkaW5nX2Jsb2NrX2lmX2Vsc2lmX3RleHQgPQogICAgICAgICAgICAgICAgICAgICAgICAgICRyYmxvY2tfbGVhZGluZ19pZl9lbHNpZl90ZXh0OwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCAkY3NjX2Jsb2NrX2xhYmVseyR0eXBlX3NlcXVlbmNlfSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAkYmxvY2tfbGFiZWwgPSAkY3NjX2Jsb2NrX2xhYmVseyR0eXBlX3NlcXVlbmNlfTsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlICRjc2NfYmxvY2tfbGFiZWx7JHR5cGVfc2VxdWVuY2V9OwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBpZiB3ZSBydW4gaW50byBhICd9JyB0aGVuIHdlIHByb2JhYmx5IHN0YXJ0ZWQgYWNjdW11bGF0aW5nCiAgICAgICAgICAgICAgICAgICAgIyBhdCBzb21ldGhpbmcgbGlrZSBhIHRyYWlsaW5nICdpZicgY2xhdXNlLi5ubyBoYXJtIGRvbmUuCiAgICAgICAgICAgICAgICAgICAgaWYgKCAgICRhY2N1bXVsYXRpbmdfdGV4dF9mb3JfYmxvY2sKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJGxldmVsc190b19nb1skaV0gPD0gJGxlYWRpbmdfYmxvY2tfdGV4dF9sZXZlbCApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICByZXNldF9ibG9ja190ZXh0X2FjY3VtdWxhdG9yKCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQoICRibG9ja19vcGVuaW5nX2xpbmVfbnVtYmVyeyR0eXBlX3NlcXVlbmNlfSApICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRvdXRwdXRfbGluZV9udW1iZXIgPQogICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5nZXRfb3V0cHV0X2xpbmVfbnVtYmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICRibG9ja19saW5lX2NvdW50ID0KICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X2xpbmVfbnVtYmVyIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAkYmxvY2tfb3BlbmluZ19saW5lX251bWJlcnskdHlwZV9zZXF1ZW5jZX0gKyAxOwogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgJGJsb2NrX29wZW5pbmdfbGluZV9udW1iZXJ7JHR5cGVfc2VxdWVuY2V9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgRXJyb3I6IGJsb2NrIG9wZW5pbmcgbGluZSB1bmRlZmluZWQgZm9yIHRoaXMgbGluZS4uCiAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBzaG91bGRuJ3QgYmUgcG9zc2libGUsIGJ1dCBpdCBpcyBub3QgYQogICAgICAgICAgICAgICAgICAgICAgICAjIHNpZ25pZmljYW50IHByb2JsZW0uCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGVsc2lmICggJHRva2VuIGVxICd7JyApIHsKCiAgICAgICAgICAgICAgICAgICAgbXkgJGxpbmVfbnVtYmVyID0gJHNlbGYtPmdldF9vdXRwdXRfbGluZV9udW1iZXIoKTsKICAgICAgICAgICAgICAgICAgICAkYmxvY2tfb3BlbmluZ19saW5lX251bWJlcnskdHlwZV9zZXF1ZW5jZX0gPSAkbGluZV9udW1iZXI7CgogICAgICAgICAgICAgICAgICAgICMgc2V0IGEgbGFiZWwgZm9yIHRoaXMgYmxvY2ssIGV4Y2VwdCBmb3IKICAgICAgICAgICAgICAgICAgICAjIGEgYmFyZSBibG9jayB3aGljaCBhbHJlYWR5IGhhcyB0aGUgbGFiZWwKICAgICAgICAgICAgICAgICAgICAjIEEgbGFiZWwgY2FuIG9ubHkgYmUgdXNlZCBvbiB0aGUgbmV4dCB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkYmxvY2tfdHlwZSA9fiAvOiQvICkgewogICAgICAgICAgICAgICAgICAgICAgICAkY3NjX2xhc3RfbGFiZWwgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRjc2NfYmxvY2tfbGFiZWx7JHR5cGVfc2VxdWVuY2V9ID0gJGNzY19sYXN0X2xhYmVsOwogICAgICAgICAgICAgICAgICAgICRjc2NfbGFzdF9sYWJlbCA9IEVNUFRZX1NUUklORzsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAgICRhY2N1bXVsYXRpbmdfdGV4dF9mb3JfYmxvY2sKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJGxldmVsc190b19nb1skaV0gPT0gJGxlYWRpbmdfYmxvY2tfdGV4dF9sZXZlbCApCiAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkYWNjdW11bGF0aW5nX3RleHRfZm9yX2Jsb2NrIGVxICRibG9ja190eXBlICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc2F2ZSBhbnkgbGVhZGluZyB0ZXh0IGJlZm9yZSB3ZSBlbnRlciB0aGlzIGJsb2NrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmJsb2NrX2xlYWRpbmdfdGV4dC0+eyR0eXBlX3NlcXVlbmNlfSA9IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGVhZGluZ19ibG9ja190ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRybGVhZGluZ19ibG9ja19pZl9lbHNpZl90ZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGJsb2NrX29wZW5pbmdfbGluZV9udW1iZXJ7JHR5cGVfc2VxdWVuY2V9ID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxlYWRpbmdfYmxvY2tfdGV4dF9saW5lX251bWJlcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0X2Jsb2NrX3RleHRfYWNjdW11bGF0b3IoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNob3VsZG4ndCBoYXBwZW4sIGJ1dCBub3QgYSBzZXJpb3VzIGVycm9yLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSB3ZXJlIGFjY3VtdWxhdGluZyAtY3NjIHRleHQgZm9yIGJsb2NrIHR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgJGFjY3VtdWxhdGluZ190ZXh0X2Zvcl9ibG9jayBhbmQgdW5leHBlY3RlZGx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGVuY291bnRlcmVkIGEgJ3snIGZvciBibG9jayB0eXBlICRibG9ja190eXBlLgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIyMgc2hvdWxkIG5vdCBnZXQgaGVyZQogICAgICAgICAgICAgICAgICAgIERFVkVMX01PREUKICAgICAgICAgICAgICAgICAgICAgICYmIEZhdWx0KCJ0b2tlbj0kdG9rZW4gc2hvdWxkIGJlICd7JyBvciAnfScgZm9yIGJsb2NrXG4iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAgICR0eXBlIGVxICdrJwogICAgICAgICAgICAgICAgJiYgJGNzY19uZXdfc3RhdGVtZW50X29rCiAgICAgICAgICAgICAgICAmJiAkaXNfaWZfZWxzaWZfZWxzZV91bmxlc3Nfd2hpbGVfdW50aWxfZm9yX2ZvcmVhY2h7JHRva2VufQogICAgICAgICAgICAgICAgJiYgJHRva2VuID1+IC8kY2xvc2luZ19zaWRlX2NvbW1lbnRfbGlzdF9wYXR0ZXJuLwogICAgICAgICAgICAgICAgJiYgJHRva2VuICF+IC8kY2xvc2luZ19zaWRlX2NvbW1lbnRfZXhjbHVzaW9uX3BhdHRlcm4vICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJHNlbGYtPnNldF9ibG9ja190ZXh0X2FjY3VtdWxhdG9yKCRpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIG5vdGU6IGlnbm9yaW5nIHR5cGUgJ3EnIGJlY2F1c2Ugb2YgdHJpY2tzIGJlaW5nIHBsYXllZAogICAgICAgICAgICAgICAgIyB3aXRoICdxJyBmb3IgaGFuZ2luZyBzaWRlIGNvbW1lbnRzCiAgICAgICAgICAgICAgICBpZiAoICR0eXBlIG5lICdiJyAmJiAkdHlwZSBuZSAnIycgJiYgJHR5cGUgbmUgJ3EnICkgewogICAgICAgICAgICAgICAgICAgICRjc2NfbmV3X3N0YXRlbWVudF9vayA9CiAgICAgICAgICAgICAgICAgICAgICAoICRibG9ja190eXBlIHx8ICR0eXBlIGVxICdKJyB8fCAkdHlwZSBlcSAnOycgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICggICAkdHlwZSBlcSAnOycKICAgICAgICAgICAgICAgICAgICAmJiAkYWNjdW11bGF0aW5nX3RleHRfZm9yX2Jsb2NrCiAgICAgICAgICAgICAgICAgICAgJiYgJGxldmVsc190b19nb1skaV0gPT0gJGxlYWRpbmdfYmxvY2tfdGV4dF9sZXZlbCApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmVzZXRfYmxvY2tfdGV4dF9hY2N1bXVsYXRvcigpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPmFjY3VtdWxhdGVfYmxvY2tfdGV4dCgkaSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgVHJlYXQgYW4gJ2Vsc2UnIGJsb2NrIHNwZWNpYWxseSBieSBhZGRpbmcgcHJlY2VkaW5nICdpZicgYW5kCiAgICAgICAgIyAnZWxzaWYnIHRleHQuICBPdGhlcndpc2UsIHRoZSAnZW5kIGVsc2UnIGlzIG5vdCBoZWxwZnVsLAogICAgICAgICMgZXNwZWNpYWxseSBmb3IgY3VkZGxlZC1lbHNlIGZvcm1hdHRpbmcuCiAgICAgICAgaWYgKCAkdGVybWluYWxfYmxvY2tfdHlwZSA9fiAvXmVscy8gJiYgJHJibG9ja19sZWFkaW5nX2lmX2Vsc2lmX3RleHQgKSB7CiAgICAgICAgICAgICRibG9ja19sZWFkaW5nX3RleHQgPQogICAgICAgICAgICAgICRzZWxmLT5tYWtlX2Vsc2VfY3NjX3RleHQoICRpX3Rlcm1pbmFsLCAkdGVybWluYWxfYmxvY2tfdHlwZSwKICAgICAgICAgICAgICAgICRibG9ja19sZWFkaW5nX3RleHQsICRyYmxvY2tfbGVhZGluZ19pZl9lbHNpZl90ZXh0ICk7CiAgICAgICAgfQoKICAgICAgICAjIGlmIHRoaXMgbGluZSBlbmRzIGluIGEgbGFiZWwgdGhlbiByZW1lbWJlciBpdCBmb3IgdGhlIG5leHQgcGFzcwogICAgICAgICRjc2NfbGFzdF9sYWJlbCA9IEVNUFRZX1NUUklORzsKICAgICAgICBpZiAoICR0ZXJtaW5hbF90eXBlIGVxICdKJyApIHsKICAgICAgICAgICAgJGNzY19sYXN0X2xhYmVsID0gJHRva2Vuc190b19nb1skaV90ZXJtaW5hbF07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gKCAkdGVybWluYWxfdHlwZSwgJGlfdGVybWluYWwsICRpX2Jsb2NrX2xlYWRpbmdfdGV4dCwKICAgICAgICAgICAgJGJsb2NrX2xlYWRpbmdfdGV4dCwgJGJsb2NrX2xpbmVfY291bnQsICRibG9ja19sYWJlbCApOwogICAgfSAjIyBlbmQgc3ViIGFjY3VtdWxhdGVfY3NjX3RleHQKCiAgICBzdWIgbWFrZV9lbHNlX2NzY190ZXh0IHsKCiAgICAgICAgIyBjcmVhdGUgYWRkaXRpb25hbCAtY3NjIHRleHQgZm9yIGFuICdlbHNlJyBhbmQgb3B0aW9uYWxseSAnZWxzaWYnLAogICAgICAgICMgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiBzd2l0Y2gKICAgICAgICAjCiAgICAgICAgIyAgPSAwIGFkZCAnaWYnIHRleHQgdG8gdHJhaWxpbmcgZWxzZQogICAgICAgICMgID0gMSBzYW1lIGFzIDAgcGx1czoKICAgICAgICAjICAgICAgYWRkICdpZicgdG8gJ2Vsc2lmJ3MgaWYgY2FuIGZpdCBpbiBsaW5lIGxlbmd0aAogICAgICAgICMgICAgICBhZGQgbGFzdCAnZWxzaWYnIHRvIHRyYWlsaW5nIGVsc2UgaWYgY2FuIGZpdCBpbiBvbmUgbGluZQogICAgICAgICMgID0gMiBzYW1lIGFzIDEgYnV0IGRvIG5vdCBjaGVjayBpZiBleGNlZWQgbGluZSBsZW5ndGgKICAgICAgICAjCiAgICAgICAgIyAkcmlmX2Vsc2lmX3RleHQgPSBhIHJlZmVyZW5jZSB0byBhIGxpc3Qgb2YgYWxsIHByZXZpb3VzIGNsb3NpbmcKICAgICAgICAjIHNpZGUgY29tbWVudHMgY3JlYXRlZCBmb3IgdGhpcyBpZiBibG9jawogICAgICAgICMKICAgICAgICBteSAoICRzZWxmLCAkaV90ZXJtaW5hbCwgJGJsb2NrX3R5cGUsICRibG9ja19sZWFkaW5nX3RleHQsCiAgICAgICAgICAgICRyaWZfZWxzaWZfdGV4dCApCiAgICAgICAgICA9IEBfOwogICAgICAgIG15ICRjc2NfdGV4dCA9ICRibG9ja19sZWFkaW5nX3RleHQ7CgogICAgICAgIGlmICggICAkYmxvY2tfdHlwZSBlcSAnZWxzaWYnCiAgICAgICAgICAgICYmICRyT3B0c19jbG9zaW5nX3NpZGVfY29tbWVudF9lbHNlX2ZsYWcgPT0gMCApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJGNzY190ZXh0OwogICAgICAgIH0KCiAgICAgICAgbXkgJGNvdW50ID0gQHskcmlmX2Vsc2lmX3RleHR9OwogICAgICAgIHJldHVybiAkY3NjX3RleHQgdW5sZXNzICgkY291bnQpOwoKICAgICAgICBteSAkaWZfdGV4dCA9ICdbIGlmJyAuICRyaWZfZWxzaWZfdGV4dC0+WzBdOwoKICAgICAgICAjIGFsd2F5cyBzaG93IHRoZSBsZWFkaW5nICdpZicgdGV4dCBvbiAnZWxzZScKICAgICAgICBpZiAoICRibG9ja190eXBlIGVxICdlbHNlJyApIHsKICAgICAgICAgICAgJGNzY190ZXh0IC49ICRpZl90ZXh0OwogICAgICAgIH0KCiAgICAgICAgIyBzZWUgaWYgdGhhdCdzIGFsbAogICAgICAgIGlmICggJHJPcHRzX2Nsb3Npbmdfc2lkZV9jb21tZW50X2Vsc2VfZmxhZyA9PSAwICkgewogICAgICAgICAgICByZXR1cm4gJGNzY190ZXh0OwogICAgICAgIH0KCiAgICAgICAgbXkgJGxhc3RfZWxzaWZfdGV4dCA9IEVNUFRZX1NUUklORzsKICAgICAgICBpZiAoICRjb3VudCA+IDEgKSB7CiAgICAgICAgICAgICRsYXN0X2Vsc2lmX3RleHQgPSAnIFtlbHNpZicgLiAkcmlmX2Vsc2lmX3RleHQtPlsgJGNvdW50IC0gMSBdOwogICAgICAgICAgICBpZiAoICRjb3VudCA+IDIgKSB7ICRsYXN0X2Vsc2lmX3RleHQgPSAnIFsuLi4nIC4gJGxhc3RfZWxzaWZfdGV4dDsgfQogICAgICAgIH0KCiAgICAgICAgIyB0ZW50YXRpdmVseSBhcHBlbmQgb25lIG1vcmUgaXRlbQogICAgICAgIG15ICRzYXZlZF90ZXh0ID0gJGNzY190ZXh0OwogICAgICAgIGlmICggJGJsb2NrX3R5cGUgZXEgJ2Vsc2UnICkgewogICAgICAgICAgICAkY3NjX3RleHQgLj0gJGxhc3RfZWxzaWZfdGV4dDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRjc2NfdGV4dCAuPSBTUEFDRSAuICRpZl90ZXh0OwogICAgICAgIH0KCiAgICAgICAgIyBhbGwgZG9uZSBpZiBubyBsZW5ndGggY2hlY2tzIHJlcXVlc3RlZAogICAgICAgIGlmICggJHJPcHRzX2Nsb3Npbmdfc2lkZV9jb21tZW50X2Vsc2VfZmxhZyA9PSAyICkgewogICAgICAgICAgICByZXR1cm4gJGNzY190ZXh0OwogICAgICAgIH0KCiAgICAgICAgIyB1bmRvIGl0IGlmIGxpbmUgbGVuZ3RoIGV4Y2VlZGVkCiAgICAgICAgbXkgJGxlbmd0aCA9CiAgICAgICAgICBsZW5ndGgoJGNzY190ZXh0KSArCiAgICAgICAgICBsZW5ndGgoJGJsb2NrX3R5cGUpICsKICAgICAgICAgIGxlbmd0aCggJHJPcHRzLT57J2Nsb3Npbmctc2lkZS1jb21tZW50LXByZWZpeCd9ICkgKwogICAgICAgICAgJGxldmVsc190b19nb1skaV90ZXJtaW5hbF0gKiAkck9wdHNfaW5kZW50X2NvbHVtbnMgKyAzOwogICAgICAgIGlmICgKICAgICAgICAgICAgJGxlbmd0aCA+ICRtYXhpbXVtX2xpbmVfbGVuZ3RoX2F0X2xldmVsWyRsZWFkaW5nX2Jsb2NrX3RleHRfbGV2ZWxdICkKICAgICAgICB7CiAgICAgICAgICAgICRjc2NfdGV4dCA9ICRzYXZlZF90ZXh0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGNzY190ZXh0OwogICAgfSAjIyBlbmQgc3ViIG1ha2VfZWxzZV9jc2NfdGV4dAp9ICMjIGVuZCBjbG9zdXJlIGFjY3VtdWxhdGVfY3NjX3RleHQKCnsgICAgIyMgYmVnaW4gY2xvc3VyZSBiYWxhbmNlX2NzY190ZXh0CgogICAgIyBTb21lIGFkZGl0aW9uYWwgcm91dGluZXMgZm9yIGhhbmRsaW5nIHRoZSAtLWNsb3Npbmctc2lkZS1jb21tZW50cyBvcHRpb24KCiAgICBteSAlbWF0Y2hpbmdfY2hhcjsKCiAgICBCRUdJTiB7CiAgICAgICAgJW1hdGNoaW5nX2NoYXIgPSAoCiAgICAgICAgICAgICd7JyA9PiAnfScsCiAgICAgICAgICAgICcoJyA9PiAnKScsCiAgICAgICAgICAgICdbJyA9PiAnXScsCiAgICAgICAgICAgICd9JyA9PiAneycsCiAgICAgICAgICAgICcpJyA9PiAnKCcsCiAgICAgICAgICAgICddJyA9PiAnWycsCiAgICAgICAgKTsKICAgIH0gIyMgZW5kIEJFR0lOCgogICAgc3ViIGJhbGFuY2VfY3NjX3RleHQgewoKICAgICAgICAjIEFwcGVuZCBjaGFyYWN0ZXJzIHRvIGJhbGFuY2UgYSBjbG9zaW5nIHNpZGUgY29tbWVudCBzbyB0aGF0IGVkaXRvcnMKICAgICAgICAjIHN1Y2ggYXMgdmltIGNhbiBjb3JyZWN0bHkganVtcCB0aHJvdWdoIGNvZGUuCiAgICAgICAgIyBTaW1wbGUgRXhhbXBsZToKICAgICAgICAjICBpbnB1dCAgPSAjIyBlbmQgZm9yZWFjaCBteSAkZm9vICggc29ydCB7ICRiICAuLi4KICAgICAgICAjICBvdXRwdXQgPSAjIyBlbmQgZm9yZWFjaCBteSAkZm9vICggc29ydCB7ICRiICAuLi59KQoKICAgICAgICAjIE5PVEU6IFRoaXMgcm91dGluZSBkb2VzIG5vdCBjdXJyZW50bHkgZmlsdGVyIG91dCBzdHJ1Y3R1cmVzIHdpdGhpbgogICAgICAgICMgcXVvdGVkIHRleHQgYmVjYXVzZSB0aGUgYm91bmNlIGFsZ29yaXRobXMgaW4gdGV4dCBlZGl0b3JzIGRvIG5vdAogICAgICAgICMgbmVjZXNzYXJpbHkgZG8gdGhpcyBlaXRoZXIgKGEgdmVyc2lvbiBvZiB2aW0gd2FzIGNoZWNrZWQgYW5kCiAgICAgICAgIyBkaWQgbm90IGRvIHRoaXMpLgoKICAgICAgICAjIFNvbWUgY29tcGxleCBleGFtcGxlcyB3aGljaCB3aWxsIGNhdXNlIHRyb3VibGUgZm9yIHNvbWUgZWRpdG9yczoKICAgICAgICAjICB3aGlsZSAoICRtYXNrX3N0cmluZyA9fiAvXHtbXntdKj9cfS9nICkgewogICAgICAgICMgIGlmICggJG1hc2tfc3RyID1+IC9cfVxzKmVsc1teXHtcfV0rXHskLyApIHsKICAgICAgICAjICBpZiAoICQxIGVxICd7JyApIHsKICAgICAgICAjIHRlc3QgZmlsZSB0ZXN0MS9icmFjZXMucGwgaGFzIG1hbnkgc3VjaCBleGFtcGxlcy4KCiAgICAgICAgbXkgKCRjc2MpID0gQF87CgogICAgICAgICMgbG9vcCB0byBleGFtaW5lIGNoYXJhY3RlcnMgb25lLWJ5LW9uZSwgUklHSFQgdG8gTEVGVCBhbmQKICAgICAgICAjIGJ1aWxkIGEgYmFsYW5jaW5nIGVuZGluZywgTEVGVCB0byBSSUdIVC4KICAgICAgICBmb3JlYWNoIG15ICRwb3MgKCByZXZlcnNlKCAwIC4uIGxlbmd0aCgkY3NjKSAtIDEgKSApIHsKCiAgICAgICAgICAgIG15ICRjaGFyID0gc3Vic3RyKCAkY3NjLCAkcG9zLCAxICk7CgogICAgICAgICAgICAjIGlnbm9yZSBldmVyeXRoaW5nIGV4Y2VwdCBzdHJ1Y3R1cmFsIGNoYXJhY3RlcnMKICAgICAgICAgICAgbmV4dCB1bmxlc3MgKCAkbWF0Y2hpbmdfY2hhcnskY2hhcn0gKTsKCiAgICAgICAgICAgICMgcG9wIG1vc3QgcmVjZW50bHkgYXBwZW5kZWQgY2hhcmFjdGVyCiAgICAgICAgICAgIG15ICR0b3AgPSBjaG9wICRjc2M7CgogICAgICAgICAgICAjIHB1c2ggaXQgYmFjayBwbHVzIHRoZSBtYXRlIHRvIHRoZSBuZXdlc3QgY2hhcmFjdGVyCiAgICAgICAgICAgICMgdW5sZXNzIHRoZXkgYmFsYW5jZSBlYWNoIG90aGVyLgogICAgICAgICAgICAkY3NjID0gJGNzYyAuICR0b3AgLiAkbWF0Y2hpbmdfY2hhcnskY2hhcn0gdW5sZXNzICggJHRvcCBlcSAkY2hhciApOwogICAgICAgIH0KCiAgICAgICAgIyByZXR1cm4gdGhlIGJhbGFuY2VkIHN0cmluZwogICAgICAgIHJldHVybiAkY3NjOwogICAgfSAjIyBlbmQgc3ViIGJhbGFuY2VfY3NjX3RleHQKfSAjIyBlbmQgY2xvc3VyZSBiYWxhbmNlX2NzY190ZXh0CgpzdWIgZ2V0X2FzdWJfYmxvY2tfbGFiZWwgewogICAgbXkgKCAkc2VsZiwgJHNlcW5vICkgPSBAXzsKCiAgICAjIEdpdmVuOgogICAgIyAgICRzZXFubyA9IHRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgYW4gYXN1YiBibG9jawogICAgIyBSZXR1cm46CiAgICAjICAgJGJsb2NrX2xhYmVsID0gdGhlIHRleHQgIyB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIGJlZm9yZSAnc3ViJyBpbiBpdHMKICAgICMgICBjbG9zaW5nIHNpZGUgY29tbWVudC4KICAgICMgTm90ZTogc2VlIHNpbWlsYXIgaW5saW5lIGNvZGUgaW4gc3ViIGZpbmRfc2VsZWN0ZWRfYmxvY2tzCgogICAgIyBFeGFtcGxlOgogICAgIyAgICAgbXkgJGRvaXQgPSBzdWIgeyAuLi4KICAgICMgICAgICAgICAgICAgICAgICAgIHwKICAgICMgICAgICAgICAgICAgICAgICAgIF4tLS0tLS0tLS0td2FsayBiYWNrIGZyb20gaGVyZSB0byBnZXQKICAgICMgJGJsb2NrX2xhYmVsID0gJyRkb2l0ID0nCgogICAgbXkgJGJsb2NrX2xhYmVsID0gRU1QVFlfU1RSSU5HOwogICAgcmV0dXJuICRibG9ja19sYWJlbCB1bmxlc3MgKCRzZXFubyk7CiAgICBteSAkS19vcGVuaW5nID0gJHNlbGYtPltfS19vcGVuaW5nX2NvbnRhaW5lcl9dLT57JHNlcW5vfTsKICAgIG15ICRyTEwgICAgICAgPSAkc2VsZi0+W19yTExfXTsKICAgIHJldHVybiAkYmxvY2tfbGFiZWwgdW5sZXNzICgkS19vcGVuaW5nKTsKICAgIG15ICRLX3NlYXJjaF9taW4gPSBtYXgoIDAsICRLX29wZW5pbmcgLSA2ICk7CiAgICBteSAoICRzYXdfZXF1YWxzLCAkc2F3X2ZhdF9jb21tYSwgJGJsYW5rX2NvdW50LCAkbm9uYmxhbmtfY291bnQgKTsKICAgIG15ICR0ZXh0ID0gRU1QVFlfU1RSSU5HOwoKICAgIGZvcmVhY2ggbXkgJEtLICggcmV2ZXJzZSggJEtfc2VhcmNoX21pbiAuLiAkS19vcGVuaW5nIC0gMSApICkgewogICAgICAgIG15ICR0b2tlbl90eXBlID0gJHJMTC0+WyRLS10tPltfVFlQRV9dOwogICAgICAgIG15ICR0b2tlbiAgICAgID0gJHJMTC0+WyRLS10tPltfVE9LRU5fXTsKCiAgICAgICAgIyBmaXJzdCBub25ibGFuaywga2V5d29yZCAnc3ViJywgaXMgbm90IHBhcnQgb2YgdGhlIGxhYmVsCiAgICAgICAgaWYgKCRub25ibGFua19jb3VudCkgeyAkdGV4dCA9ICR0b2tlbiAuICR0ZXh0IH0KCiAgICAgICAgaWYgKCAkdG9rZW5fdHlwZSBlcSAnYicgKSB7ICRibGFua19jb3VudCsrOyBuZXh0IH0KICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgIHsgJG5vbmJsYW5rX2NvdW50KysgfQogICAgICAgIGlmICggJHRva2VuX3R5cGUgZXEgJz0+JyApIHsgJHNhd19mYXRfY29tbWErKzsgbmV4dCB9CiAgICAgICAgaWYgKCAkdG9rZW5fdHlwZSBlcSAnPScgKSAgeyAkc2F3X2VxdWFscysrOyAgICBuZXh0IH0KICAgICAgICBpZiAoICR0b2tlbl90eXBlIGVxICdpJyAmJiAkc2F3X2VxdWFscwogICAgICAgICAgICB8fCAoICR0b2tlbl90eXBlIGVxICd3JyB8fCAkdG9rZW5fdHlwZSBlcSAnUScgKSAmJiAkc2F3X2ZhdF9jb21tYSApCiAgICAgICAgewogICAgICAgICAgICAkYmxvY2tfbGFiZWwgPSAkdGV4dDsKICAgICAgICAgICAgJGJsb2NrX2xhYmVsID1+IHMvXHMqJC8vOwogICAgICAgICAgICBsYXN0OwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAkYmxvY2tfbGFiZWw7Cn0gIyMgZW5kIHN1YiBnZXRfYXN1Yl9ibG9ja19sYWJlbAoKc3ViIGFkZF9jbG9zaW5nX3NpZGVfY29tbWVudCB7CgogICAgbXkgKCRzZWxmKSA9IEBfOwoKICAgIG15ICRyTEwgICAgICAgID0gJHNlbGYtPltfckxMX107CiAgICBteSAkdGhpc19iYXRjaCA9ICRzZWxmLT5bX3RoaXNfYmF0Y2hfXTsKCiAgICBteSAkcmlfZmlyc3QgPSAkdGhpc19iYXRjaC0+W19yaV9maXJzdF9dOwogICAgbXkgJHJpX2xhc3QgID0gJHRoaXNfYmF0Y2gtPltfcmlfbGFzdF9dOwoKICAgICMgYWRkIGNsb3Npbmcgc2lkZSBjb21tZW50cyBhZnRlciBjbG9zaW5nIGJsb2NrIGJyYWNlcyBpZiAtY3NjIHVzZWQKICAgIG15ICggJGNsb3Npbmdfc2lkZV9jb21tZW50LCAkY3Njd19ibG9ja19jb21tZW50ICk7CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBTdGVwIDE6IGxvb3AgdGhyb3VnaCBhbGwgdG9rZW5zIG9mIHRoaXMgbGluZSB0byBhY2N1bXVsYXRlCiAgICAjIHRoZSB0ZXh0IG5lZWRlZCB0byBjcmVhdGUgdGhlIGNsb3Npbmcgc2lkZSBjb21tZW50cy4gQWxzbyBzZWUKICAgICMgaG93IHRoZSBsaW5lIGVuZHMuCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgbXkgKCAkdGVybWluYWxfdHlwZSwgJGlfdGVybWluYWwsICRpX2Jsb2NrX2xlYWRpbmdfdGV4dCwKICAgICAgICAkYmxvY2tfbGVhZGluZ190ZXh0LCAkYmxvY2tfbGluZV9jb3VudCwgJGJsb2NrX2xhYmVsICkKICAgICAgPSAkc2VsZi0+YWNjdW11bGF0ZV9jc2NfdGV4dCgpOwoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgU3RlcCAyOiBtYWtlIHRoZSBjbG9zaW5nIHNpZGUgY29tbWVudCBpZiB0aGlzIGVuZHMgYSBibG9jawogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgbXkgJGhhdmVfc2lkZV9jb21tZW50ID0gJHR5cGVzX3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dIGVxICcjJzsKCiAgICAjIFNwZWNpYWwgY2hlY2sgZm9yIGFzdWIgY2xvc2luZyBzaWRlIGNvbW1lbnRzIChjMzgwKQogICAgIyBUaGVzZSBhcmUgdGhlIG9ubHkgdHlwZXMgd2hpY2ggZm9sbG93ICd9OycgaW5zdGVhZCBvZiBhIGJhcmUgJ30nCiAgICBpZiAoICR0ZXJtaW5hbF90eXBlIGVxICc7JyAmJiAkY2xvc2luZ19zaWRlX2NvbW1lbnRfd2FudF9hc3ViICkgewogICAgICAgIGlmICggICAkdHlwZXNfdG9fZ29bMF0gZXEgJ30nCiAgICAgICAgICAgICYmICR0b2tlbnNfdG9fZ29bMF0gZXEgJ30nCiAgICAgICAgICAgICYmICRpX3Rlcm1pbmFsID09ICRpbmV4dF90b19nb1swXSApCiAgICAgICAgewogICAgICAgICAgICBteSAkc2Vxbm8gPSAkdHlwZV9zZXF1ZW5jZV90b19nb1swXTsKICAgICAgICAgICAgaWYgKCAkc2VsZi0+W19yaXNfYXN1Yl9ibG9ja19dLT57JHNlcW5vfSApIHsKCiAgICAgICAgICAgICAgICAjIHJlc2V0IHRoZSB0ZXJtaW5hbCB0b2tlbiB0byBiZSB0aGUgY2xvc2luZyBicmFjZSBzbwogICAgICAgICAgICAgICAgIyB0aGF0IHRoZSBjb2RlIGJlbG93IGlnbm9yZXMgdGhlIHRyYWlsaW5nIHNlbWljb2xvbgogICAgICAgICAgICAgICAgJHRlcm1pbmFsX3R5cGUgPSAnfSc7CiAgICAgICAgICAgICAgICAkaV90ZXJtaW5hbCAgICA9IDA7CgogICAgICAgICAgICAgICAgIyBjcmVhdGUgYSBuYW1lIGZvciB0aGlzIGFzdWIgYmxvY2sKICAgICAgICAgICAgICAgICRibG9ja19sYWJlbCA9ICRzZWxmLT5nZXRfYXN1Yl9ibG9ja19sYWJlbCgkc2Vxbm8pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgaWYgdGhpcyBsaW5lIG1pZ2h0IGVuZCBpbiBhIGJsb2NrIGNsb3N1cmUuLgogICAgaWYgKAogICAgICAgICR0ZXJtaW5hbF90eXBlIGVxICd9JwoKICAgICAgICAjIEZpeCAxIGZvciBjMDkxLCB0aGlzIGlzIG9ubHkgZm9yIGJsb2NrcwogICAgICAgICYmICRibG9ja190eXBlX3RvX2dvWyRpX3Rlcm1pbmFsXQoKICAgICAgICAjIC4uYW5kIGVpdGhlcgogICAgICAgICYmICgKCiAgICAgICAgICAgICMgdGhlIGJsb2NrIGlzIGxvbmcgZW5vdWdoCiAgICAgICAgICAgICggJGJsb2NrX2xpbmVfY291bnQgPj0gJHJPcHRzLT57J2Nsb3Npbmctc2lkZS1jb21tZW50LWludGVydmFsJ30gKQoKICAgICAgICAgICAgIyBvciB0aGVyZSBpcyBhbiBleGlzdGluZyBjb21tZW50IHRvIGNoZWNrCiAgICAgICAgICAgIHx8ICggICAkaGF2ZV9zaWRlX2NvbW1lbnQKICAgICAgICAgICAgICAgICYmICRyT3B0cy0+eydjbG9zaW5nLXNpZGUtY29tbWVudC13YXJuaW5ncyd9ICkKICAgICAgICApCgogICAgICAgICMgLi4gYW5kIGlmIHRoaXMgaXMgb25lIG9mIHRoZSB0eXBlcyBvZiBpbnRlcmVzdAogICAgICAgICYmICRibG9ja190eXBlX3RvX2dvWyRpX3Rlcm1pbmFsXSA9fgogICAgICAgIC8kY2xvc2luZ19zaWRlX2NvbW1lbnRfbGlzdF9wYXR0ZXJuLwogICAgICAgICYmICRibG9ja190eXBlX3RvX2dvWyRpX3Rlcm1pbmFsXSAhfgogICAgICAgIC8kY2xvc2luZ19zaWRlX2NvbW1lbnRfZXhjbHVzaW9uX3BhdHRlcm4vCgogICAgICAgICMgLi5hbmQgdGhlIGNvcnJlc3BvbmRpbmcgb3BlbmluZyBicmFjZSBtdXN0IGlzIG5vdCBpbiB0aGlzIGJhdGNoCiAgICAgICAgIyAoYmVjYXVzZSB3ZSBkbyBub3QgbmVlZCB0byB0YWcgb25lLWxpbmUgYmxvY2tzLCBhbHRob3VnaCB0aGlzCiAgICAgICAgIyBzaG91bGQgYWxzbyBiZSBjYXVnaHQgd2l0aCBhIHBvc2l0aXZlIC1jc2NpIHZhbHVlKQogICAgICAgICYmICFkZWZpbmVkKCAkbWF0ZV9pbmRleF90b19nb1skaV90ZXJtaW5hbF0gKQoKICAgICAgICAjIC4uYW5kIGVpdGhlcgogICAgICAgICYmICgKCiAgICAgICAgICAgICMgdGhpcyBpcyB0aGUgbGFzdCB0b2tlbiAobGluZSBkb2Vzbid0IGhhdmUgYSBzaWRlIGNvbW1lbnQpCiAgICAgICAgICAgICEkaGF2ZV9zaWRlX2NvbW1lbnQKCiAgICAgICAgICAgICMgb3IgdGhlIG9sZCBzaWRlIGNvbW1lbnQgaXMgYSBjbG9zaW5nIHNpZGUgY29tbWVudAogICAgICAgICAgICB8fCAkdG9rZW5zX3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dID1+CiAgICAgICAgICAgIC8kY2xvc2luZ19zaWRlX2NvbW1lbnRfcHJlZml4X3BhdHRlcm4vCiAgICAgICAgKQogICAgICApCiAgICB7CgogICAgICAgICMgdGhlbiBtYWtlIHRoZSBjbG9zaW5nIHNpZGUgY29tbWVudCB0ZXh0CiAgICAgICAgaWYgKCRibG9ja19sYWJlbCkgeyAkYmxvY2tfbGFiZWwgLj0gU1BBQ0UgfQogICAgICAgIG15ICR0b2tlbiA9CiIkck9wdHMtPnsnY2xvc2luZy1zaWRlLWNvbW1lbnQtcHJlZml4J30gJGJsb2NrX2xhYmVsJGJsb2NrX3R5cGVfdG9fZ29bJGlfdGVybWluYWxdIjsKCiAgICAgICAgIyBhcHBlbmQgYW55IGV4dHJhIGRlc2NyaXB0aXZlIHRleHQgY29sbGVjdGVkIGFib3ZlCiAgICAgICAgaWYgKCAkaV9ibG9ja19sZWFkaW5nX3RleHQgPT0gJGlfdGVybWluYWwgKSB7CiAgICAgICAgICAgICR0b2tlbiAuPSAkYmxvY2tfbGVhZGluZ190ZXh0OwogICAgICAgIH0KCiAgICAgICAgJHRva2VuID0gYmFsYW5jZV9jc2NfdGV4dCgkdG9rZW4pCiAgICAgICAgICBpZiAkck9wdHMtPnsnY2xvc2luZy1zaWRlLWNvbW1lbnRzLWJhbGFuY2VkJ307CgogICAgICAgICR0b2tlbiA9fiBzL1xzKyQvLzsgICAgIyB0cmltIGFueSB0cmFpbGluZyB3aGl0ZXNwYWNlCgogICAgICAgICMgaGFuZGxlIGNhc2Ugb2YgZXhpc3RpbmcgY2xvc2luZyBzaWRlIGNvbW1lbnQKICAgICAgICBpZiAoJGhhdmVfc2lkZV9jb21tZW50KSB7CgogICAgICAgICAgICAjIHdhcm4gaWYgcmVxdWVzdGVkIGFuZCB0b2tlbnMgZGlmZmVyIHNpZ25pZmljYW50bHkKICAgICAgICAgICAgaWYgKCAkck9wdHMtPnsnY2xvc2luZy1zaWRlLWNvbW1lbnQtd2FybmluZ3MnfSApIHsKICAgICAgICAgICAgICAgIG15ICRvbGRfY3NjID0gJHRva2Vuc190b19nb1skbWF4X2luZGV4X3RvX2dvXTsKICAgICAgICAgICAgICAgIG15ICRuZXdfY3NjID0gJHRva2VuOwogICAgICAgICAgICAgICAgJG5ld19jc2MgPX4gcy9ccysvL2c7ICAgICAgICAgICAgIyB0cmltIGFsbCB3aGl0ZXNwYWNlCiAgICAgICAgICAgICAgICAkb2xkX2NzYyA9fiBzL1xzKy8vZzsgICAgICAgICAgICAjIHRyaW0gYWxsIHdoaXRlc3BhY2UKICAgICAgICAgICAgICAgICRuZXdfY3NjID1+IHMvW1xdXClcfVxzXSokLy87ICAgICMgdHJpbSB0cmFpbGluZyBzdHJ1Y3R1cmVzCiAgICAgICAgICAgICAgICAkb2xkX2NzYyA9fiBzL1tcXVwpXH1cc10qJC8vOyAgICAjIHRyaW0gdHJhaWxpbmcgc3RydWN0dXJlcwoKICAgICAgICAgICAgICAgICMgdHJpbSB0cmFpbGluZyAnLi4uJwogICAgICAgICAgICAgICAgbXkgJG5ld190cmFpbGluZ19kb3RzID0gJG5ld19jc2MgPX4gcy9cLlwuXC4kLy87CiAgICAgICAgICAgICAgICAkb2xkX2NzYyA9fiBzL1wuXC5cLlxzKiQvLzsKCiAgICAgICAgICAgICAgICAjIFBhdGNoIHRvIGhhbmRsZSBtdWx0aXBsZSBjbG9zaW5nIHNpZGUgY29tbWVudHMgYXQKICAgICAgICAgICAgICAgICMgZWxzZSBhbmQgZWxzaWYncy4gIFRoZXNlIGhhdmUgYmVjb21lIHRvbyBjb21wbGljYXRlZAogICAgICAgICAgICAgICAgIyB0byBjaGVjaywgc28gaWYgd2Ugc2VlIGFuIGluZGljYXRpb24gb2YKICAgICAgICAgICAgICAgICMgJ1sgaWYnIG9yICdbICMgZWxzaWYnLCB0aGVuIGFzc3VtZSB0aGV5IHdlcmUgbWFkZQogICAgICAgICAgICAgICAgIyBieSBwZXJsdGlkeS4KICAgICAgICAgICAgICAgIGlmICggJGJsb2NrX3R5cGVfdG9fZ29bJGlfdGVybWluYWxdIGVxICdlbHNlJyApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICRvbGRfY3NjID1+IC9cW1xzKmVsc2lmLyApIHsgJG9sZF9jc2MgPSAkbmV3X2NzYyB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoICRibG9ja190eXBlX3RvX2dvWyRpX3Rlcm1pbmFsXSBlcSAnZWxzaWYnICkgewogICAgICAgICAgICAgICAgICAgIGlmICggJG9sZF9jc2MgPX4gL1xbXHMqaWYvICkgeyAkb2xkX2NzYyA9ICRuZXdfY3NjIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICMgbmVpdGhlciBlbHNlIG9yIGVsc2lmCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBpZiBvbGQgY29tbWVudCBpcyBjb250YWluZWQgaW4gbmV3IGNvbW1lbnQsCiAgICAgICAgICAgICAgICAjIG9ubHkgY29tcGFyZSB0aGUgY29tbW9uIHBhcnQuCiAgICAgICAgICAgICAgICBpZiAoIGxlbmd0aCgkbmV3X2NzYykgPiBsZW5ndGgoJG9sZF9jc2MpICkgewogICAgICAgICAgICAgICAgICAgICRuZXdfY3NjID0gc3Vic3RyKCAkbmV3X2NzYywgMCwgbGVuZ3RoKCRvbGRfY3NjKSApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgaWYgdGhlIG5ldyBjb21tZW50IGlzIHNob3J0ZXIgYW5kIGhhcyBiZWVuIGxpbWl0ZWQsCiAgICAgICAgICAgICAgICAjIG9ubHkgY29tcGFyZSB0aGUgY29tbW9uIHBhcnQuCiAgICAgICAgICAgICAgICBpZiAoIGxlbmd0aCgkbmV3X2NzYykgPCBsZW5ndGgoJG9sZF9jc2MpCiAgICAgICAgICAgICAgICAgICAgJiYgJG5ld190cmFpbGluZ19kb3RzICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkb2xkX2NzYyA9IHN1YnN0ciggJG9sZF9jc2MsIDAsIGxlbmd0aCgkbmV3X2NzYykgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGFueSByZW1haW5pbmcgZGlmZmVyZW5jZT8KICAgICAgICAgICAgICAgIGlmICggJG5ld19jc2MgbmUgJG9sZF9jc2MgKSB7CgogICAgICAgICAgICAgICAgICAgICMganVzdCBsZWF2ZSB0aGUgb2xkIGNvbW1lbnQgaWYgd2UgYXJlIGJlbG93IHRoZSB0aHJlc2hvbGQKICAgICAgICAgICAgICAgICAgICAjIGZvciBjcmVhdGluZyBzaWRlIGNvbW1lbnRzCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkYmxvY2tfbGluZV9jb3VudCA8CiAgICAgICAgICAgICAgICAgICAgICAgICRyT3B0cy0+eydjbG9zaW5nLXNpZGUtY29tbWVudC1pbnRlcnZhbCd9ICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0b2tlbiA9IHVuZGVmOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBvdGhlcndpc2Ugd2UnbGwgbWFrZSBhIG5vdGUgb2YgaXQKICAgICAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRtc2dfbGluZV9udW1iZXI7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRLID0gJEtfdG9fZ29bJGlfdGVybWluYWxdOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQoJEspICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1zZ19saW5lX251bWJlciA9ICRyTEwtPlskS10tPltfTElORV9JTkRFWF9dICsgMTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKAoicGVybHRpZHkgLWNzY3cgcmVwbGFjZWQ6ICR0b2tlbnNfdG9fZ29bJG1heF9pbmRleF90b19nb11cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbXNnX2xpbmVfbnVtYmVyCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAjIHNhdmUgdGhlIG9sZCBzaWRlIGNvbW1lbnQgaW4gYSBuZXcgdHJhaWxpbmcgYmxvY2sKICAgICAgICAgICAgICAgICAgICAgICAgIyBjb21tZW50CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICR0aW1lc3RhbXAgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJHJPcHRzLT57J3RpbWVzdGFtcCd9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgKCAkZGF5LCAkbW9udGgsICR5ZWFyICkgPSAobG9jYWx0aW1lKVsgMywgNCwgNSBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHllYXIgICs9IDE5MDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbW9udGggKz0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aW1lc3RhbXAgPSAiJHllYXItJG1vbnRoLSRkYXkiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICRjc2N3X2Jsb2NrX2NvbW1lbnQgPQoiIyMgcGVybHRpZHkgLWNzY3cgJHRpbWVzdGFtcDogJHRva2Vuc190b19nb1skbWF4X2luZGV4X3RvX2dvXSI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgTm8gZGlmZmVyZW5jZXMuLiB3ZSBjYW4gc2FmZWx5IGRlbGV0ZSBvbGQgY29tbWVudCBpZiB3ZQogICAgICAgICAgICAgICAgIyBhcmUgYmVsb3cgdGhlIHRocmVzaG9sZAogICAgICAgICAgICAgICAgZWxzaWYgKCAkYmxvY2tfbGluZV9jb3VudCA8CiAgICAgICAgICAgICAgICAgICAgJHJPcHRzLT57J2Nsb3Npbmctc2lkZS1jb21tZW50LWludGVydmFsJ30gKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICMgU2luY2UgdGhlIGxpbmUgYnJlYWtzIGhhdmUgYWxyZWFkeSBiZWVuIHNldCwgd2UgaGF2ZQogICAgICAgICAgICAgICAgICAgICMgdG8gcmVtb3ZlIHRoZSB0b2tlbiBmcm9tIHRoZSBfdG9fZ28gYXJyYXkgYW5kIGFsc28KICAgICAgICAgICAgICAgICAgICAjIGZyb20gdGhlIGxpbmUgcmFuZ2UgKHRoaXMgZml4ZXMgaXNzdWUgYzA4MSkuCiAgICAgICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQgd2UgY2FuIG9ubHkgZ2V0IGhlcmUgaWYgLWNzY3cgaGFzIGJlZW4gc2V0CiAgICAgICAgICAgICAgICAgICAgIyBiZWNhdXNlIG90aGVyd2lzZSB0aGUgb2xkIGNvbW1lbnQgaXMgYWxyZWFkeSBkZWxldGVkLgogICAgICAgICAgICAgICAgICAgICR0b2tlbiA9IHVuZGVmOwogICAgICAgICAgICAgICAgICAgIG15ICRpYmVnID0gJHJpX2ZpcnN0LT5bLTFdOwogICAgICAgICAgICAgICAgICAgIG15ICRpZW5kID0gJHJpX2xhc3QtPlstMV07CiAgICAgICAgICAgICAgICAgICAgaWYgKCAgICRpZW5kID4gJGliZWcKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJGllbmQgPT0gJG1heF9pbmRleF90b19nbwogICAgICAgICAgICAgICAgICAgICAgICAmJiAkdHlwZXNfdG9fZ29bJG1heF9pbmRleF90b19nb10gZXEgJyMnICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRpZW5kLS07CiAgICAgICAgICAgICAgICAgICAgICAgICRtYXhfaW5kZXhfdG9fZ28tLTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAgICRpZW5kID4gJGliZWcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICR0eXBlc190b19nb1skbWF4X2luZGV4X3RvX2dvXSBlcSAnYicgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaWVuZC0tOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1heF9pbmRleF90b19nby0tOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICRyaV9sYXN0LT5bLTFdID0gJGllbmQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIyMgYWJvdmUgdGhyZXNob2xkLCBjYW5ub3QgZGVsZXRlCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc3dpdGNoIHRvIHRoZSBuZXcgY3NjICh1bmxlc3Mgd2UgZGVsZXRlZCBpdCEpCiAgICAgICAgICAgIGlmICgkdG9rZW4pIHsKCiAgICAgICAgICAgICAgICBteSAkbGVuX3RvayA9IGxlbmd0aCgkdG9rZW4pOyAjIE5PVEU6IGxlbmd0aCBubyBsb25nZXIgaW1wb3J0YW50CiAgICAgICAgICAgICAgICBteSAkYWRkZWRfbGVuID0KICAgICAgICAgICAgICAgICAgJGxlbl90b2sgLSAkdG9rZW5fbGVuZ3Roc190b19nb1skbWF4X2luZGV4X3RvX2dvXTsKCiAgICAgICAgICAgICAgICAkdG9rZW5zX3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dICAgICAgICA9ICR0b2tlbjsKICAgICAgICAgICAgICAgICR0b2tlbl9sZW5ndGhzX3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dID0gJGxlbl90b2s7CiAgICAgICAgICAgICAgICBteSAkSyA9ICRLX3RvX2dvWyRtYXhfaW5kZXhfdG9fZ29dOwogICAgICAgICAgICAgICAgJHJMTC0+WyRLXS0+W19UT0tFTl9dICAgICAgICA9ICR0b2tlbjsKICAgICAgICAgICAgICAgICRyTEwtPlskS10tPltfVE9LRU5fTEVOR1RIX10gPSAkbGVuX3RvazsKICAgICAgICAgICAgICAgICRzdW1tZWRfbGVuZ3Roc190b19nb1sgJG1heF9pbmRleF90b19nbyArIDEgXSArPSAkYWRkZWRfbGVuOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGhhbmRsZSBjYXNlIG9mIE5PIGV4aXN0aW5nIGNsb3Npbmcgc2lkZSBjb21tZW50CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIFRvIGF2b2lkIGluc2VydGluZyBhIG5ldyB0b2tlbiBpbiB0aGUgdG9rZW4gYXJyYXlzLCB3ZQogICAgICAgICAgICAjIHdpbGwganVzdCByZXR1cm4gdGhlIG5ldyBzaWRlIGNvbW1lbnQgc28gdGhhdCBpdCBjYW4gYmUKICAgICAgICAgICAgIyBpbnNlcnRlZCBqdXN0IGJlZm9yZSBpdCBpcyBuZWVkZWQgaW4gdGhlIGNhbGwgdG8gdGhlCiAgICAgICAgICAgICMgdmVydGljYWwgYWxpZ25lci4KICAgICAgICAgICAgJGNsb3Npbmdfc2lkZV9jb21tZW50ID0gJHRva2VuOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAoICRjbG9zaW5nX3NpZGVfY29tbWVudCwgJGNzY3dfYmxvY2tfY29tbWVudCApOwp9ICMjIGVuZCBzdWIgYWRkX2Nsb3Npbmdfc2lkZV9jb21tZW50CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQ09ERSBTRUNUSU9OIDE1OiBTdW1tYXJpemUKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKc3ViIHdyYXB1cCB7CgogICAgIyBUaGlzIGlzIHRoZSBsYXN0IHJvdXRpbmUgY2FsbGVkIHdoZW4gYSBmaWxlIGlzIGZvcm1hdHRlZC4KICAgICMgRmx1c2ggYnVmZmVyIGFuZCB3cml0ZSBhbnkgaW5mb3JtYXRpdmUgbWVzc2FnZXMKICAgIG15ICggJHNlbGYsICgkc2V2ZXJlX2Vycm9yKSApID0gQF87CgogICAgIyBPcHRpb25hbCBwYXJhbWV0ZXI6CiAgICAjICAgJHNldmVyZV9lcnJvciA9IHRydWUgaWYgcHJvZ3JhbSBpcyBlbmRpbmcgb24gYW4gZXJyb3IKICAgICMgICAgICAgICAgICAgICAgICAgZmFsc2UgZm9yIG5vcm1hbCBlbmQKCiAgICAkc2VsZi0+Zmx1c2goKTsKICAgIG15ICRmaWxlX3dyaXRlcl9vYmplY3QgPSAkc2VsZi0+W19maWxlX3dyaXRlcl9vYmplY3RfXTsKICAgICRmaWxlX3dyaXRlcl9vYmplY3QtPmRlY3JlbWVudF9vdXRwdXRfbGluZV9udW1iZXIoKQogICAgICA7ICAgICMgZml4IHVwIGxpbmUgbnVtYmVyIHNpbmNlIGl0IHdhcyBpbmNyZW1lbnRlZAogICAgd2VfYXJlX2F0X3RoZV9sYXN0X2xpbmUoKTsKCiAgICBteSAkbWF4X2RlcHRoID0gJHNlbGYtPltfbWF4aW11bV9CTE9DS19sZXZlbF9dOwogICAgbXkgJGF0X2xpbmUgICA9ICRzZWxmLT5bX21heGltdW1fQkxPQ0tfbGV2ZWxfYXRfbGluZV9dOwogICAgd3JpdGVfbG9nZmlsZV9lbnRyeSgKIk1heGltdW0gbGVhZGluZyBzdHJ1Y3R1cmFsIGRlcHRoIGlzICRtYXhfZGVwdGggaW4gaW5wdXQgYXQgbGluZSAkYXRfbGluZVxuIgogICAgKTsKCiAgICBteSAkYWRkZWRfc2VtaWNvbG9uX2NvdW50ICAgID0gJHNlbGYtPltfYWRkZWRfc2VtaWNvbG9uX2NvdW50X107CiAgICBteSAkZmlyc3RfYWRkZWRfc2VtaWNvbG9uX2F0ID0gJHNlbGYtPltfZmlyc3RfYWRkZWRfc2VtaWNvbG9uX2F0X107CiAgICBteSAkbGFzdF9hZGRlZF9zZW1pY29sb25fYXQgID0gJHNlbGYtPltfbGFzdF9hZGRlZF9zZW1pY29sb25fYXRfXTsKCiAgICBpZiAoICRhZGRlZF9zZW1pY29sb25fY291bnQgPiAwICkgewogICAgICAgIG15ICRmaXJzdCA9ICggJGFkZGVkX3NlbWljb2xvbl9jb3VudCA+IDEgKSA/ICJGaXJzdCIgOiBFTVBUWV9TVFJJTkc7CiAgICAgICAgbXkgJHdoYXQgPQogICAgICAgICAgKCAkYWRkZWRfc2VtaWNvbG9uX2NvdW50ID4gMSApID8gInNlbWljb2xvbnMgd2VyZSIgOiAic2VtaWNvbG9uIHdhcyI7CiAgICAgICAgd3JpdGVfbG9nZmlsZV9lbnRyeSgiJGFkZGVkX3NlbWljb2xvbl9jb3VudCAkd2hhdCBhZGRlZDpcbiIpOwogICAgICAgIHdyaXRlX2xvZ2ZpbGVfZW50cnkoCiAgICAgICAgICAgICIgICRmaXJzdCBhdCBpbnB1dCBsaW5lICRmaXJzdF9hZGRlZF9zZW1pY29sb25fYXRcbiIpOwoKICAgICAgICBpZiAoICRhZGRlZF9zZW1pY29sb25fY291bnQgPiAxICkgewogICAgICAgICAgICB3cml0ZV9sb2dmaWxlX2VudHJ5KAogICAgICAgICAgICAgICAgIiAgIExhc3QgYXQgaW5wdXQgbGluZSAkbGFzdF9hZGRlZF9zZW1pY29sb25fYXRcbiIpOwogICAgICAgIH0KICAgICAgICB3cml0ZV9sb2dmaWxlX2VudHJ5KCIgIChVc2UgLW5hc2MgdG8gcHJldmVudCBzZW1pY29sb24gYWRkaXRpb24pXG4iKTsKICAgICAgICB3cml0ZV9sb2dmaWxlX2VudHJ5KCJcbiIpOwogICAgfQoKICAgIG15ICRkZWxldGVkX3NlbWljb2xvbl9jb3VudCAgICA9ICRzZWxmLT5bX2RlbGV0ZWRfc2VtaWNvbG9uX2NvdW50X107CiAgICBteSAkZmlyc3RfZGVsZXRlZF9zZW1pY29sb25fYXQgPSAkc2VsZi0+W19maXJzdF9kZWxldGVkX3NlbWljb2xvbl9hdF9dOwogICAgbXkgJGxhc3RfZGVsZXRlZF9zZW1pY29sb25fYXQgID0gJHNlbGYtPltfbGFzdF9kZWxldGVkX3NlbWljb2xvbl9hdF9dOwogICAgaWYgKCAkZGVsZXRlZF9zZW1pY29sb25fY291bnQgPiAwICkgewogICAgICAgIG15ICRmaXJzdCA9ICggJGRlbGV0ZWRfc2VtaWNvbG9uX2NvdW50ID4gMSApID8gIkZpcnN0IiA6IEVNUFRZX1NUUklORzsKICAgICAgICBteSAkd2hhdCA9CiAgICAgICAgICAoICRkZWxldGVkX3NlbWljb2xvbl9jb3VudCA+IDEgKQogICAgICAgICAgPyAic2VtaWNvbG9ucyB3ZXJlIgogICAgICAgICAgOiAic2VtaWNvbG9uIHdhcyI7CiAgICAgICAgd3JpdGVfbG9nZmlsZV9lbnRyeSgKICAgICAgICAgICAgIiRkZWxldGVkX3NlbWljb2xvbl9jb3VudCB1bm5lY2Vzc2FyeSAkd2hhdCBkZWxldGVkOlxuIik7CiAgICAgICAgd3JpdGVfbG9nZmlsZV9lbnRyeSgKICAgICAgICAgICAgIiAgJGZpcnN0IGF0IGlucHV0IGxpbmUgJGZpcnN0X2RlbGV0ZWRfc2VtaWNvbG9uX2F0XG4iKTsKCiAgICAgICAgaWYgKCAkZGVsZXRlZF9zZW1pY29sb25fY291bnQgPiAxICkgewogICAgICAgICAgICB3cml0ZV9sb2dmaWxlX2VudHJ5KAogICAgICAgICAgICAgICAgIiAgIExhc3QgYXQgaW5wdXQgbGluZSAkbGFzdF9kZWxldGVkX3NlbWljb2xvbl9hdFxuIik7CiAgICAgICAgfQogICAgICAgIHdyaXRlX2xvZ2ZpbGVfZW50cnkoIiAgKFVzZSAtbmRzbSB0byBwcmV2ZW50IHNlbWljb2xvbiBkZWxldGlvbilcbiIpOwogICAgICAgIHdyaXRlX2xvZ2ZpbGVfZW50cnkoIlxuIik7CiAgICB9CgogICAgbXkgJGVtYmVkZGVkX3RhYl9jb3VudCAgICA9ICRzZWxmLT5bX2VtYmVkZGVkX3RhYl9jb3VudF9dOwogICAgbXkgJGZpcnN0X2VtYmVkZGVkX3RhYl9hdCA9ICRzZWxmLT5bX2ZpcnN0X2VtYmVkZGVkX3RhYl9hdF9dOwogICAgbXkgJGxhc3RfZW1iZWRkZWRfdGFiX2F0ICA9ICRzZWxmLT5bX2xhc3RfZW1iZWRkZWRfdGFiX2F0X107CiAgICBpZiAoICRlbWJlZGRlZF90YWJfY291bnQgPiAwICkgewogICAgICAgIG15ICRmaXJzdCA9ICggJGVtYmVkZGVkX3RhYl9jb3VudCA+IDEgKSA/ICJGaXJzdCIgOiBFTVBUWV9TVFJJTkc7CiAgICAgICAgbXkgJHdoYXQgPQogICAgICAgICAgKCAkZW1iZWRkZWRfdGFiX2NvdW50ID4gMSApCiAgICAgICAgICA/ICJxdW90ZXMgb3IgcGF0dGVybnMiCiAgICAgICAgICA6ICJxdW90ZSBvciBwYXR0ZXJuIjsKICAgICAgICB3cml0ZV9sb2dmaWxlX2VudHJ5KCIkZW1iZWRkZWRfdGFiX2NvdW50ICR3aGF0IGhhZCBlbWJlZGRlZCB0YWJzOlxuIik7CiAgICAgICAgd3JpdGVfbG9nZmlsZV9lbnRyeSgKIlRoaXMgbWVhbnMgdGhlIGRpc3BsYXkgb2YgdGhpcyBzY3JpcHQgY291bGQgdmFyeSB3aXRoIGRldmljZSBvciBzb2Z0d2FyZVxuIgogICAgICAgICk7CiAgICAgICAgd3JpdGVfbG9nZmlsZV9lbnRyeSgiICAkZmlyc3QgYXQgaW5wdXQgbGluZSAkZmlyc3RfZW1iZWRkZWRfdGFiX2F0XG4iKTsKCiAgICAgICAgaWYgKCAkZW1iZWRkZWRfdGFiX2NvdW50ID4gMSApIHsKICAgICAgICAgICAgd3JpdGVfbG9nZmlsZV9lbnRyeSgKICAgICAgICAgICAgICAgICIgICBMYXN0IGF0IGlucHV0IGxpbmUgJGxhc3RfZW1iZWRkZWRfdGFiX2F0XG4iKTsKICAgICAgICB9CiAgICAgICAgd3JpdGVfbG9nZmlsZV9lbnRyeSgiXG4iKTsKICAgIH0KCiAgICBteSAkZmlyc3RfdGFiYmluZ19kaXNhZ3JlZW1lbnQgPSAkc2VsZi0+W19maXJzdF90YWJiaW5nX2Rpc2FncmVlbWVudF9dOwogICAgbXkgJGxhc3RfdGFiYmluZ19kaXNhZ3JlZW1lbnQgID0gJHNlbGYtPltfbGFzdF90YWJiaW5nX2Rpc2FncmVlbWVudF9dOwogICAgbXkgJGluX3RhYmJpbmdfZGlzYWdyZWVtZW50ICAgID0gJHNlbGYtPltfaW5fdGFiYmluZ19kaXNhZ3JlZW1lbnRfXTsKCiAgICBpZiAoJGZpcnN0X3RhYmJpbmdfZGlzYWdyZWVtZW50KSB7CiAgICAgICAgd3JpdGVfbG9nZmlsZV9lbnRyeSgKIkZpcnN0IGluZGVudGF0aW9uIGRpc2FncmVlbWVudCBzZWVuIGF0IGlucHV0IGxpbmUgJGZpcnN0X3RhYmJpbmdfZGlzYWdyZWVtZW50XG4iCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAkZmlyc3RfYnRkID0gJHNlbGYtPltfZmlyc3RfYnJhY2VfdGFiYmluZ19kaXNhZ3JlZW1lbnRfXTsKICAgIGlmICgkZmlyc3RfYnRkKSB7CiAgICAgICAgbXkgJG1zZyA9CiJGaXJzdCBjbG9zaW5nIGJyYWNlIGluZGVudGF0aW9uIGRpc2FncmVlbWVudCBzdGFydGVkIGF0IGlucHV0IGxpbmUgJGZpcnN0X2J0ZFxuIjsKICAgICAgICB3cml0ZV9sb2dmaWxlX2VudHJ5KCRtc2cpOwoKICAgICAgICAjIGxlYXZlIGEgaGludCBpbiB0aGUgLkVSUiBmaWxlIGlmIHRoZXJlIHdhcyBhIGJyYWNlIGVycm9yCiAgICAgICAgaWYgKCBnZXRfc2F3X2JyYWNlX2Vycm9yKCkgKSB7IHdhcm5pbmcoIk5PVEU6ICRtc2ciKSB9CiAgICB9CgogICAgbXkgJGluX2J0ZCA9ICRzZWxmLT5bX2luX2JyYWNlX3RhYmJpbmdfZGlzYWdyZWVtZW50X107CiAgICBpZiAoJGluX2J0ZCkgewogICAgICAgIG15ICRtc2cgPQoiRW5kaW5nIHdpdGggYnJhY2UgaW5kZW50YXRpb24gZGlzYWdyZWVtZW50IHdoaWNoIHN0YXJ0ZWQgYXQgaW5wdXQgbGluZSAkaW5fYnRkXG4iOwogICAgICAgIHdyaXRlX2xvZ2ZpbGVfZW50cnkoJG1zZyk7CgogICAgICAgICMgbGVhdmUgYSBoaW50IGluIHRoZSAuRVJSIGZpbGUgaWYgdGhlcmUgd2FzIGEgYnJhY2UgZXJyb3IKICAgICAgICBpZiAoIGdldF9zYXdfYnJhY2VfZXJyb3IoKSApIHsgd2FybmluZygiTk9URTogJG1zZyIpIH0KICAgIH0KCiAgICBpZiAoJGluX3RhYmJpbmdfZGlzYWdyZWVtZW50KSB7CiAgICAgICAgbXkgJG1zZyA9CiJFbmRpbmcgd2l0aCBpbmRlbnRhdGlvbiBkaXNhZ3JlZW1lbnQgd2hpY2ggc3RhcnRlZCBhdCBpbnB1dCBsaW5lICRpbl90YWJiaW5nX2Rpc2FncmVlbWVudFxuIjsKICAgICAgICB3cml0ZV9sb2dmaWxlX2VudHJ5KCRtc2cpOwogICAgfQogICAgZWxzZSB7CgogICAgICAgIGlmICgkbGFzdF90YWJiaW5nX2Rpc2FncmVlbWVudCkgewoKICAgICAgICAgICAgd3JpdGVfbG9nZmlsZV9lbnRyeSgKIkxhc3QgaW5kZW50YXRpb24gZGlzYWdyZWVtZW50IHNlZW4gYXQgaW5wdXQgbGluZSAkbGFzdF90YWJiaW5nX2Rpc2FncmVlbWVudFxuIgogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgd3JpdGVfbG9nZmlsZV9lbnRyeSgiTm8gaW5kZW50YXRpb24gZGlzYWdyZWVtZW50IHNlZW5cbiIpOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoJGZpcnN0X3RhYmJpbmdfZGlzYWdyZWVtZW50KSB7CiAgICAgICAgd3JpdGVfbG9nZmlsZV9lbnRyeSgKIk5vdGU6IEluZGVudGF0aW9uIGRpc2FncmVlbWVudCBkZXRlY3Rpb24gaXMgbm90IGFjY3VyYXRlIGZvciBvdXRkZW50aW5nIGFuZCAtbHAuXG4iCiAgICAgICAgKTsKICAgIH0KICAgIHdyaXRlX2xvZ2ZpbGVfZW50cnkoIlxuIik7CgogICAgbXkgJHZhbyA9ICRzZWxmLT5bX3ZlcnRpY2FsX2FsaWduZXJfb2JqZWN0X107CiAgICAkdmFvLT5yZXBvcnRfYW55dGhpbmdfdW51c3VhbCgpOwoKICAgICRmaWxlX3dyaXRlcl9vYmplY3QtPnJlcG9ydF9saW5lX2xlbmd0aF9lcnJvcnMoKTsKCiAgICAjIERlZmluZSB0aGUgZm9ybWF0dGVyIHNlbGYtY2hlY2sgZm9yIGNvbnZlcmdlbmNlLgogICAgJHNlbGYtPltfY29udmVyZ2VkX10gPSAkc2V2ZXJlX2Vycm9yCiAgICAgIHx8ICghJHNlbGYtPltfd2FudF9zZWNvbmRfaXRlcmF0aW9uX10KICAgICAgICAmJiAkZmlsZV93cml0ZXJfb2JqZWN0LT5nZXRfY29udmVyZ2VuY2VfY2hlY2soKSApCiAgICAgIHx8ICRyT3B0cy0+eydpbmRlbnQtb25seSd9OwoKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHdyYXB1cAoKfSAjIyBlbmQgcGFja2FnZSBQZXJsOjpUaWR5OjpGb3JtYXR0ZXIKMTsK</File>
        <File Location="Kernel/cpan-lib/Perl/Tidy/IndentationItem.pm" Permission="660" Encode="Base64">IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMKIyBUaGUgUGVybDo6VGlkeTo6SW5kZW50YXRpb25JdGVtIGNsYXNzIHN1cHBsaWVzIGl0ZW1zIHdoaWNoIGNvbnRhaW4KIyBob3cgbXVjaCB3aGl0ZXNwYWNlIHNob3VsZCBiZSB1c2VkIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUKIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnBhY2thZ2UgUGVybDo6VGlkeTo6SW5kZW50YXRpb25JdGVtOwp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgJFZFUlNJT04gPSAnMjAyNTAxMDUnOwoKQkVHSU4gewoKICAgICMgQXJyYXkgaW5kZXggbmFtZXMKICAgICMgRG8gbm90IGNvbWJpbmUgd2l0aCBvdGhlciBCRUdJTiBibG9ja3MgKGMxMDEpLgogICAgbXkgJGkgPSAwOwogICAgdXNlIGNvbnN0YW50IHsKICAgICAgICBfc3BhY2VzXyAgICAgICAgICAgICA9PiAkaSsrLAogICAgICAgIF9sZXZlbF8gICAgICAgICAgICAgID0+ICRpKyssCiAgICAgICAgX2NpX2xldmVsXyAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfYXZhaWxhYmxlX3NwYWNlc18gICA9PiAkaSsrLAogICAgICAgIF9jbG9zZWRfICAgICAgICAgICAgID0+ICRpKyssCiAgICAgICAgX2NvbW1hX2NvdW50XyAgICAgICAgPT4gJGkrKywKICAgICAgICBfbHBfaXRlbV9pbmRleF8gICAgICA9PiAkaSsrLAogICAgICAgIF9oYXZlX2NoaWxkXyAgICAgICAgID0+ICRpKyssCiAgICAgICAgX3JlY292ZXJhYmxlX3NwYWNlc18gPT4gJGkrKywKICAgICAgICBfYWxpZ25fc2Vxbm9fICAgICAgICA9PiAkaSsrLAogICAgICAgIF9tYXJrZWRfICAgICAgICAgICAgID0+ICRpKyssCiAgICAgICAgX0tfYmVnaW5fbGluZV8gICAgICAgPT4gJGkrKywKICAgICAgICBfYXJyb3dfY291bnRfICAgICAgICA9PiAkaSsrLAogICAgICAgIF9zdGFuZGFyZF9zcGFjZXNfICAgID0+ICRpKyssCiAgICAgICAgX0tfZXh0cmFfc3BhY2VfICAgICAgPT4gJGkrKywKICAgIH07Cn0gIyMgZW5kIEJFR0lOCgpzdWIgQVVUT0xPQUQgewoKICAgICMgQ2F0Y2ggYW55IHVuZGVmaW5lZCBzdWIgY2FsbHMgc28gdGhhdCB3ZSBhcmUgc3VyZSB0byBnZXQKICAgICMgc29tZSBkaWFnbm9zdGljIGluZm9ybWF0aW9uLiAgVGhpcyBzdWIgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZAogICAgIyBleGNlcHQgZm9yIGEgcHJvZ3JhbW1pbmcgZXJyb3IuCiAgICBvdXIgJEFVVE9MT0FEOwogICAgcmV0dXJuIGlmICggJEFVVE9MT0FEID1+IC9cYkRFU1RST1kkLyApOwogICAgbXkgKCAkcGtnLCAkZm5hbWUsICRsbm8gKSA9IGNhbGxlcigpOwogICAgbXkgJG15X3BhY2thZ2UgPSBfX1BBQ0tBR0VfXzsKICAgIHByaW50IHsqU1RERVJSfSA8PEVPTTsKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpFcnJvciBkZXRlY3RlZCBpbiBwYWNrYWdlICckbXlfcGFja2FnZScsIHZlcnNpb24gJFZFUlNJT04KUmVjZWl2ZWQgdW5leHBlY3RlZCBBVVRPTE9BRCBjYWxsIGZvciBzdWIgJyRBVVRPTE9BRCcKQ2FsbGVkIGZyb20gcGFja2FnZTogJyRwa2cnCkNhbGxlZCBmcm9tIEZpbGUgJyRmbmFtZScgIGF0IGxpbmUgJyRsbm8nClRoaXMgZXJyb3IgaXMgcHJvYmFibHkgZHVlIHRvIGEgcmVjZW50IHByb2dyYW1taW5nIGNoYW5nZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkVPTQogICAgZXhpdCAxOwp9ICMjIGVuZCBzdWIgQVVUT0xPQUQKCnN1YiBERVNUUk9ZIHsKCiAgICAjIHJlcXVpcmVkIHRvIGF2b2lkIGNhbGwgdG8gQVVUT0xPQUQgaW4gc29tZSB2ZXJzaW9ucyBvZiBwZXJsCn0KCnN1YiBuZXcgewoKICAgICMgQ3JlYXRlIGFuICdpbmRlbnRhdGlvbl9pdGVtJyB3aGljaCBkZXNjcmliZXMgb25lIGxldmVsIG9mIGxlYWRpbmcKICAgICMgd2hpdGVzcGFjZSB3aGVuIHRoZSAnLWxwJyBpbmRlbnRhdGlvbiBpcyB1c2VkLgogICAgbXkgKCAkY2xhc3MsICVpbnB1dF9oYXNoICkgPSBAXzsKCiAgICAjIERFRklOSVRJT05TOgogICAgIyBzcGFjZXMgICAgICAgICAgICAgPT4gICMgdG90YWwgbGVhZGluZyB3aGl0ZSBzcGFjZXMKICAgICMgbGV2ZWwgICAgICAgICAgICAgID0+ICAjIHRoZSBpbmRlbnRhdGlvbiAnbGV2ZWwnCiAgICAjIGNpX2xldmVsICAgICAgICAgICA9PiAgIyB0aGUgJ2NvbnRpbnVhdGlvbiBsZXZlbCcKICAgICMgYXZhaWxhYmxlX3NwYWNlcyAgID0+ICAjIGhvdyBtYW55IGxlZnQgc3BhY2VzIGF2YWlsYWJsZQogICAgIyAgICAgICAgICAgICAgICAgICAgICAgICMgZm9yIHRoaXMgbGV2ZWwKICAgICMgY2xvc2VkICAgICAgICAgICAgID0+ICAjIGluZGV4IHdoZXJlIHdlIHNhdyBjbG9zaW5nICd9JwogICAgIyBjb21tYV9jb3VudCAgICAgICAgPT4gICMgaG93IG1hbnkgY29tbWFzIGF0IHRoaXMgbGV2ZWw/CiAgICAjIGxwX2l0ZW1faW5kZXggICAgID0+ICAjIGluZGV4IGluIG91dHB1dCBiYXRjaCBsaXN0CiAgICAjIGhhdmVfY2hpbGQgICAgICAgICA9PiAgIyBhbnkgZGVwZW5kZW50cz8KICAgICMgcmVjb3ZlcmFibGVfc3BhY2VzID0+ICAjIGhvdyBtYW55IHNwYWNlcyB0byB0aGUgcmlnaHQKICAgICMgICAgICAgICAgICAgICAgICAgICAgICAjIHdlIHdvdWxkIGxpa2UgdG8gbW92ZSB0byBnZXQKICAgICMgICAgICAgICAgICAgICAgICAgICAgICAjIGFsaWdubWVudCAobmVnYXRpdmUgaWYgbGVmdCkKICAgICMgYWxpZ25fc2Vxbm8gICAgICAgID0+ICAjIGlmIHdlIGFyZSBhbGlnbmluZyB3aXRoIGFuIG9wZW5pbmcgc3RydWN0dXJlLAogICAgIyAgICAgICAgICAgICAgICAgICAgICAgICMgdGhpcyBpcyBpdHMgc2Vxbm8KICAgICMgbWFya2VkICAgICAgICAgICAgID0+ICAjIGlmIHZpc2l0ZWQgYnkgY29ycmVjdG9yIGxvZ2ljCiAgICAjIEtfYmVnaW5fbGluZSAgID0+ICAjIGZpcnN0IHRva2VuIGluZGV4IEsgb2YgdGhpcyBsZXZlbAogICAgIyBhcnJvd19jb3VudCAgICAgICAgPT4gICMgaG93IG1hbnkgPT4ncwoKICAgIG15ICRzZWxmID0gW107CiAgICBibGVzcyAkc2VsZiwgJGNsYXNzOwoKICAgICRzZWxmLT5bX3NwYWNlc19dICAgICAgICAgICAgID0gJGlucHV0X2hhc2h7c3BhY2VzfTsKICAgICRzZWxmLT5bX2xldmVsX10gICAgICAgICAgICAgID0gJGlucHV0X2hhc2h7bGV2ZWx9OwogICAgJHNlbGYtPltfY2lfbGV2ZWxfXSAgICAgICAgICAgPSAkaW5wdXRfaGFzaHtjaV9sZXZlbH07CiAgICAkc2VsZi0+W19hdmFpbGFibGVfc3BhY2VzX10gICA9ICRpbnB1dF9oYXNoe2F2YWlsYWJsZV9zcGFjZXN9OwogICAgJHNlbGYtPltfY2xvc2VkX10gICAgICAgICAgICAgPSAtMTsKICAgICRzZWxmLT5bX2NvbW1hX2NvdW50X10gICAgICAgID0gMDsKICAgICRzZWxmLT5bX2xwX2l0ZW1faW5kZXhfXSAgICAgID0gJGlucHV0X2hhc2h7bHBfaXRlbV9pbmRleH07CiAgICAkc2VsZi0+W19oYXZlX2NoaWxkX10gICAgICAgICA9IDA7CiAgICAkc2VsZi0+W19yZWNvdmVyYWJsZV9zcGFjZXNfXSA9IDA7CiAgICAkc2VsZi0+W19hbGlnbl9zZXFub19dICAgICAgICA9ICRpbnB1dF9oYXNoe2FsaWduX3NlcW5vfTsKICAgICRzZWxmLT5bX21hcmtlZF9dICAgICAgICAgICAgID0gMDsKICAgICRzZWxmLT5bX0tfYmVnaW5fbGluZV9dICAgICAgID0gJGlucHV0X2hhc2h7S19iZWdpbl9saW5lfTsKICAgICRzZWxmLT5bX2Fycm93X2NvdW50X10gICAgICAgID0gMDsKICAgICRzZWxmLT5bX3N0YW5kYXJkX3NwYWNlc19dICAgID0gJGlucHV0X2hhc2h7c3RhbmRhcmRfc3BhY2VzfTsKICAgICRzZWxmLT5bX0tfZXh0cmFfc3BhY2VfXSAgICAgID0gJGlucHV0X2hhc2h7S19leHRyYV9zcGFjZX07CgogICAgcmV0dXJuICRzZWxmOwp9ICMjIGVuZCBzdWIgbmV3CgpzdWIgcGVybWFuZW50bHlfZGVjcmVhc2VfYXZhaWxhYmxlX3NwYWNlcyB7CgogICAgIyBtYWtlIGEgcGVybWFuZW50IHJlZHVjdGlvbiBpbiB0aGUgYXZhaWxhYmxlIGluZGVudGF0aW9uIHNwYWNlcwogICAgIyBhdCBvbmUgaW5kZW50YXRpb24gaXRlbS4gIE5PVEU6IGlmIHRoZXJlIGFyZSBjaGlsZCBub2RlcywgdGhlaXIKICAgICMgdG90YWwgU1BBQ0VTIG11c3QgYmUgcmVkdWNlZCBieSB0aGUgY2FsbGVyLgoKICAgIG15ICggJHNlbGYsICRzcGFjZXNfbmVlZGVkICkgPSBAXzsKICAgIG15ICRhdmFpbGFibGVfc3BhY2VzID0gJHNlbGYtPmdldF9hdmFpbGFibGVfc3BhY2VzKCk7CiAgICBteSAkZGVsZXRlZF9zcGFjZXMgPQogICAgICAoICRhdmFpbGFibGVfc3BhY2VzID4gJHNwYWNlc19uZWVkZWQgKQogICAgICA/ICRzcGFjZXNfbmVlZGVkCiAgICAgIDogJGF2YWlsYWJsZV9zcGFjZXM7CgogICAgIyBGaXhlZCBmb3IgYzA4NTsgYSB6ZXJvIHZhbHVlIG11c3QgcmVtYWluIHVuY2hhbmdlZCB1bmxlc3MgdGhlIGNsb3NlZAogICAgIyBmbGFnIGhhcyBiZWVuIHNldC4KICAgIG15ICRjbG9zZWQgPSAkc2VsZi0+Z2V0X2Nsb3NlZCgpOwogICAgJHNlbGYtPmRlY3JlYXNlX2F2YWlsYWJsZV9zcGFjZXMoJGRlbGV0ZWRfc3BhY2VzKQogICAgICBpZiAoICRhdmFpbGFibGVfc3BhY2VzICE9IDAgfHwgJGNsb3NlZCA+PSAwICk7CiAgICAkc2VsZi0+ZGVjcmVhc2VfU1BBQ0VTKCRkZWxldGVkX3NwYWNlcyk7CiAgICAkc2VsZi0+c2V0X3JlY292ZXJhYmxlX3NwYWNlcygwKTsKCiAgICByZXR1cm4gJGRlbGV0ZWRfc3BhY2VzOwp9ICMjIGVuZCBzdWIgcGVybWFuZW50bHlfZGVjcmVhc2VfYXZhaWxhYmxlX3NwYWNlcwoKc3ViIHRlbnRhdGl2ZWx5X2RlY3JlYXNlX2F2YWlsYWJsZV9zcGFjZXMgewoKICAgICMgV2UgYXJlIGFza2VkIHRvIHRlbnRhdGl2ZWx5IGRlbGV0ZSAkc3BhY2VzX25lZWRlZCBvZiBpbmRlbnRhdGlvbgogICAgIyBmb3IgYW4gaW5kZW50YXRpb24gaXRlbS4gIFdlIG1heSB3YW50IHRvIHVuZG8gdGhpcyBsYXRlci4gIE5PVEU6IGlmCiAgICAjIHRoZXJlIGFyZSBjaGlsZCBub2RlcywgdGhlaXIgdG90YWwgU1BBQ0VTIG11c3QgYmUgcmVkdWNlZCBieSB0aGUKICAgICMgY2FsbGVyLgogICAgbXkgKCAkc2VsZiwgJHNwYWNlc19uZWVkZWQgKSA9IEBfOwogICAgbXkgJGF2YWlsYWJsZV9zcGFjZXMgPSAkc2VsZi0+Z2V0X2F2YWlsYWJsZV9zcGFjZXMoKTsKICAgIG15ICRkZWxldGVkX3NwYWNlcyA9CiAgICAgICggJGF2YWlsYWJsZV9zcGFjZXMgPiAkc3BhY2VzX25lZWRlZCApCiAgICAgID8gJHNwYWNlc19uZWVkZWQKICAgICAgOiAkYXZhaWxhYmxlX3NwYWNlczsKICAgICRzZWxmLT5kZWNyZWFzZV9hdmFpbGFibGVfc3BhY2VzKCRkZWxldGVkX3NwYWNlcyk7CiAgICAkc2VsZi0+ZGVjcmVhc2VfU1BBQ0VTKCRkZWxldGVkX3NwYWNlcyk7CiAgICAkc2VsZi0+aW5jcmVhc2VfcmVjb3ZlcmFibGVfc3BhY2VzKCRkZWxldGVkX3NwYWNlcyk7CiAgICByZXR1cm4gJGRlbGV0ZWRfc3BhY2VzOwp9ICMjIGVuZCBzdWIgdGVudGF0aXZlbHlfZGVjcmVhc2VfYXZhaWxhYmxlX3NwYWNlcwoKIyB0aW1lLWNyaXRpY2FsIHN1YgpzdWIgZ2V0X3NwYWNlcyB7CiAgICByZXR1cm4gJF9bMF0tPltfc3BhY2VzX107Cn0KCnN1YiBnZXRfc3RhbmRhcmRfc3BhY2VzIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICByZXR1cm4gJHNlbGYtPltfc3RhbmRhcmRfc3BhY2VzX107Cn0KCiMgdGltZS1jcml0aWNhbCBzdWIKc3ViIGdldF9tYXJrZWQgewogICAgcmV0dXJuICRfWzBdLT5bX21hcmtlZF9dOwp9CgpzdWIgc2V0X21hcmtlZCB7CiAgICBteSAoICRzZWxmLCAkdmFsdWUgKSA9IEBfOwogICAgaWYgKCBkZWZpbmVkKCR2YWx1ZSkgKSB7CiAgICAgICAgJHNlbGYtPltfbWFya2VkX10gPSAkdmFsdWU7CiAgICB9CiAgICByZXR1cm4gJHNlbGYtPltfbWFya2VkX107Cn0gIyMgZW5kIHN1YiBzZXRfbWFya2VkCgpzdWIgZ2V0X2F2YWlsYWJsZV9zcGFjZXMgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgIHJldHVybiAkc2VsZi0+W19hdmFpbGFibGVfc3BhY2VzX107Cn0KCnN1YiBkZWNyZWFzZV9TUEFDRVMgewogICAgbXkgKCAkc2VsZiwgJHZhbHVlICkgPSBAXzsKICAgIGlmICggZGVmaW5lZCgkdmFsdWUpICkgewogICAgICAgICRzZWxmLT5bX3NwYWNlc19dIC09ICR2YWx1ZTsKICAgIH0KICAgIHJldHVybiAkc2VsZi0+W19zcGFjZXNfXTsKfSAjIyBlbmQgc3ViIGRlY3JlYXNlX1NQQUNFUwoKc3ViIGRlY3JlYXNlX2F2YWlsYWJsZV9zcGFjZXMgewogICAgbXkgKCAkc2VsZiwgJHZhbHVlICkgPSBAXzsKCiAgICBpZiAoIGRlZmluZWQoJHZhbHVlKSApIHsKICAgICAgICAkc2VsZi0+W19hdmFpbGFibGVfc3BhY2VzX10gLT0gJHZhbHVlOwogICAgfQogICAgcmV0dXJuICRzZWxmLT5bX2F2YWlsYWJsZV9zcGFjZXNfXTsKfSAjIyBlbmQgc3ViIGRlY3JlYXNlX2F2YWlsYWJsZV9zcGFjZXMKCnN1YiBnZXRfYWxpZ25fc2Vxbm8gewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgIHJldHVybiAkc2VsZi0+W19hbGlnbl9zZXFub19dOwp9CgpzdWIgZ2V0X3JlY292ZXJhYmxlX3NwYWNlcyB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgcmV0dXJuICRzZWxmLT5bX3JlY292ZXJhYmxlX3NwYWNlc19dOwp9CgpzdWIgc2V0X3JlY292ZXJhYmxlX3NwYWNlcyB7CiAgICBteSAoICRzZWxmLCAkdmFsdWUgKSA9IEBfOwogICAgaWYgKCBkZWZpbmVkKCR2YWx1ZSkgKSB7CiAgICAgICAgJHNlbGYtPltfcmVjb3ZlcmFibGVfc3BhY2VzX10gPSAkdmFsdWU7CiAgICB9CiAgICByZXR1cm4gJHNlbGYtPltfcmVjb3ZlcmFibGVfc3BhY2VzX107Cn0gIyMgZW5kIHN1YiBzZXRfcmVjb3ZlcmFibGVfc3BhY2VzCgpzdWIgaW5jcmVhc2VfcmVjb3ZlcmFibGVfc3BhY2VzIHsKICAgIG15ICggJHNlbGYsICR2YWx1ZSApID0gQF87CiAgICBpZiAoIGRlZmluZWQoJHZhbHVlKSApIHsKICAgICAgICAkc2VsZi0+W19yZWNvdmVyYWJsZV9zcGFjZXNfXSArPSAkdmFsdWU7CiAgICB9CiAgICByZXR1cm4gJHNlbGYtPltfcmVjb3ZlcmFibGVfc3BhY2VzX107Cn0gIyMgZW5kIHN1YiBpbmNyZWFzZV9yZWNvdmVyYWJsZV9zcGFjZXMKCnN1YiBnZXRfY2lfbGV2ZWwgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgIHJldHVybiAkc2VsZi0+W19jaV9sZXZlbF9dOwp9CgpzdWIgZ2V0X2xldmVsIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICByZXR1cm4gJHNlbGYtPltfbGV2ZWxfXTsKfQoKc3ViIGdldF9zcGFjZXNfbGV2ZWxfY2kgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgIHJldHVybiBbICRzZWxmLT5bX3NwYWNlc19dLCAkc2VsZi0+W19sZXZlbF9dLCAkc2VsZi0+W19jaV9sZXZlbF9dIF07Cn0KCnN1YiBnZXRfbHBfaXRlbV9pbmRleCB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgcmV0dXJuICRzZWxmLT5bX2xwX2l0ZW1faW5kZXhfXTsKfQoKc3ViIGdldF9LX2JlZ2luX2xpbmUgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgIHJldHVybiAkc2VsZi0+W19LX2JlZ2luX2xpbmVfXTsKfQoKc3ViIGdldF9LX2V4dHJhX3NwYWNlIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICByZXR1cm4gJHNlbGYtPltfS19leHRyYV9zcGFjZV9dOwp9CgpzdWIgc2V0X2hhdmVfY2hpbGQgewogICAgbXkgKCAkc2VsZiwgJHZhbHVlICkgPSBAXzsKICAgIGlmICggZGVmaW5lZCgkdmFsdWUpICkgewogICAgICAgICRzZWxmLT5bX2hhdmVfY2hpbGRfXSA9ICR2YWx1ZTsKICAgIH0KICAgIHJldHVybiAkc2VsZi0+W19oYXZlX2NoaWxkX107Cn0gIyMgZW5kIHN1YiBzZXRfaGF2ZV9jaGlsZAoKc3ViIGdldF9oYXZlX2NoaWxkIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICByZXR1cm4gJHNlbGYtPltfaGF2ZV9jaGlsZF9dOwp9CgpzdWIgc2V0X2Fycm93X2NvdW50IHsKICAgIG15ICggJHNlbGYsICR2YWx1ZSApID0gQF87CiAgICBpZiAoIGRlZmluZWQoJHZhbHVlKSApIHsKICAgICAgICAkc2VsZi0+W19hcnJvd19jb3VudF9dID0gJHZhbHVlOwogICAgfQogICAgcmV0dXJuICRzZWxmLT5bX2Fycm93X2NvdW50X107Cn0gIyMgZW5kIHN1YiBzZXRfYXJyb3dfY291bnQKCnN1YiBnZXRfYXJyb3dfY291bnQgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgIHJldHVybiAkc2VsZi0+W19hcnJvd19jb3VudF9dOwp9CgpzdWIgc2V0X2NvbW1hX2NvdW50IHsKICAgIG15ICggJHNlbGYsICR2YWx1ZSApID0gQF87CiAgICBpZiAoIGRlZmluZWQoJHZhbHVlKSApIHsKICAgICAgICAkc2VsZi0+W19jb21tYV9jb3VudF9dID0gJHZhbHVlOwogICAgfQogICAgcmV0dXJuICRzZWxmLT5bX2NvbW1hX2NvdW50X107Cn0gIyMgZW5kIHN1YiBzZXRfY29tbWFfY291bnQKCnN1YiBnZXRfY29tbWFfY291bnQgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgIHJldHVybiAkc2VsZi0+W19jb21tYV9jb3VudF9dOwp9CgpzdWIgc2V0X2Nsb3NlZCB7CiAgICBteSAoICRzZWxmLCAkdmFsdWUgKSA9IEBfOwogICAgaWYgKCBkZWZpbmVkKCR2YWx1ZSkgKSB7CiAgICAgICAgJHNlbGYtPltfY2xvc2VkX10gPSAkdmFsdWU7CiAgICB9CiAgICByZXR1cm4gJHNlbGYtPltfY2xvc2VkX107Cn0gIyMgZW5kIHN1YiBzZXRfY2xvc2VkCgpzdWIgZ2V0X2Nsb3NlZCB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgcmV0dXJuICRzZWxmLT5bX2Nsb3NlZF9dOwp9CjE7Cg==</File>
        <File Location="Kernel/cpan-lib/Perl/Tidy/IOScalar.pm" Permission="660" Encode="Base64">IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMKIyBUaGlzIGlzIGEgc3RyaXBwZWQgZG93biB2ZXJzaW9uIG9mIElPOjpTY2FsYXIKIyBHaXZlbiBhIHJlZmVyZW5jZSB0byBhIHNjYWxhciwgaXQgc3VwcGxpZXMgZWl0aGVyOgojIGEgZ2V0bGluZSBtZXRob2Qgd2hpY2ggcmVhZHMgbGluZXMgKG1vZGU9J3InKSwgb3IKIyBhIHByaW50IG1ldGhvZCB3aGljaCByZWFkcyBsaW5lcyAobW9kZT0ndycpCiMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnBhY2thZ2UgUGVybDo6VGlkeTo6SU9TY2FsYXI7CnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIENhcnA7Cm91ciAkVkVSU0lPTiA9ICcyMDI1MDEwNSc7Cgp1c2UgY29uc3RhbnQgREVWRUxfTU9ERSAgID0+IDA7CnVzZSBjb25zdGFudCBFTVBUWV9TVFJJTkcgPT4gcXt9OwoKc3ViIEFVVE9MT0FEIHsKCiAgICAjIENhdGNoIGFueSB1bmRlZmluZWQgc3ViIGNhbGxzIHNvIHRoYXQgd2UgYXJlIHN1cmUgdG8gZ2V0CiAgICAjIHNvbWUgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbi4gIFRoaXMgc3ViIHNob3VsZCBuZXZlciBiZSBjYWxsZWQKICAgICMgZXhjZXB0IGZvciBhIHByb2dyYW1taW5nIGVycm9yLgogICAgb3VyICRBVVRPTE9BRDsKICAgIHJldHVybiBpZiAoICRBVVRPTE9BRCA9fiAvXGJERVNUUk9ZJC8gKTsKCiAgICAjIE9yaWdpbmFsbHkgdGhlcmUgd2FzIGEgZHVtbXkgc3ViIGNsb3NlLiBBbGwgY2FsbHMgdG8gaXQgc2hvdWxkIGhhdmUgYmVlbgogICAgIyBlbGltaW5hdGVkLCBidXQgZm9yIHNhZmV0eSB3ZSB3aWxsIGNoZWNrIGZvciB0aGVtIGhlcmUuCiAgICByZXR1cm4gMSBpZiAoICRBVVRPTE9BRCA9fiAvXGJjbG9zZSQvICYmICFERVZFTF9NT0RFICk7CiAgICBteSAoICRwa2csICRmbmFtZSwgJGxubyApID0gY2FsbGVyKCk7CiAgICBteSAkbXlfcGFja2FnZSA9IF9fUEFDS0FHRV9fOwogICAgcHJpbnQgeypTVERFUlJ9IDw8RU9NOwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkVycm9yIGRldGVjdGVkIGluIHBhY2thZ2UgJyRteV9wYWNrYWdlJywgdmVyc2lvbiAkVkVSU0lPTgpSZWNlaXZlZCB1bmV4cGVjdGVkIEFVVE9MT0FEIGNhbGwgZm9yIHN1YiAnJEFVVE9MT0FEJwpDYWxsZWQgZnJvbSBwYWNrYWdlOiAnJHBrZycKQ2FsbGVkIGZyb20gRmlsZSAnJGZuYW1lJyAgYXQgbGluZSAnJGxubycKVGhpcyBlcnJvciBpcyBwcm9iYWJseSBkdWUgdG8gYSByZWNlbnQgcHJvZ3JhbW1pbmcgY2hhbmdlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KRU9NCiAgICBleGl0IDE7Cn0gIyMgZW5kIHN1YiBBVVRPTE9BRAoKc3ViIERFU1RST1kgewoKICAgICMgcmVxdWlyZWQgdG8gYXZvaWQgY2FsbCB0byBBVVRPTE9BRCBpbiBzb21lIHZlcnNpb25zIG9mIHBlcmwKfQoKc3ViIG5ldyB7CiAgICBteSAoICRwYWNrYWdlLCAkcnNjYWxhciwgJG1vZGUgKSA9IEBfOwogICAgbXkgJHJlZiA9IHJlZigkcnNjYWxhcik7CiAgICBpZiAoICRyZWYgbmUgJ1NDQUxBUicgKSB7CiAgICAgICAgY29uZmVzcyA8PEVPTTsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmV4cGVjdGluZyByZWYgdG8gU0NBTEFSIGJ1dCBnb3QgcmVmIHRvICgkcmVmKTsgdHJhY2UgZm9sbG93czoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkVPTQoKICAgIH0KICAgIGlmICggJG1vZGUgZXEgJ3cnICkgewogICAgICAgICR7JHJzY2FsYXJ9ID0gRU1QVFlfU1RSSU5HOwogICAgICAgIHJldHVybiBibGVzcyBbICRyc2NhbGFyLCAkbW9kZSBdLCAkcGFja2FnZTsKICAgIH0KICAgIGVsc2lmICggJG1vZGUgZXEgJ3InICkgewoKICAgICAgICAjIENvbnZlcnQgYSBzY2FsYXIgdG8gYW4gYXJyYXkuCiAgICAgICAgIyBUaGlzIGF2b2lkcyBsb29raW5nIGZvciAiXG4iIG9uIGVhY2ggY2FsbCB0byBnZXRsaW5lCiAgICAgICAgbXkgQGFycmF5OwogICAgICAgIGlmICggJHJzY2FsYXIgJiYgJHskcnNjYWxhcn0gKSB7CiAgICAgICAgICAgIEBhcnJheSA9IHNwbGl0IC9eLywgJHskcnNjYWxhcn07CiAgICAgICAgfQogICAgICAgIG15ICRpX25leHQgPSAwOwogICAgICAgIHJldHVybiBibGVzcyBbIFxAYXJyYXksICRtb2RlLCAkaV9uZXh0IF0sICRwYWNrYWdlOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgY29uZmVzcyA8PEVPTTsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmV4cGVjdGluZyBtb2RlID0gJ3InIG9yICd3JyBidXQgZ290IG1vZGUgKCRtb2RlKTsgdHJhY2UgZm9sbG93czoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkVPTQogICAgfQp9ICMjIGVuZCBzdWIgbmV3CgpzdWIgZ2V0bGluZSB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgbXkgJG1vZGUgPSAkc2VsZi0+WzFdOwogICAgaWYgKCAkbW9kZSBuZSAncicgKSB7CiAgICAgICAgY29uZmVzcyA8PEVPTTsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmdldGxpbmUgY2FsbCByZXF1aXJlcyBtb2RlID0gJ3InIGJ1dCBtb2RlID0gKCRtb2RlKTsgdHJhY2UgZm9sbG93czoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkVPTQogICAgfQogICAgbXkgJGkgPSAkc2VsZi0+WzJdKys7CiAgICByZXR1cm4gJHNlbGYtPlswXS0+WyRpXTsKfSAjIyBlbmQgc3ViIGdldGxpbmUKCnN1YiBwcmludCB7CiAgICBteSAoICRzZWxmLCAkbXNnICkgPSBAXzsKICAgIG15ICRtb2RlID0gJHNlbGYtPlsxXTsKICAgIGlmICggJG1vZGUgbmUgJ3cnICkgewogICAgICAgIGNvbmZlc3MgPDxFT007Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpwcmludCBjYWxsIHJlcXVpcmVzIG1vZGUgPSAndycgYnV0IG1vZGUgPSAoJG1vZGUpOyB0cmFjZSBmb2xsb3dzOgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRU9NCiAgICB9CiAgICAkeyAkc2VsZi0+WzBdIH0gLj0gJG1zZzsKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHByaW50CjE7Cg==</File>
        <File Location="Kernel/cpan-lib/Perl/Tidy/HtmlWriter.pm" Permission="660" Encode="Base64">IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMKIyBUaGUgUGVybDo6VGlkeTo6SHRtbFdyaXRlciBjbGFzcyB3cml0ZXMgYSBjb3B5IG9mIHRoZSBpbnB1dCBzdHJlYW0gaW4gaHRtbAojCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKcGFja2FnZSBQZXJsOjpUaWR5OjpIdG1sV3JpdGVyOwp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cm91ciAkVkVSU0lPTiA9ICcyMDI1MDEwNSc7Cgp1c2UgQ2FycDsKdXNlIEVuZ2xpc2ggcXcoIC1ub19tYXRjaF92YXJzICk7CnVzZSBGaWxlOjpCYXNlbmFtZTsKdXNlIEZpbGU6OlRlbXAgcXcoKTsKCnVzZSBjb25zdGFudCBFTVBUWV9TVFJJTkcgPT4gcXt9Owp1c2UgY29uc3RhbnQgU1BBQ0UgICAgICAgID0+IHF7IH07Cgp7ICM8PDwgQSBub24taW5kZW50aW5nIGJyYWNlIHRvIGNvbnRhaW4gYWxsIGxleGljYWwgdmFyaWFibGVzCgojIGNsYXNzIHZhcmlhYmxlcwpteSAoCgogICAgIyBJTklUSUFMSVpFUjogQkVHSU4gYmxvY2sKICAgICRtaXNzaW5nX2h0bWxfZW50aXRpZXMsCiAgICAkbWlzc2luZ19wb2RfaHRtbCwKCiAgICAjIElOSVRJQUxJWkVSOiBCRUdJTiBibG9jawogICAgJXNob3J0X3RvX2xvbmdfbmFtZXMsCiAgICAldG9rZW5fc2hvcnRfbmFtZXMsCgogICAgIyBJTklUSUFMSVpFUjogc3ViIGNoZWNrX29wdGlvbnMKICAgICRyT3B0cywKICAgICRyT3B0c19odG1sX2VudGl0aWVzLAogICAgJGNzc19saW5rbmFtZSwKICAgICVodG1sX2JvbGQsCiAgICAlaHRtbF9jb2xvciwKICAgICVodG1sX2l0YWxpYywKCik7CgojIHJlcGxhY2UgdW5zYWZlIGNoYXJhY3RlcnMgd2l0aCBIVE1MIGVudGl0eSByZXByZXNlbnRhdGlvbiBpZiBIVE1MOjpFbnRpdGllcwojIGlzIGF2YWlsYWJsZQojeyBldmFsICJ1c2UgSFRNTDo6RW50aXRpZXMiOyAkbWlzc2luZ19odG1sX2VudGl0aWVzID0gJEA7IH0KCkJFR0lOIHsKCiAgICAkbWlzc2luZ19odG1sX2VudGl0aWVzID0gRU1QVFlfU1RSSU5HOwogICAgaWYgKCAhZXZhbCB7IHJlcXVpcmUgSFRNTDo6RW50aXRpZXM7IDEgfSApIHsKICAgICAgICAkbWlzc2luZ19odG1sX2VudGl0aWVzID0gJEVWQUxfRVJST1IgPyAkRVZBTF9FUlJPUiA6IDE7CiAgICB9CgogICAgJG1pc3NpbmdfcG9kX2h0bWwgPSBFTVBUWV9TVFJJTkc7CiAgICBpZiAoICFldmFsIHsgcmVxdWlyZSBQb2Q6Okh0bWw7IDEgfSApIHsKICAgICAgICAkbWlzc2luZ19wb2RfaHRtbCA9ICRFVkFMX0VSUk9SID8gJEVWQUxfRVJST1IgOiAxOwogICAgfQp9ICMjIGVuZCBCRUdJTgoKc3ViIEFVVE9MT0FEIHsKCiAgICAjIENhdGNoIGFueSB1bmRlZmluZWQgc3ViIGNhbGxzIHNvIHRoYXQgd2UgYXJlIHN1cmUgdG8gZ2V0CiAgICAjIHNvbWUgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbi4gIFRoaXMgc3ViIHNob3VsZCBuZXZlciBiZSBjYWxsZWQKICAgICMgZXhjZXB0IGZvciBhIHByb2dyYW1taW5nIGVycm9yLgogICAgb3VyICRBVVRPTE9BRDsKICAgIHJldHVybiBpZiAoICRBVVRPTE9BRCA9fiAvXGJERVNUUk9ZJC8gKTsKICAgIG15ICggJHBrZywgJGZuYW1lLCAkbG5vICkgPSBjYWxsZXIoKTsKICAgIG15ICRteV9wYWNrYWdlID0gX19QQUNLQUdFX187CiAgICBwcmludCB7KlNUREVSUn0gPDxFT007Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KRXJyb3IgZGV0ZWN0ZWQgaW4gcGFja2FnZSAnJG15X3BhY2thZ2UnLCB2ZXJzaW9uICRWRVJTSU9OClJlY2VpdmVkIHVuZXhwZWN0ZWQgQVVUT0xPQUQgY2FsbCBmb3Igc3ViICckQVVUT0xPQUQnCkNhbGxlZCBmcm9tIHBhY2thZ2U6ICckcGtnJwpDYWxsZWQgZnJvbSBGaWxlICckZm5hbWUnICBhdCBsaW5lICckbG5vJwpUaGlzIGVycm9yIGlzIHByb2JhYmx5IGR1ZSB0byBhIHJlY2VudCBwcm9ncmFtbWluZyBjaGFuZ2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpFT00KICAgIGV4aXQgMTsKfSAjIyBlbmQgc3ViIEFVVE9MT0FECgpzdWIgREVTVFJPWSB7CgogICAgIyByZXF1aXJlZCB0byBhdm9pZCBjYWxsIHRvIEFVVE9MT0FEIGluIHNvbWUgdmVyc2lvbnMgb2YgcGVybAp9CgpzdWIgbmV3IHsKCiAgICBteSAoICRjbGFzcywgQGFyZ2xpc3QgKSA9IEBfOwogICAgaWYgKCBAYXJnbGlzdCAlIDIgKSB7IGNyb2FrICJPZGQgbnVtYmVyIG9mIGl0ZW1zIGluIGFyZyBoYXNoIGxpc3RcbiIgfQoKICAgIG15ICVkZWZhdWx0cyA9ICgKICAgICAgICBpbnB1dF9maWxlICAgICAgICAgPT4gdW5kZWYsCiAgICAgICAgaHRtbF9maWxlICAgICAgICAgID0+IHVuZGVmLAogICAgICAgIGV4dGVuc2lvbiAgICAgICAgICA9PiB1bmRlZiwKICAgICAgICBodG1sX3RvY19leHRlbnNpb24gPT4gdW5kZWYsCiAgICAgICAgaHRtbF9zcmNfZXh0ZW5zaW9uID0+IHVuZGVmLAogICAgKTsKICAgIG15ICVhcmdzID0gKCAlZGVmYXVsdHMsIEBhcmdsaXN0ICk7CgogICAgbXkgJGlucHV0X2ZpbGUgICAgICAgICA9ICRhcmdze2lucHV0X2ZpbGV9OwogICAgbXkgJGh0bWxfZmlsZSAgICAgICAgICA9ICRhcmdze2h0bWxfZmlsZX07CiAgICBteSAkZXh0ZW5zaW9uICAgICAgICAgID0gJGFyZ3N7ZXh0ZW5zaW9ufTsKICAgIG15ICRodG1sX3RvY19leHRlbnNpb24gPSAkYXJnc3todG1sX3RvY19leHRlbnNpb259OwogICAgbXkgJGh0bWxfc3JjX2V4dGVuc2lvbiA9ICRhcmdze2h0bWxfc3JjX2V4dGVuc2lvbn07CgogICAgbXkgJGh0bWxfZmggPSBQZXJsOjpUaWR5OjpzdHJlYW1oYW5kbGUoICRodG1sX2ZpbGUsICd3JyApOwogICAgaWYgKCAhJGh0bWxfZmggKSB7CiAgICAgICAgUGVybDo6VGlkeTo6V2FybigiY2FuJ3Qgb3BlbiBodG1sIGZpbGUgJyRodG1sX2ZpbGUnXG4iKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBteSAkaHRtbF9maWxlX29wZW5lZCA9IDE7CgogICAgaWYgKCAhJGlucHV0X2ZpbGUgfHwgJGlucHV0X2ZpbGUgZXEgJy0nIHx8IHJlZigkaW5wdXRfZmlsZSkgKSB7CiAgICAgICAgJGlucHV0X2ZpbGUgPSAiTk9OQU1FIjsKICAgIH0KCiAgICAjIHdyaXRlIHRoZSB0YWJsZSBvZiBjb250ZW50cyB0byBhIHN0cmluZwogICAgbXkgJHRvY19zdHJpbmc7CiAgICBteSAkaHRtbF90b2NfZmggPSBQZXJsOjpUaWR5OjpJT1NjYWxhci0+bmV3KCBcJHRvY19zdHJpbmcsICd3JyApOwoKICAgIG15ICRodG1sX3ByZV9maDsKICAgIG15IEBwcmVfc3RyaW5nX3N0YWNrOwogICAgaWYgKCAkck9wdHMtPnsnaHRtbC1wcmUtb25seSd9ICkgewoKICAgICAgICAjIHByZSBzZWN0aW9uIGdvZXMgZGlyZWN0bHkgdG8gdGhlIG91dHB1dCBzdHJlYW0KICAgICAgICAkaHRtbF9wcmVfZmggPSAkaHRtbF9maDsKICAgICAgICAkaHRtbF9wcmVfZmgtPnByaW50KDw8IlBSRV9FTkQiKTsKPHByZT4KUFJFX0VORAogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgcHJlIHNlY3Rpb24gZ28gb3V0IHRvIGEgdGVtcG9yYXJ5IHN0cmluZwogICAgICAgIG15ICRwcmVfc3RyaW5nOwogICAgICAgICRodG1sX3ByZV9maCA9IFBlcmw6OlRpZHk6OklPU2NhbGFyLT5uZXcoIFwkcHJlX3N0cmluZywgJ3cnICk7CiAgICAgICAgcHVzaCBAcHJlX3N0cmluZ19zdGFjaywgXCRwcmVfc3RyaW5nOwogICAgfQoKICAgICMgcG9kIHRleHQgZ2V0cyBkaXZlcnRlZCBpZiB0aGUgJ3BvZDJodG1sJyBpcyB1c2VkCiAgICBteSAkaHRtbF9wb2RfZmg7CiAgICBteSAkcG9kX3N0cmluZzsKICAgIGlmICggJHJPcHRzLT57J3BvZDJodG1sJ30gKSB7CiAgICAgICAgaWYgKCAkck9wdHMtPnsnaHRtbC1wcmUtb25seSd9ICkgewogICAgICAgICAgICB1bmRlZiAkck9wdHMtPnsncG9kMmh0bWwnfTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmICgkbWlzc2luZ19wb2RfaHRtbCkgewogICAgICAgICAgICAgICAgUGVybDo6VGlkeTo6V2FybigKInVuYWJsZSB0byBmaW5kIFBvZDo6SHRtbDsgY2Fubm90IHVzZSBwb2QyaHRtbFxuLW5wb2QgZGlzYWJsZXMgdGhpcyBtZXNzYWdlXG4iCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgdW5kZWYgJHJPcHRzLT57J3BvZDJodG1sJ307CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkaHRtbF9wb2RfZmggPSBQZXJsOjpUaWR5OjpJT1NjYWxhci0+bmV3KCBcJHBvZF9zdHJpbmcsICd3JyApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIG15ICR0b2NfZmlsZW5hbWU7CiAgICBteSAkc3JjX2ZpbGVuYW1lOwogICAgaWYgKCAkck9wdHMtPnsnZnJhbWVzJ30gKSB7CiAgICAgICAgaWYgKCAhJGV4dGVuc2lvbiApIHsKICAgICAgICAgICAgUGVybDo6VGlkeTo6V2FybigKImNhbm5vdCB1c2UgZnJhbWVzIHdpdGhvdXQgYSBzcGVjaWZpZWQgb3V0cHV0IGV4dGVuc2lvbjsgaWdub3JpbmcgLWZybVxuIgogICAgICAgICAgICApOwogICAgICAgICAgICB1bmRlZiAkck9wdHMtPnsnZnJhbWVzJ307CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkdG9jX2ZpbGVuYW1lID0gJGlucHV0X2ZpbGUgLiAkaHRtbF90b2NfZXh0ZW5zaW9uIC4gJGV4dGVuc2lvbjsKICAgICAgICAgICAgJHNyY19maWxlbmFtZSA9ICRpbnB1dF9maWxlIC4gJGh0bWxfc3JjX2V4dGVuc2lvbiAuICRleHRlbnNpb247CiAgICAgICAgfQogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBPdXRwdXQgaXMgbm93IGRpcmVjdGVkIGFzIGZvbGxvd3M6CiAgICAjIGh0bWxfdG9jX2ZoIDwtLSB0YWJsZSBvZiBjb250ZW50cyBpdGVtcwogICAgIyBodG1sX3ByZV9maCA8LS0gdGhlIDxwcmU+IHNlY3Rpb24gb2YgZm9ybWF0dGVkIGNvZGUsIGV4Y2VwdDoKICAgICMgaHRtbF9wb2RfZmggPC0tIHBvZCBnb2VzIGhlcmUgd2l0aCB0aGUgcG9kMmh0bWwgb3B0aW9uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBteSAkdGl0bGUgPSAkck9wdHMtPnsndGl0bGUnfTsKICAgIGlmICggISR0aXRsZSApIHsKICAgICAgICAoICR0aXRsZSwgbXkgJHBhdGhfdXUgKSA9IGZpbGVwYXJzZSgkaW5wdXRfZmlsZSk7CiAgICB9CiAgICBteSAkdG9jX2l0ZW1fY291bnQgPSAwOwogICAgbXkgJGluX3RvY19wYWNrYWdlID0gRU1QVFlfU1RSSU5HOwogICAgbXkgJGxhc3RfbGV2ZWwgICAgID0gMDsKICAgIHJldHVybiBibGVzcyB7CiAgICAgICAgX2lucHV0X2ZpbGUgICAgICAgID0+ICRpbnB1dF9maWxlLCAgICAgICAgICAjIG5hbWUgb2YgaW5wdXQgZmlsZQogICAgICAgIF90aXRsZSAgICAgICAgICAgICA9PiAkdGl0bGUsICAgICAgICAgICAgICAgIyB0aXRsZSwgdW5lc2NhcGVkCiAgICAgICAgX2h0bWxfZmlsZSAgICAgICAgID0+ICRodG1sX2ZpbGUsICAgICAgICAgICAjIG5hbWUgb2YgLmh0bWwgb3V0cHV0IGZpbGUKICAgICAgICBfdG9jX2ZpbGVuYW1lICAgICAgPT4gJHRvY19maWxlbmFtZSwgICAgICAgICMgZm9yIGZyYW1lcyBvcHRpb24KICAgICAgICBfc3JjX2ZpbGVuYW1lICAgICAgPT4gJHNyY19maWxlbmFtZSwgICAgICAgICMgZm9yIGZyYW1lcyBvcHRpb24KICAgICAgICBfaHRtbF9maWxlX29wZW5lZCAgPT4gJGh0bWxfZmlsZV9vcGVuZWQsICAgICMgYSBmbGFnCiAgICAgICAgX2h0bWxfZmggICAgICAgICAgID0+ICRodG1sX2ZoLCAgICAgICAgICAgICAjIHRoZSBvdXRwdXQgc3RyZWFtCiAgICAgICAgX2h0bWxfcHJlX2ZoICAgICAgID0+ICRodG1sX3ByZV9maCwgICAgICAgICAjIHByZSBzZWN0aW9uIGdvZXMgaGVyZQogICAgICAgIF9ycHJlX3N0cmluZ19zdGFjayA9PiBcQHByZV9zdHJpbmdfc3RhY2ssICAgIyBzdGFjayBvZiBwcmUgc2VjdGlvbnMKICAgICAgICBfaHRtbF9wb2RfZmggICAgICAgPT4gJGh0bWxfcG9kX2ZoLCAgICAgICAgICMgcG9kIGdvZXMgaGVyZSBpZiBwb2QyaHRtbAogICAgICAgIF9ycG9kX3N0cmluZyAgICAgICA9PiBcJHBvZF9zdHJpbmcsICAgICAgICAgIyBzdHJpbmcgaG9sZGluZyBwb2QKICAgICAgICBfcG9kX2N1dF9jb3VudCAgICAgPT4gMCwgICAgICAgICAgICAgICAgICAgICMgaG93IG1hbnkgPWN1dCdzPwogICAgICAgIF9odG1sX3RvY19maCAgICAgICA9PiAkaHRtbF90b2NfZmgsICAgICAgICAgIyBmaCBmb3IgdGFibGUgb2YgY29udGVudHMKICAgICAgICBfcnRvY19zdHJpbmcgICAgICAgPT4gXCR0b2Nfc3RyaW5nLCAgICAgICAgICMgc3RyaW5nIGhvbGRpbmcgdG9jCiAgICAgICAgX3J0b2NfaXRlbV9jb3VudCAgID0+IFwkdG9jX2l0ZW1fY291bnQsICAgICAjIGhvdyBtYW55IHRvYyBpdGVtcwogICAgICAgIF9yaW5fdG9jX3BhY2thZ2UgICA9PiBcJGluX3RvY19wYWNrYWdlLCAgICAgIyBwYWNrYWdlIG5hbWUKICAgICAgICBfcnRvY19uYW1lX2NvdW50ICAgPT4ge30sICAgICAgICAgICAgICAgICAgICMgaGFzaCB0byB0cmFjayB1bmlxdWUgbmFtZXMKICAgICAgICBfcnBhY2thZ2Vfc3RhY2sgICAgPT4gW10sICAgICAgICAgICAgICAgICAgICMgc3RhY2sgdG8gY2hlY2sgZm9yIHBhY2thZ2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbmFtZSBjaGFuZ2VzCiAgICAgICAgX3JsYXN0X2xldmVsICAgICAgID0+IFwkbGFzdF9sZXZlbCwgICAgICAgICAjIGJyYWNlIGluZGVudGF0aW9uIGxldmVsCiAgICB9LCAkY2xhc3M7Cn0gIyMgZW5kIHN1YiBuZXcKCnN1YiBhZGRfdG9jX2l0ZW0gewoKICAgICMgQWRkIGFuIGl0ZW0gdG8gdGhlIGh0bWwgdGFibGUgb2YgY29udGVudHMuCiAgICAjIFRoaXMgaXMgY2FsbGVkIGV2ZW4gaWYgbm8gdGFibGUgb2YgY29udGVudHMgaXMgd3JpdHRlbiwKICAgICMgYmVjYXVzZSB3ZSBzdGlsbCB3YW50IHRvIHB1dCB0aGUgYW5jaG9ycyBpbiB0aGUgPHByZT4gdGV4dC4KICAgICMgV2UgYXJlIGdpdmVuIGFuIGFuY2hvciBuYW1lIGFuZCBpdHMgdHlwZTsgdHlwZXMgYXJlOgogICAgIyAgICAgICdwYWNrYWdlJywgJ3N1YicsICdfX0VORF9fJywgJ19fREFUQV9fJywgJ0VPRicKICAgICMgVGhlcmUgbXVzdCBiZSBhbiAnRU9GJyBjYWxsIGF0IHRoZSBlbmQgdG8gd3JhcCB0aGluZ3MgdXAuCiAgICBteSAoICRzZWxmLCAkbmFtZSwgJHR5cGUgKSA9IEBfOwogICAgbXkgJGh0bWxfdG9jX2ZoICAgICA9ICRzZWxmLT57X2h0bWxfdG9jX2ZofTsKICAgIG15ICRodG1sX3ByZV9maCAgICAgPSAkc2VsZi0+e19odG1sX3ByZV9maH07CiAgICBteSAkcnRvY19uYW1lX2NvdW50ID0gJHNlbGYtPntfcnRvY19uYW1lX2NvdW50fTsKICAgIG15ICRydG9jX2l0ZW1fY291bnQgPSAkc2VsZi0+e19ydG9jX2l0ZW1fY291bnR9OwogICAgbXkgJHJsYXN0X2xldmVsICAgICA9ICRzZWxmLT57X3JsYXN0X2xldmVsfTsKICAgIG15ICRyaW5fdG9jX3BhY2thZ2UgPSAkc2VsZi0+e19yaW5fdG9jX3BhY2thZ2V9OwogICAgbXkgJHJwYWNrYWdlX3N0YWNrICA9ICRzZWxmLT57X3JwYWNrYWdlX3N0YWNrfTsKCiAgICAjIHBhY2thZ2VzIGNvbnRhaW4gc3VibGlzdHMgb2Ygc3Vicywgc28gdG8gYXZvaWQgZXJyb3JzIGFsbCBwYWNrYWdlCiAgICAjIGl0ZW1zIGFyZSB3cml0dGVuIGFuZCBmaW5pc2hlZCB3aXRoIHRoZSBmb2xsb3dpbmcgcm91dGluZXMKICAgIG15ICRlbmRfcGFja2FnZV9saXN0ID0gc3ViIHsKICAgICAgICBpZiAoICR7JHJpbl90b2NfcGFja2FnZX0gKSB7CiAgICAgICAgICAgICRodG1sX3RvY19maC0+cHJpbnQoIjwvdWw+XG48L2xpPlxuIik7CiAgICAgICAgICAgICR7JHJpbl90b2NfcGFja2FnZX0gPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH07ICMjIGVuZCAkZW5kX3BhY2thZ2VfbGlzdCA9IHN1YgoKICAgIG15ICRzdGFydF9wYWNrYWdlX2xpc3QgPSBzdWIgewogICAgICAgIG15ICggJHVuaXF1ZV9uYW1lLCAkcGFja2FnZSApID0gQF87CiAgICAgICAgaWYgKCAkeyRyaW5fdG9jX3BhY2thZ2V9ICkgeyAkZW5kX3BhY2thZ2VfbGlzdC0+KCkgfQogICAgICAgICRodG1sX3RvY19maC0+cHJpbnQoPDxFT00pOwo8bGk+PGEgaHJlZj1cIiMkdW5pcXVlX25hbWVcIj5wYWNrYWdlICRwYWNrYWdlPC9hPgo8dWw+CkVPTQogICAgICAgICR7JHJpbl90b2NfcGFja2FnZX0gPSAkcGFja2FnZTsKICAgICAgICByZXR1cm47CiAgICB9OyAjIyBlbmQgJHN0YXJ0X3BhY2thZ2VfbGlzdCA9IHN1YgoKICAgICMgc3RhcnQgdGhlIHRhYmxlIG9mIGNvbnRlbnRzIG9uIHRoZSBmaXJzdCBpdGVtCiAgICBpZiAoICEkeyRydG9jX2l0ZW1fY291bnR9ICkgewoKICAgICAgICAjIGJ1dCBqdXN0IHF1aXQgaWYgd2UgaGl0IEVPRiB3aXRob3V0IGFueSBvdGhlciBlbnRyaWVzCiAgICAgICAgIyBpbiB0aGlzIGNhc2UsIHRoZXJlIHdpbGwgYmUgbm8gdG9jCiAgICAgICAgcmV0dXJuIGlmICggJHR5cGUgZXEgJ0VPRicgKTsKICAgICAgICAkaHRtbF90b2NfZmgtPnByaW50KDw8IlRPQ19FTkQiKTsKPCEtLSBCRUdJTiBDT0RFIElOREVYIC0tPjxhIG5hbWU9ImNvZGUtaW5kZXgiPjwvYT4KPHVsPgpUT0NfRU5ECiAgICB9CiAgICAkeyRydG9jX2l0ZW1fY291bnR9Kys7CgogICAgIyBtYWtlIGEgdW5pcXVlIGFuY2hvciBuYW1lIGZvciB0aGlzIGxvY2F0aW9uOgogICAgIyAgIC0gcGFja2FnZXMgZ2V0IGEgJ3BhY2thZ2UtJyBwcmVmaXgKICAgICMgICAtIHN1YnMgdXNlIHRoZWlyIG5hbWVzCiAgICBteSAkdW5pcXVlX25hbWUgPSAkbmFtZTsKICAgIGlmICggJHR5cGUgZXEgJ3BhY2thZ2UnICkgeyAkdW5pcXVlX25hbWUgPSAicGFja2FnZS0kbmFtZSIgfQoKICAgICMgYXBwZW5kICctMScsICctMicsIGV0YyBpZiBuZWNlc3NhcnkgdG8gbWFrZSB1bmlxdWU7IHRoaXMgd2lsbAogICAgIyBiZSB1bmlxdWUgYmVjYXVzZSBzdWJzIGFuZCBwYWNrYWdlcyBjYW5ub3QgaGF2ZSBhICctJwogICAgaWYgKCBteSAkY291bnQgPSAkcnRvY19uYW1lX2NvdW50LT57IGxjICR1bmlxdWVfbmFtZSB9KysgKSB7CiAgICAgICAgJHVuaXF1ZV9uYW1lIC49ICItJGNvdW50IjsKICAgIH0KCiAgICAjICAgLSBhbGwgbmFtZXMgZ2V0IHRlcm1pbmFsICctJyBpZiBwb2QyaHRtbCBpcyB1c2VkLCB0byBhdm9pZAogICAgIyAgICAgY29uZmxpY3RzIHdpdGggYW5jaG9yIG5hbWVzIGNyZWF0ZWQgYnkgcG9kMmh0bWwKICAgIGlmICggJHJPcHRzLT57J3BvZDJodG1sJ30gKSB7ICR1bmlxdWVfbmFtZSAuPSAnLScgfQoKICAgICMgc3RhcnQvc3RvcCBsaXN0cyBvZiBzdWJzCiAgICBpZiAoICR0eXBlIGVxICdzdWInICkgewogICAgICAgIG15ICRwYWNrYWdlID0gJHJwYWNrYWdlX3N0YWNrLT5bICR7JHJsYXN0X2xldmVsfSBdOwogICAgICAgIGlmICggISRwYWNrYWdlICkgeyAkcGFja2FnZSA9ICdtYWluJyB9CgogICAgICAgICMgaWYgd2UncmUgYWxyZWFkeSBpbiBhIHBhY2thZ2Uvc3ViIGxpc3QsIGJlIHN1cmUgaXRzIHRoZSByaWdodAogICAgICAgICMgcGFja2FnZSBvciBlbHNlIGNsb3NlIGl0CiAgICAgICAgaWYgKCAkeyRyaW5fdG9jX3BhY2thZ2V9ICYmICR7JHJpbl90b2NfcGFja2FnZX0gbmUgJHBhY2thZ2UgKSB7CiAgICAgICAgICAgICRlbmRfcGFja2FnZV9saXN0LT4oKTsKICAgICAgICB9CgogICAgICAgICMgc3RhcnQgYSBwYWNrYWdlL3N1YiBsaXN0IGlmIG5lY2Vzc2FyeQogICAgICAgIGlmICggISR7JHJpbl90b2NfcGFja2FnZX0gKSB7CiAgICAgICAgICAgICRzdGFydF9wYWNrYWdlX2xpc3QtPiggJHVuaXF1ZV9uYW1lLCAkcGFja2FnZSApOwogICAgICAgIH0KICAgIH0KCiAgICAjIG5vdyB3cml0ZSBhbiBlbnRyeSBpbiB0aGUgdG9jIGZvciB0aGlzIGl0ZW0KICAgIGlmICggJHR5cGUgZXEgJ3BhY2thZ2UnICkgewogICAgICAgICRzdGFydF9wYWNrYWdlX2xpc3QtPiggJHVuaXF1ZV9uYW1lLCAkbmFtZSApOwogICAgfQogICAgZWxzaWYgKCAkdHlwZSBlcSAnc3ViJyApIHsKICAgICAgICAkaHRtbF90b2NfZmgtPnByaW50KCI8bGk+PGEgaHJlZj1cIiMkdW5pcXVlX25hbWVcIj4kbmFtZTwvYT48L2xpPlxuIik7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkZW5kX3BhY2thZ2VfbGlzdC0+KCk7CiAgICAgICAgJGh0bWxfdG9jX2ZoLT5wcmludCgiPGxpPjxhIGhyZWY9XCIjJHVuaXF1ZV9uYW1lXCI+JG5hbWU8L2E+PC9saT5cbiIpOwogICAgfQoKICAgICMgd3JpdGUgdGhlIGFuY2hvciBpbiB0aGUgPHByZT4gc2VjdGlvbgogICAgJGh0bWxfcHJlX2ZoLT5wcmludCgiPGEgbmFtZT1cIiR1bmlxdWVfbmFtZVwiPjwvYT4iKTsKCiAgICAjIGVuZCB0aGUgdGFibGUgb2YgY29udGVudHMsIGlmIGFueSwgb24gdGhlIGVuZCBvZiBmaWxlCiAgICBpZiAoICR0eXBlIGVxICdFT0YnICkgewogICAgICAgICRodG1sX3RvY19maC0+cHJpbnQoPDwiVE9DX0VORCIpOwo8L3VsPgo8IS0tIEVORCBDT0RFIElOREVYIC0tPgpUT0NfRU5ECiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBhZGRfdG9jX2l0ZW0KCkJFR0lOIHsKCiAgICAjIFRoaXMgaXMgdGhlIG9mZmljaWFsIGxpc3Qgb2YgdG9rZW5zIHdoaWNoIG1heSBiZSBpZGVudGlmaWVkIGJ5IHRoZQogICAgIyB1c2VyLiAgTG9uZyBuYW1lcyBhcmUgdXNlZCBhcyBnZXRvcHQga2V5cy4gIFNob3J0IG5hbWVzIGFyZQogICAgIyBjb252ZW5pZW50IHNob3J0IGFiYnJldmlhdGlvbnMgZm9yIHNwZWNpZnlpbmcgaW5wdXQuICBTaG9ydCBuYW1lcwogICAgIyBzb21ld2hhdCByZXNlbWJsZSB0b2tlbiB0eXBlIGNoYXJhY3RlcnMsIGJ1dCBhcmUgb2Z0ZW4gZGlmZmVyZW50CiAgICAjIGJlY2F1c2UgdGhleSBtYXkgb25seSBiZSBhbHBoYW51bWVyaWMsIHRvIGFsbG93IGNvbW1hbmQgbGluZQogICAgIyBpbnB1dC4gIEFsc28sIG5vdGUgdGhhdCBiZWNhdXNlIG9mIGNhc2UgaW5zZW5zaXRpdml0eSBvZiBodG1sLAogICAgIyB0aGlzIHRhYmxlIG11c3QgYmUgaW4gYSBzaW5nbGUgY2FzZSBvbmx5IChJJ3ZlIGNob3NlbiB0byB1c2UgYWxsCiAgICAjIGxvd2VyIGNhc2UpLgogICAgIyBXaGVuIGFkZGluZyBORVdfVE9LRU5TOiB1cGRhdGUgdGhpcyBoYXNoIHRhYmxlCiAgICAjIHNob3J0IG5hbWVzID0+IGxvbmcgbmFtZXMKICAgICVzaG9ydF90b19sb25nX25hbWVzID0gKAogICAgICAgICduJyAgPT4gJ251bWVyaWMnLAogICAgICAgICdwJyAgPT4gJ3BhcmVuJywKICAgICAgICAncScgID0+ICdxdW90ZScsCiAgICAgICAgJ3MnICA9PiAnc3RydWN0dXJlJywKICAgICAgICAnYycgID0+ICdjb21tZW50JywKICAgICAgICAndicgID0+ICd2LXN0cmluZycsCiAgICAgICAgJ2NtJyA9PiAnY29tbWEnLAogICAgICAgICd3JyAgPT4gJ2JhcmV3b3JkJywKICAgICAgICAnY28nID0+ICdjb2xvbicsCiAgICAgICAgJ3B1JyA9PiAncHVuY3R1YXRpb24nLAogICAgICAgICdpJyAgPT4gJ2lkZW50aWZpZXInLAogICAgICAgICdqJyAgPT4gJ2xhYmVsJywKICAgICAgICAnaCcgID0+ICdoZXJlLWRvYy10YXJnZXQnLAogICAgICAgICdoaCcgPT4gJ2hlcmUtZG9jLXRleHQnLAogICAgICAgICdrJyAgPT4gJ2tleXdvcmQnLAogICAgICAgICdzYycgPT4gJ3NlbWljb2xvbicsCiAgICAgICAgJ20nICA9PiAnc3Vicm91dGluZScsCiAgICAgICAgJ3BkJyA9PiAncG9kLXRleHQnLAogICAgKTsKCiAgICAjIE5vdyB3ZSBoYXZlIHRvIG1hcCBhY3R1YWwgdG9rZW4gdHlwZXMgaW50byBvbmUgb2YgdGhlIGFib3ZlIHNob3J0CiAgICAjIG5hbWVzOyBhbnkgdG9rZW4gdHlwZXMgbm90IG1hcHBlZCB3aWxsIGdldCAncHVuY3R1YXRpb24nCiAgICAjIHByb3BlcnRpZXMuCgogICAgIyBUaGUgdmFsdWVzIG9mIHRoaXMgaGFzaCB0YWJsZSBjb3JyZXNwb25kIHRvIHRoZSBrZXlzIG9mIHRoZQogICAgIyBwcmV2aW91cyBoYXNoIHRhYmxlLgogICAgIyBUaGUga2V5cyBvZiB0aGlzIGhhc2ggdGFibGUgYXJlIHRva2VuIHR5cGVzIGFuZCBjYW4gYmUgc2VlbgogICAgIyBieSBydW5uaW5nIHdpdGggLS1kdW1wLXRva2VuLXR5cGVzICgtZHR0KS4KCiAgICAjIFdoZW4gYWRkaW5nIE5FV19UT0tFTlM6IHVwZGF0ZSB0aGlzIGhhc2ggdGFibGUKICAgICMgJHR5cGUgPT4gJHNob3J0X25hbWUKICAgICMgYzI1MDogY2hhbmdlZCAnTScgdG8gJ1MnCiAgICAldG9rZW5fc2hvcnRfbmFtZXMgPSAoCiAgICAgICAgJyMnICA9PiAnYycsCiAgICAgICAgJ24nICA9PiAnbicsCiAgICAgICAgJ3YnICA9PiAndicsCiAgICAgICAgJ2snICA9PiAnaycsCiAgICAgICAgJ0YnICA9PiAnaycsCiAgICAgICAgJ1EnICA9PiAncScsCiAgICAgICAgJ3EnICA9PiAncScsCiAgICAgICAgJ0onICA9PiAnaicsCiAgICAgICAgJ2onICA9PiAnaicsCiAgICAgICAgJ2gnICA9PiAnaCcsCiAgICAgICAgJ0gnICA9PiAnaGgnLAogICAgICAgICd3JyAgPT4gJ3cnLAogICAgICAgICcsJyAgPT4gJ2NtJywKICAgICAgICAnPT4nID0+ICdjbScsCiAgICAgICAgJzsnICA9PiAnc2MnLAogICAgICAgICc6JyAgPT4gJ2NvJywKICAgICAgICAnZicgID0+ICdzYycsCiAgICAgICAgJygnICA9PiAncCcsCiAgICAgICAgJyknICA9PiAncCcsCiAgICAgICAgJ1MnICA9PiAnbScsCiAgICAgICAgJ3BkJyA9PiAncGQnLAogICAgICAgICdBJyAgPT4gJ2NvJywKICAgICk7CgogICAgIyBUaGVzZSB0b2tlbiB0eXBlcyB3aWxsIGFsbCBiZSBjYWxsZWQgaWRlbnRpZmllcnMgZm9yIG5vdwogICAgIyBGaXggZm9yIGMyNTA6IGFkZGVkIG5ldyB0eXBlICdQJywgZm9ybWVybHkgJ2knCiAgICAjICggYnV0IHBhY2thZ2Ugc3RhdGVtZW50cyB3aWxsIGV2ZW50dWFsbHkgYmUgc3BsaXQgaW50byAnaycgYW5kICdpJykKICAgIG15IEBpZGVudGlmaWVyID0gcXc8IGkgdCBVIEMgWSBaIEcgUCA6OiBDT1JFOjo+OwogICAgQHRva2VuX3Nob3J0X25hbWVze0BpZGVudGlmaWVyfSA9ICgnaScpIHggc2NhbGFyKEBpZGVudGlmaWVyKTsKCiAgICAjIFRoZXNlIHRva2VuIHR5cGVzIHdpbGwgYmUgY2FsbGVkICdzdHJ1Y3R1cmUnCiAgICBteSBAc3RydWN0dXJlID0gcXc8IHsgfSA+OwogICAgQHRva2VuX3Nob3J0X25hbWVze0BzdHJ1Y3R1cmV9ID0gKCdzJykgeCBzY2FsYXIoQHN0cnVjdHVyZSk7CgogICAgIyBPTEQgTk9URVM6IHNhdmUgZm9yIHJlZmVyZW5jZQogICAgIyBBbnkgb2YgdGhlc2UgY291bGQgYmUgYWRkZWQgbGF0ZXIgaWYgaXQgd291bGQgYmUgdXNlZnVsLgogICAgIyBGb3Igbm93LCB0aGV5IHdpbGwgYnkgZGVmYXVsdCBiZWNvbWUgcHVuY3R1YXRpb24KICAgICMgICAgbXkgQGxpc3QgPSBxdzwgTCBSIFsgXSA+OwogICAgIyAgICBAdG9rZW5fbG9uZ19uYW1lc3tAbGlzdH0gPSAoJ25vbi1zdHJ1Y3R1cmUnKSB4IHNjYWxhcihAbGlzdCk7CiAgICAjCiAgICAjICAgIG15IEBsaXN0ID0gcXciCiAgICAjICAgICAgLyAvPSAqICo9ICoqICoqPSArICs9IC0gLT0gJSAlPSA9ICsrIC0tIDw8IDw8PSA+PiA+Pj0gcHAgcCBtIG1tCiAgICAjICAgICAgIjsKICAgICMgICAgQHRva2VuX2xvbmdfbmFtZXN7QGxpc3R9ID0gKCdtYXRoJykgeCBzY2FsYXIoQGxpc3QpOwogICAgIwogICAgIyAgICBteSBAbGlzdCA9IHF3IiAmICY9IH4gfj0gXiBePSB8IHw9ICI7CiAgICAjICAgIEB0b2tlbl9sb25nX25hbWVze0BsaXN0fSA9ICgnYml0JykgeCBzY2FsYXIoQGxpc3QpOwogICAgIwogICAgIyAgICBteSBAbGlzdCA9IHF3IiA9PSAhPSA8ID4gPD0gPD0+ICI7CiAgICAjICAgIEB0b2tlbl9sb25nX25hbWVze0BsaXN0fSA9ICgnbnVtZXJpY2FsLWNvbXBhcmlzb24nKSB4IHNjYWxhcihAbGlzdCk7CiAgICAjCiAgICAjICAgIG15IEBsaXN0ID0gcXciICYmIHx8ICEgJiY9IHx8PSAvLz0gIjsKICAgICMgICAgQHRva2VuX2xvbmdfbmFtZXN7QGxpc3R9ID0gKCdsb2dpY2FsJykgeCBzY2FsYXIoQGxpc3QpOwogICAgIwogICAgIyAgICBteSBAbGlzdCA9IHF3IiAuIC49ID1+ICF+IHggeD0gIjsKICAgICMgICAgQHRva2VuX2xvbmdfbmFtZXN7QGxpc3R9ID0gKCdzdHJpbmctb3BlcmF0b3JzJykgeCBzY2FsYXIoQGxpc3QpOwogICAgIwogICAgIyAgICAjIEluY29tcGxldGUuLgogICAgIyAgICBteSBAbGlzdCA9IHF3IiAuLiAtPiA8PiAuLi4gXCA/ICI7CiAgICAjICAgIEB0b2tlbl9sb25nX25hbWVze0BsaXN0fSA9ICgnbWlzYy1vcGVyYXRvcnMnKSB4IHNjYWxhcihAbGlzdCk7Cgp9ICMjIGVuZCBCRUdJTgoKc3ViIG1ha2VfZ2V0b3B0X2xvbmdfbmFtZXMgewogICAgbXkgKCAkY2xhc3MsICRyZ2V0b3B0X25hbWVzICkgPSBAXzsKICAgIGZvcmVhY2ggbXkgJHNob3J0X25hbWUgKCBrZXlzICVzaG9ydF90b19sb25nX25hbWVzICkgewogICAgICAgIG15ICRsb25nX25hbWUgPSAkc2hvcnRfdG9fbG9uZ19uYW1lc3skc2hvcnRfbmFtZX07CiAgICAgICAgcHVzaCBAeyRyZ2V0b3B0X25hbWVzfSwgImh0bWwtY29sb3ItJGxvbmdfbmFtZT1zIjsKICAgICAgICBwdXNoIEB7JHJnZXRvcHRfbmFtZXN9LCAiaHRtbC1pdGFsaWMtJGxvbmdfbmFtZSEiOwogICAgICAgIHB1c2ggQHskcmdldG9wdF9uYW1lc30sICJodG1sLWJvbGQtJGxvbmdfbmFtZSEiOwogICAgfQogICAgcHVzaCBAeyRyZ2V0b3B0X25hbWVzfSwgImh0bWwtY29sb3ItYmFja2dyb3VuZD1zIjsKICAgIHB1c2ggQHskcmdldG9wdF9uYW1lc30sICJodG1sLWxpbmtlZC1zdHlsZS1zaGVldD1zIjsKICAgIHB1c2ggQHskcmdldG9wdF9uYW1lc30sICJub2h0bWwtc3R5bGUtc2hlZXRzIjsKICAgIHB1c2ggQHskcmdldG9wdF9uYW1lc30sICJodG1sLXByZS1vbmx5IjsKICAgIHB1c2ggQHskcmdldG9wdF9uYW1lc30sICJodG1sLWxpbmUtbnVtYmVycyI7CiAgICBwdXNoIEB7JHJnZXRvcHRfbmFtZXN9LCAiaHRtbC1lbnRpdGllcyEiOwogICAgcHVzaCBAeyRyZ2V0b3B0X25hbWVzfSwgInN0eWxlc2hlZXQiOwogICAgcHVzaCBAeyRyZ2V0b3B0X25hbWVzfSwgImh0bWwtdGFibGUtb2YtY29udGVudHMhIjsKICAgIHB1c2ggQHskcmdldG9wdF9uYW1lc30sICJwb2QyaHRtbCEiOwogICAgcHVzaCBAeyRyZ2V0b3B0X25hbWVzfSwgImZyYW1lcyEiOwogICAgcHVzaCBAeyRyZ2V0b3B0X25hbWVzfSwgImh0bWwtdG9jLWV4dGVuc2lvbj1zIjsKICAgIHB1c2ggQHskcmdldG9wdF9uYW1lc30sICJodG1sLXNyYy1leHRlbnNpb249cyI7CgogICAgIyBQb2Q6Okh0bWwgcGFyYW1ldGVyczoKICAgIHB1c2ggQHskcmdldG9wdF9uYW1lc30sICJiYWNrbGluaz1zIjsKICAgIHB1c2ggQHskcmdldG9wdF9uYW1lc30sICJjYWNoZWRpcj1zIjsKICAgIHB1c2ggQHskcmdldG9wdF9uYW1lc30sICJodG1scm9vdD1zIjsKICAgIHB1c2ggQHskcmdldG9wdF9uYW1lc30sICJsaWJwb2RzPXMiOwogICAgcHVzaCBAeyRyZ2V0b3B0X25hbWVzfSwgInBvZHBhdGg9cyI7CiAgICBwdXNoIEB7JHJnZXRvcHRfbmFtZXN9LCAicG9kcm9vdD1zIjsKICAgIHB1c2ggQHskcmdldG9wdF9uYW1lc30sICJ0aXRsZT1zIjsKCiAgICAjIFBvZDo6SHRtbCBwYXJhbWV0ZXJzIHdpdGggbGVhZGluZyAncG9kJyB3aGljaCB3aWxsIGJlIHJlbW92ZWQKICAgICMgYmVmb3JlIHRoZSBjYWxsIHRvIFBvZDo6SHRtbAogICAgcHVzaCBAeyRyZ2V0b3B0X25hbWVzfSwgInBvZHF1aWV0ISI7CiAgICBwdXNoIEB7JHJnZXRvcHRfbmFtZXN9LCAicG9kdmVyYm9zZSEiOwogICAgcHVzaCBAeyRyZ2V0b3B0X25hbWVzfSwgInBvZHJlY3Vyc2UhIjsKICAgIHB1c2ggQHskcmdldG9wdF9uYW1lc30sICJwb2RmbHVzaCI7CiAgICBwdXNoIEB7JHJnZXRvcHRfbmFtZXN9LCAicG9kaGVhZGVyISI7CiAgICBwdXNoIEB7JHJnZXRvcHRfbmFtZXN9LCAicG9kaW5kZXghIjsKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIG1ha2VfZ2V0b3B0X2xvbmdfbmFtZXMKCnN1YiBtYWtlX2FiYnJldmlhdGVkX25hbWVzIHsKCiAgICAjIFdlJ3JlIGFwcGVuZGluZyB0aGluZ3MgbGlrZSB0aGlzIHRvIHRoZSBleHBhbnNpb24gbGlzdDoKICAgICMgICAgICAnaGNjJyAgICA9PiBbcXcoaHRtbC1jb2xvci1jb21tZW50KV0sCiAgICAjICAgICAgJ2hjaycgICAgPT4gW3F3KGh0bWwtY29sb3Ita2V5d29yZCldLAogICAgIyAgZXRjCiAgICBteSAoICRjbGFzcywgJHJleHBhbnNpb24gKSA9IEBfOwoKICAgICMgYWJicmV2aWF0aW9ucyBmb3IgY29sb3IvYm9sZC9pdGFsaWMgcHJvcGVydGllcwogICAgZm9yZWFjaCBteSAkc2hvcnRfbmFtZSAoIGtleXMgJXNob3J0X3RvX2xvbmdfbmFtZXMgKSB7CiAgICAgICAgbXkgJGxvbmdfbmFtZSA9ICRzaG9ydF90b19sb25nX25hbWVzeyRzaG9ydF9uYW1lfTsKICAgICAgICAkeyRyZXhwYW5zaW9ufXsiaGMkc2hvcnRfbmFtZSJ9ICA9IFsiaHRtbC1jb2xvci0kbG9uZ19uYW1lIl07CiAgICAgICAgJHskcmV4cGFuc2lvbn17ImhiJHNob3J0X25hbWUifSAgPSBbImh0bWwtYm9sZC0kbG9uZ19uYW1lIl07CiAgICAgICAgJHskcmV4cGFuc2lvbn17ImhpJHNob3J0X25hbWUifSAgPSBbImh0bWwtaXRhbGljLSRsb25nX25hbWUiXTsKICAgICAgICAkeyRyZXhwYW5zaW9ufXsibmhiJHNob3J0X25hbWUifSA9IFsibm9odG1sLWJvbGQtJGxvbmdfbmFtZSJdOwogICAgICAgICR7JHJleHBhbnNpb259eyJuaGkkc2hvcnRfbmFtZSJ9ID0gWyJub2h0bWwtaXRhbGljLSRsb25nX25hbWUiXTsKICAgIH0KCiAgICAjIGFiYnJldmlhdGlvbnMgZm9yIGFsbCBvdGhlciBodG1sIG9wdGlvbnMKICAgICR7JHJleHBhbnNpb259eyJoY2JnIn0gID0gWyJodG1sLWNvbG9yLWJhY2tncm91bmQiXTsKICAgICR7JHJleHBhbnNpb259eyJwcmUifSAgID0gWyJodG1sLXByZS1vbmx5Il07CiAgICAkeyRyZXhwYW5zaW9ufXsidG9jIn0gICA9IFsiaHRtbC10YWJsZS1vZi1jb250ZW50cyJdOwogICAgJHskcmV4cGFuc2lvbn17Im50b2MifSAgPSBbIm5vaHRtbC10YWJsZS1vZi1jb250ZW50cyJdOwogICAgJHskcmV4cGFuc2lvbn17Im5ubiJ9ICAgPSBbImh0bWwtbGluZS1udW1iZXJzIl07CiAgICAkeyRyZXhwYW5zaW9ufXsiaGVudCJ9ICA9IFsiaHRtbC1lbnRpdGllcyJdOwogICAgJHskcmV4cGFuc2lvbn17Im5oZW50In0gPSBbIm5vaHRtbC1lbnRpdGllcyJdOwogICAgJHskcmV4cGFuc2lvbn17ImNzcyJ9ICAgPSBbImh0bWwtbGlua2VkLXN0eWxlLXNoZWV0Il07CiAgICAkeyRyZXhwYW5zaW9ufXsibnNzIn0gICA9IFsibm9odG1sLXN0eWxlLXNoZWV0cyJdOwogICAgJHskcmV4cGFuc2lvbn17InNzIn0gICAgPSBbInN0eWxlc2hlZXQiXTsKICAgICR7JHJleHBhbnNpb259eyJwb2QifSAgID0gWyJwb2QyaHRtbCJdOwogICAgJHskcmV4cGFuc2lvbn17Im5wb2QifSAgPSBbIm5vcG9kMmh0bWwiXTsKICAgICR7JHJleHBhbnNpb259eyJmcm0ifSAgID0gWyJmcmFtZXMiXTsKICAgICR7JHJleHBhbnNpb259eyJuZnJtIn0gID0gWyJub2ZyYW1lcyJdOwogICAgJHskcmV4cGFuc2lvbn17InRleHQifSAgPSBbImh0bWwtdG9jLWV4dGVuc2lvbiJdOwogICAgJHskcmV4cGFuc2lvbn17InNleHQifSAgPSBbImh0bWwtc3JjLWV4dGVuc2lvbiJdOwogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgbWFrZV9hYmJyZXZpYXRlZF9uYW1lcwoKc3ViIGNoZWNrX29wdGlvbnMgewoKICAgICMgVGhpcyB3aWxsIGJlIGNhbGxlZCBvbmNlIGFmdGVyIG9wdGlvbnMgaGF2ZSBiZWVuIHBhcnNlZAogICAgIyBOb3RlIHRoYXQgd2UgYXJlIGRlZmluaW5nIHRoZSBwYWNrYWdlIHZhcmlhYmxlICRyT3B0cyBoZXJlOgogICAgKCBteSAkY2xhc3MsICRyT3B0cyApID0gQF87CgogICAgIyBYMTEgY29sb3IgbmFtZXMgZm9yIGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBzZWVtZWQgdG8gbG9vayBvawogICAgIyAodGhlc2UgY29sb3IgbmFtZXMgYXJlIG9ubHkgdXNlZCBmb3IgcHJvZ3JhbW1pbmcgY2xhcml0eTsgdGhlIGhleAogICAgIyBudW1iZXJzIGFyZSBhY3R1YWxseSB3cml0dGVuKQojIyAgdXNlIGNvbnN0YW50IFNhZGRsZUJyb3duICAgPT4gIiM4QjQ1MTMiOwogICAgdXNlIGNvbnN0YW50IEZvcmVzdEdyZWVuICAgPT4gIiMyMjhCMjIiOwogICAgdXNlIGNvbnN0YW50IG1hZ2VudGE0ICAgICAgPT4gIiM4QjAwOEIiOwogICAgdXNlIGNvbnN0YW50IEluZGlhblJlZDMgICAgPT4gIiNDRDU1NTUiOwogICAgdXNlIGNvbnN0YW50IERlZXBTa3lCbHVlNCAgPT4gIiMwMDY4OEIiOwogICAgdXNlIGNvbnN0YW50IE1lZGl1bU9yY2hpZDMgPT4gIiNCNDUyQ0QiOwogICAgdXNlIGNvbnN0YW50IGJsYWNrICAgICAgICAgPT4gIiMwMDAwMDAiOwogICAgdXNlIGNvbnN0YW50IHdoaXRlICAgICAgICAgPT4gIiNGRkZGRkYiOwogICAgdXNlIGNvbnN0YW50IHJlZCAgICAgICAgICAgPT4gIiNGRjAwMDAiOwoKICAgICMgc2V0IGRlZmF1bHQgY29sb3IsIGJvbGQsIGl0YWxpYyBwcm9wZXJ0aWVzCiAgICAjIGFueXRoaW5nIG5vdCBsaXN0ZWQgaGVyZSB3aWxsIGJlIGdpdmVuIHRoZSBkZWZhdWx0IChwdW5jdHVhdGlvbikgY29sb3IgLS0KICAgICMgdGhlc2UgdHlwZXMgY3VycmVudGx5IG5vdCBsaXN0ZWQgYW5kIGdldCBkZWZhdWx0OiB3cyBwdSBzIHNjIGNtIGNvIHAKICAgICMgV2hlbiBhZGRpbmcgTkVXX1RPS0VOUzogYWRkIGFuIGVudHJ5IGhlcmUgaWYgeW91IGRvbid0IHdhbnQgZGVmYXVsdHMKCiAgICAjIHNldF9kZWZhdWx0X3Byb3BlcnRpZXMoICRzaG9ydF9uYW1lLCBkZWZhdWx0X2NvbG9yLCBib2xkPywgaXRhbGljPyApOwogICAgc2V0X2RlZmF1bHRfcHJvcGVydGllcyggJ2MnLCAgRm9yZXN0R3JlZW4sICAgMCwgMCApOwogICAgc2V0X2RlZmF1bHRfcHJvcGVydGllcyggJ3BkJywgRm9yZXN0R3JlZW4sICAgMCwgMSApOwogICAgc2V0X2RlZmF1bHRfcHJvcGVydGllcyggJ2snLCAgbWFnZW50YTQsICAgICAgMSwgMCApOyAgICAjIHdhcyBTYWRkbGVCcm93bgogICAgc2V0X2RlZmF1bHRfcHJvcGVydGllcyggJ3EnLCAgSW5kaWFuUmVkMywgICAgMCwgMCApOwogICAgc2V0X2RlZmF1bHRfcHJvcGVydGllcyggJ2hoJywgSW5kaWFuUmVkMywgICAgMCwgMSApOwogICAgc2V0X2RlZmF1bHRfcHJvcGVydGllcyggJ2gnLCAgSW5kaWFuUmVkMywgICAgMSwgMCApOwogICAgc2V0X2RlZmF1bHRfcHJvcGVydGllcyggJ2knLCAgRGVlcFNreUJsdWU0LCAgMCwgMCApOwogICAgc2V0X2RlZmF1bHRfcHJvcGVydGllcyggJ3cnLCAgYmxhY2ssICAgICAgICAgMCwgMCApOwogICAgc2V0X2RlZmF1bHRfcHJvcGVydGllcyggJ24nLCAgTWVkaXVtT3JjaGlkMywgMCwgMCApOwogICAgc2V0X2RlZmF1bHRfcHJvcGVydGllcyggJ3YnLCAgTWVkaXVtT3JjaGlkMywgMCwgMCApOwogICAgc2V0X2RlZmF1bHRfcHJvcGVydGllcyggJ2onLCAgSW5kaWFuUmVkMywgICAgMSwgMCApOwogICAgc2V0X2RlZmF1bHRfcHJvcGVydGllcyggJ20nLCAgcmVkLCAgICAgICAgICAgMSwgMCApOwoKICAgIHNldF9kZWZhdWx0X2NvbG9yKCAnaHRtbC1jb2xvci1iYWNrZ3JvdW5kJywgIHdoaXRlICk7CiAgICBzZXRfZGVmYXVsdF9jb2xvciggJ2h0bWwtY29sb3ItcHVuY3R1YXRpb24nLCBibGFjayApOwoKICAgICMgc2V0dXAgcHJvcGVydHkgbG9va3VwIHRhYmxlcyBmb3IgdG9rZW5zIGJhc2VkIG9uIHRoZWlyIHNob3J0IG5hbWVzCiAgICAjIGV2ZXJ5IHRva2VuIHR5cGUgaGFzIGEgc2hvcnQgbmFtZSwgYW5kIHdpbGwgdXNlIHRoZXNlIHRhYmxlcwogICAgIyB0byBkbyB0aGUgaHRtbCBtYXJrdXAKICAgIGZvcmVhY2ggbXkgJHNob3J0X25hbWUgKCBrZXlzICVzaG9ydF90b19sb25nX25hbWVzICkgewogICAgICAgIG15ICRsb25nX25hbWUgPSAkc2hvcnRfdG9fbG9uZ19uYW1lc3skc2hvcnRfbmFtZX07CiAgICAgICAgJGh0bWxfY29sb3J7JHNob3J0X25hbWV9ICA9ICRyT3B0cy0+eyJodG1sLWNvbG9yLSRsb25nX25hbWUifTsKICAgICAgICAkaHRtbF9ib2xkeyRzaG9ydF9uYW1lfSAgID0gJHJPcHRzLT57Imh0bWwtYm9sZC0kbG9uZ19uYW1lIn07CiAgICAgICAgJGh0bWxfaXRhbGljeyRzaG9ydF9uYW1lfSA9ICRyT3B0cy0+eyJodG1sLWl0YWxpYy0kbG9uZ19uYW1lIn07CiAgICB9CgogICAgIyB3cml0ZSBzdHlsZSBzaGVldCB0byBTVERPVVQgYW5kIGRpZSBpZiByZXF1ZXN0ZWQKICAgIGlmICggZGVmaW5lZCggJHJPcHRzLT57J3N0eWxlc2hlZXQnfSApICkgewogICAgICAgIHdyaXRlX3N0eWxlX3NoZWV0X2ZpbGUoJy0nKTsKICAgICAgICBQZXJsOjpUaWR5OjpFeGl0KDApOwogICAgfQoKICAgICMgbWFrZSBzdXJlIHVzZXIgZ2l2ZXMgYSBmaWxlIG5hbWUgYWZ0ZXIgLWNzcwogICAgJGNzc19saW5rbmFtZSA9IEVNUFRZX1NUUklORzsKICAgIGlmICggZGVmaW5lZCggJHJPcHRzLT57J2h0bWwtbGlua2VkLXN0eWxlLXNoZWV0J30gKSApIHsKICAgICAgICAkY3NzX2xpbmtuYW1lID0gJHJPcHRzLT57J2h0bWwtbGlua2VkLXN0eWxlLXNoZWV0J307CiAgICAgICAgaWYgKCAkY3NzX2xpbmtuYW1lID1+IC9eLS8gKSB7CiAgICAgICAgICAgIFBlcmw6OlRpZHk6OkRpZSgiWW91IG11c3Qgc3BlY2lmeSBhIHZhbGlkIGZpbGVuYW1lIGFmdGVyIC1jc3NcbiIpOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGZvciBjb25mbGljdAogICAgaWYgKCAkY3NzX2xpbmtuYW1lICYmICRyT3B0cy0+eydub2h0bWwtc3R5bGUtc2hlZXRzJ30gKSB7CiAgICAgICAgJHJPcHRzLT57J25vaHRtbC1zdHlsZS1zaGVldHMnfSA9IDA7CiAgICAgICAgUGVybDo6VGlkeTo6V2FybigKICAgICAgICAgICAgIllvdSBjYW4ndCBzcGVjaWZ5IGJvdGggLWNzcyBhbmQgLW5zczsgLW5zcyBpZ25vcmVkXG4iKTsKICAgIH0KCiAgICAjIHdyaXRlIGEgc3R5bGUgc2hlZXQgZmlsZSBpZiBuZWNlc3NhcnkKICAgIGlmICgkY3NzX2xpbmtuYW1lKSB7CgogICAgICAgICMgaWYgdGhlIHNlbGVjdGVkIGZpbGVuYW1lIGV4aXN0cywgZG9uJ3Qgd3JpdGUsIGJlY2F1c2UgdXNlciBtYXkKICAgICAgICAjIGhhdmUgZG9uZSBzb21lIHdvcmsgYnkgaGFuZCB0byBjcmVhdGUgaXQ7IHVzZSBiYWNrdXAgbmFtZSBpbnN0ZWFkCiAgICAgICAgIyBBbHNvLCB0aGlzIHdpbGwgYXZvaWQgYSBwb3RlbnRpYWwgZGlzYXN0ZXIgaW4gd2hpY2ggdGhlIHVzZXIKICAgICAgICAjIGZvcmdldHMgdG8gc3BlY2lmeSB0aGUgc3R5bGUgc2hlZXQsIGxpa2UgdGhpczoKICAgICAgICAjICAgIHBlcmx0aWR5IC1odG1sIC1jc3MgbXlmaWxlMS5wbCBteWZpbGUyLnBsCiAgICAgICAgIyBUaGlzIHdvdWxkIGNhdXNlIG15ZmlsZTEucGwgdG8gcGFyc2VkIGFzIHRoZSBzdHlsZSBzaGVldCBieSBHZXRPcHRzCiAgICAgICAgaWYgKCAhLWUgJGNzc19saW5rbmFtZSApIHsKICAgICAgICAgICAgd3JpdGVfc3R5bGVfc2hlZXRfZmlsZSgkY3NzX2xpbmtuYW1lKTsKICAgICAgICB9CiAgICB9CiAgICAkck9wdHNfaHRtbF9lbnRpdGllcyA9ICRyT3B0cy0+eydodG1sLWVudGl0aWVzJ307CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBjaGVja19vcHRpb25zCgpzdWIgd3JpdGVfc3R5bGVfc2hlZXRfZmlsZSB7CgogICAgbXkgJGZpbGVuYW1lID0gc2hpZnQ7CiAgICBteSAkZmggICAgICAgPSBJTzo6RmlsZS0+bmV3KCI+ICRmaWxlbmFtZSIpOwogICAgaWYgKCAhJGZoICkgewogICAgICAgIFBlcmw6OlRpZHk6OkRpZSgiY2FuJ3Qgb3BlbiAkZmlsZW5hbWU6ICRPU19FUlJPUlxuIik7CiAgICB9CiAgICB3cml0ZV9zdHlsZV9zaGVldF9kYXRhKCRmaCk7CiAgICBpZiAoICRmaC0+Y2FuKCdjbG9zZScpICYmICRmaWxlbmFtZSBuZSAnLScgJiYgIXJlZigkZmlsZW5hbWUpICkgewogICAgICAgICRmaC0+Y2xvc2UoKQogICAgICAgICAgb3IKICAgICAgICAgIFBlcmw6OlRpZHk6Oldhcm4oImNhbid0IGNsb3NlIHN0eWxlIHNoZWV0ICckZmlsZW5hbWUnIDogJE9TX0VSUk9SXG4iKTsKICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHdyaXRlX3N0eWxlX3NoZWV0X2ZpbGUKCnN1YiB3cml0ZV9zdHlsZV9zaGVldF9kYXRhIHsKCiAgICAjIHdyaXRlIHRoZSBzdHlsZSBzaGVldCBkYXRhIHRvIGFuIG9wZW4gZmlsZSBoYW5kbGUKICAgIG15ICRmaCA9IHNoaWZ0OwoKICAgIG15ICRiZ19jb2xvciAgID0gJHJPcHRzLT57J2h0bWwtY29sb3ItYmFja2dyb3VuZCd9OwogICAgbXkgJHRleHRfY29sb3IgPSAkck9wdHMtPnsnaHRtbC1jb2xvci1wdW5jdHVhdGlvbid9OwoKICAgICMgcHJlLWJnY29sb3IgaXMgbmV3LCBhbmQgbWF5IG5vdCBiZSBkZWZpbmVkCiAgICBteSAkcHJlX2JnX2NvbG9yID0gJHJPcHRzLT57J2h0bWwtcHJlLWNvbG9yLWJhY2tncm91bmQnfTsKICAgICRwcmVfYmdfY29sb3IgPSAkYmdfY29sb3IgdW5sZXNzICRwcmVfYmdfY29sb3I7CgogICAgJGZoLT5wcmludCg8PCJFT00iKTsKLyogZGVmYXVsdCBzdHlsZSBzaGVldCBnZW5lcmF0ZWQgYnkgcGVybHRpZHkgKi8KYm9keSB7YmFja2dyb3VuZDogJGJnX2NvbG9yOyBjb2xvcjogJHRleHRfY29sb3J9CnByZSB7IGNvbG9yOiAkdGV4dF9jb2xvcjsKICAgICAgYmFja2dyb3VuZDogJHByZV9iZ19jb2xvcjsKICAgICAgZm9udC1mYW1pbHk6IGNvdXJpZXI7CiAgICB9CgpFT00KCiAgICBmb3JlYWNoIG15ICRzaG9ydF9uYW1lICggc29ydCBrZXlzICVzaG9ydF90b19sb25nX25hbWVzICkgewogICAgICAgIG15ICRsb25nX25hbWUgPSAkc2hvcnRfdG9fbG9uZ19uYW1lc3skc2hvcnRfbmFtZX07CgogICAgICAgIG15ICRhYmJyZXYgPSAnLicgLiAkc2hvcnRfbmFtZTsKICAgICAgICBpZiAoIGxlbmd0aCgkc2hvcnRfbmFtZSkgPT0gMSApIHsgJGFiYnJldiAuPSBTUEFDRSB9ICAgICMgZm9yIGFsaWdubWVudAogICAgICAgIG15ICRjb2xvciA9ICRodG1sX2NvbG9yeyRzaG9ydF9uYW1lfTsKICAgICAgICBpZiAoICFkZWZpbmVkKCRjb2xvcikgKSB7ICRjb2xvciA9ICR0ZXh0X2NvbG9yIH0KICAgICAgICAkZmgtPnByaW50KCIkYWJicmV2IFx7IGNvbG9yOiAkY29sb3I7Iik7CgogICAgICAgIGlmICggJGh0bWxfYm9sZHskc2hvcnRfbmFtZX0gKSB7CiAgICAgICAgICAgICRmaC0+cHJpbnQoIiBmb250LXdlaWdodDpib2xkOyIpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkaHRtbF9pdGFsaWN7JHNob3J0X25hbWV9ICkgewogICAgICAgICAgICAkZmgtPnByaW50KCIgZm9udC1zdHlsZTppdGFsaWM7Iik7CiAgICAgICAgfQogICAgICAgICRmaC0+cHJpbnQoIn0gLyogJGxvbmdfbmFtZSAqL1xuIik7CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiB3cml0ZV9zdHlsZV9zaGVldF9kYXRhCgpzdWIgc2V0X2RlZmF1bHRfY29sb3IgewoKICAgICMgbWFrZSBzdXJlIHRoYXQgb3B0aW9ucyBoYXNoICRyT3B0cy0+eyRrZXl9IGNvbnRhaW5zIGEgdmFsaWQgY29sb3IKICAgIG15ICggJGtleSwgJGNvbG9yICkgPSBAXzsKICAgIGlmICggJHJPcHRzLT57JGtleX0gKSB7ICRjb2xvciA9ICRyT3B0cy0+eyRrZXl9IH0KICAgICRyT3B0cy0+eyRrZXl9ID0gY2hlY2tfUkdCKCRjb2xvcik7CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBzZXRfZGVmYXVsdF9jb2xvcgoKc3ViIGNoZWNrX1JHQiB7CgogICAgIyBpZiBjb2xvciBpcyBhIDYgZGlnaXQgaGV4IFJHQiB2YWx1ZSwgcHJlcGVuZCBhICMsIG90aGVyd2lzZQogICAgIyBhc3N1bWUgdGhhdCBpdCBpcyBhIHZhbGlkIGFzY2lpIGNvbG9yIG5hbWUKICAgIG15ICgkY29sb3IpID0gQF87CiAgICBpZiAoICRjb2xvciA9fiAvXlswLTlhLWZBLUZdezYsNn0kLyApIHsgJGNvbG9yID0gIiMkY29sb3IiIH0KICAgIHJldHVybiAkY29sb3I7Cn0gIyMgZW5kIHN1YiBjaGVja19SR0IKCnN1YiBzZXRfZGVmYXVsdF9wcm9wZXJ0aWVzIHsKICAgIG15ICggJHNob3J0X25hbWUsICRjb2xvciwgJGJvbGQsICRpdGFsaWMgKSA9IEBfOwoKICAgIHNldF9kZWZhdWx0X2NvbG9yKCAiaHRtbC1jb2xvci0kc2hvcnRfdG9fbG9uZ19uYW1lc3skc2hvcnRfbmFtZX0iLCAkY29sb3IgKTsKICAgIG15ICRrZXk7CiAgICAka2V5ICAgICAgICAgICA9ICJodG1sLWJvbGQtJHNob3J0X3RvX2xvbmdfbmFtZXN7JHNob3J0X25hbWV9IjsKICAgICRyT3B0cy0+eyRrZXl9ID0gZGVmaW5lZCggJHJPcHRzLT57JGtleX0gKSA/ICRyT3B0cy0+eyRrZXl9IDogJGJvbGQ7CiAgICAka2V5ICAgICAgICAgICA9ICJodG1sLWl0YWxpYy0kc2hvcnRfdG9fbG9uZ19uYW1lc3skc2hvcnRfbmFtZX0iOwogICAgJHJPcHRzLT57JGtleX0gPSBkZWZpbmVkKCAkck9wdHMtPnska2V5fSApID8gJHJPcHRzLT57JGtleX0gOiAkaXRhbGljOwogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgc2V0X2RlZmF1bHRfcHJvcGVydGllcwoKc3ViIHBvZF90b19odG1sIHsKCiAgICAjIFVzZSBQb2Q6Okh0bWwgdG8gcHJvY2VzcyB0aGUgcG9kIGFuZCBtYWtlIHRoZSBwYWdlCiAgICAjIHRoZW4gbWVyZ2UgdGhlIHBlcmx0aWR5IGNvZGUgc2VjdGlvbnMgaW50byBpdC4KICAgICMgcmV0dXJuIDEgaWYgc3VjY2VzcywgMCBvdGhlcndpc2UKICAgIG15ICggJHNlbGYsICRwb2Rfc3RyaW5nLCAkY3NzX3N0cmluZywgJHRvY19zdHJpbmcsICRycHJlX3N0cmluZ19zdGFjayApID0KICAgICAgQF87CiAgICBteSAkdGl0bGUgICAgICAgID0gJHNlbGYtPntfdGl0bGV9OwogICAgbXkgJHN1Y2Nlc3NfZmxhZyA9IDA7CgogICAgIyBkb24ndCB0cnkgdG8gdXNlIHBvZDJodG1sIGlmIG5vIHBvZAogICAgaWYgKCAhJHBvZF9zdHJpbmcgKSB7CiAgICAgICAgcmV0dXJuICRzdWNjZXNzX2ZsYWc7CiAgICB9CgogICAgIyBQb2Q6Okh0bWwgcmVxdWlyZXMgYSByZWFsIHRlbXBvcmFyeSBmaWxlbmFtZQogICAgbXkgKCAkZmhfdG1wLCAkdG1wZmlsZSApID0gRmlsZTo6VGVtcDo6dGVtcGZpbGUoKTsKICAgIGlmICggISRmaF90bXAgKSB7CiAgICAgICAgUGVybDo6VGlkeTo6V2FybigKICAgICAgICAgICAgInVuYWJsZSB0byBvcGVuIHRlbXBvcmFyeSBmaWxlICR0bXBmaWxlOyBjYW5ub3QgdXNlIHBvZDJodG1sXG4iKTsKICAgICAgICByZXR1cm4gJHN1Y2Nlc3NfZmxhZzsKICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFdhcm5pbmc6IGEgdGVtcG9yYXJ5IGZpbGUgaXMgb3Blbjsgd2UgaGF2ZSB0byBjbGVhbiB1cCBpZgogICAgIyB0aGluZ3MgZ28gYmFkLiAgRnJvbSBoZXJlIG9uIGFsbCByZXR1cm5zIHNob3VsZCBiZSBieSBnb2luZyB0bwogICAgIyBSRVRVUk4gc28gdGhhdCB0aGUgdGVtcG9yYXJ5IGZpbGUgZ2V0cyB1bmxpbmtlZC4KICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAjIHdyaXRlIHRoZSBwb2QgdGV4dCB0byB0aGUgdGVtcG9yYXJ5IGZpbGUKICAgICRmaF90bXAtPnByaW50KCRwb2Rfc3RyaW5nKTsKCiAgICBpZiAoICEkZmhfdG1wLT5jbG9zZSgpICkgewogICAgICAgIFBlcmw6OlRpZHk6Oldhcm4oCiAgICAgICAgICAgICJ1bmFibGUgdG8gY2xvc2UgdGVtcG9yYXJ5IGZpbGUgJHRtcGZpbGU7IGNhbm5vdCB1c2UgcG9kMmh0bWxcbiIpOwogICAgICAgIHJldHVybiAkc3VjY2Vzc19mbGFnOwogICAgfQoKICAgICMgSGFuZCBvZmYgdGhlIHBvZCB0byBwb2QyaHRtbC4KICAgICMgTm90ZSB0aGF0IHdlIGNhbiB1c2UgdGhlIHNhbWUgdGVtcG9yYXJ5IGZpbGVuYW1lIGZvciBpbnB1dCBhbmQgb3V0cHV0CiAgICAjIGJlY2F1c2Ugb2YgdGhlIHdheSBwb2QyaHRtbCB3b3Jrcy4KICAgIHsKCiAgICAgICAgbXkgQGFyZ3M7CiAgICAgICAgcHVzaCBAYXJncywgIi0taW5maWxlPSR0bXBmaWxlIiwgIi0tb3V0ZmlsZT0kdG1wZmlsZSIsICItLXRpdGxlPSR0aXRsZSI7CgogICAgICAgICMgRmxhZ3Mgd2l0aCBzdHJpbmcgYXJnczoKICAgICAgICAjICJiYWNrbGluaz1zIiwgImNhY2hlZGlyPXMiLCAiaHRtbHJvb3Q9cyIsICJsaWJwb2RzPXMiLAogICAgICAgICMgInBvZHBhdGg9cyIsICJwb2Ryb290PXMiCiAgICAgICAgIyBOb3RlOiAtY3NzPXMgaXMgaGFuZGxlZCBieSBwZXJsdGlkeSBpdHNlbGYKICAgICAgICBmb3JlYWNoCiAgICAgICAgICBteSAka3cgKHF3KCBiYWNrbGluayBjYWNoZWRpciBodG1scm9vdCBsaWJwb2RzIHBvZHBhdGggcG9kcm9vdCApKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKCAkck9wdHMtPnska3d9ICkgeyBwdXNoIEBhcmdzLCAiLS0ka3c9JHJPcHRzLT57JGt3fSIgfQogICAgICAgIH0KCiAgICAgICAgIyBUb2dnbGUgc3dpdGNoZXM7IHRoZXNlIGhhdmUgZXh0cmEgbGVhZGluZyAncG9kJwogICAgICAgICMgImhlYWRlciEiLCAiaW5kZXghIiwgInJlY3Vyc2UhIiwgInF1aWV0ISIsICJ2ZXJib3NlISIKICAgICAgICBmb3JlYWNoCiAgICAgICAgICBteSAka3cgKHF3KCBwb2RoZWFkZXIgcG9kaW5kZXggcG9kcmVjdXJzZSBwb2RxdWlldCBwb2R2ZXJib3NlICkpCiAgICAgICAgewogICAgICAgICAgICBteSAka3dkID0gJGt3OyAgICAjIGFsbG93cyB1cyB0byBzdHJpcCAncG9kJwogICAgICAgICAgICBpZiAgICAoICRyT3B0cy0+eyRrd30gKSB7ICRrd2QgPX4gcy9ecG9kLy87IHB1c2ggQGFyZ3MsICItLSRrd2QiIH0KICAgICAgICAgICAgZWxzaWYgKCBkZWZpbmVkKCAkck9wdHMtPnska3d9ICkgKSB7CiAgICAgICAgICAgICAgICAka3dkID1+IHMvXnBvZC8vOwogICAgICAgICAgICAgICAgcHVzaCBAYXJncywgIi0tbm8ka3dkIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICMgdXNlciBkaWQgbm90IHNldCB0aGlzIGtleXdvcmQKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyAiZmx1c2giLAogICAgICAgIG15ICRrdyA9ICdwb2RmbHVzaCc7CiAgICAgICAgaWYgKCAkck9wdHMtPnska3d9ICkgeyAka3cgPX4gcy9ecG9kLy87IHB1c2ggQGFyZ3MsICItLSRrdyIgfQoKICAgICAgICAjIE11c3QgY2xlYW4gdXAgaWYgcG9kMmh0bWwgZGllcyAoaXQgY2FuKTsKICAgICAgICAjIEJlIGNhcmVmdWwgbm90IHRvIG92ZXJ3cml0ZSBjYWxsZXJzIF9fRElFX18gcm91dGluZQogICAgICAgIGxvY2FsICRTSUd7X19ESUVfX30gPSBzdWIgewogICAgICAgICAgICB1bmxpbmsoJHRtcGZpbGUpIGlmIC1lICR0bXBmaWxlOwogICAgICAgICAgICBQZXJsOjpUaWR5OjpEaWUoICRfWzBdICk7CiAgICAgICAgfTsKCiAgICAgICAgUG9kOjpIdG1sOjpwb2QyaHRtbChAYXJncyk7CiAgICB9CiAgICAkZmhfdG1wID0gSU86OkZpbGUtPm5ldyggJHRtcGZpbGUsICdyJyApOwogICAgaWYgKCAhJGZoX3RtcCApIHsKCiAgICAgICAgIyB0aGlzIGVycm9yIHNob3VsZG4ndCBoYXBwZW4gLi4uIHdlIGp1c3QgdXNlZCB0aGlzIGZpbGVuYW1lCiAgICAgICAgUGVybDo6VGlkeTo6V2FybigKICAgICAgICAgICAgInVuYWJsZSB0byBvcGVuIHRlbXBvcmFyeSBmaWxlICR0bXBmaWxlOyBjYW5ub3QgdXNlIHBvZDJodG1sXG4iKTsKICAgICAgICByZXR1cm4gJHN1Y2Nlc3NfZmxhZzsKICAgIH0KCiAgICBteSAkaHRtbF9maCA9ICRzZWxmLT57X2h0bWxfZmh9OwogICAgbXkgQHRvYzsKICAgIG15ICRpbl90b2M7CiAgICBteSAkdWxfbGV2ZWwgPSAwOwogICAgbXkgJG5vX3ByaW50OwoKICAgICMgVGhpcyByb3V0aW5lIHdpbGwgd3JpdGUgdGhlIGh0bWwgc2VsZWN0aXZlbHkgYW5kIHN0b3JlIHRoZSB0b2MKICAgIG15ICRodG1sX3ByaW50ID0gc3ViIHsKICAgICAgICBmb3JlYWNoIG15ICRsaW5lIChAXykgewogICAgICAgICAgICAkaHRtbF9maC0+cHJpbnQoJGxpbmUpIHVubGVzcyAoJG5vX3ByaW50KTsKICAgICAgICAgICAgaWYgKCRpbl90b2MpIHsgcHVzaCBAdG9jLCAkbGluZSB9CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH07ICMjIGVuZCAkaHRtbF9wcmludCA9IHN1YgoKICAgICMgbG9vcCBvdmVyIGxpbmVzIG9mIGh0bWwgb3V0cHV0IGZyb20gcG9kMmh0bWwgYW5kIG1lcmdlIGluCiAgICAjIHRoZSBuZWNlc3NhcnkgcGVybHRpZHkgaHRtbCBzZWN0aW9ucwogICAgbXkgKCAkc2F3X2JvZHksICRzYXdfaW5kZXgsICRzYXdfYm9keV9lbmQgKTsKCiAgICBteSAkdGltZXN0YW1wID0gRU1QVFlfU1RSSU5HOwogICAgaWYgKCAkck9wdHMtPnsndGltZXN0YW1wJ30gKSB7CiAgICAgICAgbXkgJGRhdGUgPSBsb2NhbHRpbWU7CiAgICAgICAgJHRpbWVzdGFtcCA9ICJvbiAkZGF0ZSI7CiAgICB9CiAgICB3aGlsZSAoIGRlZmluZWQoIG15ICRsaW5lID0gJGZoX3RtcC0+Z2V0bGluZSgpICkgKSB7CgogICAgICAgIGlmICggJGxpbmUgPX4gL15ccyo8aHRtbD5ccyokL2kgKSB7CiAgICAgICAgICAgICRodG1sX3ByaW50LT4oIjwhLS0gR2VuZXJhdGVkIGJ5IHBlcmx0aWR5ICR0aW1lc3RhbXAgLS0+XG4iKTsKICAgICAgICAgICAgJGh0bWxfcHJpbnQtPigkbGluZSk7CiAgICAgICAgfQoKICAgICAgICAjIENvcHkgdGhlIHBlcmx0aWR5IGNzcywgaWYgYW55LCBhZnRlciA8Ym9keT4gdGFnCiAgICAgICAgZWxzaWYgKCAkbGluZSA9fiAvXlxzKjxib2R5Lio+XHMqJC9pICkgewogICAgICAgICAgICAkc2F3X2JvZHkgPSAxOwogICAgICAgICAgICAkaHRtbF9wcmludC0+KCRjc3Nfc3RyaW5nKSBpZiAkY3NzX3N0cmluZzsKICAgICAgICAgICAgJGh0bWxfcHJpbnQtPigkbGluZSk7CgogICAgICAgICAgICAjIGFkZCBhIHRvcCBhbmNob3IgYW5kIGhlYWRpbmcKICAgICAgICAgICAgJGh0bWxfcHJpbnQtPigiPGEgbmFtZT1cIi10b3AtXCI+PC9hPlxuIik7CiAgICAgICAgICAgICR0aXRsZSA9IGVzY2FwZV9odG1sKCR0aXRsZSk7CiAgICAgICAgICAgICRodG1sX3ByaW50LT4oIjxoMT4kdGl0bGU8L2gxPlxuIik7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGZvciBzdGFydCBvZiBpbmRleCwgb2xkIHBvZDJodG1sCiAgICAgICAgIyBiZWZvcmUgUG9kOjpIdG1sIFZFUlNJT04gMS4xNV8wMiBpdCBpcyBkZWxpbWl0ZWQgYnkgY29tbWVudHMgYXM6CiAgICAgICAgIyAgICA8IS0tIElOREVYIEJFR0lOIC0tPgogICAgICAgICMgICAgPHVsPgogICAgICAgICMgICAgIC4uLgogICAgICAgICMgICAgPC91bD4KICAgICAgICAjICAgIDwhLS0gSU5ERVggRU5EIC0tPgogICAgICAgICMKICAgICAgICBlbHNpZiAoICRsaW5lID1+IC9eXHMqPCEtLSBJTkRFWCBCRUdJTiAtLT5ccyokL2kgKSB7CiAgICAgICAgICAgICRpbl90b2MgPSAnSU5ERVgnOwoKICAgICAgICAgICAgIyB3aGVuIGZyYW1lcyBhcmUgdXNlZCwgYW4gZXh0cmEgdGFibGUgb2YgY29udGVudHMgaW4gdGhlCiAgICAgICAgICAgICMgY29udGVudHMgcGFuZWwgaXMgY29uZnVzaW5nLCBzbyBkb24ndCBwcmludCBpdAogICAgICAgICAgICAkbm9fcHJpbnQgPSAkck9wdHMtPnsnZnJhbWVzJ30KICAgICAgICAgICAgICB8fCAhJHJPcHRzLT57J2h0bWwtdGFibGUtb2YtY29udGVudHMnfTsKICAgICAgICAgICAgJGh0bWxfcHJpbnQtPigiPGgyPkRvYyBJbmRleDo8L2gyPlxuIikgaWYgJHJPcHRzLT57J2ZyYW1lcyd9OwogICAgICAgICAgICAkaHRtbF9wcmludC0+KCRsaW5lKTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgZm9yIHN0YXJ0IG9mIGluZGV4LCBuZXcgcG9kMmh0bWwKICAgICAgICAjIEFmdGVyIFBvZDo6SHRtbCBWRVJTSU9OIDEuMTVfMDIgaXQgaXMgZGVsaW1pdGVkIGFzOgogICAgICAgICMgPHVsIGlkPSJpbmRleCI+CiAgICAgICAgIyAuLi4KICAgICAgICAjIDwvdWw+CiAgICAgICAgZWxzaWYgKCAkbGluZSA9fiAvXlxzKjx1bFxzK2lkPSJpbmRleCI+L2kgKSB7CiAgICAgICAgICAgICRpbl90b2MgICA9ICdVTCc7CiAgICAgICAgICAgICR1bF9sZXZlbCA9IDE7CgogICAgICAgICAgICAjIHdoZW4gZnJhbWVzIGFyZSB1c2VkLCBhbiBleHRyYSB0YWJsZSBvZiBjb250ZW50cyBpbiB0aGUKICAgICAgICAgICAgIyBjb250ZW50cyBwYW5lbCBpcyBjb25mdXNpbmcsIHNvIGRvbid0IHByaW50IGl0CiAgICAgICAgICAgICRub19wcmludCA9ICRyT3B0cy0+eydmcmFtZXMnfQogICAgICAgICAgICAgIHx8ICEkck9wdHMtPnsnaHRtbC10YWJsZS1vZi1jb250ZW50cyd9OwogICAgICAgICAgICAkaHRtbF9wcmludC0+KCI8aDI+RG9jIEluZGV4OjwvaDI+XG4iKSBpZiAkck9wdHMtPnsnZnJhbWVzJ307CiAgICAgICAgICAgICRodG1sX3ByaW50LT4oJGxpbmUpOwogICAgICAgIH0KCiAgICAgICAgIyBDaGVjayBmb3IgZW5kIG9mIGluZGV4LCBvbGQgcG9kMmh0bWwKICAgICAgICBlbHNpZiAoICRsaW5lID1+IC9eXHMqPCEtLSBJTkRFWCBFTkQgLS0+XHMqJC9pICkgewogICAgICAgICAgICAkc2F3X2luZGV4ID0gMTsKICAgICAgICAgICAgJGh0bWxfcHJpbnQtPigkbGluZSk7CgogICAgICAgICAgICAjIENvcHkgdGhlIHBlcmx0aWR5IHRvYywgaWYgYW55LCBhZnRlciB0aGUgUG9kOjpIdG1sIHRvYwogICAgICAgICAgICBpZiAoJHRvY19zdHJpbmcpIHsKICAgICAgICAgICAgICAgICRodG1sX3ByaW50LT4oIjxociAvPlxuIikgaWYgJHJPcHRzLT57J2ZyYW1lcyd9OwogICAgICAgICAgICAgICAgJGh0bWxfcHJpbnQtPigiPGgyPkNvZGUgSW5kZXg6PC9oMj5cbiIpOwogICAgICAgICAgICAgICAgbXkgQHRvY19zdCA9IHNwbGl0IC9eLywgJHRvY19zdHJpbmc7CiAgICAgICAgICAgICAgICAkaHRtbF9wcmludC0+KEB0b2Nfc3QpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRpbl90b2MgICA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgJG5vX3ByaW50ID0gMDsKICAgICAgICB9CgogICAgICAgICMgbXVzdCB0cmFjayA8dWw+IGRlcHRoIGxldmVsIGZvciBuZXcgcG9kMmh0bWwKICAgICAgICBlbHNpZiAoICRsaW5lID1+IC9ccyo8dWw+XHMqJC9pICYmICRpbl90b2MgZXEgJ1VMJyApIHsKICAgICAgICAgICAgJHVsX2xldmVsKys7CiAgICAgICAgICAgICRodG1sX3ByaW50LT4oJGxpbmUpOwogICAgICAgIH0KCiAgICAgICAgIyBDaGVjayBmb3IgZW5kIG9mIGluZGV4LCBmb3IgbmV3IHBvZDJodG1sCiAgICAgICAgZWxzaWYgKCAkbGluZSA9fiAvXHMqPFwvdWw+L2kgJiYgJGluX3RvYyBlcSAnVUwnICkgewogICAgICAgICAgICAkdWxfbGV2ZWwtLTsKICAgICAgICAgICAgJGh0bWxfcHJpbnQtPigkbGluZSk7CgogICAgICAgICAgICAjIENvcHkgdGhlIHBlcmx0aWR5IHRvYywgaWYgYW55LCBhZnRlciB0aGUgUG9kOjpIdG1sIHRvYwogICAgICAgICAgICBpZiAoICR1bF9sZXZlbCA8PSAwICkgewogICAgICAgICAgICAgICAgJHNhd19pbmRleCA9IDE7CiAgICAgICAgICAgICAgICBpZiAoJHRvY19zdHJpbmcpIHsKICAgICAgICAgICAgICAgICAgICAkaHRtbF9wcmludC0+KCI8aHIgLz5cbiIpIGlmICRyT3B0cy0+eydmcmFtZXMnfTsKICAgICAgICAgICAgICAgICAgICAkaHRtbF9wcmludC0+KCI8aDI+Q29kZSBJbmRleDo8L2gyPlxuIik7CiAgICAgICAgICAgICAgICAgICAgbXkgQHRvY19zdCA9IHNwbGl0IC9eLywgJHRvY19zdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgJGh0bWxfcHJpbnQtPihAdG9jX3N0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRpbl90b2MgICA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgICAgICR1bF9sZXZlbCA9IDA7CiAgICAgICAgICAgICAgICAkbm9fcHJpbnQgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIENvcHkgb25lIHBlcmx0aWR5IHNlY3Rpb24gYWZ0ZXIgZWFjaCBtYXJrZXIKICAgICAgICBlbHNpZiAoICRsaW5lID1+IC9eKC4qKTwhLS0gcEVSTFRJRFkgc0VDVElPTiAtLT4oLiopJC8gKSB7CiAgICAgICAgICAgICRsaW5lID0gJDI7CiAgICAgICAgICAgICRodG1sX3ByaW50LT4oJDEpIGlmICQxOwoKICAgICAgICAgICAgIyBJbnRlcm1pbmdsZSBjb2RlIGFuZCBwb2Qgc2VjdGlvbnMgaWYgd2Ugc2F3IG11bHRpcGxlID1jdXQncy4KICAgICAgICAgICAgaWYgKCAkc2VsZi0+e19wb2RfY3V0X2NvdW50fSA+IDEgKSB7CiAgICAgICAgICAgICAgICBteSAkcnByZV9zdHJpbmcgPSBzaGlmdCBAeyRycHJlX3N0cmluZ19zdGFja307CiAgICAgICAgICAgICAgICBpZiAoICR7JHJwcmVfc3RyaW5nfSApIHsKICAgICAgICAgICAgICAgICAgICAkaHRtbF9wcmludC0+KCc8cHJlPicpOwogICAgICAgICAgICAgICAgICAgICRodG1sX3ByaW50LT4oICR7JHJwcmVfc3RyaW5nfSApOwogICAgICAgICAgICAgICAgICAgICRodG1sX3ByaW50LT4oJzwvcHJlPicpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICMgc2hvdWxkbid0IGhhcHBlbjogd2Ugc3RvcmVkIGEgc3RyaW5nIGJlZm9yZSB3cml0aW5nCiAgICAgICAgICAgICAgICAgICAgIyBlYWNoIG1hcmtlci4KICAgICAgICAgICAgICAgICAgICBQZXJsOjpUaWR5OjpXYXJuKAoiUHJvYmxlbSBtZXJnaW5nIGh0bWwgc3RyZWFtIHdpdGggcG9kMmh0bWw7IG9yZGVyIG1heSBiZSB3cm9uZ1xuIgogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkaHRtbF9wcmludC0+KCRsaW5lKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBJZiBkaWRuJ3Qgc2VlIG11bHRpcGxlID1jdXQgbGluZXMsIHdlJ2xsIHB1dCB0aGUgcG9kIG91dCBmaXJzdAogICAgICAgICAgICAjIGFuZCB0aGVuIHRoZSBjb2RlLCBiZWNhdXNlIGl0J3MgbGVzcyBjb25mdXNpbmcuCiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgc2luY2Ugd2UgYXJlIG5vdCBpbnRlcm1peGluZyBjb2RlIGFuZCBwb2QsIHdlIGRvbid0IG5lZWQKICAgICAgICAgICAgICAgICMgb3Igd2FudCBhbnkgPGhyPiBsaW5lcyB3aGljaCBzZXBhcmF0ZWQgcG9kIGFuZCBjb2RlCiAgICAgICAgICAgICAgICAkaHRtbF9wcmludC0+KCRsaW5lKSB1bmxlc3MgKCAkbGluZSA9fiAvXlxzKjxocj5ccyokL2kgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBDb3B5IGFueSByZW1haW5pbmcgY29kZSBzZWN0aW9uIGJlZm9yZSB0aGUgPC9ib2R5PiB0YWcKICAgICAgICBlbHNpZiAoICRsaW5lID1+IC9eXHMqPFwvYm9keT5ccyokL2kgKSB7CiAgICAgICAgICAgICRzYXdfYm9keV9lbmQgPSAxOwogICAgICAgICAgICBpZiAoIEB7JHJwcmVfc3RyaW5nX3N0YWNrfSApIHsKICAgICAgICAgICAgICAgIGlmICggJHNlbGYtPntfcG9kX2N1dF9jb3VudH0gPD0gMSApIHsKICAgICAgICAgICAgICAgICAgICAkaHRtbF9wcmludC0+KCc8aHIgLz4nKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHdoaWxlICggQHskcnByZV9zdHJpbmdfc3RhY2t9ICkgewogICAgICAgICAgICAgICAgICAgIG15ICRycHJlX3N0cmluZyA9IHNoaWZ0IEB7JHJwcmVfc3RyaW5nX3N0YWNrfTsKICAgICAgICAgICAgICAgICAgICAkaHRtbF9wcmludC0+KCc8cHJlPicpOwogICAgICAgICAgICAgICAgICAgICRodG1sX3ByaW50LT4oICR7JHJwcmVfc3RyaW5nfSApOwogICAgICAgICAgICAgICAgICAgICRodG1sX3ByaW50LT4oJzwvcHJlPicpOwogICAgICAgICAgICAgICAgfSAjIyBlbmQgd2hpbGUgKCBAeyRycHJlX3N0cmluZ19zdGFjay4uLn0pCiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGh0bWxfcHJpbnQtPigkbGluZSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkaHRtbF9wcmludC0+KCRsaW5lKTsKICAgICAgICB9CiAgICB9ICMjIGVuZCB3aGlsZSAoIGRlZmluZWQoIG15ICRsaW5lLi4uKSkKCiAgICAkc3VjY2Vzc19mbGFnID0gMTsKICAgIGlmICggISRzYXdfYm9keSApIHsKICAgICAgICBQZXJsOjpUaWR5OjpXYXJuKCJEaWQgbm90IHNlZSA8Ym9keT4gaW4gcG9kMmh0bWwgb3V0cHV0XG4iKTsKICAgICAgICAkc3VjY2Vzc19mbGFnID0gMDsKICAgIH0KICAgIGlmICggISRzYXdfYm9keV9lbmQgKSB7CiAgICAgICAgUGVybDo6VGlkeTo6V2FybigiRGlkIG5vdCBzZWUgPC9ib2R5PiBpbiBwb2QyaHRtbCBvdXRwdXRcbiIpOwogICAgICAgICRzdWNjZXNzX2ZsYWcgPSAwOwogICAgfQogICAgaWYgKCAhJHNhd19pbmRleCApIHsKICAgICAgICBQZXJsOjpUaWR5OjpXYXJuKCJEaWQgbm90IGZpbmQgSU5ERVggRU5EIGluIHBvZDJodG1sIG91dHB1dFxuIik7CiAgICAgICAgJHN1Y2Nlc3NfZmxhZyA9IDA7CiAgICB9CgogICAgaWYgKCAkaHRtbF9maC0+Y2FuKCdjbG9zZScpICkgewogICAgICAgICRodG1sX2ZoLT5jbG9zZSgpOwogICAgfQoKICAgICMgbm90ZSB0aGF0IHdlIGhhdmUgdG8gdW5saW5rIHRtcGZpbGUgYmVmb3JlIG1ha2luZyBmcmFtZXMKICAgICMgYmVjYXVzZSB0aGUgdG1wZmlsZSBtYXkgYmUgb25lIG9mIHRoZSBuYW1lcyB1c2VkIGZvciBmcmFtZXMKICAgIGlmICggLWUgJHRtcGZpbGUgKSB7CiAgICAgICAgaWYgKCAhdW5saW5rKCR0bXBmaWxlKSApIHsKICAgICAgICAgICAgUGVybDo6VGlkeTo6V2FybigKICAgICAgICAgICAgICAgICJjb3VsZG4ndCB1bmxpbmsgdGVtcG9yYXJ5IGZpbGUgJHRtcGZpbGU6ICRPU19FUlJPUlxuIik7CiAgICAgICAgICAgICRzdWNjZXNzX2ZsYWcgPSAwOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICRzdWNjZXNzX2ZsYWcgJiYgJHJPcHRzLT57J2ZyYW1lcyd9ICkgewogICAgICAgICRzZWxmLT5tYWtlX2ZyYW1lKCBcQHRvYyApOwogICAgfQogICAgcmV0dXJuICRzdWNjZXNzX2ZsYWc7Cn0gIyMgZW5kIHN1YiBwb2RfdG9faHRtbAoKc3ViIG1ha2VfZnJhbWUgewoKICAgICMgTWFrZSBhIGZyYW1lIHdpdGggdGFibGUgb2YgY29udGVudHMgaW4gdGhlIGxlZnQgcGFuZWwKICAgICMgYW5kIHRoZSB0ZXh0IGluIHRoZSByaWdodCBwYW5lbC4KICAgICMgT24gZW50cnk6CiAgICAjICAkaHRtbF9maWxlbmFtZSBjb250YWlucyB0aGUgbm8tZnJhbWVzIGh0bWwgb3V0cHV0CiAgICAjICAkcnRvYyBpcyBhIHJlZmVyZW5jZSB0byBhbiBhcnJheSB3aXRoIHRoZSB0YWJsZSBvZiBjb250ZW50cwogICAgbXkgKCAkc2VsZiwgJHJ0b2MgKSA9IEBfOwogICAgbXkgJGh0bWxfZmlsZW5hbWUgPSAkc2VsZi0+e19odG1sX2ZpbGV9OwogICAgbXkgJHRvY19maWxlbmFtZSAgPSAkc2VsZi0+e190b2NfZmlsZW5hbWV9OwogICAgbXkgJHNyY19maWxlbmFtZSAgPSAkc2VsZi0+e19zcmNfZmlsZW5hbWV9OwogICAgbXkgJHRpdGxlICAgICAgICAgPSAkc2VsZi0+e190aXRsZX07CiAgICAkdGl0bGUgPSBlc2NhcGVfaHRtbCgkdGl0bGUpOwoKICAgICMgRlVUVVJFIGlucHV0IHBhcmFtZXRlcjoKICAgIG15ICR0b3BfYmFzZW5hbWUgPSBFTVBUWV9TVFJJTkc7CgogICAgIyBXZSBuZWVkIHRvIHByb2R1Y2UgMyBodG1sIGZpbGVzOgogICAgIyAxLiAtIHRoZSB0YWJsZSBvZiBjb250ZW50cwogICAgIyAyLiAtIHRoZSBjb250ZW50cyAoc291cmNlIGNvZGUpIGl0c2VsZgogICAgIyAzLiAtIHRoZSBmcmFtZSB3aGljaCBjb250YWlucyB0aGVtCgogICAgIyBnZXQgYmFzZW5hbWVzIGZvciByZWxhdGl2ZSBsaW5rcwogICAgbXkgKCAkdG9jX2Jhc2VuYW1lLCAkdG9jX3BhdGhfdXUgKSA9IGZpbGVwYXJzZSgkdG9jX2ZpbGVuYW1lKTsKICAgIG15ICggJHNyY19iYXNlbmFtZSwgJHNyY19wYXRoX3V1ICkgPSBmaWxlcGFyc2UoJHNyY19maWxlbmFtZSk7CgogICAgIyAxLiBNYWtlIHRoZSB0YWJsZSBvZiBjb250ZW50cyBwYW5lbCwgd2l0aCBhcHByb3ByaWF0ZSBjaGFuZ2VzCiAgICAjIHRvIHRoZSBhbmNob3IgbmFtZXMKICAgIG15ICRzcmNfZnJhbWVfbmFtZSAgPSAnU1JDJzsKICAgIG15ICRmaXJzdF9hbmNob3JfdXUgPSB3cml0ZV90b2NfaHRtbCgKICAgICAgICB7CiAgICAgICAgICAgIHRpdGxlICAgICAgICAgID0+ICR0aXRsZSwKICAgICAgICAgICAgdG9jX2ZpbGVuYW1lICAgPT4gJHRvY19maWxlbmFtZSwKICAgICAgICAgICAgc3JjX2Jhc2VuYW1lICAgPT4gJHNyY19iYXNlbmFtZSwKICAgICAgICAgICAgcnRvYyAgICAgICAgICAgPT4gJHJ0b2MsCiAgICAgICAgICAgIHNyY19mcmFtZV9uYW1lID0+ICRzcmNfZnJhbWVfbmFtZSwKICAgICAgICB9CiAgICApOwoKICAgICMgMi4gVGhlIGN1cnJlbnQgLmh0bWwgZmlsZW5hbWUgaXMgcmVuYW1lZCB0byBiZSB0aGUgY29udGVudHMgcGFuZWwKICAgIHJlbmFtZSggJGh0bWxfZmlsZW5hbWUsICRzcmNfZmlsZW5hbWUgKQogICAgICBvciBQZXJsOjpUaWR5OjpEaWUoCiAgICAgICAgIkNhbm5vdCByZW5hbWUgJGh0bWxfZmlsZW5hbWUgdG8gJHNyY19maWxlbmFtZTogJE9TX0VSUk9SXG4iKTsKCiAgICAjIDMuIFRoZW4gdXNlIHRoZSBvcmlnaW5hbCBodG1sIGZpbGVuYW1lIGZvciB0aGUgZnJhbWUKICAgIHdyaXRlX2ZyYW1lX2h0bWwoCiAgICAgICAgewogICAgICAgICAgICB0aXRsZSAgICAgICAgICA9PiAkdGl0bGUsCiAgICAgICAgICAgIGZyYW1lX2ZpbGVuYW1lID0+ICRodG1sX2ZpbGVuYW1lLAogICAgICAgICAgICB0b3BfYmFzZW5hbWUgICA9PiAkdG9wX2Jhc2VuYW1lLAogICAgICAgICAgICB0b2NfYmFzZW5hbWUgICA9PiAkdG9jX2Jhc2VuYW1lLAogICAgICAgICAgICBzcmNfYmFzZW5hbWUgICA9PiAkc3JjX2Jhc2VuYW1lLAogICAgICAgICAgICBzcmNfZnJhbWVfbmFtZSA9PiAkc3JjX2ZyYW1lX25hbWUsCiAgICAgICAgfQogICAgKTsKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIG1ha2VfZnJhbWUKCnN1YiB3cml0ZV90b2NfaHRtbCB7CgogICAgIyB3cml0ZSBhIHNlcGFyYXRlIGh0bWwgdGFibGUgb2YgY29udGVudHMgZmlsZSBmb3IgZnJhbWVzCiAgICBteSAoJHJhcmdfaGFzaCkgPSBAXzsKCiAgICBteSAkdGl0bGUgICAgICAgICAgPSAkcmFyZ19oYXNoLT57dGl0bGV9OwogICAgbXkgJHRvY19maWxlbmFtZSAgID0gJHJhcmdfaGFzaC0+e3RvY19maWxlbmFtZX07CiAgICBteSAkc3JjX2Jhc2VuYW1lICAgPSAkcmFyZ19oYXNoLT57c3JjX2Jhc2VuYW1lfTsKICAgIG15ICRydG9jICAgICAgICAgICA9ICRyYXJnX2hhc2gtPntydG9jfTsKICAgIG15ICRzcmNfZnJhbWVfbmFtZSA9ICRyYXJnX2hhc2gtPntzcmNfZnJhbWVfbmFtZX07CgogICAgbXkgJGZoID0gSU86OkZpbGUtPm5ldyggJHRvY19maWxlbmFtZSwgJ3cnICkKICAgICAgb3IgUGVybDo6VGlkeTo6RGllKCJDYW5ub3Qgb3BlbiAkdG9jX2ZpbGVuYW1lOiAkT1NfRVJST1JcbiIpOwogICAgJGZoLT5wcmludCg8PEVPTSk7CjxodG1sPgo8aGVhZD4KPHRpdGxlPiR0aXRsZTwvdGl0bGU+CjwvaGVhZD4KPGJvZHk+CjxoMT48YSBocmVmPVwiJHNyY19iYXNlbmFtZSMtdG9wLSIgdGFyZ2V0PSIkc3JjX2ZyYW1lX25hbWUiPiR0aXRsZTwvYT48L2gxPgpFT00KCiAgICBteSAkZmlyc3RfYW5jaG9yX3V1ID0KICAgICAgY2hhbmdlX2FuY2hvcl9uYW1lcyggJHJ0b2MsICRzcmNfYmFzZW5hbWUsICIkc3JjX2ZyYW1lX25hbWUiICk7CiAgICAkZmgtPnByaW50KCBqb2luIEVNUFRZX1NUUklORywgQHskcnRvY30gKTsKCiAgICAkZmgtPnByaW50KDw8RU9NKTsKPC9ib2R5Pgo8L2h0bWw+CkVPTQoKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHdyaXRlX3RvY19odG1sCgpzdWIgd3JpdGVfZnJhbWVfaHRtbCB7CgogICAgIyB3cml0ZSBhbiBodG1sIGZpbGUgdG8gYmUgdGhlIHRhYmxlIG9mIGNvbnRlbnRzIGZyYW1lCgogICAgbXkgKCRyYXJnX2hhc2gpID0gQF87CgogICAgbXkgJHRpdGxlICAgICAgICAgID0gJHJhcmdfaGFzaC0+e3RpdGxlfTsKICAgIG15ICRmcmFtZV9maWxlbmFtZSA9ICRyYXJnX2hhc2gtPntmcmFtZV9maWxlbmFtZX07CiAgICBteSAkdG9wX2Jhc2VuYW1lICAgPSAkcmFyZ19oYXNoLT57dG9wX2Jhc2VuYW1lfTsKICAgIG15ICR0b2NfYmFzZW5hbWUgICA9ICRyYXJnX2hhc2gtPnt0b2NfYmFzZW5hbWV9OwogICAgbXkgJHNyY19iYXNlbmFtZSAgID0gJHJhcmdfaGFzaC0+e3NyY19iYXNlbmFtZX07CiAgICBteSAkc3JjX2ZyYW1lX25hbWUgPSAkcmFyZ19oYXNoLT57c3JjX2ZyYW1lX25hbWV9OwoKICAgIG15ICRmaCA9IElPOjpGaWxlLT5uZXcoICRmcmFtZV9maWxlbmFtZSwgJ3cnICkKICAgICAgb3IgUGVybDo6VGlkeTo6RGllKCJDYW5ub3Qgb3BlbiAkdG9jX2Jhc2VuYW1lOiAkT1NfRVJST1JcbiIpOwoKICAgICRmaC0+cHJpbnQoPDxFT00pOwo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBGcmFtZXNldC8vRU4iCiAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtZnJhbWVzZXQuZHRkIj4KPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSIgPz4KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgo8aGVhZD4KPHRpdGxlPiR0aXRsZTwvdGl0bGU+CjwvaGVhZD4KRU9NCgogICAgIyB0d28gbGVmdCBwYW5lbHMsIG9uZSByaWdodCwgaWYgbWFzdGVyIGluZGV4IGZpbGUKICAgIGlmICgkdG9wX2Jhc2VuYW1lKSB7CiAgICAgICAgJGZoLT5wcmludCg8PEVPTSk7CjxmcmFtZXNldCBjb2xzPSIyMCUsODAlIj4KPGZyYW1lc2V0IHJvd3M9IjMwJSw3MCUiPgo8ZnJhbWUgc3JjID0gIiR0b3BfYmFzZW5hbWUiIC8+CjxmcmFtZSBzcmMgPSAiJHRvY19iYXNlbmFtZSIgLz4KPC9mcmFtZXNldD4KRU9NCiAgICB9CgogICAgIyBvbmUgbGVmdCBwYW5lbHMsIG9uZSByaWdodCwgaWYgbm8gbWFzdGVyIGluZGV4IGZpbGUKICAgIGVsc2UgewogICAgICAgICRmaC0+cHJpbnQoPDxFT00pOwo8ZnJhbWVzZXQgY29scz0iMjAlLCoiPgo8ZnJhbWUgc3JjID0gIiR0b2NfYmFzZW5hbWUiIC8+CkVPTQogICAgfQogICAgJGZoLT5wcmludCg8PEVPTSk7CjxmcmFtZSBzcmMgPSAiJHNyY19iYXNlbmFtZSIgbmFtZSA9ICIkc3JjX2ZyYW1lX25hbWUiIC8+Cjxub2ZyYW1lcz4KPGJvZHk+CjxwPklmIHlvdSBzZWUgdGhpcyBtZXNzYWdlLCB5b3UgYXJlIHVzaW5nIGEgbm9uLWZyYW1lLWNhcGFibGUgd2ViIGNsaWVudC48L3A+CjxwPlRoaXMgZG9jdW1lbnQgY29udGFpbnM6PC9wPgo8dWw+CjxsaT48YSBocmVmPSIkdG9jX2Jhc2VuYW1lIj5BIHRhYmxlIG9mIGNvbnRlbnRzPC9hPjwvbGk+CjxsaT48YSBocmVmPSIkc3JjX2Jhc2VuYW1lIj5UaGUgc291cmNlIGNvZGU8L2E+PC9saT4KPC91bD4KPC9ib2R5Pgo8L25vZnJhbWVzPgo8L2ZyYW1lc2V0Pgo8L2h0bWw+CkVPTQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgd3JpdGVfZnJhbWVfaHRtbAoKc3ViIGNoYW5nZV9hbmNob3JfbmFtZXMgewoKICAgICMgYWRkIGEgZmlsZW5hbWUgYW5kIHRhcmdldCB0byBhbmNob3JzCiAgICAjIGFsc28gcmV0dXJuIHRoZSBmaXJzdCBhbmNob3IKICAgIG15ICggJHJsaW5lcywgJGZpbGVuYW1lLCAkdGFyZ2V0ICkgPSBAXzsKICAgIG15ICRmaXJzdF9hbmNob3I7CiAgICBmb3JlYWNoIG15ICRsaW5lICggQHskcmxpbmVzfSApIHsKCiAgICAgICAgIyAgV2UncmUgbG9va2luZyBmb3IgbGluZXMgbGlrZSB0aGlzOgogICAgICAgICMgIDxMST48QSBIUkVGPSIjc3lub3BzaXMiPlNZTk9QU0lTPC9BPjwvTEk+CiAgICAgICAgIyAgLS0tLSAgLSAgICAgICAtLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjICAkMSAgICAgICAgICAgICAgJDQgICAgICAgICAgICAkNQogICAgICAgIGlmICggJGxpbmUgPX4gL14oLiopPGEoLiopaHJlZlxzKj1ccyoiKFteI10qKSMoW14iXSspIltePl0qPiguKikkL2kgKSB7CiAgICAgICAgICAgIG15ICRwcmUgID0gJDE7CiAgICAgICAgICAgIG15ICRuYW1lID0gJDQ7CiAgICAgICAgICAgIG15ICRwb3N0ID0gJDU7CiAgICAgICAgICAgIG15ICRocmVmID0gIiRmaWxlbmFtZSMkbmFtZSI7CiAgICAgICAgICAgICRsaW5lID0gIiRwcmU8YSBocmVmPVwiJGhyZWZcIiB0YXJnZXQ9XCIkdGFyZ2V0XCI+JHBvc3RcbiI7CiAgICAgICAgICAgIGlmICggISRmaXJzdF9hbmNob3IgKSB7ICRmaXJzdF9hbmNob3IgPSAkaHJlZiB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuICRmaXJzdF9hbmNob3I7Cn0gIyMgZW5kIHN1YiBjaGFuZ2VfYW5jaG9yX25hbWVzCgpzdWIgY2xvc2VfaHRtbF9maWxlIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICByZXR1cm4gdW5sZXNzICRzZWxmLT57X2h0bWxfZmlsZV9vcGVuZWR9OwoKICAgIG15ICRodG1sX2ZoICAgICA9ICRzZWxmLT57X2h0bWxfZmh9OwogICAgbXkgJHJ0b2Nfc3RyaW5nID0gJHNlbGYtPntfcnRvY19zdHJpbmd9OwoKICAgICMgVGhlcmUgYXJlIDMgYmFzaWMgcGF0aHMgdG8gaHRtbCBvdXRwdXQuLi4KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBQYXRoIDE6IGZpbmlzaCB1cCBpZiBpbiAtcHJlIG1vZGUKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBpZiAoICRyT3B0cy0+eydodG1sLXByZS1vbmx5J30gKSB7CiAgICAgICAgJGh0bWxfZmgtPnByaW50KDw8IlBSRV9FTkQiKTsKPC9wcmU+ClBSRV9FTkQKICAgICAgICAkaHRtbF9maC0+Y2xvc2UoKQogICAgICAgICAgaWYgKCAkaHRtbF9maC0+Y2FuKCdjbG9zZScpICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgRmluaXNoIHRoZSBpbmRleAogICAgJHNlbGYtPmFkZF90b2NfaXRlbSggJ0VPRicsICdFT0YnICk7CgogICAgbXkgJHJwcmVfc3RyaW5nX3N0YWNrID0gJHNlbGYtPntfcnByZV9zdHJpbmdfc3RhY2t9OwoKICAgICMgUGF0Y2ggdG8gZGFya2VuIHRoZSA8cHJlPiBiYWNrZ3JvdW5kIGNvbG9yIGluIGNhc2Ugb2YgcG9kMmh0bWwgYW5kCiAgICAjIGludGVybGVhdmVkIGNvZGUvZG9jdW1lbnRhdGlvbi4gIE90aGVyd2lzZSwgdGhlIGRpc3RpbmN0aW9uCiAgICAjIGJldHdlZW4gY29kZSBhbmQgZG9jdW1lbnRhdGlvbiBpcyBibHVycmVkLgogICAgaWYgKCAgICRyT3B0cy0+e3BvZDJodG1sfQogICAgICAgICYmICRzZWxmLT57X3BvZF9jdXRfY291bnR9ID49IDEKICAgICAgICAmJiAkck9wdHMtPnsnaHRtbC1jb2xvci1iYWNrZ3JvdW5kJ30gZXEgJyNGRkZGRkYnICkKICAgIHsKICAgICAgICAkck9wdHMtPnsnaHRtbC1wcmUtY29sb3ItYmFja2dyb3VuZCd9ID0gJyNGMEYwRjAnOwogICAgfQoKICAgICMgcHV0IHRoZSBjc3Mgb3IgaXRzIGxpbmsgaW50byBhIHN0cmluZywgaWYgdXNlZAogICAgbXkgJGNzc19zdHJpbmc7CiAgICBteSAkZmhfY3NzID0gUGVybDo6VGlkeTo6SU9TY2FsYXItPm5ldyggXCRjc3Nfc3RyaW5nLCAndycgKTsKCiAgICAjIHVzZSBjc3MgbGlua2VkIHRvIGFub3RoZXIgZmlsZSwKICAgIGlmICggJHJPcHRzLT57J2h0bWwtbGlua2VkLXN0eWxlLXNoZWV0J30gKSB7CiAgICAgICAgJGZoX2Nzcy0+cHJpbnQoCiAgICAgICAgICAgIHFxKDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iJGNzc19saW5rbmFtZSIgdHlwZT0idGV4dC9jc3MiIC8+KSk7CiAgICB9CgogICAgIyBvciBubyBjc3MsCiAgICBlbHNpZiAoICRyT3B0cy0+eydub2h0bWwtc3R5bGUtc2hlZXRzJ30gKSB7CgogICAgfQoKICAgICMgb3IgdXNlIGNzcyBlbWJlZGRlZCBpbiB0aGlzIGZpbGUKICAgIGVsc2UgewogICAgICAgICRmaF9jc3MtPnByaW50KDw8J0VORENTUycpOwo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgo8IS0tCkVORENTUwogICAgICAgIHdyaXRlX3N0eWxlX3NoZWV0X2RhdGEoJGZoX2Nzcyk7CiAgICAgICAgJGZoX2Nzcy0+cHJpbnQoPDwiRU5EQ1NTIik7Ci0tPgo8L3N0eWxlPgpFTkRDU1MKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIHBhdGggMjogdXNlIHBvZDJodG1sIGlmIHJlcXVlc3RlZAogICAgIyAgICAgICAgIElmIHdlIGZhaWwgZm9yIHNvbWUgcmVhc29uLCBjb250aW51ZSBvbiB0byBwYXRoIDMKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGlmICggJHJPcHRzLT57J3BvZDJodG1sJ30gKSB7CiAgICAgICAgbXkgJHJwb2Rfc3RyaW5nID0gJHNlbGYtPntfcnBvZF9zdHJpbmd9OwogICAgICAgICRzZWxmLT5wb2RfdG9faHRtbCgKICAgICAgICAgICAgJHskcnBvZF9zdHJpbmd9LCAkY3NzX3N0cmluZywKICAgICAgICAgICAgJHskcnRvY19zdHJpbmd9LCAkcnByZV9zdHJpbmdfc3RhY2sKICAgICAgICApICYmIHJldHVybjsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIHBhdGggMzogd3JpdGUgY29kZSBpbiBodG1sLCB3aXRoIHBvZCBvbmx5IGluIGl0YWxpY3MKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIG15ICRpbnB1dF9maWxlID0gJHNlbGYtPntfaW5wdXRfZmlsZX07CiAgICBteSAkdGl0bGUgICAgICA9IGVzY2FwZV9odG1sKCRpbnB1dF9maWxlKTsKICAgIG15ICR0aW1lc3RhbXAgID0gRU1QVFlfU1RSSU5HOwogICAgaWYgKCAkck9wdHMtPnsndGltZXN0YW1wJ30gKSB7CiAgICAgICAgbXkgJGRhdGUgPSBsb2NhbHRpbWU7CiAgICAgICAgJHRpbWVzdGFtcCA9ICJvbiAkZGF0ZSI7CiAgICB9CiAgICAkaHRtbF9maC0+cHJpbnQoPDwiSFRNTF9TVEFSVCIpOwo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgogICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+CjwhLS0gR2VuZXJhdGVkIGJ5IHBlcmx0aWR5ICR0aW1lc3RhbXAgLS0+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KPGhlYWQ+Cjx0aXRsZT4kdGl0bGU8L3RpdGxlPgpIVE1MX1NUQVJUCgogICAgIyBvdXRwdXQgdGhlIGNzcywgaWYgdXNlZAogICAgaWYgKCRjc3Nfc3RyaW5nKSB7CiAgICAgICAgJGh0bWxfZmgtPnByaW50KCRjc3Nfc3RyaW5nKTsKICAgICAgICAkaHRtbF9maC0+cHJpbnQoPDwiRU5EQ1NTIik7CjwvaGVhZD4KPGJvZHk+CkVORENTUwogICAgfQogICAgZWxzZSB7CgogICAgICAgICRodG1sX2ZoLT5wcmludCg8PCJIVE1MX1NUQVJUIik7CjwvaGVhZD4KPGJvZHkgYmdjb2xvcj1cIiRyT3B0cy0+eydodG1sLWNvbG9yLWJhY2tncm91bmQnfVwiIHRleHQ9XCIkck9wdHMtPnsnaHRtbC1jb2xvci1wdW5jdHVhdGlvbid9XCI+CkhUTUxfU1RBUlQKICAgIH0KCiAgICAkaHRtbF9maC0+cHJpbnQoIjxhIG5hbWU9XCItdG9wLVwiPjwvYT5cbiIpOwogICAgJGh0bWxfZmgtPnByaW50KDw8IkVPTSIpOwo8aDE+JHRpdGxlPC9oMT4KRU9NCgogICAgIyBjb3B5IHRoZSB0YWJsZSBvZiBjb250ZW50cwogICAgaWYgKCAgICR7JHJ0b2Nfc3RyaW5nfQogICAgICAgICYmICEkck9wdHMtPnsnZnJhbWVzJ30KICAgICAgICAmJiAkck9wdHMtPnsnaHRtbC10YWJsZS1vZi1jb250ZW50cyd9ICkKICAgIHsKICAgICAgICAkaHRtbF9maC0+cHJpbnQoICR7JHJ0b2Nfc3RyaW5nfSApOwogICAgfQoKICAgICMgY29weSB0aGUgcHJlIHNlY3Rpb24ocykKICAgIG15ICRmbmFtZV9jb21tZW50ID0gJGlucHV0X2ZpbGU7CiAgICAkZm5hbWVfY29tbWVudCA9fiBzLy0tKy8tL2c7ICAgICMgcHJvdGVjdCBIVE1MIGNvbW1lbnQgdGFncwogICAgJGh0bWxfZmgtPnByaW50KDw8IkVORF9QUkUiKTsKPGhyIC8+CjwhLS0gY29udGVudHMgb2YgZmlsZW5hbWU6ICRmbmFtZV9jb21tZW50IC0tPgo8cHJlPgpFTkRfUFJFCgogICAgZm9yZWFjaCBteSAkcnByZV9zdHJpbmcgKCBAeyRycHJlX3N0cmluZ19zdGFja30gKSB7CiAgICAgICAgJGh0bWxfZmgtPnByaW50KCAkeyRycHJlX3N0cmluZ30gKTsKICAgIH0KCiAgICAjIGFuZCBmaW5pc2ggdGhlIGh0bWwgcGFnZQogICAgJGh0bWxfZmgtPnByaW50KDw8IkhUTUxfRU5EIik7CjwvcHJlPgo8L2JvZHk+CjwvaHRtbD4KSFRNTF9FTkQKICAgICRodG1sX2ZoLT5jbG9zZSgpCiAgICAgIGlmICggJGh0bWxfZmgtPmNhbignY2xvc2UnKSApOwoKICAgIGlmICggJHJPcHRzLT57J2ZyYW1lcyd9ICkgewogICAgICAgIG15IEB0b2MgPSBzcGxpdCAvXi8sICR7JHJ0b2Nfc3RyaW5nfTsKICAgICAgICAkc2VsZi0+bWFrZV9mcmFtZSggXEB0b2MgKTsKICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGNsb3NlX2h0bWxfZmlsZQoKc3ViIG1hcmt1cF90b2tlbnMgewogICAgbXkgKCAkc2VsZiwgJHJ0b2tlbnMsICRydG9rZW5fdHlwZSwgJHJsZXZlbHMgKSA9IEBfOwogICAgbXkgKCBAY29sb3JlZF90b2tlbnMsICR0eXBlLCAkdG9rZW4sICRsZXZlbCApOwogICAgbXkgJHJsYXN0X2xldmVsICAgID0gJHNlbGYtPntfcmxhc3RfbGV2ZWx9OwogICAgbXkgJHJwYWNrYWdlX3N0YWNrID0gJHNlbGYtPntfcnBhY2thZ2Vfc3RhY2t9OwoKICAgIGZvcmVhY2ggbXkgJGogKCAwIC4uIEB7JHJ0b2tlbl90eXBlfSAtIDEgKSB7CiAgICAgICAgJHR5cGUgID0gJHJ0b2tlbl90eXBlLT5bJGpdOwogICAgICAgICR0b2tlbiA9ICRydG9rZW5zLT5bJGpdOwogICAgICAgICRsZXZlbCA9ICRybGV2ZWxzLT5bJGpdOwogICAgICAgICRsZXZlbCA9IDAgaWYgKCAkbGV2ZWwgPCAwICk7CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBVcGRhdGUgdGhlIHBhY2thZ2Ugc3RhY2suICBUaGUgcGFja2FnZSBzdGFjayBpcyBuZWVkZWQgdG8ga2VlcAogICAgICAgICMgdGhlIHRvYyBjb3JyZWN0IGJlY2F1c2Ugc29tZSBwYWNrYWdlcyBtYXkgYmUgZGVjbGFyZWQgd2l0aGluCiAgICAgICAgIyBibG9ja3MgYW5kIGdvIG91dCBvZiBzY29wZSB3aGVuIHdlIGxlYXZlIHRoZSBibG9jay4KICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGlmICggJGxldmVsID4gJHskcmxhc3RfbGV2ZWx9ICkgewogICAgICAgICAgICBpZiAoICEkcnBhY2thZ2Vfc3RhY2stPlsgJGxldmVsIC0gMSBdICkgewogICAgICAgICAgICAgICAgJHJwYWNrYWdlX3N0YWNrLT5bICRsZXZlbCAtIDEgXSA9ICdtYWluJzsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcnBhY2thZ2Vfc3RhY2stPlskbGV2ZWxdID0gJHJwYWNrYWdlX3N0YWNrLT5bICRsZXZlbCAtIDEgXTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkbGV2ZWwgPCAkeyRybGFzdF9sZXZlbH0gKSB7CiAgICAgICAgICAgIG15ICRwYWNrYWdlID0gJHJwYWNrYWdlX3N0YWNrLT5bJGxldmVsXTsKICAgICAgICAgICAgaWYgKCAhJHBhY2thZ2UgKSB7ICRwYWNrYWdlID0gJ21haW4nIH0KCiAgICAgICAgICAgICMgaWYgd2UgY2hhbmdlIHBhY2thZ2VzIGR1ZSB0byBhIG5lc3RpbmcgY2hhbmdlLCB3ZQogICAgICAgICAgICAjIGhhdmUgdG8gbWFrZSBhbiBlbnRyeSBpbiB0aGUgdG9jCiAgICAgICAgICAgIGlmICggJHBhY2thZ2UgbmUgJHJwYWNrYWdlX3N0YWNrLT5bICRsZXZlbCArIDEgXSApIHsKICAgICAgICAgICAgICAgICRzZWxmLT5hZGRfdG9jX2l0ZW0oICRwYWNrYWdlLCAncGFja2FnZScgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIyMgbGV2ZWwgdW5jaGFuZ2VkCiAgICAgICAgfQogICAgICAgICR7JHJsYXN0X2xldmVsfSA9ICRsZXZlbDsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIEludGVyY2VwdCBhIHN1YiBuYW1lIGhlcmU7IHNwbGl0IGl0CiAgICAgICAgIyBpbnRvIGtleXdvcmQgJ3N1YicgYW5kIHN1YiBuYW1lOyBhbmQgYWRkIGFuCiAgICAgICAgIyBlbnRyeSBpbiB0aGUgdG9jCiAgICAgICAgIyBGaXggZm9yIGMyNTA6IHN3aXRjaCBmcm9tICdpJyB0byAnUycKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGlmICggJHR5cGUgZXEgJ1MnICYmICR0b2tlbiA9fiAvXihcdytccyspKFx3LiopJC8gKSB7CiAgICAgICAgICAgICR0b2tlbiA9ICRzZWxmLT5tYXJrdXBfaHRtbF9lbGVtZW50KCAkMSwgJ2snICk7CiAgICAgICAgICAgIHB1c2ggQGNvbG9yZWRfdG9rZW5zLCAkdG9rZW47CiAgICAgICAgICAgICR0b2tlbiA9ICQyOwogICAgICAgICAgICAkdHlwZSAgPSAnUyc7CgogICAgICAgICAgICAjIGJ1dCBkb24ndCBpbmNsdWRlIHN1YiBkZWNsYXJhdGlvbnMgaW4gdGhlIHRvYzsKICAgICAgICAgICAgIyB0aGVzZSB3aWxsIGhhdmUgbGVhZGluZyB0b2tlbiB0eXBlcyAnaTsnCiAgICAgICAgICAgIG15ICRzaWduYXR1cmUgPSBqb2luIEVNUFRZX1NUUklORywgQHskcnRva2VuX3R5cGV9OwogICAgICAgICAgICBpZiAoICRzaWduYXR1cmUgIX4gL15pOy8gKSB7CiAgICAgICAgICAgICAgICBteSAkc3VibmFtZSA9ICR0b2tlbjsKICAgICAgICAgICAgICAgICRzdWJuYW1lID1+IHMvW1xzXChdLiokLy87ICMgcmVtb3ZlIGFueSBhdHRyaWJ1dGVzIGFuZCBwcm90b3R5cGUKICAgICAgICAgICAgICAgICRzZWxmLT5hZGRfdG9jX2l0ZW0oICRzdWJuYW1lLCAnc3ViJyApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgSW50ZXJjZXB0IGEgcGFja2FnZSBuYW1lIGhlcmU7IHNwbGl0IGl0CiAgICAgICAgIyBpbnRvIGtleXdvcmQgJ3BhY2thZ2UnIGFuZCBuYW1lOyBhZGQgdG8gdGhlIHRvYywKICAgICAgICAjIGFuZCB1cGRhdGUgdGhlIHBhY2thZ2Ugc3RhY2sKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgRml4IGZvciBjMjUwOiBzd2l0Y2ggZnJvbSAnaScgdG8gJ1AnIGFuZCBhbGxvdyAnY2xhc3MnIG9yICdwYWNrYWdlJwogICAgICAgIGlmICggJHR5cGUgZXEgJ1AnICYmICR0b2tlbiA9fiAvXihcdytccyspKFx3LiopJC8gKSB7CiAgICAgICAgICAgICR0b2tlbiA9ICRzZWxmLT5tYXJrdXBfaHRtbF9lbGVtZW50KCAkMSwgJ2snICk7CiAgICAgICAgICAgIHB1c2ggQGNvbG9yZWRfdG9rZW5zLCAkdG9rZW47CiAgICAgICAgICAgICR0b2tlbiA9ICQyOwogICAgICAgICAgICAkdHlwZSAgPSAnaSc7CiAgICAgICAgICAgICRzZWxmLT5hZGRfdG9jX2l0ZW0oICIkdG9rZW4iLCAncGFja2FnZScgKTsKICAgICAgICAgICAgJHJwYWNrYWdlX3N0YWNrLT5bJGxldmVsXSA9ICR0b2tlbjsKICAgICAgICB9CgogICAgICAgICR0b2tlbiA9ICRzZWxmLT5tYXJrdXBfaHRtbF9lbGVtZW50KCAkdG9rZW4sICR0eXBlICk7CiAgICAgICAgcHVzaCBAY29sb3JlZF90b2tlbnMsICR0b2tlbjsKICAgIH0KICAgIHJldHVybiAoIFxAY29sb3JlZF90b2tlbnMgKTsKfSAjIyBlbmQgc3ViIG1hcmt1cF90b2tlbnMKCnN1YiBtYXJrdXBfaHRtbF9lbGVtZW50IHsKICAgIG15ICggJHNlbGYsICR0b2tlbiwgJHR5cGUgKSA9IEBfOwoKICAgIHJldHVybiAkdG9rZW4gaWYgKCAkdHlwZSBlcSAnYicgKTsgICAgICAgICAjIHNraXAgYSBibGFuayB0b2tlbgogICAgcmV0dXJuICR0b2tlbiBpZiAoICR0b2tlbiA9fiAvXlxzKiQvICk7ICAgICMgc2tpcCBhIGJsYW5rIGxpbmUKICAgICR0b2tlbiA9IGVzY2FwZV9odG1sKCR0b2tlbik7CgogICAgIyBnZXQgdGhlIHNob3J0IGFiYnJldmlhdGlvbiBmb3IgdGhpcyB0b2tlbiB0eXBlCiAgICBteSAkc2hvcnRfbmFtZSA9ICR0b2tlbl9zaG9ydF9uYW1lc3skdHlwZX07CiAgICBpZiAoICFkZWZpbmVkKCRzaG9ydF9uYW1lKSApIHsKICAgICAgICAkc2hvcnRfbmFtZSA9ICJwdSI7ICAgICAgICAgICAgICAgICAgICAjIHB1bmN0dWF0aW9uIGlzIGRlZmF1bHQKICAgIH0KCiAgICAjIGhhbmRsZSBzdHlsZSBzaGVldHMuLgogICAgaWYgKCAhJHJPcHRzLT57J25vaHRtbC1zdHlsZS1zaGVldHMnfSApIHsKICAgICAgICBpZiAoICRzaG9ydF9uYW1lIG5lICdwdScgKSB7CiAgICAgICAgICAgICR0b2tlbiA9IHFxKDxzcGFuIGNsYXNzPSIkc2hvcnRfbmFtZSI+KSAuICR0b2tlbiAuICI8L3NwYW4+IjsKICAgICAgICB9CiAgICB9CgogICAgIyBoYW5kbGUgbm8gc3R5bGUgc2hlZXRzLi4KICAgIGVsc2UgewogICAgICAgIG15ICRjb2xvciA9ICRodG1sX2NvbG9yeyRzaG9ydF9uYW1lfTsKCiAgICAgICAgaWYgKCAkY29sb3IgJiYgKCAkY29sb3IgbmUgJHJPcHRzLT57J2h0bWwtY29sb3ItcHVuY3R1YXRpb24nfSApICkgewogICAgICAgICAgICAkdG9rZW4gPSBxcSg8Zm9udCBjb2xvcj0iJGNvbG9yIj4pIC4gJHRva2VuIC4gIjwvZm9udD4iOwogICAgICAgIH0KICAgICAgICBpZiAoICRodG1sX2l0YWxpY3skc2hvcnRfbmFtZX0gKSB7ICR0b2tlbiA9ICI8aT4kdG9rZW48L2k+IiB9CiAgICAgICAgaWYgKCAkaHRtbF9ib2xkeyRzaG9ydF9uYW1lfSApICAgeyAkdG9rZW4gPSAiPGI+JHRva2VuPC9iPiIgfQogICAgfQogICAgcmV0dXJuICR0b2tlbjsKfSAjIyBlbmQgc3ViIG1hcmt1cF9odG1sX2VsZW1lbnQKCnN1YiBlc2NhcGVfaHRtbCB7CgogICAgbXkgJHRva2VuID0gc2hpZnQ7CiAgICBpZiAoICRtaXNzaW5nX2h0bWxfZW50aXRpZXMgfHwgISRyT3B0c19odG1sX2VudGl0aWVzICkgewogICAgICAgICR0b2tlbiA9fiBzL1wmLyZhbXA7L2c7CiAgICAgICAgJHRva2VuID1+IHMvXDwvJmx0Oy9nOwogICAgICAgICR0b2tlbiA9fiBzL1w+LyZndDsvZzsKICAgICAgICAkdG9rZW4gPX4gcy9cIi8mcXVvdDsvZzsKICAgIH0KICAgIGVsc2UgewogICAgICAgIEhUTUw6OkVudGl0aWVzOjplbmNvZGVfZW50aXRpZXMoJHRva2VuKTsKICAgIH0KICAgIHJldHVybiAkdG9rZW47Cn0gIyMgZW5kIHN1YiBlc2NhcGVfaHRtbAoKc3ViIGZpbmlzaF9mb3JtYXR0aW5nIHsKCiAgICAjIGNhbGxlZCBhZnRlciBsYXN0IGxpbmUKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICAkc2VsZi0+Y2xvc2VfaHRtbF9maWxlKCk7CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBmaW5pc2hfZm9ybWF0dGluZwoKc3ViIHdyaXRlX2xpbmUgewoKICAgIG15ICggJHNlbGYsICRsaW5lX29mX3Rva2VucyApID0gQF87CiAgICByZXR1cm4gdW5sZXNzICRzZWxmLT57X2h0bWxfZmlsZV9vcGVuZWR9OwogICAgbXkgJGh0bWxfcHJlX2ZoID0gJHNlbGYtPntfaHRtbF9wcmVfZmh9OwogICAgbXkgJGxpbmVfdHlwZSAgID0gJGxpbmVfb2ZfdG9rZW5zLT57X2xpbmVfdHlwZX07CiAgICBteSAkaW5wdXRfbGluZSAgPSAkbGluZV9vZl90b2tlbnMtPntfbGluZV90ZXh0fTsKICAgIG15ICRsaW5lX251bWJlciA9ICRsaW5lX29mX3Rva2Vucy0+e19saW5lX251bWJlcn07CiAgICBjaG9tcCAkaW5wdXRfbGluZTsKCiAgICAjIG1hcmt1cCBsaW5lIG9mIGNvZGUuLgogICAgbXkgJGh0bWxfbGluZTsKICAgIGlmICggJGxpbmVfdHlwZSBlcSAnQ09ERScgKSB7CiAgICAgICAgbXkgJHJ0b2tlbl90eXBlID0gJGxpbmVfb2ZfdG9rZW5zLT57X3J0b2tlbl90eXBlfTsKICAgICAgICBteSAkcnRva2VucyAgICAgPSAkbGluZV9vZl90b2tlbnMtPntfcnRva2Vuc307CiAgICAgICAgbXkgJHJsZXZlbHMgICAgID0gJGxpbmVfb2ZfdG9rZW5zLT57X3JsZXZlbHN9OwoKICAgICAgICBpZiAoICRpbnB1dF9saW5lID1+IC8oXlxzKikvICkgewogICAgICAgICAgICAkaHRtbF9saW5lID0gJDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkaHRtbF9saW5lID0gRU1QVFlfU1RSSU5HOwogICAgICAgIH0KICAgICAgICBteSAoJHJjb2xvcmVkX3Rva2VucykgPQogICAgICAgICAgJHNlbGYtPm1hcmt1cF90b2tlbnMoICRydG9rZW5zLCAkcnRva2VuX3R5cGUsICRybGV2ZWxzICk7CiAgICAgICAgJGh0bWxfbGluZSAuPSBqb2luIEVNUFRZX1NUUklORywgQHskcmNvbG9yZWRfdG9rZW5zfTsKICAgIH0KCiAgICAjIG1hcmt1cCBsaW5lIG9mIG5vbi1jb2RlLi4KICAgIGVsc2UgewogICAgICAgIG15ICRsaW5lX2NoYXJhY3RlcjsKICAgICAgICBpZiAgICAoICRsaW5lX3R5cGUgZXEgJ0hFUkUnICkgICAgICAgeyAkbGluZV9jaGFyYWN0ZXIgPSAnSCcgfQogICAgICAgIGVsc2lmICggJGxpbmVfdHlwZSBlcSAnSEVSRV9FTkQnICkgICB7ICRsaW5lX2NoYXJhY3RlciA9ICdoJyB9CiAgICAgICAgZWxzaWYgKCAkbGluZV90eXBlIGVxICdGT1JNQVQnICkgICAgIHsgJGxpbmVfY2hhcmFjdGVyID0gJ0gnIH0KICAgICAgICBlbHNpZiAoICRsaW5lX3R5cGUgZXEgJ0ZPUk1BVF9FTkQnICkgeyAkbGluZV9jaGFyYWN0ZXIgPSAnaCcgfQogICAgICAgIGVsc2lmICggJGxpbmVfdHlwZSBlcSAnU0tJUCcgKSAgICAgICB7ICRsaW5lX2NoYXJhY3RlciA9ICdIJyB9CiAgICAgICAgZWxzaWYgKCAkbGluZV90eXBlIGVxICdTS0lQX0VORCcgKSAgIHsgJGxpbmVfY2hhcmFjdGVyID0gJ2gnIH0KICAgICAgICBlbHNpZiAoICRsaW5lX3R5cGUgZXEgJ1NZU1RFTScgKSAgICAgeyAkbGluZV9jaGFyYWN0ZXIgPSAnYycgfQogICAgICAgIGVsc2lmICggJGxpbmVfdHlwZSBlcSAnRU5EX1NUQVJUJyApIHsKICAgICAgICAgICAgJGxpbmVfY2hhcmFjdGVyID0gJ2snOwogICAgICAgICAgICAkc2VsZi0+YWRkX3RvY19pdGVtKCAnX19FTkRfXycsICdfX0VORF9fJyApOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRsaW5lX3R5cGUgZXEgJ0RBVEFfU1RBUlQnICkgewogICAgICAgICAgICAkbGluZV9jaGFyYWN0ZXIgPSAnayc7CiAgICAgICAgICAgICRzZWxmLT5hZGRfdG9jX2l0ZW0oICdfX0RBVEFfXycsICdfX0RBVEFfXycgKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkbGluZV90eXBlID1+IC9eUE9ELyApIHsKCiAgICAgICAgICAgICMgZml4IGZvciBjMjUwOiBjaGFuZ2VkICdQJyB0byAncGQnIGhlcmUgYW5kIGluICV0b2tlbl9zaG9ydF9uYW1lcwogICAgICAgICAgICAjIHRvIGFsbG93IHVzZSBvZiAnUCcgYXMgbmV3IHBhY2thZ2UgdG9rZW4gdHlwZQogICAgICAgICAgICAkbGluZV9jaGFyYWN0ZXIgPSAncGQnOwogICAgICAgICAgICBpZiAoICRyT3B0cy0+eydwb2QyaHRtbCd9ICkgewogICAgICAgICAgICAgICAgbXkgJGh0bWxfcG9kX2ZoID0gJHNlbGYtPntfaHRtbF9wb2RfZmh9OwogICAgICAgICAgICAgICAgaWYgKCAkbGluZV90eXBlIGVxICdQT0RfU1RBUlQnICkgewoKICAgICAgICAgICAgICAgICAgICBteSAkcnByZV9zdHJpbmdfc3RhY2sgPSAkc2VsZi0+e19ycHJlX3N0cmluZ19zdGFja307CiAgICAgICAgICAgICAgICAgICAgbXkgJHJwcmVfc3RyaW5nICAgICAgID0gJHJwcmVfc3RyaW5nX3N0YWNrLT5bLTFdOwoKICAgICAgICAgICAgICAgICAgICAjIGlmIHdlIGhhdmUgd3JpdHRlbiBhbnkgbm9uLWJsYW5rIGxpbmVzIHRvIHRoZQogICAgICAgICAgICAgICAgICAgICMgY3VycmVudCBwcmUgc2VjdGlvbiwgc3RhcnQgd3JpdGluZyB0byBhIG5ldyBvdXRwdXQKICAgICAgICAgICAgICAgICAgICAjIHN0cmluZwogICAgICAgICAgICAgICAgICAgIGlmICggJHskcnByZV9zdHJpbmd9ID1+IC9cUy8gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRwcmVfc3RyaW5nOwogICAgICAgICAgICAgICAgICAgICAgICAkaHRtbF9wcmVfZmggPQogICAgICAgICAgICAgICAgICAgICAgICAgIFBlcmw6OlRpZHk6OklPU2NhbGFyLT5uZXcoIFwkcHJlX3N0cmluZywgJ3cnICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT57X2h0bWxfcHJlX2ZofSA9ICRodG1sX3ByZV9maDsKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAeyRycHJlX3N0cmluZ19zdGFja30sIFwkcHJlX3N0cmluZzsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgbGVhdmUgYSBtYXJrZXIgaW4gdGhlIHBvZCBzdHJlYW0gc28gd2Uga25vdwogICAgICAgICAgICAgICAgICAgICAgICAjIHdoZXJlIHRvIHB1dCB0aGUgcHJlIHNlY3Rpb24gd2UganVzdAogICAgICAgICAgICAgICAgICAgICAgICAjIGZpbmlzaGVkLgogICAgICAgICAgICAgICAgICAgICAgICBteSAkZm9yX2h0bWwgPSAnPWZvciBodG1sJzsgICAgIyBkb24ndCBjb25mdXNlIHBvZCB1dGlscwogICAgICAgICAgICAgICAgICAgICAgICAkaHRtbF9wb2RfZmgtPnByaW50KDw8RU9NKTsKCiRmb3JfaHRtbAo8IS0tIHBFUkxUSURZIHNFQ1RJT04gLS0+CgpFT00KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgb3RoZXJ3aXNlLCBqdXN0IGNsZWFyIHRoZSBjdXJyZW50IHN0cmluZyBhbmQgc3RhcnQKICAgICAgICAgICAgICAgICAgICAjIG92ZXIKICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHskcnByZV9zdHJpbmd9ID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICAgICAgICAgICAgICAkaHRtbF9wb2RfZmgtPnByaW50KCJcbiIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRodG1sX3BvZF9maC0+cHJpbnQoICRpbnB1dF9saW5lIC4gIlxuIiApOwogICAgICAgICAgICAgICAgaWYgKCAkbGluZV90eXBlIGVxICdQT0RfRU5EJyApIHsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+e19wb2RfY3V0X2NvdW50fSsrOwogICAgICAgICAgICAgICAgICAgICRodG1sX3BvZF9maC0+cHJpbnQoIlxuIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7ICRsaW5lX2NoYXJhY3RlciA9ICdRJyB9CiAgICAgICAgJGh0bWxfbGluZSA9ICRzZWxmLT5tYXJrdXBfaHRtbF9lbGVtZW50KCAkaW5wdXRfbGluZSwgJGxpbmVfY2hhcmFjdGVyICk7CiAgICB9CgogICAgIyBhZGQgdGhlIGxpbmUgbnVtYmVyIGlmIHJlcXVlc3RlZAogICAgaWYgKCAkck9wdHMtPnsnaHRtbC1saW5lLW51bWJlcnMnfSApIHsKICAgICAgICBteSAkZXh0cmFfc3BhY2UgPQogICAgICAgICAgICAoICRsaW5lX251bWJlciA8IDEwICkgICA/IFNQQUNFIHggMwogICAgICAgICAgOiAoICRsaW5lX251bWJlciA8IDEwMCApICA/IFNQQUNFIHggMgogICAgICAgICAgOiAoICRsaW5lX251bWJlciA8IDEwMDAgKSA/IFNQQUNFCiAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRU1QVFlfU1RSSU5HOwogICAgICAgICRodG1sX2xpbmUgPSAkZXh0cmFfc3BhY2UgLiAkbGluZV9udW1iZXIgLiBTUEFDRSAuICRodG1sX2xpbmU7CiAgICB9CgogICAgIyB3cml0ZSB0aGUgbGluZQogICAgJGh0bWxfcHJlX2ZoLT5wcmludCgiJGh0bWxfbGluZVxuIik7CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiB3cml0ZV9saW5lCgp9ICMjIGVuZCBwYWNrYWdlIFBlcmw6OlRpZHk6Okh0bWxXcml0ZXIKMTsK</File>
        <File Location="Kernel/cpan-lib/Perl/Tidy/Diagnostics.pm" Permission="660" Encode="Base64">IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMKIyBUaGUgUGVybDo6VGlkeTo6RGlhZ25vc3RpY3MgY2xhc3Mgd3JpdGVzIHRoZSBESUFHTk9TVElDUyBmaWxlLCB3aGljaCBpcwojIHVzZWZ1bCBmb3IgcHJvZ3JhbSBkZXZlbG9wbWVudC4KIwojIE9ubHkgb25lIHN1Y2ggZmlsZSBpcyBjcmVhdGVkIHJlZ2FyZGxlc3Mgb2YgdGhlIG51bWJlciBvZiBpbnB1dAojIGZpbGVzIHByb2Nlc3NlZC4gIFRoaXMgYWxsb3dzIHRoZSByZXN1bHRzIG9mIHByb2Nlc3NpbmcgbWFueSBmaWxlcwojIHRvIGJlIHN1bW1hcml6ZWQgaW4gYSBzaW5nbGUgZmlsZS4KCiMgT3V0cHV0IG1lc3NhZ2VzIGdvIHRvIGEgZmlsZSBuYW1lZCBESUFHTk9TVElDUywgd2hlcmUKIyB0aGV5IGFyZSBsYWJlbGVkIGJ5IGZpbGUgYW5kIGxpbmUuICBUaGlzIGFsbG93cyBtYW55IGZpbGVzIHRvIGJlCiMgc2Nhbm5lZCBhdCBvbmNlIGZvciBzb21lIHBhcnRpY3VsYXIgY29uZGl0aW9uIG9mIGludGVyZXN0LiAgSXQgd2FzCiMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgZGV2ZWxvcGluZyBndWVzc2luZyBzdHJhdGVnaWVzLgojCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKcGFja2FnZSBQZXJsOjpUaWR5OjpEaWFnbm9zdGljczsKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgRW5nbGlzaCBxdyggLW5vX21hdGNoX3ZhcnMgKTsKb3VyICRWRVJTSU9OID0gJzIwMjUwMTA1JzsKCnVzZSBjb25zdGFudCBFTVBUWV9TVFJJTkcgPT4gcXt9OwoKc3ViIEFVVE9MT0FEIHsKCiAgICAjIENhdGNoIGFueSB1bmRlZmluZWQgc3ViIGNhbGxzIHNvIHRoYXQgd2UgYXJlIHN1cmUgdG8gZ2V0CiAgICAjIHNvbWUgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbi4gIFRoaXMgc3ViIHNob3VsZCBuZXZlciBiZSBjYWxsZWQKICAgICMgZXhjZXB0IGZvciBhIHByb2dyYW1taW5nIGVycm9yLgogICAgb3VyICRBVVRPTE9BRDsKICAgIHJldHVybiBpZiAoICRBVVRPTE9BRCA9fiAvXGJERVNUUk9ZJC8gKTsKICAgIG15ICggJHBrZywgJGZuYW1lLCAkbG5vICkgPSBjYWxsZXIoKTsKICAgIG15ICRteV9wYWNrYWdlID0gX19QQUNLQUdFX187CiAgICBwcmludCB7KlNUREVSUn0gPDxFT007Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KRXJyb3IgZGV0ZWN0ZWQgaW4gcGFja2FnZSAnJG15X3BhY2thZ2UnLCB2ZXJzaW9uICRWRVJTSU9OClJlY2VpdmVkIHVuZXhwZWN0ZWQgQVVUT0xPQUQgY2FsbCBmb3Igc3ViICckQVVUT0xPQUQnCkNhbGxlZCBmcm9tIHBhY2thZ2U6ICckcGtnJwpDYWxsZWQgZnJvbSBGaWxlICckZm5hbWUnICBhdCBsaW5lICckbG5vJwpUaGlzIGVycm9yIGlzIHByb2JhYmx5IGR1ZSB0byBhIHJlY2VudCBwcm9ncmFtbWluZyBjaGFuZ2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpFT00KICAgIGV4aXQgMTsKfSAjIyBlbmQgc3ViIEFVVE9MT0FECgpzdWIgREVTVFJPWSB7CgogICAgIyByZXF1aXJlZCB0byBhdm9pZCBjYWxsIHRvIEFVVE9MT0FEIGluIHNvbWUgdmVyc2lvbnMgb2YgcGVybAp9CgpzdWIgbmV3IHsKCiAgICBteSAkY2xhc3MgPSBzaGlmdDsKICAgIHJldHVybiBibGVzcyB7CiAgICAgICAgX3dyaXRlX2RpYWdub3N0aWNzX2NvdW50ID0+IDAsCiAgICAgICAgX2xhc3RfZGlhZ25vc3RpY19maWxlICAgID0+IEVNUFRZX1NUUklORywKICAgICAgICBfaW5wdXRfZmlsZSAgICAgICAgICAgICAgPT4gRU1QVFlfU1RSSU5HLAogICAgICAgIF9maCAgICAgICAgICAgICAgICAgICAgICA9PiB1bmRlZiwKICAgIH0sICRjbGFzczsKfSAjIyBlbmQgc3ViIG5ldwoKc3ViIHNldF9pbnB1dF9maWxlIHsKICAgIG15ICggJHNlbGYsICRpbnB1dF9maWxlICkgPSBAXzsKICAgICRzZWxmLT57X2lucHV0X2ZpbGV9ID0gJGlucHV0X2ZpbGU7CiAgICByZXR1cm47Cn0KCnN1YiB3cml0ZV9kaWFnbm9zdGljcyB7CiAgICBteSAoICRzZWxmLCAkbXNnLCAkbGluZV9udW1iZXIgKSA9IEBfOwoKICAgICMgV3JpdGUgYSBtZXNzYWdlIHRvIHRoZSBkaWFnbm9zdGljcyBmaWxlCiAgICAjIElucHV0IHBhcmFtZXRlcnM6CiAgICAjICAkbXNnID0gc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGV2ZW50CiAgICAjICAkbGluZV9udW1iZXIgPSBvcHRpb25hbCBsaW5lIG51bWJlcgoKICAgIGlmICggISRzZWxmLT57X3dyaXRlX2RpYWdub3N0aWNzX2NvdW50fSApIHsKICAgICAgICBvcGVuKCAkc2VsZi0+e19maH0sICI+IiwgIkRJQUdOT1NUSUNTIiApCiAgICAgICAgICBvciBQZXJsOjpUaWR5OjpEaWUoImNvdWxkbid0IG9wZW4gRElBR05PU1RJQ1M6ICRPU19FUlJPUlxuIik7CiAgICB9CgogICAgaWYgKCBkZWZpbmVkKCRsaW5lX251bWJlcikgKSB7CiAgICAgICAgJG1zZyA9ICIkbGluZV9udW1iZXI6XHQkbXNnIjsKICAgIH0KCiAgICBteSAkZmggICAgICAgICAgICAgICAgICAgPSAkc2VsZi0+e19maH07CiAgICBteSAkbGFzdF9kaWFnbm9zdGljX2ZpbGUgPSAkc2VsZi0+e19sYXN0X2RpYWdub3N0aWNfZmlsZX07CiAgICBteSAkaW5wdXRfZmlsZSAgICAgICAgICAgPSAkc2VsZi0+e19pbnB1dF9maWxlfTsKICAgIGlmICggJGxhc3RfZGlhZ25vc3RpY19maWxlIG5lICRpbnB1dF9maWxlICkgewogICAgICAgICRmaC0+cHJpbnQoIlxuRklMRTokaW5wdXRfZmlsZVxuIik7CiAgICB9CiAgICAkc2VsZi0+e19sYXN0X2RpYWdub3N0aWNfZmlsZX0gPSAkaW5wdXRfZmlsZTsKICAgICRmaC0+cHJpbnQoJG1zZyk7CiAgICAkc2VsZi0+e193cml0ZV9kaWFnbm9zdGljc19jb3VudH0rKzsKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHdyaXRlX2RpYWdub3N0aWNzCgoxOwo=</File>
        <File Location="Kernel/cpan-lib/Perl/Tidy/Logger.pm" Permission="660" Encode="Base64">IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMKIyBUaGUgUGVybDo6VGlkeTo6TG9nZ2VyIGNsYXNzIHdyaXRlcyBhbnkgLkxPRyBhbmQgLkVSUiBmaWxlcwojIGFuZCBzdXBwbGllcyBzb21lIGJhc2ljIHJ1biBpbmZvcm1hdGlvbiBmb3IgZXJyb3IgaGFuZGxpbmcuCiMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpwYWNrYWdlIFBlcmw6OlRpZHk6OkxvZ2dlcjsKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwpvdXIgJFZFUlNJT04gPSAnMjAyNTAxMDUnOwp1c2UgQ2FycDsKdXNlIEVuZ2xpc2ggcXcoIC1ub19tYXRjaF92YXJzICk7Cgp1c2UgY29uc3RhbnQgRU1QVFlfU1RSSU5HID0+IHF7fTsKdXNlIGNvbnN0YW50IFNQQUNFICAgICAgICA9PiBxeyB9OwoKc3ViIEFVVE9MT0FEIHsKCiAgICAjIENhdGNoIGFueSB1bmRlZmluZWQgc3ViIGNhbGxzIHNvIHRoYXQgd2UgYXJlIHN1cmUgdG8gZ2V0CiAgICAjIHNvbWUgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbi4gIFRoaXMgc3ViIHNob3VsZCBuZXZlciBiZSBjYWxsZWQKICAgICMgZXhjZXB0IGZvciBhIHByb2dyYW1taW5nIGVycm9yLgogICAgb3VyICRBVVRPTE9BRDsKICAgIHJldHVybiBpZiAoICRBVVRPTE9BRCA9fiAvXGJERVNUUk9ZJC8gKTsKICAgIG15ICggJHBrZywgJGZuYW1lLCAkbG5vICkgPSBjYWxsZXIoKTsKICAgIG15ICRteV9wYWNrYWdlID0gX19QQUNLQUdFX187CiAgICBwcmludCB7KlNUREVSUn0gPDxFT007Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KRXJyb3IgZGV0ZWN0ZWQgaW4gcGFja2FnZSAnJG15X3BhY2thZ2UnLCB2ZXJzaW9uICRWRVJTSU9OClJlY2VpdmVkIHVuZXhwZWN0ZWQgQVVUT0xPQUQgY2FsbCBmb3Igc3ViICckQVVUT0xPQUQnCkNhbGxlZCBmcm9tIHBhY2thZ2U6ICckcGtnJwpDYWxsZWQgZnJvbSBGaWxlICckZm5hbWUnICBhdCBsaW5lICckbG5vJwpUaGlzIGVycm9yIGlzIHByb2JhYmx5IGR1ZSB0byBhIHJlY2VudCBwcm9ncmFtbWluZyBjaGFuZ2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpFT00KICAgIGV4aXQgMTsKfSAjIyBlbmQgc3ViIEFVVE9MT0FECgpzdWIgREVTVFJPWSB7CgogICAgIyByZXF1aXJlZCB0byBhdm9pZCBjYWxsIHRvIEFVVE9MT0FEIGluIHNvbWUgdmVyc2lvbnMgb2YgcGVybAp9Cgp1c2UgY29uc3RhbnQgREVGQVVMVF9MT0dGSUxFX0dBUCA9PiA1MDsKCnN1YiBuZXcgewoKICAgIG15ICggJGNsYXNzLCBAYXJnbGlzdCApID0gQF87CiAgICBpZiAoIEBhcmdsaXN0ICUgMiApIHsgY3JvYWsgIk9kZCBudW1iZXIgb2YgaXRlbXMgaW4gYXJnIGhhc2ggbGlzdFxuIiB9CgogICAgbXkgJWRlZmF1bHRzID0gKAogICAgICAgIHJPcHRzICAgICAgICAgICA9PiB1bmRlZiwKICAgICAgICBsb2dfZmlsZSAgICAgICAgPT4gdW5kZWYsCiAgICAgICAgd2FybmluZ19maWxlICAgID0+IHVuZGVmLAogICAgICAgIGZoX3N0ZGVyciAgICAgICA9PiB1bmRlZiwKICAgICAgICBkaXNwbGF5X25hbWUgICAgPT4gdW5kZWYsCiAgICAgICAgaXNfZW5jb2RlZF9kYXRhID0+IHVuZGVmLAogICAgKTsKCiAgICBteSAlYXJncyA9ICggJWRlZmF1bHRzLCBAYXJnbGlzdCApOwoKICAgIG15ICRyT3B0cyAgICAgICAgICAgPSAkYXJnc3tyT3B0c307CiAgICBteSAkbG9nX2ZpbGUgICAgICAgID0gJGFyZ3N7bG9nX2ZpbGV9OwogICAgbXkgJHdhcm5pbmdfZmlsZSAgICA9ICRhcmdze3dhcm5pbmdfZmlsZX07CiAgICBteSAkZmhfc3RkZXJyICAgICAgID0gJGFyZ3N7Zmhfc3RkZXJyfTsKICAgIG15ICRkaXNwbGF5X25hbWUgICAgPSAkYXJnc3tkaXNwbGF5X25hbWV9OwogICAgbXkgJGlzX2VuY29kZWRfZGF0YSA9ICRhcmdze2lzX2VuY29kZWRfZGF0YX07CgogICAgbXkgJGZoX3dhcm5pbmdzID0gJHJPcHRzLT57J3N0YW5kYXJkLWVycm9yLW91dHB1dCd9ID8gJGZoX3N0ZGVyciA6IHVuZGVmOwoKICAgICMgcmVtb3ZlIGFueSBvbGQgZXJyb3Igb3V0cHV0IGZpbGUgaWYgd2UgbWlnaHQgd3JpdGUgYSBuZXcgb25lCiAgICBpZiAoICEkZmhfd2FybmluZ3MgJiYgIXJlZigkd2FybmluZ19maWxlKSApIHsKICAgICAgICBpZiAoIC1lICR3YXJuaW5nX2ZpbGUgKSB7CiAgICAgICAgICAgIHVubGluaygkd2FybmluZ19maWxlKQogICAgICAgICAgICAgIG9yIFBlcmw6OlRpZHk6OkRpZSgKICAgICAgICAgICAgICAgICJjb3VsZG4ndCB1bmxpbmsgd2FybmluZyBmaWxlICR3YXJuaW5nX2ZpbGU6ICRPU19FUlJPUlxuIik7CiAgICAgICAgfQogICAgfQoKICAgIG15ICRsb2dmaWxlX2dhcCA9CiAgICAgIGRlZmluZWQoICRyT3B0cy0+eydsb2dmaWxlLWdhcCd9ICkKICAgICAgPyAkck9wdHMtPnsnbG9nZmlsZS1nYXAnfQogICAgICA6IERFRkFVTFRfTE9HRklMRV9HQVA7CiAgICBpZiAoICRsb2dmaWxlX2dhcCA9PSAwICkgeyAkbG9nZmlsZV9nYXAgPSAxIH0KCiAgICBteSAkZmlsZW5hbWVfc3RhbXAgICAgPSAkZGlzcGxheV9uYW1lID8gJGRpc3BsYXlfbmFtZSAuICc6JyA6ICI/PyI7CiAgICBteSAkaW5wdXRfc3RyZWFtX25hbWUgPSAkZGlzcGxheV9uYW1lID8gJGRpc3BsYXlfbmFtZSAgICAgICA6ICI/PyI7CiAgICByZXR1cm4gYmxlc3MgewogICAgICAgIF9sb2dfZmlsZSAgICAgICAgICAgICAgICAgICAgICA9PiAkbG9nX2ZpbGUsCiAgICAgICAgX2xvZ2ZpbGVfZ2FwICAgICAgICAgICAgICAgICAgID0+ICRsb2dmaWxlX2dhcCwKICAgICAgICBfck9wdHMgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJHJPcHRzLAogICAgICAgIF9maF93YXJuaW5ncyAgICAgICAgICAgICAgICAgICA9PiAkZmhfd2FybmluZ3MsCiAgICAgICAgX2xhc3RfaW5wdXRfbGluZV93cml0dGVuICAgICAgID0+IDAsCiAgICAgICAgX2xhc3RfaW5wdXRfbGluZV9udW1iZXIgICAgICAgID0+IHVuZGVmLAogICAgICAgIF9hdF9lbmRfb2ZfZmlsZSAgICAgICAgICAgICAgICA9PiAwLAogICAgICAgIF91c2VfcHJlZml4ICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgIF9ibG9ja19sb2dfb3V0cHV0ICAgICAgICAgICAgICA9PiAwLAogICAgICAgIF9saW5lX29mX3Rva2VucyAgICAgICAgICAgICAgICA9PiB1bmRlZiwKICAgICAgICBfb3V0cHV0X2xpbmVfbnVtYmVyICAgICAgICAgICAgPT4gdW5kZWYsCiAgICAgICAgX3dyb3RlX2xpbmVfaW5mb3JtYXRpb25fc3RyaW5nID0+IDAsCiAgICAgICAgX3dyb3RlX2NvbHVtbl9oZWFkaW5ncyAgICAgICAgID0+IDAsCiAgICAgICAgX3dhcm5pbmdfZmlsZSAgICAgICAgICAgICAgICAgID0+ICR3YXJuaW5nX2ZpbGUsCiAgICAgICAgX3dhcm5pbmdfY291bnQgICAgICAgICAgICAgICAgID0+IDAsCiAgICAgICAgX2NvbXBsYWludF9jb3VudCAgICAgICAgICAgICAgID0+IDAsCiAgICAgICAgX2lzX2VuY29kZWRfZGF0YSAgICAgICAgICAgICAgID0+ICRpc19lbmNvZGVkX2RhdGEsCiAgICAgICAgX3Nhd19jb2RlX2J1ZyAgICAgID0+IC0xLCAgICAgICAgICAgICAgICAgICAgIyAtMT1ubyAwPW1heWJlIDE9Zm9yIHN1cmUKICAgICAgICBfc2F3X2JyYWNlX2Vycm9yICAgPT4gIDAsCiAgICAgICAgX291dHB1dF9hcnJheSAgICAgID0+IFtdLAogICAgICAgIF9pbnB1dF9zdHJlYW1fbmFtZSA9PiAkaW5wdXRfc3RyZWFtX25hbWUsCiAgICAgICAgX2ZpbGVuYW1lX3N0YW1wICAgID0+ICRmaWxlbmFtZV9zdGFtcCwKICAgICAgICBfc2F2ZV9sb2dmaWxlICAgICAgPT4gJHJPcHRzLT57J2xvZ2ZpbGUnfSwKICAgIH0sICRjbGFzczsKfSAjIyBlbmQgc3ViIG5ldwoKc3ViIGdldF9pbnB1dF9zdHJlYW1fbmFtZSB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgcmV0dXJuICRzZWxmLT57X2lucHV0X3N0cmVhbV9uYW1lfTsKfQoKc3ViIHNldF9sYXN0X2lucHV0X2xpbmVfbnVtYmVyIHsKICAgIG15ICggJHNlbGYsICRsbm8gKSA9IEBfOwogICAgJHNlbGYtPntfbGFzdF9pbnB1dF9saW5lX251bWJlcn0gPSAkbG5vOwogICAgcmV0dXJuOwp9CgpzdWIgZ2V0X3dhcm5pbmdfY291bnQgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgIHJldHVybiAkc2VsZi0+e193YXJuaW5nX2NvdW50fTsKfQoKc3ViIGdldF91c2VfcHJlZml4IHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICByZXR1cm4gJHNlbGYtPntfdXNlX3ByZWZpeH07Cn0KCnN1YiBibG9ja19sb2dfb3V0cHV0IHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICAkc2VsZi0+e19ibG9ja19sb2dfb3V0cHV0fSA9IDE7CiAgICByZXR1cm47Cn0KCnN1YiB1bmJsb2NrX2xvZ19vdXRwdXQgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgICRzZWxmLT57X2Jsb2NrX2xvZ19vdXRwdXR9ID0gMDsKICAgIHJldHVybjsKfQoKc3ViIGludGVycnVwdF9sb2dmaWxlIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICAkc2VsZi0+e191c2VfcHJlZml4fSA9IDA7CiAgICAkc2VsZi0+d2FybmluZygiXG4iKTsKICAgICRzZWxmLT53cml0ZV9sb2dmaWxlX2VudHJ5KCAnIycgeCAyNCAuICIgIFdBUk5JTkcgICIgLiAnIycgeCAyNSAuICJcbiIgKTsKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGludGVycnVwdF9sb2dmaWxlCgpzdWIgcmVzdW1lX2xvZ2ZpbGUgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgICRzZWxmLT53cml0ZV9sb2dmaWxlX2VudHJ5KCAnIycgeCA2MCAuICJcbiIgKTsKICAgICRzZWxmLT57X3VzZV9wcmVmaXh9ID0gMTsKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHJlc3VtZV9sb2dmaWxlCgpzdWIgd2VfYXJlX2F0X3RoZV9sYXN0X2xpbmUgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgIGlmICggISRzZWxmLT57X3dyb3RlX2xpbmVfaW5mb3JtYXRpb25fc3RyaW5nfSApIHsKICAgICAgICAkc2VsZi0+d3JpdGVfbG9nZmlsZV9lbnRyeSgiTGFzdCBsaW5lXG5cbiIpOwogICAgfQogICAgJHNlbGYtPntfYXRfZW5kX29mX2ZpbGV9ID0gMTsKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHdlX2FyZV9hdF90aGVfbGFzdF9saW5lCgojIHJlY29yZCBzb21lIHN0dWZmIGluIGNhc2Ugd2UgZ28gZG93biBpbiBmbGFtZXMKdXNlIGNvbnN0YW50IE1BWF9QUklOVEVEX0NIQVJTID0+IDM1OwoKc3ViIGJsYWNrX2JveCB7CiAgICBteSAoICRzZWxmLCAkbGluZV9vZl90b2tlbnMsICRvdXRwdXRfbGluZV9udW1iZXIgKSA9IEBfOwoKICAgICMgVGhpcyByb3V0aW5lIHNhdmVzIGluZm9ybWF0aW9uIGNvbXBhcmluZyB0aGUgaW5kZW50YXRpb24gb2YgaW5wdXQKICAgICMgYW5kIG91dHB1dCBsaW5lcyB3aGVuIGEgZGV0YWlsZWQgbG9nZmlsZSBpcyByZXF1ZXN0ZWQuCiAgICAjIFRoaXMgd2FzIHZlcnkgdXNlZnVsIGR1cmluZyB0aGUgaW5pdGlhbCBkZXZlbG9wbWVudCBvZiBwZXJsdGlkeS4KCiAgICBteSAkaW5wdXRfbGluZSAgICAgICAgPSAkbGluZV9vZl90b2tlbnMtPntfbGluZV90ZXh0fTsKICAgIG15ICRpbnB1dF9saW5lX251bWJlciA9ICRsaW5lX29mX3Rva2Vucy0+e19saW5lX251bWJlcn07CgogICAgJHNlbGYtPntfbGluZV9vZl90b2tlbnN9ICAgICAgICAgICAgICAgID0gJGxpbmVfb2ZfdG9rZW5zOwogICAgJHNlbGYtPntfb3V0cHV0X2xpbmVfbnVtYmVyfSAgICAgICAgICAgID0gJG91dHB1dF9saW5lX251bWJlcjsKICAgICRzZWxmLT57X3dyb3RlX2xpbmVfaW5mb3JtYXRpb25fc3RyaW5nfSA9IDA7CgogICAgbXkgJGxhc3RfaW5wdXRfbGluZV93cml0dGVuID0gJHNlbGYtPntfbGFzdF9pbnB1dF9saW5lX3dyaXR0ZW59OwogICAgaWYgKAogICAgICAgICgKICAgICAgICAgICAgKCAkaW5wdXRfbGluZV9udW1iZXIgLSAkbGFzdF9pbnB1dF9saW5lX3dyaXR0ZW4gKSA+PQogICAgICAgICAgICAkc2VsZi0+e19sb2dmaWxlX2dhcH0KICAgICAgICApCiAgICAgICAgfHwgKCAkaW5wdXRfbGluZSA9fiAvXlxzKihzdWJ8cGFja2FnZSlccysoXHcrKS8gKQogICAgICApCiAgICB7CiAgICAgICAgbXkgJHN0cnVjdHVyYWxfaW5kZW50YXRpb25fbGV2ZWwgPSAkbGluZV9vZl90b2tlbnMtPntfbGV2ZWxfMH07CiAgICAgICAgJHN0cnVjdHVyYWxfaW5kZW50YXRpb25fbGV2ZWwgPSAwCiAgICAgICAgICBpZiAoICRzdHJ1Y3R1cmFsX2luZGVudGF0aW9uX2xldmVsIDwgMCApOwogICAgICAgICRzZWxmLT57X2xhc3RfaW5wdXRfbGluZV93cml0dGVufSA9ICRpbnB1dF9saW5lX251bWJlcjsKICAgICAgICAoIG15ICRvdXRfc3RyID0gJGlucHV0X2xpbmUgKSA9fiBzL15ccysvLzsKICAgICAgICBjaG9tcCAkb3V0X3N0cjsKCiAgICAgICAgJG91dF9zdHIgPSAoICcuJyB4ICRzdHJ1Y3R1cmFsX2luZGVudGF0aW9uX2xldmVsICkgLiAkb3V0X3N0cjsKCiAgICAgICAgaWYgKCBsZW5ndGgoJG91dF9zdHIpID4gTUFYX1BSSU5URURfQ0hBUlMgKSB7CiAgICAgICAgICAgICRvdXRfc3RyID0gc3Vic3RyKCAkb3V0X3N0ciwgMCwgTUFYX1BSSU5URURfQ0hBUlMgKSAuICIgLi4uLiI7CiAgICAgICAgfQogICAgICAgICRzZWxmLT5sb2dmaWxlX291dHB1dCggRU1QVFlfU1RSSU5HLCAiJG91dF9zdHJcbiIgKTsKICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGJsYWNrX2JveAoKc3ViIHdyaXRlX2xvZ2ZpbGVfZW50cnkgewoKICAgIG15ICggJHNlbGYsIEBtc2cgKSA9IEBfOwoKICAgICMgYWRkIGxlYWRpbmcgPj4+IHRvIGF2b2lkIGNvbmZ1c2luZyBlcnJvciBtZXNzYWdlcyBhbmQgY29kZQogICAgJHNlbGYtPmxvZ2ZpbGVfb3V0cHV0KCAiPj4+IiwgIkBtc2ciICk7CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiB3cml0ZV9sb2dmaWxlX2VudHJ5CgpzdWIgd3JpdGVfY29sdW1uX2hlYWRpbmdzIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgJHNlbGYtPntfd3JvdGVfY29sdW1uX2hlYWRpbmdzfSA9IDE7CiAgICBteSAkcm91dHB1dF9hcnJheSA9ICRzZWxmLT57X291dHB1dF9hcnJheX07CiAgICBwdXNoIEB7JHJvdXRwdXRfYXJyYXl9LCA8PEVPTTsKClN0YXJ0aW5nIGZvcm1hdHRpbmcgcGFzcy4uLgpUaGUgbmVzdGluZyBkZXB0aHMgaW4gdGhlIHRhYmxlIGJlbG93IGFyZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmVzLgpUaGUgaW5kaWNhdGVkIG91dHB1dCBsaW5lIG51bWJlcnMgYXJlIG5vdCBhbHdheXMgZXhhY3QuCmNpID0gbGV2ZWxzIG9mIGNvbnRpbnVhdGlvbiBpbmRlbnRhdGlvbjsgYmsgPSAxIGlmIGluIEJMT0NLLCAwIGlmIG5vdC4KCmluOm91dCBpbmRlbnQgYyBiICBuZXN0aW5nICAgY29kZSArIG1lc3NhZ2VzOyAobWVzc2FnZXMgYmVnaW4gd2l0aCA+Pj4pCmxpbmVzICBsZXZlbHMgaSBrICAgICAgICAgICAgKGNvZGUgYmVnaW5zIHdpdGggb25lICcuJyBwZXIgaW5kZW50IGxldmVsKQotLS0tLS0gIC0tLS0tIC0gLSAtLS0tLS0tLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRU9NCiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiB3cml0ZV9jb2x1bW5faGVhZGluZ3MKCnN1YiBtYWtlX2xpbmVfaW5mb3JtYXRpb25fc3RyaW5nIHsKCiAgICAjIG1ha2UgY29sdW1ucyBvZiBpbmZvcm1hdGlvbiB3aGVuIGEgbG9nZmlsZSBtZXNzYWdlIG5lZWRzIHRvIGdvIG91dAogICAgbXkgJHNlbGYgICAgICAgICAgICAgICAgICAgID0gc2hpZnQ7CiAgICBteSAkbGluZV9vZl90b2tlbnMgICAgICAgICAgPSAkc2VsZi0+e19saW5lX29mX3Rva2Vuc307CiAgICBteSAkaW5wdXRfbGluZV9udW1iZXIgICAgICAgPSAkbGluZV9vZl90b2tlbnMtPntfbGluZV9udW1iZXJ9OwogICAgbXkgJGxpbmVfaW5mb3JtYXRpb25fc3RyaW5nID0gRU1QVFlfU1RSSU5HOwogICAgaWYgKCRpbnB1dF9saW5lX251bWJlcikgewoKICAgICAgICBteSAkb3V0cHV0X2xpbmVfbnVtYmVyICAgPSAkc2VsZi0+e19vdXRwdXRfbGluZV9udW1iZXJ9OwogICAgICAgIG15ICRicmFjZV9kZXB0aCAgICAgICAgICA9ICRsaW5lX29mX3Rva2Vucy0+e19jdXJseV9icmFjZV9kZXB0aH07CiAgICAgICAgbXkgJHBhcmVuX2RlcHRoICAgICAgICAgID0gJGxpbmVfb2ZfdG9rZW5zLT57X3BhcmVuX2RlcHRofTsKICAgICAgICBteSAkc3F1YXJlX2JyYWNrZXRfZGVwdGggPSAkbGluZV9vZl90b2tlbnMtPntfc3F1YXJlX2JyYWNrZXRfZGVwdGh9OwogICAgICAgIG15ICRndWVzc2VkX2luZGVudGF0aW9uX2xldmVsID0KICAgICAgICAgICRsaW5lX29mX3Rva2Vucy0+e19ndWVzc2VkX2luZGVudGF0aW9uX2xldmVsfTsKCiAgICAgICAgbXkgJHN0cnVjdHVyYWxfaW5kZW50YXRpb25fbGV2ZWwgPSAkbGluZV9vZl90b2tlbnMtPntfbGV2ZWxfMH07CgogICAgICAgICRzZWxmLT53cml0ZV9jb2x1bW5faGVhZGluZ3MoKSB1bmxlc3MgJHNlbGYtPntfd3JvdGVfY29sdW1uX2hlYWRpbmdzfTsKCiAgICAgICAgIyBrZWVwIGxvZ2ZpbGUgY29sdW1ucyBhbGlnbmVkIGZvciBzY3JpcHRzIHVwIHRvIDk5OSBsaW5lczsKICAgICAgICAjIGZvciBsb25nZXIgc2NyaXB0cyBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIKICAgICAgICBteSAkZXh0cmFfc3BhY2UgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgJGV4dHJhX3NwYWNlIC49CiAgICAgICAgICAgICggJGlucHV0X2xpbmVfbnVtYmVyIDwgMTAgKSAgPyBTUEFDRSB4IDIKICAgICAgICAgIDogKCAkaW5wdXRfbGluZV9udW1iZXIgPCAxMDAgKSA/IFNQQUNFCiAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkc7CiAgICAgICAgJGV4dHJhX3NwYWNlIC49CiAgICAgICAgICAgICggJG91dHB1dF9saW5lX251bWJlciA8IDEwICkgID8gU1BBQ0UgeCAyCiAgICAgICAgICA6ICggJG91dHB1dF9saW5lX251bWJlciA8IDEwMCApID8gU1BBQ0UKICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkc7CgogICAgICAgICMgdGhlcmUgYXJlIDIgcG9zc2libGUgbmVzdGluZyBzdHJpbmdzOgogICAgICAgICMgdGhlIG9yaWdpbmFsIHdoaWNoIGxvb2tzIGxpa2UgdGhpczogICgwIFsxIHsyCiAgICAgICAgIyB0aGUgbmV3IG9uZSwgd2hpY2ggbG9va3MgbGlrZSB0aGlzOiAge3tbCiAgICAgICAgIyB0aGUgbmV3IG9uZSBpcyBlYXNpZXIgdG8gcmVhZCwgYW5kIHNob3dzIHRoZSBvcmRlciwgYnV0CiAgICAgICAgIyBjb3VsZCBiZSBhcmJpdHJhcmlseSBsb25nLCBzbyB3ZSB1c2UgaXQgdW5sZXNzIGl0IGlzIHRvbyBsb25nCiAgICAgICAgbXkgJG5lc3Rpbmdfc3RyaW5nID0KICAgICAgICAgICIoJHBhcmVuX2RlcHRoIFskc3F1YXJlX2JyYWNrZXRfZGVwdGggeyRicmFjZV9kZXB0aCI7CiAgICAgICAgbXkgJG5lc3Rpbmdfc3RyaW5nX25ldyA9ICRsaW5lX29mX3Rva2Vucy0+e19uZXN0aW5nX3Rva2Vuc18wfTsKICAgICAgICBteSAkY2lfbGV2ZWwgICAgICAgICAgID0gJGxpbmVfb2ZfdG9rZW5zLT57X2NpX2xldmVsXzB9OwogICAgICAgIGlmICggJGNpX2xldmVsID4gOSApIHsgJGNpX2xldmVsID0gJyonIH0KICAgICAgICBteSAkYmsgPSAoICRsaW5lX29mX3Rva2Vucy0+e19uZXN0aW5nX2Jsb2Nrc18wfSA9fiAvMSQvICkgPyAnMScgOiAnMCc7CgogICAgICAgIGlmICggbGVuZ3RoKCRuZXN0aW5nX3N0cmluZ19uZXcpIDw9IDggKSB7CiAgICAgICAgICAgICRuZXN0aW5nX3N0cmluZyA9CiAgICAgICAgICAgICAgJG5lc3Rpbmdfc3RyaW5nX25ldyAuIFNQQUNFIHggKCA4IC0gbGVuZ3RoKCRuZXN0aW5nX3N0cmluZ19uZXcpICk7CiAgICAgICAgfQogICAgICAgICRsaW5lX2luZm9ybWF0aW9uX3N0cmluZyA9CiJMJGlucHV0X2xpbmVfbnVtYmVyOiRvdXRwdXRfbGluZV9udW1iZXIkZXh0cmFfc3BhY2UgaSRndWVzc2VkX2luZGVudGF0aW9uX2xldmVsOiRzdHJ1Y3R1cmFsX2luZGVudGF0aW9uX2xldmVsICRjaV9sZXZlbCAkYmsgJG5lc3Rpbmdfc3RyaW5nIjsKICAgIH0KICAgIHJldHVybiAkbGluZV9pbmZvcm1hdGlvbl9zdHJpbmc7Cn0gIyMgZW5kIHN1YiBtYWtlX2xpbmVfaW5mb3JtYXRpb25fc3RyaW5nCgpzdWIgbG9nZmlsZV9vdXRwdXQgewogICAgbXkgKCAkc2VsZiwgJHByb21wdCwgJG1zZyApID0gQF87CiAgICByZXR1cm4gaWYgKCAkc2VsZi0+e19ibG9ja19sb2dfb3V0cHV0fSApOwoKICAgIG15ICRyb3V0cHV0X2FycmF5ID0gJHNlbGYtPntfb3V0cHV0X2FycmF5fTsKICAgIGlmICggJHNlbGYtPntfYXRfZW5kX29mX2ZpbGV9IHx8ICEkc2VsZi0+e191c2VfcHJlZml4fSApIHsKICAgICAgICBwdXNoIEB7JHJvdXRwdXRfYXJyYXl9LCAiJG1zZyI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBteSAkbGluZV9pbmZvcm1hdGlvbl9zdHJpbmcgPSAkc2VsZi0+bWFrZV9saW5lX2luZm9ybWF0aW9uX3N0cmluZygpOwogICAgICAgICRzZWxmLT57X3dyb3RlX2xpbmVfaW5mb3JtYXRpb25fc3RyaW5nfSA9IDE7CgogICAgICAgIGlmICgkbGluZV9pbmZvcm1hdGlvbl9zdHJpbmcpIHsKICAgICAgICAgICAgcHVzaCBAeyRyb3V0cHV0X2FycmF5fSwgIiRsaW5lX2luZm9ybWF0aW9uX3N0cmluZyAgICRwcm9tcHQkbXNnIjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHB1c2ggQHskcm91dHB1dF9hcnJheX0sICIkbXNnIjsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBsb2dmaWxlX291dHB1dAoKc3ViIGdldF9zYXdfYnJhY2VfZXJyb3IgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgIHJldHVybiAkc2VsZi0+e19zYXdfYnJhY2VfZXJyb3J9Owp9CgpzdWIgaW5jcmVtZW50X2JyYWNlX2Vycm9yIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICAkc2VsZi0+e19zYXdfYnJhY2VfZXJyb3J9Kys7CiAgICByZXR1cm47Cn0KCnN1YiBicmFjZV93YXJuaW5nIHsKICAgIG15ICggJHNlbGYsICRtc2csICRtc2dfbGluZV9udW1iZXIgKSA9IEBfOwoKICAgIHVzZSBjb25zdGFudCBCUkFDRV9XQVJOSU5HX0xJTUlUID0+IDEwOwogICAgbXkgJHNhd19icmFjZV9lcnJvciA9ICRzZWxmLT57X3Nhd19icmFjZV9lcnJvcn07CgogICAgaWYgKCAkc2F3X2JyYWNlX2Vycm9yIDwgQlJBQ0VfV0FSTklOR19MSU1JVCApIHsKICAgICAgICAkc2VsZi0+d2FybmluZyggJG1zZywgJG1zZ19saW5lX251bWJlciApOwogICAgfQogICAgJHNhd19icmFjZV9lcnJvcisrOwogICAgJHNlbGYtPntfc2F3X2JyYWNlX2Vycm9yfSA9ICRzYXdfYnJhY2VfZXJyb3I7CgogICAgaWYgKCAkc2F3X2JyYWNlX2Vycm9yID09IEJSQUNFX1dBUk5JTkdfTElNSVQgKSB7CiAgICAgICAgJHNlbGYtPndhcm5pbmcoIk5vIGZ1cnRoZXIgd2FybmluZ3Mgb2YgdGhpcyB0eXBlIHdpbGwgYmUgZ2l2ZW5cbiIpOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgYnJhY2Vfd2FybmluZwoKc3ViIGNvbXBsYWluIHsKCiAgICAjIGhhbmRsZSBub24tY3JpdGljYWwgd2FybmluZyBtZXNzYWdlcyBiYXNlZCBvbiBpbnB1dCBmbGFnCiAgICBteSAoICRzZWxmLCAkbXNnLCAkbXNnX2xpbmVfbnVtYmVyICkgPSBAXzsKICAgIG15ICRyT3B0cyA9ICRzZWxmLT57X3JPcHRzfTsKCiAgICAjIHRoZXNlIGFwcGVhciBpbiAuRVJSIG91dHB1dCBvbmx5IGlmIC13IGZsYWcgaXMgdXNlZAogICAgaWYgKCAkck9wdHMtPnsnd2FybmluZy1vdXRwdXQnfSApIHsKICAgICAgICAkc2VsZi0+d2FybmluZyggJG1zZywgJG1zZ19saW5lX251bWJlciApOwogICAgfQoKICAgICMgb3RoZXJ3aXNlLCB0aGV5IGdvIHRvIHRoZSAuTE9HIGZpbGUKICAgIGVsc2UgewogICAgICAgICRzZWxmLT57X2NvbXBsYWludF9jb3VudH0rKzsKICAgICAgICBpZiAoJG1zZ19saW5lX251bWJlcikgewoKICAgICAgICAgICAgIyBUT0RPOiBjb25zaWRlciB1c2luZyBzYW1lIHByZWZpeCBhcyB3YXJuaW5nKCkKICAgICAgICAgICAgJG1zZyA9ICRtc2dfbGluZV9udW1iZXIgLiAnOicgLiAkbXNnOwogICAgICAgIH0KICAgICAgICAkc2VsZi0+d3JpdGVfbG9nZmlsZV9lbnRyeSgkbXNnKTsKICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGNvbXBsYWluCgpzdWIgd2FybmluZyB7CgogICAgbXkgKCAkc2VsZiwgJG1zZywgKCRtc2dfbGluZV9udW1iZXIpICkgPSBAXzsKCiAgICAjIFJlcG9ydCBlcnJvcnMgdG8gLkVSUiBmaWxlIChvciBzdGRvdXQpCiAgICAjIEdpdmVuOgogICAgIyAgICAkbXNnICAgICAgICAgICAgID0gYSBzdHJpbmcgd2l0aCB0aGUgd2FybmluZyBtZXNzYWdlCiAgICAjICAgICRtc2dfbGluZV9udW1iZXIgPSBvcHRpb25hbCBsaW5lIG51bWJlciBwcmVmaXgKCiAgICB1c2UgY29uc3RhbnQgV0FSTklOR19MSU1JVCA9PiA1MDsKCiAgICAjIEFsd2F5cyBidW1wIHRoZSB3YXJuIGNvdW50LCBldmVuIGlmIG5vIG1lc3NhZ2UgZ29lcyBvdXQKICAgIFBlcmw6OlRpZHk6Oldhcm5fY291bnRfYnVtcCgpOwoKICAgIG15ICRyT3B0cyA9ICRzZWxmLT57X3JPcHRzfTsKICAgIGlmICggISRyT3B0cy0+eydxdWlldCd9ICkgewoKICAgICAgICBteSAkd2FybmluZ19jb3VudCAgID0gJHNlbGYtPntfd2FybmluZ19jb3VudH07CiAgICAgICAgbXkgJGZoX3dhcm5pbmdzICAgICA9ICRzZWxmLT57X2ZoX3dhcm5pbmdzfTsKICAgICAgICBteSAkaXNfZW5jb2RlZF9kYXRhID0gJHNlbGYtPntfaXNfZW5jb2RlZF9kYXRhfTsKICAgICAgICBpZiAoICEkZmhfd2FybmluZ3MgKSB7CiAgICAgICAgICAgIG15ICR3YXJuaW5nX2ZpbGUgPSAkc2VsZi0+e193YXJuaW5nX2ZpbGV9OwogICAgICAgICAgICAkZmhfd2FybmluZ3MgPQogICAgICAgICAgICAgIFBlcmw6OlRpZHk6OnN0cmVhbWhhbmRsZSggJHdhcm5pbmdfZmlsZSwgJ3cnLCAkaXNfZW5jb2RlZF9kYXRhICk7CiAgICAgICAgICAgIGlmICggISRmaF93YXJuaW5ncyApIHsKICAgICAgICAgICAgICAgIFBlcmw6OlRpZHk6OkRpZSgiY291bGRuJ3Qgb3BlbiB3YXJuaW5nIGZpbGUgJyR3YXJuaW5nX2ZpbGUnXG4iKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBQZXJsOjpUaWR5OjpXYXJuX21zZygiIyMgUGxlYXNlIHNlZSBmaWxlICR3YXJuaW5nX2ZpbGVcbiIpCiAgICAgICAgICAgICAgdW5sZXNzIHJlZigkd2FybmluZ19maWxlKTsKICAgICAgICAgICAgJHNlbGYtPntfZmhfd2FybmluZ3N9ID0gJGZoX3dhcm5pbmdzOwogICAgICAgICAgICAkZmhfd2FybmluZ3MtPnByaW50KCJQZXJsdGlkeSB2ZXJzaW9uIGlzICRQZXJsOjpUaWR5OjpWRVJTSU9OXG4iKTsKICAgICAgICB9CgogICAgICAgIG15ICRmaWxlbmFtZV9zdGFtcCA9ICRzZWxmLT57X2ZpbGVuYW1lX3N0YW1wfTsKCiAgICAgICAgaWYgKCAkd2FybmluZ19jb3VudCA8IFdBUk5JTkdfTElNSVQgKSB7CgogICAgICAgICAgICBpZiAoICEkd2FybmluZ19jb3VudCApIHsKCiAgICAgICAgICAgICAgICAjIE9uIGZpcnN0IGVycm9yIGFsd2F5cyB3cml0ZSBhIGxpbmUgd2l0aCB0aGUgZmlsZW5hbWUuICBOb3RlCiAgICAgICAgICAgICAgICAjIHRoYXQgdGhlIGZpbGVuYW1lIHdpbGwgYmUgJ3Blcmx0aWR5JyBpZiBpbnB1dCBpcyBmcm9tIHN0ZGluCiAgICAgICAgICAgICAgICAjIG9yIGZyb20gYSBkYXRhIHN0cnVjdHVyZS4KICAgICAgICAgICAgICAgIGlmICgkZmlsZW5hbWVfc3RhbXApIHsKICAgICAgICAgICAgICAgICAgICAkZmhfd2FybmluZ3MtPnByaW50KAogICAgICAgICAgICAgICAgICAgICAgICAiXG4kZmlsZW5hbWVfc3RhbXAgQmVnaW4gRXJyb3IgT3V0cHV0IFN0cmVhbVxuIik7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBUdXJuIG9mZiBmaWxlbmFtZSBzdGFtcGluZyB1bmxlc3MgZXJyb3Igb3V0cHV0IGlzIGRpcmVjdGVkCiAgICAgICAgICAgICAgICAjIHRvIHRoZSBzdGFuZGFyZCBlcnJvciBvdXRwdXQgKHdpdGggLXNlIGZsYWcpCiAgICAgICAgICAgICAgICBpZiAoICEkck9wdHMtPnsnc3RhbmRhcmQtZXJyb3Itb3V0cHV0J30gKSB7CiAgICAgICAgICAgICAgICAgICAgJGZpbGVuYW1lX3N0YW1wID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICAgICAgICAgICRzZWxmLT57X2ZpbGVuYW1lX3N0YW1wfSA9ICRmaWxlbmFtZV9zdGFtcDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAkc2VsZi0+Z2V0X3VzZV9wcmVmaXgoKSA+IDAgJiYgZGVmaW5lZCgkbXNnX2xpbmVfbnVtYmVyKSApIHsKICAgICAgICAgICAgICAgICRzZWxmLT53cml0ZV9sb2dmaWxlX2VudHJ5KCJXQVJOSU5HOiAkbXNnIik7CgogICAgICAgICAgICAgICAgIyBhZGQgcHJlZml4ICdmaWxlbmFtZTpsaW5lX25vOiAnIHRvIG1lc3NhZ2UgbGluZXMKICAgICAgICAgICAgICAgIG15ICRwcmVfc3RyaW5nID0gJGZpbGVuYW1lX3N0YW1wIC4gJG1zZ19saW5lX251bWJlciAuICc6ICc7CiAgICAgICAgICAgICAgICBjaG9tcCAkbXNnOwogICAgICAgICAgICAgICAgJG1zZyA9fiBzL1xuL1xuJHByZV9zdHJpbmcvZzsKICAgICAgICAgICAgICAgICRtc2cgPSAkcHJlX3N0cmluZyAuICRtc2cgLiAiXG4iOwoKICAgICAgICAgICAgICAgICRmaF93YXJuaW5ncy0+cHJpbnQoJG1zZyk7CgogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJHNlbGYtPndyaXRlX2xvZ2ZpbGVfZW50cnkoJG1zZyk7CgogICAgICAgICAgICAgICAgIyBhZGQgcHJlZml4ICdmaWxlbmFtZTogJyB0byBtZXNzYWdlIGxpbmVzCiAgICAgICAgICAgICAgICBpZiAoJGZpbGVuYW1lX3N0YW1wKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJHByZV9zdHJpbmcgPSAkZmlsZW5hbWVfc3RhbXAgLiBTUEFDRTsKICAgICAgICAgICAgICAgICAgICBjaG9tcCAkbXNnOwogICAgICAgICAgICAgICAgICAgICRtc2cgPX4gcy9cbi9cbiRwcmVfc3RyaW5nL2c7CiAgICAgICAgICAgICAgICAgICAgJG1zZyA9ICRwcmVfc3RyaW5nIC4gJG1zZyAuICJcbiI7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGZoX3dhcm5pbmdzLT5wcmludCgkbXNnKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkd2FybmluZ19jb3VudCsrOwogICAgICAgICRzZWxmLT57X3dhcm5pbmdfY291bnR9ID0gJHdhcm5pbmdfY291bnQ7CgogICAgICAgIGlmICggJHdhcm5pbmdfY291bnQgPT0gV0FSTklOR19MSU1JVCApIHsKICAgICAgICAgICAgJGZoX3dhcm5pbmdzLT5wcmludCgKICAgICAgICAgICAgICAgICRmaWxlbmFtZV9zdGFtcCAuICJObyBmdXJ0aGVyIHdhcm5pbmdzIHdpbGwgYmUgZ2l2ZW5cbiIgKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiB3YXJuaW5nCgpzdWIgcmVwb3J0X2RlZmluaXRlX2J1ZyB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgJHNlbGYtPntfc2F3X2NvZGVfYnVnfSA9IDE7CiAgICByZXR1cm47Cn0KCnN1YiBnZXRfc2F2ZV9sb2dmaWxlIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICByZXR1cm4gJHNlbGYtPntfc2F2ZV9sb2dmaWxlfTsKfQoKc3ViIGZpbmlzaCB7CgogICAgIyBjYWxsZWQgYWZ0ZXIgYWxsIGZvcm1hdHRpbmcgdG8gc3VtbWFyaXplIGVycm9ycwogICAgbXkgKCRzZWxmKSA9IEBfOwoKICAgIG15ICR3YXJuaW5nX2NvdW50ICAgPSAkc2VsZi0+e193YXJuaW5nX2NvdW50fTsKICAgIG15ICRzYXZlX2xvZ2ZpbGUgICAgPSAkc2VsZi0+e19zYXZlX2xvZ2ZpbGV9OwogICAgbXkgJGxvZ19maWxlICAgICAgICA9ICRzZWxmLT57X2xvZ19maWxlfTsKICAgIG15ICRtc2dfbGluZV9udW1iZXIgPSAkc2VsZi0+e19sYXN0X2lucHV0X2xpbmVfbnVtYmVyfTsKCiAgICBpZiAoJHdhcm5pbmdfY291bnQpIHsKICAgICAgICBpZiAoJHNhdmVfbG9nZmlsZSkgewogICAgICAgICAgICAkc2VsZi0+YmxvY2tfbG9nX291dHB1dCgpOyAgICAjIGF2b2lkIGVjaG9pbmcgdGhpcyB0byB0aGUgbG9nZmlsZQogICAgICAgICAgICAkc2VsZi0+d2FybmluZygKICAgICAgICAgICAgICAgICJUaGUgbG9nZmlsZSAkbG9nX2ZpbGUgbWF5IGNvbnRhaW4gdXNlZnVsIGluZm9ybWF0aW9uXG4iLAogICAgICAgICAgICAgICAgJG1zZ19saW5lX251bWJlciApOwogICAgICAgICAgICAkc2VsZi0+dW5ibG9ja19sb2dfb3V0cHV0KCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRzZWxmLT57X2NvbXBsYWludF9jb3VudH0gPiAwICkgewogICAgICAgICAgICAkc2VsZi0+d2FybmluZygKIlRvIHNlZSAkc2VsZi0+e19jb21wbGFpbnRfY291bnR9IG5vbi1jcml0aWNhbCB3YXJuaW5ncyByZXJ1biB3aXRoIC13XG4iLAogICAgICAgICAgICAgICAgJG1zZ19saW5lX251bWJlcgogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkc2VsZi0+e19zYXdfYnJhY2VfZXJyb3J9CiAgICAgICAgICAgICYmICggJHNlbGYtPntfbG9nZmlsZV9nYXB9ID4gMSB8fCAhJHNhdmVfbG9nZmlsZSApICkKICAgICAgICB7CiAgICAgICAgICAgICRzZWxmLT53YXJuaW5nKCAiVG8gc2F2ZSBhIGZ1bGwgLkxPRyBmaWxlIHJlcnVuIHdpdGggLWdcbiIsCiAgICAgICAgICAgICAgICAkbXNnX2xpbmVfbnVtYmVyICk7CiAgICAgICAgfQogICAgfQoKICAgIGlmICgkc2F2ZV9sb2dmaWxlKSB7CiAgICAgICAgbXkgJGlzX2VuY29kZWRfZGF0YSA9ICRzZWxmLT57X2lzX2VuY29kZWRfZGF0YX07CiAgICAgICAgbXkgJGZoID0gUGVybDo6VGlkeTo6c3RyZWFtaGFuZGxlKCAkbG9nX2ZpbGUsICd3JywgJGlzX2VuY29kZWRfZGF0YSApOwogICAgICAgIGlmICggISRmaCApIHsKICAgICAgICAgICAgUGVybDo6VGlkeTo6V2FybigidW5hYmxlIHRvIG9wZW4gbG9nIGZpbGUgJyRsb2dfZmlsZSdcbiIpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbXkgJHJvdXRwdXRfYXJyYXkgPSAkc2VsZi0+e19vdXRwdXRfYXJyYXl9OwogICAgICAgICAgICBmb3JlYWNoIG15ICRsaW5lICggQHskcm91dHB1dF9hcnJheX0gKSB7ICRmaC0+cHJpbnQoJGxpbmUpIH0KICAgICAgICAgICAgaWYgKCAgICRmaC0+Y2FuKCdjbG9zZScpCiAgICAgICAgICAgICAgICAmJiAhcmVmKCRsb2dfZmlsZSkKICAgICAgICAgICAgICAgICYmICRsb2dfZmlsZSBuZSAnLScgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkZmgtPmNsb3NlKCkKICAgICAgICAgICAgICAgICAgb3IgUGVybDo6VGlkeTo6V2FybigKICAgICAgICAgICAgICAgICAgICAiRXJyb3IgY2xvc2luZyBMT0cgZmlsZSAnJGxvZ19maWxlJzogJE9TX0VSUk9SXG4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGZpbmlzaAoxOwo=</File>
        <File Location="Kernel/cpan-lib/Perl/Tidy/VerticalAligner.pm" Permission="660" Encode="Base64">cGFja2FnZSBQZXJsOjpUaWR5OjpWZXJ0aWNhbEFsaWduZXI7CnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIENhcnA7Cgp7ICM8PDwgQSBub24taW5kZW50aW5nIGJyYWNlIHRvIGNvbnRhaW4gYWxsIGxleGljYWwgdmFyaWFibGVzCgpvdXIgJFZFUlNJT04gPSAnMjAyNTAxMDUnOwp1c2UgRW5nbGlzaCBxdyggLW5vX21hdGNoX3ZhcnMgKTsKdXNlIFNjYWxhcjo6VXRpbCAncmVmYWRkcic7ICAgICMgcGVybCA1LjguMSBhbmQgbGF0ZXIKdXNlIFBlcmw6OlRpZHk6OlZlcnRpY2FsQWxpZ25lcjo6QWxpZ25tZW50Owp1c2UgUGVybDo6VGlkeTo6VmVydGljYWxBbGlnbmVyOjpMaW5lOwoKdXNlIGNvbnN0YW50IERFVkVMX01PREUgICA9PiAwOwp1c2UgY29uc3RhbnQgRU1QVFlfU1RSSU5HID0+IHF7fTsKdXNlIGNvbnN0YW50IFNQQUNFICAgICAgICA9PiBxeyB9OwoKIyBUaGUgUGVybDo6VGlkeTo6VmVydGljYWxBbGlnbmVyIHBhY2thZ2UgY29sbGVjdHMgb3V0cHV0IGxpbmVzIGFuZAojIGF0dGVtcHRzIHRvIGxpbmUgdXAgY2VydGFpbiBjb21tb24gdG9rZW5zLCBzdWNoIGFzID0+IGFuZCAjLCB3aGljaCBhcmUKIyBpZGVudGlmaWVkIGJ5IHRoZSBjYWxsaW5nIHJvdXRpbmUuCiMKIyBVc2FnZToKIyAgIC0gSW5pdGlhdGUgYW4gb2JqZWN0IHdpdGggYSBjYWxsIHRvIG5ldygpLgojICAgLSBXcml0ZSBsaW5lcyBvbmUtYnktb25lIHdpdGggY2FsbHMgdG8gdmFsaWduX2lucHV0KCkuCiMgICAtIE1ha2UgYSBmaW5hbCBjYWxsIHRvIGZsdXNoKCkgdG8gZW1wdHkgdGhlIHBpcGVsaW5lLgojCiMgVGhlIHN1YiB2YWxpZ25faW5wdXQgY29sbGVjdHMgbGluZXMgaW50byBncm91cHMuICBXaGVuIGEgZ3JvdXAgcmVhY2hlcwojIHRoZSBtYXhpbXVtIHBvc3NpYmxlIHNpemUgaXQgaXMgcHJvY2Vzc2VkIGZvciBhbGlnbm1lbnQgYW5kIG91dHB1dC4KIyBUaGUgbWF4aW11bSBncm91cCBzaXplIGlzIHJlYWNoZWQgd2hlbmV2ZXIgdGhlcmUgaXMgYSBjaGFuZ2UgaW4gaW5kZW50YXRpb24KIyBsZXZlbCwgYSBibGFuayBsaW5lLCBhIGJsb2NrIGNvbW1lbnQsIG9yIGFuIGV4dGVybmFsIGZsdXNoIGNhbGwuICBUaGUgY2FsbGluZwojIHJvdXRpbmUgbWF5IGFsc28gZm9yY2UgYSBicmVhayBpbiBhbGlnbm1lbnQgYXQgYW55IHRpbWUuCiMKIyBJZiB0aGUgY2FsbGluZyByb3V0aW5lIG5lZWRzIHRvIGludGVycnVwdCB0aGUgb3V0cHV0IGFuZCBzZW5kIG90aGVyIHRleHQgdG8KIyB0aGUgb3V0cHV0LCBpdCBtdXN0IGZpcnN0IGNhbGwgZmx1c2goKSB0byBlbXB0eSB0aGUgb3V0cHV0IHBpcGVsaW5lLiAgVGhpcwojIG1pZ2h0IG9jY3VyIGZvciBleGFtcGxlIGlmIGEgYmxvY2sgb2YgcG9kIHRleHQgbmVlZHMgdG8gYmUgc2VudCB0byB0aGUgb3V0cHV0CiMgYmV0d2VlbiBibG9ja3Mgb2YgY29kZS4KCiMgSXQgaXMgZXNzZW50aWFsIHRoYXQgYSBmaW5hbCBjYWxsIHRvIGZsdXNoKCkgYmUgbWFkZS4gT3RoZXJ3aXNlIHNvbWUKIyBmaW5hbCBsaW5lcyBvZiB0ZXh0IHdpbGwgYmUgbG9zdC4KCiMgSW5kZXguLi4KIyBDT0RFIFNFQ1RJT04gMTogUHJlbGltaW5hcnkgY29kZSwgZ2xvYmFsIGRlZmluaXRpb25zIGFuZCBzdWIgbmV3CiMgICAgICAgICAgICAgICAgIHN1YiBuZXcKIyBDT0RFIFNFQ1RJT04gMjogU29tZSBCYXNpYyBVdGlsaXRpZXMKIyBDT0RFIFNFQ1RJT04gMzogQ29kZSB0byBhY2NlcHQgaW5wdXQgYW5kIGZvcm0gZ3JvdXBzCiMgICAgICAgICAgICAgICAgIHN1YiB2YWxpZ25faW5wdXQKIyBDT0RFIFNFQ1RJT04gNDogQ29kZSB0byBwcm9jZXNzIGNvbW1lbnQgbGluZXMKIyAgICAgICAgICAgICAgICAgc3ViIF9mbHVzaF9jb21tZW50X2xpbmVzCiMgQ09ERSBTRUNUSU9OIDU6IENvZGUgdG8gcHJvY2VzcyBncm91cHMgb2YgY29kZSBsaW5lcwojICAgICAgICAgICAgICAgICBzdWIgX2ZsdXNoX2dyb3VwX2xpbmVzCiMgQ09ERSBTRUNUSU9OIDY6IFBhZCBTaWduZWQgTnVtYmVyIENvbHVtbnMKIyAgICAgICAgICAgICAgICAgc3ViIHBhZF9zaWduZWRfbnVtYmVyX2NvbHVtbnMKIyBDT0RFIFNFQ1RJT04gNzogUGFkIFdpZGUgRXF1YWxzIENvbHVtbnMKIyAgICAgICAgICAgICAgICAgc3ViIHBhZF93aWRlX2VxdWFsc19jb2x1bW5zCiMgQ09ERSBTRUNUSU9OIDg6IE91dHB1dCBTdGVwIEEKIyAgICAgICAgICAgICAgICAgc3ViIHZhbGlnbl9vdXRwdXRfc3RlcF9BCiMgQ09ERSBTRUNUSU9OIDk6IE91dHB1dCBTdGVwIEIKIyAgICAgICAgICAgICAgICAgc3ViIHZhbGlnbl9vdXRwdXRfc3RlcF9CCiMgQ09ERSBTRUNUSU9OIDEwOiBPdXRwdXQgU3RlcCBDCiMgICAgICAgICAgICAgICAgIHN1YiB2YWxpZ25fb3V0cHV0X3N0ZXBfQwojIENPREUgU0VDVElPTiAxMTogT3V0cHV0IFN0ZXAgRAojICAgICAgICAgICAgICAgICBzdWIgdmFsaWduX291dHB1dF9zdGVwX0QKIyBDT0RFIFNFQ1RJT04gMTI6IFN1bW1hcnkKIyAgICAgICAgICAgICAgICAgc3ViIHJlcG9ydF9hbnl0aGluZ191bnVzdWFsCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDT0RFIFNFQ1RJT04gMTogUHJlbGltaW5hcnkgY29kZSwgZ2xvYmFsIGRlZmluaXRpb25zIGFuZCBzdWIgbmV3CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKc3ViIEFVVE9MT0FEIHsKCiAgICAjIENhdGNoIGFueSB1bmRlZmluZWQgc3ViIGNhbGxzIHNvIHRoYXQgd2UgYXJlIHN1cmUgdG8gZ2V0CiAgICAjIHNvbWUgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbi4gIFRoaXMgc3ViIHNob3VsZCBuZXZlciBiZSBjYWxsZWQKICAgICMgZXhjZXB0IGZvciBhIHByb2dyYW1taW5nIGVycm9yLgogICAgb3VyICRBVVRPTE9BRDsKICAgIHJldHVybiBpZiAoICRBVVRPTE9BRCA9fiAvXGJERVNUUk9ZJC8gKTsKICAgIG15ICggJHBrZywgJGZuYW1lLCAkbG5vICkgPSBjYWxsZXIoKTsKICAgIG15ICRteV9wYWNrYWdlID0gX19QQUNLQUdFX187CiAgICBwcmludCB7KlNUREVSUn0gPDxFT007Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KRXJyb3IgZGV0ZWN0ZWQgaW4gcGFja2FnZSAnJG15X3BhY2thZ2UnLCB2ZXJzaW9uICRWRVJTSU9OClJlY2VpdmVkIHVuZXhwZWN0ZWQgQVVUT0xPQUQgY2FsbCBmb3Igc3ViICckQVVUT0xPQUQnCkNhbGxlZCBmcm9tIHBhY2thZ2U6ICckcGtnJwpDYWxsZWQgZnJvbSBGaWxlICckZm5hbWUnICBhdCBsaW5lICckbG5vJwpUaGlzIGVycm9yIGlzIHByb2JhYmx5IGR1ZSB0byBhIHJlY2VudCBwcm9ncmFtbWluZyBjaGFuZ2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpFT00KICAgIGV4aXQgMTsKfSAjIyBlbmQgc3ViIEFVVE9MT0FECgpzdWIgREVTVFJPWSB7CgogICAgIyByZXF1aXJlZCB0byBhdm9pZCBjYWxsIHRvIEFVVE9MT0FEIGluIHNvbWUgdmVyc2lvbnMgb2YgcGVybAp9CgpzdWIgRGllIHsKICAgIG15ICgkbXNnKSA9IEBfOwogICAgUGVybDo6VGlkeTo6RGllKCRtc2cpOwogICAgY3JvYWsgInVuZXhwZWN0ZWQgcmV0dXJuIGZyb20gUGVybDo6VGlkeTo6RGllIjsKfQoKc3ViIEZhdWx0IHsKICAgIG15ICgkbXNnKSA9IEBfOwoKICAgICMgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBmb3IgZXJyb3JzIHRoYXQgcmVhbGx5IHNob3VsZCBub3Qgb2NjdXIKICAgICMgZXhjZXB0IGlmIHRoZXJlIGhhcyBiZWVuIGEgYnVnIGludHJvZHVjZWQgYnkgYSByZWNlbnQgcHJvZ3JhbSBjaGFuZ2UuCiAgICAjIFBsZWFzZSBhZGQgY29tbWVudHMgYXQgY2FsbHMgdG8gRmF1bHQgdG8gZXhwbGFpbiB3aHkgdGhlIGNhbGwKICAgICMgc2hvdWxkIG5vdCBvY2N1ciwgYW5kIHdoZXJlIHRvIGxvb2sgdG8gZml4IGl0LgogICAgbXkgKCAkcGFja2FnZTBfdXUsICRmaWxlbmFtZTBfdXUsICRsaW5lMCwgICAgJHN1YnJvdXRpbmUwX3V1ICkgPSBjYWxsZXIoMCk7CiAgICBteSAoICRwYWNrYWdlMV91dSwgJGZpbGVuYW1lMSwgICAgJGxpbmUxLCAgICAkc3Vicm91dGluZTEgKSAgICA9IGNhbGxlcigxKTsKICAgIG15ICggJHBhY2thZ2UyX3V1LCAkZmlsZW5hbWUyX3V1LCAkbGluZTJfdXUsICRzdWJyb3V0aW5lMiApICAgID0gY2FsbGVyKDIpOwogICAgbXkgJHBrZyA9IF9fUEFDS0FHRV9fOwoKICAgIG15ICRpbnB1dF9zdHJlYW1fbmFtZSA9IGdldF9pbnB1dF9zdHJlYW1fbmFtZSgpOwoKICAgIERpZSg8PEVPTSk7Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGlsZSBvcGVyYXRpbmcgb24gaW5wdXQgc3RyZWFtIHdpdGggbmFtZTogJyRpbnB1dF9zdHJlYW1fbmFtZScKQSBmYXVsdCB3YXMgZGV0ZWN0ZWQgYXQgbGluZSAkbGluZTAgb2Ygc3ViICckc3Vicm91dGluZTEnCmluIGZpbGUgJyRmaWxlbmFtZTEnCndoaWNoIHdhcyBjYWxsZWQgZnJvbSBsaW5lICRsaW5lMSBvZiBzdWIgJyRzdWJyb3V0aW5lMicKTWVzc2FnZTogJyRtc2cnClRoaXMgaXMgcHJvYmFibHkgYW4gZXJyb3IgaW50cm9kdWNlZCBieSBhIHJlY2VudCBwcm9ncmFtbWluZyBjaGFuZ2UuCiRwa2cgcmVwb3J0cyBWRVJTSU9OPSckVkVSU0lPTicuCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpFT00KICAgIGNyb2FrICJ1bmV4cGVjdGVkIHJldHVybiBmcm9tIHN1YiBEaWUiOwp9ICMjIGVuZCBzdWIgRmF1bHQKCm15ICV2YWxpZF9MSU5FX2tleXM7CgpCRUdJTiB7CgogICAgIyBkZWZpbmUgdmFsaWQga2V5cyBpbiBhIGxpbmUgb2JqZWN0CiAgICBteSBAcSA9IHF3KAogICAgICBqbWF4CiAgICAgIHJ0b2tlbnMKICAgICAgcmZpZWxkcwogICAgICByZmllbGRfbGVuZ3RocwogICAgICBycGF0dGVybnMKICAgICAgaW5kZW50YXRpb24KICAgICAgbGVhZGluZ19zcGFjZV9jb3VudAogICAgICBvdXRkZW50X2xvbmdfbGluZXMKICAgICAgbGlzdF90eXBlCiAgICAgIGxpc3Rfc2Vxbm8KICAgICAgaXNfaGFuZ2luZ19zaWRlX2NvbW1lbnQKICAgICAgbWF4aW11bV9saW5lX2xlbmd0aAogICAgICBydmVydGljYWxfdGlnaHRuZXNzX2ZsYWdzCiAgICAgIGlzX3Rlcm1pbmFsX3Rlcm5hcnkKICAgICAgal90ZXJtaW5hbF9tYXRjaAogICAgICBlbmRfZ3JvdXAKICAgICAgS2VuZAogICAgICBjaV9sZXZlbAogICAgICBsZXZlbAogICAgICBsZXZlbF9lbmQKICAgICAgaW1heF9wYWlyCgogICAgICByYWxpZ25tZW50cwogICAgKTsKCiAgICBAdmFsaWRfTElORV9rZXlze0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7Cn0gIyMgZW5kIEJFR0lOCgpCRUdJTiB7CgogICAgIyBEZWZpbmUgdGhlIGZpeGVkIGluZGV4ZXMgZm9yIHZhcmlhYmxlcyBpbiAkc2VsZiwgd2hpY2ggaXMgYW4gYXJyYXkKICAgICMgcmVmZXJlbmNlLiAgTm90ZSB0aGUgY29udmVudGlvbiBvZiBsZWFkaW5nIGFuZCB0cmFpbGluZyB1bmRlcnNjb3JlcyB0bwogICAgIyBrZWVwIHRoZW0gdW5pcXVlLgogICAgIyBEbyBub3QgY29tYmluZSB3aXRoIG90aGVyIEJFR0lOIGJsb2NrcyAoYzEwMSkuCiAgICBteSAkaSA9IDA7CiAgICB1c2UgY29uc3RhbnQgewogICAgICAgIF9maWxlX3dyaXRlcl9vYmplY3RfID0+ICRpKyssCiAgICAgICAgX2xvZ2dlcl9vYmplY3RfICAgICAgPT4gJGkrKywKICAgICAgICBfZGlhZ25vc3RpY3Nfb2JqZWN0XyA9PiAkaSsrLAoKICAgICAgICBfck9wdHNfID0+ICRpKyssCgogICAgICAgIF9sYXN0X2xldmVsX3dyaXR0ZW5fICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfbGFzdF9zaWRlX2NvbW1lbnRfY29sdW1uXyAgICAgID0+ICRpKyssCiAgICAgICAgX2xhc3Rfc2lkZV9jb21tZW50X2xpbmVfbnVtYmVyXyA9PiAkaSsrLAogICAgICAgIF9sYXN0X3NpZGVfY29tbWVudF9sZW5ndGhfICAgICAgPT4gJGkrKywKICAgICAgICBfbGFzdF9zaWRlX2NvbW1lbnRfbGV2ZWxfICAgICAgID0+ICRpKyssCiAgICAgICAgX291dGRlbnRlZF9saW5lX2NvdW50XyAgICAgICAgICA9PiAkaSsrLAogICAgICAgIF9maXJzdF9vdXRkZW50ZWRfbGluZV9hdF8gICAgICAgPT4gJGkrKywKICAgICAgICBfbGFzdF9vdXRkZW50ZWRfbGluZV9hdF8gICAgICAgID0+ICRpKyssCiAgICAgICAgX2NvbnNlY3V0aXZlX2Jsb2NrX2NvbW1lbnRzXyAgICA9PiAkaSsrLAoKICAgICAgICBfcmdyb3VwX2xpbmVzXyAgICAgICAgICAgICAgICA9PiAkaSsrLAogICAgICAgIF9ncm91cF9sZXZlbF8gICAgICAgICAgICAgICAgID0+ICRpKyssCiAgICAgICAgX2dyb3VwX3R5cGVfICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfZ3JvdXBfbWF4aW11bV9saW5lX2xlbmd0aF8gICA9PiAkaSsrLAogICAgICAgIF96ZXJvX2NvdW50XyAgICAgICAgICAgICAgICAgID0+ICRpKyssCiAgICAgICAgX2xhc3RfbGVhZGluZ19zcGFjZV9jb3VudF8gICAgPT4gJGkrKywKICAgICAgICBfY29tbWVudF9sZWFkaW5nX3NwYWNlX2NvdW50XyA9PiAkaSsrLAogICAgfTsKCiAgICAjIERlYnVnIGZsYWcuIFRoaXMgaXMgYSByZWxpYyBmcm9tIHRoZSBvcmlnaW5hbCBwcm9ncmFtIGRldmVsb3BtZW50CiAgICAjIGxvb2tpbmcgZm9yIHByb2JsZW1zIHdpdGggdGFiIGNoYXJhY3RlcnMuICBDYXV0aW9uOiB0aGlzIGRlYnVnIGZsYWcgY2FuCiAgICAjIHByb2R1Y2UgYSBsb3Qgb2Ygb3V0cHV0IEl0IHNob3VsZCBiZSAwIGV4Y2VwdCB3aGVuIGRlYnVnZ2luZyBzbWFsbAogICAgIyBzY3JpcHRzLgoKICAgIHVzZSBjb25zdGFudCBERUJVR19UQUJTID0+IDA7CgogICAgbXkgJGRlYnVnX3dhcm5pbmcgPSBzdWIgewogICAgICAgIG15ICRtc2cgPSBzaGlmdDsKICAgICAgICBwcmludCB7KlNURE9VVH0gIlZBTElHTl9ERUJVR0dJTkcgd2l0aCBrZXkgJG1zZ1xuIjsKICAgICAgICByZXR1cm47CiAgICB9OwoKICAgIERFQlVHX1RBQlMgJiYgJGRlYnVnX3dhcm5pbmctPignVEFCUycpOwp9ICMjIGVuZCBCRUdJTgoKIyBHTE9CQUwgdmFyaWFibGVzCm15ICgKCiAgICAldmFsaWduX2NvbnRyb2xfaGFzaCwKICAgICR2YWxpZ25fY29udHJvbF9kZWZhdWx0LAoKICAgICRyT3B0c19pbmRlbnRfY29sdW1ucywKICAgICRyT3B0c190YWJzLAogICAgJHJPcHRzX2VudGFiX2xlYWRpbmdfd2hpdGVzcGFjZSwKICAgICRyT3B0c19maXhlZF9wb3NpdGlvbl9zaWRlX2NvbW1lbnQsCiAgICAkck9wdHNfbWF4aW11bV9saW5lX2xlbmd0aCwKICAgICRyT3B0c19taW5pbXVtX3NwYWNlX3RvX2NvbW1lbnQsCiAgICAkck9wdHNfdmFsaWduX2NvZGUsCiAgICAkck9wdHNfdmFsaWduX2Jsb2NrX2NvbW1lbnRzLAogICAgJHJPcHRzX3ZhbGlnbl9zaWRlX2NvbW1lbnRzLAogICAgJHJPcHRzX3ZhbGlnbl9zaWduZWRfbnVtYmVycywKICAgICRyT3B0c192YWxpZ25fc2lnbmVkX251bWJlcnNfbGltaXQsCiAgICAkck9wdHNfdmFsaWduX3dpZGVfZXF1YWxzLAoKICAgICRyZXF1aXJlX3RhYnMsCgopOwoKc3ViIGNoZWNrX29wdGlvbnMgewoKICAgICMgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBjaGVjayB0aGUgdXNlci1zdXBwbGllZCBydW4gcGFyYW1ldGVycwogICAgIyBhbmQgdG8gY29uZmlndXJlIHRoZSBjb250cm9sIGhhc2hlcyB0byB0aGVtLgogICAgbXkgKCRyT3B0cykgPSBAXzsKCiAgICAjIEFsbCBhbGlnbm1lbnRzIGFyZSBkb25lIGJ5IGRlZmF1bHQKICAgICV2YWxpZ25fY29udHJvbF9oYXNoICAgID0gKCk7CiAgICAkdmFsaWduX2NvbnRyb2xfZGVmYXVsdCA9IDE7CgogICAgIyBJZiAtdmlsPXMgaXMgZW50ZXJlZCB3aXRob3V0IC12eGwsIGFzc3VtZSAtdnhsPScqJwogICAgaWYgKCAgISRyT3B0cy0+eyd2YWxpZ24tZXhjbHVzaW9uLWxpc3QnfQogICAgICAgICYmICRyT3B0cy0+eyd2YWxpZ24taW5jbHVzaW9uLWxpc3QnfSApCiAgICB7CiAgICAgICAgJHJPcHRzLT57J3ZhbGlnbi1leGNsdXNpb24tbGlzdCd9ID0gJyonOwogICAgfQoKICAgICMgU2VlIGlmIHRoZSB1c2VyIHdhbnRzIHRvIGV4Y2x1ZGUgYW55IGFsaWdubWVudCB0eXBlcyAuLi4KICAgIGlmICggJHJPcHRzLT57J3ZhbGlnbi1leGNsdXNpb24tbGlzdCd9ICkgewoKICAgICAgICAjIFRoZSBpbmNsdXNpb24gbGlzdCBpcyBvbmx5IHJlbGV2YW50IGlmIHRoZXJlIGlzIGFuIGV4Y2x1c2lvbiBsaXN0CiAgICAgICAgaWYgKCAkck9wdHMtPnsndmFsaWduLWluY2x1c2lvbi1saXN0J30gKSB7CiAgICAgICAgICAgIG15IEB2aWwgPSBzcGxpdCAvXHMrLywgJHJPcHRzLT57J3ZhbGlnbi1pbmNsdXNpb24tbGlzdCd9OwogICAgICAgICAgICBAdmFsaWduX2NvbnRyb2xfaGFzaHtAdmlsfSA9ICgxKSB4IHNjYWxhcihAdmlsKTsKICAgICAgICB9CgogICAgICAgICMgTm90ZSB0aGF0IHRoZSAtdnhsIGxpc3QgaXMgZG9uZSBhZnRlciAtdmlsLCBzbyAtdnhsIGhhcyBwcmlvcml0eQogICAgICAgICMgaW4gdGhlIGV2ZW50IG9mIGR1cGxpY2F0ZSBlbnRyaWVzLgogICAgICAgIG15IEB2eGwgPSBzcGxpdCAvXHMrLywgJHJPcHRzLT57J3ZhbGlnbi1leGNsdXNpb24tbGlzdCd9OwogICAgICAgIEB2YWxpZ25fY29udHJvbF9oYXNoe0B2eGx9ID0gKDApIHggc2NhbGFyKEB2eGwpOwoKICAgICAgICAjIE9wdGltaXphdGlvbjogcmV2ZXJ0IHRvIGRlZmF1bHRzIGlmIG5vIGV4Y2x1c2lvbnMuCiAgICAgICAgIyBUaGlzIGNvdWxkIGhhcHBlbiB3aXRoIC12eGw9JyAgJyBhbmQgYW55IC12aWwgbGlzdAogICAgICAgIGlmICggIUB2eGwgKSB7CiAgICAgICAgICAgICV2YWxpZ25fY29udHJvbF9oYXNoID0gKCk7CiAgICAgICAgfQoKICAgICAgICAjICckdmFsaWduX2NvbnRyb2xfZGVmYXVsdCcgYXBwbGllcyB0byB0eXBlcyBub3QgaW4gdGhlIGhhc2g6CiAgICAgICAgIyAtIElmIGEgJyonIHdhcyBlbnRlcmVkIHRoZW4gc2V0IGl0IHRvIGJlIHRoYXQgZGVmYXVsdCB0eXBlCiAgICAgICAgIyAtIE90aGVyd2lzZSwgbGVhdmUgaXQgc2V0IGl0IHRvIDEKICAgICAgICBpZiAoIGRlZmluZWQoICR2YWxpZ25fY29udHJvbF9oYXNoeycqJ30gKSApIHsKICAgICAgICAgICAgJHZhbGlnbl9jb250cm9sX2RlZmF1bHQgPSAkdmFsaWduX2NvbnRyb2xfaGFzaHsnKid9OwogICAgICAgIH0KCiAgICAgICAgIyBTaWRlIGNvbW1lbnRzIGFyZSBjb250cm9sbGVkIHNlcGFyYXRlbHkgYW5kIG11c3QgYmUgcmVtb3ZlZAogICAgICAgICMgaWYgZ2l2ZW4gaW4gYSBsaXN0LgogICAgICAgIGlmICgldmFsaWduX2NvbnRyb2xfaGFzaCkgewogICAgICAgICAgICAkdmFsaWduX2NvbnRyb2xfaGFzaHsnIyd9ID0gMTsKICAgICAgICB9CiAgICB9CgogICAgIyBJbml0aWFsaXplIHNvbWUgZ2xvYmFsIG9wdGlvbnMKICAgICRyT3B0c19pbmRlbnRfY29sdW1ucyAgICAgICAgICAgPSAkck9wdHMtPnsnaW5kZW50LWNvbHVtbnMnfTsKICAgICRyT3B0c190YWJzICAgICAgICAgICAgICAgICAgICAgPSAkck9wdHMtPnsndGFicyd9OwogICAgJHJPcHRzX2VudGFiX2xlYWRpbmdfd2hpdGVzcGFjZSA9ICRyT3B0cy0+eydlbnRhYi1sZWFkaW5nLXdoaXRlc3BhY2UnfTsKICAgICRyZXF1aXJlX3RhYnMgPSAoICRyT3B0c190YWJzIHx8ICRyT3B0c19lbnRhYl9sZWFkaW5nX3doaXRlc3BhY2UgKQogICAgICAmJiAkck9wdHNfaW5kZW50X2NvbHVtbnMgPiAwOwoKICAgICRyT3B0c19maXhlZF9wb3NpdGlvbl9zaWRlX2NvbW1lbnQgPQogICAgICAkck9wdHMtPnsnZml4ZWQtcG9zaXRpb24tc2lkZS1jb21tZW50J307CgogICAgJHJPcHRzX21heGltdW1fbGluZV9sZW5ndGggICAgICA9ICRyT3B0cy0+eydtYXhpbXVtLWxpbmUtbGVuZ3RoJ307CiAgICAkck9wdHNfbWluaW11bV9zcGFjZV90b19jb21tZW50ID0gJHJPcHRzLT57J21pbmltdW0tc3BhY2UtdG8tY29tbWVudCd9OwogICAgJHJPcHRzX3ZhbGlnbl9jb2RlICAgICAgICAgICAgICA9ICRyT3B0cy0+eyd2YWxpZ24tY29kZSd9OwogICAgJHJPcHRzX3ZhbGlnbl9ibG9ja19jb21tZW50cyAgICA9ICRyT3B0cy0+eyd2YWxpZ24tYmxvY2stY29tbWVudHMnfTsKICAgICRyT3B0c192YWxpZ25fc2lkZV9jb21tZW50cyAgICAgPSAkck9wdHMtPnsndmFsaWduLXNpZGUtY29tbWVudHMnfTsKICAgICRyT3B0c192YWxpZ25fc2lnbmVkX251bWJlcnMgICAgPSAkck9wdHMtPnsndmFsaWduLXNpZ25lZC1udW1iZXJzJ307CiAgICAkck9wdHNfdmFsaWduX3NpZ25lZF9udW1iZXJzX2xpbWl0ID0KICAgICAgJHJPcHRzLT57J3ZhbGlnbi1zaWduZWQtbnVtYmVycy1saW1pdCd9OwogICAgJHJPcHRzX3ZhbGlnbl93aWRlX2VxdWFscyA9ICRyT3B0cy0+eyd2YWxpZ24td2lkZS1lcXVhbHMnfTsKCiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBjaGVja19vcHRpb25zCgpzdWIgY2hlY2tfa2V5cyB7CiAgICBteSAoICRydGVzdCwgJHJ2YWxpZCwgJG1zZywgJGV4YWN0X21hdGNoICkgPSBAXzsKCiAgICAjIENoZWNrIHRoZSBrZXlzIG9mIGEgaGFzaDoKICAgICMgJHJ0ZXN0ICAgPSByZWYgdG8gaGFzaCB0byB0ZXN0CiAgICAjICRydmFsaWQgID0gcmVmIHRvIGhhc2ggd2l0aCB2YWxpZCBrZXlzCgogICAgIyAkbXNnID0gYSBtZXNzYWdlIHRvIHdyaXRlIGluIGNhc2Ugb2YgZXJyb3IKICAgICMgJGV4YWN0X21hdGNoIGRlZmluZXMgdGhlIHR5cGUgb2YgY2hlY2s6CiAgICAjICAgICA9IGZhbHNlOiB0ZXN0IGhhc2ggbXVzdCBub3QgaGF2ZSB1bmtub3duIGtleQogICAgIyAgICAgPSB0cnVlOiAgdGVzdCBoYXNoIG11c3QgaGF2ZSBleGFjdGx5IHNhbWUga2V5cyBhcyBrbm93biBoYXNoCiAgICBteSBAdW5rbm93bl9rZXlzID0KICAgICAgZ3JlcCB7ICFleGlzdHMgJHJ2YWxpZC0+eyRffSB9IGtleXMgJXskcnRlc3R9OwogICAgbXkgQG1pc3Npbmdfa2V5cyA9CiAgICAgIGdyZXAgeyAhZXhpc3RzICRydGVzdC0+eyRffSB9IGtleXMgJXskcnZhbGlkfTsKICAgIG15ICRlcnJvciA9IEB1bmtub3duX2tleXM7CiAgICBpZiAoJGV4YWN0X21hdGNoKSB7ICRlcnJvciB8fD0gQG1pc3Npbmdfa2V5cyB9CiAgICBpZiAoJGVycm9yKSB7CiAgICAgICAgbG9jYWwgJExJU1RfU0VQQVJBVE9SID0gJykoJzsKICAgICAgICBteSBAZXhwZWN0ZWRfa2V5cyA9IHNvcnQga2V5cyAleyRydmFsaWR9OwogICAgICAgIEB1bmtub3duX2tleXMgPSBzb3J0IEB1bmtub3duX2tleXM7CiAgICAgICAgRmF1bHQoPDxFT00pOwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KUHJvZ3JhbSBlcnJvciBkZXRlY3RlZCBjaGVja2luZyBoYXNoIGtleXMKTWVzc2FnZSBpczogJyRtc2cnCkV4cGVjdGVkIGtleXM6IChAZXhwZWN0ZWRfa2V5cykKVW5rbm93biBrZXkocyk6IChAdW5rbm93bl9rZXlzKQpNaXNzaW5nIGtleShzKTogKEBtaXNzaW5nX2tleXMpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpFT00KICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGNoZWNrX2tleXMKCnN1YiBuZXcgewoKICAgIG15ICggJGNsYXNzLCBAYXJnbGlzdCApID0gQF87CiAgICBpZiAoIEBhcmdsaXN0ICUgMiApIHsgY3JvYWsgIk9kZCBudW1iZXIgb2YgaXRlbXMgaW4gYXJnIGhhc2ggbGlzdFxuIiB9CgogICAgbXkgJWRlZmF1bHRzID0gKAogICAgICAgIHJPcHRzICAgICAgICAgICAgICA9PiB1bmRlZiwKICAgICAgICBmaWxlX3dyaXRlcl9vYmplY3QgPT4gdW5kZWYsCiAgICAgICAgbG9nZ2VyX29iamVjdCAgICAgID0+IHVuZGVmLAogICAgICAgIGRpYWdub3N0aWNzX29iamVjdCA9PiB1bmRlZiwKICAgICk7CiAgICBteSAlYXJncyA9ICggJWRlZmF1bHRzLCBAYXJnbGlzdCApOwoKICAgICMgSW5pdGlhbGl6ZSBvdGhlciBjYWNoZXMgYW5kIGJ1ZmZlcnMKICAgIGluaXRpYWxpemVfc3RlcF9CX2NhY2hlKCk7CiAgICBpbml0aWFsaXplX3ZhbGlnbl9idWZmZXIoKTsKICAgIGluaXRpYWxpemVfZGVjb2RlKCk7CiAgICBzZXRfbG9nZ2VyX29iamVjdCggJGFyZ3N7bG9nZ2VyX29iamVjdH0gKTsKCiAgICAjIEluaXRpYWxpemUgYWxsIHZhcmlhYmxlcyBpbiAkc2VsZi4KICAgICMgVG8gYWRkIGFuIGl0ZW0gdG8gJHNlbGYsIGZpcnN0IGRlZmluZSBhIG5ldyBjb25zdGFudCBpbmRleCBpbiB0aGUgQkVHSU4KICAgICMgc2VjdGlvbi4KICAgIG15ICRzZWxmID0gW107CgogICAgIyBvYmplY3RzCiAgICAkc2VsZi0+W19maWxlX3dyaXRlcl9vYmplY3RfXSA9ICRhcmdze2ZpbGVfd3JpdGVyX29iamVjdH07CiAgICAkc2VsZi0+W19sb2dnZXJfb2JqZWN0X10gICAgICA9ICRhcmdze2xvZ2dlcl9vYmplY3R9OwogICAgJHNlbGYtPltfZGlhZ25vc3RpY3Nfb2JqZWN0X10gPSAkYXJnc3tkaWFnbm9zdGljc19vYmplY3R9OwoKICAgICMgc2hvcnRjdXQgdG8gdXNlciBvcHRpb25zCiAgICBteSAkck9wdHMgPSAkYXJnc3tyT3B0c307CiAgICAkc2VsZi0+W19yT3B0c19dID0gJHJPcHRzOwoKICAgICMgQmF0Y2ggb2YgbGluZXMgYmVpbmcgY29sbGVjdGVkCiAgICAkc2VsZi0+W19yZ3JvdXBfbGluZXNfXSAgICAgICAgICAgICAgICA9IFtdOwogICAgJHNlbGYtPltfZ3JvdXBfbGV2ZWxfXSAgICAgICAgICAgICAgICAgPSAwOwogICAgJHNlbGYtPltfZ3JvdXBfdHlwZV9dICAgICAgICAgICAgICAgICAgPSBFTVBUWV9TVFJJTkc7CiAgICAkc2VsZi0+W19ncm91cF9tYXhpbXVtX2xpbmVfbGVuZ3RoX10gICA9IHVuZGVmOwogICAgJHNlbGYtPltfemVyb19jb3VudF9dICAgICAgICAgICAgICAgICAgPSAwOwogICAgJHNlbGYtPltfY29tbWVudF9sZWFkaW5nX3NwYWNlX2NvdW50X10gPSAwOwogICAgJHNlbGYtPltfbGFzdF9sZWFkaW5nX3NwYWNlX2NvdW50X10gICAgPSAwOwoKICAgICMgTWVtb3J5IG9mIHdoYXQgaGFzIGJlZW4gcHJvY2Vzc2VkCiAgICAkc2VsZi0+W19sYXN0X2xldmVsX3dyaXR0ZW5fXSAgICAgICAgICAgID0gLTE7CiAgICAkc2VsZi0+W19sYXN0X3NpZGVfY29tbWVudF9jb2x1bW5fXSAgICAgID0gMDsKICAgICRzZWxmLT5bX2xhc3Rfc2lkZV9jb21tZW50X2xpbmVfbnVtYmVyX10gPSAwOwogICAgJHNlbGYtPltfbGFzdF9zaWRlX2NvbW1lbnRfbGVuZ3RoX10gICAgICA9IDA7CiAgICAkc2VsZi0+W19sYXN0X3NpZGVfY29tbWVudF9sZXZlbF9dICAgICAgID0gLTE7CiAgICAkc2VsZi0+W19vdXRkZW50ZWRfbGluZV9jb3VudF9dICAgICAgICAgID0gMDsKICAgICRzZWxmLT5bX2ZpcnN0X291dGRlbnRlZF9saW5lX2F0X10gICAgICAgPSAwOwogICAgJHNlbGYtPltfbGFzdF9vdXRkZW50ZWRfbGluZV9hdF9dICAgICAgICA9IDA7CiAgICAkc2VsZi0+W19jb25zZWN1dGl2ZV9ibG9ja19jb21tZW50c19dICAgID0gMDsKCiAgICBibGVzcyAkc2VsZiwgJGNsYXNzOwogICAgcmV0dXJuICRzZWxmOwp9ICMjIGVuZCBzdWIgbmV3CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDT0RFIFNFQ1RJT04gMjogQmFzaWMgVXRpbGl0aWVzCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKc3ViIGZsdXNoIHsKCiAgICAjIGZsdXNoKCkgaXMgdGhlIGV4dGVybmFsIGNhbGwgdG8gY29tcGxldGVseSBlbXB0eSB0aGUgcGlwZWxpbmUuCiAgICBteSAoJHNlbGYpID0gQF87CgogICAgIyBwdXNoIHRoaW5ncyBvdXQgdGhlIHBpcGVsaW5lLi4uCgogICAgIyBwdXNoIG91dCBhbnkgY3VycmVudCBncm91cCBsaW5lcwogICAgJHNlbGYtPl9mbHVzaF9ncm91cF9saW5lcygpCiAgICAgIGlmICggQHsgJHNlbGYtPltfcmdyb3VwX2xpbmVzX10gfSApOwoKICAgICMgdGhlbiBhbnl0aGluZyBsZWZ0IGluIHRoZSBjYWNoZSBvZiBzdGVwX0IKICAgICRzZWxmLT5fZmx1c2hfc3RlcF9CX2NhY2hlKCk7CgogICAgIyB0aGVuIGFueXRoaW5nIGxlZnQgaW4gdGhlIGJ1ZmZlciBvZiBzdGVwX0MKICAgICRzZWxmLT5kdW1wX3ZhbGlnbl9idWZmZXIoKTsKCiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBmbHVzaAoKc3ViIGluaXRpYWxpemVfZm9yX25ld19ncm91cCB7CiAgICBteSAoJHNlbGYpID0gQF87CgogICAgIyBpbml0aWFsaXplIGZvciBhIG5ldyBncm91cCBvZiBsaW5lcyB0byBiZSBhbGlnbmVkIHZlcnRpY2FsbHkKCiAgICAkc2VsZi0+W19yZ3JvdXBfbGluZXNfXSAgICAgICAgICAgICAgICA9IFtdOwogICAgJHNlbGYtPltfZ3JvdXBfdHlwZV9dICAgICAgICAgICAgICAgICAgPSBFTVBUWV9TVFJJTkc7CiAgICAkc2VsZi0+W196ZXJvX2NvdW50X10gICAgICAgICAgICAgICAgICA9IDA7CiAgICAkc2VsZi0+W19jb21tZW50X2xlYWRpbmdfc3BhY2VfY291bnRfXSA9IDA7CiAgICAkc2VsZi0+W19sYXN0X2xlYWRpbmdfc3BhY2VfY291bnRfXSAgICA9IDA7CiAgICAkc2VsZi0+W19ncm91cF9tYXhpbXVtX2xpbmVfbGVuZ3RoX10gICA9IHVuZGVmOwoKICAgICMgTm90ZSB0aGF0IHRoZSB2YWx1ZSBmb3IgX2dyb3VwX2xldmVsXyBpcwogICAgIyBoYW5kbGVkIHNlcGFyYXRlbHkgaW4gc3ViIHZhbGlnbl9pbnB1dAogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgaW5pdGlhbGl6ZV9mb3JfbmV3X2dyb3VwCgpzdWIgZ3JvdXBfbGluZV9jb3VudCB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgcmV0dXJuICtAeyAkc2VsZi0+W19yZ3JvdXBfbGluZXNfXSB9Owp9CgojIGludGVyZmFjZSB0byBQZXJsOjpUaWR5OjpEaWFnbm9zdGljcyByb3V0aW5lcwojIEZvciBkZWJ1Z2dpbmc7IG5vdCBjdXJyZW50bHkgdXNlZApzdWIgd3JpdGVfZGlhZ25vc3RpY3MgewogICAgbXkgKCAkc2VsZiwgJG1zZyApID0gQF87CiAgICBteSAkZGlhZ25vc3RpY3Nfb2JqZWN0ID0gJHNlbGYtPltfZGlhZ25vc3RpY3Nfb2JqZWN0X107CiAgICBpZiAoJGRpYWdub3N0aWNzX29iamVjdCkgewogICAgICAgICRkaWFnbm9zdGljc19vYmplY3QtPndyaXRlX2RpYWdub3N0aWNzKCRtc2cpOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgd3JpdGVfZGlhZ25vc3RpY3MKCnsgICAgIyMgYmVnaW4gY2xvc3VyZSBmb3IgbG9nZ2VyIHJvdXRpbmVzCiAgICBteSAkbG9nZ2VyX29iamVjdDsKCiAgICAjIENhbGxlZCBvbmNlIHBlciBmaWxlIHRvIGluaXRpYWxpemUgdGhlIGxvZ2dlciBvYmplY3QKICAgIHN1YiBzZXRfbG9nZ2VyX29iamVjdCB7CiAgICAgICAgJGxvZ2dlcl9vYmplY3QgPSBzaGlmdDsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgc3ViIGdldF9pbnB1dF9zdHJlYW1fbmFtZSB7CiAgICAgICAgbXkgJGlucHV0X3N0cmVhbV9uYW1lID0gRU1QVFlfU1RSSU5HOwogICAgICAgIGlmICgkbG9nZ2VyX29iamVjdCkgewogICAgICAgICAgICAkaW5wdXRfc3RyZWFtX25hbWUgPSAkbG9nZ2VyX29iamVjdC0+Z2V0X2lucHV0X3N0cmVhbV9uYW1lKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkaW5wdXRfc3RyZWFtX25hbWU7CiAgICB9ICMjIGVuZCBzdWIgZ2V0X2lucHV0X3N0cmVhbV9uYW1lCgogICAgc3ViIHdhcm5pbmcgewogICAgICAgIG15ICgkbXNnKSA9IEBfOwogICAgICAgIGlmICgkbG9nZ2VyX29iamVjdCkgewogICAgICAgICAgICAkbG9nZ2VyX29iamVjdC0+d2FybmluZygkbXNnKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIHdhcm5pbmcKCiAgICBzdWIgd3JpdGVfbG9nZmlsZV9lbnRyeSB7CiAgICAgICAgbXkgKCRtc2cpID0gQF87CiAgICAgICAgaWYgKCRsb2dnZXJfb2JqZWN0KSB7CiAgICAgICAgICAgICRsb2dnZXJfb2JqZWN0LT53cml0ZV9sb2dmaWxlX2VudHJ5KCRtc2cpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgd3JpdGVfbG9nZmlsZV9lbnRyeQp9CgpzdWIgZ2V0X2NhY2hlZF9saW5lX2NvdW50IHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICByZXR1cm4gJHNlbGYtPmdyb3VwX2xpbmVfY291bnQoKSArICggZ2V0X2NhY2hlZF9saW5lX3R5cGUoKSA/IDEgOiAwICk7Cn0KCnN1YiBnZXRfcmVjb3ZlcmFibGVfc3BhY2VzIHsKCiAgICAjIHJldHVybiB0aGUgbnVtYmVyIG9mIHNwYWNlcyAoKyBtZWFucyBzaGlmdCByaWdodCwgLSBtZWFucyBzaGlmdCBsZWZ0KQogICAgIyB0aGF0IHdlIHdvdWxkIGxpa2UgdG8gc2hpZnQgYSBncm91cCBvZiBsaW5lcyB3aXRoIHRoZSBzYW1lIGluZGVudGF0aW9uCiAgICAjIHRvIGdldCB0aGVtIHRvIGxpbmUgdXAgd2l0aCB0aGVpciBvcGVuaW5nIHBhcmVucwogICAgbXkgJGluZGVudGF0aW9uID0gc2hpZnQ7CiAgICByZXR1cm4gcmVmKCRpbmRlbnRhdGlvbikgPyAkaW5kZW50YXRpb24tPmdldF9yZWNvdmVyYWJsZV9zcGFjZXMoKSA6IDA7Cn0gIyMgZW5kIHN1YiBnZXRfcmVjb3ZlcmFibGVfc3BhY2VzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDT0RFIFNFQ1RJT04gMzogQ29kZSB0byBhY2NlcHQgaW5wdXQgYW5kIGZvcm0gZ3JvdXBzCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKdXNlIGNvbnN0YW50IERFQlVHX1ZBTElHTiAgICAgID0+IDA7CnVzZSBjb25zdGFudCBTQ19MT05HX0xJTkVfRElGRiA9PiAxMjsKCm15ICVpc19vcGVuaW5nX3Rva2VuOwpteSAlaXNfY2xvc2luZ190b2tlbjsKbXkgJWlzX2RpZ2l0X2NoYXI7Cm15ICVpc19wbHVzX29yX21pbnVzOwpteSAlaXNfaWZfb3I7Cm15ICVpc19hc3NpZ25tZW50OwpteSAlaXNfY29tbWFfdG9rZW47Cm15ICVpc19nb29kX21hcmdpbmFsX2FsaWdubWVudDsKCkJFR0lOIHsKCiAgICBteSBAcSA9IHF3PCB7ICggWyA+OwogICAgQGlzX29wZW5pbmdfdG9rZW57QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICBAcSA9IHF3PCB9ICkgXSA+OwogICAgQGlzX2Nsb3NpbmdfdG9rZW57QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICBAcSA9IHF3KCAwIDEgMiAzIDQgNSA2IDcgOCA5ICk7CiAgICBAaXNfZGlnaXRfY2hhcntAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgIEBxID0gcXcoICsgLSApOwogICAgQGlzX3BsdXNfb3JfbWludXN7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICBAcSA9IHF3KCBpZiB1bmxlc3Mgb3IgfHwgKTsKICAgIEBpc19pZl9vcntAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgIEBxID0gcXcoID0gKio9ICs9ICo9ICY9IDw8PSAmJj0gLT0gLz0gfD0gPj49IHx8PSAvLz0gLj0gJT0gXj0geD0gKTsKICAgIEBpc19hc3NpZ25tZW50e0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgQHEgPSBxdyggPT4gKTsKICAgIHB1c2ggQHEsICcsJzsKICAgIEBpc19jb21tYV90b2tlbntAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICMgV2UgY2FuIGJlIGxlc3MgcmVzdHJpY3RpdmUgaW4gbWFyZ2luYWwgY2FzZXMgYXQgY2VydGFpbiAiZ29vZCIgYWxpZ25tZW50cwogICAgQHEgPSBxdyggeyA/ID0+ID0gKTsKICAgIHB1c2ggQHEsICgnLCcpOwogICAgQGlzX2dvb2RfbWFyZ2luYWxfYWxpZ25tZW50e0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7Cgp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBWVEZMQUdTOiBWZXJ0aWNhbCB0aWdodG5lc3MgdHlwZXMgYW5kIGZsYWdzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFZlcnRpY2FsIHRpZ2h0bmVzcyBpcyBjb250cm9sbGVkIGJ5IGEgJ3R5cGUnIGFuZCBhc3NvY2lhdGVkICdmbGFncycgZm9yIGVhY2gKIyBsaW5lLiAgVGhlc2UgdmFsdWVzIGFyZSBzZXQgYnkgc3ViIEZvcm1hdHRlcjo6c2V0X3ZlcnRpY2FsX3RpZ2h0bmVzc19mbGFncy4KIyBUaGVzZSBhcmUgZGVmaW5lZCBhcyBmb2xsb3dzOgoKIyBWZXJ0aWNhbCBUaWdodG5lc3MgTGluZSBUeXBlIENvZGVzOgojIFR5cGUgMCwgbm8gdmVydGljYWwgdGlnaHRuZXNzIGNvbmRpdGlvbgojIFR5cGUgMSwgbGFzdCB0b2tlbiBvZiB0aGlzIGxpbmUgaXMgYSBub24tYmxvY2sgb3BlbmluZyB0b2tlbgojIFR5cGUgMiwgZmlyc3QgdG9rZW4gb2YgbmV4dCBsaW5lIGlzIGEgbm9uLWJsb2NrIGNsb3NpbmcKIyBUeXBlIDMsIGlzb2xhdGVkIG9wZW5pbmcgYmxvY2sgYnJhY2UKIyB0eXBlIDQsIGlzb2xhdGVkIGNsb3NpbmcgYmxvY2sgYnJhY2UKCiMgT3BlbmluZyB0b2tlbiBmbGFnIHZhbHVlcyBhcmUgdGhlIHZlcnRpY2FsIHRpZ2h0bmVzcyBmbGFncwojIDAgZG8gbm90IGpvaW4gd2l0aCBuZXh0IGxpbmUKIyAxIGp1c3Qgb25lIGpvaW4gcGVyIGxpbmUKIyAyIGFueSBudW1iZXIgb2Ygam9pbnMKCiMgQ2xvc2luZyB0b2tlbiBmbGFnIHZhbHVlcyBpbmRpY2F0ZSBzcGFjaW5nOgojIDAgPSBubyBzcGFjZSBhZGRlZCBiZWZvcmUgY2xvc2luZyB0b2tlbgojIDEgPSBzaW5nbGUgc3BhY2UgYWRkZWQgYmVmb3JlIGNsb3NpbmcgdG9rZW4KCnN1YiB2YWxpZ25faW5wdXQgewoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgVGhpcyBpcyB0aGUgZnJvbnQgZG9vciBvZiB0aGUgdmVydGljYWwgYWxpZ25lci4gIE9uIGVhY2ggY2FsbAogICAgIyB3ZSByZWNlaXZlIG9uZSBsaW5lIG9mIHNwZWNpYWxseSBtYXJrZWQgdGV4dCBmb3IgdmVydGljYWwgYWxpZ25tZW50LgogICAgIyBXZSBjb21wYXJlIHRoZSBsaW5lIHdpdGggdGhlIGN1cnJlbnQgZ3JvdXAsIGFuZCBlaXRoZXI6CiAgICAjIC0gdGhlIGxpbmUgam9pbnMgdGhlIGN1cnJlbnQgZ3JvdXAgaWYgYWxpZ25tZW50cyBtYXRjaCwgb3IKICAgICMgLSB0aGUgY3VycmVudCBncm91cCBpcyBmbHVzaGVkIGFuZCBhIG5ldyBncm91cCBpcyBzdGFydGVkCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjCiAgICAjIFRoZSBrZXkgaW5wdXQgcGFyYW1ldGVycyBkZXNjcmliaW5nIGVhY2ggbGluZSBhcmU6CiAgICAjICAgICAkbGV2ZWwgICAgICAgICAgPSBpbmRlbnRhdGlvbiBsZXZlbCBvZiB0aGlzIGxpbmUKICAgICMgICAgICRyZmllbGRzICAgICAgICA9IHJlZiB0byBhcnJheSBvZiBmaWVsZHMKICAgICMgICAgICRycGF0dGVybnMgICAgICA9IHJlZiB0byBhcnJheSBvZiBwYXR0ZXJucywgb25lIHBlciBmaWVsZAogICAgIyAgICAgJHJ0b2tlbnMgICAgICAgID0gcmVmIHRvIGFycmF5IG9mIHRva2VucyBzdGFydGluZyBmaWVsZHMgMSwyLC4uCiAgICAjICAgICAkcmZpZWxkX2xlbmd0aHMgPSByZWYgdG8gYXJyYXkgb2YgZmllbGQgZGlzcGxheSB3aWR0aHMKICAgICMKICAgICMgSGVyZSBpcyBhbiBleGFtcGxlIG9mIHdoYXQgdGhpcyBwYWNrYWdlIGRvZXMuICBJbiB0aGlzIGV4YW1wbGUsCiAgICAjIHdlIGFyZSB0cnlpbmcgdG8gbGluZSB1cCBib3RoIHRoZSAnPT4nIGFuZCB0aGUgJyMnLgogICAgIwogICAgIyAgICAgICAgICcxOCcgPT4gJ2dyYXZlJywgICAgIyAgIFxgCiAgICAjICAgICAgICAgJzE5JyA9PiAnYWN1dGUnLCAgICAjICAgYCcKICAgICMgICAgICAgICAnMjAnID0+ICdjYXJvbicsICAgICMgICBcdgogICAgIyA8LXRhYnMtPjxmMS0+PC0tZmllbGQgMiAtLS0+PC1mMy0+CiAgICAjIHwgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgIHwKICAgICMgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgfAogICAgIyBjb2wxICAgICAgICBjb2wyICAgICAgICAgY29sMyBjb2w0CiAgICAjCiAgICAjIFRoZSBjYWxsaW5nIHJvdXRpbmUgaGFzIGFscmVhZHkgYnJva2VuIHRoZSBlbnRpcmUgbGluZSBpbnRvIDMgZmllbGRzIGFzCiAgICAjIGluZGljYXRlZC4gIChTbyB0aGUgd29yayBvZiBpZGVudGlmeWluZyBwcm9taXNpbmcgY29tbW9uIHRva2VucyBoYXMKICAgICMgYWxyZWFkeSBiZWVuIGRvbmUpLgogICAgIwogICAgIyBJbiB0aGlzIGV4YW1wbGUsIHRoZXJlIHdpbGwgYmUgMiB0b2tlbnMgYmVpbmcgbWF0Y2hlZDogJz0+JyBhbmQgJyMnLgogICAgIyBUaGV5IGFyZSB0aGUgbGVhZGluZyBwYXJ0cyBvZiBmaWVsZHMgMiBhbmQgMywgYnV0IHdlIGRvIG5lZWQgdG8ga25vdwogICAgIyB3aGF0IHRoZXkgYXJlIHNvIHRoYXQgd2UgY2FuIGR1bXAgYSBncm91cCBvZiBsaW5lcyB3aGVuIHRoZXNlIHRva2VucwogICAgIyBjaGFuZ2UuCiAgICAjCiAgICAjIFRoZSBmaWVsZHMgY29udGFpbiB0aGUgYWN0dWFsIGNoYXJhY3RlcnMgb2YgZWFjaCBmaWVsZC4gIFRoZSBwYXR0ZXJucwogICAgIyBhcmUgbGlrZSB0aGUgZmllbGRzLCBidXQgdGhleSBjb250YWluIG1haW5seSB0b2tlbiB0eXBlcyBpbnN0ZWFkCiAgICAjIG9mIHRva2Vucywgc28gdGhleSBoYXZlIGZld2VyIGNoYXJhY3RlcnMuICBUaGV5IGFyZSB1c2VkIHRvIGJlCiAgICAjIHN1cmUgd2UgYXJlIG1hdGNoaW5nIGZpZWxkcyBvZiBzaW1pbGFyIHR5cGUuCiAgICAjCiAgICAjIEluIHRoaXMgZXhhbXBsZSwgdGhlcmUgd2lsbCBiZSA0IGNvbHVtbiBpbmRleGVzIGJlaW5nIGFkanVzdGVkLiAgVGhlCiAgICAjIGZpcnN0IG9uZSBpcyBhbHdheXMgYXQgemVyby4gIFRoZSBpbnRlcmlvciBjb2x1bW5zIGFyZSBhdCB0aGUgc3RhcnQgb2YKICAgICMgdGhlIG1hdGNoaW5nIHRva2VucywgYW5kIHRoZSBsYXN0IG9uZSB0cmFja3MgdGhlIG1heGltdW0gbGluZSBsZW5ndGguCiAgICAjCiAgICAjIEVhY2ggdGltZSBhIG5ldyBsaW5lIGNvbWVzIGluLCBpdCBqb2lucyB0aGUgY3VycmVudCB2ZXJ0aWNhbAogICAgIyBncm91cCBpZiBwb3NzaWJsZS4gIE90aGVyd2lzZSBpdCBjYXVzZXMgdGhlIGN1cnJlbnQgZ3JvdXAgdG8gYmUgZmx1c2hlZAogICAgIyBhbmQgYSBuZXcgZ3JvdXAgaXMgc3RhcnRlZC4KICAgICMKICAgICMgRm9yIGVhY2ggbmV3IGdyb3VwIG1lbWJlciwgdGhlIGNvbHVtbiBsb2NhdGlvbnMgYXJlIGluY3JlYXNlZCwgYXMKICAgICMgbmVjZXNzYXJ5LCB0byBtYWtlIHJvb20gZm9yIHRoZSBuZXcgZmllbGRzLiAgV2hlbiB0aGUgZ3JvdXAgaXMgZmluYWxseQogICAgIyBvdXRwdXQsIHRoZXNlIGNvbHVtbiBudW1iZXJzIGFyZSB1c2VkIHRvIGNvbXB1dGUgdGhlIGFtb3VudCBvZiBzcGFjZXMgb2YKICAgICMgcGFkZGluZyBuZWVkZWQgZm9yIGVhY2ggZmllbGQuCiAgICAjCiAgICAjIFByb2dyYW1taW5nIG5vdGU6IHRoZSBmaWVsZHMgYXJlIGFzc3VtZWQgbm90IHRvIGhhdmUgYW55IHRhYiBjaGFyYWN0ZXJzLgogICAgIyBUYWJzIGhhdmUgYmVlbiBwcmV2aW91c2x5IHJlbW92ZWQgZXhjZXB0IGZvciB0YWJzIGluIHF1b3RlZCBzdHJpbmdzIGFuZAogICAgIyBzaWRlIGNvbW1lbnRzLiAgVGFicyBpbiB0aGVzZSBmaWVsZHMgY2FuIG1lc3MgdXAgdGhlIGNvbHVtbiBjb3VudGluZy4KICAgICMgVGhlIGxvZyBmaWxlIHdhcm5zIHRoZSB1c2VyIGlmIHRoZXJlIGFyZSBhbnkgc3VjaCB0YWJzLgoKICAgIG15ICggJHNlbGYsICRyY2FsbF9oYXNoICkgPSBAXzsKCiAgICAjIFVucGFjayB0aGUgY2FsbCBhcmdzLiBUaGlzIGZvcm0gaXMgc2lnbmlmaWNhbnRseSBmYXN0ZXIgdGhhbiBnZXR0aW5nIHRoZW0KICAgICMgb25lLWJ5LW9uZS4KICAgIG15ICgKCiAgICAgICAgJEtlbmQsCiAgICAgICAgJGJyZWFrX2FsaWdubWVudF9hZnRlciwKICAgICAgICAkYnJlYWtfYWxpZ25tZW50X2JlZm9yZSwKICAgICAgICAkY2lfbGV2ZWwsCiAgICAgICAgJGZvcmdldF9zaWRlX2NvbW1lbnQsCiAgICAgICAgJGluZGVudGF0aW9uLAogICAgICAgICRpc190ZXJtaW5hbF90ZXJuYXJ5LAogICAgICAgICRsZXZlbCwKICAgICAgICAkbGV2ZWxfZW5kLAogICAgICAgICRsaXN0X3NlcW5vLAogICAgICAgICRtYXhpbXVtX2xpbmVfbGVuZ3RoLAogICAgICAgICRvdXRkZW50X2xvbmdfbGluZXMsCiAgICAgICAgJHJsaW5lX2FsaWdubWVudCwKICAgICAgICAkcnZlcnRpY2FsX3RpZ2h0bmVzc19mbGFncywKCiAgICAgICkgPQoKICAgICAgQHskcmNhbGxfaGFzaH17CiAgICAgICAgcXcoCiAgICAgICAgICBLZW5kCiAgICAgICAgICBicmVha19hbGlnbm1lbnRfYWZ0ZXIKICAgICAgICAgIGJyZWFrX2FsaWdubWVudF9iZWZvcmUKICAgICAgICAgIGNpX2xldmVsCiAgICAgICAgICBmb3JnZXRfc2lkZV9jb21tZW50CiAgICAgICAgICBpbmRlbnRhdGlvbgogICAgICAgICAgaXNfdGVybWluYWxfdGVybmFyeQogICAgICAgICAgbGV2ZWwKICAgICAgICAgIGxldmVsX2VuZAogICAgICAgICAgbGlzdF9zZXFubwogICAgICAgICAgbWF4aW11bV9saW5lX2xlbmd0aAogICAgICAgICAgb3V0ZGVudF9sb25nX2xpbmVzCiAgICAgICAgICBybGluZV9hbGlnbm1lbnQKICAgICAgICAgIHJ2ZXJ0aWNhbF90aWdodG5lc3NfZmxhZ3MKICAgICAgICApCiAgICAgIH07CgogICAgbXkgKCAkcnRva2VucywgJHJmaWVsZHMsICRycGF0dGVybnMsICRyZmllbGRfbGVuZ3RocyApID0KICAgICAgQHskcmxpbmVfYWxpZ25tZW50fTsKCiAgICAjIFRoZSBpbmRleCAnJEtlbmQnIGlzIGEgdmFsdWUgd2hpY2ggcGFzc2VkIGFsb25nIHdpdGggdGhlIGxpbmUgdGV4dCB0byBzdWIKICAgICMgJ3dyaXRlX2NvZGVfbGluZScgZm9yIGEgY29udmVyZ2VuY2UgY2hlY2suCgogICAgIyBudW1iZXIgb2YgZmllbGRzIGlzICRqbWF4CiAgICAjIG51bWJlciBvZiB0b2tlbnMgYmV0d2VlbiBmaWVsZHMgaXMgJGptYXgtMQogICAgbXkgJGptYXggPSBAeyRyZmllbGRzfSAtIDE7CgogICAgbXkgJGxlYWRpbmdfc3BhY2VfY291bnQgPQogICAgICByZWYoJGluZGVudGF0aW9uKSA/ICRpbmRlbnRhdGlvbi0+Z2V0X3NwYWNlcygpIDogJGluZGVudGF0aW9uOwoKICAgICMgc2V0IG91dGRlbnRlZCBmbGFnIHRvIGJlIHN1cmUgd2UgZWl0aGVyIGFsaWduIHdpdGhpbiBzdGF0ZW1lbnRzIG9yCiAgICAjIGFjcm9zcyBzdGF0ZW1lbnQgYm91bmRhcmllcywgYnV0IG5vdCBib3RoLgogICAgbXkgJGlzX291dGRlbnRlZCA9CiAgICAgICRzZWxmLT5bX2xhc3RfbGVhZGluZ19zcGFjZV9jb3VudF9dID4gJGxlYWRpbmdfc3BhY2VfY291bnQ7CiAgICAkc2VsZi0+W19sYXN0X2xlYWRpbmdfc3BhY2VfY291bnRfXSA9ICRsZWFkaW5nX3NwYWNlX2NvdW50OwoKICAgICMgSWRlbnRpZnkgYSBoYW5naW5nIHNpZGUgY29tbWVudC4gIEhhbmdpbmcgc2lkZSBjb21tZW50cyBoYXZlIGFuIGVtcHR5CiAgICAjIGluaXRpYWwgZmllbGQuCiAgICBteSAkaXNfaGFuZ2luZ19zaWRlX2NvbW1lbnQgPQogICAgICAoICRqbWF4ID09IDEgJiYgJHJ0b2tlbnMtPlswXSBlcSAnIycgJiYgJHJmaWVsZHMtPlswXSA9fiAvXlxzKiQvICk7CgogICAgIyBVbmRvIG91dGRlbnRlZCBmbGFnIGZvciBhIGhhbmdpbmcgc2lkZSBjb21tZW50CiAgICAkaXNfb3V0ZGVudGVkID0gMCBpZiAkaXNfaGFuZ2luZ19zaWRlX2NvbW1lbnQ7CgogICAgIyBJZGVudGlmeSBhIGJsb2NrIGNvbW1lbnQuCiAgICBteSAkaXNfYmxvY2tfY29tbWVudCA9ICRqbWF4ID09IDAgJiYgc3Vic3RyKCAkcmZpZWxkcy0+WzBdLCAwLCAxICkgZXEgJyMnOwoKICAgICMgQmxvY2sgY29tbWVudCAuLiB1cGRhdGUgY291bnQKICAgIGlmICgkaXNfYmxvY2tfY29tbWVudCkgewogICAgICAgICRzZWxmLT5bX2NvbnNlY3V0aXZlX2Jsb2NrX2NvbW1lbnRzX10rKzsKICAgIH0KCiAgICAjIE5vdCBhIGJsb2NrIGNvbW1lbnQgLi4KICAgICMgRm9yZ2V0IHNpZGUgY29tbWVudCBjb2x1bW4gaWYgd2Ugc2F3IDIgb3IgbW9yZSBibG9jayBjb21tZW50cywKICAgICMgYW5kIHJlc2V0IHRoZSBjb3VudAogICAgZWxzZSB7CgogICAgICAgIGlmICggJHNlbGYtPltfY29uc2VjdXRpdmVfYmxvY2tfY29tbWVudHNfXSA+IDEgKSB7CiAgICAgICAgICAgICRzZWxmLT5mb3JnZXRfc2lkZV9jb21tZW50KCk7CiAgICAgICAgfQogICAgICAgICRzZWxmLT5bX2NvbnNlY3V0aXZlX2Jsb2NrX2NvbW1lbnRzX10gPSAwOwogICAgfQoKICAgICMgUmVzZXQgc2lkZSBjb21tZW50IGxvY2F0aW9uIGlmIHdlIGFyZSBlbnRlcmluZyBhIG5ldyBibG9jayBmcm9tIGxldmVsIDAuCiAgICAjIFRoaXMgaXMgaW50ZW5kZWQgdG8ga2VlcCB0aGVtIGZyb20gZHJpZnRpbmcgdG9vIGZhciB0byB0aGUgcmlnaHQuCiAgICBpZiAoJGZvcmdldF9zaWRlX2NvbW1lbnQpIHsKICAgICAgICAkc2VsZi0+Zm9yZ2V0X3NpZGVfY29tbWVudCgpOwogICAgfQoKICAgIG15ICRpc19iYWxhbmNlZF9saW5lID0gJGxldmVsX2VuZCA9PSAkbGV2ZWw7CgogICAgbXkgJGdyb3VwX2xldmVsICAgICAgICAgICAgICAgPSAkc2VsZi0+W19ncm91cF9sZXZlbF9dOwogICAgbXkgJGdyb3VwX21heGltdW1fbGluZV9sZW5ndGggPSAkc2VsZi0+W19ncm91cF9tYXhpbXVtX2xpbmVfbGVuZ3RoX107CgogICAgREVCVUdfVkFMSUdOICYmIGRvIHsKICAgICAgICBteSAkbmxpbmVzID0gJHNlbGYtPmdyb3VwX2xpbmVfY291bnQoKTsKICAgICAgICBwcmludCB7KlNURE9VVH0KIkVudGVyaW5nIHZhbGlnbl9pbnB1dDogbGluZXM9JG5saW5lcyBuZXcgI2ZpZWxkcz0gJGptYXgsIGxlYWRpbmdfY291bnQ9JGxlYWRpbmdfc3BhY2VfY291bnQsIGxldmVsPSRsZXZlbCwgZ3JvdXBfbGV2ZWw9JGdyb3VwX2xldmVsLCBsZXZlbF9lbmQ9JGxldmVsX2VuZFxuIjsKICAgIH07CgogICAgIyBWYWxpZGF0ZSBjYWNoZWQgbGluZSBpZiBuZWNlc3Nhcnk6IElmIHdlIGNhbiBwcm9kdWNlIGEgY29udGFpbmVyCiAgICAjIHdpdGgganVzdCAyIGxpbmVzIHRvdGFsIGJ5IGNvbWJpbmluZyBhbiBleGlzdGluZyBjYWNoZWQgb3BlbmluZwogICAgIyB0b2tlbiB3aXRoIHRoZSBjbG9zaW5nIHRva2VuIHRvIGZvbGxvdywgdGhlbiB3ZSB3aWxsIG1hcmsgYm90aAogICAgIyBjYWNoZWQgZmxhZ3MgYXMgdmFsaWQuCiAgICBteSAkY2FjaGVkX2xpbmVfdHlwZSA9IGdldF9jYWNoZWRfbGluZV90eXBlKCk7CiAgICBpZiAoJGNhY2hlZF9saW5lX3R5cGUpIHsKICAgICAgICBteSAkY2FjaGVkX2xpbmVfb3BlbmluZ19mbGFnID0gZ2V0X2NhY2hlZF9saW5lX29wZW5pbmdfZmxhZygpOwogICAgICAgIGlmICgkcnZlcnRpY2FsX3RpZ2h0bmVzc19mbGFncykgewogICAgICAgICAgICBteSAkY2FjaGVkX3NlcW5vID0gZ2V0X2NhY2hlZF9zZXFubygpOwogICAgICAgICAgICBpZiAoICAgJGNhY2hlZF9zZXFubwogICAgICAgICAgICAgICAgJiYgJHJ2ZXJ0aWNhbF90aWdodG5lc3NfZmxhZ3MtPntfdnRfc2Vxbm99CiAgICAgICAgICAgICAgICAmJiAkcnZlcnRpY2FsX3RpZ2h0bmVzc19mbGFncy0+e192dF9zZXFub30gPT0gJGNhY2hlZF9zZXFubyApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIEZpeCBmb3IgYjExODcgYW5kIGIxMTg4OiBOb3JtYWxseSB0aGlzIHN0ZXAgaXMgb25seSBkb25lCiAgICAgICAgICAgICAgICAjIGlmIHRoZSBudW1iZXIgb2YgZXhpc3RpbmcgbGluZXMgaXMgMCBvciAxLiAgQnV0IHRvIHByZXZlbnQKICAgICAgICAgICAgICAgICMgYmxpbmtpbmcsIHRoaXMgcmFuZ2UgY2FuIGJlIGNvbnRyb2xsZWQgYnkgdGhlIGNhbGxlci4KICAgICAgICAgICAgICAgICMgSWYgemVybyB2YWx1ZXMgYXJlIGdpdmVuIHdlIGZhbGwgYmFjayBvbiB0aGUgcmFuZ2UgMCB0byAxLgogICAgICAgICAgICAgICAgbXkgJGxpbmVfY291bnQgPSAkc2VsZi0+Z3JvdXBfbGluZV9jb3VudCgpOwogICAgICAgICAgICAgICAgbXkgJG1pbl9saW5lcyAgPSAkcnZlcnRpY2FsX3RpZ2h0bmVzc19mbGFncy0+e192dF9taW5fbGluZXN9OwogICAgICAgICAgICAgICAgbXkgJG1heF9saW5lcyAgPSAkcnZlcnRpY2FsX3RpZ2h0bmVzc19mbGFncy0+e192dF9tYXhfbGluZXN9OwogICAgICAgICAgICAgICAgJG1pbl9saW5lcyA9IDAgaWYgKCAhJG1pbl9saW5lcyApOwogICAgICAgICAgICAgICAgJG1heF9saW5lcyA9IDEgaWYgKCAhJG1heF9saW5lcyApOwogICAgICAgICAgICAgICAgaWYgKCAgICggJGxpbmVfY291bnQgPj0gJG1pbl9saW5lcyApCiAgICAgICAgICAgICAgICAgICAgJiYgKCAkbGluZV9jb3VudCA8PSAkbWF4X2xpbmVzICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRydmVydGljYWxfdGlnaHRuZXNzX2ZsYWdzLT57X3Z0X3ZhbGlkX2ZsYWd9IHx8PSAxOwogICAgICAgICAgICAgICAgICAgIHNldF9jYWNoZWRfbGluZV92YWxpZCgxKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBkbyBub3Qgam9pbiBhbiBvcGVuaW5nIGJsb2NrIGJyYWNlICh0eXBlIDMsIHNlZSBWVEZMQUdTKQogICAgICAgICMgd2l0aCBhbiB1bmJhbGFuY2VkIGxpbmUgdW5sZXNzIHJlcXVlc3RlZCB3aXRoIGEgZmxhZyB2YWx1ZSBvZiAyCiAgICAgICAgaWYgKCAgICRjYWNoZWRfbGluZV90eXBlID09IDMKICAgICAgICAgICAgJiYgISRzZWxmLT5ncm91cF9saW5lX2NvdW50KCkKICAgICAgICAgICAgJiYgJGNhY2hlZF9saW5lX29wZW5pbmdfZmxhZyA8IDIKICAgICAgICAgICAgJiYgISRpc19iYWxhbmNlZF9saW5lICkKICAgICAgICB7CiAgICAgICAgICAgIHNldF9jYWNoZWRfbGluZV92YWxpZCgwKTsKICAgICAgICB9CiAgICB9CgogICAgIyBzaG91bGRuJ3QgaGFwcGVuOgogICAgaWYgKCAkbGV2ZWwgPCAwICkgeyAkbGV2ZWwgPSAwIH0KCiAgICAjIGRvIG5vdCBhbGlnbiBjb2RlIGFjcm9zcyBpbmRlbnRhdGlvbiBsZXZlbCBjaGFuZ2VzCiAgICAjIG9yIGNoYW5nZXMgaW4gdGhlIG1heGltdW0gbGluZSBsZW5ndGgKICAgICMgb3IgaWYgdmVydGljYWwgYWxpZ25tZW50IGlzIHR1cm5lZCBvZmYKICAgIGlmICgKICAgICAgICAkbGV2ZWwgIT0gJGdyb3VwX2xldmVsCiAgICAgICAgfHwgKCAgICRncm91cF9tYXhpbXVtX2xpbmVfbGVuZ3RoCiAgICAgICAgICAgICYmICRtYXhpbXVtX2xpbmVfbGVuZ3RoICE9ICRncm91cF9tYXhpbXVtX2xpbmVfbGVuZ3RoICkKICAgICAgICB8fCAkaXNfb3V0ZGVudGVkCiAgICAgICAgfHwgKCAkaXNfYmxvY2tfY29tbWVudCAmJiAhJHJPcHRzX3ZhbGlnbl9ibG9ja19jb21tZW50cyApCiAgICAgICAgfHwgKCAgICEkaXNfYmxvY2tfY29tbWVudAogICAgICAgICAgICAmJiAhJHJPcHRzX3ZhbGlnbl9zaWRlX2NvbW1lbnRzCiAgICAgICAgICAgICYmICEkck9wdHNfdmFsaWduX2NvZGUgKQogICAgICApCiAgICB7CgogICAgICAgICRzZWxmLT5fZmx1c2hfZ3JvdXBfbGluZXMoICRsZXZlbCAtICRncm91cF9sZXZlbCApCiAgICAgICAgICBpZiAoIEB7ICRzZWxmLT5bX3Jncm91cF9saW5lc19dIH0gKTsKCiAgICAgICAgJGdyb3VwX2xldmVsICAgICAgICAgICAgICAgICAgICAgICAgID0gJGxldmVsOwogICAgICAgICRzZWxmLT5bX2dyb3VwX2xldmVsX10gICAgICAgICAgICAgICA9ICRncm91cF9sZXZlbDsKICAgICAgICAkc2VsZi0+W19ncm91cF9tYXhpbXVtX2xpbmVfbGVuZ3RoX10gPSAkbWF4aW11bV9saW5lX2xlbmd0aDsKCiAgICAgICAgIyBVcGRhdGUgbGVhZGluZyBzcGFjZXMgYWZ0ZXIgdGhlIGFib3ZlIGZsdXNoIGJlY2F1c2UgdGhlIGxlYWRpbmcgc3BhY2UKICAgICAgICAjIGNvdW50IG1heSBoYXZlIGJlZW4gY2hhbmdlZCBpZiB0aGUgLWljcCBmbGFnIGlzIGluIGVmZmVjdAogICAgICAgICRsZWFkaW5nX3NwYWNlX2NvdW50ID0KICAgICAgICAgIHJlZigkaW5kZW50YXRpb24pID8gJGluZGVudGF0aW9uLT5nZXRfc3BhY2VzKCkgOiAkaW5kZW50YXRpb247CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBDb2xsZWN0IG91dGRlbnRhYmxlIGJsb2NrIENPTU1FTlRTCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBpZiAoICRzZWxmLT5bX2dyb3VwX3R5cGVfXSBlcSAnQ09NTUVOVCcgKSB7CiAgICAgICAgaWYgKCAgICRpc19ibG9ja19jb21tZW50CiAgICAgICAgICAgICYmICRvdXRkZW50X2xvbmdfbGluZXMKICAgICAgICAgICAgJiYgJGxlYWRpbmdfc3BhY2VfY291bnQgPT0gJHNlbGYtPltfY29tbWVudF9sZWFkaW5nX3NwYWNlX2NvdW50X10gKQogICAgICAgIHsKCiAgICAgICAgICAgICMgTm90ZSB0aGF0IGZvciBhIGNvbW1lbnQgZ3JvdXAgd2UgYXJlIG5vdCBzdG9yaW5nIGEgbGluZQogICAgICAgICAgICAjIGJ1dCByYXRoZXIganVzdCB0aGUgdGV4dCBhbmQgaXRzIGxlbmd0aC4KICAgICAgICAgICAgcHVzaCBAeyAkc2VsZi0+W19yZ3JvdXBfbGluZXNfXSB9LAogICAgICAgICAgICAgIFsgJHJmaWVsZHMtPlswXSwgJHJmaWVsZF9sZW5ndGhzLT5bMF0sICRLZW5kIF07CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRzZWxmLT5fZmx1c2hfZ3JvdXBfbGluZXMoKQogICAgICAgICAgICAgIGlmICggQHsgJHNlbGYtPltfcmdyb3VwX2xpbmVzX10gfSApOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkcmdyb3VwX2xpbmVzID0gJHNlbGYtPltfcmdyb3VwX2xpbmVzX107CiAgICBpZiAoICRicmVha19hbGlnbm1lbnRfYmVmb3JlICYmIEB7JHJncm91cF9saW5lc30gKSB7CiAgICAgICAgJHJncm91cF9saW5lcy0+Wy0xXS0+eydlbmRfZ3JvdXAnfSA9IDE7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBhZGQgZHVtbXkgZmllbGRzIGZvciB0ZXJtaW5hbCB0ZXJuYXJ5CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBteSAkal90ZXJtaW5hbF9tYXRjaDsKCiAgICBpZiAoICRpc190ZXJtaW5hbF90ZXJuYXJ5ICYmIEB7JHJncm91cF9saW5lc30gKSB7CiAgICAgICAgJGpfdGVybWluYWxfbWF0Y2ggPSBmaXhfdGVybWluYWxfdGVybmFyeSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgb2xkX2xpbmUgICAgICAgPT4gJHJncm91cF9saW5lcy0+Wy0xXSwKICAgICAgICAgICAgICAgIHJmaWVsZHMgICAgICAgID0+ICRyZmllbGRzLAogICAgICAgICAgICAgICAgcnRva2VucyAgICAgICAgPT4gJHJ0b2tlbnMsCiAgICAgICAgICAgICAgICBycGF0dGVybnMgICAgICA9PiAkcnBhdHRlcm5zLAogICAgICAgICAgICAgICAgcmZpZWxkX2xlbmd0aHMgPT4gJHJmaWVsZF9sZW5ndGhzLAogICAgICAgICAgICAgICAgZ3JvdXBfbGV2ZWwgICAgPT4gJGdyb3VwX2xldmVsLAogICAgICAgICAgICB9CiAgICAgICAgKTsKICAgICAgICAkam1heCA9IEB7JHJmaWVsZHN9IC0gMTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIGFkZCBkdW1teSBmaWVsZHMgZm9yIGVsc2Ugc3RhdGVtZW50CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgIyBOb3RlIHRoZSB0cmFpbGluZyBzcGFjZSBhZnRlciAnZWxzZScgaGVyZS4gSWYgdGhlcmUgd2VyZSBubyBzcGFjZSBiZXR3ZWVuCiAgICAjIHRoZSBlbHNlIGFuZCB0aGUgbmV4dCAneycgdGhlbiB3ZSB3b3VsZCBub3QgYmUgYWJsZSB0byBkbyB2ZXJ0aWNhbAogICAgIyBhbGlnbm1lbnQgb2YgdGhlICd7Jy4KICAgIGlmICggICAkcmZpZWxkcy0+WzBdIGVxICdlbHNlICcKICAgICAgICAmJiBAeyRyZ3JvdXBfbGluZXN9CiAgICAgICAgJiYgJGlzX2JhbGFuY2VkX2xpbmUgKQogICAgewogICAgICAgICRqX3Rlcm1pbmFsX21hdGNoID0gZml4X3Rlcm1pbmFsX2Vsc2UoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG9sZF9saW5lICAgICAgID0+ICRyZ3JvdXBfbGluZXMtPlstMV0sCiAgICAgICAgICAgICAgICByZmllbGRzICAgICAgICA9PiAkcmZpZWxkcywKICAgICAgICAgICAgICAgIHJ0b2tlbnMgICAgICAgID0+ICRydG9rZW5zLAogICAgICAgICAgICAgICAgcnBhdHRlcm5zICAgICAgPT4gJHJwYXR0ZXJucywKICAgICAgICAgICAgICAgIHJmaWVsZF9sZW5ndGhzID0+ICRyZmllbGRfbGVuZ3RocywKICAgICAgICAgICAgfQogICAgICAgICk7CiAgICAgICAgJGptYXggPSBAeyRyZmllbGRzfSAtIDE7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBIYW5kbGUgc2ltcGxlIGxpbmUgb2YgY29kZSB3aXRoIG5vIGZpZWxkcyB0byBtYXRjaC4KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGlmICggJGptYXggPD0gMCApIHsKICAgICAgICAkc2VsZi0+W196ZXJvX2NvdW50X10rKzsKCiAgICAgICAgIyBWU04gUEFUQ0ggZm9yIGEgc2luZ2xlIG51bWJlciwgcGFydCAxLgogICAgICAgIG15ICRpc19udW1lcmljID0KICAgICAgICAgICRyT3B0c192YWxpZ25fc2lnbmVkX251bWJlcnMgJiYgJHJwYXR0ZXJucy0+WzBdIGVxICduLCc7CgogICAgICAgIGlmICggICAhJGlzX251bWVyaWMKICAgICAgICAgICAgJiYgQHskcmdyb3VwX2xpbmVzfQogICAgICAgICAgICAmJiAhZ2V0X3JlY292ZXJhYmxlX3NwYWNlcyggJHJncm91cF9saW5lcy0+WzBdLT57J2luZGVudGF0aW9uJ30gKSApCiAgICAgICAgewoKICAgICAgICAgICAgIyBmbHVzaCB0aGUgY3VycmVudCBncm91cCBpZiBpdCBoYXMgc29tZSBhbGlnbmVkIGNvbHVtbnMuLgogICAgICAgICAgICAjIG9yIHdlIGhhdmVuJ3Qgc2VlbiBhIGNvbW1lbnQgbGF0ZWx5CiAgICAgICAgICAgIGlmICggICAkcmdyb3VwX2xpbmVzLT5bMF0tPnsnam1heCd9ID4gMQogICAgICAgICAgICAgICAgfHwgJHNlbGYtPltfemVyb19jb3VudF9dID4gMyApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRzZWxmLT5fZmx1c2hfZ3JvdXBfbGluZXMoKQogICAgICAgICAgICAgICAgICBpZiAoIEB7ICRzZWxmLT5bX3Jncm91cF9saW5lc19dIH0gKTsKCiAgICAgICAgICAgICAgICAjIFVwZGF0ZSAnJHJncm91cF9saW5lcycgLSBpdCB3aWxsIGJlY29tZSBhIHJlZiB0byBlbXB0eSBhcnJheS4KICAgICAgICAgICAgICAgICMgVGhpcyBhbGxvd3MgYXZvaWRpbmcgYSBjYWxsIHRvIGdldF9ncm91cF9saW5lX2NvdW50IGJlbG93LgogICAgICAgICAgICAgICAgJHJncm91cF9saW5lcyA9ICRzZWxmLT5bX3Jncm91cF9saW5lc19dOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHN0YXJ0IG5ldyBDT01NRU5UIGdyb3VwIGlmIHRoaXMgY29tbWVudCBtYXkgYmUgb3V0ZGVudGVkCiAgICAgICAgaWYgKCAgICRpc19ibG9ja19jb21tZW50CiAgICAgICAgICAgICYmICRvdXRkZW50X2xvbmdfbGluZXMKICAgICAgICAgICAgJiYgIUB7JHJncm91cF9saW5lc30gKQogICAgICAgIHsKICAgICAgICAgICAgJHNlbGYtPltfZ3JvdXBfdHlwZV9dICAgICAgICAgICAgICAgICAgPSAnQ09NTUVOVCc7CiAgICAgICAgICAgICRzZWxmLT5bX2NvbW1lbnRfbGVhZGluZ19zcGFjZV9jb3VudF9dID0gJGxlYWRpbmdfc3BhY2VfY291bnQ7CiAgICAgICAgICAgICRzZWxmLT5bX2dyb3VwX21heGltdW1fbGluZV9sZW5ndGhfXSAgID0gJG1heGltdW1fbGluZV9sZW5ndGg7CiAgICAgICAgICAgIHB1c2ggQHskcmdyb3VwX2xpbmVzfSwKICAgICAgICAgICAgICBbICRyZmllbGRzLT5bMF0sICRyZmllbGRfbGVuZ3Rocy0+WzBdLCAkS2VuZCBdOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGp1c3Qgd3JpdGUgdGhpcyBsaW5lIGRpcmVjdGx5IGlmIG5vIGN1cnJlbnQgZ3JvdXAsIG5vIHNpZGUgY29tbWVudCwKICAgICAgICAjIGFuZCBubyBzcGFjZSByZWNvdmVyeSBpcyBuZWVkZWQsCiAgICAgICAgIyBhbmQgbm90IG51bWVyaWMgLSBWU04gUEFUQ0ggZm9yIGEgc2luZ2xlIG51bWJlciwgcGFydCA0LgogICAgICAgIGlmICggICAhQHskcmdyb3VwX2xpbmVzfQogICAgICAgICAgICAmJiAhJGlzX251bWVyaWMKICAgICAgICAgICAgJiYgIWdldF9yZWNvdmVyYWJsZV9zcGFjZXMoJGluZGVudGF0aW9uKSApCiAgICAgICAgewoKICAgICAgICAgICAgJHNlbGYtPnZhbGlnbl9vdXRwdXRfc3RlcF9CKAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGxlYWRpbmdfc3BhY2VfY291bnQgICAgICAgPT4gJGxlYWRpbmdfc3BhY2VfY291bnQsCiAgICAgICAgICAgICAgICAgICAgbGluZSAgICAgICAgICAgICAgICAgICAgICA9PiAkcmZpZWxkcy0+WzBdLAogICAgICAgICAgICAgICAgICAgIGxpbmVfbGVuZ3RoICAgICAgICAgICAgICAgPT4gJHJmaWVsZF9sZW5ndGhzLT5bMF0sCiAgICAgICAgICAgICAgICAgICAgc2lkZV9jb21tZW50X2xlbmd0aCAgICAgICA9PiAwLAogICAgICAgICAgICAgICAgICAgIG91dGRlbnRfbG9uZ19saW5lcyAgICAgICAgPT4gJG91dGRlbnRfbG9uZ19saW5lcywKICAgICAgICAgICAgICAgICAgICBydmVydGljYWxfdGlnaHRuZXNzX2ZsYWdzID0+ICRydmVydGljYWxfdGlnaHRuZXNzX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgIGxldmVsICAgICAgICAgICAgICAgICAgICAgPT4gJGxldmVsLAogICAgICAgICAgICAgICAgICAgIGxldmVsX2VuZCAgICAgICAgICAgICAgICAgPT4gJGxldmVsX2VuZCwKICAgICAgICAgICAgICAgICAgICBLZW5kICAgICAgICAgICAgICAgICAgICAgID0+ICRLZW5kLAogICAgICAgICAgICAgICAgICAgIG1heGltdW1fbGluZV9sZW5ndGggICAgICAgPT4gJG1heGltdW1fbGluZV9sZW5ndGgsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkc2VsZi0+W196ZXJvX2NvdW50X10gPSAwOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgSXQgc2ltcGxpZmllcyB0aGluZ3MgdG8gY3JlYXRlIGEgemVybyBsZW5ndGggc2lkZSBjb21tZW50CiAgICAjIGlmIG5vbmUgZXhpc3RzLgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgaWYgKCAoICRqbWF4ID09IDAgKSB8fCAoICRydG9rZW5zLT5bICRqbWF4IC0gMSBdIG5lICcjJyApICkgewogICAgICAgICRqbWF4ICs9IDE7CiAgICAgICAgJHJ0b2tlbnMtPlsgJGptYXggLSAxIF0gID0gJyMnOwogICAgICAgICRyZmllbGRzLT5bJGptYXhdICAgICAgICA9IEVNUFRZX1NUUklORzsKICAgICAgICAkcmZpZWxkX2xlbmd0aHMtPlskam1heF0gPSAwOwogICAgICAgICRycGF0dGVybnMtPlskam1heF0gICAgICA9ICcjJzsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIGNyZWF0ZSBhbiBvYmplY3QgdG8gaG9sZCB0aGlzIGxpbmUKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAjIFRoZSBoYXNoIGtleXMgYmVsb3cgbXVzdCBtYXRjaCB0aGUgbGlzdCBvZiBrZXlzIGluICV2YWxpZF9MSU5FX2tleXMuCiAgICAjIFZhbHVlcyBpbiB0aGlzIGhhc2ggYXJlIGFjY2Vzc2VkIGRpcmVjdGx5LCBleGNlcHQgZm9yICdyYWxpZ25tZW50cycsCiAgICAjIHJhdGhlciB0aGFuIHdpdGggZ2V0L3NldCBjYWxscyBmb3IgZWZmaWNpZW5jeS4KICAgIG15ICRuZXdfbGluZSA9IFBlcmw6OlRpZHk6OlZlcnRpY2FsQWxpZ25lcjo6TGluZS0+bmV3KAogICAgICAgIHsKICAgICAgICAgICAgam1heCAgICAgICAgICAgICAgICAgICAgICA9PiAkam1heCwKICAgICAgICAgICAgcnRva2VucyAgICAgICAgICAgICAgICAgICA9PiAkcnRva2VucywKICAgICAgICAgICAgcmZpZWxkcyAgICAgICAgICAgICAgICAgICA9PiAkcmZpZWxkcywKICAgICAgICAgICAgcnBhdHRlcm5zICAgICAgICAgICAgICAgICA9PiAkcnBhdHRlcm5zLAogICAgICAgICAgICByZmllbGRfbGVuZ3RocyAgICAgICAgICAgID0+ICRyZmllbGRfbGVuZ3RocywKICAgICAgICAgICAgaW5kZW50YXRpb24gICAgICAgICAgICAgICA9PiAkaW5kZW50YXRpb24sCiAgICAgICAgICAgIGxlYWRpbmdfc3BhY2VfY291bnQgICAgICAgPT4gJGxlYWRpbmdfc3BhY2VfY291bnQsCiAgICAgICAgICAgIG91dGRlbnRfbG9uZ19saW5lcyAgICAgICAgPT4gJG91dGRlbnRfbG9uZ19saW5lcywKICAgICAgICAgICAgbGlzdF9zZXFubyAgICAgICAgICAgICAgICA9PiAkbGlzdF9zZXFubywKICAgICAgICAgICAgbGlzdF90eXBlICAgICAgICAgICAgICAgICA9PiBFTVBUWV9TVFJJTkcsCiAgICAgICAgICAgIGlzX2hhbmdpbmdfc2lkZV9jb21tZW50ICAgPT4gJGlzX2hhbmdpbmdfc2lkZV9jb21tZW50LAogICAgICAgICAgICBydmVydGljYWxfdGlnaHRuZXNzX2ZsYWdzID0+ICRydmVydGljYWxfdGlnaHRuZXNzX2ZsYWdzLAogICAgICAgICAgICBpc190ZXJtaW5hbF90ZXJuYXJ5ICAgICAgID0+ICRpc190ZXJtaW5hbF90ZXJuYXJ5LAogICAgICAgICAgICBqX3Rlcm1pbmFsX21hdGNoICAgICAgICAgID0+ICRqX3Rlcm1pbmFsX21hdGNoLAogICAgICAgICAgICBlbmRfZ3JvdXAgICAgICAgICAgICAgICAgID0+ICRicmVha19hbGlnbm1lbnRfYWZ0ZXIsCiAgICAgICAgICAgIEtlbmQgICAgICAgICAgICAgICAgICAgICAgPT4gJEtlbmQsCiAgICAgICAgICAgIGNpX2xldmVsICAgICAgICAgICAgICAgICAgPT4gJGNpX2xldmVsLAogICAgICAgICAgICBsZXZlbCAgICAgICAgICAgICAgICAgICAgID0+ICRsZXZlbCwKICAgICAgICAgICAgbGV2ZWxfZW5kICAgICAgICAgICAgICAgICA9PiAkbGV2ZWxfZW5kLAogICAgICAgICAgICBpbWF4X3BhaXIgICAgICAgICAgICAgICAgID0+IC0xLAogICAgICAgICAgICBtYXhpbXVtX2xpbmVfbGVuZ3RoICAgICAgID0+ICRtYXhpbXVtX2xpbmVfbGVuZ3RoLAoKICAgICAgICAgICAgcmFsaWdubWVudHMgPT4gW10sCiAgICAgICAgfQogICAgKTsKCiAgICBERVZFTF9NT0RFCiAgICAgICYmIGNoZWNrX2tleXMoICRuZXdfbGluZSwgXCV2YWxpZF9MSU5FX2tleXMsCiAgICAgICAgIkNoZWNraW5nIGxpbmUga2V5cyBhdCBsaW5lIGRlZmluaXRpb24iLCAxICk7CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBEZWNpZGUgaWYgdGhpcyBpcyBhIHNpbXBsZSBsaXN0IG9mIGl0ZW1zLgogICAgIyBXZSB1c2UgdGhpcyB0byBiZSBsZXNzIHJlc3RyaWN0aXZlIGluIGRlY2lkaW5nIHdoYXQgdG8gYWxpZ24uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBkZWNpZGVfaWZfbGlzdCgkbmV3X2xpbmUpIGlmICgkbGlzdF9zZXFubyk7CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBBcHBlbmQgdGhpcyBsaW5lIHRvIHRoZSBjdXJyZW50IGdyb3VwIChvciBzdGFydCBuZXcgZ3JvdXApCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgcHVzaCBAeyAkc2VsZi0+W19yZ3JvdXBfbGluZXNfXSB9LCAkbmV3X2xpbmU7CiAgICAkc2VsZi0+W19ncm91cF9tYXhpbXVtX2xpbmVfbGVuZ3RoX10gPSAkbWF4aW11bV9saW5lX2xlbmd0aDsKCiAgICAjIG91dHB1dCB0aGlzIGdyb3VwIGlmIGl0IGVuZHMgaW4gYSB0ZXJtaW5hbCBlbHNlIG9yIHRlcm5hcnkgbGluZQogICAgaWYgKCBkZWZpbmVkKCRqX3Rlcm1pbmFsX21hdGNoKSApIHsKICAgICAgICAkc2VsZi0+X2ZsdXNoX2dyb3VwX2xpbmVzKCkKICAgICAgICAgIGlmICggQHsgJHNlbGYtPltfcmdyb3VwX2xpbmVzX10gfSApOwogICAgfQoKICAgICMgRm9yY2UgYnJlYWsgYWZ0ZXIganVtcCB0byBsb3dlciBsZXZlbAogICAgZWxzaWYgKCRsZXZlbF9lbmQgPCAkbGV2ZWwKICAgICAgICB8fCAkaXNfY2xvc2luZ190b2tlbnsgc3Vic3RyKCAkcmZpZWxkcy0+WzBdLCAwLCAxICkgfSApCiAgICB7CiAgICAgICAgJHNlbGYtPl9mbHVzaF9ncm91cF9saW5lcygtMSkKICAgICAgICAgIGlmICggQHsgJHNlbGYtPltfcmdyb3VwX2xpbmVzX10gfSApOwogICAgfQoKICAgIGVsc2UgewogICAgICAgICMjb2s6IG5vIG91dHB1dCBuZWVkZWQKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFNvbWUgb2xkIGRlYnVnZ2luZyBzdHVmZgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgREVCVUdfVkFMSUdOICYmIGRvIHsKICAgICAgICBwcmludCB7KlNURE9VVH0gImV4aXRpbmcgdmFsaWduX2lucHV0IGZpZWxkczoiOwogICAgICAgIGR1bXBfYXJyYXkoIEB7JHJmaWVsZHN9ICk7CiAgICAgICAgcHJpbnQgeypTVERPVVR9ICJleGl0aW5nIHZhbGlnbl9pbnB1dCB0b2tlbnM6IjsKICAgICAgICBkdW1wX2FycmF5KCBAeyRydG9rZW5zfSApOwogICAgICAgIHByaW50IHsqU1RET1VUfSAiZXhpdGluZyB2YWxpZ25faW5wdXQgcGF0dGVybnM6IjsKICAgICAgICBkdW1wX2FycmF5KCBAeyRycGF0dGVybnN9ICk7CiAgICB9OwoKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHZhbGlnbl9pbnB1dAoKc3ViIGpvaW5faGFuZ2luZ19jb21tZW50IHsKCiAgICBteSAoICRuZXdfbGluZSwgJG9sZF9saW5lICkgPSBAXzsKCiAgICAjIEFkZCBkdW1teSBmaWVsZHMgdG8gYSBoYW5naW5nIHNpZGUgY29tbWVudCB0byBtYWtlIGl0IGxvb2sKICAgICMgbGlrZSB0aGUgZmlyc3QgbGluZSBpbiBpdHMgcG90ZW50aWFsIGdyb3VwLiAgVGhpcyBzaW1wbGlmaWVzCiAgICAjIHRoZSBjb2RpbmcuCgogICAgIyBHaXZlbjoKICAgICMgICAkbmV3X2xpbmUgPSByZWYgdG8gaGFzaCBvZiB0aGUgbGluZSB0byBiZSBwb3NzaWJseSBjaGFuZ2VkCiAgICAjICAgJG9sZF9saW5lID0gcmVmIHRvIGhhc2ggb2YgdGhlIHByZXZpb3VzIHJlZmVyZW5jZSBsaW5lCiAgICAjIFJldHVybjoKICAgICMgICB0cnVlIGlmIG5ldyBsaW5lIG1vZGlmaWVkCiAgICAjICAgZmFsc2Ugb3RoZXJ3aXNlCgogICAgbXkgJGptYXggPSAkbmV3X2xpbmUtPnsnam1heCd9OwoKICAgICMgbXVzdCBiZSAyIGZpZWxkcwogICAgcmV0dXJuIDAgdW5sZXNzICggJGptYXggPT0gMSApOwogICAgbXkgJHJ0b2tlbnMgPSAkbmV3X2xpbmUtPnsncnRva2Vucyd9OwoKICAgICMgdGhlIHNlY29uZCBmaWVsZCBtdXN0IGJlIGEgY29tbWVudAogICAgcmV0dXJuIDAgdW5sZXNzICggJHJ0b2tlbnMtPlswXSBlcSAnIycgKTsKICAgIG15ICRyZmllbGRzID0gJG5ld19saW5lLT57J3JmaWVsZHMnfTsKCiAgICAjIHRoZSBmaXJzdCBmaWVsZCBtdXN0IGJlIGVtcHR5CiAgICByZXR1cm4gMCBpZiAoICRyZmllbGRzLT5bMF0gIX4gL15ccyokLyApOwoKICAgICMgdGhlIGN1cnJlbnQgbGluZSBtdXN0IGhhdmUgZmV3ZXIgZmllbGRzCiAgICBteSAkbWF4aW11bV9maWVsZF9pbmRleCA9ICRvbGRfbGluZS0+eydqbWF4J307CiAgICByZXR1cm4gMAogICAgICBpZiAoICRtYXhpbXVtX2ZpZWxkX2luZGV4IDw9ICRqbWF4ICk7CgogICAgIyBsb29rcyBvay4uCiAgICBteSAkcnBhdHRlcm5zICAgICAgPSAkbmV3X2xpbmUtPnsncnBhdHRlcm5zJ307CiAgICBteSAkcmZpZWxkX2xlbmd0aHMgPSAkbmV3X2xpbmUtPnsncmZpZWxkX2xlbmd0aHMnfTsKCiAgICAkbmV3X2xpbmUtPnsnaXNfaGFuZ2luZ19zaWRlX2NvbW1lbnQnfSA9IDE7CgogICAgJGptYXggICAgICAgICAgICAgICAgICAgICA9ICRtYXhpbXVtX2ZpZWxkX2luZGV4OwogICAgJG5ld19saW5lLT57J2ptYXgnfSAgICAgICA9ICRqbWF4OwogICAgJHJmaWVsZHMtPlskam1heF0gICAgICAgICA9ICRyZmllbGRzLT5bMV07CiAgICAkcmZpZWxkX2xlbmd0aHMtPlskam1heF0gID0gJHJmaWVsZF9sZW5ndGhzLT5bMV07CiAgICAkcnRva2Vucy0+WyAkam1heCAtIDEgXSAgID0gJHJ0b2tlbnMtPlswXTsKICAgICRycGF0dGVybnMtPlsgJGptYXggLSAxIF0gPSAkcnBhdHRlcm5zLT5bMF07CgogICAgZm9yZWFjaCBteSAkaiAoIDEgLi4gJGptYXggLSAxICkgewogICAgICAgICRyZmllbGRzLT5bJGpdICAgICAgICAgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgJHJmaWVsZF9sZW5ndGhzLT5bJGpdICA9IDA7CiAgICAgICAgJHJ0b2tlbnMtPlsgJGogLSAxIF0gICA9IEVNUFRZX1NUUklORzsKICAgICAgICAkcnBhdHRlcm5zLT5bICRqIC0gMSBdID0gRU1QVFlfU1RSSU5HOwogICAgfQogICAgcmV0dXJuIDE7Cn0gIyMgZW5kIHN1YiBqb2luX2hhbmdpbmdfY29tbWVudAoKc3ViIGRlY2lkZV9pZl9saXN0IHsKCiAgICBteSAkbGluZSA9IHNoaWZ0OwoKICAgICMgR2l2ZW46CiAgICAjICAgJGxpbmUgPSByZWYgdG8gaGFzaCBvZiB2YWx1ZXMgZm9yIGEgbGluZQogICAgIyBUYXNrOgogICAgIyAgIFNldCAnbGlzdF90eXBlJyBwcm9wZXJ0eQoKICAgICMgQSBsaXN0IHdpbGwgYmUgdGFrZW4gdG8gYmUgYSBsaW5lIHdpdGggYSBmb3JjZWQgYnJlYWsgaW4gd2hpY2ggYWxsCiAgICAjIG9mIHRoZSBmaWVsZCBzZXBhcmF0b3JzIGFyZSBjb21tYXMgb3IgY29tbWEtYXJyb3dzIChleGNlcHQgZm9yIHRoZQogICAgIyB0cmFpbGluZyAjKQoKICAgIG15ICRydG9rZW5zICAgID0gJGxpbmUtPnsncnRva2Vucyd9OwogICAgbXkgJHRlc3RfdG9rZW4gPSAkcnRva2Vucy0+WzBdOwogICAgbXkgKCAkcmF3X3RvaywgJGxldiwgJHRhZywgJHRva19jb3VudCApID0KICAgICAgZGVjb2RlX2FsaWdubWVudF90b2tlbigkdGVzdF90b2tlbik7CiAgICBpZiAoICRpc19jb21tYV90b2tlbnskcmF3X3Rva30gKSB7CiAgICAgICAgbXkgJGxpc3RfdHlwZSA9ICR0ZXN0X3Rva2VuOwogICAgICAgIG15ICRqbWF4ICAgICAgPSAkbGluZS0+eydqbWF4J307CgogICAgICAgIGZvcmVhY2ggKCAxIC4uICRqbWF4IC0gMiApIHsKICAgICAgICAgICAgKCAkcmF3X3RvaywgJGxldiwgJHRhZywgJHRva19jb3VudCApID0KICAgICAgICAgICAgICBkZWNvZGVfYWxpZ25tZW50X3Rva2VuKCAkcnRva2Vucy0+WyRfXSApOwogICAgICAgICAgICBpZiAoICEkaXNfY29tbWFfdG9rZW57JHJhd190b2t9ICkgewogICAgICAgICAgICAgICAgJGxpc3RfdHlwZSA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJGxpbmUtPnsnbGlzdF90eXBlJ30gPSAkbGlzdF90eXBlOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgZGVjaWRlX2lmX2xpc3QKCnN1YiBmaXhfdGVybWluYWxfdGVybmFyeSB7CgogICAgIyBBZGQgZW1wdHkgZmllbGRzIGFzIG5lY2Vzc2FyeSB0byBhbGlnbiBhIHRlcm5hcnkgdGVybQogICAgIyBsaWtlIHRoaXM6CiAgICAjCiAgICAjICBteSAkbGVhcHllYXIgPQogICAgIyAgICAgICR5ZWFyICUgNCAgID8gMAogICAgIyAgICA6ICR5ZWFyICUgMTAwID8gMQogICAgIyAgICA6ICR5ZWFyICUgNDAwID8gMAogICAgIyAgICA6ICAgICAgICAgICAgICAgMTsKICAgICMKICAgICMgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHRlcm1pbmFsIHF1ZXN0aW9uIHRva2VuLCBpZiBhbnkKCiAgICBteSAoJHJjYWxsX2hhc2gpID0gQF87CgogICAgbXkgJG9sZF9saW5lICAgICAgID0gJHJjYWxsX2hhc2gtPntvbGRfbGluZX07CiAgICBteSAkcmZpZWxkcyAgICAgICAgPSAkcmNhbGxfaGFzaC0+e3JmaWVsZHN9OwogICAgbXkgJHJ0b2tlbnMgICAgICAgID0gJHJjYWxsX2hhc2gtPntydG9rZW5zfTsKICAgIG15ICRycGF0dGVybnMgICAgICA9ICRyY2FsbF9oYXNoLT57cnBhdHRlcm5zfTsKICAgIG15ICRyZmllbGRfbGVuZ3RocyA9ICRyY2FsbF9oYXNoLT57cmZpZWxkX2xlbmd0aHN9OwogICAgbXkgJGdyb3VwX2xldmVsICAgID0gJHJjYWxsX2hhc2gtPntncm91cF9sZXZlbH07CgogICAgcmV0dXJuIGlmICggISRvbGRfbGluZSApOwogICAgdXNlIGNvbnN0YW50IEVYUExBSU5fVEVSTkFSWSA9PiAwOwoKICAgIGlmICgldmFsaWduX2NvbnRyb2xfaGFzaCkgewogICAgICAgIG15ICRhbGlnbl9vayA9ICR2YWxpZ25fY29udHJvbF9oYXNoeyc/J307CiAgICAgICAgJGFsaWduX29rID0gJHZhbGlnbl9jb250cm9sX2RlZmF1bHQgdW5sZXNzIGRlZmluZWQoJGFsaWduX29rKTsKICAgICAgICByZXR1cm4gaWYgKCAhJGFsaWduX29rICk7CiAgICB9CgogICAgbXkgJGptYXggICAgICAgID0gQHskcmZpZWxkc30gLSAxOwogICAgbXkgJHJmaWVsZHNfb2xkID0gJG9sZF9saW5lLT57J3JmaWVsZHMnfTsKCiAgICBteSAkcnBhdHRlcm5zX29sZCAgICAgICA9ICRvbGRfbGluZS0+eydycGF0dGVybnMnfTsKICAgIG15ICRydG9rZW5zX29sZCAgICAgICAgID0gJG9sZF9saW5lLT57J3J0b2tlbnMnfTsKICAgIG15ICRtYXhpbXVtX2ZpZWxkX2luZGV4ID0gJG9sZF9saW5lLT57J2ptYXgnfTsKCiAgICAjIGxvb2sgZm9yIHRoZSBxdWVzdGlvbiBtYXJrIGFmdGVyIHRoZSA6CiAgICBteSAoJGpxdWVzdGlvbik7CiAgICBteSAkZGVwdGhfcXVlc3Rpb247CiAgICBteSAkcGFkICAgICAgICA9IEVNUFRZX1NUUklORzsKICAgIG15ICRwYWRfbGVuZ3RoID0gMDsKICAgIGZvcmVhY2ggbXkgJGogKCAwIC4uICRtYXhpbXVtX2ZpZWxkX2luZGV4IC0gMSApIHsKICAgICAgICBteSAkdG9rID0gJHJ0b2tlbnNfb2xkLT5bJGpdOwogICAgICAgIG15ICggJHJhd190b2ssICRsZXYsICR0YWdfdXUsICR0b2tfY291bnRfdXUgKSA9CiAgICAgICAgICBkZWNvZGVfYWxpZ25tZW50X3Rva2VuKCR0b2spOwogICAgICAgIGlmICggJHJhd190b2sgZXEgJz8nICkgewogICAgICAgICAgICAkZGVwdGhfcXVlc3Rpb24gPSAkbGV2OwoKICAgICAgICAgICAgIyBkZXB0aCBtdXN0IGJlIGNvcnJlY3QKICAgICAgICAgICAgbmV4dCBpZiAoICRkZXB0aF9xdWVzdGlvbiBuZSAkZ3JvdXBfbGV2ZWwgKTsKCiAgICAgICAgICAgICRqcXVlc3Rpb24gPSAkajsKICAgICAgICAgICAgaWYgKCAkcmZpZWxkc19vbGQtPlsgJGogKyAxIF0gPX4gL14oXD9ccyopLyApIHsKICAgICAgICAgICAgICAgICRwYWRfbGVuZ3RoID0gbGVuZ3RoKCQxKTsKICAgICAgICAgICAgICAgICRwYWQgICAgICAgID0gU1BBQ0UgeCAkcGFkX2xlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybjsgICAgIyBzaG91bGRuJ3QgaGFwcGVuCiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGFzdDsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gaWYgKCAhZGVmaW5lZCgkanF1ZXN0aW9uKSApOyAgICAjIHNob3VsZG4ndCBoYXBwZW4KCiAgICAjIE5vdyBzcGxpY2UgdGhlIHRva2VucyBhbmQgcGF0dGVybnMgb2YgdGhlIHByZXZpb3VzIGxpbmUKICAgICMgaW50byB0aGUgZWxzZSBsaW5lIHRvIGluc3VyZSBhIG1hdGNoLiAgQWRkIGVtcHR5IGZpZWxkcwogICAgIyBhcyBuZWNlc3NhcnkuCiAgICBteSAkamFkZCA9ICRqcXVlc3Rpb247CgogICAgIyBXb3JrIG9uIGNvcGllcyBvZiB0aGUgYWN0dWFsIGFycmF5cyBpbiBjYXNlIHdlIGhhdmUKICAgICMgdG8gcmV0dXJuIGR1ZSB0byBhbiBlcnJvcgogICAgbXkgQGZpZWxkcyAgICAgICAgPSBAeyRyZmllbGRzfTsKICAgIG15IEBwYXR0ZXJucyAgICAgID0gQHskcnBhdHRlcm5zfTsKICAgIG15IEB0b2tlbnMgICAgICAgID0gQHskcnRva2Vuc307CiAgICBteSBAZmllbGRfbGVuZ3RocyA9IEB7JHJmaWVsZF9sZW5ndGhzfTsKCiAgICBFWFBMQUlOX1RFUk5BUlkgJiYgZG8gewogICAgICAgIGxvY2FsICRMSVNUX1NFUEFSQVRPUiA9ICc+PCc7CiAgICAgICAgcHJpbnQgeypTVERPVVR9ICJDVVJSRU5UIEZJRUxEUz08QHskcmZpZWxkc19vbGR9PlxuIjsKICAgICAgICBwcmludCB7KlNURE9VVH0gIkNVUlJFTlQgVE9LRU5TPTxAeyRydG9rZW5zX29sZH0+XG4iOwogICAgICAgIHByaW50IHsqU1RET1VUfSAiQ1VSUkVOVCBQQVRURVJOUz08QHskcnBhdHRlcm5zX29sZH0+XG4iOwogICAgICAgIHByaW50IHsqU1RET1VUfSAiVU5NT0RJRklFRCBGSUVMRFM9PEB7JHJmaWVsZHN9PlxuIjsKICAgICAgICBwcmludCB7KlNURE9VVH0gIlVOTU9ESUZJRUQgVE9LRU5TPTxAeyRydG9rZW5zfT5cbiI7CiAgICAgICAgcHJpbnQgeypTVERPVVR9ICJVTk1PRElGSUVEIFBBVFRFUk5TPTxAeyRycGF0dGVybnN9PlxuIjsKICAgIH07CgogICAgIyBoYW5kbGUgY2FzZXMgb2YgbGVhZGluZyBjb2xvbiBvbiB0aGlzIGxpbmUKICAgIGlmICggJGZpZWxkc1swXSA9fiAvXig6XHMqKSguKikkLyApIHsKCiAgICAgICAgbXkgKCAkY29sb24sICR0aGVyZXN0ICkgPSAoICQxLCAkMiApOwoKICAgICAgICAjIEhhbmRsZSBzdWItY2FzZSBvZiBmaXJzdCBmaWVsZCB3aXRoIGxlYWRpbmcgY29sb24gcGx1cyBhZGRpdGlvbmFsIGNvZGUKICAgICAgICAjIFRoaXMgaXMgdGhlIHVzdWFsIHNpdHVhdGlvbiBhcyBhdCB0aGUgJzEnIGJlbG93OgogICAgICAgICMgIC4uLgogICAgICAgICMgIDogJHllYXIgJSA0MDAgPyAwCiAgICAgICAgIyAgOiAgICAgICAgICAgICAgIDE7CiAgICAgICAgaWYgKCR0aGVyZXN0KSB7CgogICAgICAgICAgICAjIFNwbGl0IHRoZSBmaXJzdCBmaWVsZCBhZnRlciB0aGUgbGVhZGluZyBjb2xvbiBhbmQgaW5zZXJ0IHBhZGRpbmcuCiAgICAgICAgICAgICMgTm90ZSB0aGF0IHRoaXMgcGFkZGluZyB3aWxsIHJlbWFpbiBldmVuIGlmIHRoZSB0ZXJtaW5hbCB2YWx1ZSBnb2VzCiAgICAgICAgICAgICMgb3V0IG9uIGEgc2VwYXJhdGUgbGluZS4gIFRoaXMgZG9lcyBub3Qgc2VlbSB0byBsb29rIHRvIGJhZCwgc28gbm8KICAgICAgICAgICAgIyBtZWNoYW5pc20gaGFzIGJlZW4gaW5jbHVkZWQgdG8gdW5kbyBpdC4KICAgICAgICAgICAgbXkgJGZpZWxkMV91dSAgICAgPSBzaGlmdCBAZmllbGRzOwogICAgICAgICAgICBteSAkZmllbGRfbGVuZ3RoMSA9IHNoaWZ0IEBmaWVsZF9sZW5ndGhzOwogICAgICAgICAgICBteSAkbGVuX2NvbG9uICAgICA9IGxlbmd0aCgkY29sb24pOwogICAgICAgICAgICB1bnNoaWZ0IEBmaWVsZHMsICggJGNvbG9uLCAkcGFkIC4gJHRoZXJlc3QgKTsKICAgICAgICAgICAgdW5zaGlmdCBAZmllbGRfbGVuZ3RocywKICAgICAgICAgICAgICAoICRsZW5fY29sb24sICRwYWRfbGVuZ3RoICsgJGZpZWxkX2xlbmd0aDEgLSAkbGVuX2NvbG9uICk7CgogICAgICAgICAgICAjIGNoYW5nZSB0aGUgbGVhZGluZyBwYXR0ZXJuIGZyb20gOiB0byA/CiAgICAgICAgICAgIHJldHVybiBpZiAoICRwYXR0ZXJuc1swXSAhfiBzL15cOi8/LyApOwoKICAgICAgICAgICAgIyBpbnN0YWxsIGxlYWRpbmcgdG9rZW5zIGFuZCBwYXR0ZXJucyBvZiBleGlzdGluZyBsaW5lCiAgICAgICAgICAgIHVuc2hpZnQoIEB0b2tlbnMsICAgQHskcnRva2Vuc19vbGR9WyAwIC4uICRqcXVlc3Rpb24gXSApOwogICAgICAgICAgICB1bnNoaWZ0KCBAcGF0dGVybnMsIEB7JHJwYXR0ZXJuc19vbGR9WyAwIC4uICRqcXVlc3Rpb24gXSApOwoKICAgICAgICAgICAgIyBpbnNlcnQgYXBwcm9wcmlhdGUgbnVtYmVyIG9mIGVtcHR5IGZpZWxkcwogICAgICAgICAgICBzcGxpY2UoIEBmaWVsZHMsICAgICAgICAxLCAwLCAoRU1QVFlfU1RSSU5HKSB4ICRqYWRkICkgaWYgJGphZGQ7CiAgICAgICAgICAgIHNwbGljZSggQGZpZWxkX2xlbmd0aHMsIDEsIDAsICgwKSB4ICRqYWRkICkgICAgICAgICAgICBpZiAkamFkZDsKICAgICAgICB9CgogICAgICAgICMgaGFuZGxlIHN1Yi1jYXNlIG9mIGZpcnN0IGZpZWxkIGp1c3QgZXF1YWwgdG8gbGVhZGluZyBjb2xvbi4KICAgICAgICAjIFRoaXMgY2FuIGhhcHBlbiBmb3IgZXhhbXBsZSBpbiB0aGUgZXhhbXBsZSBiZWxvdyB3aGVyZQogICAgICAgICMgdGhlIGxlYWRpbmcgJygnIHdvdWxkIGNyZWF0ZSBhIG5ldyBhbGlnbm1lbnQgdG9rZW4KICAgICAgICAjIDogKCAkbmFtZSA9fiAvW119XSQvICkgPyAoICRtbmFtZSA9ICRuYW1lICkKICAgICAgICAjIDogICAgICAgICAgICAgICAgICAgICAgICAoICRtbmFtZSA9ICRuYW1lIC4gJy0+JyApOwogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgcmV0dXJuIGlmICggJGptYXggPD0gMCB8fCAkdG9rZW5zWzBdIGVxICcjJyApOyAgICAjIHNob3VsZG4ndCBoYXBwZW4KCiAgICAgICAgICAgICMgcHJlcGVuZCBhIGxlYWRpbmcgPyBvbnRvIHRoZSBzZWNvbmQgcGF0dGVybgogICAgICAgICAgICAkcGF0dGVybnNbMV0gPSAiP2IiIC4gJHBhdHRlcm5zWzFdOwoKICAgICAgICAgICAgIyBwYWQgdGhlIHNlY29uZCBmaWVsZAogICAgICAgICAgICAkZmllbGRzWzFdICAgICAgICA9ICRwYWQgLiAkZmllbGRzWzFdOwogICAgICAgICAgICAkZmllbGRfbGVuZ3Roc1sxXSA9ICRwYWRfbGVuZ3RoICsgJGZpZWxkX2xlbmd0aHNbMV07CgogICAgICAgICAgICAjIGluc3RhbGwgbGVhZGluZyB0b2tlbnMgYW5kIHBhdHRlcm5zIG9mIGV4aXN0aW5nIGxpbmUsIHJlcGxhY2luZwogICAgICAgICAgICAjIGxlYWRpbmcgdG9rZW4gYW5kIGluc2VydGluZyBhcHByb3ByaWF0ZSBudW1iZXIgb2YgZW1wdHkgZmllbGRzCiAgICAgICAgICAgIHNwbGljZSggQHRva2VucywgICAwLCAxLCBAeyRydG9rZW5zX29sZH1bIDAgLi4gJGpxdWVzdGlvbiBdICk7CiAgICAgICAgICAgIHNwbGljZSggQHBhdHRlcm5zLCAxLCAwLCBAeyRycGF0dGVybnNfb2xkfVsgMSAuLiAkanF1ZXN0aW9uIF0gKTsKICAgICAgICAgICAgc3BsaWNlKCBAZmllbGRzLCAgICAgICAgMSwgMCwgKEVNUFRZX1NUUklORykgeCAkamFkZCApIGlmICRqYWRkOwogICAgICAgICAgICBzcGxpY2UoIEBmaWVsZF9sZW5ndGhzLCAxLCAwLCAoMCkgeCAkamFkZCApICAgICAgICAgICAgaWYgJGphZGQ7CiAgICAgICAgfQogICAgfQoKICAgICMgSGFuZGxlIGNhc2Ugb2Ygbm8gbGVhZGluZyBjb2xvbiBvbiB0aGlzIGxpbmUuICBUaGlzIHdpbGwKICAgICMgYmUgdGhlIGNhc2Ugd2hlbiAtd2JhPSc6JyBpcyB1c2VkLiAgRm9yIGV4YW1wbGUsCiAgICAjICAkeWVhciAlIDQwMCA/IDAgOgogICAgIyAgICAgICAgICAgICAgICAxOwogICAgZWxzZSB7CgogICAgICAgICMgaW5zdGFsbCBsZWFkaW5nIHRva2VucyBhbmQgcGF0dGVybnMgb2YgZXhpc3RpbmcgbGluZQogICAgICAgICRwYXR0ZXJuc1swXSA9ICc/JyAuICdiJyAuICRwYXR0ZXJuc1swXTsKICAgICAgICB1bnNoaWZ0KCBAdG9rZW5zLCAgIEB7JHJ0b2tlbnNfb2xkfVsgMCAuLiAkanF1ZXN0aW9uIF0gKTsKICAgICAgICB1bnNoaWZ0KCBAcGF0dGVybnMsIEB7JHJwYXR0ZXJuc19vbGR9WyAwIC4uICRqcXVlc3Rpb24gXSApOwoKICAgICAgICAjIGluc2VydCBhcHByb3ByaWF0ZSBudW1iZXIgb2YgZW1wdHkgZmllbGRzCiAgICAgICAgJGphZGQgICAgICAgICAgICAgPSAkanF1ZXN0aW9uICsgMTsKICAgICAgICAkZmllbGRzWzBdICAgICAgICA9ICRwYWQgLiAkZmllbGRzWzBdOwogICAgICAgICRmaWVsZF9sZW5ndGhzWzBdID0gJHBhZF9sZW5ndGggKyAkZmllbGRfbGVuZ3Roc1swXTsKICAgICAgICBzcGxpY2UoIEBmaWVsZHMsICAgICAgICAwLCAwLCAoRU1QVFlfU1RSSU5HKSB4ICRqYWRkICkgaWYgJGphZGQ7CiAgICAgICAgc3BsaWNlKCBAZmllbGRfbGVuZ3RocywgMCwgMCwgKDApIHggJGphZGQgKSAgICAgICAgICAgIGlmICRqYWRkOwogICAgfQoKICAgIEVYUExBSU5fVEVSTkFSWSAmJiBkbyB7CiAgICAgICAgbG9jYWwgJExJU1RfU0VQQVJBVE9SID0gJz48JzsKICAgICAgICBwcmludCB7KlNURE9VVH0gIk1PRElGSUVEIFRPS0VOUz08QHRva2Vucz5cbiI7CiAgICAgICAgcHJpbnQgeypTVERPVVR9ICJNT0RJRklFRCBQQVRURVJOUz08QHBhdHRlcm5zPlxuIjsKICAgICAgICBwcmludCB7KlNURE9VVH0gIk1PRElGSUVEIEZJRUxEUz08QGZpZWxkcz5cbiI7CiAgICB9OwoKICAgICMgYWxsIG9rIC4uIHVwZGF0ZSB0aGUgYXJyYXlzCiAgICBAeyRyZmllbGRzfSAgICAgICAgPSBAZmllbGRzOwogICAgQHskcnRva2Vuc30gICAgICAgID0gQHRva2VuczsKICAgIEB7JHJwYXR0ZXJuc30gICAgICA9IEBwYXR0ZXJuczsKICAgIEB7JHJmaWVsZF9sZW5ndGhzfSA9IEBmaWVsZF9sZW5ndGhzOwoKICAgICMgZm9yY2UgYSBmbHVzaCBhZnRlciB0aGlzIGxpbmUKICAgIHJldHVybiAkanF1ZXN0aW9uOwp9ICMjIGVuZCBzdWIgZml4X3Rlcm1pbmFsX3Rlcm5hcnkKCnN1YiBmaXhfdGVybWluYWxfZWxzZSB7CgogICAgIyBBZGQgZW1wdHkgZmllbGRzIGFzIG5lY2Vzc2FyeSB0byBhbGlnbiBhIGJhbGFuY2VkIHRlcm1pbmFsCiAgICAjIGVsc2UgYmxvY2sgdG8gYSBwcmV2aW91cyBpZi9lbHNpZi91bmxlc3MgYmxvY2ssCiAgICAjIGxpa2UgdGhpczoKICAgICMKICAgICMgIGlmICAgKCAxIHx8ICR4ICkgeyBwcmludCAib2sgMTNcbiI7IH0KICAgICMgIGVsc2UgICAgICAgICAgICAgeyBwcmludCAibm90IG9rIDEzXG4iOyB9CiAgICAjCiAgICAjIHJldHVybnMgYSBwb3NpdGl2ZSB2YWx1ZSBpZiB0aGUgZWxzZSBibG9jayBzaG91bGQgYmUgaW5kZW50ZWQKICAgICMKICAgIG15ICgkcmNhbGxfaGFzaCkgPSBAXzsKCiAgICBteSAkb2xkX2xpbmUgICAgICAgPSAkcmNhbGxfaGFzaC0+e29sZF9saW5lfTsKICAgIG15ICRyZmllbGRzICAgICAgICA9ICRyY2FsbF9oYXNoLT57cmZpZWxkc307CiAgICBteSAkcnRva2VucyAgICAgICAgPSAkcmNhbGxfaGFzaC0+e3J0b2tlbnN9OwogICAgbXkgJHJwYXR0ZXJucyAgICAgID0gJHJjYWxsX2hhc2gtPntycGF0dGVybnN9OwogICAgbXkgJHJmaWVsZF9sZW5ndGhzID0gJHJjYWxsX2hhc2gtPntyZmllbGRfbGVuZ3Roc307CgogICAgcmV0dXJuIGlmICggISRvbGRfbGluZSApOwogICAgbXkgJGptYXggPSBAeyRyZmllbGRzfSAtIDE7CiAgICByZXR1cm4gaWYgKCAkam1heCA8PSAwICk7CgogICAgaWYgKCV2YWxpZ25fY29udHJvbF9oYXNoKSB7CiAgICAgICAgbXkgJGFsaWduX29rID0gJHZhbGlnbl9jb250cm9sX2hhc2h7J3snfTsKICAgICAgICAkYWxpZ25fb2sgPSAkdmFsaWduX2NvbnRyb2xfZGVmYXVsdCB1bmxlc3MgZGVmaW5lZCgkYWxpZ25fb2spOwogICAgICAgIHJldHVybiBpZiAoICEkYWxpZ25fb2sgKTsKICAgIH0KCiAgICAjIGNoZWNrIGZvciBiYWxhbmNlZCBlbHNlIGJsb2NrIGZvbGxvd2luZyBpZi9lbHNpZi91bmxlc3MKICAgIG15ICRyZmllbGRzX29sZCA9ICRvbGRfbGluZS0+eydyZmllbGRzJ307CgogICAgIyBUQkQ6IGFkZCBoYW5kbGluZyBmb3IgJ2Nhc2UnCiAgICByZXR1cm4gaWYgKCAkcmZpZWxkc19vbGQtPlswXSAhfiAvXig/OmlmfGVsc2lmfHVubGVzcylccyokLyApOwoKICAgICMgbG9vayBmb3IgdGhlIG9wZW5pbmcgYnJhY2UgYWZ0ZXIgdGhlIGVsc2UsIGFuZCBleHRyYWN0IHRoZSBkZXB0aAogICAgbXkgJHRva19icmFjZSA9ICRydG9rZW5zLT5bMF07CiAgICBteSAkZGVwdGhfYnJhY2U7CiAgICBpZiAoICR0b2tfYnJhY2UgPX4gL15ceyhcZCspLyApIHsgJGRlcHRoX2JyYWNlID0gJDE7IH0KCiAgICAjIHByb2JhYmx5OiAgImVsc2UgIyBzaWRlX2NvbW1lbnQiCiAgICBlbHNlIHsgcmV0dXJuIH0KCiAgICBteSAkcnBhdHRlcm5zX29sZCAgICAgICA9ICRvbGRfbGluZS0+eydycGF0dGVybnMnfTsKICAgIG15ICRydG9rZW5zX29sZCAgICAgICAgID0gJG9sZF9saW5lLT57J3J0b2tlbnMnfTsKICAgIG15ICRtYXhpbXVtX2ZpZWxkX2luZGV4ID0gJG9sZF9saW5lLT57J2ptYXgnfTsKCiAgICAjIGJlIHN1cmUgdGhlIHByZXZpb3VzIGlmL2Vsc2lmIGlzIGZvbGxvd2VkIGJ5IGFuIG9wZW5pbmcgcGFyZW4KICAgIG15ICRqcGFyZW4gICAgPSAwOwogICAgbXkgJHRva19wYXJlbiA9ICcoJyAuICRkZXB0aF9icmFjZTsKICAgIG15ICR0b2tfdGVzdCAgPSAkcnRva2Vuc19vbGQtPlskanBhcmVuXTsKICAgIHJldHVybiBpZiAoICR0b2tfdGVzdCBuZSAkdG9rX3BhcmVuICk7ICAgICMgc2hvdWxkbid0IGhhcHBlbgoKICAgICMgTm93IGZpbmQgdGhlIG9wZW5pbmcgYmxvY2sgYnJhY2UKICAgIG15ICgkamJyYWNlKTsKICAgIGZvcmVhY2ggbXkgJGogKCAxIC4uICRtYXhpbXVtX2ZpZWxkX2luZGV4IC0gMSApIHsKICAgICAgICBteSAkdG9rID0gJHJ0b2tlbnNfb2xkLT5bJGpdOwogICAgICAgIGlmICggJHRvayBlcSAkdG9rX2JyYWNlICkgewogICAgICAgICAgICAkamJyYWNlID0gJGo7CiAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGlmICggIWRlZmluZWQoJGpicmFjZSkgKTsgICAgICAgICAgIyBzaG91bGRuJ3QgaGFwcGVuCgogICAgIyBOb3cgc3BsaWNlIHRoZSB0b2tlbnMgYW5kIHBhdHRlcm5zIG9mIHRoZSBwcmV2aW91cyBsaW5lCiAgICAjIGludG8gdGhlIGVsc2UgbGluZSB0byBpbnN1cmUgYSBtYXRjaC4gIEFkZCBlbXB0eSBmaWVsZHMKICAgICMgYXMgbmVjZXNzYXJ5LgogICAgbXkgJGphZGQgPSAkamJyYWNlIC0gJGpwYXJlbjsKICAgIHNwbGljZSggQHskcnRva2Vuc30sICAgMCwgMCwgQHskcnRva2Vuc19vbGR9WyAkanBhcmVuIC4uICRqYnJhY2UgLSAxIF0gKTsKICAgIHNwbGljZSggQHskcnBhdHRlcm5zfSwgMSwgMCwgQHskcnBhdHRlcm5zX29sZH1bICRqcGFyZW4gKyAxIC4uICRqYnJhY2UgXSApOwogICAgc3BsaWNlKCBAeyRyZmllbGRzfSwgICAgICAgIDEsIDAsIChFTVBUWV9TVFJJTkcpIHggJGphZGQgKTsKICAgIHNwbGljZSggQHskcmZpZWxkX2xlbmd0aHN9LCAxLCAwLCAoMCkgeCAkamFkZCApOwoKICAgICMgZm9yY2UgYSBmbHVzaCBhZnRlciB0aGlzIGxpbmUgaWYgaXQgZG9lcyBub3QgZm9sbG93IGEgY2FzZQogICAgaWYgICAoICRyZmllbGRzX29sZC0+WzBdID1+IC9eY2FzZVxzKiQvICkgeyByZXR1cm4gfQogICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gJGpicmFjZSB9Cn0gIyMgZW5kIHN1YiBmaXhfdGVybWluYWxfZWxzZQoKbXkgJWlzX2Nsb3NpbmdfYmxvY2tfdHlwZTsKCkJFR0lOIHsKICAgIG15IEBxID0gcXc8IH0gXSA+OwogICAgQGlzX2Nsb3NpbmdfYmxvY2tfdHlwZXtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwp9CgojIFRoaXMgaXMgYSBmbGFnIGZvciB0ZXN0aW5nIGFsaWdubWVudCBieSBzdWIgc3dlZXBfbGVmdF90b19yaWdodCBvbmx5LgojIFRoaXMgdGVzdCBjYW4gaGVscCBmaW5kIHByb2JsZW1zIHdpdGggdGhlIGFsaWdubWVudCBsb2dpYy4KIyBUaGlzIGZsYWcgc2hvdWxkIG5vcm1hbGx5IGJlIHplcm8uCnVzZSBjb25zdGFudCBURVNUX1NXRUVQX09OTFkgPT4gMDsKCnVzZSBjb25zdGFudCBFWFBMQUlOX0NIRUNLX01BVENIID0+IDA7CgpzdWIgY2hlY2tfbWF0Y2ggewoKICAgICMgU2VlIGlmIHRoZSBjdXJyZW50IGxpbmUgbWF0Y2hlcyB0aGUgY3VycmVudCB2ZXJ0aWNhbCBhbGlnbm1lbnQgZ3JvdXAuCgogICAgbXkgKCAkc2VsZiwgJG5ld19saW5lLCAkYmFzZV9saW5lLCAkcHJldl9saW5lLCAkZ3JvdXBfbGluZV9jb3VudCApID0gQF87CgogICAgIyBHaXZlbjoKICAgICMgICRuZXdfbGluZSAgPSB0aGUgbGluZSBiZWluZyBjb25zaWRlcmVkIGZvciBncm91cCBpbmNsdXNpb24KICAgICMgICRiYXNlX2xpbmUgPSB0aGUgZmlyc3QgbGluZSBvZiB0aGUgY3VycmVudCBncm91cAogICAgIyAgJHByZXZfbGluZSA9IHRoZSBsaW5lIGp1c3QgYmVmb3JlICRuZXdfbGluZQogICAgIyAgJGdyb3VwX2xpbmVfY291bnQgPSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIGN1cnJlbnQgZ3JvdXAKCiAgICAjIFJldHVybnM6IGEgZmxhZyBhbmQgYSB2YWx1ZSBhcyBmb2xsb3dzOgogICAgIyAgICByZXR1cm4gKDAsICRpbWF4X2FsaWduKSAgIGlmIHRoZSBsaW5lIGRvZXMgbm90IG1hdGNoCiAgICAjICAgIHJldHVybiAoMSwgJGltYXhfYWxpZ24pICAgaWYgdGhlIGxpbmUgbWF0Y2hlcyBidXQgZG9lcyBub3QgZml0CiAgICAjICAgIHJldHVybiAoMiwgJGltYXhfYWxpZ24pICAgaWYgdGhlIGxpbmUgbWF0Y2hlcyBhbmQgZml0cwoKICAgIHVzZSBjb25zdGFudCBOT19NQVRDSCAgICAgID0+IDA7CiAgICB1c2UgY29uc3RhbnQgTUFUQ0hfTk9fRklUICA9PiAxOwogICAgdXNlIGNvbnN0YW50IE1BVENIX0FORF9GSVQgPT4gMjsKCiAgICAjIFJldHVybiB2YWx1ZSAnJHJldHVybl92YWx1ZScgZGVzY3JpYmVzIHRoZSBtYXRjaCB3aXRoIDMgcG9zc2libGUgdmFsdWVzCiAgICBteSAkcmV0dXJuX3ZhbHVlOwoKICAgICMgUmV0dXJuIHZhbHVlICckaW1heF9hbGlnbicgaXMgdGhlIGluZGV4IG9mIHRoZSBtYXhpbXVtIG1hdGNoaW5nIHRva2VuLgogICAgIyBJdCB3aWxsIGJlIHVzZWQgaW4gdGhlIHN1YnNlcXVlbnQgbGVmdC10by1yaWdodCBzd2VlcCB0byBhbGlnbiBhcyBtYW55CiAgICAjIHRva2VucyBhcyBwb3NzaWJsZSBmb3IgbGluZXMgd2hpY2ggcGFydGlhbGx5IG1hdGNoLgogICAgbXkgJGltYXhfYWxpZ24gPSAtMTsKCiAgICAjIHZhcmlhYmxlICRHb1RvTXNnIGV4cGxhaW5zIHJlYXNvbiBmb3Igbm8gbWF0Y2gsIGZvciBkZWJ1Z2dpbmcKICAgIG15ICRHb1RvTXNnID0gRU1QVFlfU1RSSU5HOwoKICAgIG15ICRqbWF4ICAgICAgICAgICAgICAgID0gJG5ld19saW5lLT57J2ptYXgnfTsKICAgIG15ICRtYXhpbXVtX2ZpZWxkX2luZGV4ID0gJGJhc2VfbGluZS0+eydqbWF4J307CgogICAgbXkgJGpsaW1pdCA9ICRqbWF4IC0gMjsKICAgIGlmICggJGptYXggPiAkbWF4aW11bV9maWVsZF9pbmRleCApIHsKICAgICAgICAkamxpbWl0ID0gJG1heGltdW1fZmllbGRfaW5kZXggLSAyOwogICAgfQoKICAgIGlmICggJG5ld19saW5lLT57J2lzX2hhbmdpbmdfc2lkZV9jb21tZW50J30gKSB7CgogICAgICAgICMgSFNDJ3MgY2FuIGpvaW4gdGhlIGdyb3VwIGlmIHRoZXkgZml0CiAgICB9CgogICAgIyBFdmVyeXRoaW5nIGVsc2UKICAgIGVsc2UgewoKICAgICAgICAjIEEgZ3JvdXAgd2l0aCBoYW5naW5nIHNpZGUgY29tbWVudHMgZW5kcyB3aXRoIHRoZSBmaXJzdCBub24gaGFuZ2luZwogICAgICAgICMgc2lkZSBjb21tZW50LgogICAgICAgIGlmICggJGJhc2VfbGluZS0+eydpc19oYW5naW5nX3NpZGVfY29tbWVudCd9ICkgewogICAgICAgICAgICAkR29Ub01zZyAgICAgID0gImVuZCBvZiBoYW5naW5nIHNpZGUgY29tbWVudHMiOwogICAgICAgICAgICAkcmV0dXJuX3ZhbHVlID0gTk9fTUFUQ0g7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBUaGUgbnVtYmVyIG9mIHRva2VucyB0aGF0IHRoaXMgbGluZSBzaGFyZXMgd2l0aCB0aGUgcHJldmlvdXMKICAgICAgICAgICAgIyBsaW5lIGhhcyBiZWVuIHN0b3JlZCB3aXRoIHRoZSBwcmV2aW91cyBsaW5lLiAgVGhpcyB2YWx1ZSB3YXMKICAgICAgICAgICAgIyBjYWxjdWxhdGVkIGFuZCBzdG9yZWQgYnkgc3ViICdtYXRjaF9saW5lX3BhaXInLgogICAgICAgICAgICAkaW1heF9hbGlnbiA9ICRwcmV2X2xpbmUtPnsnaW1heF9wYWlyJ307CgogICAgICAgICAgICAjIE9ubHkgdGhlIGZvbGxvd2luZyBjaSBzZXF1ZW5jZXMgYXJlIGFjY2VwdGVkIChpc3N1ZSBjMjI1KToKICAgICAgICAgICAgIyAgIDAgMCAwIC4uLiAgT0sKICAgICAgICAgICAgIyAgIDAgMSAxIC4uLiAgT0sgYnV0IG1hcmdpbmFsKgogICAgICAgICAgICAjICAgMSAxIDEgLi4uICBPSwogICAgICAgICAgICAjIFRoaXMgY2hlY2sgaXMgcmFyZWx5IGFjdGl2YXRlZCwgYnV0IGZvciBleGFtcGxlIHdlIHdhbnQKICAgICAgICAgICAgIyB0byBhdm9pZCBzb21ldGhpbmcgbGlrZSB0aGlzICd0YWlsIHdhZyBkb2cnIHNpdHVhdGlvbjoKICAgICAgICAgICAgIyAgJHRhZyAgICAgICAgPX4gcy9cYihbYS16XSspL1xMXHUkMS9naW87CiAgICAgICAgICAgICMgICR0YWcgICAgICAgID1+IHMvXGIoW2ItZGYtaGotbnAtdHYtel0rKVxiL1xVJDEvZ2lvCiAgICAgICAgICAgICMgICAgICBpZiAkdGFnID1+IC8tLzsKICAgICAgICAgICAgIyAqTm90ZTogd2UgY291bGQgc2V0IGEgZmxhZyBmb3IgdGhlIDAgMSBtYXJnaW5hbCBjYXNlIGFuZAogICAgICAgICAgICAjIHVzZSBpdCB0byBwcmV2ZW50IGFsaWdubWVudCBvZiBzZWxlY3RlZCB0b2tlbiB0eXBlcy4KICAgICAgICAgICAgbXkgJGNpX3ByZXYgPSAkcHJldl9saW5lLT57J2NpX2xldmVsJ307CiAgICAgICAgICAgIG15ICRjaV9uZXcgID0gJG5ld19saW5lLT57J2NpX2xldmVsJ307CiAgICAgICAgICAgIGlmICggICAkY2lfcHJldiAhPSAkY2lfbmV3CiAgICAgICAgICAgICAgICAmJiAkaW1heF9hbGlnbiA+PSAwCiAgICAgICAgICAgICAgICAmJiAoICRjaV9uZXcgPT0gMCB8fCAkZ3JvdXBfbGluZV9jb3VudCA+IDEgKSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRpbWF4X2FsaWduID0gLTE7CiAgICAgICAgICAgICAgICAkR29Ub01zZyA9CiJSZWplY3RlZCBjaTogY2lfcHJldj0kY2lfcHJldiBjaV9uZXc9JGNpX25ldyBudW09JGdyb3VwX2xpbmVfY291bnRcbiI7CiAgICAgICAgICAgICAgICAkcmV0dXJuX3ZhbHVlID0gTk9fTUFUQ0g7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkaW1heF9hbGlnbiAhPSAkamxpbWl0ICkgewogICAgICAgICAgICAgICAgJEdvVG9Nc2cgPSAiTm90IGFsbCB0b2tlbnMgbWF0Y2g6ICRpbWF4X2FsaWduICE9ICRqbGltaXRcbiI7CiAgICAgICAgICAgICAgICAkcmV0dXJuX3ZhbHVlID0gTk9fTUFUQ0g7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAjI29rOiBjb250aW51ZQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmICggIWRlZmluZWQoJHJldHVybl92YWx1ZSkgKSB7CgogICAgICAgICMgVGhlIHRva2VucyBtYXRjaCwgYnV0IHRoZSBsaW5lcyBtdXN0IGhhdmUgaWRlbnRpY2FsIG51bWJlciBvZgogICAgICAgICMgdG9rZW5zIHRvIGpvaW4gdGhlIGdyb3VwLgogICAgICAgIGlmICggJG1heGltdW1fZmllbGRfaW5kZXggIT0gJGptYXggKSB7CiAgICAgICAgICAgICRHb1RvTXNnICAgICAgPSAidG9rZW4gY291bnQgZGlmZmVycyI7CiAgICAgICAgICAgICRyZXR1cm5fdmFsdWUgPSBOT19NQVRDSDsKICAgICAgICB9CgogICAgICAgICMgVGhlIHRva2VucyBtYXRjaC4gTm93IFNlZSBpZiB0aGVyZSBpcyBzcGFjZSBmb3IgdGhpcyBsaW5lIGluIHRoZQogICAgICAgICMgY3VycmVudCBncm91cC4KICAgICAgICBlbHNpZiAoICRzZWxmLT5jaGVja19maXQoICRuZXdfbGluZSwgJGJhc2VfbGluZSApICYmICFURVNUX1NXRUVQX09OTFkgKQogICAgICAgIHsKCiAgICAgICAgICAgICRHb1RvTXNnID0gIm1hdGNoIGFuZCBmaXQsIGltYXhfYWxpZ249JGltYXhfYWxpZ24sIGptYXg9JGptYXhcbiI7CiAgICAgICAgICAgICRyZXR1cm5fdmFsdWUgPSBNQVRDSF9BTkRfRklUOwogICAgICAgICAgICAkaW1heF9hbGlnbiAgID0gJGpsaW1pdDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRHb1RvTXNnID0gIm1hdGNoIGJ1dCBubyBmaXQsIGltYXhfYWxpZ249JGltYXhfYWxpZ24sIGptYXg9JGptYXhcbiI7CiAgICAgICAgICAgICRyZXR1cm5fdmFsdWUgPSBNQVRDSF9OT19GSVQ7CiAgICAgICAgICAgICRpbWF4X2FsaWduICAgPSAkamxpbWl0OwogICAgICAgIH0KICAgIH0KCiAgICBFWFBMQUlOX0NIRUNLX01BVENICiAgICAgICYmIHByaW50CiJyZXR1cm5pbmcgJHJldHVybl92YWx1ZSBiZWNhdXNlICRHb1RvTXNnLCBtYXggbWF0Y2ggaW5kZXggPWkgJGltYXhfYWxpZ24sIGptYXg9JGptYXhcbiI7CgogICAgcmV0dXJuICggJHJldHVybl92YWx1ZSwgJGltYXhfYWxpZ24gKTsKfSAjIyBlbmQgc3ViIGNoZWNrX21hdGNoCgpzdWIgY2hlY2tfZml0IHsKCiAgICBteSAoICRzZWxmLCAkbmV3X2xpbmUsICRvbGRfbGluZSApID0gQF87CgogICAgIyBUaGUgbmV3IGxpbmUgaGFzIGFsaWdubWVudHMgaWRlbnRpY2FsIHRvIHRoZSBjdXJyZW50IGdyb3VwLiBOb3cgd2UgaGF2ZQogICAgIyB0byBmaXQgdGhlIG5ldyBsaW5lIGludG8gdGhlIGdyb3VwIHdpdGhvdXQgY2F1c2luZyBhIGZpZWxkIHRvIGV4Y2VlZCB0aGUKICAgICMgbGluZSBsZW5ndGggbGltaXQuCgogICAgIyBHaXZlbjoKICAgICMgICAkbmV3X2xpbmUgPSByZWYgdG8gaGFzaCBvZiB0aGUgbmV3IGxpbmUgdmFsdWVzCiAgICAjICAgJG9sZF9saW5lID0gcmVmIHRvIGhhc2ggb2YgdGhlIHByZXZpb3VzIGxpbmUgdmFsdWVzCiAgICAjIFJldHVybnM6CiAgICAjICAgdHJ1ZSBpZiB0aGUgbmV3IGxpbmUgYWxpZ25tZW50cyBmaXQgdGhlIG9sZCBsaW5lCiAgICAjICAgZmFsc2Ugb3RoZXJ3aXNlCgogICAgbXkgJGptYXggICAgICAgICAgICAgICAgPSAkbmV3X2xpbmUtPnsnam1heCd9OwogICAgbXkgJGxlYWRpbmdfc3BhY2VfY291bnQgPSAkbmV3X2xpbmUtPnsnbGVhZGluZ19zcGFjZV9jb3VudCd9OwogICAgbXkgJHJmaWVsZF9sZW5ndGhzICAgICAgPSAkbmV3X2xpbmUtPnsncmZpZWxkX2xlbmd0aHMnfTsKICAgIG15ICRwYWRkaW5nX2F2YWlsYWJsZSAgID0gJG9sZF9saW5lLT5nZXRfYXZhaWxhYmxlX3NwYWNlX29uX3JpZ2h0KCk7CiAgICBteSAkam1heF9vbGQgICAgICAgICAgICA9ICRvbGRfbGluZS0+eydqbWF4J307CgogICAgIyBTYWZldHkgY2hlY2sgLi4uIG9ubHkgbGluZXMgd2l0aCBlcXVhbCBhcnJheSBzaXplcyBzaG91bGQgYXJyaXZlIGhlcmUKICAgICMgZnJvbSBzdWIgY2hlY2tfbWF0Y2guICBTbyBpZiB0aGlzIGVycm9yIG9jY3VycywgbG9vayBhdCByZWNlbnQgY2hhbmdlcyBpbgogICAgIyBzdWIgY2hlY2tfbWF0Y2guICBJdCBpcyBvbmx5IHN1cHBvc2VkIHRvIGNoZWNrIHRoZSBmaXQgb2YgbGluZXMgd2l0aAogICAgIyBpZGVudGljYWwgbnVtYmVycyBvZiBhbGlnbm1lbnQgdG9rZW5zLgogICAgaWYgKCAkam1heF9vbGQgbmUgJGptYXggKSB7CgogICAgICAgIHdhcm5pbmcoPDxFT00pOwpQcm9ncmFtIGJ1ZyBkZXRlY3RlZCBpbiBQZXJsOjpUaWR5OjpWZXJ0aWNhbEFsaWduZXIgc3ViIGNoZWNrX2ZpdAp1bmV4cGVjdGVkIGRpZmZlcmVuY2UgaW4gYXJyYXkgbGVuZ3RoczogJGptYXggIT0gJGptYXhfb2xkCkVPTQogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIFNhdmUgY3VycmVudCBjb2x1bW5zIGluIGNhc2UgdGhpcyBsaW5lIGRvZXMgbm90IGZpdC4KICAgIG15IEBhbGlnbm1lbnRzID0gQHsgJG9sZF9saW5lLT57J3JhbGlnbm1lbnRzJ30gfTsKICAgIGZvcmVhY2ggbXkgJGFsaWdubWVudCAoQGFsaWdubWVudHMpIHsKICAgICAgICAkYWxpZ25tZW50LT5zYXZlX2NvbHVtbigpOwogICAgfQoKICAgICMgTG9vcCBvdmVyIGFsbCBhbGlnbm1lbnRzIC4uLgogICAgZm9yIG15ICRqICggMCAuLiAkam1heCApIHsKCiAgICAgICAgbXkgJHBhZCA9ICRyZmllbGRfbGVuZ3Rocy0+WyRqXSAtICRvbGRfbGluZS0+Y3VycmVudF9maWVsZF93aWR0aCgkaik7CgogICAgICAgIGlmICggJGogPT0gMCApIHsKICAgICAgICAgICAgJHBhZCArPSAkbGVhZGluZ19zcGFjZV9jb3VudDsKICAgICAgICB9CgogICAgICAgICMgS2VlcCBnb2luZyBpZiB0aGlzIGZpZWxkIGRvZXMgbm90IG5lZWQgYW55IHNwYWNlLgogICAgICAgIG5leHQgaWYgKCAkcGFkIDwgMCApOwoKICAgICAgICAjIFJldmVydCB0byB0aGUgc3RhcnRpbmcgc3RhdGUgaWYgZG9lcyBub3QgZml0CiAgICAgICAgaWYgKCAkcGFkID4gJHBhZGRpbmdfYXZhaWxhYmxlICkgewoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgIyBMaW5lIGRvZXMgbm90IGZpdCAtLSByZXZlcnQgdG8gc3RhcnRpbmcgc3RhdGUKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgZm9yZWFjaCBteSAkYWxpZ25tZW50IChAYWxpZ25tZW50cykgewogICAgICAgICAgICAgICAgJGFsaWdubWVudC0+cmVzdG9yZV9jb2x1bW4oKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIG1ha2Ugcm9vbSBmb3IgdGhpcyBmaWVsZAogICAgICAgICRvbGRfbGluZS0+aW5jcmVhc2VfZmllbGRfd2lkdGgoICRqLCAkcGFkICk7CiAgICAgICAgJHBhZGRpbmdfYXZhaWxhYmxlIC09ICRwYWQ7CiAgICB9CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgVGhlIGxpbmUgZml0cywgdGhlIG1hdGNoIGlzIGFjY2VwdGVkCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgcmV0dXJuIDE7Cgp9ICMjIGVuZCBzdWIgY2hlY2tfZml0CgpzdWIgaW5zdGFsbF9uZXdfYWxpZ25tZW50cyB7CgogICAgbXkgKCRuZXdfbGluZSkgPSBAXzsKCiAgICAjIEdpdmVuOgogICAgIyAgICRuZXdfbGluZSA9IHJlZiB0byBoYXNoIG9mIGEgbGluZSBzdGFydGluZyBhIG5ldyBncm91cAogICAgIyBUYXNrOgogICAgIyAgIHNldHVwIGFsaWdubWVudCBmaWVsZHMgZm9yIHRoaXMgbGluZQoKICAgIG15ICRqbWF4ICAgICAgICAgICA9ICRuZXdfbGluZS0+eydqbWF4J307CiAgICBteSAkcmZpZWxkX2xlbmd0aHMgPSAkbmV3X2xpbmUtPnsncmZpZWxkX2xlbmd0aHMnfTsKICAgIG15ICRjb2wgICAgICAgICAgICA9ICRuZXdfbGluZS0+eydsZWFkaW5nX3NwYWNlX2NvdW50J307CgogICAgbXkgQGFsaWdubWVudHM7CiAgICBmb3IgbXkgJGogKCAwIC4uICRqbWF4ICkgewogICAgICAgICRjb2wgKz0gJHJmaWVsZF9sZW5ndGhzLT5bJGpdOwoKICAgICAgICAjIGNyZWF0ZSBpbml0aWFsIGFsaWdubWVudHMgZm9yIHRoZSBuZXcgZ3JvdXAKICAgICAgICBteSAkYWxpZ25tZW50ID0KICAgICAgICAgIFBlcmw6OlRpZHk6OlZlcnRpY2FsQWxpZ25lcjo6QWxpZ25tZW50LT5uZXcoIHsgY29sdW1uID0+ICRjb2wgfSApOwogICAgICAgIHB1c2ggQGFsaWdubWVudHMsICRhbGlnbm1lbnQ7CiAgICB9CiAgICAkbmV3X2xpbmUtPnsncmFsaWdubWVudHMnfSA9IFxAYWxpZ25tZW50czsKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGluc3RhbGxfbmV3X2FsaWdubWVudHMKCnN1YiBjb3B5X29sZF9hbGlnbm1lbnRzIHsKICAgIG15ICggJG5ld19saW5lLCAkb2xkX2xpbmUgKSA9IEBfOwogICAgbXkgQG5ld19hbGlnbm1lbnRzID0gQHsgJG9sZF9saW5lLT57J3JhbGlnbm1lbnRzJ30gfTsKICAgICRuZXdfbGluZS0+eydyYWxpZ25tZW50cyd9ID0gXEBuZXdfYWxpZ25tZW50czsKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGNvcHlfb2xkX2FsaWdubWVudHMKCnN1YiBkdW1wX2FycmF5IHsKCiAgICAjIGRlYnVnIHJvdXRpbmUgdG8gZHVtcCBhcnJheSBjb250ZW50cwogICAgbG9jYWwgJExJU1RfU0VQQVJBVE9SID0gJykoJzsKICAgIHByaW50IHsqU1RET1VUfSAiKEBfKVxuIjsKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGR1bXBfYXJyYXkKCnN1YiBsZXZlbF9jaGFuZ2UgewoKICAgIG15ICggJHNlbGYsICRsZWFkaW5nX3NwYWNlX2NvdW50LCAkZGlmZiwgJGxldmVsICkgPSBAXzsKCiAgICAjIGNvbXB1dGUgZGVjcmVhc2UgaW4gbGV2ZWwgd2hlbiB3ZSByZW1vdmUgJGRpZmYgc3BhY2VzIGZyb20gdGhlCiAgICAjIGxlYWRpbmcgc3BhY2VzCgogICAgIyBHaXZlbjoKICAgICMgICAkbGVhZGluZ19zcGFjZV9jb3VudCA9IGN1cnJlbnQgbGVhZGluZyBsaW5lIHNwYWNlcwogICAgIyAgICRkaWZmID0gbnVtYmVyIG9mIHNwYWNlcyB0byByZW1vdmUKICAgICMgICAkbGV2ZWwgPSBjdXJyZW50IGluZGVudGF0aW9uIGxldmVsCiAgICAjIFJldHVybjoKICAgICMgICAkbGV2ZWwgPSB1cGRhdGVkIGxldmVsIGFjY291bnRpbmcgZm9yIHRoZSBsb3NzIG9mIHNwYWNlcwoKICAgIGlmICgkck9wdHNfaW5kZW50X2NvbHVtbnMpIHsKICAgICAgICBteSAkb2xldiA9CiAgICAgICAgICBpbnQoICggJGxlYWRpbmdfc3BhY2VfY291bnQgKyAkZGlmZiApIC8gJHJPcHRzX2luZGVudF9jb2x1bW5zICk7CiAgICAgICAgbXkgJG5sZXYgPSBpbnQoICRsZWFkaW5nX3NwYWNlX2NvdW50IC8gJHJPcHRzX2luZGVudF9jb2x1bW5zICk7CiAgICAgICAgJGxldmVsIC09ICggJG9sZXYgLSAkbmxldiApOwogICAgICAgIGlmICggJGxldmVsIDwgMCApIHsgJGxldmVsID0gMCB9CiAgICB9CiAgICByZXR1cm4gJGxldmVsOwp9ICMjIGVuZCBzdWIgbGV2ZWxfY2hhbmdlCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIENPREUgU0VDVElPTiA0OiBDb2RlIHRvIHByb2Nlc3MgY29tbWVudCBsaW5lcwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKc3ViIF9mbHVzaF9jb21tZW50X2xpbmVzIHsKCiAgICAjIE91dHB1dCBhIGdyb3VwIGNvbnNpc3Rpbmcgb2YgQ09NTUVOVCBsaW5lcwoKICAgIG15ICgkc2VsZikgPSBAXzsKICAgIG15ICRyZ3JvdXBfbGluZXMgPSAkc2VsZi0+W19yZ3JvdXBfbGluZXNfXTsKICAgIHJldHVybiBpZiAoICFAeyRyZ3JvdXBfbGluZXN9ICk7CiAgICBteSAkZ3JvdXBfbGV2ZWwgICAgICAgICAgICAgICA9ICRzZWxmLT5bX2dyb3VwX2xldmVsX107CiAgICBteSAkZ3JvdXBfbWF4aW11bV9saW5lX2xlbmd0aCA9ICRzZWxmLT5bX2dyb3VwX21heGltdW1fbGluZV9sZW5ndGhfXTsKICAgIG15ICRsZWFkaW5nX3NwYWNlX2NvdW50ICAgICAgID0gJHNlbGYtPltfY29tbWVudF9sZWFkaW5nX3NwYWNlX2NvdW50X107CgogICAgIyBsb29rIGZvciBleGNlc3NpdmVseSBsb25nIGxpbmVzCiAgICBteSAkbWF4X2V4Y2VzcyA9IDA7CiAgICBmb3JlYWNoIG15ICRpdGVtICggQHskcmdyb3VwX2xpbmVzfSApIHsKICAgICAgICBteSAoICRzdHJfdXUsICRzdHJfbGVuICkgPSBAeyRpdGVtfTsKICAgICAgICBteSAkZXhjZXNzID0KICAgICAgICAgICRzdHJfbGVuICsgJGxlYWRpbmdfc3BhY2VfY291bnQgLSAkZ3JvdXBfbWF4aW11bV9saW5lX2xlbmd0aDsKICAgICAgICBpZiAoICRleGNlc3MgPiAkbWF4X2V4Y2VzcyApIHsKICAgICAgICAgICAgJG1heF9leGNlc3MgPSAkZXhjZXNzOwogICAgICAgIH0KICAgIH0KCiAgICAjIHplcm8gbGVhZGluZyBzcGFjZSBjb3VudCBpZiBhbnkgbGluZXMgYXJlIHRvbyBsb25nCiAgICBpZiAoICRtYXhfZXhjZXNzID4gMCApIHsKICAgICAgICAkbGVhZGluZ19zcGFjZV9jb3VudCAtPSAkbWF4X2V4Y2VzczsKICAgICAgICBpZiAoICRsZWFkaW5nX3NwYWNlX2NvdW50IDwgMCApIHsgJGxlYWRpbmdfc3BhY2VfY291bnQgPSAwIH0KICAgICAgICBteSAkZmlsZV93cml0ZXJfb2JqZWN0ID0gJHNlbGYtPltfZmlsZV93cml0ZXJfb2JqZWN0X107CiAgICAgICAgbXkgJGxhc3Rfb3V0ZGVudGVkX2xpbmVfYXQgPQogICAgICAgICAgJGZpbGVfd3JpdGVyX29iamVjdC0+Z2V0X291dHB1dF9saW5lX251bWJlcigpOwogICAgICAgIG15ICRubGluZXMgPSBAeyRyZ3JvdXBfbGluZXN9OwogICAgICAgICRzZWxmLT5bX2xhc3Rfb3V0ZGVudGVkX2xpbmVfYXRfXSA9CiAgICAgICAgICAkbGFzdF9vdXRkZW50ZWRfbGluZV9hdCArICRubGluZXMgLSAxOwogICAgICAgIG15ICRvdXRkZW50ZWRfbGluZV9jb3VudCA9ICRzZWxmLT5bX291dGRlbnRlZF9saW5lX2NvdW50X107CiAgICAgICAgaWYgKCAhJG91dGRlbnRlZF9saW5lX2NvdW50ICkgewogICAgICAgICAgICAkc2VsZi0+W19maXJzdF9vdXRkZW50ZWRfbGluZV9hdF9dID0gJGxhc3Rfb3V0ZGVudGVkX2xpbmVfYXQ7CiAgICAgICAgfQogICAgICAgICRvdXRkZW50ZWRfbGluZV9jb3VudCArPSAkbmxpbmVzOwogICAgICAgICRzZWxmLT5bX291dGRlbnRlZF9saW5lX2NvdW50X10gPSAkb3V0ZGVudGVkX2xpbmVfY291bnQ7CiAgICB9CgogICAgIyB3cml0ZSB0aGUgbGluZXMKICAgIG15ICRvdXRkZW50X2xvbmdfbGluZXMgPSAwOwoKICAgIGZvcmVhY2ggbXkgJGl0ZW0gKCBAeyRyZ3JvdXBfbGluZXN9ICkgewogICAgICAgIG15ICggJHN0ciwgJHN0cl9sZW4sICRLZW5kICkgPSBAeyRpdGVtfTsKICAgICAgICAkc2VsZi0+dmFsaWduX291dHB1dF9zdGVwX0IoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGxlYWRpbmdfc3BhY2VfY291bnQgICAgICAgPT4gJGxlYWRpbmdfc3BhY2VfY291bnQsCiAgICAgICAgICAgICAgICBsaW5lICAgICAgICAgICAgICAgICAgICAgID0+ICRzdHIsCiAgICAgICAgICAgICAgICBsaW5lX2xlbmd0aCAgICAgICAgICAgICAgID0+ICRzdHJfbGVuLAogICAgICAgICAgICAgICAgc2lkZV9jb21tZW50X2xlbmd0aCAgICAgICA9PiAwLAogICAgICAgICAgICAgICAgb3V0ZGVudF9sb25nX2xpbmVzICAgICAgICA9PiAkb3V0ZGVudF9sb25nX2xpbmVzLAogICAgICAgICAgICAgICAgcnZlcnRpY2FsX3RpZ2h0bmVzc19mbGFncyA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIGxldmVsICAgICAgICAgICAgICAgICAgICAgPT4gJGdyb3VwX2xldmVsLAogICAgICAgICAgICAgICAgbGV2ZWxfZW5kICAgICAgICAgICAgICAgICA9PiAkZ3JvdXBfbGV2ZWwsCiAgICAgICAgICAgICAgICBLZW5kICAgICAgICAgICAgICAgICAgICAgID0+ICRLZW5kLAogICAgICAgICAgICAgICAgbWF4aW11bV9saW5lX2xlbmd0aCAgICAgICA9PiAkZ3JvdXBfbWF4aW11bV9saW5lX2xlbmd0aCwKICAgICAgICAgICAgfQogICAgICAgICk7CiAgICB9CgogICAgJHNlbGYtPmluaXRpYWxpemVfZm9yX25ld19ncm91cCgpOwogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgX2ZsdXNoX2NvbW1lbnRfbGluZXMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIENPREUgU0VDVElPTiA1OiBDb2RlIHRvIHByb2Nlc3MgZ3JvdXBzIG9mIGNvZGUgbGluZXMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpzdWIgX2ZsdXNoX2dyb3VwX2xpbmVzIHsKCiAgICAjIFRoaXMgaXMgdGhlIHZlcnRpY2FsIGFsaWduZXIgaW50ZXJuYWwgZmx1c2gsIHdoaWNoIGxlYXZlcyB0aGUgY2FjaGUKICAgICMgaW50YWN0CiAgICBteSAoICRzZWxmLCAoJGxldmVsX2p1bXApICkgPSBAXzsKCiAgICAjICRsZXZlbF9qdW1wID0gJG5leHRfbGV2ZWwtJGdyb3VwX2xldmVsLCBpZiBrbm93bgogICAgIyAgICAgICAgICAgICA9IHVuZGVmIGlmIG5vdCBrbm93bgogICAgIyBOb3RlOiBvbmx5IHRoZSBzaWduIG9mIHRoZSBqdW1wIGlzIG5lZWRlZAoKICAgIG15ICRyZ3JvdXBfbGluZXMgPSAkc2VsZi0+W19yZ3JvdXBfbGluZXNfXTsKICAgIHJldHVybiBpZiAoICFAeyRyZ3JvdXBfbGluZXN9ICk7CiAgICBteSAkZ3JvdXBfdHlwZSAgPSAkc2VsZi0+W19ncm91cF90eXBlX107CiAgICBteSAkZ3JvdXBfbGV2ZWwgPSAkc2VsZi0+W19ncm91cF9sZXZlbF9dOwoKICAgICMgRGVidWcKICAgIDAgJiYgZG8gewogICAgICAgIG15ICggJGEsICRiLCAkYyApID0gY2FsbGVyKCk7CiAgICAgICAgbXkgJG5saW5lcyA9IEB7JHJncm91cF9saW5lc307CiAgICAgICAgcHJpbnQgeypTVERPVVR9CiJBUFBFTkQwOiBfZmx1c2hfZ3JvdXBfbGluZXMgY2FsbGVkIGZyb20gJGEgJGIgJGMgbGluZXM9JG5saW5lcywgdHlwZT0kZ3JvdXBfdHlwZSBcbiI7CiAgICB9OwoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFNlY3Rpb24gMTogSGFuZGxlIGEgZ3JvdXAgb2YgQ09NTUVOVCBsaW5lcwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGlmICggJGdyb3VwX3R5cGUgZXEgJ0NPTU1FTlQnICkgewogICAgICAgICRzZWxmLT5fZmx1c2hfY29tbWVudF9saW5lcygpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFNlY3Rpb24gMjogSGFuZGxlIGxpbmUocykgb2YgQ09ERS4gIE1vc3Qgb2YgdGhlIGFjdHVhbCB3b3JrIG9mIHZlcnRpY2FsCiAgICAjIGFsaWduaW5nIGhhcHBlbnMgaGVyZSBpbiB0aGUgZm9sbG93aW5nIHN0ZXBzOgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICMgU1RFUCAxOiBSZW1vdmUgbW9zdCB1bm1hdGNoZWQgdG9rZW5zLiBUaGV5IGJsb2NrIGdvb2QgYWxpZ25tZW50cy4KICAgIG15ICggJG1heF9sZXZfZGlmZl91dSwgJHNhd19zaWRlX2NvbW1lbnQsICRzYXdfc2lnbmVkX251bWJlciApID0KICAgICAgZGVsZXRlX3VubWF0Y2hlZF90b2tlbnMoICRyZ3JvdXBfbGluZXMsICRncm91cF9sZXZlbCApOwoKICAgICMgU1RFUCAyOiBTd2VlcCB0b3AgdG8gYm90dG9tLCBmb3JtaW5nIHN1Ymdyb3VwcyBvZiBsaW5lcyB3aXRoIGV4YWN0bHkKICAgICMgbWF0Y2hpbmcgY29tbW9uIGFsaWdubWVudHMuICBUaGUgaW5kZXhlcyBvZiB0aGVzZSBzdWJncm91cHMgYXJlIGluIHRoZQogICAgIyByZXR1cm4gdmFyaWFibGUuCiAgICBteSAkcmdyb3VwcyA9ICRzZWxmLT5zd2VlcF90b3BfZG93biggJHJncm91cF9saW5lcywgJGdyb3VwX2xldmVsICk7CgogICAgIyBTVEVQIDM6IFN3ZWVwIGxlZnQgdG8gcmlnaHQgdGhyb3VnaCB0aGUgbGluZXMsIGxvb2tpbmcgZm9yIGxlYWRpbmcKICAgICMgYWxpZ25tZW50IHRva2VucyBzaGFyZWQgYnkgZ3JvdXBzLgogICAgc3dlZXBfbGVmdF90b19yaWdodCggJHJncm91cF9saW5lcywgJHJncm91cHMsICRncm91cF9sZXZlbCApCiAgICAgIGlmICggQHskcmdyb3Vwc30gPiAxICk7CgogICAgIyBTVEVQIDQ6IE1vdmUgc2lkZSBjb21tZW50cyB0byBhIGNvbW1vbiBjb2x1bW4gaWYgcG9zc2libGUuCiAgICBpZiAoJHNhd19zaWRlX2NvbW1lbnQpIHsKICAgICAgICAkc2VsZi0+YWxpZ25fc2lkZV9jb21tZW50cyggJHJncm91cF9saW5lcywgJHJncm91cHMgKTsKICAgIH0KCiAgICAjIFNURVAgNTogRm9yIHRoZSAtbHAgb3B0aW9uLCBpbmNyZWFzZSB0aGUgaW5kZW50YXRpb24gb2YgbGlzdHMKICAgICMgdG8gdGhlIGRlc2lyZWQgYW1vdW50LCBidXQgZG8gbm90IGV4Y2VlZCB0aGUgbGluZSBsZW5ndGggbGltaXQuCgogICAgIyBXZSBhcmUgYWxsb3dlZCB0byBzaGlmdCBhIGdyb3VwIG9mIGxpbmVzIHRvIHRoZSByaWdodCBpZjoKICAgICMgICgxKSBpdHMgbGV2ZWwgaXMgZ3JlYXRlciB0aGFuIHRoZSBsZXZlbCBvZiB0aGUgcHJldmlvdXMgZ3JvdXAsIGFuZAogICAgIyAgKDIpIGl0cyBsZXZlbCBpcyBncmVhdGVyIHRoYW4gdGhlIGxldmVsIG9mIHRoZSBuZXh0IGxpbmUgdG8gYmUgd3JpdHRlbi4KCiAgICBteSAkZXh0cmFfaW5kZW50X29rOwogICAgaWYgKCAkZ3JvdXBfbGV2ZWwgPiAkc2VsZi0+W19sYXN0X2xldmVsX3dyaXR0ZW5fXSApIHsKCiAgICAgICAgIyBVc2UgdGhlIGxldmVsIGp1bXAgdG8gbmV4dCBsaW5lIHRvIGNvbWUsIGlmIGdpdmVuCiAgICAgICAgaWYgKCBkZWZpbmVkKCRsZXZlbF9qdW1wKSApIHsKICAgICAgICAgICAgJGV4dHJhX2luZGVudF9vayA9ICRsZXZlbF9qdW1wIDwgMDsKICAgICAgICB9CgogICAgICAgICMgT3RoZXJ3aXNlLCBhc3N1bWUgdGhlIG5leHQgbGluZSBoYXMgdGhlIGxldmVsIG9mIHRoZSBlbmQgb2YgbGFzdCBsaW5lLgogICAgICAgICMgVGhpcyBmaXhlcyBjYXNlIGMwMDguCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIG15ICRsZXZlbF9lbmQgPSAkcmdyb3VwX2xpbmVzLT5bLTFdLT57J2xldmVsX2VuZCd9OwogICAgICAgICAgICAkZXh0cmFfaW5kZW50X29rID0gJGdyb3VwX2xldmVsID4gJGxldmVsX2VuZDsKICAgICAgICB9CiAgICB9CgogICAgbXkgJGV4dHJhX2xlYWRpbmdfc3BhY2VzID0KICAgICAgJGV4dHJhX2luZGVudF9vawogICAgICA/IGdldF9leHRyYV9sZWFkaW5nX3NwYWNlcyggJHJncm91cF9saW5lcywgJHJncm91cHMgKQogICAgICA6IDA7CgogICAgIyBTVEVQIDY6IGFkZCBzaWduIHBhZGRpbmcgdG8gY29sdW1ucyBudW1iZXJzIGlmIG5lZWRlZAogICAgcGFkX3NpZ25lZF9udW1iZXJfY29sdW1ucygkcmdyb3VwX2xpbmVzKQogICAgICBpZiAoICRzYXdfc2lnbmVkX251bWJlciAmJiAkck9wdHNfdmFsaWduX3NpZ25lZF9udW1iZXJzICk7CgogICAgIyBTVEVQIDc6IHBhZCB3aWRlIGVxdWFscwogICAgcGFkX3dpZGVfZXF1YWxzX2NvbHVtbnMoJHJncm91cF9saW5lcykKICAgICAgaWYgKCRyT3B0c192YWxpZ25fd2lkZV9lcXVhbHMpOwoKICAgICMgU1RFUCA4OiBPdXRwdXQgdGhlIGxpbmVzLgogICAgIyBBbGwgbGluZXMgaW4gdGhpcyBncm91cCBoYXZlIHRoZSBzYW1lIGxlYWRpbmcgc3BhY2luZyBhbmQgbWF4aW11bSBsaW5lCiAgICAjIGxlbmd0aAogICAgbXkgJGdyb3VwX2xlYWRlcl9sZW5ndGggICAgICAgPSAkcmdyb3VwX2xpbmVzLT5bMF0tPnsnbGVhZGluZ19zcGFjZV9jb3VudCd9OwogICAgbXkgJGdyb3VwX21heGltdW1fbGluZV9sZW5ndGggPSAkcmdyb3VwX2xpbmVzLT5bMF0tPnsnbWF4aW11bV9saW5lX2xlbmd0aCd9OwoKICAgIGZvcmVhY2ggbXkgJGxpbmUgKCBAeyRyZ3JvdXBfbGluZXN9ICkgewogICAgICAgICRzZWxmLT52YWxpZ25fb3V0cHV0X3N0ZXBfQSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbGluZSAgICAgICAgICAgICAgICAgPT4gJGxpbmUsCiAgICAgICAgICAgICAgICBtaW5fY2lfZ2FwICAgICAgICAgICA9PiAwLAogICAgICAgICAgICAgICAgZG9fbm90X2FsaWduICAgICAgICAgPT4gMCwKICAgICAgICAgICAgICAgIGdyb3VwX2xlYWRlcl9sZW5ndGggID0+ICRncm91cF9sZWFkZXJfbGVuZ3RoLAogICAgICAgICAgICAgICAgZXh0cmFfbGVhZGluZ19zcGFjZXMgPT4gJGV4dHJhX2xlYWRpbmdfc3BhY2VzLAogICAgICAgICAgICAgICAgbGV2ZWwgICAgICAgICAgICAgICAgPT4gJGdyb3VwX2xldmVsLAogICAgICAgICAgICAgICAgbWF4aW11bV9saW5lX2xlbmd0aCAgPT4gJGdyb3VwX21heGltdW1fbGluZV9sZW5ndGgsCiAgICAgICAgICAgIH0KICAgICAgICApOwogICAgfQoKICAgICMgTGV0IHRoZSBmb3JtYXR0ZXIga25vdyB0aGF0IHRoaXMgb2JqZWN0IGhhcyBiZWVuIHByb2Nlc3NlZCBhbmQgYW55CiAgICAjIHJlY292ZXJhYmxlIHNwYWNlcyBoYXZlIGJlZW4gaGFuZGxlZC4gIFRoaXMgaXMgbmVlZGVkIGZvciBzZXR0aW5nIHRoZQogICAgIyBjbG9zaW5nIHBhcmVuIGxvY2F0aW9uIGluIC1scCBtb2RlLgogICAgbXkgJG9iamVjdCA9ICRyZ3JvdXBfbGluZXMtPlswXS0+eydpbmRlbnRhdGlvbid9OwogICAgaWYgKCByZWYoJG9iamVjdCkgKSB7ICRvYmplY3QtPnNldF9yZWNvdmVyYWJsZV9zcGFjZXMoMCkgfQoKICAgICRzZWxmLT5pbml0aWFsaXplX2Zvcl9uZXdfZ3JvdXAoKTsKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIF9mbHVzaF9ncm91cF9saW5lcwoKeyAgICAjIyBjbG9zdXJlIGZvciBzdWIgc3dlZXBfdG9wX2Rvd24KCiAgICBteSAkcmFsbF9saW5lczsgICAgICAgICAjIGFsbCBvZiB0aGUgbGluZXMKICAgIG15ICRncnBfbGV2ZWw7ICAgICAgICAgICMgbGV2ZWwgb2YgYWxsIGxpbmVzCiAgICBteSAkcmdyb3VwczsgICAgICAgICAgICAjIGRlc2NyaWJlcyB0aGUgcGFydGl0aW9uIG9mIGxpbmVzIHdlIHdpbGwgbWFrZSBoZXJlCiAgICBteSAkZ3JvdXBfbGluZV9jb3VudDsgICAjIG51bWJlciBvZiBsaW5lcyBpbiBjdXJyZW50IHBhcnRpdGlvbgoKICAgIEJFR0lOIHsgJHJncm91cHMgPSBbXSB9CgogICAgc3ViIGluaXRpYWxpemVfZm9yX25ld19yZ3JvdXAgewogICAgICAgICRncm91cF9saW5lX2NvdW50ID0gMDsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgc3ViIGFkZF90b19yZ3JvdXAgewoKICAgICAgICBteSAoJGplbmQpID0gQF87CiAgICAgICAgbXkgJHJsaW5lID0gJHJhbGxfbGluZXMtPlskamVuZF07CgogICAgICAgIG15ICRqYmVnID0gJGplbmQ7CiAgICAgICAgaWYgKCAkZ3JvdXBfbGluZV9jb3VudCA9PSAwICkgewogICAgICAgICAgICBpbnN0YWxsX25ld19hbGlnbm1lbnRzKCRybGluZSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBteSAkcnZhbHMgPSBwb3AgQHskcmdyb3Vwc307CiAgICAgICAgICAgICRqYmVnID0gJHJ2YWxzLT5bMF07CiAgICAgICAgICAgIGNvcHlfb2xkX2FsaWdubWVudHMoICRybGluZSwgJHJhbGxfbGluZXMtPlskamJlZ10gKTsKICAgICAgICB9CiAgICAgICAgcHVzaCBAeyRyZ3JvdXBzfSwgWyAkamJlZywgJGplbmQsIHVuZGVmIF07CiAgICAgICAgJGdyb3VwX2xpbmVfY291bnQrKzsKICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgYWRkX3RvX3Jncm91cAoKICAgIHN1YiBnZXRfcmdyb3VwX2pyYW5nZSB7CgogICAgICAgIHJldHVybiBpZiAoICFAeyRyZ3JvdXBzfSApOwogICAgICAgIHJldHVybiBpZiAoICRncm91cF9saW5lX2NvdW50IDw9IDAgKTsKICAgICAgICBteSAoICRqYmVnLCAkamVuZCApID0gQHsgJHJncm91cHMtPlstMV0gfTsKICAgICAgICByZXR1cm4gKCAkamJlZywgJGplbmQgKTsKICAgIH0gIyMgZW5kIHN1YiBnZXRfcmdyb3VwX2pyYW5nZQoKICAgIHN1YiBlbmRfcmdyb3VwIHsKCiAgICAgICAgbXkgKCRpbWF4X2FsaWduKSA9IEBfOwogICAgICAgIHJldHVybiBpZiAoICFAeyRyZ3JvdXBzfSApOwogICAgICAgIHJldHVybiBpZiAoICRncm91cF9saW5lX2NvdW50IDw9IDAgKTsKCiAgICAgICAgbXkgKCAkamJlZywgJGplbmQgKSA9IEB7IHBvcCBAeyRyZ3JvdXBzfSB9OwogICAgICAgIHB1c2ggQHskcmdyb3Vwc30sIFsgJGpiZWcsICRqZW5kLCAkaW1heF9hbGlnbiBdOwoKICAgICAgICAjIFVuZG8gc29tZSBhbGlnbm1lbnRzIG9mIHBvb3IgdHdvLWxpbmUgY29tYmluYXRpb25zLgogICAgICAgICMgV2UgaGFkIHRvIHdhaXQgdW50aWwgbm93IHRvIGtub3cgdGhlIGxpbmUgY291bnQuCiAgICAgICAgaWYgKCAkamVuZCAtICRqYmVnID09IDEgKSB7CiAgICAgICAgICAgIG15ICRsaW5lXzAgPSAkcmFsbF9saW5lcy0+WyRqYmVnXTsKICAgICAgICAgICAgbXkgJGxpbmVfMSA9ICRyYWxsX2xpbmVzLT5bJGplbmRdOwoKICAgICAgICAgICAgbXkgJGltYXhfcGFpciA9ICRsaW5lXzEtPnsnaW1heF9wYWlyJ307CiAgICAgICAgICAgIGlmICggJGltYXhfcGFpciA+ICRpbWF4X2FsaWduICkgeyAkaW1heF9hbGlnbiA9ICRpbWF4X3BhaXIgfQoKICAgICAgICAgICAgIyMgZmxhZyBmb3IgcG9zc2libGUgZnV0dXJlIHVzZToKICAgICAgICAgICAgIyMgbXkgJGlzX2lzb2xhdGVkX3BhaXIgPSAkaW1heF9wYWlyIDwgMAogICAgICAgICAgICAjIyAgJiYgKCAkamJlZyA9PSAwCiAgICAgICAgICAgICMjICAgIHx8ICRyYWxsX2xpbmVzLT5bICRqYmVnIC0gMSBdLT57J2ltYXhfcGFpcid9IDwgMCApOwoKICAgICAgICAgICAgbXkgJGltYXhfcHJldiA9CiAgICAgICAgICAgICAgJGpiZWcgPiAwID8gJHJhbGxfbGluZXMtPlsgJGpiZWcgLSAxIF0tPnsnaW1heF9wYWlyJ30gOiAtMTsKCiAgICAgICAgICAgIG15ICggJGlzX21hcmdpbmFsLCAkaW1heF9hbGlnbl9maXggKSA9CiAgICAgICAgICAgICAgaXNfbWFyZ2luYWxfbWF0Y2goICRsaW5lXzAsICRsaW5lXzEsICRncnBfbGV2ZWwsICRpbWF4X2FsaWduLAogICAgICAgICAgICAgICAgJGltYXhfcHJldiApOwogICAgICAgICAgICBpZiAoJGlzX21hcmdpbmFsKSB7CiAgICAgICAgICAgICAgICBjb21iaW5lX2ZpZWxkcyggJGxpbmVfMCwgJGxpbmVfMSwgJGltYXhfYWxpZ25fZml4ICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGluaXRpYWxpemVfZm9yX25ld19yZ3JvdXAoKTsKICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgZW5kX3Jncm91cAoKICAgIHN1YiBibG9ja19wZW51bHRpbWF0ZV9tYXRjaCB7CgogICAgICAgICMgZW1lcmdlbmN5IHJlc2V0IHRvIHByZXZlbnQgc3dlZXBfbGVmdF90b19yaWdodCBmcm9tIHRyeWluZyB0byBtYXRjaCBhCiAgICAgICAgIyBmYWlsZWQgdGVybWluYWwgZWxzZSBtYXRjaAogICAgICAgIHJldHVybiBpZiAoIEB7JHJncm91cHN9IDw9IDEgKTsKICAgICAgICAkcmdyb3Vwcy0+Wy0yXS0+WzJdID0gLTE7CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGJsb2NrX3BlbnVsdGltYXRlX21hdGNoCgogICAgc3ViIHN3ZWVwX3RvcF9kb3duIHsKICAgICAgICBteSAoICRzZWxmLCAkcmxpbmVzLCAkZ3JvdXBfbGV2ZWwgKSA9IEBfOwoKICAgICAgICAjIFRoaXMgaXMgdGhlIGZpcnN0IG9mIHR3byBtYWpvciBzd2VlcHMgdG8gZmluZCBhbGlnbm1lbnRzLgogICAgICAgICMgVGhlIG90aGVyIGlzIHN3ZWVwX2xlZnRfdG9fcmlnaHQuCgogICAgICAgICMgR2l2ZW46CiAgICAgICAgIyAgICRybGluZXMgPSByZWYgdG8gaGFzaCBvZiBsaW5lcyBpbiB0aGlzIG1haW4gYWxpZ25tZW50IGdyb3VwCiAgICAgICAgIyAgICRncm91cF9sZXZlbCA9IGNvbW1vbiBpbmRlbnRhdGlvbiBsZXZlbCBvZiB0aGVzZSBsaW5lcwogICAgICAgICMgUmV0dXJuOgogICAgICAgICMgICAkcmdyb3VwcyA9IHJlZiB0byBoYXNoIG9mIHN1Ymdyb3VwcyBjcmVhdGVkCgogICAgICAgICMgUGFydGl0aW9uIHRoZSBzZXQgb2YgbGluZXMgaW50byBmaW5hbCBhbGlnbm1lbnQgc3ViZ3JvdXBzCiAgICAgICAgIyBhbmQgc3RvcmUgdGhlIGFsaWdubWVudHMgd2l0aCB0aGUgbGluZXMuCgogICAgICAgICMgVGhlIGFsaWdubWVudCBzdWJncm91cHMgd2UgYXJlIG1ha2luZyBoZXJlIGFyZSBncm91cHMgb2YgY29uc2VjdXRpdmUKICAgICAgICAjIGxpbmVzIHdoaWNoIGhhdmUgKDEpIGlkZW50aWNhbCBhbGlnbm1lbnQgdG9rZW5zIGFuZCAoMikgZG8gbm90CiAgICAgICAgIyBleGNlZWQgdGhlIGFsbG93YWJsZSBtYXhpbXVtIGxpbmUgbGVuZ3RoLiAgQSBsYXRlciBzd2VlcCBmcm9tCiAgICAgICAgIyBsZWZ0LXRvLXJpZ2h0ICgnc3dlZXBfbHInKSB3aWxsIGhhbmRsZSBhZGRpdGlvbmFsIGFsaWdubWVudHMuCgogICAgICAgICMgdHJhbnNmZXIgYXJncyB0byBjbG9zdXJlIHZhcmlhYmxlcwogICAgICAgICRyYWxsX2xpbmVzID0gJHJsaW5lczsKICAgICAgICAkZ3JwX2xldmVsICA9ICRncm91cF9sZXZlbDsKICAgICAgICAkcmdyb3VwcyAgICA9IFtdOwogICAgICAgIGluaXRpYWxpemVfZm9yX25ld19yZ3JvdXAoKTsKICAgICAgICByZXR1cm4gdW5sZXNzIEB7JHJsaW5lc307ICAgICMgc2hvdWxkbid0IGhhcHBlbgoKICAgICAgICAjIFVuc2V0IHRoZSBfZW5kX2dyb3VwIGZsYWcgZm9yIHRoZSBsYXN0IGxpbmUgaWYgaXQgaXQgc2V0IGJlY2F1c2UgaXQKICAgICAgICAjIGlzIG5vdCBuZWVkZWQgYW5kIGNhbiBjYXVzZXMgcHJvYmxlbXMgZm9yIC1scCBmb3JtYXR0aW5nCiAgICAgICAgJHJhbGxfbGluZXMtPlstMV0tPnsnZW5kX2dyb3VwJ30gPSAwOwoKICAgICAgICAjIExvb3Agb3ZlciBhbGwgbGluZXMgLi4uCiAgICAgICAgbXkgJGpsaW5lID0gLTE7CiAgICAgICAgZm9yZWFjaCBteSAkbmV3X2xpbmUgKCBAeyRyYWxsX2xpbmVzfSApIHsKICAgICAgICAgICAgJGpsaW5lKys7CgogICAgICAgICAgICAjIFN0YXJ0IGEgbmV3IHN1Ymdyb3VwIGlmIG5lY2Vzc2FyeQogICAgICAgICAgICBpZiAoICEkZ3JvdXBfbGluZV9jb3VudCApIHsKICAgICAgICAgICAgICAgIGFkZF90b19yZ3JvdXAoJGpsaW5lKTsKICAgICAgICAgICAgICAgIGlmICggJG5ld19saW5lLT57J2VuZF9ncm91cCd9ICkgewogICAgICAgICAgICAgICAgICAgIGVuZF9yZ3JvdXAoLTEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJGpfdGVybWluYWxfbWF0Y2ggPSAkbmV3X2xpbmUtPnsnal90ZXJtaW5hbF9tYXRjaCd9OwogICAgICAgICAgICBteSAoICRqYmVnLCAkamVuZF91dSApID0gZ2V0X3Jncm91cF9qcmFuZ2UoKTsKICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkamJlZykgKSB7CgogICAgICAgICAgICAgICAgIyBzYWZldHkgY2hlY2ssIHNob3VsZG4ndCBoYXBwZW4KICAgICAgICAgICAgICAgIHdhcm5pbmcoPDxFT00pOwpQcm9ncmFtIGJ1ZyBkZXRlY3RlZCBpbiBQZXJsOjpUaWR5OjpWZXJ0aWNhbEFsaWduZXIgc3ViIHN3ZWVwX3RvcF9kb3duCnVuZGVmaW5lZCBpbmRleCBmb3IgZ3JvdXAgbGluZSBjb3VudCAkZ3JvdXBfbGluZV9jb3VudApFT00KICAgICAgICAgICAgICAgICRqYmVnID0gJGpsaW5lOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG15ICRiYXNlX2xpbmUgPSAkcmFsbF9saW5lcy0+WyRqYmVnXTsKCiAgICAgICAgICAgICMgSW5pdGlhbGl6ZSBhIGdsb2JhbCBmbGFnIHNheWluZyBpZiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBncm91cAogICAgICAgICAgICAjIHNob3VsZCBtYXRjaCBlbmQgb2YgZ3JvdXAgYW5kIGFsc28gdGVybWluYXRlIHRoZSBncm91cC4gIFRoZXJlCiAgICAgICAgICAgICMgc2hvdWxkIGJlIG5vIHJldHVybnMgYmV0d2VlbiBoZXJlIGFuZCB3aGVyZSB0aGUgZmxhZyBpcyBoYW5kbGVkCiAgICAgICAgICAgICMgYXQgdGhlIGJvdHRvbS4KICAgICAgICAgICAgbXkgJGNvbF9tYXRjaGluZ190ZXJtaW5hbCA9IDA7CiAgICAgICAgICAgIGlmICggZGVmaW5lZCgkal90ZXJtaW5hbF9tYXRjaCkgKSB7CgogICAgICAgICAgICAgICAgIyByZW1lbWJlciB0aGUgY29sdW1uIG9mIHRoZSB0ZXJtaW5hbCA/IG9yIHsgdG8gbWF0Y2ggd2l0aAogICAgICAgICAgICAgICAgJGNvbF9tYXRjaGluZ190ZXJtaW5hbCA9CiAgICAgICAgICAgICAgICAgICRiYXNlX2xpbmUtPmdldF9jb2x1bW4oJGpfdGVybWluYWxfbWF0Y2gpOwoKICAgICAgICAgICAgICAgICMgSWdub3JlIGFuIHVuZGVmaW5lZCB2YWx1ZSBhcyBhIGRlZmVuc2l2ZSBzdGVwOyBzaG91bGRuJ3QKICAgICAgICAgICAgICAgICMgbm9ybWFsbHkgaGFwcGVuLgogICAgICAgICAgICAgICAgJGNvbF9tYXRjaGluZ190ZXJtaW5hbCA9IDAKICAgICAgICAgICAgICAgICAgdW5sZXNzIGRlZmluZWQoJGNvbF9tYXRjaGluZ190ZXJtaW5hbCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIEFsbG93IGhhbmdpbmcgc2lkZSBjb21tZW50IHRvIGpvaW4gY3VycmVudCBncm91cCwgaWYgYW55LiAgVGhlCiAgICAgICAgICAgICMgb25seSBhZHZhbnRhZ2UgaXMgdG8ga2VlcCB0aGUgb3RoZXIgdG9rZW5zIGluIHRoZSBzYW1lIGdyb3VwLiBGb3IKICAgICAgICAgICAgIyBleGFtcGxlLCB0aGlzIHdvdWxkIG1ha2UgdGhlICc9JyBhbGlnbiBoZXJlOgogICAgICAgICAgICAjICAkYXggICAgICAgICA9IDE7ICAgICAgICAgICAjIHNpZGUgY29tbWVudAogICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGhhbmdpbmcgc2lkZSBjb21tZW50CiAgICAgICAgICAgICMgICRib29uZG9nZ2xlID0gNTsgICAgICAgICAgICMgc2lkZSBjb21tZW50CiAgICAgICAgICAgICMgICRiZWV0bGUgICAgID0gNTsgICAgICAgICAgICMgc2lkZSBjb21tZW50CgogICAgICAgICAgICAjIGhlcmUgaXMgYW5vdGhlciBleGFtcGxlLi4KCiAgICAgICAgICAgICMgIF9ydG9jX25hbWVfY291bnQgICA9PiB7fSwgICAgICAgICAgICAgICAgICAgIyBoYXNoIHRvIHRyYWNrIC4uCiAgICAgICAgICAgICMgIF9ycGFja2FnZV9zdGFjayAgICA9PiBbXSwgICAgICAgICAgICAgICAgICAgIyBzdGFjayB0byBjaGVjayAuLgogICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbmFtZSBjaGFuZ2VzCiAgICAgICAgICAgICMgIF9ybGFzdF9sZXZlbCAgICAgICA9PiBcJGxhc3RfbGV2ZWwsICAgICAgICAgIyBicmFjZSBpbmRlbnRhdGlvbgogICAgICAgICAgICAjCiAgICAgICAgICAgICMKICAgICAgICAgICAgIyBJZiB0aGlzIHdlcmUgbm90IGRlc2lyZWQsIHRoZSBuZXh0IHN0ZXAgY291bGQgYmUgc2tpcHBlZC4KICAgICAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgIGlmICggJG5ld19saW5lLT57J2lzX2hhbmdpbmdfc2lkZV9jb21tZW50J30gKSB7CiAgICAgICAgICAgICAgICBqb2luX2hhbmdpbmdfY29tbWVudCggJG5ld19saW5lLCAkYmFzZV9saW5lICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgSWYgdGhpcyBsaW5lIGhhcyBubyBtYXRjaGluZyB0b2tlbnMsIHRoZW4gZmx1c2ggb3V0IHRoZSBsaW5lcwogICAgICAgICAgICAjIEJFRk9SRSB0aGlzIGxpbmUgdW5sZXNzIGJvdGggaXQgYW5kIHRoZSBwcmV2aW91cyBsaW5lIGhhdmUgc2lkZQogICAgICAgICAgICAjIGNvbW1lbnRzLiAgVGhpcyBwcmV2ZW50cyB0aGlzIGxpbmUgZnJvbSBwdXNoaW5nIHNpZGUgY29tbWVudHMgb3V0CiAgICAgICAgICAgICMgdG8gdGhlIHJpZ2h0LgogICAgICAgICAgICBlbHNpZiAoICRuZXdfbGluZS0+eydqbWF4J30gPT0gMSApIHsKCiAgICAgICAgICAgICAgICAjIFRoZXJlIGFyZSBubyBtYXRjaGluZyB0b2tlbnMsIHNvIG5vdyBjaGVjayBzaWRlIGNvbW1lbnRzLgogICAgICAgICAgICAgICAgIyBQcm9ncmFtbWluZyBub3RlOiBhY2Nlc3NpbmcgYXJyYXlzIHdpdGggaW5kZXggLTEgaXMKICAgICAgICAgICAgICAgICMgcmlza3kgaW4gUGVybCwgYnV0IHdlIGhhdmUgdmVyaWZpZWQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lCiAgICAgICAgICAgICAgICAjIGxpbmUgaW4gdGhlIGdyb3VwIGFuZCB0aGF0IHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBmaWVsZCwKICAgICAgICAgICAgICAgIG15ICRwcmV2X2NvbW1lbnQgPQogICAgICAgICAgICAgICAgICAkcmFsbF9saW5lcy0+WyAkamxpbmUgLSAxIF0tPnsncmZpZWxkcyd9LT5bLTFdOwogICAgICAgICAgICAgICAgbXkgJHNpZGVfY29tbWVudCA9ICRuZXdfbGluZS0+eydyZmllbGRzJ30tPlstMV07CgogICAgICAgICAgICAgICAgIyBkbyBub3QgZW5kIGdyb3VwIGlmIGJvdGggbGluZXMgaGF2ZSBzaWRlIGNvbW1lbnRzCiAgICAgICAgICAgICAgICBpZiAoICEkc2lkZV9jb21tZW50IHx8ICEkcHJldl9jb21tZW50ICkgewoKICAgICAgICAgICAgICAgICAgICAjIE90aGVyd2lzZSAtIFZTTiBQQVRDSCBmb3IgYSBzaW5nbGUgbnVtYmVyOgogICAgICAgICAgICAgICAgICAgICMgLSBkbyBub3QgZW5kIGdyb3VwIGlmIG51bWVyaWMgYW5kIG5vIHNpZGUgY29tbWVudCwgb3IKICAgICAgICAgICAgICAgICAgICAjIC0gZW5kIGlmICFudW1lcmljIG9yIHNpZGUgY29tbWVudAogICAgICAgICAgICAgICAgICAgIG15ICRwYXQgICAgICAgID0gJG5ld19saW5lLT57J3JwYXR0ZXJucyd9LT5bMF07CiAgICAgICAgICAgICAgICAgICAgbXkgJGlzX251bWVyaWMgPSAkck9wdHNfdmFsaWduX3NpZ25lZF9udW1iZXJzCiAgICAgICAgICAgICAgICAgICAgICAmJiAoICRwYXQgZXEgJ24sJwogICAgICAgICAgICAgICAgICAgICAgICB8fCAkcGF0IGVxICduLGInICk7CiAgICAgICAgICAgICAgICAgICAgZW5kX3Jncm91cCgtMSkgaWYgKCAhJGlzX251bWVyaWMgfHwgJHNpZGVfY29tbWVudCApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIyNvazogY29udGludWUKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBTZWUgaWYgdGhlIG5ldyBsaW5lIG1hdGNoZXMgYW5kIGZpdHMgdGhlIGN1cnJlbnQgZ3JvdXAsCiAgICAgICAgICAgICMgaWYgaXQgc3RpbGwgZXhpc3RzLiBGbHVzaCB0aGUgY3VycmVudCBncm91cCBpZiBub3QuCiAgICAgICAgICAgIG15ICRtYXRjaF9jb2RlOwogICAgICAgICAgICBpZiAoJGdyb3VwX2xpbmVfY291bnQpIHsKICAgICAgICAgICAgICAgICggJG1hdGNoX2NvZGUsIG15ICRpbWF4X2FsaWduICkgPQogICAgICAgICAgICAgICAgICAkc2VsZi0+Y2hlY2tfbWF0Y2goICRuZXdfbGluZSwgJGJhc2VfbGluZSwKICAgICAgICAgICAgICAgICAgICAkcmFsbF9saW5lcy0+WyAkamxpbmUgLSAxIF0sCiAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2xpbmVfY291bnQgKTsKICAgICAgICAgICAgICAgIGlmICggJG1hdGNoX2NvZGUgIT0gMiApIHsgZW5kX3Jncm91cCgkaW1heF9hbGlnbikgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFN0b3JlIHRoZSBuZXcgbGluZQogICAgICAgICAgICBhZGRfdG9fcmdyb3VwKCRqbGluZSk7CgogICAgICAgICAgICBpZiAoIGRlZmluZWQoJGpfdGVybWluYWxfbWF0Y2gpICkgewoKICAgICAgICAgICAgICAgICMgRGVjaWRlIGlmIHdlIHNob3VsZCBmaXggYSB0ZXJtaW5hbCBtYXRjaC4gV2UgY2FuIGVpdGhlcjoKICAgICAgICAgICAgICAgICMgMS4gZml4IGl0IGFuZCBwcmV2ZW50IHRoZSBzd2VlcF9sciBmcm9tIGNoYW5naW5nIGl0LCBvcgogICAgICAgICAgICAgICAgIyAyLiBsZWF2ZSBpdCBhbG9uZSBhbmQgbGV0IHN3ZWVwX2xyIHRyeSB0byBmaXggaXQuCgogICAgICAgICAgICAgICAgIyBUaGUgY3VycmVudCBsb2dpYyBpcyB0byBmaXggaXQgaWY6CiAgICAgICAgICAgICAgICAjIC1pdCBoYXMgbm90IGpvaW5lZCB0byBwcmV2aW91cyBsaW5lcywKICAgICAgICAgICAgICAgICMgLWFuZCBlaXRoZXIgdGhlIHByZXZpb3VzIHN1Ymdyb3VwIGhhcyBqdXN0IDEgbGluZSwgb3IKICAgICAgICAgICAgICAgICMgLXRoaXMgbGluZSBtYXRjaGVkIGJ1dCBkaWQgbm90IGZpdCAoc28gc3dlZXAgd29uJ3Qgd29yaykKICAgICAgICAgICAgICAgIG15ICRmaXhpdDsKICAgICAgICAgICAgICAgIGlmICggJGdyb3VwX2xpbmVfY291bnQgPT0gMSApIHsKICAgICAgICAgICAgICAgICAgICAkZml4aXQgfHw9ICRtYXRjaF9jb2RlOwogICAgICAgICAgICAgICAgICAgIGlmICggISRmaXhpdCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBAeyRyZ3JvdXBzfSA+IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAoICRqYmVneCwgJGplbmR4ICkgPSBAeyAkcmdyb3Vwcy0+Wy0yXSB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJG5saW5lcyA9ICRqZW5keCAtICRqYmVneCArIDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZml4aXQgfHw9ICRubGluZXMgPD0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJGZpeGl0KSB7CiAgICAgICAgICAgICAgICAgICAgJGJhc2VfbGluZSA9ICRuZXdfbGluZTsKICAgICAgICAgICAgICAgICAgICBteSAkY29sX25vdyA9ICRiYXNlX2xpbmUtPmdldF9jb2x1bW4oJGpfdGVybWluYWxfbWF0Y2gpOwoKICAgICAgICAgICAgICAgICAgICAjIElnbm9yZSBhbiB1bmRlZmluZWQgdmFsdWUgYXMgYSBkZWZlbnNpdmUgc3RlcDsgc2hvdWxkbid0CiAgICAgICAgICAgICAgICAgICAgIyBub3JtYWxseSBoYXBwZW4uCiAgICAgICAgICAgICAgICAgICAgJGNvbF9ub3cgPSAwIHVubGVzcyBkZWZpbmVkKCRjb2xfbm93KTsKCiAgICAgICAgICAgICAgICAgICAgbXkgJHBhZCA9ICRjb2xfbWF0Y2hpbmdfdGVybWluYWwgLSAkY29sX25vdzsKICAgICAgICAgICAgICAgICAgICBteSAkcGFkZGluZ19hdmFpbGFibGUgPQogICAgICAgICAgICAgICAgICAgICAgJGJhc2VfbGluZS0+Z2V0X2F2YWlsYWJsZV9zcGFjZV9vbl9yaWdodCgpOwogICAgICAgICAgICAgICAgICAgIGlmICggJGNvbF9ub3cgJiYgJHBhZCA+IDAgJiYgJHBhZCA8PSAkcGFkZGluZ19hdmFpbGFibGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRiYXNlX2xpbmUtPmluY3JlYXNlX2ZpZWxkX3dpZHRoKCAkal90ZXJtaW5hbF9tYXRjaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYWQgKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgZG8gbm90IGxldCBzd2VlcF9sZWZ0X3RvX3JpZ2h0IGNoYW5nZSBhbiBpc29sYXRlZCAnZWxzZScKICAgICAgICAgICAgICAgICAgICBpZiAoICEkbmV3X2xpbmUtPnsnaXNfdGVybWluYWxfdGVybmFyeSd9ICkgewogICAgICAgICAgICAgICAgICAgICAgICBibG9ja19wZW51bHRpbWF0ZV9tYXRjaCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVuZF9yZ3JvdXAoLTEpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGVuZCB0aGUgZ3JvdXAgaWYgd2Uga25vdyB3ZSBjYW5ub3QgbWF0Y2ggbmV4dCBsaW5lLgogICAgICAgICAgICBlbHNpZiAoICRuZXdfbGluZS0+eydlbmRfZ3JvdXAnfSApIHsKICAgICAgICAgICAgICAgIGVuZF9yZ3JvdXAoLTEpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICMjb2s6IGNvbnRpbnVlCiAgICAgICAgICAgIH0KICAgICAgICB9ICMjIGVuZCBsb29wIG92ZXIgbGluZXMKCiAgICAgICAgZW5kX3Jncm91cCgtMSk7CiAgICAgICAgcmV0dXJuICgkcmdyb3Vwcyk7CiAgICB9ICMjIGVuZCBzdWIgc3dlZXBfdG9wX2Rvd24KfQoKc3ViIHR3b19saW5lX3BhZCB7CgogICAgbXkgKCAkbGluZV9tLCAkbGluZSwgJGltYXhfbWluICkgPSBAXzsKCiAgICAjIERlY2lkZSBpZiB0d28gYWRqYWNlbnQsIGlzb2xhdGVkIGxpbmVzIHNob3VsZCBiZSBhbGlnbmVkCgogICAgIyBHaXZlbjoKICAgICMgICRsaW5lX20sICRsaW5lID0gdHdvIGlzb2xhdGVkIChsaXN0KSBsaW5lcwogICAgIyAgaW1heF9taW4gPSBudW1iZXIgb2YgY29tbW9uIGFsaWdubWVudCB0b2tlbnMKICAgICMgUmV0dXJuOgogICAgIyAgJHBhZF9tYXggPSBtYXhpbXVtIHN1Z2dlc3RlZCBwYWQgZGlzdGFuY2UKICAgICMgICAgICAgICAgID0gMCBpZiBhbGlnbm1lbnQgbm90IHJlY29tbWVuZGVkCgogICAgIyBBbGxvdyBhbGlnbm1lbnQgaWYgdGhlIGRpZmZlcmVuY2UgaW4gdGhlIHR3byB1bnBhZGRlZCBsaW5lIGxlbmd0aHMKICAgICMgaXMgbm90IG1vcmUgdGhhbiBlaXRoZXIgbGluZSBsZW5ndGguICBUaGUgaWRlYSBpcyB0byBhdm9pZAogICAgIyBhbGlnbmluZyBsaW5lcyB3aXRoIHZlcnkgZGlmZmVyZW50IGZpZWxkIGxlbmd0aHMsIGxpa2UgdGhlc2UgdHdvOgoKICAgICMgICBbCiAgICAjICAgICAgICdWQVJDSEFSJywgREJJOjpTUUxfVkFSQ0hBUiwgdW5kZWYsICInIiwgIiciLCB1bmRlZiwgMCwgMSwKICAgICMgICAgICAgMSwgMCwgMCwgMCwgdW5kZWYsIDAsIDAKICAgICMgICBdOwoKICAgICMgTm90ZSB0aGF0IHRoaXMgaXMgb25seSBmb3IgdHdvIGxpbmVzIHdoaWNoIGRvIG5vdCBoYXZlIGFsaWdubWVudCB0b2tlbnMKICAgICMgaW4gY29tbW9uIHdpdGggYW55IG90aGVyIGxpbmVzLiAgSXQgaXMgaW50ZW5kZWQgZm9yIGxpc3RzLCBidXQgaXQgbWlnaHQKICAgICMgYWxzbyBiZSB1c2VkIGZvciB0d28gbm9uLWxpc3QgbGluZXMgd2l0aCBhIGNvbW1vbiBsZWFkaW5nICc9Jy4KCiAgICBteSAkcmZpZWxkX2xlbmd0aHMgICA9ICRsaW5lLT57J3JmaWVsZF9sZW5ndGhzJ307CiAgICBteSAkcmZpZWxkX2xlbmd0aHNfbSA9ICRsaW5lX20tPnsncmZpZWxkX2xlbmd0aHMnfTsKCiAgICAjIFNhZmV0eSBjaGVjayAtIHNob3VsZG4ndCBoYXBwZW4KICAgIHJldHVybiAwCiAgICAgIGlmICggJGltYXhfbWluID49IEB7JHJmaWVsZF9sZW5ndGhzfQogICAgICAgIHx8ICRpbWF4X21pbiA+PSBAeyRyZmllbGRfbGVuZ3Roc19tfSApOwoKICAgIG15ICRsZW5zdW1fbSA9IDA7CiAgICBteSAkbGVuc3VtICAgPSAwOwogICAgZm9yZWFjaCBteSAkaSAoIDAgLi4gJGltYXhfbWluICkgewogICAgICAgICRsZW5zdW1fbSArPSAkcmZpZWxkX2xlbmd0aHNfbS0+WyRpXTsKICAgICAgICAkbGVuc3VtICAgKz0gJHJmaWVsZF9sZW5ndGhzLT5bJGldOwogICAgfQoKICAgIG15ICggJGxlbm1pbiwgJGxlbm1heCApID0KICAgICAgJGxlbnN1bSA+PSAkbGVuc3VtX20gPyAoICRsZW5zdW1fbSwgJGxlbnN1bSApIDogKCAkbGVuc3VtLCAkbGVuc3VtX20gKTsKCiAgICBteSAkcGF0dGVybnNfbWF0Y2g7CiAgICBpZiAoICRsaW5lX20tPnsnbGlzdF90eXBlJ30gJiYgJGxpbmUtPnsnbGlzdF90eXBlJ30gKSB7CiAgICAgICAgJHBhdHRlcm5zX21hdGNoID0gMTsKICAgICAgICBteSAkcnBhdHRlcm5zX20gPSAkbGluZV9tLT57J3JwYXR0ZXJucyd9OwogICAgICAgIG15ICRycGF0dGVybnMgICA9ICRsaW5lLT57J3JwYXR0ZXJucyd9OwogICAgICAgIGZvcmVhY2ggbXkgJGkgKCAwIC4uICRpbWF4X21pbiApIHsKICAgICAgICAgICAgbXkgJHBhdCAgID0gJHJwYXR0ZXJucy0+WyRpXTsKICAgICAgICAgICAgbXkgJHBhdF9tID0gJHJwYXR0ZXJuc19tLT5bJGldOwoKICAgICAgICAgICAgIyBWU04gUEFUQ0g6IGFsbG93IG51bWJlcnMgdG8gbWF0Y2ggcXVvdGVzCiAgICAgICAgICAgIGlmICggJHBhdF9tIG5lICRwYXQgJiYgbGVuZ3RoKCRwYXRfbSkgZXEgbGVuZ3RoKCRwYXQpICkgewogICAgICAgICAgICAgICAgJHBhdCAgID1+IHRyL24vUS87CiAgICAgICAgICAgICAgICAkcGF0X20gPX4gdHIvbi9RLzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAkcGF0IG5lICRwYXRfbSApIHsgJHBhdHRlcm5zX21hdGNoID0gMDsgbGFzdDsgfQogICAgICAgIH0KICAgIH0KCiAgICBteSAkcGFkX21heCA9ICRsZW5tYXg7CiAgICBpZiAoICEkcGF0dGVybnNfbWF0Y2ggJiYgJGxlbm1heCA+IDIgKiAkbGVubWluICkgeyAkcGFkX21heCA9IDAgfQoKICAgIHJldHVybiAkcGFkX21heDsKfSAjIyBlbmQgc3ViIHR3b19saW5lX3BhZAoKc3ViIHN3ZWVwX2xlZnRfdG9fcmlnaHQgewoKICAgIG15ICggJHJsaW5lcywgJHJncm91cHMsICRncm91cF9sZXZlbCApID0gQF87CgogICAgIyBUaGlzIGlzIHRoZSBzZWNvbmQgb2YgdHdvIG1ham9yIHN3ZWVwcyB0byBmaW5kIGFsaWdubWVudHMuCiAgICAjIFRoZSBvdGhlciBpcyBzd2VlcF90b3BfZG93bi4KCiAgICAjIEdpdmVuOgogICAgIyAgICRybGluZXMgPSByZWYgdG8gaGFzaCBvZiBsaW5lcyBpbiB0aGlzIG1haW4gYWxpZ25tZW50IGdyb3VwCiAgICAjICAgJHJncm91cHMgPSByZWYgdG8gaGFzaCBvZiBzdWJncm91cHMKICAgICMgICAkZ3JvdXBfbGV2ZWwgPSBjb21tb24gaW5kZW50YXRpb24gbGV2ZWwgb2YgdGhlc2UgbGluZXMKICAgICMgVGFzazoKICAgICMgICBhZGQgbGVhZGluZyBhbGlnbm1lbnRzIHdoZXJlIHBvc3NpYmxlCgogICAgIyBTbyBmYXIgd2UgaGF2ZSBkaXZpZGVkIHRoZSBsaW5lcyBpbnRvIGdyb3VwcyBoYXZpbmcgYW4gZXF1YWwgbnVtYmVyIG9mCiAgICAjIGlkZW50aWNhbCBhbGlnbm1lbnRzLiAgSGVyZSB3ZSBhcmUgZ29pbmcgdG8gbG9vayBmb3IgY29tbW9uIGxlYWRpbmcKICAgICMgYWxpZ25tZW50cyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgZ3JvdXBzIGFuZCBhbGlnbiB0aGVtIHdoZW4gcG9zc2libGUuCiAgICAjIEZvciBleGFtcGxlLCB0aGUgdGhyZWUgbGluZXMgYmVsb3cgYXJlIGluIHRocmVlIGdyb3VwcyBiZWNhdXNlIGVhY2ggbGluZQogICAgIyBoYXMgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGNvbW1hcy4gIEluIHRoaXMgcm91dGluZSB3ZSB3aWxsIHN3ZWVwIGZyb20KICAgICMgbGVmdCB0byByaWdodCwgYWxpZ25pbmcgdGhlIGxlYWRpbmcgY29tbWFzIGFzIHdlIGdvLCBidXQgc3RvcHBpbmcgaWYgd2UKICAgICMgaGl0IHRoZSBsaW5lIGxlbmd0aCBsaW1pdC4KCiAgICAjICBteSAoICRudW0sICRudW1pLCAkbnVtaiwgICR4eXphLCAka2EsICAgJHh5emIsICRrYiwgJGFmZiwgJGVycm9yICk7CiAgICAjICBteSAoICRpLCAgICRqLCAgICAkZXJyb3IsICRhZmYsICAkYXN1bSwgJGF2ZWMgKTsKICAgICMgIG15ICggJGttLCAgJGFyZWEsICR2YXJlYSApOwoKICAgICMgbm90aGluZyB0byBkbyBpZiBqdXN0IG9uZSBncm91cAogICAgbXkgJG5nX21heCA9IEB7JHJncm91cHN9IC0gMTsKICAgIHJldHVybiBpZiAoICRuZ19tYXggPD0gMCApOwoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgU3RlcCAxOiBMb29wIG92ZXIgZ3JvdXBzIHRvIGZpbmQgYWxsIGNvbW1vbiBsZWFkaW5nIGFsaWdubWVudCB0b2tlbnMKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBteSAkbGluZTsKICAgIG15ICRydG9rZW5zOwogICAgbXkgJGltYXg7ICAgICAjIGluZGV4IG9mIG1heGltdW0gbm9uLXNpZGUtY29tbWVudCBhbGlnbm1lbnQgdG9rZW4KICAgIG15ICRpc3RvcDsgICAgIyBhbiBvcHRpb25hbCBzdG9wcGluZyBpbmRleAogICAgbXkgJGpiZWc7ICAgICAjIHN0YXJ0aW5nIGxpbmUgaW5kZXgKICAgIG15ICRqZW5kOyAgICAgIyBlbmRpbmcgbGluZSBpbmRleAoKICAgIG15ICRsaW5lX207CiAgICBteSAkcnRva2Vuc19tOwogICAgbXkgJGltYXhfbTsKICAgIG15ICRpc3RvcF9tOwogICAgbXkgJGpiZWdfbTsKICAgIG15ICRqZW5kX207CgogICAgbXkgJGlzdG9wX21tOwoKICAgICMgTG9vayBhdCBuZWlnaGJvcmluZyBwYWlycyBvZiBncm91cHMgYW5kIGZvcm0gYSBzaW1wbGUgbGlzdAogICAgIyBvZiBhbGwgY29tbW9uIGxlYWRpbmcgYWxpZ25tZW50IHRva2Vucy4gRm9yZWFjaCBzdWNoIG1hdGNoIHdlCiAgICAjIHN0b3JlIFskaSwgJG5nXSwgd2hlcmUKICAgICMgICRpID0gaW5kZXggb2YgdGhlIHRva2VuIGluIHRoZSBsaW5lICgwLDEsLi4uKQogICAgIyAgJG5nIGlzIHRoZSBzZWNvbmQgb2YgdGhlIHR3byBncm91cHMgd2l0aCB0aGlzIGNvbW1vbiB0b2tlbgogICAgbXkgQGljb21tb247CgogICAgIyBIYXNoIHRvIGhvbGQgdGhlIG1heGltdW0gYWxpZ25tZW50IGNoYW5nZSBmb3IgYW55IGdyb3VwCiAgICBteSAlbWF4X21vdmU7CgogICAgIyBhIHNtYWxsIG51bWJlciBvZiBjb2x1bW5zCiAgICBteSAkc2hvcnRfcGFkID0gNDsKCiAgICBteSAkbmcgPSAtMTsKICAgIGZvcmVhY2ggbXkgJGl0ZW0gKCBAeyRyZ3JvdXBzfSApIHsKICAgICAgICAkbmcrKzsKCiAgICAgICAgJGlzdG9wX21tID0gJGlzdG9wX207CgogICAgICAgICMgc2F2ZSBfbSB2YWx1ZXMgb2YgcHJldmlvdXMgZ3JvdXAKICAgICAgICAkbGluZV9tICAgID0gJGxpbmU7CiAgICAgICAgJHJ0b2tlbnNfbSA9ICRydG9rZW5zOwogICAgICAgICRpbWF4X20gICAgPSAkaW1heDsKICAgICAgICAkaXN0b3BfbSAgID0gJGlzdG9wOwogICAgICAgICRqYmVnX20gICAgPSAkamJlZzsKICAgICAgICAkamVuZF9tICAgID0gJGplbmQ7CgogICAgICAgICMgR2V0IHZhbHVlcyBmb3IgdGhpcyBncm91cC4gTm90ZSB0aGF0IHdlIGp1c3QgaGF2ZSB0byB1c2UgdmFsdWVzIGZvcgogICAgICAgICMgb25lIG9mIHRoZSBsaW5lcyBvZiB0aGUgZ3JvdXAgc2luY2UgYWxsIG1lbWJlcnMgaGF2ZSB0aGUgc2FtZQogICAgICAgICMgYWxpZ25tZW50cy4KICAgICAgICAoICRqYmVnLCAkamVuZCwgJGlzdG9wICkgPSBAeyRpdGVtfTsKCiAgICAgICAgJGxpbmUgICAgPSAkcmxpbmVzLT5bJGpiZWddOwogICAgICAgICRydG9rZW5zID0gJGxpbmUtPnsncnRva2Vucyd9OwogICAgICAgICRpbWF4ICAgID0gJGxpbmUtPnsnam1heCd9IC0gMjsKICAgICAgICAkaXN0b3AgICA9IC0xICAgIGlmICggIWRlZmluZWQoJGlzdG9wKSApOwogICAgICAgICRpc3RvcCAgID0gJGltYXggaWYgKCAkaXN0b3AgPiAkaW1heCApOwoKICAgICAgICAjIEluaXRpYWxpemUgb24gZmlyc3QgZ3JvdXAKICAgICAgICBuZXh0IGlmICggJG5nID09IDAgKTsKCiAgICAgICAgIyBVc2UgdGhlIG1pbmltdW0gaW5kZXggbGltaXQgb2YgdGhlIHR3byBncm91cHMKICAgICAgICBteSAkaW1heF9taW4gPSAkaW1heCA+ICRpbWF4X20gPyAkaW1heF9tIDogJGltYXg7CgogICAgICAgICMgQWxzbyBpbXBvc2UgYSBsaW1pdCBpZiBnaXZlbi4KICAgICAgICBpZiAoICRpc3RvcF9tIDwgJGltYXhfbWluICkgewogICAgICAgICAgICAkaW1heF9taW4gPSAkaXN0b3BfbTsKICAgICAgICB9CgogICAgICAgICMgU3BlY2lhbCB0cmVhdG1lbnQgb2YgdHdvIG9uZS1saW5lIGdyb3VwcyBpc29sYXRlZCBmcm9tIG90aGVyIGxpbmVzLAogICAgICAgICMgdW5sZXNzIHRoZXkgZm9ybSBhIHNpbXBsZSBsaXN0IG9yIGEgdGVybWluYWwgbWF0Y2guICBPdGhlcndpc2UgdGhlCiAgICAgICAgIyBhbGlnbm1lbnQgY2FuIGxvb2sgc3RyYW5nZSBpbiBzb21lIGNhc2VzLgogICAgICAgIG15ICRsaXN0X3R5cGUgPSAkcmxpbmVzLT5bJGpiZWddLT57J2xpc3RfdHlwZSd9OwogICAgICAgIGlmICgKICAgICAgICAgICAgICAgJGplbmQgPT0gJGpiZWcKICAgICAgICAgICAgJiYgJGplbmRfbSA9PSAkamJlZ19tCiAgICAgICAgICAgICYmICggJG5nID09IDEgfHwgJGlzdG9wX21tIDwgMCApCiAgICAgICAgICAgICYmICggJG5nID09ICRuZ19tYXggfHwgJGlzdG9wIDwgMCApCiAgICAgICAgICAgICYmICEkbGluZS0+eydqX3Rlcm1pbmFsX21hdGNoJ30KCiAgICAgICAgICAgICMgT25seSBkbyB0aGlzIGZvciBpbXBlcmZlY3QgbWF0Y2hlcy4gVGhpcyBpcyBub3JtYWxseSB0cnVlIGV4Y2VwdAogICAgICAgICAgICAjIHdoZW4gdHdvIHBlcmZlY3QgbWF0Y2hlcyBjYW5ub3QgZm9ybSBhIGdyb3VwIGJlY2F1c2UgdGhlIGxpbmUKICAgICAgICAgICAgIyBsZW5ndGggbGltaXQgd291bGQgYmUgZXhjZWVkZWQuIEluIHRoYXQgY2FzZSB3ZSBjYW4gc3RpbGwgdHJ5CiAgICAgICAgICAgICMgdG8gbWF0Y2ggYXMgbWFueSBhbGlnbm1lbnRzIGFzIHBvc3NpYmxlLgogICAgICAgICAgICAmJiAoICRpbWF4ICE9ICRpbWF4X20gfHwgJGlzdG9wX20gIT0gJGltYXhfbSApCiAgICAgICAgICApCiAgICAgICAgewoKICAgICAgICAgICAgIyBXZSB3aWxsIGp1c3QgYWxpZ24gYXNzaWdubWVudHMgYW5kIHNpbXBsZSBsaXN0cwogICAgICAgICAgICBuZXh0IGlmICggJGltYXhfbWluIDwgMCApOwogICAgICAgICAgICBuZXh0CiAgICAgICAgICAgICAgaWYgKCAkcnRva2Vucy0+WzBdICF+IC9ePVxkLwogICAgICAgICAgICAgICAgJiYgISRsaXN0X3R5cGUgKTsKCiAgICAgICAgICAgICMgSW4gdGhpcyBjYXNlIHdlIHdpbGwgbGltaXQgcGFkZGluZyB0byBhIHNob3J0IGRpc3RhbmNlLiAgVGhpcwogICAgICAgICAgICAjIGlzIGEgY29tcHJvbWlzZSB0byBrZWVwIHNvbWUgdmVydGljYWwgYWxpZ25tZW50IGJ1dCBwcmV2ZW50IGxhcmdlCiAgICAgICAgICAgICMgZ2Fwcywgd2hpY2ggZG8gbm90IGxvb2sgZ29vZCBmb3IganVzdCB0d28gbGluZXMuCiAgICAgICAgICAgIG15ICRwYWRfbWF4ID0KICAgICAgICAgICAgICB0d29fbGluZV9wYWQoICRybGluZXMtPlskamJlZ10sICRybGluZXMtPlskamJlZ19tXSwgJGltYXhfbWluICk7CiAgICAgICAgICAgIG5leHQgaWYgKCAhJHBhZF9tYXggKTsKICAgICAgICAgICAgbXkgJG5nX20gPSAkbmcgLSAxOwogICAgICAgICAgICAkbWF4X21vdmV7IiRuZ19tIn0gPSAkcGFkX21heDsKICAgICAgICAgICAgJG1heF9tb3ZleyIkbmcifSAgID0gJHBhZF9tYXg7CiAgICAgICAgfQoKICAgICAgICAjIExvb3AgdG8gZmluZCBhbGwgY29tbW9uIGxlYWRpbmcgdG9rZW5zLgogICAgICAgIGlmICggJGltYXhfbWluID49IDAgKSB7CiAgICAgICAgICAgIGZvcmVhY2ggbXkgJGkgKCAwIC4uICRpbWF4X21pbiApIHsKICAgICAgICAgICAgICAgIG15ICR0b2sgICA9ICRydG9rZW5zLT5bJGldOwogICAgICAgICAgICAgICAgbXkgJHRva19tID0gJHJ0b2tlbnNfbS0+WyRpXTsKICAgICAgICAgICAgICAgIGxhc3QgaWYgKCAkdG9rIG5lICR0b2tfbSApOwogICAgICAgICAgICAgICAgcHVzaCBAaWNvbW1vbiwgWyAkaSwgJG5nLCAkdG9rIF07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gdW5sZXNzIEBpY29tbW9uOwoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFN0ZXAgMjogUmVvcmRlciBhbmQgY29uc29saWRhdGUgdGhlIGxpc3QgaW50byBhIHRhc2sgbGlzdAogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAjIFdlIGhhdmUgdG8gd29yayBmaXJzdCBmcm9tIGxvd2VzdCB0b2tlbiBpbmRleCB0byBoaWdoZXN0LCB0aGVuIGJ5IGdyb3VwLAogICAgIyBzb3J0IG91ciBsaXN0IGZpcnN0IG9uIHRva2VuIGluZGV4IHRoZW4gZ3JvdXAgbnVtYmVyCiAgICBAaWNvbW1vbiA9IHNvcnQgeyAkYS0+WzBdIDw9PiAkYi0+WzBdIHx8ICRhLT5bMV0gPD0+ICRiLT5bMV0gfSBAaWNvbW1vbjsKCiAgICAjIE1ha2UgYSB0YXNrIGxpc3Qgb2YgdGhlIGZvcm0KICAgICMgICBbJGksIG5nX2JlZywgJG5nX2VuZCwgJHRva10sIC4uCiAgICAjIHdoZXJlCiAgICAjICAgJGkgaXMgdGhlIGluZGV4IG9mIHRoZSB0b2tlbiB0byBiZSBhbGlnbmVkCiAgICAjICAgJG5nX2JlZy4uJG5nX2VuZCBpcyB0aGUgZ3JvdXAgcmFuZ2UgZm9yIHRoaXMgYWN0aW9uCiAgICBteSBAdG9kbzsKICAgIG15ICggJGksICRuZ19lbmQsICR0b2sgKTsKICAgIGZvcmVhY2ggbXkgJGl0ZW0gKEBpY29tbW9uKSB7CiAgICAgICAgbXkgJG5nX2xhc3QgPSAkbmdfZW5kOwogICAgICAgIG15ICRpX2xhc3QgID0gJGk7CiAgICAgICAgKCAkaSwgJG5nX2VuZCwgJHRvayApID0gQHskaXRlbX07CiAgICAgICAgbXkgJG5nX2JlZyA9ICRuZ19lbmQgLSAxOwogICAgICAgIGlmICggZGVmaW5lZCgkbmdfbGFzdCkgJiYgJG5nX2JlZyA9PSAkbmdfbGFzdCAmJiAkaSA9PSAkaV9sYXN0ICkgewogICAgICAgICAgICBteSAkdmFyID0gcG9wKEB0b2RvKTsKICAgICAgICAgICAgJG5nX2JlZyA9ICR2YXItPlsxXTsKICAgICAgICB9CiAgICAgICAgbXkgKCAkcmF3X3RvaywgJGxldiwgJHRhZ191dSwgJHRva19jb3VudF91dSApID0KICAgICAgICAgIGRlY29kZV9hbGlnbm1lbnRfdG9rZW4oJHRvayk7CiAgICAgICAgcHVzaCBAdG9kbywgWyAkaSwgJG5nX2JlZywgJG5nX2VuZCwgJHJhd190b2ssICRsZXYgXTsKICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFN0ZXAgMzogRXhlY3V0ZSB0aGUgdGFzayBsaXN0CiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBkb19sZWZ0X3RvX3JpZ2h0X3N3ZWVwKAogICAgICAgIHsKICAgICAgICAgICAgcmxpbmVzICAgICAgPT4gJHJsaW5lcywKICAgICAgICAgICAgcmdyb3VwcyAgICAgPT4gJHJncm91cHMsCiAgICAgICAgICAgIHJ0b2RvICAgICAgID0+IFxAdG9kbywKICAgICAgICAgICAgcm1heF9tb3ZlICAgPT4gXCVtYXhfbW92ZSwKICAgICAgICAgICAgc2hvcnRfcGFkICAgPT4gJHNob3J0X3BhZCwKICAgICAgICAgICAgZ3JvdXBfbGV2ZWwgPT4gJGdyb3VwX2xldmVsLAogICAgICAgIH0KICAgICk7CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBzd2VlcF9sZWZ0X3RvX3JpZ2h0Cgp7ICAgICMjIGNsb3N1cmUgZm9yIHN1YiBkb19sZWZ0X3RvX3JpZ2h0X3N3ZWVwCgogICAgbXkgJWlzX2dvb2RfYWxpZ25tZW50X3Rva2VuOwoKICAgIEJFR0lOIHsKCiAgICAgICAgIyBPbmUgb2YgdGhlIG1vc3QgZGlmZmljdWx0IGFzcGVjdHMgb2YgdmVydGljYWwgYWxpZ25tZW50IGlzIGtub3dpbmcKICAgICAgICAjIHdoZW4gbm90IHRvIGFsaWduLiAgQWxpZ25tZW50IGNhbiBnbyBmcm9tIGxvb2tpbmcgdmVyeSBuaWNlIHRvIHZlcnkKICAgICAgICAjIGJhZCB3aGVuIG92ZXJkb25lLiAgSW4gdGhlIHN3ZWVwIGFsZ29yaXRobSB0aGVyZSBhcmUgdHdvIHNwZWNpYWwKICAgICAgICAjIGNhc2VzIHdoZXJlIHdlIG1heSBuZWVkIHRvIGxpbWl0IHBhZGRpbmcgdG8gYSAnJHNob3J0X3BhZCcgZGlzdGFuY2UKICAgICAgICAjIHRvIGF2b2lkIHNvbWUgdmVyeSB1Z2x5IGZvcm1hdHRpbmc6CgogICAgICAgICMgMS4gVHdvIGlzb2xhdGVkIGxpbmVzIHdpdGggcGFydGlhbCBhbGlnbm1lbnQKICAgICAgICAjIDIuIEEgJ3RhaWwtd2FnLWRvZycgc2l0dWF0aW9uLCBpbiB3aGljaCBhIHNpbmdsZSB0ZXJtaW5hbAogICAgICAgICMgICAgbGluZSB3aXRoIHBhcnRpYWwgYWxpZ25tZW50IGNvdWxkIGNhdXNlIGEgc2lnbmlmaWNhbnQgcGFkCiAgICAgICAgIyAgICBpbmNyZWFzZSBpbiBtYW55IHByZXZpb3VzIGxpbmVzIGlmIGFsbG93ZWQgdG8gam9pbiB0aGUgYWxpZ25tZW50LgoKICAgICAgICAjIEZvciBtb3N0IGFsaWdubWVudCB0b2tlbnMsIHdlIHdpbGwgYWxsb3cgb25seSBhIHNtYWxsIHBhZCB0byBiZQogICAgICAgICMgaW50cm9kdWNlZCAodGhlIGhhcmR3aXJlZCAkc2hvcnRfcGFkIHZhcmlhYmxlKSAuIEJ1dCBmb3Igc29tZSAnZ29vZCcKICAgICAgICAjIGFsaWdubWVudHMgd2UgY2FuIGJlIGxlc3MgcmVzdHJpY3RpdmUuCgogICAgICAgICMgVGhlc2UgYXJlICdnb29kJyBhbGlnbm1lbnRzLCB3aGljaCBhcmUgYWxsb3dlZCBtb3JlIHBhZGRpbmc6CiAgICAgICAgbXkgQHEgPSBxdyggPT4gPSA/IGlmIHVubGVzcyBvciB8fCB7ICk7CiAgICAgICAgcHVzaCBAcSwgJywnOwogICAgICAgIEBpc19nb29kX2FsaWdubWVudF90b2tlbntAcX0gPSAoMCkgeCBzY2FsYXIoQHEpOwoKICAgICAgICAjIFByb21vdGUgYSBmZXcgb2YgdGhlc2UgdG8gJ2Jlc3QnLCB3aXRoIGVzc2VudGlhbGx5IG5vIHBhZCBsaW1pdDoKICAgICAgICAkaXNfZ29vZF9hbGlnbm1lbnRfdG9rZW57Jz0nfSAgICAgID0gMTsKICAgICAgICAkaXNfZ29vZF9hbGlnbm1lbnRfdG9rZW57J2lmJ30gICAgID0gMTsKICAgICAgICAkaXNfZ29vZF9hbGlnbm1lbnRfdG9rZW57J3VubGVzcyd9ID0gMTsKICAgICAgICAkaXNfZ29vZF9hbGlnbm1lbnRfdG9rZW57Jz0+J30gICAgID0gMTsKCiAgICAgICAgIyBOb3RlIHRoZSBoYXNoIHZhbHVlcyBhcmUgc2V0IHNvIHRoYXQ6CiAgICAgICAgIyAgICAgICAgIGlmICgkaXNfZ29vZF9hbGlnbm1lbnRfdG9rZW57JHJhd190b2t9KSA9PiBiZXN0CiAgICAgICAgIyBpZiBkZWZpbmVkICgkaXNfZ29vZF9hbGlnbm1lbnRfdG9rZW57JHJhd190b2t9KSA9PiBnb29kIG9yIGJlc3QKCiAgICB9ICMjIGVuZCBCRUdJTgoKICAgIHN1YiBtb3ZlX3RvX2NvbW1vbl9jb2x1bW4gewoKICAgICAgICAjIFRoaXMgaXMgYSBzdWIgY2FsbGVkIGJ5IHN1YiBkb19sZWZ0X3RvX3JpZ2h0X3N3ZWVwIHRvCiAgICAgICAgIyBtb3ZlIHRoZSBhbGlnbm1lbnQgY29sdW1uIG9mIHRva2VuICRpdG9rIHRvICRjb2xfd2FudCBmb3IgYQogICAgICAgICMgc2VxdWVuY2Ugb2YgZ3JvdXBzLgogICAgICAgIG15ICgkcmNhbGxfaGFzaCkgPSBAXzsKCiAgICAgICAgbXkgJHJsaW5lcyAgICA9ICRyY2FsbF9oYXNoLT57cmxpbmVzfTsKICAgICAgICBteSAkcmdyb3VwcyAgID0gJHJjYWxsX2hhc2gtPntyZ3JvdXBzfTsKICAgICAgICBteSAkcm1heF9tb3ZlID0gJHJjYWxsX2hhc2gtPntybWF4X21vdmV9OwogICAgICAgIG15ICRuZ2IgICAgICAgPSAkcmNhbGxfaGFzaC0+e25nYn07CiAgICAgICAgbXkgJG5nZSAgICAgICA9ICRyY2FsbF9oYXNoLT57bmdlfTsKICAgICAgICBteSAkaXRvayAgICAgID0gJHJjYWxsX2hhc2gtPntpdG9rfTsKICAgICAgICBteSAkY29sX3dhbnQgID0gJHJjYWxsX2hhc2gtPntjb2xfd2FudH07CiAgICAgICAgbXkgJHJhd190b2sgICA9ICRyY2FsbF9oYXNoLT57cmF3X3Rva307CgogICAgICAgIHJldHVybiBpZiAoICFkZWZpbmVkKCRuZ2IpIHx8ICRuZ2UgPD0gJG5nYiApOwogICAgICAgIGZvcmVhY2ggbXkgJG5nICggJG5nYiAuLiAkbmdlICkgewoKICAgICAgICAgICAgbXkgKCAkamJlZywgJGplbmRfdXUgKSA9IEB7ICRyZ3JvdXBzLT5bJG5nXSB9OwogICAgICAgICAgICBteSAkbGluZSA9ICRybGluZXMtPlskamJlZ107CiAgICAgICAgICAgIG15ICRjb2wgID0gJGxpbmUtPmdldF9jb2x1bW4oJGl0b2spOwogICAgICAgICAgICBteSAkbW92ZSA9ICRjb2xfd2FudCAtICRjb2w7CiAgICAgICAgICAgIGlmICggJG1vdmUgPiAwICkgewoKICAgICAgICAgICAgICAgICMgbGltaXQgcGFkZGluZyBpbmNyZWFzZSBpbiBpc29sYXRlZCB0d28gbGluZXMKICAgICAgICAgICAgICAgIG5leHQKICAgICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCAkcm1heF9tb3ZlLT57JG5nfSApCiAgICAgICAgICAgICAgICAgICAgJiYgJG1vdmUgPiAkcm1heF9tb3ZlLT57JG5nfQogICAgICAgICAgICAgICAgICAgICYmICEkaXNfZ29vZF9hbGlnbm1lbnRfdG9rZW57JHJhd190b2t9ICk7CgogICAgICAgICAgICAgICAgJGxpbmUtPmluY3JlYXNlX2ZpZWxkX3dpZHRoKCAkaXRvaywgJG1vdmUgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRtb3ZlIDwgMCApIHsKCiAgICAgICAgICAgICAgICAjIHNwb3QgdG8gdGFrZSBzcGVjaWFsIGFjdGlvbiBvbiBmYWlsdXJlIHRvIG1vdmUKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICMjb2s6IChtb3ZlPT0wKQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBtb3ZlX3RvX2NvbW1vbl9jb2x1bW4KCiAgICBzdWIgZG9fbGVmdF90b19yaWdodF9zd2VlcCB7CgogICAgICAgIG15ICgkcmNhbGxfaGFzaCkgPSBAXzsKCiAgICAgICAgIyBUaGlzIGlzIHRoZSB3b3JrZXIgcm91dGluZSBmb3Igc3ViICdzd2VlcF9sZWZ0X3RvX3JpZ2h0Jy4gTWFrZQogICAgICAgICMgdmVydGljYWwgYWxpZ25tZW50cyBieSBzd2VlcGluZyBmcm9tIGxlZnQgdG8gcmlnaHQgb3ZlciBncm91cHMKICAgICAgICAjIG9mIGxpbmVzIHdoaWNoIGhhdmUgYmVlbiBsb2NhdGVkIGFuZCBwcmVwYXJlZCBieSB0aGUgY2FsbGVyLgoKICAgICAgICBteSAkcmxpbmVzICAgICAgPSAkcmNhbGxfaGFzaC0+e3JsaW5lc307CiAgICAgICAgbXkgJHJncm91cHMgICAgID0gJHJjYWxsX2hhc2gtPntyZ3JvdXBzfTsKICAgICAgICBteSAkcnRvZG8gICAgICAgPSAkcmNhbGxfaGFzaC0+e3J0b2RvfTsKICAgICAgICBteSAkcm1heF9tb3ZlICAgPSAkcmNhbGxfaGFzaC0+e3JtYXhfbW92ZX07CiAgICAgICAgbXkgJHNob3J0X3BhZCAgID0gJHJjYWxsX2hhc2gtPntzaG9ydF9wYWR9OwogICAgICAgIG15ICRncm91cF9sZXZlbCA9ICRyY2FsbF9oYXNoLT57Z3JvdXBfbGV2ZWx9OwoKICAgICAgICAjICRibG9ja2luZ19sZXZlbFskbmogaXMgdGhlIGxldmVsIGF0IGEgbWF0Y2ggZmFpbHVyZSBiZXR3ZWVuIGdyb3VwcwogICAgICAgICMgJG5nLTEgYW5kICRuZwogICAgICAgIG15IEBibG9ja2luZ19sZXZlbDsKICAgICAgICBteSAkZ3JvdXBfbGlzdF90eXBlID0gJHJsaW5lcy0+WzBdLT57J2xpc3RfdHlwZSd9OwoKICAgICAgICBmb3JlYWNoIG15ICR0YXNrICggQHskcnRvZG99ICkgewogICAgICAgICAgICBteSAoICRpdG9rLCAkbmdfYmVnLCAkbmdfZW5kLCAkcmF3X3RvaywgJGxldiApID0gQHskdGFza307CgogICAgICAgICAgICAjIE5vdGhpbmcgdG8gZG8gZm9yIGEgc2luZ2xlIGdyb3VwCiAgICAgICAgICAgIG5leHQgaWYgKCAkbmdfZW5kIDw9ICRuZ19iZWcgKTsKCiAgICAgICAgICAgIG15ICRuZ19maXJzdDsgICMgaW5kZXggb2YgdGhlIGZpcnN0IGdyb3VwIG9mIGEgY29udGludW91cyBzZXF1ZW5jZQogICAgICAgICAgICBteSAkY29sX3dhbnQ7ICAjIHRoZSBjb21tb24gYWxpZ25tZW50IGNvbHVtbiBvZiBhIHNlcXVlbmNlIG9mIGdyb3VwcwogICAgICAgICAgICBteSAkY29sX2xpbWl0OyAjIG1heGltdW0gY29sdW1uIGJlZm9yZSBidW1waW5nIGludG8gbWF4IGxpbmUgbGVuZ3RoCiAgICAgICAgICAgIG15ICRsaW5lX2NvdW50X25nX20gPSAwOwogICAgICAgICAgICBteSAkam1heF9tOwogICAgICAgICAgICBteSAkaXRfc3RvcF9tOwoKICAgICAgICAgICAgIyBMb29wIG92ZXIgdGhlIGdyb3VwcwogICAgICAgICAgICAjICdpeF8nID0gaW5kZXggaW4gdGhlIGFycmF5IG9mIGxpbmVzCiAgICAgICAgICAgICMgJ25nXycgPSBpbmRleCBpbiB0aGUgYXJyYXkgb2YgZ3JvdXBzCiAgICAgICAgICAgICMgJ2l0XycgPSBpbmRleCBpbiB0aGUgYXJyYXkgb2YgdG9rZW5zCiAgICAgICAgICAgIG15ICRpeF9taW4gICAgICA9ICRyZ3JvdXBzLT5bJG5nX2JlZ10tPlswXTsKICAgICAgICAgICAgbXkgJGl4X21heCAgICAgID0gJHJncm91cHMtPlskbmdfZW5kXS0+WzFdOwogICAgICAgICAgICBteSAkbGluZXNfdG90YWwgPSAkaXhfbWF4IC0gJGl4X21pbiArIDE7CiAgICAgICAgICAgIGZvcmVhY2ggbXkgJG5nICggJG5nX2JlZyAuLiAkbmdfZW5kICkgewogICAgICAgICAgICAgICAgbXkgKCAkaXhfYmVnLCAkaXhfZW5kLCAkaXRfc3RvcCApID0gQHsgJHJncm91cHMtPlskbmddIH07CiAgICAgICAgICAgICAgICBteSAkbGluZV9jb3VudF9uZyA9ICRpeF9lbmQgLSAkaXhfYmVnICsgMTsKCiAgICAgICAgICAgICAgICAjIEltcG9ydGFudDogbm90ZSB0aGF0IHNpbmNlIGFsbCBsaW5lcyBpbiBhIGdyb3VwIGhhdmUgYSBjb21tb24KICAgICAgICAgICAgICAgICMgYWxpZ25tZW50cyBvYmplY3QsIHdlIGp1c3QgaGF2ZSB0byB3b3JrIG9uIG9uZSBvZiB0aGUgbGluZXMKICAgICAgICAgICAgICAgICMgKHRoZSBmaXJzdCBsaW5lKS4gIEFsbCBvZiB0aGUgcmVzdCB3aWxsIGJlIGNoYW5nZWQKICAgICAgICAgICAgICAgICMgYXV0b21hdGljYWxseS4KICAgICAgICAgICAgICAgIG15ICRsaW5lID0gJHJsaW5lcy0+WyRpeF9iZWddOwogICAgICAgICAgICAgICAgbXkgJGptYXggPSAkbGluZS0+eydqbWF4J307CgogICAgICAgICAgICAgICAgIyB0aGUgbWF4aW11bSBzcGFjZSB3aXRob3V0IGV4Y2VlZGluZyB0aGUgbGluZSBsZW5ndGg6CiAgICAgICAgICAgICAgICBteSAkYXZhaWwgICA9ICRsaW5lLT5nZXRfYXZhaWxhYmxlX3NwYWNlX29uX3JpZ2h0KCk7CiAgICAgICAgICAgICAgICBteSAkY29sICAgICA9ICRsaW5lLT5nZXRfY29sdW1uKCRpdG9rKTsKICAgICAgICAgICAgICAgIG15ICRjb2xfbWF4ID0gJGNvbCArICRhdmFpbDsKCiAgICAgICAgICAgICAgICAjIEluaXRpYWxpemUgb24gZmlyc3QgZ3JvdXAKICAgICAgICAgICAgICAgIGlmICggIWRlZmluZWQoJGNvbF93YW50KSApIHsKICAgICAgICAgICAgICAgICAgICAkbmdfZmlyc3QgICAgICAgID0gJG5nOwogICAgICAgICAgICAgICAgICAgICRjb2xfd2FudCAgICAgICAgPSAkY29sOwogICAgICAgICAgICAgICAgICAgICRjb2xfbGltaXQgICAgICAgPSAkY29sX21heDsKICAgICAgICAgICAgICAgICAgICAkbGluZV9jb3VudF9uZ19tID0gJGxpbmVfY291bnRfbmc7CiAgICAgICAgICAgICAgICAgICAgJGptYXhfbSAgICAgICAgICA9ICRqbWF4OwogICAgICAgICAgICAgICAgICAgICRpdF9zdG9wX20gICAgICAgPSAkaXRfc3RvcDsKICAgICAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgUlVMRTogVGhyb3cgYSBibG9ja2luZyBmbGFnIHVwb24gZW5jb3VudGVyaW5nIGEgdG9rZW4gbGV2ZWwKICAgICAgICAgICAgICAgICMgZGlmZmVyZW50IGZyb20gdGhlIGxldmVsIG9mIHRoZSBmaXJzdCBibG9ja2luZyB0b2tlbi4gIEZvcgogICAgICAgICAgICAgICAgIyBleGFtcGxlLCBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIGlmIHRoZSA9IG1hdGNoZXMgZ2V0CiAgICAgICAgICAgICAgICAjIGJsb2NrZWQgYmV0d2VlbiB0d28gZ3JvdXBzIGFzIHNob3duLCB0aGVuIHdlIHdhbnQgdG8gc3RhcnQKICAgICAgICAgICAgICAgICMgYmxvY2tpbmcgbWF0Y2hlcyBhdCB0aGUgY29tbWFzLCB3aGljaCBhcmUgYXQgZGVlcGVyIGxldmVsLCBzbwogICAgICAgICAgICAgICAgIyB0aGF0IHdlIGRvIG5vdCBnZXQgdGhlIGJpZyBnYXBzIHNob3duIGhlcmU6CgogICAgICAgICAgICAgICAgIyAgbXkgJHVua25vd24zID0gcGFjayggInYiLCAgICAgICAgICAtMiApOwogICAgICAgICAgICAgICAgIyAgbXkgJHVua25vd240ID0gcGFjayggInYiLCAgICAgICAgICAweDA5ICk7CiAgICAgICAgICAgICAgICAjICBteSAkdW5rbm93bjUgPSBwYWNrKCAiVlZWIiwgICAgICAgIDB4MDYsIDB4MDAsIDB4MDAgKTsKICAgICAgICAgICAgICAgICMgIG15ICRudW1fYmJkX2Jsb2NrcyAgPSBwYWNrKCAiViIsICAgJG51bV9saXN0cyApOwogICAgICAgICAgICAgICAgIyAgbXkgJHJvb3Rfc3RhcnRibG9jayA9IHBhY2soICJWIiwgICAkcm9vdF9zdGFydCApOwogICAgICAgICAgICAgICAgIyAgbXkgJHVua25vd242ICAgICAgICA9IHBhY2soICJWViIsICAweDAwLCAweDEwMDAgKTsKCiAgICAgICAgICAgICAgICAjIE9uIHRoZSBvdGhlciBoYW5kLCBpdCBpcyBva2F5IHRvIGtlZXAgbWF0Y2hpbmcgYXQgdGhlIHNhbWUKICAgICAgICAgICAgICAgICMgbGV2ZWwgc3VjaCBhcyBpbiBhIHNpbXBsZSBsaXN0IG9mIGNvbW1hcyBhbmQvb3IgZmF0IGNvbW1hcy4KCiAgICAgICAgICAgICAgICBteSAkaXNfYmxvY2tlZCA9IGRlZmluZWQoICRibG9ja2luZ19sZXZlbFskbmddICkKICAgICAgICAgICAgICAgICAgJiYgJGxldiA+ICRibG9ja2luZ19sZXZlbFskbmddOwoKICAgICAgICAgICAgICAgICMgVEFJTC1XQUctRE9HIFJVTEU6IHByZXZlbnQgYSAndGFpbC13YWctZG9nJyBzeW5kcm9tZSwgbWVhbmluZzoKICAgICAgICAgICAgICAgICMgRG8gbm90IGxldCBvbmUgb3IgdHdvIGxpbmVzIHdpdGggYSAqKmRpZmZlcmVudCBudW1iZXIgb2YKICAgICAgICAgICAgICAgICMgYWxpZ25tZW50cyoqIG9wZW4gdXAgYSBiaWcgZ2FwIGluIGEgbGFyZ2UgYmxvY2suICBGb3IKICAgICAgICAgICAgICAgICMgZXhhbXBsZSwgd2Ugd2lsbCBwcmV2ZW50IHNvbWV0aGluZyBsaWtlIHRoaXMsIHdoZXJlIHRoZSBmaXJzdAogICAgICAgICAgICAgICAgIyBsaW5lIHByaWVzIG9wZW4gdGhlIHJlc3Q6CgogICAgICAgICAgICAjICAkd29ya3NoZWV0LT53cml0ZSggIkI3IiwgImh0dHA6Ly93d3cucGVybC5jb20iLCB1bmRlZiwgJGZvcm1hdCApOwogICAgICAgICAgICAjICAkd29ya3NoZWV0LT53cml0ZSggIkM3IiwgIiIsICAgICAgICAgICAgICAgICAgICAkZm9ybWF0ICk7CiAgICAgICAgICAgICMgICR3b3Jrc2hlZXQtPndyaXRlKCAiRDciLCAiIiwgICAgICAgICAgICAgICAgICAgICRmb3JtYXQgKTsKICAgICAgICAgICAgIyAgJHdvcmtzaGVldC0+d3JpdGUoICJEOCIsICIiLCAgICAgICAgICAgICAgICAgICAgJGZvcm1hdCApOwogICAgICAgICAgICAjICAkd29ya3NoZWV0LT53cml0ZSggIkQ4IiwgIiIsICAgICAgICAgICAgICAgICAgICAkZm9ybWF0ICk7CgogICAgICAgICAgICAgICAgIyBXZSBzaG91bGQgZXhjbHVkZSBmcm9tIGNvbnNpZGVyYXRpb24gdHdvIGdyb3VwcyB3aGljaCBhcmUKICAgICAgICAgICAgICAgICMgZWZmZWN0aXZlbHkgdGhlIHNhbWUgYnV0IHNlcGFyYXRlZCBiZWNhdXNlIG9uZSBkb2VzIG5vdAogICAgICAgICAgICAgICAgIyBmaXQgaW4gdGhlIG1heGltdW0gYWxsb3dlZCBsaW5lIGxlbmd0aC4KICAgICAgICAgICAgICAgIG15ICRpc19zYW1lX2dyb3VwID0KICAgICAgICAgICAgICAgICAgJGptYXggPT0gJGptYXhfbSAmJiAkaXRfc3RvcF9tID09ICRqbWF4X20gLSAyOwoKICAgICAgICAgICAgICAgIG15ICRsaW5lc19hYm92ZSA9ICRpeF9iZWcgLSAkaXhfbWluOwogICAgICAgICAgICAgICAgbXkgJGxpbmVzX2JlbG93ID0gJGxpbmVzX3RvdGFsIC0gJGxpbmVzX2Fib3ZlOwoKICAgICAgICAgICAgICAgICMgSW5jcmVhc2UgdGhlIHRvbGVyYWJsZSBnYXAgZm9yIGNlcnRhaW4gZmF2b3JhYmxlIGZhY3RvcnMKICAgICAgICAgICAgICAgIG15ICRmYWN0b3IgICAgPSAxOwogICAgICAgICAgICAgICAgbXkgJHRvcF9sZXZlbCA9ICRsZXYgPT0gJGdyb3VwX2xldmVsOwoKICAgICAgICAgICAgICAgICMgQWxpZ24gYmVzdCB0b3AgbGV2ZWwgYWxpZ25tZW50IHRva2VucyBsaWtlICc9JywgJ2lmJywgLi4uCiAgICAgICAgICAgICAgICAjIEEgZmFjdG9yIG9mIDEwIGFsbG93cyBhIGdhcCBvZiB1cCB0byA0MCBzcGFjZXMKICAgICAgICAgICAgICAgIGlmICggJHRvcF9sZXZlbCAmJiAkaXNfZ29vZF9hbGlnbm1lbnRfdG9rZW57JHJhd190b2t9ICkgewogICAgICAgICAgICAgICAgICAgICRmYWN0b3IgPSAxMDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIE90aGVyd2lzZSBhbGxvdyBzb21lIG1pbmltYWwgcGFkZGluZyBvZiBnb29kIGFsaWdubWVudHMKICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICBpZiAoCgogICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkKCAkaXNfZ29vZF9hbGlnbm1lbnRfdG9rZW57JHJhd190b2t9ICkKCiAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgaGF2ZSB0byBiZSBjYXJlZnVsIGlmIHRoZXJlIGFyZSBqdXN0IDIgbGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyB0d28tbGluZSBmYWN0b3IgYWxsb3dzIGxhcmdlIGdhcHMgb25seSBmb3IgMgogICAgICAgICAgICAgICAgICAgICAgICAjIGxpbmVzIHdoaWNoIGFyZSBzaW1wbGUgbGlzdHMgd2l0aCBmZXdlciBpdGVtcyBvbiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgIyBzZWNvbmQgbGluZS4gSXQgZ2l2ZXMgcmVzdWx0cyBzaW1pbGFyIHRvIHByZXZpb3VzCiAgICAgICAgICAgICAgICAgICAgICAgICMgdmVyc2lvbnMgb2YgcGVybHRpZHkuCiAgICAgICAgICAgICAgICAgICAgICAgICYmICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lc190b3RhbCA+IDIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICggICAkZ3JvdXBfbGlzdF90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJGptYXggPCAkam1heF9tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHRvcF9sZXZlbCApCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRmYWN0b3IgKz0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0b3BfbGV2ZWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmYWN0b3IgKz0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBteSAkaXNfYmlnX2dhcDsKICAgICAgICAgICAgICAgIGlmICggISRpc19zYW1lX2dyb3VwICkgewogICAgICAgICAgICAgICAgICAgICRpc19iaWdfZ2FwIHx8PQogICAgICAgICAgICAgICAgICAgICAgKCAgICAgICRsaW5lc19hYm92ZSA9PSAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgJGxpbmVzX2Fib3ZlID09IDIgJiYgJGxpbmVzX2JlbG93ID49IDQgKQogICAgICAgICAgICAgICAgICAgICAgJiYgJGNvbF93YW50ID4gJGNvbCArICRzaG9ydF9wYWQgKiAkZmFjdG9yOwogICAgICAgICAgICAgICAgICAgICRpc19iaWdfZ2FwIHx8PQogICAgICAgICAgICAgICAgICAgICAgKCAgICAgICRsaW5lc19iZWxvdyA9PSAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgJGxpbmVzX2JlbG93ID09IDIgJiYgJGxpbmVzX2Fib3ZlID49IDQgKQogICAgICAgICAgICAgICAgICAgICAgJiYgJGNvbCA+ICRjb2xfd2FudCArICRzaG9ydF9wYWQgKiAkZmFjdG9yOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgaWYgbWF0Y2ggaXMgbGltaXRlZCBieSBnYXAgc2l6ZSwgc3RvcCBhbGlnbmluZyBhdCB0aGlzIGxldmVsCiAgICAgICAgICAgICAgICBpZiAoJGlzX2JpZ19nYXApIHsKICAgICAgICAgICAgICAgICAgICAkYmxvY2tpbmdfbGV2ZWxbJG5nXSA9ICRsZXYgLSAxOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgcXVpdCBhbmQgcmVzdGFydCBpZiBpdCBjYW5ub3Qgam9pbiB0aGlzIGJhdGNoCiAgICAgICAgICAgICAgICBpZiAoICAgJGNvbF93YW50ID4gJGNvbF9tYXgKICAgICAgICAgICAgICAgICAgICB8fCAkY29sID4gJGNvbF9saW1pdAogICAgICAgICAgICAgICAgICAgIHx8ICRpc19iaWdfZ2FwCiAgICAgICAgICAgICAgICAgICAgfHwgJGlzX2Jsb2NrZWQgKQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAjIHJlbWVtYmVyIHRoZSBsZXZlbCBvZiB0aGUgZmlyc3QgYmxvY2tpbmcgdG9rZW4KICAgICAgICAgICAgICAgICAgICBpZiAoICFkZWZpbmVkKCAkYmxvY2tpbmdfbGV2ZWxbJG5nXSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAkYmxvY2tpbmdfbGV2ZWxbJG5nXSA9ICRsZXY7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBtb3ZlX3RvX2NvbW1vbl9jb2x1bW4oCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJsaW5lcyAgICA9PiAkcmxpbmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmdyb3VwcyAgID0+ICRyZ3JvdXBzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcm1heF9tb3ZlID0+ICRybWF4X21vdmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2IgICAgICAgPT4gJG5nX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdlICAgICAgID0+ICRuZyAtIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdG9rICAgICAgPT4gJGl0b2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfd2FudCAgPT4gJGNvbF93YW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3X3RvayAgID0+ICRyYXdfdG9rLAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkbmdfZmlyc3QgICAgICAgID0gJG5nOwogICAgICAgICAgICAgICAgICAgICRjb2xfd2FudCAgICAgICAgPSAkY29sOwogICAgICAgICAgICAgICAgICAgICRjb2xfbGltaXQgICAgICAgPSAkY29sX21heDsKICAgICAgICAgICAgICAgICAgICAkbGluZV9jb3VudF9uZ19tID0gJGxpbmVfY291bnRfbmc7CiAgICAgICAgICAgICAgICAgICAgJGptYXhfbSAgICAgICAgICA9ICRqbWF4OwogICAgICAgICAgICAgICAgICAgICRpdF9zdG9wX20gICAgICAgPSAkaXRfc3RvcDsKICAgICAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRsaW5lX2NvdW50X25nX20gKz0gJGxpbmVfY291bnRfbmc7CgogICAgICAgICAgICAgICAgIyB1cGRhdGUgdGhlIGNvbW1vbiBjb2x1bW4gYW5kIGxpbWl0CiAgICAgICAgICAgICAgICBpZiAoICRjb2wgPiAkY29sX3dhbnQgKSAgICAgIHsgJGNvbF93YW50ICA9ICRjb2wgfQogICAgICAgICAgICAgICAgaWYgKCAkY29sX21heCA8ICRjb2xfbGltaXQgKSB7ICRjb2xfbGltaXQgPSAkY29sX21heCB9CgogICAgICAgICAgICB9ICMjIGVuZCBsb29wIG92ZXIgZ3JvdXBzCgogICAgICAgICAgICBpZiAoICRuZ19lbmQgPiAkbmdfZmlyc3QgKSB7CiAgICAgICAgICAgICAgICBtb3ZlX3RvX2NvbW1vbl9jb2x1bW4oCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBybGluZXMgICAgPT4gJHJsaW5lcywKICAgICAgICAgICAgICAgICAgICAgICAgcmdyb3VwcyAgID0+ICRyZ3JvdXBzLAogICAgICAgICAgICAgICAgICAgICAgICBybWF4X21vdmUgPT4gJHJtYXhfbW92ZSwKICAgICAgICAgICAgICAgICAgICAgICAgbmdiICAgICAgID0+ICRuZ19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgbmdlICAgICAgID0+ICRuZ19lbmQsCiAgICAgICAgICAgICAgICAgICAgICAgIGl0b2sgICAgICA9PiAkaXRvaywKICAgICAgICAgICAgICAgICAgICAgICAgY29sX3dhbnQgID0+ICRjb2xfd2FudCwKICAgICAgICAgICAgICAgICAgICAgICAgcmF3X3RvayAgID0+ICRyYXdfdG9rLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9ICMjIGVuZCBsb29wIG92ZXIgdGFza3MKCiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGRvX2xlZnRfdG9fcmlnaHRfc3dlZXAKfQoKc3ViIGRlbGV0ZV9zZWxlY3RlZF90b2tlbnMgewoKICAgIG15ICggJGxpbmVfb2JqLCAkcmlkZWwgKSA9IEBfOwoKICAgICMgR2l2ZW46CiAgICAjICAgJGxpbmVfb2JqID0gdGhlIGxpbmUgdG8gYmUgbW9kaWZpZWQKICAgICMgICAkcmlkZWwgICAgPSBhIHJlZiB0byBsaXN0IG9mIGluZGV4ZXMgdG8gYmUgZGVsZXRlZAoKICAgICMgcmVtb3ZlIHVudXNlZCBhbGlnbm1lbnQgdG9rZW4ocykgdG8gaW1wcm92ZSBhbGlnbm1lbnQgY2hhbmNlcwoKICAgIHJldHVybiBpZiAoICFkZWZpbmVkKCRsaW5lX29iaikgfHwgIWRlZmluZWQoJHJpZGVsKSB8fCAhQHskcmlkZWx9ICk7CgogICAgbXkgJGptYXhfb2xkICAgICAgICAgICA9ICRsaW5lX29iai0+eydqbWF4J307CiAgICBteSAkcmZpZWxkc19vbGQgICAgICAgID0gJGxpbmVfb2JqLT57J3JmaWVsZHMnfTsKICAgIG15ICRyZmllbGRfbGVuZ3Roc19vbGQgPSAkbGluZV9vYmotPnsncmZpZWxkX2xlbmd0aHMnfTsKICAgIG15ICRycGF0dGVybnNfb2xkICAgICAgPSAkbGluZV9vYmotPnsncnBhdHRlcm5zJ307CiAgICBteSAkcnRva2Vuc19vbGQgICAgICAgID0gJGxpbmVfb2JqLT57J3J0b2tlbnMnfTsKICAgIG15ICRqX3Rlcm1pbmFsX21hdGNoICAgPSAkbGluZV9vYmotPnsnal90ZXJtaW5hbF9tYXRjaCd9OwoKICAgIHVzZSBjb25zdGFudCBFWFBMQUlOX0RFTEVURV9TRUxFQ1RFRCA9PiAwOwoKICAgIGxvY2FsICRMSVNUX1NFUEFSQVRPUiA9ICc+IDwnOwogICAgRVhQTEFJTl9ERUxFVEVfU0VMRUNURUQgJiYgcHJpbnQgPDxFT007CmRlbGV0ZSBpbmRleGVzOiA8QHskcmlkZWx9PgpvbGQgam1heDogJGptYXhfb2xkCm9sZCB0b2tlbnM6IDxAeyRydG9rZW5zX29sZH0+Cm9sZCBwYXR0ZXJuczogPEB7JHJwYXR0ZXJuc19vbGR9PgpvbGQgZmllbGRzOiA8QHskcmZpZWxkc19vbGR9PgpvbGQgZmllbGRfbGVuZ3RoczogPEB7JHJmaWVsZF9sZW5ndGhzX29sZH0+CkVPTQoKICAgIG15ICRyZmllbGRzX25ldyAgICAgICAgPSBbXTsKICAgIG15ICRycGF0dGVybnNfbmV3ICAgICAgPSBbXTsKICAgIG15ICRydG9rZW5zX25ldyAgICAgICAgPSBbXTsKICAgIG15ICRyZmllbGRfbGVuZ3Roc19uZXcgPSBbXTsKCiAgICAjIENvbnZlcnQgZGVsZXRpb24gbGlzdCB0byBhIGhhc2ggdG8gYWxsb3cgYW55IG9yZGVyLCBtdWx0aXBsZSBlbnRyaWVzLAogICAgIyBhbmQgYXZvaWQgcHJvYmxlbXMgd2l0aCBpbmRleCB2YWx1ZXMgb3V0IG9mIHJhbmdlCiAgICBteSAlZGVsZXRlX21lOwogICAgQGRlbGV0ZV9tZXsgQHskcmlkZWx9IH0gPSAoMSkgeCBzY2FsYXIoIEB7JHJpZGVsfSApOwoKICAgIG15ICRwYXR0ZXJuXzAgICAgICA9ICRycGF0dGVybnNfb2xkLT5bMF07CiAgICBteSAkZmllbGRfMCAgICAgICAgPSAkcmZpZWxkc19vbGQtPlswXTsKICAgIG15ICRmaWVsZF9sZW5ndGhfMCA9ICRyZmllbGRfbGVuZ3Roc19vbGQtPlswXTsKICAgIHB1c2ggQHskcmZpZWxkc19uZXd9LCAgICAgICAgJGZpZWxkXzA7CiAgICBwdXNoIEB7JHJmaWVsZF9sZW5ndGhzX25ld30sICRmaWVsZF9sZW5ndGhfMDsKICAgIHB1c2ggQHskcnBhdHRlcm5zX25ld30sICAgICAgJHBhdHRlcm5fMDsKCiAgICAjIExvb3AgdG8gZWl0aGVyIGNvcHkgaXRlbXMgb3IgY29uY2F0ZW5hdGUgZmllbGRzIGFuZCBwYXR0ZXJucwogICAgbXkgJGptaW5fZGVsOwogICAgZm9yZWFjaCBteSAkaiAoIDAgLi4gJGptYXhfb2xkIC0gMSApIHsKICAgICAgICBteSAkdG9rZW4gICAgICAgID0gJHJ0b2tlbnNfb2xkLT5bJGpdOwogICAgICAgIG15ICRmaWVsZCAgICAgICAgPSAkcmZpZWxkc19vbGQtPlsgJGogKyAxIF07CiAgICAgICAgbXkgJGZpZWxkX2xlbmd0aCA9ICRyZmllbGRfbGVuZ3Roc19vbGQtPlsgJGogKyAxIF07CiAgICAgICAgbXkgJHBhdHRlcm4gICAgICA9ICRycGF0dGVybnNfb2xkLT5bICRqICsgMSBdOwogICAgICAgIGlmICggISRkZWxldGVfbWV7JGp9ICkgewogICAgICAgICAgICBwdXNoIEB7JHJ0b2tlbnNfbmV3fSwgICAgICAgICR0b2tlbjsKICAgICAgICAgICAgcHVzaCBAeyRyZmllbGRzX25ld30sICAgICAgICAkZmllbGQ7CiAgICAgICAgICAgIHB1c2ggQHskcnBhdHRlcm5zX25ld30sICAgICAgJHBhdHRlcm47CiAgICAgICAgICAgIHB1c2ggQHskcmZpZWxkX2xlbmd0aHNfbmV3fSwgJGZpZWxkX2xlbmd0aDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmICggIWRlZmluZWQoJGptaW5fZGVsKSApIHsgJGptaW5fZGVsID0gJGogfQogICAgICAgICAgICAkcmZpZWxkc19uZXctPlstMV0gLj0gJGZpZWxkOwogICAgICAgICAgICAkcmZpZWxkX2xlbmd0aHNfbmV3LT5bLTFdICs9ICRmaWVsZF9sZW5ndGg7CiAgICAgICAgICAgICRycGF0dGVybnNfbmV3LT5bLTFdIC49ICRwYXR0ZXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIC0tLS0tIHggLS0tLS0tIHggLS0tLS0tIHggLS0tLS0tCiAgICAjdCAgICAgIDAgICAgICAgIDEgICAgICAgIDIgICAgICAgIDwtIHRva2VuIGluZGV4aW5nCiAgICAjZiAgIDAgICAgICAxICAgICAgICAyICAgICAgICAzICAgIDwtIGZpZWxkIGFuZCBwYXR0ZXJuCgogICAgbXkgJGptYXhfbmV3ID0gQHskcmZpZWxkc19uZXd9IC0gMTsKICAgICRsaW5lX29iai0+eydydG9rZW5zJ30gICAgICAgID0gJHJ0b2tlbnNfbmV3OwogICAgJGxpbmVfb2JqLT57J3JwYXR0ZXJucyd9ICAgICAgPSAkcnBhdHRlcm5zX25ldzsKICAgICRsaW5lX29iai0+eydyZmllbGRzJ30gICAgICAgID0gJHJmaWVsZHNfbmV3OwogICAgJGxpbmVfb2JqLT57J3JmaWVsZF9sZW5ndGhzJ30gPSAkcmZpZWxkX2xlbmd0aHNfbmV3OwogICAgJGxpbmVfb2JqLT57J2ptYXgnfSAgICAgICAgICAgPSAkam1heF9uZXc7CgogICAgIyBUaGUgdmFsdWUgb2Ygal90ZXJtaW5hbF9tYXRjaCB3aWxsIGJlIGluY29ycmVjdCBpZiB3ZSBkZWxldGUgdG9rZW5zIHByaW9yCiAgICAjIHRvIGl0LiBXZSB3aWxsIGhhdmUgdG8gZ2l2ZSB1cCBvbiBhbGlnbmluZyB0aGUgdGVybWluYWwgdG9rZW5zIGlmIHRoaXMKICAgICMgaGFwcGVucy4KICAgIGlmICggZGVmaW5lZCgkal90ZXJtaW5hbF9tYXRjaCkgJiYgJGptaW5fZGVsIDw9ICRqX3Rlcm1pbmFsX21hdGNoICkgewogICAgICAgICRsaW5lX29iai0+eydqX3Rlcm1pbmFsX21hdGNoJ30gPSB1bmRlZjsKICAgIH0KCiAgICAjIHVwZGF0ZSBsaXN0IHR5cGUgLQogICAgaWYgKCAkbGluZV9vYmotPnsnbGlzdF9zZXFubyd9ICkgewoKICAgICAgICAjIyBUaGlzIHdvcmtzLCBidXQgZm9yIGVmZmljaWVuY3kgc2VlIGlmIHdlIG5lZWQgdG8gbWFrZSBhIGNoYW5nZToKICAgICAgICAjIyBkZWNpZGVfaWZfbGlzdCgkbGluZV9vYmopOwoKICAgICAgICAjIEFuIGV4aXN0aW5nIGxpc3Qgd2lsbCBzdGlsbCBiZSBhIGxpc3QgYnV0IHdpdGggcG9zc2libHkgZGlmZmVyZW50CiAgICAgICAgIyBsZWFkaW5nIHRva2VuCiAgICAgICAgbXkgJG9sZF9saXN0X3R5cGUgPSAkbGluZV9vYmotPnsnbGlzdF90eXBlJ307CiAgICAgICAgbXkgJG5ld19saXN0X3R5cGUgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgaWYgKCAkcnRva2Vuc19uZXctPlswXSA9fiAvXig9PnwsKS8gKSB7CiAgICAgICAgICAgICRuZXdfbGlzdF90eXBlID0gJHJ0b2tlbnNfbmV3LT5bMF07CiAgICAgICAgfQogICAgICAgIGlmICggISRvbGRfbGlzdF90eXBlIHx8ICRvbGRfbGlzdF90eXBlIG5lICRuZXdfbGlzdF90eXBlICkgewogICAgICAgICAgICBkZWNpZGVfaWZfbGlzdCgkbGluZV9vYmopOwogICAgICAgIH0KICAgIH0KCiAgICBFWFBMQUlOX0RFTEVURV9TRUxFQ1RFRCAmJiBwcmludCA8PEVPTTsKCm5ldyBqbWF4OiAkam1heF9uZXcKbmV3IHRva2VuczogPEB7JHJ0b2tlbnNfbmV3fT4KbmV3IHBhdHRlcm5zOiA8QHskcnBhdHRlcm5zX25ld30+Cm5ldyBmaWVsZHM6IDxAeyRyZmllbGRzX25ld30+CkVPTQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgZGVsZXRlX3NlbGVjdGVkX3Rva2VucwoKeyAgICAjIyBjbG9zdXJlIGZvciBzdWIgZGVjb2RlX2FsaWdubWVudF90b2tlbgoKICAgICMgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCByZXBlYXRlZGx5IGZvciBlYWNoIHRva2VuLCBzbyBpdCBuZWVkcyB0byBiZQogICAgIyBlZmZpY2llbnQuICBXZSBjYW4gc3BlZWQgdGhpbmdzIHVwIGJ5IHJlbWVtYmVyaW5nIHRoZSBpbnB1dHMgYW5kIG91dHB1dHMKICAgICMgaW4gYSBoYXNoLgogICAgbXkgJWRlY29kZWRfdG9rZW47CgogICAgc3ViIGluaXRpYWxpemVfZGVjb2RlIHsKCiAgICAgICAgIyBXZSB3aWxsIHJlLWluaXRpYWxpemUgdGhlIGhhc2ggZm9yIGVhY2ggZmlsZS4gT3RoZXJ3aXNlLCB0aGVyZSBpcwogICAgICAgICMgYSBkYW5nZXIgdGhhdCB0aGUgaGFzaCBjYW4gYmVjb21lIGFyYml0cmFyaWx5IGxhcmdlIGlmIGEgdmVyeSBsYXJnZQogICAgICAgICMgbnVtYmVyIG9mIGZpbGVzIGlzIHByb2Nlc3NlZCBhdCBvbmNlLgogICAgICAgICVkZWNvZGVkX3Rva2VuID0gKCk7CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGluaXRpYWxpemVfZGVjb2RlCgogICAgc3ViIGRlY29kZV9hbGlnbm1lbnRfdG9rZW4gewoKICAgICAgICBteSAoJHRvaykgPSBAXzsKCiAgICAgICAgIyBVbnBhY2sgdGhlIHZhbHVlcyBwYWNrZWQgaW4gYW4gYWxpZ25tZW50IHRva2VuCgogICAgICAgICMgR2l2ZW46CiAgICAgICAgIyAgICR0b2sgPSBhbiBhbGlnbm1lbnQgdG9rZW4KICAgICAgICAjIFJldHVybnM6CiAgICAgICAgIyAgICggJHJhd190b2ssICRsZXYsICR0YWcsICR0b2tfY291bnQgKQogICAgICAgICMKICAgICAgICAjIFVzYWdlOgogICAgICAgICMgICAgICAgIG15ICggJHJhd190b2ssICRsZXYsICR0YWcsICR0b2tfY291bnQgKSA9CiAgICAgICAgIyAgICAgICAgICBkZWNvZGVfYWxpZ25tZW50X3Rva2VuKCR0b2tlbik7CgogICAgICAgICMgQWxpZ25tZW50IHRva2VucyBoYXZlIGEgdHJhaWxpbmcgZGVjaW1hbCBsZXZlbCBhbmQgb3B0aW9uYWwgdGFnIChmb3IKICAgICAgICAjIGNvbW1hcyk6CiAgICAgICAgIyBGb3IgZXhhbXBsZSwgdGhlIGZpcnN0IGNvbW1hIGluIHRoZSBmb2xsb3dpbmcgbGluZQogICAgICAgICMgICAgIHN1YiBiYW5uZXIgIHsgY3JsZjsgcmVwb3J0KCBzaGlmdCwgJy8nLCBzaGlmdCApOyBjcmxmIH0KICAgICAgICAjIGlzIGRlY29yYXRlZCBhcyBmb2xsb3dzOgogICAgICAgICMgICAgLDIrcmVwb3J0LTYgID0+ICh0b2ssbGV2LHRhZykgPXF3KCAsICAgMiAgICtyZXBvcnQtNikKCiAgICAgICAgIyBBbiBvcHRpb25hbCB0b2tlbiBjb3VudCBtYXkgYmUgYXBwZW5kZWQgd2l0aCBhIGxlYWRpbmcgZG90LgogICAgICAgICMgQ3VycmVudGx5IHRoaXMgaXMgb25seSBkb25lIGZvciAnPScgdG9rZW5zIGJ1dCB0aGlzIGNvdWxkIGNoYW5nZS4KICAgICAgICAjIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGxpbmU6CiAgICAgICAgIyAgICRucG9ydCAgID0gJHBvcnQgPSBzaGlmdCB8fCAkbmFtZTsKICAgICAgICAjIFRoZSBmaXJzdCAnPScgbWF5IGVpdGhlciBiZSAnPTAnIG9yICc9MC4xJyBbbGV2ZWwgMCwgZmlyc3QgZXF1YWxzXQogICAgICAgICMgVGhlIHNlY29uZCAnPScgd2lsbCBiZSAnPTAuMicgW2xldmVsIDAsIHNlY29uZCBlcXVhbHNdCgogICAgICAgIGlmICggZGVmaW5lZCggJGRlY29kZWRfdG9rZW57JHRva30gKSApIHsKICAgICAgICAgICAgcmV0dXJuIEB7ICRkZWNvZGVkX3Rva2VueyR0b2t9IH07CiAgICAgICAgfQoKICAgICAgICBteSAoICRyYXdfdG9rLCAkbGV2LCAkdGFnLCAkdG9rX2NvdW50ICkgPSAoICR0b2ssIDAsIEVNUFRZX1NUUklORywgMSApOwogICAgICAgIGlmICggJHRvayA9fiAvXihcRCspKFxkKykoW15cLl0qKShcLihcZCspKT8kLyApIHsKICAgICAgICAgICAgJHJhd190b2sgICA9ICQxOwogICAgICAgICAgICAkbGV2ICAgICAgID0gJDI7CiAgICAgICAgICAgICR0YWcgICAgICAgPSAkMyBpZiAoJDMpOwogICAgICAgICAgICAkdG9rX2NvdW50ID0gJDUgaWYgKCQ1KTsKICAgICAgICB9CiAgICAgICAgbXkgQHZhbHMgPSAoICRyYXdfdG9rLCAkbGV2LCAkdGFnLCAkdG9rX2NvdW50ICk7CiAgICAgICAgJGRlY29kZWRfdG9rZW57JHRva30gPSBcQHZhbHM7CiAgICAgICAgcmV0dXJuIEB2YWxzOwogICAgfSAjIyBlbmQgc3ViIGRlY29kZV9hbGlnbm1lbnRfdG9rZW4KfQoKc3ViIGRlbGV0ZV91bm1hdGNoZWRfdG9rZW5zIHsKICAgIG15ICggJHJsaW5lcywgJGdyb3VwX2xldmVsICkgPSBAXzsKCiAgICAjIFJlbW92ZSBhcyBtYW55IG9idmlvdXNseSB1bi1uZWVkZWQgYWxpZ25tZW50IHRva2VucyBhcyBwb3NzaWJsZS4KICAgICMgVGhpcyB3aWxsIHByZXZlbnQgdGhlbSBmcm9tIGludGVyZmVyaW5nIHdpdGggdGhlIGZpbmFsIGFsaWdubWVudC4KCiAgICAjIEdpdmVuOgogICAgIyAgICRybGluZXMgPSByZWYgdG8gaGFzaCBvZiBhbGwgbGluZXMgaW4gdGhpcyBhbGlnbm1lbnQgZ3JvdXAKICAgICMgICAkZ3JvdXBfbGV2ZWwgPSB0aGVpciBjb21tZW50IGluZGVudGF0aW9uIGxldmVsCgogICAgIyBSZXR1cm46CiAgICBteSAkbWF4X2xldl9kaWZmICAgICAgPSAwOyAgICAjIHVzZWQgdG8gYXZvaWQgYSBjYWxsIHRvIHBydW5lX3RyZWUKICAgIG15ICRzYXdfc2lkZV9jb21tZW50ICA9IDA7ICAgICMgdXNlZCB0byBhdm9pZCBhIGNhbGwgZm9yIHNpZGUgY29tbWVudHMKICAgIG15ICRzYXdfc2lnbmVkX251bWJlciA9IDA7ICAgICMgdXNlZCB0byBhdm9pZCBhIGNhbGwgZm9yIC12c24KCiAgICAjIEhhbmRsZSBubyBsaW5lcyAtLSBzaG91bGRuJ3QgaGFwcGVuCiAgICByZXR1cm4gdW5sZXNzIEB7JHJsaW5lc307CgogICAgIyBIYW5kbGUgYSBzaW5nbGUgbGluZQogICAgaWYgKCBAeyRybGluZXN9ID09IDEgKSB7CiAgICAgICAgbXkgJGxpbmUgICA9ICRybGluZXMtPlswXTsKICAgICAgICBteSAkam1heCAgID0gJGxpbmUtPnsnam1heCd9OwogICAgICAgIG15ICRsZW5ndGggPSAkbGluZS0+eydyZmllbGRfbGVuZ3Rocyd9LT5bJGptYXhdOwogICAgICAgICRzYXdfc2lkZV9jb21tZW50ID0gJGxlbmd0aCA+IDA7CiAgICAgICAgcmV0dXJuICggJG1heF9sZXZfZGlmZiwgJHNhd19zaWRlX2NvbW1lbnQsICRzYXdfc2lnbmVkX251bWJlciApOwogICAgfQoKICAgICMgaWdub3JlIGhhbmdpbmcgc2lkZSBjb21tZW50cyBpbiB0aGVzZSBvcGVyYXRpb25zCiAgICBteSBAZmlsdGVyZWQgICA9IGdyZXAgeyAhJF8tPnsnaXNfaGFuZ2luZ19zaWRlX2NvbW1lbnQnfSB9IEB7JHJsaW5lc307CiAgICBteSAkcm5ld19saW5lcyA9IFxAZmlsdGVyZWQ7CgogICAgJHNhd19zaWRlX2NvbW1lbnQgPSBAZmlsdGVyZWQgIT0gQHskcmxpbmVzfTsKICAgICRtYXhfbGV2X2RpZmYgICAgID0gMDsKCiAgICAjIG5vdGhpbmcgdG8gZG8gaWYgYWxsIGxpbmVzIHdlcmUgaGFuZ2luZyBzaWRlIGNvbW1lbnRzCiAgICBteSAkam1heCA9IEB7JHJuZXdfbGluZXN9IC0gMTsKICAgIHJldHVybiAoICRtYXhfbGV2X2RpZmYsICRzYXdfc2lkZV9jb21tZW50LCAkc2F3X3NpZ25lZF9udW1iZXIgKQogICAgICBpZiAoICRqbWF4IDwgMCApOwoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIENyZWF0ZSBhIGhhc2ggb2YgYWxpZ25tZW50IHRva2VuIGluZm8gZm9yIGVhY2ggbGluZQogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICggbXkgJHJsaW5lX2hhc2hlcywgbXkgJHJlcXVhbHNfaW5mbywgJHNhd19zaWRlX2NvbW1lbnQsICRtYXhfbGV2X2RpZmYgKSA9CiAgICAgIG1ha2VfYWxpZ25tZW50X2luZm8oICRncm91cF9sZXZlbCwgJHJuZXdfbGluZXMsICRzYXdfc2lkZV9jb21tZW50ICk7CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBGaW5kIGluZGVwZW5kZW50IHN1Ymdyb3VwcyBvZiBsaW5lcy4gIE5laWdoYm9yaW5nIHN1Ymdyb3VwcwogICAgIyBkbyBub3QgaGF2ZSBhIGNvbW1vbiBhbGlnbm1lbnQgdG9rZW4uCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBteSBAc3ViZ3JvdXBzOwogICAgcHVzaCBAc3ViZ3JvdXBzLCBbIDAsICRqbWF4IF07CiAgICBmb3JlYWNoIG15ICRqbCAoIDAgLi4gJGptYXggLSAxICkgewogICAgICAgIGlmICggJHJuZXdfbGluZXMtPlskamxdLT57J2VuZF9ncm91cCd9ICkgewogICAgICAgICAgICAkc3ViZ3JvdXBzWy0xXS0+WzFdID0gJGpsOwogICAgICAgICAgICBwdXNoIEBzdWJncm91cHMsIFsgJGpsICsgMSwgJGptYXggXTsKICAgICAgICB9CiAgICB9CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFBBU1MgMSBvdmVyIHN1Ymdyb3VwcyB0byByZW1vdmUgdW5tYXRjaGVkIGFsaWdubWVudCB0b2tlbnMKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZGVsZXRlX3VubWF0Y2hlZF90b2tlbnNfbWFpbl9sb29wKAogICAgICAgICRncm91cF9sZXZlbCwgICRybmV3X2xpbmVzLCBcQHN1Ymdyb3VwcywKICAgICAgICAkcmxpbmVfaGFzaGVzLCAkcmVxdWFsc19pbmZvCiAgICApOwoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFBBU1MgMjogQ29uc3RydWN0IGEgdHJlZSBvZiBtYXRjaGVkIGxpbmVzIGFuZCBkZWxldGUgc29tZSBzbWFsbAogICAgIyBkZWVwZXIgbGV2ZWxzIG9mIHRva2Vucy4gIFRoZXkgYWxzbyBibG9jayBnb29kIGFsaWdubWVudHMuCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgcHJ1bmVfYWxpZ25tZW50X3RyZWUoJHJuZXdfbGluZXMpIGlmICgkbWF4X2xldl9kaWZmKTsKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgUEFTUyAzOiBjb21wYXJlIGFsbCBsaW5lcyBmb3IgY29tbW9uIHRva2VucwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAkc2F3X3NpZ25lZF9udW1iZXIgPQogICAgICBtYXRjaF9saW5lX3BhaXJzKCAkcmxpbmVzLCAkcm5ld19saW5lcywgXEBzdWJncm91cHMsICRncm91cF9sZXZlbCApOwoKICAgIHJldHVybiAoICRtYXhfbGV2X2RpZmYsICRzYXdfc2lkZV9jb21tZW50LCAkc2F3X3NpZ25lZF9udW1iZXIgKTsKfSAjIyBlbmQgc3ViIGRlbGV0ZV91bm1hdGNoZWRfdG9rZW5zCgpzdWIgbWFrZV9hbGlnbm1lbnRfaW5mbyB7CgogICAgbXkgKCAkZ3JvdXBfbGV2ZWwsICRybmV3X2xpbmVzLCAkc2F3X3NpZGVfY29tbWVudCApID0gQF87CgogICAgIyBDcmVhdGUgYSBoYXNoIG9mIGFsaWdubWVudCB0b2tlbiBpbmZvIGZvciBlYWNoIGxpbmUKICAgICMgVGhpcyBpbmZvIHdpbGwgYmUgdXNlZCB0byBmaW5kIGNvbW1vbiBhbGlnbm1lbnRzCgogICAgIyBHaXZlbjoKICAgICMgICAkZ3JvdXBfbGV2ZWwgPSBjb21tb24gaW5kZW50YXRpb24gbGV2ZWwKICAgICMgICAkcm5ld19saW5lcyA9IHJlZiB0byBoYXNoIG9mIGxpbmUgaW5mbwogICAgIyAgICRzYXdfc2lkZV9jb21tZW50ID0gdHJ1ZSBpZiB0aGVyZSBpcyBhIHNpZGUgY29tbWVudAogICAgIyBSZXR1cm46CiAgICAjICAgJHJsaW5lX2hhc2hlcyA9IHJlZiB0byBoYXNoIHdpdGggbmV3IGxpbmUgdmFycwogICAgIyAgXEBlcXVhbHNfaW5mbyAgPSByZWYgdG8gYXJyYXkgd2l0aCBpbmZvIG9uIGFueSAnPScgdG9rZW5zCiAgICAjICAgJHNhd19zaWRlX2NvbW1lbnQgPSB1cGRhdGVkIHNpZGUgY29tbWVudCBmbGFnCiAgICAjICAgJG1heF9sZXZfZGlmZiA9IG1heGltdW0gbGV2ZWwgY2hhbmdlIHNlZW4KCiAgICAjLS0tLS0tLS0tLS0tLS0tLQogICAgIyBMb29wIG92ZXIgbGluZXMKICAgICMtLS0tLS0tLS0tLS0tLS0tCiAgICBteSAkcmxpbmVfaGFzaGVzID0gW107CiAgICBteSBAZXF1YWxzX2luZm87CiAgICBteSBAbGluZV9pbmZvOyAgICAjIG5vIGxvbmdlciB1c2VkCiAgICBteSAkam1heCAgICAgICAgID0gQHskcm5ld19saW5lc30gLSAxOwogICAgbXkgJG1heF9sZXZfZGlmZiA9IDA7CiAgICBmb3JlYWNoIG15ICRsaW5lICggQHskcm5ld19saW5lc30gKSB7CiAgICAgICAgbXkgJHJoYXNoICAgICA9IHt9OwogICAgICAgIG15ICRydG9rZW5zICAgPSAkbGluZS0+eydydG9rZW5zJ307CiAgICAgICAgbXkgJHJwYXR0ZXJucyA9ICRsaW5lLT57J3JwYXR0ZXJucyd9OwogICAgICAgIG15ICRpICAgICAgICAgPSAwOwogICAgICAgIG15ICggJGlfZXEsICR0b2tfZXEsICRwYXRfZXEgKTsKICAgICAgICBteSAoICRsZXZfbWluLCAkbGV2X21heCApOwogICAgICAgIGZvcmVhY2ggbXkgJHRvayAoIEB7JHJ0b2tlbnN9ICkgewogICAgICAgICAgICBteSAoICRyYXdfdG9rLCAkbGV2LCAkdGFnLCAkdG9rX2NvdW50ICkgPQogICAgICAgICAgICAgIGRlY29kZV9hbGlnbm1lbnRfdG9rZW4oJHRvayk7CgogICAgICAgICAgICBpZiAoICR0b2sgbmUgJyMnICkgewogICAgICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkbGV2X21pbikgKSB7CiAgICAgICAgICAgICAgICAgICAgJGxldl9taW4gPSAkbGV2OwogICAgICAgICAgICAgICAgICAgICRsZXZfbWF4ID0gJGxldjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmICggJGxldiA8ICRsZXZfbWluICkgeyAkbGV2X21pbiA9ICRsZXYgfQogICAgICAgICAgICAgICAgICAgIGlmICggJGxldiA+ICRsZXZfbWF4ICkgeyAkbGV2X21heCA9ICRsZXYgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCAhJHNhd19zaWRlX2NvbW1lbnQgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJGxlbmd0aCA9ICRsaW5lLT57J3JmaWVsZF9sZW5ndGhzJ30tPlsgJGkgKyAxIF07CiAgICAgICAgICAgICAgICAgICAgJHNhd19zaWRlX2NvbW1lbnQgfHw9ICRsZW5ndGg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgUG9zc2libGUgZnV0dXJlIHVwZ3JhZGU6IGZvciBtdWx0aXBsZSBtYXRjaGVzLAogICAgICAgICAgICAjIHJlY29yZCBbJGkxLCAkaTIsIC4uXSBpbnN0ZWFkIG9mICRpCiAgICAgICAgICAgICRyaGFzaC0+eyR0b2t9ID0KICAgICAgICAgICAgICBbICRpLCB1bmRlZiwgdW5kZWYsICRyYXdfdG9rLCAkbGV2LCAkdGFnLCAkdG9rX2NvdW50IF07CgogICAgICAgICAgICAjIHJlbWVtYmVyIHRoZSBmaXJzdCBlcXVhbHMgYXQgbGluZSBsZXZlbAogICAgICAgICAgICBpZiAoICFkZWZpbmVkKCRpX2VxKSAmJiAkcmF3X3RvayBlcSAnPScgKSB7CgogICAgICAgICAgICAgICAgaWYgKCAkbGV2IGVxICRncm91cF9sZXZlbCApIHsKICAgICAgICAgICAgICAgICAgICAkaV9lcSAgID0gJGk7CiAgICAgICAgICAgICAgICAgICAgJHRva19lcSA9ICR0b2s7CiAgICAgICAgICAgICAgICAgICAgJHBhdF9lcSA9ICRycGF0dGVybnMtPlskaV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGkrKzsKICAgICAgICB9CiAgICAgICAgcHVzaCBAeyRybGluZV9oYXNoZXN9LCAkcmhhc2g7CiAgICAgICAgcHVzaCBAZXF1YWxzX2luZm8sICAgICBbICRpX2VxLCAgICAkdG9rX2VxLCAkcGF0X2VxIF07CiAgICAgICAgcHVzaCBAbGluZV9pbmZvLCAgICAgICBbICRsZXZfbWluLCAkbGV2X21heCBdOwogICAgICAgIGlmICggZGVmaW5lZCgkbGV2X21pbikgKSB7CiAgICAgICAgICAgIG15ICRsZXZfZGlmZiA9ICRsZXZfbWF4IC0gJGxldl9taW47CiAgICAgICAgICAgIGlmICggJGxldl9kaWZmID4gJG1heF9sZXZfZGlmZiApIHsgJG1heF9sZXZfZGlmZiA9ICRsZXZfZGlmZiB9CiAgICAgICAgfQogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIExvb3AgdG8gY29tcGFyZSBlYWNoIGxpbmUgcGFpciBhbmQgcmVtZW1iZXIgbWF0Y2hlcwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIG15ICRydG9rX2hhc2ggPSB7fTsKICAgIG15ICRuciAgICAgICAgPSAwOwogICAgZm9yZWFjaCBteSAkamwgKCAwIC4uICRqbWF4IC0gMSApIHsKICAgICAgICBteSAkbmwgPSAkbnI7CiAgICAgICAgJG5yID0gMDsKICAgICAgICBteSAkanIgICAgICA9ICRqbCArIDE7CiAgICAgICAgbXkgJHJoYXNoX2wgPSAkcmxpbmVfaGFzaGVzLT5bJGpsXTsKICAgICAgICBteSAkcmhhc2hfciA9ICRybGluZV9oYXNoZXMtPlskanJdOwogICAgICAgIGZvcmVhY2ggbXkgJHRvayAoIGtleXMgJXskcmhhc2hfbH0gKSB7CiAgICAgICAgICAgIGlmICggZGVmaW5lZCggJHJoYXNoX3ItPnskdG9rfSApICkgewogICAgICAgICAgICAgICAgbXkgJGlsID0gJHJoYXNoX2wtPnskdG9rfS0+WzBdOwogICAgICAgICAgICAgICAgbXkgJGlyID0gJHJoYXNoX3ItPnskdG9rfS0+WzBdOwogICAgICAgICAgICAgICAgJHJoYXNoX2wtPnskdG9rfS0+WzJdID0gJGlyOwogICAgICAgICAgICAgICAgJHJoYXNoX3ItPnskdG9rfS0+WzFdID0gJGlsOwogICAgICAgICAgICAgICAgaWYgKCAkdG9rIG5lICcjJyApIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEB7ICRydG9rX2hhc2gtPnskdG9rfSB9LCAoICRqbCwgJGpyICk7CiAgICAgICAgICAgICAgICAgICAgJG5yKys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgU2V0IGEgbGluZSBicmVhayBpZiBubyBtYXRjaGluZyB0b2tlbnMgYmV0d2VlbiB0aGVzZSBsaW5lcwogICAgICAgICMgKHRoaXMgaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSBub3cgYnV0IGRvZXMgbm90IGh1cnQpCiAgICAgICAgaWYgKCAkbnIgPT0gMCAmJiAkbmwgPiAwICkgewogICAgICAgICAgICAkcm5ld19saW5lcy0+WyRqbF0tPnsnZW5kX2dyb3VwJ30gPSAxOwogICAgICAgIH0KCiAgICAgICAgIyBBbHNvIHNldCBhIGxpbmUgYnJlYWsgaWYgYm90aCBsaW5lcyBoYXZlIHNpbXBsZSBlcXVhbHMgYnV0IHdpdGgKICAgICAgICAjIGRpZmZlcmVudCBsZWFkaW5nIGNoYXJhY3RlcnMgaW4gcGF0dGVybnMuICBUaGlzIGNoZWNrIGlzIHNpbWlsYXIKICAgICAgICAjIHRvIG9uZSBpbiBzdWIgY2hlY2tfbWF0Y2gsIGFuZCB3aWxsIHByZXZlbnQgc3ViCiAgICAgICAgIyBwcnVuZV9hbGlnbm1lbnRfdHJlZSBmcm9tIHJlbW92aW5nIGFsaWdubWVudHMgd2hpY2ggb3RoZXJ3aXNlCiAgICAgICAgIyBzaG91bGQgYmUga2VwdC4gVGhpcyBmaXggaXMgcmFyZWx5IG5lZWRlZCwgYnV0IGl0IGNhbgogICAgICAgICMgb2NjYXNpb25hbGx5IGltcHJvdmUgZm9ybWF0dGluZy4KICAgICAgICAjIEZvciBleGFtcGxlOgogICAgICAgICMgICAgIG15ICRuYW1lID0gJHRoaXMtPntOYW1lfTsKICAgICAgICAjICAgICAkdHlwZSA9ICR0aGlzLT5jdHlwZSgkZ2VubG9vcHR5cGUpIGlmIGRlZmluZWQgJGdlbmxvb3B0eXBlOwogICAgICAgICMgICAgIG15ICRkZWNsaW5pID0gKCAkYXNnbm9ubHkgPyAiIiAgICAgICAgICA6ICJcdCR0eXBlICoiICk7CiAgICAgICAgIyAgICAgbXkgJGNhc3QgICAgPSAoICR0eXBlICAgICA/ICIoJHR5cGUgKikiIDogIiIgKTsKICAgICAgICAjIFRoZSBsYXN0IHR3byBsaW5lcyBzdGFydCB3aXRoICdteScgYW5kIHdpbGwgbm90IG1hdGNoIHRoZQogICAgICAgICMgcHJldmlvdXMgbGluZSBzdGFydGluZyB3aXRoICR0eXBlLCBzbyB3ZSBkbyBub3Qgd2FudAogICAgICAgICMgcHJ1bmVfYWxpZ25tZW50IHRyZWUgdG8gZGVsZXRlIHRoZWlyID8gOiBhbGlnbm1lbnRzIGF0IGEgZGVlcGVyCiAgICAgICAgIyBsZXZlbC4KICAgICAgICBteSAoICRpX2VxX2wsICR0b2tfZXFfbCwgJHBhdF9lcV9sICkgPSBAeyAkZXF1YWxzX2luZm9bJGpsXSB9OwogICAgICAgIG15ICggJGlfZXFfciwgJHRva19lcV9yLCAkcGF0X2VxX3IgKSA9IEB7ICRlcXVhbHNfaW5mb1skanJdIH07CiAgICAgICAgaWYgKCBkZWZpbmVkKCRpX2VxX2wpICYmIGRlZmluZWQoJGlfZXFfcikgKSB7CgogICAgICAgICAgICAjIEFsc28sIGRvIG5vdCBhbGlnbiBlcXVhbHMgYWNyb3NzIGEgY2hhbmdlIGluIGNpIGxldmVsCiAgICAgICAgICAgIG15ICRjaV9qdW1wID0gJHJuZXdfbGluZXMtPlskamxdLT57J2NpX2xldmVsJ30gIT0KICAgICAgICAgICAgICAkcm5ld19saW5lcy0+WyRqcl0tPnsnY2lfbGV2ZWwnfTsKCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICR0b2tfZXFfbCBlcSAkdG9rX2VxX3IKICAgICAgICAgICAgICAgICYmICRpX2VxX2wgPT0gMAogICAgICAgICAgICAgICAgJiYgJGlfZXFfciA9PSAwCiAgICAgICAgICAgICAgICAmJiAoIHN1YnN0ciggJHBhdF9lcV9sLCAwLCAxICkgbmUgc3Vic3RyKCAkcGF0X2VxX3IsIDAsIDEgKQogICAgICAgICAgICAgICAgICAgIHx8ICRjaV9qdW1wICkKICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRybmV3X2xpbmVzLT5bJGpsXS0+eydlbmRfZ3JvdXAnfSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gKCAkcmxpbmVfaGFzaGVzLCBcQGVxdWFsc19pbmZvLCAkc2F3X3NpZGVfY29tbWVudCwgJG1heF9sZXZfZGlmZiApOwp9ICMjIGVuZCBzdWIgbWFrZV9hbGlnbm1lbnRfaW5mbwoKc3ViIGRlbGV0ZV91bm1hdGNoZWRfdG9rZW5zX21haW5fbG9vcCB7CgogICAgbXkgKCAkZ3JvdXBfbGV2ZWwsICRybmV3X2xpbmVzLCAkcnN1Ymdyb3VwcywgJHJsaW5lX2hhc2hlcywgJHJlcXVhbHNfaW5mbyApCiAgICAgID0gQF87CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIE1haW4gbG9vcCBvdmVyIHN1Ymdyb3VwcyB0byByZW1vdmUgdW5tYXRjaGVkIGFsaWdubWVudCB0b2tlbnMKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICMgZmxhZyB0byBhbGxvdyBza2lwcGluZyBwYXNzIDIgLSBub3QgY3VycmVudGx5IHVzZWQKICAgIG15ICRzYXdfbGFyZ2VfZ3JvdXA7CgogICAgbXkgJGhhc190ZXJtaW5hbF9tYXRjaCA9ICRybmV3X2xpbmVzLT5bLTFdLT57J2pfdGVybWluYWxfbWF0Y2gnfTsKCiAgICBmb3JlYWNoIG15ICRpdGVtICggQHskcnN1Ymdyb3Vwc30gKSB7CiAgICAgICAgbXkgKCAkamJlZywgJGplbmQgKSA9IEB7JGl0ZW19OwoKICAgICAgICBteSAkbmxpbmVzID0gJGplbmQgLSAkamJlZyArIDE7CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIExvb2sgZm9yIGNvbXBsZXRlIGlmL2Vsc2lmL2Vsc2UgYW5kIHRlcm5hcnkgYmxvY2tzCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAjIFdlIGFyZSBsb29raW5nIGZvciBhIGNvbW1vbiAnJGRpdmlkaW5nX3Rva2VuJyBsaWtlIHRoZXNlOgoKICAgICAgICAjICAgIGlmICAgICggJGIgYW5kICRzICkgeyAkcC0+eyd0eXBlJ30gPSAnYSc7IH0KICAgICAgICAjICAgIGVsc2lmICgkYikgICAgICAgICAgeyAkcC0+eyd0eXBlJ30gPSAnYic7IH0KICAgICAgICAjICAgIGVsc2lmICgkcykgICAgICAgICAgeyAkcC0+eyd0eXBlJ30gPSAncyc7IH0KICAgICAgICAjICAgIGVsc2UgICAgICAgICAgICAgICAgeyAkcC0+eyd0eXBlJ30gPSAnJzsgfQogICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICBeLS0tLS0tLS0tLS0gZGl2aWRpbmdfdG9rZW4KCiAgICAgICAgIyAgIG15ICRzZXZlcml0eSA9CiAgICAgICAgIyAgICAgICEkcm91dGluZSAgICAgICAgICAgICAgICAgICAgID8gJ1tQRlhdJwogICAgICAgICMgICAgIDogJHJvdXRpbmUgPX4gL3dhcm4uKl9kXHovICAgICA/ICdbRFNdJwogICAgICAgICMgICAgIDogJHJvdXRpbmUgPX4gL2NrX3dhcm4vICAgICAgICA/ICdXJwogICAgICAgICMgICAgIDogJHJvdXRpbmUgPX4gL2NrV0FSTlxkKnJlZ19kLyA/ICdTJwogICAgICAgICMgICAgIDogJHJvdXRpbmUgPX4gL2NrV0FSTlxkKnJlZy8gICA/ICdXJwogICAgICAgICMgICAgIDogJHJvdXRpbmUgPX4gL3ZXQVJOXGQvICAgICAgICA/ICdbV0RTXScKICAgICAgICAjICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnW1BGWF0nOwogICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeLS0tLS0tLS0tLS0gZGl2aWRpbmdfdG9rZW4KCiAgICAgICAgIyBPbmx5IGxvb2sgZm9yIGdyb3VwcyB3aGljaCBhcmUgbW9yZSB0aGFuIDIgbGluZXMgbG9uZy4gIFR3byBsaW5lcwogICAgICAgICMgY2FuIGdldCBtZXNzZWQgdXAgZG9pbmcgdGhpcywgcHJvYmFibHkgZHVlIHRvIHRoZSB2YXJpb3VzCiAgICAgICAgIyB0d28tbGluZSBydWxlcy4KCiAgICAgICAgbXkgJGRpdmlkaW5nX3Rva2VuOwogICAgICAgIG15ICV0b2tlbl9saW5lX2NvdW50OwogICAgICAgIGlmICggJG5saW5lcyA+IDIgKSB7CgogICAgICAgICAgICBmb3JlYWNoIG15ICRqaiAoICRqYmVnIC4uICRqZW5kICkgewogICAgICAgICAgICAgICAgbXkgJXNlZW47CiAgICAgICAgICAgICAgICBteSAkbGluZSAgICA9ICRybmV3X2xpbmVzLT5bJGpqXTsKICAgICAgICAgICAgICAgIG15ICRydG9rZW5zID0gJGxpbmUtPnsncnRva2Vucyd9OwogICAgICAgICAgICAgICAgZm9yZWFjaCBteSAkdG9rICggQHskcnRva2Vuc30gKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJHNlZW57JHRva30gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzZWVueyR0b2t9Kys7CiAgICAgICAgICAgICAgICAgICAgICAgICR0b2tlbl9saW5lX2NvdW50eyR0b2t9Kys7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3JlYWNoIG15ICR0b2sgKCBrZXlzICV0b2tlbl9saW5lX2NvdW50ICkgewogICAgICAgICAgICAgICAgaWYgKCAkdG9rZW5fbGluZV9jb3VudHskdG9rfSA9PSAkbmxpbmVzICkgewogICAgICAgICAgICAgICAgICAgIGlmICggICBzdWJzdHIoICR0b2ssIDAsIDEgKSBlcSAnPycKICAgICAgICAgICAgICAgICAgICAgICAgfHwgc3Vic3RyKCAkdG9rLCAwLCAxICkgZXEgJ3snICYmICR0b2sgPX4gL15ce1xkK2lmLyApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkZGl2aWRpbmdfdG9rZW4gPSAkdG9rOwogICAgICAgICAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIExvb3Agb3ZlciBzdWJncm91cCBsaW5lcyB0byByZW1vdmUgdW53YW50ZWQgYWxpZ25tZW50IHRva2VucwogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgZm9yZWFjaCBteSAkamogKCAkamJlZyAuLiAkamVuZCApIHsKICAgICAgICAgICAgbXkgJGxpbmUgICAgPSAkcm5ld19saW5lcy0+WyRqal07CiAgICAgICAgICAgIG15ICRydG9rZW5zID0gJGxpbmUtPnsncnRva2Vucyd9OwogICAgICAgICAgICBteSAkcmhhc2ggICA9ICRybGluZV9oYXNoZXMtPlskampdOwogICAgICAgICAgICBteSAkaV9lcSAgICA9ICRyZXF1YWxzX2luZm8tPlskampdLT5bMF07CiAgICAgICAgICAgIG15IEBpZGVsOwogICAgICAgICAgICBteSAkaW1heCA9IEB7JHJ0b2tlbnN9IC0gMjsKICAgICAgICAgICAgbXkgJGRlbGV0ZV9hYm92ZV9sZXZlbDsKICAgICAgICAgICAgbXkgJGRlbGV0ZWRfYXNzaWdubWVudF90b2tlbjsKCiAgICAgICAgICAgIG15ICRzYXdfZGl2aWRpbmdfdG9rZW4gPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgICRzYXdfbGFyZ2VfZ3JvdXAgfHw9ICRubGluZXMgPiAyICYmICRpbWF4ID4gMTsKCiAgICAgICAgICAgICMgTG9vcCBvdmVyIGFsbCBhbGlnbm1lbnQgdG9rZW5zCiAgICAgICAgICAgIGZvcmVhY2ggbXkgJGkgKCAwIC4uICRpbWF4ICkgewogICAgICAgICAgICAgICAgbXkgJHRvayA9ICRydG9rZW5zLT5bJGldOwogICAgICAgICAgICAgICAgbmV4dCBpZiAoICR0b2sgZXEgJyMnICk7ICAgICMgc2hvdWxkbid0IGhhcHBlbgogICAgICAgICAgICAgICAgbXkgKCAkaWlpX3V1LCAkaWwsICRpciwgJHJhd190b2ssICRsZXYsICR0YWdfdXUsICR0b2tfY291bnQgKSA9CiAgICAgICAgICAgICAgICAgIEB7ICRyaGFzaC0+eyR0b2t9IH07CgogICAgICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgIyBIZXJlIGlzIHRoZSBiYXNpYyBSVUxFOiByZW1vdmUgYW4gdW5tYXRjaGVkIGFsaWdubWVudAogICAgICAgICAgICAgICAgIyB3aGljaCBkb2VzIG5vdCBvY2N1ciBpbiB0aGUgc3Vycm91bmRpbmcgbGluZXMuCiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICBteSAkZGVsZXRlX21lID0gIWRlZmluZWQoJGlsKSAmJiAhZGVmaW5lZCgkaXIpOwoKICAgICAgICAgICAgICAgICMgQXBwbHkgYW55IHVzZXIgY29udHJvbHMuIE5vdGUgdGhhdCBub3QgYWxsIGxpbmVzIHBhc3MKICAgICAgICAgICAgICAgICMgdGhpcyB3YXkgc28gdGhleSBoYXZlIHRvIGJlIGFwcGxpZWQgZWxzZXdoZXJlIHRvby4KICAgICAgICAgICAgICAgIG15ICRhbGlnbl9vayA9IDE7CiAgICAgICAgICAgICAgICBpZiAoJXZhbGlnbl9jb250cm9sX2hhc2gpIHsKICAgICAgICAgICAgICAgICAgICAkYWxpZ25fb2sgPSAkdmFsaWduX2NvbnRyb2xfaGFzaHskcmF3X3Rva307CiAgICAgICAgICAgICAgICAgICAgJGFsaWduX29rID0gJHZhbGlnbl9jb250cm9sX2RlZmF1bHQKICAgICAgICAgICAgICAgICAgICAgIHVubGVzcyBkZWZpbmVkKCRhbGlnbl9vayk7CiAgICAgICAgICAgICAgICAgICAgJGRlbGV0ZV9tZSB8fD0gISRhbGlnbl9vazsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIEJ1dCBub3cgd2UgbW9kaWZ5IHRoaXMgd2l0aCBleGNlcHRpb25zLi4uCgogICAgICAgICAgICAgICAgIyBFWENFUFRJT04gMTogSWYgd2UgYXJlIGluIGEgY29tcGxldGUgdGVybmFyeSBvcgogICAgICAgICAgICAgICAgIyBpZi9lbHNpZi9lbHNlIGdyb3VwLCBhbmQgdGhpcyB0b2tlbiBpcyBub3Qgb24gZXZlcnkgbGluZQogICAgICAgICAgICAgICAgIyBvZiB0aGUgZ3JvdXAsIHNob3VsZCB3ZSBkZWxldGUgaXQgdG8gcHJlc2VydmUgb3ZlcmFsbAogICAgICAgICAgICAgICAgIyBhbGlnbm1lbnQ/CiAgICAgICAgICAgICAgICBpZiAoJGRpdmlkaW5nX3Rva2VuKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkdG9rZW5fbGluZV9jb3VudHskdG9rfSA+PSAkbmxpbmVzICkgewogICAgICAgICAgICAgICAgICAgICAgICAkc2F3X2RpdmlkaW5nX3Rva2VuIHx8PSAkdG9rIGVxICRkaXZpZGluZ190b2tlbjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIEZvciBzaG9ydGVyIHJ1bnMsIGRlbGV0ZSB0b2tzIHRvIHNhdmUgYWxpZ25tZW50LgogICAgICAgICAgICAgICAgICAgICAgICAjIEZvciBsb25nZXIgcnVucywga2VlcCB0b2tzIGFmdGVyIHRoZSAneycgb3IgJz8nCiAgICAgICAgICAgICAgICAgICAgICAgICMgdG8gYWxsb3cgc3ViLWFsaWdubWVudHMgd2l0aGluIGJyYWNlcy4gIFRoZQogICAgICAgICAgICAgICAgICAgICAgICAjIG51bWJlciA1IGxpbmVzIGlzIGFyYml0cmFyeSBidXQgc2VlbXMgdG8gd29yayBvay4KICAgICAgICAgICAgICAgICAgICAgICAgJGRlbGV0ZV9tZSB8fD0gKCAkbmxpbmVzIDwgNSB8fCAhJHNhd19kaXZpZGluZ190b2tlbiApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIEVYQ0VQVElPTiAyOiBSZW1vdmUgYWxsIHRva2VucyBhYm92ZSBhIGNlcnRhaW4gbGV2ZWwKICAgICAgICAgICAgICAgICMgZm9sbG93aW5nIGEgcHJldmlvdXMgZGVsZXRpb24uICBGb3IgZXhhbXBsZSwgd2UgaGF2ZSB0bwogICAgICAgICAgICAgICAgIyByZW1vdmUgdGFnZ2VkIGhpZ2hlciBsZXZlbCBhbGlnbm1lbnQgdG9rZW5zIGZvbGxvd2luZyBhCiAgICAgICAgICAgICAgICAjICc9PicgZGVsZXRpb24gYmVjYXVzZSB0aGUgdGFncyBvZiBoaWdoZXIgbGV2ZWwgdG9rZW5zCiAgICAgICAgICAgICAgICAjIHdpbGwgbm93IGJlIGluY29ycmVjdC4gRm9yIGV4YW1wbGUsIHRoaXMgd2lsbCBwcmV2ZW50CiAgICAgICAgICAgICAgICAjIGFsaWduaW5nIGNvbW1hcyBhcyBmb2xsb3dzIGFmdGVyIGRlbGV0aW5nIHRoZSBzZWNvbmQgJz0+JwogICAgICAgICAgICAgICAgIyAgICAkdy0+aW5zZXJ0KAogICAgICAgICAgICAgICAgIyAgICAgICAgIExpc3RCb3ggPT4gb3JpZ2luID0+IFsgMjcwLCAxNjAgXSwKICAgICAgICAgICAgICAgICMgICAgICAgICBzaXplICAgID0+IFsgMjAwLCAgICAgICAgICAgNTUgXSwKICAgICAgICAgICAgICAgICMgICAgKTsKICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCgkZGVsZXRlX2Fib3ZlX2xldmVsKSApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICRsZXYgPiAkZGVsZXRlX2Fib3ZlX2xldmVsICkgewogICAgICAgICAgICAgICAgICAgICAgICAkZGVsZXRlX21lIHx8PSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJGRlbGV0ZV9hYm92ZV9sZXZlbCA9IHVuZGVmIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIEVYQ0VQVElPTiAzOiBSZW1vdmUgYWxsIGJ1dCBjZXJ0YWluIHRva2VucyBhZnRlciBhbgogICAgICAgICAgICAgICAgIyBhc3NpZ25tZW50IGRlbGV0aW9uLgogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICRkZWxldGVkX2Fzc2lnbm1lbnRfdG9rZW4KICAgICAgICAgICAgICAgICAgICAmJiAoICRsZXYgPiAkZ3JvdXBfbGV2ZWwKICAgICAgICAgICAgICAgICAgICAgICAgfHwgISRpc19pZl9vcnskcmF3X3Rva30gKQogICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJGRlbGV0ZV9tZSB8fD0gMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIEVYQ0VQVElPTiA0OiBEbyBub3QgdG91Y2ggdGhlIGZpcnN0IGxpbmUgb2YgYSAyIGxpbmUKICAgICAgICAgICAgICAgICMgdGVybWluYWwgbWF0Y2gsIHN1Y2ggYXMgYmVsb3csIGJlY2F1c2Ugal90ZXJtaW5hbCBoYXMKICAgICAgICAgICAgICAgICMgYWxyZWFkeSBiZWVuIHNldC4KICAgICAgICAgICAgICAgICMgICAgaWYgKCR0YWcpIHsgJHRhZ28gPSAiPCR0YWc+IjsgJHRhZ2MgPSAiPC8kdGFnPiI7IH0KICAgICAgICAgICAgICAgICMgICAgZWxzZSAgICAgIHsgJHRhZ28gPSAkdGFnYyA9ICcnOyB9CiAgICAgICAgICAgICAgICAjIEJ1dCBzZWUgc25pcHBldHMgJ2Vsc2UxLnQnIGFuZCAnZWxzZTIudCcKICAgICAgICAgICAgICAgICRkZWxldGVfbWUgPSAwCiAgICAgICAgICAgICAgICAgIGlmICggJGpqID09ICRqYmVnCiAgICAgICAgICAgICAgICAgICAgJiYgJGhhc190ZXJtaW5hbF9tYXRjaAogICAgICAgICAgICAgICAgICAgICYmICRubGluZXMgPT0gMiApOwoKICAgICAgICAgICAgICAgICMgRVhDRVBUSU9OIDU6IG1pc2MgYWRkaXRpb25hbCBydWxlcyBmb3IgY29tbWFzIGFuZCBlcXVhbHMKICAgICAgICAgICAgICAgIGlmICggJGRlbGV0ZV9tZSAmJiAkdG9rX2NvdW50ID09IDEgKSB7CgogICAgICAgICAgICAgICAgICAgICMgb2theSB0byBkZWxldGUgc2Vjb25kIGFuZCBoaWdoZXIgY29waWVzIG9mIGEgdG9rZW4KCiAgICAgICAgICAgICAgICAgICAgIyBmb3IgYSBjb21tYS4uLgogICAgICAgICAgICAgICAgICAgIGlmICggJHJhd190b2sgZXEgJywnICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBEbyBub3QgZGVsZXRlIGNvbW1hcyBiZWZvcmUgYW4gZXF1YWxzCiAgICAgICAgICAgICAgICAgICAgICAgICRkZWxldGVfbWUgPSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRpX2VxKSAmJiAkaSA8ICRpX2VxICk7CgogICAgICAgICAgICAgICAgICAgICAgICAjIERvIG5vdCBkZWxldGUgbGluZS1sZXZlbCBjb21tYXMKICAgICAgICAgICAgICAgICAgICAgICAgJGRlbGV0ZV9tZSA9IDAgaWYgKCAkbGV2IDw9ICRncm91cF9sZXZlbCApOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBGb3IgYW4gYXNzaWdubWVudCBhdCBncm91cCBsZXZlbC4uCiAgICAgICAgICAgICAgICAgICAgaWYgKCAgICRpc19hc3NpZ25tZW50eyRyYXdfdG9rfQogICAgICAgICAgICAgICAgICAgICAgICAmJiAkbGV2ID09ICRncm91cF9sZXZlbCApCiAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBEbyBub3QgZGVsZXRlIGlmIGl0IGlzIHRoZSBsYXN0IGFsaWdubWVudCBvZgogICAgICAgICAgICAgICAgICAgICAgICAjIG11bHRpcGxlIHRva2VuczsgdGhpcyB3aWxsIHByZXZlbnQgc29tZQogICAgICAgICAgICAgICAgICAgICAgICAjIHVuZGVzaXJhYmxlIGFsaWdubWVudHMKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkaW1heCA+IDAgJiYgJGkgPT0gJGltYXggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGVsZXRlX21lID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBPdGhlcndpc2UsIHNldCBhIGZsYWcgdG8gZGVsZXRlIG1vc3QKICAgICAgICAgICAgICAgICAgICAgICAgIyByZW1haW5pbmcgdG9rZW5zCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkZGVsZXRlZF9hc3NpZ25tZW50X3Rva2VuID0gJHJhd190b2sgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIERvIG5vdCBsZXQgYSB1c2VyIGV4Y2x1c2lvbiBiZSByZWFjdGl2YXRlZCBieSBhYm92ZSBydWxlcwogICAgICAgICAgICAgICAgJGRlbGV0ZV9tZSB8fD0gISRhbGlnbl9vazsKCiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAjIEFkZCB0aGlzIHRva2VuIHRvIHRoZSBkZWxldGlvbiBsaXN0CiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICBpZiAoJGRlbGV0ZV9tZSkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQGlkZWwsICRpOwoKICAgICAgICAgICAgICAgICAgICAjIHVwZGF0ZSBkZWxldGlvbiBwcm9wYWdhdGlvbiBmbGFncwogICAgICAgICAgICAgICAgICAgIGlmICggIWRlZmluZWQoJGRlbGV0ZV9hYm92ZV9sZXZlbCkKICAgICAgICAgICAgICAgICAgICAgICAgfHwgJGxldiA8ICRkZWxldGVfYWJvdmVfbGV2ZWwgKQogICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgZGVsZXRlIGFsbCBmb2xsb3dpbmcgaGlnaGVyIGxldmVsIGFsaWdubWVudHMKICAgICAgICAgICAgICAgICAgICAgICAgJGRlbGV0ZV9hYm92ZV9sZXZlbCA9ICRsZXY7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGJ1dCBrZWVwIGRlbGV0aW5nIGFmdGVyID0+IHRvIG5leHQgbG93ZXIgbGV2ZWwKICAgICAgICAgICAgICAgICAgICAgICAgIyB0byBhdm9pZCBzb21lIGJpemFycmUgYWxpZ25tZW50cwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRyYXdfdG9rIGVxICc9PicgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGVsZXRlX2Fib3ZlX2xldmVsID0gJGxldiAtIDE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gICAgIyBFbmQgbG9vcCBvdmVyIGFsaWdubWVudCB0b2tlbnMKCiAgICAgICAgICAgICMgUHJvY2VzcyBhbGwgZGVsZXRpb24gcmVxdWVzdHMgZm9yIHRoaXMgbGluZQogICAgICAgICAgICBpZiAoQGlkZWwpIHsKICAgICAgICAgICAgICAgIGRlbGV0ZV9zZWxlY3RlZF90b2tlbnMoICRsaW5lLCBcQGlkZWwgKTsKICAgICAgICAgICAgfQogICAgICAgIH0gICAgIyBFbmQgbG9vcCBvdmVyIGxpbmVzCiAgICB9ICMjIGVuZCBtYWluIGxvb3Agb3ZlciBzdWJncm91cHMKCiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBkZWxldGVfdW5tYXRjaGVkX3Rva2Vuc19tYWluX2xvb3AKCnN1YiBtYXRjaF9saW5lX3BhaXJzIHsKICAgIG15ICggJHJsaW5lcywgJHJuZXdfbGluZXMsICRyc3ViZ3JvdXBzLCAkZ3JvdXBfbGV2ZWwgKSA9IEBfOwoKICAgICMgQ29tcGFyZSBlYWNoIHBhaXIgb2YgbGluZXMgYW5kIHNhdmUgaW5mb3JtYXRpb24gYWJvdXQgY29tbW9uIG1hdGNoZXMKCiAgICAjIEdpdmVuOgogICAgIyAgICRybGluZXMgICAgID0gbGlzdCBvZiBsaW5lcyBpbmNsdWRpbmcgaGFuZ2luZyBzaWRlIGNvbW1lbnRzCiAgICAjICAgJHJuZXdfbGluZXMgPSBsaXN0IG9mIGxpbmVzIHdpdGhvdXQgYW55IGhhbmdpbmcgc2lkZSBjb21tZW50cwogICAgIyAgICRyc3ViZ3JvdXBzID0gbGlzdCBvZiBzdWJncm91cHMgb2YgdGhlIG5ldyBsaW5lcwogICAgIyBSZXR1cm46CiAgICAjICAgJHNhd19zaWduZWRfbnVtYmVyID0gdHJ1ZSBpZiBhIGZpZWxkIGhhcyBhIHNpZ25lZCBudW1iZXIKICAgICMgICAgICAgICAgICAgICAgICAgICAgICAobmVlZGVkIGZvciAtLXZhbGlnbi1zaWduZWQtbnVtYmVycykKCiAgICAjIFRPRE86CiAgICAjIE1heWJlIGNoYW5nZTogaW1heF9wYWlyID0+IHBhaXJfbWF0Y2hfaW5mbyA9IHJlZiB0byBhcnJheQogICAgIyAgPSBbJGltYXhfYWxpZ24sICRyTXNnLCAuLi4gXQogICAgIyAgVGhpcyBtYXkgZXZlbnR1YWxseSBoYXZlIG11bHRpLWxldmVsIG1hdGNoIGluZm8KCiAgICAjIFByZXZpb3VzIGxpbmUgdmFycwogICAgbXkgKCAkbGluZV9tLCAkcnRva2Vuc19tLCAkcnBhdHRlcm5zX20sICRyZmllbGRfbGVuZ3Roc19tLCAkaW1heF9tLAogICAgICAgICRsaXN0X3R5cGVfbSwgJGNpX2xldmVsX20gKTsKCiAgICAjIEN1cnJlbnQgbGluZSB2YXJzCiAgICBteSAoICRsaW5lLCAkcnRva2VucywgJHJwYXR0ZXJucywgJHJmaWVsZF9sZW5ndGhzLCAkaW1heCwgJGxpc3RfdHlwZSwKICAgICAgICAkY2lfbGV2ZWwgKTsKCiAgICAjIFJldHVybiBwYXJhbWV0ZXIgdG8gYXZvaWQgY2FsbHMgdG8gc3ViIHBhZF9zaWduZWRfbnVtYmVyX2NvbHVtbnMKICAgIG15ICRzYXdfc2lnbmVkX251bWJlcjsKCiAgICAjIGxvb3Agb3ZlciBzdWJncm91cHMKICAgIGZvcmVhY2ggbXkgJGl0ZW0gKCBAeyRyc3ViZ3JvdXBzfSApIHsKICAgICAgICBteSAoICRqYmVnLCAkamVuZCApID0gQHskaXRlbX07CiAgICAgICAgbXkgJG5saW5lcyA9ICRqZW5kIC0gJGpiZWcgKyAxOwogICAgICAgIG5leHQgaWYgKCAkbmxpbmVzIDw9IDEgKTsKCiAgICAgICAgIyBsb29wIG92ZXIgbGluZXMgaW4gYSBzdWJncm91cAogICAgICAgIGZvcmVhY2ggbXkgJGpqICggJGpiZWcgLi4gJGplbmQgKSB7CgogICAgICAgICAgICAkbGluZV9tICAgICAgICAgICA9ICRsaW5lOwogICAgICAgICAgICAkcnRva2Vuc19tICAgICAgICA9ICRydG9rZW5zOwogICAgICAgICAgICAkcnBhdHRlcm5zX20gICAgICA9ICRycGF0dGVybnM7CiAgICAgICAgICAgICRyZmllbGRfbGVuZ3Roc19tID0gJHJmaWVsZF9sZW5ndGhzOwogICAgICAgICAgICAkaW1heF9tICAgICAgICAgICA9ICRpbWF4OwogICAgICAgICAgICAkbGlzdF90eXBlX20gICAgICA9ICRsaXN0X3R5cGU7CiAgICAgICAgICAgICRjaV9sZXZlbF9tICAgICAgID0gJGNpX2xldmVsOwoKICAgICAgICAgICAgJGxpbmUgICAgICAgICAgID0gJHJuZXdfbGluZXMtPlskampdOwogICAgICAgICAgICAkcnRva2VucyAgICAgICAgPSAkbGluZS0+eydydG9rZW5zJ307CiAgICAgICAgICAgICRycGF0dGVybnMgICAgICA9ICRsaW5lLT57J3JwYXR0ZXJucyd9OwogICAgICAgICAgICAkcmZpZWxkX2xlbmd0aHMgPSAkbGluZS0+eydyZmllbGRfbGVuZ3Rocyd9OwogICAgICAgICAgICAkaW1heCAgICAgICAgICAgPSBAeyRydG9rZW5zfSAtIDI7CiAgICAgICAgICAgICRsaXN0X3R5cGUgICAgICA9ICRsaW5lLT57J2xpc3RfdHlwZSd9OwogICAgICAgICAgICAkY2lfbGV2ZWwgICAgICAgPSAkbGluZS0+eydjaV9sZXZlbCd9OwoKICAgICAgICAgICAgIyBRdWljayBhcHByb3hpbWF0ZSBjaGVjayBmb3Igc2lnbmVkIG51bWJlcnMgaW4gdGhpcyBsaW5lLgogICAgICAgICAgICAjIFRoaXMgc3BlZWRzIHVwIGxhcmdlIHJ1bnMgYnkgYWJvdXQgMC41JQogICAgICAgICAgICBpZiAoICEkc2F3X3NpZ25lZF9udW1iZXIgKSB7CgogICAgICAgICAgICAgICAgbXkgJHJmaWVsZHMgPSAkbGluZS0+eydyZmllbGRzJ307CiAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRpICggMCAuLiAkaW1heCArIDEgKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBpZiAoIGluZGV4KCAkcnBhdHRlcm5zLT5bJGldLCAnbicgKSA8IDAgKTsKICAgICAgICAgICAgICAgICAgICBteSAkZmllbGQgPSAkcmZpZWxkcy0+WyRpXTsKICAgICAgICAgICAgICAgICAgICBpZiAoICAgaW5kZXgoICRmaWVsZCwgJy0nICkgPj0gMAogICAgICAgICAgICAgICAgICAgICAgICB8fCBpbmRleCggJGZpZWxkLCAnKycgKSA+PSAwICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzYXdfc2lnbmVkX251bWJlciA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIG5vdGhpbmcgdG8gZG8gZm9yIGZpcnN0IGxpbmUKICAgICAgICAgICAgbmV4dCBpZiAoICRqaiA9PSAkamJlZyApOwoKICAgICAgICAgICAgbXkgJGNpX2p1bXAgPSAkY2lfbGV2ZWwgLSAkY2lfbGV2ZWxfbTsKCiAgICAgICAgICAgIG15ICRpbWF4X21pbiA9ICRpbWF4X20gPCAkaW1heCA/ICRpbWF4X20gOiAkaW1heDsKCiAgICAgICAgICAgIG15ICRpbWF4X2FsaWduID0gLTE7CgogICAgICAgICAgICAjIGZpbmQgbnVtYmVyIG9mIGxlYWRpbmcgY29tbW9uIHRva2VucwoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIE5vIG1hdGNoIHRvIGhhbmdpbmcgc2lkZSBjb21tZW50CiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgaWYgKCAkbGluZS0+eydpc19oYW5naW5nX3NpZGVfY29tbWVudCd9ICkgewoKICAgICAgICAgICAgICAgICMgU2hvdWxkIG5vdCBnZXQgaGVyZTsgSFNDJ3MgaGF2ZSBiZWVuIGZpbHRlcmVkIG91dAogICAgICAgICAgICAgICAgJGltYXhfYWxpZ24gPSAtMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgSGFuZGxlIGNvbW1hLXNlcGFyYXRlZCBsaXN0cwogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgZWxzaWYgKCAkbGlzdF90eXBlICYmICRsaXN0X3R5cGUgZXEgJGxpc3RfdHlwZV9tICkgewoKICAgICAgICAgICAgICAgICMgZG8gbm90IGFsaWduIGxpc3RzIGFjcm9zcyBhIGNpIGp1bXAgd2l0aCBuZXcgbGlzdCBtZXRob2QKICAgICAgICAgICAgICAgIGlmICgkY2lfanVtcCkgeyAkaW1heF9taW4gPSAtMSB9CgogICAgICAgICAgICAgICAgbXkgJGlfbm9tYXRjaCA9ICRpbWF4X21pbiArIDE7CiAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRpICggMCAuLiAkaW1heF9taW4gKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJHRvayAgID0gJHJ0b2tlbnMtPlskaV07CiAgICAgICAgICAgICAgICAgICAgbXkgJHRva19tID0gJHJ0b2tlbnNfbS0+WyRpXTsKICAgICAgICAgICAgICAgICAgICBpZiAoICR0b2sgbmUgJHRva19tICkgewogICAgICAgICAgICAgICAgICAgICAgICAkaV9ub21hdGNoID0gJGk7CiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRpbWF4X2FsaWduID0gJGlfbm9tYXRjaCAtIDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIEhhbmRsZSBub24tbGlzdHMKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgbXkgJGlfbm9tYXRjaCA9ICRpbWF4X21pbiArIDE7CiAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRpICggMCAuLiAkaW1heF9taW4gKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJHRvayAgID0gJHJ0b2tlbnMtPlskaV07CiAgICAgICAgICAgICAgICAgICAgbXkgJHRva19tID0gJHJ0b2tlbnNfbS0+WyRpXTsKICAgICAgICAgICAgICAgICAgICBpZiAoICR0b2sgbmUgJHRva19tICkgewogICAgICAgICAgICAgICAgICAgICAgICAkaV9ub21hdGNoID0gJGk7CiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBteSAkcGF0ICAgPSAkcnBhdHRlcm5zLT5bJGldOwogICAgICAgICAgICAgICAgICAgIG15ICRwYXRfbSA9ICRycGF0dGVybnNfbS0+WyRpXTsKCiAgICAgICAgICAgICAgICAgICAgIyBWU04gUEFUQ0g6IGFsbG93IG51bWJlcnMgdG8gbWF0Y2ggcXVvdGVzCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkcGF0X20gbmUgJHBhdCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHBhdCAgID1+IHRyL24vUS87CiAgICAgICAgICAgICAgICAgICAgICAgICRwYXRfbSA9fiB0ci9uL1EvOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBJZiBwYXR0ZXJucyBkb24ndCBtYXRjaCwgd2UgaGF2ZSB0byBiZSBjYXJlZnVsLi4uCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkcGF0X20gbmUgJHBhdCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHBhZCA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgJHJmaWVsZF9sZW5ndGhzLT5bJGldIC0gJHJmaWVsZF9sZW5ndGhzX20tPlskaV07CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRtYXRjaF9jb2RlID0gY29tcGFyZV9wYXR0ZXJucygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cF9sZXZlbCA9PiAkZ3JvdXBfbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rICAgICAgICAgPT4gJHRvaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tfbSAgICAgICA9PiAkdG9rX20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0ICAgICAgICAgPT4gJHBhdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRfbSAgICAgICA9PiAkcGF0X20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkICAgICAgICAgPT4gJHBhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRtYXRjaF9jb2RlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAgICAoICRtYXRjaF9jb2RlID09IDEgKSB7ICRpX25vbWF0Y2ggPSAkaSB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRtYXRjaF9jb2RlID09IDIgKSB7ICRpX25vbWF0Y2ggPSAwIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgIHsgfSAgICAgICAgICAgICAgICAgICMjb2sKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkaW1heF9hbGlnbiA9ICRpX25vbWF0Y2ggLSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkbGluZV9tLT57J2ltYXhfcGFpcid9ID0gJGltYXhfYWxpZ247CgogICAgICAgIH0gIyMgZW5kIGxvb3Agb3ZlciBsaW5lcwoKICAgICAgICAjIFB1dCBmZW5jZSBhdCBlbmQgb2Ygc3ViZ3JvdXAKICAgICAgICAkbGluZS0+eydpbWF4X3BhaXInfSA9IC0xOwoKICAgIH0gIyMgZW5kIGxvb3Agb3ZlciBzdWJncm91cHMKCiAgICAjIGlmIHRoZXJlIGFyZSBoYW5naW5nIHNpZGUgY29tbWVudHMsIHByb3BhZ2F0ZSB0aGUgcGFpciBpbmZvIGRvd24gdG8gdGhlbQogICAgIyBzbyB0aGF0IGxpbmVzIGNhbiBqdXN0IGxvb2sgYmFjayBvbmUgbGluZSBmb3IgdGhlaXIgcGFpciBpbmZvLgogICAgaWYgKCBAeyRybGluZXN9ID4gQHskcm5ld19saW5lc30gKSB7CiAgICAgICAgbXkgJGxhc3RfcGFpcl9pbmZvID0gLTE7CiAgICAgICAgZm9yZWFjaCBteSAkbGluZV90ICggQHskcmxpbmVzfSApIHsKICAgICAgICAgICAgaWYgKCAkbGluZV90LT57J2lzX2hhbmdpbmdfc2lkZV9jb21tZW50J30gKSB7CiAgICAgICAgICAgICAgICAkbGluZV90LT57J2ltYXhfcGFpcid9ID0gJGxhc3RfcGFpcl9pbmZvOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJGxhc3RfcGFpcl9pbmZvID0gJGxpbmVfdC0+eydpbWF4X3BhaXInfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAkc2F3X3NpZ25lZF9udW1iZXI7Cn0gIyMgZW5kIHN1YiBtYXRjaF9saW5lX3BhaXJzCgpzdWIgY29tcGFyZV9wYXR0ZXJucyB7CgogICAgbXkgKCRyY2FsbF9oYXNoKSA9IEBfOwoKICAgIG15ICRncm91cF9sZXZlbCA9ICRyY2FsbF9oYXNoLT57Z3JvdXBfbGV2ZWx9OwogICAgbXkgJHRvayAgICAgICAgID0gJHJjYWxsX2hhc2gtPnt0b2t9OwojIyAgbXkgJHRva19tICAgICAgID0gJHJjYWxsX2hhc2gtPnt0b2tfbX07CiAgICBteSAkcGF0ICAgPSAkcmNhbGxfaGFzaC0+e3BhdH07CiAgICBteSAkcGF0X20gPSAkcmNhbGxfaGFzaC0+e3BhdF9tfTsKICAgIG15ICRwYWQgICA9ICRyY2FsbF9oYXNoLT57cGFkfTsKCiAgICAjIFRoaXMgaXMgYSBoZWxwZXIgcm91dGluZSBmb3Igc3ViIG1hdGNoX2xpbmVfcGFpcnMgdG8gZGVjaWRlIGlmIHBhdHRlcm5zCiAgICAjIGluIHR3byBsaW5lcyBtYXRjaCB3ZWxsIGVub3VnaAogICAgIyBHaXZlbjoKICAgICMgICAkdG9rX20sICRwYXRfbSA9IHRva2VuIGFuZCBwYXR0ZXJuIG9mIGZpcnN0IGxpbmUKICAgICMgICAkdG9rLCAkcGF0ICAgICA9IHRva2VuIGFuZCBwYXR0ZXJuIG9mIHNlY29uZCBsaW5lCiAgICAjICAgJHBhZCAgICAgICAgICAgPSAwIGlmIG5vIHBhZGRpbmcgaXMgbmVlZGVkLCAhPTAgb3RoZXJ3aXNlCiAgICAjIFJldHVybiBjb2RlOgogICAgIyAgIDAgPSBwYXR0ZXJucyBtYXRjaCwgY29udGludWUKICAgICMgICAxID0gbm8gbWF0Y2gKICAgICMgICAyID0gbm8gbWF0Y2gsIGFuZCBsaW5lcyBkbyBub3QgbWF0Y2ggYXQgYWxsCgogICAgbXkgJEdvVG9Nc2cgICAgID0gRU1QVFlfU1RSSU5HOwogICAgbXkgJHJldHVybl9jb2RlID0gMDsKCiAgICB1c2UgY29uc3RhbnQgRVhQTEFJTl9DT01QQVJFX1BBVFRFUk5TID0+IDA7CgogICAgbXkgKCAkYWxpZ25tZW50X3Rva2VuLCAkbGV2LCAkdGFnX3V1LCAkdG9rX2NvdW50X3V1ICkgPQogICAgICBkZWNvZGVfYWxpZ25tZW50X3Rva2VuKCR0b2spOwoKICAgICMgV2UgaGF2ZSB0byBiZSB2ZXJ5IGNhcmVmdWwgYWJvdXQgYWxpZ25pbmcgY29tbWFzCiAgICAjIHdoZW4gdGhlIHBhdHRlcm4ncyBkb24ndCBtYXRjaCwgYmVjYXVzZSBpdCBjYW4gYmUKICAgICMgd29yc2UgdG8gY3JlYXRlIGFuIGFsaWdubWVudCB3aGVyZSBub25lIGlzIG5lZWRlZAogICAgIyB0aGFuIHRvIG9taXQgb25lLiAgSGVyZSdzIGFuIGV4YW1wbGUgd2hlcmUgdGhlICcsJ3MKICAgICMgYXJlIG5vdCBpbiBuYW1lZCBjb250YWluZXJzLiAgVGhlIGZpcnN0IGxpbmUgYmVsb3cKICAgICMgc2hvdWxkIG5vdCBtYXRjaCB0aGUgbmV4dCB0d286CiAgICAjICAgKCAkYSwgJGIgKSA9ICggJGIsICRyICk7CiAgICAjICAgKCAkeDEsICR4MiApID0gKCAkeDIgLSAkcSAqICR4MSwgJHgxICk7CiAgICAjICAgKCAkeTEsICR5MiApID0gKCAkeTIgLSAkcSAqICR5MSwgJHkxICk7CiAgICBpZiAoICRhbGlnbm1lbnRfdG9rZW4gZXEgJywnICkgewoKICAgICAgICAjIGRvIG5vdCBhbGlnbiBjb21tYXMgdW5sZXNzIHRoZXkgYXJlIGluIG5hbWVkCiAgICAgICAgIyBjb250YWluZXJzCiAgICAgICAgaWYgKCAkdG9rICF+IC9bQS1aYS16XS8gKSB7CiAgICAgICAgICAgICRyZXR1cm5fY29kZSA9IDE7CiAgICAgICAgICAgICRHb1RvTXNnICAgICA9ICJkbyBub3QgYWxpZ24gY29tbWFzIGluIHVubmFtZWQgY29udGFpbmVycyI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkcmV0dXJuX2NvZGUgPSAwOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRvIG5vdCBhbGlnbiBwYXJlbnMgdW5sZXNzIHBhdHRlcm5zIG1hdGNoOwogICAgIyBsYXJnZSB1Z2x5IHNwYWNlcyBjYW4gb2NjdXIgaW4gbWF0aCBleHByZXNzaW9ucy4KICAgIGVsc2lmICggJGFsaWdubWVudF90b2tlbiBlcSAnKCcgKSB7CgogICAgICAgICMgQnV0IHdlIGNhbiBhbGxvdyBhIG1hdGNoIGlmIHRoZSBwYXJlbnMgZG9uJ3QKICAgICAgICAjIHJlcXVpcmUgYW55IHBhZGRpbmcuCiAgICAgICAgaWYgKCAkcGFkICE9IDAgKSB7CiAgICAgICAgICAgICRyZXR1cm5fY29kZSA9IDE7CiAgICAgICAgICAgICRHb1RvTXNnICAgICA9ICJkbyBub3QgYWxpZ24gJygnIHVubGVzcyBwYXR0ZXJucyBtYXRjaCBvciBwYWQ9MCI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkcmV0dXJuX2NvZGUgPSAwOwogICAgICAgIH0KICAgIH0KCiAgICAjIEhhbmRsZSBhbiAnPScgYWxpZ25tZW50IHdpdGggZGlmZmVyZW50IHBhdHRlcm5zIHRvCiAgICAjIHRoZSBsZWZ0LgogICAgZWxzaWYgKCAkYWxpZ25tZW50X3Rva2VuIGVxICc9JyApIHsKCiAgICAgICAgIyBJdCBpcyBiZXN0IHRvIGJlIGEgbGl0dGxlIHJlc3RyaWN0aXZlIHdoZW4KICAgICAgICAjIGFsaWduaW5nICc9JyB0b2tlbnMuICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YKICAgICAgICAjIHR3byBsaW5lcyB0aGF0IHdlIHdpbGwgbm90IGFsaWduOgogICAgICAgICMgICAgICAgbXkgJHZhcmlhYmxlPTY7CiAgICAgICAgIyAgICAgICAkYmI9NDsKICAgICAgICAjIFRoZSBwcm9ibGVtIGlzIHRoYXQgb25lIGlzIGEgJ215JyBkZWNsYXJhdGlvbiwKICAgICAgICAjIGFuZCB0aGUgb3RoZXIgaXNuJ3QsIHNvIHRoZXkncmUgbm90IHZlcnkgc2ltaWxhci4KICAgICAgICAjIFdlIHdpbGwgZmlsdGVyIHRoZXNlIG91dCBieSBjb21wYXJpbmcgdGhlIGZpcnN0CiAgICAgICAgIyBsZXR0ZXIgb2YgdGhlIHBhdHRlcm4uICBUaGlzIGlzIGNydWRlLCBidXQgd29ya3MKICAgICAgICAjIHdlbGwgZW5vdWdoLgogICAgICAgIGlmICggc3Vic3RyKCAkcGF0X20sIDAsIDEgKSBuZSBzdWJzdHIoICRwYXQsIDAsIDEgKSApIHsKICAgICAgICAgICAgJEdvVG9Nc2cgICAgID0gImZpcnN0IGNoYXJhY3RlciBiZWZvcmUgZXF1YWxzIGRpZmZlciI7CiAgICAgICAgICAgICRyZXR1cm5fY29kZSA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIFRoZSBpbnRyb2R1Y3Rpb24gb2Ygc3ViICdwcnVuZV9hbGlnbm1lbnRfdHJlZScKICAgICAgICAjIGVuYWJsZWQgYWxpZ25tZW50IG9mIGxpc3RzIGxlZnQgb2YgdGhlIGVxdWFscyB3aXRoCiAgICAgICAgIyBvdGhlciBzY2FsYXIgdmFyaWFibGVzLiBGb3IgZXhhbXBsZToKICAgICAgICAjIG15ICggJEQsICRzLCAkZSApID0gQF87CiAgICAgICAgIyBteSAkZCAgICAgICAgICAgICA9IGxlbmd0aCAkRDsKICAgICAgICAjIG15ICRjICAgICAgICAgICAgID0gJGUgLSAkcyAtICRkOwoKICAgICAgICAjIEJ1dCB0aGlzIHdvdWxkIGNoYW5nZSBmb3JtYXR0aW5nIG9mIGEgbG90IG9mIHNjcmlwdHMsCiAgICAgICAgIyBzbyBmb3Igbm93IHdlIHByZXZlbnQgYWxpZ25tZW50IG9mIGNvbW1hIGxpc3RzIG9uIHRoZQogICAgICAgICMgbGVmdCB3aXRoIHNjYWxhcnMgb24gdGhlIGxlZnQuICBXZSB3aWxsIGFsc28gcHJldmVudAogICAgICAgICMgYW55IHBhcnRpYWwgYWxpZ25tZW50cy4KCiAgICAgICAgIyBzZXQgcmV0dXJuIGNvZGUgMiBpZiB0aGUgPSBpcyBhdCBsaW5lIGxldmVsLCBidXQKICAgICAgICAjIHNldCByZXR1cm4gY29kZSAxIGlmIHRoZSA9IGlzIGJlbG93IGxpbmUgbGV2ZWwsIGkuZS4KICAgICAgICAjICBzdWIgbmV3IHsgbXkgKCAkcCwgJHYgKSA9IEBfOyBibGVzcyBcJHYsICRwIH0KICAgICAgICAjICBzdWIgaXRlciB7IG15ICgkeCkgPSBAXzsgcmV0dXJuIHVuZGVmIGlmICQkeCA8IDA7IHJldHVybiAkJHgtLTsgfQoKICAgICAgICBlbHNpZiAoICggaW5kZXgoICRwYXRfbSwgJywnICkgPj0gMCApIG5lICggaW5kZXgoICRwYXQsICcsJyApID49IDAgKSApIHsKICAgICAgICAgICAgJEdvVG9Nc2cgICAgID0gIm1peGVkIGNvbW1hcy9uby1jb21tYXMgYmVmb3JlIGVxdWFscyI7CiAgICAgICAgICAgICRyZXR1cm5fY29kZSA9IDE7CiAgICAgICAgICAgIGlmICggJGxldiBlcSAkZ3JvdXBfbGV2ZWwgKSB7CiAgICAgICAgICAgICAgICAkcmV0dXJuX2NvZGUgPSAyOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkcmV0dXJuX2NvZGUgPSAwOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgICRyZXR1cm5fY29kZSA9IDA7CiAgICB9CgogICAgRVhQTEFJTl9DT01QQVJFX1BBVFRFUk5TCiAgICAgICYmICRyZXR1cm5fY29kZQogICAgICAmJiBwcmludCB7KlNURE9VVH0gIm5vIG1hdGNoIGJlY2F1c2UgJEdvVG9Nc2dcbiI7CgogICAgcmV0dXJuICRyZXR1cm5fY29kZTsKCn0gIyMgZW5kIHN1YiBjb21wYXJlX3BhdHRlcm5zCgpzdWIgZmF0X2NvbW1hX3RvX2NvbW1hIHsKICAgIG15ICgkc3RyKSA9IEBfOwoKICAgICMgR2l2ZW46CiAgICAjICAkc3RyID0gYSBkZWNvcmF0ZWQgZmF0IGNvbW1hIGFsaWdubWVudCB0b2tlbgoKICAgICMgQ2hhbmdlICc9PicgdG8gJywnCiAgICAjIGFuZCByZW1vdmUgYW55IHRyYWlsaW5nIGRlY2ltYWwgY291bnQgYmVjYXVzZSBjdXJyZW50bHkgZmF0IGNvbW1hcyBoYXZlIGEKICAgICMgY291bnQgYW5kIGNvbW1hcyBkbyBub3QuCgogICAgIyBGb3IgZXhhbXBsZSwgY2hhbmdlICc9PjIrey0zLjInIGludG8gJywyK3stMycKICAgIGlmICggJHN0ciA9fiAvXj0+KFteXC5dKikvICkgeyAkc3RyID0gJywnIC4gJDEgfQogICAgcmV0dXJuICRzdHI7Cn0gIyMgZW5kIHN1YiBmYXRfY29tbWFfdG9fY29tbWEKCnN1YiBnZXRfbGluZV90b2tlbl9pbmZvIHsKCiAgICBteSAoJHJsaW5lcykgPSBAXzsKCiAgICAjIEdpdmVuOgogICAgIyAgICRybGluZXMgPSByZWYgdG8gYXJyYXkgb2YgbGluZXMgaW4gdGhpcyBncm91cAoKICAgICMgU2NhbiBsaW5lcyBvZiB0b2tlbnMgYW5kIHJldHVybiBzdW1tYXJ5IGluZm9ybWF0aW9uIGFib3V0IHRoZSByYW5nZSBvZgogICAgIyBsZXZlbHMgYW5kIHBhdHRlcm5zLgoKICAgICMgRmlyc3Qgc2NhbiB0byBjaGVjayBtb25vdG9uaWNpdHkuIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiBzZXZlcmFsCiAgICAjIGxpbmVzIHdoaWNoIGFyZSBtb25vdG9uaWMuIFRoZSA9IGlzIHRoZSBsb3dlc3QgbGV2ZWwsIGFuZAogICAgIyB0aGUgY29tbWFzIGFyZSBhbGwgb25lIGxldmVsIGRlZXBlci4gU28gdGhpcyBpcyBub3Qgbm9ubW9ub3RvbmljLgogICAgIyAgJCRkeyJ3ZWVrcyJ9ICAgPSBbICJ3IiwgICJ3ayIsICAid2tzIiwgIndlZWsiLCAid2Vla3MiIF07CiAgICAjICAkJGR7ImRheXMifSAgICA9IFsgImQiLCAgImRheSIsICJkYXlzIiBdOwogICAgIyAgJCRkeyJob3VycyJ9ICAgPSBbICJoIiwgICJociIsICAiaHJzIiwgImhvdXIiLCAiaG91cnMiIF07CiAgICBteSBAYWxsX3Rva2VuX2luZm87CiAgICBteSAkYWxsX21vbm90b25pYyA9IDE7CiAgICBmb3JlYWNoIG15ICRqaiAoIDAgLi4gQHskcmxpbmVzfSAtIDEgKSB7CiAgICAgICAgbXkgKCRsaW5lKSA9ICRybGluZXMtPlskampdOwogICAgICAgIG15ICRydG9rZW5zID0gJGxpbmUtPnsncnRva2Vucyd9OwogICAgICAgIG15ICRsYXN0X2xldjsKICAgICAgICBteSAkaXNfbW9ub3RvbmljID0gMTsKICAgICAgICBteSAkaSAgICAgICAgICAgID0gLTE7CiAgICAgICAgZm9yZWFjaCBteSAkdG9rICggQHskcnRva2Vuc30gKSB7CiAgICAgICAgICAgICRpKys7CiAgICAgICAgICAgIG15ICggJHJhd190b2ssICRsZXYsICR0YWcsICR0b2tfY291bnQgKSA9CiAgICAgICAgICAgICAgZGVjb2RlX2FsaWdubWVudF90b2tlbigkdG9rKTsKICAgICAgICAgICAgcHVzaCBAeyAkYWxsX3Rva2VuX2luZm9bJGpqXSB9LAogICAgICAgICAgICAgIFsgJHJhd190b2ssICRsZXYsICR0YWcsICR0b2tfY291bnQgXTsKICAgICAgICAgICAgbGFzdCBpZiAoICR0b2sgZXEgJyMnICk7CiAgICAgICAgICAgIGlmICggJGkgPiAwICYmICRsZXYgPCAkbGFzdF9sZXYgKSB7ICRpc19tb25vdG9uaWMgPSAwIH0KICAgICAgICAgICAgJGxhc3RfbGV2ID0gJGxldjsKICAgICAgICB9CiAgICAgICAgaWYgKCAhJGlzX21vbm90b25pYyApIHsgJGFsbF9tb25vdG9uaWMgPSAwIH0KICAgIH0KCiAgICBteSAkcmxpbmVfdmFsdWVzID0gW107CiAgICBmb3JlYWNoIG15ICRqaiAoIDAgLi4gQHskcmxpbmVzfSAtIDEgKSB7CiAgICAgICAgbXkgKCRsaW5lKSA9ICRybGluZXMtPlskampdOwoKICAgICAgICBteSAkcnRva2VucyA9ICRsaW5lLT57J3J0b2tlbnMnfTsKICAgICAgICBteSAkaSAgICAgICA9IC0xOwogICAgICAgIG15ICggJGxldl9taW4sICRsZXZfbWF4ICk7CiAgICAgICAgbXkgJHRva2VuX3BhdHRlcm5fbWF4ID0gRU1QVFlfU1RSSU5HOwogICAgICAgIG15ICVzYXdfbGV2ZWw7CiAgICAgICAgbXkgJGlzX21vbm90b25pYyA9IDE7CgogICAgICAgICMgZmluZCB0aGUgaW5kZXggb2YgdGhlIGxhc3QgdG9rZW4gYmVmb3JlIHRoZSBzaWRlIGNvbW1lbnQKICAgICAgICBteSAkaW1heCAgICAgID0gQHskcnRva2Vuc30gLSAyOwogICAgICAgIG15ICRpbWF4X3RydWUgPSAkaW1heDsKCiAgICAgICAgIyBJZiB0aGUgZW50aXJlIGdyb3VwIGlzIG1vbm90b25pYywgYW5kIHRoZSBsaW5lIGVuZHMgaW4gYSBjb21tYSBsaXN0LAogICAgICAgICMgd2FsayBpdCBiYWNrIHRvIHRoZSBmaXJzdCBzdWNoIGNvbW1hLiB0aGlzIHdpbGwgaGF2ZSB0aGUgZWZmZWN0IG9mCiAgICAgICAgIyBtYWtpbmcgYWxsIHRyYWlsaW5nIHJhZ2dlZCBjb21tYSBsaXN0cyBtYXRjaCBpbiB0aGUgcHJ1bmUgdHJlZQogICAgICAgICMgcm91dGluZS4gIHRoZXNlIHRyYWlsaW5nIGNvbW1hIGxpc3RzIGNhbiBiZXR0ZXIgYmUgaGFuZGxlZCBieSBsYXRlcgogICAgICAgICMgYWxpZ25tZW50IHJ1bGVzLgoKICAgICAgICAjIFRyZWF0IGZhdCBjb21tYXMgdGhlIHNhbWUgYXMgY29tbWFzIGhlcmUgYnkgY29udmVydGluZyB0aGVtIHRvCiAgICAgICAgIyBjb21tYXMuICBUaGlzIHdpbGwgaW1wcm92ZSB0aGUgY2hhbmNlIG9mIGFsaWduaW5nIHRoZSBsZWFkaW5nIHBhcnRzCiAgICAgICAgIyBvZiByYWdnZWQgbGlzdHMuCgogICAgICAgIG15ICR0b2tfZW5kID0gZmF0X2NvbW1hX3RvX2NvbW1hKCAkcnRva2Vucy0+WyRpbWF4XSApOwogICAgICAgIGlmICggJGFsbF9tb25vdG9uaWMgJiYgJHRva19lbmQgPX4gL14sLyApIHsKICAgICAgICAgICAgbXkgJGlpID0gJGltYXggLSAxOwogICAgICAgICAgICB3aGlsZSAoICRpaSA+PSAwCiAgICAgICAgICAgICAgICAmJiBmYXRfY29tbWFfdG9fY29tbWEoICRydG9rZW5zLT5bJGlpXSApIGVxICR0b2tfZW5kICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJGltYXggPSAkaWk7CiAgICAgICAgICAgICAgICAkaWktLTsKICAgICAgICAgICAgfSAjIyBlbmQgd2hpbGUgKCAkaWkgPj0gMCAmJiBmYXRfY29tbWFfdG9fY29tbWEuLi4pCiAgICAgICAgfQoKICAgICAgICAjIG1ha2UgYSBmaXJzdCBwYXNzIHRvIGZpbmQgbGV2ZWwgcmFuZ2UKICAgICAgICBteSAkbGFzdF9sZXY7CiAgICAgICAgZm9yZWFjaCBteSAkdG9rICggQHskcnRva2Vuc30gKSB7CiAgICAgICAgICAgICRpKys7CiAgICAgICAgICAgIGxhc3QgaWYgKCAkaSA+ICRpbWF4ICk7CiAgICAgICAgICAgIGxhc3QgaWYgKCAkdG9rIGVxICcjJyApOwogICAgICAgICAgICBteSAoICRyYXdfdG9rX3V1LCAkbGV2LCAkdGFnX3V1LCAkdG9rX2NvdW50X3V1ICkgPQogICAgICAgICAgICAgIEB7ICRhbGxfdG9rZW5faW5mb1skampdLT5bJGldIH07CgogICAgICAgICAgICBsYXN0IGlmICggJHRvayBlcSAnIycgKTsKICAgICAgICAgICAgJHRva2VuX3BhdHRlcm5fbWF4IC49ICR0b2s7CiAgICAgICAgICAgICRzYXdfbGV2ZWx7JGxldn0rKzsKICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkbGV2X21pbikgKSB7CiAgICAgICAgICAgICAgICAkbGV2X21pbiA9ICRsZXY7CiAgICAgICAgICAgICAgICAkbGV2X21heCA9ICRsZXY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoICRsZXYgPCAkbGV2X21pbiApICB7ICRsZXZfbWluICAgICAgPSAkbGV2OyB9CiAgICAgICAgICAgICAgICBpZiAoICRsZXYgPiAkbGV2X21heCApICB7ICRsZXZfbWF4ICAgICAgPSAkbGV2OyB9CiAgICAgICAgICAgICAgICBpZiAoICRsZXYgPCAkbGFzdF9sZXYgKSB7ICRpc19tb25vdG9uaWMgPSAwIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkbGFzdF9sZXYgPSAkbGV2OwogICAgICAgIH0KCiAgICAgICAgIyBoYW5kbGUgbm8gbGV2ZWxzCiAgICAgICAgbXkgJHJ0b2tlbl9wYXR0ZXJucyA9IHt9OwogICAgICAgIG15ICRydG9rZW5faW5kZXhlcyAgPSB7fTsKICAgICAgICBteSBAbGV2cyAgICAgICAgICAgID0gc29ydCB7ICRhIDw9PiAkYiB9IGtleXMgJXNhd19sZXZlbDsKICAgICAgICBpZiAoICFkZWZpbmVkKCRsZXZfbWluKSApIHsKICAgICAgICAgICAgJGxldl9taW4gICAgICAgICAgICAgICAgICAgICA9IC0xOwogICAgICAgICAgICAkbGV2X21heCAgICAgICAgICAgICAgICAgICAgID0gLTE7CiAgICAgICAgICAgICRsZXZzWzBdICAgICAgICAgICAgICAgICAgICAgPSAtMTsKICAgICAgICAgICAgJHJ0b2tlbl9wYXR0ZXJucy0+eyRsZXZfbWlufSA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgJHJ0b2tlbl9pbmRleGVzLT57JGxldl9taW59ICA9IFtdOwogICAgICAgIH0KCiAgICAgICAgIyBoYW5kbGUgb25lIGxldmVsCiAgICAgICAgZWxzaWYgKCAkbGV2X21heCA9PSAkbGV2X21pbiApIHsKICAgICAgICAgICAgJHJ0b2tlbl9wYXR0ZXJucy0+eyRsZXZfbWF4fSA9ICR0b2tlbl9wYXR0ZXJuX21heDsKICAgICAgICAgICAgJHJ0b2tlbl9pbmRleGVzLT57JGxldl9tYXh9ICA9IFsgKCAwIC4uICRpbWF4ICkgXTsKICAgICAgICB9CgogICAgICAgICMgaGFuZGxlIG11bHRpcGxlIGxldmVscwogICAgICAgIGVsc2UgewogICAgICAgICAgICAkcnRva2VuX3BhdHRlcm5zLT57JGxldl9tYXh9ID0gJHRva2VuX3BhdHRlcm5fbWF4OwogICAgICAgICAgICAkcnRva2VuX2luZGV4ZXMtPnskbGV2X21heH0gID0gWyAoIDAgLi4gJGltYXggKSBdOwoKICAgICAgICAgICAgbXkgJGxldl90b3AgPSBwb3AgQGxldnM7ICAgICMgYWxyZWFkeSBkaWQgbWF4IGxldmVsCiAgICAgICAgICAgIG15ICRpdG9rICAgID0gLTE7CiAgICAgICAgICAgIGZvcmVhY2ggbXkgJHRvayAoIEB7JHJ0b2tlbnN9ICkgewogICAgICAgICAgICAgICAgJGl0b2srKzsKICAgICAgICAgICAgICAgIGxhc3QgaWYgKCAkaXRvayA+ICRpbWF4ICk7CiAgICAgICAgICAgICAgICBteSAoICRyYXdfdG9rLCAkbGV2LCAkdGFnX3V1LCAkdG9rX2NvdW50X3V1ICkgPQogICAgICAgICAgICAgICAgICBAeyAkYWxsX3Rva2VuX2luZm9bJGpqXS0+WyRpdG9rXSB9OwogICAgICAgICAgICAgICAgbGFzdCBpZiAoICRyYXdfdG9rIGVxICcjJyApOwogICAgICAgICAgICAgICAgZm9yZWFjaCBteSAkbGV2X3Rlc3QgKEBsZXZzKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBpZiAoICRsZXYgPiAkbGV2X3Rlc3QgKTsKICAgICAgICAgICAgICAgICAgICAkcnRva2VuX3BhdHRlcm5zLT57JGxldl90ZXN0fSAuPSAkdG9rOwogICAgICAgICAgICAgICAgICAgIHB1c2ggQHsgJHJ0b2tlbl9pbmRleGVzLT57JGxldl90ZXN0fSB9LCAkaXRvazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBwdXNoIEBsZXZzLCAkbGV2X3RvcDsKICAgICAgICB9CgogICAgICAgIHB1c2ggQHskcmxpbmVfdmFsdWVzfSwKICAgICAgICAgIFsKICAgICAgICAgICAgJGxldl9taW4sICAgICAgICAkbGV2X21heCwgICAgICAkcnRva2VuX3BhdHRlcm5zLCBcQGxldnMsCiAgICAgICAgICAgICRydG9rZW5faW5kZXhlcywgJGlzX21vbm90b25pYywgJGltYXhfdHJ1ZSwgICAgICAgJGltYXgsCiAgICAgICAgICBdOwoKICAgICAgICAjIGRlYnVnCiAgICAgICAgMCAmJiBkbyB7CiAgICAgICAgICAgIGxvY2FsICRMSVNUX1NFUEFSQVRPUiA9ICcpKCc7CiAgICAgICAgICAgIHByaW50ICJsZXZfbWluPSRsZXZfbWluLCBsZXZfbWF4PSRsZXZfbWF4LCBsZXZlbHM9KEBsZXZzKVxuIjsKICAgICAgICAgICAgZm9yZWFjaCBteSAka2V5ICggc29ydCBrZXlzICV7JHJ0b2tlbl9wYXR0ZXJuc30gKSB7CiAgICAgICAgICAgICAgICBwcmludCAiJGtleSA9PiAkcnRva2VuX3BhdHRlcm5zLT57JGtleX1cbiI7CiAgICAgICAgICAgICAgICBwcmludCAiJGtleSA9PiBAeyRydG9rZW5faW5kZXhlcy0+eyRrZXl9fVxuIjsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB9ICMjIGVuZCBsb29wIG92ZXIgbGluZXMKICAgIHJldHVybiAoICRybGluZV92YWx1ZXMsICRhbGxfbW9ub3RvbmljICk7Cn0gIyMgZW5kIHN1YiBnZXRfbGluZV90b2tlbl9pbmZvCgpzdWIgcHJ1bmVfYWxpZ25tZW50X3RyZWUgewogICAgbXkgKCRybGluZXMpID0gQF87CgogICAgIyBHaXZlbjoKICAgICMgICAkcmxpbmVzID0gcmVmIHRvIGFycmF5IG9mIGxpbmVzIGluIHRoaXMgZ3JvdXAKCiAgICAjIFBydW5lIHRoZSB0cmVlIG9mIGFsaWdubWVudHMgdG8gbGltaXQgZGVwdGggb2YgYWxpZ25tZW50cwoKICAgIG15ICRqbWF4ID0gQHskcmxpbmVzfSAtIDE7CiAgICByZXR1cm4gaWYgKCAkam1heCA8PSAwICk7CgogICAgIyBWZXJ0aWNhbCBhbGlnbm1lbnQgaW4gcGVybHRpZHkgaXMgZG9uZSBhcyBhbiBpdGVyYXRpdmUgcHJvY2Vzcy4gIFRoZQogICAgIyBzdGFydGluZyBwb2ludCBpcyB0byBtYXJrIGFsbCBwb3NzaWJsZSBhbGlnbm1lbnQgdG9rZW5zICgnPScsICcsJywgJz0+JywKICAgICMgZXRjKSBmb3IgdmVydGljYWwgYWxpZ25tZW50LiAgVGhlbiB3ZSBoYXZlIHRvIGRlbGV0ZSBhbGwgYWxpZ25tZW50cwogICAgIyB3aGljaCwgaWYgYWN0dWFsbHkgbWFkZSwgd291bGQgZGV0cmFjdCBmcm9tIG92ZXJhbGwgYWxpZ25tZW50LiAgVGhpcwogICAgIyBpcyBkb25lIGluIHNldmVyYWwgcGhhc2VzIG9mIHdoaWNoIHRoaXMgaXMgb25lLgoKICAgICMgSW4gdGhpcyByb3V0aW5lIHdlIGxvb2sgYXQgdGhlIGFsaWdubWVudHMgb2YgYSBncm91cCBvZiBsaW5lcyBhcyBhCiAgICAjIGhpZXJhcmNoaWNhbCB0cmVlLiAgV2Ugd2lsbCAncHJ1bmUnIHRoZSB0cmVlIHRvIGxpbWl0ZWQgZGVwdGhzIGlmIHRoYXQKICAgICMgd2lsbCBpbXByb3ZlIG92ZXJhbGwgYWxpZ25tZW50IGF0IHRoZSBsb3dlciBkZXB0aHMuCiAgICAjIEZvciBlYWNoIGxpbmUgd2Ugd2lsbCBiZSBsb29raW5nIGF0IGl0cyBhbGlnbm1lbnQgcGF0dGVybnMgZG93biB0bwogICAgIyBkaWZmZXJlbnQgZml4ZWQgZGVwdGhzLiBGb3IgZWFjaCBkZXB0aCwgd2UgaW5jbHVkZSBhbGwgbG93ZXIgZGVwdGhzIGFuZAogICAgIyBpZ25vcmUgYWxsIGhpZ2hlciBkZXB0aHMuICBXZSB3YW50IHRvIHNlZSBpZiB3ZSBjYW4gZ2V0IGFsaWdubWVudCBvZiBhCiAgICAjIGxhcmdlciBncm91cCBvZiBsaW5lcyBpZiB3ZSBpZ25vcmUgYWxpZ25tZW50cyBhdCBzb21lIGxvd2VyIGRlcHRoLgogICAgIyBIZXJlIGlzIGFuICMgZXhhbXBsZToKCiAgICAjIGZvciAoCiAgICAjICAgICBbICckdmFyJywgICAgIHN1YiB7IGpvaW4gJF8sICJiYXIiIH0sICAgICAgICAgICAgMCwgImJhciIgXSwKICAgICMgICAgIFsgJ0NPTlNUQU5UJywgc3ViIHsgam9pbiAiZm9vIiwgImJhciIgfSwgICAgICAgICAwLCAiYmFyIiBdLAogICAgIyAgICAgWyAnQ09OU1RBTlQnLCBzdWIgeyBqb2luICJmb28iLCAiYmFyIiwgMyB9LCAgICAgIDEsICJiYXJmb28zIiBdLAogICAgIyAgICAgWyAnJG15dmFyJywgICBzdWIgeyBteSAkdmFyOyBqb2luICR2YXIsICJiYXIiIH0sIDAsICJiYXIiIF0sCiAgICAjICk7CgogICAgIyBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgYWxsIGxpbmVzIGhhdmUgdGhyZWUgY29tbWFzIGF0IHRoZSBsb3dlc3QgZGVwdGgKICAgICMgKHplcm8pLCBzbyBpZiB0aGVyZSB3ZXJlIG5vIG90aGVyIGFsaWdubWVudHMsIHRoZXNlIGxpbmVzIHdvdWxkIGFsbAogICAgIyBhbGlnbiBjb25zaWRlcmluZyBvbmx5IHRoZSB6ZXJvIGRlcHRoIGFsaWdubWVudCB0b2tlbi4gIEJ1dCBzb21lIGxpbmVzCiAgICAjIGhhdmUgYWRkaXRpb25hbCBjb21tYSBhbGlnbm1lbnRzIGF0IHRoZSBuZXh0IGRlcHRoLCBzbyB3ZSBuZWVkIHRvIGRlY2lkZQogICAgIyBpZiB3ZSBzaG91bGQgZHJvcCB0aG9zZSB0byBrZWVwIHRoZSB0b3AgbGV2ZWwgYWxpZ25tZW50cywgb3Iga2VlcCB0aG9zZQogICAgIyBmb3Igc29tZSBhZGRpdGlvbmFsIGxvdyBsZXZlbCBhbGlnbm1lbnRzIGF0IHRoZSBleHBlbnNlIGxvc2luZyBzb21lIHRvcAogICAgIyBsZXZlbCBhbGlnbm1lbnRzLiAgSW4gdGhpcyBjYXNlIHdlIHdpbGwgZHJvcCB0aGUgZGVlcGVyIGxldmVsIGNvbW1hcyB0bwogICAgIyBrZWVwIHRoZSBlbnRpcmUgY29sbGVjdGlvbiBhbGlnbmVkLiAgQnV0IGluIHNvbWUgY2FzZXMgdGhlIGRlY2lzaW9uIGNvdWxkCiAgICAjIGdvIHRoZSBvdGhlciB3YXkuCgogICAgIyBUaGUgdHJlZSBmb3IgdGhpcyBleGFtcGxlIGF0IHRoZSB6ZXJvIGRlcHRoIGhhcyBvbmUgbm9kZSBjb250YWluaW5nCiAgICAjIGFsbCBmb3VyIGxpbmVzLCBzaW5jZSB0aGV5IGFyZSBpZGVudGljYWwgYXQgemVybyBsZXZlbCAodGhyZWUgY29tbWFzKS4KICAgICMgQXQgZGVwdGggb25lLCB0aGVyZSBhcmUgdGhyZWUgJ2NoaWxkcmVuJyBub2RlcywgbmFtZWx5OgogICAgIyAtIGxpbmVzIDEgYW5kIDIsIHdoaWNoIGhhdmUgYSBzaW5nbGUgY29tbWEgaW4gdGhlICdzdWInIGF0IGRlcHRoIDEKICAgICMgLSBsaW5lIDMsIHdoaWNoIGhhcyAyIGNvbW1hcyBhdCBkZXB0aCAxCiAgICAjIC0gbGluZTQsIHdoaWNoIGhhcyBhICc7JyBhbmQgYSAnLCcgYXQgZGVwdGggMQogICAgIyBUaGVyZSBhcmUgbm8gZGVlcGVyIGFsaWdubWVudHMgaW4gdGhpcyBleGFtcGxlLgogICAgIyBzbyB0aGUgdHJlZSBzdHJ1Y3R1cmUgZm9yIHRoaXMgZXhhbXBsZSBpczoKICAgICMKICAgICMgICAgZGVwdGggMCAgICAgICAgIGRlcHRoIDEgICAgICBkZXB0aCAyCiAgICAjICAgIFtsaW5lcyAxLTRdIC0tICBbbGluZSAxLTJdIC0gIChlbXB0eSkKICAgICMgICAgICAgICAgICAgICAgIHwgIFtsaW5lIDNdICAgLSAgKGVtcHR5KQogICAgIyAgICAgICAgICAgICAgICAgfCAgW2xpbmUgNF0gICAtICAoZW1wdHkpCgogICAgIyBXZSBjYW4gY2FycnkgdGhpcyB0byBhbnkgZGVwdGgsIGJ1dCBpdCBpcyBub3QgcmVhbGx5IHVzZWZ1bCB0byBnbyBiZWxvdwogICAgIyBkZXB0aCAyLiBUbyBjbGVhbmx5IHN0b3AgdGhlcmUsIHdlIHdpbGwgY29uc2lkZXIgZGVwdGggMiB0byBjb250YWluIGFsbAogICAgIyBhbGlnbm1lbnRzIGF0IGRlcHRoID49Mi4KCiAgICB1c2UgY29uc3RhbnQgRVhQTEFJTl9QUlVORSA9PiAwOwoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFBydW5lIFRyZWUgU3RlcCAxLiBTdGFydCBieSBzY2FubmluZyB0aGUgbGluZXMgYW5kIGNvbGxlY3RpbmcgaW5mbwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAjIE5vdGUgdGhhdCB0aGUgY2FsbGVyIGhhZCB0aGlzIGluZm8gYnV0IHdlIGhhdmUgdG8gcmVkbyB0aGlzIG5vdyBiZWNhdXNlCiAgICAjIGFsaWdubWVudCB0b2tlbnMgbWF5IGhhdmUgYmVlbiBkZWxldGVkLgogICAgbXkgKCAkcmxpbmVfdmFsdWVzLCAkYWxsX21vbm90b25pYyApID0gZ2V0X2xpbmVfdG9rZW5faW5mbygkcmxpbmVzKTsKCiAgICAjIElmIGFsbCB0aGUgbGluZXMgaGF2ZSBsZXZlbHMgd2hpY2ggaW5jcmVhc2UgbW9ub3RvbmljYWxseSBmcm9tIGxlZnQgdG8KICAgICMgcmlnaHQsIHRoZW4gdGhlIHN3ZWVwLWxlZnQtdG8tcmlnaHQgcGFzcyBjYW4gZG8gYSBiZXR0ZXIgam9iIG9mIGFsaWdubWVudAogICAgIyB0aGFuIHBydW5pbmcsIGFuZCB3aXRob3V0IGRlbGV0aW5nIGFsaWdubWVudHMuCiAgICByZXR1cm4gaWYgKCRhbGxfbW9ub3RvbmljKTsKCiAgICAjIENvbnRlbnRzIG9mICRybGluZV92YWx1ZXMKICAgICMgICBbCiAgICAjICAgICAkbGV2X21pbiwgICAgICAgICRsZXZfbWF4LCAgICAgICRydG9rZW5fcGF0dGVybnMsIFxAbGV2cywKICAgICMgICAgICRydG9rZW5faW5kZXhlcywgJGlzX21vbm90b25pYywgJGltYXhfdHJ1ZSwgICAgICAgJGltYXgsCiAgICAjICAgXTsKCiAgICAjIFdlIGNhbiB3b3JrIHRvIGFueSBkZXB0aCwgYnV0IHRoZXJlIGlzIGxpdHRsZSBhZHZhbnRhZ2UgdG8gd29ya2luZwogICAgIyB0byBhIGEgZGVwdGggZ3JlYXRlciB0aGFuIDIKICAgIG15ICRNQVhfREVQVEggPSAyOwoKICAgICMgVGhpcyBhcnJheXMgd2lsbCBob2xkIHRoZSB0cmVlIG9mIGFsaWdubWVudCB0b2tlbnMgYXQgZGlmZmVyZW50IGRlcHRocwogICAgIyBmb3IgdGhlc2UgbGluZXMuCiAgICBteSBAbWF0Y2hfdHJlZTsKCiAgICAjIFRyZWUgbm9kZXMgY29udGFpbiB0aGVzZSB2YWx1ZXM6CiAgICAjICRtYXRjaF90cmVlWyRkZXB0aF0gPSBbJGpiZWcsICRqZW5kLCAkbl9wYXJlbnQsICRsZXZlbCwgJHBhdHRlcm4sCiAgICAjICAgICAgICAgICAgICAgICAgICAgICAgJG5jX2JlZ19wLCAkbmNfZW5kX3AsICRyaW5kZXhlc107CiAgICAjIHdoZXJlCiAgICAjICAgICAgJGRlcHRoID0gMCwxLDIgPSBpbmRleCBvZiBkZXB0aCBvZiB0aGUgbWF0Y2gKCiAgICAjICAkamJlZyBiZWdpbm5pbmcgaW5kZXggaiBvZiB0aGUgcmFuZ2Ugb2YgbGluZXMgaW4gdGhpcyBtYXRjaAogICAgIyAgJGplbmQgZW5kaW5nIGluZGV4IGogb2YgdGhlIHJhbmdlIG9mIGxpbmVzIGluIHRoaXMgbWF0Y2gKICAgICMgICRuX3BhcmVudCA9IGluZGV4IG9mIHRoZSBjb250YWluaW5nIGdyb3VwIGF0ICRkZXB0aC0xLCBpZiBpdCBleGlzdHMKICAgICMgICRsZXZlbCA9IGFjdHVhbCBsZXZlbCBvZiBjb2RlIGJlaW5nIG1hdGNoZWQgaW4gdGhpcyBncm91cAogICAgIyAgJHBhdHRlcm4gPSBhbGlnbm1lbnQgcGF0dGVybiBiZWluZyBtYXRjaGVkCiAgICAjICAkbmNfYmVnX3AgPSBmaXJzdCBjaGlsZAogICAgIyAgJG5jX2VuZF9wID0gbGFzdCBjaGlsZAogICAgIyAgJHJpbmRleGVzID0gcmVmIHRvIHRva2VuIGluZGV4ZXMKCiAgICAjIHRoZSBwYXR0ZXJucyBhbmQgbGV2ZWxzIG9mIHRoZSBjdXJyZW50IGdyb3VwIGJlaW5nIGZvcm1lZCBhdCBlYWNoIGRlcHRoCiAgICBteSAoIEB0b2tlbl9wYXR0ZXJuc19jdXJyZW50LCBAbGV2ZWxzX2N1cnJlbnQsIEB0b2tlbl9pbmRleGVzX2N1cnJlbnQgKTsKCiAgICAjIHRoZSBwYXR0ZXJucyBhbmQgbGV2ZWxzIG9mIHRoZSBuZXh0IGxpbmUgYmVpbmcgdGVzdGVkIGF0IGVhY2ggZGVwdGgKICAgIG15ICggQHRva2VuX3BhdHRlcm5zX25leHQsIEBsZXZlbHNfbmV4dCwgQHRva2VuX2luZGV4ZXNfbmV4dCApOwoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBkZWZpbmUgYSByZWN1cnNpdmUgd29ya2VyIHN1YnJvdXRpbmUgZm9yIHRyZWUgY29uc3RydWN0aW9uCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAjIFRoaXMgaXMgYSByZWN1cnNpdmUgcm91dGluZSB3aGljaCBpcyBjYWxsZWQgaWYgYSBtYXRjaCBjb25kaXRpb24gY2hhbmdlcwogICAgIyBhdCBhbnkgZGVwdGggd2hlbiBhIG5ldyBsaW5lIGlzIGVuY291bnRlcmVkLiAgSXQgZW5kcyB0aGUgbWF0Y2ggbm9kZQogICAgIyB3aGljaCBjaGFuZ2VkIHBsdXMgYWxsIGRlZXBlciBub2RlcyBhdHRhY2hlZCB0byBpdC4KICAgIG15ICRlbmRfbm9kZTsKICAgICRlbmRfbm9kZSA9IHN1YiB7CiAgICAgICAgbXkgKCAkZGVwdGgsICRqbCwgJG5fcGFyZW50ICkgPSBAXzsKCiAgICAgICAgIyAkZGVwdGggaXMgdGhlIHRyZWUgZGVwdGgKICAgICAgICAjICRqbCBpcyB0aGUgIGluZGV4IG9mIHRoZSBsaW5lCiAgICAgICAgIyAkbl9wYXJlbnQgaXMgaW5kZXggb2YgdGhlIHBhcmVudCBub2RlIG9mIHRoaXMgbm9kZQoKICAgICAgICByZXR1cm4gaWYgKCAkZGVwdGggPiAkTUFYX0RFUFRIICk7CgogICAgICAgICMgZW5kIGFueSBjdXJyZW50IGdyb3VwIGF0IHRoaXMgZGVwdGgKICAgICAgICBpZiAoICAgJGpsID49IDAKICAgICAgICAgICAgJiYgZGVmaW5lZCggJG1hdGNoX3RyZWVbJGRlcHRoXSApCiAgICAgICAgICAgICYmIEB7ICRtYXRjaF90cmVlWyRkZXB0aF0gfQogICAgICAgICAgICAmJiBkZWZpbmVkKCAkbGV2ZWxzX2N1cnJlbnRbJGRlcHRoXSApICkKICAgICAgICB7CiAgICAgICAgICAgICRtYXRjaF90cmVlWyRkZXB0aF0tPlstMV0tPlsxXSA9ICRqbDsKICAgICAgICB9CgogICAgICAgICMgRGVmaW5lIHRoZSBpbmRleCBvZiB0aGUgbm9kZSB3ZSB3aWxsIGNyZWF0ZSBiZWxvdwogICAgICAgIG15ICRuZ19zZWxmID0gMDsKICAgICAgICBpZiAoIGRlZmluZWQoICRtYXRjaF90cmVlWyRkZXB0aF0gKSApIHsKICAgICAgICAgICAgJG5nX3NlbGYgPSBAeyAkbWF0Y2hfdHJlZVskZGVwdGhdIH07CiAgICAgICAgfQoKICAgICAgICAjIGVuZCBhbnkgbmV4dCBkZWVwZXIgY2hpbGQgbm9kZShzKQogICAgICAgICRlbmRfbm9kZS0+KCAkZGVwdGggKyAxLCAkamwsICRuZ19zZWxmICk7CgogICAgICAgICMgdXBkYXRlIHRoZSBsZXZlbHMgYmVpbmcgbWF0Y2hlZAogICAgICAgICR0b2tlbl9wYXR0ZXJuc19jdXJyZW50WyRkZXB0aF0gPSAkdG9rZW5fcGF0dGVybnNfbmV4dFskZGVwdGhdOwogICAgICAgICR0b2tlbl9pbmRleGVzX2N1cnJlbnRbJGRlcHRoXSAgPSAkdG9rZW5faW5kZXhlc19uZXh0WyRkZXB0aF07CiAgICAgICAgJGxldmVsc19jdXJyZW50WyRkZXB0aF0gICAgICAgICA9ICRsZXZlbHNfbmV4dFskZGVwdGhdOwoKICAgICAgICAjIERvIG5vdCBzdGFydCBhIG5ldyBncm91cCBhdCB0aGlzIGxldmVsIGlmIGl0IGlzIG5vdCBiZWluZyB1c2VkCiAgICAgICAgaWYgKCAhZGVmaW5lZCggJGxldmVsc19uZXh0WyRkZXB0aF0gKQogICAgICAgICAgICB8fCAkZGVwdGggPiAwCiAgICAgICAgICAgICYmICRsZXZlbHNfbmV4dFskZGVwdGhdIDw9ICRsZXZlbHNfbmV4dFsgJGRlcHRoIC0gMSBdICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgQ3JlYXRlIGEgbm9kZSBmb3IgdGhlIG5leHQgZ3JvdXAgYXQgdGhpcyBkZXB0aC4gV2UgaW5pdGlhbGx5IGFzc3VtZQogICAgICAgICMgdGhhdCBpdCB3aWxsIGNvbnRpbnVlIHRvICRqbWF4LCBhbmQgY29ycmVjdCB0aGF0IGxhdGVyIGlmIHRoZSBub2RlCiAgICAgICAgIyBlbmRzIGVhcmxpZXIuCiAgICAgICAgcHVzaCBAeyAkbWF0Y2hfdHJlZVskZGVwdGhdIH0sCiAgICAgICAgICBbCiAgICAgICAgICAgICRqbCArIDEsICRqbWF4LCAkbl9wYXJlbnQsICRsZXZlbHNfY3VycmVudFskZGVwdGhdLAogICAgICAgICAgICAkdG9rZW5fcGF0dGVybnNfY3VycmVudFskZGVwdGhdLAogICAgICAgICAgICB1bmRlZiwgdW5kZWYsICR0b2tlbl9pbmRleGVzX2N1cnJlbnRbJGRlcHRoXSwKICAgICAgICAgIF07CgogICAgICAgIHJldHVybjsKICAgIH07ICMjIGVuZCAkZW5kX25vZGUgPSBzdWIKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgUHJ1bmUgVHJlZSBTdGVwIDIuIExvb3AgdG8gZm9ybSB0aGUgdHJlZSBvZiBtYXRjaGVzLgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmb3JlYWNoIG15ICRqcCAoIDAgLi4gJGptYXggKSB7CgogICAgICAgICMgd29ya2luZyB3aXRoIHR3byBhZGphY2VudCBsaW5lIGluZGV4ZXMsICdtJz1taW51cywgJ3AnPXBsdXMKICAgICAgICBteSAkam0gPSAkanAgLSAxOwoKICAgICAgICAjIFB1bGwgb3V0IG5lZWRlZCB2YWx1ZXMgZm9yIHRoZSBuZXh0IGxpbmUKICAgICAgICBteSAoICRsZXZfbWluX3V1LCAkbGV2X21heF91dSwgJHJ0b2tlbl9wYXR0ZXJucywgJHJsZXZzLAogICAgICAgICAgICAkcnRva2VuX2luZGV4ZXMsICRpc19tb25vdG9uaWNfdXUsICRpbWF4X3RydWVfdXUsICRpbWF4X3V1ICkKICAgICAgICAgID0gQHsgJHJsaW5lX3ZhbHVlcy0+WyRqcF0gfTsKCiAgICAgICAgIyBUcmFuc2ZlciBsZXZlbHMgYW5kIHBhdHRlcm5zIGZvciB0aGlzIGxpbmUgdG8gdGhlIHdvcmtpbmcgYXJyYXlzLgogICAgICAgICMgSWYgdGhlIG51bWJlciBvZiBsZXZlbHMgZGlmZmVycyBmcm9tIG91ciBjaG9zZW4gTUFYX0RFUFRIIC4uLgogICAgICAgICMgaWYgZmV3ZXIgdGhhbiBNQVhfREVQVEg6IGxlYXZlIGxldmVscyBhdCBtaXNzaW5nIGRlcHRocyB1bmRlZmluZWQKICAgICAgICAjIGlmIG1vcmUgdGhhbiBNQVhfREVQVEg6IHNldCB0aGUgTUFYX0RFUFRIIGxldmVsIHRvIGJlIHRoZSBtYXhpbXVtCiAgICAgICAgQGxldmVsc19uZXh0ID0gQHskcmxldnN9WyAwIC4uICRNQVhfREVQVEggXTsKICAgICAgICBpZiAoIEB7JHJsZXZzfSA+ICRNQVhfREVQVEggKSB7CiAgICAgICAgICAgICRsZXZlbHNfbmV4dFskTUFYX0RFUFRIXSA9ICRybGV2cy0+Wy0xXTsKICAgICAgICB9CiAgICAgICAgbXkgJGRlcHRoID0gMDsKICAgICAgICBmb3JlYWNoIG15ICRpdGVtIChAbGV2ZWxzX25leHQpIHsKICAgICAgICAgICAgJHRva2VuX3BhdHRlcm5zX25leHRbJGRlcHRoXSA9CiAgICAgICAgICAgICAgZGVmaW5lZCgkaXRlbSkgPyAkcnRva2VuX3BhdHRlcm5zLT57JGl0ZW19IDogdW5kZWY7CiAgICAgICAgICAgICR0b2tlbl9pbmRleGVzX25leHRbJGRlcHRoXSA9CiAgICAgICAgICAgICAgZGVmaW5lZCgkaXRlbSkgPyAkcnRva2VuX2luZGV4ZXMtPnskaXRlbX0gOiB1bmRlZjsKICAgICAgICAgICAgJGRlcHRoKys7CiAgICAgICAgfQoKICAgICAgICAjIExvb2sgZm9yIGEgY2hhbmdlIGluIG1hdGNoIGdyb3Vwcy4uLgoKICAgICAgICAjIEluaXRpYWxpemUgb24gdGhlIGZpcnN0IGxpbmUKICAgICAgICBpZiAoICRqcCA9PSAwICkgewogICAgICAgICAgICBteSAkbl9wYXJlbnQ7CiAgICAgICAgICAgICRlbmRfbm9kZS0+KCAwLCAkam0sICRuX3BhcmVudCApOwogICAgICAgIH0KCiAgICAgICAgIyBFbmQgZ3JvdXBzIGlmIGEgaGFyZCBmbGFnIGhhcyBiZWVuIHNldAogICAgICAgIGVsc2lmICggJHJsaW5lcy0+WyRqbV0tPnsnZW5kX2dyb3VwJ30gKSB7CiAgICAgICAgICAgIG15ICRuX3BhcmVudDsKICAgICAgICAgICAgJGVuZF9ub2RlLT4oIDAsICRqbSwgJG5fcGFyZW50ICk7CiAgICAgICAgfQoKICAgICAgICAjIENvbnRpbnVlIGF0IGhhbmdpbmcgc2lkZSBjb21tZW50CiAgICAgICAgZWxzaWYgKCAkcmxpbmVzLT5bJGpwXS0+eydpc19oYW5naW5nX3NpZGVfY29tbWVudCd9ICkgewogICAgICAgICAgICBuZXh0OwogICAgICAgIH0KCiAgICAgICAgIyBPdGhlcndpc2Ugc2VlIGlmIGFueXRoaW5nIGNoYW5nZWQgYW5kIHVwZGF0ZSB0aGUgdHJlZSBpZiBzbwogICAgICAgIGVsc2UgewogICAgICAgICAgICBmb3JlYWNoIG15ICRkZXAgKCAwIC4uICRNQVhfREVQVEggKSB7CgogICAgICAgICAgICAgICAgbXkgJGRlZl9jdXJyZW50ID0gZGVmaW5lZCggJHRva2VuX3BhdHRlcm5zX2N1cnJlbnRbJGRlcF0gKTsKICAgICAgICAgICAgICAgIG15ICRkZWZfbmV4dCAgICA9IGRlZmluZWQoICR0b2tlbl9wYXR0ZXJuc19uZXh0WyRkZXBdICk7CiAgICAgICAgICAgICAgICBsYXN0IGlmICggISRkZWZfY3VycmVudCAmJiAhJGRlZl9uZXh0ICk7CiAgICAgICAgICAgICAgICBpZiAoICAgISRkZWZfY3VycmVudAogICAgICAgICAgICAgICAgICAgIHx8ICEkZGVmX25leHQKICAgICAgICAgICAgICAgICAgICB8fCAkdG9rZW5fcGF0dGVybnNfY3VycmVudFskZGVwXSBuZQogICAgICAgICAgICAgICAgICAgICR0b2tlbl9wYXR0ZXJuc19uZXh0WyRkZXBdICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBteSAkbl9wYXJlbnQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkZGVwID4gMCAmJiBkZWZpbmVkKCAkbWF0Y2hfdHJlZVsgJGRlcCAtIDEgXSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAkbl9wYXJlbnQgPSBAeyAkbWF0Y2hfdHJlZVsgJGRlcCAtIDEgXSB9IC0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJGVuZF9ub2RlLT4oICRkZXAsICRqbSwgJG5fcGFyZW50ICk7CiAgICAgICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gIyMgZW5kIGxvb3AgdG8gZm9ybSB0cmVlIG9mIG1hdGNoZXMKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFBydW5lIFRyZWUgU3RlcCAzLiBNYWtlIGxpbmtzIGZyb20gcGFyZW50IHRvIGNoaWxkIG5vZGVzCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgIyBJdCBzZWVtZWQgY2xlYW5lciB0byBkbyB0aGlzIGFzIGEgc2VwYXJhdGUgc3RlcCByYXRoZXIgdGhhbiBkdXJpbmcgdHJlZQogICAgIyBjb25zdHJ1Y3Rpb24uICBUaGUgY2hpbGRyZW4gbm9kZXMgaGF2ZSBsaW5rcyB1cCB0byB0aGUgcGFyZW50IG5vZGUgd2hpY2gKICAgICMgY3JlYXRlZCB0aGVtLiAgTm93IG1ha2UgbGlua3MgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiwgc28gdGhlIHBhcmVudHMKICAgICMgY2FuIGZpbmQgdGhlIGNoaWxkcmVuLiAgV2Ugc3RvcmUgdGhlIHJhbmdlIG9mIGNoaWxkcmVuIG5vZGVzICgkbmNfYmVnLAogICAgIyAkbmNfZW5kKSBvZiBlYWNoIHBhcmVudCB3aXRoIHR3byBhZGRpdGlvbmFsIGluZGV4ZXMgaW4gdGhlIG9yaWdpbmFsIGFycmF5LgogICAgIyBUaGVzZSB3aWxsIGJlIHVuZGVmIGlmIG5vIGNoaWxkcmVuLgogICAgZm9yZWFjaCBteSAkZGVwdGggKCByZXZlcnNlKCAxIC4uICRNQVhfREVQVEggKSApIHsKICAgICAgICBuZXh0IHVubGVzcyBkZWZpbmVkKCAkbWF0Y2hfdHJlZVskZGVwdGhdICk7CiAgICAgICAgbXkgJG5jX21heCA9IEB7ICRtYXRjaF90cmVlWyRkZXB0aF0gfSAtIDE7CiAgICAgICAgbXkgJG5wX25vdzsKICAgICAgICBmb3JlYWNoIG15ICRuYyAoIDAgLi4gJG5jX21heCApIHsKICAgICAgICAgICAgbXkgJG5wID0gJG1hdGNoX3RyZWVbJGRlcHRoXS0+WyRuY10tPlsyXTsKICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkbnApICkgewoKICAgICAgICAgICAgICAgICMgc2hvdWxkbid0IGhhcHBlbgogICAgICAgICAgICAgICAgI3ByaW50IFNUREVSUiAibG9zdCBjaGlsZCAkbnAgYXQgZGVwdGggJGRlcHRoXG4iOwogICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICFkZWZpbmVkKCRucF9ub3cpIHx8ICRucCAhPSAkbnBfbm93ICkgewogICAgICAgICAgICAgICAgJG5wX25vdyA9ICRucDsKICAgICAgICAgICAgICAgICRtYXRjaF90cmVlWyAkZGVwdGggLSAxIF0tPlskbnBdLT5bNV0gPSAkbmM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJG1hdGNoX3RyZWVbICRkZXB0aCAtIDEgXS0+WyRucF0tPls2XSA9ICRuYzsKICAgICAgICB9CiAgICB9ICMjIGVuZCBsb29wIHRvIG1ha2UgbGlua3MgZG93biB0byB0aGUgY2hpbGQgbm9kZXMKCiAgICBFWFBMQUlOX1BSVU5FID4gMCAmJiBkbyB7CiAgICAgICAgcHJpbnQgIlRyZWUgY29tcGxldGUuIEZvdW5kIHRoZXNlIGdyb3VwczpcbiI7CiAgICAgICAgZm9yZWFjaCBteSAkZGVwdGggKCAwIC4uICRNQVhfREVQVEggKSB7CiAgICAgICAgICAgIER1bXBfdHJlZV9ncm91cHMoIFxAeyAkbWF0Y2hfdHJlZVskZGVwdGhdIH0sICJkZXB0aD0kZGVwdGgiICk7CiAgICAgICAgfQogICAgfTsKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFBydW5lIFRyZWUgU3RlcCA0LiBNYWtlIGEgbGlzdCBvZiBub2RlcyB0byBiZSBkZWxldGVkCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgIyAgbGlzdCBvZiBsaW5lcyB3aXRoIHRva2VucyB0byBiZSBkZWxldGVkOgogICAgIyAgWyRqYmVnLCAkamVuZCwgJGxldmVsX2tlZXBdCiAgICAjICAkamJlZy4uJGplbmQgaXMgdGhlIHJhbmdlIG9mIGxpbmUgaW5kZXhlcywKICAgICMgICRsZXZlbF9rZWVwIGlzIHRoZSBtaW5pbXVtIGxldmVsIHRvIGtlZXAKICAgIG15IEBkZWxldGVfbGlzdDsKCiAgICAjIFdlIHdvcmsgd2l0aCBhIGxpc3Qgb2Ygbm9kZXMgdG8gdmlzaXQgYXQgdGhlIG5leHQgZGVlcGVyIGRlcHRoLgogICAgbXkgQHRvZG9fbGlzdDsKICAgIGlmICggZGVmaW5lZCggJG1hdGNoX3RyZWVbMF0gKSApIHsKICAgICAgICBAdG9kb19saXN0ID0gKCAwIC4uIEB7ICRtYXRjaF90cmVlWzBdIH0gLSAxICk7CiAgICB9CgogICAgZm9yZWFjaCBteSAkZGVwdGggKCAwIC4uICRNQVhfREVQVEggKSB7CiAgICAgICAgbGFzdCBpZiAoICFAdG9kb19saXN0ICk7CiAgICAgICAgbXkgQHRvZG9fbmV4dDsKICAgICAgICBmb3JlYWNoIG15ICRucCAoQHRvZG9fbGlzdCkgewogICAgICAgICAgICBteSAoICRqYmVnX3AsICRqZW5kX3AsICRucF9wX3V1LCAkbGV2X3AsICRwYXRfcF91dSwgJG5jX2JlZ19wLAogICAgICAgICAgICAgICAgJG5jX2VuZF9wLCAkcmluZGV4ZXNfcF91dSApCiAgICAgICAgICAgICAgPSBAeyAkbWF0Y2hfdHJlZVskZGVwdGhdLT5bJG5wXSB9OwogICAgICAgICAgICBteSAkbmxpbmVzX3AgPSAkamVuZF9wIC0gJGpiZWdfcCArIDE7CgogICAgICAgICAgICAjIG5vdGhpbmcgdG8gZG8gaWYgbm8gY2hpbGRyZW4KICAgICAgICAgICAgbmV4dCB1bmxlc3MgZGVmaW5lZCgkbmNfYmVnX3ApOwoKICAgICAgICAgICAgIyBEZWZpbmUgdGhlIG51bWJlciBvZiBsaW5lcyB0byBlaXRoZXIga2VlcCBvciBkZWxldGUgYSBjaGlsZCBub2RlLgogICAgICAgICAgICAjIFRoaXMgaXMgdGhlIGtleSBkZWNpc2lvbiB3ZSBoYXZlIHRvIG1ha2UuICBXZSB3YW50IHRvIGRlbGV0ZQogICAgICAgICAgICAjIHNob3J0IHJ1bnMgb2YgbWF0Y2hlZCBsaW5lcywgYW5kIGtlZXAgbG9uZyBydW5zLiAgSXQgc2VlbXMgZWFzaWVyCiAgICAgICAgICAgICMgZm9yIHRoZSBleWUgdG8gZm9sbG93IGJyZWFrcyBpbiBtb25vdG9uaWMgbGV2ZWwgY2hhbmdlcyB0aGFuCiAgICAgICAgICAgICMgbm9uLW1vbm90b25pYyBsZXZlbCBjaGFuZ2VzLiAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgbG9va3MKICAgICAgICAgICAgIyBiZXN0IGlmIHdlIGRlbGV0ZSB0aGUgbG93ZXIgbGV2ZWwgYWxpZ25tZW50czoKCiAgICAgICAgICAgICMgIFsxXSAgICAgICAgICAgICAgICAgIH5+IFtdOwogICAgICAgICAgICAjICBbIFsiZm9vIl0sIFsiYmFyIl0gXSB+fiBbIHFyL28vLCBxci9hLyBdOwogICAgICAgICAgICAjICBbIHFyL28vLCBxci9hLyBdICAgICB+fiBbIFsiZm9vIl0sIFsiYmFyIl0gXTsKICAgICAgICAgICAgIyAgWyAiZm9vIiwgImJhciIgXSAgICAgfn4gWyBxci9vLywgcXIvYS8gXTsKICAgICAgICAgICAgIyAgWyBxci9vLywgcXIvYS8gXSAgICAgfn4gWyAiZm9vIiwgImJhciIgXTsKICAgICAgICAgICAgIyAgJGRlZXAxICAgICAgICAgICAgICAgfn4gJGRlZXAxOwoKICAgICAgICAgICAgIyBTbyB3ZSB3aWxsIHVzZSB0d28gdGhyZXNob2xkcy4KICAgICAgICAgICAgbXkgJG5taW5fbW9ubyAgICAgPSAkZGVwdGggKyAyOwogICAgICAgICAgICBteSAkbm1pbl9ub25fbW9ubyA9ICRkZXB0aCArIDY7CiAgICAgICAgICAgIGlmICggJG5taW5fbW9ubyA+ICRubGluZXNfcCAtIDEgKSB7CiAgICAgICAgICAgICAgICAkbm1pbl9tb25vID0gJG5saW5lc19wIC0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICRubWluX25vbl9tb25vID4gJG5saW5lc19wIC0gMSApIHsKICAgICAgICAgICAgICAgICRubWluX25vbl9tb25vID0gJG5saW5lc19wIC0gMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBsb29wIHRvIGtlZXAgb3IgZGVsZXRlIGVhY2ggY2hpbGQgbm9kZQogICAgICAgICAgICBmb3JlYWNoIG15ICRuYyAoICRuY19iZWdfcCAuLiAkbmNfZW5kX3AgKSB7CiAgICAgICAgICAgICAgICBteSAoICRqYmVnX2MsICRqZW5kX2MsICRucF9jX3V1LCAkbGV2X2NfdXUsICRwYXRfY191dSwKICAgICAgICAgICAgICAgICAgICAkbmNfYmVnX2NfdXUsICRuY19lbmRfY191dSApCiAgICAgICAgICAgICAgICAgID0gQHsgJG1hdGNoX3RyZWVbICRkZXB0aCArIDEgXS0+WyRuY10gfTsKICAgICAgICAgICAgICAgIG15ICRubGluZXNfYyAgICAgPSAkamVuZF9jIC0gJGpiZWdfYyArIDE7CiAgICAgICAgICAgICAgICBteSAkaXNfbW9ub3RvbmljID0gJHJsaW5lX3ZhbHVlcy0+WyRqYmVnX2NdLT5bNV07CiAgICAgICAgICAgICAgICBteSAkbm1pbiAgICAgICAgID0gJGlzX21vbm90b25pYyA/ICRubWluX21vbm8gOiAkbm1pbl9ub25fbW9ubzsKICAgICAgICAgICAgICAgIGlmICggJG5saW5lc19jIDwgJG5taW4gKSB7CiMjcHJpbnQgImRlbGV0aW5nIGNoaWxkLCBubGluZXM9JG5saW5lc19jLCBubWluPSRubWluXG4iOwogICAgICAgICAgICAgICAgICAgIHB1c2ggQGRlbGV0ZV9saXN0LCBbICRqYmVnX2MsICRqZW5kX2MsICRsZXZfcCBdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiMjcHJpbnQgImtlZXBpbmcgY2hpbGQsIG5saW5lcz0kbmxpbmVzX2MsIG5taW49JG5taW5cbiI7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAdG9kb19uZXh0LCAkbmM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgQHRvZG9fbGlzdCA9IEB0b2RvX25leHQ7CiAgICB9ICMjIGVuZCBsb29wIHRvIG1hcmsgbm9kZXMgdG8gZGVsZXRlCgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBQcnVuZSBUcmVlIFN0ZXAgNS4gTG9vcCB0byBkZWxldGUgc2VsZWN0ZWQgYWxpZ25tZW50IHRva2VucwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZm9yZWFjaCBteSAkaXRlbSAoQGRlbGV0ZV9saXN0KSB7CiAgICAgICAgbXkgKCAkamJlZywgJGplbmQsICRsZXZlbF9rZWVwICkgPSBAeyRpdGVtfTsKICAgICAgICBmb3JlYWNoIG15ICRqaiAoICRqYmVnIC4uICRqZW5kICkgewogICAgICAgICAgICBteSAkbGluZSA9ICRybGluZXMtPlskampdOwogICAgICAgICAgICBteSBAaWRlbDsKICAgICAgICAgICAgbXkgJHJ0b2tlbnMgPSAkbGluZS0+eydydG9rZW5zJ307CiAgICAgICAgICAgIG15ICRpbWF4ICAgID0gQHskcnRva2Vuc30gLSAyOwogICAgICAgICAgICBmb3JlYWNoIG15ICRpICggMCAuLiAkaW1heCApIHsKICAgICAgICAgICAgICAgIG15ICR0b2sgPSAkcnRva2Vucy0+WyRpXTsKICAgICAgICAgICAgICAgIG15ICggJHJhd190b2tfdXUsICRsZXYsICR0YWdfdXUsICR0b2tfY291bnRfdXUgKSA9CiAgICAgICAgICAgICAgICAgIGRlY29kZV9hbGlnbm1lbnRfdG9rZW4oJHRvayk7CiAgICAgICAgICAgICAgICBpZiAoICRsZXYgPiAkbGV2ZWxfa2VlcCApIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBpZGVsLCAkaTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoQGlkZWwpIHsKICAgICAgICAgICAgICAgIGRlbGV0ZV9zZWxlY3RlZF90b2tlbnMoICRsaW5lLCBcQGlkZWwgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gIyMgZW5kIGxvb3AgdG8gZGVsZXRlIHNlbGVjdGVkIGFsaWdubWVudCB0b2tlbnMKCiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBwcnVuZV9hbGlnbm1lbnRfdHJlZQoKc3ViIER1bXBfdHJlZV9ncm91cHMgewogICAgbXkgKCAkcmdyb3VwLCAkbXNnICkgPSBAXzsKCiAgICAjIERlYnVnIHJvdXRpbmUKICAgIHByaW50ICIkbXNnXG4iOwogICAgbG9jYWwgJExJU1RfU0VQQVJBVE9SID0gJykoJzsKICAgIGZvcmVhY2ggbXkgJGl0ZW0gKCBAeyRyZ3JvdXB9ICkgewogICAgICAgIG15IEBmaXggPSBAeyRpdGVtfTsKICAgICAgICBmb3JlYWNoIG15ICR2YWwgKEBmaXgpIHsgJHZhbCA9ICJ1bmRlZiIgdW5sZXNzIGRlZmluZWQoJHZhbCk7IH0KICAgICAgICAkZml4WzRdID0gIi4uLiI7CiAgICAgICAgcHJpbnQgIihAZml4KVxuIjsKICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIER1bXBfdHJlZV9ncm91cHMKCiMgVGhpcyB0ZXN0IGRpZCBub3QgZ2l2ZSBzdWZmaWNpZW50bHkgYmV0dGVyIHJlc3VsdHMgdG8gdXNlIGFzIGFuIHVwZGF0ZSwKIyBidXQgdGhlIGZsYWcgaXMga2VwdCBhcyBhIHN0YXJ0aW5nIHBvaW50IGZvciBmdXR1cmUgdGVzdGluZy4KdXNlIGNvbnN0YW50IFRFU1RfTUFSR0lOQUxfRVFfQUxJR05NRU5UID0+IDA7CgpzdWIgaXNfbWFyZ2luYWxfbWF0Y2ggewoKICAgIG15ICggJGxpbmVfMCwgJGxpbmVfMSwgJGdyb3VwX2xldmVsLCAkaW1heF9hbGlnbiwgJGltYXhfcHJldiApID0gQF87CgogICAgIyBEZWNpZGUgaWYgd2Ugc2hvdWxkIHVuZG8gc29tZSBvciBhbGwgb2YgdGhlIGNvbW1vbiBhbGlnbm1lbnRzIG9mIGEKICAgICMgZ3JvdXAgb2YganVzdCB0d28gbGluZXMuCgogICAgIyBHaXZlbjoKICAgICMgICAkbGluZV8wIGFuZCAkbGluZV8xIC0gdGhlIHR3byBsaW5lcwogICAgIyAgICRncm91cF9sZXZlbCA9IHRoZSBpbmRlbnRhdGlvbiBsZXZlbCBvZiB0aGUgZ3JvdXAgYmVpbmcgcHJvY2Vzc2VkCiAgICAjICAgJGltYXhfYWxpZ24gPSB0aGUgbWF4aW11bSBpbmRleCBvZiB0aGUgY29tbW9uIGFsaWdubWVudCB0b2tlbnMKICAgICMgICAgICAgICAgICAgICAgIG9mIHRoZSB0d28gbGluZXMKICAgICMgICAkaW1heF9wcmV2ICA9IHRoZSBtYXhpbXVtIGluZGV4IG9mIHRoZSBjb21tb24gYWxpZ25tZW50IHRva2VucwogICAgIyAgICAgICAgICAgICAgICAgd2l0aCB0aGUgbGluZSBiZWZvcmUgJGxpbmVfMCAoPS0xIG9mIGRvZXMgbm90IGV4aXN0KQoKICAgICMgUmV0dXJuOgogICAgIyAgICRpc19tYXJnaW5hbCA9IHRydWUgaWYgdGhlIHR3byBsaW5lcyBzaG91bGQgTk9UIGJlIGZ1bGx5IGFsaWduZWQKICAgICMgICAgICAgICAgICAgICAgPSBmYWxzZSBpZiB0aGUgdHdvIGxpbmVzIGNhbiByZW1haW4gZnVsbHkgYWxpZ25lZAogICAgIyAgICRpbWF4X2FsaWduICA9IHRoZSBpbmRleCBvZiB0aGUgaGlnaGVzdCBhbGlnbm1lbnQgdG9rZW4gc2hhcmVkIGJ5CiAgICAjICAgICAgICAgICAgICAgICAgdGhlc2UgdHdvIGxpbmVzIHRvIGtlZXAgaWYgdGhlIG1hdGNoIGlzIG1hcmdpbmFsLgoKICAgICMgV2hlbiB3ZSBoYXZlIGFuIGFsaWdubWVudCBncm91cCBvZiBqdXN0IHR3byBsaW5lcyBsaWtlIHRoaXMsIHdlIGFyZQogICAgIyB3b3JraW5nIGluIHRoZSB0d2lsaWdodCB6b25lIG9mIHdoYXQgbG9va3MgZ29vZCBhbmQgd2hhdCBsb29rcyBiYWQuCiAgICAjIFRoaXMgcm91dGluZSBpcyBhIGNvbGxlY3Rpb24gb2YgcnVsZXMgd2hpY2ggd29yayBoYXZlIGJlZW4gZm91bmQgdG8KICAgICMgd29yayBmYWlybHkgd2VsbCwgYnV0IGl0IHdpbGwgbmVlZCB0byBiZSB1cGRhdGVkIGZyb20gdGltZSB0byB0aW1lLgoKICAgIG15ICRpc19tYXJnaW5hbCA9IDA7CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBBbHdheXMgYWxpZ24gY2VydGFpbiBzcGVjaWFsIGNhc2VzIC4uLgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgaWYgKAoKICAgICAgICAjIGFsd2F5cyBrZWVwIGFsaWdubWVudHMgb2YgYSB0ZXJtaW5hbCBlbHNlIG9yIHRlcm5hcnkKICAgICAgICBkZWZpbmVkKCAkbGluZV8xLT57J2pfdGVybWluYWxfbWF0Y2gnfSApCgogICAgICAgICMgYWx3YXlzIGFsaWduIGxpc3RzCiAgICAgICAgfHwgJGxpbmVfMC0+eydsaXN0X3R5cGUnfQoKICAgICAgICAjIGFsd2F5cyBhbGlnbiBoYW5naW5nIHNpZGUgY29tbWVudHMKICAgICAgICB8fCAkbGluZV8xLT57J2lzX2hhbmdpbmdfc2lkZV9jb21tZW50J30KCiAgICAgICkKICAgIHsKICAgICAgICByZXR1cm4gKCAkaXNfbWFyZ2luYWwsICRpbWF4X2FsaWduICk7CiAgICB9CgogICAgbXkgJGptYXhfMCAgICA9ICRsaW5lXzAtPnsnam1heCd9OwogICAgbXkgJGptYXhfMSAgICA9ICRsaW5lXzEtPnsnam1heCd9OwogICAgbXkgJHJ0b2tlbnNfMSA9ICRsaW5lXzEtPnsncnRva2Vucyd9OwojIyAgbXkgJHJ0b2tlbnNfMCAgICAgICAgPSAkbGluZV8wLT57J3J0b2tlbnMnfTsKICAgIG15ICRyZmllbGRfbGVuZ3Roc18wID0gJGxpbmVfMC0+eydyZmllbGRfbGVuZ3Rocyd9OwogICAgbXkgJHJmaWVsZF9sZW5ndGhzXzEgPSAkbGluZV8xLT57J3JmaWVsZF9sZW5ndGhzJ307CiAgICBteSAkcnBhdHRlcm5zXzAgICAgICA9ICRsaW5lXzAtPnsncnBhdHRlcm5zJ307CiAgICBteSAkcnBhdHRlcm5zXzEgICAgICA9ICRsaW5lXzEtPnsncnBhdHRlcm5zJ307CiAgICBteSAkaW1heF9uZXh0ICAgICAgICA9ICRsaW5lXzEtPnsnaW1heF9wYWlyJ307CgogICAgIyBXZSB3aWxsIHNjYW4gdGhlIGFsaWdubWVudCB0b2tlbnMgYW5kIHNldCBhIGZsYWcgJyRpc19tYXJnaW5hbCcgaWYKICAgICMgaXQgc2VlbXMgdGhhdCB0aGUgYW4gYWxpZ25tZW50IHdvdWxkIGxvb2sgYmFkLgogICAgbXkgJG1heF9wYWQgICAgICAgICAgICA9IDA7CiAgICBteSAkc2F3X2dvb2RfYWxpZ25tZW50ID0gMDsKICAgIG15ICRzYXdfaWZfb3I7ICAgICAgICAgICAgICAgICAgIyBpZiB3ZSBzYXcgYW4gJ2lmJyBvciAnb3InIGF0IGdyb3VwIGxldmVsCiAgICBteSAkcmF3X3Rva2IgPSBFTVBUWV9TVFJJTkc7ICAgICMgZmlyc3QgdG9rZW4gc2VlbiBhdCBncm91cCBsZXZlbAogICAgbXkgJGpmaXJzdF9iYWQ7CiAgICBteSAkbGluZV9lbmRpbmdfZmF0X2NvbW1hOyAgICAgICMgaXMgbGFzdCB0b2tlbiBqdXN0IGEgJz0+JyA/CiAgICBteSAkajBfZXFfcGFkOwogICAgbXkgJGowX21heF9wYWQgPSAwOwoKICAgIGZvcmVhY2ggbXkgJGogKCAwIC4uICRqbWF4XzEgLSAyICkgewogICAgICAgIG15ICggJHJhd190b2ssICRsZXYsICR0YWdfdXUsICR0b2tfY291bnRfdXUgKSA9CiAgICAgICAgICBkZWNvZGVfYWxpZ25tZW50X3Rva2VuKCAkcnRva2Vuc18xLT5bJGpdICk7CiAgICAgICAgaWYgKCAkcmF3X3RvayAmJiAkbGV2ID09ICRncm91cF9sZXZlbCApIHsKICAgICAgICAgICAgaWYgKCAhJHJhd190b2tiICkgeyAkcmF3X3Rva2IgPSAkcmF3X3RvayB9CiAgICAgICAgICAgICRzYXdfaWZfb3IgfHw9ICRpc19pZl9vcnskcmF3X3Rva307CiAgICAgICAgfQoKICAgICAgICAjIFdoZW4gdGhlIGZpcnN0IG9mIHRoZSB0d28gbGluZXMgZW5kcyBpbiBhIGJhcmUgJz0+JyB0aGlzIHdpbGwKICAgICAgICAjIHByb2JhYmx5IGJlIG1hcmdpbmFsIG1hdGNoLiAgKEZvciBhIGJhcmUgPT4sIHRoZSBuZXh0IGZpZWxkIGxlbmd0aAogICAgICAgICMgd2lsbCBiZSAyIG9yIDMsIGRlcGVuZGluZyBvbiBzaWRlIGNvbW1lbnQpCiAgICAgICAgJGxpbmVfZW5kaW5nX2ZhdF9jb21tYSA9CiAgICAgICAgICAgICAkaiA9PSAkam1heF8xIC0gMgogICAgICAgICAgJiYgJHJhd190b2sgZXEgJz0+JwogICAgICAgICAgJiYgJHJmaWVsZF9sZW5ndGhzXzAtPlsgJGogKyAxIF0gPD0gMzsKCiAgICAgICAgbXkgJHBhZCA9ICRyZmllbGRfbGVuZ3Roc18xLT5bJGpdIC0gJHJmaWVsZF9sZW5ndGhzXzAtPlskal07CiAgICAgICAgaWYgKCAkaiA9PSAwICkgewogICAgICAgICAgICAkcGFkICs9ICRsaW5lXzEtPnsnbGVhZGluZ19zcGFjZV9jb3VudCd9IC0KICAgICAgICAgICAgICAkbGluZV8wLT57J2xlYWRpbmdfc3BhY2VfY291bnQnfTsKCiAgICAgICAgICAgICMgUmVtZW1iZXIgdGhlIHBhZCBhdCBhIGxlYWRpbmcgZXF1YWxzCiAgICAgICAgICAgIGlmICggJHJhd190b2sgZXEgJz0nICYmICRsZXYgPT0gJGdyb3VwX2xldmVsICkgewogICAgICAgICAgICAgICAgJGowX2VxX3BhZCA9ICRwYWQ7CiAgICAgICAgICAgICAgICAkajBfbWF4X3BhZCA9CiAgICAgICAgICAgICAgICAgIDAuNSAqICggJHJmaWVsZF9sZW5ndGhzXzEtPlswXSArICRyZmllbGRfbGVuZ3Roc18wLT5bMF0gKTsKICAgICAgICAgICAgICAgICRqMF9tYXhfcGFkID0gNCBpZiAoICRqMF9tYXhfcGFkIDwgNCApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoICRwYWQgPCAwICkgICAgICAgIHsgJHBhZCAgICAgPSAtJHBhZCB9CiAgICAgICAgaWYgKCAkcGFkID4gJG1heF9wYWQgKSB7ICRtYXhfcGFkID0gJHBhZCB9CiAgICAgICAgaWYgKCAkaXNfZ29vZF9tYXJnaW5hbF9hbGlnbm1lbnR7JHJhd190b2t9CiAgICAgICAgICAgICYmICEkbGluZV9lbmRpbmdfZmF0X2NvbW1hICkKICAgICAgICB7CiAgICAgICAgICAgICRzYXdfZ29vZF9hbGlnbm1lbnQgPSAxOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJGpmaXJzdF9iYWQgPSAkaiB1bmxlc3MgZGVmaW5lZCgkamZpcnN0X2JhZCk7CiAgICAgICAgfQogICAgICAgIG15ICRwYXRfMCA9ICRycGF0dGVybnNfMC0+WyRqXTsKICAgICAgICBteSAkcGF0XzEgPSAkcnBhdHRlcm5zXzEtPlskal07CiAgICAgICAgaWYgKCAkcGF0XzAgbmUgJHBhdF8xICYmIGxlbmd0aCgkcGF0XzApIGVxIGxlbmd0aCgkcGF0XzEpICkgewogICAgICAgICAgICAkcGF0XzAgPX4gdHIvbi9RLzsKICAgICAgICAgICAgJHBhdF8xID1+IHRyL24vUS87CiAgICAgICAgfQogICAgICAgIGlmICggJHBhdF8wIG5lICRwYXRfMSApIHsKCiAgICAgICAgICAgICMgRmxhZyB0aGlzIGFzIGEgbWFyZ2luYWwgbWF0Y2ggc2luY2UgcGF0dGVybnMgZGlmZmVyLgogICAgICAgICAgICAjIE5vcm1hbGx5LCB3ZSB3aWxsIG5vdCBhbGxvdyBqdXN0IHR3byBsaW5lcyB0byBtYXRjaCBpZgogICAgICAgICAgICAjIG1hcmdpbmFsLiBCdXQgd2UgY2FuIGFsbG93IG1hdGNoaW5nIGluIHNvbWUgc3BlY2lmaWMgY2FzZXMuCgogICAgICAgICAgICAkamZpcnN0X2JhZCAgPSAkaiBpZiAoICFkZWZpbmVkKCRqZmlyc3RfYmFkKSApOwogICAgICAgICAgICAkaXNfbWFyZ2luYWwgPSAxICBpZiAoICRpc19tYXJnaW5hbCA9PSAwICk7CiAgICAgICAgICAgIGlmICggJHJhd190b2sgZXEgJz0nICkgewoKICAgICAgICAgICAgICAgICMgSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgbWFyZ2luYWwgbWF0Y2g6CiAgICAgICAgICAgICAgICAjICAgICAgICRkb25leyQkb3B9ID0gMTsKICAgICAgICAgICAgICAgICMgICAgICAgJG9wICAgICAgICAgPSBjb21waWxlX2JibG9jaygkb3ApOwogICAgICAgICAgICAgICAgIyBUaGUgbGVmdCB0b2tlbnMgYXJlIGJvdGggaWRlbnRpZmllcnMsIGJ1dAogICAgICAgICAgICAgICAgIyBvbmUgYWNjZXNzZXMgYSBoYXNoIGFuZCB0aGUgb3RoZXIgZG9lc24ndC4KICAgICAgICAgICAgICAgICMgV2UnbGwgbGV0IHRoaXMgYmUgYSB0ZW50YXRpdmUgbWF0Y2ggYW5kIHVuZG8KICAgICAgICAgICAgICAgICMgaXQgbGF0ZXIgaWYgd2UgZG9uJ3QgZmluZCBtb3JlIHRoYW4gMiBsaW5lcwogICAgICAgICAgICAgICAgIyBpbiB0aGUgZ3JvdXAuCiAgICAgICAgICAgICAgICAkaXNfbWFyZ2luYWwgPSAyOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICRpc19tYXJnaW5hbCA9IDEgaWYgKCAkaXNfbWFyZ2luYWwgPT0gMCAmJiAkbGluZV9lbmRpbmdfZmF0X2NvbW1hICk7CgogICAgIyBUdXJuIG9mZiB0aGUgIm1hcmdpbmFsIG1hdGNoIiBmbGFnIGluIHNvbWUgY2FzZXMuLi4KICAgICMgQSAibWFyZ2luYWwgbWF0Y2giIG9jY3VycyB3aGVuIHRoZSBhbGlnbm1lbnQgdG9rZW5zIGFncmVlCiAgICAjIGJ1dCB0aGVyZSBhcmUgZGlmZmVyZW5jZXMgaW4gdGhlIG90aGVyIHRva2VucyAocGF0dGVybnMpLgogICAgIyBJZiB3ZSBsZWF2ZSB0aGUgbWFyZ2luYWwgbWF0Y2ggZmxhZyBzZXQsIHRoZW4gdGhlIHJ1bGUgaXMgdGhhdCB3ZQogICAgIyB3aWxsIGFsaWduIG9ubHkgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiB0d28gbGluZXMgaW4gdGhlIGdyb3VwLgogICAgIyBXZSB3aWxsIHR1cm4gb2YgdGhlIGZsYWcgaWYgd2UgYWxtb3N0IGhhdmUgYSBtYXRjaAogICAgIyBhbmQgZWl0aGVyIHdlIGhhdmUgc2VlbiBhIGdvb2QgYWxpZ25tZW50IHRva2VuIG9yIHdlCiAgICAjIGp1c3QgbmVlZCBhIHNtYWxsIHBhZCAoMiBzcGFjZXMpIHRvIGZpdC4gIFRoZXNlIHJ1bGVzIGFyZQogICAgIyB0aGUgcmVzdWx0IG9mIGV4cGVyaW1lbnRhdGlvbi4gIFRva2VucyB3aGljaCBtaXNhbGlnbmVkIGJ5IGp1c3QKICAgICMgb25lIG9yIHR3byBjaGFyYWN0ZXJzIGFyZSBhbm5veWluZy4gIE9uIHRoZSBvdGhlciBoYW5kLAogICAgIyBsYXJnZSBnYXBzIHRvIGxlc3MgaW1wb3J0YW50IGFsaWdubWVudCB0b2tlbnMgYXJlIGFsc28gYW5ub3lpbmcuCiAgICBpZiAoICRpc19tYXJnaW5hbCA9PSAxCiAgICAgICAgJiYgKCAkc2F3X2dvb2RfYWxpZ25tZW50IHx8ICRtYXhfcGFkIDwgMyApICkKICAgIHsKICAgICAgICAkaXNfbWFyZ2luYWwgPSAwOwogICAgfQoKICAgICMgV2Ugd2lsbCB1c2UgdGhlIGxpbmUgZW5kaW5ncyB0byBoZWxwIGRlY2lkZSBvbiBhbGlnbm1lbnRzLi4uCiAgICAjIFNlZSBpZiB0aGUgbGluZXMgZW5kIHdpdGggc2VtaWNvbG9ucy4uLgogICAgbXkgJHNjX3Rlcm0wOwogICAgbXkgJHNjX3Rlcm0xOwogICAgaWYgKCAkam1heF8wIDwgMSB8fCAkam1heF8xIDwgMSApIHsKCiAgICAgICAgIyBzaG91bGRuJ3QgaGFwcGVuCiAgICB9CiAgICBlbHNlIHsKICAgICAgICBteSAkcGF0MCA9ICRycGF0dGVybnNfMC0+WyAkam1heF8wIC0gMSBdOwogICAgICAgIG15ICRwYXQxID0gJHJwYXR0ZXJuc18xLT5bICRqbWF4XzEgLSAxIF07CiAgICAgICAgJHNjX3Rlcm0wID0gJHBhdDAgPX4gLztiPyQvOwogICAgICAgICRzY190ZXJtMSA9ICRwYXQxID1+IC87Yj8kLzsKICAgIH0KCiAgICBpZiAoICEkaXNfbWFyZ2luYWwgJiYgISRzY190ZXJtMCApIHsKCiAgICAgICAgIyBGaXJzdCBsaW5lIG9mIGFzc2lnbm1lbnQgc2hvdWxkIGJlIHNlbWljb2xvbiB0ZXJtaW5hdGVkLgogICAgICAgICMgRm9yIGV4YW1wbGUsIGRvIG5vdCBhbGlnbiBoZXJlOgogICAgICAgICMgICQkaHJlZnstTlVNX1RFWFRfRklMRVN9ID0gJCRocmVmey1OVU1fQklOQVJZX0ZJTEVTfSA9CiAgICAgICAgIyAgICAkJGhyZWZ7LU5VTV9ESVJTfSA9IDA7CiAgICAgICAgaWYgKCAkaXNfYXNzaWdubWVudHskcmF3X3Rva2J9ICkgewogICAgICAgICAgICAkaXNfbWFyZ2luYWwgPSAxOwogICAgICAgIH0KICAgIH0KCiAgICAjIFRyeSB0byBhdm9pZCBzb21lIHVuZGVzaXJhYmxlIGFsaWdubWVudHMgb2Ygb3BlbmluZyB0b2tlbnMKICAgICMgZm9yIGV4YW1wbGUsIHRoZSBzcGFjZSBiZXR3ZWVuIGdyZXAgYW5kIHsgaGVyZToKICAgICMgIHJldHVybiBtYXAgeyAoICRfID0+ICRfICkgfQogICAgIyAgICBncmVwICAgICB7IC8kaGFuZGxlcy8gfSAkc2VsZi0+X2dldF9kZWxlZ2F0ZV9tZXRob2RfbGlzdDsKICAgICRpc19tYXJnaW5hbCB8fD0KICAgICAgICAgKCAkcmF3X3Rva2IgZXEgJygnIHx8ICRyYXdfdG9rYiBlcSAneycgKQogICAgICAmJiAkam1heF8xID09IDIKICAgICAgJiYgJHNjX3Rlcm0wIG5lICRzY190ZXJtMTsKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIHJldHVybiBpZiB0aGlzIGlzIG5vdCBhIG1hcmdpbmFsIG1hdGNoCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBpZiAoICEkaXNfbWFyZ2luYWwgKSB7CiAgICAgICAgcmV0dXJuICggJGlzX21hcmdpbmFsLCAkaW1heF9hbGlnbiApOwogICAgfQoKICAgICMgVW5kbyB0aGUgbWFyZ2luYWwgbWF0Y2ggZmxhZyBpbiBjZXJ0YWluIGNhc2VzLAoKICAgICMgVHdvIGxpbmVzIHdpdGggYSBsZWFkaW5nIGVxdWFscy1saWtlIG9wZXJhdG9yIGFyZSBhbGxvd2VkIHRvCiAgICAjIGFsaWduIGlmIHRoZSBwYXR0ZXJucyB0byB0aGUgbGVmdCBvZiB0aGUgZXF1YWxzIGFyZSB0aGUgc2FtZS4KICAgICMgRm9yIGV4YW1wbGUgdGhlIGZvbGxvd2luZyB0d28gbGluZXMgYXJlIGEgbWFyZ2luYWwgbWF0Y2ggYnV0IGhhdmUKICAgICMgdGhlIHNhbWUgbGVmdCBzaWRlIHBhdHRlcm5zLCBzbyB3ZSB3aWxsIGFsaWduIHRoZSBlcXVhbHMuCiAgICAjICAgICBteSAkb3JpZyA9IG15ICRmb3JtYXQgPSAiXjw8PDw8IH5+XG4iOwogICAgIyAgICAgbXkgJGFiYyAgPSAiYWJjIjsKICAgICMgQnV0IHRoZXNlIGhhdmUgYSBkaWZmZXJlbnQgbGVmdCBwYXR0ZXJuIHNvIHRoZXkgd2lsbCBub3QgYmUKICAgICMgYWxpZ25lZAogICAgIyAgICAgJHhtbGRvYyAuPSAkYDsKICAgICMgICAgICRzZWxmLT57J2xlZnRvdmVycyd9IC49ICI8Yngtc2VxOnNlcSIgLiAkJzsKCiAgICAjIEZpcnN0IGxpbmUgc2VtaWNvbG9uIHRlcm1pbmF0ZWQgYnV0IHNlY29uZCBub3QsIHVzdWFsbHkgb2s6CiAgICAjICAgICAgICAgICAgICAgbXkgJHdhbnQgPSAiJ2FiJywgJ2EnLCAnYiciOwogICAgIyAgICAgICAgICAgICAgIG15ICRnb3QgID0gam9pbiggIiwgIiwKICAgICMgICAgICAgICAgICAgICAgICAgIG1hcCB7IGRlZmluZWQoJF8pID8gIickXyciIDogInVuZGVmIiB9CiAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICBAZ290ICk7CiAgICAjICBGaXJzdCBsaW5lIG5vdCBzZW1pY29sb24gdGVybWluYXRlZCwgTm90IE9LIHRvIG1hdGNoOgogICAgIyAgICQkaHJlZnstTlVNX1RFWFRfRklMRVN9ID0gJCRocmVmey1OVU1fQklOQVJZX0ZJTEVTfSA9CiAgICAjICAgICAgJCRocmVmey1OVU1fRElSU30gPSAwOwogICAgbXkgJHBhdDAgPSAkcnBhdHRlcm5zXzAtPlswXTsKICAgIG15ICRwYXQxID0gJHJwYXR0ZXJuc18xLT5bMF07CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBUdXJuIG9mZiB0aGUgbWFyZ2luYWwgZmxhZyBmb3Igc29tZSB0eXBlcyBvZiBhc3NpZ25tZW50cwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgaWYgKCAkaXNfYXNzaWdubWVudHskcmF3X3Rva2J9ICkgewoKICAgICAgICAjIHVuZG8gbWFyZ2luYWwgZmxhZyBpZiBmaXJzdCBsaW5lIGlzIHNlbWljb2xvbiB0ZXJtaW5hdGVkCiAgICAgICAgIyBhbmQgbGVhZGluZyBwYXR0ZXJzIG1hdGNoCiAgICAgICAgaWYgKCRzY190ZXJtMCkgeyAgICAjICYmICRzY190ZXJtMSkgewogICAgICAgICAgICAkaXNfbWFyZ2luYWwgPSAkcGF0MCBuZSAkcGF0MTsKICAgICAgICB9CiAgICB9CiAgICBlbHNpZiAoICRyYXdfdG9rYiBlcSAnPT4nICkgewoKICAgICAgICAjIHVuZG8gbWFyZ2luYWwgZmxhZyBpZiBwYXR0ZXJucyBtYXRjaAogICAgICAgICRpc19tYXJnaW5hbCA9ICRwYXQwIG5lICRwYXQxIHx8ICRsaW5lX2VuZGluZ19mYXRfY29tbWE7CiAgICB9CiAgICBlbHNpZiAoICRyYXdfdG9rYiBlcSAnPX4nICkgewoKICAgICAgICAjIHVuZG8gbWFyZ2luYWwgZmxhZyBpZiBib3RoIGxpbmVzIGFyZSBzZW1pY29sb24gdGVybWluYXRlZAogICAgICAgICMgYW5kIGxlYWRpbmcgcGF0dGVycyBtYXRjaAogICAgICAgIGlmICggJHNjX3Rlcm0xICYmICRzY190ZXJtMCApIHsKICAgICAgICAgICAgJGlzX21hcmdpbmFsID0gJHBhdDAgbmUgJHBhdDE7CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgIyNvazogKG5vbmUgb2YgdGhlIGFib3ZlKQogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBUdXJuIG9mZiB0aGUgbWFyZ2luYWwgZmxhZyBpZiB3ZSBzYXcgYW4gJ2lmJyBvciAnb3InCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAjIEEgdHJhaWxpbmcgJ2lmJyBhbmQgJ29yJyBvZnRlbiBnaXZlcyBhIGdvb2QgYWxpZ25tZW50CiAgICAjIEZvciBleGFtcGxlLCB3ZSBjYW4gYWxpZ24gdGhlc2U6CiAgICAjICByZXR1cm4gLTEgICAgIGlmICRfWzBdID1+IG0vXkNIQVBUfEFQUEVORElYLzsKICAgICMgIHJldHVybiAkMSArIDAgaWYgJF9bMF0gPX4gbS9eU0VDVChcZCopJC87CgogICAgIyBvcgogICAgIyAgJGRfaW5fbVsyXSA9IDI5ICAgICAgICAgIGlmICggJkRhdGVfTGVhcFllYXIoJHkpICk7CiAgICAjICAkZCAgICAgICAgID0gJGRfaW5fbVskbV0gaWYgKCAkZCA+ICRkX2luX21bJG1dICk7CgogICAgaWYgKCRzYXdfaWZfb3IpIHsKCiAgICAgICAgIyB1bmRvIG1hcmdpbmFsIGZsYWcgaWYgYm90aCBsaW5lcyBhcmUgc2VtaWNvbG9uIHRlcm1pbmF0ZWQKICAgICAgICBpZiAoICRzY190ZXJtMCAmJiAkc2NfdGVybTEgKSB7CiAgICAgICAgICAgICRpc19tYXJnaW5hbCA9IDA7CiAgICAgICAgfQogICAgfQoKICAgICMgRm9yIGEgbWFyZ2luYWwgbWF0Y2gsIG9ubHkga2VlcCBtYXRjaGVzIGJlZm9yZSB0aGUgZmlyc3QgJ2JhZCcgbWF0Y2gKICAgIGlmICggICAkaXNfbWFyZ2luYWwKICAgICAgICAmJiBkZWZpbmVkKCRqZmlyc3RfYmFkKQogICAgICAgICYmICRpbWF4X2FsaWduID4gJGpmaXJzdF9iYWQgLSAxICkKICAgIHsKICAgICAgICAkaW1heF9hbGlnbiA9ICRqZmlyc3RfYmFkIC0gMTsKICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBBbGxvdyBzd2VlcCB0byBtYXRjaCBsaW5lcyB3aXRoIGxlYWRpbmcgJz0nIGluIHNvbWUgY2FzZXMKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBpZiAoICRpbWF4X2FsaWduIDwgMCAmJiBkZWZpbmVkKCRqMF9lcV9wYWQpICkgewoKICAgICAgICBpZiAoCgogICAgICAgICAgICAjIElmIHRoZXJlIGlzIGEgZm9sbG93aW5nIGxpbmUgd2l0aCBsZWFkaW5nIGVxdWFscywgb3IKICAgICAgICAgICAgIyBwcmVjZWRpbmcgbGluZSB3aXRoIGxlYWRpbmcgZXF1YWxzLCB0aGVuIGxldCB0aGUgc3dlZXAgYWxpZ24KICAgICAgICAgICAgIyB0aGVtIHdpdGhvdXQgcmVzdHJpY3Rpb24uICBGb3IgZXhhbXBsZSwgdGhlIGZpcnN0IHR3byBsaW5lcwogICAgICAgICAgICAjIGhlcmUgYXJlIGEgbWFyZ2luYWwgbWF0Y2gsIGJ1dCB0aGV5IGFyZSBmb2xsb3dlZCBieSBhIGxpbmUKICAgICAgICAgICAgIyB3aXRoIGxlYWRpbmcgZXF1YWxzLCBzbyB0aGUgc3dlZXAtbHIgbG9naWMgY2FuIGFsaWduIGFsbCBvZgogICAgICAgICAgICAjIHRoZSBsaW5lczoKCiAgICAgICAgICAgICMgICRkYXRlWzFdID0gJG1vbnRoX3RvX251bXsgJGRhdGVbMV0gfTsgICAgICAgICAgICAjIDwtLWxpbmVfMAogICAgICAgICAgICAjICBAeGRhdGUgICA9IHNwbGl0KCAvWzpcL1xzXS8sICRsb2ctPmZpZWxkKCd0JykgKTsgIyA8LS1saW5lXzEKICAgICAgICAgICAgIyAgJGRheSAgICAgPSBzcHJpbnRmKCAiJTA0ZC8lMDJkLyUwMmQiLCBAZGF0ZVsgMiwgMSwgMCBdICk7CiAgICAgICAgICAgICMgICR0aW1lICAgID0gc3ByaW50ZiggIiUwMmQ6JTAyZDolMDJkIiwgQGRhdGVbIDMgLi4gNSBdICk7CgogICAgICAgICAgICAjIExpa2V3aXNlLCBpZiB3ZSByZXZlcnNlIHRoZSB0d28gcGFpcnMgd2Ugd2FudCB0aGUgc2FtZSByZXN1bHQKCiAgICAgICAgICAgICMgICRkYXkgICAgID0gc3ByaW50ZiggIiUwNGQvJTAyZC8lMDJkIiwgQGRhdGVbIDIsIDEsIDAgXSApOwogICAgICAgICAgICAjICAkdGltZSAgICA9IHNwcmludGYoICIlMDJkOiUwMmQ6JTAyZCIsIEBkYXRlWyAzIC4uIDUgXSApOwogICAgICAgICAgICAjICAkZGF0ZVsxXSA9ICRtb250aF90b19udW17ICRkYXRlWzFdIH07ICAgICAgICAgICAgIyA8LS1saW5lXzAKICAgICAgICAgICAgIyAgQHhkYXRlICAgPSBzcGxpdCggL1s6XC9cc10vLCAkbG9nLT5maWVsZCgndCcpICk7ICMgPC0tbGluZV8xCgogICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAkaW1heF9uZXh0ID49IDAKICAgICAgICAgICAgICAgIHx8ICRpbWF4X3ByZXYgPj0gMAogICAgICAgICAgICAgICAgfHwgVEVTVF9NQVJHSU5BTF9FUV9BTElHTk1FTlQKICAgICAgICAgICAgKQogICAgICAgICAgICAmJiAkajBfZXFfcGFkID49IC0kajBfbWF4X3BhZAogICAgICAgICAgICAmJiAkajBfZXFfcGFkIDw9ICRqMF9tYXhfcGFkCiAgICAgICAgICApCiAgICAgICAgewoKICAgICAgICAgICAgIyBCdXQgZG8gbm90IGRvIHRoaXMgaWYgdGhlcmUgaXMgYSBjb21tYSBiZWZvcmUgdGhlICc9Jy4KICAgICAgICAgICAgIyBGb3IgZXhhbXBsZSwgdGhlIGZpcnN0IHR3byBsaW5lcyBiZWxvdyBoYXZlIGNvbW1hcyBhbmQKICAgICAgICAgICAgIyB0aGVyZWZvcmUgYXJlIG5vdCBhbGxvd2VkIHRvIGFsaWduIHdpdGggbGluZXMgMyAmIDQ6CgogICAgICAgICAgICAjIG15ICggJHgsICR5ICkgPSAkc2VsZi0+U2l6ZSgpOyAgICAgICAgICAgICAgICAgICAgICAjPC0tbGluZV8wCiAgICAgICAgICAgICMgbXkgKCAkbGVmdCwgJHRvcCwgJHJpZ2h0LCAkYm90dG9tICkgPSAkc2VsZi0+V2luZG93KCk7ICM8LS1sXzEKICAgICAgICAgICAgIyBteSAkdnggPSAkcmlnaHQgLSAkbGVmdDsKICAgICAgICAgICAgIyBteSAkdnkgPSAkYm90dG9tIC0gJHRvcDsKCiAgICAgICAgICAgIGlmICggJHJwYXR0ZXJuc18wLT5bMF0gIX4gLywvICYmICRycGF0dGVybnNfMS0+WzBdICF+IC8sLyApIHsKICAgICAgICAgICAgICAgICRpbWF4X2FsaWduID0gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gKCAkaXNfbWFyZ2luYWwsICRpbWF4X2FsaWduICk7Cn0gIyMgZW5kIHN1YiBpc19tYXJnaW5hbF9tYXRjaAoKc3ViIGdldF9leHRyYV9sZWFkaW5nX3NwYWNlcyB7CgogICAgbXkgKCAkcmxpbmVzLCAkcmdyb3VwcyApID0gQF87CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgRGVmaW5lIGFueSBleHRyYSBpbmRlbnRhdGlvbiBzcGFjZSAoZm9yIHRoZSAtbHAgb3B0aW9uKS4KICAgICMgSGVyZSBpcyB3aHk6CiAgICAjIElmIGEgbGlzdCBoYXMgc2lkZSBjb21tZW50cywgc3ViIHNjYW5fbGlzdCBtdXN0IGR1bXAgdGhlCiAgICAjIGxpc3QgYmVmb3JlIGl0IHNlZXMgZXZlcnl0aGluZy4gIFdoZW4gdGhpcyBoYXBwZW5zLCBpdCBzZXRzCiAgICAjIHRoZSBpbmRlbnRhdGlvbiB0byB0aGUgc3RhbmRhcmQgc2NoZW1lLCBidXQgbm90ZXMgaG93CiAgICAjIG1hbnkgc3BhY2VzIGl0IHdvdWxkIGhhdmUgbGlrZWQgdG8gdXNlLiAgV2UgbWF5IGJlIGFibGUKICAgICMgdG8gcmVjb3ZlciB0aGF0IHNwYWNlIGhlcmUgaW4gdGhlIGV2ZW50IHRoYXQgYWxsIG9mIHRoZQogICAgIyBsaW5lcyBvZiBhIGxpc3QgYXJlIGJhY2sgdG9nZXRoZXIgYWdhaW4uCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIHJldHVybiAwIGlmICggIUB7JHJsaW5lc30gfHwgIUB7JHJncm91cHN9ICk7CgogICAgbXkgJG9iamVjdCA9ICRybGluZXMtPlswXS0+eydpbmRlbnRhdGlvbid9OwogICAgcmV0dXJuIDAgaWYgKCAhcmVmKCRvYmplY3QpICk7CiAgICBteSAkZXh0cmFfbGVhZGluZ19zcGFjZXMgICAgICAgICAgICA9IDA7CiAgICBteSAkZXh0cmFfaW5kZW50YXRpb25fc3BhY2VzX3dhbnRlZCA9IGdldF9yZWNvdmVyYWJsZV9zcGFjZXMoJG9iamVjdCk7CiAgICByZXR1cm4gKCRleHRyYV9sZWFkaW5nX3NwYWNlcykgaWYgKCAhJGV4dHJhX2luZGVudGF0aW9uX3NwYWNlc193YW50ZWQgKTsKCiAgICBteSAkbWluX3NwYWNlcyA9ICRleHRyYV9pbmRlbnRhdGlvbl9zcGFjZXNfd2FudGVkOwogICAgaWYgKCAkbWluX3NwYWNlcyA+IDAgKSB7ICRtaW5fc3BhY2VzID0gMCB9CgogICAgIyBsb29wIG92ZXIgYWxsIGdyb3VwcwogICAgbXkgJG5nICAgICAgPSAtMTsKICAgIG15ICRuZ3JvdXBzID0gQHskcmdyb3Vwc307CiAgICBmb3JlYWNoIG15ICRpdGVtICggQHskcmdyb3Vwc30gKSB7CiAgICAgICAgJG5nKys7CiAgICAgICAgbXkgKCAkamJlZywgJGplbmQgKSA9IEB7JGl0ZW19OwogICAgICAgIGZvcmVhY2ggbXkgJGogKCAkamJlZyAuLiAkamVuZCApIHsKICAgICAgICAgICAgbmV4dCBpZiAoICRqID09IDAgKTsKCiAgICAgICAgICAgICMgYWxsIGluZGVudGF0aW9uIG9iamVjdHMgbXVzdCBiZSB0aGUgc2FtZQogICAgICAgICAgICBpZiAoICRvYmplY3QgIT0gJHJsaW5lcy0+WyRqXS0+eydpbmRlbnRhdGlvbid9ICkgewogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIyBmaW5kIHRoZSBtYXhpbXVtIHNwYWNlIHdpdGhvdXQgZXhjZWVkaW5nIHRoZSBsaW5lIGxlbmd0aCBmb3IgdGhpcyBncm91cAogICAgICAgIG15ICRhdmFpbCA9ICRybGluZXMtPlskamJlZ10tPmdldF9hdmFpbGFibGVfc3BhY2Vfb25fcmlnaHQoKTsKICAgICAgICBteSAkc3BhY2VzID0KICAgICAgICAgICggJGF2YWlsID4gJGV4dHJhX2luZGVudGF0aW9uX3NwYWNlc193YW50ZWQgKQogICAgICAgICAgPyAkZXh0cmFfaW5kZW50YXRpb25fc3BhY2VzX3dhbnRlZAogICAgICAgICAgOiAkYXZhaWw7CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgTm90ZTogbWluIHNwYWNlcyBjYW4gYmUgbmVnYXRpdmU7IGZvciBleGFtcGxlIHdpdGggLWdudQogICAgICAgICMgZigKICAgICAgICAjICAgZG8geyAxOyAhIShteSAkeCA9IGJsZXNzIFtdKTsgfQogICAgICAgICMgICk7CiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBUaGUgZm9sbG93aW5nIHJ1bGUgaXMgbmVlZGVkIHRvIG1hdGNoIG9sZGVyIGZvcm1hdHRpbmc6CiAgICAgICAgIyBGb3IgbXVsdGlwbGUgZ3JvdXBzLCB3ZSB3aWxsIGtlZXAgc3BhY2VzIG5vbi1uZWdhdGl2ZS4KICAgICAgICAjIEZvciBhIHNpbmdsZSBncm91cCwgd2Ugd2lsbCBhbGxvdyBhIG5lZ2F0aXZlIHNwYWNlLgogICAgICAgIGlmICggJG5ncm91cHMgPiAxICYmICRzcGFjZXMgPCAwICkgeyAkc3BhY2VzID0gMCB9CgogICAgICAgICMgdXBkYXRlIHRoZSBtaW5pbXVtIHNwYWNpbmcKICAgICAgICBpZiAoICRuZyA9PSAwIHx8ICRzcGFjZXMgPCAkZXh0cmFfbGVhZGluZ19zcGFjZXMgKSB7CiAgICAgICAgICAgICRleHRyYV9sZWFkaW5nX3NwYWNlcyA9ICRzcGFjZXM7CiAgICAgICAgfQogICAgfQoKICAgICMgdXBkYXRlIHRoZSBpbmRlbnRhdGlvbiBvYmplY3QgYmVjYXVzZSB3aXRoIC1pY3AgdGhlIHRlcm1pbmFsCiAgICAjICcpOycgd2lsbCB1c2UgdGhlIHNhbWUgYWRqdXN0bWVudC4KICAgICRvYmplY3QtPnBlcm1hbmVudGx5X2RlY3JlYXNlX2F2YWlsYWJsZV9zcGFjZXMoIC0kZXh0cmFfbGVhZGluZ19zcGFjZXMgKTsKICAgIHJldHVybiAkZXh0cmFfbGVhZGluZ19zcGFjZXM7Cn0gIyMgZW5kIHN1YiBnZXRfZXh0cmFfbGVhZGluZ19zcGFjZXMKCnN1YiBmb3JnZXRfc2lkZV9jb21tZW50IHsKICAgIG15ICgkc2VsZikgPSBAXzsKICAgICRzZWxmLT5bX2xhc3Rfc2lkZV9jb21tZW50X2NvbHVtbl9dID0gMDsKICAgIHJldHVybjsKfQoKc3ViIGlzX2dvb2Rfc2lkZV9jb21tZW50X2NvbHVtbiB7CiAgICBteSAoICRzZWxmLCAkbGluZSwgJGxpbmVfbnVtYmVyLCAkbGV2ZWwsICRudW01ICkgPSBAXzsKCiAgICAjIFVwb24gZW5jb3VudGVyaW5nIHRoZSBmaXJzdCBzaWRlIGNvbW1lbnQgb2YgYSBncm91cCwgZGVjaWRlIGlmCiAgICAjIGEgcHJldmlvdXMgc2lkZSBjb21tZW50IHNob3VsZCBiZSBmb3Jnb3R0ZW4uICBUaGlzIGludm9sdmVzCiAgICAjIGNoZWNraW5nIHNldmVyYWwgcnVsZXMuCgogICAgIyBHaXZlbjoKICAgICMgICAkbGluZSA9IHJlZiB0byBpbmZvIGhhc2ggZm9yIHRoZSBsaW5lIG9mIGludGVyZXN0CiAgICAjICAgJGxpbmVfbnVtYmVyID0gbnVtYmVyIG9mIHRoaXMgbGluZSBpbiB0aGUgb3V0cHV0IHN0cmVhbQogICAgIyAgICRsZXZlbCA9IGluZGVudGF0aW9uIGxldmVsIG9mIHRoaXMgbGluZQogICAgIyAgICRudW01ID0gLi5zZWUgY29tbWVudHMgYmVsb3cKCiAgICAjIFJldHVybjoKICAgICMgICB0cnVlIHRvIEtFRVAgb2xkIGNvbW1lbnQgbG9jYXRpb24KICAgICMgICBmYWxzZSB0byBGT1JHRVQgb2xkIGNvbW1lbnQgbG9jYXRpb24KICAgIG15ICRLRUVQICAgPSAxOwogICAgbXkgJEZPUkdFVCA9IDA7CgogICAgbXkgJHJmaWVsZHMgICAgICAgICAgICAgICAgID0gJGxpbmUtPnsncmZpZWxkcyd9OwogICAgbXkgJGlzX2hhbmdpbmdfc2lkZV9jb21tZW50ID0gJGxpbmUtPnsnaXNfaGFuZ2luZ19zaWRlX2NvbW1lbnQnfTsKCiAgICAjIFJVTEUxOiBOZXZlciBmb3JnZXQgY29tbWVudCBiZWZvcmUgYSBoYW5naW5nIHNpZGUgY29tbWVudAogICAgcmV0dXJuICRLRUVQIGlmICgkaXNfaGFuZ2luZ19zaWRlX2NvbW1lbnQpOwoKICAgICMgUlVMRTI6IEZvcmdldCBhIHNpZGUgY29tbWVudCBhZnRlciBhIHNob3J0IGxpbmUgZGlmZmVyZW5jZSwKICAgICMgd2hlcmUgJ3Nob3J0IGxpbmUgZGlmZmVyZW5jZScgaXMgY29tcHV0ZWQgZnJvbSBhIGZvcm11bGEuCiAgICAjIFVzaW5nIGEgc21vb3RoIGZvcm11bGEgaGVscHMgbWluaW1pemUgc3VkZGVuIGxhcmdlIGNoYW5nZXMuCiAgICBteSAkbGluZV9kaWZmID0gJGxpbmVfbnVtYmVyIC0gJHNlbGYtPltfbGFzdF9zaWRlX2NvbW1lbnRfbGluZV9udW1iZXJfXTsKICAgIG15ICRhbGV2X2RpZmYgPSBhYnMoICRsZXZlbCAtICRzZWxmLT5bX2xhc3Rfc2lkZV9jb21tZW50X2xldmVsX10gKTsKCiAgICAjICckbnVtNScgaXMgdGhlIG51bWJlciBvZiBjb21tZW50cyBpbiB0aGUgZmlyc3QgNSBsaW5lcyBhZnRlciB0aGUgZmlyc3QKICAgICMgY29tbWVudC4gIEl0IGlzIG5lZWRlZCB0byBrZWVwIGEgY29tcGFjdCBncm91cCBvZiBzaWRlIGNvbW1lbnRzIGZyb20KICAgICMgYmVpbmcgaW5mbHVlbmNlZCBieSBhIG1vcmUgZGlzdGFudCBzaWRlIGNvbW1lbnQuCiAgICAkbnVtNSA9IDEgaWYgKCAhJG51bTUgKTsKCiAgICAjIFNvbWUgdmFsdWVzOgoKICAgICMgICAgICAgICRhZGlmZiAgJG51bTUgICAkc2hvcnRfZGlmZgogICAgIyAgICAgICAgMCAgICAgICAqICAgICAgIDEyCiAgICAjICAgICAgICAxICAgICAgIDEgICAgICAgNgogICAgIyAgICAgICAgMSAgICAgICAyICAgICAgIDQKICAgICMgICAgICAgIDEgICAgICAgMyAgICAgICAzCiAgICAjICAgICAgICAxICAgICAgIDQgICAgICAgMgogICAgIyAgICAgICAgMiAgICAgICAxICAgICAgIDQKICAgICMgICAgICAgIDIgICAgICAgMiAgICAgICAyCiAgICAjICAgICAgICAyICAgICAgIDMgICAgICAgMQogICAgIyAgICAgICAgMyAgICAgICAxICAgICAgIDMKICAgICMgICAgICAgIDMgICAgICAgMiAgICAgICAxCgogICAgbXkgJHNob3J0X2RpZmYgPSBTQ19MT05HX0xJTkVfRElGRiAvICggMSArICRhbGV2X2RpZmYgKiAkbnVtNSApOwoKICAgIHJldHVybiAkRk9SR0VUCiAgICAgIGlmICggJGxpbmVfZGlmZiA+ICRzaG9ydF9kaWZmCiAgICAgICAgfHwgISRyT3B0c192YWxpZ25fc2lkZV9jb21tZW50cyApOwoKICAgICMgUlVMRTM6IEZvcmdldCBhIHNpZGUgY29tbWVudCBpZiB0aGlzIGxpbmUgaXMgYXQgbG93ZXIgbGV2ZWwgYW5kCiAgICAjIGVuZHMgYSBibG9jawogICAgbXkgJGxhc3Rfc2NfbGV2ZWwgPSAkc2VsZi0+W19sYXN0X3NpZGVfY29tbWVudF9sZXZlbF9dOwogICAgcmV0dXJuICRGT1JHRVQKICAgICAgaWYgKCAkbGV2ZWwgPCAkbGFzdF9zY19sZXZlbAogICAgICAgICYmICRpc19jbG9zaW5nX2Jsb2NrX3R5cGV7IHN1YnN0ciggJHJmaWVsZHMtPlswXSwgMCwgMSApIH0gKTsKCiAgICAjIFJVTEUgNDogRm9yZ2V0IHRoZSBsYXN0IHNpZGUgY29tbWVudCBpZiB0aGlzIGNvbW1lbnQgbWlnaHQgam9pbiBhIGNhY2hlZAogICAgIyBsaW5lIC4uLgogICAgaWYgKCBteSAkY2FjaGVkX2xpbmVfdHlwZSA9IGdldF9jYWNoZWRfbGluZV90eXBlKCkgKSB7CgogICAgICAgICMgLi4uIG90aGVyd2lzZSBzaWRlIGNvbW1lbnQgYWxpZ25tZW50IHdpbGwgZ2V0IG1lc3NlZCB1cC4KICAgICAgICAjIEZvciBleGFtcGxlLCBpbiB0aGUgZm9sbG93aW5nIHRlc3Qgc2NyaXB0CiAgICAgICAgIyB3aXRoIHVzaW5nICdwZXJsdGlkeSAtc2N0IC1hY3Q9MicsIHRoZSBsYXN0IGNvbW1lbnQgd291bGQgdHJ5IHRvCiAgICAgICAgIyBhbGlnbiB3aXRoIHRoZSBwcmV2aW91cyBhbmQgdGhlbiBiZSBpbiB0aGUgd3JvbmcgY29sdW1uIHdoZW4KICAgICAgICAjIHRoZSBsaW5lcyBhcmUgY29tYmluZWQ6CgogICAgICAgICMgZm9yZWFjaCAkbGluZSAoCiAgICAgICAgIyAgICBbMCwgMSwgMl0sIFszLCA0LCA1XSwgWzYsIDcsIDhdLCAgICAjIHJvd3MKICAgICAgICAjICAgIFswLCAzLCA2XSwgWzEsIDQsIDddLCBbMiwgNSwgOF0sICAgICMgY29sdW1ucwogICAgICAgICMgICAgWzAsIDQsIDhdLCBbMiwgNCwgNl0KICAgICAgICAjICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGlhZ29uYWxzCiAgICAgICAgcmV0dXJuICRGT1JHRVQKICAgICAgICAgIGlmICggJGNhY2hlZF9saW5lX3R5cGUgPT0gMiB8fCAkY2FjaGVkX2xpbmVfdHlwZSA9PSA0ICk7CiAgICB9CgogICAgIyBPdGhlcndpc2UsIGtlZXAgaXQgYWxpdmUKICAgIHJldHVybiAkS0VFUDsKfSAjIyBlbmQgc3ViIGlzX2dvb2Rfc2lkZV9jb21tZW50X2NvbHVtbgoKc3ViIGFsaWduX3NpZGVfY29tbWVudHMgewoKICAgIG15ICggJHNlbGYsICRybGluZXMsICRyZ3JvdXBzICkgPSBAXzsKCiAgICAjIEFsaWduIGFueSBzaWRlIGNvbW1lbnRzIGluIHRoaXMgYmF0Y2ggb2YgbGluZXMKCiAgICAjIEdpdmVuOgogICAgIyAgJHJsaW5lcyAgLSB0aGUgbGluZXMKICAgICMgICRyZ3JvdXBzIC0gdGhlIHBhcnRpdGlvbiBvZiB0aGUgbGluZXMgaW50byBncm91cHMKICAgICMKICAgICMgV2Ugd2lsbCBiZSB3b3JraW5nIGdyb3VwLWJ5LWdyb3VwIGJlY2F1c2UgYWxsIHNpZGUgY29tbWVudHMKICAgICMgKHJlYWwgb3IgZmFrZSkgaW4gZWFjaCBncm91cCBhcmUgYWxyZWFkeSBhbGlnbmVkLiBTbyB3ZSBqdXN0IGhhdmUKICAgICMgdG8gbWFrZSBhbGlnbm1lbnRzIGJldHdlZW4gZ3JvdXBzIHdoZXJldmVyIHBvc3NpYmxlLgoKICAgICMgQW4gdW51c3VhbCBhc3BlY3QgaXMgdGhhdCB3aXRoaW4gZWFjaCBncm91cCB3ZSBoYXZlIGFsaWduZWQgYm90aCByZWFsCiAgICAjIGFuZCBmYWtlIHNpZGUgY29tbWVudHMuICBUaGlzIGhhcyB0aGUgY29uc2VxdWVuY2UgdGhhdCB0aGUgbGVuZ3RocyBvZgogICAgIyBsb25nIGxpbmVzIHdpdGhvdXQgcmVhbCBzaWRlIGNvbW1lbnRzIGNhbiBjYXVzZSAncHVzaCcgYWxsIHNpZGUgY29tbWVudHMKICAgICMgdG8gdGhlIHJpZ2h0LiAgVGhpcyBzZWVtcyB1bnVzdWFsLCBidXQgdGVzdGluZyB3aXRoIGFuZCB3aXRob3V0IHRoaXMKICAgICMgZmVhdHVyZSBzaG93cyB0aGF0IGl0IGlzIHVzdWFsbHkgYmV0dGVyIHRoaXMgd2F5LiAgT3RoZXJ3aXNlLCBzaWRlCiAgICAjIGNvbW1lbnRzIGNhbiBiZSBoaWRkZW4gYmV0d2VlbiBsb25nIGxpbmVzIHdpdGhvdXQgc2lkZSBjb21tZW50cyBhbmQKICAgICMgdGh1cyBiZSBoYXJkZXIgdG8gcmVhZC4KCiAgICBteSAkZ3JvdXBfbGV2ZWwgICAgICAgID0gJHNlbGYtPltfZ3JvdXBfbGV2ZWxfXTsKICAgIG15ICRjb250aW51aW5nX3NjX2Zsb3cgPSAkc2VsZi0+W19sYXN0X3NpZGVfY29tbWVudF9sZW5ndGhfXSA+IDAKICAgICAgJiYgJGdyb3VwX2xldmVsID09ICRzZWxmLT5bX2xhc3RfbGV2ZWxfd3JpdHRlbl9dOwoKICAgICMgRmluZCBncm91cHMgd2l0aCBzaWRlIGNvbW1lbnRzLCBhbmQgcmVtZW1iZXIgdGhlIGZpcnN0IG5vbmJsYW5rIGNvbW1lbnQKICAgIG15ICRqX3NjX2JlZzsKICAgIG15IEB0b2RvOwogICAgbXkgJG5nID0gLTE7CiAgICBmb3JlYWNoIG15ICRpdGVtICggQHskcmdyb3Vwc30gKSB7CiAgICAgICAgJG5nKys7CiAgICAgICAgbXkgKCAkamJlZywgJGplbmQgKSA9IEB7JGl0ZW19OwogICAgICAgIGZvcmVhY2ggbXkgJGogKCAkamJlZyAuLiAkamVuZCApIHsKICAgICAgICAgICAgbXkgJGxpbmUgPSAkcmxpbmVzLT5bJGpdOwogICAgICAgICAgICBteSAkam1heCA9ICRsaW5lLT57J2ptYXgnfTsKICAgICAgICAgICAgaWYgKCAkbGluZS0+eydyZmllbGRfbGVuZ3Rocyd9LT5bJGptYXhdICkgewoKICAgICAgICAgICAgICAgICMgdGhpcyBncm91cCBoYXMgYSBsaW5lIHdpdGggYSBzaWRlIGNvbW1lbnQKICAgICAgICAgICAgICAgIHB1c2ggQHRvZG8sICRuZzsKICAgICAgICAgICAgICAgIGlmICggIWRlZmluZWQoJGpfc2NfYmVnKSApIHsKICAgICAgICAgICAgICAgICAgICAkal9zY19iZWcgPSAkajsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBkb25lIGlmIG5vIGdyb3VwcyB3aXRoIHNpZGUgY29tbWVudHMKICAgIHJldHVybiB1bmxlc3MgQHRvZG87CgogICAgIyBDb3VudCAkbnVtNSA9IG51bWJlciBvZiBjb21tZW50cyBpbiB0aGUgNSBsaW5lcyBhZnRlciB0aGUgZmlyc3QgY29tbWVudAogICAgIyBUaGlzIGlzIGFuIGltcG9ydGFudCBmYWN0b3IgaW4gYSBkZWNpc2lvbiBmb3JtdWxhCiAgICBteSAkbnVtNSA9IDE7CiAgICBmb3JlYWNoIG15ICRqaiAoICRqX3NjX2JlZyArIDEgLi4gQHskcmxpbmVzfSAtIDEgKSB7CiAgICAgICAgbXkgJGxkaWZmID0gJGpqIC0gJGpfc2NfYmVnOwogICAgICAgIGxhc3QgaWYgKCAkbGRpZmYgPiA1ICk7CiAgICAgICAgbXkgJGxpbmUgICA9ICRybGluZXMtPlskampdOwogICAgICAgIG15ICRqbWF4ICAgPSAkbGluZS0+eydqbWF4J307CiAgICAgICAgbXkgJHNjX2xlbiA9ICRsaW5lLT57J3JmaWVsZF9sZW5ndGhzJ30tPlskam1heF07CiAgICAgICAgbmV4dCBpZiAoICEkc2NfbGVuICk7CiAgICAgICAgJG51bTUrKzsKICAgIH0KCiAgICAjIEZvcmdldCB0aGUgb2xkIHNpZGUgY29tbWVudCBsb2NhdGlvbiBpZiBuZWNlc3NhcnkKICAgIG15ICRsaW5lXzAgPSAkcmxpbmVzLT5bJGpfc2NfYmVnXTsKICAgIG15ICRsbnVtID0KICAgICAgJGpfc2NfYmVnICsgJHNlbGYtPltfZmlsZV93cml0ZXJfb2JqZWN0X10tPmdldF9vdXRwdXRfbGluZV9udW1iZXIoKTsKICAgIG15ICRrZWVwX2l0ID0KICAgICAgJHNlbGYtPmlzX2dvb2Rfc2lkZV9jb21tZW50X2NvbHVtbiggJGxpbmVfMCwgJGxudW0sICRncm91cF9sZXZlbCwgJG51bTUgKTsKICAgIG15ICRsYXN0X3NpZGVfY29tbWVudF9jb2x1bW4gPQogICAgICAka2VlcF9pdCA/ICRzZWxmLT5bX2xhc3Rfc2lkZV9jb21tZW50X2NvbHVtbl9dIDogMDsKCiAgICAjIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBncm91cHMgd2Ugd2lsbCBkbyB0d28gcGFzc2VzCiAgICAjIHNvIHRoYXQgd2UgY2FuIGZpbmQgYSBjb21tb24gYWxpZ25tZW50IGZvciBhbGwgZ3JvdXBzLgogICAgbXkgJE1BWF9QQVNTID0gQHRvZG8gPiAxID8gMiA6IDE7CgogICAgIyBMb29wIG92ZXIgcGFzc2VzCiAgICBteSAkbWF4X2NvbW1lbnRfY29sdW1uID0gJGxhc3Rfc2lkZV9jb21tZW50X2NvbHVtbjsKICAgIGZvcmVhY2ggbXkgJFBBU1MgKCAxIC4uICRNQVhfUEFTUyApIHsKCiAgICAgICAgIyBJZiB0aGVyZSBhcmUgdHdvIHBhc3NlcywgdGhlbiBvbiB0aGUgbGFzdCBwYXNzIG1ha2UgdGhlIG9sZCBjb2x1bW4KICAgICAgICAjIGVxdWFsIHRvIHRoZSBsYXJnZXN0IG9mIHRoZSBncm91cC4gIFRoaXMgd2lsbCByZXN1bHQgaW4gdGhlIGNvbW1lbnRzCiAgICAgICAgIyBiZWluZyBhbGlnbmVkIGlmIHBvc3NpYmxlLgogICAgICAgIGlmICggJFBBU1MgPT0gJE1BWF9QQVNTICkgewogICAgICAgICAgICAkbGFzdF9zaWRlX2NvbW1lbnRfY29sdW1uID0gJG1heF9jb21tZW50X2NvbHVtbjsKICAgICAgICB9CgogICAgICAgICMgTG9vcCBvdmVyIHRoZSBncm91cHMgd2l0aCBzaWRlIGNvbW1lbnRzCiAgICAgICAgbXkgJGNvbHVtbl9saW1pdDsKICAgICAgICBmb3JlYWNoIG15ICRuZ3IgKEB0b2RvKSB7CiAgICAgICAgICAgIG15ICggJGpiZWcsICRqZW5kX3V1ICkgPSBAeyAkcmdyb3Vwcy0+WyRuZ3JdIH07CgogICAgICAgICAgICAjIE5vdGUgdGhhdCBzaW5jZSBhbGwgbGluZXMgaW4gYSBncm91cCBoYXZlIGNvbW1vbiBhbGlnbm1lbnRzLCB3ZQogICAgICAgICAgICAjIGp1c3QgaGF2ZSB0byB3b3JrIG9uIG9uZSBvZiB0aGUgbGluZXMgKHRoZSBmaXJzdCBsaW5lKS4KICAgICAgICAgICAgbXkgJGxpbmUgICAgICAgICAgICAgICAgICAgID0gJHJsaW5lcy0+WyRqYmVnXTsKICAgICAgICAgICAgbXkgJGptYXggICAgICAgICAgICAgICAgICAgID0gJGxpbmUtPnsnam1heCd9OwogICAgICAgICAgICBteSAkaXNfaGFuZ2luZ19zaWRlX2NvbW1lbnQgPSAkbGluZS0+eydpc19oYW5naW5nX3NpZGVfY29tbWVudCd9OwogICAgICAgICAgICBsYXN0CiAgICAgICAgICAgICAgaWYgKCAkUEFTUyA8ICRNQVhfUEFTUyAmJiAkaXNfaGFuZ2luZ19zaWRlX2NvbW1lbnQgKTsKCiAgICAgICAgICAgICMgdGhlIG1heGltdW0gc3BhY2Ugd2l0aG91dCBleGNlZWRpbmcgdGhlIGxpbmUgbGVuZ3RoOgogICAgICAgICAgICBteSAkYXZhaWwgPSAkbGluZS0+Z2V0X2F2YWlsYWJsZV9zcGFjZV9vbl9yaWdodCgpOwoKICAgICAgICAgICAgIyB0cnkgdG8gdXNlIHRoZSBwcmV2aW91cyBjb21tZW50IGNvbHVtbgogICAgICAgICAgICBteSAkc2lkZV9jb21tZW50X2NvbHVtbiA9ICRsaW5lLT5nZXRfY29sdW1uKCAkam1heCAtIDEgKTsKICAgICAgICAgICAgbXkgJG1vdmUgPSAkbGFzdF9zaWRlX2NvbW1lbnRfY29sdW1uIC0gJHNpZGVfY29tbWVudF9jb2x1bW47CgogICAgICAgICAgICAjIFJlbWVtYmVyIHRoZSBtYXhpbXVtIHBvc3NpYmxlIGNvbHVtbiBvZiB0aGUgZmlyc3QgbGluZSB3aXRoCiAgICAgICAgICAgICMgc2lkZSBjb21tZW50CiAgICAgICAgICAgIGlmICggIWRlZmluZWQoJGNvbHVtbl9saW1pdCkgKSB7CiAgICAgICAgICAgICAgICAkY29sdW1uX2xpbWl0ID0gJHNpZGVfY29tbWVudF9jb2x1bW4gKyAkYXZhaWw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG5leHQgaWYgKCAkam1heCA8PSAwICk7CgogICAgICAgICAgICAjIGJ1dCBpZiB0aGlzIGRvZXNuJ3Qgd29yaywgZ2l2ZSB1cCBhbmQgdXNlIHRoZSBtaW5pbXVtIHNwYWNlCiAgICAgICAgICAgIG15ICRtaW5fbW92ZSA9ICRyT3B0c19taW5pbXVtX3NwYWNlX3RvX2NvbW1lbnQgLSAxOwogICAgICAgICAgICBpZiAoICRtb3ZlID4gJGF2YWlsICkgewogICAgICAgICAgICAgICAgJG1vdmUgPSAkbWluX21vdmU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYnV0IHdlIHdhbnQgc29tZSBtaW5pbXVtIHNwYWNlIHRvIHRoZSBjb21tZW50CiAgICAgICAgICAgIGlmICggICAkbW92ZSA+PSAwCiAgICAgICAgICAgICAgICAmJiAkal9zY19iZWcgPT0gMAogICAgICAgICAgICAgICAgJiYgJGNvbnRpbnVpbmdfc2NfZmxvdyApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRtaW5fbW92ZSA9IDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcmVtb3ZlIGNvbnN0cmFpbnRzIG9uIGhhbmdpbmcgc2lkZSBjb21tZW50cwogICAgICAgICAgICBpZiAoJGlzX2hhbmdpbmdfc2lkZV9jb21tZW50KSB7ICRtaW5fbW92ZSA9IDAgfQoKICAgICAgICAgICAgaWYgKCAkbW92ZSA8ICRtaW5fbW92ZSApIHsKICAgICAgICAgICAgICAgICRtb3ZlID0gJG1pbl9tb3ZlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGRvbid0IGV4Y2VlZCB0aGUgYXZhaWxhYmxlIHNwYWNlCiAgICAgICAgICAgIGlmICggJG1vdmUgPiAkYXZhaWwgKSB7ICRtb3ZlID0gJGF2YWlsIH0KCiAgICAgICAgICAgICMgV2UgY2FuIG9ubHkgaW5jcmVhc2Ugc3BhY2UsIG5ldmVyIGRlY3JlYXNlLgogICAgICAgICAgICBpZiAoICRtb3ZlIDwgMCApIHsgJG1vdmUgPSAwIH0KCiAgICAgICAgICAgICMgRGlzY292ZXIgdGhlIGxhcmdlc3QgY29sdW1uIG9uIHRoZSBwcmVsaW1pbmFyeSAgcGFzcwogICAgICAgICAgICBpZiAoICRQQVNTIDwgJE1BWF9QQVNTICkgewogICAgICAgICAgICAgICAgbXkgJGNvbCA9ICRsaW5lLT5nZXRfY29sdW1uKCAkam1heCAtIDEgKSArICRtb3ZlOwoKICAgICAgICAgICAgICAgICMgYnV0IGlnbm9yZSBjb2x1bW5zIHRvbyBsYXJnZSBmb3IgdGhlIHN0YXJ0aW5nIGxpbmUKICAgICAgICAgICAgICAgIGlmICggJGNvbCA+ICRtYXhfY29tbWVudF9jb2x1bW4gJiYgJGNvbCA8ICRjb2x1bW5fbGltaXQgKSB7CiAgICAgICAgICAgICAgICAgICAgJG1heF9jb21tZW50X2NvbHVtbiA9ICRjb2w7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgTWFrZSB0aGUgY2hhbmdlcyBvbiB0aGUgZmluYWwgcGFzcwogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRsaW5lLT5pbmNyZWFzZV9maWVsZF93aWR0aCggJGptYXggLSAxLCAkbW92ZSApOwoKICAgICAgICAgICAgICAgICMgcmVtZW1iZXIgdGhpcyBjb2x1bW4gZm9yIHRoZSBuZXh0IGdyb3VwCiAgICAgICAgICAgICAgICAkbGFzdF9zaWRlX2NvbW1lbnRfY29sdW1uID0gJGxpbmUtPmdldF9jb2x1bW4oICRqbWF4IC0gMSApOwogICAgICAgICAgICB9CiAgICAgICAgfSAjIyBlbmQgbG9vcCBvdmVyIGdyb3VwcwogICAgfSAjIyBlbmQgbG9vcCBvdmVyIHBhc3NlcwoKICAgICMgRmluZCB0aGUgbGFzdCBzaWRlIGNvbW1lbnQKICAgIG15ICRqX3NjX2xhc3Q7CiAgICBteSAkbmdfbGFzdCA9ICR0b2RvWy0xXTsKICAgIG15ICggJGpiZWcsICRqZW5kICkgPSBAeyAkcmdyb3Vwcy0+WyRuZ19sYXN0XSB9OwogICAgZm9yZWFjaCBteSAkamogKCByZXZlcnNlKCAkamJlZyAuLiAkamVuZCApICkgewogICAgICAgIG15ICRsaW5lID0gJHJsaW5lcy0+WyRqal07CiAgICAgICAgbXkgJGptYXggPSAkbGluZS0+eydqbWF4J307CiAgICAgICAgaWYgKCAkbGluZS0+eydyZmllbGRfbGVuZ3Rocyd9LT5bJGptYXhdICkgewogICAgICAgICAgICAkal9zY19sYXN0ID0gJGpqOwogICAgICAgICAgICBsYXN0OwogICAgICAgIH0KICAgIH0KCiAgICAjIFNhdmUgZmluYWwgc2lkZSBjb21tZW50IGluZm8gZm9yIHBvc3NpYmxlIHVzZSBieSB0aGUgbmV4dCBiYXRjaAogICAgaWYgKCBkZWZpbmVkKCRqX3NjX2xhc3QpICkgewogICAgICAgIG15ICRsaW5lX251bWJlciA9CiAgICAgICAgICAkc2VsZi0+W19maWxlX3dyaXRlcl9vYmplY3RfXS0+Z2V0X291dHB1dF9saW5lX251bWJlcigpICsgJGpfc2NfbGFzdDsKICAgICAgICAkc2VsZi0+W19sYXN0X3NpZGVfY29tbWVudF9jb2x1bW5fXSAgICAgID0gJGxhc3Rfc2lkZV9jb21tZW50X2NvbHVtbjsKICAgICAgICAkc2VsZi0+W19sYXN0X3NpZGVfY29tbWVudF9saW5lX251bWJlcl9dID0gJGxpbmVfbnVtYmVyOwogICAgICAgICRzZWxmLT5bX2xhc3Rfc2lkZV9jb21tZW50X2xldmVsX10gICAgICAgPSAkZ3JvdXBfbGV2ZWw7CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBhbGlnbl9zaWRlX2NvbW1lbnRzCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQ09ERSBTRUNUSU9OIDY6IFBhZCBTaWduZWQgTnVtYmVyIENvbHVtbnMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKdXNlIGNvbnN0YW50IERFQlVHX1ZTTiA9PiAwOwoKbXkgJWlzX2xlYWRpbmdfc2lnbl9wYXR0ZXJuOwoKQkVHSU4gewoKICAgICMgUEFUVEVSTlM6IEEgcGF0dGVybiBpcyBiYXNpY2FsbHkgdGhlIGNvbmNhdGVuYXRpb24gb2YgYWxsIHRva2VuIHR5cGVzIGluCiAgICAjIHRoZSBmaWVsZCwgd2l0aCBrZXl3b3JkcyBjb252ZXJ0ZWQgdG8gdGhlaXIgYWN0dWFsIHRleHQuICBUaGUgZm9ybWF0dGVyCiAgICAjIGhhcyBjaGFuZ2VkIHRoaW5ncyBsaWtlICdwcmludCcgdG8gJ3ByaU50JyBzbyB0aGF0IGFsbCAnbidzIGFyZSBudW1iZXJzLgogICAgIyBUaGUgZm9sbG93aW5nIHBhdHRlcm5zICduJyBjYW4gbWF0Y2ggYSBzaWduZWQgbnVtYmVyIG9mIGludGVyZXN0LgogICAgIyBUaHVzICduJz1hIHNpZ25lZCBvciB1bnNpZ25lZCBudW1iZXIsICdiJz1hIHNwYWNlLCAnfSc9b25lIG9mICkgXSB9CiAgICBteSBAcSA9ICggJ24sJywgJ24sYicsICduYicsICduYn0nLCAnbmJ9LCcsICdufSwnLCAnbn07JyApOwoKICAgIEBpc19sZWFkaW5nX3NpZ25fcGF0dGVybntAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKfQoKc3ViIG1pbl9tYXhfbWVkaWFuIHsKICAgIG15ICgkcnZhbHVlcykgPSBAXzsKCiAgICAjIEdpdmVuOiAgJHJ2YWx1ZXMgPSByZWYgdG8gYW4gYXJyYXkgb2YgbnVtYmVycwogICAgIyBSZXR1cm46IHRoZSBtaW4sIG1heCwgYW5kIG1lZGlhbgogICAgbXkgJG51bSA9IEB7JHJ2YWx1ZXN9OwogICAgcmV0dXJuIHVubGVzcyAoJG51bSk7CgogICAgbXkgQHNvcnRlZCA9IHNvcnQgeyAkYSA8PT4gJGIgfSBAeyRydmFsdWVzfTsKCiAgICBteSAkbWluICA9ICRzb3J0ZWRbMF07CiAgICBteSAkbWF4ICA9ICRzb3J0ZWRbLTFdOwogICAgbXkgJGltaWQgPSBpbnQoICRudW0gLyAyICk7CiAgICBteSAkbWVkaWFuID0KICAgICAgICBAc29ydGVkICUgMgogICAgICA/ICRzb3J0ZWRbJGltaWRdCiAgICAgIDogKCAkc29ydGVkWyAkaW1pZCAtIDEgXSArICRzb3J0ZWRbJGltaWRdICkgLyAyOwoKICAgIHJldHVybiAoICRtaW4sICRtYXgsICRtZWRpYW4gKTsKfSAjIyBlbmQgc3ViIG1pbl9tYXhfbWVkaWFuCgpzdWIgZW5kX3NpZ25lZF9udW1iZXJfY29sdW1uIHsKICAgIG15ICggJHJncm91cF9saW5lcywgJHJjb2xfaGFzaCwgJGl4X2xhc3QgKSA9IEBfOwoKICAgICMgRmluaXNoIGZvcm1hdHRpbmcgYSBjb2x1bW4gb2YgdW5zaWduZWQgbnVtYmVycwogICAgIyBHaXZlbjoKICAgICMgICAkcmdyb3VwX2xpbmVzIC0gdGhlIGN1cnJlbnQgdmVydGljYWwgYWxpZ25tZW50IGdyb3VwIG9mIGxpbmVzCiAgICAjICAgJHJjb2xfaGFzaCAgICAtIGEgaGFzaCBvZiBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHZlcnRpY2FsIGNvbHVtbgogICAgIyAgICRpeF9sYXN0ICAgICAgLSBpbmRleCBvZiB0aGUgbGFzdCBsaW5lIG9mIHRoaXMgdmVydGljYWwgY29sdW1uCiAgICAjIFRhc2s6CiAgICAjICAgSWYgdGhpcyBpcyBhIG1peHR1cmUgb2Ygc2lnbmVkIGFuZCB1bnNpZ25lZCBudW1iZXJzLCB0aGVuIGFkZCBhCiAgICAjICAgc2luZ2xlIHNwYWNlIGJlZm9yZSB0aGUgdW5zaWduZWQgbnVtYmVycyB0byBpbXByb3ZlIGFwcGVhcmFuY2UuCiAgICByZXR1cm4gdW5sZXNzICgkcmNvbF9oYXNoKTsKICAgIG15ICRqY29sICAgICAgICAgID0gJHJjb2xfaGFzaC0+e2pjb2x9OwogICAgbXkgJHVuc2lnbmVkICAgICAgPSAkcmNvbF9oYXNoLT57dW5zaWduZWRfY291bnR9OwogICAgbXkgJHNpZ25lZCAgICAgICAgPSAkcmNvbF9oYXNoLT57c2lnbmVkX2NvdW50fTsKICAgIG15ICRyc2lnbmVkX2xpbmVzID0gJHJjb2xfaGFzaC0+e3JzaWduZWRfbGluZXN9OwoKICAgIGlmICggISRzaWduZWQgJiYgJHVuc2lnbmVkICkgewogICAgICAgIERFVkVMX01PREUKICAgICAgICAgICYmIEZhdWx0KCJhdm9pZCBjYWxsaW5nIHdpdGhvdXQgbWl4ZWQgc2lnbmVkIGFuZCB1bnNpZ25lZFxuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICRwb3Nfc3RhcnRfbnVtYmVyID0gJHJjb2xfaGFzaC0+e3Bvc19zdGFydF9udW1iZXJ9OwogICAgbXkgJGNoYXJfZW5kX3BhcnQxICAgPSAkcmNvbF9oYXNoLT57Y2hhcl9lbmRfcGFydDF9OwogICAgbXkgJGl4X2ZpcnN0ICAgICAgICAgPSAkcmNvbF9oYXNoLT57aXhfZmlyc3R9OwogICAgbXkgJG5saW5lcyAgICAgICAgICAgPSAkaXhfbGFzdCAtICRpeF9maXJzdCArIDE7CgogICAgIyBjaGVjayBmb3Igc2tpcHBlZCBsaW5lcywgc2hvdWxkbid0IGhhcHBlbgogICAgaWYgKCAkc2lnbmVkICsgJHVuc2lnbmVkICE9ICRubGluZXMgKSB7CiAgICAgICAgbXkgJGxpbmUgICAgPSAkcmdyb3VwX2xpbmVzLT5bJGl4X2xhc3RdOwogICAgICAgIG15ICRyZmllbGRzID0gJGxpbmUtPnsncmZpZWxkcyd9OwogICAgICAgIG15ICR0ZXh0ICAgID0gam9pbiBFTVBUWV9TVFJJTkcsIEB7JHJmaWVsZHN9OwogICAgICAgIERFVkVMX01PREUgJiYgRmF1bHQoPDxFT00pOwpXZSBzZWVtIHRvIGhhdmUgbWlzY291bnRlZCBsaW5lcywgcGxlYXNlIGNoZWNrOgpzaWduZWQ9JHNpZ25lZApqPSRqY29sCnVuc2lnbmVkPSR1bnNpZ25lZAppeF9maXJzdD0kaXhfZmlyc3QKaXhfbGFzdD0kaXhfbGFzdApubGluZXM9JG5saW5lcwp0ZXh0PSR0ZXh0CkVPTQogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgRm9ybSBncm91cHMgb2YgdW5zaWduZWQgbnVtYmVycyBmcm9tIHRoZSBsaXN0IG9mIHNpZ25lZCBudW1iZXJzLgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBteSBAdW5zaWduZWRfc3ViZ3JvdXBzOwogICAgbXkgJGl4X2xhc3RfbmVnYXRpdmUgPSAkaXhfZmlyc3QgLSAxOwogICAgbXkgJWlzX3NpZ25lZDsKICAgIGZvcmVhY2ggbXkgJGl4ICggQHskcnNpZ25lZF9saW5lc30gKSB7CiAgICAgICAgJGlzX3NpZ25lZHskaXh9ID0gMTsKICAgICAgICBteSAkTnUgPSAkaXggLSAkaXhfbGFzdF9uZWdhdGl2ZSAtIDE7CiAgICAgICAgaWYgKCAkTnUgPiAwICYmICROdSA8PSAkck9wdHNfdmFsaWduX3NpZ25lZF9udW1iZXJzX2xpbWl0ICkgewogICAgICAgICAgICBwdXNoIEB1bnNpZ25lZF9zdWJncm91cHMsIFsgJGl4X2xhc3RfbmVnYXRpdmUgKyAxLCAkaXggLSAxIF07CiAgICAgICAgfQogICAgICAgICRpeF9sYXN0X25lZ2F0aXZlID0gJGl4OwogICAgfQoKICAgICMgRXhjbHVkZSBncm91cHMgd2l0aCBtb3JlIHRoYW4gYWJvdXQgMjAgY29uc2VjdXRpdmUgbnVtYmVycy4gIExpdHRsZQogICAgIyB2aXN1YWwgaW1wcm92ZW1lbnQgaXMgZ2FpbmVkIGJ5IHBhZGRpbmcgbW9yZSB0aGFuIHRoaXMsIGFuZCB0aGlzIGF2b2lkcwogICAgIyBsYXJnZSBudW1iZXJzIG9mIGRpZmZlcmVuY2VzIGluIGEgZmlsZSB3aGVuIGEgc2luZ2xlIGxpbmUgaXMgY2hhbmdlZC4KICAgIG15ICROdSA9ICRpeF9sYXN0IC0gJGl4X2xhc3RfbmVnYXRpdmU7CiAgICBpZiAoICROdSA+IDAgJiYgJE51IDw9ICRyT3B0c192YWxpZ25fc2lnbmVkX251bWJlcnNfbGltaXQgKSB7CiAgICAgICAgcHVzaCBAdW5zaWduZWRfc3ViZ3JvdXBzLCBbICRpeF9sYXN0X25lZ2F0aXZlICsgMSwgJGl4X2xhc3QgXTsKICAgIH0KCiAgICBpZiAoICFAdW5zaWduZWRfc3ViZ3JvdXBzICkgeyByZXR1cm4gfSAgICAjIHNob3VsZG4ndCBoYXBwZW4KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgRmluZCBudW1iZXIgbGVuZ3RocyBmb3IgaXJyZWd1bGFyaXR5IGNoZWNrcwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFBhZGRpbmcgc2lnbmVkIG51bWJlcnMgbG9va3MgYmVzdCB3aGVuIHRoZSBudW1iZXJzLCBleGNsdWRpbmcgc2lnbnMsCiAgICAjIGFsbCBoYXZlIGFib3V0IHRoZSBzYW1lIGxlbmd0aC4gV2hlbiB0aGUgbGVuZ3RocyBhcmUgaXJyZWd1bGFyLCB3aXRoCiAgICAjIG1vc3RseSBsb25nZXIgdW5zaWduZWQgbnVtYmVycywgaXQgZG9lc24ndCBsb29rIGdvb2QgdG8gZG8gdGhpcy4gU28KICAgICMgd2UgbmVlZCB0byBmaWx0ZXIgb3V0IHRoZXNlIGJhZC1sb29raW5nIGNhc2VzLgoKICAgICMgVGhlICdmaWVsZF9sZW5ndGhzJyBhcmUgdW5yZWxpYWJsZSBiZWNhdXNlIHRoZXkgbWF5IGluY2x1ZGUgc29tZQogICAgIyBhcmJpdHJhcnkgdHJhaWxpbmcgdGV4dDsgc2VlICdzdWJzdHIudCcgU28gd2UgbXVzdCBsb29rIGZvciB0aGUgZW5kIG9mCiAgICAjIHRoZSBudW1iZXIgYXQgYSBzcGFjZSwgY29tbWEsIG9yIGNsb3NpbmcgY29udGFpbmVyIHRva2VuLiBOb3RlIHRoYXQgdGhlc2UKICAgICMgbGVuZ3RocyBpbmNsdWRlIHRoZSBsZW5ndGggb2YgYW55IHNpZ25zLgogICAgbXkgQGxlbl91bnNpZ25lZDsKICAgIG15IEBsZW5fc2lnbmVkOwogICAgbXkgQGxlbmd0aHM7CiAgICBmb3JlYWNoIG15ICRpeCAoICRpeF9maXJzdCAuLiAkaXhfbGFzdCApIHsKICAgICAgICBteSAkbGluZSAgID0gJHJncm91cF9saW5lcy0+WyRpeF07CiAgICAgICAgbXkgJHJmaWVsZCA9ICRsaW5lLT57J3JmaWVsZHMnfTsKICAgICAgICBteSAkc3RyICAgID0gc3Vic3RyKCAkcmZpZWxkLT5bJGpjb2xdLCAkcG9zX3N0YXJ0X251bWJlciApOwogICAgICAgIGlmICggJHN0ciA9fiAvXihbXlxzXCxcKVxdXH1dKikvICkgeyAkc3RyID0gJDEgfQogICAgICAgIG15ICRsZW4gPSBsZW5ndGgoJHN0cik7CiAgICAgICAgaWYgICAoICRpc19zaWduZWR7JGl4fSApIHsgcHVzaCBAbGVuX3NpZ25lZCwgICAkbGVuIH0KICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgeyBwdXNoIEBsZW5fdW5zaWduZWQsICRsZW4gfQogICAgICAgIHB1c2ggQGxlbmd0aHMsIFsgJGxlbiwgJGl4IF07CiAgICB9CgogICAgbXkgKCAkbWluX3Vuc2lnbmVkX2xlbmd0aCwgJG1heF91bnNpZ25lZF9sZW5ndGgsICRtZWRpYW5fdW5zaWduZWRfbGVuZ3RoICkKICAgICAgPSBtaW5fbWF4X21lZGlhbiggXEBsZW5fdW5zaWduZWQgKTsKICAgIG15ICggJG1pbl9zaWduZWRfbGVuZ3RoX3V1LCAkbWF4X3NpZ25lZF9sZW5ndGgsICRtZWRpYW5fc2lnbmVkX2xlbmd0aCApID0KICAgICAgbWluX21heF9tZWRpYW4oIFxAbGVuX3NpZ25lZCApOwoKICAgICMgU2tpcCBwYWRkaW5nIGlmIG5vIHNpZ25lZCBudW1iZXJzIGV4Y2VlZCB1bnNpZ25lZCBudW1iZXJzIGluIGxlbmd0aAogICAgaWYgKCAkbWF4X3NpZ25lZF9sZW5ndGggPD0gJG1pbl91bnNpZ25lZF9sZW5ndGggKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgSWYgbWF4IHNpZ25lZCBsZW5ndGggaXMgZ3JlYXRlc3QgLSBhbGwgdW5zaWduZWQgdmFsdWVzIGNhbiBiZSBwYWRkZWQKICAgIGVsc2lmICggJG1heF9zaWduZWRfbGVuZ3RoID4gJG1heF91bnNpZ25lZF9sZW5ndGggKSB7CgogICAgICAgICMgRXhhbXBsZToKICAgICAgICAjICAgICV3aW5kX2RpciA9ICgKICAgICAgICAjICAgICAgICAnbicgID0+IFsgIDEsICAwIF0sCiAgICAgICAgIyAgICAgICAgJ25lJyA9PiBbICAxLCAgMSBdLAogICAgICAgICMgICAgICAgICdlJyAgPT4gWyAgMCwgIDEgXSwKICAgICAgICAjICAgICAgICAnc2UnID0+IFsgLTEsICAxIF0sCiAgICAgICAgIyAgICAgICAgJ3MnICA9PiBbIC0xLCAgMCBdLAogICAgICAgICMgICAgICAgICdzdycgPT4gWyAtMSwgLTEgXSwKICAgICAgICAjICAgICAgICAndycgID0+IFsgIDAsIC0xIF0sCiAgICAgICAgIyAgICAgICAgJ253JyA9PiBbICAxLCAtMSBdLAogICAgICAgICMgICAgICAgICcnICAgPT4gWyAgMCwgIDAgXSwKICAgICAgICAjICAgICk7CgogICAgICAgICMgVGhpcyBpcyB0aGUgaWRlYWwgY2FzZSAtIG9rIHRvIGNvbnRpbnVlIGFuZCBwYWQKICAgIH0KCiAgICAjIGludGVybWVkaWF0ZSBjYXNlOiBzb21lIHNpZ25lZCBudW1iZXJzIGNhbm5vdCBiZSBwYWRkZWQgLi4uCiAgICBlbHNlIHsKCiAgICAgICAgIyBXZSBoYXZlIHRvIHRha2UgYSBjbG9zZXIgbG9vay4KICAgICAgICAjIEhlcmUgaXMgYW4gZXhhbXBsZSB3aGljaCBsb29rcyBiYWQgaWYgd2UgZG8gcGFkZGluZyBsaWtlIHRoaXM6CiAgICAgICAgIyAgICBteSAlaGFzaCA9ICgKICAgICAgICAjICAgICAgICBYMCA9PiAtMTI4NjcuMDk4MjQxMTYzLAogICAgICAgICMgICAgICAgIFgxID0+ICAyLjMxNjk0MzM4NjcxNjg0LCAgICAgICAjIHVuc2lnbmVkIHcvICAgZXhjZXNzPjAKICAgICAgICAjICAgICAgICBYMiA9PiAwLjA1OTc3MjY3MTQ4NjA0MTksICAgICAgIyBtYXggbGVuZ3RoID0+IGV4Y2Vzcz0wCiAgICAgICAgIyAgICAgICAgWTAgPT4gIDMwMDQzLjEzMzU1MDMxNTUsICAgICAgICMgdW5zaWduZWQgdy8gICBleGNlc3M+MAogICAgICAgICMgICAgICAgIFkxID0+IDAuMDUyNTc4NDk4MTU5NzA0NCwgICAgICAjIG1heCBsZW5ndGggPT4gZXhjZXNzPTAKICAgICAgICAjICAgICAgICBZMiA9PiAtMi4zMjQ0NzEzMTYwMDc4MywKICAgICAgICAjICAgICk7CgogICAgICAgICMgVG8gZGVjaWRlIHdoYXQgbG9va3Mgb2theSwgd2UgY291bnQgJ2dvb2QnIGFuZCAnYmFkJyBsaW5lIGludGVyZmFjZXM6CiAgICAgICAgIyAgICBYMCAtIFgxID0gZ29vZCAoWDAgaXMgc2lnbmVkIGFuZCBYMSBjYW4gbW92ZSkKICAgICAgICAjICAgIFgxIC0gWDIgPSBiYWQgICh4MSBjYW4gbW92ZSBidXQgeDIgY2Fubm90KQogICAgICAgICMgICAgWDIgLSBZMCA9IGJhZCAgKHgyIGNhbm5vdCBtb3ZlIGJ1dCBZMCBjYW4gbW92ZSkKICAgICAgICAjICAgIFkwIC0gWTEgPSBiYWQgIChZMCBjYW4gbW92ZSBidXQgWTEgY2Fubm90IG1vdmUpCiAgICAgICAgIyAgICBZMSAtIFkyID0gYmFkICAoWTEgY2Fubm90IG1vdmUgYW5kIFkyIGlzIHNpZ25lZCkKICAgICAgICAjIFJlc3VsdDogNCBiYWQgaW50ZXJmYWNlcyBhbmQgMSBnb29kID0+IHNvIHdlIHdpbGwgc2tpcCB0aGlzCiAgICAgICAgbXkgJGdvb2RfY291bnQgPSAwOwogICAgICAgIG15ICRiYWRfY291bnQgID0gMDsKICAgICAgICBmb3JlYWNoIG15ICRpdGVtIChAbGVuZ3RocykgewogICAgICAgICAgICAkaXRlbS0+WzBdID0gJG1heF91bnNpZ25lZF9sZW5ndGggLSAkaXRlbS0+WzBdOwogICAgICAgIH0KICAgICAgICBteSAkaXRlbTAgPSBzaGlmdCBAbGVuZ3RoczsKICAgICAgICBteSAoICRleGNlc3MsICRpeCApID0gQHskaXRlbTB9OwogICAgICAgIG15ICRpbW1vYmlsZV9jb3VudCA9ICRleGNlc3MgPyAwIDogMTsKICAgICAgICBmb3JlYWNoIG15ICRpdGVtIChAbGVuZ3RocykgewogICAgICAgICAgICBteSAkZXhjZXNzX20gPSAkZXhjZXNzOwogICAgICAgICAgICBteSAkaXhfbSAgICAgPSAkaXg7CiAgICAgICAgICAgICggJGV4Y2VzcywgJGl4ICkgPSBAeyRpdGVtfTsKICAgICAgICAgICAgaWYgKCAhJGV4Y2VzcyApIHsgJGltbW9iaWxlX2NvdW50KysgfQoKICAgICAgICAgICAgaWYgKCAkaXNfc2lnbmVkeyRpeF9tfSApIHsKCiAgICAgICAgICAgICAgICAjIHNpZ25lZC11bnNpZ25lZCBpbnRlcmZhY2UKICAgICAgICAgICAgICAgIGlmICggISRpc19zaWduZWR7JGl4fSApIHsKICAgICAgICAgICAgICAgICAgICBpZiAgICgkZXhjZXNzKSB7ICRnb29kX2NvdW50KysgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgIHsgJGJhZF9jb3VudCsrIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHNpZ25lZC1zaWduZWQ6IG9rLCBub3QgZ29vZCBvciBiYWQKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIHVuc2lnbmVkLXNpZ25lZCBpbnRlcmZhY2UKICAgICAgICAgICAgICAgIGlmICggJGlzX3NpZ25lZHskaXh9ICkgewogICAgICAgICAgICAgICAgICAgIGlmICAgKCRleGNlc3NfbSkgeyAkZ29vZF9jb3VudCsrIH0KICAgICAgICAgICAgICAgICAgICBlbHNlICAgICAgICAgICAgIHsgJGJhZF9jb3VudCsrIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHVuc2lnbmVkLXVuc2lnbmVkOiBiYWQgaWYgZGlmZmVyZW50CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICRleGNlc3NfbSB4b3IgJGV4Y2VzcyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGJhZF9jb3VudCsrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBGaWx0ZXIgMTogc2tpcCBpZiBtb3JlIGludGVyZmFjZXMgYXJlICdiYWQnIHRoYW4gJ2dvb2QnCiAgICAgICAgaWYgKCAkYmFkX2NvdW50ID4gJGdvb2RfY291bnQgKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgRmlsdGVyIDI6IHNraXAgaW4gYSB0YWJsZSB3aXRoIG11bHRpcGxlICdiYWQnIGludGVyZmFjZXMgYW5kIHdoZXJlCiAgICAgICAgIyAnbW9zdCcgb2YgdGhlIHVuc2lnbmVkIGxlbmd0aHMgYXJlIHNob3J0ZXIgdGhhbiB0aGUgc2lnbmVkIGxlbmd0aHMuCiAgICAgICAgIyBVc2luZyB0aGUgbWVkaWFuIHZhbHVlIG1ha2VzIHRoaXMgaW5zZW5zaXRpdmUgdG8gc21hbGwgY2hhbmdlcy4KICAgICAgICBpZiAoICAgJG1lZGlhbl91bnNpZ25lZF9sZW5ndGggPj0gJG1lZGlhbl9zaWduZWRfbGVuZ3RoCiAgICAgICAgICAgICYmICRiYWRfY291bnQgPiAxCiAgICAgICAgICAgICYmICRpbW1vYmlsZV9jb3VudCA+IDEgKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBBbnl0aGluZyB0aGF0IGdldHMgcGFzdCB0aGVzZSBmaWx0ZXJzIHNob3VsZCBsb29rIG9rIGlmIHBhZGRlZAogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgQ29tcHV0ZSBhY3R1YWwgYXZhaWxhYmxlIHNwYWNlIGZvciBlYWNoIGxpbmUKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIG15ICVleGNlc3Nfc3BhY2U7CiAgICBteSAkbW92YWJsZV9jb3VudCA9IDA7CiAgICBmb3JlYWNoIG15ICRpdGVtIChAdW5zaWduZWRfc3ViZ3JvdXBzKSB7CiAgICAgICAgbXkgKCAkaXhfbWluLCAkaXhfbWF4ICkgPSBAeyRpdGVtfTsKICAgICAgICBmb3JlYWNoIG15ICRpeCAoICRpeF9taW4gLi4gJGl4X21heCApIHsKICAgICAgICAgICAgbXkgJGxpbmUgICAgICAgICAgICAgICAgPSAkcmdyb3VwX2xpbmVzLT5bJGl4XTsKICAgICAgICAgICAgbXkgJGxlYWRpbmdfc3BhY2VfY291bnQgPSAkbGluZS0+eydsZWFkaW5nX3NwYWNlX2NvdW50J307CiAgICAgICAgICAgIG15ICRqbWF4ICAgICAgICAgICAgICAgID0gJGxpbmUtPnsnam1heCd9OwogICAgICAgICAgICBteSAkcmZpZWxkX2xlbmd0aHMgICAgICA9ICRsaW5lLT57J3JmaWVsZF9sZW5ndGhzJ307CiAgICAgICAgICAgIGlmICggJGpjb2wgPj0gJGptYXggKSB7CgogICAgICAgICAgICAgICAgIyBzaG91bGRuJ3QgaGFwcGVuCiAgICAgICAgICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KCJqY29sPSRqY29sID49IGptYXg9JGptYXhcbiIpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG15IEBhbGlnbm1lbnRzID0gQHsgJGxpbmUtPnsncmFsaWdubWVudHMnfSB9OwogICAgICAgICAgICBteSAkY29sICAgICAgICA9ICRhbGlnbm1lbnRzWyRqY29sXS0+eydjb2x1bW4nfTsKICAgICAgICAgICAgbXkgJGNvbF9zdGFydCA9CiAgICAgICAgICAgICAgICAkamNvbCA9PSAwCiAgICAgICAgICAgICAgPyAkbGVhZGluZ19zcGFjZV9jb3VudAogICAgICAgICAgICAgIDogJGFsaWdubWVudHNbICRqY29sIC0gMSBdLT57J2NvbHVtbid9OwogICAgICAgICAgICBteSAkYXZhaWwgICAgICAgID0gJGNvbCAtICRjb2xfc3RhcnQ7CiAgICAgICAgICAgIG15ICRmaWVsZF9sZW5ndGggPSAkcmZpZWxkX2xlbmd0aHMtPlskamNvbF07CiAgICAgICAgICAgIG15ICRleGNlc3MgICAgICAgPSAkYXZhaWwgLSAkZmllbGRfbGVuZ3RoOwogICAgICAgICAgICAkZXhjZXNzX3NwYWNleyRpeH0gPSAkZXhjZXNzOwogICAgICAgICAgICBpZiAoICRleGNlc3MgPiAwICkgeyAkbW92YWJsZV9jb3VudCsrIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHVubGVzcyAoJG1vdmFibGVfY291bnQpOwoKICAgICMgQ291bnQgdGhlIG51bWJlciBvZiBzaWduZWQtdW5zaWduZWQgaW50ZXJmYWNlcyB0aGF0IHdvdWxkIGNoYW5nZQogICAgIyBpZiB3ZSBkbyB0aGUgcGFkZGluZwogICAgbXkgJE5jID0gMDsKICAgIGZvcmVhY2ggbXkgJGl0ZW0gKEB1bnNpZ25lZF9zdWJncm91cHMpIHsKICAgICAgICBteSAoICRpeF9taW4sICRpeF9tYXggKSA9IEB7JGl0ZW19OwogICAgICAgICROYysrIGlmICggJGV4Y2Vzc19zcGFjZXskaXhfbWlufSA+IDAgJiYgJGl4X21pbiAhPSAkaXhfZmlyc3QgKTsKICAgICAgICAkTmMrKyBpZiAoICRleGNlc3Nfc3BhY2V7JGl4X21heH0gPiAwICYmICRpeF9tYXggIT0gJGl4X2xhc3QgKTsKICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgU3BhcnNpdHkgY2hlY2s6CiAgICAjIEdpdmUgdXAgaWYgdGhlIG51bWJlciBvZiBpbnRlcmZhY2UgY2hhbmdlcyB3aWxsIGJlIGJlbG93IHRoZSBjdXRvZmYKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgaWYgKCAkdW5zaWduZWQgPiAkTmMgKiAkck9wdHNfdmFsaWduX3NpZ25lZF9udW1iZXJzX2xpbWl0ICkgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIEluc2VydCBhbiBleHRyYSBzcGFjZSBiZWZvcmUgdGhlIHVuc2lnbmVkIG51bWJlcnMgaWYgc3BhY2UgaXMgYXZhaWxhYmxlCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmb3JlYWNoIG15ICRpdGVtIChAdW5zaWduZWRfc3ViZ3JvdXBzKSB7CiAgICAgICAgbXkgKCAkaXhfbWluLCAkaXhfbWF4ICkgPSBAeyRpdGVtfTsKCiAgICAgICAgZm9yZWFjaCBteSAkaXggKCAkaXhfbWluIC4uICRpeF9tYXggKSB7CiAgICAgICAgICAgIG5leHQgaWYgKCAkZXhjZXNzX3NwYWNleyRpeH0gPD0gMCApOwogICAgICAgICAgICBteSAkbGluZSAgICAgICAgICAgPSAkcmdyb3VwX2xpbmVzLT5bJGl4XTsKICAgICAgICAgICAgbXkgJHJmaWVsZHMgICAgICAgID0gJGxpbmUtPnsncmZpZWxkcyd9OwogICAgICAgICAgICBteSAkcmZpZWxkX2xlbmd0aHMgPSAkbGluZS0+eydyZmllbGRfbGVuZ3Rocyd9OwogICAgICAgICAgICBwYWRfc2lnbmVkX2ZpZWxkKAogICAgICAgICAgICAgICAgXCRyZmllbGRzLT5bJGpjb2xdLCBcJHJmaWVsZF9sZW5ndGhzLT5bJGpjb2xdLAogICAgICAgICAgICAgICAgJHBvc19zdGFydF9udW1iZXIsICAkY2hhcl9lbmRfcGFydDEKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBlbmRfc2lnbmVkX251bWJlcl9jb2x1bW4KCnN1YiBwYWRfc2lnbmVkX2ZpZWxkIHsKICAgIG15ICggJHJzdHIsICRyc3RyX2xlbiwgJHBvc19zdGFydF9udW1iZXIsICRjaGFyX2VuZF9wYXJ0MSApID0gQF87CgogICAgIyBJbnNlcnQgYW4gZXh0cmEgc3BhY2UgYmVmb3JlIGEgbnVtYmVyIHRvIGhpZ2hsaWdodCBhbGdlYnJhaWMgc2lnbnMKICAgICMgaW4gYSBjb2x1bW4gb2YgbnVtYmVycy4KICAgICMgR2l2ZW46CiAgICAjICAkcnN0ciAgICAgPSByZWYgdG8gc3RyaW5nCiAgICAjICAkcnN0cl9sZW4gPSByZWYgdG8gZGlzcGxheSB3aWR0aCBvZiBzdHJpbmcgKGNvdWxkIGluY2x1ZGUgd2lkZSBjaGFycykKICAgICMgICRwb3Nfc3RhcnRfbnVtYmVyID0gc3RyaW5nIHBvc2l0aW9uIG9mIHRoZSBsZWFkaW5nIGRpZ2l0CiAgICAjICAkY2hhcl9lbmRfcGFydDEgPSBjaGFyYWN0ZXIgYXQgJHBvc19zdGFydF9udW1iZXIgLSAxCiAgICAjIFRhc2s6IHVwZGF0ZSAkcnN0ciBhbmQgJHJzdHJfbGVuIHdpdGggYSBzaW5nbGUgc3BhY2UKCiAgICAjIEZpcnN0IHBhcnRpdGlvbiB0aGUgc3RyaW5nIGludG8gJHBhcnQxIGFuZCAkcGFydDIsIHNvIHRoYXQgdGhlCiAgICAjIG51bWJlciBzdGFydHMgYXQgdGhlIGJlZ2lubmluZyBvZiBwYXJ0Mi4KICAgIG15ICRwYXJ0MSA9IEVNUFRZX1NUUklORzsKICAgIG15ICRwYXJ0MiA9ICR7JHJzdHJ9OwogICAgbXkgJHN0ciAgID0gJHskcnN0cn07CiAgICBpZiAoICRwb3Nfc3RhcnRfbnVtYmVyID4gMCApIHsKICAgICAgICBteSAkbGVuID0gbGVuZ3RoKCRzdHIpOwogICAgICAgIGlmICggJHBvc19zdGFydF9udW1iZXIgPj0gJGxlbiApIHsKICAgICAgICAgICAgREVWRUxfTU9ERSAmJiBGYXVsdCg8PEVPTSk7CkV4cGVjdGlvbiBwb3NpdGlvbiAnJHBvc19zdGFydF9udW1iZXInIDwgbGVuZ3RoICRsZW4gb2Ygc3RyaW5nICckc3RyJwpFT00KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAkcGFydDEgPSBzdWJzdHIoICRzdHIsIDAsICRwb3Nfc3RhcnRfbnVtYmVyICk7CiAgICAgICAgJHBhcnQyID0gc3Vic3RyKCAkc3RyLCAkcG9zX3N0YXJ0X251bWJlciApOwoKICAgICAgICAjIFZFUklGWSB0aGF0IHdlIGFyZSBpbnNlcnRpbmcgYSBuZXcgc3BhY2UgYWZ0ZXIgZWl0aGVyCiAgICAgICAgIyAgICgxKSBhbiBleGlzdGluZyBzcGFjZSBvcgogICAgICAgICMgICAoMikgYW4gb3BlbmluZyB0b2tlbi4KICAgICAgICAjIE90aGVyd2lzZSBkaXNhc3RlciBjYW4gb2NjdXIuIEFuIGVycm9yIGhlcmUgaW1wbGllcyBhIHByb2dyYW1taW5nCiAgICAgICAgIyBlcnJvciBpbiBkZWZpbmluZyAnJHBvc19zdGFydF9udW1iZXInLgoKICAgICAgICBteSAkdGVzdF9jaGFyMSA9IHN1YnN0ciggJHBhcnQxLCAtMSwgMSApOwogICAgICAgIGlmICggJHRlc3RfY2hhcjEgbmUgJGNoYXJfZW5kX3BhcnQxICkgewogICAgICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KDw8RU9NKTsKRXhwZWN0aW5nICckY2hhcl9lbmRfcGFydDEnIGJ1dCBzYXcgJyR0ZXN0X2NoYXIxJyBpbiBzdHJpbmcgJyRzdHInClByb2JhYmx5IGJhZCBwb3NpdGlvbiAnJHBvc19zdGFydF9udW1iZXInCkVPTQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgVkVSSUZZIHdlIGFyZSBpbnNlcnRpbmcgYSBzcGFjZSBiZWZvcmUgYSBkaWdpdCBjaGFyYWN0ZXIKICAgIG15ICR0ZXN0X2NoYXIyID0gc3Vic3RyKCAkcGFydDIsIDAsIDEgKTsKICAgIGlmICggJGlzX2RpZ2l0X2NoYXJ7JHRlc3RfY2hhcjJ9ICkgewogICAgICAgICR7JHJzdHJ9ID0gJHBhcnQxIC4gU1BBQ0UgLiAkcGFydDI7CiAgICAgICAgJHskcnN0cl9sZW59ICs9IDE7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KDw8RU9NKTsKRXhwZWN0aW5nIHRlc3QgY2hhcjIgYXMgbGVhZGluZyBkaWdpdCBidXQgc2F3ICckdGVzdF9jaGFyMicgaW4gc3RyaW5nICckc3RyJwpNYXkgYmUgYmFkIHBvc2l0aW9uICckcG9zX3N0YXJ0X251bWJlcicKRU9NCiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBwYWRfc2lnbmVkX2ZpZWxkCgpzdWIgc3BsaXRfZmllbGQgewogICAgbXkgKCAkcGF0MSwgJGZpZWxkLCAkcGF0dGVybiApID0gQF87CgogICAgIyBHaXZlbjsKICAgICMgICAkcGF0MSAgICA9IGZpcnN0IHBhcnQgb2YgYSBwYXR0ZXJuIGJlZm9yZSBhIG51bWVyaWMgdHlwZSAnbicKICAgICMgICAkZmllbGQgICA9IGNvcnJlc3BvbmRpbmcgdGV4dCBmaWVsZAogICAgIyAgICRwYXR0ZXJuID0gZnVsbCBwYXR0ZXJuCiAgICAjIFJldHVybjoKICAgICMgICAkcG9zX3N0YXJ0X251bWJlciA9IHBvc2l0aWlvbiBpbiAkZmllbGQgd2hlcmUgdGhlIG51bWJlciBzaG91bGQgc3RhcnQKICAgICMgICAgICAgICAgICAgICAgICAgICA9IDAgaWYgY2Fubm90IGZpbmQKICAgICMgICAkY2hhcl9lbmRfcGFydDEgPSB0aGUgY2hhcmFjdGVyIHByZWNlZGluZyAkcG9zX3N0YXJ0X251bWJlcgogICAgIyAgICRjaF9vcGVuaW5nICAgICA9IHRoZSBwcmVjZWRpbmcgb3BlbmluZyBjb250YWluZXIgY2hhcmFjdGVyLCBpZiBhbnkKCiAgICAjIFdlIGhhdmUgdG8gZmluZCB3aGVyZSB0aGUgcG9zc2libGUgbnVtYmVyIHN0YXJ0cyBpbiB0aGlzIGZpZWxkLgogICAgIyBUaGUgc2FmZSB0aGluZyB0byBkbyBpcyByZXR1cm4gQGZhaWwgaWYgYW55dGhpbmcgZG9lcyBub3QgbG9vayByaWdodC4KCiAgICBteSAkcG9zX3N0YXJ0X251bWJlciA9IDA7CiAgICBteSAkY2hhcl9lbmRfcGFydDEgICA9IEVNUFRZX1NUUklORzsKICAgIG15ICRjaF9vcGVuaW5nICAgICAgID0gRU1QVFlfU1RSSU5HOwogICAgbXkgQGZhaWwgICAgICAgICAgICAgPSAoICRwb3Nfc3RhcnRfbnVtYmVyLCAkY2hhcl9lbmRfcGFydDEsICRjaF9vcGVuaW5nICk7CgogICAgIyBCZSBzdXJlIHRoZXJlIGlzIGp1c3QgJ24nIGluIHRoZSBwYXR0ZXJuLiBNdWx0aXBsZSB0ZXJtcyBjYW4gb2NjdXIKICAgICMgd2hlbiBmaWVsZHMgYXJlIGpvaW5lZCwgYnV0IHNpbmNlIHdlIGFyZSBqdW1waW5nIGludG8gdGhlIG1pZGRsZQogICAgIyBvZiBhIGZpZWxkIGl0IGlzIHNhZmVzdCBub3QgdG8gdHJ5IHRvIGhhbmRsZSB0aGVtLgogICAgbXkgJG5fY291bnQgPSAoICRwYXR0ZXJuID1+IHRyL24vbi8gKTsKICAgIGlmICggJG5fY291bnQgJiYgJG5fY291bnQgPiAxICkgewogICAgICAgIHJldHVybiBAZmFpbDsKICAgIH0KCiAgICAjIFNhbWUgdGhpbmcgZm9yIGNvbW1hcwogICAgbXkgJGNvbW1hX2NvdW50ID0gKCAkcGF0dGVybiA9fiB0ci8sLywvICk7CiAgICBpZiAoICRjb21tYV9jb3VudCAmJiAkY29tbWFfY291bnQgPiAxICkgewogICAgICAgIHJldHVybiBAZmFpbDsKICAgIH0KCiAgICAjIFJlcXVpcmUgMCBvciAxIGJyYWNlcwogICAgbXkgJGxlbl9maWVsZCA9IGxlbmd0aCgkZmllbGQpOwogICAgbXkgJGxlbl9wYXQxICA9IGxlbmd0aCgkcGF0MSk7CiAgICByZXR1cm4gQGZhaWwgdW5sZXNzICggJGxlbl9wYXQxICYmICRsZW5fZmllbGQgKTsKCiAgICAjIExvb2sgYXQgdGhlIHBhdHRlcm4gZW5kaW5nCiAgICBteSAkZW5kaW5nX2IgPSAwOwogICAgbXkgJGNoICAgICAgID0gc3Vic3RyKCAkcGF0MSwgLTEsIDEgKTsKICAgIGlmICggJGNoIGVxICdiJyApIHsKICAgICAgICAkZW5kaW5nX2IgICAgICAgPSAxOwogICAgICAgICRjaCAgICAgICAgICAgICA9IHN1YnN0ciggJHBhdDEsIC0yLCAxICk7CiAgICAgICAgJGNoYXJfZW5kX3BhcnQxID0gU1BBQ0U7CiAgICB9CgogICAgIyBoYW5kbGUgZWl0aGVyICd7Yicgb3IgJ3snCiAgICBpZiAoICRjaCBlcSAneycgKSB7CgogICAgICAgICMgT25seSBvbmUgYnJhY2UKICAgICAgICBteSAkYnJhY2VfY291bnQgPSAoICRwYXQxID1+IHRyL1x7L1x7LyApOwogICAgICAgIHJldHVybiBAZmFpbCBpZiAoICRicmFjZV9jb3VudCAhPSAxICk7CgogICAgICAgIG15ICRpX3BhcmVuICAgPSBpbmRleCggJGZpZWxkLCAnKCcgKTsKICAgICAgICBteSAkaV9icmFja2V0ID0gaW5kZXgoICRmaWVsZCwgJ1snICk7CiAgICAgICAgbXkgJGlfYnJhY2UgICA9IGluZGV4KCAkZmllbGQsICd7JyApOwogICAgICAgIG15ICRpX29wZW5pbmcgPSBsZW5ndGgoJGZpZWxkKTsKICAgICAgICBpZiAoICRpX3BhcmVuID49IDAgKSB7CiAgICAgICAgICAgICRpX29wZW5pbmcgID0gJGlfcGFyZW47CiAgICAgICAgICAgICRjaF9vcGVuaW5nID0gJygnOwogICAgICAgIH0KICAgICAgICBpZiAoICAgJGlfYnJhY2tldCA+PSAwCiAgICAgICAgICAgICYmICRpX2JyYWNrZXQgPCAkaV9vcGVuaW5nICkKICAgICAgICB7CiAgICAgICAgICAgICRpX29wZW5pbmcgID0gJGlfYnJhY2tldDsKICAgICAgICAgICAgJGNoX29wZW5pbmcgPSAnWyc7CiAgICAgICAgfQogICAgICAgIGlmICggJGlfYnJhY2UgPj0gMCAmJiAkaV9icmFjZSA8ICRpX29wZW5pbmcgKSB7CiAgICAgICAgICAgICRpX29wZW5pbmcgID0gJGlfYnJhY2U7CiAgICAgICAgICAgICRjaF9vcGVuaW5nID0gJ3snOwogICAgICAgIH0KICAgICAgICBpZiAoICAgJGlfb3BlbmluZyA+PSAwCiAgICAgICAgICAgICYmICRpX29wZW5pbmcgPCBsZW5ndGgoJGZpZWxkKSAtIDEgKQogICAgICAgIHsKICAgICAgICAgICAgJHBvc19zdGFydF9udW1iZXIgPSAkaV9vcGVuaW5nICsgMSArICRlbmRpbmdfYjsKICAgICAgICAgICAgJGNoYXJfZW5kX3BhcnQxICAgPSAkY2hfb3BlbmluZwogICAgICAgICAgICAgIGlmICggISRlbmRpbmdfYiApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIyBzdHJhbmdlIC0gY291bGQgbm90IGZpbmQgdGhlIG9wZW5pbmcgdG9rZW4KICAgICAgICB9CiAgICB9CgogICAgIyBubyBicmFjZXM6IG1heWJlICc9PmInCiAgICBlbHNlIHsKCiAgICAgICAgIyBsb29raW5nIGZvciBwYXR0ZXJucyBlbmRpbmcgaW4gJz1iJyBvciAnPT5iJwogICAgICAgIGlmICggISRlbmRpbmdfYiApIHsgcmV0dXJuIEBmYWlsIH0KCiAgICAgICAgIyBmaW5kIHRoZSA9IGluIHRoZSB0ZXh0CiAgICAgICAgbXkgJHBvc19lcXVhbHMgPSBpbmRleCggJGZpZWxkLCAnPScgKTsKICAgICAgICByZXR1cm4gQGZhaWwgaWYgKCAkcG9zX2VxdWFscyA8IDAgKTsKCiAgICAgICAgIyBiZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciAnPScgaW4gdGhlIHBhdHRlcm4KICAgICAgICBteSAkZXF1YWxzX2NvdW50ID0gKCAkcGF0MSA9fiB0ci89Lz0vICk7CiAgICAgICAgcmV0dXJuIEBmYWlsIGlmICggJGVxdWFsc19jb3VudCAhPSAxICk7CgogICAgICAgIGlmICggJGxlbl9wYXQxID49IDIgJiYgc3Vic3RyKCAkcGF0MSwgLTIsIDIgKSBlcSAnPWInICkgewogICAgICAgICAgICAkcG9zX3N0YXJ0X251bWJlciA9ICRwb3NfZXF1YWxzICsgMjsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkbGVuX3BhdDEgPj0gMyAmJiBzdWJzdHIoICRwYXQxLCAtMywgMyApIGVxICc9PmInICkgewogICAgICAgICAgICAkcG9zX3N0YXJ0X251bWJlciA9ICRwb3NfZXF1YWxzICsgMzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIGNhbm5vdCBoYW5kbGUgdGhpcyBwYXR0ZXJuCiAgICAgICAgICAgIHJldHVybiBAZmFpbDsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkcG9zX3N0YXJ0X251bWJlciA8PSAwIHx8ICRwb3Nfc3RhcnRfbnVtYmVyID49ICRsZW5fZmllbGQgKSB7CiAgICAgICAgcmV0dXJuIEBmYWlsOwogICAgfQoKICAgIHJldHVybiAoICRwb3Nfc3RhcnRfbnVtYmVyLCAkY2hhcl9lbmRfcGFydDEsICRjaF9vcGVuaW5nICk7Cn0gIyMgZW5kIHN1YiBzcGxpdF9maWVsZAoKc3ViIGZpZWxkX21hdGNoZXNfZW5kX3BhdHRlcm4gewogICAgbXkgKCAkZmllbGQyLCAkcGF0MiApID0gQF87CgogICAgIyBDaGVjayB0aGF0IGEgcG9zc2libGUgbnVtZXJpYyBmaWVsZCBtYXRjaGVzIHRoZSBlbmRpbmcgcGF0dGVybgoKICAgICMgR2l2ZW46CiAgICAjICAkZmllbGQyID0gdGhlIHJlc3Qgb2YgdGhlIGZpZWxkIGFmdGVyIHJlbW92aW5nIGFueSBzaWduCiAgICAjICAkcGF0MiAgID0gdGhlIGVuZCBwYXR0ZXJuIG9mIHRoaXMgZmllbGQKICAgICMgUmV0dXJuOgogICAgIyAgZmFsc2UgaWYgZmllbGQgaXMgZGVmaW5pdGVseSBub24tbnVtZXJpYwogICAgIyAgdHJ1ZSBvdGhlcndpc2UKCiAgICBteSAkbmV4dF9jaGFyICAgPSBzdWJzdHIoICRwYXQyLCAxLCAxICk7CiAgICBteSAkZmllbGQyX3RyaW0gPSBFTVBUWV9TVFJJTkc7CgogICAgIyBpZiBwYXR0ZXJuIGlzIG9uZSBvZjogJ24sJywgJ24sYicKICAgIGlmICggJG5leHRfY2hhciBlcSAnLCcgKSB7CiAgICAgICAgbXkgJGljb21tYSA9IGluZGV4KCAkZmllbGQyLCAnLCcgKTsKICAgICAgICBpZiAoICRpY29tbWEgPj0gMCApIHsKICAgICAgICAgICAgJGZpZWxkMl90cmltID0gc3Vic3RyKCAkZmllbGQyLCAwLCAkaWNvbW1hICk7CiAgICAgICAgfQogICAgfQoKICAgICMgaWYgcGF0dGVybiBpcyBvbmUgb2Y6ICduYicsICduYn0nLCAnbmJ9LCcKICAgIGVsc2lmICggJG5leHRfY2hhciBlcSAnYicgKSB7CiAgICAgICAgbXkgJGlzcGFjZSA9IGluZGV4KCAkZmllbGQyLCBTUEFDRSApOwogICAgICAgIGlmICggJGlzcGFjZSA+PSAwICkgewogICAgICAgICAgICAkZmllbGQyX3RyaW0gPSBzdWJzdHIoICRmaWVsZDIsIDAsICRpc3BhY2UgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBpZiBwYXR0ZXJuIGlzIG9uZSBvZiAnbn0sJywgJ259OycKICAgIGVsc2lmICggJG5leHRfY2hhciBlcSAnfScgKSB7CiAgICAgICAgaWYgKCAkZmllbGQyID1+IC9eKFteXClcfVxdXSspLyApIHsKICAgICAgICAgICAgJGZpZWxkMl90cmltID0gJDE7CiAgICAgICAgfQogICAgfQoKICAgICMgdW5yZWNvZ25pemVkIHBhdHRlcm4KICAgIGVsc2UgewogICAgICAgIERFVkVMX01PREUgJiYgRmF1bHQoPDxFT00pOwpVbmV4cGVjdGVkIGVuZGluZyBwYXR0ZXJuICckcGF0MicgbmV4dD0nJG5leHRfY2hhcicgZmllbGQyPSckZmllbGQyJwpUaGUgaGFzaCAnaXNfbGVhZGluZ19zaWduX3BhdHRlcm4nIHNlZW1zIHRvIGhhdmUgY2hhbmdlZCBidXQgdGhlIGNvZGUKaGFzIG5vdCBiZWVuIHVwZGF0ZWQgdG8gaGFuZGxlIGl0LiBQbGVhc2UgZml4LgpFT00KICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCAhbGVuZ3RoKCRmaWVsZDJfdHJpbSkgKSB7CiAgICAgICAgREVWRUxfTU9ERQogICAgICAgICAgJiYgRmF1bHQoCiAgICAgICAgICAgICJTVFJBTkdFOiBjYW5ub3QgZmluZCBlbmQgb2YgZmllbGQ9JGZpZWxkMiBmb3IgcGF0PSRwYXQyIFxuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgUmVqZWN0IG9idmlvdXNseSBub24tbnVtZXJpYyBmaWVsZHMganVzdCB0byBiZSBzdXJlIHdlIGRpZCBub3QKICAgICMganVtcCBpbnRvIGEgcXVvdGUgb2Ygc29tZSBraW5kCiAgICBpZiAoICRmaWVsZDJfdHJpbSAhfiAvXltcZFwuXCtcLWFiY2RlZnB4X10rJC9pICkgewogICAgICAgIERFQlVHX1ZTTgogICAgICAgICAgJiYgcHJpbnQgeypTVERFUlJ9CiJSZWplY3RpbmcgbWF0Y2ggdG8gcGF0Mj0nJHBhdDInIHdpdGggbmV4dD0kbmV4dF9jaGFyIGZpZWxkMj0kZmllbGQyIHRyaW1tZWQ9JyRmaWVsZDJfdHJpbSdcbiI7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgcmV0dXJuIDE7Cn0gIyMgZW5kIHN1YiBmaWVsZF9tYXRjaGVzX2VuZF9wYXR0ZXJuCgpzdWIgcGFkX3NpZ25lZF9udW1iZXJfY29sdW1ucyB7CiAgICBteSAoJHJncm91cF9saW5lcykgPSBAXzsKCiAgICAjIEdpdmVuOgogICAgIyAgICRyZ3JvdXBfbGluZXMgPSB0aGUgY3VycmVudCB2ZXJ0aWNhbCBhbGlnbm1lbnQgZ3JvdXAgb2YgbGluZXMKICAgICMgVGFzazoKICAgICMgICBMb29rIGZvciBjb2x1bW5zIG9mIGFsaWduZWQgbnVtZXJpYyB2YWx1ZXMsIHNvbWUgb2Ygd2hvc2UgbnVtYmVycwogICAgIyAgIGhhdmUgYWxnZWJyYWljIHNpZ25zLiBBZGQgYSBsZWFkaW5nIHNwYWNlIHRvIHRoZSB1bnNpZ25lZAogICAgIyAgIG51bWJlcnMsIGlmIHBvc3NpYmxlLCBzbyB0aGF0IHRoZSBqdXN0IHRoZSBzaWducyBhcHBlYXIgYXMgdGhlIGZpcnN0CiAgICAjICAgY2hhcmFjdGVyLiBFeGFtcGxlIG9mIHdoYXQgd2Ugd2FudCB0byBkbzoKCiAgICAjICAgIG15IEBjb3JyZWN0ID0gKAogICAgIyAgICAgICAgWyAgMTIzNDU2Ljc5LCAgIDg2NzUzMDkwMDAwLjg2OCwgIDExIF0sCiAgICAjICAgICAgICBbIC0xMjM0NTYuNzksICAtODY3NTMwOTAwMDAuODY4LCAtMTEgXSwKICAgICMgICAgICAgIFsgIDEyMzQ1Ni4wMDEsICA4MC4wODAsICAgICAgICAgICAxMCBdLAogICAgIyAgICAgICAgWyAtMTIzNDU2LjAwMSwgLTgwLjA4MCwgICAgICAgICAgIDAgXSwKICAgICMgICAgICAgIFsgIDEwLjksICAgICAgICAxMC45LCAgICAgICAgICAgICAxMSBdLAogICAgIyAgICApOwoKICAgICMgVGhlIGxvZ2ljIGhlcmUgaXMgY29tcGxleCBiZWNhdXNlIHdlIGFyZSB3b3JraW5nIHdpdGggYml0cyBvZiB0ZXh0CiAgICAjIHdoaWNoIGhhdmUgYmVlbiBicm9rZW4gaW50byBwYXR0ZXJucyB3aGljaCBhcmUgY29udmVuaWVudCBmb3IgdGhlCiAgICAjIHZlcnRpY2FsIGFsaWduZXIsIGJ1dCB3ZSBubyBsb25nZXIgaGF2ZSB0aGUgb3JpZ2luYWwgdG9rZW5pemF0aW9uCiAgICAjIHdoaWNoIHdvdWxkIGhhdmUgaW5kaWNhdGVkIHRoZSBwcmVjaXNlIGJvdW5kcyBvZiBudW1iZXJzLiAgU28gd2UKICAgICMgaGF2ZSB0byBwcm9jZWRlIHZlcnkgY2FyZWZ1bGx5IHdpdGggbG90cyBvZiBjaGVja3MuIFRoZXJlIGFyZQogICAgIyBtb3JlIGNoZWNrcyB0aGFuIHJlYWxseSBuZWNlc3Nhcnkgbm93IGJlY2F1c2Ugb3JpZ2luYWxseSBudW1iZXJzCiAgICAjIGFuZCBxdW90ZXMgd2VyZSBib3RoIGluZGljYXRlZCB3aXRoIHBhdHRlcm4gJ1EnLiBCdXQgbm93IG51bWJlcnMgYXJlCiAgICAjIHVuaXF1ZWx5IG1hcmtlZCBhcyBwYXR0ZXJuICduJywgc28gdGhlcmUgaXMgbGVzcyByaXNrIG9mIGFuIGVycm9yLgogICAgIyBUaGUgZXh0cmEgY2hlY2tzIHRha2UgdmVyeSBsaXR0bGUgdGltZSBzbyB0aGV5IGFyZSByZXRhaW5lZC4KCiAgICByZXR1cm4gdW5sZXNzICgkck9wdHNfdmFsaWduX3NpZ25lZF9udW1iZXJzKTsKCiAgICBteSAlY29sdW1uX2luZm87CiAgICBteSBAY29sdW1uczsKCiAgICAjLS0tLS0tLS0tLS0tLS0tLQogICAgIyBsb29wIG92ZXIgbGluZXMKICAgICMtLS0tLS0tLS0tLS0tLS0tCiAgICBteSAkaXhfbGluZSA9IC0xOwogICAgbXkgJGptYXggICAgPSAtMTsKICAgIGZvcmVhY2ggbXkgJGxpbmUgKCBAeyRyZ3JvdXBfbGluZXN9ICkgewogICAgICAgICRpeF9saW5lKys7CiAgICAgICAgbXkgJGptYXhfbGFzdCA9ICRqbWF4OwogICAgICAgICRqbWF4ID0gJGxpbmUtPnsnam1heCd9OwogICAgICAgIG15ICRqbWF4X2NoYW5nZSA9ICRqbWF4IG5lICRqbWF4X2xhc3Q7CgogICAgICAgIG15IEBhbGlnbm1lbnRzID0gQHsgJGxpbmUtPnsncmFsaWdubWVudHMnfSB9OwogICAgICAgIG15ICRyZmllbGRzICAgID0gJGxpbmUtPnsncmZpZWxkcyd9OwogICAgICAgIG15ICRycGF0dGVybnMgID0gJGxpbmUtPnsncnBhdHRlcm5zJ307CiAgICAgICAgbXkgJHJ0b2tlbnMgICAgPSAkbGluZS0+eydydG9rZW5zJ307CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgQ2hlY2sgZm9yIGEgcmVkdWN0aW9uIGluIHRoZSBudW1iZXIgb2YgY29sdW1ucwogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGlmICggJGptYXggPCAkam1heF9sYXN0ICkgewoKICAgICAgICAgICAgZm9yZWFjaCBteSAkamNvbCAoIGtleXMgJWNvbHVtbl9pbmZvICkgewoKICAgICAgICAgICAgICAgICMgZW5kIGFueSBzdHJhbmRlZCBjb2x1bW5zIG9uIHRoZSByaWdodAogICAgICAgICAgICAgICAgbmV4dCBpZiAoICRqY29sIDwgJGptYXggKTsKICAgICAgICAgICAgICAgIG15ICRyY29sX2hhc2ggPSAkY29sdW1uX2luZm97JGpjb2x9OwogICAgICAgICAgICAgICAgbmV4dCB1bmxlc3MgKCRyY29sX2hhc2gpOwogICAgICAgICAgICAgICAgaWYgKCAgICRyY29sX2hhc2gtPntzaWduZWRfY291bnR9CiAgICAgICAgICAgICAgICAgICAgJiYgJHJjb2xfaGFzaC0+e3Vuc2lnbmVkX2NvdW50fSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZW5kX3NpZ25lZF9udW1iZXJfY29sdW1uKCAkcmdyb3VwX2xpbmVzLCAkcmNvbF9oYXNoLAogICAgICAgICAgICAgICAgICAgICAgICAkaXhfbGluZSAtIDEgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRlbGV0ZSAkY29sdW1uX2luZm97JGpjb2x9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFRyeSB0byBrZWVwIHRoZSBlbmQgZGF0YSBjb2x1bW4gcnVubmluZzsgdGVzdCBjYXNlICdyZmMuaW4nCiAgICAgICAgICAgICMgVGhlIGxhc3QgaXRlbSBpbiBhIGxpc3Qgd2lsbCBzdGlsbCBuZWVkIGEgdHJhaWxpbmcgY29tbWEuCiAgICAgICAgICAgIG15ICRqY29sID0gJGptYXggLSAxOwogICAgICAgICAgICBpZiAoICRqY29sID49IDAgJiYgJGNvbHVtbl9pbmZveyRqY29sfSApIHsKICAgICAgICAgICAgICAgIG15ICRhbGlnbm1lbnQgPSAkYWxpZ25tZW50c1skamNvbF07CiAgICAgICAgICAgICAgICBteSAkb2xkX2NvbCAgID0gJGNvbHVtbnNbJGpjb2xdOwogICAgICAgICAgICAgICAgbXkgJGNvbCAgICAgICA9ICRhbGlnbm1lbnQtPntjb2x1bW59OwoKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAkY29sIDwgJG9sZF9jb2wKCiAgICAgICAgICAgICAgICAgICAgIyBvbmx5IGRvIHRoaXMgaWYgdGhlIHRleHQgaGFzIGEgbGVhZGluZyBkaWdpdAogICAgICAgICAgICAgICAgICAgICYmICRyZmllbGRzLT5bJGpjb2xdID1+IC9eKFsrLV0/KVxkLwoKICAgICAgICAgICAgICAgICAgICAjIGFuZCBhIHNpZ25lZCBudW1iZXIgaGFzIGJlZW4gc2VlbiAtIGlzc3VlIGMzNzUKICAgICAgICAgICAgICAgICAgICAmJiAoICQxIHx8ICRjb2x1bW5faW5mb3skamNvbH0tPntzaWduZWRfY291bnR9ICkKICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG15ICRzcGFjZXNfbmVlZGVkID0gJG9sZF9jb2wgLSAkY29sOwogICAgICAgICAgICAgICAgICAgIG15ICRzcGFjZXNfYXZhaWxhYmxlID0KICAgICAgICAgICAgICAgICAgICAgICRsaW5lLT5nZXRfYXZhaWxhYmxlX3NwYWNlX29uX3JpZ2h0KCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkc3BhY2VzX2F2YWlsYWJsZSA+PSAkc3BhY2VzX25lZWRlZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmUtPmluY3JlYXNlX2ZpZWxkX3dpZHRoKCAkamNvbCwgJHNwYWNlc19uZWVkZWQgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgTG9vcCBvdmVyIGZpZWxkcyBleGNlcHQgbGFzdCAoc2lkZSBjb21tZW50KQogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGZvciBteSAkamNvbCAoIDAgLi4gJGptYXggLSAxICkgewoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgRGVjaWRlIGlmIHRoaXMgaXMgYSBuZXcgYWxpZ25tZW50IGNvbHVtbgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgbXkgJGFsaWdubWVudCA9ICRhbGlnbm1lbnRzWyRqY29sXTsKICAgICAgICAgICAgbXkgJG9sZF9jb2wgICA9ICRjb2x1bW5zWyRqY29sXTsKICAgICAgICAgICAgbXkgJGNvbCAgICAgICA9ICRhbGlnbm1lbnQtPntjb2x1bW59OwogICAgICAgICAgICAkY29sdW1uc1skamNvbF0gPSAkY29sOwogICAgICAgICAgICBpZiAoIGRlZmluZWQoJG9sZF9jb2wpICYmICRvbGRfY29sICE9ICRjb2wgKSB7CiAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRqY29sX29sZCAoIGtleXMgJWNvbHVtbl9pbmZvICkgewogICAgICAgICAgICAgICAgICAgIG5leHQgaWYgKCAkamNvbF9vbGQgPCAkamNvbCApOwogICAgICAgICAgICAgICAgICAgIG15ICRyY29sX2hhc2ggPSAkY29sdW1uX2luZm97JGpjb2xfb2xkfTsKICAgICAgICAgICAgICAgICAgICBpZiAoICAgJHJjb2xfaGFzaC0+e3NpZ25lZF9jb3VudH0KICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHJjb2xfaGFzaC0+e3Vuc2lnbmVkX2NvdW50fSApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBlbmRfc2lnbmVkX251bWJlcl9jb2x1bW4oICRyZ3JvdXBfbGluZXMsICRyY29sX2hhc2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXhfbGluZSAtIDEgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZGVsZXRlICRjb2x1bW5faW5mb3skamNvbF9vbGR9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIEEgbmV3IHBhZGRlZCBzaWduIGNvbHVtbiBjYW4gb25seSBzdGFydCBhdCBhbiBhbGlnbm1lbnQgY2hhbmdlCiAgICAgICAgICAgIG15ICRyY29sX2hhc2ggPSAkY29sdW1uX2luZm97JGpjb2x9OwoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIEV4YW1pbmUgdGhpcyBmaWVsZCwgbG9va2luZyBmb3Igc2lnbmVkIGFuZCB1bnNpZ25lZCBudW1iZXJzCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgbXkgJGZpZWxkICAgPSAkcmZpZWxkcy0+WyRqY29sXTsKICAgICAgICAgICAgbXkgJHBhdHRlcm4gPSAkcnBhdHRlcm5zLT5bJGpjb2xdOwoKICAgICAgICAgICAgbXkgJGlzX3NpZ25lZF9udW1iZXIgICA9IDA7CiAgICAgICAgICAgIG15ICRpc191bnNpZ25lZF9udW1iZXIgPSAwOwoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgc2V0ICRwb3Nfc3RhcnRfbnVtYmVyID0gaW5kZXggaW4gZmllbGQgb2YgZGlnaXQgb3Igc2lnbgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgbXkgJHBvc19zdGFydF9udW1iZXIgPSAwOwogICAgICAgICAgICBteSAkY2hhcl9lbmRfcGFydDEgICA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgbXkgJGNoX29wZW5pbmcgICAgICAgPSBFTVBUWV9TVFJJTkc7CgogICAgICAgICAgICAjIFNldCAkZmllbGRfb2sgdG8gZmFsc2Ugb24gZW5jb3VudGVyaW5nIGFueSBwcm9ibGVtCiAgICAgICAgICAgICMgRG8gbm90IHBhZCBzaWduZWQgYW5kIHVuc2lnbmVkIGhhc2gga2V5cwogICAgICAgICAgICBteSAkZmllbGRfb2sgPSBsZW5ndGgoJGZpZWxkKSA+IDAKICAgICAgICAgICAgICAmJiBzdWJzdHIoICRydG9rZW5zLT5bJGpjb2xdLCAwLCAyICkgbmUgJz0+JzsKCiAgICAgICAgICAgIGlmICggJGZpZWxkX29rICYmICRwYXR0ZXJuICkgewoKICAgICAgICAgICAgICAgICMgU3BsaXQgdGhlIHBhdHRlcm4gYXQgdGhlIGZpcnN0ICduJwogICAgICAgICAgICAgICAgIyAkcGF0MSA9IHBhdHRlcm4gYmVmb3JlIHRoZSAnbicgKGlmIGFueSkKICAgICAgICAgICAgICAgICMgJHBhdDIgPSBwYXR0ZXJuIHN0YXJ0aW5nIGF0IHRoZSAnbicKICAgICAgICAgICAgICAgIG15ICggJHBhdDEsICRwYXQyICk7CiAgICAgICAgICAgICAgICBteSAkcG9zcSA9IGluZGV4KCAkcGF0dGVybiwgJ24nICk7CiAgICAgICAgICAgICAgICBpZiAoICRwb3NxIDwgMCApIHsKICAgICAgICAgICAgICAgICAgICAkZmllbGRfb2sgPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIyBKdXN0IGxvb2sgYXQgdXAgdG8gMyBvZiB0aGUgcGF0dGVybiBjaGFyYWN0ZXJzCiAgICAgICAgICAgICAgICAgICAgIyBXZSByZXF1aXJlICRwYXQyIHRvIGhhdmUgb25lIG9mIHRoZSBrbm93biBwYXR0ZXJucwogICAgICAgICAgICAgICAgICAgICRwYXQxICAgICA9IHN1YnN0ciggJHBhdHRlcm4sIDAsICAgICAkcG9zcSApOwogICAgICAgICAgICAgICAgICAgICRwYXQyICAgICA9IHN1YnN0ciggJHBhdHRlcm4sICRwb3NxLCAzICk7CiAgICAgICAgICAgICAgICAgICAgJGZpZWxkX29rID0gJGlzX2xlYWRpbmdfc2lnbl9wYXR0ZXJueyRwYXQyfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJGZpZWxkX29rKSB7CgogICAgICAgICAgICAgICAgICAgICMgSWYgdGhlIG51bWJlciBzdGFydHMgd2l0aGluIHRoZSBmaWVsZCB0aGVuIHdlIG11c3QKICAgICAgICAgICAgICAgICAgICAjIGZpbmQgaXRzIG9mZnNldCBwb3NpdGlvbi4KICAgICAgICAgICAgICAgICAgICBpZiAoJHBhdDEpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgTm90ZTogYW4gb3B0aW1pemF0aW9uIHdvdWxkIGJlIHRvIHJlbWVtYmVyIHByZXZpb3VzCiAgICAgICAgICAgICAgICAgICAgICAgICMgY2FsbHMgZm9yIGVhY2ggY29sdW1uIGFuZCB1c2UgdGhlbSBpZiBwb3NzaWJsZSwgYnV0CiAgICAgICAgICAgICAgICAgICAgICAgICMgYmVuY2htYXJraW5nIHNob3dzIHRoYXQgdGhpcyBpcyBub3QgbmVjZXNzYXJ5LgogICAgICAgICAgICAgICAgICAgICAgICAjIFNlZSAuYmE1NCBmb3IgZXhhbXBsZSBjb2RpbmcuCiAgICAgICAgICAgICAgICAgICAgICAgICggJHBvc19zdGFydF9udW1iZXIsICRjaGFyX2VuZF9wYXJ0MSwgJGNoX29wZW5pbmcgKSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXRfZmllbGQoICRwYXQxLCAkZmllbGQsICRwYXR0ZXJuICk7CgogICAgICAgICAgICAgICAgICAgICAgICAkZmllbGRfb2sgfHw9ICRwb3Nfc3RhcnRfbnVtYmVyOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCRmaWVsZF9vaykgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBsb29rIGZvciBhbiBvcHRpb25hbCArIG9yIC0gc2lnbgogICAgICAgICAgICAgICAgICAgICAgICBteSAkdGVzdF9jaGFyID0gc3Vic3RyKCAkZmllbGQsICRwb3Nfc3RhcnRfbnVtYmVyLCAxICk7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRzaWduOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRpc19wbHVzX29yX21pbnVzeyR0ZXN0X2NoYXJ9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNpZ24gPSAkdGVzdF9jaGFyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRlc3RfY2hhciA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnN0ciggJGZpZWxkLCAkcG9zX3N0YXJ0X251bWJlciArIDEsIDEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBhbmQgYSBkaWdpdAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRpc19kaWdpdF9jaGFyeyR0ZXN0X2NoYXJ9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGZpZWxkMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkc2lnbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpc19zaWduZWRfbnVtYmVyID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmllbGQyID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnN0ciggJGZpZWxkLCAkcG9zX3N0YXJ0X251bWJlciArIDEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpc191bnNpZ25lZF9udW1iZXIgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWVsZDIgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBvc19zdGFydF9udW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc3Vic3RyKCAkZmllbGQsICRwb3Nfc3RhcnRfbnVtYmVyICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJGZpZWxkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQ2hlY2sgZm9yIG1hdGNoIHRvIGVuZGluZyBwYXR0ZXJuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmllbGRfb2sgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9tYXRjaGVzX2VuZF9wYXR0ZXJuKCAkZmllbGQyLCAkcGF0MiApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZpZWxkX29rID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgIyBGaWd1cmUgb3V0IHdoYXQgdG8gZG8KICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgICAgICMgd2UgcmVxdWlyZSBhIHNpZ25lZCBvciB1bnNpZ25lZCBudW1iZXIgZmllbGQKICAgICAgICAgICAgIyB3aGljaCBpcyBub3QgYSBoYXNoIGtleQogICAgICAgICAgICAkZmllbGRfb2sgJiY9ICggJGlzX3NpZ25lZF9udW1iZXIgfHwgJGlzX3Vuc2lnbmVkX251bWJlciApOwoKICAgICAgICAgICAgIyBpZiBhIGNvbHVtbiBoYXMgbm90IHN0YXJ0ZWQuLgogICAgICAgICAgICBpZiAoICEkcmNvbF9oYXNoICkgewoKICAgICAgICAgICAgICAgICMgZ2l2ZSB1cCBpZiB0aGlzIGlzIGNhbm5vdCBzdGFydCBhIG5ldyBjb2x1bW4KICAgICAgICAgICAgICAgIG5leHQgaWYgKCAhJGZpZWxkX29rICk7CgogICAgICAgICAgICAgICAgIyBvdGhlcndpc2UgY29udGludWUgb24gdG8gc3RhcnQgYSBuZXcgY29sdW1uCgogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGlmIGEgY29sdW1uIGhhcyBiZWVuIHN0YXJ0ZWQuLi4KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyBhbmQgdGhpcyBjYW5ub3QgYmUgYWRkZWQgdG8gaXQKICAgICAgICAgICAgICAgIGlmICggICEkZmllbGRfb2sKICAgICAgICAgICAgICAgICAgICB8fCAkcmNvbF9oYXNoLT57cG9zX3N0YXJ0X251bWJlcn0gbmUgJHBvc19zdGFydF9udW1iZXIKICAgICAgICAgICAgICAgICAgICB8fCAkcmNvbF9oYXNoLT57Y2hhcl9lbmRfcGFydDF9IG5lICRjaGFyX2VuZF9wYXJ0MQogICAgICAgICAgICAgICAgICAgIHx8ICRyY29sX2hhc2gtPntjb2x9IG5lICRjb2wgKQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAjIHRoZW4gZW5kIHRoZSBjdXJyZW50IGNvbHVtbiBhbmQgc3RhcnQgb3ZlcgogICAgICAgICAgICAgICAgICAgIGlmICggICAkcmNvbF9oYXNoLT57c2lnbmVkX2NvdW50fQogICAgICAgICAgICAgICAgICAgICAgICAmJiAkcmNvbF9oYXNoLT57dW5zaWduZWRfY291bnR9ICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVuZF9zaWduZWRfbnVtYmVyX2NvbHVtbiggJHJncm91cF9saW5lcywgJHJjb2xfaGFzaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpeF9saW5lIC0gMSApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBkZWxldGUgJGNvbHVtbl9pbmZveyRqY29sfTsKICAgICAgICAgICAgICAgICAgICAkcmNvbF9oYXNoID0gdW5kZWY7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChERUJVR19WU04pIHsKICAgICAgICAgICAgICAgIG15ICRleGlzdHMgPSBkZWZpbmVkKCRyY29sX2hhc2gpOwogICAgICAgICAgICAgICAgcHJpbnQKIlZTTjogbGluZT0kaXhfbGluZSBjaGFuZ2U9JGptYXhfY2hhbmdlIGpjb2w9JGpjb2wgZmllbGQ9JGZpZWxkIGV4aXN0cz89JGV4aXN0cyB1bnNpZ25lZD89JGlzX3Vuc2lnbmVkX251bWJlciBzaWduZWQ/PSRpc19zaWduZWRfbnVtYmVyXG4iOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgRWl0aGVyIHN0YXJ0IGEgbmV3IGNvbHVtbiwgaWYgcG9zc2libGUKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICBpZiAoICFkZWZpbmVkKCRyY29sX2hhc2gpICkgewoKICAgICAgICAgICAgICAgIG5leHQgaWYgKCAhJGZpZWxkX29rICk7CgogICAgICAgICAgICAgICAgbXkgJHJzaWduZWRfbGluZXMgPSAkaXNfc2lnbmVkX251bWJlciA/IFskaXhfbGluZV0gOiBbXTsKICAgICAgICAgICAgICAgICRjb2x1bW5faW5mb3skamNvbH0gPSB7CiAgICAgICAgICAgICAgICAgICAgdW5zaWduZWRfY291bnQgICA9PiAkaXNfdW5zaWduZWRfbnVtYmVyLAogICAgICAgICAgICAgICAgICAgIHNpZ25lZF9jb3VudCAgICAgPT4gJGlzX3NpZ25lZF9udW1iZXIsCiAgICAgICAgICAgICAgICAgICAgcG9zX3N0YXJ0X251bWJlciA9PiAkcG9zX3N0YXJ0X251bWJlciwKICAgICAgICAgICAgICAgICAgICBjaGFyX2VuZF9wYXJ0MSAgID0+ICRjaGFyX2VuZF9wYXJ0MSwKICAgICAgICAgICAgICAgICAgICBpeF9maXJzdCAgICAgICAgID0+ICRpeF9saW5lLAogICAgICAgICAgICAgICAgICAgIGNvbCAgICAgICAgICAgICAgPT4gJGNvbCwKICAgICAgICAgICAgICAgICAgICBqY29sICAgICAgICAgICAgID0+ICRqY29sLAogICAgICAgICAgICAgICAgICAgIHJzaWduZWRfbGluZXMgICAgPT4gJHJzaWduZWRfbGluZXMsCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgb3IgZXh0ZW5kIHRoZSBleGlzdGluZyBjb2x1bW4KICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRyY29sX2hhc2gtPnt1bnNpZ25lZF9jb3VudH0gKz0gJGlzX3Vuc2lnbmVkX251bWJlcjsKICAgICAgICAgICAgICAgICRyY29sX2hhc2gtPntzaWduZWRfY291bnR9ICAgKz0gJGlzX3NpZ25lZF9udW1iZXI7CiAgICAgICAgICAgICAgICBpZiAoJGlzX3NpZ25lZF9udW1iZXIpIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEB7ICRyY29sX2hhc2gtPntyc2lnbmVkX2xpbmVzfSB9LCAkaXhfbGluZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBMb29wIHRvIGZpbmlzaCBhbnkgcmVtYWluaW5nIGNvbHVtbnMKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmb3JlYWNoIG15ICRqY29sICgga2V5cyAlY29sdW1uX2luZm8gKSB7CiAgICAgICAgbXkgJHJjb2xfaGFzaCA9ICRjb2x1bW5faW5mb3skamNvbH07CiAgICAgICAgaWYgKCAkcmNvbF9oYXNoLT57c2lnbmVkX2NvdW50fSAmJiAkcmNvbF9oYXNoLT57dW5zaWduZWRfY291bnR9ICkgewogICAgICAgICAgICBlbmRfc2lnbmVkX251bWJlcl9jb2x1bW4oICRyZ3JvdXBfbGluZXMsICRyY29sX2hhc2gsICRpeF9saW5lICk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgcGFkX3NpZ25lZF9udW1iZXJfY29sdW1ucwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDT0RFIFNFQ1RJT04gNzogUGFkIFdpZGUgRXF1YWxzIENvbHVtbnMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnVzZSBjb25zdGFudCBERUJVR19XRUMgPT4gMDsKCnN1YiBlbmRfd2lkZV9lcXVhbHNfY29sdW1uIHsKICAgIG15ICggJHJncm91cF9saW5lcywgJHJjb2xfaGFzaCwgJGl4X2xhc3QgKSA9IEBfOwoKICAgICMgRmluaXNoIGZvcm1hdHRpbmcgYSBjb2x1bW4gb2Ygd2lkZSBlcXVhbHMKICAgICMgR2l2ZW46CiAgICAjICAgJHJncm91cF9saW5lcyAtIHRoZSBjdXJyZW50IHZlcnRpY2FsIGFsaWdubWVudCBncm91cCBvZiBsaW5lcwogICAgIyAgICRyY29sX2hhc2ggICAgLSBhIGhhc2ggb2YgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyB2ZXJ0aWNhbCBjb2x1bW4KICAgICMgICAkaXhfbGFzdCAgICAgIC0gaW5kZXggb2YgdGhlIGxhc3QgbGluZSBvZiB0aGlzIHZlcnRpY2FsIGNvbHVtbgoKICAgIHJldHVybiB1bmxlc3MgKCRyY29sX2hhc2gpOwogICAgbXkgJGpjb2wgICAgICA9ICRyY29sX2hhc2gtPntqY29sfTsKICAgIG15ICRjb2wgICAgICAgPSAkcmNvbF9oYXNoLT57Y29sfTsKICAgIG15ICRtaW5fd2lkdGggPSAkcmNvbF9oYXNoLT57bWluX3dpZHRofTsKICAgIG15ICRtYXhfd2lkdGggPSAkcmNvbF9oYXNoLT57bWF4X3dpZHRofTsKICAgIG15ICRyd2lkdGhzICAgPSAkcmNvbF9oYXNoLT57cndpZHRoc307CiAgICBteSAkaXhfZmlyc3QgID0gJHJjb2xfaGFzaC0+e2l4X2ZpcnN0fTsKCiAgICAjIGNoZWNrIGZvciBza2lwcGVkIGxpbmVzLCBzaG91bGRuJ3QgaGFwcGVuCiAgICBteSAkbmxpbmVzID0gJGl4X2xhc3QgLSAkaXhfZmlyc3QgKyAxOwogICAgbXkgJG51bSAgICA9IEB7JHJ3aWR0aHN9OwogICAgaWYgKCAkbnVtICE9ICRubGluZXMgKSB7CiAgICAgICAgbXkgJGxpbmUgICAgPSAkcmdyb3VwX2xpbmVzLT5bJGl4X2xhc3RdOwogICAgICAgIG15ICRyZmllbGRzID0gJGxpbmUtPnsncmZpZWxkcyd9OwogICAgICAgIG15ICR0ZXh0ICAgID0gam9pbiBFTVBUWV9TVFJJTkcsIEB7JHJmaWVsZHN9OwogICAgICAgIERFVkVMX01PREUgJiYgRmF1bHQoPDxFT00pOwpXZSBzZWVtIHRvIGhhdmUgbWlzY291bnRlZCBsaW5lcywgcGxlYXNlIGNoZWNrOgpubGluZXM9JG5saW5lcwpudW0gc2F2ZWQ9JG51bQptaW4gd2lkdGg9JG1pbl93aWR0aAptYXggd2lkdGg9JG1heF93aWR0aApqPSRqY29sCml4X2ZpcnN0PSRpeF9maXJzdAppeF9sYXN0PSRpeF9sYXN0CnRleHQ9JHRleHQKRU9NCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgbG9vcCBvdmVyIGFsbCBsaW5lcyBvZiB0aGlzIHZlcnRpY2FsIGFsaWdubWVudCBjb2x1bW4KICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBteSAoCiAgICAgICAgJGN1cnJlbnRfYWxpZ25tZW50LCAkc3RhcnRpbmdfY29scCwKICAgICAgICAkY3VycmVudF9saW5lLCAgICAgIEBwcmV2aW91c19saW5rZWRfbGluZXMKICAgICk7CiAgICBmb3JlYWNoIG15ICRpdGVtICggQHskcndpZHRoc30gKSB7CiAgICAgICAgbXkgKCAkaXgsICR3aWR0aCApID0gQHskaXRlbX07CiAgICAgICAgbXkgJGxpbmUgPSAkcmdyb3VwX2xpbmVzLT5bJGl4XTsKCiAgICAgICAgIyBhZGQgbGVhZGluZyBzcGFjZXMgdG8gdGhlIHNob3J0ZXIgZXF1YWxpdHkgdG9rZW5zIHRvIGdldAogICAgICAgICMgdmVydGljYWwgYWxpZ25tZW50IG9mIHRoZSAnPScgc2lnbnMKICAgICAgICBteSAkam1heCAgPSAkbGluZS0+eydqbWF4J307CiAgICAgICAgbXkgJGpjb2xwID0gJGpjb2wgKyAxOwoKICAgICAgICBteSBAYWxpZ25tZW50cyA9IEB7ICRsaW5lLT57J3JhbGlnbm1lbnRzJ30gfTsKICAgICAgICBteSAkYWxpZ25tZW50ICA9ICRhbGlnbm1lbnRzWyRqY29scF07CiAgICAgICAgbXkgJGNvbHAgICAgICAgPSAkYWxpZ25tZW50LT57Y29sdW1ufTsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgVHJhbnNmZXIgY29sdW1uIHdpZHRoIGNoYW5nZXMgYmV0d2VlbiBlcXVpdmFsZW50IGFsaWdubWVudHMKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICMgVGhpcyBzdGVwIGtlZXBzIGFsaWdubWVudHMgdG8gdGhlIHJpZ2h0IGNvcnJlY3QgaW4gY2FzZSB0aGUKICAgICAgICAjIGFsaWdubWVudCBvYmplY3QgY2hhbmdlcyBidXQgdGhlIGFjdHVhbCBhbGlnbm1lbnQgY29sIGRvZXMgbm90LgogICAgICAgICMgSXQgaXMgZXh0cmVtZWx5IHJhcmUgZm9yIHRoaXMgdG8gb2NjdXIuIElzc3VlIGMzNTMuCgogICAgICAgICMgbm90aGluZyB0byBkbyBpZiBubyBtb3JlIHJlYWwgYWxpZ25tZW50cyBvbiByaWdodAogICAgICAgIGlmICggJGpjb2xwID49ICRqbWF4IC0gMSApIHsKICAgICAgICAgICAgJGN1cnJlbnRfYWxpZ25tZW50ICAgICA9IHVuZGVmOwogICAgICAgICAgICAkY3VycmVudF9saW5lICAgICAgICAgID0gdW5kZWY7CiAgICAgICAgICAgIEBwcmV2aW91c19saW5rZWRfbGluZXMgPSAoKTsKICAgICAgICB9CgogICAgICAgICMgaGFuZGxlIG5ldyByaHMgYWxpZ25tZW50CiAgICAgICAgZWxzaWYgKCAhJGN1cnJlbnRfYWxpZ25tZW50ICkgewogICAgICAgICAgICAkY3VycmVudF9hbGlnbm1lbnQgICAgID0gJGFsaWdubWVudDsKICAgICAgICAgICAgJGN1cnJlbnRfbGluZSAgICAgICAgICA9ICRsaW5lOwogICAgICAgICAgICAkc3RhcnRpbmdfY29scCAgICAgICAgID0gJGNvbHA7CiAgICAgICAgICAgIEBwcmV2aW91c19saW5rZWRfbGluZXMgPSAoKTsKICAgICAgICB9CgogICAgICAgICMgaGFuZGxlIGNoYW5nZSBpbiBleGlzdGluZyBhbGlnbm1lbnQKICAgICAgICBlbHNpZiAoIHJlZmFkZHIoJGFsaWdubWVudCkgIT0gcmVmYWRkcigkY3VycmVudF9hbGlnbm1lbnQpICkgewoKICAgICAgICAgICAgIyBjaGFuZ2UgcmhzIGFsaWdubWVudCBjb2x1bW4gLSBuZXcgdmVydGljYWwgZ3JvdXAgb24gcmlnaHQKICAgICAgICAgICAgaWYgKCAkc3RhcnRpbmdfY29scCAhPSAkY29scCApIHsKICAgICAgICAgICAgICAgICRzdGFydGluZ19jb2xwICAgICAgICAgPSAkY29scDsKICAgICAgICAgICAgICAgIEBwcmV2aW91c19saW5rZWRfbGluZXMgPSAoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIFNhbWUgc3RhcnRpbmcgYWxpZ25tZW50IGNvbCBvbiByaWdodCwgYnV0IGRpZmZlcmVudCBhbGlnbm1lbnQKICAgICAgICAgICAgICAgICMgb2JqZWN0LiBTZWUgaWYgd2UgbXVzdCBpbmNyZWFzZSB3aWR0aCBvZiB0aGlzIG5ldyBhbGlnbm1lbnQKICAgICAgICAgICAgICAgICMgb2JqZWN0LgogICAgICAgICAgICAgICAgbXkgJGN1cnJlbnRfY29scCA9ICRjdXJyZW50X2FsaWdubWVudC0+e2NvbHVtbn07CiAgICAgICAgICAgICAgICBpZiAoICRjdXJyZW50X2NvbHAgPiAkY29scCApIHsKICAgICAgICAgICAgICAgICAgICBteSAkZXhjZXNzID0gJGN1cnJlbnRfY29scCAtICRjb2xwOwogICAgICAgICAgICAgICAgICAgIG15ICRwYWRkaW5nX2F2YWlsYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAkbGluZS0+Z2V0X2F2YWlsYWJsZV9zcGFjZV9vbl9yaWdodCgpOwogICAgICAgICAgICAgICAgICAgIGlmICggJGV4Y2VzcyA8PSAkcGFkZGluZ19hdmFpbGFibGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lLT5pbmNyZWFzZV9maWVsZF93aWR0aCggJGpjb2xwLCAkZXhjZXNzICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb2xwID0gJGFsaWdubWVudC0+e2NvbHVtbn07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgcmVtZW1iZXIgdGhlIHByZXZpb3VzIGxpbmUgaW4gY2FzZSB3ZSBoYXZlIHRvIGdvIGJhY2sgYW5kCiAgICAgICAgICAgICAgICAjIGluY3JlYXNzZSBpdHMgd2lkdGgKICAgICAgICAgICAgICAgIHB1c2ggQHByZXZpb3VzX2xpbmtlZF9saW5lcywgJGN1cnJlbnRfbGluZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkY3VycmVudF9hbGlnbm1lbnQgPSAkYWxpZ25tZW50OwogICAgICAgICAgICAkY3VycmVudF9saW5lICAgICAgPSAkbGluZTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICMgY29udGludWluZyB3aXRoIHNhbWUgYWxpZ25tZW50CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIGFkZCBhbnkgbmVlZGVkIHBhZGRpbmcKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBteSAkcGFkID0gJG1heF93aWR0aCAtICR3aWR0aDsKICAgICAgICBpZiAoICRwYWQgPiAwICkgewoKICAgICAgICAgICAgbXkgJHJmaWVsZHMgICAgICAgID0gJGxpbmUtPnsncmZpZWxkcyd9OwogICAgICAgICAgICBteSAkcmZpZWxkX2xlbmd0aHMgPSAkbGluZS0+eydyZmllbGRfbGVuZ3Rocyd9OwoKICAgICAgICAgICAgbXkgJGxlbnAgICA9ICRyZmllbGRfbGVuZ3Rocy0+WyRqY29scF07CiAgICAgICAgICAgIG15ICRhdmFpbCAgPSAkY29scCAtICRjb2w7CiAgICAgICAgICAgIG15ICRleGNlc3MgPSAkbGVucCArICRwYWQgLSAkYXZhaWw7CgogICAgICAgICAgICBpZiAoICRleGNlc3MgPiAwICkgewoKICAgICAgICAgICAgICAgIG15ICRwYWRkaW5nX2F2YWlsYWJsZSA9ICRsaW5lLT5nZXRfYXZhaWxhYmxlX3NwYWNlX29uX3JpZ2h0KCk7CiAgICAgICAgICAgICAgICBpZiAoICRleGNlc3MgPD0gJHBhZGRpbmdfYXZhaWxhYmxlICkgewogICAgICAgICAgICAgICAgICAgICRsaW5lLT5pbmNyZWFzZV9maWVsZF93aWR0aCggJGpjb2xwLCAkZXhjZXNzICk7CgogICAgICAgICAgICAgICAgICAgICMgSW5jcmVhc2Ugc3BhY2Ugb2YgYW55IHByZXZpb3VzIGxpbmtlZCBsaW5lcwogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggbXkgJGxpbmVfcHJldiAoQHByZXZpb3VzX2xpbmtlZF9saW5lcykgewogICAgICAgICAgICAgICAgICAgICAgICAkcGFkZGluZ19hdmFpbGFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lX3ByZXYtPmdldF9hdmFpbGFibGVfc3BhY2Vfb25fcmlnaHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkZXhjZXNzIDw9ICRwYWRkaW5nX2F2YWlsYWJsZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lX3ByZXYtPmluY3JlYXNlX2ZpZWxkX3dpZHRoKCAkamNvbHAsICRleGNlc3MgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkcGFkID0gMDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgQWRkIHNwYWNlcwogICAgICAgICAgICAkcmZpZWxkcy0+WyRqY29scF0gPSAoIFNQQUNFIHggJHBhZCApIC4gJHJmaWVsZHMtPlskamNvbHBdOwogICAgICAgICAgICAkcmZpZWxkX2xlbmd0aHMtPlskamNvbHBdICs9ICRwYWQ7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgZW5kX3dpZGVfZXF1YWxzX2NvbHVtbgoKc3ViIHBhZF93aWRlX2VxdWFsc19jb2x1bW5zIHsKICAgIG15ICgkcmdyb3VwX2xpbmVzKSA9IEBfOwoKICAgICMgR2l2ZW46CiAgICAjICAgJHJncm91cF9saW5lcyA9IHRoZSBjdXJyZW50IHZlcnRpY2FsIGFsaWdubWVudCBncm91cCBvZiBsaW5lcwogICAgIyBUYXNrOgogICAgIyAgIExvb2sgZm9yIGNvbHVtbnMgb2YgYWxpZ25lZCBlcXVhbHMgdG9rZW5zLCBzb21lIG9mIHdoaWNoIG1heSBiZQogICAgIyAgIHRoaW5ncyBsaWtlICctPScsICcmJj0nLCBldGMuICBJbmNyZWFzZSB0aGUgZmllbGQgbGVuZ3RoIG9mIHRoZQogICAgIyAgIHByZXZpb3VzIGZpZWxkIGJ5IDEgb3IgMiBzcGFjZXMgd2hlcmUgbmVjZXNzYXJ5IGFuZCBwb3NzaWJsZSBzbwogICAgIyAgIHRoYXQgYWxpZ25tZW50IG9mIGFsbCAnPScgb2NjdXJzLiAgRm9yIGV4YW1wbGUsIGdpdmVuCgogICAgIyAgICAgICAkaiAgICAvPSAyOwogICAgIyAgICAgICAkcG93MiA9ICRwb3cyICogJHBvdzI7CgogICAgIyBJbiB0aGlzIGNhc2Ugd2Ugd2FudCB0byBhZGQgYSBsZWFkaW5nIHNwYWNlICc9JyB0ZXJtIHRvIGdldAogICAgIyAgICAgICAkaiAgICAvPSAyOwogICAgIyAgICAgICAkcG93MiAgPSAkcG93MiAqICRwb3cyOwoKICAgICMgVGhlIGxvZ2ljIGhlcmUgaXMgc29tZXdoYXQgc2ltaWxhciB0byBzdWIgcGFkX3NpZ25lZF9udW1iZXJfY29sdW1ucwoKICAgIHJldHVybiB1bmxlc3MgKCRyT3B0c192YWxpZ25fd2lkZV9lcXVhbHMpOwoKICAgIG15ICVjb2x1bW5faW5mbzsKICAgIG15IEBjb2x1bW5zOwoKICAgICMtLS0tLS0tLS0tLS0tLS0tCiAgICAjIGxvb3Agb3ZlciBsaW5lcwogICAgIy0tLS0tLS0tLS0tLS0tLS0KICAgIG15ICRpeF9saW5lID0gLTE7CiAgICBteSAkam1heCAgICA9IC0xOwogICAgZm9yZWFjaCBteSAkbGluZSAoIEB7JHJncm91cF9saW5lc30gKSB7CiAgICAgICAgJGl4X2xpbmUrKzsKICAgICAgICBteSAkam1heF9sYXN0ID0gJGptYXg7CiAgICAgICAgJGptYXggPSAkbGluZS0+eydqbWF4J307CiAgICAgICAgbXkgJGptYXhfY2hhbmdlID0gJGptYXggbmUgJGptYXhfbGFzdDsKCiAgICAgICAgbXkgQGFsaWdubWVudHMgPSBAeyAkbGluZS0+eydyYWxpZ25tZW50cyd9IH07CiAgICAgICAgbXkgJHJmaWVsZHMgICAgPSAkbGluZS0+eydyZmllbGRzJ307CiAgICAgICAgbXkgJHJ0b2tlbnMgICAgPSAkbGluZS0+eydydG9rZW5zJ307CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgQ2hlY2sgZm9yIGEgcmVkdWN0aW9uIGluIHRoZSBudW1iZXIgb2YgY29sdW1ucwogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGlmICggJGptYXggPCAkam1heF9sYXN0ICkgewoKICAgICAgICAgICAgZm9yZWFjaCBteSAkamNvbCAoIGtleXMgJWNvbHVtbl9pbmZvICkgewoKICAgICAgICAgICAgICAgICMgZW5kIGFueSBzdHJhbmRlZCBjb2x1bW5zIG9uIHRoZSByaWdodAogICAgICAgICAgICAgICAgbmV4dCBpZiAoICRqY29sIDwgJGptYXggKTsKICAgICAgICAgICAgICAgIG15ICRyY29sX2hhc2ggPSAkY29sdW1uX2luZm97JGpjb2x9OwogICAgICAgICAgICAgICAgbmV4dCB1bmxlc3MgKCRyY29sX2hhc2gpOwogICAgICAgICAgICAgICAgaWYgKCAkcmNvbF9oYXNoLT57bWF4X3dpZHRofSA+ICRyY29sX2hhc2gtPnttaW5fd2lkdGh9ICkgewogICAgICAgICAgICAgICAgICAgIGVuZF93aWRlX2VxdWFsc19jb2x1bW4oICRyZ3JvdXBfbGluZXMsICRyY29sX2hhc2gsCiAgICAgICAgICAgICAgICAgICAgICAgICRpeF9saW5lIC0gMSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZGVsZXRlICRjb2x1bW5faW5mb3skamNvbH07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgTG9vcCBvdmVyIGZpZWxkcyBleGNlcHQgbGFzdCBmaWVsZCAoc2lkZSBjb21tZW50KQogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGZvciBteSAkamNvbCAoIDAgLi4gJGptYXggLSAxICkgewoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgRGVjaWRlIGlmIHRoaXMgaXMgYSBuZXcgYWxpZ25tZW50IGNvbHVtbgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgbXkgJGFsaWdubWVudCA9ICRhbGlnbm1lbnRzWyRqY29sXTsKICAgICAgICAgICAgbXkgJG9sZF9jb2wgICA9ICRjb2x1bW5zWyRqY29sXTsKICAgICAgICAgICAgbXkgJGNvbCAgICAgICA9ICRhbGlnbm1lbnQtPntjb2x1bW59OwogICAgICAgICAgICAkY29sdW1uc1skamNvbF0gPSAkY29sOwogICAgICAgICAgICBpZiAoIGRlZmluZWQoJG9sZF9jb2wpICYmICRvbGRfY29sICE9ICRjb2wgKSB7CiAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRqY29sX29sZCAoIGtleXMgJWNvbHVtbl9pbmZvICkgewogICAgICAgICAgICAgICAgICAgIG5leHQgaWYgKCAkamNvbF9vbGQgPCAkamNvbCApOwogICAgICAgICAgICAgICAgICAgIG15ICRyY29sX2hhc2ggPSAkY29sdW1uX2luZm97JGpjb2xfb2xkfTsKICAgICAgICAgICAgICAgICAgICBpZiAoICRyY29sX2hhc2gtPnttYXhfd2lkdGh9ID4gJHJjb2xfaGFzaC0+e21pbl93aWR0aH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVuZF93aWRlX2VxdWFsc19jb2x1bW4oICRyZ3JvdXBfbGluZXMsICRyY29sX2hhc2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXhfbGluZSAtIDEgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZGVsZXRlICRjb2x1bW5faW5mb3skamNvbF9vbGR9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIEEgbmV3IHdpZGUgZXF1YWxzIGNvbHVtbiBjYW4gb25seSBzdGFydCBhdCBhbiBhbGlnbm1lbnQgY2hhbmdlCiAgICAgICAgICAgIG15ICRyY29sX2hhc2ggPSAkY29sdW1uX2luZm97JGpjb2x9OwoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIEV4YW1pbmUgdGhpcyBmaWVsZCwgbG9va2luZyBmb3IgZXF1YWxzIG9yIHdpZGUgZXF1YWxzCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgbXkgJGZpZWxkX25leHQgPSAkcmZpZWxkcy0+WyAkamNvbCArIDEgXTsKICAgICAgICAgICAgbXkgJHRva2VuICAgICAgPSAkcnRva2Vucy0+WyRqY29sXTsKCiAgICAgICAgICAgICMgU2VlIGlmIHRoaXMgaXMgYW4gZXF1YWxzIGFsaWdubWVudCBncm91cDsKICAgICAgICAgICAgIyBpbmRpY2F0ZWQgYnkgYWxpZ25tZW50IHRva2VuIG9mICc9JyBmb2xsb3dlZCBieSBhIGRpZ2l0CiAgICAgICAgICAgIG15ICRsZW5fZXF1YWxzX3N5bWJvbCA9IDA7CiAgICAgICAgICAgIGlmICggICBsZW5ndGgoJHRva2VuKSA+IDEKICAgICAgICAgICAgICAgICYmIHN1YnN0ciggJHRva2VuLCAwLCAxICkgZXEgJz0nCiAgICAgICAgICAgICAgICAmJiAkaXNfZGlnaXRfY2hhcnsgc3Vic3RyKCAkdG9rZW4sIDEsIDEgKSB9ICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICMgZmluZCB0aGUgYWN0dWFsIGVxdWFsaXR5IHN5bWJvbCB3aGljaCBzdGFydHMgdGhlIG5leHQgZmllbGQKICAgICAgICAgICAgICAgICMgaS5lLiAnPScgb3IgJyoqPScgb3IgJy09JyBldGMuIFdlIGp1c3QgbmVlZCBpdHMgbGVuZ3RoLgogICAgICAgICAgICAgICAgbXkgJHBvcyA9IGluZGV4KCAkZmllbGRfbmV4dCwgJz0nICk7CiAgICAgICAgICAgICAgICBpZiAoICRwb3MgPj0gMCAmJiAkcG9zIDw9IDIgKSB7CiAgICAgICAgICAgICAgICAgICAgJGxlbl9lcXVhbHNfc3ltYm9sID0gJHBvcyArIDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaWYgYSBjb2x1bW4gaGFzIG5vdCBzdGFydGVkLi4KICAgICAgICAgICAgaWYgKCAhJHJjb2xfaGFzaCApIHsKCiAgICAgICAgICAgICAgICAjIGdpdmUgdXAgaWYgdGhpcyBpcyBjYW5ub3Qgc3RhcnQgYSBuZXcgY29sdW1uCiAgICAgICAgICAgICAgICBuZXh0IGlmICggISRsZW5fZXF1YWxzX3N5bWJvbCApOwoKICAgICAgICAgICAgICAgICMgb3RoZXJ3aXNlIGNvbnRpbnVlIG9uIHRvIHN0YXJ0IGEgbmV3IGNvbHVtbgoKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpZiBhIGNvbHVtbiBoYXMgYmVlbiBzdGFydGVkLi4uCiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgYW5kIHRoaXMgY2Fubm90IGJlIGFkZGVkIHRvIGl0CiAgICAgICAgICAgICAgICBpZiAoICEkbGVuX2VxdWFsc19zeW1ib2wgfHwgJHJjb2xfaGFzaC0+e2NvbH0gbmUgJGNvbCApIHsKCiAgICAgICAgICAgICAgICAgICAgIyB0aGVuIGVuZCB0aGUgY3VycmVudCBjb2x1bW4gYW5kIHN0YXJ0IG92ZXIKICAgICAgICAgICAgICAgICAgICBpZiAoICRyY29sX2hhc2gtPnttYXhfd2lkdGh9ID4gJHJjb2xfaGFzaC0+e21pbl93aWR0aH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVuZF93aWRlX2VxdWFsc19jb2x1bW4oICRyZ3JvdXBfbGluZXMsICRyY29sX2hhc2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXhfbGluZSAtIDEgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZGVsZXRlICRjb2x1bW5faW5mb3skamNvbH07CiAgICAgICAgICAgICAgICAgICAgJHJjb2xfaGFzaCA9IHVuZGVmOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoREVCVUdfV0VDKSB7CiAgICAgICAgICAgICAgICBteSAkZXhpc3RzID0gZGVmaW5lZCgkcmNvbF9oYXNoKTsKICAgICAgICAgICAgICAgIHByaW50CiJXRUE6IGxpbmU9JGl4X2xpbmUgY2hhbmdlPSRqbWF4X2NoYW5nZSBqY29sPSRqY29sIGZpZWxkPSRmaWVsZF9uZXh0IGV4aXN0cz89JGV4aXN0cyBlcXVhbHM/PSRsZW5fZXF1YWxzX3N5bWJvbFxuIjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIEVpdGhlciBzdGFydCBhIG5ldyBjb2x1bW4sIGlmIHBvc3NpYmxlCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkcmNvbF9oYXNoKSApIHsKCiAgICAgICAgICAgICAgICBuZXh0IGlmICggISRsZW5fZXF1YWxzX3N5bWJvbCApOwoKICAgICAgICAgICAgICAgICRjb2x1bW5faW5mb3skamNvbH0gPSB7CiAgICAgICAgICAgICAgICAgICAgaXhfZmlyc3QgID0+ICRpeF9saW5lLAogICAgICAgICAgICAgICAgICAgIGNvbCAgICAgICA9PiAkY29sLAogICAgICAgICAgICAgICAgICAgIGpjb2wgICAgICA9PiAkamNvbCwKICAgICAgICAgICAgICAgICAgICBtaW5fd2lkdGggPT4gJGxlbl9lcXVhbHNfc3ltYm9sLAogICAgICAgICAgICAgICAgICAgIG1heF93aWR0aCA9PiAkbGVuX2VxdWFsc19zeW1ib2wsCiAgICAgICAgICAgICAgICAgICAgcndpZHRocyAgID0+IFsgWyAkaXhfbGluZSwgJGxlbl9lcXVhbHNfc3ltYm9sIF0gXSwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgIyBvciBleHRlbmQgdGhlIGV4aXN0aW5nIGNvbHVtbgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCAkbGVuX2VxdWFsc19zeW1ib2wgPiAkcmNvbF9oYXNoLT57bWF4X3dpZHRofSApIHsKICAgICAgICAgICAgICAgICAgICAkcmNvbF9oYXNoLT57bWF4X3dpZHRofSA9ICRsZW5fZXF1YWxzX3N5bWJvbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICggJGxlbl9lcXVhbHNfc3ltYm9sIDwgJHJjb2xfaGFzaC0+e21pbl93aWR0aH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJHJjb2xfaGFzaC0+e21pbl93aWR0aH0gPSAkbGVuX2VxdWFsc19zeW1ib2w7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBwdXNoIEB7ICRyY29sX2hhc2gtPntyd2lkdGhzfSB9LAogICAgICAgICAgICAgICAgICBbICRpeF9saW5lLCAkbGVuX2VxdWFsc19zeW1ib2wgXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBMb29wIHRvIGZpbmlzaCBhbnkgcmVtYWluaW5nIGNvbHVtbnMKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmb3JlYWNoIG15ICRqY29sICgga2V5cyAlY29sdW1uX2luZm8gKSB7CiAgICAgICAgbXkgJHJjb2xfaGFzaCA9ICRjb2x1bW5faW5mb3skamNvbH07CiAgICAgICAgaWYgKCAkcmNvbF9oYXNoLT57bWF4X3dpZHRofSA+ICRyY29sX2hhc2gtPnttaW5fd2lkdGh9ICkgewogICAgICAgICAgICBlbmRfd2lkZV9lcXVhbHNfY29sdW1uKCAkcmdyb3VwX2xpbmVzLCAkcmNvbF9oYXNoLCAkaXhfbGluZSApOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHBhZF93aWRlX2VxdWFsc19jb2x1bW5zCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQ09ERSBTRUNUSU9OIDg6IE91dHB1dCBTdGVwIEEKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKc3ViIHZhbGlnbl9vdXRwdXRfc3RlcF9BIHsKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFRoaXMgaXMgU3RlcCBBIGluIHdyaXRpbmcgdmVydGljYWxseSBhbGlnbmVkIGxpbmVzLgogICAgIyBUaGUgbGluZSBpcyBwcmVwYXJlZCBhY2NvcmRpbmcgdG8gdGhlIGFsaWdubWVudHMgd2hpY2ggaGF2ZQogICAgIyBiZWVuIGZvdW5kLiBUaGVuIGl0IGlzIHNoaXBwZWQgdG8gdGhlIG5leHQgc3RlcC4KICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBteSAoICRzZWxmLCAkcmlucHV0X2hhc2ggKSA9IEBfOwoKICAgIG15ICRsaW5lICAgICAgICAgICAgICAgICA9ICRyaW5wdXRfaGFzaC0+e2xpbmV9OwogICAgbXkgJG1pbl9jaV9nYXAgICAgICAgICAgID0gJHJpbnB1dF9oYXNoLT57bWluX2NpX2dhcH07CiAgICBteSAkZG9fbm90X2FsaWduICAgICAgICAgPSAkcmlucHV0X2hhc2gtPntkb19ub3RfYWxpZ259OwogICAgbXkgJGdyb3VwX2xlYWRlcl9sZW5ndGggID0gJHJpbnB1dF9oYXNoLT57Z3JvdXBfbGVhZGVyX2xlbmd0aH07CiAgICBteSAkZXh0cmFfbGVhZGluZ19zcGFjZXMgPSAkcmlucHV0X2hhc2gtPntleHRyYV9sZWFkaW5nX3NwYWNlc307CiAgICBteSAkbGV2ZWwgICAgICAgICAgICAgICAgPSAkcmlucHV0X2hhc2gtPntsZXZlbH07CiAgICBteSAkbWF4aW11bV9saW5lX2xlbmd0aCAgPSAkcmlucHV0X2hhc2gtPnttYXhpbXVtX2xpbmVfbGVuZ3RofTsKCiAgICBteSAkcmZpZWxkcyAgICAgICAgICAgICAgICAgICA9ICRsaW5lLT57J3JmaWVsZHMnfTsKICAgIG15ICRyZmllbGRfbGVuZ3RocyAgICAgICAgICAgID0gJGxpbmUtPnsncmZpZWxkX2xlbmd0aHMnfTsKICAgIG15ICRsZWFkaW5nX3NwYWNlX2NvdW50ICAgICAgID0gJGxpbmUtPnsnbGVhZGluZ19zcGFjZV9jb3VudCd9OwogICAgbXkgJG91dGRlbnRfbG9uZ19saW5lcyAgICAgICAgPSAkbGluZS0+eydvdXRkZW50X2xvbmdfbGluZXMnfTsKICAgIG15ICRtYXhpbXVtX2ZpZWxkX2luZGV4ICAgICAgID0gJGxpbmUtPnsnam1heCd9OwogICAgbXkgJHJ2ZXJ0aWNhbF90aWdodG5lc3NfZmxhZ3MgPSAkbGluZS0+eydydmVydGljYWxfdGlnaHRuZXNzX2ZsYWdzJ307CiAgICBteSAkS2VuZCAgICAgICAgICAgICAgICAgICAgICA9ICRsaW5lLT57J0tlbmQnfTsKICAgIG15ICRsZXZlbF9lbmQgICAgICAgICAgICAgICAgID0gJGxpbmUtPnsnbGV2ZWxfZW5kJ307CgogICAgIyBDaGVjayBmb3IgdmFsaWQgaGFzaCBrZXlzIGF0IGVuZCBvZiBsaWZldGltZSBvZiAkbGluZSBkdXJpbmcgZGV2ZWxvcG1lbnQKICAgIERFVkVMX01PREUKICAgICAgJiYgY2hlY2tfa2V5cyggJGxpbmUsIFwldmFsaWRfTElORV9rZXlzLAogICAgICAgICJDaGVja2luZyBsaW5lIGtleXMgYXQgdmFsaWduX291dHB1dF9zdGVwX0EiLCAxICk7CgogICAgIyBhZGQgYW55IGV4dHJhIHNwYWNlcwogICAgaWYgKCAkbGVhZGluZ19zcGFjZV9jb3VudCA+ICRncm91cF9sZWFkZXJfbGVuZ3RoICkgewogICAgICAgICRsZWFkaW5nX3NwYWNlX2NvdW50ICs9ICRtaW5fY2lfZ2FwOwogICAgfQoKICAgIG15ICRzdHIgICAgID0gJHJmaWVsZHMtPlswXTsKICAgIG15ICRzdHJfbGVuID0gJHJmaWVsZF9sZW5ndGhzLT5bMF07CgogICAgbXkgQGFsaWdubWVudHMgPSBAeyAkbGluZS0+eydyYWxpZ25tZW50cyd9IH07CiAgICBpZiAoIEBhbGlnbm1lbnRzICE9ICRtYXhpbXVtX2ZpZWxkX2luZGV4ICsgMSApIHsKCiAgICAgICAgIyBTaG91bGRuJ3QgaGFwcGVuOiBzdWIgaW5zdGFsbF9uZXdfYWxpZ25tZW50cyBtYWtlcyBqbWF4IGFsaWdubWVudHMKICAgICAgICBteSAkam1heF9hbGlnbm1lbnRzID0gQGFsaWdubWVudHMgLSAxOwogICAgICAgIGlmIChERVZFTF9NT0RFKSB7CiAgICAgICAgICAgIEZhdWx0KAoiYWxpZ25tZW50IGptYXg9JGptYXhfYWxpZ25tZW50cyBzaG91bGQgZXF1YWwgJG1heGltdW1fZmllbGRfaW5kZXhcbiIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJGRvX25vdF9hbGlnbiA9IDE7CiAgICB9CgogICAgIyBsb29wIHRvIGNvbmNhdGVuYXRlIGFsbCBmaWVsZHMgb2YgdGhpcyBsaW5lIGFuZCBuZWVkZWQgcGFkZGluZwogICAgbXkgJHRvdGFsX3BhZF9jb3VudCA9IDA7CiAgICBmb3IgbXkgJGogKCAxIC4uICRtYXhpbXVtX2ZpZWxkX2luZGV4ICkgewoKICAgICAgICAjIHNraXAgemVyby1sZW5ndGggc2lkZSBjb21tZW50cwogICAgICAgIGxhc3QKICAgICAgICAgIGlmICgKICAgICAgICAgICAgKCAkaiA9PSAkbWF4aW11bV9maWVsZF9pbmRleCApCiAgICAgICAgICAgICYmICggIWRlZmluZWQoICRyZmllbGRzLT5bJGpdICkKICAgICAgICAgICAgICAgIHx8ICggJHJmaWVsZF9sZW5ndGhzLT5bJGpdID09IDAgKSApCiAgICAgICAgICApOwoKICAgICAgICAjIGNvbXB1dGUgc3BhY2VzIG9mIHBhZGRpbmcgYmVmb3JlIHRoaXMgZmllbGQKICAgICAgICBteSAkY29sID0gJGFsaWdubWVudHNbICRqIC0gMSBdLT57J2NvbHVtbid9OwogICAgICAgIG15ICRwYWQgPSAkY29sIC0gKCAkc3RyX2xlbiArICRsZWFkaW5nX3NwYWNlX2NvdW50ICk7CgogICAgICAgIGlmICgkZG9fbm90X2FsaWduKSB7CiAgICAgICAgICAgICRwYWQgPQogICAgICAgICAgICAgICggJGogPCAkbWF4aW11bV9maWVsZF9pbmRleCApCiAgICAgICAgICAgICAgPyAwCiAgICAgICAgICAgICAgOiAkck9wdHNfbWluaW11bV9zcGFjZV90b19jb21tZW50IC0gMTsKICAgICAgICB9CgogICAgICAgICMgaWYgdGhlIC1mcHNjIGZsYWcgaXMgc2V0LCBtb3ZlIHRoZSBzaWRlIGNvbW1lbnQgdG8gdGhlIHNlbGVjdGVkCiAgICAgICAgIyBjb2x1bW4gaWYgYW5kIG9ubHkgaWYgaXQgaXMgcG9zc2libGUsIGlnbm9yaW5nIGNvbnN0cmFpbnRzIG9uCiAgICAgICAgIyBsaW5lIGxlbmd0aCBhbmQgbWluaW11bSBzcGFjZSB0byBjb21tZW50CiAgICAgICAgaWYgKCAgICRyT3B0c19maXhlZF9wb3NpdGlvbl9zaWRlX2NvbW1lbnQKICAgICAgICAgICAgJiYgJGogPT0gJG1heGltdW1fZmllbGRfaW5kZXggKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJG5ld3BhZCA9ICRwYWQgKyAkck9wdHNfZml4ZWRfcG9zaXRpb25fc2lkZV9jb21tZW50IC0gJGNvbCAtIDE7CiAgICAgICAgICAgIGlmICggJG5ld3BhZCA+PSAwICkgeyAkcGFkID0gJG5ld3BhZDsgfQogICAgICAgIH0KCiAgICAgICAgIyBhY2N1bXVsYXRlIHRoZSBwYWRkaW5nCiAgICAgICAgaWYgKCAkcGFkID4gMCApIHsgJHRvdGFsX3BhZF9jb3VudCArPSAkcGFkOyB9CgogICAgICAgICMgb25seSBhZGQgcGFkZGluZyB3aGVuIHdlIGhhdmUgYSBmaW5pdGUgZmllbGQ7CiAgICAgICAgIyB0aGlzIGF2b2lkcyBleHRyYSB0ZXJtaW5hbCBzcGFjZXMgaWYgd2UgaGF2ZSBlbXB0eSBmaWVsZHMKICAgICAgICBpZiAoICRyZmllbGRfbGVuZ3Rocy0+WyRqXSA+IDAgKSB7CiAgICAgICAgICAgICRzdHIgLj0gU1BBQ0UgeCAkdG90YWxfcGFkX2NvdW50OwogICAgICAgICAgICAkc3RyX2xlbiArPSAkdG90YWxfcGFkX2NvdW50OwogICAgICAgICAgICAkdG90YWxfcGFkX2NvdW50ID0gMDsKICAgICAgICAgICAgJHN0ciAuPSAkcmZpZWxkcy0+WyRqXTsKICAgICAgICAgICAgJHN0cl9sZW4gKz0gJHJmaWVsZF9sZW5ndGhzLT5bJGpdOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJHRvdGFsX3BhZF9jb3VudCA9IDA7CiAgICAgICAgfQogICAgfQoKICAgIG15ICRzaWRlX2NvbW1lbnRfbGVuZ3RoID0gJHJmaWVsZF9sZW5ndGhzLT5bJG1heGltdW1fZmllbGRfaW5kZXhdOwoKICAgICMgc2hpcCB0aGlzIGxpbmUgb2ZmCiAgICAkc2VsZi0+dmFsaWduX291dHB1dF9zdGVwX0IoCiAgICAgICAgewogICAgICAgICAgICBsZWFkaW5nX3NwYWNlX2NvdW50ID0+ICRsZWFkaW5nX3NwYWNlX2NvdW50ICsgJGV4dHJhX2xlYWRpbmdfc3BhY2VzLAogICAgICAgICAgICBsaW5lICAgICAgICAgICAgICAgID0+ICRzdHIsCiAgICAgICAgICAgIGxpbmVfbGVuZ3RoICAgICAgICAgPT4gJHN0cl9sZW4sCiAgICAgICAgICAgIHNpZGVfY29tbWVudF9sZW5ndGggPT4gJHNpZGVfY29tbWVudF9sZW5ndGgsCiAgICAgICAgICAgIG91dGRlbnRfbG9uZ19saW5lcyAgPT4gJG91dGRlbnRfbG9uZ19saW5lcywKICAgICAgICAgICAgcnZlcnRpY2FsX3RpZ2h0bmVzc19mbGFncyA9PiAkcnZlcnRpY2FsX3RpZ2h0bmVzc19mbGFncywKICAgICAgICAgICAgbGV2ZWwgICAgICAgICAgICAgICAgICAgICA9PiAkbGV2ZWwsCiAgICAgICAgICAgIGxldmVsX2VuZCAgICAgICAgICAgICAgICAgPT4gJGxldmVsX2VuZCwKICAgICAgICAgICAgS2VuZCAgICAgICAgICAgICAgICAgICAgICA9PiAkS2VuZCwKICAgICAgICAgICAgbWF4aW11bV9saW5lX2xlbmd0aCAgICAgICA9PiAkbWF4aW11bV9saW5lX2xlbmd0aCwKICAgICAgICB9CiAgICApOwogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgdmFsaWduX291dHB1dF9zdGVwX0EKCnN1YiBjb21iaW5lX2ZpZWxkcyB7CgogICAgbXkgKCAkbGluZV8wLCAkbGluZV8xLCAkaW1heF9hbGlnbiApID0gQF87CgogICAgIyBHaXZlbjoKICAgICMgICAkbGluZV8wLCAkbGluZV8xID0gdHdvIGFkamFjZW50IGxpbmVzCiAgICAjICAgJGltYXhfYWxpZ24gPSBpbmRleCBvZiBsYXN0IGFsaWdubWVudCB3YW50ZWQKCiAgICAjIFRhc2s6CiAgICAjIFdlIGhhdmUgYSBncm91cCBvZiB0d28gbGluZXMgZm9yIHdoaWNoIHdlIGRvIG5vdCB3YW50IHRvIGFsaWduIHRva2VucwogICAgIyBiZXR3ZWVuIGluZGV4ICRpbWF4X2FsaWduIGFuZCB0aGUgc2lkZSBjb21tZW50LiAgU28gd2Ugd2lsbCBkZWxldGUgZmllbGRzCiAgICAjIGJldHdlZW4gJGltYXhfYWxpZ24gYW5kIHRoZSBzaWRlIGNvbW1lbnQuICBBbGlnbm1lbnRzIGhhdmUgYWxyZWFkeQogICAgIyBiZWVuIHNldCBzbyB3ZSBoYXZlIHRvIGFkanVzdCB0aGVtLgoKICAgIGlmICggIWRlZmluZWQoJGltYXhfYWxpZ24pICkgeyAkaW1heF9hbGlnbiA9IC0xIH0KCiAgICAjIEZpcnN0IGRlbGV0ZSB0aGUgdW53YW50ZWQgdG9rZW5zCiAgICBteSAkam1heF9vbGQgPSAkbGluZV8wLT57J2ptYXgnfTsKICAgIG15IEBpZGVsICAgICA9ICggJGltYXhfYWxpZ24gKyAxIC4uICRqbWF4X29sZCAtIDIgKTsKICAgIHJldHVybiBpZiAoICFAaWRlbCApOwoKICAgICMgR2V0IG9sZCBhbGlnbm1lbnRzIGJlZm9yZSBhbnkgY2hhbmdlcyBhcmUgbWFkZQogICAgbXkgQG9sZF9hbGlnbm1lbnRzID0gQHsgJGxpbmVfMC0+eydyYWxpZ25tZW50cyd9IH07CgogICAgZm9yZWFjaCBteSAkbGluZSAoICRsaW5lXzAsICRsaW5lXzEgKSB7CiAgICAgICAgZGVsZXRlX3NlbGVjdGVkX3Rva2VucyggJGxpbmUsIFxAaWRlbCApOwogICAgfQoKICAgICMgTm93IGFkanVzdCB0aGUgYWxpZ25tZW50cy4gIE5vdGUgdGhhdCB0aGUgc2lkZSBjb21tZW50IGFsaWdubWVudAogICAgIyBpcyBhbHdheXMgYXQgam1heC0xLCBhbmQgdGhlcmUgaXMgYW4gZW5kaW5nIGFsaWdubWVudCBhdCBqbWF4LgogICAgbXkgQG5ld19hbGlnbm1lbnRzOwogICAgaWYgKCAkaW1heF9hbGlnbiA+PSAwICkgewogICAgICAgIEBuZXdfYWxpZ25tZW50c1sgMCAuLiAkaW1heF9hbGlnbiBdID0KICAgICAgICAgIEBvbGRfYWxpZ25tZW50c1sgMCAuLiAkaW1heF9hbGlnbiBdOwogICAgfQoKICAgIG15ICRqbWF4X25ldyA9ICRsaW5lXzAtPnsnam1heCd9OwoKICAgICRuZXdfYWxpZ25tZW50c1sgJGptYXhfbmV3IC0gMSBdID0gJG9sZF9hbGlnbm1lbnRzWyAkam1heF9vbGQgLSAxIF07CiAgICAkbmV3X2FsaWdubWVudHNbJGptYXhfbmV3XSAgICAgICA9ICRvbGRfYWxpZ25tZW50c1skam1heF9vbGRdOwogICAgJGxpbmVfMC0+eydyYWxpZ25tZW50cyd9ICAgICAgICAgPSBcQG5ld19hbGlnbm1lbnRzOwogICAgJGxpbmVfMS0+eydyYWxpZ25tZW50cyd9ICAgICAgICAgPSBcQG5ld19hbGlnbm1lbnRzOwogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgY29tYmluZV9maWVsZHMKCnN1YiBnZXRfb3V0cHV0X2xpbmVfbnVtYmVyIHsKCiAgICAjIFJldHVybiB0aGUgb3V0cHV0IGxpbmUgbnVtYmVyIHRvIGV4dGVybmFsIG1vZHVsZXMuCiAgICAjIFRoZSBvdXRwdXQgbGluZSBudW1iZXIgcmVwb3J0ZWQgdG8gYSBjYWxsZXIgPQogICAgIyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHN0aWxsIGluIHRoZSBidWZmZXIgKwogICAgIyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHdyaXR0ZW4uCiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgcmV0dXJuICRzZWxmLT5ncm91cF9saW5lX2NvdW50KCkgKwogICAgICAkc2VsZi0+W19maWxlX3dyaXRlcl9vYmplY3RfXS0+Z2V0X291dHB1dF9saW5lX251bWJlcigpOwp9ICMjIGVuZCBzdWIgZ2V0X291dHB1dF9saW5lX251bWJlcgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIENPREUgU0VDVElPTiA5OiBPdXRwdXQgU3RlcCBCCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnsgICAgIyMgY2xvc3VyZSBmb3Igc3ViIHZhbGlnbl9vdXRwdXRfc3RlcF9CCgogICAgIyBUaGVzZSBhcmUgdmFsdWVzIGZvciBhIGNhY2hlIHVzZWQgYnkgdmFsaWduX291dHB1dF9zdGVwX0IuCiAgICBteSAkY2FjaGVkX2xpbmVfdGV4dDsKICAgIG15ICRjYWNoZWRfbGluZV90ZXh0X2xlbmd0aDsKICAgIG15ICRjYWNoZWRfbGluZV90eXBlOwogICAgbXkgJGNhY2hlZF9saW5lX29wZW5pbmdfZmxhZzsKICAgIG15ICRjYWNoZWRfbGluZV9jbG9zaW5nX2ZsYWc7CiAgICBteSAkY2FjaGVkX3NlcW5vOwogICAgbXkgJGNhY2hlZF9saW5lX3ZhbGlkOwogICAgbXkgJGNhY2hlZF9saW5lX2xlYWRpbmdfc3BhY2VfY291bnQ7CiAgICBteSAkY2FjaGVkX3NlcW5vX3N0cmluZzsKICAgIG15ICRjYWNoZWRfbGluZV9LZW5kOwogICAgbXkgJGNhY2hlZF9saW5lX21heGltdW1fbGVuZ3RoOwoKICAgICMgVGhlc2UgYXJlIHBhc3NlZCB0byBzdGVwX0M6CiAgICBteSAkc2Vxbm9fc3RyaW5nOwogICAgbXkgJGxhc3Rfbm9uYmxhbmtfc2Vxbm9fc3RyaW5nOwoKICAgIHN1YiBzZXRfbGFzdF9ub25ibGFua19zZXFub19zdHJpbmcgewogICAgICAgIG15ICgkdmFsKSA9IEBfOwogICAgICAgICRsYXN0X25vbmJsYW5rX3NlcW5vX3N0cmluZyA9ICR2YWw7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHN1YiBnZXRfY2FjaGVkX2xpbmVfb3BlbmluZ19mbGFnIHsKICAgICAgICByZXR1cm4gJGNhY2hlZF9saW5lX29wZW5pbmdfZmxhZzsKICAgIH0KCiAgICBzdWIgZ2V0X2NhY2hlZF9saW5lX3R5cGUgewogICAgICAgIHJldHVybiAkY2FjaGVkX2xpbmVfdHlwZTsKICAgIH0KCiAgICBzdWIgc2V0X2NhY2hlZF9saW5lX3ZhbGlkIHsKICAgICAgICBteSAoJHZhbCkgPSBAXzsKICAgICAgICAkY2FjaGVkX2xpbmVfdmFsaWQgPSAkdmFsOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBzdWIgZ2V0X2NhY2hlZF9zZXFubyB7CiAgICAgICAgcmV0dXJuICRjYWNoZWRfc2Vxbm87CiAgICB9CgogICAgc3ViIGluaXRpYWxpemVfc3RlcF9CX2NhY2hlIHsKCiAgICAgICAgIyB2YWxpZ25fb3V0cHV0X3N0ZXBfQiBjYWNoZToKICAgICAgICAkY2FjaGVkX2xpbmVfdGV4dCAgICAgICAgICAgICAgICA9IEVNUFRZX1NUUklORzsKICAgICAgICAkY2FjaGVkX2xpbmVfdGV4dF9sZW5ndGggICAgICAgICA9IDA7CiAgICAgICAgJGNhY2hlZF9saW5lX3R5cGUgICAgICAgICAgICAgICAgPSAwOwogICAgICAgICRjYWNoZWRfbGluZV9vcGVuaW5nX2ZsYWcgICAgICAgID0gMDsKICAgICAgICAkY2FjaGVkX2xpbmVfY2xvc2luZ19mbGFnICAgICAgICA9IDA7CiAgICAgICAgJGNhY2hlZF9zZXFubyAgICAgICAgICAgICAgICAgICAgPSAwOwogICAgICAgICRjYWNoZWRfbGluZV92YWxpZCAgICAgICAgICAgICAgID0gMDsKICAgICAgICAkY2FjaGVkX2xpbmVfbGVhZGluZ19zcGFjZV9jb3VudCA9IDA7CiAgICAgICAgJGNhY2hlZF9zZXFub19zdHJpbmcgICAgICAgICAgICAgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgJGNhY2hlZF9saW5lX0tlbmQgICAgICAgICAgICAgICAgPSB1bmRlZjsKICAgICAgICAkY2FjaGVkX2xpbmVfbWF4aW11bV9sZW5ndGggICAgICA9IHVuZGVmOwoKICAgICAgICAjIFRoZXNlIHZhcnMgaG9sZCBhIHN0cmluZyBvZiBzZXF1ZW5jZSBudW1iZXJzIGpvaW5lZCB0b2dldGhlciB1c2VkIGJ5CiAgICAgICAgIyB0aGUgY2FjaGUKICAgICAgICAkc2Vxbm9fc3RyaW5nICAgICAgICAgICAgICAgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgJGxhc3Rfbm9uYmxhbmtfc2Vxbm9fc3RyaW5nID0gRU1QVFlfU1RSSU5HOwogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBpbml0aWFsaXplX3N0ZXBfQl9jYWNoZQoKICAgIHN1YiBfZmx1c2hfc3RlcF9CX2NhY2hlIHsKICAgICAgICBteSAoJHNlbGYpID0gQF87CgogICAgICAgICMgU2VuZCBhbnkgdGV4dCBpbiB0aGUgc3RlcF9CIGNhY2hlIG9uIHRvIHN0ZXBfQwogICAgICAgIGlmICgkY2FjaGVkX2xpbmVfdHlwZSkgewogICAgICAgICAgICAkc2Vxbm9fc3RyaW5nID0gJGNhY2hlZF9zZXFub19zdHJpbmc7CiAgICAgICAgICAgICRzZWxmLT52YWxpZ25fb3V0cHV0X3N0ZXBfQygKICAgICAgICAgICAgICAgICRzZXFub19zdHJpbmcsCiAgICAgICAgICAgICAgICAkbGFzdF9ub25ibGFua19zZXFub19zdHJpbmcsCgogICAgICAgICAgICAgICAgJGNhY2hlZF9saW5lX3RleHQsCiAgICAgICAgICAgICAgICAkY2FjaGVkX2xpbmVfbGVhZGluZ19zcGFjZV9jb3VudCwKICAgICAgICAgICAgICAgICRzZWxmLT5bX2xhc3RfbGV2ZWxfd3JpdHRlbl9dLAogICAgICAgICAgICAgICAgJGNhY2hlZF9saW5lX0tlbmQsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRjYWNoZWRfbGluZV90eXBlICAgICAgICAgICA9IDA7CiAgICAgICAgICAgICRjYWNoZWRfbGluZV90ZXh0ICAgICAgICAgICA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgJGNhY2hlZF9saW5lX3RleHRfbGVuZ3RoICAgID0gMDsKICAgICAgICAgICAgJGNhY2hlZF9zZXFub19zdHJpbmcgICAgICAgID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICAkY2FjaGVkX2xpbmVfS2VuZCAgICAgICAgICAgPSB1bmRlZjsKICAgICAgICAgICAgJGNhY2hlZF9saW5lX21heGltdW1fbGVuZ3RoID0gdW5kZWY7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBfZmx1c2hfc3RlcF9CX2NhY2hlCgogICAgc3ViIGhhbmRsZV9jYWNoZWRfbGluZSB7CgogICAgICAgIG15ICggJHNlbGYsICRyaW5wdXQsICRsZWFkaW5nX3N0cmluZywgJGxlYWRpbmdfc3RyaW5nX2xlbmd0aCApID0gQF87CgogICAgICAgICMgaGFuZGxlIGEgY2FjaGVkIGxpbmUgLi4KICAgICAgICAjIGVpdGhlciBhcHBlbmQgdGhlIGN1cnJlbnQgbGluZSB0byBpdCBvciB3cml0ZSBpdCBvdXQKCiAgICAgICAgIyBUaGUgY2FjaGVkIGxpbmUgd2lsbCBlaXRoZXIgYmU6CiAgICAgICAgIyAtIHBhc3NlZCBhbG9uZyB0byBzdGVwX0MsIG9yCiAgICAgICAgIyAtIG9yIGNvbWJpbmVkIHdpdGggdGhlIGN1cnJlbnQgbGluZQoKICAgICAgICBteSAkbGFzdF9sZXZlbF93cml0dGVuID0gJHNlbGYtPltfbGFzdF9sZXZlbF93cml0dGVuX107CgogICAgICAgIG15ICRsZWFkaW5nX3NwYWNlX2NvdW50ICAgICAgID0gJHJpbnB1dC0+e2xlYWRpbmdfc3BhY2VfY291bnR9OwogICAgICAgIG15ICRzdHIgICAgICAgICAgICAgICAgICAgICAgID0gJHJpbnB1dC0+e2xpbmV9OwogICAgICAgIG15ICRzdHJfbGVuZ3RoICAgICAgICAgICAgICAgID0gJHJpbnB1dC0+e2xpbmVfbGVuZ3RofTsKICAgICAgICBteSAkcnZlcnRpY2FsX3RpZ2h0bmVzc19mbGFncyA9ICRyaW5wdXQtPntydmVydGljYWxfdGlnaHRuZXNzX2ZsYWdzfTsKICAgICAgICBteSAkbGV2ZWwgICAgICAgICAgICAgICAgICAgICA9ICRyaW5wdXQtPntsZXZlbH07CiAgICAgICAgbXkgJGxldmVsX2VuZCAgICAgICAgICAgICAgICAgPSAkcmlucHV0LT57bGV2ZWxfZW5kfTsKICAgICAgICBteSAkbWF4aW11bV9saW5lX2xlbmd0aCAgICAgICA9ICRyaW5wdXQtPnttYXhpbXVtX2xpbmVfbGVuZ3RofTsKCiAgICAgICAgbXkgKCAkb3Blbl9vcl9jbG9zZSwgJHNlcW5vX2JlZyApOwogICAgICAgIGlmICgkcnZlcnRpY2FsX3RpZ2h0bmVzc19mbGFncykgewoKICAgICAgICAgICAgJG9wZW5fb3JfY2xvc2UgPSAkcnZlcnRpY2FsX3RpZ2h0bmVzc19mbGFncy0+e192dF90eXBlfTsKICAgICAgICAgICAgJHNlcW5vX2JlZyAgICAgPSAkcnZlcnRpY2FsX3RpZ2h0bmVzc19mbGFncy0+e192dF9zZXFub19iZWd9OwogICAgICAgIH0KCiAgICAgICAgIyBEdW1wIGFuIGludmFsaWQgY2FjaGVkIGxpbmUKICAgICAgICBpZiAoICEkY2FjaGVkX2xpbmVfdmFsaWQgKSB7CiAgICAgICAgICAgICRzZWxmLT52YWxpZ25fb3V0cHV0X3N0ZXBfQygKICAgICAgICAgICAgICAgICRzZXFub19zdHJpbmcsCiAgICAgICAgICAgICAgICAkbGFzdF9ub25ibGFua19zZXFub19zdHJpbmcsCgogICAgICAgICAgICAgICAgJGNhY2hlZF9saW5lX3RleHQsCiAgICAgICAgICAgICAgICAkY2FjaGVkX2xpbmVfbGVhZGluZ19zcGFjZV9jb3VudCwKICAgICAgICAgICAgICAgICRsYXN0X2xldmVsX3dyaXR0ZW4sCiAgICAgICAgICAgICAgICAkY2FjaGVkX2xpbmVfS2VuZCwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgSGFuZGxlIGNhY2hlZCBsaW5lIGVuZGluZyBpbiBPUEVOSU5HIHRva2VucwogICAgICAgIGVsc2lmICggJGNhY2hlZF9saW5lX3R5cGUgPT0gMSB8fCAkY2FjaGVkX2xpbmVfdHlwZSA9PSAzICkgewoKICAgICAgICAgICAgbXkgJGdhcCA9ICRsZWFkaW5nX3NwYWNlX2NvdW50IC0gJGNhY2hlZF9saW5lX3RleHRfbGVuZ3RoOwoKICAgICAgICAgICAgIyBoYW5kbGUgb3B0aW9uIG9mIGp1c3Qgb25lIHRpZ2h0IG9wZW5pbmcgcGVyIGxpbmU6CiAgICAgICAgICAgIGlmICggJGNhY2hlZF9saW5lX29wZW5pbmdfZmxhZyA9PSAxICkgewogICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRvcGVuX29yX2Nsb3NlKSAmJiAkb3Blbl9vcl9jbG9zZSA9PSAxICkgewogICAgICAgICAgICAgICAgICAgICRnYXAgPSAtMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBEbyBub3Qgam9pbiB0aGUgbGluZXMgaWYgdGhpcyBtaWdodCBwcm9kdWNlIGEgb25lLWxpbmUKICAgICAgICAgICAgIyBjb250YWluZXIgd2hpY2ggZXhjZWVkcyB0aGUgbWF4aW11bSBsaW5lIGxlbmd0aC4gIFRoaXMgaXMKICAgICAgICAgICAgIyBuZWNlc3NhcnkgcHJldmVudCBibGlua2luZywgcGFydGljdWxhcmx5IHdpdGggdGhlIGNvbWJpbmF0aW9uCiAgICAgICAgICAgICMgLXhjaSAtcHZ0PTIuICBJbiB0aGF0IGNhc2UgYSBvbmUtbGluZSBibG9jayBhbHRlcm5hdGVseSBmb3JtcwogICAgICAgICAgICAjIGFuZCBicmVha3MsIGNhdXNpbmcgLXhjaSB0byBhbHRlcm5hdGVseSB0dXJuIG9uIGFuZCBvZmYgKGNhc2UKICAgICAgICAgICAgIyBiNzY1KS4KICAgICAgICAgICAgIyBQYXRjaGVkIHRvIGZpeCBjYXNlcyBiNjU2IGI4NjIgYjk3MSBiOTcyOiBhbHdheXMgZG8gdGhlIGNoZWNrCiAgICAgICAgICAgICMgaWYgdGhlIG1heGltdW0gbGluZSBsZW5ndGggY2hhbmdlcyAoZHVlIHRvIC12bWxsKS4KICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJGdhcCA+PSAwCiAgICAgICAgICAgICAgICAmJiAoICRtYXhpbXVtX2xpbmVfbGVuZ3RoICE9ICRjYWNoZWRfbGluZV9tYXhpbXVtX2xlbmd0aAogICAgICAgICAgICAgICAgICAgIHx8ICggZGVmaW5lZCgkbGV2ZWxfZW5kKSAmJiAkbGV2ZWwgPiAkbGV2ZWxfZW5kICkgKQogICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbXkgJHRlc3RfbGluZV9sZW5ndGggPQogICAgICAgICAgICAgICAgICAkY2FjaGVkX2xpbmVfdGV4dF9sZW5ndGggKyAkZ2FwICsgJHN0cl9sZW5ndGg7CgogICAgICAgICAgICAgICAgIyBBZGQgYSBzbWFsbCB0b2xlcmFuY2UgaW4gdGhlIGxlbmd0aCB0ZXN0IChmaXhlcyBjYXNlIGI4NjIpCiAgICAgICAgICAgICAgICBpZiAoICR0ZXN0X2xpbmVfbGVuZ3RoID4gJGNhY2hlZF9saW5lX21heGltdW1fbGVuZ3RoIC0gMiApIHsKICAgICAgICAgICAgICAgICAgICAkZ2FwID0gLTE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJGdhcCA+PSAwICYmIGRlZmluZWQoJHNlcW5vX2JlZykgKSB7CiAgICAgICAgICAgICAgICAkbWF4aW11bV9saW5lX2xlbmd0aCAgID0gJGNhY2hlZF9saW5lX21heGltdW1fbGVuZ3RoOwogICAgICAgICAgICAgICAgJGxlYWRpbmdfc3RyaW5nICAgICAgICA9ICRjYWNoZWRfbGluZV90ZXh0IC4gU1BBQ0UgeCAkZ2FwOwogICAgICAgICAgICAgICAgJGxlYWRpbmdfc3RyaW5nX2xlbmd0aCA9ICRjYWNoZWRfbGluZV90ZXh0X2xlbmd0aCArICRnYXA7CiAgICAgICAgICAgICAgICAkbGVhZGluZ19zcGFjZV9jb3VudCAgID0gJGNhY2hlZF9saW5lX2xlYWRpbmdfc3BhY2VfY291bnQ7CiAgICAgICAgICAgICAgICAkc2Vxbm9fc3RyaW5nID0gJGNhY2hlZF9zZXFub19zdHJpbmcgLiAnOicgLiAkc2Vxbm9fYmVnOwogICAgICAgICAgICAgICAgJGxldmVsICAgICAgICA9ICRsYXN0X2xldmVsX3dyaXR0ZW47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkc2VsZi0+dmFsaWduX291dHB1dF9zdGVwX0MoCiAgICAgICAgICAgICAgICAgICAgJHNlcW5vX3N0cmluZywKICAgICAgICAgICAgICAgICAgICAkbGFzdF9ub25ibGFua19zZXFub19zdHJpbmcsCgogICAgICAgICAgICAgICAgICAgICRjYWNoZWRfbGluZV90ZXh0LAogICAgICAgICAgICAgICAgICAgICRjYWNoZWRfbGluZV9sZWFkaW5nX3NwYWNlX2NvdW50LAogICAgICAgICAgICAgICAgICAgICRsYXN0X2xldmVsX3dyaXR0ZW4sCiAgICAgICAgICAgICAgICAgICAgJGNhY2hlZF9saW5lX0tlbmQsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIEhhbmRsZSBjYWNoZWQgbGluZSBlbmRpbmcgaW4gQ0xPU0lORyB0b2tlbnMKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbXkgJHRlc3RfbGluZSA9CiAgICAgICAgICAgICAgJGNhY2hlZF9saW5lX3RleHQgLiBTUEFDRSB4ICRjYWNoZWRfbGluZV9jbG9zaW5nX2ZsYWcgLiAkc3RyOwogICAgICAgICAgICBteSAkdGVzdF9saW5lX2xlbmd0aCA9CiAgICAgICAgICAgICAgJGNhY2hlZF9saW5lX3RleHRfbGVuZ3RoICsKICAgICAgICAgICAgICAkY2FjaGVkX2xpbmVfY2xvc2luZ19mbGFnICsKICAgICAgICAgICAgICAkc3RyX2xlbmd0aDsKICAgICAgICAgICAgaWYgKAoKICAgICAgICAgICAgICAgICMgVGhlIG5ldyBsaW5lIG11c3Qgc3RhcnQgd2l0aCBjb250YWluZXIKICAgICAgICAgICAgICAgICRzZXFub19iZWcKCiAgICAgICAgICAgICAgICAjIFRoZSBjb250YWluZXIgY29tYmluYXRpb24gbXVzdCBiZSBva2F5Li4KICAgICAgICAgICAgICAgICYmICgKCiAgICAgICAgICAgICAgICAgICAgIyBva2F5IHRvIGNvbWJpbmUgbGlrZSB0eXBlcwogICAgICAgICAgICAgICAgICAgICggJG9wZW5fb3JfY2xvc2UgPT0gJGNhY2hlZF9saW5lX3R5cGUgKQoKICAgICAgICAgICAgICAgICAgICAjIGNsb3NpbmcgYmxvY2sgYnJhY2UgbWF5IGFwcGVuZCB0byBub24tYmxvY2sKICAgICAgICAgICAgICAgICAgICB8fCAoICRjYWNoZWRfbGluZV90eXBlID09IDIgJiYgJG9wZW5fb3JfY2xvc2UgPT0gNCApCgogICAgICAgICAgICAgICAgICAgICMgc29tZXRoaW5nIGxpa2UgJyk7JwogICAgICAgICAgICAgICAgICAgIHx8ICggISRvcGVuX29yX2Nsb3NlICYmICRjYWNoZWRfbGluZV90eXBlID09IDIgKQoKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICAjIFRoZSBjb21iaW5lZCBsaW5lIG11c3QgZml0CiAgICAgICAgICAgICAgICAmJiAoICR0ZXN0X2xpbmVfbGVuZ3RoIDw9ICRjYWNoZWRfbGluZV9tYXhpbXVtX2xlbmd0aCApCiAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgJHNlcW5vX3N0cmluZyA9ICRjYWNoZWRfc2Vxbm9fc3RyaW5nIC4gJzonIC4gJHNlcW5vX2JlZzsKCiAgICAgICAgICAgICAgICAjIFBhdGNoIHRvIG91dGRlbnQgY2xvc2luZyB0b2tlbnMgZW5kaW5nICMgaW4gJyk7JyBJZiB3ZQogICAgICAgICAgICAgICAgIyBhcmUgam9pbmluZyBhIGxpbmUgbGlrZSAnKTsnIHRvIGEgcHJldmlvdXMgc3RhY2tlZCBzZXQgb2YKICAgICAgICAgICAgICAgICMgY2xvc2luZyB0b2tlbnMsIHRoZW4gZGVjaWRlIGlmIHdlIG1heSBvdXRkZW50IHRoZQogICAgICAgICAgICAgICAgIyBjb21iaW5lZCBzdGFjayB0byB0aGUgaW5kZW50YXRpb24gb2YgdGhlICcpOycuICBTaW5jZSB3ZQogICAgICAgICAgICAgICAgIyBzaG91bGQgbm90IG5vcm1hbGx5IG91dGRlbnQgYW55IG9mIHRoZSBvdGhlciB0b2tlbnMgbW9yZQogICAgICAgICAgICAgICAgIyB0aGFuIHRoZSBpbmRlbnRhdGlvbiBvZiB0aGUgbGluZXMgdGhhdCBjb250YWluZWQgdGhlbSwgd2UKICAgICAgICAgICAgICAgICMgd2lsbCBvbmx5IGRvIHRoaXMgaWYgYWxsIG9mIHRoZSBjb3JyZXNwb25kaW5nIG9wZW5pbmcKICAgICAgICAgICAgICAgICMgdG9rZW5zIHdlcmUgb24gdGhlIHNhbWUgbGluZS4gIFRoaXMgY2FuIGhhcHBlbiB3aXRoIC1zb3QKICAgICAgICAgICAgICAgICMgYW5kIC1zY3QuCgogICAgICAgICAgICAgICAgIyBGb3IgZXhhbXBsZSwgaXQgaXMgb2sgaGVyZToKICAgICAgICAgICAgICAgICMgICBfX1BBQ0tBR0VfXy0+bG9hZF9jb21wb25lbnRzKCBxdygKICAgICAgICAgICAgICAgICMgICAgICAgICBQSzo6QXV0bwogICAgICAgICAgICAgICAgIyAgICAgICAgIENvcmUKICAgICAgICAgICAgICAgICMgICApKTsKICAgICAgICAgICAgICAgICMKICAgICAgICAgICAgICAgICMgQnV0LCBmb3IgZXhhbXBsZSwgd2UgZG8gbm90IG91dGRlbnQgaW4gdGhpcyBleGFtcGxlCiAgICAgICAgICAgICAgICAjIGJlY2F1c2UgdGhhdCB3b3VsZCBwdXQgdGhlIGNsb3Npbmcgc3ViIGJyYWNlIG91dCBmYXJ0aGVyCiAgICAgICAgICAgICAgICAjIHRoYW4gdGhlIG9wZW5pbmcgc3ViIGJyYWNlOgogICAgICAgICAgICAgICAgIwogICAgICAgICAgICAgICAgIyAgIHBlcmx0aWR5IC1zb3QgLXNjdAogICAgICAgICAgICAgICAgIyAgICRjLT5Uazo6YmluZCgKICAgICAgICAgICAgICAgICMgICAgICAgJzxDb250cm9sLWY+JyA9PiBzdWIgewogICAgICAgICAgICAgICAgIyAgICAgICAgICAgbXkgKCRjKSA9IEBfOwogICAgICAgICAgICAgICAgIyAgICAgICAgICAgbXkgJGUgPSAkYy0+WEV2ZW50OwogICAgICAgICAgICAgICAgIyAgICAgICAgICAgaXRlbXNVbmRlckFyZWEgJGM7CiAgICAgICAgICAgICAgICAjICAgICAgIH0gKTsKICAgICAgICAgICAgICAgICMKICAgICAgICAgICAgICAgIGlmICggICAkc3RyID1+IC9eXCk7LwogICAgICAgICAgICAgICAgICAgICYmICRjYWNoZWRfbGluZV90ZXh0ID1+IC9eW1wpXH1cXVxzXSokLyApCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICMgVGhlIHdheSB0byB0ZWxsIHRoaXMgaXMgaWYgdGhlIHN0YWNrZWQgc2VxdWVuY2UKICAgICAgICAgICAgICAgICAgICAjIG51bWJlcnMgb2YgdGhpcyBvdXRwdXQgbGluZSBhcmUgdGhlIHJldmVyc2Ugb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgIyBzdGFja2VkIHNlcXVlbmNlIG51bWJlcnMgb2YgdGhlIHByZXZpb3VzIG5vbi1ibGFuawogICAgICAgICAgICAgICAgICAgICMgbGluZSBvZiBzZXF1ZW5jZSBudW1iZXJzLiAgU28gd2UgY2FuIGpvaW4gaWYgdGhlCiAgICAgICAgICAgICAgICAgICAgIyBwcmV2aW91cyBub25ibGFuayBzdHJpbmcgb2YgdG9rZW5zIGlzIHRoZSBtaXJyb3IKICAgICAgICAgICAgICAgICAgICAjIGltYWdlLiAgRm9yIGV4YW1wbGUgaWYgc3RhY2sgKX1dIGlzIDEzOjg6NiB0aGVuIHdlCiAgICAgICAgICAgICAgICAgICAgIyBhcmUgbG9va2luZyBmb3IgYSBsZWFkaW5nIHN0YWNrIGxpa2UgW3soIHdoaWNoCiAgICAgICAgICAgICAgICAgICAgIyBpcyA2Ojg6MTMuIFdlIG9ubHkgbmVlZCB0byBjaGVjayB0aGUgdHdvIGVuZHMsCiAgICAgICAgICAgICAgICAgICAgIyBiZWNhdXNlIHRoZSBpbnRlcm1lZGlhdGUgdG9rZW5zIG11c3QgZmFsbCBpbiBvcmRlci4KICAgICAgICAgICAgICAgICAgICAjIE5vdGUgb24gc3BlZWQ6IGhhdmluZyB0byBzcGxpdCBvbiBjb2xvbnMgYW5kCiAgICAgICAgICAgICAgICAgICAgIyBlbGltaW5hdGUgbXVsdGlwbGUgY29sb25zIG1pZ2h0IGFwcGVhciB0byBiZSBzbG93LAogICAgICAgICAgICAgICAgICAgICMgYnV0IGl0J3Mgbm90IGFuIGlzc3VlIGJlY2F1c2Ugd2UgYWxtb3N0IG5ldmVyIGNvbWUKICAgICAgICAgICAgICAgICAgICAjIHRocm91Z2ggaGVyZS4gIEluIGEgdHlwaWNhbCBmaWxlIHdlIGRvbid0LgoKICAgICAgICAgICAgICAgICAgICAkc2Vxbm9fc3RyaW5nICAgICAgICAgICAgICAgPX4gcy9eOisvLzsKICAgICAgICAgICAgICAgICAgICAkbGFzdF9ub25ibGFua19zZXFub19zdHJpbmcgPX4gcy9eOisvLzsKICAgICAgICAgICAgICAgICAgICAkc2Vxbm9fc3RyaW5nICAgICAgICAgICAgICAgPX4gcy86Ky86L2c7CiAgICAgICAgICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfc2Vxbm9fc3RyaW5nID1+IHMvOisvOi9nOwoKICAgICAgICAgICAgICAgICAgICAjIGhvdyBtYW55IHNwYWNlcyBjYW4gd2Ugb3V0ZGVudD8KICAgICAgICAgICAgICAgICAgICBteSAkZGlmZiA9CiAgICAgICAgICAgICAgICAgICAgICAkY2FjaGVkX2xpbmVfbGVhZGluZ19zcGFjZV9jb3VudCAtICRsZWFkaW5nX3NwYWNlX2NvdW50OwogICAgICAgICAgICAgICAgICAgIGlmICggICAkZGlmZiA+IDAKICAgICAgICAgICAgICAgICAgICAgICAgJiYgbGVuZ3RoKCRzZXFub19zdHJpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICYmIGxlbmd0aCgkbGFzdF9ub25ibGFua19zZXFub19zdHJpbmcpID09CiAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCgkc2Vxbm9fc3RyaW5nKSApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBteSBAc2Vxbm9fbGFzdCA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgKCBzcGxpdCAvOi8sICRsYXN0X25vbmJsYW5rX3NlcW5vX3N0cmluZyApOwogICAgICAgICAgICAgICAgICAgICAgICBteSBAc2Vxbm9fbm93ID0gKCBzcGxpdCAvOi8sICRzZXFub19zdHJpbmcgKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAgIEBzZXFub19ub3cKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIEBzZXFub19sYXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkc2Vxbm9fbm93Wy0xXSA9PSAkc2Vxbm9fbGFzdFswXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHNlcW5vX25vd1swXSA9PSAkc2Vxbm9fbGFzdFstMV0gKQogICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBPSyB0byBvdXRkZW50IC4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZvciBhYnNvbHV0ZSBzYWZldHksIGJlIHN1cmUgd2Ugb25seSByZW1vdmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2hpdGVzcGFjZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHdzID0gc3Vic3RyKCAkdGVzdF9saW5lLCAwLCAkZGlmZiApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoIGxlbmd0aCgkd3MpID09ICRkaWZmICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkd3MgPX4gL15ccyskLyApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0ZXN0X2xpbmUgPSBzdWJzdHIoICR0ZXN0X2xpbmUsICRkaWZmICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNhY2hlZF9saW5lX2xlYWRpbmdfc3BhY2VfY291bnQgLT0gJGRpZmY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxhc3RfbGV2ZWxfd3JpdHRlbiA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+bGV2ZWxfY2hhbmdlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2FjaGVkX2xpbmVfbGVhZGluZ19zcGFjZV9jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpZmYsICRsYXN0X2xldmVsX3dyaXR0ZW4gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+cmVkdWNlX3ZhbGlnbl9idWZmZXJfaW5kZW50YXRpb24oJGRpZmYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc2hvdWxkbid0IGhhcHBlbiwgYnV0IG5vdCBjcml0aWNhbDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyBFUlJPUiB0cmFuc2ZlcnJpbmcgaW5kZW50YXRpb24gaGVyZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyN9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBDaGFuZ2UgdGhlIGFyZ3MgdG8gbG9vayBsaWtlIHdlIHJlY2VpdmVkIHRoZSBjb21iaW5lZCBsaW5lCiAgICAgICAgICAgICAgICAkc3RyICAgICAgICAgICAgICAgICAgID0gJHRlc3RfbGluZTsKICAgICAgICAgICAgICAgICRzdHJfbGVuZ3RoICAgICAgICAgICAgPSAkdGVzdF9saW5lX2xlbmd0aDsKICAgICAgICAgICAgICAgICRsZWFkaW5nX3N0cmluZyAgICAgICAgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgICAgICAkbGVhZGluZ19zdHJpbmdfbGVuZ3RoID0gMDsKICAgICAgICAgICAgICAgICRsZWFkaW5nX3NwYWNlX2NvdW50ICAgPSAkY2FjaGVkX2xpbmVfbGVhZGluZ19zcGFjZV9jb3VudDsKICAgICAgICAgICAgICAgICRsZXZlbCAgICAgICAgICAgICAgICAgPSAkbGFzdF9sZXZlbF93cml0dGVuOwogICAgICAgICAgICAgICAgJG1heGltdW1fbGluZV9sZW5ndGggICA9ICRjYWNoZWRfbGluZV9tYXhpbXVtX2xlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRzZWxmLT52YWxpZ25fb3V0cHV0X3N0ZXBfQygKICAgICAgICAgICAgICAgICAgICAkc2Vxbm9fc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX3NlcW5vX3N0cmluZywKCiAgICAgICAgICAgICAgICAgICAgJGNhY2hlZF9saW5lX3RleHQsCiAgICAgICAgICAgICAgICAgICAgJGNhY2hlZF9saW5lX2xlYWRpbmdfc3BhY2VfY291bnQsCiAgICAgICAgICAgICAgICAgICAgJGxhc3RfbGV2ZWxfd3JpdHRlbiwKICAgICAgICAgICAgICAgICAgICAkY2FjaGVkX2xpbmVfS2VuZCwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICggJHN0ciwgJHN0cl9sZW5ndGgsICRsZWFkaW5nX3N0cmluZywgJGxlYWRpbmdfc3RyaW5nX2xlbmd0aCwKICAgICAgICAgICAgJGxlYWRpbmdfc3BhY2VfY291bnQsICRsZXZlbCwgJG1heGltdW1fbGluZV9sZW5ndGggKTsKCiAgICB9ICMjIGVuZCBzdWIgaGFuZGxlX2NhY2hlZF9saW5lCgogICAgc3ViIHZhbGlnbl9vdXRwdXRfc3RlcF9CIHsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgVGhpcyBpcyBTdGVwIEIgaW4gd3JpdGluZyB2ZXJ0aWNhbGx5IGFsaWduZWQgbGluZXMuCiAgICAgICAgIyBWZXJ0aWNhbCB0aWdodG5lc3MgaXMgYXBwbGllZCBhY2NvcmRpbmcgdG8gcHJlc2V0IGZsYWdzLgogICAgICAgICMgSW4gcGFydGljdWxhciB0aGlzIHJvdXRpbmUgaGFuZGxlcyBzdGFja2luZyBvZiBvcGVuaW5nCiAgICAgICAgIyBhbmQgY2xvc2luZyB0b2tlbnMuCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICBteSAoICRzZWxmLCAkcmlucHV0ICkgPSBAXzsKCiAgICAgICAgbXkgJGxlYWRpbmdfc3BhY2VfY291bnQgICAgICAgPSAkcmlucHV0LT57bGVhZGluZ19zcGFjZV9jb3VudH07CiAgICAgICAgbXkgJHN0ciAgICAgICAgICAgICAgICAgICAgICAgPSAkcmlucHV0LT57bGluZX07CiAgICAgICAgbXkgJHN0cl9sZW5ndGggICAgICAgICAgICAgICAgPSAkcmlucHV0LT57bGluZV9sZW5ndGh9OwogICAgICAgIG15ICRzaWRlX2NvbW1lbnRfbGVuZ3RoICAgICAgID0gJHJpbnB1dC0+e3NpZGVfY29tbWVudF9sZW5ndGh9OwogICAgICAgIG15ICRvdXRkZW50X2xvbmdfbGluZXMgICAgICAgID0gJHJpbnB1dC0+e291dGRlbnRfbG9uZ19saW5lc307CiAgICAgICAgbXkgJHJ2ZXJ0aWNhbF90aWdodG5lc3NfZmxhZ3MgPSAkcmlucHV0LT57cnZlcnRpY2FsX3RpZ2h0bmVzc19mbGFnc307CiAgICAgICAgbXkgJGxldmVsICAgICAgICAgICAgICAgICAgICAgPSAkcmlucHV0LT57bGV2ZWx9OwojIyAgICAgIG15ICRsZXZlbF9lbmQgICAgICAgICAgICAgICAgID0gJHJpbnB1dC0+e2xldmVsX2VuZH07CiAgICAgICAgbXkgJEtlbmQgICAgICAgICAgICAgICAgPSAkcmlucHV0LT57S2VuZH07CiAgICAgICAgbXkgJG1heGltdW1fbGluZV9sZW5ndGggPSAkcmlucHV0LT57bWF4aW11bV9saW5lX2xlbmd0aH07CgogICAgICAgICMgVXNlZnVsIC1nY3MgdGVzdCBjYXNlcyBmb3Igd2lkZSBjaGFyYWN0ZXJzIGFyZQogICAgICAgICMgcGVybDUyNy8obWV0aG9kLnQuMiwgcmVnX21lc2cudCwgbWltZS1oZWFkZXIudCkKCiAgICAgICAgIyBoYW5kbGUgb3V0ZGVudGluZyBvZiBsb25nIGxpbmVzOgogICAgICAgIG15ICRpc19vdXRkZW50ZWRfbGluZTsKICAgICAgICBpZiAoJG91dGRlbnRfbG9uZ19saW5lcykgewogICAgICAgICAgICBteSAkZXhjZXNzID0KICAgICAgICAgICAgICAkc3RyX2xlbmd0aCAtCiAgICAgICAgICAgICAgJHNpZGVfY29tbWVudF9sZW5ndGggKwogICAgICAgICAgICAgICRsZWFkaW5nX3NwYWNlX2NvdW50IC0KICAgICAgICAgICAgICAkbWF4aW11bV9saW5lX2xlbmd0aDsKICAgICAgICAgICAgaWYgKCAkZXhjZXNzID4gMCApIHsKICAgICAgICAgICAgICAgICRsZWFkaW5nX3NwYWNlX2NvdW50ID0gMDsKICAgICAgICAgICAgICAgIG15ICRmaWxlX3dyaXRlcl9vYmplY3QgPSAkc2VsZi0+W19maWxlX3dyaXRlcl9vYmplY3RfXTsKICAgICAgICAgICAgICAgIG15ICRsYXN0X291dGRlbnRlZF9saW5lX2F0ID0KICAgICAgICAgICAgICAgICAgJGZpbGVfd3JpdGVyX29iamVjdC0+Z2V0X291dHB1dF9saW5lX251bWJlcigpOwogICAgICAgICAgICAgICAgJHNlbGYtPltfbGFzdF9vdXRkZW50ZWRfbGluZV9hdF9dID0gJGxhc3Rfb3V0ZGVudGVkX2xpbmVfYXQ7CgogICAgICAgICAgICAgICAgbXkgJG91dGRlbnRlZF9saW5lX2NvdW50ID0gJHNlbGYtPltfb3V0ZGVudGVkX2xpbmVfY291bnRfXTsKICAgICAgICAgICAgICAgIGlmICggISRvdXRkZW50ZWRfbGluZV9jb3VudCApIHsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+W19maXJzdF9vdXRkZW50ZWRfbGluZV9hdF9dID0KICAgICAgICAgICAgICAgICAgICAgICRsYXN0X291dGRlbnRlZF9saW5lX2F0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJG91dGRlbnRlZF9saW5lX2NvdW50Kys7CiAgICAgICAgICAgICAgICAkc2VsZi0+W19vdXRkZW50ZWRfbGluZV9jb3VudF9dID0gJG91dGRlbnRlZF9saW5lX2NvdW50OwogICAgICAgICAgICAgICAgJGlzX291dGRlbnRlZF9saW5lID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBNYWtlIHByZWxpbWluYXJ5IGxlYWRpbmcgd2hpdGVzcGFjZS4gIEl0IGNvdWxkIGdldCBjaGFuZ2VkCiAgICAgICAgIyBsYXRlciBieSBlbnRhYmJpbmcsIHNvIHdlIGhhdmUgdG8ga2VlcCB0cmFjayBvZiBhbnkgY2hhbmdlcwogICAgICAgICMgdG8gdGhlIGxlYWRpbmdfc3BhY2VfY291bnQgZnJvbSBoZXJlIG9uLgogICAgICAgIG15ICRsZWFkaW5nX3N0cmluZyA9CiAgICAgICAgICAkbGVhZGluZ19zcGFjZV9jb3VudCA+IDAKICAgICAgICAgID8gKCBTUEFDRSB4ICRsZWFkaW5nX3NwYWNlX2NvdW50ICkKICAgICAgICAgIDogRU1QVFlfU1RSSU5HOwogICAgICAgIG15ICRsZWFkaW5nX3N0cmluZ19sZW5ndGggPSBsZW5ndGgoJGxlYWRpbmdfc3RyaW5nKTsKCiAgICAgICAgIyBVbnBhY2sgYW55IHJlY29tYmluYXRpb24gZGF0YTsgaXQgd2FzIHBhY2tlZCBieQogICAgICAgICMgc3ViICdGb3JtYXR0ZXI6OnNldF92ZXJ0aWNhbF90aWdodG5lc3NfZmxhZ3MnCgogICAgICAgICMgb2xkICAgaGFzaCAgICAgICAgICAgICAgTWVhbmluZwogICAgICAgICMgaW5kZXgga2V5CiAgICAgICAgIwogICAgICAgICMgMCAgIF92dF90eXBlOiAgICAgICAgICAgMT1vcGVuaW5nIG5vbi1ibG9jayAgICAyPWNsb3Npbmcgbm9uLWJsb2NrCiAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAzPW9wZW5pbmcgYmxvY2sgYnJhY2UgIDQ9Y2xvc2luZyBibG9jayBicmFjZQogICAgICAgICMKICAgICAgICAjIDFhICBfdnRfb3BlbmluZ19mbGFnOiAgMT1ubyBtdWx0aXBsZSBzdGVwcywgMj1tdWx0aXBsZSBzdGVwcyBvawogICAgICAgICMgMWIgIF92dF9jbG9zaW5nX2ZsYWc6ICAgIHNwYWNlcyBvZiBwYWRkaW5nIHRvIHVzZSBpZiBjbG9zaW5nCiAgICAgICAgIyAyICAgX3Z0X3NlcW5vOiAgICAgICAgICBzZXF1ZW5jZSBudW1iZXIgb2YgY29udGFpbmVyCiAgICAgICAgIyAzICAgX3Z0X3ZhbGlkIGZsYWc6ICAgICBkbyBub3QgYXBwZW5kIGlmIHRoaXMgZmxhZyBpcyBmYWxzZS4gV2lsbCBiZQogICAgICAgICMgICAgICAgICAgIHRydWUgaWYgYXBwcm9wcmlhdGUgLXZ0IGZsYWcgaXMgc2V0LiAgT3RoZXJ3aXNlLCBXaWxsIGJlCiAgICAgICAgIyAgICAgICAgICAgbWFkZSB0cnVlIG9ubHkgZm9yIDIgbGluZSBjb250YWluZXIgaW4gcGFyZW5zIHdpdGggLWxwCiAgICAgICAgIyA0ICAgX3Z0X3NlcW5vX2JlZzogICAgICBzZXF1ZW5jZSBudW1iZXIgb2YgZmlyc3QgdG9rZW4gb2YgbGluZQogICAgICAgICMgNSAgIF92dF9zZXFub19lbmQ6ICAgICAgc2VxdWVuY2UgbnVtYmVyIG9mIGxhc3QgdG9rZW4gb2YgbGluZQogICAgICAgICMgNiAgIF92dF9taW5fbGluZXM6ICAgICAgbWluIG51bWJlciBvZiBsaW5lcyBmb3Igam9pbmluZyBvcGVuaW5nIGNhY2hlLAogICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAwPW5vIGNvbnN0cmFpbnQKICAgICAgICAjIDcgICBfdnRfbWF4X2xpbmVzOiAgICAgIG1heCBudW1iZXIgb2YgbGluZXMgZm9yIGpvaW5pbmcgb3BlbmluZyBjYWNoZSwKICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgMD1ubyBjb25zdHJhaW50CgogICAgICAgIG15ICggJG9wZW5fb3JfY2xvc2UsICRvcGVuaW5nX2ZsYWcsICRjbG9zaW5nX2ZsYWcsICRzZXFubywgJHZhbGlkLAogICAgICAgICAgICAkc2Vxbm9fYmVnLCAkc2Vxbm9fZW5kICk7CiAgICAgICAgaWYgKCRydmVydGljYWxfdGlnaHRuZXNzX2ZsYWdzKSB7CgogICAgICAgICAgICAkb3Blbl9vcl9jbG9zZSA9ICRydmVydGljYWxfdGlnaHRuZXNzX2ZsYWdzLT57X3Z0X3R5cGV9OwogICAgICAgICAgICAkb3BlbmluZ19mbGFnICA9ICRydmVydGljYWxfdGlnaHRuZXNzX2ZsYWdzLT57X3Z0X29wZW5pbmdfZmxhZ307CiAgICAgICAgICAgICRjbG9zaW5nX2ZsYWcgID0gJHJ2ZXJ0aWNhbF90aWdodG5lc3NfZmxhZ3MtPntfdnRfY2xvc2luZ19mbGFnfTsKICAgICAgICAgICAgJHNlcW5vICAgICAgICAgPSAkcnZlcnRpY2FsX3RpZ2h0bmVzc19mbGFncy0+e192dF9zZXFub307CiAgICAgICAgICAgICR2YWxpZCAgICAgICAgID0gJHJ2ZXJ0aWNhbF90aWdodG5lc3NfZmxhZ3MtPntfdnRfdmFsaWRfZmxhZ307CiAgICAgICAgICAgICRzZXFub19iZWcgICAgID0gJHJ2ZXJ0aWNhbF90aWdodG5lc3NfZmxhZ3MtPntfdnRfc2Vxbm9fYmVnfTsKICAgICAgICAgICAgJHNlcW5vX2VuZCAgICAgPSAkcnZlcnRpY2FsX3RpZ2h0bmVzc19mbGFncy0+e192dF9zZXFub19lbmR9OwogICAgICAgIH0KCiAgICAgICAgJHNlcW5vX3N0cmluZyA9ICRzZXFub19lbmQ7CgogICAgICAgICMgaGFuZGxlIGFueSBjYWNoZWQgbGluZSAuLgogICAgICAgICMgZWl0aGVyIGFwcGVuZCB0aGlzIGxpbmUgdG8gaXQgb3Igd3JpdGUgaXQgb3V0CiAgICAgICAgIyBOb3RlOiB0aGUgZnVuY3Rpb24gbGVuZ3RoKCkgaXMgdXNlZCBpbiB0aGlzIG5leHQgdGVzdCBvdXQgb2YgY2F1dGlvbi4KICAgICAgICAjIEFsbCB0ZXN0aW5nIGhhcyBzaG93biB0aGF0IHRoZSB2YXJpYWJsZSAkY2FjaGVkX2xpbmVfdGV4dF9sZW5ndGggaXMKICAgICAgICAjIGNvcnJlY3QsIGJ1dCBpdHMgY2FsY3VsYXRpb24gaXMgY29tcGxleCBhbmQgYSBsb3NzIG9mIGNhY2hlZCB0ZXh0CiAgICAgICAgIyB3b3VsZCBiZSBhIGRpc2FzdGVyLgogICAgICAgIGlmICggbGVuZ3RoKCRjYWNoZWRfbGluZV90ZXh0KSApIHsKCiAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICRzdHIsCiAgICAgICAgICAgICAgICAkc3RyX2xlbmd0aCwKICAgICAgICAgICAgICAgICRsZWFkaW5nX3N0cmluZywKICAgICAgICAgICAgICAgICRsZWFkaW5nX3N0cmluZ19sZW5ndGgsCiAgICAgICAgICAgICAgICAkbGVhZGluZ19zcGFjZV9jb3VudCwKICAgICAgICAgICAgICAgICRsZXZlbCwKICAgICAgICAgICAgICAgICRtYXhpbXVtX2xpbmVfbGVuZ3RoCgogICAgICAgICAgICApID0gJHNlbGYtPmhhbmRsZV9jYWNoZWRfbGluZSggJHJpbnB1dCwgJGxlYWRpbmdfc3RyaW5nLAogICAgICAgICAgICAgICAgJGxlYWRpbmdfc3RyaW5nX2xlbmd0aCApOwoKICAgICAgICAgICAgJGNhY2hlZF9saW5lX3R5cGUgICAgICAgICAgID0gMDsKICAgICAgICAgICAgJGNhY2hlZF9saW5lX3RleHQgICAgICAgICAgID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICAkY2FjaGVkX2xpbmVfdGV4dF9sZW5ndGggICAgPSAwOwogICAgICAgICAgICAkY2FjaGVkX2xpbmVfS2VuZCAgICAgICAgICAgPSB1bmRlZjsKICAgICAgICAgICAgJGNhY2hlZF9saW5lX21heGltdW1fbGVuZ3RoID0gdW5kZWY7CgogICAgICAgIH0KCiAgICAgICAgIyBtYWtlIHRoZSBsaW5lIHRvIGJlIHdyaXR0ZW4KICAgICAgICBteSAkbGluZSAgICAgICAgPSAkbGVhZGluZ19zdHJpbmcgLiAkc3RyOwogICAgICAgIG15ICRsaW5lX2xlbmd0aCA9ICRsZWFkaW5nX3N0cmluZ19sZW5ndGggKyAkc3RyX2xlbmd0aDsKCiAgICAgICAgIyBTYWZldHkgY2hlY2s6IGJlIHN1cmUgdGhhdCBhIGxpbmUgdG8gYmUgY2FjaGVkIGFzIGEgc3RhY2tlZCBibG9jawogICAgICAgICMgYnJhY2UgbGluZSBlbmRzIGluIHRoZSBhcHByb3ByaWF0ZSBvcGVuaW5nIG9yIGNsb3NpbmcgYmxvY2sgYnJhY2UuCiAgICAgICAgIyBUaGlzIHNob3VsZCBhbHdheXMgYmUgdGhlIGNhc2UgaWYgdGhlIGNhbGxlciBzZXQgZmxhZ3MgY29ycmVjdGx5LgogICAgICAgICMgQ29kZSAnMycgaXMgZm9yIC1zb2JiLCBjb2RlICc0JyBpcyBmb3IgLXNjYmIuCiAgICAgICAgaWYgKCRvcGVuX29yX2Nsb3NlKSB7CiAgICAgICAgICAgIGlmICggICAkb3Blbl9vcl9jbG9zZSA9PSAzICYmICRsaW5lICF+IC9ce1xzKiQvCiAgICAgICAgICAgICAgICB8fCAkb3Blbl9vcl9jbG9zZSA9PSA0ICYmICRsaW5lICF+IC9cfVxzKiQvICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJG9wZW5fb3JfY2xvc2UgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHdyaXRlIG9yIGNhY2hlIHRoaXMgbGluZSAuLi4KICAgICAgICAjIGZpeCBmb3IgY2FzZSBiOTk5OiBkbyBub3QgY2FjaGUgYW4gb3V0ZGVudGVkIGxpbmUKICAgICAgICAjIGZpeCBmb3IgYjEzNzg6IGRvIG5vdCBjYWNoZSBhbiBlbXB0eSBsaW5lCiAgICAgICAgaWYgKCAgISRvcGVuX29yX2Nsb3NlCiAgICAgICAgICAgIHx8ICRzaWRlX2NvbW1lbnRfbGVuZ3RoID4gMAogICAgICAgICAgICB8fCAkaXNfb3V0ZGVudGVkX2xpbmUKICAgICAgICAgICAgfHwgISRsaW5lX2xlbmd0aCApCiAgICAgICAgewogICAgICAgICAgICAkc2VsZi0+dmFsaWduX291dHB1dF9zdGVwX0MoCiAgICAgICAgICAgICAgICAkc2Vxbm9fc3RyaW5nLAogICAgICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfc2Vxbm9fc3RyaW5nLAoKICAgICAgICAgICAgICAgICRsaW5lLAogICAgICAgICAgICAgICAgJGxlYWRpbmdfc3BhY2VfY291bnQsCiAgICAgICAgICAgICAgICAkbGV2ZWwsCiAgICAgICAgICAgICAgICAkS2VuZCwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRjYWNoZWRfbGluZV90ZXh0ICAgICAgICAgICAgICAgID0gJGxpbmU7CiAgICAgICAgICAgICRjYWNoZWRfbGluZV90ZXh0X2xlbmd0aCAgICAgICAgID0gJGxpbmVfbGVuZ3RoOwogICAgICAgICAgICAkY2FjaGVkX2xpbmVfdHlwZSAgICAgICAgICAgICAgICA9ICRvcGVuX29yX2Nsb3NlOwogICAgICAgICAgICAkY2FjaGVkX2xpbmVfb3BlbmluZ19mbGFnICAgICAgICA9ICRvcGVuaW5nX2ZsYWc7CiAgICAgICAgICAgICRjYWNoZWRfbGluZV9jbG9zaW5nX2ZsYWcgICAgICAgID0gJGNsb3NpbmdfZmxhZzsKICAgICAgICAgICAgJGNhY2hlZF9zZXFubyAgICAgICAgICAgICAgICAgICAgPSAkc2Vxbm87CiAgICAgICAgICAgICRjYWNoZWRfbGluZV92YWxpZCAgICAgICAgICAgICAgID0gJHZhbGlkOwogICAgICAgICAgICAkY2FjaGVkX2xpbmVfbGVhZGluZ19zcGFjZV9jb3VudCA9ICRsZWFkaW5nX3NwYWNlX2NvdW50OwogICAgICAgICAgICAkY2FjaGVkX3NlcW5vX3N0cmluZyAgICAgICAgICAgICA9ICRzZXFub19zdHJpbmc7CiAgICAgICAgICAgICRjYWNoZWRfbGluZV9LZW5kICAgICAgICAgICAgICAgID0gJEtlbmQ7CiAgICAgICAgICAgICRjYWNoZWRfbGluZV9tYXhpbXVtX2xlbmd0aCAgICAgID0gJG1heGltdW1fbGluZV9sZW5ndGg7CiAgICAgICAgfQoKICAgICAgICAkc2VsZi0+W19sYXN0X2xldmVsX3dyaXR0ZW5fXSAgICAgICA9ICRsZXZlbDsKICAgICAgICAkc2VsZi0+W19sYXN0X3NpZGVfY29tbWVudF9sZW5ndGhfXSA9ICRzaWRlX2NvbW1lbnRfbGVuZ3RoOwogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiB2YWxpZ25fb3V0cHV0X3N0ZXBfQgp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIENPREUgU0VDVElPTiAxMDogT3V0cHV0IFN0ZXAgQwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKeyAgICAjIyBjbG9zdXJlIGZvciBzdWIgdmFsaWduX291dHB1dF9zdGVwX0MKCiAgICAjIFZlcnRpY2FsIGFsaWdubWVudCBidWZmZXIgdXNlZCBieSB2YWxpZ25fb3V0cHV0X3N0ZXBfQwogICAgbXkgJHZhbGlnbl9idWZmZXJfZmlsbGluZzsKICAgIG15IEB2YWxpZ25fYnVmZmVyOwoKICAgIHN1YiBpbml0aWFsaXplX3ZhbGlnbl9idWZmZXIgewogICAgICAgIEB2YWxpZ25fYnVmZmVyICAgICAgICAgPSAoKTsKICAgICAgICAkdmFsaWduX2J1ZmZlcl9maWxsaW5nID0gRU1QVFlfU1RSSU5HOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBzdWIgZHVtcF92YWxpZ25fYnVmZmVyIHsKICAgICAgICBteSAoJHNlbGYpID0gQF87CgogICAgICAgICMgU2VuZCBhbGwgbGluZXMgaW4gdGhlIGN1cnJlbnQgYnVmZmVyIG9uIHRvIHN0ZXBfRAogICAgICAgIGlmIChAdmFsaWduX2J1ZmZlcikgewogICAgICAgICAgICBmb3JlYWNoIChAdmFsaWduX2J1ZmZlcikgewogICAgICAgICAgICAgICAgJHNlbGYtPnZhbGlnbl9vdXRwdXRfc3RlcF9EKCBAeyRffSApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIEB2YWxpZ25fYnVmZmVyID0gKCk7CiAgICAgICAgfQogICAgICAgICR2YWxpZ25fYnVmZmVyX2ZpbGxpbmcgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGR1bXBfdmFsaWduX2J1ZmZlcgoKICAgIHN1YiByZWR1Y2VfdmFsaWduX2J1ZmZlcl9pbmRlbnRhdGlvbiB7CgogICAgICAgIG15ICggJHNlbGYsICRkaWZmICkgPSBAXzsKCiAgICAgICAgIyBSZWR1Y2UgdGhlIGxlYWRpbmcgaW5kZW50YXRpb24gb2YgbGluZXMgaW4gdGhlIGN1cnJlbnQKICAgICAgICAjIGJ1ZmZlciBieSAkZGlmZiBzcGFjZXMKICAgICAgICBpZiAoICR2YWxpZ25fYnVmZmVyX2ZpbGxpbmcgJiYgJGRpZmYgKSB7CiAgICAgICAgICAgIG15ICRtYXhfdmFsaWduX2J1ZmZlciA9IEB2YWxpZ25fYnVmZmVyOwogICAgICAgICAgICBmb3JlYWNoIG15ICRpICggMCAuLiAkbWF4X3ZhbGlnbl9idWZmZXIgLSAxICkgewogICAgICAgICAgICAgICAgbXkgKCAkbGluZSwgJGxlYWRpbmdfc3BhY2VfY291bnQsICRsZXZlbCwgJEtlbmQgKSA9CiAgICAgICAgICAgICAgICAgIEB7ICR2YWxpZ25fYnVmZmVyWyRpXSB9OwogICAgICAgICAgICAgICAgbXkgJHdzID0gc3Vic3RyKCAkbGluZSwgMCwgJGRpZmYgKTsKICAgICAgICAgICAgICAgIGlmICggKCBsZW5ndGgoJHdzKSA9PSAkZGlmZiApICYmICR3cyA9fiAvXlxzKyQvICkgewogICAgICAgICAgICAgICAgICAgICRsaW5lID0gc3Vic3RyKCAkbGluZSwgJGRpZmYgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICggJGxlYWRpbmdfc3BhY2VfY291bnQgPj0gJGRpZmYgKSB7CiAgICAgICAgICAgICAgICAgICAgJGxlYWRpbmdfc3BhY2VfY291bnQgLT0gJGRpZmY7CiAgICAgICAgICAgICAgICAgICAgJGxldmVsID0KICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5sZXZlbF9jaGFuZ2UoICRsZWFkaW5nX3NwYWNlX2NvdW50LCAkZGlmZiwKICAgICAgICAgICAgICAgICAgICAgICAgJGxldmVsICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdmFsaWduX2J1ZmZlclskaV0gPQogICAgICAgICAgICAgICAgICBbICRsaW5lLCAkbGVhZGluZ19zcGFjZV9jb3VudCwgJGxldmVsLCAkS2VuZCBdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiByZWR1Y2VfdmFsaWduX2J1ZmZlcl9pbmRlbnRhdGlvbgoKICAgIHN1YiB2YWxpZ25fb3V0cHV0X3N0ZXBfQyB7CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgVGhpcyBpcyBTdGVwIEMgaW4gd3JpdGluZyB2ZXJ0aWNhbGx5IGFsaWduZWQgbGluZXMuCiAgICAgICAgIyBMaW5lcyBhcmUgZWl0aGVyIHN0b3JlZCBpbiBhIGJ1ZmZlciBvciBwYXNzZWQgYWxvbmcgdG8gdGhlIG5leHQgc3RlcC4KICAgICAgICAjIFRoZSByZWFzb24gZm9yIHN0b3JpbmcgbGluZXMgaXMgdGhhdCB3ZSBtYXkgbGF0ZXIgd2FudCB0byByZWR1Y2UgdGhlaXIKICAgICAgICAjIGluZGVudGF0aW9uIHdoZW4gLXNvdCBhbmQgLXNjdCBhcmUgYm90aCB1c2VkLgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIG15ICgKICAgICAgICAgICAgJHNlbGYsCiAgICAgICAgICAgICRzZXFub19zdHJpbmcsCiAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX3NlcW5vX3N0cmluZywKCiAgICAgICAgICAgIEBhcmdzX3RvX0QsCiAgICAgICAgKSA9IEBfOwoKICAgICAgICAjIER1bXAgYW55IHNhdmVkIGxpbmVzIGlmIHdlIHNlZSBhIGxpbmUgd2l0aCBhbiB1bmJhbGFuY2VkIG9wZW5pbmcgb3IKICAgICAgICAjIGNsb3NpbmcgdG9rZW4uCiAgICAgICAgJHNlbGYtPmR1bXBfdmFsaWduX2J1ZmZlcigpCiAgICAgICAgICBpZiAoICRzZXFub19zdHJpbmcgJiYgJHZhbGlnbl9idWZmZXJfZmlsbGluZyApOwoKICAgICAgICAjIEVpdGhlciBzdG9yZSBvciB3cml0ZSB0aGlzIGxpbmUKICAgICAgICBpZiAoJHZhbGlnbl9idWZmZXJfZmlsbGluZykgewogICAgICAgICAgICBwdXNoIEB2YWxpZ25fYnVmZmVyLCBbQGFyZ3NfdG9fRF07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkc2VsZi0+dmFsaWduX291dHB1dF9zdGVwX0QoQGFyZ3NfdG9fRCk7CiAgICAgICAgfQoKICAgICAgICAjIEZvciBsaW5lcyBzdGFydGluZyBvciBlbmRpbmcgd2l0aCBvcGVuaW5nIG9yIGNsb3NpbmcgdG9rZW5zLi4KICAgICAgICBpZiAoJHNlcW5vX3N0cmluZykgewogICAgICAgICAgICAkbGFzdF9ub25ibGFua19zZXFub19zdHJpbmcgPSAkc2Vxbm9fc3RyaW5nOwogICAgICAgICAgICBzZXRfbGFzdF9ub25ibGFua19zZXFub19zdHJpbmcoJHNlcW5vX3N0cmluZyk7CgogICAgICAgICAgICAjIFN0YXJ0IHN0b3JpbmcgbGluZXMgd2hlbiB3ZSBzZWUgYSBsaW5lIHdpdGggbXVsdGlwbGUgc3RhY2tlZAogICAgICAgICAgICAjIG9wZW5pbmcgdG9rZW5zLgogICAgICAgICAgICAjIHBhdGNoIGZvciBSVCAjOTQzNTQsIHJlcXVlc3RlZCBieSBDb2xpbiBXaWxsaWFtcwogICAgICAgICAgICBpZiAoICAgaW5kZXgoICRzZXFub19zdHJpbmcsICc6JyApID49IDAKICAgICAgICAgICAgICAgICYmICRzZXFub19zdHJpbmcgPX4gL15cZCsoXDorXGQrKSskLwogICAgICAgICAgICAgICAgJiYgJGFyZ3NfdG9fRFswXSAhfiAvXltcfVwpXF1cOlw/XS8gKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgIyBUaGlzIHRlc3QgaXMgZWZmaWNpZW50IGJ1dCBhIGxpdHRsZSBzdWJ0bGU6IFRoZSBmaXJzdCB0ZXN0CiAgICAgICAgICAgICAgICAjIHNheXMgdGhhdCB3ZSBoYXZlIG11bHRpcGxlIHNlcXVlbmNlIG51bWJlcnMgYW5kIGhlbmNlCiAgICAgICAgICAgICAgICAjIG11bHRpcGxlIG9wZW5pbmcgb3IgY2xvc2luZyB0b2tlbnMgaW4gdGhpcyBsaW5lLiAgVGhlIHNlY29uZAogICAgICAgICAgICAgICAgIyBwYXJ0IG9mIHRoZSB0ZXN0IHJlamVjdHMgc3RhY2tlZCBjbG9zaW5nIGFuZCB0ZXJuYXJ5IHRva2Vucy4KICAgICAgICAgICAgICAgICMgU28gaWYgd2UgZ2V0IGhlcmUgdGhlbiB3ZSBzaG91bGQgaGF2ZSBzdGFja2VkIHVuYmFsYW5jZWQKICAgICAgICAgICAgICAgICMgb3BlbmluZyB0b2tlbnMuCgogICAgICAgICAgICAgICAgIyBIZXJlIGlzIGEgY29tcGxleCBleGFtcGxlOgoKICAgICAgICAgICAgICAgICMgRm9vKCRCYXJbMF0sIHsgICMgKHNpZGUgY29tbWVudCkKICAgICAgICAgICAgICAgICMgICAgIGJheiA9PiAxLAogICAgICAgICAgICAgICAgIyB9KTsKCiAgICAgICAgICAgICAgICAjIFRoZSBmaXJzdCBsaW5lIGhhcyBzZXF1ZW5jZSA2Ojo0LiAgSXQgZG9lcyBub3QgYmVnaW4gd2l0aAogICAgICAgICAgICAgICAgIyBhIGNsb3NpbmcgdG9rZW4gb3IgdGVybmFyeSwgc28gaXQgcGFzc2VzIHRoZSB0ZXN0IGFuZCBtdXN0IGJlCiAgICAgICAgICAgICAgICAjIHN0YWNrZWQgb3BlbmluZyB0b2tlbnMuCgogICAgICAgICAgICAgICAgIyBUaGUgbGFzdCBsaW5lIGhhcyBzZXF1ZW5jZSA0OjYgYnV0IGlzIGEgc3RhY2sgb2YgY2xvc2luZwogICAgICAgICAgICAgICAgIyB0b2tlbnMsIHNvIGl0IGdldHMgcmVqZWN0ZWQuCgogICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQgdGhlIHNlcXVlbmNlIG51bWJlciBvZiBhbiBvcGVuaW5nIHRva2VuIGZvciBhIHF3CiAgICAgICAgICAgICAgICAjIHF1b3RlIGlzIGEgbmVnYXRpdmUgbnVtYmVyIGFuZCB3aWxsIGJlIHJlamVjdGVkLiAgRm9yCiAgICAgICAgICAgICAgICAjIGV4YW1wbGUsIGZvciB0aGUgZm9sbG93aW5nIGxpbmU6IHNraXBfc3ltYm9scyhbcXcoCiAgICAgICAgICAgICAgICAjICRzZXFub19zdHJpbmc9JzEwOjU6LTEnLiAgSXQgd291bGQgYmUgb2theSB0byBhY2NlcHQgaXQgYnV0IEkKICAgICAgICAgICAgICAgICMgZGVjaWRlZCBub3QgdG8gZG8gdGhpcyBhZnRlciB0ZXN0aW5nLgoKICAgICAgICAgICAgICAgICR2YWxpZ25fYnVmZmVyX2ZpbGxpbmcgPSAkc2Vxbm9fc3RyaW5nOwoKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgdmFsaWduX291dHB1dF9zdGVwX0MKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIENPREUgU0VDVElPTiAxMTogT3V0cHV0IFN0ZXAgRAojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpzdWIgYWRkX2xlYWRpbmdfdGFicyB7CgogICAgbXkgKCAkbGluZSwgJGxlYWRpbmdfc3BhY2VfY291bnQsICRsZXZlbCApID0gQF87CgogICAgIyBDb252ZXJ0IGxlYWRpbmcgd2hpdGVzcGFjZSB0byB1c2UgdGFicyBpZiAtZXQgb3IgLXQgYXJlIHNldAoKICAgICMgR2l2ZW46CiAgICAjICAgJGxpbmUgPSB0aGUgbGluZSBvZiB0ZXh0IHRvIGJlIHdyaXR0ZW4sIHdpdGhvdXQgYW55IHRhYnMKICAgICMgICAkbGVhZGluZ193aGl0ZXNwYWNlID0gZXhwZWN0ZWQgbnVtYmVyIG9mIGxlYWRpbmcgYmxhbmsgc3BhY2VzCiAgICAjICAgJGxldmVsID0gaW5kZW50YXRpb24gbGV2ZWwgKG5lZWRlZCBmb3IgLXQpCgogICAgIyBSZXR1cm46CiAgICAjICAgJGxpbmUgPSB0aGUgbGluZSB3aXRoIHBvc3NpYmxlIGxlYWRpbmcgdGFicwoKICAgIG15ICR0cmltbWVkX2xpbmUgPSAkbGluZTsKICAgICR0cmltbWVkX2xpbmUgPX4gcy9eIFteXFNcbl0rIC8vZ3htOwoKICAgICMgQ2hlY2sgZm9yIGRpc2NyZXBhbmN5IGluIGFjdHVhbCBsZWFkaW5nIHdoaXRlIHNwYWNlcyB3aXRoIGVzdGltYXRlCiAgICBpZiAoIGxlbmd0aCgkbGluZSkgIT0gbGVuZ3RoKCR0cmltbWVkX2xpbmUpICsgJGxlYWRpbmdfc3BhY2VfY291bnQgKSB7CgogICAgICAgICMgSWYgJGxlYWRpbmdfc3BhY2VfY291bnQgaXMgemVybywgdGhlbiB0aGlzIHJvdXRpbmUgbXVzdCBub3QKICAgICAgICAjIGJlIGNhbGxlZCBiZWNhdXNlIHdlIG1pZ2h0IGJlIGluIGEgcXVvdGUgb2Ygc29tZSBraW5kCiAgICAgICAgaWYgKCAkbGVhZGluZ19zcGFjZV9jb3VudCA8PSAwICkgewogICAgICAgICAgICBERVZFTF9NT0RFICYmIEZhdWx0KDw8RU9NKTsKc2hvdWxkIG5vdCBiZSBoZXJlIHdpdGggbGVhZGluZyBzcGFjZSBjb3VudCA9ICRsZWFkaW5nX3NwYWNlX2NvdW50CkVPTQogICAgICAgICAgICByZXR1cm4gJGxpbmU7CiAgICAgICAgfQoKICAgICAgICBteSAkbGVhZGluZ19zcGFjZV9jb3VudF90ZXN0ID0gbGVuZ3RoKCRsaW5lKSAtIGxlbmd0aCgkdHJpbW1lZF9saW5lKTsKCiAgICAgICAgIyBTa2lwIHRhYmJpbmcgaWYgYWN0dWFsIHdoaXRlc3BhY2UgaXMgbGVzcyB0aGFuIGV4cGVjdGVkCiAgICAgICAgaWYgKCAkbGVhZGluZ19zcGFjZV9jb3VudF90ZXN0IDwgJGxlYWRpbmdfc3BhY2VfY291bnQgKSB7CiAgICAgICAgICAgIERFQlVHX1RBQlMKICAgICAgICAgICAgICAmJiB3YXJuaW5nKDw8RU9NKTsKRXJyb3IgZW50YWJiaW5nOiBleHBlY3RlZCBjb3VudD0kbGVhZGluZ19zcGFjZV9jb3VudCBidXQgb25seSBmb3VuZCAkbGVhZGluZ19zcGFjZV9jb3VudF90ZXN0IGZvciBsaW5lOgonJGxpbmUnCkVPTQogICAgICAgICAgICByZXR1cm4gJGxpbmU7CiAgICAgICAgfQoKICAgICAgICAjIFVzZSBhY3R1YWwgd2hpdGVzcGFjZSBpZiBpdCBleGNlZWRzIHByZWRpY3Rpb24uIFRoaXMgbWFpbmx5CiAgICAgICAgIyBvY2N1cnMgYXQgaGFuZ2luZyBzaWRlIGNvbW1lbnRzLgogICAgICAgICRsZWFkaW5nX3NwYWNlX2NvdW50ID0gJGxlYWRpbmdfc3BhY2VfY291bnRfdGVzdDsKICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBIYW5kbGUgLS1lbnRhYi1sZWFkaW5nLXdoaXRlc3BhY2UKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBpZiAoJHJPcHRzX2VudGFiX2xlYWRpbmdfd2hpdGVzcGFjZSkgewoKICAgICAgICBteSAkc3BhY2VfY291bnQgPQogICAgICAgICAgJGxlYWRpbmdfc3BhY2VfY291bnQgJSAkck9wdHNfZW50YWJfbGVhZGluZ193aGl0ZXNwYWNlOwogICAgICAgIG15ICR0YWJfY291bnQgPQogICAgICAgICAgaW50KCAkbGVhZGluZ19zcGFjZV9jb3VudCAvICRyT3B0c19lbnRhYl9sZWFkaW5nX3doaXRlc3BhY2UgKTsKICAgICAgICBteSAkbGVhZGluZ19zdHJpbmcgPSAiXHQiIHggJHRhYl9jb3VudCAuIFNQQUNFIHggJHNwYWNlX2NvdW50OwogICAgICAgICRsaW5lID0gJGxlYWRpbmdfc3RyaW5nIC4gJHRyaW1tZWRfbGluZTsKICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgSGFuZGxlIC10IChvbmUgdGFiIHBlciBsZXZlbDsgbm90IHJlY29tbWVuZGVkKQogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBlbHNpZiAoICRyT3B0c190YWJzICYmICRsZXZlbCApIHsKCiAgICAgICAgbXkgJGxlYWRpbmdfc3RyaW5nID0gKCAiXHQiIHggJGxldmVsICk7CiAgICAgICAgbXkgJHNwYWNlX2NvdW50ID0gJGxlYWRpbmdfc3BhY2VfY291bnQgLSAkbGV2ZWwgKiAkck9wdHNfaW5kZW50X2NvbHVtbnM7CgogICAgICAgICMgc2hvdWxkbid0IGhhcHBlbjoKICAgICAgICBpZiAoICRzcGFjZV9jb3VudCA8IDAgKSB7CgogICAgICAgICAgICAjIEJ1dCBpdCBjb3VsZCBiZSBhbiBvdXRkZW50ZWQgY29tbWVudAogICAgICAgICAgICBpZiAoICRsaW5lICF+IC9eXHMqIy8gKSB7CiAgICAgICAgICAgICAgICBERUJVR19UQUJTCiAgICAgICAgICAgICAgICAgICYmIHdhcm5pbmcoCiJFcnJvciBlbnRhYmJpbmcgaW4gdmFsaWduX291dHB1dF9zdGVwX0Q6IGZvciBsZXZlbD0kbGV2ZWwgY291bnQ9JGxlYWRpbmdfc3BhY2VfY291bnRcbiIKICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkbGVhZGluZ19zdHJpbmcgPSAoIFNQQUNFIHggJGxlYWRpbmdfc3BhY2VfY291bnQgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRsZWFkaW5nX3N0cmluZyAuPSAoIFNQQUNFIHggJHNwYWNlX2NvdW50ICk7CiAgICAgICAgfQogICAgICAgICRsaW5lID0gJGxlYWRpbmdfc3RyaW5nIC4gJHRyaW1tZWRfbGluZTsKICAgIH0KCiAgICAjIG5vdGhpbmcgdG8gZG87IHdlIHNob3VsZCBoYXZlIHNraXBwZWQgYSBjYWxsIHRvIHRoaXMgc3ViCiAgICBlbHNlIHsKICAgICAgICBpZiAoREVWRUxfTU9ERSkgewogICAgICAgICAgICBGYXVsdCgKImluIHRhYiBzdWIgYnV0IG5laXRoZXIgLXQgbm9yIC1ldCBzZXQ6IGNoZWNrIGZsYWcgJ3JlcXVpcmVfdGFicydcbiIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gJGxpbmU7Cn0gIyMgZW5kIHN1YiBhZGRfbGVhZGluZ190YWJzCgpzdWIgdmFsaWduX291dHB1dF9zdGVwX0QgewoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFRoaXMgaXMgU3RlcCBEIGluIHdyaXRpbmcgdmVydGljYWxseSBhbGlnbmVkIGxpbmVzLgogICAgIyBJdCBpcyB0aGUgZW5kIG9mIHRoZSB2ZXJ0aWNhbCBhbGlnbm1lbnQgcGlwZWxpbmUuCiAgICAjIFdyaXRlIG9uZSB2ZXJ0aWNhbGx5IGFsaWduZWQgbGluZSBvZiBjb2RlIHRvIHRoZSBvdXRwdXQgb2JqZWN0LgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBteSAoICRzZWxmLCAkbGluZSwgJGxlYWRpbmdfc3BhY2VfY291bnQsICRsZXZlbCwgJEtlbmQgKSA9IEBfOwoKICAgICMgQ29udmVydCBsZWFkaW5nIHdoaXRlc3BhY2UgdG8gdXNlIHRhYnMgaWYgcmVxdWVzdGVkLgogICAgaWYgKCAkcmVxdWlyZV90YWJzICYmICRsZWFkaW5nX3NwYWNlX2NvdW50ID4gMCApIHsKICAgICAgICAkbGluZSA9IGFkZF9sZWFkaW5nX3RhYnMoICRsaW5lLCAkbGVhZGluZ19zcGFjZV9jb3VudCwgJGxldmVsICk7CiAgICB9CgogICAgbXkgJGZpbGVfd3JpdGVyX29iamVjdCA9ICRzZWxmLT5bX2ZpbGVfd3JpdGVyX29iamVjdF9dOwogICAgJGZpbGVfd3JpdGVyX29iamVjdC0+d3JpdGVfY29kZV9saW5lKCAkbGluZSAuICJcbiIsICRLZW5kICk7CgogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgdmFsaWduX291dHB1dF9zdGVwX0QKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQ09ERSBTRUNUSU9OIDEyOiBTdW1tYXJ5CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpzdWIgcmVwb3J0X2FueXRoaW5nX3VudXN1YWwgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICBteSAkb3V0ZGVudGVkX2xpbmVfY291bnQgPSAkc2VsZi0+W19vdXRkZW50ZWRfbGluZV9jb3VudF9dOwogICAgaWYgKCAkb3V0ZGVudGVkX2xpbmVfY291bnQgPiAwICkgewogICAgICAgIHdyaXRlX2xvZ2ZpbGVfZW50cnkoCiAgICAgICAgICAgICIkb3V0ZGVudGVkX2xpbmVfY291bnQgbG9uZyBsaW5lcyB3ZXJlIG91dGRlbnRlZDpcbiIpOwogICAgICAgIG15ICRmaXJzdF9vdXRkZW50ZWRfbGluZV9hdCA9ICRzZWxmLT5bX2ZpcnN0X291dGRlbnRlZF9saW5lX2F0X107CiAgICAgICAgd3JpdGVfbG9nZmlsZV9lbnRyeSgKICAgICAgICAgICAgIiAgRmlyc3QgYXQgb3V0cHV0IGxpbmUgJGZpcnN0X291dGRlbnRlZF9saW5lX2F0XG4iKTsKCiAgICAgICAgaWYgKCAkb3V0ZGVudGVkX2xpbmVfY291bnQgPiAxICkgewogICAgICAgICAgICBteSAkbGFzdF9vdXRkZW50ZWRfbGluZV9hdCA9ICRzZWxmLT5bX2xhc3Rfb3V0ZGVudGVkX2xpbmVfYXRfXTsKICAgICAgICAgICAgd3JpdGVfbG9nZmlsZV9lbnRyeSgKICAgICAgICAgICAgICAgICIgICBMYXN0IGF0IG91dHB1dCBsaW5lICRsYXN0X291dGRlbnRlZF9saW5lX2F0XG4iKTsKICAgICAgICB9CiAgICAgICAgd3JpdGVfbG9nZmlsZV9lbnRyeSgKICAgICAgICAgICAgIiAgdXNlIC1ub2xsIHRvIHByZXZlbnQgb3V0ZGVudGluZywgLWw9biB0byBpbmNyZWFzZSBsaW5lIGxlbmd0aFxuIgogICAgICAgICk7CiAgICAgICAgd3JpdGVfbG9nZmlsZV9lbnRyeSgiXG4iKTsKICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHJlcG9ydF9hbnl0aGluZ191bnVzdWFsCgp9ICMjIGVuZCBwYWNrYWdlIFBlcmw6OlRpZHk6OlZlcnRpY2FsQWxpZ25lcgoxOwo=</File>
        <File Location="Kernel/cpan-lib/Perl/Tidy/Tokenizer.pm" Permission="660" Encode="Base64">IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMKIyBQZXJsOjpUaWR5OjpUb2tlbml6ZXIgcmVhZHMgYSBzb3VyY2UgYW5kIGJyZWFrcyBpdCBpbnRvIGEgc3RyZWFtIG9mIHRva2VucwojCiMgVXNhZ2UgT3V0bGluZToKIwojICAgU1RFUCAxOiBpbml0aWFsaXplIG9yIHJlLWluaXRpYWxpemUgVG9rZW5pemVyIHdpdGggdXNlciBvcHRpb25zCiMgICAgIFBlcmw6OlRpZHk6OlRva2VuaXplcjo6Y2hlY2tfb3B0aW9ucygkck9wdHMpOwojCiMgICBTVEVQIDI6IGNyZWF0ZSBhIHRva2VuaXplciBmb3IgYSBzcGVjaWZpYyBpbnB1dCBzb3VyY2Ugb2JqZWN0CiMgICAgIG15ICR0b2tlbml6ZXIgPSBQZXJsOjpUaWR5OjpUb2tlbml6ZXItPm5ldygKIyAgICAgICAgIHNvdXJjZV9vYmplY3QgICAgICA9PiAkc291cmNlLAojICAgICAgICAgLi4uCiMgICAgICk7CiMKIyAgIFNURVAgMzogZ2V0IGFuZCBwcm9jZXNzIGVhY2ggdG9rZW5pemVkICdsaW5lJyAoYSBoYXNoIHJlZiBvZiB0b2tlbiBpbmZvKQojICAgIHdoaWxlICggbXkgJGxpbmUgPSAkdG9rZW5pemVyLT5nZXRfbGluZSgpICkgewojICAgICAgICAkZm9ybWF0dGVyLT53cml0ZV9saW5lKCRsaW5lKTsKIyAgICB9CiMKIyAgIFNURVAgNDogcmVwb3J0IGVycm9ycwojICAgIG15ICRzZXZlcmVfZXJyb3IgPSAkdG9rZW5pemVyLT5yZXBvcnRfdG9rZW5pemF0aW9uX2Vycm9ycygpOwojCiMgVGhlIHNvdXJjZSBvYmplY3QgY2FuIGJlIGEgU1RSSU5HIHJlZiwgYW4gQVJSQVkgcmVmLCBvciBhbiBvYmplY3Qgd2l0aCBhCiMgZ2V0X2xpbmUoKSBtZXRob2Qgd2hpY2ggc3VwcGxpZXMgb25lIGxpbmUgKGEgY2hhcmFjdGVyIHN0cmluZykgcGVybCBjYWxsLgojCiMgTk9URTogVGhpcyBpcyBub3QgYSByZWFsIGNsYXNzLiAgT25seSBvbmUgdG9rZW5pemVyIG15IGJlIHVzZWQuCiMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpwYWNrYWdlIFBlcmw6OlRpZHk6OlRva2VuaXplcjsKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgRW5nbGlzaCBxdyggLW5vX21hdGNoX3ZhcnMgKTsKCm91ciAkVkVSU0lPTiA9ICcyMDI1MDEwNSc7Cgp1c2UgQ2FycDsKCnVzZSBjb25zdGFudCBERVZFTF9NT0RFICAgPT4gMDsKdXNlIGNvbnN0YW50IEVNUFRZX1NUUklORyA9PiBxe307CnVzZSBjb25zdGFudCBTUEFDRSAgICAgICAgPT4gcXsgfTsKdXNlIGNvbnN0YW50IEJBQ0tTTEFTSCAgICA9PiBxe1xcfTsKCnsgIzw8PCBBIG5vbi1pbmRlbnRpbmcgYnJhY2UgdG8gY29udGFpbiBhbGwgbGV4aWNhbCB2YXJpYWJsZXMKCiMgUGFyZW50IHNlcXVlbmNlIG51bWJlciBvZiB0cmVlIG9mIGNvbnRhaW5lcnM7IG11c3QgYmUgMQp1c2UgY29uc3RhbnQgU0VRX1JPT1QgPT4gMTsKCiMgRGVmYXVsdHMgZm9yIGd1ZXNzaW5nIG9sZCBpbmRlbnRhdGlvbgp1c2UgY29uc3RhbnQgSU5ERU5UX0NPTFVNTlNfREVGQVVMVCA9PiA0Owp1c2UgY29uc3RhbnQgVEFCX1NJWkVfREVGQVVMVCAgICAgICA9PiA4OwoKIyBEZWNpbWFsIHZhbHVlcyBvZiBzb21lIGFzY2lpIGNoYXJhY3RlcnMgZm9yIHF1aWNrIGNoZWNrcwp1c2UgY29uc3RhbnQgT1JEX1RBQiAgICAgICAgICAgPT4gOTsKdXNlIGNvbnN0YW50IE9SRF9TUEFDRSAgICAgICAgID0+IDMyOwp1c2UgY29uc3RhbnQgT1JEX1BSSU5UQUJMRV9NSU4gPT4gMzM7CnVzZSBjb25zdGFudCBPUkRfUFJJTlRBQkxFX01BWCA9PiAxMjY7CgojIEEgbGltaXQgb24gbWVzc2FnZSBsZW5ndGggd2hlbiBwcm9ibGVtcyBhcmUgZGV0ZWN0ZWQKdXNlIGNvbnN0YW50IExPTkdfTUVTU0FHRSA9PiAyNTY7CgojIEdMT0JBTCBWQVJJQUJMRVMgd2hpY2ggY2hhbmdlIGR1cmluZyB0b2tlbml6YXRpb246CiMgVGhlc2UgY291bGQgYWxzbyBiZSBzdG9yZWQgaW4gJHNlbGYgYnV0IGl0IGlzIG1vcmUgY29udmVuaWVudCBhbmQKIyBlZmZpY2llbnQgdG8gbWFrZSB0aGVtIGdsb2JhbCBsZXhpY2FsIHZhcmlhYmxlcy4KIyBJTklUSUFMSVpFUjogc3ViIHByZXBhcmVfZm9yX2FfbmV3X2ZpbGUKbXkgKAoKICAgICRicmFjZV9kZXB0aCwKICAgICRjb250ZXh0LAogICAgJGN1cnJlbnRfcGFja2FnZSwKICAgICRsYXN0X25vbmJsYW5rX2Jsb2NrX3R5cGUsCiAgICAkbGFzdF9ub25ibGFua190b2tlbiwKICAgICRsYXN0X25vbmJsYW5rX3R5cGUsCiAgICAkbmV4dF9zZXF1ZW5jZV9udW1iZXIsCiAgICAkcGFyZW5fZGVwdGgsCiAgICAkcmJyYWNlX2NvbnRleHQsCiAgICAkcmJyYWNlX3BhY2thZ2UsCiAgICAkcmJyYWNlX3N0cnVjdHVyYWxfdHlwZSwKICAgICRyYnJhY2VfdHlwZSwKICAgICRyY3VycmVudF9kZXB0aCwKICAgICRyY3VycmVudF9zZXF1ZW5jZV9udW1iZXIsCiAgICAkcmRlcHRoX2FycmF5LAogICAgJHJpc19ibG9ja19mdW5jdGlvbiwKICAgICRyaXNfYmxvY2tfbGlzdF9mdW5jdGlvbiwKICAgICRyaXNfY29uc3RhbnQsCiAgICAkcmlzX3VzZXJfZnVuY3Rpb24sCiAgICAkcm5lc3RlZF9zdGF0ZW1lbnRfdHlwZSwKICAgICRybmVzdGVkX3Rlcm5hcnlfZmxhZywKICAgICRycGFyZW5fc2VtaWNvbG9uX2NvdW50LAogICAgJHJwYXJlbl92YXJzLAogICAgJHJwYXJlbl90eXBlLAogICAgJHJzYXdfZnVuY3Rpb25fZGVmaW5pdGlvbiwKICAgICRyc2F3X3VzZV9tb2R1bGUsCiAgICAkcnNxdWFyZV9icmFja2V0X3N0cnVjdHVyYWxfdHlwZSwKICAgICRyc3F1YXJlX2JyYWNrZXRfdHlwZSwKICAgICRyc3RhcnRpbmdfbGluZV9vZl9jdXJyZW50X2RlcHRoLAogICAgJHJ0b3RhbF9kZXB0aCwKICAgICRydXNlcl9mdW5jdGlvbl9wcm90b3R5cGUsCiAgICAkc3F1YXJlX2JyYWNrZXRfZGVwdGgsCiAgICAkc3RhdGVtZW50X3R5cGUsCiAgICAkdG90YWxfZGVwdGgsCik7CgpteSAoCgogICAgIyBHTE9CQUwgQ09OU1RBTlRTIGZvciByb3V0aW5lcyBpbiB0aGlzIHBhY2thZ2UsCiAgICAjIElOSVRJQUxJWkVSOiBCRUdJTiBibG9jay4KICAgICVjYW5fc3RhcnRfZGlncmFwaCwKICAgICVleHBlY3Rpbmdfb3BlcmF0b3JfdG9rZW4sCiAgICAlZXhwZWN0aW5nX29wZXJhdG9yX3R5cGVzLAogICAgJWV4cGVjdGluZ190ZXJtX3Rva2VuLAogICAgJWV4cGVjdGluZ190ZXJtX3R5cGVzLAogICAgJWlzX2Jsb2NrX29wZXJhdG9yLAogICAgJWlzX2RpZ3JhcGgsCiAgICAlaXNfZmlsZV90ZXN0X29wZXJhdG9yLAogICAgJWlzX2lmX2Vsc2lmX3VubGVzcywKICAgICVpc19pZl9lbHNpZl91bmxlc3NfY2FzZV93aGVuLAogICAgJWlzX2luZGlyZWN0X29iamVjdF90YWtlciwKICAgICVpc19rZXl3b3JkX3JlamVjdGluZ19xdWVzdGlvbl9hc19wYXR0ZXJuX2RlbGltaXRlciwKICAgICVpc19rZXl3b3JkX3JlamVjdGluZ19zbGFzaF9hc19wYXR0ZXJuX2RlbGltaXRlciwKICAgICVpc19rZXl3b3JkX3Rha2luZ19saXN0LAogICAgJWlzX2tleXdvcmRfdGFraW5nX29wdGlvbmFsX2FyZywKICAgICVpc19xX3FxX3F3X3F4X3FyX3NfeV90cl9tLAogICAgJWlzX3FfcXFfcXhfcXJfc195X3RyX20sCiAgICAlcXVvdGVfbW9kaWZpZXJzLAogICAgJWlzX3NlbWljb2xvbl9vcl90LAogICAgJWlzX3NvcnRfbWFwX2dyZXAsCiAgICAlaXNfc29ydF9tYXBfZ3JlcF9ldmFsX2RvLAogICAgJWlzX3RldHJhZ3JhcGgsCiAgICAlaXNfdHJpZ3JhcGgsCiAgICAlaXNfdmFsaWRfdG9rZW5fdHlwZSwKICAgICVvdGhlcl9saW5lX2VuZGluZ3MsCiAgICAlcmVhbGx5X3dhbnRfdGVybSwKICAgIEBjbG9zaW5nX2JyYWNlX25hbWVzLAogICAgQG9wZW5pbmdfYnJhY2VfbmFtZXMsCgogICAgIyBHTE9CQUwgQ09OU1RBTlQgaGFzaCBsb29rdXAgdGFibGUgb2Ygb3BlcmF0b3IgZXhwZWN0ZWQgdmFsdWVzCiAgICAjIElOSVRJQUxJWkVSOiBCRUdJTiBibG9jawogICAgJW9wX2V4cGVjdGVkX3RhYmxlLAoKICAgICMgR0xPQkFMIFZBUklBQkxFUyB3aGljaCBhcmUgY29uc3RhbnQgYWZ0ZXIgYmVpbmcgY29uZmlndXJlZC4KICAgICMgSU5JVElBTElaRVI6IEJFR0lOIGJsb2NrIGFuZCBtb2RpZmllZCBieSBzdWIgY2hlY2tfb3B0aW9ucwogICAgJWlzX2NvZGVfYmxvY2tfdG9rZW4sCiAgICAlaXNfa2V5d29yZCwKICAgICVpc19teV9vdXJfc3RhdGUsCiAgICAlaXNfcGFja2FnZSwKICAgICVtYXRjaGluZ19lbmRfdG9rZW4sCgogICAgIyBJTklUSUFMSVpFUjogc3ViIGNoZWNrX29wdGlvbnMKICAgICRjb2RlX3NraXBwaW5nX3BhdHRlcm5fYmVnaW4sCiAgICAkY29kZV9za2lwcGluZ19wYXR0ZXJuX2VuZCwKICAgICRmb3JtYXRfc2tpcHBpbmdfcGF0dGVybl9iZWdpbiwKICAgICRmb3JtYXRfc2tpcHBpbmdfcGF0dGVybl9lbmQsCgogICAgJHJPcHRzX2NvZGVfc2tpcHBpbmcsCiAgICAkck9wdHNfY29kZV9za2lwcGluZ19iZWdpbiwKICAgICRyT3B0c19mb3JtYXRfc2tpcHBpbmcsCiAgICAkck9wdHNfZm9ybWF0X3NraXBwaW5nX2JlZ2luLAogICAgJHJPcHRzX2Zvcm1hdF9za2lwcGluZ19lbmQsCiAgICAkck9wdHNfc3RhcnRpbmdfaW5kZW50YXRpb25fbGV2ZWwsCiAgICAkck9wdHNfaW5kZW50X2NvbHVtbnMsCiAgICAkck9wdHNfbG9va19mb3JfaGFzaF9iYW5nLAogICAgJHJPcHRzX2xvb2tfZm9yX2F1dG9sb2FkZXIsCiAgICAkck9wdHNfbG9va19mb3Jfc2VsZmxvYWRlciwKICAgICRyT3B0c190cmltX3F3LAogICAgJHJPcHRzX2V4dGVuZGVkX3N5bnRheCwKICAgICRyT3B0c19jb250aW51YXRpb25faW5kZW50YXRpb24sCiAgICAkck9wdHNfb3V0ZGVudF9sYWJlbHMsCiAgICAkck9wdHNfbWF4aW11bV9sZXZlbF9lcnJvcnMsCiAgICAkck9wdHNfbWF4aW11bV91bmV4cGVjdGVkX2Vycm9ycywKICAgICRyT3B0c19pbmRlbnRfY2xvc2luZ19icmFjZSwKICAgICRyT3B0c19ub25faW5kZW50aW5nX2JyYWNlcywKICAgICRyT3B0c19ub25faW5kZW50aW5nX2JyYWNlX3ByZWZpeCwKICAgICRyT3B0c193aGl0ZXNwYWNlX2N5Y2xlLAoKICAgICR0YWJzaXplLAogICAgJWlzX0VORF9EQVRBX2Zvcm1hdF9zdWIsCiAgICAlaXNfZ3JlcF9hbGlhcywKICAgICVpc19zdWIsCiAgICAkZ3Vlc3NfaWZfbWV0aG9kLAopOwoKIyBwb3NzaWJsZSB2YWx1ZXMgb2Ygb3BlcmF0b3JfZXhwZWN0ZWQoKQp1c2UgY29uc3RhbnQgVEVSTSAgICAgPT4gLTE7CnVzZSBjb25zdGFudCBVTktOT1dOICA9PiAwOwp1c2UgY29uc3RhbnQgT1BFUkFUT1IgPT4gMTsKCiMgcG9zc2libGUgdmFsdWVzIG9mIGNvbnRleHQKdXNlIGNvbnN0YW50IFNDQUxBUl9DT05URVhUICA9PiAtMTsKdXNlIGNvbnN0YW50IFVOS05PV05fQ09OVEVYVCA9PiAwOwp1c2UgY29uc3RhbnQgTElTVF9DT05URVhUICAgID0+IDE7CgojIE1heGltdW0gbnVtYmVyIG9mIGxpdHRsZSBtZXNzYWdlczsgcHJvYmFibHkgbmVlZCBub3QgYmUgY2hhbmdlZC4KdXNlIGNvbnN0YW50IE1BWF9OQUdfTUVTU0FHRVMgPT4gNjsKCkJFR0lOIHsKCiAgICAjIEFycmF5IGluZGV4IG5hbWVzIGZvciAkc2VsZi4KICAgICMgRG8gbm90IGNvbWJpbmUgd2l0aCBvdGhlciBCRUdJTiBibG9ja3MgKGMxMDEpLgogICAgbXkgJGkgPSAwOwogICAgdXNlIGNvbnN0YW50IHsKICAgICAgICBfcmhlcmVfdGFyZ2V0X2xpc3RfICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfaW5faGVyZV9kb2NfICAgICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfaGVyZV9kb2NfdGFyZ2V0XyAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfaGVyZV9xdW90ZV9jaGFyYWN0ZXJfICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfaW5fZGF0YV8gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfaW5fZW5kXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfaW5fZm9ybWF0XyAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfaW5fZXJyb3JfICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfaW5fdHJvdWJsZV8gICAgICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfd2FybmluZ19jb3VudF8gICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfaHRtbF90YWdfY291bnRfICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfaW5fcG9kXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfaW5fY29kZV9za2lwcGluZ18gICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfaW5fZm9ybWF0X3NraXBwaW5nXyAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfaW5fYXR0cmlidXRlX2xpc3RfICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfaW5fcXVvdGVfICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcXVvdGVfdGFyZ2V0XyAgICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfbGluZV9zdGFydF9xdW90ZV8gICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfc3RhcnRpbmdfbGV2ZWxfICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfa25vd19zdGFydGluZ19sZXZlbF8gICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfbGFzdF9saW5lX251bWJlcl8gICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfc2F3X3BlcmxfZGFzaF9QXyAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfc2F3X3BlcmxfZGFzaF93XyAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfc2F3X3VzZV9zdHJpY3RfICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfc2F3X2JyYWNlX2Vycm9yXyAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfaGl0X2J1Z18gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfbG9va19mb3JfYXV0b2xvYWRlcl8gICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfbG9va19mb3Jfc2VsZmxvYWRlcl8gICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfc2F3X2F1dG9sb2FkZXJfICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfc2F3X3NlbGZsb2FkZXJfICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfc2F3X2hhc2hfYmFuZ18gICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfc2F3X2VuZF8gICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfc2F3X2RhdGFfICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfc2F3X25lZ2F0aXZlX2luZGVudGF0aW9uXyAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfc3RhcnRlZF90b2tlbml6aW5nXyAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfZGVidWdnZXJfb2JqZWN0XyAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfZGlhZ25vc3RpY3Nfb2JqZWN0XyAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfbG9nZ2VyX29iamVjdF8gICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfc2F2ZV9sb2dmaWxlXyAgICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfdW5leHBlY3RlZF9lcnJvcl9jb3VudF8gICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfc3RhcnRlZF9sb29raW5nX2Zvcl9oZXJlX3RhcmdldF9hdF8gPT4gJGkrKywKICAgICAgICBfbmVhcmx5X21hdGNoZWRfaGVyZV90YXJnZXRfYXRfICAgICAgPT4gJGkrKywKICAgICAgICBfbGluZV9vZl90ZXh0XyAgICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcmxvd2VyX2Nhc2VfbGFiZWxzX2F0XyAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfbWF4aW11bV9sZXZlbF8gICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfdHJ1ZV9icmFjZV9lcnJvcl9jb3VudF8gICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfck9wdHNfICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcmlucHV0X2xpbmVzXyAgICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfaW5wdXRfbGluZV9pbmRleF9uZXh0XyAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcnRyaW1tZWRfaW5wdXRfbGluZXNfICAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcmNsb3NpbmdfYnJhY2VfaW5kZW50YXRpb25faGFzaF8gICAgPT4gJGkrKywKICAgICAgICBfc2hvd19pbmRlbnRhdGlvbl90YWJsZV8gICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcm5vbl9pbmRlbnRpbmdfYnJhY2Vfc3RhY2tfICAgICAgICAgPT4gJGkrKywKICAgICAgICBfcmJhcmV3b3JkX2luZm9fICAgICAgICAgICAgICAgICAgICAgPT4gJGkrKywKICAgIH07Cn0gIyMgZW5kIEJFR0lOCgp7ICAgICMjIGNsb3N1cmUgZm9yIHN1YnMgdG8gY291bnQgaW5zdGFuY2VzCgogICAgIyBtZXRob2RzIHRvIGNvdW50IGluc3RhbmNlcwogICAgbXkgJF9jb3VudCA9IDA7CiAgICBzdWIgZ2V0X2NvdW50ICAgICAgICB7IHJldHVybiAkX2NvdW50OyB9CiAgICBzdWIgX2luY3JlbWVudF9jb3VudCB7IHJldHVybiArKyRfY291bnQgfQogICAgc3ViIF9kZWNyZW1lbnRfY291bnQgeyByZXR1cm4gLS0kX2NvdW50IH0KfQoKc3ViIERFU1RST1kgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgIF9kZWNyZW1lbnRfY291bnQoKTsKICAgIHJldHVybjsKfQoKc3ViIEFVVE9MT0FEIHsKCiAgICAjIENhdGNoIGFueSB1bmRlZmluZWQgc3ViIGNhbGxzIHNvIHRoYXQgd2UgYXJlIHN1cmUgdG8gZ2V0CiAgICAjIHNvbWUgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbi4gIFRoaXMgc3ViIHNob3VsZCBuZXZlciBiZSBjYWxsZWQKICAgICMgZXhjZXB0IGZvciBhIHByb2dyYW1taW5nIGVycm9yLgogICAgb3VyICRBVVRPTE9BRDsKICAgIHJldHVybiBpZiAoICRBVVRPTE9BRCA9fiAvXGJERVNUUk9ZJC8gKTsKICAgIG15ICggJHBrZywgJGZuYW1lLCAkbG5vICkgPSBjYWxsZXIoKTsKICAgIG15ICRteV9wYWNrYWdlID0gX19QQUNLQUdFX187CiAgICBwcmludCB7KlNUREVSUn0gPDxFT007Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KRXJyb3IgZGV0ZWN0ZWQgaW4gcGFja2FnZSAnJG15X3BhY2thZ2UnLCB2ZXJzaW9uICRWRVJTSU9OClJlY2VpdmVkIHVuZXhwZWN0ZWQgQVVUT0xPQUQgY2FsbCBmb3Igc3ViICckQVVUT0xPQUQnCkNhbGxlZCBmcm9tIHBhY2thZ2U6ICckcGtnJwpDYWxsZWQgZnJvbSBGaWxlICckZm5hbWUnICBhdCBsaW5lICckbG5vJwpUaGlzIGVycm9yIGlzIHByb2JhYmx5IGR1ZSB0byBhIHJlY2VudCBwcm9ncmFtbWluZyBjaGFuZ2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpFT00KICAgIGV4aXQgMTsKfSAjIyBlbmQgc3ViIEFVVE9MT0FECgpzdWIgRGllIHsKICAgIG15ICgkbXNnKSA9IEBfOwogICAgUGVybDo6VGlkeTo6RGllKCRtc2cpOwogICAgY3JvYWsgInVuZXhwZWN0ZWQgcmV0dXJuIGZyb20gUGVybDo6VGlkeTo6RGllIjsKfQoKc3ViIEZhdWx0IHsKICAgIG15ICggJHNlbGYsICRtc2cgKSA9IEBfOwoKICAgICMgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBmb3IgZXJyb3JzIHRoYXQgcmVhbGx5IHNob3VsZCBub3Qgb2NjdXIKICAgICMgZXhjZXB0IGlmIHRoZXJlIGhhcyBiZWVuIGEgYnVnIGludHJvZHVjZWQgYnkgYSByZWNlbnQgcHJvZ3JhbSBjaGFuZ2UuCiAgICAjIFBsZWFzZSBhZGQgY29tbWVudHMgYXQgY2FsbHMgdG8gRmF1bHQgdG8gZXhwbGFpbiB3aHkgdGhlIGNhbGwKICAgICMgc2hvdWxkIG5vdCBvY2N1ciwgYW5kIHdoZXJlIHRvIGxvb2sgdG8gZml4IGl0LgogICAgbXkgKCAkcGFja2FnZTBfdXUsICRmaWxlbmFtZTBfdXUsICRsaW5lMCwgICAgJHN1YnJvdXRpbmUwX3V1ICkgPSBjYWxsZXIoMCk7CiAgICBteSAoICRwYWNrYWdlMV91dSwgJGZpbGVuYW1lMSwgICAgJGxpbmUxLCAgICAkc3Vicm91dGluZTEgKSAgICA9IGNhbGxlcigxKTsKICAgIG15ICggJHBhY2thZ2UyX3V1LCAkZmlsZW5hbWUyX3V1LCAkbGluZTJfdXUsICRzdWJyb3V0aW5lMiApICAgID0gY2FsbGVyKDIpOwogICAgbXkgJHBrZyA9IF9fUEFDS0FHRV9fOwoKICAgICMgQ2F0Y2ggcG90ZW50aWFsIGVycm9yIG9mIEZhdWx0IG5vdCBjYWxsZWQgYXMgYSBtZXRob2QKICAgIG15ICRpbnB1dF9zdHJlYW1fbmFtZTsKICAgIGlmICggIXJlZigkc2VsZikgKSB7CiAgICAgICAgJG1zZyA9ICJGYXVsdCBub3QgY2FsbGVkIGFzIGEgbWV0aG9kIC0gcGxlYXNlIGZpeFxuIjsKICAgICAgICBpZiAoICRzZWxmICYmIGxlbmd0aCgkc2VsZikgPCBMT05HX01FU1NBR0UgKSB7ICRtc2cgLj0gJHNlbGYgfQogICAgICAgICRzZWxmICAgICAgICAgICAgICA9IHVuZGVmOwogICAgICAgICRpbnB1dF9zdHJlYW1fbmFtZSA9ICIoVU5LTk9XTikiOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJGlucHV0X3N0cmVhbV9uYW1lID0gJHNlbGYtPmdldF9pbnB1dF9zdHJlYW1fbmFtZSgpOwogICAgfQoKICAgIERpZSg8PEVPTSk7Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGlsZSBvcGVyYXRpbmcgb24gaW5wdXQgc3RyZWFtIHdpdGggbmFtZTogJyRpbnB1dF9zdHJlYW1fbmFtZScKQSBmYXVsdCB3YXMgZGV0ZWN0ZWQgYXQgbGluZSAkbGluZTAgb2Ygc3ViICckc3Vicm91dGluZTEnCmluIGZpbGUgJyRmaWxlbmFtZTEnCndoaWNoIHdhcyBjYWxsZWQgZnJvbSBsaW5lICRsaW5lMSBvZiBzdWIgJyRzdWJyb3V0aW5lMicKTWVzc2FnZTogJyRtc2cnClRoaXMgaXMgcHJvYmFibHkgYW4gZXJyb3IgaW50cm9kdWNlZCBieSBhIHJlY2VudCBwcm9ncmFtbWluZyBjaGFuZ2UuCiRwa2cgcmVwb3J0cyBWRVJTSU9OPSckVkVSU0lPTicuCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpFT00KCiAgICBjcm9hayAidW5leHBlY3RlZCByZXR1cm4gZnJvbSBzdWIgRGllIjsKfSAjIyBlbmQgc3ViIEZhdWx0CgpzdWIgYmFkX3BhdHRlcm4gewogICAgbXkgKCRwYXR0ZXJuKSA9IEBfOwoKICAgICMgUmV0dXJuIHRydWUgaWYgYSByZWdleCBwYXR0ZXJuIGhhcyBhbiBlcnJvcgogICAgIyBOb3RlOiBGb3JtYXR0ZXIucG0gYWxzbyBoYXMgYSBjb3B5IG9mIHRoaXMKICAgIG15ICRyZWdleF91dSA9IGV2YWwgeyBxci8kcGF0dGVybi8gfTsKICAgIHJldHVybiAkRVZBTF9FUlJPUjsKfSAjIyBlbmQgc3ViIGJhZF9wYXR0ZXJuCgpzdWIgbWFrZV9za2lwcGluZ19wYXR0ZXJuIHsKICAgIG15ICggJHJPcHRzLCAkb3B0X25hbWUsICRkZWZhdWx0ICkgPSBAXzsKCiAgICAjIE1ha2UgcmVnZXggcGF0dGVybnMgZm9yIHRoZSBmb3JtYXQtc2tpcHBpbmcgYW5kIGNvZGUtc2tpcHBpbmcgb3B0aW9ucwogICAgbXkgJHBhcmFtID0gJHJPcHRzLT57JG9wdF9uYW1lfTsKICAgIGlmICggISRwYXJhbSApIHsgJHBhcmFtID0gJGRlZmF1bHQgfQogICAgJHBhcmFtID1+IHMvXlxzKy8vOwogICAgaWYgKCAkcGFyYW0gIX4gL14jLyApIHsKICAgICAgICBEaWUoIkVSUk9SOiB0aGUgJG9wdF9uYW1lIHBhcmFtZXRlciAnJHBhcmFtJyBtdXN0IGJlZ2luIHdpdGggJyMnXG4iKTsKICAgIH0KCiAgICAjIE5vdGUgdGhhdCB0aGUgZW5kaW5nIFxzIHdpbGwgbWF0Y2ggYSBuZXdsaW5lCiAgICBteSAkcGF0dGVybiA9ICdeXHMqJyAuICRwYXJhbSAuICdccyc7CiAgICBpZiAoIGJhZF9wYXR0ZXJuKCRwYXR0ZXJuKSApIHsKICAgICAgICBEaWUoCiJFUlJPUjogdGhlICRvcHRfbmFtZSBwYXJhbWV0ZXIgJyRwYXJhbScgY2F1c2VzIHRoZSBpbnZhbGlkIHJlZ2V4ICckcGF0dGVybidcbiIKICAgICAgICApOwogICAgfQogICAgcmV0dXJuICRwYXR0ZXJuOwp9ICMjIGVuZCBzdWIgbWFrZV9za2lwcGluZ19wYXR0ZXJuCgpzdWIgY2hlY2tfb3B0aW9ucyB7CgogICAgIyBDaGVjayBhbmQgcHJlLXByb2Nlc3MgdG9rZW5pemVyIHBhcmFtZXRlcnMKICAgIG15ICRyT3B0cyA9IHNoaWZ0OwoKICAgICVpc19zdWIgPSAoKTsKICAgICRpc19zdWJ7J3N1Yid9ID0gMTsKCiAgICAlaXNfRU5EX0RBVEFfZm9ybWF0X3N1YiA9ICgKICAgICAgICAnX19FTkRfXycgID0+IDEsCiAgICAgICAgJ19fREFUQV9fJyA9PiAxLAogICAgICAgICdmb3JtYXQnICAgPT4gMSwKICAgICAgICAnc3ViJyAgICAgID0+IDEsCiAgICApOwoKICAgICMgSW5zdGFsbCBhbnkgYWxpYXNlcyB0byAnc3ViJwogICAgaWYgKCAkck9wdHMtPnsnc3ViLWFsaWFzLWxpc3QnfSApIHsKCiAgICAgICAgIyBOb3RlIHRoYXQgYW55ICdzdWItYWxpYXMtbGlzdCcgaGFzIGJlZW4gcHJlcHJvY2Vzc2VkIHRvCiAgICAgICAgIyBiZSBhIHRyaW1tZWQsIHNwYWNlLXNlcGFyYXRlZCBsaXN0IHdoaWNoIGluY2x1ZGVzICdzdWInCiAgICAgICAgIyBmb3IgZXhhbXBsZSwgaXQgbWlnaHQgYmUgJ3N1YiBtZXRob2QgZnVuJwogICAgICAgIG15IEBzdWJfYWxpYXNfbGlzdCA9IHNwbGl0IC9ccysvLCAkck9wdHMtPnsnc3ViLWFsaWFzLWxpc3QnfTsKICAgICAgICBmb3JlYWNoIG15ICR3b3JkIChAc3ViX2FsaWFzX2xpc3QpIHsKICAgICAgICAgICAgJGlzX3N1Ynskd29yZH0gICAgICAgICAgICAgICAgID0gMTsKICAgICAgICAgICAgJGlzX0VORF9EQVRBX2Zvcm1hdF9zdWJ7JHdvcmR9ID0gMTsKICAgICAgICB9CiAgICB9CgogICAgIyBTZXQgZ2xvYmFsIGZsYWcgdG8gc2F5IGlmIHdlIGhhdmUgdG8gZ3Vlc3MgaWYgYmFyZXdvcmQgJ21ldGhvZCcgaXMKICAgICMgYSBzdWIgd2hlbiAnbWV0aG9kJyBpcyBpbiAlaXNfc3ViLiBUaGlzIHdpbGwgYmUgdHJ1ZSB1bmxlc3M6CiAgICAjICAgKDEpIHRoZSB1c2VyIGVudGVyZWQgJ21ldGhvZCcgYXMgc3ViIGFsaWFzLCBvcgogICAgIyAgICgyKSB0aGUgdXNlciBzZXQgLS11c2UtZmVhdHVyZT1jbGFzcwogICAgIyBJbiB0aGVzZSB0d28gY2FzZXMgd2UgY2FuIGFzc3VtZSB0aGF0ICdtZXRob2QnIGlzIGEgc3ViIGFsaWFzLgogICAgJGd1ZXNzX2lmX21ldGhvZCA9IDE7CiAgICBpZiAoICRpc19zdWJ7J21ldGhvZCd9ICkgeyAkZ3Vlc3NfaWZfbWV0aG9kID0gMCB9CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBVcGRhdGUgaGFzaCB2YWx1ZXMgZm9yIGFueSAtdXNlLWZlYXR1cmUgb3B0aW9ucwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIG15ICR1c2VfZmVhdHVyZV9jbGFzcyA9IDE7CiAgICBpZiAoICRyT3B0cy0+eyd1c2UtZmVhdHVyZSd9ICkgewogICAgICAgIGlmICggJHJPcHRzLT57J3VzZS1mZWF0dXJlJ30gPX4gL1xibm9jbGFzc1xiLyApIHsKICAgICAgICAgICAgJHVzZV9mZWF0dXJlX2NsYXNzID0gMDsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkck9wdHMtPnsndXNlLWZlYXR1cmUnfSA9fiAvXGJjbGFzc1xiLyApIHsKICAgICAgICAgICAgJGd1ZXNzX2lmX21ldGhvZCA9IDA7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAjIyBuZWl0aGVyICdjbGFzcycgbm9yICdub2NsYXNzJyBzZWVuIHNvIHVzZSBkZWZhdWx0CiAgICAgICAgfQogICAgfQoKICAgICMgVGhlc2UgYXJlIHRoZSBtYWluIHVwZGF0ZXMgZm9yIHRoaXMgb3B0aW9uLiBUaGVyZSBhcmUgYWRkaXRpb25hbAogICAgIyBjaGFuZ2VzIGVsc2V3aGVyZSwgdXN1YWxseSBpbmRpY2F0ZWQgd2l0aCBhIGNvbW1lbnQgJ3J0MTQ1NzA2JwoKICAgICMgVXBkYXRlIGhhc2ggdmFsdWVzIGZvciB1c2VfZmVhdHVyZT1jbGFzcywgYWRkZWQgZm9yIHJ0MTQ1NzA2CiAgICAjIHNlZSAncGVybGNsYXNzLnBvZCcKCiAgICAjIElNUE9SVEFOVDogV2UgYXJlIGNoYW5naW5nIGdsb2JhbCBoYXNoIHZhbHVlcyBpbml0aWFsbHkgc2V0IGluIGEgQkVHSU4KICAgICMgYmxvY2suICBWYWx1ZXMgbXVzdCBiZSBkZWZpbmVkICh0cnVlIG9yIGZhbHNlKSBmb3IgZWFjaCBvZiB0aGVzZSBuZXcKICAgICMgd29yZHMgd2hldGhlciB0cnVlIG9yIGZhbHNlLiBPdGhlcndpc2UsIHByb2dyYW1zIHVzaW5nIHRoZSBtb2R1bGUgd2hpY2gKICAgICMgY2hhbmdlIG9wdGlvbnMgYmV0d2VlbiBydW5zIChzdWNoIGFzIHRlc3QgY29kZSkgd2lsbCBoYXZlCiAgICAjIGluY29ycmVjdCBzZXR0aW5ncyBhbmQgZmFpbC4KCiAgICAjIFRoZXJlIGFyZSA0IG5ldyBrZXl3b3JkczoKCiAgICAjICdjbGFzcycgLSB0cmVhdGVkIHNwZWNpYWxseSBhcyBnZW5lcmFsaXphdGlvbiBvZiAncGFja2FnZScKICAgICMgTm90ZTogd2UgbXVzdCBub3Qgc2V0ICdjbGFzcycgdG8gYmUgYSBrZXl3b3JkIHRvIGF2b2lkIHByb2JsZW1zCiAgICAjIHdpdGggb2xkZXIgdXNlcy4KICAgICRpc19wYWNrYWdleydjbGFzcyd9ID0gJHVzZV9mZWF0dXJlX2NsYXNzOwoKICAgICMgJ21ldGhvZCcgLSB0cmVhdGVkIGxpa2Ugc3ViIHVzaW5nIHRoZSBzdWItYWxpYXMtbGlzdCBvcHRpb24KICAgICMgTm90ZTogd2UgbXVzdCBub3Qgc2V0ICdtZXRob2QnIHRvIGJlIGEga2V5d29yZCB0byBhdm9pZCBwcm9ibGVtcwogICAgIyB3aXRoIG9sZGVyIHVzZXMuCiAgICBpZiAoJHVzZV9mZWF0dXJlX2NsYXNzKSB7CiAgICAgICAgJGlzX3N1YnsnbWV0aG9kJ30gICAgICAgICAgICAgICAgID0gMTsKICAgICAgICAkaXNfRU5EX0RBVEFfZm9ybWF0X3N1YnsnbWV0aG9kJ30gPSAxOwogICAgfQoKICAgICMgJ2ZpZWxkJyAgLSBhZGRlZCBhcyBhIGtleXdvcmQsIGFuZCB3b3JrcyBsaWtlICdteScKICAgICRpc19rZXl3b3JkeydmaWVsZCd9ICAgICAgPSAkdXNlX2ZlYXR1cmVfY2xhc3M7CiAgICAkaXNfbXlfb3VyX3N0YXRleydmaWVsZCd9ID0gJHVzZV9mZWF0dXJlX2NsYXNzOwoKICAgICMgJ0FESlVTVCcgLSBhZGRlZCBhcyBhIGtleXdvcmQgYW5kIHdvcmtzIGxpa2UgJ0JFR0lOJwogICAgIyBUT0RPOiBpZiBBREpVU1QgZ2V0cyBhIHBhcmVuIGxpc3QsIHRoaXMgd2lsbCBuZWVkIHRvIGJlIHVwZGF0ZWQKICAgICRpc19rZXl3b3JkeydBREpVU1QnfSAgICAgICAgICA9ICR1c2VfZmVhdHVyZV9jbGFzczsKICAgICRpc19jb2RlX2Jsb2NrX3Rva2VueydBREpVU1QnfSA9ICR1c2VfZmVhdHVyZV9jbGFzczsKCiAgICAlaXNfZ3JlcF9hbGlhcyA9ICgpOwogICAgaWYgKCAkck9wdHMtPnsnZ3JlcC1hbGlhcy1saXN0J30gKSB7CgogICAgICAgICMgTm90ZSB0aGF0ICdncmVwLWFsaWFzLWxpc3QnIGhhcyBiZWVuIHByZXByb2Nlc3NlZCB0byBiZSBhIHRyaW1tZWQsCiAgICAgICAgIyBzcGFjZS1zZXBhcmF0ZWQgbGlzdAogICAgICAgIG15IEBxID0gc3BsaXQgL1xzKy8sICRyT3B0cy0+eydncmVwLWFsaWFzLWxpc3QnfTsKICAgICAgICBAaXNfZ3JlcF9hbGlhc3tAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwogICAgfQoKICAgICRyT3B0c19zdGFydGluZ19pbmRlbnRhdGlvbl9sZXZlbCA9ICRyT3B0cy0+eydzdGFydGluZy1pbmRlbnRhdGlvbi1sZXZlbCd9OwogICAgJHJPcHRzX2luZGVudF9jb2x1bW5zICAgICAgICAgICAgID0gJHJPcHRzLT57J2luZGVudC1jb2x1bW5zJ307CiAgICAkck9wdHNfbG9va19mb3JfaGFzaF9iYW5nICAgICAgICAgPSAkck9wdHMtPnsnbG9vay1mb3ItaGFzaC1iYW5nJ307CiAgICAkck9wdHNfbG9va19mb3JfYXV0b2xvYWRlciAgICAgICAgPSAkck9wdHMtPnsnbG9vay1mb3ItYXV0b2xvYWRlcid9OwogICAgJHJPcHRzX2xvb2tfZm9yX3NlbGZsb2FkZXIgICAgICAgID0gJHJPcHRzLT57J2xvb2stZm9yLXNlbGZsb2FkZXInfTsKICAgICRyT3B0c190cmltX3F3ICAgICAgICAgICAgICAgICAgICA9ICRyT3B0cy0+eyd0cmltLXF3J307CiAgICAkck9wdHNfZXh0ZW5kZWRfc3ludGF4ICAgICAgICAgICAgPSAkck9wdHMtPnsnZXh0ZW5kZWQtc3ludGF4J307CiAgICAkck9wdHNfY29udGludWF0aW9uX2luZGVudGF0aW9uICAgPSAkck9wdHMtPnsnY29udGludWF0aW9uLWluZGVudGF0aW9uJ307CiAgICAkck9wdHNfb3V0ZGVudF9sYWJlbHMgICAgICAgICAgICAgPSAkck9wdHMtPnsnb3V0ZGVudC1sYWJlbHMnfTsKICAgICRyT3B0c19tYXhpbXVtX2xldmVsX2Vycm9ycyAgICAgICA9ICRyT3B0cy0+eydtYXhpbXVtLWxldmVsLWVycm9ycyd9OwogICAgJHJPcHRzX21heGltdW1fdW5leHBlY3RlZF9lcnJvcnMgID0gJHJPcHRzLT57J21heGltdW0tdW5leHBlY3RlZC1lcnJvcnMnfTsKICAgICRyT3B0c19jb2RlX3NraXBwaW5nICAgICAgICAgICAgICA9ICRyT3B0cy0+eydjb2RlLXNraXBwaW5nJ307CiAgICAkck9wdHNfY29kZV9za2lwcGluZ19iZWdpbiAgICAgICAgPSAkck9wdHMtPnsnY29kZS1za2lwcGluZy1iZWdpbid9OwogICAgJHJPcHRzX2Zvcm1hdF9za2lwcGluZyAgICAgICAgICAgID0gJHJPcHRzLT57J2Zvcm1hdC1za2lwcGluZyd9OwogICAgJHJPcHRzX2Zvcm1hdF9za2lwcGluZ19iZWdpbiAgICAgID0gJHJPcHRzLT57J2Zvcm1hdC1za2lwcGluZy1iZWdpbid9OwogICAgJHJPcHRzX2Zvcm1hdF9za2lwcGluZ19lbmQgICAgICAgID0gJHJPcHRzLT57J2Zvcm1hdC1za2lwcGluZy1lbmQnfTsKICAgICRyT3B0c19pbmRlbnRfY2xvc2luZ19icmFjZSAgICAgICA9ICRyT3B0cy0+eydpbmRlbnQtY2xvc2luZy1icmFjZSd9OwogICAgJHJPcHRzX25vbl9pbmRlbnRpbmdfYnJhY2VzICAgICAgID0gJHJPcHRzLT57J25vbi1pbmRlbnRpbmctYnJhY2VzJ307CiAgICAkck9wdHNfbm9uX2luZGVudGluZ19icmFjZV9wcmVmaXggPSAkck9wdHMtPnsnbm9uLWluZGVudGluZy1icmFjZS1wcmVmaXgnfTsKICAgICRyT3B0c193aGl0ZXNwYWNlX2N5Y2xlICAgICAgICAgICA9ICRyT3B0cy0+eyd3aGl0ZXNwYWNlLWN5Y2xlJ307CgogICAgIyBJbiB0aGUgVG9rZW5pemVyLCAtLWluZGVudC1jb2x1bW5zIGlzIGp1c3QgdXNlZCBmb3IgZ3Vlc3Npbmcgb2xkCiAgICAjIGluZGVudGF0aW9uLCBhbmQgbXVzdCBiZSBwb3NpdGl2ZS4gIElmIC1pPTAgaXMgdXNlZCBmb3IgdGhpcyBydW4gKHdoaWNoCiAgICAjIGlzIHBvc3NpYmxlKSB3ZSdsbCBqdXN0IGd1ZXNzIHRoYXQgdGhlIG9sZCBydW4gdXNlZCA0IHNwYWNlcyBwZXIgbGV2ZWwuCiAgICBpZiAoICEkck9wdHNfaW5kZW50X2NvbHVtbnMgKSB7CiAgICAgICAgJHJPcHRzX2luZGVudF9jb2x1bW5zID0gSU5ERU5UX0NPTFVNTlNfREVGQVVMVDsKICAgIH0KCiAgICAjIERlZmluZSAkdGFic2l6ZSwgdGhlIG51bWJlciBvZiBzcGFjZXMgcGVyIHRhYiBmb3IgdXNlIGluCiAgICAjIGd1ZXNzaW5nIHRoZSBpbmRlbnRhdGlvbiBvZiBzb3VyY2UgbGluZXMgd2l0aCBsZWFkaW5nIHRhYnMuCiAgICAjIEFzc3VtZSBzYW1lIGFzIGZvciB0aGlzIHJ1biBpZiB0YWJzIGFyZSB1c2VkLCBvdGhlcndpc2UgYXNzdW1lCiAgICAjIGEgZGVmYXVsdCB2YWx1ZSwgdHlwaWNhbGx5IDgKICAgICR0YWJzaXplID0KICAgICAgICAkck9wdHMtPnsnZW50YWItbGVhZGluZy13aGl0ZXNwYWNlJ30KICAgICAgPyAkck9wdHMtPnsnZW50YWItbGVhZGluZy13aGl0ZXNwYWNlJ30KICAgICAgOiAkck9wdHMtPnsndGFicyd9ID8gJHJPcHRzLT57J2luZGVudC1jb2x1bW5zJ30KICAgICAgOiAgICAgICAgICAgICAgICAgICAgJHJPcHRzLT57J2RlZmF1bHQtdGFic2l6ZSd9OwogICAgaWYgKCAhJHRhYnNpemUgKSB7ICR0YWJzaXplID0gVEFCX1NJWkVfREVGQVVMVCB9CgogICAgJGNvZGVfc2tpcHBpbmdfcGF0dGVybl9iZWdpbiA9CiAgICAgIG1ha2Vfc2tpcHBpbmdfcGF0dGVybiggJHJPcHRzLCAnY29kZS1za2lwcGluZy1iZWdpbicsICcjPDxWJyApOwogICAgJGNvZGVfc2tpcHBpbmdfcGF0dGVybl9lbmQgPQogICAgICBtYWtlX3NraXBwaW5nX3BhdHRlcm4oICRyT3B0cywgJ2NvZGUtc2tpcHBpbmctZW5kJywgJyM+PlYnICk7CgogICAgJGZvcm1hdF9za2lwcGluZ19wYXR0ZXJuX2JlZ2luID0KICAgICAgbWFrZV9za2lwcGluZ19wYXR0ZXJuKCAkck9wdHMsICdmb3JtYXQtc2tpcHBpbmctYmVnaW4nLCAnIzw8PCcgKTsKICAgICRmb3JtYXRfc2tpcHBpbmdfcGF0dGVybl9lbmQgPQogICAgICBtYWtlX3NraXBwaW5nX3BhdHRlcm4oICRyT3B0cywgJ2Zvcm1hdC1za2lwcGluZy1lbmQnLCAnIz4+PicgKTsKCiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBjaGVja19vcHRpb25zCgpzdWIgbmV3IHsKCiAgICBteSAoICRjbGFzcywgQGFyZ2xpc3QgKSA9IEBfOwogICAgaWYgKCBAYXJnbGlzdCAlIDIgKSB7IGNyb2FrICJPZGQgbnVtYmVyIG9mIGl0ZW1zIGluIGFyZyBoYXNoIGxpc3RcbiIgfQoKICAgIG15ICVkZWZhdWx0cyA9ICgKICAgICAgICBzb3VyY2Vfb2JqZWN0ICAgICAgICA9PiB1bmRlZiwKICAgICAgICBkZWJ1Z2dlcl9vYmplY3QgICAgICA9PiB1bmRlZiwKICAgICAgICBkaWFnbm9zdGljc19vYmplY3QgICA9PiB1bmRlZiwKICAgICAgICBsb2dnZXJfb2JqZWN0ICAgICAgICA9PiB1bmRlZiwKICAgICAgICBzdGFydGluZ19sZXZlbCAgICAgICA9PiB1bmRlZiwKICAgICAgICBzdGFydGluZ19saW5lX251bWJlciA9PiAxLAogICAgICAgIHJPcHRzICAgICAgICAgICAgICAgID0+IHt9LAogICAgKTsKICAgIG15ICVhcmdzID0gKCAlZGVmYXVsdHMsIEBhcmdsaXN0ICk7CgogICAgIyB3ZSBhcmUgZ2l2ZW4gYW4gb2JqZWN0IHdpdGggYSBnZXRfbGluZSgpIG1ldGhvZCB0byBzdXBwbHkgc291cmNlIGxpbmVzCiAgICBteSAkc291cmNlX29iamVjdCA9ICRhcmdze3NvdXJjZV9vYmplY3R9OwogICAgbXkgJHJPcHRzICAgICAgICAgPSAkYXJnc3tyT3B0c307CgogICAgIyBDaGVjayBjYWxsIGFyZ3MKICAgIGlmICggIWRlZmluZWQoJHNvdXJjZV9vYmplY3QpICkgewogICAgICAgIERpZSgKIlBlcmw6OlRpZHk6OlRva2VuaXplcjo6bmV3IGNhbGxlZCB3aXRob3V0IGEgJ3NvdXJjZV9vYmplY3QnIHBhcmFtZXRlclxuIgogICAgICAgICk7CiAgICB9CiAgICBpZiAoICFyZWYoJHNvdXJjZV9vYmplY3QpICkgewogICAgICAgIERpZSg8PEVPTSk7CnN1YiBQZXJsOjpUaWR5OjpUb2tlbml6ZXI6Om5ldyByZWNlaXZlZCBhICdzb3VyY2Vfb2JqZWN0JyBwYXJhbWV0ZXIgd2hpY2ggaXMgbm90IGEgcmVmZXJlbmNlOwonc291cmNlX29iamVjdCcgbXVzdCBiZSBhIHJlZmVyZW5jZSB0byBhIFNUUklORywgQVJSQVksIG9yIG9iamVjdCB3aXRoIGEgJ2dldGxpbmUnIG1ldGhvZApFT00KICAgIH0KCiAgICBteSAkbG9nZ2VyX29iamVjdCA9ICRhcmdze2xvZ2dlcl9vYmplY3R9OwoKICAgICMgVG9rZW5pemVyIHN0YXRlIGRhdGEgaXMgYXMgZm9sbG93czoKICAgICMgX3JoZXJlX3RhcmdldF9saXN0XyAgICByZWZlcmVuY2UgdG8gbGlzdCBvZiBoZXJlLWRvYyB0YXJnZXRzCiAgICAjIF9oZXJlX2RvY190YXJnZXRfICAgICAgdGhlIHRhcmdldCBzdHJpbmcgZm9yIGEgaGVyZSBkb2N1bWVudAogICAgIyBfaGVyZV9xdW90ZV9jaGFyYWN0ZXJfIHRoZSB0eXBlIG9mIGhlcmUtZG9jIHF1b3RpbmcgKCIgJyBgIG9yIG5vbmUpCiAgICAjICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGV0ZXJtaW5lIGlmIGludGVycG9sYXRpb24gaXMgZG9uZQogICAgIyBfcXVvdGVfdGFyZ2V0XyAgICAgICAgIGNoYXJhY3RlciB3ZSBzZWVrIGlmIGNoYXNpbmcgYSBxdW90ZQogICAgIyBfbGluZV9zdGFydF9xdW90ZV8gICAgIGxpbmUgd2hlcmUgd2Ugc3RhcnRlZCBsb29raW5nIGZvciBhIGxvbmcgcXVvdGUKICAgICMgX2luX2hlcmVfZG9jXyAgICAgICAgICBmbGFnIGluZGljYXRpbmcgaWYgd2UgYXJlIGluIGEgaGVyZS1kb2MKICAgICMgX2luX3BvZF8gICAgICAgICAgICAgICBmbGFnIHNldCBpZiB3ZSBhcmUgaW4gcG9kIGRvY3VtZW50YXRpb24KICAgICMgX2luX2NvZGVfc2tpcHBpbmdfICAgICBmbGFnIHNldCBpZiB3ZSBhcmUgaW4gYSBjb2RlIHNraXBwaW5nIHNlY3Rpb24KICAgICMgX2luX2Zvcm1hdF9za2lwcGluZ18gICBmbGFnIHNldCBpZiB3ZSBhcmUgaW4gYSBmb3JtYXQgc2tpcHBpbmcgc2VjdGlvbgogICAgIyBfaW5fZXJyb3JfICAgICAgICAgICAgIGZsYWcgc2V0IGlmIHdlIHNhdyBzZXZlcmUgZXJyb3IgKGJpbmFyeSBpbiBzY3JpcHQpCiAgICAjIF9pbl90cm91YmxlXyAgICAgICAgICAgc2V0IGlmIHdlIHNhdyBhIHRyb3VibGVzb21lIGxleGljYWwgbGlrZSAnbXkgc3ViIHMnCiAgICAjIF93YXJuaW5nX2NvdW50XyAgICAgICAgbnVtYmVyIG9mIGNhbGxzIHRvIGxvZ2dlciBzdWIgd2FybmluZwogICAgIyBfaHRtbF90YWdfY291bnRfICAgICAgIG51bWJlciBvZiBhcHBhcmVudCBodG1sIHRhZ3Mgc2VlbiAoaW5kaWNhdGVzIGh0bWwpCiAgICAjIF9pbl9kYXRhXyAgICAgICAgICAgICAgZmxhZyBzZXQgaWYgd2UgYXJlIGluIF9fREFUQV9fIHNlY3Rpb24KICAgICMgX2luX2VuZF8gICAgICAgICAgICAgICBmbGFnIHNldCBpZiB3ZSBhcmUgaW4gX19FTkRfXyBzZWN0aW9uCiAgICAjIF9pbl9mb3JtYXRfICAgICAgICAgICAgZmxhZyBzZXQgaWYgd2UgYXJlIGluIGEgZm9ybWF0IGRlc2NyaXB0aW9uCiAgICAjIF9pbl9hdHRyaWJ1dGVfbGlzdF8gICAgZmxhZyB0ZWxsaW5nIGlmIHdlIGFyZSBsb29raW5nIGZvciBhdHRyaWJ1dGVzCiAgICAjIF9pbl9xdW90ZV8gICAgICAgICAgICAgZmxhZyB0ZWxsaW5nIGlmIHdlIGFyZSBjaGFzaW5nIGEgcXVvdGUKICAgICMgX3N0YXJ0aW5nX2xldmVsXyAgICAgICBpbmRlbnRhdGlvbiBsZXZlbCBvZiBmaXJzdCBsaW5lCiAgICAjIF9kaWFnbm9zdGljc19vYmplY3RfICAgcGxhY2UgdG8gd3JpdGUgZGVidWdnaW5nIGluZm9ybWF0aW9uCiAgICAjIF91bmV4cGVjdGVkX2Vycm9yX2NvdW50XyBlcnJvciBjb3VudCB1c2VkIHRvIGxpbWl0IG91dHB1dAogICAgIyBfbG93ZXJfY2FzZV9sYWJlbHNfYXRfIGxpbmUgbnVtYmVycyB3aGVyZSBsb3dlciBjYXNlIGxhYmVscyBzZWVuCiAgICAjIF9oaXRfYnVnXyAgICAgICAgICAgICAgcHJvZ3JhbSBidWcgZGV0ZWN0ZWQKCiAgICBteSAkc2VsZiA9IFtdOwogICAgJHNlbGYtPltfcmhlcmVfdGFyZ2V0X2xpc3RfXSAgICAgICAgPSBbXTsKICAgICRzZWxmLT5bX2luX2hlcmVfZG9jX10gICAgICAgICAgICAgID0gMDsKICAgICRzZWxmLT5bX2hlcmVfZG9jX3RhcmdldF9dICAgICAgICAgID0gRU1QVFlfU1RSSU5HOwogICAgJHNlbGYtPltfaGVyZV9xdW90ZV9jaGFyYWN0ZXJfXSAgICAgPSBFTVBUWV9TVFJJTkc7CiAgICAkc2VsZi0+W19pbl9kYXRhX10gICAgICAgICAgICAgICAgICA9IDA7CiAgICAkc2VsZi0+W19pbl9lbmRfXSAgICAgICAgICAgICAgICAgICA9IDA7CiAgICAkc2VsZi0+W19pbl9mb3JtYXRfXSAgICAgICAgICAgICAgICA9IDA7CiAgICAkc2VsZi0+W19pbl9lcnJvcl9dICAgICAgICAgICAgICAgICA9IDA7CiAgICAkc2VsZi0+W19pbl90cm91YmxlX10gICAgICAgICAgICAgICA9IDA7CiAgICAkc2VsZi0+W193YXJuaW5nX2NvdW50X10gICAgICAgICAgICA9IDA7CiAgICAkc2VsZi0+W19odG1sX3RhZ19jb3VudF9dICAgICAgICAgICA9IDA7CiAgICAkc2VsZi0+W19pbl9wb2RfXSAgICAgICAgICAgICAgICAgICA9IDA7CiAgICAkc2VsZi0+W19pbl9jb2RlX3NraXBwaW5nX10gICAgICAgICA9IDA7CiAgICAkc2VsZi0+W19pbl9mb3JtYXRfc2tpcHBpbmdfXSAgICAgICA9IDA7CiAgICAkc2VsZi0+W19pbl9hdHRyaWJ1dGVfbGlzdF9dICAgICAgICA9IDA7CiAgICAkc2VsZi0+W19pbl9xdW90ZV9dICAgICAgICAgICAgICAgICA9IDA7CiAgICAkc2VsZi0+W19xdW90ZV90YXJnZXRfXSAgICAgICAgICAgICA9IEVNUFRZX1NUUklORzsKICAgICRzZWxmLT5bX2xpbmVfc3RhcnRfcXVvdGVfXSAgICAgICAgID0gLTE7CiAgICAkc2VsZi0+W19zdGFydGluZ19sZXZlbF9dICAgICAgICAgICA9ICRhcmdze3N0YXJ0aW5nX2xldmVsfTsKICAgICRzZWxmLT5bX2tub3dfc3RhcnRpbmdfbGV2ZWxfXSAgICAgID0gZGVmaW5lZCggJGFyZ3N7c3RhcnRpbmdfbGV2ZWx9ICk7CiAgICAkc2VsZi0+W19sYXN0X2xpbmVfbnVtYmVyX10gICAgICAgICA9ICRhcmdze3N0YXJ0aW5nX2xpbmVfbnVtYmVyfSAtIDE7CiAgICAkc2VsZi0+W19zYXdfcGVybF9kYXNoX1BfXSAgICAgICAgICA9IDA7CiAgICAkc2VsZi0+W19zYXdfcGVybF9kYXNoX3dfXSAgICAgICAgICA9IDA7CiAgICAkc2VsZi0+W19zYXdfdXNlX3N0cmljdF9dICAgICAgICAgICA9IDA7CiAgICAkc2VsZi0+W19zYXdfYnJhY2VfZXJyb3JfXSAgICAgICAgICA9IDA7CiAgICAkc2VsZi0+W19oaXRfYnVnX10gICAgICAgICAgICAgICAgICA9IDA7CiAgICAkc2VsZi0+W19sb29rX2Zvcl9hdXRvbG9hZGVyX10gICAgICA9ICRyT3B0c19sb29rX2Zvcl9hdXRvbG9hZGVyOwogICAgJHNlbGYtPltfbG9va19mb3Jfc2VsZmxvYWRlcl9dICAgICAgPSAkck9wdHNfbG9va19mb3Jfc2VsZmxvYWRlcjsKICAgICRzZWxmLT5bX3Nhd19hdXRvbG9hZGVyX10gICAgICAgICAgID0gMDsKICAgICRzZWxmLT5bX3Nhd19zZWxmbG9hZGVyX10gICAgICAgICAgID0gMDsKICAgICRzZWxmLT5bX3Nhd19oYXNoX2JhbmdfXSAgICAgICAgICAgID0gMDsKICAgICRzZWxmLT5bX3Nhd19lbmRfXSAgICAgICAgICAgICAgICAgID0gMDsKICAgICRzZWxmLT5bX3Nhd19kYXRhX10gICAgICAgICAgICAgICAgID0gMDsKICAgICRzZWxmLT5bX3Nhd19uZWdhdGl2ZV9pbmRlbnRhdGlvbl9dID0gMDsKICAgICRzZWxmLT5bX3N0YXJ0ZWRfdG9rZW5pemluZ19dICAgICAgID0gMDsKICAgICRzZWxmLT5bX2RlYnVnZ2VyX29iamVjdF9dICAgICAgICAgID0gJGFyZ3N7ZGVidWdnZXJfb2JqZWN0fTsKICAgICRzZWxmLT5bX2RpYWdub3N0aWNzX29iamVjdF9dICAgICAgID0gJGFyZ3N7ZGlhZ25vc3RpY3Nfb2JqZWN0fTsKICAgICRzZWxmLT5bX2xvZ2dlcl9vYmplY3RfXSAgICAgICAgICAgID0gJGxvZ2dlcl9vYmplY3Q7CiAgICAkc2VsZi0+W191bmV4cGVjdGVkX2Vycm9yX2NvdW50X10gICA9IDA7CiAgICAkc2VsZi0+W19zdGFydGVkX2xvb2tpbmdfZm9yX2hlcmVfdGFyZ2V0X2F0X10gPSAwOwogICAgJHNlbGYtPltfbmVhcmx5X21hdGNoZWRfaGVyZV90YXJnZXRfYXRfXSAgICAgID0gdW5kZWY7CiAgICAkc2VsZi0+W19saW5lX29mX3RleHRfXSAgICAgICAgICAgICAgICAgICAgICAgPSBFTVBUWV9TVFJJTkc7CiAgICAkc2VsZi0+W19ybG93ZXJfY2FzZV9sYWJlbHNfYXRfXSAgICAgICAgICAgICAgPSB1bmRlZjsKICAgICRzZWxmLT5bX21heGltdW1fbGV2ZWxfXSAgICAgICAgICAgICAgICAgICAgICA9IDA7CiAgICAkc2VsZi0+W190cnVlX2JyYWNlX2Vycm9yX2NvdW50X10gICAgICAgICAgICAgPSAwOwogICAgJHNlbGYtPltfcm5vbl9pbmRlbnRpbmdfYnJhY2Vfc3RhY2tfXSAgICAgICAgID0gW107CiAgICAkc2VsZi0+W19zaG93X2luZGVudGF0aW9uX3RhYmxlX10gICAgICAgICAgICAgPSAwOwogICAgJHNlbGYtPltfcmJhcmV3b3JkX2luZm9fXSAgICAgICAgICAgICAgICAgICAgID0ge307CgogICAgJHNlbGYtPltfcmNsb3NpbmdfYnJhY2VfaW5kZW50YXRpb25faGFzaF9dID0gewogICAgICAgIHZhbGlkICAgICAgICAgICAgICAgICA9PiB1bmRlZiwKICAgICAgICByaGlzdG9yeV9saW5lX251bWJlciAgPT4gWzBdLAogICAgICAgIHJoaXN0b3J5X2xldmVsX2RpZmYgICA9PiBbMF0sCiAgICAgICAgcmhpc3RvcnlfYW5jaG9yX3BvaW50ID0+IFsxXSwKICAgIH07CgogICAgJHNlbGYtPltfck9wdHNfXSA9ICRyT3B0czsKICAgICRzZWxmLT5bX3NhdmVfbG9nZmlsZV9dID0KICAgICAgZGVmaW5lZCgkbG9nZ2VyX29iamVjdCkgJiYgJGxvZ2dlcl9vYmplY3QtPmdldF9zYXZlX2xvZ2ZpbGUoKTsKCiAgICBibGVzcyAkc2VsZiwgJGNsYXNzOwoKICAgICRzZWxmLT5wcmVwYXJlX2Zvcl9hX25ld19maWxlKCRzb3VyY2Vfb2JqZWN0KTsKICAgICRzZWxmLT5maW5kX3N0YXJ0aW5nX2luZGVudGF0aW9uX2xldmVsKCk7CgogICAgIyBUaGlzIGlzIG5vdCBhIGZ1bGwgY2xhc3MgeWV0LCBzbyBkaWUgaWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvCiAgICAjIGNyZWF0ZSBtb3JlIHRoYW4gb25lIG9iamVjdC4KCiAgICBpZiAoIF9pbmNyZW1lbnRfY291bnQoKSA+IDEgKSB7CiAgICAgICAgY29uZmVzcwoiQXR0ZW1wdCB0byBjcmVhdGUgbW9yZSB0aGFuIDEgb2JqZWN0IGluICRjbGFzcywgd2hpY2ggaXMgbm90IGEgdHJ1ZSBjbGFzcyB5ZXRcbiI7CiAgICB9CgogICAgcmV0dXJuICRzZWxmOwoKfSAjIyBlbmQgc3ViIG5ldwoKIyBDYWxsZWQgZXh0ZXJuYWxseQpzdWIgZ2V0X3VuZXhwZWN0ZWRfZXJyb3JfY291bnQgewogICAgbXkgKCRzZWxmKSA9IEBfOwogICAgcmV0dXJuICRzZWxmLT5bX3VuZXhwZWN0ZWRfZXJyb3JfY291bnRfXTsKfQoKIyBDYWxsZWQgZXh0ZXJuYWxseQpzdWIgaXNfa2V5d29yZCB7CiAgICBteSAoJHN0cikgPSBAXzsKICAgIHJldHVybiAkaXNfa2V5d29yZHskc3RyfTsKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBMaW5lIGlucHV0IHJvdXRpbmVzLCBwcmV2aW91c2x5IGhhbmRsZWQgYnkgdGhlIExpbmVCdWZmZXIgY2xhc3MKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIG1ha2Vfc291cmNlX2FycmF5IHsKCiAgICBteSAoICRzZWxmLCAkbGluZV9zb3VyY2Vfb2JqZWN0ICkgPSBAXzsKCiAgICAjIENvbnZlcnQgdGhlIHNvdXJjZSBpbnRvIGFuIGFycmF5IG9mIGxpbmVzCiAgICAjIEdpdmVuOgogICAgIyAgICRsaW5lX3NvdXJjZV9vYmplY3QgPSB0aGUgaW5wdXQgc291cmNlIHN0cmVhbQogICAgIyBUYXNrOgogICAgIyAgIENvbnZlcnQgdGhlIHNvdXJjZSB0byBhbiBhcnJheSByZWYgYW5kIHN0b3JlIGluICRzZWxmCgogICAgbXkgJHJpbnB1dF9saW5lcyA9IFtdOwoKICAgIG15ICRyc291cmNlID0gcmVmKCRsaW5lX3NvdXJjZV9vYmplY3QpOwogICAgbXkgJHNvdXJjZV9zdHJpbmc7CgogICAgaWYgKCAhJHJzb3VyY2UgKSB7CgogICAgICAgICMgc2hvdWxkbid0IGhhcHBlbjogdGhpcyBzaG91bGQgaGF2ZSBiZWVuIGNoZWNrZWQgaW4gc3ViIG5ldwogICAgICAgICRzZWxmLT5GYXVsdCg8PEVPTSk7CnN1YiBQZXJsOjpUaWR5OjpUb2tlbml6ZXI6Om5ldyByZWNlaXZlZCBhICdzb3VyY2Vfb2JqZWN0JyBwYXJhbWV0ZXIgd2hpY2ggaXMgbm90IGEgcmVmZXJlbmNlOwonc291cmNlX29iamVjdCcgbXVzdCBiZSBhIHJlZmVyZW5jZSB0byBhIFNUUklORywgQVJSQVksIG9yIG9iamVjdCB3aXRoIGEgJ2dldGxpbmUnIG1ldGhvZApFT00KICAgIH0KCiAgICAjIGhhbmRsZSBhbiBBUlJBWSByZWYKICAgIGVsc2lmICggJHJzb3VyY2UgZXEgJ0FSUkFZJyApIHsKICAgICAgICAkcmlucHV0X2xpbmVzICA9ICRsaW5lX3NvdXJjZV9vYmplY3Q7CiAgICAgICAgJHNvdXJjZV9zdHJpbmcgPSBqb2luKCBFTVBUWV9TVFJJTkcsIEB7JGxpbmVfc291cmNlX29iamVjdH0gKTsKICAgIH0KCiAgICAjIGhhbmRsZSBhIFNDQUxBUiByZWYKICAgIGVsc2lmICggJHJzb3VyY2UgZXEgJ1NDQUxBUicgKSB7CiAgICAgICAgJHNvdXJjZV9zdHJpbmcgPSAkeyRsaW5lX3NvdXJjZV9vYmplY3R9OwogICAgICAgIG15IEBsaW5lcyA9IHNwbGl0IC9eLywgJHNvdXJjZV9zdHJpbmc7CiAgICAgICAgJHJpbnB1dF9saW5lcyA9IFxAbGluZXM7CiAgICB9CgogICAgIyBoYW5kbGUgYW4gb2JqZWN0IC0gbXVzdCBoYXZlIGEgZ2V0X2xpbmUgbWV0aG9kCiAgICBlbHNlIHsKCiAgICAgICAgIyBUaGlzIHdpbGwgZGllIGlmIHVzZXIncyBvYmplY3QgZG9lcyBoYXZlIGEgJ2dldF9saW5lJyBtZXRob2QKICAgICAgICBteSAkbGluZTsKICAgICAgICB3aGlsZSAoIGRlZmluZWQoICRsaW5lID0gJGxpbmVfc291cmNlX29iamVjdC0+Z2V0X2xpbmUoKSApICkgewogICAgICAgICAgICBwdXNoKCBAeyRyaW5wdXRfbGluZXN9LCAkbGluZSApOwogICAgICAgIH0KICAgICAgICAkc291cmNlX3N0cmluZyA9IGpvaW4oIEVNUFRZX1NUUklORywgQHskcmlucHV0X2xpbmVzfSApOwogICAgfQoKICAgICMgR2V0IHRyaW1tZWQgbGluZXMuIEl0IGlzIG11Y2ggZmFzdGVyIHRvIHN0cmlwIGxlYWRpbmcgd2hpdGVzcGFjZSBmcm9tCiAgICAjIHRoZSB3aG9sZSBpbnB1dCBmaWxlIGF0IG9uY2UgdGhhbiBsaW5lLWJ5LWxpbmUuCgogICAgIyBBZGQgYSB0ZXJtaW5hbCBuZXdsaW5lIGlmIG5lZWRlZCB0byBrZWVwIGxpbmUgY291bnQgdW5jaGFuZ2VkOgogICAgIyAtIGF2b2lkcyBwcm9ibGVtIG9mIGxvc2luZyBhIGxhc3QgbGluZSB3aGljaCBpcyBqdXN0IFxyIGFuZCBubyBcbiAgKGMyODMpCiAgICAjIC0gYnV0IGNoZWNrIGlucHV0IGxpbmUgY291bnQgdG8gYXZvaWQgYWRkaW5nIGxpbmUgdG8gYW4gZW1wdHkgZmlsZSAoYzI4NikKICAgIGlmICggQHskcmlucHV0X2xpbmVzfSAmJiAkc291cmNlX3N0cmluZyAhfiAvXG4kLyApIHsKICAgICAgICAkc291cmNlX3N0cmluZyAuPSAiXG4iOwogICAgfQoKICAgICMgUmVtb3ZlIGxlYWRpbmcgd2hpdGVzcGFjZSBleGNlcHQgbmV3bGluZXMKICAgICRzb3VyY2Vfc3RyaW5nID1+IHMvXiBbXlxTXG5dKyAvL2d4bTsKCiAgICAjIFRoZW4gYnJlYWsgdGhlIHN0cmluZyBpbnRvIGxpbmVzCiAgICBteSBAdHJpbW1lZF9saW5lcyA9IHNwbGl0IC9eLywgJHNvdXJjZV9zdHJpbmc7CgogICAgIyBTYWZldHkgY2hlY2sgLSBhIGNoYW5nZSBpbiBudW1iZXIgb2YgbGluZXMgd291bGQgYmUgYSBkaXNhc3RlcgogICAgaWYgKCBAdHJpbW1lZF9saW5lcyAhPSBAeyRyaW5wdXRfbGluZXN9ICkgewoKICAgICAgICAjIFNob3VsZG4ndCBoYXBwZW4gLSBkaWUgaW4gREVWRUxfTU9ERSBhbmQgZml4CiAgICAgICAgbXkgJG50ciA9IEB0cmltbWVkX2xpbmVzOwogICAgICAgIG15ICR1dHIgPSBAeyRyaW5wdXRfbGluZXN9OwogICAgICAgIERFVkVMX01PREUKICAgICAgICAgICYmICRzZWxmLT5GYXVsdCgKICAgICAgICAgICAgInRyaW1tZWQgLyB1bnRyaW1tZWQgbGluZSBjb3VudHMgZGlmZmVyOiAkbnRyIC8gJHV0clxuIik7CgogICAgICAgICMgT3RoZXJ3aXNlIHdlIGNhbiBzYWZlbHkgY29udGludWUgd2l0aCB1bmRlZmluZWQgdHJpbW1lZCBsaW5lcy4gIFRoZXkKICAgICAgICAjIHdpbGwgYmUgZGV0ZWN0ZWQgYW5kIGZpeGVkIGxhdGVyLgogICAgICAgIEB0cmltbWVkX2xpbmVzID0gKCk7CiAgICB9CgogICAgJHNlbGYtPltfcmlucHV0X2xpbmVzX10gICAgICAgICAgPSAkcmlucHV0X2xpbmVzOwogICAgJHNlbGYtPltfcnRyaW1tZWRfaW5wdXRfbGluZXNfXSAgPSBcQHRyaW1tZWRfbGluZXM7CiAgICAkc2VsZi0+W19pbnB1dF9saW5lX2luZGV4X25leHRfXSA9IDA7CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBtYWtlX3NvdXJjZV9hcnJheQoKc3ViIHBlZWtfYWhlYWQgewogICAgbXkgKCAkc2VsZiwgJGJ1ZmZlcl9pbmRleCApID0gQF87CgogICAgIyBsb29rICRidWZmZXJfaW5kZXggbGluZXMgYWhlYWQgb2YgdGhlIGN1cnJlbnQgbG9jYXRpb24gaW4gdGhlIGlucHV0CiAgICAjIHN0cmVhbSB3aXRob3V0IGRpc3R1cmJpbmcgdGhlIGlucHV0CiAgICBteSAkbGluZTsKICAgIG15ICRyaW5wdXRfbGluZXMgPSAkc2VsZi0+W19yaW5wdXRfbGluZXNfXTsKICAgIG15ICRsaW5lX2luZGV4ICAgPSAkYnVmZmVyX2luZGV4ICsgJHNlbGYtPltfaW5wdXRfbGluZV9pbmRleF9uZXh0X107CiAgICBpZiAoICRsaW5lX2luZGV4IDwgQHskcmlucHV0X2xpbmVzfSApIHsKICAgICAgICAkbGluZSA9ICRyaW5wdXRfbGluZXMtPlskbGluZV9pbmRleF07CiAgICB9CiAgICByZXR1cm4gJGxpbmU7Cn0gIyMgZW5kIHN1YiBwZWVrX2FoZWFkCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBpbnRlcmZhY2UgdG8gUGVybDo6VGlkeTo6TG9nZ2VyIHJvdXRpbmVzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgd2FybmluZyB7CgogICAgbXkgKCAkc2VsZiwgJG1zZyApID0gQF87CgogICAgbXkgJGxvZ2dlcl9vYmplY3QgPSAkc2VsZi0+W19sb2dnZXJfb2JqZWN0X107CiAgICAkc2VsZi0+W193YXJuaW5nX2NvdW50X10rKzsKICAgIGlmICgkbG9nZ2VyX29iamVjdCkgewogICAgICAgIG15ICRtc2dfbGluZV9udW1iZXIgPSAkc2VsZi0+W19sYXN0X2xpbmVfbnVtYmVyX107CiAgICAgICAgJGxvZ2dlcl9vYmplY3QtPndhcm5pbmcoICRtc2csICRtc2dfbGluZV9udW1iZXIgKTsKICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHdhcm5pbmcKCnN1YiBnZXRfaW5wdXRfc3RyZWFtX25hbWUgewoKICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgbXkgJGlucHV0X3N0cmVhbV9uYW1lID0gRU1QVFlfU1RSSU5HOwogICAgbXkgJGxvZ2dlcl9vYmplY3QgICAgID0gJHNlbGYtPltfbG9nZ2VyX29iamVjdF9dOwogICAgaWYgKCRsb2dnZXJfb2JqZWN0KSB7CiAgICAgICAgJGlucHV0X3N0cmVhbV9uYW1lID0gJGxvZ2dlcl9vYmplY3QtPmdldF9pbnB1dF9zdHJlYW1fbmFtZSgpOwogICAgfQogICAgcmV0dXJuICRpbnB1dF9zdHJlYW1fbmFtZTsKfSAjIyBlbmQgc3ViIGdldF9pbnB1dF9zdHJlYW1fbmFtZQoKc3ViIGNvbXBsYWluIHsKCiAgICBteSAoICRzZWxmLCAkbXNnICkgPSBAXzsKCiAgICBteSAkbG9nZ2VyX29iamVjdCA9ICRzZWxmLT5bX2xvZ2dlcl9vYmplY3RfXTsKICAgIGlmICgkbG9nZ2VyX29iamVjdCkgewogICAgICAgIG15ICRpbnB1dF9saW5lX251bWJlciA9ICRzZWxmLT5bX2xhc3RfbGluZV9udW1iZXJfXTsKICAgICAgICAkbG9nZ2VyX29iamVjdC0+Y29tcGxhaW4oICRtc2csICRpbnB1dF9saW5lX251bWJlciApOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgY29tcGxhaW4KCnN1YiB3cml0ZV9sb2dmaWxlX2VudHJ5IHsKCiAgICBteSAoICRzZWxmLCAkbXNnICkgPSBAXzsKCiAgICBteSAkbG9nZ2VyX29iamVjdCA9ICRzZWxmLT5bX2xvZ2dlcl9vYmplY3RfXTsKICAgIGlmICgkbG9nZ2VyX29iamVjdCkgewogICAgICAgICRsb2dnZXJfb2JqZWN0LT53cml0ZV9sb2dmaWxlX2VudHJ5KCRtc2cpOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgd3JpdGVfbG9nZmlsZV9lbnRyeQoKc3ViIGludGVycnVwdF9sb2dmaWxlIHsKCiAgICBteSAkc2VsZiA9IHNoaWZ0OwoKICAgIG15ICRsb2dnZXJfb2JqZWN0ID0gJHNlbGYtPltfbG9nZ2VyX29iamVjdF9dOwogICAgaWYgKCRsb2dnZXJfb2JqZWN0KSB7CiAgICAgICAgJGxvZ2dlcl9vYmplY3QtPmludGVycnVwdF9sb2dmaWxlKCk7CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBpbnRlcnJ1cHRfbG9nZmlsZQoKc3ViIHJlc3VtZV9sb2dmaWxlIHsKCiAgICBteSAkc2VsZiA9IHNoaWZ0OwoKICAgIG15ICRsb2dnZXJfb2JqZWN0ID0gJHNlbGYtPltfbG9nZ2VyX29iamVjdF9dOwogICAgaWYgKCRsb2dnZXJfb2JqZWN0KSB7CiAgICAgICAgJGxvZ2dlcl9vYmplY3QtPnJlc3VtZV9sb2dmaWxlKCk7CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiByZXN1bWVfbG9nZmlsZQoKc3ViIGJyYWNlX3dhcm5pbmcgewogICAgbXkgKCAkc2VsZiwgJG1zZyApID0gQF87CiAgICAkc2VsZi0+W19zYXdfYnJhY2VfZXJyb3JfXSsrOwoKICAgIG15ICRsb2dnZXJfb2JqZWN0ID0gJHNlbGYtPltfbG9nZ2VyX29iamVjdF9dOwogICAgaWYgKCRsb2dnZXJfb2JqZWN0KSB7CiAgICAgICAgbXkgJG1zZ19saW5lX251bWJlciA9ICRzZWxmLT5bX2xhc3RfbGluZV9udW1iZXJfXTsKICAgICAgICAkbG9nZ2VyX29iamVjdC0+YnJhY2Vfd2FybmluZyggJG1zZywgJG1zZ19saW5lX251bWJlciApOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgYnJhY2Vfd2FybmluZwoKc3ViIGluY3JlbWVudF9icmFjZV9lcnJvciB7CgogICAgIyBUaGlzIGlzIHNhbWUgYXMgc3ViIGJyYWNlX3dhcm5pbmcgYnV0IHdpdGhvdXQgYSBtZXNzYWdlCiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgJHNlbGYtPltfc2F3X2JyYWNlX2Vycm9yX10rKzsKCiAgICBteSAkbG9nZ2VyX29iamVjdCA9ICRzZWxmLT5bX2xvZ2dlcl9vYmplY3RfXTsKICAgIGlmICgkbG9nZ2VyX29iamVjdCkgewogICAgICAgICRsb2dnZXJfb2JqZWN0LT5pbmNyZW1lbnRfYnJhY2VfZXJyb3IoKTsKICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGluY3JlbWVudF9icmFjZV9lcnJvcgoKc3ViIGdldF9zYXdfYnJhY2VfZXJyb3IgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgIHJldHVybiAkc2VsZi0+W19zYXdfYnJhY2VfZXJyb3JfXTsKfQoKc3ViIHJlcG9ydF9kZWZpbml0ZV9idWcgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgICRzZWxmLT5bX2hpdF9idWdfXSA9IDE7CiAgICBteSAkbG9nZ2VyX29iamVjdCA9ICRzZWxmLT5bX2xvZ2dlcl9vYmplY3RfXTsKICAgIGlmICgkbG9nZ2VyX29iamVjdCkgewogICAgICAgICRsb2dnZXJfb2JqZWN0LT5yZXBvcnRfZGVmaW5pdGVfYnVnKCk7CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiByZXBvcnRfZGVmaW5pdGVfYnVnCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEludGVyZmFjZSB0byBQZXJsOjpUaWR5OjpEaWFnbm9zdGljcwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgd3JpdGVfZGlhZ25vc3RpY3MgewogICAgbXkgKCAkc2VsZiwgJG1zZyApID0gQF87CiAgICBteSAkaW5wdXRfbGluZV9udW1iZXIgID0gJHNlbGYtPltfbGFzdF9saW5lX251bWJlcl9dOwogICAgbXkgJGRpYWdub3N0aWNzX29iamVjdCA9ICRzZWxmLT5bX2RpYWdub3N0aWNzX29iamVjdF9dOwogICAgaWYgKCRkaWFnbm9zdGljc19vYmplY3QpIHsKICAgICAgICAkZGlhZ25vc3RpY3Nfb2JqZWN0LT53cml0ZV9kaWFnbm9zdGljcyggJG1zZywgJGlucHV0X2xpbmVfbnVtYmVyICk7CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiB3cml0ZV9kaWFnbm9zdGljcwoKc3ViIHJlcG9ydF90b2tlbml6YXRpb25fZXJyb3JzIHsKCiAgICBteSAoJHNlbGYpID0gQF87CgogICAgIyBSZXBvcnQgYW55IHRva2VuaXphdGlvbiBlcnJvcnMgYW5kIHJldHVybiBhIGZsYWcgJyRzZXZlcmVfZXJyb3InLgogICAgIyBTZXQgJHNldmVyZV9lcnJvciA9IDEgaWYgdGhlIHRva2VuaXphdGlvbiBlcnJvcnMgYXJlIHNvIHNldmVyZSB0aGF0CiAgICAjIHRoZSBmb3JtYXR0ZXIgc2hvdWxkIG5vdCBhdHRlbXB0IHRvIGZvcm1hdCB0aGUgZmlsZS4gSW5zdGVhZCwgaXQgd2lsbAogICAgIyBqdXN0IG91dHB1dCB0aGUgZmlsZSB2ZXJiYXRpbS4KCiAgICAjIHNldCBzZXZlcmUgZXJyb3IgZmxhZyBpZiB0b2tlbml6ZXIgaGFzIGVuY291bnRlcmVkIGZpbGUgcmVhZGluZyBwcm9ibGVtcwogICAgIyAoaS5lLiB1bmV4cGVjdGVkIGJpbmFyeSBjaGFyYWN0ZXJzKQogICAgIyBvciBjb2RlIHdoaWNoIG1heSBub3QgYmUgZm9ybWF0dGVkIGNvcnJlY3RseSAoc3VjaCBhcyAnbXkgc3ViIHEnKQogICAgIyBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIF9pbl9lcnJvcl8gYW5kIF9pbl90cm91YmxlXyBpcyB0aGF0CiAgICAjIF9pbl9lcnJvcl8gc3RvcHMgdGhlIHRva2VuaXplciBpbW1lZGlhdGVseSB3aGVyZWFzCiAgICAjIF9pbl90cm91YmxlXyBsZXRzIHRoZSB0b2tlbml6ZXIgZmluaXNoIHNvIHRoYXQgYWxsIGVycm9ycyBhcmUgc2VlbgogICAgIyBCb3RoIGJsb2NrIGZvcm1hdHRpbmcgYW5kIGNhdXNlIHRoZSBpbnB1dCBzdHJlYW0gdG8gYmUgb3V0cHV0IHZlcmJhdGltLgogICAgbXkgJHNldmVyZV9lcnJvciA9ICRzZWxmLT5bX2luX2Vycm9yX10gfHwgJHNlbGYtPltfaW5fdHJvdWJsZV9dOwoKICAgICMgQW5kIGRvIG5vdCBmb3JtYXQgaWYgaXQgbG9va3MgbGlrZSBhbiBodG1sIGZpbGUgKGMyMDkpCiAgICAkc2V2ZXJlX2Vycm9yIHx8PSAkc2VsZi0+W19odG1sX3RhZ19jb3VudF9dICYmICRzZWxmLT5bX3dhcm5pbmdfY291bnRfXTsKCiAgICAjIEluZm9ybSB0aGUgbG9nZ2VyIG9iamVjdCBvbiBsZW5ndGggb2YgaW5wdXQgc3RyZWFtCiAgICBteSAkbG9nZ2VyX29iamVjdCA9ICRzZWxmLT5bX2xvZ2dlcl9vYmplY3RfXTsKICAgIGlmICgkbG9nZ2VyX29iamVjdCkgewogICAgICAgIG15ICRsYXN0X2xpbmVfbnVtYmVyID0gJHNlbGYtPltfbGFzdF9saW5lX251bWJlcl9dOwogICAgICAgICRsb2dnZXJfb2JqZWN0LT5zZXRfbGFzdF9pbnB1dF9saW5lX251bWJlcigkbGFzdF9saW5lX251bWJlcik7CiAgICB9CgogICAgbXkgJG1heGxlID0gJHJPcHRzX21heGltdW1fbGV2ZWxfZXJyb3JzOwogICAgbXkgJG1heHVlID0gJHJPcHRzX21heGltdW1fdW5leHBlY3RlZF9lcnJvcnM7CiAgICAkbWF4bGUgPSAxIHVubGVzcyBkZWZpbmVkKCRtYXhsZSk7CiAgICAkbWF4dWUgPSAwIHVubGVzcyBkZWZpbmVkKCRtYXh1ZSk7CgogICAgbXkgJGxldmVsID0gZ2V0X2luZGVudGF0aW9uX2xldmVsKCk7CiAgICBpZiAoICRsZXZlbCAhPSAkc2VsZi0+W19zdGFydGluZ19sZXZlbF9dICkgewogICAgICAgICRzZWxmLT53YXJuaW5nKCJmaW5hbCBpbmRlbnRhdGlvbiBsZXZlbDogJGxldmVsXG4iKTsKCiAgICAgICAgJHNlbGYtPltfc2hvd19pbmRlbnRhdGlvbl90YWJsZV9dID0gMTsKCiAgICAgICAgbXkgJGxldmVsX2RpZmYgPSAkc2VsZi0+W19zdGFydGluZ19sZXZlbF9dIC0gJGxldmVsOwogICAgICAgIGlmICggJGxldmVsX2RpZmYgPCAwICkgeyAkbGV2ZWxfZGlmZiA9IC0kbGV2ZWxfZGlmZiB9CgogICAgICAgICMgU2V0IHNldmVyZSBlcnJvciBmbGFnIGlmIHRoZSBsZXZlbCBlcnJvciBpcyBncmVhdGVyIHRoYW4gMS4KICAgICAgICAjIFRoZSBmb3JtYXR0ZXIgY2FuIGZ1bmN0aW9uIGZvciBhbnkgbGV2ZWwgZXJyb3IgYnV0IGl0IGlzIHByb2JhYmx5CiAgICAgICAgIyBiZXN0IG5vdCB0byBhdHRlbXB0IGZvcm1hdHRpbmcgZm9yIGEgaGlnaCBsZXZlbCBlcnJvci4KICAgICAgICBpZiAoICRtYXhsZSA+PSAwICYmICRsZXZlbF9kaWZmID4gJG1heGxlICkgewogICAgICAgICAgICAkc2V2ZXJlX2Vycm9yID0gMTsKICAgICAgICAgICAgJHNlbGYtPndhcm5pbmcoPDxFT00pOwpGb3JtYXR0aW5nIHdpbGwgYmUgc2tpcHBlZCBiZWNhdXNlIGxldmVsIGVycm9yICckbGV2ZWxfZGlmZicgZXhjZWVkcyAtbWF4bGU9JG1heGxlOyB1c2UgLW1heGxlPS0xIHRvIGZvcmNlIGZvcm1hdHRpbmcKRU9NCiAgICAgICAgfQogICAgfQoKICAgICRzZWxmLT5jaGVja19maW5hbF9uZXN0aW5nX2RlcHRocygpOwoKICAgIGlmICggJHNlbGYtPltfc2hvd19pbmRlbnRhdGlvbl90YWJsZV9dICkgewogICAgICAgICRzZWxmLT5zaG93X2luZGVudGF0aW9uX3RhYmxlKCk7CiAgICB9CgogICAgIyBMaWtld2lzZSwgbGFyZ2UgbnVtYmVycyBvZiBicmFjZSBlcnJvcnMgdXN1YWxseSBpbmRpY2F0ZSBub24tcGVybAogICAgIyBzY3JpcHRzLCBzbyBzZXQgdGhlIHNldmVyZSBlcnJvciBmbGFnIGF0IGEgbG93IG51bWJlci4gIFRoaXMgaXMgc2ltaWxhcgogICAgIyB0byB0aGUgbGV2ZWwgY2hlY2ssIGJ1dCBkaWZmZXJlbnQgYmVjYXVzZSBicmFjZXMgbWF5IGJhbGFuY2UgYnV0IGJlCiAgICAjIGluY29ycmVjdGx5IGludGVybGFjZWQuCiAgICBpZiAoICRzZWxmLT5bX3RydWVfYnJhY2VfZXJyb3JfY291bnRfXSA+IDIgKSB7CiAgICAgICAgJHNldmVyZV9lcnJvciA9IDE7CiAgICB9CgogICAgaWYgKCAkck9wdHNfbG9va19mb3JfaGFzaF9iYW5nCiAgICAgICAgJiYgISRzZWxmLT5bX3Nhd19oYXNoX2JhbmdfXSApCiAgICB7CiAgICAgICAgJHNlbGYtPndhcm5pbmcoCiAgICAgICAgICAgICJoaXQgRU9GIHdpdGhvdXQgc2VlaW5nIGhhc2gtYmFuZyBsaW5lOyBtYXliZSBkb24ndCBuZWVkIC14P1xuIik7CiAgICB9CgogICAgaWYgKCAkc2VsZi0+W19pbl9mb3JtYXRfXSApIHsKICAgICAgICAkc2VsZi0+d2FybmluZygiaGl0IEVPRiB3aGlsZSBpbiBmb3JtYXQgZGVzY3JpcHRpb25cbiIpOwogICAgfQoKICAgIGlmICggJHNlbGYtPltfaW5fY29kZV9za2lwcGluZ19dICkgewogICAgICAgICRzZWxmLT53cml0ZV9sb2dmaWxlX2VudHJ5KAogICAgICAgICAgICAiaGl0IEVPRiB3aGlsZSBpbiBsaW5lcyBza2lwcGVkIHdpdGggLS1jb2RlLXNraXBwaW5nXG4iKTsKICAgIH0KCiAgICBpZiAoICRzZWxmLT5bX2luX3BvZF9dICkgewoKICAgICAgICAjIEp1c3Qgd3JpdGUgbG9nIGVudHJ5IGlmIHRoaXMgaXMgYWZ0ZXIgX19FTkRfXyBvciBfX0RBVEFfXwogICAgICAgICMgYmVjYXVzZSB0aGlzIGhhcHBlbnMgdG8gb2Z0ZW4sIGFuZCBpdCBpcyBub3QgbGlrZWx5IHRvIGJlCiAgICAgICAgIyBhIHBhcnNpbmcgZXJyb3IuCiAgICAgICAgaWYgKCAkc2VsZi0+W19zYXdfZGF0YV9dIHx8ICRzZWxmLT5bX3Nhd19lbmRfXSApIHsKICAgICAgICAgICAgJHNlbGYtPndyaXRlX2xvZ2ZpbGVfZW50cnkoCiJoaXQgZW9mIHdoaWxlIGluIHBvZCBkb2N1bWVudGF0aW9uIChubyA9Y3V0IHNlZW4pXG5cdHRoaXMgY2FuIGNhdXNlIHRyb3VibGUgd2l0aCBzb21lIHBvZCB1dGlsaXRpZXNcbiIKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGVsc2UgewogICAgICAgICAgICAkc2VsZi0+Y29tcGxhaW4oCiJoaXQgZW9mIHdoaWxlIGluIHBvZCBkb2N1bWVudGF0aW9uIChubyA9Y3V0IHNlZW4pXG5cdHRoaXMgY2FuIGNhdXNlIHRyb3VibGUgd2l0aCBzb21lIHBvZCB1dGlsaXRpZXNcbiIKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgfQoKICAgIGlmICggJHNlbGYtPltfaW5faGVyZV9kb2NfXSApIHsKICAgICAgICAkc2V2ZXJlX2Vycm9yID0gMTsKICAgICAgICBteSAkaGVyZV9kb2NfdGFyZ2V0ID0gJHNlbGYtPltfaGVyZV9kb2NfdGFyZ2V0X107CiAgICAgICAgbXkgJHN0YXJ0ZWRfbG9va2luZ19mb3JfaGVyZV90YXJnZXRfYXQgPQogICAgICAgICAgJHNlbGYtPltfc3RhcnRlZF9sb29raW5nX2Zvcl9oZXJlX3RhcmdldF9hdF9dOwogICAgICAgIGlmICgkaGVyZV9kb2NfdGFyZ2V0KSB7CiAgICAgICAgICAgICRzZWxmLT53YXJuaW5nKAoiaGl0IEVPRiBpbiBoZXJlIGRvY3VtZW50IHN0YXJ0aW5nIGF0IGxpbmUgJHN0YXJ0ZWRfbG9va2luZ19mb3JfaGVyZV90YXJnZXRfYXQgd2l0aCB0YXJnZXQ6ICRoZXJlX2RvY190YXJnZXRcbiIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRzZWxmLT53YXJuaW5nKDw8RU9NKTsKSGl0IEVPRiBpbiBoZXJlIGRvY3VtZW50IHN0YXJ0aW5nIGF0IGxpbmUgJHN0YXJ0ZWRfbG9va2luZ19mb3JfaGVyZV90YXJnZXRfYXQgd2l0aCBlbXB0eSB0YXJnZXQgc3RyaW5nLgogIChQZXJsIHdpbGwgbWF0Y2ggdG8gdGhlIGVuZCBvZiBmaWxlIGJ1dCB0aGlzIG1heSBub3QgYmUgaW50ZW5kZWQpLgpFT00KICAgICAgICB9CiAgICAgICAgbXkgJG5lYXJseV9tYXRjaGVkX2hlcmVfdGFyZ2V0X2F0ID0KICAgICAgICAgICRzZWxmLT5bX25lYXJseV9tYXRjaGVkX2hlcmVfdGFyZ2V0X2F0X107CiAgICAgICAgaWYgKCRuZWFybHlfbWF0Y2hlZF9oZXJlX3RhcmdldF9hdCkgewogICAgICAgICAgICAkc2VsZi0+d2FybmluZygKIk5PVEU6IGFsbW9zdCBtYXRjaGVkIGF0IGlucHV0IGxpbmUgJG5lYXJseV9tYXRjaGVkX2hlcmVfdGFyZ2V0X2F0IGV4Y2VwdCBmb3Igd2hpdGVzcGFjZVxuIgogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIFNvbWV0aGluZyBpcyBzZXJpb3VzbHkgd3JvbmcgaWYgd2UgZW5kZWQgaW5zaWRlIGEgcXVvdGUKICAgIGlmICggJHNlbGYtPltfaW5fcXVvdGVfXSApIHsKICAgICAgICAkc2V2ZXJlX2Vycm9yID0gMTsKICAgICAgICBteSAkbGluZV9zdGFydF9xdW90ZSA9ICRzZWxmLT5bX2xpbmVfc3RhcnRfcXVvdGVfXTsKICAgICAgICBteSAkcXVvdGVfdGFyZ2V0ICAgICA9ICRzZWxmLT5bX3F1b3RlX3RhcmdldF9dOwogICAgICAgIG15ICR3aGF0ID0KICAgICAgICAgICggJHNlbGYtPltfaW5fYXR0cmlidXRlX2xpc3RfXSApCiAgICAgICAgICA/ICJhdHRyaWJ1dGUgbGlzdCIKICAgICAgICAgIDogInF1b3RlL3BhdHRlcm4iOwogICAgICAgICRzZWxmLT53YXJuaW5nKAoiaGl0IEVPRiBzZWVraW5nIGVuZCBvZiAkd2hhdCBzdGFydGluZyBhdCBsaW5lICRsaW5lX3N0YXJ0X3F1b3RlIGVuZGluZyBpbiAkcXVvdGVfdGFyZ2V0XG4iCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRzZWxmLT5bX2hpdF9idWdfXSApIHsKICAgICAgICAkc2V2ZXJlX2Vycm9yID0gMTsKICAgIH0KCiAgICAjIE11bHRpcGxlICJ1bmV4cGVjdGVkIiB0eXBlIHRva2VuaXphdGlvbiBlcnJvcnMgdXN1YWxseSBpbmRpY2F0ZSBwYXJzaW5nCiAgICAjIG5vbi1wZXJsIHNjcmlwdHMsIG9yIHRoYXQgc29tZXRoaW5nIGlzIHNlcmlvdXNseSB3cm9uZywgc28gd2Ugc2hvdWxkCiAgICAjIGF2b2lkIGZvcm1hdHRpbmcgdGhlbS4gIFRoaXMgY2FuIGhhcHBlbiBmb3IgZXhhbXBsZSBpZiB3ZSBydW4gcGVybHRpZHkgb24KICAgICMgYSBzaGVsbCBzY3JpcHQgb3IgYW4gaHRtbCBmaWxlLiAgQnV0IHVuZm9ydHVuYXRlbHkgdGhpcyBjaGVjayBjYW4KICAgICMgaW50ZXJmZXJlIHdpdGggc29tZSBleHRlbmRlZCBzeW50YXhlcywgc3VjaCBhcyBSUGVybCwgc28gaXQgaGFzIHRvIGJlIG9mZgogICAgIyBieSBkZWZhdWx0LgogICAgbXkgJHVlX2NvdW50ID0gJHNlbGYtPltfdW5leHBlY3RlZF9lcnJvcl9jb3VudF9dOwogICAgaWYgKCAkbWF4dWUgPiAwICYmICR1ZV9jb3VudCA+ICRtYXh1ZSApIHsKICAgICAgICAkc2VsZi0+d2FybmluZyg8PEVPTSk7CkZvcm1hdHRpbmcgd2lsbCBiZSBza2lwcGVkIHNpbmNlIHVuZXhwZWN0ZWQgdG9rZW4gY291bnQgPSAkdWVfY291bnQgPiAtbWF4dWU9JG1heHVlOyB1c2UgLW1heHVlPTAgdG8gZm9yY2UgZm9ybWF0dGluZwpFT00KICAgICAgICAkc2V2ZXJlX2Vycm9yID0gMTsKICAgIH0KCiAgICBpZiAoICEkc2VsZi0+W19zYXdfcGVybF9kYXNoX3dfXSApIHsKICAgICAgICAkc2VsZi0+d3JpdGVfbG9nZmlsZV9lbnRyeSgiU3VnZ2VzdCBpbmNsdWRpbmcgJ3VzZSB3YXJuaW5nczsnXG4iKTsKICAgIH0KCiAgICBpZiAoICRzZWxmLT5bX3Nhd19wZXJsX2Rhc2hfUF9dICkgewogICAgICAgICRzZWxmLT53cml0ZV9sb2dmaWxlX2VudHJ5KAogICAgICAgICAgICAiVXNlIG9mIC1QIHBhcmFtZXRlciBmb3IgZGVmaW5lcyBpcyBkaXNjb3VyYWdlZFxuIik7CiAgICB9CgogICAgaWYgKCAhJHNlbGYtPltfc2F3X3VzZV9zdHJpY3RfXSApIHsKICAgICAgICAkc2VsZi0+d3JpdGVfbG9nZmlsZV9lbnRyeSgiU3VnZ2VzdCBpbmNsdWRpbmcgJ3VzZSBzdHJpY3Q7J1xuIik7CiAgICB9CgogICAgIyBpdCBpcyBzdWdnZXN0ZWQgdGhhdCBsYWJlbHMgaGF2ZSBhdCBsZWFzdCBvbmUgdXBwZXIgY2FzZSBjaGFyYWN0ZXIKICAgICMgZm9yIGxlZ2liaWxpdHkgYW5kIHRvIGF2b2lkIGNvZGUgYnJlYWthZ2UgYXMgbmV3IGtleXdvcmRzIGFyZSBpbnRyb2R1Y2VkCiAgICBpZiAoICRzZWxmLT5bX3Jsb3dlcl9jYXNlX2xhYmVsc19hdF9dICkgewogICAgICAgIG15IEBsb3dlcl9jYXNlX2xhYmVsc19hdCA9IEB7ICRzZWxmLT5bX3Jsb3dlcl9jYXNlX2xhYmVsc19hdF9dIH07CiAgICAgICAgJHNlbGYtPndyaXRlX2xvZ2ZpbGVfZW50cnkoCiAgICAgICAgICAgICJTdWdnZXN0IHVzaW5nIHVwcGVyIGNhc2UgY2hhcmFjdGVycyBpbiBsYWJlbChzKVxuIik7CiAgICAgICAgbG9jYWwgJExJU1RfU0VQQVJBVE9SID0gJykoJzsKICAgICAgICAkc2VsZi0+d3JpdGVfbG9nZmlsZV9lbnRyeSgKICAgICAgICAgICAgIiAgZGVmaW5lZCBhdCBsaW5lKHMpOiAoQGxvd2VyX2Nhc2VfbGFiZWxzX2F0KVxuIik7CiAgICB9CiAgICByZXR1cm4gJHNldmVyZV9lcnJvcjsKfSAjIyBlbmQgc3ViIHJlcG9ydF90b2tlbml6YXRpb25fZXJyb3JzCgpzdWIgc2hvd19pbmRlbnRhdGlvbl90YWJsZSB7CiAgICBteSAoJHNlbGYpID0gQF87CgogICAgIyBPdXRwdXQgaW5kZW50YXRpb24gdGFibGUgbWFkZSBhdCBjbG9zaW5nIGJyYWNlcy4gIFRoaXMgY2FuIGJlIGhlbHBmdWwgZm9yCiAgICAjIHRoZSBjYXNlIG9mIGEgbWlzc2luZyBicmFjZSBpbiBhIHByZXZpb3VzbHkgZm9ybWF0dGVkIGZpbGUuCgogICAgIyBza2lwIGlmIC13YyBpcyB1c2VkIChyYXJlKTsgaXQgaXMgdG9vIGNvbXBsZXggdG8gdXNlCiAgICByZXR1cm4gaWYgKCRyT3B0c193aGl0ZXNwYWNlX2N5Y2xlKTsKCiAgICAjIHNraXAgaWYgbm9uLWluZGVudGluZy1icmFjZS1wcmVmaXggKHZlcnkgcmFyZSwgYnV0IGNvdWxkIGJlIGZpeGVkKQogICAgcmV0dXJuIGlmICgkck9wdHNfbm9uX2luZGVudGluZ19icmFjZV9wcmVmaXgpOwoKICAgICMgc2tpcCBpZiBzdGFydGluZyBsZXZlbCBpcyBub3QgemVybyAocHJvYmFibHkgaW4gZWRpdG9yKQogICAgcmV0dXJuIGlmICgkck9wdHNfc3RhcnRpbmdfaW5kZW50YXRpb25fbGV2ZWwpOwoKICAgICMgc2tpcCBpZiBpbmRlbnRhdGlvbiBhbmFseXNpcyBpcyBub3QgdmFsaWQKICAgIG15ICRyaGFzaCA9ICRzZWxmLT5bX3JjbG9zaW5nX2JyYWNlX2luZGVudGF0aW9uX2hhc2hfXTsKICAgIHJldHVybiBpZiAoICEkcmhhc2gtPnt2YWxpZH0gKTsKCiAgICBteSAkcmhpc3RvcnlfbGluZV9udW1iZXIgID0gJHJoYXNoLT57cmhpc3RvcnlfbGluZV9udW1iZXJ9OwogICAgbXkgJHJoaXN0b3J5X2xldmVsX2RpZmYgICA9ICRyaGFzaC0+e3JoaXN0b3J5X2xldmVsX2RpZmZ9OwogICAgbXkgJHJoaXN0b3J5X2FuY2hvcl9wb2ludCA9ICRyaGFzaC0+e3JoaXN0b3J5X2FuY2hvcl9wb2ludH07CgogICAgIyBSZW1vdmUgdGhlIGZpcnN0IGFydGlmaWNpYWwgcG9pbnQgZnJvbSB0aGUgdGFibGUKICAgIHNoaWZ0IEB7JHJoaXN0b3J5X2xpbmVfbnVtYmVyfTsKICAgIHNoaWZ0IEB7JHJoaXN0b3J5X2xldmVsX2RpZmZ9OwogICAgc2hpZnQgQHskcmhpc3RvcnlfYW5jaG9yX3BvaW50fTsKCiAgICAjIFJlbW92ZSBkdWJpb3VzIHBvaW50cyBhdCBhbiBhbmNob3IgcG9pbnQgPSAyIGFuZCBiZXlvbmQKICAgICMgVGhlc2UgY2FuIG9jY3VyIHdoZW4gbm9uLWluZGVudGluZyBicmFjZXMgYXJlIHVzZWQKICAgIG15ICRudW1faGlzID0gQHskcmhpc3RvcnlfbGV2ZWxfZGlmZn07CiAgICBmb3JlYWNoIG15ICRpICggMCAuLiAkbnVtX2hpcyAtIDEgKSB7CiAgICAgICAgaWYgKCAkcmhpc3RvcnlfYW5jaG9yX3BvaW50LT5bJGldID09IDIgKSB7CiAgICAgICAgICAgICRudW1faGlzID0gJGk7CiAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGlmICggJG51bV9oaXMgPD0gMSApOwoKICAgICMgSWdub3JlIGFuIGVuZGluZyBub24tYW5jaG9yIHBvaW50CiAgICBpZiAoICEkcmhpc3RvcnlfYW5jaG9yX3BvaW50LT5bLTFdICkgewogICAgICAgICRudW1faGlzIC09IDE7CiAgICB9CgogICAgIyBJZ25vcmUgYW4gZW5kaW5nIHBvaW50IHdoaWNoIGlzIHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyBwb2ludAogICAgaWYgKCAkbnVtX2hpcyA+IDEgKSB7CiAgICAgICAgaWYgKCAkcmhpc3RvcnlfbGV2ZWxfZGlmZi0+WyAkbnVtX2hpcyAtIDEgXSA9PQogICAgICAgICAgICAkcmhpc3RvcnlfbGV2ZWxfZGlmZi0+WyAkbnVtX2hpcyAtIDIgXSApCiAgICAgICAgewogICAgICAgICAgICAkbnVtX2hpcyAtPSAxOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNraXAgaWYgdGhlIHRhYmxlIGRvZXMgbm90IGhhdmUgYXQgbGVhc3QgMiBwb2ludHMgdG8gcGlucG9pbnQgYW4gZXJyb3IKICAgIHJldHVybiBpZiAoICRudW1faGlzIDw9IDEgKTsKCiAgICAjIHNraXAgaWYgZmlyc3QgcG9pbnQgc2hvd3MgYSBsZXZlbCBlcnJvciAtIHRoZSBhbmFseXNpcyBtYXkgbm90IGJlIHZhbGlkCiAgICByZXR1cm4gaWYgKCAkcmhpc3RvcnlfbGV2ZWxfZGlmZi0+WzBdICk7CgogICAgIyBTaW5jZSB0aGUgdGFibGUgY291bGQgYmUgYXJiaXRyYXJpbHkgbGFyZ2UsIHdlIHdpbGwgbGltaXQgdGhlIHRhYmxlIHRvIE4KICAgICMgbGluZXMuICBJZiB0aGVyZSBhcmUgbW9yZSBsaW5lcyB0aGFuIHRoYXQsIHdlIHdpbGwgc2hvdyBOLTMgbGluZXMsIHRoZW4KICAgICMgLi4uLCB0aGVuIHRoZSBsYXN0IDIgbGluZXMuIEFsbG93IGFib3V0IDMgbGluZXMgcGVyIGVycm9yLCBzbyBhIHRhYmxlCiAgICAjIGxpbWl0IG9mIDEwIGNhbiBsb2NhbGl6ZSB1cCB0byBhYm91dCAzIGVycm9ycyBpbiBhIGZpbGUuCiAgICBteSAkbmxpbmVzX21heCAgID0gMTA7CiAgICBteSBAcHJlX2luZGV4ZXMgID0gKCAwIC4uICRudW1faGlzIC0gMSApOwogICAgbXkgQHBvc3RfaW5kZXhlcyA9ICgpOwogICAgaWYgKCBAcHJlX2luZGV4ZXMgPiAkbmxpbmVzX21heCApIHsKICAgICAgICBpZiAoICRubGluZXNfbWF4ID49IDUgKSB7CiAgICAgICAgICAgIEBwcmVfaW5kZXhlcyAgPSAoIDAgLi4gJG5saW5lc19tYXggLSA0ICk7CiAgICAgICAgICAgIEBwb3N0X2luZGV4ZXMgPSAoICRudW1faGlzIC0gMiwgJG51bV9oaXMgLSAxICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBAcHJlX2luZGV4ZXMgPSAoIDAgLi4gJG5saW5lc19tYXggLSAxICk7CiAgICAgICAgfQogICAgfQoKICAgIG15IEBvdXRwdXRfbGluZXM7CiAgICBwdXNoIEBvdXRwdXRfbGluZXMsIDw8RU9NOwpUYWJsZSBvZiBuZXN0aW5nIGxldmVsIGRpZmZlcmVuY2VzIGF0IGNsb3NpbmcgYnJhY2VzLgpUaGlzIG1pZ2h0IGhlbHAgbG9jYWxpemUgYnJhY2UgZXJyb3JzIGlmIHRoZSBmaWxlIHdhcyBwcmV2aW91c2x5IGZvcm1hdHRlZC4KbGluZTogZXJyb3I9W25ldyBicmFjZSBsZXZlbF0tW29sZCBpbmRlbnRhdGlvbiBsZXZlbF0KRU9NCiAgICBmb3JlYWNoIG15ICRpIChAcHJlX2luZGV4ZXMpIHsKICAgICAgICBteSAkbG5vICA9ICRyaGlzdG9yeV9saW5lX251bWJlci0+WyRpXTsKICAgICAgICBteSAkZGlmZiA9ICRyaGlzdG9yeV9sZXZlbF9kaWZmLT5bJGldOwogICAgICAgIHB1c2ggQG91dHB1dF9saW5lcywgPDxFT007CiRsbm86ICRkaWZmCkVPTQogICAgfQogICAgaWYgKEBwb3N0X2luZGV4ZXMpIHsKICAgICAgICBwdXNoIEBvdXRwdXRfbGluZXMsICIuLi5cbiI7CiAgICAgICAgZm9yZWFjaCBteSAkaSAoQHBvc3RfaW5kZXhlcykgewogICAgICAgICAgICBteSAkbG5vICA9ICRyaGlzdG9yeV9saW5lX251bWJlci0+WyRpXTsKICAgICAgICAgICAgbXkgJGRpZmYgPSAkcmhpc3RvcnlfbGV2ZWxfZGlmZi0+WyRpXTsKICAgICAgICAgICAgcHVzaCBAb3V0cHV0X2xpbmVzLCA8PEVPTTsKJGxubzogJGRpZmYKRU9NCiAgICAgICAgfQogICAgfQogICAgcHVzaCBAb3V0cHV0X2xpbmVzLCAiXG4iOwogICAgbXkgJG91dHB1dF9zdHIgPSBqb2luIEVNUFRZX1NUUklORywgQG91dHB1dF9saW5lczsKCiAgICAkc2VsZi0+aW50ZXJydXB0X2xvZ2ZpbGUoKTsKICAgICRzZWxmLT53YXJuaW5nKCRvdXRwdXRfc3RyKTsKICAgICRzZWxmLT5yZXN1bWVfbG9nZmlsZSgpOwoKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHNob3dfaW5kZW50YXRpb25fdGFibGUKCnN1YiByZXBvcnRfdl9zdHJpbmcgewoKICAgICMgd2FybiBpZiB0aGlzIHZlcnNpb24gY2FuJ3QgaGFuZGxlIHYtc3RyaW5ncwogICAgbXkgKCAkc2VsZiwgJHRvayApID0gQF87CiAgICBpZiAoICRdIDwgNS4wMDYgKSB7CiAgICAgICAgJHNlbGYtPndhcm5pbmcoCiJGb3VuZCB2LXN0cmluZyAnJHRvaycgYnV0IHYtc3RyaW5ncyBhcmUgbm90IGltcGxlbWVudGVkIGluIHlvdXIgdmVyc2lvbiBvZiBwZXJsOyBzZWUgQ2FtZWwgMyBib29rIGNoIDJcbiIKICAgICAgICApOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgcmVwb3J0X3Zfc3RyaW5nCgpzdWIgaXNfdmFsaWRfdG9rZW5fdHlwZSB7CiAgICBteSAoJHR5cGUpID0gQF87CiAgICByZXR1cm4gJGlzX3ZhbGlkX3Rva2VuX3R5cGV7JHR5cGV9Owp9CgpzdWIgbG9nX251bWJlcmVkX21zZyB7CiAgICBteSAoICRzZWxmLCAkbXNnICkgPSBAXzsKCiAgICAjIHdyaXRlIGlucHV0IGxpbmUgbnVtYmVyICsgbWVzc2FnZSB0byBsb2dmaWxlCiAgICBteSAkaW5wdXRfbGluZV9udW1iZXIgPSAkc2VsZi0+W19sYXN0X2xpbmVfbnVtYmVyX107CiAgICAkc2VsZi0+d3JpdGVfbG9nZmlsZV9lbnRyeSgiTGluZSAkaW5wdXRfbGluZV9udW1iZXI6ICRtc2ciKTsKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGxvZ19udW1iZXJlZF9tc2cKCnN1YiBnZXRfbGluZSB7CgogICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICAjIFJlYWQgdGhlIG5leHQgaW5wdXQgbGluZSBhbmQgdG9rZW5pemUgaXQKICAgICMgUmV0dXJuczoKICAgICMgICAkbGluZV9vZl90b2tlbnMgPSByZWYgdG8gaGFzaCBvZiBpbmZvIGZvciB0aGUgdG9rZW5pemVkIGxpbmUKCiAgICAjIFVTRVMgR0xPQkFMIFZBUklBQkxFUzoKICAgICMgICAkYnJhY2VfZGVwdGgsICRzcXVhcmVfYnJhY2tldF9kZXB0aCwgJHBhcmVuX2RlcHRoCgogICAgIyBnZXQgdGhlIG5leHQgbGluZSBmcm9tIHRoZSBpbnB1dCBhcnJheQogICAgbXkgJGlucHV0X2xpbmU7CiAgICBteSAkdHJpbW1lZF9pbnB1dF9saW5lOwogICAgbXkgJGxpbmVfaW5kZXggICA9ICRzZWxmLT5bX2lucHV0X2xpbmVfaW5kZXhfbmV4dF9dOwogICAgbXkgJHJpbnB1dF9saW5lcyA9ICRzZWxmLT5bX3JpbnB1dF9saW5lc19dOwogICAgaWYgKCAkbGluZV9pbmRleCA8IEB7JHJpbnB1dF9saW5lc30gKSB7CiAgICAgICAgJHRyaW1tZWRfaW5wdXRfbGluZSA9ICRzZWxmLT5bX3J0cmltbWVkX2lucHV0X2xpbmVzX10tPlskbGluZV9pbmRleF07CiAgICAgICAgJGlucHV0X2xpbmUgICAgICAgICA9ICRyaW5wdXRfbGluZXMtPlsgJGxpbmVfaW5kZXgrKyBdOwogICAgICAgICRzZWxmLT5bX2lucHV0X2xpbmVfaW5kZXhfbmV4dF9dID0gJGxpbmVfaW5kZXg7CiAgICB9CgogICAgJHNlbGYtPltfbGluZV9vZl90ZXh0X10gPSAkaW5wdXRfbGluZTsKCiAgICByZXR1cm4gaWYgKCAhZGVmaW5lZCgkaW5wdXRfbGluZSkgKTsKCiAgICBteSAkaW5wdXRfbGluZV9udW1iZXIgPSArKyRzZWxmLT5bX2xhc3RfbGluZV9udW1iZXJfXTsKCiAgICAjIEZpbmQgYW5kIHJlbW92ZSB3aGF0IGNoYXJhY3RlcnMgdGVybWluYXRlIHRoaXMgbGluZSwgaW5jbHVkaW5nIGFueQogICAgIyBjb250cm9sIHIKICAgIG15ICRpbnB1dF9saW5lX3NlcGFyYXRvciA9IEVNUFRZX1NUUklORzsKICAgIGlmICggY2hvbXAgJGlucHV0X2xpbmUgKSB7CiAgICAgICAgJGlucHV0X2xpbmVfc2VwYXJhdG9yID0gJElOUFVUX1JFQ09SRF9TRVBBUkFUT1I7CiAgICB9CgogICAgIyBUaGUgZmlyc3QgdGVzdCBoZXJlIHZlcnkgc2lnbmlmaWNhbnRseSBzcGVlZHMgdGhpbmdzIHVwLCBidXQgYmUgc3VyZSB0bwogICAgIyBrZWVwIHRoZSByZWdleCBhbmQgaGFzaCAlb3RoZXJfbGluZV9lbmRpbmdzIHRoZSBzYW1lLgogICAgaWYgKCAkb3RoZXJfbGluZV9lbmRpbmdzeyBzdWJzdHIoICRpbnB1dF9saW5lLCAtMSApIH0gKSB7CiAgICAgICAgaWYgKCAkaW5wdXRfbGluZSA9fiBzLyhbXHJcMDM1XDAzMl0pKyQvLyApIHsKICAgICAgICAgICAgJGlucHV0X2xpbmVfc2VwYXJhdG9yID0gJDEgLiAkaW5wdXRfbGluZV9zZXBhcmF0b3I7CgogICAgICAgICAgICAjIFRoaXMgY291bGQgbWFrZSB0aGUgdHJpbW1lZCBpbnB1dCBsaW5lIGluY29ycmVjdCwgc28gdGhlCiAgICAgICAgICAgICMgc2FmZSB0aGluZyB0byBkbyBpcyB0byBtYWtlIGl0IHVuZGVmIHRvIGZvcmNlIGl0IHRvIGJlCiAgICAgICAgICAgICMgcmVjb21wdXRlZCBsYXRlci4KICAgICAgICAgICAgJHRyaW1tZWRfaW5wdXRfbGluZSA9IHVuZGVmOwogICAgICAgIH0KICAgIH0KCiAgICAjIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3ZSBrZWVwIHRoZSBsaW5lIHRleHQgdGVybWluYXRlZCB3aXRoCiAgICAjIGEgbmV3bGluZSBjaGFyYWN0ZXIKICAgICRpbnB1dF9saW5lIC49ICJcbiI7CiAgICAkc2VsZi0+W19saW5lX29mX3RleHRfXSA9ICRpbnB1dF9saW5lOwoKICAgICMgY3JlYXRlIGEgZGF0YSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGlzIGxpbmUgd2hpY2ggd2lsbCBiZQogICAgIyByZXR1cm5lZCB0byB0aGUgY2FsbGVyLgoKICAgICMgX2xpbmVfdHlwZSBjb2RlcyBhcmU6CiAgICAjICAgU1lTVEVNICAgICAgICAgLSBzeXN0ZW0tc3BlY2lmaWMgY29kZSBiZWZvcmUgaGFzaC1iYW5nIGxpbmUKICAgICMgICBDT0RFICAgICAgICAgICAtIGxpbmUgb2YgcGVybCBjb2RlIChpbmNsdWRpbmcgY29tbWVudHMpCiAgICAjICAgUE9EX1NUQVJUICAgICAgLSBsaW5lIHN0YXJ0aW5nIHBvZCwgc3VjaCBhcyAnPWhlYWQnCiAgICAjICAgUE9EICAgICAgICAgICAgLSBwb2QgZG9jdW1lbnRhdGlvbiB0ZXh0CiAgICAjICAgUE9EX0VORCAgICAgICAgLSBsYXN0IGxpbmUgb2YgcG9kIHNlY3Rpb24sICc9Y3V0JwogICAgIyAgIEhFUkUgICAgICAgICAgIC0gdGV4dCBvZiBoZXJlLWRvY3VtZW50CiAgICAjICAgSEVSRV9FTkQgICAgICAgLSBsYXN0IGxpbmUgb2YgaGVyZS1kb2MgKHRhcmdldCB3b3JkKQogICAgIyAgIEZPUk1BVCAgICAgICAgIC0gZm9ybWF0IHNlY3Rpb24KICAgICMgICBGT1JNQVRfRU5EICAgICAtIGxhc3QgbGluZSBvZiBmb3JtYXQgc2VjdGlvbiwgJy4nCiAgICAjICAgU0tJUCAgICAgICAgICAgLSBjb2RlIHNraXBwaW5nIHNlY3Rpb24KICAgICMgICBTS0lQX0VORCAgICAgICAtIGxhc3QgbGluZSBvZiBjb2RlIHNraXBwaW5nIHNlY3Rpb24sICcjPj5WJwogICAgIyAgIERBVEFfU1RBUlQgICAgIC0gX19EQVRBX18gbGluZQogICAgIyAgIERBVEEgICAgICAgICAgIC0gdW5pZGVudGlmaWVkIHRleHQgZm9sbG93aW5nIF9fREFUQV9fCiAgICAjICAgRU5EX1NUQVJUICAgICAgLSBfX0VORF9fIGxpbmUKICAgICMgICBFTkQgICAgICAgICAgICAtIHVuaWRlbnRpZmllZCB0ZXh0IGZvbGxvd2luZyBfX0VORF9fCiAgICAjICAgRVJST1IgICAgICAgICAgLSB3ZSBhcmUgaW4gYmlnIHRyb3VibGUsIHByb2JhYmx5IG5vdCBhIHBlcmwgc2NyaXB0CgogICAgIyBPdGhlciB2YXJpYWJsZXM6CiAgICAjICAgX2N1cmx5X2JyYWNlX2RlcHRoICAgICAtIGRlcHRoIG9mIGN1cmx5IGJyYWNlcyBhdCBzdGFydCBvZiBsaW5lCiAgICAjICAgX3NxdWFyZV9icmFja2V0X2RlcHRoICAtIGRlcHRoIG9mIHNxdWFyZSBicmFja2V0cyBhdCBzdGFydCBvZiBsaW5lCiAgICAjICAgX3BhcmVuX2RlcHRoICAgICAgICAgICAtIGRlcHRoIG9mIHBhcmVucyBhdCBzdGFydCBvZiBsaW5lCiAgICAjICAgX3N0YXJ0aW5nX2luX3F1b3RlICAgICAtIHRoaXMgbGluZSBjb250aW51ZXMgYSBtdWx0aS1saW5lIHF1b3RlCiAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzbyBkb24ndCB0cmltIGxlYWRpbmcgYmxhbmtzISkKICAgICMgICBfZW5kaW5nX2luX3F1b3RlICAgICAgIC0gdGhpcyBsaW5lIGVuZHMgaW4gYSBtdWx0aS1saW5lIHF1b3RlCiAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzbyBkb24ndCB0cmltIHRyYWlsaW5nIGJsYW5rcyEpCiAgICBteSAkbGluZV9vZl90b2tlbnMgPSB7CiAgICAgICAgX2xpbmVfdHlwZSAgICAgICAgICAgICAgICAgPT4gJ0VPRicsCiAgICAgICAgX2xpbmVfdGV4dCAgICAgICAgICAgICAgICAgPT4gJGlucHV0X2xpbmUsCiAgICAgICAgX2xpbmVfbnVtYmVyICAgICAgICAgICAgICAgPT4gJGlucHV0X2xpbmVfbnVtYmVyLAogICAgICAgIF9ndWVzc2VkX2luZGVudGF0aW9uX2xldmVsID0+IDAsCiAgICAgICAgX2N1cmx5X2JyYWNlX2RlcHRoICAgICAgICAgPT4gJGJyYWNlX2RlcHRoLAogICAgICAgIF9zcXVhcmVfYnJhY2tldF9kZXB0aCAgICAgID0+ICRzcXVhcmVfYnJhY2tldF9kZXB0aCwKICAgICAgICBfcGFyZW5fZGVwdGggICAgICAgICAgICAgICA9PiAkcGFyZW5fZGVwdGgsCiMjIFNraXAgdGhlc2UgbmVlZGxlc3MgaW5pdGlhbGl6YXRpb25zIGZvciBlZmZpY2llbmN5OgojIyAgICAgIF9ydG9rZW5fdHlwZSAgICAgICAgICAgICAgID0+IHVuZGVmLAojIyAgICAgIF9ydG9rZW5zICAgICAgICAgICAgICAgICAgID0+IHVuZGVmLAojIyAgICAgIF9ybGV2ZWxzICAgICAgICAgICAgICAgICAgID0+IHVuZGVmLAojIyAgICAgIF9yYmxvY2tfdHlwZSAgICAgICAgICAgICAgID0+IHVuZGVmLAojIyAgICAgIF9ydHlwZV9zZXF1ZW5jZSAgICAgICAgICAgID0+IHVuZGVmLAojIyAgICAgIF9zdGFydGluZ19pbl9xdW90ZSAgICAgICAgID0+IDAsCiMjICAgICAgX2VuZGluZ19pbl9xdW90ZSAgICAgICAgICAgPT4gMCwKICAgIH07CgogICAgIyBtdXN0IHByaW50IGxpbmUgdW5jaGFuZ2VkIGlmIHdlIGFyZSBpbiBhIGhlcmUgZG9jdW1lbnQKICAgIGlmICggJHNlbGYtPltfaW5faGVyZV9kb2NfXSApIHsKCiAgICAgICAgJGxpbmVfb2ZfdG9rZW5zLT57X2xpbmVfdHlwZX0gPSAnSEVSRSc7CiAgICAgICAgbXkgJGhlcmVfZG9jX3RhcmdldCAgICAgID0gJHNlbGYtPltfaGVyZV9kb2NfdGFyZ2V0X107CiAgICAgICAgbXkgJGhlcmVfcXVvdGVfY2hhcmFjdGVyID0gJHNlbGYtPltfaGVyZV9xdW90ZV9jaGFyYWN0ZXJfXTsKICAgICAgICBteSAkY2FuZGlkYXRlX3RhcmdldCAgICAgPSAkaW5wdXRfbGluZTsKICAgICAgICBjaG9tcCAkY2FuZGlkYXRlX3RhcmdldDsKCiAgICAgICAgIyBIYW5kbGUgPDx+IHRhcmdldHMsIHdoaWNoIGFyZSBpbmRpY2F0ZWQgaGVyZSBieSBhIGxlYWRpbmcgc3BhY2Ugb24KICAgICAgICAjIHRoZSBoZXJlIHF1b3RlIGNoYXJhY3RlcgogICAgICAgIGlmICggJGhlcmVfcXVvdGVfY2hhcmFjdGVyID1+IC9eXHMvICkgewogICAgICAgICAgICAkY2FuZGlkYXRlX3RhcmdldCA9fiBzL15ccysvLzsKICAgICAgICB9CiAgICAgICAgaWYgKCAkY2FuZGlkYXRlX3RhcmdldCBlcSAkaGVyZV9kb2NfdGFyZ2V0ICkgewogICAgICAgICAgICAkc2VsZi0+W19uZWFybHlfbWF0Y2hlZF9oZXJlX3RhcmdldF9hdF9dID0gdW5kZWY7CiAgICAgICAgICAgICRsaW5lX29mX3Rva2Vucy0+e19saW5lX3R5cGV9ID0gJ0hFUkVfRU5EJzsKICAgICAgICAgICAgJHNlbGYtPmxvZ19udW1iZXJlZF9tc2coIkV4aXRpbmcgSEVSRSBkb2N1bWVudCAkaGVyZV9kb2NfdGFyZ2V0XG4iKTsKCiAgICAgICAgICAgIG15ICRyaGVyZV90YXJnZXRfbGlzdCA9ICRzZWxmLT5bX3JoZXJlX3RhcmdldF9saXN0X107CiAgICAgICAgICAgIGlmICggQHskcmhlcmVfdGFyZ2V0X2xpc3R9ICkgeyAgIyB0aGVyZSBjYW4gYmUgbXVsdGlwbGUgaGVyZSB0YXJnZXRzCiAgICAgICAgICAgICAgICAoICRoZXJlX2RvY190YXJnZXQsICRoZXJlX3F1b3RlX2NoYXJhY3RlciApID0KICAgICAgICAgICAgICAgICAgQHsgc2hpZnQgQHskcmhlcmVfdGFyZ2V0X2xpc3R9IH07CiAgICAgICAgICAgICAgICAkc2VsZi0+W19oZXJlX2RvY190YXJnZXRfXSAgICAgID0gJGhlcmVfZG9jX3RhcmdldDsKICAgICAgICAgICAgICAgICRzZWxmLT5bX2hlcmVfcXVvdGVfY2hhcmFjdGVyX10gPSAkaGVyZV9xdW90ZV9jaGFyYWN0ZXI7CiAgICAgICAgICAgICAgICAkc2VsZi0+bG9nX251bWJlcmVkX21zZygKICAgICAgICAgICAgICAgICAgICAiRW50ZXJpbmcgSEVSRSBkb2N1bWVudCAkaGVyZV9kb2NfdGFyZ2V0XG4iKTsKICAgICAgICAgICAgICAgICRzZWxmLT5bX25lYXJseV9tYXRjaGVkX2hlcmVfdGFyZ2V0X2F0X10gPSB1bmRlZjsKICAgICAgICAgICAgICAgICRzZWxmLT5bX3N0YXJ0ZWRfbG9va2luZ19mb3JfaGVyZV90YXJnZXRfYXRfXSA9CiAgICAgICAgICAgICAgICAgICRpbnB1dF9saW5lX251bWJlcjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRzZWxmLT5bX2luX2hlcmVfZG9jX10gICAgICAgICAgPSAwOwogICAgICAgICAgICAgICAgJHNlbGYtPltfaGVyZV9kb2NfdGFyZ2V0X10gICAgICA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgICAgICRzZWxmLT5bX2hlcmVfcXVvdGVfY2hhcmFjdGVyX10gPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgZm9yIGVycm9yIG9mIGV4dHJhIHdoaXRlc3BhY2UKICAgICAgICAjIG5vdGUgZm9yIFBFUkw2OiBsZWFkaW5nIHdoaXRlc3BhY2UgaXMgYWxsb3dlZAogICAgICAgIGVsc2UgewogICAgICAgICAgICAkY2FuZGlkYXRlX3RhcmdldCA9fiBzL14gXHMrIHwgXHMrICQvL2d4OyAgICAjIHRyaW0gYm90aCBlbmRzCiAgICAgICAgICAgIGlmICggJGNhbmRpZGF0ZV90YXJnZXQgZXEgJGhlcmVfZG9jX3RhcmdldCApIHsKICAgICAgICAgICAgICAgICRzZWxmLT5bX25lYXJseV9tYXRjaGVkX2hlcmVfdGFyZ2V0X2F0X10gPSAkaW5wdXRfbGluZV9udW1iZXI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRsaW5lX29mX3Rva2VuczsKICAgIH0KCiAgICAjIFByaW50IGxpbmUgdW5jaGFuZ2VkIGlmIHdlIGFyZSBpbiBhIGZvcm1hdCBzZWN0aW9uCiAgICBlbHNpZiAoICRzZWxmLT5bX2luX2Zvcm1hdF9dICkgewoKICAgICAgICBpZiAoICRpbnB1dF9saW5lID1+IC9eXC5bXHMjXSokLyApIHsKCiAgICAgICAgICAgICMgRGVjcmVtZW50IGZvcm1hdCBkZXB0aCBjb3VudCBhdCBhICcuJyBhZnRlciBhICdmb3JtYXQnCiAgICAgICAgICAgICRzZWxmLT5bX2luX2Zvcm1hdF9dLS07CgogICAgICAgICAgICAjIFRoaXMgaXMgdGhlIGVuZCB3aGVuIGNvdW50IHJlYWNoZXMgMAogICAgICAgICAgICBpZiAoICEkc2VsZi0+W19pbl9mb3JtYXRfXSApIHsKICAgICAgICAgICAgICAgICRzZWxmLT5sb2dfbnVtYmVyZWRfbXNnKCJFeGl0aW5nIGZvcm1hdCBzZWN0aW9uXG4iKTsKICAgICAgICAgICAgICAgICRsaW5lX29mX3Rva2Vucy0+e19saW5lX3R5cGV9ID0gJ0ZPUk1BVF9FTkQnOwoKICAgICAgICAgICAgICAgICMgTWFrZSB0aGUgdG9rZW5pemVyIG1hcmsgYW4gb3BlbmluZyBicmFjZSB3aGljaCBmb2xsb3dzCiAgICAgICAgICAgICAgICAjIGFzIGEgY29kZSBibG9jay4gRml4ZXMgaXNzdWUgYzIwMi90MDMyLgogICAgICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfdG9rZW4gPSAnOyc7CiAgICAgICAgICAgICAgICAkbGFzdF9ub25ibGFua190eXBlICA9ICc7JzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJGxpbmVfb2ZfdG9rZW5zLT57X2xpbmVfdHlwZX0gPSAnRk9STUFUJzsKICAgICAgICAgICAgaWYgKCAkaW5wdXRfbGluZSA9fiAvXlxzKmZvcm1hdFxzK1x3Ky8gKSB7CgogICAgICAgICAgICAgICAgIyBJbmNyZW1lbnQgZm9ybWF0IGRlcHRoIGNvdW50IGF0IGEgJ2Zvcm1hdCcgd2l0aGluIGEgJ2Zvcm1hdCcKICAgICAgICAgICAgICAgICMgVGhpcyBpcyBhIHNpbXBsZSB3YXkgdG8gaGFuZGxlIG5lc3RlZCBmb3JtYXRzIChpc3N1ZSBjMDE5KS4KICAgICAgICAgICAgICAgICRzZWxmLT5bX2luX2Zvcm1hdF9dKys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRsaW5lX29mX3Rva2VuczsKICAgIH0KCiAgICAjIG11c3QgcHJpbnQgbGluZSB1bmNoYW5nZWQgaWYgd2UgYXJlIGluIHBvZCBkb2N1bWVudGF0aW9uCiAgICBlbHNpZiAoICRzZWxmLT5bX2luX3BvZF9dICkgewoKICAgICAgICAkbGluZV9vZl90b2tlbnMtPntfbGluZV90eXBlfSA9ICdQT0QnOwogICAgICAgIGlmICggJGlucHV0X2xpbmUgPX4gL149Y3V0LyApIHsKICAgICAgICAgICAgJGxpbmVfb2ZfdG9rZW5zLT57X2xpbmVfdHlwZX0gPSAnUE9EX0VORCc7CiAgICAgICAgICAgICRzZWxmLT5sb2dfbnVtYmVyZWRfbXNnKCJFeGl0aW5nIFBPRCBzZWN0aW9uXG4iKTsKICAgICAgICAgICAgJHNlbGYtPltfaW5fcG9kX10gPSAwOwogICAgICAgIH0KICAgICAgICBpZiAoICRpbnB1dF9saW5lID1+IC9eXCNcIS4qcGVybFxiLyAmJiAhJHNlbGYtPltfaW5fZW5kX10gKSB7CiAgICAgICAgICAgICRzZWxmLT53YXJuaW5nKAogICAgICAgICAgICAgICAgIkhhc2gtYmFuZyBpbiBwb2QgY2FuIGNhdXNlIG9sZGVyIHZlcnNpb25zIG9mIHBlcmwgdG8gZmFpbCEgXG4iCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGxpbmVfb2ZfdG9rZW5zOwogICAgfQoKICAgICMgcHJpbnQgbGluZSB1bmNoYW5nZWQgaWYgaW4gc2tpcHBlZCBzZWN0aW9uCiAgICBlbHNpZiAoICRzZWxmLT5bX2luX2NvZGVfc2tpcHBpbmdfXSApIHsKCiAgICAgICAgJGxpbmVfb2ZfdG9rZW5zLT57X2xpbmVfdHlwZX0gPSAnU0tJUCc7CiAgICAgICAgaWYgKCAkaW5wdXRfbGluZSA9fiAvJGNvZGVfc2tpcHBpbmdfcGF0dGVybl9lbmQvICkgewogICAgICAgICAgICAkbGluZV9vZl90b2tlbnMtPntfbGluZV90eXBlfSA9ICdTS0lQX0VORCc7CiAgICAgICAgICAgICRzZWxmLT5sb2dfbnVtYmVyZWRfbXNnKCJFeGl0aW5nIGNvZGUtc2tpcHBpbmcgc2VjdGlvblxuIik7CiAgICAgICAgICAgICRzZWxmLT5bX2luX2NvZGVfc2tpcHBpbmdfXSA9IDA7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJGlucHV0X2xpbmUgPX4gLyRjb2RlX3NraXBwaW5nX3BhdHRlcm5fYmVnaW4vICkgewoKICAgICAgICAgICAgIyB3YXJuIG9mIGR1cGxpY2F0ZSBzdGFydGluZyBjb21tZW50IGxpbmVzLCBnaXQgIzExOAogICAgICAgICAgICBteSAkbG5vID0gJHNlbGYtPltfaW5fY29kZV9za2lwcGluZ19dOwogICAgICAgICAgICAkc2VsZi0+d2FybmluZygKICAgICAgICAgICAgICAgICJBbHJlYWR5IGluIGNvZGUtc2tpcHBpbmcgc2VjdGlvbiB3aGljaCBzdGFydGVkIGF0IGxpbmUgJGxub1xuIgogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIyBub3QgYSBjb2RlLXNraXBwaW5nIGNvbnRyb2wgbGluZQogICAgICAgIH0KICAgICAgICByZXR1cm4gJGxpbmVfb2ZfdG9rZW5zOwogICAgfQoKICAgICMgbXVzdCBwcmludCBsaW5lIHVuY2hhbmdlZCBpZiB3ZSBoYXZlIHNlZW4gYSBzZXZlcmUgZXJyb3IgKGkuZS4sIHdlCiAgICAjIGFyZSBzZWVpbmcgaWxsZWdhbCB0b2tlbnMgYW5kIGNhbm5vdCBjb250aW51ZS4gIFN5bnRheCBlcnJvcnMgZG8KICAgICMgbm90IHBhc3MgdGhpcyByb3V0ZSkuICBDYWxsaW5nIHJvdXRpbmUgY2FuIGRlY2lkZSB3aGF0IHRvIGRvLCBidXQKICAgICMgdGhlIGRlZmF1bHQgY2FuIGJlIHRvIGp1c3QgcGFzcyBhbGwgbGluZXMgYXMgaWYgdGhleSB3ZXJlIGFmdGVyIF9fRU5EX18KICAgIGVsc2lmICggJHNlbGYtPltfaW5fZXJyb3JfXSApIHsKICAgICAgICAkbGluZV9vZl90b2tlbnMtPntfbGluZV90eXBlfSA9ICdFUlJPUic7CiAgICAgICAgcmV0dXJuICRsaW5lX29mX3Rva2VuczsKICAgIH0KCiAgICAjIHByaW50IGxpbmUgdW5jaGFuZ2VkIGlmIHdlIGFyZSBfX0RBVEFfXyBzZWN0aW9uCiAgICBlbHNpZiAoICRzZWxmLT5bX2luX2RhdGFfXSApIHsKCiAgICAgICAgIyAuLi5idXQgbG9vayBmb3IgUE9ECiAgICAgICAgIyBOb3RlIHRoYXQgdGhlIF9pbl9kYXRhIGFuZCBfaW5fZW5kIGZsYWdzIHJlbWFpbiBzZXQKICAgICAgICAjIHNvIHRoYXQgd2UgcmV0dXJuIHRvIHRoYXQgc3RhdGUgYWZ0ZXIgc2VlaW5nIHRoZQogICAgICAgICMgZW5kIG9mIGEgcG9kIHNlY3Rpb24KICAgICAgICBpZiAoICRpbnB1dF9saW5lID1+IC9ePShcdyspXGIvICYmICQxIG5lICdjdXQnICkgewogICAgICAgICAgICAkbGluZV9vZl90b2tlbnMtPntfbGluZV90eXBlfSA9ICdQT0RfU1RBUlQnOwogICAgICAgICAgICAkc2VsZi0+bG9nX251bWJlcmVkX21zZygiRW50ZXJpbmcgUE9EIHNlY3Rpb25cbiIpOwogICAgICAgICAgICAkc2VsZi0+W19pbl9wb2RfXSA9IDE7CiAgICAgICAgICAgIHJldHVybiAkbGluZV9vZl90b2tlbnM7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkbGluZV9vZl90b2tlbnMtPntfbGluZV90eXBlfSA9ICdEQVRBJzsKICAgICAgICAgICAgcmV0dXJuICRsaW5lX29mX3Rva2VuczsKICAgICAgICB9CiAgICB9CgogICAgIyBwcmludCBsaW5lIHVuY2hhbmdlZCBpZiB3ZSBhcmUgaW4gX19FTkRfXyBzZWN0aW9uCiAgICBlbHNpZiAoICRzZWxmLT5bX2luX2VuZF9dICkgewoKICAgICAgICAjIC4uLmJ1dCBsb29rIGZvciBQT0QKICAgICAgICAjIE5vdGUgdGhhdCB0aGUgX2luX2RhdGEgYW5kIF9pbl9lbmQgZmxhZ3MgcmVtYWluIHNldAogICAgICAgICMgc28gdGhhdCB3ZSByZXR1cm4gdG8gdGhhdCBzdGF0ZSBhZnRlciBzZWVpbmcgdGhlCiAgICAgICAgIyBlbmQgb2YgYSBwb2Qgc2VjdGlvbgogICAgICAgIGlmICggJGlucHV0X2xpbmUgPX4gL149KFx3KylcYi8gJiYgJDEgbmUgJ2N1dCcgKSB7CiAgICAgICAgICAgICRsaW5lX29mX3Rva2Vucy0+e19saW5lX3R5cGV9ID0gJ1BPRF9TVEFSVCc7CiAgICAgICAgICAgICRzZWxmLT5sb2dfbnVtYmVyZWRfbXNnKCJFbnRlcmluZyBQT0Qgc2VjdGlvblxuIik7CiAgICAgICAgICAgICRzZWxmLT5bX2luX3BvZF9dID0gMTsKICAgICAgICAgICAgcmV0dXJuICRsaW5lX29mX3Rva2VuczsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRsaW5lX29mX3Rva2Vucy0+e19saW5lX3R5cGV9ID0gJ0VORCc7CiAgICAgICAgICAgIHJldHVybiAkbGluZV9vZl90b2tlbnM7CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgIyBub3QgYSBzcGVjaWFsIGNvbnRyb2wgbGluZQogICAgfQoKICAgICMgY2hlY2sgZm9yIGEgaGFzaC1iYW5nIGxpbmUgaWYgd2UgaGF2ZW4ndCBzZWVuIG9uZQogICAgaWYgKCAgICEkc2VsZi0+W19zYXdfaGFzaF9iYW5nX10KICAgICAgICAmJiBzdWJzdHIoICRpbnB1dF9saW5lLCAwLCAyICkgZXEgJyMhJwogICAgICAgICYmICRpbnB1dF9saW5lID1+IC9eXCNcIS4qcGVybFxiLyApCiAgICB7CiAgICAgICAgJHNlbGYtPltfc2F3X2hhc2hfYmFuZ19dID0gJGlucHV0X2xpbmVfbnVtYmVyOwoKICAgICAgICAjIGNoZWNrIGZvciAtdyBhbmQgLVAgZmxhZ3MKICAgICAgICBpZiAoICRpbnB1dF9saW5lID1+IC9eXCNcIS4qcGVybFxzLiotLipQLyApIHsKICAgICAgICAgICAgJHNlbGYtPltfc2F3X3BlcmxfZGFzaF9QX10gPSAxOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkaW5wdXRfbGluZSA9fiAvXlwjXCEuKnBlcmxccy4qLS4qdy8gKSB7CiAgICAgICAgICAgICRzZWxmLT5bX3Nhd19wZXJsX2Rhc2hfd19dID0gMTsKICAgICAgICB9CgogICAgICAgIGlmICgKICAgICAgICAgICAgJGlucHV0X2xpbmVfbnVtYmVyID4gMQoKICAgICAgICAgICAgIyBsZWF2ZSBhbnkgaGFzaCBiYW5nIGluIGEgQkVHSU4gYmxvY2sgYWxvbmUKICAgICAgICAgICAgIyBpLmUuIHNlZSAnZGVidWdnZXItZHVja190eXBlLnQnCiAgICAgICAgICAgICYmICEoCiAgICAgICAgICAgICAgICAgICAkbGFzdF9ub25ibGFua19ibG9ja190eXBlCiAgICAgICAgICAgICAgICAmJiAkbGFzdF9ub25ibGFua19ibG9ja190eXBlIGVxICdCRUdJTicKICAgICAgICAgICAgKQogICAgICAgICAgICAmJiAhJHJPcHRzX2xvb2tfZm9yX2hhc2hfYmFuZwoKICAgICAgICAgICAgIyBUcnkgdG8gYXZvaWQgZ2l2aW5nIGEgZmFsc2UgYWxhcm0gYXQgYSBzaW1wbGUgY29tbWVudC4KICAgICAgICAgICAgIyBUaGVzZSBsb29rIGxpa2UgdmFsaWQgaGFzaC1iYW5nIGxpbmVzOgoKICAgICAgICAgICAgIyEvdXNyL2Jpbi9wZXJsIC13CiAgICAgICAgICAgICMhICAgL3Vzci9iaW4vcGVybCAtdwogICAgICAgICAgICAjIWM6XHBlcmxcYmluXHBlcmwuZXhlCgogICAgICAgICAgICAjIFRoZXNlIGFyZSBjb21tZW50czoKICAgICAgICAgICAgIyEgSSBsb3ZlIHBlcmwKICAgICAgICAgICAgIyEgIHN1bm9zIGRvZXMgbm90IHlldCBwcm92aWRlIGEgL3Vzci9iaW4vcGVybAoKICAgICAgICAgICAgIyBDb21tZW50cyB0eXBpY2FsbHkgaGF2ZSBtdWx0aXBsZSBzcGFjZXMsIHdoaWNoIHN1Z2dlc3RzCiAgICAgICAgICAgICMgdGhlIGZpbHRlcgogICAgICAgICAgICAmJiAkaW5wdXRfbGluZSA9fiAvXlwjXCEoXHMrKT8oXFMrKT9wZXJsLwogICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgdGhpcyBpcyBoZWxwZnVsIGZvciBWTVMgc3lzdGVtczsgd2UgbWF5IGhhdmUgYWNjaWRlbnRhbGx5CiAgICAgICAgICAgICMgdG9rZW5pemVkIHNvbWUgRENMIGNvbW1hbmRzCiAgICAgICAgICAgIGlmICggJHNlbGYtPltfc3RhcnRlZF90b2tlbml6aW5nX10gKSB7CiAgICAgICAgICAgICAgICAkc2VsZi0+d2FybmluZygKIlRoZXJlIHNlZW1zIHRvIGJlIGEgaGFzaC1iYW5nIGFmdGVyIGxpbmUgMTsgZG8geW91IG5lZWQgdG8gcnVuIHdpdGggLXggP1xuIgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRzZWxmLT5jb21wbGFpbigiVXNlbGVzcyBoYXNoLWJhbmcgYWZ0ZXIgbGluZSAxXG4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBSZXBvcnQgdGhlIGxlYWRpbmcgaGFzaC1iYW5nIGFzIGEgc3lzdGVtIGxpbmUKICAgICAgICAjIFRoaXMgd2lsbCBwcmV2ZW50IC1kYWMgZnJvbSBkZWxldGluZyBpdAogICAgICAgIGVsc2UgewogICAgICAgICAgICAkbGluZV9vZl90b2tlbnMtPntfbGluZV90eXBlfSA9ICdTWVNURU0nOwogICAgICAgICAgICByZXR1cm4gJGxpbmVfb2ZfdG9rZW5zOwogICAgICAgIH0KICAgIH0KCiAgICAjIHdhaXQgZm9yIGEgaGFzaC1iYW5nIGJlZm9yZSBwYXJzaW5nIGlmIHRoZSB1c2VyIGludm9rZWQgdXMgd2l0aCAteAogICAgaWYgKCAkck9wdHNfbG9va19mb3JfaGFzaF9iYW5nCiAgICAgICAgJiYgISRzZWxmLT5bX3Nhd19oYXNoX2JhbmdfXSApCiAgICB7CiAgICAgICAgJGxpbmVfb2ZfdG9rZW5zLT57X2xpbmVfdHlwZX0gPSAnU1lTVEVNJzsKICAgICAgICByZXR1cm4gJGxpbmVfb2ZfdG9rZW5zOwogICAgfQoKICAgICMgYSBmaXJzdCBsaW5lIG9mIHRoZSBmb3JtICc6ICMnIHdpbGwgYmUgbWFya2VkIGFzIFNZU1RFTQogICAgIyBzaW5jZSBsaW5lcyBvZiB0aGlzIGZvcm0gbWF5IGJlIHVzZWQgYnkgdGNzaAogICAgaWYgKCAkaW5wdXRfbGluZV9udW1iZXIgPT0gMSAmJiAkaW5wdXRfbGluZSA9fiAvXlxzKlw6XHMqXCMvICkgewogICAgICAgICRsaW5lX29mX3Rva2Vucy0+e19saW5lX3R5cGV9ID0gJ1NZU1RFTSc7CiAgICAgICAgcmV0dXJuICRsaW5lX29mX3Rva2VuczsKICAgIH0KCiAgICAjIG5vdyB3ZSBrbm93IHRoYXQgaXQgaXMgb2sgdG8gdG9rZW5pemUgdGhlIGxpbmUuLi4KICAgICMgdGhlIGxpbmUgdG9rZW5pemVyIHdpbGwgbW9kaWZ5IGFueSBvZiB0aGVzZSBwcml2YXRlIHZhcmlhYmxlczoKICAgICMgICAgICAgIF9yaGVyZV90YXJnZXRfbGlzdF8KICAgICMgICAgICAgIF9pbl9kYXRhXwogICAgIyAgICAgICAgX2luX2VuZF8KICAgICMgICAgICAgIF9pbl9mb3JtYXRfCiAgICAjICAgICAgICBfaW5fZXJyb3JfCiAgICAjICAgICAgICBfaW5fY29kZV9za2lwcGluZ18KICAgICMgICAgICAgIF9pbl9mb3JtYXRfc2tpcHBpbmdfCiAgICAjICAgICAgICBfaW5fcG9kXwogICAgIyAgICAgICAgX2luX3F1b3RlXwoKICAgICRzZWxmLT50b2tlbml6ZV90aGlzX2xpbmUoICRsaW5lX29mX3Rva2VucywgJHRyaW1tZWRfaW5wdXRfbGluZSApOwoKICAgICMgTm93IGZpbmlzaCBkZWZpbmluZyB0aGUgcmV0dXJuIHN0cnVjdHVyZSBhbmQgcmV0dXJuIGl0CiAgICAkbGluZV9vZl90b2tlbnMtPntfZW5kaW5nX2luX3F1b3RlfSA9ICRzZWxmLT5bX2luX3F1b3RlX107CgogICAgIyBoYW5kbGUgc2V2ZXJlIGVycm9yIChiaW5hcnkgZGF0YSBpbiBzY3JpcHQpCiAgICBpZiAoICRzZWxmLT5bX2luX2Vycm9yX10gKSB7CiAgICAgICAgJHNlbGYtPltfaW5fcXVvdGVfXSA9IDA7ICAgICMgdG8gYXZvaWQgYW55IG1vcmUgbWVzc2FnZXMKICAgICAgICAkc2VsZi0+d2FybmluZygiR2l2aW5nIHVwIGFmdGVyIGVycm9yXG4iKTsKICAgICAgICAkbGluZV9vZl90b2tlbnMtPntfbGluZV90eXBlfSA9ICdFUlJPUic7CiAgICAgICAgcmVzZXRfaW5kZW50YXRpb25fbGV2ZWwoMCk7ICAgICMgYXZvaWQgZXJyb3IgbWVzc2FnZXMKICAgICAgICByZXR1cm4gJGxpbmVfb2ZfdG9rZW5zOwogICAgfQoKICAgICMgaGFuZGxlIHN0YXJ0IG9mIHBvZCBkb2N1bWVudGF0aW9uCiAgICBpZiAoICRzZWxmLT5bX2luX3BvZF9dICkgewoKICAgICAgICAjIFRoaXMgZ2V0cyB0cmlja3kuLmFib3ZlIGEgX19EQVRBX18gb3IgX19FTkRfXyBzZWN0aW9uLCBwZXJsCiAgICAgICAgIyBhY2NlcHRzICc9Y3V0JyBhcyB0aGUgc3RhcnQgb2YgcG9kIHNlY3Rpb24uIEJ1dCBhZnRlcndhcmRzLAogICAgICAgICMgb25seSBwb2QgdXRpbGl0aWVzIHNlZSBpdCBhbmQgdGhleSBtYXkgaWdub3JlIGFuID1jdXQgd2l0aG91dAogICAgICAgICMgbGVhZGluZyA9aGVhZC4gIEluIGFueSBjYXNlLCB0aGlzIGlzbid0IGdvb2QuCiAgICAgICAgaWYgKCAkaW5wdXRfbGluZSA9fiAvXj1jdXRcYi8gKSB7CiAgICAgICAgICAgIGlmICggJHNlbGYtPltfc2F3X2RhdGFfXSB8fCAkc2VsZi0+W19zYXdfZW5kX10gKSB7CiAgICAgICAgICAgICAgICAkc2VsZi0+Y29tcGxhaW4oIj1jdXQgd2hpbGUgbm90IGluIHBvZCBpZ25vcmVkXG4iKTsKICAgICAgICAgICAgICAgICRzZWxmLT5bX2luX3BvZF9dID0gMDsKICAgICAgICAgICAgICAgICRsaW5lX29mX3Rva2Vucy0+e19saW5lX3R5cGV9ID0gJ1BPRF9FTkQnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJGxpbmVfb2ZfdG9rZW5zLT57X2xpbmVfdHlwZX0gPSAnUE9EX1NUQVJUJzsKICAgICAgICAgICAgICAgIGlmICggIURFVkVMX01PREUgKSB7CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPndhcm5pbmcoCiI9Y3V0IHN0YXJ0cyBhIHBvZCBzZWN0aW9uIC4uIHRoaXMgY2FuIGZvb2wgcG9kIHV0aWxpdGllcy5cbiIKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHNlbGYtPmxvZ19udW1iZXJlZF9tc2coIkVudGVyaW5nIFBPRCBzZWN0aW9uXG4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRsaW5lX29mX3Rva2Vucy0+e19saW5lX3R5cGV9ID0gJ1BPRF9TVEFSVCc7CiAgICAgICAgICAgICRzZWxmLT5sb2dfbnVtYmVyZWRfbXNnKCJFbnRlcmluZyBQT0Qgc2VjdGlvblxuIik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGxpbmVfb2ZfdG9rZW5zOwogICAgfQoKICAgICMgaGFuZGxlIHN0YXJ0IG9mIHNraXBwZWQgc2VjdGlvbgogICAgaWYgKCAkc2VsZi0+W19pbl9jb2RlX3NraXBwaW5nX10gKSB7CgogICAgICAgICRsaW5lX29mX3Rva2Vucy0+e19saW5lX3R5cGV9ID0gJ1NLSVAnOwogICAgICAgICRzZWxmLT5sb2dfbnVtYmVyZWRfbXNnKCJFbnRlcmluZyBjb2RlLXNraXBwaW5nIHNlY3Rpb25cbiIpOwogICAgICAgIHJldHVybiAkbGluZV9vZl90b2tlbnM7CiAgICB9CgogICAgIyBzZWUgaWYgdGhpcyBsaW5lIGNvbnRhaW5zIGhlcmUgZG9jIHRhcmdldHMKICAgIG15ICRyaGVyZV90YXJnZXRfbGlzdCA9ICRzZWxmLT5bX3JoZXJlX3RhcmdldF9saXN0X107CiAgICBpZiAoIEB7JHJoZXJlX3RhcmdldF9saXN0fSApIHsKCiAgICAgICAgbXkgKCAkaGVyZV9kb2NfdGFyZ2V0LCAkaGVyZV9xdW90ZV9jaGFyYWN0ZXIgKSA9CiAgICAgICAgICBAeyBzaGlmdCBAeyRyaGVyZV90YXJnZXRfbGlzdH0gfTsKICAgICAgICAkc2VsZi0+W19pbl9oZXJlX2RvY19dICAgICAgICAgID0gMTsKICAgICAgICAkc2VsZi0+W19oZXJlX2RvY190YXJnZXRfXSAgICAgID0gJGhlcmVfZG9jX3RhcmdldDsKICAgICAgICAkc2VsZi0+W19oZXJlX3F1b3RlX2NoYXJhY3Rlcl9dID0gJGhlcmVfcXVvdGVfY2hhcmFjdGVyOwogICAgICAgICRzZWxmLT5sb2dfbnVtYmVyZWRfbXNnKCJFbnRlcmluZyBIRVJFIGRvY3VtZW50ICRoZXJlX2RvY190YXJnZXRcbiIpOwogICAgICAgICRzZWxmLT5bX3N0YXJ0ZWRfbG9va2luZ19mb3JfaGVyZV90YXJnZXRfYXRfXSA9ICRpbnB1dF9saW5lX251bWJlcjsKICAgIH0KCiAgICAjIE5PVEU6IF9fRU5EX18gYW5kIF9fREFUQV9fIHN0YXRlbWVudHMgYXJlIHdyaXR0ZW4gdW5mb3JtYXR0ZWQKICAgICMgYmVjYXVzZSB0aGV5IGNhbiB0aGVvcmV0aWNhbGx5IGNvbnRhaW4gYWRkaXRpb25hbCBjaGFyYWN0ZXJzCiAgICAjIHdoaWNoIGFyZSBub3QgdG9rZW5pemVkIChhbmQgY2Fubm90IGJlIHJlYWQgd2l0aCA8REFUQT4gZWl0aGVyISkuCiAgICBpZiAoICRzZWxmLT5bX2luX2RhdGFfXSApIHsKICAgICAgICAkbGluZV9vZl90b2tlbnMtPntfbGluZV90eXBlfSA9ICdEQVRBX1NUQVJUJzsKICAgICAgICAkc2VsZi0+bG9nX251bWJlcmVkX21zZygiU3RhcnRpbmcgX19EQVRBX18gc2VjdGlvblxuIik7CiAgICAgICAgJHNlbGYtPltfc2F3X2RhdGFfXSA9IDE7CgogICAgICAgICMga2VlcCBwYXJzaW5nIGFmdGVyIF9fREFUQV9fIGlmIHVzZSBTZWxmTG9hZGVyIHdhcyBzZWVuCiAgICAgICAgaWYgKCAkc2VsZi0+W19zYXdfc2VsZmxvYWRlcl9dICkgewogICAgICAgICAgICAkc2VsZi0+W19pbl9kYXRhX10gPSAwOwogICAgICAgICAgICAkc2VsZi0+bG9nX251bWJlcmVkX21zZygKICAgICAgICAgICAgICAgICJTZWxmTG9hZGVyIHNlZW4sIGNvbnRpbnVpbmc7IC1ubHNsIGRlYWN0aXZhdGVzXG4iKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbGluZV9vZl90b2tlbnM7CiAgICB9CgogICAgZWxzaWYgKCAkc2VsZi0+W19pbl9lbmRfXSApIHsKICAgICAgICAkbGluZV9vZl90b2tlbnMtPntfbGluZV90eXBlfSA9ICdFTkRfU1RBUlQnOwogICAgICAgICRzZWxmLT5sb2dfbnVtYmVyZWRfbXNnKCJTdGFydGluZyBfX0VORF9fIHNlY3Rpb25cbiIpOwogICAgICAgICRzZWxmLT5bX3Nhd19lbmRfXSA9IDE7CgogICAgICAgICMga2VlcCBwYXJzaW5nIGFmdGVyIF9fRU5EX18gaWYgdXNlIEF1dG9Mb2FkZXIgd2FzIHNlZW4KICAgICAgICBpZiAoICRzZWxmLT5bX3Nhd19hdXRvbG9hZGVyX10gKSB7CiAgICAgICAgICAgICRzZWxmLT5bX2luX2VuZF9dID0gMDsKICAgICAgICAgICAgJHNlbGYtPmxvZ19udW1iZXJlZF9tc2coCiAgICAgICAgICAgICAgICAiQXV0b0xvYWRlciBzZWVuLCBjb250aW51aW5nOyAtbmxhbCBkZWFjdGl2YXRlc1xuIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkbGluZV9vZl90b2tlbnM7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAjIG5vdCBpbiBfX0VORF9fIG9yIF9fREFUQV9fCiAgICB9CgogICAgIyBub3csIGZpbmFsbHksIHdlIGtub3cgdGhhdCB0aGlzIGxpbmUgaXMgdHlwZSAnQ09ERScKICAgICRsaW5lX29mX3Rva2Vucy0+e19saW5lX3R5cGV9ID0gJ0NPREUnOwoKICAgICMgcmVtZW1iZXIgaWYgd2UgaGF2ZSBzZWVuIGFueSByZWFsIGNvZGUKICAgIGlmICggICEkc2VsZi0+W19zdGFydGVkX3Rva2VuaXppbmdfXQogICAgICAgICYmICRpbnB1dF9saW5lICF+IC9eXHMqJC8KICAgICAgICAmJiAkaW5wdXRfbGluZSAhfiAvXlxzKiMvICkKICAgIHsKICAgICAgICAkc2VsZi0+W19zdGFydGVkX3Rva2VuaXppbmdfXSA9IDE7CiAgICB9CgogICAgaWYgKCAkc2VsZi0+W19kZWJ1Z2dlcl9vYmplY3RfXSApIHsKICAgICAgICAkc2VsZi0+W19kZWJ1Z2dlcl9vYmplY3RfXS0+d3JpdGVfZGVidWdfZW50cnkoJGxpbmVfb2ZfdG9rZW5zKTsKICAgIH0KCiAgICAjIE5vdGU6IGlmIGtleXdvcmQgJ2Zvcm1hdCcgb2NjdXJzIGluIHRoaXMgbGluZSBjb2RlLCBpdCBpcyBzdGlsbCBDT0RFCiAgICAjIChrZXl3b3JkICdmb3JtYXQnIG5lZWQgbm90IHN0YXJ0IGEgbGluZSkKICAgIGlmICggJHNlbGYtPltfaW5fZm9ybWF0X10gKSB7CiAgICAgICAgJHNlbGYtPmxvZ19udW1iZXJlZF9tc2coIkVudGVyaW5nIGZvcm1hdCBzZWN0aW9uXG4iKTsKICAgIH0KCiAgICBpZiAoICRzZWxmLT5bX2luX3F1b3RlX10KICAgICAgICBhbmQgKCAkc2VsZi0+W19saW5lX3N0YXJ0X3F1b3RlX10gPCAwICkgKQogICAgewogICAgICAgIGlmICggKCBteSAkcXVvdGVfdGFyZ2V0ID0gJHNlbGYtPltfcXVvdGVfdGFyZ2V0X10gKSAhfiAvXlxzKiQvICkgewogICAgICAgICAgICAkc2VsZi0+W19saW5lX3N0YXJ0X3F1b3RlX10gPSAkaW5wdXRfbGluZV9udW1iZXI7CiAgICAgICAgICAgICRzZWxmLT5sb2dfbnVtYmVyZWRfbXNnKAogICAgICAgICAgICAgICAgIlN0YXJ0IG11bHRpLWxpbmUgcXVvdGUgb3IgcGF0dGVybiBlbmRpbmcgaW4gJHF1b3RlX3RhcmdldFxuIik7CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAoICRzZWxmLT5bX2xpbmVfc3RhcnRfcXVvdGVfXSA+PSAwICkKICAgICAgICAmJiAhJHNlbGYtPltfaW5fcXVvdGVfXSApCiAgICB7CiAgICAgICAgJHNlbGYtPltfbGluZV9zdGFydF9xdW90ZV9dID0gLTE7CiAgICAgICAgJHNlbGYtPmxvZ19udW1iZXJlZF9tc2coIkVuZCBvZiBtdWx0aS1saW5lIHF1b3RlIG9yIHBhdHRlcm5cbiIpOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgIyBub3QgYXQgdGhlIGVkZ2Ugb2YgYSBxdW90ZQogICAgfQoKICAgICMgd2UgYXJlIHJldHVybmluZyBhIGxpbmUgb2YgQ09ERQogICAgcmV0dXJuICRsaW5lX29mX3Rva2VuczsKfSAjIyBlbmQgc3ViIGdldF9saW5lCgpzdWIgZmluZF9zdGFydGluZ19pbmRlbnRhdGlvbl9sZXZlbCB7CgogICAgIyBXZSBuZWVkIHRvIGZpbmQgdGhlIGluZGVudGF0aW9uIGxldmVsIG9mIHRoZSBmaXJzdCBsaW5lIG9mIHRoZQogICAgIyBzY3JpcHQgYmVpbmcgZm9ybWF0dGVkLiAgT2Z0ZW4gaXQgd2lsbCBiZSB6ZXJvIGZvciBhbiBlbnRpcmUgZmlsZSwKICAgICMgYnV0IGlmIHdlIGFyZSBmb3JtYXR0aW5nIGEgbG9jYWwgYmxvY2sgb2YgY29kZSAod2l0aGluIGFuIGVkaXRvciBmb3IKICAgICMgZXhhbXBsZSkgaXQgbWF5IG5vdCBiZSB6ZXJvLiAgVGhlIHVzZXIgbWF5IHNwZWNpZnkgdGhpcyB3aXRoIHRoZQogICAgIyAtc2lsPW4gcGFyYW1ldGVyIGJ1dCBub3JtYWxseSBkb2Vzbid0IHNvIHdlIGhhdmUgdG8gZ3Vlc3MuCiAgICAjCiAgICBteSAoJHNlbGYpID0gQF87CiAgICBteSAkc3RhcnRpbmdfbGV2ZWwgPSAwOwoKICAgICMgdXNlIHZhbHVlIGlmIGdpdmVuIGFzIHBhcmFtZXRlcgogICAgaWYgKCAkc2VsZi0+W19rbm93X3N0YXJ0aW5nX2xldmVsX10gKSB7CiAgICAgICAgJHN0YXJ0aW5nX2xldmVsID0gJHNlbGYtPltfc3RhcnRpbmdfbGV2ZWxfXTsKICAgIH0KCiAgICAjIGlmIHdlIGtub3cgdGhlcmUgaXMgYSBoYXNoX2JhbmcgbGluZSwgdGhlIGxldmVsIG11c3QgYmUgemVybwogICAgZWxzaWYgKCRyT3B0c19sb29rX2Zvcl9oYXNoX2JhbmcpIHsKICAgICAgICAkc2VsZi0+W19rbm93X3N0YXJ0aW5nX2xldmVsX10gPSAxOwogICAgfQoKICAgICMgb3RoZXJ3aXNlIGZpZ3VyZSBpdCBvdXQgZnJvbSB0aGUgaW5wdXQgZmlsZQogICAgZWxzZSB7CiAgICAgICAgbXkgJGxpbmU7CiAgICAgICAgbXkgJGkgPSAwOwoKICAgICAgICAjIGtlZXAgbG9va2luZyBhdCBsaW5lcyB1bnRpbCB3ZSBmaW5kIGEgaGFzaCBiYW5nIG9yIHBpZWNlIG9mIGNvZGUKICAgICAgICAjICggb3IsIGZvciBub3csIGFuID1wb2QgbGluZSkKICAgICAgICBteSAkbXNnID0gRU1QVFlfU1RSSU5HOwogICAgICAgIG15ICRpbl9jb2RlX3NraXBwaW5nOwogICAgICAgIG15ICRsaW5lX2Zvcl9ndWVzczsKICAgICAgICB3aGlsZSAoIGRlZmluZWQoICRsaW5lID0gJHNlbGYtPnBlZWtfYWhlYWQoICRpKysgKSApICkgewoKICAgICAgICAgICAgIyBpZiBmaXJzdCBsaW5lIGlzICMhIHRoZW4gYXNzdW1lIHN0YXJ0aW5nIGxldmVsIGlzIHplcm8KICAgICAgICAgICAgaWYgKCAkaSA9PSAxICYmICRsaW5lID1+IC9eXCNcIS8gKSB7CiAgICAgICAgICAgICAgICAkc3RhcnRpbmdfbGV2ZWwgPSAwOwogICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpZ25vcmUgbGluZXMgZmVuY2VkIG9mZiB3aXRoIGNvZGUtc2tpcHBpbmcgY29tbWVudHMKICAgICAgICAgICAgaWYgKCAkbGluZSA9fiAvXlxzKiMvICkgewoKICAgICAgICAgICAgICAgICMgdXNlIGZpcnN0IGNvbW1lbnQgZm9yIGluZGVudGF0aW9uIGd1ZXNzIGluIGNhc2Ugb2Ygbm8gY29kZQogICAgICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkbGluZV9mb3JfZ3Vlc3MpICkgeyAkbGluZV9mb3JfZ3Vlc3MgPSAkbGluZSB9CgogICAgICAgICAgICAgICAgaWYgKCAhJGluX2NvZGVfc2tpcHBpbmcgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAgICRyT3B0c19jb2RlX3NraXBwaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRsaW5lID1+IC8kY29kZV9za2lwcGluZ19wYXR0ZXJuX2JlZ2luLyApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkaW5fY29kZV9za2lwcGluZyA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkbGluZSA9fiAvJGNvZGVfc2tpcHBpbmdfcGF0dGVybl9lbmQvICkgewogICAgICAgICAgICAgICAgICAgICAgICAkaW5fY29kZV9za2lwcGluZyA9IDA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQgd2UgY291bGQgYWxzbyBpZ25vcmUgZm9ybWF0LXNraXBwaW5nIGxpbmVzIGhlcmUKICAgICAgICAgICAgICAgICMgYnV0IGl0IGlzbid0IGNsZWFyIGlmIHRoYXQgd291bGQgYmUgYmVzdC4KICAgICAgICAgICAgICAgICMgU2VlIGMzMjYgZm9yIGV4YW1wbGUgY29kZS4KCiAgICAgICAgICAgICAgICBuZXh0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIG5leHQgaWYgKCRpbl9jb2RlX3NraXBwaW5nKTsKCiAgICAgICAgICAgIG5leHQgaWYgKCAkbGluZSA9fiAvXlxzKiQvICk7ICAgICMgc2tpcCBwYXN0IGJsYW5rIGxpbmVzCgogICAgICAgICAgICAjIHVzZSBmaXJzdCBsaW5lIG9mIGNvZGUgZm9yIGluZGVudGF0aW9uIGd1ZXNzCiAgICAgICAgICAgICRsaW5lX2Zvcl9ndWVzcyA9ICRsaW5lOwogICAgICAgICAgICBsYXN0OwogICAgICAgIH0gIyMgZW5kIHdoaWxlICggZGVmaW5lZCggJGxpbmUgPSAuLi4pKQoKICAgICAgICBpZiAoIGRlZmluZWQoJGxpbmVfZm9yX2d1ZXNzKSApIHsKICAgICAgICAgICAgJHN0YXJ0aW5nX2xldmVsID0KICAgICAgICAgICAgICAkc2VsZi0+Z3Vlc3Nfb2xkX2luZGVudGF0aW9uX2xldmVsKCRsaW5lX2Zvcl9ndWVzcyk7CiAgICAgICAgfQogICAgICAgICRtc2cgPSAiTGluZSAkaSBpbXBsaWVzIHN0YXJ0aW5nLWluZGVudGF0aW9uLWxldmVsID0gJHN0YXJ0aW5nX2xldmVsXG4iOwogICAgICAgICRzZWxmLT53cml0ZV9sb2dmaWxlX2VudHJ5KCIkbXNnIik7CiAgICB9CiAgICAkc2VsZi0+W19zdGFydGluZ19sZXZlbF9dID0gJHN0YXJ0aW5nX2xldmVsOwogICAgcmVzZXRfaW5kZW50YXRpb25fbGV2ZWwoJHN0YXJ0aW5nX2xldmVsKTsKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGZpbmRfc3RhcnRpbmdfaW5kZW50YXRpb25fbGV2ZWwKCnN1YiBndWVzc19vbGRfaW5kZW50YXRpb25fbGV2ZWwgewogICAgbXkgKCAkc2VsZiwgJGxpbmUgKSA9IEBfOwoKICAgICMgR3Vlc3MgdGhlIGluZGVudGF0aW9uIGxldmVsIG9mIGFuIGlucHV0IGxpbmUuCiAgICAjCiAgICAjIEZvciB0aGUgZmlyc3QgbGluZSBvZiBjb2RlIHRoaXMgcmVzdWx0IHdpbGwgZGVmaW5lIHRoZSBzdGFydGluZwogICAgIyBpbmRlbnRhdGlvbiBsZXZlbC4gIEl0IHdpbGwgbWFpbmx5IGJlIG5vbi16ZXJvIHdoZW4gcGVybHRpZHkgaXMgYXBwbGllZAogICAgIyB3aXRoaW4gYW4gZWRpdG9yIHRvIGEgbG9jYWwgYmxvY2sgb2YgY29kZS4KICAgICMKICAgICMgVGhpcyBpcyBhbiBpbXBvc3NpYmxlIHRhc2sgaW4gZ2VuZXJhbCBiZWNhdXNlIHdlIGNhbid0IGtub3cgd2hhdCB0YWJzCiAgICAjIG1lYW50IGZvciB0aGUgb2xkIHNjcmlwdCBhbmQgaG93IG1hbnkgc3BhY2VzIHdlcmUgdXNlZCBmb3Igb25lCiAgICAjIGluZGVudGF0aW9uIGxldmVsIGluIHRoZSBnaXZlbiBpbnB1dCBzY3JpcHQuICBGb3IgZXhhbXBsZSBpdCBtYXkgaGF2ZQogICAgIyBiZWVuIHByZXZpb3VzbHkgZm9ybWF0dGVkIHdpdGggLWk9NyAtZXQ9My4gIEJ1dCB3ZSBjYW4gYXQgbGVhc3QgdHJ5IHRvCiAgICAjIG1ha2Ugc3VyZSB0aGF0IHBlcmx0aWR5IGd1ZXNzZXMgY29ycmVjdGx5IGlmIGl0IGlzIGFwcGxpZWQgcmVwZWF0ZWRseSB0bwogICAgIyBhIGJsb2NrIG9mIGNvZGUgd2l0aGluIGFuIGVkaXRvciwgc28gdGhhdCB0aGUgYmxvY2sgc3RheXMgYXQgdGhlIHNhbWUKICAgICMgbGV2ZWwgd2hlbiBwZXJsdGlkeSBpcyBhcHBsaWVkIHJlcGVhdGVkbHkuCiAgICAjCiAgICAjIFVTRVMgR0xPQkFMIFZBUklBQkxFUzogKG5vbmUpCiAgICBteSAkbGV2ZWwgPSAwOwoKICAgICMgZmluZCBsZWFkaW5nIHRhYnMsIHNwYWNlcywgYW5kIGFueSBzdGF0ZW1lbnQgbGFiZWwKICAgIG15ICRzcGFjZXMgPSAwOwogICAgaWYgKCAkbGluZSA9fiAvXihcdCspPyhccyspPyhcdys6W146XSk/LyApIHsKCiAgICAgICAgIyBJZiB0aGVyZSBhcmUgbGVhZGluZyB0YWJzLCB3ZSB1c2UgdGhlIHRhYiBzY2hlbWUgZm9yIHRoaXMgcnVuLCBpZgogICAgICAgICMgYW55LCBzbyB0aGF0IHRoZSBjb2RlIHdpbGwgcmVtYWluIHN0YWJsZSB3aGVuIGVkaXRpbmcuCiAgICAgICAgaWYgKCQxKSB7ICRzcGFjZXMgKz0gbGVuZ3RoKCQxKSAqICR0YWJzaXplIH0KCiAgICAgICAgaWYgKCQyKSB7ICRzcGFjZXMgKz0gbGVuZ3RoKCQyKSB9CgogICAgICAgICMgY29ycmVjdCBmb3Igb3V0ZGVudGVkIGxhYmVscwogICAgICAgIGlmICggICAkMwogICAgICAgICAgICAmJiAkck9wdHNfb3V0ZGVudF9sYWJlbHMKICAgICAgICAgICAgJiYgJHJPcHRzX2NvbnRpbnVhdGlvbl9pbmRlbnRhdGlvbiA+IDAgKQogICAgICAgIHsKICAgICAgICAgICAgJHNwYWNlcyArPSAkck9wdHNfY29udGludWF0aW9uX2luZGVudGF0aW9uOwogICAgICAgIH0KICAgIH0KCiAgICAkbGV2ZWwgPSBpbnQoICRzcGFjZXMgLyAkck9wdHNfaW5kZW50X2NvbHVtbnMgKTsKICAgIHJldHVybiAoJGxldmVsKTsKfSAjIyBlbmQgc3ViIGd1ZXNzX29sZF9pbmRlbnRhdGlvbl9sZXZlbAoKc3ViIGR1bXBfZnVuY3Rpb25zIHsKCiAgICAjIFRoaXMgaXMgYW4gdW51c2VkIGRlYnVnIHJvdXRpbmUsIHNhdmUgZm9yIGZ1dHVyZSB1c2UKCiAgICBteSAkZmggPSAqU1RET1VUOwogICAgZm9yZWFjaCBteSAkcGtnICgga2V5cyAleyRyaXNfdXNlcl9mdW5jdGlvbn0gKSB7CiAgICAgICAgJGZoLT5wcmludCgiXG5ub24tY29uc3RhbnQgc3VicyBpbiBwYWNrYWdlICRwa2dcbiIpOwoKICAgICAgICBmb3JlYWNoIG15ICRzdWIgKCBrZXlzICV7ICRyaXNfdXNlcl9mdW5jdGlvbi0+eyRwa2d9IH0gKSB7CiAgICAgICAgICAgIG15ICRtc2cgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgIGlmICggJHJpc19ibG9ja19saXN0X2Z1bmN0aW9uLT57JHBrZ317JHN1Yn0gKSB7CiAgICAgICAgICAgICAgICAkbXNnID0gJ2Jsb2NrX2xpc3QnOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICRyaXNfYmxvY2tfZnVuY3Rpb24tPnskcGtnfXskc3VifSApIHsKICAgICAgICAgICAgICAgICRtc2cgPSAnYmxvY2snOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRmaC0+cHJpbnQoIiRzdWIgJG1zZ1xuIik7CiAgICAgICAgfQogICAgfQoKICAgIGZvcmVhY2ggbXkgJHBrZyAoIGtleXMgJXskcmlzX2NvbnN0YW50fSApIHsKICAgICAgICAkZmgtPnByaW50KCJcbmNvbnN0YW50cyBhbmQgY29uc3RhbnQgc3VicyBpbiBwYWNrYWdlICRwa2dcbiIpOwoKICAgICAgICBmb3JlYWNoIG15ICRzdWIgKCBrZXlzICV7ICRyaXNfY29uc3RhbnQtPnskcGtnfSB9ICkgewogICAgICAgICAgICAkZmgtPnByaW50KCIkc3ViXG4iKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBkdW1wX2Z1bmN0aW9ucwoKc3ViIHByZXBhcmVfZm9yX2FfbmV3X2ZpbGUgewoKICAgIG15ICggJHNlbGYsICRzb3VyY2Vfb2JqZWN0ICkgPSBAXzsKCiAgICAjIGNvcHkgdGhlIHNvdXJjZSBvYmplY3QgbGluZXMgdG8gYW4gYXJyYXkgb2YgbGluZXMKICAgICRzZWxmLT5tYWtlX3NvdXJjZV9hcnJheSgkc291cmNlX29iamVjdCk7CgogICAgIyBwcmV2aW91cyB0b2tlbnMgbmVlZGVkIHRvIGRldGVybWluZSB3aGF0IHRvIGV4cGVjdCBuZXh0CiAgICAkbGFzdF9ub25ibGFua190b2tlbiAgICAgID0gJzsnOyAgICAjIHRoZSBvbmx5IHBvc3NpYmxlIHN0YXJ0aW5nIHN0YXRlIHdoaWNoCiAgICAkbGFzdF9ub25ibGFua190eXBlICAgICAgID0gJzsnOyAgICAjIHdpbGwgbWFrZSBhIGxlYWRpbmcgYnJhY2UgYSBjb2RlIGJsb2NrCiAgICAkbGFzdF9ub25ibGFua19ibG9ja190eXBlID0gRU1QVFlfU1RSSU5HOwoKICAgICMgc2NhbGFycyBmb3IgcmVtZW1iZXJpbmcgc3RhdGVtZW50IHR5cGVzIGFjcm9zcyBtdWx0aXBsZSBsaW5lcwogICAgJHN0YXRlbWVudF90eXBlID0gRU1QVFlfU1RSSU5HOyAgICAgIyAnJyBvciAndXNlJyBvciAnc3ViLi4nIG9yICdjYXNlLi4nCgogICAgIyBzY2FsYXJzIGZvciByZW1lbWJlcmluZyB3aGVyZSB3ZSBhcmUgaW4gdGhlIGZpbGUKICAgICRjdXJyZW50X3BhY2thZ2UgPSAibWFpbiI7CiAgICAkY29udGV4dCAgICAgICAgID0gVU5LTk9XTl9DT05URVhUOwoKICAgICMgaGFzaGVzIHVzZWQgdG8gcmVtZW1iZXIgZnVuY3Rpb24gaW5mb3JtYXRpb24KICAgICRyaXNfY29uc3RhbnQgICAgICAgICAgICAgPSB7fTsgICAgICMgdXNlci1kZWZpbmVkIGNvbnN0YW50cwogICAgJHJpc191c2VyX2Z1bmN0aW9uICAgICAgICA9IHt9OyAgICAgIyB1c2VyLWRlZmluZWQgZnVuY3Rpb25zCiAgICAkcnVzZXJfZnVuY3Rpb25fcHJvdG90eXBlID0ge307ICAgICAjIHRoZWlyIHByb3RvdHlwZXMKICAgICRyaXNfYmxvY2tfZnVuY3Rpb24gICAgICAgPSB7fTsKICAgICRyaXNfYmxvY2tfbGlzdF9mdW5jdGlvbiAgPSB7fTsKICAgICRyc2F3X2Z1bmN0aW9uX2RlZmluaXRpb24gPSB7fTsKICAgICRyc2F3X3VzZV9tb2R1bGUgICAgICAgICAgPSB7fTsKCiAgICAjIHZhcmlhYmxlcyB1c2VkIHRvIHRyYWNrIGRlcHRocyBvZiB2YXJpb3VzIGNvbnRhaW5lcnMKICAgICMgYW5kIHJlcG9ydCBuZXN0aW5nIGVycm9ycwogICAgJHBhcmVuX2RlcHRoICAgICAgICAgICAgICA9IDA7CiAgICAkYnJhY2VfZGVwdGggICAgICAgICAgICAgID0gMDsKICAgICRzcXVhcmVfYnJhY2tldF9kZXB0aCAgICAgPSAwOwogICAgJHJjdXJyZW50X2RlcHRoICAgICAgICAgICA9IFsgKDApIHggc2NhbGFyKEBjbG9zaW5nX2JyYWNlX25hbWVzKSBdOwogICAgJHRvdGFsX2RlcHRoICAgICAgICAgICAgICA9IDA7CiAgICAkcnRvdGFsX2RlcHRoICAgICAgICAgICAgID0gW107CiAgICAkcmN1cnJlbnRfc2VxdWVuY2VfbnVtYmVyID0gW107CiAgICAkbmV4dF9zZXF1ZW5jZV9udW1iZXIgICAgID0gU0VRX1JPT1QgKyAxOwoKICAgICRycGFyZW5fdHlwZSAgICAgICAgICAgICAgICAgICAgID0gW107CiAgICAkcnBhcmVuX3NlbWljb2xvbl9jb3VudCAgICAgICAgICA9IFtdOwogICAgJHJwYXJlbl92YXJzICAgICAgICAgICAgICAgICAgICAgPSBbXTsKICAgICRyYnJhY2VfdHlwZSAgICAgICAgICAgICAgICAgICAgID0gW107CiAgICAkcmJyYWNlX3N0cnVjdHVyYWxfdHlwZSAgICAgICAgICA9IFtdOwogICAgJHJicmFjZV9jb250ZXh0ICAgICAgICAgICAgICAgICAgPSBbXTsKICAgICRyYnJhY2VfcGFja2FnZSAgICAgICAgICAgICAgICAgID0gW107CiAgICAkcnNxdWFyZV9icmFja2V0X3R5cGUgICAgICAgICAgICA9IFtdOwogICAgJHJzcXVhcmVfYnJhY2tldF9zdHJ1Y3R1cmFsX3R5cGUgPSBbXTsKICAgICRyZGVwdGhfYXJyYXkgICAgICAgICAgICAgICAgICAgID0gW107CiAgICAkcm5lc3RlZF90ZXJuYXJ5X2ZsYWcgICAgICAgICAgICA9IFtdOwogICAgJHJuZXN0ZWRfc3RhdGVtZW50X3R5cGUgICAgICAgICAgPSBbXTsKICAgICRyc3RhcnRpbmdfbGluZV9vZl9jdXJyZW50X2RlcHRoID0gW107CgogICAgJHJwYXJlbl90eXBlLT5bJHBhcmVuX2RlcHRoXSAgICAgICAgICAgID0gRU1QVFlfU1RSSU5HOwogICAgJHJwYXJlbl9zZW1pY29sb25fY291bnQtPlskcGFyZW5fZGVwdGhdID0gMDsKICAgICRycGFyZW5fdmFycy0+WyRwYXJlbl9kZXB0aF0gICAgICAgICAgICA9IFtdOwogICAgJHJicmFjZV90eXBlLT5bJGJyYWNlX2RlcHRoXSA9ICc7JzsgICAjIGlkZW50aWZ5IG9wZW5pbmcgYnJhY2UgYXMgY29kZSBibG9jawogICAgJHJicmFjZV9zdHJ1Y3R1cmFsX3R5cGUtPlskYnJhY2VfZGVwdGhdICAgICAgICA9IEVNUFRZX1NUUklORzsKICAgICRyYnJhY2VfY29udGV4dC0+WyRicmFjZV9kZXB0aF0gICAgICAgICAgICAgICAgPSBVTktOT1dOX0NPTlRFWFQ7CiAgICAkcmJyYWNlX3BhY2thZ2UtPlskcGFyZW5fZGVwdGhdICAgICAgICAgICAgICAgID0gJGN1cnJlbnRfcGFja2FnZTsKICAgICRyc3F1YXJlX2JyYWNrZXRfdHlwZS0+WyRzcXVhcmVfYnJhY2tldF9kZXB0aF0gPSBFTVBUWV9TVFJJTkc7CiAgICAkcnNxdWFyZV9icmFja2V0X3N0cnVjdHVyYWxfdHlwZS0+WyRzcXVhcmVfYnJhY2tldF9kZXB0aF0gPSBFTVBUWV9TVFJJTkc7CgogICAgaW5pdGlhbGl6ZV90b2tlbml6ZXJfc3RhdGUoKTsKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHByZXBhcmVfZm9yX2FfbmV3X2ZpbGUKCnsgICAgIyMgY2xvc3VyZSBmb3Igc3ViIHRva2VuaXplX3RoaXNfbGluZQoKICAgIHVzZSBjb25zdGFudCBCUkFDRSAgICAgICAgICA9PiAwOwogICAgdXNlIGNvbnN0YW50IFNRVUFSRV9CUkFDS0VUID0+IDE7CiAgICB1c2UgY29uc3RhbnQgUEFSRU4gICAgICAgICAgPT4gMjsKICAgIHVzZSBjb25zdGFudCBRVUVTVElPTl9DT0xPTiA9PiAzOwoKICAgICMgVFYxOiBzY2FsYXJzIGZvciBwcm9jZXNzaW5nIG9uZSBMSU5FLgogICAgIyBSZS1pbml0aWFsaXplZCBvbiBlYWNoIGVudHJ5IHRvIHN1YiB0b2tlbml6ZV90aGlzX2xpbmUuCiAgICBteSAoCiAgICAgICAgJGJsb2NrX3R5cGUsICAgICAgICAkY29udGFpbmVyX3R5cGUsICAgICRleHBlY3RpbmcsCiAgICAgICAgJGksICAgICAgICAgICAgICAgICAkaV90b2ssICAgICAgICAgICAgICRpbnB1dF9saW5lLAogICAgICAgICRpbnB1dF9saW5lX251bWJlciwgJGxhc3Rfbm9uYmxhbmtfaSwgICAkbWF4X3Rva2VuX2luZGV4LAogICAgICAgICRuZXh0X3RvaywgICAgICAgICAgJG5leHRfdHlwZSwgICAgICAgICAkcGVla2VkX2FoZWFkLAogICAgICAgICRwcm90b3R5cGUsICAgICAgICAgJHJoZXJlX3RhcmdldF9saXN0LCAkcnRva2VuX21hcCwKICAgICAgICAkcnRva2VuX3R5cGUsICAgICAgICRydG9rZW5zLCAgICAgICAgICAgJHRvaywKICAgICAgICAkdHlwZSwgICAgICAgICAgICAgICR0eXBlX3NlcXVlbmNlLCAgICAgJGluZGVudF9mbGFnLAogICAgKTsKCiAgICAjIFRWMjogcmVmcyB0byBBUlJBWVMgZm9yIHByb2Nlc3Npbmcgb25lIExJTkUKICAgICMgUmUtaW5pdGlhbGl6ZWQgb24gZWFjaCBjYWxsLgogICAgbXkgJHJvdXRwdXRfdG9rZW5fbGlzdCAgICA9IFtdOyAgICAjIHN0YWNrIG9mIG91dHB1dCB0b2tlbiBpbmRleGVzCiAgICBteSAkcm91dHB1dF90b2tlbl90eXBlICAgID0gW107ICAgICMgdG9rZW4gdHlwZXMKICAgIG15ICRyb3V0cHV0X2Jsb2NrX3R5cGUgICAgPSBbXTsgICAgIyB0eXBlcyBvZiBjb2RlIGJsb2NrCiAgICBteSAkcm91dHB1dF90eXBlX3NlcXVlbmNlID0gW107ICAgICMgbmVzdGluZyBzZXF1ZW50aWFsIG51bWJlcgogICAgbXkgJHJvdXRwdXRfaW5kZW50X2ZsYWcgICA9IFtdOyAgICAjCgogICAgIyBUVjM6IFNDQUxBUlMgZm9yIHF1b3RlIHZhcmlhYmxlcy4gIFRoZXNlIGFyZSBpbml0aWFsaXplZCB3aXRoIGEKICAgICMgc3Vicm91dGluZSBjYWxsIGFuZCBjb250aW51YWxseSB1cGRhdGVkIGFzIGxpbmVzIGFyZSBwcm9jZXNzZWQuCiAgICBteSAoICRpbl9xdW90ZSwgJHF1b3RlX3R5cGUsICRxdW90ZV9jaGFyYWN0ZXIsICRxdW90ZV9wb3MsICRxdW90ZV9kZXB0aCwKICAgICAgICAkcXVvdGVkX3N0cmluZ18xLCAkcXVvdGVkX3N0cmluZ18yLCAkYWxsb3dlZF9xdW90ZV9tb2RpZmllcnMgKTsKCiAgICAjIFRWNDogU0NBTEFSUyBmb3IgbXVsdGktbGluZSBpZGVudGlmaWVycyBhbmQKICAgICMgc3RhdGVtZW50cy4gVGhlc2UgYXJlIGluaXRpYWxpemVkIHdpdGggYSBzdWJyb3V0aW5lIGNhbGwKICAgICMgYW5kIGNvbnRpbnVhbGx5IHVwZGF0ZWQgYXMgbGluZXMgYXJlIHByb2Nlc3NlZC4KICAgIG15ICggJGlkX3NjYW5fc3RhdGUsICRpZGVudGlmaWVyLCAkd2FudF9wYXJlbiApOwoKICAgICMgVFY1OiBTQ0FMQVJTIGZvciB0cmFja2luZyBpbmRlbnRhdGlvbiBsZXZlbC4KICAgICMgSW5pdGlhbGl6ZWQgb25jZSBhbmQgY29udGludWFsbHkgdXBkYXRlZCBhcyBsaW5lcyBhcmUKICAgICMgcHJvY2Vzc2VkLgogICAgbXkgKAogICAgICAgICRuZXN0aW5nX3Rva2VuX3N0cmluZywgJG5lc3RpbmdfYmxvY2tfc3RyaW5nLAogICAgICAgICRuZXN0aW5nX2Jsb2NrX2ZsYWcsICAgJGxldmVsX2luX3Rva2VuaXplciwKICAgICk7CgogICAgIyBUVjY6IFNDQUxBUlMgZm9yIHJlbWVtYmVyaW5nIHNldmVyYWwgcHJldmlvdXMKICAgICMgdG9rZW5zLiBJbml0aWFsaXplZCBvbmNlIGFuZCBjb250aW51YWxseSB1cGRhdGVkIGFzCiAgICAjIGxpbmVzIGFyZSBwcm9jZXNzZWQuCiAgICBteSAoCiAgICAgICAgJGxhc3Rfbm9uYmxhbmtfY29udGFpbmVyX3R5cGUsICRsYXN0X25vbmJsYW5rX3R5cGVfc2VxdWVuY2UsCiAgICAgICAgJGxhc3RfbGFzdF9ub25ibGFua190b2tlbiwgICAgICRsYXN0X2xhc3Rfbm9uYmxhbmtfdHlwZSwKICAgICAgICAkbGFzdF9ub25ibGFua19wcm90b3R5cGUsCiAgICApOwoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBiZWdpbm5pbmcgb2YgdG9rZW5pemVyIHZhcmlhYmxlIGFjY2VzcyBhbmQgbWFuaXB1bGF0aW9uIHJvdXRpbmVzCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBzdWIgaW5pdGlhbGl6ZV90b2tlbml6ZXJfc3RhdGUgewoKICAgICAgICAjIEdWMTogaW5pdGlhbGl6ZWQgb25jZQogICAgICAgICMgVFYxOiBpbml0aWFsaXplZCBvbiBlYWNoIGNhbGwKICAgICAgICAjIFRWMjogaW5pdGlhbGl6ZWQgb24gZWFjaCBjYWxsCiAgICAgICAgIyBUVjM6CiAgICAgICAgJGluX3F1b3RlICAgICAgICAgICAgICAgID0gMDsKICAgICAgICAkcXVvdGVfdHlwZSAgICAgICAgICAgICAgPSAnUSc7CiAgICAgICAgJHF1b3RlX2NoYXJhY3RlciAgICAgICAgID0gRU1QVFlfU1RSSU5HOwogICAgICAgICRxdW90ZV9wb3MgICAgICAgICAgICAgICA9IDA7CiAgICAgICAgJHF1b3RlX2RlcHRoICAgICAgICAgICAgID0gMDsKICAgICAgICAkcXVvdGVkX3N0cmluZ18xICAgICAgICAgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgJHF1b3RlZF9zdHJpbmdfMiAgICAgICAgID0gRU1QVFlfU1RSSU5HOwogICAgICAgICRhbGxvd2VkX3F1b3RlX21vZGlmaWVycyA9IEVNUFRZX1NUUklORzsKCiAgICAgICAgIyBUVjQ6CiAgICAgICAgJGlkX3NjYW5fc3RhdGUgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgJGlkZW50aWZpZXIgICAgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgJHdhbnRfcGFyZW4gICAgPSBFTVBUWV9TVFJJTkc7CgogICAgICAgICMgVFY1OgogICAgICAgICRuZXN0aW5nX3Rva2VuX3N0cmluZyA9IEVNUFRZX1NUUklORzsKICAgICAgICAkbmVzdGluZ19ibG9ja19zdHJpbmcgPSAnMSc7ICAgICAgICAgICAgIyBpbml0aWFsbHkgaW4gYSBibG9jawogICAgICAgICRuZXN0aW5nX2Jsb2NrX2ZsYWcgICA9IDE7CiAgICAgICAgJGxldmVsX2luX3Rva2VuaXplciAgID0gMDsKCiAgICAgICAgIyBUVjY6CiAgICAgICAgJGxhc3Rfbm9uYmxhbmtfY29udGFpbmVyX3R5cGUgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgJGxhc3Rfbm9uYmxhbmtfdHlwZV9zZXF1ZW5jZSAgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgJGxhc3RfbGFzdF9ub25ibGFua190b2tlbiAgICAgPSAnOyc7CiAgICAgICAgJGxhc3RfbGFzdF9ub25ibGFua190eXBlICAgICAgPSAnOyc7CiAgICAgICAgJGxhc3Rfbm9uYmxhbmtfcHJvdG90eXBlICAgICAgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGluaXRpYWxpemVfdG9rZW5pemVyX3N0YXRlCgogICAgc3ViIHNhdmVfdG9rZW5pemVyX3N0YXRlIHsKCiAgICAgICAgIyBHbG9iYWwgdmFyaWFibGVzOgogICAgICAgIG15ICRyR1YxID0gWwogICAgICAgICAgICAkYnJhY2VfZGVwdGgsCiAgICAgICAgICAgICRjb250ZXh0LAogICAgICAgICAgICAkY3VycmVudF9wYWNrYWdlLAogICAgICAgICAgICAkbGFzdF9ub25ibGFua19ibG9ja190eXBlLAogICAgICAgICAgICAkbGFzdF9ub25ibGFua190b2tlbiwKICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfdHlwZSwKICAgICAgICAgICAgJG5leHRfc2VxdWVuY2VfbnVtYmVyLAogICAgICAgICAgICAkcGFyZW5fZGVwdGgsCiAgICAgICAgICAgICRyYnJhY2VfY29udGV4dCwKICAgICAgICAgICAgJHJicmFjZV9wYWNrYWdlLAogICAgICAgICAgICAkcmJyYWNlX3N0cnVjdHVyYWxfdHlwZSwKICAgICAgICAgICAgJHJicmFjZV90eXBlLAogICAgICAgICAgICAkcmN1cnJlbnRfZGVwdGgsCiAgICAgICAgICAgICRyY3VycmVudF9zZXF1ZW5jZV9udW1iZXIsCiAgICAgICAgICAgICRyZGVwdGhfYXJyYXksCiAgICAgICAgICAgICRyaXNfYmxvY2tfZnVuY3Rpb24sCiAgICAgICAgICAgICRyaXNfYmxvY2tfbGlzdF9mdW5jdGlvbiwKICAgICAgICAgICAgJHJpc19jb25zdGFudCwKICAgICAgICAgICAgJHJpc191c2VyX2Z1bmN0aW9uLAogICAgICAgICAgICAkcm5lc3RlZF9zdGF0ZW1lbnRfdHlwZSwKICAgICAgICAgICAgJHJuZXN0ZWRfdGVybmFyeV9mbGFnLAogICAgICAgICAgICAkcnBhcmVuX3NlbWljb2xvbl9jb3VudCwKICAgICAgICAgICAgJHJwYXJlbl92YXJzLAogICAgICAgICAgICAkcnBhcmVuX3R5cGUsCiAgICAgICAgICAgICRyc2F3X2Z1bmN0aW9uX2RlZmluaXRpb24sCiAgICAgICAgICAgICRyc2F3X3VzZV9tb2R1bGUsCiAgICAgICAgICAgICRyc3F1YXJlX2JyYWNrZXRfc3RydWN0dXJhbF90eXBlLAogICAgICAgICAgICAkcnNxdWFyZV9icmFja2V0X3R5cGUsCiAgICAgICAgICAgICRyc3RhcnRpbmdfbGluZV9vZl9jdXJyZW50X2RlcHRoLAogICAgICAgICAgICAkcnRvdGFsX2RlcHRoLAogICAgICAgICAgICAkcnVzZXJfZnVuY3Rpb25fcHJvdG90eXBlLAogICAgICAgICAgICAkc3F1YXJlX2JyYWNrZXRfZGVwdGgsCiAgICAgICAgICAgICRzdGF0ZW1lbnRfdHlwZSwKICAgICAgICAgICAgJHRvdGFsX2RlcHRoLAoKICAgICAgICBdOwoKICAgICAgICAjIFRva2VuaXplciBjbG9zdXJlIHZhcmlhYmxlczoKICAgICAgICBteSAkclRWMSA9IFsKICAgICAgICAgICAgJGJsb2NrX3R5cGUsICAgICAgICAkY29udGFpbmVyX3R5cGUsICAgICRleHBlY3RpbmcsCiAgICAgICAgICAgICRpLCAgICAgICAgICAgICAgICAgJGlfdG9rLCAgICAgICAgICAgICAkaW5wdXRfbGluZSwKICAgICAgICAgICAgJGlucHV0X2xpbmVfbnVtYmVyLCAkbGFzdF9ub25ibGFua19pLCAgICRtYXhfdG9rZW5faW5kZXgsCiAgICAgICAgICAgICRuZXh0X3RvaywgICAgICAgICAgJG5leHRfdHlwZSwgICAgICAgICAkcGVla2VkX2FoZWFkLAogICAgICAgICAgICAkcHJvdG90eXBlLCAgICAgICAgICRyaGVyZV90YXJnZXRfbGlzdCwgJHJ0b2tlbl9tYXAsCiAgICAgICAgICAgICRydG9rZW5fdHlwZSwgICAgICAgJHJ0b2tlbnMsICAgICAgICAgICAkdG9rLAogICAgICAgICAgICAkdHlwZSwgICAgICAgICAgICAgICR0eXBlX3NlcXVlbmNlLCAgICAgJGluZGVudF9mbGFnLAogICAgICAgIF07CgogICAgICAgIG15ICRyVFYyID0gWwogICAgICAgICAgICAkcm91dHB1dF90b2tlbl9saXN0LCAkcm91dHB1dF90b2tlbl90eXBlLAogICAgICAgICAgICAkcm91dHB1dF9ibG9ja190eXBlLCAkcm91dHB1dF90eXBlX3NlcXVlbmNlLAogICAgICAgICAgICAkcm91dHB1dF9pbmRlbnRfZmxhZywKICAgICAgICBdOwoKICAgICAgICBteSAkclRWMyA9IFsKICAgICAgICAgICAgJGluX3F1b3RlLCAgICAgICAgJHF1b3RlX3R5cGUsCiAgICAgICAgICAgICRxdW90ZV9jaGFyYWN0ZXIsICRxdW90ZV9wb3MsCiAgICAgICAgICAgICRxdW90ZV9kZXB0aCwgICAgICRxdW90ZWRfc3RyaW5nXzEsCiAgICAgICAgICAgICRxdW90ZWRfc3RyaW5nXzIsICRhbGxvd2VkX3F1b3RlX21vZGlmaWVycywKICAgICAgICBdOwoKICAgICAgICBteSAkclRWNCA9IFsgJGlkX3NjYW5fc3RhdGUsICRpZGVudGlmaWVyLCAkd2FudF9wYXJlbiBdOwoKICAgICAgICBteSAkclRWNSA9IFsKICAgICAgICAgICAgJG5lc3RpbmdfdG9rZW5fc3RyaW5nLCAkbmVzdGluZ19ibG9ja19zdHJpbmcsCiAgICAgICAgICAgICRuZXN0aW5nX2Jsb2NrX2ZsYWcsICAgJGxldmVsX2luX3Rva2VuaXplciwKICAgICAgICBdOwoKICAgICAgICBteSAkclRWNiA9IFsKICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfY29udGFpbmVyX3R5cGUsICRsYXN0X25vbmJsYW5rX3R5cGVfc2VxdWVuY2UsCiAgICAgICAgICAgICRsYXN0X2xhc3Rfbm9uYmxhbmtfdG9rZW4sICAgICAkbGFzdF9sYXN0X25vbmJsYW5rX3R5cGUsCiAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX3Byb3RvdHlwZSwKICAgICAgICBdOwogICAgICAgIHJldHVybiBbICRyR1YxLCAkclRWMSwgJHJUVjIsICRyVFYzLCAkclRWNCwgJHJUVjUsICRyVFY2IF07CiAgICB9ICMjIGVuZCBzdWIgc2F2ZV90b2tlbml6ZXJfc3RhdGUKCiAgICBzdWIgcmVzdG9yZV90b2tlbml6ZXJfc3RhdGUgewogICAgICAgIG15ICgkcnN0YXRlKSA9IEBfOwogICAgICAgIG15ICggJHJHVjEsICRyVFYxLCAkclRWMiwgJHJUVjMsICRyVFY0LCAkclRWNSwgJHJUVjYgKSA9IEB7JHJzdGF0ZX07CgogICAgICAgICgKICAgICAgICAgICAgJGJyYWNlX2RlcHRoLAogICAgICAgICAgICAkY29udGV4dCwKICAgICAgICAgICAgJGN1cnJlbnRfcGFja2FnZSwKICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfYmxvY2tfdHlwZSwKICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfdG9rZW4sCiAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX3R5cGUsCiAgICAgICAgICAgICRuZXh0X3NlcXVlbmNlX251bWJlciwKICAgICAgICAgICAgJHBhcmVuX2RlcHRoLAogICAgICAgICAgICAkcmJyYWNlX2NvbnRleHQsCiAgICAgICAgICAgICRyYnJhY2VfcGFja2FnZSwKICAgICAgICAgICAgJHJicmFjZV9zdHJ1Y3R1cmFsX3R5cGUsCiAgICAgICAgICAgICRyYnJhY2VfdHlwZSwKICAgICAgICAgICAgJHJjdXJyZW50X2RlcHRoLAogICAgICAgICAgICAkcmN1cnJlbnRfc2VxdWVuY2VfbnVtYmVyLAogICAgICAgICAgICAkcmRlcHRoX2FycmF5LAogICAgICAgICAgICAkcmlzX2Jsb2NrX2Z1bmN0aW9uLAogICAgICAgICAgICAkcmlzX2Jsb2NrX2xpc3RfZnVuY3Rpb24sCiAgICAgICAgICAgICRyaXNfY29uc3RhbnQsCiAgICAgICAgICAgICRyaXNfdXNlcl9mdW5jdGlvbiwKICAgICAgICAgICAgJHJuZXN0ZWRfc3RhdGVtZW50X3R5cGUsCiAgICAgICAgICAgICRybmVzdGVkX3Rlcm5hcnlfZmxhZywKICAgICAgICAgICAgJHJwYXJlbl9zZW1pY29sb25fY291bnQsCiAgICAgICAgICAgICRycGFyZW5fdmFycywKICAgICAgICAgICAgJHJwYXJlbl90eXBlLAogICAgICAgICAgICAkcnNhd19mdW5jdGlvbl9kZWZpbml0aW9uLAogICAgICAgICAgICAkcnNhd191c2VfbW9kdWxlLAogICAgICAgICAgICAkcnNxdWFyZV9icmFja2V0X3N0cnVjdHVyYWxfdHlwZSwKICAgICAgICAgICAgJHJzcXVhcmVfYnJhY2tldF90eXBlLAogICAgICAgICAgICAkcnN0YXJ0aW5nX2xpbmVfb2ZfY3VycmVudF9kZXB0aCwKICAgICAgICAgICAgJHJ0b3RhbF9kZXB0aCwKICAgICAgICAgICAgJHJ1c2VyX2Z1bmN0aW9uX3Byb3RvdHlwZSwKICAgICAgICAgICAgJHNxdWFyZV9icmFja2V0X2RlcHRoLAogICAgICAgICAgICAkc3RhdGVtZW50X3R5cGUsCiAgICAgICAgICAgICR0b3RhbF9kZXB0aCwKCiAgICAgICAgKSA9IEB7JHJHVjF9OwoKICAgICAgICAoCiAgICAgICAgICAgICRibG9ja190eXBlLCAgICAgICAgJGNvbnRhaW5lcl90eXBlLCAgICAkZXhwZWN0aW5nLAogICAgICAgICAgICAkaSwgICAgICAgICAgICAgICAgICRpX3RvaywgICAgICAgICAgICAgJGlucHV0X2xpbmUsCiAgICAgICAgICAgICRpbnB1dF9saW5lX251bWJlciwgJGxhc3Rfbm9uYmxhbmtfaSwgICAkbWF4X3Rva2VuX2luZGV4LAogICAgICAgICAgICAkbmV4dF90b2ssICAgICAgICAgICRuZXh0X3R5cGUsICAgICAgICAgJHBlZWtlZF9haGVhZCwKICAgICAgICAgICAgJHByb3RvdHlwZSwgICAgICAgICAkcmhlcmVfdGFyZ2V0X2xpc3QsICRydG9rZW5fbWFwLAogICAgICAgICAgICAkcnRva2VuX3R5cGUsICAgICAgICRydG9rZW5zLCAgICAgICAgICAgJHRvaywKICAgICAgICAgICAgJHR5cGUsICAgICAgICAgICAgICAkdHlwZV9zZXF1ZW5jZSwgICAgICRpbmRlbnRfZmxhZywKICAgICAgICApID0gQHskclRWMX07CgogICAgICAgICgKICAgICAgICAgICAgJHJvdXRwdXRfdG9rZW5fbGlzdCwgJHJvdXRwdXRfdG9rZW5fdHlwZSwKICAgICAgICAgICAgJHJvdXRwdXRfYmxvY2tfdHlwZSwgJHJvdXRwdXRfdHlwZV9zZXF1ZW5jZSwKICAgICAgICAgICAgJHJvdXRwdXRfaW5kZW50X2ZsYWcsCiAgICAgICAgKSA9IEB7JHJUVjJ9OwoKICAgICAgICAoCiAgICAgICAgICAgICRpbl9xdW90ZSwgJHF1b3RlX3R5cGUsICRxdW90ZV9jaGFyYWN0ZXIsICRxdW90ZV9wb3MsICRxdW90ZV9kZXB0aCwKICAgICAgICAgICAgJHF1b3RlZF9zdHJpbmdfMSwgJHF1b3RlZF9zdHJpbmdfMiwgJGFsbG93ZWRfcXVvdGVfbW9kaWZpZXJzLAogICAgICAgICkgPSBAeyRyVFYzfTsKCiAgICAgICAgKCAkaWRfc2Nhbl9zdGF0ZSwgJGlkZW50aWZpZXIsICR3YW50X3BhcmVuICkgPSBAeyRyVFY0fTsKCiAgICAgICAgKAogICAgICAgICAgICAkbmVzdGluZ190b2tlbl9zdHJpbmcsICRuZXN0aW5nX2Jsb2NrX3N0cmluZywKICAgICAgICAgICAgJG5lc3RpbmdfYmxvY2tfZmxhZywgICAkbGV2ZWxfaW5fdG9rZW5pemVyLAogICAgICAgICkgPSBAeyRyVFY1fTsKCiAgICAgICAgKAogICAgICAgICAgICAkbGFzdF9ub25ibGFua19jb250YWluZXJfdHlwZSwgJGxhc3Rfbm9uYmxhbmtfdHlwZV9zZXF1ZW5jZSwKICAgICAgICAgICAgJGxhc3RfbGFzdF9ub25ibGFua190b2tlbiwgICAgICRsYXN0X2xhc3Rfbm9uYmxhbmtfdHlwZSwKICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfcHJvdG90eXBlLAogICAgICAgICkgPSBAeyRyVFY2fTsKICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgcmVzdG9yZV90b2tlbml6ZXJfc3RhdGUKCiAgICBzdWIgc3BsaXRfcHJldG9rZW4gewoKICAgICAgICBteSAoICRzZWxmLCAkbnVtYyApID0gQF87CgogICAgICAgICMgVGhpcyBwcm92aWRlcyBhIHdheSB0byB3b3JrIGFyb3VuZCB0aGUgbGltaXRhdGlvbnMgb2YgdGhlCiAgICAgICAgIyBwcmUtdG9rZW5pemF0aW9uIHNjaGVtZSB1cG9uIHdoaWNoIHBlcmx0aWR5IGlzIGJhc2VkLiBJdCBpcyByYXJlbHkKICAgICAgICAjIG5lZWRlZC4KCiAgICAgICAgIyBTcGxpdCB0aGUgbGVhZGluZyAkbnVtYyBjaGFyYWN0ZXJzIGZyb20gdGhlIGN1cnJlbnQgdG9rZW4gKGF0CiAgICAgICAgIyBpbmRleD0kaSkgd2hpY2ggaXMgcHJlLXR5cGUgJ3cnIGFuZCBpbnNlcnQgdGhlIHJlbWFpbmRlciBiYWNrIGludG8KICAgICAgICAjIHRoZSBwcmV0b2tlbiBzdHJlYW0gd2l0aCBhcHByb3ByaWF0ZSBzZXR0aW5ncy4gIFNpbmNlIHdlIGFyZQogICAgICAgICMgc3BsaXR0aW5nIGEgcHJlLXR5cGUgJ3cnLCB0aGVyZSBhcmUgdGhyZWUgY2FzZXMsIGRlcGVuZGluZyBvbiBpZiB0aGUKICAgICAgICAjIHJlbWFpbmRlciBzdGFydHMgd2l0aCBhIGRpZ2l0OgogICAgICAgICMgQ2FzZSAxOiByZW1haW5kZXIgaXMgdHlwZSAnZCcsIGFsbCBkaWdpdHMKICAgICAgICAjIENhc2UgMjogcmVtYWluZGVyIGlzIHR5cGUgJ2QnIGFuZCB0eXBlICd3JzogZGlnaXRzICYgb3RoZXIgY2hhcmFjdGVycwogICAgICAgICMgQ2FzZSAzOiByZW1haW5kZXIgaXMgdHlwZSAndycKCiAgICAgICAgIyBFeGFtcGxlcywgZm9yICRudW1jPTE6CiAgICAgICAgIyAgICR0b2sgICAgPT4gJHRva18wICR0b2tfMSAkdG9rXzIKICAgICAgICAjICAgJ3gxMCcgICA9PiAneCcgICAgJzEwJyAgICAgICAgICAgICAgICAjIGNhc2UgMQogICAgICAgICMgICAneDEwaWYnID0+ICd4JyAgICAnMTAnICAgJ2lmJyAgICAgICAgICMgY2FzZSAyCiAgICAgICAgIyAgICcwbmUgICAgPT4gJ08nICAgICAgICAgICAgJ25lJyAgICAgICAgIyBjYXNlIDMKCiAgICAgICAgIyB3aGVyZToKICAgICAgICAjICAgJHRva18xIGlzIGEgcG9zc2libGUgc3RyaW5nIG9mIGRpZ2l0cyAocHJlLXR5cGUgJ2QnKQogICAgICAgICMgICAkdG9rXzIgaXMgYSBwb3NzaWJsZSB3b3JkIChwcmUtdHlwZSAndycpCgogICAgICAgICMgcmV0dXJuIDEgaWYgc3VjY2Vzc2Z1bAogICAgICAgICMgcmV0dXJuIHVuZGVmIGlmIGVycm9yIChzaG91bGRuJ3QgaGFwcGVuKQoKICAgICAgICAjIENhbGxpbmcgcm91dGluZSBzaG91bGQgdXBkYXRlICckdHlwZScgYW5kICckdG9rJyBpZiBzdWNjZXNzZnVsLgoKICAgICAgICBteSAkcHJldG9rZW4gPSAkcnRva2Vucy0+WyRpXTsKICAgICAgICBpZiAoICAgJHByZXRva2VuCiAgICAgICAgICAgICYmIGxlbmd0aCgkcHJldG9rZW4pID4gJG51bWMKICAgICAgICAgICAgJiYgc3Vic3RyKCAkcHJldG9rZW4sICRudW1jICkgPX4gL14oXGQqKSguKikkLyApCiAgICAgICAgewoKICAgICAgICAgICAgIyBTcGxpdCAkdG9rIGludG8gdXAgdG8gMyB0b2tlbnM6CiAgICAgICAgICAgIG15ICR0b2tfMCA9IHN1YnN0ciggJHByZXRva2VuLCAwLCAkbnVtYyApOwogICAgICAgICAgICBteSAkdG9rXzEgPSBkZWZpbmVkKCQxKSA/ICQxIDogRU1QVFlfU1RSSU5HOwogICAgICAgICAgICBteSAkdG9rXzIgPSBkZWZpbmVkKCQyKSA/ICQyIDogRU1QVFlfU1RSSU5HOwoKICAgICAgICAgICAgbXkgJGxlbl8wID0gbGVuZ3RoKCR0b2tfMCk7CiAgICAgICAgICAgIG15ICRsZW5fMSA9IGxlbmd0aCgkdG9rXzEpOwogICAgICAgICAgICBteSAkbGVuXzIgPSBsZW5ndGgoJHRva18yKTsKCiAgICAgICAgICAgICMjbXkgJHByZV90eXBlXzAgPSAndyc7CiAgICAgICAgICAgIG15ICRwcmVfdHlwZV8xID0gJ2QnOwogICAgICAgICAgICBteSAkcHJlX3R5cGVfMiA9ICd3JzsKCiAgICAgICAgICAgIG15ICRwb3NfMCA9ICRydG9rZW5fbWFwLT5bJGldOwogICAgICAgICAgICBteSAkcG9zXzEgPSAkcG9zXzAgKyAkbGVuXzA7CiAgICAgICAgICAgIG15ICRwb3NfMiA9ICRwb3NfMSArICRsZW5fMTsKCiAgICAgICAgICAgIG15ICRpc3BsaWNlID0gJGkgKyAxOwoKICAgICAgICAgICAgIyBTcGxpY2UgaW4gYW55IGRpZ2l0cwogICAgICAgICAgICBpZiAoJGxlbl8xKSB7CiAgICAgICAgICAgICAgICBzcGxpY2UgQHskcnRva2VuX21hcH0sICAkaXNwbGljZSwgMCwgJHBvc18xOwogICAgICAgICAgICAgICAgc3BsaWNlIEB7JHJ0b2tlbnN9LCAgICAgJGlzcGxpY2UsIDAsICR0b2tfMTsKICAgICAgICAgICAgICAgIHNwbGljZSBAeyRydG9rZW5fdHlwZX0sICRpc3BsaWNlLCAwLCAkcHJlX3R5cGVfMTsKICAgICAgICAgICAgICAgICRtYXhfdG9rZW5faW5kZXgrKzsKICAgICAgICAgICAgICAgICRpc3BsaWNlKys7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgU3BsaWNlIGluIGFueSB0cmFpbGluZyB3b3JkCiAgICAgICAgICAgIGlmICgkbGVuXzIpIHsKICAgICAgICAgICAgICAgIHNwbGljZSBAeyRydG9rZW5fbWFwfSwgICRpc3BsaWNlLCAwLCAkcG9zXzI7CiAgICAgICAgICAgICAgICBzcGxpY2UgQHskcnRva2Vuc30sICAgICAkaXNwbGljZSwgMCwgJHRva18yOwogICAgICAgICAgICAgICAgc3BsaWNlIEB7JHJ0b2tlbl90eXBlfSwgJGlzcGxpY2UsIDAsICRwcmVfdHlwZV8yOwogICAgICAgICAgICAgICAgJG1heF90b2tlbl9pbmRleCsrOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkcnRva2Vucy0+WyRpXSA9ICR0b2tfMDsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQoKICAgICAgICAjIFNob3VsZG4ndCBnZXQgaGVyZSAtIGJhZCBjYWxsIHBhcmFtZXRlcnMKICAgICAgICBpZiAoREVWRUxfTU9ERSkgewogICAgICAgICAgICAkc2VsZi0+RmF1bHQoPDxFT00pOwpXaGlsZSB3b3JraW5nIG5lYXIgbGluZSBudW1iZXIgJGlucHV0X2xpbmVfbnVtYmVyLCBiYWQgYXJnICckdG9rJyBwYXNzZWQgdG8gc3ViIHNwbGl0X3ByZXRva2VuKCkKRU9NCiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBzcGxpdF9wcmV0b2tlbgoKICAgIHN1YiBnZXRfaW5kZW50YXRpb25fbGV2ZWwgewogICAgICAgIHJldHVybiAkbGV2ZWxfaW5fdG9rZW5pemVyOwogICAgfQoKICAgIHN1YiByZXNldF9pbmRlbnRhdGlvbl9sZXZlbCB7CiAgICAgICAgJGxldmVsX2luX3Rva2VuaXplciA9IHNoaWZ0OwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBzdWIgcGVla2VkX2FoZWFkIHsKICAgICAgICAoICggbXkgJGZsYWcgKSApID0gQF87CgogICAgICAgICMgZ2V0IG9yIHNldCB0aGUgY2xvc3VyZSBmbGFnICckcGVla2VkX2FoZWFkJzoKICAgICAgICAjIC0gc2V0ICRwZWVrZWRfYWhlYWQgdG8gJGZsYWcgaWYgZ2l2ZW4sIHRoZW4KICAgICAgICAjIC0gcmV0dXJuIGN1cnJlbnQgdmFsdWUKICAgICAgICAkcGVla2VkX2FoZWFkID0gZGVmaW5lZCgkZmxhZykgPyAkZmxhZyA6ICRwZWVrZWRfYWhlYWQ7CiAgICAgICAgcmV0dXJuICRwZWVrZWRfYWhlYWQ7CiAgICB9ICMjIGVuZCBzdWIgcGVla2VkX2FoZWFkCgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgZW5kIG9mIHRva2VuaXplciB2YXJpYWJsZSBhY2Nlc3MgYW5kIG1hbmlwdWxhdGlvbiByb3V0aW5lcwogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIGJlZ2lubmluZyBvZiB0b2tlbml6ZXIgaGFzaGVzCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgbXkgJW1hdGNoaW5nX3N0YXJ0X3Rva2VuID0gKCAnfScgPT4gJ3snLCAnXScgPT4gJ1snLCAnKScgPT4gJygnICk7CgogICAgIyBUaGVzZSBibG9jayB0eXBlcyB0ZXJtaW5hdGUgc3RhdGVtZW50cyBhbmQgZG8gbm90IG5lZWQgYSB0cmFpbGluZwogICAgIyBzZW1pY29sb24KICAgICMgcGF0Y2hlZCBmb3IgU1dJVENIL0NBU0UvCiAgICBteSAlaXNfemVyb19jb250aW51YXRpb25fYmxvY2tfdHlwZTsKICAgIG15IEBxOwogICAgQHEgPSBxdyggfSB7IEJFR0lOIEVORCBDSEVDSyBJTklUIEFVVE9MT0FEIERFU1RST1kgVU5JVENIRUNLIGNvbnRpbnVlIDsKICAgICAgaWYgZWxzaWYgZWxzZSB1bmxlc3Mgd2hpbGUgdW50aWwgZm9yIGZvcmVhY2ggc3dpdGNoIGNhc2UgZ2l2ZW4gd2hlbiApOwogICAgQGlzX3plcm9fY29udGludWF0aW9uX2Jsb2NrX3R5cGV7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICBteSAlaXNfbG9naWNhbF9jb250YWluZXI7CiAgICBAcSA9IHF3KCBpZiBlbHNpZiB1bmxlc3Mgd2hpbGUgYW5kIG9yIGVyciBub3QgJiYgISB8fCBmb3IgZm9yZWFjaCApOwogICAgQGlzX2xvZ2ljYWxfY29udGFpbmVye0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgbXkgJWlzX2JpbmFyeV90eXBlOwogICAgQHEgPSBxdyggfHwgJiYgKTsKICAgIEBpc19iaW5hcnlfdHlwZXtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgIG15ICVpc19iaW5hcnlfa2V5d29yZDsKICAgIEBxID0gcXcoIGFuZCBvciBlcnIgZXEgbmUgY21wICk7CiAgICBAaXNfYmluYXJ5X2tleXdvcmR7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICAjICdMJyBpcyB0b2tlbiBmb3Igb3BlbmluZyB7IGF0IGhhc2gga2V5CiAgICBteSAlaXNfb3BlbmluZ190eXBlOwogICAgQHEgPSBxdzwgTCB7ICggWyA+OwogICAgQGlzX29wZW5pbmdfdHlwZXtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgIG15ICVpc19vcGVuaW5nX29yX3Rlcm5hcnlfdHlwZTsKICAgIHB1c2ggQHEsICc/JzsKICAgIEBpc19vcGVuaW5nX29yX3Rlcm5hcnlfdHlwZXtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICMgJ1InIGlzIHRva2VuIGZvciBjbG9zaW5nIH0gYXQgaGFzaCBrZXkKICAgIG15ICVpc19jbG9zaW5nX3R5cGU7CiAgICBAcSA9IHF3PCBSIH0gKSBdID47CiAgICBAaXNfY2xvc2luZ190eXBle0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgbXkgJWlzX2Nsb3Npbmdfb3JfdGVybmFyeV90eXBlOwogICAgcHVzaCBAcSwgJzonOwogICAgQGlzX2Nsb3Npbmdfb3JfdGVybmFyeV90eXBle0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgbXkgJWlzX3JlZG9fbGFzdF9uZXh0X2dvdG87CiAgICBAcSA9IHF3KCByZWRvIGxhc3QgbmV4dCBnb3RvICk7CiAgICBAaXNfcmVkb19sYXN0X25leHRfZ290b3tAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgIG15ICVpc191c2VfcmVxdWlyZTsKICAgIEBxID0gcXcoIHVzZSByZXF1aXJlICk7CiAgICBAaXNfdXNlX3JlcXVpcmV7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICAjIFRoaXMgaGFzaCBob2xkcyB0aGUgYXJyYXkgaW5kZXggaW4gJHNlbGYgZm9yIHRoZXNlIGtleXdvcmRzOgogICAgIyBGaXggZm9yIGlzc3VlIGMwMzU6IHJlbW92ZWQgJ2Zvcm1hdCcgZnJvbSB0aGlzIGhhc2gKICAgIG15ICVpc19FTkRfREFUQSA9ICgKICAgICAgICAnX19FTkRfXycgID0+IF9pbl9lbmRfLAogICAgICAgICdfX0RBVEFfXycgPT4gX2luX2RhdGFfLAogICAgKTsKCiAgICBteSAlaXNfbGlzdF9lbmRfdHlwZTsKICAgIEBxID0gcXcoIDsgeyB9ICk7CiAgICBwdXNoIEBxLCAnLCc7CiAgICBAaXNfbGlzdF9lbmRfdHlwZXtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICMgdGFibGUgc2hvd2luZyBob3cgbWFueSBxdW90ZWQgdGhpbmdzIHRvIGxvb2sgZm9yIGFmdGVyIHF1b3RlIG9wZXJhdG9yLi4KICAgICMgcywgeSwgdHIgaGF2ZSAyIChwYXR0ZXJuIGFuZCByZXBsYWNlbWVudCkKICAgICMgb3RoZXJzIGhhdmUgMSAocGF0dGVybiBvbmx5KQogICAgbXkgJXF1b3RlX2l0ZW1zID0gKAogICAgICAgICdzJyAgPT4gMiwKICAgICAgICAneScgID0+IDIsCiAgICAgICAgJ3RyJyA9PiAyLAogICAgICAgICdtJyAgPT4gMSwKICAgICAgICAncXInID0+IDEsCiAgICAgICAgJ3EnICA9PiAxLAogICAgICAgICdxcScgPT4gMSwKICAgICAgICAncXcnID0+IDEsCiAgICAgICAgJ3F4JyA9PiAxLAogICAgKTsKCiAgICBteSAlaXNfZm9yX2ZvcmVhY2g7CiAgICBAcSA9IHF3KCBmb3IgZm9yZWFjaCApOwogICAgQGlzX2Zvcl9mb3JlYWNoe0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgIyBUaGVzZSBrZXl3b3JkcyBtYXkgaW50cm9kdWNlIGJsb2NrcyBhZnRlciBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb25zLAogICAgIyBpbiB0aGUgZm9ybToKICAgICMga2V5d29yZCAoIC4uLi4gKSB7IEJMT0NLIH0KICAgICMgcGF0Y2ggZm9yIFNXSVRDSC9DQVNFOiBhZGRlZCAnc3dpdGNoJyAnY2FzZScgJ2dpdmVuJyAnd2hlbicKICAgICMgTk9URSBmb3IgLS11c2UtZmVhdHVyZT1jbGFzczogaWYgQURKVVNUIGJsb2NrcyBldmVudHVhbGx5IHRha2UgYQogICAgIyBwYXJhbWV0ZXIgbGlzdCwgdGhlbiBBREpVU1QgbWlnaHQgbmVlZCB0byBiZSBhZGRlZCB0byB0aGlzIGxpc3QgKHNlZQogICAgIyBwZXJsY2xhc3MucG9kKQogICAgbXkgJWlzX2Jsb2NrdHlwZV93aXRoX3BhcmVuOwogICAgQHEgPQogICAgICBxdyhpZiBlbHNpZiB1bmxlc3Mgd2hpbGUgdW50aWwgZm9yIGZvcmVhY2ggc3dpdGNoIGNhc2UgZ2l2ZW4gd2hlbiBjYXRjaCk7CiAgICBAaXNfYmxvY2t0eXBlX3dpdGhfcGFyZW57QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICBteSAlaXNfY2FzZV9kZWZhdWx0OwogICAgQHEgPSBxdyggY2FzZSBkZWZhdWx0ICk7CiAgICBAaXNfY2FzZV9kZWZhdWx0e0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBlbmQgb2YgdG9rZW5pemVyIGhhc2hlcwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIGJlZ2lubmluZyBvZiB2YXJpb3VzIHNjYW5uZXIgaW50ZXJmYWNlIHJvdXRpbmVzCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgc3ViIHNjYW5fcmVwbGFjZW1lbnRfdGV4dCB7CgogICAgICAgICMgY2hlY2sgZm9yIGhlcmUtZG9jcyBpbiByZXBsYWNlbWVudCB0ZXh0IGludm9rZWQgYnkKICAgICAgICAjIGEgc3Vic3RpdHV0aW9uIG9wZXJhdG9yIHdpdGggZXhlY3V0YWJsZSBtb2RpZmllciAnZScuCiAgICAgICAgIwogICAgICAgICMgZ2l2ZW46CiAgICAgICAgIyAgJHJlcGxhY2VtZW50X3RleHQKICAgICAgICAjIHJldHVybjoKICAgICAgICAjICAkcmh0ID0gcmVmZXJlbmNlIHRvIGFueSBoZXJlLWRvYyB0YXJnZXRzCiAgICAgICAgbXkgKCAkc2VsZiwgJHJlcGxhY2VtZW50X3RleHQgKSA9IEBfOwoKICAgICAgICAjIHF1aWNrIGNoZWNrCiAgICAgICAgcmV0dXJuIGlmICggJHJlcGxhY2VtZW50X3RleHQgIX4gLzw8LyApOwoKICAgICAgICAkc2VsZi0+d3JpdGVfbG9nZmlsZV9lbnRyeSgKICAgICAgICAgICAgInNjYW5uaW5nIHJlcGxhY2VtZW50IHRleHQgZm9yIGhlcmUtZG9jIHRhcmdldHNcbiIpOwoKICAgICAgICAjIHNhdmUgdGhlIGxvZ2dlciBvYmplY3QgZm9yIGVycm9yIG1lc3NhZ2VzCiAgICAgICAgbXkgJGxvZ2dlcl9vYmplY3QgPSAkc2VsZi0+W19sb2dnZXJfb2JqZWN0X107CgogICAgICAgICMgc2F2ZSBhbGwgbGV4aWNhbCB2YXJpYWJsZXMKICAgICAgICBteSAkcnN0YXRlID0gc2F2ZV90b2tlbml6ZXJfc3RhdGUoKTsKICAgICAgICBfZGVjcmVtZW50X2NvdW50KCk7ICAgICMgYXZvaWQgZXJyb3IgY2hlY2sgZm9yIG11bHRpcGxlIHRva2VuaXplcnMKCiAgICAgICAgIyBtYWtlIGEgbmV3IHRva2VuaXplcgogICAgICAgIG15ICR0b2tlbml6ZXIgPSBQZXJsOjpUaWR5OjpUb2tlbml6ZXItPm5ldygKICAgICAgICAgICAgc291cmNlX29iamVjdCAgICAgICAgPT4gXCRyZXBsYWNlbWVudF90ZXh0LAogICAgICAgICAgICBsb2dnZXJfb2JqZWN0ICAgICAgICA9PiAkbG9nZ2VyX29iamVjdCwKICAgICAgICAgICAgc3RhcnRpbmdfbGluZV9udW1iZXIgPT4gJGlucHV0X2xpbmVfbnVtYmVyLAogICAgICAgICk7CgogICAgICAgICMgc2NhbiB0aGUgcmVwbGFjZW1lbnQgdGV4dAogICAgICAgIHdoaWxlICggJHRva2VuaXplci0+Z2V0X2xpbmUoKSApIHsgfQoKICAgICAgICAjIHJlbW92ZSBhbnkgaGVyZSBkb2MgdGFyZ2V0cwogICAgICAgIG15ICRyaHQgPSB1bmRlZjsKICAgICAgICBpZiAoICR0b2tlbml6ZXItPltfaW5faGVyZV9kb2NfXSApIHsKICAgICAgICAgICAgJHJodCA9IFtdOwogICAgICAgICAgICBwdXNoIEB7JHJodH0sCiAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJHRva2VuaXplci0+W19oZXJlX2RvY190YXJnZXRfXSwKICAgICAgICAgICAgICAgICR0b2tlbml6ZXItPltfaGVyZV9xdW90ZV9jaGFyYWN0ZXJfXQogICAgICAgICAgICAgIF07CiAgICAgICAgICAgIGlmICggJHRva2VuaXplci0+W19yaGVyZV90YXJnZXRfbGlzdF9dICkgewogICAgICAgICAgICAgICAgcHVzaCBAeyRyaHR9LCBAeyAkdG9rZW5pemVyLT5bX3JoZXJlX3RhcmdldF9saXN0X10gfTsKICAgICAgICAgICAgICAgICR0b2tlbml6ZXItPltfcmhlcmVfdGFyZ2V0X2xpc3RfXSA9IHVuZGVmOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR0b2tlbml6ZXItPltfaW5faGVyZV9kb2NfXSA9IHVuZGVmOwogICAgICAgIH0KCiAgICAgICAgIyBub3cgaXRzIHNhZmUgdG8gcmVwb3J0IGVycm9ycwogICAgICAgIG15ICRzZXZlcmVfZXJyb3JfdXUgPSAkdG9rZW5pemVyLT5yZXBvcnRfdG9rZW5pemF0aW9uX2Vycm9ycygpOwoKICAgICAgICAjIFRPRE86IENvdWxkIHByb3BhZ2F0ZSBhIHNldmVyZSBlcnJvciB1cAoKICAgICAgICAjIHJlc3RvcmUgYWxsIHRva2VuaXplciBsZXhpY2FsIHZhcmlhYmxlcwogICAgICAgIHJlc3RvcmVfdG9rZW5pemVyX3N0YXRlKCRyc3RhdGUpOwoKICAgICAgICAjIHJldHVybiB0aGUgaGVyZSBkb2MgdGFyZ2V0cwogICAgICAgIHJldHVybiAkcmh0OwogICAgfSAjIyBlbmQgc3ViIHNjYW5fcmVwbGFjZW1lbnRfdGV4dAoKICAgIHN1YiBzY2FuX2JhcmVfaWRlbnRpZmllciB7CiAgICAgICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgICAgICAoICRpLCAkdG9rLCAkdHlwZSwgJHByb3RvdHlwZSApID0gJHNlbGYtPnNjYW5fYmFyZV9pZGVudGlmaWVyX2RvKAoKICAgICAgICAgICAgJGlucHV0X2xpbmUsCiAgICAgICAgICAgICRpLAogICAgICAgICAgICAkdG9rLAogICAgICAgICAgICAkdHlwZSwKICAgICAgICAgICAgJHByb3RvdHlwZSwKICAgICAgICAgICAgJHJ0b2tlbl9tYXAsCiAgICAgICAgICAgICRtYXhfdG9rZW5faW5kZXgKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBzY2FuX2JhcmVfaWRlbnRpZmllcgoKICAgIHN1YiBzY2FuX2lkZW50aWZpZXIgewoKICAgICAgICBteSAkc2VsZiA9IHNoaWZ0OwoKICAgICAgICAoCgogICAgICAgICAgICAkaSwKICAgICAgICAgICAgJHRvaywKICAgICAgICAgICAgJHR5cGUsCiAgICAgICAgICAgICRpZF9zY2FuX3N0YXRlLAogICAgICAgICAgICAkaWRlbnRpZmllciwKICAgICAgICAgICAgbXkgJHNwbGl0X3ByZXRva2VuX2ZsYWcKCiAgICAgICAgKSA9ICRzZWxmLT5zY2FuX2NvbXBsZXhfaWRlbnRpZmllcigKCiAgICAgICAgICAgICRpLAogICAgICAgICAgICAkaWRfc2Nhbl9zdGF0ZSwKICAgICAgICAgICAgJGlkZW50aWZpZXIsCiAgICAgICAgICAgICRydG9rZW5zLAogICAgICAgICAgICAkbWF4X3Rva2VuX2luZGV4LAogICAgICAgICAgICAkZXhwZWN0aW5nLAogICAgICAgICAgICAkcnBhcmVuX3R5cGUtPlskcGFyZW5fZGVwdGhdCiAgICAgICAgKTsKCiAgICAgICAgIyBDaGVjayBmb3Igc2lnbmFsIHRvIGZpeCBhIHNwZWNpYWwgdmFyaWFibGUgYWRqYWNlbnQgdG8gYSBrZXl3b3JkLAogICAgICAgICMgc3VjaCBhcyAnJF5PbmUkMCcuCiAgICAgICAgaWYgKCRzcGxpdF9wcmV0b2tlbl9mbGFnKSB7CgogICAgICAgICAgICAjIFRyeSB0byBmaXggaXQgYnkgc3BsaXR0aW5nIHRoZSBwcmV0b2tlbgogICAgICAgICAgICBpZiAoICAgJGkgPiAwCiAgICAgICAgICAgICAgICAmJiAkcnRva2Vucy0+WyAkaSAtIDEgXSBlcSAnXicKICAgICAgICAgICAgICAgICYmICRzZWxmLT5zcGxpdF9wcmV0b2tlbigxKSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRpZGVudGlmaWVyID0gc3Vic3RyKCAkaWRlbnRpZmllciwgMCwgMyApOwogICAgICAgICAgICAgICAgJHRvayAgICAgICAgPSAkaWRlbnRpZmllcjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIFRoaXMgc2hvdWxkbid0IGhhcHBlbiAuLi4KICAgICAgICAgICAgICAgIG15ICR2YXIgICAgPSBzdWJzdHIoICR0b2ssIDAsIDMgKTsKICAgICAgICAgICAgICAgIG15ICRleGNlc3MgPSBzdWJzdHIoICR0b2ssIDMgKTsKICAgICAgICAgICAgICAgICRzZWxmLT5pbnRlcnJ1cHRfbG9nZmlsZSgpOwogICAgICAgICAgICAgICAgJHNlbGYtPndhcm5pbmcoPDxFT00pOwokaW5wdXRfbGluZV9udW1iZXI6IFRyb3VibGUgcGFyc2luZyBhdCBjaGFyYWN0ZXJzICckZXhjZXNzJyBhZnRlciBzcGVjaWFsIHZhcmlhYmxlICckdmFyJy4KQSBzcGFjZSBtYXkgYmUgbmVlZGVkIGFmdGVyICckdmFyJy4KRU9NCiAgICAgICAgICAgICAgICAkc2VsZi0+cmVzdW1lX2xvZ2ZpbGUoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgc2Nhbl9pZGVudGlmaWVyCgogICAgdXNlIGNvbnN0YW50IFZFUklGWV9GQVNUU0NBTiA9PiAwOwogICAgbXkgJWZhc3Rfc2Nhbl9jb250ZXh0OwoKICAgIEJFR0lOIHsKICAgICAgICAlZmFzdF9zY2FuX2NvbnRleHQgPSAoCiAgICAgICAgICAgICckJyA9PiBTQ0FMQVJfQ09OVEVYVCwKICAgICAgICAgICAgJyonID0+IFNDQUxBUl9DT05URVhULAogICAgICAgICAgICAnQCcgPT4gTElTVF9DT05URVhULAogICAgICAgICAgICAnJScgPT4gTElTVF9DT05URVhULAogICAgICAgICAgICAnJicgPT4gVU5LTk9XTl9DT05URVhULAogICAgICAgICk7CiAgICB9ICMjIGVuZCBCRUdJTgoKICAgIHN1YiBzY2FuX3NpbXBsZV9pZGVudGlmaWVyIHsKCiAgICAgICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICAgICAgIyBUaGlzIGlzIGEgd3JhcHBlciBmb3Igc3ViIHNjYW5faWRlbnRpZmllci4gSXQgZG9lcyBhIGZhc3QgcHJlbGltaW5hcnkKICAgICAgICAjIHNjYW4gZm9yIGNlcnRhaW4gY29tbW9uIGlkZW50aWZpZXJzOgogICAgICAgICMgICAnJHZhcicsICdAdmFyJywgJXZhciwgKnZhciwgJnZhciwgJ0B7Li4ufScsICcley4uLn0nCiAgICAgICAgIyBJZiBpdCBkb2VzIG5vdCBmaW5kIG9uZSBvZiB0aGVzZSwgb3IgdGhpcyBpcyBhIHJlc3RhcnQsIGl0IGNhbGxzIHRoZQogICAgICAgICMgb3JpZ2luYWwgc2Nhbm5lciBkaXJlY3RseS4KCiAgICAgICAgIyBUaGlzIGdpdmVzIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIGZ1bGwgc2Nhbm5lciBpbiBhYm91dCAxLzQgdGhlCiAgICAgICAgIyB0b3RhbCBydW50aW1lIGZvciBhIHR5cGljYWwgaW5wdXQgc3RyZWFtLgoKICAgICAgICAjIE5vdGF0aW9uOgogICAgICAgICMgICAgICR2YXIgKiAyCiAgICAgICAgIyAgICAgXl4gICBeCiAgICAgICAgIyAgICAgfHwgIHwKICAgICAgICAjICAgICB8fCAgLS0tLSAkaV9uZXh0IFs9IG5leHQgbm9uYmxhbmsgcHJldG9rZW4gXQogICAgICAgICMgICAgIHwtLS0tJGlfcGx1c18xIFs9IGEgYmFyZXdvcmQgXQogICAgICAgICMgICAgIC0tLSRpX2JlZ2luIFs9IGEgc2lnaWxdCgogICAgICAgIG15ICRpX2JlZ2luICAgPSAkaTsKICAgICAgICBteSAkdG9rX2JlZ2luID0gJHRvazsKICAgICAgICBteSAkaV9wbHVzXzEgID0gJGkgKyAxOwogICAgICAgIG15ICRmYXN0X3NjYW5fdHlwZTsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIERvIGZ1bGwgc2NhbiBmb3IgYW55dGhpbmcgZm9sbG93aW5nIGEgcG9pbnRlciwgc3VjaCBhcwogICAgICAgICMgICAgICAkY3JlZi0+Jio7ICAgICMgYSBwb3N0ZGVyZWYKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGlmICggJGxhc3Rfbm9uYmxhbmtfdG9rZW4gZXEgJy0+JyApIHsKCiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBxdWljayBzY2FuIHdpdGggbGVhZGluZyBzaWdpbAogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBlbHNpZiAoICEkaWRfc2Nhbl9zdGF0ZQogICAgICAgICAgICAmJiAkaV9wbHVzXzEgPD0gJG1heF90b2tlbl9pbmRleAogICAgICAgICAgICAmJiAkZmFzdF9zY2FuX2NvbnRleHR7JHRva30gKQogICAgICAgIHsKICAgICAgICAgICAgJGNvbnRleHQgPSAkZmFzdF9zY2FuX2NvbnRleHR7JHRva307CgogICAgICAgICAgICAjIGxvb2sgZm9yICR2YXIsIEB2YXIsIC4uLgogICAgICAgICAgICBpZiAoICRydG9rZW5fdHlwZS0+WyRpX3BsdXNfMV0gZXEgJ3cnICkgewogICAgICAgICAgICAgICAgbXkgJHByZXR5cGVfbmV4dCA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgICAgIGlmICggJGlfcGx1c18xIDwgJG1heF90b2tlbl9pbmRleCApIHsKICAgICAgICAgICAgICAgICAgICBteSAkaV9uZXh0ID0gJGlfcGx1c18xICsgMTsKICAgICAgICAgICAgICAgICAgICBpZiAoICAgJHJ0b2tlbl90eXBlLT5bJGlfbmV4dF0gZXEgJ2InCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRpX25leHQgPCAkbWF4X3Rva2VuX2luZGV4ICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRpX25leHQgKz0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHByZXR5cGVfbmV4dCA9ICRydG9rZW5fdHlwZS0+WyRpX25leHRdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCAkcHJldHlwZV9uZXh0IG5lICc6JyAmJiAkcHJldHlwZV9uZXh0IG5lICInIiApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBGb3VuZCB0eXBlICdpJyBsaWtlICckdmFyJywgJ0B2YXInLCBvciAnJXZhcicKICAgICAgICAgICAgICAgICAgICAkaWRlbnRpZmllciAgICAgPSAkdG9rIC4gJHJ0b2tlbnMtPlskaV9wbHVzXzFdOwogICAgICAgICAgICAgICAgICAgICR0b2sgICAgICAgICAgICA9ICRpZGVudGlmaWVyOwogICAgICAgICAgICAgICAgICAgICR0eXBlICAgICAgICAgICA9ICdpJzsKICAgICAgICAgICAgICAgICAgICAkaSAgICAgICAgICAgICAgPSAkaV9wbHVzXzE7CiAgICAgICAgICAgICAgICAgICAgJGZhc3Rfc2Nhbl90eXBlID0gJHR5cGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgTG9vayBmb3IgQHsgb3IgJXsgIC4KICAgICAgICAgICAgIyBCdXQgd2UgbXVzdCBsZXQgdGhlIGZ1bGwgc2Nhbm5lciBoYW5kbGUgdGhpbmdzICR7IGJlY2F1c2UgaXQgbWF5CiAgICAgICAgICAgICMga2VlcCBnb2luZyB0byBnZXQgYSBjb21wbGV0ZSBpZGVudGlmaWVyIGxpa2UgJyR7I30nICAuCiAgICAgICAgICAgIGVsc2lmICgKICAgICAgICAgICAgICAgICRydG9rZW5fdHlwZS0+WyRpX3BsdXNfMV0gZXEgJ3snCiAgICAgICAgICAgICAgICAmJiAoICAgJHRva19iZWdpbiBlcSAnQCcKICAgICAgICAgICAgICAgICAgICB8fCAkdG9rX2JlZ2luIGVxICclJyApCiAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgJGlkZW50aWZpZXIgICAgID0gJHRvazsKICAgICAgICAgICAgICAgICR0eXBlICAgICAgICAgICA9ICd0JzsKICAgICAgICAgICAgICAgICRmYXN0X3NjYW5fdHlwZSA9ICR0eXBlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIyMgb3V0IG9mIHRyaWNrcwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBRdWljayBzY2FuIHdpdGggbGVhZGluZyAtPgogICAgICAgICMgTG9vayBmb3IgLT5bIGFuZCAtPnsKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAgICAkdG9rIGVxICctPicKICAgICAgICAgICAgJiYgJGkgPCAkbWF4X3Rva2VuX2luZGV4CiAgICAgICAgICAgICYmICggICAkcnRva2Vucy0+WyRpX3BsdXNfMV0gZXEgJ3snCiAgICAgICAgICAgICAgICB8fCAkcnRva2Vucy0+WyRpX3BsdXNfMV0gZXEgJ1snICkKICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICR0eXBlICAgICAgICAgICA9ICR0b2s7CiAgICAgICAgICAgICRmYXN0X3NjYW5fdHlwZSA9ICR0eXBlOwogICAgICAgICAgICAkaWRlbnRpZmllciAgICAgPSAkdG9rOwogICAgICAgICAgICAkY29udGV4dCAgICAgICAgPSBVTktOT1dOX0NPTlRFWFQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAjIyBvdXQgb2YgdHJpY2tzCiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIFZlcmlmeSBjb3JyZWN0bmVzcyBkdXJpbmcgZGV2ZWxvcG1lbnQKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpZiAoIFZFUklGWV9GQVNUU0NBTiAmJiAkZmFzdF9zY2FuX3R5cGUgKSB7CgogICAgICAgICAgICAjIFdlIHdpbGwgY2FsbCB0aGUgZnVsbCBtZXRob2QKICAgICAgICAgICAgbXkgJGlkZW50aWZpZXJfc2ltcGxlID0gJGlkZW50aWZpZXI7CiAgICAgICAgICAgIG15ICR0b2tfc2ltcGxlICAgICAgICA9ICR0b2s7CiAgICAgICAgICAgIG15ICRpX3NpbXBsZSAgICAgICAgICA9ICRpOwogICAgICAgICAgICBteSAkY29udGV4dF9zaW1wbGUgICAgPSAkY29udGV4dDsKCiAgICAgICAgICAgICR0b2sgPSAkdG9rX2JlZ2luOwogICAgICAgICAgICAkaSAgID0gJGlfYmVnaW47CiAgICAgICAgICAgICRzZWxmLT5zY2FuX2lkZW50aWZpZXIoKTsKCiAgICAgICAgICAgIGlmICggICAkdG9rIG5lICR0b2tfc2ltcGxlCiAgICAgICAgICAgICAgICB8fCAkdHlwZSBuZSAkZmFzdF9zY2FuX3R5cGUKICAgICAgICAgICAgICAgIHx8ICRpICE9ICRpX3NpbXBsZQogICAgICAgICAgICAgICAgfHwgJGlkZW50aWZpZXIgbmUgJGlkZW50aWZpZXJfc2ltcGxlCiAgICAgICAgICAgICAgICB8fCAkaWRfc2Nhbl9zdGF0ZQogICAgICAgICAgICAgICAgfHwgJGNvbnRleHQgbmUgJGNvbnRleHRfc2ltcGxlICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcHJpbnQgeypTVERFUlJ9IDw8RU9NOwpzY2FuX3NpbXBsZV9pZGVudGlmaWVyIGRpZmZlcnMgZnJvbSBzY2FuX2lkZW50aWZpZXI6CnNpbXBsZTogIGk9JGlfc2ltcGxlLCB0b2s9JHRva19zaW1wbGUsIHR5cGU9JGZhc3Rfc2Nhbl90eXBlLCBpZGVudD0kaWRlbnRpZmllcl9zaW1wbGUsIGNvbnRleHQ9JyRjb250ZXh0X3NpbXBsZQpmdWxsOiAgICBpPSRpLCB0b2s9JHRvaywgdHlwZT0kdHlwZSwgaWRlbnQ9JGlkZW50aWZpZXIsIGNvbnRleHQ9JyRjb250ZXh0IHN0YXRlPSRpZF9zY2FuX3N0YXRlCkVPTQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgY2FsbCBmdWxsIHNjYW5uZXIgaWYgZmFzdCBtZXRob2QgZGlkIG5vdCBzdWNjZWVkCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpZiAoICEkZmFzdF9zY2FuX3R5cGUgKSB7CiAgICAgICAgICAgICRzZWxmLT5zY2FuX2lkZW50aWZpZXIoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIHNjYW5fc2ltcGxlX2lkZW50aWZpZXIKCiAgICBzdWIgbWV0aG9kX29rX2hlcmUgewoKICAgICAgICBteSAkc2VsZiA9IHNoaWZ0OwoKICAgICAgICAjIFJldHVybjoKICAgICAgICAjICAgZmFsc2UgaWYgdGhpcyBpcyBkZWZpbml0ZWx5IGFuIGludmFsaWQgbWV0aG9kIGRlY2xhcmF0aW9uCiAgICAgICAgIyAgIHRydWUgb3RoZXJ3aXNlIChldmVuIGlmIG5vdCBzdXJlKQoKICAgICAgICAjIFdlIGFyZSB0cnlpbmcgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBvbGQgdXNlcyBvZiAnbWV0aG9kJwogICAgICAgICMgd2hlbiAtLXVzZS1mZWF0dXJlPWNsYXNzIGlzIHNldCAocnQxNDU3MDYpLgogICAgICAgICMgRm9yIGV4YW1wbGUsIHRoaXMgc2hvdWxkIGNhdXNlIGEgcmV0dXJuIG9mICdmYWxzZSc6CgogICAgICAgICMgIG1ldGhvZCBwYWludCA9PiBzdWIgewogICAgICAgICMgICAgcmV0dXJuOwogICAgICAgICMgIH07CgogICAgICAgICMgZnJvbSBkb19zY2FuX3N1YjoKICAgICAgICBteSAkaV9iZWcgICA9ICRpICsgMTsKICAgICAgICBteSAkcG9zX2JlZyA9ICRydG9rZW5fbWFwLT5bJGlfYmVnXTsKICAgICAgICBwb3MoJGlucHV0X2xpbmUpID0gJHBvc19iZWc7CgogICAgICAgICMgVEVTVCAxOiBsb29rIGEgdmFsaWQgc3ViIE5BTUUKICAgICAgICBpZiAoCiAgICAgICAgICAgICRpbnB1dF9saW5lID1+IG17XEdccyoKICAgICAgICAoKD86XHcqKD86J3w6OikpKikgICMgcGFja2FnZSAtIHNvbWV0aGluZyB0aGF0IGVuZHMgaW4gOjogb3IgJwogICAgICAgIChcdyspICAgICAgICAgICAgICAgIyBOQU1FICAgIC0gcmVxdWlyZWQKICAgICAgICB9Z2N4CiAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAjIEZvciBwb3NzaWJsZSBmdXR1cmUgdXNlLi4KICAgICAgICAgICAgIyNteSAkc3VibmFtZSA9ICQyOwogICAgICAgICAgICAjI215ICRwYWNrYWdlID0gJDEgPyAkMSA6IEVNUFRZX1NUUklORzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgVEVTVCAyOiBsb29rIGZvciBpbnZhbGlkIGNoYXJhY3RlcnMgYWZ0ZXIgbmFtZSwgc3VjaCBhcyBoZXJlOgogICAgICAgICMgICAgbWV0aG9kIHBhaW50ID0+IHN1YiB7CiAgICAgICAgIyAgICAgLi4uCiAgICAgICAgIyAgICB9CiAgICAgICAgbXkgJG5leHRfY2hhciA9IEVNUFRZX1NUUklORzsKICAgICAgICBpZiAoICRpbnB1dF9saW5lID1+IG0vXHMqKFxTKS9nY3ggKSB7ICRuZXh0X2NoYXIgPSAkMSB9CiAgICAgICAgaWYgKCAhJG5leHRfY2hhciB8fCAkbmV4dF9jaGFyIGVxICcjJyApIHsKICAgICAgICAgICAgKCAkbmV4dF9jaGFyLCBteSAkaV9uZXh0X3V1ICkgPQogICAgICAgICAgICAgICRzZWxmLT5maW5kX25leHRfbm9uYmxhbmtfdG9rZW4oICRtYXhfdG9rZW5faW5kZXgsCiAgICAgICAgICAgICAgICAkcnRva2VucywgJG1heF90b2tlbl9pbmRleCApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAhJG5leHRfY2hhciApIHsKCiAgICAgICAgICAgICMgb3V0IG9mIGNoYXJhY3RlcnMgLSBnaXZlIHVwCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgUG9zc2libHkgdmFsaWQgbmV4dCB0b2tlbiB0eXBlczoKICAgICAgICAjICcoJyBjb3VsZCBzdGFydCBwcm90b3R5cGUgb3Igc2lnbmF0dXJlCiAgICAgICAgIyAnOicgY291bGQgc3RhcnQgQVRUUklCVVRFCiAgICAgICAgIyAneycgY29sZCBzdGFydCBCTE9DSwogICAgICAgICMgJzsnIG9yICd9JyBjb3VsZCBlbmQgYSBzdGF0ZW1lbnQKICAgICAgICBpZiAoICRuZXh0X2NoYXIgIX4gL15bXChcOlx7XDtcfV0vICkgewoKICAgICAgICAgICAgIyBUaGlzIGRvZXMgbm90IG1hdGNoIHVzZSBmZWF0dXJlICdjbGFzcycgc3ludGF4CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgV2Ugd2lsbCBzdG9wIGhlcmUgYW5kIGFzc3VtZSB0aGF0IHRoaXMgaXMgdmFsaWQgc3ludGF4IGZvcgogICAgICAgICMgdXNlIGZlYXR1cmUgJ2NsYXNzJy4KICAgICAgICByZXR1cm4gMTsKICAgIH0gIyMgZW5kIHN1YiBtZXRob2Rfb2tfaGVyZQoKICAgIHN1YiBjbGFzc19va19oZXJlIHsKCiAgICAgICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICAgICAgIyBSZXR1cm46CiAgICAgICAgIyAgIGZhbHNlIGlmIHRoaXMgaXMgZGVmaW5pdGVseSBhbiBpbnZhbGlkIGNsYXNzIGRlY2xhcmF0aW9uCiAgICAgICAgIyAgIHRydWUgb3RoZXJ3aXNlIChldmVuIGlmIG5vdCBzdXJlKQoKICAgICAgICAjIFdlIGFyZSB0cnlpbmcgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBvbGQgdXNlcyBvZiAnY2xhc3MnCiAgICAgICAgIyB3aGVuIC0tdXNlLWZlYXR1cmU9Y2xhc3MgaXMgc2V0IChydDE0NTcwNikuICBXZSBsb29rIGFoZWFkCiAgICAgICAgIyBzZWUgaWYgdGhpcyB1c2Ugb2YgJ2NsYXNzJyBpcyBvYnZpb3VzbHkgaW5jb25zaXN0ZW50IHdpdGgKICAgICAgICAjIHRoZSBzeW50YXggb2YgdXNlIGZlYXR1cmUgJ2NsYXNzJy4gIFRoaXMgYWxsb3dzIHRoZSBkZWZhdWx0CiAgICAgICAgIyBzZXR0aW5nIC0tdXNlLWZlYXR1cmU9Y2xhc3MgdG8gd29yayBmb3Igb2xkIHN5bnRheCB0b28uCgogICAgICAgICMgVmFsaWQgY2xhc3MgZGVjbGFyYXRpb25zIGxvb2sgbGlrZQogICAgICAgICMgICBjbGFzcyBOQU1FID9BVFRSUyA/VkVSU0lPTiA/QkxPQ0sKICAgICAgICAjIHdoZXJlIEFUVFJTIFZFUlNJT04gYW5kIEJMT0NLIGFyZSBvcHRpb25hbAoKICAgICAgICAjIEZvciBleGFtcGxlLCB0aGlzIHNob3VsZCBwcm9kdWNlIGEgcmV0dXJuIG9mICdmYWxzZSc6CiAgICAgICAgIwogICAgICAgICMgICBjbGFzcyBFeHRlbmRzQmFzaWNBdHRyaWJ1dGVzIGlzIEJhc2ljQXR0cmlidXRlc3sKCiAgICAgICAgIyBURVNUIDE6IGNsYXNzIHN0bXQgY2FuIG9ubHkgZ28gd2hlcmUgYSBuZXcgc3RhdGVtZW50IGNhbiBzdGFydAogICAgICAgIGlmICggIW5ld19zdGF0ZW1lbnRfb2soKSApIHsgcmV0dXJuIH0KCiAgICAgICAgbXkgJGlfYmVnICAgPSAkaSArIDE7CiAgICAgICAgbXkgJHBvc19iZWcgPSAkcnRva2VuX21hcC0+WyRpX2JlZ107CiAgICAgICAgcG9zKCRpbnB1dF9saW5lKSA9ICRwb3NfYmVnOwoKICAgICAgICAjIFRFU1QgMjogbG9vayBmb3IgYSB2YWxpZCBOQU1FCiAgICAgICAgaWYgKAogICAgICAgICAgICAkaW5wdXRfbGluZSA9fiBte1xHXHMqCiAgICAgICAgKCg/Olx3Kig/Oid8OjopKSopICAjIHBhY2thZ2UgLSBzb21ldGhpbmcgdGhhdCBlbmRzIGluIDo6IG9yICcKICAgICAgICAoXHcrKSAgICAgICAgICAgICAgICMgTkFNRSAgICAtIHJlcXVpcmVkCiAgICAgICAgfWdjeAogICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgIyBGb3IgcG9zc2libGUgZnV0dXJlIHVzZS4uCiAgICAgICAgICAgICMjbXkgJHN1Ym5hbWUgPSAkMjsKICAgICAgICAgICAgIyNteSAkcGFja2FnZSA9ICQxID8gJDEgOiBFTVBUWV9TVFJJTkc7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIFRFU1QgMzogbG9vayBmb3IgdmFsaWQgY2hhcmFjdGVycyBhZnRlciBOQU1FCiAgICAgICAgbXkgJG5leHRfY2hhciA9IEVNUFRZX1NUUklORzsKICAgICAgICBpZiAoICRpbnB1dF9saW5lID1+IG0vXHMqKFxTKS9nY3ggKSB7ICRuZXh0X2NoYXIgPSAkMSB9CiAgICAgICAgaWYgKCAhJG5leHRfY2hhciB8fCAkbmV4dF9jaGFyIGVxICcjJyApIHsKICAgICAgICAgICAgKCAkbmV4dF9jaGFyLCBteSAkaV9uZXh0X3V1ICkgPQogICAgICAgICAgICAgICRzZWxmLT5maW5kX25leHRfbm9uYmxhbmtfdG9rZW4oICRtYXhfdG9rZW5faW5kZXgsCiAgICAgICAgICAgICAgICAkcnRva2VucywgJG1heF90b2tlbl9pbmRleCApOwogICAgICAgIH0KICAgICAgICBpZiAoICEkbmV4dF9jaGFyICkgewoKICAgICAgICAgICAgIyBvdXQgb2YgY2hhcmFjdGVycyAtIGdpdmUgdXAKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBNdXN0IHNlZSBvbmUgb2Y6IEFUVFJJQlVURSwgVkVSU0lPTiwgQkxPQ0ssIG9yIGVuZCBzdG10CgogICAgICAgICMgUG9zc2libHkgdmFsaWQgbmV4dCB0b2tlbiB0eXBlczoKICAgICAgICAjICc6JyBjb3VsZCBzdGFydCBBVFRSSUJVVEUKICAgICAgICAjICdcZCcgY291bGQgc3RhcnQgVkVSU0lPTgogICAgICAgICMgJ3snIGNvbGQgc3RhcnQgQkxPQ0sKICAgICAgICAjICc7JyBjb3VsZCBlbmQgYSBzdGF0ZW1lbnQKICAgICAgICAjICd9JyBjb3VsZCBlbmQgc3RhdGVtZW50IGJ1dCB3b3VsZCBiZSBzdHJhbmdlCgogICAgICAgIGlmICggJG5leHRfY2hhciAhfiAvXltcOlxkXHtcO1x9XS8gKSB7CgogICAgICAgICAgICAjIFRoaXMgZG9lcyBub3QgbWF0Y2ggdXNlIGZlYXR1cmUgJ2NsYXNzJyBzeW50YXgKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBXZSB3aWxsIHN0b3AgaGVyZSBhbmQgYXNzdW1lIHRoYXQgdGhpcyBpcyB2YWxpZCBzeW50YXggZm9yCiAgICAgICAgIyB1c2UgZmVhdHVyZSAnY2xhc3MnLgogICAgICAgIHJldHVybiAxOwogICAgfSAjIyBlbmQgc3ViIGNsYXNzX29rX2hlcmUKCiAgICBzdWIgc2Nhbl9pZCB7CiAgICAgICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgICAgICAoICRpLCAkdG9rLCAkdHlwZSwgJGlkX3NjYW5fc3RhdGUgKSA9ICRzZWxmLT5zY2FuX2lkX2RvKAoKICAgICAgICAgICAgJGlucHV0X2xpbmUsCiAgICAgICAgICAgICRpLCAkdG9rLAogICAgICAgICAgICAkcnRva2VucywKICAgICAgICAgICAgJHJ0b2tlbl9tYXAsCiAgICAgICAgICAgICRpZF9zY2FuX3N0YXRlLAogICAgICAgICAgICAkbWF4X3Rva2VuX2luZGV4CiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgc2Nhbl9pZAoKICAgIHN1YiBzY2FuX251bWJlciB7CiAgICAgICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgICAgICBteSAkbnVtYmVyOwogICAgICAgICggJGksICR0eXBlLCAkbnVtYmVyICkgPQogICAgICAgICAgJHNlbGYtPnNjYW5fbnVtYmVyX2RvKCAkaW5wdXRfbGluZSwgJGksICRydG9rZW5fbWFwLCAkdHlwZSwKICAgICAgICAgICAgJG1heF90b2tlbl9pbmRleCApOwogICAgICAgIHJldHVybiAkbnVtYmVyOwogICAgfSAjIyBlbmQgc3ViIHNjYW5fbnVtYmVyCgogICAgdXNlIGNvbnN0YW50IFZFUklGWV9GQVNUTlVNID0+IDA7CgogICAgc3ViIHNjYW5fbnVtYmVyX2Zhc3QgewoKICAgICAgICBteSAkc2VsZiA9IHNoaWZ0OwoKICAgICAgICAjIFRoaXMgaXMgYSB3cmFwcGVyIGZvciBzdWIgc2Nhbl9udW1iZXIuIEl0IGRvZXMgYSBmYXN0IHByZWxpbWluYXJ5CiAgICAgICAgIyBzY2FuIGZvciBhIHNpbXBsZSBpbnRlZ2VyLiAgSXQgY2FsbHMgdGhlIG9yaWdpbmFsIHNjYW5fbnVtYmVyIGlmIGl0CiAgICAgICAgIyBkb2VzIG5vdCBmaW5kIG9uZS4KCiAgICAgICAgbXkgJGlfYmVnaW4gICA9ICRpOwogICAgICAgIG15ICR0b2tfYmVnaW4gPSAkdG9rOwogICAgICAgIG15ICRudW1iZXI7CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIFF1aWNrIGNoZWNrIGZvciAoc2lnbmVkKSBpbnRlZ2VyCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAjIFRoaXMgd2lsbCBiZSB0aGUgc3RyaW5nIG9mIGRpZ2l0czoKICAgICAgICBteSAkaV9kICAgPSAkaTsKICAgICAgICBteSAkdG9rX2QgPSAkdG9rOwogICAgICAgIG15ICR0eXBfZCA9ICRydG9rZW5fdHlwZS0+WyRpX2RdOwoKICAgICAgICAjIGNoZWNrIGZvciBzaWduZWQgaW50ZWdlcgogICAgICAgIG15ICRzaWduID0gRU1QVFlfU1RSSU5HOwogICAgICAgIGlmICggICAkdHlwX2QgbmUgJ2QnCiAgICAgICAgICAgICYmICggJHR5cF9kIGVxICcrJyB8fCAkdHlwX2QgZXEgJy0nICkKICAgICAgICAgICAgJiYgJGlfZCA8ICRtYXhfdG9rZW5faW5kZXggKQogICAgICAgIHsKICAgICAgICAgICAgJHNpZ24gPSAkdG9rX2Q7CiAgICAgICAgICAgICRpX2QrKzsKICAgICAgICAgICAgJHRva19kID0gJHJ0b2tlbnMtPlskaV9kXTsKICAgICAgICAgICAgJHR5cF9kID0gJHJ0b2tlbl90eXBlLT5bJGlfZF07CiAgICAgICAgfQoKICAgICAgICAjIEhhbmRsZSBpbnRlZ2VycwogICAgICAgIGlmICgKICAgICAgICAgICAgJHR5cF9kIGVxICdkJwogICAgICAgICAgICAmJiAoCiAgICAgICAgICAgICAgICAkaV9kID09ICRtYXhfdG9rZW5faW5kZXgKICAgICAgICAgICAgICAgIHx8ICggICAkaV9kIDwgJG1heF90b2tlbl9pbmRleAogICAgICAgICAgICAgICAgICAgICYmICRydG9rZW5fdHlwZS0+WyAkaV9kICsgMSBdIG5lICcuJwogICAgICAgICAgICAgICAgICAgICYmICRydG9rZW5fdHlwZS0+WyAkaV9kICsgMSBdIG5lICd3JyApCiAgICAgICAgICAgICkKICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICMgTGV0IGxldCBmdWxsIHNjYW5uZXIgaGFuZGxlIG11bHRpLWRpZ2l0IGludGVnZXJzIGJlZ2lubmluZyB3aXRoCiAgICAgICAgICAgICMgJzAnIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgZXJyb3IgbWVzc2FnZXMuICBGb3IgZXhhbXBsZSwgJzAwOScgaXMKICAgICAgICAgICAgIyBub3QgYSB2YWxpZCBudW1iZXIuCgogICAgICAgICAgICBpZiAoICR0b2tfZCBlcSAnMCcgfHwgc3Vic3RyKCAkdG9rX2QsIDAsIDEgKSBuZSAnMCcgKSB7CiAgICAgICAgICAgICAgICAkbnVtYmVyID0gJHNpZ24gLiAkdG9rX2Q7CiAgICAgICAgICAgICAgICAkdHlwZSAgID0gJ24nOwogICAgICAgICAgICAgICAgJGkgICAgICA9ICRpX2Q7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgVmVyaWZ5IGNvcnJlY3RuZXNzIGR1cmluZyBkZXZlbG9wbWVudAogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGlmICggVkVSSUZZX0ZBU1ROVU0gJiYgZGVmaW5lZCgkbnVtYmVyKSApIHsKCiAgICAgICAgICAgICMgV2Ugd2lsbCBjYWxsIHRoZSBmdWxsIG1ldGhvZAogICAgICAgICAgICBteSAkdHlwZV9zaW1wbGUgICA9ICR0eXBlOwogICAgICAgICAgICBteSAkaV9zaW1wbGUgICAgICA9ICRpOwogICAgICAgICAgICBteSAkbnVtYmVyX3NpbXBsZSA9ICRudW1iZXI7CgogICAgICAgICAgICAkdG9rICAgID0gJHRva19iZWdpbjsKICAgICAgICAgICAgJGkgICAgICA9ICRpX2JlZ2luOwogICAgICAgICAgICAkbnVtYmVyID0gJHNlbGYtPnNjYW5fbnVtYmVyKCk7CgogICAgICAgICAgICBpZiAoICAgJHR5cGUgbmUgJHR5cGVfc2ltcGxlCiAgICAgICAgICAgICAgICB8fCAoICRpICE9ICRpX3NpbXBsZSAmJiAkaSA8PSAkbWF4X3Rva2VuX2luZGV4ICkKICAgICAgICAgICAgICAgIHx8ICRudW1iZXIgbmUgJG51bWJlcl9zaW1wbGUgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwcmludCB7KlNUREVSUn0gPDxFT007CnNjYW5fbnVtYmVyX2Zhc3QgZGlmZmVycyBmcm9tIHNjYW5fbnVtYmVyOgpzaW1wbGU6ICBpPSRpX3NpbXBsZSwgdHlwZT0kdHlwZV9zaW1wbGUsIG51bWJlcj0kbnVtYmVyX3NpbXBsZQpmdWxsOiAgaT0kaSwgdHlwZT0kdHlwZSwgbnVtYmVyPSRudW1iZXIKRU9NCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBjYWxsIGZ1bGwgc2Nhbm5lciBpZiBtYXkgbm90IGJlIGludGVnZXIKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIGlmICggIWRlZmluZWQoJG51bWJlcikgKSB7CiAgICAgICAgICAgICRudW1iZXIgPSAkc2VsZi0+c2Nhbl9udW1iZXIoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRudW1iZXI7CiAgICB9ICMjIGVuZCBzdWIgc2Nhbl9udW1iZXJfZmFzdAoKICAgICMgYSBzdWIgdG8gd2FybiBpZiB0b2tlbiBmb3VuZCB3aGVyZSB0ZXJtIGV4cGVjdGVkCiAgICBzdWIgZXJyb3JfaWZfZXhwZWN0aW5nX1RFUk0gewogICAgICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICAgICAgaWYgKCAkZXhwZWN0aW5nID09IFRFUk0gKSB7CiAgICAgICAgICAgIGlmICggJHJlYWxseV93YW50X3Rlcm17JGxhc3Rfbm9uYmxhbmtfdHlwZX0gKSB7CiAgICAgICAgICAgICAgICAkc2VsZi0+cmVwb3J0X3VuZXhwZWN0ZWQoCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCAgICAgICAgICAgPT4gJHRvaywKICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0aW5nICAgICAgID0+ICJ0ZXJtIiwKICAgICAgICAgICAgICAgICAgICAgICAgaV90b2sgICAgICAgICAgID0+ICRpX3RvaywKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9ub25ibGFua19pID0+ICRsYXN0X25vbmJsYW5rX2ksCiAgICAgICAgICAgICAgICAgICAgICAgIHJwcmV0b2tlbl9tYXAgICA9PiAkcnRva2VuX21hcCwKICAgICAgICAgICAgICAgICAgICAgICAgcnByZXRva2VuX3R5cGUgID0+ICRydG9rZW5fdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfbGluZSAgICAgID0+ICRpbnB1dF9saW5lLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgZXJyb3JfaWZfZXhwZWN0aW5nX1RFUk0KCiAgICAjIGEgc3ViIHRvIHdhcm4gaWYgdG9rZW4gZm91bmQgd2hlcmUgb3BlcmF0b3IgZXhwZWN0ZWQKICAgIHN1YiBlcnJvcl9pZl9leHBlY3RpbmdfT1BFUkFUT1IgewoKICAgICAgICBteSAoICRzZWxmLCAoJHRoaW5nKSApID0gQF87CgogICAgICAgICMgSXNzdWUgd2FybmluZyBvbiBlcnJvciBpZiBleHBlY3Rpbmcgb3BlcmF0b3IKICAgICAgICAjIEdpdmVuOgogICAgICAgICMgICAkdGhpbmcgPSB0aGUgdW5leHBlY3RlZCB0b2tlbiBvciBpc3N1ZQogICAgICAgICMgICAgICAgICAgPSB1bmRlZiB0byB1c2UgY3VycmVudCBwcmUtdG9rZW4KCiAgICAgICAgaWYgKCAkZXhwZWN0aW5nID09IE9QRVJBVE9SICkgewogICAgICAgICAgICBpZiAoICFkZWZpbmVkKCR0aGluZykgKSB7ICR0aGluZyA9ICR0b2sgfQogICAgICAgICAgICAkc2VsZi0+cmVwb3J0X3VuZXhwZWN0ZWQoCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZm91bmQgICAgICAgICAgID0+ICR0aGluZywKICAgICAgICAgICAgICAgICAgICBleHBlY3RpbmcgICAgICAgPT4gIm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICBpX3RvayAgICAgICAgICAgPT4gJGlfdG9rLAogICAgICAgICAgICAgICAgICAgIGxhc3Rfbm9uYmxhbmtfaSA9PiAkbGFzdF9ub25ibGFua19pLAogICAgICAgICAgICAgICAgICAgIHJwcmV0b2tlbl9tYXAgICA9PiAkcnRva2VuX21hcCwKICAgICAgICAgICAgICAgICAgICBycHJldG9rZW5fdHlwZSAgPT4gJHJ0b2tlbl90eXBlLAogICAgICAgICAgICAgICAgICAgIGlucHV0X2xpbmUgICAgICA9PiAkaW5wdXRfbGluZSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCAkaV90b2sgPT0gMCApIHsKICAgICAgICAgICAgICAgICRzZWxmLT5pbnRlcnJ1cHRfbG9nZmlsZSgpOwogICAgICAgICAgICAgICAgJHNlbGYtPndhcm5pbmcoIk1pc3NpbmcgJzsnIG9yICcsJyBhYm92ZT9cbiIpOwogICAgICAgICAgICAgICAgJHNlbGYtPnJlc3VtZV9sb2dmaWxlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBlcnJvcl9pZl9leHBlY3RpbmdfT1BFUkFUT1IKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBlbmQgc2Nhbm5lciBpbnRlcmZhY2VzCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgVG9rZW5pemF0aW9uIHN1YnMKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0KICAgIHN1YiBkb19HUkVBVEVSX1RIQU5fU0lHTiB7CgogICAgICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgICAgICMgJz4nCiAgICAgICAgJHNlbGYtPmVycm9yX2lmX2V4cGVjdGluZ19URVJNKCkKICAgICAgICAgIGlmICggJGV4cGVjdGluZyA9PSBURVJNICk7CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGRvX0dSRUFURVJfVEhBTl9TSUdOCgogICAgc3ViIGRvX1ZFUlRJQ0FMX0xJTkUgewoKICAgICAgICBteSAkc2VsZiA9IHNoaWZ0OwoKICAgICAgICAjICd8JwogICAgICAgICRzZWxmLT5lcnJvcl9pZl9leHBlY3RpbmdfVEVSTSgpCiAgICAgICAgICBpZiAoICRleHBlY3RpbmcgPT0gVEVSTSApOwogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBkb19WRVJUSUNBTF9MSU5FCgogICAgIyBBbiBpZGVudGlmaWVyIGluIHBvc3NpYmxlIGluZGlyZWN0IG9iamVjdCBsb2NhdGlvbiBmb2xsb3dlZCBieSBhbnkgb2YKICAgICMgdGhlc2UgdG9rZW5zOiAtPiAsIDsgfSAocGx1cyBvdGhlcnMpIGlzIG5vdCBhbiBpbmRpcmVjdCBvYmplY3QuIEZpeCBjMjU3LgogICAgbXkgJVpfdGVzdF9oYXNoOwoKICAgIEJFR0lOIHsKICAgICAgICBteSBAcVogPSBxdyMKICAgICAgICAgIC0+IDsgfSApIF0KICAgICAgICAgID0+ID1+ID0gPT0gIX4gfHwgPj0gIT0gKj0gLi4gJiYgfD0gLj0gLT0gKz0gPD0gJT0KICAgICAgICAgIF49ICYmPSB8fD0gLy89IDw9PgogICAgICAgICAgIzsKICAgICAgICBwdXNoIEBxWiwgJywnOwogICAgICAgIEBaX3Rlc3RfaGFzaHtAcVp9ID0gKDEpIHggc2NhbGFyKEBxWik7CiAgICB9CgogICAgc3ViIGRvX0RPTExBUl9TSUdOIHsKCiAgICAgICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICAgICAgIyAnJCcKICAgICAgICAjIHN0YXJ0IGxvb2tpbmcgZm9yIGEgc2NhbGFyCiAgICAgICAgJHNlbGYtPmVycm9yX2lmX2V4cGVjdGluZ19PUEVSQVRPUigiU2NhbGFyIikKICAgICAgICAgIGlmICggJGV4cGVjdGluZyA9PSBPUEVSQVRPUiApOwogICAgICAgICRzZWxmLT5zY2FuX3NpbXBsZV9pZGVudGlmaWVyKCk7CgogICAgICAgIGlmICggJGlkZW50aWZpZXIgZXEgJyReVycgKSB7CiAgICAgICAgICAgICRzZWxmLT5bX3Nhd19wZXJsX2Rhc2hfd19dID0gMTsKICAgICAgICB9CgogICAgICAgICMgQ2hlY2sgZm9yIGlkZW50aWZpZXIgaW4gaW5kaXJlY3Qgb2JqZWN0IHNsb3QKICAgICAgICAjICh2b3Jib2FyZC5wbCwgc29ydC50KS4gIFNvbWV0aGluZyBsaWtlOgogICAgICAgICMgICAvXihwcmludHxwcmludGZ8c29ydHxleGVjfHN5c3RlbSkkLwogICAgICAgIGlmICgKICAgICAgICAgICAgICAgJGlzX2luZGlyZWN0X29iamVjdF90YWtlcnskbGFzdF9ub25ibGFua190b2tlbn0KICAgICAgICAgICAgJiYgJGxhc3Rfbm9uYmxhbmtfdHlwZSBlcSAnaycKICAgICAgICAgICAgfHwgKCAoICRsYXN0X25vbmJsYW5rX3Rva2VuIGVxICcoJyApCiAgICAgICAgICAgICAgICAmJiAkaXNfaW5kaXJlY3Rfb2JqZWN0X3Rha2VyeyAkcnBhcmVuX3R5cGUtPlskcGFyZW5fZGVwdGhdIH0gKQogICAgICAgICAgICB8fCAoICAgJGxhc3Rfbm9uYmxhbmtfdHlwZSBlcSAndycKICAgICAgICAgICAgICAgIHx8ICRsYXN0X25vbmJsYW5rX3R5cGUgZXEgJ1UnICkgICAgIyBwb3NzaWJsZSBvYmplY3QKICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICAjIEFuIGlkZW50aWZpZXIgZm9sbG93ZWQgYnkgJy0+JyBpcyBub3QgaW5kaXJlY3Qgb2JqZWN0OwogICAgICAgICAgICAjIGZpeGVzIGIxMTc1LCBiMTE3Ni4gRml4IGMyNTc6IExpa2V3aXNlIGZvciBvdGhlciB0b2tlbnMgbGlrZQogICAgICAgICAgICAjIGNvbW1hLCBzZW1pY29sb24sIGNsb3NpbmcgYnJhY2UsIGFuZCBzaW5nbGUgc3BhY2UuCiAgICAgICAgICAgIG15ICggJG5leHRfbm9uYmxhbmtfdG9rZW4sICRpX25leHRfdXUgKSA9CiAgICAgICAgICAgICAgJHNlbGYtPmZpbmRfbmV4dF9ub25jb21tZW50X3Rva2VuKCAkaSwgJHJ0b2tlbnMsCiAgICAgICAgICAgICAgICAkbWF4X3Rva2VuX2luZGV4ICk7CiAgICAgICAgICAgICR0eXBlID0gJ1onIGlmICggISRaX3Rlc3RfaGFzaHskbmV4dF9ub25ibGFua190b2tlbn0gKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGRvX0RPTExBUl9TSUdOCgogICAgc3ViIGRvX0xFRlRfUEFSRU5USEVTSVMgewoKICAgICAgICBteSAkc2VsZiA9IHNoaWZ0OwoKICAgICAgICAjICcoJwogICAgICAgICsrJHBhcmVuX2RlcHRoOwoKICAgICAgICAjIHZhcmlhYmxlIHRvIGVuYWJsZSBjaGVjayBmb3IgYnJhY2UgYWZ0ZXIgY2xvc2luZyBwYXJlbiAoYzIzMCkKICAgICAgICBteSAkd2FudF9icmFjZSA9IEVNUFRZX1NUUklORzsKCiAgICAgICAgaWYgKCR3YW50X3BhcmVuKSB7CiAgICAgICAgICAgICRjb250YWluZXJfdHlwZSA9ICR3YW50X3BhcmVuOwogICAgICAgICAgICAkd2FudF9icmFjZSAgICAgPSAkd2FudF9wYXJlbjsKICAgICAgICAgICAgJHdhbnRfcGFyZW4gICAgID0gRU1QVFlfU1RSSU5HOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoIHN1YnN0ciggJHN0YXRlbWVudF90eXBlLCAwLCAzICkgZXEgJ3N1YicKICAgICAgICAgICAgJiYgJHN0YXRlbWVudF90eXBlID1+IC9ec3ViXGIvICkKICAgICAgICB7CiAgICAgICAgICAgICRjb250YWluZXJfdHlwZSA9ICRzdGF0ZW1lbnRfdHlwZTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRjb250YWluZXJfdHlwZSA9ICRsYXN0X25vbmJsYW5rX3Rva2VuOwoKICAgICAgICAgICAgIyBXZSBjYW4gY2hlY2sgZm9yIGEgc3ludGF4IGVycm9yIGhlcmUgb2YgdW5leHBlY3RlZCAnKCcsCiAgICAgICAgICAgICMgYnV0IHRoaXMgaXMgZ29pbmcgdG8gZ2V0IG1lc3N5Li4uCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRleHBlY3RpbmcgPT0gT1BFUkFUT1IKCiAgICAgICAgICAgICAgICAjIEJlIHN1cmUgdGhpcyBpcyBub3QgYSBtZXRob2QgY2FsbCBvZiB0aGUgZm9ybQogICAgICAgICAgICAgICAgIyAmbWV0aG9kKC4uLiksICRtZXRob2QtPiguLiksICZ7bWV0aG9kfSguLi4pLAogICAgICAgICAgICAgICAgIyAkcmVmWzJdKGxpc3QpIGlzIG9rICYgc2hvcnQgZm9yICRyZWZbMl0tPihsaXN0KQogICAgICAgICAgICAgICAgIyBOT1RFOiBhdCBwcmVzZW50LCBicmFjZXMgaW4gc29tZXRoaW5nIGxpa2UgJnsgeHh4IH0KICAgICAgICAgICAgICAgICMgYXJlIG5vdCBtYXJrZWQgYXMgYSBibG9jaywgd2UgbWlnaHQgaGF2ZSBhIG1ldGhvZCBjYWxsLgogICAgICAgICAgICAgICAgIyBBZGRlZCAnKScgdG8gZml4IGNhc2UgYzAxNywgc29tZXRoaW5nIGxpa2UgKCkoKSgpCiAgICAgICAgICAgICAgICAmJiAkbGFzdF9ub25ibGFua190b2tlbiAhfiAvXig/OltcXVx9XClcJl18XC1cPikvCiAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgIyByZWY6IGNhbWVsIDMgcCA3MDMuCiAgICAgICAgICAgICAgICBpZiAoICRsYXN0X2xhc3Rfbm9uYmxhbmtfdG9rZW4gZXEgJ2RvJyApIHsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+Y29tcGxhaW4oCiJkbyBTVUJST1VUSU5FIGlzIGRlcHJlY2F0ZWQ7IGNvbnNpZGVyICYgb3IgLT4gbm90YXRpb25cbiIKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICMgaWYgdGhpcyBpcyBhbiBlbXB0eSBsaXN0LCAoKSwgdGhlbiBpdCBpcyBub3QgYW4KICAgICAgICAgICAgICAgICAgICAjIGVycm9yOyBmb3IgZXhhbXBsZSwgd2UgbWlnaHQgaGF2ZSBhIGNvbnN0YW50IHBpIGFuZAogICAgICAgICAgICAgICAgICAgICMgaW52b2tlIGl0IHdpdGggcGkoKSBvciBqdXN0IHBpOwogICAgICAgICAgICAgICAgICAgIG15ICggJG5leHRfbm9uYmxhbmtfdG9rZW4sICRpX25leHRfdXUgKSA9CiAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+ZmluZF9uZXh0X25vbmJsYW5rX3Rva2VuKCAkaSwgJHJ0b2tlbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICRtYXhfdG9rZW5faW5kZXggKTsKCiAgICAgICAgICAgICAgICAgICAgIyBQYXRjaCBmb3IgYzAyOTogZ2l2ZSB1cCBlcnJvciBjaGVjayBpZgogICAgICAgICAgICAgICAgICAgICMgYSBzaWRlIGNvbW1lbnQgZm9sbG93cwogICAgICAgICAgICAgICAgICAgIGlmICggICAkbmV4dF9ub25ibGFua190b2tlbiBuZSAnKScKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJG5leHRfbm9uYmxhbmtfdG9rZW4gbmUgJyMnICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRoaW50OwoKICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPmVycm9yX2lmX2V4cGVjdGluZ19PUEVSQVRPUignKCcpOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkbGFzdF9ub25ibGFua190eXBlIGVxICdDJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoaW50ID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiRsYXN0X25vbmJsYW5rX3Rva2VuIGhhcyBhIHZvaWQgcHJvdG90eXBlXG4iOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2lmICggJGxhc3Rfbm9uYmxhbmtfdHlwZSBlcSAnaScgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICAgJGlfdG9rID4gMAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRsYXN0X25vbmJsYW5rX3Rva2VuID1+IC9eXCQvICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGludCA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRG8geW91IG1lYW4gJyRsYXN0X25vbmJsYW5rX3Rva2VuLT4oJyA/XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMgbm8gaGludAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkaGludCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPmludGVycnVwdF9sb2dmaWxlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+d2FybmluZygkaGludCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+cmVzdW1lX2xvZ2ZpbGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gIyMgZW5kIGlmICggJG5leHRfbm9uYmxhbmtfdG9rZW4uLi4KICAgICAgICAgICAgICAgIH0gIyMgZW5kIGVsc2UgWyBpZiAoICRsYXN0X2xhc3Rfbm9uYmxhbmtfdG9rZW4uLi4KICAgICAgICAgICAgfSAjIyBlbmQgaWYgKCAkZXhwZWN0aW5nID09IE9QRVJBVE9SLi4uCiAgICAgICAgfQoKICAgICAgICAoICR0eXBlX3NlcXVlbmNlLCAkaW5kZW50X2ZsYWcgKSA9CiAgICAgICAgICAkc2VsZi0+aW5jcmVhc2VfbmVzdGluZ19kZXB0aCggUEFSRU4sICRydG9rZW5fbWFwLT5bJGlfdG9rXSApOwoKICAgICAgICAjIHByb3BhZ2F0ZSB0eXBlcyBkb3duIHRocm91Z2ggbmVzdGVkIHBhcmVucwogICAgICAgICMgZm9yIGV4YW1wbGU6IHRoZSBzZWNvbmQgcGFyZW4gaW4gJ2lmICgoJyB3b3VsZCBiZSBzdHJ1Y3R1cmFsCiAgICAgICAgIyBzaW5jZSB0aGUgZmlyc3QgaXMuCgogICAgICAgIGlmICggJGxhc3Rfbm9uYmxhbmtfdG9rZW4gZXEgJygnICkgewogICAgICAgICAgICAkdHlwZSA9ICRsYXN0X25vbmJsYW5rX3R5cGU7CiAgICAgICAgfQoKICAgICAgICAjICAgICBXZSBleGNsdWRlIHBhcmVucyBhcyBzdHJ1Y3R1cmFsIGFmdGVyIGEgJywnIGJlY2F1c2UgaXQKICAgICAgICAjICAgICBjYXVzZXMgc3VidGxlIHByb2JsZW1zIHdpdGggY29udGludWF0aW9uIGluZGVudGF0aW9uIGZvcgogICAgICAgICMgICAgIHNvbWV0aGluZyBsaWtlIHRoaXMsIHdoZXJlIHRoZSBmaXJzdCAnb3InIHdpbGwgbm90IGdldAogICAgICAgICMgICAgIGluZGVudGVkLgogICAgICAgICMKICAgICAgICAjICAgICAgICAgYXNzZXJ0KAogICAgICAgICMgICAgICAgICAgICAgX19MSU5FX18sCiAgICAgICAgIyAgICAgICAgICAgICAoIG5vdCBkZWZpbmVkICRjaGVjayApCiAgICAgICAgIyAgICAgICAgICAgICAgIG9yIHJlZiAkY2hlY2sKICAgICAgICAjICAgICAgICAgICAgICAgb3IgJGNoZWNrIGVxICJuZXciCiAgICAgICAgIyAgICAgICAgICAgICAgIG9yICRjaGVjayBlcSAib2xkIiwKICAgICAgICAjICAgICAgICAgKTsKICAgICAgICAjCiAgICAgICAgIyAgICAgTGlrZXdpc2UsIHdlIGV4Y2x1ZGUgcGFyZW5zIHdoZXJlIGEgc3RhdGVtZW50IGNhbiBzdGFydAogICAgICAgICMgICAgIGJlY2F1c2Ugb2YgcHJvYmxlbXMgd2l0aCBjb250aW51YXRpb24gaW5kZW50YXRpb24sIGxpa2UKICAgICAgICAjICAgICB0aGVzZToKICAgICAgICAjCiAgICAgICAgIyAgICAgICAgICgkZmlyc3RsaW5lID1+IC9eI1whLipwZXJsLykKICAgICAgICAjICAgICAgICAgYW5kIChwcmludCAkRmlsZTo6RmluZDo6bmFtZSwgIlxuIikKICAgICAgICAjICAgICAgICAgICBhbmQgKHJldHVybiAxKTsKICAgICAgICAjCiAgICAgICAgIyAgICAgICAgIChyZWYoJHVzYWdlX2ZyZWYpID1+IC9DT0RFLykKICAgICAgICAjICAgICAgICAgPyAmJHVzYWdlX2ZyZWYKICAgICAgICAjICAgICAgICAgICA6ICgmYmxhc3RfdXNhZ2UsICZibGFzdF9wYXJhbXMsICZibGFzdF9nZW5lcmFsX3BhcmFtcyk7CgogICAgICAgIGVsc2UgewogICAgICAgICAgICAkdHlwZSA9ICd7JzsKICAgICAgICB9CgogICAgICAgIGlmICggJGxhc3Rfbm9uYmxhbmtfdHlwZSBlcSAnKScgKSB7CiAgICAgICAgICAgICRzZWxmLT53YXJuaW5nKAogICAgICAgICAgICAgICAgIlN5bnRheCBlcnJvcj8gZm91bmQgdG9rZW4gJyRsYXN0X25vbmJsYW5rX3R5cGUnIHRoZW4gJygnXG4iKTsKICAgICAgICB9CgogICAgICAgICMgZ2l0ICMxMDU6IENvcHkgY29udGFpbmVyIHR5cGUgYW5kIHdhbnQtYnJhY2UgZmxhZyBhdCAnKSAoJzsKICAgICAgICAjIHByb3BhZ2F0ZSB0aGUgY29udGFpbmVyIHR5cGUgb253YXJkIHNvIHRoYXQgYW55IHN1YnNlcXVlbnQgYnJhY2UgZ2V0cwogICAgICAgICMgY29ycmVjdGx5IG1hcmtlZC4gIEkgaGF2ZSBpbXBsZW1lbnRlZCB0aGlzIGFzIGEgZ2VuZXJhbCBydWxlLCB3aGljaAogICAgICAgICMgc2hvdWxkIGJlIHNhZmUsIGJ1dCBpZiBuZWNlc3NhcnkgaXQgY291bGQgYmUgcmVzdHJpY3RlZCB0byBjZXJ0YWluCiAgICAgICAgIyBjb250YWluZXIgc3RhdGVtZW50IHR5cGVzIHN1Y2ggYXMgJ2ZvcicuCiAgICAgICAgaWYgKCAkbGFzdF9ub25ibGFua190b2tlbiBlcSAnKScgKSB7CiAgICAgICAgICAgIG15ICRydmFycyA9ICRycGFyZW5fdmFycy0+WyRwYXJlbl9kZXB0aF07CiAgICAgICAgICAgIGlmICggZGVmaW5lZCgkcnZhcnMpICkgewogICAgICAgICAgICAgICAgJGNvbnRhaW5lcl90eXBlID0gJHJwYXJlbl90eXBlLT5bJHBhcmVuX2RlcHRoXTsKICAgICAgICAgICAgICAgICggbXkgJHR5cGVfbHBfdXUsICR3YW50X2JyYWNlICkgPSBAeyRydmFyc307CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRycGFyZW5fdHlwZS0+WyRwYXJlbl9kZXB0aF0gICAgICAgICAgICA9ICRjb250YWluZXJfdHlwZTsKICAgICAgICAkcnBhcmVuX3ZhcnMtPlskcGFyZW5fZGVwdGhdICAgICAgICAgICAgPSBbICR0eXBlLCAkd2FudF9icmFjZSBdOwogICAgICAgICRycGFyZW5fc2VtaWNvbG9uX2NvdW50LT5bJHBhcmVuX2RlcHRoXSA9IDA7CgogICAgICAgIHJldHVybjsKCiAgICB9ICMjIGVuZCBzdWIgZG9fTEVGVF9QQVJFTlRIRVNJUwoKICAgIHN1YiBkb19SSUdIVF9QQVJFTlRIRVNJUyB7CgogICAgICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgICAgICMgJyknCiAgICAgICAgKCAkdHlwZV9zZXF1ZW5jZSwgJGluZGVudF9mbGFnICkgPQogICAgICAgICAgJHNlbGYtPmRlY3JlYXNlX25lc3RpbmdfZGVwdGgoIFBBUkVOLCAkcnRva2VuX21hcC0+WyRpX3Rva10gKTsKCiAgICAgICAgbXkgJHJ2YXJzID0gJHJwYXJlbl92YXJzLT5bJHBhcmVuX2RlcHRoXTsKICAgICAgICBpZiAoIGRlZmluZWQoJHJ2YXJzKSApIHsKICAgICAgICAgICAgbXkgKCAkdHlwZV9scCwgJHdhbnRfYnJhY2VfdXUgKSA9IEB7JHJ2YXJzfTsKICAgICAgICAgICAgaWYgKCAkdHlwZV9scCAmJiAkdHlwZV9scCBlcSAneycgKSB7CiAgICAgICAgICAgICAgICAkdHlwZSA9ICd9JzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJGNvbnRhaW5lcl90eXBlID0gJHJwYXJlbl90eXBlLT5bJHBhcmVuX2RlcHRoXTsKCiAgICAgICAgIyByZXN0b3JlIHN0YXRlbWVudCB0eXBlIGFzICdzdWInIGF0IGNsb3NpbmcgcGFyZW4gb2YgYSBzaWduYXR1cmUKICAgICAgICAjIHNvIHRoYXQgYSBzdWJzZXF1ZW50ICc6JyBpcyBpZGVudGlmaWVkIGFzIGFuIGF0dHJpYnV0ZQogICAgICAgIGlmICggc3Vic3RyKCAkY29udGFpbmVyX3R5cGUsIDAsIDMgKSBlcSAnc3ViJwogICAgICAgICAgICAmJiAkY29udGFpbmVyX3R5cGUgPX4gL15zdWJcYi8gKQogICAgICAgIHsKICAgICAgICAgICAgJHN0YXRlbWVudF90eXBlID0gJGNvbnRhaW5lcl90eXBlOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkaXNfZm9yX2ZvcmVhY2h7ICRycGFyZW5fdHlwZS0+WyRwYXJlbl9kZXB0aF0gfSApIHsKICAgICAgICAgICAgbXkgJG51bV9zYyA9ICRycGFyZW5fc2VtaWNvbG9uX2NvdW50LT5bJHBhcmVuX2RlcHRoXTsKICAgICAgICAgICAgaWYgKCAkbnVtX3NjID4gMCAmJiAkbnVtX3NjICE9IDIgKSB7CiAgICAgICAgICAgICAgICAkc2VsZi0+d2FybmluZygiRXhwZWN0ZWQgMiAnOycgaW4gJ2Zvcig7OyknIGJ1dCBzYXcgJG51bV9zY1xuIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICggJHBhcmVuX2RlcHRoID4gMCApIHsgJHBhcmVuX2RlcHRoLS0gfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBkb19SSUdIVF9QQVJFTlRIRVNJUwoKICAgIHN1YiBkb19DT01NQSB7CgogICAgICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgICAgICMgJywnCiAgICAgICAgaWYgKCAkbGFzdF9ub25ibGFua190eXBlIGVxICcsJyApIHsKICAgICAgICAgICAgJHNlbGYtPmNvbXBsYWluKCJSZXBlYXRlZCAnLCdzIFxuIik7CiAgICAgICAgfQoKICAgICAgICAjIE5vdGUgdGhhdCB3ZSBoYXZlIHRvIGNoZWNrIGJvdGggdG9rZW4gYW5kIHR5cGUgaGVyZSBiZWNhdXNlIGEKICAgICAgICAjIGNvbW1hIGZvbGxvd2luZyBhIHF3IGxpc3QgY2FuIGhhdmUgbGFzdCB0b2tlbj0nKCcgYnV0IHR5cGUgPSAncScKICAgICAgICBlbHNpZiAoICRsYXN0X25vbmJsYW5rX3Rva2VuIGVxICcoJyAmJiAkbGFzdF9ub25ibGFua190eXBlIGVxICd7JyApIHsKICAgICAgICAgICAgJHNlbGYtPndhcm5pbmcoIlVuZXhwZWN0ZWQgbGVhZGluZyAnLCcgYWZ0ZXIgYSAnKCdcbiIpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIyBubyBjb21wbGFpbnRzIGFib3V0IHRoZSBjb21tYQogICAgICAgIH0KCiAgICAgICAgIyBwYXRjaCBmb3Igb3BlcmF0b3JfZXhwZWN0ZWQ6IG5vdGUgaWYgd2UgYXJlIGluIHRoZSBsaXN0ICh1c2UudCkKICAgICAgICBpZiAoICRzdGF0ZW1lbnRfdHlwZSBlcSAndXNlJyApIHsgJHN0YXRlbWVudF90eXBlID0gJ191c2UnIH0KICAgICAgICByZXR1cm47CgogICAgfSAjIyBlbmQgc3ViIGRvX0NPTU1BCgogICAgc3ViIGRvX1NFTUlDT0xPTiB7CgogICAgICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgICAgICMgJzsnCiAgICAgICAgJGNvbnRleHQgICAgICAgID0gVU5LTk9XTl9DT05URVhUOwogICAgICAgICRzdGF0ZW1lbnRfdHlwZSA9IEVNUFRZX1NUUklORzsKICAgICAgICAkd2FudF9wYXJlbiAgICAgPSBFTVBUWV9TVFJJTkc7CgogICAgICAgIGlmICggJGlzX2Zvcl9mb3JlYWNoeyAkcnBhcmVuX3R5cGUtPlskcGFyZW5fZGVwdGhdIH0gKQogICAgICAgIHsgICAgIyBtYXJrIDsgaW4gZm9yIGxvb3AKCiAgICAgICAgICAgICMgQmUgY2FyZWZ1bDogd2UgZG8gbm90IHdhbnQgYSBzZW1pY29sb24gc3VjaCBhcyB0aGUKICAgICAgICAgICAgIyBmb2xsb3dpbmcgdG8gYmUgaW5jbHVkZWQ6CiAgICAgICAgICAgICMKICAgICAgICAgICAgIyAgICBmb3IgKHNvcnQge3N0cmNvbGwoJGEsJGIpO30ga2V5cyAlaW52ZXN0bWVudHMpIHsKCiAgICAgICAgICAgIGlmICggICAkYnJhY2VfZGVwdGggPT0gJHJkZXB0aF9hcnJheS0+W1BBUkVOXVtCUkFDRV1bJHBhcmVuX2RlcHRoXQogICAgICAgICAgICAgICAgJiYgJHNxdWFyZV9icmFja2V0X2RlcHRoID09CiAgICAgICAgICAgICAgICAkcmRlcHRoX2FycmF5LT5bUEFSRU5dW1NRVUFSRV9CUkFDS0VUXVskcGFyZW5fZGVwdGhdICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICR0eXBlID0gJ2YnOwogICAgICAgICAgICAgICAgJHJwYXJlbl9zZW1pY29sb25fY291bnQtPlskcGFyZW5fZGVwdGhdKys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGRvX1NFTUlDT0xPTgoKICAgIHN1YiBkb19RVU9UQVRJT05fTUFSSyB7CgogICAgICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgICAgICMgJyInCiAgICAgICAgJHNlbGYtPmVycm9yX2lmX2V4cGVjdGluZ19PUEVSQVRPUigiU3RyaW5nIikKICAgICAgICAgIGlmICggJGV4cGVjdGluZyA9PSBPUEVSQVRPUiApOwogICAgICAgICRpbl9xdW90ZSAgICAgICAgICAgICAgICA9IDE7CiAgICAgICAgJHR5cGUgICAgICAgICAgICAgICAgICAgID0gJ1EnOwogICAgICAgICRhbGxvd2VkX3F1b3RlX21vZGlmaWVycyA9IEVNUFRZX1NUUklORzsKICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgZG9fUVVPVEFUSU9OX01BUksKCiAgICBzdWIgZG9fQVBPU1RST1BIRSB7CgogICAgICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgICAgICMgIiciCiAgICAgICAgJHNlbGYtPmVycm9yX2lmX2V4cGVjdGluZ19PUEVSQVRPUigiU3RyaW5nIikKICAgICAgICAgIGlmICggJGV4cGVjdGluZyA9PSBPUEVSQVRPUiApOwogICAgICAgICRpbl9xdW90ZSAgICAgICAgICAgICAgICA9IDE7CiAgICAgICAgJHR5cGUgICAgICAgICAgICAgICAgICAgID0gJ1EnOwogICAgICAgICRhbGxvd2VkX3F1b3RlX21vZGlmaWVycyA9IEVNUFRZX1NUUklORzsKICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgZG9fQVBPU1RST1BIRQoKICAgIHN1YiBkb19CQUNLVElDSyB7CgogICAgICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgICAgICMgJ2AnCiAgICAgICAgJHNlbGYtPmVycm9yX2lmX2V4cGVjdGluZ19PUEVSQVRPUigiU3RyaW5nIikKICAgICAgICAgIGlmICggJGV4cGVjdGluZyA9PSBPUEVSQVRPUiApOwogICAgICAgICRpbl9xdW90ZSAgICAgICAgICAgICAgICA9IDE7CiAgICAgICAgJHR5cGUgICAgICAgICAgICAgICAgICAgID0gJ1EnOwogICAgICAgICRhbGxvd2VkX3F1b3RlX21vZGlmaWVycyA9IEVNUFRZX1NUUklORzsKICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgZG9fQkFDS1RJQ0sKCiAgICBzdWIgZG9fU0xBU0ggewoKICAgICAgICBteSAkc2VsZiA9IHNoaWZ0OwoKICAgICAgICAjICcvJwogICAgICAgIG15ICRpc19wYXR0ZXJuOwoKICAgICAgICAjIGEgcGF0dGVybiBjYW5ub3QgZm9sbG93IGNlcnRhaW4ga2V5d29yZHMgd2hpY2ggdGFrZSBvcHRpb25hbAogICAgICAgICMgYXJndW1lbnRzLCBsaWtlICdzaGlmdCcgYW5kICdwb3AnLiBTZWUgYWxzbyAnPycuCiAgICAgICAgaWYgKAogICAgICAgICAgICAkbGFzdF9ub25ibGFua190eXBlIGVxICdrJwogICAgICAgICAgICAmJiAkaXNfa2V5d29yZF9yZWplY3Rpbmdfc2xhc2hfYXNfcGF0dGVybl9kZWxpbWl0ZXJ7CiAgICAgICAgICAgICAgICAkbGFzdF9ub25ibGFua190b2tlbn0KICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRpc19wYXR0ZXJuID0gMDsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkZXhwZWN0aW5nID09IFVOS05PV04gKSB7ICAgICMgaW5kZXRlcm1pbmF0ZSwgbXVzdCBndWVzcy4uCiAgICAgICAgICAgIG15ICRtc2c7CiAgICAgICAgICAgICggJGlzX3BhdHRlcm4sICRtc2cgKSA9CiAgICAgICAgICAgICAgJHNlbGYtPmd1ZXNzX2lmX3BhdHRlcm5fb3JfZGl2aXNpb24oICRpLCAkcnRva2VucywgJHJ0b2tlbl90eXBlLAogICAgICAgICAgICAgICAgJHJ0b2tlbl9tYXAsICRtYXhfdG9rZW5faW5kZXggKTsKCiAgICAgICAgICAgIGlmICgkbXNnKSB7CiAgICAgICAgICAgICAgICAkc2VsZi0+d3JpdGVfZGlhZ25vc3RpY3MoIkRJVklERTokbXNnXG4iKTsKICAgICAgICAgICAgICAgICRzZWxmLT53cml0ZV9sb2dmaWxlX2VudHJ5KCRtc2cpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgeyAkaXNfcGF0dGVybiA9ICggJGV4cGVjdGluZyA9PSBURVJNICkgfQoKICAgICAgICBpZiAoJGlzX3BhdHRlcm4pIHsKICAgICAgICAgICAgJGluX3F1b3RlICAgICAgICAgICAgICAgID0gMTsKICAgICAgICAgICAgJHR5cGUgICAgICAgICAgICAgICAgICAgID0gJ1EnOwogICAgICAgICAgICAkYWxsb3dlZF9xdW90ZV9tb2RpZmllcnMgPSAkcXVvdGVfbW9kaWZpZXJzeydtJ307CiAgICAgICAgfQogICAgICAgIGVsc2UgeyAgICAjIG5vdCBhIHBhdHRlcm47IGNoZWNrIGZvciBhIC89IHRva2VuCgogICAgICAgICAgICBpZiAoICRydG9rZW5zLT5bICRpICsgMSBdIGVxICc9JyApIHsgICAgIyBmb3JtIHRva2VuIC89CiAgICAgICAgICAgICAgICAkaSsrOwogICAgICAgICAgICAgICAgJHRvayAgPSAnLz0nOwogICAgICAgICAgICAgICAgJHR5cGUgPSAkdG9rOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjREVCVUcgLSBjb2xsZWN0aW5nIGluZm8gb24gd2hhdCB0b2tlbnMgZm9sbG93IGEgZGl2aWRlCiAgICAgICAgICAgICMgZm9yIGRldmVsb3BtZW50IG9mIGd1ZXNzaW5nIGFsZ29yaXRobQogICAgICAgICAgICAjIyAgaWYgKAogICAgICAgICAgICAjIyAgICAgICRzZWxmLT5pc19wb3NzaWJsZV9udW1lcmF0b3IoICRpLCAkcnRva2VucywKICAgICAgICAgICAgIyMgICAgICAgICAgJG1heF90b2tlbl9pbmRleCApIDwgMAogICAgICAgICAgICAjIyAgICApCiAgICAgICAgICAgICMjICB7CiAgICAgICAgICAgICMjICAgICAgJHNlbGYtPndyaXRlX2RpYWdub3N0aWNzKCJESVZJREU/ICRpbnB1dF9saW5lXG4iKTsKICAgICAgICAgICAgIyMgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGRvX1NMQVNICgogICAgc3ViIGRvX0xFRlRfQ1VSTFlfQlJBQ0tFVCB7CgogICAgICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgICAgICMgJ3snCiAgICAgICAgIyBpZiB3ZSBqdXN0IHNhdyBhICcpJywgd2Ugd2lsbCBsYWJlbCB0aGlzIGJsb2NrIHdpdGgKICAgICAgICAjIGl0cyB0eXBlLiAgV2UgbmVlZCB0byBkbyB0aGlzIHRvIGFsbG93IHN1YgogICAgICAgICMgY29kZV9ibG9ja190eXBlIHRvIGRldGVybWluZSBpZiB0aGlzIGJyYWNlIHN0YXJ0cyBhCiAgICAgICAgIyBjb2RlIGJsb2NrIG9yIGFub255bW91cyBoYXNoLiAgKFRoZSB0eXBlIG9mIGEgcGFyZW4KICAgICAgICAjIHBhaXIgaXMgdGhlIHByZWNlZGluZyB0b2tlbiwgc3VjaCBhcyAnaWYnLCAnZWxzZScsCiAgICAgICAgIyBldGMpLgogICAgICAgICRjb250YWluZXJfdHlwZSA9IEVNUFRZX1NUUklORzsKCiAgICAgICAgIyBBVFRSUzogZm9yIGEgJ3snIGZvbGxvd2luZyBhbiBhdHRyaWJ1dGUgbGlzdCwgcmVzZXQKICAgICAgICAjIHRoaW5ncyB0byBsb29rIGxpa2Ugd2UganVzdCBzYXcgYSBzdWIgbmFtZQogICAgICAgICMgQWRkZWQgJ3BhY2thZ2UnIChjYW4gYmUgJ2NsYXNzJykgZm9yIC0tdXNlLWZlYXR1cmU9Y2xhc3MgKHJ0MTQ1NzA2KQogICAgICAgIGlmICggc3Vic3RyKCAkc3RhdGVtZW50X3R5cGUsIDAsIDMgKSBlcSAnc3ViJyApIHsKICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfdG9rZW4gPSAkc3RhdGVtZW50X3R5cGU7CiAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX3R5cGUgID0gJ1MnOyAgICAgICAgICAgICAgICMgYzI1MCBjaGFuZ2UKICAgICAgICAgICAgJHN0YXRlbWVudF90eXBlICAgICAgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggc3Vic3RyKCAkc3RhdGVtZW50X3R5cGUsIDAsIDcgKSBlcSAncGFja2FnZScgKSB7CiAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX3Rva2VuID0gJHN0YXRlbWVudF90eXBlOwogICAgICAgICAgICAkbGFzdF9ub25ibGFua190eXBlICA9ICdQJzsgICAgICAgICAgICAgICAjIGMyNTAgY2hhbmdlCiAgICAgICAgICAgICRzdGF0ZW1lbnRfdHlwZSAgICAgID0gRU1QVFlfU1RSSU5HOwogICAgICAgIH0KCiAgICAgICAgIyBwYXRjaCBmb3IgU1dJVENIL0NBU0U6IGhpZGUgdGhlc2Uga2V5d29yZHMgZnJvbSBhbiBpbW1lZGlhdGVseQogICAgICAgICMgZm9sbG93aW5nIG9wZW5pbmcgYnJhY2UKICAgICAgICBlbHNpZiAoICggJHN0YXRlbWVudF90eXBlIGVxICdjYXNlJyB8fCAkc3RhdGVtZW50X3R5cGUgZXEgJ3doZW4nICkKICAgICAgICAgICAgJiYgJHN0YXRlbWVudF90eXBlIGVxICRsYXN0X25vbmJsYW5rX3Rva2VuICkKICAgICAgICB7CiAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX3Rva2VuID0gIjsiOwogICAgICAgIH0KCiAgICAgICAgZWxzaWYgKCAkbGFzdF9ub25ibGFua190b2tlbiBlcSAnKScgKSB7CiAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX3Rva2VuID0gJHJwYXJlbl90eXBlLT5bICRwYXJlbl9kZXB0aCArIDEgXTsKCiAgICAgICAgICAgICMgZGVmZW5zaXZlIG1vdmUgaW4gY2FzZSBvZiBhIG5lc3RpbmcgZXJyb3IgKHBidWcudCkKICAgICAgICAgICAgIyBpbiB3aGljaCB0aGlzICcpJyBoYWQgbm8gcHJldmlvdXMgJygnCiAgICAgICAgICAgICMgdGhpcyBuZXN0aW5nIGVycm9yIHdpbGwgaGF2ZSBiZWVuIGNhdWdodAogICAgICAgICAgICBpZiAoICFkZWZpbmVkKCRsYXN0X25vbmJsYW5rX3Rva2VuKSApIHsKICAgICAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX3Rva2VuID0gJ2lmJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBTeW50YXggY2hlY2sgYXQgJyl7JwogICAgICAgICAgICBpZiAoICRpc19ibG9ja3R5cGVfd2l0aF9wYXJlbnskbGFzdF9ub25ibGFua190b2tlbn0gKSB7CgogICAgICAgICAgICAgICAgbXkgJHJ2YXJzID0gJHJwYXJlbl92YXJzLT5bICRwYXJlbl9kZXB0aCArIDEgXTsKICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCgkcnZhcnMpICkgewogICAgICAgICAgICAgICAgICAgIG15ICggJHR5cGVfbHBfdXUsICR3YW50X2JyYWNlICkgPSBAeyRydmFyc307CgogICAgICAgICAgICAgICAgICAgICMgT0xEOiBOb3cgdmVyaWZ5IHRoYXQgdGhpcyBpcyBub3QgYSB0cmFpbGluZyBmb3JtCiAgICAgICAgICAgICAgICAgICAgIyBGSVggZm9yIGdpdCAjMTI0OiB3ZSBoYXZlIHRvIHNraXAgdGhpcyBjaGVjayBiZWNhdXNlCiAgICAgICAgICAgICAgICAgICAgIyB0aGUgJ2dhdGhlcicga2V5d29yZCBvZiBMaXN0OjpHYXRoZXIgY2FuIG9wZXJhdGUgb24KICAgICAgICAgICAgICAgICAgICAjIGEgZnVsbCBzdGF0ZW1lbnQsIHNvIGl0IGlzbid0IHBvc3NpYmxlIHRvIGJlIHN1cmUKICAgICAgICAgICAgICAgICAgICAjIHRoaXMgaXMgYSB0cmFpbGluZyBmb3JtLgogICAgICAgICAgICAgICAgICAgIGlmICggMCAmJiAhJHdhbnRfYnJhY2UgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT53YXJuaW5nKAoic3ludGF4IGVycm9yIGF0ICcpIHsnLCB1bmV4cGVjdGVkICd7JyBhZnRlciBjbG9zaW5nICcpJyBvZiBhIHRyYWlsaW5nICckbGFzdF9ub25ibGFua190b2tlbidcbiIKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoJHJPcHRzX2V4dGVuZGVkX3N5bnRheCkgewoKICAgICAgICAgICAgICAgICAgICAjIHdlIGFwcGVuZCBhIHRyYWlsaW5nICgpIHRvIG1hcmsgdGhpcyBhcyBhbiB1bmtub3duCiAgICAgICAgICAgICAgICAgICAgIyBibG9jayB0eXBlLiAgVGhpcyBhbGxvd3MgcGVybHRpZHkgdG8gZm9ybWF0IHNvbWUKICAgICAgICAgICAgICAgICAgICAjIGNvbW1vbiBleHRlbnNpb25zIG9mIHBlcmwgc3ludGF4LgogICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyB1c2VkIGJ5IHN1YiBjb2RlX2Jsb2NrX3R5cGUKICAgICAgICAgICAgICAgICAgICAkbGFzdF9ub25ibGFua190b2tlbiAuPSAnKCknOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJGxpc3QgPQogICAgICAgICAgICAgICAgICAgICAgam9pbiggU1BBQ0UsIHNvcnQga2V5cyAlaXNfYmxvY2t0eXBlX3dpdGhfcGFyZW4gKTsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+d2FybmluZygKInN5bnRheCBlcnJvciBhdCAnKSB7JywgZGlkbid0IHNlZSBvbmUgb2Y6IDw8JGxpc3Q+PjsgSWYgdGhpcyBjb2RlIGlzIG9rYXkgdHJ5IHVzaW5nIHRoZSAteHMgZmxhZ1xuIgogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgcGF0Y2ggZm9yIHBhcmVuLWxlc3MgZm9yL2ZvcmVhY2ggZ2xpdGNoLCBwYXJ0IDIuCiAgICAgICAgIyBzZWUgbm90ZSBiZWxvdyB1bmRlciAncXcnCiAgICAgICAgZWxzaWYgKCRsYXN0X25vbmJsYW5rX3Rva2VuIGVxICdxdycKICAgICAgICAgICAgJiYgJGlzX2Zvcl9mb3JlYWNoeyR3YW50X3BhcmVufSApCiAgICAgICAgewogICAgICAgICAgICAkbGFzdF9ub25ibGFua190b2tlbiA9ICR3YW50X3BhcmVuOwogICAgICAgICAgICBpZiAoICRsYXN0X2xhc3Rfbm9uYmxhbmtfdG9rZW4gZXEgJHdhbnRfcGFyZW4gKSB7CiAgICAgICAgICAgICAgICAkc2VsZi0+d2FybmluZygKInN5bnRheCBlcnJvciBhdCAnJHdhbnRfcGFyZW4gLi4geycgLS0gbWlzc2luZyBcJCBsb29wIHZhcmlhYmxlXG4iCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgfQogICAgICAgICAgICAkd2FudF9wYXJlbiA9IEVNUFRZX1NUUklORzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICMgbm90IHNwZWNpYWwKICAgICAgICB9CgogICAgICAgICMgbm93IGlkZW50aWZ5IHdoaWNoIG9mIHRoZSB0aHJlZSBwb3NzaWJsZSB0eXBlcyBvZgogICAgICAgICMgY3VybHkgYnJhY2VzIHdlIGhhdmU6IGhhc2ggaW5kZXggY29udGFpbmVyLCBhbm9ueW1vdXMKICAgICAgICAjIGhhc2ggcmVmZXJlbmNlLCBvciBjb2RlIGJsb2NrLgoKICAgICAgICAjIG5vbi1zdHJ1Y3R1cmFsIChoYXNoIGluZGV4KSBjdXJseSBicmFjZSBwYWlyCiAgICAgICAgIyBnZXQgbWFya2VkICdMJyBhbmQgJ1InCiAgICAgICAgaWYgKCBpc19ub25fc3RydWN0dXJhbF9icmFjZSgpICkgewogICAgICAgICAgICAkdHlwZSA9ICdMJzsKCiAgICAgICAgICAgICMgcGF0Y2ggZm9yIFNXSVRDSC9DQVNFOgogICAgICAgICAgICAjIGFsbG93IHBhcmVuLWxlc3MgaWRlbnRpZmllciBhZnRlciAnd2hlbicKICAgICAgICAgICAgIyBpZiB0aGUgYnJhY2UgaXMgcHJlY2VkZWQgYnkgYSBzcGFjZQogICAgICAgICAgICBpZiAoICAgJHN0YXRlbWVudF90eXBlIGVxICd3aGVuJwogICAgICAgICAgICAgICAgJiYgJGxhc3Rfbm9uYmxhbmtfdHlwZSBlcSAnaScKICAgICAgICAgICAgICAgICYmICRsYXN0X2xhc3Rfbm9uYmxhbmtfdHlwZSBlcSAnaycKICAgICAgICAgICAgICAgICYmICggJGlfdG9rID09IDAgfHwgJHJ0b2tlbl90eXBlLT5bICRpX3RvayAtIDEgXSBlcSAnYicgKSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICR0eXBlICAgICAgID0gJ3snOwogICAgICAgICAgICAgICAgJGJsb2NrX3R5cGUgPSAkc3RhdGVtZW50X3R5cGU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY29kZSBhbmQgYW5vbnltb3VzIGhhc2ggaGF2ZSB0aGUgc2FtZSB0eXBlLCAneycsIGJ1dCBhcmUKICAgICAgICAjIGRpc3Rpbmd1aXNoZWQgYnkgJ2Jsb2NrX3R5cGUnLAogICAgICAgICMgd2hpY2ggd2lsbCBiZSBibGFuayBmb3IgYW4gYW5vbnltb3VzIGhhc2gKICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICRibG9ja190eXBlID0KICAgICAgICAgICAgICAkc2VsZi0+Y29kZV9ibG9ja190eXBlKCAkaV90b2ssICRydG9rZW5zLCAkcnRva2VuX3R5cGUsCiAgICAgICAgICAgICAgICAkbWF4X3Rva2VuX2luZGV4ICk7CgogICAgICAgICAgICAjIHBhdGNoIHRvIHByb21vdGUgYmFyZXdvcmQgdHlwZSB0byBmdW5jdGlvbiB0YWtpbmcgYmxvY2sKICAgICAgICAgICAgaWYgKCAgICRibG9ja190eXBlCiAgICAgICAgICAgICAgICAmJiAkbGFzdF9ub25ibGFua190eXBlIGVxICd3JwogICAgICAgICAgICAgICAgJiYgJGxhc3Rfbm9uYmxhbmtfaSA+PSAwICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKCAkcm91dHB1dF90b2tlbl90eXBlLT5bJGxhc3Rfbm9uYmxhbmtfaV0gZXEgJ3cnICkgewogICAgICAgICAgICAgICAgICAgICRyb3V0cHV0X3Rva2VuX3R5cGUtPlskbGFzdF9ub25ibGFua19pXSA9CiAgICAgICAgICAgICAgICAgICAgICAkaXNfZ3JlcF9hbGlhc3skYmxvY2tfdHlwZX0gPyAnaycgOiAnRyc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcGF0Y2ggZm9yIFNXSVRDSC9DQVNFOiBpZiB3ZSBmaW5kIGEgc3RyYXkgb3BlbmluZyBibG9jayBicmFjZQogICAgICAgICAgICAjIHdoZXJlIHdlIG1pZ2h0IGFjY2VwdCBhICdjYXNlJyBvciAnd2hlbicgYmxvY2ssIHRoZW4gdGFrZSBpdAogICAgICAgICAgICBpZiAoICAgJHN0YXRlbWVudF90eXBlIGVxICdjYXNlJwogICAgICAgICAgICAgICAgfHwgJHN0YXRlbWVudF90eXBlIGVxICd3aGVuJyApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmICggISRibG9ja190eXBlIHx8ICRibG9ja190eXBlIGVxICd9JyApIHsKICAgICAgICAgICAgICAgICAgICAkYmxvY2tfdHlwZSA9ICRzdGF0ZW1lbnRfdHlwZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHJicmFjZV90eXBlLT5bICsrJGJyYWNlX2RlcHRoIF0gPSAkYmxvY2tfdHlwZTsKCiAgICAgICAgIyBQYXRjaCBmb3IgQ0xBU1MgQkxPQ0sgZGVmaW5pdGlvbnM6IGRvIG5vdCB1cGRhdGUgdGhlIHBhY2thZ2UgZm9yIHRoZQogICAgICAgICMgY3VycmVudCBkZXB0aCBpZiB0aGlzIGlzIGEgQkxPQ0sgdHlwZSBkZWZpbml0aW9uLgogICAgICAgICMgVE9ETzogc2hvdWxkIG1ha2UgJ2NsYXNzJyBzZXBhcmF0ZSBmcm9tICdwYWNrYWdlJyBhbmQgb25seSBkbwogICAgICAgICMgdGhpcyBmb3IgJ2NsYXNzJwogICAgICAgICRyYnJhY2VfcGFja2FnZS0+WyRicmFjZV9kZXB0aF0gPSAkY3VycmVudF9wYWNrYWdlCiAgICAgICAgICBpZiAoIHN1YnN0ciggJGJsb2NrX3R5cGUsIDAsIDggKSBuZSAncGFja2FnZSAnICk7CgogICAgICAgICRyYnJhY2Vfc3RydWN0dXJhbF90eXBlLT5bJGJyYWNlX2RlcHRoXSA9ICR0eXBlOwogICAgICAgICRyYnJhY2VfY29udGV4dC0+WyRicmFjZV9kZXB0aF0gICAgICAgICA9ICRjb250ZXh0OwogICAgICAgICggJHR5cGVfc2VxdWVuY2UsICRpbmRlbnRfZmxhZyApID0KICAgICAgICAgICRzZWxmLT5pbmNyZWFzZV9uZXN0aW5nX2RlcHRoKCBCUkFDRSwgJHJ0b2tlbl9tYXAtPlskaV90b2tdICk7CgogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBkb19MRUZUX0NVUkxZX0JSQUNLRVQKCiAgICBzdWIgZG9fUklHSFRfQ1VSTFlfQlJBQ0tFVCB7CgogICAgICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgICAgICMgJ30nCiAgICAgICAgJGJsb2NrX3R5cGUgPSAkcmJyYWNlX3R5cGUtPlskYnJhY2VfZGVwdGhdOwogICAgICAgIGlmICgkYmxvY2tfdHlwZSkgeyAkc3RhdGVtZW50X3R5cGUgPSBFTVBUWV9TVFJJTkcgfQogICAgICAgIGlmICggZGVmaW5lZCggJHJicmFjZV9wYWNrYWdlLT5bJGJyYWNlX2RlcHRoXSApICkgewogICAgICAgICAgICAkY3VycmVudF9wYWNrYWdlID0gJHJicmFjZV9wYWNrYWdlLT5bJGJyYWNlX2RlcHRoXTsKICAgICAgICB9CgogICAgICAgICMgY2FuIGhhcHBlbiBvbiBicmFjZSBlcnJvciAoY2F1Z2h0IGVsc2V3aGVyZSkKICAgICAgICBlbHNlIHsKICAgICAgICB9CiAgICAgICAgKCAkdHlwZV9zZXF1ZW5jZSwgJGluZGVudF9mbGFnICkgPQogICAgICAgICAgJHNlbGYtPmRlY3JlYXNlX25lc3RpbmdfZGVwdGgoIEJSQUNFLCAkcnRva2VuX21hcC0+WyRpX3Rva10gKTsKCiAgICAgICAgaWYgKCAkcmJyYWNlX3N0cnVjdHVyYWxfdHlwZS0+WyRicmFjZV9kZXB0aF0gZXEgJ0wnICkgewogICAgICAgICAgICAkdHlwZSA9ICdSJzsKICAgICAgICB9CgogICAgICAgICMgcHJvcGFnYXRlIHR5cGUgaW5mb3JtYXRpb24gZm9yICdkbycgYW5kICdldmFsJyBibG9ja3MsIGFuZCBhbHNvCiAgICAgICAgIyBmb3Igc21hcnRtYXRjaCBvcGVyYXRvci4gIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGVuYWJsZSB1cyB0byBrbm93CiAgICAgICAgIyBpZiBhbiBvcGVyYXRvciBvciB0ZXJtIGlzIGV4cGVjdGVkIG5leHQuCiAgICAgICAgaWYgKCAkaXNfYmxvY2tfb3BlcmF0b3J7JGJsb2NrX3R5cGV9ICkgewogICAgICAgICAgICAkdG9rID0gJGJsb2NrX3R5cGU7CiAgICAgICAgfQoKICAgICAgICAjIHBvcCBub24taW5kZW50aW5nIGJyYWNlIHN0YWNrIGlmIHNlcXVlbmNlIG51bWJlciBtYXRjaGVzCiAgICAgICAgaWYgKCBAeyAkc2VsZi0+W19ybm9uX2luZGVudGluZ19icmFjZV9zdGFja19dIH0KICAgICAgICAgICAgJiYgJHNlbGYtPltfcm5vbl9pbmRlbnRpbmdfYnJhY2Vfc3RhY2tfXS0+Wy0xXSBlcSAkdHlwZV9zZXF1ZW5jZSApCiAgICAgICAgewogICAgICAgICAgICBwb3AgQHsgJHNlbGYtPltfcm5vbl9pbmRlbnRpbmdfYnJhY2Vfc3RhY2tfXSB9OwogICAgICAgIH0KCiAgICAgICAgJGNvbnRleHQgPSAkcmJyYWNlX2NvbnRleHQtPlskYnJhY2VfZGVwdGhdOwogICAgICAgIGlmICggJGJyYWNlX2RlcHRoID4gMCApIHsgJGJyYWNlX2RlcHRoLS07IH0KICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgZG9fUklHSFRfQ1VSTFlfQlJBQ0tFVAoKICAgIHN1YiBkb19BTVBFUlNBTkQgewoKICAgICAgICBteSAkc2VsZiA9IHNoaWZ0OwoKICAgICAgICAjICcmJyA9IG1heWJlIHN1YiBjYWxsPyBzdGFydCBsb29raW5nCiAgICAgICAgIyBXZSBoYXZlIHRvIGNoZWNrIGZvciBzdWIgY2FsbCB1bmxlc3Mgd2UgYXJlIHN1cmUgd2UKICAgICAgICAjIGFyZSBleHBlY3RpbmcgYW4gb3BlcmF0b3IuICBUaGlzIGV4YW1wbGUgZnJvbSBzMnAKICAgICAgICAjIGdvdCBtaXN0YWtlbiBhcyBhIHEgb3BlcmF0b3IgaW4gYW4gZWFybHkgdmVyc2lvbjoKICAgICAgICAjICAgcHJpbnQgQk9EWSAmcSg8PCdFT1QnKTsKICAgICAgICBpZiAoICRleHBlY3RpbmcgIT0gT1BFUkFUT1IgKSB7CgogICAgICAgICAgICAjIEJ1dCBvbmx5IGxvb2sgZm9yIGEgc3ViIGNhbGwgaWYgd2UgYXJlIGV4cGVjdGluZyBhIHRlcm0gb3IKICAgICAgICAgICAgIyBpZiB0aGVyZSBpcyBubyBleGlzdGluZyBzcGFjZSBhZnRlciB0aGUgJi4KICAgICAgICAgICAgIyBGb3IgZXhhbXBsZSB3ZSBwcm9iYWJseSBkb24ndCB3YW50ICYgYXMgc3ViIGNhbGwgaGVyZToKICAgICAgICAgICAgIyAgICBGY250bDo6U19JUlVTUiAmICRtb2RlOwogICAgICAgICAgICBpZiAoICRleHBlY3RpbmcgPT0gVEVSTSB8fCAkbmV4dF90eXBlIG5lICdiJyApIHsKICAgICAgICAgICAgICAgICRzZWxmLT5zY2FuX3NpbXBsZV9pZGVudGlmaWVyKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBkb19BTVBFUlNBTkQKCiAgICBzdWIgZG9fTEVTU19USEFOX1NJR04gewoKICAgICAgICBteSAkc2VsZiA9IHNoaWZ0OwoKICAgICAgICAjICc8JyAtIGFuZ2xlIG9wZXJhdG9yIG9yIGxlc3MgdGhhbj8KICAgICAgICBpZiAoICRleHBlY3RpbmcgIT0gT1BFUkFUT1IgKSB7CiAgICAgICAgICAgICggJGksICR0eXBlICkgPQogICAgICAgICAgICAgICRzZWxmLT5maW5kX2FuZ2xlX29wZXJhdG9yX3Rlcm1pbmF0aW9uKCAkaW5wdXRfbGluZSwgJGksCiAgICAgICAgICAgICAgICAkcnRva2VuX21hcCwgJGV4cGVjdGluZywgJG1heF90b2tlbl9pbmRleCApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGRvX0xFU1NfVEhBTl9TSUdOCgogICAgc3ViIGRvX1FVRVNUSU9OX01BUksgewoKICAgICAgICBteSAkc2VsZiA9IHNoaWZ0OwoKICAgICAgICAjICc/JyA9IGNvbmRpdGlvbmFsIG9yIHN0YXJ0aW5nIHBhdHRlcm4/CiAgICAgICAgbXkgJGlzX3BhdHRlcm47CgogICAgICAgICMgUGF0Y2ggZm9yIHJ0ICMxMjY5NjUKICAgICAgICAjIGEgcGF0dGVybiBjYW5ub3QgZm9sbG93IGNlcnRhaW4ga2V5d29yZHMgd2hpY2ggdGFrZSBvcHRpb25hbAogICAgICAgICMgYXJndW1lbnRzLCBsaWtlICdzaGlmdCcgYW5kICdwb3AnLiBTZWUgYWxzbyAnLycuCiAgICAgICAgaWYgKAogICAgICAgICAgICAkbGFzdF9ub25ibGFua190eXBlIGVxICdrJwogICAgICAgICAgICAmJiAkaXNfa2V5d29yZF9yZWplY3RpbmdfcXVlc3Rpb25fYXNfcGF0dGVybl9kZWxpbWl0ZXJ7CiAgICAgICAgICAgICAgICAkbGFzdF9ub25ibGFua190b2tlbn0KICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRpc19wYXR0ZXJuID0gMDsKICAgICAgICB9CgogICAgICAgICMgcGF0Y2ggZm9yIFJUIzEzMTI4OCwgdXNlciBjb25zdGFudCBmdW5jdGlvbiB3aXRob3V0IHByb3RvdHlwZQogICAgICAgICMgbGFzdCB0eXBlIGlzICdVJyBmb2xsb3dlZCBieSA/LgogICAgICAgIGVsc2lmICggJGxhc3Rfbm9uYmxhbmtfdHlwZSA9fiAvXltGVVldJC8gKSB7CiAgICAgICAgICAgICRpc19wYXR0ZXJuID0gMDsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkZXhwZWN0aW5nID09IFVOS05PV04gKSB7CgogICAgICAgICAgICAjIEluIG9sZGVyIHZlcnNpb25zIG9mIFBlcmwsIGEgYmFyZSA/IGNhbiBiZSBhIHBhdHRlcm4KICAgICAgICAgICAgIyBkZWxpbWl0ZXIuICBJbiBwZXJsIHZlcnNpb24gNS4yMiB0aGlzIHdhcwogICAgICAgICAgICAjIGRyb3BwZWQsIGJ1dCB3ZSBoYXZlIHRvIHN1cHBvcnQgaXQgaW4gb3JkZXIgdG8gZm9ybWF0CiAgICAgICAgICAgICMgb2xkZXIgcHJvZ3JhbXMuIFNlZToKICAgICAgICAgICAgIyMgaHR0cHM6Ly9wZXJsLmRldmVsb3BwZXouY29tL2RvY3VtZW50YXRpb25zL2VuLzUuMjIuMC9wZXJsNTIxMWRlbHRhLmh0bWwKICAgICAgICAgICAgIyBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBsaW5lIHdvcmtlZAogICAgICAgICAgICAjIGF0IG9uZSB0aW1lOgogICAgICAgICAgICAjICAgICAgPyguKik/ICYmIChwcmludCAkMSwiXG4iKTsKICAgICAgICAgICAgIyBJbiBjdXJyZW50IHZlcnNpb25zIGl0IHdvdWxkIGhhdmUgdG8gYmUgd3JpdHRlbiB3aXRoIHNsYXNoZXM6CiAgICAgICAgICAgICMgICAgICAvKC4qKS8gJiYgKHByaW50ICQxLCJcbiIpOwogICAgICAgICAgICBteSAkbXNnOwogICAgICAgICAgICAoICRpc19wYXR0ZXJuLCAkbXNnICkgPQogICAgICAgICAgICAgICRzZWxmLT5ndWVzc19pZl9wYXR0ZXJuX29yX2NvbmRpdGlvbmFsKCAkaSwgJHJ0b2tlbnMsCiAgICAgICAgICAgICAgICAkcnRva2VuX3R5cGUsICRydG9rZW5fbWFwLCAkbWF4X3Rva2VuX2luZGV4ICk7CgogICAgICAgICAgICBpZiAoJG1zZykgeyAkc2VsZi0+d3JpdGVfbG9nZmlsZV9lbnRyeSgkbXNnKSB9CiAgICAgICAgfQogICAgICAgIGVsc2UgeyAkaXNfcGF0dGVybiA9ICggJGV4cGVjdGluZyA9PSBURVJNICkgfQoKICAgICAgICBpZiAoJGlzX3BhdHRlcm4pIHsKICAgICAgICAgICAgJGluX3F1b3RlICAgICAgICAgICAgICAgID0gMTsKICAgICAgICAgICAgJHR5cGUgICAgICAgICAgICAgICAgICAgID0gJ1EnOwogICAgICAgICAgICAkYWxsb3dlZF9xdW90ZV9tb2RpZmllcnMgPSAkcXVvdGVfbW9kaWZpZXJzeydtJ307CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAoICR0eXBlX3NlcXVlbmNlLCAkaW5kZW50X2ZsYWcgKSA9CiAgICAgICAgICAgICAgJHNlbGYtPmluY3JlYXNlX25lc3RpbmdfZGVwdGgoIFFVRVNUSU9OX0NPTE9OLAogICAgICAgICAgICAgICAgJHJ0b2tlbl9tYXAtPlskaV90b2tdICk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBkb19RVUVTVElPTl9NQVJLCgogICAgc3ViIGRvX1NUQVIgewoKICAgICAgICBteSAkc2VsZiA9IHNoaWZ0OwoKICAgICAgICAjICcqJyA9IHR5cGVnbG9iLCBvciBtdWx0aXBseT8KICAgICAgICBpZiAoICRleHBlY3RpbmcgPT0gVU5LTk9XTiApIHsKICAgICAgICAgICAgaWYgKCAgICRsYXN0X25vbmJsYW5rX3R5cGUgZXEgJ1onCiAgICAgICAgICAgICAgICAmJiAkbmV4dF90eXBlIG5lICdiJwogICAgICAgICAgICAgICAgJiYgJG5leHRfdHlwZSBuZSAnKCcKICAgICAgICAgICAgICAgICYmICRuZXh0X3R5cGUgbmUgJyMnICkgICAgIyBGaXggYzAzNgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkZXhwZWN0aW5nID0gVEVSTTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCAkZXhwZWN0aW5nID09IFRFUk0gKSB7CiAgICAgICAgICAgICRzZWxmLT5zY2FuX3NpbXBsZV9pZGVudGlmaWVyKCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgaWYgKCAkcnRva2Vucy0+WyAkaSArIDEgXSBlcSAnPScgKSB7CiAgICAgICAgICAgICAgICAkdG9rICA9ICcqPSc7CiAgICAgICAgICAgICAgICAkdHlwZSA9ICR0b2s7CiAgICAgICAgICAgICAgICAkaSsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJHJ0b2tlbnMtPlsgJGkgKyAxIF0gZXEgJyonICkgewogICAgICAgICAgICAgICAgJHRvayAgPSAnKionOwogICAgICAgICAgICAgICAgJHR5cGUgPSAkdG9rOwogICAgICAgICAgICAgICAgJGkrKzsKICAgICAgICAgICAgICAgIGlmICggJHJ0b2tlbnMtPlsgJGkgKyAxIF0gZXEgJz0nICkgewogICAgICAgICAgICAgICAgICAgICR0b2sgID0gJyoqPSc7CiAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAkdG9rOwogICAgICAgICAgICAgICAgICAgICRpKys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAjIyBub3QgbXVsdGlwbGUgY2hhcmFjdGVycwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBkb19TVEFSCgogICAgc3ViIGRvX0RPVCB7CgogICAgICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgICAgICMgJy4nID0gIHdoYXQga2luZCBvZiAuID8KICAgICAgICBpZiAoICRleHBlY3RpbmcgIT0gT1BFUkFUT1IgKSB7CiAgICAgICAgICAgICRzZWxmLT5zY2FuX251bWJlcigpOwogICAgICAgICAgICBpZiAoICR0eXBlIGVxICcuJyApIHsKICAgICAgICAgICAgICAgICRzZWxmLT5lcnJvcl9pZl9leHBlY3RpbmdfVEVSTSgpCiAgICAgICAgICAgICAgICAgIGlmICggJGV4cGVjdGluZyA9PSBURVJNICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBkb19ET1QKCiAgICBzdWIgZG9fQ09MT04gewoKICAgICAgICBteSAkc2VsZiA9IHNoaWZ0OwoKICAgICAgICAjICc6JyA9IGxhYmVsLCB0ZXJuYXJ5LCBhdHRyaWJ1dGUsID8KCiAgICAgICAgIyBpZiB0aGlzIGlzIHRoZSBmaXJzdCBub25ibGFuayBjaGFyYWN0ZXIsIGNhbGwgaXQgYSBsYWJlbAogICAgICAgICMgc2luY2UgcGVybCBzZWVtcyB0byBqdXN0IHN3YWxsb3cgaXQKICAgICAgICBpZiAoICRpbnB1dF9saW5lX251bWJlciA9PSAxICYmICRsYXN0X25vbmJsYW5rX2kgPT0gLTEgKSB7CiAgICAgICAgICAgICR0eXBlID0gJ0onOwogICAgICAgIH0KCiAgICAgICAgIyBBVFRSUzogY2hlY2sgZm9yIGEgJzonIHdoaWNoIGludHJvZHVjZXMgYW4gYXR0cmlidXRlIGxpc3QKICAgICAgICAjIGVpdGhlciBhZnRlciBhICdzdWInIGtleXdvcmQgb3Igd2l0aGluIGEgcGFyZW4gbGlzdAogICAgICAgICMgQWRkZWQgJ3BhY2thZ2UnIChjYW4gYmUgJ2NsYXNzJykgZm9yIC0tdXNlLWZlYXR1cmU9Y2xhc3MgKHJ0MTQ1NzA2KQogICAgICAgIGVsc2lmICggJHN0YXRlbWVudF90eXBlID1+IC9eKHN1YnxwYWNrYWdlKVxiLyApIHsKICAgICAgICAgICAgJHR5cGUgPSAnQSc7CiAgICAgICAgICAgICRzZWxmLT5bX2luX2F0dHJpYnV0ZV9saXN0X10gPSAxOwogICAgICAgIH0KCiAgICAgICAgIyBXaXRoaW4gYSBzaWduYXR1cmUsIHVubGVzcyB3ZSBhcmUgaW4gYSB0ZXJuYXJ5LiAgRm9yIGV4YW1wbGUsCiAgICAgICAgIyBmcm9tICd0L2ZpbHRlcl9leGFtcGxlLnQnOgogICAgICAgICMgICAgbWV0aG9kIGZvbzQgKCAkY2xhc3M6ICRiYXIgKSB7ICRjbGFzcy0+YmFyKCRiYXIpIH0KICAgICAgICBlbHNpZiAoICRycGFyZW5fdHlwZS0+WyRwYXJlbl9kZXB0aF0gPX4gL15zdWJcYi8KICAgICAgICAgICAgJiYgIWlzX2JhbGFuY2VkX2Nsb3NpbmdfY29udGFpbmVyKFFVRVNUSU9OX0NPTE9OKSApCiAgICAgICAgewogICAgICAgICAgICAkdHlwZSA9ICdBJzsKICAgICAgICAgICAgJHNlbGYtPltfaW5fYXR0cmlidXRlX2xpc3RfXSA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGZvciBzY2FsYXIgYXR0cmlidXRlLCBzdWNoIGFzCiAgICAgICAgIyBteSAkZm9vIDogc2hhcmVkID0gMTsKICAgICAgICBlbHNpZiAoJGlzX215X291cl9zdGF0ZXskc3RhdGVtZW50X3R5cGV9CiAgICAgICAgICAgICYmICRyY3VycmVudF9kZXB0aC0+W1FVRVNUSU9OX0NPTE9OXSA9PSAwICkKICAgICAgICB7CiAgICAgICAgICAgICR0eXBlID0gJ0EnOwogICAgICAgICAgICAkc2VsZi0+W19pbl9hdHRyaWJ1dGVfbGlzdF9dID0gMTsKICAgICAgICB9CgogICAgICAgICMgTG9vayBmb3IgU3dpdGNoOjpQbGFpbiBzeW50YXggaWYgYW4gZXJyb3Igd291bGQgb3RoZXJ3aXNlIG9jY3VyCiAgICAgICAgIyBoZXJlLiBOb3RlIHRoYXQgd2UgZG8gbm90IG5lZWQgdG8gY2hlY2sgaWYgdGhlIGV4dGVuZGVkIHN5bnRheAogICAgICAgICMgZmxhZyBpcyBzZXQgYmVjYXVzZSBvdGhlcndpc2UgYW4gZXJyb3Igd291bGQgb2NjdXIsIGFuZCB3ZSB3b3VsZAogICAgICAgICMgdGhlbiBoYXZlIHRvIG91dHB1dCBhIG1lc3NhZ2UgdGVsbGluZyB0aGUgdXNlciB0byBzZXQgdGhlCiAgICAgICAgIyBleHRlbmRlZCBzeW50YXggZmxhZyB0byBhdm9pZCB0aGUgZXJyb3IuCiAgICAgICAgIyAgY2FzZSAxOiB7CiAgICAgICAgIyAgZGVmYXVsdDogewogICAgICAgICMgIGRlZmF1bHQ6CiAgICAgICAgIyBOb3RlIHRoYXQgdGhlIGxpbmUgJ2RlZmF1bHQ6JyB3aWxsIGJlIHBhcnNlZCBhcyBhIGxhYmVsIGVsc2V3aGVyZS4KICAgICAgICBlbHNpZiAoICRpc19jYXNlX2RlZmF1bHR7JHN0YXRlbWVudF90eXBlfQogICAgICAgICAgICAmJiAhaXNfYmFsYW5jZWRfY2xvc2luZ19jb250YWluZXIoUVVFU1RJT05fQ09MT04pICkKICAgICAgICB7CiAgICAgICAgICAgICMgbWFyayBpdCBhcyBhIHBlcmx0aWR5IGxhYmVsIHR5cGUKICAgICAgICAgICAgJHR5cGUgPSAnSic7CiAgICAgICAgfQoKICAgICAgICAjIG1hcmsgY29sb24gYXMgYXR0cmlidXRlIGlmIGFuIGVycm9yIHdvdWxkIG9jY3VyIG90aGVyd2lzZTsgZ2l0ICMxNjIKICAgICAgICBlbHNpZiAoICEkcmN1cnJlbnRfZGVwdGgtPltRVUVTVElPTl9DT0xPTl0gKSB7CiAgICAgICAgICAgICR0eXBlID0gJ0EnOwogICAgICAgICAgICAkc2VsZi0+W19pbl9hdHRyaWJ1dGVfbGlzdF9dID0gMTsKICAgICAgICB9CgogICAgICAgICMgb3RoZXJ3aXNlLCBpdCBzaG91bGQgYmUgcGFydCBvZiBhID8vOiBvcGVyYXRvcgogICAgICAgIGVsc2UgewogICAgICAgICAgICAoICR0eXBlX3NlcXVlbmNlLCAkaW5kZW50X2ZsYWcgKSA9CiAgICAgICAgICAgICAgJHNlbGYtPmRlY3JlYXNlX25lc3RpbmdfZGVwdGgoIFFVRVNUSU9OX0NPTE9OLAogICAgICAgICAgICAgICAgJHJ0b2tlbl9tYXAtPlskaV90b2tdICk7CiAgICAgICAgICAgIGlmICggJGxhc3Rfbm9uYmxhbmtfdG9rZW4gZXEgJz8nICkgewogICAgICAgICAgICAgICAgJHNlbGYtPndhcm5pbmcoIlN5bnRheCBlcnJvciBuZWFyID8gOlxuIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGRvX0NPTE9OCgogICAgc3ViIGRvX1BMVVNfU0lHTiB7CgogICAgICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgICAgICMgJysnID0gd2hhdCBraW5kIG9mIHBsdXM/CiAgICAgICAgaWYgKCAkZXhwZWN0aW5nID09IFRFUk0gKSB7CiAgICAgICAgICAgIG15ICRudW1iZXIgPSAkc2VsZi0+c2Nhbl9udW1iZXJfZmFzdCgpOwoKICAgICAgICAgICAgIyB1bmFyeSBwbHVzIGlzIHNhZmVzdCBhc3N1bXB0aW9uIGlmIG5vdCBhIG51bWJlcgogICAgICAgICAgICBpZiAoICFkZWZpbmVkKCRudW1iZXIpICkgeyAkdHlwZSA9ICdwJzsgfQogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRleHBlY3RpbmcgPT0gT1BFUkFUT1IgKSB7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAoICRuZXh0X3R5cGUgZXEgJ3cnICkgeyAkdHlwZSA9ICdwJyB9CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBkb19QTFVTX1NJR04KCiAgICBzdWIgZG9fQVRfU0lHTiB7CgogICAgICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgICAgICMgJ0AnID0gc2lnaWwgZm9yIGFycmF5PwogICAgICAgICRzZWxmLT5lcnJvcl9pZl9leHBlY3RpbmdfT1BFUkFUT1IoIkFycmF5IikKICAgICAgICAgIGlmICggJGV4cGVjdGluZyA9PSBPUEVSQVRPUiApOwogICAgICAgICRzZWxmLT5zY2FuX3NpbXBsZV9pZGVudGlmaWVyKCk7CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGRvX0FUX1NJR04KCiAgICBzdWIgZG9fUEVSQ0VOVF9TSUdOIHsKCiAgICAgICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICAgICAgIyAnJScgPSBoYXNoIG9yIG1vZHVsbz8KICAgICAgICAjIGZpcnN0IGd1ZXNzIGlzIGhhc2ggaWYgbm8gZm9sbG93aW5nIGJsYW5rIG9yIHBhcmVuCiAgICAgICAgaWYgKCAkZXhwZWN0aW5nID09IFVOS05PV04gKSB7CiAgICAgICAgICAgIGlmICggJG5leHRfdHlwZSBuZSAnYicgJiYgJG5leHRfdHlwZSBuZSAnKCcgKSB7CiAgICAgICAgICAgICAgICAkZXhwZWN0aW5nID0gVEVSTTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoICRleHBlY3RpbmcgPT0gVEVSTSApIHsKICAgICAgICAgICAgJHNlbGYtPnNjYW5fc2ltcGxlX2lkZW50aWZpZXIoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGRvX1BFUkNFTlRfU0lHTgoKICAgIHN1YiBkb19MRUZUX1NRVUFSRV9CUkFDS0VUIHsKCiAgICAgICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICAgICAgIyAnWycKICAgICAgICAkcnNxdWFyZV9icmFja2V0X3R5cGUtPlsgKyskc3F1YXJlX2JyYWNrZXRfZGVwdGggXSA9CiAgICAgICAgICAkbGFzdF9ub25ibGFua190b2tlbjsKICAgICAgICAoICR0eXBlX3NlcXVlbmNlLCAkaW5kZW50X2ZsYWcgKSA9CiAgICAgICAgICAkc2VsZi0+aW5jcmVhc2VfbmVzdGluZ19kZXB0aCggU1FVQVJFX0JSQUNLRVQsCiAgICAgICAgICAgICRydG9rZW5fbWFwLT5bJGlfdG9rXSApOwoKICAgICAgICAjIEl0IG1heSBzZWVtIG9kZCwgYnV0IHN0cnVjdHVyYWwgc3F1YXJlIGJyYWNrZXRzIGhhdmUKICAgICAgICAjIHR5cGUgJ3snIGFuZCAnfScuICBUaGlzIHNpbXBsaWZpZXMgdGhlIGluZGVudGF0aW9uIGxvZ2ljLgogICAgICAgIGlmICggIWlzX25vbl9zdHJ1Y3R1cmFsX2JyYWNlKCkgKSB7CiAgICAgICAgICAgICR0eXBlID0gJ3snOwogICAgICAgIH0KICAgICAgICAkcnNxdWFyZV9icmFja2V0X3N0cnVjdHVyYWxfdHlwZS0+WyRzcXVhcmVfYnJhY2tldF9kZXB0aF0gPSAkdHlwZTsKICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgZG9fTEVGVF9TUVVBUkVfQlJBQ0tFVAoKICAgIHN1YiBkb19SSUdIVF9TUVVBUkVfQlJBQ0tFVCB7CgogICAgICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgICAgICMgJ10nCiAgICAgICAgKCAkdHlwZV9zZXF1ZW5jZSwgJGluZGVudF9mbGFnICkgPQogICAgICAgICAgJHNlbGYtPmRlY3JlYXNlX25lc3RpbmdfZGVwdGgoIFNRVUFSRV9CUkFDS0VULAogICAgICAgICAgICAkcnRva2VuX21hcC0+WyRpX3Rva10gKTsKCiAgICAgICAgaWYgKCAkcnNxdWFyZV9icmFja2V0X3N0cnVjdHVyYWxfdHlwZS0+WyRzcXVhcmVfYnJhY2tldF9kZXB0aF0gZXEgJ3snICkKICAgICAgICB7CiAgICAgICAgICAgICR0eXBlID0gJ30nOwogICAgICAgIH0KCiAgICAgICAgIyBwcm9wYWdhdGUgdHlwZSBpbmZvcm1hdGlvbiBmb3Igc21hcnRtYXRjaCBvcGVyYXRvci4gIFRoaXMgaXMKICAgICAgICAjIG5lY2Vzc2FyeSB0byBlbmFibGUgdXMgdG8ga25vdyBpZiBhbiBvcGVyYXRvciBvciB0ZXJtIGlzIGV4cGVjdGVkCiAgICAgICAgIyBuZXh0LgogICAgICAgIGlmICggJHJzcXVhcmVfYnJhY2tldF90eXBlLT5bJHNxdWFyZV9icmFja2V0X2RlcHRoXSBlcSAnfn4nICkgewogICAgICAgICAgICAkdG9rID0gJHJzcXVhcmVfYnJhY2tldF90eXBlLT5bJHNxdWFyZV9icmFja2V0X2RlcHRoXTsKICAgICAgICB9CgogICAgICAgIGlmICggJHNxdWFyZV9icmFja2V0X2RlcHRoID4gMCApIHsgJHNxdWFyZV9icmFja2V0X2RlcHRoLS07IH0KICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgZG9fUklHSFRfU1FVQVJFX0JSQUNLRVQKCiAgICBzdWIgZG9fTUlOVVNfU0lHTiB7CgogICAgICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgICAgICMgJy0nID0gd2hhdCBraW5kIG9mIG1pbnVzPwogICAgICAgIGlmICggKCAkZXhwZWN0aW5nICE9IE9QRVJBVE9SICkKICAgICAgICAgICAgJiYgJGlzX2ZpbGVfdGVzdF9vcGVyYXRvcnskbmV4dF90b2t9ICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICggJG5leHRfbm9uYmxhbmtfdG9rZW4sICRpX25leHRfdXUgKSA9CiAgICAgICAgICAgICAgJHNlbGYtPmZpbmRfbmV4dF9ub25ibGFua190b2tlbiggJGkgKyAxLCAkcnRva2VucywKICAgICAgICAgICAgICAgICRtYXhfdG9rZW5faW5kZXggKTsKCiAgICAgICAgICAgICMgY2hlY2sgZm9yIGEgcXVvdGVkIHdvcmQgbGlrZSAiLXc9Pnh4IjsKICAgICAgICAgICAgIyBpdCBpcyBzdWZmaWNpZW50IHRvIGp1c3QgY2hlY2sgZm9yIGEgZm9sbG93aW5nICc9JwogICAgICAgICAgICBpZiAoICRuZXh0X25vbmJsYW5rX3Rva2VuIGVxICc9JyApIHsKICAgICAgICAgICAgICAgICR0eXBlID0gJ20nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJGkrKzsKICAgICAgICAgICAgICAgICR0b2sgLj0gJG5leHRfdG9rOwogICAgICAgICAgICAgICAgJHR5cGUgPSAnRic7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkZXhwZWN0aW5nID09IFRFUk0gKSB7CiAgICAgICAgICAgIG15ICRudW1iZXIgPSAkc2VsZi0+c2Nhbl9udW1iZXJfZmFzdCgpOwoKICAgICAgICAgICAgIyBtYXliZSBwYXJ0IG9mIGJhcmV3b3JkIHRva2VuPyB1bmFyeSBpcyBzYWZlc3QKICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkbnVtYmVyKSApIHsgJHR5cGUgPSAnbSc7IH0KCiAgICAgICAgfQogICAgICAgIGVsc2lmICggJGV4cGVjdGluZyA9PSBPUEVSQVRPUiApIHsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmICggJG5leHRfdHlwZSBlcSAndycgKSB7CiAgICAgICAgICAgICAgICAkdHlwZSA9ICdtJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgZG9fTUlOVVNfU0lHTgoKICAgIHN1YiBkb19DQVJBVF9TSUdOIHsKCiAgICAgICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICAgICAgIyAnXicKICAgICAgICAjIGNoZWNrIGZvciBzcGVjaWFsIHZhcmlhYmxlcyBsaWtlICR7XldBUk5JTkdfQklUU30KICAgICAgICBpZiAoICRleHBlY3RpbmcgPT0gVEVSTSApIHsKCiAgICAgICAgICAgIGlmICggICAkbGFzdF9ub25ibGFua190b2tlbiBlcSAneycKICAgICAgICAgICAgICAgICYmICggJG5leHRfdG9rICF+IC9eXGQvICkKICAgICAgICAgICAgICAgICYmICggJG5leHRfdG9rID1+IC9eXHcvICkgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgaWYgKCAkbmV4dF90b2sgZXEgJ1cnICkgewogICAgICAgICAgICAgICAgICAgICRzZWxmLT5bX3Nhd19wZXJsX2Rhc2hfd19dID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICR0b2sgID0gJHRvayAuICRuZXh0X3RvazsKICAgICAgICAgICAgICAgICRpICAgID0gJGkgKyAxOwogICAgICAgICAgICAgICAgJHR5cGUgPSAndyc7CgogICAgICAgICAgICAgICAgIyBPcHRpb25hbCBjb2RpbmcgdG8gdHJ5IHRvIGNhdGNoIHN5bnRheCBlcnJvcnMuIFRoaXMgY2FuCiAgICAgICAgICAgICAgICAjIGJlIHJlbW92ZWQgaWYgaXQgZXZlciBjYXVzZXMgaW5jb3JyZWN0IHdhcm5pbmcgbWVzc2FnZXMuCiAgICAgICAgICAgICAgICAjIFRoZSAne14nIHNob3VsZCBiZSBwcmVjZWRlZCBieSBlaXRoZXIgYnkgYSB0eXBlIG9yICckIycKICAgICAgICAgICAgICAgICMgRXhhbXBsZXM6CiAgICAgICAgICAgICAgICAjICAgJCN7XkNBUFRVUkV9ICAgICAgIG9rCiAgICAgICAgICAgICAgICAjICAgKiR7XkxBU1RfRkh9e05BTUV9IG9rCiAgICAgICAgICAgICAgICAjICAgQHteSE9XRFl9ICAgICAgICAgIG9rCiAgICAgICAgICAgICAgICAjICAgJGhhc2h7XkhPV0RZfSAgICAgIGVycm9yCgogICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQgYSB0eXBlIHNpZ2lsICckJyBtYXkgYmUgdG9rZW5pemVkIGFzICdaJwogICAgICAgICAgICAgICAgIyBhZnRlciBzb21ldGhpbmcgbGlrZSAncHJpbnQnLCBzbyBhbGxvdyB0eXBlICdaJwogICAgICAgICAgICAgICAgaWYgKCAgICRsYXN0X2xhc3Rfbm9uYmxhbmtfdHlwZSBuZSAndCcKICAgICAgICAgICAgICAgICAgICAmJiAkbGFzdF9sYXN0X25vbmJsYW5rX3R5cGUgbmUgJ1onCiAgICAgICAgICAgICAgICAgICAgJiYgJGxhc3RfbGFzdF9ub25ibGFua190b2tlbiBuZSAnJCMnICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+d2FybmluZygiUG9zc2libGUgc3ludGF4IGVycm9yIG5lYXIgJ3teJ1xuIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCAhJHNlbGYtPmVycm9yX2lmX2V4cGVjdGluZ19URVJNKCkgKSB7CgogICAgICAgICAgICAgICAgICAgICMgU29tZXRoaW5nIGxpa2UgdGhpcyBpcyB2YWxpZCBidXQgc3RyYW5nZToKICAgICAgICAgICAgICAgICAgICAjIHVuZGVmIF5JOwogICAgICAgICAgICAgICAgICAgICRzZWxmLT5jb21wbGFpbigiVGhlICdeJyBzZWVtcyB1bnVzdWFsIGhlcmVcbiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBkb19DQVJBVF9TSUdOCgogICAgc3ViIGRvX0RPVUJMRV9DT0xPTiB7CgogICAgICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgICAgICMgICc6OicgPSBwcm9iYWJseSBhIHN1YiBjYWxsCiAgICAgICAgJHNlbGYtPnNjYW5fYmFyZV9pZGVudGlmaWVyKCk7CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGRvX0RPVUJMRV9DT0xPTgoKICAgIHN1YiBkb19MRUZUX1NISUZUIHsKCiAgICAgICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICAgICAgIyAnPDwnID0gbWF5YmUgYSBoZXJlLWRvYz8KICAgICAgICBpZiAoICRleHBlY3RpbmcgIT0gT1BFUkFUT1IgKSB7CiAgICAgICAgICAgIG15ICggJGZvdW5kX3RhcmdldCwgJGhlcmVfZG9jX3RhcmdldCwgJGhlcmVfcXVvdGVfY2hhcmFjdGVyLAogICAgICAgICAgICAgICAgJHNhd19lcnJvciApOwogICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAkZm91bmRfdGFyZ2V0LCAkaGVyZV9kb2NfdGFyZ2V0LCAkaGVyZV9xdW90ZV9jaGFyYWN0ZXIsICRpLAogICAgICAgICAgICAgICAgJHNhd19lcnJvcgogICAgICAgICAgICAgICkKICAgICAgICAgICAgICA9ICRzZWxmLT5maW5kX2hlcmVfZG9jKCAkZXhwZWN0aW5nLCAkaSwgJHJ0b2tlbnMsICRydG9rZW5fdHlwZSwKICAgICAgICAgICAgICAgICRydG9rZW5fbWFwLCAkbWF4X3Rva2VuX2luZGV4ICk7CgogICAgICAgICAgICBpZiAoJGZvdW5kX3RhcmdldCkgewogICAgICAgICAgICAgICAgcHVzaCBAeyRyaGVyZV90YXJnZXRfbGlzdH0sCiAgICAgICAgICAgICAgICAgIFsgJGhlcmVfZG9jX3RhcmdldCwgJGhlcmVfcXVvdGVfY2hhcmFjdGVyIF07CiAgICAgICAgICAgICAgICAkdHlwZSA9ICdoJzsKICAgICAgICAgICAgICAgIGlmICggbGVuZ3RoKCRoZXJlX2RvY190YXJnZXQpID4gODAgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJHRydW5jYXRlZCA9IHN1YnN0ciggJGhlcmVfZG9jX3RhcmdldCwgMCwgODAgKTsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+Y29tcGxhaW4oIkxvbmcgaGVyZS10YXJnZXQ6ICckdHJ1bmNhdGVkJyAuLi5cbiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKCAhJGhlcmVfZG9jX3RhcmdldCApIHsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+d2FybmluZygKICAgICAgICAgICAgICAgICAgICAgICAgJ1VzZSBvZiBiYXJlIDw8IHRvIG1lYW4gPDwiIiBpcyBkZXByZWNhdGVkJyAuICJcbiIgKQogICAgICAgICAgICAgICAgICAgICAgaWYgKCAhJGhlcmVfcXVvdGVfY2hhcmFjdGVyICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoICRoZXJlX2RvY190YXJnZXQgIX4gL15bQS1aX11cdyskLyApIHsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+Y29tcGxhaW4oCiAgICAgICAgICAgICAgICAgICAgICAgICJVbmNvbnZlbnRpb25hbCBoZXJlLXRhcmdldDogJyRoZXJlX2RvY190YXJnZXQnXG4iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICMgbm90aGluZyB0byBjb21wbGFpbiBhYm91dAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJGV4cGVjdGluZyA9PSBURVJNICkgewogICAgICAgICAgICAgICAgaWYgKCAhJHNhd19lcnJvciApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBzaG91bGRuJ3QgaGFwcGVuLi5hcnJpdmluZyBoZXJlIGltcGxpZXMgYW4gZXJyb3IgaW4KICAgICAgICAgICAgICAgICAgICAjIHRoZSBsb2dpYyBpbiBzdWIgJ2ZpbmRfaGVyZV9kb2MnCiAgICAgICAgICAgICAgICAgICAgaWYgKERFVkVMX01PREUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPkZhdWx0KDw8RU9NKTsKUHJvZ3JhbSBidWc7IGRpZG4ndCBmaW5kIGhlcmUgZG9jIHRhcmdldApFT00KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPndhcm5pbmcoCiAgICAgICAgICAgICAgICAgICAgICAgICJQb3NzaWJsZSBwcm9ncmFtIGVycm9yOiBkaWRuJ3QgZmluZCBoZXJlIGRvYyB0YXJnZXRcbiIKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICRzZWxmLT5yZXBvcnRfZGVmaW5pdGVfYnVnKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgdGFyZ2V0IG5vdCBmb3VuZCwgZXhwZWN0aW5nID09IFVOS05PV04KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAjIGFzc3VtZSBpdCBpcyBhIHNoaWZ0CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBkb19MRUZUX1NISUZUCgogICAgc3ViIGRvX05FV19IRVJFX0RPQyB7CgogICAgICAgICMgJzw8ficgPSBhIGhlcmUtZG9jLCBuZXcgdHlwZSBhZGRlZCBpbiB2MjYKCiAgICAgICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICAgICAgcmV0dXJuCiAgICAgICAgICBpZiAoICRpID49ICRtYXhfdG9rZW5faW5kZXggKTsgICMgaGVyZS1kb2Mgbm90IHBvc3NpYmxlIGlmIGVuZCBvZiBsaW5lCiAgICAgICAgaWYgKCAkZXhwZWN0aW5nICE9IE9QRVJBVE9SICkgewogICAgICAgICAgICBteSAoICRmb3VuZF90YXJnZXQsICRoZXJlX2RvY190YXJnZXQsICRoZXJlX3F1b3RlX2NoYXJhY3RlciwKICAgICAgICAgICAgICAgICRzYXdfZXJyb3IgKTsKICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgJGZvdW5kX3RhcmdldCwgJGhlcmVfZG9jX3RhcmdldCwgJGhlcmVfcXVvdGVfY2hhcmFjdGVyLCAkaSwKICAgICAgICAgICAgICAgICRzYXdfZXJyb3IKICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgPSAkc2VsZi0+ZmluZF9oZXJlX2RvYyggJGV4cGVjdGluZywgJGksICRydG9rZW5zLCAkcnRva2VuX3R5cGUsCiAgICAgICAgICAgICAgICAkcnRva2VuX21hcCwgJG1heF90b2tlbl9pbmRleCApOwoKICAgICAgICAgICAgaWYgKCRmb3VuZF90YXJnZXQpIHsKCiAgICAgICAgICAgICAgICBpZiAoIGxlbmd0aCgkaGVyZV9kb2NfdGFyZ2V0KSA+IDgwICkgewogICAgICAgICAgICAgICAgICAgIG15ICR0cnVuY2F0ZWQgPSBzdWJzdHIoICRoZXJlX2RvY190YXJnZXQsIDAsIDgwICk7CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPmNvbXBsYWluKCJMb25nIGhlcmUtdGFyZ2V0OiAnJHRydW5jYXRlZCcgLi4uXG4iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJGhlcmVfZG9jX3RhcmdldCAhfiAvXltBLVpfXVx3KyQvICkgewogICAgICAgICAgICAgICAgICAgICRzZWxmLT5jb21wbGFpbigKICAgICAgICAgICAgICAgICAgICAgICAgIlVuY29udmVudGlvbmFsIGhlcmUtdGFyZ2V0OiAnJGhlcmVfZG9jX3RhcmdldCdcbiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIyBub3RoaW5nIHRvIGNvbXBsYWluIGFib3V0CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQgd2UgcHV0IGEgbGVhZGluZyBzcGFjZSBvbiB0aGUgaGVyZSBxdW90ZQogICAgICAgICAgICAgICAgIyBjaGFyYWN0ZXIgaW5kaWNhdGUgdGhhdCBpdCBtYXkgYmUgcHJlY2VkZWQgYnkgc3BhY2VzCiAgICAgICAgICAgICAgICAkaGVyZV9xdW90ZV9jaGFyYWN0ZXIgPSBTUEFDRSAuICRoZXJlX3F1b3RlX2NoYXJhY3RlcjsKICAgICAgICAgICAgICAgIHB1c2ggQHskcmhlcmVfdGFyZ2V0X2xpc3R9LAogICAgICAgICAgICAgICAgICBbICRoZXJlX2RvY190YXJnZXQsICRoZXJlX3F1b3RlX2NoYXJhY3RlciBdOwogICAgICAgICAgICAgICAgJHR5cGUgPSAnaCc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgdGFyZ2V0IG5vdCBmb3VuZCAuLgogICAgICAgICAgICBlbHNpZiAoICRleHBlY3RpbmcgPT0gVEVSTSApIHsKICAgICAgICAgICAgICAgIGlmICggISRzYXdfZXJyb3IgKSB7CgogICAgICAgICAgICAgICAgICAgICMgc2hvdWxkbid0IGhhcHBlbi4uYXJyaXZpbmcgaGVyZSBpbXBsaWVzIGFuIGVycm9yIGluCiAgICAgICAgICAgICAgICAgICAgIyB0aGUgbG9naWMgaW4gc3ViICdmaW5kX2hlcmVfZG9jJwogICAgICAgICAgICAgICAgICAgIGlmIChERVZFTF9NT0RFKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5GYXVsdCg8PEVPTSk7ClByb2dyYW0gYnVnOyBkaWRuJ3QgZmluZCBoZXJlIGRvYyB0YXJnZXQKRU9NCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRzZWxmLT53YXJuaW5nKAogICAgICAgICAgICAgICAgICAgICAgICAiUG9zc2libGUgcHJvZ3JhbSBlcnJvcjogZGlkbid0IGZpbmQgaGVyZSBkb2MgdGFyZ2V0XG4iCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+cmVwb3J0X2RlZmluaXRlX2J1ZygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFRhcmdldCBub3QgZm91bmQsIGV4cGVjdGluZz09VU5LTk9XTgogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRzZWxmLT53YXJuaW5nKCJkaWRuJ3QgZmluZCBoZXJlIGRvYyB0YXJnZXQgYWZ0ZXIgJzw8fidcbiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkc2VsZi0+ZXJyb3JfaWZfZXhwZWN0aW5nX09QRVJBVE9SKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBkb19ORVdfSEVSRV9ET0MKCiAgICBzdWIgZG9fUE9JTlRFUiB7CgogICAgICAgICMgICctPicKICAgICAgICByZXR1cm47CiAgICB9CgogICAgc3ViIGRvX1BMVVNfUExVUyB7CgogICAgICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgICAgICMgJysrJwogICAgICAgICMgdHlwZSA9ICdwcCcgZm9yIHByZS1pbmNyZW1lbnQsICcrKycgZm9yIHBvc3QtaW5jcmVtZW50CiAgICAgICAgaWYgICAgKCAkZXhwZWN0aW5nID09IE9QRVJBVE9SICkgeyAkdHlwZSA9ICcrKycgfQogICAgICAgIGVsc2lmICggJGV4cGVjdGluZyA9PSBURVJNICkgICAgIHsgJHR5cGUgPSAncHAnIH0KCiAgICAgICAgIyBoYW5kbGUgKCAkZXhwZWN0aW5nID09IFVOS05PV04gKQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBsb29rIGFoZWFkIC4uCiAgICAgICAgICAgIG15ICggJG5leHRfbm9uYmxhbmtfdG9rZW4sICRpX25leHQgKSA9CiAgICAgICAgICAgICAgJHNlbGYtPmZpbmRfbmV4dF9ub25ibGFua190b2tlbiggJGksICRydG9rZW5zLCAkbWF4X3Rva2VuX2luZGV4ICk7CgogICAgICAgICAgICAjIEZpeCBmb3IgYzA0MjogbG9vayBwYXN0IGEgc2lkZSBjb21tZW50CiAgICAgICAgICAgIGlmICggJG5leHRfbm9uYmxhbmtfdG9rZW4gZXEgJyMnICkgewogICAgICAgICAgICAgICAgKCAkbmV4dF9ub25ibGFua190b2tlbiwgJGlfbmV4dCApID0KICAgICAgICAgICAgICAgICAgJHNlbGYtPmZpbmRfbmV4dF9ub25ibGFua190b2tlbiggJG1heF90b2tlbl9pbmRleCwKICAgICAgICAgICAgICAgICAgICAkcnRva2VucywgJG1heF90b2tlbl9pbmRleCApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICRuZXh0X25vbmJsYW5rX3Rva2VuIGVxICckJyApIHsgJHR5cGUgPSAncHAnIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGRvX1BMVVNfUExVUwoKICAgIHN1YiBkb19GQVRfQ09NTUEgewoKICAgICAgICBteSAkc2VsZiA9IHNoaWZ0OwoKICAgICAgICAjICc9PicKICAgICAgICBpZiAoICRsYXN0X25vbmJsYW5rX3R5cGUgZXEgJHRvayApIHsKICAgICAgICAgICAgJHNlbGYtPmNvbXBsYWluKCJSZXBlYXRlZCAnPT4ncyBcbiIpOwogICAgICAgIH0KCiAgICAgICAgIyBwYXRjaCBmb3Igb3BlcmF0b3JfZXhwZWN0ZWQ6IG5vdGUgaWYgd2UgYXJlIGluIHRoZSBsaXN0ICh1c2UudCkKICAgICAgICAjIFRPRE86IG1ha2UgdmVyc2lvbiBudW1iZXJzIGEgbmV3IHRva2VuIHR5cGUKICAgICAgICBpZiAoICRzdGF0ZW1lbnRfdHlwZSBlcSAndXNlJyApIHsgJHN0YXRlbWVudF90eXBlID0gJ191c2UnIH0KICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgZG9fRkFUX0NPTU1BCgogICAgc3ViIGRvX01JTlVTX01JTlVTIHsKCiAgICAgICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICAgICAgIyAnLS0nCiAgICAgICAgIyB0eXBlID0gJ21tJyBmb3IgcHJlLWRlY3JlbWVudCwgJy0tJyBmb3IgcG9zdC1kZWNyZW1lbnQKCiAgICAgICAgaWYgICAgKCAkZXhwZWN0aW5nID09IE9QRVJBVE9SICkgeyAkdHlwZSA9ICctLScgfQogICAgICAgIGVsc2lmICggJGV4cGVjdGluZyA9PSBURVJNICkgICAgIHsgJHR5cGUgPSAnbW0nIH0KCiAgICAgICAgIyBoYW5kbGUgKCAkZXhwZWN0aW5nID09IFVOS05PV04gKQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBsb29rIGFoZWFkIC4uCiAgICAgICAgICAgIG15ICggJG5leHRfbm9uYmxhbmtfdG9rZW4sICRpX25leHQgKSA9CiAgICAgICAgICAgICAgJHNlbGYtPmZpbmRfbmV4dF9ub25ibGFua190b2tlbiggJGksICRydG9rZW5zLCAkbWF4X3Rva2VuX2luZGV4ICk7CgogICAgICAgICAgICAjIEZpeCBmb3IgYzA0MjogbG9vayBwYXN0IGEgc2lkZSBjb21tZW50CiAgICAgICAgICAgIGlmICggJG5leHRfbm9uYmxhbmtfdG9rZW4gZXEgJyMnICkgewogICAgICAgICAgICAgICAgKCAkbmV4dF9ub25ibGFua190b2tlbiwgJGlfbmV4dCApID0KICAgICAgICAgICAgICAgICAgJHNlbGYtPmZpbmRfbmV4dF9ub25ibGFua190b2tlbiggJG1heF90b2tlbl9pbmRleCwKICAgICAgICAgICAgICAgICAgICAkcnRva2VucywgJG1heF90b2tlbl9pbmRleCApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICRuZXh0X25vbmJsYW5rX3Rva2VuIGVxICckJyApIHsgJHR5cGUgPSAnbW0nIH0KICAgICAgICB9CgogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBkb19NSU5VU19NSU5VUwoKICAgIHN1YiBkb19MT0dJQ0FMX0FORCB7CgogICAgICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgICAgICMgJyYmJwogICAgICAgICRzZWxmLT5lcnJvcl9pZl9leHBlY3RpbmdfVEVSTSgpCiAgICAgICAgICBpZiAoICRleHBlY3RpbmcgPT0gVEVSTSAmJiAkbGFzdF9ub25ibGFua190b2tlbiBuZSAnLCcgKTsgICAgI2MwMTUKICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgZG9fTE9HSUNBTF9BTkQKCiAgICBzdWIgZG9fTE9HSUNBTF9PUiB7CgogICAgICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgICAgICMgJ3x8JwogICAgICAgICRzZWxmLT5lcnJvcl9pZl9leHBlY3RpbmdfVEVSTSgpCiAgICAgICAgICBpZiAoICRleHBlY3RpbmcgPT0gVEVSTSAmJiAkbGFzdF9ub25ibGFua190b2tlbiBuZSAnLCcgKTsgICAgI2MwMTUKICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgZG9fTE9HSUNBTF9PUgoKICAgIHN1YiBkb19TTEFTSF9TTEFTSCB7CgogICAgICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgICAgICMgJy8vJwogICAgICAgICRzZWxmLT5lcnJvcl9pZl9leHBlY3RpbmdfVEVSTSgpCiAgICAgICAgICBpZiAoICRleHBlY3RpbmcgPT0gVEVSTSApOwogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBkb19TTEFTSF9TTEFTSAoKICAgIHN1YiBkb19ESUdJVFMgewoKICAgICAgICBteSAkc2VsZiA9IHNoaWZ0OwoKICAgICAgICAjICdkJyA9IHN0cmluZyBvZiBkaWdpdHMKICAgICAgICAkc2VsZi0+ZXJyb3JfaWZfZXhwZWN0aW5nX09QRVJBVE9SKCJOdW1iZXIiKQogICAgICAgICAgaWYgKCAkZXhwZWN0aW5nID09IE9QRVJBVE9SICk7CgogICAgICAgIG15ICRudW1iZXIgPSAkc2VsZi0+c2Nhbl9udW1iZXJfZmFzdCgpOwogICAgICAgIGlmICggIWRlZmluZWQoJG51bWJlcikgKSB7CgogICAgICAgICAgICAjIHNob3VsZG4ndCBoYXBwZW4gLSB3ZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlcgogICAgICAgICAgICBpZiAoREVWRUxfTU9ERSkgewogICAgICAgICAgICAgICAgJHNlbGYtPkZhdWx0KDw8RU9NKTsKbm9uLW51bWJlciBiZWdpbm5pbmcgd2l0aCBkaWdpdC0tcHJvZ3JhbSBidWcKRU9NCiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHNlbGYtPndhcm5pbmcoCiAgICAgICAgICAgICAgICAiVW5leHBlY3RlZCBlcnJvciBjb25kaXRpb246IG5vbi1udW1iZXIgYmVnaW5uaW5nIHdpdGggZGlnaXRcbiIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJHNlbGYtPnJlcG9ydF9kZWZpbml0ZV9idWcoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGRvX0RJR0lUUwoKICAgIHN1YiBkb19BVFRSSUJVVEVfTElTVCB7CgogICAgICAgIG15ICggJHNlbGYsICRuZXh0X25vbmJsYW5rX3Rva2VuICkgPSBAXzsKCiAgICAgICAgIyBDYWxsZWQgYXQgYSBiYXJld29yZCBlbmNvdW50ZXJlZCB3aGlsZSBpbiBhbiBhdHRyaWJ1dGUgbGlzdAogICAgICAgICMgcmV0dXJucyAnaXNfYXR0cmlidXRlJzoKICAgICAgICAjICAgIHRydWUgaWYgYXR0cmlidXRlIGZvdW5kCiAgICAgICAgIyAgICBmYWxzZSBpZiBhbiBhdHRyaWJ1dGUgKGNvbnRpbnVlIHBhcnNpbmcgYmFyZXdvcmQpCgogICAgICAgICMgdHJlYXQgYmFyZSB3b3JkIGZvbGxvd2VkIGJ5IG9wZW4gcGFyZW4gbGlrZSBxdygKICAgICAgICBpZiAoICRuZXh0X25vbmJsYW5rX3Rva2VuIGVxICcoJyApIHsKCiAgICAgICAgICAgICMgRm9yIHNvbWV0aGluZyBsaWtlOgogICAgICAgICAgICAjICAgICA6IHByb3RvdHlwZSgkJCkKICAgICAgICAgICAgIyB3ZSBzaG91bGQgbGV0IGRvX3NjYW5fc3ViIHNlZSBpdCBzbyB0aGF0IGl0IGNhbiBzZWUKICAgICAgICAgICAgIyB0aGUgcHJvdG90eXBlLiAgQWxsIG90aGVyIGF0dHJpYnV0ZXMgZ2V0IHBhcnNlZCBhcyBhCiAgICAgICAgICAgICMgcXVvdGVkIHN0cmluZy4KICAgICAgICAgICAgaWYgKCAkdG9rIGVxICdwcm90b3R5cGUnICkgewogICAgICAgICAgICAgICAgJGlkX3NjYW5fc3RhdGUgPSAncHJvdG90eXBlJzsKCiAgICAgICAgICAgICAgICAjIHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIHdvcmQgJ3Byb3RvdHlwZScKICAgICAgICAgICAgICAgIG15ICRpX2JlZyA9ICRpICsgMTsKICAgICAgICAgICAgICAgICggJGksICR0b2ssICR0eXBlLCAkaWRfc2Nhbl9zdGF0ZSApID0gJHNlbGYtPmRvX3NjYW5fc3ViKAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfbGluZSAgICAgID0+ICRpbnB1dF9saW5lLAogICAgICAgICAgICAgICAgICAgICAgICBpICAgICAgICAgICAgICAgPT4gJGksCiAgICAgICAgICAgICAgICAgICAgICAgIGlfYmVnICAgICAgICAgICA9PiAkaV9iZWcsCiAgICAgICAgICAgICAgICAgICAgICAgIHRvayAgICAgICAgICAgICA9PiAkdG9rLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlICAgICAgICAgICAgPT4gJHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHJ0b2tlbnMgICAgICAgICA9PiAkcnRva2VucywKICAgICAgICAgICAgICAgICAgICAgICAgcnRva2VuX21hcCAgICAgID0+ICRydG9rZW5fbWFwLAogICAgICAgICAgICAgICAgICAgICAgICBpZF9zY2FuX3N0YXRlICAgPT4gJGlkX3NjYW5fc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgIG1heF90b2tlbl9pbmRleCA9PiAkbWF4X3Rva2VuX2luZGV4LAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBJZiBzdWNjZXNzZnVsLCBtYXJrIGFzIHR5cGUgJ3EnIHRvIGJlIGNvbnNpc3RlbnQKICAgICAgICAgICAgICAgICMgd2l0aCBvdGhlciBhdHRyaWJ1dGVzLiAgVHlwZSAndycgd291bGQgYWxzbyB3b3JrLgogICAgICAgICAgICAgICAgaWYgKCAkaSA+ICRpX2JlZyApIHsKICAgICAgICAgICAgICAgICAgICAkdHlwZSA9ICdxJzsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIElmIG5vdCBzdWNjZXNzZnVsLCBjb250aW51ZSBhbmQgcGFyc2UgYXMgYSBxdW90ZS4KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBBbGwgb3RoZXIgYXR0cmlidXRlIGxpc3RzIG11c3QgYmUgcGFyc2VkIGFzIHF1b3RlcwogICAgICAgICAgICAjIChzZWUgJ3NpZ25hdHVyZXMudCcgZm9yIGdvb2QgZXhhbXBsZXMpCiAgICAgICAgICAgICRpbl9xdW90ZSAgICAgICAgICAgICAgICA9ICRxdW90ZV9pdGVtc3sncSd9OwogICAgICAgICAgICAkYWxsb3dlZF9xdW90ZV9tb2RpZmllcnMgPSAkcXVvdGVfbW9kaWZpZXJzeydxJ307CiAgICAgICAgICAgICR0eXBlICAgICAgICAgICAgICAgICAgICA9ICdxJzsKICAgICAgICAgICAgJHF1b3RlX3R5cGUgICAgICAgICAgICAgID0gJ3EnOwogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CgogICAgICAgICMgaGFuZGxlIGJhcmV3b3JkIG5vdCBmb2xsb3dlZCBieSBvcGVuIHBhcmVuCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICR0eXBlID0gJ3cnOwogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CgogICAgICAgICMgYXR0cmlidXRlIG5vdCBmb3VuZAogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBkb19BVFRSSUJVVEVfTElTVAoKICAgIHN1YiBkb19YX09QRVJBVE9SIHsKCiAgICAgICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICAgICAgaWYgKCAkdG9rIGVxICd4JyApIHsKICAgICAgICAgICAgaWYgKCAkcnRva2Vucy0+WyAkaSArIDEgXSBlcSAnPScgKSB7ICAgICMgeD0KICAgICAgICAgICAgICAgICR0b2sgID0gJ3g9JzsKICAgICAgICAgICAgICAgICR0eXBlID0gJHRvazsKICAgICAgICAgICAgICAgICRpKys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkdHlwZSA9ICd4JzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgU3BsaXQgYSBwcmV0b2tlbiBsaWtlICd4MTAnIGludG8gJ3gnIGFuZCAnMTAnLgogICAgICAgICAgICAjIE5vdGU6IEluIHByZXZpb3VzIHZlcnNpb25zIG9mIHBlcmx0aWR5IGl0IHdhcyBtYXJrZWQKICAgICAgICAgICAgIyBhcyBhIG51bWJlciwgJHR5cGUgPSAnbicsIGFuZCBmaXhlZCBkb3duc3RyZWFtIGJ5IHRoZQogICAgICAgICAgICAjIEZvcm1hdHRlci4KICAgICAgICAgICAgJHR5cGUgPSAnbic7CiAgICAgICAgICAgIGlmICggJHNlbGYtPnNwbGl0X3ByZXRva2VuKDEpICkgewogICAgICAgICAgICAgICAgJHR5cGUgPSAneCc7CiAgICAgICAgICAgICAgICAkdG9rICA9ICd4JzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgZG9fWF9PUEVSQVRPUgoKICAgIHN1YiBkb19VU0VfQ09OU1RBTlQgewoKICAgICAgICBteSAkc2VsZiA9IHNoaWZ0OwoKICAgICAgICAkc2VsZi0+c2Nhbl9iYXJlX2lkZW50aWZpZXIoKTsKICAgICAgICBteSAoICRuZXh0X25vbmJsYW5rX3RvazIsICRpX25leHQyX3V1ICkgPQogICAgICAgICAgJHNlbGYtPmZpbmRfbmV4dF9ub25ibGFua190b2tlbiggJGksICRydG9rZW5zLCAkbWF4X3Rva2VuX2luZGV4ICk7CgogICAgICAgIGlmICgkbmV4dF9ub25ibGFua190b2syKSB7CgogICAgICAgICAgICBpZiAoICRpc19rZXl3b3JkeyRuZXh0X25vbmJsYW5rX3RvazJ9ICkgewoKICAgICAgICAgICAgICAgICMgQXNzdW1lIHF3IGlzIHVzZWQgYXMgYSBxdW90ZSBhbmQgb2theSwgYXMgaW46CiAgICAgICAgICAgICAgICAjICB1c2UgY29uc3RhbnQgcXd7IERFQlVHIDAgfTsKICAgICAgICAgICAgICAgICMgTm90IHdvcnRoIHRyeWluZyB0byBwYXJzZSBmb3IganVzdCBhIHdhcm5pbmcKCiAgICAgICAgICAgICAgICAjIE5PVEU6IFRoaXMgd2FybmluZyBpcyBkZWFjdGl2YXRlZCBiZWNhdXNlIHJlY2VudAogICAgICAgICAgICAgICAgIyB2ZXJzaW9ucyBvZiBwZXJsIGRvIG5vdCBjb21wbGFpbiBoZXJlLCBidXQKICAgICAgICAgICAgICAgICMgdGhlIGNvZGluZyBpcyByZXRhaW5lZCBmb3IgcmVmZXJlbmNlLgogICAgICAgICAgICAgICAgaWYgKCAwICYmICRuZXh0X25vbmJsYW5rX3RvazIgbmUgJ3F3JyApIHsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+d2FybmluZygKIkF0dGVtcHRpbmcgdG8gZGVmaW5lIGNvbnN0YW50ICckbmV4dF9ub25ibGFua190b2syJyB3aGljaCBpcyBhIHBlcmwga2V5d29yZFxuIgogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJHJpc19jb25zdGFudC0+eyRjdXJyZW50X3BhY2thZ2V9eyRuZXh0X25vbmJsYW5rX3RvazJ9ID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgZG9fVVNFX0NPTlNUQU5UCgogICAgc3ViIGRvX0tFWVdPUkQgewoKICAgICAgICBteSAkc2VsZiA9IHNoaWZ0OwoKICAgICAgICAjIGZvdW5kIGEga2V5d29yZCAtIHNldCBhbnkgYXNzb2NpYXRlZCBmbGFncwogICAgICAgICR0eXBlID0gJ2snOwoKICAgICAgICAjIFNpbmNlIGZvciBhbmQgZm9yZWFjaCBtYXkgbm90IGJlIGZvbGxvd2VkIGltbWVkaWF0ZWx5CiAgICAgICAgIyBieSBhbiBvcGVuaW5nIHBhcmVuLCB3ZSBoYXZlIHRvIHJlbWVtYmVyIHdoaWNoIGtleXdvcmQKICAgICAgICAjIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV4dCAnKCcKICAgICAgICAjIFByZXZpb3VzbHksIGJlZm9yZSB1cGRhdGUgICBjMjMwIDogaWYgKCAkaXNfZm9yX2ZvcmVhY2h7JHRva30gKSB7CiAgICAgICAgIyMoaWYgZWxzaWYgdW5sZXNzIHdoaWxlIHVudGlsIGZvciBmb3JlYWNoIHN3aXRjaCBjYXNlIGdpdmVuIHdoZW4gY2F0Y2gpCiAgICAgICAgaWYgKCAkaXNfYmxvY2t0eXBlX3dpdGhfcGFyZW57JHRva30gKSB7CiAgICAgICAgICAgIGlmICggbmV3X3N0YXRlbWVudF9vaygpICkgewogICAgICAgICAgICAgICAgJHdhbnRfcGFyZW4gPSAkdG9rOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHJlY29nbml6ZSAndXNlJyBzdGF0ZW1lbnRzLCB3aGljaCBhcmUgc3BlY2lhbAogICAgICAgIGlmICggJGlzX3VzZV9yZXF1aXJleyR0b2t9ICkgewogICAgICAgICAgICAkc3RhdGVtZW50X3R5cGUgPSAkdG9rOwogICAgICAgICAgICAkc2VsZi0+ZXJyb3JfaWZfZXhwZWN0aW5nX09QRVJBVE9SKCkKICAgICAgICAgICAgICBpZiAoICRleHBlY3RpbmcgPT0gT1BFUkFUT1IgKTsKICAgICAgICB9CgogICAgICAgICMgcmVtZW1iZXIgbXkgYW5kIG91ciB0byBjaGVjayBmb3IgdHJhaWxpbmcgIjogc2hhcmVkIgogICAgICAgIGVsc2lmICggJGlzX215X291cl9zdGF0ZXskdG9rfSApIHsKICAgICAgICAgICAgJHN0YXRlbWVudF90eXBlID0gJHRvazsKICAgICAgICB9CgogICAgICAgICMgQ2hlY2sgZm9yIHVuZXhwZWN0ZWQgJ2Vsc2lmJwogICAgICAgIGVsc2lmICggJHRvayBlcSAnZWxzaWYnICkgewogICAgICAgICAgICBpZiAoCgogICAgICAgICAgICAgICAgISRpc19pZl9lbHNpZl91bmxlc3N7JGxhc3Rfbm9uYmxhbmtfYmxvY2tfdHlwZX0KCiAgICAgICAgICAgICAgICAjIEFsbG93IGlzb2xhdGVkIGJsb2NrcyBvZiBhbnkga2luZCBkdXJpbmcgZWRpdGluZwogICAgICAgICAgICAgICAgIyBieSBjaGVja2luZyBmb3IgYSBsYXN0IG5vYmxhbmsgdG9rZW4gb2YgJzsnIGFuZCBubwogICAgICAgICAgICAgICAgIyBzZXF1ZW5jZSBudW1iZXJzIGhhdmluZyBiZWVuIGlzc3VlZCAoYzI3MikuIFRoZSBjaGVjawogICAgICAgICAgICAgICAgIyBvbiBzZXF1ZW5jZSBudW1iZXIgaXMgbm90IHBlcmZlY3QgYnV0IGdvb2QgZW5vdWdoLgogICAgICAgICAgICAgICAgJiYgISgKICAgICAgICAgICAgICAgICAgICAgICAkbGFzdF9ub25ibGFua190b2tlbiBlcSAnOycKICAgICAgICAgICAgICAgICAgICAmJiAkbmV4dF9zZXF1ZW5jZV9udW1iZXIgPT0gU0VRX1JPT1QgKyAxCiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJHNlbGYtPndhcm5pbmcoCiAgICAgICAgICAgICAgICAgICAgImV4cGVjdGluZyAnJHRvaycgdG8gZm9sbG93IG9uZSBvZiAnaWZ8ZWxzaWZ8dW5sZXNzJ1xuIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgQ2hlY2sgZm9yIHVuZXhwZWN0ZWQgJ2Vsc2UnCiAgICAgICAgZWxzaWYgKCAkdG9rIGVxICdlbHNlJyApIHsKCiAgICAgICAgICAgICMgcGF0Y2hlZCBmb3IgU1dJVENIL0NBU0UKICAgICAgICAgICAgaWYgKAoKICAgICAgICAgICAgICAgICEkaXNfaWZfZWxzaWZfdW5sZXNzX2Nhc2Vfd2hlbnskbGFzdF9ub25ibGFua19ibG9ja190eXBlfQoKICAgICAgICAgICAgICAgICMgcGF0Y2ggdG8gYXZvaWQgYW4gdW53YW50ZWQgZXJyb3IgbWVzc2FnZSBmb3IKICAgICAgICAgICAgICAgICMgdGhlIGNhc2Ugb2YgYSBwYXJlbmxlc3MgJ2Nhc2UnIChSVCAxMDU0ODQpOgogICAgICAgICAgICAgICAgIyBzd2l0Y2ggKCAxICkgeyBjYXNlIHggeyAyIH0gZWxzZSB7IH0gfQogICAgICAgICAgICAgICAgJiYgISRpc19pZl9lbHNpZl91bmxlc3NfY2FzZV93aGVueyRzdGF0ZW1lbnRfdHlwZX0KCiAgICAgICAgICAgICAgICAjIEFsbG93IGlzb2xhdGVkIGJsb2NrcyBvZiBhbnkga2luZCBkdXJpbmcgZWRpdGluZyAoYzI3MikKICAgICAgICAgICAgICAgICYmICEoCiAgICAgICAgICAgICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfdG9rZW4gZXEgJzsnCiAgICAgICAgICAgICAgICAgICAgJiYgJG5leHRfc2VxdWVuY2VfbnVtYmVyID09IFNFUV9ST09UICsgMQogICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRzZWxmLT53YXJuaW5nKAoiZXhwZWN0aW5nICckdG9rJyB0byBmb2xsb3cgb25lIG9mICdpZnxlbHNpZnx1bmxlc3N8Y2FzZXx3aGVuJ1xuIgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBwYXRjaCBmb3IgU1dJVENIL0NBU0UgaWYgJ2Nhc2UnIGFuZCAnd2hlbiBhcmUKICAgICAgICAjIHRyZWF0ZWQgYXMga2V5d29yZHMuICBBbHNvICdkZWZhdWx0JyBmb3IgU3dpdGNoOjpQbGFpbgogICAgICAgIGVsc2lmICgkdG9rIGVxICd3aGVuJwogICAgICAgICAgICB8fCAkdG9rIGVxICdjYXNlJwogICAgICAgICAgICB8fCAkdG9rIGVxICdkZWZhdWx0JyApCiAgICAgICAgewogICAgICAgICAgICAkc3RhdGVtZW50X3R5cGUgPSAkdG9rOyAgICAjIG5leHQgJ3snIGlzIGJsb2NrCiAgICAgICAgfQoKICAgICAgICAjIGZlYXR1cmUgJ2Vycicgd2FzIHJlbW92ZWQgaW4gUGVybCA1LjEwLiAgU28gbWFyayB0aGlzIGFzCiAgICAgICAgIyBhIGJhcmV3b3JkIHVubGVzcyBhbiBvcGVyYXRvciBpcyBleHBlY3RlZCAoc2VlIGMxNTgpLgogICAgICAgIGVsc2lmICggJHRvayBlcSAnZXJyJyApIHsKICAgICAgICAgICAgaWYgKCAkZXhwZWN0aW5nICE9IE9QRVJBVE9SICkgeyAkdHlwZSA9ICd3JyB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAjIyBubyBzcGVjaWFsIHRyZWF0bWVudCBuZWVkZWQKICAgICAgICB9CgogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBkb19LRVlXT1JECgogICAgc3ViIGRvX1FVT1RFX09QRVJBVE9SIHsKCiAgICAgICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICAgICAgaWYgKCAkZXhwZWN0aW5nID09IE9QRVJBVE9SICkgewoKICAgICAgICAgICAgIyBCZSBjYXJlZnVsIG5vdCB0byBjYWxsIGFuIGVycm9yIGZvciBhIHF3IHF1b3RlCiAgICAgICAgICAgICMgd2hlcmUgYSBwYXJlbnRoZXNpemVkIGxpc3QgaXMgYWxsb3dlZC4gIEZvciBleGFtcGxlLAogICAgICAgICAgICAjIGl0IGNvdWxkIGFsc28gYmUgYSBmb3IvZm9yZWFjaCBjb25zdHJ1Y3Qgc3VjaCBhcwogICAgICAgICAgICAjCiAgICAgICAgICAgICMgICAgZm9yZWFjaCBteSAka2V5IHF3XFVubyBEdWUgVHJlcyBRdWFkcm9cIHsKICAgICAgICAgICAgIyAgICAgICAgcHJpbnQgIlNldCAka2V5XG4iOwogICAgICAgICAgICAjICAgIH0KICAgICAgICAgICAgIwoKICAgICAgICAgICAgIyBPciBpdCBjb3VsZCBiZSBhIGZ1bmN0aW9uIGNhbGwuCiAgICAgICAgICAgICMgTk9URTogQnJhY2VzIGluIHNvbWV0aGluZyBsaWtlICZ7IHh4eCB9IGFyZSBub3QKICAgICAgICAgICAgIyBtYXJrZWQgYXMgYSBibG9jaywgd2UgbWlnaHQgaGF2ZSBhIG1ldGhvZCBjYWxsLgogICAgICAgICAgICAjICZtZXRob2QoLi4uKSwgJG1ldGhvZC0+KC4uKSwgJnttZXRob2R9KC4uLiksCiAgICAgICAgICAgICMgJHJlZlsyXShsaXN0KSBpcyBvayAmIHNob3J0IGZvciAkcmVmWzJdLT4obGlzdCkKICAgICAgICAgICAgIwogICAgICAgICAgICAjIFNlZSBub3RlcyBpbiAnc3ViIGNvZGVfYmxvY2tfdHlwZScgYW5kCiAgICAgICAgICAgICMgJ3N1YiBpc19ub25fc3RydWN0dXJhbF9icmFjZScKCiAgICAgICAgICAgIG15ICRwYXJlbl9saXN0X3Bvc3NpYmxlID0gJHRvayBlcSAncXcnCiAgICAgICAgICAgICAgJiYgKCAkbGFzdF9ub25ibGFua190b2tlbiA9fiAvXihbXF1cfVwmXXxcLVw+KS8KICAgICAgICAgICAgICAgIHx8ICRpc19mb3JfZm9yZWFjaHskd2FudF9wYXJlbn0gKTsKCiAgICAgICAgICAgIGlmICggISRwYXJlbl9saXN0X3Bvc3NpYmxlICkgewogICAgICAgICAgICAgICAgJHNlbGYtPmVycm9yX2lmX2V4cGVjdGluZ19PUEVSQVRPUigpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRpbl9xdW90ZSAgICAgICAgICAgICAgICA9ICRxdW90ZV9pdGVtc3skdG9rfTsKICAgICAgICAkYWxsb3dlZF9xdW90ZV9tb2RpZmllcnMgPSAkcXVvdGVfbW9kaWZpZXJzeyR0b2t9OwoKICAgICAgICAjIEFsbCBxdW90ZSB0eXBlcyBhcmUgJ1EnIGV4Y2VwdCBwb3NzaWJseSBxdyBxdW90ZXMuCiAgICAgICAgIyBxdyBxdW90ZXMgYXJlIHNwZWNpYWwgaW4gdGhhdCB0aGV5IG1heSBnZW5lcmFsbHkgYmUgdHJpbW1lZAogICAgICAgICMgb2YgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZS4gIFNvIHRoZXkgYXJlIGdpdmVuIGEKICAgICAgICAjIHNlcGFyYXRlIHR5cGUsICdxJywgdW5sZXNzIHJlcXVlc3RlZCBvdGhlcndpc2UuCiAgICAgICAgJHR5cGUgPQogICAgICAgICAgKCAkdG9rIGVxICdxdycgJiYgJHJPcHRzX3RyaW1fcXcgKQogICAgICAgICAgPyAncScKICAgICAgICAgIDogJ1EnOwogICAgICAgICRxdW90ZV90eXBlID0gJHR5cGU7CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGRvX1FVT1RFX09QRVJBVE9SCgogICAgc3ViIGRvX1VOS05PV05fQkFSRVdPUkQgewoKICAgICAgICBteSAoICRzZWxmLCAkbmV4dF9ub25ibGFua190b2tlbiApID0gQF87CgogICAgICAgICRzZWxmLT5zY2FuX2JhcmVfaWRlbnRpZmllcigpOwoKICAgICAgICBpZiAoICAgJHN0YXRlbWVudF90eXBlIGVxICd1c2UnCiAgICAgICAgICAgICYmICRsYXN0X25vbmJsYW5rX3Rva2VuIGVxICd1c2UnICkKICAgICAgICB7CiAgICAgICAgICAgICRyc2F3X3VzZV9tb2R1bGUtPnskY3VycmVudF9wYWNrYWdlfS0+eyR0b2t9ID0gMTsKICAgICAgICB9CgogICAgICAgIGlmICggJHR5cGUgZXEgJ3cnICkgewoKICAgICAgICAgICAgaWYgKCAkZXhwZWN0aW5nID09IE9QRVJBVE9SICkgewoKICAgICAgICAgICAgICAgICMgUGF0Y2ggdG8gYXZvaWQgZXJyb3IgbWVzc2FnZSBmb3IgUlBlcmwgb3ZlcmxvYWRlZAogICAgICAgICAgICAgICAgIyBvcGVyYXRvciBmdW5jdGlvbnM6IHVzZSBvdmVybG9hZAogICAgICAgICAgICAgICAgIyAgICAnKycgPT4gXCZzc2VfYWRkLAogICAgICAgICAgICAgICAgIyAgICAnLScgPT4gXCZzc2Vfc3ViLAogICAgICAgICAgICAgICAgIyAgICAnKicgPT4gXCZzc2VfbXVsLAogICAgICAgICAgICAgICAgIyAgICAnLycgPT4gXCZzc2VfZGl2OwogICAgICAgICAgICAgICAgIyBUT0RPOiB0aGlzIGNvdWxkIGV2ZW50dWFsbHkgYmUgZ2VuZXJhbGl6ZWQKICAgICAgICAgICAgICAgIGlmICggICAkcnNhd191c2VfbW9kdWxlLT57JGN1cnJlbnRfcGFja2FnZX0tPnsnUlBlcmwnfQogICAgICAgICAgICAgICAgICAgICYmICR0b2sgPX4gL15zc2VfKG11bHxkaXZ8YWRkfHN1YikkLyApCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgcGF0Y2ggZm9yIFN5bnRheDo6T3BlcmF0b3I6OkluLCBnaXQgIzE2MgogICAgICAgICAgICAgICAgZWxzaWYgKCAkdG9rIGVxICdpbicgJiYgJG5leHRfbm9uYmxhbmtfdG9rZW4gZXEgJzonICkgewoKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIEZpeCBwYXJ0IDEgZm9yIGdpdCAjNjMgaW4gd2hpY2ggYSBjb21tZW50IGZhbGxzCiAgICAgICAgICAgICAgICAjIGJldHdlZW4gYW4gLT4gYW5kIHRoZSBmb2xsb3dpbmcgd29yZC4gIEFuCiAgICAgICAgICAgICAgICAjIGFsdGVybmF0ZSBmaXggd291bGQgYmUgdG8gY2hhbmdlIG9wZXJhdG9yX2V4cGVjdGVkCiAgICAgICAgICAgICAgICAjIHRvIHJldHVybiBhbiBVTktOT1dOIGZvciB0aGlzIHR5cGUuCiAgICAgICAgICAgICAgICBlbHNpZiAoICRsYXN0X25vbmJsYW5rX3R5cGUgZXEgJy0+JyApIHsKCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBkb24ndCBjb21wbGFpbiBhYm91dCBwb3NzaWJsZSBpbmRpcmVjdCBvYmplY3QKICAgICAgICAgICAgICAgICMgbm90YXRpb24uCiAgICAgICAgICAgICAgICAjIEZvciBleGFtcGxlOgogICAgICAgICAgICAgICAgIyAgIHBhY2thZ2UgbWFpbjsKICAgICAgICAgICAgICAgICMgICBzdWIgbmV3KCQpIHsgLi4uIH0KICAgICAgICAgICAgICAgICMgICAkYiA9IG5ldyBBOjo7ICAjIGNhbGxzIEE6Om5ldwogICAgICAgICAgICAgICAgIyAgICRjID0gbmV3IEE7ICAgICMgc2FtZSB0aGluZyBidXQgc3VzcGljaW91cwogICAgICAgICAgICAgICAgIyBUaGlzIHdpbGwgY2FsbCBBOjpuZXcgYnV0IHdlIGhhdmUgYSAnbmV3JyBpbgogICAgICAgICAgICAgICAgIyBtYWluOjogd2hpY2ggbG9va3MgbGlrZSBhIGNvbnN0YW50LgogICAgICAgICAgICAgICAgIwogICAgICAgICAgICAgICAgZWxzaWYgKCAkbGFzdF9ub25ibGFua190eXBlIGVxICdDJyApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICR0b2sgIX4gLzo6JC8gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5jb21wbGFpbig8PEVPTSk7CkV4cGVjdGluZyBvcGVyYXRvciBhZnRlciAnJGxhc3Rfbm9uYmxhbmtfdG9rZW4nIGJ1dCBmb3VuZCBiYXJlIHdvcmQgJyR0b2snCiAgICAgICBNYXliZSBpbmRpcmVjdGV0IG9iamVjdCBub3RhdGlvbj8KRU9NCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPmVycm9yX2lmX2V4cGVjdGluZ19PUEVSQVRPUigiYmFyZXdvcmQiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBtYXJrIGJhcmUgd29yZHMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSBwYXJlbiBhcwogICAgICAgICAgICAjIGZ1bmN0aW9ucwogICAgICAgICAgICAkbmV4dF90b2sgPSAkcnRva2Vucy0+WyAkaSArIDEgXTsKICAgICAgICAgICAgaWYgKCAkbmV4dF90b2sgZXEgJygnICkgewoKICAgICAgICAgICAgICAgICMgUGF0Y2ggZm9yIGlzc3VlIGMxNTEsIHdoZXJlIHdlIGFyZSBwcm9jZXNzaW5nIGEgc25pcHBldCBhbmQKICAgICAgICAgICAgICAgICMgaGF2ZSBub3Qgc2VlbiB0aGF0IFNQQUNFIGlzIGEgY29uc3RhbnQuICBJbiB0aGlzIGNhc2UgJ3gnIGlzCiAgICAgICAgICAgICAgICAjIHByb2JhYmx5IGFuIG9wZXJhdG9yLiBUaGUgb25seSBkaXNhZHZhbnRhZ2Ugd2l0aCBhbiBpbmNvcnJlY3QKICAgICAgICAgICAgICAgICMgZ3Vlc3MgaXMgdGhhdCB0aGUgc3BhY2UgYWZ0ZXIgaXQgbWF5IGJlIGluY29ycmVjdC4gRm9yIGV4YW1wbGUKICAgICAgICAgICAgICAgICMgICAkc3RyIC49IFNQQUNFIHggKCAxNiAtIGxlbmd0aCgkc3RyKSApOyBTZWUgYWxzbyBiMTQxMC4KICAgICAgICAgICAgICAgIGlmICggJHRvayBlcSAneCcgJiYgJGxhc3Rfbm9uYmxhbmtfdHlwZSBlcSAndycgKSB7ICR0eXBlID0gJ3gnIH0KCiAgICAgICAgICAgICAgICAjIEZpeCBwYXJ0IDIgZm9yIGdpdCAjNjMuICBMZWF2ZSB0eXBlIGFzICd3JyB0byBrZWVwCiAgICAgICAgICAgICAgICAjIHRoZSB0eXBlIHRoZSBzYW1lIGFzIGlmIHRoZSAtPiB3ZXJlIG5vdCBzZXBhcmF0ZWQKICAgICAgICAgICAgICAgIGVsc2lmICggJGxhc3Rfbm9uYmxhbmtfdHlwZSBuZSAnLT4nICkgeyAkdHlwZSA9ICdVJyB9CgogICAgICAgICAgICAgICAgIyBub3QgYSBzcGVjaWFsIGNhc2UKICAgICAgICAgICAgICAgIGVsc2UgeyB9CgogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHVuZGVyc2NvcmUgYWZ0ZXIgZmlsZSB0ZXN0IG9wZXJhdG9yIGlzIGZpbGUgaGFuZGxlCiAgICAgICAgICAgIGlmICggJHRvayBlcSAnXycgJiYgJGxhc3Rfbm9uYmxhbmtfdHlwZSBlcSAnRicgKSB7CiAgICAgICAgICAgICAgICAkdHlwZSA9ICdaJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBwYXRjaCBmb3IgU1dJVENIL0NBU0UgaWYgJ2Nhc2UnIGFuZCAnd2hlbiBhcmUKICAgICAgICAgICAgIyBub3QgdHJlYXRlZCBhcyBrZXl3b3JkczoKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgKCAkdG9rIGVxICdjYXNlJyAmJiAkcmJyYWNlX3R5cGUtPlskYnJhY2VfZGVwdGhdIGVxICdzd2l0Y2gnICkKICAgICAgICAgICAgICAgIHx8ICggICAkdG9rIGVxICd3aGVuJwogICAgICAgICAgICAgICAgICAgICYmICRyYnJhY2VfdHlwZS0+WyRicmFjZV9kZXB0aF0gZXEgJ2dpdmVuJyApCiAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkc3RhdGVtZW50X3R5cGUgPSAkdG9rOyAgICAjIG5leHQgJ3snIGlzIGJsb2NrCiAgICAgICAgICAgICAgICAkdHlwZSAgICAgICAgICAgPSAnayc7ICAgICAjIGZvciBrZXl3b3JkIHN5bnRheCBjb2xvcmluZwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggJG5leHRfbm9uYmxhbmtfdG9rZW4gZXEgJygnICkgewoKICAgICAgICAgICAgICAgICMgcGF0Y2ggZm9yIFNXSVRDSC9DQVNFIGlmIHN3aXRjaCBhbmQgZ2l2ZW4gbm90IGtleXdvcmRzCiAgICAgICAgICAgICAgICAjIFN3aXRjaCBpcyBub3QgYSBwZXJsIDUga2V5d29yZCwgYnV0IHdlIHdpbGwgZ2FtYmxlCiAgICAgICAgICAgICAgICAjIGFuZCBtYXJrIHN3aXRjaCBmb2xsb3dlZCBieSBwYXJlbiBhcyBhIGtleXdvcmQuICBUaGlzCiAgICAgICAgICAgICAgICAjIGlzIG9ubHkgbmVjZXNzYXJ5IHRvIGdldCBodG1sIHN5bnRheCBjb2xvcmluZyBuaWNlLAogICAgICAgICAgICAgICAgIyBhbmQgZG9lcyBub3QgY29tbWl0IHRoaXMgYXMgYmVpbmcgYSBzd2l0Y2gvY2FzZS4KICAgICAgICAgICAgICAgIGlmICggJHRvayBlcSAnc3dpdGNoJyB8fCAkdG9rIGVxICdnaXZlbicgKSB7CiAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAnayc7ICAgICMgZm9yIGtleXdvcmQgc3ludGF4IGNvbG9yaW5nCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBtYXJrICd4JyBhcyBvcGVyYXRvciBmb3Igc29tZXRoaW5nIGxpa2UgdGhpcyAoc2VlIGIxNDEwKQogICAgICAgICAgICAgICAgIyAgbXkgJGxpbmUgPSBqb2luKCBMRF9YLCBtYXAgeyBMRF9IIHggKCAkXyArIDIgKSB9IEAkd2lkdGhzICk7CiAgICAgICAgICAgICAgICBlbHNpZiAoICR0b2sgZXEgJ3gnICYmICRsYXN0X25vbmJsYW5rX3R5cGUgZXEgJ3cnICkgewogICAgICAgICAgICAgICAgICAgICR0eXBlID0gJ3gnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIyMgbm90IGEgc3BlY2lhbCBjYXNlCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGRvX1VOS05PV05fQkFSRVdPUkQKCiAgICBzdWIgc3ViX2F0dHJpYnV0ZV9va19oZXJlIHsKCiAgICAgICAgbXkgKCAkc2VsZiwgJHRva19rdywgJG5leHRfbm9uYmxhbmtfdG9rZW4sICRpX25leHQgKSA9IEBfOwoKICAgICAgICAjIERlY2lkZSBpZiBhICc6JyBjYW4gaW50cm9kdWNlIGFuIGF0dHJpYnV0ZS4gRm9yIGV4YW1wbGUsCiAgICAgICAgIyBzb21ldGhpbmcgbGlrZSAnc3ViIDonCgogICAgICAgICMgR2l2ZW46CiAgICAgICAgIyAgICR0b2tfa3cgPSBhIGJhcmV3b3JkIHRva2VuCiAgICAgICAgIyAgICRuZXh0X25vbmJsYW5rX3Rva2VuID0gYSBmb2xsb3dpbmcgJzonIGJlaW5nIGV4YW1pbmVkCiAgICAgICAgIyAgICRpX25leHQgPSB0aGUgaW5kZXggb2YgdGhlIGZvbGxvd2luZyAnOicKCiAgICAgICAgIyBXZSB3aWxsIGRlY2lkZSBiYXNlZCBvbiBpZiB0aGUgY29sb24gaXMgZm9sbG93ZWQgYnkgYSBiYXJld29yZAogICAgICAgICMgd2hpY2ggaXMgbm90IGEga2V5d29yZC4gIENoYW5nZWQgaW5leHQrMSB0byBpbmV4dCB0byBmaXhlZCBjYXNlCiAgICAgICAgIyBiMTE5MC4KICAgICAgICBteSAkc3ViX2F0dHJpYnV0ZV9va19oZXJlOwogICAgICAgIGlmICggICAkaXNfc3VieyR0b2tfa3d9CiAgICAgICAgICAgICYmICRleHBlY3RpbmcgIT0gT1BFUkFUT1IKICAgICAgICAgICAgJiYgJG5leHRfbm9uYmxhbmtfdG9rZW4gZXEgJzonICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICggJG5uX25vbmJsYW5rX3Rva2VuLCAkaV9ubl91dSApID0KICAgICAgICAgICAgICAkc2VsZi0+ZmluZF9uZXh0X25vbmJsYW5rX3Rva2VuKCAkaV9uZXh0LCAkcnRva2VucywKICAgICAgICAgICAgICAgICRtYXhfdG9rZW5faW5kZXggKTsKICAgICAgICAgICAgJHN1Yl9hdHRyaWJ1dGVfb2tfaGVyZSA9CiAgICAgICAgICAgICAgICAgJG5uX25vbmJsYW5rX3Rva2VuID1+IC9eXHcvCiAgICAgICAgICAgICAgJiYgJG5uX25vbmJsYW5rX3Rva2VuICF+IC9eXGQvCiAgICAgICAgICAgICAgJiYgISRpc19rZXl3b3JkeyRubl9ub25ibGFua190b2tlbn07CiAgICAgICAgfQogICAgICAgIHJldHVybiAkc3ViX2F0dHJpYnV0ZV9va19oZXJlOwogICAgfSAjIyBlbmQgc3ViIHN1Yl9hdHRyaWJ1dGVfb2tfaGVyZQoKICAgIHVzZSBjb25zdGFudCBERUJVR19CQVJFV09SRCA9PiAwOwoKICAgIHN1YiBzYXdfYmFyZXdvcmRfZnVuY3Rpb24gewogICAgICAgIG15ICggJHNlbGYsICRiYXJld29yZCApID0gQF87CiAgICAgICAgJHNlbGYtPltfcmJhcmV3b3JkX2luZm9fXS0+eyRjdXJyZW50X3BhY2thZ2V9LT57JGJhcmV3b3JkfQogICAgICAgICAgLT57ZnVuY3Rpb25fY291bnR9Kys7CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIHNhd19iYXJld29yZF9mdW5jdGlvbgoKICAgIHN1YiBzYXdfYmFyZXdvcmRfY29uc3RhbnQgewogICAgICAgIG15ICggJHNlbGYsICRiYXJld29yZCApID0gQF87CiAgICAgICAgJHNlbGYtPltfcmJhcmV3b3JkX2luZm9fXS0+eyRjdXJyZW50X3BhY2thZ2V9LT57JGJhcmV3b3JkfQogICAgICAgICAgLT57Y29uc3RhbnRfY291bnR9Kys7CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIHNhd19iYXJld29yZF9jb25zdGFudAoKICAgIHN1YiBnZXRfYmFyZXdvcmRfY291bnRzIHsKICAgICAgICBteSAoICRzZWxmLCAkYmFyZXdvcmQgKSA9IEBfOwoKICAgICAgICAjIEdpdmVuOgogICAgICAgICMgICAkYmFyZXdvcmQgPSBhIGJhcmV3b3JkCiAgICAgICAgIyBSZXR1cm46CiAgICAgICAgIyAgICRmdW5jdGlvbl9jb3VudCA9IG51bWJlciBvZiB0aW1lcyBzZWVuIGFzIGZ1bmN0aW9uIHRha2luZyA+MCBhcmdzCiAgICAgICAgIyAgICRjb25zdGFudF9jb3VudCA9IG51bWJlciBvZiB0aW1lcyBzZWVuIGFzIGZ1bmN0aW9uIHRha2luZyAgMCBhcmdzCiAgICAgICAgIyBOb3RlOgogICAgICAgICMgICAkZnVuY3Rpb25fY291bnQgPiAwIGltcGxpZXMgdGhhdCBhIFRFUk0gc2hvdWxkIGNvbWUgbmV4dAogICAgICAgICMgICAkY29uc3RhbnRfY291bnQgPiAwIGltcGxpZXMgdGhhdCBhbiBPUEVSQVRPUiAqKm1heSoqIGNvbWUgbmV4dCwKICAgICAgICAjICAgICAgYnV0IHRoaXMgY2FuIGJlIGluY29ycmVjdCBpZiAkYmFyZXdvcmQgY2FuIHRha2UgMCBvciBtb3JlIGFyZ3MuCiAgICAgICAgIyBUaGlzIGlzIHVzZWQgdG8gaGVscCBndWVzcyB0b2tlbml6YXRpb24gYXJvdW5kIHVua25vd24gYmFyZXdvcmRzLgogICAgICAgIG15ICRmdW5jdGlvbl9jb3VudDsKICAgICAgICBteSAkY29uc3RhbnRfY291bnQ7CiAgICAgICAgbXkgJHJiYXJld29yZF9pbmZvX3RvayA9ICRzZWxmLT5bX3JiYXJld29yZF9pbmZvX10tPnskY3VycmVudF9wYWNrYWdlfTsKICAgICAgICBpZiAoJHJiYXJld29yZF9pbmZvX3RvaykgewogICAgICAgICAgICAkcmJhcmV3b3JkX2luZm9fdG9rID0gJHJiYXJld29yZF9pbmZvX3Rvay0+eyRiYXJld29yZH07CiAgICAgICAgICAgIGlmICgkcmJhcmV3b3JkX2luZm9fdG9rKSB7CiAgICAgICAgICAgICAgICAkZnVuY3Rpb25fY291bnQgPSAkcmJhcmV3b3JkX2luZm9fdG9rLT57ZnVuY3Rpb25fY291bnR9OwogICAgICAgICAgICAgICAgJGNvbnN0YW50X2NvdW50ID0gJHJiYXJld29yZF9pbmZvX3Rvay0+e2NvbnN0YW50X2NvdW50fTsKCiAgICAgICAgICAgICAgICAjIGEgcG9zaXRpdmUgZnVuY3Rpb24gY291bnQgb3ZlcnJpZGVzIGEgY29uc3RhbnQgY291bnQKICAgICAgICAgICAgICAgIGlmICgkZnVuY3Rpb25fY291bnQpIHsgJGNvbnN0YW50X2NvdW50ID0gMCB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCAhZGVmaW5lZCgkZnVuY3Rpb25fY291bnQpICkgeyAkZnVuY3Rpb25fY291bnQgPSAwIH0KICAgICAgICBpZiAoICFkZWZpbmVkKCRjb25zdGFudF9jb3VudCkgKSB7ICRjb25zdGFudF9jb3VudCA9IDAgfQogICAgICAgIHJldHVybiAoICRmdW5jdGlvbl9jb3VudCwgJGNvbnN0YW50X2NvdW50ICk7CiAgICB9ICMjIGVuZCBzdWIgZ2V0X2JhcmV3b3JkX2NvdW50cwoKICAgICMgaGFzaGVzIHVzZWQgdG8gaGVscCBkZXRlcm1pbmUgYSBiYXJld29yZCB0eXBlCiAgICBteSAlaXNfd2lVQzsKICAgIG15ICVpc19mdW5jdGlvbl9mb2xsb3dlcjsKICAgIG15ICVpc19jb25zdGFudF9mb2xsb3dlcjsKICAgIG15ICVpc191c2VfcmVxdWlyZV9ubzsKCiAgICBCRUdJTiB7CiAgICAgICAgbXkgQHF6ID0gcXcoIHcgaSBVIEMgKTsKICAgICAgICBAaXNfd2lVQ3tAcXp9ID0gKDEpIHggc2NhbGFyKEBxeik7CgogICAgICAgIEBxeiA9IHF3KCB1c2UgcmVxdWlyZSBubyApOwogICAgICAgIEBpc191c2VfcmVxdWlyZV9ub3tAcXp9ID0gKDEpIHggc2NhbGFyKEBxeik7CgogICAgICAgICMgVGhlc2UgcHJlLXRva2VuIHR5cGVzIGFmdGVyIGEgYmFyZXdvcmQgaW1wbHkgdGhhdCBpdAogICAgICAgICMgaXMgbm90IGEgY29uc3RhbnQsIGV4Y2VwdCB3aGVuICcoJyBpcyBmb2xsb3dlZCBieSAnKScuCiAgICAgICAgQHF6ID0gcXcjICggWyB7ICQgQCAiICcgbSAjOwogICAgICAgIEBpc19mdW5jdGlvbl9mb2xsb3dlcntAcXp9ID0gKDEpIHggc2NhbGFyKEBxeik7CgogICAgICAgICMgVGhlc2UgcHJlLXRva2VuIHR5cGVzIGFmdGVyIGEgYmFyZXdvcmQgaW1wbHkgdGhhdCBpdAogICAgICAgICMgTUlHSFQgYmUgYSBjb25zdGFudCwgYnV0IGl0IGFsc28gbWlnaHQgYmUgYSBmdW5jdGlvbiB0YWtpbmcKICAgICAgICAjIDAgb3IgbW9yZSBjYWxsIGFyZ3MuCiAgICAgICAgQHF6ID0gcXcjIDsgKSBdIH0gaWYgdW5sZXNzICM7CiAgICAgICAgcHVzaCBAcXosICcsJzsKICAgICAgICBAaXNfY29uc3RhbnRfZm9sbG93ZXJ7QHF6fSA9ICgxKSB4IHNjYWxhcihAcXopOwogICAgfQoKICAgIHN1YiBkb19CQVJFV09SRCB7CgogICAgICAgIG15ICgkc2VsZikgPSBAXzsKCiAgICAgICAgIyBoYW5kbGUgYSBiYXJld29yZCB0b2tlbjoKICAgICAgICAjIHJldHVybnMKICAgICAgICAjICAgIHRydWUgaWYgdGhpcyB0b2tlbiBlbmRzIHRoZSBjdXJyZW50IGxpbmUKICAgICAgICAjICAgIGZhbHNlIG90aGVyd2lzZQoKICAgICAgICBteSAkbmV4dF9ub25ibGFua190b2tlbjsKICAgICAgICBteSAkaV9uZXh0ID0gJGkgKyAxOwogICAgICAgIGlmICggJGlfbmV4dCA8PSAkbWF4X3Rva2VuX2luZGV4ICYmICRydG9rZW5fdHlwZS0+WyRpX25leHRdIGVxICdiJyApIHsKICAgICAgICAgICAgJGlfbmV4dCsrOwogICAgICAgIH0KICAgICAgICBpZiAoICRpX25leHQgPD0gJG1heF90b2tlbl9pbmRleCApIHsKICAgICAgICAgICAgJG5leHRfbm9uYmxhbmtfdG9rZW4gPSAkcnRva2Vucy0+WyRpX25leHRdOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgKCAkbmV4dF9ub25ibGFua190b2tlbiwgJGlfbmV4dCApID0KICAgICAgICAgICAgICAkc2VsZi0+ZmluZF9uZXh0X25vbmJsYW5rX3Rva2VuKCAkaSwgJHJ0b2tlbnMsICRtYXhfdG9rZW5faW5kZXggKTsKICAgICAgICB9CgogICAgICAgICMgYSBiYXJlIHdvcmQgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgOjogaXMgbm90IGEga2V5d29yZDsKICAgICAgICAjIHVzZSAkdG9rX2t3IHdoZW4gdGVzdGluZyBmb3Iga2V5d29yZHMgdG8gYXZvaWQgYSBtaXN0YWtlCiAgICAgICAgbXkgJHRva19rdyA9ICR0b2s7CiAgICAgICAgaWYgKCAgICRydG9rZW5zLT5bICRpICsgMSBdIGVxICc6JwogICAgICAgICAgICAmJiAkcnRva2Vucy0+WyAkaSArIDIgXSBlcSAnOicgKQogICAgICAgIHsKICAgICAgICAgICAgJHRva19rdyAuPSAnOjonOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkc2VsZi0+W19pbl9hdHRyaWJ1dGVfbGlzdF9dICkgewogICAgICAgICAgICBteSAkaXNfYXR0cmlidXRlID0gJHNlbGYtPmRvX0FUVFJJQlVURV9MSVNUKCRuZXh0X25vbmJsYW5rX3Rva2VuKTsKICAgICAgICAgICAgcmV0dXJuIGlmICgkaXNfYXR0cmlidXRlKTsKICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBTdGFydGluZyBmaW5hbCBpZi1lbHNpZi0gY2hhaW4gb2YgdGVzdHMKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAjIFRoaXMgaXMgdGhlIHJldHVybiBmbGFnOgogICAgICAgICMgICB0cnVlID0+IHRoaXMgaXMgdGhlIGxhc3QgdG9rZW4gb24gdGhlIGxpbmUKICAgICAgICAjICAgZmFsc2UgPT4ga2VlcCB0b2tlbml6aW5nIHRoZSBsaW5lCiAgICAgICAgbXkgJGlzX2xhc3Q7CgogICAgICAgICMgVGhlIGZvbGxvd2luZyBibG9ja3Mgb2YgY29kZSBtdXN0IHVwZGF0ZSB0aGVzZSB2YXJzOgogICAgICAgICMgJHR5cGUgLSB0aGUgZmluYWwgdG9rZW4gdHlwZSwgbXVzdCBhbHdheXMgYmUgc2V0CgogICAgICAgICMgSW4gYWRkaXRpb24sIGlmIGFkZGl0aW9uYWwgcHJldG9rZW5zIGFyZSBhZGRlZDoKICAgICAgICAjICR0b2sgIC0gdGhlIGZpbmFsIHRva2VuCiAgICAgICAgIyAkaSAgICAtIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBwcmV0b2tlbgoKICAgICAgICAjIFRoZXkgbWF5IGFsc28gbmVlZCB0byBjaGVjayBhbmQgc2V0IHZhcmlvdXMgZmxhZ3MKCiAgICAgICAgIyBTY2FuIGEgYmFyZSB3b3JkIGZvbGxvd2luZyBhIC0+IGFzIGFuIGlkZW50aWZpZXI7IGl0IGNvdWxkCiAgICAgICAgIyBoYXZlIGEgbG9uZyBwYWNrYWdlIG5hbWUuICBGaXhlcyBjMDM3LCBjMDQxLgogICAgICAgIGlmICggJGxhc3Rfbm9uYmxhbmtfdG9rZW4gZXEgJy0+JyApIHsKICAgICAgICAgICAgJHNlbGYtPnNjYW5fYmFyZV9pZGVudGlmaWVyKCk7CgogICAgICAgICAgICAjIGEgYmFyZXdhcmQgYWZ0ZXIgJy0+JyBnZXRzIHR5cGUgJ2knCiAgICAgICAgICAgICR0eXBlID0gJ2knOwogICAgICAgIH0KCiAgICAgICAgIyBRdW90ZSBhIHdvcmQgZm9sbG93ZWQgYnkgPT4gb3BlcmF0b3IKICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICggJG5leHRfbm9uYmxhbmtfdG9rZW4gZXEgJz0nICYmICRydG9rZW5zLT5bICRpX25leHQgKyAxIF0gZXEgJz4nICkKCiAgICAgICAgICAgICMgdW5sZXNzIHRoZSB3b3JkIGlzIF9fRU5EX18gb3IgX19EQVRBX18gYW5kIGlzIHRoZSBvbmx5IHdvcmQgb24KICAgICAgICAgICAgIyB0aGUgbGluZS4KICAgICAgICAgICAgJiYgKCAhZGVmaW5lZCggJGlzX0VORF9EQVRBeyR0b2tfa3d9ICkKICAgICAgICAgICAgICAgIHx8ICRpbnB1dF9saW5lICF+IC9eXHMqX18oPzpFTkR8REFUQSlfX1xzKiQvICkKICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICMgQmFyZXdvcmQgZm9sbG93ZWQgYnkgYSBmYXQgY29tbWEgLSBzZWUgJ2dpdDE4LmluJwogICAgICAgICAgICAjIFRoaXMgY29kZSB3YXMgcHJldmlvdXNseSBzdWIgZG9fUVVPVEVEX0JBUkVXT1JEOiBzZWUgYzMxNiwgYzMxNwoKICAgICAgICAgICAgIyBPbGRlciBwZXJsOgogICAgICAgICAgICAjICAgJ3YyNT0+MScgICBpcyBhIHYtc3RyaW5nIGtleSEKICAgICAgICAgICAgIyAgICctdjI1PT4xJyAgaXMgYWxzbyBhIHYtc3RyaW5nIGtleSEKICAgICAgICAgICAgIyBEZWFjdGl2YXRlZDogdGhpcyBpcyBubyBsb25nZXIgdHJ1ZTsgc2VlIGdpdCAjMTY1CiAgICAgICAgICAgIGlmICggMCAmJiAkdG9rID1+IC9edlxkKyQvICkgewogICAgICAgICAgICAgICAgJHR5cGUgPSAndic7CiAgICAgICAgICAgICAgICAkc2VsZi0+Y29tcGxhaW4oInYtc3RyaW5nIHVzZWQgYXMgaGFzaCBrZXlcbiIpOwogICAgICAgICAgICAgICAgJHNlbGYtPnJlcG9ydF92X3N0cmluZygkdG9rKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBJZiB0b2sgaXMgc29tZXRoaW5nIGxpa2UgJ3gxNycgdGhlbiBpdCBjb3VsZAogICAgICAgICAgICAjIGFjdHVhbGx5IGJlIG9wZXJhdG9yIHggZm9sbG93ZWQgYnkgbnVtYmVyIDE3LgogICAgICAgICAgICAjIEZvciBleGFtcGxlLCBoZXJlOgogICAgICAgICAgICAjICAgICAxMjN4MTcgPT4gWyA3OTIsIDEyMjQgXSwKICAgICAgICAgICAgIyAoYSBrZXkgb2YgMTIzIHJlcGVhdGVkIDE3IHRpbWVzLCBwZXJoYXBzIG5vdAogICAgICAgICAgICAjIHdoYXQgd2FzIGludGVuZGVkKS4gV2Ugd2lsbCBtYXJrIHgxNyBhcyB0eXBlCiAgICAgICAgICAgICMgJ24nIGFuZCBpdCB3aWxsIGJlIHNwbGl0LiBJZiB0aGUgcHJldmlvdXMgdG9rZW4KICAgICAgICAgICAgIyB3YXMgYWxzbyBhIGJhcmV3b3JkIHRoZW4gaXQgaXMgbm90IHZlcnkgY2xlYXIgaXMKICAgICAgICAgICAgIyBnb2luZyBvbi4gIEluIHRoaXMgY2FzZSB3ZSB3aWxsIG5vdCBiZSBzdXJlIHRoYXQKICAgICAgICAgICAgIyBhbiBvcGVyYXRvciBpcyBleHBlY3RlZCwgc28gd2UganVzdCBtYXJrIGl0IGFzIGEKICAgICAgICAgICAgIyBiYXJld29yZC4gIFBlcmwgaXMgYSBsaXR0bGUgbXVya3kgaW4gd2hhdCBpdCBkb2VzCiAgICAgICAgICAgICMgd2l0aCBzdHVmZiBsaWtlIHRoaXMsIGFuZCBpdHMgYmVoYXZpb3IgY2FuIGNoYW5nZQogICAgICAgICAgICAjIG92ZXIgdGltZS4gIFNvbWV0aGluZyBsaWtlCiAgICAgICAgICAgICMgICAgYSB4MTggPT4gWzc5MiwgMTIyNF0sIHdpbGwgY29tcGlsZSBhcwogICAgICAgICAgICAjIGEga2V5IHdpdGggMTggYSdzLiAgQnV0IHNvbWV0aGluZyBsaWtlCiAgICAgICAgICAgICMgICAgcHVzaCBAYXJyYXksIGEgeDE4OwogICAgICAgICAgICAjIGlzIGEgc3ludGF4IGVycm9yLgogICAgICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICAgICAgICAkZXhwZWN0aW5nID09IE9QRVJBVE9SCiAgICAgICAgICAgICAgICAmJiBzdWJzdHIoICR0b2ssIDAsIDEgKSBlcSAneCcKICAgICAgICAgICAgICAgICYmICggbGVuZ3RoKCR0b2spID09IDEKICAgICAgICAgICAgICAgICAgICB8fCBzdWJzdHIoICR0b2ssIDEsIDEgKSA9fiAvXlxkLyApCiAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkdHlwZSA9ICduJzsKICAgICAgICAgICAgICAgIGlmICggJHNlbGYtPnNwbGl0X3ByZXRva2VuKDEpICkgewogICAgICAgICAgICAgICAgICAgICR0eXBlID0gJ3gnOwogICAgICAgICAgICAgICAgICAgICR0b2sgID0gJ3gnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHNlbGYtPmNvbXBsYWluKCJ4IG9wZXJhdG9yIGluIGhhc2gga2V5XG4iKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIGdpdCAjMTgKICAgICAgICAgICAgICAgICR0eXBlID0gJ3cnOwogICAgICAgICAgICAgICAgJHNlbGYtPmVycm9yX2lmX2V4cGVjdGluZ19PUEVSQVRPUigpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHF1b3RlIGEgYmFyZSB3b3JkIHdpdGhpbiBicmFjZXMuLmxpa2UgeHh4LT57c307IG5vdGUgdGhhdCB3ZQogICAgICAgICMgbXVzdCBiZSBzdXJlIHRoaXMgaXMgbm90IGEgc3RydWN0dXJhbCBicmFjZSwgdG8gYXZvaWQKICAgICAgICAjIG1pc3Rha2luZyB7c30gaW4gdGhlIGZvbGxvd2luZyBmb3IgYSBxdW90ZWQgYmFyZSB3b3JkOgogICAgICAgICMgICAgIGZvcihAWyl7c31ibGF9QkxBfQogICAgICAgICMgQWxzbyB0cmVhdCBxIGluIHNvbWV0aGluZyBsaWtlIHZhcnstcX0gYXMgYSBiYXJlIHdvcmQsIG5vdAogICAgICAgICMgYSBxdW90ZSBvcGVyYXRvcgogICAgICAgIGVsc2lmICgKICAgICAgICAgICAgJG5leHRfbm9uYmxhbmtfdG9rZW4gZXEgJ30nCiAgICAgICAgICAgICYmICgKICAgICAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX3R5cGUgZXEgJ0wnCiAgICAgICAgICAgICAgICB8fCAoICAgJGxhc3Rfbm9uYmxhbmtfdHlwZSBlcSAnbScKICAgICAgICAgICAgICAgICAgICAmJiAkbGFzdF9sYXN0X25vbmJsYW5rX3R5cGUgZXEgJ0wnICkKICAgICAgICAgICAgKQogICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJHR5cGUgPSAndyc7CiAgICAgICAgfQoKICAgICAgICAjIGhhbmRsZSBvcGVyYXRvciB4IChub3cgd2Uga25vdyBpdCBpc24ndCAkeD0pCiAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAgICAkZXhwZWN0aW5nID09IE9QRVJBVE9SCiAgICAgICAgICAgICYmIHN1YnN0ciggJHRvaywgMCwgMSApIGVxICd4JwogICAgICAgICAgICAmJiAoIGxlbmd0aCgkdG9rKSA9PSAxCiAgICAgICAgICAgICAgICB8fCBzdWJzdHIoICR0b2ssIDEsIDEgKSA9fiAvXlxkLyApCiAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkc2VsZi0+ZG9fWF9PUEVSQVRPUigpOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICR0b2tfa3cgZXEgJ0NPUkU6OicgKSB7CiAgICAgICAgICAgICR0eXBlID0gJHRvayA9ICR0b2tfa3c7CiAgICAgICAgICAgICRpICs9IDI7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggKCAkdG9rIGVxICdzdHJpY3QnICkKICAgICAgICAgICAgYW5kICggJGxhc3Rfbm9uYmxhbmtfdG9rZW4gZXEgJ3VzZScgKSApCiAgICAgICAgewogICAgICAgICAgICAkc2VsZi0+W19zYXdfdXNlX3N0cmljdF9dID0gMTsKICAgICAgICAgICAgJHNlbGYtPnNjYW5fYmFyZV9pZGVudGlmaWVyKCk7CiAgICAgICAgfQoKICAgICAgICBlbHNpZiAoICggJHRvayBlcSAnd2FybmluZ3MnICkKICAgICAgICAgICAgYW5kICggJGxhc3Rfbm9uYmxhbmtfdG9rZW4gZXEgJ3VzZScgKSApCiAgICAgICAgewogICAgICAgICAgICAkc2VsZi0+W19zYXdfcGVybF9kYXNoX3dfXSA9IDE7CgogICAgICAgICAgICAjIHNjYW4gYXMgaWRlbnRpZmllciwgc28gdGhhdCB3ZSBwaWNrIHVwIHNvbWV0aGluZyBsaWtlOgogICAgICAgICAgICAjIHVzZSB3YXJuaW5nczo6cmVnaXN0ZXIKICAgICAgICAgICAgJHNlbGYtPnNjYW5fYmFyZV9pZGVudGlmaWVyKCk7CiAgICAgICAgfQoKICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICAgICR0b2sgZXEgJ0F1dG9Mb2FkZXInCiAgICAgICAgICAgICYmICRzZWxmLT5bX2xvb2tfZm9yX2F1dG9sb2FkZXJfXQogICAgICAgICAgICAmJiAoCiAgICAgICAgICAgICAgICAkbGFzdF9ub25ibGFua190b2tlbiBlcSAndXNlJwoKICAgICAgICAgICAgICAgICMgdGhlc2UgcmVnZXhlcyBhcmUgZnJvbSBBdXRvU3BsaXQucG0sIHdoaWNoIHdlIHdhbnQKICAgICAgICAgICAgICAgICMgdG8gbWltaWMKICAgICAgICAgICAgICAgIHx8ICRpbnB1dF9saW5lID1+IC9eXHMqKHVzZXxyZXF1aXJlKVxzK0F1dG9Mb2FkZXJcYi8KICAgICAgICAgICAgICAgIHx8ICRpbnB1dF9saW5lID1+IC9cYklTQVxzKj0uKlxiQXV0b0xvYWRlclxiLwogICAgICAgICAgICApCiAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkc2VsZi0+d3JpdGVfbG9nZmlsZV9lbnRyeSgiQXV0b0xvYWRlciBzZWVuLCAtbmxhbCBkZWFjdGl2YXRlc1xuIik7CiAgICAgICAgICAgICRzZWxmLT5bX3Nhd19hdXRvbG9hZGVyX10gICAgICA9IDE7CiAgICAgICAgICAgICRzZWxmLT5bX2xvb2tfZm9yX2F1dG9sb2FkZXJfXSA9IDA7CiAgICAgICAgICAgICRzZWxmLT5zY2FuX2JhcmVfaWRlbnRpZmllcigpOwogICAgICAgIH0KCiAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAgICAkdG9rIGVxICdTZWxmTG9hZGVyJwogICAgICAgICAgICAmJiAkc2VsZi0+W19sb29rX2Zvcl9zZWxmbG9hZGVyX10KICAgICAgICAgICAgJiYgKCAgICRsYXN0X25vbmJsYW5rX3Rva2VuIGVxICd1c2UnCiAgICAgICAgICAgICAgICB8fCAkaW5wdXRfbGluZSA9fiAvXlxzKih1c2V8cmVxdWlyZSlccytTZWxmTG9hZGVyXGIvCiAgICAgICAgICAgICAgICB8fCAkaW5wdXRfbGluZSA9fiAvXGJJU0Fccyo9LipcYlNlbGZMb2FkZXJcYi8gKQogICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJHNlbGYtPndyaXRlX2xvZ2ZpbGVfZW50cnkoIlNlbGZMb2FkZXIgc2VlbiwgLW5sc2wgZGVhY3RpdmF0ZXNcbiIpOwogICAgICAgICAgICAkc2VsZi0+W19zYXdfc2VsZmxvYWRlcl9dICAgICAgPSAxOwogICAgICAgICAgICAkc2VsZi0+W19sb29rX2Zvcl9zZWxmbG9hZGVyX10gPSAwOwogICAgICAgICAgICAkc2VsZi0+c2Nhbl9iYXJlX2lkZW50aWZpZXIoKTsKICAgICAgICB9CgogICAgICAgIGVsc2lmICggKCAkdG9rIGVxICdjb25zdGFudCcgKQogICAgICAgICAgICBhbmQgKCAkbGFzdF9ub25ibGFua190b2tlbiBlcSAndXNlJyApICkKICAgICAgICB7CiAgICAgICAgICAgICRzZWxmLT5kb19VU0VfQ09OU1RBTlQoKTsKICAgICAgICB9CgogICAgICAgICMgdmFyaW91cyBxdW90ZSBvcGVyYXRvcnMKICAgICAgICBlbHNpZiAoICRpc19xX3FxX3F3X3F4X3FyX3NfeV90cl9teyR0b2t9ICkgewogICAgICAgICAgICAkc2VsZi0+ZG9fUVVPVEVfT1BFUkFUT1IoKTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgZm9yIGEgc3RhdGVtZW50IGxhYmVsCiAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAgICAoICRuZXh0X25vbmJsYW5rX3Rva2VuIGVxICc6JyApCiAgICAgICAgICAgICYmICggJHJ0b2tlbnMtPlsgJGlfbmV4dCArIDEgXSBuZSAnOicgKQogICAgICAgICAgICAmJiAoICRpX25leHQgPD0gJG1heF90b2tlbl9pbmRleCApICAgICMgY29sb24gb24gc2FtZSBsaW5lCgogICAgICAgICAgICAjIGxpa2UgJ3N1YiA6IGx2YWx1ZScgPwogICAgICAgICAgICAmJiAhJHNlbGYtPnN1Yl9hdHRyaWJ1dGVfb2tfaGVyZSggJHRva19rdywgJG5leHRfbm9uYmxhbmtfdG9rZW4sCiAgICAgICAgICAgICAgICAkaV9uZXh0ICkKICAgICAgICAgICAgJiYgbmV3X3N0YXRlbWVudF9vaygpCiAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBpZiAoICR0b2sgIX4gL1tBLVpdLyApIHsKICAgICAgICAgICAgICAgIHB1c2ggQHsgJHNlbGYtPltfcmxvd2VyX2Nhc2VfbGFiZWxzX2F0X10gfSwgJGlucHV0X2xpbmVfbnVtYmVyOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR0eXBlID0gJ0onOwogICAgICAgICAgICAkdG9rIC49ICc6JzsKICAgICAgICAgICAgJGkgPSAkaV9uZXh0OwogICAgICAgIH0KCiAgICAgICAgIyAnc3ViJyBvciBvdGhlciBzdWIgYWxpYXMKICAgICAgICBlbHNpZiAoICRpc19zdWJ7JHRva19rd30gKSB7CgogICAgICAgICAgICAjIFVwZGF0ZSBmb3IgLS11c2UtZmVhdHVyZT1jbGFzcyAocnQxNDU3MDYpOgogICAgICAgICAgICAjIFdlIGhhdmUgdG8gYmUgZXh0cmEgY2FyZWZ1bCB0byBhdm9pZCBtaXNwYXJzaW5nIG90aGVyIHVzZXMgb2YKICAgICAgICAgICAgIyAnbWV0aG9kJyBpbiBvbGRlciBzY3JpcHRzLgogICAgICAgICAgICBpZiAoICR0b2tfa3cgZXEgJ21ldGhvZCcgJiYgJGd1ZXNzX2lmX21ldGhvZCApIHsKICAgICAgICAgICAgICAgIGlmICggICAkZXhwZWN0aW5nID09IE9QRVJBVE9SCiAgICAgICAgICAgICAgICAgICAgfHwgJG5leHRfbm9uYmxhbmtfdG9rZW4gIX4gL15bXHdcOl0vCiAgICAgICAgICAgICAgICAgICAgfHwgISRzZWxmLT5tZXRob2Rfb2tfaGVyZSgpICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+ZG9fVU5LTk9XTl9CQVJFV09SRCgkbmV4dF9ub25ibGFua190b2tlbik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplX3N1Ym5hbWUoKTsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+c2Nhbl9pZCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJHNlbGYtPmVycm9yX2lmX2V4cGVjdGluZ19PUEVSQVRPUigpCiAgICAgICAgICAgICAgICAgIGlmICggJGV4cGVjdGluZyA9PSBPUEVSQVRPUiApOwogICAgICAgICAgICAgICAgaW5pdGlhbGl6ZV9zdWJuYW1lKCk7CiAgICAgICAgICAgICAgICAkc2VsZi0+c2Nhbl9pZCgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjICdwYWNrYWdlJwogICAgICAgIGVsc2lmICggJGlzX3BhY2thZ2V7JHRva19rd30gKSB7CgogICAgICAgICAgICAjIFVwZGF0ZSBmb3IgLS11c2UtZmVhdHVyZT1jbGFzcyAocnQxNDU3MDYpOgogICAgICAgICAgICAjIFdlIGhhdmUgdG8gYmUgZXh0cmEgY2FyZWZ1bCBiZWNhdXNlICdjbGFzcycgbWF5IGJlIHVzZWQgZm9yIG90aGVyCiAgICAgICAgICAgICMgcHVycG9zZXMgb24gb2xkZXIgY29kZTsgaS5lLgogICAgICAgICAgICAjICAgY2xhc3MoJHgpICAgLSB2YWxpZCBzdWIgY2FsbAogICAgICAgICAgICAjICAgcGFja2FnZSgkeCkgLSBlcnJvcgogICAgICAgICAgICBpZiAoICR0b2tfa3cgZXEgJ2NsYXNzJyApIHsKICAgICAgICAgICAgICAgIGlmICggICAkZXhwZWN0aW5nID09IE9QRVJBVE9SCiAgICAgICAgICAgICAgICAgICAgfHwgJG5leHRfbm9uYmxhbmtfdG9rZW4gIX4gL15bXHdcOl0vCiAgICAgICAgICAgICAgICAgICAgfHwgISRzZWxmLT5jbGFzc19va19oZXJlKCkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRzZWxmLT5kb19VTktOT1dOX0JBUkVXT1JEKCRuZXh0X25vbmJsYW5rX3Rva2VuKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgeyAkc2VsZi0+c2Nhbl9pZCgpIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRzZWxmLT5lcnJvcl9pZl9leHBlY3RpbmdfT1BFUkFUT1IoKQogICAgICAgICAgICAgICAgICBpZiAoICRleHBlY3RpbmcgPT0gT1BFUkFUT1IgKTsKICAgICAgICAgICAgICAgICRzZWxmLT5zY2FuX2lkKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgRml4IGZvciBjMDM1OiBzcGxpdCAnZm9ybWF0JyBmcm9tICdpc19mb3JtYXRfRU5EX0RBVEEnIHRvIGJlCiAgICAgICAgIyBtb3JlIHJlc3RyaWN0aXZlLiBSZXF1aXJlIGEgbmV3IHN0YXRlbWVudCB0byBiZSBvayBoZXJlLgogICAgICAgIGVsc2lmICggJHRva19rdyBlcSAnZm9ybWF0JyAmJiBuZXdfc3RhdGVtZW50X29rKCkgKSB7CiAgICAgICAgICAgICR0eXBlICAgICAgICAgICAgICAgID0gJzsnOyAgICAjIG1ha2UgdG9rZW5pemVyIGxvb2sgZm9yIFRFUk0gbmV4dAogICAgICAgICAgICAkc2VsZi0+W19pbl9mb3JtYXRfXSA9IDE7CiAgICAgICAgICAgICRpc19sYXN0ICAgICAgICAgICAgID0gMTsgICAgICAjIyBpcyBsYXN0IHRva2VuIG9uIHRoaXMgbGluZQogICAgICAgIH0KCiAgICAgICAgIyBOb3RlIG9uIHRva2VuIHR5cGVzIGZvciBmb3JtYXQsIF9fREFUQV9fLCBfX0VORF9fOgogICAgICAgICMgSXQgc2ltcGxpZmllcyB0aGluZ3MgdG8gZ2l2ZSB0aGVzZSB0eXBlICc7Jywgc28gdGhhdCB3aGVuIHdlCiAgICAgICAgIyBzdGFydCByZXNjYW5uaW5nIHdlIHdpbGwgYmUgZXhwZWN0aW5nIGEgdG9rZW4gb2YgdHlwZSBURVJNLgogICAgICAgICMgV2Ugd2lsbCBzd2l0Y2ggdG8gdHlwZSAnaycgYmVmb3JlIG91dHB1dHRpbmcgdGhlIHRva2Vucy4KICAgICAgICBlbHNpZiAoIGRlZmluZWQoICRpc19FTkRfREFUQXskdG9rX2t3fSApICkgewogICAgICAgICAgICAkdHlwZSA9ICc7JzsgICAgIyBtYWtlIHRva2VuaXplciBsb29rIGZvciBURVJNIG5leHQKCiAgICAgICAgICAgICMgUmVtZW1iZXIgdGhhdCB3ZSBhcmUgaW4gb25lIG9mIHRoZXNlIHRocmVlIHNlY3Rpb25zCiAgICAgICAgICAgICRzZWxmLT5bICRpc19FTkRfREFUQXskdG9rX2t3fSBdID0gMTsKICAgICAgICAgICAgJGlzX2xhc3QgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgIyMgaXMgbGFzdCB0b2tlbiBvbiB0aGlzIGxpbmUKICAgICAgICB9CgogICAgICAgIGVsc2lmICggJGlzX2tleXdvcmR7JHRva19rd30gKSB7CiAgICAgICAgICAgICRzZWxmLT5kb19LRVlXT1JEKCk7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGZvciBpbmxpbmUgbGFiZWwgZm9sbG93aW5nCiAgICAgICAgIyAgICAgICAgIC9eKHJlZG98bGFzdHxuZXh0fGdvdG8pJC8KICAgICAgICBlbHNpZiAoKCAkbGFzdF9ub25ibGFua190eXBlIGVxICdrJyApCiAgICAgICAgICAgICYmICggJGlzX3JlZG9fbGFzdF9uZXh0X2dvdG97JGxhc3Rfbm9uYmxhbmtfdG9rZW59ICkgKQogICAgICAgIHsKICAgICAgICAgICAgJHR5cGUgPSAnaic7CiAgICAgICAgfQoKICAgICAgICAjIHNvbWV0aGluZyBlbHNlIC0tCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRzZWxmLT5kb19VTktOT1dOX0JBUkVXT1JEKCRuZXh0X25vbmJsYW5rX3Rva2VuKTsKICAgICAgICB9CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBTYXZlIGluZm8gZm9yIHVzZSBpbiBsYXRlciBndWVzc2luZy4gRXZlbiBmb3IgdHlwZXMgJ2knIGFuZCAnVScKICAgICAgICAjIGJlY2F1c2UgdGhvc2UgbWF5IGJlIG1hcmtlZCBhcyB0eXBlICd3JyAoYmFyZXdvcmRzKSBlbHNld2hlcmUuCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpZiAoICAgJGlzX3dpVUN7JHR5cGV9CiAgICAgICAgICAgICYmICRzdGF0ZW1lbnRfdHlwZSBuZSAndXNlJwogICAgICAgICAgICAmJiAkc3RhdGVtZW50X3R5cGUgbmUgJ191c2UnICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICRyZXN1bHQgPSAidW5rbm93biI7CgogICAgICAgICAgICAjIFdvcmRzIGFyZSBtYXJrZWQgJ2Z1bmN0aW9uJyBpZiB0aGV5IGFwcGVhciBpbiBhIHJvbGUgd2hpY2gKICAgICAgICAgICAgIyBpcyBub3QgY29uc2lzdGVudCB3aXRoIGEgY29uc3RhbnQgdmFsdWUuIFR5cGljYWxseSB0aGV5IGFyZQogICAgICAgICAgICAjIGZ1bmN0aW9uIGNhbGxzLgogICAgICAgICAgICBpZiAoICAgJHR5cGUgZXEgJ1UnCiAgICAgICAgICAgICAgICB8fCAkaXNfZnVuY3Rpb25fZm9sbG93ZXJ7JG5leHRfbm9uYmxhbmtfdG9rZW59ICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIG15ICRlbXB0eV9wYXJlbnMgPSAwOwogICAgICAgICAgICAgICAgaWYgKCAkbmV4dF9ub25ibGFua190b2tlbiBlcSAnKCcgJiYgJGlfbmV4dCA8ICRtYXhfdG9rZW5faW5kZXggKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG15ICR0b2tfbmV4dF9wMSA9ICRydG9rZW5zLT5bICRpX25leHQgKyAxIF07CiAgICAgICAgICAgICAgICAgICAgaWYgKCBzdWJzdHIoICR0b2tfbmV4dF9wMSwgMCwgMSApIGVxIFNQQUNFCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRpX25leHQgKyAyIDw9ICRtYXhfdG9rZW5faW5kZXggKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRva19uZXh0X3AxID0gJHJ0b2tlbnMtPlsgJGlfbmV4dCArIDIgXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJGVtcHR5X3BhcmVucyA9ICR0b2tfbmV4dF9wMSBlcSAnKSc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAhJGVtcHR5X3BhcmVucyApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBub3QgYSBjb25zdGFudCB0ZXJtIC0gcHJvYmFibHkgYSBmdW5jdGlvbgogICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAiZnVuY3Rpb24iOwogICAgICAgICAgICAgICAgICAgICRzZWxmLT5zYXdfYmFyZXdvcmRfZnVuY3Rpb24oJHRvayk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgV29yZHMgYXJlIG1hcmtlZCAnY29uc3RhbnQnIGlmIHRoZXkgYXBwZWFyIGluIGEgcm9sZQogICAgICAgICAgICAjIGNvbnNpc3RlbnQgd2l0aCBhIGNvbnN0YW50IHZhbHVlLiAgSG93ZXZlciwgdGhleSBtYXkgc2ltcGx5CiAgICAgICAgICAgICMgYmUgZnVuY3Rpb25zIHdoaWNoIG9wdGlvbmFsbHkgdGFrZSB6ZXJvIGFyZ3MuIFNvIGlmIGEgd29yZAogICAgICAgICAgICAjIGFwcGVhcnMgYXMgYm90aCBjb25zdGFudCBhbmQgZnVuY3Rpb24sIGl0IGlzIG5vdCBhIGNvbnN0YW50LgogICAgICAgICAgICBlbHNpZiAoJHR5cGUgZXEgJ0MnCiAgICAgICAgICAgICAgICB8fCAkaXNfY29uc3RhbnRfZm9sbG93ZXJ7JG5leHRfbm9uYmxhbmtfdG9rZW59ICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIG15ICRpc19oYXNoX2tleSA9ICRuZXh0X25vbmJsYW5rX3Rva2VuIGVxICd9JwogICAgICAgICAgICAgICAgICAmJiAoCiAgICAgICAgICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfdHlwZSBlcSAnTCcKICAgICAgICAgICAgICAgICAgICB8fCAoICAgJGxhc3Rfbm9uYmxhbmtfdHlwZSBlcSAnbScKICAgICAgICAgICAgICAgICAgICAgICAgJiYgJGxhc3RfbGFzdF9ub25ibGFua190eXBlIGVxICdMJyApCiAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKAoKICAgICAgICAgICAgICAgICAgICAjIG5vdCBhIGhhc2gga2V5IGxpa2Uge2JhcmV3b3JkfSBvciB7LWJhcmV3b3JkfQogICAgICAgICAgICAgICAgICAgICEkaXNfaGFzaF9rZXkKCiAgICAgICAgICAgICAgICAgICAgIyBub3QgYSBwYWNrYWdlIG5hbWUsIGV0YwogICAgICAgICAgICAgICAgICAgICYmICggJGxhc3Rfbm9uYmxhbmtfdHlwZSBuZSAnaycKICAgICAgICAgICAgICAgICAgICAgICAgfHwgISRpc191c2VfcmVxdWlyZV9ub3skbGFzdF9ub25ibGFua190b2tlbn0gKQoKICAgICAgICAgICAgICAgICAgICAjIHNraXAgYXJyb3cgY2FsbHMsIHdoaWNoIGNhbiBnbyBlaXRoZXIgd2F5CiAgICAgICAgICAgICAgICAgICAgJiYgJGxhc3Rfbm9uYmxhbmtfdG9rZW4gbmUgJy0+JwogICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIyBwb3NzaWJseSBhIGNvbnN0YW50IG9yIGNvbnN0YW50IGZ1bmN0aW9uCiAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICJjb25zdGFudCI7CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPnNhd19iYXJld29yZF9jb25zdGFudCgkdG9rKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAib3RoZXIgYmFyZXdvcmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIERFQlVHX0JBUkVXT1JEICYmICRyZXN1bHQgbmUgJ290aGVyIGJhcmV3b3JkJyApIHsKICAgICAgICAgICAgICAgIHByaW50CiIkaW5wdXRfbGluZV9udW1iZXI6ICRyZXN1bHQ6ICR0b2s6IHR5cGU9JHR5cGUgOiBsYXN0X3Rvaz0kbGFzdF9ub25ibGFua190b2tlbiA6IG5leHRfdG9rPSckbmV4dF9ub25ibGFua190b2tlbidcbiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRpc19sYXN0OwoKICAgIH0gIyMgZW5kIHN1YiBkb19CQVJFV09SRAoKICAgIHN1YiBkb19GT0xMT1dfUVVPVEUgewoKICAgICAgICBteSAkc2VsZiA9IHNoaWZ0OwoKICAgICAgICAjIENvbnRpbnVlIGZvbGxvd2luZyBhIHF1b3RlIG9uIGEgbmV3IGxpbmUKICAgICAgICAkdHlwZSA9ICRxdW90ZV90eXBlOwoKICAgICAgICBpZiAoICFAeyRyb3V0cHV0X3Rva2VuX2xpc3R9ICkgeyAgICAjIGluaXRpYWxpemUgaWYgY29udGludWF0aW9uIGxpbmUKICAgICAgICAgICAgcHVzaCggQHskcm91dHB1dF90b2tlbl9saXN0fSwgJGkgKTsKICAgICAgICAgICAgJHJvdXRwdXRfdG9rZW5fdHlwZS0+WyRpXSA9ICR0eXBlOwoKICAgICAgICB9CgogICAgICAgICMgc2NhbiBmb3IgdGhlIGVuZCBvZiB0aGUgcXVvdGUgb3IgcGF0dGVybgogICAgICAgICgKICAgICAgICAgICAgJGksCiAgICAgICAgICAgICRpbl9xdW90ZSwKICAgICAgICAgICAgJHF1b3RlX2NoYXJhY3RlciwKICAgICAgICAgICAgJHF1b3RlX3BvcywKICAgICAgICAgICAgJHF1b3RlX2RlcHRoLAogICAgICAgICAgICAkcXVvdGVkX3N0cmluZ18xLAogICAgICAgICAgICAkcXVvdGVkX3N0cmluZ18yLAoKICAgICAgICApID0gJHNlbGYtPmRvX3F1b3RlKAoKICAgICAgICAgICAgJGksCiAgICAgICAgICAgICRpbl9xdW90ZSwKICAgICAgICAgICAgJHF1b3RlX2NoYXJhY3RlciwKICAgICAgICAgICAgJHF1b3RlX3BvcywKICAgICAgICAgICAgJHF1b3RlX2RlcHRoLAogICAgICAgICAgICAkcXVvdGVkX3N0cmluZ18xLAogICAgICAgICAgICAkcXVvdGVkX3N0cmluZ18yLAogICAgICAgICAgICAkcnRva2VucywKICAgICAgICAgICAgJHJ0b2tlbl90eXBlLAogICAgICAgICAgICAkcnRva2VuX21hcCwKICAgICAgICAgICAgJG1heF90b2tlbl9pbmRleCwKCiAgICAgICAgKTsKCiAgICAgICAgIyBhbGwgZG9uZSBpZiB3ZSBkaWRuJ3QgZmluZCBpdAogICAgICAgIGlmICgkaW5fcXVvdGUpIHsgcmV0dXJuIH0KCiAgICAgICAgIyBzYXZlIHBhdHRlcm4gYW5kIHJlcGxhY2VtZW50IHRleHQgZm9yIHJlc2Nhbm5pbmcKICAgICAgICBteSAkcXMxID0gJHF1b3RlZF9zdHJpbmdfMTsKCiAgICAgICAgIyByZS1pbml0aWFsaXplIGZvciBuZXh0IHNlYXJjaAogICAgICAgICRxdW90ZV9jaGFyYWN0ZXIgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgJHF1b3RlX3BvcyAgICAgICA9IDA7CiAgICAgICAgJHF1b3RlX3R5cGUgICAgICA9ICdRJzsKICAgICAgICAkcXVvdGVkX3N0cmluZ18xID0gRU1QVFlfU1RSSU5HOwogICAgICAgICRxdW90ZWRfc3RyaW5nXzIgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgaWYgKCArKyRpID4gJG1heF90b2tlbl9pbmRleCApIHsgcmV0dXJuIH0KCiAgICAgICAgIyBsb29rIGZvciBhbnkgbW9kaWZpZXJzCiAgICAgICAgaWYgKCRhbGxvd2VkX3F1b3RlX21vZGlmaWVycykgewoKICAgICAgICAgICAgIyBjaGVjayBmb3IgZXhhY3QgcXVvdGUgbW9kaWZpZXJzCiAgICAgICAgICAgIGlmICggJHJ0b2tlbnMtPlskaV0gPX4gL15bQS1aYS16X10vICkgewogICAgICAgICAgICAgICAgbXkgJHN0ciA9ICRydG9rZW5zLT5bJGldOwogICAgICAgICAgICAgICAgbXkgJHNhd19tb2RpZmllcl9lOwogICAgICAgICAgICAgICAgd2hpbGUgKCAkc3RyID1+IC9cRyRhbGxvd2VkX3F1b3RlX21vZGlmaWVycy9nYyApIHsKICAgICAgICAgICAgICAgICAgICBteSAkcG9zICA9IHBvcygkc3RyKTsKICAgICAgICAgICAgICAgICAgICBteSAkY2hhciA9IHN1YnN0ciggJHN0ciwgJHBvcyAtIDEsIDEgKTsKICAgICAgICAgICAgICAgICAgICAkc2F3X21vZGlmaWVyX2UgfHw9ICggJGNoYXIgZXEgJ2UnICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBGb3IgYW4gJ2UnIHF1b3RlIG1vZGlmaWVyIHdlIG11c3Qgc2NhbiB0aGUgcmVwbGFjZW1lbnQKICAgICAgICAgICAgICAgICMgdGV4dCBmb3IgaGVyZS1kb2MgdGFyZ2V0cy4uLgogICAgICAgICAgICAgICAgIyBidXQgaWYgdGhlIG1vZGlmaWVyIHN0YXJ0cyBhIG5ldyBsaW5lIHdlIGNhbiBza2lwCiAgICAgICAgICAgICAgICAjIHRoaXMgYmVjYXVzZSBlaXRoZXIgdGhlIGhlcmUgZG9jIHdpbGwgYmUgZnVsbHkKICAgICAgICAgICAgICAgICMgY29udGFpbmVkIGluIHRoZSByZXBsYWNlbWVudCB0ZXh0IChzbyB3ZSBjYW4KICAgICAgICAgICAgICAgICMgaWdub3JlIGl0KSBvciBQZXJsIHdpbGwgbm90IGZpbmQgaXQuCiAgICAgICAgICAgICAgICAjIFNlZSB0ZXN0ICdoZXJlMi5pbicuCiAgICAgICAgICAgICAgICBpZiAoICRzYXdfbW9kaWZpZXJfZSAmJiAkaV90b2sgPj0gMCApIHsKCiAgICAgICAgICAgICAgICAgICAgbXkgJHJodCA9ICRzZWxmLT5zY2FuX3JlcGxhY2VtZW50X3RleHQoJHFzMSk7CgogICAgICAgICAgICAgICAgICAgICMgQ2hhbmdlIHR5cGUgZnJvbSAnUScgdG8gJ2gnIGZvciBxdW90ZXMgd2l0aAogICAgICAgICAgICAgICAgICAgICMgaGVyZS1kb2MgdGFyZ2V0cyBzbyB0aGF0IHRoZSBmb3JtYXR0ZXIgKHNlZSBzdWIKICAgICAgICAgICAgICAgICAgICAjIHByb2Nlc3NfbGluZV9vZl9DT0RFKSB3aWxsIG5vdCBtYWtlIGFueSBsaW5lCiAgICAgICAgICAgICAgICAgICAgIyBicmVha3MgYWZ0ZXIgdGhpcyBwb2ludC4KICAgICAgICAgICAgICAgICAgICBpZiAoJHJodCkgewogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEB7JHJoZXJlX3RhcmdldF9saXN0fSwgQHskcmh0fTsKICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAnaCc7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJGlfdG9rIDwgMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRpbGFzdCA9ICRyb3V0cHV0X3Rva2VuX2xpc3QtPlstMV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm91dHB1dF90b2tlbl90eXBlLT5bJGlsYXN0XSA9ICR0eXBlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCggcG9zKCRzdHIpICkgKSB7CgogICAgICAgICAgICAgICAgICAgICMgbWF0Y2hlZAogICAgICAgICAgICAgICAgICAgIGlmICggcG9zKCRzdHIpID09IGxlbmd0aCgkc3RyKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCArKyRpID4gJG1heF90b2tlbl9pbmRleCApIHsgcmV0dXJuIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgTG9va3MgbGlrZSBhIGpvaW5lZCBxdW90ZSBtb2RpZmllcgogICAgICAgICAgICAgICAgICAgICMgYW5kIGtleXdvcmQsIG1heWJlIHNvbWV0aGluZyBsaWtlCiAgICAgICAgICAgICAgICAgICAgIyBzL3h4eC95eXkvZ2Vmb3IgQGs9Li4uCiAgICAgICAgICAgICAgICAgICAgIyBFeGFtcGxlIGlzICJnYWxnZW4ucGwiLiAgV291bGQgaGF2ZSB0byBzcGxpdAogICAgICAgICAgICAgICAgICAgICMgdGhlIHdvcmQgYW5kIGluc2VydCBhIG5ldyB0b2tlbiBpbiB0aGUKICAgICAgICAgICAgICAgICAgICAjIHByZS10b2tlbiBsaXN0LiAgVGhpcyBpcyBzbyByYXJlIHRoYXQgSSBoYXZlbid0CiAgICAgICAgICAgICAgICAgICAgIyBkb25lIGl0LiAgV2lsbCBqdXN0IGlzc3VlIGEgd2FybmluZyBjaXRhdGlvbi4KCiAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGVycm9yIG1pZ2h0IGFsc28gYmUgdHJpZ2dlcmVkIGlmIG15IHF1b3RlCiAgICAgICAgICAgICAgICAgICAgIyBtb2RpZmllciBjaGFyYWN0ZXJzIGFyZSBpbmNvbXBsZXRlCiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT53YXJuaW5nKDw8RU9NKTsKClBhcnRpYWwgbWF0Y2ggdG8gcXVvdGUgbW9kaWZpZXIgJGFsbG93ZWRfcXVvdGVfbW9kaWZpZXJzIGF0IHdvcmQ6ICckc3RyJwpQbGVhc2UgcHV0IGEgc3BhY2UgYmV0d2VlbiBxdW90ZSBtb2RpZmllcnMgYW5kIHRyYWlsaW5nIGtleXdvcmRzLgpFT00KCiAgICAgICAgICAgICAgICAgICAgICAgICMgcHJpbnQgInRva2VuICRydG9rZW5zLT5bJGldXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAjIG15ICRudW0gPSBsZW5ndGgoJHN0cikgLSBwb3MoJHN0cik7CiAgICAgICAgICAgICAgICAgICAgICAgICMgJHJ0b2tlbnMtPlskaV09c3Vic3RyKCRydG9rZW5zLT5bJGldLHBvcygkc3RyKSwkbnVtKTsKICAgICAgICAgICAgICAgICAgICAgICAgIyBwcmludCAiY29udGludWluZyB3aXRoIG5ldyB0b2tlbiAkcnRva2Vucy0+WyRpXVxuIjsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgc2tpcHBpbmcgcGFzdCB0aGlzIHRva2VuIGRvZXMgbGVhc3QgZGFtYWdlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKyskaSA+ICRtYXhfdG9rZW5faW5kZXggKSB7IHJldHVybiB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICMgZXhhbXBsZSBmaWxlOiByb2tpY2tpNC5wbAogICAgICAgICAgICAgICAgICAgICMgVGhpcyBlcnJvciBtaWdodCBhbHNvIGJlIHRyaWdnZXJlZCBpZiBteSBxdW90ZQogICAgICAgICAgICAgICAgICAgICMgbW9kaWZpZXIgY2hhcmFjdGVycyBhcmUgaW5jb21wbGV0ZQogICAgICAgICAgICAgICAgICAgICRzZWxmLT53cml0ZV9sb2dmaWxlX2VudHJ5KAogICAgICAgICAgICAgICAgICAgICAgICAiTm90ZTogZm91bmQgd29yZCAkc3RyIGF0IHF1b3RlIG1vZGlmaWVyIGxvY2F0aW9uXG4iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyByZS1pbml0aWFsaXplCiAgICAgICAgICAgICRhbGxvd2VkX3F1b3RlX21vZGlmaWVycyA9IEVNUFRZX1NUUklORzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGRvX0ZPTExPV19RVU9URQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIGJlZ2luIGhhc2ggb2YgY29kZSBmb3IgaGFuZGxpbmcgbW9zdCB0b2tlbiB0eXBlcwogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIG15ICR0b2tlbml6YXRpb25fY29kZSA9IHsKCiAgICAgICAgJz4nICAgPT4gXCZkb19HUkVBVEVSX1RIQU5fU0lHTiwKICAgICAgICAnfCcgICA9PiBcJmRvX1ZFUlRJQ0FMX0xJTkUsCiAgICAgICAgJyQnICAgPT4gXCZkb19ET0xMQVJfU0lHTiwKICAgICAgICAnKCcgICA9PiBcJmRvX0xFRlRfUEFSRU5USEVTSVMsCiAgICAgICAgJyknICAgPT4gXCZkb19SSUdIVF9QQVJFTlRIRVNJUywKICAgICAgICAnLCcgICA9PiBcJmRvX0NPTU1BLAogICAgICAgICc7JyAgID0+IFwmZG9fU0VNSUNPTE9OLAogICAgICAgICciJyAgID0+IFwmZG9fUVVPVEFUSU9OX01BUkssCiAgICAgICAgIiciICAgPT4gXCZkb19BUE9TVFJPUEhFLAogICAgICAgICdgJyAgID0+IFwmZG9fQkFDS1RJQ0ssCiAgICAgICAgJy8nICAgPT4gXCZkb19TTEFTSCwKICAgICAgICAneycgICA9PiBcJmRvX0xFRlRfQ1VSTFlfQlJBQ0tFVCwKICAgICAgICAnfScgICA9PiBcJmRvX1JJR0hUX0NVUkxZX0JSQUNLRVQsCiAgICAgICAgJyYnICAgPT4gXCZkb19BTVBFUlNBTkQsCiAgICAgICAgJzwnICAgPT4gXCZkb19MRVNTX1RIQU5fU0lHTiwKICAgICAgICAnPycgICA9PiBcJmRvX1FVRVNUSU9OX01BUkssCiAgICAgICAgJyonICAgPT4gXCZkb19TVEFSLAogICAgICAgICcuJyAgID0+IFwmZG9fRE9ULAogICAgICAgICc6JyAgID0+IFwmZG9fQ09MT04sCiAgICAgICAgJysnICAgPT4gXCZkb19QTFVTX1NJR04sCiAgICAgICAgJ0AnICAgPT4gXCZkb19BVF9TSUdOLAogICAgICAgICclJyAgID0+IFwmZG9fUEVSQ0VOVF9TSUdOLAogICAgICAgICdbJyAgID0+IFwmZG9fTEVGVF9TUVVBUkVfQlJBQ0tFVCwKICAgICAgICAnXScgICA9PiBcJmRvX1JJR0hUX1NRVUFSRV9CUkFDS0VULAogICAgICAgICctJyAgID0+IFwmZG9fTUlOVVNfU0lHTiwKICAgICAgICAnXicgICA9PiBcJmRvX0NBUkFUX1NJR04sCiAgICAgICAgJzo6JyAgPT4gXCZkb19ET1VCTEVfQ09MT04sCiAgICAgICAgJzw8JyAgPT4gXCZkb19MRUZUX1NISUZULAogICAgICAgICc8PH4nID0+IFwmZG9fTkVXX0hFUkVfRE9DLAogICAgICAgICctPicgID0+IFwmZG9fUE9JTlRFUiwKICAgICAgICAnKysnICA9PiBcJmRvX1BMVVNfUExVUywKICAgICAgICAnPT4nICA9PiBcJmRvX0ZBVF9DT01NQSwKICAgICAgICAnLS0nICA9PiBcJmRvX01JTlVTX01JTlVTLAogICAgICAgICcmJicgID0+IFwmZG9fTE9HSUNBTF9BTkQsCiAgICAgICAgJ3x8JyAgPT4gXCZkb19MT0dJQ0FMX09SLAogICAgICAgICcvLycgID0+IFwmZG9fU0xBU0hfU0xBU0gsCgogICAgICAgICMgTm8gc3BlY2lhbCBjb2RlIGZvciB0aGVzZSB0eXBlcyB5ZXQsIGJ1dCBzeW50YXggY2hlY2tzCiAgICAgICAgIyBjb3VsZCBiZSBhZGRlZC4KICAgICAgICAjIyAgJyEnICAgPT4gdW5kZWYsCiAgICAgICAgIyMgICchPScgID0+IHVuZGVmLAogICAgICAgICMjICAnIX4nICA9PiB1bmRlZiwKICAgICAgICAjIyAgJyU9JyAgPT4gdW5kZWYsCiAgICAgICAgIyMgICcmJj0nID0+IHVuZGVmLAogICAgICAgICMjICAnJj0nICA9PiB1bmRlZiwKICAgICAgICAjIyAgJys9JyAgPT4gdW5kZWYsCiAgICAgICAgIyMgICctPScgID0+IHVuZGVmLAogICAgICAgICMjICAnLi4nICA9PiB1bmRlZiwKICAgICAgICAjIyAgJy4uJyAgPT4gdW5kZWYsCiAgICAgICAgIyMgICcuLi4nID0+IHVuZGVmLAogICAgICAgICMjICAnLj0nICA9PiB1bmRlZiwKICAgICAgICAjIyAgJzw8PScgPT4gdW5kZWYsCiAgICAgICAgIyMgICc8PScgID0+IHVuZGVmLAogICAgICAgICMjICAnPD0+JyA9PiB1bmRlZiwKICAgICAgICAjIyAgJzw+JyAgPT4gdW5kZWYsCiAgICAgICAgIyMgICc9JyAgID0+IHVuZGVmLAogICAgICAgICMjICAnPT0nICA9PiB1bmRlZiwKICAgICAgICAjIyAgJz1+JyAgPT4gdW5kZWYsCiAgICAgICAgIyMgICc+PScgID0+IHVuZGVmLAogICAgICAgICMjICAnPj4nICA9PiB1bmRlZiwKICAgICAgICAjIyAgJz4+PScgPT4gdW5kZWYsCiAgICAgICAgIyMgICdcXCcgID0+IHVuZGVmLAogICAgICAgICMjICAnXj0nICA9PiB1bmRlZiwKICAgICAgICAjIyAgJ3w9JyAgPT4gdW5kZWYsCiAgICAgICAgIyMgICd8fD0nID0+IHVuZGVmLAogICAgICAgICMjICAnLy89JyA9PiB1bmRlZiwKICAgICAgICAjIyAgJ34nICAgPT4gdW5kZWYsCiAgICAgICAgIyMgICd+ficgID0+IHVuZGVmLAogICAgICAgICMjICAnIX5+JyA9PiB1bmRlZiwKCiAgICB9OwoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIGVuZCBoYXNoIG9mIGNvZGUgZm9yIGhhbmRsaW5nIGluZGl2aWR1YWwgdG9rZW4gdHlwZXMKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgdXNlIGNvbnN0YW50IERFQlVHX1RPS0VOSVpFID0+IDA7CgogICAgbXkgJWlzX2Fycm93X29yX1o7CgogICAgQkVHSU4gewogICAgICAgIG15IEBxWiA9IHF3KCAtPiBaICk7CiAgICAgICAgQGlzX2Fycm93X29yX1p7QHFafSA9ICgxKSB4IHNjYWxhcihAcVopOwogICAgfQoKICAgIHN1YiB0b2tlbml6ZV90aGlzX2xpbmUgewoKICAgICAgICBteSAoICRzZWxmLCAkbGluZV9vZl90b2tlbnMsICR0cmltbWVkX2lucHV0X2xpbmUgKSA9IEBfOwoKICAgICAgICAjIFRoaXMgcm91dGluZSB0b2tlbml6ZXMgb25lIGxpbmUuIFRoZSByZXN1bHRzIGFyZSBzdG9yZWQgaW4KICAgICAgICAjIHRoZSBoYXNoIHJlZiAnJGxpbmVfb2ZfdG9rZW5zJy4KCiAgICAgICAgIyBHaXZlbjoKICAgICAgICAjICAgJGxpbmVfb2ZfdG9rZW5zID0gcmVmIHRvIGhhc2ggb2YgdmFsdWVzIGJlaW5nIGZpbGxlZCBmb3IgdGhpcyBsaW5lCiAgICAgICAgIyAgICR0cmltbWVkX2lucHV0X2xpbmUKICAgICAgICAjICAgICAgICA9IHRoZSBpbnB1dCBsaW5lIHdpdGhvdXQgbGVhZGluZyB3aGl0ZXNwYWNlLCBPUgogICAgICAgICMgICAgICAgID0gdW5kZWYgaWYgbm90IGF2YWlsYWJsZQogICAgICAgICMgUmV0dXJuczoKICAgICAgICAjICAgbm90aGluZwoKICAgICAgICBteSAkdW50cmltbWVkX2lucHV0X2xpbmUgPSAkbGluZV9vZl90b2tlbnMtPntfbGluZV90ZXh0fTsKCiAgICAgICAgIyBFeHRyYWN0IGxpbmUgbnVtYmVyIGZvciB1c2UgaW4gZXJyb3IgbWVzc2FnZXMKICAgICAgICAkaW5wdXRfbGluZV9udW1iZXIgPSAkbGluZV9vZl90b2tlbnMtPntfbGluZV9udW1iZXJ9OwoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgQ2hlY2sgZm9yIHN0YXJ0IG9mIHBvZCBkb2N1bWVudGF0aW9uCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBpZiAoIHN1YnN0ciggJHVudHJpbW1lZF9pbnB1dF9saW5lLCAwLCAxICkgZXEgJz0nCiAgICAgICAgICAgICYmICR1bnRyaW1tZWRfaW5wdXRfbGluZSA9fiAvXj1bQS1aYS16X10vICkKICAgICAgICB7CgogICAgICAgICAgICAjIE11c3Qgbm90IGJlIGluIG11bHRpLWxpbmUgcXVvdGUKICAgICAgICAgICAgIyBhbmQgbXVzdCBub3QgYmUgaW4gYW4gZXF1YXRpb24KICAgICAgICAgICAgbXkgJGJsYW5rX2FmdGVyX1ogPSAxOwogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAhJGluX3F1b3RlCiAgICAgICAgICAgICAgICAmJiAoICRzZWxmLT5vcGVyYXRvcl9leHBlY3RlZCggJz0nLCAnYicsICRibGFua19hZnRlcl9aICkgPT0KICAgICAgICAgICAgICAgICAgICBURVJNICkKICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRzZWxmLT5bX2luX3BvZF9dID0gMTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBUcmltIGxlYWRpbmcgd2hpdGVzcGFjZSA/CiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBVc2UgdW50cmltbWVkIGxpbmUgaWYgd2UgYXJlIGNvbnRpbnVpbmcgaW4gYSB0eXBlICdRJyBxdW90ZQogICAgICAgIGlmICggJGluX3F1b3RlICYmICRxdW90ZV90eXBlIGVxICdRJyApIHsKICAgICAgICAgICAgJGxpbmVfb2ZfdG9rZW5zLT57X3N0YXJ0aW5nX2luX3F1b3RlfSA9IDE7CiAgICAgICAgICAgICRpbnB1dF9saW5lID0gJHVudHJpbW1lZF9pbnB1dF9saW5lOwogICAgICAgICAgICBjaG9tcCAkaW5wdXRfbGluZTsKICAgICAgICB9CgogICAgICAgICMgVHJpbSBzdGFydCBvZiB0aGlzIGxpbmUgaWYgd2UgYXJlIG5vdCBjb250aW51aW5nIGEgcXVvdGVkIGxpbmUuCiAgICAgICAgIyBEbyBub3QgdHJpbSBlbmQgYmVjYXVzZSB3ZSBtaWdodCBlbmQgaW4gYSBxdW90ZSAodGVzdDogZGVrZW40LnBsKQogICAgICAgICMgUGVybDo6VGlkeTo6Rm9ybWF0dGVyIHdpbGwgZGVsZXRlIG5lZWRsZXNzIHRyYWlsaW5nIGJsYW5rcwogICAgICAgIGVsc2UgewogICAgICAgICAgICAkbGluZV9vZl90b2tlbnMtPntfc3RhcnRpbmdfaW5fcXVvdGV9ID0gMDsKCiAgICAgICAgICAgICMgVXNlIHRoZSBwcmUtY29tcHV0ZWQgdHJpbW1lZCBsaW5lIGlmIGRlZmluZWQgKG1vc3QgZWZmaWNpZW50KQogICAgICAgICAgICAkaW5wdXRfbGluZSA9ICR0cmltbWVkX2lucHV0X2xpbmU7CgogICAgICAgICAgICAjIG90aGVyd2lzZSB0cmltIHRoZSByYXcgaW5wdXQgbGluZSAobXVjaCBsZXNzIGVmZmljaWVudCkKICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCgkaW5wdXRfbGluZSkgKSB7CiAgICAgICAgICAgICAgICAkaW5wdXRfbGluZSA9ICR1bnRyaW1tZWRfaW5wdXRfbGluZTsKICAgICAgICAgICAgICAgICRpbnB1dF9saW5lID1+IHMvXlxzKy8vOwogICAgICAgICAgICB9CgogICAgICAgICAgICBjaG9tcCAkaW5wdXRfbGluZTsKCiAgICAgICAgICAgICMgZGVmaW5lICdndWVzc2VkX2luZGVudGF0aW9uX2xldmVsJyBpZiBsb2dmaWxlIHdpbGwgYmUgc2F2ZWQKICAgICAgICAgICAgaWYgKCAkc2VsZi0+W19zYXZlX2xvZ2ZpbGVfXSAmJiBsZW5ndGgoJGlucHV0X2xpbmUpICkgewogICAgICAgICAgICAgICAgbXkgJGd1ZXNzID0KICAgICAgICAgICAgICAgICAgJHNlbGYtPmd1ZXNzX29sZF9pbmRlbnRhdGlvbl9sZXZlbCgkdW50cmltbWVkX2lucHV0X2xpbmUpOwogICAgICAgICAgICAgICAgJGxpbmVfb2ZfdG9rZW5zLT57X2d1ZXNzZWRfaW5kZW50YXRpb25fbGV2ZWx9ID0gJGd1ZXNzOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tCiAgICAgICAgIyBCbGFuayBsaW5lcwogICAgICAgICMtLS0tLS0tLS0tLS0KICAgICAgICBpZiAoICFsZW5ndGgoJGlucHV0X2xpbmUpICkgewogICAgICAgICAgICAkbGluZV9vZl90b2tlbnMtPntfbGluZV90eXBlfSAgICAgICAgPSAnQ09ERSc7CiAgICAgICAgICAgICRsaW5lX29mX3Rva2Vucy0+e19ydG9rZW5zfSAgICAgICAgICA9IFtdOwogICAgICAgICAgICAkbGluZV9vZl90b2tlbnMtPntfcnRva2VuX3R5cGV9ICAgICAgPSBbXTsKICAgICAgICAgICAgJGxpbmVfb2ZfdG9rZW5zLT57X3JsZXZlbHN9ICAgICAgICAgID0gW107CiAgICAgICAgICAgICRsaW5lX29mX3Rva2Vucy0+e19yYmxvY2tfdHlwZX0gICAgICA9IFtdOwogICAgICAgICAgICAkbGluZV9vZl90b2tlbnMtPntfbmVzdGluZ190b2tlbnNfMH0gPSAkbmVzdGluZ190b2tlbl9zdHJpbmc7CiAgICAgICAgICAgICRsaW5lX29mX3Rva2Vucy0+e19uZXN0aW5nX2Jsb2Nrc18wfSA9ICRuZXN0aW5nX2Jsb2NrX3N0cmluZzsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLQogICAgICAgICMgQ29tbWVudHMKICAgICAgICAjLS0tLS0tLS0tCiAgICAgICAgaWYgKCAhJGluX3F1b3RlICYmIHN1YnN0ciggJGlucHV0X2xpbmUsIDAsIDEgKSBlcSAnIycgKSB7CgogICAgICAgICAgICAjIGFuZCBjaGVjayBmb3Igc2tpcHBlZCBzZWN0aW9uCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICBzdWJzdHIoICRpbnB1dF9saW5lLCAwLCA0ICkgZXEgJyM8PFYnCiAgICAgICAgICAgICAgICAgICAgfHwgJHJPcHRzX2NvZGVfc2tpcHBpbmdfYmVnaW4KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICYmICRyT3B0c19jb2RlX3NraXBwaW5nCgogICAgICAgICAgICAgICAgIyBub3RlIHRoYXQgdGhlIGNvZGVfc2tpcHBpbmdfcGF0dGVybnMgcmVxdWlyZSBhIG5ld2xpbmUKICAgICAgICAgICAgICAgICYmICRpbnB1dF9saW5lIC4gIlxuIiA9fiAvJGNvZGVfc2tpcHBpbmdfcGF0dGVybl9iZWdpbi8KICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRzZWxmLT5bX2luX2NvZGVfc2tpcHBpbmdfXSA9ICRzZWxmLT5bX2xhc3RfbGluZV9udW1iZXJfXTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAhJHNlbGYtPltfaW5fZm9ybWF0X3NraXBwaW5nX10gKSB7CiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICBzdWJzdHIoICRpbnB1dF9saW5lLCAwLCA0ICkgZXEgJyM8PDwnCiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRyT3B0c19mb3JtYXRfc2tpcHBpbmdfYmVnaW4KICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgJiYgJHJPcHRzX2Zvcm1hdF9za2lwcGluZwoKICAgICAgICAgICAgICAgICAgICAjIG5vdGUgdGhhdCB0aGUgY29kZV9za2lwcGluZ19wYXR0ZXJucyByZXF1aXJlIGEgbmV3bGluZQogICAgICAgICAgICAgICAgICAgICYmICRpbnB1dF9saW5lIC4gIlxuIiA9fiAvJGZvcm1hdF9za2lwcGluZ19wYXR0ZXJuX2JlZ2luLwogICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPltfaW5fZm9ybWF0X3NraXBwaW5nX10gPSAkc2VsZi0+W19sYXN0X2xpbmVfbnVtYmVyX107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICBzdWJzdHIoICRpbnB1dF9saW5lLCAwLCA0ICkgZXEgJyM+Pj4nCiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRyT3B0c19mb3JtYXRfc2tpcHBpbmdfZW5kCiAgICAgICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgICAgICAgICAjIG5vdGUgdGhhdCB0aGUgY29kZV9za2lwcGluZ19wYXR0ZXJucyByZXF1aXJlIGEgbmV3bGluZQogICAgICAgICAgICAgICAgICAgICYmICRpbnB1dF9saW5lIC4gIlxuIiA9fiAvJGZvcm1hdF9za2lwcGluZ19wYXR0ZXJuX2VuZC8KICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRzZWxmLT5bX2luX2Zvcm1hdF9za2lwcGluZ19dID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBPcHRpb25hbCBmYXN0IHByb2Nlc3Npbmcgb2YgYSBibG9jayBjb21tZW50CiAgICAgICAgICAgICRsaW5lX29mX3Rva2Vucy0+e19saW5lX3R5cGV9ICAgICAgICA9ICdDT0RFJzsKICAgICAgICAgICAgJGxpbmVfb2ZfdG9rZW5zLT57X3J0b2tlbnN9ICAgICAgICAgID0gWyRpbnB1dF9saW5lXTsKICAgICAgICAgICAgJGxpbmVfb2ZfdG9rZW5zLT57X3J0b2tlbl90eXBlfSAgICAgID0gWycjJ107CiAgICAgICAgICAgICRsaW5lX29mX3Rva2Vucy0+e19ybGV2ZWxzfSAgICAgICAgICA9IFskbGV2ZWxfaW5fdG9rZW5pemVyXTsKICAgICAgICAgICAgJGxpbmVfb2ZfdG9rZW5zLT57X3JibG9ja190eXBlfSAgICAgID0gW0VNUFRZX1NUUklOR107CiAgICAgICAgICAgICRsaW5lX29mX3Rva2Vucy0+e19uZXN0aW5nX3Rva2Vuc18wfSA9ICRuZXN0aW5nX3Rva2VuX3N0cmluZzsKICAgICAgICAgICAgJGxpbmVfb2ZfdG9rZW5zLT57X25lc3RpbmdfYmxvY2tzXzB9ID0gJG5lc3RpbmdfYmxvY2tfc3RyaW5nOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgTG9vcCB0byBmaW5kIGFsbCB0b2tlbnMgb24gdGhpcyBsaW5lCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgIyBVcGRhdGUgdGhlIGNvcHkgb2YgdGhlIGxpbmUgZm9yIHVzZSBpbiBlcnJvciBtZXNzYWdlcwogICAgICAgICMgVGhpcyBtdXN0IGJlIGV4YWN0bHkgd2hhdCB3ZSBnaXZlIHRoZSBwcmVfdG9rZW5pemVyCiAgICAgICAgJHNlbGYtPltfbGluZV9vZl90ZXh0X10gPSAkaW5wdXRfbGluZTsKCiAgICAgICAgIyByZS1pbml0aWFsaXplIGZvciB0aGUgbWFpbiBsb29wCiAgICAgICAgJHJvdXRwdXRfdG9rZW5fbGlzdCAgICA9IFtdOyAgICAjIHN0YWNrIG9mIG91dHB1dCB0b2tlbiBpbmRleGVzCiAgICAgICAgJHJvdXRwdXRfdG9rZW5fdHlwZSAgICA9IFtdOyAgICAjIHRva2VuIHR5cGVzCiAgICAgICAgJHJvdXRwdXRfYmxvY2tfdHlwZSAgICA9IFtdOyAgICAjIHR5cGVzIG9mIGNvZGUgYmxvY2sKICAgICAgICAkcm91dHB1dF90eXBlX3NlcXVlbmNlID0gW107ICAgICMgbmVzdGluZyBzZXF1ZW50aWFsIG51bWJlcgoKICAgICAgICAkcmhlcmVfdGFyZ2V0X2xpc3QgPSBbXTsKCiAgICAgICAgJHRvayAgICAgICAgICAgICA9ICRsYXN0X25vbmJsYW5rX3Rva2VuOwogICAgICAgICR0eXBlICAgICAgICAgICAgPSAkbGFzdF9ub25ibGFua190eXBlOwogICAgICAgICRwcm90b3R5cGUgICAgICAgPSAkbGFzdF9ub25ibGFua19wcm90b3R5cGU7CiAgICAgICAgJGxhc3Rfbm9uYmxhbmtfaSA9IC0xOwogICAgICAgICRibG9ja190eXBlICAgICAgPSAkbGFzdF9ub25ibGFua19ibG9ja190eXBlOwogICAgICAgICRjb250YWluZXJfdHlwZSAgPSAkbGFzdF9ub25ibGFua19jb250YWluZXJfdHlwZTsKICAgICAgICAkdHlwZV9zZXF1ZW5jZSAgID0gJGxhc3Rfbm9uYmxhbmtfdHlwZV9zZXF1ZW5jZTsKICAgICAgICAkaW5kZW50X2ZsYWcgICAgID0gMDsKICAgICAgICAkcGVla2VkX2FoZWFkICAgID0gMDsKCiAgICAgICAgJHNlbGYtPnRva2VuaXplcl9tYWluX2xvb3AoKTsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIERvbmUgdG9rZW5pemluZyB0aGlzIGxpbmUgLi4uIHBhY2thZ2UgdGhlIHJlc3VsdAogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgJHNlbGYtPnRva2VuaXplcl93cmFwdXBfbGluZSgkbGluZV9vZl90b2tlbnMpOwoKICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgdG9rZW5pemVfdGhpc19saW5lCgogICAgc3ViIHRva2VuaXplcl9tYWluX2xvb3AgewoKICAgICAgICBteSAoJHNlbGYpID0gQF87CgogICAgICAgICMgQnJlYWsgb25lIGlucHV0IGxpbmUgaW50byB0b2tlbnMKICAgICAgICAjIFdlIGFyZSB3b3JraW5nIG9uIGNsb3N1cmUgdmFyaWFibGVzLgoKICAgICAgICAjIFN0YXJ0IGJ5IGJyZWFraW5nIHRoZSBsaW5lIGludG8gcHJlLXRva2VucwogICAgICAgICggJHJ0b2tlbnMsICRydG9rZW5fbWFwLCAkcnRva2VuX3R5cGUgKSA9IHByZV90b2tlbml6ZSgkaW5wdXRfbGluZSk7CgogICAgICAgICMgVmVyaWZ5IHRoYXQgYWxsIGxlYWRpbmcgd2hpdGVzcGFjZSBoYXMgYmVlbiB0cmltbWVkCiAgICAgICAgIyBleGNlcHQgZm9yIHF1b3RlcyBvZiB0eXBlICdRJyAoYzI3MykuCiAgICAgICAgaWYgKCAgIEB7JHJ0b2tlbnN9CiAgICAgICAgICAgICYmICRydG9rZW5fdHlwZS0+WzBdIGVxICdiJwogICAgICAgICAgICAmJiAhKCAkaW5fcXVvdGUgJiYgJHF1b3RlX3R5cGUgZXEgJ1EnICkgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgU2hvdWxkbid0IGhhcHBlbiBpZiBjYWxsaW5nIHN1YiBkaWQgdHJpbSBvcGVyYXRpb24gY29ycmVjdGx5LgogICAgICAgICAgICBERVZFTF9NT0RFICYmICRzZWxmLT5GYXVsdCg8PEVPTSk7CmxlYWRpbmcgYmxhbmsgYXQgbGluZQokaW5wdXRfbGluZQpFT00KCiAgICAgICAgICAgICMgRml4IGJ5IHJlbW92aW5nIHRoZSBsZWFkaW5nIGJsYW5rIHRva2VuLiAgVGhpcyBmaXggaGFzIGJlZW4KICAgICAgICAgICAgIyB0ZXN0ZWQgYW5kIHdvcmtzIGNvcnJlY3RseSBldmVuIGlmIG5vIHdoaXRlc3BhY2VzIHdhcyB0cmltbWVkLgogICAgICAgICAgICAjIEJ1dCBpdCBpcyBhbiBpbmVmZmljaWVudCB3YXkgdG8gZG8gdGhpbmdzIGJlY2F1c2UsIGZvciBleGFtcGxlLAogICAgICAgICAgICAjIGl0IGZvcmNlcyBhbGwgY29tbWVudHMgdG8gYmUgcHJvY2Vzc2VkIGJ5IHN1YiBwcmVfdG9rZW5pemUuCiAgICAgICAgICAgICMgQW5kIGl0IG1heSBjYXVzZSBpbmRlbnRlZCBjb2RlLXNraXBwaW5nIGNvbW1lbnRzIHRvIGJlIG1pc3NlZC4KICAgICAgICAgICAgc2hpZnQgQHskcnRva2Vuc307CiAgICAgICAgICAgIHNoaWZ0IEB7JHJ0b2tlbl9tYXB9OwogICAgICAgICAgICBzaGlmdCBAeyRydG9rZW5fdHlwZX07CiAgICAgICAgfQoKICAgICAgICAkbWF4X3Rva2VuX2luZGV4ID0gc2NhbGFyKCBAeyRydG9rZW5zfSApIC0gMTsKICAgICAgICBwdXNoKCBAeyRydG9rZW5zfSwgU1BBQ0UsIFNQQUNFLCBTUEFDRSApCiAgICAgICAgICA7ICAgICMgZXh0cmEgd2hpdGVzcGFjZSBzaW1wbGlmaWVzIGxvZ2ljCiAgICAgICAgcHVzaCggQHskcnRva2VuX21hcH0sICAwLCAgIDAsICAgMCApOyAgICAgIyBzaG91bGRuJ3QgYmUgcmVmZXJlbmNlZAogICAgICAgIHB1c2goIEB7JHJ0b2tlbl90eXBlfSwgJ2InLCAnYicsICdiJyApOwoKICAgICAgICAjIGluaXRpYWxpemUgZm9yIG1haW4gbG9vcAogICAgICAgIGlmICgwKSB7ICM8PDwgdGhpcyBpcyBub3QgbmVjZXNzYXJ5CiAgICAgICAgZm9yZWFjaCBteSAkaWkgKCAwIC4uICRtYXhfdG9rZW5faW5kZXggKyAzICkgewogICAgICAgICAgICAkcm91dHB1dF90b2tlbl90eXBlLT5bJGlpXSAgICA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgJHJvdXRwdXRfYmxvY2tfdHlwZS0+WyRpaV0gICAgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgICRyb3V0cHV0X3R5cGVfc2VxdWVuY2UtPlskaWldID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICAkcm91dHB1dF9pbmRlbnRfZmxhZy0+WyRpaV0gICA9IDA7CiAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJGkgICAgID0gLTE7CiAgICAgICAgJGlfdG9rID0gLTE7CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgbWFpbiB0b2tlbml6YXRpb24gbG9vcAogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAjIHdlIGFyZSBsb29raW5nIGF0IGVhY2ggcHJlLXRva2VuIG9mIG9uZSBsaW5lIGFuZCBjb21iaW5pbmcgdGhlbQogICAgICAgICMgaW50byB0b2tlbnMKICAgICAgICB3aGlsZSAoICsrJGkgPD0gJG1heF90b2tlbl9pbmRleCApIHsKCiAgICAgICAgICAgICMgY29udGludWUgbG9va2luZyBmb3IgdGhlIGVuZCBvZiBhIHF1b3RlCiAgICAgICAgICAgIGlmICgkaW5fcXVvdGUpIHsKICAgICAgICAgICAgICAgICRzZWxmLT5kb19GT0xMT1dfUVVPVEUoKTsKICAgICAgICAgICAgICAgIGxhc3QgaWYgKCAkaW5fcXVvdGUgfHwgJGkgPiAkbWF4X3Rva2VuX2luZGV4ICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJHR5cGUgbmUgJ2InICYmICR0eXBlIG5lICdDT1JFOjonICkgewoKICAgICAgICAgICAgICAgICMgdHJ5IHRvIGNhdGNoIHNvbWUgY29tbW9uIGVycm9ycwogICAgICAgICAgICAgICAgaWYgKCAoICR0eXBlIGVxICduJyApICYmICggJHRvayBuZSAnMCcgKSApIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkbGFzdF9ub25ibGFua190b2tlbiBlcSAnZXEnICkgewogICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+Y29tcGxhaW4oIlNob3VsZCAnZXEnIGJlICc9PScgaGVyZSA/XG4iKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkbGFzdF9ub25ibGFua190b2tlbiBlcSAnbmUnICkgewogICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+Y29tcGxhaW4oIlNob3VsZCAnbmUnIGJlICchPScgaGVyZSA/XG4iKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICMgdGhhdCdzIGFsbAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGZpeCBjMDkwLCBvbmx5IHJvdGF0ZSB2YXJzIGlmIGEgbmV3IHRva2VuIHdpbGwgYmUgc3RvcmVkCiAgICAgICAgICAgICAgICBpZiAoICRpX3RvayA+PSAwICkgewoKICAgICAgICAgICAgICAgICAgICAkbGFzdF9sYXN0X25vbmJsYW5rX3Rva2VuID0gJGxhc3Rfbm9uYmxhbmtfdG9rZW47CiAgICAgICAgICAgICAgICAgICAgJGxhc3RfbGFzdF9ub25ibGFua190eXBlICA9ICRsYXN0X25vbmJsYW5rX3R5cGU7CgogICAgICAgICAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX3Byb3RvdHlwZSAgICAgID0gJHByb3RvdHlwZTsKICAgICAgICAgICAgICAgICAgICAkbGFzdF9ub25ibGFua19ibG9ja190eXBlICAgICA9ICRibG9ja190eXBlOwogICAgICAgICAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX2NvbnRhaW5lcl90eXBlID0gJGNvbnRhaW5lcl90eXBlOwogICAgICAgICAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX3R5cGVfc2VxdWVuY2UgID0gJHR5cGVfc2VxdWVuY2U7CiAgICAgICAgICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfaSAgICAgICAgICAgICAgPSAkaV90b2s7CiAgICAgICAgICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfdG9rZW4gICAgICAgICAgPSAkdG9rOwogICAgICAgICAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX3R5cGUgICAgICAgICAgID0gJHR5cGU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBDaGVjayBmb3IgcGF0Y2hlcwogICAgICAgICAgICAgICAgaWYgKCAkaXNfYXJyb3dfb3JfWnskbGFzdF9sYXN0X25vbmJsYW5rX3R5cGV9ICkgewoKICAgICAgICAgICAgICAgICAgICAjIFBhdGNoIGZvciBjMDMwOiBGaXggdGhpbmdzIGluIGNhc2UgYSAnLT4nIGdvdCBzZXBhcmF0ZWQKICAgICAgICAgICAgICAgICAgICAjIGZyb20gdGhlIHN1YnNlcXVlbnQgaWRlbnRpZmllciBieSBhIHNpZGUgY29tbWVudC4gIFdlCiAgICAgICAgICAgICAgICAgICAgIyBuZWVkIHRoZSBsYXN0X25vbmJsYW5rX3Rva2VuIHRvIGhhdmUgYSBsZWFkaW5nIC0+IHRvCiAgICAgICAgICAgICAgICAgICAgIyBhdm9pZCB0cmlnZ2VyaW5nIGFuIG9wZXJhdG9yIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2UgYXQKICAgICAgICAgICAgICAgICAgICAjIHRoZSBuZXh0ICcoJy4gU2VlIGFsc28gZml4IGZvciBnaXQgIzYzLgogICAgICAgICAgICAgICAgICAgIGlmICggJGxhc3RfbGFzdF9ub25ibGFua190eXBlIGVxICctPicgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggICAkbGFzdF9ub25ibGFua190eXBlIGVxICd3JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgJGxhc3Rfbm9uYmxhbmtfdHlwZSBlcSAnaScgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGFzdF9ub25ibGFua190b2tlbiA9ICctPicgLiAkbGFzdF9ub25ibGFua190b2tlbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX3R5cGUgID0gJ2knOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIEZpeCBwYXJ0ICMzIGZvciBnaXQ4MjogcHJvcGFnYXRlIHR5cGUgJ1onIHRob3VnaCBMLVIgcGFpcgogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJGxhc3RfbGFzdF9ub25ibGFua190eXBlIGVxICdaJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkbGFzdF9ub25ibGFua190eXBlIGVxICdSJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX3R5cGUgID0gJGxhc3RfbGFzdF9ub25ibGFua190eXBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfdG9rZW4gPSAkbGFzdF9sYXN0X25vbmJsYW5rX3Rva2VuOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAjIE5vIG90aGVyIHBhdGNoZXMKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc3RvcmUgcHJldmlvdXMgdG9rZW4gdHlwZQogICAgICAgICAgICBpZiAoICRpX3RvayA+PSAwICkgewogICAgICAgICAgICAgICAgJHJvdXRwdXRfdG9rZW5fdHlwZS0+WyRpX3Rva10gICAgPSAkdHlwZTsKICAgICAgICAgICAgICAgICRyb3V0cHV0X2Jsb2NrX3R5cGUtPlskaV90b2tdICAgID0gJGJsb2NrX3R5cGU7CiAgICAgICAgICAgICAgICAkcm91dHB1dF90eXBlX3NlcXVlbmNlLT5bJGlfdG9rXSA9ICR0eXBlX3NlcXVlbmNlOwogICAgICAgICAgICAgICAgJHJvdXRwdXRfaW5kZW50X2ZsYWctPlskaV90b2tdICAgPSAkaW5kZW50X2ZsYWc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZ2V0IHRoZSBuZXh0IHByZS10b2tlbiBhbmQgdHlwZQogICAgICAgICAgICAjICR0b2sgYW5kICR0eXBlIHdpbGwgYmUgbW9kaWZpZWQgdG8gbWFrZSB0aGUgb3V0cHV0IHRva2VuCiAgICAgICAgICAgIG15ICRwcmVfdG9rICA9ICR0b2sgID0gJHJ0b2tlbnMtPlskaV07ICAgICAgIyBnZXQgdGhlIG5leHQgcHJlLXRva2VuCiAgICAgICAgICAgIG15ICRwcmVfdHlwZSA9ICR0eXBlID0gJHJ0b2tlbl90eXBlLT5bJGldOyAgIyBhbmQgdHlwZQoKICAgICAgICAgICAgIyByZS1pbml0aWFsaXplIHZhcmlvdXMgZmxhZ3MgZm9yIHRoZSBuZXh0IG91dHB1dCB0b2tlbgogICAgICAgICAgICAoCgogICAgICAgICAgICAgICAgIyByZW1lbWJlciB0aGUgc3RhcnRpbmcgaW5kZXggb2YgdGhpcyB0b2tlbjsgd2Ugd2lsbCB1cGRhdGUgJGkKICAgICAgICAgICAgICAgICRpX3RvaywKICAgICAgICAgICAgICAgICRibG9ja190eXBlLAogICAgICAgICAgICAgICAgJGNvbnRhaW5lcl90eXBlLAogICAgICAgICAgICAgICAgJHR5cGVfc2VxdWVuY2UsCiAgICAgICAgICAgICAgICAkaW5kZW50X2ZsYWcsCiAgICAgICAgICAgICAgICAkcHJvdG90eXBlLAogICAgICAgICAgICAgICkKICAgICAgICAgICAgICA9ICgKCiAgICAgICAgICAgICAgICAkaSwKICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORywKICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORywKICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORywKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkcsCiAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgdGhpcyBwcmUtdG9rZW4gd2lsbCBzdGFydCBhbiBvdXRwdXQgdG9rZW4KICAgICAgICAgICAgcHVzaCggQHskcm91dHB1dF90b2tlbl9saXN0fSwgJGlfdG9rICk7CgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgVGhlIHRva2VuIHNlYXJjaCBsZWFkcyB0byBvbmUgb2YgNSBtYWluIEVORCBOT0RFUzoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgRU5EIE5PREUgMTogd2hpdGVzcGFjZQogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgbmV4dCBpZiAoICRwcmVfdHlwZSBlcSAnYicgKTsKCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgRU5EIE5PREUgMjogYSBjb21tZW50CiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgIGlmICggJHByZV90eXBlIGVxICcjJyApIHsKCiAgICAgICAgICAgICAgICAjIHB1c2ggbm9uLWluZGVudGluZyBicmFjZSBzdGFjayBMb29rIGZvciBhIHBvc3NpYmxlCiAgICAgICAgICAgICAgICAjIG5vbi1pbmRlbnRpbmcgYnJhY2UuICBUaGlzIGlzIG9ubHkgdXNlZCB0byBnaXZlIGEgaGludCBpbgogICAgICAgICAgICAgICAgIyBjYXNlIHRoZSBmaWxlIGlzIHVuYmFsYW5jZWQuCiAgICAgICAgICAgICAgICAjIEhhcmR3aXJlZCB0byAnIzw8PCcgZm9yIGVmZmljaWVuY3kuICBXZSB3aWxsIG5vdCB1c2UgdGhlCiAgICAgICAgICAgICAgICAjIHJlc3VsdCBsYXRlciBpZiB0aGUgcGF0dGVybiBoYXMgYmVlbiBjaGFuZ2VkICh2ZXJ5IHVudXN1YWwpLgogICAgICAgICAgICAgICAgaWYgKCAgICRsYXN0X25vbmJsYW5rX3Rva2VuIGVxICd7JwogICAgICAgICAgICAgICAgICAgICYmICRsYXN0X25vbmJsYW5rX2Jsb2NrX3R5cGUKICAgICAgICAgICAgICAgICAgICAmJiAkbGFzdF9ub25ibGFua190eXBlX3NlcXVlbmNlCiAgICAgICAgICAgICAgICAgICAgJiYgISRzZWxmLT5bX2luX2Zvcm1hdF9za2lwcGluZ19dCiAgICAgICAgICAgICAgICAgICAgJiYgJHJPcHRzX25vbl9pbmRlbnRpbmdfYnJhY2VzICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBteSAkb2Zmc2V0ID0gJHJ0b2tlbl9tYXAtPlskaV90b2tdOwogICAgICAgICAgICAgICAgICAgIG15ICR0ZXh0ICAgPSBzdWJzdHIoICRpbnB1dF9saW5lLCAkb2Zmc2V0LCA1ICk7CiAgICAgICAgICAgICAgICAgICAgbXkgJGxlbiAgICA9IGxlbmd0aCgkdGV4dCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAgICRsZW4gPT0gNCAmJiAkdGV4dCBlcSAnIzw8PCcKICAgICAgICAgICAgICAgICAgICAgICAgfHwgJGxlbiA+IDQgJiYgJHRleHQgZXEgJyM8PDwgJyApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEB7ICRzZWxmLT5bX3Jub25faW5kZW50aW5nX2JyYWNlX3N0YWNrX10gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAkbGFzdF9ub25ibGFua190eXBlX3NlcXVlbmNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY29udGludWUgZ2F0aGVyaW5nIGlkZW50aWZpZXIgaWYgbmVjZXNzYXJ5CiAgICAgICAgICAgIGlmICgkaWRfc2Nhbl9zdGF0ZSkgewoKICAgICAgICAgICAgICAgIGlmICggJGlzX3N1YnskaWRfc2Nhbl9zdGF0ZX0gfHwgJGlzX3BhY2thZ2V7JGlkX3NjYW5fc3RhdGV9ICkgewogICAgICAgICAgICAgICAgICAgICRzZWxmLT5zY2FuX2lkKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+c2Nhbl9pZGVudGlmaWVyKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCRpZF9zY2FuX3N0YXRlKSB7CgogICAgICAgICAgICAgICAgICAgICMgU3RpbGwgc2Nhbm5pbmcgLi4uCiAgICAgICAgICAgICAgICAgICAgIyBDaGVjayBmb3Igc2lkZSBjb21tZW50IGJldHdlZW4gc3ViIGFuZCBwcm90b3R5cGUgKGMwNjEpCgogICAgICAgICAgICAgICAgICAgICMgZG9uZSBpZiBub3RoaW5nIGxlZnQgdG8gc2NhbiBvbiB0aGlzIGxpbmUKICAgICAgICAgICAgICAgICAgICBsYXN0IGlmICggJGkgPiAkbWF4X3Rva2VuX2luZGV4ICk7CgogICAgICAgICAgICAgICAgICAgIG15ICggJG5leHRfbm9uYmxhbmtfdG9rZW5fdXUsICRpX25leHQgKSA9CiAgICAgICAgICAgICAgICAgICAgICBmaW5kX25leHRfbm9uYmxhbmtfdG9rZW5fb25fdGhpc19saW5lKCAkaSwgJHJ0b2tlbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICRtYXhfdG9rZW5faW5kZXggKTsKCiAgICAgICAgICAgICAgICAgICAgIyBkb25lIGlmIGl0IHdhcyBqdXN0IHNvbWUgdHJhaWxpbmcgc3BhY2UKICAgICAgICAgICAgICAgICAgICBsYXN0IGlmICggJGlfbmV4dCA+ICRtYXhfdG9rZW5faW5kZXggKTsKCiAgICAgICAgICAgICAgICAgICAgIyBzb21ldGhpbmcgcmVtYWlucyBvbiB0aGUgbGluZSAuLi4gbXVzdCBiZSBhIHNpZGUgY29tbWVudAogICAgICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbmV4dCBpZiAoICggJGkgPiAwICkgfHwgJHR5cGUgKTsKCiAgICAgICAgICAgICAgICAjIGRpZG4ndCBmaW5kIGFueSB0b2tlbjsgc3RhcnQgb3ZlcgogICAgICAgICAgICAgICAgJHR5cGUgPSAkcHJlX3R5cGU7CiAgICAgICAgICAgICAgICAkdG9rICA9ICRwcmVfdG9rOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgIyBDb21iaW5lIHByZS10b2tlbnMgaW50byBkaWdyYXBocyBhbmQgdHJpZ3JhcGhzIGlmIHBvc3NpYmxlCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAgICAgIyBTZWUgaWYgd2UgY2FuIG1ha2UgYSBkaWdyYXBoLi4uCiAgICAgICAgICAgICMgVGhlIGZvbGxvd2luZyB0b2tlbnMgYXJlIGV4Y2x1ZGVkIGFuZCBoYW5kbGVkIHNwZWNpYWxseToKICAgICAgICAgICAgIyAnLz0nIGlzIGV4Y2x1ZGVkIGJlY2F1c2UgdGhlIC8gbWlnaHQgc3RhcnQgYSBwYXR0ZXJuLgogICAgICAgICAgICAjICd4PScgaXMgZXhjbHVkZWQgc2luY2UgaXQgbWlnaHQgYmUgJHg9LCB3aXRoICQgb24gcHJldmlvdXMgbGluZQogICAgICAgICAgICAjICcqKicgYW5kICo9IG1pZ2h0IGJlIHR5cGVnbG9icyBvZiBwdW5jdHVhdGlvbiB2YXJpYWJsZXMKICAgICAgICAgICAgIyBJIGhhdmUgYWxsb3dlZCB0b2tlbnMgc3RhcnRpbmcgd2l0aCA8LCBzdWNoIGFzIDw9LAogICAgICAgICAgICAjIGJlY2F1c2UgSSBkb24ndCB0aGluayB0aGVzZSBjb3VsZCBiZSB2YWxpZCBhbmdsZSBvcGVyYXRvcnMuCiAgICAgICAgICAgICMgdGVzdCBmaWxlOiBzdG9ycnM0LnBsCiAgICAgICAgICAgIGlmICggICAkY2FuX3N0YXJ0X2RpZ3JhcGh7JHRva30KICAgICAgICAgICAgICAgICYmICRpIDwgJG1heF90b2tlbl9pbmRleAogICAgICAgICAgICAgICAgJiYgJGlzX2RpZ3JhcGh7ICR0b2sgLiAkcnRva2Vucy0+WyAkaSArIDEgXSB9ICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIG15ICRjb21iaW5lX29rID0gMTsKICAgICAgICAgICAgICAgIG15ICR0ZXN0X3RvayAgID0gJHRvayAuICRydG9rZW5zLT5bICRpICsgMSBdOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgZm9yIHNwZWNpYWwgY2FzZXMgd2hpY2ggY2Fubm90IGJlIGNvbWJpbmVkCgogICAgICAgICAgICAgICAgIyAnLy8nIG11c3QgYmUgZGVmaW5lZF9vciBvcGVyYXRvciBpZiBhbiBvcGVyYXRvciBpcyBleHBlY3RlZC4KICAgICAgICAgICAgICAgICMgVE9ETzogQ29kZSBmb3Igb3RoZXIgYW1iaWd1b3VzIGRpZ3JhcGhzICgvPSwgeD0sICoqLCAqPSkKICAgICAgICAgICAgICAgICMgY291bGQgYmUgbWlncmF0ZWQgaGVyZSBmb3IgY2xhcml0eQoKICAgICAgICAgICAgICAgICMgUGF0Y2ggZm9yIFJUIzEwMjM3MSwgbWlzcGFyc2luZyBhIC8vIGluIHRoZSBmb2xsb3dpbmcgc25pcHBldDoKICAgICAgICAgICAgICAgICMgICAgIHN0YXRlICRiIC8vPSBjY2MoKTsKICAgICAgICAgICAgICAgICMgVGhlIHNvbHV0aW9uIGlzIHRvIGFsd2F5cyBhY2NlcHQgdGhlIGRpZ3JhcGggKG9yIHRyaWdyYXBoKQogICAgICAgICAgICAgICAgIyBhZnRlciB0eXBlICdaJyAocG9zc2libGUgZmlsZSBoYW5kbGUpLiAgVGhlIHJlYXNvbiBpcyB0aGF0CiAgICAgICAgICAgICAgICAjIHN1YiBvcGVyYXRvcl9leHBlY3RlZCBnaXZlcyBURVJNIGV4cGVjdGVkIGhlcmUsIHdoaWNoIGlzCiAgICAgICAgICAgICAgICAjIHdyb25nIGluIHRoaXMgY2FzZS4KICAgICAgICAgICAgICAgIGlmICggJHRlc3RfdG9rIGVxICcvLycgJiYgJGxhc3Rfbm9uYmxhbmtfdHlwZSBuZSAnWicgKSB7CgogICAgICAgICAgICAgICAgICAgICMgbm90ZSB0aGF0IGhlcmUgJHRvayA9ICcvJyBhbmQgdGhlIG5leHQgdG9rIGFuZCB0eXBlIGlzICcvJwogICAgICAgICAgICAgICAgICAgIG15ICRibGFua19hZnRlcl9aOwogICAgICAgICAgICAgICAgICAgICRleHBlY3RpbmcgPQogICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPm9wZXJhdG9yX2V4cGVjdGVkKCAkdG9rLCAnLycsICRibGFua19hZnRlcl9aICk7CgogICAgICAgICAgICAgICAgICAgICMgUGF0Y2hlZCBmb3IgUlQjMTAxNTQ3LCB3YXMgJ3VubGVzcyAoJGV4cGVjdGluZz09T1BFUkFUT1IpJwogICAgICAgICAgICAgICAgICAgICRjb21iaW5lX29rID0gMCBpZiAoICRleHBlY3RpbmcgPT0gVEVSTSApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgUGF0Y2ggZm9yIFJUICMxMTQzNTk6IG1pcy1wYXJzaW5nIG9mICJwcmludCAkeCAqKiAwLjU7CiAgICAgICAgICAgICAgICAjIEFjY2VwdCB0aGUgZGlncmFwaHMgJyoqJyBvbmx5IGFmdGVyIHR5cGUgJ1onCiAgICAgICAgICAgICAgICAjIE90aGVyd2lzZSBwb3N0cG9uZSB0aGUgZGVjaXNpb24uCiAgICAgICAgICAgICAgICBpZiAoICR0ZXN0X3RvayBlcSAnKionICkgewogICAgICAgICAgICAgICAgICAgIGlmICggJGxhc3Rfbm9uYmxhbmtfdHlwZSBuZSAnWicgKSB7ICRjb21iaW5lX29rID0gMCB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKAoKICAgICAgICAgICAgICAgICAgICAjIHN0aWxsIG9rIHRvIGNvbWJpbmU/CiAgICAgICAgICAgICAgICAgICAgJGNvbWJpbmVfb2sKCiAgICAgICAgICAgICAgICAgICAgJiYgKCAkdGVzdF90b2sgbmUgJy89JyApICAgICMgbWlnaHQgYmUgcGF0dGVybgogICAgICAgICAgICAgICAgICAgICYmICggJHRlc3RfdG9rIG5lICd4PScgKSAgICAjIG1pZ2h0IGJlICR4CiAgICAgICAgICAgICAgICAgICAgJiYgKCAkdGVzdF90b2sgbmUgJyo9JyApICAgICMgdHlwZWdsb2I/CgogICAgICAgICAgICAgICAgICAgICMgTW92ZWQgYWJvdmUgYXMgcGFydCBvZiBmaXggZm9yCiAgICAgICAgICAgICAgICAgICAgIyBSVCAjMTE0MzU5OiBNaXNzcGFyc2luZyBvZiAicHJpbnQgJHggKiogMC41OwogICAgICAgICAgICAgICAgICAgICMgJiYgKCAkdGVzdF90b2sgbmUgJyoqJyApICAgICMgdHlwZWdsb2I/CiAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkdG9rID0gJHRlc3RfdG9rOwogICAgICAgICAgICAgICAgICAgICRpKys7CgogICAgICAgICAgICAgICAgICAgICMgTm93IHRyeSB0byBhc3NlbWJsZSB0cmlncmFwaHMuICBOb3RlIHRoYXQgYWxsIHBvc3NpYmxlCiAgICAgICAgICAgICAgICAgICAgIyBwZXJsIHRyaWdyYXBocyBjYW4gYmUgY29uc3RydWN0ZWQgYnkgYXBwZW5kaW5nIGEgY2hhcmFjdGVyCiAgICAgICAgICAgICAgICAgICAgIyB0byBhIGRpZ3JhcGguCiAgICAgICAgICAgICAgICAgICAgJHRlc3RfdG9rID0gJHRvayAuICRydG9rZW5zLT5bICRpICsgMSBdOwoKICAgICAgICAgICAgICAgICAgICBpZiAoICRpc190cmlncmFwaHskdGVzdF90b2t9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkdG9rID0gJHRlc3RfdG9rOwogICAgICAgICAgICAgICAgICAgICAgICAkaSsrOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBUaGUgb25seSBjdXJyZW50IHRldHJhZ3JhcGggaXMgdGhlIGRvdWJsZSBkaWFtb25kIG9wZXJhdG9yCiAgICAgICAgICAgICAgICAgICAgIyBhbmQgaXRzIGZpcnN0IHRocmVlIGNoYXJhY3RlcnMgYXJlIE5PVCBhIHRyaWdyYXBoLCBzbwogICAgICAgICAgICAgICAgICAgICMgd2UgZG8gY2FuIGRvIGEgc3BlY2lhbCB0ZXN0IGZvciBpdAogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICR0ZXN0X3RvayBlcSAnPDw+JyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0ZXN0X3RvayAuPSAkcnRva2Vucy0+WyAkaSArIDIgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJGlzX3RldHJhZ3JhcGh7JHRlc3RfdG9rfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdG9rID0gJHRlc3RfdG9rOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpICs9IDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0eXBlICAgICAgPSAkdG9rOwogICAgICAgICAgICAkbmV4dF90b2sgID0gJHJ0b2tlbnMtPlsgJGkgKyAxIF07CiAgICAgICAgICAgICRuZXh0X3R5cGUgPSAkcnRva2VuX3R5cGUtPlsgJGkgKyAxIF07CgogICAgICAgICAgICAjIGV4cGVjdGluZyBhbiBvcGVyYXRvciBoZXJlPyBmaXJzdCB0cnkgdGFibGUgbG9va3VwLCB0aGVuIGZ1bmN0aW9uCiAgICAgICAgICAgICRleHBlY3RpbmcgPSAkb3BfZXhwZWN0ZWRfdGFibGV7JGxhc3Rfbm9uYmxhbmtfdHlwZX07CiAgICAgICAgICAgIGlmICggIWRlZmluZWQoJGV4cGVjdGluZykgKSB7CiAgICAgICAgICAgICAgICBteSAkYmxhbmtfYWZ0ZXJfWiA9ICRsYXN0X25vbmJsYW5rX3R5cGUgZXEgJ1onCiAgICAgICAgICAgICAgICAgICYmICggJGkgPT0gMCB8fCAkcnRva2VuX3R5cGUtPlsgJGkgLSAxIF0gZXEgJ2InICk7CiAgICAgICAgICAgICAgICAkZXhwZWN0aW5nID0KICAgICAgICAgICAgICAgICAgJHNlbGYtPm9wZXJhdG9yX2V4cGVjdGVkKCAkdG9rLCAkbmV4dF90eXBlLCAkYmxhbmtfYWZ0ZXJfWiApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBERUJVR19UT0tFTklaRSAmJiBkbyB7CiAgICAgICAgICAgICAgICBsb2NhbCAkTElTVF9TRVBBUkFUT1IgPSAnKSgnOwogICAgICAgICAgICAgICAgbXkgQGRlYnVnX2xpc3QgPSAoCiAgICAgICAgICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfdG9rZW4sICAgICAgICAgJHRvaywKICAgICAgICAgICAgICAgICAgICAkbmV4dF90b2ssICAgICAgICAgICAgICAgICAgICAkYnJhY2VfZGVwdGgsCiAgICAgICAgICAgICAgICAgICAgJHJicmFjZV90eXBlLT5bJGJyYWNlX2RlcHRoXSwgJHBhcmVuX2RlcHRoLAogICAgICAgICAgICAgICAgICAgICRycGFyZW5fdHlwZS0+WyRwYXJlbl9kZXB0aF0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgcHJpbnQgeypTVERPVVR9ICJUT0tFTklaRTooQGRlYnVnX2xpc3QpXG4iOwogICAgICAgICAgICB9OwoKICAgICAgICAgICAgIyBUaGUgbmV4dCB0b2tlbiBpcyAnJHRvaycuCiAgICAgICAgICAgICMgTm93IHdlIGhhdmUgdG8gZGVmaW5lIGl0cyAnJHR5cGUnCgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgRU5EIE5PREUgMzogYSBiYXJlIHdvcmQKICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICBpZiAoICRwcmVfdHlwZSBlcSAndycgKSB7CiAgICAgICAgICAgICAgICBteSAkaXNfbGFzdCA9ICRzZWxmLT5kb19CQVJFV09SRCgpOwogICAgICAgICAgICAgICAgbGFzdCBpZiAoJGlzX2xhc3QpOwogICAgICAgICAgICAgICAgbmV4dDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBUdXJuIG9mZiBhdHRyaWJ1dGUgbGlzdCBvbiBmaXJzdCBub24tYmxhbmssIG5vbi1iYXJld29yZCwKICAgICAgICAgICAgIyBhbmQgbm9uLWNvbW1lbnQgKGFkZGVkIHRvIGZpeCBjMDM4KQogICAgICAgICAgICAkc2VsZi0+W19pbl9hdHRyaWJ1dGVfbGlzdF9dID0gMDsKCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgRU5EIE5PREUgNDogYSBzdHJpbmcgb2YgZGlnaXRzCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgIGlmICggJHByZV90eXBlIGVxICdkJyApIHsKICAgICAgICAgICAgICAgICRzZWxmLT5kb19ESUdJVFMoKTsKICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgIyBFTkQgTk9ERSA1OiBldmVyeXRoaW5nIGVsc2UgKHB1bmN0dWF0aW9uKQogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgIG15ICRjb2RlID0gJHRva2VuaXphdGlvbl9jb2RlLT57JHRva307CiAgICAgICAgICAgIGlmICgkY29kZSkgewogICAgICAgICAgICAgICAgJGNvZGUtPigkc2VsZik7CiAgICAgICAgICAgICAgICByZWRvIGlmICRpbl9xdW90ZTsKICAgICAgICAgICAgfQogICAgICAgIH0gICAgIyMgRW5kIG1haW4gdG9rZW5pemVyIGxvb3AKCiAgICAgICAgIyBTdG9yZSB0aGUgZmluYWwgdG9rZW4KICAgICAgICBpZiAoICRpX3RvayA+PSAwICkgewogICAgICAgICAgICAkcm91dHB1dF90b2tlbl90eXBlLT5bJGlfdG9rXSAgICA9ICR0eXBlOwogICAgICAgICAgICAkcm91dHB1dF9ibG9ja190eXBlLT5bJGlfdG9rXSAgICA9ICRibG9ja190eXBlOwogICAgICAgICAgICAkcm91dHB1dF90eXBlX3NlcXVlbmNlLT5bJGlfdG9rXSA9ICR0eXBlX3NlcXVlbmNlOwogICAgICAgICAgICAkcm91dHB1dF9pbmRlbnRfZmxhZy0+WyRpX3Rva10gICA9ICRpbmRlbnRfZmxhZzsKICAgICAgICB9CgogICAgICAgICMgUmVtZW1iZXIgbGFzdCBub25ibGFuayB2YWx1ZXMKICAgICAgICBpZiAoICR0eXBlIG5lICdiJyAmJiAkdHlwZSBuZSAnIycgKSB7CgogICAgICAgICAgICAkbGFzdF9sYXN0X25vbmJsYW5rX3Rva2VuID0gJGxhc3Rfbm9uYmxhbmtfdG9rZW47CiAgICAgICAgICAgICRsYXN0X2xhc3Rfbm9uYmxhbmtfdHlwZSAgPSAkbGFzdF9ub25ibGFua190eXBlOwoKICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfcHJvdG90eXBlICAgICAgPSAkcHJvdG90eXBlOwogICAgICAgICAgICAkbGFzdF9ub25ibGFua19ibG9ja190eXBlICAgICA9ICRibG9ja190eXBlOwogICAgICAgICAgICAkbGFzdF9ub25ibGFua19jb250YWluZXJfdHlwZSA9ICRjb250YWluZXJfdHlwZTsKICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfdHlwZV9zZXF1ZW5jZSAgPSAkdHlwZV9zZXF1ZW5jZTsKICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfdG9rZW4gICAgICAgICAgPSAkdG9rOwogICAgICAgICAgICAkbGFzdF9ub25ibGFua190eXBlICAgICAgICAgICA9ICR0eXBlOwogICAgICAgIH0KCiAgICAgICAgIyByZXNldCBpbmRlbnRhdGlvbiBsZXZlbCBpZiBuZWNlc3NhcnkgYXQgYSBzdWIgb3IgcGFja2FnZQogICAgICAgICMgaW4gYW4gYXR0ZW1wdCB0byByZWNvdmVyIGZyb20gYSBuZXN0aW5nIGVycm9yCiAgICAgICAgaWYgKCAkbGV2ZWxfaW5fdG9rZW5pemVyIDwgMCApIHsKICAgICAgICAgICAgaWYgKCAkaW5wdXRfbGluZSA9fiAvXlxzKihzdWJ8cGFja2FnZSlccysoXHcrKS8gKSB7CiAgICAgICAgICAgICAgICByZXNldF9pbmRlbnRhdGlvbl9sZXZlbCgwKTsKICAgICAgICAgICAgICAgICRzZWxmLT5icmFjZV93YXJuaW5nKCJyZXNldHRpbmcgbGV2ZWwgdG8gMCBhdCAkMSAkMlxuIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRzZWxmLT5bX2luX3F1b3RlX10gPSAkaW5fcXVvdGU7CiAgICAgICAgJHNlbGYtPltfcXVvdGVfdGFyZ2V0X10gPQogICAgICAgICAgICAkaW5fcXVvdGUKICAgICAgICAgID8gJG1hdGNoaW5nX2VuZF90b2tlbnskcXVvdGVfY2hhcmFjdGVyfQogICAgICAgICAgICAgID8gJG1hdGNoaW5nX2VuZF90b2tlbnskcXVvdGVfY2hhcmFjdGVyfQogICAgICAgICAgICAgIDogJHF1b3RlX2NoYXJhY3RlcgogICAgICAgICAgOiBFTVBUWV9TVFJJTkc7CiAgICAgICAgJHNlbGYtPltfcmhlcmVfdGFyZ2V0X2xpc3RfXSA9ICRyaGVyZV90YXJnZXRfbGlzdDsKCiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIHRva2VuaXplcl9tYWluX2xvb3AKCiAgICBzdWIgdG9rZW5pemVyX3dyYXB1cF9saW5lIHsKICAgICAgICBteSAoICRzZWxmLCAkbGluZV9vZl90b2tlbnMgKSA9IEBfOwoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBQYWNrYWdlIGEgbGluZSBvZiB0b2tlbnMgZm9yIHNoaXBwaW5nIGJhY2sgdG8gdGhlIGNhbGxlcgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgIyBBcnJheXMgdG8gaG9sZCB0b2tlbiB2YWx1ZXMgZm9yIHRoaXMgbGluZToKICAgICAgICBteSAoCiAgICAgICAgICAgIEBvdXRwdXRfbGV2ZWxzLCAgICAgQG91dHB1dF9ibG9ja190eXBlLCBAb3V0cHV0X3R5cGVfc2VxdWVuY2UsCiAgICAgICAgICAgIEBvdXRwdXRfdG9rZW5fdHlwZSwgQG91dHB1dF90b2tlbnMKICAgICAgICApOwoKICAgICAgICAkbGluZV9vZl90b2tlbnMtPntfbmVzdGluZ190b2tlbnNfMH0gPSAkbmVzdGluZ190b2tlbl9zdHJpbmc7CgogICAgICAgICMgUmVtZW1iZXIgc3RhcnRpbmcgbmVzdGluZyBibG9jayBzdHJpbmcKICAgICAgICBteSAkbmVzdGluZ19ibG9ja19zdHJpbmdfMCA9ICRuZXN0aW5nX2Jsb2NrX3N0cmluZzsKCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBMb29wIG92ZXIgdG9rZW5zCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyAkaSBpcyB0aGUgaW5kZXggb2YgdGhlIHByZXRva2VuIHdoaWNoIHN0YXJ0cyB0aGlzIGZ1bGwgdG9rZW4KICAgICAgICBmb3JlYWNoIG15ICRpaSAoIEB7JHJvdXRwdXRfdG9rZW5fbGlzdH0gKSB7CgogICAgICAgICAgICBteSAkdHlwZV9pID0gJHJvdXRwdXRfdG9rZW5fdHlwZS0+WyRpaV07CgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAjIFNlY3Rpb24gMS4gSGFuZGxlIGEgbm9uLXNlcXVlbmNlZCB0b2tlbgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICBpZiAoICEkcm91dHB1dF90eXBlX3NlcXVlbmNlLT5bJGlpXSApIHsKCiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgIyBTZWN0aW9uIDEuMS4gdHlwZXMgJzsnIGFuZCAndCcKICAgICAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAjIC0gb3V0cHV0IGFub255bW91cyAnc3ViJyBhcyBrZXl3b3JkICh0eXBlICdrJykKICAgICAgICAgICAgICAgICMgLSBvdXRwdXQgX19FTkRfXywgX19EQVRBX18sIGFuZCBmb3JtYXQgYXMgdHlwZSAnaycgaW5zdGVhZAogICAgICAgICAgICAgICAgIyAgIG9mICc7JyB0byBtYWtlIGh0bWwgY29sb3JzIGNvcnJlY3QsIGV0Yy4KICAgICAgICAgICAgICAgIGlmICggJGlzX3NlbWljb2xvbl9vcl90eyR0eXBlX2l9ICkgewogICAgICAgICAgICAgICAgICAgIG15ICR0b2tfaSA9ICRydG9rZW5zLT5bJGlpXTsKICAgICAgICAgICAgICAgICAgICBpZiAoICRpc19FTkRfREFUQV9mb3JtYXRfc3VieyR0b2tfaX0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlX2kgPSAnayc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAjIFNlY3Rpb24gMS4yLiBDaGVjayBmb3IgYW4gaW52YWxpZCB0b2tlbiB0eXBlLgogICAgICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICMgVGhpcyBjYW4gaGFwcGVuIGJ5IHJ1bm5pbmcgcGVybHRpZHkgb24gbm9uLXNjcmlwdHMgYWx0aG91Z2gKICAgICAgICAgICAgICAgICMgaXQgY291bGQgYWxzbyBiZSBidWcgaW50cm9kdWNlZCBieSBwcm9ncmFtbWluZyBjaGFuZ2UuICBQZXJsCiAgICAgICAgICAgICAgICAjIHNpbGVudGx5IGFjY2VwdHMgYSAwMzIgKF5aKSBhbmQgdGFrZXMgaXQgYXMgdGhlIGVuZAogICAgICAgICAgICAgICAgZWxzaWYgKCAhJGlzX3ZhbGlkX3Rva2VuX3R5cGV7JHR5cGVfaX0gKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJHZhbCA9IG9yZCgkdHlwZV9pKTsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+d2FybmluZygKInVuZXhwZWN0ZWQgY2hhcmFjdGVyIGRlY2ltYWwgJHZhbCAoJHR5cGVfaSkgaW4gc2NyaXB0XG4iCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+W19pbl9lcnJvcl9dID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICMgdmFsaWQgdG9rZW4gdHlwZSBvdGhlciB0aGFuIDsgYW5kIHQKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgIyBTZWN0aW9uIDEuMy4gU3RvcmUgdmFsdWVzIGZvciBhIG5vbi1zZXF1ZW5jZWQgdG9rZW4KICAgICAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICBwdXNoKCBAb3V0cHV0X2xldmVscywgICAgICAgICRsZXZlbF9pbl90b2tlbml6ZXIgKTsKICAgICAgICAgICAgICAgIHB1c2goIEBvdXRwdXRfYmxvY2tfdHlwZSwgICAgRU1QVFlfU1RSSU5HICk7CiAgICAgICAgICAgICAgICBwdXNoKCBAb3V0cHV0X3R5cGVfc2VxdWVuY2UsIEVNUFRZX1NUUklORyApOwogICAgICAgICAgICAgICAgcHVzaCggQG91dHB1dF90b2tlbl90eXBlLCAgICAkdHlwZV9pICk7CgogICAgICAgICAgICB9CgogICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICMgU2VjdGlvbiAyLiBIYW5kbGUgYSBzZXF1ZW5jZWQgdG9rZW4KICAgICAgICAgICAgIyAgICBPbmUgb2YgeyBbICggPyA6ICkgXSB9CiAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyAkbGV2ZWxfaSBpcyB0aGUgbGV2ZWwgd2Ugd2lsbCBzdG9yZS4gIExldmVscyBvZiBicmFjZXMgYXJlCiAgICAgICAgICAgICAgICAjIHNldCBzbyB0aGF0IHRoZSBsZWFkaW5nIGJyYWNlcyBoYXZlIGEgSElHSEVSIGxldmVsIHRoYW4gdGhlaXIKICAgICAgICAgICAgICAgICMgQ09OVEVOVFMsIHdoaWNoIGlzIGNvbnZlbmllbnQgZm9yIGluZGVudGF0aW9uLgogICAgICAgICAgICAgICAgbXkgJGxldmVsX2kgPSAkbGV2ZWxfaW5fdG9rZW5pemVyOwoKICAgICAgICAgICAgICAgICMgJHRva19pIGlzIHRoZSBQUkUtdG9rZW4uICBJdCBvbmx5IGVxdWFscyB0aGUgdG9rZW4gZm9yIHN5bWJvbHMKICAgICAgICAgICAgICAgIG15ICR0b2tfaSA9ICRydG9rZW5zLT5bJGlpXTsKCiAgICAgICAgICAgICAgICAjICRyb3V0cHV0X2luZGVudF9mbGFnLT5bJGlpXSBpbmRpY2F0ZXMgdGhhdCB3ZSBuZWVkIGEgY2hhbmdlCiAgICAgICAgICAgICAgICAjIGluIGxldmVsIGF0IGEgbmVzdGVkIHRlcm5hcnksIGFzIGZvbGxvd3MKICAgICAgICAgICAgICAgICMgICAgIDEgPT4gYXQgYSBuZXN0ZWQgdGVybmFyeSA/CiAgICAgICAgICAgICAgICAjICAgIC0xID0+IGF0IGEgbmVzdGVkIHRlcm5hcnkgOgogICAgICAgICAgICAgICAgIyAgICAgMCA9PiBvdGhlcndpc2UKCiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICMgU2VjdGlvbiAyLjEgSGFuZGxlIGEgbGV2ZWwtaW5jcmVhc2luZyB0b2tlbgogICAgICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICBpZiAoICRpc19vcGVuaW5nX29yX3Rlcm5hcnlfdHlwZXskdHlwZV9pfSApIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkdHlwZV9pIGVxICc/JyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJHJvdXRwdXRfaW5kZW50X2ZsYWctPlskaWldID4gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsZXZlbF9pbl90b2tlbml6ZXIrKzsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGJyZWFrIEJFRk9SRSAnPycgaW4gYSBuZXN0ZWQgdGVybmFyeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxldmVsX2kgPSAkbGV2ZWxfaW5fdG9rZW5pemVyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5lc3RpbmdfYmxvY2tfc3RyaW5nIC49ICIkbmVzdGluZ19ibG9ja19mbGFnIjsKCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICAgICAkbmVzdGluZ190b2tlbl9zdHJpbmcgLj0gJHRva19pOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkdHlwZV9pIGVxICd7JyB8fCAkdHlwZV9pIGVxICdMJyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGV2ZWxfaW5fdG9rZW5pemVyKys7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkcm91dHB1dF9ibG9ja190eXBlLT5bJGlpXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbmVzdGluZ19ibG9ja19mbGFnID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbmVzdGluZ19ibG9ja19zdHJpbmcgLj0gJzEnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5lc3RpbmdfYmxvY2tfZmxhZyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5lc3RpbmdfYmxvY2tfc3RyaW5nIC49ICcwJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAjIFNlY3Rpb24gMi4yLiBIYW5kbGUgYSBsZXZlbC1kZWNyZWFzaW5nIHRva2VuCiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICBlbHNpZiAoICRpc19jbG9zaW5nX29yX3Rlcm5hcnlfdHlwZXskdHlwZV9pfSApIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkdHlwZV9pIG5lICc6JyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGNoYXIgPSBjaG9wICRuZXN0aW5nX3Rva2VuX3N0cmluZzsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkY2hhciBuZSAkbWF0Y2hpbmdfc3RhcnRfdG9rZW57JHRva19pfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXN0aW5nX3Rva2VuX3N0cmluZyAuPSAkY2hhciAuICR0b2tfaTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAkdHlwZV9pIGVxICd9JwogICAgICAgICAgICAgICAgICAgICAgICB8fCAkdHlwZV9pIGVxICdSJwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBvbmx5IHRoZSBzZWNvbmQgYW5kIGhpZ2hlciA/IDogaGF2ZSBsZXZlbHMKICAgICAgICAgICAgICAgICAgICAgICAgfHwgJHR5cGVfaSBlcSAnOicgJiYgJHJvdXRwdXRfaW5kZW50X2ZsYWctPlskaWldIDwgMAogICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICRsZXZlbF9pID0gLS0kbGV2ZWxfaW5fdG9rZW5pemVyOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkbGV2ZWxfaW5fdG9rZW5pemVyIDwgMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISRzZWxmLT5bX3Nhd19uZWdhdGl2ZV9pbmRlbnRhdGlvbl9dICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5bX3Nhd19uZWdhdGl2ZV9pbmRlbnRhdGlvbl9dID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+d2FybmluZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0aW5nIG5lZ2F0aXZlIGluZGVudGF0aW9uXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIyByZXN0b3JlIHByZXZpb3VzIGxldmVsIHZhbHVlcwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGxlbmd0aCgkbmVzdGluZ19ibG9ja19zdHJpbmcpID4gMSApCiAgICAgICAgICAgICAgICAgICAgICAgIHsgICAgIyB0cnVlIGZvciB2YWxpZCBzY3JpcHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob3AgJG5lc3RpbmdfYmxvY2tfc3RyaW5nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5lc3RpbmdfYmxvY2tfZmxhZyA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnN0ciggJG5lc3RpbmdfYmxvY2tfc3RyaW5nLCAtMSApIGVxICcxJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAjIFNlY3Rpb24gMi4zLiBVbmV4cGVjdGVkIHNlcXVlbmNlZCB0b2tlbiB0eXBlIC0gZXJyb3IKICAgICAgICAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICMgVGhlIHRva2VuaXplciBzaG91bGQgb25seSBiZSBhc3NpZ25pbmcgc2VxdWVuY2UgbnVtYmVycwogICAgICAgICAgICAgICAgICAgICMgdG8gdHlwZXMgeyBbICggPyApIF0gfSA6CiAgICAgICAgICAgICAgICAgICAgREVWRUxfTU9ERSAmJiAkc2VsZi0+RmF1bHQoPDxFT00pOwp1bmV4cGVjdGVkIHNlcXVlbmNlIG51bWJlciBvbiB0b2tlbiB0eXBlICR0eXBlX2kgd2l0aCBwcmUtdG9rPSR0b2tfaQpFT00KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAjIFNlY3Rpb24gMi40LiBTdG9yZSB2YWx1ZXMgZm9yIGEgc2VxdWVuY2VkIHRva2VuCiAgICAgICAgICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICAgICAgICAgIyBUaGUgc3RhcnRpbmcgbmVzdGluZyBibG9jayBzdHJpbmcsIHdoaWNoIGlzIHVzZWQgaW4gYW55IC5MT0cKICAgICAgICAgICAgICAgICMgb3V0cHV0LCBzaG91bGQgaW5jbHVkZSB0aGUgZmlyc3QgdG9rZW4gb2YgdGhlIGxpbmUKICAgICAgICAgICAgICAgIGlmICggIUBvdXRwdXRfbGV2ZWxzICkgewogICAgICAgICAgICAgICAgICAgICRuZXN0aW5nX2Jsb2NrX3N0cmluZ18wID0gJG5lc3RpbmdfYmxvY2tfc3RyaW5nOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgU3RvcmUgdmFsdWVzIGZvciBhIHNlcXVlbmNlZCB0b2tlbgogICAgICAgICAgICAgICAgcHVzaCggQG91dHB1dF9sZXZlbHMsICAgICAgICAkbGV2ZWxfaSApOwogICAgICAgICAgICAgICAgcHVzaCggQG91dHB1dF9ibG9ja190eXBlLCAgICAkcm91dHB1dF9ibG9ja190eXBlLT5bJGlpXSApOwogICAgICAgICAgICAgICAgcHVzaCggQG91dHB1dF90eXBlX3NlcXVlbmNlLCAkcm91dHB1dF90eXBlX3NlcXVlbmNlLT5bJGlpXSApOwogICAgICAgICAgICAgICAgcHVzaCggQG91dHB1dF90b2tlbl90eXBlLCAgICAkdHlwZV9pICk7CgogICAgICAgICAgICB9CiAgICAgICAgfSAgICAjIyBFbmQgbG9vcCB0byBvdmVyIHRva2VucwoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBQb3N0LWxvb3Agb3BlcmF0aW9ucwogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgJGxpbmVfb2ZfdG9rZW5zLT57X25lc3RpbmdfYmxvY2tzXzB9ID0gJG5lc3RpbmdfYmxvY2tfc3RyaW5nXzA7CgogICAgICAgICMgRm9ybSBhbmQgc3RvcmUgdGhlIHRva2VucwogICAgICAgIGlmIChAb3V0cHV0X2xldmVscykgewoKICAgICAgICAgICAgbXkgJGltICAgICA9IHNoaWZ0IEB7JHJvdXRwdXRfdG9rZW5fbGlzdH07CiAgICAgICAgICAgIG15ICRvZmZzZXQgPSAkcnRva2VuX21hcC0+WyRpbV07CiAgICAgICAgICAgIGZvcmVhY2ggbXkgJGlpICggQHskcm91dHB1dF90b2tlbl9saXN0fSApIHsKICAgICAgICAgICAgICAgIG15ICRudW1jID0gJHJ0b2tlbl9tYXAtPlskaWldIC0gJG9mZnNldDsKICAgICAgICAgICAgICAgIHB1c2goIEBvdXRwdXRfdG9rZW5zLCBzdWJzdHIoICRpbnB1dF9saW5lLCAkb2Zmc2V0LCAkbnVtYyApICk7CiAgICAgICAgICAgICAgICAkb2Zmc2V0ICs9ICRudW1jOwoKICAgICAgICAgICAgICAgICMgcHJvZ3JhbW1pbmcgbm90ZTogaXQgc2VlbXMgbW9zdCBlZmZpY2llbnQgdG8gJ25leHQnIG91dCBvZgogICAgICAgICAgICAgICAgIyBhIGNyaXRpY2FsIGxvb3AgbGlrZSB0aGlzIGFzIGVhcmx5IGFzIHBvc3NpYmxlLiBTbyBpbnN0ZWFkCiAgICAgICAgICAgICAgICAjIG9mICdpZiAoIERFVkVMX01PREUgJiYgJG51bWMgPCAwICknIHdlIHdyaXRlOgogICAgICAgICAgICAgICAgbmV4dCB1bmxlc3MgREVWRUxfTU9ERTsKICAgICAgICAgICAgICAgIG5leHQgaWYgKCAkbnVtYyA+IDAgKTsKCiAgICAgICAgICAgICAgICAjIFNob3VsZCBub3QgaGFwcGVuIHVubGVzcyBAeyRydG9rZW5fbWFwfSBpcyBjb3JydXB0ZWQKICAgICAgICAgICAgICAgICRzZWxmLT5GYXVsdCgKICAgICAgICAgICAgICAgICAgICAibnVtYmVyIG9mIGNoYXJhY3RlcnMgaXMgJyRudW1jJyBidXQgc2hvdWxkIGJlID4wXG4iKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBGb3JtIGFuZCBzdG9yZSB0aGUgZmluYWwgdG9rZW4gb2YgdGhpcyBsaW5lCiAgICAgICAgICAgIG15ICRudW1jID0gbGVuZ3RoKCRpbnB1dF9saW5lKSAtICRvZmZzZXQ7CiAgICAgICAgICAgIHB1c2goIEBvdXRwdXRfdG9rZW5zLCBzdWJzdHIoICRpbnB1dF9saW5lLCAkb2Zmc2V0LCAkbnVtYyApICk7CgogICAgICAgICAgICBpZiAoREVWRUxfTU9ERSkgewogICAgICAgICAgICAgICAgaWYgKCAkbnVtYyA8PSAwICkgewoKICAgICAgICAgICAgICAgICAgICAjIGNoZWNrICckcnRva2VuX21hcCcgYW5kICckcm91dHB1dF90b2tlbl9saXN0JwogICAgICAgICAgICAgICAgICAgICRzZWxmLT5GYXVsdCgKICAgICAgICAgICAgICAgICAgICAgICAgIk51bWJlciBvZiBDaGFyYWN0ZXJzIGlzICckbnVtYycgYnV0IHNob3VsZCBiZSA+MFxuIik7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgd2UgZGlkbid0IGdhaW4gb3IgbG9zZSBhbnkgY2hhcmFjdGVycwogICAgICAgICAgICAgICAgbXkgJHRlc3RfbGluZSA9IGpvaW4gRU1QVFlfU1RSSU5HLCBAb3V0cHV0X3Rva2VuczsKICAgICAgICAgICAgICAgIGlmICggJHRlc3RfbGluZSBuZSAkaW5wdXRfbGluZSApIHsKICAgICAgICAgICAgICAgICAgICBteSAkbGVuX2lucHV0ID0gbGVuZ3RoKCRpbnB1dF9saW5lKTsKICAgICAgICAgICAgICAgICAgICBteSAkbGVuX3Rlc3QgID0gbGVuZ3RoKCR0ZXN0X2xpbmUpOwoKICAgICAgICAgICAgICAgICAgICAjIGNoZWNrICckcnRva2VuX21hcCcgYW5kICckcm91dHB1dF90b2tlbl9saXN0JwogICAgICAgICAgICAgICAgICAgICRzZWxmLT5GYXVsdCg8PEVPTSk7ClJlY29uc3RydXRlZCBsaW5lIGRpZmVycyBmcm9tIGlucHV0OyBpbnB1dF9sZW5ndGg9JGxlbl9pbnB1dCB0ZXN0X2xlbmd0aD0kbGVuX3Rlc3QKaW5wdXQ6JyRpbnB1dF9saW5lJwp0ZXN0IDonJHRlc3RfbGluZScKRU9NCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgV3JhcCB1cCB0aGlzIGxpbmUgb2YgdG9rZW5zIGZvciBzaGlwcGluZyB0byB0aGUgRm9ybWF0dGVyCiAgICAgICAgJGxpbmVfb2ZfdG9rZW5zLT57X3J0b2tlbl90eXBlfSAgICA9IFxAb3V0cHV0X3Rva2VuX3R5cGU7CiAgICAgICAgJGxpbmVfb2ZfdG9rZW5zLT57X3J0b2tlbnN9ICAgICAgICA9IFxAb3V0cHV0X3Rva2VuczsKICAgICAgICAkbGluZV9vZl90b2tlbnMtPntfcmJsb2NrX3R5cGV9ICAgID0gXEBvdXRwdXRfYmxvY2tfdHlwZTsKICAgICAgICAkbGluZV9vZl90b2tlbnMtPntfcnR5cGVfc2VxdWVuY2V9ID0gXEBvdXRwdXRfdHlwZV9zZXF1ZW5jZTsKICAgICAgICAkbGluZV9vZl90b2tlbnMtPntfcmxldmVsc30gICAgICAgID0gXEBvdXRwdXRfbGV2ZWxzOwoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIENvbXBhcmUgaW5wdXQgaW5kZW50YXRpb24gd2l0aCBjb21wdXRlZCBsZXZlbHMgYXQgY2xvc2luZyBicmFjZXMKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIFRoaXMgbWF5IHByb3ZpZGUgYSB1c2VmdWwgaGludCBmb3IgZXJyb3IgbG9jYXRpb24gaWYgdGhlIGZpbGUKICAgICAgICAjIGlzIG5vdCBiYWxhbmNlZCBpbiBicmFjZXMuICBDbG9zaW5nIGJyYWNlcyBhcmUgdXNlZCBiZWNhdXNlIHRoZXkKICAgICAgICAjIGhhdmUgYSB3ZWxsLWRlZmluZWQgaW5kZW50YXRpb24gYW5kIGNhbiBiZSBwcm9jZXNzZWQgZWZmaWNpZW50bHkuCiAgICAgICAgaWYgKCAkb3V0cHV0X3Rva2Vuc1swXSBlcSAnfScgKSB7CgogICAgICAgICAgICBteSAkYmxrID0gJG91dHB1dF9ibG9ja190eXBlWzBdOwogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgIyBidWlsdGluIGJsb2NrIHR5cGVzIHdpdGhvdXQgY29udGludWF0aW9uIGluZGVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgJGlzX3plcm9fY29udGludWF0aW9uX2Jsb2NrX3R5cGV7JGJsa30KCiAgICAgICAgICAgICAgICAgICAgIyBvciBhIG5hbWVkIHN1YiwgYnV0IHNraXAgc3ViIGFsaWFzZXMgZm9yIGVmZmljaWVuY3ksCiAgICAgICAgICAgICAgICAgICAgIyBzaW5jZSB0aGlzIGlzIGp1c3QgZm9yIGRpYWdub3N0aWMgaW5mbwogICAgICAgICAgICAgICAgICAgIHx8IHN1YnN0ciggJGJsaywgMCwgNCApIGVxICdzdWIgJwogICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgICAgICMgYW5kIHdlIGFyZSBub3QgaW4gZm9ybWF0IHNraXBwaW5nCiAgICAgICAgICAgICAgICAmJiAhJHNlbGYtPltfaW5fZm9ybWF0X3NraXBwaW5nX10KICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIHN1YnRyYWN0IDEgc3BhY2UgZm9yIG5ld2xpbmUgaW4gdW50cmltbWVkIGxpbmUKICAgICAgICAgICAgICAgIG15ICR1bnRyaW1tZWRfaW5wdXRfbGluZSA9ICRsaW5lX29mX3Rva2Vucy0+e19saW5lX3RleHR9OwogICAgICAgICAgICAgICAgbXkgJHNwYWNlX2NvdW50ID0KICAgICAgICAgICAgICAgICAgbGVuZ3RoKCR1bnRyaW1tZWRfaW5wdXRfbGluZSkgLSBsZW5ndGgoJGlucHV0X2xpbmUpIC0gMTsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGZvciB0YWJzCiAgICAgICAgICAgICAgICBpZiAoICRzcGFjZV9jb3VudAogICAgICAgICAgICAgICAgICAgICYmIG9yZCggc3Vic3RyKCAkdW50cmltbWVkX2lucHV0X2xpbmUsIDAsIDEgKSApID09IE9SRF9UQUIgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmICggJHVudHJpbW1lZF9pbnB1dF9saW5lID1+IC9eKFx0Kyk/KFxzKyk/LyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQxKSB7ICRzcGFjZV9jb3VudCArPSBsZW5ndGgoJDEpICogJHRhYnNpemUgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJDIpIHsgJHNwYWNlX2NvdW50ICs9IGxlbmd0aCgkMikgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjICckZ3Vlc3MnID0gdGhlIGxldmVsIGFjY29yZGluZyB0byBpbmRlbnRhdGlvbgogICAgICAgICAgICAgICAgbXkgJGd1ZXNzID0gaW50KCAkc3BhY2VfY291bnQgLyAkck9wdHNfaW5kZW50X2NvbHVtbnMgKTsKCiAgICAgICAgICAgICAgICAjIHN1YnRyYWN0IDEgbGV2ZWwgZnJvbSBndWVzcyBmb3IgLS1pbmRlbnQtY2xvc2luZy1icmFjZQogICAgICAgICAgICAgICAgJGd1ZXNzIC09IDEgaWYgKCRyT3B0c19pbmRlbnRfY2xvc2luZ19icmFjZSk7CgogICAgICAgICAgICAgICAgIyBzdWJ0cmFjdCAxIGZyb20gJGxldmVsIGZvciBlYWNoIG5vbi1pbmRlbnRpbmcgYnJhY2UgbGV2ZWwKICAgICAgICAgICAgICAgIG15ICRhZGp1c3QgPSBAeyAkc2VsZi0+W19ybm9uX2luZGVudGluZ19icmFjZV9zdGFja19dIH07CgogICAgICAgICAgICAgICAgbXkgJGxldmVsID0gJG91dHB1dF9sZXZlbHNbMF07CgogICAgICAgICAgICAgICAgIyBmaW5kIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gZXhwZWN0ZWQgYW5kIGluZGVudGF0aW9uIGd1ZXNzCiAgICAgICAgICAgICAgICBteSAkbGV2ZWxfZGlmZiA9ICRsZXZlbCAtICRhZGp1c3QgLSAkZ3Vlc3M7CgogICAgICAgICAgICAgICAgbXkgJHJoYXNoID0gJHNlbGYtPltfcmNsb3NpbmdfYnJhY2VfaW5kZW50YXRpb25faGFzaF9dOwoKICAgICAgICAgICAgICAgICMgcmVzdWx0cyBhcmUgb25seSB2YWxpZCBpZiB3ZSBndWVzcyBjb3JyZWN0bHkgYXQgdGhlCiAgICAgICAgICAgICAgICAjIGZpcnN0IHNwYWNlZCBicmFjZQogICAgICAgICAgICAgICAgaWYgKCAkc3BhY2VfY291bnQgJiYgIWRlZmluZWQoICRyaGFzaC0+e3ZhbGlkfSApICkgewogICAgICAgICAgICAgICAgICAgICRyaGFzaC0+e3ZhbGlkfSA9ICEkbGV2ZWxfZGlmZjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHNhdmUgdGhlIHJlc3VsdAogICAgICAgICAgICAgICAgbXkgJHJoaXN0b3J5X2xpbmVfbnVtYmVyICA9ICRyaGFzaC0+e3JoaXN0b3J5X2xpbmVfbnVtYmVyfTsKICAgICAgICAgICAgICAgIG15ICRyaGlzdG9yeV9sZXZlbF9kaWZmICAgPSAkcmhhc2gtPntyaGlzdG9yeV9sZXZlbF9kaWZmfTsKICAgICAgICAgICAgICAgIG15ICRyaGlzdG9yeV9hbmNob3JfcG9pbnQgPSAkcmhhc2gtPntyaGlzdG9yeV9hbmNob3JfcG9pbnR9OwoKICAgICAgICAgICAgICAgIGlmICggJHJoaXN0b3J5X2xldmVsX2RpZmYtPlstMV0gIT0gJGxldmVsX2RpZmYgKSB7CgogICAgICAgICAgICAgICAgICAgICMgUGF0Y2ggZm9yIG5vbi1pbmRlbnRpbmctYnJhY2VzOiBpZiB3ZSBndWVzcyB6ZXJvIGFuZAogICAgICAgICAgICAgICAgICAgICMgbWF0Y2ggYmVmb3JlIGFsbCBub24taW5kZW50aW5nIGJyYWNlcyBoYXZlIGJlZW4gZm91bmQsCiAgICAgICAgICAgICAgICAgICAgIyBpdCBtZWFucyB0aGF0IHdlIHdvdWxkIG5lZWQgbmVnYXRpdmUgaW5kZW50YXRpb24gdG8KICAgICAgICAgICAgICAgICAgICAjIG1hdGNoIGlmL3doZW4gdGhlIGJyYWNlIGlzIGZvdW5kLiBTbyB3ZSBoYXZlIGEgcHJvYmxlbQogICAgICAgICAgICAgICAgICAgICMgZnJvbSBoZXJlIG9uLiBXZSBpbmRpY2F0ZSB0aGlzIHdpdGggYSB2YWx1ZSAyIGluc3RlYWQKICAgICAgICAgICAgICAgICAgICAjIG9mIDEgYXMgYSBzaWduYWwgdG8gc3RvcCBvdXRwdXR0aW5nIHRoZSB0YWJsZSBoZXJlLgogICAgICAgICAgICAgICAgICAgIG15ICRhbmNob3IgPSAxOwogICAgICAgICAgICAgICAgICAgIGlmICggJGd1ZXNzID09IDAgJiYgJGFkanVzdCA+IDAgKSB7ICRhbmNob3IgPSAyIH0KCiAgICAgICAgICAgICAgICAgICAgIyBhZGQgYW4gYW5jaG9yIHBvaW50CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAeyRyaGlzdG9yeV9sZXZlbF9kaWZmfSwgICAkbGV2ZWxfZGlmZjsKICAgICAgICAgICAgICAgICAgICBwdXNoIEB7JHJoaXN0b3J5X2xpbmVfbnVtYmVyfSwgICRpbnB1dF9saW5lX251bWJlcjsKICAgICAgICAgICAgICAgICAgICBwdXNoIEB7JHJoaXN0b3J5X2FuY2hvcl9wb2ludH0sICRhbmNob3I7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgIyBhZGQgYSBtb3ZhYmxlIHBvaW50IGZvbGxvd2luZyBhbiBhbmNob3IgcG9pbnQKICAgICAgICAgICAgICAgICAgICBpZiAoICRyaGlzdG9yeV9hbmNob3JfcG9pbnQtPlstMV0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQHskcmhpc3RvcnlfbGV2ZWxfZGlmZn0sICAgJGxldmVsX2RpZmY7CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQHskcmhpc3RvcnlfbGluZV9udW1iZXJ9LCAgJGlucHV0X2xpbmVfbnVtYmVyOwogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEB7JHJoaXN0b3J5X2FuY2hvcl9wb2ludH0sIDA7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIGV4dGVuZCBhIG1vdmFibGUgcG9pbnQKICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHJoaXN0b3J5X2xpbmVfbnVtYmVyLT5bLTFdID0gJGlucHV0X2xpbmVfbnVtYmVyOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIHRva2VuaXplcl93cmFwdXBfbGluZQoKfSAjIyBlbmQgdG9rZW5pemVfdGhpc19saW5lCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFRva2VuaXplciByb3V0aW5lcyB3aGljaCBhc3Npc3QgaW4gaWRlbnRpZnlpbmcgdG9rZW4gdHlwZXMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgRGVmaW5lIEdsb2JhbCAnJW9wX2V4cGVjdGVkX3RhYmxlJwojICA9IGhhc2ggdGFibGUgb2Ygb3BlcmF0b3IgZXhwZWN0ZWQgdmFsdWVzIGJhc2VkIG9uIGxhc3Qgbm9uYmxhbmsgdG9rZW4KCiMgZXhjZXB0aW9ucyB0byBwZXJsJ3Mgd2VpcmQgcGFyc2luZyBydWxlcyBhZnRlciB0eXBlICdaJwpteSAlaXNfd2VpcmRfcGFyc2luZ19ydWxlX2V4Y2VwdGlvbjsKCm15ICVpc19wYXJlbl9kb2xsYXI7CgpteSAlaXNfbl92OwoKQkVHSU4gewoKICAgICMgQWx3YXlzIGV4cGVjdGluZyBURVJNIGZvbGxvd2luZyB0aGVzZSB0eXBlczoKICAgICMgbm90ZTogdGhpcyBpcyBpZGVudGljYWwgdG8gJ0B2YWx1ZV9yZXF1ZXN0b3JfdHlwZScgZGVmaW5lZCBsYXRlci4KICAgICMgRml4IGZvciBjMjUwOiBhZGQgbmV3IHR5cGUgJ1AnIGZvciBwYWNrYWdlIChleHBlY3RpbmcgVkVSU0lPTiBvciB7fQogICAgIyBhZnRlciBwYWNrYWdlIE5BTUVTUEFDRSwgc28gZXhwZWN0aW5nIFRFUk0pCiAgICAjIEZpeCBmb3IgYzI1MDogYWRkIG5ldyB0eXBlICdTJyBmb3Igc3ViIChub3QgZXhwZWN0aW5nIG9wZXJhdG9yKQogICAgbXkgQHEgPSBxdyMKICAgICAgOyAhICsgeCAmID8gIEYgSiAtIHAgLyBZIDogJSBmIFUgfiBBIEcgaiBMIFAgUyAqIC4gfCBeIDwgPSBbIG0geyBcID4gdAogICAgICB8fCA+PSAhPSBtbSAqPSA9PiAuLiAhfiA9PSAmJiB8PSAuPSBwcCAtPSA9fiArPSA8PSAlPSBePSB4PSB+fiAqKiA8PCAvPQogICAgICAmPSAvLyA+PiB+LiAmLiB8LiBeLgogICAgICAuLi4gKio9IDw8PSA+Pj0gJiY9IHx8PSAvLz0gPD0+ICF+fiAmLj0gfC49IF4uPSA8PH4KICAgICAgIzsKICAgIHB1c2ggQHEsICcsJzsKICAgIHB1c2ggQHEsICcoJzsgICAgICMgZm9yIGNvbXBsZXRlbmVzcywgbm90IGN1cnJlbnRseSBhIHRva2VuIHR5cGUKICAgIHB1c2ggQHEsICctPic7ICAgICMgd2FzIHByZXZpb3VzbHkgaW4gVU5LTk9XTgogICAgQG9wX2V4cGVjdGVkX3RhYmxle0BxfSA9IChURVJNKSB4IHNjYWxhcihAcSk7CgogICAgIyBObyBVTktOT1dOIHRhYmxlIHR5cGVzOgogICAgIyAgcmVtb3ZlZCAnLT4nIGZvciBjMDMwLCBub3cgYWx3YXlzIFRFUk0KICAgICMgIHJlbW92ZWQgJ3cnIGZvciBjMzkyIHRvIGFsbG93IHVzZSBvZiAnZnVuY3Rpb25fY291bnQnIGluZm8gaW4gdGhlIHN1YgoKICAgICMgQWx3YXlzIGV4cGVjdGluZyBPUEVSQVRPUiAuLi4KICAgICMgJ24nIGFuZCAndicgYXJlIGN1cnJlbnRseSBleGNsdWRlZCBiZWNhdXNlIHRoZXkgbWlnaHQgYmUgVkVSU0lPTiBudW1iZXJzCiAgICAjICdpJyBpcyBjdXJyZW50bHkgZXhjbHVkZWQgYmVjYXVzZSBpdCBtaWdodCBiZSBhIHBhY2thZ2UKICAgICMgJ3EnIGlzIGN1cnJlbnRseSBleGNsdWRlZCBiZWNhdXNlIGl0IG1pZ2h0IGJlIGEgcHJvdG90eXBlCiAgICAjIEZpeCBmb3IgYzAzMDogcmVtb3ZlZCAnLT4nIGZyb20gdGhpcyBsaXN0OgogICAgIyBGaXggZm9yIGMyNTA6IGFkZGVkICdpJyBiZWNhdXNlIG5ldyB0eXBlICdQJyB3YXMgYWRkZWQKICAgIEBxID0gcXcoIC0tIEMgaCBSICsrIF0gUSA8PiBpICk7CiAgICBwdXNoIEBxLCAnKSc7CiAgICBAb3BfZXhwZWN0ZWRfdGFibGV7QHF9ID0gKE9QRVJBVE9SKSB4IHNjYWxhcihAcSk7CgogICAgIyBGaXggZm9yIGdpdCAjNjI6IGFkZGVkICcqJyBhbmQgJyUnCiAgICBAcSA9IHF3KCA8ID8gKiAlICk7CiAgICBAaXNfd2VpcmRfcGFyc2luZ19ydWxlX2V4Y2VwdGlvbntAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgIEBxID0gcXc8KSAkPjsKICAgIEBpc19wYXJlbl9kb2xsYXJ7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICBAcSA9IHF3KCBuIHYgKTsKICAgIEBpc19uX3Z7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCn0gIyMgZW5kIEJFR0lOCgp1c2UgY29uc3RhbnQgREVCVUdfT1BFUkFUT1JfRVhQRUNURUQgPT4gMDsKCnN1YiBvcGVyYXRvcl9leHBlY3RlZCB7CgogICAgbXkgKCAkc2VsZiwgJHRvaywgJG5leHRfdHlwZSwgJGJsYW5rX2FmdGVyX1ogKSA9IEBfOwoKICAgICMgUmV0dXJucyBhIHBhcmFtZXRlciBpbmRpY2F0aW5nIHdoYXQgdHlwZXMgb2YgdG9rZW5zIGNhbiBvY2N1ciBuZXh0CgogICAgIyBDYWxsIGZvcm1hdDoKICAgICMgICAgJG9wX2V4cGVjdGVkID0KICAgICMgICAgICAkc2VsZi0+b3BlcmF0b3JfZXhwZWN0ZWQoICR0b2ssICRuZXh0X3R5cGUsICRibGFua19hZnRlcl9aICk7CiAgICAjIHdoZXJlCiAgICAjICAgICR0b2sgaXMgdGhlIGN1cnJlbnQgdG9rZW4KICAgICMgICAgJG5leHRfdHlwZSBpcyB0aGUgdHlwZSBvZiB0aGUgbmV4dCB0b2tlbiAoYmxhbmsgb3Igbm90KQogICAgIyAgICAkYmxhbmtfYWZ0ZXJfWiA9IGZsYWcgZm9yIGd1ZXNzaW5nIGFmdGVyIGEgdHlwZSAnWic6CiAgICAjICAgICAgIHRydWUgIGlmICR0b2sgZm9sbG93cyB0eXBlICdaJyB3aXRoIGludGVybWVkaWF0ZSBibGFuawogICAgIyAgICAgICBmYWxzZSBpZiAkdG9rIGZvbGxvd3MgdHlwZSAnWicgd2l0aCBubyBpbnRlcm1lZGlhdGUgYmxhbmsKICAgICMgICAgICAgaWdub3JlZCBpZiAkdG9rIGRvZXMgbm90IGZvbGxvdyB0eXBlICdaJwoKICAgICMgTWFueSBwZXJsIHN5bWJvbHMgaGF2ZSB0d28gb3IgbW9yZSBtZWFuaW5ncy4gIEZvciBleGFtcGxlLCAnPDwnCiAgICAjIGNhbiBiZSBhIHNoaWZ0IG9wZXJhdG9yIG9yIGEgaGVyZS1kb2Mgb3BlcmF0b3IuICBUaGUKICAgICMgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2Ugc3ltYm9scyBkZXBlbmRzIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mCiAgICAjIHRoZSB0b2tlbml6ZXIsIHdoaWNoIG1heSBlaXRoZXIgYmUgZXhwZWN0aW5nIGEgdGVybSBvciBhbgogICAgIyBvcGVyYXRvci4gIEZvciB0aGlzIGV4YW1wbGUsIGEgPDwgd291bGQgYmUgYSBzaGlmdCBpZiBhbiBPUEVSQVRPUgogICAgIyBpcyBleHBlY3RlZCwgYW5kIGEgaGVyZS1kb2MgaWYgYSBURVJNIGlzIGV4cGVjdGVkLiAgVGhpcyByb3V0aW5lCiAgICAjIGlzIGNhbGxlZCB0byBtYWtlIHRoaXMgZGVjaXNpb24gZm9yIGFueSBjdXJyZW50IHRva2VuLiAgSXQgcmV0dXJucwogICAgIyBvbmUgb2YgdGhyZWUgcG9zc2libGUgdmFsdWVzOgogICAgIwogICAgIyAgICAgT1BFUkFUT1IgLSBvcGVyYXRvciBleHBlY3RlZCAob3IgYXQgbGVhc3QsIG5vdCBhIHRlcm0pCiAgICAjICAgICBVTktOT1dOICAtIGNhbid0IHRlbGwKICAgICMgICAgIFRFUk0gICAgIC0gYSB0ZXJtIGlzIGV4cGVjdGVkIChvciBhdCBsZWFzdCwgbm90IGFuIG9wZXJhdG9yKQogICAgIwogICAgIyBUaGUgZGVjaXNpb24gaXMgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiBzZWVuIHNvIGZhci4gIFRoaXMKICAgICMgaW5mb3JtYXRpb24gaXMgc3RvcmVkIGluIHRoZSAiJGxhc3Rfbm9uYmxhbmtfdHlwZSIgYW5kCiAgICAjICIkbGFzdF9ub25ibGFua190b2tlbiIgdmFyaWFibGVzLiAgRm9yIGV4YW1wbGUsIGlmIHRoZQogICAgIyAkbGFzdF9ub25ibGFua190eXBlIGlzICc9ficsIHRoZW4gd2UgYXJlIGV4cGVjdGluZyBhIFRFUk0sIHdoZXJlYXMKICAgICMgaWYgJGxhc3Rfbm9uYmxhbmtfdHlwZSBpcyAnbicgKG51bWVyaWMpLCB3ZSBhcmUgZXhwZWN0aW5nIGFuCiAgICAjIE9QRVJBVE9SLgogICAgIwogICAgIyBJZiBhIFVOS05PV04gaXMgcmV0dXJuZWQsIHRoZSBjYWxsaW5nIHJvdXRpbmUgbXVzdCBndWVzcy4gQSBtYWpvcgogICAgIyBnb2FsIG9mIHRoaXMgdG9rZW5pemVyIGlzIHRvIG1pbmltaXplIHRoZSBwb3NzaWJpbGl0eSBvZiByZXR1cm5pbmcKICAgICMgVU5LTk9XTiwgYmVjYXVzZSBhIHdyb25nIGd1ZXNzIGNhbiBzcG9pbCB0aGUgZm9ybWF0dGluZyBvZiBhCiAgICAjIHNjcmlwdC4KICAgICMKICAgICMgQWRkaW5nIE5FV19UT0tFTlM6IGl0IGlzIGNyaXRpY2FsbHkgaW1wb3J0YW50IHRoYXQgdGhpcyByb3V0aW5lIGJlCiAgICAjIHVwZGF0ZWQgdG8gYWxsb3cgaXQgdG8gZGV0ZXJtaW5lIGlmIGFuIG9wZXJhdG9yIG9yIHRlcm0gaXMgdG8gYmUKICAgICMgZXhwZWN0ZWQgYWZ0ZXIgdGhlIG5ldyB0b2tlbi4gIERvaW5nIHRoaXMgc2ltcGx5IGludm9sdmVzIGFkZGluZwogICAgIyB0aGUgbmV3IHRva2VuIGNoYXJhY3RlciB0byBvbmUgb2YgdGhlIHJlZ2V4ZXMgaW4gdGhpcyByb3V0aW5lIG9yCiAgICAjIHRvIG9uZSBvZiB0aGUgaGFzaCBsaXN0cwogICAgIyB0aGF0IGl0IHVzZXMsIHdoaWNoIGFyZSBpbml0aWFsaXplZCBpbiB0aGUgQkVHSU4gc2VjdGlvbi4KICAgICMgVVNFUyBHTE9CQUwgVkFSSUFCTEVTOiAkbGFzdF9ub25ibGFua190eXBlLCAkbGFzdF9ub25ibGFua190b2tlbiwKICAgICMgJHN0YXRlbWVudF90eXBlCgogICAgIyBXaGVuIHBvc3NpYmxlLCB0b2tlbiB0eXBlcyBzaG91bGQgYmUgc2VsZWN0ZWQgc3VjaCB0aGF0IHdlIGNhbiBkZXRlcm1pbmUKICAgICMgdGhlICdvcGVyYXRvcl9leHBlY3RlZCcgdmFsdWUgYnkgYSBzaW1wbGUgaGFzaCBsb29rdXAuICBJZiB0aGVyZSBhcmUKICAgICMgZXhjZXB0aW9ucywgdGhhdCBpcyBhbiBpbmRpY2F0aW9uIHRoYXQgYSBuZXcgdHlwZSBpcyBuZWVkZWQuCgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFNlY3Rpb24gMTogVGFibGUgbG9va3VwIHdpbGwgZ2V0IG1vc3QgY2FzZXMKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICMgTWFueSB0eXBlcyBhcmUgY2FuIGJlIG9idGFpbmVkIGJ5IGEgdGFibGUgbG9va3VwLiAgVGhpcyB0eXBpY2FsbHkgaGFuZGxlcwogICAgIyBtb3JlIHRoYW4gaGFsZiBvZiB0aGUgY2FsbHMuICBGb3Igc3BlZWQsIHRoZSBjYWxsZXIgbWF5IHRyeSB0YWJsZSBsb29rdXAKICAgICMgZmlyc3QgYmVmb3JlIGNhbGxpbmcgdGhpcyBzdWIuCiAgICBteSAkb3BfZXhwZWN0ZWQgPSAkb3BfZXhwZWN0ZWRfdGFibGV7JGxhc3Rfbm9uYmxhbmtfdHlwZX07CiAgICBpZiAoIGRlZmluZWQoJG9wX2V4cGVjdGVkKSApIHsKICAgICAgICBERUJVR19PUEVSQVRPUl9FWFBFQ1RFRAogICAgICAgICAgJiYgcHJpbnQgeypTVERPVVR9CiJPUEVSQVRPUl9FWFBFQ1RFRDogVGFibGUgTG9va3VwOyByZXR1cm5zICRvcF9leHBlY3RlZCBmb3IgbGFzdCB0eXBlICRsYXN0X25vbmJsYW5rX3R5cGUgdG9rZW4gJGxhc3Rfbm9uYmxhbmtfdG9rZW5cbiI7CiAgICAgICAgcmV0dXJuICRvcF9leHBlY3RlZDsKICAgIH0KCiAgICBERUJVR19PUEVSQVRPUl9FWFBFQ1RFRAogICAgICAmJiBwcmludCB7KlNURE9VVH0KIk9QRVJBVE9SX0VYUEVDVEVEOiBpbiBoYXJkd2lyZWQgdGFibGUgZm9yIGxhc3QgdHlwZSAkbGFzdF9ub25ibGFua190eXBlIHRva2VuICRsYXN0X25vbmJsYW5rX3Rva2VuXG4iOwoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgU2VjdGlvbiAyOiBIYW5kbGUgc3BlY2lhbCBjYXNlcyBpZiBuZWNlc3NhcnkKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAjIFR5cGVzICdrJywgJ30nIGFuZCAnWicgZGVwZW5kIG9uIGNvbnRleHQKICAgICMgVHlwZXMgJ24nLCAndicsICdxJyBhbHNvIGRlcGVuZCBvbiBjb250ZXh0LgoKICAgICMgaWRlbnRpZmllci4uLgogICAgIyBGaXggZm9yIGMyNTA6IHJlbW92ZWQgY29kaW5nIGZvciB0eXBlICdpJyBiZWNhdXNlICdpJyBhbmQgbmV3IHR5cGUgJ1AnCiAgICAjIGFyZSBub3cgZG9uZSBieSBoYXNoIHRhYmxlIGxvb2t1cAoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBTZWN0aW9uIDJBOiBrZXl3b3JkCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGlmICggJGxhc3Rfbm9uYmxhbmtfdHlwZSBlcSAnaycgKSB7CgogICAgICAgICMga2V5d29yZHMgZXhwZWN0aW5nIFRFUk06CiAgICAgICAgaWYgKCAkZXhwZWN0aW5nX3Rlcm1fdG9rZW57JGxhc3Rfbm9uYmxhbmtfdG9rZW59ICkgewoKICAgICAgICAgICAgIyBFeGNlcHRpb25zIGZyb20gVEVSTToKCiAgICAgICAgICAgICMgLy8gbWF5IGZvbGxvdyBwZXJsIGZ1bmN0aW9ucyB3aGljaCBtYXkgYmUgdW5hcnkgb3BlcmF0b3JzCiAgICAgICAgICAgICMgc2VlIHRlc3QgZmlsZSBkb3IudCAoZGVmaW5lZCBvcik7CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICR0b2sgZXEgJy8nCiAgICAgICAgICAgICAgICAmJiAkbmV4dF90eXBlIGVxICcvJwogICAgICAgICAgICAgICAgJiYgJGlzX2tleXdvcmRfcmVqZWN0aW5nX3NsYXNoX2FzX3BhdHRlcm5fZGVsaW1pdGVyewogICAgICAgICAgICAgICAgICAgICRsYXN0X25vbmJsYW5rX3Rva2VufQogICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIE9QRVJBVE9SOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFBhdGNoIHRvIGFsbG93IGEgPyBmb2xsb3dpbmcgJ3NwbGl0JyB0byBiZSBhIGRlcHJlY2F0ZWQgcGF0dGVybgogICAgICAgICAgICAjIGRlbGltaXRlci4gIFRoaXMgcGF0Y2ggaXMgY29vcmRpbmF0ZWQgd2l0aCB0aGUgb21pc3Npb24gb2Ygc3BsaXQKICAgICAgICAgICAgIyBmcm9tIHRoZSBsaXN0CiAgICAgICAgICAgICMgJWlzX2tleXdvcmRfcmVqZWN0aW5nX3F1ZXN0aW9uX2FzX3BhdHRlcm5fZGVsaW1pdGVyLiBUaGlzIHBhdGNoCiAgICAgICAgICAgICMgd2lsbCBmb3JjZSBwZXJsdGlkeSB0byBndWVzcy4KICAgICAgICAgICAgaWYgKCAgICR0b2sgZXEgJz8nCiAgICAgICAgICAgICAgICAmJiAkbGFzdF9ub25ibGFua190b2tlbiBlcSAnc3BsaXQnICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIFVOS05PV047CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBURVJNOwogICAgICAgIH0KCiAgICAgICAgIyBrZXl3b3JkcyBleHBlY3RpbmcgT1BFUkFUT1I6CiAgICAgICAgaWYgKCAkZXhwZWN0aW5nX29wZXJhdG9yX3Rva2VueyRsYXN0X25vbmJsYW5rX3Rva2VufSApIHsKICAgICAgICAgICAgcmV0dXJuIE9QRVJBVE9SOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFRFUk07CgogICAgfSAjIyBlbmQgdHlwZSAnaycKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFNlY3Rpb24gMkI6IENsb3NpbmcgY29udGFpbmVyIHRva2VuCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgIyBOb3RlIHRoYXQgdGhlIGFjdHVhbCB0b2tlbiBmb3IgdHlwZSAnfScgbWF5IGFsc28gYmUgYSAnKScuCgogICAgIyBBbHNvIG5vdGUgdGhhdCAkbGFzdF9ub25ibGFua190b2tlbiBpcyBub3QgdGhlIHRva2VuIGNvcnJlc3BvbmRpbmcgdG8KICAgICMgJGxhc3Rfbm9uYmxhbmtfdHlwZSB3aGVuIHRoZSB0eXBlIGlzIGEgY2xvc2luZyBjb250YWluZXIuICBJbiB0aGF0CiAgICAjIGNhc2UgaXQgaXMgdGhlIHRva2VuIGJlZm9yZSB0aGUgY29ycmVzcG9uZGluZyBvcGVuaW5nIGNvbnRhaW5lciB0b2tlbi4KICAgICMgU28gZm9yIGV4YW1wbGUsIGZvciB0aGlzIHNuaXBwZXQKICAgICMgICAgICAgJGEgPSBkbyB7IEJMT0NLIH0gLyAyOwogICAgIyB0aGUgJGxhc3Rfbm9uYmxhbmtfdG9rZW4gaXMgJ2RvJyB3aGVuICRsYXN0X25vbmJsYW5rX3R5cGUgZXEgJ30nLgoKICAgIGlmICggJGxhc3Rfbm9uYmxhbmtfdHlwZSBlcSAnfScgKSB7CgogICAgICAgICMgaGFuZGxlIHNvbWV0aGluZyBhZnRlciAnZG8nIGFuZCAnZXZhbCcKICAgICAgICBpZiAoICRpc19ibG9ja19vcGVyYXRvcnskbGFzdF9ub25ibGFua190b2tlbn0gKSB7CgogICAgICAgICAgICAjIHNvbWV0aGluZyBsaWtlICRhID0gZG8geyBCTE9DSyB9IC8gMjsKICAgICAgICAgICAgcmV0dXJuIE9QRVJBVE9SOyAgICAjIGJsb2NrIG1vZGUgZm9sbG93aW5nIH0KICAgICAgICB9CgogICAgICAgICMgICAgICAgJGxhc3Rfbm9uYmxhbmtfdG9rZW4gPX4gL14oXCl8XCR8XC1cPikvCiAgICAgICAgaWYgKCAkaXNfcGFyZW5fZG9sbGFyeyBzdWJzdHIoICRsYXN0X25vbmJsYW5rX3Rva2VuLCAwLCAxICkgfQogICAgICAgICAgICB8fCBzdWJzdHIoICRsYXN0X25vbmJsYW5rX3Rva2VuLCAwLCAyICkgZXEgJy0+JyApCiAgICAgICAgewogICAgICAgICAgICBpZiAoICRsYXN0X25vbmJsYW5rX3Rva2VuIGVxICckJyApIHsgcmV0dXJuIFVOS05PV04gfQogICAgICAgICAgICByZXR1cm4gT1BFUkFUT1I7CiAgICAgICAgfQoKICAgICAgICAjIENoZWNrIGZvciBzbWFydG1hdGNoIG9wZXJhdG9yIGJlZm9yZSBwcmVjZWRpbmcgYnJhY2Ugb3Igc3F1YXJlCiAgICAgICAgIyBicmFja2V0LiAgRm9yIGV4YW1wbGUsIGF0IHRoZSA/IGFmdGVyIHRoZSBdIGluIHRoZSBmb2xsb3dpbmcKICAgICAgICAjIGV4cHJlc3Npb25zIHdlIGFyZSBleHBlY3RpbmcgYW4gb3BlcmF0b3I6CiAgICAgICAgIwogICAgICAgICMgcXIvMy8gfn4gWycxMjM0J10gPyAxIDogMDsKICAgICAgICAjIG1hcCB7ICRfIH5+IFsgJzAnLCAnMScgXSA/ICd4JyA6ICdvJyB9IEBhOwogICAgICAgIGlmICggJGxhc3Rfbm9uYmxhbmtfdG9rZW4gZXEgJ35+JyApIHsKICAgICAgICAgICAgcmV0dXJuIE9QRVJBVE9SOwogICAgICAgIH0KCiAgICAgICAgIyBBIHJpZ2h0IGJyYWNlIGhlcmUgaW5kaWNhdGVzIHRoZSBlbmQgb2YgYSBzaW1wbGUgYmxvY2suICBBbGwKICAgICAgICAjIG5vbi1zdHJ1Y3R1cmFsIHJpZ2h0IGJyYWNlcyBoYXZlIHR5cGUgJ1InIGFsbCBicmFjZXMgYXNzb2NpYXRlZCB3aXRoCiAgICAgICAgIyBibG9jayBvcGVyYXRvciBrZXl3b3JkcyBoYXZlIGJlZW4gZ2l2ZW4gdGhvc2Uga2V5d29yZHMgYXMKICAgICAgICAjICJsYXN0X25vbmJsYW5rX3Rva2VuIiBhbmQgY2F1Z2h0IGFib3ZlLiAgKFRoaXMgc3RhdGVtZW50IGlzIG9yZGVyCiAgICAgICAgIyBkZXBlbmRlbnQsIGFuZCBtdXN0IGNvbWUgYWZ0ZXIgY2hlY2tpbmcgJGxhc3Rfbm9uYmxhbmtfdG9rZW4pLgoKICAgICAgICAjIHBhdGNoIGZvciBkb3IudCAoZGVmaW5lZCBvcikuCiAgICAgICAgaWYgKCAgICR0b2sgZXEgJy8nCiAgICAgICAgICAgICYmICRuZXh0X3R5cGUgZXEgJy8nCiAgICAgICAgICAgICYmICRsYXN0X25vbmJsYW5rX3Rva2VuIGVxICddJyApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gT1BFUkFUT1I7CiAgICAgICAgfQoKICAgICAgICAjIFBhdGNoIGZvciBSVCAjMTE2MzQ0OiBtaXNwYXJzZSBhIHRlcm5hcnkgb3BlcmF0b3IgYWZ0ZXIgYW4KICAgICAgICAjIGFub255bW91cyBoYXNoLCBsaWtlIHRoaXM6CiAgICAgICAgIyAgIHJldHVybiByZWYge30gPyAxIDogMDsKICAgICAgICAjIFRoZSByaWdodCBicmFjZSBzaG91bGQgcmVhbGx5IGJlIG1hcmtlZCB0eXBlICdSJyBpbiB0aGlzIGNhc2UsCiAgICAgICAgIyBhbmQgaXQgaXMgc2FmZXN0IHRvIHJldHVybiBhbiBVTktOT1dOIGhlcmUuIEV4cGVjdGluZyBhIFRFUk0gd2lsbAogICAgICAgICMgY2F1c2UgdGhlICc/JyB0byBhbHdheXMgYmUgaW50ZXJwcmV0ZWQgYXMgYSBwYXR0ZXJuIGRlbGltaXRlcgogICAgICAgICMgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgYSB0ZXJuYXJ5IG9wZXJhdG9yLgogICAgICAgIGlmICggJHRvayBlcSAnPycgKSB7CiAgICAgICAgICAgIHJldHVybiBVTktOT1dOOwogICAgICAgIH0KICAgICAgICByZXR1cm4gVEVSTTsKCiAgICB9ICMjIGVuZCB0eXBlICd9JwoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFNlY3Rpb24gMkM6IG51bWJlciBvciB2LXN0cmluZwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgQW4gZXhjZXB0aW9uIGlzIGZvciBWRVJTSU9OIG51bWJlcnMgYSAndXNlJyBzdGF0ZW1lbnQuIEl0IGhhcyB0aGUgZm9ybWF0CiAgICAjICAgICB1c2UgTW9kdWxlIFZFUlNJT04gTElTVAogICAgIyBXZSBjb3VsZCBhdm9pZCB0aGlzIGV4Y2VwdGlvbiBieSB3cml0aW5nIGEgc3BlY2lhbCBzdWIgdG8gcGFyc2UgJ3VzZScKICAgICMgc3RhdGVtZW50cyBhbmQgcGVyaGFwcyBtYXJrIHRoZXNlIG51bWJlcnMgd2l0aCBhIG5ldyB0eXBlIFYgKGZvciBWRVJTSU9OKQogICAgaWYgKCAkaXNfbl92eyRsYXN0X25vbmJsYW5rX3R5cGV9ICkgewogICAgICAgIGlmICggJHN0YXRlbWVudF90eXBlIGVxICd1c2UnICkgewogICAgICAgICAgICByZXR1cm4gVU5LTk9XTjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIE9QRVJBVE9SOwogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgU2VjdGlvbiAyRDogcXcgcXVvdGUKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgVE9ETzogbGFiZWxlZCBwcm90b3R5cGUgd29yZHMgd291bGQgYmV0dGVyIGJlIGdpdmVuIHR5cGUgJ0EnIG9yIG1heWJlCiAgICAjICdKJzsgbm90ICdxJzsgb3IgbWF5YmUgbWFyayBhcyB0eXBlICdZJz8KICAgIGlmICggJGxhc3Rfbm9uYmxhbmtfdHlwZSBlcSAncScgKSB7CiAgICAgICAgaWYgKCAkbGFzdF9ub25ibGFua190b2tlbiBlcSAncHJvdG90eXBlJyApIHsKICAgICAgICAgICAgcmV0dXJuIFRFUk07CiAgICAgICAgfQoKICAgICAgICAjIHVwZGF0ZSBmb3IgLS11c2UtZmVhdHVyZT1jbGFzcyAocnQxNDU3MDYpOgogICAgICAgICMgTG9vayBmb3IgY2xhc3MgVkVSU0lPTiBhZnRlciBwb3NzaWJsZSBhdHRyaWJ1dGUsIGFzIGluCiAgICAgICAgIyAgICBjbGFzcyBFeGFtcGxlOjpTdWJjbGFzcyA6IGlzYShFeGFtcGxlOjpCYXNlKSAxLjM0NSB7IC4uLiB9CiAgICAgICAgaWYgKCAkc3RhdGVtZW50X3R5cGUgPX4gL15wYWNrYWdlXGIvICkgewogICAgICAgICAgICByZXR1cm4gVEVSTTsKICAgICAgICB9CgogICAgICAgICMgZXZlcnl0aGluZyBlbHNlCiAgICAgICAgcmV0dXJuIE9QRVJBVE9SOwogICAgfQoKICAgICMgU2VjdGlvbiAyRTogYmFyZXdvcmQKICAgIGlmICggJGxhc3Rfbm9uYmxhbmtfdHlwZSBlcSAndycgKSB7CgogICAgICAgICMgc2VlIGlmIHRoaXMgaGFzIGJlZW4gc2VlbiBpbiB0aGUgcm9sZSBvZiBhIGZ1bmN0aW9uIHRha2luZyBhcmdzCiAgICAgICAgbXkgJHJpbmZvID0gJHNlbGYtPltfcmJhcmV3b3JkX2luZm9fXS0+eyRjdXJyZW50X3BhY2thZ2V9OwogICAgICAgIGlmICgkcmluZm8pIHsKICAgICAgICAgICAgJHJpbmZvID0gJHJpbmZvLT57JGxhc3Rfbm9uYmxhbmtfdG9rZW59OwogICAgICAgICAgICBpZiAoJHJpbmZvKSB7CiAgICAgICAgICAgICAgICBteSAkZnVuY3Rpb25fY291bnQgPSAkcmluZm8tPntmdW5jdGlvbl9jb3VudH07CiAgICAgICAgICAgICAgICBpZiAoICRmdW5jdGlvbl9jb3VudCAmJiAkZnVuY3Rpb25fY291bnQgPiAwICkgeyByZXR1cm4gVEVSTSB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIFVOS05PV047CiAgICB9CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFNlY3Rpb24gMkY6IGZpbGUgaGFuZGxlIG9yIHNpbWlsYXIKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgaWYgKCAkbGFzdF9ub25ibGFua190eXBlIGVxICdaJyApIHsKCiAgICAgICAgIyBhbmdsZS50CiAgICAgICAgaWYgKCAkbGFzdF9ub25ibGFua190b2tlbiA9fiAvXlx3LyApIHsKICAgICAgICAgICAgcmV0dXJuIFVOS05PV047CiAgICAgICAgfQoKICAgICAgICAjIEV4Y2VwdGlvbiB0byB3ZWlyZCBwYXJzaW5nIHJ1bGVzIGZvciAneCgnIC4uLiBzZWUgY2FzZSBiMTIwNToKICAgICAgICAjIEluIHNvbWV0aGluZyBsaWtlICdwcmludCAkdnYgeCguLi4nIHRoZSB4IGlzIGFuIG9wZXJhdG9yOwogICAgICAgICMgTGlrZXdpc2UgaW4gJ3ByaW50ICR2diB4JHd3JyB0aGUgeCBpcyBhbiBvcGVyYXRvciAoY2FzZSBiMTIwNykKICAgICAgICAjIG90aGVyd2lzZSB4IGZvbGxvd3MgdGhlIHdlaXJkIHBhcnNpbmcgcnVsZXMuCiAgICAgICAgaWYgKCAkdG9rIGVxICd4JyAmJiAkbmV4dF90eXBlID1+IC9eW1woXCRcQFwlXSQvICkgewogICAgICAgICAgICByZXR1cm4gT1BFUkFUT1I7CiAgICAgICAgfQoKICAgICAgICAjIFRoZSAnd2VpcmQgcGFyc2luZyBydWxlcycgb2YgbmV4dCBzZWN0aW9uIGRvIG5vdCB3b3JrIGZvciAnPCcgYW5kICc/JwogICAgICAgICMgSXQgaXMgYmVzdCB0byBtYXJrIHRoZW0gYXMgdW5rbm93bi4gIFRlc3QgY2FzZToKICAgICAgICAjICBwcmludCAkZmggPERBVEE+OwogICAgICAgIGlmICggJGlzX3dlaXJkX3BhcnNpbmdfcnVsZV9leGNlcHRpb257JHRva30gKSB7CiAgICAgICAgICAgIHJldHVybiBVTktOT1dOOwogICAgICAgIH0KCiAgICAgICAgIyBGb3IgcG9zc2libGUgZmlsZSBoYW5kbGUgbGlrZSAiJGEiLCBQZXJsIHVzZXMgd2VpcmQgcGFyc2luZyBydWxlcy4KICAgICAgICAjIEZvciBleGFtcGxlOgogICAgICAgICMgcHJpbnQgJGEvMiwiL2hpIjsgICAtIGRpdmlzaW9uCiAgICAgICAgIyBwcmludCAkYSAvIDIsIi9oaSI7IC0gZGl2aXNpb24KICAgICAgICAjIHByaW50ICRhLyAyLCIvaGkiOyAgLSBkaXZpc2lvbgogICAgICAgICMgcHJpbnQgJGEgLzIsIi9oaSI7ICAtIHBhdHRlcm4gKGFuZCBlcnJvcikhCiAgICAgICAgIyBTb21lIGV4YW1wbGVzIHdoZXJlIHRoaXMgbG9naWMgd29ya3Mgb2theSwgZm9yICcmJywnKicsJysnOgogICAgICAgICMgICAgcHJpbnQgJGZoICZ4c2lfcHJvdG9zKEBtb2RzKTsKICAgICAgICAjICAgIG15ICR4ID0gbmV3ICRDb21wcmVzc0NsYXNzICpGSDsKICAgICAgICAjICAgIHByaW50ICRPVVQgKyggJGNvdW50ICUgMTUgPyAiLCAiIDogIlxuXHQiICk7CiAgICAgICAgaWYgKCAgICRibGFua19hZnRlcl9aCiAgICAgICAgICAgICYmICRuZXh0X3R5cGUgbmUgJ2InICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBURVJNOwogICAgICAgIH0KCiAgICAgICAgIyBOb3RlIHRoYXQgJz8nIGFuZCAnPCcgaGF2ZSBiZWVuIG1vdmVkIGFib3ZlCiAgICAgICAgIyAoICR0b2sgPX4gL14oW3hcL1wrXC1cKlwlXCZcLlw/XDxdfFw+XD4pJC8gKSB7CiAgICAgICAgaWYgKCAkdG9rID1+IC9eKFt4XC9cK1wtXCpcJVwmXC5dfFw+XD4pJC8gKSB7CgogICAgICAgICAgICAjIERvIG5vdCBjb21wbGFpbiBpbiAndXNlJyBzdGF0ZW1lbnRzLCB3aGljaCBoYXZlIHNwZWNpYWwgc3ludGF4LgogICAgICAgICAgICAjIEZvciBleGFtcGxlLCBmcm9tIFJUIzEzMDM0NDoKICAgICAgICAgICAgIyAgIHVzZSBsaWIgJEZpbmRCaW46OkJpbiAuICcvbGliJzsKICAgICAgICAgICAgaWYgKCAkc3RhdGVtZW50X3R5cGUgbmUgJ3VzZScgKSB7CiAgICAgICAgICAgICAgICAkc2VsZi0+Y29tcGxhaW4oCiJvcGVyYXRvciBpbiBwb3NzaWJsZSBpbmRpcmVjdCBvYmplY3QgbG9jYXRpb24gbm90IHJlY29tbWVuZGVkXG4iCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBPUEVSQVRPUjsKICAgICAgICB9CgogICAgICAgICMgYWxsIG90aGVyIGNhc2VzCgogICAgICAgIHJldHVybiBVTktOT1dOOwogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBTZWN0aW9uIDJGOiBhbnl0aGluZyBlbHNlCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHJldHVybiBVTktOT1dOOwoKfSAjIyBlbmQgc3ViIG9wZXJhdG9yX2V4cGVjdGVkCgpzdWIgbmV3X3N0YXRlbWVudF9vayB7CgogICAgIyBSZXR1cm5zOgogICAgIyAgIHRydWUgaWYgYSBuZXcgc3RhdGVtZW50IGNhbiBiZWdpbiBoZXJlCiAgICAjICAgZmFsc2Ugb3RoZXJ3aXNlCgogICAgIyBVU0VTIEdMT0JBTCBWQVJJQUJMRVM6ICRsYXN0X25vbmJsYW5rX3Rva2VuLCAkbGFzdF9ub25ibGFua190eXBlLAogICAgIyAkYnJhY2VfZGVwdGgsICRyYnJhY2VfdHlwZQoKICAgICMgVXNlczoKICAgICMgLSBTZWUgaWYgYSAnY2xhc3MnIHN0YXRlbWVudCBjYW4gb2NjdXIgaGVyZQogICAgIyAtIFNlZSBpZiBhIGtleXdvcmQgYmVnaW5zIGF0IGEgbmV3IHN0YXRlbWVudDsgaS5lLiBpcyBhbiAnaWYnIGEKICAgICMgICBibG9jayBpZiBvciBhIHRyYWlsaW5nIGlmPyAgQWxzbyBzZWUgaWYgJ2Zvcm1hdCcgc3RhcnRzIGEgc3RhdGVtZW50LgogICAgIyAtIERlY2lkZSBpZiBhICc6JyBpcyBwYXJ0IG9mIGEgc3RhdGVtZW50IGxhYmVsIChub3QgYSB0ZXJuYXJ5KQoKICAgICMgQ3VybHkgYnJhY2VzIGFyZSB0cmlja3kgYmVjYXVzZSBzb21lIHNtYWxsIGJsb2NrcyBkbyBub3QgZ2V0IG1hcmtlZCBhcwogICAgIyBibG9ja3MuLgoKICAgICMgaWYgaXQgZm9sbG93cyBhbiBvcGVuaW5nIGN1cmx5IGJyYWNlLi4KICAgIGlmICggJGxhc3Rfbm9uYmxhbmtfdG9rZW4gZXEgJ3snICkgewoKICAgICAgICAjIFRoZSBzYWZlIHRoaW5nIGlzIHRvIHJldHVybiB0cnVlIGluIGFsbCBjYXNlcyBiZWNhdXNlOgogICAgICAgICMgLSBhIHRlcm5hcnkgJzonIGNhbm5vdCBvY2N1ciBoZXJlCiAgICAgICAgIyAtIGFuICdpZicgaGVyZSwgZm9yIGV4YW1wbGUsIGNhbm5vdCBiZSBhIHRyYWlsaW5nIGlmCiAgICAgICAgIyBTZWUgdGVzdCBjYXNlIGMyMzEgZm9yIGFuIGV4YW1wbGUuCiAgICAgICAgIyBUaGlzIHdvcmtzIGJ1dCBjb3VsZCBiZSBpbXByb3ZlZCwgaWYgbmVjZXNzYXJ5LCBieSByZXR1cm5pbmcKICAgICAgICAjICAgJ2ZhbHNlJyBhdCBvYnZpb3VzIG5vbi1ibG9ja3MuCiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgIyBpZiBpdCBmb2xsb3dzIGEgY2xvc2luZyBjb2RlIGJsb2NrIGN1cmx5IGJyYWNlLi4KICAgIGVsc2lmICgkbGFzdF9ub25ibGFua190b2tlbiBlcSAnfScKICAgICAgICAmJiAkbGFzdF9ub25ibGFua190eXBlIGVxICRsYXN0X25vbmJsYW5rX3Rva2VuICkKICAgIHsKCiAgICAgICAgIyBhIG5ldyBzdGF0ZW1lbnQgY2FuIGZvbGxvdyBjZXJ0YWluIGNsb3NpbmcgYmxvY2sgYnJhY2VzIC4uLgogICAgICAgICMgRklYTUU6IFRoZSBmb2xsb3dpbmcgaGFzIHdvcmtlZCB3ZWxsIGJ1dCByZXR1cm5zIHRydWUgaW4gc29tZSBjYXNlcwogICAgICAgICMgd2hlcmUgaXQgcmVhbGx5IHNob3VsZCBub3QuICBXZSBjb3VsZCBmaXggdGhpcyBieSBlaXRoZXIgZXhjbHVkaW5nCiAgICAgICAgIyBjZXJ0YWluIGJsb2NrcywgbGlrZSBzb3J0L21hcC9ncmVwL2V2YWwvYXN1YiBvciBieSBqdXN0IGluY2x1ZGluZwogICAgICAgICMgY2VydGFpbiBibG9ja3MuCiAgICAgICAgcmV0dXJuICRyYnJhY2VfdHlwZS0+WyRicmFjZV9kZXB0aF07CiAgICB9CgogICAgIyBvdGhlcndpc2UsIGl0IGlzIGEgbGFiZWwgaWYgYW5kIG9ubHkgaWYgaXQgZm9sbG93cyBhICc7JyAocmVhbCBvciBmYWtlKQogICAgIyBvciBhbm90aGVyIGxhYmVsCiAgICBlbHNlIHsKICAgICAgICByZXR1cm4gKCAkbGFzdF9ub25ibGFua190eXBlIGVxICc7JyB8fCAkbGFzdF9ub25ibGFua190eXBlIGVxICdKJyApOwogICAgfQp9ICMjIGVuZCBzdWIgbmV3X3N0YXRlbWVudF9vawoKc3ViIGNvZGVfYmxvY2tfdHlwZSB7CgogICAgbXkgKCAkc2VsZiwgJGksICRydG9rZW5zLCAkcnRva2VuX3R5cGUsICRtYXhfdG9rZW5faW5kZXggKSA9IEBfOwoKICAgICMgRGVjaWRlIGlmIHRoaXMgaXMgYSBibG9jayBvZiBjb2RlLCBhbmQgaXRzIHR5cGUuCiAgICAjIE11c3QgYmUgY2FsbGVkIG9ubHkgd2hlbiAkdHlwZSA9ICR0b2tlbiA9ICd7JwogICAgIyBUaGUgcHJvYmxlbSBpcyB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSBzdGFydCBvZiBhIGJsb2NrIG9mIGNvZGUKICAgICMgYW5kIHRoZSBzdGFydCBvZiBhbiBhbm9ueW1vdXMgaGFzaCByZWZlcmVuY2UKICAgICMgUmV0dXJucyAiIiBpZiBub3QgY29kZSBibG9jaywgb3RoZXJ3aXNlIHJldHVybnMgJ2xhc3Rfbm9uYmxhbmtfdG9rZW4nCiAgICAjIHRvIGluZGljYXRlIHRoZSB0eXBlIG9mIGNvZGUgYmxvY2suICAoRm9yIGV4YW1wbGUsICdsYXN0X25vbmJsYW5rX3Rva2VuJwogICAgIyBtaWdodCBiZSAnaWYnIGZvciBhbiBpZiBibG9jaywgJ2Vsc2UnIGZvciBhbiBlbHNlIGJsb2NrLCBldGMpLgogICAgIyBVU0VTIEdMT0JBTCBWQVJJQUJMRVM6ICRsYXN0X25vbmJsYW5rX3Rva2VuLCAkbGFzdF9ub25ibGFua190eXBlLAogICAgIyAkbGFzdF9ub25ibGFua19ibG9ja190eXBlLCAkYnJhY2VfZGVwdGgsICRyYnJhY2VfdHlwZQoKICAgICMgaGFuZGxlIGNhc2Ugb2YgbXVsdGlwbGUgJ3sncwoKIyBwcmludCAiQkxPQ0tfVFlQRSBFWEFNSU5JTkc6IHR5cGU9JGxhc3Rfbm9uYmxhbmtfdHlwZSB0b2s9JGxhc3Rfbm9uYmxhbmtfdG9rZW5cbiI7CgogICAgaWYgKCAgICRsYXN0X25vbmJsYW5rX3Rva2VuIGVxICd7JwogICAgICAgICYmICRsYXN0X25vbmJsYW5rX3R5cGUgZXEgJGxhc3Rfbm9uYmxhbmtfdG9rZW4gKQogICAgewoKICAgICAgICAjIG9wZW5pbmcgYnJhY2Ugd2hlcmUgYSBzdGF0ZW1lbnQgbWF5IGFwcGVhciBpcyBwcm9iYWJseQogICAgICAgICMgYSBjb2RlIGJsb2NrIGJ1dCBtaWdodCBiZSBhbmQgYW5vbnltb3VzIGhhc2ggcmVmZXJlbmNlCiAgICAgICAgaWYgKCAkcmJyYWNlX3R5cGUtPlskYnJhY2VfZGVwdGhdICkgewogICAgICAgICAgICByZXR1cm4gJHNlbGYtPmRlY2lkZV9pZl9jb2RlX2Jsb2NrKCAkaSwgJHJ0b2tlbnMsICRydG9rZW5fdHlwZSwKICAgICAgICAgICAgICAgICRtYXhfdG9rZW5faW5kZXggKTsKICAgICAgICB9CgogICAgICAgICMgY2Fubm90IHN0YXJ0IGEgY29kZSBibG9jayB3aXRoaW4gYW4gYW5vbnltb3VzIGhhc2gKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NUUklORzsKICAgICAgICB9CiAgICB9CgogICAgZWxzaWYgKCAkbGFzdF9ub25ibGFua190b2tlbiBlcSAnOycgKSB7CgogICAgICAgICMgYW4gb3BlbmluZyBicmFjZSB3aGVyZSBhIHN0YXRlbWVudCBtYXkgYXBwZWFyIGlzIHByb2JhYmx5CiAgICAgICAgIyBhIGNvZGUgYmxvY2sgYnV0IG1pZ2h0IGJlIGFuZCBhbm9ueW1vdXMgaGFzaCByZWZlcmVuY2UKICAgICAgICByZXR1cm4gJHNlbGYtPmRlY2lkZV9pZl9jb2RlX2Jsb2NrKCAkaSwgJHJ0b2tlbnMsICRydG9rZW5fdHlwZSwKICAgICAgICAgICAgJG1heF90b2tlbl9pbmRleCApOwogICAgfQoKICAgICMgaGFuZGxlIGNhc2Ugb2YgJ317JwogICAgZWxzaWYgKCRsYXN0X25vbmJsYW5rX3Rva2VuIGVxICd9JwogICAgICAgICYmICRsYXN0X25vbmJsYW5rX3R5cGUgZXEgJGxhc3Rfbm9uYmxhbmtfdG9rZW4gKQogICAgewoKICAgICAgICAjIGEgfSB7IHNpdHVhdGlvbiAuLi4KICAgICAgICAjIGNvdWxkIGJlIGhhc2ggcmVmZXJlbmNlIGFmdGVyIGNvZGUgYmxvY2suLihibGt0eXBlMS50KQogICAgICAgIGlmICgkbGFzdF9ub25ibGFua19ibG9ja190eXBlKSB7CiAgICAgICAgICAgIHJldHVybiAkc2VsZi0+ZGVjaWRlX2lmX2NvZGVfYmxvY2soICRpLCAkcnRva2VucywgJHJ0b2tlbl90eXBlLAogICAgICAgICAgICAgICAgJG1heF90b2tlbl9pbmRleCApOwogICAgICAgIH0KCiAgICAgICAgIyBtdXN0IGJlIGEgYmxvY2sgaWYgaXQgZm9sbG93cyBhIGNsb3NpbmcgaGFzaCByZWZlcmVuY2UKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICRsYXN0X25vbmJsYW5rX3Rva2VuOwogICAgICAgIH0KICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgTk9URTogYnJhY2VzIGFmdGVyIHR5cGUgY2hhcmFjdGVycyBzdGFydCBjb2RlIGJsb2NrcywgYnV0IGZvcgogICAgIyBzaW1wbGljaXR5IHRoZXNlIGFyZSBub3QgaWRlbnRpZmllZCBhcyBzdWNoLiAgU2VlIGFsc28KICAgICMgc3ViIGlzX25vbl9zdHJ1Y3R1cmFsX2JyYWNlLgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojIyAgICBlbHNpZiAoICRsYXN0X25vbmJsYW5rX3R5cGUgZXEgJ3QnICkgewojIyAgICAgICByZXR1cm4gJGxhc3Rfbm9uYmxhbmtfdG9rZW47CiMjICAgIH0KCiAgICAjIGJyYWNlIGFmdGVyIGxhYmVsOgogICAgZWxzaWYgKCAkbGFzdF9ub25ibGFua190eXBlIGVxICdKJyApIHsKICAgICAgICByZXR1cm4gJGxhc3Rfbm9uYmxhbmtfdG9rZW47CiAgICB9CgogICAgIyBvdGhlcndpc2UsIHNlZSBpZiBhIGJsb2NrIG11c3QgZm9sbG93IHRoZSBwcmV2aW91cyB0b2tlbiAoc3VjaCBhcyAnaWYnKToKICAgIGVsc2lmICgkaXNfY29kZV9ibG9ja190b2tlbnskbGFzdF9ub25ibGFua190b2tlbn0KICAgICAgICB8fCAkaXNfZ3JlcF9hbGlhc3skbGFzdF9ub25ibGFua190b2tlbn0gKQogICAgewoKICAgICAgICAjIEJ1ZyBQYXRjaDogTm90ZSB0aGF0IHRoZSBvcGVuaW5nIGJyYWNlIGFmdGVyIHRoZSAnaWYnIGluIHRoZSBmb2xsb3dpbmcKICAgICAgICAjIHNuaXBwZXQgaXMgYW4gYW5vbnltb3VzIGhhc2ggcmVmIGFuZCBub3QgYSBjb2RlIGJsb2NrIQogICAgICAgICMgICBwcmludCAnaGknIGlmIHsgeCA9PiAxLCB9LT57eH07CiAgICAgICAgIyBXZSBjYW4gaWRlbnRpZnkgdGhpcyBzaXR1YXRpb24gYmVjYXVzZSB0aGUgbGFzdCBub25ibGFuayB0eXBlCiAgICAgICAgIyB3aWxsIGJlIGEga2V5d29yZCAoaW5zdGVhZCBvZiBhIGNsb3NpbmcgcGFyZW4pCiAgICAgICAgaWYgKAogICAgICAgICAgICAkbGFzdF9ub25ibGFua190eXBlIGVxICdrJwogICAgICAgICAgICAmJiAoICAgJGxhc3Rfbm9uYmxhbmtfdG9rZW4gZXEgJ2lmJwogICAgICAgICAgICAgICAgfHwgJGxhc3Rfbm9uYmxhbmtfdG9rZW4gZXEgJ3VubGVzcycgKQogICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NUUklORzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAkbGFzdF9ub25ibGFua190b2tlbjsKICAgICAgICB9CiAgICB9CgogICAgIyBvciBhIHN1YiBvciBwYWNrYWdlIEJMT0NLCiAgICAjIEZpeGVkIGZvciBjMjUwIHRvIGluY2x1ZGUgbmV3IHBhY2thZ2UgdHlwZSAnUCcsIGFuZCBjaGFuZ2UgJ2knIHRvICdTJwogICAgZWxzaWYgKAogICAgICAgICAgICRsYXN0X25vbmJsYW5rX3R5cGUgZXEgJ1AnCiAgICAgICAgfHwgJGxhc3Rfbm9uYmxhbmtfdHlwZSBlcSAnUycKICAgICAgICB8fCAoICRsYXN0X25vbmJsYW5rX3R5cGUgZXEgJ3QnCiAgICAgICAgICAgICYmIHN1YnN0ciggJGxhc3Rfbm9uYmxhbmtfdG9rZW4sIDAsIDMgKSBlcSAnc3ViJyApCiAgICAgICkKICAgIHsKICAgICAgICByZXR1cm4gJGxhc3Rfbm9uYmxhbmtfdG9rZW47CiAgICB9CgogICAgZWxzaWYgKCAkc3RhdGVtZW50X3R5cGUgPX4gL14oc3VifHBhY2thZ2UpXGIvICkgewogICAgICAgIHJldHVybiAkc3RhdGVtZW50X3R5cGU7CiAgICB9CgogICAgIyB1c2VyLWRlZmluZWQgc3VicyB3aXRoIGJsb2NrIHBhcmFtZXRlcnMgKGxpa2UgZ3JlcC9tYXAvZXZhbCkKICAgIGVsc2lmICggJGxhc3Rfbm9uYmxhbmtfdHlwZSBlcSAnRycgKSB7CiAgICAgICAgcmV0dXJuICRsYXN0X25vbmJsYW5rX3Rva2VuOwogICAgfQoKICAgICMgY2hlY2sgYmFyZXdvcmQKICAgIGVsc2lmICggJGxhc3Rfbm9uYmxhbmtfdHlwZSBlcSAndycgKSB7CgogICAgICAgICMgY2hlY2sgZm9yIHN5bnRheCAndXNlIE1PRFVMRSBMSVNUJwogICAgICAgICMgVGhpcyBmaXhlcyBiMTAyMiBiMTAyNSBiMTAyNyBiMTAyOCBiMTAyOSBiMTAzMCBiMTAzMQogICAgICAgIHJldHVybiBFTVBUWV9TVFJJTkcgaWYgKCAkc3RhdGVtZW50X3R5cGUgZXEgJ3VzZScgKTsKCiAgICAgICAgcmV0dXJuICRzZWxmLT5kZWNpZGVfaWZfY29kZV9ibG9jayggJGksICRydG9rZW5zLCAkcnRva2VuX3R5cGUsCiAgICAgICAgICAgICRtYXhfdG9rZW5faW5kZXggKTsKICAgIH0KCiAgICAjIFBhdGNoIGZvciBidWcgIyBSVCAjOTQzMzggcmVwb3J0ZWQgYnkgRGFuaWVsIFRyaXplbgogICAgIyBmb3ItbG9vcCBpbiBhIHBhcmVudGhlc2l6ZWQgYmxvY2stbWFwIHRyaWdnZXJpbmcgYW4gZXJyb3IgbWVzc2FnZToKICAgICMgICAgbWFwKCB7IGZvcmVhY2ggbXkgJGl0ZW0gKCAnMCcsICcxJyApIHsgcHJpbnQgJGl0ZW19IH0gcXcoYSBiIGMpICk7CiAgICAjIENoZWNrIGZvciBhIGNvZGUgYmxvY2sgd2l0aGluIGEgcGFyZW50aGVzaXplZCBmdW5jdGlvbiBjYWxsCiAgICBlbHNpZiAoICRsYXN0X25vbmJsYW5rX3Rva2VuIGVxICcoJyApIHsKICAgICAgICBteSAkcGFyZW5fdHlwZSA9ICRycGFyZW5fdHlwZS0+WyRwYXJlbl9kZXB0aF07CgogICAgICAgICMgICAgICAgICAgICAgICAgICAgL14obWFwfGdyZXB8c29ydCkkLwogICAgICAgIGlmICggJHBhcmVuX3R5cGUgJiYgJGlzX3NvcnRfbWFwX2dyZXB7JHBhcmVuX3R5cGV9ICkgewoKICAgICAgICAgICAgIyBXZSB3aWxsIG1hcmsgdGhpcyBhcyBhIGNvZGUgYmxvY2sgYnV0IHVzZSB0eXBlICd0JyBpbnN0ZWFkCiAgICAgICAgICAgICMgb2YgdGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5pbmcgZnVuY3Rpb24uICBUaGlzIHdpbGwgYWxsb3cgZm9yCiAgICAgICAgICAgICMgY29ycmVjdCBwYXJzaW5nIGJ1dCB3aWxsIHVzdWFsbHkgcHJvZHVjZSBiZXR0ZXIgZm9ybWF0dGluZy4KICAgICAgICAgICAgIyBCcmFjZXMgd2l0aCBibG9jayB0eXBlICd0JyBhcmUgbm90IGJyb2tlbiBvcGVuIGF1dG9tYXRpY2FsbHkKICAgICAgICAgICAgIyBpbiB0aGUgZm9ybWF0dGVyIGFzIGFyZSBvdGhlciBjb2RlIGJsb2NrIHR5cGVzLCBhbmQgdGhpcyB1c3VhbGx5CiAgICAgICAgICAgICMgd29ya3MgYmVzdC4KICAgICAgICAgICAgcmV0dXJuICd0JzsgICAgIyAoTm90ICRwYXJlbl90eXBlKQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NUUklORzsKICAgICAgICB9CiAgICB9CgogICAgIyBoYW5kbGUgdW5rbm93biBzeW50YXggJykgeycKICAgICMgd2UgcHJldmlvdXNseSBhcHBlbmRlZCBhICcoKScgdG8gbWFyayB0aGlzIGNhc2UKICAgIGVsc2lmICggJGxhc3Rfbm9uYmxhbmtfdG9rZW4gPX4gL1woXCkkLyApIHsKICAgICAgICByZXR1cm4gJGxhc3Rfbm9uYmxhbmtfdG9rZW47CiAgICB9CgogICAgIyBhbnl0aGluZyBlbHNlIG11c3QgYmUgYW5vbnltb3VzIGhhc2ggcmVmZXJlbmNlCiAgICBlbHNlIHsKICAgICAgICByZXR1cm4gRU1QVFlfU1RSSU5HOwogICAgfQp9ICMjIGVuZCBzdWIgY29kZV9ibG9ja190eXBlCgpzdWIgZGVjaWRlX2lmX2NvZGVfYmxvY2sgewoKICAgICMgVVNFUyBHTE9CQUwgVkFSSUFCTEVTOiAkbGFzdF9ub25ibGFua190b2tlbgogICAgbXkgKCAkc2VsZiwgJGksICRydG9rZW5zLCAkcnRva2VuX3R5cGUsICRtYXhfdG9rZW5faW5kZXggKSA9IEBfOwoKICAgIG15ICggJG5leHRfbm9uYmxhbmtfdG9rZW4sICRpX25leHRfdXUgKSA9CiAgICAgICRzZWxmLT5maW5kX25leHRfbm9uYmxhbmtfdG9rZW4oICRpLCAkcnRva2VucywgJG1heF90b2tlbl9pbmRleCApOwoKICAgICMgd2UgYXJlIGF0IGEgJ3snIHdoZXJlIGEgc3RhdGVtZW50IG1heSBhcHBlYXIuCiAgICAjIFdlIG11c3QgZGVjaWRlIGlmIHRoaXMgYnJhY2Ugc3RhcnRzIGFuIGFub255bW91cyBoYXNoIG9yIGEgY29kZQogICAgIyBibG9jay4KICAgICMgcmV0dXJuICIiIGlmIGFub255bW91cyBoYXNoLCBhbmQgJGxhc3Rfbm9uYmxhbmtfdG9rZW4gb3RoZXJ3aXNlCgogICAgIyBpbml0aWFsaXplIHRvIGJlIGNvZGUgQkxPQ0sKICAgIG15ICRjb2RlX2Jsb2NrX3R5cGUgPSAkbGFzdF9ub25ibGFua190b2tlbjsKCiAgICAjIENoZWNrIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgYW4gZW1wdHkgYW5vbnltb3VzIGhhc2ggcmVmZXJlbmNlOgogICAgIyBNYXliZSBzb21ldGhpbmcgbGlrZSBzdWIgeyB7IH0gfQogICAgaWYgKCAkbmV4dF9ub25ibGFua190b2tlbiBlcSAnfScgKSB7CiAgICAgICAgJGNvZGVfYmxvY2tfdHlwZSA9IEVNUFRZX1NUUklORzsKICAgIH0KCiAgICBlbHNlIHsKCiAgICAgICAgIyBUbyBndWVzcyBpZiB0aGlzICd7JyBpcyBhbiBhbm9ueW1vdXMgaGFzaCByZWZlcmVuY2UsIGxvb2sgYWhlYWQKICAgICAgICAjIGFuZCB0ZXN0IGFzIGZvbGxvd3M6CiAgICAgICAgIwogICAgICAgICMgaXQgaXMgYSBoYXNoIHJlZmVyZW5jZSBpZiBuZXh0IGNvbWU6CiAgICAgICAgIyAgIC0gYSBzdHJpbmcgb3IgZGlnaXQgZm9sbG93ZWQgYnkgYSBjb21tYSBvciA9PgogICAgICAgICMgICAtIGJhcmV3b3JkIGZvbGxvd2VkIGJ5ID0+CiAgICAgICAgIyBvdGhlcndpc2UgaXQgaXMgYSBjb2RlIGJsb2NrCiAgICAgICAgIwogICAgICAgICMgRXhhbXBsZXMgb2YgYW5vbnltb3VzIGhhc2ggcmVmOgogICAgICAgICMgeydhYScsfTsKICAgICAgICAjIHsxLDJ9CiAgICAgICAgIwogICAgICAgICMgRXhhbXBsZXMgb2YgY29kZSBibG9ja3M6CiAgICAgICAgIyB7MTsgcHJpbnQgImhlbGxvXG4iLCAxO30KICAgICAgICAjIHskYSwxfTsKCiAgICAgICAgIyBXZSBhcmUgb25seSBnb2luZyB0byBsb29rIGFoZWFkIG9uZSBtb3JlIChub25ibGFuay9jb21tZW50KSBsaW5lLgogICAgICAgICMgU3RyYW5nZSBmb3JtYXR0aW5nIGNvdWxkIGNhdXNlIGEgYmFkIGd1ZXNzLCBidXQgdGhhdCdzIHVubGlrZWx5LgogICAgICAgIG15IEBwcmVfdHlwZXM7CiAgICAgICAgbXkgQHByZV90b2tlbnM7CgogICAgICAgICMgSWdub3JlIHRoZSByZXN0IG9mIHRoaXMgbGluZSBpZiBpdCBpcyBhIHNpZGUgY29tbWVudAogICAgICAgIGlmICggJG5leHRfbm9uYmxhbmtfdG9rZW4gbmUgJyMnICkgewogICAgICAgICAgICBAcHJlX3R5cGVzICA9IEB7JHJ0b2tlbl90eXBlfVsgJGkgKyAxIC4uICRtYXhfdG9rZW5faW5kZXggXTsKICAgICAgICAgICAgQHByZV90b2tlbnMgPSBAeyRydG9rZW5zfVsgJGkgKyAxIC4uICRtYXhfdG9rZW5faW5kZXggXTsKICAgICAgICB9CgogICAgICAgICMgSGVyZSAyMCBpcyBhcmJpdHJhcnkgYnV0IGdlbmVyb3VzLCBhbmQgcHJldmVudHMgd2FzdGluZyBsb3RzIG9mIHRpbWUKICAgICAgICAjIGluIG1hbmdsZWQgZmlsZXMKICAgICAgICBteSAoICRycHJlX3Rva2VucywgJHJwcmVfdHlwZXMgKSA9CiAgICAgICAgICAkc2VsZi0+cGVla19haGVhZF9mb3Jfbl9ub25ibGFua19wcmVfdG9rZW5zKDIwKTsKICAgICAgICBpZiAoIGRlZmluZWQoJHJwcmVfdHlwZXMpICYmIEB7JHJwcmVfdHlwZXN9ICkgewogICAgICAgICAgICBwdXNoIEBwcmVfdHlwZXMsICBAeyRycHJlX3R5cGVzfTsKICAgICAgICAgICAgcHVzaCBAcHJlX3Rva2VucywgQHskcnByZV90b2tlbnN9OwogICAgICAgIH0KCiAgICAgICAgIyBwdXQgYSBzZW50aW5lbCB0b2tlbiB0byBzaW1wbGlmeSBzdG9wcGluZyB0aGUgc2VhcmNoCiAgICAgICAgcHVzaCBAcHJlX3R5cGVzLCAnfSc7CiAgICAgICAgcHVzaCBAcHJlX3R5cGVzLCAnfSc7CgogICAgICAgIG15ICRqYmVnID0gMDsKICAgICAgICAkamJlZyA9IDEgaWYgJHByZV90eXBlc1swXSBlcSAnYic7CgogICAgICAgICMgZmlyc3QgbG9vayBmb3Igb25lIG9mIHRoZXNlCiAgICAgICAgIyAgLSBiYXJld29yZAogICAgICAgICMgIC0gYmFyZXdvcmQgd2l0aCBsZWFkaW5nIC0KICAgICAgICAjICAtIGRpZ2l0CiAgICAgICAgIyAgLSBxdW90ZWQgc3RyaW5nCiAgICAgICAgbXkgJGogPSAkamJlZzsKICAgICAgICBpZiAoICRwcmVfdHlwZXNbJGpdID1+IC9eW1wnXCJdLyApIHsKCiAgICAgICAgICAgICMgZmluZCB0aGUgY2xvc2luZyBxdW90ZTsgZG9uJ3Qgd29ycnkgYWJvdXQgZXNjYXBlcwogICAgICAgICAgICBteSAkcXVvdGVfbWFyayA9ICRwcmVfdHlwZXNbJGpdOwogICAgICAgICAgICBmb3JlYWNoIG15ICRrICggJGogKyAxIC4uIEBwcmVfdHlwZXMgLSAyICkgewogICAgICAgICAgICAgICAgaWYgKCAkcHJlX3R5cGVzWyRrXSBlcSAkcXVvdGVfbWFyayApIHsKICAgICAgICAgICAgICAgICAgICAkaiA9ICRrICsgMTsKICAgICAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJHByZV90eXBlc1skal0gZXEgJ2QnICkgewogICAgICAgICAgICAkaisrOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRwcmVfdHlwZXNbJGpdIGVxICd3JyApIHsKICAgICAgICAgICAgJGorKzsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkcHJlX3R5cGVzWyRqXSBlcSAnLScgJiYgJHByZV90eXBlc1sgKyskaiBdIGVxICd3JyApIHsKICAgICAgICAgICAgJGorKzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICMgbm9uZSBvZiB0aGUgYWJvdmUKICAgICAgICB9CiAgICAgICAgaWYgKCAkaiA+ICRqYmVnICkgewoKICAgICAgICAgICAgJGorKyBpZiAkcHJlX3R5cGVzWyRqXSBlcSAnYic7CgogICAgICAgICAgICAjIFBhdGNoZWQgZm9yIFJUICM5NTcwOAogICAgICAgICAgICBpZiAoCgogICAgICAgICAgICAgICAgIyBpdCBpcyBhIGNvbW1hIHdoaWNoIGlzIG5vdCBhIHBhdHRlcm4gZGVsaW1pdGVyIGV4Y2VwdCBmb3IgcXcKICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAkcHJlX3R5cGVzWyRqXSBlcSAnLCcKICAgICAgICAgICAgICAgICAgICAmJiAhJGlzX3FfcXFfcXhfcXJfc195X3RyX217ICRwcmVfdG9rZW5zWyRqYmVnXSB9CiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAgIyBvciBhID0+CiAgICAgICAgICAgICAgICB8fCAoICRwcmVfdHlwZXNbJGpdIGVxICc9JyAmJiAkcHJlX3R5cGVzWyArKyRqIF0gZXEgJz4nICkKICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRjb2RlX2Jsb2NrX3R5cGUgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgkY29kZV9ibG9ja190eXBlKSB7CgogICAgICAgICAgICAjIFBhdGNoIGZvciBjYXNlcyBiMTA4NSBiMTEyODogSXQgaXMgdW5jZXJ0YWluIGlmIHRoaXMgaXMgYSBibG9jay4KICAgICAgICAgICAgIyBJZiB0aGlzIGJyYWNlIGZvbGxvd3MgYSBiYXJld29yZCwgdGhlbiBhcHBlbmQgYSBzcGFjZSBhcyBhIHNpZ25hbAogICAgICAgICAgICAjIHRvIHRoZSBmb3JtYXR0ZXIgdGhhdCB0aGlzIG1heSBub3QgYmUgYSBibG9jayBicmFjZS4gIFRvIGZpbmQgdGhlCiAgICAgICAgICAgICMgY29ycmVzcG9uZGluZyBjb2RlIGluIEZvcm1hdHRlci5wbSBzZWFyY2ggZm9yICdiMTA4NScuCiAgICAgICAgICAgICRjb2RlX2Jsb2NrX3R5cGUgLj0gU1BBQ0UgaWYgKCAkY29kZV9ibG9ja190eXBlID1+IC9eXHcvICk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkY29kZV9ibG9ja190eXBlOwp9ICMjIGVuZCBzdWIgZGVjaWRlX2lmX2NvZGVfYmxvY2sKCnN1YiByZXBvcnRfdW5leHBlY3RlZCB7CgogICAgIyByZXBvcnQgdW5leHBlY3RlZCB0b2tlbiB0eXBlIGFuZCBzaG93IHdoZXJlIGl0IGlzCiAgICAjIFVTRVMgR0xPQkFMIFZBUklBQkxFUzogKG5vbmUpCiAgICBteSAoICRzZWxmLCAkcmNhbGxfaGFzaCApID0gQF87CgogICAgbXkgJGZvdW5kICAgICAgICAgICA9ICRyY2FsbF9oYXNoLT57Zm91bmR9OwogICAgbXkgJGV4cGVjdGluZyAgICAgICA9ICRyY2FsbF9oYXNoLT57ZXhwZWN0aW5nfTsKICAgIG15ICRpX3RvayAgICAgICAgICAgPSAkcmNhbGxfaGFzaC0+e2lfdG9rfTsKICAgIG15ICRsYXN0X25vbmJsYW5rX2kgPSAkcmNhbGxfaGFzaC0+e2xhc3Rfbm9uYmxhbmtfaX07CiAgICBteSAkcnByZXRva2VuX21hcCAgID0gJHJjYWxsX2hhc2gtPntycHJldG9rZW5fbWFwfTsKICAgIG15ICRycHJldG9rZW5fdHlwZSAgPSAkcmNhbGxfaGFzaC0+e3JwcmV0b2tlbl90eXBlfTsKICAgIG15ICRpbnB1dF9saW5lICAgICAgPSAkcmNhbGxfaGFzaC0+e2lucHV0X2xpbmV9OwoKICAgIGlmICggKyskc2VsZi0+W191bmV4cGVjdGVkX2Vycm9yX2NvdW50X10gPD0gTUFYX05BR19NRVNTQUdFUyApIHsKICAgICAgICBteSAkbXNnID0gImZvdW5kICRmb3VuZCB3aGVyZSAkZXhwZWN0aW5nIGV4cGVjdGVkIjsKICAgICAgICBteSAkcG9zID0gJHJwcmV0b2tlbl9tYXAtPlskaV90b2tdOwogICAgICAgICRzZWxmLT5pbnRlcnJ1cHRfbG9nZmlsZSgpOwogICAgICAgIG15ICRpbnB1dF9saW5lX251bWJlciA9ICRzZWxmLT5bX2xhc3RfbGluZV9udW1iZXJfXTsKICAgICAgICBteSAoICRvZmZzZXQsICRudW1iZXJlZF9saW5lLCAkdW5kZXJsaW5lICkgPQogICAgICAgICAgbWFrZV9udW1iZXJlZF9saW5lKCAkaW5wdXRfbGluZV9udW1iZXIsICRpbnB1dF9saW5lLCAkcG9zICk7CiAgICAgICAgJHVuZGVybGluZSA9IHdyaXRlX29uX3VuZGVybGluZSggJHVuZGVybGluZSwgJHBvcyAtICRvZmZzZXQsICdeJyApOwoKICAgICAgICBteSAkdHJhaWxlciA9IEVNUFRZX1NUUklORzsKICAgICAgICBpZiAoICggJGlfdG9rID4gMCApICYmICggJGxhc3Rfbm9uYmxhbmtfaSA+PSAwICkgKSB7CiAgICAgICAgICAgIG15ICRwb3NfcHJldiA9ICRycHJldG9rZW5fbWFwLT5bJGxhc3Rfbm9uYmxhbmtfaV07CiAgICAgICAgICAgIG15ICRudW07CiAgICAgICAgICAgIGlmICggJHJwcmV0b2tlbl90eXBlLT5bICRpX3RvayAtIDEgXSBlcSAnYicgKSB7CiAgICAgICAgICAgICAgICAkbnVtID0gJHJwcmV0b2tlbl9tYXAtPlsgJGlfdG9rIC0gMSBdIC0gJHBvc19wcmV2OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJG51bSA9ICRwb3MgLSAkcG9zX3ByZXY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAkbnVtID4gNDAgKSB7ICRudW0gPSA0MDsgJHBvc19wcmV2ID0gJHBvcyAtIDQwOyB9CgogICAgICAgICAgICAkdW5kZXJsaW5lID0KICAgICAgICAgICAgICB3cml0ZV9vbl91bmRlcmxpbmUoICR1bmRlcmxpbmUsICRwb3NfcHJldiAtICRvZmZzZXQsICctJyB4ICRudW0gKTsKICAgICAgICAgICAgJHRyYWlsZXIgPSAiIChwcmV2aW91cyB0b2tlbiB1bmRlcmxpbmVkKSI7CiAgICAgICAgfQogICAgICAgICR1bmRlcmxpbmUgPX4gcy9ccyskLy87CiAgICAgICAgJHNlbGYtPndhcm5pbmcoICRudW1iZXJlZF9saW5lIC4gIlxuIiApOwogICAgICAgICRzZWxmLT53YXJuaW5nKCAkdW5kZXJsaW5lIC4gIlxuIiApOwogICAgICAgICRzZWxmLT53YXJuaW5nKCAkbXNnIC4gJHRyYWlsZXIgLiAiXG4iICk7CiAgICAgICAgJHNlbGYtPnJlc3VtZV9sb2dmaWxlKCk7CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiByZXBvcnRfdW5leHBlY3RlZAoKbXkgJWlzX3NpZ2lsX29yX3BhcmVuOwpteSAlaXNfUl9jbG9zaW5nX3NiOwoKQkVHSU4gewoKICAgIG15IEBxID0gcXc8ICQgJiAlICogQCApID47CiAgICBAaXNfc2lnaWxfb3JfcGFyZW57QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICBAcSA9IHF3KCBSIF0gKTsKICAgIEBpc19SX2Nsb3Npbmdfc2J7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKfSAjIyBlbmQgQkVHSU4KCnN1YiBpc19ub25fc3RydWN0dXJhbF9icmFjZSB7CgogICAgIyBEZWNpZGUgaWYgYSBicmFjZSBvciBicmFja2V0IGlzIHN0cnVjdHVyYWwgb3Igbm9uLXN0cnVjdHVyYWwKICAgICMgYnkgbG9va2luZyBhdCB0aGUgcHJldmlvdXMgdG9rZW4gYW5kIHR5cGUKICAgICMgVVNFUyBHTE9CQUwgVkFSSUFCTEVTOiAkbGFzdF9ub25ibGFua190eXBlLCAkbGFzdF9ub25ibGFua190b2tlbgoKICAgICMgRVhQRVJJTUVOVEFMOiBNYXJrIHNsaWNlcyBhcyBzdHJ1Y3R1cmFsOyBpZGVhIHdhcyB0byBpbXByb3ZlIGZvcm1hdHRpbmcuCiAgICAjIFRlbnRhdGl2ZWx5IGRlYWN0aXZhdGVkIGJlY2F1c2UgaXQgY2F1c2VkIHRoZSB3cm9uZyBvcGVyYXRvciBleHBlY3RhdGlvbgogICAgIyBmb3IgdGhpcyBjb2RlOgogICAgIyAgICAgICR1c2VyID0gQHZhcnNbMV0gLyAxMDA7CiAgICAjIE11c3QgdXBkYXRlIHN1YiBvcGVyYXRvcl9leHBlY3RlZCBiZWZvcmUgcmUtaW1wbGVtZW50aW5nLgogICAgIyBpZiAoICRsYXN0X25vbmJsYW5rX3R5cGUgZXEgJ2knICYmICRsYXN0X25vbmJsYW5rX3Rva2VuID1+IC9eQC8gKSB7CiAgICAjICAgIHJldHVybiAwOwogICAgIyB9CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIE5PVEU6IGJyYWNlcyBhZnRlciB0eXBlIGNoYXJhY3RlcnMgc3RhcnQgY29kZSBibG9ja3MsIGJ1dCBmb3IKICAgICMgc2ltcGxpY2l0eSB0aGVzZSBhcmUgbm90IGlkZW50aWZpZWQgYXMgc3VjaC4gIFNlZSBhbHNvCiAgICAjIHN1YiBjb2RlX2Jsb2NrX3R5cGUKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICMjaWYgKCRsYXN0X25vbmJsYW5rX3R5cGUgZXEgJ3QnKSB7cmV0dXJuIDB9CgogICAgIyBvdGhlcndpc2UsIGl0IGlzIG5vbi1zdHJ1Y3R1cmFsIGlmIGl0IGlzIGRlY29yYXRlZAogICAgIyBieSB0eXBlIGluZm9ybWF0aW9uLgogICAgIyBGb3IgZXhhbXBsZSwgdGhlICd7JyBoZXJlIGlzIG5vbi1zdHJ1Y3R1cmFsOiAgICR7eHh4fQogICAgIyBSZW1vdmVkICc6OicgdG8gZml4IGMwNzQKICAgICMjICRsYXN0X25vbmJsYW5rX3Rva2VuID1+IC9eKFtcJFxAXCpcJlwlXCldfC0+fDo6KS8KICAgIHJldHVybiAoCiAgICAgICAgIyMgJGxhc3Rfbm9uYmxhbmtfdG9rZW4gPX4gL14oW1wkXEBcKlwmXCVcKV18LT4pLwogICAgICAgICRpc19zaWdpbF9vcl9wYXJlbnsgc3Vic3RyKCAkbGFzdF9ub25ibGFua190b2tlbiwgMCwgMSApIH0KICAgICAgICAgIHx8IHN1YnN0ciggJGxhc3Rfbm9uYmxhbmtfdG9rZW4sIDAsIDIgKSBlcSAnLT4nCgogICAgICAgICAgIyBvciBpZiB3ZSBmb2xsb3cgYSBoYXNoIG9yIGFycmF5IGNsb3NpbmcgY3VybHkgYnJhY2Ugb3IgYnJhY2tldAogICAgICAgICAgIyBGb3IgZXhhbXBsZSwgdGhlIHNlY29uZCAneycgaW4gdGhpcyBpcyBub24tc3RydWN0dXJhbDogJGF7J3gnfXsneSd9CiAgICAgICAgICAjIGJlY2F1c2UgdGhlIGZpcnN0ICd9JyB3b3VsZCBoYXZlIGJlZW4gZ2l2ZW4gdHlwZSAnUicKICAgICAgICAgICMjfHwgJGxhc3Rfbm9uYmxhbmtfdHlwZSA9fiAvXihbUlxdXSkkLwogICAgICAgICAgfHwgJGlzX1JfY2xvc2luZ19zYnskbGFzdF9ub25ibGFua190eXBlfQogICAgKTsKfSAjIyBlbmQgc3ViIGlzX25vbl9zdHJ1Y3R1cmFsX2JyYWNlCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFRva2VuaXplciByb3V0aW5lcyBmb3IgdHJhY2tpbmcgY29udGFpbmVyIG5lc3RpbmcgZGVwdGhzCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIFRoZSBmb2xsb3dpbmcgcm91dGluZXMga2VlcCB0cmFjayBvZiBuZXN0aW5nIGRlcHRocyBvZiB0aGUgbmVzdGluZwojIHR5cGVzLCAoIFsgeyBhbmQgPy4gIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBkZXRlcm1pbmluZyB0aGUgaW5kZW50YXRpb24KIyBsZXZlbCwgYW5kIGFsc28gZm9yIGRlYnVnZ2luZyBwcm9ncmFtcy4gIE5vdCBvbmx5IGRvIHRoZXkga2VlcCB0cmFjayBvZgojIG5lc3RpbmcgZGVwdGhzIG9mIHRoZSBpbmRpdmlkdWFsIGJyYWNlIHR5cGVzLCBidXQgdGhleSBjaGVjayB0aGF0IGVhY2gKIyBvZiB0aGUgb3RoZXIgYnJhY2UgdHlwZXMgaXMgYmFsYW5jZWQgd2l0aGluIG1hdGNoaW5nIHBhaXJzLiAgRm9yCiMgZXhhbXBsZSwgaWYgdGhlIHByb2dyYW0gc2VlcyB0aGlzIHNlcXVlbmNlOgojCiMgICAgICAgICB7ICAoICggKSB9CiMKIyB0aGVuIGl0IGNhbiBkZXRlcm1pbmUgdGhhdCB0aGVyZSBpcyBhbiBleHRyYSBsZWZ0IHBhcmVuIHNvbWV3aGVyZQojIGJldHdlZW4gdGhlIHsgYW5kIHRoZSB9LiAgQW5kIHNvIG9uIHdpdGggZXZlcnkgb3RoZXIgcG9zc2libGUKIyBjb21iaW5hdGlvbiBvZiBvdXRlciBhbmQgaW5uZXIgYnJhY2UgdHlwZXMuICBGb3IgYW5vdGhlcgojIGV4YW1wbGU6CiMKIyAgICAgICAgICggWyAuLi4uLiBdICBdICkKIwojIHdoaWNoIGhhcyBhbiBleHRyYSBdIHdpdGhpbiB0aGUgcGFyZW5zLgojCiMgVGhlIGJyYWNlIHR5cGVzIGhhdmUgaW5kZXhlcyAwIC4uIDMgd2hpY2ggYXJlIGluZGV4ZXMgaW50bwojIHRoZSBtYXRyaWNlcy4KIwojIFRoZSBwYWlyID8gOiBhcmUgdHJlYXRlZCBhcyBqdXN0IGFub3RoZXIgbmVzdGluZyB0eXBlLCB3aXRoID8gYWN0aW5nCiMgYXMgdGhlIG9wZW5pbmcgYnJhY2UgYW5kIDogYWN0aW5nIGFzIHRoZSBjbG9zaW5nIGJyYWNlLgojCiMgVGhlIG1hdHJpeAojCiMgICRyZGVwdGhfYXJyYXktPlskYV1bJGJdWyAkcmN1cnJlbnRfZGVwdGgtPlskYV0gXSA9ICRyY3VycmVudF9kZXB0aC0+WyRiXTsKIwojIHNhdmVzIHRoZSBuZXN0aW5nIGRlcHRoIG9mIGJyYWNlIHR5cGUgJGIgKHdoZXJlICRiIGlzIGVpdGhlciBvZiB0aGUgb3RoZXIKIyBuZXN0aW5nIHR5cGVzKSB3aGVuIGJyYWNlIHR5cGUgJGEgZW50ZXJzIGEgbmV3IGRlcHRoLiAgV2hlbiB0aGlzIGRlcHRoCiMgZGVjcmVhc2VzLCBhIGNoZWNrIGlzIG1hZGUgdGhhdCB0aGUgY3VycmVudCBkZXB0aCBvZiBicmFjZSB0eXBlcyAkYiBpcwojIHVuY2hhbmdlZCwgb3Igb3RoZXJ3aXNlIHRoZXJlIG11c3QgaGF2ZSBiZWVuIGFuIGVycm9yLiAgVGhpcyBjYW4KIyBiZSB2ZXJ5IHVzZWZ1bCBmb3IgbG9jYWxpemluZyBlcnJvcnMsIHBhcnRpY3VsYXJseSB3aGVuIHBlcmwgcnVucyB0bwojIHRoZSBlbmQgb2YgYSBsYXJnZSBmaWxlIChzdWNoIGFzIHRoaXMgb25lKSBhbmQgYW5ub3VuY2VzIHRoYXQgdGhlcmUKIyBpcyBhIHByb2JsZW0gc29tZXdoZXJlLgojCiMgQSBudW1lcmljYWwgc2VxdWVuY2UgbnVtYmVyIGlzIG1haW50YWluZWQgZm9yIGV2ZXJ5IG5lc3RpbmcgdHlwZSwKIyBzbyB0aGF0IGVhY2ggbWF0Y2hpbmcgcGFpciBjYW4gYmUgdW5pcXVlbHkgaWRlbnRpZmllZCBpbiBhIHNpbXBsZQojIHdheS4KCnN1YiBpbmNyZWFzZV9uZXN0aW5nX2RlcHRoIHsKICAgIG15ICggJHNlbGYsICRhYSwgJHBvcyApID0gQF87CgogICAgIyBHaXZlbjoKICAgICMgICAkYWEgPSBpbnRlZ2VyIGNvZGUgb2YgY29udGFpbmVyIHR5cGUsIDAtMwogICAgIyAgICRwb3MgPSBwb3NpdGlvbiBvZiBjaGFyYWN0ZXIsIGZvciBlcnJvciBtZXNzYWdlCgogICAgIyBVU0VTIEdMT0JBTCBWQVJJQUJMRVM6ICRyY3VycmVudF9kZXB0aCwKICAgICMgJHJjdXJyZW50X3NlcXVlbmNlX251bWJlciwgJHJkZXB0aF9hcnJheSwKICAgICMgJHJzdGFydGluZ19saW5lX29mX2N1cnJlbnRfZGVwdGgsICRzdGF0ZW1lbnRfdHlwZQogICAgbXkgJGNkX2FhID0gKyskcmN1cnJlbnRfZGVwdGgtPlskYWFdOwogICAgJHRvdGFsX2RlcHRoKys7CiAgICAkcnRvdGFsX2RlcHRoLT5bJGFhXVskY2RfYWFdID0gJHRvdGFsX2RlcHRoOwogICAgbXkgJGlucHV0X2xpbmVfbnVtYmVyID0gJHNlbGYtPltfbGFzdF9saW5lX251bWJlcl9dOwogICAgbXkgJGlucHV0X2xpbmUgICAgICAgID0gJHNlbGYtPltfbGluZV9vZl90ZXh0X107CgogICAgIyBTZXF1ZW5jZSBudW1iZXJzIGluY3JlbWVudCBieSBudW1iZXIgb2YgaXRlbXMuICBUaGlzIGtlZXBzCiAgICAjIGEgdW5pcXVlIHNldCBvZiBudW1iZXJzIGJ1dCBzdGlsbCBhbGxvd3MgdGhlIHJlbGF0aXZlIGxvY2F0aW9uCiAgICAjIG9mIGFueSB0eXBlIHRvIGJlIGRldGVybWluZWQuCgogICAgIyBtYWtlIGEgbmV3IHVuaXF1ZSBzZXF1ZW5jZSBudW1iZXIKICAgIG15ICRzZXFubyA9ICRuZXh0X3NlcXVlbmNlX251bWJlcisrOwoKICAgICRyY3VycmVudF9zZXF1ZW5jZV9udW1iZXItPlskYWFdWyRjZF9hYV0gPSAkc2Vxbm87CgogICAgJHJzdGFydGluZ19saW5lX29mX2N1cnJlbnRfZGVwdGgtPlskYWFdWyRjZF9hYV0gPQogICAgICBbICRpbnB1dF9saW5lX251bWJlciwgJGlucHV0X2xpbmUsICRwb3MgXTsKCiAgICBmb3IgbXkgJGJiICggMCAuLiBAY2xvc2luZ19icmFjZV9uYW1lcyAtIDEgKSB7CiAgICAgICAgbmV4dCBpZiAoICRiYiA9PSAkYWEgKTsKICAgICAgICAkcmRlcHRoX2FycmF5LT5bJGFhXVskYmJdWyRjZF9hYV0gPSAkcmN1cnJlbnRfZGVwdGgtPlskYmJdOwogICAgfQoKICAgICMgc2V0IGEgZmxhZyBmb3IgaW5kZW50aW5nIGEgbmVzdGVkIHRlcm5hcnkgc3RhdGVtZW50CiAgICBteSAkaW5kZW50ID0gMDsKICAgIGlmICggJGFhID09IFFVRVNUSU9OX0NPTE9OICkgewogICAgICAgICRybmVzdGVkX3Rlcm5hcnlfZmxhZy0+WyRjZF9hYV0gPSAwOwogICAgICAgIGlmICggJGNkX2FhID4gMSApIHsKICAgICAgICAgICAgaWYgKCAkcm5lc3RlZF90ZXJuYXJ5X2ZsYWctPlsgJGNkX2FhIC0gMSBdID09IDAgKSB7CiAgICAgICAgICAgICAgICBteSAkcGRlcHRoID0gJHJ0b3RhbF9kZXB0aC0+WyRhYV1bICRjZF9hYSAtIDEgXTsKICAgICAgICAgICAgICAgIGlmICggJHBkZXB0aCA9PSAkdG90YWxfZGVwdGggLSAxICkgewogICAgICAgICAgICAgICAgICAgICRpbmRlbnQgPSAxOwogICAgICAgICAgICAgICAgICAgICRybmVzdGVkX3Rlcm5hcnlfZmxhZy0+WyAkY2RfYWEgLSAxIF0gPSAtMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIEZpeCBwYXJ0ICMxIGZvciBnaXQ4Mjogc2F2ZSBsYXN0IHRva2VuIHR5cGUgZm9yIHByb3BhZ2F0aW9uIG9mIHR5cGUgJ1onCiAgICAkcm5lc3RlZF9zdGF0ZW1lbnRfdHlwZS0+WyRhYV1bJGNkX2FhXSA9CiAgICAgIFsgJHN0YXRlbWVudF90eXBlLCAkbGFzdF9ub25ibGFua190eXBlLCAkbGFzdF9ub25ibGFua190b2tlbiBdOwogICAgJHN0YXRlbWVudF90eXBlID0gRU1QVFlfU1RSSU5HOwogICAgcmV0dXJuICggJHNlcW5vLCAkaW5kZW50ICk7Cn0gIyMgZW5kIHN1YiBpbmNyZWFzZV9uZXN0aW5nX2RlcHRoCgpzdWIgaXNfYmFsYW5jZWRfY2xvc2luZ19jb250YWluZXIgewoKICAgIG15ICgkYWEpID0gQF87CgogICAgIyBSZXR1cm4gdHJ1ZSBpZiBhIGNsb3NpbmcgY29udGFpbmVyIGNhbiBnbyBoZXJlIHdpdGhvdXQgZXJyb3IKICAgICMgUmV0dXJuIGZhbHNlIGlmIG5vdAogICAgIyBHaXZlbjoKICAgICMgICAkYWEgPSBpbnRlZ2VyIGNvZGUgb2YgY29udGFpbmVyIHR5cGUsIDAtMwoKICAgICMgY2Fubm90IGNsb3NlIGlmIHRoZXJlIHdhcyBubyBvcGVuaW5nCiAgICBteSAkY2RfYWEgPSAkcmN1cnJlbnRfZGVwdGgtPlskYWFdOwogICAgcmV0dXJuIGlmICggJGNkX2FhIDw9IDAgKTsKCiAgICAjIGNoZWNrIHRoYXQgYW55IG90aGVyIGJyYWNlIHR5cGVzICRiYiBjb250YWluZWQgd2l0aGluIHdvdWxkIGJlIGJhbGFuY2VkCiAgICBmb3IgbXkgJGJiICggMCAuLiBAY2xvc2luZ19icmFjZV9uYW1lcyAtIDEgKSB7CiAgICAgICAgbmV4dCBpZiAoICRiYiA9PSAkYWEgKTsKICAgICAgICByZXR1cm4KICAgICAgICAgIGlmICggJHJkZXB0aF9hcnJheS0+WyRhYV1bJGJiXVskY2RfYWFdICE9ICRyY3VycmVudF9kZXB0aC0+WyRiYl0gKTsKICAgIH0KCiAgICAjIE9LLCBldmVyeXRoaW5nIHdpbGwgYmUgYmFsYW5jZWQKICAgIHJldHVybiAxOwp9ICMjIGVuZCBzdWIgaXNfYmFsYW5jZWRfY2xvc2luZ19jb250YWluZXIKCnN1YiBkZWNyZWFzZV9uZXN0aW5nX2RlcHRoIHsKCiAgICBteSAoICRzZWxmLCAkYWEsICRwb3MgKSA9IEBfOwoKICAgICMgR2l2ZW46CiAgICAjICAgJGFhID0gaW50ZWdlciBjb2RlIG9mIGNvbnRhaW5lciB0eXBlLCAwLTMKICAgICMgICAkcG9zID0gcG9zaXRpb24gb2YgY2hhcmFjdGVyLCBmb3IgZXJyb3IgbWVzc2FnZQoKICAgICMgVVNFUyBHTE9CQUwgVkFSSUFCTEVTOiAkcmN1cnJlbnRfZGVwdGgsCiAgICAjICRyY3VycmVudF9zZXF1ZW5jZV9udW1iZXIsICRyZGVwdGhfYXJyYXksICRyc3RhcnRpbmdfbGluZV9vZl9jdXJyZW50X2RlcHRoCiAgICAjICRzdGF0ZW1lbnRfdHlwZQogICAgbXkgJHNlcW5vICAgICAgICAgICAgID0gMDsKICAgIG15ICRpbnB1dF9saW5lX251bWJlciA9ICRzZWxmLT5bX2xhc3RfbGluZV9udW1iZXJfXTsKICAgIG15ICRpbnB1dF9saW5lICAgICAgICA9ICRzZWxmLT5bX2xpbmVfb2ZfdGV4dF9dOwoKICAgIG15ICRvdXRkZW50ID0gMDsKICAgICR0b3RhbF9kZXB0aC0tOwogICAgbXkgJGNkX2FhID0gJHJjdXJyZW50X2RlcHRoLT5bJGFhXTsKICAgIGlmICggJGNkX2FhID4gMCApIHsKCiAgICAgICAgIyBzZXQgYSBmbGFnIGZvciB1bi1pbmRlbnRpbmcgYWZ0ZXIgc2VlaW5nIGEgbmVzdGVkIHRlcm5hcnkgc3RhdGVtZW50CiAgICAgICAgJHNlcW5vID0gJHJjdXJyZW50X3NlcXVlbmNlX251bWJlci0+WyRhYV1bJGNkX2FhXTsKICAgICAgICBpZiAoICRhYSA9PSBRVUVTVElPTl9DT0xPTiApIHsKICAgICAgICAgICAgJG91dGRlbnQgPSAkcm5lc3RlZF90ZXJuYXJ5X2ZsYWctPlskY2RfYWFdOwogICAgICAgIH0KCiAgICAgICAgIyBGaXggcGFydCAjMiBmb3IgZ2l0ODI6IHVzZSBzYXZlZCB0eXBlIGZvciBwcm9wYWdhdGlvbiBvZiB0eXBlICdaJwogICAgICAgICMgdGhyb3VnaCB0eXBlIEwtUiBicmFjZXMuICBQZXJsIHNlZW1zIHRvIGFsbG93ICR7YmFyZXdvcmR9CiAgICAgICAgIyBhcyBhbiBpbmRpcmVjdCBvYmplY3QsIGJ1dCBub3RoaW5nIG11Y2ggbW9yZSBjb21wbGV4IHRoYW4gdGhhdC4KICAgICAgICAoICRzdGF0ZW1lbnRfdHlwZSwgbXkgJHNhdmVkX3R5cGUsIG15ICRzYXZlZF90b2tlbl91dSApID0KICAgICAgICAgIEB7ICRybmVzdGVkX3N0YXRlbWVudF90eXBlLT5bJGFhXVsgJHJjdXJyZW50X2RlcHRoLT5bJGFhXSBdIH07CiAgICAgICAgaWYgKCAgICRhYSA9PSBCUkFDRQogICAgICAgICAgICAmJiAkc2F2ZWRfdHlwZSBlcSAnWicKICAgICAgICAgICAgJiYgJGxhc3Rfbm9uYmxhbmtfdHlwZSBlcSAndycKICAgICAgICAgICAgJiYgJHJicmFjZV9zdHJ1Y3R1cmFsX3R5cGUtPlskYnJhY2VfZGVwdGhdIGVxICdMJyApCiAgICAgICAgewogICAgICAgICAgICAkbGFzdF9ub25ibGFua190eXBlID0gJHNhdmVkX3R5cGU7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIHRoYXQgYW55IGJyYWNlIHR5cGVzICRiYiBjb250YWluZWQgd2l0aGluIGFyZSBiYWxhbmNlZAogICAgICAgIGZvciBteSAkYmIgKCAwIC4uIEBjbG9zaW5nX2JyYWNlX25hbWVzIC0gMSApIHsKICAgICAgICAgICAgbmV4dCBpZiAoICRiYiA9PSAkYWEgKTsKCiAgICAgICAgICAgIGlmICggJHJkZXB0aF9hcnJheS0+WyRhYV1bJGJiXVskY2RfYWFdICE9ICRyY3VycmVudF9kZXB0aC0+WyRiYl0gKSB7CiAgICAgICAgICAgICAgICBteSAkZGlmZiA9CiAgICAgICAgICAgICAgICAgICRyY3VycmVudF9kZXB0aC0+WyRiYl0gLSAkcmRlcHRoX2FycmF5LT5bJGFhXVskYmJdWyRjZF9hYV07CgogICAgICAgICAgICAgICAgIyBkb24ndCB3aGluZSB0b28gbWFueSB0aW1lcwogICAgICAgICAgICAgICAgbXkgJHNhd19icmFjZV9lcnJvciA9ICRzZWxmLT5nZXRfc2F3X2JyYWNlX2Vycm9yKCk7CiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgJHNhd19icmFjZV9lcnJvciA8PSBNQVhfTkFHX01FU1NBR0VTCgogICAgICAgICAgICAgICAgICAgICMgaWYgdG9vIG1hbnkgY2xvc2luZyB0eXBlcyBoYXZlIG9jY3VycmVkLCB3ZSBwcm9iYWJseQogICAgICAgICAgICAgICAgICAgICMgYWxyZWFkeSBjYXVnaHQgdGhpcyBlcnJvcgogICAgICAgICAgICAgICAgICAgICYmICggKCAkZGlmZiA+IDAgKSB8fCAoICRzYXdfYnJhY2VfZXJyb3IgPD0gMCApICkKICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRzZWxmLT5pbnRlcnJ1cHRfbG9nZmlsZSgpOwogICAgICAgICAgICAgICAgICAgIG15ICRyc2wgPSAkcnN0YXJ0aW5nX2xpbmVfb2ZfY3VycmVudF9kZXB0aC0+WyRhYV1bJGNkX2FhXTsKICAgICAgICAgICAgICAgICAgICBteSAkc2wgID0gJHJzbC0+WzBdOwogICAgICAgICAgICAgICAgICAgIG15ICRyZWwgPSBbICRpbnB1dF9saW5lX251bWJlciwgJGlucHV0X2xpbmUsICRwb3MgXTsKICAgICAgICAgICAgICAgICAgICBteSAkZWwgID0gJHJlbC0+WzBdOwogICAgICAgICAgICAgICAgICAgIG15ICgkZXNzKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkZGlmZiA9PSAxIHx8ICRkaWZmID09IC0xICkgewogICAgICAgICAgICAgICAgICAgICAgICAkZXNzID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGVzcyA9ICdzJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgbXkgJGJuYW1lID0KICAgICAgICAgICAgICAgICAgICAgICggJGRpZmYgPiAwICkKICAgICAgICAgICAgICAgICAgICAgID8gJG9wZW5pbmdfYnJhY2VfbmFtZXNbJGJiXQogICAgICAgICAgICAgICAgICAgICAgOiAkY2xvc2luZ19icmFjZV9uYW1lc1skYmJdOwogICAgICAgICAgICAgICAgICAgICRzZWxmLT53cml0ZV9lcnJvcl9pbmRpY2F0b3JfcGFpciggQHskcnNsfSwgJ14nICk7CiAgICAgICAgICAgICAgICAgICAgbXkgJG1zZyA9IDw8IkVPTSI7CkZvdW5kICRkaWZmIGV4dHJhICRibmFtZSRlc3MgYmV0d2VlbiAkb3BlbmluZ19icmFjZV9uYW1lc1skYWFdIG9uIGxpbmUgJHNsIGFuZCAkY2xvc2luZ19icmFjZV9uYW1lc1skYWFdIG9uIGxpbmUgJGVsCkVPTQoKICAgICAgICAgICAgICAgICAgICBpZiAoICRkaWZmID4gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHJtbCA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgJHJzdGFydGluZ19saW5lX29mX2N1cnJlbnRfZGVwdGgtPlskYmJdCiAgICAgICAgICAgICAgICAgICAgICAgICAgWyAkcmN1cnJlbnRfZGVwdGgtPlskYmJdIF07CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRtbCA9ICRybWwtPlswXTsKICAgICAgICAgICAgICAgICAgICAgICAgJG1zZyAuPQoiICAgIFRoZSBtb3N0IHJlY2VudCB1bi1tYXRjaGVkICRibmFtZSBpcyBvbiBsaW5lICRtbFxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPndyaXRlX2Vycm9yX2luZGljYXRvcl9wYWlyKCBAeyRybWx9LCAnXicgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPndyaXRlX2Vycm9yX2luZGljYXRvcl9wYWlyKCBAeyRyZWx9LCAnXicgKTsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+d2FybmluZygkbXNnKTsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+cmVzdW1lX2xvZ2ZpbGUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRzZWxmLT5pbmNyZW1lbnRfYnJhY2VfZXJyb3IoKTsKICAgICAgICAgICAgICAgIGlmICggJGJiIGVxIEJSQUNFICkgeyAkc2VsZi0+W19zaG93X2luZGVudGF0aW9uX3RhYmxlX10gPSAxIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkcmN1cnJlbnRfZGVwdGgtPlskYWFdLS07CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgbXkgJHNhd19icmFjZV9lcnJvciA9ICRzZWxmLT5nZXRfc2F3X2JyYWNlX2Vycm9yKCk7CiAgICAgICAgaWYgKCAkc2F3X2JyYWNlX2Vycm9yIDw9IE1BWF9OQUdfTUVTU0FHRVMgKSB7CiAgICAgICAgICAgIG15ICRtc2cgPSA8PCJFT00iOwpUaGVyZSBpcyBubyBwcmV2aW91cyAkb3BlbmluZ19icmFjZV9uYW1lc1skYWFdIHRvIG1hdGNoIGEgJGNsb3NpbmdfYnJhY2VfbmFtZXNbJGFhXSBvbiBsaW5lICRpbnB1dF9saW5lX251bWJlcgpFT00KICAgICAgICAgICAgJHNlbGYtPmluZGljYXRlX2Vycm9yKCAkbXNnLCAkaW5wdXRfbGluZV9udW1iZXIsICRpbnB1dF9saW5lLCAkcG9zLAogICAgICAgICAgICAgICAgJ14nICk7CiAgICAgICAgfQogICAgICAgICRzZWxmLT5pbmNyZW1lbnRfYnJhY2VfZXJyb3IoKTsKICAgICAgICBpZiAoICRhYSBlcSBCUkFDRSApIHsgJHNlbGYtPltfc2hvd19pbmRlbnRhdGlvbl90YWJsZV9dID0gMSB9CgogICAgICAgICMga2VlcCB0cmFjayBvZiBlcnJvcnMgaW4gYnJhY2VzIGFsb25lIChpZ25vcmluZyB0ZXJuYXJ5IG5lc3RpbmcgZXJyb3JzKQogICAgICAgICRzZWxmLT5bX3RydWVfYnJhY2VfZXJyb3JfY291bnRfXSsrCiAgICAgICAgICBpZiAoICRjbG9zaW5nX2JyYWNlX25hbWVzWyRhYV0gbmUgIic6JyIgKTsKICAgIH0KICAgIHJldHVybiAoICRzZXFubywgJG91dGRlbnQgKTsKfSAjIyBlbmQgc3ViIGRlY3JlYXNlX25lc3RpbmdfZGVwdGgKCnN1YiBjaGVja19maW5hbF9uZXN0aW5nX2RlcHRocyB7CgogICAgIyBVU0VTIEdMT0JBTCBWQVJJQUJMRVM6ICRyY3VycmVudF9kZXB0aCwgJHJzdGFydGluZ19saW5lX29mX2N1cnJlbnRfZGVwdGgKICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgZm9yIG15ICRhYSAoIDAgLi4gQGNsb3NpbmdfYnJhY2VfbmFtZXMgLSAxICkgewoKICAgICAgICBteSAkY2RfYWEgPSAkcmN1cnJlbnRfZGVwdGgtPlskYWFdOwogICAgICAgIGlmICgkY2RfYWEpIHsKICAgICAgICAgICAgbXkgJHJzbCA9ICRyc3RhcnRpbmdfbGluZV9vZl9jdXJyZW50X2RlcHRoLT5bJGFhXVskY2RfYWFdOwogICAgICAgICAgICBteSAkc2wgID0gJHJzbC0+WzBdOwogICAgICAgICAgICBteSAkbXNnID0gPDwiRU9NIjsKRmluYWwgbmVzdGluZyBkZXB0aCBvZiAkb3BlbmluZ19icmFjZV9uYW1lc1skYWFdcyBpcyAkY2RfYWEKVGhlIG1vc3QgcmVjZW50IHVuLW1hdGNoZWQgJG9wZW5pbmdfYnJhY2VfbmFtZXNbJGFhXSBpcyBvbiBsaW5lICRzbApFT00KICAgICAgICAgICAgJHNlbGYtPmluZGljYXRlX2Vycm9yKCAkbXNnLCBAeyRyc2x9LCAnXicgKTsKICAgICAgICAgICAgJHNlbGYtPmluY3JlbWVudF9icmFjZV9lcnJvcigpOwogICAgICAgICAgICBpZiAoICRhYSBlcSBCUkFDRSApIHsgJHNlbGYtPltfc2hvd19pbmRlbnRhdGlvbl90YWJsZV9dID0gMSB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgY2hlY2tfZmluYWxfbmVzdGluZ19kZXB0aHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgVG9rZW5pemVyIHJvdXRpbmVzIGZvciBsb29raW5nIGFoZWFkIGluIGlucHV0IHN0cmVhbQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKc3ViIHBlZWtfYWhlYWRfZm9yX25fbm9uYmxhbmtfcHJlX3Rva2VucyB7CgogICAgbXkgKCAkc2VsZiwgJG1heF9wcmV0b2tlbnMgKSA9IEBfOwoKICAgICMgR2l2ZW46CiAgICAjICAgJG1heF9wcmV0b2tlbnMgPSBudW1iZXIgb2YgcHJldG9rZW5zIHdhbnRlZAogICAgIyBSZXR1cm46CiAgICAjICAgbmV4dCAkbWF4X3ByZXRva2VucyBwcmV0b2tlbnMgaWYgdGhleSBleGlzdAogICAgIyAgIHVuZGVmJ3MgaWYgaGl0cyBlb2Ygd2l0aG91dCBzZWVpbmcgYW55IHByZXRva2VucwoKICAgICMgVVNFUyBHTE9CQUwgVkFSSUFCTEVTOiAobm9uZSkKICAgIG15ICRsaW5lOwogICAgbXkgJGkgPSAwOwogICAgbXkgKCAkcnByZV90b2tlbnMsICRybWFwLCAkcnByZV90eXBlcyApOwoKICAgIHdoaWxlICggZGVmaW5lZCggJGxpbmUgPSAkc2VsZi0+cGVla19haGVhZCggJGkrKyApICkgKSB7CiAgICAgICAgJGxpbmUgPX4gcy9eXHMrLy87ICAgICAgICAgICAgICAgICAjIHRyaW0gbGVhZGluZyBibGFua3MKICAgICAgICBuZXh0IGlmICggbGVuZ3RoKCRsaW5lKSA8PSAwICk7ICAgICMgc2tpcCBibGFuawogICAgICAgIG5leHQgaWYgKCAkbGluZSA9fiAvXiMvICk7ICAgICAgICAgIyBza2lwIGNvbW1lbnQKICAgICAgICAoICRycHJlX3Rva2VucywgJHJtYXAsICRycHJlX3R5cGVzICkgPQogICAgICAgICAgcHJlX3Rva2VuaXplKCAkbGluZSwgJG1heF9wcmV0b2tlbnMgKTsKICAgICAgICBsYXN0OwogICAgfSAjIyBlbmQgd2hpbGUgKCBkZWZpbmVkKCAkbGluZSA9IC4uLikpCiAgICByZXR1cm4gKCAkcnByZV90b2tlbnMsICRycHJlX3R5cGVzICk7Cn0gIyMgZW5kIHN1YiBwZWVrX2FoZWFkX2Zvcl9uX25vbmJsYW5rX3ByZV90b2tlbnMKCiMgbG9vayBhaGVhZCBmb3IgbmV4dCBub24tYmxhbmssIG5vbi1jb21tZW50IGxpbmUgb2YgY29kZQpzdWIgcGVla19haGVhZF9mb3Jfbm9uYmxhbmtfdG9rZW4gewoKICAgIG15ICggJHNlbGYsICRydG9rZW5zLCAkbWF4X3Rva2VuX2luZGV4ICkgPSBAXzsKCiAgICAjIEdpdmVuOgogICAgIyAgICRydG9rZW5zID0gcmVmIHRvIHRva2VuIGFycmF5CiAgICAjICAgJG1heF90b2tlbl9pbmRleCA9IGluZGV4IG9mIGxhc3QgdG9rZW4gaW4gJHJ0b2tlbnMKICAgICMgVGFzazoKICAgICMgICBVcGRhdGUgJHJ0b2tlbnMgd2l0aCBuZXh0IG5vbmJsYW5rIHRva2VuCgogICAgIyBVU0VTIEdMT0JBTCBWQVJJQUJMRVM6IChub25lKQogICAgbXkgJGxpbmU7CiAgICBteSAkaSA9IDA7CgogICAgd2hpbGUgKCBkZWZpbmVkKCAkbGluZSA9ICRzZWxmLT5wZWVrX2FoZWFkKCAkaSsrICkgKSApIHsKICAgICAgICAkbGluZSA9fiBzL15ccysvLzsgICAgICAgICAgICAgICAgICMgdHJpbSBsZWFkaW5nIGJsYW5rcwogICAgICAgIG5leHQgaWYgKCBsZW5ndGgoJGxpbmUpIDw9IDAgKTsgICAgIyBza2lwIGJsYW5rCiAgICAgICAgbmV4dCBpZiAoICRsaW5lID1+IC9eIy8gKTsgICAgICAgICAjIHNraXAgY29tbWVudAoKICAgICAgICAjIFVwZGF0ZWQgZnJvbSAyIHRvIDMgdG8gZ2V0IHRyaWdyYXBocywgYWRkZWQgZm9yIGNhc2UgYjExNzUKICAgICAgICBteSAoICRydG9rLCAkcm1hcF91dSwgJHJ0eXBlX3V1ICkgPSBwcmVfdG9rZW5pemUoICRsaW5lLCAzICk7CiAgICAgICAgbXkgJGogPSAkbWF4X3Rva2VuX2luZGV4ICsgMTsKCiAgICAgICAgZm9yZWFjaCBteSAkdG9rICggQHskcnRva30gKSB7CiAgICAgICAgICAgIGxhc3QgaWYgKCAkdG9rID1+ICJcbiIgKTsKICAgICAgICAgICAgJHJ0b2tlbnMtPlsgKyskaiBdID0gJHRvazsKICAgICAgICB9CiAgICAgICAgbGFzdDsKICAgIH0gIyMgZW5kIHdoaWxlICggZGVmaW5lZCggJGxpbmUgPSAuLi4pKQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgcGVla19haGVhZF9mb3Jfbm9uYmxhbmtfdG9rZW4KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgVG9rZW5pemVyIGd1ZXNzaW5nIHJvdXRpbmVzIGZvciBhbWJpZ3VvdXMgc2l0dWF0aW9ucwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKc3ViIGd1ZXNzX2lmX3BhdHRlcm5fb3JfY29uZGl0aW9uYWwgewoKICAgIG15ICggJHNlbGYsICRpLCAkcnRva2VucywgJHJ0b2tlbl90eXBlLCAkcnRva2VuX21hcF91dSwgJG1heF90b2tlbl9pbmRleCApCiAgICAgID0gQF87CgogICAgIyBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHdoZW4gd2UgaGF2ZSBlbmNvdW50ZXJlZCBhID8gZm9sbG93aW5nIGFuCiAgICAjIHVua25vd24gYmFyZXdvcmQsIGFuZCB3ZSBtdXN0IGRlY2lkZSBpZiBpdCBzdGFydHMgYSBwYXR0ZXJuIG9yIG5vdAogICAgIyBHaXZlbjoKICAgICMgICAkaSAtIHRva2VuIGluZGV4IG9mIHRoZSA/IHN0YXJ0aW5nIHBvc3NpYmxlIHBhdHRlcm4KICAgICMgICAkcnRva2VucyAuLi4gPSB0aGUgdG9rZW4gYXJyYXlzCiAgICAjIFJldHVybjoKICAgICMgICAkaXNfcGF0dGVybiA9IDAgaWYgcHJvYmFibHkgbm90IHBhdHRlcm4sICA9MSBpZiBwcm9iYWJseSBhIHBhdHRlcm4KICAgICMgICBtc2cgPSBhIHdhcm5pbmcgb3IgZGlhZ25vc3RpYyBtZXNzYWdlCgogICAgIyBVU0VTIEdMT0JBTCBWQVJJQUJMRVM6ICRsYXN0X25vbmJsYW5rX3Rva2VuCgogICAgbXkgJGlzX3BhdHRlcm4gPSAwOwogICAgbXkgJG1zZyAgICAgICAgPSAiZ3Vlc3NpbmcgdGhhdCA/IGFmdGVyICckbGFzdF9ub25ibGFua190b2tlbicgc3RhcnRzIGEgIjsKCiAgICBpZiAoICRpID49ICRtYXhfdG9rZW5faW5kZXggKSB7CiAgICAgICAgJG1zZyAuPSAiY29uZGl0aW9uYWwgKG5vIGVuZCB0byBwYXR0ZXJuIGZvdW5kIG9uIHRoZSBsaW5lKVxuIjsKICAgICAgICAkaXNfcGF0dGVybiA9IDA7CiAgICAgICAgcmV0dXJuICggJGlzX3BhdHRlcm4sICRtc2cgKTsKICAgIH0KCiAgICBteSAkaWJlZyA9ICRpOwogICAgJGkgPSAkaWJlZyArIDE7CiAgICAjI215ICRuZXh0X3Rva2VuID0gJHJ0b2tlbnMtPlskaV07ICAgICMgZmlyc3QgdG9rZW4gYWZ0ZXIgPwoKICAgICMgbG9vayBmb3IgYSBwb3NzaWJsZSBlbmRpbmcgPyBvbiB0aGlzIGxpbmUuLgogICAgbXkgJGluX3F1b3RlICAgICAgICA9IDE7CiAgICBteSAkcXVvdGVfZGVwdGggICAgID0gMDsKICAgIG15ICRxdW90ZV9jaGFyYWN0ZXIgPSBFTVBUWV9TVFJJTkc7CiAgICBteSAkcXVvdGVfcG9zICAgICAgID0gMDsKICAgIG15ICRxdW90ZWRfc3RyaW5nOwogICAgKAoKICAgICAgICAkaSwKICAgICAgICAkaW5fcXVvdGUsCiAgICAgICAgJHF1b3RlX2NoYXJhY3RlciwKICAgICAgICAkcXVvdGVfcG9zLAogICAgICAgICRxdW90ZV9kZXB0aCwKICAgICAgICAkcXVvdGVkX3N0cmluZywKCiAgICApID0gJHNlbGYtPmZvbGxvd19xdW90ZWRfc3RyaW5nKAoKICAgICAgICAkaWJlZywKICAgICAgICAkaW5fcXVvdGUsCiAgICAgICAgJHJ0b2tlbnMsCiAgICAgICAgJHJ0b2tlbl90eXBlLAogICAgICAgICRxdW90ZV9jaGFyYWN0ZXIsCiAgICAgICAgJHF1b3RlX3BvcywKICAgICAgICAkcXVvdGVfZGVwdGgsCiAgICAgICAgJG1heF90b2tlbl9pbmRleCwKCiAgICApOwoKICAgIGlmICgkaW5fcXVvdGUpIHsKCiAgICAgICAgIyB3ZSBkaWRuJ3QgZmluZCBhbiBlbmRpbmcgPyBvbiB0aGlzIGxpbmUsCiAgICAgICAgIyBzbyB3ZSBiaWFzIHRvd2FyZHMgY29uZGl0aW9uYWwKICAgICAgICAkaXNfcGF0dGVybiA9IDA7CiAgICAgICAgJG1zZyAuPSAiY29uZGl0aW9uYWwgKG5vIGVuZGluZyA/IG9uIHRoaXMgbGluZSlcbiI7CiAgICAgICAgcmV0dXJuICggJGlzX3BhdHRlcm4sICRtc2cgKTsKICAgIH0KCiAgICAjIHdlIGZvdW5kIGFuIGVuZGluZyA/LCBzbyB3ZSBiaWFzIHRvd2FyZHMgYSBwYXR0ZXJuCgogICAgIyBXYXRjaCBvdXQgZm9yIGFuIGVuZGluZyA/IGluIHF1b3RlcywgbGlrZSB0aGlzCiAgICAjICAgIG15ICRjYXNlX2ZsYWcgPSBGaWxlOjpTcGVjLT5jYXNlX3RvbGVyYW50ID8gJyg/aSknIDogJyc7CiAgICBteSAkc19xdW90ZSA9IDA7CiAgICBteSAkZF9xdW90ZSA9IDA7CiAgICBteSAkY29sb25zICA9IDA7CiAgICBmb3JlYWNoIG15ICRpaSAoICRpYmVnICsgMSAuLiAkaSAtIDEgKSB7CiAgICAgICAgbXkgJHRvayA9ICRydG9rZW5zLT5bJGlpXTsKICAgICAgICBpZiAoICR0b2sgZXEgIjoiICkgeyAkY29sb25zKysgfQogICAgICAgIGlmICggJHRvayBlcSAiJyIgKSB7ICRzX3F1b3RlKysgfQogICAgICAgIGlmICggJHRvayBlcSAnIicgKSB7ICRkX3F1b3RlKysgfQogICAgfQogICAgaWYgKCAkc19xdW90ZSAlIDIgfHwgJGRfcXVvdGUgJSAyIHx8ICRjb2xvbnMgKSB7CiAgICAgICAgJGlzX3BhdHRlcm4gPSAwOwogICAgICAgICRtc2cgLj0gImZvdW5kIGVuZGluZyA/IGJ1dCB1bmJhbGFuY2VkIHF1b3RlIGNoYXJzXG4iOwogICAgICAgIHJldHVybiAoICRpc19wYXR0ZXJuLCAkbXNnICk7CiAgICB9CiAgICBpZiAoICRzZWxmLT5wYXR0ZXJuX2V4cGVjdGVkKCAkaSwgJHJ0b2tlbnMsICRtYXhfdG9rZW5faW5kZXggKSA+PSAwICkgewogICAgICAgICRpc19wYXR0ZXJuID0gMTsKICAgICAgICAkbXNnIC49ICJwYXR0ZXJuIChmb3VuZCBlbmRpbmcgPyBhbmQgcGF0dGVybiBleHBlY3RlZClcbiI7CiAgICAgICAgcmV0dXJuICggJGlzX3BhdHRlcm4sICRtc2cgKTsKICAgIH0KICAgICRtc2cgLj0gInBhdHRlcm4gKHVuY2VydGFpbiwgYnV0IGZvdW5kIGVuZGluZyA/KVxuIjsKICAgIHJldHVybiAoICRpc19wYXR0ZXJuLCAkbXNnICk7Cn0gIyMgZW5kIHN1YiBndWVzc19pZl9wYXR0ZXJuX29yX2NvbmRpdGlvbmFsCgpteSAlaXNfa25vd25fY29uc3RhbnQ7Cm15ICVpc19rbm93bl9mdW5jdGlvbjsKCkJFR0lOIHsKCiAgICAjIENvbnN0YW50cyBsaWtlICdwaScgaW4gVHJpZy5wbSBhcmUgY29tbW9uCiAgICBteSBAcSA9IHF3KCBwaSBwaTIgcGk0IHBpcDIgcGlwNCApOwogICAgQGlzX2tub3duX2NvbnN0YW50e0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgIyBwYXJlbmxlc3MgY2FsbHMgb2YgJ29rJyBhcmUgY29tbW9uCiAgICBAcSA9IHF3KCBvayApOwogICAgQGlzX2tub3duX2Z1bmN0aW9ue0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7Cn0gIyMgZW5kIEJFR0lOCgpzdWIgZ3Vlc3NfaWZfcGF0dGVybl9vcl9kaXZpc2lvbiB7CgogICAgbXkgKCAkc2VsZiwgJGksICRydG9rZW5zLCAkcnRva2VuX3R5cGUsICRydG9rZW5fbWFwLCAkbWF4X3Rva2VuX2luZGV4ICkgPQogICAgICBAXzsKCiAgICAjIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbiB3ZSBoYXZlIGVuY291bnRlcmVkIGEgLyBmb2xsb3dpbmcgYW4KICAgICMgdW5rbm93biBiYXJld29yZCwgYW5kIHdlIG11c3QgZGVjaWRlIGlmIGl0IHN0YXJ0cyBhIHBhdHRlcm4gb3IgaXMgYQogICAgIyBkaXZpc2lvbi4KICAgICMgR2l2ZW46CiAgICAjICAgJGkgLSB0b2tlbiBpbmRleCBvZiB0aGUgLyBzdGFydGluZyBwb3NzaWJsZSBwYXR0ZXJuCiAgICAjICAgJHJ0b2tlbnMgLi4uID0gdGhlIHRva2VuIGFycmF5cwogICAgIyBSZXR1cm46CiAgICAjICAgJGlzX3BhdHRlcm4gPSAwIGlmIHByb2JhYmx5IGRpdmlzaW9uLCAgPTEgaWYgcHJvYmFibHkgYSBwYXR0ZXJuCiAgICAjICAgbXNnID0gYSB3YXJuaW5nIG9yIGRpYWdub3N0aWMgbWVzc2FnZQogICAgIyBVU0VTIEdMT0JBTCBWQVJJQUJMRVM6ICRsYXN0X25vbmJsYW5rX3Rva2VuCiAgICBteSAkbXNnICAgICAgICA9ICJndWVzc2luZyB0aGF0IC8gYWZ0ZXIgJyRsYXN0X25vbmJsYW5rX3Rva2VuJyBzdGFydHMgYSAiOwogICAgbXkgJGliZWcgICAgICAgPSAkaTsKICAgIG15ICRpc19wYXR0ZXJuID0gMDsKCiAgICBteSAkZGl2aWRlX3Bvc3NpYmxlID0KICAgICAgJHNlbGYtPmlzX3Bvc3NpYmxlX251bWVyYXRvciggJGksICRydG9rZW5zLCAkbWF4X3Rva2VuX2luZGV4ICk7CgogICAgaWYgKCAkZGl2aWRlX3Bvc3NpYmxlIDwgMCApIHsKICAgICAgICAkbXNnIC49ICJwYXR0ZXJuIChkaXZpc2lvbiBub3QgcG9zc2libGUgaGVyZSlcbiI7CiAgICAgICAgJGlzX3BhdHRlcm4gPSAxOwogICAgICAgICRzZWxmLT5zYXdfYmFyZXdvcmRfZnVuY3Rpb24oJGxhc3Rfbm9uYmxhbmtfdG9rZW4pOwogICAgICAgIHJldHVybiAoICRpc19wYXR0ZXJuLCAkbXNnICk7CiAgICB9CiAgICBpZiAoICRkaXZpZGVfcG9zc2libGUgPT0gNCApIHsKICAgICAgICAkbXNnIC49ICJkaXZpc2lvbiAocGF0dGVybiBub3QgcG9zc2libGUgaGVyZSlcbiI7CiAgICAgICAgJGlzX3BhdHRlcm4gPSAwOwogICAgICAgIHJldHVybiAoICRpc19wYXR0ZXJuLCAkbXNnICk7CiAgICB9CgogICAgIyBhbnl0aGluZyBsZWZ0IG9uIGxpbmU/CiAgICBpZiAoICRpID49ICRtYXhfdG9rZW5faW5kZXggKSB7CiAgICAgICAgJG1zZyAuPSAiZGl2aXNpb24gKGxpbmUgZW5kcyB3aXRoIHRoaXMgLylcbiI7CiAgICAgICAgJGlzX3BhdHRlcm4gPSAwOwogICAgICAgIHJldHVybiAoICRpc19wYXR0ZXJuLCAkbXNnICk7CiAgICB9CgogICAgIyBxdWljayBjaGVjayBmb3Igbm8gcGF0dGVybi1lbmRpbmcgc2xhc2ggb24gdGhpcyBsaW5lCiAgICBteSAkcG9zX2JlZyAgICA9ICRydG9rZW5fbWFwLT5bJGliZWddOwogICAgbXkgJGlucHV0X2xpbmUgPSAkc2VsZi0+W19saW5lX29mX3RleHRfXTsKICAgIGlmICggaW5kZXgoICRpbnB1dF9saW5lLCAnLycsICRwb3NfYmVnICsgMSApIDwgMCApIHsKICAgICAgICAkbXNnIC49ICJkaXZpc2lvbiAobm8gZW5kaW5nIC8gb24gdGhpcyBsaW5lKVxuIjsKICAgICAgICAkaXNfcGF0dGVybiA9IDA7CiAgICAgICAgcmV0dXJuICggJGlzX3BhdHRlcm4sICRtc2cgKTsKICAgIH0KCiAgICAjIFNldHVwIHNwYWNpbmcgcnVsZSBiZWZvcmUgd2UgY2hhbmdlICRpIGJlbG93Li4KICAgICRpID0gJGliZWcgKyAxOwogICAgbXkgJG5leHRfdG9rZW4gPSAkcnRva2Vucy0+WyRpXTsgICAgIyBmaXJzdCB0b2tlbiBhZnRlciBzbGFzaAoKICAgICMgVGhlcmUgYXJlIGZvdXIgcG9zc2libGUgc3BhY2luZ3MgYXJvdW5kIHRoZSBmaXJzdCBzbGFzaDoKICAgICMKICAgICMgICAgIHJldHVybiBwaS90d287Iy87ICAgICAtLy0KICAgICMgICAgIHJldHVybiBwaS8gdHdvOyMvOyAgICAtLysKICAgICMgICAgIHJldHVybiBwaSAvIHR3bzsjLzsgICArLysKICAgICMgICAgIHJldHVybiBwaSAvdHdvOyMvOyAgICArLy0gICA8LS0gcG9zc2libGUgcGF0dGVybgogICAgIwogICAgIyBTcGFjaW5nIHJ1bGU6IGEgc3BhY2UgYmVmb3JlIHRoZSBzbGFzaCBidXQgbm90IGFmdGVyIHRoZSBzbGFzaAogICAgIyB1c3VhbGx5IGluZGljYXRlcyBhIHBhdHRlcm4uICBXZSBjYW4gdXNlIHRoaXMgdG8gYnJlYWsgdGllcy4KICAgICMgTm90ZTogcGVybCBzZWVtcyB0byB0YWtlIGEgbmV3bGluZSBhcyBhIHNwYWNlIGluIHRoaXMgcnVsZSAoYzI0MykKICAgIG15ICRzcGFjZV9iZWZvcmUgICAgICAgICAgPSAkaSA8IDIgfHwgJHJ0b2tlbnMtPlsgJGkgLSAyIF0gPX4gbS9eXHMvOwogICAgbXkgJHNwYWNlX2FmdGVyICAgICAgICAgICA9ICRuZXh0X3Rva2VuICAgICAgICAgICAgICAgICAgICA9fiBtL15ccy87CiAgICBteSAkaXNfcGF0dGVybl9ieV9zcGFjaW5nID0gJHNwYWNlX2JlZm9yZSAmJiAhJHNwYWNlX2FmdGVyOwoKICAgICMgTWFrZSBhbiBhY2N1cmF0ZSBzZWFyY2ggZm9yIGEgcG9zc2libGUgdGVybWluYXRpbmcgLyBvbiB0aGlzIGxpbmUuLgogICAgbXkgJGluX3F1b3RlICAgICAgICA9IDE7CiAgICBteSAkcXVvdGVfZGVwdGggICAgID0gMDsKICAgIG15ICRxdW90ZV9jaGFyYWN0ZXIgPSBFTVBUWV9TVFJJTkc7CiAgICBteSAkcXVvdGVfcG9zICAgICAgID0gMDsKICAgIG15ICRxdW90ZWRfc3RyaW5nOwogICAgKAoKICAgICAgICAkaSwKICAgICAgICAkaW5fcXVvdGUsCiAgICAgICAgJHF1b3RlX2NoYXJhY3RlciwKICAgICAgICAkcXVvdGVfcG9zLAogICAgICAgICRxdW90ZV9kZXB0aCwKICAgICAgICAkcXVvdGVkX3N0cmluZwogICAgICApCiAgICAgID0gJHNlbGYtPmZvbGxvd19xdW90ZWRfc3RyaW5nKAoKICAgICAgICAkaWJlZywKICAgICAgICAkaW5fcXVvdGUsCiAgICAgICAgJHJ0b2tlbnMsCiAgICAgICAgJHJ0b2tlbl90eXBlLAogICAgICAgICRxdW90ZV9jaGFyYWN0ZXIsCiAgICAgICAgJHF1b3RlX3BvcywKICAgICAgICAkcXVvdGVfZGVwdGgsCiAgICAgICAgJG1heF90b2tlbl9pbmRleAogICAgICApOwoKICAgICMgaWYgd2UgZGlkbid0IGZpbmQgYW4gZW5kaW5nIC8gb24gdGhpcyBsaW5lIC4uCiAgICBpZiAoJGluX3F1b3RlKSB7CiAgICAgICAgJGlzX3BhdHRlcm4gPSAwOwogICAgICAgICRtc2cgLj0gImRpdmlzaW9uIChubyBlbmRpbmcgLyBvbiB0aGlzIGxpbmUpXG4iOwogICAgICAgIHJldHVybiAoICRpc19wYXR0ZXJuLCAkbXNnICk7CiAgICB9CgogICAgIyB3ZSBmb3VuZCBhbiBlbmRpbmcgLywgc2VlIGlmIGl0IG1pZ2h0IHRlcm1pbmF0ZSBhIHBhdHRlcm4KICAgIG15ICRwYXR0ZXJuX2V4cGVjdGVkID0KICAgICAgJHNlbGYtPnBhdHRlcm5fZXhwZWN0ZWQoICRpLCAkcnRva2VucywgJG1heF90b2tlbl9pbmRleCApOwoKICAgIGlmICggJHBhdHRlcm5fZXhwZWN0ZWQgPCAwICkgewogICAgICAgICRpc19wYXR0ZXJuID0gMDsKICAgICAgICAkbXNnIC49ICJkaXZpc2lvbiAocGF0dGVybiBub3QgcG9zc2libGUpXG4iOwogICAgICAgIHJldHVybiAoICRpc19wYXR0ZXJuLCAkbXNnICk7CiAgICB9CgogICAgIyBCb3RoIHBhdHRlcm4gYW5kIGRpdmlkZSBjYW4gd29yayBoZXJlLi4uCiAgICAjIENoZWNrIGZvciBrbm93biBjb25zdGFudHMgaW4gdGhlIG51bWVyYXRvciwgbGlrZSAncGknCiAgICBpZiAoICRpc19rbm93bl9jb25zdGFudHskbGFzdF9ub25ibGFua190b2tlbn0gKSB7CiAgICAgICAgJG1zZyAuPQoiZGl2aXNpb24gKHBhdHRlcm4gd29ya3MgdG9vIGJ1dCBzYXcga25vd24gY29uc3RhbnQgJyRsYXN0X25vbmJsYW5rX3Rva2VuJylcbiI7CiAgICAgICAgJGlzX3BhdHRlcm4gPSAwOwogICAgICAgIHJldHVybiAoICRpc19wYXR0ZXJuLCAkbXNnICk7CiAgICB9CgogICAgIyBDaGVjayBmb3Iga25vd24gZnVuY3Rpb25zIGxpa2UgJ29rJwogICAgaWYgKCAkaXNfa25vd25fZnVuY3Rpb257JGxhc3Rfbm9uYmxhbmtfdG9rZW59ICkgewogICAgICAgICRtc2cgLj0gInBhdHRlcm4gKGRpdmlzaW9uIHdvcmtzIHRvbyBidXQgc2F3ICckbGFzdF9ub25ibGFua190b2tlbicpXG4iOwogICAgICAgICRpc19wYXR0ZXJuID0gMTsKICAgICAgICByZXR1cm4gKCAkaXNfcGF0dGVybiwgJG1zZyApOwogICAgfQoKICAgICMgSWYgb25lIHJ1bGUgaXMgbW9yZSBwcm9iYWJsZSwgdXNlIGl0CiAgICBpZiAoICRkaXZpZGVfcG9zc2libGUgPiAkcGF0dGVybl9leHBlY3RlZCApIHsKICAgICAgICAkbXNnIC49ICJkaXZpc2lvbiAobW9yZSBsaWtlbHkgYmFzZWQgb24gZm9sbG93aW5nIHRva2VucylcbiI7CiAgICAgICAgJGlzX3BhdHRlcm4gPSAwOwogICAgICAgIHJldHVybiAoICRpc19wYXR0ZXJuLCAkbXNnICk7CiAgICB9CgogICAgIyBmaW5hbGx5LCB3ZSBoYXZlIHRvIHVzZSB0aGUgc3BhY2luZyBydWxlCiAgICBpZiAoJGlzX3BhdHRlcm5fYnlfc3BhY2luZykgewogICAgICAgICRtc2cgLj0gInBhdHRlcm4gKGd1ZXNzIG9uIHNwYWNpbmcsIGJ1dCBkaXZpc2lvbiBwb3NzaWJsZSB0b28pXG4iOwogICAgICAgICRpc19wYXR0ZXJuID0gMTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRtc2cgLj0gImRpdmlzaW9uIChndWVzcyBvbiBzcGFjaW5nLCBidXQgcGF0dGVybiBpcyBwb3NzaWJsZSB0b28pXG4iOwogICAgICAgICRpc19wYXR0ZXJuID0gMDsKICAgIH0KCiAgICByZXR1cm4gKCAkaXNfcGF0dGVybiwgJG1zZyApOwp9ICMjIGVuZCBzdWIgZ3Vlc3NfaWZfcGF0dGVybl9vcl9kaXZpc2lvbgoKc3ViIGd1ZXNzX2lmX2hlcmVfZG9jIHsKCiAgICBteSAoICRzZWxmLCAkbmV4dF90b2tlbiApID0gQF87CgogICAgIyBUcnkgdG8gcmVzb2x2ZSBoZXJlLWRvYyB2cy4gc2hpZnQgYnkgbG9va2luZyBhaGVhZCBmb3IKICAgICMgbm9uLWNvZGUgb3IgdGhlIGVuZCB0b2tlbiAoY3VycmVudGx5IG9ubHkgbG9va3MgZm9yIGVuZCB0b2tlbikKCiAgICAjIEdpdmVuOgogICAgIyAgICRuZXh0X3Rva2VuID0gdGhlIG5leHQgdG9rZW4gYWZ0ZXIgJzw8JwoKICAgICMgUmV0dXJuOgogICAgIyAgIDEgaWYgaXQgaXMgcHJvYmFibHkgYSBoZXJlIGRvYwogICAgIyAgIDAgaWYgbm90CgogICAgIyBVU0VTIEdMT0JBTCBWQVJJQUJMRVM6ICRjdXJyZW50X3BhY2thZ2UgJHJpc19jb25zdGFudCwKCiAgICAjIFRoaXMgaXMgaG93IG1hbnkgbGluZXMgd2Ugd2lsbCBzZWFyY2ggZm9yIGEgdGFyZ2V0IGFzIHBhcnQgb2YgdGhlCiAgICAjIGd1ZXNzaW5nIHN0cmF0ZWd5LiAgVGhlcmUgaXMgcHJvYmFibHkgbGl0dGxlIHJlYXNvbiB0byBjaGFuZ2UgaXQuCiAgICBteSAkSEVSRV9ET0NfV0lORE9XID0gNDA7CgogICAgbXkgJGhlcmVfZG9jX2V4cGVjdGVkID0gMDsKICAgIG15ICRsaW5lOwogICAgbXkgJGsgICA9IDA7CiAgICBteSAkbXNnID0gImNoZWNraW5nIDw8IjsKCiAgICB3aGlsZSAoIGRlZmluZWQoICRsaW5lID0gJHNlbGYtPnBlZWtfYWhlYWQoICRrKysgKSApICkgewogICAgICAgIGNob21wICRsaW5lOwogICAgICAgIGlmICggJGxpbmUgZXEgJG5leHRfdG9rZW4gKSB7CiAgICAgICAgICAgICRtc2cgLj0gIiAtLSBmb3VuZCB0YXJnZXQgJG5leHRfdG9rZW4gYWhlYWQgJGsgbGluZXNcbiI7CiAgICAgICAgICAgICRoZXJlX2RvY19leHBlY3RlZCA9IDE7ICAgICMgZ290IGl0CiAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgfQogICAgICAgIGxhc3QgaWYgKCAkayA+PSAkSEVSRV9ET0NfV0lORE9XICk7CiAgICB9ICMjIGVuZCB3aGlsZSAoIGRlZmluZWQoICRsaW5lID0gLi4uKSkKCiAgICBpZiAoICEkaGVyZV9kb2NfZXhwZWN0ZWQgKSB7CgogICAgICAgIGlmICggIWRlZmluZWQoJGxpbmUpICkgewogICAgICAgICAgICAkaGVyZV9kb2NfZXhwZWN0ZWQgPSAtMTsgICAgIyBoaXQgZW9mIHdpdGhvdXQgc2VlaW5nIHRhcmdldAogICAgICAgICAgICAkbXNnIC49ICIgLS0gbXVzdCBiZSBzaGlmdDsgdGFyZ2V0ICRuZXh0X3Rva2VuIG5vdCBpbiBmaWxlXG4iOwoKICAgICAgICB9CiAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN0aWxsIHVuc3VyZS4udGFraW5nIGEgd2lsZCBndWVzcwoKICAgICAgICAgICAgaWYgKCAhJHJpc19jb25zdGFudC0+eyRjdXJyZW50X3BhY2thZ2V9eyRuZXh0X3Rva2VufSApIHsKICAgICAgICAgICAgICAgICRoZXJlX2RvY19leHBlY3RlZCA9IDE7CiAgICAgICAgICAgICAgICAkbXNnIC49CiAgICAgICAgICAgICAgICAgICIgLS0gZ3Vlc3NpbmcgaXQncyBhIGhlcmUtZG9jICgkbmV4dF90b2tlbiBub3QgYSBjb25zdGFudClcbiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkbXNnIC49CiAgICAgICAgICAgICAgICAgICIgLS0gZ3Vlc3NpbmcgaXQncyBhIHNoaWZ0ICgkbmV4dF90b2tlbiBpcyBhIGNvbnN0YW50KVxuIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgICRzZWxmLT53cml0ZV9sb2dmaWxlX2VudHJ5KCRtc2cpOwogICAgcmV0dXJuICRoZXJlX2RvY19leHBlY3RlZDsKfSAjIyBlbmQgc3ViIGd1ZXNzX2lmX2hlcmVfZG9jCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFRva2VuaXplciBSb3V0aW5lcyBmb3Igc2Nhbm5pbmcgaWRlbnRpZmllcnMgYW5kIHJlbGF0ZWQgaXRlbXMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnN1YiBzY2FuX2JhcmVfaWRlbnRpZmllcl9kbyB7CgogICAgbXkgKAoKICAgICAgICAkc2VsZiwKCiAgICAgICAgJGlucHV0X2xpbmUsCiAgICAgICAgJGksCiAgICAgICAgJHRvaywKICAgICAgICAkdHlwZSwKICAgICAgICAkcHJvdG90eXBlLAogICAgICAgICRydG9rZW5fbWFwLAogICAgICAgICRtYXhfdG9rZW5faW5kZXgKCiAgICApID0gQF87CgogICAgIyBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIHNjYW4gYSB0b2tlbiBzdGFydGluZyB3aXRoIGFuIGFscGhhbnVtZXJpYwogICAgIyB2YXJpYWJsZSBvciBwYWNrYWdlIHNlcGFyYXRvciwgOjogb3IgJy4KCiAgICAjIEdpdmVuOgogICAgIyAgIGN1cnJlbnQgc2NhbiBzdGF0ZSB2YXJpYWJsZXMKCiAgICAjIFVTRVMgR0xPQkFMIFZBUklBQkxFUzogJGN1cnJlbnRfcGFja2FnZSwgJGxhc3Rfbm9uYmxhbmtfdG9rZW4sCiAgICAjICRsYXN0X25vbmJsYW5rX3R5cGUsICRycGFyZW5fdHlwZSwgJHBhcmVuX2RlcHRoCgogICAgbXkgJHBhY2thZ2UgPSB1bmRlZjsKCiAgICBteSAkaV9iZWcgPSAkaTsKCiAgICAjIHdlIGhhdmUgdG8gYmFjayB1cCBvbmUgcHJldG9rZW4gYXQgYSA6OiBzaW5jZSBlYWNoIDogaXMgb25lIHByZXRva2VuCiAgICBpZiAoICR0b2sgZXEgJzo6JyApIHsgJGlfYmVnLS0gfQogICAgbXkgJHBvc19iZWcgPSAkcnRva2VuX21hcC0+WyRpX2JlZ107CiAgICBwb3MoJGlucHV0X2xpbmUpID0gJHBvc19iZWc7CgogICAgIyAgRXhhbXBsZXM6CiAgICAjICAgQTo6Qjo6QwogICAgIyAgIEE6OgogICAgIyAgIDo6QQogICAgIyAgIEEnQgogICAgaWYgKAogICAgICAgICRpbnB1dF9saW5lID1+IG17CiAgICAgICAgIFxHXHMqICAgICAgICAgICAgICAgICMgc3RhcnQgYXQgcG9zCiAgICAgICAgICggKD86XHcqKD86J3w6OikpKiApICMgJDEgPSBtYXliZSBwYWNrYWdlIG5hbWUgbGlrZSBBOjogQTo6Qjo6IG9yIEEnCiAgICAgICAgIChcdyspPyAgICAgICAgICAgICAgICMgJDIgPSBtYXliZSBmb2xsb3dlZCBieSBzdWIgbmFtZQogICAgICAgIH1nY3gKICAgICAgKQogICAgewogICAgICAgIG15ICRwb3MgID0gcG9zKCRpbnB1dF9saW5lKTsKICAgICAgICBteSAkbnVtYyA9ICRwb3MgLSAkcG9zX2JlZzsKICAgICAgICAkdG9rID0gc3Vic3RyKCAkaW5wdXRfbGluZSwgJHBvc19iZWcsICRudW1jICk7CgogICAgICAgICMgdHlwZSAndycgaW5jbHVkZXMgYW55dGhpbmcgd2l0aG91dCBsZWFkaW5nIHR5cGUgaW5mbwogICAgICAgICMgKCQsJSxALCopIGluY2x1ZGluZyBzb21ldGhpbmcgbGlrZSBhYmM6OmRlZjo6Z2hpCiAgICAgICAgJHR5cGUgPSAndyc7CgogICAgICAgIG15ICRzdWJfbmFtZSA9IEVNUFRZX1NUUklORzsKICAgICAgICBpZiAoIGRlZmluZWQoJDIpICkgeyAkc3ViX25hbWUgPSAkMjsgfQogICAgICAgIGlmICggZGVmaW5lZCgkMSkgJiYgbGVuZ3RoKCQxKSApIHsKICAgICAgICAgICAgJHBhY2thZ2UgPSAkMTsKCiAgICAgICAgICAgICMgcGF0Y2g6IGNoZWNrIGZvciBwYWNrYWdlIGNhbGwgQTo6Qjo6Qy0+CiAgICAgICAgICAgICMgaW4gdGhpcyBjYXNlLCBDIGlzIHBhcnQgb2YgdGhlIHBhY2thZ2UgbmFtZQogICAgICAgICAgICBpZiAoJHN1Yl9uYW1lKSB7CiAgICAgICAgICAgICAgICBpZiAoICRpbnB1dF9saW5lID1+IG17IFxHXHMqKD86LT4pIH1nY3ggKSB7CiAgICAgICAgICAgICAgICAgICAgJHBhY2thZ2UgLj0gJHN1Yl9uYW1lOwogICAgICAgICAgICAgICAgICAgICRzdWJfbmFtZSA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHBvcygkaW5wdXRfbGluZSkgPSAkcG9zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHBhdGNoOiBkb24ndCBhbGxvdyBpc29sYXRlZCBwYWNrYWdlIG5hbWUgd2hpY2gganVzdCBlbmRzCiAgICAgICAgICAgICMgaW4gdGhlIG9sZCBzdHlsZSBwYWNrYWdlIHNlcGFyYXRvciAoc2luZ2xlIHF1b3RlKS4gIEV4YW1wbGU6CiAgICAgICAgICAgICMgICB1c2UgQ0dJJzphbGwnOwogICAgICAgICAgICBpZiAoICEoJHN1Yl9uYW1lKSAmJiBzdWJzdHIoICRwYWNrYWdlLCAtMSwgMSApIGVxICdcJycgKSB7CiAgICAgICAgICAgICAgICAkcG9zLS07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRwYWNrYWdlID1+IHMvXCcvOjovZzsKICAgICAgICAgICAgaWYgKCAkcGFja2FnZSA9fiAvXlw6LyApIHsgJHBhY2thZ2UgPSAnbWFpbicgLiAkcGFja2FnZSB9CiAgICAgICAgICAgICRwYWNrYWdlID1+IHMvOjokLy87CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkcGFja2FnZSA9ICRjdXJyZW50X3BhY2thZ2U7CgogICAgICAgICAgICAjIHBhdGNoZWQgZm9yIGMwNDMsIHBhcnQgMToga2V5d29yZCBkb2VzIG5vdCBmb2xsb3cgJy0+JwogICAgICAgICAgICBpZiAoICRpc19rZXl3b3JkeyR0b2t9ICYmICRsYXN0X25vbmJsYW5rX3R5cGUgbmUgJy0+JyApIHsKICAgICAgICAgICAgICAgICR0eXBlID0gJ2snOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGlmIGl0IGlzIGEgYmFyZXdvcmQuLiAgcGF0Y2hlZCBmb3IgYzA0MywgcGFydCAyOiBub3QgZm9sbG93aW5nICctPicKICAgICAgICBpZiAoICR0eXBlIGVxICd3JyAmJiAkbGFzdF9ub25ibGFua190eXBlIG5lICctPicgKSB7CgogICAgICAgICAgICAjIGNoZWNrIGZvciB2LXN0cmluZyB3aXRoIGxlYWRpbmcgJ3YnIHR5cGUgY2hhcmFjdGVyCiAgICAgICAgICAgICMgKFRoaXMgc2VlbXMgdG8gaGF2ZSBwcmVjZWRlbmNlIG92ZXIgZmlsZWhhbmRsZSwgdHlwZSAnWScpCiAgICAgICAgICAgIGlmICggc3Vic3RyKCAkdG9rLCAwLCAxICkgZXEgJ3YnICYmICR0b2sgPX4gL152XGRbX1xkXSokLyApIHsKCiAgICAgICAgICAgICAgICAjIHdlIG9ubHkgaGF2ZSB0aGUgZmlyc3QgcGFydCAtIHNvbWV0aGluZyBsaWtlICd2MTAxJyAtCiAgICAgICAgICAgICAgICAjIGxvb2sgZm9yIG1vcmUKICAgICAgICAgICAgICAgIGlmICggJGlucHV0X2xpbmUgPX4gbS9cRyhcLlxkW19cZF0qKSsvZ2MgKSB7CiAgICAgICAgICAgICAgICAgICAgJHBvcyAgPSBwb3MoJGlucHV0X2xpbmUpOwogICAgICAgICAgICAgICAgICAgICRudW1jID0gJHBvcyAtICRwb3NfYmVnOwogICAgICAgICAgICAgICAgICAgICR0b2sgID0gc3Vic3RyKCAkaW5wdXRfbGluZSwgJHBvc19iZWcsICRudW1jICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdHlwZSA9ICd2JzsKICAgICAgICAgICAgICAgICRzZWxmLT5yZXBvcnRfdl9zdHJpbmcoJHRvayk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYmFyZXdvcmQgYWZ0ZXIgc29ydCBoYXMgaW1wbGllZCBlbXB0eSBwcm90b3R5cGU7IGZvciBleGFtcGxlOgogICAgICAgICAgICAjIEBzb3J0ZWQgPSBzb3J0IG51bWVyaWNhbGx5ICggNTMsIDI5LCAxMSwgMzIsIDcgKTsKICAgICAgICAgICAgIyBUaGlzIGhhcyBwcmlvcml0eSBvdmVyIHdoYXRldmVyIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQuCiAgICAgICAgICAgIGVsc2lmICgkbGFzdF9ub25ibGFua190b2tlbiBlcSAnc29ydCcKICAgICAgICAgICAgICAgICYmICRsYXN0X25vbmJsYW5rX3R5cGUgZXEgJ2snICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJHR5cGUgPSAnWic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaXNzdWUgYzM4MjogdGhpcyBlbHNpZiBzdGF0ZW1lbnQgbW92ZWQgZnJvbSBhYm92ZSBiZWNhdXNlCiAgICAgICAgICAgICMgcHJldmlvdXMgY2hlY2sgZm9yIHR5cGUgJ1onIGFmdGVyIHNvcnQgaGFzIHByaW9yaXR5LgogICAgICAgICAgICBlbHNpZiAoICRyaXNfY29uc3RhbnQtPnskcGFja2FnZX17JHN1Yl9uYW1lfSApIHsKICAgICAgICAgICAgICAgICR0eXBlID0gJ0MnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIE5vdGU6IHN0cmFuZ2VseSwgcGVybCBkb2VzIG5vdCBzZWVtIHRvIHJlYWxseSBsZXQgeW91IGNyZWF0ZQogICAgICAgICAgICAjIGZ1bmN0aW9ucyB3aGljaCBhY3QgbGlrZSBldmFsIGFuZCBkbywgaW4gdGhlIHNlbnNlIHRoYXQgZXZhbAogICAgICAgICAgICAjIGFuZCBkbyBtYXkgaGF2ZSBvcGVyYXRvcnMgZm9sbG93aW5nIHRoZSBmaW5hbCB9LCBidXQgYW55IG9wZXJhdG9ycwogICAgICAgICAgICAjIHRoYXQgeW91IGNyZWF0ZSB3aXRoIHByb3RvdHlwZSAoJikgYXBwYXJlbnRseSBkbyBub3QgYWxsb3cKICAgICAgICAgICAgIyB0cmFpbGluZyBvcGVyYXRvcnMsIG9ubHkgdGVybXMuICBUaGlzIHNlZW1zIHN0cmFuZ2UuCiAgICAgICAgICAgICMgSWYgdGhpcyBldmVyIGNoYW5nZXMsIGhlcmUgaXMgdGhlIHVwZGF0ZQogICAgICAgICAgICAjIHRvIG1ha2UgcGVybHRpZHkgYmVoYXZlIGFjY29yZGluZ2x5OgoKICAgICAgICAgICAgIyBlbHNpZiAoICRyaXNfYmxvY2tfZnVuY3Rpb24tPnskcGFja2FnZX17JHRva30gKSB7CiAgICAgICAgICAgICMgICAgJHRvaz0nZXZhbCc7ICMgcGF0Y2ggdG8gZG8gYnJhY2VzIGxpa2UgZXZhbCAgLSBkb2Vzbid0IHdvcmsKICAgICAgICAgICAgIyAgICAkdHlwZSA9ICdrJzsKICAgICAgICAgICAgI30KICAgICAgICAgICAgIyBUT0RPOiBUaGlzIGNvdWxkIGJlY29tZSBhIHNlcGFyYXRlIHR5cGUgdG8gYWxsb3cgZm9yIGRpZmZlcmVudAogICAgICAgICAgICAjIGZ1dHVyZSBiZWhhdmlvcjoKICAgICAgICAgICAgZWxzaWYgKCAkcmlzX2Jsb2NrX2Z1bmN0aW9uLT57JHBhY2thZ2V9eyRzdWJfbmFtZX0gKSB7CiAgICAgICAgICAgICAgICAkdHlwZSA9ICdHJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRyaXNfYmxvY2tfbGlzdF9mdW5jdGlvbi0+eyRwYWNrYWdlfXskc3ViX25hbWV9ICkgewogICAgICAgICAgICAgICAgJHR5cGUgPSAnRyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkcmlzX3VzZXJfZnVuY3Rpb24tPnskcGFja2FnZX17JHN1Yl9uYW1lfSApIHsKICAgICAgICAgICAgICAgICR0eXBlICAgICAgPSAnVSc7CiAgICAgICAgICAgICAgICAkcHJvdG90eXBlID0gJHJ1c2VyX2Z1bmN0aW9uX3Byb3RvdHlwZS0+eyRwYWNrYWdlfXskc3ViX25hbWV9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNoZWNrIGZvciBpbmRpcmVjdCBvYmplY3QKICAgICAgICAgICAgZWxzaWYgKAoKICAgICAgICAgICAgICAgICMgYWRkZWQgMjAwMS0wMy0yNzogbXVzdCBub3QgYmUgZm9sbG93ZWQgaW1tZWRpYXRlbHkgYnkgJygnCiAgICAgICAgICAgICAgICAjIHNlZSBmaGFuZGxlLnQKICAgICAgICAgICAgICAgICggJGlucHV0X2xpbmUgIX4gbS9cR1woL2djICkKCiAgICAgICAgICAgICAgICAjIGFuZAogICAgICAgICAgICAgICAgJiYgKAoKICAgICAgICAgICAgICAgICAgICAjIHByZWNlZGVkIGJ5IGtleXdvcmQgbGlrZSAncHJpbnQnLCAncHJpbnRmJyBhbmQgZnJpZW5kcwogICAgICAgICAgICAgICAgICAgICRpc19pbmRpcmVjdF9vYmplY3RfdGFrZXJ7JGxhc3Rfbm9uYmxhbmtfdG9rZW59CgogICAgICAgICAgICAgICAgICAgICMgb3IgcHJlY2VkZWQgYnkgc29tZXRoaW5nIGxpa2UgJ3ByaW50KCcgb3IgJ3ByaW50ZignCiAgICAgICAgICAgICAgICAgICAgfHwgKAogICAgICAgICAgICAgICAgICAgICAgICAoICRsYXN0X25vbmJsYW5rX3Rva2VuIGVxICcoJyApCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRpc19pbmRpcmVjdF9vYmplY3RfdGFrZXJ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcnBhcmVuX3R5cGUtPlskcGFyZW5fZGVwdGhdCiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICMgbWF5IG5vdCBiZSBpbmRpcmVjdCBvYmplY3QgdW5sZXNzIGZvbGxvd2VkIGJ5IGEgc3BhY2U7CiAgICAgICAgICAgICAgICAjIHVwZGF0ZWQgMjAyMS0wMS0xNiB0byBjb25zaWRlciBuZXdsaW5lIHRvIGJlIGEgc3BhY2UuCiAgICAgICAgICAgICAgICAjIHVwZGF0ZWQgZm9yIGNhc2UgYjk5MCB0byBsb29rIGZvciBlaXRoZXIgJzsnIG9yIHNwYWNlCiAgICAgICAgICAgICAgICBpZiAoIHBvcygkaW5wdXRfbGluZSkgPT0gbGVuZ3RoKCRpbnB1dF9saW5lKQogICAgICAgICAgICAgICAgICAgIHx8ICRpbnB1dF9saW5lID1+IG0vXEdbO1xzXS9nYyApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAnWSc7CgogICAgICAgICAgICAgICAgICAgICMgQWJhbmRvbiBIb3BlIC4uLgogICAgICAgICAgICAgICAgICAgICMgUGVybCdzIGluZGlyZWN0IG9iamVjdCBub3RhdGlvbiBpcyBhIHZlcnkgYmFkCiAgICAgICAgICAgICAgICAgICAgIyB0aGluZyBhbmQgY2FuIGNhdXNlIHN1YnRsZSBidWdzLCBlc3BlY2lhbGx5IGZvcgogICAgICAgICAgICAgICAgICAgICMgYmVnaW5uaW5nIHByb2dyYW1tZXJzLiAgQW5kIEkgaGF2ZW4ndCBldmVuIGJlZW4KICAgICAgICAgICAgICAgICAgICAjIGFibGUgdG8gZmlndXJlIG91dCBhIHNhbmUgd2FybmluZyBzY2hlbWUgd2hpY2gKICAgICAgICAgICAgICAgICAgICAjIGRvZXNuJ3QgZ2V0IGluIHRoZSB3YXkgb2YgZ29vZCBzY3JpcHRzLgoKICAgICAgICAgICAgICAgICAgICAjIENvbXBsYWluIGlmIGEgZmlsZWhhbmRsZSBoYXMgYW55IGxvd2VyIGNhc2UKICAgICAgICAgICAgICAgICAgICAjIGxldHRlcnMuICBUaGlzIGlzIHN1Z2dlc3RlZCBnb29kIHByYWN0aWNlLgogICAgICAgICAgICAgICAgICAgICMgVXNlICdzdWJfbmFtZScgYmVjYXVzZSBzb21ldGhpbmcgbGlrZQogICAgICAgICAgICAgICAgICAgICMgbWFpbjo6TVlIQU5ETEUgaXMgb2sgZm9yIGZpbGVoYW5kbGUKICAgICAgICAgICAgICAgICAgICBpZiAoICRzdWJfbmFtZSA9fiAvW2Etel0vICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBjb3VsZCBiZSBidWcgY2F1c2VkIGJ5IG9sZGVyIHBlcmx0aWR5IGlmCiAgICAgICAgICAgICAgICAgICAgICAgICMgZm9sbG93ZWQgYnkgJygnCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJGlucHV0X2xpbmUgPX4gbS9cR1xzKlwoL2djICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPmNvbXBsYWluKAoiQ2F1dGlvbjogdW5rbm93biB3b3JkICckdG9rJyBpbiBpbmRpcmVjdCBvYmplY3Qgc2xvdFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGJhcmV3b3JkIG5vdCBmb2xsb3dlZCBieSBhIHNwYWNlIC0tIG1heSBub3QgYmUgZmlsZWhhbmRsZQogICAgICAgICAgICAgICAgIyAobWF5IGJlIGZ1bmN0aW9uIGNhbGwgZGVmaW5lZCBpbiBhICd1c2UnIHN0YXRlbWVudCkKICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICR0eXBlID0gJ1onOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIG5vbmUgb2YgdGhlIGFib3ZlIHNwZWNpYWwgdHlwZXMKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgTm93IHdlIG11c3QgY29udmVydCBiYWNrIGZyb20gY2hhcmFjdGVyIHBvc2l0aW9uCiAgICAgICAgIyB0byBwcmVfdG9rZW4gaW5kZXguCiAgICAgICAgIyBJIGRvbid0IHRoaW5rIGFuIGVycm9yIGZsYWcgY2FuIG9jY3VyIGhlcmUgLi5idXQgd2hvIGtub3dzCiAgICAgICAgbXkgJGVycm9yOwogICAgICAgICggJGksICRlcnJvciApID0KICAgICAgICAgIGludmVyc2VfcHJldG9rZW5fbWFwKCAkaSwgJHBvcywgJHJ0b2tlbl9tYXAsICRtYXhfdG9rZW5faW5kZXggKTsKICAgICAgICBpZiAoJGVycm9yKSB7CiAgICAgICAgICAgICRzZWxmLT53YXJuaW5nKAogICAgICAgICAgICAgICAgInNjYW5fYmFyZV9pZGVudGlmaWVyOiBQb3NzaWJseSBpbnZhbGlkIHRva2VuaXphdGlvblxuIik7CiAgICAgICAgfQogICAgfQoKICAgICMgbm8gbWF0Y2ggYnV0IGxpbmUgbm90IGJsYW5rIC0gY291bGQgYmUgc3ludGF4IGVycm9yCiAgICAjIHBlcmwgd2lsbCB0YWtlICc6OicgYWxvbmUgd2l0aG91dCBjb21wbGFpbnQKICAgIGVsc2UgewogICAgICAgICR0eXBlID0gJ3cnOwoKICAgICAgICAjIGNoYW5nZSB0aGlzIHdhcm5pbmcgdG8gbG9nIG1lc3NhZ2UgaWYgaXQgYmVjb21lcyBhbm5veWluZwogICAgICAgICRzZWxmLT53YXJuaW5nKCJkaWRuJ3QgZmluZCBpZGVudGlmaWVyIGFmdGVyIGxlYWRpbmcgOjpcbiIpOwogICAgfQogICAgcmV0dXJuICggJGksICR0b2ssICR0eXBlLCAkcHJvdG90eXBlICk7Cn0gIyMgZW5kIHN1YiBzY2FuX2JhcmVfaWRlbnRpZmllcl9kbwoKc3ViIHNjYW5faWRfZG8gewoKICAgIG15ICgKCiAgICAgICAgJHNlbGYsCgogICAgICAgICRpbnB1dF9saW5lLAogICAgICAgICRpLAogICAgICAgICR0b2ssCiAgICAgICAgJHJ0b2tlbnMsCiAgICAgICAgJHJ0b2tlbl9tYXAsCiAgICAgICAgJGlkX3NjYW5fc3RhdGUsCiAgICAgICAgJG1heF90b2tlbl9pbmRleAoKICAgICkgPSBAXzsKCiAgICAjIFNjYW4gaWRlbnRpZmllciBmb2xsb3dpbmcgYSB0eXBlIHRva2VuLgogICAgIyBHaXZlbjoKICAgICMgICBjdXJyZW50IHNjYW4gc3RhdGUgdmFyaWFibGVzCgogICAgIyBUaGlzIGlzIHRoZSBuZXcgc2Nhbm5lciBhbmQgbWF5IGV2ZW50dWFsbHkgcmVwbGFjZSBzY2FuX2lkZW50aWZpZXIuCiAgICAjIE9ubHkgdHlwZSAnc3ViJyBhbmQgJ3BhY2thZ2UnIGFyZSBpbXBsZW1lbnRlZC4KICAgICMgVG9rZW4gdHlwZXMgJCAqICUgQCAmIC0+IGFyZSBub3QgeWV0IGltcGxlbWVudGVkLgogICAgIwogICAgIyBUaGUgdHlwZSBvZiBjYWxsIGRlcGVuZHMgb24gJGlkX3NjYW5fc3RhdGU6ICRpZF9zY2FuX3N0YXRlID0gJycKICAgICMgZm9yIHN0YXJ0aW5nIGNhbGwsIGluIHdoaWNoIGNhc2UgJHRvayBtdXN0IGJlIHRoZSB0b2tlbiBkZWZpbmluZwogICAgIyB0aGUgdHlwZS4KICAgICMKICAgICMgSWYgdGhlIHR5cGUgdG9rZW4gaXMgdGhlIGxhc3Qgbm9uYmxhbmsgdG9rZW4gb24gdGhlIGxpbmUsIGEgdmFsdWUKICAgICMgb2YgJGlkX3NjYW5fc3RhdGUgPSAkdG9rIGlzIHJldHVybmVkLCBpbmRpY2F0aW5nIHRoYXQgZnVydGhlcgogICAgIyBjYWxscyBtdXN0IGJlIG1hZGUgdG8gZ2V0IHRoZSBpZGVudGlmaWVyLiAgSWYgdGhlIHR5cGUgdG9rZW4gaXMKICAgICMgbm90IHRoZSBsYXN0IG5vbmJsYW5rIHRva2VuIG9uIHRoZSBsaW5lLCB0aGUgaWRlbnRpZmllciBpcwogICAgIyBzY2FubmVkIGFuZCBoYW5kbGVkIGFuZCBhIHZhbHVlIG9mICcnIGlzIHJldHVybmVkLgoKICAgIHVzZSBjb25zdGFudCBERUJVR19OU0NBTiA9PiAwOwogICAgbXkgJHR5cGUgPSBFTVBUWV9TVFJJTkc7CiAgICBteSAkaV9iZWc7CgogICAgI3ByaW50ICJOU0NBTjplbnRlcmluZyBpPSRpLCB0b2s9JHRvaywgdHlwZT0kdHlwZSwgc3RhdGU9JGlkX3NjYW5fc3RhdGVcbiI7CiAgICAjbXkgKCRhLCRiLCRjKSA9IGNhbGxlcjsKICAgICNwcmludCAiTlNDQU46IHNjYW5faWQgY2FsbGVkIHdpdGggdG9rPSR0b2sgJGEgJGIgJGNcbiI7CgogICAgIyBvbiByZS1lbnRyeSwgc3RhcnQgc2Nhbm5pbmcgYXQgZmlyc3QgdG9rZW4gb24gdGhlIGxpbmUKICAgIGlmICgkaWRfc2Nhbl9zdGF0ZSkgewogICAgICAgICRpX2JlZyA9ICRpOwogICAgICAgICR0eXBlICA9IEVNUFRZX1NUUklORzsKICAgIH0KCiAgICAjIG9uIGluaXRpYWwgZW50cnksIHN0YXJ0IHNjYW5uaW5nIGp1c3QgYWZ0ZXIgdHlwZSB0b2tlbgogICAgZWxzZSB7CiAgICAgICAgJGlfYmVnICAgICAgICAgPSAkaSArIDE7CiAgICAgICAgJGlkX3NjYW5fc3RhdGUgPSAkdG9rOwogICAgICAgICR0eXBlICAgICAgICAgID0gJ3QnOwogICAgfQoKICAgICMgZmluZCAkaV9iZWcgPSBpbmRleCBvZiBuZXh0IG5vbmJsYW5rIHRva2VuLAogICAgIyBhbmQgaGFuZGxlIGVtcHR5IGxpbmVzCiAgICBteSAkYmxhbmtfbGluZSAgICAgICAgICA9IDA7CiAgICBteSAkbmV4dF9ub25ibGFua190b2tlbiA9ICRydG9rZW5zLT5bJGlfYmVnXTsKICAgIGlmICggJGlfYmVnID4gJG1heF90b2tlbl9pbmRleCApIHsKICAgICAgICAkYmxhbmtfbGluZSA9IDE7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBvbmx5IGEgJyMnIGltbWVkaWF0ZWx5IGFmdGVyIGEgJyQnIGlzIG5vdCBhIGNvbW1lbnQKICAgICAgICBpZiAoICRuZXh0X25vbmJsYW5rX3Rva2VuIGVxICcjJyApIHsKICAgICAgICAgICAgaWYgKCAkdG9rIG5lICckJyApIHsKICAgICAgICAgICAgICAgICRibGFua19saW5lID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCAkbmV4dF9ub25ibGFua190b2tlbiA9fiAvXlxzLyApIHsKICAgICAgICAgICAgKCAkbmV4dF9ub25ibGFua190b2tlbiwgJGlfYmVnICkgPQogICAgICAgICAgICAgIGZpbmRfbmV4dF9ub25ibGFua190b2tlbl9vbl90aGlzX2xpbmUoICRpX2JlZywgJHJ0b2tlbnMsCiAgICAgICAgICAgICAgICAkbWF4X3Rva2VuX2luZGV4ICk7CiAgICAgICAgICAgIGlmICggJG5leHRfbm9uYmxhbmtfdG9rZW4gPX4gLyheI3xeXHMqJCkvICkgewogICAgICAgICAgICAgICAgJGJsYW5rX2xpbmUgPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgaGFuZGxlIG5vbi1ibGFuayBsaW5lOyBpZGVudGlmaWVyLCBpZiBhbnksIG11c3QgZm9sbG93CiAgICBpZiAoICEkYmxhbmtfbGluZSApIHsKCiAgICAgICAgaWYgKCAkaXNfc3VieyRpZF9zY2FuX3N0YXRlfSApIHsKICAgICAgICAgICAgKCAkaSwgJHRvaywgJHR5cGUsICRpZF9zY2FuX3N0YXRlICkgPSAkc2VsZi0+ZG9fc2Nhbl9zdWIoCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaW5wdXRfbGluZSAgICAgID0+ICRpbnB1dF9saW5lLAogICAgICAgICAgICAgICAgICAgIGkgICAgICAgICAgICAgICA9PiAkaSwKICAgICAgICAgICAgICAgICAgICBpX2JlZyAgICAgICAgICAgPT4gJGlfYmVnLAogICAgICAgICAgICAgICAgICAgIHRvayAgICAgICAgICAgICA9PiAkdG9rLAogICAgICAgICAgICAgICAgICAgIHR5cGUgICAgICAgICAgICA9PiAkdHlwZSwKICAgICAgICAgICAgICAgICAgICBydG9rZW5zICAgICAgICAgPT4gJHJ0b2tlbnMsCiAgICAgICAgICAgICAgICAgICAgcnRva2VuX21hcCAgICAgID0+ICRydG9rZW5fbWFwLAogICAgICAgICAgICAgICAgICAgIGlkX3NjYW5fc3RhdGUgICA9PiAkaWRfc2Nhbl9zdGF0ZSwKICAgICAgICAgICAgICAgICAgICBtYXhfdG9rZW5faW5kZXggPT4gJG1heF90b2tlbl9pbmRleCwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGVsc2lmICggJGlzX3BhY2thZ2V7JGlkX3NjYW5fc3RhdGV9ICkgewogICAgICAgICAgICAoICRpLCAkdG9rLCAkdHlwZSApID0gJHNlbGYtPmRvX3NjYW5fcGFja2FnZSgKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpbnB1dF9saW5lICAgICAgPT4gJGlucHV0X2xpbmUsCiAgICAgICAgICAgICAgICAgICAgaSAgICAgICAgICAgICAgID0+ICRpLAogICAgICAgICAgICAgICAgICAgIGlfYmVnICAgICAgICAgICA9PiAkaV9iZWcsCiAgICAgICAgICAgICAgICAgICAgdG9rICAgICAgICAgICAgID0+ICR0b2ssCiAgICAgICAgICAgICAgICAgICAgdHlwZSAgICAgICAgICAgID0+ICR0eXBlLAogICAgICAgICAgICAgICAgICAgIHJ0b2tlbnMgICAgICAgICA9PiAkcnRva2VucywKICAgICAgICAgICAgICAgICAgICBydG9rZW5fbWFwICAgICAgPT4gJHJ0b2tlbl9tYXAsCiAgICAgICAgICAgICAgICAgICAgbWF4X3Rva2VuX2luZGV4ID0+ICRtYXhfdG9rZW5faW5kZXgsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRpZF9zY2FuX3N0YXRlID0gRU1QVFlfU1RSSU5HOwogICAgICAgIH0KCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRzZWxmLT53YXJuaW5nKCJpbnZhbGlkIHRva2VuIGluIHNjYW5faWQ6ICR0b2tcbiIpOwogICAgICAgICAgICAkaWRfc2Nhbl9zdGF0ZSA9IEVNUFRZX1NUUklORzsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkaWRfc2Nhbl9zdGF0ZSAmJiAoICFkZWZpbmVkKCR0eXBlKSB8fCAhJHR5cGUgKSApIHsKCiAgICAgICAgIyBzaG91bGRuJ3QgaGFwcGVuOgogICAgICAgIGlmIChERVZFTF9NT0RFKSB7CiAgICAgICAgICAgICRzZWxmLT5GYXVsdCg8PEVPTSk7ClByb2dyYW0gYnVnIGluIHNjYW5faWQ6IHVuZGVmaW5lZCB0eXBlIGJ1dCBzY2FuX3N0YXRlPSRpZF9zY2FuX3N0YXRlCkVPTQogICAgICAgIH0KICAgICAgICAkc2VsZi0+d2FybmluZygKIlBvc3NpYmxlIHByb2dyYW0gYnVnIGluIHN1YiBzY2FuX2lkOiB1bmRlZmluZWQgdHlwZSBidXQgc2Nhbl9zdGF0ZT0kaWRfc2Nhbl9zdGF0ZVxuIgogICAgICAgICk7CiAgICAgICAgJHNlbGYtPnJlcG9ydF9kZWZpbml0ZV9idWcoKTsKICAgIH0KCiAgICBERUJVR19OU0NBTiAmJiBkbyB7CiAgICAgICAgcHJpbnQgeypTVERPVVR9CiAgICAgICAgICAiTlNDQU46IHJldHVybnMgaT0kaSwgdG9rPSR0b2ssIHR5cGU9JHR5cGUsIHN0YXRlPSRpZF9zY2FuX3N0YXRlXG4iOwogICAgfTsKICAgIHJldHVybiAoICRpLCAkdG9rLCAkdHlwZSwgJGlkX3NjYW5fc3RhdGUgKTsKfSAjIyBlbmQgc3ViIHNjYW5faWRfZG8KCnN1YiBjaGVja19wcm90b3R5cGUgewogICAgbXkgKCAkcHJvdG8sICRwYWNrYWdlLCAkc3VibmFtZSApID0gQF87CgogICAgIyBDbGFzc2lmeSBhIHN1YiBiYXNlZCBvbiBpdHMgcHJvdG90eXBlCiAgICByZXR1cm4gaWYgKCAhZGVmaW5lZCgkcGFja2FnZSkgKTsKICAgIHJldHVybiBpZiAoICFkZWZpbmVkKCRzdWJuYW1lKSApOwogICAgaWYgKCBkZWZpbmVkKCRwcm90bykgKSB7CiAgICAgICAgJHByb3RvID1+IHMvXlxzKlwoXHMqLy87CiAgICAgICAgJHByb3RvID1+IHMvXHMqXCkkLy87CiAgICAgICAgaWYgKCRwcm90bykgewogICAgICAgICAgICAkcmlzX3VzZXJfZnVuY3Rpb24tPnskcGFja2FnZX17JHN1Ym5hbWV9ICAgICAgICA9IDE7CiAgICAgICAgICAgICRydXNlcl9mdW5jdGlvbl9wcm90b3R5cGUtPnskcGFja2FnZX17JHN1Ym5hbWV9ID0gIigkcHJvdG8pIjsKCiAgICAgICAgICAgICMgcHJvdG90eXBlcyBjb250YWluaW5nICcmJyBtdXN0IGJlIHRyZWF0ZWQgc3BlY2lhbGx5Li4KICAgICAgICAgICAgaWYgKCAkcHJvdG8gPX4gL1wmLyApIHsKCiAgICAgICAgICAgICAgICAjIHJpZ2h0IGN1cmx5IGJyYWNlcyBvZiBwcm90b3R5cGVzIGVuZGluZyBpbgogICAgICAgICAgICAgICAgIyAnJicgbWF5IGJlIGZvbGxvd2VkIGJ5IGFuIG9wZXJhdG9yCiAgICAgICAgICAgICAgICBpZiAoICRwcm90byA9fiAvXCYkLyApIHsKICAgICAgICAgICAgICAgICAgICAkcmlzX2Jsb2NrX2Z1bmN0aW9uLT57JHBhY2thZ2V9eyRzdWJuYW1lfSA9IDE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyByaWdodCBjdXJseSBicmFjZXMgb2YgcHJvdG90eXBlcyBOT1QgZW5kaW5nIGluCiAgICAgICAgICAgICAgICAjICcmJyBtYXkgTk9UIGJlIGZvbGxvd2VkIGJ5IGFuIG9wZXJhdG9yCiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkcmlzX2Jsb2NrX2xpc3RfZnVuY3Rpb24tPnskcGFja2FnZX17JHN1Ym5hbWV9ID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJHJpc19jb25zdGFudC0+eyRwYWNrYWdlfXskc3VibmFtZX0gPSAxOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgICRyaXNfdXNlcl9mdW5jdGlvbi0+eyRwYWNrYWdlfXskc3VibmFtZX0gPSAxOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgY2hlY2tfcHJvdG90eXBlCgpzdWIgZG9fc2Nhbl9wYWNrYWdlIHsKCiAgICBteSAoICRzZWxmLCAkcmNhbGxfaGFzaCApID0gQF87CgogICAgbXkgJGlucHV0X2xpbmUgICAgICA9ICRyY2FsbF9oYXNoLT57aW5wdXRfbGluZX07CiAgICBteSAkaSAgICAgICAgICAgICAgID0gJHJjYWxsX2hhc2gtPntpfTsKICAgIG15ICRpX2JlZyAgICAgICAgICAgPSAkcmNhbGxfaGFzaC0+e2lfYmVnfTsKICAgIG15ICR0b2sgICAgICAgICAgICAgPSAkcmNhbGxfaGFzaC0+e3Rva307CiAgICBteSAkdHlwZSAgICAgICAgICAgID0gJHJjYWxsX2hhc2gtPnt0eXBlfTsKICAgIG15ICRydG9rZW5zICAgICAgICAgPSAkcmNhbGxfaGFzaC0+e3J0b2tlbnN9OwogICAgbXkgJHJ0b2tlbl9tYXAgICAgICA9ICRyY2FsbF9oYXNoLT57cnRva2VuX21hcH07CiAgICBteSAkbWF4X3Rva2VuX2luZGV4ID0gJHJjYWxsX2hhc2gtPnttYXhfdG9rZW5faW5kZXh9OwoKICAgICMgUGFyc2UgYSBwYWNrYWdlIG5hbWUuCiAgICAjIFRoaXMgaXMgY2FsbGVkIHdpdGggJGlfYmVnIGVxdWFsIHRvIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgbm9uYmxhbmsKICAgICMgdG9rZW4gZm9sbG93aW5nIGEgJ3BhY2thZ2UnIHRva2VuLgogICAgIyBVU0VTIEdMT0JBTCBWQVJJQUJMRVM6ICRjdXJyZW50X3BhY2thZ2UsCgogICAgIyBwYWNrYWdlIE5BTUVTUEFDRQogICAgIyBwYWNrYWdlIE5BTUVTUEFDRSBWRVJTSU9OCiAgICAjIHBhY2thZ2UgTkFNRVNQQUNFIEJMT0NLCiAgICAjIHBhY2thZ2UgTkFNRVNQQUNFIFZFUlNJT04gQkxPQ0sKICAgICMKICAgICMgSWYgVkVSU0lPTiBpcyBwcm92aWRlZCwgcGFja2FnZSBzZXRzIHRoZSAkVkVSU0lPTiB2YXJpYWJsZSBpbiB0aGUgZ2l2ZW4KICAgICMgbmFtZXNwYWNlIHRvIGEgdmVyc2lvbiBvYmplY3Qgd2l0aCB0aGUgVkVSU0lPTiBwcm92aWRlZC4gVkVSU0lPTiBtdXN0IGJlCiAgICAjIGEgInN0cmljdCIgc3R5bGUgdmVyc2lvbiBudW1iZXIgYXMgZGVmaW5lZCBieSB0aGUgdmVyc2lvbiBtb2R1bGU6IGEKICAgICMgcG9zaXRpdmUgZGVjaW1hbCBudW1iZXIgKGludGVnZXIgb3IgZGVjaW1hbC1mcmFjdGlvbikgd2l0aG91dAogICAgIyBleHBvbmVudGlhdGlvbiBvciBlbHNlIGEgZG90dGVkLWRlY2ltYWwgdi1zdHJpbmcgd2l0aCBhIGxlYWRpbmcgJ3YnCiAgICAjIGNoYXJhY3RlciBhbmQgYXQgbGVhc3QgdGhyZWUgY29tcG9uZW50cy4KICAgICMgcmVmZXJlbmNlIGh0dHA6Ly9wZXJsZG9jLnBlcmwub3JnL2Z1bmN0aW9ucy9wYWNrYWdlLmh0bWwKCiAgICBteSAkcGFja2FnZSA9IHVuZGVmOwogICAgbXkgJHBvc19iZWcgPSAkcnRva2VuX21hcC0+WyRpX2JlZ107CiAgICBwb3MoJGlucHV0X2xpbmUpID0gJHBvc19iZWc7CgogICAgIyBoYW5kbGUgbm9uLWJsYW5rIGxpbmU7IHBhY2thZ2UgbmFtZSwgaWYgYW55LCBtdXN0IGZvbGxvdwogICAgaWYgKCAkaW5wdXRfbGluZSA9fiBtL1xHXHMqKCg/Olx3Kig/Oid8OjopKSpcdyopL2djICkgewogICAgICAgICRwYWNrYWdlID0gJDE7CiAgICAgICAgJHBhY2thZ2UgPSAoIGRlZmluZWQoJDEpICYmICQxICkgPyAkMSA6ICdtYWluJzsKICAgICAgICAkcGFja2FnZSA9fiBzL1wnLzo6L2c7CiAgICAgICAgaWYgKCAkcGFja2FnZSA9fiAvXlw6LyApIHsgJHBhY2thZ2UgPSAnbWFpbicgLiAkcGFja2FnZSB9CiAgICAgICAgJHBhY2thZ2UgPX4gcy86OiQvLzsKICAgICAgICBteSAkcG9zICA9IHBvcygkaW5wdXRfbGluZSk7CiAgICAgICAgbXkgJG51bWMgPSAkcG9zIC0gJHBvc19iZWc7CiAgICAgICAgJHRvayAgPSAncGFja2FnZSAnIC4gc3Vic3RyKCAkaW5wdXRfbGluZSwgJHBvc19iZWcsICRudW1jICk7CiAgICAgICAgJHR5cGUgPSAnUCc7ICAgICMgRml4IGZvciBjMjUwLCBwcmV2aW91c2x5ICdpJwoKICAgICAgICAjIE5vdyB3ZSBtdXN0IGNvbnZlcnQgYmFjayBmcm9tIGNoYXJhY3RlciBwb3NpdGlvbgogICAgICAgICMgdG8gcHJlX3Rva2VuIGluZGV4LgogICAgICAgICMgSSBkb24ndCB0aGluayBhbiBlcnJvciBmbGFnIGNhbiBvY2N1ciBoZXJlIC4uYnV0ID8KICAgICAgICBteSAkZXJyb3I7CiAgICAgICAgKCAkaSwgJGVycm9yICkgPQogICAgICAgICAgaW52ZXJzZV9wcmV0b2tlbl9tYXAoICRpLCAkcG9zLCAkcnRva2VuX21hcCwgJG1heF90b2tlbl9pbmRleCApOwogICAgICAgIGlmICgkZXJyb3IpIHsgJHNlbGYtPndhcm5pbmcoIlBvc3NpYmx5IGludmFsaWQgcGFja2FnZVxuIikgfQogICAgICAgICRjdXJyZW50X3BhY2thZ2UgPSAkcGFja2FnZTsKCiAgICAgICAgIyB3ZSBzaG91bGQgbm93IGhhdmUgcGFja2FnZSBOQU1FU1BBQ0UKICAgICAgICAjIG5vdyBleHBlY3RpbmcgVkVSU0lPTiwgQkxPQ0ssIG9yIDsgdG8gZm9sbG93IC4uLgogICAgICAgICMgcGFja2FnZSBOQU1FU1BBQ0UgVkVSU0lPTgogICAgICAgICMgcGFja2FnZSBOQU1FU1BBQ0UgQkxPQ0sKICAgICAgICAjIHBhY2thZ2UgTkFNRVNQQUNFIFZFUlNJT04gQkxPQ0sKICAgICAgICBteSAoICRuZXh0X25vbmJsYW5rX3Rva2VuLCAkaV9uZXh0X3V1ICkgPQogICAgICAgICAgJHNlbGYtPmZpbmRfbmV4dF9ub25ibGFua190b2tlbiggJGksICRydG9rZW5zLCAkbWF4X3Rva2VuX2luZGV4ICk7CgogICAgICAgICMgY2hlY2sgdGhhdCBzb21ldGhpbmcgcmVjb2duaXphYmxlIGZvbGxvd3MsIGJ1dCBkbyBub3QgcGFyc2UuCiAgICAgICAgIyBBIFZFUlNJT04gbnVtYmVyIHdpbGwgYmUgcGFyc2VkIGxhdGVyIGFzIGEgbnVtYmVyIG9yIHYtc3RyaW5nIGluIHRoZQogICAgICAgICMgbm9ybWFsIHdheS4gIFdoYXQgaXMgaW1wb3J0YW50IGlzIHRvIHNldCB0aGUgc3RhdGVtZW50IHR5cGUgaWYKICAgICAgICAjIGV2ZXJ5dGhpbmcgbG9va3Mgb2theSBzbyB0aGF0IHRoZSBvcGVyYXRvcl9leHBlY3RlZCgpIHJvdXRpbmUKICAgICAgICAjIGtub3dzIHRoYXQgdGhlIG51bWJlciBpcyBpbiBhIHBhY2thZ2Ugc3RhdGVtZW50LgogICAgICAgICMgRXhhbXBsZXMgb2YgdmFsaWQgcHJpbWl0aXZlIHRva2VucyB0aGF0IG1pZ2h0IGZvbGxvdyBhcmU6CiAgICAgICAgIyAgMTIzNSAgLiA7IHsgfSB2MyAgdgogICAgICAgICMgRklYOiBhZGRlZCBhICcjJyBzaW5jZSBhIHNpZGUgY29tbWVudCBtYXkgYWxzbyBmb2xsb3cKICAgICAgICAjIEFkZGVkICc6JyBmb3IgY2xhc3MgYXR0cmlidXRlcyAoZm9yIC0tdXNlLWZlYXR1cmU9Y2xhc3MsIHJ0MTQ1NzA2KQogICAgICAgIGlmICggJG5leHRfbm9uYmxhbmtfdG9rZW4gPX4gL14oW3ZcLlxkO1x7XH1cI1w6XSl8dlxkfFxkKyQvICkgewogICAgICAgICAgICAkc3RhdGVtZW50X3R5cGUgPSAkdG9rOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJHNlbGYtPndhcm5pbmcoCiAgICAgICAgICAgICAgICAiVW5leHBlY3RlZCAnJG5leHRfbm9uYmxhbmtfdG9rZW4nIGFmdGVyIHBhY2thZ2UgbmFtZSAnJHRvaydcbiIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBubyBtYXRjaCBidXQgbGluZSBub3QgYmxhbmsgLS0KICAgICMgY291bGQgYmUgYSBsYWJlbCB3aXRoIG5hbWUgcGFja2FnZSwgbGlrZSBwYWNrYWdlOiAgLCBmb3IgZXhhbXBsZS4KICAgIGVsc2UgewogICAgICAgICR0eXBlID0gJ2snOwogICAgfQoKICAgIHJldHVybiAoICRpLCAkdG9rLCAkdHlwZSApOwp9ICMjIGVuZCBzdWIgZG9fc2Nhbl9wYWNrYWdlCgp7ICAgICMjIGJlZ2luIGNsb3N1cmUgZm9yIHN1YiBzY2FuX2NvbXBsZXhfaWRlbnRpZmllcgoKICAgIHVzZSBjb25zdGFudCBERUJVR19TQ0FOX0lEID0+IDA7CgogICAgIyBDb25zdGFudCBoYXNoOgogICAgbXkgJWlzX3NwZWNpYWxfdmFyaWFibGVfY2hhcjsKCiAgICBCRUdJTiB7CgogICAgICAgICMgVGhlc2UgYXJlIHRoZSBvbmx5IGNoYXJhY3RlcnMgd2hpY2ggY2FuIChjdXJyZW50bHkpIGZvcm0gc3BlY2lhbAogICAgICAgICMgdmFyaWFibGVzLCBsaWtlICReVzogKGlzc3VlIGMwNjYpLgogICAgICAgIG15IEBxID0KICAgICAgICAgIHF3eyA/IEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWiBbIFwgXSBeIF8gfTsKICAgICAgICBAaXNfc3BlY2lhbF92YXJpYWJsZV9jaGFye0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CiAgICB9ICMjIGVuZCBCRUdJTgoKICAgICMgVGhlc2UgYXJlIHRoZSBwb3NzaWJsZSBzdGF0ZXMgZm9yIHRoaXMgc2Nhbm5lcjoKICAgIG15ICRzY2FuX3N0YXRlX1NJR0lMICAgICA9ICckJzsKICAgIG15ICRzY2FuX3N0YXRlX0FMUEhBICAgICA9ICdBJzsKICAgIG15ICRzY2FuX3N0YXRlX0NPTE9OICAgICA9ICc6JzsKICAgIG15ICRzY2FuX3N0YXRlX0xQQVJFTiAgICA9ICcoJzsKICAgIG15ICRzY2FuX3N0YXRlX1JQQVJFTiAgICA9ICcpJzsKICAgIG15ICRzY2FuX3N0YXRlX0FNUEVSU0FORCA9ICcmJzsKICAgIG15ICRzY2FuX3N0YXRlX1NQTElUICAgICA9ICdeJzsKCiAgICAjIE9ubHkgdGhlc2Ugbm9uLWJsYW5rIHN0YXRlcyBtYXkgYmUgcmV0dXJuZWQgdG8gY2FsbGVyOgogICAgbXkgJWlzX3JldHVybmFibGVfc2Nhbl9zdGF0ZSA9ICgKICAgICAgICAkc2Nhbl9zdGF0ZV9TSUdJTCAgICAgPT4gMSwKICAgICAgICAkc2Nhbl9zdGF0ZV9BTVBFUlNBTkQgPT4gMSwKICAgICk7CgogICAgIyBVU0VTIEdMT0JBTCBWQVJJQUJMRVM6CiAgICAjICAgICRjb250ZXh0LCAkbGFzdF9ub25ibGFua190b2tlbiwgJGxhc3Rfbm9uYmxhbmtfdHlwZQoKICAgICMtLS0tLS0tLS0tLQogICAgIyBjYWxsIGFyZ3M6CiAgICAjLS0tLS0tLS0tLS0KICAgIG15ICggJGksICRpZF9zY2FuX3N0YXRlLCAkaWRlbnRpZmllciwgJHJ0b2tlbnMsICRtYXhfdG9rZW5faW5kZXgsCiAgICAgICAgJGV4cGVjdGluZywgJGNvbnRhaW5lcl90eXBlICk7CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgbXkgdmFyaWFibGVzLCByZS1pbml0aWFsaXplZCBvbiBlYWNoIGNhbGw6CiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgbXkgJGlfYmVnaW47ICAgICAgICAgICAgICAgICMgc3RhcnRpbmcgaW5kZXggJGkKICAgIG15ICR0eXBlOyAgICAgICAgICAgICAgICAgICAjIHJldHVybmVkIGlkZW50aWZpZXIgdHlwZQogICAgbXkgJHRva19iZWdpbjsgICAgICAgICAgICAgICMgc3RhcnRpbmcgdG9rZW4KICAgIG15ICR0b2s7ICAgICAgICAgICAgICAgICAgICAjIHJldHVybmVkIHRva2VuCiAgICBteSAkaWRfc2Nhbl9zdGF0ZV9iZWdpbjsgICAgIyBzdGFydGluZyBzY2FuIHN0YXRlCiAgICBteSAkaWRlbnRpZmllcl9iZWdpbjsgICAgICAgIyBzdGFydGluZyBpZGVudGlmaWVyCiAgICBteSAkaV9zYXZlOyAgICAgICAgICAgICAgICAgIyBhIGxhc3QgZ29vZCBpbmRleCwgaW4gY2FzZSBvZiBlcnJvcgogICAgbXkgJG1lc3NhZ2U7ICAgICAgICAgICAgICAgICMgaG9sZCBlcnJvciBtZXNzYWdlIGZvciBsb2cgZmlsZQogICAgbXkgJHRva19pc19ibGFuazsKICAgIG15ICRsYXN0X3Rva19pc19ibGFuazsKICAgIG15ICRpbl9wcm90b3R5cGVfb3Jfc2lnbmF0dXJlOwogICAgbXkgJHNhd19hbHBoYTsKICAgIG15ICRzYXdfdHlwZTsKICAgIG15ICRhbGxvd190aWNrOwoKICAgIHN1YiBpbml0aWFsaXplX215X3NjYW5faWRfdmFycyB7CgogICAgICAgICMgSW5pdGlhbGl6ZSBhbGwgJ215JyB2YXJzIG9uIGVudHJ5CiAgICAgICAgJGlfYmVnaW4gICA9ICRpOwogICAgICAgICR0eXBlICAgICAgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgJHRva19iZWdpbiA9ICRydG9rZW5zLT5bJGlfYmVnaW5dOwogICAgICAgICR0b2sgICAgICAgPSAkdG9rX2JlZ2luOwogICAgICAgIGlmICggJHRva19iZWdpbiBlcSAnOicgKSB7ICR0b2tfYmVnaW4gPSAnOjonIH0KICAgICAgICAkaWRfc2Nhbl9zdGF0ZV9iZWdpbiA9ICRpZF9zY2FuX3N0YXRlOwogICAgICAgICRpZGVudGlmaWVyX2JlZ2luICAgID0gJGlkZW50aWZpZXI7CiAgICAgICAgJGlfc2F2ZSAgICAgICAgICAgICAgPSB1bmRlZjsKCiAgICAgICAgJG1lc3NhZ2UgICAgICAgICAgID0gRU1QVFlfU1RSSU5HOwogICAgICAgICR0b2tfaXNfYmxhbmsgICAgICA9IHVuZGVmOyAgICAgICAgICAjIGEgZmxhZyB0byBzcGVlZCB0aGluZ3MgdXAKICAgICAgICAkbGFzdF90b2tfaXNfYmxhbmsgPSB1bmRlZjsKCiAgICAgICAgJGluX3Byb3RvdHlwZV9vcl9zaWduYXR1cmUgPQogICAgICAgICAgJGNvbnRhaW5lcl90eXBlICYmICRjb250YWluZXJfdHlwZSA9fiAvXnN1YlxiLzsKCiAgICAgICAgIyB0aGVzZSBmbGFncyB3aWxsIGJlIHVzZWQgdG8gaGVscCBmaWd1cmUgb3V0IHRoZSB0eXBlOgogICAgICAgICRzYXdfYWxwaGEgPSB1bmRlZjsKICAgICAgICAkc2F3X3R5cGUgID0gdW5kZWY7CgogICAgICAgICMgYWxsb3cgb2xkIHBhY2thZ2Ugc2VwYXJhdG9yICgnKSBleGNlcHQgaW4gJ3VzZScgc3RhdGVtZW50CiAgICAgICAgJGFsbG93X3RpY2sgPSAoICRsYXN0X25vbmJsYW5rX3Rva2VuIG5lICd1c2UnICk7CiAgICAgICAgcmV0dXJuOwogICAgfSAjIyBlbmQgc3ViIGluaXRpYWxpemVfbXlfc2Nhbl9pZF92YXJzCgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgUm91dGluZXMgZm9yIGhhbmRsaW5nIHNjYW4gc3RhdGVzCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgc3ViIGRvX2lkX3NjYW5fc3RhdGVfZG9sbGFyIHsKCiAgICAgICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICAgICAgIyBXZSBzYXcgYSBzaWdpbCwgbm93IGxvb2tpbmcgdG8gc3RhcnQgYSB2YXJpYWJsZSBuYW1lCiAgICAgICAgaWYgKCAkdG9rIGVxICckJyApIHsKCiAgICAgICAgICAgICRpZGVudGlmaWVyIC49ICR0b2s7CgogICAgICAgICAgICAjIHdlJ3ZlIGdvdCBhIHB1bmN0dWF0aW9uIHZhcmlhYmxlIGlmIGVuZCBvZiBsaW5lIChwdW5jdC50KQogICAgICAgICAgICBpZiAoICRpID09ICRtYXhfdG9rZW5faW5kZXggKSB7CiAgICAgICAgICAgICAgICAkdHlwZSAgICAgICAgICA9ICdpJzsKICAgICAgICAgICAgICAgICRpZF9zY2FuX3N0YXRlID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJHRvayA9fiAvXlx3LyApIHsgICAgIyBhbHBoYW51bWVyaWMgLi4KICAgICAgICAgICAgJHNhd19hbHBoYSA9IDE7CiAgICAgICAgICAgICRpZGVudGlmaWVyIC49ICR0b2s7CgogICAgICAgICAgICAjIG5vdyBuZWVkIDo6IGV4Y2VwdCBmb3Igc3BlY2lhbCBkaWdpdCB2YXJzIGxpa2UgJyQxJyAoYzIwOCkKICAgICAgICAgICAgJGlkX3NjYW5fc3RhdGUgPSAkdG9rID1+IC9eXGQvID8gRU1QVFlfU1RSSU5HIDogJHNjYW5fc3RhdGVfQ09MT047CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJHRvayBlcSAnOjonICkgewogICAgICAgICAgICAkaWRfc2Nhbl9zdGF0ZSA9ICRzY2FuX3N0YXRlX0FMUEhBOwogICAgICAgICAgICAkaWRlbnRpZmllciAuPSAkdG9rOwogICAgICAgIH0KCiAgICAgICAgIyBQT1NUREVGUkVGIC0+QCAtPiUgLT4mIC0+KgogICAgICAgIGVsc2lmICggKCAkdG9rID1+IC9eW1xAXCVcJlwqXSQvICkgJiYgJGlkZW50aWZpZXIgPX4gL1wtXD4kLyApIHsKICAgICAgICAgICAgJGlkZW50aWZpZXIgLj0gJHRvazsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkdG9rIGVxICInIiAmJiAkYWxsb3dfdGljayApIHsgICAgIyBhbHBoYW51bWVyaWMgLi4KICAgICAgICAgICAgJHNhd19hbHBoYSAgICAgPSAxOwogICAgICAgICAgICAkaWRfc2Nhbl9zdGF0ZSA9ICRzY2FuX3N0YXRlX0NPTE9OOyAgICAjIG5vdyBuZWVkIDo6CiAgICAgICAgICAgICRpZGVudGlmaWVyIC49ICR0b2s7CgogICAgICAgICAgICAjIFBlcmwgd2lsbCBhY2NlcHQgbGVhZGluZyBkaWdpdHMgaW4gaWRlbnRpZmllcnMsCiAgICAgICAgICAgICMgYWx0aG91Z2ggdGhleSBtYXkgbm90IGFsd2F5cyBwcm9kdWNlIHVzZWZ1bCByZXN1bHRzLgogICAgICAgICAgICAjIFNvbWV0aGluZyBsaWtlICRtYWluOjowIGlzIG9rLiAgQnV0IHRoaXMgYWxzbyB3b3JrczoKICAgICAgICAgICAgIwogICAgICAgICAgICAjICBzdWIgaG93ZHk6OjEyMzo6YnViYmF7IHByaW50ICJidWJiYSAkNTQzMjEhXG4iIH0KICAgICAgICAgICAgIyAgaG93ZHk6OjEyMzo6YnViYmEoKTsKICAgICAgICAgICAgIwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICR0b2sgZXEgJyMnICkgewoKICAgICAgICAgICAgbXkgJGlzX3B1bmN0X3ZhciA9ICRpZGVudGlmaWVyIGVxICckJCc7CgogICAgICAgICAgICAjIHNpZGUgY29tbWVudCBvciBpZGVudGlmaWVyPwogICAgICAgICAgICBpZiAoCgogICAgICAgICAgICAgICAgIyBBICcjJyBzdGFydHMgYSBjb21tZW50IGlmIGl0IGZvbGxvd3MgYSBzcGFjZS4gRm9yIGV4YW1wbGUsCiAgICAgICAgICAgICAgICAjIHRoZSBmb2xsb3dpbmcgaXMgZXF1aXZhbGVudCB0byAkYW5zPTQwLgogICAgICAgICAgICAgICAgIyAgIG15ICQgIwogICAgICAgICAgICAgICAgIyAgICAgYW5zID0gNDA7CiAgICAgICAgICAgICAgICAhJGxhc3RfdG9rX2lzX2JsYW5rCgogICAgICAgICAgICAgICAgIyBhICMgaW5zaWRlIGEgcHJvdG90eXBlIG9yIHNpZ25hdHVyZSBjYW4gb25seSBzdGFydCBhCiAgICAgICAgICAgICAgICAjIGNvbW1lbnQKICAgICAgICAgICAgICAgICYmICEkaW5fcHJvdG90eXBlX29yX3NpZ25hdHVyZQoKICAgICAgICAgICAgICAgICMgdGhlc2UgYXJlIHZhbGlkIHB1bmN0dWF0aW9uIHZhcnM6ICojICUjIEAjICQjCiAgICAgICAgICAgICAgICAjIE1heSBhbHNvIGJlICckI2FycmF5JyBvciBQT1NUREVGUkVGIC0+JCMKICAgICAgICAgICAgICAgICYmICggICAkaWRlbnRpZmllciA9fiAvXltcJVxAXCRcKl0kLwogICAgICAgICAgICAgICAgICAgIHx8ICRpZGVudGlmaWVyID1+IC9cJCQvICkKCiAgICAgICAgICAgICAgICAjIGJ1dCBhICcjJyBhZnRlciAnJCQnIGlzIGEgc2lkZSBjb21tZW50OyBzZWUgYzE0NwogICAgICAgICAgICAgICAgJiYgISRpc19wdW5jdF92YXIKCiAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkaWRlbnRpZmllciAuPSAkdG9rOyAgICAjIGtlZXAgc2FtZSBzdGF0ZSwgYSAkIGNvdWxkIGZvbGxvdwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgb3RoZXJ3aXNlIGl0IGlzIGEgc2lkZSBjb21tZW50CiAgICAgICAgICAgICAgICBpZiAgICAoICRpZGVudGlmaWVyIGVxICctPicgKSAgICAgICAgICAgICAgICAgeyB9CiAgICAgICAgICAgICAgICBlbHNpZiAoJGlzX3B1bmN0X3ZhcikgICAgICAgICAgICAgICAgICAgICAgICAgeyAkdHlwZSA9ICdpJyB9CiAgICAgICAgICAgICAgICBlbHNpZiAoICRpZF9zY2FuX3N0YXRlIGVxICRzY2FuX3N0YXRlX1NJR0lMICkgeyAkdHlwZSA9ICd0JyB9CiAgICAgICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkdHlwZSA9ICdpJyB9CiAgICAgICAgICAgICAgICAkaSAgICAgICAgICAgICA9ICRpX3NhdmU7CiAgICAgICAgICAgICAgICAkaWRfc2Nhbl9zdGF0ZSA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZWxzaWYgKCAkdG9rIGVxICd7JyApIHsKCiAgICAgICAgICAgICMgY2hlY2sgZm9yIHNvbWV0aGluZyBsaWtlICR7I30gb3IgJHs/fSwgd2hlcmUgPyBpcyBhIHNwZWNpYWwgY2hhcgogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgJGlkZW50aWZpZXIgZXEgJyQnCiAgICAgICAgICAgICAgICAgICAgfHwgJGlkZW50aWZpZXIgZXEgJ0AnCiAgICAgICAgICAgICAgICAgICAgfHwgJGlkZW50aWZpZXIgZXEgJyQjJwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgJiYgJGkgKyAyIDw9ICRtYXhfdG9rZW5faW5kZXgKICAgICAgICAgICAgICAgICYmICRydG9rZW5zLT5bICRpICsgMiBdIGVxICd9JwogICAgICAgICAgICAgICAgJiYgJHJ0b2tlbnMtPlsgJGkgKyAxIF0gIX4gL1tcc1x3XS8KICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG15ICRuZXh0MiA9ICRydG9rZW5zLT5bICRpICsgMiBdOwogICAgICAgICAgICAgICAgbXkgJG5leHQxID0gJHJ0b2tlbnMtPlsgJGkgKyAxIF07CiAgICAgICAgICAgICAgICAkaWRlbnRpZmllciAuPSAkdG9rIC4gJG5leHQxIC4gJG5leHQyOwogICAgICAgICAgICAgICAgJGkgKz0gMjsKICAgICAgICAgICAgICAgICRpZF9zY2FuX3N0YXRlID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgc2tpcCBzb21ldGhpbmcgbGlrZSAke3h4eH0gb3IgLT57CiAgICAgICAgICAgICAgICAkaWRfc2Nhbl9zdGF0ZSA9IEVNUFRZX1NUUklORzsKCiAgICAgICAgICAgICAgICAjIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRva2VuIG9mIGEgbGluZSwgYW55IHRva2VucyBmb3IgdGhpcwogICAgICAgICAgICAgICAgIyBpZGVudGlmaWVyIGhhdmUgYWxyZWFkeSBiZWVuIGFjY3VtdWxhdGVkCiAgICAgICAgICAgICAgICBpZiAoICRpZGVudGlmaWVyIGVxICckJyB8fCAkaSA9PSAwICkgewogICAgICAgICAgICAgICAgICAgICRpZGVudGlmaWVyID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGkgPSAkaV9zYXZlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHNwYWNlIG9rIGFmdGVyIGxlYWRpbmcgJCAlICogJiBACiAgICAgICAgZWxzaWYgKCAkdG9rID1+IC9eXHMqJC8gKSB7CgogICAgICAgICAgICAkdG9rX2lzX2JsYW5rID0gMTsKCiAgICAgICAgICAgICMgbm90ZTogYW4gaWQgd2l0aCBhIGxlYWRpbmcgJyYnIGRvZXMgbm90IGFjdHVhbGx5IGNvbWUgdGhpcyB3YXkKICAgICAgICAgICAgaWYgKCAkaWRlbnRpZmllciA9fiAvXltcJFwlXCpcJlxAXS8gKSB7CgogICAgICAgICAgICAgICAgaWYgKCBsZW5ndGgoJGlkZW50aWZpZXIpID4gMSApIHsKICAgICAgICAgICAgICAgICAgICAkaWRfc2Nhbl9zdGF0ZSA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgICAgICAgICAkaSAgICAgICAgICAgICA9ICRpX3NhdmU7CiAgICAgICAgICAgICAgICAgICAgJHR5cGUgICAgICAgICAgPSAnaSc7ICAgICMgcHJvYmFibHkgcHVuY3R1YXRpb24gdmFyaWFibGUKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAjIGZpeCBjMTM5OiB0cmltIGxpbmUtZW5kaW5nIHR5cGUgJ3QnCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkaSA9PSAkbWF4X3Rva2VuX2luZGV4ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkaSAgICA9ICRpX3NhdmU7CiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0gJ3QnOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBzcGFjZXMgYWZ0ZXIgJCdzIGFyZSBjb21tb24sIGFuZCBzcGFjZSBhZnRlciBACiAgICAgICAgICAgICAgICAgICAgIyBpcyBoYXJtbGVzcywgc28gb25seSBjb21wbGFpbiBhYm91dCBzcGFjZQogICAgICAgICAgICAgICAgICAgICMgYWZ0ZXIgb3RoZXIgdHlwZSBjaGFyYWN0ZXJzLiBTcGFjZSBhZnRlciAkIGFuZAogICAgICAgICAgICAgICAgICAgICMgQCB3aWxsIGJlIHJlbW92ZWQgaW4gZm9ybWF0dGluZy4gIFJlcG9ydCBzcGFjZQogICAgICAgICAgICAgICAgICAgICMgYWZ0ZXIgJSBhbmQgKiBiZWNhdXNlIHRoZXkgbWlnaHQgaW5kaWNhdGUgYQogICAgICAgICAgICAgICAgICAgICMgcGFyc2luZyBlcnJvci4gIEluIG90aGVyIHdvcmRzICclICcgbWlnaHQgYmUgYQogICAgICAgICAgICAgICAgICAgICMgbW9kdWxvIG9wZXJhdG9yLiAgRGVsZXRlIHRoaXMgd2FybmluZyBpZiBpdAogICAgICAgICAgICAgICAgICAgICMgZ2V0cyBhbm5veWluZy4KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRpZGVudGlmaWVyICF+IC9eW1xAXCRdJC8gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRtZXNzYWdlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAiU3BhY2UgaW4gaWRlbnRpZmllciwgZm9sbG93aW5nICRpZGVudGlmaWVyXG4iOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIyBzaWxlbnRseSBhY2NlcHQgc3BhY2UgYWZ0ZXIgJyQnIGFuZCAnQCcgc2lnaWxzCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBlbHNpZiAoICRpZGVudGlmaWVyIGVxICctPicgKSB7CgogICAgICAgICAgICAgICAgIyBzcGFjZSBhZnRlciAnLT4nIGlzIG9rIGV4Y2VwdCBhdCBsaW5lIGVuZCAuLgogICAgICAgICAgICAgICAgIyBzbyB0cmltIGxpbmUtZW5kaW5nIGluIHR5cGUgJy0+JyAoZml4ZXMgYzEzOSkKICAgICAgICAgICAgICAgIGlmICggJGkgPT0gJG1heF90b2tlbl9pbmRleCApIHsKICAgICAgICAgICAgICAgICAgICAkaSAgICA9ICRpX3NhdmU7CiAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAnLT4nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHN0b3AgYXQgc3BhY2UgYWZ0ZXIgc29tZXRoaW5nIG90aGVyIHRoYW4gLT4gb3Igc2lnaWwKICAgICAgICAgICAgIyBFeGFtcGxlIG9mIHdoYXQgY2FuIGFycml2ZSBoZXJlOgogICAgICAgICAgICAjICAgZXZhbCB7ICRNeUNsYXNzLT4kJCB9OwogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRpZF9zY2FuX3N0YXRlID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICAgICAgJGkgICAgICAgICAgICAgPSAkaV9zYXZlOwogICAgICAgICAgICAgICAgJHR5cGUgICAgICAgICAgPSAnaSc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkdG9rIGVxICdeJyApIHsKCiAgICAgICAgICAgICMgY2hlY2sgZm9yIHNvbWUgc3BlY2lhbCB2YXJpYWJsZXMgbGlrZSAkXiAkXlcKICAgICAgICAgICAgaWYgKCAkaWRlbnRpZmllciA9fiAvXltcJFwqXEBcJV0kLyApIHsKICAgICAgICAgICAgICAgICRpZGVudGlmaWVyIC49ICR0b2s7CiAgICAgICAgICAgICAgICAkdHlwZSA9ICdpJzsKCiAgICAgICAgICAgICAgICAjIFRoZXJlIG1heSBiZSBvbmUgbW9yZSBjaGFyYWN0ZXIsIG5vdCBhIHNwYWNlLCBhZnRlciB0aGUgXgogICAgICAgICAgICAgICAgbXkgJG5leHQxID0gJHJ0b2tlbnMtPlsgJGkgKyAxIF07CiAgICAgICAgICAgICAgICBteSAkY2hyICAgPSBzdWJzdHIoICRuZXh0MSwgMCwgMSApOwogICAgICAgICAgICAgICAgaWYgKCAkaXNfc3BlY2lhbF92YXJpYWJsZV9jaGFyeyRjaHJ9ICkgewoKICAgICAgICAgICAgICAgICAgICAjIEl0IGlzIHNvbWV0aGluZyBsaWtlICReVwogICAgICAgICAgICAgICAgICAgICMgVGVzdCBjYXNlIChjMDY2KSA6ICReT2VxJ2xpbnV4JwogICAgICAgICAgICAgICAgICAgICRpKys7CiAgICAgICAgICAgICAgICAgICAgJGlkZW50aWZpZXIgLj0gJG5leHQxOwoKICAgICAgICAgICAgICAgICAgICAjIElmIHByZXRva2VuICRuZXh0MSBpcyBtb3JlIHRoYW4gb25lIGNoYXJhY3RlciBsb25nLAogICAgICAgICAgICAgICAgICAgICMgc2V0IGEgZmxhZyBpbmRpY2F0aW5nIHRoYXQgaXQgbmVlZHMgdG8gYmUgc3BsaXQuCiAgICAgICAgICAgICAgICAgICAgJGlkX3NjYW5fc3RhdGUgPQogICAgICAgICAgICAgICAgICAgICAgKCBsZW5ndGgoJG5leHQxKSA+IDEgKSA/ICRzY2FuX3N0YXRlX1NQTElUIDogRU1QVFlfU1RSSU5HOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICMgaXQgaXMganVzdCAkXgogICAgICAgICAgICAgICAgICAgICMgU2ltcGxlIHRlc3QgY2FzZSAoYzA2NSk6ICckYWE9JF5pZigkYmIpJzsKICAgICAgICAgICAgICAgICAgICAkaWRfc2Nhbl9zdGF0ZSA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRpZF9zY2FuX3N0YXRlID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICAgICAgJGkgICAgICAgICAgICAgPSAkaV9zYXZlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgeyAgICAjIHNvbWV0aGluZyBlbHNlCgogICAgICAgICAgICBpZiAoICRpbl9wcm90b3R5cGVfb3Jfc2lnbmF0dXJlICYmICR0b2sgPX4gL15bXCksPSNdLyApIHsKCiAgICAgICAgICAgICAgICAjIFdlIG1pZ2h0IGJlIGluIGFuIGV4dHJ1c2lvbiBvZgogICAgICAgICAgICAgICAgIyAgICAgc3ViIGZvbzIgKCAkZmlyc3QsICQsICR0aGlyZCApIHsKICAgICAgICAgICAgICAgICMgbG9va2luZyBhdCBhIGxpbmUgc3RhcnRpbmcgd2l0aCBhIGNvbW1hLCBsaWtlCiAgICAgICAgICAgICAgICAjICAgJAogICAgICAgICAgICAgICAgIyAgICwKICAgICAgICAgICAgICAgICMgaW4gdGhpcyBjYXNlIHRoZSBjb21tYSBlbmRzIHRoZSBzaWduYXR1cmUgdmFyaWFibGUKICAgICAgICAgICAgICAgICMgJyQnIHdoaWNoIHdpbGwgaGF2ZSBiZWVuIHByZXZpb3VzbHkgbWFya2VkIHR5cGUgJ3QnCiAgICAgICAgICAgICAgICAjIHJhdGhlciB0aGFuICdpJy4KICAgICAgICAgICAgICAgIGlmICggJGkgPT0gJGlfYmVnaW4gKSB7CiAgICAgICAgICAgICAgICAgICAgJGlkZW50aWZpZXIgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgICAgICAgICAgJHR5cGUgICAgICAgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBhdCBhICMgd2UgaGF2ZSB0byBtYXJrIGFzIHR5cGUgJ3QnIGJlY2F1c2UgbW9yZSBtYXkKICAgICAgICAgICAgICAgICMgZm9sbG93LCBvdGhlcndpc2UsIGluIGEgc2lnbmF0dXJlIHdlIGNhbiBsZXQgJyQnIGJlIGFuCiAgICAgICAgICAgICAgICAjIGlkZW50aWZpZXIgaGVyZSBmb3IgYmV0dGVyIGZvcm1hdHRpbmcuCiAgICAgICAgICAgICAgICAjIFNlZSAnbWFuZ2xlNC5pbicgZm9yIGEgdGVzdCBjYXNlLgogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAnaSc7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkaWRfc2Nhbl9zdGF0ZSBlcSAkc2Nhbl9zdGF0ZV9TSUdJTCAmJiAkdG9rIGVxICcjJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAndCc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRpID0gJGlfc2F2ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRpZF9zY2FuX3N0YXRlID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNoZWNrIGZvciB2YXJpb3VzIHB1bmN0dWF0aW9uIHZhcmlhYmxlcwogICAgICAgICAgICBlbHNpZiAoICRpZGVudGlmaWVyID1+IC9eW1wkXCpcQFwlXSQvICkgewogICAgICAgICAgICAgICAgJGlkZW50aWZpZXIgLj0gJHRvazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBQT1NUREVGUkVGOiBQb3N0Zml4IHJlZmVyZW5jZSAtPiQqIC0+JSogIC0+QCogLT4qKiAtPiYqIC0+JCMqCiAgICAgICAgICAgIGVsc2lmICgkdG9rIGVxICcqJwogICAgICAgICAgICAgICAgJiYgJGlkZW50aWZpZXIgPX4gL1wtXD4oW1xAXCVcJFwqXCZdfFwkXCMpJC8gKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkaWRlbnRpZmllciAuPSAkdG9rOwogICAgICAgICAgICB9CgogICAgICAgICAgICBlbHNpZiAoICRpZGVudGlmaWVyIGVxICckIycgKSB7CgogICAgICAgICAgICAgICAgaWYgKCAkdG9rIGVxICd7JyApIHsgJHR5cGUgPSAnaSc7ICRpID0gJGlfc2F2ZSB9CgogICAgICAgICAgICAgICAgIyBwZXJsIHNlZW1zIHRvIGFsbG93IGp1c3QgdGhlc2U6ICQjOiAkIy0gJCMrCiAgICAgICAgICAgICAgICBlbHNpZiAoICR0b2sgPX4gL15bXDpcLVwrXSQvICkgewogICAgICAgICAgICAgICAgICAgICR0eXBlID0gJ2knOwogICAgICAgICAgICAgICAgICAgICRpZGVudGlmaWVyIC49ICR0b2s7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkaSA9ICRpX3NhdmU7CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPndyaXRlX2xvZ2ZpbGVfZW50cnkoCiAgICAgICAgICAgICAgICAgICAgICAgICdVc2Ugb2YgJCMgaXMgZGVwcmVjYXRlZCcgLiAiXG4iICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkaWRlbnRpZmllciBlcSAnJCQnICkgewoKICAgICAgICAgICAgICAgICMgcGVybCBkb2VzIG5vdCBhbGxvdyByZWZlcmVuY2VzIHRvIHB1bmN0dWF0aW9uCiAgICAgICAgICAgICAgICAjIHZhcmlhYmxlcyB3aXRob3V0IGJyYWNlcy4gIEZvciBleGFtcGxlLCB0aGlzCiAgICAgICAgICAgICAgICAjIHdvbid0IHdvcms6CiAgICAgICAgICAgICAgICAjICAkOj1cNDsKICAgICAgICAgICAgICAgICMgICRhID0gJCQ6OwogICAgICAgICAgICAgICAgIyBZb3Ugd291bGQgaGF2ZSB0byB1c2UKICAgICAgICAgICAgICAgICMgICRhID0gJHskOn07CgogICAgICAgICAgICAgICAgIyAnJCQnIGFsb25lIGlzIHB1bmN0dWF0aW9uIHZhcmlhYmxlIGZvciBQSUQKICAgICAgICAgICAgICAgICRpID0gJGlfc2F2ZTsKICAgICAgICAgICAgICAgIGlmICAgKCAkdG9rIGVxICd7JyApIHsgJHR5cGUgPSAndCcgfQogICAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgeyAkdHlwZSA9ICdpJyB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkaWRlbnRpZmllciBlcSAnLT4nICkgewogICAgICAgICAgICAgICAgJGkgPSAkaV9zYXZlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJGkgPSAkaV9zYXZlOwogICAgICAgICAgICAgICAgaWYgKCBsZW5ndGgoJGlkZW50aWZpZXIpID09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgJGlkZW50aWZpZXIgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGlkX3NjYW5fc3RhdGUgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBkb19pZF9zY2FuX3N0YXRlX2RvbGxhcgoKICAgIHN1YiBkb19pZF9zY2FuX3N0YXRlX2FscGhhIHsKCiAgICAgICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICAgICAgIyBsb29raW5nIGZvciBhbHBoYW51bWVyaWMgYWZ0ZXIgOjoKICAgICAgICAkdG9rX2lzX2JsYW5rID0gJHRvayA9fiAvXlxzKiQvOwoKICAgICAgICBpZiAoICR0b2sgPX4gL15cdy8gKSB7ICAgICMgZm91bmQgaXQKICAgICAgICAgICAgJGlkZW50aWZpZXIgLj0gJHRvazsKICAgICAgICAgICAgJGlkX3NjYW5fc3RhdGUgPSAkc2Nhbl9zdGF0ZV9DT0xPTjsgICAgIyBub3cgbmVlZCA6OgogICAgICAgICAgICAkc2F3X2FscGhhICAgICA9IDE7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJHRvayBlcSAiJyIgJiYgJGFsbG93X3RpY2sgKSB7CiAgICAgICAgICAgICRpZGVudGlmaWVyIC49ICR0b2s7CiAgICAgICAgICAgICRpZF9zY2FuX3N0YXRlID0gJHNjYW5fc3RhdGVfQ09MT047ICAgICMgbm93IG5lZWQgOjoKICAgICAgICAgICAgJHNhd19hbHBoYSAgICAgPSAxOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICR0b2tfaXNfYmxhbmsgJiYgJGlkZW50aWZpZXIgPX4gL15zdWIgLyApIHsKICAgICAgICAgICAgJGlkX3NjYW5fc3RhdGUgPSAkc2Nhbl9zdGF0ZV9MUEFSRU47CiAgICAgICAgICAgICRpZGVudGlmaWVyIC49ICR0b2s7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJHRvayBlcSAnKCcgJiYgJGlkZW50aWZpZXIgPX4gL15zdWIgLyApIHsKICAgICAgICAgICAgJGlkX3NjYW5fc3RhdGUgPSAkc2Nhbl9zdGF0ZV9SUEFSRU47CiAgICAgICAgICAgICRpZGVudGlmaWVyIC49ICR0b2s7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkaWRfc2Nhbl9zdGF0ZSA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgJGkgICAgICAgICAgICAgPSAkaV9zYXZlOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgZG9faWRfc2Nhbl9zdGF0ZV9hbHBoYQoKICAgIHN1YiBkb19pZF9zY2FuX3N0YXRlX2NvbG9uIHsKCiAgICAgICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICAgICAgIyBsb29raW5nIGZvciBwb3NzaWJsZSA6OiBhZnRlciBhbHBoYW51bWVyaWMKCiAgICAgICAgJHRva19pc19ibGFuayA9ICR0b2sgPX4gL15ccyokLzsKCiAgICAgICAgaWYgKCAkdG9rIGVxICc6OicgKSB7ICAgICMgZ290IGl0CiAgICAgICAgICAgICRpZGVudGlmaWVyIC49ICR0b2s7CiAgICAgICAgICAgICRpZF9zY2FuX3N0YXRlID0gJHNjYW5fc3RhdGVfQUxQSEE7ICAgICMgbm93IHJlcXVpcmUgYWxwaGEKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkdG9rID1+IC9eXHcvICkgeyAgICAjIG1vcmUgYWxwaGFudW1lcmljIGlzIG9rIGhlcmUKICAgICAgICAgICAgJGlkZW50aWZpZXIgLj0gJHRvazsKICAgICAgICAgICAgJGlkX3NjYW5fc3RhdGUgPSAkc2Nhbl9zdGF0ZV9DT0xPTjsgICAgIyBub3cgbmVlZCA6OgogICAgICAgICAgICAkc2F3X2FscGhhICAgICA9IDE7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJHRvayBlcSAiJyIgJiYgJGFsbG93X3RpY2sgKSB7ICAgICAjIHRpY2sKCiAgICAgICAgICAgIGlmICggJGlzX2tleXdvcmR7JGlkZW50aWZpZXJ9ICkgewogICAgICAgICAgICAgICAgJGlkX3NjYW5fc3RhdGUgPSBFTVBUWV9TVFJJTkc7ICAgICAjIHRoYXQncyBhbGwKICAgICAgICAgICAgICAgICRpICAgICAgICAgICAgID0gJGlfc2F2ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRpZGVudGlmaWVyIC49ICR0b2s7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkdG9rX2lzX2JsYW5rICYmICRpZGVudGlmaWVyID1+IC9ec3ViIC8gKSB7CiAgICAgICAgICAgICRpZF9zY2FuX3N0YXRlID0gJHNjYW5fc3RhdGVfTFBBUkVOOwogICAgICAgICAgICAkaWRlbnRpZmllciAuPSAkdG9rOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICR0b2sgZXEgJygnICYmICRpZGVudGlmaWVyID1+IC9ec3ViIC8gKSB7CiAgICAgICAgICAgICRpZF9zY2FuX3N0YXRlID0gJHNjYW5fc3RhdGVfUlBBUkVOOwogICAgICAgICAgICAkaWRlbnRpZmllciAuPSAkdG9rOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJGlkX3NjYW5fc3RhdGUgPSBFTVBUWV9TVFJJTkc7ICAgICMgdGhhdCdzIGFsbAogICAgICAgICAgICAkaSAgICAgICAgICAgICA9ICRpX3NhdmU7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBkb19pZF9zY2FuX3N0YXRlX2NvbG9uCgogICAgc3ViIGRvX2lkX3NjYW5fc3RhdGVfbGVmdF9wYXJlbiB7CgogICAgICAgIG15ICRzZWxmID0gc2hpZnQ7CgogICAgICAgICMgbG9va2luZyBmb3IgcG9zc2libGUgJygnIG9mIGEgcHJvdG90eXBlCgogICAgICAgIGlmICggJHRvayBlcSAnKCcgKSB7ICAgICMgZ290IGl0CiAgICAgICAgICAgICRpZGVudGlmaWVyIC49ICR0b2s7CiAgICAgICAgICAgICRpZF9zY2FuX3N0YXRlID0gJHNjYW5fc3RhdGVfUlBBUkVOOyAgICAjIG5vdyBmaW5kIHRoZSBlbmQgb2YgaXQKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkdG9rID1+IC9eXHMqJC8gKSB7ICAgICAgICAgICAgICAgICAjIGJsYW5rIC0ga2VlcCBnb2luZwogICAgICAgICAgICAkaWRlbnRpZmllciAuPSAkdG9rOwogICAgICAgICAgICAkdG9rX2lzX2JsYW5rID0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRpZF9zY2FuX3N0YXRlID0gRU1QVFlfU1RSSU5HOyAgICAgICAgICAjIHRoYXQncyBhbGwgLSBubyBwcm90b3R5cGUKICAgICAgICAgICAgJGkgICAgICAgICAgICAgPSAkaV9zYXZlOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9ICMjIGVuZCBzdWIgZG9faWRfc2Nhbl9zdGF0ZV9sZWZ0X3BhcmVuCgogICAgc3ViIGRvX2lkX3NjYW5fc3RhdGVfcmlnaHRfcGFyZW4gewoKICAgICAgICBteSAkc2VsZiA9IHNoaWZ0OwoKICAgICAgICAjIGxvb2tpbmcgZm9yIGEgJyknIG9mIHByb3RvdHlwZSB0byBjbG9zZSBhICcoJwoKICAgICAgICAkdG9rX2lzX2JsYW5rID0gJHRvayA9fiAvXlxzKiQvOwoKICAgICAgICBpZiAoICR0b2sgZXEgJyknICkgeyAgICAjIGdvdCBpdAogICAgICAgICAgICAkaWRlbnRpZmllciAuPSAkdG9rOwogICAgICAgICAgICAkaWRfc2Nhbl9zdGF0ZSA9IEVNUFRZX1NUUklORzsgICAgIyBhbGwgZG9uZQogICAgICAgIH0KICAgICAgICBlbHNpZiAoICR0b2sgPX4gL15bXHNcJFwlXFxcKlxAXCZcO10vICkgewogICAgICAgICAgICAkaWRlbnRpZmllciAuPSAkdG9rOwogICAgICAgIH0KICAgICAgICBlbHNlIHsgICAgIyBwcm9iYWJsZSBlcnJvciBpbiBzY3JpcHQsIGJ1dCBrZWVwIGdvaW5nCiAgICAgICAgICAgICRzZWxmLT53YXJuaW5nKAogICAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgJyR0b2snIHdoaWxlIHNlZWtpbmcgZW5kIG9mIHByb3RvdHlwZVxuIik7CiAgICAgICAgICAgICRpZGVudGlmaWVyIC49ICR0b2s7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBkb19pZF9zY2FuX3N0YXRlX3JpZ2h0X3BhcmVuCgogICAgc3ViIGRvX2lkX3NjYW5fc3RhdGVfYW1wZXJzYW5kIHsKCiAgICAgICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICAgICAgIyBTdGFydGluZyBzdWIgY2FsbCBhZnRlciBzZWVpbmcgYW4gJyYnCiAgICAgICAgaWYgKCAkdG9rID1+IC9eW1wkXHddLyApIHsgICAgIyBhbHBoYW51bWVyaWMgLi4KICAgICAgICAgICAgJGlkX3NjYW5fc3RhdGUgPSAkc2Nhbl9zdGF0ZV9DT0xPTjsgICAgIyBub3cgbmVlZCA6OgogICAgICAgICAgICAkc2F3X2FscGhhICAgICA9IDE7CiAgICAgICAgICAgICRpZGVudGlmaWVyIC49ICR0b2s7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJHRvayBlcSAiJyIgJiYgJGFsbG93X3RpY2sgKSB7ICAgICAjIGFscGhhbnVtZXJpYyAuLgogICAgICAgICAgICAkaWRfc2Nhbl9zdGF0ZSA9ICRzY2FuX3N0YXRlX0NPTE9OOyAgICAjIG5vdyBuZWVkIDo6CiAgICAgICAgICAgICRzYXdfYWxwaGEgICAgID0gMTsKICAgICAgICAgICAgJGlkZW50aWZpZXIgLj0gJHRvazsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkdG9rID1+IC9eXHMqJC8gKSB7ICAgICAgICAgICAgICAgICMgYWxsb3cgc3BhY2UKICAgICAgICAgICAgJHRva19pc19ibGFuayA9IDE7CgogICAgICAgICAgICAjIGZpeCBjMTM5OiB0cmltIGxpbmUtZW5kaW5nIHR5cGUgJ3QnCiAgICAgICAgICAgIGlmICggbGVuZ3RoKCRpZGVudGlmaWVyKSA9PSAxICYmICRpID09ICRtYXhfdG9rZW5faW5kZXggKSB7CiAgICAgICAgICAgICAgICAkaSAgICA9ICRpX3NhdmU7CiAgICAgICAgICAgICAgICAkdHlwZSA9ICd0JzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNpZiAoICR0b2sgZXEgJzo6JyApIHsgICAgICAgICAgICAgICAgICAgIyBsZWFkaW5nIDo6CiAgICAgICAgICAgICRpZF9zY2FuX3N0YXRlID0gJHNjYW5fc3RhdGVfQUxQSEE7ICAgICMgYWNjZXB0IGFscGhhIG5leHQKICAgICAgICAgICAgJGlkZW50aWZpZXIgLj0gJHRvazsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkdG9rIGVxICd7JyApIHsKICAgICAgICAgICAgaWYgKCAkaWRlbnRpZmllciBlcSAnJicgfHwgJGkgPT0gMCApIHsKICAgICAgICAgICAgICAgICRpZGVudGlmaWVyID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRpICAgICAgICAgICAgID0gJGlfc2F2ZTsKICAgICAgICAgICAgJGlkX3NjYW5fc3RhdGUgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJHRvayBlcSAnXicgKSB7CiAgICAgICAgICAgIGlmICggJGlkZW50aWZpZXIgZXEgJyYnICkgewoKICAgICAgICAgICAgICAgICMgU3BlY2lhbCB2YXJpYWJsZSAoYzA2NikKICAgICAgICAgICAgICAgICRpZGVudGlmaWVyIC49ICR0b2s7CiAgICAgICAgICAgICAgICAkdHlwZSA9ICdpJzsKCiAgICAgICAgICAgICAgICAjIFRvIGJlIGEgc3BlY2lhbCAkXiB2YXJpYWJsZSwgdGhlcmUgbWF5IGJlIG9uZSBtb3JlIGNoYXJhY3RlciwKICAgICAgICAgICAgICAgICMgbm90IGEgc3BhY2UsIGFmdGVyIHRoZSBeCiAgICAgICAgICAgICAgICBteSAkbmV4dDEgPSAkcnRva2Vucy0+WyAkaSArIDEgXTsKICAgICAgICAgICAgICAgIG15ICRjaHIgICA9IHN1YnN0ciggJG5leHQxLCAwLCAxICk7CiAgICAgICAgICAgICAgICBpZiAoICRpc19zcGVjaWFsX3ZhcmlhYmxlX2NoYXJ7JGNocn0gKSB7CgogICAgICAgICAgICAgICAgICAgICMgSXQgaXMgc29tZXRoaW5nIGxpa2UgJl5PCiAgICAgICAgICAgICAgICAgICAgJGkrKzsKICAgICAgICAgICAgICAgICAgICAkaWRlbnRpZmllciAuPSAkbmV4dDE7CgogICAgICAgICAgICAgICAgICAgICMgSWYgcHJldG9rZW4gJG5leHQxIGlzIG1vcmUgdGhhbiBvbmUgY2hhcmFjdGVyIGxvbmcsCiAgICAgICAgICAgICAgICAgICAgIyBzZXQgYSBmbGFnIGluZGljYXRpbmcgdGhhdCBpdCBuZWVkcyB0byBiZSBzcGxpdC4KICAgICAgICAgICAgICAgICAgICAkaWRfc2Nhbl9zdGF0ZSA9CiAgICAgICAgICAgICAgICAgICAgICAoIGxlbmd0aCgkbmV4dDEpID4gMSApID8gJHNjYW5fc3RhdGVfU1BMSVQgOiBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgIyBJdCBpcyAmXi4gIFRoaXMgaXMgcGFyc2VkIGJ5IHBlcmwgYXMgYSBjYWxsIHRvIHN1YiAnXicsCiAgICAgICAgICAgICAgICAgICAgIyBldmVuIHRob3VnaCBpdCB3b3VsZCBiZSBkaWZmaWN1bHQgdG8gY3JlYXRlIGEgc3ViICdeJy4KICAgICAgICAgICAgICAgICAgICAjIFNvIHdlIG1hcmsgaXQgYXMgYW4gaWRlbnRpZmllciAoYzA2OCkuCiAgICAgICAgICAgICAgICAgICAgJGlkX3NjYW5fc3RhdGUgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkaWRlbnRpZmllciA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgICAgICRpICAgICAgICAgID0gJGlfc2F2ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgcHVuY3R1YXRpb24gdmFyaWFibGU/CiAgICAgICAgICAgICMgdGVzdGZpbGU6IGN1bm5pbmdoYW00LnBsCiAgICAgICAgICAgICMKICAgICAgICAgICAgIyBXZSBoYXZlIHRvIGJlIGNhcmVmdWwgaGVyZS4gIElmIHdlIGFyZSBpbiBhbiB1bmtub3duIHN0YXRlLAogICAgICAgICAgICAjIHdlIHdpbGwgcmVqZWN0IHRoZSBwdW5jdHVhdGlvbiB2YXJpYWJsZS4gIEluIHRoZSBmb2xsb3dpbmcKICAgICAgICAgICAgIyBleGFtcGxlIHRoZSAnJicgaXMgYSBiaW5hcnkgb3BlcmF0b3IgYnV0IHdlIGFyZSBpbiBhbiB1bmtub3duCiAgICAgICAgICAgICMgc3RhdGUgYmVjYXVzZSB0aGVyZSBpcyBubyBzaWdpbCBvbiAnUHJpbWEnLCBzbyB3ZSBkb24ndAogICAgICAgICAgICAjIGtub3cgd2hhdCBpdCBpcy4gIEJ1dCBpdCBpcyBhIGJhZCBndWVzcyB0aGF0CiAgICAgICAgICAgICMgJyZ+JyBpcyBhIGZ1bmN0aW9uIHZhcmlhYmxlLgogICAgICAgICAgICAjICRzZWxmLT57dGV4dH0tPntjb2xvck1hcH0tPlsKICAgICAgICAgICAgIyAgIFByaW1hOjpQb2RWaWV3OjpDT0xPUl9DT0RFX0ZPUkVHUk9VTkQKICAgICAgICAgICAgIyAgICYgfnRiOjpDT0xPUl9JTkRFWCBdID0KICAgICAgICAgICAgIyAgICRzZWMtPntDb2xvckNvZGV9CgogICAgICAgICAgICAjIEZpeCBmb3IgY2FzZSBjMDMzOiBhICcjJyBoZXJlIHN0YXJ0cyBhIHNpZGUgY29tbWVudAogICAgICAgICAgICBpZiAoICRpZGVudGlmaWVyIGVxICcmJyAmJiAkZXhwZWN0aW5nICYmICR0b2sgbmUgJyMnICkgewogICAgICAgICAgICAgICAgJGlkZW50aWZpZXIgLj0gJHRvazsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRpZGVudGlmaWVyID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICAgICAgJGkgICAgICAgICAgPSAkaV9zYXZlOwogICAgICAgICAgICAgICAgJHR5cGUgICAgICAgPSAnJic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGlkX3NjYW5fc3RhdGUgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0gIyMgZW5kIHN1YiBkb19pZF9zY2FuX3N0YXRlX2FtcGVyc2FuZAoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIGhhc2ggb2Ygc2Nhbm5lciBzdWJzCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgbXkgJHNjYW5faWRlbnRpZmllcl9jb2RlID0gewogICAgICAgICRzY2FuX3N0YXRlX1NJR0lMICAgICA9PiBcJmRvX2lkX3NjYW5fc3RhdGVfZG9sbGFyLAogICAgICAgICRzY2FuX3N0YXRlX0FMUEhBICAgICA9PiBcJmRvX2lkX3NjYW5fc3RhdGVfYWxwaGEsCiAgICAgICAgJHNjYW5fc3RhdGVfQ09MT04gICAgID0+IFwmZG9faWRfc2Nhbl9zdGF0ZV9jb2xvbiwKICAgICAgICAkc2Nhbl9zdGF0ZV9MUEFSRU4gICAgPT4gXCZkb19pZF9zY2FuX3N0YXRlX2xlZnRfcGFyZW4sCiAgICAgICAgJHNjYW5fc3RhdGVfUlBBUkVOICAgID0+IFwmZG9faWRfc2Nhbl9zdGF0ZV9yaWdodF9wYXJlbiwKICAgICAgICAkc2Nhbl9zdGF0ZV9BTVBFUlNBTkQgPT4gXCZkb19pZF9zY2FuX3N0YXRlX2FtcGVyc2FuZCwKICAgIH07CgogICAgc3ViIHNjYW5fY29tcGxleF9pZGVudGlmaWVyIHsKCiAgICAgICAgKAogICAgICAgICAgICBteSAkc2VsZiwKCiAgICAgICAgICAgICRpLAogICAgICAgICAgICAkaWRfc2Nhbl9zdGF0ZSwKICAgICAgICAgICAgJGlkZW50aWZpZXIsCiAgICAgICAgICAgICRydG9rZW5zLAogICAgICAgICAgICAkbWF4X3Rva2VuX2luZGV4LAogICAgICAgICAgICAkZXhwZWN0aW5nLAogICAgICAgICAgICAkY29udGFpbmVyX3R5cGUKCiAgICAgICAgKSA9IEBfOwoKICAgICAgICAjIFRoaXMgcm91dGluZSBhc3NlbWJsZXMgdG9rZW5zIGludG8gaWRlbnRpZmllcnMuICBJdCBtYWludGFpbnMgYQogICAgICAgICMgc2NhbiBzdGF0ZSwgaWRfc2Nhbl9zdGF0ZS4gIEl0IHVwZGF0ZXMgaWRfc2Nhbl9zdGF0ZSBiYXNlZCB1cG9uCiAgICAgICAgIyBjdXJyZW50IGlkX3NjYW5fc3RhdGUgYW5kIHRva2VuLCBhbmQgcmV0dXJucyBhbiB1cGRhdGVkCiAgICAgICAgIyBpZF9zY2FuX3N0YXRlIGFuZCB0aGUgbmV4dCBpbmRleCBhZnRlciB0aGUgaWRlbnRpZmllci4KCiAgICAgICAgIyBUaGlzIHJvdXRpbmUgbm93IHNlcnZlcyBhIGEgYmFja3VwIGZvciBzdWIgc2Nhbl9zaW1wbGVfaWRlbnRpZmllcgogICAgICAgICMgd2hpY2ggaGFuZGxlcyBtb3N0IGlkZW50aWZpZXJzLgoKICAgICAgICAjIE5vdGUgdGhhdCAkc2VsZiBtdXN0IGJlIGEgJ215JyB2YXJpYWJsZSBhbmQgbm90IGJlIGEgY2xvc3VyZQogICAgICAgICMgdmFyaWFibGVzIGxpa2UgdGhlIG90aGVyIGFyZ3MuIE90aGVyd2lzZSBpdCB3aWxsIG5vdCBnZXQKICAgICAgICAjIGRlbGV0ZWQgYnkgYSBERVNUUk9ZIGNhbGwgYXQgdGhlIGVuZCBvZiBhIGZpbGUuIFRoZW4gYW4KICAgICAgICAjIGF0dGVtcHQgdG8gY3JlYXRlIG11bHRpcGxlIHRva2VuaXplcnMgY2FuIG9jY3VyIHdoZW4gbXVsdGlwbGUKICAgICAgICAjIGZpbGVzIGFyZSBwcm9jZXNzZWQsIGNhdXNpbmcgYW4gZXJyb3IuCgogICAgICAgICMgcmV0dXJuIGZsYWcgdGVsbGluZyBjYWxsZXIgdG8gc3BsaXQgdGhlIHByZXRva2VuCiAgICAgICAgbXkgJHNwbGl0X3ByZXRva2VuX2ZsYWc7CgogICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyBJbml0aWFsaXplIG15IHZhcnMKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICBpbml0aWFsaXplX215X3NjYW5faWRfdmFycygpOwoKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAjIGdldCBzdGFydGVkIGJ5IGRlZmluaW5nIGEgdHlwZSBhbmQgYSBzdGF0ZSBpZiBuZWNlc3NhcnkKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgaWYgKCAhJGlkX3NjYW5fc3RhdGUgKSB7CiAgICAgICAgICAgICRjb250ZXh0ID0gVU5LTk9XTl9DT05URVhUOwoKICAgICAgICAgICAgIyBmaXh1cCBmb3IgZGlncmFwaAogICAgICAgICAgICBpZiAoICR0b2sgZXEgJz4nICkgewogICAgICAgICAgICAgICAgJHRvayAgICAgICA9ICctPic7CiAgICAgICAgICAgICAgICAkdG9rX2JlZ2luID0gJHRvazsKICAgICAgICAgICAgfQogICAgICAgICAgICAkaWRlbnRpZmllciA9ICR0b2s7CgogICAgICAgICAgICBpZiAoICRsYXN0X25vbmJsYW5rX3Rva2VuIGVxICctPicgKSB7CiAgICAgICAgICAgICAgICAkaWRlbnRpZmllciAgICA9ICctPicgLiAkaWRlbnRpZmllcjsKICAgICAgICAgICAgICAgICRpZF9zY2FuX3N0YXRlID0gJHNjYW5fc3RhdGVfU0lHSUw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkdG9rIGVxICckJyB8fCAkdG9rIGVxICcqJyApIHsKICAgICAgICAgICAgICAgICRpZF9zY2FuX3N0YXRlID0gJHNjYW5fc3RhdGVfU0lHSUw7CiAgICAgICAgICAgICAgICAkY29udGV4dCAgICAgICA9IFNDQUxBUl9DT05URVhUOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJHRvayBlcSAnJScgfHwgJHRvayBlcSAnQCcgKSB7CiAgICAgICAgICAgICAgICAkaWRfc2Nhbl9zdGF0ZSA9ICRzY2FuX3N0YXRlX1NJR0lMOwogICAgICAgICAgICAgICAgJGNvbnRleHQgICAgICAgPSBMSVNUX0NPTlRFWFQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkdG9rIGVxICcmJyApIHsKICAgICAgICAgICAgICAgICRpZF9zY2FuX3N0YXRlID0gJHNjYW5fc3RhdGVfQU1QRVJTQU5EOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJHRvayBlcSAnc3ViJyBvciAkdG9rIGVxICdwYWNrYWdlJyApIHsKICAgICAgICAgICAgICAgICRzYXdfYWxwaGEgICAgID0gMDsgICAgIyAnc3ViJyBpcyBjb25zaWRlcmVkIHR5cGUgaW5mbyBoZXJlCiAgICAgICAgICAgICAgICAkaWRfc2Nhbl9zdGF0ZSA9ICRzY2FuX3N0YXRlX1NJR0lMOwogICAgICAgICAgICAgICAgJGlkZW50aWZpZXIgLj0KICAgICAgICAgICAgICAgICAgU1BBQ0U7ICAgICMgbmVlZCBhIHNwYWNlIHRvIHNlcGFyYXRlIHN1YiBmcm9tIHN1YiBuYW1lCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkdG9rIGVxICc6OicgKSB7CiAgICAgICAgICAgICAgICAkaWRfc2Nhbl9zdGF0ZSA9ICRzY2FuX3N0YXRlX0FMUEhBOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJHRvayA9fiAvXlx3LyApIHsKICAgICAgICAgICAgICAgICRpZF9zY2FuX3N0YXRlID0gJHNjYW5fc3RhdGVfQ09MT047CiAgICAgICAgICAgICAgICAkc2F3X2FscGhhICAgICA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkdG9rIGVxICctPicgKSB7CiAgICAgICAgICAgICAgICAkaWRfc2Nhbl9zdGF0ZSA9ICRzY2FuX3N0YXRlX1NJR0lMOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgc2hvdWxkbid0IGhhcHBlbjogYmFkIGNhbGwgcGFyYW1ldGVyCiAgICAgICAgICAgICAgICBteSAkbXNnID0KIlByb2dyYW0gYnVnIGRldGVjdGVkOiBzY2FuX2NvbXBsZXhfaWRlbnRpZmllciByZWNlaXZlZCBiYWQgc3RhcnRpbmcgdG9rZW4gPSAnJHRvaydcbiI7CiAgICAgICAgICAgICAgICBpZiAoREVWRUxfTU9ERSkgeyAkc2VsZi0+RmF1bHQoJG1zZykgfQogICAgICAgICAgICAgICAgaWYgKCAhJHNlbGYtPltfaW5fZXJyb3JfXSApIHsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+d2FybmluZygkbXNnKTsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+W19pbl9lcnJvcl9dID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRpZF9zY2FuX3N0YXRlID0gRU1QVFlfU1RSSU5HOwoKICAgICAgICAgICAgICAgICMgZW1lcmdlbmN5IHJldHVybgogICAgICAgICAgICAgICAgZ290byBSRVRVUk47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHNhd190eXBlID0gISRzYXdfYWxwaGE7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkaS0tOwogICAgICAgICAgICAkc2F3X2FscGhhID0gKCAkdG9rID1+IC9eXHcvICk7CiAgICAgICAgICAgICRzYXdfdHlwZSAgPSAoICR0b2sgPX4gLyhbXCRcJVxAXCpcJl0pLyApOwoKICAgICAgICAgICAgIyBjaGVjayBmb3IgYSB2YWxpZCBzdGFydGluZyBzdGF0ZQogICAgICAgICAgICBpZiAoIERFVkVMX01PREUgJiYgISRpc19yZXR1cm5hYmxlX3NjYW5fc3RhdGV7JGlkX3NjYW5fc3RhdGV9ICkgewogICAgICAgICAgICAgICAgJHNlbGYtPkZhdWx0KDw8RU9NKTsKVW5leHBlY3RlZCBzdGFydGluZyBzY2FuIHN0YXRlIGluIHN1YiBzY2FuX2NvbXBsZXhfaWRlbnRpZmllcjogJyRpZF9zY2FuX3N0YXRlJwpFT00KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICMgbG9vcCB0byBnYXRoZXIgdGhlIGlkZW50aWZpZXIKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICRpX3NhdmUgPSAkaTsKCiAgICAgICAgd2hpbGUgKCAkaSA8ICRtYXhfdG9rZW5faW5kZXggJiYgJGlkX3NjYW5fc3RhdGUgKSB7CgogICAgICAgICAgICAjIEJlIHN1cmUgd2UgaGF2ZSBjb2RlIHRvIGhhbmRsZSB0aGlzIHN0YXRlIGJlZm9yZSB3ZSBwcm9jZWVkCiAgICAgICAgICAgIG15ICRjb2RlID0gJHNjYW5faWRlbnRpZmllcl9jb2RlLT57JGlkX3NjYW5fc3RhdGV9OwogICAgICAgICAgICBpZiAoICEkY29kZSApIHsKCiAgICAgICAgICAgICAgICBpZiAoICRpZF9zY2FuX3N0YXRlIGVxICRzY2FuX3N0YXRlX1NQTElUICkgewogICAgICAgICAgICAgICAgICAgICMjIE9LOiB0aGlzIGlzIHRoZSBzaWduYWwgdG8gZXhpdCBhbmQgc3BsaXQgdGhlIHByZXRva2VuCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyB1bmtub3duIHN0YXRlIC0gc2hvdWxkIG5vdCBoYXBwZW4KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmIChERVZFTF9NT0RFKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5GYXVsdCg8PEVPTSk7ClVua25vd24gc2NhbiBzdGF0ZSBpbiBzdWIgc2Nhbl9jb21wbGV4X2lkZW50aWZpZXI6ICckaWRfc2Nhbl9zdGF0ZScKU2NhbiBzdGF0ZSBhdCBzdWIgZW50cnkgd2FzICckaWRfc2Nhbl9zdGF0ZV9iZWdpbicKRU9NCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRpZF9zY2FuX3N0YXRlID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICAgICAgICAgICRpICAgICAgICAgICAgID0gJGlfc2F2ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgUmVtZW1iZXIgdGhlIHN0YXJ0aW5nIGluZGV4IGZvciBwcm9ncmVzcyBjaGVjayBiZWxvdwogICAgICAgICAgICBteSAkaV9zdGFydF9sb29wID0gJGk7CgogICAgICAgICAgICAkbGFzdF90b2tfaXNfYmxhbmsgPSAkdG9rX2lzX2JsYW5rOwogICAgICAgICAgICBpZiAgICgkdG9rX2lzX2JsYW5rKSB7ICR0b2tfaXNfYmxhbmsgPSB1bmRlZiB9CiAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgIHsgJGlfc2F2ZSAgICAgICA9ICRpIH0KCiAgICAgICAgICAgICR0b2sgPSAkcnRva2Vucy0+WyArKyRpIF07CgogICAgICAgICAgICAjIHBhdGNoIHRvIG1ha2UgZGlncmFwaCA6OiBpZiBuZWNlc3NhcnkKICAgICAgICAgICAgaWYgKCAoICR0b2sgZXEgJzonICkgJiYgKCAkcnRva2Vucy0+WyAkaSArIDEgXSBlcSAnOicgKSApIHsKICAgICAgICAgICAgICAgICR0b2sgPSAnOjonOwogICAgICAgICAgICAgICAgJGkrKzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGNvZGUtPigkc2VsZik7CgogICAgICAgICAgICAjIGNoZWNrIGZvciBmb3J3YXJkIHByb2dyZXNzOiBhIGRlY3JlYXNlIGluIHRoZSBpbmRleCAkaQogICAgICAgICAgICAjIGltcGxpZXMgdGhhdCBzY2FubmluZyBoYXMgZmluaXNoZWQKICAgICAgICAgICAgbGFzdCBpZiAoICRpIDw9ICRpX3N0YXJ0X2xvb3AgKTsKCiAgICAgICAgfSAjIyBlbmQgd2hpbGUgKCAkaSA8ICRtYXhfdG9rZW5faW5kZXguLi4pCgogICAgICAgICMtLS0tLS0tLS0tLS0tCiAgICAgICAgIyBDaGVjayByZXN1bHQKICAgICAgICAjLS0tLS0tLS0tLS0tLQoKICAgICAgICAjIEJlIHN1cmUgYSB2YWxpZCBzdGF0ZSBpcyByZXR1cm5lZAogICAgICAgIGlmICgkaWRfc2Nhbl9zdGF0ZSkgewoKICAgICAgICAgICAgaWYgKCAhJGlzX3JldHVybmFibGVfc2Nhbl9zdGF0ZXskaWRfc2Nhbl9zdGF0ZX0gKSB7CgogICAgICAgICAgICAgICAgaWYgKCAkaWRfc2Nhbl9zdGF0ZSBlcSAkc2Nhbl9zdGF0ZV9TUExJVCApIHsKICAgICAgICAgICAgICAgICAgICAkc3BsaXRfcHJldG9rZW5fZmxhZyA9IDE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAkaWRfc2Nhbl9zdGF0ZSBlcSAkc2Nhbl9zdGF0ZV9SUEFSRU4gKSB7CiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPndhcm5pbmcoCiAgICAgICAgICAgICAgICAgICAgICAgICJIaXQgZW5kIG9mIGxpbmUgd2hpbGUgc2Vla2luZyApIHRvIGVuZCBwcm90b3R5cGVcbiIpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRpZF9zY2FuX3N0YXRlID0gRU1QVFlfU1RSSU5HOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFBhdGNoOiB0aGUgZGVwcmVjYXRlZCB2YXJpYWJsZSAkIyBkb2VzIG5vdCBjb21iaW5lIHdpdGggYW55dGhpbmcKICAgICAgICAgICAgIyBvbiB0aGUgbmV4dCBsaW5lLgogICAgICAgICAgICBpZiAoICRpZGVudGlmaWVyIGVxICckIycgKSB7ICRpZF9zY2FuX3N0YXRlID0gRU1QVFlfU1RSSU5HIH0KICAgICAgICB9CgogICAgICAgICMgQmUgc3VyZSB0aGUgdG9rZW4gaW5kZXggaXMgdmFsaWQKICAgICAgICBpZiAoICRpIDwgMCApIHsgJGkgPSAwIH0KCiAgICAgICAgIyBCZSBzdXJlIGEgdG9rZW4gdHlwZSBpcyBkZWZpbmVkCiAgICAgICAgaWYgKCAhJHR5cGUgKSB7CgogICAgICAgICAgICBpZiAoJHNhd190eXBlKSB7CgogICAgICAgICAgICAgICAgaWYgKCRzYXdfYWxwaGEpIHsKCiAgICAgICAgICAgICAgICAgICMgVGhlIHR5cGUgd2l0aG91dCB0aGUgLT4gc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHdpdGggdGhlIC0+IHNvCiAgICAgICAgICAgICAgICAgICMgdGhhdCBpZiB0aGV5IGdldCBzZXBhcmF0ZWQgd2UgZ2V0IHRoZSBzYW1lIGJvbmQgc3RyZW5ndGhzLAogICAgICAgICAgICAgICAgICAjIGV0Yy4gIFNlZSBiMTIzNAogICAgICAgICAgICAgICAgICAgIGlmICggICAkaWRlbnRpZmllciA9fiAvXi0+LwogICAgICAgICAgICAgICAgICAgICAgICAmJiAkbGFzdF9ub25ibGFua190eXBlIGVxICd3JwogICAgICAgICAgICAgICAgICAgICAgICAmJiBzdWJzdHIoICRpZGVudGlmaWVyLCAyLCAxICkgPX4gL15cdy8gKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAndyc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkdHlwZSA9ICdpJyB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoICRpZGVudGlmaWVyIGVxICctPicgKSB7CiAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAnLT4nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAgICAgICAgICggbGVuZ3RoKCRpZGVudGlmaWVyKSA+IDEgKQoKICAgICAgICAgICAgICAgICAgICAjIEluIHNvbWV0aGluZyBsaWtlICdAJD0nIHdlIGhhdmUgYW4gaWRlbnRpZmllciAnQCQnCiAgICAgICAgICAgICAgICAgICAgIyBJbiBzb21ldGhpbmcgbGlrZSAnJCR7JyB3ZSBoYXZlIHR5cGUgJyQkJyAoYW5kIG9ubHkKICAgICAgICAgICAgICAgICAgICAjIHBhcnQgb2YgYW4gaWRlbnRpZmllcikKICAgICAgICAgICAgICAgICAgICAmJiAhKCAkaWRlbnRpZmllciA9fiAvXCQkLyAmJiAkdG9rIGVxICd7JyApCiAgICAgICAgICAgICAgICAgICAgJiYgJGlkZW50aWZpZXIgbmUgJ3N1YiAnCiAgICAgICAgICAgICAgICAgICAgJiYgJGlkZW50aWZpZXIgbmUgJ3BhY2thZ2UgJwogICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAnaSc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsgJHR5cGUgPSAndCcgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICgkc2F3X2FscGhhKSB7CgogICAgICAgICAgICAgICAgIyB0eXBlICd3JyBpbmNsdWRlcyBhbnl0aGluZyB3aXRob3V0IGxlYWRpbmcgdHlwZSBpbmZvCiAgICAgICAgICAgICAgICAjICgkLCUsQCwqKSBpbmNsdWRpbmcgc29tZXRoaW5nIGxpa2UgYWJjOjpkZWY6OmdoaQogICAgICAgICAgICAgICAgJHR5cGUgPSAndyc7CgogICAgICAgICAgICAgICAgIyBGaXggZm9yIGIxMzM3LCBpZiByZXN0YXJ0aW5nIHNjYW4gYWZ0ZXIgbGluZSBicmVhayBiZXR3ZWVuCiAgICAgICAgICAgICAgICAjICctPicgb3Igc2lnaWwgYW5kIGlkZW50aWZpZXIgbmFtZSwgdXNlIHR5cGUgJ2knCiAgICAgICAgICAgICAgICBpZiAoICAgJGlkX3NjYW5fc3RhdGVfYmVnaW4KICAgICAgICAgICAgICAgICAgICAmJiAkaWRlbnRpZmllciA9fiAvXihbXCRcJVxAXCpcJl18LT4pLyApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAnaSc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkdHlwZSA9IEVNUFRZX1NUUklORzsKICAgICAgICAgICAgfSAgICAjIHRoaXMgY2FuIGhhcHBlbiBvbiBhIHJlc3RhcnQKICAgICAgICB9CgogICAgICAgICMgU2VlIGlmIHdlIGZvcm1lZCBhbiBpZGVudGlmaWVyLi4uCiAgICAgICAgaWYgKCRpZGVudGlmaWVyKSB7CiAgICAgICAgICAgICR0b2sgPSAkaWRlbnRpZmllcjsKICAgICAgICAgICAgaWYgKCRtZXNzYWdlKSB7ICRzZWxmLT53cml0ZV9sb2dmaWxlX2VudHJ5KCRtZXNzYWdlKSB9CiAgICAgICAgfQoKICAgICAgICAjIGRpZCBub3QgZmluZCBhbiBpZGVudGlmaWVyLCBiYWNrICB1cAogICAgICAgIGVsc2UgewogICAgICAgICAgICAkdG9rID0gJHRva19iZWdpbjsKICAgICAgICAgICAgJGkgICA9ICRpX2JlZ2luOwogICAgICAgIH0KCiAgICAgIFJFVFVSTjoKCiAgICAgICAgREVCVUdfU0NBTl9JRCAmJiBkbyB7CiAgICAgICAgICAgIG15ICggJGEsICRiLCAkYyApID0gY2FsbGVyKCk7CiAgICAgICAgICAgIHByaW50IHsqU1RET1VUfQoiU0NBTklEOiBjYWxsZWQgZnJvbSAkYSAkYiAkYyB3aXRoIHRvaywgaSwgc3RhdGUsIGlkZW50aWZpZXIgPSR0b2tfYmVnaW4sICRpX2JlZ2luLCAkaWRfc2Nhbl9zdGF0ZV9iZWdpbiwgJGlkZW50aWZpZXJfYmVnaW5cbiI7CiAgICAgICAgICAgIHByaW50IHsqU1RET1VUfQoiU0NBTklEOiByZXR1cm5lZCB3aXRoIHRvaywgaSwgc3RhdGUsIGlkZW50aWZpZXIgPSR0b2ssICRpLCAkaWRfc2Nhbl9zdGF0ZSwgJGlkZW50aWZpZXJcbiI7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuICgKCiAgICAgICAgICAgICRpLAogICAgICAgICAgICAkdG9rLAogICAgICAgICAgICAkdHlwZSwKICAgICAgICAgICAgJGlkX3NjYW5fc3RhdGUsCiAgICAgICAgICAgICRpZGVudGlmaWVyLAogICAgICAgICAgICAkc3BsaXRfcHJldG9rZW5fZmxhZwogICAgICAgICk7CiAgICB9ICMjIGVuZCBzdWIgc2Nhbl9jb21wbGV4X2lkZW50aWZpZXIKfSAjIyBlbmQgY2xvc3VyZSBmb3Igc3ViIHNjYW5fY29tcGxleF9pZGVudGlmaWVyCgp7ICAgICMjIGNsb3N1cmUgZm9yIHN1YiBkb19zY2FuX3N1YgoKICAgIG15ICV3YXJuX2lmX2xleGljYWw7CgogICAgQkVHSU4gewoKICAgICAgICAjIGxleGljYWwgc3VicyB3aXRoIHRoZXNlIG5hbWVzIGNhbiBjYXVzZSBwYXJzaW5nIGVycm9ycyBpbiB0aGlzIHZlcnNpb24KICAgICAgICBteSBAcSA9IHF3KCBtIHEgcXEgcXIgcXcgcXggcyB0ciB5ICk7CiAgICAgICAgQHdhcm5faWZfbGV4aWNhbHtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwogICAgfSAjIyBlbmQgQkVHSU4KCiAgICAjIHNhdmVkIHBhY2thZ2UgYW5kIHN1Ym5hbWVzIGluIGNhc2UgcHJvdG90eXBlIGlzIG9uIHNlcGFyYXRlIGxpbmUKICAgIG15ICggJHBhY2thZ2Vfc2F2ZWQsICRzdWJuYW1lX3NhdmVkICk7CgogICAgIyBpbml0aWFsaXplIHN1Ym5hbWUgZWFjaCB0aW1lIGEgbmV3ICdzdWInIGtleXdvcmQgaXMgZW5jb3VudGVyZWQKICAgIHN1YiBpbml0aWFsaXplX3N1Ym5hbWUgewogICAgICAgICRwYWNrYWdlX3NhdmVkID0gRU1QVFlfU1RSSU5HOwogICAgICAgICRzdWJuYW1lX3NhdmVkID0gRU1QVFlfU1RSSU5HOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICB1c2UgY29uc3RhbnQgewogICAgICAgIFNVQl9DQUxMICAgICAgID0+IDEsCiAgICAgICAgUEFSRU5fQ0FMTCAgICAgPT4gMiwKICAgICAgICBQUk9UT1RZUEVfQ0FMTCA9PiAzLAogICAgfTsKCiAgICBzdWIgZG9fc2Nhbl9zdWIgewoKICAgICAgICBteSAoICRzZWxmLCAkcmNhbGxfaGFzaCApID0gQF87CgogICAgICAgIG15ICRpbnB1dF9saW5lICAgICAgPSAkcmNhbGxfaGFzaC0+e2lucHV0X2xpbmV9OwogICAgICAgIG15ICRpICAgICAgICAgICAgICAgPSAkcmNhbGxfaGFzaC0+e2l9OwogICAgICAgIG15ICRpX2JlZyAgICAgICAgICAgPSAkcmNhbGxfaGFzaC0+e2lfYmVnfTsKICAgICAgICBteSAkdG9rICAgICAgICAgICAgID0gJHJjYWxsX2hhc2gtPnt0b2t9OwogICAgICAgIG15ICR0eXBlICAgICAgICAgICAgPSAkcmNhbGxfaGFzaC0+e3R5cGV9OwogICAgICAgIG15ICRydG9rZW5zICAgICAgICAgPSAkcmNhbGxfaGFzaC0+e3J0b2tlbnN9OwogICAgICAgIG15ICRydG9rZW5fbWFwICAgICAgPSAkcmNhbGxfaGFzaC0+e3J0b2tlbl9tYXB9OwogICAgICAgIG15ICRpZF9zY2FuX3N0YXRlICAgPSAkcmNhbGxfaGFzaC0+e2lkX3NjYW5fc3RhdGV9OwogICAgICAgIG15ICRtYXhfdG9rZW5faW5kZXggPSAkcmNhbGxfaGFzaC0+e21heF90b2tlbl9pbmRleH07CgogICAgICAgICMgUGFyc2UgYSBzdWIgbmFtZSBhbmQgcHJvdG90eXBlLgoKICAgICAgICAjIEF0IHByZXNlbnQgdGhlcmUgYXJlIHRocmVlIGJhc2ljIENBTEwgVFlQRVMgd2hpY2ggYXJlCiAgICAgICAgIyBkaXN0aW5ndWlzaGVkIGJ5IHRoZSBzdGFydGluZyB2YWx1ZSBvZiAnJHRvayc6CiAgICAgICAgIyAxLiAkdG9rPSdzdWInLCBpZF9zY2FuX3N0YXRlPSdzdWInCiAgICAgICAgIyAgICBpdCBpcyBjYWxsZWQgd2l0aCAkaV9iZWcgZXF1YWwgdG8gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBub25ibGFuawogICAgICAgICMgICAgdG9rZW4gZm9sbG93aW5nIGEgJ3N1YicgdG9rZW4uCiAgICAgICAgIyAyLiAkdG9rPScoJywgaWRfc2Nhbl9zdGF0ZT0nc3ViJywKICAgICAgICAjICAgIGl0IGlzIGNhbGxlZCB3aXRoICRpX2JlZyBlcXVhbCB0byB0aGUgaW5kZXggb2YgYSAnKCcgd2hpY2ggbWF5CiAgICAgICAgIyAgICBzdGFydCBhIHByb3RvdHlwZS4KICAgICAgICAjIDMuICR0b2s9J3Byb3RvdHlwZScsIGlkX3NjYW5fc3RhdGU9J3Byb3RvdHlwZScKICAgICAgICAjICAgIGl0IGlzIGNhbGxlZCB3aXRoICRpX2JlZyBlcXVhbCB0byB0aGUgaW5kZXggb2YgYSAnKCcgd2hpY2ggaXMKICAgICAgICAjICAgIHByZWNlZGVkIGJ5ICc6IHByb3RvdHlwZScgYW5kIGhhcyAkaWRfc2Nhbl9zdGF0ZSBlcSAncHJvdG90eXBlJwoKICAgICAgICAjIEV4YW1wbGVzOgoKICAgICAgICAjIEEgc2luZ2xlIHR5cGUgMSBjYWxsIHdpbGwgZ2V0IGJvdGggdGhlIHN1YiBhbmQgcHJvdG90eXBlCiAgICAgICAgIyAgIHN1YiBmb28xICggJCQgKSB7IH0KICAgICAgICAjICAgXgoKICAgICAgICAjIFRoZSBzdWJuYW1lIHdpbGwgYmUgb2J0YWluZWQgd2l0aCBhICdzdWInIGNhbGwKICAgICAgICAjIFRoZSBwcm90b3R5cGUgb24gbGluZSAyIHdpbGwgYmUgb2J0YWluZWQgd2l0aCBhICcoJyBjYWxsCiAgICAgICAgIyAgIHN1YiBmb28xCiAgICAgICAgIyAgIF4gICAgICAgICAgICAgICAgICAgIDwtLS1jYWxsIHR5cGUgMQogICAgICAgICMgICAgICggJCQgKSB7IH0KICAgICAgICAjICAgICBeICAgICAgICAgICAgICAgICAgPC0tLWNhbGwgdHlwZSAyCgogICAgICAgICMgVGhlIHN1Ym5hbWUgd2lsbCBiZSBvYnRhaW5lZCB3aXRoIGEgJ3N1YicgY2FsbAogICAgICAgICMgVGhlIHByb3RvdHlwZSB3aWxsIGJlIG9idGFpbmVkIHdpdGggYSAncHJvdG90eXBlJyBjYWxsCiAgICAgICAgIyAgIHN1YiBmb28xICggJHgsICR5ICkgOiBwcm90b3R5cGUgKCAkJCApIHsgfQogICAgICAgICMgICBeIDwtLS10eXBlIDEgICAgICAgICAgICAgICAgICAgIF4gPC0tLXR5cGUgMwoKICAgICAgICAjIFRPRE86IGFkZCBmdXR1cmUgZXJyb3IgY2hlY2tzIHRvIGJlIHN1cmUgd2UgaGF2ZSBhIHZhbGlkCiAgICAgICAgIyBzdWIgbmFtZS4gIEZvciBleGFtcGxlLCAnc3ViICZkb2l0JyBpcyB3cm9uZy4gIEFsc28sIGJlIHN1cmUKICAgICAgICAjIGEgbmFtZSBpcyBnaXZlbiBpZiBhbmQgb25seSBpZiBhIG5vbi1hbm9ueW1vdXMgc3ViIGlzCiAgICAgICAgIyBhcHByb3ByaWF0ZS4KICAgICAgICAjIFVTRVMgR0xPQkFMIFZBUlM6ICRjdXJyZW50X3BhY2thZ2UsICRsYXN0X25vbmJsYW5rX3Rva2VuLAogICAgICAgICMgJHJzYXdfZnVuY3Rpb25fZGVmaW5pdGlvbiwKICAgICAgICAjICRzdGF0ZW1lbnRfdHlwZQoKICAgICAgICBteSAkaV9lbnRyeSA9ICRpOwoKICAgICAgICAjIERldGVybWluZSB0aGUgQ0FMTCBUWVBFCiAgICAgICAgIyAxPXN1YgogICAgICAgICMgMj0oCiAgICAgICAgIyAzPXByb3RvdHlwZQogICAgICAgIG15ICRjYWxsX3R5cGUgPQogICAgICAgICAgICAkdG9rIGVxICdwcm90b3R5cGUnID8gUFJPVE9UWVBFX0NBTEwKICAgICAgICAgIDogJHRvayBlcSAnKCcgICAgICAgICA/IFBBUkVOX0NBTEwKICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgIFNVQl9DQUxMOwoKICAgICAgICAkaWRfc2Nhbl9zdGF0ZSA9IEVNUFRZX1NUUklORzsgICMgbm9ybWFsbHkgd2UgZ2V0IGV2ZXJ5dGhpbmcgaW4gb25lIGNhbGwKICAgICAgICBteSAkc3VibmFtZSA9ICRzdWJuYW1lX3NhdmVkOwogICAgICAgIG15ICRwYWNrYWdlID0gJHBhY2thZ2Vfc2F2ZWQ7CiAgICAgICAgbXkgJHByb3RvICAgPSB1bmRlZjsKICAgICAgICBteSAkYXR0cnMgICA9IHVuZGVmOwogICAgICAgIG15ICRtYXRjaDsKCiAgICAgICAgbXkgJHBvc19iZWcgPSAkcnRva2VuX21hcC0+WyRpX2JlZ107CiAgICAgICAgcG9zKCRpbnB1dF9saW5lKSA9ICRwb3NfYmVnOwoKICAgICAgICAjIExvb2sgZm9yIHRoZSBzdWIgTkFNRSBpZiB0aGlzIGlzIGEgU1VCIGNhbGwKICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICRjYWxsX3R5cGUgPT0gU1VCX0NBTEwKICAgICAgICAgICAgJiYgJGlucHV0X2xpbmUgPX4gbXtcR1xzKgogICAgICAgICgoPzpcdyooPzonfDo6KSkqKSAgIyBwYWNrYWdlIC0gc29tZXRoaW5nIHRoYXQgZW5kcyBpbiA6OiBvciAnCiAgICAgICAgKFx3KykgICAgICAgICAgICAgICAjIE5BTUUgICAgLSByZXF1aXJlZAogICAgICAgIH1nY3gKICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRtYXRjaCAgID0gMTsKICAgICAgICAgICAgJHN1Ym5hbWUgPSAkMjsKCiAgICAgICAgICAgIG15ICRpc19sZXhpY2FsX3N1YiA9CiAgICAgICAgICAgICAgJGxhc3Rfbm9uYmxhbmtfdHlwZSBlcSAnaycgJiYgJGxhc3Rfbm9uYmxhbmtfdG9rZW4gZXEgJ215JzsKICAgICAgICAgICAgaWYgKCAkaXNfbGV4aWNhbF9zdWIgJiYgJDEgKSB7CiAgICAgICAgICAgICAgICAkc2VsZi0+d2FybmluZygiJ215JyBzdWIgJHN1Ym5hbWUgY2Fubm90IGJlIGluIHBhY2thZ2UgJyQxJ1xuIik7CiAgICAgICAgICAgICAgICAkaXNfbGV4aWNhbF9zdWIgPSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJGlzX2xleGljYWxfc3ViKSB7CgogICAgICAgICAgICAgICAgIyBsZXhpY2FsIHN1YnMgdXNlIHRoZSBibG9jayBzZXF1ZW5jZSBudW1iZXIgYXMgYSBwYWNrYWdlIG5hbWUKICAgICAgICAgICAgICAgIG15ICRzZXFubyA9CiAgICAgICAgICAgICAgICAgICRyY3VycmVudF9zZXF1ZW5jZV9udW1iZXItPltCUkFDRV0KICAgICAgICAgICAgICAgICAgWyAkcmN1cnJlbnRfZGVwdGgtPltCUkFDRV0gXTsKICAgICAgICAgICAgICAgICRzZXFubyAgID0gMSBpZiAoICFkZWZpbmVkKCRzZXFubykgKTsKICAgICAgICAgICAgICAgICRwYWNrYWdlID0gJHNlcW5vOwogICAgICAgICAgICAgICAgaWYgKCAkd2Fybl9pZl9sZXhpY2FseyRzdWJuYW1lfSApIHsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+d2FybmluZygKIidteScgc3ViICckc3VibmFtZScgbWF0Y2hlcyBhIGJ1aWx0aW4gbmFtZSBhbmQgbWF5IG5vdCBiZSBoYW5kbGVkIGNvcnJlY3RseSBpbiB0aGlzIHBlcmx0aWR5IHZlcnNpb24uXG4iCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBUaGlzIG1heSBlbmQgYmFkbHksIGl0IGlzIHNhZmVzdCB0byBibG9jayBmb3JtYXR0aW5nCiAgICAgICAgICAgICAgICAgICAgIyBGb3IgYW4gZXhhbXBsZSwgc2VlIHBlcmw1MjcvbGV4c3ViLnQgKGlzc3VlIGMyMDMpCiAgICAgICAgICAgICAgICAgICAgJHNlbGYtPltfaW5fdHJvdWJsZV9dID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRwYWNrYWdlID0gKCBkZWZpbmVkKCQxKSAmJiAkMSApID8gJDEgOiAkY3VycmVudF9wYWNrYWdlOwogICAgICAgICAgICAgICAgJHBhY2thZ2UgPX4gcy9cJy86Oi9nOwogICAgICAgICAgICAgICAgaWYgKCAkcGFja2FnZSA9fiAvXlw6LyApIHsgJHBhY2thZ2UgPSAnbWFpbicgLiAkcGFja2FnZSB9CiAgICAgICAgICAgICAgICAkcGFja2FnZSA9fiBzLzo6JC8vOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkcG9zICA9IHBvcygkaW5wdXRfbGluZSk7CiAgICAgICAgICAgIG15ICRudW1jID0gJHBvcyAtICRwb3NfYmVnOwogICAgICAgICAgICAkdG9rICA9ICdzdWIgJyAuIHN1YnN0ciggJGlucHV0X2xpbmUsICRwb3NfYmVnLCAkbnVtYyApOwogICAgICAgICAgICAkdHlwZSA9ICdTJzsgICAgIyMgRml4IGZvciBjMjUwLCB3YXMgJ2knOwoKICAgICAgICAgICAgIyByZW1lbWJlciB0aGUgc3ViIG5hbWUgaW4gY2FzZSBhbm90aGVyIGNhbGwgaXMgbmVlZGVkIHRvCiAgICAgICAgICAgICMgZ2V0IHRoZSBwcm90b3R5cGUKICAgICAgICAgICAgJHBhY2thZ2Vfc2F2ZWQgPSAkcGFja2FnZTsKICAgICAgICAgICAgJHN1Ym5hbWVfc2F2ZWQgPSAkc3VibmFtZTsKICAgICAgICB9CgogICAgICAgICMgTm93IGxvb2sgZm9yIFBST1RPIEFUVFJTIGZvciBhbGwgY2FsbCB0eXBlcwogICAgICAgICMgTG9vayBmb3IgcHJvdG90eXBlL2F0dHJpYnV0ZXMgd2hpY2ggYXJlIHVzdWFsbHkgb24gdGhlIHNhbWUKICAgICAgICAjIGxpbmUgYXMgdGhlIHN1YiBuYW1lIGJ1dCB3aGljaCBtaWdodCBiZSBvbiBhIHNlcGFyYXRlIGxpbmUuCiAgICAgICAgIyBGb3IgZXhhbXBsZSwgd2UgbWlnaHQgaGF2ZSBhbiBhbm9ueW1vdXMgc3ViIHdpdGggYXR0cmlidXRlcywKICAgICAgICAjIG9yIGEgcHJvdG90eXBlIG9uIGEgc2VwYXJhdGUgbGluZSBmcm9tIGl0cyBzdWIgbmFtZQoKICAgICAgICAjIE5PVEU6IFdlIG9ubHkgd2FudCB0byBwYXJzZSBQUk9UT1RZUEVTIGhlcmUuIElmIHdlIHNlZSBhbnl0aGluZyB0aGF0CiAgICAgICAgIyBkb2VzIG5vdCBsb29rIGxpa2UgYSBwcm90b3R5cGUsIHdlIGFzc3VtZSBpdCBpcyBhIFNJR05BVFVSRSBhbmQgd2UKICAgICAgICAjIHdpbGwgc3RvcCBhbmQgbGV0IHRoZSB0aGUgc3RhbmRhcmQgdG9rZW5pemVyIGhhbmRsZSBpdC4gIEluCiAgICAgICAgIyBwYXJ0aWN1bGFyLCB3ZSBzdG9wIGlmIHdlIHNlZSBhbnkgbmVzdGVkIHBhcmVucywgYnJhY2VzLCBvciBjb21tYXMuCiAgICAgICAgIyBBbHNvIG5vdGUsIGEgdmFsaWQgcHJvdG90eXBlIGNhbm5vdCBjb250YWluIGFueSBhbHBoYWJldGljIGNoYXJhY3RlcgogICAgICAgICMgIC0tIHNlZSBodHRwczovL3Blcmxkb2MucGVybC5vcmcvcGVybHN1YgogICAgICAgICMgQnV0IGl0IGFwcGVhcnMgdGhhdCBhbiB1bmRlcnNjb3JlIGlzIHZhbGlkIGluIGEgcHJvdG90eXBlLCBzbyB0aGUKICAgICAgICAjIHJlZ2V4IGJlbG93IHVzZXMgW0EtWmEtel0gcmF0aGVyIHRoYW4gXHcKICAgICAgICAjIFRoaXMgaXMgdGhlIG9sZCByZWdleCB3aGljaCBoYXMgYmVlbiByZXBsYWNlZDoKICAgICAgICAjICRpbnB1dF9saW5lID1+IG0vXEcoXHMqXChbXlwpXChcfVx7XCwjXSpcKSk/ICAjIFBST1RPCiAgICAgICAgIyBBZGRlZCAnPScgZm9yIGlzc3VlIGMzNjIKICAgICAgICBteSAkc2F3X29wZW5pbmdfcGFyZW4gPSAkaW5wdXRfbGluZSA9fiAvXEdccypcKC87CiAgICAgICAgaWYgKAogICAgICAgICAgICAkaW5wdXRfbGluZSA9fiBte1xHKFxzKlwoW15cKVwoXH1ce1wsI0EtWmEtej1dKlwpKT8gICMgUFJPVE8KICAgICAgICAgICAgKFxzKjopPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQVRUUlMgbGVhZGluZyAnOicKICAgICAgICAgICAgfWdjeAogICAgICAgICAgICAmJiAoICQxIHx8ICQyICkKICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRwcm90byA9ICQxOwogICAgICAgICAgICAkYXR0cnMgPSAkMjsKCiAgICAgICAgICAgICMgQXBwZW5kIHRoZSBwcm90b3R5cGUgdG8gdGhlIHN0YXJ0aW5nIHRva2VuIGlmIGl0IGlzICdzdWInIG9yCiAgICAgICAgICAgICMgJ3Byb3RvdHlwZScuICBUaGlzIGlzIG5vdCBuZWNlc3NhcnkgYnV0IGZvciBjb21wYXRpYmlsaXR5IHdpdGgKICAgICAgICAgICAgIyBwcmV2aW91cyB2ZXJzaW9ucyB3aGVuIHRoZSAtY3NjIGZsYWcgaXMgdXNlZDoKICAgICAgICAgICAgaWYgKCAkcHJvdG8gJiYgKCAkbWF0Y2ggfHwgJGNhbGxfdHlwZSA9PSBQUk9UT1RZUEVfQ0FMTCApICkgewogICAgICAgICAgICAgICAgJHRvayAuPSAkcHJvdG87CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgSWYgd2UganVzdCBlbnRlcmVkIHRoZSBzdWIgYXQgYW4gb3BlbmluZyBwYXJlbiBvbiB0aGlzIGNhbGwsIG5vdAogICAgICAgICAgICAjIGEgZm9sbG93aW5nIDpwcm90b3R5cGUsIGxhYmVsIGl0IHdpdGggdGhlIHByZXZpb3VzIHRva2VuLiAgVGhpcyBpcwogICAgICAgICAgICAjIG5lY2Vzc2FyeSB0byBwcm9wYWdhdGUgdGhlIHN1YiBuYW1lIHRvIGl0cyBvcGVuaW5nIGJsb2NrLgogICAgICAgICAgICBlbHNpZiAoICRjYWxsX3R5cGUgPT0gUEFSRU5fQ0FMTCApIHsKICAgICAgICAgICAgICAgICR0b2sgPSAkbGFzdF9ub25ibGFua190b2tlbjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJG1hdGNoIHx8PSAxOwoKICAgICAgICAgICAgIyBQYXRjaCBwYXJ0ICMxIHRvIGZpeGVzIGNhc2VzIGI5OTQgYW5kIGIxMDUzOgogICAgICAgICAgICAjIE1hcmsgYW4gYW5vbnltb3VzIHN1YiBrZXl3b3JkIHdpdGhvdXQgcHJvdG90eXBlIGFzIHR5cGUgJ2snLCBpLmUuCiAgICAgICAgICAgICMgICAgJ3N1YiA6IGx2YWx1ZSB7IC4uLicKICAgICAgICAgICAgJHR5cGUgPSAnUyc7ICAgICMjIEMyNTAsIHdhcyAnaSc7CiAgICAgICAgICAgIGlmICggJHRvayBlcSAnc3ViJyAmJiAhJHByb3RvICkgeyAkdHlwZSA9ICdrJyB9CiAgICAgICAgfQoKICAgICAgICBpZiAoJG1hdGNoKSB7CgogICAgICAgICAgICAjIEFUVFJTOiBpZiB0aGVyZSBhcmUgYXR0cmlidXRlcywgYmFjayB1cCBhbmQgbGV0IHRoZSAnOicgYmUKICAgICAgICAgICAgIyBmb3VuZCBsYXRlciBieSB0aGUgc2Nhbm5lci4KICAgICAgICAgICAgbXkgJHBvcyA9IHBvcygkaW5wdXRfbGluZSk7CiAgICAgICAgICAgIGlmICgkYXR0cnMpIHsKICAgICAgICAgICAgICAgICRwb3MgLT0gbGVuZ3RoKCRhdHRycyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRuZXh0X25vbmJsYW5rX3Rva2VuID0gJHRvazsKCiAgICAgICAgICAgICMgY2F0Y2ggY2FzZSBvZiBsaW5lIHdpdGggbGVhZGluZyBBVFRSICc6JyBhZnRlciBhbm9ueW1vdXMgc3ViCiAgICAgICAgICAgIGlmICggJHBvcyA9PSAkcG9zX2JlZyAmJiAkdG9rIGVxICc6JyApIHsKICAgICAgICAgICAgICAgICR0eXBlID0gJ0EnOwogICAgICAgICAgICAgICAgJHNlbGYtPltfaW5fYXR0cmlidXRlX2xpc3RfXSA9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgT3RoZXJ3aXNlLCBpZiB3ZSBmb3VuZCBhIG1hdGNoIHdlIG11c3QgY29udmVydCBiYWNrIGZyb20KICAgICAgICAgICAgIyBzdHJpbmcgcG9zaXRpb24gdG8gdGhlIHByZV90b2tlbiBpbmRleCBmb3IgY29udGludWVkIHBhcnNpbmcuCiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgSSBkb24ndCB0aGluayBhbiBlcnJvciBmbGFnIGNhbiBvY2N1ciBoZXJlIC4uYnV0ID8KICAgICAgICAgICAgICAgIG15ICRlcnJvcjsKICAgICAgICAgICAgICAgICggJGksICRlcnJvciApID0gaW52ZXJzZV9wcmV0b2tlbl9tYXAoICRpLCAkcG9zLCAkcnRva2VuX21hcCwKICAgICAgICAgICAgICAgICAgICAkbWF4X3Rva2VuX2luZGV4ICk7CiAgICAgICAgICAgICAgICBpZiAoJGVycm9yKSB7ICRzZWxmLT53YXJuaW5nKCJQb3NzaWJseSBpbnZhbGlkIHN1YlxuIikgfQoKICAgICAgICAgICAgICAgICMgUGF0Y2ggcGFydCAjMiB0byBmaXhlcyBjYXNlcyBiOTk0IGFuZCBiMTA1MzoKICAgICAgICAgICAgICAgICMgRG8gbm90IGxldCBzcGFjZXMgYmUgcGFydCBvZiB0aGUgdG9rZW4gb2YgYW4gYW5vbnltb3VzIHN1YgogICAgICAgICAgICAgICAgIyBrZXl3b3JkIHdoaWNoIHdlIG1hcmtlZCBhcyB0eXBlICdrJyBhYm92ZS4uLmkuZS4gZm9yCiAgICAgICAgICAgICAgICAjIHNvbWV0aGluZyBsaWtlOgogICAgICAgICAgICAgICAgIyAgICAnc3ViIDogbHZhbHVlIHsgLi4uJwogICAgICAgICAgICAgICAgIyBCYWNrIHVwIGFuZCBsZXQgaXQgYmUgcGFyc2VkIGFzIGEgYmxhbmsKICAgICAgICAgICAgICAgIGlmICggICAkdHlwZSBlcSAnaycKICAgICAgICAgICAgICAgICAgICAmJiAkYXR0cnMKICAgICAgICAgICAgICAgICAgICAmJiAkaSA+ICRpX2VudHJ5CiAgICAgICAgICAgICAgICAgICAgJiYgc3Vic3RyKCAkcnRva2Vucy0+WyRpXSwgMCwgMSApID1+IG0vXHMvICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkaS0tOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgY2hlY2sgZm9yIG11bHRpcGxlIGRlZmluaXRpb25zIG9mIGEgc3ViCiAgICAgICAgICAgICAgICAoICRuZXh0X25vbmJsYW5rX3Rva2VuLCBteSAkaV9uZXh0X3V1ICkgPQogICAgICAgICAgICAgICAgICBmaW5kX25leHRfbm9uYmxhbmtfdG9rZW5fb25fdGhpc19saW5lKCAkaSwgJHJ0b2tlbnMsCiAgICAgICAgICAgICAgICAgICAgJG1heF90b2tlbl9pbmRleCApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICRuZXh0X25vbmJsYW5rX3Rva2VuID1+IC9eKFxzKnwjKSQvICkKICAgICAgICAgICAgeyAgICAjIHNraXAgYmxhbmsgb3Igc2lkZSBjb21tZW50CiAgICAgICAgICAgICAgICBteSAoICRycHJlX3Rva2VucywgJHJwcmVfdHlwZXNfdXUgKSA9CiAgICAgICAgICAgICAgICAgICRzZWxmLT5wZWVrX2FoZWFkX2Zvcl9uX25vbmJsYW5rX3ByZV90b2tlbnMoMSk7CiAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQoJHJwcmVfdG9rZW5zKSAmJiBAeyRycHJlX3Rva2Vuc30gKSB7CiAgICAgICAgICAgICAgICAgICAgJG5leHRfbm9uYmxhbmtfdG9rZW4gPSAkcnByZV90b2tlbnMtPlswXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRuZXh0X25vbmJsYW5rX3Rva2VuID0gJ30nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFNlZSB3aGF0J3MgbmV4dC4uLgogICAgICAgICAgICBpZiAoICRuZXh0X25vbmJsYW5rX3Rva2VuIGVxICd7JyApIHsKICAgICAgICAgICAgICAgIGlmICgkc3VibmFtZSkgewoKICAgICAgICAgICAgICAgICAgICAjIENoZWNrIGZvciBtdWx0aXBsZSBkZWZpbml0aW9ucyBvZiBhIHN1YiwgYnV0CiAgICAgICAgICAgICAgICAgICAgIyBpdCBpcyBvayB0byBoYXZlIG11bHRpcGxlIHN1YiBCRUdJTiwgZXRjLAogICAgICAgICAgICAgICAgICAgICMgc28gd2UgZG8gbm90IGNvbXBsYWluIGlmIG5hbWUgaXMgYWxsIGNhcHMKICAgICAgICAgICAgICAgICAgICBpZiAoICAgJHJzYXdfZnVuY3Rpb25fZGVmaW5pdGlvbi0+eyRzdWJuYW1lfXskcGFja2FnZX0KICAgICAgICAgICAgICAgICAgICAgICAgJiYgJHN1Ym5hbWUgIX4gL15bQS1aXSskLyApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkbG5vID0KICAgICAgICAgICAgICAgICAgICAgICAgICAkcnNhd19mdW5jdGlvbl9kZWZpbml0aW9uLT57JHN1Ym5hbWV9eyRwYWNrYWdlfTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkcGFja2FnZSA9fiAvXlxkLyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT53YXJuaW5nKAoiYWxyZWFkeSBzYXcgZGVmaW5pdGlvbiBvZiBsZXhpY2FsICdzdWIgJHN1Ym5hbWUnIGF0IGxpbmUgJGxub1xuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFERVZFTF9NT0RFICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT53YXJuaW5nKAoiYWxyZWFkeSBzYXcgZGVmaW5pdGlvbiBvZiAnc3ViICRzdWJuYW1lJyBpbiBwYWNrYWdlICckcGFja2FnZScgYXQgbGluZSAkbG5vXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkcnNhd19mdW5jdGlvbl9kZWZpbml0aW9uLT57JHN1Ym5hbWV9eyRwYWNrYWdlfSA9CiAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+W19sYXN0X2xpbmVfbnVtYmVyX107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkbmV4dF9ub25ibGFua190b2tlbiBlcSAnOycgKSB7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkbmV4dF9ub25ibGFua190b2tlbiBlcSAnfScgKSB7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgQVRUUlMgLSBpZiBhbiBhdHRyaWJ1dGUgbGlzdCBmb2xsb3dzLCByZW1lbWJlciB0aGUgbmFtZQogICAgICAgICAgICAjIG9mIHRoZSBzdWIgc28gdGhlIG5leHQgb3BlbmluZyBicmFjZSBjYW4gYmUgbGFiZWxlZC4KICAgICAgICAgICAgIyBTZXR0aW5nICdzdGF0ZW1lbnRfdHlwZScgY2F1c2VzIGFueSAnOidzIHRvIGludHJvZHVjZQogICAgICAgICAgICAjIGF0dHJpYnV0ZXMuCiAgICAgICAgICAgIGVsc2lmICggJG5leHRfbm9uYmxhbmtfdG9rZW4gZXEgJzonICkgewogICAgICAgICAgICAgICAgaWYgKCAkY2FsbF90eXBlID09IFNVQl9DQUxMICkgewogICAgICAgICAgICAgICAgICAgICRzdGF0ZW1lbnRfdHlwZSA9CiAgICAgICAgICAgICAgICAgICAgICBzdWJzdHIoICR0b2ssIDAsIDMgKSBlcSAnc3ViJyA/ICR0b2sgOiAnc3ViJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpZiB3ZSBzdG9wcGVkIGJlZm9yZSBhbiBvcGVuIHBhcmVuIC4uLgogICAgICAgICAgICBlbHNpZiAoICRuZXh0X25vbmJsYW5rX3Rva2VuIGVxICcoJyApIHsKCiAgICAgICAgICAgICAgICAjIElmIHdlIERJRCBOT1Qgc2VlIHRoaXMgcGFyZW4gYWJvdmUgdGhlbiBpdCBtdXN0IGJlIG9uIHRoZQogICAgICAgICAgICAgICAgIyBuZXh0IGxpbmUgc28gd2Ugd2lsbCBzZXQgYSBmbGFnIHRvIGNvbWUgYmFjayBoZXJlIGFuZCBzZWUgaWYKICAgICAgICAgICAgICAgICMgaXQgaXMgYSBQUk9UT1RZUEUKCiAgICAgICAgICAgICAgICAjIE90aGVyd2lzZSwgd2UgYXNzdW1lIGl0IGlzIGEgU0lHTkFUVVJFIHJhdGhlciB0aGFuIGEKICAgICAgICAgICAgICAgICMgUFJPVE9UWVBFIGFuZCBsZXQgdGhlIG5vcm1hbCB0b2tlbml6ZXIgaGFuZGxlIGl0IGFzIGEgbGlzdAogICAgICAgICAgICAgICAgaWYgKCAhJHNhd19vcGVuaW5nX3BhcmVuICkgewogICAgICAgICAgICAgICAgICAgICRpZF9zY2FuX3N0YXRlID0gJ3N1Yic7ICAgICMgd2UgbXVzdCBjb21lIGJhY2sgdG8gZ2V0IHByb3RvCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoICRjYWxsX3R5cGUgPT0gU1VCX0NBTEwgKSB7CiAgICAgICAgICAgICAgICAgICAgJHN0YXRlbWVudF90eXBlID0KICAgICAgICAgICAgICAgICAgICAgIHN1YnN0ciggJHRvaywgMCwgMyApIGVxICdzdWInID8gJHRvayA6ICdzdWInOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHNvbWV0aGluZyBlbHNlLi4KICAgICAgICAgICAgZWxzaWYgKCRuZXh0X25vbmJsYW5rX3Rva2VuKSB7CgogICAgICAgICAgICAgICAgaWYgKCAkcmNhbGxfaGFzaC0+e3Rva30gZXEgJ21ldGhvZCcgJiYgJGNhbGxfdHlwZSA9PSBTVUJfQ0FMTCApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIyBGb3IgYSBtZXRob2QgY2FsbCwgc2lsZW50bHkgaWdub3JlIHRoaXMgZXJyb3IgKHJ0MTQ1NzA2KQogICAgICAgICAgICAgICAgICAgICMgdG8gYXZvaWQgbmVlZGxlc3Mgd2FybmluZ3MuIEV4YW1wbGUgd2hpY2ggY2FuIHByb2R1Y2UgaXQ6CiAgICAgICAgICAgICAgICAgICAgIyAgICAgdGVzdChtZXRob2QgUGFjayAoKSwgIm1ldGhvZCIpOwoKICAgICAgICAgICAgICAgICAgICAjIFRPRE86IHNjYW4gZm9yIHVzZSBmZWF0dXJlICdjbGFzcycgYW5kOgogICAgICAgICAgICAgICAgICAgICMgLSBpZiB3ZSBzYXcgJ3VzZSBmZWF0dXJlICdjbGFzcycgdGhlbiBpc3N1ZSB0aGUgd2FybmluZy4KICAgICAgICAgICAgICAgICAgICAjIC0gaWYgd2UgZGlkIG5vdCBzZWUgdXNlIGZlYXR1cmUgJ2NsYXNzJyB0aGVuIGlzc3VlIHRoZQogICAgICAgICAgICAgICAgICAgICMgICB3YXJuaW5nIGFuZCBzdWdnZXN0IHR1cm5pbmcgb2ZmIC0tdXNlLWZlYXR1cmU9Y2xhc3MKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRzdWJuYW1lID0gRU1QVFlfU1RSSU5HIHVubGVzcyBkZWZpbmVkKCRzdWJuYW1lKTsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+d2FybmluZygKImV4cGVjdGluZyAnOicgb3IgJzsnIG9yICd7JyBhZnRlciBkZWZpbml0aW9uIG9yIGRlY2xhcmF0aW9uIG9mIHN1YiAnJHN1Ym5hbWUnIGJ1dCBzYXcgJyRuZXh0X25vbmJsYW5rX3Rva2VuJ1xuIgogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgRU9GIHRlY2huaWNhbGx5IG9rCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICB9CgogICAgICAgICAgICBjaGVja19wcm90b3R5cGUoICRwcm90bywgJHBhY2thZ2UsICRzdWJuYW1lICk7CiAgICAgICAgfQoKICAgICAgICAjIG5vIG1hdGNoIHRvIGVpdGhlciBzdWIgbmFtZSBvciBwcm90b3R5cGUsIGJ1dCBsaW5lIG5vdCBibGFuawogICAgICAgIGVsc2UgewoKICAgICAgICB9CiAgICAgICAgcmV0dXJuICggJGksICR0b2ssICR0eXBlLCAkaWRfc2Nhbl9zdGF0ZSApOwogICAgfSAjIyBlbmQgc3ViIGRvX3NjYW5fc3ViCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBUb2tlbml6ZXIgdXRpbGl0eSByb3V0aW5lcyB3aGljaCBtYXkgdXNlIENPTlNUQU5UUyBidXQgbm8gb3RoZXIgR0xPQkFMUwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpzdWIgZmluZF9uZXh0X25vbmJsYW5rX3Rva2VuIHsKICAgIG15ICggJHNlbGYsICRpLCAkcnRva2VucywgJG1heF90b2tlbl9pbmRleCApID0gQF87CgogICAgIyBSZXR1cm5zIHRoZSBuZXh0IG5vbmJsYW5rIHRva2VuIGFmdGVyIHRoZSB0b2tlbiBhdCBpbmRleCAkaQogICAgIyBUbyBza2lwIHBhc3QgYSBzaWRlIGNvbW1lbnQsIGFuZCBhbnkgc3Vic2VxdWVudCBibG9jayBjb21tZW50cwogICAgIyBhbmQgYmxhbmsgbGluZXMsIGNhbGwgd2l0aCBpPSRtYXhfdG9rZW5faW5kZXgKCiAgICAjIFNraXAgYW55IGVuZGluZyBibGFuayAoZml4IGMyNTgpLiBJdCB3b3VsZCBiZSBjbGVhbmVyIGlmIGNhbGxlciBwYXNzZWQKICAgICMgJHJ0b2tlbl9tYXAsIHNvIHdlIGNvdWxkIGNoZWNrIGZvciB0eXBlICdiJywgYW5kIGF2b2lkIGEgcmVnZXggdGVzdCwgYnV0CiAgICAjIGJlbmNobWFya2luZyBzaG93cyB0aGF0IHRoaXMgdGVzdCBkb2VzIG5vdCB0YWtlIHNpZ25pZmljYW50IHRpbWUuICBTbwogICAgIyB0aGF0IHdvdWxkIGJlIGEgbmljZSB1cGRhdGUgYnV0IG5vdCBlc3NlbnRpYWwuICBBbHNvIG5vdGUgdGhhdCBlbmRpbmcKICAgICMgYmxhbmtzIHdpbGwgbm90IG9jY3VyIGZvciB0ZXh0IHByZXZpb3VzbHkgcHJvY2Vzc2VkIGJ5IHBlcmx0aWR5LgogICAgaWYgKCAgICRpID09ICRtYXhfdG9rZW5faW5kZXggLSAxCiAgICAgICAgJiYgJHJ0b2tlbnMtPlskbWF4X3Rva2VuX2luZGV4XSA9fiAvXlxzKyQvICkKICAgIHsKICAgICAgICAkaSsrOwogICAgfQoKICAgIGlmICggJGkgPj0gJG1heF90b2tlbl9pbmRleCApIHsKICAgICAgICBpZiAoICFwZWVrZWRfYWhlYWQoKSApIHsKICAgICAgICAgICAgcGVla2VkX2FoZWFkKDEpOwogICAgICAgICAgICAkc2VsZi0+cGVla19haGVhZF9mb3Jfbm9uYmxhbmtfdG9rZW4oICRydG9rZW5zLCAkbWF4X3Rva2VuX2luZGV4ICk7CiAgICAgICAgfQogICAgfQoKICAgIG15ICRuZXh0X25vbmJsYW5rX3Rva2VuID0gJHJ0b2tlbnMtPlsgKyskaSBdOwoKICAgICMgQW55IG1vcmUgdG9rZW5zPwogICAgcmV0dXJuICggU1BBQ0UsICRpICkKICAgICAgaWYgKCAhZGVmaW5lZCgkbmV4dF9ub25ibGFua190b2tlbikgfHwgIWxlbmd0aCgkbmV4dF9ub25ibGFua190b2tlbikgKTsKCiAgICAjIFNraXAgb3ZlciB3aGl0ZXNwYWNlCiAgICBteSAkb3JkID0gb3JkKCBzdWJzdHIoICRuZXh0X25vbmJsYW5rX3Rva2VuLCAwLCAxICkgKTsKICAgIGlmICgKCiAgICAgICAgKCAkb3JkIDw9IE9SRF9QUklOVEFCTEVfTUlOIHx8ICRvcmQgPj0gT1JEX1BSSU5UQUJMRV9NQVggKQoKICAgICAgICAjIFF1aWNrIHRlc3QgZm9yIGFzY2lpIHNwYWNlIG9yIHRhYgogICAgICAgICYmICgKICAgICAgICAgICAgKCAkb3JkID09IE9SRF9TUEFDRSB8fCAkb3JkID09IE9SRF9UQUIgKQoKICAgICAgICAgICAgIyBTbG93IHRlc3QgdG8gZm9yIHNvbWV0aGluZyBlbHNlIGlkZW50aWZpZWQgYXMgd2hpdGVzcGFjZQogICAgICAgICAgICB8fCAkbmV4dF9ub25ibGFua190b2tlbiA9fiAvXlxzKyQvCiAgICAgICAgKQogICAgICApCiAgICB7CiAgICAgICAgJG5leHRfbm9uYmxhbmtfdG9rZW4gPSAkcnRva2Vucy0+WyArKyRpIF07CiAgICAgICAgcmV0dXJuICggU1BBQ0UsICRpICkgdW5sZXNzIGRlZmluZWQoJG5leHRfbm9uYmxhbmtfdG9rZW4pOwogICAgfQoKICAgICMgV2Ugc2hvdWxkIGJlIGF0IGEgbm9uYmxhbmsgbm93CiAgICByZXR1cm4gKCAkbmV4dF9ub25ibGFua190b2tlbiwgJGkgKTsKCn0gIyMgZW5kIHN1YiBmaW5kX25leHRfbm9uYmxhbmtfdG9rZW4KCnN1YiBmaW5kX25leHRfbm9uY29tbWVudF90b2tlbiB7CiAgICBteSAoICRzZWxmLCAkaSwgJHJ0b2tlbnMsICRtYXhfdG9rZW5faW5kZXggKSA9IEBfOwoKICAgICMgR2l2ZW4gdGhlIGN1cnJlbnQgY2hhcmFjdGVyIHBvc2l0aW9uLCBsb29rIGFoZWFkIHBhc3QgYW55IGNvbW1lbnRzCiAgICAjIGFuZCBibGFuayBsaW5lcyBhbmQgcmV0dXJuIHRoZSBuZXh0IHRva2VuLCBpbmNsdWRpbmcgZGlncmFwaHMgYW5kCiAgICAjIHRyaWdyYXBocy4KCiAgICBteSAoICRuZXh0X25vbmJsYW5rX3Rva2VuLCAkaV9uZXh0ICkgPQogICAgICAkc2VsZi0+ZmluZF9uZXh0X25vbmJsYW5rX3Rva2VuKCAkaSwgJHJ0b2tlbnMsICRtYXhfdG9rZW5faW5kZXggKTsKCiAgICAjIHNraXAgcGFzdCBhbnkgc2lkZSBjb21tZW50CiAgICBpZiAoICRuZXh0X25vbmJsYW5rX3Rva2VuIGVxICcjJyApIHsKICAgICAgICAoICRuZXh0X25vbmJsYW5rX3Rva2VuLCAkaV9uZXh0ICkgPQogICAgICAgICAgJHNlbGYtPmZpbmRfbmV4dF9ub25ibGFua190b2tlbiggJGlfbmV4dCwgJHJ0b2tlbnMsCiAgICAgICAgICAgICRtYXhfdG9rZW5faW5kZXggKTsKICAgIH0KCiAgICAjIGNoZWNrIGZvciBhIGRpZ3JhcGgKICAgIGlmICggICAkbmV4dF9ub25ibGFua190b2tlbgogICAgICAgICYmICRuZXh0X25vbmJsYW5rX3Rva2VuIG5lIFNQQUNFCiAgICAgICAgJiYgZGVmaW5lZCggJHJ0b2tlbnMtPlsgJGlfbmV4dCArIDEgXSApICkKICAgIHsKICAgICAgICBteSAkdGVzdDIgPSAkbmV4dF9ub25ibGFua190b2tlbiAuICRydG9rZW5zLT5bICRpX25leHQgKyAxIF07CiAgICAgICAgaWYgKCAkaXNfZGlncmFwaHskdGVzdDJ9ICkgewogICAgICAgICAgICAkbmV4dF9ub25ibGFua190b2tlbiA9ICR0ZXN0MjsKICAgICAgICAgICAgJGlfbmV4dCAgICAgICAgICAgICAgPSAkaV9uZXh0ICsgMTsKCiAgICAgICAgICAgICMgY2hlY2sgZm9yIGEgdHJpZ3JhcGgKICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCAkcnRva2Vucy0+WyAkaV9uZXh0ICsgMSBdICkgKSB7CiAgICAgICAgICAgICAgICBteSAkdGVzdDMgPSAkbmV4dF9ub25ibGFua190b2tlbiAuICRydG9rZW5zLT5bICRpX25leHQgKyAxIF07CiAgICAgICAgICAgICAgICBpZiAoICRpc190cmlncmFwaHskdGVzdDN9ICkgewogICAgICAgICAgICAgICAgICAgICRuZXh0X25vbmJsYW5rX3Rva2VuID0gJHRlc3QzOwogICAgICAgICAgICAgICAgICAgICRpX25leHQgICAgICAgICAgICAgID0gJGlfbmV4dCArIDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICggJG5leHRfbm9uYmxhbmtfdG9rZW4sICRpX25leHQgKTsKfSAjIyBlbmQgc3ViIGZpbmRfbmV4dF9ub25jb21tZW50X3Rva2VuCgpzdWIgaXNfcG9zc2libGVfbnVtZXJhdG9yIHsKCiAgICBteSAoICRzZWxmLCAkaSwgJHJ0b2tlbnMsICRtYXhfdG9rZW5faW5kZXggKSA9IEBfOwoKICAgICMgTG9vayBhdCB0aGUgbmV4dCBub24tY29tbWVudCBjaGFyYWN0ZXIgYW5kIGRlY2lkZSBpZiBpdCBjb3VsZCBiZSBhCiAgICAjIG51bWVyYXRvci4gUmV0dXJucyB0aGUgZm9sbG93aW5nIGNvZGU6CiAgICAjICAgLTEgLSBkaXZpc2lvbiBub3QgcG9zc2libGUKICAgICMgICAgMCAtIGNhbid0IHRlbGwgaWYgZGl2aXNpb24gcG9zc2libGUKICAgICMgICAgMSAtIGRpdmlzaW9uIHBvc3NpYmxlCiAgICAjICAgIDIgLSBkaXZpc2lvbiBwcm9iYWJsZTogbnVtYmVyIGZvbGxvd3MKICAgICMgICAgMyAtIGRpdmlzaW9uIHZlcnkgcHJvYmFibGU6IG51bWJlciBhbmQgb25lIG9mIDsgXSB9IGZvbGxvdwogICAgIyAgICA0IC0gaXMgZGl2aXNpb24sIG5vdCBwYXR0ZXJuOiBudW1iZXIgYW5kICkgZm9sbG93CgogICAgbXkgJGRpdmlkZV9wb3NzaWJsZV9jb2RlID0gMDsKCiAgICBteSAkbmV4dF90b2tlbiA9ICRydG9rZW5zLT5bICRpICsgMSBdOwogICAgaWYgKCAkbmV4dF90b2tlbiBlcSAnPScgKSB7ICRpKys7IH0gICAgIyBoYW5kbGUgLz0KICAgIG15ICggJG5leHRfbm9uYmxhbmtfdG9rZW4sICRpX25leHQgKSA9CiAgICAgICRzZWxmLT5maW5kX25leHRfbm9uYmxhbmtfdG9rZW4oICRpLCAkcnRva2VucywgJG1heF90b2tlbl9pbmRleCApOwoKICAgIGlmICggJG5leHRfbm9uYmxhbmtfdG9rZW4gZXEgJyMnICkgewogICAgICAgICggJG5leHRfbm9uYmxhbmtfdG9rZW4sICRpX25leHQgKSA9CiAgICAgICAgICAkc2VsZi0+ZmluZF9uZXh0X25vbmJsYW5rX3Rva2VuKCAkbWF4X3Rva2VuX2luZGV4LCAkcnRva2VucywKICAgICAgICAgICAgJG1heF90b2tlbl9pbmRleCApOwogICAgfQoKICAgIGlmICggJG5leHRfbm9uYmxhbmtfdG9rZW4gPX4gLyBbIFwoIFwkIFx3IFwuIFxAIF0gL3ggKSB7CiAgICAgICAgJGRpdmlkZV9wb3NzaWJsZV9jb2RlID0gMTsKCiAgICAgICAgIyBsb29rIGFoZWFkIG9uZSBtb3JlIHRva2VuIGZvciBzb21lIGNvbW1vbiBwYXR0ZXJucywgc3VjaCBhcwogICAgICAgICMgICBwaS8yKSAgIHBpLzI7ICAgcGkvMn0KICAgICAgICBpZiAoICRuZXh0X25vbmJsYW5rX3Rva2VuID1+IC9eXGQvICkgewogICAgICAgICAgICBteSAoICRuZXh0X25leHRfbm9uYmxhbmtfdG9rZW4sICRpX25leHRfbmV4dF91dSApID0KICAgICAgICAgICAgICAkc2VsZi0+ZmluZF9uZXh0X25vbmJsYW5rX3Rva2VuKCAkaV9uZXh0LCAkcnRva2VucywKICAgICAgICAgICAgICAgICRtYXhfdG9rZW5faW5kZXggKTsKICAgICAgICAgICAgaWYgKCAkbmV4dF9uZXh0X25vbmJsYW5rX3Rva2VuIGVxICcpJyApIHsKICAgICAgICAgICAgICAgICRkaXZpZGVfcG9zc2libGVfY29kZSA9IDQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCRuZXh0X25leHRfbm9uYmxhbmtfdG9rZW4gZXEgJzsnCiAgICAgICAgICAgICAgICB8fCAkbmV4dF9uZXh0X25vbmJsYW5rX3Rva2VuIGVxICddJwogICAgICAgICAgICAgICAgfHwgJG5leHRfbmV4dF9ub25ibGFua190b2tlbiBlcSAnfScgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkZGl2aWRlX3Bvc3NpYmxlX2NvZGUgPSAzOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJGRpdmlkZV9wb3NzaWJsZV9jb2RlID0gMjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGVsc2lmICggJG5leHRfbm9uYmxhbmtfdG9rZW4gPX4gL15ccyokLyApIHsKICAgICAgICAkZGl2aWRlX3Bvc3NpYmxlX2NvZGUgPSAwOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJGRpdmlkZV9wb3NzaWJsZV9jb2RlID0gLTE7CiAgICB9CgogICAgcmV0dXJuICRkaXZpZGVfcG9zc2libGVfY29kZTsKfSAjIyBlbmQgc3ViIGlzX3Bvc3NpYmxlX251bWVyYXRvcgoKeyAgICAjIyBjbG9zdXJlIGZvciBzdWIgcGF0dGVybl9leHBlY3RlZAogICAgbXkgJXBhdHRlcm5fdGVzdDsKCiAgICBCRUdJTiB7CgogICAgICAgICMgTGlzdCBvZiB0b2tlbnMgd2hpY2ggbWF5IGZvbGxvdyBhIHBhdHRlcm4uICBOb3RlIHRoYXQgd2Ugd2lsbCBub3QKICAgICAgICAjIGhhdmUgZm9ybWVkIGRpZ3JhcGhzIGF0IHRoaXMgcG9pbnQsIHNvIHdlIHdpbGwgc2VlICcmJyBpbnN0ZWFkIG9mCiAgICAgICAgIyAnJiYnIGFuZCAnfCcgaW5zdGVhZCBvZiAnfHwnCgogICAgICAgICMgLyhcKXxcfXxcO3xcJlwmfFx8XHx8YW5kfG9yfHdoaWxlfGlmfHVubGVzcykvCiAgICAgICAgbXkgQHEgPSBxdyggJiAmJiB8IHx8ID8gOiArIC0gKiBhbmQgb3Igd2hpbGUgaWYgdW5sZXNzICk7CiAgICAgICAgcHVzaCBAcSwgJyknLCAnfScsICddJywgJz4nLCAnLCcsICc7JzsKICAgICAgICBAcGF0dGVybl90ZXN0e0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CiAgICB9ICMjIGVuZCBCRUdJTgoKICAgIHN1YiBwYXR0ZXJuX2V4cGVjdGVkIHsKCiAgICAgICAgbXkgKCAkc2VsZiwgJGksICRydG9rZW5zLCAkbWF4X3Rva2VuX2luZGV4ICkgPSBAXzsKCiAgICAgICAgIyBUaGlzIGEgZmlsdGVyIGZvciBhIHBvc3NpYmxlIHBhdHRlcm4uCiAgICAgICAgIyBJdCBsb29rcyBhdCB0aGUgdG9rZW4gYWZ0ZXIgYSBwb3NzaWJsZSBwYXR0ZXJuIGFuZCB0cmllcyB0bwogICAgICAgICMgZGV0ZXJtaW5lIGlmIHRoYXQgdG9rZW4gY291bGQgZW5kIGEgcGF0dGVybi4KICAgICAgICAjIHJldHVybnMgLQogICAgICAgICMgICAxIC0geWVzCiAgICAgICAgIyAgIDAgLSBjYW4ndCB0ZWxsCiAgICAgICAgIyAgLTEgLSBubwogICAgICAgIG15ICRpc19wYXR0ZXJuID0gMDsKCiAgICAgICAgbXkgJG5leHRfdG9rZW4gPSAkcnRva2Vucy0+WyAkaSArIDEgXTsKCiAgICAgICAgIyBza2lwIGEgcG9zc2libGUgcXVvdGUgbW9kaWZpZXIKICAgICAgICBteSAkcG9zc2libGVfbW9kaWZpZXJzID0gJHF1b3RlX21vZGlmaWVyc3snbSd9OwogICAgICAgIGlmICggJG5leHRfdG9rZW4gPX4gL14kcG9zc2libGVfbW9kaWZpZXJzLyApIHsKICAgICAgICAgICAgJGkrKzsKICAgICAgICB9CgogICAgICAgIG15ICggJG5leHRfbm9uYmxhbmtfdG9rZW4sICRpX25leHRfdXUgKSA9CiAgICAgICAgICAkc2VsZi0+ZmluZF9uZXh0X25vbmJsYW5rX3Rva2VuKCAkaSwgJHJ0b2tlbnMsICRtYXhfdG9rZW5faW5kZXggKTsKCiAgICAgICAgaWYgKCAkcGF0dGVybl90ZXN0eyRuZXh0X25vbmJsYW5rX3Rva2VufSApIHsKICAgICAgICAgICAgJGlzX3BhdHRlcm4gPSAxOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgQWRkZWQgJyMnIHRvIGZpeCBpc3N1ZSBjMDQ0CiAgICAgICAgICAgIGlmICggICAkbmV4dF9ub25ibGFua190b2tlbiA9fiAvXlxzKiQvCiAgICAgICAgICAgICAgICB8fCAkbmV4dF9ub25ibGFua190b2tlbiBlcSAnIycgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkaXNfcGF0dGVybiA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkaXNfcGF0dGVybiA9IC0xOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkaXNfcGF0dGVybjsKICAgIH0gIyMgZW5kIHN1YiBwYXR0ZXJuX2V4cGVjdGVkCn0KCnN1YiBmaW5kX25leHRfbm9uYmxhbmtfdG9rZW5fb25fdGhpc19saW5lIHsKICAgIG15ICggJGksICRydG9rZW5zLCAkbWF4X3Rva2VuX2luZGV4ICkgPSBAXzsKICAgIG15ICRuZXh0X25vbmJsYW5rX3Rva2VuOwoKICAgIGlmICggJGkgPCAkbWF4X3Rva2VuX2luZGV4ICkgewogICAgICAgICRuZXh0X25vbmJsYW5rX3Rva2VuID0gJHJ0b2tlbnMtPlsgKyskaSBdOwoKICAgICAgICBpZiAoICRuZXh0X25vbmJsYW5rX3Rva2VuID1+IC9eXHMqJC8gKSB7CgogICAgICAgICAgICBpZiAoICRpIDwgJG1heF90b2tlbl9pbmRleCApIHsKICAgICAgICAgICAgICAgICRuZXh0X25vbmJsYW5rX3Rva2VuID0gJHJ0b2tlbnMtPlsgKyskaSBdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgJG5leHRfbm9uYmxhbmtfdG9rZW4gPSBFTVBUWV9TVFJJTkc7CiAgICB9CiAgICByZXR1cm4gKCAkbmV4dF9ub25ibGFua190b2tlbiwgJGkgKTsKfSAjIyBlbmQgc3ViIGZpbmRfbmV4dF9ub25ibGFua190b2tlbl9vbl90aGlzX2xpbmUKCnN1YiBmaW5kX2FuZ2xlX29wZXJhdG9yX3Rlcm1pbmF0aW9uIHsKCiAgICBteSAoICRzZWxmLCAkaW5wdXRfbGluZSwgJGlfYmVnLCAkcnRva2VuX21hcCwgJGV4cGVjdGluZywgJG1heF90b2tlbl9pbmRleCApCiAgICAgID0gQF87CgogICAgIyBXZSBhcmUgbG9va2luZyBhdCBhICc8JyBhbmQgd2FudCB0byBrbm93IGlmIGl0IGlzIGFuIGFuZ2xlIG9wZXJhdG9yLgogICAgIyBSZXR1cm46CiAgICAjICAgJGkgPSBwcmV0b2tlbiBpbmRleCBvZiBlbmRpbmcgJz4nIGlmIGZvdW5kLCBjdXJyZW50ICRpIG90aGVyd2lzZQogICAgIyAgICR0eXBlID0gJ1EnIGlmIGZvdW5kLCAnPicgb3RoZXJ3aXNlCgogICAgbXkgJGkgICAgPSAkaV9iZWc7CiAgICBteSAkdHlwZSA9ICc8JzsKICAgIHBvcygkaW5wdXRfbGluZSkgPSAxICsgJHJ0b2tlbl9tYXAtPlskaV07CgogICAgbXkgJGZpbHRlcjsKCiAgICBteSAkZXhwZWN0aW5nX1RFUk0gPSAkZXhwZWN0aW5nID09IFRFUk07CgogICAgIyB3ZSBqdXN0IGhhdmUgdG8gZmluZCB0aGUgbmV4dCAnPicgaWYgYSB0ZXJtIGlzIGV4cGVjdGVkCiAgICBpZiAoJGV4cGVjdGluZ19URVJNKSB7ICRmaWx0ZXIgPSAnW1w+XScgfQoKICAgICMgd2UgaGF2ZSB0byBndWVzcyBpZiB3ZSBkb24ndCBrbm93IHdoYXQgaXMgZXhwZWN0ZWQKICAgIGVsc2lmICggJGV4cGVjdGluZyA9PSBVTktOT1dOICkgeyAkZmlsdGVyID0gJ1tcPlw7XD1cI1x8XDxdJyB9CgogICAgIyBzaG91bGRuJ3QgaGFwcGVuIC0gd2Ugc2hvdWxkbid0IGJlIGhlcmUgaWYgb3BlcmF0b3IgaXMgZXhwZWN0ZWQKICAgIGVsc2UgewogICAgICAgIGlmIChERVZFTF9NT0RFKSB7CiAgICAgICAgICAgICRzZWxmLT5GYXVsdCg8PEVPTSk7CkJhZCBjYWxsIHRvIGZpbmRfYW5nbGVfb3BlcmF0b3JfdGVybWluYXRpb24KRU9NCiAgICAgICAgfQogICAgICAgIHJldHVybiAoICRpLCAkdHlwZSApOwogICAgfQoKICAgICMgVG8gaWxsdXN0cmF0ZSB3aGF0IHdlIG1pZ2h0IGJlIGxvb2tpbmcgYXQsIGluIGNhc2Ugd2UgYXJlCiAgICAjIGd1ZXNzaW5nLCBoZXJlIGFyZSBzb21lIGV4YW1wbGVzIG9mIHZhbGlkIGFuZ2xlIG9wZXJhdG9ycwogICAgIyAob3IgZmlsZSBnbG9icyk6CiAgICAjICA8dG1wX2ltcC8qPgogICAgIyAgPEZIPgogICAgIyAgPCRmaD4KICAgICMgIDwqLmMgKi5oPgogICAgIyAgPF8+CiAgICAjICA8anNrZGZqc2tkZmoqIG9wLyoganNrZGpmamtvc3ZrKj4gKCBnbG9iLnQpCiAgICAjICA8JHtQUkVGSVh9KmltZyouJElNQUdFX1RZUEU+CiAgICAjICA8aW1nKi4kSU1BR0VfVFlQRT4KICAgICMgIDxUaW1nKi4kSU1BR0VfVFlQRT4KICAgICMgIDwkTEFURVgySFRNTFZFUlNJT05TJHtkZH1odG1sWzEtOV0uWzAtOV0ucGw+CiAgICAjCiAgICAjIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXMgb2YgbGluZXMgd2hpY2ggZG8gbm90IGhhdmUgYW5nbGUgb3BlcmF0b3JzOgogICAgIyAgcmV0dXJuIHVubGVzcyAkc2VsZi0+WzJdKysgPCAkI3skc2VsZi0+WzFdfTsKICAgICMgIDwgMiAgfHwgQCR0ID4KICAgICMKICAgICMgdGhlIGZvbGxvd2luZyBsaW5lIGZyb20gZGxpc3Rlci5wbCBjYXVzZWQgdHJvdWJsZToKICAgICMgIHByaW50J34neDc5LCJcbiIsJEQ8MTAyND8iMC4kRCI6JEQ+PjEwLCJLLCAkQyBmaWxlc1xuXG5cbiI7CiAgICAjCiAgICAjIElmIHRoZSAnPCcgc3RhcnRzIGFuIGFuZ2xlIG9wZXJhdG9yLCBpdCBtdXN0IGVuZCBvbiB0aGlzIGxpbmUgYW5kCiAgICAjIGl0IG11c3Qgbm90IGhhdmUgY2VydGFpbiBjaGFyYWN0ZXJzIGxpa2UgJzsnIGFuZCAnPScgaW4gaXQuICBJIHVzZQogICAgIyB0aGlzIHRvIGxpbWl0IHRoZSB0ZXN0aW5nLiAgVGhpcyBmaWx0ZXIgc2hvdWxkIGJlIGltcHJvdmVkIGlmCiAgICAjIHBvc3NpYmxlLgoKICAgIGlmICggJGlucHV0X2xpbmUgPX4gLygkZmlsdGVyKS9nICkgewoKICAgICAgICBpZiAoICQxIGVxICc+JyApIHsKCiAgICAgICAgICAgICMgV2UgTUFZIGhhdmUgZm91bmQgYW4gYW5nbGUgb3BlcmF0b3IgdGVybWluYXRpb24gaWYgd2UgZ2V0CiAgICAgICAgICAgICMgaGVyZSwgYnV0IHdlIG5lZWQgdG8gZG8gbW9yZSB0byBiZSBzdXJlIHdlIGhhdmVuJ3QgYmVlbgogICAgICAgICAgICAjIGZvb2xlZC4KICAgICAgICAgICAgbXkgJHBvcyA9IHBvcygkaW5wdXRfbGluZSk7CgogICAgICAgICAgICBteSAkcG9zX2JlZyA9ICRydG9rZW5fbWFwLT5bJGldOwogICAgICAgICAgICBteSAkc3RyICAgICA9IHN1YnN0ciggJGlucHV0X2xpbmUsICRwb3NfYmVnLCAoICRwb3MgLSAkcG9zX2JlZyApICk7CgogICAgICAgICAgICAjIFRlc3QgZm9yICc8JyBhZnRlciBwb3NzaWJsZSBmaWxlaGFuZGxlLCBpc3N1ZSBjMTAzCiAgICAgICAgICAgICMgcHJpbnQgJGZoIDw+OyAgICAgICAgICAjIHN5bnRheCBlcnJvcgogICAgICAgICAgICAjIHByaW50ICRmaCA8REFUQT47ICAgICAgIyBvawogICAgICAgICAgICAjIHByaW50ICRmaCA8IERBVEE+OyAgICAgIyBzeW50YXggZXJyb3IgYXQgJz4nCiAgICAgICAgICAgICMgcHJpbnQgU1RERVJSIDwgREFUQT47ICAjIG9rLCBwcmludHMgd29yZCAnREFUQScKICAgICAgICAgICAgIyBwcmludCBCTEFCTEEgPERBVEE+OyAgICMgb2s7IGRvZXMgbm90aGluZyB1bmxlc3MgQkxBQkxBIGlzIGRlZmluZWQKICAgICAgICAgICAgaWYgKCAkbGFzdF9ub25ibGFua190eXBlIGVxICdaJyApIHsKCiAgICAgICAgICAgICAgICAjICRzdHIgaW5jbHVkZXMgYnJhY2tldHM7IHNvbWV0aGluZyBsaWtlICc8REFUQT4nCiAgICAgICAgICAgICAgICBpZiAoICAgc3Vic3RyKCAkbGFzdF9ub25ibGFua190b2tlbiwgMCwgMSApICF+IC9bQS1aYS16X10vCiAgICAgICAgICAgICAgICAgICAgJiYgc3Vic3RyKCAkc3RyLCAxLCAxICkgIX4gL1tBLVphLXpfXS8gKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAoICRpLCAkdHlwZSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFJlamVjdCBpZiB0aGUgY2xvc2luZyAnPicgZm9sbG93cyBhICctJyBhcyBpbjoKICAgICAgICAgICAgIyBpZiAoIFZFUlNJT04gPCA1LjAwOSAmJiAkb3AtPiBuYW1lIGVxICdhc3NpZ24nICkgeyB9CiAgICAgICAgICAgIGlmICggJGV4cGVjdGluZyBlcSBVTktOT1dOICkgewogICAgICAgICAgICAgICAgbXkgJGNoZWNrID0gc3Vic3RyKCAkaW5wdXRfbGluZSwgJHBvcyAtIDIsIDEgKTsKICAgICAgICAgICAgICAgIGlmICggJGNoZWNrIGVxICctJyApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCAkaSwgJHR5cGUgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNkZWJ1ZyMjIyMjCiAgICAgICAgICAgICMkc2VsZi0+d3JpdGVfZGlhZ25vc3RpY3MoICJBTkdMRT8gOiRzdHJcbiIpOwogICAgICAgICAgICAjcHJpbnQgIkFOR0xFOiBmb3VuZCAkMSBhdCBwb3M9JHBvcyBzdHI9JHN0ciBjaGVjaz0kY2hlY2tcbiI7CiAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjZGVidWcjIyMjIwogICAgICAgICAgICAkdHlwZSA9ICdRJzsKICAgICAgICAgICAgbXkgJGVycm9yOwogICAgICAgICAgICAoICRpLCAkZXJyb3IgKSA9CiAgICAgICAgICAgICAgaW52ZXJzZV9wcmV0b2tlbl9tYXAoICRpLCAkcG9zLCAkcnRva2VuX21hcCwgJG1heF90b2tlbl9pbmRleCApOwoKICAgICAgICAgICAgIyBJdCBtYXkgYmUgcG9zc2libGUgdGhhdCBhIHF1b3RlIGVuZHMgbWlkd2F5IGluIGEgcHJldG9rZW4uCiAgICAgICAgICAgICMgSWYgdGhpcyBoYXBwZW5zLCBpdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIHNwbGl0IHRoZSBwcmV0b2tlbi4KICAgICAgICAgICAgaWYgKCRlcnJvcikgewogICAgICAgICAgICAgICAgaWYgKERFVkVMX01PREUpIHsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+RmF1bHQoPDxFT00pOwp1bmV4cGVjdGVkIGVycm9yIGNvbmRpdGlvbiByZXR1cm5lZCBieSBpbnZlcnNlX3ByZXRva2VuX21hcApFT00KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRzZWxmLT53YXJuaW5nKAogICAgICAgICAgICAgICAgICAgICJQb3NzaWJsZSB0b2tpbml6YXRpb24gZXJyb3IuLnBsZWFzZSBjaGVjayB0aGlzIGxpbmVcbiIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIENoZWNrIGZvciBhY2NpZGVudGFsIGZvcm1hdHRpbmcgb2YgYSBtYXJrdXAgbGFuZ3VhZ2UgZG9jLi4uCiAgICAgICAgICAgICMgRm9ybWF0dGluZyB3aWxsIGJlIHNraXBwZWQgaWYgd2Ugc2V0IF9odG1sX3RhZ19jb3VudF8gYW5kCiAgICAgICAgICAgICMgYWxzbyBzZXQgYSB3YXJuaW5nIG9mIGFueSBraW5kLgogICAgICAgICAgICBteSAkaXNfaHRtbF90YWc7CiAgICAgICAgICAgIG15ICRpc19maXJzdF9zdHJpbmcgPQogICAgICAgICAgICAgICRpX2JlZyA9PSAwICYmICRzZWxmLT5bX2xhc3RfbGluZV9udW1iZXJfXSA9PSAxOwoKICAgICAgICAgICAgIyBodG1sIGNvbW1lbnQgJzwhLi4uJyBvZiBhbnkgdHlwZQogICAgICAgICAgICBpZiAoICRzdHIgPX4gL148XHMqIS8gKSB7CiAgICAgICAgICAgICAgICAkaXNfaHRtbF90YWcgPSAxOwogICAgICAgICAgICAgICAgaWYgKCRpc19maXJzdF9zdHJpbmcpIHsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+d2FybmluZygKImxvb2tzIGxpa2UgYSBtYXJrdXAgbGFuZ3VhZ2UsIGNvbnRpbnVpbmcgZXJyb3IgY2hlY2tzXG4iCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBodG1sIGVuZCB0YWcsIHNvbWV0aGluZyBsaWtlIDwvaDE+CiAgICAgICAgICAgIGVsc2lmICggJHN0ciA9fiAvXjxccypcL1x3K1xzKj4kLyApIHsKICAgICAgICAgICAgICAgICRpc19odG1sX3RhZyA9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgeG1sIHByb2xvZz8KICAgICAgICAgICAgZWxzaWYgKCAkc3RyID1+IC9ePFw/eG1sXHMuKlw/PiQvaSAmJiAkaXNfZmlyc3Rfc3RyaW5nICkgewogICAgICAgICAgICAgICAgJGlzX2h0bWxfdGFnID0gMTsKICAgICAgICAgICAgICAgICRzZWxmLT53YXJuaW5nKAogICAgICAgICAgICAgICAgICAgICJsb29rcyBsaWtlIGEgbWFya3VwIGxhbmd1YWdlLCBjb250aW51aW5nIGVycm9yIGNoZWNrc1xuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAjIyBkb2Vzbid0IGxvb2sgbGlrZSBhIG1hcmt1cCB0YWcKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRpc19odG1sX3RhZykgewogICAgICAgICAgICAgICAgJHNlbGYtPltfaHRtbF90YWdfY291bnRfXSsrOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNvdW50IGJsYW5rcyBvbiBpbnNpZGUgb2YgYnJhY2tldHMKICAgICAgICAgICAgbXkgJGJsYW5rX2NvdW50ID0gMDsKICAgICAgICAgICAgJGJsYW5rX2NvdW50KysgaWYgKCAkc3RyID1+IC88XHMrLyApOwogICAgICAgICAgICAkYmxhbmtfY291bnQrKyBpZiAoICRzdHIgPX4gL1xzKz4vICk7CgogICAgICAgICAgICAjIE5vdyBsZXQncyBzZWUgd2hlcmUgd2Ugc3RhbmQuLi4uCiAgICAgICAgICAgICMgT0sgaWYgbWF0aCBvcCBub3QgcG9zc2libGUKICAgICAgICAgICAgaWYgKCRleHBlY3RpbmdfVEVSTSkgewogICAgICAgICAgICB9CgogICAgICAgICAgICBlbHNpZiAoJGlzX2h0bWxfdGFnKSB7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgT0sgaWYgdGhlcmUgYXJlIG5vIG1vcmUgdGhhbiAyIG5vbi1ibGFuayBwcmUtdG9rZW5zIGluc2lkZQogICAgICAgICAgICAjIChub3QgcG9zc2libGUgdG8gd3JpdGUgMiB0b2tlbiBtYXRoIGJldHdlZW4gPCBhbmQgPikKICAgICAgICAgICAgIyBUaGlzIGNhdGNoZXMgbW9zdCBjb21tb24gY2FzZXMKICAgICAgICAgICAgZWxzaWYgKCAkaSA8PSAkaV9iZWcgKyAzICsgJGJsYW5rX2NvdW50ICkgewoKICAgICAgICAgICAgICAgICMgTm8gbG9uZ2VyIGFueSBuZWVkIHRvIGRvY3VtZW50IHRoaXMgY29tbW9uIGNhc2UKICAgICAgICAgICAgICAgICMjICRzZWxmLT53cml0ZV9kaWFnbm9zdGljcygiQU5HTEUoMSBvciAyIHRva2Vucyk6ICRzdHJcbiIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIE9LIGlmIHRoZXJlIGlzIHNvbWUga2luZCBvZiBpZGVudGlmaWVyIGluc2lkZQogICAgICAgICAgICAjICAgcHJpbnQgJGZoIDx0dmc6OklOUFVUPjsKICAgICAgICAgICAgZWxzaWYgKCAkc3RyID1+IC9ePFxzKlwkPyhcd3w6OnxccykrXHMqPiQvICkgewogICAgICAgICAgICAgICAgJHNlbGYtPndyaXRlX2RpYWdub3N0aWNzKCJBTkdMRSAoY29udGFpbnMgaWRlbnRpZmllcik6ICRzdHJcbiIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIE5vdCBzdXJlLi4KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyBMZXQncyB0cnkgYSBCcmFjZSBUZXN0OiBhbnkgYnJhY2VzIGluc2lkZSBtdXN0IGJhbGFuY2UKICAgICAgICAgICAgICAgIG15ICRiciA9ICRzdHIgPX4gdHIvXHsvey8gLSAkc3RyID1+IHRyL1x9L30vOwogICAgICAgICAgICAgICAgbXkgJHNiID0gJHN0ciA9fiB0ci9cWy9bLyAtICRzdHIgPX4gdHIvXF0vXS87CiAgICAgICAgICAgICAgICBteSAkcHIgPSAkc3RyID1+IHRyL1woLygvIC0gJHN0ciA9fiB0ci9cKS8pLzsKCiAgICAgICAgICAgICAgICAjIGlmIGJyYWNlcyBkbyBub3QgYmFsYW5jZSAtIG5vdCBhbmdsZSBvcGVyYXRvcgogICAgICAgICAgICAgICAgaWYgKCAkYnIgfHwgJHNiIHx8ICRwciApIHsKICAgICAgICAgICAgICAgICAgICAkaSAgICA9ICRpX2JlZzsKICAgICAgICAgICAgICAgICAgICAkdHlwZSA9ICc8JzsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+d3JpdGVfZGlhZ25vc3RpY3MoCiAgICAgICAgICAgICAgICAgICAgICAgICJOT1QgQU5HTEUgKEJSQUNFPXskYnIgKCRwciBbJHNiICk6JHN0clxuIik7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyB3ZSBzaG91bGQga2VlcCBkb2luZyBtb3JlIGNoZWNrcyBoZXJlLi4udG8gYmUgY29udGludWVkCiAgICAgICAgICAgICAgICAjIFRlbnRhdGl2ZWx5IGFjY2VwdGluZyB0aGlzIGFzIGEgdmFsaWQgYW5nbGUgb3BlcmF0b3IuCiAgICAgICAgICAgICAgICAjIFRoZXJlIGFyZSBsb3RzIG1vcmUgdGhpbmdzIHRoYXQgY2FuIGJlIGNoZWNrZWQuCiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkc2VsZi0+d3JpdGVfZGlhZ25vc3RpY3MoCiAgICAgICAgICAgICAgICAgICAgICAgICJBTkdMRS1HdWVzc2luZyB5ZXM6ICRzdHIgZXhwZWN0aW5nPSRleHBlY3RpbmdcbiIpOwogICAgICAgICAgICAgICAgICAgICRzZWxmLT53cml0ZV9sb2dmaWxlX2VudHJ5KAogICAgICAgICAgICAgICAgICAgICAgICAiR3Vlc3NpbmcgYW5nbGUgb3BlcmF0b3IgaGVyZTogJHN0clxuIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZGlkbid0IGZpbmQgZW5kaW5nID4KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKCRleHBlY3RpbmdfVEVSTSkgewogICAgICAgICAgICAgICAgJHNlbGYtPndhcm5pbmcoIk5vIGVuZGluZyA+IGZvciBhbmdsZSBvcGVyYXRvclxuIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gKCAkaSwgJHR5cGUgKTsKfSAjIyBlbmQgc3ViIGZpbmRfYW5nbGVfb3BlcmF0b3JfdGVybWluYXRpb24KCnN1YiBzY2FuX251bWJlcl9kbyB7CgogICAgbXkgKCAkc2VsZiwgJGlucHV0X2xpbmUsICRpLCAkcnRva2VuX21hcCwgJGlucHV0X3R5cGUsICRtYXhfdG9rZW5faW5kZXggKSA9CiAgICAgIEBfOwoKICAgICMgIFNjYW4gYSBudW1iZXIgaW4gYW55IG9mIHRoZSBmb3JtYXRzIHRoYXQgUGVybCBhY2NlcHRzCiAgICAjICBVbmRlcmJhcnMgKF8pIGFyZSBhbGxvd2VkIGluIGRlY2ltYWwgbnVtYmVycy4KICAgICMgIEdpdmVuOgogICAgIyAgICAgICRpbnB1dF9saW5lICAtIHRoZSBzdHJpbmcgdG8gc2NhbgogICAgIyAgICAgICRpICAgICAgICAgICAtIHByZV90b2tlbiBpbmRleCB0byBzdGFydCBzY2FubmluZwogICAgIyAgICAkcnRva2VuX21hcCAgICAtIHJlZmVyZW5jZSB0byB0aGUgcHJlX3Rva2VuIG1hcCBnaXZpbmcgc3RhcnRpbmcKICAgICMgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciBwb3NpdGlvbiBpbiAkaW5wdXRfbGluZSBvZiB0b2tlbiAkaQogICAgIyAgUmV0dXJuOgogICAgIyAgICAkaSAgICAgICAgICAgIC0gbGFzdCBwcmVfdG9rZW4gaW5kZXggb2YgdGhlIG51bWJlciBqdXN0IHNjYW5uZWQKICAgICMgICAgJHR5cGUgICAgICAgICAtIHRoZSB0b2tlbiB0eXBlICgndicgb3IgJ24nKQogICAgIyAgICBudW1iZXIgICAgICAgIC0gdGhlIG51bWJlciAoY2hhcmFjdGVycyk7IG9yIHVuZGVmIGlmIG5vdCBhIG51bWJlcgoKICAgIG15ICRwb3NfYmVnID0gJHJ0b2tlbl9tYXAtPlskaV07CiAgICBteSAkcG9zOwogICAgIyNteSAkaV9iZWdpbiA9ICRpOwogICAgbXkgJG51bWJlciA9IHVuZGVmOwogICAgbXkgJHR5cGUgICA9ICRpbnB1dF90eXBlOwoKICAgIG15ICRmaXJzdF9jaGFyID0gc3Vic3RyKCAkaW5wdXRfbGluZSwgJHBvc19iZWcsIDEgKTsKCiAgICAjIExvb2sgZm9yIGJhZCBzdGFydGluZyBjaGFyYWN0ZXJzOyBTaG91bGRuJ3QgaGFwcGVuLi4KICAgIGlmICggJGZpcnN0X2NoYXIgIX4gL1tcZFwuXCtcLUVlXS8gKSB7CiAgICAgICAgaWYgKERFVkVMX01PREUpIHsKICAgICAgICAgICAgJHNlbGYtPkZhdWx0KDw8RU9NKTsKUHJvZ3JhbSBidWcgLSBzY2FuX251bWJlciBnaXZlbiBiYWQgZmlyc3QgY2hhcmFjdGVyID0gJyRmaXJzdF9jaGFyJwpFT00KICAgICAgICB9CiAgICAgICAgcmV0dXJuICggJGksICR0eXBlLCAkbnVtYmVyICk7CiAgICB9CgogICAgIyBoYW5kbGUgdi1zdHJpbmcgd2l0aG91dCBsZWFkaW5nICd2JyBjaGFyYWN0ZXIgKCdUd28gRG90JyBydWxlKQogICAgIyAodnN0cmluZy50KQogICAgIyBIZXJlIGlzIHRoZSBmb3JtYXQgcHJpb3IgdG8gaW5jbHVkaW5nIHVuZGVyc2NvcmVzOgogICAgIyMgaWYgKCAkaW5wdXRfbGluZSA9fiAvXEcoKFxkKyk/XC5cZCsoXC5cZCspKykvZyApIHsKICAgIHBvcygkaW5wdXRfbGluZSkgPSAkcG9zX2JlZzsKICAgIGlmICggJGlucHV0X2xpbmUgPX4gL1xHKChcZFtfXGRdKik/XC5bXGRfXSsoXC5bXGRfXSspKykvZyApIHsKICAgICAgICAkcG9zID0gcG9zKCRpbnB1dF9saW5lKTsKICAgICAgICBteSAkbnVtYyA9ICRwb3MgLSAkcG9zX2JlZzsKICAgICAgICAkbnVtYmVyID0gc3Vic3RyKCAkaW5wdXRfbGluZSwgJHBvc19iZWcsICRudW1jICk7CiAgICAgICAgJHR5cGUgICA9ICd2JzsKICAgIH0KCiAgICAjIGhhbmRsZSBvY3RhbCwgaGV4LCBiaW5hcnkKICAgIGlmICggIWRlZmluZWQoJG51bWJlcikgKSB7CiAgICAgICAgcG9zKCRpbnB1dF9saW5lKSA9ICRwb3NfYmVnOwoKICAgICAgICAjIFBlcmwgNS4yMiBhZGRlZCBmbG9hdGluZyBwb2ludCBsaXRlcmFscywgbGlrZSAnMHgwLmIxNzIxN2Y3ZDFjZjc4cDAnCiAgICAgICAgIyBGb3IgcmVmZXJlbmNlLCB0aGUgZm9ybWF0IHByaW9yIHRvIGhleCBmbG9hdGluZyBwb2ludCBpczoKICAgICAgICAjICAgL1xHWystXT8wKChbeFhdWzAtOWEtZkEtRl9dKyl8KFswLTdfXSspfChbYkJdWzAxX10rKSkvZyApCiAgICAgICAgIyAgICAgICAgICAgICAoaGV4KSAgICAgICAgICAgICAgIChvY3RhbCkgICAoYmluYXJ5KQogICAgICAgIGlmICgKICAgICAgICAgICAgJGlucHV0X2xpbmUgPX4gbXsKCiAgICAgICAgICAgIFxHWystXT8wKCAgICAgICAgICAgICAgICAgICAjIGxlYWRpbmcgW3NpZ25lZF0gMAoKICAgICAgICAgICAjIGEgaGV4IGZsb2F0LCBpLmUuICcweDAuYjE3MjE3ZjdkMWNmNzhwMCcKICAgICAgICAgICAoW3hYXVswLTlhLWZBLUZfXSogICAgICAgICAgICAjIFggYW5kIG9wdGlvbmFsIGxlYWRpbmcgZGlnaXRzCiAgICAgICAgICAgKFwuKFswLTlhLWZBLUZdWzAtOWEtZkEtRl9dKik/KT8gICAjIG9wdGlvbmFsIGRlY2ltYWwgYW5kIGZyYWN0aW9uCiAgICAgICAgICAgW1BwXVsrLV0/WzAtOWEtZkEtRl0gICAgICAgICAgIyBSRVFVSVJFRCBleHBvbmVudCB3aXRoIGRpZ2l0CiAgICAgICAgICAgWzAtOWEtZkEtRl9dKikgICAgICAgICAgICAgICAgIyBvcHRpb25hbCBBZGRpdGlvbmFsIGV4cG9uZW50IGRpZ2l0cwoKICAgICAgICAgICAjIG9yIGhleCBpbnRlZ2VyCiAgICAgICAgICAgfChbeFhdWzAtOWEtZkEtRl9dKykKCiAgICAgICAgICAgIyBvciBvY3RhbCBmcmFjdGlvbgogICAgICAgICAgIHwoW29PXT9bMC03X10rICAgICAgICAgICMgc3RyaW5nIG9mIG9jdGFsIGRpZ2l0cwogICAgICAgICAgIChcLihbMC03XVswLTdfXSopPyk/ICAgICMgb3B0aW9uYWwgZGVjaW1hbCBhbmQgZnJhY3Rpb24KICAgICAgICAgICBbUHBdWystXT9bMC03XSAgICAgICAgICAjIFJFUVVJUkVEIGV4cG9uZW50LCBubyB1bmRlcnNjb3JlCiAgICAgICAgICAgWzAtN19dKikgICAgICAgICAgICAgICAgIyBBZGRpdGlvbmFsIGV4cG9uZW50IGRpZ2l0cyB3aXRoIHVuZGVyc2NvcmVzCgogICAgICAgICAgICMgb3Igb2N0YWwgaW50ZWdlcgogICAgICAgICAgIHwoW29PXT9bMC03X10rKSAgICAgICAgICMgc3RyaW5nIG9mIG9jdGFsIGRpZ2l0cwoKICAgICAgICAgICAjIG9yIGEgYmluYXJ5IGZsb2F0CiAgICAgICAgICAgfChbYkJdWzAxX10qICAgICAgICAgICAgIyAnYicgd2l0aCBzdHJpbmcgb2YgYmluYXJ5IGRpZ2l0cwogICAgICAgICAgIChcLihbMDFdWzAxX10qKT8pPyAgICAgICMgb3B0aW9uYWwgZGVjaW1hbCBhbmQgZnJhY3Rpb24KICAgICAgICAgICBbUHBdWystXT9bMDFdICAgICAgICAgICAjIFJlcXVpcmVkIGV4cG9uZW50IGluZGljYXRvciwgbm8gdW5kZXJzY29yZQogICAgICAgICAgIFswMV9dKikgICAgICAgICAgICAgICAgICMgYWRkaXRpb25hbCBleHBvbmVudCBiaXRzCgogICAgICAgICAgICMgb3IgYmluYXJ5IGludGVnZXIKICAgICAgICAgICB8KFtiQl1bMDFfXSspICAgICAgICAgICAjICdiJyB3aXRoIHN0cmluZyBvZiBiaW5hcnkgZGlnaXRzCgogICAgICAgICAgICl9Z3gKICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRwb3MgPSBwb3MoJGlucHV0X2xpbmUpOwogICAgICAgICAgICBteSAkbnVtYyA9ICRwb3MgLSAkcG9zX2JlZzsKICAgICAgICAgICAgJG51bWJlciA9IHN1YnN0ciggJGlucHV0X2xpbmUsICRwb3NfYmVnLCAkbnVtYyApOwogICAgICAgICAgICAkdHlwZSAgID0gJ24nOwogICAgICAgIH0KICAgIH0KCiAgICAjIGhhbmRsZSBkZWNpbWFsCiAgICBpZiAoICFkZWZpbmVkKCRudW1iZXIpICkgewogICAgICAgIHBvcygkaW5wdXRfbGluZSkgPSAkcG9zX2JlZzsKCiAgICAgICAgaWYgKCAkaW5wdXRfbGluZSA9fiAvXEcoWystXT9bXGRfXSooXC5bXGRfXSopPyhbRWVdWystXT8oXGQrKSk/KS9nICkgewogICAgICAgICAgICAkcG9zID0gcG9zKCRpbnB1dF9saW5lKTsKCiAgICAgICAgICAgICMgd2F0Y2ggb3V0IGZvciB0aGluZ3MgbGlrZSAwLi40MCB3aGljaCB3b3VsZCBnaXZlIDAuIGJ5IHRoaXM7CiAgICAgICAgICAgIGlmICggICAoIHN1YnN0ciggJGlucHV0X2xpbmUsICRwb3MgLSAxLCAxICkgZXEgJy4nICkKICAgICAgICAgICAgICAgICYmICggc3Vic3RyKCAkaW5wdXRfbGluZSwgJHBvcywgMSApIGVxICcuJyApICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJHBvcy0tOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG15ICRudW1jID0gJHBvcyAtICRwb3NfYmVnOwogICAgICAgICAgICAkbnVtYmVyID0gc3Vic3RyKCAkaW5wdXRfbGluZSwgJHBvc19iZWcsICRudW1jICk7CiAgICAgICAgICAgICR0eXBlICAgPSAnbic7CiAgICAgICAgfQogICAgfQoKICAgICMgZmlsdGVyIG91dCBub24tbnVtYmVycyBsaWtlIGUgKyAtIC4gZTIgIC5lMyArZTYKICAgICMgdGhlIHJ1bGU6IGF0IGxlYXN0IG9uZSBkaWdpdCwgYW5kIGFueSAnZScgbXVzdCBiZSBwcmVjZWRlZCBieSBhIGRpZ2l0CiAgICBpZiAoCiAgICAgICAgJG51bWJlciAhfiAvXGQvICAgICMgbm8gZGlnaXRzCiAgICAgICAgfHwgKCAgICRudW1iZXIgPX4gL14oLiopW2VFXS8KICAgICAgICAgICAgJiYgJDEgIX4gL1xkLyApICAgICMgb3Igbm8gZGlnaXRzIGJlZm9yZSB0aGUgJ2UnCiAgICAgICkKICAgIHsKICAgICAgICAkbnVtYmVyID0gdW5kZWY7CiAgICAgICAgJHR5cGUgICA9ICRpbnB1dF90eXBlOwogICAgICAgIHJldHVybiAoICRpLCAkdHlwZSwgJG51bWJlciApOwogICAgfQoKICAgICMgRm91bmQgYSBudW1iZXI7IG5vdyB3ZSBtdXN0IGNvbnZlcnQgYmFjayBmcm9tIGNoYXJhY3RlciBwb3NpdGlvbgogICAgIyB0byBwcmVfdG9rZW4gaW5kZXguIEFuIGVycm9yIGhlcmUgaW1wbGllcyB1c2VyIHN5bnRheCBlcnJvci4KICAgICMgQW4gZXhhbXBsZSB3b3VsZCBiZSBhbiBpbnZhbGlkIG9jdGFsIG51bWJlciBsaWtlICcwMDknLgogICAgbXkgJGVycm9yOwogICAgKCAkaSwgJGVycm9yICkgPQogICAgICBpbnZlcnNlX3ByZXRva2VuX21hcCggJGksICRwb3MsICRydG9rZW5fbWFwLCAkbWF4X3Rva2VuX2luZGV4ICk7CiAgICBpZiAoJGVycm9yKSB7ICRzZWxmLT53YXJuaW5nKCJQb3NzaWJseSBpbnZhbGlkIG51bWJlclxuIikgfQoKICAgIHJldHVybiAoICRpLCAkdHlwZSwgJG51bWJlciApOwp9ICMjIGVuZCBzdWIgc2Nhbl9udW1iZXJfZG8KCnN1YiBpbnZlcnNlX3ByZXRva2VuX21hcCB7CgogICAgIyBTdGFydGluZyB3aXRoIHRoZSBjdXJyZW50IHByZV90b2tlbiBpbmRleCAkaSwgc2NhbiBmb3J3YXJkIHVudGlsCiAgICAjIGZpbmRpbmcgdGhlIGluZGV4IG9mIHRoZSBuZXh0IHByZV90b2tlbiB3aG9zZSBwb3NpdGlvbiBpcyAkcG9zLgogICAgbXkgKCAkaSwgJHBvcywgJHJ0b2tlbl9tYXAsICRtYXhfdG9rZW5faW5kZXggKSA9IEBfOwogICAgbXkgJGVycm9yID0gMDsKCiAgICB3aGlsZSAoICsrJGkgPD0gJG1heF90b2tlbl9pbmRleCApIHsKCiAgICAgICAgaWYgKCAkcG9zIDw9ICRydG9rZW5fbWFwLT5bJGldICkgewoKICAgICAgICAgICAgIyBMZXQgdGhlIGNhbGxpbmcgcm91dGluZSBoYW5kbGUgZXJyb3JzIGluIHdoaWNoIHdlIGRvIG5vdAogICAgICAgICAgICAjIGxhbmQgb24gYSBwcmUtdG9rZW4gYm91bmRhcnkuICBJdCBjYW4gaGFwcGVuIGJ5IHJ1bm5pbmcKICAgICAgICAgICAgIyBwZXJsdGlkeSBvbiBzb21lIG5vbi1wZXJsIHNjcmlwdHMsIGZvciBleGFtcGxlLgogICAgICAgICAgICBpZiAoICRwb3MgPCAkcnRva2VuX21hcC0+WyRpXSApIHsgJGVycm9yID0gMSB9CiAgICAgICAgICAgICRpLS07CiAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgfQogICAgfSAjIyBlbmQgd2hpbGUgKCArKyRpIDw9ICRtYXhfdG9rZW5faW5kZXgpCiAgICByZXR1cm4gKCAkaSwgJGVycm9yICk7Cn0gIyMgZW5kIHN1YiBpbnZlcnNlX3ByZXRva2VuX21hcAoKc3ViIGZpbmRfaGVyZV9kb2MgewoKICAgIG15ICgKCiAgICAgICAgJHNlbGYsCgogICAgICAgICRleHBlY3RpbmcsCiAgICAgICAgJGksCiAgICAgICAgJHJ0b2tlbnMsCiAgICAgICAgJHJ0b2tlbl90eXBlLAogICAgICAgICRydG9rZW5fbWFwX3V1LAogICAgICAgICRtYXhfdG9rZW5faW5kZXgKCiAgICApID0gQF87CgogICAgIyBGaW5kIHRoZSB0YXJnZXQgb2YgYSBoZXJlIGRvY3VtZW50LCBpZiBhbnkKICAgICMgR2l2ZW46CiAgICAjICAgJGkgLSB0b2tlbiBpbmRleCBvZiB0aGUgc2Vjb25kIDwgb2YgPDwKICAgICMgICAoJGkgbXVzdCBiZSBsZXNzIHRoYW4gdGhlIGxhc3QgdG9rZW4gaW5kZXggaWYgdGhpcyBpcyBjYWxsZWQpCiAgICAjIFJldHVybjoKICAgICMgICAkZm91bmRfdGFyZ2V0ID0gMCBkaWRuJ3QgZmluZCB0YXJnZXQ7ID0xIGZvdW5kIHRhcmdldAogICAgIyAgIEhFUkVfVEFSR0VUIC0gdGhlIHRhcmdldCBzdHJpbmcgKG1heSBiZSBlbXB0eSBzdHJpbmcpCiAgICAjICAgJGkgLSB1bmNoYW5nZWQgaWYgbm90IGhlcmUgZG9jLAogICAgIyAgICBvciBpbmRleCBvZiB0aGUgbGFzdCB0b2tlbiBvZiB0aGUgaGVyZSB0YXJnZXQKICAgICMgICAkc2F3X2Vycm9yIC0gZmxhZyBub3RpbmcgdW5iYWxhbmNlZCBxdW90ZSBvbiBoZXJlIHRhcmdldAogICAgbXkgJGliZWcgICAgICAgICAgICAgICAgID0gJGk7CiAgICBteSAkZm91bmRfdGFyZ2V0ICAgICAgICAgPSAwOwogICAgbXkgJGhlcmVfZG9jX3RhcmdldCAgICAgID0gRU1QVFlfU1RSSU5HOwogICAgbXkgJGhlcmVfcXVvdGVfY2hhcmFjdGVyID0gRU1QVFlfU1RSSU5HOwogICAgbXkgJHNhd19lcnJvciAgICAgICAgICAgID0gMDsKICAgIG15ICggJG5leHRfbm9uYmxhbmtfdG9rZW4sICRpX25leHRfbm9uYmxhbmssICRuZXh0X3Rva2VuICk7CiAgICAkbmV4dF90b2tlbiA9ICRydG9rZW5zLT5bICRpICsgMSBdOwoKICAgICMgcGVybCBhbGxvd3MgYSBiYWNrc2xhc2ggYmVmb3JlIHRoZSB0YXJnZXQgc3RyaW5nIChoZXJlZG9jLnQpCiAgICBteSAkYmFja3NsYXNoID0gMDsKICAgIGlmICggJG5leHRfdG9rZW4gZXEgQkFDS1NMQVNIICkgewogICAgICAgICRiYWNrc2xhc2ggID0gMTsKICAgICAgICAkbmV4dF90b2tlbiA9ICRydG9rZW5zLT5bICRpICsgMiBdOwogICAgfQoKICAgICggJG5leHRfbm9uYmxhbmtfdG9rZW4sICRpX25leHRfbm9uYmxhbmsgKSA9CiAgICAgIGZpbmRfbmV4dF9ub25ibGFua190b2tlbl9vbl90aGlzX2xpbmUoICRpLCAkcnRva2VucywgJG1heF90b2tlbl9pbmRleCApOwoKICAgIGlmICggJG5leHRfbm9uYmxhbmtfdG9rZW4gPX4gL1tcJ1wiXGBdLyApIHsKCiAgICAgICAgbXkgJGluX3F1b3RlICAgID0gMTsKICAgICAgICBteSAkcXVvdGVfZGVwdGggPSAwOwogICAgICAgIG15ICRxdW90ZV9wb3MgICA9IDA7CiAgICAgICAgbXkgJHF1b3RlZF9zdHJpbmc7CgogICAgICAgICgKCiAgICAgICAgICAgICRpLAogICAgICAgICAgICAkaW5fcXVvdGUsCiAgICAgICAgICAgICRoZXJlX3F1b3RlX2NoYXJhY3RlciwKICAgICAgICAgICAgJHF1b3RlX3BvcywKICAgICAgICAgICAgJHF1b3RlX2RlcHRoLAogICAgICAgICAgICAkcXVvdGVkX3N0cmluZwogICAgICAgICAgKQogICAgICAgICAgPSAkc2VsZi0+Zm9sbG93X3F1b3RlZF9zdHJpbmcoCgogICAgICAgICAgICAkaV9uZXh0X25vbmJsYW5rLAogICAgICAgICAgICAkaW5fcXVvdGUsCiAgICAgICAgICAgICRydG9rZW5zLAogICAgICAgICAgICAkcnRva2VuX3R5cGUsCiAgICAgICAgICAgICRoZXJlX3F1b3RlX2NoYXJhY3RlciwKICAgICAgICAgICAgJHF1b3RlX3BvcywKICAgICAgICAgICAgJHF1b3RlX2RlcHRoLAogICAgICAgICAgICAkbWF4X3Rva2VuX2luZGV4CiAgICAgICAgICApOwoKICAgICAgICBpZiAoJGluX3F1b3RlKSB7ICAgICMgZGlkbid0IGZpbmQgZW5kIG9mIHF1b3RlLCBzbyBubyB0YXJnZXQgZm91bmQKICAgICAgICAgICAgJGkgPSAkaWJlZzsKICAgICAgICAgICAgaWYgKCAkZXhwZWN0aW5nID09IFRFUk0gKSB7CiAgICAgICAgICAgICAgICAkc2VsZi0+d2FybmluZygKIkRpZCBub3QgZmluZCBoZXJlLWRvYyBzdHJpbmcgdGVybWluYXRvciAoJGhlcmVfcXVvdGVfY2hhcmFjdGVyKSBiZWZvcmUgZW5kIG9mIGxpbmUgXG4iCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJHNhd19lcnJvciA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAjIGZvdW5kIGVuZGluZyBxdW90ZQogICAgICAgICAgICAkZm91bmRfdGFyZ2V0ID0gMTsKCiAgICAgICAgICAgIG15ICR0b2tqOwogICAgICAgICAgICBmb3JlYWNoIG15ICRqICggJGlfbmV4dF9ub25ibGFuayArIDEgLi4gJGkgLSAxICkgewogICAgICAgICAgICAgICAgJHRva2ogPSAkcnRva2Vucy0+WyRqXTsKCiAgICAgICAgICAgICAgICAjIHdlIGhhdmUgdG8gcmVtb3ZlIGFueSBiYWNrc2xhc2ggYmVmb3JlIHRoZSBxdW90ZSBjaGFyYWN0ZXIKICAgICAgICAgICAgICAgICMgc28gdGhhdCB0aGUgaGVyZS1kb2MtdGFyZ2V0IGV4YWN0bHkgbWF0Y2hlcyB0aGlzIHN0cmluZwogICAgICAgICAgICAgICAgbmV4dAogICAgICAgICAgICAgICAgICBpZiAoICR0b2tqIGVxICJcXCIKICAgICAgICAgICAgICAgICAgICAmJiAkaiA8ICRpIC0gMQogICAgICAgICAgICAgICAgICAgICYmICRydG9rZW5zLT5bICRqICsgMSBdIGVxICRoZXJlX3F1b3RlX2NoYXJhY3RlciApOwogICAgICAgICAgICAgICAgJGhlcmVfZG9jX3RhcmdldCAuPSAkdG9rajsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBlbHNpZiAoICggJG5leHRfdG9rZW4gPX4gL15ccyokLyApIGFuZCAoICRleHBlY3RpbmcgPT0gVEVSTSApICkgewogICAgICAgICRmb3VuZF90YXJnZXQgPSAxOwogICAgICAgICRzZWxmLT53cml0ZV9sb2dmaWxlX2VudHJ5KAogICAgICAgICAgICAiZm91bmQgYmxhbmsgaGVyZS10YXJnZXQgYWZ0ZXIgPDw7IHN1Z2dlc3QgdXNpbmcgXCJcIlxuIik7CiAgICAgICAgJGkgPSAkaWJlZzsKICAgIH0KICAgIGVsc2lmICggJG5leHRfdG9rZW4gPX4gL15cdy8gKSB7ICAgICMgc2ltcGxlIGJhcmV3b3JkIG9yIGludGVnZXIgYWZ0ZXIgPDwKCiAgICAgICAgbXkgJGhlcmVfZG9jX2V4cGVjdGVkOwogICAgICAgIGlmICggJGV4cGVjdGluZyA9PSBVTktOT1dOICkgewogICAgICAgICAgICAkaGVyZV9kb2NfZXhwZWN0ZWQgPSAkc2VsZi0+Z3Vlc3NfaWZfaGVyZV9kb2MoJG5leHRfdG9rZW4pOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJGhlcmVfZG9jX2V4cGVjdGVkID0gMTsKICAgICAgICB9CgogICAgICAgIGlmICgkaGVyZV9kb2NfZXhwZWN0ZWQpIHsKICAgICAgICAgICAgJGZvdW5kX3RhcmdldCAgICA9IDE7CiAgICAgICAgICAgICRoZXJlX2RvY190YXJnZXQgPSAkbmV4dF90b2tlbjsKICAgICAgICAgICAgJGkgICAgICAgICAgICAgICA9ICRpYmVnICsgMTsKICAgICAgICB9CgogICAgfQogICAgZWxzZSB7CgogICAgICAgIGlmICggJGV4cGVjdGluZyA9PSBURVJNICkgewogICAgICAgICAgICAkZm91bmRfdGFyZ2V0ID0gMTsKICAgICAgICAgICAgJHNlbGYtPndyaXRlX2xvZ2ZpbGVfZW50cnkoIk5vdGU6IGJhcmUgaGVyZS1kb2Mgb3BlcmF0b3IgPDxcbiIpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJGkgPSAkaWJlZzsKICAgICAgICB9CiAgICB9CgogICAgIyBwYXRjaCB0byBuZWdsZWN0IGFueSBwcmVwZW5kZWQgYmFja3NsYXNoCiAgICBpZiAoICRmb3VuZF90YXJnZXQgJiYgJGJhY2tzbGFzaCApIHsgJGkrKyB9CgogICAgcmV0dXJuICggJGZvdW5kX3RhcmdldCwgJGhlcmVfZG9jX3RhcmdldCwgJGhlcmVfcXVvdGVfY2hhcmFjdGVyLCAkaSwKICAgICAgICAkc2F3X2Vycm9yICk7Cn0gIyMgZW5kIHN1YiBmaW5kX2hlcmVfZG9jCgpzdWIgZG9fcXVvdGUgewoKICAgIG15ICgKCiAgICAgICAgJHNlbGYsCgogICAgICAgICRpLAogICAgICAgICRpbl9xdW90ZSwKICAgICAgICAkcXVvdGVfY2hhcmFjdGVyLAogICAgICAgICRxdW90ZV9wb3MsCiAgICAgICAgJHF1b3RlX2RlcHRoLAogICAgICAgICRxdW90ZWRfc3RyaW5nXzEsCiAgICAgICAgJHF1b3RlZF9zdHJpbmdfMiwKICAgICAgICAkcnRva2VucywKICAgICAgICAkcnRva2VuX3R5cGUsCiAgICAgICAgJHJ0b2tlbl9tYXBfdXUsCiAgICAgICAgJG1heF90b2tlbl9pbmRleCwKCiAgICApID0gQF87CgogICAgIyBGb2xsb3cgKG9yIGNvbnRpbnVlIGZvbGxvd2luZykgcXVvdGVkIHN0cmluZyhzKQogICAgIyAkaW5fcXVvdGUgPSByZXR1cm4gY29kZToKICAgICMgICAwIC0gb2ssIGZvdW5kIGVuZAogICAgIyAgIDEgLSBzdGlsbCBtdXN0IGZpbmQgZW5kIG9mIHF1b3RlIHdob3NlIHRhcmdldCBpcyAkcXVvdGVfY2hhcmFjdGVyCiAgICAjICAgMiAtIHN0aWxsIGxvb2tpbmcgZm9yIGVuZCBvZiBmaXJzdCBvZiB0d28gcXVvdGVzCiAgICAjCiAgICAjIFJldHVybnMgdXBkYXRlZCBzdHJpbmdzOgogICAgIyAgJHF1b3RlZF9zdHJpbmdfMSA9IHF1b3RlZCBzdHJpbmcgc2VlbiB3aGlsZSBpbl9xdW90ZT0xCiAgICAjICAkcXVvdGVkX3N0cmluZ18yID0gcXVvdGVkIHN0cmluZyBzZWVuIHdoaWxlIGluX3F1b3RlPTIKCiAgICBteSAkcXVvdGVkX3N0cmluZzsKICAgIGlmICggJGluX3F1b3RlID09IDIgKSB7ICAgICMgdHdvIHF1b3Rlcy9xdW90ZWRfc3RyaW5nXzFzIHRvIGZvbGxvdwogICAgICAgIG15ICRpYmVnID0gJGk7CiAgICAgICAgKAoKICAgICAgICAgICAgJGksCiAgICAgICAgICAgICRpbl9xdW90ZSwKICAgICAgICAgICAgJHF1b3RlX2NoYXJhY3RlciwKICAgICAgICAgICAgJHF1b3RlX3BvcywKICAgICAgICAgICAgJHF1b3RlX2RlcHRoLAogICAgICAgICAgICAkcXVvdGVkX3N0cmluZwogICAgICAgICAgKQogICAgICAgICAgPSAkc2VsZi0+Zm9sbG93X3F1b3RlZF9zdHJpbmcoCgogICAgICAgICAgICAkaWJlZywKICAgICAgICAgICAgJGluX3F1b3RlLAogICAgICAgICAgICAkcnRva2VucywKICAgICAgICAgICAgJHJ0b2tlbl90eXBlLAogICAgICAgICAgICAkcXVvdGVfY2hhcmFjdGVyLAogICAgICAgICAgICAkcXVvdGVfcG9zLAogICAgICAgICAgICAkcXVvdGVfZGVwdGgsCiAgICAgICAgICAgICRtYXhfdG9rZW5faW5kZXgKICAgICAgICAgICk7CiAgICAgICAgJHF1b3RlZF9zdHJpbmdfMiAuPSAkcXVvdGVkX3N0cmluZzsKICAgICAgICBpZiAoICRpbl9xdW90ZSA9PSAxICkgewogICAgICAgICAgICBpZiAoICRxdW90ZV9jaGFyYWN0ZXIgPX4gL1tce1xbXDxcKF0vICkgeyAkaSsrOyB9CiAgICAgICAgICAgICRxdW90ZV9jaGFyYWN0ZXIgPSBFTVBUWV9TVFJJTkc7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkcXVvdGVkX3N0cmluZ18yIC49ICJcbiI7CiAgICAgICAgfQogICAgfQoKICAgIGlmICggJGluX3F1b3RlID09IDEgKSB7ICAgICMgb25lIChtb3JlKSBxdW90ZSB0byBmb2xsb3cKICAgICAgICBteSAkaWJlZyA9ICRpOwogICAgICAgICgKCiAgICAgICAgICAgICRpLAogICAgICAgICAgICAkaW5fcXVvdGUsCiAgICAgICAgICAgICRxdW90ZV9jaGFyYWN0ZXIsCiAgICAgICAgICAgICRxdW90ZV9wb3MsCiAgICAgICAgICAgICRxdW90ZV9kZXB0aCwKICAgICAgICAgICAgJHF1b3RlZF9zdHJpbmcKICAgICAgICAgICkKICAgICAgICAgID0gJHNlbGYtPmZvbGxvd19xdW90ZWRfc3RyaW5nKAoKICAgICAgICAgICAgJGliZWcsCiAgICAgICAgICAgICRpbl9xdW90ZSwKICAgICAgICAgICAgJHJ0b2tlbnMsCiAgICAgICAgICAgICRydG9rZW5fdHlwZSwKICAgICAgICAgICAgJHF1b3RlX2NoYXJhY3RlciwKICAgICAgICAgICAgJHF1b3RlX3BvcywKICAgICAgICAgICAgJHF1b3RlX2RlcHRoLAogICAgICAgICAgICAkbWF4X3Rva2VuX2luZGV4CiAgICAgICAgICApOwogICAgICAgICRxdW90ZWRfc3RyaW5nXzEgLj0gJHF1b3RlZF9zdHJpbmc7CiAgICAgICAgaWYgKCAkaW5fcXVvdGUgPT0gMSApIHsKICAgICAgICAgICAgJHF1b3RlZF9zdHJpbmdfMSAuPSAiXG4iOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAoCgogICAgICAgICRpLAogICAgICAgICRpbl9xdW90ZSwKICAgICAgICAkcXVvdGVfY2hhcmFjdGVyLAogICAgICAgICRxdW90ZV9wb3MsCiAgICAgICAgJHF1b3RlX2RlcHRoLAogICAgICAgICRxdW90ZWRfc3RyaW5nXzEsCiAgICAgICAgJHF1b3RlZF9zdHJpbmdfMiwKCiAgICApOwp9ICMjIGVuZCBzdWIgZG9fcXVvdGUKCiMgU29tZSBwb3NzaWJsZSBub24td29yZCBxdW90ZSBkZWxpbWl0ZXJzLCBmb3IgcHJlbGltaW5hcnkgY2hlY2tpbmcKbXkgJWlzX3B1bmN0X2NoYXI7CgpCRUdJTiB7CgogICAgbXkgQHEgPSBxdyMgLyAiICcgeyB9ICggKSBbIF0gPCA+IDsgKyAtICogfCAlICEgeCB+ID0gPyA6IC4gXiAmICM7CiAgICBwdXNoIEBxLCAnIyc7CiAgICBwdXNoIEBxLCAnLCc7CiAgICBAaXNfcHVuY3RfY2hhcntAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwp9CgpzdWIgZm9sbG93X3F1b3RlZF9zdHJpbmcgewoKICAgIG15ICgKCiAgICAgICAgJHNlbGYsCgogICAgICAgICRpX2JlZywKICAgICAgICAkaW5fcXVvdGUsCiAgICAgICAgJHJ0b2tlbnMsCiAgICAgICAgJHJ0b2tlbl90eXBlLAogICAgICAgICRiZWdpbm5pbmdfdG9rLAogICAgICAgICRxdW90ZV9wb3MsCiAgICAgICAgJHF1b3RlX2RlcHRoLAogICAgICAgICRtYXhfdG9rZW5faW5kZXgsCgogICAgKSA9IEBfOwoKICAgICMgU2NhbiBmb3IgYSBzcGVjaWZpYyB0b2tlbiwgc2tpcHBpbmcgZXNjYXBlZCBjaGFyYWN0ZXJzLgogICAgIyBJZiB0aGUgcXVvdGUgY2hhcmFjdGVyIGlzIGJsYW5rLCB1c2UgdGhlIGZpcnN0IG5vbi1ibGFuayBjaGFyYWN0ZXIuCiAgICAjIEdpdmVuOgogICAgIyAgICRydG9rZW5zID0gcmVmZXJlbmNlIHRvIHRoZSBhcnJheSBvZiB0b2tlbnMKICAgICMgICAkaSA9IHRoZSB0b2tlbiBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIHRvIHNlYXJjaAogICAgIyAgICRpbl9xdW90ZSA9IG51bWJlciBvZiBxdW90ZWQgc3RyaW5ncyBiZWluZyBmb2xsb3dlZAogICAgIyAgICRiZWdpbm5pbmdfdG9rID0gdGhlIHN0YXJ0aW5nIHF1b3RlIGNoYXJhY3RlcgogICAgIyAgICRxdW90ZV9wb3MgPSBpbmRleCB0byBjaGVjayBuZXh0IGZvciBhbHBoYW51bWVyaWMgZGVsaW1pdGVyCiAgICAjIFJldHVybjoKICAgICMgICAkaSA9IHRoZSB0b2tlbiBpbmRleCBvZiB0aGUgZW5kaW5nIHF1b3RlIGNoYXJhY3RlcgogICAgIyAgICRpbl9xdW90ZSA9IGRlY3JlbWVudGVkIGlmIGZvdW5kIGVuZCwgdW5jaGFuZ2VkIGlmIG5vdAogICAgIyAgICRiZWdpbm5pbmdfdG9rID0gdGhlIHN0YXJ0aW5nIHF1b3RlIGNoYXJhY3RlcgogICAgIyAgICRxdW90ZV9wb3MgPSBpbmRleCB0byBjaGVjayBuZXh0IGZvciBhbHBoYW51bWVyaWMgZGVsaW1pdGVyCiAgICAjICAgJHF1b3RlX2RlcHRoID0gbmVzdGluZyBkZXB0aCwgc2luY2UgZGVsaW1pdGVycyAneyAoIFsgPCcgY2FuIGJlIG5lc3RlZC4KICAgICMgICAkcXVvdGVkX3N0cmluZyA9IHRoZSB0ZXh0IG9mIHRoZSBxdW90ZSAod2l0aG91dCBxdW90YXRpb24gdG9rZW5zKQogICAgbXkgKCAkdG9rLCAkZW5kX3RvayApOwogICAgbXkgJGkgICAgICAgICAgICAgPSAkaV9iZWcgLSAxOwogICAgbXkgJHF1b3RlZF9zdHJpbmcgPSBFTVBUWV9TVFJJTkc7CgogICAgMCAmJiBkbyB7CiAgICAgICAgcHJpbnQgeypTVERPVVR9CiJRVU9URSBlbnRlcmluZyB3aXRoIHF1b3RlX3BvcyA9ICRxdW90ZV9wb3MgaT0kaSBiZWdpbm5pbmdfdG9rID0kYmVnaW5uaW5nX3Rva1xuIjsKICAgIH07CgogICAgIyBmb3IgYSBub24tYmxhbmsgdG9rZW4sIGdldCB0aGUgY29ycmVzcG9uZGluZyBlbmQgdG9rZW4KICAgIGlmICgKICAgICAgICAkaXNfcHVuY3RfY2hhcnskYmVnaW5uaW5nX3Rva30KICAgICAgICB8fCAoIGxlbmd0aCgkYmVnaW5uaW5nX3RvaykKICAgICAgICAgICAgJiYgJGJlZ2lubmluZ190b2sgIX4gL15ccyskLyApCiAgICAgICkKICAgIHsKICAgICAgICAkZW5kX3RvayA9CiAgICAgICAgICAgICRtYXRjaGluZ19lbmRfdG9rZW57JGJlZ2lubmluZ190b2t9CiAgICAgICAgICA/ICRtYXRjaGluZ19lbmRfdG9rZW57JGJlZ2lubmluZ190b2t9CiAgICAgICAgICA6ICRiZWdpbm5pbmdfdG9rOwogICAgfQoKICAgICMgZm9yIGEgYmxhbmsgdG9rZW4sIGZpbmQgYW5kIHVzZSB0aGUgZmlyc3Qgbm9uLWJsYW5rIG9uZQogICAgZWxzZSB7CiAgICAgICAgbXkgJGFsbG93X3F1b3RlX2NvbW1lbnRzID0gKCAkaSA8IDAgKSA/IDEgOiAwOyAjIGk8MCBtZWFucyB3ZSBzYXcgYSA8Y3I+CgogICAgICAgIHdoaWxlICggJGkgPCAkbWF4X3Rva2VuX2luZGV4ICkgewogICAgICAgICAgICAkdG9rID0gJHJ0b2tlbnMtPlsgKyskaSBdOwoKICAgICAgICAgICAgaWYgKCAkcnRva2VuX3R5cGUtPlskaV0gbmUgJ2InICkgewoKICAgICAgICAgICAgICAgIGlmICggKCAkdG9rIGVxICcjJyApICYmICgkYWxsb3dfcXVvdGVfY29tbWVudHMpICkgewogICAgICAgICAgICAgICAgICAgICRpID0gJG1heF90b2tlbl9pbmRleDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICBpZiAoIGxlbmd0aCgkdG9rKSA+IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJHF1b3RlX3BvcyA8PSAwICkgeyAkcXVvdGVfcG9zID0gMSB9CiAgICAgICAgICAgICAgICAgICAgICAgICRiZWdpbm5pbmdfdG9rID0gc3Vic3RyKCAkdG9rLCAkcXVvdGVfcG9zIC0gMSwgMSApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGJlZ2lubmluZ190b2sgPSAkdG9rOwogICAgICAgICAgICAgICAgICAgICAgICAkcXVvdGVfcG9zICAgICA9IDA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRlbmRfdG9rID0KICAgICAgICAgICAgICAgICAgICAgICAgJG1hdGNoaW5nX2VuZF90b2tlbnskYmVnaW5uaW5nX3Rva30KICAgICAgICAgICAgICAgICAgICAgID8gJG1hdGNoaW5nX2VuZF90b2tlbnskYmVnaW5uaW5nX3Rva30KICAgICAgICAgICAgICAgICAgICAgIDogJGJlZ2lubmluZ190b2s7CiAgICAgICAgICAgICAgICAgICAgJHF1b3RlX2RlcHRoID0gMTsKICAgICAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJGFsbG93X3F1b3RlX2NvbW1lbnRzID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0gIyMgZW5kIHdoaWxlICggJGkgPCAkbWF4X3Rva2VuX2luZGV4KQogICAgfQoKICAgICMgVGhlcmUgYXJlIHR3byBkaWZmZXJlbnQgbG9vcHMgd2hpY2ggc2VhcmNoIGZvciB0aGUgZW5kaW5nIHF1b3RlCiAgICAjIGNoYXJhY3Rlci4gIEluIHRoZSByYXJlIGNhc2Ugb2YgYW4gYWxwaGFudW1lcmljIHF1b3RlIGRlbGltaXRlciwgd2UKICAgICMgaGF2ZSB0byBsb29rIHRocm91Z2ggYWxwaGFudW1lcmljIHRva2VucyBjaGFyYWN0ZXItYnktY2hhcmFjdGVyLCBzaW5jZQogICAgIyB0aGUgcHJlLXRva2VuaXphdGlvbiBwcm9jZXNzIGNvbWJpbmVzIG11bHRpcGxlIGFscGhhbnVtZXJpYwogICAgIyBjaGFyYWN0ZXJzLCB3aGVyZWFzIGZvciBhIG5vbi1hbHBoYW51bWVyaWMgZGVsaW1pdGVyLCBvbmx5IHRva2VucyBvZgogICAgIyBsZW5ndGggMSBjYW4gbWF0Y2guCgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMgQ2FzZSAxIChyYXJlKTogbG9vcCBmb3IgY2FzZSBvZiBhbHBoYW51bWVyaWMgcXVvdGUgZGVsaW1pdGVyLi4KICAgICMgInF1b3RlX3BvcyIgaXMgdGhlIHBvc2l0aW9uIHRoZSBjdXJyZW50IHdvcmQgdG8gYmVnaW4gc2VhcmNoaW5nCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgaWYgKCAhJGlzX3B1bmN0X2NoYXJ7JGJlZ2lubmluZ190b2t9ICYmICRiZWdpbm5pbmdfdG9rID1+IC9cdy8gKSB7CgogICAgICAgICMgTm90ZSB0aGlzIGJlY2F1c2UgaXQgaXMgbm90IHJlY29tbWVuZGVkIHByYWN0aWNlIGV4Y2VwdAogICAgICAgICMgZm9yIG9iZnVzY2F0ZWQgcGVybCBjb250ZXN0cwogICAgICAgIGlmICggJGluX3F1b3RlID09IDEgKSB7CiAgICAgICAgICAgICRzZWxmLT53cml0ZV9sb2dmaWxlX2VudHJ5KAogICAgICAgICAgICAgICAgIk5vdGU6IGFscGhhbnVtZXJpYyBxdW90ZSBkZWxpbWl0ZXIgKCRiZWdpbm5pbmdfdG9rKSBcbiIpOwogICAgICAgIH0KCiAgICAgICAgIyBOb3RlOiBjaGFuZ2VkIDwgdG8gPD0gaGVyZSB0byBmaXggYzEwOS4gUmVseWluZyBvbiBleHRyYSBlbmQgYmxhbmtzLgogICAgICAgIHdoaWxlICggJGkgPD0gJG1heF90b2tlbl9pbmRleCApIHsKCiAgICAgICAgICAgIGlmICggJHF1b3RlX3BvcyA9PSAwIHx8ICggJGkgPCAwICkgKSB7CiAgICAgICAgICAgICAgICAkdG9rID0gJHJ0b2tlbnMtPlsgKyskaSBdOwoKICAgICAgICAgICAgICAgIGlmICggJHRvayBlcSBCQUNLU0xBU0ggKSB7CgogICAgICAgICAgICAgICAgICAgICMgcmV0YWluIGJhY2tzbGFzaCB1bmxlc3MgaXQgaGlkZXMgdGhlIGVuZCB0b2tlbgogICAgICAgICAgICAgICAgICAgICRxdW90ZWRfc3RyaW5nIC49ICR0b2sKICAgICAgICAgICAgICAgICAgICAgIHVubGVzcyAoICRydG9rZW5zLT5bICRpICsgMSBdIGVxICRlbmRfdG9rICk7CiAgICAgICAgICAgICAgICAgICAgJHF1b3RlX3BvcysrOwogICAgICAgICAgICAgICAgICAgIGxhc3QgaWYgKCAkaSA+PSAkbWF4X3Rva2VuX2luZGV4ICk7CiAgICAgICAgICAgICAgICAgICAgJHRvayA9ICRydG9rZW5zLT5bICsrJGkgXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBteSAkb2xkX3BvcyA9ICRxdW90ZV9wb3M7CgogICAgICAgICAgICAkcXVvdGVfcG9zID0gMSArIGluZGV4KCAkdG9rLCAkZW5kX3RvaywgJHF1b3RlX3BvcyApOwoKICAgICAgICAgICAgaWYgKCAkcXVvdGVfcG9zID4gMCApIHsKCiAgICAgICAgICAgICAgICAkcXVvdGVkX3N0cmluZyAuPQogICAgICAgICAgICAgICAgICBzdWJzdHIoICR0b2ssICRvbGRfcG9zLCAkcXVvdGVfcG9zIC0gJG9sZF9wb3MgLSAxICk7CgogICAgICAgICAgICAgICAgIyBOT1RFOiBhbnkgcXVvdGUgbW9kaWZpZXJzIHdpbGwgYmUgYXQgdGhlIGVuZCBvZiAnJHRvaycuIElmIHdlCiAgICAgICAgICAgICAgICAjIHdhbnRlZCB0byBjaGVjayB0aGVtLCB0aGlzIGlzIHRoZSBwbGFjZSB0byBnZXQgdGhlbS4gIEJ1dAogICAgICAgICAgICAgICAgIyB0aGlzIHF1b3RlIGZvcm0gaXMgcmFyZWx5IHVzZWQgaW4gcHJhY3RpY2UsIHNvIGl0IGlzbid0CiAgICAgICAgICAgICAgICAjIHdvcnRod2hpbGUuCgogICAgICAgICAgICAgICAgJHF1b3RlX2RlcHRoLS07CgogICAgICAgICAgICAgICAgaWYgKCAkcXVvdGVfZGVwdGggPT0gMCApIHsKICAgICAgICAgICAgICAgICAgICAkaW5fcXVvdGUtLTsKICAgICAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCAkb2xkX3BvcyA8PSBsZW5ndGgoJHRvaykgKSB7CiAgICAgICAgICAgICAgICAgICAgJHF1b3RlZF9zdHJpbmcgLj0gc3Vic3RyKCAkdG9rLCAkb2xkX3BvcyApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSAjIyBlbmQgd2hpbGUgKCAkaSA8PSAkbWF4X3Rva2VuX2luZGV4KQogICAgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBDYXNlIDIgKG5vcm1hbCk6IGxvb3AgZm9yIGNhc2Ugb2YgYSBub24tYWxwaGFudW1lcmljIHF1b3RlIGRlbGltaXRlci4uCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGVsc2UgewoKICAgICAgICB3aGlsZSAoICRpIDwgJG1heF90b2tlbl9pbmRleCApIHsKICAgICAgICAgICAgJHRvayA9ICRydG9rZW5zLT5bICsrJGkgXTsKCiAgICAgICAgICAgIGlmICggJHRvayBlcSAkZW5kX3RvayApIHsKICAgICAgICAgICAgICAgICRxdW90ZV9kZXB0aC0tOwoKICAgICAgICAgICAgICAgIGlmICggJHF1b3RlX2RlcHRoID09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgJGluX3F1b3RlLS07CiAgICAgICAgICAgICAgICAgICAgbGFzdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICR0b2sgZXEgJGJlZ2lubmluZ190b2sgKSB7CiAgICAgICAgICAgICAgICAkcXVvdGVfZGVwdGgrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICR0b2sgZXEgQkFDS1NMQVNIICkgewoKICAgICAgICAgICAgICAgICMgcmV0YWluIGJhY2tzbGFzaCB1bmxlc3MgaXQgaGlkZXMgdGhlIGJlZ2lubmluZyBvciBlbmQgdG9rZW4KICAgICAgICAgICAgICAgICR0b2sgPSAkcnRva2Vucy0+WyArKyRpIF07CiAgICAgICAgICAgICAgICAkcXVvdGVkX3N0cmluZyAuPSBCQUNLU0xBU0gKICAgICAgICAgICAgICAgICAgaWYgKCAkdG9rIG5lICRlbmRfdG9rICYmICR0b2sgbmUgJGJlZ2lubmluZ190b2sgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICMjIG5vdGhpbmcgc3BlY2lhbAogICAgICAgICAgICB9CiAgICAgICAgICAgICRxdW90ZWRfc3RyaW5nIC49ICR0b2s7CiAgICAgICAgfSAjIyBlbmQgd2hpbGUgKCAkaSA8ICRtYXhfdG9rZW5faW5kZXgpCiAgICB9CiAgICBpZiAoICRpID4gJG1heF90b2tlbl9pbmRleCApIHsgJGkgPSAkbWF4X3Rva2VuX2luZGV4IH0KICAgIHJldHVybiAoCgogICAgICAgICRpLAogICAgICAgICRpbl9xdW90ZSwKICAgICAgICAkYmVnaW5uaW5nX3RvaywKICAgICAgICAkcXVvdGVfcG9zLAogICAgICAgICRxdW90ZV9kZXB0aCwKICAgICAgICAkcXVvdGVkX3N0cmluZywKCiAgICApOwp9ICMjIGVuZCBzdWIgZm9sbG93X3F1b3RlZF9zdHJpbmcKCnN1YiBpbmRpY2F0ZV9lcnJvciB7CiAgICBteSAoICRzZWxmLCAkbXNnLCAkbGluZV9udW1iZXIsICRpbnB1dF9saW5lLCAkcG9zLCAkY2FyZXQgKSA9IEBfOwoKICAgICMgd3JpdGUgaW5wdXQgbGluZSBhbmQgbGluZSB3aXRoIGNhcmF0J3Mgc2hvd2luZyB3aGVyZSBlcnJvciB3YXMgZGV0ZWN0ZWQKICAgICRzZWxmLT5pbnRlcnJ1cHRfbG9nZmlsZSgpOwogICAgJHNlbGYtPndhcm5pbmcoJG1zZyk7CiAgICAkc2VsZi0+d3JpdGVfZXJyb3JfaW5kaWNhdG9yX3BhaXIoICRsaW5lX251bWJlciwgJGlucHV0X2xpbmUsICRwb3MsCiAgICAgICAgJGNhcmV0ICk7CiAgICAkc2VsZi0+cmVzdW1lX2xvZ2ZpbGUoKTsKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGluZGljYXRlX2Vycm9yCgpzdWIgd3JpdGVfZXJyb3JfaW5kaWNhdG9yX3BhaXIgewogICAgbXkgKCAkc2VsZiwgJGxpbmVfbnVtYmVyLCAkaW5wdXRfbGluZSwgJHBvcywgJGNhcmV0ICkgPSBAXzsKICAgIG15ICggJG9mZnNldCwgJG51bWJlcmVkX2xpbmUsICR1bmRlcmxpbmUgKSA9CiAgICAgIG1ha2VfbnVtYmVyZWRfbGluZSggJGxpbmVfbnVtYmVyLCAkaW5wdXRfbGluZSwgJHBvcyApOwogICAgJHVuZGVybGluZSA9IHdyaXRlX29uX3VuZGVybGluZSggJHVuZGVybGluZSwgJHBvcyAtICRvZmZzZXQsICRjYXJldCApOwogICAgJHNlbGYtPndhcm5pbmcoICRudW1iZXJlZF9saW5lIC4gIlxuIiApOwogICAgJHVuZGVybGluZSA9fiBzL1xzKyQvLzsKICAgICRzZWxmLT53YXJuaW5nKCAkdW5kZXJsaW5lIC4gIlxuIiApOwogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgd3JpdGVfZXJyb3JfaW5kaWNhdG9yX3BhaXIKCnN1YiBtYWtlX251bWJlcmVkX2xpbmUgewoKICAgIG15ICggJGxpbmVubywgJHN0ciwgJHBvcyApID0gQF87CgogICAgIyAgR2l2ZW46CiAgICAjICAgICAkbGluZW5vPWxpbmUgbnVtYmVyCiAgICAjICAgICAkc3RyID0gYW4gaW5wdXQgbGluZQogICAgIyAgICAgJHBvcyA9IGNoYXJhY3RlciBwb3NpdGlvbiBvZiBpbnRlcmVzdAogICAgIyBDcmVhdGUgYSBzdHJpbmcgbm90IGxvbmdlciB0aGFuIDgwIGNoYXJhY3RlcnMgb2YgdGhlIGZvcm06CiAgICAjICAgICAkbGluZW5vOiBzdWJfc3RyaW5nCiAgICAjIHN1Y2ggdGhhdCB0aGUgc3ViX3N0cmluZyBvZiAkc3RyIGNvbnRhaW5zIHRoZSBwb3NpdGlvbiBvZiBpbnRlcmVzdAogICAgIwogICAgIyAgSGVyZSBpcyBhbiBleGFtcGxlIG9mIHdoYXQgd2Ugd2FudCwgaW4gdGhpcyBjYXNlIHdlIGFkZCB0cmFpbGluZwogICAgIyAgJy4uLicgYmVjYXVzZSB0aGUgbGluZSBpcyBsb25nLgogICAgIwogICAgIyAyOiAoT25lIG9mIFFBTUwgMi4wJ3MgYXV0aG9ycyBpcyBhIG1lbWJlciBvZiB0aGUgV29ybGQgV2lkZSBXZWIgQ29uIC4uLgogICAgIwogICAgIyAgSGVyZSBpcyBhbm90aGVyIGV4YW1wbGUsIHRoaXMgdGltZSBpbiB3aGljaCB3ZSB1c2VkIGxlYWRpbmcgJy4uLicKICAgICMgIGJlY2F1c2Ugb2YgZXhjZXNzaXZlIGxlbmd0aDoKICAgICMKICAgICMgMjogLi4uIGVyIG9mIHRoZSBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtJ3MKICAgICMKICAgICMgIGlucHV0IHBhcmFtZXRlcnMgYXJlOgogICAgIyAgICRsaW5lbm8gPSBsaW5lIG51bWJlcgogICAgIyAgICRzdHIgPSB0aGUgdGV4dCBvZiB0aGUgbGluZQogICAgIyAgICRwb3MgPSBwb3NpdGlvbiBvZiBpbnRlcmVzdCAodGhlIGVycm9yKSA6IDAgPSBmaXJzdCBjaGFyYWN0ZXIKICAgICMKICAgICMgICBXZSByZXR1cm4gOgogICAgIyAgICAgLSAkb2Zmc2V0ID0gYW4gb2Zmc2V0IHdoaWNoIGNvcnJlY3RzIHRoZSBwb3NpdGlvbiBpbiBjYXNlIHdlIG9ubHkKICAgICMgICAgICAgZGlzcGxheSBwYXJ0IG9mIGEgbGluZSwgc3VjaCB0aGF0ICRwb3MtJG9mZnNldCBpcyB0aGUgZWZmZWN0aXZlCiAgICAjICAgICAgIHBvc2l0aW9uIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBkaXNwbGF5ZWQgbGluZS4KICAgICMgICAgIC0gJG51bWJlcmVkX2xpbmUgPSB0aGUgbnVtYmVyZWQgbGluZSBhcyBhYm92ZSwKICAgICMgICAgIC0gJHVuZGVybGluZSA9IGEgYmxhbmsgJ3VuZGVybGluZScgd2hpY2ggaXMgYWxsIHNwYWNlcyB3aXRoIHRoZSBzYW1lCiAgICAjICAgICAgIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFzIHRoZSBudW1iZXJlZCBsaW5lLgoKICAgIG15ICRvZmZzZXQgPSAoICRwb3MgPCA2MCApID8gMCA6ICRwb3MgLSA0MDsKICAgIG15ICRleGNlc3MgPSBsZW5ndGgoJHN0cikgLSAkb2Zmc2V0IC0gNjg7CiAgICBteSAkbnVtYyAgID0gKCAkZXhjZXNzID4gMCApID8gNjggOiB1bmRlZjsKCiAgICBpZiAoIGRlZmluZWQoJG51bWMpICkgewogICAgICAgIGlmICggJG9mZnNldCA9PSAwICkgewogICAgICAgICAgICAkc3RyID0gc3Vic3RyKCAkc3RyLCAkb2Zmc2V0LCAkbnVtYyAtIDQgKSAuICIgLi4uIjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRzdHIgPSAiLi4uICIgLiBzdWJzdHIoICRzdHIsICRvZmZzZXQgKyA0LCAkbnVtYyAtIDQgKSAuICIgLi4uIjsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgaWYgKCAkb2Zmc2V0ID09IDAgKSB7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkc3RyID0gIi4uLiAiIC4gc3Vic3RyKCAkc3RyLCAkb2Zmc2V0ICsgNCApOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkbnVtYmVyZWRfbGluZSA9IHNwcmludGYoICIlZDogIiwgJGxpbmVubyApOwogICAgJG9mZnNldCAtPSBsZW5ndGgoJG51bWJlcmVkX2xpbmUpOwogICAgJG51bWJlcmVkX2xpbmUgLj0gJHN0cjsKICAgIG15ICR1bmRlcmxpbmUgPSBTUEFDRSB4IGxlbmd0aCgkbnVtYmVyZWRfbGluZSk7CiAgICByZXR1cm4gKCAkb2Zmc2V0LCAkbnVtYmVyZWRfbGluZSwgJHVuZGVybGluZSApOwp9ICMjIGVuZCBzdWIgbWFrZV9udW1iZXJlZF9saW5lCgpzdWIgd3JpdGVfb25fdW5kZXJsaW5lIHsKCiAgICBteSAoICR1bmRlcmxpbmUsICRwb3MsICRwb3NfY2hyICkgPSBAXzsKCiAgICAjIFRoZSAidW5kZXJsaW5lIiBpcyBhIHN0cmluZyB0aGF0IHNob3dzIHdoZXJlIGFuIGVycm9yIGlzOyBpdCBzdGFydHMKICAgICMgb3V0IGFzIGEgc3RyaW5nIG9mIGJsYW5rcyB3aXRoIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgbnVtYmVyZWQgbGluZSBvZgogICAgIyBjb2RlIGFib3ZlIGl0LCBhbmQgd2UgaGF2ZSB0byBhZGQgbWFya2luZyB0byBzaG93IHdoZXJlIGFuIGVycm9yIGlzLgogICAgIyBJbiB0aGUgZXhhbXBsZSBiZWxvdywgd2Ugd2FudCB0byB3cml0ZSB0aGUgc3RyaW5nICctLV4nIGp1c3QgYmVsb3cKICAgICMgdGhlIGxpbmUgb2YgYmFkIGNvZGU6CiAgICAjCiAgICAjIDI6IChPbmUgb2YgUUFNTCAyLjAncyBhdXRob3JzIGlzIGEgbWVtYmVyIG9mIHRoZSBXb3JsZCBXaWRlIFdlYiBDb24gLi4uCiAgICAjICAgICAgICAgICAgICAgICAtLS1eCiAgICAjIFdlIGFyZSBnaXZlbiB0aGUgY3VycmVudCB1bmRlcmxpbmUgc3RyaW5nLCBwbHVzIGEgcG9zaXRpb24gYW5kIGEKICAgICMgc3RyaW5nIHRvIHdyaXRlIG9uIGl0LgogICAgIwogICAgIyBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgdGhlcmUgd2lsbCBiZSAyIGNhbGxzIHRvIGRvIHRoaXM6CiAgICAjIEZpcnN0IGNhbGw6ICAkcG9zPTE5LCBwb3NfY2hyPV4KICAgICMgU2Vjb25kIGNhbGw6ICRwb3M9MTYsIHBvc19jaHI9LS0tCiAgICAjCiAgICAjIFRoaXMgaXMgYSB0cml2aWFsIHRoaW5nIHRvIGRvIHdpdGggc3Vic3RyLCBidXQgdGhlcmUgaXMgc29tZQogICAgIyBjaGVja2luZyB0byBkby4KCiAgICAjIGNoZWNrIGZvciBlcnJvci4uc2hvdWxkbid0IGhhcHBlbgogICAgaWYgKCAkcG9zIDwgMCB8fCAkcG9zID4gbGVuZ3RoKCR1bmRlcmxpbmUpICkgewogICAgICAgIHJldHVybiAkdW5kZXJsaW5lOwogICAgfQogICAgbXkgJGV4Y2VzcyA9IGxlbmd0aCgkcG9zX2NocikgKyAkcG9zIC0gbGVuZ3RoKCR1bmRlcmxpbmUpOwogICAgaWYgKCAkZXhjZXNzID4gMCApIHsKICAgICAgICAkcG9zX2NociA9IHN1YnN0ciggJHBvc19jaHIsIDAsIGxlbmd0aCgkcG9zX2NocikgLSAkZXhjZXNzICk7CiAgICB9CiAgICBzdWJzdHIoICR1bmRlcmxpbmUsICRwb3MsIGxlbmd0aCgkcG9zX2NociksICRwb3NfY2hyICk7CiAgICByZXR1cm4gKCR1bmRlcmxpbmUpOwp9ICMjIGVuZCBzdWIgd3JpdGVfb25fdW5kZXJsaW5lCgpzdWIgcHJlX3Rva2VuaXplIHsKCiAgICBteSAoICRzdHIsICgkbWF4X3Rva2Vuc193YW50ZWQpICkgPSBAXzsKCiAgICAjIElucHV0IHBhcmFtZXRlcnM6CiAgICAjICAkc3RyID0gc3RyaW5nIHRvIGJlIHBhcnNlZAogICAgIyAgJG1heF90b2tlbnNfd2FudGVkID4gMCAgdG8gc3RvcCBvbiByZWFjaGluZyB0aGlzIG1hbnkgdG9rZW5zLgogICAgIyAgICAgICAgICAgICAgICAgICAgID0gdW5kZWYgb3IgMCBtZWFucyBnZXQgYWxsIHRva2VucwoKICAgICMgQnJlYWsgYSBzdHJpbmcsICRzdHIsIGludG8gYSBzZXF1ZW5jZSBvZiBwcmVsaW1pbmFyeSB0b2tlbnMgKHByZS10b2tlbnMpLgogICAgIyBXZSBsb29rIGZvciB0aGVzZSB0eXBlcyBvZiB0b2tlbnM6CiAgICAjICAgd29yZHMgICAgICAgKHR5cGU9J3cnKSwgICAgICAgICAgICAgICBleGFtcGxlOiAnbWF4X3Rva2Vuc193YW50ZWQnCiAgICAjICAgZGlnaXRzICAgICAgKHR5cGUgPSAnZCcpLCAgICAgICAgICAgICBleGFtcGxlOiAnMDc1NScKICAgICMgICB3aGl0ZXNwYWNlICAodHlwZSA9ICdiJyksICAgICAgICAgICAgIGV4YW1wbGU6ICcgICAnCiAgICAjICAgc2luZ2xlIGNoYXJhY3RlciBwdW5jdCAodHlwZSA9IGNoYXIpICBleGFtcGxlOiAnPScKCiAgICAjIExhdGVyIG9wZXJhdGlvbnMgd2lsbCBjb21iaW5lIG9uZSBvciBtb3JlIG9mIHRoZXNlIHByZS10b2tlbnMgaW50byBmaW5hbAogICAgIyB0b2tlbnMuICBXZSBjYW5ub3QgZG8gYmV0dGVyIHRoYW4gdGhpcyB5ZXQgYmVjYXVzZSB3ZSBtaWdodCBiZSBpbiBhCiAgICAjIHF1b3RlZCBzdHJpbmcgb3IgcGF0dGVybi4KCiAgICAjIEFuIGFkdmFudGFnZSBvZiBkb2luZyB0aGlzIHByZS10b2tlbml6YXRpb24gc3RlcCBpcyB0aGF0IGl0IGtlZXBzIGFsbW9zdAogICAgIyBhbGwgb2YgdGhlIHJlZ2V4IHBhcnNpbmcgdmVyeSBzaW1wbGUgYW5kIGxvY2FsaXplZCByaWdodCBoZXJlLiAgQQogICAgIyBkaXNhZHZhbnRhZ2UgaXMgdGhhdCBpbiBzb21lIGV4dHJlbWVseSByYXJlIGluc3RhbmNlcyB3ZSB3aWxsIGhhdmUgdG8gZ28KICAgICMgYmFjayBhbmQgc3BsaXQgYSBwcmUtdG9rZW4uCgogICAgIyBSZXR1cm4gcGFyYW1ldGVyczoKICAgIG15IEB0b2tlbnMgICAgPSAoKTsgICAgICMgYXJyYXkgb2YgdGhlIHRva2VucyB0aGVtc2VsdmVzCiAgICBteSBAdG9rZW5fbWFwID0gKDApOyAgICAjIHN0cmluZyBwb3NpdGlvbiBvZiBzdGFydCBvZiBlYWNoIHRva2VuCiAgICBteSBAdHlwZSAgICAgID0gKCk7ICAgICAjICdiJz13aGl0ZXNwYWNlLCAnZCc9ZGlnaXRzLCAndyc9YWxwaGEsIG9yIHB1bmN0CgogICAgaWYgKCAhJG1heF90b2tlbnNfd2FudGVkICkgeyAkbWF4X3Rva2Vuc193YW50ZWQgPSAtMSB9CgogICAgd2hpbGUgKCAkbWF4X3Rva2Vuc193YW50ZWQtLSApIHsKCiAgICAgICAgaWYgKAogICAgICAgICAgICAkc3RyID1+IG17CiAgICAgICAgICAgICBcRygKICAgICAgICAgICAgICAgKFxzKykgIyAgICAgdHlwZSAnYicgID0gd2hpdGVzcGFjZSAtIHRoaXMgbXVzdCBjb21lIGJlZm9yZSBcVwogICAgICAgICAgICAgfCAoXFcpICAjICBvciB0eXBlPWNoYXIgPSBzaW5nbGUtY2hhcmFjdGVyLCBub24td2hpdGVzcGFjZSBwdW5jdAogICAgICAgICAgICAgfCAoXGQrKSAjICBvciB0eXBlICdkJyAgPSBzZXF1ZW5jZSBvZiBkaWdpdHMgLSBtdXN0IGNvbWUgYmVmb3JlIFx3CiAgICAgICAgICAgICB8IChcdyspICMgIG9yIHR5cGUgJ3cnICA9IHdvcmRzIG5vdCBzdGFydGluZyB3aXRoIGEgZGlnaXQKICAgICAgICAgICAgICkKICAgICAgICAgICAgfWdjeAogICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgcHVzaCBAdG9rZW5zLCAkMTsKICAgICAgICAgICAgcHVzaCBAdHlwZSwKICAgICAgICAgICAgICBkZWZpbmVkKCQyKSA/ICdiJyA6IGRlZmluZWQoJDMpID8gJDEgOiBkZWZpbmVkKCQ0KSA/ICdkJyA6ICd3JzsKICAgICAgICAgICAgcHVzaCBAdG9rZW5fbWFwLCBwb3MoJHN0cik7CiAgICAgICAgfQoKICAgICAgICAjIHRoYXQncyBhbGwuLgogICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm4gKCBcQHRva2VucywgXEB0b2tlbl9tYXAsIFxAdHlwZSApOwogICAgICAgIH0KICAgIH0gIyMgZW5kIHdoaWxlICggJG1heF90b2tlbnNfd2FudGVkLi4uKQoKICAgIHJldHVybiAoIFxAdG9rZW5zLCBcQHRva2VuX21hcCwgXEB0eXBlICk7Cn0gIyMgZW5kIHN1YiBwcmVfdG9rZW5pemUKCnN1YiBzaG93X3Rva2VucyB7CgogICAgIyBUaGlzIGlzIGFuIHVuY2FsbGVkIGRlYnVnIHJvdXRpbmUsIHNhdmVkIGZvciByZWZlcmVuY2UKICAgIG15ICggJHJ0b2tlbnMsICRydG9rZW5fbWFwICkgPSBAXzsKICAgIG15ICRudW0gPSBzY2FsYXIoIEB7JHJ0b2tlbnN9ICk7CgogICAgZm9yZWFjaCBteSAkaSAoIDAgLi4gJG51bSAtIDEgKSB7CiAgICAgICAgbXkgJGxlbiA9IGxlbmd0aCggJHJ0b2tlbnMtPlskaV0gKTsKICAgICAgICBwcmludCB7KlNURE9VVH0gIiRpOiRsZW46JHJ0b2tlbl9tYXAtPlskaV06JHJ0b2tlbnMtPlskaV06XG4iOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgc2hvd190b2tlbnMKCnN1YiBkdW1wX3Rva2VuX3R5cGVzIHsKICAgIG15ICggJGNsYXNzLCAkZmggKSA9IEBfOwoKICAgICMgVGhpcyBzaG91bGQgYmUgdGhlIGxhdGVzdCBsaXN0IG9mIHRva2VuIHR5cGVzIGluIHVzZQogICAgIyBhZGRpbmcgTkVXX1RPS0VOUzogYWRkIGEgY29tbWVudCBoZXJlCiAgICAkZmgtPnByaW50KDw8J0VORF9PRl9MSVNUJyk7CgpIZXJlIGlzIGEgbGlzdCBvZiB0aGUgdG9rZW4gdHlwZXMgY3VycmVudGx5IHVzZWQgZm9yIGxpbmVzIG9mIHR5cGUgJ0NPREUnLgpGb3IgdGhlIGZvbGxvd2luZyB0b2tlbnMsIHRoZSAidHlwZSIgb2YgYSB0b2tlbiBpcyBqdXN0IHRoZSB0b2tlbiBpdHNlbGYuCgouLiA6OiA8PCA+PiAqKiAmJiAuLiB8fCAvLyAtPiA9PiArPSAtPSAuPSAlPSAmPSB8PSBePSAqPSA8PgooICkgPD0gPj0gPT0gPX4gIX4gIT0gKysgLS0gLz0geD0KLi4uICoqPSA8PD0gPj49ICYmPSB8fD0gLy89IDw9PgosICsgLSAvICogfCAlICEgeCB+ID0gXCA/IDogLiA8ID4gXiAmIF5eCgpUaGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgdG9rZW4gdHlwZXMgYXJlIGRlZmluZWQ6CgogdHlwZSAgICBtZWFuaW5nCiAgICBiICAgIGJsYW5rICh3aGl0ZSBzcGFjZSkKICAgIHsgICAgaW5kZW50OiBvcGVuaW5nIHN0cnVjdHVyYWwgY3VybHkgYnJhY2Ugb3Igc3F1YXJlIGJyYWNrZXQgb3IgcGFyZW4KICAgICAgICAgKGNvZGUgYmxvY2ssIGFub255bW91cyBoYXNoIHJlZmVyZW5jZSwgb3IgYW5vbnltb3VzIGFycmF5IHJlZmVyZW5jZSkKICAgIH0gICAgb3V0ZGVudDogcmlnaHQgc3RydWN0dXJhbCBjdXJseSBicmFjZSBvciBzcXVhcmUgYnJhY2tldCBvciBwYXJlbgogICAgWyAgICBsZWZ0IG5vbi1zdHJ1Y3R1cmFsIHNxdWFyZSBicmFja2V0IChlbmNsb3NpbmcgYW4gYXJyYXkgaW5kZXgpCiAgICBdICAgIHJpZ2h0IG5vbi1zdHJ1Y3R1cmFsIHNxdWFyZSBicmFja2V0CiAgICAoICAgIGxlZnQgbm9uLXN0cnVjdHVyYWwgcGFyZW4gKGFsbCBidXQgYSBsaXN0IHJpZ2h0IG9mIGFuID0pCiAgICApICAgIHJpZ2h0IG5vbi1zdHJ1Y3R1cmFsIHBhcmVuCiAgICBMICAgIGxlZnQgbm9uLXN0cnVjdHVyYWwgY3VybHkgYnJhY2UgKGVuY2xvc2luZyBhIGtleSkKICAgIFIgICAgcmlnaHQgbm9uLXN0cnVjdHVyYWwgY3VybHkgYnJhY2UKICAgIDsgICAgdGVybWluYWwgc2VtaWNvbG9uCiAgICBmICAgIGluZGljYXRlcyBhIHNlbWljb2xvbiBpbiBhICJmb3IiIHN0YXRlbWVudAogICAgaCAgICBoZXJlX2RvYyBvcGVyYXRvciA8PAogICAgIyAgICBhIGNvbW1lbnQKICAgIFEgICAgaW5kaWNhdGVzIGEgcXVvdGUgb3IgcGF0dGVybgogICAgcSAgICBpbmRpY2F0ZXMgYSBxdyBxdW90ZSBibG9jawogICAgayAgICBhIHBlcmwga2V5d29yZAogICAgQyAgICB1c2VyLWRlZmluZWQgY29uc3RhbnQgb3IgY29uc3RhbnQgZnVuY3Rpb24gKHdpdGggdm9pZCBwcm90b3R5cGUgPSAoKSkKICAgIFUgICAgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIHRha2luZyBwYXJhbWV0ZXJzCiAgICBHICAgIHVzZXItZGVmaW5lZCBmdW5jdGlvbiB0YWtpbmcgYmxvY2sgcGFyYW1ldGVyIChsaWtlIGdyZXAvbWFwL2V2YWwpCiAgICBTICAgIHN1YiBkZWZpbml0aW9uICAgICAocmVwb3J0ZWQgYXMgdHlwZSAnaScgaW4gb2xkZXIgdmVyc2lvbnMpCiAgICBQICAgIHBhY2thZ2UgZGVmaW5pdGlvbiAocmVwb3J0ZWQgYXMgdHlwZSAnaScgaW4gb2xkZXIgdmVyc2lvbnMpCiAgICB0ICAgIHR5cGUgaW5kaWNhdG9yIHN1Y2ggYXMgJSwkLEAsKiwmLHN1YgogICAgdyAgICBiYXJlIHdvcmQgKHBlcmhhcHMgYSBzdWJyb3V0aW5lIGNhbGwpCiAgICBpICAgIGlkZW50aWZpZXIgb2Ygc29tZSB0eXBlICh3aXRoIGxlYWRpbmcgJSwgJCwgQCwgKiwgJiwgc3ViLCAtPiApCiAgICBuICAgIGEgbnVtYmVyCiAgICB2ICAgIGEgdi1zdHJpbmcKICAgIEYgICAgYSBmaWxlIHRlc3Qgb3BlcmF0b3IgKGxpa2UgLWUpCiAgICBZICAgIEZpbGUgaGFuZGxlCiAgICBaICAgIGlkZW50aWZpZXIgaW4gaW5kaXJlY3Qgb2JqZWN0IHNsb3Q6IG1heSBiZSBmaWxlIGhhbmRsZSwgb2JqZWN0CiAgICBKICAgIExBQkVMOiAgY29kZSBibG9jayBsYWJlbAogICAgaiAgICBMQUJFTCBhZnRlciBuZXh0LCBsYXN0LCByZWRvLCBnb3RvCiAgICBwICAgIHVuYXJ5ICsKICAgIG0gICAgdW5hcnkgLQogICAgcHAgICBwcmUtaW5jcmVtZW50IG9wZXJhdG9yICsrCiAgICBtbSAgIHByZS1kZWNyZW1lbnQgb3BlcmF0b3IgLS0KICAgIEEgICAgOiB1c2VkIGFzIGF0dHJpYnV0ZSBzZXBhcmF0b3IKCiAgICBIZXJlIGFyZSB0aGUgJ19saW5lX3R5cGUnIGNvZGVzIHVzZWQgaW50ZXJuYWxseToKICAgIFNZU1RFTSAgICAgICAgIC0gc3lzdGVtLXNwZWNpZmljIGNvZGUgYmVmb3JlIGhhc2gtYmFuZyBsaW5lCiAgICBDT0RFICAgICAgICAgICAtIGxpbmUgb2YgcGVybCBjb2RlIChpbmNsdWRpbmcgY29tbWVudHMpCiAgICBQT0RfU1RBUlQgICAgICAtIGxpbmUgc3RhcnRpbmcgcG9kLCBzdWNoIGFzICc9aGVhZCcKICAgIFBPRCAgICAgICAgICAgIC0gcG9kIGRvY3VtZW50YXRpb24gdGV4dAogICAgUE9EX0VORCAgICAgICAgLSBsYXN0IGxpbmUgb2YgcG9kIHNlY3Rpb24sICc9Y3V0JwogICAgSEVSRSAgICAgICAgICAgLSB0ZXh0IG9mIGhlcmUtZG9jdW1lbnQKICAgIEhFUkVfRU5EICAgICAgIC0gbGFzdCBsaW5lIG9mIGhlcmUtZG9jICh0YXJnZXQgd29yZCkKICAgIEZPUk1BVCAgICAgICAgIC0gZm9ybWF0IHNlY3Rpb24KICAgIEZPUk1BVF9FTkQgICAgIC0gbGFzdCBsaW5lIG9mIGZvcm1hdCBzZWN0aW9uLCAnLicKICAgIFNLSVAgICAgICAgICAgIC0gY29kZSBza2lwcGluZyBzZWN0aW9uCiAgICBTS0lQX0VORCAgICAgICAtIGxhc3QgbGluZSBvZiBjb2RlIHNraXBwaW5nIHNlY3Rpb24sICcjPj5WJwogICAgREFUQV9TVEFSVCAgICAgLSBfX0RBVEFfXyBsaW5lCiAgICBEQVRBICAgICAgICAgICAtIHVuaWRlbnRpZmllZCB0ZXh0IGZvbGxvd2luZyBfX0RBVEFfXwogICAgRU5EX1NUQVJUICAgICAgLSBfX0VORF9fIGxpbmUKICAgIEVORCAgICAgICAgICAgIC0gdW5pZGVudGlmaWVkIHRleHQgZm9sbG93aW5nIF9fRU5EX18KICAgIEVSUk9SICAgICAgICAgIC0gd2UgYXJlIGluIGJpZyB0cm91YmxlLCBwcm9iYWJseSBub3QgYSBwZXJsIHNjcmlwdApFTkRfT0ZfTElTVAoKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGR1bXBfdG9rZW5fdHlwZXMKCiMtLS0tLS0tLS0tLS0tLS0tLS0KIyBBYm91dCBUb2tlbiBUeXBlcwojLS0tLS0tLS0tLS0tLS0tLS0tCgojIFRoZSBhcnJheSAidmFsaWRfdG9rZW5fdHlwZXMiIGluIHRoZSBCRUdJTiBzZWN0aW9uIGhhcyBhbiB1cC10by1kYXRlIGxpc3QKIyBvZiB0b2tlbiB0eXBlcy4gIFN1YiAnZHVtcF90b2tlbl90eXBlcycgc2hvdWxkIGJlIGtlcHQgdXAgdG8gZGF0ZSB3aXRoCiMgdG9rZW4gdHlwZXMuCgojIElkZWFsbHksIHRva2VucyBhcmUgdGhlIHNtYWxsZXN0IHBpZWNlcyBvZiB0ZXh0CiMgc3VjaCB0aGF0IGEgbmV3bGluZSBtYXkgYmUgaW5zZXJ0ZWQgYmV0d2VlbiBhbnkgcGFpciBvZiB0b2tlbnMgd2l0aG91dAojIGNoYW5naW5nIG9yIGludmFsaWRhdGluZyB0aGUgcHJvZ3JhbS4gVGhpcyB2ZXJzaW9uIGNvbWVzIGNsb3NlIHRvIHRoaXMsCiMgYWx0aG91Z2ggdGhlcmUgYXJlIG5lY2Vzc2FyaWx5IGEgZmV3IGV4Y2VwdGlvbnMgd2hpY2ggbXVzdCBiZSBjYXVnaHQgYnkKIyB0aGUgZm9ybWF0dGVyLiAgTWFueSBvZiB0aGVzZSBpbnZvbHZlIHRoZSB0cmVhdG1lbnQgb2YgYmFyZSB3b3Jkcy4KIwojIFRvIHNpbXBsaWZ5IHRoaW5ncywgdG9rZW4gdHlwZXMgYXJlIGVpdGhlciBhIHNpbmdsZSBjaGFyYWN0ZXIsIG9yIHRoZXkKIyBhcmUgaWRlbnRpY2FsIHRvIHRoZSB0b2tlbnMgdGhlbXNlbHZlcy4KIwojIEFzIGEgZGVidWdnaW5nIGFpZCwgdGhlIC1EIGZsYWcgY3JlYXRlcyBhIGZpbGUgY29udGFpbmluZyBhIHNpZGUtYnktc2lkZQojIGNvbXBhcmlzb24gb2YgdGhlIGlucHV0IHN0cmluZyBhbmQgaXRzIHRva2VuaXphdGlvbiBmb3IgZWFjaCBsaW5lIG9mIGEgZmlsZS4KIyBUaGlzIGlzIGFuIGludmFsdWFibGUgZGVidWdnaW5nIGFpZC4KIwojIEluIGFkZGl0aW9uIHRvIHRva2VucywgYW5kIHNvbWUgYXNzb2NpYXRlZCBxdWFudGl0aWVzLCB0aGUgdG9rZW5pemVyCiMgYWxzbyByZXR1cm5zIGZsYWdzIGluZGljYXRpb24gYW55IHNwZWNpYWwgbGluZSB0eXBlcy4gIFRoZXNlIGluY2x1ZGUKIyBxdW90ZXMsIGhlcmVfZG9jcywgZm9ybWF0cy4KIwojLS0tLS0tLS0tLS0tLS0tLS0tCiMgQWRkaW5nIE5FV19UT0tFTlMKIy0tLS0tLS0tLS0tLS0tLS0tLQojCiMgSGVyZSBhcmUgc29tZSBub3RlcyBvbiB0aGUgbWluaW1hbCBzdGVwcy4gIEkgd3JvdGUgdGhlc2Ugbm90ZXMgd2hpbGUKIyBhZGRpbmcgdGhlICd2JyB0b2tlbiB0eXBlIGZvciB2LXN0cmluZ3MsIHdoaWNoIGFyZSB0aGluZ3MgbGlrZSB2ZXJzaW9uCiMgbnVtYmVycyA1LjYuMCwgYW5kIGlwIGFkZHJlc3NlcywgYW5kIHdpbGwgdXNlIHRoYXQgYXMgYW4gZXhhbXBsZS4gICggWW91CiMgY2FuIHVzZSB5b3VyIGVkaXRvciB0byBzZWFyY2ggZm9yIHRoZSBzdHJpbmcgIk5FV19UT0tFTlMiIHRvIGZpbmQgdGhlCiMgYXBwcm9wcmlhdGUgc2VjdGlvbnMgdG8gY2hhbmdlKToKCiMgKi4gRm9yIGFub3RoZXIgZXhhbXBsZSwgc2VhcmNoIGZvciB0aGUgc21hcnRtYXRjaCBvcGVyYXRvciAnfn4nCiMgd2l0aCB5b3VyIGVkaXRvciB0byBzZWUgd2hlcmUgdXBkYXRlcyB3ZXJlIG1hZGUgZm9yIGl0LgoKIyAqLiBGb3IgYW5vdGhlciBleGFtcGxlLCBzZWFyY2ggZm9yIHRoZSBzdHJpbmcgJ2MyNTAnLCB3aGljaCBzaG93cwojIGxvY2F0aW9ucyB3aGVyZSBjaGFuZ2VzIGZvciBuZXcgdHlwZXMgJ1AnIGFuZCAnUycgd2VyZSBtYWRlLgoKIyAqLiBUaGluayBvZiBhIG5ldywgdW51c2VkIGNoYXJhY3RlciBmb3IgdGhlIHRva2VuIHR5cGUsIGFuZCBhZGQgdG8KIyB0aGUgYXJyYXkgQHZhbGlkX3Rva2VuX3R5cGVzIGluIHRoZSBCRUdJTiBzZWN0aW9uIG9mIHRoaXMgcGFja2FnZS4KIyBGb3IgZXhhbXBsZSwgSSB1c2VkICd2JyBmb3Igdi1zdHJpbmdzLgojCiMgKi4gSW1wbGVtZW50IGNvZGluZyB0byByZWNvZ25pemUgdGhlICR0eXBlIG9mIHRoZSB0b2tlbiBpbiB0aGlzIHJvdXRpbmUuCiMgVGhpcyBpcyB0aGUgaGFyZGVzdCBwYXJ0LCBhbmQgaXMgYmVzdCBkb25lIGJ5IGltaXRhdGluZyBvciBtb2RpZnlpbmcKIyBzb21lIG9mIHRoZSBleGlzdGluZyBjb2RpbmcuICBGb3IgZXhhbXBsZSwgdG8gcmVjb2duaXplIHYtc3RyaW5ncywgSQojIHBhdGNoZWQgJ3N1YiBzY2FuX2JhcmVfaWRlbnRpZmllcicgdG8gcmVjb2duaXplIHYtc3RyaW5ncyBiZWdpbm5pbmcgd2l0aAojICd2JyBhbmQgJ3N1YiBzY2FuX251bWJlcicgdG8gcmVjb2duaXplIHYtc3RyaW5ncyB3aXRob3V0IHRoZSBsZWFkaW5nICd2Jy4KIwojICouIFVwZGF0ZSBzdWIgb3BlcmF0b3JfZXhwZWN0ZWQuICBUaGlzIHVwZGF0ZSBpcyBjcml0aWNhbGx5IGltcG9ydGFudCBidXQKIyB0aGUgY29kaW5nIGlzIHRyaXZpYWwuICBMb29rIGF0IHRoZSBjb21tZW50cyBpbiB0aGF0IHJvdXRpbmUgZm9yIGhlbHAuCiMgRm9yIHYtc3RyaW5ncywgd2hpY2ggc2hvdWxkIGJlaGF2ZSBsaWtlIG51bWJlcnMsIEkganVzdCBhZGRlZCAndicgdG8gdGhlCiMgcmVnZXggdXNlZCB0byBoYW5kbGUgbnVtYmVycyBhbmQgc3RyaW5ncyAodHlwZXMgJ24nIGFuZCAnUScpLgojCiMgKi4gSW1wbGVtZW50IGEgJ2JvbmQgc3RyZW5ndGgnIHJ1bGUgaW4gc3ViIHNldF9ib25kX3N0cmVuZ3RocyBpbgojIFBlcmw6OlRpZHk6OkZvcm1hdHRlciBmb3IgYnJlYWtpbmcgbGluZXMgYXJvdW5kIHRoaXMgdG9rZW4gdHlwZS4gIFlvdSBjYW4KIyBza2lwIHRoaXMgc3RlcCBhbmQgdGFrZSB0aGUgZGVmYXVsdCBhdCBmaXJzdCwgdGhlbiBhZGp1c3QgbGF0ZXIgdG8gZ2V0CiMgZGVzaXJlZCByZXN1bHRzLiAgRm9yIGFkZGluZyB0eXBlICd2JywgSSBsb29rZWQgYXQgc3ViIGJvbmRfc3RyZW5ndGggYW5kCiMgc2F3IHRoYXQgbnVtYmVyIHR5cGUgJ24nIHdhcyB1c2luZyBkZWZhdWx0IHN0cmVuZ3Rocywgc28gSSBkaWRuJ3QgZG8KIyBhbnl0aGluZy4gIEkgbWF5IHR1bmUgaXQgdXAgc29tZWRheSBpZiBJIGRvbid0IGxpa2UgdGhlIHdheSBsaW5lCiMgYnJlYWtzIHdpdGggdi1zdHJpbmdzIGxvb2suCiMKIyAqLiBJbXBsZW1lbnQgYSAnd2hpdGVzcGFjZScgcnVsZSBpbiBzdWIgc2V0X3doaXRlc3BhY2VfZmxhZ3MgaW4KIyBQZXJsOjpUaWR5OjpGb3JtYXR0ZXIuICBGb3IgYWRkaW5nIHR5cGUgJ3YnLCBJIGxvb2tlZCBhdCB0aGlzIHJvdXRpbmUKIyBhbmQgc2F3IHRoYXQgdHlwZSAnbicgdXNlZCBzcGFjZXMgb24gYm90aCBzaWRlcywgc28gSSBqdXN0IGFkZGVkICd2JwojIHRvIHRoZSBhcnJheSBAc3BhY2VzX2JvdGhfc2lkZXMuCiMKIyAqLiBVcGRhdGUgSHRtbFdyaXRlciBwYWNrYWdlIHNvIHRoYXQgdXNlcnMgY2FuIGNvbG9yaXplIHRoZSB0b2tlbiBhcwojIGRlc2lyZWQuICBUaGlzIGlzIHF1aXRlIGVhc3k7IHNlZSBjb21tZW50cyBpZGVudGlmaWVkIGJ5ICdORVdfVE9LRU5TJyBpbgojIHRoYXQgcGFja2FnZS4gIEZvciB2LXN0cmluZ3MsIEkgaW5pdGlhbGx5IGNob3NlIHRvIHVzZSBhIGRlZmF1bHQgY29sb3IKIyBlcXVhbCB0byB0aGUgZGVmYXVsdCBmb3IgbnVtYmVycywgYnV0IGl0IG1pZ2h0IGJlIG5pY2UgdG8gY2hhbmdlIHRoYXQKIyBldmVudHVhbGx5LgojCiMgKi4gVXBkYXRlIGNvbW1lbnRzIGluIFBlcmw6OlRpZHk6OlRva2VuaXplcjo6ZHVtcF90b2tlbl90eXBlcy4KIwojICouIFJ1biBsb3RzIGFuZCBsb3RzIG9mIGRlYnVnIHRlc3RzLiAgU3RhcnQgd2l0aCBzcGVjaWFsIGZpbGVzIGRlc2lnbmVkCiMgdG8gdGVzdCB0aGUgbmV3IHRva2VuIHR5cGUuICBSdW4gd2l0aCB0aGUgLUQgZmxhZyB0byBjcmVhdGUgYSAuREVCVUcKIyBmaWxlIHdoaWNoIHNob3dzIHRoZSB0b2tlbml6YXRpb24uICBXaGVuIHRoZXNlIHdvcmsgb2ssIHRlc3QgYXMgbWFueSBvbGQKIyBzY3JpcHRzIGFzIHBvc3NpYmxlLiAgU3RhcnQgd2l0aCBhbGwgb2YgdGhlICcudCcgZmlsZXMgaW4gdGhlICd0ZXN0JwojIGRpcmVjdG9yeSBvZiB0aGUgZGlzdHJpYnV0aW9uIGZpbGUuICBDb21wYXJlIC50ZHkgb3V0cHV0IHdpdGggcHJldmlvdXMKIyB2ZXJzaW9uIGFuZCB1cGRhdGVkIHZlcnNpb24gdG8gc2VlIHRoZSBkaWZmZXJlbmNlcy4gIFRoZW4gaW5jbHVkZSBhcwojIG1hbnkgbW9yZSBmaWxlcyBhcyBwb3NzaWJsZS4gTXkgb3duIHRlY2huaXF1ZSBoYXMgYmVlbiB0byBjb2xsZWN0IGEgaHVnZQojIG51bWJlciBvZiBwZXJsIHNjcmlwdHMgKHRob3VzYW5kcyEpIGludG8gb25lIGRpcmVjdG9yeSBhbmQgcnVuIHBlcmx0aWR5CiMgKiwgdGhlbiBydW4gZGlmZiBiZXR3ZWVuIHRoZSBvdXRwdXQgb2YgdGhlIHByZXZpb3VzIHZlcnNpb24gYW5kIHRoZQojIGN1cnJlbnQgdmVyc2lvbi4KCkJFR0lOIHsKCiAgICAjIFRoZXNlIG5hbWVzIGFyZSB1c2VkIGluIGVycm9yIG1lc3NhZ2VzCiAgICBAb3BlbmluZ19icmFjZV9uYW1lcyA9IHF3IyAneycgJ1snICcoJyAnPycgIzsKICAgIEBjbG9zaW5nX2JyYWNlX25hbWVzID0gcXcjICd9JyAnXScgJyknICc6JyAjOwoKICAgIG15IEBxOwoKICAgIG15IEBkaWdyYXBocyA9IHF3IwogICAgICAuLiA6OiA8PCA+PiAqKiAmJiB8fCAvLyAtPiA9PiArPSAtPSAuPSAlPSAmPSB8PSBePSAqPSA8PgogICAgICA8PSA+PSA9PSA9fiAhfiAhPSArKyAtLSAvPSB4PSB+fiB+LiB8LiAmLiBeLiBeXgogICAgICAjOwogICAgQGlzX2RpZ3JhcGh7QGRpZ3JhcGhzfSA9ICgxKSB4IHNjYWxhcihAZGlncmFwaHMpOwoKICAgIEBxID0gcXcoCiAgICAgIC4gOiA8ID4gKiAmIHwgLyAtID0gKyAtICAlICBeICEgIHggfgogICAgKTsKICAgIEBjYW5fc3RhcnRfZGlncmFwaHtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgIG15IEB0cmlncmFwaHMgPSBxdyggLi4uICoqPSA8PD0gPj49ICYmPSB8fD0gLy89IDw9PiAhfn4gJi49IHwuPSBeLj0gPDx+ICk7CiAgICBAaXNfdHJpZ3JhcGh7QHRyaWdyYXBoc30gPSAoMSkgeCBzY2FsYXIoQHRyaWdyYXBocyk7CgogICAgbXkgQHRldHJhZ3JhcGhzID0gcXcoIDw8Pj4gKTsKICAgIEBpc190ZXRyYWdyYXBoe0B0ZXRyYWdyYXBoc30gPSAoMSkgeCBzY2FsYXIoQHRldHJhZ3JhcGhzKTsKCiAgICAjIG1ha2UgYSBoYXNoIG9mIGFsbCB2YWxpZCB0b2tlbiB0eXBlcyBmb3Igc2VsZi1jaGVja2luZyB0aGUgdG9rZW5pemVyCiAgICAjIChhZGRpbmcgTkVXX1RPS0VOUyA6IHNlbGVjdCBhIG5ldyBjaGFyYWN0ZXIgYW5kIGFkZCB0byB0aGlzIGxpc3QpCiAgICAjIGZpeCBmb3IgYzI1MDogYWRkZWQgbmV3IHRva2VuIHR5cGUgJ1AnIGFuZCAnUycKICAgIG15IEB2YWxpZF90b2tlbl90eXBlcyA9IHF3IwogICAgICBBIGIgQyBHIEwgUiBmIGggUSBrIHQgdyBpIHEgbiBwIG0gRiBwcCBtbSBVIGogSiBZIFogdiBQIFMKICAgICAgeyB9ICggKSBbIF0gOyArIC0gLyAqIHwgJSAhIHggfiA9IFwgPyA6IC4gPCA+IF4gJgogICAgICAjOwogICAgcHVzaCggQHZhbGlkX3Rva2VuX3R5cGVzLCBAZGlncmFwaHMgKTsKICAgIHB1c2goIEB2YWxpZF90b2tlbl90eXBlcywgQHRyaWdyYXBocyApOwogICAgcHVzaCggQHZhbGlkX3Rva2VuX3R5cGVzLCBAdGV0cmFncmFwaHMgKTsKICAgIHB1c2goIEB2YWxpZF90b2tlbl90eXBlcywgKCAnIycsICcsJywgJ0NPUkU6OicgKSApOwogICAgQGlzX3ZhbGlkX3Rva2VuX3R5cGV7QHZhbGlkX3Rva2VuX3R5cGVzfSA9ICgxKSB4IHNjYWxhcihAdmFsaWRfdG9rZW5fdHlwZXMpOwoKICAgICMgYSBsaXN0IG9mIGZpbGUgdGVzdCBsZXR0ZXJzLCBhcyBpbiAtZSAoVGFibGUgMy00IG9mICdjYW1lbCAzJykKICAgIG15IEBmaWxlX3Rlc3Rfb3BlcmF0b3JzID0KICAgICAgcXcoIEEgQiBDIE0gTyBSIFMgVCBXIFggYiBjIGQgZSBmIGcgayBsIG8gcCByIHMgdCB1IHcgeCB6ICk7CiAgICBAaXNfZmlsZV90ZXN0X29wZXJhdG9ye0BmaWxlX3Rlc3Rfb3BlcmF0b3JzfSA9CiAgICAgICgxKSB4IHNjYWxhcihAZmlsZV90ZXN0X29wZXJhdG9ycyk7CgogICAgIyB0aGVzZSBmdW5jdGlvbnMgaGF2ZSBwcm90b3R5cGVzIG9mIHRoZSBmb3JtICgmKSwgc28gd2hlbiB0aGV5IGFyZQogICAgIyBmb2xsb3dlZCBieSBhIGJsb2NrLCB0aGF0IGJsb2NrIE1BWSBCRSBmb2xsb3dlZCBieSBhbiBvcGVyYXRvci4KICAgICMgU21hcnRtYXRjaCBvcGVyYXRvciB+fiBtYXkgYmUgZm9sbG93ZWQgYnkgYW5vbnltb3VzIGhhc2ggb3IgYXJyYXkgcmVmCiAgICBAcSA9IHF3KCBkbyBldmFsICk7CiAgICBAaXNfYmxvY2tfb3BlcmF0b3J7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICAjIHRoZXNlIGZ1bmN0aW9ucyBhbGxvdyBhbiBpZGVudGlmaWVyIGluIHRoZSBpbmRpcmVjdCBvYmplY3Qgc2xvdAogICAgQHEgPSBxdyggcHJpbnQgcHJpbnRmIHNvcnQgZXhlYyBzeXN0ZW0gc2F5ICk7CiAgICBAaXNfaW5kaXJlY3Rfb2JqZWN0X3Rha2Vye0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgIyBOb3RlOiAnZmllbGQnIHdpbGwgYmUgYWRkZWQgYnkgc3ViIGNoZWNrX29wdGlvbnMgaWYgLS11c2UtZmVhdHVyZT1jbGFzcwogICAgQHEgPSBxdyggbXkgb3VyIHN0YXRlICk7CiAgICBAaXNfbXlfb3VyX3N0YXRle0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgIyBUaGVzZSB0b2tlbnMgbWF5IHByZWNlZGUgYSBjb2RlIGJsb2NrCiAgICAjIHBhdGNoZWQgZm9yIFNXSVRDSC9DQVNFL0NBVENILiAgQWN0dWFsbHkgdGhlc2UgY291bGQgYmUgcmVtb3ZlZAogICAgIyBub3cgYW5kIHdlIGNvdWxkIGxldCB0aGUgZXh0ZW5kZWQtc3ludGF4IGNvZGluZyBoYW5kbGUgdGhlbS4KICAgICMgQWRkZWQgJ2RlZmF1bHQnIGZvciBTd2l0Y2g6OlBsYWluLgogICAgIyBOb3RlOiAnQURKVVNUJyB3aWxsIGJlIGFkZGVkIGJ5IHN1YiBjaGVja19vcHRpb25zIGlmIC0tdXNlLWZlYXR1cmU9Y2xhc3MKICAgIEBxID0gcXcoCiAgICAgIEJFR0lOICAgICBFTkQgICAgICBDSEVDSyBJTklUICAgQVVUT0xPQUQgREVTVFJPWQogICAgICBVTklUQ0hFQ0sgY29udGludWUgaWYgICAgZWxzaWYgIGVsc2UgICAgIHVubGVzcwogICAgICBkbyAgICAgICAgd2hpbGUgICAgdW50aWwgZXZhbCAgIGZvciAgICAgIGZvcmVhY2gKICAgICAgbWFwICAgICAgIGdyZXAgICAgIHNvcnQgIHN3aXRjaCBjYXNlICAgICBnaXZlbgogICAgICB3aGVuICAgICAgZGVmYXVsdCAgY2F0Y2ggdHJ5ICAgIGZpbmFsbHkKICAgICk7CiAgICBAaXNfY29kZV9ibG9ja190b2tlbntAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICMgTm90ZTogdGhpcyBoYXNoIHdhcyBmb3JtZXJseSBuYW1lZCAnJWlzX25vdF96ZXJvX2NvbnRpbnVhdGlvbl9ibG9ja190eXBlJwogICAgIyB0byBjb250cmFzdCBpdCB3aXRoIHRoZSBibG9jayB0eXBlcyBpbiAnJWlzX3plcm9fY29udGludWF0aW9uX2Jsb2NrX3R5cGUnCiAgICBAcSA9IHF3KCBzb3J0IG1hcCBncmVwIGV2YWwgZG8gKTsKICAgIEBpc19zb3J0X21hcF9ncmVwX2V2YWxfZG97QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICBAcSA9IHF3KCBzb3J0IG1hcCBncmVwICk7CiAgICBAaXNfc29ydF9tYXBfZ3JlcHtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICVpc19ncmVwX2FsaWFzID0gKCk7CgogICAgIyBJJ2xsIGJ1aWxkIHRoZSBsaXN0IG9mIGtleXdvcmRzIGluY3JlbWVudGFsbHkKICAgIG15IEBLZXl3b3JkcyA9ICgpOwoKICAgICMga2V5d29yZHMgYW5kIHRva2VucyBhZnRlciB3aGljaCBhIHZhbHVlIG9yIHBhdHRlcm4gaXMgZXhwZWN0ZWQsCiAgICAjIGJ1dCBub3QgYW4gb3BlcmF0b3IuICBJbiBvdGhlciB3b3JkcywgdGhlc2Ugc2hvdWxkIGNvbnN1bWUgdGVybXMKICAgICMgdG8gdGhlaXIgcmlnaHQsIG9yIGF0IGxlYXN0IHRoZXkgYXJlIG5vdCBleHBlY3RlZCB0byBiZSBmb2xsb3dlZAogICAgIyBpbW1lZGlhdGVseSBieSBvcGVyYXRvcnMuCiAgICBteSBAdmFsdWVfcmVxdWVzdG9yID0gcXcoCiAgICAgIEFVVE9MT0FEICAgICAgICAgQkVHSU4gICAgICAgICBDSEVDSyAgICAgICAgREVTVFJPWQogICAgICBFTkQgICAgICAgICAgICAgIEVRICAgICAgICAgICAgR0UgICAgICAgICAgIEdUCiAgICAgIElOSVQgICAgICAgICAgICAgTEUgICAgICAgICAgICBMVCAgICAgICAgICAgTkUKICAgICAgVU5JVENIRUNLICAgICAgICBhYnMgICAgICAgICAgIGFjY2VwdCAgICAgICBhbGFybQogICAgICBhbmQgICAgICAgICAgICAgIGF0YW4yICAgICAgICAgYmluZCAgICAgICAgIGJpbm1vZGUKICAgICAgYmxlc3MgICAgICAgICAgICBicmVhayAgICAgICAgIGNhbGxlciAgICAgICBjaGRpcgogICAgICBjaG1vZCAgICAgICAgICAgIGNob21wICAgICAgICAgY2hvcCAgICAgICAgIGNob3duCiAgICAgIGNociAgICAgICAgICAgICAgY2hyb290ICAgICAgICBjbG9zZSAgICAgICAgY2xvc2VkaXIKICAgICAgY21wICAgICAgICAgICAgICBjb25uZWN0ICAgICAgIGNvbnRpbnVlICAgICBjb3MKICAgICAgY3J5cHQgICAgICAgICAgICBkYm1jbG9zZSAgICAgIGRibW9wZW4gICAgICBkZWZpbmVkCiAgICAgIGRlbGV0ZSAgICAgICAgICAgZGllICAgICAgICAgICBkdW1wICAgICAgICAgZWFjaAogICAgICBlbHNlICAgICAgICAgICAgIGVsc2lmICAgICAgICAgZW9mICAgICAgICAgIGVxCiAgICAgIGV2YWxieXRlcyAgICAgICAgZXhlYyAgICAgICAgICBleGlzdHMgICAgICAgZXhpdAogICAgICBleHAgICAgICAgICAgICAgIGZjICAgICAgICAgICAgZmNudGwgICAgICAgIGZpbGVubwogICAgICBmbG9jayAgICAgICAgICAgIGZvciAgICAgICAgICAgZm9yZWFjaCAgICAgIGZvcm1saW5lCiAgICAgIGdlICAgICAgICAgICAgICAgZ2V0YyAgICAgICAgICBnZXRncmdpZCAgICAgZ2V0Z3JuYW0KICAgICAgZ2V0aG9zdGJ5YWRkciAgICBnZXRob3N0YnluYW1lIGdldG5ldGJ5YWRkciBnZXRuZXRieW5hbWUKICAgICAgZ2V0cGVlcm5hbWUgICAgICBnZXRwZ3JwICAgICAgIGdldHByaW9yaXR5ICBnZXRwcm90b2J5bmFtZQogICAgICBnZXRwcm90b2J5bnVtYmVyIGdldHB3bmFtICAgICAgZ2V0cHd1aWQgICAgIGdldHNlcnZieW5hbWUKICAgICAgZ2V0c2VydmJ5cG9ydCAgICBnZXRzb2NrbmFtZSAgIGdldHNvY2tvcHQgICBnbG9iCiAgICAgIGdtdGltZSAgICAgICAgICAgZ290byAgICAgICAgICBncmVwICAgICAgICAgZ3QKICAgICAgaGV4ICAgICAgICAgICAgICBpZiAgICAgICAgICAgIGluZGV4ICAgICAgICBpbnQKICAgICAgaW9jdGwgICAgICAgICAgICBqb2luICAgICAgICAgIGtleXMgICAgICAgICBraWxsCiAgICAgIGxhc3QgICAgICAgICAgICAgbGMgICAgICAgICAgICBsY2ZpcnN0ICAgICAgbGUKICAgICAgbGVuZ3RoICAgICAgICAgICBsaW5rICAgICAgICAgIGxpc3RlbiAgICAgICBsb2NhbAogICAgICBsb2NhbHRpbWUgICAgICAgIGxvY2sgICAgICAgICAgbG9nICAgICAgICAgIGxzdGF0CiAgICAgIGx0ICAgICAgICAgICAgICAgbWFwICAgICAgICAgICBta2RpciAgICAgICAgbXNnY3RsCiAgICAgIG1zZ2dldCAgICAgICAgICAgbXNncmN2ICAgICAgICBtc2dzbmQgICAgICAgbXkKICAgICAgbmUgICAgICAgICAgICAgICBuZXh0ICAgICAgICAgIG5vICAgICAgICAgICBub3QKICAgICAgb2N0ICAgICAgICAgICAgICBvcGVuICAgICAgICAgIG9wZW5kaXIgICAgICBvcgogICAgICBvcmQgICAgICAgICAgICAgIG91ciAgICAgICAgICAgcGFjayAgICAgICAgIHBpcGUKICAgICAgcG9wICAgICAgICAgICAgICBwb3MgICAgICAgICAgIHByaW50ICAgICAgICBwcmludGYKICAgICAgcHJvdG90eXBlICAgICAgICBwdXNoICAgICAgICAgIHF1b3RlbWV0YSAgICByYW5kCiAgICAgIHJlYWQgICAgICAgICAgICAgcmVhZGRpciAgICAgICByZWFkbGluayAgICAgcmVhZGxpbmUKICAgICAgcmVhZHBpcGUgICAgICAgICByZWN2ICAgICAgICAgIHJlZG8gICAgICAgICByZWYKICAgICAgcmVuYW1lICAgICAgICAgICByZXF1aXJlICAgICAgIHJlc2V0ICAgICAgICByZXR1cm4KICAgICAgcmV2ZXJzZSAgICAgICAgICByZXdpbmRkaXIgICAgIHJpbmRleCAgICAgICBybWRpcgogICAgICBzY2FsYXIgICAgICAgICAgIHNlZWsgICAgICAgICAgc2Vla2RpciAgICAgIHNlbGVjdAogICAgICBzZW1jdGwgICAgICAgICAgIHNlbWdldCAgICAgICAgc2Vtb3AgICAgICAgIHNlbmQKICAgICAgc2V0aG9zdGVudCAgICAgICBzZXRuZXRlbnQgICAgIHNldHBncnAgICAgICBzZXRwcmlvcml0eQogICAgICBzZXRwcm90b2VudCAgICAgIHNldHNlcnZlbnQgICAgc2V0c29ja29wdCAgIHNoaWZ0CiAgICAgIHNobWN0bCAgICAgICAgICAgc2htZ2V0ICAgICAgICBzaG1yZWFkICAgICAgc2htd3JpdGUKICAgICAgc2h1dGRvd24gICAgICAgICBzaW4gICAgICAgICAgIHNsZWVwICAgICAgICBzb2NrZXQKICAgICAgc29ja2V0cGFpciAgICAgICBzb3J0ICAgICAgICAgIHNwbGljZSAgICAgICBzcGxpdAogICAgICBzcHJpbnRmICAgICAgICAgIHNxcnQgICAgICAgICAgc3JhbmQgICAgICAgIHN0YXQKICAgICAgc3RhdGUgICAgICAgICAgICBzdHVkeSAgICAgICAgIHN1YnN0ciAgICAgICBzeW1saW5rCiAgICAgIHN5c2NhbGwgICAgICAgICAgc3lzb3BlbiAgICAgICBzeXNyZWFkICAgICAgc3lzc2VlawogICAgICBzeXN0ZW0gICAgICAgICAgIHN5c3dyaXRlICAgICAgdGVsbCAgICAgICAgIHRlbGxkaXIKICAgICAgdGllICAgICAgICAgICAgICB0aWVkICAgICAgICAgIHRydW5jYXRlICAgICB1YwogICAgICB1Y2ZpcnN0ICAgICAgICAgIHVtYXNrICAgICAgICAgdW5kZWYgICAgICAgIHVubGVzcwogICAgICB1bmxpbmsgICAgICAgICAgIHVucGFjayAgICAgICAgdW5zaGlmdCAgICAgIHVudGllCiAgICAgIHVudGlsICAgICAgICAgICAgdXNlICAgICAgICAgICB1dGltZSAgICAgICAgdmFsdWVzCiAgICAgIHZlYyAgICAgICAgICAgICAgd2FpdHBpZCAgICAgICB3YXJuICAgICAgICAgd2hpbGUKICAgICAgd3JpdGUgICAgICAgICAgICB4b3IgICAgICAgICAgIGNhc2UgICAgICAgICBjYXRjaAogICAgICBkZWZhdWx0ICAgICAgICAgIGVyciAgICAgICAgICAgZ2l2ZW4gICAgICAgIGlzYQogICAgICBzYXkgICAgICAgICAgICAgIHN3aXRjaCAgICAgICAgd2hlbgogICAgKTsKCiAgICAjIE5vdGU6ICdBREpVU1QnLCAnZmllbGQnIGFyZSBhZGRlZCBieSBzdWIgY2hlY2tfb3B0aW9ucwogICAgIyBpZiAtLXVzZS1mZWF0dXJlPWNsYXNzCgogICAgIyBwYXRjaGVkIGFib3ZlIGZvciBTV0lUQ0gvQ0FTRSBnaXZlbi93aGVuIGVyciBzYXkKICAgICMgJ2VycicgaXMgYSBmYWlybHkgc2FmZSBhZGRpdGlvbi4KICAgICMgQWRkZWQgJ2RlZmF1bHQnIGZvciBTd2l0Y2g6OlBsYWluLiBOb3RlIHRoYXQgd2UgY291bGQgYWxzbyBoYXZlCiAgICAjIGEgc2VwYXJhdGUgc2V0IG9mIGtleXdvcmRzIHRvIGluY2x1ZGUgaWYgd2Ugc2VlICd1c2UgU3dpdGNoOjpQbGFpbicKICAgIHB1c2goIEBLZXl3b3JkcywgQHZhbHVlX3JlcXVlc3RvciApOwoKICAgICMgVGhlc2UgYXJlIHRyZWF0ZWQgdGhlIHNhbWUgYnV0IGFyZSBub3Qga2V5d29yZHM6CiAgICBteSBAZXh0cmFfdnIgPSBxdyggY29uc3RhbnQgdmFycyApOwogICAgcHVzaCggQHZhbHVlX3JlcXVlc3RvciwgQGV4dHJhX3ZyICk7CgogICAgQGV4cGVjdGluZ190ZXJtX3Rva2Vue0B2YWx1ZV9yZXF1ZXN0b3J9ID0gKDEpIHggc2NhbGFyKEB2YWx1ZV9yZXF1ZXN0b3IpOwoKICAgICMgdGhpcyBsaXN0IGNvbnRhaW5zIGtleXdvcmRzIHdoaWNoIGRvIG5vdCBsb29rIGZvciBhcmd1bWVudHMsCiAgICAjIHNvIHRoYXQgdGhleSBtaWdodCBiZSBmb2xsb3dlZCBieSBhbiBvcGVyYXRvciwgb3IgYXQgbGVhc3QKICAgICMgbm90IGEgdGVybS4KICAgIG15IEBvcGVyYXRvcl9yZXF1ZXN0b3IgPSBxdygKICAgICAgZW5kZ3JlbnQgICAgZW5kaG9zdGVudCBlbmRuZXRlbnQgIGVuZHByb3RvZW50CiAgICAgIGVuZHB3ZW50ICAgIGVuZHNlcnZlbnQgZm9yayAgICAgICBnZXRncmVudAogICAgICBnZXRob3N0ZW50ICBnZXRsb2dpbiAgIGdldG5ldGVudCAgZ2V0cHBpZAogICAgICBnZXRwcm90b2VudCBnZXRwd2VudCAgIGdldHNlcnZlbnQgc2V0Z3JlbnQKICAgICAgc2V0cHdlbnQgICAgdGltZSAgICAgICB0aW1lcyAgICAgIHdhaXQKICAgICAgd2FudGFycmF5CiAgICApOwoKICAgIHB1c2goIEBLZXl3b3JkcywgQG9wZXJhdG9yX3JlcXVlc3RvciApOwoKICAgICMgVGhlc2UgYXJlIHRyZWF0ZWQgdGhlIHNhbWUgYnV0IGFyZSBub3QgY29uc2lkZXJlZCBrZXl3b3JkczoKICAgIG15IEBleHRyYV9vciA9IHF3KCBTVERFUlIgU1RESU4gU1RET1VUICk7CgogICAgcHVzaCggQG9wZXJhdG9yX3JlcXVlc3RvciwgQGV4dHJhX29yICk7CgogICAgQGV4cGVjdGluZ19vcGVyYXRvcl90b2tlbntAb3BlcmF0b3JfcmVxdWVzdG9yfSA9CiAgICAgICgxKSB4IHNjYWxhcihAb3BlcmF0b3JfcmVxdWVzdG9yKTsKCiAgICAjIHRoZXNlIHRva2VuIFRZUEVTIGV4cGVjdCB0cmFpbGluZyBvcGVyYXRvciBidXQgbm90IGEgdGVybQogICAgIyBub3RlOiArKyBhbmQgLS0gYXJlIHBvc3QtaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQsICdDJyA9IGNvbnN0YW50CiAgICBteSBAb3BlcmF0b3JfcmVxdWVzdG9yX3R5cGVzID0gcXcoICsrIC0tIEMgPD4gcSApOwoKICAgICMgTk9URTogVGhpcyBoYXNoIGlzIGF2YWlsYWJsZSBidXQgbm90IGN1cnJlbnRseSB1c2VkCiAgICBAZXhwZWN0aW5nX29wZXJhdG9yX3R5cGVze0BvcGVyYXRvcl9yZXF1ZXN0b3JfdHlwZXN9ID0KICAgICAgKDEpIHggc2NhbGFyKEBvcGVyYXRvcl9yZXF1ZXN0b3JfdHlwZXMpOwoKICAgICMgdGhlc2UgdG9rZW4gVFlQRVMgY29uc3VtZSB2YWx1ZXMgKHRlcm1zKQogICAgIyBub3RlOiBwcCBhbmQgbW0gYXJlIHByZS1pbmNyZW1lbnQgYW5kIGRlY3JlbWVudAogICAgIyBmPXNlbWljb2xvbiBpbiBmb3IsICBGPWZpbGUgdGVzdCBvcGVyYXRvcgogICAgbXkgQHZhbHVlX3JlcXVlc3Rvcl90eXBlID0gcXcjCiAgICAgIEwgeyAoIFsgfiAhfiA9fiA7IC4gLi4gLi4uIEEgOiAmJiAhIHx8IC8vID0gKyAtIHgKICAgICAgKio9ICs9IC09IC49IC89ICo9ICU9IHg9ICY9IHw9IF49IDw8PSA+Pj0gJiY9IHx8PSAvLz0KICAgICAgPD0gPj0gPT0gIT0gPT4gXCA+IDwgJSAqIC8gPyAmIHwgKiogPD0+IH5+ICF+fiA8PH4KICAgICAgZiBGIHBwIG1tIFkgcCBtIFUgSiBHIGogPj4gPDwgXiB0CiAgICAgIH4uIF4uIHwuICYuIF4uPSB8Lj0gJi49IF5eCiAgICAgICM7CiAgICBwdXNoKCBAdmFsdWVfcmVxdWVzdG9yX3R5cGUsICcsJyApCiAgICAgIDsgICAgIyAocGVybCBkb2Vzbid0IGxpa2UgYSAnLCcgaW4gYSBxdyBibG9jaykKCiAgICAjIE5PVEU6IFRoaXMgaGFzaCBpcyBhdmFpbGFibGUgYnV0IG5vdCBjdXJyZW50bHkgdXNlZAogICAgQGV4cGVjdGluZ190ZXJtX3R5cGVze0B2YWx1ZV9yZXF1ZXN0b3JfdHlwZX0gPQogICAgICAoMSkgeCBzY2FsYXIoQHZhbHVlX3JlcXVlc3Rvcl90eXBlKTsKCiAgICAjIE5vdGU6IHRoZSBmb2xsb3dpbmcgdmFsaWQgdG9rZW4gdHlwZXMgYXJlIG5vdCBhc3NpZ25lZCBoZXJlIHRvCiAgICAjIGhhc2hlcyByZXF1ZXN0aW5nIHRvIGJlIGZvbGxvd2VkIGJ5IHZhbHVlcyBvciB0ZXJtcywgYnV0IGFyZQogICAgIyBpbnN0ZWFkIGN1cnJlbnRseSBoYXJkLWNvZGVkIGludG8gc3ViIG9wZXJhdG9yX2V4cGVjdGVkOgogICAgIyApIC0+IDo6IFEgUiBaIF0gYiBoIGkgayBuIHYgdyB9ICMKCiAgICAjIEZvciBzaW1wbGUgc3ludGF4IGNoZWNraW5nLCBpdCBpcyBuaWNlIHRvIGhhdmUgYSBsaXN0IG9mIG9wZXJhdG9ycyB3aGljaAogICAgIyB3aWxsIHJlYWxseSBiZSB1bmhhcHB5IGlmIG5vdCBmb2xsb3dlZCBieSBhIHRlcm0uICBUaGlzIGluY2x1ZGVzIG1vc3QKICAgICMgb2YgdGhlIGFib3ZlLi4uCiAgICBAcmVhbGx5X3dhbnRfdGVybXtAdmFsdWVfcmVxdWVzdG9yX3R5cGV9ID0KICAgICAgKDEpIHggc2NhbGFyKEB2YWx1ZV9yZXF1ZXN0b3JfdHlwZSk7CgogICAgIyB3aXRoIHRoZXNlIGV4Y2VwdGlvbnMuLi4KICAgIGRlbGV0ZSAkcmVhbGx5X3dhbnRfdGVybXsnVSd9OyAjIHVzZXIgc3ViLCBkZXBlbmRzIG9uIHByb3RvdHlwZQogICAgZGVsZXRlICRyZWFsbHlfd2FudF90ZXJteydGJ307ICMgZmlsZSB0ZXN0IHdvcmtzIG9uICRfIGlmIG5vIGZvbGxvd2luZyB0ZXJtCiAgICBkZWxldGUgJHJlYWxseV93YW50X3Rlcm17J1knfTsgIyBpbmRpcmVjdCBvYmplY3QsIHRvbyByaXNreSB0byBjaGVjayBzeW50YXg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBsZXQgcGVybCBkbyBpdAogICAgQHEgPSBxdyggcSBxcSBxeCBxciBzIHkgdHIgbSApOwogICAgQGlzX3FfcXFfcXhfcXJfc195X3RyX217QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICAjIE5vdGUgYWRkZWQgJ3F3JyBoZXJlCiAgICBAcSA9IHF3KCBxIHFxIHF3IHF4IHFyIHMgeSB0ciBtICk7CiAgICBAaXNfcV9xcV9xd19xeF9xcl9zX3lfdHJfbXtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICMgUXVvdGUgbW9kaWZpZXJzOgogICAgIyBvcmlnaW5hbCByZWY6IGNhbWVsIDMgcCAxNDcsCiAgICAjIGJ1dCBwZXJsIG1heSBhY2NlcHQgdW5kb2N1bWVudGVkIGZsYWdzCiAgICAjIHBlcmwgNS4xMCBhZGRzICdwJyAocHJlc2VydmUpCiAgICAjIFBlcmwgdmVyc2lvbiA1LjIyIGFkZGVkICduJwogICAgIyBGcm9tIGh0dHA6Ly9wZXJsZG9jLnBlcmwub3JnL3BlcmxvcC5odG1sIHdlIGhhdmUKICAgICMgL1BBVFRFUk4vbXNpeHBvZHVhbG5nYyBvciBtP1BBVFRFUk4/bXNpeHBvZHVhbG5nYwogICAgIyBzL1BBVFRFUk4vUkVQTEFDRU1FTlQvbXNpeHBvZHVhbG5nY2VyCiAgICAjIHkvU0VBUkNITElTVC9SRVBMQUNFTUVOVExJU1QvY2RzcgogICAgIyB0ci9TRUFSQ0hMSVNUL1JFUExBQ0VNRU5UTElTVC9jZHNyCiAgICAjIHFyL1NUUklORy9tc2l4cG9kdWFsbgogICAgJXF1b3RlX21vZGlmaWVycyA9ICgKICAgICAgICAncycgID0+ICdbbXNpeHBvZHVhbG5nY2VyXScsCiAgICAgICAgJ3knICA9PiAnW2Nkc3JdJywKICAgICAgICAndHInID0+ICdbY2Rzcl0nLAogICAgICAgICdtJyAgPT4gJ1ttc2l4cG9kdWFsbmdjXScsCiAgICAgICAgJ3FyJyA9PiAnW21zaXhwb2R1YWxuXScsCiAgICAgICAgJ3EnICA9PiBFTVBUWV9TVFJJTkcsCiAgICAgICAgJ3FxJyA9PiBFTVBUWV9TVFJJTkcsCiAgICAgICAgJ3F3JyA9PiBFTVBUWV9TVFJJTkcsCiAgICAgICAgJ3F4JyA9PiBFTVBUWV9TVFJJTkcsCiAgICApOwoKICAgICMgTm90ZTogJ2NsYXNzJyB3aWxsIGJlIGFkZGVkIGJ5IHN1YiBjaGVja19vcHRpb25zIGlmIC11c2UtZmVhdHVyZT1jbGFzcwogICAgQHEgPSBxdyggcGFja2FnZSApOwogICAgQGlzX3BhY2thZ2V7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICBAcSA9IHF3KCBpZiBlbHNpZiB1bmxlc3MgKTsKICAgIEBpc19pZl9lbHNpZl91bmxlc3N7QHF9ID0gKDEpIHggc2NhbGFyKEBxKTsKCiAgICBAcSA9IHF3KCA7IHQgKTsKICAgIEBpc19zZW1pY29sb25fb3JfdHtAcX0gPSAoMSkgeCBzY2FsYXIoQHEpOwoKICAgIEBxID0gcXcoIGlmIGVsc2lmIHVubGVzcyBjYXNlIHdoZW4gKTsKICAgIEBpc19pZl9lbHNpZl91bmxlc3NfY2FzZV93aGVue0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgIyBIYXNoIG9mIG90aGVyIHBvc3NpYmxlIGxpbmUgZW5kaW5ncyB3aGljaCBtYXkgb2NjdXIuCiAgICAjIEtlZXAgdGhlc2UgY29vcmRpbmF0ZWQgd2l0aCB0aGUgcmVnZXggd2hlcmUgdGhpcyBpcyB1c2VkLgogICAgIyBOb3RlOiBjaHIoMTMpID0gY2hyKDAxNSk9IlxyIi4KICAgIEBxID0gKCBjaHIoMTMpLCBjaHIoMjkpLCBjaHIoMjYpICk7CiAgICBAb3RoZXJfbGluZV9lbmRpbmdze0BxfSA9ICgxKSB4IHNjYWxhcihAcSk7CgogICAgIyBUaGVzZSBrZXl3b3JkcyBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgaW4gdGhlIHRva2VuaXplciBjb2RlOgogICAgbXkgQHNwZWNpYWxfa2V5d29yZHMgPQogICAgICBxdyggZG8gZXZhbCBmb3JtYXQgbSBwYWNrYWdlIHEgcXEgcXIgcXcgcXggcyBzdWIgdHIgeSApOwogICAgcHVzaCggQEtleXdvcmRzLCBAc3BlY2lhbF9rZXl3b3JkcyApOwoKICAgICMgS2V5d29yZHMgYWZ0ZXIgd2hpY2ggbGlzdCBmb3JtYXR0aW5nIG1heSBiZSB1c2VkCiAgICAjIFdBUk5JTkc6IGRvIG5vdCBpbmNsdWRlIHxtYXB8Z3JlcHxldmFsIG9yIHBlcmwgbWF5IGRpZSBvbgogICAgIyBzeW50YXggZXJyb3JzIChtYXAxLnQpLgogICAgbXkgQGtleXdvcmRfdGFraW5nX2xpc3QgPSBxdygKICAgICAgYW5kICAgICAgICBjaG1vZCAgICAgIGNob21wICAgICAgY2hvcAogICAgICBjaG93biAgICAgIGRibW9wZW4gICAgZGllICAgICAgICBlbHNpZgogICAgICBleGVjICAgICAgIGZjbnRsICAgICAgZm9yICAgICAgICBmb3JlYWNoCiAgICAgIGZvcm1saW5lICAgZ2V0c29ja29wdCBnaXZlbiAgICAgIGlmCiAgICAgIGluZGV4ICAgICAgaW9jdGwgICAgICBqb2luICAgICAgIGtpbGwKICAgICAgbG9jYWwgICAgICBtc2djdGwgICAgIG1zZ3JjdiAgICAgbXNnc25kCiAgICAgIG15ICAgICAgICAgb3BlbiAgICAgICBvciAgICAgICAgIG91cgogICAgICBwYWNrICAgICAgIHByaW50ICAgICAgcHJpbnRmICAgICBwdXNoCiAgICAgIHJlYWQgICAgICAgcmVhZHBpcGUgICByZWN2ICAgICAgIHJldHVybgogICAgICByZXZlcnNlICAgIHJpbmRleCAgICAgc2VlayAgICAgICBzZWxlY3QKICAgICAgc2VtY3RsICAgICBzZW1nZXQgICAgIHNlbmQgICAgICAgc2V0cHJpb3JpdHkKICAgICAgc2V0c29ja29wdCBzaG1jdGwgICAgIHNobWdldCAgICAgc2htcmVhZAogICAgICBzaG13cml0ZSAgIHNvY2tldCAgICAgc29ja2V0cGFpciBzb3J0CiAgICAgIHNwbGljZSAgICAgc3BsaXQgICAgICBzcHJpbnRmICAgIHN0YXRlCiAgICAgIHN1YnN0ciAgICAgc3lzY2FsbCAgICBzeXNvcGVuICAgIHN5c3JlYWQKICAgICAgc3lzc2VlayAgICBzeXN0ZW0gICAgIHN5c3dyaXRlICAgdGllCiAgICAgIHVubGVzcyAgICAgdW5saW5rICAgICB1bnBhY2sgICAgIHVuc2hpZnQKICAgICAgdW50aWwgICAgICB2ZWMgICAgICAgIHdhcm4gICAgICAgd2hlbgogICAgICB3aGlsZQogICAgKTsKCiAgICAjIE5PVEU6IFRoaXMgaGFzaCBpcyBhdmFpbGFibGUgYnV0IG5vdCBjdXJyZW50bHkgdXNlZAogICAgQGlzX2tleXdvcmRfdGFraW5nX2xpc3R7QGtleXdvcmRfdGFraW5nX2xpc3R9ID0KICAgICAgKDEpIHggc2NhbGFyKEBrZXl3b3JkX3Rha2luZ19saXN0KTsKCiAgICAjIHBlcmwgZnVuY3Rpb25zIHdoaWNoIG1heSBiZSB1bmFyeSBvcGVyYXRvcnMuCgogICAgIyBUaGlzIGxpc3QgaXMgdXNlZCB0byBkZWNpZGUgaWYgYSBwYXR0ZXJuIGRlbGltaXRlZCBieSBzbGFzaGVzLCAvcGF0dGVybi8sCiAgICAjIGNhbiBmb2xsb3cgb25lIG9mIHRoZXNlIGtleXdvcmRzLgogICAgQHEgPSBxdyggY2hvbXAgZW9mIGV2YWwgZmMgbGMgcG9wIHNoaWZ0IHVjIHVuZGVmICk7CgogICAgQGlzX2tleXdvcmRfcmVqZWN0aW5nX3NsYXNoX2FzX3BhdHRlcm5fZGVsaW1pdGVye0BxfSA9CiAgICAgICgxKSB4IHNjYWxhcihAcSk7CgogICAgIyBUaGVzZSBhcmUga2V5d29yZHMgZm9yIHdoaWNoIGFuIGFyZyBtYXkgb3B0aW9uYWxseSBiZSBvbWl0dGVkLiAgVGhleSBhcmUKICAgICMgY3VycmVudGx5IG9ubHkgdXNlZCB0byBkaXNhbWJpZ3VhdGUgYSA/IHVzZWQgYXMgYSB0ZXJuYXJ5IGZyb20gb25lIHVzZWQKICAgICMgYXMgYSAoZGVwcmVjYXRlZCkgcGF0dGVybiBkZWxpbWl0ZXIuICBJbiB0aGUgZnV0dXJlLCB0aGV5IG1pZ2h0IGJlIHVzZWQKICAgICMgdG8gZ2l2ZSBhIHdhcm5pbmcgYWJvdXQgYW1iaWd1b3VzIHN5bnRheCBiZWZvcmUgYSAvLgogICAgIyBOb3RlOiBzcGxpdCBoYXMgYmVlbiBvbWl0dGVkIChzZWUgbm90ZSBiZWxvdykuCiAgICBteSBAa2V5d29yZHNfdGFraW5nX29wdGlvbmFsX2FyZyA9IHF3KAogICAgICBhYnMgICAgICBhbGFybSAgICBjYWxsZXIgICAgY2hkaXIgICAgIGNob21wICAgY2hvcAogICAgICBjaHIgICAgICBjaHJvb3QgICBjbG9zZSAgICAgY29zICAgICAgIGRlZmluZWQgZGllCiAgICAgIGVvZiAgICAgIGV2YWwgICAgIGV2YWxieXRlcyBleGl0ICAgICAgZXhwICAgICBmYwogICAgICBnZXRjICAgICBnbG9iICAgICBnbXRpbWUgICAgaGV4ICAgICAgIGludCAgICAgbGFzdAogICAgICBsYyAgICAgICBsY2ZpcnN0ICBsZW5ndGggICAgbG9jYWx0aW1lIGxvZyAgICAgbHN0YXQKICAgICAgbWtkaXIgICAgbmV4dCAgICAgb2N0ICAgICAgIG9yZCAgICAgICBwb3AgICAgIHBvcwogICAgICBwcmludCAgICBwcmludGYgICBwcm90b3R5cGUgcXVvdGVtZXRhIHJhbmQgICAgcmVhZGxpbmUKICAgICAgcmVhZGxpbmsgcmVhZHBpcGUgcmVkbyAgICAgIHJlZiAgICAgICByZXF1aXJlIHJlc2V0CiAgICAgIHJldmVyc2UgIHJtZGlyICAgIHNheSAgICAgICBzZWxlY3QgICAgc2hpZnQgICBzaW4KICAgICAgc2xlZXAgICAgc3FydCAgICAgc3JhbmQgICAgIHN0YXQgICAgICBzdHVkeSAgIHRlbGwKICAgICAgdWMgICAgICAgdWNmaXJzdCAgdW1hc2sgICAgIHVuZGVmICAgICB1bmxpbmsgIHdhcm4KICAgICAgd3JpdGUKICAgICk7CiAgICBAaXNfa2V5d29yZF90YWtpbmdfb3B0aW9uYWxfYXJne0BrZXl3b3Jkc190YWtpbmdfb3B0aW9uYWxfYXJnfSA9CiAgICAgICgxKSB4IHNjYWxhcihAa2V5d29yZHNfdGFraW5nX29wdGlvbmFsX2FyZyk7CgogICAgIyBUaGlzIGxpc3QgaXMgdXNlZCB0byBkZWNpZGUgaWYgYSBwYXR0ZXJuIGRlbGltaXRlZCBieSBxdWVzdGlvbiBtYXJrcywKICAgICMgP3BhdHRlcm4/LCBjYW4gZm9sbG93IG9uZSBvZiB0aGVzZSBrZXl3b3Jkcy4gIE5vdGUgdGhhdCBmcm9tIHBlcmwgNS4yMgogICAgIyBvbiwgYSA/cGF0dGVybj8gaXMgbm90IHJlY29nbml6ZWQsIHNvIHdlIGNhbiBiZSBtdWNoIG1vcmUgc3RyaWN0IHRoYW4KICAgICMgd2l0aCBhIC9wYXR0ZXJuLy4gTm90ZSB0aGF0ICdzcGxpdCcgaXMgbm90IGluIHRoaXMgbGlzdC4gSW4gY3VycmVudAogICAgIyB2ZXJzaW9ucyBvZiBwZXJsIGEgcXVlc3Rpb24gZm9sbG93aW5nIHNwbGl0IG11c3QgYmUgYSB0ZXJuYXJ5LCBidXQKICAgICMgaW4gb2xkZXIgdmVyc2lvbnMgaXQgY291bGQgYmUgYSBwYXR0ZXJuLiAgVGhlIGd1ZXNzaW5nIGFsZ29yaXRobSB3aWxsCiAgICAjIGRlY2lkZS4gIFdlIGFyZSBjb21iaW5pbmcgdHdvIGxpc3RzIGhlcmUgdG8gc2ltcGxpZnkgdGhlIHRlc3QuCiAgICBAcSA9ICggQGtleXdvcmRzX3Rha2luZ19vcHRpb25hbF9hcmcsIEBvcGVyYXRvcl9yZXF1ZXN0b3IgKTsKICAgIEBpc19rZXl3b3JkX3JlamVjdGluZ19xdWVzdGlvbl9hc19wYXR0ZXJuX2RlbGltaXRlcntAcX0gPQogICAgICAoMSkgeCBzY2FsYXIoQHEpOwoKICAgICMgVGhlc2UgYXJlIG5vdCB1c2VkIGluIGFueSB3YXkgeWV0CiAgICAjICAgIG15IEB1bnVzZWRfa2V5d29yZHMgPSBxdygKICAgICMgICAgIF9fRklMRV9fCiAgICAjICAgICBfX0xJTkVfXwogICAgIyAgICAgX19QQUNLQUdFX18KICAgICMgICAgICk7CgogICAgIyAgVGhlIGxpc3Qgb2Yga2V5d29yZHMgd2FzIG9yaWdpbmFsbHkgZXh0cmFjdGVkIGZyb20gZnVuY3Rpb24gJ2tleXdvcmQnIGluCiAgICAjICBwZXJsIGZpbGUgdG9rZS5jIHZlcnNpb24gNS4wMDUuMDMsIHVzaW5nIHRoaXMgdXRpbGl0eSwgcGx1cyBhCiAgICAjICBsaXR0bGUgZWRpdGluZzogKGZpbGUgZ2V0a3dkLnBsKToKICAgICMgIHdoaWxlICg8PikgeyB3aGlsZSAoL1wiKC4qKVwiL2cpIHsgcHJpbnQgIiQxXG4iOyB9IH0KICAgICMgIEFkZCAnZ2V0JyBwcmVmaXggd2hlcmUgbmVjZXNzYXJ5LCB0aGVuIHNwbGl0IGludG8gdGhlIGFib3ZlIGxpc3RzLgogICAgIyAgVGhpcyBsaXN0IHNob3VsZCBiZSB1cGRhdGVkIGFzIG5lY2Vzc2FyeS4KICAgICMgIFRoZSBsaXN0IHNob3VsZCBub3QgY29udGFpbiB0aGVzZSBzcGVjaWFsIHZhcmlhYmxlczoKICAgICMgIEFSR1YgREFUQSBFTlYgU0lHIFNUREVSUiBTVERJTiBTVERPVVQKICAgICMgIF9fREFUQV9fIF9fRU5EX18KCiAgICBAaXNfa2V5d29yZHtAS2V5d29yZHN9ID0gKDEpIHggc2NhbGFyKEBLZXl3b3Jkcyk7CgogICAgJW1hdGNoaW5nX2VuZF90b2tlbiA9ICgKICAgICAgICAneycgPT4gJ30nLAogICAgICAgICcoJyA9PiAnKScsCiAgICAgICAgJ1snID0+ICddJywKICAgICAgICAnPCcgPT4gJz4nLAogICAgKTsKfSAjIyBlbmQgQkVHSU4KCn0gIyMgZW5kIHBhY2thZ2UgUGVybDo6VGlkeTo6VG9rZW5pemVyCjE7Cg==</File>
        <File Location="Kernel/cpan-lib/Perl/Tidy/Debugger.pm" Permission="660" Encode="Base64">IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMKIyBUaGUgUGVybDo6VGlkeTo6RGVidWdnZXIgY2xhc3Mgc2hvd3MgbGluZSB0b2tlbml6YXRpb24KIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnBhY2thZ2UgUGVybDo6VGlkeTo6RGVidWdnZXI7CnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIEVuZ2xpc2ggcXcoIC1ub19tYXRjaF92YXJzICk7Cm91ciAkVkVSU0lPTiA9ICcyMDI1MDEwNSc7Cgp1c2UgY29uc3RhbnQgRU1QVFlfU1RSSU5HID0+IHF7fTsKdXNlIGNvbnN0YW50IFNQQUNFICAgICAgICA9PiBxeyB9OwoKc3ViIG5ldyB7CgogICAgbXkgKCAkY2xhc3MsICRmaWxlbmFtZSwgJGlzX2VuY29kZWRfZGF0YSApID0gQF87CgogICAgcmV0dXJuIGJsZXNzIHsKICAgICAgICBfZGVidWdfZmlsZSAgICAgICAgPT4gJGZpbGVuYW1lLAogICAgICAgIF9kZWJ1Z19maWxlX29wZW5lZCA9PiAwLAogICAgICAgIF9maCAgICAgICAgICAgICAgICA9PiB1bmRlZiwKICAgICAgICBfaXNfZW5jb2RlZF9kYXRhICAgPT4gJGlzX2VuY29kZWRfZGF0YSwKICAgIH0sICRjbGFzczsKfSAjIyBlbmQgc3ViIG5ldwoKc3ViIHJlYWxseV9vcGVuX2RlYnVnX2ZpbGUgewoKICAgIG15ICRzZWxmICAgICAgICAgICAgPSBzaGlmdDsKICAgIG15ICRkZWJ1Z19maWxlICAgICAgPSAkc2VsZi0+e19kZWJ1Z19maWxlfTsKICAgIG15ICRpc19lbmNvZGVkX2RhdGEgPSAkc2VsZi0+e19pc19lbmNvZGVkX2RhdGF9OwogICAgbXkgJGZoID0gUGVybDo6VGlkeTo6c3RyZWFtaGFuZGxlKCAkZGVidWdfZmlsZSwgJ3cnLCAkaXNfZW5jb2RlZF9kYXRhICk7CiAgICBpZiAoICEkZmggKSB7CiAgICAgICAgUGVybDo6VGlkeTo6V2FybigiY2FuJ3Qgb3BlbiBkZWJ1ZyBmaWxlICckZGVidWdfZmlsZSdcbiIpOwogICAgfQogICAgJHNlbGYtPntfZGVidWdfZmlsZV9vcGVuZWR9ID0gMTsKICAgICRzZWxmLT57X2ZofSAgICAgICAgICAgICAgICA9ICRmaDsKICAgICRmaC0+cHJpbnQoCiAgICAgICAgIlVzZSAtZHVtcC10b2tlbi10eXBlcyAoLWR0dCkgdG8gZ2V0IGEgbGlzdCBvZiB0b2tlbiB0eXBlIGNvZGVzXG4iKTsKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHJlYWxseV9vcGVuX2RlYnVnX2ZpbGUKCnN1YiBjbG9zZV9kZWJ1Z19maWxlIHsKCiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgaWYgKCAkc2VsZi0+e19kZWJ1Z19maWxlX29wZW5lZH0gKSB7CiAgICAgICAgbXkgJGZoICAgICAgICAgPSAkc2VsZi0+e19maH07CiAgICAgICAgbXkgJGRlYnVnX2ZpbGUgPSAkc2VsZi0+e19kZWJ1Z19maWxlfTsKICAgICAgICBpZiAoICAgJGZoCiAgICAgICAgICAgICYmICRmaC0+Y2FuKCdjbG9zZScpCiAgICAgICAgICAgICYmICRkZWJ1Z19maWxlIG5lICctJwogICAgICAgICAgICAmJiAhcmVmKCRkZWJ1Z19maWxlKSApCiAgICAgICAgewogICAgICAgICAgICAkZmgtPmNsb3NlKCkKICAgICAgICAgICAgICBvciBQZXJsOjpUaWR5OjpXYXJuKAogICAgICAgICAgICAgICAgImNhbid0IGNsb3NlIERFQlVHIGZpbGUgJyRkZWJ1Z19maWxlJzogJE9TX0VSUk9SXG4iKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBjbG9zZV9kZWJ1Z19maWxlCgpzdWIgd3JpdGVfZGVidWdfZW50cnkgewoKICAgICMgVGhpcyBpcyBhIGRlYnVnIGR1bXAgcm91dGluZSB3aGljaCBtYXkgYmUgbW9kaWZpZWQgYXMgbmVjZXNzYXJ5CiAgICAjIHRvIGR1bXAgdG9rZW5zIG9uIGEgbGluZS1ieS1saW5lIGJhc2lzLiAgVGhlIG91dHB1dCB3aWxsIGJlIHdyaXR0ZW4KICAgICMgdG8gdGhlIC5ERUJVRyBmaWxlIHdoZW4gdGhlIC1EIGZsYWcgaXMgZW50ZXJlZC4KICAgIG15ICggJHNlbGYsICRsaW5lX29mX3Rva2VucyApID0gQF87CgogICAgbXkgJHJ0b2tlbl90eXBlICAgICAgID0gJGxpbmVfb2ZfdG9rZW5zLT57X3J0b2tlbl90eXBlfTsKICAgIG15ICRydG9rZW5zICAgICAgICAgICA9ICRsaW5lX29mX3Rva2Vucy0+e19ydG9rZW5zfTsKICAgIG15ICRpbnB1dF9saW5lX251bWJlciA9ICRsaW5lX29mX3Rva2Vucy0+e19saW5lX251bWJlcn07CgojIyAgdW5jb21tZW50IGlmIG5lZWRlZDoKIyMgIG15ICRpbnB1dF9saW5lICA9ICRsaW5lX29mX3Rva2Vucy0+e19saW5lX3RleHR9OwojIyAgbXkgJHJsZXZlbHMgICAgID0gJGxpbmVfb2ZfdG9rZW5zLT57X3JsZXZlbHN9OwojIyAgbXkgJGxpbmVfdHlwZSAgID0gJGxpbmVfb2ZfdG9rZW5zLT57X2xpbmVfdHlwZX07CgogICAgbXkgJHRva2VuX3N0ciAgICAgICAgICAgICAgPSAiJGlucHV0X2xpbmVfbnVtYmVyOiAiOwogICAgbXkgJHJlY29uc3RydWN0ZWRfb3JpZ2luYWwgPSAiJGlucHV0X2xpbmVfbnVtYmVyOiAiOwoKICAgIG15ICRwYXR0ZXJuICAgPSBFTVBUWV9TVFJJTkc7CiAgICBteSBAbmV4dF9jaGFyID0gKCAnIicsICciJyApOwogICAgbXkgJGlfbmV4dCAgICA9IDA7CiAgICBpZiAoICEkc2VsZi0+e19kZWJ1Z19maWxlX29wZW5lZH0gKSB7CiAgICAgICAgJHNlbGYtPnJlYWxseV9vcGVuX2RlYnVnX2ZpbGUoKTsKICAgIH0KICAgIG15ICRmaCA9ICRzZWxmLT57X2ZofTsKCiAgICBmb3JlYWNoIG15ICRqICggMCAuLiBAeyRydG9rZW5fdHlwZX0gLSAxICkgewoKICAgICAgICAjIHRlc3RpbmcgcGF0dGVybnMKICAgICAgICBpZiAoICRydG9rZW5fdHlwZS0+WyRqXSBlcSAnaycgKSB7CiAgICAgICAgICAgICRwYXR0ZXJuIC49ICRydG9rZW5zLT5bJGpdOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJHBhdHRlcm4gLj0gJHJ0b2tlbl90eXBlLT5bJGpdOwogICAgICAgIH0KICAgICAgICAkcmVjb25zdHJ1Y3RlZF9vcmlnaW5hbCAuPSAkcnRva2Vucy0+WyRqXTsKICAgICAgICBteSAkbnVtICAgICAgPSBsZW5ndGgoICRydG9rZW5zLT5bJGpdICk7CiAgICAgICAgbXkgJHR5cGVfc3RyID0gJHJ0b2tlbl90eXBlLT5bJGpdOwoKICAgICAgICAjIGJlIHN1cmUgdGhlcmUgYXJlIG5vIGJsYW5rIHRva2VucyAoc2hvdWxkbid0IGhhcHBlbikKICAgICAgICAjIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGlmIGEgcHJvZ3JhbW1pbmcgZXJyb3IgaGFzIGJlZW4gbWFkZQogICAgICAgICMgYmVjYXVzZSBhbGwgdmFsaWQgdG9rZW5zIGFyZSBub24tYmxhbmsKICAgICAgICBpZiAoICR0eXBlX3N0ciBlcSBTUEFDRSApIHsKICAgICAgICAgICAgJGZoLT5wcmludCgiQkxBTksgVE9LRU4gb24gdGhlIG5leHQgbGluZVxuIik7CiAgICAgICAgICAgICR0eXBlX3N0ciA9ICRuZXh0X2NoYXJbJGlfbmV4dF07CiAgICAgICAgICAgICRpX25leHQgICA9IDEgLSAkaV9uZXh0OwogICAgICAgIH0KCiAgICAgICAgaWYgKCBsZW5ndGgoJHR5cGVfc3RyKSA9PSAxICkgewogICAgICAgICAgICAkdHlwZV9zdHIgPSAkdHlwZV9zdHIgeCAkbnVtOwogICAgICAgIH0KICAgICAgICAkdG9rZW5fc3RyIC49ICR0eXBlX3N0cjsKICAgIH0KCiAgICAjIFdyaXRlIHdoYXQgeW91IHdhbnQgaGVyZSAuLi4KICAgICMgJGZoLT5wcmludCAiJGlucHV0X2xpbmVcbiI7CiAgICAjICRmaC0+cHJpbnQgIiRwYXR0ZXJuXG4iOwogICAgJGZoLT5wcmludCgiJHJlY29uc3RydWN0ZWRfb3JpZ2luYWxcbiIpOwogICAgJGZoLT5wcmludCgiJHRva2VuX3N0clxuIik7CgogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgd3JpdGVfZGVidWdfZW50cnkKMTsK</File>
        <File Location="Kernel/cpan-lib/Perl/Tidy/FileWriter.pm" Permission="660" Encode="Base64">IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMKIyBUaGUgUGVybDo6VGlkeTo6RmlsZVdyaXRlciBjbGFzcyB3cml0ZXMgdGhlIG91dHB1dCBmaWxlIGNyZWF0ZWQKIyBieSB0aGUgZm9ybWF0dGVyLiBJdCByZWNlaXZlcyBlYWNoIG91dHB1dCBsaW5lIGFuZCBwZXJmb3JtcyBzb21lCiMgaW1wb3J0YW50IG1vbml0b3Jpbmcgc2VydmljZXMuIFRoZXNlIGluY2x1ZGU6CiMKIyAtIFZlcmlmeWluZyB0aGF0IGxpbmVzIGRvIG5vdCBnbyBvdXQgd2l0aCB0b2tlbnMgaW4gdGhlIHdyb25nIG9yZGVyCiMgLSBDaGVja2luZyBmb3Igb2J2aW91cyBpdGVyYXRpb24gY29udmVyZ2VuY2Ugd2hlbiBhbGwgb3V0cHV0IHRva2VucwojICAgbWF0Y2ggYWxsIGlucHV0IHRva2VucwojIC0gS2VlcGluZyB0cmFjayBvZiBjb25zZWN1dGl2ZSBibGFuayBhbmQgbm9uLWJsYW5rIGxpbmVzCiMgLSBMb29raW5nIGZvciBsaW5lIGxlbmd0aHMgd2hpY2ggZXhjZWVkIHRoZSBtYXhpbXVtIHJlcXVlc3RlZCBsZW5ndGgKIyAtIFJlcG9ydGluZyByZXN1bHRzIHRvIHRoZSBsb2cgZmlsZQojCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKcGFja2FnZSBQZXJsOjpUaWR5OjpGaWxlV3JpdGVyOwp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cm91ciAkVkVSU0lPTiA9ICcyMDI1MDEwNSc7CnVzZSBDYXJwOwoKdXNlIGNvbnN0YW50IERFVkVMX01PREUgICA9PiAwOwp1c2UgY29uc3RhbnQgRU1QVFlfU1RSSU5HID0+IHF7fTsKCiMgQSBsaW1pdCBvbiBtZXNzYWdlIGxlbmd0aCB3aGVuIGEgZmF1bHQgaXMgZGV0ZWN0ZWQKdXNlIGNvbnN0YW50IExPTkdfTUVTU0FHRSA9PiAyNTY7CgojIE1heGltdW0gbnVtYmVyIG9mIGxpdHRsZSBtZXNzYWdlczsgcHJvYmFibHkgbmVlZCBub3QgYmUgY2hhbmdlZC4KdXNlIGNvbnN0YW50IE1BWF9OQUdfTUVTU0FHRVMgPT4gNjsKCnN1YiBBVVRPTE9BRCB7CgogICAgIyBDYXRjaCBhbnkgdW5kZWZpbmVkIHN1YiBjYWxscyBzbyB0aGF0IHdlIGFyZSBzdXJlIHRvIGdldAogICAgIyBzb21lIGRpYWdub3N0aWMgaW5mb3JtYXRpb24uICBUaGlzIHN1YiBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkCiAgICAjIGV4Y2VwdCBmb3IgYSBwcm9ncmFtbWluZyBlcnJvci4KICAgIG91ciAkQVVUT0xPQUQ7CiAgICByZXR1cm4gaWYgKCAkQVVUT0xPQUQgPX4gL1xiREVTVFJPWSQvICk7CiAgICBteSAoICRwa2csICRmbmFtZSwgJGxubyApID0gY2FsbGVyKCk7CiAgICBteSAkbXlfcGFja2FnZSA9IF9fUEFDS0FHRV9fOwogICAgcHJpbnQgeypTVERFUlJ9IDw8RU9NOwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkVycm9yIGRldGVjdGVkIGluIHBhY2thZ2UgJyRteV9wYWNrYWdlJywgdmVyc2lvbiAkVkVSU0lPTgpSZWNlaXZlZCB1bmV4cGVjdGVkIEFVVE9MT0FEIGNhbGwgZm9yIHN1YiAnJEFVVE9MT0FEJwpDYWxsZWQgZnJvbSBwYWNrYWdlOiAnJHBrZycKQ2FsbGVkIGZyb20gRmlsZSAnJGZuYW1lJyAgYXQgbGluZSAnJGxubycKVGhpcyBlcnJvciBpcyBwcm9iYWJseSBkdWUgdG8gYSByZWNlbnQgcHJvZ3JhbW1pbmcgY2hhbmdlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KRU9NCiAgICBleGl0IDE7Cn0gIyMgZW5kIHN1YiBBVVRPTE9BRAoKc3ViIERFU1RST1kgewoKICAgICMgcmVxdWlyZWQgdG8gYXZvaWQgY2FsbCB0byBBVVRPTE9BRCBpbiBzb21lIHZlcnNpb25zIG9mIHBlcmwKfQoKQkVHSU4gewoKICAgICMgQXJyYXkgaW5kZXggbmFtZXMgZm9yIHZhcmlhYmxlcy4KICAgICMgRG8gbm90IGNvbWJpbmUgd2l0aCBvdGhlciBCRUdJTiBibG9ja3MgKGMxMDEpLgogICAgbXkgJGkgPSAwOwogICAgdXNlIGNvbnN0YW50IHsKICAgICAgICBfbG9nZ2VyX29iamVjdF8gICAgICAgICAgICAgICA9PiAkaSsrLAogICAgICAgIF9yT3B0c18gICAgICAgICAgICAgICAgICAgICAgID0+ICRpKyssCiAgICAgICAgX291dHB1dF9saW5lX251bWJlcl8gICAgICAgICAgPT4gJGkrKywKICAgICAgICBfY29uc2VjdXRpdmVfYmxhbmtfbGluZXNfICAgICA9PiAkaSsrLAogICAgICAgIF9jb25zZWN1dGl2ZV9ub25ibGFua19saW5lc18gID0+ICRpKyssCiAgICAgICAgX2NvbnNlY3V0aXZlX25ld19ibGFua19saW5lc18gPT4gJGkrKywKICAgICAgICBfZmlyc3RfbGluZV9sZW5ndGhfZXJyb3JfICAgICA9PiAkaSsrLAogICAgICAgIF9tYXhfbGluZV9sZW5ndGhfZXJyb3JfICAgICAgID0+ICRpKyssCiAgICAgICAgX2xhc3RfbGluZV9sZW5ndGhfZXJyb3JfICAgICAgPT4gJGkrKywKICAgICAgICBfZmlyc3RfbGluZV9sZW5ndGhfZXJyb3JfYXRfICA9PiAkaSsrLAogICAgICAgIF9tYXhfbGluZV9sZW5ndGhfZXJyb3JfYXRfICAgID0+ICRpKyssCiAgICAgICAgX2xhc3RfbGluZV9sZW5ndGhfZXJyb3JfYXRfICAgPT4gJGkrKywKICAgICAgICBfbGluZV9sZW5ndGhfZXJyb3JfY291bnRfICAgICA9PiAkaSsrLAogICAgICAgIF9tYXhfb3V0cHV0X2xpbmVfbGVuZ3RoXyAgICAgID0+ICRpKyssCiAgICAgICAgX21heF9vdXRwdXRfbGluZV9sZW5ndGhfYXRfICAgPT4gJGkrKywKICAgICAgICBfcktfY2hlY2tsaXN0XyAgICAgICAgICAgICAgICA9PiAkaSsrLAogICAgICAgIF9LX2Fycml2YWxfb3JkZXJfbWF0Y2hlc18gICAgID0+ICRpKyssCiAgICAgICAgX0tfc2VxdWVuY2VfZXJyb3JfbXNnXyAgICAgICAgPT4gJGkrKywKICAgICAgICBfS19sYXN0X2Fycml2YWxfICAgICAgICAgICAgICA9PiAkaSsrLAogICAgICAgIF9zYXZlX2xvZ2ZpbGVfICAgICAgICAgICAgICAgID0+ICRpKyssCiAgICAgICAgX3JvdXRwdXRfc3RyaW5nXyAgICAgICAgICAgICAgPT4gJGkrKywKICAgICAgICBfaW5wdXRfc3RyZWFtX25hbWVfICAgICAgICAgICA9PiAkaSsrLAogICAgfTsKfSAjIyBlbmQgQkVHSU4KCnN1YiBEaWUgewogICAgbXkgKCRtc2cpID0gQF87CiAgICBQZXJsOjpUaWR5OjpEaWUoJG1zZyk7CiAgICBjcm9hayAidW5leHBlY3RlZCByZXR1cm4gZnJvbSBQZXJsOjpUaWR5OjpEaWUiOwp9CgpzdWIgRmF1bHQgewogICAgbXkgKCAkc2VsZiwgJG1zZyApID0gQF87CgogICAgIyBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGZvciBlcnJvcnMgdGhhdCByZWFsbHkgc2hvdWxkIG5vdCBvY2N1cgogICAgIyBleGNlcHQgaWYgdGhlcmUgaGFzIGJlZW4gYSBidWcgaW50cm9kdWNlZCBieSBhIHJlY2VudCBwcm9ncmFtIGNoYW5nZS4KICAgICMgUGxlYXNlIGFkZCBjb21tZW50cyBhdCBjYWxscyB0byBGYXVsdCB0byBleHBsYWluIHdoeSB0aGUgY2FsbAogICAgIyBzaG91bGQgbm90IG9jY3VyLCBhbmQgd2hlcmUgdG8gbG9vayB0byBmaXggaXQuCiAgICBteSAoICRwYWNrYWdlMF91dSwgJGZpbGVuYW1lMF91dSwgJGxpbmUwLCAgICAkc3Vicm91dGluZTBfdXUgKSA9IGNhbGxlcigwKTsKICAgIG15ICggJHBhY2thZ2UxX3V1LCAkZmlsZW5hbWUxLCAgICAkbGluZTEsICAgICRzdWJyb3V0aW5lMSApICAgID0gY2FsbGVyKDEpOwogICAgbXkgKCAkcGFja2FnZTJfdXUsICRmaWxlbmFtZTJfdXUsICRsaW5lMl91dSwgJHN1YnJvdXRpbmUyICkgICAgPSBjYWxsZXIoMik7CiAgICBteSAkcGtnID0gX19QQUNLQUdFX187CgogICAgIyBDYXRjaCBwb3RlbnRpYWwgZXJyb3Igb2YgRmF1bHQgbm90IGNhbGxlZCBhcyBhIG1ldGhvZAogICAgbXkgJGlucHV0X3N0cmVhbV9uYW1lOwogICAgaWYgKCAhcmVmKCRzZWxmKSApIHsKICAgICAgICAkaW5wdXRfc3RyZWFtX25hbWUgPSAiKFVOS05PV04pIjsKICAgICAgICAkbXNnICAgICAgICAgICAgICAgPSAiRmF1bHQgbm90IGNhbGxlZCBhcyBhIG1ldGhvZCAtIHBsZWFzZSBmaXhcbiI7CiAgICAgICAgaWYgKCAkc2VsZiAmJiBsZW5ndGgoJHNlbGYpIDwgTE9OR19NRVNTQUdFICkgeyAkbXNnIC49ICRzZWxmIH0KICAgICAgICAkc2VsZiA9IHVuZGVmOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJGlucHV0X3N0cmVhbV9uYW1lID0gJHNlbGYtPltfaW5wdXRfc3RyZWFtX25hbWVfXTsKICAgIH0KCiAgICBEaWUoPDxFT00pOwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hpbGUgb3BlcmF0aW5nIG9uIGlucHV0IHN0cmVhbSB3aXRoIG5hbWU6ICckaW5wdXRfc3RyZWFtX25hbWUnCkEgZmF1bHQgd2FzIGRldGVjdGVkIGF0IGxpbmUgJGxpbmUwIG9mIHN1YiAnJHN1YnJvdXRpbmUxJwppbiBmaWxlICckZmlsZW5hbWUxJwp3aGljaCB3YXMgY2FsbGVkIGZyb20gbGluZSAkbGluZTEgb2Ygc3ViICckc3Vicm91dGluZTInCk1lc3NhZ2U6ICckbXNnJwpUaGlzIGlzIHByb2JhYmx5IGFuIGVycm9yIGludHJvZHVjZWQgYnkgYSByZWNlbnQgcHJvZ3JhbW1pbmcgY2hhbmdlLgokcGtnIHJlcG9ydHMgVkVSU0lPTj0nJFZFUlNJT04nLgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KRU9NCgogICAgY3JvYWsgInVuZXhwZWN0ZWQgcmV0dXJuIGZyb20gc3ViIERpZSI7Cn0gIyMgZW5kIHN1YiBGYXVsdAoKc3ViIHdhcm5pbmcgewogICAgbXkgKCAkc2VsZiwgJG1zZyApID0gQF87CgogICAgIyBsb2cgYSB3YXJuaW5nIG1lc3NhZ2UgZnJvbSBhbnkgY2FsbGVyCiAgICBteSAkbG9nZ2VyX29iamVjdCA9ICRzZWxmLT5bX2xvZ2dlcl9vYmplY3RfXTsKICAgIGlmICgkbG9nZ2VyX29iamVjdCkgeyAkbG9nZ2VyX29iamVjdC0+d2FybmluZygkbXNnKTsgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgd2FybmluZwoKc3ViIHdyaXRlX2xvZ2ZpbGVfZW50cnkgewogICAgbXkgKCAkc2VsZiwgJG1zZyApID0gQF87CiAgICBteSAkbG9nZ2VyX29iamVjdCA9ICRzZWxmLT5bX2xvZ2dlcl9vYmplY3RfXTsKICAgIGlmICgkbG9nZ2VyX29iamVjdCkgewogICAgICAgICRsb2dnZXJfb2JqZWN0LT53cml0ZV9sb2dmaWxlX2VudHJ5KCRtc2cpOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgd3JpdGVfbG9nZmlsZV9lbnRyeQoKc3ViIG5ldyB7CiAgICBteSAoICRjbGFzcywgJGxpbmVfc2lua19vYmplY3QsICRyT3B0cywgJGxvZ2dlcl9vYmplY3QgKSA9IEBfOwoKICAgIG15ICRzZWxmID0gW107CiAgICBibGVzcyAkc2VsZiwgJGNsYXNzOwogICAgJHNlbGYtPltfbG9nZ2VyX29iamVjdF9dICAgICAgICAgICAgICAgPSAkbG9nZ2VyX29iamVjdDsKICAgICRzZWxmLT5bX3JPcHRzX10gICAgICAgICAgICAgICAgICAgICAgID0gJHJPcHRzOwogICAgJHNlbGYtPltfb3V0cHV0X2xpbmVfbnVtYmVyX10gICAgICAgICAgPSAxOwogICAgJHNlbGYtPltfY29uc2VjdXRpdmVfYmxhbmtfbGluZXNfXSAgICAgPSAwOwogICAgJHNlbGYtPltfY29uc2VjdXRpdmVfbm9uYmxhbmtfbGluZXNfXSAgPSAwOwogICAgJHNlbGYtPltfY29uc2VjdXRpdmVfbmV3X2JsYW5rX2xpbmVzX10gPSAwOwogICAgJHNlbGYtPltfZmlyc3RfbGluZV9sZW5ndGhfZXJyb3JfXSAgICAgPSAwOwogICAgJHNlbGYtPltfbWF4X2xpbmVfbGVuZ3RoX2Vycm9yX10gICAgICAgPSAwOwogICAgJHNlbGYtPltfbGFzdF9saW5lX2xlbmd0aF9lcnJvcl9dICAgICAgPSAwOwogICAgJHNlbGYtPltfZmlyc3RfbGluZV9sZW5ndGhfZXJyb3JfYXRfXSAgPSAwOwogICAgJHNlbGYtPltfbWF4X2xpbmVfbGVuZ3RoX2Vycm9yX2F0X10gICAgPSAwOwogICAgJHNlbGYtPltfbGFzdF9saW5lX2xlbmd0aF9lcnJvcl9hdF9dICAgPSAwOwogICAgJHNlbGYtPltfbGluZV9sZW5ndGhfZXJyb3JfY291bnRfXSAgICAgPSAwOwogICAgJHNlbGYtPltfbWF4X291dHB1dF9saW5lX2xlbmd0aF9dICAgICAgPSAwOwogICAgJHNlbGYtPltfbWF4X291dHB1dF9saW5lX2xlbmd0aF9hdF9dICAgPSAwOwogICAgJHNlbGYtPltfcktfY2hlY2tsaXN0X10gICAgICAgICAgICAgICAgPSBbXTsKICAgICRzZWxmLT5bX0tfYXJyaXZhbF9vcmRlcl9tYXRjaGVzX10gICAgID0gMDsKICAgICRzZWxmLT5bX0tfc2VxdWVuY2VfZXJyb3JfbXNnX10gICAgICAgID0gRU1QVFlfU1RSSU5HOwogICAgJHNlbGYtPltfS19sYXN0X2Fycml2YWxfXSAgICAgICAgICAgICAgPSAtMTsKICAgICRzZWxmLT5bX3NhdmVfbG9nZmlsZV9dID0KICAgICAgZGVmaW5lZCgkbG9nZ2VyX29iamVjdCkgJiYgJGxvZ2dlcl9vYmplY3QtPmdldF9zYXZlX2xvZ2ZpbGUoKTsKCiAgICAjICckbGluZV9zaW5rX29iamVjdCcgaXMgYSBTQ0FMQVIgcmVmIHdoaWNoIHJlY2VpdmVzIHRoZSBsaW5lcy4KICAgIG15ICRyZWYgPSByZWYoJGxpbmVfc2lua19vYmplY3QpOwogICAgaWYgKCAhJHJlZiApIHsKICAgICAgICAkc2VsZi0+RmF1bHQoIkZpbGVXcml0ZXIgZXhwZWN0cyBsaW5lX3Npbmtfb2JqZWN0IHRvIGJlIGEgcmVmXG4iKTsKICAgIH0KICAgIGVsc2lmICggJHJlZiBlcSAnU0NBTEFSJyApIHsKICAgICAgICAkc2VsZi0+W19yb3V0cHV0X3N0cmluZ19dID0gJGxpbmVfc2lua19vYmplY3Q7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBteSAkc3RyID0gJHJlZjsKICAgICAgICBpZiAoIGxlbmd0aCgkc3RyKSA+IDYzICkgeyAkc3RyID0gc3Vic3RyKCAkc3RyLCAwLCA2MCApIC4gJy4uLicgfQogICAgICAgICRzZWxmLT5GYXVsdCg8PEVPTSk7CkZpbGVXcml0ZXIgZXhwZWN0cyAnbGluZV9zaW5rX29iamVjdCcgdG8gYmUgcmVmIHRvIFNDQUxBUiBidXQgaXQgaXMgcmVmIHRvOgokc3RyCkVPTQogICAgfQoKICAgIG15ICRpbnB1dF9zdHJlYW1fbmFtZSA9IEVNUFRZX1NUUklORzsKICAgIGlmICgkbG9nZ2VyX29iamVjdCkgewogICAgICAgICRpbnB1dF9zdHJlYW1fbmFtZSA9ICRsb2dnZXJfb2JqZWN0LT5nZXRfaW5wdXRfc3RyZWFtX25hbWUoKTsKICAgIH0KICAgICRzZWxmLT5bX2lucHV0X3N0cmVhbV9uYW1lX10gPSAkaW5wdXRfc3RyZWFtX25hbWU7CgogICAgcmV0dXJuICRzZWxmOwp9ICMjIGVuZCBzdWIgbmV3CgpzdWIgc2V0dXBfY29udmVyZ2VuY2VfdGVzdCB7CiAgICBteSAoICRzZWxmLCAkcmxpc3QgKSA9IEBfOwoKICAgICMgU2V0dXAgdGhlIGNvbnZlcmdlbmNlIHRlc3QsCgogICAgIyBHaXZlbjoKICAgICMgICRybGlzdCA9IGEgcmVmZXJlbmNlIHRvIGEgbGlzdCBvZiBsaW5lLWVuZGluZyB0b2tlbiBpbmRleGVzICdLJyBvZgogICAgIyAgdGhlIGlucHV0IHN0cmVhbS4gV2Ugd2lsbCBjb21wYXJlIHRoZXNlIHdpdGggdGhlIGxpbmUtZW5kaW5nIHRva2VuCiAgICAjICBpbmRleGVzIG9mIHRoZSBvdXRwdXQgc3RyZWFtLiBJZiB0aGV5IGFyZSBpZGVudGljYWwsIHRoZW4gd2UgaGF2ZQogICAgIyAgY29udmVyZ2VuY2UuCiAgICBpZiAoIEB7JHJsaXN0fSApIHsKCiAgICAgICAgIyBXZSBhcmUgZ29pbmcgdG8gZGVzdHJveSB0aGUgbGlzdCwgc28gbWFrZSBhIGNvcHkgYW5kIHB1dCBpbgogICAgICAgICMgcmV2ZXJzZSBvcmRlciBzbyB3ZSBjYW4gcG9wIHZhbHVlcyBhcyB0aGV5IGFycml2ZQogICAgICAgIG15IEBsaXN0ID0gQHskcmxpc3R9OwogICAgICAgIGlmICggJGxpc3RbMF0gPCAkbGlzdFstMV0gKSB7CiAgICAgICAgICAgIEBsaXN0ID0gcmV2ZXJzZSBAbGlzdDsKICAgICAgICB9CiAgICAgICAgJHNlbGYtPltfcktfY2hlY2tsaXN0X10gPSBcQGxpc3Q7CiAgICB9CgogICAgIyBXZSB3aWxsIHplcm8gdGhpcyBmbGFnIG9uIGFueSBlcnJvciBpbiBhcnJpdmFsIG9yZGVyOgogICAgJHNlbGYtPltfS19hcnJpdmFsX29yZGVyX21hdGNoZXNfXSA9IDE7CiAgICAkc2VsZi0+W19LX3NlcXVlbmNlX2Vycm9yX21zZ19dICAgID0gRU1QVFlfU1RSSU5HOwogICAgJHNlbGYtPltfS19sYXN0X2Fycml2YWxfXSAgICAgICAgICA9IC0xOwogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgc2V0dXBfY29udmVyZ2VuY2VfdGVzdAoKc3ViIGdldF9jb252ZXJnZW5jZV9jaGVjayB7CiAgICBteSAoJHNlbGYpID0gQF87CgogICAgIyBjb252ZXJnZWQgaWY6CiAgICAjIC0gYWxsIGV4cGVjdGVkIGluZGV4ZXMgYXJyaXZlZAogICAgIyAtIGFuZCBpbiBjb3JyZWN0IG9yZGVyCiAgICByZXR1cm4gIUB7ICRzZWxmLT5bX3JLX2NoZWNrbGlzdF9dIH0KICAgICAgJiYgJHNlbGYtPltfS19hcnJpdmFsX29yZGVyX21hdGNoZXNfXTsKCn0gIyMgZW5kIHN1YiBnZXRfY29udmVyZ2VuY2VfY2hlY2sKCnN1YiBnZXRfb3V0cHV0X2xpbmVfbnVtYmVyIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICByZXR1cm4gJHNlbGYtPltfb3V0cHV0X2xpbmVfbnVtYmVyX107Cn0KCnN1YiBkZWNyZW1lbnRfb3V0cHV0X2xpbmVfbnVtYmVyIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICAkc2VsZi0+W19vdXRwdXRfbGluZV9udW1iZXJfXS0tOwogICAgcmV0dXJuOwp9CgpzdWIgZ2V0X2NvbnNlY3V0aXZlX25vbmJsYW5rX2xpbmVzIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICByZXR1cm4gJHNlbGYtPltfY29uc2VjdXRpdmVfbm9uYmxhbmtfbGluZXNfXTsKfQoKc3ViIGdldF9jb25zZWN1dGl2ZV9ibGFua19saW5lcyB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgcmV0dXJuICRzZWxmLT5bX2NvbnNlY3V0aXZlX2JsYW5rX2xpbmVzX107Cn0KCnN1YiByZXNldF9jb25zZWN1dGl2ZV9ibGFua19saW5lcyB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgJHNlbGYtPltfY29uc2VjdXRpdmVfYmxhbmtfbGluZXNfXSA9IDA7CiAgICByZXR1cm47Cn0KCnN1YiB3YW50X2JsYW5rX2xpbmUgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgIGlmICggISRzZWxmLT5bX2NvbnNlY3V0aXZlX2JsYW5rX2xpbmVzX10gKSB7CiAgICAgICAgJHNlbGYtPndyaXRlX2JsYW5rX2NvZGVfbGluZSgpOwogICAgfQogICAgcmV0dXJuOwp9ICMjIGVuZCBzdWIgd2FudF9ibGFua19saW5lCgpzdWIgcmVxdWlyZV9ibGFua19jb2RlX2xpbmVzIHsKICAgIG15ICggJHNlbGYsICRjb3VudCApID0gQF87CgogICAgIyBHaXZlbjoKICAgICMgICAkY291bnQgPSBudW1iZXIgb2YgYmxhbmsgbGluZXMgdG8gd3JpdGUKICAgICMgV3JpdGUgb3V0ICRjb3VudCBibGFuayBsaW5lcyByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiAtbWJsCiAgICAjIHVubGVzcyAtbWJsPTAuICBUaGlzIGFsbG93cyBleHRyYSBibGFuayBsaW5lcyB0byBiZSB3cml0dGVuIGZvciBzdWJzIGFuZAogICAgIyBwYWNrYWdlcyBldmVuIHdpdGggdGhlIGRlZmF1bHQgLW1ibD0xCiAgICBteSAkbmVlZCAgID0gJGNvdW50IC0gJHNlbGYtPltfY29uc2VjdXRpdmVfYmxhbmtfbGluZXNfXTsKICAgIG15ICRyT3B0cyAgPSAkc2VsZi0+W19yT3B0c19dOwogICAgbXkgJGZvcmNlZCA9ICRyT3B0cy0+eydtYXhpbXVtLWNvbnNlY3V0aXZlLWJsYW5rLWxpbmVzJ30gPiAwOwogICAgZm9yZWFjaCAoIDAgLi4gJG5lZWQgLSAxICkgewogICAgICAgICRzZWxmLT53cml0ZV9ibGFua19jb2RlX2xpbmUoJGZvcmNlZCk7CiAgICB9CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiByZXF1aXJlX2JsYW5rX2NvZGVfbGluZXMKCnN1YiB3cml0ZV9ibGFua19jb2RlX2xpbmUgewogICAgbXkgKCAkc2VsZiwgKCRmb3JjZWQpICkgPSBAXzsKCiAgICAjIFdyaXRlIGEgYmxhbmsgbGluZSBvZiBjb2RlLCBnaXZlbjoKICAgICMgICRmb3JjZWQgPSBvcHRpb25hbCBmbGFnIHdoaWNoLCBpZiBzZXQsIGZvcmNlcyB0aGUgYmxhbmsgbGluZQogICAgIyAgICB0byBiZSB3cml0dGVuLiBUaGlzIGFsbG93cyB0aGUgLW1ibCBmbGFnIHRvIGJlIHRlbXBvcmFyaWx5CiAgICAjICAgIGV4Y2VlZGVkLgoKICAgIG15ICRyT3B0cyA9ICRzZWxmLT5bX3JPcHRzX107CiAgICByZXR1cm4KICAgICAgaWYgKCEkZm9yY2VkCiAgICAgICAgJiYgJHNlbGYtPltfY29uc2VjdXRpdmVfYmxhbmtfbGluZXNfXSA+PQogICAgICAgICRyT3B0cy0+eydtYXhpbXVtLWNvbnNlY3V0aXZlLWJsYW5rLWxpbmVzJ30gKTsKCiAgICAkc2VsZi0+W19jb25zZWN1dGl2ZV9ub25ibGFua19saW5lc19dID0gMDsKCiAgICAjIEJhbGFuY2Ugb2xkIGJsYW5rcyBhZ2FpbnN0IG5ldyAoZm9yY2VkKSBibGFua3MgaW5zdGVhZCBvZiB3cml0aW5nIHRoZW0uCiAgICAjIFRoaXMgZml4ZXMgY2FzZSBiMTA3My4KICAgIGlmICggISRmb3JjZWQgJiYgJHNlbGYtPltfY29uc2VjdXRpdmVfbmV3X2JsYW5rX2xpbmVzX10gPiAwICkgewogICAgICAgICRzZWxmLT5bX2NvbnNlY3V0aXZlX25ld19ibGFua19saW5lc19dLS07CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICR7ICRzZWxmLT5bX3JvdXRwdXRfc3RyaW5nX10gfSAuPSAiXG4iOwoKICAgICRzZWxmLT5bX291dHB1dF9saW5lX251bWJlcl9dKys7CiAgICAkc2VsZi0+W19jb25zZWN1dGl2ZV9ibGFua19saW5lc19dKys7CiAgICAkc2VsZi0+W19jb25zZWN1dGl2ZV9uZXdfYmxhbmtfbGluZXNfXSsrIGlmICgkZm9yY2VkKTsKCiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiB3cml0ZV9ibGFua19jb2RlX2xpbmUKCnVzZSBjb25zdGFudCBNQVhfUFJJTlRFRF9DSEFSUyA9PiA4MDsKCnN1YiB3cml0ZV9jb2RlX2xpbmUgewogICAgbXkgKCAkc2VsZiwgJHN0ciwgJEsgKSA9IEBfOwoKICAgICMgV3JpdGUgYSBsaW5lIG9mIGNvZGUsIGdpdmVuCiAgICAjICAkc3RyID0gdGhlIGxpbmUgb2YgY29kZQogICAgIyAgJEsgICA9IGFuIG9wdGlvbmFsIGNoZWNrIGludGVnZXIgd2hpY2gsIGlmIGlmIGdpdmVuLCBtdXN0CiAgICAjICAgICAgIGluY3JlYXNlIG1vbm90b25pY2FsbHkuIFRoaXMgd2FzIGFkZGVkIHRvIGNhdGNoIGNhY2hlCiAgICAjICAgICAgIHNlcXVlbmNlIGVycm9ycyBpbiB0aGUgdmVydGljYWwgYWxpZ25lci4KCiAgICAkc2VsZi0+W19jb25zZWN1dGl2ZV9ibGFua19saW5lc19dICAgICA9IDA7CiAgICAkc2VsZi0+W19jb25zZWN1dGl2ZV9uZXdfYmxhbmtfbGluZXNfXSA9IDA7CiAgICAkc2VsZi0+W19jb25zZWN1dGl2ZV9ub25ibGFua19saW5lc19dKys7CiAgICAkc2VsZi0+W19vdXRwdXRfbGluZV9udW1iZXJfXSsrOwoKICAgICR7ICRzZWxmLT5bX3JvdXRwdXRfc3RyaW5nX10gfSAuPSAkc3RyOwoKICAgIGlmICggJHNlbGYtPltfc2F2ZV9sb2dmaWxlX10gKSB7ICRzZWxmLT5jaGVja19saW5lX2xlbmd0aHMoJHN0cikgfQoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIENvbnZlcmdlbmNlIGFuZCBlcnJvciBjaGVjawogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGlmICggZGVmaW5lZCgkSykgKSB7CgogICAgICAgICMgQ29udmVyZ2VuY2UgY2hlY2s6IHdlIGFyZSBjaGVja2luZyBpZiBhbGwgZGVmaW5lZCBLIHZhbHVlcyBhcnJpdmUgaW4KICAgICAgICAjIHRoZSBvcmRlciB3aGljaCB3YXMgZGVmaW5lZCBieSB0aGUgY2FsbGVyLiAgUXVpdCBjaGVja2luZyBpZiBhbnkKICAgICAgICAjIHVuZXhwZWN0ZWQgSyB2YWx1ZSBhcnJpdmVzLgogICAgICAgIGlmICggJHNlbGYtPltfS19hcnJpdmFsX29yZGVyX21hdGNoZXNfXSApIHsKICAgICAgICAgICAgbXkgJEt0ID0gcG9wIEB7ICRzZWxmLT5bX3JLX2NoZWNrbGlzdF9dIH07CiAgICAgICAgICAgIGlmICggIWRlZmluZWQoJEt0KSB8fCAkS3QgIT0gJEsgKSB7CiAgICAgICAgICAgICAgICAkc2VsZi0+W19LX2Fycml2YWxfb3JkZXJfbWF0Y2hlc19dID0gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBDaGVjayBmb3Igb3V0LW9mLW9yZGVyIGFycml2YWxzIG9mIGluZGV4IEsuIFRoZSBLIHZhbHVlcyBhcmUgdGhlCiAgICAgICAgIyB0b2tlbiBpbmRleGVzIG9mIHRoZSBsYXN0IHRva2VuIG9mIGNvZGUgbGluZXMsIGFuZCB0aGV5IHNob3VsZCBjb21lCiAgICAgICAgIyBvdXQgaW4gaW5jcmVhc2luZyBvcmRlci4gIE90aGVyd2lzZSBzb21ldGhpbmcgaXMgc2VyaW91c2x5IHdyb25nLgogICAgICAgICMgTW9zdCBsaWtlbHkgYSByZWNlbnQgcHJvZ3JhbW1pbmcgY2hhbmdlIHRvIFZlcnRpY2FsQWxpZ25lci5wbSBoYXMKICAgICAgICAjIGNhdXNlZCBsaW5lcyB0byBnbyBvdXQgaW4gdGhlIHdyb25nIG9yZGVyLiAgVGhpcyBjb3VsZCBoYXBwZW4gaWYKICAgICAgICAjIGVpdGhlciB0aGUgY2FjaGUgb3IgYnVmZmVyIHRoYXQgaXQgdXNlcyBhcmUgZW1wdGllZCBpbiB0aGUgd3JvbmcKICAgICAgICAjIG9yZGVyLgogICAgICAgIGlmICggJEsgPCAkc2VsZi0+W19LX2xhc3RfYXJyaXZhbF9dCiAgICAgICAgICAgICYmICEkc2VsZi0+W19LX3NlcXVlbmNlX2Vycm9yX21zZ19dICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICRLX3ByZXYgPSAkc2VsZi0+W19LX2xhc3RfYXJyaXZhbF9dOwoKICAgICAgICAgICAgY2hvbXAgJHN0cjsKICAgICAgICAgICAgaWYgKCBsZW5ndGgoJHN0cikgPiBNQVhfUFJJTlRFRF9DSEFSUyApIHsKICAgICAgICAgICAgICAgICRzdHIgPSBzdWJzdHIoICRzdHIsIDAsIE1BWF9QUklOVEVEX0NIQVJTICkgLiAiLi4uIjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJG1zZyA9IDw8RU9NOwpMaW5lcyBoYXZlIGFycml2ZWQgb3V0IG9mIG9yZGVyIGluIHN1YiAnd3JpdGVfY29kZV9saW5lJwphcyBkZXRlY3RlZCBieSB0b2tlbiBpbmRleCBLPSRLIGFycml2aW5nIGFmdGVyIGluZGV4IEs9JEtfcHJldiBpbiB0aGUgZm9sbG93aW5nIGxpbmU6CiRzdHIKVGhpcyBpcyBwcm9iYWJseSBkdWUgdG8gYSByZWNlbnQgcHJvZ3JhbW1pbmcgY2hhbmdlIGFuZCBuZWVkcyB0byBiZSBmaXhlZC4KRU9NCgogICAgICAgICAgICAjIEFsd2F5cyBkaWUgZHVyaW5nIGRldmVsb3BtZW50LCB0aGlzIG5lZWRzIHRvIGJlIGZpeGVkCiAgICAgICAgICAgIGlmIChERVZFTF9NT0RFKSB7ICRzZWxmLT5GYXVsdCgkbXNnKSB9CgogICAgICAgICAgICAjIE90aGVyd2lzZSB3YXJuIGlmIHN0cmluZyBpcyBub3QgZW1wdHkgKGFkZGVkIGZvciBiMTM3OCkKICAgICAgICAgICAgJHNlbGYtPndhcm5pbmcoJG1zZykgaWYgKCBsZW5ndGgoJHN0cikgKTsKCiAgICAgICAgICAgICMgT25seSBpc3N1ZSB0aGlzIHdhcm5pbmcgb25jZQogICAgICAgICAgICAkc2VsZi0+W19LX3NlcXVlbmNlX2Vycm9yX21zZ19dID0gJG1zZzsKCiAgICAgICAgfQogICAgICAgICRzZWxmLT5bX0tfbGFzdF9hcnJpdmFsX10gPSAkSzsKICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHdyaXRlX2NvZGVfbGluZQoKc3ViIHdyaXRlX2xpbmUgewogICAgbXkgKCAkc2VsZiwgJHN0ciApID0gQF87CgogICAgIyBXcml0ZSBhIGxpbmUgZGlyZWN0bHkgdG8gdGhlIG91dHB1dCwgd2l0aG91dCBhbnkgY291bnRpbmcgb2YgYmxhbmsgb3IKICAgICMgbm9uLWJsYW5rIGxpbmVzLgoKICAgICMgR2l2ZW46CiAgICAjICAgJHN0ciA9IGxpbmUgb2YgdGV4dCB0byB3cml0ZQoKICAgICR7ICRzZWxmLT5bX3JvdXRwdXRfc3RyaW5nX10gfSAuPSAkc3RyOwoKICAgIGlmICggY2hvbXAgJHN0ciApICAgICAgICAgICAgICB7ICRzZWxmLT5bX291dHB1dF9saW5lX251bWJlcl9dKys7IH0KICAgIGlmICggJHNlbGYtPltfc2F2ZV9sb2dmaWxlX10gKSB7ICRzZWxmLT5jaGVja19saW5lX2xlbmd0aHMoJHN0cikgfQoKICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHdyaXRlX2xpbmUKCnN1YiBjaGVja19saW5lX2xlbmd0aHMgewogICAgbXkgKCAkc2VsZiwgJHN0ciApID0gQF87CgogICAgIyBDb2xsZWN0IGluZm8gb24gbGluZSBsZW5ndGhzIGZvciBsb2dmaWxlCiAgICAjIEdpdmVuOgogICAgIyAgICRzdHIgPSBsaW5lIG9mIHRleHQgYmVpbmcgd3JpdHRlbgoKICAgICMgVGhpcyBjYWxjdWxhdGlvbiBvZiBleGNlc3MgbGluZSBsZW5ndGggaWdub3JlcyBhbnkgaW50ZXJuYWwgdGFicwogICAgbXkgJHJPcHRzID0gJHNlbGYtPltfck9wdHNfXTsKICAgIGNob21wICRzdHI7CiAgICBteSAkbGVuX3N0ciA9IGxlbmd0aCgkc3RyKTsKICAgIG15ICRleGNlZWQgID0gJGxlbl9zdHIgLSAkck9wdHMtPnsnbWF4aW11bS1saW5lLWxlbmd0aCd9OwogICAgaWYgKCAkc3RyICYmIHN1YnN0ciggJHN0ciwgMCwgMSApIGVxICJcdCIgJiYgJHN0ciA9fiAvXlx0Ky9nICkgewogICAgICAgICRleGNlZWQgKz0gcG9zKCRzdHIpICogJHJPcHRzLT57J2luZGVudC1jb2x1bW5zJ307CiAgICB9CgogICAgIyBOb3RlIHRoYXQgd2UganVzdCBpbmNyZW1lbnRlZCBvdXRwdXQgbGluZSBudW1iZXIgdG8gZnV0dXJlIHZhbHVlCiAgICAjIHNvIHdlIG11c3Qgc3VidHJhY3QgMSBmb3IgY3VycmVudCBsaW5lIG51bWJlcgogICAgaWYgKCAkbGVuX3N0ciA+ICRzZWxmLT5bX21heF9vdXRwdXRfbGluZV9sZW5ndGhfXSApIHsKICAgICAgICAkc2VsZi0+W19tYXhfb3V0cHV0X2xpbmVfbGVuZ3RoX10gPSAkbGVuX3N0cjsKICAgICAgICAkc2VsZi0+W19tYXhfb3V0cHV0X2xpbmVfbGVuZ3RoX2F0X10gPQogICAgICAgICAgJHNlbGYtPltfb3V0cHV0X2xpbmVfbnVtYmVyX10gLSAxOwogICAgfQoKICAgIGlmICggJGV4Y2VlZCA+IDAgKSB7CiAgICAgICAgbXkgJG91dHB1dF9saW5lX251bWJlciA9ICRzZWxmLT5bX291dHB1dF9saW5lX251bWJlcl9dOwogICAgICAgICRzZWxmLT5bX2xhc3RfbGluZV9sZW5ndGhfZXJyb3JfXSAgICA9ICRleGNlZWQ7CiAgICAgICAgJHNlbGYtPltfbGFzdF9saW5lX2xlbmd0aF9lcnJvcl9hdF9dID0gJG91dHB1dF9saW5lX251bWJlciAtIDE7CiAgICAgICAgaWYgKCAkc2VsZi0+W19saW5lX2xlbmd0aF9lcnJvcl9jb3VudF9dID09IDAgKSB7CiAgICAgICAgICAgICRzZWxmLT5bX2ZpcnN0X2xpbmVfbGVuZ3RoX2Vycm9yX10gICAgPSAkZXhjZWVkOwogICAgICAgICAgICAkc2VsZi0+W19maXJzdF9saW5lX2xlbmd0aF9lcnJvcl9hdF9dID0gJG91dHB1dF9saW5lX251bWJlciAtIDE7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRzZWxmLT5bX2xhc3RfbGluZV9sZW5ndGhfZXJyb3JfXSA+CiAgICAgICAgICAgICRzZWxmLT5bX21heF9saW5lX2xlbmd0aF9lcnJvcl9dICkKICAgICAgICB7CiAgICAgICAgICAgICRzZWxmLT5bX21heF9saW5lX2xlbmd0aF9lcnJvcl9dICAgID0gJGV4Y2VlZDsKICAgICAgICAgICAgJHNlbGYtPltfbWF4X2xpbmVfbGVuZ3RoX2Vycm9yX2F0X10gPSAkb3V0cHV0X2xpbmVfbnVtYmVyIC0gMTsKICAgICAgICB9CgogICAgICAgIGlmICggJHNlbGYtPltfbGluZV9sZW5ndGhfZXJyb3JfY291bnRfXSA8IE1BWF9OQUdfTUVTU0FHRVMgKSB7CiAgICAgICAgICAgICRzZWxmLT53cml0ZV9sb2dmaWxlX2VudHJ5KAogICAgICAgICAgICAgICAgIkxpbmUgbGVuZ3RoIGV4Y2VlZGVkIGJ5ICRleGNlZWQgY2hhcmFjdGVyc1xuIik7CiAgICAgICAgfQogICAgICAgICRzZWxmLT5bX2xpbmVfbGVuZ3RoX2Vycm9yX2NvdW50X10rKzsKICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGNoZWNrX2xpbmVfbGVuZ3RocwoKc3ViIHJlcG9ydF9saW5lX2xlbmd0aF9lcnJvcnMgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKCiAgICAjIFdyaXRlIHN1bW1hcnkgaW5mbyBhYm91dCBsaW5lIGxlbmd0aHMgdG8gdGhlIGxvZyBmaWxlCgogICAgbXkgJHJPcHRzICAgICAgICAgICAgICAgICAgID0gJHNlbGYtPltfck9wdHNfXTsKICAgIG15ICRsaW5lX2xlbmd0aF9lcnJvcl9jb3VudCA9ICRzZWxmLT5bX2xpbmVfbGVuZ3RoX2Vycm9yX2NvdW50X107CiAgICBpZiAoICRsaW5lX2xlbmd0aF9lcnJvcl9jb3VudCA9PSAwICkgewogICAgICAgICRzZWxmLT53cml0ZV9sb2dmaWxlX2VudHJ5KAogICAgICAgICAgICAiTm8gbGluZXMgZXhjZWVkZWQgJHJPcHRzLT57J21heGltdW0tbGluZS1sZW5ndGgnfSBjaGFyYWN0ZXJzXG4iKTsKICAgICAgICBteSAkbWF4X291dHB1dF9saW5lX2xlbmd0aCAgICA9ICRzZWxmLT5bX21heF9vdXRwdXRfbGluZV9sZW5ndGhfXTsKICAgICAgICBteSAkbWF4X291dHB1dF9saW5lX2xlbmd0aF9hdCA9ICRzZWxmLT5bX21heF9vdXRwdXRfbGluZV9sZW5ndGhfYXRfXTsKICAgICAgICAkc2VsZi0+d3JpdGVfbG9nZmlsZV9lbnRyeSgKIiAgTWF4aW11bSBvdXRwdXQgbGluZSBsZW5ndGggd2FzICRtYXhfb3V0cHV0X2xpbmVfbGVuZ3RoIGF0IGxpbmUgJG1heF9vdXRwdXRfbGluZV9sZW5ndGhfYXRcbiIKICAgICAgICApOwoKICAgIH0KICAgIGVsc2UgewoKICAgICAgICBteSAkd29yZCA9ICggJGxpbmVfbGVuZ3RoX2Vycm9yX2NvdW50ID4gMSApID8gInMiIDogRU1QVFlfU1RSSU5HOwogICAgICAgICRzZWxmLT53cml0ZV9sb2dmaWxlX2VudHJ5KAoiJGxpbmVfbGVuZ3RoX2Vycm9yX2NvdW50IG91dHB1dCBsaW5lJHdvcmQgZXhjZWVkZWQgJHJPcHRzLT57J21heGltdW0tbGluZS1sZW5ndGgnfSBjaGFyYWN0ZXJzOlxuIgogICAgICAgICk7CgogICAgICAgICR3b3JkID0gKCAkbGluZV9sZW5ndGhfZXJyb3JfY291bnQgPiAxICkgPyAiRmlyc3QiIDogRU1QVFlfU1RSSU5HOwogICAgICAgIG15ICRmaXJzdF9saW5lX2xlbmd0aF9lcnJvciAgICA9ICRzZWxmLT5bX2ZpcnN0X2xpbmVfbGVuZ3RoX2Vycm9yX107CiAgICAgICAgbXkgJGZpcnN0X2xpbmVfbGVuZ3RoX2Vycm9yX2F0ID0gJHNlbGYtPltfZmlyc3RfbGluZV9sZW5ndGhfZXJyb3JfYXRfXTsKICAgICAgICAkc2VsZi0+d3JpdGVfbG9nZmlsZV9lbnRyeSgKIiAkd29yZCBhdCBsaW5lICRmaXJzdF9saW5lX2xlbmd0aF9lcnJvcl9hdCBieSAkZmlyc3RfbGluZV9sZW5ndGhfZXJyb3IgY2hhcmFjdGVyc1xuIgogICAgICAgICk7CgogICAgICAgIGlmICggJGxpbmVfbGVuZ3RoX2Vycm9yX2NvdW50ID4gMSApIHsKICAgICAgICAgICAgbXkgJG1heF9saW5lX2xlbmd0aF9lcnJvciAgICA9ICRzZWxmLT5bX21heF9saW5lX2xlbmd0aF9lcnJvcl9dOwogICAgICAgICAgICBteSAkbWF4X2xpbmVfbGVuZ3RoX2Vycm9yX2F0ID0gJHNlbGYtPltfbWF4X2xpbmVfbGVuZ3RoX2Vycm9yX2F0X107CiAgICAgICAgICAgIG15ICRsYXN0X2xpbmVfbGVuZ3RoX2Vycm9yICAgPSAkc2VsZi0+W19sYXN0X2xpbmVfbGVuZ3RoX2Vycm9yX107CiAgICAgICAgICAgIG15ICRsYXN0X2xpbmVfbGVuZ3RoX2Vycm9yX2F0ID0KICAgICAgICAgICAgICAkc2VsZi0+W19sYXN0X2xpbmVfbGVuZ3RoX2Vycm9yX2F0X107CiAgICAgICAgICAgICRzZWxmLT53cml0ZV9sb2dmaWxlX2VudHJ5KAoiIE1heGltdW0gYXQgbGluZSAkbWF4X2xpbmVfbGVuZ3RoX2Vycm9yX2F0IGJ5ICRtYXhfbGluZV9sZW5ndGhfZXJyb3IgY2hhcmFjdGVyc1xuIgogICAgICAgICAgICApOwogICAgICAgICAgICAkc2VsZi0+d3JpdGVfbG9nZmlsZV9lbnRyeSgKIiBMYXN0IGF0IGxpbmUgJGxhc3RfbGluZV9sZW5ndGhfZXJyb3JfYXQgYnkgJGxhc3RfbGluZV9sZW5ndGhfZXJyb3IgY2hhcmFjdGVyc1xuIgogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIHJlcG9ydF9saW5lX2xlbmd0aF9lcnJvcnMKMTsK</File>
        <File Location="Kernel/cpan-lib/Perl/Tidy/IOScalarArray.pm" Permission="660" Encode="Base64">IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMKIyBUaGlzIGlzIGEgc3RyaXBwZWQgZG93biB2ZXJzaW9uIG9mIElPOjpTY2FsYXJBcnJheQojIEdpdmVuIGEgcmVmZXJlbmNlIHRvIGFuIGFycmF5LCBpdCBzdXBwbGllcyBlaXRoZXI6CiMgYSBnZXRsaW5lIG1ldGhvZCB3aGljaCByZWFkcyBsaW5lcyAobW9kZT0ncicpLCBvcgojIGEgcHJpbnQgbWV0aG9kIHdoaWNoIHJlYWRzIGxpbmVzIChtb2RlPSd3JykKIwojIE5PVEU6IHRoaXMgcm91dGluZSBhc3N1bWVzIHRoYXQgdGhlcmUgYXJlbid0IGFueSBlbWJlZGRlZAojIG5ld2xpbmVzIHdpdGhpbiBhbnkgb2YgdGhlIGFycmF5IGVsZW1lbnRzLiAgVGhlcmUgYXJlIG5vIGNoZWNrcwojIGZvciB0aGF0LgojCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpwYWNrYWdlIFBlcmw6OlRpZHk6OklPU2NhbGFyQXJyYXk7CnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIENhcnA7Cm91ciAkVkVSU0lPTiA9ICcyMDI1MDEwNSc7Cgp1c2UgY29uc3RhbnQgREVWRUxfTU9ERSA9PiAwOwoKc3ViIEFVVE9MT0FEIHsKCiAgICAjIENhdGNoIGFueSB1bmRlZmluZWQgc3ViIGNhbGxzIHNvIHRoYXQgd2UgYXJlIHN1cmUgdG8gZ2V0CiAgICAjIHNvbWUgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbi4gIFRoaXMgc3ViIHNob3VsZCBuZXZlciBiZSBjYWxsZWQKICAgICMgZXhjZXB0IGZvciBhIHByb2dyYW1taW5nIGVycm9yLgogICAgb3VyICRBVVRPTE9BRDsKICAgIHJldHVybiBpZiAoICRBVVRPTE9BRCA9fiAvXGJERVNUUk9ZJC8gKTsKCiAgICAjIE9yaWdpbmFsbHkgdGhlcmUgd2FzIGEgZHVtbXkgc3ViIGNsb3NlLiBBbGwgY2FsbHMgdG8gaXQgc2hvdWxkIGhhdmUgYmVlbgogICAgIyBlbGltaW5hdGVkLCBidXQgZm9yIHNhZmV0eSB3ZSB3aWxsIGNoZWNrIGZvciB0aGVtIGhlcmUuCiAgICByZXR1cm4gMSBpZiAoICRBVVRPTE9BRCA9fiAvXGJjbG9zZSQvICYmICFERVZFTF9NT0RFICk7CiAgICBteSAoICRwa2csICRmbmFtZSwgJGxubyApID0gY2FsbGVyKCk7CiAgICBteSAkbXlfcGFja2FnZSA9IF9fUEFDS0FHRV9fOwogICAgcHJpbnQgeypTVERFUlJ9IDw8RU9NOwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkVycm9yIGRldGVjdGVkIGluIHBhY2thZ2UgJyRteV9wYWNrYWdlJywgdmVyc2lvbiAkVkVSU0lPTgpSZWNlaXZlZCB1bmV4cGVjdGVkIEFVVE9MT0FEIGNhbGwgZm9yIHN1YiAnJEFVVE9MT0FEJwpDYWxsZWQgZnJvbSBwYWNrYWdlOiAnJHBrZycKQ2FsbGVkIGZyb20gRmlsZSAnJGZuYW1lJyAgYXQgbGluZSAnJGxubycKVGhpcyBlcnJvciBpcyBwcm9iYWJseSBkdWUgdG8gYSByZWNlbnQgcHJvZ3JhbW1pbmcgY2hhbmdlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KRU9NCiAgICBleGl0IDE7Cn0gIyMgZW5kIHN1YiBBVVRPTE9BRAoKc3ViIERFU1RST1kgewoKICAgICMgcmVxdWlyZWQgdG8gYXZvaWQgY2FsbCB0byBBVVRPTE9BRCBpbiBzb21lIHZlcnNpb25zIG9mIHBlcmwKfQoKc3ViIG5ldyB7CiAgICBteSAoICRwYWNrYWdlLCAkcmFycmF5LCAkbW9kZSApID0gQF87CiAgICBteSAkcmVmID0gcmVmKCRyYXJyYXkpOwogICAgaWYgKCAkcmVmIG5lICdBUlJBWScgKSB7CiAgICAgICAgY29uZmVzcyA8PEVPTTsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmV4cGVjdGluZyByZWYgdG8gQVJSQVkgYnV0IGdvdCByZWYgdG8gKCRyZWYpOyB0cmFjZSBmb2xsb3dzOgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRU9NCgogICAgfQogICAgaWYgKCAkbW9kZSBlcSAndycgKSB7CiAgICAgICAgQHskcmFycmF5fSA9ICgpOwogICAgICAgIHJldHVybiBibGVzcyBbICRyYXJyYXksICRtb2RlIF0sICRwYWNrYWdlOwogICAgfQogICAgZWxzaWYgKCAkbW9kZSBlcSAncicgKSB7CiAgICAgICAgbXkgJGlfbmV4dCA9IDA7CiAgICAgICAgcmV0dXJuIGJsZXNzIFsgJHJhcnJheSwgJG1vZGUsICRpX25leHQgXSwgJHBhY2thZ2U7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBjb25mZXNzIDw8RU9NOwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZXhwZWN0aW5nIG1vZGUgPSAncicgb3IgJ3cnIGJ1dCBnb3QgbW9kZSAoJG1vZGUpOyB0cmFjZSBmb2xsb3dzOgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRU9NCiAgICB9Cn0gIyMgZW5kIHN1YiBuZXcKCnN1YiBnZXRsaW5lIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICBteSAkbW9kZSA9ICRzZWxmLT5bMV07CiAgICBpZiAoICRtb2RlIG5lICdyJyApIHsKICAgICAgICBjb25mZXNzIDw8RU9NOwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZ2V0bGluZSByZXF1aXJlcyBtb2RlID0gJ3InIGJ1dCBtb2RlID0gKCRtb2RlKTsgdHJhY2UgZm9sbG93czoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkVPTQogICAgfQogICAgbXkgJGkgPSAkc2VsZi0+WzJdKys7CiAgICByZXR1cm4gJHNlbGYtPlswXS0+WyRpXTsKfSAjIyBlbmQgc3ViIGdldGxpbmUKCnN1YiBwcmludCB7CiAgICBteSAoICRzZWxmLCAkbXNnICkgPSBAXzsKICAgIG15ICRtb2RlID0gJHNlbGYtPlsxXTsKICAgIGlmICggJG1vZGUgbmUgJ3cnICkgewogICAgICAgIGNvbmZlc3MgPDxFT007Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpwcmludCByZXF1aXJlcyBtb2RlID0gJ3cnIGJ1dCBtb2RlID0gKCRtb2RlKTsgdHJhY2UgZm9sbG93czoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkVPTQogICAgfQogICAgcHVzaCBAeyAkc2VsZi0+WzBdIH0sICRtc2c7CiAgICByZXR1cm47Cn0gIyMgZW5kIHN1YiBwcmludAoxOwo=</File>
        <File Location="Kernel/cpan-lib/Perl/Tidy/VerticalAligner/Alignment.pm" Permission="660" Encode="Base64">IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMKIyB0aGUgUGVybDo6VGlkeTo6VmVydGljYWxBbGlnbmVyOjpBbGlnbm1lbnQgY2xhc3MgaG9sZHMgaW5mb3JtYXRpb24KIyBvbiBhIHNpbmdsZSBjb2x1bW4gYmVpbmcgYWxpZ25lZAojCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKcGFja2FnZSBQZXJsOjpUaWR5OjpWZXJ0aWNhbEFsaWduZXI6OkFsaWdubWVudDsKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICRWRVJTSU9OID0gJzIwMjUwMTA1JzsKCnN1YiBuZXcgewogICAgbXkgKCAkY2xhc3MsICRyYXJnICkgPSBAXzsKICAgIG15ICRzZWxmID0gYmxlc3MgJHJhcmcsICRjbGFzczsKICAgIHJldHVybiAkc2VsZjsKfQoKc3ViIEFVVE9MT0FEIHsKCiAgICAjIENhdGNoIGFueSB1bmRlZmluZWQgc3ViIGNhbGxzIHNvIHRoYXQgd2UgYXJlIHN1cmUgdG8gZ2V0CiAgICAjIHNvbWUgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbi4gIFRoaXMgc3ViIHNob3VsZCBuZXZlciBiZSBjYWxsZWQKICAgICMgZXhjZXB0IGZvciBhIHByb2dyYW1taW5nIGVycm9yLgogICAgb3VyICRBVVRPTE9BRDsKICAgIHJldHVybiBpZiAoICRBVVRPTE9BRCA9fiAvXGJERVNUUk9ZJC8gKTsKICAgIG15ICggJHBrZywgJGZuYW1lLCAkbG5vICkgPSBjYWxsZXIoKTsKICAgIG15ICRteV9wYWNrYWdlID0gX19QQUNLQUdFX187CiAgICBwcmludCB7KlNUREVSUn0gPDxFT007Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KRXJyb3IgZGV0ZWN0ZWQgaW4gcGFja2FnZSAnJG15X3BhY2thZ2UnLCB2ZXJzaW9uICRWRVJTSU9OClJlY2VpdmVkIHVuZXhwZWN0ZWQgQVVUT0xPQUQgY2FsbCBmb3Igc3ViICckQVVUT0xPQUQnCkNhbGxlZCBmcm9tIHBhY2thZ2U6ICckcGtnJwpDYWxsZWQgZnJvbSBGaWxlICckZm5hbWUnICBhdCBsaW5lICckbG5vJwpUaGlzIGVycm9yIGlzIHByb2JhYmx5IGR1ZSB0byBhIHJlY2VudCBwcm9ncmFtbWluZyBjaGFuZ2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpFT00KICAgIGV4aXQgMTsKfSAjIyBlbmQgc3ViIEFVVE9MT0FECgpzdWIgREVTVFJPWSB7CgogICAgIyByZXF1aXJlZCB0byBhdm9pZCBjYWxsIHRvIEFVVE9MT0FEIGluIHNvbWUgdmVyc2lvbnMgb2YgcGVybAp9CgpzdWIgZ2V0X2NvbHVtbiB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgcmV0dXJuICRzZWxmLT57J2NvbHVtbid9Owp9CgpzdWIgaW5jcmVtZW50X2NvbHVtbiB7CiAgICBteSAoICRzZWxmLCAkcGFkICkgPSBAXzsKICAgICRzZWxmLT57J2NvbHVtbid9ICs9ICRwYWQ7CiAgICByZXR1cm47Cn0KCnN1YiBzYXZlX2NvbHVtbiB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgJHNlbGYtPnsnc2F2ZWRfY29sdW1uJ30gPSAkc2VsZi0+eydjb2x1bW4nfTsKICAgIHJldHVybjsKfQoKc3ViIHJlc3RvcmVfY29sdW1uIHsKICAgIG15ICRzZWxmID0gc2hpZnQ7CiAgICAkc2VsZi0+eydjb2x1bW4nfSA9ICRzZWxmLT57J3NhdmVkX2NvbHVtbid9OwogICAgcmV0dXJuOwp9CjE7Cg==</File>
        <File Location="Kernel/cpan-lib/Perl/Tidy/VerticalAligner/Line.pm" Permission="660" Encode="Base64">IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMKIyBUaGUgUGVybDo6VGlkeTo6VmVydGljYWxBbGlnbmVyOjpMaW5lIGNsYXNzIHN1cHBsaWVzIGFuIG9iamVjdCB0bwojIGNvbnRhaW4gYSBzaW5nbGUgb3V0cHV0IGxpbmUuICBJdCBhbGxvd3MgbWFuaXB1bGF0aW9uIG9mIHRoZQojIGFsaWdubWVudCBjb2x1bW5zIG9uIHRoYXQgbGluZS4KIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnBhY2thZ2UgUGVybDo6VGlkeTo6VmVydGljYWxBbGlnbmVyOjpMaW5lOwp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgJFZFUlNJT04gPSAnMjAyNTAxMDUnOwp1c2UgRW5nbGlzaCBxdyggLW5vX21hdGNoX3ZhcnMgKTsKCnN1YiBBVVRPTE9BRCB7CgogICAgIyBDYXRjaCBhbnkgdW5kZWZpbmVkIHN1YiBjYWxscyBzbyB0aGF0IHdlIGFyZSBzdXJlIHRvIGdldAogICAgIyBzb21lIGRpYWdub3N0aWMgaW5mb3JtYXRpb24uICBUaGlzIHN1YiBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkCiAgICAjIGV4Y2VwdCBmb3IgYSBwcm9ncmFtbWluZyBlcnJvci4KICAgIG91ciAkQVVUT0xPQUQ7CiAgICByZXR1cm4gaWYgKCAkQVVUT0xPQUQgPX4gL1xiREVTVFJPWSQvICk7CiAgICBteSAoICRwa2csICRmbmFtZSwgJGxubyApID0gY2FsbGVyKCk7CiAgICBteSAkbXlfcGFja2FnZSA9IF9fUEFDS0FHRV9fOwogICAgcHJpbnQgeypTVERFUlJ9IDw8RU9NOwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkVycm9yIGRldGVjdGVkIGluIHBhY2thZ2UgJyRteV9wYWNrYWdlJywgdmVyc2lvbiAkVkVSU0lPTgpSZWNlaXZlZCB1bmV4cGVjdGVkIEFVVE9MT0FEIGNhbGwgZm9yIHN1YiAnJEFVVE9MT0FEJwpDYWxsZWQgZnJvbSBwYWNrYWdlOiAnJHBrZycKQ2FsbGVkIGZyb20gRmlsZSAnJGZuYW1lJyAgYXQgbGluZSAnJGxubycKVGhpcyBlcnJvciBpcyBwcm9iYWJseSBkdWUgdG8gYSByZWNlbnQgcHJvZ3JhbW1pbmcgY2hhbmdlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KRU9NCiAgICBleGl0IDE7Cn0gIyMgZW5kIHN1YiBBVVRPTE9BRAoKc3ViIERFU1RST1kgewoKICAgICMgcmVxdWlyZWQgdG8gYXZvaWQgY2FsbCB0byBBVVRPTE9BRCBpbiBzb21lIHZlcnNpb25zIG9mIHBlcmwKfQoKIyBDb25zdHJ1Y3RvciBtYXkgYmUgY2FsbGVkIGFzIGEgY2xhc3MgbWV0aG9kCnN1YiBuZXcgewogICAgbXkgKCAkY2xhc3MsICRyaSApID0gQF87CiAgICBteSAkc2VsZiA9IGJsZXNzICRyaSwgJGNsYXNzOwogICAgcmV0dXJuICRzZWxmOwp9CgpzdWIgZ2V0X2NvbHVtbiB7CiAgICBteSAoICRzZWxmLCAkaiApID0gQF87CiAgICBteSAkYWxpZ25tZW50ID0gJHNlbGYtPntyYWxpZ25tZW50c30tPlskal07CiAgICByZXR1cm4gdW5sZXNzIGRlZmluZWQoJGFsaWdubWVudCk7CiAgICByZXR1cm4gJGFsaWdubWVudC0+Z2V0X2NvbHVtbigpOwp9ICMjIGVuZCBzdWIgZ2V0X2NvbHVtbgoKc3ViIGN1cnJlbnRfZmllbGRfd2lkdGggewogICAgbXkgKCAkc2VsZiwgJGogKSA9IEBfOwoKICAgICMgUmV0dXJuIG51bWJlciBvZiBjb2x1bW5zIG9mIHNwYWNlIGJldHdlZW4gYWxpZ25tZW50cyAkaiBhbmQgJGotMQoKICAgIG15ICRhbGlnbm1lbnRfaiA9ICRzZWxmLT57cmFsaWdubWVudHN9LT5bJGpdOwogICAgbXkgJGNvbF9qICAgICAgID0gZGVmaW5lZCgkYWxpZ25tZW50X2opID8gJGFsaWdubWVudF9qLT5nZXRfY29sdW1uKCkgOiAwOwogICAgcmV0dXJuICRjb2xfaiBpZiAoICRqID09IDAgKTsKCiAgICBteSAkYWxpZ25tZW50X2ptID0gJHNlbGYtPntyYWxpZ25tZW50c30tPlsgJGogLSAxIF07CiAgICBteSAkY29sX2ptICAgICAgID0gZGVmaW5lZCgkYWxpZ25tZW50X2ptKSA/ICRhbGlnbm1lbnRfam0tPmdldF9jb2x1bW4oKSA6IDA7CiAgICByZXR1cm4gJGNvbF9qIC0gJGNvbF9qbTsKCn0gIyMgZW5kIHN1YiBjdXJyZW50X2ZpZWxkX3dpZHRoCgpzdWIgaW5jcmVhc2VfZmllbGRfd2lkdGggewoKICAgIG15ICggJHNlbGYsICRqLCAkcGFkICkgPSBAXzsKCiAgICAjIEluY3JlYXNlIHRoZSB3aWR0aCBvZiBhbGlnbm1lbnQgZmllbGQgJGogYnkgJHBhZCBzcGFjZXMKICAgIG15ICRqbWF4ID0gJHNlbGYtPntqbWF4fTsKICAgIGZvcmVhY2ggKCAkaiAuLiAkam1heCApIHsKICAgICAgICBteSAkYWxpZ25tZW50ID0gJHNlbGYtPntyYWxpZ25tZW50c30tPlskX107CiAgICAgICAgaWYgKCBkZWZpbmVkKCRhbGlnbm1lbnQpICkgewogICAgICAgICAgICAkYWxpZ25tZW50LT5pbmNyZW1lbnRfY29sdW1uKCRwYWQpOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybjsKfSAjIyBlbmQgc3ViIGluY3JlYXNlX2ZpZWxkX3dpZHRoCgpzdWIgZ2V0X2F2YWlsYWJsZV9zcGFjZV9vbl9yaWdodCB7CiAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgbXkgJGptYXggPSAkc2VsZi0+e2ptYXh9OwogICAgcmV0dXJuICRzZWxmLT57bWF4aW11bV9saW5lX2xlbmd0aH0gLSAkc2VsZi0+Z2V0X2NvbHVtbigkam1heCk7Cn0KMTsK</File>
        <File Location="Kernel/cpan-lib/Pod/Strip.pm" Permission="660" Encode="Base64">cGFja2FnZSBQb2Q6OlN0cmlwOwoKdXNlIHdhcm5pbmdzOwp1c2Ugc3RyaWN0OwoKdXNlIGJhc2UgKCdQb2Q6OlNpbXBsZScpOwoKb3VyICRWRVJTSU9OID0gIjEuMDIiOwoKc3ViIG5ldyB7CiAgICBteSAkbmV3ID0gc2hpZnQtPlNVUEVSOjpuZXcoQF8pOwogICAgJG5ldy0+e19jb2RlX2xpbmV9PTA7CiAgICAkbmV3LT5jb2RlX2hhbmRsZXIoCiAgICAgICAgc3ViIHsKICAgICAgICAgICAgIyBBZGQgb3B0aW9uYWwgbGluZSBkaXJlY3RpdmVzCiAgICAgICAgICAgIGlmICgkX1syXS0+e19yZXBsYWNlX3dpdGhfY29tbWVudHN9KSB7CiAgICAgICAgICAgICAgICBpZiAoJF9bMl0tPntfY29kZV9saW5lfSsxPCRfWzFdKSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnQgeyRfWzJde291dHB1dF9maH19ICgiIyBzdHJpcHBlZCBQT0RcbiIpIHggKCRfWzFdIC0gJF9bMl0tPntfY29kZV9saW5lfSAtMSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJF9bMl0tPntfY29kZV9saW5lfT0kX1sxXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBwcmludCB7JF9bMl17b3V0cHV0X2ZofX0gJF9bMF0sIlxuIjsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgfSk7CiAgICByZXR1cm4gJG5ldzsKfQoKCnN1YiByZXBsYWNlX3dpdGhfY29tbWVudHMgewogICAgbXkgJHNlbGYgPSBzaGlmdDsKICAgICRzZWxmLT57X3JlcGxhY2Vfd2l0aF9jb21tZW50c30gPSBkZWZpbmVkICRfWzBdID8gJF9bMF0gOiAxOwp9CgoKMTsKX19FTkRfXwoKPXBvZAoKPWhlYWQxIE5BTUUKClBvZDo6U3RyaXAgLSBSZW1vdmUgUE9EIGZyb20gUGVybCBjb2RlCgo9aGVhZDEgU1lOT1BTSVMKCiAgICB1c2UgUG9kOjpTdHJpcDsKCiAgICBteSAkcD1Qb2Q6OlN0cmlwLT5uZXc7ICAgICAgICAgICAgICAjIGNyZWF0ZSBwYXJzZXIKICAgIG15ICRwb2RsZXNzOyAgICAgICAgICAgICAgICAgICAgICAgICMgc2V0IG91dHB1dCBzdHJpbmcKICAgICRwLT5vdXRwdXRfc3RyaW5nKFwkcG9kbGVzcyk7ICAgICAgICMgc2VlIFBvZDo6U2ltcGxlCiAgICAkcC0+cGFyc2Vfc3RyaW5nX2RvY3VtZW50KCRjb2RlKTsgICAjIG9yIHNvbWUgb3RoZXIgcGFyc2luZyBtZXRob2QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgZnJvbSBQb2Q6OlNpbXBsZQogICAgIyAkcG9kbGVzcyB3aWxsIG5vdyBjb250YWluIGNvZGUgd2l0aG91dCBhbnkgUE9ECgoKPWhlYWQxIERFU0NSSVBUSU9OCgpQb2Q6OlN0cmlwIGlzIGEgc3ViY2xhc3Mgb2YgUG9kOjpTaW1wbGUgdGhhdCBzdHJpcHMgYWxsIFBPRCBmcm9tIFBlcmwgQ29kZS4KCj1oZWFkMSBNRVRIT0RTCgpBbGwgbWV0aG9kcyBiZXNpZGVzIHRob3NlIGxpc3RlZCBoZXJlIGFyZSBpbmhlcml0ZWQgZnJvbSBQb2Q6OlNpbXBsZQoKPWhlYWQyIG5ldwoKR2VuZXJhdGUgYSBuZXcgcGFyc2VyIG9iamVjdC4KCj1oZWFkMiByZXBsYWNlX3dpdGhfY29tbWVudHMKCkNhbGwgdGhpcyBtZXRob2Qgd2l0aCBhIHRydWUgYXJndW1lbnQgdG8gcmVwbGFjZSBQT0Qgd2l0aCBjb21tZW50cyAobG9va2luZyBsaWtlICIjIHN0cmlwcGVkIFBPRCIpIGluc3RlYWQgb2Ygc3RyaXBwaW5nIGl0LgoKVGhpcyBoYXMgdGhlIGVmZmVjdCB0aGF0IGxpbmUgbnVtYmVycyBnZXQgcmVwb3J0ZWQgY29ycmVjdGx5IGluIGVycm9yCm1lc3NhZ2VzIGV0Yy4KCj1oZWFkMSBBVVRIT1IKClRob21hcyBLbGF1c25lciwgQzw8IDxkb21tQGNwYW4ub3JnPiA+PgoKPWhlYWQxIEJVR1MKClBsZWFzZSByZXBvcnQgYW55IGJ1Z3Mgb3IgZmVhdHVyZSByZXF1ZXN0cyB0bwpDPGJ1Zy1wb2Qtc3RyaXBAcnQuY3Bhbi5vcmc+LCBvciB0aHJvdWdoIHRoZSB3ZWIgaW50ZXJmYWNlIGF0Ckw8aHR0cDovL3J0LmNwYW4ub3JnPi4gIEkgd2lsbCBiZSBub3RpZmllZCwgYW5kIHRoZW4geW91J2xsIGF1dG9tYXRpY2FsbHkKYmUgbm90aWZpZWQgb2YgcHJvZ3Jlc3Mgb24geW91ciBidWcgYXMgSSBtYWtlIGNoYW5nZXMuCgo9aGVhZDEgQ09QWVJJR0hUICYgTElDRU5TRQoKQ29weXJpZ2h0IDIwMDQsIDIwMDUsIDIwMDYgVGhvbWFzIEtsYXVzbmVyLCBBbGwgUmlnaHRzIFJlc2VydmVkLgoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgUGVybCBpdHNlbGYuCgo9Y3V0Cgo=</File>
        <File Location="Kernel/TidyAll/OTOBO.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6Ok9UT0JPOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdjUuMjQ7CnVzZSB1dGY4OwoKdXNlIEZpbGU6OkJhc2VuYW1lIHF3KGRpcm5hbWUpOwp1c2UgbGliIGRpcm5hbWUoX19GSUxFX18pIC4gJy9QbHVnaW4vT1RPQk8nOyAgICAjIEZpbmQgb3VyIFBlcmw6OkNyaXRpYyBwb2xpY2llcwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoQ29kZTo6VGlkeUFsbCk7CgojIGNvcmUgbW9kdWxlcwp1c2UgRmlsZTo6QmFzZW5hbWU7CnVzZSBGaWxlOjpUZW1wICgpOwp1c2UgSU86OkZpbGU7CnVzZSBQT1NJWCAiOnN5c193YWl0X2giOwp1c2UgVGVybTo6QU5TSUNvbG9yIHF3KGNvbG9yZWQpOwp1c2UgVGltZTo6SGlSZXMgcXcoc2xlZXApOwoKIyBDUEFOIG1vZHVsZXMsIFJlcXVpcmUgc29tZSBuZWVkZWQgbW9kdWxlcyBoZXJlIGZvciBjbGFyaXR5IC8gYmV0dGVyIGVycm9yIG1lc3NhZ2VzLgp1c2UgQ29kZTo6VGlkeUFsbCAwLjU2Owp1c2UgUGVybDo6Q3JpdGljIDEuMTQwOwp1c2UgUGVybDo6VGlkeTsKCm91ciAkRnJhbWV3b3JrVmVyc2lvbk1ham9yID0gMDsKb3VyICRGcmFtZXdvcmtWZXJzaW9uTWlub3IgPSAwOwpvdXIgJFRoaXJkcGFydHlNb2R1bGUgICAgICA9IDA7Cm91ciBARmlsZUxpc3QgICAgICAgICAgICAgID0gKCk7ICAgICMgYWxsIGZpbGVzIGluIGN1cnJlbnQgcmVwb3NpdG9yeQoKIyBoYW5kbGUgY29sb3JpbmcKIyAgIGVudmlyb25tZW50IHZhcmlhYmxlIEFOU0lfQ09MT1JTX0RJU0FCTEVEIGlzIHVzZWQgYnkgVGVybTo6QU5TSUNvbG9yCmlmICggISgtdCBTVERPVVQpIHx8ICRFTlZ7T1RPQk9DT0RFUE9MSUNZX05PQ09MT1J9ICkgewogICAgJEVOVntBTlNJX0NPTE9SU19ESVNBQkxFRH0gPSAxOwp9CgpzdWIgbmV3X2Zyb21fY29uZl9maWxlIHsKICAgIG15ICggJENsYXNzLCAkQ29uZmlnRmlsZSwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkU2VsZiA9ICRDbGFzcy0+U1VQRVI6Om5ld19mcm9tX2NvbmZfZmlsZSgKICAgICAgICAkQ29uZmlnRmlsZSwKICAgICAgICAlUGFyYW0sCiAgICAgICAgbm9fY2FjaGUgICA9PiAxLAogICAgICAgIG5vX2JhY2t1cHMgPT4gMSwKICAgICk7CgogICAgIyBSZXNldCB3aGVuIGEgbmV3IG9iamVjdCBpcyBjcmVhdGVkCiAgICAkRnJhbWV3b3JrVmVyc2lvbk1ham9yID0gMDsKICAgICRGcmFtZXdvcmtWZXJzaW9uTWlub3IgPSAwOwogICAgJFRoaXJkcGFydHlNb2R1bGUgICAgICA9IDA7CiAgICBARmlsZUxpc3QgICAgICAgICAgICAgID0gKCk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgRGV0ZXJtaW5lRnJhbWV3b3JrVmVyc2lvbkZyb21EaXJlY3RvcnkgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIEZpcnN0IGNoZWNrIGlmIHdlIGhhdmUgYW4gT1RPQk8gZGlyZWN0b3J5LCB1c2UgUkVMRUFTRSBpbmZvIHRoZW4uCiAgICBpZiAoIC1yICRTZWxmLT57cm9vdF9kaXJ9IC4gJy9SRUxFQVNFJyApIHsKICAgICAgICBteSAkRmlsZUhhbmRsZSA9IElPOjpGaWxlLT5uZXcoICRTZWxmLT57cm9vdF9kaXJ9IC4gJy9SRUxFQVNFJywgJ3InICk7CiAgICAgICAgbXkgQENvbnRlbnQgICAgPSAkRmlsZUhhbmRsZS0+Z2V0bGluZXMoKTsKCiAgICAgICAgbXkgKCAkVmVyc2lvbk1ham9yLCAkVmVyc2lvbk1pbm9yICkgPSAkQ29udGVudFsxXSA9fiBte15WRVJTSU9OXHMrPVxzKyhcZCspXC4oXGQrKVwufXhtczsKICAgICAgICAkRnJhbWV3b3JrVmVyc2lvbk1ham9yID0gJFZlcnNpb25NYWpvcjsKICAgICAgICAkRnJhbWV3b3JrVmVyc2lvbk1pbm9yID0gJFZlcnNpb25NaW5vcjsKICAgIH0KICAgIGVsc2UgewogICAgICAgICMgTm93IGNoZWNrIGlmIHdlIGhhdmUgYSBtb2R1bGUgZGlyZWN0b3J5IHdpdGggYW4gU09QTSBmaWxlIGluIGl0LgogICAgICAgIG15IEBTT1BNRmlsZXMgPSBnbG9iICRTZWxmLT57cm9vdF9kaXJ9IC4gIi8qLnNvcG0iOwogICAgICAgIGlmIChAU09QTUZpbGVzKSB7CgogICAgICAgICAgICAjIFVzZSB0aGUgaGlnaGVzdCBmcmFtZXdvcmsgdmVyc2lvbiBmcm9tIHRoZSBmaXJzdCBTT1BNIGZpbGUuCiAgICAgICAgICAgIG15ICRGaWxlSGFuZGxlID0gSU86OkZpbGUtPm5ldyggJFNPUE1GaWxlc1swXSwgJ3InICk7CiAgICAgICAgICAgIG15IEBDb250ZW50ICAgID0gJEZpbGVIYW5kbGUtPmdldGxpbmVzKCk7CiAgICAgICAgICAgIGZvciBteSAkTGluZSAoQENvbnRlbnQpIHsKICAgICAgICAgICAgICAgIGlmICggJExpbmUgPX4gbXsgPEZyYW1ld29yayAoPzogWyBdKyBbXjw+XSogKT8gPiB9eG1zICkgewogICAgICAgICAgICAgICAgICAgIG15ICggJFZlcnNpb25NYWpvciwgJFZlcnNpb25NaW5vciApID0gJExpbmUgPX4gbXsgPEZyYW1ld29yayAoPzogWyBdKyBbXjw+XSogKT8gPiAoXGQrKSBcLiAoXGQrKSBcLiBbXjwqXSsgPFwvRnJhbWV3b3JrPiB9eG1zOwogICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgJFZlcnNpb25NYWpvciA+ICRGcmFtZXdvcmtWZXJzaW9uTWFqb3IKICAgICAgICAgICAgICAgICAgICAgICAgfHwgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFZlcnNpb25NYWpvciA9PSAkRnJhbWV3b3JrVmVyc2lvbk1ham9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAkVmVyc2lvbk1pbm9yID4gJEZyYW1ld29ya1ZlcnNpb25NaW5vcgogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRGcmFtZXdvcmtWZXJzaW9uTWFqb3IgPSAkVmVyc2lvbk1ham9yOwogICAgICAgICAgICAgICAgICAgICAgICAkRnJhbWV3b3JrVmVyc2lvbk1pbm9yID0gJFZlcnNpb25NaW5vcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoICRMaW5lID1+IG17PFZlbmRvcj59ICYmICRMaW5lICF+IG17Um90aGVyIE9TU30gKSB7CiAgICAgICAgICAgICAgICAgICAgJFRoaXJkcGFydHlNb2R1bGUgPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmICgkRnJhbWV3b3JrVmVyc2lvbk1ham9yKSB7CiAgICAgICAgcHJpbnQgIkZvdW5kIE9UT0JPIHZlcnNpb24gJEZyYW1ld29ya1ZlcnNpb25NYWpvci4kRnJhbWV3b3JrVmVyc2lvbk1pbm9yLlxuIjsKICAgIH0KICAgIGVsc2UgewogICAgICAgIHByaW50ICJDb3VsZCBub3QgZGV0ZXJtaW5lIE9UT0JPIHZlcnNpb24gKGFzc3VtaW5nIGxhdGVzdCB2ZXJzaW9uKSFcbiI7CiAgICB9CgogICAgaWYgKCRUaGlyZHBhcnR5TW9kdWxlKSB7CiAgICAgICAgcHJpbnQKICAgICAgICAgICAgIlRoaXMgc2VlbXMgdG8gYmUgYSBtb2R1bGUgbm90IGNvcHlyaWdodGVkIGJ5IFJvdGhlciBPU1MgR21iSC4gRmlsZSBjb3B5cmlnaHQgd2lsbCBub3QgYmUgY2hhbmdlZC5cbiI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBwcmludAogICAgICAgICAgICAiVGhpcyBtb2R1bGUgc2VlbXMgdG8gYmUgY29weXJpZ2h0ZWQgYnkgUm90aGVyIE9TUyBHbWJILiBGaWxlIGNvcHlyaWdodCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgYXNzaWduZWQgdG8gUm90aGVyIE9TUyBHbWJILlxuIjsKICAgICAgICBwcmludAogICAgICAgICAgICAiICBJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCB5b3UgY2FuIGNoYW5nZSB0aGUgPFZlbmRvcj4gdGFnIGluIHlvdXIgU09QTS5cbiI7CiAgICB9CgogICAgcmV0dXJuOwp9CgojCiMgUHJvY2VzcyBhIGxpc3Qgb2YgZmlsZSBwYXRocyBpbiBwYXJhbGxlbCB3aXRoIGZvcmtpbmcgKGlmIG5lZWRlZCkuCiMKc3ViIFByb2Nlc3NQYXRoc1BhcmFsbGVsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFByb2Nlc3NlcyA9ICRQYXJhbXtQcm9jZXNzZXN9IC8vICRFTlZ7T1RPQk9DT0RFUE9MSUNZX1BST0NFU1NFU30gLy8gNjsKICAgIG15IEBGaWxlcyAgICAgPSBAeyAkUGFyYW17RmlsZVBhdGhzfSAvLyBbXSB9OwoKICAgICMgTm8gcGFyYWxsZWwgcHJvY2Vzc2luZyBuZWVkZWQ6IGV4ZWN1dGUgZGlyZWN0bHkuCiAgICBpZiAoICRQcm9jZXNzZXMgPD0gMSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPnByb2Nlc3NfcGF0aHMoQEZpbGVzKTsKICAgIH0KCiAgICAjIFBhcmFsbGVsIHByb2Nlc3NpbmcuIFdlIGNodW5rIHRoZSBkYXRhIGFuZCBleGVjdXRlIHRoZSBjaHVua3MgaW4gcGFyYWxsZWwuCiAgICAjCiAgICAjIFRpZHlBbGwncyBidWlsdC1pbiAtLWpvYnMgZmxhZyBpcyBub3QgdXNlZCwgaXQgc2VlbXMgdG8gYmUgd2F5IHRvbyBzbG93LAogICAgIyAgIHBlcmhhcHMgYmVjYXVzZSBvZiBmb3JraW5nIGZvciBlYWNoIHNpbmdsZSBqb2IuCgogICAgbXkgJUFjdGl2ZUNoaWxkUElEOwoKICAgIG15ICRTdG9wID0gc3ViIHsKCiAgICAgICAgIyBQcm9wYWdhdGUga2lsbCBzaWduYWwgdG8gYWxsIGZvcmtzCiAgICAgICAgZm9yIG15ICRQSUQgKCBzb3J0IGtleXMgJUFjdGl2ZUNoaWxkUElEICkgewogICAgICAgICAgICBraWxsIDksICRQSUQ7CiAgICAgICAgfQoKICAgICAgICBwcmludCAiU3RvcHBlZCBieSB1c2VyIVxuIjsKICAgICAgICByZXR1cm4gMTsKICAgIH07CgogICAgbG9jYWwgJFNJR3tJTlR9ICA9IHN1YiB7ICRTdG9wLT4oKSB9OwogICAgbG9jYWwgJFNJR3tURVJNfSA9IHN1YiB7ICRTdG9wLT4oKSB9OwoKICAgIG15IEBHbG9iYWxSZXN1bHRzOwoKICAgIHByaW50ICJPVE9CT0NvZGVQb2xpY3kgd2lsbCB1c2UgdXAgdG8gJFByb2Nlc3NlcyBwYXJhbGxlbCBwcm9jZXNzZXMuXG4iOwoKICAgICMgVG8gc3RvcmUgcmVzdWx0cyBmcm9tIGNoaWxkIHByb2Nlc3Nlcy4KICAgIG15ICRUZW1wRGlyZWN0b3J5ID0gRmlsZTo6VGVtcC0+bmV3ZGlyKCkgfHwgZGllICJDb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSBkaXJlY3Rvcnk6ICQhIjsKCiAgICAjIHNwbGl0IGNodW5rcyBvZiBmaWxlcyBmb3IgZXZlcnkgcHJvY2VzcwogICAgbXkgQENodW5rczsKICAgIG15ICRJdGVtQ291bnQgPSAwOwoKICAgIGZvciBteSAkRmlsZSAoQEZpbGVzKSB7CiAgICAgICAgcHVzaCBAeyAkQ2h1bmtzWyAkSXRlbUNvdW50KysgJSAkUHJvY2Vzc2VzIF0gfSwgJEZpbGU7CiAgICB9CgogICAgQ0hVTks6CiAgICBmb3IgbXkgJENodW5rIChAQ2h1bmtzKSB7CgogICAgICAgICMgQ3JlYXRlIGEgY2hpbGQgcHJvY2Vzcy4KICAgICAgICBteSAkUElEID0gZm9yazsKCiAgICAgICAgIyBDaGlsZCBwcm9jZXNzIGNvdWxkIG5vdCBiZSBjcmVhdGVkLgogICAgICAgIGlmICggJFBJRCA8IDAgKSB7CiAgICAgICAgICAgIGRpZSAiVW5hYmxlIHRvIGZvcmsgYSBjaGlsZCBwcm9jZXNzIGZvciB0aWRpbmchIjsKICAgICAgICB9CgogICAgICAgICMgQ2hpbGQgcHJvY2Vzcy4KICAgICAgICBpZiAoICEkUElEICkgewoKICAgICAgICAgICAgbXkgQFJlc3VsdHMgPSAkU2VsZi0+cHJvY2Vzc19wYXRocyggQHskQ2h1bmt9ICk7CgogICAgICAgICAgICBteSAkQ2hpbGRQSUQgPSAkJDsKICAgICAgICAgICAgU3RvcmFibGU6OnN0b3JlKCBcQFJlc3VsdHMsICIkVGVtcERpcmVjdG9yeS8kQ2hpbGRQSUQudG1wIiApOwoKICAgICAgICAgICAgIyBDbG9zZSBjaGlsZCBwcm9jZXNzIGF0IHRoZSBlbmQuCiAgICAgICAgICAgIGV4aXQgMDsKICAgICAgICB9CgogICAgICAgICMgUGFyZW50IHByb2Nlc3MuCiAgICAgICAgJEFjdGl2ZUNoaWxkUElEeyRQSUR9ID0gewogICAgICAgICAgICBQSUQgPT4gJFBJRCwKICAgICAgICB9OwogICAgfQoKICAgICMgQ2hlY2sgdGhlIHN0YXR1cyBvZiBhbGwgY2hpbGQgcHJvY2Vzc2VzIGV2ZXJ5IDAuMSBzZWNvbmRzLgogICAgIyBXYWl0IGZvciBhbGwgY2hpbGQgcHJvY2Vzc2VzIHRvIGJlIGZpbmlzaGVkLgogICAgV0FJVDoKICAgIHdoaWxlICgxKSB7CgogICAgICAgIGxhc3QgV0FJVCBpZiAhJUFjdGl2ZUNoaWxkUElEOwogICAgICAgIHNsZWVwIDAuMTsKCiAgICAgICAgUElEOgogICAgICAgIGZvciBteSAkUElEICggc29ydCBrZXlzICVBY3RpdmVDaGlsZFBJRCApIHsKCiAgICAgICAgICAgIG15ICRXYWl0UmVzdWx0ID0gd2FpdHBpZCggJFBJRCwgV05PSEFORyApOwoKICAgICAgICAgICAgZGllICJDaGlsZCBwcm9jZXNzICckUElEJyBleGl0ZWQgd2l0aCBlcnJvcnM6ICQ/IiBpZiAkV2FpdFJlc3VsdCA9PSAtMTsKCiAgICAgICAgICAgIGlmICgkV2FpdFJlc3VsdCkgewoKICAgICAgICAgICAgICAgIG15ICRUZW1wRmlsZSA9ICIkVGVtcERpcmVjdG9yeS8kUElELnRtcCI7CiAgICAgICAgICAgICAgICBteSAkUmVzdWx0czsKCiAgICAgICAgICAgICAgICBpZiAoICEtZSAkVGVtcEZpbGUgKSB7CiAgICAgICAgICAgICAgICAgICAgZGllICJDb3VsZCBub3QgcmVhZCByZXN1bHRzIG9mIHByb2Nlc3MgJFBJRC5cbiI7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJFJlc3VsdHMgPSBTdG9yYWJsZTo6cmV0cmlldmUoJFRlbXBGaWxlKTsKICAgICAgICAgICAgICAgIHVubGluayAkVGVtcEZpbGU7CgogICAgICAgICAgICAgICAgIyBKb2luIHRoZSBjaGlsZCByZXN1bHRzLgogICAgICAgICAgICAgICAgQEdsb2JhbFJlc3VsdHMgPSAoIEBHbG9iYWxSZXN1bHRzLCBAeyAkUmVzdWx0cyB8fCBbXSB9ICk7CgogICAgICAgICAgICAgICAgZGVsZXRlICRBY3RpdmVDaGlsZFBJRHskUElEfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gQEdsb2JhbFJlc3VsdHM7Cn0KCiMKIyBQcmludCBhIHVzZWZ1bCBzdW1tYXJ5IGFuZCBkaWUgaW4gY2FzZSBvZiBlcnJvcnMuCiMKc3ViIEhhbmRsZVJlc3VsdHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSBAR2xvYmFsUmVzdWx0cyA9IEB7ICRQYXJhbXtSZXN1bHRzfSAvLyBbXSB9OwoKICAgIG15IEBFcnJvclJlc3VsdHMgPSBncmVwIHsgJF8tPmVycm9yKCkgfSBAR2xvYmFsUmVzdWx0czsKICAgIGlmIChARXJyb3JSZXN1bHRzKSB7CiAgICAgICAgbXkgJEVycm9yQ291bnQgICA9IHNjYWxhcihARXJyb3JSZXN1bHRzKTsKICAgICAgICBteSAkRXJyb3JNZXNzYWdlID0gc3ByaW50ZigKICAgICAgICAgICAgX1JlcGxhY2VDb2xvclRhZ3MoIlxuPHJlZD5FcnJvcjogJWQgZmlsZShzKSBkaWQgbm90IHBhc3MgdmFsaWRhdGlvbi48L3JlZD5cbiIpLAogICAgICAgICAgICAkRXJyb3JDb3VudCwKICAgICAgICApOwogICAgICAgIGlmICggJEVycm9yQ291bnQgPCAxMCApIHsKICAgICAgICAgICAgZm9yIG15ICRFcnJvciAoQEVycm9yUmVzdWx0cykgewogICAgICAgICAgICAgICAgJEVycm9yTWVzc2FnZSAuPSAiIC0gIiAuICRFcnJvci0+cGF0aCgpIC4gIlxuIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBkaWUgIiRFcnJvck1lc3NhZ2VcbiI7CiAgICB9CgogICAgbXkgQFRpZGllZFJlc3VsdHMgPSBncmVwIHsgJF8tPnN0YXRlKCkgZXEgJ3RpZGllZCcgfSBAR2xvYmFsUmVzdWx0czsKICAgIGlmIChAVGlkaWVkUmVzdWx0cykgewogICAgICAgIHByaW50ZigKICAgICAgICAgICAgX1JlcGxhY2VDb2xvclRhZ3MoIlxuPGdyZWVuPlZhbGlkYXRpb24gZmluaXNoZWQsPC9ncmVlbj4gPHllbGxvdz4lZCBmaWxlKHMpIHdlcmUgdGlkaWVkLjwveWVsbG93PlxuIiksCiAgICAgICAgICAgIHNjYWxhcihAVGlkaWVkUmVzdWx0cyksCiAgICAgICAgKTsKCiAgICB9CiAgICBlbHNlIHsKICAgICAgICBwcmludCBfUmVwbGFjZUNvbG9yVGFncygiXG48Z3JlZW4+VmFsaWRhdGlvbiBmaW5pc2hlZCwgbm8gcHJvYmxlbXMgZm91bmQuPC9ncmVlbj5cbiIpOwogICAgfQoKICAgIHJldHVybiAxOwp9CgojCiMgR2V0IGEgbGlzdCAoYWxtb3N0KSBhbGwgcmVsYXRpdmUgZmlsZSBwYXRocyBmcm9tIHRoZSByb290IGRpcmVjdG9yeS4gVGhpcyBsaXN0IGlzIHVzZWQgaW4gc29tZSBwbHVnaW5zIHRvIG1ha2UgdmFsaWRhdGlvbiBkZWNpc2lvbnMsCiMgICBub3QgZm9yIHRoZSBhY3R1YWwgZGVjaXNpb24gd2hpY2ggZmlsZXMgYXJlIHRvIGJlIHZhbGlkYXRlZC4KIwpzdWIgR2V0RmlsZUxpc3RGcm9tRGlyZWN0b3J5IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBPbmx5IHJ1biBvbmNlLgogICAgcmV0dXJuIGlmIEBGaWxlTGlzdDsKCiAgICBARmlsZUxpc3QgPSAkU2VsZi0+RmluZEZpbGVzSW5EaXJlY3RvcnkoIERpcmVjdG9yeSA9PiAkU2VsZi0+e3Jvb3RfZGlyfSApOwoKICAgIHJldHVybjsKfQoKIwojIEdldCBhIGxpc3Qgb2YgYWxsIHJlbGF0aXZlIGZpbGUgcGF0aHMgaW4gYSBkaXJlY3Rvcnkgd2l0aCBzb21lIGdsb2JhbCBpZ25vcmVzIGZvciBzcGVlZCdzIHNha2UuCiMKc3ViIEZpbmRGaWxlc0luRGlyZWN0b3J5IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJERpcmVjdG9yeSA9ICRQYXJhbXtEaXJlY3Rvcnl9OwoKICAgIG15IEBGaWxlczsKCiAgICBteSAkV2FudGVkID0gc3ViIHsKCiAgICAgICAgIyBTa2lwIG5vbi1yZWd1bGFyIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KICAgICAgICByZXR1cm4gaWYgKCAhLWYgJEZpbGU6OkZpbmQ6Om5hbWUgKTsKCiAgICAgICAgIyBBbHNvIHNraXAgc3ltYm9saWMgbGlua3MsIFRpZHlBbGwgZG9lcyBub3QgbGlrZSB0aGVtLgogICAgICAgIHJldHVybiBpZiAoIC1sICRGaWxlOjpGaW5kOjpuYW1lICk7CgogICAgICAgICMgU29tZSBnbG9iYWwgaGFyZCBpZ25vcmVzIHRoYXQgYXJlIG1lYW50IHRvIHNwZWVkIHVwIHRoZSBsb2FkaW5nIHByb2Nlc3MsCiAgICAgICAgIyAgIGFzIGFwcGx5aW5nIHRoZSBUaWR5QWxsIGlnbm9yZS9zZWxlY3QgcnVsZXMgY2FuIGJlIHF1aXRlIHNsb3cuCiAgICAgICAgcmV0dXJuIGlmICRGaWxlOjpGaW5kOjpuYW1lID1+IG17L1wuZ2l0L307CiAgICAgICAgcmV0dXJuIGlmICRGaWxlOjpGaW5kOjpuYW1lID1+IG17L1wudGlkeWFsbC5kL307CiAgICAgICAgcmV0dXJuIGlmICRGaWxlOjpGaW5kOjpuYW1lID1+IG17L1wudnNjb2RlL307CiAgICAgICAgcmV0dXJuIGlmICRGaWxlOjpGaW5kOjpuYW1lID1+IG17L25vZGVfbW9kdWxlcy99OwogICAgICAgIHJldHVybiBpZiAkRmlsZTo6RmluZDo6bmFtZSA9fiBtey9qcy1jYWNoZS99OwogICAgICAgIHJldHVybiBpZiAkRmlsZTo6RmluZDo6bmFtZSA9fiBtey9jc3MtY2FjaGUvfTsKICAgICAgICByZXR1cm4gaWYgJEZpbGU6OkZpbmQ6Om5hbWUgPX4gbXsvdmFyL3RtcC99ICYmICRGaWxlOjpGaW5kOjpuYW1lICF+IG17LipcLnNhbXBsZSR9OwogICAgICAgIHJldHVybiBpZiAkRmlsZTo6RmluZDo6bmFtZSA9fiBtey92YXIvcHVibGljL2Rpc3QvfTsKCiAgICAgICAgcHVzaCBARmlsZXMsIEZpbGU6OlNwZWMtPmFiczJyZWwoICRGaWxlOjpGaW5kOjpuYW1lLCAkU2VsZi0+e3Jvb3RfZGlyfSApOwogICAgfTsKCiAgICBGaWxlOjpGaW5kOjpmaW5kKAogICAgICAgICRXYW50ZWQsCiAgICAgICAgJERpcmVjdG9yeSwKICAgICk7CgogICAgcmV0dXJuIEBGaWxlczsKfQoKIwojIEZpbHRlciByZWxhdGl2ZSBmaWxlIHBhdGhzIGZvciBvbmx5IHRoZSBmaWxlcyB0aGF0IGFyZSBtYXRjaGVkIGJ5IGF0IGxlYXN0IG9uZSBwbHVnaW4uCiMKc3ViIEZpbHRlck1hdGNoZWRGaWxlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBncmVwIHsgJFNlbGYtPnBsdWdpbnNfZm9yX3BhdGgoJF8pIH0gQHsgJFBhcmFte0ZpbGVzfSB9Owp9CgpzdWIgX1JlcGxhY2VDb2xvclRhZ3MgewogICAgbXkgKCRUZXh0KSA9IEBfOwoKICAgICRUZXh0IC8vPSAnJzsKCiAgICAkVGV4dCA9fiBzezwoZ3JlZW58eWVsbG93fHJlZCk+KC4qPyk8L1wxPn17Y29sb3JlZCgkMiwgJDEpfWdzbXhlOwoKICAgIHJldHVybiAkVGV4dDsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/OTOBO/Git/PreCommit.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6Ok9UT0JPOjpHaXQ6OlByZUNvbW1pdDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCj1oZWFkMSBTWU5PUFNJUwoKVGhpcyBjb21taXQgaG9vayBsb2FkcyB0aGUgT1RPQk8gdmVyc2lvbiBvZiBDb2RlOjpUaWR5QWxsCndpdGggdGhlIGN1c3RvbSBwbHVnaW5zLCBleGVjdXRlcyBpdCBmb3IgYW55IG1vZGlmaWVkIGZpbGVzCmFuZCByZXR1cm5zIGEgY29ycmVzcG9uZGluZyBzdGF0dXMgY29kZS4KCj1jdXQKCnVzZSBDd2Q7CnVzZSBGaWxlOjpTcGVjOwp1c2UgRmlsZTo6QmFzZW5hbWU7Cgp1c2UgQ29kZTo6VGlkeUFsbDsKdXNlIElQQzo6U3lzdGVtOjpTaW1wbGUgcXcoY2FwdHVyZXggcnVuKTsKdXNlIFRyeTo6VGlueTsKdXNlIFRpZHlBbGw6Ok9UT0JPOwp1c2UgTW9vOwoKc3ViIFJ1biB7CiAgICBteSAkU2VsZiA9IEBfOwoKICAgIHByaW50ICJPVE9CT0NvZGVQb2xpY3kgY29tbWl0IGhvb2sgc3RhcnRpbmcuLi5cbiI7CgogICAgbXkgJEVycm9yTWVzc2FnZTsKCiAgICB0cnkgewogICAgICAgICMgRmluZCBjb25mIGZpbGUgYXQgZ2l0IHJvb3QKICAgICAgICBteSAkUm9vdERpciA9IGNhcHR1cmV4KCAnZ2l0JywgInJldi1wYXJzZSIsICItLXNob3ctdG9wbGV2ZWwiICk7CiAgICAgICAgY2hvbXAoJFJvb3REaXIpOwoKICAgICAgICAjIEdhdGhlciBmaWxlIHBhdGhzIHRvIGJlIGNvbW1pdHRlZAogICAgICAgIG15ICRPdXRwdXQgPSBjYXB0dXJleCggJ2dpdCcsICJzdGF0dXMiLCAiLS1wb3JjZWxhaW4iICk7CgogICAgICAgICMgRmV0Y2ggb25seSBzdGFnZWQgZmlsZXMgdGhhdCB3aWxsIGJlIGNvbW1pdHRlZC4KICAgICAgICBteSBAQ2hhbmdlZEZpbGVzID0gZ3JlcCB7IC1mICYmICEtbCB9ICggJE91dHB1dCA9fiAvXltNQV0rXHMrKC4qKS9nbSApOwogICAgICAgIHB1c2ggQENoYW5nZWRGaWxlcywgZ3JlcCB7IC1mICYmICEtbCB9ICggJE91dHB1dCA9fiAvXlxzKlJNPytccysoLio/KVxzKy0+XHMrKC4qKS9nbSApOwogICAgICAgIHJldHVybiBpZiAhQENoYW5nZWRGaWxlczsKCiAgICAgICAgIyBBbHdheXMgaW5jbHVkZSBhbGwgU09QTSBmaWxlcyB0byB2ZXJpZnkgdGhlIGZpbGUgbGlzdC4KICAgICAgICBmb3IgbXkgJFNPUE1GaWxlICggbWFwIHsgRmlsZTo6U3BlYy0+YWJzMnJlbCggJF8sICRSb290RGlyICkgfSBnbG9iKCIkUm9vdERpci8qLnNvcG0iKSApIHsKICAgICAgICAgICAgaWYgKCAhZ3JlcCB7ICRfIGVxICRTT1BNRmlsZSB9IEBDaGFuZ2VkRmlsZXMgKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBDaGFuZ2VkRmlsZXMsICRTT1BNRmlsZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBGaW5kIE9UT0JPQ29kZVBvbGljeSBjb25maWd1cmF0aW9uCiAgICAgICAgbXkgJFNjcmlwdERpcmVjdG9yeTsKICAgICAgICBpZiAoIC1sICQwICkgewogICAgICAgICAgICAkU2NyaXB0RGlyZWN0b3J5ID0gZGlybmFtZSggcmVhZGxpbmsoJDApICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2NyaXB0RGlyZWN0b3J5ID0gZGlybmFtZSgkMCk7CiAgICAgICAgfQogICAgICAgIG15ICRDb25maWdGaWxlID0gJFNjcmlwdERpcmVjdG9yeSAuICcvLi4vdGlkeWFsbHJjJzsKCiAgICAgICAgbXkgJFRpZHlBbGwgPSBUaWR5QWxsOjpPVE9CTy0+bmV3X2Zyb21fY29uZl9maWxlKAogICAgICAgICAgICAkQ29uZmlnRmlsZSwKICAgICAgICAgICAgY2hlY2tfb25seSA9PiAxLAogICAgICAgICAgICBtb2RlICAgICAgID0+ICdjb21taXQnLAogICAgICAgICAgICByb290X2RpciAgID0+ICRSb290RGlyLAogICAgICAgICAgICBkYXRhX2RpciAgID0+IEZpbGU6OlNwZWMtPnRtcGRpcigpLAogICAgICAgICk7CiAgICAgICAgJFRpZHlBbGwtPkRldGVybWluZUZyYW1ld29ya1ZlcnNpb25Gcm9tRGlyZWN0b3J5KCk7CiAgICAgICAgJFRpZHlBbGwtPkdldEZpbGVMaXN0RnJvbURpcmVjdG9yeSgpOwoKICAgICAgICBteSBAQ2hlY2tSZXN1bHRzID0gJFRpZHlBbGwtPlByb2Nlc3NQYXRoc1BhcmFsbGVsKAogICAgICAgICAgICBGaWxlUGF0aHMgPT4gWyBtYXAgeyIkUm9vdERpci8kXyJ9IEBDaGFuZ2VkRmlsZXMgXSwKICAgICAgICApOwoKICAgICAgICAkVGlkeUFsbC0+SGFuZGxlUmVzdWx0cygKICAgICAgICAgICAgUmVzdWx0cyA9PiBcQENoZWNrUmVzdWx0cywKICAgICAgICApOwogICAgfQogICAgY2F0Y2ggewogICAgICAgIG15ICRFeGNlcHRpb24gPSAkXzsKICAgICAgICBkaWUgIkVycm9yIGR1cmluZyBwcmUtY29tbWl0IGhvb2sgKHVzZSAtLW5vLXZlcmlmeSB0byBza2lwIGhvb2spOlxuJEV4Y2VwdGlvbiI7CiAgICB9OwogICAgaWYgKCRFcnJvck1lc3NhZ2UpIHsKICAgICAgICBkaWUgIiRFcnJvck1lc3NhZ2VcbllvdSBjYW4gdXNlIC0tbm8tdmVyaWZ5IHRvIHNraXAgdGhlIGhvb2tcbiI7CiAgICB9Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/OTOBO/Git/PreReceive.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6Ok9UT0JPOjpHaXQ6OlByZVJlY2VpdmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgo9aGVhZDEgU1lOT1BTSVMKClRoaXMgcHJlIHJlY2VpdmUgaG9vayBsb2FkcyB0aGUgT1RPQk8gdmVyc2lvbiBvZiBDb2RlOjpUaWR5QWxsCndpdGggdGhlIGN1c3RvbSBwbHVnaW5zLCBleGVjdXRlcyBpdCBmb3IgYW55IG1vZGlmaWVkIGZpbGVzCmFuZCByZXR1cm5zIGEgY29ycmVzcG9uZGluZyBzdGF0dXMgY29kZS4KCj1jdXQKCnVzZSBDd2Q7CnVzZSBGaWxlOjpTcGVjOwp1c2UgRmlsZTo6QmFzZW5hbWU7Cgp1c2UgQ29kZTo6VGlkeUFsbDsKdXNlIElQQzo6U3lzdGVtOjpTaW1wbGUgcXcoY2FwdHVyZXggcnVuKTsKdXNlIFRyeTo6VGlueTsKdXNlIFRpZHlBbGw6Ok9UT0JPOwp1c2UgTW9vOwoKIyBJZ25vcmUgdGhlc2UgcmVwb3NpdG9yaWVzIG9uIHRoZSBzZXJ2ZXIgc28gdGhhdCB3ZSBjYW4gYWx3YXlzIHB1c2ggdG8gdGhlbS4KbXkgJUlnbm9yZVJlcG9zaXRvcmllcyA9ICgKICAgICdjb2RlcG9saWN5LmdpdCcgPT4gMSwKKTsKCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkRXJyb3JNZXNzYWdlOwogICAgdHJ5IHsKCiAgICAgICAgcHJpbnQgIk9UT0JPQ29kZVBvbGljeSBwcmUgcmVjZWl2ZSBob29rIHN0YXJ0aW5nLi4uXG4iOwoKICAgICAgICBteSAkSW5wdXQgPSAkUGFyYW17SW5wdXR9OwogICAgICAgIGlmICggISRJbnB1dCApIHsKICAgICAgICAgICAgJElucHV0ID0gZG8geyBsb2NhbCAkLyA9IHVuZGVmOyA8PiB9OwogICAgICAgIH0KCiAgICAgICAgIyBEZWJ1ZwogICAgICAgICNwcmludCAiR290IGRhdGE6XG4kSW5wdXQiOwoKICAgICAgICBteSAkUm9vdERpcmVjdG9yeSA9IEN3ZDo6cmVhbHBhdGgoKTsKICAgICAgICBsb2NhbCAkRU5We0dJVF9ESVJ9ID0gJFJvb3REaXJlY3Rvcnk7CgogICAgICAgIG15ICRSZXBvc2l0b3J5TmFtZSA9IFsgc3BsaXQgbXsvfSwgJFJvb3REaXJlY3RvcnkgXS0+Wy0xXTsKICAgICAgICBpZiAoICRJZ25vcmVSZXBvc2l0b3JpZXN7JFJlcG9zaXRvcnlOYW1lfSApIHsKICAgICAgICAgICAgcHJpbnQgIlNraXBwaW5nIGNoZWNrcyBmb3IgcmVwb3NpdG9yeSAkUmVwb3NpdG9yeU5hbWUuXG4iOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkRXJyb3JNZXNzYWdlID0gJFNlbGYtPkhhbmRsZUlucHV0KCRJbnB1dCk7CiAgICB9CiAgICBjYXRjaCB7CiAgICAgICAgbXkgJEV4Y2VwdGlvbiA9ICRfOwogICAgICAgIHByaW50IFNUREVSUiAiKioqIEVycm9yIHJ1bm5pbmcgcHJlLXJlY2VpdmUgaG9vayAoYWxsb3dpbmcgcHVzaCB0byBwcm9jZWVkKTpcbiRFeGNlcHRpb24iOwogICAgfTsKICAgIGlmICgkRXJyb3JNZXNzYWdlKSB7CiAgICAgICAgcHJpbnQgU1RERVJSICIkRXJyb3JNZXNzYWdlXG4iOwogICAgICAgIHByaW50IFNUREVSUiAiXG4qKiogUHVzaCBjb250YWlucyBmaWxlcyB3aGljaCBkbyBub3Qgc2F0aXNmeSB0aGUgQ29kZVBvbGljeSEgKioqXG4iOwogICAgICAgIGV4aXQgMTsKICAgIH0KfQoKc3ViIEhhbmRsZUlucHV0IHsKICAgIG15ICggJFNlbGYsICRJbnB1dCApID0gQF87CgogICAgbXkgQExpbmVzID0gc3BsaXQoIG0vXG4vLCAkSW5wdXQgKTsKCiAgICBteSAoQFJlc3VsdHMpOwoKICAgIExJTkU6CiAgICBmb3IgbXkgJExpbmUgKEBMaW5lcykgewogICAgICAgIGNob21wKCRMaW5lKTsKICAgICAgICBteSAoICRCYXNlLCAkQ29tbWl0LCAkUmVmICkgPSBzcGxpdCggbS9ccysvLCAkTGluZSApOwoKICAgICAgICBpZiAoICRDb21taXQgPX4gbS9eMCskLyApIHsKCiAgICAgICAgICAgICMgTm8gdGFyZ2V0IGNvbW1pdCAoYnJhbmNoIC8gdGFnIGRlbGV0ZSkuCiAgICAgICAgICAgIG5leHQgTElORTsKICAgICAgICB9CgogICAgICAgIGlmICggc3Vic3RyKCAkUmVmLCAwLCA5ICkgZXEgJ3JlZnMvdGFncycgKSB7CgogICAgICAgICAgICAjIE9ubHkgYWxsb3cgInJlbC0qIiBhcyBuYW1lIGZvciBuZXcgYW5kIHVwZGF0ZWQgdGFncy4KICAgICAgICAgICAgaWYgKCAkUmVmICF+IG17IFxBIHJlZnMvdGFncy9yZWwtXGQrX1xkK19cZCsgKF9hbHBoYVxkKyB8IF9iZXRhXGQrIHwgX3JjXGQrKT8gXHogfXhtcyApIHsKCiAgICAgICAgICAgICAgICBteSAkRXJyb3JNZXNzYWdlID0gIkVycm9yOiBmb3VuZCBpbnZhbGlkIHRhZyAnJFJlZicgLSBwbGVhc2Ugb25seSB1c2UgcmVsLUFfQl9DIG9yIHJlbC1BX0JfQ18oYWxwaGF8YmV0YXxyYylELiI7CiAgICAgICAgICAgICAgICByZXR1cm4gJEVycm9yTWVzc2FnZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBWYWxpZCB0YWcuCiAgICAgICAgICAgIG5leHQgTElORTsKICAgICAgICB9CgogICAgICAgIHByaW50ICJDaGVja2luZyBmcmFtZXdvcmsgdmVyc2lvbiBmb3IgJFJlZi4uLiAiOwoKICAgICAgICBteSBARmlsZUxpc3QgPSAkU2VsZi0+R2V0R2l0RmlsZUxpc3QoJENvbW1pdCk7CgogICAgICAgICMgQ3JlYXRlIHRpZHlhbGwgZm9yIGVhY2ggYnJhbmNoIHNlcGFyYXRlbHkKICAgICAgICBteSAkVGlkeUFsbCA9ICRTZWxmLT5DcmVhdGVUaWR5QWxsKCAkQ29tbWl0LCBcQEZpbGVMaXN0ICk7CgogICAgICAgIG15IEBDaGFuZ2VkRmlsZXMgPSAkU2VsZi0+R2V0Q2hhbmdlZEZpbGVzKCAkQmFzZSwgJENvbW1pdCApOwoKICAgICAgICAjIEFsd2F5cyBpbmNsdWRlIGFsbCBTT1BNIGZpbGVzIHRvIHZlcmlmeSB0aGUgZmlsZSBsaXN0LgogICAgICAgIGZvciBteSAkU09QTUZpbGUgKCBncmVwIHsgJF8gPX4gbXtcLnNvcG0kfSB9IEBGaWxlTGlzdCApIHsKICAgICAgICAgICAgaWYgKCAhZ3JlcCB7ICRfIGVxICRTT1BNRmlsZSB9IEBDaGFuZ2VkRmlsZXMgKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBDaGFuZ2VkRmlsZXMsICRTT1BNRmlsZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgRklMRToKICAgICAgICBmb3IgbXkgJEZpbGUgKEBDaGFuZ2VkRmlsZXMpIHsKCiAgICAgICAgICAgICMgRG9uJ3QgdHJ5IHRvIHZhbGlkYXRlIGRlbGV0ZWQgZmlsZXMuCiAgICAgICAgICAgIGlmICggIWdyZXAgeyAkXyBlcSAkRmlsZSB9IEBGaWxlTGlzdCApIHsKICAgICAgICAgICAgICAgIHByaW50ICIkRmlsZSB3YXMgZGVsZXRlZCwgaWdub3JpbmcuXG4iOwogICAgICAgICAgICAgICAgbmV4dCBGSUxFOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIEdldCBmaWxlIGZyb20gZ2l0IHJlcG9zaXRvcnkuCiAgICAgICAgICAgIG15ICRDb250ZW50cyA9ICRTZWxmLT5HZXRHaXRGaWxlQ29udGVudHMoICRGaWxlLCAkQ29tbWl0ICk7CgogICAgICAgICAgICAjIE9ubHkgdmFsaWRhdGUgZmlsZXMgd2hpY2ggYWN0dWFsbHkgaGF2ZSBzb21lIGNvbnRlbnQuCiAgICAgICAgICAgIGlmICggJENvbnRlbnRzID1+IC9cUy8gJiYgJENvbnRlbnRzID1+IC9cbi8gKSB7CiAgICAgICAgICAgICAgICBwdXNoKCBAUmVzdWx0cywgJFRpZHlBbGwtPnByb2Nlc3Nfc291cmNlKCAkQ29udGVudHMsICRGaWxlICkgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBpZiAoIG15IEBFcnJvclJlc3VsdHMgPSBncmVwIHsgJF8tPmVycm9yKCkgfSBAUmVzdWx0cyApIHsKICAgICAgICByZXR1cm4gc3ByaW50ZiggIkVycm9yOiAlZCBmaWxlKHMpIGRpZCBub3QgcGFzcyB2YWxpZGF0aW9uIiwgc2NhbGFyKEBFcnJvclJlc3VsdHMpICk7CiAgICB9CgogICAgcmV0dXJuOwp9CgpzdWIgQ3JlYXRlVGlkeUFsbCB7CiAgICBteSAoICRTZWxmLCAkQ29tbWl0LCAkRmlsZUxpc3QgKSA9IEBfOwoKICAgICMgRmluZCBPVE9CT0NvZGVQb2xpY3kgY29uZmlndXJhdGlvbgogICAgbXkgJENvbmZpZ0ZpbGUgPSBkaXJuYW1lKF9fRklMRV9fKSAuICcvLi4vLi4vdGlkeWFsbHJjJzsKCiAgICBteSAkVGlkeUFsbCA9IFRpZHlBbGw6Ok9UT0JPLT5uZXdfZnJvbV9jb25mX2ZpbGUoCiAgICAgICAgJENvbmZpZ0ZpbGUsCiAgICAgICAgY2hlY2tfb25seSA9PiAxLAogICAgICAgIG1vZGUgICAgICAgPT4gJ2NvbW1pdCcsCiAgICApOwoKICAgICMgV2UgY2Fubm90IHVzZSB0aGVzZSBmdW5jdGlvbnMgaGVyZSBiZWNhdXNlIHdlIGhhdmUgYSBiYXJlIGdpdCByZXBvc2l0b3J5LAogICAgIyAgIHNvIHdlIGhhdmUgdG8gZG8gaXQgb24gb3VyIG93bi4KICAgICMkVGlkeUFsbC0+RGV0ZXJtaW5lRnJhbWV3b3JrVmVyc2lvbkZyb21EaXJlY3RvcnkoKTsKICAgICMkVGlkeUFsbC0+R2V0RmlsZUxpc3RGcm9tRGlyZWN0b3J5KCk7CgogICAgIyBTZXQgdGhlIGxpc3Qgb2YgZmlsZXMgdG8gYmUgY2hlY2tlZAogICAgQFRpZHlBbGw6Ok9UT0JPOjpGaWxlTGlzdCA9IEB7JEZpbGVMaXN0fTsKCiAgICAjIE5vdyB3ZSB0cnkgdG8gZGV0ZXJtaW5lIHRoZSBPVE9CTyB2ZXJzaW9uIGZyb20gdGhlIGNvbW1pdAoKICAgICMgTG9vayBmb3IgYSBSRUxFQVNFIGZpbGUgZmlyc3QgdG8gZGV0ZXJtaW5lIHRoZSBmcmFtZXdvcmsgdmVyc2lvbgogICAgaWYgKCBncmVwIHsgJF8gZXEgJ1JFTEVBU0UnIH0gQHskRmlsZUxpc3R9ICkgewogICAgICAgIG15IEBDb250ZW50ID0gc3BsaXQgL1xuLywgJFNlbGYtPkdldEdpdEZpbGVDb250ZW50cyggJ1JFTEVBU0UnLCAkQ29tbWl0ICk7CgogICAgICAgIG15ICggJFZlcnNpb25NYWpvciwgJFZlcnNpb25NaW5vciApID0gJENvbnRlbnRbMV0gPX4gbXteVkVSU0lPTlxzKz1ccysoXGQrKVwuKFxkKylcLn14bXM7CiAgICAgICAgJFRpZHlBbGw6Ok9UT0JPOjpGcmFtZXdvcmtWZXJzaW9uTWFqb3IgPSAkVmVyc2lvbk1ham9yOwogICAgICAgICRUaWR5QWxsOjpPVE9CTzo6RnJhbWV3b3JrVmVyc2lvbk1pbm9yID0gJFZlcnNpb25NaW5vcjsKICAgIH0KCiAgICAjIExvb2sgZm9yIGFueSBTT1BNIGZpbGVzCiAgICBlbHNlIHsKICAgICAgICBGSUxFOgogICAgICAgIGZvciBteSAkRmlsZSAoIEB7JEZpbGVMaXN0fSApIHsKICAgICAgICAgICAgaWYgKCBzdWJzdHIoICRGaWxlLCAtNSwgNSApIGVxICcuc29wbScgKSB7CiAgICAgICAgICAgICAgICBteSBAQ29udGVudCA9IHNwbGl0IC9cbi8sICRTZWxmLT5HZXRHaXRGaWxlQ29udGVudHMoICRGaWxlLCAkQ29tbWl0ICk7CgogICAgICAgICAgICAgICAgZm9yIG15ICRMaW5lIChAQ29udGVudCkgewogICAgICAgICAgICAgICAgICAgIGlmICggJExpbmUgPX4gbXsgPEZyYW1ld29yayAoPzogWyBdKyBbXjw+XSogKT8gPiB9eG1zICkgewogICAgICAgICAgICAgICAgICAgICAgICBteSAoICRWZXJzaW9uTWFqb3IsICRWZXJzaW9uTWlub3IgKSA9ICRMaW5lID1+IG17IDxGcmFtZXdvcmsgKD86IFsgXSsgW148Pl0qICk/ID4gKFxkKykgXC4gKFxkKykgXC4gW148Kl0rIDxcL0ZyYW1ld29yaz4gfXhtczsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFZlcnNpb25NYWpvciA+ICRUaWR5QWxsOjpPVE9CTzo6RnJhbWV3b3JrVmVyc2lvbk1ham9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFZlcnNpb25NYWpvciA9PSAkVGlkeUFsbDo6T1RPQk86OkZyYW1ld29ya1ZlcnNpb25NYWpvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRWZXJzaW9uTWlub3IgPiAkVGlkeUFsbDo6T1RPQk86OkZyYW1ld29ya1ZlcnNpb25NaW5vcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGlkeUFsbDo6T1RPQk86OkZyYW1ld29ya1ZlcnNpb25NYWpvciA9ICRWZXJzaW9uTWFqb3I7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGlkeUFsbDo6T1RPQk86OkZyYW1ld29ya1ZlcnNpb25NaW5vciA9ICRWZXJzaW9uTWlub3I7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkTGluZSA9fiBtezxWZW5kb3I+fSAmJiAkTGluZSAhfiBte1JvdGhlciBPU1N9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkVGlkeUFsbDo6T1RPQk86OlRoaXJkcGFydHlNb2R1bGUgPSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBsYXN0IEZJTEU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaWYgKCRUaWR5QWxsOjpPVE9CTzo6RnJhbWV3b3JrVmVyc2lvbk1ham9yKSB7CiAgICAgICAgcHJpbnQKICAgICAgICAgICAgIkZvdW5kIE9UT0JPIHZlcnNpb24gJFRpZHlBbGw6Ok9UT0JPOjpGcmFtZXdvcmtWZXJzaW9uTWFqb3IuJFRpZHlBbGw6Ok9UT0JPOjpGcmFtZXdvcmtWZXJzaW9uTWlub3JcbiI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBwcmludCAiQ291bGQgbm90IGRldGVybWluZSBPVE9CTyB2ZXJzaW9uIChhc3N1bWluZyBsYXRlc3QgdmVyc2lvbikhXG4iOwogICAgfQoKICAgIGlmICgkVGlkeUFsbDo6T1RPQk86OlRoaXJkcGFydHlNb2R1bGUpIHsKICAgICAgICBwcmludAogICAgICAgICAgICAiVGhpcyBzZWVtcyB0byBiZSBhIG1vZHVsZSBub3QgY29weXJpZ2h0ZWQgYnkgUm90aGVyIE9TUyBHbWJILiBGaWxlIGNvcHlyaWdodCB3aWxsIG5vdCBiZSBjaGFuZ2VkLlxuIjsKICAgIH0KICAgIGVsc2UgewogICAgICAgIHByaW50CiAgICAgICAgICAgICJUaGlzIG1vZHVsZSBzZWVtcyB0byBiZSBjb3B5cmlnaHRlZCBieSBSb3RoZXIgT1NTIEdtYkguIEZpbGUgY29weXJpZ2h0IHdpbGwgYXV0b21hdGljYWxseSBiZSBhc3NpZ25lZCB0byBSb3RoZXIgT1NTIEdtYkguXG4iOwogICAgICAgIHByaW50CiAgICAgICAgICAgICIgIElmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHlvdSBjYW4gY2hhbmdlIHRoZSA8VmVuZG9yPiB0YWcgaW4geW91ciBTT1BNLlxuIjsKICAgIH0KCiAgICByZXR1cm4gJFRpZHlBbGw7Cn0KCnN1YiBHZXRHaXRGaWxlQ29udGVudHMgewogICAgbXkgKCAkU2VsZiwgJEZpbGUsICRDb21taXQgKSA9IEBfOwogICAgbXkgJENvbnRlbnQgPSBjYXB0dXJleCggImdpdCIsICJzaG93IiwgIiRDb21taXQ6JEZpbGUiICk7CiAgICByZXR1cm4gJENvbnRlbnQ7Cn0KCnN1YiBHZXRHaXRGaWxlTGlzdCB7CiAgICBteSAoICRTZWxmLCAkQ29tbWl0ICkgPSBAXzsKICAgIG15ICRPdXRwdXQgPSBjYXB0dXJleCggImdpdCIsICJscy10cmVlIiwgIi0tbmFtZS1vbmx5IiwgIi1yIiwgIiRDb21taXQiICk7CiAgICByZXR1cm4gc3BsaXQgL1xuLywgJE91dHB1dDsKfQoKc3ViIEdldENoYW5nZWRGaWxlcyB7CiAgICBteSAoICRTZWxmLCAkQmFzZSwgJENvbW1pdCApID0gQF87CgogICAgIyBPbmx5IHVzZSB0aGUgbGFzdCBjb21taXQgaWYgd2UgaGF2ZSBhIG5ldyBicmFuY2guCiAgICAjICAgVGhpcyBpcyBub3QgcGVyZmVjdCwgYnV0IG90aGVyd2lzZSBxdWl0ZSBjb21wbGljYXRlZC4KICAgIGlmICggJEJhc2UgPX4gbS9eMCskLyApIHsKICAgICAgICBteSAkT3V0cHV0ID0gY2FwdHVyZXgoICdnaXQnLCAnZGlmZi10cmVlJywgJy0tbm8tY29tbWl0LWlkJywgJy0tbmFtZS1vbmx5JywgJy1yJywgJENvbW1pdCApOwogICAgICAgIG15IEBGaWxlcyAgPSBncmVwIHsvXFMvfSBzcGxpdCggbS9cbi8sICRPdXRwdXQgKTsKICAgICAgICByZXR1cm4gQEZpbGVzOwogICAgfQoKICAgIG15ICRPdXRwdXQgPSBjYXB0dXJleCggJ2dpdCcsICJkaWZmIiwgIi0tbnVtc3RhdCIsICItLW5hbWUtb25seSIsICIkQmFzZS4uJENvbW1pdCIgKTsKICAgIG15IEBGaWxlcyAgPSBncmVwIHsvXFMvfSBzcGxpdCggbS9cbi8sICRPdXRwdXQgKTsKICAgIHJldHVybiBARmlsZXM7Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Base.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkJhc2U7Cgp1c2UgdjUuMjQ7CnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgTW9vOwoKZXh0ZW5kcyBxdyhDb2RlOjpUaWR5QWxsOjpQbHVnaW4pOwoKdXNlIFRpZHlBbGw6Ok9UT0JPOwoKdXNlIFRlcm06OkFOU0lDb2xvciBxdyhjb2xvcmVkKTsKCnN1YiBJc1BsdWdpbkRpc2FibGVkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFBsdWdpblBhY2thZ2UgPSByZWYgJFNlbGY7CgogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17Q29kZX0gJiYgIWRlZmluZWQgJFBhcmFte0ZpbGVuYW1lfSApIHsKICAgICAgICBwcmludCBTVERFUlIgIk5lZWQgQ29kZSBvciBGaWxlbmFtZSFcbiI7CiAgICAgICAgZGllOwogICAgfQoKICAgIG15ICRDb2RlID0gJFBhcmFte0NvZGV9IC8vICRTZWxmLT5fR2V0RmlsZUNvbnRlbnRzKCAkUGFyYW17RmlsZW5hbWV9ICk7CgogICAgIyBBbiBleGFtcGxlIGZvciBhIG5vZmlsdGVyIGRpcmVjdGl2ZSBpczoKICAgICMgICAjIyBub2ZpbHRlckRVTU1ZKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBhcmFtT2JqZWN0KQogICAgIyAoQWRkZWQgYSBEVU1NWSBzbyB0aGF0IHRoZSBub2ZpbHRlciBkaXJlY3RpdmUgaXMgbm90IGFjdHVhbGx5IHRyaWdnZXJlZCkKICAgICMgU3VjaCBhbiBkaXJlY3RpdmUgbWF5IG9jY3VyIGFueXdoZXJlIGluIHRoZSBjb2RlLgogICAgcmV0dXJuIDEgaWYgJENvZGUgPX4gbXtub2ZpbHRlclwoW14oKV0qXFEkUGx1Z2luUGFja2FnZVxFW14oKV0qXCl9aXNteDsKCiAgICByZXR1cm47Cn0KCnN1YiBJc0ZyYW1ld29ya1ZlcnNpb25MZXNzVGhhbiB7CiAgICBteSAoICRTZWxmLCAkRnJhbWV3b3JrVmVyc2lvbk1ham9yLCAkRnJhbWV3b3JrVmVyc2lvbk1pbm9yICkgPSBAXzsKCiAgICBpZiAoJFRpZHlBbGw6Ok9UT0JPOjpGcmFtZXdvcmtWZXJzaW9uTWFqb3IpIHsKICAgICAgICByZXR1cm4gMSBpZiAkVGlkeUFsbDo6T1RPQk86OkZyYW1ld29ya1ZlcnNpb25NYWpvciA8ICRGcmFtZXdvcmtWZXJzaW9uTWFqb3I7CiAgICAgICAgcmV0dXJuIDAgaWYgJFRpZHlBbGw6Ok9UT0JPOjpGcmFtZXdvcmtWZXJzaW9uTWFqb3IgPiAkRnJhbWV3b3JrVmVyc2lvbk1ham9yOwogICAgICAgIHJldHVybiAxIGlmICRUaWR5QWxsOjpPVE9CTzo6RnJhbWV3b3JrVmVyc2lvbk1pbm9yIDwgJEZyYW1ld29ya1ZlcnNpb25NaW5vcjsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICAjIERlZmF1bHQ6IGlmIGZyYW1ld29yayBpcyB1bmtub3duLCByZXR1cm4gZmFsc2UgKHN0cmljdCBjaGVja3MpLgogICAgcmV0dXJuIDA7Cn0KCnN1YiBJc1RoaXJkcGFydHlNb2R1bGUgewogICAgbXkgKCRTZWxmKSA9IEBfOwoKICAgIHJldHVybiAkVGlkeUFsbDo6T1RPQk86OlRoaXJkcGFydHlNb2R1bGUgPyAxIDogMDsKfQoKc3ViIERpZVdpdGhFcnJvciB7CiAgICBteSAoICRTZWxmLCAkRXJyb3IgKSA9IEBfOwoKICAgIGNob21wICRFcnJvcjsKCiAgICBkaWUgY29sb3JlZCggcmVmKCRTZWxmKSwgJ3llbGxvdycgKSAuICJcbiIgLiBjb2xvcmVkKCAkRXJyb3IsICdyZWQnICkgLiAiXG4iOwp9CgpzdWIgX0dldEZpbGVDb250ZW50cyB7CiAgICBteSAoICRTZWxmLCAkRmlsZW5hbWUgKSA9IEBfOwoKICAgIG9wZW4oIG15ICRGaWxlSGFuZGxlLCAnPCcsICRGaWxlbmFtZSApIHx8IGRpZSAiQ2FuJ3Qgb3BlbiAkRmlsZW5hbWVcbiI7ICAgICMjIG5vIGNyaXRpYyBxdyhPVE9CTzo6UHJvaGliaXRPcGVuKQoKICAgIG15ICRDb250ZW50ID0gZG8geyBsb2NhbCAkLyA9IHVuZGVmOyA8JEZpbGVIYW5kbGU+IH07CiAgICBjbG9zZSAkRmlsZUhhbmRsZTsKCiAgICByZXR1cm4gJENvbnRlbnQ7Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Common/CRLFLineEndings.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkNvbW1vbjo6Q1JMRkxpbmVFbmRpbmdzOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEZpbGU6OkJhc2VuYW1lOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6QmFzZSk7Cgo9aGVhZDEgU1lOT1BTSVMKClRoaXMgcGx1Z2luIGNvbnZlcnRzIGZpbGVzIHdpdGggQ1JMRiBsaW5lIGVuZGluZ3MuCgo9Y3V0CgpzdWIgdHJhbnNmb3JtX3NvdXJjZSB7CiAgICBteSAoICRTZWxmLCAkQ29kZSApID0gQF87CgogICAgcmV0dXJuICRDb2RlIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBDb2RlID0+ICRDb2RlICk7CgogICAgIyBSZW1vdmUgQ1JMRiBsaW5lIGVuZGluZ3MuCiAgICAkQ29kZSA9fiBzeyBcciAkIH17fXhtc2c7CgogICAgcmV0dXJuICRDb2RlOwp9CgpzdWIgdmFsaWRhdGVfc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gJENvZGUgaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICBpZiAoICRDb2RlID1+IG17IFxyICQgfXhtc2cgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoIkZvdW5kIENSTEYgbGluZSBlbmRpbmdzISIpOwogICAgfQoKICAgIHJldHVybiAkQ29kZTsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Common/CustomizationMarkers.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkNvbW1vbjo6Q3VzdG9taXphdGlvbk1hcmtlcnM7CiMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkNvbW1vbjo6Q3VzdG9taXphdGlvbk1hcmtlcnMpCiMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkNvbW1vbjo6T3JpZ2luKQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEZpbGU6OkJhc2VuYW1lOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6QmFzZSk7Cgo9aGVhZDEgU1lOT1BTSVMKClRoaXMgcGx1Z2luIGNoZWNrcyB0aGF0IG9ubHkgdmFsaWQgT1RPQk8gY3VzdG9taXphdGlvbiBtYXJrZXJzIGFyZSB1c2VkCnRvIG1hcmsgY2hhbmdlZCBsaW5lcyBpbiBjdXN0b21pemVkL2Rlcml2ZWQgZmlsZXMuCgo9Y3V0CgpzdWIgdHJhbnNmb3JtX3NvdXJjZSB7CiAgICBteSAoICRTZWxmLCAkQ29kZSApID0gQF87CgogICAgcmV0dXJuICRDb2RlIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBDb2RlID0+ICRDb2RlICk7CgogICAgIyBGaW5kIHdyb25nIGN1c3RvbWl6YXRpb24gbWFya2VycyB3aXRob3V0IHNwYWNlIG9yIHdpdGggNCBoeXBoZW5zIGFuZCBjb3JyZWN0IHRoZW0KICAgICMKICAgICMgICAjLS0tCiAgICAjCiAgICAjICAgdG8KICAgICMKICAgICMgICAjIC0tLQogICAgIwogICAgJENvZGUgPX4gc3sgXiBbIF0qICggKD86IFwjIHwgXC9cLyApICkgWyBdKiAtezMsNH0gWyBdKiAkIH17JDEgLS0tfXhtc2c7CgogICAgIyBGaW5kIHdyb25nIGN1c3RvbWl6YXRpb24gbWFya2VycyBpbiBKUyBmaWxlcyBhbiBjb3JyZWN0IHRoZW0KICAgICMKICAgICMgICAvKioqLwogICAgIwogICAgIyAgIHRvCiAgICAjCiAgICAjICAgLy8gLS0tCiAgICAjCiAgICAkQ29kZSA9fiBzeyBeIFsgXSogXC8gWyBdKiBcKnsyLDN9IFsgXSogXC8gWyBdKiAkIH17Ly8gLS0tfXhtc2c7CgogICAgIyBGaW5kIHdyb25nIGNvbW1lbnRzIGFuZCBjb3JyZWN0IHRoZW0KICAgICMKICAgICMgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjCiAgICAjICAgb3IKICAgICMKICAgICMgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICMKICAgICMgICB0bwogICAgIwogICAgIyAgICMKICAgICMKICAgICRDb2RlID1+IHN7IF4gXG4gXiBbIF0qICg/OiBcIyB8IFwvXC8gKSBbIF0qIC17NSw1MH0gWyBdKiAkIFxuIF4gXG4gfXtcbn14bXNnOwogICAgJENvZGUgPX4gc3sgXiAoIFsgXSogKD86IFwjIHwgXC9cLyApICkgWyBdKiAtezUsNTB9IFsgXSogJCB9eyQxfXhtc2c7CgogICAgIyBGaW5kIHNvbWVzdGhpbmcgbGlrZSB0aGF0IGFuZCByZW1vdmUgdGhlIGxlYWRpbmcgc3BhY2VzCiAgICAjCiAgICAjICAgIyAtLS0KICAgICMgICAjIE9UT0JPWHlaIC0gSGVyZSBhIGNvbW1lbnQuCiAgICAjICAgIyAtLS0KICAgICMKICAgICMgICBvcgogICAgIwogICAgIyAgICMgLS0tCiAgICAjICAgIyBPVE9CT1h5WgogICAgIyAgICMgLS0tCiAgICAjICAgIyBteSAkU3ViamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0U3ViamVjdENsZWFuKCk7CiAgICAjCiAgICAkQ29kZSA9fiBzewogICAgICAgICgKICAgICAgICAgICAgXiBbIF0rICg/OiBcIyB8IFwvXC8gKSBbIF0rIC0tLSBbIF0qICQgXG4KICAgICAgICAgICAgXiBbIF0rICg/OiBcIyB8IFwvXC8gKSBbIF0rIFteIF0rICg/OiBbIF0rIC0gW15cbl0rIHwgKSAkIFxuCiAgICAgICAgICAgIF4gWyBdKyAoPzogXCMgfCBcL1wvICkgWyBdKyAtLS0gWyBdKiAkIFxuCiAgICAgICAgICAgICg/OiBeIFsgXSsgKD86IFwjIHwgXC9cLyApIFteXG5dKiAkIFxuICkqCiAgICAgICAgKQogICAgfXsKICAgICAgICBteSAkU3RyaW5nID0gJDE7CiAgICAgICAgJFN0cmluZyA9fiBzeyBeIFsgXSsgfXt9eG1zZzsKICAgICAgICAkU3RyaW5nOwogICAgfXhtc2dlOwoKICAgICMgRmluZCB3cm9uZyBjdXN0b21pemF0aW9uIG1hcmtlcnMgaW4gSlMgZmlsZXMgYW4gY29ycmVjdCB0aGVtCiAgICAjCiAgICAjICAgLyoqCiAgICAjICAgKiBPVE9CT1h5WiAtIEhlcmUgYSBjb21tZW50LgogICAgIyAgICoqLwogICAgIwogICAgIyAgIG9yCiAgICAjCiAgICAjICAgLyoqKgogICAgIyAgICogT1RPQk9YeVoKICAgICMgICAqKiovCiAgICAjCiAgICAjICAgdG8KICAgICMKICAgICMgICAvLyAtLS0KICAgICMgICAvLyBPVE9CT1h5WgogICAgIyAgIC8vIC0tLQogICAgIwogICAgJENvZGUgPX4gc3sKICAgICAgICBeIFsgXSogXC8gWyBdKiBcKnsyLDN9IFsgXSogJCBcbgogICAgICAgIF4gWyBdKiBcKnsxLDN9IFsgXSsgKCBbXiBdKyAoPzogWyBdKyAtIFteXG5dKyB8ICkgKSAkIFxuCiAgICAgICAgXiBbIF0qIFwqezIsM30gWyBdKiBcLyBbIF0qICQgXG4KICAgIH17JFNlbGYtPl9DdXN0b21pemF0aW9uTWFya2VyKCQxKX14bXNnZTsKCiAgICAjIEZpbmQgc29tZXN0aGluZyBsaWtlIHRoYXQgYW5kIHJlbW92ZSB0aGUgbGVhZGluZyBzcGFjZXMKICAgICMKICAgICMgICAjIC0tLQogICAgIwogICAgJENvZGUgPX4gc3sgXiBbIF0rICggKD86IFwjIHwgXC9cLyApICkgWyBdKyAtLS0gWyBdKiAkIH17JDEgLS0tfXhtc2c7CgogICAgcmV0dXJuICRDb2RlOwp9CgpzdWIgdmFsaWRhdGVfc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gJENvZGUgaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICBteSAoICRDb3VudGVyLCAkRmxhZywgJEVycm9yTWVzc2FnZSApOwoKICAgIExJTkU6CiAgICBmb3IgbXkgJExpbmUgKCBzcGxpdCAvXG4vLCAkQ29kZSApIHsKCiAgICAgICAgJENvdW50ZXIrKzsKCiAgICAgICAgIyBBbGxvdyAjIyBubyBjcml0aWMgYW5kICMjIHVzZSBjcml0aWMKICAgICAgICBuZXh0IExJTkUgaWYgJExpbmUgPX4gbXteIFxzKiBcI1wjIFxzKyAoPzpub3x1c2UpIFxzKyBjcml0aWN9eG1zOwoKICAgICAgICAjIEFsbG93ICMjIG5vZmlsdGVyCiAgICAgICAgbmV4dCBMSU5FIGlmICRMaW5lID1+IG17XiBccyogXCNcIyBccysgbm9maWx0ZXIgfXhtczsKCiAgICAgICAgaWYgKCAkTGluZSA9fiAvXlteI10vICYmICRDb3VudGVyIDwgMjQgKSB7CiAgICAgICAgICAgICRGbGFnID0gMTsKICAgICAgICB9CiAgICAgICAgaWYgKCAkTGluZSA9fiAvXiAqIyAtLSQvICYmICggJENvdW50ZXIgPiAyMyB8fCAoICRDb3VudGVyID4gMTAgJiYgJEZsYWcgKSApICkgewogICAgICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICJMaW5lICRDb3VudGVyOiAkTGluZVxuIjsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkTGluZSA9fiBteyBeIFsgXSogKD86IFwjIHwgXC9cLyApKyBbIF0qIC0gWyBdKiAkIH14bXMgKSB7CiAgICAgICAgICAgICRFcnJvck1lc3NhZ2UgLj0gIkxpbmUgJENvdW50ZXI6ICRMaW5lXG4iOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRMaW5lID1+IG17IF4gWyBdKiAoPzogXCMgfCBcL1wvICkrIC17MSx9IFsgXSogJCB9eG1zICkgewogICAgICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICJMaW5lICRDb3VudGVyOiAkTGluZVxuIjsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkTGluZSA9fiBteyBeIFsgXSogKD86IFwjIHwgXC9cLyApKyBbIF0qIC17NCw0MH0gWyBdKiAkIH14bXMgKSB7CiAgICAgICAgICAgICRFcnJvck1lc3NhZ2UgLj0gIkxpbmUgJENvdW50ZXI6ICRMaW5lXG4iOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRMaW5lID1+IC9eICojKyAqW1wqXCtdKyQvICkgewogICAgICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICJMaW5lICRDb3VudGVyOiAkTGluZVxuIjsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkTGluZSA9fiBteyBeIFsgXSogKD86IFwjIHwgXC9cLyApezMsfSB9eG1zICkgewogICAgICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICJMaW5lICRDb3VudGVyOiAkTGluZVxuIjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCRFcnJvck1lc3NhZ2UpIHsKICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcig8PCJFT0YiKTsKUGxlYXNlIHJlbW92ZSBvciByZXBsYWNlIHdyb25nIFNlcGFyYXRvcnMgbGlrZSAnIyAtLScsIHZhbGlkIG9ubHk6ICMgLS0tIChmb3IgY3VzdG9taXppbmcgb3RvYm8gZmlsZXMpLgokRXJyb3JNZXNzYWdlCkVPRgogICAgfQoKICAgIHJldHVybiAkQ29kZTsKfQoKc3ViIF9DdXN0b21pemF0aW9uTWFya2VyIHsKICAgIG15ICggJFNlbGYsICRNb2R1bGUgKSA9IEBfOwoKICAgIHJldHVybiA8PCJFTkRfQ1VTVE9NTUFSS0VSIjsKLy8gLS0tCi8vICRNb2R1bGUKLy8gLS0tCkVORF9DVVNUT01NQVJLRVIKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Common/CustomizationMarkersTT.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkNvbW1vbjo6Q3VzdG9taXphdGlvbk1hcmtlcnNUVDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBGaWxlOjpCYXNlbmFtZTsKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkJhc2UpOwoKPWhlYWQxIFNZTk9QU0lTCgpUaGlzIHBsdWdpbiBjaGVja3MgdGhhdCBvbmx5IHZhbGlkIE9UT0JPIGN1c3RvbWl6YXRpb24gbWFya2VycyBhcmUgdXNlZAp0byBtYXJrIGNoYW5nZWQgbGluZXMgaW4gY3VzdG9taXplZC9kZXJpdmVkIEM8LnR0PiBmaWxlcy4KCj1jdXQKCnN1YiB0cmFuc2Zvcm1fc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gJENvZGUgaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICAjIEZpbmQgY3VzdG9taXphdGlvbiBtYXJrZXJzIHdpdGggLy8gaW4gLnR0IGZpbGVzIGFuZCByZXBsYWNlIHRoZW0gd2l0aCAjLgogICAgIwogICAgIyAgIC8vIC0tLQogICAgIyAgIC8vIE9UT0JPWHlaIC0gSGVyZSBhIGNvbW1lbnQuCiAgICAjICAgLy8gLS0tCiAgICAjCiAgICAjICAgdG8KICAgICMKICAgICMgICAjIC0tLQogICAgIyAgICMgT1RPQk9YeVogLSBIZXJlIGEgY29tbWVudC4KICAgICMgICAjIC0tLQogICAgIwogICAgJENvZGUgPX4gc3sKICAgICAgICAoCiAgICAgICAgICAgIF4gWyBdKiBcL1wvIFsgXSsgLS0tIFsgXSogJCBcbgogICAgICAgICAgICBeIFsgXSogXC9cLyBbIF0rIFteIF0rICg/OiBbIF0rIC0gW15cbl0rIHwgKSAkIFxuCiAgICAgICAgICAgIF4gWyBdKiBcL1wvIFsgXSsgLS0tIFsgXSogJCBcbgogICAgICAgICAgICAoPzogXiBbIF0qIFwvXC8gW15cbl0qICQgXG4gKSoKICAgICAgICApCiAgICB9ewogICAgICAgIG15ICRTdHJpbmcgPSAkMTsKICAgICAgICAkU3RyaW5nID1+IHN7IF4gWyBdKiBcL1wvIH17I314bXNnOwogICAgICAgICRTdHJpbmc7CiAgICB9eG1zZ2U7CgogICAgIyBGaW5kIHdyb25nIGN1c3RvbWl6YXRpb24gbWFya2VycyBpbiAudHQgZmlsZXMgYW5kIGNvcnJlY3QgdGhlbS4KICAgICMKICAgICMgICAvLyAtLS0KICAgICMKICAgICMgICB0bwogICAgIwogICAgIyAgICMgLS0tCiAgICAjCiAgICAkQ29kZSA9fiBzeyBeIFsgXSogXC9cLyBbIF0rIC0tLSBbIF0qICQgfXsjIC0tLX14bXNnOwoKICAgIHJldHVybiAkQ29kZTsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Common/NoFilter.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkNvbW1vbjo6Tm9GaWx0ZXI7CiMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBvZDo6U3BlbGxDaGVjaykKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBGaWxlOjpCYXNlbmFtZTsKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkJhc2UpOwoKPWhlYWQxIFNZTk9QU0lTCgpUaGlzIHBsdWdpbiBmaXhlcyBub2ZpbHRlciBsaW5lcy4KCj1jdXQKCnN1YiB0cmFuc2Zvcm1fc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gJENvZGUgaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICAjIFJlcGxhY2Ugbm9maWx0ZXIgbGluZXMgaW4gcG0gbGlrZSBmaWxlcy4KICAgICMKICAgICMgT3JpZ2luYWw6CiAgICAjICAgICAjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkxlZ2FsOjpMaWNlbnNlVmFsaWRhdG9yKQogICAgIyAgICAgIyBub2ZpbHRlciAoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6TGVnYWw6OkxpY2Vuc2VWYWxpZGF0b3IpCiAgICAjICAgICAjIyBub2ZpbHRlciAoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6TGVnYWw6OkxpY2Vuc2VWYWxpZGF0b3IpCiAgICAjICAgICAjIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpMZWdhbDo6TGljZW5zZVZhbGlkYXRvcik7CiAgICAjICAgICBteSAkRW1haWwgPSAnc3VwcG9ydEBvdG9iby5jb20nOyAgICAjbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6Q29tbW9uOjpQcm9oaWJpdEVtYWlsQWRkcmVzc2VzKQogICAgIwogICAgIyBSZXBsYWNlbWVudDoKICAgICMgICAgICMjIG5vZmlsdGVyIChUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpMZWdhbDo6TGljZW5zZVZhbGlkYXRvcikKICAgICMgICAgIG15ICRFbWFpbCA9ICdzdXBwb3J0QG90b2JvLmNvbSc7ICAgICMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkNvbW1vbjo6UHJvaGliaXRFbWFpbEFkZHJlc3NlcykKICAgICMKICAgICRDb2RlID1+IHN7IF4gKCBbXlwjXG5dKiApIFwjKyBccyogbm8gXHMqIGZpbHRlciBccyogXCggKCAuKz8gKSBcKSAuKj8gXG4gfXskMSMjIG5vZmlsdGVyKCQyKVxufXhtc2c7CgogICAgIyBSZXBsYWNlIG5vZmlsdGVyIGxpbmVzIGluIGpzIGxpa2UgZmlsZXMuCiAgICAjCiAgICAjIE9yaWdpbmFsOgogICAgIyAgICAgLy8gbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6TGVnYWw6OkxpY2Vuc2VWYWxpZGF0b3IpCiAgICAjICAgICAvLyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpMZWdhbDo6TGljZW5zZVZhbGlkYXRvcikKICAgICMgICAgIC8vIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkphdmFTY3JpcHQ6OkZpbGVOYW1lKQogICAgIyAgICAgLy8gbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6TGVnYWw6OkxpY2Vuc2VWYWxpZGF0b3IpCiAgICAjICAgICB2YXIgZW1haWwgPSAnc3VwcG9ydEBvdG9iby5kZSc7ICAgIC8vIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkNvbW1vbjo6UHJvaGliaXRFbWFpbEFkZHJlc3NlcykKICAgICMKICAgICMgUmVwbGFjZW1lbnQ6CiAgICAjICAgICAvLyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpMZWdhbDo6TGljZW5zZVZhbGlkYXRvcikKICAgICMgICAgIHZhciBlbWFpbCA9ICdzdXBwb3J0QG90b2JvLmRlJzsgICAgLy8gbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6Q29tbW9uOjpQcm9oaWJpdEVtYWlsQWRkcmVzc2VzKQogICAgIwogICAgJENvZGUgPX4gc3sgXiAoIFteXC9cbl0qICkgXC8rIFxzKiBubyBccyogZmlsdGVyIFxzKiBcKCAoIC4rPyApIFwpIC4qPyBcbiB9eyQxLy8gbm9maWx0ZXIoJDIpXG59eG1zZzsKCiAgICAjIFJlcGxhY2Ugbm9maWx0ZXIgbGluZXMgaW4gY3NzIGxpa2UgZmlsZXMuCiAgICAjCiAgICAjIE9yaWdpbmFsOgogICAgIyAgICAgLyogbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6TGVnYWw6OkxpY2Vuc2VWYWxpZGF0b3IpICovCiAgICAjICAgICAvKiogIG5vIGZpbHRlciAoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6TGVnYWw6OkxpY2Vuc2VWYWxpZGF0b3IpICovCiAgICAjICAgICAvKiAgbm9maWx0ZXIgKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkxlZ2FsOjpMaWNlbnNlVmFsaWRhdG9yKTsgKi8KICAgICMKICAgICMgUmVwbGFjZW1lbnQ6CiAgICAjICAgICAvKiBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpMZWdhbDo6TGljZW5zZVZhbGlkYXRvcikgKi8KICAgICMKICAgICRDb2RlCiAgICAgICAgPX4gc3sgXiAoIFxzKiApIFxcIFwqKyBbXlxuXSogbm8gXHMqIGZpbHRlciBccyogXCggKCAuKz8gKSBcKSAuKj8gXCorIFxcIFteXG5dKiBcbiB9eyQxLyogbm9maWx0ZXIoJDIpICovXG59eG1zZzsKCiAgICAjIFJlcGxhY2Ugbm9maWx0ZXIgbGluZXMgaW4geG1sIGxpa2UgZmlsZXMuCiAgICAjCiAgICAjIE9yaWdpbmFsOgogICAgIyAgICAgPCEtLSBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpMZWdhbDo6TGljZW5zZVZhbGlkYXRvcikgLS0+CiAgICAjICAgICA8IS0tICBubyBmaWx0ZXIgKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkxlZ2FsOjpMaWNlbnNlVmFsaWRhdG9yKSAtLT4KICAgICMgICAgIDwhLS0gIG5vZmlsdGVyIChUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpMZWdhbDo6TGljZW5zZVZhbGlkYXRvcik7IC0tPgogICAgIwogICAgIyBSZXBsYWNlbWVudDoKICAgICMgICAgIDwhLS0gbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6TGVnYWw6OkxpY2Vuc2VWYWxpZGF0b3IpIC0tPgogICAgIwogICAgJENvZGUKICAgICAgICA9fiBzeyBeICggXHMqICkgPCEtLSBbXlxuXSogbm8gXHMqIGZpbHRlciBccyogXCggKCAuKz8gKSBcKSAuKj8gLS0+IFteXG5dKiBcbiB9eyQxPCEtLSBub2ZpbHRlcigkMikgLS0+XG59eG1zZzsKCiAgICByZXR1cm4gJENvZGU7Cn0KCnN1YiB2YWxpZGF0ZV9zb3VyY2UgewogICAgbXkgKCAkU2VsZiwgJENvZGUgKSA9IEBfOwoKICAgIHJldHVybiAkQ29kZSBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZCggQ29kZSA9PiAkQ29kZSApOwoKICAgIHJldHVybiAkQ29kZSBpZiAkQ29kZSAhfiBteyBub2ZpbHRlciBcKCAuKz8gXCkgfXhtczsKCiAgICBpZiAoICRDb2RlID1+IG17IDwhLS0gXHMqIG5vZmlsdGVyIFxzKiBcKCB9eG1zICkgewoKICAgICAgICBpZiAoICRDb2RlICF+IG17IDwhLS0gXHMgbm9maWx0ZXIgXCggLis/IFwpIFxzIC0tPiB9eG1zICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcigiRm91bmQgaW52YWxpZCBub2ZpbHRlcigpIFhNTCBsaW5lISIpOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewoKICAgICAgICBpZiAoICRDb2RlICF+IG17ICg/OiBcI1wjIHwgXC9cLyB8IFwvXCogKSBccyBub2ZpbHRlciBcKCAuKz8gXCkgfXhtcyApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoIkZvdW5kIGludmFsaWQgbm9maWx0ZXIoKSBsaW5lISIpOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJENvZGU7Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Common/Origin.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkNvbW1vbjo6T3JpZ2luOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEZpbGU6OkJhc2VuYW1lOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6QmFzZSk7Cgo9aGVhZDEgU1lOT1BTSVMKClRoaXMgcGx1Z2luIGNoZWNrcyB0aGF0IG9ubHkgdmFsaWQgT1RPQk8gb3JpZ2lucyBhcmUgdXNlZAppbiBjdXN0b21pemVkL2Rlcml2ZWQgZmlsZXMuCgo9Y3V0CgpzdWIgdHJhbnNmb3JtX3NvdXJjZSB7CiAgICBteSAoICRTZWxmLCAkQ29kZSApID0gQF87CgogICAgcmV0dXJuICRDb2RlIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBDb2RlID0+ICRDb2RlICk7CgogICAgIyBSZW1vdmUgZm9ybWVyLW9yaWdpbiBiZWNhdXNlIGl0J3Mgbm90IG5lZWRlZCBhbnkgbW9yZQogICAgJENvZGUgPX4gc3sgXiBbIF0qICg/OiBcIyB8IFwvXC8gKSBbIF0rICg/OiBcJCApKiBmb3JtZXItb3JpZ2luOiAuKz8gJCBcbiB9e314bXNnOwoKICAgIG15ICRPcmlnaW4gPSAnJG9yaWdpbjonOwoKICAgICMgVHJhbnNmZXJzIHRoZSBvbGQgb3JpZ2luCiAgICAjCiAgICAjICMgJG9yaWdpbjogaHR0cHM6Ly9naXRodWIuY29tL09UT0JPL0lUU01JbmNpZGVudFByb2JsZW1NYW5hZ2VtZW50L2Jsb2IvNzRlZmNjYmM3ODIxNTM3MTM0YjUyMGI1MDhhMTE2YWZkZDQ4OWFkNC9LZXJuZWwvTW9kdWxlcy9BZ2VudFRpY2tldEFjdGlvbkNvbW1vbi5wbQogICAgIwogICAgIyB0byB0aGUgbmV3CiAgICAjCiAgICAjICMgJG9yaWdpbjogSVRTTUluY2lkZW50UHJvYmxlbU1hbmFnZW1lbnQgLSA3NGVmY2NiYzc4MjE1MzcxMzRiNTIwYjUwOGExMTZhZmRkNDg5YWQ0IC0gS2VybmVsL01vZHVsZXMvQWdlbnRUaWNrZXRBY3Rpb25Db21tb24ucG0KICAgICMKICAgICRDb2RlID1+IHN7CiAgICAgICAgXgogICAgICAgICggWyBdKiAoPzogXCMgWyBdKyAgfCBcL1wvIFsgXSsgfCA8R2l0PiApICkKICAgICAgICAoPzogXCQgfMKgKSBvcmlnaW46IFsgXSsgaHR0cCAoPzogcyB8wqApIDpcL1wvIGdpdGh1YiBcLiBjb20gXC8gT1RPQk8gXC8KICAgICAgICAoIFteXC8gXG5dKyApCiAgICAgICAgXC8gKD86IGJsb2JcLyB8IGNvbW1pdFwvIHwgICkKICAgICAgICAoIFthLXowLTldKyApCiAgICAgICAgXC8KICAgICAgICAoIC4rPyApCiAgICAgICAgJAogICAgfXskMSRPcmlnaW4gJDIgLSAkMyAtICQ0fXhtczsKCiAgICAjIFRyYW5zZmVycyB0aGUgb2xkIG9yaWdpbgogICAgIwogICAgIyAjICRvcmlnaW46IGh0dHBzOi8vZ2l0Lm90b2JvLmNvbS9vdG9iby9JVFNNSW5jaWRlbnRQcm9ibGVtTWFuYWdlbWVudC9ibG9icy83NGVmY2NiYzc4MjE1MzcxMzRiNTIwYjUwOGExMTZhZmRkNDg5YWQ0L0tlcm5lbC9Nb2R1bGVzL0FnZW50VGlja2V0QWN0aW9uQ29tbW9uLnBtCiAgICAjCiAgICAjIHRvIHRoZSBuZXcKICAgICMKICAgICMgIyAkb3JpZ2luOiBJVFNNSW5jaWRlbnRQcm9ibGVtTWFuYWdlbWVudCAtIDc0ZWZjY2JjNzgyMTUzNzEzNGI1MjBiNTA4YTExNmFmZGQ0ODlhZDQgLSBLZXJuZWwvTW9kdWxlcy9BZ2VudFRpY2tldEFjdGlvbkNvbW1vbi5wbQogICAgIwogICAgJENvZGUgPX4gc3sKICAgICAgICBeCiAgICAgICAgKCBbIF0qICg/OiBcIyB8IFwvXC8gKSApCiAgICAgICAgWyBdKyAoPzogXCQgfMKgKSBvcmlnaW46IFsgXSsgaHR0cCAoPzogcyB8wqApIDpcL1wvIGdpdCBcLiBvdG9ibyBcLiBjb20gXC8gb3RvYm8gXC8KICAgICAgICAoIFteXC8gXG5dKyApCiAgICAgICAgXC8gYmxvYnMgXC8KICAgICAgICAoIFthLXowLTldKyApCiAgICAgICAgXC8KICAgICAgICAoIC4rPyApCiAgICAgICAgJAogICAgfXskMSAkT3JpZ2luICQyIC0gJDMgLSAkNH14bXM7CgogICAgIyBUcmFuc2ZlcnMgYW4gQ1ZTIE9sZElkCiAgICAjCiAgICAjICMgJE9sZElkOiBBZ2VudFRpY2tldEVtYWlsLmR0bCx2IDEuMTQyLjIuMSAyMDExLzA5LzA3IDIwOjUzOjUwIGVuIEV4cCAkCiAgICAjCiAgICAjIHRvIHRoZSBuZXcgb3JpZ2luCiAgICAjCiAgICAjICMgJG9yaWdpbjogb3RvYm8gLSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0gQWdlbnRUaWNrZXRFbWFpbC5kdGwKICAgICMKCiAgICBpZiAoIG15ICgkRmlsZVN0cmluZykgPSAkQ29kZSA9fiBteyBeIFsgXSogKD86IFwjIHwgXC9cLyApIFsgXSsgXCRPbGRJZDogWyBdKyAoIFteXG5dKz8gKSAsdiBbIF0rIFteXG5dKyBcbiB9eG1zICkgewoKICAgICAgICBteSAkRmlsZVBhdGggPSAkRmlsZVN0cmluZzsKCiAgICAgICAgaWYgKCAkRmlsZVN0cmluZyA9fiBteyBeIFteXG5dKyBcLiBkdGwgJCB9eG1zICkgewogICAgICAgICAgICAkRmlsZVBhdGggPSAnS2VybmVsL091dHB1dC9IVE1ML1N0YW5kYXJkLycgLiAkRmlsZVN0cmluZzsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkRmlsZVN0cmluZyA9fiBteyBeIFteXG5dKyBcLiBqcyAkIH14bXMgKSB7CiAgICAgICAgICAgICRGaWxlUGF0aCA9ICd2YXIvaHR0cGQvaHRkb2NzL2pzLycgLiAkRmlsZVN0cmluZzsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkRmlsZVN0cmluZyA9fiBteyBeICg/OiBMYXlvdXQgfCBOYXZCYXIgfCBOb3RpZmljYXRpb25BZ2VudCB8IFRpY2tldE92ZXJ2aWV3IHwgVGlja2V0TWVudSB8IFRvb2xCYXIgfCBEYXNoYm9hcmQgKSBbXlxuXSsgXC4gcG0gJCB9eG1zICkgewogICAgICAgICAgICAkRmlsZVBhdGggPSAnS2VybmVsL091dHB1dC9IVE1MLycgLiAkRmlsZVN0cmluZzsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkRmlsZVN0cmluZyA9fiBteyBeICg/OiBBZ2VudCB8IEN1c3RvbWVyIHwgUHVibGljICkgW15cbl0rIFwuIHBtICQgfXhtcyApIHsKICAgICAgICAgICAgJEZpbGVQYXRoID0gJ0tlcm5lbC9Nb2R1bGVzLycgLiAkRmlsZVN0cmluZzsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkRmlsZVN0cmluZyA9fiBteyBeIFteXG5dKyBcLiBwbSAkIH14bXMgKSB7CiAgICAgICAgICAgICRGaWxlUGF0aCA9ICdLZXJuZWwvU3lzdGVtLycgLiAkRmlsZVN0cmluZzsKICAgICAgICB9CgogICAgICAgICRDb2RlID1+IHN7CiAgICAgICAgICAgIF4gKCBbIF0qICg/OiBcIyB8IFwvXC8gKSApIFsgXSsgXCRPbGRJZDogWyBdKyBbXlxuXSs/ICx2IFsgXSsgW15cbl0rIFxuCiAgICAgICAgfXskMSAkT3JpZ2luIG90b2JvIC0gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtICRGaWxlUGF0aFxufXhtczsKICAgIH0KCgogICAgIyBDaGVjayB0aGUgb3JpZ2luIGlmIGN1c3RvbWl6YXRpb24gbWFya2VycyBhcmUgZm91bmQKICAgIGlmICggJENvZGUgPX4gbXsgXiBbIF0qICg/OiBcIyB8IFwvXC8gKSBbIF0rIC0tLSBbIF0qICQgfXhtcyApIHsKCiAgICAgICAgbXkgJEZvdW5kT3JpZ2luOwogICAgICAgIG15ICRMaW5lQ291bnRlciA9IDA7CiAgICAgICAgT1JJR0lOTElORToKICAgICAgICBmb3IgbXkgJExpbmUgKCBzcGxpdCAvXG4vLCAkQ29kZSApIHsKICAgICAgICAgICAgJExpbmVDb3VudGVyKys7CgogICAgICAgICAgICBsYXN0IE9SSUdJTkxJTkUgaWYgJExpbmVDb3VudGVyID4gMTA7CgogICAgICAgICAgICBuZXh0IE9SSUdJTkxJTkUgaWYgJExpbmUgIX4gbXsgXiBbIF0qICg/OiBcIyB8IFwvXC8gKSBbIF0rIFwkb3JpZ2luOiBbIF0rIFteXG5dKyAkIH14bXM7CgogICAgICAgICAgICAkRm91bmRPcmlnaW4gPSAxOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAhJEZvdW5kT3JpZ2luICkgewoKICAgICAgICAgICAgbXkgJFBhY2thZ2VDb3VudGVyID0gMDsKCiAgICAgICAgICAgIFBBQ0tBR0VMSU5FOgogICAgICAgICAgICBmb3IgbXkgJExpbmUgKCBzcGxpdCAvXG4vLCAkQ29kZSApIHsKCiAgICAgICAgICAgICAgICBuZXh0IFBBQ0tBR0VMSU5FIGlmICRMaW5lICF+IG17IF4gcGFja2FnZSBbIF0rICggW0EtWmEtejAtOVw6XSsgKSBcOyAkIH14bXM7CgogICAgICAgICAgICAgICAgIyBjb3VudCBsaW5lcyB3aXRoIGFueSAncGFja2FnZS4uOycKICAgICAgICAgICAgICAgICRQYWNrYWdlQ291bnRlcisrOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gJENvZGUgaWYgJFBhY2thZ2VDb3VudGVyID09IDA7CgogICAgICAgICAgICAjIG9ubHkgb25lICdwYWNrYWdlJyBhbGxvd2VkIHBlciBmaWxlIC0gc3BsaXQgZmlyc3QgaWYgdGhlcmUgYXJlIG1vcmUgcGFja2FnZXMgY29tYmluZWQuCiAgICAgICAgICAgIGlmICgkUGFja2FnZUNvdW50ZXIgPiAxKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcigiJFBhY2thZ2VDb3VudGVyIHBhY2thZ2UgbGluZXMgZm91bmQuXG4iKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgKCRGaWxlUGF0aCkgPSAkQ29kZSA9fiBteyBeIHBhY2thZ2UgWyBdKyAoIFtBLVphLXowLTlcOl0rICkgXDsgJCB9eG1zOwoKICAgICAgICAgICAgIyBqdXN0IGFsbG93IEtlcm5lbCBhbmQgc2NyaXB0czo6dGVzdHMgdG8gYmUgbW9kaWZpZWQgYXV0b21hdGljYWxseQogICAgICAgICAgICByZXR1cm4gJENvZGUgaWYgJEZpbGVQYXRoICF+IG17IF4gKCBLZXJuZWwgfCBzY3JpcHRzIFw6XDogdGVzdHMgKT8gXDpcOiB9eG1zOwoKICAgICAgICAgICAgJEZpbGVQYXRoID1+IHN7IFw6XDogfXsvfWdzbXg7CgogICAgICAgICAgICBteSAkTmV3T3JpZ2luID0gJE9yaWdpbiAuICcgb3RvYm8gLSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0gJyAuICRGaWxlUGF0aCAuICcucG0nOwoKICAgICAgICAgICAgIyBwbGFjZSBuZXcgb3JpZ2luIGFmdGVyIENvcHlyaWdodAogICAgICAgICAgICAkQ29kZSA9fiBzeyAoIFwjIFsgXSsgQ29weXJpZ2h0IC4qIFwvIFxuIFwjIFsgXSsgLS0gXG4gXCMgWyBdKyApIH17JDEkTmV3T3JpZ2luXG4jIC0tXG4jIH14bXM7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkQ29kZTsKfQoKc3ViIHZhbGlkYXRlX3NvdXJjZSB7CiAgICBteSAoICRTZWxmLCAkQ29kZSApID0gQF87CgogICAgcmV0dXJuICRDb2RlIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBDb2RlID0+ICRDb2RlICk7CgogICAgIyBDaGVjayB0aGUgb3JpZ2luIGlmIGN1c3RvbWl6YXRpb24gbWFya2VycyBhcmUgZm91bmQKICAgIGlmICggJENvZGUgPX4gbXsgXiBbIF0qICg/OiBcIyB8IFwvXC8gKSBbIF0rIC0tLSBbIF0qICQgfXhtcyApIHsKCiAgICAgICAgbXkgJEZvdW5kT3JpZ2luOwogICAgICAgIG15ICRDb3VudGVyID0gMDsKICAgICAgICBMSU5FOgogICAgICAgIGZvciBteSAkTGluZSAoIHNwbGl0IC9cbi8sICRDb2RlICkgewoKICAgICAgICAgICAgJENvdW50ZXIrKzsKCiAgICAgICAgICAgIGxhc3QgTElORSBpZiAkQ291bnRlciA+IDEwOwoKICAgICAgICAgICAgbmV4dCBMSU5FIGlmICRMaW5lICF+IG17IF4gWyBdKiAoPzogXCMgfCBcL1wvICkgWyBdKyBcJG9yaWdpbjogWyBdKyBbXlxuXSsgJCB9eG1zOwoKICAgICAgICAgICAgJEZvdW5kT3JpZ2luID0gMTsKICAgICAgICB9CgogICAgICAgIGlmICghJEZvdW5kT3JpZ2luKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKCJDdXN0b21pemF0aW9uIG1hcmtlcnMgZm91bmQgYnV0IG5vIG9yaWdpbiBwcmVzZW50LlxuIik7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkQ29kZTsKfQoKc3ViIHZhbGlkYXRlX2ZpbGUgewogICAgbXkgKCAkU2VsZiwgJEZpbGVuYW1lICkgPSBAXzsKCiAgICByZXR1cm4gaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIEZpbGVuYW1lID0+ICRGaWxlbmFtZSApOwoKICAgIG15ICRDb2RlID0gJFNlbGYtPl9HZXRGaWxlQ29udGVudHMoJEZpbGVuYW1lKTsKCiAgICAjIENoZWNrIGlmIGFsbCBmaWxlcyBpbiB0aGUgQ3VzdG9tIGRpcmVjdG9yeSBoYXMgYW4gb3JpZ2luCiAgICBpZiAoICRGaWxlbmFtZSA9fiBteyBcL0N1c3RvbVwvIH14bXMgKSB7CgogICAgICAgICMgQ2hlY2sgaWYgYW4gb3JpZ2luIGV4aXN0LgogICAgICAgIGlmICggJENvZGUgIX4gbXsgXiBbIF0qICg/OiBcIyB8IFwvXC8gKSBbIF0rIFwkb3JpZ2luOiBbIF0rIFteXG5dKyAkIH14bXMgKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKCJGaWxlIGlzIGluIEN1c3RvbSBkaXJlY3RvcnkgYnV0IG5vIG9yaWdpbiBwcmVzZW50LlxuIik7CiAgICAgICAgfQogICAgfQoKICAgIGlmICggJEZpbGVuYW1lID1+IG17IC4qIFwuY3NzIH14bXNpICkgewoKICAgICAgICAjIENoZWNrIGlmIGEgQ1NTIGZpbGUgaXMgb3ZlcnJpdHRlbiBpbiBDdXN0b20gZGlyZWN0b3J5LgogICAgICAgIGlmICggJEZpbGVuYW1lID1+IG17IFwvQ3VzdG9tXC92YXJcLyB9eG1zICkgewoKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoPDwiRU9GIik7CkZvcmJpZGRlbiB0byBoYXZlIGEgQ1NTIGZpbGUgaW4gQ3VzdG9tIGZvbGRlciwgYmVjYXVzZSBpdCdzIG5vdCBhbGxvd2VkIHRvIG92ZXJyaWRlIGFuIGV4aXN0aW5nIENTUyBmaWxlLgpVc2UgYSBuZXcgb25lIHRvIG92ZXJyaWRlIGV4aXN0aW5nIENTUyBjbGFzc2VzLgpFT0YKICAgICAgICB9CgogICAgICAgICMgQ2hlY2sgaWYgYW4gb3JpZ2luIGV4aXN0LgogICAgICAgIGlmICggJENvZGUgPX4gbXsgXiBbIF0qICg/OiBcIyB8IFwvXC8gfCBcKiApIFsgXSsgKD86IFwkIHwgXEAgKSBvcmlnaW46IFsgXSsgW15cbl0rICQgfXhtcyApIHsKCiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKDw8IkVPRiIpOwpGb3JiaWRkZW4gdG8gaGF2ZSBhbiBvcmlnaW4gaW4gYSBDU1MgZmlsZSwgYmVjYXVzZSBpdCdzIG5vdCBhbGxvd2VkIHRvIG92ZXJyaWRlIGFuIGV4aXN0aW5nIENTUyBmaWxlLgpVc2UgYSBuZXcgb25lIHRvIG92ZXJyaWRlIGV4aXN0aW5nIENTUyBjbGFzc2VzLgpFT0YKICAgICAgICB9CgogICAgICAgICMgQ2hlY2sgaWYgY3VzdG9taXphdGlvbiBtYXJrZXJzIGV4aXN0cy4KICAgICAgICBpZiAoICRDb2RlID1+IG17IF4gWyBdKiAoPzogXCMgfCBcL1wvIHwgXCogfCBcL1wqICkgWyBdKyAtLS0gWyBdKiAkIH14bXMgKSB7CgogICAgICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcig8PCJFT0YiKTsKRm9yYmlkZGVuIHRvIGhhdmUgY3VzdG9taXphdGlvbiBtYXJrZXJzIGluIGEgQ1NTIGZpbGUsIGJlY2F1c2UgaXQncyBub3QgYWxsb3dlZCB0byBvdmVycmlkZSBhbiBleGlzdGluZyBDU1MgZmlsZS4KVXNlIGEgbmV3IG9uZSB0byBvdmVycmlkZSBleGlzdGluZyBDU1MgY2xhc3Nlcy4KRU9GCiAgICAgICAgfQogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Common/ProhibitEmailAddresses.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkNvbW1vbjo6UHJvaGliaXRFbWFpbEFkZHJlc3NlczsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBGaWxlOjpCYXNlbmFtZTsKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkJhc2UpOwoKPWhlYWQxIFNZTk9QU0lTCgpUaGlzIHBsdWdpbiBkaXNhbGxvd3MgcHJvYmxlbWF0aWMgZW1haWwgYWRkcmVzc2VzLgoKPWN1dAoKc3ViIHZhbGlkYXRlX3NvdXJjZSB7CiAgICBteSAoICRTZWxmLCAkQ29kZSApID0gQF87CgogICAgcmV0dXJuICRDb2RlIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBDb2RlID0+ICRDb2RlICk7CgogICAgbXkgKCAkQ291bnRlciwgJEVycm9yTWVzc2FnZSApOwoKICAgIGZvciBteSAkTGluZSAoIHNwbGl0IC9cbi8sICRDb2RlICkgewogICAgICAgICRDb3VudGVyKys7CiAgICAgICAgaWYgKCAkTGluZSA9fiAvc3VwcG9ydFxAb3RvYm9cLig/OmNvbXxkZSkvaXNteCApIHsKICAgICAgICAgICAgJEVycm9yTWVzc2FnZSAuPSAiTGluZSAkQ291bnRlcjogJExpbmVcbiI7CiAgICAgICAgfQogICAgfQoKICAgIGlmICgkRXJyb3JNZXNzYWdlKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoPDwiRU9GIik7CkRvbid0IHVzZSBzdXBwb3J0XEBvdG9iby5jb20gaW4gYW55IHNvdXJjZSBmaWxlcyBvciBkb2N1bWVudHMgYXMgdGhpcyBhZGRyZXNzIGhhcyBTUEFNIHByb2JsZW1zLgokRXJyb3JNZXNzYWdlCkVPRgogICAgfQogICAgcmV0dXJuOwp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Common/TranslatableStringsSpellCheck.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkNvbW1vbjo6VHJhbnNsYXRhYmxlU3RyaW5nc1NwZWxsQ2hlY2s7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgojIEltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIGh0dHBzOi8vbWV0YWNwYW4ub3JnL3NvdXJjZS9EUk9MU0tZL0NvZGUtVGlkeUFsbC0wLjU2L2xpYi9Db2RlL1RpZHlBbGwvUGx1Z2luL1BvZFNwZWxsLnBtCgp1c2UgRmlsZTo6VGVtcCgpOwoKdXNlIE1vbzsKCmV4dGVuZHMgJ1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkJhc2UnOwoKb3VyICRIdW5zcGVsbFBhdGg7Cm91ciAkSHVuc3BlbGxEaWN0aW9uYXJ5UGF0aDsKb3VyICRIdW5zcGVsbFdoaXRlbGlzdFBhdGg7CgpzdWIgdmFsaWRhdGVfZmlsZSB7CiAgICBteSAoICRTZWxmLCAkRmlsZSApID0gQF87CgogICAgcmV0dXJuIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBGaWxlbmFtZSA9PiAkRmlsZSApOwoKICAgIGlmICggISRIdW5zcGVsbFBhdGggKSB7CiAgICAgICAgJEh1bnNwZWxsUGF0aCA9IGB3aGljaCBodW5zcGVsbGA7CiAgICAgICAgY2hvbXAgJEh1bnNwZWxsUGF0aDsKICAgICAgICBpZiAoICEkSHVuc3BlbGxQYXRoICkgewogICAgICAgICAgICBwcmludCBTVERFUlIgX19QQUNLQUdFX18gLiAiXG5Db3VsZCBub3QgZmluZCAnaHVuc3BlbGwnLCBza2lwcGluZyBzcGVsbCBjaGVja2VyIHRlc3RzLlxuIjsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICRIdW5zcGVsbERpY3Rpb25hcnlQYXRoID0gX19GSUxFX18gPX4gc3tUcmFuc2xhdGFibGVTdHJpbmdzU3BlbGxDaGVja1wucG0kfXsuLi9TdGF0aWNGaWxlcy9IdW5zcGVsbC9EaWN0aW9uYXJpZXN9cjsKICAgICAgICAkSHVuc3BlbGxXaGl0ZWxpc3RQYXRoICA9IF9fRklMRV9fID1+IHN7XC5wbSR9ey5XaGl0ZWxpc3QudHh0fXI7CiAgICB9CgogICAgbXkgJFRleHQgPSAkU2VsZi0+X0V4dHJhY3RUcmFuc2xhdGFibGVTdHJpbmdzKCRGaWxlKTsKCiAgICByZXR1cm4gaWYgISRUZXh0OwoKICAgIG15ICRUZW1wRmlsZSA9IEZpbGU6OlRlbXAtPm5ldygpOwogICAgcHJpbnQgJFRlbXBGaWxlICRUZXh0OwogICAgJFRlbXBGaWxlLT5jbG9zZSgpOwoKICAgIG15ICRDTUQgICAgPSAiJEh1bnNwZWxsUGF0aCAtZCAke0h1bnNwZWxsRGljdGlvbmFyeVBhdGh9L2VuX1VTIC1wICRIdW5zcGVsbFdoaXRlbGlzdFBhdGggLWEgJFRlbXBGaWxlIjsKICAgIG15ICRPdXRwdXQgPSBgJENNRGA7CgogICAgaWYgKCAke15DSElMRF9FUlJPUl9OQVRJVkV9ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKCJFcnJvciBydW5uaW5nICckQ01EJzogJE91dHB1dCIpOwogICAgfQoKICAgIG15ICggQEVycm9ycywgJVNlZW4gKTsKICAgIExJTkU6CiAgICBmb3IgbXkgJExpbmUgKCBzcGxpdCggbS9cbi8sICRPdXRwdXQgKSApIHsKICAgICAgICBpZiAoIG15ICggJE9yaWdpbmFsLCAkUmVtYWluaW5nICkgPSAoICRMaW5lID1+IC9eW1wmXD9cI10gKFxTKylccysoLiopLyApICkgewoKICAgICAgICAgICAgaWYgKCAkT3JpZ2luYWwgPX4gbXteIF8/IFtBLVpdKyBbYS16MC05XSsgW0EtWmEtejAtOV0qIH1zbXggKSB7CiAgICAgICAgICAgICAgICBuZXh0IExJTkU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggISRTZWVueyRPcmlnaW5hbH0rKyApIHsKICAgICAgICAgICAgICAgIG15ICgkU3VnZ2VzdGlvbnMpID0gKCAkUmVtYWluaW5nID1+IC86ICguKikvICk7CiAgICAgICAgICAgICAgICBpZiAoJFN1Z2dlc3Rpb25zKSB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCggQEVycm9ycywgc3ByaW50ZiggIiVzIChzdWdnZXN0aW9uczogJXMpIiwgJE9yaWdpbmFsLCAkU3VnZ2VzdGlvbnMgKSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCggQEVycm9ycywgJE9yaWdpbmFsICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaWYgKEBFcnJvcnMpIHsKICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcigKICAgICAgICAgICAgc3ByaW50ZiggIlxuVHJhbnNsYXRhYmxlIHN0cmluZ3MgY29udGFpbnMgdW5yZWNvZ25pemVkIHdvcmRzOlxuJXNcbiIsIGpvaW4oICJcbiIsIHNvcnQgQEVycm9ycyApICkKICAgICAgICApOwogICAgfQoKICAgIHJldHVybjsKfQoKc3ViIF9FeHRyYWN0VHJhbnNsYXRhYmxlU3RyaW5ncyB7CiAgICBteSAoICRTZWxmLCAkRmlsZW5hbWUgKSA9IEBfOwoKICAgIG15ICRDb2RlID0gJFNlbGYtPl9HZXRGaWxlQ29udGVudHMoJEZpbGVuYW1lKTsKCiAgICBteSAkUmVzdWx0OwoKICAgIGlmICggJEZpbGVuYW1lID1+IG17LnR0JH1pc214ICkgewogICAgICAgICRDb2RlID1+IHN7CiAgICAgICAgICAgIFRyYW5zbGF0ZVwoCiAgICAgICAgICAgICAgICBccyoKICAgICAgICAgICAgICAgIChbIiddKSguKj8pKD88IVxcKVwxCiAgICAgICAgfQogICAgICAgIHsKICAgICAgICAgICAgbXkgJFdvcmQgPSAkMiAvLyAnJzsKCiAgICAgICAgICAgICMgdW5lc2NhcGUgYW55IFwiIG9yIFwnIHNpZ25zCiAgICAgICAgICAgICRXb3JkID1+IHN7XFwifXsifXNteGc7CiAgICAgICAgICAgICRXb3JkID1+IHN7XFwnfXsnfXNteGc7CgogICAgICAgICAgICAkUmVzdWx0IC49ICIkV29yZFxuIjsKCiAgICAgICAgICAgICcnOwogICAgICAgIH1lZ3g7CiAgICB9CiAgICBlbHNpZiAoICRGaWxlbmFtZSA9fiBte1wuKHBtfHBsKX1pc214ICkgewogICAgICAgICRDb2RlID1+IHN7CiAgICAgICAgICAgICg/OgogICAgICAgICAgICAgICAgLT5UcmFuc2xhdGUgfCBUcmFuc2xhdGFibGUKICAgICAgICAgICAgKQogICAgICAgICAgICBcKAogICAgICAgICAgICAgICAgXHMqCiAgICAgICAgICAgICAgICAoWyInXSkoLio/KSg/PCFcXClcMQogICAgICAgIH0KICAgICAgICB7CiAgICAgICAgICAgIG15ICRXb3JkID0gJDIgLy8gJyc7CgogICAgICAgICAgICAjIHVuZXNjYXBlIGFueSBcIiBvciBcJyBzaWducwogICAgICAgICAgICAkV29yZCA9fiBze1xcIn17In1zbXhnOwogICAgICAgICAgICAkV29yZCA9fiBze1xcJ317J31zbXhnOwoKICAgICAgICAgICAgIyBJZ25vcmUgc3RyaW5ncyBjb250YWluaW5nIHZhcmlhYmxlcwogICAgICAgICAgICBteSAkU2tpcFdvcmQ7CiAgICAgICAgICAgICRTa2lwV29yZCA9IDEgaWYgJFdvcmQgPX4gbXtcJH14bXM7CgogICAgICAgICAgICBpZiAoJFdvcmQgJiYgISRTa2lwV29yZCApIHsKICAgICAgICAgICAgICAgICRSZXN1bHQgLj0gIiRXb3JkXG4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgICcnOwogICAgICAgIH1lZ3g7CiAgICB9CiAgICBlbHNpZiAoICRGaWxlbmFtZSA9fiBte1wueG1sJH1pc214ICkgewogICAgICAgICRDb2RlID1+IHN7CiAgICAgICAgICAgIDxEYXRhW14+XStUcmFuc2xhdGFibGU9IjEiW14+XSo+KC4qPyk8L0RhdGE+CiAgICAgICAgfQogICAgICAgIHsKICAgICAgICAgICAgbXkgJFdvcmQgPSAkMSAvLyAnJzsKICAgICAgICAgICAgaWYgKCRXb3JkKSB7CiAgICAgICAgICAgICAgICAkUmVzdWx0IC49ICIkV29yZFxuIjsKICAgICAgICAgICAgfQogICAgICAgICAgICAnJzsKICAgICAgICB9ZWd4OwogICAgfQogICAgZWxzaWYgKCAkRmlsZW5hbWUgPX4gbXtcLmpzJH1pc214ICkgewogICAgICAgICRDb2RlID1+IHN7CiAgICAgICAgICAgICg/OgogICAgICAgICAgICAgICAgQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUKICAgICAgICAgICAgKQogICAgICAgICAgICBcKAogICAgICAgICAgICAgICAgXHMqCiAgICAgICAgICAgICAgICAoWyInXSkoLio/KSg/PCFcXClcMQogICAgICAgIH0KICAgICAgICB7CiAgICAgICAgICAgIG15ICRXb3JkID0gJDIgLy8gJyc7CgogICAgICAgICAgICAjIHVuZXNjYXBlIGFueSBcIiBvciBcJyBzaWducwogICAgICAgICAgICAkV29yZCA9fiBze1xcIn17In1zbXhnOwogICAgICAgICAgICAkV29yZCA9fiBze1xcJ317J31zbXhnOwoKICAgICAgICAgICAgaWYgKCAkV29yZCApIHsKICAgICAgICAgICAgICAgICRSZXN1bHQgLj0gIiRXb3JkXG4iOwogICAgICAgICAgICB9CgogICAgICAgICAgICAnJzsKICAgICAgICB9ZWd4OwogICAgfQoKICAgIHJldHVybiAkUmVzdWx0Owp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Common/TranslatableStringsSpellCheck.Whitelist.txt" Permission="660" Encode="Base64">b3RvYm8KaXRzbQpzbGEK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Common/RemoveCVSIDs.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkNvbW1vbjo6UmVtb3ZlQ1ZTSURzOwojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpDb21tb246OkN1c3RvbWl6YXRpb25NYXJrZXJzKQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEZpbGU6OkJhc2VuYW1lOwp1c2UgRmlsZTo6Q29weSBxdyhjb3B5KTsKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6QmFzZSk7Cgo9aGVhZDEgU1lOT1BTSVMKClRoaXMgcGx1Z2luIHJlbW92ZXMgb2xkICRJZDokIHRhZ3MgYW5kIHNpbWlsYXIgdGFncyB0aGF0IHdlcmUgYXV0b21hdGljYWxseQppbnNlcnRlZCBieSBDVlMgYnV0IGFyZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IGdpdCwgc3VjaCBhcyB0aGUgJFZFUlNJT04KdmFyaWFibGUgYXNzaWdubWVudC4gUGxlYXNlIHZlcmlmeSBpZiB5b3VyIGNvZGUgc3RpbGwgcnVucyBhZnRlciB0aGUgcmVtb3ZhbC4KCj1jdXQKCnN1YiB0cmFuc2Zvcm1fc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gJENvZGUgaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICAjIFJlbW92ZSAkSWQgbGluZXMKICAgICMKICAgICMgUGVybCBmaWxlcwogICAgIyAkSWQ6IE1haW4ucG0sdiAxLjY5IDIwMTMtMDItMDUgMTA6NDM6MDcgbWcgRXhwICQKICAgICMKICAgICMgSmF2YVNjcmlwdCBmaWxlcwogICAgIyAvLyAkSWQ6IENvcmUuQWdlbnQuQWRtaW4uRHluYW1pY0ZpZWxkLmpzLHYgMS4xMSAyMDEyLTA4LTA2IDEyOjMzOjI0IG1nIEV4cCAkCiAgICAkQ29kZSA9fiBzeyBeICg/OiBcIyB8IFwvXC8gKSBbIF0gXCRJZDogWyBdIC4rPyAkIFxuIH17fXhtc2c7CiAgICAkQ29kZSA9fiBzeyBeICggKD86IFwjIHwgXC9cLyApICkgWyBdIC0tICQgXG4gXiAoPzogXCMgfCBcL1wvICkgWyBdIC0tICQgXG4gfXskMSAtLVxufXhtc2c7CgogICAgIyBSZW1vdmUgJE9sZElkMiwgJE9sZElkMyBhbmQgJE9sZElkNCBsaW5lcwogICAgIwogICAgIyBQZXJsIGZpbGVzCiAgICAjICRPbGRJZDI6IE1haW4ucG0sdiAxLjY5IDIwMTMtMDItMDUgMTA6NDM6MDcgbWcgRXhwICQKICAgICMKICAgICMgSmF2YVNjcmlwdCBmaWxlcwogICAgIyAvLyAkT2xkSWQyOiBDb3JlLkFnZW50LkFkbWluLkR5bmFtaWNGaWVsZC5qcyx2IDEuMTEgMjAxMi0wOC0wNiAxMjozMzoyNCBtZyBFeHAgJAogICAgJENvZGUgPX4gc3sgXiAoPzogXCMgfCBcL1wvICkgWyBdIFwkT2xkSWQyOiBbIF0gLis/ICQgXG4gfXt9eG1zZzsKICAgICRDb2RlID1+IHN7IF4gKD86IFwjIHwgXC9cLyApIFsgXSBcJE9sZElkMzogWyBdIC4rPyAkIFxuIH17fXhtc2c7CiAgICAkQ29kZSA9fiBzeyBeICg/OiBcIyB8IFwvXC8gKSBbIF0gXCRPbGRJZDQ6IFsgXSAuKz8gJCBcbiB9e314bXNnOwoKICAgICMgUmVtb3ZlICRJZCBmcm9tIFBPRAogICAgJENvZGUgPX4gc3sgXiA9aGVhZDEgWyBdKyBWRVJTSU9OIFxuKyBeIFwkSWQ6IFsgXSsgLis/IFxuKyB9e314bXNnOwoKICAgICMgUG9zdG1hc3Rlci1UZXN0LmJveCBmaWxlcwogICAgIyBYLUNWUzogJElkOiBQb3N0TWFzdGVyLVRlc3QxLmJveCx2IDEuMiAyMDA3LzA0LzEyIDIzOjU1OjU1IG1hcnRpbiBFeHAgJAogICAgJENvZGUgPX4gc3sgXiBYLUNWUzogWyBdIFwkSWQ6IFsgXSAuKz8gJCBcbiB9e314bXNnOwogICAgJENvZGUgPX4gc3sgXiBYLUNWUzogWyBdIFwkT2xkSWQ6IFsgXSAuKz8gJCBcbiB9e314bXNnOwogICAgJENvZGUgPX4gc3sgXiBYLUNWUzogWyBdIFwkT2xkSWQyOiBbIF0gLis/ICQgXG4gfXt9eG1zZzsKCiAgICAjIGRvY2Jvb2sgYW5kIHdzZGwgYW5kIG90aGVyIFhNTCBmaWxlcwogICAgIyA8IS0tICRJZDogZ2V0LXN0YXJ0ZWQueG1sLHYgMS4xIDIwMTEtMDgtMTUgMTc6NDY6MDkgY3IgRXhwICQgLS0+CiAgICAkQ29kZSA9fiBzeyBeIDwhLS0gWyBdIFwkSWQ6IFsgXSAuKz8gJCBcbiB9e314bXNnOwogICAgJENvZGUgPX4gc3sgXiA8IS0tIFsgXSBcJE9sZElkOiBbIF0gLis/ICQgXG4gfXt9eG1zZzsKICAgICRDb2RlID1+IHN7IF4gPCEtLSBbIF0gXCRPbGRJZDI6IFsgXSAuKz8gJCBcbiB9e314bXNnOwoKICAgICMgT1RPQk8gY29uZmlnIGZpbGVzCiAgICAjIDxDVlM+JElkOiBGcmFtZXdvcmsueG1sLHYgMS41MTkgMjAxMy0wMi0xNSAxNDowNzo1NSBtZyBFeHAgJDwvQ1ZTPgogICAgJENvZGUgPX4gc3sgXiBccyogPENWUz4gXCRJZDogWyBdIC4rPyAkIFxuIH17fXhtc2c7CiAgICAkQ29kZSA9fiBzeyBeIFxzKiA8Q1ZTPiBcJE9sZElkOiBbIF0gLis/ICQgXG4gfXt9eG1zZzsKICAgICRDb2RlID1+IHN7IF4gXHMqIDxDVlM+IFwkT2xkSWQyOiBbIF0gLis/ICQgXG4gfXt9eG1zZzsKCiAgICAjIHJlbW92ZSBlbXB0eSBJZHMKICAgICMgJElkOgogICAgJENvZGUgPX4gc3sgXiBcIyBbIF0gXCRJZDogJCBcbiB9e314bXNnOwogICAgJENvZGUgPX4gc3sgXiBcIyBbIF0gXCRPbGRJZDogJCBcbiB9e314bXNnOwogICAgJENvZGUgPX4gc3sgXiBcIyBbIF0gXCRPbGRJZDI6ICQgXG4gfXt9eG1zZzsKCiAgICAjIFJlbW92ZSBWRVJTSU9OIGFzc2lnbm1lbnQgZnJvbSBDb2RlCiAgICAkQ29kZSA9fiBzeyBeXCRWRVJTSU9OIFsgXSogPSBbIF0qIC4qPyBcbn17fXhtc2c7CgogICAgIyBSZW1vdmUgVkVSU0lPTiBmcm9tIGhlbHAgb2YgcGwgc2NyaXB0cwogICAgJENvZGUgPX4gc3sgWyBdKyA8UmV2aXNpb24gXHMrIFwkVkVSU0lPTj4gWyBdKyB9eyB9eG1zZzsKICAgICRDb2RlID1+IHN7IDxSZXZpc2lvbiBccysgXCRWRVJTSU9OPiB9e314bXNnOwoKICAgICMgUmVtb3ZlIFZFUlNJT04gZnJvbSBQT0QKICAgICRDb2RlID1+IHN7IF4gPWhlYWQxIFsgXSsgVkVSU0lPTiBcbisgXiBcJFJldmlzaW9uOiAuKj8gXG4rIH17fXhtc2c7CgogICAgIyBkZWxldGUgdGhlICd1c2UgdmFycyBxdygkVkVSU0lPTik7JyBsaW5lCiAgICAkQ29kZSA9fiBzeyAoIF4gJCBcbiApPyBeIHVzZSBbIF0gdmFycyBbIF0gcXdcKFwkVkVSU0lPTlwpOyAkIFxuIH17fWl4bXM7CgogICAgIyBSZW1vdmUgQHZlcnNpb24gdGFnIGZyb20gQ1NTRG9jCiAgICAkQ29kZSA9fiBze14gWyBdKyBbKl0gWyBdKyBbQF12ZXJzaW9uIFsgXSsgXCRSZXZpc2lvbjogLio/IFxufXt9eG1zZzsKCiAgICByZXR1cm4gJENvZGU7Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Common/ValidateFilename.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkNvbW1vbjo6VmFsaWRhdGVGaWxlbmFtZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBGaWxlOjpCYXNlbmFtZTsKdXNlIEZpbGU6OkNvcHkgcXcoY29weSk7CnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkJhc2UpOwoKPWhlYWQxIFNZTk9QU0lTCgpUaGlzIHBsdWdpbiBwZXJmb3JtcyBiYXNpYyBmaWxlIG5hbWUgY2hlY2tzLgoKPWN1dAoKc3ViIHZhbGlkYXRlX2ZpbGUgewogICAgbXkgKCAkU2VsZiwgJEZpbGVuYW1lICkgPSBAXzsKCiAgICByZXR1cm4gaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIEZpbGVuYW1lID0+ICRGaWxlbmFtZSApOwoKICAgIG15IEBGb3JiaWRkZW5DaGFyYWN0ZXJzID0gKAogICAgICAgICcgJywgIlxuIiwgIlx0IiwgJyInLCAnYCcsICfCtCcsICdcJycsICckJywgJyEnLCAnPywnLCAnKicsCiAgICAgICAgJygnLCAnKScsICAneycsICAnfScsICdbJywgJ10nLCAgJyMnLCAgJzwnLCAnPicsICc6JywgICdcXCcsICd8JywKICAgICk7CgogICAgZm9yIG15ICRGb3JiaWRkZW5DaGFyYWN0ZXIgKEBGb3JiaWRkZW5DaGFyYWN0ZXJzKSB7CiAgICAgICAgaWYgKCBpbmRleCggJEZpbGVuYW1lLCAkRm9yYmlkZGVuQ2hhcmFjdGVyICkgPiAtMSApIHsKICAgICAgICAgICAgbXkgJEZvcmJpZGRlbkxpc3QgPSBqb2luKCAnICcsIEBGb3JiaWRkZW5DaGFyYWN0ZXJzICk7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKDw8IkVPRiIpOwpGb3JiaWRkZW4gY2hhcmFjdGVyICckRm9yYmlkZGVuQ2hhcmFjdGVyJyBmb3VuZCBpbiBmaWxlIG5hbWUuCllvdSBzaG91bGQgbm90IHVzZSB0aGVzZSBjaGFyYWN0ZXJzIGluIGZpbGUgbmFtZXM6ICRGb3JiaWRkZW5MaXN0LgpFT0YKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuOwp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Cron/CronScripts.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkNyb246OkNyb25TY3JpcHRzOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEZpbGU6OkJhc2VuYW1lOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6QmFzZSk7CgojIFdlIG9ubHkgd2FudCB0byBhbGxvdyB0d28gY3JvbiBmaWxlcyBmcm9tIE9UT0JPIDUgb24gYXMgdGhlIHJlc3QgaXMgbWFuYWdlZAojIHZpYSB0aGUgY3JvbiBkYWVtb24uCgpzdWIgdmFsaWRhdGVfZmlsZSB7CiAgICBteSAoICRTZWxmLCAkRmlsZW5hbWUgKSA9IEBfOwoKICAgIHJldHVybiBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZCggRmlsZW5hbWUgPT4gJEZpbGVuYW1lICk7CgogICAgbXkgJUFsbG93ZWRGaWxlcyA9ICgKICAgICAgICAnYWFhX2Jhc2UuZGlzdCcgICAgICAgID0+IDEsCiAgICAgICAgJ290b2JvX2RhZW1vbi5kaXN0JyAgICA9PiAxLAogICAgICAgICdvdG9ib193ZWJzZXJ2ZXIuZGlzdCcgPT4gMSwKICAgICk7CgogICAgaWYgKCAhJEFsbG93ZWRGaWxlc3sgRmlsZTo6QmFzZW5hbWU6OmJhc2VuYW1lKCRGaWxlbmFtZSkgfSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcig8PCJFT0YiKTsKUGxlYXNlIG1pZ3JhdGUgYWxsIHNjcm9uIHNjcmlwdHMgdG8gYmUgaGFuZGxlZCB2aWEgdGhlIE9UT0JPIERhZW1vbiAoc2VlIFN5c0NvbmZpZyBzZXR0aW5nIERhZW1vbjo6U2NoZWR1bGVyQ3JvblRhc2tNYW5hZ2VyOjpUYXNrKS4KRU9GCiAgICB9Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/JavaScript/DebugCode.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkphdmFTY3JpcHQ6OkRlYnVnQ29kZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkJhc2UpOwoKc3ViIHZhbGlkYXRlX3NvdXJjZSB7CiAgICBteSAoICRTZWxmLCAkQ29kZSApID0gQF87CgogICAgcmV0dXJuIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBDb2RlID0+ICRDb2RlICk7CgogICAgbXkgJEVycm9yTWVzc2FnZTsKICAgIG15ICRDb3VudGVyOwoKICAgIGZvciBteSAkTGluZSAoIHNwbGl0KCAvXG4vLCAkQ29kZSApICkgewogICAgICAgICRDb3VudGVyKys7CiAgICAgICAgaWYgKCAkTGluZSA9fiBteyBjb25zb2xlXC5sb2dcKCB9eG1zICkgewogICAgICAgICAgICAkRXJyb3JNZXNzYWdlCiAgICAgICAgICAgICAgICAuPSAiRVJST1I6IEphdmFTY3JpcHQgZGVidWcgY2hlY2sgZm91bmQgYSBjb25zb2xlLmxvZygpIHN0YXRlbWVudCBpbiBsaW5lKCAkQ291bnRlciApOiAkTGluZVxuIjsKICAgICAgICAgICAgJEVycm9yTWVzc2FnZSAuPSAiVGhpcyB3aWxsIGJyZWFrIElFIGFuZCBPcGVyYS4gUGxlYXNlIHJlbW92ZSBpdCBmcm9tIHlvdXIgY29kZS5cbiI7CiAgICAgICAgfQogICAgICAgIGlmICggJExpbmUgPX4gbXsgXGJ4aXRcKCB9eG1zICkgewogICAgICAgICAgICAkRXJyb3JNZXNzYWdlCiAgICAgICAgICAgICAgICAuPSAiRVJST1I6IEphdmFTY3JpcHQgZGVidWcgY2hlY2sgZm91bmQgYSBza2lwcGVkIHRlc3QgJ3hpdCgpJyBzdGF0ZW1lbnQgaW4gbGluZSggJENvdW50ZXIgKTogJExpbmVcbiI7CiAgICAgICAgICAgICRFcnJvck1lc3NhZ2UgLj0gIklmIHRoZSB0ZXN0IGlzIG5vIGxvbmdlciBuZWNlc3NhcnksIHBsZWFzZSByZW1vdmUgaXQgZnJvbSB5b3VyIGNvZGUuXG4iOwogICAgICAgIH0KICAgIH0KICAgIGlmICgkRXJyb3JNZXNzYWdlKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoIiRFcnJvck1lc3NhZ2UiKTsKICAgIH0KfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/JavaScript/ESLint.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkphdmFTY3JpcHQ6OkVTTGludDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBFbmNvZGU7CnVzZSBGaWxlOjpCYXNlbmFtZTsKdXNlIEZpbGU6OlBhdGggcXcobWFrZV9wYXRoIHJlbW92ZV90cmVlKTsKdXNlIEZpbGU6OkNvcHkgcXcoY29weSk7CnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkJhc2UpOwoKb3VyICROcHhQYXRoOwoKc3ViIHRyYW5zZm9ybV9maWxlIHsKICAgIG15ICggJFNlbGYsICRGaWxlbmFtZSApID0gQF87CgogICAgcmV0dXJuIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBGaWxlbmFtZSA9PiAkRmlsZW5hbWUgKTsKCiAgICBteSAkRVNMaW50Q29uZmlnUGF0aCA9IF9fRklMRV9fOwogICAgJEVTTGludENvbmZpZ1BhdGggPX4gc3tFU0xpbnRcLnBtfXtFU0xpbnQvZXNsaW50LmNvbmZpZy5tanN9OwoKICAgIG15ICRDb2RlcG9saWN5QmFzZVBhdGggPSAkRVNMaW50Q29uZmlnUGF0aDsKICAgICRDb2RlcG9saWN5QmFzZVBhdGggPX4gcy9LZXJuZWwoPyEuKktlcm5lbCkuKi8vczsKCiAgICBpZiAoICEkTnB4UGF0aCApIHsKCiAgICAgICAgIyBjaGVjayBhdmFpbGFiaWxpdHkgb2YgbnB4CiAgICAgICAgJE5weFBhdGggPSBgY2QgJENvZGVwb2xpY3lCYXNlUGF0aCA7IHdoaWNoIG5weCAyPi9kZXYvbnVsbGA7CiAgICAgICAgY2hvbXAgJE5weFBhdGg7CiAgICAgICAgaWYgKCAhJE5weFBhdGggKSB7CiAgICAgICAgICAgIGRpZSAiRXJyb3I6IGNvdWxkIG5vdCBmaW5kIG5weCBjb21tYW5kLlxuIjsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgaWYgZXNsaW50IGlzIGF2YWlsYWJsZSB2aWEgbnB4CiAgICAgICAgIyAobmVjZXNzYXJ5IHdvcmthcm91bmQgaXMgY2hlY2tpbmcgaWYgYSBuby1pbnN0YWxsIHZlcnNpb24gY2hlY2sgcmV0dXJucyBhIHNhbmUgdmFsdWUpCiAgICAgICAgbXkgJFRlc3RWZXJzaW9uID0gYGNkICRDb2RlcG9saWN5QmFzZVBhdGggOyAkTnB4UGF0aCAtLW5vLWluc3RhbGwgZXNsaW50IC12IDI+L2Rldi9udWxsYDsKICAgICAgICBjaG9tcCAkVGVzdFZlcnNpb247CiAgICAgICAgaWYgKCAkVGVzdFZlcnNpb24gIX4gbXt2P1xkK1wuXGQrXC5cZCt9ICkgewogICAgICAgICAgICBkaWUgIkVycm9yOiBjb3VsZCBub3QgZmluZCBlc2xpbnQuICgkVGVzdFZlcnNpb24pXG4iOwogICAgICAgIH0KCiAgICAgICAgIyBGb3JjZSB0aGUgbWluaW11bSB2ZXJzaW9uIG9mIGVzbGludC4KICAgICAgICBteSAkRVNMaW50VmVyc2lvbiA9IGBjZCAkQ29kZXBvbGljeUJhc2VQYXRoIDsgJE5weFBhdGggZXNsaW50IC12YDsKICAgICAgICBjaG9tcCAkRVNMaW50VmVyc2lvbjsKICAgICAgICBteSAoICRNYWpvciwgJE1pbm9yLCAkUGF0Y2ggKSA9ICRFU0xpbnRWZXJzaW9uID1+IG17dihcZCspWy5dKFxkKylbLl0oXGQrKX07CiAgICAgICAgbXkgJENvbXBhcmUgPSBzcHJpbnRmKCAiJTAzZCUwM2QlMDNkIiwgJE1ham9yLCAkTWlub3IsICRQYXRjaCApOwogICAgICAgIGlmICggIWxlbmd0aCgkTWFqb3IpIHx8ICRDb21wYXJlIDwgOV8wMDBfMDAwICkgewogICAgICAgICAgICBkaWUgIkVycm9yOiB5b3VyIGVzbGludCB2ZXJzaW9uICgkRVNMaW50VmVyc2lvbikgaXMgb3V0ZGF0ZWQuXG4iOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNyZWF0ZSBmaWxlIHN5bWxpbmsgb3IgY29weSB0byBwcmV2ZW50IGVzbGludCA5LnggZXJyb3IgIkZpbGUgaWdub3JlZCBiZWNhdXNlIG91dHNpZGUgb2YgYmFzZSBwYXRoIgogICAgbXkgJFRtcEZpbGVQYXRoID0gJENvZGVwb2xpY3lCYXNlUGF0aCAuICIvdG1wLyI7CiAgICBtYWtlX3BhdGgoJFRtcEZpbGVQYXRoLCB7ZXJyb3IgPT4gXG15ICRlcnJ9KTsKICAgIGlmICgkZXJyICYmIEAkZXJyKSB7CiAgICAgICAgZGllICJDYW4ndCBjcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBhdCAkVG1wRmlsZVBhdGggXG4gRXJyb3I6ICIgLiBqb2luKCIsICIsIEAkZXJyKSAuICJcbiAiOwogICAgfQogICAgJFRtcEZpbGVQYXRoIC49IGJhc2VuYW1lKCRGaWxlbmFtZSk7CiAgICBzeW1saW5rKCRGaWxlbmFtZSwgJFRtcEZpbGVQYXRoKSAKICAgICAgICBvciBjb3B5KCJzb3VyY2VmaWxlIiwgImRlc3RpbmF0aW9uZmlsZSIpIAogICAgICAgIG9yIGRpZSAiQ2FuJ3QgY3JlYXRlIHN5bWxpbmsgb3IgY29weSBvZiAkRmlsZW5hbWUgYXQgJFRtcEZpbGVQYXRoIjsKCiAgICBteSAkQ29tbWFuZCA9IHNwcmludGYoCiAgICAgICAgImNkICVzIDsgJXMgZXNsaW50IC1jICVzIC0tZml4ICVzIiwKICAgICAgICAkQ29kZXBvbGljeUJhc2VQYXRoLCAkTnB4UGF0aCwgJEVTTGludENvbmZpZ1BhdGgsICRUbXBGaWxlUGF0aAogICAgKTsKCiAgICBteSAkT3V0cHV0ID0gYCRDb21tYW5kYDsKCiAgICAjIHJlbW92ZSB0ZW1wb3Jhcnkgc3ltbGluayBvciBjb3B5CiAgICByZW1vdmVfdHJlZSgkVG1wRmlsZVBhdGgpIG9yIAogICAgICAgIGRpZSAiQ2FuJ3QgcmVtb3ZlIHN5bWxpbmsgb3IgY29weSBvZiBmaWxlICRGaWxlbmFtZSBhdCAkVG1wRmlsZVBhdGgiOwoKICAgIGlmICggJHteQ0hJTERfRVJST1JfTkFUSVZFfSB8fCAkT3V0cHV0ICkgewogICAgICAgIEVuY29kZTo6X3V0Zjhfb24oJE91dHB1dCk7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoIiRPdXRwdXRcbiIpOwogICAgfQp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/JavaScript/ESLint/eslint.config.mjs" Permission="660" Encode="Base64">aW1wb3J0IGdsb2JhbHMgZnJvbSAiZ2xvYmFscyI7CmltcG9ydCBwbHVnaW5KcyBmcm9tICJAZXNsaW50L2pzIgoKLy8gSW1wb3J0IGN1c3RvbSBydWxlcwppbXBvcnQgbm9XaW5kb3cgZnJvbSAiLi9SdWxlcy9uby13aW5kb3cubWpzIjsKCi8qKiBAdHlwZSB7aW1wb3J0KCdlc2xpbnQnKS5MaW50ZXIuQ29uZmlnW119ICovCmV4cG9ydCBkZWZhdWx0IFsKICBwbHVnaW5Kcy5jb25maWdzLnJlY29tbWVuZGVkLAogIHsKICAgIGxhbmd1YWdlT3B0aW9uczogeyAKICAgICAgc291cmNlVHlwZTogImNvbW1vbmpzIiwgCiAgICAgIGdsb2JhbHM6IHsKICAgICAgICAuLi5nbG9iYWxzLmJyb3dzZXIsIAogICAgICAgIC4uLmdsb2JhbHMuanF1ZXJ5LAogICAgICAgIGlzSlF1ZXJ5T2JqZWN0OiAicmVhZG9ubHkiLAogICAgICAgIENLRWRpdG9yNVdyYXBwZXI6ICJyZWFkb25seSIsCiAgICAgICAgQ0tFZGl0b3I1UGx1Z2luczogInJlYWRvbmx5IiwKICAgICAgICBDS0VkaXRvcjVDb3JlVHJhbnNsYXRpb25zOiAicmVhZG9ubHkiLAogICAgICAgIENLRWRpdG9ySW5zdGFuY2VzOiAicmVhZG9ubHkiLAogICAgICAgIFFVbml0OiAicmVhZG9ubHkiLAogICAgICAgIENvZGVNaXJyb3I6ICJyZWFkb25seSIKICAgICAgfQogICAgfSwKICAgIGlnbm9yZXM6IFsKICAgICAgInZhci9odHRwZC9odGRvY3MvanMvdGhpcmRwYXJ0eS8qKiIsCiAgICAgICJ2YXIvaHR0cGQvaHRkb2NzL2pzL2pzLWNhY2hlLyoqIiwKICAgICAgInZhci9odHRwZC9odGRvY3MvanMvQ29yZS5VSS5DS0VkaXRvcjVXcmFwcGVyLmpzIiAgLy8gaGFzIHRvIGJlIGlnbm9yZWQgZHVlIHRvIHVzaW5nIGltcG9ydC9leHBvcnQgaW4gYSBub24tbW9kdWxlIGZpbGUKICAgIF0sCiAgICBmaWxlczogWyIqKi8qLmpzIl0sIAogICAgcGx1Z2luczogewogICAgICBvdG9ibzogewogICAgICAgIHJ1bGVzOiB7CiAgICAgICAgICAnbm8td2luZG93Jzogbm9XaW5kb3cKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBydWxlczogewogICAgICAnb3RvYm8vbm8td2luZG93JzogJ2Vycm9yJywKICAgICAgJ2NhbWVsY2FzZSc6ICd3YXJuJywKICAgICAgLy8gVGhlIGZvbGxvd2luZyBydWxlcyBhcmUgdGVtcGFyb3JpbHkgc2V0IHRvICd3YXJuJyB0byBhdm9pZCBicmVha2luZyBleGlzdGluZyBjb2RlCgogICAgICAnbm8tcHJvdG90eXBlLWJ1aWx0aW5zJzogJ3dhcm4nLAogICAgICAnbm8tdW51c2VkLXZhcnMnOiAnd2FybicsCiAgICAgICduby1yZWRlY2xhcmUnOiAnd2FybicsCiAgICAgICduby11bmRlZic6ICd3YXJuJywKICAgICAgJ25vLXVzZWxlc3MtZXNjYXBlJzogJ3dhcm4nCgogICAgfQogIH0KXTs=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/JavaScript/ESLint/frontend.eslintrc.7.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNSBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCgovKgogKiBOT1RFOiBJbiBvcmRlciBmb3IgbGludGluZyB0byB3b3JrLCB5b3Ugd2lsbCBuZWVkIGZvbGxvd2luZyBnbG9iYWxseSBpbnN0YWxsZWQgTlBNIG1vZHVsZXMKICoKICogICBucG0gaW5zdGFsbCAtZyBlc2xpbnRANSBlc2xpbnQtcGx1Z2luLWltcG9ydCBlc2xpbnQtY29uZmlnLWFpcmJuYi1iYXNlIGVzbGludC1wbHVnaW4tdnVlIGJhYmVsLWVzbGludCBlc2xpbnQtcGx1Z2luLWplc3QKICoKICogRklYTUU6IFdlIGhhdmUgdG8gcGluIHRoZSBFU0xpbnQgdmVyc2lvbiB0byA1Lnggc2luY2Ugbm90IGFsbCBwbHVnaW5zIHdlIHVzZSBhcmUgY29tcGF0aWJsZSB3aXRoIDYueCBqdXN0IHlldC4KICovCgptb2R1bGUuZXhwb3J0cyA9IHsKCiAgICBwYXJzZXJPcHRpb25zOiB7CiAgICAgICAgcGFyc2VyOiAnYmFiZWwtZXNsaW50JywKICAgICAgICBzb3VyY2VUeXBlOiAnbW9kdWxlJwogICAgfSwKCiAgICBwbHVnaW5zOiBbCiAgICAgICAgJ2plc3QnLAogICAgXSwKCiAgICBlbnY6IHsKICAgICAgICBicm93c2VyOiB0cnVlLAogICAgICAgICdqZXN0L2dsb2JhbHMnOiB0cnVlLAogICAgfSwKCiAgICBleHRlbmRzOiBbCiAgICAgICAgJ2FpcmJuYi1iYXNlJywKICAgICAgICAncGx1Z2luOnZ1ZS9yZWNvbW1lbmRlZCcsCiAgICBdLAoKICAgIGdsb2JhbHM6IHsKICAgICAgICAndHJhbnNsYXRhYmxlJzogdHJ1ZSwKICAgIH0sCgogICAgcnVsZXM6IHsKCiAgICAgICAgLyoKICAgICAgICAgKiBBaXJCbkIgSlMgcnVsZSBvdmVycmlkZXMuCiAgICAgICAgICovCgogICAgICAgIC8vIEVuZm9yY2UgY29uc2lzdGVudCBpbmRlbnRhdGlvbi4KICAgICAgICAnaW5kZW50JzogWyAnZXJyb3InLCA0LCB7CiAgICAgICAgICAgICdTd2l0Y2hDYXNlJzogMSwKICAgICAgICAgICAgLy8gRml4IGlzc3VlIHdpdGggYENhbm5vdCByZWFkIHByb3BlcnR5ICdyYW5nZScgb2YgbnVsbGAgZXJyb3JzLiBQbGVhc2Ugc2VlCiAgICAgICAgICAgIC8vICAgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDgzOTE5MTMvZXNsaW50LWVycm9yLWNhbm5vdC1yZWFkLXByb3BlcnR5LXJhbmdlLW9mLW51bGwKICAgICAgICAgICAgLy8gICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgJ2lnbm9yZWROb2Rlcyc6IFsgJ1RlbXBsYXRlTGl0ZXJhbCcgXSwKICAgICAgICB9XSwKCiAgICAgICAgLy8gRml4IGlzc3VlIHdpdGggYENhbm5vdCByZWFkIHByb3BlcnR5ICdyYW5nZScgb2YgbnVsbGAgZXJyb3JzLiBQbGVhc2Ugc2VlCiAgICAgICAgLy8gICBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80ODM5MTkxMy9lc2xpbnQtZXJyb3ItY2Fubm90LXJlYWQtcHJvcGVydHktcmFuZ2Utb2YtbnVsbAogICAgICAgIC8vICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgJ3RlbXBsYXRlLWN1cmx5LXNwYWNpbmcnOiAnb2ZmJywKCiAgICAgICAgLy8gQWxsb3cgdW5uZWNlc3NhcmlseSBxdW90ZWQgcHJvcGVydGllcy4KICAgICAgICAncXVvdGUtcHJvcHMnOiAnb2ZmJywKCiAgICAgICAgLy8gQWxsb3cgZGFuZ2xpbmcgdW5kZXJzY29yZXMgdG8gaW5kaWNhdGUgcHJpdmF0ZSBtZXRob2RzIChsaWtlIF9pbnRlcm5hbE1ldGhvZCgpKS4KICAgICAgICAnbm8tdW5kZXJzY29yZS1kYW5nbGUnOiAnb2ZmJywKCiAgICAgICAgLy8gRW5mb3JjZSBhIG1heGltdW0gbGluZSBsZW5ndGguCiAgICAgICAgJ21heC1sZW4nOiBbICdlcnJvcicsIHsgJ2NvZGUnOiAxMjAgfSBdLAoKICAgICAgICAvLyBEb24ndCB0cnkgdG8gcmVzb2x2ZSB0aGUgZGVwZW5kZW5jaWVzLgogICAgICAgICdpbXBvcnQvbm8tdW5yZXNvbHZlZCc6ICdvZmYnLAoKICAgICAgICAvLyBBbGxvdyBmb3IgbWlzc2luZyBmaWxlIGV4dGVuc2lvbnMgaW4gaW1wb3J0IHN0YXRlbWVudHMuCiAgICAgICAgJ2ltcG9ydC9leHRlbnNpb25zJzogJ29mZicsCgogICAgICAgIC8vIFJlcXVpcmUgYSBzcGFjZSBiZWZvcmUgZnVuY3Rpb24gcGFyZW50aGVzaXMuCiAgICAgICAgJ3NwYWNlLWJlZm9yZS1mdW5jdGlvbi1wYXJlbic6IFsgJ2Vycm9yJywgJ2Fsd2F5cycgXSwKCiAgICAgICAgLy8gUmVxdWlyZSAiU3Ryb3VzdHJ1cCIgYnJhY2Ugc3R5bGUuCiAgICAgICAgJ2JyYWNlLXN0eWxlJzogWyAnZXJyb3InLCAnc3Ryb3VzdHJ1cCcgXSwKCiAgICAgICAgLy8gRW5mb3JjZSBzcGFjZXMgaW5zaWRlIG9mIGJyYWNrZXRzLgogICAgICAgICdhcnJheS1icmFja2V0LXNwYWNpbmcnOiBbICdlcnJvcicsICdhbHdheXMnIF0sCgogICAgICAgIC8vIERvIG5vdCBlbmZvcmNlIHRoYXQgY2xhc3MgbWV0aG9kcyB1dGlsaXplIHRoaXMuCiAgICAgICAgJ2NsYXNzLW1ldGhvZHMtdXNlLXRoaXMnOiAnb2ZmJywKCiAgICAgICAgLy8gQWxsb3cgdGhlIHVuYXJ5IG9wZXJhdG9ycyArKyBhbmQgLS0uCiAgICAgICAgJ25vLXBsdXNwbHVzJzogJ29mZicsCgogICAgICAgIC8vIEFsbG93IFJlYXNzaWdubWVudCBvZiBGdW5jdGlvbiBQYXJhbWV0ZXJzLgogICAgICAgICduby1wYXJhbS1yZWFzc2lnbic6ICdvZmYnLAoKICAgICAgICAvLyBFbmZvcmNlIGNvbnNpc3RlbnQgbGluZSBicmVha3MgaW5zaWRlIGZ1bmN0aW9uIHBhcmVudGhlc2VzLgogICAgICAgICdmdW5jdGlvbi1wYXJlbi1uZXdsaW5lJzogWyAnZXJyb3InLCAnY29uc2lzdGVudCcgXSwKCiAgICAgICAgLy8gSWdub3JlIHRyYWlsaW5nIGNvbW1hcyBpbiB0aGUgaW1wb3J0cywgZXhwb3J0cyBhbmQgZnVuY3Rpb25zLCBidXQgcmVxdWlyZSBpdCBpbiBhcnJheXMgYW5kIG9iamVjdAogICAgICAgIC8vICAgZGVmaW5pdGlvbnMuCiAgICAgICAgJ2NvbW1hLWRhbmdsZSc6IFsKICAgICAgICAgICAgJ2Vycm9yJywKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJ2FycmF5cyc6ICdhbHdheXMtbXVsdGlsaW5lJywKICAgICAgICAgICAgICAgICdvYmplY3RzJzogJ2Fsd2F5cy1tdWx0aWxpbmUnLAogICAgICAgICAgICAgICAgJ2ltcG9ydHMnOiAnaWdub3JlJywKICAgICAgICAgICAgICAgICdleHBvcnRzJzogJ2lnbm9yZScsCiAgICAgICAgICAgICAgICAnZnVuY3Rpb25zJzogJ2lnbm9yZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKCiAgICAgICAgLy8gRG8gbm90IGZvcmNlIHRoZSB1c2Ugb2YgdGhlIG9iamVjdCBzcHJlYWQganVzdCB5ZXQgKHRhcmdldCBFUzIwMTgpLgogICAgICAgICdwcmVmZXItb2JqZWN0LXNwcmVhZCc6ICdvZmYnLAoKICAgICAgICAvLyBEbyBub3QgZm9yY2UgcGFyZW50aGVzZXMgb24gYXJyb3cgZnVuY3Rpb25zIHdpdGggc2luZ2xlIGFyZ3VtZW50cy4KICAgICAgICAnYXJyb3ctcGFyZW5zJzogJ29mZicsCgogICAgICAgIC8vIEFsbG93IHJlcXVpcmUoKSBjYWxscyB3aXRoIGV4cHJlc3Npb25zIChkeW5hbWljIGltcG9ydHMpLgogICAgICAgICdpbXBvcnQvbm8tZHluYW1pYy1yZXF1aXJlJzogJ29mZicsCgogICAgICAgIC8qCiAgICAgICAgICogVnVlLmpzIHJ1bGUgb3ZlcnJpZGVzLgogICAgICAgICAqLwoKICAgICAgICAvLyBFbmZvcmNlIGNvbnNpc3RlbnQgaW5kZW50YXRpb24gaW4gPHRlbXBsYXRlPi4KICAgICAgICAndnVlL2h0bWwtaW5kZW50JzogWyAnZXJyb3InLCA0IF0sCgogICAgICAgIC8vIEVuZm9yY2Ugdi1iaW5kIGRpcmVjdGl2ZSB1c2FnZSBpbiBsb25nIGZvcm0uCiAgICAgICAgJ3Z1ZS92LWJpbmQtc3R5bGUnOiBbICdlcnJvcicsICdsb25nZm9ybScgXSwKCiAgICAgICAgLy8gRW5mb3JjZSB2LW9uIGRpcmVjdGl2ZSB1c2FnZSBpbiBsb25nIGZvcm0uCiAgICAgICAgJ3Z1ZS92LW9uLXN0eWxlJzogIFsgJ2Vycm9yJywgJ2xvbmdmb3JtJyBdLAoKICAgICAgICAvLyBEb24ndCByZXF1aXJlIGRlZmF1bHQgdmFsdWUgZm9yIHByb3BzLgogICAgICAgICd2dWUvcmVxdWlyZS1kZWZhdWx0LXByb3AnOiAnb2ZmJywKCiAgICAgICAgLy8gRG9uJ3Qgd2FybiBhYm91dCB1bnVzZWQgY29tcG9uZW50cy4gVGhpcyBpcyBzb21ldGltZSBuZWVkZWQgZm9yIGR5bmFtaWMgY29tcG9uZW50IHVzYWdlLgogICAgICAgICd2dWUvbm8tdW51c2VkLWNvbXBvbmVudHMnOiAnb2ZmJywKCiAgICAgICAgLy8gRG9uJ3QgY29ycmVjdCBjYXNpbmcgb2YgY29tcG9uZW50IG5hbWVzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHJlYXNvbnMuCiAgICAgICAgJ3Z1ZS9jb21wb25lbnQtbmFtZS1pbi10ZW1wbGF0ZS1jYXNpbmcnOiAnb2ZmJywKCiAgICAgICAgLy8gRG9uJ3QgY29ycmVjdCBjbG9zaW5nIGJyYWNrZXQgcG9zaXRpb24gb2YgSFRNTCB0YWdzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHJlYXNvbnMuCiAgICAgICAgJ3Z1ZS9odG1sLWNsb3NpbmctYnJhY2tldC1uZXdsaW5lJzogJ29mZicsCgogICAgICAgIC8vIERvbid0IGNvcnJlY3QgbmV3IGxpbmVzIGluIHNpbmdsZSBsaW5lIEhUTUwgZWxlbWVudHMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcmVhc29ucy4KICAgICAgICAndnVlL3NpbmdsZWxpbmUtaHRtbC1lbGVtZW50LWNvbnRlbnQtbmV3bGluZSc6ICdvZmYnLAoKICAgICAgICAvLyBOT1RFOiBUaGVzZSBydWxlcyB3aWxsIGJlIHR1cm5lZCBvbiBhZ2FpbiBpbiBPVE9CTyA4LgogICAgICAgICd2dWUvYXR0cmlidXRlcy1vcmRlcic6ICdvZmYnLAogICAgICAgICd2dWUvaHRtbC1jbG9zaW5nLWJyYWNrZXQtc3BhY2luZyc6ICdvZmYnLAogICAgICAgICd2dWUvbXVsdGlsaW5lLWh0bWwtZWxlbWVudC1jb250ZW50LW5ld2xpbmUnOiAnb2ZmJywKICAgIH0sCn07Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/JavaScript/ESLint/frontend.eslintrc.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNSBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCgovKgogKiBOT1RFOiBJbiBvcmRlciBmb3IgbGludGluZyB0byB3b3JrLCB5b3Ugd2lsbCBuZWVkIGZvbGxvd2luZyBnbG9iYWxseSBpbnN0YWxsZWQgTlBNIG1vZHVsZXMKICoKICogICBucG0gaW5zdGFsbCAtZyBlc2xpbnRANSBlc2xpbnQtcGx1Z2luLWltcG9ydCBlc2xpbnQtY29uZmlnLWFpcmJuYi1iYXNlIGVzbGludC1wbHVnaW4tdnVlIGJhYmVsLWVzbGludCBlc2xpbnQtcGx1Z2luLWplc3QKICoKICogRklYTUU6IFdlIGhhdmUgdG8gcGluIHRoZSBFU0xpbnQgdmVyc2lvbiB0byA1Lnggc2luY2Ugbm90IGFsbCBwbHVnaW5zIHdlIHVzZSBhcmUgY29tcGF0aWJsZSB3aXRoIDYueCBqdXN0IHlldC4KICovCgptb2R1bGUuZXhwb3J0cyA9IHsKCiAgICBwYXJzZXJPcHRpb25zOiB7CiAgICAgICAgcGFyc2VyOiAnYmFiZWwtZXNsaW50JywKICAgICAgICBzb3VyY2VUeXBlOiAnbW9kdWxlJwogICAgfSwKCiAgICBwbHVnaW5zOiBbCiAgICAgICAgJ2plc3QnLAogICAgXSwKCiAgICBlbnY6IHsKICAgICAgICBicm93c2VyOiB0cnVlLAogICAgICAgICdqZXN0L2dsb2JhbHMnOiB0cnVlLAogICAgfSwKCiAgICBleHRlbmRzOiBbCiAgICAgICAgJ2FpcmJuYi1iYXNlJywKICAgICAgICAncGx1Z2luOnZ1ZS9yZWNvbW1lbmRlZCcsCiAgICBdLAoKICAgIGdsb2JhbHM6IHsKICAgICAgICAndHJhbnNsYXRhYmxlJzogdHJ1ZSwKICAgIH0sCgogICAgcnVsZXM6IHsKCiAgICAgICAgLyoKICAgICAgICAgKiBBaXJCbkIgSlMgcnVsZSBvdmVycmlkZXMuCiAgICAgICAgICovCgogICAgICAgIC8vIEVuZm9yY2UgY29uc2lzdGVudCBpbmRlbnRhdGlvbi4KICAgICAgICAnaW5kZW50JzogWyAnZXJyb3InLCA0LCB7CiAgICAgICAgICAgICdTd2l0Y2hDYXNlJzogMSwKICAgICAgICAgICAgLy8gRml4IGlzc3VlIHdpdGggYENhbm5vdCByZWFkIHByb3BlcnR5ICdyYW5nZScgb2YgbnVsbGAgZXJyb3JzLiBQbGVhc2Ugc2VlCiAgICAgICAgICAgIC8vICAgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDgzOTE5MTMvZXNsaW50LWVycm9yLWNhbm5vdC1yZWFkLXByb3BlcnR5LXJhbmdlLW9mLW51bGwKICAgICAgICAgICAgLy8gICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgJ2lnbm9yZWROb2Rlcyc6IFsgJ1RlbXBsYXRlTGl0ZXJhbCcgXSwKICAgICAgICB9XSwKCiAgICAgICAgLy8gRml4IGlzc3VlIHdpdGggYENhbm5vdCByZWFkIHByb3BlcnR5ICdyYW5nZScgb2YgbnVsbGAgZXJyb3JzLiBQbGVhc2Ugc2VlCiAgICAgICAgLy8gICBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80ODM5MTkxMy9lc2xpbnQtZXJyb3ItY2Fubm90LXJlYWQtcHJvcGVydHktcmFuZ2Utb2YtbnVsbAogICAgICAgIC8vICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgJ3RlbXBsYXRlLWN1cmx5LXNwYWNpbmcnOiAnb2ZmJywKCiAgICAgICAgLy8gQWxsb3cgdW5uZWNlc3NhcmlseSBxdW90ZWQgcHJvcGVydGllcy4KICAgICAgICAncXVvdGUtcHJvcHMnOiAnb2ZmJywKCiAgICAgICAgLy8gQWxsb3cgZGFuZ2xpbmcgdW5kZXJzY29yZXMgdG8gaW5kaWNhdGUgcHJpdmF0ZSBtZXRob2RzIChsaWtlIF9pbnRlcm5hbE1ldGhvZCgpKS4KICAgICAgICAnbm8tdW5kZXJzY29yZS1kYW5nbGUnOiAnb2ZmJywKCiAgICAgICAgLy8gRW5mb3JjZSBhIG1heGltdW0gbGluZSBsZW5ndGguCiAgICAgICAgJ21heC1sZW4nOiBbICdlcnJvcicsIHsgJ2NvZGUnOiAxMjAgfSBdLAoKICAgICAgICAvLyBEb24ndCB0cnkgdG8gcmVzb2x2ZSB0aGUgZGVwZW5kZW5jaWVzLgogICAgICAgICdpbXBvcnQvbm8tdW5yZXNvbHZlZCc6ICdvZmYnLAoKICAgICAgICAvLyBBbGxvdyBmb3IgbWlzc2luZyBmaWxlIGV4dGVuc2lvbnMgaW4gaW1wb3J0IHN0YXRlbWVudHMuCiAgICAgICAgJ2ltcG9ydC9leHRlbnNpb25zJzogJ29mZicsCgogICAgICAgIC8vIFJlcXVpcmUgYSBzcGFjZSBiZWZvcmUgZnVuY3Rpb24gcGFyZW50aGVzaXMuCiAgICAgICAgJ3NwYWNlLWJlZm9yZS1mdW5jdGlvbi1wYXJlbic6IFsgJ2Vycm9yJywgJ2Fsd2F5cycgXSwKCiAgICAgICAgLy8gUmVxdWlyZSAiU3Ryb3VzdHJ1cCIgYnJhY2Ugc3R5bGUuCiAgICAgICAgJ2JyYWNlLXN0eWxlJzogWyAnZXJyb3InLCAnc3Ryb3VzdHJ1cCcgXSwKCiAgICAgICAgLy8gRW5mb3JjZSBzcGFjZXMgaW5zaWRlIG9mIGJyYWNrZXRzLgogICAgICAgICdhcnJheS1icmFja2V0LXNwYWNpbmcnOiBbICdlcnJvcicsICdhbHdheXMnIF0sCgogICAgICAgIC8vIERvIG5vdCBlbmZvcmNlIHRoYXQgY2xhc3MgbWV0aG9kcyB1dGlsaXplIHRoaXMuCiAgICAgICAgJ2NsYXNzLW1ldGhvZHMtdXNlLXRoaXMnOiAnb2ZmJywKCiAgICAgICAgLy8gQWxsb3cgdGhlIHVuYXJ5IG9wZXJhdG9ycyArKyBhbmQgLS0uCiAgICAgICAgJ25vLXBsdXNwbHVzJzogJ29mZicsCgogICAgICAgIC8vIEFsbG93IFJlYXNzaWdubWVudCBvZiBGdW5jdGlvbiBQYXJhbWV0ZXJzLgogICAgICAgICduby1wYXJhbS1yZWFzc2lnbic6ICdvZmYnLAoKICAgICAgICAvLyBFbmZvcmNlIGNvbnNpc3RlbnQgbGluZSBicmVha3MgaW5zaWRlIGZ1bmN0aW9uIHBhcmVudGhlc2VzLgogICAgICAgICdmdW5jdGlvbi1wYXJlbi1uZXdsaW5lJzogWyAnZXJyb3InLCAnY29uc2lzdGVudCcgXSwKCiAgICAgICAgLy8gSWdub3JlIHRyYWlsaW5nIGNvbW1hcyBpbiB0aGUgaW1wb3J0cywgZXhwb3J0cyBhbmQgZnVuY3Rpb25zLCBidXQgcmVxdWlyZSBpdCBpbiBhcnJheXMgYW5kIG9iamVjdAogICAgICAgIC8vICAgZGVmaW5pdGlvbnMuCiAgICAgICAgJ2NvbW1hLWRhbmdsZSc6IFsKICAgICAgICAgICAgJ2Vycm9yJywKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJ2FycmF5cyc6ICdhbHdheXMtbXVsdGlsaW5lJywKICAgICAgICAgICAgICAgICdvYmplY3RzJzogJ2Fsd2F5cy1tdWx0aWxpbmUnLAogICAgICAgICAgICAgICAgJ2ltcG9ydHMnOiAnaWdub3JlJywKICAgICAgICAgICAgICAgICdleHBvcnRzJzogJ2lnbm9yZScsCiAgICAgICAgICAgICAgICAnZnVuY3Rpb25zJzogJ2lnbm9yZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKCiAgICAgICAgLy8gRG8gbm90IGZvcmNlIHRoZSB1c2Ugb2YgdGhlIG9iamVjdCBzcHJlYWQganVzdCB5ZXQgKHRhcmdldCBFUzIwMTgpLgogICAgICAgICdwcmVmZXItb2JqZWN0LXNwcmVhZCc6ICdvZmYnLAoKICAgICAgICAvLyBEbyBub3QgZm9yY2UgcGFyZW50aGVzZXMgb24gYXJyb3cgZnVuY3Rpb25zIHdpdGggc2luZ2xlIGFyZ3VtZW50cy4KICAgICAgICAnYXJyb3ctcGFyZW5zJzogJ29mZicsCgogICAgICAgIC8vIEFsbG93IHJlcXVpcmUoKSBjYWxscyB3aXRoIGV4cHJlc3Npb25zIChkeW5hbWljIGltcG9ydHMpLgogICAgICAgICdpbXBvcnQvbm8tZHluYW1pYy1yZXF1aXJlJzogJ29mZicsCgogICAgICAgIC8qCiAgICAgICAgICogVnVlLmpzIHJ1bGUgb3ZlcnJpZGVzLgogICAgICAgICAqLwoKICAgICAgICAvLyBFbmZvcmNlIGNvbnNpc3RlbnQgaW5kZW50YXRpb24gaW4gPHRlbXBsYXRlPi4KICAgICAgICAndnVlL2h0bWwtaW5kZW50JzogWyAnZXJyb3InLCA0IF0sCgogICAgICAgIC8vIEVuZm9yY2Ugdi1iaW5kIGRpcmVjdGl2ZSB1c2FnZSBpbiBsb25nIGZvcm0uCiAgICAgICAgJ3Z1ZS92LWJpbmQtc3R5bGUnOiBbICdlcnJvcicsICdsb25nZm9ybScgXSwKCiAgICAgICAgLy8gRW5mb3JjZSB2LW9uIGRpcmVjdGl2ZSB1c2FnZSBpbiBsb25nIGZvcm0uCiAgICAgICAgJ3Z1ZS92LW9uLXN0eWxlJzogIFsgJ2Vycm9yJywgJ2xvbmdmb3JtJyBdLAoKICAgICAgICAvLyBEb24ndCByZXF1aXJlIGRlZmF1bHQgdmFsdWUgZm9yIHByb3BzLgogICAgICAgICd2dWUvcmVxdWlyZS1kZWZhdWx0LXByb3AnOiAnb2ZmJywKCiAgICAgICAgLy8gRG9uJ3Qgd2FybiBhYm91dCB1bnVzZWQgY29tcG9uZW50cy4gVGhpcyBpcyBzb21ldGltZSBuZWVkZWQgZm9yIGR5bmFtaWMgY29tcG9uZW50IHVzYWdlLgogICAgICAgICd2dWUvbm8tdW51c2VkLWNvbXBvbmVudHMnOiAnb2ZmJywKCiAgICAgICAgLy8gRG9uJ3QgY29ycmVjdCBjYXNpbmcgb2YgY29tcG9uZW50IG5hbWVzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHJlYXNvbnMuCiAgICAgICAgJ3Z1ZS9jb21wb25lbnQtbmFtZS1pbi10ZW1wbGF0ZS1jYXNpbmcnOiAnb2ZmJywKCiAgICAgICAgLy8gRG9uJ3QgY29ycmVjdCBjbG9zaW5nIGJyYWNrZXQgcG9zaXRpb24gb2YgSFRNTCB0YWdzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHJlYXNvbnMuCiAgICAgICAgJ3Z1ZS9odG1sLWNsb3NpbmctYnJhY2tldC1uZXdsaW5lJzogJ29mZicsCgogICAgICAgIC8vIERvbid0IGNvcnJlY3QgbmV3IGxpbmVzIGluIHNpbmdsZSBsaW5lIEhUTUwgZWxlbWVudHMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcmVhc29ucy4KICAgICAgICAndnVlL3NpbmdsZWxpbmUtaHRtbC1lbGVtZW50LWNvbnRlbnQtbmV3bGluZSc6ICdvZmYnLAogICAgfSwKfTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/JavaScript/ESLint/legacy.eslintrc.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNSBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCgptb2R1bGUuZXhwb3J0cyA9IHsKICAgICJlbnYiOiB7CiAgICAgICAgImJyb3dzZXIiOiB0cnVlLAogICAgICAgICJqcXVlcnkiOiB0cnVlCiAgICB9LAogICAgImdsb2JhbHMiOiB7CiAgICAgICAgIkNvcmUiOiB0cnVlLAogICAgICAgICJDS0VESVRPUiI6IHRydWUsCiAgICAgICAgImlzSlF1ZXJ5T2JqZWN0IjogdHJ1ZSwKICAgICAgICAicHJpbnRTdGFja1RyYWNlIjogdHJ1ZSwKICAgICAgICAiUVVuaXQiOiB0cnVlLAogICAgICAgIC8vIG9sZGVyIFFVbml0IHN0dWZmCiAgICAgICAgLy8gb25seSBuZWVkZWQgZm9yIE9UT0JPIDw9IDUKICAgICAgICAvLyBjYW4gYmUgcmVtb3ZlZCBsYXRlcgogICAgICAgICJtb2R1bGUiOiB0cnVlLAogICAgICAgICJ0ZXN0IjogdHJ1ZSwKICAgICAgICAiZXhwZWN0IjogdHJ1ZSwKICAgICAgICAiZXF1YWwiOiB0cnVlLAogICAgICAgICJkZWVwRXF1YWwiOiB0cnVlLAogICAgICAgICJhc3luY1Rlc3QiOiB0cnVlLAogICAgICAgICJzdGFydCI6IHRydWUsCiAgICAgICAgIm9rIjogdHJ1ZSwKICAgICAgICAibm90RXF1YWwiOiB0cnVlCiAgICB9LAogICAgImV4dGVuZHMiOiAiZXNsaW50OnJlY29tbWVuZGVkIiwKICAgICJydWxlcyI6IHsKICAgICAgICAicXVvdGVzIjogMCwKICAgICAgICAibmV3LWNhcCI6IDAsCiAgICAgICAgImdsb2JhbC1zdHJpY3QiOiAwLAogICAgICAgICJuby1hbGVydCI6IDAsCiAgICAgICAgInJhZGl4IjogMiwKICAgICAgICAidmFsaWQtanNkb2MiOiBbMiwgewogICAgICAgICAgICAicmVxdWlyZVJldHVybiI6IGZhbHNlLAogICAgICAgICAgICAicmVxdWlyZVBhcmFtRGVzY3JpcHRpb24iOiBmYWxzZSwKICAgICAgICAgICAgInJlcXVpcmVSZXR1cm5EZXNjcmlwdGlvbiI6IGZhbHNlCiAgICAgICAgfV0sCiAgICAgICAgIm5vLWNhdGNoLXNoYWRvdyI6IDAsCiAgICAgICAgInZhcnMtb24tdG9wIjogMiwKICAgICAgICAic3BhY2UtaW4tcGFyZW5zIjogWzIsICJuZXZlciJdLAogICAgICAgICJuby1ldmFsIjogMiwKICAgICAgICAibm8taW1wbGllZC1ldmFsIjogMiwKCiAgICAgICAgLy8gT1RPQk8tc3BlY2lmaWMgcnVsZXMKICAgICAgICAibm8td2luZG93IjogMgogICAgfQp9Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/JavaScript/ESLint/webpack.eslintrc.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNSBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCgovKgogKiBOT1RFOiBJbiBvcmRlciBmb3IgbGludGluZyB0byB3b3JrLCB5b3Ugd2lsbCBuZWVkIGZvbGxvd2luZyBnbG9iYWxseSBpbnN0YWxsZWQgTlBNIG1vZHVsZXM6CiAqCiAqICAgbnBtIGluc3RhbGwgLWcgZXNsaW50QDUgZXNsaW50LXBsdWdpbi1pbXBvcnQgZXNsaW50LWNvbmZpZy1haXJibmItYmFzZSBlc2xpbnQtcGx1Z2luLXZ1ZSBiYWJlbC1lc2xpbnQgZXNsaW50LXBsdWdpbi1qZXN0CiAqCiAqIEZJWE1FOiBXZSBoYXZlIHRvIHBpbiB0aGUgRVNMaW50IHZlcnNpb24gdG8gNS54IHNpbmNlIG5vdCBhbGwgcGx1Z2lucyB3ZSB1c2UgYXJlIGNvbXBhdGlibGUgd2l0aCA2LngganVzdCB5ZXQuCiAqLwoKbW9kdWxlLmV4cG9ydHMgPSB7CgogICAgZXh0ZW5kczogWwogICAgICAgICdhaXJibmItYmFzZScsCiAgICBdLAoKICAgIHJ1bGVzOiB7CgogICAgICAgIC8qCiAgICAgICAgICogQWlyQm5CIEpTIHJ1bGUgb3ZlcnJpZGVzLgogICAgICAgICAqLwoKICAgICAgICAvLyBFbmZvcmNlIGNvbnNpc3RlbnQgaW5kZW50YXRpb24uCiAgICAgICAgJ2luZGVudCc6IFsgJ2Vycm9yJywgNCwgewogICAgICAgICAgICAnU3dpdGNoQ2FzZSc6IDEsCiAgICAgICAgICAgIC8vIEZpeCBpc3N1ZSB3aXRoIGBDYW5ub3QgcmVhZCBwcm9wZXJ0eSAncmFuZ2UnIG9mIG51bGxgIGVycm9ycy4gUGxlYXNlIHNlZQogICAgICAgICAgICAvLyAgIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ4MzkxOTEzL2VzbGludC1lcnJvci1jYW5ub3QtcmVhZC1wcm9wZXJ0eS1yYW5nZS1vZi1udWxsCiAgICAgICAgICAgIC8vICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgICAgICdpZ25vcmVkTm9kZXMnOiBbICdUZW1wbGF0ZUxpdGVyYWwnIF0sCiAgICAgICAgfV0sCgogICAgICAgIC8vIEZpeCBpc3N1ZSB3aXRoIGBDYW5ub3QgcmVhZCBwcm9wZXJ0eSAncmFuZ2UnIG9mIG51bGxgIGVycm9ycy4gUGxlYXNlIHNlZQogICAgICAgIC8vICAgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDgzOTE5MTMvZXNsaW50LWVycm9yLWNhbm5vdC1yZWFkLXByb3BlcnR5LXJhbmdlLW9mLW51bGwKICAgICAgICAvLyAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgICd0ZW1wbGF0ZS1jdXJseS1zcGFjaW5nJzogJ29mZicsCgogICAgICAgIC8vIEFsbG93IHVubmVjZXNzYXJpbHkgcXVvdGVkIHByb3BlcnRpZXMuCiAgICAgICAgJ3F1b3RlLXByb3BzJzogJ29mZicsCgogICAgICAgIC8vIEFsbG93IGRhbmdsaW5nIHVuZGVyc2NvcmVzIHRvIGluZGljYXRlIHByaXZhdGUgbWV0aG9kcyAobGlrZSBfaW50ZXJuYWxNZXRob2QoKSkuCiAgICAgICAgJ25vLXVuZGVyc2NvcmUtZGFuZ2xlJzogJ29mZicsCgogICAgICAgIC8vIEVuZm9yY2UgYSBtYXhpbXVtIGxpbmUgbGVuZ3RoLgogICAgICAgICdtYXgtbGVuJzogWyAnZXJyb3InLCB7ICdjb2RlJzogMTIwIH0gXSwKCiAgICAgICAgLy8gRG9uJ3QgdHJ5IHRvIHJlc29sdmUgdGhlIGRlcGVuZGVuY2llcy4KICAgICAgICAnaW1wb3J0L25vLXVucmVzb2x2ZWQnOiAnb2ZmJywKCiAgICAgICAgLy8gQWxsb3cgZm9yIG1pc3NpbmcgZmlsZSBleHRlbnNpb25zIGluIGltcG9ydCBzdGF0ZW1lbnRzLgogICAgICAgICdpbXBvcnQvZXh0ZW5zaW9ucyc6ICdvZmYnLAoKICAgICAgICAvLyBSZXF1aXJlIGEgc3BhY2UgYmVmb3JlIGZ1bmN0aW9uIHBhcmVudGhlc2lzLgogICAgICAgICdzcGFjZS1iZWZvcmUtZnVuY3Rpb24tcGFyZW4nOiBbICdlcnJvcicsICdhbHdheXMnIF0sCgogICAgICAgIC8vIFJlcXVpcmUgIlN0cm91c3RydXAiIGJyYWNlIHN0eWxlLgogICAgICAgICdicmFjZS1zdHlsZSc6IFsgJ2Vycm9yJywgJ3N0cm91c3RydXAnIF0sCgogICAgICAgIC8vIEVuZm9yY2Ugc3BhY2VzIGluc2lkZSBvZiBicmFja2V0cy4KICAgICAgICAnYXJyYXktYnJhY2tldC1zcGFjaW5nJzogWyAnZXJyb3InLCAnYWx3YXlzJyBdLAoKICAgICAgICAvLyBEbyBub3QgZW5mb3JjZSB0aGF0IGNsYXNzIG1ldGhvZHMgdXRpbGl6ZSB0aGlzLgogICAgICAgICdjbGFzcy1tZXRob2RzLXVzZS10aGlzJzogJ29mZicsCgogICAgICAgIC8vIEFsbG93IHRoZSB1bmFyeSBvcGVyYXRvcnMgKysgYW5kIC0tLgogICAgICAgICduby1wbHVzcGx1cyc6ICdvZmYnLAoKICAgICAgICAvLyBBbGxvdyBSZWFzc2lnbm1lbnQgb2YgRnVuY3Rpb24gUGFyYW1ldGVycy4KICAgICAgICAnbm8tcGFyYW0tcmVhc3NpZ24nOiAnb2ZmJywKCiAgICAgICAgLy8gQWxsb3cgc3RyaWN0IG1vZGUgZGlyZWN0aXZlcy4KICAgICAgICAnc3RyaWN0JzogJ29mZicsCgogICAgICAgIC8vIEFsbG93IHRoZSB1c2Ugb2YgZGV2IGRlcGVuZGVuY2llcy4KICAgICAgICAnaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzJzogWyAnZXJyb3InLCB7ICdkZXZEZXBlbmRlbmNpZXMnOiB0cnVlIH0gXSwKCiAgICAgICAgLy8gQWxsb3cgY2FsbGJhY2tzIG9mIGFycmF5J3MgbWV0aG9kcyB3aXRob3V0IHJldHVybnMuCiAgICAgICAgJ2FycmF5LWNhbGxiYWNrLXJldHVybic6ICdvZmYnLAoKICAgICAgICAvLyBSZXF1aXJlIGJyYWNlcyBpbiBhcnJvdyBmdW5jdGlvbiBib2R5LgogICAgICAgICdhcnJvdy1ib2R5LXN0eWxlJzogWyAnZXJyb3InLCAnYWx3YXlzJyBdLAoKICAgICAgICAvLyBBbGxvdyByZXF1aXJlKCkgYW55d2hlcmUgaW4gdGhlIGNvZGUuCiAgICAgICAgJ2dsb2JhbC1yZXF1aXJlJzogJ29mZicsCgogICAgICAgIC8vIEFsbG93IHRoZSB1c2Ugb2YgY29uc29sZS4KICAgICAgICAnbm8tY29uc29sZSc6ICdvZmYnLAoKICAgICAgICAvLyBEbyBub3QgcmVxdWlyZSBkZXN0cnVjdHVyaW5nIGZyb20gYXJyYXlzIGFuZCBvYmplY3RzLgogICAgICAgICdwcmVmZXItZGVzdHJ1Y3R1cmluZyc6IFsgJ2Vycm9yJywgeyAnYXJyYXknOiBmYWxzZSwgJ29iamVjdCc6IGZhbHNlIH0gXSwKCiAgICAgICAgLy8gRW5mb3JjZSBjb25zaXN0ZW50IGxpbmUgYnJlYWtzIGluc2lkZSBmdW5jdGlvbiBwYXJlbnRoZXNlcy4KICAgICAgICAnZnVuY3Rpb24tcGFyZW4tbmV3bGluZSc6IFsgJ2Vycm9yJywgJ2NvbnNpc3RlbnQnIF0sCgogICAgICAgIC8vIFJlcXVpcmVkIChmdW5jdGlvbnM6IG5ldmVyKSBzaW5jZSBwcmVwcm9jZXNzb3JzIGFyZSBub3QgaGFuZGxlZCBieSBiYWJlbC4KICAgICAgICAvLyAgU2VlIGFsc286IGh0dHBzOi8vZXNsaW50Lm9yZy9kb2NzL3J1bGVzL2NvbW1hLWRhbmdsZQogICAgICAgICJjb21tYS1kYW5nbGUiOiBbImVycm9yIiwgewogICAgICAgICAgICAiYXJyYXlzIjogImFsd2F5cy1tdWx0aWxpbmUiLAogICAgICAgICAgICAib2JqZWN0cyI6ICJhbHdheXMtbXVsdGlsaW5lIiwKICAgICAgICAgICAgImltcG9ydHMiOiAiYWx3YXlzLW11bHRpbGluZSIsCiAgICAgICAgICAgICJleHBvcnRzIjogImFsd2F5cy1tdWx0aWxpbmUiLAogICAgICAgICAgICAiZnVuY3Rpb25zIjogIm5ldmVyIiwKICAgICAgICB9XSwKCiAgICAgICAgLy8gRG8gbm90IGZvcmNlIHRoZSB1c2Ugb2YgdGhlIG9iamVjdCBzcHJlYWQganVzdCB5ZXQgKHRhcmdldCBFUzIwMTgpLgogICAgICAgICdwcmVmZXItb2JqZWN0LXNwcmVhZCc6ICdvZmYnLAoKICAgICAgICAvLyBEbyBub3QgZm9yY2UgcGFyZW50aGVzZXMgb24gYXJyb3cgZnVuY3Rpb25zIHdpdGggc2luZ2xlIGFyZ3VtZW50cy4KICAgICAgICAnYXJyb3ctcGFyZW5zJzogJ29mZicsCiAgICB9LAp9Owo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/JavaScript/ESLint/Rules/no-window.mjs" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNSBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCgoidXNlIHN0cmljdCI7CgovLwovLyBSdWxlIERlZmluaXRpb24KLy8KCmV4cG9ydCBkZWZhdWx0IHsKICAgIG1ldGE6IHsKICAgICAgICB0eXBlOiAncHJvYmxlbScsCiAgICAgICAgZG9jczogewogICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0Rpc2FsbG93IGRpcmVjdCB1c2FnZSBvZiB3aW5kb3cgb2JqZWN0IHByb3BlcnRpZXMnLAogICAgICAgICAgICBjYXRlZ29yeTogJ0Jlc3QgUHJhY3RpY2VzJywKICAgICAgICAgICAgcmVjb21tZW5kZWQ6IHRydWUKICAgICAgICB9LAogICAgICAgIHNjaGVtYTogW10KICAgIH0sCiAgICAKICAgIGNyZWF0ZShjb250ZXh0KSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgTWVtYmVyRXhwcmVzc2lvbihub2RlKSB7CiAgICAgICAgICAgICAgICBjb25zdCBSZXNlcnZlZFdvcmRzID0gWyJvcGVuZXIiLCAicGFyZW50IiwgIm9wZW4iLCAibmFtZSIsICJjbG9zZSJdOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAobm9kZS5vYmplY3QudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgT2JqZWN0TmFtZSA9IG5vZGUub2JqZWN0Lm5hbWU7CgogICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3ROYW1lID09PSAnd2luZG93JyAmJiBub2RlLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJykgewogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQcm9wZXJ0eU5hbWUgPSBub2RlLnByb3BlcnR5Lm5hbWU7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVzZXJ2ZWRXb3Jkcy5pbmNsdWRlcyhQcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAiRG8gbm90IHVzZSB0aGUgJ3dpbmRvdycgb2JqZWN0LiBVc2UgdGhlIE9UT0JPIGZ1bmN0aW9ucyBpbiBDb3JlLlVJLlBvcHVwIGluc3RlYWQ6IHdpbmRvdy57e3Byb3BlcnR5fX0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHsgcHJvcGVydHk6IFByb3BlcnR5TmFtZSB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB9Cn07Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/JavaScript/FileName.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkphdmFTY3JpcHQ6OkZpbGVOYW1lOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEZpbGU6OkJhc2VuYW1lOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6QmFzZSk7CgpzdWIgdmFsaWRhdGVfZmlsZSB7CiAgICBteSAoICRTZWxmLCAkRmlsZW5hbWUgKSA9IEBfOwoKICAgIHJldHVybiBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZCggRmlsZW5hbWUgPT4gJEZpbGVuYW1lICk7CgogICAgbXkgJENvZGUgICAgICAgPSAkU2VsZi0+X0dldEZpbGVDb250ZW50cygkRmlsZW5hbWUpOwogICAgbXkgJE5hbWVPZkZpbGUgPSBzdWJzdHIoIGJhc2VuYW1lKCRGaWxlbmFtZSksIDAsIC0zICk7ICAgICMgY3V0IG9mZiAuanMKCiAgICBteSAkQ291bnRlcjsKCiAgICBmb3IgbXkgJExpbmUgKCBzcGxpdCggL1xuLywgJENvZGUgKSApIHsKICAgICAgICAkQ291bnRlcisrOwoKICAgICAgICBpZiAoICRMaW5lID1+IG17XihbXj0gXSspXHMqPVxzKlwoZnVuY3Rpb25ccypcKFRhcmdldE5TXClccypceyB9eG1zICkgewoKICAgICAgICAgICAgaWYgKCAkMSBuZSAkTmFtZU9mRmlsZSAmJiAkTGluZSAhfiBte14vL30gKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcig8PCJFT0YiKTsKVGhlIGZpbGUgbmFtZSAoJE5hbWVPZkZpbGUuanMpIGlzIG5vdCBlcXVhbCB0byB0aGUgbmFtZSBvZiB0aGUgSmF2YVNjcmlwdCBuYW1lc3BhY2UgKCQxKS4KRU9GCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuOwp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/JavaScript/FileNameUnitTest.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkphdmFTY3JpcHQ6OkZpbGVOYW1lVW5pdFRlc3Q7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgRmlsZTo6QmFzZW5hbWU7Cgp1c2UgTW9vOwoKZXh0ZW5kcyBxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpCYXNlKTsKCnN1YiB2YWxpZGF0ZV9maWxlIHsKICAgIG15ICggJFNlbGYsICRGaWxlbmFtZSApID0gQF87CgogICAgcmV0dXJuIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBGaWxlbmFtZSA9PiAkRmlsZW5hbWUgKTsKCiAgICBteSAkQ29kZSAgICAgICA9ICRTZWxmLT5fR2V0RmlsZUNvbnRlbnRzKCRGaWxlbmFtZSk7CiAgICBteSAkTmFtZU9mRmlsZSA9IHN1YnN0ciggYmFzZW5hbWUoJEZpbGVuYW1lKSwgMCwgLTMgKTsgICAgIyBjdXQgb2ZmIC5qcwoKICAgIG15ICRDb3VudGVyOwoKICAgIGZvciBteSAkTGluZSAoIHNwbGl0KCAvXG4vLCAkQ29kZSApICkgewogICAgICAgICRDb3VudGVyKys7CgogICAgICAgIGlmICggJExpbmUgPX4gbXteKFtePSBdKylccyo9XHMqXChmdW5jdGlvblxzKlwoTmFtZXNwYWNlXClccypceyB9eG1zICkgewoKICAgICAgICAgICAgaWYgKCAkMSAuICIuVW5pdFRlc3QiIG5lICROYW1lT2ZGaWxlICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoPDwiRU9GIik7ClRoZSBmaWxlIG5hbWUgKCROYW1lT2ZGaWxlLmpzKSBpcyBub3QgY29ycmVjdCBmb3IgdGhlIHVuaXQgdGVzdHMgb2YgdGhlIEphdmFTY3JpcHQgbmFtZXNwYWNlICgkMSkuIE11c3QgYmUgJDEuVW5pdFRlc3QuanMuCkVPRgogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/JavaScript/UnloadEvent.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkphdmFTY3JpcHQ6OlVubG9hZEV2ZW50OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6QmFzZSk7CgpzdWIgdmFsaWRhdGVfc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICBteSAkRXJyb3JNZXNzYWdlOwogICAgbXkgJENvdW50ZXI7CgogICAgZm9yIG15ICRMaW5lICggc3BsaXQoIC9cbi8sICRDb2RlICkgKSB7CiAgICAgICAgJENvdW50ZXIrKzsKICAgICAgICBpZiAoICRMaW5lID1+IG17IFwuYmluZFwoWyciXXVubG9hZCB9eG1zIHx8ICRMaW5lID1+IG17IFwub25cKFsnIl11bmxvYWQgfXhtcyApIHsKICAgICAgICAgICAgJEVycm9yTWVzc2FnZQogICAgICAgICAgICAgICAgLj0gIkVSUk9SOiBGb3VuZCB3aW5kb3cgdW5sb2FkIGV2ZW50IGluIGxpbmUoICRDb3VudGVyICk6ICRMaW5lXG4iOwogICAgICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICJQbGVhc2UgdXNlIENvcmUuQXBwLkJpbmRXaW5kb3dVbmxvYWRFdmVudCgpIGZvciBjcm9zcy1icm93c2VyIGNvbXBhdGliaWxpdHkuXG4iOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoJEVycm9yTWVzc2FnZSkgewogICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKCIkRXJyb3JNZXNzYWdlIik7CiAgICB9Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Legal/LicenseValidator.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkxlZ2FsOjpMaWNlbnNlVmFsaWRhdG9yOwojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpDb21tb246OkN1c3RvbWl6YXRpb25NYXJrZXJzKQojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpMZWdhbDo6TGljZW5zZVZhbGlkYXRvcikKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkJhc2UpOwoKc3ViIHRyYW5zZm9ybV9zb3VyY2UgewogICAgbXkgKCAkU2VsZiwgJENvZGUgKSA9IEBfOwoKICAgIHJldHVybiAkQ29kZSBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZCggQ29kZSA9PiAkQ29kZSApOwoKICAgICMgaW5zZXJ0IGxpY2Vuc2UgaGVhZGVyIHRyYW5zZm9ybWF0aW9ucwoKICAgIHJldHVybiAkQ29kZTsKfQoKc3ViIHZhbGlkYXRlX2ZpbGUgewogICAgbXkgKCAkU2VsZiwgJEZpbGVuYW1lICkgPSBAXzsKCiAgICByZXR1cm4gaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIEZpbGVuYW1lID0+ICRGaWxlbmFtZSApOwoKICAgIG15ICRDb2RlID0gJFNlbGYtPl9HZXRGaWxlQ29udGVudHMoJEZpbGVuYW1lKTsKCiAgICAjIGV4dHJhY3QgdGhlIGxhc3QgcGFydCBvZiB0aGUgZXh0ZW5zaW9uLAogICAgIyBlLmcuICdkaXN0JyBmcm9tIERvY2tlckNvbmZpZy54bWwuZGlzdAogICAgbXkgKCRGaWxldHlwZSkgPSAkRmlsZW5hbWUgPX4gbXsgLiogXC4gKCAuKyApIH14bXNpOwogICAgJEZpbGV0eXBlIHx8PSAnJzsKCiAgICAjIGluIHNvbWUgY2FzZXMgdGhlIG5leHQgdG8gbGFzdCBleHRlbnNpb24gcGFydCBpcyB0aGUgcmVsZXZhbnQgcGFydCwKICAgICMgZS5nLiAneG1sJyBmcm9tIERvY2tlckNvbmZpZy54bWwuZGlzdAogICAgaWYgKCAkRmlsZXR5cGUgZXEgJ3NrZWwnICkgewogICAgICAgICgkRmlsZXR5cGUpID0gJEZpbGVuYW1lID1+IG17IC4qIFwuICggLisgKSBcLnNrZWwgfXhtc2k7CiAgICB9CiAgICBlbHNpZiAoICRGaWxldHlwZSBlcSAnZGlzdCcgKSB7CiAgICAgICAgbXkgKCROZXh0VG9MYXN0RmlsZXR5cGUpID0gJEZpbGVuYW1lID1+IG17IC4qIFwuICggLisgKSBcLmRpc3QgfXhtc2k7CiAgICAgICAgJEZpbGV0eXBlID0gJE5leHRUb0xhc3RGaWxldHlwZSAvLyAnZGlzdCc7CiAgICB9CgogICAgIyBDaGVjayBhIGphdmFzY3JpcHQgbGljZW5zZSBoZWFkZXIuCiAgICBpZiAoIGxjICRGaWxldHlwZSBlcSAnanMnICkgewoKICAgICAgICBteSAkRGVzY3JpcHRpb24gICA9IF9EZXNjSlMoKTsKICAgICAgICBteSAkR1BMSmF2YVNjcmlwdCA9IF9HUExKYXZhU2NyaXB0KCk7CgogICAgICAgIGlmICggJENvZGUgIX4gbXtcUSRHUExKYXZhU2NyaXB0XEV9ICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcigiRm91bmQgbm8gdmFsaWQgamF2YXNjcmlwdCBsaWNlbnNlIGhlYWRlciEiKTsKICAgICAgICB9CiAgICAgICAgaWYgKCAkQ29kZSAhfiBte1xRJERlc2NyaXB0aW9uXEV9ICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcigiRm91bmQgbm8gdmFsaWQgZGVzY3JpcHRpb24gaW4gamF2YXNjcmlwdCBsaWNlbnNlIGhlYWRlciEiKTsKICAgICAgICB9CiAgICB9CgogICAgIyBDaGVjayBhIHBlcmwgc2NyaXB0IGxpY2Vuc2UgaGVhZGVyLgogICAgZWxzaWYgKCBsYyAkRmlsZXR5cGUgZXEgJ3BsJyB8fCBsYyAkRmlsZXR5cGUgZXEgJ3BzZ2knIHx8IGxjICRGaWxldHlwZSBlcSAnc2gnIHx8IGxjICRGaWxldHlwZSBlcSAndCcgKSB7CgogICAgICAgIG15ICREZXNjcmlwdGlvbiAgID0gX0Rlc2NQZXJsKCk7CiAgICAgICAgbXkgJEdQTFBlcmxTY3JpcHQgPSBfR1BMUGVybFNjcmlwdCgpOwoKICAgICAgICBpZiAoICRDb2RlICF+IG17XFEkR1BMUGVybFNjcmlwdFxFfSApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoIkZvdW5kIG5vIHZhbGlkIHBlcmwgc2NyaXB0IGxpY2Vuc2UgaGVhZGVyISIpOwogICAgICAgIH0KICAgICAgICBpZiAoICRDb2RlICF+IG17XFEkRGVzY3JpcHRpb25cRX0gKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKCJGb3VuZCBubyB2YWxpZCBkZXNjcmlwdGlvbiBpbiBwZXJsIGxpY2Vuc2UgaGVhZGVyISIpOwogICAgICAgIH0KICAgIH0KCiAgICAjIENoZWNrIGNzcyBsaWNlbnNlIGhlYWRlci4KICAgIGVsc2lmICggbGMgJEZpbGV0eXBlIGVxICdjc3MnIHx8IGxjICRGaWxldHlwZSBlcSAnc2NzcycgKSB7CgogICAgICAgIG15ICREZXNjcmlwdGlvbiA9IF9EZXNjQ3NzKCk7CiAgICAgICAgbXkgJEdQTENzcyAgICAgID0gX0dQTENzcygpOwoKICAgICAgICBpZiAoICRDb2RlICF+IG17XFEkR1BMQ3NzXEV9ICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcigiRm91bmQgbm8gdmFsaWQgY3NzIGxpY2Vuc2UgaGVhZGVyISIpOwogICAgICAgIH0KICAgICAgICBpZiAoICRDb2RlICF+IG17XFEkRGVzY3JpcHRpb25cRX0gKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKCJGb3VuZCBubyB2YWxpZCBkZXNjcmlwdGlvbiBpbiBjc3MgbGljZW5zZSBoZWFkZXIhIik7CiAgICAgICAgfQogICAgfQoKICAgICMgQ2hlY2sgdnVlIGxpY2Vuc2UgaGVhZGVyLgogICAgZWxzaWYgKCBsYyAkRmlsZXR5cGUgZXEgJ3Z1ZScgKSB7CgogICAgICAgIG15ICRHUExWdWUgPSBfR1BMVnVlKCk7CgogICAgICAgIGlmICggJENvZGUgIX4gbXtcUSRHUExWdWVcRX0gKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKCJGb3VuZCBubyB2YWxpZCB2dWUgbGljZW5zZSBoZWFkZXIhIik7CiAgICAgICAgfQogICAgfQoKICAgICMgQ2hlY2sgeG1sIGxpY2Vuc2UgdGFnLgogICAgZWxzaWYgKCBsYyAkRmlsZXR5cGUgZXEgJ3htbCcgKSB7CgogICAgICAgICMgRG8gbm90IHZhbGlkYXRlIFhNTCBmaWxlcywgYmVjYXVzZSB0aGVyZSBhIHNvIG1hbnkgZGlmZmVyZW50IGNvbnRlbnQgKGNvbmZpZyBYTUwsIGRvY3VtZW50YXRpb24gWE1MLCAuLi4pCiAgICB9CgogICAgIyBDaGVjayBvcG0gYW5kIHNvcG0gbGljZW5zZSB0YWcuCiAgICBlbHNpZiAoIGxjICRGaWxldHlwZSBlcSAnc29wbScgfHwgbGMgJEZpbGV0eXBlIGVxICdvcG0nICkgewoKICAgICAgICBteSAkR1BMT1BNID0gX0dQTE9QTSgpOwoKICAgICAgICBpZiAoICRDb2RlICF+IG17XFEkR1BMT1BNXEV9ICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcigiRm91bmQgbm8gdmFsaWQgT1BNIGxpY2Vuc2UgaGVhZGVyISIpOwogICAgICAgIH0KICAgIH0KCiAgICAjIENoZWNrIGdlbmVyaWMgbGljZW5zZSBoZWFkZXIuCiAgICBlbHNlIHsKCiAgICAgICAgbXkgJEdQTEdlbmVyaWMgPSBfR1BMR2VuZXJpYygpOwoKICAgICAgICBpZiAoICRDb2RlICF+IG17XFEkR1BMR2VuZXJpY1xFfSApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoIkZvdW5kIG5vIHZhbGlkIGxpY2Vuc2UgaGVhZGVyISIpOwogICAgICAgIH0KICAgIH0KCiAgICAjIENoZWNrIHBlcmxkb2MgbGljZW5zZSBoZWFkZXIuCiAgICBpZiAoIGxjICRGaWxldHlwZSBlcSAncGwnIHx8IGxjICRGaWxldHlwZSBlcSAncG0nICkgewoKICAgICAgICBpZiAoICRDb2RlID1+IG17ID1oZWFkMSBccysgVEVSTVMgXHMrIEFORCBccysgQ09ORElUSU9OUyBcbisgVGhpcyBccysgc29mdHdhcmUgXHMrIGlzIFxzKyBwYXJ0IH1zbXggKSB7CgogICAgICAgICAgICBteSAkR1BMUGVybGRvYyA9IF9HUExQZXJsZG9jKCk7CgogICAgICAgICAgICBpZiAoICRDb2RlICF+IG17XFEkR1BMUGVybGRvY1xFfSApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKCJGb3VuZCBubyB2YWxpZCBwZXJsZG9jIGxpY2Vuc2UgaGVhZGVyISIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKfQoKc3ViIF9HUExQZXJsU2NyaXB0IHsKICAgIHJldHVybiA8PCdFTkRfR1BMUEVSTFNDUklQVCc7CiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KRU5EX0dQTFBFUkxTQ1JJUFQKfQoKc3ViIF9HUExKYXZhU2NyaXB0IHsKICAgIHJldHVybiA8PCdFTkRfR1BMSkFWQVNDUklQVCc7Ci8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCkVORF9HUExKQVZBU0NSSVBUCn0KCnN1YiBfR1BMQ3NzIHsKICAgIHJldHVybiA8PCdFTkRfR1BMQ1NTJzsKClRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCnRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCkZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uClRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVApBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwpGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiovCkVORF9HUExDU1MKfQoKc3ViIF9HUExWdWUgewogICAgcmV0dXJuIDw8J0VORF9HUExWVUUnOwoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLS0+CkVORF9HUExWVUUKfQoKc3ViIF9HUExPUE0gewogICAgcmV0dXJuICc8TGljZW5zZT5HTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRSBWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNzwvTGljZW5zZT4nOwp9CgpzdWIgX0dQTEdlbmVyaWMgewogICAgcmV0dXJuIDw8J0VORF9HUExHRU5FUklDJzsKIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQpFTkRfR1BMR0VORVJJQwp9CgpzdWIgX0dQTFBlcmxkb2MgewoKICAgICMgYXZvaWQgdGhhdCBDb2RlUG9saWN5IGluY29ycmVjdGx5IGRldGVjdHMgcmVhbCBQT0QKICAgIHJldHVybiAnPWhlYWQxICcgLiA8PCdFTkRfR1BMUEVSTERPQyc7ClRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UT0JPIHByb2plY3QgKEw8aHR0cHM6Ly9vdG9iby5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCkVORF9HUExQRVJMRE9DCgp9CgpzdWIgX0Rlc2NQZXJsIHsKICAgIHJldHVybiA8PCdFTkRfREVTQ1BFUkxTQ1JJUFQnOwojIC0tCiMgT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgojIC0tCkVORF9ERVNDUEVSTFNDUklQVAp9CgpzdWIgX0Rlc2NKUyB7CiAgICByZXR1cm4gPDwnRU5EX0RFU0NKUyc7Ci8vIC0tCi8vIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KLy8gLS0KRU5EX0RFU0NKUwp9CgpzdWIgX0Rlc2NDc3MgewogICAgcmV0dXJuIDw8J0VORF9ERVNDQ1NTJzsKLyogT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgoKRU5EX0RFU0NDU1MKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Legal/ReplaceCopyright.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkxlZ2FsOjpSZXBsYWNlQ29weXJpZ2h0OwoKIyMgbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6VGltZSkKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkJhc2UpOwoKdXNlIEZpbGU6OkJhc2VuYW1lOwp1c2UgRmlsZTo6Q29weSBxdyhjb3B5KTsKCnN1YiB0cmFuc2Zvcm1fc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gJENvZGUgaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICAjIERvbid0IHJlcGxhY2UgY29weXJpZ2h0IGluIHRoaXJkcGFydHkgY29kZS4KICAgIHJldHVybiAkQ29kZSBpZiAkU2VsZi0+SXNUaGlyZHBhcnR5TW9kdWxlKCk7CgogICAgIyBSZXBsYWNlIDxVUkw+aHR0cDovL290b2JvLm9yZy88L1VSTD4gd2l0aCA8VVJMPmh0dHBzOi8vb3RvYm8uaW8vPC9VUkw+CiAgICAkQ29kZSA9fiBzeyBeICggXHMqICkgXDwgVVJMIFw+IC4rPyBcPCBcLyBVUkwgXD4gfXskMTxVUkw+aHR0cHM6Ly9vdG9iby5pby88L1VSTD59eG1zZzsKCiAgICBteSAkQ29weSA9ICdSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vJzsKCiAgICBteSAkWWVhciA9ICggbG9jYWx0aW1lKHRpbWUpIClbNV07CiAgICAkWWVhciArPSAxOTAwOwoKICAgIG15ICRZZWFyU3RyaW5nID0gIjIwMTktJFllYXIiOwoKICAgIG15ICRPdXRwdXQgPSAnJzsKCiAgICBteSBATGluZXMgPSBzcGxpdCggL1xuLywgJENvZGUgKTsKICAgIG15ICRpICAgICA9IDA7CgogICAgIyBoZWFkZXIgc3RhcnQKICAgIExJTkU6CiAgICBmb3IgbXkgJExpbmUgKEBMaW5lcykgewogICAgICAgIGxhc3QgTElORSBpZiAkTGluZSA9fiBtL0NvcHlyaWdodC87CgogICAgICAgICRPdXRwdXQgLj0gJExpbmUgLiAiXG4iOwogICAgICAgICRpKys7CiAgICB9CgogICAgbXkgJENvcHlTZXQgPSAwOwoKICAgICMgY29weXJpZ2h0IGJsb2NrCiAgICB3aGlsZSAoICRMaW5lc1skaV0gJiYgJExpbmVzWyRpXSA9fiAvQ29weXJpZ2h0LyApIHsKICAgICAgICBteSAkTGluZSA9ICRMaW5lc1skaV07CgogICAgICAgICMgUE9EIGNvcHlyaWdodCBzdGF0ZW1lbnRzLgogICAgICAgIGlmICggJExpbmUgPX4gL14jIENvcHlyaWdodCAuKlJvdGhlciBPU1MvICkgewogICAgICAgICAgICAkTGluZSAgICA9ICIjIENvcHlyaWdodCAoQykgJFllYXJTdHJpbmcgJENvcHkiOwogICAgICAgICAgICAkQ29weVNldCA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIENoZWNrIHN0cmluZyBpbiBkb2N1bWVudGF0aW9uLnltbCBmaWxlcwogICAgICAgIGVsc2lmICggJExpbmUgPX4gL15Db3B5cmlnaHQ6IC4qUm90aGVyIE9TUy8gKSB7CiAgICAgICAgICAgICRMaW5lICAgID0gIkNvcHlyaWdodDogJFllYXJTdHJpbmcgJENvcHkiOwogICAgICAgICAgICAkQ29weVNldCA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIEFueSBvdGhlciBnZW5lcmljIGNvcHlyaWdodCBzdGF0ZW1lbnRzLCBlLmcgOgogICAgICAgICMgICBwcmludCAiQ29weXJpZ2h0IChjKSAyMDAzLTIwMDggUm90aGVyIE9TUyBHbWJILCBodHRwOi8vd3d3Lm90b2JvLmNvbS9cbiI7CiAgICAgICAgIyAkMiBzaG91bGQgb25seSBvY2N1ciBpbjogS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9Db3B5cmlnaHQudHQKICAgICAgICBlbHNpZiAoICRMaW5lID1+IC9eKFteXG5dKilDb3B5cmlnaHQuKlJvdGhlciBPU1MuKz8oXHMrLS0+KT8kL2kgKSB7CiAgICAgICAgICAgIG15ICRFbmQgPSAkMiAvLyAnJzsKICAgICAgICAgICAgJExpbmUgICAgPSAiJDFDb3B5cmlnaHQgKEMpICRZZWFyU3RyaW5nICRDb3B5JEVuZCI7CiAgICAgICAgICAgICRDb3B5U2V0ID0gMTsKICAgICAgICB9CgogICAgICAgICRPdXRwdXQgLj0gJExpbmUgLiAiXG4iOwogICAgICAgICRpKys7CiAgICB9CgogICAgIyBpZiB3ZSBhcmUgbm90IHlldCBsaXN0ZWQgYWRkIFJvdGhlciBPU1MgR21iSCBpZiB0aGUgZmlsZSBzZWVtcyB0byBoYXZlIGFuIHVzdWFsIGNvcHlyaWdodCBoZWFkZXIKICAgICMgaW4gcmFyZSBjYXNlcyB0aGlzIGNhbiBicmVhayBmaWxlcyBhbmQgdGhlbiBuZWVkcyBmdXJ0aGVyIGFkYXB0aW9uCiAgICBpZiAoICEkQ29weVNldCAmJiAkTGluZXNbICRpIC0gMSBdID1+IC9eKFsjXC9cc10qKUNvcHlyaWdodC8gKSB7CiAgICAgICAgJE91dHB1dCAuPSAiJDFDb3B5cmlnaHQgKEMpICRZZWFyU3RyaW5nICRDb3B5XG4iOwogICAgfQoKICAgICMgYWRkIHRoZSByZXN0IG9mIHRoZSBmaWxlCiAgICBmb3IgKCAkaSAuLiAkI0xpbmVzICkgewogICAgICAgICRPdXRwdXQgLj0gJExpbmVzWyRfXSAuICJcbiI7CiAgICB9CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Legal/SOPMLicense.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkxlZ2FsOjpTT1BNTGljZW5zZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkJhc2UpOwoKc3ViIHRyYW5zZm9ybV9zb3VyY2UgewogICAgbXkgKCAkU2VsZiwgJENvZGUgKSA9IEBfOwoKICAgIHJldHVybiAkQ29kZSBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZCggQ29kZSA9PiAkQ29kZSApOwoKICAgICMgUmVwbGFjZSBsaWNlbnNlIHdpdGggR1BMMwogICAgJENvZGUKICAgICAgICA9fiBzezxMaWNlbnNlPiAuKj8gPC9MaWNlbnNlPn17PExpY2Vuc2U+R05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UgVmVyc2lvbiAzLCAyOSBKdW5lIDIwMDc8L0xpY2Vuc2U+fWdzbXg7CgogICAgcmV0dXJuICRDb2RlOwp9CgpzdWIgdmFsaWRhdGVfc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICBpZiAoICRDb2RlICF+IG17PExpY2Vuc2U+IC4rPyA8L0xpY2Vuc2U+fXNteCApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcigiQ291bGQgbm90IGZpbmQgYSB2YWxpZCBPUE0gbGljZW5zZSBoZWFkZXIuIik7CiAgICB9CgogICAgaWYgKAogICAgICAgICRDb2RlCiAgICAgICAgIX4gbXs8TGljZW5zZT5HTlUgXHMgR0VORVJBTCBccyBQVUJMSUMgXHMgTElDRU5TRSBccyBWZXJzaW9uIFxzIDMsIFxzIDI5IFxzIEp1bmUgXHMgMjAwNzwvTGljZW5zZT59c214CiAgICAgICAgKQogICAgewogICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKDw8IkVPRiIpOwpJbnZhbGlkIGxpY2Vuc2UgZm91bmQuClVzZSA8TGljZW5zZT5HTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRSBWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNzwvTGljZW5zZT4uCkVPRgogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Migrations/OTOBO10/DateTime.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86Ok1pZ3JhdGlvbnM6Ok9UT0JPMTA6OkRhdGVUaW1lOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6QmFzZSk7CgpzdWIgdmFsaWRhdGVfc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICAjIGFjdGl2ZSBvbmx5IGZvciBPVE9CTyAxMAogICAgcmV0dXJuIHVubGVzcyAkU2VsZi0+SXNGcmFtZXdvcmtWZXJzaW9uTGVzc1RoYW4oIDExLCAwICk7CgogICAgbXkgKCAkQ291bnRlciwgJEVycm9yTWVzc2FnZSApOwoKICAgIExJTkU6CiAgICBmb3IgbXkgJExpbmUgKCBzcGxpdCAvXG4vLCAkQ29kZSApIHsKICAgICAgICAkQ291bnRlcisrOwoKICAgICAgICBuZXh0IExJTkUgaWYgJExpbmUgPX4gbS9eXHMqXCMvc214OwoKICAgICAgICAjIExvb2sgZm9yIGNvZGUgdGhhdCB1c2VzIG5vdCBhbGxvd2VkIGRhdGUvdGltZSBtb2R1bGVzIGFuZCBmdW5jdGlvbnMKICAgICAgICBpZiAoICRMaW5lID1+IG17KHVzZVxzKyhEYXRlOjpQY2FsY3xUaW1lOjpMb2NhbHxUaW1lOjpQaWVjZSl8XGIodGltZWxvY2FsfGdtdGltZXx0aW1lZ20pXHMqXCgpfXNtICkgewogICAgICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICJMaW5lICRDb3VudGVyOiAkTGluZVxuIjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCRFcnJvck1lc3NhZ2UpIHsKICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcig8PCJFT0YiKTsKVXNlIG9mIERhdGU6OlBjYWxjLCBUaW1lOjpMb2NhbCwgVGltZTo6UGllY2UsIHRpbWVsb2NhbCwgZ210aW1lIGFuZCB0aW1lZ20gaXMgbm90IGFsbG93ZWQgYW55bW9yZS4gVXNlIEtlcm5lbDo6U3lzdGVtOjpEYXRlVGltZSBpbnN0ZWFkLgogICAgUGxlYXNlIHNlZSBodHRwOi8vZG9jLm90b2JvLmNvbS9kb2MvbWFudWFsL2RldmVsb3Blci82LjAvZW4vaHRtbC9wYWNrYWdlLXBvcnRpbmcuaHRtbCNwYWNrYWdlLXBvcnRpbmctNS10by02IGZvciBwb3J0aW5nIGd1aWRlbGluZXMuCiRFcnJvck1lc3NhZ2UKRU9GCiAgICB9CgogICAgcmV0dXJuOwp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Migrations/OTOBO10/PerlConfigFileFormat.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86Ok1pZ3JhdGlvbnM6Ok9UT0JPMTA6OlBlcmxDb25maWdGaWxlRm9ybWF0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6QmFzZSk7CgpzdWIgdmFsaWRhdGVfc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICAjIGFjdGl2ZSBvbmx5IGZvciBPVE9CTyAxMAogICAgcmV0dXJuIHVubGVzcyAkU2VsZi0+SXNGcmFtZXdvcmtWZXJzaW9uTGVzc1RoYW4oIDExLCAwICk7CgogICAgaWYgKCAkQ29kZSAhfiBte15wYWNrYWdlIFxzfXNteCB8fCAkQ29kZSAhfiBte15zdWIgXHMrIExvYWR9c214ICkgewoKICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcig8PCJFT0YiKTsKUGVybCBjb25maWd1cmF0aW9uIGZpbGVzIGZvciBPVE9CTyAxMCsgbXVzdCB1c2UgdGhlIHRoZSBuZXcgZm9ybWF0IGxpa2UgS2VybmVsL0NvbmZpZy9GaWxlcy9aWlpBQXV0by5wbSAodGhleSBuZWVkIHRvIGJlIGNyZWF0ZWQgYXMgYSBwYWNrYWdlIHdpdGggYSBMb2FkKCkgbWV0aG9kKS4KRU9GCiAgICB9CgogICAgcmV0dXJuOwp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Migrations/OTOBO10/PermissionDataNotInSession.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86Ok1pZ3JhdGlvbnM6Ok9UT0JPMTA6OlBlcm1pc3Npb25EYXRhTm90SW5TZXNzaW9uOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6QmFzZSk7CgojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpNaWdyYXRpb25zOjpPVE9CTzEwOjpQZXJtaXNzaW9uRGF0YU5vdEluU2Vzc2lvbikKIyMgbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6T2JqZWN0RGVwZW5kZW5jaWVzKQoKc3ViIHZhbGlkYXRlX3NvdXJjZSB7CiAgICBteSAoICRTZWxmLCAkQ29kZSApID0gQF87CgogICAgcmV0dXJuIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBDb2RlID0+ICRDb2RlICk7CgogICAgIyBhY3RpdmUgb25seSBmb3IgT1RPQk8gMTAKICAgIHJldHVybiB1bmxlc3MgJFNlbGYtPklzRnJhbWV3b3JrVmVyc2lvbkxlc3NUaGFuKCAxMSwgMCApOwoKICAgIG15ICggJENvdW50ZXIsICRFcnJvck1lc3NhZ2UgKTsKCiAgICBMSU5FOgogICAgZm9yIG15ICRMaW5lICggc3BsaXQgL1xuLywgJENvZGUgKSB7CiAgICAgICAgJENvdW50ZXIrKzsKCiAgICAgICAgbmV4dCBMSU5FIGlmICRMaW5lID1+IG0vXlxzKlwjL3NteDsKCiAgICAgICAgaWYgKCAkTGluZSA9fiBte1VzZXJJc0dyb3VwfXNtICkgewogICAgICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICJMaW5lICRDb3VudGVyOiAkTGluZVxuIjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCRFcnJvck1lc3NhZ2UpIHsKICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcig8PCJFT0YiKTsKU2luY2UgT1RPQk8gMTAsIGdyb3VwIHBlcm1pc3Npb24gaW5mb3JtYXRpb24gaXMgbm8gbG9uZ2VyIHN0b3JlZCBpbiB0aGUgc2Vzc2lvbiBub3IgdGhlIExheW91dE9iamVjdCBhbmQgY2Fubm90IGJlIGZldGNoZWQgd2l0aCAnVXNlcklzR3JvdXBbXScuIEluc3RlYWQsIGl0IGNhbiBiZSBmZXRjaGVkIHdpdGggUGVybWlzc2lvbkNoZWNrKCkgb24gS2VybmVsOjpTeXN0ZW06Okdyb3VwIG9yIEtlcm5lbDo6U3lzdGVtOjpDdXN0b21lckdyb3VwLgoKRXhhbXBsZToKCiAgICBteSBcJEhhc1Blcm1pc3Npb24gPSBcJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPlBlcm1pc3Npb25DaGVjaygKICAgICAgICBVc2VySUQgICAgPT4gXCRVc2VySUQsCiAgICAgICAgR3JvdXBOYW1lID0+IFwkR3JvdXBOYW1lLAogICAgICAgIFR5cGUgICAgICA9PiAnbW92ZV9pbnRvJywKICAgICk7CgokRXJyb3JNZXNzYWdlCkVPRgogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Migrations/OTOBO10/SysConfig.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86Ok1pZ3JhdGlvbnM6Ok9UT0JPMTA6OlN5c0NvbmZpZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkJhc2UpOwoKc3ViIHZhbGlkYXRlX3NvdXJjZSB7CiAgICBteSAoICRTZWxmLCAkQ29kZSApID0gQF87CgogICAgcmV0dXJuIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBDb2RlID0+ICRDb2RlICk7CgogICAgIyBhY3RpdmUgb25seSBmb3IgT1RPQk8gMTAKICAgIHJldHVybiB1bmxlc3MgJFNlbGYtPklzRnJhbWV3b3JrVmVyc2lvbkxlc3NUaGFuKCAxMSwgMCApOwoKICAgIG15ICggJENvdW50ZXIsICRFcnJvck1lc3NhZ2UgKTsKCiAgICBMSU5FOgogICAgZm9yIG15ICRMaW5lICggc3BsaXQgL1xuLywgJENvZGUgKSB7CiAgICAgICAgJENvdW50ZXIrKzsKCiAgICAgICAgbmV4dCBMSU5FIGlmICRMaW5lID1+IG0vXlxzKlwjL3NteDsKCiAgICAgICAgIyBMb29rIGZvciBjb2RlIHRoYXQgdXNlcyBub3Qgbm90IGV4aXN0aW5nIGZ1bmN0aW9ucy4KICAgICAgICBpZiAoCiAgICAgICAgICAgICRMaW5lID1+IG17CiAgICAgICAgICAgIC0+KENyZWF0ZUNvbmZpZ3xDb25maWdJdGVtVXBkYXRlfENvbmZpZ0l0ZW1HZXR8Q29uZmlnSXRlbVJlc2V0CiAgICAgICAgICAgIHxDb25maWdJdGVtVmFsaWRpdHlVcGRhdGV8Q29uZmlnR3JvdXBMaXN0fENvbmZpZ1N1Ykdyb3VwTGlzdAogICAgICAgICAgICB8Q29uZmlnU3ViR3JvdXBDb25maWdJdGVtTGlzdHxDb25maWdJdGVtU2VhcmNofENvbmZpZ0l0ZW1UcmFuc2xhdGFibGVTdHJpbmdzCiAgICAgICAgICAgIHxDb25maWdJdGVtVmFsaWRhdGV8Q29uZmlnSXRlbUNoZWNrQWxsKVwofXNteAogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAjIFNraXAgSVRTTSBmdW5jdGlvbnMsIHdoaWNoIGhhdmUgc2FtZSBuYW1lLgogICAgICAgICAgICBuZXh0IExJTkUgaWYgJExpbmUgPX4gbXtDb25maWdJdGVtT2JqZWN0fTsKICAgICAgICAgICAgbmV4dCBMSU5FIGlmICRMaW5lID1+IG17SVRTTX07CgogICAgICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICJMaW5lICRDb3VudGVyOiAkTGluZVxuIjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCRFcnJvck1lc3NhZ2UpIHsKICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcig8PCJFT0YiKTsKVXNlIG9mIHVuZXhpc3RpbmcgbWV0aG9kcyBpbiBLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnIGlzIG5vdCBhbGxvd2VkIChDcmVhdGVDb25maWcsIENvbmZpZ0l0ZW1VcGRhdGUsCkNvbmZpZ0l0ZW1HZXQsIENvbmZpZ0l0ZW1SZXNldCwgQ29uZmlnSXRlbVZhbGlkaXR5VXBkYXRlLENvbmZpZ0dyb3VwTGlzdCwgQ29uZmlnU3ViR3JvdXBMaXN0LApDb25maWdTdWJHcm91cENvbmZpZ0l0ZW1MaXN0LCBDb25maWdJdGVtU2VhcmNoLCBDb25maWdJdGVtVHJhbnNsYXRhYmxlU3RyaW5ncywgQ29uZmlnSXRlbVZhbGlkYXRlCmFuZCBDb25maWdJdGVtQ2hlY2tBbGwpLgoKICAgIFBsZWFzZSBzZWUgaHR0cDovL2RvYy5vdG9iby5jb20vZG9jL21hbnVhbC9kZXZlbG9wZXIvNi4wL2VuL2h0bWwvcGFja2FnZS1wb3J0aW5nLmh0bWwjcGFja2FnZS1wb3J0aW5nLTUtdG8tNiBmb3IgcG9ydGluZyBndWlkZWxpbmVzLgokRXJyb3JNZXNzYWdlCkVPRgogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Migrations/OTOBO10/TimeObject.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86Ok1pZ3JhdGlvbnM6Ok9UT0JPMTA6OlRpbWVPYmplY3Q7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB2NS4yNDsKdXNlIG5hbWVzcGFjZTo6YXV0b2NsZWFuOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6QmFzZSk7CgojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpNaWdyYXRpb25zOjpPVE9CTzEwOjpUaW1lT2JqZWN0KQoKc3ViIHZhbGlkYXRlX3NvdXJjZSB7CiAgICBteSAoICRTZWxmLCAkQ29kZSApID0gQF87CgogICAgcmV0dXJuIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBDb2RlID0+ICRDb2RlICk7CgogICAgIyBhY3RpdmUgb25seSBmb3IgT1RPQk8gMTAKICAgIHJldHVybiB1bmxlc3MgJFNlbGYtPklzRnJhbWV3b3JrVmVyc2lvbkxlc3NUaGFuKCAxMSwgMCApOwoKICAgIG15ICggJENvdW50ZXIsICRFcnJvck1lc3NhZ2UgKTsKCiAgICBMSU5FOgogICAgZm9yIG15ICRMaW5lICggc3BsaXQgL1xuLywgJENvZGUgKSB7CiAgICAgICAgJENvdW50ZXIrKzsKCiAgICAgICAgbmV4dCBMSU5FIGlmICRMaW5lID1+IG0vXlxzKlwjL3NteDsKCiAgICAgICAgaWYgKCAkTGluZSA9fiBte0tlcm5lbDo6U3lzdGVtOjpUaW1lW15hLXpBLVpdfXNtICkgewogICAgICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICJMaW5lICRDb3VudGVyOiAkTGluZVxuIjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCRFcnJvck1lc3NhZ2UpIHsKICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcig8PCJFT0YiKTsKVXNlIG9mIGRlcHJlY2F0ZWQgS2VybmVsOjpTeXN0ZW06OlRpbWUgaXMgbm90IGFsbG93ZWQgYW55bW9yZSBleGNlcHQgZm9yIGxlZ2FjeSBBUEkgaW50ZXJmYWNlcy4gUGxlYXNlIHVzZSBLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUgaW5zdGVhZC4KICAgIFBsZWFzZSBzZWUgaHR0cHM6Ly9kb2Mub3RvYm8ub3JnL21hbnVhbC9kZXZlbG9wZXIvc3RhYmxlL2VuL2NvbnRlbnQvaG93LWl0LXdvcmtzL2RhdGUtdGltZS5odG1sLgokRXJyb3JNZXNzYWdlCkVPRgogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Migrations/OTOBO10/TimeZoneOffset.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86Ok1pZ3JhdGlvbnM6Ok9UT0JPMTA6OlRpbWVab25lT2Zmc2V0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6QmFzZSk7CgpzdWIgdmFsaWRhdGVfc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICAjIGFjdGl2ZSBvbmx5IGZvciBPVE9CTyAxMAogICAgcmV0dXJuIHVubGVzcyAkU2VsZi0+SXNGcmFtZXdvcmtWZXJzaW9uTGVzc1RoYW4oIDExLCAwICk7CgogICAgbXkgKCAkQ291bnRlciwgJEVycm9yTWVzc2FnZSApOwoKICAgIGZvciBteSAkTGluZSAoIHNwbGl0IC9cbi8sICRDb2RlICkgewogICAgICAgICRDb3VudGVyKys7CgogICAgICAgICMgTG9vayBmb3IgY29kZSB0aGF0IG1pZ2h0IGNvbnRhaW4gb2xkIHRpbWUgem9uZSBvZmZzZXQgY2FsY3VsYXRpb25zCiAgICAgICAgaWYgKAogICAgICAgICAgICAkTGluZSA9fiBteyh0aW1lem9uZXx0aW1lIHpvbmUpfXNtaQogICAgICAgICAgICAmJiAkTGluZSA9fiBtezM2MDB9c21pCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRFcnJvck1lc3NhZ2UgLj0gIkxpbmUgJENvdW50ZXI6ICRMaW5lXG4iOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoJEVycm9yTWVzc2FnZSkgewogICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKDw8IkVPRiIpOwpDb2RlIG1pZ2h0IGNvbnRhaW4gZGVwcmVjYXRlZCB0aW1lIHpvbmUgb2Zmc2V0IGNhbGN1bGF0aW9ucy4gT25seSB1c2UgbWV0aG9kcyBwcm92aWRlZCBieSBLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUgdG8gY2hhbmdlIHRpbWUgem9uZXMgYW5kIGNhbGN1bGF0ZSBkYXRlL3RpbWUuCiRFcnJvck1lc3NhZ2UKRU9GCiAgICB9CgogICAgcmV0dXJuOwp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Migrations/OTOBO10/XMLFrontendNavigation.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86Ok1pZ3JhdGlvbnM6Ok9UT0JPMTA6OlhNTEZyb250ZW5kTmF2aWdhdGlvbjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkJhc2UpOwoKc3ViIHZhbGlkYXRlX3NvdXJjZSB7CiAgICBteSAoICRTZWxmLCAkQ29kZSApID0gQF87CgogICAgcmV0dXJuIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBDb2RlID0+ICRDb2RlICk7CgogICAgIyBhY3RpdmUgb25seSBmb3IgT1RPQk8gMTAKICAgIHJldHVybiB1bmxlc3MgJFNlbGYtPklzRnJhbWV3b3JrVmVyc2lvbkxlc3NUaGFuKCAxMSwgMCApOwoKICAgIG15ICggJENvdW50ZXIsICRFcnJvck1lc3NhZ2UgKTsKCiAgICBteSAoICRDdXJyZW50U2V0dGluZ05hbWUsICRJblZhbHVlLCAkVmFsdWVDb250ZW50ICk7CgogICAgTElORToKICAgIGZvciBteSAkTGluZSAoIHNwbGl0IC9cbi8sICRDb2RlICkgewogICAgICAgICRDb3VudGVyKys7CgogICAgICAgIGlmICggJExpbmUgPX4gbXs8U2V0dGluZ1xzK05hbWU9IiguKj8pIn1zbXggKSB7CiAgICAgICAgICAgICRDdXJyZW50U2V0dGluZ05hbWUgPSAkMTsKICAgICAgICAgICAgJEluVmFsdWUgICAgICAgICAgICA9IDA7CiAgICAgICAgICAgICRWYWx1ZUNvbnRlbnQgICAgICAgPSAnJzsKICAgICAgICB9CgogICAgICAgICRJblZhbHVlID0gMSAgICAgICAgICAgICAgICAgIGlmICRMaW5lID1+IG17PFZhbHVlPn07CiAgICAgICAgJFZhbHVlQ29udGVudCAuPSAiXG4iIC4gJExpbmUgaWYgJEluVmFsdWU7CiAgICAgICAgJEluVmFsdWUgPSAwICAgICAgICAgICAgICAgICAgaWYgJExpbmUgPX4gbXs8L1ZhbHVlPn07CgogICAgICAgIG5leHQgTElORSBpZiAhJFZhbHVlQ29udGVudCB8fCAkSW5WYWx1ZTsKCiAgICAgICAgbXkgQFJ1bGVzID0gKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgICAgPT4gJ1ZhbGlkIHRvcGxldmVsIGVudHJpZXMnLAogICAgICAgICAgICAgICAgTWF0Y2hTZXR0aW5nTmFtZSAgICAgICAgID0+IHFye14oQ3VzdG9tZXJ8UHVibGljKT9Gcm9udGVuZDo6TmF2aWdhdGlvbiMjIy4qfSwKICAgICAgICAgICAgICAgIFJlcXVpcmVWYWx1ZUNvbnRlbnRNYXRjaCA9PiBxcns8QXJyYXk+Lio8RGVmYXVsdEl0ZW1bXj5dK1ZhbHVlVHlwZT0iRnJvbnRlbmROYXZpZ2F0aW9uIn1zbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBSVUxFOgogICAgICAgIGZvciBteSAkUnVsZSAoQFJ1bGVzKSB7CiAgICAgICAgICAgIG5leHQgUlVMRSBpZiAkQ3VycmVudFNldHRpbmdOYW1lICF+ICRSdWxlLT57TWF0Y2hTZXR0aW5nTmFtZX07CgogICAgICAgICAgICBpZiAoICRWYWx1ZUNvbnRlbnQgIX4gJFJ1bGUtPntSZXF1aXJlVmFsdWVDb250ZW50TWF0Y2h9ICkgewogICAgICAgICAgICAgICAgJEVycm9yTWVzc2FnZQogICAgICAgICAgICAgICAgICAgIC49ICJJbmNvcnJlY3QgbWFpbiBtZW51IHJlZ2lzdHJhdGlvbiBmb3VuZCBpbiBzZXR0aW5nICRDdXJyZW50U2V0dGluZ05hbWU6JFZhbHVlQ29udGVudFxuIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBpZiAoJEVycm9yTWVzc2FnZSkgewogICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKDw8IkVPRiIpOwpQcm9ibGVtcyB3ZXJlIGZvdW5kIGluIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIFhNTCBjb25maWd1cmF0aW9uOgokRXJyb3JNZXNzYWdlCkVPRgogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB2NS4yNDsKdXNlIHV0Zjg7Cgp1c2UgTW9vOwoKZXh0ZW5kcyBxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpCYXNlKTsKCnVzZSBQb2Q6OlN0cmlwKCk7CgojIFByb2Nlc3MgUGVybCBjb2RlIGFuZCByZXBsYWNlIGFsbCBQb2Qgc2VjdGlvbnMgd2l0aCBjb21tZW50cy4Kc3ViIFN0cmlwUG9kIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFBvZFN0cmlwID0gUG9kOjpTdHJpcC0+bmV3KCk7CiAgICAkUG9kU3RyaXAtPnJlcGxhY2Vfd2l0aF9jb21tZW50cygxKTsKICAgIG15ICRDb2RlOwogICAgJFBvZFN0cmlwLT5vdXRwdXRfc3RyaW5nKCBcJENvZGUgKTsKICAgICRQb2RTdHJpcC0+cGFyc2Vfc3RyaW5nX2RvY3VtZW50KCAkUGFyYW17Q29kZX0gKTsKICAgIHJldHVybiAkQ29kZTsKfQoKc3ViIFN0cmlwQ29tbWVudHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkQ29kZSA9ICRQYXJhbXtDb2RlfTsKICAgICRDb2RlID1+IHMvXiBccyogXCMgLio/ICQvXG4vc214ZzsKICAgIHJldHVybiAkQ29kZTsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/BinScripts.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OkJpblNjcmlwdHM7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgRmlsZTo6QmFzZW5hbWU7Cgp1c2UgTW9vOwoKZXh0ZW5kcyBxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsKTsKCiMgV2Ugb25seSB3YW50IHRvIGFsbG93IGEgaGFuZGZ1bCBvZiBzY3JpcHRzIGluIGJpbi4gQWxsIHRoZSByZXN0IHNob3VsZCBiZQojICAgbWlncmF0ZWQgdG8gY29uc29sZSBjb21tYW5kcy4KCnN1YiB2YWxpZGF0ZV9maWxlIHsKICAgIG15ICggJFNlbGYsICRGaWxlbmFtZSApID0gQF87CgogICAgcmV0dXJuIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBGaWxlbmFtZSA9PiAkRmlsZW5hbWUgKTsKCiAgICBteSAlQWxsb3dlZEZpbGVzID0gKAogICAgICAgICdvdG9iby5DaGVja01vZHVsZXMucGwnICAgPT4gMSwKICAgICAgICAnb3RvYm8uQ2hlY2tTdW0ucGwnICAgICAgID0+IDEsCiAgICAgICAgJ290b2JvLkNvZGVQb2xpY3kucGwnICAgICA9PiAxLAogICAgICAgICdvdG9iby5Db25zb2xlLnBsJyAgICAgICAgPT4gMSwKICAgICAgICAnb3RvYm8uRGFlbW9uLnBsJyAgICAgICAgID0+IDEsCiAgICAgICAgJ290b2JvLlNldFBlcm1pc3Npb25zLnBsJyA9PiAxLAogICAgKTsKCiAgICBpZiAoICEkQWxsb3dlZEZpbGVzeyBGaWxlOjpCYXNlbmFtZTo6YmFzZW5hbWUoJEZpbGVuYW1lKSB9ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKDw8IkVPRiIpOwpQbGVhc2UgbWlncmF0ZSBhbGwgYmluLyBzY3JpcHRzIHRvIEtlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpDb21tYW5kIG9iamVjdHMuCkVPRgogICAgfQp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/CacheNew.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OkNhY2hlTmV3OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybCk7CgojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpDYWNoZU5ldykKIyMgbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6T2JqZWN0RGVwZW5kZW5jaWVzKQoKc3ViIHZhbGlkYXRlX3NvdXJjZSB7CiAgICBteSAoICRTZWxmLCAkQ29kZSApID0gQF87CgogICAgcmV0dXJuIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBDb2RlID0+ICRDb2RlICk7CgogICAgJENvZGUgPSAkU2VsZi0+U3RyaXBQb2QoIENvZGUgPT4gJENvZGUgKTsKCiAgICBteSAoICRFcnJvck1lc3NhZ2UsICRDb3VudGVyICk7CgogICAgTElORToKICAgIGZvciBteSAkTGluZSAoIHNwbGl0IC9cbi8sICRDb2RlICkgewogICAgICAgICRDb3VudGVyKys7CgogICAgICAgIGlmICggJExpbmUgPX4gbS9LZXJuZWw6OlN5c3RlbTo6Q2FjaGUtPm5ldy9zbXggKSB7CiAgICAgICAgICAgICRFcnJvck1lc3NhZ2UgLj0gIkxpbmUgJENvdW50ZXI6ICRMaW5lXG4iOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoJEVycm9yTWVzc2FnZSkgewogICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKDw8IkVPRiIpOwpEb24ndCBjcmVhdGUgeW91ciBvd24gaW5zdGFuY2Ugb2YgS2VybmVsOjpTeXN0ZW06OkNhY2hlLnBtLCBidXQgdXNlICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpIGluc3RlYWQuCiRFcnJvck1lc3NhZ2UKRU9GCiAgICB9CgogICAgcmV0dXJuOwp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/Critic/Policy/OTOBO/ProhibitGoto.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFBlcmw6OkNyaXRpYzo6UG9saWN5OjpPVE9CTzo6UHJvaGliaXRHb3RvOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIFBlcmw6OkNyaXRpYzo6VXRpbHMgcXd7fTsKdXNlIHBhcmVudCAnUGVybDo6Q3JpdGljOjpQb2xpY3knOwoKb3VyICRWRVJTSU9OID0gJzAuMDEnOwoKbXkgJERlc2NyaXB0aW9uID0gcXtEb24ndCB1c2UgImdvdG8iIGluIFBlcmwgY29kZS59OwpteSAkRXhwbGFuYXRpb24gPSBxe307CgpzdWIgc3VwcG9ydGVkX3BhcmFtZXRlcnMgeyByZXR1cm47IH0Kc3ViIGRlZmF1bHRfc2V2ZXJpdHkgICAgIHsgcmV0dXJuICRQZXJsOjpDcml0aWM6OlV0aWxzOjpTRVZFUklUWV9ISUdIRVNUOyB9CnN1YiBkZWZhdWx0X3RoZW1lcyAgICAgICB7IHJldHVybiBxdyggb3RvYm8gKSB9CnN1YiBhcHBsaWVzX3RvICAgICAgICAgICB7IHJldHVybiAnUFBJOjpUb2tlbjo6V29yZCcgfQoKc3ViIHZpb2xhdGVzIHsKICAgIG15ICggJFNlbGYsICRFbGVtZW50ICkgPSBAXzsKCiAgICByZXR1cm4gaWYgJEVsZW1lbnQgbmUgJ2dvdG8nOwogICAgcmV0dXJuICRTZWxmLT52aW9sYXRpb24oICREZXNjcmlwdGlvbiwgJEV4cGxhbmF0aW9uLCAkRWxlbWVudCApOwp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/Critic/Policy/OTOBO/ProhibitLowPrecedenceOps.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFBlcmw6OkNyaXRpYzo6UG9saWN5OjpPVE9CTzo6UHJvaGliaXRMb3dQcmVjZWRlbmNlT3BzOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdjUuMjQ7CnVzZSB1dGY4OwoKdXNlIHBhcmVudCAnUGVybDo6Q3JpdGljOjpQb2xpY3knOwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBQZXJsOjpDcml0aWM6OlV0aWxzIHF3e307CgojIE9UT0JPIG1vZHVsZXMKCm91ciAkVkVSU0lPTiA9ICcwLjAxJzsKCm15ICREZXNjcmlwdGlvbiA9IHF7VXNpbmcgbG93IHByZWNlZGVuY2Ugb3BlcmF0b3JzIGlzIG5vdCBhbGxvd2VkfTsKbXkgJEV4cGxhbmF0aW9uID0KICAgIHF7UmVwbGFjZSBsb3cgcHJlY2VkZW5jZSBvcGVyYXRvcnMgd2l0aCB0aGUgaGlnaCBwcmVjZWRlbmNlIHN1YnN0aXR1dGVzfTsKCm15ICVMb3dQcmVjZWRlbmNlT3BzID0gKAogICAgbm90ID0+ICchJywKICAgIGFuZCA9PiAnJiYnLAogICAgb3IgID0+ICd8fCcsCik7CgpzdWIgc3VwcG9ydGVkX3BhcmFtZXRlcnMgeyByZXR1cm47IH0Kc3ViIGRlZmF1bHRfc2V2ZXJpdHkgICAgIHsgcmV0dXJuICRQZXJsOjpDcml0aWM6OlV0aWxzOjpTRVZFUklUWV9ISUdIRVNUOyB9CnN1YiBkZWZhdWx0X3RoZW1lcyAgICAgICB7IHJldHVybiBxdyggb3RvYm8gKSB9CnN1YiBhcHBsaWVzX3RvICAgICAgICAgICB7IHJldHVybiAnUFBJOjpUb2tlbjo6T3BlcmF0b3InIH0KCnN1YiB2aW9sYXRlcyB7CiAgICBteSAoICRTZWxmLCAkT3AgKSA9IEBfOwoKICAgICMgSXMgdGhlIGVuY291bnRlcmVkIG9wIGEgbG93IHByZWNlZGVuY2Ugb3AgPwogICAgcmV0dXJuIHVubGVzcyBleGlzdHMgJExvd1ByZWNlZGVuY2VPcHN7JE9wfTsKICAgIHJldHVybiAkU2VsZi0+dmlvbGF0aW9uKCAkRGVzY3JpcHRpb24sICRFeHBsYW5hdGlvbiwgJE9wICk7Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/Critic/Policy/OTOBO/ProhibitOpen.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFBlcmw6OkNyaXRpYzo6UG9saWN5OjpPVE9CTzo6UHJvaGliaXRPcGVuOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIFBlcmw6OkNyaXRpYzo6VXRpbHMgcXd7aXNfZnVuY3Rpb25fY2FsbH07CnVzZSBwYXJlbnQgJ1Blcmw6OkNyaXRpYzo6UG9saWN5JzsKCm91ciAkVkVSU0lPTiA9ICcwLjAxJzsKCm15ICREZXNjcmlwdGlvbiA9IHF7VXNlIG9mICJvcGVuIiBpcyBub3QgYWxsb3dlZCB0byByZWFkIG9yIHdyaXRlIGZpbGVzLn07Cm15ICRFeHBsYW5hdGlvbiA9IHF7VXNlIE1haW5PYmplY3Q6OkZpbGVSZWFkKCkgb3IgRmlsZVdyaXRlKCkgaW5zdGVhZC59OwoKc3ViIHN1cHBvcnRlZF9wYXJhbWV0ZXJzIHsgcmV0dXJuOyB9CnN1YiBkZWZhdWx0X3NldmVyaXR5ICAgICB7IHJldHVybiAkUGVybDo6Q3JpdGljOjpVdGlsczo6U0VWRVJJVFlfSElHSEVTVDsgfQpzdWIgZGVmYXVsdF90aGVtZXMgICAgICAgeyByZXR1cm4gcXcoIG90b2JvICkgfQpzdWIgYXBwbGllc190byAgICAgICAgICAgeyByZXR1cm4gJ1BQSTo6VG9rZW46OldvcmQnIH0KCnN1YiB2aW9sYXRlcyB7CiAgICBteSAoICRTZWxmLCAkRWxlbWVudCApID0gQF87CgogICAgIyBPbmx5IG9wZXJhdGUgb24gY2FsbHMgb2Ygb3BlbigpCiAgICByZXR1cm4gaWYgJEVsZW1lbnQgbmUgJ29wZW4nOwogICAgcmV0dXJuIGlmICFpc19mdW5jdGlvbl9jYWxsKCRFbGVtZW50KTsKCiAgICByZXR1cm4gJFNlbGYtPnZpb2xhdGlvbiggJERlc2NyaXB0aW9uLCAkRXhwbGFuYXRpb24sICRFbGVtZW50ICk7Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/Critic/Policy/OTOBO/ProhibitRandInTests.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFBlcmw6OkNyaXRpYzo6UG9saWN5OjpPVE9CTzo6UHJvaGliaXRSYW5kSW5UZXN0czsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCiMgU1lOT1BTSVM6IENoZWNrIGlmIG1vZHVsZXMgaGF2ZSBhICJ0cnVlIiByZXR1cm4gdmFsdWUKCnVzZSBQZXJsOjpDcml0aWM6OlV0aWxzIHF3e307CnVzZSBwYXJlbnQgJ1Blcmw6OkNyaXRpYzo6UG9saWN5JzsKdXNlIHBhcmVudCAnUGVybDo6Q3JpdGljOjpQb2xpY3lPVE9CTyc7CgpvdXIgJFZFUlNJT04gPSAnMC4wMic7CgpteSAkRGVzY3JpcHRpb24gPSBxe1VzZSBvZiAicmFuZCgpIiBvciAic3JhbmQoKSIgaXMgbm90IGFsbG93ZWQgaW4gdGVzdHMufTsKbXkgJEV4cGxhbmF0aW9uID0gcXtVc2UgS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXI6OkdldFJhbmRvbU51bWJlcigpIG9yIEdldFJhbmRvbUlEKCkgaW5zdGVhZC59OwoKc3ViIHN1cHBvcnRlZF9wYXJhbWV0ZXJzIHsgcmV0dXJuOyB9CnN1YiBkZWZhdWx0X3NldmVyaXR5ICAgICB7IHJldHVybiAkUGVybDo6Q3JpdGljOjpVdGlsczo6U0VWRVJJVFlfSElHSEVTVDsgfQpzdWIgZGVmYXVsdF90aGVtZXMgICAgICAgeyByZXR1cm4gcXcoIG90b2JvICkgfQpzdWIgYXBwbGllc190byAgICAgICAgICAgeyByZXR1cm4gJ1BQSTo6VG9rZW46OldvcmQnIH0KCiMgT25seSBhcHBseSB0byB0ZXN0ICgudCkgZmlsZXMuCnN1YiBwcmVwYXJlX3RvX3NjYW5fZG9jdW1lbnQgewogICAgbXkgKCAkU2VsZiwgJERvY3VtZW50ICkgPSBAXzsKCiAgICByZXR1cm4gJERvY3VtZW50LT5sb2dpY2FsX2ZpbGVuYW1lKCkgPX4gbXsgXC50IFx6IH14bXM7Cn0KCnN1YiB2aW9sYXRlcyB7CiAgICBteSAoICRTZWxmLCAkRWxlbWVudCApID0gQF87CgogICAgaWYgKCAkRWxlbWVudCBlcSAncmFuZCcgfHwgJEVsZW1lbnQgZXEgJ3NyYW5kJyApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPnZpb2xhdGlvbiggJERlc2NyaXB0aW9uLCAkRXhwbGFuYXRpb24sICRFbGVtZW50ICk7CiAgICB9CgogICAgcmV0dXJuOwp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/Critic/Policy/OTOBO/ProhibitSmartMatchOperator.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFBlcmw6OkNyaXRpYzo6UG9saWN5OjpPVE9CTzo6UHJvaGliaXRTbWFydE1hdGNoT3BlcmF0b3I7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgUGVybDo6Q3JpdGljOjpVdGlscyBxd3t9Owp1c2UgcGFyZW50ICdQZXJsOjpDcml0aWM6OlBvbGljeSc7CgpvdXIgJFZFUlNJT04gPSAnMC4wMSc7CgpteSAkRGVzY3JpcHRpb24gPSBxe1VzZSBvZiBzbWFydCBtYXRjaCBvcGVyYXRvciB+fiBpcyBub3QgYWxsb3dlZH07Cm15ICRFeHBsYW5hdGlvbiA9CiAgICBxe1RoaXMgb3BlcmF0b3IgYmVoYXZlcyBkaWZmZXJlbnRseSBpbiBQZXJsIDUuMTAuMCBhbmQgNS4xMC4xLn07CgpzdWIgc3VwcG9ydGVkX3BhcmFtZXRlcnMgeyByZXR1cm47IH0Kc3ViIGRlZmF1bHRfc2V2ZXJpdHkgICAgIHsgcmV0dXJuICRQZXJsOjpDcml0aWM6OlV0aWxzOjpTRVZFUklUWV9ISUdIRVNUOyB9CnN1YiBkZWZhdWx0X3RoZW1lcyAgICAgICB7IHJldHVybiBxdyggb3RvYm8gKSB9CnN1YiBhcHBsaWVzX3RvICAgICAgICAgICB7IHJldHVybiAnUFBJOjpUb2tlbjo6T3BlcmF0b3InIH0KCnN1YiB2aW9sYXRlcyB7CiAgICBteSAoICRTZWxmLCAkRWxlbWVudCApID0gQF87CgogICAgcmV0dXJuIGlmICRFbGVtZW50IG5lICd+fic7CiAgICByZXR1cm4gJFNlbGYtPnZpb2xhdGlvbiggJERlc2NyaXB0aW9uLCAkRXhwbGFuYXRpb24sICRFbGVtZW50ICk7Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/Critic/Policy/OTOBO/RequireCamelCase.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFBlcmw6OkNyaXRpYzo6UG9saWN5OjpPVE9CTzo6UmVxdWlyZUNhbWVsQ2FzZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBQZXJsOjpDcml0aWM6OlV0aWxzIHF3e307CnVzZSBwYXJlbnQgJ1Blcmw6OkNyaXRpYzo6UG9saWN5JzsKdXNlIHBhcmVudCAnUGVybDo6Q3JpdGljOjpQb2xpY3lPVE9CTyc7CgpvdXIgJFZFUlNJT04gPSAnMC4wMSc7CgpteSAkRGVzY3JpcHRpb24gPSBxe1ZhcmlhYmxlLCBzdWJyb3V0aW5lLCBhbmQgcGFja2FnZSBuYW1lcyBoYXZlIHRvIGJlIGluIENhbWVsQ2FzZX07Cm15ICRFeHBsYW5hdGlvbiA9IHF7fTsKCnN1YiBzdXBwb3J0ZWRfcGFyYW1ldGVycyB7IHJldHVybjsgfQpzdWIgZGVmYXVsdF9zZXZlcml0eSAgICAgeyByZXR1cm4gJFBlcmw6OkNyaXRpYzo6VXRpbHM6OlNFVkVSSVRZX0hJR0hFU1Q7IH0Kc3ViIGRlZmF1bHRfdGhlbWVzICAgICAgIHsgcmV0dXJuIHF3KCBvdG9ibyApIH0KCm15ICVEaXNwYXRjaGVyID0gKAogICAgJ1BQSTo6U3RhdGVtZW50OjpTdWInICAgICA9PiBcJklzQ2FtZWxDYXNlLAogICAgJ1BQSTo6U3RhdGVtZW50OjpQYWNrYWdlJyA9PiBcJklzQ2FtZWxDYXNlLAogICAgJ1BQSTo6VG9rZW46OlN5bWJvbCcgICAgICA9PiBcJlZhcmlhYmxlSXNDYW1lbENhc2UsCik7CgpzdWIgYXBwbGllc190byB7CiAgICByZXR1cm4ga2V5cyAlRGlzcGF0Y2hlcjsKfQoKc3ViIHByZXBhcmVfdG9fc2Nhbl9kb2N1bWVudCB7CiAgICBteSAoICRTZWxmLCAkRG9jdW1lbnQgKSA9IEBfOwoKICAgICMgQ2xlYW51cCwgb25lIGluc3RhbmNlIGNhbiBzY2FuIG11bHRpcGxlIGZpbGVzLgogICAgZGVsZXRlICRTZWxmLT57X0lzRGVyaXZlZE1vZHVsZX07CgogICAgaWYgKCAkRG9jdW1lbnQtPmxvZ2ljYWxfZmlsZW5hbWUoKSAhfiBteyAoXC5wbSkgXHogfXhtcyApIHsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAjIEZpbmQgYWxsIHVzZSBwYXJlbnQvYmFzZSBzdGF0ZW1lbnRzCiAgICBteSAkRmluZFBlcmxJbmhlcml0YW5jZSA9IHN1YiB7CiAgICAgICAgcmV0dXJuICREb2N1bWVudC0+ZmluZF9hbnkoCiAgICAgICAgICAgIHN1YiB7CiAgICAgICAgICAgICAgICByZXR1cm4gJF9bMV0tPmlzYSgnUFBJOjpTdGF0ZW1lbnQ6OkluY2x1ZGUnKSAmJiAkX1sxXSA9fiBte1xBIHVzZSBccysgKHBhcmVudHxiYXNlKSBccyt9c214OwogICAgICAgICAgICB9CiAgICAgICAgKTsKICAgIH07CgogICAgIyBGaW5kIGFueSBNb29zZSBvciBNb29zZTo6Um9sZSBvYmplY3RzIHRoYXQgZXh0ZW5kIGFub3RoZXIgY2xhc3Mgb3Igcm9sZSAoZXh0ZW5kcy93aXRoKS4KICAgIG15ICRGaW5kTW9vc2VJbmhlcml0YW5jZSA9IHN1YiB7CiAgICAgICAgbXkgJE1vb3NlRm91bmQgPSAkRG9jdW1lbnQtPmZpbmRfYW55KAogICAgICAgICAgICBzdWIgeyByZXR1cm4gJF9bMV0tPmlzYSgnUFBJOjpTdGF0ZW1lbnQ6OkluY2x1ZGUnKSAmJiAkX1sxXSA9fiBte1xBIHVzZSBccysgTW9vc2UoOjpSb2xlKT99c214IH0KICAgICAgICApOwoKICAgICAgICByZXR1cm4gMCB1bmxlc3MgJE1vb3NlRm91bmQ7CgogICAgICAgIHJldHVybiAkRG9jdW1lbnQtPmZpbmRfYW55KAogICAgICAgICAgICBzdWIgeyByZXR1cm4gJF9bMV0tPmlzYSgnUFBJOjpUb2tlbjo6V29yZCcpICYmICRfWzFdID1+IG17XEEgZXh0ZW5kc3x3aXRoIFxafXNteCB9CiAgICAgICAgKTsKICAgIH07CgogICAgIyBGaW5kIGFueSBNb29zZSBvciBNb29zZTo6Um9sZSBvYmplY3RzIHRoYXQgZXh0ZW5kIGFub3RoZXIgY2xhc3Mgb3Igcm9sZSAoZXh0ZW5kcy93aXRoKS4KICAgIG15ICRGaW5kTW9vSW5oZXJpdGFuY2UgPSBzdWIgewogICAgICAgIG15ICRNb29Gb3VuZCA9ICREb2N1bWVudC0+ZmluZF9hbnkoCiAgICAgICAgICAgIHN1YiB7IHJldHVybiAkX1sxXS0+aXNhKCdQUEk6OlN0YXRlbWVudDo6SW5jbHVkZScpICYmICRfWzFdID1+IG17XEEgdXNlIFxzKyBNb28oOjpSb2xlKT99c214IH0KICAgICAgICApOwoKICAgICAgICByZXR1cm4gMCB1bmxlc3MgJE1vb0ZvdW5kOwoKICAgICAgICByZXR1cm4gJERvY3VtZW50LT5maW5kX2FueSgKICAgICAgICAgICAgc3ViIHsgcmV0dXJuICRfWzFdLT5pc2EoJ1BQSTo6VG9rZW46OldvcmQnKSAmJiAkX1sxXSA9fiBte1xBIGV4dGVuZHN8d2l0aCBcWn1zbXggfQogICAgICAgICk7CiAgICB9OwoKICAgICMgRmluZCBhbnkgTW9qbzo6QmFzZSBpbmhlcml0YW5jZS4KICAgIG15ICRGaW5kTW9qb0luaGVyaXRhbmNlID0gc3ViIHsKICAgICAgICByZXR1cm4gJERvY3VtZW50LT5maW5kX2FueSgKICAgICAgICAgICAgc3ViIHsgcmV0dXJuICRfWzFdLT5pc2EoJ1BQSTo6U3RhdGVtZW50OjpJbmNsdWRlJykgJiYgJF9bMV0gPX4gbXtcQSB1c2UgXHMrIE1vam86OkJhc2V9c214IH0KICAgICAgICApOwogICAgfTsKCiAgICAjIEZpbmQgYWxsIEs6OlM6Ok1haW4tPlJlcXVpcmVCYXNlQ2xhc3MoKSBzdGF0ZW1lbnRzLgogICAgbXkgJEZpbmRSZXF1aXJlQmFzZUNsYXNzID0gc3ViIHsKICAgICAgICByZXR1cm4gJERvY3VtZW50LT5maW5kX2FueSgKICAgICAgICAgICAgc3ViIHsKICAgICAgICAgICAgICAgIHJldHVybiAkX1sxXS0+aXNhKCdQUEk6OlRva2VuOjpXb3JkJykgJiYgJF9bMV0gZXEgJ1JlcXVpcmVCYXNlQ2xhc3MnOwogICAgICAgICAgICB9CiAgICAgICAgKTsKICAgIH07CgogICAgaWYgKAogICAgICAgICRGaW5kUGVybEluaGVyaXRhbmNlLT4oKQogICAgICAgIHx8ICRGaW5kTW9vc2VJbmhlcml0YW5jZS0+KCkKICAgICAgICB8fCAkRmluZE1vb0luaGVyaXRhbmNlLT4oKQogICAgICAgIHx8ICRGaW5kTW9qb0luaGVyaXRhbmNlLT4oKQogICAgICAgIHx8ICRGaW5kUmVxdWlyZUJhc2VDbGFzcy0+KCkKICAgICAgICApCiAgICB7CiAgICAgICAgJFNlbGYtPntfSXNEZXJpdmVkTW9kdWxlfSA9IDE7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCnN1YiB2aW9sYXRlcyB7CiAgICBteSAoICRTZWxmLCAkRWxlbWVudCApID0gQF87CgogICAgJFNlbGYtPntFcnJvcnN9ID0gKCk7CgogICAgbXkgJEZ1bmN0aW9uID0gJERpc3BhdGNoZXJ7IHJlZiAkRWxlbWVudCB9OwogICAgcmV0dXJuIGlmICEkRnVuY3Rpb247CiAgICByZXR1cm4gaWYgJFNlbGYtPiRGdW5jdGlvbigkRWxlbWVudCk7CgogICAgcmV0dXJuICRTZWxmLT52aW9sYXRpb24oICIkRGVzY3JpcHRpb246ICIgLiBqb2luKCAiLCAiLCBAeyAkU2VsZi0+e0Vycm9yc30gfSApLCAkRXhwbGFuYXRpb24sICRFbGVtZW50ICk7Cn0KCnN1YiBJc0NhbWVsQ2FzZSB7CiAgICBteSAoICRTZWxmLCAkRWxlbWVudCApID0gQF87CgogICAgbXkgJE5hbWUgPSAkRWxlbWVudC0+ZmluZCgnUFBJOjpUb2tlbjo6V29yZCcpLT5bMV07CgogICAgcmV0dXJuIDEgaWYgISROYW1lOwoKICAgIG15ICVBbGxvd2VkRnVuY3Rpb25zID0gKAogICAgICAgIG5ldyA9PiAxLAogICAgKTsKCiAgICBpZiAoICRFbGVtZW50LT5pc2EoJ1BQSTo6U3RhdGVtZW50OjpTdWInKSApIHsKICAgICAgICByZXR1cm4gMSBpZiAkQWxsb3dlZEZ1bmN0aW9uc3skTmFtZX07CiAgICAgICAgcmV0dXJuIDEgaWYgJFNlbGYtPntfSXNEZXJpdmVkTW9kdWxlfTsKICAgIH0KICAgIGVsc2lmICggJEVsZW1lbnQtPmlzYSgnUFBJOjpTdGF0ZW1lbnQ6OlBhY2thZ2UnKSApIHsKICAgICAgICBpZiAoCiAgICAgICAgICAgICROYW1lID1+IG17IEtlcm5lbDo6TGFuZ3VhZ2UgOjogW2Etel17MiwzfV8gfXhtcwogICAgICAgICAgICB8fCAkTmFtZSBlcSAnbWFpbicKICAgICAgICAgICAgfHwgJE5hbWUgPX4gbXsgXnNjcmlwdHM6OiB9eG1zCiAgICAgICAgICAgIHx8ICROYW1lID1+IG17IF52YXI6OnBhY2thZ2VzZXR1cDo6IH14bXMKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQogICAgfQoKICAgIG15ICRJc0NhbWVsQ2FzZSA9ICEoICROYW1lICF+IG17IFxBIF8qIFtBLVpdW2Etel0qIH14bXMgfHwgJE5hbWUgPX4gbXsgW15fXV8gfXhtcyApOwoKICAgIGlmICggISRJc0NhbWVsQ2FzZSApIHsKICAgICAgICBwdXNoIEB7ICRTZWxmLT57RXJyb3JzfSB9LCAkTmFtZTsKICAgIH0KCiAgICByZXR1cm4gJElzQ2FtZWxDYXNlOwp9CgpzdWIgVmFyaWFibGVJc0NhbWVsQ2FzZSB7CiAgICBteSAoICRTZWxmLCAkRWxlbWVudCApID0gQF87CgogICAgbXkgJE5hbWUgPSAiJEVsZW1lbnQiOwogICAgcmV0dXJuIDEgaWYgISROYW1lOwoKICAgICMgQWxsb3cgdmFyaWFibGVzIGZyb20gb3RoZXIgcGFja2FnZXMuCiAgICByZXR1cm4gMSBpZiBpbmRleCggJE5hbWUsICc6OicgKSA+IC0xOwoKICAgICMgQWxsb3cgUGVybCBidWlsdGlucy4KICAgIHJldHVybiAxIGlmICROYW1lIGVxICckYSc7CiAgICByZXR1cm4gMSBpZiAkTmFtZSBlcSAnJGInOwoKICAgICMgSWdub3JlIGZ1bmN0aW9uIGNhbGxzCiAgICByZXR1cm4gMSBpZiBzdWJzdHIoICROYW1lLCAwLCAxICkgZXEgJyYnOwoKICAgICMgQWxsb3cgc2hvcnQgdmFyaWFibGUgbmFtZXMgd2l0aCBsb3dlcmNhc2UgY2hhcmFjdGVycyBsaWtlICRzLgogICAgcmV0dXJuIDEgaWYgbGVuZ3RoICROYW1lID09IDI7CgogICAgbXkgJElzQ2FtZWxDYXNlID0gISggJE5hbWUgIX4gbXsgXEEgW1wqXEBcJFwlXV8qW0EtWl1bYS16XSogfXhtcyB8fCAkTmFtZSA9fiBteyBbXl9dXyB9eG1zICk7CgogICAgaWYgKCAhJElzQ2FtZWxDYXNlICkgewogICAgICAgIHB1c2ggQHsgJFNlbGYtPntFcnJvcnN9IH0sICROYW1lOwogICAgfQoKICAgIHJldHVybiAkSXNDYW1lbENhc2U7Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/Critic/Policy/OTOBO/RequireLabels.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFBlcmw6OkNyaXRpYzo6UG9saWN5OjpPVE9CTzo6UmVxdWlyZUxhYmVsczsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBQZXJsOjpDcml0aWM6OlV0aWxzIHF3e307CnVzZSBwYXJlbnQgJ1Blcmw6OkNyaXRpYzo6UG9saWN5JzsKdXNlIHBhcmVudCAnUGVybDo6Q3JpdGljOjpQb2xpY3lPVE9CTyc7CgpteSAkRGVzY3JpcHRpb24gPSBxe1BsZWFzZSBhbHdheXMgdXNlICduZXh0JyBhbmQgJ2xhc3QnIHdpdGggYSBsYWJlbC59OwpteSAkRXhwbGFuYXRpb24gPSBxe307CgpzdWIgc3VwcG9ydGVkX3BhcmFtZXRlcnMgeyByZXR1cm47IH0Kc3ViIGRlZmF1bHRfc2V2ZXJpdHkgICAgIHsgcmV0dXJuICRQZXJsOjpDcml0aWM6OlV0aWxzOjpTRVZFUklUWV9ISUdIRVNUOyB9CnN1YiBkZWZhdWx0X3RoZW1lcyAgICAgICB7IHJldHVybiBxdyggb3RvYm8gKSB9CnN1YiBhcHBsaWVzX3RvICAgICAgICAgICB7IHJldHVybiAnUFBJOjpTdGF0ZW1lbnQ6OkJyZWFrJyB9CgpzdWIgcHJlcGFyZV90b19zY2FuX2RvY3VtZW50IHsKICAgIG15ICggJFNlbGYsICREb2N1bWVudCApID0gQF87CgogICAgcmV0dXJuIDE7Cn0KCnN1YiB2aW9sYXRlcyB7CiAgICBteSAoICRTZWxmLCAkRWxlbWVudCApID0gQF87CgogICAgbXkgQENoaWxkcmVuID0gJEVsZW1lbnQtPmNoaWxkcmVuKCk7CiAgICBpZiAoICRDaGlsZHJlblswXS0+Y29udGVudCgpIG5lICduZXh0JyAmJiAkQ2hpbGRyZW5bMF0tPmNvbnRlbnQoKSBuZSAnbGFzdCcgKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICRMYWJlbCA9ICRDaGlsZHJlblswXS0+c25leHRfc2libGluZygpOwoKICAgIGlmICgKICAgICAgICAhJExhYmVsCiAgICAgICAgfHwgISRMYWJlbC0+aXNhKCdQUEk6OlRva2VuOjpXb3JkJykKICAgICAgICB8fCAkTGFiZWwtPmNvbnRlbnQoKSAhfiBte15bQS1aX10rfXhtcwogICAgICAgICkKICAgIHsKICAgICAgICByZXR1cm4gJFNlbGYtPnZpb2xhdGlvbiggJERlc2NyaXB0aW9uLCAkRXhwbGFuYXRpb24sICRFbGVtZW50ICk7CiAgICB9CgogICAgcmV0dXJuOwp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/Critic/PolicyOTOBO.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFBlcmw6OkNyaXRpYzo6UG9saWN5T1RPQk87CgojCiMgQmFzZSBjbGFzcyBmb3IgY3VzdG9tZSBQZXJsOjpDcml0aWMgcG9saWNpZXMuCiMKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHY1LjI0Owp1c2UgdXRmODsKCiMgQmFzZSBjbGFzcyBmb3IgT1RPQk8gcGVybCBjcml0aWMgcG9saWNpZXMKCnN1YiBJc0ZyYW1ld29ya1ZlcnNpb25MZXNzVGhhbiB7CiAgICBteSAoICRTZWxmLCAkRnJhbWV3b3JrVmVyc2lvbk1ham9yLCAkRnJhbWV3b3JrVmVyc2lvbk1pbm9yICkgPSBAXzsKCiAgICBpZiAoJFRpZHlBbGw6Ok9UT0JPOjpGcmFtZXdvcmtWZXJzaW9uTWFqb3IpIHsKICAgICAgICByZXR1cm4gMSBpZiAkVGlkeUFsbDo6T1RPQk86OkZyYW1ld29ya1ZlcnNpb25NYWpvciA8ICRGcmFtZXdvcmtWZXJzaW9uTWFqb3I7CiAgICAgICAgcmV0dXJuIDAgaWYgJFRpZHlBbGw6Ok9UT0JPOjpGcmFtZXdvcmtWZXJzaW9uTWFqb3IgPiAkRnJhbWV3b3JrVmVyc2lvbk1ham9yOwogICAgICAgIHJldHVybiAxIGlmICRUaWR5QWxsOjpPVE9CTzo6RnJhbWV3b3JrVmVyc2lvbk1pbm9yIDwgJEZyYW1ld29ya1ZlcnNpb25NaW5vcjsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICAjIERlZmF1bHQ6IGlmIGZyYW1ld29yayBpcyB1bmtub3duLCByZXR1cm4gZmFsc2UgKHN0cmljdCBjaGVja3MpLgogICAgcmV0dXJuIDA7Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/DBObject.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OkRCT2JqZWN0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEZpbGU6OkJhc2VuYW1lOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybCk7CgpzdWIgdmFsaWRhdGVfc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gJENvZGUgaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICAkQ29kZSA9ICRTZWxmLT5TdHJpcFBvZCggQ29kZSA9PiAkQ29kZSApOwogICAgJENvZGUgPSAkU2VsZi0+U3RyaXBDb21tZW50cyggQ29kZSA9PiAkQ29kZSApOwoKICAgIG15ICggJEVycm9yTWVzc2FnZSwgJENvdW50ZXIgKTsKCiAgICBMSU5FOgogICAgZm9yIG15ICRMaW5lICggc3BsaXQgL1xuLywgJENvZGUgKSB7CiAgICAgICAgJENvdW50ZXIrKzsKICAgICAgICBuZXh0IExJTkUgaWYgJExpbmUgIX4gbXtce0RCT2JqZWN0XH19c214OwogICAgICAgIG5leHQgTElORSBpZiAkTGluZSA9fiBte0RCT2JqZWN0IFxzKyAgICA9PiBccyBcJFNlbGYtPlx7REJPYmplY3RcfSB9c214OwoKICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICJMaW5lICRDb3VudGVyOiAkTGluZVxuIjsKICAgIH0KCiAgICBpZiAoJEVycm9yTWVzc2FnZSkgewogICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKDw8IkVPRiIpOwpEb24ndCB1c2UgdGhlIERCT2JqZWN0IGluIGZyb250ZW5kIG1vZHVsZXMuCiRFcnJvck1lc3NhZ2UKRU9GCiAgICB9CgogICAgcmV0dXJuOwp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/DieExit.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OkRpZUV4aXQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgRmlsZTo6QmFzZW5hbWU7Cgp1c2UgTW9vOwoKZXh0ZW5kcyBxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsKTsKCnN1YiB2YWxpZGF0ZV9zb3VyY2UgewogICAgbXkgKCAkU2VsZiwgJENvZGUgKSA9IEBfOwoKICAgIHJldHVybiBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZCggQ29kZSA9PiAkQ29kZSApOwogICAgbXkgKCAkRXJyb3JNZXNzYWdlLCAkQ291bnRlciApOwoKICAgIExJTkU6CiAgICBmb3IgbXkgJExpbmUgKCBzcGxpdCAvXG4vLCAkQ29kZSApIHsKICAgICAgICAkQ291bnRlcisrOwoKICAgICAgICBuZXh0IExJTkUgaWYgJExpbmUgPX4gbS9eXHMqXCMvc214OwoKICAgICAgICBpZiAoICRMaW5lID1+IG17XiBccyogKGRpZXxleGl0KSAoO3xcc3xcKCkgfXNteCApIHsKICAgICAgICAgICAgJEVycm9yTWVzc2FnZSAuPSAiTGluZSAkQ291bnRlcjogJExpbmVcbiI7CiAgICAgICAgfQogICAgfQoKICAgIGlmICgkRXJyb3JNZXNzYWdlKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoPDwiRU9GIik7CkRvbid0IHVzZSAnZGllJyBhbmQgJ2V4aXQnIGluIG1vZHVsZXMuCiRFcnJvck1lc3NhZ2UKRU9GCiAgICB9CgogICAgcmV0dXJuOwp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/ForMy.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OkZvck15OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEZpbGU6OkJhc2VuYW1lOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybCk7CgpzdWIgdmFsaWRhdGVfc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gJENvZGUgaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICBteSAoICRDb3VudGVyLCAkRXJyb3JNZXNzYWdlICk7CgogICAgZm9yIG15ICRMaW5lICggc3BsaXQgL1xuLywgJENvZGUgKSB7CiAgICAgICAgJENvdW50ZXIrKzsKCiAgICAgICAgaWYgKCAkTGluZSA9fiBte14gXHMqIGZvciAoZWFjaCk/IFxzKyBcJC4rIFxzKyBcKCAgfXhtcyApIHsKICAgICAgICAgICAgJEVycm9yTWVzc2FnZSAuPSAiTGluZSAkQ291bnRlcjogJExpbmVcbiI7CiAgICAgICAgfQogICAgfQoKICAgIGlmICgkRXJyb3JNZXNzYWdlKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoPDwiRU9GIik7ClBsZWFzZSB1c2UgbXkgdG8gZGVjbGFyZSB0aGUga2V5IHZhcmlhYmxlIGluCiRFcnJvck1lc3NhZ2UKRU9GCiAgICB9CgogICAgcmV0dXJuOwp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/ForeachToFor.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OkZvcmVhY2hUb0ZvcjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBGaWxlOjpCYXNlbmFtZTsKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmwpOwoKc3ViIHRyYW5zZm9ybV9zb3VyY2UgewogICAgbXkgKCAkU2VsZiwgJENvZGUgKSA9IEBfOwoKICAgIHJldHVybiAkQ29kZSBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZCggQ29kZSA9PiAkQ29kZSApOwoKICAgICMgVGhlIGZvbGxvd2luZyB0ZXN0IG1hdGNoZXMgb25seSBmb3IgYSBmb3JlYWNoIHdpdGhvdXQgYSAiIyIgaW4gdGhlCiAgICAjIGJlZ2lubmluZyBvZiBhIGxpbmUuIFRoZSBmb3JlYWNoIGhhcyB0byBiZSB0aGUgZmlyc3QgZXhwcmVzc2lvbiBpbiBhCiAgICAjIGxpbmUsIHNwYWNlcyBkbyBub3QgbWF0dGVyLiBUaGUgZm9yZWFjaCBpcyByZXBsYWNlZCB3aXRoIGZvci4KICAgICMgQ29tbWVudHMgYW5kIG90aGVyIGxpbmVzIHdpdGggb3RoZXIgY2hhcnMgYmVmb3JlIHRoZSBmb3JlYWNoIGFyZQogICAgIyBpZ25vcmVkLgoKICAgICRDb2RlID1+IHN7XiAoW14jXSBcc3swLDIwMH0pIGZvcmVhY2ggKC4qPykgfXskMWZvciQyfXhtc2c7CgogICAgcmV0dXJuICRDb2RlOwp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/LayoutObject.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OkxheW91dE9iamVjdDsKIyMgbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6TGF5b3V0T2JqZWN0KQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEZpbGU6OkJhc2VuYW1lOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybCk7CgpzdWIgdmFsaWRhdGVfc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gJENvZGUgaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICAjIGRpc2FibGVkIGZvciBPVE9CTyAxMC4wCiAgICByZXR1cm4gaWYgISRTZWxmLT5Jc0ZyYW1ld29ya1ZlcnNpb25MZXNzVGhhbiggMTAsIDAgKTsKCiAgICAkQ29kZSA9ICRTZWxmLT5TdHJpcFBvZCggQ29kZSA9PiAkQ29kZSApOwogICAgJENvZGUgPSAkU2VsZi0+U3RyaXBDb21tZW50cyggQ29kZSA9PiAkQ29kZSApOwoKICAgIG15ICRGb3JiaWRkZW4gPSBxcntcJExheW91dE9iamVjdHxLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0fXhtczsKCiAgICBpZiAoICRDb2RlID1+ICRGb3JiaWRkZW4gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoPDwiRU9GIik7CkRvbid0IHVzZSB0aGUgTGF5b3V0T2JqZWN0IGluIGJpbi8gb3IgaW4gS2VybmVsL1N5c3RlbS4KRU9GCiAgICB9CgogICAgcmV0dXJuOwp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/ModuleFormat.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6Ok1vZHVsZUZvcm1hdDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBGaWxlOjpCYXNlbmFtZTsKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmwpOwoKc3ViIHZhbGlkYXRlX3NvdXJjZSB7CiAgICBteSAoICRTZWxmLCAkQ29kZSApID0gQF87CgogICAgcmV0dXJuICRDb2RlIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBDb2RlID0+ICRDb2RlICk7CgogICAgIyBDaGVjayBmb3IgYWJzZW5zZSBvZiBzaGViYW5nIGxpbmUKICAgIGlmICggJENvZGUgPX4gbXtcQVwjIX14bXMgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoPDwiRU9GIik7ClBlcmwgbW9kdWxlcyBzaG91bGQgbm90IGhhdmUgYSBzaGViYW5nIGxpbmUgKCMhL3Vzci9iaW4vcGVybCkuCkVPRgogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/NoExitInConsoleCommands.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6Ok5vRXhpdEluQ29uc29sZUNvbW1hbmRzOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEZpbGU6OkJhc2VuYW1lOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybCk7CgpzdWIgdmFsaWRhdGVfc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICBteSAoICRFcnJvck1lc3NhZ2UsICRDb3VudGVyICk7CgogICAgTElORToKICAgIGZvciBteSAkTGluZSAoIHNwbGl0IC9cbi8sICRDb2RlICkgewogICAgICAgICRDb3VudGVyKys7CgogICAgICAgIG5leHQgTElORSBpZiAkTGluZSA9fiBtL15ccypcIy9zbXg7CgogICAgICAgIGlmICggJExpbmUgPX4gbXsgKF58XHMrKSBleGl0ICg7fFxzfFwoKSB9c214ICkgewogICAgICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICJMaW5lICRDb3VudGVyOiAkTGluZVxuIjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCRFcnJvck1lc3NhZ2UpIHsKICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcig8PCJFT0YiKTsKRG9uJ3QgdXNlICdleGl0JyBpbiBjb25zb2xlIGNvbW1hbmRzLCB1c2UgJ3JldHVybiBcJFNlbGYtPkV4aXRDb2RlT2soKTsnIG9yICdyZXR1cm4gXCRTZWxmLT5FeGl0Q29kZUVycm9yKCk7JyBpbnN0ZWFkLgokRXJyb3JNZXNzYWdlCkVPRgogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/ObjectDependencies.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6Ok9iamVjdERlcGVuZGVuY2llczsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHY1LjI0Owp1c2UgdXRmODsKCiMKIyBUaGlzIHBsdWdpbiBzY2FucyBwZXJsIHBhY2thZ2VzIGFuZCBjb21wYXJlcyB0aGUgb2JqZWN0cyB0aGV5IHJlcXVlc3QKIyBmcm9tIHRoZSBPYmplY3RNYW5hZ2VyIHdpdGggdGhlIGRlcGVuZGVuY2llcyB0aGV5IGRlY2xhcmUgYW5kIGNvbXBsYWlucwojIGFib3V0IGFueSBtaXNzaW5nIGRlcGVuZGVuY2llcy4KIyBEZXBlbmRlbmNpZXMgYXJlIGRlY2xhcmVkIHdpdGggQE9iamVjdERlcGVuZGVuY2llcyBhbmQgQFNvZnRPYmplY3REZXBlbmRlbmNpZXMuCiMKCiMgY29yZSBtb2R1bGVzCnVzZSBMaXN0OjpVdGlsIHF3KHVuaXEpOwoKIyBDUEFOIG1vZHVsZXMKdXNlIE1vbzsKCiMgT1RPQk8gbW9kdWxlcwoKZXh0ZW5kcyBxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsKTsKCnN1YiB2YWxpZGF0ZV9zb3VyY2UgewogICAgbXkgKCAkU2VsZiwgJENvZGUgKSA9IEBfOwoKICAgIHJldHVybiBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZCggQ29kZSA9PiAkQ29kZSApOwoKICAgICRDb2RlID0gJFNlbGYtPlN0cmlwUG9kKCBDb2RlID0+ICRDb2RlICk7CiAgICAkQ29kZSA9ICRTZWxmLT5TdHJpcENvbW1lbnRzKCBDb2RlID0+ICRDb2RlICk7CgogICAgIyBTa2lwIGlmIHRoZSBjb2RlIGRvZXNuJ3QgdXNlIHRoZSBPYmplY3RNYW5hZ2VyCiAgICByZXR1cm4gdW5sZXNzICRDb2RlID1+IG17XCRLZXJuZWw6Ok9NfXNteDsKCiAgICAjIFNraXAgaWYgd2UgaGF2ZSBhIHJvbGUsIGFzIGl0IGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQuCiAgICByZXR1cm4gaWYgJENvZGUgPX4gbXt1c2VccytNb29zZTo6Um9sZX1zbXg7CgogICAgIyBTa2lwIGlmIHRoZSBwYWNrYWdlIGNhbm5vdCBiZSBsb2FkZWQgdmlhIE9iamVjdE1hbmFnZXIKICAgIHJldHVybiBpZiAkQ29kZSA9fiBtewogICAgICAgIF4gXHMqIG91ciBccyogXCRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgXHMqID0gXHMqIDEKICAgIH1zbXg7CgogICAgbXkgJEVycm9yTWVzc2FnZSA9ICcnOwoKICAgIGlmICggJENvZGUgPX4gbXteIFxzKiBvdXIgXHMqIFwkT2JqZWN0TWFuYWdlckF3YXJlfXNteCApIHsKICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICJEb24ndCB1c2UgdGhlIGRlcHJlY2F0ZWQgZmxhZyBcJE9iamVjdE1hbmFnZXJBd2FyZS4gSXQgY2FuIGJlIHJlbW92ZWQuXG4iOwogICAgfQoKICAgICMgT2ssIGZpcnN0IGNoZWNrIGZvciB0aGUgb2JqZWN0cyB0aGF0IGFyZSByZXF1ZXN0ZWQgZnJvbSBPTS4KICAgIG15IEBVc2VkT2JqZWN0czsKCiAgICAjIE9ubHkgbWF0Y2ggd2hhdCBpcyBhYnNvbHV0ZWx5IG5lZWRlZCB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZXMuCiAgICBteSAkVmFsaWRMaXN0RXhwcmVzc2lvbiA9ICJbXEBhLXpBLVowLTlfWzpzcGFjZTpdOidcIiwoKV0rPyI7CgogICAgIyBSZWFsIEdldCgpIGNhbGxzLgogICAgJENvZGUgPX4gc3sKICAgICAgICBcJEtlcm5lbDo6T00tPkdldFwoIFxzKiAoW15cJF0kVmFsaWRMaXN0RXhwcmVzc2lvbikgXHMqIFwpCiAgICB9ewogICAgICAgIHB1c2ggQFVzZWRPYmplY3RzLCAkU2VsZi0+X0NsZWFudXBPYmplY3RMaXN0KAogICAgICAgICAgICBDb2RlID0+ICQxLAogICAgICAgICk7CiAgICAgICAgJyc7CiAgICB9ZXNteGc7CgogICAgIyBGb3IgbG9vcHMgd2l0aCBHZXQoKS4KICAgICRDb2RlID1+IHN7CiAgICAgICAgZm9yIFxzKyAoPzogbXkgXHMrIFwkW2EtekEtejAtOV9dKyBccyspPyBcKCgkVmFsaWRMaXN0RXhwcmVzc2lvbilcKVxzKlx7XG4KICAgICAgICAgICAgXHMrIFwkU2VsZi0+XHtcJC4qP1x9IFxzKiAoPzovL3xcfFx8KT89IFxzKiBcJEtlcm5lbDo6T00tPkdldFwoXHMqXCRbYS16QS1aMC05X10rP1xzKlwpOyBccysKICAgICAgICBcfQogICAgfXsKICAgICAgICBwdXNoIEBVc2VkT2JqZWN0cywgJFNlbGYtPl9DbGVhbnVwT2JqZWN0TGlzdCgKICAgICAgICAgICAgQ29kZSA9PiAkMSwKICAgICAgICApOwogICAgICAgICcnOwogICAgfWVzbXhnOwoKICAgICMgTm93IGNoZWNrIHRoZSBkZWNsYXJlZCBkZXBlbmRlbmNpZXMgYW5kIGNvbXBhcmUuCiAgICAjIERlcGVuZGVuY2llcyBjYW4gYmUgZGVjbGFyZWQgaW4gdGhlIGFycmF5IE9iamVjdERlcGVuZGVuY2llcyBhbmQgU29mdE9iamVjdERlcGVuZGVuY2llcy4KICAgICMgVGhlIHN1YnN0aXR1dGlvbiBpcyBkb25lIGZvciB0aGUgc2lkZSBlZmZlY3RzLgogICAgbXkgJU9iamVjdElzRGVjbGFyZWQ7CiAgICBteSAkT2JqZWN0RGVjbGFyYXRpb25XaXRoUXVvdGVkV29yZHM7CiAgICB7CiAgICAgICAgbXkgQERlY2xhcmVkT2JqZWN0RGVwZW5kZW5jaWVzOwogICAgICAgIGZvciBteSAkQXJyYXkgKHF3KE9iamVjdERlcGVuZGVuY2llcyBTb2Z0T2JqZWN0RGVwZW5kZW5jaWVzKSkgewogICAgICAgICAgICAkQ29kZSA9fiBzewogICAgICAgICAgICAgICAgXm91clxzK1xAXFEkQXJyYXlcRVxzKz1ccysocXcpP1woKCRWYWxpZExpc3RFeHByZXNzaW9uKVwpOwogICAgICAgICAgICB9ewogICAgICAgICAgICAgICAgcHVzaCBARGVjbGFyZWRPYmplY3REZXBlbmRlbmNpZXMsICRTZWxmLT5fQ2xlYW51cE9iamVjdExpc3QoCiAgICAgICAgICAgICAgICAgICAgQ29kZSA9PiAkMiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkT2JqZWN0RGVjbGFyYXRpb25XaXRoUXVvdGVkV29yZHMgPSAkMSA/IDEgOiAwOwogICAgICAgICAgICAgICAgJyc7CiAgICAgICAgICAgIH1lc214OwogICAgICAgIH0KCiAgICAgICAgJU9iamVjdElzRGVjbGFyZWQgPSBtYXAgeyAkXyA9PiAxIH0gQERlY2xhcmVkT2JqZWN0RGVwZW5kZW5jaWVzOwogICAgfQoKICAgICMgcmVwb3J0IHVuZGVjbGFyZWQgb2JqZWN0IGRlcGVuZGVuY2llcwogICAgbXkgQFVuZGVjbGFyZWRPYmplY3REZXBlbmRlbmNpZXMgPSBzb3J0IGdyZXAgeyAhJE9iamVjdElzRGVjbGFyZWR7JF99IH0gdW5pcSBAVXNlZE9iamVjdHM7CiAgICBpZiAoQFVuZGVjbGFyZWRPYmplY3REZXBlbmRlbmNpZXMpIHsKCiAgICAgICAgIyBUaGUgZm9ybWF0aW5nIG9mIHRoZSBtZXNzaW5nIGRlcGVuZHMgb24gd2hldGhlciBxdygpIHdhcyB1c2VkCiAgICAgICAgbXkgJFNlcGFyYXRvciA9ICRPYmplY3REZWNsYXJhdGlvbldpdGhRdW90ZWRXb3JkcyA/IHFxe1xufSA6IHFxeyxcbn07CiAgICAgICAgbXkgJERlbGltaXRlciA9ICRPYmplY3REZWNsYXJhdGlvbldpdGhRdW90ZWRXb3JkcyA/IHF7fSAgICA6IHF7J307CiAgICAgICAgbXkgJExpc3QgICAgICA9IGpvaW4gJFNlcGFyYXRvciwKICAgICAgICAgICAgbWFwICB7IiAgICAkRGVsaW1pdGVyJF8kRGVsaW1pdGVyIn0KICAgICAgICAgICAgc29ydCB7ICRhIGNtcCAkYiB9CiAgICAgICAgICAgIEBVbmRlY2xhcmVkT2JqZWN0RGVwZW5kZW5jaWVzOwogICAgICAgICRFcnJvck1lc3NhZ2UgLj0KICAgICAgICAgICAgIlRoZSBmb2xsb3dpbmcgb2JqZWN0cyBhcmUgdXNlZCBpbiB0aGUgY29kZSwgYnV0IG5vdCBkZWNsYXJlZCBhcyBkZXBlbmRlbmNpZXM6XG4iCiAgICAgICAgICAgIC4gJExpc3QKICAgICAgICAgICAgLiAkU2VwYXJhdG9yCiAgICAgICAgICAgIC4gJ1BsZWFzZSBhZGQgdGhlIG1pc3NpbmcgZGVwZW5kZW5jaWVzIHRvIHRoZSBhcnJheSBAT2JqZWN0RGVwZW5kZW5jaWVzLic7CiAgICB9CgogICAgaWYgKCRFcnJvck1lc3NhZ2UpIHsKICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcig8PCJFT0YiKTsKJEVycm9yTWVzc2FnZQpFT0YKICAgIH0KCiAgICByZXR1cm47Cn0KCiMgU21hbGwgaGVscGVyIGZ1bmN0aW9uIHRvIGNsZWFudXAgb2JqZWN0IGxpc3RzIGluIFBlcmwgY29kZSBmb3IgT00uCnN1YiBfQ2xlYW51cE9iamVjdExpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSBAUmVzdWx0OwoKICAgIE9CSkVDVDoKICAgIGZvciBteSAkT2JqZWN0ICggc3BsaXQoIG17XHMrfSwgJFBhcmFte0NvZGV9ICkgKSB7CiAgICAgICAgJE9iamVjdCA9fiBzL3F3XCgvLzsgICAgICAgICMgcmVtb3ZlIHF3KCkgbWFya2VyIHN0YXJ0CiAgICAgICAgJE9iamVjdCA9fiBzL15bKCInXSsvLzsgICAgICMgcmVtb3ZlIGxlYWRpbmcgcXVvdGVzIGFuZCBwYXJlbnRoZXNlcwogICAgICAgICRPYmplY3QgPX4gcy9bKSInLF0rJC8vOyAgICAjIHJlbW92ZSB0cmFpbGluZyBjb21tYSwgcXVvdGVzIGFuZCBwYXJlbnRoZXNlcwoKICAgICAgICBuZXh0IE9CSkVDVCB1bmxlc3MgJE9iamVjdDsKCiAgICAgICAgcHVzaCBAUmVzdWx0LCAkT2JqZWN0OwogICAgfQoKICAgIHJldHVybiBAUmVzdWx0Owp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/ObjectManagerCreation.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6Ok9iamVjdE1hbmFnZXJDcmVhdGlvbjsKIyMgbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6T2JqZWN0TWFuYWdlckNyZWF0aW9uKQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEZpbGU6OkJhc2VuYW1lOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybCk7CgpzdWIgdmFsaWRhdGVfc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICAkQ29kZSA9ICRTZWxmLT5TdHJpcFBvZCggQ29kZSA9PiAkQ29kZSApOwoKICAgIG15ICggJEVycm9yTWVzc2FnZSwgJENvdW50ZXIgKTsKCiAgICBMSU5FOgogICAgZm9yIG15ICRMaW5lICggc3BsaXQgL1xuLywgJENvZGUgKSB7CiAgICAgICAgJENvdW50ZXIrKzsKCiAgICAgICAgbmV4dCBMSU5FIGlmICRMaW5lID1+IG0vXlxzKlwjL3NteDsKCiAgICAgICAgaWYgKCAkTGluZSA9fiBteyBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3IH1zbXggKSB7CiAgICAgICAgICAgICRFcnJvck1lc3NhZ2UgLj0gIkxpbmUgJENvdW50ZXI6ICRMaW5lXG4iOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoJEVycm9yTWVzc2FnZSkgewogICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKDw8IkVPRiIpOwpEb24ndCBjcmVhdGUgbmV3IGluc3RhbmNlcyBvZiB0aGUgT2JqZWN0TWFuYWdlciBpbiBQZXJsIG1vZHVsZXMuIFRoaXMgc2hvdWxkIG9ubHkgYmUgZG9uZSBpbiB0b3BsZXZlbCBzY3JpcHRzLgokRXJyb3JNZXNzYWdlCkVPRgogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/ObjectNameSpace.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6Ok9iamVjdE5hbWVTcGFjZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCiMKIyBUaGlzIHBsdWdpbiBzY2FucyBwZXJsIHBhY2thZ2VzIGFuZCBjb21wYXJlcyB0aGUgb2JqZWN0cyB0aGV5IHJlcXVlc3QKIyAgIGZyb20gdGhlIE9iamVjdE1hbmFnZXIgd2l0aCB0aGUgZGVwZW5kZW5jaWVzIHRoZXkgZGVjbGFyZSBhbmQgY29tcGxhaW5zCiMgICBhYm91dCBhbnkgbWlzc2luZyBkZXBlbmRlbmNpZXMuCiMKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmwpOwoKc3ViIHZhbGlkYXRlX3NvdXJjZSB7CiAgICBteSAoICRTZWxmLCAkQ29kZSApID0gQF87CgogICAgcmV0dXJuIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBDb2RlID0+ICRDb2RlICk7CgogICAgJENvZGUgPSAkU2VsZi0+U3RyaXBQb2QoIENvZGUgPT4gJENvZGUgKTsKICAgICRDb2RlID0gJFNlbGYtPlN0cmlwQ29tbWVudHMoIENvZGUgPT4gJENvZGUgKTsKCiAgICAjIFNraXAgaWYgdGhlIGNvZGUgZG9lc24ndCB1c2UgdGhlIE9iamVjdE1hbmFnZXIKICAgIHJldHVybiBpZiAkQ29kZSAhfiBte1wkS2VybmVsOjpPTX1zbXg7CgogICAgIwogICAgIyBPSywgZmlyc3QgY2hlY2sgZm9yIHRoZSBvYmplY3RzIHRoYXQgYXJlIHJlcXVlc3RlZCBmcm9tIE9NLgogICAgIwogICAgbXkgQFVzZWRPYmplY3RzOwoKICAgICMgT25seSBtYXRoIHdoYXQgaXMgYWJzb2x1dGVseSBuZWVkZWQgdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmVzLgogICAgbXkgJFZhbGlkTGlzdEV4cHJlc3Npb24gPSAiW1xAYS16QS1aMC05X1s6c3BhY2U6XTonXCIsKCldKz8iOwoKICAgICMgUmVhbCBHZXQoKSBjYWxscy4KICAgICRDb2RlID1+IHN7CiAgICAgICAgXCRLZXJuZWw6Ok9NLT5HZXRcKCBccyogKFteXCRdJFZhbGlkTGlzdEV4cHJlc3Npb24pIFxzKiBcKQogICAgfXsKICAgICAgICBwdXNoIEBVc2VkT2JqZWN0cywgJFNlbGYtPl9DbGVhbnVwT2JqZWN0TGlzdCgKICAgICAgICAgICAgQ29kZSA9PiAkMSwKICAgICAgICApOwogICAgICAgICcnOwogICAgfWVzbXhnOwoKICAgICMgRm9yIGxvb3BzIHdpdGggR2V0KCkuCiAgICAkQ29kZSA9fiBzewogICAgICAgIGZvciBccysgKD86IG15IFxzKyBcJFthLXpBLXowLTlfXSsgXHMrKT8gXCgoJFZhbGlkTGlzdEV4cHJlc3Npb24pXClccypce1xuCiAgICAgICAgICAgIFxzKyBcJFNlbGYtPlx7XCQuKj9cfSBccyogKD86Ly98XHxcfCk/PSBccyogXCRLZXJuZWw6Ok9NLT5HZXRcKFxzKlwkW2EtekEtWjAtOV9dKz9ccypcKTsgXHMrCiAgICAgICAgXH0KICAgIH17CiAgICAgICAgcHVzaCBAVXNlZE9iamVjdHMsICRTZWxmLT5fQ2xlYW51cE9iamVjdExpc3QoCiAgICAgICAgICAgIENvZGUgPT4gJDEsCiAgICAgICAgKTsKICAgICAgICAnJzsKICAgIH1lc214ZzsKCiAgICBteSBAV3JvbmdOYW1lU3BhY2VzOwogICAgbXkgJVNlZW47CiAgICBVU0VEX09CSkVDVDoKICAgIGZvciBteSAkVXNlZE9iamVjdCAoQFVzZWRPYmplY3RzKSB7CgogICAgICAgIG5leHQgVVNFRF9PQkpFQ1QgaWYgJFNlZW57JFVzZWRPYmplY3R9OwoKICAgICAgICBpZiAoICRVc2VkT2JqZWN0ICF+IG17XEEoPzpbXjpdKyg6OikqKStbXjpdXHp9bXN4ICkgewogICAgICAgICAgICBwdXNoIEBXcm9uZ05hbWVTcGFjZXMsICRVc2VkT2JqZWN0OwogICAgICAgICAgICAkU2VlbnskVXNlZE9iamVjdH0gPSAxOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkRXJyb3JNZXNzYWdlOwogICAgaWYgKEBXcm9uZ05hbWVTcGFjZXMpIHsKICAgICAgICAkRXJyb3JNZXNzYWdlCiAgICAgICAgICAgIC49ICJUaGUgbmFtZSBzcGFjZSBmb3IgZm9sbG93aW5nIG9iamVjdHMgaXMgd3Jvbmc6XG4iOwogICAgICAgICRFcnJvck1lc3NhZ2UKICAgICAgICAgICAgLj0gam9pbiggIixcbiIsIG1hcCB7IiAgICAnJF8nIn0gc29ydCB7ICRhIGNtcCAkYiB9IEBXcm9uZ05hbWVTcGFjZXMgKQogICAgICAgICAgICAuICIsXG4iOwogICAgfQoKICAgIGlmICgkRXJyb3JNZXNzYWdlKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoPDwiRU9GIik7CiRFcnJvck1lc3NhZ2UKRU9GCiAgICB9CgogICAgcmV0dXJuOwp9CgojIFNtYWxsIGhlbHBlciBmdW5jdGlvbiB0byBjbGVhbnVwIG9iamVjdCBsaXN0cyBpbiBQZXJsIGNvZGUgZm9yIE9NLgpzdWIgX0NsZWFudXBPYmplY3RMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgQFJlc3VsdDsKCiAgICBPQkpFQ1Q6CiAgICBmb3IgbXkgJE9iamVjdCAoIHNwbGl0KCBte1xzK30sICRQYXJhbXtDb2RlfSApICkgewogICAgICAgICRPYmplY3QgPX4gcy9xd1woLy87ICAgICAgICAjIHJlbW92ZSBxdygpIG1hcmtlciBzdGFydAogICAgICAgICRPYmplY3QgPX4gcy9eWygiJ10rLy87ICAgICAjIHJlbW92ZSBsZWFkaW5nIHF1b3RlcyBhbmQgcGFyZW50aGVzZXMKICAgICAgICAkT2JqZWN0ID1+IHMvWykiJyxdKyQvLzsgICAgIyByZW1vdmUgdHJhaWxpbmcgY29tbWEsIHF1b3RlcyBhbmQgcGFyZW50aGVzZXMKICAgICAgICBuZXh0IE9CSkVDVCBpZiAhJE9iamVjdDsKICAgICAgICBwdXNoIEBSZXN1bHQsICRPYmplY3Q7CiAgICB9CgogICAgcmV0dXJuIEBSZXN1bHQ7Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/ParamObject.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBhcmFtT2JqZWN0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEZpbGU6OkJhc2VuYW1lOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybCk7CgpzdWIgdmFsaWRhdGVfc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gJENvZGUgaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICAkQ29kZSA9ICRTZWxmLT5TdHJpcFBvZCggQ29kZSA9PiAkQ29kZSApOwogICAgJENvZGUgPSAkU2VsZi0+U3RyaXBDb21tZW50cyggQ29kZSA9PiAkQ29kZSApOwoKICAgIGlmICggJENvZGUgPX4gbXtQYXJhbU9iamVjdH14bXMgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoPDwiRU9GIik7CkRvbid0IHVzZSB0aGUgUGFyYW1PYmplY3QgaW4gYmluLyBvciBpbiBLZXJuZWwvU3lzdGVtLgpFT0YKICAgIH0KCiAgICByZXR1cm47Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/PerlCritic.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBlcmxDcml0aWM7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB2NS4yNDsKdXNlIHV0Zjg7Cgp1c2UgTW9vOwoKZXh0ZW5kcyBxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsKTsKCiMgY29yZSBtb2R1bGVzCgojIENQQU4gbW9kdWxlcwp1c2UgUGVybDo6Q3JpdGljOwp1c2UgU3BlY2lvOjpMaWJyYXJ5OjpCdWlsdGluczsKdXNlIFNwZWNpbzo6TGlicmFyeTo6U3RyaW5nOwoKIyBPVE9CTyBtb2R1bGVzCgojIHByb2ZpbGUgaXMgYSByZXF1aXJlZCBwYXJhbWV0ZXIgdGhhdCBoYXMgdG8gYmUgc2V0IGluIHRpZHlhbGxyYwpoYXMgcHJvZmlsZSA9PiAoCiAgICBpcyAgPT4gJ3JvJywKICAgIGlzYSA9PiB0KCdTdHInKSwKKTsKCiMgVGhpcyBzdWIgd2lsbCBiZSBjYWxsZWQgYnkgQ29kZTo6VGlkeUFsbApzdWIgdmFsaWRhdGVfZmlsZSB7CiAgICBteSAoICRTZWxmLCAkRmlsZW5hbWUgKSA9IEBfOwoKICAgICMgQ2FjaGUgUGVybDo6Q3JpdGljIG9iamVjdCBpbnN0YW5jZSB0byBzYXZlIHRpbWUuIEJ1dCBjYWNoZSBpdAogICAgIyBmb3IgZXZlcnkgZnJhbWV3b3JrIHZlcnNpb24sIGJlY2F1c2UgdGhlIGNvbmZpZ3VyYXRpb24gbWF5IGRpZmZlci4KICAgIHN0YXRlICRDYWNoZWRQZXJsQ3JpdGljID0ge307CgogICAgcmV0dXJuIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBGaWxlbmFtZSA9PiAkRmlsZW5hbWUgKTsKCiAgICBteSAkRnJhbWV3b3JrVmVyc2lvbiA9ICIkVGlkeUFsbDo6T1RPQk86OkZyYW1ld29ya1ZlcnNpb25NYWpvci4kVGlkeUFsbDo6T1RPQk86OkZyYW1ld29ya1ZlcnNpb25NaW5vciI7CgogICAgaWYgKCAhJENhY2hlZFBlcmxDcml0aWMtPnskRnJhbWV3b3JrVmVyc2lvbn0gKSB7CgogICAgICAgICMgZmluZCB0aGUgcGVybGNyaXRpYyB3aXRoIHRoZSBmb2xsb3dpbmcgcHJpb3JpdGllczoKICAgICAgICAjIGkuICBzZXR0aW5nIGluIHRoZSBlbnZpcm9ubWVudCAkRU5We1BFUkxDUklUSUN9CiAgICAgICAgIyBpaS4gdGhlIGZpbGUgcGVybGNyaXRpY3JjIG5leHQgdG8gdGhpcyBtb2R1bGUKICAgICAgICBteSAkUHJvZmlsZSA9ICggJEVOVntQRVJMQ1JJVElDfSAmJiAtZiAkRU5We1BFUkxDUklUSUN9ICkKICAgICAgICAgICAgPwogICAgICAgICAgICAkRU5We1BFUkxDUklUSUN9CiAgICAgICAgICAgIDoKICAgICAgICAgICAgJFNlbGYtPnByb2ZpbGU7CgogICAgICAgICRDYWNoZWRQZXJsQ3JpdGljLT57JEZyYW1ld29ya1ZlcnNpb259ID0gUGVybDo6Q3JpdGljLT5uZXcoCiAgICAgICAgICAgIC1wcm9maWxlID0+ICRQcm9maWxlCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAkUGVybENyaXRpYyA9ICRDYWNoZWRQZXJsQ3JpdGljLT57JEZyYW1ld29ya1ZlcnNpb259OwoKICAgICMgRm9yY2Ugc3RyaW5naWZpY2F0aW9uIG9mICRGaWxlbmFtZSBhcyBpdCBpcyBhIFBhdGg6OlRpbnkgb2JqZWN0IGluIENvZGU6OlRpZHlBbGwgMC41MCsuCiAgICBteSBAVmlvbGF0aW9ucyA9ICRQZXJsQ3JpdGljLT5jcml0aXF1ZSgiJEZpbGVuYW1lIik7CgogICAgcmV0dXJuIHVubGVzcyBAVmlvbGF0aW9uczsKCiAgICAjIE5vdGUgdGhhdCB0aGUgdmlvbGF0aW9ucyBoYXZlIG92ZXJsb2FkZWQgc3RyaW5naWZpY2F0aW9uLgogICAgIyBUaGUgZm9ybWF0LCBmb3IgdGhlIHN0cmluZ2lmaWNhdGlvbiwgaGFzIHRvIGJlIHNldCB1cCBzZXBlcmF0ZWx5LgogICAgbXkgJEZvcm1hdCA9ICRQZXJsQ3JpdGljLT5jb25maWctPnZlcmJvc2UgLy8gJyVwIHZpb2xhdGVkIGF0ICVmICVsIGNvbHVtbiAlYyAoU2V2ZXJpdHk6ICVzKVxcbiAgJW1cXG4lZVxcbic7CiAgICBQZXJsOjpDcml0aWM6OlZpb2xhdGlvbjo6c2V0X2Zvcm1hdCgkRm9ybWF0KTsKCiAgICAjIEZpZGRsZSB3aXRoIHRoZSBmaWxlIG5hbWVzIGFzIHJlcG9ydGVkIGJ5IFBlcmw6OkNyaXRpYy4gV2Ugd2FudCB0aGUgYWN0dWFsIGZpbGVzLAogICAgIyBub3QgdGhlIHRlbXBvcmFyeSBjb3BpZXMuCiAgICBteSAkUmVwb3J0ID0gIkBWaW9sYXRpb25zIjsKICAgICRSZXBvcnQgPX4gcyF2aW9sYXRlZCBhdCAvdG1wL0NvZGUtVGlkeUFsbC1cdysvIXZpb2xhdGVkIGF0ICFnOwoKICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKCRSZXBvcnQpOwp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/PerlTidy.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBlcmxUaWR5OwoKdXNlIHY1LjI0Owp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybCk7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKdXNlIENhcHR1cmU6OlRpbnkgcXcoY2FwdHVyZV9tZXJnZWQpOwoKIyBSZXF1aXJlIGEgcmVjZW50IHZlcnNpb24gb2YgUGVybDo6VGlkeSBmb3IgY29uc2lzdGVudCBmb3JtYXR0aW5nIG9uIGFsbCBzeXN0ZW1zLgp1c2UgUGVybDo6VGlkeSAyMDI1MDEwNTsKCiMgT1RPQk8gbW9kdWxlcwoKIyBGb3JjZSBhIGNlcnRhaW4gdmVyc2lvbiBmb3IgdW5pZm9ybWl0eQpteSAkUGVybFRpZHlWZXJzaW9uID0gJzIwMjUwMTA1JzsKaWYgKCBQZXJsOjpUaWR5LT5WRVJTSU9OKCkgbmUgJFBlcmxUaWR5VmVyc2lvbiApIHsKICAgIGRpZSBzcHJpbnRmIDw8IkVORF9NRVNTQUdFIiwgUGVybDo6VGlkeS0+VkVSU0lPTigpOwpOZXdlciB2ZXJzaW9ucyBvZiBQZXJsOjpUaWR5IHRoYW4gJFBlcmxUaWR5VmVyc2lvbiBhcmUgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuClBsZWFzZSB1c2UgZXhhY3RseSB0aGF0IHZlcnNpb24gKHN1ZG8gY3Bhbm0gUGVybDo6VGlkeVxAJFBlcmxUaWR5VmVyc2lvbikuCllvdXIgaW5zdGFsbGVkIHZlcnNpb24gaXM6ICVzLjsKRU5EX01FU1NBR0UKfQoKc3ViIHRyYW5zZm9ybV9zb3VyY2UgewogICAgbXkgKCAkU2VsZiwgJENvZGUgKSA9IEBfOwoKICAgIHJldHVybiAkQ29kZSBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZChDb2RlID0+ICRDb2RlKTsKCiAgICAjIERvbid0IG1vZGlmeSBmaWxlcyB3aGljaCBhcmUgZGVyaXZlZCBmaWxlcyAoaGF2ZSBjaGFuZ2UgbWFya2VycykuCiAgICByZXR1cm4gJENvZGUgaWYgJENvZGUgPX4gbXsgXCRPbGRJZDogfCBeIFxzKiBcIyBccyogXCRvcmlnaW46IH14bXM7CgogICAgIyBUaGVyZSB3YXMgc29tZSBjdXN0b20gY29kZSBpbiBwbGFjZSBoZXJlIHRvIHJlcGxhY2UgJyw7JyB3aXRoICc7JywgYnV0IHRoYXQgcHJvdmVkIHRvCiAgICAjIGJlIG11Y2ggdG9vIHNsb3cgb24gbGFyZ2UgZmlsZXMgKD4gNDBzIG9uIEFnZW50VGlja2V0UHJvY2Vzcy5wbSkuCiAgICAjIFRoZXJlZm9yZSwgdGhpcyBsb2dpYyB3YXMgcmVtb3ZlZC4KCiAgICAjIFRoaXMgYml0IG9mIGluc2FuaXR5IGlzIG5lZWRlZCBiZWNhdXNlIGlmIHNvbWUgb3RoZXIgY29kZSBjYWxscwogICAgIyBHZXRvcHQ6Okxvbmc6OkNvbmZpZ3VyZSgpIHRvIGNoYW5nZSBzb21lIG9wdGlvbnMsIHRoZW4gZXZlcnl0aGluZyBjYW4gZ28KICAgICMgdG8gaGVsbC4gSW50ZXJuYWxseSBwZXJsdGlkeSgpIHRyaWVzIHRvIHVzZSBHZXRvcHQ6Okxvbmcgd2l0aG91dAogICAgIyByZXNldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZGVmYXVsdHMsIGxlYWRpbmcgdG8gdmVyeSBjb25mdXNpbmcKICAgICMgZXJyb3JzLiBTZWUgaHR0cHM6Ly9ydC5jcGFuLm9yZy9UaWNrZXQvRGlzcGxheS5odG1sP2lkPTExODU1OAogICAgR2V0b3B0OjpMb25nOjpDb25maWdEZWZhdWx0cygpOwoKICAgICMgcGVybHRpZHkgcmVwb3J0cyBlcnJvcnMgaW4gdHdvIGRpZmZlcmVudCB3YXlzLgogICAgIyBBcmd1bWVudC9wcm9maWxlIGVycm9ycyBhcmUgb3V0cHV0IGFuZCBhbiBlcnJvcl9mbGFnIGlzIHJldHVybmVkLgogICAgIyBTeW50YXggZXJyb3JzIGFyZSBzZW50IHRvIGVycm9yZmlsZS4KICAgIG15ICggJEVycm9yRmxhZywgJEVycm9yRmlsZSwgJERlc3RpbmF0aW9uICk7CiAgICBteSAkT3V0cHV0ID0gY2FwdHVyZV9tZXJnZWQgewogICAgICAgICRFcnJvckZsYWcgPSBQZXJsOjpUaWR5OjpwZXJsdGlkeSgKICAgICAgICAgICAgYXJndiAgICAgICAgPT4gJFNlbGYtPmFyZ3YoKSwKICAgICAgICAgICAgc291cmNlICAgICAgPT4gXCRDb2RlLAogICAgICAgICAgICBkZXN0aW5hdGlvbiA9PiBcJERlc3RpbmF0aW9uLAogICAgICAgICAgICBlcnJvcmZpbGUgICA9PiBcJEVycm9yRmlsZQogICAgICAgICk7CiAgICB9OwoKICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKCIkRXJyb3JGaWxlIikgaWYgJEVycm9yRmlsZTsKICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKCIkT3V0cHV0IikgICAgaWYgJEVycm9yRmxhZzsKCiAgICBpZiAoIGRlZmluZWQgJE91dHB1dCApIHsKICAgICAgICBwcmludCBTVERFUlIgJE91dHB1dDsKICAgIH0KCiAgICByZXR1cm4gJERlc3RpbmF0aW9uOwp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/Pod/FunctionPod.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBvZDo6RnVuY3Rpb25Qb2Q7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgRmlsZTo6QmFzZW5hbWU7Cgp1c2UgTW9vOwoKZXh0ZW5kcyBxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsKTsKCnN1YiB2YWxpZGF0ZV9zb3VyY2UgewogICAgbXkgKCAkU2VsZiwgJENvZGUgKSA9IEBfOwoKICAgIHJldHVybiAkQ29kZSBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZCggQ29kZSA9PiAkQ29kZSApOwoKICAgIG15ICRGdW5jdGlvbk5hbWVJblBvZCA9ICcnOwogICAgbXkgJEZ1bmN0aW9uTGluZUluUG9kID0gJyc7CiAgICBteSAkRnVuY3Rpb25DYWxsSW5Qb2QgPSAnJzsKICAgIG15ICRMaW5lTnVtYmVyICAgICAgICA9IDA7CgogICAgbXkgJEVycm9yTWVzc2FnZSA9ICcnOwoKICAgIG15ICRQYWNrYWdlSXNSb2xlOwogICAgJFBhY2thZ2VJc1JvbGUgPSAxIGlmICRDb2RlID1+IG17XnVzZSBccysgTW9vc2U6OlJvbGV9aXNteDsKCiAgICBteSBAQ29kZUxpbmVzID0gc3BsaXQgL1xuLywgJENvZGU7CgogICAgZm9yIG15ICRMaW5lIChAQ29kZUxpbmVzKSB7CiAgICAgICAgJExpbmVOdW1iZXIrKzsKCiAgICAgICAgIyBDaGVjayB0aGUgZm9ybWF0dGluZyBvZiB0aGUgYWN0dWFsIGhlYWQyIGxpbmUKICAgICAgICAjIFBPRCBmb3IgZnVuY3Rpb25zIGlzIHJlY29nbmlzZWQgYnkgdGhlIHNpbmdsZSB3b3JkIGFmdGVyIHRoZSAnPWhlYWQyJy4KICAgICAgICAjIFBPRCBmb3IgcHJpdmF0ZSBmdW5jdGlvbnMsIHdoaWNoIGhhdmUgYSBsZWFkaW5nICdfJyBpbiB0aGVpciBuYW1lLCBpcyBub3QgY2hlY2tlZC4KICAgICAgICBpZiAoICRMaW5lID1+IG17Xj1oZWFkMiBccysgKFtBLVphLXowLTldKykgKFwoXCkpPyBccyogJH1zbXggKSB7CgogICAgICAgICAgICBteSAkRnVuY3Rpb25OYW1lICA9ICQxOwogICAgICAgICAgICBteSAkSXNGdW5jdGlvblBvZCA9ICQyID8gMSA6IDA7CgogICAgICAgICAgICBpZiAoJElzRnVuY3Rpb25Qb2QpIHsKICAgICAgICAgICAgICAgICRGdW5jdGlvbk5hbWVJblBvZCA9ICRGdW5jdGlvbk5hbWU7CiAgICAgICAgICAgICAgICAkRnVuY3Rpb25MaW5lSW5Qb2QgPSAkTGluZTsKICAgICAgICAgICAgICAgIGNob21wICRGdW5jdGlvbkxpbmVJblBvZDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRDb2RlID1+IG17c3ViICRGdW5jdGlvbk5hbWV9ICkgewogICAgICAgICAgICAgICAgJEVycm9yTWVzc2FnZSAuPSAiSXRlbSB3aXRob3V0IGZ1bmN0aW9uIChuZWFyIExpbmUgJExpbmVOdW1iZXIpLCB0aGUgbGluZSBzaG91bGQgbG9vayBsaWtlICc9aGVhZDIgU2FtcGxlRnVuY3Rpb24oKSdcbiI7CiAgICAgICAgICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICJMaW5lICRMaW5lTnVtYmVyOiAkTGluZVxuIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBsb29rIGF0IHRoZSBzYW1wbGUgY29kZSBpbiB0aGUgUE9ECiAgICAgICAgaWYgKCAkRnVuY3Rpb25OYW1lSW5Qb2QgJiYgJExpbmUgPX4gbS8tPiguKz8pXCgvICYmICEkRnVuY3Rpb25DYWxsSW5Qb2QgKSB7CiAgICAgICAgICAgICRGdW5jdGlvbkNhbGxJblBvZCA9ICQxOwogICAgICAgICAgICAkRnVuY3Rpb25DYWxsSW5Qb2QgPX4gcy8gLy87CgogICAgICAgICAgICBpZiAoICRMaW5lID1+IC9cJFNlbGYtPi8gJiYgISRQYWNrYWdlSXNSb2xlICkgewogICAgICAgICAgICAgICAgJEVycm9yTWVzc2FnZSAuPSAiRG9uJ3QgdXNlIFwkU2VsZiBpbiBwZXJsZG9jXG4iOwogICAgICAgICAgICAgICAgJEVycm9yTWVzc2FnZSAuPSAiTGluZSAkTGluZU51bWJlcjogJExpbmVcbiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkRnVuY3Rpb25OYW1lSW5Qb2QgbmUgJEZ1bmN0aW9uQ2FsbEluUG9kICkgewogICAgICAgICAgICAgICAgaWYgKCAkRnVuY3Rpb25OYW1lSW5Qb2QgbmUgJ25ldycgfHwgKCAkRnVuY3Rpb25DYWxsSW5Qb2QgbmUgJ0dldCcgJiYgJEZ1bmN0aW9uQ2FsbEluUG9kIG5lICdDcmVhdGUnICkgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG15ICREZXNjcmlwdGlvbkxpbmUgPSAkTGluZTsKICAgICAgICAgICAgICAgICAgICBjaG9tcCgkRGVzY3JpcHRpb25MaW5lKTsKICAgICAgICAgICAgICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICIkRnVuY3Rpb25MaW5lSW5Qb2QgPC0+ICREZXNjcmlwdGlvbkxpbmVcbiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJEZ1bmN0aW9uTmFtZUluUG9kICYmICRMaW5lICF+IC9cJFtBLVphLXowLTk6XSstPiguKz8pXCgvICYmICRGdW5jdGlvbk5hbWVJblBvZCBuZSAnbmV3JyApIHsKICAgICAgICAgICAgICAgICRFcnJvck1lc3NhZ2UgLj0gIlRoZSBmdW5jdGlvbiBzeW50YXggaXMgbm90IGNvcnJlY3QhXG4iOwogICAgICAgICAgICAgICAgJEVycm9yTWVzc2FnZSAuPSAiTGluZSAkTGluZU51bWJlcjogJExpbmVcbiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgbG9vayBhdCB0aGUgc3ViIGRlY2xhcmF0aW9uIGZvbGxvd2luZyB0aGUgUE9ECiAgICAgICAgaWYgKCAkRnVuY3Rpb25OYW1lSW5Qb2QgJiYgJExpbmUgPX4gbS9zdWIvICkgewogICAgICAgICAgICBpZiAoICRMaW5lID1+IG0vc3ViICguKykgXHsvICkgewogICAgICAgICAgICAgICAgbXkgJEZ1bmN0aW9uU3ViID0gJDE7CiAgICAgICAgICAgICAgICAkRnVuY3Rpb25TdWIgPX4gcy8gLy87CiAgICAgICAgICAgICAgICBteSAkU3ViTGluZSA9ICRMaW5lOwoKICAgICAgICAgICAgICAgIGlmICggJEZ1bmN0aW9uU3ViIG5lICRGdW5jdGlvbk5hbWVJblBvZCApIHsKICAgICAgICAgICAgICAgICAgICBjaG9tcCgkU3ViTGluZSk7CiAgICAgICAgICAgICAgICAgICAgJEVycm9yTWVzc2FnZSAuPSAiJEZ1bmN0aW9uTGluZUluUG9kIDwtPiAkU3ViTGluZSBcbiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJEZ1bmN0aW9uTmFtZUluUG9kID0gJyc7CiAgICAgICAgICAgICRGdW5jdGlvbkNhbGxJblBvZCA9ICcnOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoJEVycm9yTWVzc2FnZSkgewogICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKCRFcnJvck1lc3NhZ2UpOwogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/Pod/SpellCheck.Whitelist.txt" Permission="660" Encode="Base64">YWdwbApncGwKb3RvYm8Kb3RycwpzbGEKCmFzY2lpCmh0bWwKY2dpCnBncApzbWltZQpDQQoKcGFyYW0KcGFyYW1zCnByb3Zpc2lvbmVyCgpkb2Nib29rCmV0Ywp1dGY4CmlkCmlkcwpzbGEKc2xhcwpBQ0wKY3N2CnNxbApkYm1zCmZldGNobWFpbAp0bXAKaXBjCm9wbQpzb3BtCml0c20KcGRmCnhtbApzdGF0CnN0YXRzCnV0ZgpmYXEKdW5pbnN0YWxsCnVuaW5zdGFsbHMKc3lzY29uZmlnCmltcG9ydGFibGUKaW52b2tlcgppbnZva2VycwptaW5pZmllZApkZWNyeXB0CmRlY3J5cHRlZAp1bm1hbmFnZWQKcHJlc2VsZWN0CmlDYWxlbmRhcgoKUE9TVERBVEEKUEFUQ0hEQVRBClBVVERBVEEKRU8K</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/Pod/SpellCheck.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBvZDo6U3BlbGxDaGVjazsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCiMgSW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gaHR0cHM6Ly9tZXRhY3Bhbi5vcmcvc291cmNlL0RST0xTS1kvQ29kZS1UaWR5QWxsLTAuNTYvbGliL0NvZGUvVGlkeUFsbC9QbHVnaW4vUG9kU3BlbGwucG0KCnVzZSBDYXB0dXJlOjpUaW55IHF3KCk7CnVzZSBGaWxlOjpUZW1wKCk7CnVzZSBQb2Q6OlNwZWxsOwoKdXNlIE1vbzsKCmV4dGVuZHMgJ1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmwnOwoKb3VyICRIdW5zcGVsbFBhdGg7Cm91ciAkSHVuc3BlbGxEaWN0aW9uYXJ5UGF0aDsKb3VyICRIdW5zcGVsbFdoaXRlbGlzdFBhdGg7CgpzdWIgdmFsaWRhdGVfZmlsZSB7CiAgICBteSAoICRTZWxmLCAkRmlsZSApID0gQF87CgogICAgcmV0dXJuIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBGaWxlbmFtZSA9PiAkRmlsZSApOwoKICAgIGlmICggISRIdW5zcGVsbFBhdGggKSB7CiAgICAgICAgJEh1bnNwZWxsUGF0aCA9IGB3aGljaCBodW5zcGVsbGA7CiAgICAgICAgY2hvbXAgJEh1bnNwZWxsUGF0aDsKICAgICAgICBpZiAoICEkSHVuc3BlbGxQYXRoICkgewogICAgICAgICAgICBwcmludCBTVERFUlIgX19QQUNLQUdFX18gLiAiXG5Db3VsZCBub3QgZmluZCAnaHVuc3BlbGwnLCBza2lwcGluZyBzcGVsbCBjaGVja2VyIHRlc3RzLlxuIjsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICRIdW5zcGVsbERpY3Rpb25hcnlQYXRoID0gX19GSUxFX18gPX4gc3tTcGVsbENoZWNrXC5wbSR9ey4uLy4uL1N0YXRpY0ZpbGVzL0h1bnNwZWxsL0RpY3Rpb25hcmllc31yOwogICAgICAgICRIdW5zcGVsbFdoaXRlbGlzdFBhdGggID0gX19GSUxFX18gPX4gc3tcLnBtJH17LldoaXRlbGlzdC50eHR9cjsKICAgIH0KCiAgICAjICMgVE9ETzogTU9WRSBUTyBTRVBBUkFURSBQZXJsOjpDb21tZW50c1NwZWxsQ2hlY2sgcGx1Z2luIGxhdGVyCiAgICAjIG15ICRDb2RlID0gJFNlbGYtPl9HZXRGaWxlQ29udGVudHMoJEZpbGUpOwogICAgIwogICAgIyBteSAkQ29tbWVudHMgPSAkU2VsZi0+U3RyaXBQb2QoIENvZGUgPT4gJENvZGUgKTsKICAgICMgJENvbW1lbnRzICAgID1+IHN7XiBcIyBccyBzdHJpcHBlZCBccyBQT0R9e31zbXhnOwogICAgIyAkQ29tbWVudHMgICAgPX4gc3teIFxzKiBbXiNcc10gLio/ICR9e31zbXhnOyAgIyBSZW1vdmUgbm9uLWNvbW1lbnQgbGluZXMKICAgICMgJENvbW1lbnRzICAgID1+IHN7XG5cbit9e1xufXNteGc7ICAgICAgICAgICAgICMgUmVtb3ZlIGVtcHR5IGJsb2NrcwogICAgIyAkQ29tbWVudHMgICAgPX4gc3teIFxzKiBbI10gXHMqIH17fXNteGc7ICAgICAgIyBSZW1vdmUgY29tbWVudCBzaWducwoKICAgIG15ICggJFBvZFRleHQsICRFcnJvciApID0gQ2FwdHVyZTo6VGlueTo6Y2FwdHVyZSggc3ViIHsgUG9kOjpTcGVsbC0+bmV3KCktPnBhcnNlX2Zyb21fZmlsZSggJEZpbGUtPnN0cmluZ2lmeSgpICkgfSApOwoKICAgIGRpZSAkRXJyb3IgaWYgJEVycm9yOwoKICAgIG15ICRUZW1wRmlsZSA9IEZpbGU6OlRlbXAtPm5ldygpOwogICAgcHJpbnQgJFRlbXBGaWxlICRQb2RUZXh0OwogICAgJFRlbXBGaWxlLT5jbG9zZSgpOwoKICAgIG15ICRDTUQgICAgPSAiJEh1bnNwZWxsUGF0aCAtZCAke0h1bnNwZWxsRGljdGlvbmFyeVBhdGh9L2VuX1VTIC1wICRIdW5zcGVsbFdoaXRlbGlzdFBhdGggLWEgJFRlbXBGaWxlIjsKICAgIG15ICRPdXRwdXQgPSBgJENNRGA7CgogICAgaWYgKCAke15DSElMRF9FUlJPUl9OQVRJVkV9ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKCJFcnJvciBydW5uaW5nICckQ01EJzogJE91dHB1dCIpOwogICAgfQoKICAgIG15ICggQEVycm9ycywgJVNlZW4gKTsKICAgIExJTkU6CiAgICBmb3IgbXkgJExpbmUgKCBzcGxpdCggbS9cbi8sICRPdXRwdXQgKSApIHsKICAgICAgICBpZiAoIG15ICggJE9yaWdpbmFsLCAkUmVtYWluaW5nICkgPSAoICRMaW5lID1+IC9eW1wmXD9cI10gKFxTKylccysoLiopLyApICkgewoKICAgICAgICAgICAgaWYgKCAkT3JpZ2luYWwgPX4gbXteIF8/IFtBLVpdKyBbYS16MC05XSsgW0EtWmEtejAtOV0qIH1zbXggKSB7CiAgICAgICAgICAgICAgICBuZXh0IExJTkU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggISRTZWVueyRPcmlnaW5hbH0rKyApIHsKICAgICAgICAgICAgICAgIG15ICgkU3VnZ2VzdGlvbnMpID0gKCAkUmVtYWluaW5nID1+IC86ICguKikvICk7CiAgICAgICAgICAgICAgICBpZiAoJFN1Z2dlc3Rpb25zKSB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCggQEVycm9ycywgc3ByaW50ZiggIiVzIChzdWdnZXN0aW9uczogJXMpIiwgJE9yaWdpbmFsLCAkU3VnZ2VzdGlvbnMgKSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCggQEVycm9ycywgJE9yaWdpbmFsICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaWYgKEBFcnJvcnMpIHsKICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcigKICAgICAgICAgICAgc3ByaW50ZiggIlxuUGVybCBQb2QgY29udGFpbnMgdW5yZWNvZ25pemVkIHdvcmRzOlxuJXNcbiIsIGpvaW4oICJcbiIsIHNvcnQgQEVycm9ycyApICkKICAgICAgICApOwogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/Pod/Validator.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBvZDo6VmFsaWRhdG9yOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybCk7Cgp1c2UgQ2FwdHVyZTo6VGlueSBxdyhjYXB0dXJlX21lcmdlZCk7CnVzZSBQb2Q6OkNoZWNrZXI7CgojCiMgVmFsaWRhdGVkIFBvZCB3aXRoIFBvZDo6Q2hlY2tlciBmb3Igc3ludGFjdGljYWwgY29ycmVjdG5lc3MuCiMKCnN1YiB2YWxpZGF0ZV9maWxlIHsKICAgIG15ICggJFNlbGYsICRGaWxlICkgPSBAXzsKCiAgICByZXR1cm4gaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIEZpbGVuYW1lID0+ICRGaWxlICk7CgogICAgbXkgJENoZWNrZXIgPSBQb2Q6OkNoZWNrZXItPm5ldygpOwoKICAgICMgRm9yY2Ugc3RyaW5naWZpY2F0aW9uIG9mICRGaWxlIGFzIGl0IGlzIGEgUGF0aDo6VGlueSBvYmplY3QgaW4gQ29kZTo6VGlkeUFsbCAwLjUwKy4KICAgIG15ICRPdXRwdXQgPSBjYXB0dXJlX21lcmdlZCB7ICRDaGVja2VyLT5wYXJzZV9mcm9tX2ZpbGUoICIkRmlsZSIsIFwqU1RERVJSICkgfTsKCiAgICAjIE9ubHkgZGllIGlmIE91dHB1dCBpcyBmaWxsZWQgd2l0aCBlcnJvcnMuIE90aGVyd2lzZSBpdCBjb3VsZCBiZQogICAgIyAgIHRoYXQgdGhlcmUganVzdCB3YXMgbm8gUE9EIGluIHRoZSBmaWxlLgogICAgaWYgKCAkQ2hlY2tlci0+bnVtX2Vycm9ycygpICYmICRPdXRwdXQgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoIiRPdXRwdXQiKTsKICAgIH0KfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/Print.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlByaW50OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEZpbGU6OkJhc2VuYW1lOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybCk7CgpzdWIgdmFsaWRhdGVfc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICBteSAoICRFcnJvck1lc3NhZ2UsICRDb3VudGVyICk7CgogICAgTElORToKICAgIGZvciBteSAkTGluZSAoIHNwbGl0IC9cbi8sICRDb2RlICkgewogICAgICAgICRDb3VudGVyKys7CgogICAgICAgIG5leHQgTElORSBpZiAkTGluZSA9fiBtL15ccypcIy9zbXg7CgogICAgICAgIGlmICggJExpbmUgPX4gbXteIFxzKiBwcmludCAoXHN8XCgpIH1zbXggKSB7CiAgICAgICAgICAgICRFcnJvck1lc3NhZ2UgLj0gIkxpbmUgJENvdW50ZXI6ICRMaW5lXG4iOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoJEVycm9yTWVzc2FnZSkgewogICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKDw8IkVPRiIpOwpEb24ndCB1c2UgJ3ByaW50JyBpbiBtb2R1bGVzLgokRXJyb3JNZXNzYWdlCkVPRgogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/Require.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlJlcXVpcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgRmlsZTo6QmFzZW5hbWU7Cgp1c2UgTW9vOwoKZXh0ZW5kcyBxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsKTsKCnN1YiB2YWxpZGF0ZV9zb3VyY2UgewogICAgbXkgKCAkU2VsZiwgJENvZGUgKSA9IEBfOwoKICAgIHJldHVybiBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZCggQ29kZSA9PiAkQ29kZSApOwoKICAgICRDb2RlID0gJFNlbGYtPlN0cmlwUG9kKCBDb2RlID0+ICRDb2RlICk7CgogICAgbXkgKCAkRXJyb3JNZXNzYWdlLCAkQ291bnRlciApOwoKICAgIExJTkU6CiAgICBmb3IgbXkgJExpbmUgKCBzcGxpdCAvXG4vLCAkQ29kZSApIHsKICAgICAgICAkQ291bnRlcisrOwoKICAgICAgICBpZiAoICRMaW5lID1+IG0vXiBccyogcmVxdWlyZSAoPzogXHMgfCBcKCApL3NteCApIHsKICAgICAgICAgICAgJEVycm9yTWVzc2FnZSAuPSAiTGluZSAkQ291bnRlcjogJExpbmVcbiI7CiAgICAgICAgfQogICAgfQoKICAgIGlmICgkRXJyb3JNZXNzYWdlKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoPDwiRU9GIik7CkRvbid0IHVzZSByZXF1aXJlIGRpcmVjdGx5LCBidXQgTWFpbjo6UmVxdWlyZSBpbnN0ZWFkLgokRXJyb3JNZXNzYWdlCkVPRgogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/ScriptFormat.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlNjcmlwdEZvcm1hdDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBGaWxlOjpCYXNlbmFtZTsKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmwpOwoKc3ViIHRyYW5zZm9ybV9zb3VyY2UgewogICAgbXkgKCAkU2VsZiwgJENvZGUgKSA9IEBfOwoKICAgIHJldHVybiAkQ29kZSBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZCggQ29kZSA9PiAkQ29kZSApOwoKICAgICMgRm9yIG90b2JvIHdlIHVzZSAvdXNyL2Jpbi9lbnYgcGVybAoKICAgICRDb2RlID1+IHN7XEFcIyEvdXNyL2Jpbi9wZXJsW15cbl0qfXtcIyEvdXNyL2Jpbi9lbnYgcGVybH14bXM7CgogICAgcmV0dXJuICRDb2RlOwp9CgpzdWIgdmFsaWRhdGVfc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gJENvZGUgaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICAjIENoZWNrIGZvciBwcmVzZW5jZSBvZiBzaGViYW5nIGxpbmUKICAgIGlmICggJENvZGUgIX4gbXtcQVwjIS91c3IvYmluL2VudlxzcGVybH14bXMgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoPDwiRU9GIik7Ck5lZWQgJyMhL3Vzci9iaW4vZW52IHBlcmwnIGF0IHRoZSBzdGFydCBvZiBzY3JpcHQgZmlsZXMuCkVPRgogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/SubDeclaration.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlN1YkRlY2xhcmF0aW9uOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEZpbGU6OkJhc2VuYW1lOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybCk7Cgo9aGVhZDEgU1lOT1BTSVMKClRoaXMgbW9kdWxlIGNoZWNrcyBmb3Igc3ViIGRlY2xhcmF0aW9ucyB3aXRoIHRoZSBicmFjZSBpbiB0aGUgZm9sbG93aW5nCmxpbmUgYW5kIGNvcnJlY3RzIHRoZW0uCgogICAgc3ViIGFiYwogICAgewogICAgICAgIC4uLgogICAgfQoKd2lsbCBiZWNvbWU6CgogICAgc3ViIGFiYyB7CiAgICAgICAgLi4uCiAgICB9Cgo9Y3V0CgpzdWIgdHJhbnNmb3JtX3NvdXJjZSB7CiAgICBteSAoICRTZWxmLCAkQ29kZSApID0gQF87CgogICAgcmV0dXJuICRDb2RlIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBDb2RlID0+ICRDb2RlICk7CgogICAgaWYgKCAkQ29kZSA9fiBtfF5zdWIgXHMrIFx3KyBccyogXHI/XG4gXHsgfHNteCApIHsKICAgICAgICAkQ29kZSA9fiBzfF4oc3ViIFxzKyBcdyspIFxzKiBccj9cbiBceyB8JDEge3xzbXhnOwogICAgfQoKICAgIHJldHVybiAkQ29kZTsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/SyntaxCheck.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlN5bnRheENoZWNrOwoKdXNlIHY1LjI0Owp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSBuYW1lc3BhY2U6OmF1dG9jbGVhbjsKdXNlIHV0Zjg7Cgp1c2UgTW9vOwoKZXh0ZW5kcyBxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsKTsKCiMgY29yZSBtb2R1bGVzCnVzZSBGaWxlOjpUZW1wOwoKIyBDUEFOIG1vZHVsZXMKCiMgT1RPQk8gbW9kdWxlcwoKc3ViIHZhbGlkYXRlX3NvdXJjZSB7CiAgICBteSAoICRTZWxmLCAkQ29kZSApID0gQF87CgogICAgcmV0dXJuIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBDb2RlID0+ICRDb2RlICk7CgogICAgIyBTaW1wbGUgY29tcGlsZSBjaGVja3MgdmVyeSBvZnRlbiBmYWlsIGJlY2F1c2UgcmVxdWlyZWQgbW9kdWxlcyBhcmUgbm90IGF2YWlsYWJsZS4KICAgICMgQnV0IGluc3RhbGxlZCBtb2R1bGVzIGFyZSBub3QgdGhlIHNjb3BlIG9mIHRoaXMgdGVzdCwgdGhlcmVmb3JlIHdlIHJlbW92ZSBtYW55CiAgICAjIG9mIHRoZSAndXNlJyBzdGF0ZW1lbnQuIEJ1dCBrZWVwIHNvbWUgbW9kdWxlcyBhbmQgcHJhZ21hdGEgYmVjYXVzZSByZW1vdmluZyB0aGVtCiAgICAjIHdvdWxkIGhhdmUgYW4gYWR2ZXJzZSBlZmZlY3QuCiAgICBteSAoICRDbGVhbmVkU291cmNlLCAkRGVsZXRhYmxlU3RhdGVtZW50ICk7CgogICAgIyBBbGxvdyBpbXBvcnRhbnQgbW9kdWxlcyB0aGF0IGNvbWUgd2l0aCB0aGUgUGVybCBjb3JlIG9yIGFyZSBleHRlcm5hbAogICAgIyAgIGRlcGVuZGVuY2llcyBvZiBPVE9CTyBhbmQgY2FuIHRodXMgYmUgYXNzdW1lZCBhcyBiZWluZyBpbnN0YWxsZWQuCiAgICAjICAgU29tZSBjb21tb24gbW9kdWxlcyB0aGF0IGFyZSB1c2VkIGR1cmluZyBkZXZlbG9wbWVudCBhcmUgYWxzbyBub3Qgc3RyaXBwZWQuCiAgICAjCiAgICAjIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBmb29sIHByb29mLiBNb2R1bGVzIGxpa2UgRGF0ZVRpbWU6OlRpbWVab25lOjpJQ2FsIHdvdWxkCiAgICAjIGFsc28gbm90IGJlIHN0cmlwcGVkIGFzIHRoZSB0aGF0IG1vZHVsZSBuYW1lIGNvbnRhaW5zIHRoZSBzdWJzdHJpbmcgJ0RhdGVUaW1lJy4KICAgICMKICAgICMgVGhlICd1c2UgdjUueHgnIGxpbmVzIGFyZSBhbHNvIGtlcHQgaW4gdGhlIGZpbGUuIFRoaXMgaXMgZmluZSBhcyB0aGVyZSBpcyBhIFBlcmw6OkNyaXRpYwogICAgIyBwb2xpY3kgdGhhdCBlbmZvcmNlcyB0aGF0IG5vIHZlcnNpb24gb2YgUGVybCBoaWdoZXIgdGhhbiB0aGUgbWluaW1hbCBzdXBwb3J0ZWQgdmVyc2lvbgogICAgIyBpcyByZXF1aXJlZC4KICAgIG15IEBBbGxvd2VkRXh0ZXJuYWxNb2R1bGVzID0gcXcoCiAgICAgICAgdmFycwogICAgICAgIGNvbnN0YW50CiAgICAgICAgc3RyaWN0CiAgICAgICAgd2FybmluZ3MKICAgICAgICB0aHJlYWRzCiAgICAgICAgbGliCgogICAgICAgIHY1LlxkXGQKCiAgICAgICAgQXJjaGl2ZTo6VGFyCiAgICAgICAgQXJjaGl2ZTo6WmlwCiAgICAgICAgQ2FycAogICAgICAgIENvbmZpZwogICAgICAgIENvbnN0OjpGYXN0CiAgICAgICAgQ3BhbmVsOjpKU09OOjpYUwogICAgICAgIEN3ZAogICAgICAgIERCSQogICAgICAgIERhdGE6OkR1bXBlcgogICAgICAgIERhdGE6OkR4CiAgICAgICAgRGF0ZVRpbWUKICAgICAgICBFbmNvZGUKICAgICAgICBFbmNvZGU6OkxvY2FsZQogICAgICAgIEZjbnRsCiAgICAgICAgRmlsZTo6QmFzZW5hbWUKICAgICAgICBGaW5kQmluCiAgICAgICAgSU86OlNvY2tldAogICAgICAgIExpc3Q6OkFsbFV0aWxzCiAgICAgICAgTGlzdDo6VXRpbAogICAgICAgIE1vbwogICAgICAgIE1vb3NlCiAgICAgICAgUE9TSVgKICAgICAgICBQZXJsOjpDcml0aWM6OlV0aWxzCiAgICAgICAgUmVhZG9ubHkKICAgICAgICBUZW1wbGF0ZQogICAgICAgIFRlc3QyOjpWMAogICAgICAgIFRlc3QyOjpUb29sczo6U3BlYwogICAgICAgIFRpbWU6OkhpUmVzCiAgICAgICAgVHlwZXM6OlNlcmlhbGlzZXIKICAgICk7CgogICAgbXkgJEFsbG93ZWRFeHRlcm5hbE1vZHVsZXNSZWdleCA9ICdcQSBccyogdXNlIFxzKyAoPzogJyAuIGpvaW4oICd8JywgQEFsbG93ZWRFeHRlcm5hbE1vZHVsZXMgKSAuICcgKSAnOwoKICAgIExJTkU6CiAgICBmb3IgbXkgJExpbmUgKCBzcGxpdCAvXG4vLCAkQ29kZSApIHsKCiAgICAgICAgIyBDaGVjayBmb3IgJ3VzZSBWRVJTSU9OJyBkZWNsYXJhdGlvbnMgbGlrZSAndXNlIHY1LjQyJy4gQXZvaWQgcmVxdWlyaW5nIGEgdmVyc2lvbiBoaWdoZXIKICAgICAgICAjIHRoYW4gdGhlIG1pbmltYWwgc3VwcG9ydGVkIHZlcnNpb24uCiAgICAgICAgbXkgJE1pbmltYWxTdXBwb3J0ZWRWZXJzaW9uID0gJzUuMjQnOwogICAgICAgIGlmICggbXkgKCRSZXF1aXJlZFZlcnNpb24pID0gJExpbmUgPX4gbXsgXEEgXHMqIHVzZSBccysgdig1LlxkXGQpIH14bXMgKSB7CiAgICAgICAgICAgIGlmICggJFJlcXVpcmVkVmVyc2lvbiBndCAkTWluaW1hbFN1cHBvcnRlZFZlcnNpb24gKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcigiUGVybCAkUmVxdWlyZWRWZXJzaW9uIGlzIHJlcXVpcmVkIGJ1dCAkTWluaW1hbFN1cHBvcnRlZFZlcnNpb24gaXMgdGhlIG1pbmltYWwgc3VwcG9ydGVkIHZlcnNpb25cbiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIFdlJ2xsIHNraXAgYWxsIHVzZSAqOyBzdGF0ZW1lbnRzIGV4ZXB0IGZvciBleGNlbXB0ZWQgbW9kdWxlcwogICAgICAgIGlmICggJExpbmUgPX4gbXsgXEEgXHMqIHVzZSBccysgfXhtcyAmJiAkTGluZSAhfiBteyRBbGxvd2VkRXh0ZXJuYWxNb2R1bGVzUmVnZXh9eG1zICkgewogICAgICAgICAgICAkRGVsZXRhYmxlU3RhdGVtZW50ID0gMTsKICAgICAgICB9CgogICAgICAgIGlmICgkRGVsZXRhYmxlU3RhdGVtZW50KSB7CiAgICAgICAgICAgICRMaW5lID0gIiMkTGluZSI7CiAgICAgICAgfQoKICAgICAgICAjIExvb2sgZm9yIHRoZSBlbmQgb2YgdGhlIHRoZSAndXNlJyBzdGF0ZW1lbnQuCiAgICAgICAgIyBUaGUgc3RhdGVtZW50IHRlcm1pbmF0b3IgbWF5IGJlIGZvbGxvd2VkIGJ5IGFuIGVuZCBvZiBsaW5lIGNvbW1lbnQuCiAgICAgICAgIyBBbGwgYXNzdW1pbmcgdGhhdCB0aGUgJzsnIGlzIG5vdCBwYXJ0IG9mIGFuIGl0ZW0gaW4gdGhlIGltcG9ydCBsaXN0LgogICAgICAgIGlmICggJExpbmUgPX4gbXsgOyBccyogKD86IFwjIC4qKT8gXHogfXhtcyApIHsKICAgICAgICAgICAgJERlbGV0YWJsZVN0YXRlbWVudCA9IDA7CiAgICAgICAgfQoKICAgICAgICAkQ2xlYW5lZFNvdXJjZSAuPSAkTGluZSAuICJcbiI7CiAgICB9CgogICAgbXkgJFRlbXBGaWxlID0gRmlsZTo6VGVtcC0+bmV3OwogICAgcHJpbnQgJFRlbXBGaWxlICRDbGVhbmVkU291cmNlOwogICAgJFRlbXBGaWxlLT5mbHVzaDsKCiAgICAjIHN5bnRheCBjaGVjawogICAgbXkgJEVycm9yTWVzc2FnZTsKICAgIHsKICAgICAgICBpZiAoIG9wZW4gbXkgJEZpbGVIYW5kbGUsICctfCcsICJwZXJsIC1jdyAiIC4gJFRlbXBGaWxlLT5maWxlbmFtZSgpIC4gIiAyPiYxIiApIHsgICAgIyMgbm8gY3JpdGljIHF3KE9UT0JPOjpQcm9oaWJpdE9wZW4pCiAgICAgICAgICAgIHdoaWxlICggbXkgJExpbmUgPSA8JEZpbGVIYW5kbGU+ICkgewogICAgICAgICAgICAgICAgaWYgKCAkTGluZSAhfiAvKHN5bnRheCBPS3x1c2VkIG9ubHkgb25jZTogcG9zc2libGUgdHlwbykvICkgewogICAgICAgICAgICAgICAgICAgICRFcnJvck1lc3NhZ2UgLj0gJExpbmU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2xvc2UgJEZpbGVIYW5kbGU7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcigiRklMVEVSOiBDYW4ndCBvcGVuIHRlbXBmaWxlOiAkIVxuIik7CiAgICAgICAgfQogICAgfQoKICAgIGlmICgkRXJyb3JNZXNzYWdlKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoIiRFcnJvck1lc3NhZ2UiKTsKICAgIH0KfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/Tests/Helper.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlRlc3RzOjpIZWxwZXI7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgTW9vOwoKZXh0ZW5kcyBxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsKTsKCnN1YiB2YWxpZGF0ZV9zb3VyY2UgewogICAgbXkgKCAkU2VsZiwgJENvZGUgKSA9IEBfOwoKICAgIHJldHVybiBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZCggQ29kZSA9PiAkQ29kZSApOwoKICAgIG15ICVNYXRjaFJlZ2V4ZXMgPSAoCiAgICAgICAgSGVscGVyT2JqZWN0UGFyYW1zICAgICAgICAgICAgICAgPT4gcXJ7LT5PYmplY3RQYXJhbUFkZFwoXHMqJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJ314bXMsCiAgICAgICAgSGVscGVyT2JqZWN0RmxhZ1Jlc3RvcmVEYXRhYmFzZSAgPT4gcXJ7UmVzdG9yZURhdGFiYXNlXHMqPT5ccyoxfXhtcywKICAgICAgICBIZWxwZXJPYmplY3RGbGFnUEdQRW52aXJvbm1lbnQgICA9PiBxcntQcm92aWRlVGVzdFBHUEVudmlyb25tZW50XHMqPT5ccyoxfXhtcywKICAgICAgICBIZWxwZXJPYmplY3RGbGFnU01JTUVFbnZpcm9ubWVudCA9PiBxcntQcm92aWRlVGVzdFNNSU1FRW52aXJvbm1lbnRccyo9PlxzKjF9eG1zLAogICAgICAgIEhlbHBlckluc3RhbnRpYXRpb24gICAgICAgICAgICAgID0+IHFyey0+R2V0XCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInfXhtcywKICAgICAgICBTZWxlbml1bUluc3RhbnRpYXRpb24gICAgICAgICAgICA9PiBxcnstPkdldFwoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nfXhtcywKICAgICAgICBQR1BJbnN0YW50aWF0aW9uICAgICAgICAgICAgICAgICA9PiBxcnstPkdldFwoJ0tlcm5lbDo6U3lzdGVtOjpDcnlwdDo6UEdQJ314bXMsCiAgICAgICAgU01JTUVJbnN0YW50aWF0aW9uICAgICAgICAgICAgICAgPT4gcXJ7LT5HZXRcKCdLZXJuZWw6OlN5c3RlbTo6Q3J5cHQ6OlNNSU1FJ314bXMsCiAgICApOwoKICAgIG15ICVNYXRjaFBvc2l0aW9uczsKCiAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlTWF0Y2hSZWdleGVzICkgewogICAgICAgIGlmICggJENvZGUgPX4gJE1hdGNoUmVnZXhlc3skS2V5fSApIHsKCiAgICAgICAgICAgICMgU3RvcmUgdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBtYXRjaC4KICAgICAgICAgICAgJE1hdGNoUG9zaXRpb25zeyRLZXl9ID0gJC1bMF07CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBpZiAhJE1hdGNoUG9zaXRpb25ze0hlbHBlckluc3RhbnRpYXRpb259OwoKICAgIGlmICggJE1hdGNoUG9zaXRpb25ze1NlbGVuaXVtSW5zdGFudGlhdGlvbn0gJiYgJE1hdGNoUG9zaXRpb25ze0hlbHBlck9iamVjdFBhcmFtc30gKSB7CiAgICAgICAgaWYgKCAkTWF0Y2hQb3NpdGlvbnN7U2VsZW5pdW1JbnN0YW50aWF0aW9ufSA8ICRNYXRjaFBvc2l0aW9uc3tIZWxwZXJPYmplY3RQYXJhbXN9ICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcig8PCJFT0YiKTsKUGxlYXNlIGFsd2F5cyBzZXQgdGhlIEhlbHBlciBvYmplY3QgcGFyYW1zIGJlZm9yZSBjcmVhdGluZyB0aGUgU2VsZW5pdW0gb2JqZWN0IHRvIG1ha2Ugc3VyZSBhbnkgY29uc3RydWN0b3IgZmxhZ3MgYXJlIHByb3Blcmx5IHNldCBhbmQgcHJvY2Vzc2VkLiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgYmVjYXVzZSBTZWxlbml1bTo6bmV3KCkgYWxyZWFkeSBtYXkgY3JlYXRlIHRoZSBIZWxwZXIuCkVPRgogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICRNYXRjaFBvc2l0aW9uc3tTZWxlbml1bUluc3RhbnRpYXRpb259ICYmICRNYXRjaFBvc2l0aW9uc3tIZWxwZXJPYmplY3RGbGFnUmVzdG9yZURhdGFiYXNlfSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcig8PCJFT0YiKTsKRG9uJ3QgdXNlIHRoZSBIZWxwZXIgZmxhZyAnUmVzdG9yZURhdGFiYXNlJyBpbiAgU2VsZW5pdW0gdGVzdHMsIGFzIHRoZSB3ZWIgc2VydmVyIGNhbm5vdCBhY2Nlc3MgdGhlIHRlc3QgdHJhbnNhY3Rpb24uCkVPRgogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/Time.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlRpbWU7CiMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlRpbWUpCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgRmlsZTo6QmFzZW5hbWU7Cgp1c2UgTW9vOwoKZXh0ZW5kcyBxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsKTsKCnN1YiB2YWxpZGF0ZV9zb3VyY2UgewogICAgbXkgKCAkU2VsZiwgJENvZGUgKSA9IEBfOwoKICAgIHJldHVybiBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZCggQ29kZSA9PiAkQ29kZSApOwoKICAgIG15ICggJEVycm9yTWVzc2FnZSwgJENvdW50ZXIgKTsKCiAgICBMSU5FOgogICAgZm9yIG15ICRMaW5lICggc3BsaXQgL1xuLywgJENvZGUgKSB7CiAgICAgICAgJENvdW50ZXIrKzsKCiAgICAgICAgbmV4dCBMSU5FIGlmICRMaW5lID1+IG0vXlxzKlwjL3NteDsKCiAgICAgICAgaWYgKCAkTGluZSA9fiBteyBsb2NhbHRpbWUgfXNteCApIHsKICAgICAgICAgICAgJEVycm9yTWVzc2FnZSAuPSAiTGluZSAkQ291bnRlcjogJExpbmVcbiI7CiAgICAgICAgfQogICAgfQoKICAgIGlmICgkRXJyb3JNZXNzYWdlKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoPDwiRU9GIik7ClBsZWFzZSB1c2UgdGhlIGZ1bmN0aW9ucyBvZiB0aGUgVGltZU9iamVjdCBpbnN0ZWFkIG9mICdsb2NhbHRpbWUnLgokRXJyb3JNZXNzYWdlCkVPRgogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/Translatable.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlRyYW5zbGF0YWJsZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBGaWxlOjpCYXNlbmFtZTsKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmwpOwoKc3ViIHZhbGlkYXRlX3NvdXJjZSB7CiAgICBteSAoICRTZWxmLCAkQ29kZSApID0gQF87CgogICAgcmV0dXJuICRDb2RlIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBDb2RlID0+ICRDb2RlICk7CgogICAgJENvZGUgPSAkU2VsZi0+U3RyaXBQb2QoIENvZGUgPT4gJENvZGUgKTsKICAgICRDb2RlID0gJFNlbGYtPlN0cmlwQ29tbWVudHMoIENvZGUgPT4gJENvZGUgKTsKCiAgICBpZiAoICRDb2RlID1+IG17VHJhbnNsYXRhYmxlXCh9eG1zICYmICRDb2RlICF+IG17XnVzZVxzK0tlcm5lbDo6TGFuZ3VhZ2VbXlxuXStUcmFuc2xhdGFibGV9eG1zICkgewogICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKDw8IkVPRiIpOwpUaGUgY29kZSB1c2VzIEtlcm5lbDo6TGFuZ3VhZ2U6OlRyYW5zbGF0YWJsZSgpLCBidXQgZG9lcyBub3QgaW1wb3J0IGl0IHRvIHRoZSBjdXJyZW50IHBhY2thZ2UuIFBsZWFzZSBhZGQ6CnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CkVPRgogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/TranslationEncoding.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlRyYW5zbGF0aW9uRW5jb2Rpbmc7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgRmlsZTo6QmFzZW5hbWU7Cgp1c2UgTW9vOwoKZXh0ZW5kcyBxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsKTsKCnN1YiB2YWxpZGF0ZV9zb3VyY2UgewogICAgbXkgKCAkU2VsZiwgJENvZGUgKSA9IEBfOwoKICAgIHJldHVybiAkQ29kZSBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZCggQ29kZSA9PiAkQ29kZSApOwoKICAgIGlmICggJENvZGUgIX4gbXteWyBcdF0qdXNlXHMrdXRmODt9bXggKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoPDwiRU9GIik7CkFsbCBsYW5ndWFnZSBmaWxlcyBtdXN0IGJlIGVuY29kZWQgaW4gInV0Zi04IiwgYW5kIGluY2x1ZGUgdGhlICJ1c2UgdXRmODsiIFBlcmwgcHJhZ21hLgpFT0YKICAgIH0KCiAgICByZXR1cm47Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/UnitTestConfigChanges.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlVuaXRUZXN0Q29uZmlnQ2hhbmdlczsKCnVzZSB2NS4yNDsKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCiMgY29yZSBtb2R1bGVzCnVzZSBGaWxlOjpCYXNlbmFtZTsKCiMgQ1BBTiBtb2R1bGVzCnVzZSBNb287CgojIE9UT0JPIG1vZHVsZXMKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybCk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgojIE1ha2Ugc3VyZSBTZWxlbml1bSB0ZXN0cyBvbmx5IG1vZGlmeSB0aGUgY29uZmlndXJhdGlvbiB2aWEgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgpLgoKc3ViIHZhbGlkYXRlX3NvdXJjZSB7CiAgICBteSAoICRTZWxmLCAkQ29kZSApID0gQF87CgogICAgcmV0dXJuIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBDb2RlID0+ICRDb2RlICk7CgogICAgbXkgKCAkRXJyb3JNZXNzYWdlLCAkTGluZU5vICkgPSAoICcnLCAxICk7CgogICAgTElORToKICAgIGZvciBteSAkTGluZSAoIHNwbGl0IC9cbi8sICRDb2RlICkgewogICAgICAgIG5leHQgTElORSB1bmxlc3MgJExpbmUgPX4gbXsgLT4gKD86IFNldHRpbmdVcGRhdGUgfCBTZXR0aW5nUmVzZXQgKSB9c214OwoKICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICJMaW5lICRMaW5lTm86ICRMaW5lXG4iOwogICAgfQogICAgY29udGludWUgewogICAgICAgICRMaW5lTm8rKzsKICAgIH0KCiAgICByZXR1cm4gdW5sZXNzICRFcnJvck1lc3NhZ2U7CgogICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoPDwiRU9GIik7ClNlbGVuaXVtIHRlc3RzIHNob3VsZCBtb2RpZnkgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uIGV4Y2x1c2l2ZWx5IHZpYQpcJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgpLiBOb3RlIHRoYXQgdGhpcyBtZXRob2QgZG9lcyBub3QgaGF2ZQp0aGUgc2FtZSBBUEkgYXMgXCRTeXNDb25maWdPYmplY3QtPlNldHRpbmdVcGRhdGUoKS4KJEVycm9yTWVzc2FnZQpFT0YKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/UseParent.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlVzZVBhcmVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmwpOwoKc3ViIHRyYW5zZm9ybV9zb3VyY2UgewogICAgbXkgKCAkU2VsZiwgJENvZGUgKSA9IEBfOwoKICAgIHJldHVybiAkQ29kZSBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZCggQ29kZSA9PiAkQ29kZSApOwoKICAgICRDb2RlID1+IHN7IF4gXHMqIFxLIHVzZSBccysgYmFzZSBcYiB9e3VzZSBwYXJlbnR9c214ZzsKCiAgICByZXR1cm4gJENvZGU7Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/UseWarnings.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlVzZVdhcm5pbmdzOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEZpbGU6OkJhc2VuYW1lOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybCk7CgojIFBlcmw6OkNyaXRpYyB3aWxsIG1ha2Ugc3VyZSB0aGF0IHVzZSBzdHJpY3QgaXMgZW5hYmxlZC4KIyBOb3cgd2UgY2hlY2sgdGhhdCB1c2Ugd2FybmluZ3MgaXMgYWxzby4Kc3ViIHRyYW5zZm9ybV9zb3VyY2UgewogICAgbXkgKCAkU2VsZiwgJENvZGUgKSA9IEBfOwoKICAgIHJldHVybiAkQ29kZSBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZCggQ29kZSA9PiAkQ29kZSApOwoKICAgICMgQ2hlY2sgaWYgdXNlIHdhcm5pbmdzIGlzIHByZXNlbnQsIG90aGVyd2lzZSBhZGQgaXQKICAgIGlmICggJENvZGUgIX4gbXteWyBcdF0qdXNlXHMrd2FybmluZ3M7fW14ICkgewogICAgICAgICRDb2RlID1+IHN7XlsgXHRdKnVzZVxzK3N0cmljdDt9e3VzZSBzdHJpY3Q7XG51c2Ugd2FybmluZ3M7fW14OwogICAgfQoKICAgIHJldHVybiAkQ29kZTsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/perlcriticrc" Permission="660" Encode="Base64">IyBTVEVSTiwgcGVyIGRlZmF1bHQgb25seSAkU0VWRVJJVFlfSElHSEVTVCA9IDUgYW5kICRTRVZFUklUWV9ISUdIID0gNCBhcmUgY292ZXJlZC4KIyBQb2xpY2llcyB3aXRoIGEgbG93ZXIgc2V2ZXJpdHkgcG9saWNpZXMgY2FuIGJlIGV4cGxpY2l0bHkgYWRkZWQgYmVsb3cuCnNldmVyaXR5ID0gNAoKIyBUaGlzIGlzIGZvciB0aGUgY2FzZSB3aGVuIHRoZSBQZXJsOjpCYW5ncyBhbmQgdGhlIFBlcmw6OkNvbW11bml0eSBwb2xpY2llcyBhcmUgaW5zdGFsbGVkCiMgYW5kIG5vIHRoZW1lIGlzIHNwZWNpZmllZC4gSW4gdGhhdCBjYXNlIHRoZSBwb2xpY2llcyBzaG91bGQgbm90IGJlIGNoZWNrZWQuIEJ1dCBkZXZlbG9wcGVycwojIGFyZSBmcmVlIHRvIHJlZW5ibGUgdGhlbS4KIwojIEZyZWVkb2RlIGlzIGEgc3BlY2lhbCBjYXNlLiBNYW55IGNvbW11bml0eSBwb2xpY2llcyBoYXZlIGFuIGFsaWFzIG5hbWUKIyB3aXRoIEZyZWVub2RlIGluIHRoZSBuYW1lLiBUaGVzZSBwb2xpY2llcyB3b3VsZCBiZSBjaGVja2VkIHR3aWNlIHdoZW4KIyBDb21tdW5pdHkgcnVsZXMgYXJlIGFjdGl2YXRlZC4KZXhjbHVkZSA9IEZyZWVub2RlIEJhbmdzIENvbW11bml0eQoKIyB0ZXN0IHNjcmlwdHMgYXJlIHNjcmlwdHMKcHJvZ3JhbS1leHRlbnNpb25zID0gLnBsIC50CgojIEZvcm1hdCB0aGUgdmlvbGF0aW9ucywgaW5kaWNhdGluZyB0aGUgcG9saWN5IG5hbWUsIGJyaWVmIGRlc2NyaXB0aW9uIGFuZCBleHBsYW5hdGlvbi4KIyBTZWUgaHR0cHM6Ly9tZXRhY3Bhbi5vcmcvcG9kL1BlciBsOjpDcml0aWM6OlZpb2xhdGlvbiNPVkVSTE9BRFMgZm9yIHRoZSBlc2NhcGUgY2hhcmFjdGVycy4KIyBJbiB2aW0gbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBmaWxlIG5hbWUgYW5kIHR5cGUgPGMtdz5GIGZvciBvcGVuaW5nIHRoZSBmaWxlIGF0IHRoZSByZWxldmFudCBsaW5lCiMgaW4gYSBuZXcgaG9yaXpvbnRhbCBzcGxpdCB3aW5kb3cuCnZlcmJvc2UgPSAlcCB2aW9sYXRlZCBhdCAlZiAlbCBjb2x1bW4gJWMgKFNldmVyaXR5OiAlcylcbiAgJW1cbiVlXG4KCiMgdXNlZnVsIGZvciBiYXRjaCBlZGl0aW5nOgojdmVyYm9zZSA9IHNwICslbCAlZlxuIG5vIGNyaXRpYyBxdyglcCkKCiMgaW5jbHVkaW5nIHRoZSBzb3VyY2UgY29kZSAlciB0aGF0IGNhdXNlcyB0aGUgdmlvbGF0aW9uOgojdmVyYm9zZSA9ICVwIHZpb2xhdGVkIGF0IGxpbmUgJWwgY29sdW1uICVjIChTZXZlcml0eTogJXMpXG4gICVtXG4lclxuCgojIFRoZSBPVE9CTyBzcGVjaWZpYyBwb2xpY2llcyBkb24ndCBoYXZlIHRvIGJlIGFkZGVkIGV4cGxpY2l0eSwKCiMgUmFpc2UgdGhlIHNldmVyaXR5IG9mIHNvbWUgcG9saWNpZXMKIyB0aGF0IHdvdWxkIG5vdCBiZSBpbmNsdWRlZCBiZWNhdXNlIHRoZWlyIGRlZmF1bHQgc2V2ZXJpdHkgaXMgYmVsb3cgNC4KW0NsYXNzSGllcmFyY2hpZXM6OlByb2hpYml0RXhwbGljaXRJU0FdCnNldmVyaXR5ID0gNAoKW0NvbnRyb2xTdHJ1Y3R1cmVzOjpQcm9oaWJpdFVubGVzc0Jsb2Nrc10Kc2V2ZXJpdHkgPSA0CgpbTWlzY2VsbGFuZWE6OlByb2hpYml0VXNlbGVzc05vQ3JpdGljXQpzZXZlcml0eSA9IDQKCltNaXNjZWxsYW5lYTo6UHJvaGliaXRVbnJlc3RyaWN0ZWROb0NyaXRpY10Kc2V2ZXJpdHkgPSA0CgpbTW9kdWxlczo6UHJvaGliaXRDb25kaXRpb25hbFVzZVN0YXRlbWVudHNdCnNldmVyaXR5ID0gNAoKW1N1YnJvdXRpbmVzOjpQcm9oaWJpdEFtcGVyc2FuZFNpZ2lsc10Kc2V2ZXJpdHkgPSA0CgpbVmFsdWVzQW5kRXhwcmVzc2lvbnM6OlByb2hpYml0U3BlY2lhbExpdGVyYWxIZXJlZG9jVGVybWluYXRvcl0Kc2V2ZXJpdHkgPSA0CltWYWx1ZXNBbmRFeHByZXNzaW9uczo6UmVxdWlyZVF1b3RlZEhlcmVkb2NUZXJtaW5hdG9yXQpzZXZlcml0eSA9IDQKW1ZhbHVlc0FuZEV4cHJlc3Npb25zOjpSZXF1aXJlVXBwZXJDYXNlSGVyZWRvY1Rlcm1pbmF0b3JdCnNldmVyaXR5ID0gNAoKW1ZhcmlhYmxlczo6UHJvaGliaXRVbnVzZWRWYXJpYWJsZXNdCnNldmVyaXR5ID0gNAoKIyBhbGxvdyBsaW5lcyBsaWtlOgojICBteSAkVG9EbyA9IHRvZG8oJ3RvbyBoYXJkIGZvciBub3cnKTsKIyAgaW4gZnV0dXJlOiBteSAkVG9EbyA9ICRUZXN0LT57VG9Eb30gPyB0b2RvKCdUaW1lb3V0cyBvY2N1ci4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9Sb3RoZXJPU1Mvb3RvYm8vaXNzdWVzLzc0OCcpIDogJyc7CltWYXJpYWJsZXM6OlByb2hpYml0VW51c2VkVmFyc1N0cmljdGVyXQojc2V2ZXJpdHkgICAgICAgICAgICAgICAgICAgICAgICAgID0gNCAgICAjIGFjdGl2YXRlIG9ubHkgYWZ0ZXIgdGhlIGNvZGUgaGFzIGJlZW4gY2xlYW5lZCB1cAphbGxvd191bnVzZWRfc3Vicm91dGluZV9hcmd1bWVudHMgPSAxCmFsbG93X2lmX2NvbXB1dGVkX2J5ICAgICAgICAgICAgICA9IHRvZG8KCltCdWlsdGluRnVuY3Rpb25zOjpQcm9oaWJpdFN0cmluZ3lTcGxpdF0Kc2V2ZXJpdHkgPSA0CgpbVmFyaWFibGVzOjpSZXF1aXJlSW5pdGlhbGl6YXRpb25Gb3JMb2NhbFZhcnNdCnNldmVyaXR5ID0gNAoKW1JlZ3VsYXJFeHByZXNzaW9uczo6UHJvaGliaXRDYXB0dXJlV2l0aG91dFRlc3RdCnNldmVyaXR5ID0gNAoKW0RvY3VtZW50YXRpb246OlJlcXVpcmVQYWNrYWdlTWF0Y2hlc1BvZE5hbWVdCnNldmVyaXR5ID0gNAoKW0J1aWx0aW5GdW5jdGlvbnM6OlByb2hpYml0U3RyaW5neVNwbGl0XQpzZXZlcml0eSA9IDQKCltWYXJpYWJsZXM6OlByb2hpYml0UGVybDRQYWNrYWdlTmFtZXNdCnNldmVyaXR5ID0gNAoKIyBTcGVjaWZpYyBzZXR0aW5ncyBmb3Igc29tZSBwb2xpY2llcy4KCiMgYmUgYSBiaXQgbW9yZSByZWxheGVkIGFib3V0IGJyaWVmIG9wZW5zIGFuZCBhbGxvdyBtb3JlIHRoYXQgdGhlIGRlZmF1bHQgOSBsaW5lcwpbSW5wdXRPdXRwdXQ6OlJlcXVpcmVCcmllZk9wZW5dCmxpbmVzID0gMjAKCltNb2R1bGVzOjpQcm9oaWJpdEV2aWxNb2R1bGVzXQptb2R1bGVzID0gQ0dJIHtPVE9CTyBzd2l0Y2hlZCB0byBQbGFja30gQ2xhc3M6OklTQSBGaWxlOjpTbHVycCB7dXNlIFBhdGg6OkNsYXNzOjpGaWxlOjpzbHVycCgpIGluc3RlYWR9IFBvZDo6UGxhaW5lciBTaGVsbCBTd2l0Y2ggdmFycyB7VXNlICdvdXInIHZhcmlhYmxlcyBpbnN0ZWFkIG9mICd1c2UgdmFycyd9IERhdGE6OkR1bXBlciB7VXNlIE1haW46OkR1bXAoKSBpbnN0ZWFkIG9mIER1bXBlcigpIGFuZCBkb24ndCBmb3JnZXQgdG8gcmVtb3ZlIGRlYnVnIGNvZGUgbGlrZSBwcmludCBTVERFUlIgRHVtcGVyKC4uLil9IERhdGE6OkR4IHtObyBkZWJ1ZyBzdGF0ZW1lbnRzIGluIHByb2R1Y3RpdmUgY29kZX0gL0FjbWU6Oi8ge0FjbWUgbW9kdWxlcyBhcmUganVzdCBmb3IgZnVufSBNb2R1bGU6OlJlZnJlc2gge1VzZSBLZXJuZWw6OlN5c3RlbTo6TW9kdWxlUmVmcmVzaCBpbnN0ZWFkfQoKW1ZhcmlhYmxlczo6UHJvaGliaXRFdmlsVmFyaWFibGVzXQp2YXJpYWJsZXMgPSAkREI6OnNpbmdsZSB7Y2xlYW4gdXAgeW91ciBkZWJ1ZyBzdGF0ZW1lbnRzfQp2YXJpYWJsZXMgPSBAKiAgICAgICAgICB7YXZvaWQgdGhlICRyZWYtQCogZXJyb3J9CgpbU3Vicm91dGluZXM6OlJlcXVpcmVGaW5hbFJldHVybl0KdGVybWluYWxfbWV0aG9kcyA9IEZhdGFsRXJyb3IgQ3VzdG9tZXJGYXRhbEVycm9yCgojIHR1cm4gb2ZmIHNvbWUgbW9kdWxlcwoKIyBiZWNhdXNlIHRoaXMgaXMgY292ZXJlZCBieSBNb2R1bGVzOjpQcm9oaWJpdEV2aWxNb2R1bGVzClstQ29tbXVuaXR5OjpEaXNjb3VyYWdlZE1vZHVsZXNdCgojIFRoaXMgc2V0dXAgZG9lcyBub3Qgd29yayBhcwojICAgIHJldHVybiAxIHVubGVzcyAkQ29udGVudCA9fiBtezxvdHJzX2NvbmZpZy4qP3ZlcnNpb249IjIuMCJ9OwojIHdpbGwgc3RpbGwgYmUgdHJpZ2dlcmVkLgojIFNvIGxlYXZlIHRoaXMgcG9saWN5IGRpc2FibGVkLgojW0NvbnRyb2xTdHJ1Y3R1cmVzOjpQcm9oaWJpdFBvc3RmaXhDb250cm9sc10KI1NldmVyaXR5ID0gNAojQWxsb3cgPSBpZiBmb3IgdW50aWwgd2hlbiB3aGlsZQojRmxvd2NvbnRyb2wgPSB3YXJuIGRpZSBjYXJwIGNyb2FrIGNsdWNrIGNvbmZlc3MgZ290byBleGl0IHJldHVybgo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Perl/perltidyrc" Permission="660" Encode="Base64">LWw9MTYwICAgICAgICAgICAgICAgICAgICAgICAgICAjIGxpbmUgbGVuZ3RoCi12bWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB2YXJpYWJsZSBtYXhpbXVtIGxpbmUgbGVuZ3RoCi1pPTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbmRlbnRhdGlvbiB3aWR0aAotY2k9NCAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY29udGludW91cyBpbmRlbnRhdGlvbiB3aWR0aAoteGNpICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZXh0ZW5kZWQgY29udGludW91cyBpbmRlbnRhdGlvbgotdnQ9MCAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdmVydGljYWwgdGlnaHRuZXNzCi12dGM9MCAgICAgICAgICAgICAgICAgICAgICAgICAgIyB2ZXJ0aWNhbCB0aWdodG5lc3MgY2xvc2luZwotY3RpPTAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2xvc2luZyB0b2tlbiBpbmRlbnRhdGlvbgotcHQ9MSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcGFyZW4gdGlnaHRuZXNzCi1idD0xICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBicmFjZSB0aWdodG5lc3MKLXNidD0xICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNxdWFyZSBicmFja2V0cyB0aWdodG5lc3MKLWJidD0xICAgICAgICAgICAgICAgICAgICAgICAgICAjIGJsb2NrIGJyYWNlIHRpZ2h0bmVzcwotbnNmcyAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbm8gc3BhY2UgZm9yIHNlbWljb2xvbgotbm9scSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbm8gb3V0ZGVudCBsb25nIHF1b3RlcwotYmJhbyAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYnJlYWsgYmVmb3JlIGFsbCBvcGVyYXRvcnMKLW5vbGEgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG5vIG91dGRlbnQgbGFiZWxzCi1uZG5sICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBubyBkZWxldGUgb2xkIG5ld2xpbmVzCi1jYWI9MCAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjb21tYSBhcnJvdyBicmVha3BvaW50cwotc2JjcD0iXiMgKFJvdGhlciBPU1N8RU8pIiAgICAgICMgdHJlYXQgcGF0dGVybnMgIiMgUm90aGVyIE9TUyIgYW5kICIjIEVPIiAocGFja2FnZSBtYXJrZXJzKSBhcyBzdGF0aWMgYmxvY2sgY29tbWVudHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgc2VlIHNlY3Rpb24gJ1N0YXRpYyBCbG9jayBDb21tZW50cycgaW4gcGVybHRpZHkgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvCi0tY2hhcmFjdGVyLWVuY29kaW5nPW5vbmUK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/PO/DocbookLint.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBPOjpEb2Nib29rTGludDsKCiMKIyBQZXJmb3JtIHNvbWUgcXVhbGl0eSBjaGVja3Mgb24gcG8gZmlsZXMuCiMKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkJhc2UpOwoKdXNlIExvY2FsZTo6UE8gICgpOwp1c2UgWE1MOjpQYXJzZXIgKCk7CgpzdWIgdmFsaWRhdGVfZmlsZSB7CiAgICBteSAoICRTZWxmLCAkRmlsZW5hbWUgKSA9IEBfOwoKICAgIHJldHVybiBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZCggRmlsZW5hbWUgPT4gJEZpbGVuYW1lICk7CgogICAgbXkgJElzRG9jYm9va1RyYW5zbGF0aW9uID0gJEZpbGVuYW1lID1+IG17L2RvYy19c214OwogICAgbXkgJFN0cmluZ3MgICAgICAgICAgICAgID0gTG9jYWxlOjpQTy0+bG9hZF9maWxlX2FzYXJyYXkoJEZpbGVuYW1lKTsKCiAgICBteSAkRXJyb3JNZXNzYWdlOwoKICAgIFNUUklORzoKICAgIGZvciBteSAkU3RyaW5nICggQHsgJFN0cmluZ3MgLy8gW10gfSApIHsKCiAgICAgICAgbmV4dCBTVFJJTkcgaWYgJFN0cmluZy0+ZnV6enkoKTsKCiAgICAgICAgbXkgJFNvdXJjZSA9ICRTdHJpbmctPmRlcXVvdGUoICRTdHJpbmctPm1zZ2lkKCkgKTsKICAgICAgICBuZXh0IFNUUklORyBpZiAhJFNvdXJjZTsKICAgICAgICBteSAkVHJhbnNsYXRpb24gPSAkU3RyaW5nLT5kZXF1b3RlKCAkU3RyaW5nLT5tc2dzdHIoKSApOwogICAgICAgIG5leHQgU1RSSU5HIGlmICEkVHJhbnNsYXRpb247CgogICAgICAgIGlmICgkSXNEb2Nib29rVHJhbnNsYXRpb24pIHsKCiAgICAgICAgICAgICMgIyBEb24ndCB2YWxpZGF0ZSBjb250ZW50cyBvZiA8c2NyZWVuPiB0YWdzLCB0aGV5IHNob3VsZCBoYXZlIENEQVRBCiAgICAgICAgICAgICNuZXh0IFNUUklORyBpZiAkU3RyaW5nLT5hdXRvbWF0aWMoKSAmJiAkU3RyaW5nLT5hdXRvbWF0aWMgPX4gbXs8c2NyZWVuPiR9c214OwogICAgICAgICAgICBuZXh0IFNUUklORyBpZiAkU3RyaW5nLT5hdXRvbWF0aWMoKSAmJiAkU3RyaW5nLT5hdXRvbWF0aWMoKSA9fiBte0NEQVRBJH1zbXg7CgogICAgICAgICAgICAjIE9ic29sZXRlIHN0cmluZ3MgbWlnaHQgbG9vc2UgQ0RBVEEgY29tbWVudHMKICAgICAgICAgICAgbmV4dCBTVFJJTkcgaWYgJFN0cmluZy0+b2Jzb2xldGUoKTsKCiAgICAgICAgICAgIG15ICRQYXJzZXIgPSBYTUw6OlBhcnNlci0+bmV3KCk7CiAgICAgICAgICAgIGlmICggIWV2YWwgeyAkUGFyc2VyLT5wYXJzZSgiPGJvb2s+JFRyYW5zbGF0aW9uPC9ib29rPiIpIH0gKSB7CiAgICAgICAgICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICJJbnZhbGlkIFhNTCB0cmFuc2xhdGlvbiBmb3VuZCBpbiBMaW5lOiAiCiAgICAgICAgICAgICAgICAgICAgLiAkU3RyaW5nLT5sb2FkZWRfbGluZV9udW1iZXIoKSAuICJcbiI7CiAgICAgICAgICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICIgIFNvdXJjZTogJFNvdXJjZVxuIjsKICAgICAgICAgICAgICAgICRFcnJvck1lc3NhZ2UgLj0gIiAgVHJhbnNsYXRpb246ICRUcmFuc2xhdGlvblxuIjsKICAgICAgICAgICAgICAgICRFcnJvck1lc3NhZ2UgLj0gIiAgWE1MOjpQYXJzZXIgcHJvZHVjZWQgZXJyb3JzOiAkQFxuIjsKICAgICAgICAgICAgICAgIG5leHQgU1RSSU5HOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkU3RyaXBwZWRTb3VyY2UgPSAkU291cmNlOwogICAgICAgICAgICAkU3RyaXBwZWRTb3VyY2UgPX4gc3s8IS0tLiotLT59e31zbXhnOwoKICAgICAgICAgICAgbXkgQFNvdXJjZVRhZ3MgPSAkU3RyaXBwZWRTb3VyY2UgPX4gbXs8W14+XSo+fXNtZzsKICAgICAgICAgICAgbmV4dCBTVFJJTkcgaWYgIUBTb3VyY2VUYWdzOwogICAgICAgICAgICBteSAlU291cmNlVGFnQ291bnQ7CiAgICAgICAgICAgIEBTb3VyY2VUYWdzID0gbWFwIHsgJF8gPX4gc3tePChbL2EtekEtWl8wLTldKykuKn17JDF9ZXNteGc7ICRfIH0gQFNvdXJjZVRhZ3M7ICAgICMjIG5vIGNyaXRpYyBxdyhDb250cm9sU3RydWN0dXJlczo6UHJvaGliaXRNdXRhdGluZ0xpc3RGdW5jdGlvbnMpCgogICAgICAgICAgICAjIFNvbWUgdGFncyB3aGljaCBkbyBub3QgaGF2ZSB0byBiZSB2YWxpZGF0ZWQgYXMgbG9uZyBhcyB0aGUgeG1sIHN0cnVjdHVyZSBpcyBzdGlsbCB2YWxpZC4KICAgICAgICAgICAgbXkgJUlnbm9yZVRhZ3MgPSAoCiAgICAgICAgICAgICAgICAnZW1waGFzaXMnICAgPT4gMSwKICAgICAgICAgICAgICAgICcvZW1waGFzaXMnICA9PiAxLAogICAgICAgICAgICAgICAgJ2NpdGV0aXRsZScgID0+IDEsCiAgICAgICAgICAgICAgICAnL2NpdGV0aXRsZScgPT4gMSwKICAgICAgICAgICAgICAgICd1bGluaycgICAgICA9PiAxLAogICAgICAgICAgICAgICAgJy91bGluaycgICAgID0+IDEsCiAgICAgICAgICAgICAgICAnbGluaycgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgICcvbGluaycgICAgICA9PiAxLAogICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJyAgID0+IDEsCiAgICAgICAgICAgICAgICAnL2ZpbGVuYW1lJyAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIFNPVVJDRV9UQUc6CiAgICAgICAgICAgIGZvciBteSAkU291cmNlVGFnIChAU291cmNlVGFncykgewogICAgICAgICAgICAgICAgbmV4dCBTT1VSQ0VfVEFHIGlmICRJZ25vcmVUYWdzeyRTb3VyY2VUYWd9OwogICAgICAgICAgICAgICAgJFNvdXJjZVRhZ0NvdW50eyRTb3VyY2VUYWd9Kys7CgogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgbXkgJFNvdXJjZVRhZyAoIHNvcnQga2V5cyAlU291cmNlVGFnQ291bnQgKSB7CiAgICAgICAgICAgICAgICBteSBAVHJhbnNsYXRlZFRhZ3MgICAgID0gJFRyYW5zbGF0aW9uID1+IG17PCRTb3VyY2VUYWdbPnwgXX1zbWc7CiAgICAgICAgICAgICAgICBteSAkVHJhbnNsYXRlZFRhZ0NvdW50ID0gc2NhbGFyIEBUcmFuc2xhdGVkVGFnczsKICAgICAgICAgICAgICAgIGlmICggJFRyYW5zbGF0ZWRUYWdDb3VudCAhPSAkU291cmNlVGFnQ291bnR7JFNvdXJjZVRhZ30gKSB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9yTWVzc2FnZSAuPSAiSW52YWxpZCBYTUwgdHJhbnNsYXRpb24gZm91bmQgaW4gTGluZTogIgogICAgICAgICAgICAgICAgICAgICAgICAuICRTdHJpbmctPmxvYWRlZF9saW5lX251bWJlcigpIC4gIlxuIjsKICAgICAgICAgICAgICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICIgIFNvdXJjZTogJFNvdXJjZVxuIjsKICAgICAgICAgICAgICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICIgIFRyYW5zbGF0aW9uOiAkVHJhbnNsYXRpb25cbiI7CiAgICAgICAgICAgICAgICAgICAgJEVycm9yTWVzc2FnZQogICAgICAgICAgICAgICAgICAgICAgICAuPSAiICBUYWcgPCRTb3VyY2VUYWc+IHdhcyBleHBlY3RlZCAkU291cmNlVGFnQ291bnR7JFNvdXJjZVRhZ30gYnV0IGZvdW5kICRUcmFuc2xhdGVkVGFnQ291bnQgdGltZXMuXG4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFNvdXJjZSBhbmQgdHJhbnNsYXRpb24gc2hvdWxkIGhhdmUgdGhlIHNhbWUgbGlua2VuZCBkZWZpbml0aW9ucy4KICAgICAgICAgICAgbXkgQFNvdXJjZUxpbmtFbmRzID0gJFNvdXJjZSAgICAgID1+IG17PGxpbmtbXj5dK2xpbmtlbmQ9WyInXShbXiciXSspWyciXX1zbXhnOwogICAgICAgICAgICBteSBAVGFyZ2V0TGlua0VuZHMgPSAkVHJhbnNsYXRpb24gPX4gbXs8bGlua1tePl0rbGlua2VuZD1bIiddKFteJyJdKylbJyJdfXNteGc7CgogICAgICAgICAgICBteSAkTGlua0VuZHNBcmVEaWZmZXJlbnQgPSAkU2VsZi0+X0RhdGFEaWZmKAogICAgICAgICAgICAgICAgRGF0YTEgPT4gWyBzb3J0IHsgJGEgY21wICRiIH0gQFNvdXJjZUxpbmtFbmRzIF0sCiAgICAgICAgICAgICAgICBEYXRhMiA9PiBbIHNvcnQgeyAkYSBjbXAgJGIgfSBAVGFyZ2V0TGlua0VuZHMgXSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkTGlua0VuZHNBcmVEaWZmZXJlbnQpIHsKICAgICAgICAgICAgICAgICRFcnJvck1lc3NhZ2UgLj0gIkxpbmtlbmQgZGVmaW5pdGlvbnMgYXJlIGRpZmZlcmVudC5cblNvdXJjZTpcbiRTb3VyY2VcblRyYW5zbGF0aW9uOlxuJFRyYW5zbGF0aW9uXG5cbiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaWYgKCRFcnJvck1lc3NhZ2UpIHsKICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcigiJEVycm9yTWVzc2FnZSIpOwogICAgfQp9CgpzdWIgX0RhdGFEaWZmIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgZm9yIChxdyhEYXRhMSBEYXRhMikpIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskX30gKSB7CiAgICAgICAgICAgIHByaW50IFNUREVSUiAiTmVlZCAkXyFcbiI7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyAnJwogICAgaWYgKCByZWYgJFBhcmFte0RhdGExfSBlcSAnJyAmJiByZWYgJFBhcmFte0RhdGEyfSBlcSAnJyApIHsKCiAgICAgICAgIyBkbyBub3RoaW5nLCBpdCdzIG9rCiAgICAgICAgcmV0dXJuIGlmICFkZWZpbmVkICRQYXJhbXtEYXRhMX0gJiYgIWRlZmluZWQgJFBhcmFte0RhdGEyfTsKCiAgICAgICAgIyByZXR1cm4gZGlmZiwgYmVjYXVzZSBpdHMgZGlmZmVyZW50CiAgICAgICAgcmV0dXJuIDEgaWYgIWRlZmluZWQgJFBhcmFte0RhdGExfSB8fCAhZGVmaW5lZCAkUGFyYW17RGF0YTJ9OwoKICAgICAgICAjIHJldHVybiBkaWZmLCBiZWNhdXNlIGl0cyBkaWZmZXJlbnQKICAgICAgICByZXR1cm4gMSBpZiAkUGFyYW17RGF0YTF9IG5lICRQYXJhbXtEYXRhMn07CgogICAgICAgICMgcmV0dXJuLCBiZWNhdXNlIGl0cyBub3QgZGlmZmVyZW50CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgU0NBTEFSCiAgICBpZiAoIHJlZiAkUGFyYW17RGF0YTF9IGVxICdTQ0FMQVInICYmIHJlZiAkUGFyYW17RGF0YTJ9IGVxICdTQ0FMQVInICkgewoKICAgICAgICAjIGRvIG5vdGhpbmcsIGl0J3Mgb2sKICAgICAgICByZXR1cm4gaWYgIWRlZmluZWQgJHsgJFBhcmFte0RhdGExfSB9ICYmICFkZWZpbmVkICR7ICRQYXJhbXtEYXRhMn0gfTsKCiAgICAgICAgIyByZXR1cm4gZGlmZiwgYmVjYXVzZSBpdHMgZGlmZmVyZW50CiAgICAgICAgcmV0dXJuIDEgaWYgIWRlZmluZWQgJHsgJFBhcmFte0RhdGExfSB9IHx8ICFkZWZpbmVkICR7ICRQYXJhbXtEYXRhMn0gfTsKCiAgICAgICAgIyByZXR1cm4gZGlmZiwgYmVjYXVzZSBpdHMgZGlmZmVyZW50CiAgICAgICAgcmV0dXJuIDEgaWYgJHsgJFBhcmFte0RhdGExfSB9IG5lICR7ICRQYXJhbXtEYXRhMn0gfTsKCiAgICAgICAgIyByZXR1cm4sIGJlY2F1c2UgaXRzIG5vdCBkaWZmZXJlbnQKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBBUlJBWQogICAgaWYgKCByZWYgJFBhcmFte0RhdGExfSBlcSAnQVJSQVknICYmIHJlZiAkUGFyYW17RGF0YTJ9IGVxICdBUlJBWScgKSB7CiAgICAgICAgbXkgQEEgPSBAeyAkUGFyYW17RGF0YTF9IH07CiAgICAgICAgbXkgQEIgPSBAeyAkUGFyYW17RGF0YTJ9IH07CgogICAgICAgICMgY2hlY2sgaWYgdGhlIGNvdW50IGlzIGRpZmZlcmVudAogICAgICAgIHJldHVybiAxIGlmICQjQSBuZSAkI0I7CgogICAgICAgICMgY29tcGFyZSBhcnJheQogICAgICAgIENPVU5UOgogICAgICAgIGZvciBteSAkQ291bnQgKCAwIC4uICQjQSApIHsKCiAgICAgICAgICAgICMgZG8gbm90aGluZywgaXQncyBvawogICAgICAgICAgICBuZXh0IENPVU5UIGlmICFkZWZpbmVkICRBWyRDb3VudF0gJiYgIWRlZmluZWQgJEJbJENvdW50XTsKCiAgICAgICAgICAgICMgcmV0dXJuIGRpZmYsIGJlY2F1c2UgaXRzIGRpZmZlcmVudAogICAgICAgICAgICByZXR1cm4gMSBpZiAhZGVmaW5lZCAkQVskQ291bnRdIHx8ICFkZWZpbmVkICRCWyRDb3VudF07CgogICAgICAgICAgICBpZiAoICRBWyRDb3VudF0gbmUgJEJbJENvdW50XSApIHsKICAgICAgICAgICAgICAgIGlmICggcmVmICRBWyRDb3VudF0gZXEgJ0FSUkFZJyB8fCByZWYgJEFbJENvdW50XSBlcSAnSEFTSCcgKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEgaWYgJFNlbGYtPl9EYXRhRGlmZigKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YTEgPT4gJEFbJENvdW50XSwKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YTIgPT4gJEJbJENvdW50XQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBDT1VOVDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIEhBU0gKICAgIGlmICggcmVmICRQYXJhbXtEYXRhMX0gZXEgJ0hBU0gnICYmIHJlZiAkUGFyYW17RGF0YTJ9IGVxICdIQVNIJyApIHsKICAgICAgICBteSAlQSA9ICV7ICRQYXJhbXtEYXRhMX0gfTsKICAgICAgICBteSAlQiA9ICV7ICRQYXJhbXtEYXRhMn0gfTsKCiAgICAgICAgIyBjb21wYXJlICVBIHdpdGggJUIgYW5kIHJlbW92ZSBpdCBpZiBjaGVja2VkCiAgICAgICAgS0VZOgogICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICVBICkgewoKICAgICAgICAgICAgIyBDaGVjayBpZiBib3RoIGFyZSB1bmRlZmluZWQKICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCAkQXskS2V5fSAmJiAhZGVmaW5lZCAkQnskS2V5fSApIHsKICAgICAgICAgICAgICAgIGRlbGV0ZSAkQXskS2V5fTsKICAgICAgICAgICAgICAgIGRlbGV0ZSAkQnskS2V5fTsKICAgICAgICAgICAgICAgIG5leHQgS0VZOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHJldHVybiBkaWZmLCBiZWNhdXNlIGl0cyBkaWZmZXJlbnQKICAgICAgICAgICAgcmV0dXJuIDEgaWYgIWRlZmluZWQgJEF7JEtleX0gfHwgIWRlZmluZWQgJEJ7JEtleX07CgogICAgICAgICAgICBpZiAoICRBeyRLZXl9IGVxICRCeyRLZXl9ICkgewogICAgICAgICAgICAgICAgZGVsZXRlICRBeyRLZXl9OwogICAgICAgICAgICAgICAgZGVsZXRlICRCeyRLZXl9OwogICAgICAgICAgICAgICAgbmV4dCBLRVk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcmV0dXJuIGlmIHZhbHVlcyBhcmUgZGlmZmVyZW50CiAgICAgICAgICAgIGlmICggcmVmICRBeyRLZXl9IGVxICdBUlJBWScgfHwgcmVmICRBeyRLZXl9IGVxICdIQVNIJyApIHsKICAgICAgICAgICAgICAgIHJldHVybiAxIGlmICRTZWxmLT5fRGF0YURpZmYoCiAgICAgICAgICAgICAgICAgICAgRGF0YTEgPT4gJEF7JEtleX0sCiAgICAgICAgICAgICAgICAgICAgRGF0YTIgPT4gJEJ7JEtleX0KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBkZWxldGUgJEF7JEtleX07CiAgICAgICAgICAgICAgICBkZWxldGUgJEJ7JEtleX07CiAgICAgICAgICAgICAgICBuZXh0IEtFWTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgcmVzdAogICAgICAgIHJldHVybiAxIGlmICVCOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIHJlZiAkUGFyYW17RGF0YTF9IGVxICdSRUYnICYmIHJlZiAkUGFyYW17RGF0YTJ9IGVxICdSRUYnICkgewogICAgICAgIHJldHVybiAxIGlmICRTZWxmLT5fRGF0YURpZmYoCiAgICAgICAgICAgIERhdGExID0+ICR7ICRQYXJhbXtEYXRhMX0gfSwKICAgICAgICAgICAgRGF0YTIgPT4gJHsgJFBhcmFte0RhdGEyfSB9CiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/PO/HTMLTags.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBPOjpIVE1MVGFnczsKCiMKIyBGaWx0ZXIgZm9yYmlkZGVuIEhUTUwgdGFncyBpbiBGcmFtZXdvcmsvUGFja2FnZSB0cmFuc2xhdGlvbiBmaWxlcy4KIwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6QmFzZSk7Cgp1c2UgTG9jYWxlOjpQTyAoKTsKCnN1YiB2YWxpZGF0ZV9maWxlIHsKICAgIG15ICggJFNlbGYsICRGaWxlbmFtZSApID0gQF87CgogICAgcmV0dXJuIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBGaWxlbmFtZSA9PiAkRmlsZW5hbWUgKTsKCiAgICBteSAkSXNEb2Nib29rVHJhbnNsYXRpb24gPSAkRmlsZW5hbWUgPX4gbXsvZG9jLX1zbXg7CiAgICByZXR1cm4gaWYgJElzRG9jYm9va1RyYW5zbGF0aW9uOwoKICAgIG15IEBGb3JiaWRkZW5UYWdzID0gKAoKICAgICAgICAjIERhbmdlcm91cyB0YWdzIHRoYXQgY291bGQgYmUgdXNlZCB3aXRob3V0IGF0dHJpYnV0ZXMuCiAgICAgICAgcXIoXjxzY3JpcHQpaXhtcywKICAgICAgICBxcihePHN0eWxlKWl4bXMsCiAgICAgICAgcXIoXjxhcHBsZXQpaXhtcywKICAgICAgICBxcihePG9iamVjdClpeG1zLAogICAgICAgIHFyKF48c3ZnKWl4bXMsCiAgICAgICAgcXIoXjxlbWJlZClpeG1zLAogICAgICAgIHFyKF48bWV0YSlpeG1zLAogICAgICAgIHFyKF48aW1nKWl4bXMsCiAgICAgICAgcXIoXjx2aWRlbylpeG1zLAoKICAgICAgICAjIEFueSBIVE1MIHRhZyB3aXRoIGFkZGl0aW9uYWwgYXR0cmlidXRlcy4KICAgICAgICBxcihePFtePiBdK1sgXStbXj5dKz0paXhtcywKICAgICk7CgogICAgbXkgJFN0cmluZ3MgPSBMb2NhbGU6OlBPLT5sb2FkX2ZpbGVfYXNhcnJheSgkRmlsZW5hbWUpOwoKICAgIG15ICRFcnJvck1lc3NhZ2U7CgogICAgU1RSSU5HOgogICAgZm9yIG15ICRTdHJpbmcgKCBAeyAkU3RyaW5ncyAvLyBbXSB9ICkgewogICAgICAgIG5leHQgU1RSSU5HIGlmICRTdHJpbmctPmZ1enp5KCk7CgogICAgICAgIG15ICRTb3VyY2UgPSAkU3RyaW5nLT5kZXF1b3RlKCAkU3RyaW5nLT5tc2dpZCgpICkgLy8gJyc7CiAgICAgICAgbmV4dCBTVFJJTkcgaWYgISRTb3VyY2U7CgogICAgICAgIG15ICRUcmFuc2xhdGlvbiA9ICRTdHJpbmctPmRlcXVvdGUoICRTdHJpbmctPm1zZ3N0cigpICkgLy8gJyc7CgogICAgICAgIG15IEBJbnZhbGlkVGFnczsKCiAgICAgICAgZm9yIG15ICRQYXJ0ICggJFNvdXJjZSwgJFRyYW5zbGF0aW9uICkgewogICAgICAgICAgICBteSBAVGFncyA9ICRQYXJ0ID1+IG17PFtePl0qPn1zbWc7CgogICAgICAgICAgICBUQUc6CiAgICAgICAgICAgIGZvciBteSAkVGFnIChAVGFncykgewogICAgICAgICAgICAgICAgZm9yIG15ICRGb3JiaWRkZW5UYWcgKEBGb3JiaWRkZW5UYWdzKSB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBASW52YWxpZFRhZ3MsICRUYWcgaWYgJFRhZyA9fiAkRm9yYmlkZGVuVGFnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBuZXh0IFNUUklORyBpZiAhQEludmFsaWRUYWdzOwoKICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICJJbnZhbGlkIEhUTUwgdGFncyBmb3VuZCBpbiBsaW5lOiAiIC4gJFN0cmluZy0+bG9hZGVkX2xpbmVfbnVtYmVyKCkgLiAiXG4iOwogICAgICAgICRFcnJvck1lc3NhZ2UgLj0gIiAgU291cmNlOiAkU291cmNlXG4iOwogICAgICAgICRFcnJvck1lc3NhZ2UgLj0gIiAgVHJhbnNsYXRpb246ICRUcmFuc2xhdGlvblxuIjsKICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICIgIEludmFsaWQgdGFnczogQEludmFsaWRUYWdzIjsKICAgIH0KCiAgICBpZiAoJEVycm9yTWVzc2FnZSkgewogICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKCIkRXJyb3JNZXNzYWdlIik7CiAgICB9Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/PO/msgfmt.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBPOjptc2dmbXQ7CgojCiMgVXNlIG1zZ2ZtdCB0byBjaGVjayB0aGUgYmFzaWMgdmFsaWRpdHkgb2YgLnBvIGFuZCAucG90IGZpbGVzLgojCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgTW9vOwoKZXh0ZW5kcyBxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpCYXNlKTsKCnN1YiBfYnVpbGRfY21kIHsKICAgIHJldHVybiAnbXNnZm10IC1jIC1vIC9kZXYvbnVsbCc7Cn0KCnN1YiB2YWxpZGF0ZV9maWxlIHsKICAgIG15ICggJFNlbGYsICRGaWxlbmFtZSApID0gQF87CgogICAgcmV0dXJuIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBGaWxlbmFtZSA9PiAkRmlsZW5hbWUgKTsKCiAgICBteSAkQ29tbWFuZCA9IHNwcmludGYoICIlcyAlcyAlcyAyPiYxIiwgJFNlbGYtPmNtZCgpLCAkU2VsZi0+YXJndigpLCAkRmlsZW5hbWUgKTsKICAgIG15ICRPdXRwdXQgID0gYCRDb21tYW5kYDsKCiAgICAjIElmIGV4ZWN1dGlvbiBmYWlsZWQsIHdhcm4gYWJvdXQgaW5zdGFsbGluZyBwYWNrYWdlLgogICAgaWYgKCAke15DSElMRF9FUlJPUl9OQVRJVkV9ID09IC0xICkgewogICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKCInbXNnZm10JyB3YXMgbm90IGZvdW5kLCBwbGVhc2UgaW5zdGFsbCAnZ2V0dGV4dCcuXG4iKTsKICAgIH0KCiAgICBpZiAoICR7XkNISUxEX0VSUk9SX05BVElWRX0gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoIiRPdXRwdXRcbiIpOyAgICAjIG5vbi16ZXJvIGV4aXQgY29kZQogICAgfQp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/SOPM/CodeTags.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlNPUE06OkNvZGVUYWdzOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6QmFzZSk7CgpzdWIgdmFsaWRhdGVfc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICBteSAoIEBTZWxmVXNlZCwgQENEQVRBTWlzc2luZyApOwoKICAgICRDb2RlID1+IHN7CiAgICAgICAgKDxDb2RlW2EtekEtWl0rLio/PikgICAgIyBzdGFydCB0YWcKICAgICAgICAoLio/KSAgICAgICAgICAgICAgICAgICAjIGNvbnRlbnQKICAgICAgICA8L0NvZGVbYS16QS1aXSsuKj8+ICAgICAjIGVuZCB0YWcKICAgIH17CiAgICAgICAgbXkgJFN0YXJ0VGFnID0gJDE7CiAgICAgICAgbXkgJFRhZ0NvbnRlbnQgPSAkMjsKCiAgICAgICAgaWYgKCRUYWdDb250ZW50ID1+IG17XCRTZWxmfXNteCkgewogICAgICAgICAgICBwdXNoIEBTZWxmVXNlZCwgJFN0YXJ0VGFnOwogICAgICAgIH0KICAgICAgICBpZiAoJFRhZ0NvbnRlbnQgIX4gbXsgXEFccyo8IVxbQ0RBVEFcWyB9c214KSB7CiAgICAgICAgICAgIHB1c2ggQENEQVRBTWlzc2luZywgJFN0YXJ0VGFnOwogICAgICAgIH0KCiAgICB9c214Z2U7CgogICAgbXkgJEVycm9yTWVzc2FnZTsKCiAgICBpZiAoQFNlbGZVc2VkKSB7CiAgICAgICAgJEVycm9yTWVzc2FnZQogICAgICAgICAgICAuPSAiRG9uJ3QgdXNlIFwkU2VsZiBpbiA8Q29kZSo+IHRhZ3MuIFVzZSBcJEtlcm5lbDo6T00tPkdldCgpIGluc3RlYWQgdG8gYWNjZXNzIG9iamVjdHMuXG4iOwogICAgICAgICRFcnJvck1lc3NhZ2UgLj0gIldyb25nIHRhZ3MgZm91bmQ6ICIgLiBqb2luKCAnLCAnLCBAU2VsZlVzZWQgKSAuICJcbiI7CiAgICB9CgogICAgaWYgKEBDREFUQU1pc3NpbmcpIHsKICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICI8Q29kZSo+IHRhZ3Mgc2hvdWxkIGFsd2F5cyBiZSB3cmFwcGVkIGluIENEQVRBIHNlY3Rpb25zLlxuIjsKICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICJXcm9uZyB0YWdzIGZvdW5kOiAiIC4gam9pbiggJywgJywgQFNlbGZVc2VkICkgLiAiXG4iOwogICAgfQoKICAgICMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6Ok9iamVjdERlcGVuZGVuY2llcykKICAgIG15ICRFeGFtcGxlID0gPDwnRU9GJzsKSGVyZSBpcyBhIHZhbGlkIGV4YW1wbGUgdGFnOgogICAgPENvZGVJbnN0YWxsIFR5cGU9InBvc3QiPjwhW0NEQVRBWwogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ3Zhcjo6cGFja2FnZXNldHVwOjpNeVBhY2thZ2UnKS0+Q29kZUluc3RhbGwoKTsKICAgIF1dPjwvQ29kZUluc3RhbGw+CkVPRgoKICAgIGlmICgkRXJyb3JNZXNzYWdlKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoIiRFcnJvck1lc3NhZ2VcbiRFeGFtcGxlIik7CiAgICB9Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/SOPM/FileList.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlNPUE06OkZpbGVMaXN0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6QmFzZSk7CgojIFRoaXMgbW9kdWxlIHZlcmlmaWVzOgojICAgLSB0aGF0IGFsbCBwYWNrYWdlZCBmaWxlcyBvZiBhbiBTT1BNIGFyZSBhdmFpbGFibGUsCiMgICAtIHRoYXQgdGhlIFNPUE0gZG9lcyBub3QgdHJ5IHRvIGNyZWF0ZSBuZXcgdG9wbGV2ZWwgZmlsZXMgb3IgZGlyZWN0b3JpZXMgaW4gL29wdC9vdG9ibywKIyAgIC0gdGhhdCBhbGwgZmlsZXMgaW4gYSB2YWxpZCB0b3BsZXZlbCBkaXJlY3RvcnkgYXJlIGFsc28gcGFja2FnZWQgKGV4Y2VwdCBmb3IgZG9jdW1lbnRhdGlvbikuCgpzdWIgdmFsaWRhdGVfc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICBteSAoICRFcnJvck1lc3NhZ2VNaXNzaW5nRmlsZXMsICRFcnJvck1lc3NhZ2VVbnBhY2thZ2VkRmlsZXMsICRFcnJvck1lc3NhZ2VGb3JiaWRkZW5Ub3BsZXZlbCApOwoKICAgICMgU3RhcnRpbmcgd2l0aCBPVE9CTyAxMC4wIG9uLCBwYWNrYWdlcyBjYW5ub3QgY3JlYXRlIG5ldyB0b3BsZXZlbCBkaXJlY3Rvcmllcy9maWxlcwogICAgIyAgYmVjYXVzZSBvZiBzdHJpY3RlciBwZXJtaXNzaW9ucy4KICAgIG15ICRBbGxvd090aGVyVG9wbGV2ZWxFbnRyaWVzID0gMDsKCiAgICBteSBAU09QTUZpbGVMaXN0OwoKICAgICMgT25seSB2YWxpZGF0ZSBmaWxlcyBpbiBzdWJkaXJlY3RvcmllcyB0aGF0IGFyZSBhY3RpdmUgZm9yIGNoZWNraW5nIGJ5CiAgICAjICAgZGVmYXVsdCBvciBhY3R1YWxseSBhcHBlYXIgb24gdGhlIGxpc3Qgb2YgcGFja2FnZWQgZmlsZXMuCiAgICBteSAlVG9wbGV2ZWxEaXJlY3RvcmllcyA9ICgKICAgICAgICBiaW4gICAgICA9PiAxLAogICAgICAgIEN1c3RvbSAgID0+IDEsCiAgICAgICAgZG9jICAgICAgPT4gMSwKICAgICAgICBGcm9udGVuZCA9PiAxLAogICAgICAgIEtlcm5lbCAgID0+IDEsCiAgICAgICAgc2NyaXB0cyAgPT4gMSwKICAgICAgICB2YXIgICAgICA9PiAxLAogICAgKTsKCiAgICAjIEdvIHRyb3VnaCB0aGUgZmlsZXMgb24gdGhlIFNPUE0gZmlsZSBsaXN0CiAgICBMSU5FOgogICAgZm9yIG15ICRMaW5lICggc3BsaXQgL1xuLywgJENvZGUgKSB7CiAgICAgICAgaWYgKCAkTGluZSA9fiBtLzxGaWxlLipMb2NhdGlvbj0iKFteIl0rKSIvICkgewogICAgICAgICAgICBteSAkRmlsZSA9ICQxOwogICAgICAgICAgICBwdXNoIEBTT1BNRmlsZUxpc3QsICRGaWxlOwoKICAgICAgICAgICAgbXkgKCRUb3BsZXZlbERpcmVjdG9yeSkgPSAkRmlsZSA9fiBte14oW14vXSspL307CgogICAgICAgICAgICAjIFRvcGxldmVsIGZpbGUKICAgICAgICAgICAgaWYgKCAhJFRvcGxldmVsRGlyZWN0b3J5ICkgewogICAgICAgICAgICAgICAgbmV4dCBMSU5FIGlmICRBbGxvd090aGVyVG9wbGV2ZWxFbnRyaWVzOwoKICAgICAgICAgICAgICAgICMgUmVqZWN0IG5ldyB0b3BsZXZlbCBmaWxlcyBmb3IgT1RPQk8gMy4zKwogICAgICAgICAgICAgICAgJEVycm9yTWVzc2FnZUZvcmJpZGRlblRvcGxldmVsIC49ICIkRmlsZVxuIjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBSZWplY3QgbmV3IHRvcGxldmVsIGRpcmVjdG9yaWVzIGZvciBPVE9CTyAzLjMrCiAgICAgICAgICAgIGVsc2lmICggISRBbGxvd090aGVyVG9wbGV2ZWxFbnRyaWVzICYmICEkVG9wbGV2ZWxEaXJlY3Rvcmllc3skVG9wbGV2ZWxEaXJlY3Rvcnl9ICkgewogICAgICAgICAgICAgICAgJEVycm9yTWVzc2FnZUZvcmJpZGRlblRvcGxldmVsIC49ICIkRmlsZVxuIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICMgQWNjZXB0IG5ldyB0b3BsZXZlbCBkaXJlY3RvcmllcyBmb3Igb2xkZXIgdmVyc2lvbnMsIGJ1dCB0aGVuCiAgICAgICAgICAgICAgICAjICAgY2hlY2sgdGhhdCBhbGwgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgbXVzdCBiZSBvbiB0aGUgU09QTSBmaWxlIGxpc3QuCiAgICAgICAgICAgICAgICAkVG9wbGV2ZWxEaXJlY3Rvcmllc3skVG9wbGV2ZWxEaXJlY3Rvcnl9ID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIE5vdyBjaGVjayB3aGljaCBmaWxlcyBvbiB0aGUgU09QTSBsaXN0IGFyZSBub3QgYXZhaWxhYmxlLgogICAgRklMRToKICAgIGZvciBteSAkRmlsZSAoQFNPUE1GaWxlTGlzdCkgewogICAgICAgIGlmICggIWdyZXAgeyAkXyBlcSAkRmlsZSB9IEBUaWR5QWxsOjpPVE9CTzo6RmlsZUxpc3QgKSB7CiAgICAgICAgICAgICRFcnJvck1lc3NhZ2VNaXNzaW5nRmlsZXMgLj0gIiRGaWxlXG4iOwogICAgICAgIH0KICAgIH0KCiAgICAjIEZvciBhbGwgYWxsb3dlZCB0b3BsZXZlbCBkaXJlY3RvcmllcywgZXZlcnkgZmlsZSB0aGF0IGlzIHByZXNlbnQKICAgICMgICBtdXN0IGFsc28gYmUgcGFja2FnZWQuCiAgICBGSUxFOgogICAgZm9yIG15ICRGaWxlIChAVGlkeUFsbDo6T1RPQk86OkZpbGVMaXN0KSB7CgogICAgICAgIG15ICgkVG9wbGV2ZWxEaXJlY3RvcnkpID0gJEZpbGUgPX4gbXteKFteL10rKS99OwogICAgICAgIG5leHQgRklMRSBpZiAhJFRvcGxldmVsRGlyZWN0b3J5OwogICAgICAgIG5leHQgRklMRSBpZiAhJFRvcGxldmVsRGlyZWN0b3JpZXN7JFRvcGxldmVsRGlyZWN0b3J5fTsKCiAgICAgICAgIyBTa2lwIGRvY3VtZW50YXRpb24gZmlsZXMsIHRoZXNlIGRvbid0IGhhdmUgdG8gYmUgb24gdGhlIFNPUE0gbGlzdC4KICAgICAgICBuZXh0IEZJTEUgaWYgJEZpbGUgPX4gbXtcQSBkb2MvIH1tc3g7CgogICAgICAgICMgQWxsb3cgdW5wYWNrYWdlZCBoaWRkZW4gZmlsZXMuCiAgICAgICAgbmV4dCBGSUxFIGlmICRGaWxlID1+IG17L1suXX1tc3g7CgogICAgICAgIGlmICggIWdyZXAgeyAkXyBlcSAkRmlsZSB9IEBTT1BNRmlsZUxpc3QgKSB7CiAgICAgICAgICAgICRFcnJvck1lc3NhZ2VVbnBhY2thZ2VkRmlsZXMgLj0gIiRGaWxlXG4iOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkRXJyb3JNZXNzYWdlOwoKICAgIGlmICgkRXJyb3JNZXNzYWdlRm9yYmlkZGVuVG9wbGV2ZWwpIHsKICAgICAgICAkRXJyb3JNZXNzYWdlIC49IDw8IkVPRiI7ClRoZSBmb2xsb3dpbmcgcGFja2FnZWQgZmlsZXMgdHJ5IHRvIGNyZWF0ZSBuZXcgdG9wbGV2ZWwgZmlsZXMgb3IgZGlyZWN0b3JpZXMgaW4gL29wdC9vdG9ibywgd2hpY2ggaXMgbm90IHBvc3NpYmxlCmR1ZSB0byBwZXJtaXNzaW9uIHJlc3RyaWN0aW9uczoKJEVycm9yTWVzc2FnZUZvcmJpZGRlblRvcGxldmVsCkVPRgogICAgfQoKICAgIGlmICgkRXJyb3JNZXNzYWdlTWlzc2luZ0ZpbGVzKSB7CiAgICAgICAgJEVycm9yTWVzc2FnZSAuPSA8PCJFT0YiOwpUaGUgZm9sbG93aW5nIGZpbGVzIHdlcmUgbGlzdGVkIGluIHRoZSBTT1BNIGJ1dCBub3QgZm91bmQgaW4gdGhlIGRpcmVjdG9yeToKJEVycm9yTWVzc2FnZU1pc3NpbmdGaWxlcwpFT0YKICAgIH0KCiAgICBpZiAoJEVycm9yTWVzc2FnZVVucGFja2FnZWRGaWxlcykgewogICAgICAgICRFcnJvck1lc3NhZ2UgLj0gPDwiRU9GIjsKVGhlIGZvbGxvd2luZyBmaWxlcyB3ZXJlIGZvdW5kIGluIHRoZSBkaXJlY3RvcnkgYnV0IG5vdCBsaXN0ZWQgaW4gdGhlIFNPUE06CiRFcnJvck1lc3NhZ2VVbnBhY2thZ2VkRmlsZXMKRU9GCiAgICB9CgogICAgaWYgKCRFcnJvck1lc3NhZ2UpIHsKICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcigiJEVycm9yTWVzc2FnZSIpOwogICAgfQp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/SOPM/FileRights.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlNPUE06OkZpbGVSaWdodHM7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgTW9vOwoKZXh0ZW5kcyBxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpCYXNlKTsKCnN1YiB2YWxpZGF0ZV9zb3VyY2UgewogICAgbXkgKCAkU2VsZiwgJENvZGUgKSA9IEBfOwoKICAgIHJldHVybiBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZCggQ29kZSA9PiAkQ29kZSApOwoKICAgICMgc3RyaWN0IHBlcm1pc3Npb24gY2hlY2tzIHN0YXJ0aW5nIHdpdGggT1RPQk8gMTAKICAgIG15ICRFeGVjdXRhYmxlUGVybWlzc2lvbkNoZWNrID0gcXJ7UGVybWlzc2lvbj0iNzcwIn07CiAgICBteSAkU3RhdGljUGVybWlzc2lvbkNoZWNrICAgICA9IHFye1Blcm1pc3Npb249IjY2MCJ9OwogICAgbXkgJEV4cGxhbmF0aW9uICAgICAgICAgICAgICAgPSAnQSA8RmlsZT4tVGFnIGhhcyB3cm9uZyBwZXJtaXNzaW9ucy4gU2NyaXB0IGZpbGVzIG5vcm1hbGx5IG5lZWQgNzcwIHJpZ2h0cywgdGhlIG90aGVycyA2NjAuJzsKCiAgICAjIyBBIGxvdCBtb3JlIGxlbmllbnQgYmVmb3JlIE9UT0JPIDEwICh3b3JsZCBwZXJtaXNzaW9ucykKICAgICNpZiAoICRTZWxmLT5Jc0ZyYW1ld29ya1ZlcnNpb25MZXNzVGhhbiggNiwgMCApICkgewogICAgIyAgICAkRXhlY3V0YWJsZVBlcm1pc3Npb25DaGVjayA9IHFye1Blcm1pc3Npb249Ijc1NSJ9OwogICAgIyAgICAkU3RhdGljUGVybWlzc2lvbkNoZWNrICAgICA9IHFye1Blcm1pc3Npb249IjY0NCJ9OwogICAgIyAgICAkRXhwbGFuYXRpb24gPSAnQSA8RmlsZT4tVGFnIGhhcyB3cm9uZyBwZXJtaXNzaW9ucy4gU2NyaXB0IGZpbGVzIG5vcm1hbGx5IG5lZWQgNzU1IHJpZ2h0cywgdGhlIG90aGVycyA2NDQuJzsKICAgICN9CgogICAgbXkgKCAkRXJyb3JNZXNzYWdlLCAkQ291bnRlciApOwoKICAgIExJTkU6CiAgICBmb3IgbXkgJExpbmUgKCBzcGxpdCAvXG4vLCAkQ29kZSApIHsKICAgICAgICAkQ291bnRlcisrOwogICAgICAgIG5leHQgTElORSBpZiAkTGluZSAhfiBtLzxGaWxlLipcLz4vOwogICAgICAgIGlmICggJExpbmUgPX4gbS88RmlsZS4qTG9jYXRpb249IihbXiJdKykiLipcLz4vICkgewogICAgICAgICAgICBpZiAoICQxICYmICQxID1+IC9cLihwbHxzaHxmcGx8cHNnaXxzaCkkLyApIHsKICAgICAgICAgICAgICAgIGlmICggJExpbmUgIX4gJEV4ZWN1dGFibGVQZXJtaXNzaW9uQ2hlY2sgKSB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9yTWVzc2FnZSAuPSAiTGluZSAkQ291bnRlcjogJExpbmVcbiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCAkTGluZSAhfiAkU3RhdGljUGVybWlzc2lvbkNoZWNrICkgewogICAgICAgICAgICAgICAgICAgICRFcnJvck1lc3NhZ2UgLj0gIkxpbmUgJENvdW50ZXI6ICRMaW5lXG4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmICgkRXJyb3JNZXNzYWdlKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoPDwiRU9GIik7CiRFeHBsYW5hdGlvbgokRXJyb3JNZXNzYWdlCkVPRgogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/SOPM/Name.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlNPUE06Ok5hbWU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgRmlsZTo6QmFzZW5hbWU7Cgp1c2UgTW9vOwoKZXh0ZW5kcyBxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpCYXNlKTsKCnN1YiB2YWxpZGF0ZV9maWxlIHsKICAgIG15ICggJFNlbGYsICRGaWxlbmFtZSApID0gQF87CgogICAgcmV0dXJuIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBGaWxlbmFtZSA9PiAkRmlsZW5hbWUgKTsKICAgIG15ICRDb2RlID0gJFNlbGYtPl9HZXRGaWxlQ29udGVudHMoJEZpbGVuYW1lKTsKCiAgICBteSAoJE5hbWVPZlRhZykgPSAkQ29kZSA9fiBtLzxOYW1lPihbXjw+XSspPFwvTmFtZT4vOwogICAgbXkgJE5hbWVPZkZpbGUgPSBzdWJzdHIoIGJhc2VuYW1lKCRGaWxlbmFtZSksIDAsIC01ICk7ICAgICAjIGN1dCBvZmYgLnNvcG0KCiAgICBpZiAoICROYW1lT2ZUYWcgbmUgJE5hbWVPZkZpbGUgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoPDwiRU9GIik7ClRoZSBtb2R1bGUgbmFtZSAkTmFtZU9mVGFnIGlzIG5vdCBlcXVhbCB0byB0aGUgbmFtZSBvZiB0aGUgLnNvcG0gZmlsZSAoJE5hbWVPZkZpbGUpLgpFT0YKICAgIH0KfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/SOPM/PackageRequired.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlNPUE06OlBhY2thZ2VSZXF1aXJlZDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkJhc2UpOwoKc3ViIHZhbGlkYXRlX3NvdXJjZSB7CiAgICBteSAoICRTZWxmLCAkQ29kZSApID0gQF87CgogICAgcmV0dXJuIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBDb2RlID0+ICRDb2RlICk7CgogICAgaWYgKCAkQ29kZSA9fiBtezxQYWNrYWdlUmVxdWlyZWQ+fXNteCApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcig8PCJFT0YiKTsKWW91IHVzZSB0aGUgYXR0cmlidXRlIFBhY2thZ2VSZXF1aXJlZCB3aXRob3V0IGEgdmVyc2lvbiB0YWcuClVzZTogXCI8UGFja2FnZVJlcXVpcmVkIFZlcnNpb249IjEuMS4xIj5OZXdQYWNrYWdlPC9QYWNrYWdlUmVxdWlyZWQ+CkVPRgogICAgfQp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/SOPM/RequiredElements.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlNPUE06OlJlcXVpcmVkRWxlbWVudHM7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgTW9vOwoKZXh0ZW5kcyBxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpCYXNlKTsKCnN1YiB0cmFuc2Zvcm1fc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gJENvZGUgaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICAjIFJlcGxhY2UgT1RPQk8gR21iSCB3aXRoIFJvdGhlciBPU1MgR21iSAogICAgJENvZGUgPX4gc3sgT1RPQk8gWyBdKyBHbWJIIH17Um90aGVyIE9TUyBHbWJIfXhtc2c7CgogICAgIyBnZXQgdmVuZG9yCiAgICBteSAkVmVuZG9yID0gJyc7CiAgICBpZiAoICRDb2RlID1+IC88VmVuZG9yPig/PFZlbmRvcj5bXjw+XSspPFwvVmVuZG9yPi8gKSB7CiAgICAgICAgJFZlbmRvciA9ICQre1ZlbmRvcn07CiAgICB9CgogICAgIyBSZXBsYWNlIDxVUkw+aHR0cDovL290b2JvLm9yZy88L1VSTD4gd2l0aCA8VVJMPmh0dHBzOi8vb3RvYm8ub3JnLzwvVVJMPgogICAgaWYgKCAkVmVuZG9yIGVxICdSb3RoZXIgT1NTIEdtYkgnICkgewogICAgICAgICRDb2RlID1+IHN7IF4gKCBccyogKSBcPCBVUkwgXD4gLis/IFw8IFwvIFVSTCBcPiB9eyQxPFVSTD5odHRwczovL290b2JvLmlvLzwvVVJMPn14bXNnOwogICAgfQoKICAgICMgUmVwbGFjZSBWZXJzaW9uCiAgICAkQ29kZSA9fiBzeyA8VmVyc2lvbj4gW148PlxuXSogPFwvVmVyc2lvbj4gfXs8VmVyc2lvbj4wLjAuMDwvVmVyc2lvbj59eG1zZzsKCiAgICAjIGNsZWFudXAgZmlsZSB0YWdzCiAgICAkQ29kZSA9fiBzeyAiXC8+IH17IiBcLz59eG1zZzsKICAgICRDb2RlID1+IHN7ICI+PFwvRmlsZT4gfXsiIFwvPn14bXNnOwogICAgJENvZGUgPX4gc3sKICAgICAgICBeICggWyBdKiA8RmlsZSApIFsgXSsgKCBMb2NhdGlvbj0iIFteIDw+XG5dKyAiICkgWyBdKyAoIFBlcm1pc3Npb249IlxkXGRcZCIgKSBbIF0rICggXC8+ICkKICAgIH17JDEgJDMgJDIgJDR9eG1zZzsKCiAgICAjIFJlbW92ZSBCdWlsZEhvc3QgYW5kIEJ1aWxkRGF0ZSB0YWdzCiAgICAkQ29kZSA9fiBzeyA8QnVpbGRIb3N0PiBbXjw+XG5dKiA8XC9CdWlsZEhvc3Q+IH17fXhtc2c7CiAgICAkQ29kZSA9fiBzeyA8QnVpbGREYXRlPiBbXjw+XG5dKiA8XC9CdWlsZERhdGU+IH17fXhtc2c7CgogICAgIyBSZW1vdmUgQ2hhbmdlTG9nIHRhZ3MKICAgICRDb2RlID1+IHN7IDxDaGFuZ2VMb2c+IFtePD5cbl0qIDxcL0NoYW5nZUxvZz4gfXt9eG1zZzsKCiAgICByZXR1cm4gJENvZGU7Cn0KCnN1YiB2YWxpZGF0ZV9zb3VyY2UgewogICAgbXkgKCAkU2VsZiwgJENvZGUgKSA9IEBfOwoKICAgIHJldHVybiBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZCggQ29kZSA9PiAkQ29kZSApOwoKICAgIG15ICRFcnJvck1lc3NhZ2U7CgogICAgbXkgJE5hbWUgICAgICAgICAgICA9IDA7CiAgICBteSAkVmVyc2lvbiAgICAgICAgID0gMDsKICAgIG15ICRDb3VudGVyICAgICAgICAgPSAwOwogICAgbXkgJEZyYW1ld29yayAgICAgICA9IDA7CiAgICBteSAkVmVuZG9yICAgICAgICAgID0gMDsKICAgIG15ICRVUkwgICAgICAgICAgICAgPSAwOwogICAgbXkgJExpY2Vuc2UgICAgICAgICA9IDA7CiAgICBteSAkQnVpbGREYXRlICAgICAgID0gMDsKICAgIG15ICRCdWlsZEhvc3QgICAgICAgPSAwOwogICAgbXkgJERlc2NyaXB0aW9uRU4gICA9IDA7CiAgICBteSAkVGFibGUgICAgICAgICAgID0gMDsKICAgIG15ICREYXRhYmFzZVVwZ3JhZGUgPSAwOwogICAgbXkgJE5hbWVMZW5ndGggICAgICA9IDA7CiAgICBteSAkRG93bmxvYWRGbGFnICAgID0gMDsKICAgIG15ICRCdWlsZEZsYWcgICAgICAgPSAwOwogICAgbXkgJFBhY2thZ2VOYW1lICAgICA9ICcnOwoKICAgIG15ICRUYWJsZU5hbWVMZW5ndGggPSAzMDsKCiAgICBteSBAQ29kZUxpbmVzID0gc3BsaXQgL1xuLywgJENvZGU7CgogICAgZm9yIG15ICRMaW5lIChAQ29kZUxpbmVzKSB7CiAgICAgICAgJENvdW50ZXIrKzsKICAgICAgICBpZiAoICRMaW5lID1+IC88TmFtZT4oW148Pl0rKTxcL05hbWU+LyApIHsKCiAgICAgICAgICAgICROYW1lICAgICAgICA9IDE7CiAgICAgICAgICAgICRQYWNrYWdlTmFtZSA9ICQxOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRMaW5lID1+IC88RGVzY3JpcHRpb24gTGFuZz0iZW4iPltePD5dKzxcL0Rlc2NyaXB0aW9uPi8gKSB7CiAgICAgICAgICAgICREZXNjcmlwdGlvbkVOID0gMTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkTGluZSA9fiAvPExpY2Vuc2U+KFtePD5dKyk8XC9MaWNlbnNlPi8gKSB7CiAgICAgICAgICAgICRMaWNlbnNlID0gMTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkTGluZSA9fiAvPFVSTD4oW148Pl0rKTxcL1VSTD4vICkgewogICAgICAgICAgICAkVVJMID0gMTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkTGluZSA9fiAvPEJ1aWxkSG9zdD5bXjw+XSo8XC9CdWlsZEhvc3Q+LyApIHsKICAgICAgICAgICAgJEJ1aWxkSG9zdCA9IDE7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJExpbmUgPX4gLzxCdWlsZERhdGU+W148Pl0qPFwvQnVpbGREYXRlPi8gKSB7CiAgICAgICAgICAgICRCdWlsZERhdGUgPSAxOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRMaW5lID1+IC88VmVuZG9yPihbXjw+XSspPFwvVmVuZG9yPi8gKSB7CiAgICAgICAgICAgICRWZW5kb3IgPSAxOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRMaW5lID1+IG17IDxGcmFtZXdvcmsgKD86IFsgXSsgW148Pl0qICk/ID4gKCBbXjw+XSsgKSA8XC9GcmFtZXdvcms+IH14bXMgKSB7CiAgICAgICAgICAgICRGcmFtZXdvcmsgPSAxOwoKICAgICAgICAgICAgbXkgJEZyYW1ld29ya1ZlcnNpb24gPSAkMTsKCiAgICAgICAgICAgIGlmICggJEZyYW1ld29ya1ZlcnNpb24gIX4gbXsgXGQrIFwuIFxkKyBcLiBbeFxkXSsgfXhtcyApIHsKICAgICAgICAgICAgICAgICRFcnJvck1lc3NhZ2UgLj0gIlZlcnNpb24gbmVlZHMgdG8gaGF2ZSB0aGUgZm9ybWF0IDAuMC54IG9yIDAuMC4wIVxuIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRMaW5lID1+IC88VmVyc2lvbj4oW148Pl0rKTxcL1ZlcnNpb24+LyApIHsKICAgICAgICAgICAgJFZlcnNpb24gPSAxOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRMaW5lID1+IC88RmlsZShbXjw+XSspPihbXjw+XSopPFwvRmlsZT4vICkgewogICAgICAgICAgICBteSAkQXR0cmlidXRlcyA9ICQxOwogICAgICAgICAgICBteSAkQ29udGVudCAgICA9ICQyOwogICAgICAgICAgICBpZiAoICRDb250ZW50IG5lICcnICkgewogICAgICAgICAgICAgICAgJEVycm9yTWVzc2FnZSAuPSAiRG9uJ3QgaW5zZXJ0IHNvbWV0aGluZyBiZXR3ZWVuIDxGaWxlPjxcL0ZpbGU+IVxuIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICRBdHRyaWJ1dGVzID1+IC8oVHlwZXxFbmNvZGUpPS8gKSB7CiAgICAgICAgICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICJEb24ndCB1c2UgdGhlIGF0dHJpYnV0ZSAnVHlwZScgb3IgJ0VuY29kZScgaW4gPEZpbGU+VGFncyFcbiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAkQXR0cmlidXRlcyA9fiAvTG9jYXRpb249Lis/XC5zb3BtLyApIHsKICAgICAgICAgICAgICAgICRFcnJvck1lc3NhZ2UgLj0gIkl0IGlzIHNlbnNlbGVzcyB0byBpbmNsdWRlIC5zb3BtLWZpbGVzIGluIGEgb3BtISAtPiAkTGluZSI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkTGluZSA9fiAvKDxUYWJsZSAuKz8+fDxcL1RhYmxlPikvICkgewogICAgICAgICAgICAkVGFibGUgPSAxOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRMaW5lID1+IC88RGF0YWJhc2VVcGdyYWRlPi8gKSB7CiAgICAgICAgICAgICREYXRhYmFzZVVwZ3JhZGUgPSAxOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRMaW5lID1+IC88XC9EYXRhYmFzZVVwZ3JhZGU+LyApIHsKICAgICAgICAgICAgJERhdGFiYXNlVXBncmFkZSA9IDA7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJExpbmUgPX4gLzxUYWJsZS4rPz4vICkgewogICAgICAgICAgICBpZiAoICREYXRhYmFzZVVwZ3JhZGUgJiYgJExpbmUgPX4gLzxUYWJsZS8gJiYgJExpbmUgIX4gL1ZlcnNpb249LyApIHsKICAgICAgICAgICAgICAgICRFcnJvck1lc3NhZ2UKICAgICAgICAgICAgICAgICAgICAuPSAiSWYgeW91IHVzZSA8VGFibGUuLi4gaW4gYSA8RGF0YWJhc2VVcGdyYWRlPiBjb250ZXh0IHlvdSBuZWVkIHRvIGhhdmUgYSBWZXJzaW9uIGF0dHJpYnV0ZSB3aXRoIHRoZSBiZWdpbm5pbmcgdmVyc2lvbiB3aGVyZSB0aGlzIGNoYW5nZSBpcyBuZWVkZWQgKGUuIGcuIDxUYWJsZUFsdGVyIE5hbWU9XCJzb21lX3RhYmxlXCIgVmVyc2lvbj1cIjEuMC42XCI+KSFcbiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICggJExpbmUgPX4gLzwoQ29sdW1uLip8VGFibGVDcmVhdGUuKikgTmFtZT0iKC4rPykiLyApIHsKICAgICAgICAgICAgJE5hbWUgPSAkMjsKICAgICAgICAgICAgaWYgKCBsZW5ndGggJE5hbWUgPiAkVGFibGVOYW1lTGVuZ3RoICkgewogICAgICAgICAgICAgICAgJE5hbWVMZW5ndGggLj0gIkxpbmUgJENvdW50ZXI6ICROYW1lXG4iOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIE9UT0JPIDc6IENoZWNrIFBhY2thZ2VJc0Rvd25sb2FkYWJsZSArIFBhY2thZ2VJc0J1aWxkYWJsZSBmbGFncy4KICAgICAgICBpZiAoICRMaW5lID1+IG17IDxQYWNrYWdlSXNEb3dubG9hZGFibGU+KD86IFxkICk8XC9QYWNrYWdlSXNEb3dubG9hZGFibGU+IH14bXMgKSB7CgogICAgICAgICAgICAkRG93bmxvYWRGbGFnID0gMTsKICAgICAgICB9CgogICAgICAgIGlmICggJExpbmUgPX4gbXsgPFBhY2thZ2VJc0J1aWxkYWJsZT4oPzogXGQgKTxcL1BhY2thZ2VJc0J1aWxkYWJsZT4gfXhtcyApIHsKICAgICAgICAgICAgJEJ1aWxkRmxhZyA9IDE7CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgZm9yIG11bHRpLWxpbmUgZW5nbGlzaCBkZXNjcmlwdGlvbgogICAgaWYgKCAkQ29kZSA9fiAvPERlc2NyaXB0aW9uIExhbmc9ImVuIj48IVxbQ0RBVEFcW1tePD5dK1xdXF0+PFwvRGVzY3JpcHRpb24+L3MgKSB7CiAgICAgICAgJERlc2NyaXB0aW9uRU4gPSAxOwogICAgfQoKICAgIGlmICgkVGFibGUpIHsKICAgICAgICAkRXJyb3JNZXNzYWdlCiAgICAgICAgICAgIC49ICJUaGUgRWxlbWVudCA8VGFibGU+IGlzIG5vdCBhbGxvd2VkIGluIHNvcG0tZmlsZXMuIFBlcmhhcHMgeW91IG1lYW4gPFRhYmxlQ3JlYXRlPiFcbiI7CiAgICB9CiAgICBpZiAoJEJ1aWxkRGF0ZSkgewogICAgICAgICRFcnJvck1lc3NhZ2UgLj0gIjxCdWlsZERhdGU+IG5vIGxvbmdlciB1c2VkIGluIC5zb3BtcyFcbiI7CiAgICB9CiAgICBpZiAoJEJ1aWxkSG9zdCkgewogICAgICAgICRFcnJvck1lc3NhZ2UgLj0gIjxCdWlsZEhvc3Q+IG5vIGxvbmdlciB1c2VkIGluIC5zb3BtcyFcbiI7CiAgICB9CiAgICBpZiAoICEkRGVzY3JpcHRpb25FTiApIHsKICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICJZb3UgaGF2ZSBmb3Jnb3QgdG8gdXNlIHRoZSBlbGVtZW50IDxEZXNjcmlwdGlvbiBMYW5nPVwiZW5cIj4hXG4iOwogICAgfQogICAgaWYgKCAhJE5hbWUgKSB7CiAgICAgICAgJEVycm9yTWVzc2FnZSAuPSAiWW91IGhhdmUgZm9yZ290IHRvIHVzZSB0aGUgZWxlbWVudCA8TmFtZT4hXG4iOwogICAgfQogICAgaWYgKCAhJFZlcnNpb24gKSB7CiAgICAgICAgJEVycm9yTWVzc2FnZSAuPSAiWW91IGhhdmUgZm9yZ290IHRvIHVzZSB0aGUgZWxlbWVudCA8VmVyc2lvbj4hXG4iOwogICAgfQogICAgaWYgKCAhJEZyYW1ld29yayApIHsKICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICJZb3UgaGF2ZSBmb3Jnb3QgdG8gdXNlIHRoZSBlbGVtZW50IDxGcmFtZXdvcms+IVxuIjsKICAgIH0KICAgIGlmICggISRWZW5kb3IgKSB7CiAgICAgICAgJEVycm9yTWVzc2FnZSAuPSAiWW91IGhhdmUgZm9yZ290IHRvIHVzZSB0aGUgZWxlbWVudCA8VmVuZG9yPiFcbiI7CiAgICB9CiAgICBpZiAoICEkVVJMICkgewogICAgICAgICRFcnJvck1lc3NhZ2UgLj0gIllvdSBoYXZlIGZvcmdvdCB0byB1c2UgdGhlIGVsZW1lbnQgPFVSTD4hXG4iOwogICAgfQogICAgaWYgKCAhJExpY2Vuc2UgKSB7CiAgICAgICAgJEVycm9yTWVzc2FnZSAuPSAiWW91IGhhdmUgZm9yZ290IHRvIHVzZSB0aGUgZWxlbWVudCA8TGljZW5zZT4hXG4iOwogICAgfQogICAgaWYgKCROYW1lTGVuZ3RoKSB7CiAgICAgICAgJEVycm9yTWVzc2FnZQogICAgICAgICAgICAuPSAiUGxlYXNlIHVzZSBDb2x1bW4gYW5kIFRhYmxlbmFtZXMgd2l0aCBsZXNzIHRoYW4gJFRhYmxlTmFtZUxlbmd0aCBsZXR0ZXJzIVxuIjsKICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICROYW1lTGVuZ3RoOwogICAgfQoKICAgIGlmICgkRXJyb3JNZXNzYWdlKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoJEVycm9yTWVzc2FnZSk7CiAgICB9CgogICAgcmV0dXJuOwp9CgpzdWIgSXNSZXN0cmljdGVkUGFja2FnZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICVSZXN0cmljdGVkUGFja2FnZXMgPSAoCgogICAgICAgICMgT1RPQk8gRnJlZWJpZSBGZWF0dXJlcyAob3RvYm8ub3JnKQogICAgICAgIEZBUSAgICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgIGlQaG9uZUhhbmRsZSAgICAgICAgICAgICA9PiAxLAogICAgICAgIE1hc3RlclNsYXZlICAgICAgICAgICAgICA9PiAxLAogICAgICAgIE9UT0JPQXBwb2ludG1lbnRDYWxlbmRhciA9PiAxLAogICAgICAgIE9UT0JPQ29kZVBvbGljeSAgICAgICAgICA9PiAxLAogICAgICAgIE9UT0JPTWFzdGVyU2xhdmUgICAgICAgICA9PiAxLAogICAgICAgIFN1cHBvcnQgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgIFN1cnZleSAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgIFN5c3RlbU1vbml0b3JpbmcgICAgICAgICA9PiAxLAogICAgICAgIFRpbWVBY2NvdW50aW5nICAgICAgICAgICA9PiAxLAoKICAgICAgICAjIElUU00gcGFja2FnZXMgKGl0c20ub3RvYm8ub3JnKQogICAgICAgIEdlbmVyYWxDYXRhbG9nICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgSW1wb3J0RXhwb3J0ICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICBJVFNNICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgIElUU01DaGFuZ2VNYW5hZ2VtZW50ICAgICAgICAgID0+IDEsCiAgICAgICAgSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50ICAgPT4gMSwKICAgICAgICBJVFNNQ29yZSAgICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgIElUU01JbmNpZGVudFByb2JsZW1NYW5hZ2VtZW50ID0+IDEsCiAgICAgICAgSVRTTVNlcnZpY2VMZXZlbE1hbmFnZW1lbnQgICAgPT4gMSwKCiAgICAgICAgIyBTVE9STSBwYWNrYWdlcyAoc3Rvcm0ub3RvYm8ub3JnKQogICAgICAgIE9UT0JPU1RPUk0gPT4gMSwKICAgICk7CiAgICByZXR1cm4gMSBpZiAkUmVzdHJpY3RlZFBhY2thZ2VzeyAkUGFyYW17UGFja2FnZX0gfTsKCiAgICAjIEFsbCBwYWNrYWdlcyB3aGljaCBzdGFydCB3aXRoICJPVE9CTyIuCiAgICByZXR1cm4gMSBpZiAkUGFyYW17UGFja2FnZX0gPX4gbXsgXEEgT1RPQk8gLisgfXhtczsKCiAgICByZXR1cm4gMDsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/SOPM/XSDValidator.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlNPUE06OlhTRFZhbGlkYXRvcjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBGaWxlOjpCYXNlbmFtZTsKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkJhc2UpOwoKc3ViIHZhbGlkYXRlX2ZpbGUgewogICAgbXkgKCAkU2VsZiwgJEZpbGVuYW1lICkgPSBAXzsKCiAgICByZXR1cm4gaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIEZpbGVuYW1lID0+ICRGaWxlbmFtZSApOwoKICAgIG15ICRYU0RGaWxlID0gZGlybmFtZShfX0ZJTEVfXykgLiAnLy4uL1N0YXRpY0ZpbGVzL1hTRC9TT1BNLnhzZCc7CgogICAgbXkgJENNRCA9ICJ4bWxsaW50IC0tbm9vdXQgLS1ub25ldCAtLXNjaGVtYSAkWFNERmlsZSI7CgogICAgbXkgJENvbW1hbmQgPSBzcHJpbnRmKCAiJXMgJXMgJXMgMj4mMSIsICRDTUQsICRTZWxmLT5hcmd2KCksICRGaWxlbmFtZSApOwogICAgbXkgJE91dHB1dCAgPSBgJENvbW1hbmRgOwoKICAgICMgSWYgZXhlY3V0aW9uIGZhaWxlZCwgd2FybiBhYm91dCBpbnN0YWxsaW5nIHBhY2thZ2UuCiAgICBpZiAoICR7XkNISUxEX0VSUk9SX05BVElWRX0gPT0gLTEgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoIid4bWxsaW50JyB3YXMgbm90IGZvdW5kLCBwbGVhc2UgaW5zdGFsbCBpdC5cbiIpOwogICAgfQoKICAgIGlmICggJHteQ0hJTERfRVJST1JfTkFUSVZFfSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcigiJE91dHB1dFxuIik7ICAgICMgbm9uLXplcm8gZXhpdCBjb2RlCiAgICB9Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/SQL/ReservedWords.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlNRTDo6UmVzZXJ2ZWRXb3JkczsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkJhc2UpOwoKc3ViIHZhbGlkYXRlX3NvdXJjZSB7CiAgICBteSAoICRTZWxmLCAkQ29kZSApID0gQF87CgogICAgcmV0dXJuIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBDb2RlID0+ICRDb2RlICk7CgogICAgbXkgJFRhYmxlQ3JlYXRlID0gMDsKICAgIG15ICRDb3VudGVyOwoKICAgIGZvciBteSAkTGluZSAoIHNwbGl0KCAvXG4vLCAkQ29kZSApICkgewogICAgICAgICRDb3VudGVyKys7CiAgICAgICAgaWYgKCAkTGluZSA9fiAvPFRhYmxlLyApIHsKICAgICAgICAgICAgJFRhYmxlQ3JlYXRlID0gMTsKICAgICAgICB9CiAgICAgICAgaWYgKCAkVGFibGVDcmVhdGUgJiYgJExpbmUgPX4gLzxDb2x1bW4uKz9OYW1lPSIoLis/KSIuKj9cLz4vaSApIHsKICAgICAgICAgICAgaWYgKCAhJDEgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcig8PCJFT0YiKTsKRm91bmQgYW4gZW1wdHkgY29sdW1uIG5hbWUhCkxpbmUgJENvdW50ZXI6ICRMaW5lCkVPRgogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgbXkgJFJlc2VydmVkV29yZCAoCiAgICAgICAgICAgICAgICBxdygKICAgICAgICAgICAgICAgICAgICBhZGQgYWxsIGFsdGVyIGFuZAogICAgICAgICAgICAgICAgICAgIGFueSBhcyBhc2MgYmFja3VwCiAgICAgICAgICAgICAgICAgICAgYmVnaW4gYmV0d2VlbiBiaWdpbnQgYmluYXJ5CiAgICAgICAgICAgICAgICAgICAgYml0IGJvdHRvbSBicmVhayBidWxrIGJ5IGNhY2hlCiAgICAgICAgICAgICAgICAgICAgY2FsbCBjYXBhYmlsaXR5IGNhc2NhZGUgY2FzZQogICAgICAgICAgICAgICAgICAgIGNhc3QgY2hhciBjaGFyX2NvbnZlcnQgY2hhcmFjdGVyCiAgICAgICAgICAgICAgICAgICAgY2hlY2sgY2hlY2twb2ludCBjbG9zZSBjb21tZW50CiAgICAgICAgICAgICAgICAgICAgY29tbWl0IGNvbm5lY3QgY29uc3RyYWludCBjb250YWlucwogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGNvbnZlcnQgY3JlYXRlIGNyb3NzCiAgICAgICAgICAgICAgICAgICAgY3ViZSBjdXJyZW50IGN1cnJlbnRfdGltZXN0YW1wIGN1cnJlbnRfdXNlcgogICAgICAgICAgICAgICAgICAgIGN1cnNvciBkYXRlIGRic3BhY2UgZGVhbGxvY2F0ZQogICAgICAgICAgICAgICAgICAgIGRlYyBkZWNpbWFsIGRlY2xhcmUgZGVmYXVsdAogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBkZWxldGluZyBkZXNjIGRpc3RpbmN0CiAgICAgICAgICAgICAgICAgICAgZG8gZG91YmxlIGRyb3AgZHluYW1pYyBlYWNoCiAgICAgICAgICAgICAgICAgICAgZWxzZSBlbHNlaWYgZW5jcnlwdGVkIGVuZAogICAgICAgICAgICAgICAgICAgIGVuZGlmIGVzY2FwZSBleGNlcHQgZXhjZXB0aW9uCiAgICAgICAgICAgICAgICAgICAgZXhlYyBleGVjdXRlIGV4aXN0aW5nIGV4aXN0cwogICAgICAgICAgICAgICAgICAgIGV4dGVybmxvZ2luIGZldGNoIGZpcnN0IGZsb2F0CiAgICAgICAgICAgICAgICAgICAgZm9yIGZvcmNlIGZvcmVpZ24gZm9yd2FyZAogICAgICAgICAgICAgICAgICAgIGZyb20gZnVsbCBnb3RvIGdyYW50CiAgICAgICAgICAgICAgICAgICAgZ3JvdXAgaGF2aW5nIGhvbGRsb2NrIGlkZW50aWZpZWQKICAgICAgICAgICAgICAgICAgICBpZiBpbiBpbmRleCBpbmRleF9scGFyZW4KICAgICAgICAgICAgICAgICAgICBpbm5lciBpbm91dCBpbnNlbnNpdGl2ZSBpbnNlcnQKICAgICAgICAgICAgICAgICAgICBpbnNlcnRpbmcgaW5zdGFsbCBpbnN0ZWFkIGludAogICAgICAgICAgICAgICAgICAgIGludGVnZXIgaW50ZWdyYXRlZCBpbnRlcnNlY3QgaW50bwogICAgICAgICAgICAgICAgICAgIGlxIGlzIGlzb2xhdGlvbiBqb2luCiAgICAgICAgICAgICAgICAgICAga2V5IGxhdGVyYWwgbGVmdCBsaWtlCiAgICAgICAgICAgICAgICAgICAgbG9jayBsb25nIG1hdGNoCiAgICAgICAgICAgICAgICAgICAgbWVtYmVyc2hpcCBtZXNzYWdlIG1vZGUgbW9kaWZ5CiAgICAgICAgICAgICAgICAgICAgbmF0dXJhbCBuZXcgbm8gbm9ob2xkbG9jawogICAgICAgICAgICAgICAgICAgIG5vdCBub3RpZnkgbnVsbCBudW1lcmljCiAgICAgICAgICAgICAgICAgICAgb2Ygb2ZmIG9uIG9wZW4KICAgICAgICAgICAgICAgICAgICBvcHRpb24gb3B0aW9ucyBvciBvcmRlcgogICAgICAgICAgICAgICAgICAgIG90aGVycyBvdXQgb3V0ZXIgb3ZlcgogICAgICAgICAgICAgICAgICAgIHBhc3N0aHJvdWdoIHByZWNpc2lvbiBwcmVwYXJlIHByaW1hcnkKICAgICAgICAgICAgICAgICAgICBwcmludCBwcml2aWxlZ2VzIHByb2MgcHJvY2VkdXJlCiAgICAgICAgICAgICAgICAgICAgcHVibGljYXRpb24gcmFpc2Vycm9yIHJlYWR0ZXh0IHJlYWwKICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VzIHJlbGVhc2UgcmVtb3RlCiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlIHJlbmFtZSByZW9yZ2FuaXplIHJlc291cmNlCiAgICAgICAgICAgICAgICAgICAgcmVzdG9yZSByZXN0cmljdCByZXR1cm4gcmV2b2tlCiAgICAgICAgICAgICAgICAgICAgcmlnaHQgcm9sZSByb2xsYmFjayByb2xsdXAgcm93IHJ1bGUgc2F2ZQogICAgICAgICAgICAgICAgICAgIHNhdmVwb2ludCBzY3JvbGwgc2VsZWN0IHNlbnNpdGl2ZQogICAgICAgICAgICAgICAgICAgIHNlc3Npb24gc2V0IHNldHVzZXIgc2hhcmUKICAgICAgICAgICAgICAgICAgICBzbWFsbGludCBzb21lIHNxbGNvZGUgc3Fsc3RhdGUKICAgICAgICAgICAgICAgICAgICBzdGFydCBzdG9wIHN1YnRyYW5zIHN1YnRyYW5zYWN0aW9uCiAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemUgc3ludGF4X2Vycm9yIHRhYmxlIHRlbXBvcmFyeQogICAgICAgICAgICAgICAgICAgIHRoZW4gdGltZSB0aW1lc3RhbXAgdGlueWludAogICAgICAgICAgICAgICAgICAgIHRvIHRvcCB0cmFuIHRyaWdnZXIKICAgICAgICAgICAgICAgICAgICB0cnVuY2F0ZSB0c2VxdWFsIHVuYm91bmRlZCB1bmRvIHVuaW9uCiAgICAgICAgICAgICAgICAgICAgdW5pcXVlIHVua25vd24gdW5zaWduZWQgdXBkYXRlCiAgICAgICAgICAgICAgICAgICAgdXBkYXRpbmcgdXNlciB1c2luZyB2YWxpZGF0ZQogICAgICAgICAgICAgICAgICAgIHZhbHVlcyB2YXJiaW5hcnkgdmFyY2hhciB2YXJpYWJsZQogICAgICAgICAgICAgICAgICAgIHZhcnlpbmcgdmlldyB3YWl0IHdhaXRmb3IKICAgICAgICAgICAgICAgICAgICB3aGVuIHdoZXJlIHdoaWxlIHdpbmRvdwogICAgICAgICAgICAgICAgICAgIHdpdGggd2l0aF9jdWJlIHdpdGhfbHBhcmVuIHdpdGhfcm9sbHVwCiAgICAgICAgICAgICAgICAgICAgd2l0aGluIHdvcmsgd3JpdGV0ZXh0CiAgICAgICAgICAgICAgICAgICAgTk9NT05JVE9SSU5HIFJFQ09SRFNfUEVSX0JMT0NLIE5PV0FJVCBEWU5BTUlDX1NBTVBMSU5HIENPTFVNTl9TVEFUUyBHUk9VUFMKICAgICAgICAgICAgICAgICAgICBOT19QWF9KT0lOX0ZJTFRFUiBOT19TVEFUU19HU0VUUyBTV0FQX0pPSU5fSU5QVVRTIE5PT1JERVIgVFJJR0dFUlMgREVNQU5ECiAgICAgICAgICAgICAgICAgICAgTE9CIEdCWV9DT05DX1JPTExVUCBST1dERVBFTkRFTkNJRVMgTk9TVFJJQ1QgUFJJVklMRUdFIFNFTUlKT0lOIFJBVyBVU0VfTkxfV0lUSF9JTkRFWAogICAgICAgICAgICAgICAgICAgIElORk9STUFUSU9OQUwgREVOU0VfUkFOSyBOT19RVUVSWV9UUkFOU0ZPUk1BVElPTiBQT0lOVCBUUkFDSU5HIE5PX1hNTF9RVUVSWV9SRVdSSVRFCiAgICAgICAgICAgICAgICAgICAgTk9QQVJBTExFTF9JTkRFWCBMSU5LIFJFRiBUSU1FWk9ORV9BQkJSIFBJVl9TU0YgVFggUkVBRFMgREVMQVkgQkZJTEUgUFJJVkFURSBNQVhMT0dNRU1CRVJTCiAgICAgICAgICAgICAgICAgICAgVVNFX1NFTUkgQ09TVCBFVkFMTkFNRSBOT19DQVJURVNJQU4gVEFCTk8gVFJBQ0UgUExBTiBISU5UU0VUX0VORCBDT05UQUlORVIgQURNSU4gQ09MVU1OCiAgICAgICAgICAgICAgICAgICAgU1lTVEVNIFRaX09GRlNFVCBOTFNfTEVOR1RIX1NFTUFOVElDUyBESUNUSU9OQVJZIFNDTl9BU0NFTkRJTkcgRklDX0NJViBOT09WRVJSSURFIElORElDQVRPUgogICAgICAgICAgICAgICAgICAgIEJJTkFSWV9GTE9BVF9OQU4gUk9XSUQgU0VTU0lPTl9DQUNIRURfQ1VSU09SUyBPQkpOTyBTUUxfVFJBQ0UgQkxPQiBSRUxBVElPTkFMIEJJR0ZJTEUKICAgICAgICAgICAgICAgICAgICBBVkFJTEFCSUxJVFkgR1VBUkQgR1JPVVBfQlkgQURWSVNFIE1FUkdFIFFVT1RBIENGSUxFIE1FTUJFUiBUSEFOIFNBTFQgRFVNUCBFWFRFUk5BTExZCiAgICAgICAgICAgICAgICAgICAgQk9USCBHVUFSQU5URUVEIEVYVEVOVCBTRUNVUklUWSBTQ0FMRSBTWVNfRExfQ1VSU09SIFRZUEUgREVSRUZfTk9fUkVXUklURSBBVVRPIEVTVElNQVRFCiAgICAgICAgICAgICAgICAgICAgUE9XRVIgVVNFX1NUT1JFRF9PVVRMSU5FUyBTSUQgVkFSUkFZIExFU1MgVkFMVUUgWE1MRk9SRVNUIE1BWExPR0hJU1RPUlkgU1RPUkUgUkVEVU5EQU5DWQogICAgICAgICAgICAgICAgICAgIERFUVVFVUUgREJBIE1BVENIRUQgUFJFU0VOVCBDUFVfUEVSX0NBTEwgREVGSU5FUiBVUERfSk9JTklOREVYIE5FU1RFRF9UQUJMRV9TRVRfUkVGUwogICAgICAgICAgICAgICAgICAgIEVYUEFORF9HU0VUX1RPX1VOSU9OIElOREVYX1NTX0FTQyBFWFRSQUNUIE9SREVSRURfUFJFRElDQVRFUyBBTElBUyBOT19VU0VfSEFTSCBQUklPUgogICAgICAgICAgICAgICAgICAgIFhfRFlOX1BSVU5FIENPTVBPU0lURV9MSU1JVCBPQkpOT19SRVVTRSBSRVZFUlNFIERJU0FCTEUgQ1VSUkVOVF9EQVRFIElOSVRJQUwgTUlOSU1VTQogICAgICAgICAgICAgICAgICAgIElOVEVSTUVESUFURSBQQVJUSVRJT05fTElTVCBCWVRFIE1PVU5UIFBSRUJVSUxUIFNPVVJDRSBNT0RFTF9QQlkgQklUTUFQX1RSRUUgTE9HRklMRQogICAgICAgICAgICAgICAgICAgIFJPTEVTIERFR1JFRSBJTlZBTElEQVRFIFRBQkxFU1BBQ0UgUEFTU1dPUkRfVkVSSUZZX0ZVTkNUSU9OIENPTFVNTlMgQ0hPT1NFIFNNQUxMRklMRSBMRVZFTAogICAgICAgICAgICAgICAgICAgIE9MRF9QVVNIX1BSRUQgRFlOQU1JQ19TQU1QTElOR19FU1RfQ0ROIE5MU19EQVRFX0xBTkdVQUdFIFNFUlZFUkVSUk9SIE5FU1RFRF9UQUJMRV9GQVNUX0lOU0VSVAogICAgICAgICAgICAgICAgICAgIFNUUkVBTVMgTkxfU0ogRUxJTUlOQVRFX09VVEVSX0pPSU4gRU5URVJQUklTRSBESVNBU1NPQ0lBVEUgR1JPVVBJTkcgUEFDS0FHRSBEQVRFX01PREUgQ0hJTEQKICAgICAgICAgICAgICAgICAgICBOT19QUlVORV9HU0VUUyBSRUpFQ1QgTk9SRVNFVExPR1MgTk9fQ09OTkVDVF9CWV9DT1NUX0JBU0VEIENIVU5LIE9JRCBSRVRFTlRJT04gTUFYVFJBTlMKICAgICAgICAgICAgICAgICAgICBGQlRTQ0FOIE5PTkUgUEFSQU1FVEVSUyBPTkxJTkUgT1VUX09GX0xJTkUgR0xPQkFMX05BTUUgU1BBQ0UgSElOVFNFVF9CRUdJTiBQQVNTV09SRF9HUkFDRV9USU1FCiAgICAgICAgICAgICAgICAgICAgTk9DQUNIRSBGSU5BTCBZRUFSIFJCQSBFUlJPUlMgQ0xBU1MgVVNFX05MIENPTk5FQ1RfQllfQ09TVF9CQVNFRCBCSU5BUllfRE9VQkxFIERFRklORUQKICAgICAgICAgICAgICAgICAgICBFVkFMVUFUSU9OIFBVUkdFIEhPVVIgTEVOR1RIIFBSRUNFRElORyBERUNSRU1FTlQgU1VCTVVMVElTRVQgSU5ERVhfUk9XUyBTQ0hFRFVMRVIKICAgICAgICAgICAgICAgICAgICBBVVRIRU5USUNBVElPTiBOVU1CRVIgT0lESU5ERVggT1BBUVVFIFNBTVBMRSBVUERBVEFCTEUgT1JBX1JPV1NDTiBJTlRFUlBSRVRFRAogICAgICAgICAgICAgICAgICAgIE1BVEVSSUFMSVpFRCBJTkRFWF9DT01CSU5FIE9QQVFVRV9YQ0FOT05JQ0FMIElOTElORV9YTUxUWVBFX05UIFJFVFVSTklORyBRVUVSWQogICAgICAgICAgICAgICAgICAgIE9QVF9FU1RJTUFURSBDTE9CIE5PX0VYUEFORCBERVRBQ0hFRCBQQVNTV09SRF9MT0NLX1RJTUUgVkVDVE9SX1JFQUQgREFUQUZJTEUgUkVQTEFDRQogICAgICAgICAgICAgICAgICAgIE5MU19DSEFSQUNURVJTRVQgTk9fRUxJTUlOQVRFX0pPSU4gQlJPQURDQVNUIENJVl9HQiBIQVNIIFFCX05BTUUgQUZURVIgU1lTREJBIEFDQ09VTlQKICAgICAgICAgICAgICAgICAgICBTRVZFUkUgUFJFQ09NUFVURV9TVUJRVUVSWSBGVU5DVElPTiBJTkRFWFRZUEVTIEZMT0IgTVVMVElTRVQgTkxTX1NQRUNJQUxfQ0hBUlMgU0tJUAogICAgICAgICAgICAgICAgICAgIElHTk9SRV9PUFRJTV9FTUJFRERFRF9ISU5UUyBJTkRFWF9TUyBOT0dVQVJBTlRFRSBMT0NBTFRJTUVTVEFNUCBEQkFfUkVDWUNMRUJJTiBGSUxFIFRIUk9VR0gKICAgICAgICAgICAgICAgICAgICBQTFNRTF9XQVJOSU5HUyBNQU5BR0UgRFJJVklOR19TSVRFIEZBSUxFRCBTQ0FOX0lOU1RBTkNFUyBDT01QTEVURSBISUdIIFRSQU5TSVRJT05BTAogICAgICAgICAgICAgICAgICAgIE5PX1NFTUlKT0lOIERBWSBOT1BBUkFMTEVMIFhNTEFUVFJJQlVURVMgTU9WRSBOQVRJT05BTCBSRVFVSVJFRCBTS0lQX0VYVF9PUFRJTUlaRVIKICAgICAgICAgICAgICAgICAgICBOT1JFUEFJUiBSRUJVSUxEIEpPQiBTRUVEIFBPTElDWSBVU0VSUyBUT1BMRVZFTCBCSVRNQVAgREFUQUZJTEVTIEhBU0hfQUogSU5JVFJBTlMKICAgICAgICAgICAgICAgICAgICBCTE9DS1NJWkUgRkFTVCBNSU5JTUlaRSBTRVNTSU9OVFpOQU1FIFNFU1NJT05TX1BFUl9VU0VSIFNZU19PUF9CSVRWRUMgTk9fRUxJTUlOQVRFX09CWQogICAgICAgICAgICAgICAgICAgIFVCQSBEQVRBIFNVQlBBUlRJVElPTl9SRUwgU0VUUyBQUklWQVRFX1NHQSBCSU5BUllfRkxPQVQgRU5GT1JDRUQgVEFCTEVfU1RBVFMgRkxBR0dFUgogICAgICAgICAgICAgICAgICAgIFRFTVBfVEFCTEUgQVJDSElWRSBOT19QVVNIX1NVQlEgUkVDWUNMRSBEQVRBT0JKTk8gUVVFVUVfUk9XUCBTUUwgQ0hBSU5FRCBFTVBUWQogICAgICAgICAgICAgICAgICAgIFNBVkVfQVNfSU5URVJWQUxTIEJJVE1BUFMgT1BUSU1JWkVSX0ZFQVRVUkVTX0VOQUJMRSBGVU5DVElPTlMgQVVUT01BVElDIFNFQ09ORAogICAgICAgICAgICAgICAgICAgIE5PX0ZJTFRFUklORyBOQU1FRCBTVVNQRU5EIExJS0VDIE5PX0JVRkZFUiBQUV9OT01BUCBOTFNfTEFORyBBRFZJU09SCiAgICAgICAgICAgICAgICAgICAgRlJFU0ggTk9fQ09OTkVDVF9CWV9GSUxURVJJTkcgTk9TT1JUIFBBU1NXT1JEIEhBU0hLRVlTIEVYQ0xVRElORyBJTkRFWF9SUlMgRElTSwogICAgICAgICAgICAgICAgICAgIEJJVFMgQ0FDSEVfQ0IgVVNFIFNUQVIgQ1VSU09SX1NQRUNJRklDX1NFR01FTlQgU0I0IERJU1RSSUJVVEVEIEhFQVAgTUlORVhURU5UUyBETUwKICAgICAgICAgICAgICAgICAgICBBVFRSSUJVVEVTIE5PUkVMWSBLRVlTSVpFIExFQURJTkcgWE1MQ09MQVRUVkFMIEZSRUVMSVNUIEZBSUxFRF9MT0dJTl9BVFRFTVBUUwogICAgICAgICAgICAgICAgICAgIFNIQVJFRF9QT09MIFVTRV9BTlRJIEJZUEFTU19SRUNVUlNJVkVfQ0hFQ0sgQU5USUpPSU4gQUJPUlQgSU5ERVhfRklMVEVSIFJPTExJTkcKICAgICAgICAgICAgICAgICAgICBJVEVSQVRJT05fTlVNQkVSIENPQUxFU0NFIE5PX1NRTF9UVU5FIENMVVNURVIgUFJPVEVDVEVEIFBBUlRJVElPTl9IQVNIIEVSUk9SCiAgICAgICAgICAgICAgICAgICAgTk9fTVVMVElNVl9SRVdSSVRFIFVCMiBUSFJFQUQgU0lOR0xFIFNZU19QQVJBTExFTF9UWE4gSU5ERVhfQVNDIFBBUlRJVElPTgogICAgICAgICAgICAgICAgICAgIERJU01PVU5UIEhJRVJBUkNIWSBTVFJJUCBOTFNfREFURV9GT1JNQVQgQ09SUlVQVElPTiBTVE9SQUdFIENPTU1JVFRFRCBSRUNZQ0xFQklOCiAgICAgICAgICAgICAgICAgICAgUEFSSVRZIENBQ0hFX1RFTVBfVEFCTEUgRU5DUllQVElPTiBMT0NBTFRJTUUgUkVXUklURV9PUl9FUlJPUiBEQk1TX1NUQVRTIENIQVJfQ1MKICAgICAgICAgICAgICAgICAgICBFWENFUFRJT05TIEVYUElSRSBBVURJVCBMREFQX1JFR19TWU5DX0lOVEVSVkFMIE5PTUlOVkFMVUUgTElCUkFSWSBDT01QSUxFIE1BWFZBTFVFCiAgICAgICAgICAgICAgICAgICAgTkFOIE5PU0VHTUVOVCBOT0xPR0dJTkcgTk9ST1dERVBFTkRFTkNJRVMgUEFUSCBOT0ZPUkNFIEZJTklTSCBGSUNfUElWIE1BWCBTWVNBVVgKICAgICAgICAgICAgICAgICAgICBESU1FTlNJT04gT1JHQU5JWkFUSU9OIE5PU1dJVENIIFdSSVRFIE1JTlVTIEtJTEwgT0ZGTElORSBUUkFOU0FDVElPTiBGQUNUIEJFQ09NRQogICAgICAgICAgICAgICAgICAgIFVOQk9VTkQgVElWX1NTRiBPTEQgVEVNUEZJTEUgRVhQTE9TSU9OIFJFRlJFU0ggTUlSUk9SIFJFRl9DQVNDQURFX0NVUlNPUgogICAgICAgICAgICAgICAgICAgIE9QQ09ERSBPVkVSRkxPVyBDVVJTT1JfU0hBUklOR19FWEFDVCBQVVNIX1NVQlEgQ0FSRElOQUxJVFkgVVNFX1BSSVZBVEVfT1VUTElORVMKICAgICAgICAgICAgICAgICAgICBMSUtFNCBUWVBFUyBOT1RISU5HIFRJTUVaT05FX0hPVVIgVU5RVUlFU0NFIFJFU0laRSBDT0xMRUNUIElOU1RBTkNFIFNFVFRJTkdTIEVYUE9SVAogICAgICAgICAgICAgICAgICAgIERPTUFJTl9JTkRFWF9OT19TT1JUIE1FUkdFX1NKIExJTUlUIFNZU19PUF9FWFRSQUNUIExJS0UyIFNUQU5EQUxPTkUgTEFTVAogICAgICAgICAgICAgICAgICAgIENPTk5FQ1RfQllfRklMVEVSSU5HIFJFU1RSSUNUX0FMTF9SRUZfQ09OUyBNRVJHRV9DT05TVF9PTiBVTklGT1JNIFNDQU4gV0lUSE9VVAogICAgICAgICAgICAgICAgICAgIENQVV9QRVJfU0VTU0lPTiBQUk9HUkFNIFNFR19GSUxFIEFQUExZIFBBU1NXT1JEX0xJRkVfVElNRSBETUxfVVBEQVRFIEFMTE9XCiAgICAgICAgICAgICAgICAgICAgU0tJUF9VTlFfVU5VU0FCTEVfSURYIE5PX01FUkdFIENMT1NFX0NBQ0hFRF9PUEVOX0NVUlNPUlMgTkVTVEVEX1RBQkxFX0dFVF9SRUZTCiAgICAgICAgICAgICAgICAgICAgU1BFQ0lGSUNBVElPTiBDT05TSVNURU5UIFVTRV9DT05DQVQgU1lTX09QX05UQ0lNRyQgUFFfTUFQIFNIVVRET1dOIERFRkVSUkFCTEUKICAgICAgICAgICAgICAgICAgICBGT0xMT1dJTkcgU1BMSVQgVU5QUk9URUNURUQgVElNRV9aT05FIFNIUklOSyBJTkRFWF9TS0lQX1NDQU4gTE9HSUNBTAogICAgICAgICAgICAgICAgICAgIE1PREVMX01JTl9BTkFMWVNJUyBYTUxST09UIFNEX1NIT1cgQ1JFQVRFX1NUT1JFRF9PVVRMSU5FUyBSQVBJRExZIFVTRV9NRVJHRSBRVUVVRV9DVVJSCiAgICAgICAgICAgICAgICAgICAgU1RSSUNUIE1WX01FUkdFIE5PX09SREVSX1JPTExVUFMgVFJFQVQgVU5MSU1JVEVEIFRVTklORyBDSEFOR0UgUENUVVNFRCBNT1ZFTUVOVAogICAgICAgICAgICAgICAgICAgIE5PX1JFV1JJVEUgQU5DSUxMQVJZIENMVVNURVJJTkdfRkFDVE9SIEJMT0NLX1JBTkdFIFNFUVVFTlRJQUwgR0xPQkFMTFkgWE1MVFlQRSBJTlRFUlZBTAogICAgICAgICAgICAgICAgICAgIFNFUVVFTkNFRCBTV0lUQ0hPVkVSIEFUIE5PTUFYVkFMVUUgU1lTX0ZCVF9JTlNERUwgS0VSQkVST1MgVElNRVpPTkVfT0ZGU0VUCiAgICAgICAgICAgICAgICAgICAgSU5ERVhfU1NfREVTQyBSRUNPVkVSWSBOTFNfVEVSUklUT1JZIFNJWkUgRkFJTEdST1VQIEVMRU1FTlQgSU5TVEFOQ0VTIERJUkVDVE9SWQogICAgICAgICAgICAgICAgICAgIElER0VORVJBVE9SUyBQUkVTRVJWRV9PSUQgTk9fUEFSQUxMRUwgU1VCUEFSVElUSU9OUyBFWEVNUFQgSU5ERVhfSk9JTiBCRUdJTl9PVVRMSU5FX0RBVEEKICAgICAgICAgICAgICAgICAgICBORVRXT1JLIExPQ0FMIFVOVVNFRCBOT0FVRElUIFBIWVNJQ0FMIFdSQVBQRUQgRlJFRVBPT0xTIFBDVElOQ1JFQVNFIEZJTFRFUgogICAgICAgICAgICAgICAgICAgIEdBVEhFUl9QTEFOX1NUQVRJU1RJQ1MgU1lTT1BFUiBTRF9JTkhJQklUIFNFR01FTlQgRElTQUJMRV9SUEtFIE5MU19TT1JUIFBBVEhTCiAgICAgICAgICAgICAgICAgICAgRU5UUlkgTERBUF9SRUdJU1RSQVRJT05fRU5BQkxFRCBESVNLUyBPQkpFQ1QgSU5DUkVNRU5UQUwgUkVHRVhQX0xJS0UgT1ZFUkZMT1dfTk9NT1ZFCiAgICAgICAgICAgICAgICAgICAgU1VCUVVFUklFUyBOT19QQVJBTExFTF9JTkRFWCBYSUQgSU5JVElBTElaRUQgU1RBVElTVElDUyBFTkNSWVBUIEFVVE9BTExPQ0FURSBURU1QTEFURQogICAgICAgICAgICAgICAgICAgIExEQVBfUkVHSVNUUkFUSU9OIE5PX1VOTkVTVCBOT19QQVJUSUFMX0NPTU1JVCBPUkRJTkFMSVRZIE5MU19DT01QIE5PQ09NUFJFU1MgUlVMRVMKICAgICAgICAgICAgICAgICAgICBJTU1FRElBVEUgTUFJTiBSRUZFUkVOQ0lORyBFTlFVRVVFIFNFR19CTE9DSyBVTlJFQ09WRVJBQkxFIE5PX01PTklUT1JJTkcgTk9fQUNDRVNTCiAgICAgICAgICAgICAgICAgICAgUkVTT0xWRVIgVElNRVpPTkVfTUlOVVRFIE5PX0VMSU1JTkFURV9PVVRFUl9KT0lOIE5PX0lOREVYIFVOTkVTVCBHVUFSQU5URUUgQkVIQUxGCiAgICAgICAgICAgICAgICAgICAgQUxXQVlTIFRFU1QgUEVSTUFORU5UIFJFR0lTVEVSIENPTkZPUk1JTkcgU1lOT05ZTSBTS0lQX1VOVVNBQkxFX0lOREVYRVMgVVNFX0hBU0gKICAgICAgICAgICAgICAgICAgICBPUEVSQVRPUiBOT19QVUxMX1BSRUQgVVNFX1RUVF9GT1JfR1NFVFMgU0VSSUFMSVpBQkxFIE1JR1JBVEUgSVRFUkFURSBQTFNRTF9DQ0ZMQUdTCiAgICAgICAgICAgICAgICAgICAgSUdOT1JFX1dIRVJFX0NMQVVTRSBDUFVfQ09TVElORyBUUkFJTElORyBMT0NBTF9JTkRFWEVTIE9WRVJMQVBTIEVYVEVORFMgTk9BUFBFTkQKICAgICAgICAgICAgICAgICAgICBNRVRIT0QgUkVXUklURSBVTlBBQ0tFRCBDT0xVTU5fVkFMVUUgREFUQUJBU0UgRVhDSEFOR0UgTk9fVEVNUF9UQUJMRSBVUFNFUlQgWUVTCiAgICAgICAgICAgICAgICAgICAgUkVCQUxBTkNFIENPTlRFWFQgU1BGSUxFIE5FU1RFRCBUUkFDS0lORyBSRVNPTFZFIFBGSUxFIE1BWERBVEFGSUxFUyBHTE9CQUwKICAgICAgICAgICAgICAgICAgICBBVVRIRU5USUNBVEVEIE5FU1RFRF9UQUJMRV9JRCBJTkRFWEVTIFhNTE5BTUVTUEFDRVMgTk9fUkVGX0NBU0NBREUgU1lTREFURSBPUl9FWFBBTkQKICAgICAgICAgICAgICAgICAgICBBU1NPQ0lBVEUgTU9ERUxfQ09NUElMRV9TVUJRVUVSWSBJTklUSUFMTFkgUEFSVElBTExZIFhNTFNDSEVNQSBNSU5WQUxVRSBQSVZfR0IgSEVBREVSCiAgICAgICAgICAgICAgICAgICAgUkVTVE9SRV9BU19JTlRFUlZBTFMgTUFOQUdFRCBCTE9DSyBTSU5HTEVUQVNLIERFVEVSTUlORVMgUENUVkVSU0lPTiBFWFBMQUlOIEFORF9FUVVBTAogICAgICAgICAgICAgICAgICAgIENMT05FIE5PX1VTRV9IQVNIX0FHR1JFR0FUSU9OIEJVRkZFUl9DQUNIRSBYTUxUQUJMRSBFWFRFUk5BTCBORVZFUiBJREVOVElGSUVSIFBVTExfUFJFRAogICAgICAgICAgICAgICAgICAgIElOREVYRUQgTE9HSUNBTF9SRUFEU19QRVJfQ0FMTCBTVEFSVFVQIEZSRUVMSVNUUyBVUERfSU5ERVhFUyBNQVRFUklBTElaRSBMT0dPTiBTQ0hFTUEKICAgICAgICAgICAgICAgICAgICBOT19JTkRFWF9TUyBOT19CQVNFVEFCTEVfTVVMVElNVl9SRVdSSVRFIElOX01FTU9SWV9NRVRBREFUQSBTVFJVQ1RVUkUgTUFYRVhURU5UUwogICAgICAgICAgICAgICAgICAgIFJFQ09WRVJBQkxFIFJFRkVSRU5DRUQgTk9fU0VUX1RPX0pPSU4gU1RBUl9UUkFOU0ZPUk1BVElPTiBDT05ORUNUX0JZX0lTQ1lDTEUgUk9XTlVNCiAgICAgICAgICAgICAgICAgICAgU05BUFNIT1QgRVhDTFVTSVZFIENVUlJFTlRfVElNRSBLRUVQIFBBU1NXT1JEX1JFVVNFX01BWCBXSEVORVZFUiBJTlRFUk5BTF9VU0UgUFhfSk9JTl9GSUxURVIKICAgICAgICAgICAgICAgICAgICBQUV9ESVNUUklCVVRFIElOTElORSBIV01fQlJPS0VSRUQgRklSU1RfUk9XUyBNT0RFTF9OT19BTkFMWVNJUyBOT19QVVNIX1BSRUQgTU9ERUxfUFVTSF9SRUYKICAgICAgICAgICAgICAgICAgICBDT01QUkVTUyBOT1JFVkVSU0UgTk9fSU5ERVhfRkZTIEdFTkVSQVRFRCBOQVRJVkUgTElLRV9FWFBBTkQgUkVMWSBQQUNLQUdFUyBSRUFEIElHTk9SRQogICAgICAgICAgICAgICAgICAgIFNRTExEUiBESVNLR1JPVVAgRkxVU0ggQllQQVNTX1VKVkMgUkVTRVRMT0dTIFNZU19PUF9OT0VYUEFORCBQUk9URUNUSU9OIEJFRk9SRQogICAgICAgICAgICAgICAgICAgIElOU1RBTlRJQUJMRSBYTUxFTEVNRU5UIFNVQlBBUlRJVElPTiBYTUxQQVJTRSBGQUxTRSBBRE1JTklTVEVSIFNFTEVDVElWSVRZIFBDVFRIUkVTSE9MRAogICAgICAgICAgICAgICAgICAgIE5FWFQgRVJST1JfT05fT1ZFUkxBUF9USU1FIFJFS0VZIFFVSUVTQ0UgUFhfR1JBTlVMRSBMT0dPRkYgU0NPUEUgQklORElORyBOTFNfQ1VSUkVOQ1kKICAgICAgICAgICAgICAgICAgICBUSEUgWE1MUEkgUEFTU1dPUkRfUkVVU0VfVElNRSBYTUxRVUVSWSBQQVJUSVRJT05TIE5PX1FLTl9CVUZGIE1PREVMX0RZTkFNSUNfU1VCUVVFUlkKICAgICAgICAgICAgICAgICAgICBMT0NBVE9SIE5MU19OQ0hBUl9DT05WX0VYQ1AgTk9fU1RBUl9UUkFOU0ZPUk1BVElPTiBOT1JFV1JJVEUgVEFCTEVTUEFDRV9OTyBBRE1JTklTVFJBVE9SCiAgICAgICAgICAgICAgICAgICAgU0VNSUpPSU5fRFJJVkVSIElOREVYX0ZGUyBSRURVQ0VEIEtFWVMgTE9DS0VEIEJVRkZFUiBWQUxJREFUSU9OIEZMQVNIQkFDSyBFTkRfT1VUTElORV9EQVRBCiAgICAgICAgICAgICAgICAgICAgVE9fQ0hBUiBNQVNURVIgU1lTX1JJRF9PUkRFUiBQVUJMSUMgTUlOVVNfTlVMTCBOVkFSQ0hBUjIgQk9VTkQgUkJPX09VVExJTkUgQUNUSVZBVEUgVkFSQ0hBUjIKICAgICAgICAgICAgICAgICAgICBNQVhTSVpFIERFQ1JZUFQgVUlEIE1MU0xBQkVMIFVOVElMIEFVVE9FWFRFTkQgRUxJTUlOQVRFX0pPSU4gUkFORE9NIFNFUVVFTkNFIE5BViBDT05URU5UUwogICAgICAgICAgICAgICAgICAgIFVTQUdFIE9OTFkgUkVVU0UgTUFOVUFMIERPQ1VNRU5UIENPTk5FQ1RfQllfSVNMRUFGIENPTlNJREVSIEVORk9SQ0UgUkVNT1RFX01BUFBFRAogICAgICAgICAgICAgICAgICAgIExJU1QgTUFYQVJDSExPR1MgUk9XX0xFTkdUSCBOVUxMUyBTSEFSRUQgV0VMTEZPUk1FRCBJTkNMVURJTkcgQVBQRU5EIEZPUkNFX1hNTF9RVUVSWV9SRVdSSVRFCiAgICAgICAgICAgICAgICAgICAgSVNPTEFUSU9OX0xFVkVMIEFDQ0VTU0VEIE5MU19JU09fQ1VSUkVOQ1kgU1VDQ0VTU0ZVTCBDVVJSRU5UX1NDSEVNQSBST1dTIERBTkdMSU5HIFRSVUUgWk9ORQogICAgICAgICAgICAgICAgICAgIE5MU19OVU1FUklDX0NIQVJBQ1RFUlMgREVCVUcgVVBEQVRFRCBSRVNUUklDVEVEIE5PX0VYUEFORF9HU0VUX1RPX1VOSU9OIFNUQVRFTUVOVF9JRAogICAgICAgICAgICAgICAgICAgIE5PQ1BVX0NPU1RJTkcgQVVUSE9SSVpBVElPTiBOT19VU0VfTUVSR0UgT1BBUVVFX1RSQU5TRk9STSBBUlJBWSBNRUFTVVJFUyBNT0RFTAogICAgICAgICAgICAgICAgICAgIENPTk5FQ1RfVElNRSBPUFRJTUlaRVJfR09BTCBTVVBQTEVNRU5UQUwgUENURlJFRSBBTkFMWVpFIFJFQ09WRVIgREJfUk9MRV9DSEFOR0UKICAgICAgICAgICAgICAgICAgICBCTE9DS1MgTUFYSU5TVEFOQ0VTIERETCBOT1ZBTElEQVRFIFBSRVNFUlZFIE9QVF9QQVJBTSBDTEVBUiBDT0FSU0UgSURMRV9USU1FIFdBTExFVAogICAgICAgICAgICAgICAgICAgIFNDQUxFX1JPV1MgQVJDSElWRUxPRyBDRVJUSUZJQ0FURSBOT1JNQUwgTk9fTU9ERUxfUFVTSF9SRUYgVEFCTEVTIFVQR1JBREUgSU5GSU5JVEUKICAgICAgICAgICAgICAgICAgICBOT0FSQ0hJVkVMT0cgQ09OVFJPTEZJTEUgSURFTlRJVFkgUEVSRk9STUFOQ0UgSU5TVEFOVExZIE1BUFBJTkcgRU5BQkxFCiAgICAgICAgICAgICAgICAgICAgTE9HSUNBTF9SRUFEU19QRVJfU0VTU0lPTiBVU0VfSEFTSF9BR0dSRUdBVElPTiBERUZFUlJFRCBSRVBBSVIgTk9fU1dBUF9KT0lOX0lOUFVUUwogICAgICAgICAgICAgICAgICAgIEdMT0JBTF9UT1BJQ19FTkFCTEVEIEVMSU1JTkFURV9PQlkgU1VCU1RJVFVUQUJMRSBTVEFOREJZIE5MU19DQUxFTkRBUiBMQVlFUiBCQVRDSCBLRVlfTEVOR1RICiAgICAgICAgICAgICAgICAgICAgSU5DUkVNRU5UIEJVSUxEIE9SREVSRUQgTU9OVEggTkNMT0IgRVhQUl9DT1JSX0NIRUNLIE1FTU9SWSBVUk9XSUQgRVZFTlRTIEFMTF9ST1dTCiAgICAgICAgICAgICAgICAgICAgU1lTX09QX0VORk9SQ0VfTk9UX05VTEwkIFNEX0FMTCBDT01QVVRFIFVTRV9XRUFLX05BTUVfUkVTTCBOT01JTklNSVpFIFNQUkVBRFNIRUVUCiAgICAgICAgICAgICAgICAgICAgTkxfQUogQlVGRkVSX1BPT0wgTUVSR0VfQUogU0lCTElOR1MgQ09OU1RSQUlOVFMgVVNFUl9ERUZJTkVEIExPRyBJTVBPUlQgTkVTVEVEX1RBQkxFX1NFVF9TRVRJRAogICAgICAgICAgICAgICAgICAgIExFVkVMUyBQRVJDRU5UIFBVU0hfUFJFRCBSRVNVTUUgTk9fQ1BVX0NPU1RJTkcgU0lNUExFIERJU0NPTk5FQ1QgV0hJVEVTUEFDRQogICAgICAgICAgICAgICAgICAgIFVOTE9DSyBOT01BUFBJTkcgQVVUSElEIEFMTE9DQVRFIE5DSEFSX0NTIFVTRVJfUkVDWUNMRUJJTiBET01BSU5fSU5ERVhfU09SVCBRVUVSWV9CTE9DSwogICAgICAgICAgICAgICAgICAgIENZQ0xFIEhBU0hfU0ogVU5EUk9QIExPR0dJTkcgT1dOIFBBU1NJTkcgTUlOIFNXSVRDSCBTT1JUIEJJTkFSWV9ET1VCTEVfTkFOIE5PREVMQVkKICAgICAgICAgICAgICAgICAgICBQTFNRTF9PUFRJTUlaRV9MRVZFTCBQQVJUSVRJT05fUkFOR0UgVElNRVpPTkVfUkVHSU9OIENBQ0hFX0lOU1RBTkNFUyBTVU1NQVJZCiAgICAgICAgICAgICAgICAgICAgSU5ERVhfU1RBVFMgRElTVElOR1VJU0hFRCBJTlRFUk5BTF9DT05WRVJUIE5PX1VTRV9OTCBEQlRJTUVaT05FIFNZU19PUF9DQVNUIERPV05HUkFERQogICAgICAgICAgICAgICAgICAgIFJFU0VUIElOREVYX0RFU0MgTk9DWUNMRSBQT1NUX1RSQU5TQUNUSU9OIFBMU1FMX0NPREVfVFlQRSBFIFBBUkVOVCBNQVhMT0dGSUxFUwogICAgICAgICAgICAgICAgICAgIE5PX0ZBQ1QgVU5VU0FCTEUgWE1MU0VSSUFMSVpFIEpBVkEgTkNIQVIgREVSRUYgT1VUTElORSBTRVRfVE9fSk9JTiBORUVERUQgVkVSU0lPTlMKICAgICAgICAgICAgICAgICAgICBJTkRFWF9TQ0FOIEVYVEVOVFMgU0VTU0lPTlRJTUVaT05FIFBMU1FMX0RFQlVHIE1PTklUT1JJTkcgQklOQVJZX0RPVUJMRV9JTkZJTklUWSBTVEFUSUMKICAgICAgICAgICAgICAgICAgICBSRVNVTUFCTEUgUkFOR0UgTUFOQUdFTUVOVCBDT01QQVRJQklMSVRZIEFUVFJJQlVURSBNQVhJTUlaRSBVTkRFUiBQQVJBTExFTCBUSVZfR0IgQ09NUEFDVAogICAgICAgICAgICAgICAgICAgIE9QVElNQUwgQ1VCRV9HQiBJTkNMVURFX1ZFUlNJT04gUEFSQUxMRUxfSU5ERVggRklORSBTWVNUSU1FU1RBTVAgSU5ERVhUWVBFIE9VVExJTkVfTEVBRgogICAgICAgICAgICAgICAgICAgIENPTk5FQ1RfQllfUk9PVCBWRUNUT1JfUkVBRF9UUkFDRSBOTFNfTEFOR1VBR0UgU1RSSU5HIEJJTkFSWV9GTE9BVF9JTkZJTklUWSBVTkFSQ0hJVkVECiAgICAgICAgICAgICAgICAgICAgUFJPRklMRSBTQ04gTUlOVVRFIE1PREVMX0RPTlRWRVJJRllfVU5JUVVFTkVTUyBBQ0NFU1MKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIyB0aGUgZm9sbG93aW5nIHdvcmRzIGFyZSByZW1vdmVkIG9mIHN0ZWZhbnMgbGlzdCwgYmVjYXVzZSB0aGV5IGRvbid0IG1lcmdlCiAgICAgICAgICAgICAgICAjIGF0IHdpdGggaHR0cDovL3d3dy5wZXRlZnJlaXRhZy5jb20vdG9vbHMvc3FsX3Jlc2VydmVkX3dvcmRzX2NoZWNrZXIvCiAgICAgICAgICAgICAgICAjIElEIENBVEVHT1JZIE5BTUUgQ09OVEVOVCBWRVJTSU9OIFFVRVVFIEJPRFkgVElNRU9VVCBSRUZFUkVOQ0UgTk9USUZJQ0FUSU9OIFBST0pFQ1QgVFJVU1RFRAogICAgICAgICAgICAgICAgIyBhbGwgcmVzZXJ2ZWQgc3FsLXdvcmRzIHdpdGggc21hbGwgbGV0dGVycyBhcmUgZnJvbQogICAgICAgICAgICAgICAgIyBodHRwOi8vd3d3LnBldGVmcmVpdGFnLmNvbS90b29scy9zcWxfcmVzZXJ2ZWRfd29yZHNfY2hlY2tlci8KICAgICAgICAgICAgICAgICMgYW5kIGh0dHA6Ly93d3cuaWFueXdoZXJlLmNvbS9kZXZlbG9wZXIvcHJvZHVjdF9tYW51YWxzL3NxbGFueXdoZXJlLzA5MDEvZGUvaHRtbC9kYnJmZGU5LzAwMDAwMDEwLmh0bQogICAgICAgICAgICAgICAgIyAncmVmZXJlbmNlJyBhbmQgJ2xvZ2luJyBzZWVtcyB0byBiZSBhbGxvd2VkIChjaGVja2VkIGJ5IHd3dy5wZXRlZnJlaXRhZy5jb20pCgogICAgICAgICAgICAgICAgaWYgKCAkMSAmJiAkMSA9fiAvXiRSZXNlcnZlZFdvcmQkL2kgKSB7CiAgICAgICAgICAgICAgICAgICAgZGllIDw8IkVPRiI7CllvdSB1c2UgYSByZXNlcnZlZCBTUUwtV29yZCEKTGluZSAkQ291bnRlcjogJExpbmUKWW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyB0b29sIGZvciB5b3VyIG93biBjaGVja2luZzoKaHR0cDovL3d3dy5wZXRlZnJlaXRhZy5jb20vdG9vbHMvc3FsX3Jlc2VydmVkX3dvcmRzX2NoZWNrZXIvCkVPRgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggJExpbmUgPX4gLzxcL1RhYmxlLyApIHsKICAgICAgICAgICAgICAgICRUYWJsZUNyZWF0ZSA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuOwp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/Hunspell/Dictionaries/en_US.aff" Permission="660" Encode="Base64">U0VUIFVURi04ClRSWSBlc2lhbnJ0b2xjZHVnbXBoYnlmdmt3ekVTSUFOUlRPTENEVUdNUEhCWUZWS1daJwpJQ09OViAxCklDT05WIOKAmSAnCk5PU1VHR0VTVCAhCgojIG9yZGluYWwgbnVtYmVycwpDT01QT1VORE1JTiAxCiMgb25seSBpbiBjb21wb3VuZHM6IDF0aCwgMnRoLCAzdGgKT05MWUlOQ09NUE9VTkQgYwojIGNvbXBvdW5kIHJ1bGVzOgojIDEuIFswLTldKjFbMC05XXRoICgxMHRoLCAxMXRoLCAxMnRoLCA1NjcxNHRoLCBldGMuKQojIDIuIFswLTldKlswMi05XSgxc3R8Mm5kfDNyZHxbNC05XXRoKSAoMjFzdCwgMjJuZCwgMTIzcmQsIDEyMzR0aCwgZXRjLikKQ09NUE9VTkRSVUxFIDIKQ09NUE9VTkRSVUxFIG4qMXQKQ09NUE9VTkRSVUxFIG4qbXAKV09SRENIQVJTIDAxMjM0NTY3ODkKClBGWCBBIFkgMQpQRlggQSAgIDAgICAgIHJlICAgICAgICAgLgoKUEZYIEkgWSAxClBGWCBJICAgMCAgICAgaW4gICAgICAgICAuCgpQRlggVSBZIDEKUEZYIFUgICAwICAgICB1biAgICAgICAgIC4KClBGWCBDIFkgMQpQRlggQyAgIDAgICAgIGRlICAgICAgICAgIC4KClBGWCBFIFkgMQpQRlggRSAgIDAgICAgIGRpcyAgICAgICAgIC4KClBGWCBGIFkgMQpQRlggRiAgIDAgICAgIGNvbiAgICAgICAgIC4KClBGWCBLIFkgMQpQRlggSyAgIDAgICAgIHBybyAgICAgICAgIC4KClNGWCBWIE4gMgpTRlggViAgIGUgICAgIGl2ZSAgICAgICAgZQpTRlggViAgIDAgICAgIGl2ZSAgICAgICAgW15lXQoKU0ZYIE4gWSAzClNGWCBOICAgZSAgICAgaW9uICAgICAgICBlClNGWCBOICAgeSAgICAgaWNhdGlvbiAgICB5IApTRlggTiAgIDAgICAgIGVuICAgICAgICAgW15leV0gCgpTRlggWCBZIDMKU0ZYIFggICBlICAgICBpb25zICAgICAgIGUKU0ZYIFggICB5ICAgICBpY2F0aW9ucyAgIHkKU0ZYIFggICAwICAgICBlbnMgICAgICAgIFteZXldCgpTRlggSCBOIDIKU0ZYIEggICB5ICAgICBpZXRoICAgICAgIHkKU0ZYIEggICAwICAgICB0aCAgICAgICAgIFteeV0gCgpTRlggWSBZIDEKU0ZYIFkgICAwICAgICBseSAgICAgICAgIC4KClNGWCBHIFkgMgpTRlggRyAgIGUgICAgIGluZyAgICAgICAgZQpTRlggRyAgIDAgICAgIGluZyAgICAgICAgW15lXSAKClNGWCBKIFkgMgpTRlggSiAgIGUgICAgIGluZ3MgICAgICAgZQpTRlggSiAgIDAgICAgIGluZ3MgICAgICAgW15lXQoKU0ZYIEQgWSA0ClNGWCBEICAgMCAgICAgZCAgICAgICAgICBlClNGWCBEICAgeSAgICAgaWVkICAgICAgICBbXmFlaW91XXkKU0ZYIEQgICAwICAgICBlZCAgICAgICAgIFteZXldClNGWCBEICAgMCAgICAgZWQgICAgICAgICBbYWVpb3VdeQoKU0ZYIFQgTiA0ClNGWCBUICAgMCAgICAgc3QgICAgICAgICBlClNGWCBUICAgeSAgICAgaWVzdCAgICAgICBbXmFlaW91XXkKU0ZYIFQgICAwICAgICBlc3QgICAgICAgIFthZWlvdV15ClNGWCBUICAgMCAgICAgZXN0ICAgICAgICBbXmV5XQoKU0ZYIFIgWSA0ClNGWCBSICAgMCAgICAgciAgICAgICAgICBlClNGWCBSICAgeSAgICAgaWVyICAgICAgICBbXmFlaW91XXkKU0ZYIFIgICAwICAgICBlciAgICAgICAgIFthZWlvdV15ClNGWCBSICAgMCAgICAgZXIgICAgICAgICBbXmV5XQoKU0ZYIFogWSA0ClNGWCBaICAgMCAgICAgcnMgICAgICAgICBlClNGWCBaICAgeSAgICAgaWVycyAgICAgICBbXmFlaW91XXkKU0ZYIFogICAwICAgICBlcnMgICAgICAgIFthZWlvdV15ClNGWCBaICAgMCAgICAgZXJzICAgICAgICBbXmV5XQoKU0ZYIFMgWSA0ClNGWCBTICAgeSAgICAgaWVzICAgICAgICBbXmFlaW91XXkKU0ZYIFMgICAwICAgICBzICAgICAgICAgIFthZWlvdV15ClNGWCBTICAgMCAgICAgZXMgICAgICAgICBbc3h6aF0KU0ZYIFMgICAwICAgICBzICAgICAgICAgIFtec3h6aHldCgpTRlggUCBZIDMKU0ZYIFAgICB5ICAgICBpbmVzcyAgICAgIFteYWVpb3VdeQpTRlggUCAgIDAgICAgIG5lc3MgICAgICAgW2FlaW91XXkKU0ZYIFAgICAwICAgICBuZXNzICAgICAgIFteeV0KClNGWCBNIFkgMQpTRlggTSAgIDAgICAgICdzICAgICAgICAgLgoKU0ZYIEIgWSAzClNGWCBCICAgMCAgICAgYWJsZSAgICAgICBbXmFlaW91XQpTRlggQiAgIDAgICAgIGFibGUgICAgICAgZWUKU0ZYIEIgICBlICAgICBhYmxlICAgICAgIFteYWVpb3VdZQoKU0ZYIEwgWSAxClNGWCBMICAgMCAgICAgbWVudCAgICAgICAuCgpSRVAgOTAKUkVQIGEgZWkKUkVQIGVpIGEKUkVQIGEgZXkKUkVQIGV5IGEKUkVQIGFpIGllClJFUCBpZSBhaQpSRVAgYWxvdCBhX2xvdApSRVAgYXJlIGFpcgpSRVAgYXJlIGVhcgpSRVAgYXJlIGVpcgpSRVAgYWlyIGFyZQpSRVAgYWlyIGVyZQpSRVAgZXJlIGFpcgpSRVAgZXJlIGVhcgpSRVAgZXJlIGVpcgpSRVAgZWFyIGFyZQpSRVAgZWFyIGFpcgpSRVAgZWFyIGVyZQpSRVAgZWlyIGFyZQpSRVAgZWlyIGVyZQpSRVAgY2ggdGUKUkVQIHRlIGNoClJFUCBjaCB0aQpSRVAgdGkgY2gKUkVQIGNoIHR1ClJFUCB0dSBjaApSRVAgY2ggcwpSRVAgcyBjaApSRVAgY2ggawpSRVAgayBjaApSRVAgZiBwaApSRVAgcGggZgpSRVAgZ2ggZgpSRVAgZiBnaApSRVAgaSBpZ2gKUkVQIGlnaCBpClJFUCBpIHV5ClJFUCB1eSBpClJFUCBpIGVlClJFUCBlZSBpClJFUCBqIGRpClJFUCBkaSBqClJFUCBqIGdnClJFUCBnZyBqClJFUCBqIGdlClJFUCBnZSBqClJFUCBzIHRpClJFUCB0aSBzClJFUCBzIGNpClJFUCBjaSBzClJFUCBrIGNjClJFUCBjYyBrClJFUCBrIHF1ClJFUCBxdSBrClJFUCBrdyBxdQpSRVAgbyBlYXUKUkVQIGVhdSBvClJFUCBvIGV3ClJFUCBldyBvClJFUCBvbyBldwpSRVAgZXcgb28KUkVQIGV3IHVpClJFUCB1aSBldwpSRVAgb28gdWkKUkVQIHVpIG9vClJFUCBldyB1ClJFUCB1IGV3ClJFUCBvbyB1ClJFUCB1IG9vClJFUCB1IG9lClJFUCBvZSB1ClJFUCB1IGlldQpSRVAgaWV1IHUKUkVQIHVlIGV3ClJFUCBldyB1ZQpSRVAgdWZmIG91Z2gKUkVQIG9vIGlldQpSRVAgaWV1IG9vClJFUCBpZXIgZWFyClJFUCBlYXIgaWVyClJFUCBlYXIgYWlyClJFUCBhaXIgZWFyClJFUCB3IHF1ClJFUCBxdSB3ClJFUCB6IHNzClJFUCBzcyB6ClJFUCBzaHVuIHRpb24KUkVQIHNodW4gc2lvbgpSRVAgc2h1biBjaW9uClJFUCBzaXplIGNpc2UK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/Hunspell/Dictionaries/en_US.dic" Permission="660" Encode="Base64">NDg5NzQKMC9ubQowdGgvcHQKMS9uMQoxc3QvcAoxdGgvdGMKMi9ubQoybmQvcAoydGgvdGMKMy9ubQozcmQvcAozdGgvdGMKNC9ubQo0dGgvcHQKNS9ubQo1dGgvcHQKNi9ubQo2dGgvcHQKNy9ubQo3dGgvcHQKOC9ubQo4dGgvcHQKOS9ubQo5dGgvcHQKQS9TTQpBQS9NCkFBQQpBQi9NCkFCQQpBQkMvU00KQUJNL1NNCkFCUwpBQy9NCkFDTFUvTQpBQ1QKQUNUSC9NCkFEL00KQURDCkFERApBRE0KQURQL00KQUYKQUZBSUsKQUZCCkFGQy9NCkFGREMKQUZOCkFGVApBSS9TTQpBSURTL00KQUsKQUwKQU0vTQpBTUEKQU1EL00KQU5TSS9TCkFOWlVTL00KQU9ML00KQVAvTQpBUEIKQVBDCkFQSQpBUE8KQVBSCkFSCkFSQwpBU0FQCkFTQ0lJL1NNCkFTTC9NCkFTUENBCkFUTS9NCkFUUC9NCkFUVgpBVgpBVkkKQVdBQ1MvTQpBV09ML00KQVovTQpBWlQvTQpBYWNoZW4vTQpBYWxpeWFoL00KQWFyb24vTQpBYmJhcy9NCkFiYmFzaWQvTQpBYmJvdHQvTQpBYmJ5L00KQWJkdWwvTQpBYmUvTQpBYmVsL00KQWJlbGFyZC9NCkFiZWxzb24vTQpBYmVyZGVlbi9NCkFiZXJuYXRoeS9NCkFiaWRqYW4vTQpBYmlnYWlsL00KQWJpbGVuZS9NCkFibmVyL00KQWJvcmlnaW5lL01TCkFicmFoYW0vTQpBYnJhbS9NUwpBYnJhbXMvTQpBYnNhbG9tL00KQWJ1amEvTQpBYnlzc2luaWEvTQpBYnlzc2luaWFuL00KQWMvTQpBY2FkaWEvTQpBY2FwdWxjby9NCkFjY2VudHVyZS9NCkFjY3JhL00KQWNldmVkby9NCkFjaGFlYW4vTQpBY2hlYmUvTQpBY2hlcm5hci9NCkFjaGVzb24vTQpBY2hpbGxlcy9NCkFjb25jYWd1YS9NCkFjb3N0YS9NCkFjcm9wb2xpcwpBY3J1eC9NCkFjdGFlb24vTQpBY3Rvbi9NCkFjdHMvTQpBY3VmZi9NCkFkYS9TTQpBZGFtL1NNCkFkYW1zL00KQWRhbi9NCkFkYW5hL00KQWRhci9NCkFkZGFtcy9NCkFkZGVybGV5L00KQWRkaWUvTQpBZGRpc29uL00KQWRlbGEvTQpBZGVsYWlkZS9NCkFkZWxlL00KQWRlbGluZS9NCkFkZW4vTQpBZGVuYXVlci9NCkFkaGFyYS9NCkFkaWRhcy9NCkFkaXJvbmRhY2svU00KQWRpcm9uZGFja3MvTQpBZGtpbnMvTQpBZGxlci9NCkFkbQpBZG1pcmFsdHkKQWRvbGYvTQpBZG9sZm8vTQpBZG9scGgvTQpBZG9uaXMvTVMKQWRyZW5hbGluL01TCkFkcmlhbi9NCkFkcmlhbmEvTQpBZHJpYXRpYy9NCkFkcmllbm5lL00KQWR2ZW50L01TCkFkdmVudGlzdC9NUwpBZHZpbC9NCkFlZ2Vhbi9NCkFlbGZyaWMvTQpBZW5lYXMvTQpBZW5laWQvTQpBZW9sdXMvTQpBZXJvZmxvdC9NCkFlc2NoeWx1cy9NCkFlc2N1bGFwaXVzL00KQWVzb3AvTQpBZmdoYW4vU00KQWZnaGFuaS9NCkFmZ2hhbmlzdGFuL00KQWZyCkFmcmljYS9NCkFmcmljYW4vU00KQWZyaWthYW5zL00KQWZyaWthbmVyL1NNCkFmcm8vU00KQWZyb2NlbnRyaWMKQWZyb2NlbnRyaXNtL00KQWcvTQpBZ2FtZW1ub24vTQpBZ2FuYQpBZ2Fzc2kvTQpBZ2Fzc2l6L00KQWdhdGhhL00KQWdnaWUvTQpBZ2xhaWEvTQpBZ25lcy9NCkFnbmV3L00KQWduaS9NCkFncmEvTQpBZ3JpY29sYS9NCkFncmlwcGEvTQpBZ3JpcHBpbmEvTQpBZ3Vhc2NhbGllbnRlcwpBZ3VpbGFyL00KQWd1aW5hbGRvL00KQWd1aXJyZS9NCkFndXN0aW4vTQpBaGFiL00KQWhtYWQvTQpBaG1hZGFiYWQvTQpBaG1hZGluZWphZC9NCkFobWVkL00KQWhyaW1hbi9NCkFpZGEvTQpBaWtlbi9NCkFpbGVlbi9NCkFpbWVlL00KQWludS9NCkFpcmVkYWxlL01TCkFpcmVzL00KQWlzaGEvTQpBamF4L00KQWtiYXIvTQpBa2htYXRvdmEvTQpBa2loaXRvL00KQWtpdGEvTQpBa2l2YS9NCkFra2FkL00KQWtyb24vTQpBbC9NCkFsYS9TCkFsYWJhbWEvTQpBbGFiYW1hbi9NUwpBbGFiYW1pYW4vU00KQWxhZGRpbi9NCkFsYW1vL00KQWxhbW9nb3Jkby9NCkFsYW4vTQpBbGFuYS9NCkFsYXIvTQpBbGFyaWMvTQpBbGFza2EvTQpBbGFza2FuL01TCkFsYmEvTQpBbGJhbmlhL00KQWxiYW5pYW4vTVMKQWxiYW55L00KQWxiZWUvTQpBbGJlcmlvL00KQWxiZXJ0L00KQWxiZXJ0YS9NCkFsYmVydGFuCkFsYmVydG8vTQpBbGJpZ2Vuc2lhbi9NCkFsYmlvbi9NCkFsYmlyZW8vTQpBbGJ1cXVlcnF1ZS9NCkFsY2F0cmF6L00KQWxjZXN0aXMvTQpBbGNpYmlhZGVzL00KQWxjaW5kb3IvTQpBbGNtZW5hL00KQWxjb2EvTQpBbGNvdHQvTQpBbGN1aW4vTQpBbGN5b25lL00KQWxkYW4vTQpBbGRlYmFyYW4vTQpBbGRlbi9NCkFsZGVyYW1pbi9NCkFsZG8vTQpBbGRyaW4vTQpBbGVjL00KQWxlaWNoZW0vTQpBbGVqYW5kcmEvTQpBbGVqYW5kcm8vTQpBbGVtYmVydC9NCkFsZXBwby9NCkFsZXV0L01TCkFsZXV0aWFuL1NNCkFsZXgvTQpBbGV4YW5kZXIvTVMKQWxleGFuZHJhL00KQWxleGFuZHJpYS9NCkFsZXhhbmRyaWFuCkFsZXhlaS9NCkFsZXhpcy9NCkFsZm9uc28vTQpBbGZvbnpvL00KQWxmb3JkL00KQWxmcmVkL00KQWxmcmVkYS9NCkFsZnJlZG8vTQpBbGdlbmliL00KQWxnZXIvTQpBbGdlcmlhL00KQWxnZXJpYW4vU00KQWxnaWViYS9NCkFsZ2llcnMvTQpBbGdvbC9NCkFsZ29ucXVpYW4vU00KQWxnb25xdWluL01TCkFsaGFtYnJhL00KQWxoZW5hL00KQWxpL00KQWxpY2UvTQpBbGljaWEvTQpBbGlnaGllcmkvTQpBbGluZS9NCkFsaW90aC9NCkFsaXNhL00KQWxpc2hhL00KQWxpc29uL00KQWxpc3NhL00KQWxpc3RhaXIvTQpBbGthaWQvTQpBbGxhaC9NCkFsbGFoYWJhZC9NCkFsbGFuL00KQWxsZWdoZW5pZXMvTQpBbGxlZ2hlbnkvU00KQWxsZWdyYS9NCkFsbGVuL00KQWxsZW5kZS9NCkFsbGVudG93bi9NCkFsbGhhbGxvd3MvTQpBbGxpZS9NUwpBbGxpc29uL00KQWxsc3RhdGUvTQpBbGx5c29uL00KQWxtYS9NCkFsbWFjaC9NCkFsbWF0eS9NCkFsbWlnaHR5L00KQWxtb2hhZC9NCkFsbW9yYXZpZC9NCkFsbmlsYW0vTQpBbG5pdGFrL00KQWxvbnpvL00KQWxwZXJ0L00KQWxwaGFyZC9NCkFscGhlY2NhL00KQWxwaGVyYXR6L00KQWxwaG9uc2UvTQpBbHBob25zby9NCkFscGluZS9NCkFscG8vTQpBbHBzL00KQWxzYWNlL00KQWxzYXRpYW4vU00KQWxzb3AvTQpBbHN0b24vTQpBbHRhL00KQWx0YWkvTQpBbHRhaWMvTQpBbHRhaXIvTQpBbHRhbWlyYS9NCkFsdGhlYS9NCkFsdGlwbGFuby9NCkFsdG1hbi9NCkFsdG9pZHMvTQpBbHRvbi9NCkFsdWRyYS9NCkFsdmEvTQpBbHZhcmFkby9NCkFsdmFyZXovTQpBbHZhcm8vTQpBbHZpbi9NCkFseWNlL00KQWx5c29uL00KQWx5c3NhL00KQWx6aGVpbWVyL00KQW0vTU5SCkFtYWRldXMvTQpBbWFkby9NCkFtYWxpYS9NCkFtYW5kYS9NCkFtYXJpbGxvL00KQW1hcnUvTQpBbWF0ZXJhc3UvTQpBbWF0aS9NCkFtYXpvbi9TTQpBbWF6b25pYW4KQW1iZXIvTQpBbWVsaWEvTQpBbWVuL00KQW1lbmhvdGVwL00KQW1lcmFzaWFuL00KQW1lcmljYS9TTQpBbWVyaWNhbi9NUwpBbWVyaWNhbmEvTQpBbWVyaWNhbmlzbS9NUwpBbWVyaWNhbml6YXRpb24vTVMKQW1lcmljYW5pemUvR0RTCkFtZXJpbmQvU00KQW1lcmluZGlhbi9NUwpBbWVzbGFuL00KQW1oYXJpYy9NCkFtaGVyc3QvTQpBbWllL00KQW1pZ2EvTQpBbWlzaC9NCkFtbWFuL00KQW1vY28vTQpBbW9zL00KQW1wYXJvL00KQW1wZXJlL00KQW1yaXRzYXIvTQpBbXN0ZXJkYW0vTQpBbXRyYWsvTQpBbXVuZHNlbi9NCkFtdXIvTQpBbXdheS9NCkFteS9NCkFuYS9NCkFuYWJhcHRpc3QvTQpBbmFiZWwvTQpBbmFjaW4vTQpBbmFjcmVvbi9NCkFuYWhlaW0vTQpBbmFsZWN0cy9NCkFuYW5pYXMvTQpBbmFzYXppL00KQW5hc3Rhc2lhL00KQW5hdG9sZS9NCkFuYXRvbGlhL00KQW5hdG9saWFuL00KQW5heGFnb3Jhcy9NCkFuY2hvcmFnZS9NCkFuZGFsdXNpYS9NCkFuZGFsdXNpYW4vTQpBbmRhbWFuL00KQW5kZWFuL00KQW5kZXJzZW4vTQpBbmRlcnNvbi9NCkFuZGVzL00KQW5kb3JyYS9NCkFuZG9ycmFuL1NNCkFuZHJlL01TCkFuZHJlYS9NCkFuZHJlaS9NCkFuZHJlcy9NCkFuZHJldHRpL00KQW5kcmV3L1NNCkFuZHJld3MvTQpBbmRyaWFuYW1wb2luaW1lcmluYS9NCkFuZHJvaWQvTQpBbmRyb21hY2hlL00KQW5kcm9tZWRhL00KQW5kcm9wb3YvTQpBbmR5L00KQW5nYXJhL00KQW5nZWwvTQpBbmdlbGEvTQpBbmdlbGVzL00KQW5nZWxpYS9NCkFuZ2VsaWNhL00KQW5nZWxpY28vTQpBbmdlbGluYS9NCkFuZ2VsaW5lL00KQW5nZWxpcXVlL00KQW5nZWxpdGEvTQpBbmdlbG8vTQpBbmdlbG91L00KQW5nZXZpbi9NCkFuZ2llL00KQW5na29yL00KQW5nbGUvTVMKQW5nbGlhL00KQW5nbGljYW4vU00KQW5nbGljYW5pc20vTVMKQW5nbGljaXNtL01TCkFuZ2xpY2l6YXRpb24KQW5nbGljaXplCkFuZ2xvL00KQW5nbG9waGlsZS9NCkFuZ2xvcGhvYmUKQW5nb2xhL00KQW5nb2xhbi9NUwpBbmdvcmEvU00KQW5nc3Ryb20vTQpBbmd1aWxsYS9NCkFuZ3VzL00KQW5pYWtjaGFrL00KQW5pYmFsL00KQW5pdGEvTQpBbmthcmEvTQpBbm4vTQpBbm5hL00KQW5uYWJlbC9NCkFubmFiZWxsZS9NCkFubmFtL00KQW5uYXBvbGlzL00KQW5uYXB1cm5hL00KQW5uZS9NCkFubmV0dGUvTQpBbm5pZS9NCkFubm1hcmllL00KQW5udW5jaWF0aW9uL1NNCkFub3VpbGgvTQpBbnNlbG0vTQpBbnNlbG1vL00KQW5zaGFuL00KQW50YWV1cy9NCkFudGFuYW5hcml2by9NCkFudGFyY3RpYy9NCkFudGFyY3RpY2EvTQpBbnRhcmVzL00KQW50aG9ueS9NCkFudGhyb3BvY2VuZQpBbnRpY2hyaXN0L1NNCkFudGlldGFtL00KQW50aWdvbmUvTQpBbnRpZ3VhL00KQW50aWxsZWFuCkFudGlsbGVzL00KQW50aW9jaC9NCkFudGlwYXMvTQpBbnRpcG9kZXMKQW50b2ZhZ2FzdGEvTQpBbnRvaW5lL00KQW50b2luZXR0ZS9NCkFudG9uL00KQW50b25lL00KQW50b25pYS9NCkFudG9uaW51cy9NCkFudG9uaW8vTQpBbnRvbml1cy9NCkFudG9ueS9NCkFudHdhbi9NCkFudHdlcnAvTQpBbnViaXMvTQpBbnphYy9NCkFwYWNoZS9TTQpBcGFsYWNoaWNvbGEvTQpBcGF0b3NhdXJ1cwpBcGVubmluZXMvTQpBcGhyb2RpdGUvTQpBcGlhL00KQXBvY2FseXBzZS9NCkFwb2NyeXBoYS9NCkFwb2xsaW5haXJlL00KQXBvbGxvL1NNCkFwb2xsb25pYW4vTQpBcG9zdGxlL00KQXBwYWxhY2hpYS9NCkFwcGFsYWNoaWFuL1NNCkFwcGFsYWNoaWFucy9NCkFwcGFsb29zYS9TTQpBcHBsZS9NCkFwcGxlc2VlZC9NCkFwcGxldG9uL00KQXBwb21hdHRveC9NCkFwci9NCkFwcmlsL01TCkFwdWxlaXVzL00KQXF1YWZyZXNoL00KQXF1YXJpYW4KQXF1YXJpdXMvTVMKQXF1aWxhL00KQXF1aW5hcy9NCkFxdWluby9NCkFxdWl0YWluZS9NCkFyL00KQXJhL00KQXJhYi9TTQpBcmFiaWEvTQpBcmFiaWFuL01TCkFyYWJpYy9NCkFyYWJpc3QvTVMKQXJhYnkvTQpBcmFjZWxpL00KQXJhZmF0L00KQXJhZ29uCkFyYWd1YXlhL00KQXJhbC9NCkFyYW1haWMvTQpBcmFtY28vTQpBcmFwYWhvL01TCkFyYXBhaG9lcwpBcmFyYXQvTQpBcmF1Y2FuaWFuL00KQXJhd2FrL00KQXJhd2FrYW4vTQpBcmJpdHJvbi9NCkFyY2FkaWEvTQpBcmNhZGlhbi9NCkFyY2hlYW4vTQpBcmNoaWJhbGQvTQpBcmNoaWUvTQpBcmNoaW1lZGVzL00KQXJjdGljL00KQXJjdHVydXMvTQpBcmRhYmlsCkFyZGVuL00KQXJlcXVpcGEvTQpBcmVzL00KQXJnZW50aW5hL00KQXJnZW50aW5lL00KQXJnZW50aW5lYW4KQXJnZW50aW5pYW4vTVMKQXJnby9TTQpBcmdvbmF1dC9NUwpBcmdvbm5lL00KQXJnb3MvTQpBcmd1cy9NCkFyaWFkbmUvTQpBcmlhbmlzbS9NCkFyaWVsL00KQXJpZXMvTVMKQXJpb3N0by9NCkFyaXN0YXJjaHVzL00KQXJpc3RpZGVzL00KQXJpc3RvcGhhbmVzL00KQXJpc3RvdGVsaWFuL00KQXJpc3RvdGxlL00KQXJpdXMvTQpBcml6CkFyaXpvbmEvTQpBcml6b25hbi9TTQpBcml6b25pYW4vTVMKQXJqdW5hL00KQXJrL00KQXJrYW5zYW4vTVMKQXJrYW5zYXMvTQpBcmtoYW5nZWxzay9NCkFya3dyaWdodC9NCkFybGVuZS9NCkFybGluZS9NCkFybGluZ3Rvbi9NCkFybWFnZWRkb24vU00KQXJtYWduYWMvTQpBcm1hbmQvTQpBcm1hbmRvL00KQXJtYW5pL00KQXJtZW5pYS9NCkFybWVuaWFuL1NNCkFybWluaXVzL00KQXJtb25rL00KQXJtb3VyL00KQXJtc3Ryb25nL00KQXJuZWIvTQpBcm5oZW0vTQpBcm5vL00KQXJub2xkL00KQXJudWxmby9NCkFyb24vTQpBcnJoZW5pdXMvTQpBcnJvbi9NCkFydC9NCkFydGF4ZXJ4ZXMvTQpBcnRlbWlzL00KQXJ0aHVyL00KQXJ0aHVyaWFuL00KQXJ0aWUvTQpBcnR1cm8vTQpBcnViYS9NCkFyeWFuL01TCkFzL00KQXNhbWEvTQpBc2NlbGxhL00KQXNjZW5zaW9uL00KQXNnYXJkL00KQXNoYW50aS9NCkFzaGNyb2Z0L00KQXNoZS9NCkFzaGdhYmF0CkFzaGlrYWdhL00KQXNoa2VuYXppbS9NCkFzaGtoYWJhZC9NCkFzaGxlZS9NCkFzaGxleS9NCkFzaG1vbGVhbi9NCkFzaHVyYmFuaXBhbC9NCkFzaWEvTQpBc2lhZ28KQXNpYW4vTVMKQXNpYXRpYy9TTQpBc2ltb3YvTQpBc21hcmEvTQpBc29rYS9NCkFzcGVsbC9NCkFzcGVuL00KQXNwZXJnZXIvTQpBc3BpZGlza2UvTQpBc3F1aXRoL00KQXNzYWQvTQpBc3NhbS9NCkFzc2FtZXNlL00KQXNzZW1ibHkKQXNzaXNpL00KQXNzeXJpYS9NCkFzc3lyaWFuL1NNCkFzdGFpcmUvTQpBc3RhbmEvTQpBc3RhcnRlL00KQXN0b24vTQpBc3Rvci9NCkFzdG9yaWEvTQpBc3RyYWtoYW4vTQpBc3Ryb1R1cmYvTQpBc3R1cmlhcy9NCkFzdW5jaW9uL00KQXN3YW4vTQpBdC9TTQpBdGFjYW1hL00KQXRhaHVhbHBhL00KQXRhbGFudGEvTQpBdGFyaS9NCkF0YXR1cmsvTQpBdGhhYmFzY2EvTQpBdGhhYmFza2FuL1NNCkF0aGFuYXNpdXMKQXRoZW5hL00KQXRoZW5lL00KQXRoZW5pYW4vU00KQXRoZW5zL00KQXRraW5zL00KQXRraW5zb24vTQpBdGxhbnRhL00KQXRsYW50ZXMKQXRsYW50aWMvTQpBdGxhbnRpcy9NCkF0bGFzL01TCkF0bWFuL00KQXRvbmVtZW50CkF0cmV1cy9NCkF0cmlhL00KQXRyb3Bvcy9NCkF0dGljL00KQXR0aWNhL00KQXR0aWxhL00KQXR0bGVlL00KQXR0bgpBdHR1Y2tzL00KQXR3b29kL00KQXUvTQpBdWJyZXkvTQpBdWNrbGFuZC9NCkF1ZGVuL00KQXVkaS9NCkF1ZGlvbi9NCkF1ZHJhL00KQXVkcmV5L00KQXVkdWJvbi9NCkF1Zy9NCkF1Z2Vhbi9NCkF1Z3NidXJnL00KQXVndXN0L01TCkF1Z3VzdGEvTQpBdWd1c3Rhbi9NCkF1Z3VzdGluZS9NCkF1Z3VzdGluaWFuL01TCkF1Z3VzdHVzL00KQXVyYW5nemViL00KQXVyZWxpYS9NCkF1cmVsaW8vTQpBdXJlbGl1cy9NCkF1cmVvbXljaW4vTQpBdXJpZ2EvTQpBdXJvcmEvTQpBdXNjaHdpdHovTQpBdXNzaWUvTVMKQXVzdGVuL00KQXVzdGVybGl0ei9NCkF1c3Rpbi9NUwpBdXN0cmFsYXNpYS9NCkF1c3RyYWxhc2lhbgpBdXN0cmFsaWEvTQpBdXN0cmFsaWFuL1NNCkF1c3RyYWxvaWQvTQpBdXN0cmFsb3BpdGhlY3VzL00KQXVzdHJpYS9NCkF1c3RyaWFuL1NNCkF1c3Ryb25lc2lhbi9NCkF1dHVtbi9NCkF2L00KQXZhL00KQXZhbG9uL00KQXZlL00KQXZlbnRpbmUvTQpBdmVybnVzL00KQXZlcnJvZXMvTQpBdmVyeS9NCkF2ZXN0YS9NCkF2aWNlbm5hL00KQXZpZ25vbi9NCkF2aWxhL00KQXZpb3IvTQpBdmlzL00KQXZvZ2Fkcm8vTQpBdm9uL00KQXhpcwpBeHVtL00KQXlhbGEvTQpBeWVycy9NCkF5bWFyYS9NCkF5cnNoaXJlL00KQXl1cnZlZGEvTQpBeXl1YmlkL00KQXphbmEvTQpBemFuaWEvTQpBemF6ZWwvTQpBemVyYmFpamFuL00KQXplcmJhaWphbmkvTVMKQXpvcmVzL00KQXpvdi9NCkF6dGVjL1NNCkF6dGVjYW4vTQpBenRsYW4vTQpCL01OVApCQS9NCkJBU0lDL1NNCkJCL00KQkJCL00KQkJDL00KQkJRCkJCUwpCQlNlcwpCQy9NCkJGRgpCSUEKQklPUwpCSVRORVQKQkxUL1NNCkJNL00KQk1XL00KQk8KQlAvTQpCUE9FCkJSCkJTL00KQlNBCkJTRC9TTQpCVFUKQlRXCkJZT0IKQmEvTQpCYWFsL1NNCkJhYXRoL00KQmFhdGhpc3QvTQpCYWJiYWdlL00KQmFiYml0dC9NCkJhYmVsL01TCkJhYnlsb24vTVMKQmFieWxvbmlhL00KQmFieWxvbmlhbi9TTQpCYWNhbGwvTQpCYWNhcmRpL00KQmFjY2hhbmFsaWEvTQpCYWNjaGljCkJhY2NodXMvTQpCYWNoL00KQmFja3VzL00KQmFjb24vTQpCYWN0cmlhL00KQmFkZW4vTQpCYWRsYW5kcy9NCkJhZWRla2VyL01TCkJhZXovTQpCYWZmaW4vTQpCYWdnaWVzL00KQmFnaGRhZC9NCkJhZ3Vpby9NCkJhaGEnaS9NCkJhaGEndWxsYWgvTQpCYWhhbWEvU00KQmFoYW1hbmlhbgpCYWhhbWFzL00KQmFoYW1pYW4vTVMKQmFoaWEvTQpCYWhyYWluL00KQmFpa2FsL00KQmFpbGV5L00KQmFpcmQvTQpCYWtlbGl0ZS9NCkJha2VyL00KQmFrZXJzZmllbGQvTQpCYWt1L00KQmFrdW5pbi9NCkJhbGFuY2hpbmUvTQpCYWxhdG9uL00KQmFsYm9hL00KQmFsZGVyL00KQmFsZHdpbi9TTQpCYWxlYXJpYy9NCkJhbGZvdXIvTQpCYWxpL00KQmFsaW5lc2UvTQpCYWxrYW4vTVMKQmFsa2Fucy9NCkJhbGtoYXNoL00KQmFsbC9NCkJhbGxhcmQvTQpCYWx0aGF6YXIvTQpCYWx0aWMvTQpCYWx0aW1vcmUvTQpCYWx1Y2hpc3Rhbi9NCkJhbHphYy9NCkJhbWFrby9NCkJhbWJpL00KQmFuYWNoL00KQmFuY3JvZnQvTQpCYW5kdW5nL00KQmFuZ2Fsb3JlL00KQmFuZ2tvay9NCkJhbmdsYWRlc2gvTQpCYW5nbGFkZXNoaS9TTQpCYW5nb3IvTQpCYW5ndWkvTQpCYW5qYXJtYXNpbi9NCkJhbmp1bC9NCkJhbmtzL00KQmFubmVrZXIvTQpCYW5uaXN0ZXIvTQpCYW50aW5nL00KQmFudHUvTVMKQmFvdG91L00KQmFwdGlzdC9TTQpCYXB0aXN0ZS9NCkJhcmFiYmFzL00KQmFyYWNrL00KQmFyYmFkaWFuL1NNCkJhcmJhZG9zL00KQmFyYmFyYS9NCkJhcmJhcmVsbGEvTQpCYXJiYXJvc3NhL00KQmFyYmFyeS9NCkJhcmJlci9NCkJhcmJpZS9NCkJhcmJvdXIvTQpCYXJicmEvTQpCYXJidWRhL00KQmFyY2Vsb25hL00KQmFyY2xheS9TTQpCYXJjbGF5cy9NCkJhcmRlZW4vTQpCYXJlbnRzL00KQmFya2VyL00KQmFya2xleS9NCkJhcmxvdy9NCkJhcm5hYmFzL00KQmFybmFieS9NCkJhcm5hcmQvTQpCYXJuYXVsL00KQmFybmVzL00KQmFybmV0dC9NCkJhcm5leS9NCkJhcm51bS9NCkJhcm9kYS9NCkJhcnF1aXNpbWV0by9NCkJhcnIvTQpCYXJyYW5xdWlsbGEvTQpCYXJyZXJhL00KQmFycmV0dC9NCkJhcnJpZS9NCkJhcnJvbi9NCkJhcnJ5L00KQmFycnltb3JlL00KQmFydC9NCkJhcnRoL01TCkJhcnRob2xkaS9NCkJhcnRob2xvbWV3L00KQmFydGxldHQvTQpCYXJ0b2svTQpCYXJ0b24vTQpCYXJ1Y2gvTQpCYXJ5c2huaWtvdi9NCkJhc2VsL00KQmFzaG8vTQpCYXNpZS9NCkJhc2lsL00KQmFzcXVlL01TCkJhc3JhL00KQmFzcy9NCkJhc3NldGVycmUvTQpCYXN0aWxsZS9NCkJhc3V0b2xhbmQvTQpCYXRhYW4vTQpCYXRlcy9NCkJhdGhzaGViYS9NCkJhdGlzdGEvTQpCYXRtYW4vTQpCYXR0bGUvTQpCYXR1L00KQmF1ZGVsYWlyZS9NCkJhdWRvdWluL00KQmF1ZHJpbGxhcmQvTQpCYXVlci9NCkJhdWhhdXMvTQpCYXVtL00KQmF2YXJpYS9NCkJhdmFyaWFuL00KQmF4dGVyL00KQmF5YW1vbgpCYXllci9NCkJheWVzL00KQmF5ZXNpYW4vTQpCYXlldXgvTQpCYXlsb3IvTQpCYXlvbm5lL00KQmF5cmV1dGgvTQpCYXl3YXRjaC9NCkJlL01ICkJlYWNoL00KQmVhZGxlL00KQmVhbi9NCkJlYXJkL00KQmVhcmRtb3JlL00KQmVhcmRzbGV5L00KQmVhcm5haXNlL00KQmVhc2xleS9NCkJlYXRsZW1hbmlhL00KQmVhdGxlcy9NCkJlYXRyaWNlL00KQmVhdHJpeC9NCkJlYXRyaXovTQpCZWF0dHkvTQpCZWF1L00KQmVhdWZvcnQvTQpCZWF1am9sYWlzL00KQmVhdW1hcmNoYWlzL00KQmVhdW1vbnQvTQpCZWF1cmVnYXJkL00KQmVhdXZvaXIvTQpCZWNodGVsL00KQmVjay9NUgpCZWNrZXIvTQpCZWNrZXQvTQpCZWNrZXR0L00KQmVja3kvTQpCZWNxdWVyZWwvTQpCZWRlL00KQmVkb3Vpbi9TTQpCZWViZS9NCkJlZWNoZXIvTQpCZWVmYXJvbmkvTQpCZWVsemVidWIvTQpCZWVyYm9obS9NCkJlZXRob3Zlbi9NCkJlZXRvbi9NCkJlZ2luL00KQmVoYW4vTQpCZWhyaW5nL00KQmVpZGVyYmVja2UvTQpCZWlqaW5nL00KQmVpcnV0L00KQmVrZXN5L00KQmVsYS9NCkJlbGFydXMvTQpCZWxhdS9NCkJlbGVtL00KQmVsZmFzdC9NCkJlbGcKQmVsZ2lhbi9TTQpCZWxnaXVtL00KQmVsZ3JhZGUvTQpCZWxpbmRhL00KQmVsaXplL00KQmVsbC9NCkJlbGxhL00KQmVsbGFteS9NCkJlbGxhdHJpeC9NCkJlbGxlZWsvTQpCZWxsaW5pL00KQmVsbG93L00KQmVsbW9udC9NCkJlbG1vcGFuL00KQmVsb3J1c3NpYW4vTVMKQmVsc2hhenphci9NCkJlbHRhbmUvTQpCZWx1c2hpL00KQmVuL00KQmVuYWNlcnJhZi9NCkJlbmNobGV5L00KQmVuZGVyL00KQmVuZGl4L00KQmVuZWRpY3QvTQpCZW5lZGljdGluZS9NUwpCZW5lbHV4L00KQmVuZXQvTQpCZW5ldHRvbi9NCkJlbmdhbC9TTQpCZW5nYWxpL00KQmVuZ2hhemkvTQpCZW5pbi9NCkJlbmluZXNlL00KQmVuaXRhL00KQmVuaXRvL00KQmVuamFtaW4vTQpCZW5uZXR0L00KQmVubmllL00KQmVubnkvTQpCZW5zb24vTQpCZW50aGFtL00KQmVudGxleS9NCkJlbnRvbi9NCkJlbnovTQpCZW56ZWRyaW5lL00KQmVvd3VsZi9NCkJlcmJlci9TTQpCZXJlbmljZS9NCkJlcmV0dGEvTQpCZXJnL01OUgpCZXJnZW4vTQpCZXJnZXIvTQpCZXJnZXJhYy9NCkJlcmdtYW4vTQpCZXJnc29uL00KQmVyaWEvTQpCZXJpbmcvTQpCZXJrZWxleS9NCkJlcmtzaGlyZS9TTQpCZXJrc2hpcmVzL00KQmVybGUvTQpCZXJsaW4vU1pNUgpCZXJsaW5lci9NCkJlcmxpb3ovTQpCZXJsaXR6L00KQmVybXVkYS9TTQpCZXJtdWRhbi9TTQpCZXJtdWRpYW4vU00KQmVybi9NCkJlcm5hZGV0dGUvTQpCZXJuYWRpbmUvTQpCZXJuYW5rZS9NCkJlcm5hcmQvTQpCZXJuYXJkby9NCkJlcm5heXMvTQpCZXJuYmFjaC9NCkJlcm5lc2UKQmVybmhhcmR0L00KQmVybmljZS9NCkJlcm5pZS9NCkJlcm5pbmkvTQpCZXJub3VsbGkvTQpCZXJuc3RlaW4vTQpCZXJyYS9NCkJlcnJ5L00KQmVydC9NCkJlcnRhL00KQmVydGVsc21hbm4vTQpCZXJ0aGEvTQpCZXJ0aWUvTQpCZXJ0aWxsb24vTQpCZXJ0cmFtL00KQmVydHJhbmQvTQpCZXJ5bC9NCkJlcnplbGl1cy9NCkJlc3MvTQpCZXNzZWwvTQpCZXNzZW1lci9NCkJlc3NpZS9NCkJlc3QvTQpCZXRlbGdldXNlL00KQmV0aC9NCkJldGhhbnkvTQpCZXRoZS9NCkJldGhlc2RhL00KQmV0aGxlaGVtL00KQmV0aHVuZS9NCkJldHN5L00KQmV0dGUvTQpCZXR0aWUvTQpCZXR0eS9NCkJldHR5ZS9NCkJldWxhaC9NCkJldmVyaWRnZQpCZXZlcmxleS9NCkJldmVybHkvTQpCZXllci9NCkJoYXJhdC9NCkJob3BhbC9NCkJodXRhbi9NCkJodXRhbmVzZS9NCkJodXR0by9NCkJpL00KQmlhbHlzdG9rL00KQmlhbmNhL00KQmliCkJpYmxlL01TCkJpYy9NCkJpZGRsZS9NCkJpZGVuL00KQmllcmNlL00KQmlnZm9vdC9NCkJpZ2dsZXMvTQpCaWtvL00KQmlsYmFvL00KQmlsYm8vTQpCaWxsL01KCkJpbGxpZS9NCkJpbGxpbmdzL00KQmlsbHkvTQpCaW1pbmkvTQpCaW9rby9NCkJpcmQvTQpCaXJkc2V5ZS9NCkJpcmtlbnN0b2NrL00KQmlybWluZ2hhbS9NCkJpcm8vTQpCaXNjYXkvTQpCaXNjYXluZS9NCkJpc2hrZWsvTQpCaXNob3AvTQpCaXNtYXJjay9NCkJpc21hcmsvTQpCaXNxdWljay9NCkJpc3NhdS9NCkJpdFRvcnJlbnQvTQpCaXpldC9NCkJqZXJrbmVzL00KQmpvcmsvTQpCay9NCkJsYWNrQmVycnkvTQpCbGFja2JlYXJkL00KQmxhY2tidXJuL00KQmxhY2tmZWV0L00KQmxhY2tmb290L00KQmxhY2twb29sL00KQmxhY2tzaGlydC9NCkJsYWNrc3RvbmUvTQpCbGFja3dlbGwvTQpCbGFpbmUvTQpCbGFpci9NCkJsYWtlL00KQmxhbmNhL00KQmxhbmNoYXJkL00KQmxhbmNoZS9NCkJsYW5rZW5zaGlwL00KQmxhbnR5cmUvTQpCbGF0ei9NCkJsYXZhdHNreS9NCkJsZW5oZWltL00KQmxldmlucy9NCkJsaWdoL00KQmxvY2gvTQpCbG9ja2J1c3Rlci9NCkJsb2VtZm9udGVpbi9NCkJsb25kZWwvTQpCbG9uZGllL00KQmxvb20vTVIKQmxvb21lci9NCkJsb29tZmllbGQvTQpCbG9vbWluZ2RhbGUvTQpCbG9vbXNidXJ5L00KQmx1CkJsdWNoZXIvTQpCbHVlYmVhcmQvTQpCbHVldG9vdGgvTQpCbHZkCkJseXRoZS9NCkJvYWRpY2VhCkJvYXMvTQpCb2IvTQpCb2JiaS9NCkJvYmJpZS9NCkJvYmJpdHQvTQpCb2JieS9NCkJvY2NhY2Npby9NCkJvZGhpZGhhcm1hL00KQm9kaGlzYXR0dmEvTQpCb2RsZWlhbgpCb2VpbmcvTQpCb2VvdGlhL00KQm9lb3RpYW4vTQpCb2VyL1NNCkJvZXRoaXVzL00KQm9nYXJ0L00KQm9nb3RhL00KQm9oZW1pYS9NCkJvaGVtaWFuL1NNCkJvaHIvTQpCb2lzZS9NCkJvamFuZ2xlcy9NCkJvbGV5bi9NCkJvbGl2YXIvTQpCb2xpdmlhL00KQm9saXZpYW4vTVMKQm9sbHl3b29kL00KQm9sb2duYS9NCkJvbHNoZXZpay9TTQpCb2xzaGV2aWtpCkJvbHNoZXZpc20vTQpCb2xzaGV2aXN0L00KQm9sc2hvaS9NCkJvbHRvbi9NCkJvbHR6bWFubi9NCkJvbWJheS9NCkJvbmFwYXJ0ZS9NCkJvbmF2ZW50dXJlL00KQm9uZC9NCkJvbmhvZWZmZXIvTQpCb25pZmFjZS9NCkJvbml0YS9NCkJvbm4vTVIKQm9ubmVyL00KQm9ubmV2aWxsZS9NCkJvbm5pZS9NCkJvbm8vTQpCb29rZXIvTQpCb29sZS9NCkJvb2xlYW4vTQpCb29uZS9NCkJvb3Rlcy9NCkJvb3RoL00KQm9yZGVhdXgvTQpCb3JkZW4vTQpCb3Jkb24vTQpCb3JlYXMvTQpCb3JnL1NNCkJvcmdlcy9NCkJvcmdpYS9NCkJvcmdsdW0vTQpCb3Jpcy9NCkJvcmsvTQpCb3JsYXVnL00KQm9ybi9NCkJvcm5lby9NCkJvcm9idWR1ci9NCkJvcm9kaW4vTQpCb3J1L00KQm9zY2gvTQpCb3NlL00KQm9zbmlhL00KQm9zbmlhbgpCb3Nwb3J1cy9NCkJvc3Rvbi9NUwpCb3N0b25pYW4vTQpCb3N3ZWxsL00KQm90b3gKQm90c3dhbmEvTQpCb3R0aWNlbGxpL00KQm91bGRlci9NCkJvdWxlei9NCkJvdXJiYWtpL00KQm91cmJvbi9TTQpCb3VybmVtb3V0aC9NCkJvdmFyeS9NCkJvd2RpdGNoL00KQm93ZWxsL00KQm93ZW4vTQpCb3dlcnMvTQpCb3dlcnkvTQpCb3dpZS9NCkJvd21hbi9NCkJveWQvTQpCb3llci9NCkJveWxlL00KQnIvTVQKQnJhZC9NWQpCcmFkYnVyeS9NCkJyYWRkb2NrL00KQnJhZGZvcmQvTQpCcmFkbGV5L00KQnJhZGx5L00KQnJhZHNoYXcvTQpCcmFkc3RyZWV0L00KQnJhZHkvTQpCcmFnZy9NCkJyYWhlL00KQnJhaG1hL01TCkJyYWhtYWd1cHRhL00KQnJhaG1hbi9NUwpCcmFobWFuaQpCcmFobWFuaXNtL1NNCkJyYWhtYXB1dHJhL00KQnJhaG1zL00KQnJhaWxsZS9NUwpCcmFpbi9NCkJyYW1wdG9uL00KQnJhbi9NCkJyYW5jaC9NCkJyYW5kZWlzL00KQnJhbmRlbi9NCkJyYW5kZW5idXJnL00KQnJhbmRpL00KQnJhbmRpZS9NCkJyYW5kby9NCkJyYW5kb24vTQpCcmFuZHQvTQpCcmFuZHkvTQpCcmFudC9NCkJyYXF1ZS9NCkJyYXNpbGlhL00KQnJhdGlzbGF2YS9NCkJyYXR0YWluL00KQnJheS9NCkJyYXppbC9NCkJyYXppbGlhbi9NUwpCcmF6b3MvTQpCcmF6emF2aWxsZS9NCkJyZWFrc3BlYXIvTQpCcmVhdGhhbHl6ZXIKQnJlY2h0L00KQnJlY2tlbnJpZGdlL00KQnJlbWVuL00KQnJlbmRhL00KQnJlbmRhbi9NCkJyZW5uYW4vTQpCcmVubmVyL00KQnJlbnQvTQpCcmVudG9uL00KQnJlc3QvTQpCcmV0L00KQnJldG9uL00KQnJldHQvTQpCcmV3ZXIvTQpCcmV3c3Rlci9NCkJyZXpobmV2L00KQnJpYW4vTQpCcmlhbmEvTQpCcmlhbm5hL00KQnJpY2UvTQpCcmlkYWx2ZWlsL00KQnJpZGdlcG9ydC9NCkJyaWRnZXIvTQpCcmlkZ2VzL00KQnJpZGdldC9NCkJyaWRnZXRvd24vTQpCcmlkZ2V0dC9NCkJyaWRnZXR0ZS9NCkJyaWRnbWFuL00KQnJpZS9TTQpCcmlnYWRvb24vTQpCcmlnZ3MvTQpCcmlnaGFtL00KQnJpZ2h0L00KQnJpZ2h0b24vTQpCcmlnaWQvTQpCcmlnaXR0ZS9NCkJyaWxsby9NCkJyaW5rbGV5L00KQnJpc2JhbmUvTQpCcmlzdG9sL00KQnJpdC9TTQpCcml0YWluL00KQnJpdGFubmlhL00KQnJpdGFubmljL00KQnJpdGFubmljYS9NCkJyaXRpY2lzbS9TTQpCcml0aXNoL01SWgpCcml0aXNoZXIvTQpCcml0bmV5L00KQnJpdG9uL01TCkJyaXR0L01OCkJyaXR0YW55L1NNCkJyaXR0ZW4vTQpCcml0dG5leS9NCkJybm8vTQpCcm9hZHdheS9TTQpCcm9iZGluZ25hZy9NCkJyb2JkaW5nbmFnaWFuL00KQnJvY2svTQpCcm9rYXcvTQpCcm9uc29uL00KQnJvbnRlL00KQnJvbnRvc2F1cnVzCkJyb254L00KQnJvb2tlL01TCkJyb29rbHluL00KQnJvb2tzL00KQnJvcwpCcm93bi9NRwpCcm93bmUvTQpCcm93bmlhbi9NCkJyb3duaWUvUwpCcm93bmluZy9NCkJyb3duc2hpcnQvTQpCcm93bnN2aWxsZS9NCkJydWJlY2svTQpCcnVjZS9NCkJydWNrbmVyL00KQnJ1ZWdlbApCcnVtbWVsL00KQnJ1bmVpL00KQnJ1bmVpYW4vTVMKQnJ1bmVsbGVzY2hpL00KQnJ1bmhpbGRlL00KQnJ1bm8vTQpCcnVuc3dpY2svTQpCcnVzc2Vscy9NCkJydXQvTQpCcnV0dXMvTQpCcnlhbi9NCkJyeWFudC9NCkJyeWNlL00KQnJ5bm5lci9NCkJyeW9uL00KQnJ6ZXppbnNraS9NCkJ0dS9NCkJ1YmVyL00KQnVjaGFuYW4vTQpCdWNoYXJlc3QvTQpCdWNoZW53YWxkL00KQnVjaHdhbGQvTQpCdWNrL00KQnVja2luZ2hhbS9NCkJ1Y2tsZXkvTQpCdWNrbmVyL00KQnVkL00KQnVkYXBlc3QvTQpCdWRkaGEvU00KQnVkZGhpc20vU00KQnVkZGhpc3QvU00KQnVkZHkvTQpCdWR3ZWlzZXIvTQpCdWZmYWxvL00KQnVmZnkvTQpCdWZvcmQvTQpCdWdhdHRpL00KQnVnemlsbGEvTQpCdWljay9NCkJ1anVtYnVyYS9NCkJ1a2hhcmEvTQpCdWtoYXJpbi9NCkJ1bGF3YXlvL00KQnVsZmluY2gvTQpCdWxnYW5pbi9NCkJ1bGdhci9NCkJ1bGdhcmkvTQpCdWxnYXJpYS9NCkJ1bGdhcmlhbi9TTQpCdWxsb2NrL00KQnVsbHdpbmtsZS9NCkJ1bHRtYW5uL00KQnVtcHBvL00KQnVuY2hlL00KQnVuZGVzYmFuay9NCkJ1bmRlc3RhZy9NCkJ1bmluL00KQnVua2VyL00KQnVuc2VuL00KQnVudWVsL00KQnVueWFuL00KQnVyYmFuay9NCkJ1cmJlcnJ5L00KQnVyY2gvTQpCdXJnZXIvTQpCdXJnZXNzL00KQnVyZ295bmUvTQpCdXJndW5kaWFuL00KQnVyZ3VuZHkvU00KQnVya2UvTQpCdXJrcy9NCkJ1cmwvTQpCdXJsaW5ndG9uL00KQnVybWEvTQpCdXJtZXNlL00KQnVybmV0dC9NCkJ1cm5zL00KQnVybnNpZGUvTQpCdXJyL00KQnVycmlzL00KQnVycm91Z2hzL00KQnVyc2EvTQpCdXJ0L00KQnVydG9uL00KQnVydW5kaS9NCkJ1cnVuZGlhbi9NUwpCdXNjaC9NCkJ1c2gvTQpCdXNoaWRvL00KQnVzaG5lbGwvTQpCdXRsZXIvTQpCdXR0ZXJmaW5nZXJzL00KQnV4dGVodWRlL00KQnlibG9zL00KQnllcnMvTQpCeXJkL00KQnlyb24vTQpCeXJvbmljL00KQnl6YW50aW5lL01TCkJ5emFudGl1bS9NCkMvU00KQ0EKQ0FEL00KQ0FJCkNBTQpDQVAKQ0FSRQpDQVRWCkNCCkNCQy9NCkNCUy9NCkNDVFYKQ0NVCkNEL00KQ0RDCkNEVApDRU8vTQpDRgpDRkMvTQpDRk8KQ0dJCkNJQS9NCkNJRApDTk4vTQpDTlMvTQpDTy9NCkNPQk9ML1NNCkNPRApDT0wKQ09MQQpDUEEvTQpDUEkvTQpDUE8KQ1BSL00KQ1BVL00KQ1JUL1NNCkNTVC9NCkNUL00KQ1YKQ1ZTL00KQ1oKQ2EvTQpDYWJlcm5ldC9NCkNhYm90L00KQ2FicmFsL00KQ2FicmVyYS9NCkNhYnJpbmkvTQpDYWRldHRlCkNhZGlsbGFjL00KQ2FkaXovTQpDYWVkbW9uL00KQ2FlcnBoaWxseS9NCkNhZXNhci9TTQpDYWdlL00KQ2FnbmV5L00KQ2Fob2tpYS9NCkNhaWFwaGFzL00KQ2Fpbi9TTQpDYWlyby9NCkNhaXRsaW4vTQpDYWp1bi9NUwpDYWwvTQpDYWxhaXMvTQpDYWxjdXR0YS9NCkNhbGRlci9NCkNhbGRlcm9uL00KQ2FsZHdlbGwvTQpDYWxlYi9NCkNhbGVkb25pYS9NCkNhbGdhcnkvTQpDYWxob3VuL00KQ2FsaS9NCkNhbGliYW4vTQpDYWxpZgpDYWxpZm9ybmlhL00KQ2FsaWZvcm5pYW4vU00KQ2FsaWd1bGEvTQpDYWxsYWdoYW4vTQpDYWxsYWhhbi9NCkNhbGxhby9NCkNhbGxhcy9NCkNhbGxpZS9NCkNhbGxpb3BlL00KQ2FsbGlzdG8vTQpDYWxvb2Nhbi9NCkNhbHZhcnkvTQpDYWx2ZXJ0L00KQ2FsdmluL00KQ2FsdmluaXNtL01TCkNhbHZpbmlzdC9NUwpDYWx2aW5pc3RpYwpDYW1hY2hvL00KQ2FtYm9kaWEvTQpDYW1ib2RpYW4vU00KQ2FtYnJpYW4vU00KQ2FtYnJpZGdlL00KQ2FtZGVuL00KQ2FtZWwvTQpDYW1lbG9wYXJkYWxpcy9NCkNhbWVsb3QvTVMKQ2FtZW1iZXJ0L01TCkNhbWVyb24vTQpDYW1lcm9vbi9TTQpDYW1lcm9vbmlhbi9NUwpDYW1pbGxhL00KQ2FtaWxsZS9NCkNhbW9lbnMvTQpDYW1wYW5lbGxhL00KQ2FtcGJlbGwvTQpDYW1waW5hcy9NCkNhbXBvcy9NCkNhbXJ5L00KQ2FtdXMvTQpDYW4vTQpDYW5hYW4vTQpDYW5hYW5pdGUvTVMKQ2FuYWQKQ2FuYWRhL00KQ2FuYWRpYW4vU00KQ2FuYWRpYW5pc20KQ2FuYWxldHRvL00KQ2FuYXJpZXMvTQpDYW5hdmVyYWwvTQpDYW5iZXJyYS9NCkNhbmNlci9TTQpDYW5jdW4vTQpDYW5kYWNlL00KQ2FuZGljZS9NCkNhbmRpZGUvTQpDYW5keS9NCkNhbm5lcy9NCkNhbm5vbi9NCkNhbm9uL00KQ2Fub3B1cy9NCkNhbnRhYnJpZ2lhbi9NCkNhbnRlcmJ1cnkvTQpDYW50b24vTQpDYW50b25lc2UvTQpDYW50b3IvTQpDYW50cmVsbC9NCkNhbnR1L00KQ2FudXRlL00KQ2FwYWJsYW5jYS9NCkNhcGVrL00KQ2FwZWxsYS9NCkNhcGV0L00KQ2FwZXRpYW4vTQpDYXBldG93bi9NCkNhcGgvTQpDYXBpc3RyYW5vL00KQ2FwaXRvbC9TTQpDYXBpdG9saW5lL00KQ2Fwb25lL00KQ2Fwb3RlL00KQ2FwcmEvTQpDYXByaS9NCkNhcHJpY29ybi9NUwpDYXB0CkNhcHVjaGluL00KQ2FwdWxldC9NCkNhcmEvTQpDYXJhY2FsbGEvTQpDYXJhY2FzL00KQ2FyYXZhZ2dpby9NCkNhcmJvbG95L00KQ2FyYm9uaWZlcm91cy9NCkNhcmJvcnVuZHVtL00KQ2FyZGVuYXMvTQpDYXJkaWZmL00KQ2FyZGluL00KQ2FyZG96by9NCkNhcmV5L00KQ2FyaWIvTVMKQ2FyaWJiZWFuL01TCkNhcmluYS9NCkNhcmlzc2EvTQpDYXJsL00KQ2FybGEvTQpDYXJsZW5lL00KQ2FybGluL00KQ2FybG8vTVMKQ2FybG9zL00KQ2FybHNiYWQvTQpDYXJsc29uL00KQ2FybHRvbi9NCkNhcmx5L00KQ2FybHlsZS9NCkNhcm1lbGEvTQpDYXJtZWxsYS9NCkNhcm1lbG8vTQpDYXJtZW4vTQpDYXJtaWNoYWVsL00KQ2FybWluZS9NCkNhcm5hcC9NCkNhcm5hdGlvbi9NCkNhcm5lZ2llL00KQ2FybmV5L00KQ2Fybm90L00KQ2Fyb2wvTQpDYXJvbGUvTQpDYXJvbGluYS9NCkNhcm9saW5lL00KQ2Fyb2xpbmdpYW4vTQpDYXJvbGluaWFuL00KQ2Fyb2x5bi9NCkNhcnBhdGhpYW4vU00KQ2FycGF0aGlhbnMvTQpDYXJwZW50ZXIvTQpDYXJyL00KQ2FycmFuemEvTQpDYXJyaWUvUk0KQ2Fycmllci9NCkNhcnJpbGxvL00KQ2Fycm9sbC9NCkNhcnNvbi9NCkNhcnRlci9NCkNhcnRlc2lhbi9NCkNhcnRoYWdlL00KQ2FydGhhZ2luaWFuL01TCkNhcnRpZXIvTQpDYXJ0d3JpZ2h0L00KQ2FydXNvL00KQ2FydmVyL00KQ2FyeS9NCkNhc2FibGFuY2EvTQpDYXNhbHMvTQpDYXNhbmRyYS9NCkNhc2Fub3ZhL1NNCkNhc2NhZGVzL00KQ2FzZS9NCkNhc2V5L00KQ2FzaC9NCkNhc2lvL00KQ2FzcGFyL00KQ2FzcGlhbi9NCkNhc3NhbmRyYS9TTQpDYXNzYXR0L00KQ2Fzc2lkeS9NCkNhc3NpZS9NCkNhc3Npb3BlaWEvTQpDYXNzaXVzL00KQ2FzdGFuZWRhL00KQ2FzdGlsaWFuCkNhc3RpbGxvL00KQ2FzdGxlcmVhZ2gvTQpDYXN0b3IvTQpDYXN0cmllcy9NCkNhc3Ryby9NCkNhdGFsYW4vU00KQ2F0YWxpbmEvTQpDYXRhbG9uaWEvTQpDYXRhd2JhL00KQ2F0ZXJwaWxsYXIvTQpDYXRoYXkvTQpDYXRoZXIvTQpDYXRoZXJpbmUvTQpDYXRobGVlbi9NCkNhdGhvbGljL01TCkNhdGhvbGljaXNtL01TCkNhdGhyeW4vTQpDYXRoeS9NCkNhdGlsaW5lL00KQ2F0by9NCkNhdHNraWxsL1NNCkNhdHNraWxscy9NCkNhdHQvTQpDYXR1bGx1cy9NCkNhdWNhc2lhbi9NUwpDYXVjYXNvaWQKQ2F1Y2FzdXMvTQpDYXVjaHkvTQpDYXZlbmRpc2gvTQpDYXZvdXIvTQpDYXh0b24vTQpDYXllbm5lL00KQ2F5bWFuL00KQ2F5dWdhL1NNCkNheXVzZQpDYgpDZC9NCkNlL00KQ2VhdXNlc2N1L00KQ2VidS9NCkNlYnVhbm8vTQpDZWNlbGlhL00KQ2VjaWwvTQpDZWNpbGUvTQpDZWNpbGlhL00KQ2VjaWx5L00KQ2VkcmljL00KQ2VsZXN0ZS9NCkNlbGlhL00KQ2VsaW5hL00KQ2VsbGluaS9NCkNlbHNpdXMvTQpDZWx0L1NNCkNlbHRpYy9TTQpDZW5vem9pYy9NCkNlbnRhdXJ1cy9NCkNlbnRpZ3JhZGUKQ2VudHJhbApDZXBoZWlkL00KQ2VwaGV1cy9NCkNlcmJlcnVzL00KQ2VyZW5rb3YvTQpDZXJlcy9NCkNlcmYvTQpDZXJ2YW50ZXMvTQpDZXNhci9NCkNlc2FyZWFuL00KQ2Vzc25hL00KQ2V0dXMvTQpDZXlsb24vTQpDZXlsb25lc2UKQ2V6YW5uZS9NCkNmL00KQ2gnaW4vTQpDaC9OCkNoYWJsaXMvTQpDaGFkL00KQ2hhZGlhbi9NUwpDaGFkd2ljay9NCkNoYWdhbGwvTQpDaGFpdGFueWEvTQpDaGFpdGluL00KQ2hhbGRlYQpDaGFsZGVhbi9NCkNoYWxsZW5nZXIvTQpDaGFsbWVycwpDaGFtYmVybGFpbi9NCkNoYW1iZXJzL00KQ2hhbXBsYWluL00KQ2hhbXBvbGxpb24vTQpDaGFuL00KQ2hhbmNlL00KQ2hhbmNlbGxvcnN2aWxsZS9NCkNoYW5kaWdhcmgvTQpDaGFuZGxlci9NCkNoYW5kb24vTQpDaGFuZHJhL00KQ2hhbmRyYWd1cHRhL00KQ2hhbmRyYXNla2hhci9NCkNoYW5lbC9NCkNoYW5leS9NCkNoYW5nL00KQ2hhbmdjaHVuL00KQ2hhbmdzaGEvTQpDaGFudGlsbHkvTQpDaGFwbGluL00KQ2hhcGxpbmVzcXVlCkNoYXBtYW4vTQpDaGFwcGFxdWlkZGljay9NCkNoYXB1bHRlcGVjL00KQ2hhcmJyYXkvTQpDaGFyZG9ubmF5L00KQ2hhcml0eS9NCkNoYXJsZW1hZ25lL00KQ2hhcmxlbmUvTQpDaGFybGVzL00KQ2hhcmxlc3Rvbi9NUwpDaGFybGV5L00KQ2hhcmxpZS9NCkNoYXJsb3R0ZS9NCkNoYXJsb3R0ZXRvd24vTQpDaGFybWFpbmUvTQpDaGFybWluL00KQ2hhcm9sYWlzL00KQ2hhcm9uL00KQ2hhcnRpc20vTQpDaGFydHJlcy9NCkNoYXJ5YmRpcy9NCkNoYXNlL00KQ2hhc2l0eS9NCkNoYXRlYXVicmlhbmQvTQpDaGF0dGFob29jaGVlL00KQ2hhdHRhbm9vZ2EvTQpDaGF0dGVybGV5L00KQ2hhdHRlcnRvbi9NCkNoYXVjZXIvTQpDaGF1bmNleS9NCkNoYXV0YXVxdWEvTQpDaGF2ZXovTQpDaGF5ZWZza3kvTQpDaGUvTQpDaGVjaGVuL00KQ2hlY2hueWEvTQpDaGVkZGFyL00KQ2hlZXIvTQpDaGVlcmlvcy9NCkNoZWV0b3MvTQpDaGVldmVyL00KQ2hla2hvdi9NCkNoZWtob3ZpYW4KQ2hlbHNlYS9NCkNoZWx5YWJpbnNrL00KQ2hlbi9NCkNoZW5leS9NCkNoZW5nZHUvTQpDaGVubmFpL00KQ2hlb3BzL00KQ2hlcmkvTQpDaGVyaWUvTQpDaGVybmVua28vTQpDaGVybm9ieWwvTQpDaGVybm9teXJkaW4vTQpDaGVyb2tlZS9NUwpDaGVycnkvTQpDaGVyeWwvTQpDaGVzYXBlYWtlL00KQ2hlc2hpcmUvTQpDaGVzdGVyL00KQ2hlc3RlcmZpZWxkL00KQ2hlc3RlcnRvbi9NCkNoZXZhbGllci9NCkNoZXZpb3QvTQpDaGV2cm9sZXQvTQpDaGV2cm9uL00KQ2hldnkvTQpDaGV5ZW5uZS9TTQpDaGkvTQpDaGlhbnRpL01TCkNoaWJhL00KQ2hpYmNoYS9NCkNoaWNhZ28vTQpDaGljYWdvYW4vTQpDaGljYW5hL00KQ2hpY2Fuby9NCkNoaWNrYXNhdy9NUwpDaGljbGV0cy9NCkNoaWh1YWh1YS9NUwpDaGlsZS9NCkNoaWxlYW4vTVMKQ2hpbWJvcmF6by9NCkNoaW1lcmEvTVMKQ2hpbXUvTQpDaGluL00KQ2hpbmEvTQpDaGluYXRvd24vTQpDaGluZXNlL00KQ2hpbm9vay9NUwpDaGlwZXd5YW4vTQpDaGlwcGVuZGFsZS9NCkNoaXBwZXdhL1NNCkNoaXF1aXRhL00KQ2hpcmljby9NCkNoaXNob2xtL00KQ2hpc2luYXUvTQpDaGl0dGFnb25nL00KQ2hpdmFzL00KQ2hsb2UvTQpDaG9jdGF3L1NNCkNob21za3kvTQpDaG9uZ3FpbmcvTQpDaG9waW4vTQpDaG9wcmEvTQpDaG91L00KQ2hyZXRpZW4vTQpDaHJpcy9NCkNocmlzdC9NUwpDaHJpc3RhL00KQ2hyaXN0Y2h1cmNoL00KQ2hyaXN0ZW5kb20vTVMKQ2hyaXN0ZW5zZW4vTQpDaHJpc3RpL00KQ2hyaXN0aWFuL1NNCkNocmlzdGlhbml0eS9TTQpDaHJpc3RpYW5pemUKQ2hyaXN0aWUvTQpDaHJpc3RpbmEvTQpDaHJpc3RpbmUvTQpDaHJpc3RsaWtlCkNocmlzdG1hcy9NUwpDaHJpc3RtYXN0aWRlL01TCkNocmlzdG1hc3RpbWUvTVMKQ2hyaXN0b3Blci9NCkNocmlzdG9waGVyL00KQ2hyb25pY2xlcwpDaHJ5c2xlci9NCkNocnlzb3N0b20vTQpDaHJ5c3RhbC9NCkNodWNrL00KQ2h1a2NoaS9NCkNodW1hc2gvTQpDaHVuZy9NCkNodXJjaC9NCkNodXJjaGlsbC9NCkNodXJyaWd1ZXJhL00KQ2h1dmFzaC9NCkNpL00KQ2ljZXJvL00KQ2lkL00KQ2ltYWJ1ZS9NCkNpbmNpbm5hdGkvTQpDaW5kZXJlbGxhL01TCkNpbmR5L00KQ2luZW1hU2NvcGUvTQpDaW5lcmFtYS9NCkNpcHJvL00KQ2lyY2UvTQpDaXNjby9NCkNpdGliYW5rL00KQ2l0aWdyb3VwL00KQ2l0cm9lbi9NCkNsL01WCkNsYWlib3JuZS9NCkNsYWlyL00KQ2xhaXJlL00KQ2xhaXJvbC9NCkNsYW5jeS9NCkNsYXBleXJvbi9NCkNsYXB0b24vTQpDbGFyYS9NCkNsYXJlL00KQ2xhcmVuY2UvTQpDbGFyZW5kb24vTQpDbGFyaWNlL00KQ2xhcmlzc2EvTQpDbGFyay9NCkNsYXJrZS9NCkNsYXVkZS9NCkNsYXVkZXR0ZS9NCkNsYXVkaWEvTQpDbGF1ZGluZS9NCkNsYXVkaW8vTQpDbGF1ZGl1cy9NCkNsYXVzL00KQ2xhdXNld2l0ei9NCkNsYXVzaXVzL00KQ2xheS9NCkNsYXl0b24vTQpDbGVhcmFzaWwvTQpDbGVtL1hNCkNsZW1lbmNlYXUvTQpDbGVtZW5zL00KQ2xlbWVudC9NUwpDbGVtZW50aW5lL00KQ2xlbWVudHMvTQpDbGVtb25zL00KQ2xlbXNvbi9NCkNsZW8vTQpDbGVvcGF0cmEvTQpDbGV2ZWxhbmQvTQpDbGlidXJuL00KQ2xpZmYvTQpDbGlmZm9yZC9NCkNsaWZ0b24vTQpDbGluZS9NCkNsaW50L00KQ2xpbnRvbi9NCkNsaW8vTQpDbGl2ZS9NCkNsb3JldHMvTQpDbG9yb3gvTQpDbG9zdXJlL00KQ2xvdGhvL00KQ2xvdXNlYXUvTQpDbG92aXMvTQpDbHlkZS9NCkNseWRlc2RhbGUvTQpDbHl0ZW1uZXN0cmEvTQpDbS9NCkNtZHIKQ28vTQpDb2JhaW4vTQpDb2JiL00KQ29jaGFiYW1iYS9NCkNvY2hpbi9NCkNvY2hpc2UvTQpDb2NocmFuL00KQ29ja25leS9NCkNvY3RlYXUvTQpDb2QKQ29keS9NCkNvZmZleS9NCkNvZ25hYy9NCkNvaGFuL00KQ29oZW4vTQpDb2ltYmF0b3JlL00KQ29pbnRyZWF1L00KQ29rZS9TTQpDb2wvTQpDb2xiZXJ0L00KQ29sYnkvTQpDb2xlL00KQ29sZWVuL00KQ29sZW1hbi9NCkNvbGVyaWRnZS9NCkNvbGV0dGUvTQpDb2xmYXgvTQpDb2xnYXRlL00KQ29saW4vTQpDb2xsZWVuL00KQ29sbGllci9NCkNvbGxpbi9TTQpDb2xsaW5zL00KQ29sbwpDb2xvZ25lL00KQ29sb21iaWEvTQpDb2xvbWJpYW4vTVMKQ29sb21iby9NCkNvbG9uL00KQ29sb3JhZGFuL1NNCkNvbG9yYWRvL00KQ29sb3JhZG9hbgpDb2xvc3NldW0vTQpDb2x0L00KQ29sdHJhbmUvTQpDb2x1bWJpYS9NCkNvbHVtYmluZS9NCkNvbHVtYnVzL00KQ29tCkNvbWFuY2hlL01TCkNvbWJzL00KQ29tZHIKQ29taW50ZXJuL00KQ29tbWFuZG1lbnQKQ29tbW9ucy9NCkNvbW1vbndlYWx0aApDb21tdW5pb24vU00KQ29tbXVuaXNtCkNvbW11bmlzdC9TTQpDb21vL00KQ29tb3JhbgpDb21vcm9zL00KQ29tcGFxL00KQ29tcHRvbi9NCkNvbXB1U2VydmUvTQpDb210ZS9NCkNvbmFrcnkvTQpDb25hbi9NCkNvbmNlcGNpb24vTQpDb25jZXR0YS9NCkNvbmNvcmQvU00KQ29uY29yZGUvTQpDb25kaWxsYWMvTQpDb25kb3JjZXQvTQpDb25lc3RvZ2EvTQpDb25mZWRlcmFjeS9NCkNvbmZlZGVyYXRlL01TCkNvbmZ1Y2lhbi9TTQpDb25mdWNpYW5pc20vTVMKQ29uZnVjaXVzL00KQ29uZy9NCkNvbmdvL00KQ29uZ29sZXNlL00KQ29uZ3JlZ2F0aW9uYWwKQ29uZ3JlZ2F0aW9uYWxpc3QvTVMKQ29uZ3Jlc3MvTVMKQ29uZ3Jlc3Npb25hbApDb25ncmV2ZS9NCkNvbmxleS9NCkNvbm4vTVIKQ29ubmVjdGljdXQvTQpDb25uZW1hcmEvTQpDb25uZXIvTQpDb25uZXJ5L00KQ29ubmllL00KQ29ubm9sbHkvTQpDb25ub3JzL00KQ29ucmFkL00KQ29ucmFpbC9NCkNvbnNlcnZhdGl2ZQpDb25zdGFibGUvTQpDb25zdGFuY2UvTQpDb25zdGFudGluZS9NCkNvbnN0YW50aW5vcGxlL00KQ29uc3RpdHV0aW9uCkNvbnN1ZWxvL00KQ29udGluZW50L00KQ29udGluZW50YWwvTQpDb250cmVyYXMvTQpDb253YXkvTQpDb29rL00KQ29va2UvTQpDb29sZXkvTQpDb29saWRnZS9NCkNvb3Blci9NCkNvb3BlcnN0b3duL00KQ29vcnMvTQpDb3BhY2FiYW5hL00KQ29wZWxhbmQvTQpDb3BlbmhhZ2VuL00KQ29wZXJuaWNhbi9NCkNvcGVybmljdXMvTQpDb3BsYW5kL00KQ29wbGV5L00KQ29wcGVyZmllbGQvTQpDb3BwZXJ0b25lL00KQ29wcG9sYS9NCkNvcHRpYy9NCkNvcmEvTQpDb3JkZWxpYS9NCkNvcmRpbGxlcmFzL00KQ29yZG9iYS9NCkNvcmV5L00KQ29yZnUvTQpDb3JpbmEvTQpDb3JpbmUvTQpDb3Jpbm5lL00KQ29yaW50aC9NCkNvcmludGhpYW4vTVMKQ29yaW50aGlhbnMvTQpDb3Jpb2xhbnVzL00KQ29yaW9saXMvTQpDb3JrCkNvcmxlb25lL00KQ29ybWFjay9NCkNvcm5laWxsZS9NCkNvcm5lbGlhL00KQ29ybmVsaXVzL00KQ29ybmVsbC9NCkNvcm5pbmcvTQpDb3JuaXNoL01TCkNvcm53YWxsL00KQ29ybndhbGxpcy9NCkNvcm9uYWRvL00KQ29yb3QvTQpDb3JwCkNvcnJlZ2dpby9NCkNvcnJpbmUvTQpDb3JzaWNhL00KQ29yc2ljYW4vTQpDb3J0ZXMvTVMKQ29ydGxhbmQvTQpDb3J2YWxsaXMvTQpDb3J2ZXR0ZS9NCkNvcnZ1cy9NCkNvcnkvTQpDb3NieS9NCkNvc3NhY2svTQpDb3N0Y28vTQpDb3N0ZWxsby9NCkNvc3RuZXIvTQpDb3RlL00KQ290b25vdS9NCkNvdG9wYXhpL00KQ290c3dvbGQvTQpDb3R0b24vTQpDb3Vsb21iL00KQ291bHRlci9NCkNvdXBlcmluL00KQ291cmJldC9NCkNvdXJ0bmV5L00KQ291c3RlYXUvTQpDb3ZlbnRyeS9TTQpDb3dhcmQvTQpDb3dlbGwvTQpDb3dsZXkvTQpDb3dwZXIvTQpDb3gvTQpDb3kvTQpDb3p1bWVsL00KQ3BsCkNyL01UCkNyYWJiZS9NCkNyYWZ0L00KQ3JhaWcvTQpDcmFuYWNoL00KQ3JhbmUvTQpDcmFubWVyL00KQ3JhdGVyL00KQ3Jhd2ZvcmQvTQpDcmF5L00KQ3JheW9sYS9NCkNyZWF0aW9uL00KQ3JlYXRvci9NCkNyZWN5L00KQ3JlZS9EU00KQ3JlZWsvU00KQ3JlaWdodG9uL00KQ3Jlb2xlL1NNCkNyZW9uL00KQ3Jlc3NpZGEvTQpDcmVzdC9NCkNyZXRhY2VvdXMvTQpDcmV0YW4vU00KQ3JldGUvTQpDcmljaHRvbi9NCkNyaWNrL00KQ3JpbWVhL00KQ3JpbWVhbi9NCkNyaW9sbG8vTQpDcmlzY28vTQpDcmlzdGluYS9NCkNyb2F0L1NNCkNyb2F0aWEvTQpDcm9hdGlhbi9NUwpDcm9jZS9NCkNyb2NrZXR0L00KQ3JvZXN1cy9NCkNyb213ZWxsL00KQ3JvbXdlbGxpYW4vTQpDcm9uaW4vTQpDcm9ua2l0ZS9NCkNyb251cy9NCkNyb29rZXMvTQpDcm9zYnkvTQpDcm9zcy9NCkNyb3cvU00KQ3Jvd2xleS9NCkNydWNpZml4aW9uL01TCkNydWlrc2hhbmsvTQpDcnVpc2UvTQpDcnVzYWRlcydzCkNydXNvZS9NCkNydXgvTQpDcnV6L00KQ3J5cHRvem9pYy9NCkNyeXN0YWwvTQpDc29ua2EvTQpDdApDdGVzaXBob24vTQpDdGh1bGh1L00KQ3UvTQpDdWJhL00KQ3ViYW4vU00KQ3VjaHVsYWluL00KQ3Vpc2luYXJ0L00KQ3VsYmVydHNvbi9NCkN1bGxlbi9NCkN1bWJlcmxhbmQvTQpDdW1taW5ncy9NCkN1bmFyZC9NCkN1bm5pbmdoYW0vTQpDdXBpZC9NCkN1cmFjYW8vTQpDdXJpZS9NCkN1cml0aWJhL00KQ3Vycmllci9NCkN1cnJ5L1JNCkN1cnQvTQpDdXJ0aXMvTQpDdXN0ZXIvTQpDdXZpZXIvTQpDdXpjby9NCkN5YmVsZS9NCkN5Y2xhZGVzL00KQ3ljbG9wZXMvTQpDeWNsb3BzL00KQ3lnbnVzL00KQ3ltYmVsaW5lL00KQ3ludGhpYS9NCkN5cHJpYW4vTQpDeXByaW90L01TCkN5cHJ1cy9NCkN5cmFuby9NCkN5cmlsL00KQ3lyaWxsaWMvTQpDeXJ1cy9NCkN6ZWNoL00KQ3plY2hvc2xvdmFrCkN6ZWNob3Nsb3Zha2lhL00KQ3plY2hvc2xvdmFraWFuL1NNCkN6ZWNocwpDemVybnkvTQpEL00KREEvTQpEQVIKREFUL00KREJNUy9NCkRDL00KREQvTQpERFMvTQpERFQvUwpERQpERUEKREVDL1NECkRICkRIUwpESQpESgpETUNBCkRNRC9NCkRNWgpETkEvTQpET0EKRE9CCkRPRApET0UKRE9TL00KRE9UCkRQL1NNCkRQVApEU1QKRFRQCkRVSQpEVkQKRFZSL1NNCkRXSQpEYWNoYXUvTQpEYWNyb24vU00KRGFkYS9NCkRhZGFpc20vTQpEYWVkYWx1cy9NCkRhZ3VlcnJlL00KRGFnd29vZC9NCkRhaG9tZXkvTQpEYWltbGVyL00KRGFpc3kvTQpEYWthci9NCkRha290YS9TTQpEYWtvdGFuL00KRGFsYWkKRGFsZS9NCkRhbGV5L00KRGFsaS9NCkRhbGlhbi9NCkRhbGxhcy9NCkRhbG1hdGlhL00KRGFsbWF0aWFuL1NNCkRhbHRvbi9NCkRhbWFzY3VzL00KRGFtZS9NTgpEYW1pYW4vTQpEYW1pZW4vTQpEYW1pb24vTQpEYW1vY2xlcy9NCkRhbW9uL00KRGFuL00KRGFuYS9NCkRhbmFlL00KRGFuZS9TTQpEYW5lbGF3L00KRGFuZ2VyZmllbGQvTQpEYW5pYWwvTQpEYW5pZWwvU00KRGFuaWVsbGUvTQpEYW5pZWxzL00KRGFuaXNoL00KRGFubmllL00KRGFubnkvTQpEYW5vbmUvTQpEYW50ZS9NCkRhbnRvbi9NCkRhbnViZS9NCkRhbnViaWFuL00KRGFwaG5lL00KRGFyYnkvTQpEYXJjeS9NCkRhcmRhbmVsbGVzL00KRGFyZS9NCkRhcmVuL00KRGFyZnVyL00KRGFyaW4vTQpEYXJpby9NCkRhcml1cy9NCkRhcmplZWxpbmcvTQpEYXJsYS9NCkRhcmxlbmUvTQpEYXJsaW5nL00KRGFybmVsbC9NCkRhcnJlbC9NCkRhcnJlbGwvTQpEYXJyZW4vTQpEYXJyaW4vTQpEYXJyb3cvTQpEYXJyeWwvTQpEYXJ0aC9NCkRhcnRtb29yL00KRGFydG1vdXRoL00KRGFydm9uL00KRGFyd2luL00KRGFyd2luaWFuL00KRGFyd2luaXNtL1NNCkRhcndpbmlzdApEYXJ5bC9NCkRhdGFtYXRpb24KRGF1Z2hlcnR5L00KRGF1bWllci9NCkRhdmFvL00KRGF2ZS9NCkRhdmVucG9ydC9NCkRhdmlkL01TCkRhdmlkc29uL00KRGF2aWVzL00KRGF2aXMvTQpEYXZ5L1NNCkRhd2VzL00KRGF3a2lucwpEYXduL00KRGF3c29uL00KRGF5L00KRGF5YW4KRGF5dG9uL00KRGVHZW5lcmVzL00KRGVhZGhlYWQvTQpEZWFuL00KRGVhbmEvTQpEZWFuZHJlL00KRGVhbm4vTQpEZWFubmEvTQpEZWFubmUvTQpEZWF0aC9NCkRlYmJpZS9NCkRlYmJ5L00KRGViaWFuL00KRGVib3JhL00KRGVib3JhaC9NCkRlYm91aWxsZXQvTQpEZWJyYS9NCkRlYnMvTQpEZWJ1c3N5L00KRGVjL00KRGVjYWxvZ3VlL00KRGVjYXR1ci9NCkRlY2NhL00KRGVjY2FuL00KRGVjZW1iZXIvU00KRGVja2VyL00KRGVkZWtpbmQvTQpEZWUvTQpEZWVuYS9NCkRlZXJlL00KRGVmb2UvTQpEZWdhcy9NCkRlaWRyZS9NCkRlaW1vcy9NCkRlaXJkcmUvTQpEZWl0eQpEZWplc3VzL00KRGVsL00KRGVsYWNyb2l4L00KRGVsYWNydXovTQpEZWxhbmV5L00KRGVsYW5vL00KRGVsYXdhcmUvTVMKRGVsYXdhcmVhbi9TTQpEZWxiZXJ0L00KRGVsZW9uL00KRGVsZ2Fkby9NCkRlbGhpL00KRGVsaWEvTQpEZWxpYmVzL00KRGVsaWNpb3VzL00KRGVsaWxhaC9NCkRlbGlsYWhzCkRlbGl1cy9NCkRlbGwvTQpEZWxsYS9NCkRlbG1hci9NCkRlbG1hcnZhL00KRGVsbWVyL00KRGVsbW9uaWNvL00KRGVsb3Jlcy9NCkRlbG9yaXMvTQpEZWxwaGkvTQpEZWxwaGljL00KRGVscGhpbnVzL00KRGVsdGEvTQpEZW0vRwpEZW1hdmVuZC9NCkRlbWVyb2wvTQpEZW1ldGVyL00KRGVtZXRyaXVzL00KRGVtaW5nL00KRGVtb2NyYXQvU00KRGVtb2NyYXRpYwpEZW1vY3JpdHVzL00KRGVtb3N0aGVuZXMvTQpEZW1wc2V5L00KRGVuYS9NCkRlbmFsaQpEZW5lYi9NCkRlbmVib2xhL00KRGVuZy9NCkRlbmlzL00KRGVuaXNlL00KRGVubWFyay9NCkRlbm5pcy9NCkRlbm55L00KRGVudmVyL00KRGVvbi9NCkRlcHAvTQpEZXJieS9NCkRlcmVrL00KRGVyaWNrL00KRGVybW90L00KRGVycmljay9NCkRlcnJpZGEvTQpEZXNjYXJ0ZXMvTQpEZXNkZW1vbmEvTQpEZXNpcmVlL00KRGVzbW9uZC9NCkRldHJvaXQvTQpEZXV0ZXJvbm9teS9NCkRldmFuYWdhcmkvTQpEZXZpL00KRGV2aW4vTQpEZXZvbi9NCkRldm9uaWFuL00KRGV3YXIvTQpEZXdheW5lL00KRGV3ZXkvTQpEZXdpdHQvTQpEZXhlZHJpbmUvTQpEZXh0ZXIvTQpEaGFrYS9NCkRoYXVsYWdpcmkvTQpEaS9TTQpEaUNhcHJpby9NCkRpTWFnZ2lvL00KRGlhZ2hpbGV2L00KRGlhbC9NCkRpYW5hL00KRGlhbmUvTQpEaWFubi9NCkRpYW5uYS9NCkRpYW5uZS9NCkRpYXMKRGlhc3BvcmEvTVMKRGljay9YTQpEaWNrZW5zL00KRGlja2Vuc2lhbgpEaWNrZXJzb24vTQpEaWNraW5zb24vTQpEaWNrc29uL00KRGljdGFwaG9uZS9TTQpEaWRlcm90L00KRGlkby9NCkRpZHJpa3Nvbi9NCkRpZWZlbmJha2VyL00KRGllZ28vTQpEaWVtL00KRGlldHJpY2gvTQpEaWprc3RyYS9NCkRpam9uL00KRGlsYmVydC9NUwpEaWxsYXJkL00KRGlsbGluZ2VyL00KRGlsbG9uL00KRGluYS9NCkRpbmFoL00KRGluby9NCkRpb2NsZXRpYW4vTQpEaW9nZW5lcy9NCkRpb24vTQpEaW9ubmUvTQpEaW9ueXNpYW4vTQpEaW9ueXN1cy9NCkRpb3BoYW50aW5lL00KRGlvci9NCkRpcHBlci9NCkRpcgpEaXJhYy9NCkRpcmljaGxldC9NCkRpcmsvTQpEaXMvTQpEaXNuZXkvTQpEaXNuZXlsYW5kL00KRGlzcmFlbGkvTQpEaXZpbmUvTQpEaXdhbGkvTQpEaXgvTQpEaXhpZS9NCkRpeGllY3JhdC9NCkRpeGllbGFuZC9TTQpEaXhvbi9NCkRqaWJvdXRpL00KRG1pdHJpL00KRG5lcHJvcGV0cm92c2svTQpEbmllc3Rlci9NCkRvYmJpbi9NCkRvYmVybWFuL00KRG9icm8vTQpEb2N0b3IKRG9jdG9yb3cvTQpEb2RnZS9NCkRvZGdzb24vTQpEb2RvbWEvTQpEb2Rzb24vTQpEb2UvTQpEb2hhL00KRG9sYnkvTQpEb2xlL00KRG9sbGllL00KRG9sbHkvTQpEb2xvcmVzL00KRG9tZXNkYXkvTQpEb21pbmdvL00KRG9taW5ndWV6L00KRG9taW5pYy9NCkRvbWluaWNhL00KRG9taW5pY2FuL01TCkRvbWluaWNrL00KRG9taW5pb24KRG9taW5pcXVlL00KRG9taXRpYW4vTQpEb24vU00KRG9uYS9NCkRvbmFodWUvTQpEb25hbGQvTQpEb25hbGRzb24vTQpEb25hdGVsbG8vTQpEb25ldHNrL00KRG9uaXpldHRpL00KRG9ubi9NUgpEb25uYS9NCkRvbm5lL00KRG9ubmVsbC9NCkRvbm5lci9NCkRvbm5pZS9NCkRvbm55L00KRG9ub3Zhbi9NCkRvb2xleS9NCkRvb2xpdHRsZS9NCkRvb25lc2J1cnkvTQpEb3BwbGVyL00KRG9yYS9NCkRvcmNhcy9NCkRvcmVlbi9NCkRvcmlhbi9NCkRvcmljL00KRG9yaXMvTQpEb3JpdG9zL00KRG9yb3RoZWEvTQpEb3JvdGh5L00KRG9yc2V0L00KRG9yc2V5L00KRG9ydGh5L00KRG9ydG11bmQvTQpEb3N0b2V2c2t5L00KRG90L00KRG90c29uL00KRG91YWxhL00KRG91YXkvTQpEb3VibGVkYXkvTQpEb3VnL00KRG91Z2xhcy9NCkRvdWdsYXNzL00KRG91cm8vTQpEb3Zlci9NCkRvdy9NCkRvd25zL00KRG93bnkvTQpEb3lsZS9NCkRyCkRyYWNvL00KRHJhY29uaWFuL00KRHJhY3VsYS9NCkRyYWtlL00KRHJhbWFtaW5lL1NNCkRyYW1idWllL00KRHJhbm8vTQpEcmF2aWRpYW4vTQpEcmVpc2VyL00KRHJlc2Rlbi9NCkRyZXcvTQpEcmV5ZnVzL00KRHJpc3Rhbi9NCkRyb3Bib3gvTQpEcnVkZ2UvTQpEcnlkZW4vTQpEc2NodWJiYS9NCkR1CkR1UG9udC9NCkR1YW5lL00KRHViYWkvTQpEdWJjZWsvTQpEdWJoZS9NCkR1Ymxpbi9NCkR1YnJvdm5pay9NCkR1Y2hhbXAvTQpEdWRsZXkvTQpEdWZmeS9NCkR1aXNidXJnL00KRHVrZS9NCkR1bGxlcy9NCkR1bHV0aC9NCkR1bWFzL00KRHVtYmxlZG9yZS9NCkR1bWJvL00KRHVtcHN0ZXIvTQpEdW5hbnQvTQpEdW5iYXIvTQpEdW5jYW4vTQpEdW5kZWUKRHVuZWRpbi9NCkR1bmtpcmsvTQpEdW5sYXAvTQpEdW5uL00KRHVubmUvTQpEdXJhY2VsbC9NCkR1cmFuL00KRHVyYW50L00KRHVyYW50ZS9NCkR1cmJhbi9NCkR1cmVyL00KRHVyZXgvTQpEdXJoYW0vTVMKRHVya2hlaW0vTQpEdXJvYy9NCkR1cm9jaGVyL00KRHVzZS9NCkR1c2hhbmJlL00KRHVzc2VsZG9yZi9NCkR1c3RidXN0ZXIvTQpEdXN0aW4vTQpEdXN0eS9NCkR1dGNoL00KRHV0Y2htYW4vTQpEdXRjaG1lbi9NCkR1dGNod29tYW4KRHV2YWxpZXIvTQpEdmluYS9NCkR2b3Jhay9NCkR3YXluZS9NCkR3aWdodC9NCkR5L00KRHllci9NCkR5bGFuL00KRHlzb24vTQpEemVyemhpbnNreS9NCkR6dW5nYXJpYS9NCkUvU00KRUMKRUNHL00KRUNNQVNjcmlwdC9NCkVEUC9NCkVEVApFRUMvTQpFRUcvTQpFRU8KRUVPQwpFRkwKRUZUCkVLRy9NCkVMRi9NCkVNCkVNVApFTkUvTQpFT0UKRVBBL00KRVIKRVJBCkVTRS9NCkVTTApFU1AvTQpFU1BOL00KRVNSCkVTVC9NCkVUCkVUQQpFVEQKRVUKRVVMQS9TCkVha2lucy9NCkVhcmhhcnQvTQpFYXJsL00KRWFybGUvTQpFYXJsZW5lL00KRWFybGluZS9NCkVhcm5lc3QvTQpFYXJuZXN0aW5lL00KRWFybmhhcmR0L00KRWFycC9NCkVhc3QvU1pNUgpFYXN0ZXIvTQpFYXN0ZXJuL1IKRWFzdG1hbi9NCkVhc3R3b29kL00KRWF0b24vTQpFYmVuL00KRWJlbmVlemVyL00KRWJlcnQvTQpFYm9sYS9NCkVib25pY3MvTQpFYm9ueS9NCkVicm8vTQpFY2NsZXNpYXN0ZXMvTQpFY28vTQpFY3N0YXN5CkVjdWFkb3IvTQpFY3VhZG9yYW4vU00KRWN1YWRvcmVhbgpFY3VhZG9yaWFuL1NNCkVkL01OWApFZGFtL1NNCkVkZGEvTQpFZGRpZS9NCkVkZGluZ3Rvbi9NCkVkZHkvTQpFZGVuL00KRWRnYXIvTQpFZGdhcmRvL00KRWRpbmJ1cmdoL00KRWRpc29uL00KRWRpdGgvTQpFZG1vbmQvTQpFZG1vbnRvbi9NCkVkbXVuZC9NCkVkbmEvTQpFZHNlbC9NCkVkdWFyZG8vTQpFZHdhcmQvU00KRWR3YXJkaWFuL00KRWR3YXJkby9NCkVkd2FyZHMvTQpFZHdpbi9NCkVkd2luYS9NCkVleW9yZS9NCkVmZmllL00KRWZyYWluL00KRWZyZW4vTQpFZ2dvL00KRWd5cHQvTQpFZ3lwdGlhbi9NUwpFZ3lwdG9sb2d5L00KRWhyZW5iZXJnL00KRWhybGljaC9NCkVpY2htYW5uL00KRWlmZmVsL00KRWlsZWVuL00KRWluc3RlaW4vTVMKRWlyZS9NCkVpc2VuaG93ZXIvTQpFaXNlbnN0ZWluL00KRWlzbmVyL00KRWxhaW5lL00KRWxhbS9NCkVsYW5vci9NCkVsYXN0b3BsYXN0L00KRWxiYS9NCkVsYmUvTQpFbGJlcnQvTQpFbGJydXMvTQpFbGRvbi9NCkVsZWFub3IvTQpFbGVhemFyL00KRWxlY3RyYS9NCkVsZW5hL00KRWxnYXIvTQpFbGkvTQpFbGlhcy9NCkVsaWphaC9NCkVsaW5vci9NCkVsaW90L00KRWxpc2EvTQpFbGlzYWJldGgvTQpFbGlzZS9NCkVsaXNlby9NCkVsaXNoYS9NCkVsaXphL00KRWxpemFiZXRoL00KRWxpemFiZXRoYW4vU00KRWxsYS9NCkVsbGVuL00KRWxsZXNtZXJlL00KRWxsaWUvTQpFbGxpbmd0b24vTQpFbGxpb3QvTQpFbGxpb3R0L00KRWxsaXMvTQpFbGxpc29uL00KRWxtYS9NCkVsbWVyL00KRWxtby9NCkVsbmF0aC9NCkVsbm9yYS9NCkVsb2hpbS9NCkVsb2lzZS9NCkVsb3kvTQpFbHJveS9NCkVsc2EvTQpFbHNpZS9NCkVsc2lub3JlL00KRWx0YW5pbi9NCkVsdG9uL00KRWx1bC9NCkVsdmEvTQpFbHZpYS9NCkVsdmluL00KRWx2aXJhL00KRWx2aXMvTQpFbHdheS9NCkVsd29vZC9NCkVseXNlZS9NCkVseXNpYW4vTQpFbHlzaXVtL1NNCkVtYWNzL00KRW1hbnVlbC9NCkVtZXJzb24vTQpFbWVyeS9NCkVtaWwvTQpFbWlsZS9NCkVtaWxpYS9NCkVtaWxpby9NCkVtaWx5L00KRW1pbmVtL00KRW1pbmVuY2UKRW1tYS9NCkVtbWFudWVsL00KRW1tZXR0L00KRW1teS9NCkVtb3J5L00KRW5jYXJ0YS9NCkVuZHltaW9uL00KRW5nL00KRW5nZWxzL00KRW5nbGFuZC9NCkVuZ2xpc2gvTVJTCkVuZ2xpc2htYW4vTQpFbmdsaXNobWVuL00KRW5nbGlzaHdvbWFuL00KRW5nbGlzaHdvbWVuL00KRW5pZC9NCkVuaWYvTQpFbml3ZXRvay9NCkVua2lkdS9NCkVub2NoL00KRW5vcy9NCkVucmljby9NCkVucmlxdWUvTQpFbnJvbi9NCkVudGVycHJpc2UvTQpFb2NlbmUvTQpFcGNvdC9NCkVwaGVzaWFuL01TCkVwaGVzdXMvTQpFcGhyYWltL00KRXBpY3RldHVzL00KRXBpY3VyZWFuL00KRXBpY3VydXMvTQpFcGltZXRoaXVzL00KRXBpcGhhbnkvU00KRXBpc2NvcGFsCkVwaXNjb3BhbGlhbi9NUwpFcGlzdGxlCkVwc29tL00KRXBzb24vTQpFcHN0ZWluL00KRXF1dWxldXMvTQpFci9NCkVyYXNtdXMvTQpFcmF0by9NCkVyYXRvc3RoZW5lcy9NCkVyZWJ1cy9NCkVyZWN0b3IvTQpFcmV3aG9uL00KRXJoYXJkL00KRXJpYy9NCkVyaWNhL00KRXJpY2gvTQpFcmljay9NCkVyaWNrYS9NCkVyaWNrc29uL00KRXJpZGFudXMvTQpFcmllL00KRXJpay9NCkVyaWthL00KRXJpbi9NCkVyaXMvTVMKRXJpdHJlYS9NCkVyaXRyZWFuL1NNCkVybGVubWV5ZXIvTQpFcm1hL00KRXJuYS9NCkVybmVzdC9NCkVybmVzdGluZS9NCkVybmVzdG8vTQpFcm5pZS9NCkVybnN0L00KRXJvcy9NUwpFcnJvbC9NCkVyc2UvTQpFcnZJbi9NCkVyd2luL00KRXNhdS9NCkVzY2hlci9NCkVzY2hlcmljaGlhL00KRXNjb25kaWRvCkVza2ltby9NUwpFc21lcmFsZGEvTQpFc3BlcmFudG8vTQpFc3BlcmFuemEvTQpFc3Bpbm96YS9NCkVzcS9NCkVzcXVpcmUvTVMKRXNzZW4vTQpFc3NlbmUvTQpFc3NlcXVpYm8vTQpFc3NleC9NCkVzc2llL00KRXN0YWJsaXNobWVudApFc3RlYmFuL00KRXN0ZWxhL00KRXN0ZWxsYS9NCkVzdGVsbGUvTQpFc3Rlci9NCkVzdGVyaGF6eS9NCkVzdGVzL00KRXN0aGVyL00KRXN0b25pYS9NCkVzdG9uaWFuL1NNCkVzdHJhZGEvTQpFdGhhbi9NCkV0aGVsL00KRXRoZWxyZWQvTQpFdGhlcm5ldC9NCkV0aGlvcGlhL00KRXRoaW9waWFuL1NNCkV0bmEvTQpFdG9uL00KRXRydXJpYS9NCkV0cnVzY2FuL00KRXR0YS9NCkV1L00KRXVjaGFyaXN0L01TCkV1Y2hhcmlzdGljCkV1Y2xpZC9NCkV1Z2VuZS9NCkV1Z2VuaWEvTQpFdWdlbmllL00KRXVnZW5pby9NCkV1bGEvTQpFdWxlci9NCkV1bWVuaWRlcy9NCkV1bmljZS9NCkV1cGhyYXRlcy9NCkV1cgpFdXJhc2lhL00KRXVyYXNpYW4vTVMKRXVyaXBpZGVzL00KRXVyb2RvbGxhci9TTQpFdXJvcGEvTQpFdXJvcGUvTQpFdXJvcGVhbi9NUwpFdXJ5ZGljZS9NCkV1c3RhY2hpYW4vTQpFdXRlcnBlL00KRXZhL00KRXZhbi9TTQpFdmFuZ2VsaWNhbApFdmFuZ2VsaW5hL00KRXZhbmdlbGluZS9NCkV2YW5nZWxpc3QvTQpFdmFucy9NCkV2YW5zdmlsbGUvTQpFdmUvTQpFdmVseW4vTQpFdmVua2kvTQpFdmVyUmVhZHkvTQpFdmVyZXN0L00KRXZlcmV0dC9NCkV2ZXJldHRlL00KRXZlcmdsYWRlcy9NCkV2ZXJ0L00KRXZpYW4vTQpFdml0YS9NCkV3aW5nL00KRXhjYWxpYnVyL00KRXhjZWRyaW4vTQpFeGNlbGxlbmN5L1NNCkV4Y2hlcXVlcgpFeGVyY3ljbGUvTQpFeG9jZXQvTQpFeG9kdXMvTQpFeHhvbi9NCkV5Y2svTQpFeXJlL00KRXlzZW5jay9NCkV6ZWtpZWwvTQpFenJhL00KRi9NRApGQUEKRkFRL1NNCkZCSS9NCkZDQwpGRApGREEKRkRJQy9NCkZEUi9NCkZIQS9NCkZJQ0EvTQpGSUZPCkZMCkZNL1NNCkZOTUEvTQpGT0ZMCkZPUlRSQU4vTQpGUE8KRlNGL00KRlNMSUMKRlRDCkZVRC9TCkZXRApGV0lXCkZZCkZZSQpGYWJlcmdlL00KRmFiaWFuL01TCkZhY2Vib29rL00KRmFlcm9lL00KRmFmbmlyL00KRmFnaW4vTQpGYWhkL00KRmFocmVuaGVpdC9NCkZhaXJiYW5rcy9NCkZhaXNhbC9NCkZhaXNhbGFiYWQvTQpGYWl0aC9NCkZhbGFzaGEvTQpGYWxrbGFuZC9TTQpGYWxrbGFuZHMvTQpGYWxsb3BpYW4vTQpGYWxzdGFmZi9NCkZhbHdlbGwvTQpGYW5uaWUvTQpGYW5ueS9NCkZhcmFkYXkvTQpGYXJnby9NCkZhcmxleS9NCkZhcm1lci9NCkZhcnJhZ3V0L00KRmFycmFraGFuL00KRmFycmVsbC9NCkZhcnJvdy9NCkZhcnNpL00KRmFzc2JpbmRlci9NCkZhdGFoL00KRmF0ZXMvTQpGYXRoZXIvU00KRmF0aW1hL00KRmF0aW1pZC9NCkZhdWxrbmVyL00KRmF1bGtuZXJpYW4vTQpGYXVudGxlcm95L00KRmF1c3QvTQpGYXVzdGlhbi9NCkZhdXN0aW5vL00KRmF1c3R1cy9NCkZhd2tlcy9NCkZheS9NCkZheWUvTQpGZS9NCkZlYi9NCkZlYnJ1YXJ5L1NNCkZlZC9TTQpGZWRFeC9NCkZlZGVyYWwvTVMKRmVkZXJhbGlzdC9NCkZlZGVyaWNvL00KRmVkcy9NCkZlbGVjaWEvTQpGZWxpY2UvTQpGZWxpY2lhL00KRmVsaWNpdHkvTQpGZWxpcGUvTQpGZWxpeC9NCkZlbGxpbmkvTQpGZW5pYW4vTQpGZXJiZXIvTQpGZXJkaW5hbmQvTQpGZXJndXMvTQpGZXJndXNvbi9NCkZlcmxpbmdoZXR0aS9NCkZlcm1hdC9NCkZlcm1pL00KRmVybi9NCkZlcm5hbmRlei9NCkZlcm5hbmRvL00KRmVycmFyaS9NCkZlcnJhcm8vTQpGZXJyZWxsL00KRmVycmlzL00KRmV5bm1hbi9NCkZlei9NCkZpYXQvTQpGaWJlcmdsYXMvTQpGaWJvbmFjY2kvTQpGaWNodGUvTQpGaWRlbC9NCkZpZG8vTQpGaWVsZGluZy9NCkZpZWxkcy9NCkZpZ2Fyby9NCkZpZ3Vlcm9hL00KRmlqaS9NCkZpamlhbi9NUwpGaWxpcGluby9NUwpGaWxsbW9yZS9NCkZpbG9mYXgvTQpGaW5jaC9NCkZpbmxhbmQvTQpGaW5sZXkvTQpGaW5uL1NNCkZpbm5ib2dhZG90dGlyL00KRmlubmVnYW4vTQpGaW5uaXNoL00KRmlvbmEvTQpGaXJlZm94L00KRmlyZXN0b25lL00KRmlzY2hlci9NCkZpc2hlci9NCkZpc2svTQpGaXRjaC9NCkZpdHpnZXJhbGQvTQpGaXR6cGF0cmljay9NCkZpdHpyb3kvTQpGaXplYXUvTQpGbGEKRmxhbmFnYW4vTQpGbGFuZGVycy9NCkZsYXRoZWFkCkZsYXR0L00KRmxhdWJlcnQvTQpGbGVpc2NoZXIvTQpGbGVtaW5nL00KRmxlbWlzaC9NCkZsZXRjaGVyL00KRmxpbnQvTQpGbGludHN0b25lcy9NCkZsby9NCkZsb3JhL00KRmxvcmVuY2UvTQpGbG9yZW50aW5lL00KRmxvcmVzL00KRmxvcmlkYS9NCkZsb3JpZGFuL00KRmxvcmlkaWFuL1NNCkZsb3JpbmUvTQpGbG9yc2hlaW0vTQpGbG9yeS9NCkZsb3NzaWUvTQpGbG93ZXJzL00KRmxveWQvTQpGbHlubi9NCkZtL00KRm9jaC9NCkZva2tlci9NCkZvbGV5L00KRm9sZ2Vycy9NCkZvbHNvbS9NCkZvbWFsaGF1dC9NCkZvbmRhL00KRm9vc2JhbGwvTQpGb3JiZXMvTQpGb3JkL00KRm9yZW1hbi9NCkZvcmVzdC9NUgpGb3Jlc3Rlci9NCkZvcm1pY2EvTVMKRm9ybW9zYS9NCkZvcm1vc2FuL00KRm9ycmVzdC9NCkZvcnN0ZXIvTQpGb3J0YWxlemEvTQpGb3NzZS9NCkZvc3Rlci9NCkZvdG9tYXQvTQpGb3VjYXVsdC9NCkZvdXJpZXIvTQpGb3VybmV5cm9uL00KRm91cnRoCkZvd2xlci9NCkZveC9NUwpGci9NRApGcmFnb25hcmQvTQpGcmFuL00KRnJhbmNlL1NNCkZyYW5jZXMvTQpGcmFuY2VzY2EvTQpGcmFuY2luZS9NCkZyYW5jaXMvTQpGcmFuY2lzY2EvTQpGcmFuY2lzY2FuL01TCkZyYW5jaXNjby9NCkZyYW5jay9NCkZyYW5jby9NCkZyYW5jb2lzL00KRnJhbmNvaXNlL00KRnJhbmNvcGhpbGUKRnJhbmdsYWlzL00KRnJhbmsvU00KRnJhbmtlbC9NCkZyYW5rZW5zdGVpbi9NCkZyYW5rZm9ydC9NCkZyYW5rZnVydC9NUgpGcmFua2Z1cnRlci9NCkZyYW5raWUvTQpGcmFua2lzaApGcmFua2xpbi9NCkZyYW5rcy9NCkZyYW5ueS9NCkZyYW56L00KRnJhc2VyL00KRnJhdS9NTgpGcmF1bGVpbgpGcmF6aWVyL00KRnJlZC9NCkZyZWRhL00KRnJlZGRpZS9NCkZyZWRkeS9NCkZyZWRlcmljL00KRnJlZGVyaWNrL00KRnJlZGVyaWN0b24vTQpGcmVkcmljL00KRnJlZHJpY2svTQpGcmVlbWFuL00KRnJlZW1hc29uL1NNCkZyZWVtYXNvbnJ5L1NNCkZyZWV0b3duL00KRnJlaWRhL00KRnJlbW9udC9NCkZyZW5jaC9NUwpGcmVuY2htYW4vTQpGcmVuY2htZW4vTQpGcmVuY2h3b21hbi9NCkZyZW5jaHdvbWVuL00KRnJlb24vTQpGcmVzbmVsL00KRnJlc25vL00KRnJldWQvTQpGcmV1ZGlhbi9NCkZyZXkvTQpGcmV5YS9NCkZyaS9NCkZyaWRheS9TTQpGcmllZGEvTQpGcmllZGFuL00KRnJpZWRtYW4vTQpGcmllbmQvU00KRnJpZ2dhL00KRnJpZ2lkYWlyZS9NCkZyaXNiZWUvTQpGcmlzY28vTQpGcmlzaWFuL01TCkZyaXRvL00KRnJpdHovTQpGcm9iaXNoZXIvTQpGcm9kby9NCkZyb2lzc2FydC9NCkZyb21tL00KRnJvbmRlL00KRnJvbnRlbmFjL00KRnJvc3QvTQpGcm9zdGJlbHQvTQpGcnVuemUvTQpGcnkvTQpGcnllL00KRnVjaHMvTQpGdWVudGVzL00KRnVnZ2VyL00KRnVqaS9NCkZ1aml0c3UvTQpGdWppd2FyYS9NCkZ1aml5YW1hL00KRnVrdW9rYS9NCkZ1a3V5YW1hL00KRnVsYW5pL00KRnVsYnJpZ2h0L00KRnVsbGVyL00KRnVsbGVydG9uL00KRnVsdG9uL00KRnVuYWZ1dGkvTQpGdW5keS9NCkZ1cmllcy9NCkZ1cnR3YW5nbGVyL00KRnVzaHVuL00KRnV6aG91L00KRnV6emJ1c3Rlci9NCkcvTU5SQgpHQQpHQU8KR0FUVC9NCkdCL00KR0NDL00KR0RQL00KR0UvTQpHRUQKR0hRL00KR0h6CkdJCkdJRgpHSUdPCkdNL00KR01BVApHTU8KR01UL00KR05QL00KR05VL00KR09QL00KR1AvTQpHUEEKR1BPCkdQUwpHUFUKR1NBCkdURS9NCkdVCkdVSS9NCkdhL00KR2FibGUvTQpHYWJvbi9NCkdhYm9uZXNlL00KR2Fib3JvbmUvTQpHYWJyaWVsL00KR2FicmllbGEvTQpHYWJyaWVsbGUvTQpHYWNydXgvTQpHYWRzZGVuL00KR2FlYS9NCkdhZWwvU00KR2FlbGljL00KR2FnYXJpbi9NCkdhZ2UvTQpHYWlhL00KR2FpbC9NCkdhaW1hbi9NCkdhaW5lcy9NCkdhaW5zYm9yb3VnaC9NCkdhbGFoYWQvU00KR2FsYXBhZ29zL00KR2FsYXRlYS9NCkdhbGF0aWEvTQpHYWxhdGlhbnMvTQpHYWxheHkKR2FsYnJhaXRoL00KR2FsZS9NCkdhbGVuL00KR2FsaWJpL00KR2FsaWxlYW4vU00KR2FsaWxlZS9NCkdhbGlsZW8vTQpHYWxsL00KR2FsbGFnaGVyL00KR2FsbGVnb3MvTQpHYWxsaWMvTQpHYWxsaWNpc20vU00KR2FsbG8vTQpHYWxsb3dheS9NCkdhbGx1cC9NCkdhbG9pcy9NCkdhbHN3b3J0aHkvTQpHYWx2YW5pL00KR2FsdmVzdG9uL00KR2FtYQpHYW1heS9NCkdhbWJpYS9NCkdhbWJpYW4vU00KR2FtYmxlL00KR2Ftb3cvTQpHYW5kYWxmL00KR2FuZGhpL00KR2FuZGhpYW4vTQpHYW5lc2hhL00KR2FuZ2VzL00KR2FuZ3Rvay9NCkdhbnRyeS9NCkdhbnltZWRlL00KR2FwL00KR2FyYm8vTQpHYXJjaWEvTQpHYXJkbmVyL00KR2FyZXRoL00KR2FyZmllbGQvTQpHYXJmdW5rZWwvTQpHYXJnYW50dWEvTQpHYXJpYmFsZGkvTQpHYXJsYW5kL00KR2FybmVyL00KR2FycmV0dC9NCkdhcnJpY2svTQpHYXJyaXNvbi9NCkdhcnJ5L00KR2FydGgvTQpHYXJ2ZXkvTQpHYXJ5L00KR2FyemEvTQpHYXNjb255L00KR2Fzc2VyL00KR2FzdHJvZW50ZXJvbG9neQpHYXRlcy9NCkdhdGxpbmcvTQpHYXRvcmFkZS9NCkdhdHNieS9NCkdhdHVuL00KR2F1Z3Vpbi9NCkdhdWwvU00KR2F1bGlzaApHYXVzcy9NCkdhdXNzaWFuL00KR2F1dGFtYS9NCkdhdXRpZXIvTQpHYXZpbi9NCkdhd2Fpbi9NCkdheS9NCkdheWxlL00KR2F6YS9NCkdhemlhbnRlcC9NCkdkL00KR2RhbnNrL00KR2UvTQpHZWZmZW4vTQpHZWhlbm5hL00KR2VocmlnL00KR2VpZ2VyL00KR2VsYnZpZWgvTQpHZWxsZXIvTQpHZW1pbmkvTVMKR2VuL00KR2VuYS9NCkdlbmFyby9NCkdlbmUvTQpHZW5lc2lzL00KR2VuZXQvTQpHZW5ldmEvTQpHZW5ldmlldmUvTQpHZW5naGlzL00KR2Vub2EvU00KR2VudG9vL00KR2VudHJ5L00KR2VvL00KR2VvZmZyZXkvTQpHZW9yZ2UvTVMKR2VvcmdldG93bi9NCkdlb3JnZXR0ZS9NCkdlb3JnaWEvTQpHZW9yZ2lhbi9NUwpHZW9yZ2luYS9NCkdlci9NCkdlcmFsZC9NCkdlcmFsZGluZS9NCkdlcmFyZC9NCkdlcmFyZG8vTQpHZXJiZXIvTQpHZXJlL00KR2VyaXRvbC9NCkdlcm1hbi9NUwpHZXJtYW5pYy9NCkdlcm1hbnkvTQpHZXJvbmltby9NCkdlcnJ5L00KR2Vyc2h3aW4vTQpHZXJ0cnVkZS9NCkdlc3RhcG8vU00KR2V0aHNlbWFuZS9NCkdldHR5L00KR2V0dHlzYnVyZy9NCkdld3VyenRyYW1pbmVyL00KR2hhbmEvTQpHaGFuYWlhbgpHaGF0cy9NCkdoYXp2YW5pZC9NCkdoZW50L00KR2hpYmVsbGluZS9NCkdpYWNvbWV0dGkvTQpHaWFubmluaS9NCkdpYXVxdWUvTQpHaWJib24vTQpHaWJicy9NCkdpYnJhbHRhci9NUwpHaWJzb24vTQpHaWRlL00KR2lkZW9uL00KR2llbGd1ZC9NCkdpZW5haC9NCkdpbC9NCkdpbGEvTQpHaWxiZXJ0L00KR2lsYmVydG8vTQpHaWxjaHJpc3QvTQpHaWxkYS9NCkdpbGVhZC9NCkdpbGVzL00KR2lsZ2FtZXNoL00KR2lsbC9NCkdpbGxlc3BpZS9NCkdpbGxldHRlL00KR2lsbGlhbS9NCkdpbGxpYW4vTQpHaWxsaWdhbi9NCkdpbG1hbgpHaWxtb3JlL00KR2luYS9NCkdpbmdlci9NCkdpbmdyaWNoL00KR2lubnkvTQpHaW5vL00KR2luc2JlcmcvTQpHaW5zYnVyZy9NCkdpbnN1L00KR2lvcmdpb25lL00KR2lvdHRvL00KR2lvdmFubmkvTQpHaXJhdWRvdXgvTQpHaXNlbGxlL00KR2lzaC9NCkdpdEh1Yi9NCkdpdWxpYW5pL00KR2l1c2VwcGUvTQpHaXphL00KR2sKR2xhZHN0b25lL01TCkdsYWR5cy9NCkdsYXNlci9NCkdsYXNnb3cvTQpHbGFzcy9NCkdsYXN0b25idXJ5L00KR2xhc3dlZ2lhbi9TTQpHbGF4by9NCkdsZWFzb24vTQpHbGVuL00KR2xlbmRhL00KR2xlbmRhbGUKR2xlbmxpdmV0L00KR2xlbm4vTQpHbGVubmEvTQpHbG9yaWEvTQpHbG91Y2VzdGVyL00KR2xvdmVyL00KR25vc3RpYy9NCkdub3N0aWNpc20vTQpHbnVQRwpHb2EvTQpHb2JpL00KR29kL00KR29kYXJkL00KR29kZGFyZC9NCkdvZGVsL00KR29kaGVhZC9NCkdvZGl2YS9NCkdvZG90L00KR29kc3BlZWQvU00KR29kdGhhYWIvTQpHb2R1bm92L00KR29kemlsbGEvTQpHb2ViYmVscy9NCkdvZXJpbmcvTQpHb2V0aGFscy9NCkdvZXRoZS9NCkdvZmYvTQpHb2cvTQpHb2dvbC9NCkdvaWFuaWEvTQpHb2xhbi9NCkdvbGNvbmRhL00KR29sZGEvTQpHb2xkYmVyZy9NCkdvbGRlbi9NCkdvbGRpZS9NCkdvbGRpbG9ja3MvTQpHb2xkaW5nL00KR29sZG1hbi9NCkdvbGRzbWl0aC9NCkdvbGR3YXRlci9NCkdvbGR3eW4vTQpHb2xnaS9NCkdvbGdvdGhhL00KR29saWF0aC9NCkdvbWV6L00KR29tb3JyYWgvTQpHb21wZXJzL00KR29tdWxrYS9NCkdvbmR3YW5hbGFuZC9NCkdvbnphbGVzL00KR29uemFsZXovTQpHb256YWxvL00KR29vZC9NCkdvb2RhbGwvTQpHb29kbWFuL00KR29vZHJpY2gvTQpHb29kd2lsbC9NCkdvb2R3aW4vTQpHb29keWVhci9NCkdvb2dsZS9NCkdvb2xhZ29uZy9NCkdvcGhlcgpHb3JiYWNoZXYvTQpHb3JkaWFuL00KR29yZGltZXIvTQpHb3Jkb24vTQpHb3JlL00KR29yZW4vTQpHb3JleS9NCkdvcmdhcy9NCkdvcmdvbi9NCkdvcmdvbnpvbGEvTQpHb3JreS9NCkdvc3BlbC9NUwpHb3RlYm9yZy9NCkdvdGgvTQpHb3RoYW0vTQpHb3RoaWMvTVMKR290aHMKR291ZGEvU00KR291bGQvTQpHb3Vub2QvTQpHb3Zlcm5vcgpHb3lhL00KR3IvQgpHcmFibGUvTQpHcmFjY2h1cy9NCkdyYWNlL00KR3JhY2VsYW5kL00KR3JhY2llL00KR3JhY2llbGEvTQpHcmFkeS9NCkdyYWZmaWFzL00KR3JhZnRvbi9NCkdyYWhhbS9NCkdyYWhhbWUvTQpHcmFpbC9NCkdyYW1teS9NCkdyYW1waWFucy9NCkdyYW5hZGEvTQpHcmFudC9NCkdyYXNzL00KR3JhdmVzL00KR3JheS9NCkdyZWNpYW4vTQpHcmVlY2UvTQpHcmVlay9TTQpHcmVlbGV5L00KR3JlZW4vU00KR3JlZW5lL00KR3JlZW5sYW5kL00KR3JlZW5sYW5kaWMKR3JlZW5wZWFjZS9NCkdyZWVuc2Jvcm8vTQpHcmVlbnNsZWV2ZXMvTQpHcmVlbnNwYW4vTQpHcmVlbndpY2gvTQpHcmVlci9NCkdyZWcvTQpHcmVnZy9NCkdyZWdvcmlhbi9NCkdyZWdvcmlvL00KR3JlZ29yeS9NCkdyZW5hZGEvTQpHcmVuYWRpYW4vTVMKR3JlbmFkaW5lcy9NCkdyZW5kZWwvTQpHcmVub2JsZS9NCkdyZXNoYW0vTQpHcmV0YS9NCkdyZXRjaGVuL00KR3JldGVsL00KR3JldHpreS9NCkdyZXkvTQpHcmllZy9NCkdyaWZmaW4vTQpHcmlmZml0aC9NCkdyaW1lcy9NCkdyaW1tL00KR3JpbmNoL00KR3Jpcy9NCkdyb215a28vTQpHcm9waXVzL00KR3Jvc3MvTQpHcm9zei9NCkdyb3RpdXMvTQpHcm92ZXIvTQpHcm96bnkKR3J1bW1hbi9NCkdydW5keS9NCkdydW5ld2FsZC9NCkdydXMvTQpHcnV5ZXJlL1NNCkd1YWRhbGFqYXJhL00KR3VhZGFsY2FuYWwvTQpHdWFkYWxxdWl2aXIvTQpHdWFkYWx1cGUvTQpHdWFkZWxvdXBlL00KR3VhbGxhdGlyaS9NCkd1YW0vTQpHdWFtYW5pYW4KR3Vhbmd6aG91L00KR3VhbnRhbmFtby9NCkd1YXJhbmkvTQpHdWFybmllcmkvTQpHdWF0ZW1hbGEvTQpHdWF0ZW1hbGFuL01TCkd1YXlhcXVpbC9NCkd1Y2NpL00KR3VlbHBoL00KR3Vlcm5zZXkvTVMKR3VlcnJhL00KR3VlcnJlcm8vTQpHdWV2YXJhL00KR3VnZ2VuaGVpbS9NCkd1aWFuYS9NCkd1aWRvCkd1aWxsZXJtby9NCkd1aW5lYS9NCkd1aW5lYW4vTVMKR3VpbmV2ZXJlL00KR3Vpbm5lc3MvTQpHdWl5YW5nL00KR3Vpem90L00KR3VqYXJhdC9NCkd1amFyYXRpL00KR3VqcmFud2FsYS9NCkd1bGxhaC9NCkd1bGxpdmVyL00KR3VtYmVsL00KR3VudGhlci9NCkd1b2ZlbmcvTQpHdXB0YS9NCkd1cmtoYS9NCkd1cy9NCkd1c3Rhdi9NCkd1c3Rhdm8vTQpHdXN0YXZ1cy9NCkd1dGVuYmVyZy9NCkd1dGhyaWUvTQpHdXRpZXJyZXovTQpHdXkvTQpHdXlhbmEvTQpHdXlhbmVzZS9NCkd1em1hbi9NCkd3YWxpb3IvTQpHd2VuL00KR3dlbmRvbGluZS9NCkd3ZW5kb2x5bi9NCkd3eW4vTQpHeXBzeS9TTQpIL00KSEJPL00KSERECkhETUkKSERUVgpIRi9NCkhIUwpISQpISVYvTQpITQpITU8vTQpITVMKSE9WCkhQL00KSFBWCkhRL00KSFIKSFJICkhTCkhTQkMvTQpIU1QKSFQKSFRNTC9NCkhUVFAKSFVEL00KSGEvTQpIYWFzL00KSGFiYWtrdWsvTQpIYWJlci9NCkhhZGFyL00KSGFkZXMvTQpIYWRyaWFuL00KSGFmaXovTQpIYWdhci9NCkhhZ2dhaS9NCkhhZ2lvZ3JhcGhhL00KSGFndWUvTQpIYWhuL00KSGFpZGEvU00KSGFpZmEvTQpIYWlwaG9uZy9NCkhhaXRpL00KSGFpdGlhbi9NUwpIYWtrYS9NCkhha2x1eXQvTQpIYWwvU00KSGFsZGFuZS9NCkhhbGUvTQpIYWxlYWthbGEvTQpIYWxleS9NCkhhbGlmYXgvTQpIYWxsL00KSGFsbGV5L00KSGFsbGlidXJ0b24vTQpIYWxsaWUvTQpIYWxsbWFyay9NCkhhbGxvd2Vlbi9NUwpIYWxsc3RhdHQvTQpIYWxvbi9NCkhhbHMvTQpIYWxzZXkvTQpIYW0vTQpIYW1hbi9NCkhhbWJ1cmcvTVMKSGFtaHVuZy9NCkhhbWlsY2FyL00KSGFtaWxsL00KSGFtaWx0b24vTQpIYW1pbHRvbmlhbi9NCkhhbWl0aWMvTQpIYW1sZXQvTQpIYW1saW4vTQpIYW1tYXJza2pvbGQvTQpIYW1tZXJzdGVpbi9NCkhhbW1ldHQvTQpIYW1tb25kL00KSGFtbXVyYWJpL00KSGFtcHNoaXJlL00KSGFtcHRvbi9NCkhhbXN1bi9NCkhhbi9TTQpIYW5jb2NrL00KSGFuZGVsL00KSGFuZHkvTQpIYW5leS9NCkhhbmd1bC9NCkhhbmd6aG91L00KSGFuay9NCkhhbm5hL00KSGFubmFoL00KSGFubmliYWwvTQpIYW5vaS9NCkhhbm92ZXIvTQpIYW5vdmVyaWFuL00KSGFucy9NTgpIYW5zZWwvTQpIYW5zZW4vTQpIYW5zb24vTQpIYW51a2EKSGFudWtrYWgvTQpIYW51a2thaHMKSGFwc2J1cmcvTQpIYXJhcmUvTQpIYXJiaW4vTQpIYXJkaW4vTQpIYXJkaW5nL00KSGFyZHkvTQpIYXJncmVhdmVzL00KSGFybGFuL00KSGFybGVtL00KSGFybGVxdWluL00KSGFybGV5L00KSGFybG93L00KSGFybW9uL00KSGFyb2xkL00KSGFycGVyL00KSGFycHkvU00KSGFycmVsbC9NCkhhcnJpZXQvTQpIYXJyaWV0dC9NCkhhcnJpbmd0b24vTQpIYXJyaXMvTQpIYXJyaXNidXJnL00KSGFycmlzb24vTQpIYXJyb2RzL00KSGFycnkvTQpIYXJ0L00KSGFydGUvTQpIYXJ0Zm9yZC9NCkhhcnRsaW5lL00KSGFydG1hbi9NCkhhcnZhcmQvTQpIYXJ2ZXkvTQpIYXNicm8vTQpIYXNpZGltL00KSGFza2VsbC9NCkhhc3RpbmdzL00KSGF0ZmllbGQvTQpIYXRoYXdheS9NCkhhdHNoZXB1dC9NCkhhdHRlcmFzL00KSGF0dGllL00KSGF1cHRtYW5uL00KSGF1c2EvTQpIYXVzZG9yZmYvTQpIYXZhbmEvTVMKSGF2YXJ0aS9NCkhhdmVsL00KSGF2b2xpbmUvTQpIYXcKSGF3YWlpL00KSGF3YWlpYW4vU00KSGF3a2luZy9NCkhhd2tpbnMvTQpIYXdrcwpIYXd0aG9ybmUvTQpIYXkvU00KSGF5ZGVuL00KSGF5ZG4vTQpIYXllay9NCkhheWVzL00KSGF5bmVzL00KSGF5cy9NCkhheXdhcmQvTQpIYXl3b29kL00KSGF5d29ydGgvTQpIYXplbC9NCkhhemxpdHQvTQpIZS9NCkhlYWQvTQpIZWFyc3QvTQpIZWF0aC9NUgpIZWF0aGVyL00KSGVhdmlzaWRlL00KSGViCkhlYmUvTQpIZWJlcnQvTQpIZWJyYWljL00KSGVicmFpc20vU00KSGVicmV3L01TCkhlYnJld3MvTQpIZWJyaWRlcy9NCkhlY2F0ZS9NCkhlY3Rvci9NCkhlY3ViYS9NCkhlZXAvTQpIZWZuZXIvTQpIZWdlbC9NCkhlZ2VsaWFuL00KSGVnaXJhL00KSGVpZGVnZ2VyL00KSGVpZGVsYmVyZy9NCkhlaWRpL00KSGVpZmV0ei9NCkhlaW1saWNoL00KSGVpbmUvTQpIZWluZWtlbi9NCkhlaW5sZWluL00KSGVpbnJpY2gvTQpIZWluei9NCkhlaXNlbmJlcmcvTQpIZWlzbWFuL00KSGVsZW4vTQpIZWxlbmEvTQpIZWxlbmUvTQpIZWxnYS9NCkhlbGljb24vTQpIZWxpb3BvbGlzL00KSGVsaW9zL00KSGVsbGVuZS9TTQpIZWxsZW5pYy9NCkhlbGxlbmlzbS9NUwpIZWxsZW5pc3QKSGVsbGVuaXN0aWMvTQpIZWxsZW5pemF0aW9uL00KSGVsbGVuaXplL00KSGVsbGVyL00KSGVsbGVzcG9udC9NCkhlbGxtYW4vTQpIZWxtaG9sdHovTQpIZWxvaXNlL00KSGVsc2lua2kvTQpIZWx2ZXRpYW4KSGVsdmV0aXVzL00KSGVtaW5nd2F5L00KSGVuY2gvTQpIZW5kZXJzb24vTQpIZW5kcmljay9NUwpIZW5kcmlja3MvTQpIZW5kcml4L00KSGVubGV5L00KSGVubmVzc3kvTQpIZW5yaS9NCkhlbnJpZXR0YS9NCkhlbnJpay9NCkhlbnJ5L00KSGVuc2xleS9NCkhlbnNvbi9NCkhlcGJ1cm4vTQpIZXBoYWVzdHVzL00KSGVwcGxld2hpdGUvTQpIZXJhL00KSGVyYWNsZXMvTQpIZXJhY2xpdHVzL00KSGVyYWtsZXMvTQpIZXJiYXJ0L00KSGVyYmVydC9NCkhlcmN1bGFuZXVtL00KSGVyY3VsZWFuCkhlcmN1bGVzL00KSGVyZGVyL00KSGVyZWZvcmQvU00KSGVyZXJvL00KSGVyaWJlcnRvL00KSGVybWFuL00KSGVybWFwaHJvZGl0dXMvTQpIZXJtZXMvTQpIZXJtaW5pYS9NCkhlcm1pdGFnZS9NCkhlcm1pdGUvTQpIZXJtb3NpbGxvL00KSGVybmFuZGV6L00KSGVyb2QvTQpIZXJvZG90dXMvTQpIZXJyL01HCkhlcnJlcmEvTQpIZXJyaWNrL00KSGVycmluZy9NCkhlcnNjaGVsL00KSGVyc2V5L00KSGVyc2hlbC9NCkhlcnNoZXkvTQpIZXJ0ei9NCkhlcnR6c3BydW5nL00KSGVyemVnb3ZpbmEvTQpIZXJ6bC9NCkhlc2h2YW4vTQpIZXNpb2QvTQpIZXNwZXJ1cy9NCkhlc3MvTQpIZXNzZS9NCkhlc3NpYW4vTQpIZXN0ZXIvTQpIZXN0b24vTQpIZXR0aWUvTQpIZXdpdHQvTQpIZXdsZXR0L00KSGV5ZXJkYWhsL00KSGV5d29vZC9NCkhlemJvbGxhaC9NCkhlemVraWFoL00KSGYvTQpIZy9NCkhpYWxlYWgvTQpIaWF3YXRoYS9NCkhpYmVybmlhL00KSGliZXJuaWFuCkhpY2ttYW4vTQpIaWNrb2svTQpIaWNrcy9NCkhpZXJvbnltdXMvTQpIaWdhc2hpb3Nha2EKSGlnZ2lucy9NCkhpZ2hsYW5kZXIvU00KSGlnaGxhbmRzCkhpZ2huZXNzL00KSGlsYXJpby9NCkhpbGFyeS9NCkhpbGJlcnQvTQpIaWxkYS9NCkhpbGRlYnJhbmQvTQpIaWxmaWdlci9NCkhpbGwvTQpIaWxsYXJ5L00KSGlsbGVsL00KSGlsdG9uL00KSGltYWxheWEvU00KSGltYWxheWFuCkhpbWFsYXlhcy9NCkhpbW1sZXIvTQpIaW5heWFuYS9NCkhpbmRlbWl0aC9NCkhpbmRlbmJ1cmcvTQpIaW5kaS9NCkhpbmR1L1NNCkhpbmR1aXNtL1NNCkhpbmR1c3Rhbi9NCkhpbmR1c3RhbmkvU00KSGluZXMvTQpIaW50b24vTQpIaXBwYXJjaHVzL00KSGlwcG9jcmF0ZXMvTQpIaXBwb2NyYXRpYy9NCkhpcmFtL00KSGlyb2J1bWkvTQpIaXJvaGl0by9NCkhpcm9zaGltYS9NCkhpc3BhbmljL1NNCkhpc3BhbmlvbGEvTQpIaXNzL00KSGl0YWNoaS9NCkhpdGNoY29jay9NCkhpdGxlci9NUwpIaXR0aXRlL1NNCkhtb25nL00KSG8vTQpIb2JhcnQvTQpIb2JiZXMvTQpIb2Jicy9NCkhvY2tuZXkvTQpIb2RnZS9TTQpIb2RnZXMvTQpIb2Rna2luL00KSG9mZi9NCkhvZmZhL00KSG9mZm1hbi9NCkhvZnN0YWR0ZXIvTQpIb2dhbi9NCkhvZ2FydGgvTQpIb2d3YXJ0cy9NCkhvaGVubG9oZS9NCkhvaGVuc3RhdWZlbi9NCkhvaGVuem9sbGVybi9NCkhvaGhvdC9NCkhvaG9rYW0vTQpIb2trYWlkby9NCkhva3VzYWkvTQpIb2xiZWluL00KSG9sY29tYi9NCkhvbGRlbi9NCkhvbGRlci9NCkhvbGlkYXkvTQpIb2xpbmVzcwpIb2xsYW5kL1pTTVIKSG9sbGFuZGVyL00KSG9sbGVyaXRoL00KSG9sbGV5L00KSG9sbGllL00KSG9sbGlzL00KSG9sbG93YXkvTQpIb2xseS9NCkhvbGx5d29vZC9NCkhvbG1hbi9NCkhvbG1lcy9NCkhvbG9jYXVzdC9NCkhvbG9jZW5lL00KSG9sc3QvTQpIb2xzdGVpbi9TTQpIb2x0L00KSG9tZXIvTQpIb21lcmljL00KSG9uCkhvbmRhL00KSG9uZHVyYW4vTVMKSG9uZHVyYXMvTQpIb25lY2tlci9NCkhvbmV5d2VsbC9NCkhvbmcKSG9uaWFyYS9NCkhvbm9sdWx1L00KSG9ub3JhYmxlCkhvbnNodS9NCkhvb2QvTQpIb29rZS9STQpIb29rZXIvTQpIb29wZXIvTQpIb29zaWVyL01TCkhvb3RlcnMvTQpIb292ZXIvTVMKSG9wZS9NCkhvcGV3ZWxsL00KSG9waS9TTQpIb3BraW5zL00KSG9wcGVyL00KSG9yYWNlL00KSG9yYWNpby9NCkhvcmF0aW8vTQpIb3JtZWwvTQpIb3JtdXovTQpIb3JuL00KSG9ybmJsb3dlci9NCkhvcm5lL00KSG9yb3dpdHovTQpIb3J0aHkvTQpIb3J0b24vTQpIb3J1cy9NCkhvc2VhL00KSG9zdC9TTQpIb3Rwb2ludC9NCkhvdHRlbnRvdC9TTQpIb3VkaW5pL00KSG91c2UvTQpIb3VzbWFuL00KSG91c3Rvbi9NCkhvdXlobmhubS9NCkhvdmhhbmVzcy9NCkhvd2FyZC9NCkhvd2UvTQpIb3dlbGwvTVMKSG93ZWxscy9NCkhvd3JhaApIb3lsZS9NCkhyb3RoZ2FyL00KSHRzCkh1YW5nL00KSHViYmFyZC9NCkh1YmJsZS9NCkh1YmVyL00KSHViZXJ0L00KSHVjay9NCkh1ZGRlcnNmaWVsZApIdWRzb24vTQpIdWVydGEvTQpIdWV5L00KSHVmZi9NCkh1ZmZtYW4vTQpIdWdnaW5zL00KSHVnaC9NUwpIdWdoZXMvTQpIdWdvL00KSHVndWVub3QvTVMKSHVpL00KSHVpdHppbG9wb3RjaGxpL00KSHVsbC9NCkh1bWJlcnRvL00KSHVtYm9sZHQvTQpIdW1lL00KSHVtbWVyL00KSHVtcGhyZXkvU00KSHVtdmVlL00KSHVuL1NNCkh1bmcvTQpIdW5nYXJpYW4vU00KSHVuZ2FyeS9NCkh1bnNwZWxsL00KSHVudC9NUgpIdW50ZXIvTQpIdW50aW5ndG9uL00KSHVudGxleS9NCkh1bnRzdmlsbGUvTQpIdXJsZXkvTQpIdXJvbi9NCkh1cnN0L00KSHVzL00KSHVzc2Vpbi9NCkh1c3NlcmwvTQpIdXNzaXRlL00KSHVzdG9uL00KSHV0Y2hpbnNvbi9NCkh1dHRvbi9NCkh1dHUvTQpIdXhsZXkvTQpIdXlnZW5zL00KSHlhZGVzL00KSHlkZS9NCkh5ZGVyYWJhZC9NCkh5ZHJhL00KSHltZW4vTQpIeXBlcmlvbi9NCkh5dW5kYWkvTQpIei9NCkknZApJJ2xsCkknbQpJJ3ZlCkkvTQpJQQpJQk0vTQpJQ0JNL1NNCklDQwpJQ1UKSUQvU00KSURFCklFCklFRApJRUVFCklLRUEvTQpJTApJTUYvTQpJTUhPCklNTlNITwpJTU8KSU4KSU5HL00KSU5SSQpJTlMKSU9VL00KSVAKSVBBCklQTwpJUS9NCklSQS9TTQpJUkMKSVJTL00KSVNCTgpJU0lTCklTTy9NCklTUApJU1MKSVQKSVVECklWL1NNCklWRgpJYQpJYWNjb2NhL00KSWFnby9NCklhbi9NCklhcGV0dXMvTQpJYmFkYW4vTQpJYmVyaWEvTQpJYmVyaWFuL00KSWJpemEvTQpJYmxpcy9NCkliby9NCklic2VuL00KSWNhaG4vTQpJY2FydXMvTQpJY2UKSWNlbGFuZC9NUloKSWNlbGFuZGVyL00KSWNlbGFuZGljL00KSWRhL00KSWRhaG8vU00KSWRhaG9hbi9NUwpJZGFob2VzCklleWFzdS9NCklnbmFjaW8vTQpJZ25hdGl1cy9NCklnb3IvTQpJZ3Vhc3N1L00KSWpzc2VsbWVlci9NCklrZS9NCklraG5hdG9uL00KSWxhL00KSWxlbmUvTQpJbGlhZC9TTQpJbGwKSWxsaW5vaXMvTQpJbGxpbm9pc2FuL01TCklsbHVtaW5hdGkvTQpJbHl1c2hpbi9NCkltZWxkYS9NCkltaG90ZXAvTQpJbW9kaXVtL00KSW1vZ2VuZS9NCkltdXMvTQpJbi9NCkluYS9NCkluYwpJbmNhL1NNCkluY2hvbi9NCkluY29ycG9yYXRlZApJbmQKSW5kZXBlbmRlbmNlL00KSW5kaWEvTQpJbmRpYW4vTVMKSW5kaWFuYS9NCkluZGlhbmFuL1NNCkluZGlhbmFwb2xpcy9NCkluZGlhbmlhbgpJbmRpZXMvTQpJbmRpcmEvTQpJbmRvY2hpbmEvTQpJbmRvY2hpbmVzZS9NCkluZG9uZXNpYS9NCkluZG9uZXNpYW4vU00KSW5kb3JlL00KSW5kcmEvTQpJbmR1cy9NCkluZHkvU00KSW5lcy9NCkluZXovTQpJbmdlL00KSW5nbGV3b29kCkluZ3JhbS9NCkluZ3Jlcy9NCkluZ3JpZC9NCklubm9jZW50L00KSW5uc2JydWNrCklub251L00KSW5xdWlzaXRpb24vTQpJbnN0Ckluc3RhZ3JhbS9NCkluc3RhbWF0aWMvTQpJbnRlbC9NCkludGVsc2F0L00KSW50ZXJuYXRpb25hbGUvTQpJbnRlcm5ldC9TTQpJbnRlcnBvbC9NCkludWl0L01TCkludWt0aXR1dC9NCkludmFyL00KSW8vTQpJb25lc2NvL00KSW9uaWFuL01TCklvbmljL1NNCklvd2EvU00KSW93YW4vTVMKSXBoaWdlbmlhL00KSXBzd2ljaApJcWFsdWl0L00KSXFiYWwvTQpJcXVpdG9zL00KSXIvTQpJcmEvTQpJcmFuL00KSXJhbmlhbi9TTQpJcmFxL00KSXJhcWkvTVMKSXJlbGFuZC9NCklyZW5lL00KSXJpcy9NCklyaXNoL01SCklyaXNobWFuL00KSXJpc2htZW4vTQpJcmlzaHdvbWFuL00KSXJpc2h3b21lbi9NCklya3V0c2svTQpJcm1hL00KSXJvcXVvaWFuL1NNCklyb3F1b2lzL00KSXJyYXdhZGR5L00KSXJ0aXNoL00KSXJ2aW4vTQpJcnZpbmUvTQpJcnZpbmcvTQpJcndpbi9NCklzYWFjL00KSXNhYmVsL00KSXNhYmVsbGEvTQpJc2FiZWxsZS9NCklzYWlhaC9NCklzY2FyaW90L00KSXNmYWhhbi9NCklzaGVyd29vZC9NCklzaGltL00KSXNobWFlbC9NCklzaHRhci9NCklzaWFoL00KSXNpZHJvL00KSXNpcy9NCklzbGFtL01TCklzbGFtYWJhZC9NCklzbGFtaWMvTQpJc2xhbWlzbS9NCklzbGFtaXN0L00KSXNsYW1vcGhvYmlhCklzbGFtb3Bob2JpYwpJc21hZWwvTQpJc21haWwvTQpJc29sZGUvTQpJc3BlbGwvTQpJc3JhZWwvU00KSXNyYWVsaS9TTQpJc3JhZWxpdGUvTQpJc3NhYy9NCklzc2FjaGFyL00KSXN0YW5idWwvTQpJc3V6dS9NCkl0Ckl0YWlwdS9NCkl0YWwKSXRhbGlhbi9TTQpJdGFsaWFuYXRlCkl0YWx5L00KSXRhc2NhL00KSXRoYWNhL00KSXRoYWNhbi9NCkl0by9NCkl2YS9NCkl2YW4vTQpJdmFuaG9lL00KSXZlcy9NCkl2b3JpYW4KSXZvcnkvTQpJdnkvTQpJeWFyL00KSXphYWsvTQpJemFuYWdpL00KSXphbmFtaS9NCkl6aGV2c2svTQpJem1pci9NCkl6b2QvTQpJenZlc3RpYS9NCkovTUQKSkNTCkpECkpGSy9NCkpQCkpQRUcKSlYKSmFjay9NCkphY2tpZS9NCkphY2tseW4vTQpKYWNrc29uL00KSmFja3Nvbmlhbi9NCkphY2tzb252aWxsZS9NCkphY2t5L00KSmFjbHluL00KSmFjb2IvU00KSmFjb2JlYW4vTQpKYWNvYmkvTQpKYWNvYmluL00KSmFjb2JpdGUvTQpKYWNvYnMvTQpKYWNvYnNvbi9NCkphY3F1YXJkL00KSmFjcXVlbGluZS9NCkphY3F1ZWx5bi9NCkphY3F1ZXMvTQpKYWN1enppL00KSmFnZ2VyL00KSmFnaWVsbG9uL00KSmFndWFyL00KSmFoYW5naXIvTQpKYWltZS9NCkphaW4vTQpKYWluaXNtL00KSmFpcHVyL00KSmFrYXJ0YS9NCkpha2UvTQpKYW1hYWwvTQpKYW1haWNhL00KSmFtYWljYW4vU00KSmFtYWwvTQpKYW1hci9NCkphbWUvU00KSmFtZWwvTQpKYW1lcy9NCkphbWVzdG93bi9NCkphbWkvTQpKYW1pZS9NCkphbi9NCkphbmEvTQpKYW5hY2VrL00KSmFuZS9NCkphbmVsbC9NCkphbmVsbGUvTQpKYW5ldC9NCkphbmV0dGUvTQpKYW5pY2UvTQpKYW5pZS9NCkphbmluZS9NCkphbmlzL00KSmFuaXNzYXJ5L00KSmFuamF3ZWVkL00KSmFubmEvTQpKYW5uaWUvTQpKYW5zZW4vTQpKYW5zZW5pc3QvTQpKYW51YXJ5L1NNCkphbnVzL00KSmFwL1NNCkphcGFuL00KSmFwYW5lc2UvTVMKSmFwdXJhL00KSmFyZWQvTQpKYXJsc2JlcmcvTQpKYXJyZWQvTQpKYXJyZXR0L00KSmFycm9kL00KSmFydmlzL00KSmFzbWluZS9NCkphc29uL00KSmFzcGVyL00KSmF0YWthL00KSmF2YS9TTQpKYXZhU2NyaXB0L00KSmF2YW5lc2UvTQpKYXZpZXIvTQpKYXhhcnRlcy9NCkpheS9NCkpheWFwdXJhL00KSmF5YXdhcmRlbmUvTQpKYXljZWUvTVMKSmF5Y2Vlcy9NCkpheW5lL00KSmF5c29uL00KSmVhbi9NCkplYW5ldHRlL00KSmVhbmllL00KSmVhbmluZS9NCkplYW5uZS9NCkplYW5uZXR0ZS9NCkplYW5uaWUvTQpKZWFubmluZS9NCkplZC9NCkplZGkvTQpKZWVwL00KSmVldmVzL00KSmVmZi9NCkplZmZlcmV5L00KSmVmZmVyc29uL00KSmVmZmVyc29uaWFuL00KSmVmZmVyeS9NCkplZmZyZXkvTQpKZWZmcnkvTQpKZWhvc2hhcGhhdC9NCkplaG92YWgvTQpKZWt5bGwvTQpKZW5pZmVyL00KSmVua2lucy9NCkplbm5hL00KSmVubmVyL00KSmVubmllL00KSmVubmlmZXIvTQpKZW5uaW5ncy9NCkplbm55L00KSmVuc2VuL00KSmVwaHRoYWgvTQpKZXJhbGQvTQpKZXJlbWlhaC9NCkplcmVtaWFocwpKZXJlbXkvTQpKZXJpL00KSmVyaWNoby9NCkplcm1haW5lL00KSmVyb2JvYW0vTQpKZXJvbGQvTQpKZXJvbWUvTQpKZXJyaS9NCkplcnJvZC9NCkplcnJvbGQvTQpKZXJyeS9NCkplcnNleS9NUwpKZXJ1c2FsZW0vTQpKZXNzL00KSmVzc2UvTQpKZXNzaWNhL00KSmVzc2llL00KSmVzdWl0L01TCkplc3VzL00KSmV0d2F5L00KSmV3L1NNCkpld2VsL00KSmV3ZWxsL00KSmV3ZXNzL01TCkpld2lzaC9QTQpKZXdyeS9NCkplemViZWwvU00KSmlkZGEvTQpKaWxpbi9NCkppbGwvTQpKaWxsaWFuL00KSmltL00KSmltZW5lei9NCkppbW1pZS9NCkppbW15L00KSmluYW4vTQpKaW5uYWgvTQpKaW5ueS9NCkppdmFyby9NCkpvL00KSm9hbi9NCkpvYW5uL00KSm9hbm5hL00KSm9hbm5lL00KSm9hcXVpbi9NCkpvYi9TTQpKb2JzL00KSm9jYXN0YS9NCkpvY2VseW4vTQpKb2NrL00KSm9ja2V5L00KSm9kaS9NCkpvZGllL00KSm9keS9NCkpvZS9NCkpvZWwvTQpKb2V5L00KSm9namFrYXJ0YS9NCkpvaGFubi9NCkpvaGFubmEvTQpKb2hhbm5lcy9NCkpvaGFubmVzYnVyZy9NCkpvaG4vU00KSm9obmF0aGFuL00KSm9obmF0aG9uL00KSm9obmllL00KSm9obm5pZS9NCkpvaG5ueS9NCkpvaG5zL00KSm9obnNvbi9NCkpvaG5zdG9uL00KSm9sZW5lL00KSm9sc29uL00KSm9uL00KSm9uYWgvTQpKb25haHMKSm9uYXMvTQpKb25hdGhhbi9NCkpvbmF0aG9uL00KSm9uZXMvTQpKb25pL00KSm9uc29uL00KSm9wbGluL00KSm9yZGFuL00KSm9yZGFuaWFuL01TCkpvcmdlL00KSm9zZS9NCkpvc2VmL00KSm9zZWZhL00KSm9zZWZpbmEvTQpKb3NlcGgvTQpKb3NlcGhpbmUvTQpKb3NlcGhzCkpvc2VwaHNvbi9NCkpvc2VwaHVzL00KSm9zaC9NCkpvc2h1YS9NCkpvc2lhaC9NCkpvc2llL00KSm9zdWUvTQpKb3VsZS9NCkpvdmUvTQpKb3ZpYW4vTQpKb3kvTQpKb3ljZS9NCkpveWNlYW4vTQpKb3luZXIvTQpKcG4KSnIvTQpKdWFuL00KSnVhbmEvTQpKdWFuaXRhL00KSnVhcmV6L00KSnViYWwvTQpKdWRhZW8KSnVkYWgvTQpKdWRhaWMKSnVkYWljYWwKSnVkYWlzbS9NUwpKdWRhcy9NUwpKdWRkL00KSnVkZS9NCkp1ZGVhL00KSnVkZ2VzCkp1ZGl0aC9NCkp1ZHNvbi9NCkp1ZHkvTQpKdWdnZXJuYXV0L00KSnVsCkp1bGVzL00KSnVsaWEvTQpKdWxpYW4vTQpKdWxpYW5hL00KSnVsaWFubmUvTQpKdWxpZS9NCkp1bGlldC9NCkp1bGlldHRlL00KSnVsaW8vTQpKdWxpdXMvTQpKdWxsaWFyZC9NCkp1bHkvU00KSnVuL00KSnVuZS9TTQpKdW5lYXUvTQpKdW5nL00KSnVuZ2ZyYXUvTQpKdW5naWFuL00KSnVuaW9yL1NNCkp1bmtlci9TTQpKdW5vL00KSnVwaXRlci9NCkp1cmFzc2ljL00KSnVydWEvTQpKdXN0aWNlL00KSnVzdGluL00KSnVzdGluZS9NCkp1c3Rpbmlhbi9NCkp1dGxhbmQvTQpKdXZlbmFsL00KSy9TTU5HSgpLQi9NCktDCktGQy9NCktHQi9NCktJQQpLS0svTQpLTy9NCktQCktTCktZCkthYWJhL00KS2FidWwvTQpLYWZrYS9NCkthZmthZXNxdWUvTQpLYWdvc2hpbWEvTQpLYWhsdWEvTQpLYWlmZW5nL00KS2Fpc2VyL01TCkthaXRsaW4vTQpLYWxhaGFyaS9NCkthbGFtYXpvby9NCkthbGFzaG5pa292L00KS2FsYi9NCkthbGV2YWxhL00KS2FsZ29vcmxpZS9NCkthbGkvTQpLYWxteWsvTQpLYW1hL00KS2FtY2hhdGthL00KS2FtZWhhbWVoYS9NCkthbXBhbGEvTQpLYW1wdWNoZWEvTQpLYW4vU00KS2FuY2hlbmp1bmdhL00KS2FuZGFoYXIvTQpLYW5kaW5za3kvTQpLYW5lL00KS2FubmFkYS9NCkthbm8vTQpLYW5wdXIvTQpLYW5zYW4vTVMKS2Fuc2FzL00KS2FudC9NCkthbnRpYW4vTQpLYW9oc2l1bmcvTQpLYXBvc2kvTQpLYXJhL00KS2FyYWNoaS9NCkthcmFnYW5kYS9NCkthcmFrb3J1bS9NCkthcmFtYXpvdi9NCkthcmVlbS9NCkthcmVuL00KS2FyZW5pbmEvTQpLYXJpL00KS2FyaW4vTQpLYXJpbmEvTQpLYXJsL00KS2FybGEvTQpLYXJsb2ZmL00KS2Fyby9NCkthcm9sL00KS2Fycm9vL00KS2FyeW4vTQpLYXNhaS9NCkthc2V5L00KS2FzaG1pci9TTQpLYXNwYXJvdi9NCkthdGUvTQpLYXRlbHluL00KS2F0aGFyaW5lL00KS2F0aGVyaW5lL00KS2F0aGVyeW4vTQpLYXRoaWF3YXIvTQpLYXRoaWUvTQpLYXRobGVlbi9NCkthdGhtYW5kdS9NCkthdGhyaW5lL00KS2F0aHJ5bi9NCkthdGh5L00KS2F0aWUvTQpLYXRpbmEvTQpLYXRtYWkvTQpLYXRvd2ljZS9NCkthdHJpbmEvTQpLYXR5L00KS2F1YWkvTQpLYXVmbWFuL00KS2F1bmFzL00KS2F1bmRhL00KS2F3YWJhdGEvTQpLYXdhc2FraS9NCktheS9NCktheWUvTQpLYXlsYS9NCkthemFraC9NCkthemFraHMKS2F6YWtoc3Rhbi9NCkthemFuL00KS2F6YW50emFraXMvTQpLYi9NCktlYXRvbi9NCktlYXRzL00KS2Vjay9NCktlZW5hbi9NCktlZXdhdGluL00KS2VpbGxvci9NCktlaXNoYS9NCktlaXRoL00KS2VsbGVyL00KS2VsbGV5L00KS2VsbGkvTQpLZWxsaWUvTQpLZWxsb2dnL00KS2VsbHkvTQpLZWxzZXkvTQpLZWx2aW4vTQpLZW1lcm92by9NCktlbXAvTQpLZW1waXMvTQpLZW4vTQpLZW5kYWxsL00KS2VuZHJhL00KS2VuZHJpY2svTQpLZW5tb3JlL00KS2VubmFuL00KS2VubmVkeS9NCktlbm5ldGgvTQpLZW5uaXRoL00KS2VubnkvTQpLZW50L00KS2VudG9uL00KS2VudHVja2lhbi9NUwpLZW50dWNreS9NCktlbnlhL00KS2VueWFuL1NNCktlbnlhdHRhL00KS2VueW9uL00KS2VvZ2gvTQpLZW9rdWsvTQpLZXBsZXIvTQpLZXJlbnNreS9NCktlcmkvTQpLZXJtaXQvTQpLZXJuL00KS2Vyb3VhYy9NCktlcnIvTQpLZXJyaS9NCktlcnJ5L00KS2V0dGVyaW5nL00KS2V2ZW4vTQpLZXZpbi9NCktldmxhci9NCktldm9ya2lhbi9NCktld3BpZS9NCktleS9NCktleW5lcy9NCktleW5lc2lhbi9NCktoYWJhcm92c2svTQpLaGFjaGF0dXJpYW4vTQpLaGFsaWQvTQpLaGFuL00KS2hhcmtvdi9NCktoYXJ0b3VtL00KS2hheXlhbS9NCktoYXphci9NCktobWVyL00KS2hvaWtob2kvTQpLaG9pc2FuL00KS2hvbWVpbmkvTQpLaG9yYW5hL00KS2hydXNoY2hldi9NCktodWZ1L00KS2h1bG5hL00KS2h3YXJpem1pL00KS2h5YmVyL00KS2lja2Fwb28vTQpLaWRkL00KS2llbC9NCktpZXJrZWdhYXJkL00KS2lldGgvTQpLaWV2L00KS2lnYWxpL00KS2lrdXl1L00KS2lsYXVlYS9NCktpbGltYW5qYXJvL00KS2lscm95L00KS2ltL00KS2ltYmVybGV5L00KS2ltYmVybHkvTQpLaW5nL00KS2luZ3N0b24vTQpLaW5nc3Rvd24vTQpLaW5rbydzCktpbm5leS9NCktpbnNleS9NCktpbnNoYXNhL00KS2lvd2EvTVMKS2lwL00KS2lwbGluZy9NCktpcmJ5L00KS2lyY2hob2ZmL00KS2lyY2huZXIvTQpLaXJnaGlzdGFuL00KS2lyZ2hpei9NCktpcmdoaXppYS9NCktpcmliYXRpL00KS2lyaW55YWdhL00KS2lyay9NCktpcmtsYW5kL00KS2lya3BhdHJpY2svTQpLaXJvdi9NCktpcnN0ZW4vTQpLaXNhbmdhbmkvTQpLaXNoaW5ldi9NCktpc2xldi9NCktpc3Npbmdlci9NCktpdC9NCktpdGFreXVzaHUvTQpLaXRjaGVuZXIvTQpLaXR0eS9NCktpd2FuaXMvTQpLbGFuL00KS2xhbnNtYW4vTQpLbGF1cy9NCktsZWUvTQpLbGVlbmV4L01TCktsZWluL00KS2xpbXQvTQpLbGluZS9NCktsaW5nb24vTQpLbG9uZGlrZS9NUwpLbWFydC9NCktuYXBwL00KS25lc3NldC9NCktuZ3dhcnJleWUvTQpLbmlja2VyYm9ja2VyL00KS25pZXZlbC9NCktuaWdodC9NCktub3BmL00KS25vc3Nvcy9NCktub3dsZXMvTQpLbm94L00KS25veHZpbGxlL00KS251ZHNlbi9NCktudXRoL00KS251dGhzCktvYmUvTQpLb2NoL00KS29jaGFiL00KS29kYWNocm9tZS9NCktvZGFrL00KS29kYWx5L00KS29kaWFrL00KS29lc3RsZXIvTQpLb2hpbm9vci9NCktvaGwvTQpLb2l6dW1pL00KS29qYWsvTQpLb2x5bWEvTQpLb21tdW5pem1hL00KS29uZy9NCktvbmdvL00KS29ucmFkL00KS29vbnR6L00KS29wcGVsL00KS29yYW4vTVMKS29yYW5pYwpLb3JlYS9NCktvcmVhbi9TTQpLb3JuYmVyZy9NCktvcnkvTQpLb3J6eWJza2kvTQpLb3NjaXVza28vTQpLb3NzdXRoL00KS29zeWdpbi9NCktvdWZheC9NCktvd2xvb24vTQpLci9NCktyYWZ0L00KS3Jha2F0b2EvTQpLcmFrb3cvTQpLcmFtZXIvTQpLcmFzbm9kYXIvTQpLcmFzbm95YXJzay9NCktyZWJzL00KS3JlbWxpbi9NCktyZW1saW5vbG9naXN0CktyZW1saW5vbG9neQpLcmVzZ2UvTQpLcmluZ2xlL00KS3Jpcy9NCktyaXNobmEvTQpLcmlzaG5hbXVydGkvTQpLcmlzdGEvTQpLcmlzdGVuL00KS3Jpc3RpL00KS3Jpc3RpZS9NCktyaXN0aW4vTQpLcmlzdGluYS9NCktyaXN0aW5lL00KS3Jpc3RvcGhlci9NCktyaXN0eS9NCktyb2MvTQpLcm9nZXIvTQpLcm9uZWNrZXIvTQpLcm9wb3RraW4vTQpLcnVnZXIvTQpLcnVnZXJyYW5kL00KS3J1cHAvTQpLcnlzdGFsL00KS3NoYXRyaXlhL00KS3VibGFpL00KS3Vicmljay9NCkt1aG4vTQpLdWlieXNoZXYvTQpLdWx0aHVtbS9NCkt1bm1pbmcvTQpLdW9taW50YW5nL00KS3VyZC9NCkt1cmRpc2gvTQpLdXJkaXN0YW4vTQpLdXJvc2F3YS9NCkt1cnQvTQpLdXJ0aXMvTQpLdXNjaC9NCkt1dHV6b3YvTQpLdXdhaXQvTQpLdXdhaXRpL1NNCkt1em5ldHMvTQpLdXpuZXRzay9NCkt3YWtpdXRsL00KS3dhbi9NCkt3YW5nanUvTQpLd2FuemFhL01TCkt5L01ICkt5bGUvTQpLeW90by9NCkt5cmd5enN0YW4vTQpLeXVzaHUvTQpMJ0Ftb3VyL00KTCdFbmZhbnQKTCdPcmVhbC9NCkwnT3V2ZXJ0dXJlL00KTC9NTgpMQQpMQU4vTQpMQkovTQpMQwpMQ0QvTQpMQ00KTERDCkxFRC9NCkxHL00KTEdCVApMSUZPCkxMCkxMQi9NCkxMRC9NCkxORwpMT0dPCkxQL00KTFBHCkxQTi9TTQpMU0FUCkxTRC9NCkxWTgpMYS9TTQpMYWIKTGFiYW4vTQpMYWJyYWRvci9TTQpMYWJyYWRvcmVhbgpMYWNleS9NCkxhY2hlc2lzL00KTGFjeS9NCkxhZG9nYS9NCkxhZG9ubmEvTQpMYWR5L00KTGFkeXNoaXAvTVMKTGFmYXlldHRlL00KTGFmaXR0ZS9NCkxhZ29zL00KTGFncmFuZ2UvTQpMYWdyYW5naWFuL00KTGFob3JlL00KTGFpdXMvTQpMYWpvcy9NCkxha2Vpc2hhL00KTGFrZXdvb2QKTGFraXNoYS9NCkxha290YS9NCkxha3NobWkvTQpMYW1haXNtL1NNCkxhbWFyL00KTGFtYXJjay9NCkxhbWF6ZS9NCkxhbWIvTQpMYW1iZXJ0L00KTGFtYm9yZ2hpbmkvTQpMYW1icnVzY28vTQpMYW1lbnRhdGlvbnMKTGFtb250L00KTGFuYS9NCkxhbmFpL00KTGFuY2FzaGlyZS9NCkxhbmNhc3Rlci9NCkxhbmNlL00KTGFuY2Vsb3QvTQpMYW5kL00KTGFuZG9uL00KTGFuZHJ5L00KTGFuZHNhdC9NCkxhbmRzdGVpbmVyL00KTGFuZS9NCkxhbmcvTQpMYW5nZXJoYW5zL00KTGFuZ2xhbmQvTQpMYW5nbGV5L00KTGFuZ211aXIvTQpMYW5rYS9NCkxhbmthbi9NCkxhbm55L00KTGFuc2luZy9NCkxhbnpob3UvTQpMYW8vU00KTGFvY29vbi9NCkxhb3MvTQpMYW90aWFuL1NNCkxhcGxhY2UvTQpMYXBsYW5kL01SCkxhcHAvU00KTGFyYS9NCkxhcmFtaWUvTQpMYXJkbmVyL00KTGFyZWRvL00KTGFyb3Vzc2UvTQpMYXJyeS9NCkxhcnMvTU4KTGFyc2VuL00KTGFyc29uL00KTGFzY2F1eC9NCkxhc3NhL00KTGFzc2VuL00KTGFzc2llL00KTGF0L00KTGF0YXNoYS9NCkxhdGVyYW4vTQpMYXRoYW0vTQpMYXRpbi9NUlMKTGF0aW5hCkxhdGluby9TTQpMYXRpc2hhL00KTGF0b255YS9NCkxhdG95YS9NCkxhdHJvYmUvTQpMYXR2aWEvTQpMYXR2aWFuL01TCkxhdWQvTVIKTGF1ZGVyL00KTGF1ZS9NCkxhdW5kcm9tYXQvTQpMYXVyYS9NCkxhdXJhc2lhL00KTGF1cmVsL00KTGF1cmVuL00KTGF1cmVuY2UvTQpMYXVyZW50L00KTGF1cmkvTQpMYXVyaWUvTQpMYXZhbC9NCkxhdmVybi9NCkxhdmVybmUvTQpMYXZvaXNpZXIvTQpMYXZvbm5lL00KTGF3YW5kYS9NCkxhd3JlbmNlL00KTGF3c29uL00KTGF5YW1vbi9NCkxheWxhL00KTGF6YXJvL00KTGF6YXJ1cy9NCkxlL1NNCkxlYS9NCkxlYWNoL00KTGVhZGJlbGx5L00KTGVhaC9NCkxlYWtleS9NCkxlYW4vTQpMZWFuZGVyL00KTGVhbm4vTQpMZWFubmEvTQpMZWFubmUvTQpMZWFyL00KTGVhcmpldC9NCkxlYXJ5L00KTGVhdmVud29ydGgvTQpMZWJhbmVzZS9NCkxlYmFub24vTQpMZWJlc2d1ZS9NCkxlYmxhbmMvTQpMZWRhL00KTGVkZXJiZXJnL00KTGVlL00KTGVlZHMvTQpMZWV1d2VuaG9lay9NCkxlZXdhcmQvTQpMZWZ0CkxlZ2VuZHJlL00KTGVnZXIvTQpMZWdob3JuL00KTGVnby9NCkxlZ3JlZS9NCkxlaG1hbi9NCkxlaWJuaXovTQpMZWljZXN0ZXIvU00KTGVpZGVuL00KTGVpZi9NCkxlaWdoL00KTGVpbGEvTQpMZWlwemlnL00KTGVsYS9NCkxlbGFuZC9NCkxlbGlhL00KTGVtYWl0cmUvTQpMZW11ZWwvTQpMZW11cmlhL00KTGVuL00KTGVuYS9NCkxlbmFyZC9NCkxlbmluL00KTGVuaW5ncmFkL00KTGVuaW5pc20vTQpMZW5pbmlzdC9NCkxlbm5vbi9NCkxlbm55L00KTGVuby9NCkxlbm9pci9NCkxlbm9yYS9NCkxlbm9yZS9NCkxlbnQvU01OCkxlbnRlbi9NCkxlby9TTQpMZW9sYS9NCkxlb24vTQpMZW9uYS9NCkxlb25hcmQvTQpMZW9uYXJkby9NCkxlb25jYXZhbGxvL00KTGVvbmVsL00KTGVvbmlkL00KTGVvbmlkYXMvTQpMZW9ub3IvTQpMZW9wb2xkL00KTGVvcG9sZG8vTQpMZXBpZHVzL00KTGVwa2UvTQpMZXB1cy9NCkxlcm5lci9NCkxlcm95L00KTGVzL00KTGVzYS9NCkxlc2xleS9NCkxlc2xpZS9NCkxlc290aG8vTQpMZXNzZXBzL00KTGVzc2llL00KTGVzdGVyL00KTGVzdHJhZGUvTQpMZXRhL00KTGV0aGEvTQpMZXRoZS9NCkxldGljaWEvTQpMZXRpdGlhL00KTGV0dGVybWFuL00KTGV2YW50L00KTGV2ZXNxdWUvTQpMZXZpL1NNCkxldmlhdGhhbi9NCkxldmluZS9NCkxldml0aWN1cy9NCkxldml0dC9NCkxldnkvTQpMZXcvTQpMZXdpbnNreS9NCkxld2lzL00KTGV4aW5ndG9uL00KTGV4dXMvTQpMaGFzYS9NUwpMaG90c2UvTQpMaS9NWQpMaWJieS9NCkxpYmVyYWNlL00KTGliZXJhbApMaWJlcmlhL00KTGliZXJpYW4vU00KTGlicmEvTVMKTGlicmVPZmZpY2UvTQpMaWJyZXZpbGxlL00KTGlicml1bS9NCkxpYnlhL00KTGlieWFuL1NNCkxpY2h0ZW5zdGVpbi9NCkxpZGlhL00KTGllL00KTGllYmVybWFuL00KTGllYmZyYXVtaWxjaC9NCkxpZWNodGVuc3RlaW4vWk1SCkxpZWNodGVuc3RlaW5lci9NCkxpZWdlL00KTGlldXQKTGlsYS9NCkxpbGlhL00KTGlsaWFuL00KTGlsaWFuYS9NCkxpbGl0aC9NCkxpbGl1b2thbGFuaS9NCkxpbGxlL00KTGlsbGlhbi9NCkxpbGxpZS9NCkxpbGxpcHV0L00KTGlsbGlwdXRpYW4vTVMKTGlsbHkvTQpMaWxvbmd3ZS9NCkxpbHkvTQpMaW1hL00KTGltYmF1Z2gvTQpMaW1ibwpMaW1idXJnZXIvTQpMaW1vZ2VzL00KTGltb3VzaW4vTQpMaW1wb3BvL00KTGluL00KTGluYS9NCkxpbmNvbG4vTVMKTGluZC9NCkxpbmRhL00KTGluZGJlcmdoL00KTGluZHNheS9NCkxpbmRzZXkvTQpMaW5keS9NCkxpbm5hZXVzL00KTGlub3R5cGUvTQpMaW50b24vTQpMaW51cy9NCkxpbnV4L01TCkxpbndvb2QvTQpMaW9uZWwvTQpMaXBpenphbmVyL00KTGlwcGkvTQpMaXBwbWFubi9NCkxpcHNjb21iL00KTGlwdG9uL00KTGlzYS9NCkxpc2Jvbi9NCkxpc3Nham91cy9NCkxpc3Rlci9NCkxpc3RlcmluZS9NCkxpc3Rvbi9NCkxpc3p0L00KTGl0aHVhbmlhL00KTGl0aHVhbmlhbi9NUwpMaXR0bGUvTQpMaXR0b24vTQpMaXZlcnBvb2wvTQpMaXZlcnB1ZGxpYW4vU00KTGl2aWEvTQpMaXZpbmdzdG9uL00KTGl2aW5nc3RvbmUvTQpMaXZvbmlhL00KTGl2eS9NCkxpei9NCkxpemEvTQpMaXp6aWUvTQpMaXp6eS9NCkxqdWJsamFuYS9NCkxsZXdlbGx5bi9NCkxsb3lkL00KTG4KTG9hZmVyL1NNCkxvYmFjaGV2c2t5L00KTG9jaGludmFyL00KTG9ja2UvTQpMb2NrZWFuL00KTG9ja2hlZWQvTQpMb2Nrd29vZC9NCkxvZGdlL00KTG9kei9NCkxvZXdlL00KTG9ld2kvTQpMb2V3cy9NCkxvZ2FuL00KTG9oZW5ncmluL00KTG9pcmUvTQpMb2lzL00KTG9raS9NCkxvbGEvTQpMb2xpdGEvTQpMb2xsYXJkL00KTG9sbG9icmlnaWRhL00KTG9tYmFyZC9NCkxvbWJhcmRpL00KTG9tYmFyZHkvTQpMb21lL00KTG9uL00KTG9uZG9uL01SWgpMb25kb25lci9NCkxvbmcvTQpMb25nZmVsbG93L00KTG9uZ3N0cmVldC9NCkxvbmd1ZXVpbApMb25uaWUvTQpMb3Blei9NCkxvcmEvTQpMb3JhaW5lL00KTG9yZC9TTQpMb3Jkc2hpcC9TTQpMb3JlbGVpL00KTG9yZW4vTQpMb3JlbmEvTQpMb3JlbmUvTQpMb3JlbnR6L00KTG9yZW56L00KTG9yZW56by9NCkxvcmV0dGEvTQpMb3JpL00KTG9yaWUvTQpMb3JuYS9NCkxvcnJhaW5lL00KTG9ycmUvTQpMb3JyaWUvTQpMb3MKTG90L00KTG90aGFyaW8vU00KTG90dC9NCkxvdHRpZS9NCkxvdS9NCkxvdWVsbGEvTQpMb3VpZS9NCkxvdWlzL00KTG91aXNhL00KTG91aXNlL00KTG91aXNpYW5hL00KTG91aXNpYW5hbi9NUwpMb3Vpc2lhbmlhbi9NUwpMb3Vpc3ZpbGxlL00KTG91cmRlcy9NCkxvdXZyZS9NCkxvdmUvTQpMb3ZlY3JhZnQvTQpMb3ZlbGFjZS9NCkxvd2UvTQpMb3dlbGwvTQpMb3dlbmJyYXUvTQpMb3dlcnkvTQpMb3dsYW5kcwpMb3lhbmcvTQpMb3lkL00KTG95b2xhL00KTHIKTHQKTHRkCkx1L00KTHVhbmRhL00KTHVhbm4vTQpMdWJhdml0Y2hlci9NCkx1YmJvY2svTQpMdWJ1bWJhc2hpL00KTHVjYXMvTQpMdWNlL00KTHVjaWEvTQpMdWNpYW4vTQpMdWNpYW5vL00KTHVjaWVuL00KTHVjaWZlci9NCkx1Y2lsZS9NCkx1Y2lsbGUvTQpMdWNpbmRhL00KTHVjaW8vTQpMdWNpdGUvU00KTHVjaXVzL00KTHVja25vdy9NCkx1Y3JldGlhL00KTHVjcmV0aXVzL00KTHVjeS9NCkx1ZGRpdGUvTVMKTHVkaGlhbmEvTQpMdWR3aWcvTQpMdWVsbGEvTQpMdWZ0aGFuc2EvTQpMdWZ0d2FmZmUvTQpMdWdlci9NCkx1Z29zaS9NCkx1aWdpL00KTHVpcy9NCkx1aXNhL00KTHVrZS9NCkx1bGEvTQpMdWxseS9NCkx1bHUvTQpMdW1pZXJlL00KTHVuYS9NCkx1cGUvTQpMdXBlcmNhbGlhL00KTHVwdXMvTQpMdXJpYS9NCkx1c2FrYS9NCkx1c2l0YW5pYS9NCkx1dGhlci9NCkx1dGhlcmFuL1NNCkx1dGhlcmFuaXNtL01TCkx1dnMvTQpMdXhlbWJvdXJnL1pNUgpMdXhlbWJvdXJnZXIvTQpMdXhlbWJvdXJnaWFuCkx1ei9NCkx1em9uL00KTHZvdi9NCkx5WC9NCkx5YWxscHVyCkx5Y3JhL00KTHljdXJndXMvTQpMeWRpYS9NCkx5ZGlhbi9TTQpMeWVsbC9NCkx5bGUvTQpMeWx5L00KTHltYW4vTQpMeW1lL00KTHluY2gvTQpMeW5kYS9NCkx5bmRvbi9NCkx5bmV0dGUvTQpMeW5uL00KTHlubmUvTQpMeW5uZXR0ZS9NCkx5b24vU00KTHlvbnMvTQpMeXJhL00KTHlzZW5rby9NCkx5c2lzdHJhdGEvTQpMeXNvbC9NCk0vU01HQgpNQS9NCk1BU0gKTUIvTQpNQkEvTQpNQwpNQ0kvTQpNRC9NCk1EVApNRQpNRUdPL1MKTUZBL00KTUdNL00KTUh6Ck1JL00KTUlBCk1JREkvTQpNSVBTCk1JUlYKTUlUL00KTU0KTU4KTU8KTU9PQwpNUC9NCk1QRUcKTVJJL00KTVMvTQpNU0cvTQpNU1QvTQpNU1cKTVQvTQpNVFYvTQpNVlAvTQpNVwpNYWFsb3gvTQpNYWJlbC9NCk1hYmxlL00KTWFjL00KTWFjQXJ0aHVyL00KTWFjQnJpZGUvTQpNYWNEb25hbGQvTQpNYWNMZWlzaC9NCk1hY2FvL00KTWFjYXVsYXkvTQpNYWNiZXRoL00KTWFjY2FiZWVzCk1hY2NhYmV1cy9NCk1hY2UvTQpNYWNlZG9uL00KTWFjZWRvbmlhL00KTWFjZWRvbmlhbi9TTQpNYWNoL00KTWFjaGlhdmVsbGkvTQpNYWNoaWF2ZWxsaWFuL00KTWFjaWFzL00KTWFjaW50b3NoL00KTWFjay9NCk1hY2tlbnppZS9NCk1hY2tpbmFjL00KTWFja2luYXcvTQpNYWNtaWxsYW4vTQpNYWNvbi9NCk1hY3VtYmEvTQpNYWN5L00KTWFkYWdhc2Nhbi9TTQpNYWRhZ2FzY2FyL00KTWFkYW0KTWFkZGVuL00KTWFkZG94L00KTWFkZWlyYS9TTQpNYWRlbGVpbmUvTQpNYWRlbGluZS9NCk1hZGVseW4vTQpNYWRnZS9NCk1hZGlzb24vTQpNYWRvbm5hL1NNCk1hZHJhcy9NCk1hZHJpZC9NCk1hZHVyYWkvTQpNYWUvTQpNYWV0ZXJsaW5jay9NCk1hZmlhL01TCk1hZmlvc28vTQpNYWdkYWxlbmEvTQpNYWdkYWxlbmUvTQpNYWdlbGxhbi9NCk1hZ2VsbGFuaWMvTQpNYWdnaWUvTQpNYWdocmViL00KTWFnaQpNYWdpbm90L00KTWFnbml0b2dvcnNrL00KTWFnb2cvTQpNYWdvby9NCk1hZ3JpdHRlL00KTWFnc2F5c2F5L00KTWFndXMKTWFneWFyL1NNCk1haGFiaGFyYXRhL00KTWFoYXJhc2h0cmEvTQpNYWhhdmlyYS9NCk1haGF5YW5hL00KTWFoYXlhbmlzdC9NCk1haGRpL00KTWFoZm91ei9NCk1haGljYW4vU00KTWFobGVyL00KTWFpL00KTWFpZGVuZm9ybS9NCk1haWdyZXQvTQpNYWlsZXIvTQpNYWlsbG9sL00KTWFpbWFuL00KTWFpbW9uaWRlcy9NCk1haW5lL01aUgpNYWluZXIvTQpNYWlzaWUvTQpNYWl0cmV5YS9NCk1hagpNYWplc3R5Ck1ham9yL00KTWFqb3JjYS9NCk1hanVyby9NCk1ha2FyaW9zL00KTWFrZXIvTQpNYWxhYmFyL00KTWFsYWJvL00KTWFsYWNjYS9NCk1hbGFjaGkvTQpNYWxhZ2FzeS9NCk1hbGFtdWQvTQpNYWxhcHJvcC9NCk1hbGF3aS9NCk1hbGF3aWFuL1NNCk1hbGF5L01TCk1hbGF5YS9NCk1hbGF5YWxhbS9NCk1hbGF5YW4vTVMKTWFsYXlzaWEvTQpNYWxheXNpYW4vTVMKTWFsY29sbS9NCk1hbGRpdmUvTVMKTWFsZGl2ZXMvTQpNYWxkaXZpYW4vTVMKTWFsZG9uYWRvL00KTWFsZS9NCk1hbGkvTQpNYWxpYW4vU00KTWFsaWJ1L00KTWFsaW5kYS9NCk1hbGlub3dza2kvTQpNYWxsYXJtZS9NCk1hbGxvbWFycy9NCk1hbGxvcnkvTQpNYWxvbmUvTQpNYWxvcnkvTQpNYWxwbGFxdWV0L00KTWFscmF1eC9NCk1hbHRhL00KTWFsdGVzZS9NCk1hbHRodXMvTQpNYWx0aHVzaWFuL1NNCk1hbWVsdWtlL00KTWFtZXQvTQpNYW1pZS9NCk1hbW9yZS9NCk1hbi9NCk1hbmFndWEvTQpNYW5hbWEvTQpNYW5hc3NlaC9NCk1hbmNoZXN0ZXIvTQpNYW5jaHUvU00KTWFuY2h1cmlhL00KTWFuY2h1cmlhbi9NCk1hbmNpbmkvTQpNYW5jdW5pYW4vTVMKTWFuZGFsYXkvTQpNYW5kYXJpbi9NCk1hbmRlbGEvTQpNYW5kZWxicm90L00KTWFuZGluZ28vTQpNYW5kcmVsbC9NCk1hbmR5L00KTWFuZXQvTQpNYW5mcmVkL00KTWFuaGF0dGFuL1NNCk1hbmkvTQpNYW5pY2hlYW4vTQpNYW5pbGEvU00KTWFuaXRvYmEvTQpNYW5pdG91bGluL00KTWFubGV5L00KTWFubi9HTQpNYW5uaGVpbS9NCk1hbm5pbmcvTQpNYW5zZmllbGQvTQpNYW5zb24vTQpNYW50ZWduYS9NCk1hbnRsZS9NCk1hbnVlbC9NCk1hbnVlbGEvTQpNYW54L00KTWFvL00KTWFvaXNtL1NNCk1hb2lzdC9TTQpNYW9yaS9NUwpNYXBwbGV0aG9ycGUvTQpNYXB1dG8vTQpNYXIvU00KTWFyYS9NCk1hcmFjYWliby9NCk1hcmF0L00KTWFyYXRoYS9NCk1hcmF0aGkvTQpNYXJhdGhvbi9NCk1hcmMvTQpNYXJjZWF1L00KTWFyY2VsL00KTWFyY2VsaW5vL00KTWFyY2VsbGEvTQpNYXJjZWxvL00KTWFyY2gvTVMKTWFyY2kvTQpNYXJjaWEvTQpNYXJjaWFuby9NCk1hcmNpZS9NCk1hcmNvL01TCk1hcmNvbmkvTQpNYXJjb3MvTQpNYXJjdXMvTQpNYXJjdXNlCk1hcmN5L00KTWFyZHVrL00KTWFyZ2FyZXQvTQpNYXJnYXJpdGEvTQpNYXJnYXJpdG8vTQpNYXJnZS9NCk1hcmdlcnkvTQpNYXJnaWUvTQpNYXJnby9NCk1hcmdvdApNYXJncmV0L00KTWFyZ3JldGhlL00KTWFyZ3Vlcml0ZS9NCk1hcmkvU00KTWFyaWEvTQpNYXJpYW4vTQpNYXJpYW5hL1NNCk1hcmlhbmFzL00KTWFyaWFubmUvTQpNYXJpYW5vL00KTWFyaWJlbC9NCk1hcmljZWxhL00KTWFyaWUvTQpNYXJpZXR0YS9NCk1hcmlseW4vTQpNYXJpbi9NCk1hcmluYS9NCk1hcmluZS9TTQpNYXJpby9NCk1hcmlvbi9NCk1hcmlzL00KTWFyaXNhL00KTWFyaXNvbC9NCk1hcmlzc2EvTQpNYXJpdGFpbi9NCk1hcml0emEvTQpNYXJpdXBvbApNYXJpdXMvTQpNYXJqb3JpZS9NCk1hcmpvcnkvTQpNYXJrL1NNCk1hcmthYi9NCk1hcmtoYW0vTQpNYXJrb3YvTQpNYXJrcy9NCk1hcmxhL00KTWFybGJvcm8vTQpNYXJsYm9yb3VnaC9NCk1hcmxlbmUvTQpNYXJsZXkvTQpNYXJsaW4vTQpNYXJsb24vTQpNYXJsb3dlL00KTWFybWFyYS9NCk1hcm5lL00KTWFyb25pdGUvTQpNYXJwbGUvTQpNYXJxdWVzYXMvTQpNYXJxdWV0dGUvTQpNYXJxdWV6L00KTWFycXVpcy9NCk1hcnF1aXRhL00KTWFycmFrZXNoL00KTWFycmlvdHQvTQpNYXJzL01TCk1hcnNhbGEvTQpNYXJzZWlsbGFpc2UvTVMKTWFyc2VpbGxlcy9NCk1hcnNoL00KTWFyc2hhL00KTWFyc2hhbGwvTQpNYXJ0YS9NCk1hcnRlbC9NCk1hcnRoYS9NCk1hcnRpYWwvTQpNYXJ0aWFuL1NNCk1hcnRpbi9NCk1hcnRpbmEvTQpNYXJ0aW5lei9NCk1hcnRpbmlxdWUvTQpNYXJ0eS9NCk1hcnZhL00KTWFydmVsbC9NCk1hcnZpbi9NCk1hcngvTQpNYXJ4aWFuCk1hcnhpc20vU00KTWFyeGlzdC9TTQpNYXJ5L00KTWFyeWFubi9NCk1hcnlhbm5lL00KTWFyeWVsbGVuL00KTWFyeWxhbmQvTVIKTWFyeWxhbmRlci9NCk1hcnlsb3UvTQpNYXNhZGEvTQpNYXNhaS9NCk1hc2FyeWsvTQpNYXNjYWduaS9NCk1hc2VmaWVsZC9NCk1hc2VyYXRpL00KTWFzZXJ1L00KTWFzaGhhZC9NCk1hc29uL01TCk1hc29uaWMvTQpNYXNvbml0ZS9NCk1hc3MvTVMKTWFzc2FjaHVzZXR0cy9NCk1hc3Nhc29pdC9NCk1hc3NlbmV0L00KTWFzc2V5L00KTWFzdGVyL1MKTWFzdGVyQ2FyZC9NCk1hc3RlcnMvTQpNYXRoZXIvTQpNYXRoZXcvU00KTWF0aGV3cy9NCk1hdGhld3Nvbi9NCk1hdGhpYXMvTQpNYXRoaXMvTQpNYXRpbGRhL00KTWF0aXNzZS9NCk1hdHQvTQpNYXR0ZWwvTQpNYXR0ZXJob3JuL00KTWF0dGhldy9TTQpNYXR0aGV3cy9NCk1hdHRoaWFzL00KTWF0dGllL00KTWF1ZC9NCk1hdWRlL00KTWF1Z2hhbS9NCk1hdWkvTQpNYXVwYXNzYW50L00KTWF1cmEvTQpNYXVyZWVuL00KTWF1cmlhYy9NCk1hdXJpY2UvTQpNYXVyaWNpby9NCk1hdXJpbmUvTQpNYXVyaXRhbmlhL00KTWF1cml0YW5pYW4vU00KTWF1cml0aWFuL1NNCk1hdXJpdGl1cy9NCk1hdXJvL00KTWF1cm9pcy9NCk1hdXJ5YW4vTQpNYXVzZXIvTQpNYXZpcy9NCk1heC9NCk1heGltaWxpYW4vTQpNYXhpbmUvTQpNYXh3ZWxsL00KTWF5L1NNUgpNYXlhL1NNCk1heWFuL01TCk1heWVyL00KTWF5ZmFpci9NCk1heWZsb3dlci9NCk1heW5hcmQvTQpNYXlvL00KTWF5cG9sZQpNYXlyYS9NCk1heXMvTQpNYXl0YWcvTQpNYXphbWEvTQpNYXphcmluL00KTWF6YXRsYW4vTQpNYXpkYS9NCk1hem9sYS9NCk1henppbmkvTQpNYi9NCk1iYWJhbmUvTQpNYmluaS9NCk1jQWRhbS9NCk1jQnJpZGUvTQpNY0NhaW4vTQpNY0NhbGwvTQpNY0NhcnRoeS9NCk1jQ2FydGh5aXNtL00KTWNDYXJ0bmV5L00KTWNDYXJ0eS9NCk1jQ2xhaW4vTQpNY0NsZWxsYW4vTQpNY0NsdXJlL00KTWNDb25uZWxsL00KTWNDb3JtaWNrL00KTWNDb3kvTQpNY0NyYXkvTQpNY0N1bGxvdWdoL00KTWNEYW5pZWwvTQpNY0RvbmFsZC9NCk1jRG9ubmVsbC9NCk1jRG93ZWxsL00KTWNFbnJvZS9NCk1jRmFkZGVuL00KTWNGYXJsYW5kL00KTWNHZWUvTQpNY0dvdmVybi9NCk1jR293YW4vTQpNY0d1ZmZleS9NCk1jR3VpcmUvTQpNY0ludG9zaC9NCk1jSW50eXJlL00KTWNLYXkvTQpNY0tlZS9NCk1jS2VuemllL00KTWNLaW5sZXkvTQpNY0tpbm5leS9NCk1jS25pZ2h0L00KTWNMYXVnaGxpbi9NCk1jTGVhbi9NCk1jTGVvZC9NCk1jTHVoYW4vTQpNY01haG9uL00KTWNNaWxsYW4vTQpNY05hbWFyYS9NCk1jTmF1Z2h0b24vTQpNY05laWwvTQpNY1BoZXJzb24vTQpNY1F1ZWVuL00KTWNWZWlnaC9NCk1kL00KTWUKTWVhZC9NCk1lYWRlL00KTWVhZG93cy9NCk1lYWdhbi9NCk1lYW55L00KTWVjY2EvTVMKTWVkYW4vTQpNZWRlYS9NCk1lZGVsbGluL00KTWVkaWEvTQpNZWRpY2FpZC9TTQpNZWRpY2FyZS9TTQpNZWRpY2kvTQpNZWRpbmEvTQpNZWRpdGVycmFuZWFuL01TCk1lZHVzYS9NCk1lZy9NCk1lZ2FuL00KTWVnaGFuL00KTWVpZXIvTQpNZWlnaGVuL00KTWVpamkvTQpNZWlyL00KTWVqaWEvTQpNZWtvbmcvTQpNZWwvTQpNZWxhbmVzaWEvTQpNZWxhbmVzaWFuL00KTWVsYW5pZS9NCk1lbGJhL00KTWVsYm91cm5lL00KTWVsY2hpb3IvTQpNZWxjaGl6ZWRlay9NCk1lbGVuZGV6L00KTWVsaW5kYS9NCk1lbGlzYS9NCk1lbGlzYW5kZS9NCk1lbGlzc2EvTQpNZWxsb24vTQpNZWxvZHkvTQpNZWxwb21lbmUvTQpNZWx0b24vTQpNZWx2YS9NCk1lbHZpbGxlL00KTWVsdmluL00KTWVtbGluZy9NCk1lbXBoaXMvTQpNZW5hbmRlci9NCk1lbmNpdXMvTQpNZW5ja2VuL00KTWVuZGVsL00KTWVuZGVsZWV2L00KTWVuZGVsaWFuL00KTWVuZGVsc3NvaG4vTQpNZW5kZXovTQpNZW5kb2Npbm8vTQpNZW5kb3phL00KTWVuZWxhdXMvTQpNZW5lbGlrL00KTWVuZXMvTQpNZW5nemkKTWVua2FsaW5hbi9NCk1lbmthci9NCk1lbmtlbnQvTQpNZW5uZW4vTQpNZW5ub25pdGUvTVMKTWVub21pbmVlL00KTWVub3R0aS9NCk1lbnNhL00KTWVudGhvbGF0dW0vTQpNZW51aGluL00KTWVuemllcy9NCk1lcGhpc3RvCk1lcGhpc3RvcGhlbGVzL00KTWVyYWsvTQpNZXJjYWRvL00KTWVyY2F0b3IvTQpNZXJjZWRlcy9NCk1lcmNlci9NCk1lcmNpYS9NCk1lcmNrL00KTWVyY3Vyb2Nocm9tZS9NCk1lcmN1cnkvU00KTWVyZWRpdGgvTQpNZXJpbm8vTQpNZXJsZS9NCk1lcmxpbi9NCk1lcmxvdC9NCk1lcm92aW5naWFuL00KTWVycmlhbS9NCk1lcnJpY2svTQpNZXJyaWxsL00KTWVycmltYWNrL00KTWVycml0dC9NCk1lcnRoaW9sYXRlL00KTWVydG9uL00KTWVydmluL00KTWVzYS9NCk1lc2FiaS9NCk1lc21lci9NCk1lc29saXRoaWMvTQpNZXNvcG90YW1pYS9NCk1lc29wb3RhbWlhbgpNZXNvem9pYy9NCk1lc3NlcnNjaG1pZHQvTQpNZXNzaWFlbi9NCk1lc3NpYWgvTQpNZXNzaWFocwpNZXNzaWFuaWMKTWVzc2lldXJzCk1ldGFsbGljYS9NCk1ldGFtdWNpbC9NCk1ldGhvZGlzbS9TTQpNZXRob2Rpc3QvU00KTWV0aHVzZWxhaC9NCk1ldHRlcm5pY2gvTQpNZXVzZS9NCk1leApNZXhpY2FsaS9NCk1leGljYW4vTVMKTWV4aWNvL00KTWV5ZXIvTVMKTWV5ZXJiZWVyL00KTWV5ZXJzL00KTWZ1bWUvTQpNZy9NCk1ncgpNaUcvTQpNaWEvTQpNaWFtaS9NUwpNaWFwbGFjaWR1cy9NCk1pY2FoL00KTWljYXdiZXIvTQpNaWNoL00KTWljaGFlbC9NCk1pY2hhZWxtYXMvTVMKTWljaGVhbC9NCk1pY2hlbC9NCk1pY2hlbGFuZ2Vsby9NCk1pY2hlbGUvTQpNaWNoZWxpbi9NCk1pY2hlbGxlL00KTWljaGVsb2IvTQpNaWNoZWxzb24vTQpNaWNoaWdhbi9NCk1pY2hpZ2FuZGVyL01TCk1pY2hpZ2FuaXRlCk1pY2svTQpNaWNrZXkvTQpNaWNraWUvTQpNaWNreS9NCk1pY21hYy9TTQpNaWNyb25lc2lhL00KTWljcm9uZXNpYW4vTQpNaWNyb3NvZnQvTQpNaWRhcy9NCk1pZGRsZXRvbi9NCk1pZGVhc3QKTWlkZWFzdGVybgpNaWRsYW5kL01TCk1pZHdheS9NCk1pZHdlc3QvTQpNaWR3ZXN0ZXJuL01SCk1pZ3VlbC9NCk1pa2UvTQpNaWtoYWlsL00KTWlrb3lhbi9NCk1pbGFncm9zL00KTWlsYW4vTQpNaWxhbmVzZQpNaWxkcmVkL00KTWlsZXMvTQpNaWxmb3JkL00KTWlsa2VuL00KTWlsbC9TTVIKTWlsbGFyZC9NCk1pbGxheS9NCk1pbGxlci9NCk1pbGxldC9NCk1pbGxpY2VudC9NCk1pbGxpZS9NCk1pbGxpa2FuL00KTWlsbHMvTQpNaWxuZS9NCk1pbG8vTQpNaWxvc2V2aWMvTQpNaWxxdWV0b2FzdC9NCk1pbHRpYWRlcy9NCk1pbHRvbi9NCk1pbHRvbmljL00KTWlsdG93bi9NCk1pbHdhdWtlZS9NCk1pbWkvTQpNaW1vc2EvTQpNaW4vTQpNaW5hbW90by9NCk1pbmRhbmFvL00KTWluZG9yby9NCk1pbmR5L00KTWluZXJ2YS9NCk1pbmcvTQpNaW5ndXMvTQpNaW5uCk1pbm5lYXBvbGlzL00KTWlubmVsbGkvTQpNaW5uZXNvdGEvTQpNaW5uZXNvdGFuL1NNCk1pbm5pZS9NCk1pbm9hbi9NUwpNaW5vbHRhL00KTWlub3MvTQpNaW5vdC9NCk1pbm90YXVyL00KTWluc2svTQpNaW5za3kvTQpNaW50YWthL00KTWludWl0L00KTWludXRlbWFuL00KTWlvY2VuZS9NCk1pci9NCk1pcmEvTQpNaXJhYmVhdS9NCk1pcmFjaC9NCk1pcmFuZGEvTQpNaXJmYWsvTQpNaXJpYW0vTQpNaXJvL00KTWlyemFtL00KTWlza2l0by9NCk1pc3MKTWlzc2lzc2F1Z2EvTQpNaXNzaXNzaXBwaS9NCk1pc3Npc3NpcHBpYW4vU00KTWlzc291cmkvTQpNaXNzb3VyaWFuL01TCk1pc3N5L00KTWlzdGFzc2luaS9NCk1pc3RlcgpNaXN0cmVzcwpNaXN0eS9NCk1pdGNoL00KTWl0Y2hlbC9NCk1pdGNoZWxsL00KTWl0Zm9yZC9NCk1pdGhyYS9NCk1pdGhyaWRhdGVzL00KTWl0c3ViaXNoaS9NCk1pdHRlcnJhbmQvTQpNaXR0eS9NCk1pdHppL00KTWl4dGVjL00KTWl6YXIvTQpNawpNbGxlCk1tZS9TCk1uL00KTW5lbW9zeW5lL00KTW8vTQpNb2JpbC9NCk1vYmlsZS9NCk1vYnV0dS9NCk1vZGVzdG8vTQpNb2RpZ2xpYW5pL00KTW9lL00KTW9ldC9NCk1vZ2FkaXNodS9NCk1vZ3VsL01TCk1vaGFjcy9NCk1vaGFtZWQvTQpNb2hhbW1hZC9NCk1vaGFtbWVkYW4vU00KTW9oYW1tZWRhbmlzbS9TTQpNb2hhdmUvU00KTW9oYXdrL1NNCk1vaGVnYW4KTW9oby9NCk1vaG9yb3ZpY2ljL00KTW9pcmEvTQpNb2lzZXMvTQpNb2lzZXlldi9NCk1vamF2ZS9TTQpNb2xkYXZpYS9NCk1vbGRhdmlhbgpNb2xkb3ZhL00KTW9sZG92YW4KTW9saWVyZS9NCk1vbGluYS9NCk1vbGwvTQpNb2xsaWUvTQpNb2xseS9NCk1vbG5hci9NCk1vbG9jaC9NCk1vbG9rYWkvTQpNb2xvdG92L00KTW9sdWNjYXMvTQpNb21iYXNhL00KTW9uL1NNCk1vbmEvTQpNb25hY2FuCk1vbmFjby9NCk1vbmRhbGUvTQpNb25kYXkvU00KTW9uZHJpYW4vTQpNb25lZ2FzcXVlL1NNCk1vbmVyYS9NCk1vbmV0L00KTW9uZ29sL1NNCk1vbmdvbGlhL00KTW9uZ29saWFuL1NNCk1vbmdvbGljL00KTW9uZ29sb2lkCk1vbmljYS9NCk1vbmlxdWUvTQpNb25rL00KTW9ubW91dGgvTQpNb25vbmdhaGVsYS9NCk1vbnJvZS9NCk1vbnJvdmlhL00KTW9uc2FudG8vTQpNb25zaWV1ci9NCk1vbnNpZ25vci9TTQpNb250L00KTW9udGFndWUvTQpNb250YWlnbmUvTQpNb250YW5hL00KTW9udGFuYW4vU00KTW9udGNhbG0vTQpNb250ZS9NCk1vbnRlbmVncmluL00KTW9udGVuZWdyby9NCk1vbnRlcnJleS9NCk1vbnRlc3F1aWV1L00KTW9udGVzc29yaS9NCk1vbnRldmVyZGkvTQpNb250ZXZpZGVvL00KTW9udGV6dW1hL00KTW9udGdvbGZpZXIvTQpNb250Z29tZXJ5L00KTW9udGljZWxsby9NCk1vbnRveWEvTQpNb250cGVsaWVyL00KTW9udHJhY2hldC9NCk1vbnRyZWFsL00KTW9udHNlcnJhdC9NCk1vbnR5L00KTW9vZHkvTQpNb29nL00KTW9vbi9NCk1vb25leS9NCk1vb3IvU00KTW9vcmUvTQpNb29yaXNoL00KTW9yYWxlcy9NCk1vcmFuL00KTW9yYXZpYS9NCk1vcmF2aWFuL00KTW9yZHJlZC9NCk1vcmUvTQpNb3Jlbm8vTQpNb3JnYW4vU00KTW9yaWFydHkvTQpNb3Jpbi9NCk1vcmlzb24vTQpNb3JpdGEvTQpNb3JsZXkvTQpNb3Jtb24vU00KTW9ybW9uaXNtL1NNCk1vcm8vTQpNb3JvY2Nhbi9TTQpNb3JvY2NvL00KTW9yb25pL00KTW9ycGhldXMvTQpNb3JwaHkvTQpNb3JyaXMvTQpNb3JyaXNvbi9NCk1vcnJvdy9NCk1vcnNlL00KTW9ydC9NCk1vcnRpbWVyL00KTW9ydG9uL00KTW9zYWljL00KTW9zY293L00KTW9zZWxleS9NCk1vc2VsbGUvTQpNb3Nlcy9NCk1vc2xleS9NCk1vc3MvTQpNb3N1bC9NCk1vdG9yb2xhL00KTW90b3duL00KTW90cmluL00KTW90dC9NCk1vdWx0b24vTQpNb3VudC9NCk1vdW50YmF0dGVuL00KTW91bnRpZS9NUwpNb3Vzc29yZ3NreS9NCk1vdXRoZS9NCk1vdXRvbi9NCk1vd2dsaS9NCk1vemFtYmljYW4vU00KTW96YW1iaXF1ZS9NCk1vemFydC9NCk1vemlsbGEvTQpNci9TTQpNcy9TCk1zZ3IKTXQKTXVhd2l5YS9NCk11YmFyYWsvTQpNdWVsbGVyL00KTXVlbnN0ZXIvTVMKTXVnYWJlL00KTXVoYW1tYWQvTQpNdWhhbW1hZGFuL01TCk11aGFtbWFkYW5pc20vU00KTXVpci9NCk11amliL00KTXVsZGVyL00KTXVsbGVuL00KTXVsbGVyL00KTXVsbGlnYW4vTQpNdWxsaWthbi9NCk11bGxpbnMvTQpNdWxyb25leS9NCk11bHRhbi9NCk11bHRpY3MKTXVtYmFpL00KTXVtZm9yZC9NCk11bmNoL00KTXVuY2hoYXVzZW4vTQpNdW5pY2gvTQpNdW5vei9NCk11bnJvL00KTXVuc3Rlci9NCk11cHBldC9NCk11cmFzYWtpL00KTXVyYXQvTQpNdXJjaGlzb24vTQpNdXJjaWEKTXVyZG9jaC9NCk11cmllbC9NCk11cmlsbG8vTQpNdXJpbmUvTQpNdXJtYW5zay9NCk11cnBoeS9NCk11cnJheS9NCk11cnJvdy9NCk11cnJ1bWJpZGdlZS9NCk11c2NhdC9NCk11c2Nvdml0ZS9NCk11c2NvdnkvTQpNdXNlL00KTXVzaGFycmFmL00KTXVzaWFsL00KTXVza29nZWUvTQpNdXNsaW0vTVMKTXVzc29saW5pL00KTXVzc29yZ3NreS9NCk11dHN1aGl0by9NCk11emFrL00KTXlTcGFjZS9NCk15YW5tYXIvTQpNeWNlbmFlL00KTXljZW5hZWFuL00KTXllcnMvTQpNeWxhci9NUwpNeWxlcy9NCk15cmEvTQpNeXJkYWwvTQpNeXJuYS9NCk15cm9uL00KTXlydGxlL00KTXlzb3JlL00KTXlzdC9NCk4nRGphbWVuYQpOL01ECk5BQUNQL00KTkFGVEEvTQpOQVNBL00KTkFTQ0FSL00KTkFTREFRL00KTkFUTy9NCk5CCk5CQS9NCk5CQy9NCk5CUwpOQwpOQ0FBL00KTkNPCk5ECk5FL00KTkVICk5GCk5GQwpORkwvTQpOSApOSEwvTQpOSUgKTklNQlkKTkoKTkxSQgpOTQpOT1JBRC9NCk5PVwpOUApOUFIvTQpOUgpOUkEKTlJDCk5TCk5TQS9NCk5TQwpOU0YKTlNGVwpOVApOVgpOVy9NCk5XVApOWQpOWUMKTllTRQpOWgpOYS9NCk5hYmlzY28vTQpOYWJva292L00KTmFkZXIvTQpOYWRpYS9NCk5hZGluZS9NCk5hZ2FzYWtpL00KTmFnb3lhL00KTmFncHVyL00KTmFneS9NCk5haHVhdGwvTVMKTmFodW0vTQpOYWlwYXVsL00KTmFpci9NCk5haXJvYmkvTQpOYWlzbWl0aC9NCk5hbS9NCk5hbWF0aC9NCk5hbWliaWEvTQpOYW1pYmlhbi9NUwpOYW4vTQpOYW5hay9NCk5hbmNoYW5nL00KTmFuY3kvTQpOYW5ldHRlL00KTmFuamluZy9NCk5hbm5pZS9NCk5hbm9vay9NCk5hbnNlbi9NCk5hbnRlcy9NCk5hbnR1Y2tldC9NCk5hb21pL00KTmFwaHRhbGkvTQpOYXBpZXIvTQpOYXBsZXMvTQpOYXBvbGVvbi9NUwpOYXBvbGVvbmljL00KTmFwc3Rlci9NCk5hcmNpc3N1cy9NCk5hcm1hZGEvTQpOYXJuaWEvTQpOYXJyYWdhbnNldApOYXJyYWdhbnNldHQvTQpOYXNoL00KTmFzaHVhL00KTmFzaHZpbGxlL00KTmFzc2F1L00KTmFzc2VyL00KTmF0L00KTmF0YWxpYS9NCk5hdGFsaWUvTQpOYXRhc2hhL00KTmF0Y2hlei9NCk5hdGUvTU4KTmF0aGFuL1NNCk5hdGhhbmllbC9NCk5hdGhhbnMvTQpOYXRpb24vTQpOYXRpb253aWRlL00KTmF0aXZpdHkvTQpOYXVnYWh5ZGUvTQpOYXVydS9NCk5hdXRpbHVzL00KTmF2YWpvL1NNCk5hdmFqb2VzCk5hdmFycmUvTQpOYXZhcnJvL00KTmF2cmF0aWxvdmEvTQpOYXZ5Ck5hemFyZW5lL00KTmF6YXJldGgvTQpOYXpjYS9NCk5hemkvU00KTmF6aXNtL01TCk5iL00KTmQvTQpOZGphbWVuYS9NCk5lL00KTmVXUwpOZVdTZXMKTmVhbC9NCk5lYW5kZXJ0aGFsL1NNCk5lYXBvbGl0YW4vTQpOZWIKTmVicgpOZWJyYXNrYS9NCk5lYnJhc2thbi9NUwpOZWJ1Y2hhZG5lenphci9NCk5lZC9NCk5lZmVydGl0aS9NCk5lZ2V2L00KTmVncmVzcy9NUwpOZWdyaXR1ZGUKTmVncm8vTVMKTmVncm9lcwpOZWdyb2lkL1NNCk5lZ3Jvcy9NCk5laGVtaWFoL00KTmVocnUvTQpOZWlsL00KTmVsZGEvTQpOZWxsL00KTmVsbGllL00KTmVsbHkvTQpOZWxzZW4vTQpOZWxzb24vTQpOZW1idXRhbC9NCk5lbWVzaXMvTQpOZW9nZW5lL00KTmVvbGl0aGljCk5lcGFsL00KTmVwYWxlc2UvTQpOZXBhbGkvTVMKTmVwdHVuZS9NCk5lcmVpZC9NCk5lcmYvTQpOZXJvL00KTmVydWRhL00KTmVzY2FmZS9NCk5lc3NlbHJvZGUvTQpOZXN0bGUvTQpOZXN0b3IvTQpOZXN0b3JpdXMvTQpOZXRmbGl4L00KTmV0aGVybGFuZGVyL1NNCk5ldGhlcmxhbmRzL00KTmV0c2NhcGUvTQpOZXR0aWUvTQpOZXR6YWh1YWxjb3lvdGwvTQpOZXYvTQpOZXZhL00KTmV2YWRhL00KTmV2YWRhbi9TTQpOZXZhZGlhbgpOZXZpcy9NCk5ldnNreS9NCk5ld2Fyay9NCk5ld2Nhc3RsZS9NCk5ld2ZvdW5kbGFuZC9NUlMKTmV3bWFuL00KTmV3cG9ydC9NCk5ld3N3ZWVrL00KTmV3dG9uL00KTmV3dG9uaWFuL00KTmV4aXMvTQpOZ2FsaWVtYS9NCk5ndXllbi9NCk5pL00KTmlhZ2FyYS9NCk5pYW1leS9NCk5pYmVsdW5nL00KTmljYWVhL00KTmljYXJhZ3VhL00KTmljYXJhZ3Vhbi9TTQpOaWNjb2xvL00KTmljZS9NCk5pY2VuZS9NCk5pY2hpcmVuL00KTmljaG9sYXMvTQpOaWNob2xlL00KTmljaG9scy9NCk5pY2hvbHNvbi9NCk5pY2svTQpOaWNrZWxvZGVvbi9NCk5pY2tsYXVzL00KTmlja29sYXMvTQpOaWNvYmFyL00KTmljb2RlbXVzL00KTmljb2xhL1NNCk5pY29sYXMvTQpOaWNvbGUvTQpOaWNvc2lhL00KTmllYnVoci9NCk5pZWxzZW4vTQpOaWV0enNjaGUvTQpOaWV2ZXMvTQpOaWdlbC9NCk5pZ2VyL00KTmlnZXJpYS9NCk5pZ2VyaWFuL01TCk5pZ2VyaWVuL00KTmlnaHRpbmdhbGUvTQpOaWppbnNreS9NCk5pa2UvTQpOaWtpdGEvTQpOaWtrZWkvTQpOaWtraS9NCk5pa29sYWkvTQpOaWtvbi9NCk5pbGUvTQpOaW1pdHovTQpOaW1yb2QvTQpOaW5hL00KTmluZXZlaC9NCk5pbnRlbmRvL00KTmlvYmUvTQpOaXBwb24vTQpOaXBwb25lc2UvTQpOaXJlbmJlcmcvTQpOaXJ2YW5hL00KTmlzYW4vTQpOaXNlaS9NCk5pc3Nhbi9NCk5pdGEvTQpOaXZlYS9NCk5peG9uL00KTmtydW1haC9NCk5vL1NNCk5vRG96L00KTm9haC9NCk5vYmVsL00KTm9iZWxpc3QvTVMKTm9ibGUvTQpOb2UvTQpOb2VsL1NNCk5vZWxsZS9NCk5vZW1pL00KTm9raWEvTQpOb2xhL00KTm9sYW4vTQpOb21lL00KTm9uYS9NCk5vb3RrYS9NCk5vcmEvTQpOb3JiZXJ0L00KTm9yYmVydG8vTQpOb3JkaWMvTVMKTm9yZWVuL00KTm9yZm9say9NCk5vcmllZ2EvTQpOb3JtYS9NCk5vcm1hbi9NUwpOb3JtYW5kL00KTm9ybWFuZHkvTQpOb3JwbGFudC9NCk5vcnJpcy9NCk5vcnNlL00KTm9yc2VtYW4vTQpOb3JzZW1lbi9NCk5vcnRoL00KTm9ydGhhbXB0b24vTQpOb3J0aGVhc3QvTVMKTm9ydGhlcm5lci9NCk5vcnRocm9wL00KTm9ydGhydXAvTQpOb3J0aHMKTm9ydGh3ZXN0L1NNCk5vcnRvbi9NCk5vcncKTm9yd2F5L00KTm9yd2VnaWFuL1NNCk5vcndpY2gvTQpOb3NmZXJhdHUvTQpOb3N0cmFkYW11cy9NCk5vdHRpbmdoYW0vTQpOb3Vha2Nob3R0L00KTm91bWVhL00KTm92L00KTm92YS9NCk5vdmFydGlzL00KTm92ZW1iZXIvTVMKTm92Z29yb2QvTQpOb3ZvY2Fpbi9NUwpOb3ZvY2FpbmUKTm92b2t1em5ldHNrL00KTm92b3NpYmlyc2svTQpOb3h6ZW1hL00KTm95Y2UvTQpOb3llcy9NCk5wL00KTnViaWEvTQpOdWJpYW4vTQpOdWt1YWxvZmEvTQpOdW1iZXJzL00KTnVuYXZ1dC9NCk51bmV6L00KTnVua2kvTQpOdXJlbWJlcmcvTQpOdXJleWV2L00KTnV0cmFTd2VldC9NCk55UXVpbC9NCk55YXNhL00KTnllcmVyZS9NCk8nQnJpZW4vTQpPJ0Nhc2V5L00KTydDb25uZWxsL00KTydDb25ub3IvTQpPJ0Rvbm5lbGwvTQpPJ0hhcmEvTQpPJ0hpZ2dpbnMvTQpPJ0tlZWZmZS9NCk8nTmVpbC9NCk8nTmVpbGwvTQpPJ1JvdXJrZS9NCk8nVG9vbGUvTQpPL1NNCk9BUy9NCk9CCk9DUgpPRC9TTQpPRQpPRUQKT0gKT0hTQS9NCk9KCk9LL1NNREcKT01CL00KT04KT1BFQy9NCk9SCk9TL00KT1NIQS9NCk9TZXMKT1QKT1RCCk9UQwpPVE9ICk9haHUvTQpPYWtsYW5kL00KT2FrbGV5L00KT2F0ZXMvTQpPYXhhY2EvTQpPYi9NCk9iYWRpYWgvTQpPYmFtYS9NCk9iYW1hY2FyZQpPYmVybGluL00KT2Jlcm9uL00KT2NjYW0vTQpPY2NpZGVudApPY2NpZGVudGFsL01TCk9jZWFuaWEvTQpPY2VhbnNpZGUKT2NlYW51cy9NCk9jaG9hL00KT2N0L00KT2N0YXZpYS9NCk9jdGF2aWFuL00KT2N0YXZpby9NCk9jdG9iZXIvU00KT2RlbGwvTQpPZGVyL00KT2Rlc3NhL00KT2RldHMvTQpPZGluL00KT2Rpcy9NCk9kb20vTQpPZHlzc2V1cy9NCk9keXNzZXkvTQpPZWRpcGFsL00KT2VkaXB1cy9NCk9lcnN0ZWQvTQpPZmVsaWEvTQpPZmZlbmJhY2gvTQpPZmZpY2VNYXgvTQpPZ2JvbW9zaG8vTQpPZ2Rlbi9NCk9naWx2eS9NCk9nbGV0aG9ycGUvTQpPaGlvL00KT2hpb2FuL1NNCk9pc2UvTQpPamlid2EvU00KT2theWFtYQpPa2VlY2hvYmVlL00KT2tlZmVub2tlZS9NCk9raG90c2svTQpPa2luYXdhL00KT2tpbmF3YW4KT2tsYQpPa2xhaG9tYS9NCk9rbGFob21hbi9NCk9rdG9iZXJmZXN0L00KT2xhL00KT2xhZi9NCk9sYWp1d29uL00KT2xhdi9NCk9sZGVuYnVyZy9NCk9sZGZpZWxkL00KT2xkc21vYmlsZS9NCk9sZHV2YWkvTQpPbGVuL00KT2xlbmVrL00KT2xnYS9NCk9saWdvY2VuZS9NCk9saW4vTQpPbGl2ZS9NUgpPbGl2ZXIvTQpPbGl2ZXR0aS9NCk9saXZpYS9NCk9saXZpZXIvTQpPbGxpZS9NCk9sbWVjL00KT2xtc3RlZC9NCk9sc2VuL00KT2xzb24vTQpPbHltcGlhL1NNCk9seW1waWFkL01TCk9seW1waWFuL01TCk9seW1waWMvU00KT2x5bXBpY3MvTQpPbHltcHVzL00KT21haGEvTVMKT21hbi9NCk9tYW5pL01TCk9tYXIvTQpPbWF5eWFkL00KT21kdXJtYW4vTQpPbW5pcG90ZW50Ck9tc2svTQpPbmFzc2lzL00KT25lYWwvTQpPbmVnYS9NCk9uZWdpbi9NCk9uZWlkYS9NUwpPbmlvbi9NCk9uby9NCk9ub25kYWdhL01TCk9uc2FnZXIvTQpPbnQKT250YXJpYW4KT250YXJpby9NCk9vcnQvTQpPcGFsL00KT3BlbC9NCk9wZW5PZmZpY2UvTQpPcGhlbGlhL00KT3BoaXVjaHVzL00KT3BwZW5oZWltZXIvTQpPcHBvc2l0aW9uCk9wcmFoL00KT3JhL00KT3JhY2xlL00KT3Jhbi9NCk9yYW5nZS9NCk9yYW5qZXN0YWQvTQpPcmJpc29uL00KT3Jkb3ZpY2lhbi9NCk9yZS9OCk9yZWcKT3JlZ29uL00KT3JlZ29uaWFuL1NNCk9yZW8vTQpPcmVzdGVzL00KT3JpZW50L00KT3JpZW50YWwvTVMKT3JpZW50YWxpc20KT3Jpbi9NCk9yaW5vY28vTQpPcmlvbi9NCk9yaXlhL00KT3JpemFiYS9NCk9ya25leS9NCk9ybGFuZG8vTQpPcmxlYW5zL00KT3Jsb24vTVMKT3JseS9NCk9ycGhldXMvTQpPcnBoaWMvTQpPcnIvTQpPcnRlZ2EvTQpPcnRob2RveApPcnRpei9NCk9ydmFsL00KT3J2aWxsZS9NCk9yd2VsbC9NCk9yd2VsbGlhbi9NCk9zL00KT3NhZ2UvTVMKT3Nha2EvTQpPc2JlcnQvTQpPc2Jvcm4vTQpPc2Jvcm5lL00KT3NjYXIvTVMKT3NjZW9sYS9NCk9zZ29vZC9NCk9zaGF3YS9NCk9zaGtvc2gvTQpPc2lyaXMvTQpPc2xvL00KT3NtYW4vTQpPc3Ryb2dvdGgvTQpPc3R3YWxkL00KT3N2YWxkby9NCk9zd2FsZC9NCk90aGVsbG8vTQpPdGlzL00KT3R0YXdhL1NNCk90dG8vTQpPdHRvbWFuL00KT3VhZ2Fkb3Vnb3UvTQpPdWlqYS9NUwpPdmlkL00KT3dlbi9TTQpPd2Vucy9NCk94Zm9yZC9TTQpPeG5hcmQvTQpPeG9uaWFuL00KT3h1cy9NCk94eWNvbnRpbi9NCk96L00KT3phcmsvTVMKT3phcmtzL00KT3p5bWFuZGlhcy9NCk96emllL00KUC9NTgpQQS9NClBBQy9NClBBUkMvUwpQQVNDQUwKUEJTL00KUEJYClBDL1NNClBDQgpQQ01DSUEKUENQL00KUEQKUERGClBEUQpQRFQKUEUKUEVUL00KUEZDClBHClBHUApQSU4KUEoncwpQTE8vTQpQTS9TTURHClBNUy9NClBPClBPVy9NClBQClBQUwpQUgpQUkMvTQpQUk8KUFMvTQpQU1QvTQpQVApQVEEvTQpQVE8KUFZDL00KUFcKUFgKUGEvTQpQYWFyL00KUGFibG8vTQpQYWJsdW0vTQpQYWJzdC9NClBhY2UvTQpQYWNoZWNvL00KUGFjaWZpYy9NClBhY2luby9NClBhY2thcmQvTQpQYWRhbmcKUGFkZXJld3NraS9NClBhZGlsbGEvTQpQYWdhbmluaS9NClBhZ2UvTQpQYWdsaWEvTQpQYWhsYXZpL00KUGFpZ2UvTQpQYWluZS9NClBhaXV0ZS9TTQpQYWtpc3Rhbi9NClBha2lzdGFuaS9TTQpQYWxlbWJhbmcvTQpQYWxlb2NlbmUvTQpQYWxlb2dlbmUvTQpQYWxlb2xpdGhpYy9NClBhbGVvem9pYy9NClBhbGVybW8vTQpQYWxlc3RpbmUvTQpQYWxlc3Rpbmlhbi9TTQpQYWxlc3RyaW5hL00KUGFsZXkvTQpQYWxpa2lyL00KUGFsaXNhZGVzL00KUGFsbGFkaW8vTQpQYWxtZXIvTQpQYWxtZXJzdG9uL00KUGFsbW9saXZlL00KUGFsbXlyYS9NClBhbG9tYXIvTQpQYW0vTQpQYW1lbGEvTQpQYW1pcnMvTQpQYW1wZXJzL00KUGFuL00KUGFuYW1hL1NNClBhbmFtYW5pYW4vTVMKUGFuYXNvbmljL00KUGFuZG9yYS9NClBhbmdhZWEvTQpQYW5raHVyc3QvTQpQYW5tdW5qb20vTQpQYW5zeS9NClBhbnRhZ3J1ZWwvTQpQYW50YWxvb24vTQpQYW50aGVvbi9NClBhbnphL00KUGFyYWNlbHN1cy9NClBhcmFjbGV0ZS9NClBhcmFkaXNlClBhcmFndWF5L00KUGFyYWd1YXlhbi9NUwpQYXJhbHltcGljL1MKUGFyYW1hcmliby9NClBhcmFtb3VudC9NClBhcmFuYS9NClBhcmNoZWVzaS9NClBhcmV0by9NClBhcmlzL00KUGFyaXNpYW4vTVMKUGFyay9TTVIKUGFya2VyL00KUGFya2luc29uL00KUGFya2luc29uaXNtClBhcmttYW4vTQpQYXJrcy9NClBhcmxpYW1lbnQvTQpQYXJtZW5pZGVzClBhcm1lc2FuL01TClBhcm5hc3N1cy9NUwpQYXJuZWxsL00KUGFyci9NClBhcnJpc2gvTQpQYXJzaWZhbC9NClBhcnNvbnMvTQpQYXJ0aGVub24vTQpQYXJ0aGlhL00KUGFzYWRlbmEvTQpQYXNjYWwvU00KUGFzcXVhbGUvTQpQYXNzaW9uL1NNClBhc3NvdmVyL01TClBhc3Rlcm5hay9NClBhc3RldXIvTQpQYXQvTQpQYXRhZ29uaWEvTQpQYXRhZ29uaWFuL00KUGF0ZS9NClBhdGVsL00KUGF0ZXJzb24vTQpQYXRuYS9NClBhdHJpY2EvTQpQYXRyaWNlL00KUGF0cmljaWEvTQpQYXRyaWNrL00KUGF0c3kvTQpQYXR0ZXJzb24vTQpQYXR0aS9NClBhdHRvbi9NClBhdHR5L00KUGF1bC9HTQpQYXVsYS9NClBhdWxldHRlL00KUGF1bGkvTQpQYXVsaW5lL00KUGF1bGluZy9NClBhdmFyb3R0aS9NClBhdmxvdi9NClBhdmxvdmEvTQpQYXZsb3ZpYW4vTQpQYXduZWUvU00KUGF5UGFsL00KUGF5bmUvTQpQYi9NClBkL00KUGVhYm9keS9NClBlYWNlL00KUGVhbGUvTQpQZWFybC9NClBlYXJsaWUvTQpQZWFyc29uL00KUGVhcnkvTQpQZWNob3JhL00KUGVjay9NClBlY2tpbnBhaC9NClBlY29zL00KUGVkcm8vTQpQZWVsL00KUGVnL00KUGVnYXN1cy9NUwpQZWdneS9NClBlaS9NClBlaXBpbmcvTQpQZWtpbmcvU00KUGVraW5nZXNlL1NNClBlbGUvTQpQZWxlZS9NClBlbG9wb25uZXNlL00KUGVtYnJva2UvTQpQZW4vTQpQZW5hL00KUGVuZGVyZWNraS9NClBlbmVsb3BlL00KUGVubi9NClBlbm5hClBlbm5leS9NClBlbm5pbmd0b24vTQpQZW5uc3lsdmFuaWEvTQpQZW5uc3lsdmFuaWFuL01TClBlbm55L00KUGVubnpvaWwvTQpQZW5zYWNvbGEvTQpQZW50YWdvbi9NClBlbnRhdGV1Y2gvTQpQZW50YXgvTQpQZW50ZWNvc3QvU00KUGVudGVjb3N0YWwvTVMKUGVudGVjb3N0YWxpc20KUGVudGl1bS9TTQpQZW9yaWEvTQpQZXBpbi9NClBlcHNpL00KUGVweXMvTQpQZXF1b3QvTQpQZXJjaGVyb24vTQpQZXJjaXZhbC9NClBlcmN5L00KUGVyZWxtYW4vTQpQZXJlei9NClBlcmljbGVhbi9NClBlcmljbGVzL00KUGVya2lucy9NClBlcmwvU00KUGVybS9NClBlcm1hbGxveS9NClBlcm1pYW4vTQpQZXJub2QvTQpQZXJvbi9NClBlcm90L00KUGVycmllci9NClBlcnJ5L1JNClBlcnNlaWQvTQpQZXJzZXBob25lL00KUGVyc2Vwb2xpcy9NClBlcnNldXMvTQpQZXJzaGluZy9NClBlcnNpYS9NClBlcnNpYW4vU00KUGVydGgvTQpQZXJ1L00KUGVydXZpYW4vTVMKUGVzaGF3YXIvTQpQZXRhaW4vTQpQZXRlL1JNWgpQZXRlci9NClBldGVycy9NTgpQZXRlcnNlbi9NClBldGVyc29uL00KUGV0cmEvTQpQZXRyYXJjaC9NClBldHR5L00KUGV1Z2VvdC9NClBmYwpQZml6ZXIvTQpQaEQvTQpQaGFlZHJhL00KUGhhZXRob24vTQpQaGFuZXJvem9pYy9NClBoYXJhb2gvTQpQaGFyYW9ocwpQaGFyaXNhaWMKUGhhcmlzYWljYWwKUGhhcmlzZWUvTVMKUGhla2RhL00KUGhlbHBzL00KUGhpZGlhcy9NClBoaWwvTVkKUGhpbGFkZWxwaGlhL00KUGhpbGJ5L00KUGhpbGVtb24vTQpQaGlsaXAvTVMKUGhpbGlwcGUvTQpQaGlsaXBwaWFucy9NClBoaWxpcHBpbmUvU00KUGhpbGlwcGluZXMvTQpQaGlsaXBzL00KUGhpbGlzdGluZS9NClBoaWxsaXAvU00KUGhpbGxpcGEvTQpQaGlsbGlwcy9NClBoaWxseS9NClBoaXBwcy9NClBob2Jvcy9NClBob2ViZS9NClBob2VuaWNpYS9NClBob2VuaWNpYW4vU00KUGhvZW5peC9NClBob3Rvc3RhdC9NUwpQaG90b3N0YXR0ZWQKUGhvdG9zdGF0dGluZwpQaHJ5Z2lhL00KUGh5bGxpcy9NClBpYWYvTQpQaWFnZXQvTQpQaWFub2xhL00KUGljYXNzby9NClBpY2NhZGlsbHkvTQpQaWNrZXJpbmcvTQpQaWNrZXR0L00KUGlja2ZvcmQvTQpQaWNrd2ljay9NClBpY3QvTQpQaWVkbW9udC9NClBpZXJjZS9NClBpZXJyZS9NClBpZXJyb3QvTQpQaWtlL00KUGlsYXRlL01TClBpbGF0ZXMvTQpQaWxjb21heW8vTQpQaWxncmltL1NNClBpbGxzYnVyeS9NClBpbmF0dWJvL00KUGluY3VzL00KUGluZGFyL00KUGlua2VydG9uL00KUGlub2NjaGlvL00KUGlub2NoZXQvTQpQaW50ZXIvTQpQaW55aW4KUGlwcGluL00KUGlyYWV1cy9NClBpcmFuZGVsbG8vTQpQaXNhL00KUGlzY2VzL00KUGlzaXN0cmF0dXMvTQpQaXNzYXJvL00KUGl0Y2Fpcm4vTQpQaXR0L1NNClBpdHRtYW4vTQpQaXR0cy9NClBpdHRzYnVyZ2gvTQpQaXVzL00KUGl6YXJyby9NClBrd3kKUGwKUGxhbmNrL00KUGxhbm8KUGxhbnRhZ2VuZXQvTQpQbGFzdGljaW5lL00KUGxhdGFlYS9NClBsYXRoL00KUGxhdG8vTQpQbGF0b25pYwpQbGF0b25pc20vTQpQbGF0b25pc3QvTQpQbGF0dGUvTQpQbGF1dHVzL00KUGxheVN0YXRpb24vTQpQbGF5Ym95L00KUGxheXRleC9NClBsZWlhZGVzL00KUGxlaXN0b2NlbmUvTQpQbGV4aWdsYXMvTVMKUGxpbnkvTQpQbGlvY2VuZS9TTQpQbHV0YXJjaC9NClBsdXRvL00KUGx5bW91dGgvTQpQbS9NClBvL00KUG9jYWhvbnRhcy9NClBvY29uby9TTQpQb2Nvbm9zL00KUG9kZ29yaWNhL00KUG9kaG9yZXR6L00KUG9kdW5rL00KUG9lL00KUG9nby9NClBvaW5jYXJlL00KUG9pcmV0L00KUG9pcm90L00KUG9pc3Nvbi9NClBvaXRpZXIvTQpQb2tlbW9uL00KUG9sL01ZClBvbGFuZC9NClBvbGFuc2tpL00KUG9sYXJpcy9NClBvbGFyb2lkL01TClBvbGUvU00KUG9saXNoL00KUG9saXRidXJvL00KUG9say9NClBvbGxhcmQvTQpQb2xsb2NrL00KUG9sbHV4L00KUG9sbHkvTQpQb2xseWFubmEvTQpQb2xvL00KUG9sdGF2YS9NClBvbHloeW1uaWEvTQpQb2x5bmVzaWEvTQpQb2x5bmVzaWFuL01TClBvbHlwaGVtdXMvTQpQb21lcmFuaWEvTQpQb21lcmFuaWFuL00KUG9tb25hL00KUG9tcGFkb3VyL00KUG9tcGVpYW4KUG9tcGVpaS9NClBvbXBleS9NClBvbmNlL00KUG9udGNoYXJ0cmFpbi9NClBvbnRpYWMvTQpQb250aWFuYWsvTQpQb29oL00KUG9vbGUvTQpQb29uYS9NClBvcGUvTQpQb3BleWUvTQpQb3BvY2F0ZXBldGwvTQpQb3BwZXIvTQpQb3BwaW5zL00KUG9wc2ljbGUvTQpQb3JmaXJpby9NClBvcnJpbWEvTQpQb3JzY2hlL00KUG9ydC9NUgpQb3J0ZXIvTQpQb3J0aWEvTQpQb3J0bGFuZC9NClBvcnRvL00KUG9ydHNtb3V0aC9NClBvcnR1Z2FsL00KUG9ydHVndWVzZS9NClBvc2VpZG9uL00KUG9zdC9NClBvdGVta2luL00KUG90b21hYy9NClBvdHNkYW0vTQpQb3R0YXdhdG9taWUvTQpQb3R0ZXIvTQpQb3R0cy9NClBvdW5kL00KUG91c3Npbi9NClBvd2VsbC9NClBvd2VyUEMvTQpQb3dlclBvaW50L00KUG93ZXJzL00KUG93aGF0YW4vTQpQb3puYW4vTQpQci9NClByYWRhL00KUHJhZG8vTQpQcmFldG9yaWFuL00KUHJhZ3VlL00KUHJhaWEvTQpQcmFrcml0L00KUHJhdGNoZXR0L00KUHJhdHQvTQpQcmF2ZGEvTQpQcmF4aXRlbGVzL00KUHJlYWtuZXNzL00KUHJlY2FtYnJpYW4vTQpQcmVtaW5nZXIvTQpQcmVteXNsaWQvTQpQcmVuc2EvTQpQcmVudGljZS9NClByZXMKUHJlc2J5dGVyaWFuL1NNClByZXNieXRlcmlhbmlzbS9NUwpQcmVzY290dC9NClByZXNsZXkvTQpQcmVzdG9uL00KUHJldG9yaWEvTQpQcmlhbS9NClByaWJpbG9mL00KUHJpY2UvTQpQcmllc3RsZXkvTQpQcmluY2UvTQpQcmluY2V0b24vTQpQcmluY2lwZS9NClByaXNjaWxsYS9NClByaXVzL00KUHJpdmF0ZQpQcm9jcnVzdGVhbi9NClByb2NydXN0ZXMvTQpQcm9jdGVyL00KUHJvY3lvbi9NClByb2YKUHJvaGliaXRpb24KUHJva29maWV2L00KUHJvbWV0aGVhbi9NClByb21ldGhldXMvTQpQcm9waGV0cwpQcm9zZXJwaW5hL00KUHJvc2VycGluZS9NClByb3RhZ29yYXMvTQpQcm90ZXJvem9pYy9NClByb3Rlc3RhbnQvTVMKUHJvdGVzdGFudGlzbS9TTQpQcm90ZXVzL00KUHJvdWRob24vTQpQcm91c3QvTQpQcm92ZW5jYWwvTVMKUHJvdmVuY2UvTQpQcm92ZXJicwpQcm92aWRlbmNlL1NNClByb3ZvL00KUHJvemFjL01TClBydWRlbmNlL00KUHJ1ZGVudGlhbC9NClBydWl0dC9NClBydXNzaWEvTQpQcnVzc2lhbi9NUwpQcnV0L00KUHJ5b3IvTQpQc2FsbXMvTQpQc2FsdGVyL01TClBzeWNoZS9NClB0L00KUHRhaC9NClB0b2xlbWFpYy9NClB0b2xlbXkvU00KUHUvTQpQdWNjaW5pL00KUHVjay9NClB1Y2tldHQvTQpQdWVibGEvTQpQdWVibG8vTQpQdWVydG8KUHVnZXQvTQpQdWdoL00KUHVsYXNraS9NClB1bGl0emVyL00KUHVsbG1hbi9NUwpQdW5jaC9NClB1bmljL00KUHVuamFiL00KUHVuamFiaS9NClB1cmFuYS9NClB1cmNlbGwvTQpQdXJkdWUvTQpQdXJpbS9NUwpQdXJpbmEvTQpQdXJpdGFuL00KUHVyaXRhbmlzbS9NUwpQdXJ1cy9NClB1c2FuL00KUHVzZXkvTQpQdXNoa2luL00KUHVzaHR1L00KUHV0aW4vTQpQdXRuYW0vTQpQdXpvL00KUHZ0ClB5Z21hbGlvbi9NClB5Z215L1NNClB5bGUvTQpQeW0vTQpQeW5jaG9uL00KUHlvbmd5YW5nL00KUHlvdHIvTQpQeXJlbmVlcy9NClB5cmV4L01TClB5cnJoaWMvTQpQeXRoYWdvcmFzL00KUHl0aGFnb3JlYW4vTQpQeXRoaWFzL00KUHl0aG9uL00KUQpRQQpRQgpRQwpRRUQKUU0KUVdFUlRZClFhZGRhZmkvTQpRYW50YXMvTQpRYXRhci9NClFhdGFyaS9NUwpRaW5nZGFvL00KUWlxaWhhci9NClFvbS9NClF1YWFsdWRlL00KUXVha2VyL01TClF1YWtlcmlzbS9TTQpRdWFvYXIvTQpRdWFzaW1vZG8vTQpRdWF0ZXJuYXJ5L00KUXVheWxlL00KUXVlClF1ZWJlYy9NClF1ZWJlY29pcy9NClF1ZWNodWEvTQpRdWVlbi9NUwpRdWVlbnMvTQpRdWVlbnNsYW5kL00KUXVlbnRpbi9NClF1ZXR6YWxjb2F0bC9NClF1ZXpvbi9NClF1aW5jeS9NClF1aW5uL00KUXVpbnRpbGlhbi9NClF1aW50b24vTQpRdWlyaW5hbC9NClF1aXNsaW5nL00KUXVpdG8vTQpRdWl4b3RlL00KUXVpeG90aXNtL00KUXVtcmFuL00KUXVvbnNldC9NClIvTQpSQUYvTQpSQU0vU00KUkJJClJDClJDQS9NClJDTVAKUkQKUkRBClJFSVQKUkVNL1NNClJGClJGQy9TClJGRApSSQpSSUYKUklQClJJU0MKUk4vTQpSTkEvTQpST0ZMClJPTS9NClJPVEMvTQpSUApSUgpSU0ZTUgpSU0kKUlNWClJTVlAKUlRGTQpSVi9TTQpSYS9NClJhYmF0L00KUmFiZWxhaXMvTQpSYWJlbGFpc2lhbi9NClJhYmluL00KUmFjaGFlbC9NClJhY2hlbC9NClJhY2hlbGxlL00KUmFjaG1hbmlub2ZmL00KUmFjaW5lL00KUmFkY2xpZmZlL00KUmFlL00KUmFmYWVsL00KUmFmZmxlcy9NClJhZ25hcm9rL00KUmFpbmllci9NClJhbGVpZ2gvTQpSYWxwaC9NClJhbWEvTQpSYW1hZGEvTQpSYW1hZGFuL01TClJhbWFrcmlzaG5hL00KUmFtYW51amFuL00KUmFtYXlhbmEvTQpSYW1iby9NClJhbWlyZXovTQpSYW1pcm8vTQpSYW1vbi9NClJhbW9uYS9NClJhbW9zL00KUmFtc2F5L00KUmFtc2VzL00KUmFtc2V5L00KUmFuZC9NClJhbmRhbC9NClJhbmRhbGwvTQpSYW5kZWxsL00KUmFuZGkvTQpSYW5kb2xwaC9NClJhbmR5L00KUmFuZ29vbi9NClJhbmtpbi9NClJhbmtpbmUvTQpSYW91bC9NClJhcGhhZWwvTQpSYXBwYXBvcnQvTQpSYXB1bnplbC9NClJhcXVlbC9NClJhc2FsZ2V0aGkvTQpSYXNhbGhhZ3VlL00KUmFzbXVzc2VuL00KUmFzcHV0aW4vTQpSYXN0YQpSYXN0YWJhbi9NClJhc3RhZmFyaWFuL01TClJhc3RhZmFyaWFuaXNtClJhdGhlci9NClJhdGxpZmYvTQpSYXVsL00KUmF2ZWwvTQpSYXdhbHBpbmRpL00KUmF5L00KUmF5QmFuL00KUmF5YnVybi9NClJheWxlaWdoL00KUmF5bW9uZC9NClJheW11bmRvL00KUmIvTQpSZApSZS9NClJlYWRpbmcvTQpSZWFnYW4vTQpSZWFnYW5vbWljcy9NClJlYWx0b3IvTQpSZWFzb25lci9NClJlYmEvTQpSZWJla2FoL00KUmVjaWZlL00KUmVjb25zdHJ1Y3Rpb24vTQpSZWRlZW1lci9NClJlZGZvcmQvTQpSZWRncmF2ZS9NClJlZG1vbmQvTQpSZWVib2svTQpSZWVkL00KUmVlc2UvTQpSZWV2ZXMvTQpSZWZvcm1hdGlvbi9NUwpSZWZ1Z2lvL00KUmVnZ2llL00KUmVnaW5hL00KUmVnaW5hZS9NClJlZ2luYWxkL00KUmVnb3IvTQpSZWd1bHVzL00KUmVobnF1aXN0L00KUmVpY2gvTQpSZWljaHN0YWcncwpSZWlkL00KUmVpbGx5L00KUmVpbmFsZG8vTQpSZWluaGFyZHQvTQpSZWluaG9sZC9NClJlbWFycXVlL00KUmVtYnJhbmR0L00KUmVtaW5ndG9uL00KUmVtdXMvTQpSZW5hL00KUmVuYWlzc2FuY2UvU00KUmVuYXNjZW5jZQpSZW5hdWx0L00KUmVuZS9NClJlbmVlL00KUmVuby9NClJlbm9pci9NClJlcApSZXByZXNlbnRhdGl2ZQpSZXB1YmxpY2FuL1NNClJlcHVibGljYW5pc20KUmVxdWllbS9NUwpSZXNpc3RhbmNlClJlc3RvcmF0aW9uL00KUmVzdXJyZWN0aW9uClJldWJlbi9NClJldW5pb24vTQpSZXV0ZXJzL00KUmV1dGhlci9NClJldgpSZXZhL00KUmV2ZWxhdGlvbi9TTQpSZXZlbGF0aW9ucy9NClJldmVyZS9NClJldmVyZW5kL00KUmV2bG9uL00KUmV4L00KUmV5ZXMvTQpSZXlramF2aWsvTQpSZXluYS9NClJleW5hbGRvL00KUmV5bm9sZHMvTQpSZi9NClJoL00KUmhlYS9NClJoZWUvTQpSaGVpbmdhdS9NClJoZW5pc2gvTQpSaGlhbm5vbi9NClJoaW5lL00KUmhpbmVsYW5kL00KUmhvZGEvTQpSaG9kZS9TClJob2Rlcy9NClJob2Rlc2lhL00KUmhvZGVzaWFuClJob25kYS9NClJob25lL00KUmliYmVudHJvcC9NClJpY2FyZG8vTQpSaWNlL00KUmljaC9NClJpY2hhcmQvTVMKUmljaGFyZHMvTQpSaWNoYXJkc29uL00KUmljaGVsaWV1L00KUmljaGllL00KUmljaG1vbmQvTQpSaWNodGVyL00KUmljaHRob2Zlbi9NClJpY2svTQpSaWNrZW5iYWNrZXIvTQpSaWNrZXkvTQpSaWNraWUvTQpSaWNrb3Zlci9NClJpY2t5L00KUmljby9NClJpZGRsZS9NClJpZGUvTQpSaWVmZW5zdGFobC9NClJpZWwvTQpSaWVtYW5uL00KUmllc2xpbmcvTVMKUmlnYS9NClJpZ2VsL00KUmlnZ3MvTQpSaWdodApSaWdvYmVydG8vTQpSaWdvbGV0dG8vTQpSaWxleS9NClJpbGtlL00KUmltYmF1ZC9NClJpbmdsaW5nL00KUmluZ28vTQpSaW8vU00KUmlvcy9NClJpcGxleS9NClJpc29yZ2ltZW50by9NClJpdGEvTQpSaXRhbGluL00KUml0ei9NClJpdmFzL00KUml2ZXJhL00KUml2ZXJzL00KUml2ZXJzaWRlClJpdmllcmEvTVMKUml5YWRoL00KUml6YWwvTQpSbi9NClJvYWNoL00KUm9hbm9rZS9NClJvYi9NClJvYmJpZS9NClJvYmJpbi9NUwpSb2JiaW5zL00KUm9iYnkvTQpSb2JlcnNvbi9NClJvYmVydC9NUwpSb2JlcnRhL00KUm9iZXJ0by9NClJvYmVydHMvTQpSb2JlcnRzb24vTQpSb2Jlc29uL00KUm9iZXNwaWVycmUvTQpSb2Jpbi9NClJvYmluc29uL00KUm9iaXR1c3Npbi9NClJvYmxlcy9NClJvYnNvbi9NClJvYnQvTQpSb2J5bi9NClJvY2NvL00KUm9jaGEvTQpSb2NoYW1iZWF1L00KUm9jaGUvTQpSb2NoZWxsZS9NClJvY2hlc3Rlci9NClJvY2svTQpSb2NrZWZlbGxlci9NClJvY2tmb3JkL00KUm9ja2llcy9NClJvY2tuZS9NClJvY2t3ZWxsL00KUm9ja3kvU00KUm9kL00KUm9kZGVuYmVycnkvTQpSb2Rlcmljay9NClJvZGdlci9NUwpSb2RnZXJzL00KUm9kaW4vTQpSb2RuZXkvTQpSb2RvbGZvL00KUm9kcmljay9NClJvZHJpZ28vTQpSb2RyaWd1ZXovTQpSb2RyaXF1ZXovTQpSb2VnL00KUm9lbnRnZW4KUm9nZWxpby9NClJvZ2VyL01TClJvZ2Vycy9NClJvZ2V0L00KUm9qYXMvTQpSb2t1L00KUm9sYWlkcy9NClJvbGFuZC9NClJvbGFuZG8vTQpSb2xleC9NClJvbGxhbmQvTQpSb2xsZXJibGFkZS9NClJvbGxpbnMvTQpSb2xvZGV4L00KUm9sdmFhZy9NClJvbQpSb21hbi9NUwpSb21hbmVzcXVlL01TClJvbWFuaWEvTQpSb21hbmlhbi9NUwpSb21hbm8vTQpSb21hbm92L00KUm9tYW5zL00KUm9tYW5zaC9NClJvbWFudGljaXNtClJvbWFueS9TTQpSb21lL1NNClJvbWVvL00KUm9tZXJvL00KUm9tbWVsL00KUm9tbmV5L00KUm9tdWx1cy9NClJvbi9NClJvbmFsZC9NClJvbmRhL00KUm9ubmllL00KUm9ubnkvTQpSb25zdGFkdC9NClJvbnRnZW4KUm9vbmV5L00KUm9vc2V2ZWx0L00KUm9vdC9NClJvcXVlZm9ydC9TTQpSb3JzY2hhY2gvTQpSb3J5L00KUm9zYS9NClJvc2FsZXMvTQpSb3NhbGllL00KUm9zYWxpbmQvTQpSb3NhbGluZGEvTQpSb3NhbHluL00KUm9zYW5uYS9NClJvc2FubmUvTQpSb3NhcmlvL00KUm9zY29lL00KUm9zZS9NClJvc2Vhbm4vTQpSb3NlYXUvTQpSb3NlY3JhbnMvTQpSb3NlbGxhL00KUm9zZW1hcmllL00KUm9zZW1hcnkvTQpSb3NlbmJlcmcvTQpSb3NlbmRvL00KUm9zZW56d2VpZy9NClJvc2V0dGEvTQpSb3NpY3J1Y2lhbi9NClJvc2llL00KUm9zbHluL00KUm9zcy9NClJvc3NldHRpL00KUm9zc2luaS9NClJvc3RhbmQvTQpSb3N0b3YvTQpSb3N0cm9wb3ZpY2gvTQpSb3N3ZWxsL00KUm90YXJpYW4vTQpSb3RoL00KUm90aGtvL00KUm90aHNjaGlsZC9NClJvdHRlcmRhbS9NClJvdHR3ZWlsZXIvTQpSb3VhdWx0L00KUm91cmtlL00KUm91c3NlYXUvTQpSb3ZlL1JNClJvdmVyL00KUm93ZS9NClJvd2VuYS9NClJvd2xhbmQvTQpSb3dsaW5nL00KUm94YW5uZS9NClJveGllL00KUm94eS9NClJveS9NClJveWFsL00KUm95Y2UvTQpSb3plbGxlL00KUnRlClJ1L01IClJ1YmFpeWF0L00KUnViYmVybWFpZC9NClJ1YmVuL1NNClJ1YmVucy9NClJ1Ymljb24vTVMKUnViaWsvTQpSdWJpbi9NClJ1Ymluc3RlaW4vTQpSdWJ5L00KUnVjaGJhaC9NClJ1ZG9sZi9NClJ1ZG9scGgvTQpSdWR5L00KUnVkeWFyZC9NClJ1ZnVzL00KUnVoci9NClJ1aXovTQpSdWtleXNlci9NClJ1bXBlbHN0aWx0c2tpbi9NClJ1bXNmZWxkL00KUnVubnltZWRlL00KUnVueW9uL00KUnVwZXJ0L00KUnVzaC9NClJ1c2hkaWUvTQpSdXNobW9yZS9NClJ1c2tpbi9NClJ1c3MvTQpSdXNzZWwvTQpSdXNzZWxsL00KUnVzc2lhL00KUnVzc2lhbi9TTQpSdXNzby9NClJ1c3RiZWx0L00KUnVzdHkvTQpSdXRhbi9NClJ1dGdlcnMvTQpSdXRoL00KUnV0aGVyZm9yZC9NClJ1dGhpZS9NClJ1dGxlZGdlL00KUndhbmRhL01TClJ3YW5kYW4vU00KUnd5ClJ4ClJ5ClJ5YW4vTQpSeWRiZXJnL00KUnlkZXIvTQpSeXVreXUvTQpTL01OClNBClNBQwpTQUxUL00KU0FNL00KU0FQL00KU0FSUy9NClNBU0UKU0FUClNCQQpTQy9NClNDU0kvTQpTRApTREkKU0UvTQpTRUFUTwpTRUMvTQpTRgpTR01ML00KU0lEUy9NClNKClNKVwpTSwpTTFIKU08vUwpTT0IvTQpTT1AvTQpTT1MvTQpTT1NlcwpTUENBClNQRgpTUUwKU1JPClNTClNTQQpTU0UvTQpTU1MKU1NUClNTVy9NClNUClNURApTVE9MClNVU0UvTQpTVVYKU1ZOL00KU1cvTQpTV0FLClNXQVQKU2FhYi9NClNhYXIvTQpTYWFyaW5lbi9NClNhYXRjaGkvTQpTYWJiYXRoL00KU2FiYmF0aHMKU2FiaWsvTQpTYWJpbi9NClNhYmluYS9NClNhYmluZS9NClNhYnJlL00KU2FicmluYS9NClNhY2FqYXdlYS9NClNhY2NvL00KU2FjaHMvTQpTYWNyYW1lbnRvL00KU2FkYXQvTQpTYWRkYW0vTQpTYWRkdWNlZS9NClNhZGUvTQpTYWRpZS9NClNhZHIvTQpTYWZhdmlkL00KU2FmZXdheS9NClNhZ2FuL00KU2FnaW5hdy9NClNhZ2l0dGFyaXVzL01TClNhaGFyYS9NClNhaGFyYW4vTQpTYWhlbC9NClNhaWdvbi9NClNhaXBoL00KU2FrYWkvTQpTYWtoYS9NClNha2hhbGluL00KU2FraGFyb3YvTQpTYWtpL00KU2Frcy9NClNhbC9NWQpTYWxhZGluL00KU2FsYWRvL00KU2FsYW1pcy9NClNhbGFzL00KU2FsYXphci9NClNhbGVtL00KU2FsZXJuby9NClNhbGluYXMvTQpTYWxpbmdlci9NClNhbGlzYnVyeS9NClNhbGlzaC9NClNhbGsvTQpTYWxsaWUvTQpTYWxsdXN0L00KU2FsbHkvTQpTYWxvbWUvTQpTYWxvbmlrYS9NClNhbHRvbi9NClNhbHZhZG9yL00KU2FsdmFkb3Jhbi9TTQpTYWx2YWRvcmVhbi9NUwpTYWx2YWRvcmlhbi9NUwpTYWx2YXRvcmUvTQpTYWx3ZWVuL00KU2FseXV0L00KU2FtL00KU2FtYW50aGEvTQpTYW1hci9NClNhbWFyYS9NClNhbWFyaXRhbi9NUwpTYW1hcmthbmQvTQpTYW1taWUvTQpTYW1teS9NClNhbW9hL00KU2Ftb2FuL1NNClNhbW9zZXQvTQpTYW1veWVkL00KU2FtcHNvbi9NClNhbXNvbi9NClNhbXNvbml0ZS9NClNhbXN1bmcvTQpTYW11ZWwvTQpTYW11ZWxzb24vTQpTYW4nYQpTYW4vTQpTYW5hL00KU2FuY2hlei9NClNhbmNoby9NClNhbmQvWk0KU2FuZGJ1cmcvTQpTYW5kZXJzL00KU2FuZGluaXN0YS9NClNhbmRvdmFsL00KU2FuZHJhL00KU2FuZHkvTQpTYW5mb3JkL00KU2FuZm9yaXplZC9NClNhbmcvTVIKU2FuZ2VyL00KU2FuaGVkcmluL00KU2Fua2EvTQpTYW5rYXJhL00KU2Fuc2tyaXQvTQpTYW50YS9NClNhbnRhbmEvTQpTYW50YXlhbmEvTQpTYW50ZXJpYS9NClNhbnRpYWdvL00KU2FudG9zL00KU2FwcGhvL00KU2FwcG9yby9NClNhcmEvTQpTYXJhY2VuL01TClNhcmFnb3NzYS9NClNhcmFoL00KU2FyYWpldm8vTQpTYXJhbi9NClNhcmFzb3RhL00KU2FyYXRvdi9NClNhcmF3YWsvTQpTYXJkaW5pYS9NClNhcmdhc3NvL00KU2FyZ2VudC9NClNhcmdvbi9NClNhcm5vZmYvTQpTYXJveWFuL00KU2FydG8vTQpTYXJ0cmUvTQpTYXNoYS9NClNhc2sKU2Fza2F0Y2hld2FuL00KU2Fza2F0b29uL00KU2FzcXVhdGNoL01TClNhc3Nhbmlhbi9NClNhc3Nvb24vTQpTYXQvTQpTYXRhbi9NClNhdGFuaXNtL00KU2F0YW5pc3QvTQpTYXR1cmRheS9NUwpTYXR1cm4vTQpTYXR1cm5hbGlhL00KU2F1ZGkvTVMKU2F1bC9NClNhdW5kZXJzL00KU2F1bmRyYS9NClNhdXNzdXJlL00KU2F1dGVybmVzClNhdmFnZS9NClNhdmFubmFoL00KU2F2aW9yL00KU2F2b25hcm9sYS9NClNhdm95L00KU2F2b3lhcmQvTQpTYXd5ZXIvTQpTYXhvbi9NUwpTYXhvbnkvTQpTYXllcnMvTQpTYi9NClNjL00KU2NhbGEvTQpTY2FuClNjYW5kaW5hdmlhL00KU2NhbmRpbmF2aWFuL01TClNjYXJhbW91Y2gvTQpTY2FyYm9yb3VnaC9NClNjYXJsYXR0aS9NClNjaGVhdC9NClNjaGVkYXIvTQpTY2hlaGVyYXphZGUvTQpTY2hlbGxpbmcvTQpTY2hlbmVjdGFkeS9NClNjaGlhcGFyZWxsaS9NClNjaGljay9NClNjaGlsbGVyL00KU2NoaW5kbGVyL00KU2NobGVzaW5nZXIvTQpTY2hsaWVtYW5uL00KU2NobGl0ei9NClNjaG1pZHQvTQpTY2huYWJlbC9NClNjaG5hdXplci9NClNjaG5laWRlci9NClNjaG9lbmJlcmcvTQpTY2hvcGVuaGF1ZXIvTQpTY2hyaWVmZmVyL00KU2Nocm9kaW5nZXIvTQpTY2hyb2VkZXIvTQpTY2h1YmVydC9NClNjaHVsdHovTQpTY2h1bHovTQpTY2h1bWFubi9NClNjaHVtcGV0ZXIvTQpTY2h1eWxlci9NClNjaHV5bGtpbGwvTQpTY2h3YXJ0ei9NClNjaHdhcnplbmVnZ2VyL00KU2Nod2FyemtvcGYvTQpTY2h3ZWl0emVyL00KU2Nod2VwcGVzL00KU2Nod2luZ2VyL00KU2Nod2lubi9NClNjaWVudG9sb2dpc3QvU00KU2NpZW50b2xvZ3kvTQpTY2lwaW8vTQpTY29wZXMvTQpTY29ycGlvL1NNClNjb3JwaXVzL00KU2NvcnNlc2UvTQpTY290L1NNClNjb3RjaC9NUwpTY290Y2htYW4vTQpTY290Y2htZW4vTQpTY290Y2h3b21hbi9NClNjb3RjaHdvbWVuL00KU2NvdGlhL00KU2NvdGxhbmQvTQpTY290c21hbi9NClNjb3RzbWVuL00KU2NvdHN3b21hbi9NClNjb3Rzd29tZW4vTQpTY290dC9NClNjb3R0aWUvU00KU2NvdHRpc2gvTQpTY290dHNkYWxlL00KU2NyYWJibGUvTVMKU2NyYW50b24vTQpTY3JpYWJpbi9NClNjcmlibmVyL00KU2NyaXB0dXJlL1NNClNjcm9vZ2UvTQpTY3J1Z2dzL00KU2N1ZC9NClNjdWxsZXkvTQpTY3lsbGEvTQpTY3l0aGlhL00KU2N5dGhpYW4vTQpTZS9NSApTZWFib3JnL00KU2VhZ3JhbS9NClNlYW4vTQpTZWFycy9NClNlYXR0bGUvTQpTZWJhc3RpYW4vTQpTZWMKU2Vjb25hbC9NClNlY3JldGFyaWF0L00KU2VjcmV0YXJ5ClNlZGVyL01TClNlZG5hL00KU2VlYmVjay9NClNlZWdlci9NClNlZ2EvTQpTZWdvdmlhL00KU2VncmUvTQpTZWd1bmRvL00KU2Vpa28vTQpTZWluZS9NClNlaW5mZWxkL00KU2Vqb25nL00KU2VsYXNzaWUvTQpTZWxlY3RyaWMvTQpTZWxlbmEvTQpTZWxldWNpZC9NClNlbGV1Y3VzL00KU2VsaW0vTQpTZWxqdWsvTQpTZWxraXJrL00KU2VsbGVycy9NClNlbG1hL00KU2Vsem5pY2svTQpTZW1hcmFuZy9NClNlbWlub2xlL01TClNlbWlyYW1pcy9NClNlbWl0ZS9NUwpTZW1pdGljL1NNClNlbXRleC9NClNlbmF0ZS9NUwpTZW5kYWkvTQpTZW5lY2EvTVMKU2VuZWdhbC9NClNlbmVnYWxlc2UvTQpTZW5naG9yL00KU2VuaW9yL00KU2VubmFjaGVyaWIvTQpTZW5uZXR0L00KU2Vuc3Vycm91bmQvTQpTZW91bC9NClNlcApTZXBoYXJkaS9NClNlcG95L00KU2VwdC9NClNlcHRlbWJlci9NUwpTZXB0dWFnaW50L01TClNlcXVveWEvTQpTZXJiL1NNClNlcmJpYS9NClNlcmJpYW4vTVMKU2VyZW5hL00KU2VyZW5nZXRpL00KU2VyZ2VpL00KU2VyZ2lvL00KU2VycGVucy9NClNlcnJhL00KU2VycmFuby9NClNldC9NClNldGgvTQpTZXRvbi9NClNldXJhdC9NClNldXNzL00KU2V2YXN0b3BvbC9NClNldmVybi9NClNldmVydXMvTQpTZXZpbGxlL00KU2V2cmVzL00KU2V3YXJkL00KU2V4dGFucy9NClNleHRvbi9NClNleWNoZWxsZXMvTQpTZXlmZXJ0L00KU2V5bW91ci9NClNndApTaGFja2xldG9uL00KU2hhZmZlci9NClNoYWgvTQpTaGFrYS9NClNoYWtlcgpTaGFrZXNwZWFyZS9NClNoYWtlc3BlYXJlYW4vTQpTaGFuYS9NClNoYW5lL00KU2hhbmdoYWkvTQpTaGFua2FyYS9NClNoYW5uYS9NClNoYW5ub24vTQpTaGFudHVuZy9NClNoYXBpcm8vTQpTaGFyaSdhL00KU2hhcmkvTQpTaGFyaWYvTQpTaGFybGVuZS9NClNoYXJvbi9NClNoYXJwL00KU2hhcnBlL00KU2hhcnJvbi9NClNoYXN0YS9NClNoYXVsYS9NClNoYXVuL00KU2hhdW5hL00KU2hhdmlhbi9NClNoYXZ1b3QvTQpTaGF3L00KU2hhd24vTQpTaGF3bmEvTQpTaGF3bmVlL1NNClNoY2hhcmFuc2t5L00KU2hlYS9NClNoZWJhL00KU2hlYmVsaS9NClNoZWVuYS9NClNoZWV0cm9jay9NClNoZWZmaWVsZC9NClNoZWlsYS9NClNoZWxieS9NClNoZWxkb24vTQpTaGVsaWEvTQpTaGVsbC9NClNoZWxsZXkvTQpTaGVsbHkvTQpTaGVsdG9uL00KU2hlbmFuZG9haC9NClNoZW55YW5nL00KU2hlb2wvTQpTaGVwYXJkL00KU2hlcGhlcmQvTQpTaGVwcGFyZC9NClNoZXJhdGFuL00KU2hlcmF0b24vTQpTaGVyZWUvTQpTaGVyaS9NClNoZXJpZGFuL00KU2hlcmxvY2svTQpTaGVybWFuL00KU2hlcnBhL00KU2hlcnJpL00KU2hlcnJpZS9NClNoZXJyeS9NClNoZXJ3b29kL00KU2hlcnlsL00KU2hldGxhbmQvU00KU2hldGxhbmRzL00KU2hldmFyZG5hZHplL00KU2hldmF0L00KU2hpJ2l0ZS9NClNoaWVsZHMvTQpTaGlpdGUvTVMKU2hpamlhemh1YW5nL00KU2hpa29rdS9NClNoaWxsb25nL00KU2hpbG9oL00KU2hpbnRvL01TClNoaW50b2lzbS9NUwpTaGludG9pc3QvTVMKU2hpcmF6L00KU2hpcmxleS9NClNoaXZhL00KU2hvY2tsZXkvTQpTaG9ydC9NClNob3J0aG9ybi9NClNob3Nob25lL1NNClNob3N0YWtvdml0Y2gvTQpTaHJlay9NClNocmV2ZXBvcnQvTQpTaHJpbmVyL00KU2hyb3BzaGlyZS9NClNodWxhL00KU2h5bG9jay9NClNoeWxvY2tpYW4vTQpTaS9NClNpYW0vTQpTaWFtZXNlL00KU2liZWxpdXMvTQpTaWJlcmlhL00KU2liZXJpYW4vTVMKU2lieWwvTQpTaWNpbGlhbi9TTQpTaWNpbHkvTQpTaWQvTQpTaWRkaGFydGhhL00KU2lkbmV5L00KU2llZ2ZyaWVkL00KU2llbWVucy9NClNpZXJwaW5za2kvTQpTaWVycmFzClNpZ2lzbXVuZC9NClNpZ211bmQvTQpTaWd1cmQvTQpTaWhhbm91ay9NClNpa2gvTQpTaWtoaXNtClNpa2hzClNpa2tpbS9NClNpa2tpbWVzZS9NClNpa29yc2t5L00KU2lsYXMvTQpTaWxlc2lhL00KU2lsdXJpYW4vU00KU2lsdmEvTQpTaWx2aWEvTQpTaW1lbm9uL00KU2ltbWVudGFsL00KU2ltbW9ucy9NClNpbW9uL00KU2ltb25lL00KU2ltcHNvbi9TTQpTaW1wc29ucy9NClNpbXMvTQpTaW5haS9NClNpbmF0cmEvTQpTaW5iYWQvTQpTaW5jbGFpci9NClNpbmRiYWQvTQpTaW5kaGkvTQpTaW5nYXBvcmUvTQpTaW5nYXBvcmVhbi9TTQpTaW5nZXIvTQpTaW5naC9NClNpbmdsZXRvbi9NClNpbmhhbGVzZS9NClNpbmtpYW5nL00KU2lvdXgvTQpTaXIvU00KU2lyaXVzL00KU2lzdGluZS9NClNpc3lwaGVhbi9NClNpc3lwaHVzL00KU2l2YS9NClNpdmFuL00KU2phZWxsYW5kL00KU2tpbm5lci9NClNraXBweS9NClNrb3BqZS9NClNreWUvTQpTa3lsYWIvTQpTa3lwZS9NClNsYWNrd2FyZS9NClNsYXNoZG90L00KU2xhdGVyL00KU2xhdi9TTQpTbGF2aWMvTQpTbGF2b25pYy9NClNsaW5reS9NClNsb2FuL00KU2xvYW5lL00KU2xvY3VtL00KU2xvdmFrL1NNClNsb3Zha2lhL00KU2xvdmFraWFuClNsb3ZlbmUvU00KU2xvdmVuaWEvTQpTbG92ZW5pYW4vTVMKU2x1cnBlZS9NClNtL00KU21hbGwvTQpTbWV0YW5hL00KU21pcm5vZmYvTQpTbWl0aC9NClNtaXRoc29uL00KU21pdGhzb25pYW4vTQpTbW9rZXkvTQpTbW9sZW5zay9NClNtb2xsZXR0L00KU211dHMvTQpTbXlybmEKU24vTQpTbmFrZS9NClNuYXBwbGUvTQpTbmVhZC9NClNuZWxsL00KU25pY2tlcnMvTQpTbmlkZXIvTQpTbm9vcHkvTQpTbm93L00KU25vd2JlbHQvTQpTbnlkZXIvTQpTb2F2ZS9NClNvYwpTb2NvcnJvL00KU29jcmF0ZXMvTQpTb2NyYXRpYy9NClNvZGR5L00KU29kb20vTQpTb2ZpYS9NClNvaG8vTQpTb2wvTQpTb2xpcy9NClNvbG9tb24vTQpTb2xvbi9NClNvbHpoZW5pdHN5bi9NClNvbWFsaS9TTQpTb21hbGlhL00KU29tYWxpYW4vTVMKU29tbWUvTQpTb21vemEvTQpTb24vTQpTb25kaGVpbS9NClNvbmRyYS9NClNvbmdoYWkvTQpTb25naHVhL00KU29uaWEvTQpTb25qYS9NClNvbm55L00KU29ub3JhL00KU29udGFnL00KU29ueS9NClNvbnlhL00KU29waGlhL00KU29waGllL00KU29waG9jbGVhbi9NClNvcGhvY2xlcy9NClNvcHdpdGgvTQpTb3Jib25uZS9NClNvc2EvTQpTb3RvL00KU291cGhhbm91dm9uZy9NClNvdXJjZWZvcmdlL00KU291c2EvTQpTb3V0aC9NClNvdXRoYW1wdG9uL00KU291dGhlYXN0L01TClNvdXRoZXJuZXIvU00KU291dGhleS9NClNvdXRocwpTb3V0aHdlc3QvTVMKU292aWV0L00KU293ZXRvL00KU295aW5rYS9NClNveXV6L00KU3AKU3BhYXR6L00KU3BhY2tsZS9NClNwYWhuL00KU3BhaW4vTQpTcGFtL00KU3BhbgpTcGFuZ2xpc2gKU3BhbmlhcmQvU00KU3BhbmlzaC9NClNwYXJrcy9NClNwYXJ0YS9NClNwYXJ0YWN1cy9NClNwYXJ0YW4vTVMKU3BlYXJzL00KU3BlZXIvTQpTcGVuY2UvUk0KU3BlbmNlci9NClNwZW5jZXJpYW4vTQpTcGVuZ2xlci9NClNwZW5nbGVyaWFuL00KU3BlbnNlci9NClNwZW5zZXJpYW4vTQpTcGVycnkvTQpTcGhpbngvTQpTcGljYS9NClNwaWVsYmVyZy9NClNwaWxsYW5lL00KU3Bpbm96YS9NClNwaW54L00KU3Bpcm8vTQpTcGlyb2dyYXBoL00KU3BpdHNiZXJnZW4vTQpTcGl0ei9NClNwb2NrL00KU3Bva2FuZS9NClNwcmluZ2ZpZWxkL00KU3ByaW5nc3RlZW4vTQpTcHJpbnQvTQpTcHJpdGUvTQpTcHV0bmlrL00KU3EKU3F1YW50by9NClNxdWliYi9NClNyL00KU3JpbmFnYXIvTQpTcml2aWpheWEvTQpTdApTdGEKU3RhY2V5L00KU3RhY2kvTQpTdGFjaWUvTQpTdGFjeS9NClN0YWVsL00KU3RhZmZvcmQvTQpTdGFpck1hc3Rlci9NClN0YWxpbi9NClN0YWxpbmdyYWQvTQpTdGFsaW5pc3QvTQpTdGFsbG9uZS9NClN0YW1mb3JkL00KU3Rhbi9NClN0YW5kaXNoL00KU3RhbmZvcmQvTQpTdGFuaXNsYXZza3kvTQpTdGFubGV5L00KU3RhbnRvbi9NClN0YXBsZXMvTQpTdGFyYnVja3MvTQpTdGFyay9NClN0YXJrZXkvTQpTdGFyci9NClN0YXRlbi9NClN0YXRlcwpTdGF1YmFjaC9NClN0ZQpTdGVhZGljYW0vTQpTdGVlbGUvTQpTdGVmYW4vTQpTdGVmYW5pZS9NClN0ZWluL01SClN0ZWluYmVjay9NClN0ZWluZW0vTQpTdGVpbmVyL00KU3RlaW5tZXR6L00KU3RlaW53YXkvTQpTdGVsbGEvTQpTdGVuZGhhbC9NClN0ZW5nZWwvTQpTdGVwaGFuL00KU3RlcGhhbmllL00KU3RlcGhlbi9NUwpTdGVwaGVucy9NClN0ZXBoZW5zb24vTQpTdGVybGluZy9NClN0ZXJuL00KU3Rlcm5lL00KU3Rlcm5vL00KU3RldHNvbi9NClN0ZXViZW4vTQpTdGV2ZS9NClN0ZXZlbi9NUwpTdGV2ZW5zL00KU3RldmVuc29uL00KU3RldmllL00KU3Rld2FydC9NClN0aWVnbGl0ei9NClN0aWx0b24vU00KU3RpbXNvbi9NClN0aW5lL00KU3RpcmxpbmcvTQpTdG9ja2hhdXNlbi9NClN0b2NraG9sbS9NClN0b2NrdG9uL00KU3RvaWMvU00KU3RvaWNpc20vTVMKU3Rva2VzL00KU3RvbGljaG5heWEvTQpTdG9seXBpbi9NClN0b25lL00KU3RvbmVoZW5nZS9NClN0b3BwYXJkL00KU3RvdXQvTQpTdG93ZS9NClN0cmFiby9NClN0cmFkaXZhcmkKU3RyYWRpdmFyaXVzL00KU3RyYXNib3VyZy9NClN0cmF1c3MvTQpTdHJhdmluc2t5L00KU3RyZWlzYW5kL00KU3RyaWNrbGFuZC9NClN0cmluZGJlcmcvTQpTdHJvbWJvbGkvTQpTdHJvbmcvTQpTdHUvTQpTdHVhcnQvTVMKU3R1ZGViYWtlci9NClN0dXR0Z2FydC9NClN0dXl2ZXNhbnQvTQpTdHlnaWFuL00KU3R5cm9mb2FtL1NNClN0eXJvbi9NClN0eXgvTQpTdWFyZXovTQpTdWJhcnUvTQpTdWNyZS9NClN1Y3JldHMvTQpTdWRhbi9NClN1ZGFuZXNlL00KU3VkZXRlbmxhbmQvTQpTdWRva3UvTQpTdWRyYS9NClN1ZS9NClN1ZXRvbml1cy9NClN1ZXovTQpTdWZmb2xrL00KU3VmaS9NClN1ZmlzbS9NClN1aGFydG8vTQpTdWkvTQpTdWthcm5vL00KU3Vra290ClN1bGF3ZXNpL00KU3VsZWltYW4vTQpTdWxsYS9NClN1bGxpdmFuL00KU3VtYXRyYS9NClN1bWF0cmFuL1NNClN1bWVyaWEvTQpTdW1lcmlhbi9TTQpTdW1tZXIvTVMKU3VtbWVycy9NClN1bW5lci9NClN1bXRlci9NClN1bi9TTQpTdW5iZWFtL00KU3VuYmVsdC9NClN1bmRhbmVzZS9NClN1bmRhcy9NClN1bmRheS9NUwpTdW5nL00KU3Vua2lzdC9NClN1bm5pL1NNClN1bm5pdGUvTVMKU3Vubnl2YWxlL00KU3VwZXJib3dsL00KU3VwZXJmdW5kL00KU3VwZXJnbHVlL00KU3VwZXJpb3IvTQpTdXBlcm1hbi9NClN1cHQKU3VyYWJheWEvTQpTdXJhdC9NClN1cmluYW1lL00KU3VyaW5hbWVzZQpTdXJ5YS9NClN1c2FuL00KU3VzYW5hL00KU3VzYW5uYS9NClN1c2FubmUvTQpTdXNpZS9NClN1c3F1ZWhhbm5hL00KU3Vzc2V4L00KU3V0aGVybGFuZC9NClN1dHRvbi9NClN1dmEvTQpTdXdhbmVlL00KU3V6YW5uZS9NClN1emV0dGUvTQpTdXpob3UvTQpTdXp1a2kvTQpTdXp5L00KU3ZhbGJhcmQvTQpTdmVuL00KU3ZlbmdhbGkvTQpTdmVyZGxvdnNrClN3YWhpbGkvU00KU3dhbW1lcmRhbS9NClN3YW5lZS9NClN3YW5zZWEvTQpTd2Fuc29uL00KU3dhemkvU00KU3dhemlsYW5kL00KU3dlZC9OClN3ZWRlL1NNClN3ZWRlbi9NClN3ZWRlbmJvcmcvTQpTd2VkaXNoL00KU3dlZW5leS9NClN3ZWV0L00KU3dpZnQvTQpTd2luYnVybmUvTQpTd2lzcy9NUwpTd2lzc2Fpci9NClN3aXR6ClN3aXR6ZXJsYW5kL00KU3liaWwvTQpTeWRuZXkvTQpTeWtlcy9NClN5bHZlc3Rlci9NClN5bHZpYS9NClN5bHZpZS9NClN5bmdlL00KU3lyYWN1c2UvTQpTeXJpYS9NClN5cmlhYy9NClN5cmlhbi9NUwpTemlsYXJkL00KU3p5bWJvcnNrYS9NClQnYW5nL00KVC9NREcKVEEKVEFSUApUQi9NClRCQQpURApUREQKVEVGTApURUxORVQvUwpURUxORVRUZWQKVEVMTkVUVGluZwpURVNMClRFU09MClRHSUYKVEhDClRLTy9NClRMQy9NClRNClROClROVC9NClRPRUZMClRRTQpUVi9TTQpUVkEKVFdBL00KVFdYClRYClRhL00KVGFiYXNjby9TTQpUYWJhdGhhL00KVGFiZXJuYWNsZS9NUwpUYWJpdGhhL00KVGFicml6L01TClRhY2l0dXMvTQpUYWNvbWEvTQpUYWQvTQpUYWR6aGlrL00KVGFlZ3UvTQpUYWVqb24vTQpUYWZ0L00KVGFnYWxvZy9TTQpUYWdvcmUvTQpUYWd1cy9NClRhaGl0aS9NClRhaGl0aWFuL01TClRhaG9lL00KVGFpY2h1bmcvTQpUYWluYW4KVGFpbmUvTQpUYWlwZWkvTQpUYWlwaW5nL00KVGFpd2FuL00KVGFpd2FuZXNlL00KVGFpeXVhbi9NClRhamlraXN0YW4vTQpUYWtsYW1ha2FuL00KVGFsYm90L00KVGFsaWJhbi9NClRhbGllc2luL00KVGFsbGFoYXNzZWUvTQpUYWxsY2hpZWYvTQpUYWxsZXkvTQpUYWxsZXlyYW5kL00KVGFsbGlubi9NClRhbG11ZC9NUwpUYWxtdWRpYwpUYWxtdWRpc3QKVGFtYXJhL00KVGFtZWthL00KVGFtZXJhL00KVGFtZXJsYW5lL00KVGFtaS9NClRhbWlrYS9NClRhbWlsL01TClRhbW1hbnkvTQpUYW1taS9NClRhbW1pZS9NClRhbW11ei9NClRhbW15L00KVGFtcGEvTQpUYW1wYXgvTQpUYW1yYS9NClRhbXdvcnRoL00KVGFuY3JlZC9NClRhbmV5L00KVGFuZ2FueWlrYS9NClRhbmdpZXIvTVMKVGFuZ3NoYW4vTQpUYW5pYS9NClRhbmlzaGEvTQpUYW5uZXIvTQpUYW5uaGF1c2VyL00KVGFudGFsdXMvTQpUYW55YS9NClRhbnphbmlhL00KVGFuemFuaWFuL1NNClRhby9NClRhb2lzbS9NUwpUYW9pc3QvTVMKVGFyYS9NClRhcmFudGluby9NClRhcmF3YS9NClRhcmF6ZWQvTQpUYXJiZWxsL00KVGFyZ2V0L00KVGFyaW0vTQpUYXJrZW50b24vTQpUYXJraW5ndG9uL00KVGFydGFyeS9NClRhcnR1ZmZlL00KVGFyemFuL00KVGFzaGEvTQpUYXNoa2VudC9NClRhc21hbi9NClRhc21hbmlhL00KVGFzbWFuaWFuL00KVGFzcy9NClRhdGFyL01TClRhdGUvTQpUYXR1bS9NClRhdXJ1cy9NUwpUYXduZXkvTQpUYXlsb3IvTQpUYi9NClRiaWxpc2kvTQpUYy9NClRjaGFpa292c2t5L00KVGUvTQpUZVgKVGVYZXMKVGVhc2RhbGUvTQpUZWNobmljb2xvci9NClRlY3Vtc2VoL00KVGVkL00KVGVkZHkvTQpUZWZsb24vTVMKVGVndWNpZ2FscGEvTQpUZWhyYW4KVGVsZVByb21wVGVyClRlbGVQcm9tcHRlci9NClRlbGVtYWNodXMvTQpUZWxlbWFubi9NClRlbGV0eXBlClRlbGwvTVIKVGVsbGVyL00KVGVsdWd1L00KVGVtcGUKVGVtcGxhci9NClRlbm4vTQpUZW5uZXNzZWFuL1NNClRlbm5lc3NlZS9NClRlbm55c29uL00KVGVub2NodGl0bGFuL00KVGVvdGlodWFjYW4vTQpUZXJlbmNlL00KVGVyZXNhL00KVGVyZXNoa292YS9NClRlcmkvTQpUZXJrZWwvTQpUZXJwc2ljaG9yZS9NClRlcnIvTQpUZXJyYS9NClRlcnJhbi9NClRlcnJhbmNlL00KVGVycmVsbC9NClRlcnJlbmNlL00KVGVycmkvTQpUZXJyaWUvTQpUZXJyeS9NClRlcnRpYXJ5L00KVGVzbGEvTQpUZXNzL00KVGVzc2EvTQpUZXNzaWUvTQpUZXQvTQpUZXRoeXMvTQpUZXRvbnMvTQpUZXV0b24vTVMKVGV1dG9uaWMvTQpUZXZldC9NClRleC9NClRleGFjby9NClRleGFuL01TClRleGFzL00KVGgvTQpUaGFja2VyYXkvTQpUaGFkL00KVGhhZGRldXMvTQpUaGFpL1NNClRoYWlsYW5kL00KVGhhbGVzL00KVGhhbGlhL00KVGhhbWVzL00KVGhhbmgvTQpUaGFua3NnaXZpbmcvTVMKVGhhbnQvTQpUaGFyL00KVGhhcnAvTQpUaGF0Y2hlci9NClRoZWEvTQpUaGViZXMvTQpUaGVpbGVyL00KVGhlbG1hL00KVGhlbWlzdG9jbGVzL00KVGhlb2NyaXR1cy9NClRoZW9kb3JhL00KVGhlb2RvcmUvTQpUaGVvZG9yaWMvTQpUaGVvZG9zaXVzL00KVGhlb3NvcGh5L00KVGhlcmF2YWRhL00KVGhlcmVzYS9NClRoZXJlc2UvTQpUaGVybW9weWxhZS9NClRoZXJtb3MKVGhlcm9uL00KVGhlc2V1cy9NClRoZXNwaWFuL00KVGhlc3Bpcy9NClRoZXNzYWxvbmlhbi9TTQpUaGVzc2Fsb25pa2kvTQpUaGVzc2FseS9NClRoaWV1L00KVGhpbWJ1L00KVGhpbXBodQpUaG9tYXMvTQpUaG9taXNtL00KVGhvbWlzdGljL00KVGhvbXBzb24vTQpUaG9tc29uL00KVGhvci9NClRob3JhemluZS9NClRob3JlYXUvTQpUaG9ybnRvbi9NClRob3JvdWdoYnJlZC9NClRob3JwZS9NClRob3RoL00KVGhyYWNlL00KVGhyYWNpYW4vTQpUaHUKVGh1Y3lkaWRlcy9NClRodWxlL00KVGh1bmRlcmJpcmQvTQpUaHVyL1MKVGh1cmJlci9NClRodXJtYW4vTQpUaHVybW9uZC9NClRodXJzZGF5L1NNClRodXRtb3NlL00KVGkvTQpUaWEvTQpUaWFuamluL00KVGliZXIvTQpUaWJlcml1cy9NClRpYmV0L00KVGliZXRhbi9NUwpUaWNrZXRtYXN0ZXIvTQpUaWNvbmRlcm9nYS9NClRpZGUvTQpUaWVuYW5tZW4vTQpUaWZmYW55L00KVGlncmlzL00KVGlqdWFuYS9NClRpbGxpY2gvTQpUaWxsbWFuL00KVGlsc2l0L00KVGltL00KVGltYnVrdHUvTQpUaW1leC9NClRpbW15L00KVGltb24vTQpUaW1vci9NClRpbW90aHkvTQpUaW11ci9NClRpbXVyaWQvTQpUaW5hL00KVGluZy9NClRpbmtlcmJlbGwvTQpUaW5rZXJ0b3kvTQpUaW5zZWx0b3duL00KVGludG9yZXR0by9NClRpcHBlY2Fub2UvTQpUaXBwZXJhcnkvTQpUaXJhbmUKVGlyZXNpYXMvTQpUaXJvbC9NClRpcm9sZWFuClRpc2hhL00KVGlzaHJpL00KVGl0YW4vU00KVGl0YW5pYS9NClRpdGFuaWMvTQpUaXRpYW4vTQpUaXRpY2FjYS9NClRpdG8vTQpUaXR1cy9NClRsL00KVGxhbG9jL00KVGxpbmdpdC9NClRtL00KVG9iYWdvL00KVG9iaXQvTQpUb2J5L00KVG9jYW50aW5zL00KVG9jcXVldmlsbGUvTQpUb2QvTQpUb2RkL00KVG9nby9NClRvZ29sZXNlL00KVG9qby9NClRva2F5L00KVG9rdWdhd2EvTQpUb2t5by9NClRva3lvaXRlClRvbGVkby9NUwpUb2xraWVuL00KVG9sc3RveS9NClRvbHRlYy9NClRvbHlhdHRpL00KVG9tL00KVG9tYXMvTQpUb21iYXVnaC9NClRvbWxpbi9NClRvbW1pZS9NClRvbW15L00KVG9tcGtpbnMvTQpUb21zay9NClRvbmdhL00KVG9uZ2FuL01TClRvbmkvTQpUb25pYS9NClRvbnRvL00KVG9ueS9NClRvbnlhL00KVG9wZWthL00KVG9wc3kvTQpUb3JhaC9NClRvcmFocwpUb3JvbnRvL00KVG9ycXVlbWFkYS9NClRvcnJhbmNlL00KVG9ycmVucy9NClRvcnJlcy9NClRvcnJpY2VsbGkvTQpUb3J0b2xhL00KVG9ydHVnYS9NClRvcnZhbGRzL00KVG9yeS9TTQpUb3NjYS9NClRvc2NhbmluaS9NClRvc2hpYmEvTQpUb3RvL00KVG91bG91c2UvTQpUb3duZXMvTQpUb3duc2VuZC9NClRveW5iZWUvTQpUb3lvZGEvTQpUb3lvdGEvTQpUcmFjZXkvTQpUcmFjaS9NClRyYWNpZS9NClRyYWN5L00KVHJhZmFsZ2FyL00KVHJhaWx3YXlzL00KVHJhamFuL00KVHJhbi9NClRyYW5zY2F1Y2FzaWEvTQpUcmFuc3ZhYWwvTQpUcmFuc3lsdmFuaWEvTQpUcmFuc3lsdmFuaWFuL00KVHJhcHBpc3QvU00KVHJhdmlzL00KVHJhdm9sdGEvTQpUcmVhc3VyeS9TTQpUcmVibGlua2EvTQpUcmVra2llL00KVHJlbnQvTQpUcmVudG9uL00KVHJldmVseWFuL00KVHJldmluby9NClRyZXZvci9NClRyZXkvTQpUcmlhbmd1bHVtL00KVHJpYXNzaWMvTQpUcmljaWEvTQpUcmlkZW50L00KVHJpZXN0ZS9NClRyaW11cnRpL00KVHJpbmEvTQpUcmluaWRhZC9NClRyaW5pZGFkaWFuL01TClRyaW5pdHkvU00KVHJpcGl0YWthL00KVHJpcG9saS9NClRyaXBwZS9NClRyaXNoYS9NClRyaXN0YW4vTQpUcml0b24vTQpUcm9icmlhbmQvTQpUcm9pbHVzL00KVHJvamFuL01TClRyb2xsb3BlL00KVHJvbmRoZWltL00KVHJvcGljYW5hL00KVHJvdHNreS9NClRyb3kvTQpUcm95ZXMKVHJ1Y2tlZS9NClRydWRlYXUvTQpUcnVkeS9NClRydWZmYXV0L00KVHJ1amlsbG8vTQpUcnVtYW4vTQpUcnVtYnVsbC9NClRydW1wL00KVHJ1dGgvTQpUc2ltc2hpYW4vTQpUc2lvbGtvdnNreS9NClRzaXRzaWhhci9NClRzb25na2hhcGEvTQpUc3dhbmEvTQpUdS9NClR1YW1vdHUvTQpUdWFyZWcvTQpUdWJtYW4vTQpUdWNrZXIvTQpUdWNzb24vTQpUdWN1bWFuL00KVHVkb3IvU00KVHVlL1MKVHVlcy9NClR1ZXNkYXkvTVMKVHVsYW5lL00KVHVsbC9NClR1bHNhL00KVHVsc2lkYXMvTQpUdW1zL00KVHVuZ3VzL00KVHVuZ3Vza2EvTQpUdW5pcy9NClR1bmlzaWEvTQpUdW5pc2lhbi9NUwpUdW5uZXkvTQpUdXBpL00KVHVwcGVyd2FyZS9NClR1cHVuZ2F0by9NClR1cmdlbmV2L00KVHVyaW4vTQpUdXJpbmcvTQpUdXJrL1NNClR1cmtlc3Rhbi9NClR1cmtleS9NClR1cmtpYy9NUwpUdXJraXNoL00KVHVya21lbmlzdGFuL00KVHVybmVyL00KVHVycGluL00KVHVzY2Fsb29zYS9NClR1c2Nhbi9NClR1c2NhbnkvTQpUdXNjYXJvcmEvTVMKVHVzY29uL00KVHVza2VnZWUvTQpUdXNzYXVkL00KVHV0L00KVHV0YW5raGFtZW4vTQpUdXRzaS9NClR1dHUvTQpUdXZhbHUvTQpUdXZhbHVhbgpUd2Fpbi9NClR3ZWVkL00KVHdlZWRsZWRlZS9NClR3ZWVkbGVkdW0vTQpUd2lsYS9NClR3aW5raWVzL00KVHdpdHRlci9NClR3aXp6bGVycy9NClR3cApUeS9NClR5Y2hvL00KVHlsZW5vbC9NClR5bGVyL00KVHluZGFsZS9NClR5bmRhbGwvTQpUeXJlL00KVHlyZWUvTQpUeXJvbGVhbgpUeXJvbmUvTQpUeXNvbi9NClUvTQpVQVIKVUFXClVCUy9NClVDTEEvTQpVRk8vU00KVUhGL00KVUsvTQpVTApVTi9NClVORVNDTy9NClVOSUNFRi9NClVOSVgvTQpVUEMKVVBJL00KVVBTL00KVVJML1MKVVMvTQpVU0EvTQpVU0FGClVTQgpVU0NHClVTREEvTQpVU0lBClVTTUMKVVNOClVTTwpVU1AKVVNQUwpVU1MKVVNTUi9NClVUL00KVVRDClVWL00KVWJhbmdpL00KVWJ1bnR1L00KVWNheWFsaS9NClVjY2VsbG8vTQpVZGFsbC9NClVmYS9NClVnYW5kYS9NClVnYW5kYW4vTVMKVWlnaHVyL00KVWp1bmdwYW5kYW5nL00KVWtyYWluZS9NClVrcmFpbmlhbi9TTQpVbHN0ZXIvTQpVbHRyYXN1ZWRlL00KVWx5YW5vdnNrL00KVWx5c3Nlcy9NClVtYnJpZWwvTQpVbmRlcndvb2QvTQpVbmdhdmEvTQpVbmljb2RlL00KVW5pbGV2ZXIvTQpVbmlvbi9TTQpVbmlvbmlzdApVbmlyb3lhbC9NClVuaXRhcmlhbi9NUwpVbml0YXJpYW5pc20vTVMKVW5pdGFzL00KVW5peC9TClVudWthbGhhaS9NClVwYW5pc2hhZHMvTQpVcGRpa2UvTQpVcGpvaG4vTQpVcHRvbi9NClVyL00KVXJhbC9TTQpVcmFscy9NClVyYW5pYS9NClVyYW51cy9NClVyYmFuL00KVXJkdS9NClVyZXkvTQpVcmlhaC9NClVyaWVsL00KVXJpcy9NClVycXVoYXJ0L00KVXJzYS9NClVyc3VsYS9NClVyc3VsaW5lL00KVXJ1Z3VheS9NClVydWd1YXlhbi9NUwpVcnVtcWkvTQpVc2VuZXQvTVMKVXN0aW5vdi9NClV0ClV0YWgvTQpVdGFoYW4vTVMKVXRlL1NNClV0b3BpYS9TTQpVdG9waWFuL1NNClV0cmVjaHQvTQpVdHJpbGxvL00KVXpiZWsvTQpVemJla2lzdGFuL00KVXppL1NNClYvTQpWQQpWQVQvTQpWQVgKVkFYZXMKVkNSL00KVkQvTQpWRFQKVkRVClZGClZGVy9NClZHClZHQQpWSEYvTQpWSFMKVkkvTQpWSVAvU00KVklTVEEKVkoKVkxGL00KVk9BClZQClZUClZUT0wKVmEvTQpWYWRlci9NClZhZHV6L00KVmFsL00KVmFsYXJpZS9NClZhbGRlei9NClZhbGVuY2lhL1NNClZhbGVudGkvTQpWYWxlbnRpbi9NClZhbGVudGluZS9NClZhbGVudGluby9NClZhbGVuenVlbGEvTQpWYWxlcmlhL00KVmFsZXJpYW4vTQpWYWxlcmllL00KVmFsZXJ5L00KVmFsaGFsbGEvTQpWYWxpdW0vTVMKVmFsa3lyaWUvU00KVmFsbGVqbwpWYWxsZXR0YS9NClZhbG9pcy9NClZhbHBhcmFpc28vTQpWYWx2b2xpbmUvTQpWYW4vTQpWYW5jZS9NClZhbmNvdXZlci9NClZhbmRhbC9NUwpWYW5kZXJiaWx0L00KVmFuZHlrZS9NClZhbmVzc2EvTQpWYW5nL00KVmFudWF0dS9NClZhbnpldHRpL00KVmFyYW5hc2kvTQpWYXJlc2UvTQpWYXJnYXMvTQpWYXNlbGluZS9TTQpWYXNxdWV6L00KVmFzc2FyL00KVmF0aWNhbi9NClZhdWJhbi9NClZhdWdoYW4vTQpWYXVnaG4vTQpWYXpxdWV6L00KVmVibGVuL00KVmVkYS9TTQpWZWRhbnRhL00KVmVnYS9TTQpWZWdhcy9NClZlZ2VtaXRlL00KVmVsYS9NClZlbGFzcXVlei9NClZlbGF6cXVlei9NClZlbGNyby9NUwpWZWxlei9NClZlbG1hL00KVmVsdmVldGEvTQpWZW5ldGlhbi9TTQpWZW5lenVlbGEvTQpWZW5lenVlbGFuL1NNClZlbmljZS9NClZlbm4vTQpWZW50b2xpbi9NClZlbnVzL01TClZlbnVzaWFuL00KVmVyYS9NClZlcmFjcnV6L00KVmVyZGUvTQpWZXJkaS9NClZlcmR1bi9NClZlcml6b24vTQpWZXJsYWluZS9NClZlcm1lZXIvTQpWZXJtb250L1pNUgpWZXJtb250ZXIvTQpWZXJuL00KVmVybmEvTQpWZXJuZS9NClZlcm5vbi9NClZlcm9uYS9NClZlcm9uZXNlL00KVmVyb25pY2EvTQpWZXJzYWlsbGVzL00KVmVzYWxpdXMvTQpWZXNwYXNpYW4vTQpWZXNwdWNjaS9NClZlc3RhL00KVmVzdXZpdXMvTQpWaWFjb20vTQpWaWFncmEvTQpWaWMvTQpWaWNlbnRlL00KVmljaHkvTQpWaWNraS9NClZpY2tpZS9NClZpY2tzYnVyZy9NClZpY2t5L00KVmljdG9yL00KVmljdG9yaWEvTQpWaWN0b3JpYW4vTVMKVmljdG9yaWFuaXNtClZpY3Ryb2xhL00KVmlkYWwvTQpWaWVubmEvTQpWaWVubmVzZS9NClZpZW50aWFuZS9NClZpZXRjb25nL00KVmlldG1pbmgvTQpWaWV0bmFtL00KVmlldG5hbWVzZS9NClZpamF5YW5hZ2FyL00KVmlqYXlhd2FkYS9NClZpa2luZy9NUwpWaWxhL00KVmlsbGEvTQpWaWxsYXJyZWFsL00KVmlsbG9uL00KVmlsbWEvTQpWaWxuaXVzL00KVmlseXVpL00KVmluY2UvTQpWaW5jZW50L00KVmluZGVtaWF0cml4L00KVmluc29uL00KVmlvbGEvTQpWaW9sZXQvTQpWaXJnaWUvTQpWaXJnaWwvTQpWaXJnaW5pYS9NClZpcmdpbmlhbi9TTQpWaXJnby9TTQpWaXNhL00KVmlzYXlhbnMvTQpWaXNobnUvTQpWaXNpZ290aC9NClZpc2lnb3RocwpWaXN0dWxhL00KVml0aW0vTQpWaXRvL00KVml0dXMvTQpWaXZhbGRpL00KVml2ZWthbmFuZGEvTQpWaXZpYW4vTQpWaXZpZW5uZS9NClZsYWQvTQpWbGFkaW1pci9NClZsYWRpdm9zdG9rL00KVmxhbWluY2svTQpWbGFzaWMvTQpWb0lQClZvZ3VlL00KVm9sY2tlci9NClZvbGRlbW9ydC9NClZvbGdhL00KVm9sZ29ncmFkL00KVm9sa3N3YWdlbi9NClZvbHN0ZWFkL00KVm9sdGEvTQpWb2x0YWlyZS9NClZvbHZvL00KVm9uZGEvTQpWb25uZWd1dC9NClZvcm9uZXpoL00KVm9yc3Rlci9NClZveWFnZXIvTQpWdApWdWl0dG9uL00KVnVsY2FuL00KVnVsZwpWdWxnYXRlL1NNClcvTURUCldBCldBQwpXQVNQL00KV0FUUy9NCldDCldITy9NCldJCldNRApXTlcvTQpXUApXU1cvTQpXVE8KV1YKV1cKV1dJCldXSUkKV1dXL00KV1kKV1lTSVdZRwpXYWJhc2gvTQpXYWMKV2Fjby9NCldhZGUvTQpXYWduZXIvTQpXYWduZXJpYW4vTQpXYWhoYWJpL00KV2Fpa2lraS9NCldhaXRlL00KV2FrZS9NCldha3NtYW4vTQpXYWxkL01OCldhbGRlbWFyL00KV2FsZGVuL00KV2FsZGVuc2lhbi9NCldhbGRoZWltL00KV2FsZG8vTQpXYWxkb3JmL00KV2FsZXMvTQpXYWxlc2EvTQpXYWxncmVlbi9NCldhbGtlci9NCldhbGttYW4vTQpXYWxsL1NNUgpXYWxsYWNlL00KV2FsbGVuc3RlaW4vTQpXYWxsZXIvTQpXYWxsaXMvTQpXYWxsb29uL00KV2FsbHMvTQpXYWxtYXJ0L00KV2FscG9sZS9NCldhbHB1cmdpc25hY2h0L00KV2Fsc2gvTQpXYWx0L01SWgpXYWx0ZXIvTQpXYWx0ZXJzL00KV2FsdG9uL00KV2FuYW1ha2VyL00KV2FuZGEvTQpXYW5nL00KV2Fua2VsL00KV2FyZC9NCldhcmUvTUcKV2FyaG9sL00KV2FyaW5nL00KV2FybmVyL00KV2FycmVuL00KV2Fyc2F3L00KV2Fyd2ljay9NCldhc2F0Y2gvTQpXYXNoL00KV2FzaGluZ3Rvbi9NCldhc2hpbmd0b25pYW4vTVMKV2Fzc2VybWFubi9NCldhdGVyYnVyeS9NCldhdGVyZm9yZC9NCldhdGVyZ2F0ZS9NCldhdGVybG9vL01TCldhdGVycy9NCldhdGtpbnMvTQpXYXRzb24vTQpXYXR0L1NNCldhdHRlYXUvTQpXYXR0cy9NCldhdHVzaS9NCldhdWdoL00KV2F2ZQpXYXluZS9NCldlYXZlci9NCldlYi9NUgpXZWJiL00KV2ViZXIvTQpXZWJlcm4vTQpXZWJzdGVyL01TCldlZC9NCldlZGRlbGwvTQpXZWRnd29vZC9NCldlZG5lc2RheS9NUwpXZWVrcy9NCldlaHJtYWNodC9NCldlaS9NCldlaWVyc3RyYXNzL00KV2VpbGwvTQpXZWluYmVyZy9NCldlaXNzL00KV2Vpc3NtdWxsZXIvTQpXZWl6bWFubi9NCldlbGRvbi9NCldlbGxhbmQvTQpXZWxsZXIvTQpXZWxsZXMvTQpXZWxsaW5ndG9uL1NNCldlbGxzL00KV2Vsc2gvTQpXZWxzaG1hbi9NCldlbHNobWVuL00KV2Vsc2h3b21hbgpXZW5kZWxsL00KV2VuZGkvTQpXZW5keS9NCldlc2FrL00KV2VzbGV5L00KV2VzbGV5YW4vTQpXZXNzZXgvTQpXZXNzb24vTQpXZXN0L1NNCldlc3Rlcm4vTVJTCldlc3Rpbmdob3VzZS9NCldlc3RtaW5zdGVyL00KV2VzdG9uL00KV2VzdHBoYWxpYS9NCldleWRlbi9NCldlemVuL00KV2hhcnRvbi9NCldoZWF0aWVzL00KV2hlYXRzdG9uZS9NCldoZWVsZXIvTQpXaGVlbGluZy9NCldoaWcvU00KV2hpcHBsZS9NCldoaXJscG9vbC9NCldoaXN0bGVyL00KV2hpdGFrZXIvTQpXaGl0ZS9TTQpXaGl0ZWZpZWxkL00KV2hpdGVoYWxsL00KV2hpdGVoZWFkL00KV2hpdGVob3JzZS9NCldoaXRlbGV5L00KV2hpdGZpZWxkL00KV2hpdGxleS9NCldoaXRtYW4vTQpXaGl0bmV5L00KV2hpdHN1bmRheS9NUwpXaGl0dGllci9NCldpRmkKV2ljY2EvTQpXaWNoaXRhL00KV2llbWFyL00KV2llc2VsL00KV2llc2VudGhhbC9NCldpZ2dpbnMvTQpXaWduZXIvTQpXaWkvTQpXaWtpbGVha3MKV2lraXBlZGlhL00KV2lsYmVyZm9yY2UvTQpXaWxiZXJ0L00KV2lsYnVyL00KV2lsYnVybi9NCldpbGNveC9NCldpbGRhL00KV2lsZGUvTVIKV2lsZGVyL00KV2lsZXMvTQpXaWxleS9NCldpbGZvcmQvTQpXaWxmcmVkL00KV2lsZnJlZG8vTQpXaWxoZWxtL00KV2lsaGVsbWluYS9NCldpbGtlcnNvbi9NCldpbGtlcy9NCldpbGtpbnMvTQpXaWxraW5zb24vTQpXaWxsL00KV2lsbGEvTQpXaWxsYW1ldHRlL00KV2lsbGFyZC9NCldpbGxlbXN0YWQvTQpXaWxsaWFtL1NNCldpbGxpYW1zL00KV2lsbGlhbXNvbi9NCldpbGxpZS9NCldpbGxpcy9NCldpbGx5L00KV2lsbWEvTQpXaWxtZXIvTQpXaWxtaW5ndG9uL00KV2lsc29uL00KV2lsc29uaWFuL00KV2lsdG9uL00KV2ltYmxlZG9uL00KV2ltc2V5L00KV2luY2hlbGwvTQpXaW5jaGVzdGVyL01TCldpbmRicmVha2VyL00KV2luZGV4L00KV2luZGhvZWsvTQpXaW5kb3dzL00KV2luZHNvci9TTQpXaW5kd2FyZC9NCldpbmVzYXAvTQpXaW5mcmVkL00KV2luZnJleS9NCldpbmlmcmVkL00KV2lua2xlL00KV2lubmViYWdvL00KV2lubmllL00KV2lubmlwZWcvTQpXaW5zdG9uL00KV2ludGVycy9NCldpbnRocm9wL00KV2lzCldpc2MKV2lzY29uc2luL00KV2lzY29uc2luaXRlL01TCldpc2UvTQpXaXR0L00KV2l0dGdlbnN0ZWluL00KV2l0d2F0ZXJzcmFuZC9NCldtL00KV29iZWdvbi9NCldvZGVob3VzZS9NCldvbGYvTQpXb2xmZS9NCldvbGZmL00KV29sZmdhbmcvTQpXb2xsb25nb25nL00KV29sbHN0b25lY3JhZnQvTQpXb2xzZXkvTQpXb2x2ZXJoYW1wdG9uCldvbmRlci9NCldvbmRlcmJyYS9NCldvbmcvTQpXb29kL1NNCldvb2RhcmQvTQpXb29kaHVsbC9NCldvb2Ryb3cvTQpXb29kcy9NCldvb2RzdG9jay9NCldvb2R3YXJkL00KV29vbGYvTQpXb29saXRlL00KV29vbG9uZ29uZy9NCldvb2x3b3J0aC9NCldvb3N0ZXIvTQpXb290ZW4vTQpXb3JjZXN0ZXIvU00KV29yY2VzdGVyc2hpcmUvTQpXb3Jkc3dvcnRoL00KV29ya21hbi9NCldvcm1zL00KV290YW4vTQpXb3Zva2EvTQpXb3puaWFrL00KV296emVjay9NCldyYW5nZWxsL00KV3Jlbi9NCldyaWdodC9NCldyaWdsZXkvTQpXcm9jbGF3L00KV3UvTQpXdWhhbi9NCld1cmxpdHplci9NCld5YXR0L00KV3ljaGVybGV5L00KV3ljbGlmZmUvTQpXeWV0aC9NCld5bGllL00KV3lubi9NCld5bwpXeW9taW5nL00KV3lvbWluZ2l0ZS9TTQpYL00KWEVtYWNzL00KWEwvTQpYTUwKWFMKWFhMClhhbmFkdS9NClhhbnRoaXBwZS9NClhhdmllci9NClhlL1NNClhlbmFraXMvTQpYZW5pYS9NClhlbm9waG9uL00KWGVyb3gvTVMKWGVyeGVzL00KWGhvc2EvTQpYaSdhbi9NClhpYW4vU00KWGlhb3BpbmcvTQpYaW1lbmVzL00KWGluZ3UvTQpYaW9uZ251L00KWG1hcy9NUwpYb2NoaXBpbGxpL00KWHV6aG91L00KWS9NCllNQ0EvTQpZTUhBCllNTVYKWVQKWVdDQS9NCllXSEEKWWFjYy9NCllhaG9vL00KWWFodHplZS9NCllhaHdlaC9NCllha2ltYS9NCllha3V0L00KWWFrdXRzay9NCllhbGUvTQpZYWxvdy9NCllhbHRhL00KWWFsdS9NCllhbWFnYXRhL00KWWFtYWhhL00KWWFtb3Vzc291a3JvL00KWWFuZy9NCllhbmdvbi9NCllhbmd0emUvTQpZYW5rL1NNCllhbmtlZS9TTQpZYW9iYW5nL00KWWFvdW5kZS9NCllhcXVpL00KWWFyZW4KWWFyb3NsYXZsL00KWWF0YXJvL00KWWF0ZXMvTQpZYi9NClllYWdlci9NClllYXRzL00KWWVrYXRlcmluYnVyZy9NClllbGxvd2tuaWZlL00KWWVsbG93c3RvbmUvTQpZZWx0c2luL00KWWVtZW4vTQpZZW1lbmkvU00KWWVtZW5pdGUKWWVuaXNlaS9NClllcmV2YW4vTQpZZXJrZXMvTQpZZXNlbmlhL00KWWV2dHVzaGVua28vTQpZZ2dkcmFzaWwvTQpZaWRkaXNoL00KWW1pci9NCllvZGEvTQpZb2tuYXBhdGF3cGhhL00KWW9rby9NCllva29oYW1hL00KWW9sYW5kYS9NCllvbmcvTQpZb25rZXJzL00KWW9yay9NCllvcmtpZS9NCllvcmtzaGlyZS9NUwpZb3JrdG93bi9NCllvcnViYS9NCllvc2VtaXRlL00KWW9zc2FyaWFuL00KWW91VHViZS9NCllvdW5nL00KWW91bmdzdG93bi9NCllwcmVzL00KWXBzaWxhbnRpL00KWXVhbi9NCll1Y2F0YW4vTQpZdWdvL00KWXVnb3NsYXYvTVMKWXVnb3NsYXZpYS9NCll1Z29zbGF2aWFuL1NNCll1a29uL00KWXVsZS9TTQpZdWxldGlkZS9NUwpZdW1hL1NNCll1bm5hbi9NCll1cmkvTQpZdmVzL00KWXZldHRlL00KWXZvbm5lL00KWi9TTU5YVApaYWNoYXJpYWgvTQpaYWNoYXJ5L00KWmFjaGVyeS9NClphZ3JlYi9NClphaXJlL00KWmFpcmlhbgpaYW1iZXppL00KWmFtYmlhL00KWmFtYmlhbi9TTQpaYW1ib25pL00KWmFtZW5ob2YvTQpaYW1vcmEvTQpaYW5lL00KWmFudWNrL00KWmFuemliYXIvTQpaYXBhdGEvTQpaYXBvcm96aHllL00KWmFwb3RlYy9NClphcHBhL00KWmFyYS9NClphcmF0aHVzdHJhL00KWmVhbGFuZC9NClplYmVkZWUvTQpaZWNoYXJpYWgvTQpaZWRla2lhaC9NClplZG9uZy9NClplZmZpcmVsbGkvTQpaZWtlL00KWmVsaWcvTQpaZWxtYS9NClplbi9NClplbmdlci9NClplbm8vTQpaZXBoYW5pYWgvTQpaZXBoeXJ1cy9NClplc3QvTQpaZXVzL00KWmhkYW5vdgpaaGVuZ3pob3UvTQpaaGl2YWdvL00KWmh1a292L00KWmliby9NClppZWdmZWxkL00KWmllZ2xlci9NClppZ2d5L00KWmlrYQpaaW1iYWJ3ZS9NClppbWJhYndlYW4vU00KWmltbWVybWFuL00KWmluZmFuZGVsL00KWmlvbi9TTQpaaW9uaXNtL1NNClppb25pc3QvU00KWmlwbG9jL00KWm4vTQpab2UvTQpab2xhL00KWm9sbHZlcmVpbi9NClpvbG9mdC9NClpvbWJhL00KWm9ybi9NClpvcm9hc3Rlci9NClpvcm9hc3RyaWFuL01TClpvcm9hc3RyaWFuaXNtL1NNClpvcnJvL00KWm9zbWEvTQpaci9NClpzaWdtb25keS9NClp1YmVuZWxnZW51YmkvTQpadWJlbmVzY2hhbWFsaS9NClp1a29yL00KWnVsdS9TTQpadWx1bGFuZApadW5pL00KWnVyaWNoL00KWndpbmdsaS9NClp3b3J5a2luL00KWnlydGVjL00KWnl1Z2Fub3YvTQpaenoKYS9TCmFhaAphYXJkdmFyay9TTQphYi9TRFkKYWJhY2sKYWJhY3VzL01TCmFiYWZ0CmFiYWxvbmUvU00KYWJhbmRvbi9MU0RHCmFiYW5kb25tZW50L00KYWJhc2UvTEdEUwphYmFzZW1lbnQvTQphYmFzaC9HTERTCmFiYXNoZWQvVVkKYWJhc2htZW50L00KYWJhdGUvTEdEUwphYmF0ZWQvVQphYmF0ZW1lbnQvTQphYmF0dG9pci9NUwphYmJlL1NNCmFiYmVzcy9NUwphYmJleS9NUwphYmJvdC9NUwphYmJyCmFiYnJldi9TCmFiYnJldmlhdGUvRFNHTlgKYWJicmV2aWF0aW9uL00KYWJkaWNhdGUvR05EU1gKYWJkaWNhdGlvbi9NCmFiZG9tZW4vU00KYWJkb21pbmFsCmFiZHVjdC9EU0cKYWJkdWN0ZWUvTVMKYWJkdWN0aW9uL1NNCmFiZHVjdG9yL01TCmFiZWFtCmFiZXJyYW50CmFiZXJyYXRpb24vTVMKYWJlcnJhdGlvbmFsCmFiZXQvUwphYmV0dGVkCmFiZXR0aW5nCmFiZXR0b3IvU00KYWJleWFuY2UvTQphYmhvci9TCmFiaG9ycmVkCmFiaG9ycmVuY2UvTQphYmhvcnJlbnQvWQphYmhvcnJpbmcKYWJpZGFuY2UvTQphYmlkZS9HUwphYmlkaW5nL1kKYWJpbGl0eS9JRU1TCmFiamVjdC9ZUAphYmplY3Rpb24vTQphYmplY3RuZXNzL00KYWJqdXJhdGlvbi9TTQphYmp1cmF0b3J5CmFianVyZS9aR0RSUwphYmp1cmVyL00KYWJsYXRlL1hHTlZEUwphYmxhdGlvbi9NCmFibGF0aXZlL01TCmFibGF6ZQphYmxlL1VUCmFibGVyCmFibG9vbQphYmx1dGlvbi9TTQphYm5lZ2F0ZS9HTkRTCmFibmVnYXRpb24vTQphYm5vcm1hbC9ZCmFibm9ybWFsaXR5L1NNCmFib2FyZAphYm9kZS9NUwphYm9saXNoL0dEUwphYm9saXRpb24vTQphYm9saXRpb25pc20vTQphYm9saXRpb25pc3QvU00KYWJvbWluYWJsZQphYm9taW5hYmx5CmFib21pbmF0ZS9EU0dOWAphYm9taW5hdGlvbi9NCmFib3JpZ2luYWwvTVMKYWJvcmlnaW5lL1NNCmFib3JuaW5nCmFib3J0L0dWRFMKYWJvcnRpb24vTVMKYWJvcnRpb25pc3QvTVMKYWJvcnRpdmUvWQphYm91bmQvRFNHCmFib3V0CmFib3ZlL00KYWJvdmVib2FyZAphYnJhY2FkYWJyYS9NCmFicmFkZS9HRFMKYWJyYXNpb24vTVMKYWJyYXNpdmUvTVlQUwphYnJhc2l2ZW5lc3MvTQphYnJlYXN0CmFicmlkZ2UvRFNHCmFicmlkZ21lbnQvTVMKYWJyb2FkCmFicm9nYXRlL1hHTkRTCmFicm9nYXRpb24vTQphYnJvZ2F0b3IvTVMKYWJydXB0L1RQUlkKYWJydXB0bmVzcy9NCmFicy9NCmFic2Nlc3MvTURTRwphYnNjaXNzYS9TTQphYnNjaXNzaW9uL00KYWJzY29uZC9aR1NEUgphYnNjb25kZXIvTQphYnNlaWwvTURTRwphYnNlbmNlL1NNCmFic2VudC9EWVNHCmFic2VudGVlL01TCmFic2VudGVlaXNtL00KYWJzZW50bWluZGVkL1lQCmFic2VudG1pbmRlZG5lc3MvTQphYnNpbnRoZS9NCmFic29sdXRlL1BNWVROUwphYnNvbHV0ZW5lc3MvTQphYnNvbHV0aW9uL00KYWJzb2x1dGlzbS9NCmFic29sdXRpc3QvTVMKYWJzb2x2ZS9EU0cKYWJzb3JiL0FHRFMKYWJzb3JiYW5jZQphYnNvcmJlbmN5L00KYWJzb3JiZW50L1NNCmFic29yYmluZy9ZCmFic29ycHRpb24vTQphYnNvcnB0aXZlCmFic3RhaW4vRFJaR1MKYWJzdGFpbmVyL00KYWJzdGVtaW91cy9QWQphYnN0ZW1pb3VzbmVzcy9NCmFic3RlbnRpb24vTVMKYWJzdGluZW5jZS9NCmFic3RpbmVudAphYnN0cmFjdC9HU1BNRFkKYWJzdHJhY3RlZC9ZUAphYnN0cmFjdGVkbmVzcy9NCmFic3RyYWN0aW9uL1NNCmFic3RyYWN0bmVzcy9NUwphYnN0cnVzZS9ZUAphYnN0cnVzZW5lc3MvTQphYnN1cmQvVFBSWQphYnN1cmRpc3QvTVMKYWJzdXJkaXR5L1NNCmFic3VyZG5lc3MvTQphYnVuZGFuY2UvU00KYWJ1bmRhbnQvWQphYnVzZSdzCmFidXNlL0VHVkRTCmFidXNlci9NUwphYnVzaXZlL1lQCmFidXNpdmVuZXNzL00KYWJ1dC9TTAphYnV0bWVudC9NUwphYnV0dGVkCmFidXR0aW5nCmFidXp6CmFieXNtYWwvWQphYnlzcy9NUwphYnlzc2FsCmFjCmFjYWNpYS9NUwphY2FkZW1lL00KYWNhZGVtaWEvTQphY2FkZW1pYy9TTQphY2FkZW1pY2FsL1kKYWNhZGVtaWNpYW4vTVMKYWNhZGVteS9TTQphY2FudGh1cy9NUwphY2NlZGUvR0RTCmFjY2VsZXJhdGUvR05YRFMKYWNjZWxlcmF0aW9uL00KYWNjZWxlcmF0b3IvU00KYWNjZW50L01EU0cKYWNjZW50ZWQvVQphY2NlbnR1YWwKYWNjZW50dWF0ZS9HTkRTCmFjY2VudHVhdGlvbi9NCmFjY2VwdC9EU0JHCmFjY2VwdGFiaWxpdHkvTQphY2NlcHRhYmxlbmVzcy9NCmFjY2VwdGFibHkvVQphY2NlcHRhbmNlL1NNCmFjY2VwdGF0aW9uL01TCmFjY2VwdGVkL1UKYWNjZXNzL01EU0cKYWNjZXNzaWJpbGl0eS9JTQphY2Nlc3NpYmxlL0kKYWNjZXNzaWJseS9JCmFjY2Vzc2lvbi9NREdTCmFjY2Vzc29yaXplL0RTRwphY2Nlc3NvcnkvU00KYWNjaWRlbnQvTVMKYWNjaWRlbnRhbC9TTVkKYWNjbGFpbS9NREdTCmFjY2xhbWF0aW9uL00KYWNjbGltYXRlL0RTR04KYWNjbGltYXRpb24vTQphY2NsaW1hdGl6YXRpb24vTQphY2NsaW1hdGl6ZS9EU0cKYWNjbGl2aXR5L1NNCmFjY29sYWRlL1NNCmFjY29tbW9kYXRlL1hHTkRTCmFjY29tbW9kYXRpbmcvWQphY2NvbW1vZGF0aW9uL00KYWNjb21wYW5pZWQvVQphY2NvbXBhbmltZW50L01TCmFjY29tcGFuaXN0L1NNCmFjY29tcGFueS9EU0cKYWNjb21wbGljZS9TTQphY2NvbXBsaXNoL0RTTEcKYWNjb21wbGlzaGVkL1UKYWNjb21wbGlzaG1lbnQvTVMKYWNjb3JkL0dNRFMKYWNjb3JkYW5jZS9NCmFjY29yZGFudAphY2NvcmRpbmcvWQphY2NvcmRpb24vTVMKYWNjb3JkaW9uaXN0L01TCmFjY29zdC9HTURTCmFjY291bnQvTURTQkcKYWNjb3VudGFiaWxpdHkvTQphY2NvdW50YWJsZS9VCmFjY291bnRhbmN5L00KYWNjb3VudGFudC9NUwphY2NvdW50ZWQvVQphY2NvdW50aW5nL00KYWNjb3V0ZXIvU0dECmFjY291dGVybWVudHMvTQphY2NyZWRpdC9TR0QKYWNjcmVkaXRhdGlvbi9NCmFjY3JlZGl0ZWQvVQphY2NyZXRpb24vTVMKYWNjcnVhbC9NUwphY2NydWUvR0RTCmFjY3QKYWNjdWx0dXJhdGUvRFNHTgphY2N1bHR1cmF0aW9uL00KYWNjdW11bGF0ZS9YR05WRFMKYWNjdW11bGF0aW9uL00KYWNjdW11bGF0b3IvTVMKYWNjdXJhY3kvSU0KYWNjdXJhdGUvSVkKYWNjdXJhdGVuZXNzL00KYWNjdXJzZWQvUAphY2N1cnNlZG5lc3MvTQphY2N1c2F0aW9uL01TCmFjY3VzYXRpdmUvTVMKYWNjdXNhdG9yeQphY2N1c2UvWkdEUlMKYWNjdXNlci9NCmFjY3VzaW5nL1kKYWNjdXN0b20vRFNHCmFjY3VzdG9tZWQvVQphY2UvRFNNRwphY2VyYmF0ZS9EU0cKYWNlcmJpYwphY2VyYmljYWxseQphY2VyYml0eS9NCmFjZXRhbWlub3BoZW4vTQphY2V0YXRlL01TCmFjZXRpYwphY2V0b25lL00KYWNldG9uaWMKYWNldHlsCmFjZXR5bGVuZS9NCmFjaGUvRFNNRwphY2hlbmUvTVMKYWNoaWV2ZS9CTFpHRFJTCmFjaGlldmVtZW50L1NNCmFjaGlldmVyL00KYWNoaW5nL1kKYWNob28vTQphY2hyb21hdGljCmFjaHkvVFIKYWNpZC9TTVkKYWNpZGljCmFjaWRpZnkvR0RTCmFjaWRpdHkvTQphY2lkb3Npcy9NCmFjaWR1bG91cwphY2tub3dsZWRnZS9EU0cKYWNrbm93bGVkZ2VkL1UKYWNrbm93bGVkZ21lbnQvU00KYWNtZS9TTQphY25lL00KYWNvbHl0ZS9NUwphY29uaXRlL01TCmFjb3JuL01TCmFjb3VzdGljL1MKYWNvdXN0aWNhbC9ZCmFjb3VzdGljcy9NCmFjcXVhaW50L0FHU0QKYWNxdWFpbnRhbmNlL1NNCmFjcXVhaW50YW5jZXNoaXAvTQphY3F1YWludGVkL1UKYWNxdWllc2NlL0RTRwphY3F1aWVzY2VuY2UvTQphY3F1aWVzY2VudC9ZCmFjcXVpcmUvWkdCRFJTTAphY3F1aXJlbWVudC9NCmFjcXVpc2l0aW9uL01TCmFjcXVpc2l0aXZlL1lQCmFjcXVpc2l0aXZlbmVzcy9NCmFjcXVpdC9TCmFjcXVpdHRhbC9NUwphY3F1aXR0ZWQKYWNxdWl0dGluZwphY3JlL1NNCmFjcmVhZ2UvTVMKYWNyaWQvUFRSWQphY3JpZGl0eS9NCmFjcmlkbmVzcy9NCmFjcmltb25pb3VzL1lQCmFjcmltb25pb3VzbmVzcy9NCmFjcmltb255L00KYWNyb2JhdC9NUwphY3JvYmF0aWMvUwphY3JvYmF0aWNhbGx5CmFjcm9iYXRpY3MvTQphY3JvbnltL01TCmFjcm9waG9iaWEvTQphY3JvcG9saXMvTVMKYWNyb3NzCmFjcm9zdGljL1NNCmFjcnlsYW1pZGUKYWNyeWxpYy9NUwphY3QncwphY3QvQVNER1YKYWN0aW5nL00KYWN0aW5pdW0vTQphY3Rpb24vQVNNCmFjdGlvbmFibGUKYWN0aXZhdGUvSUNBTkdTRAphY3RpdmF0aW9uL0lDQU0KYWN0aXZhdG9yL01TCmFjdGl2ZSdzCmFjdGl2ZS9JS1kKYWN0aXZlbmVzcy9NCmFjdGl2ZXMKYWN0aXZpc20vTQphY3RpdmlzdC9NUwphY3Rpdml0aWVzCmFjdGl2aXR5L0lNCmFjdG9yL0FNUwphY3RyZXNzL01TCmFjdHVhbC9ZCmFjdHVhbGl0eS9TTQphY3R1YWxpemF0aW9uL00KYWN0dWFsaXplL0dEUwphY3R1YXJpYWwKYWN0dWFyeS9TTQphY3R1YXRlL0dORFMKYWN0dWF0aW9uL00KYWN0dWF0b3IvU00KYWN1aXR5L00KYWN1bWVuL00KYWN1cHJlc3N1cmUvTQphY3VwdW5jdHVyZS9NCmFjdXB1bmN0dXJpc3QvU00KYWN1dGUvUE1ZVFJTCmFjdXRlbmVzcy9NCmFjeWNsb3Zpci9NCmFjeWwKYWQvU00KYWRhZ2UvTVMKYWRhZ2lvL01TCmFkYW1hbnQvTVkKYWRhcHQvQlpHVkRSUwphZGFwdGFiaWxpdHkvTQphZGFwdGF0aW9uL01TCmFkYXB0ZXIvTQphZGFwdGlvbi9TCmFkZC9TRFJCWkcKYWRkZW5kL01TCmFkZGVuZGEKYWRkZW5kdW0vTQphZGRlci9NCmFkZGljdC9HVk1EUwphZGRpY3Rpb24vU00KYWRkaXRpb24vU00KYWRkaXRpb25hbC9ZCmFkZGl0aXZlL1NNCmFkZGxlL0dEUwphZGRyZXNzJ3MKYWRkcmVzcy9BR0RTCmFkZHJlc3NhYmxlCmFkZHJlc3NlZC9VCmFkZHJlc3NlZS9TTQphZGR1Y2UvR0RTCmFkZW5pbmUvTQphZGVub2NhcmNpbm9tYQphZGVub2lkL1NNCmFkZW5vaWRhbAphZGVwdC9NWVBTCmFkZXB0bmVzcy9NCmFkZXF1YWN5L0lNCmFkZXF1YXRlL0lZCmFkZXF1YXRlbmVzcy9NCmFkaGVyZS9HRFMKYWRoZXJlbmNlL00KYWRoZXJlbnQvU00KYWRoZXNpb24vTQphZGhlc2l2ZS9QU00KYWRoZXNpdmVuZXNzL00KYWRpYWJhdGljCmFkaWV1L01TCmFkaW9zCmFkaXBvc2UKYWRqCmFkamFjZW5jeS9NCmFkamFjZW50L1kKYWRqZWN0aXZhbC9ZCmFkamVjdGl2ZS9NUwphZGpvaW4vR0RTCmFkam91cm4vREdMUwphZGpvdXJubWVudC9TTQphZGp1ZGdlL0dEUwphZGp1ZGljYXRlL0dOVlhEUwphZGp1ZGljYXRpb24vTQphZGp1ZGljYXRvci9TTQphZGp1ZGljYXRvcnkKYWRqdW5jdC9NUwphZGp1cmF0aW9uL01TCmFkanVyZS9HRFMKYWRqdXN0L0FHRFNMCmFkanVzdGFibGUKYWRqdXN0ZXIvU00KYWRqdXN0bWVudC9BTVMKYWRqdXRhbnQvU00KYWRtYW4vTQphZG1lbgphZG1pbi9TCmFkbWluaXN0ZXIvREdTCmFkbWluaXN0cmF0ZS9YRFNHTlYKYWRtaW5pc3RyYXRpb24vTQphZG1pbmlzdHJhdGl2ZS9ZCmFkbWluaXN0cmF0b3IvTVMKYWRtaXJhYmx5CmFkbWlyYWwvTVMKYWRtaXJhbHR5L00KYWRtaXJhdGlvbi9NCmFkbWlyZS9CWkdEUlMKYWRtaXJlci9NCmFkbWlyaW5nL1kKYWRtaXNzaWJpbGl0eS9JTQphZG1pc3NpYmxlL0kKYWRtaXNzaWJseQphZG1pc3Npb24vQU0KYWRtaXNzaW9ucwphZG1pdC9BUwphZG1pdHRhbmNlL00KYWRtaXR0ZWQvWQphZG1pdHRpbmcvQQphZG1peC9HRFMKYWRtaXh0dXJlL1NNCmFkbW9uaXNoL0xEU0cKYWRtb25pc2htZW50L01TCmFkbW9uaXRpb24vTVMKYWRtb25pdG9yeQphZG8vTQphZG9iZS9NUwphZG9sZXNjZW5jZS9TTQphZG9sZXNjZW50L1NNCmFkb3B0L0FHVkRTCmFkb3B0YWJsZQphZG9wdGVyL01TCmFkb3B0aW9uL1NNCmFkb3JhYmxlbmVzcy9NCmFkb3JhYmx5CmFkb3JhdGlvbi9NCmFkb3JlL0JaR0RSUwphZG9yZXIvTQphZG9yaW5nL1kKYWRvcm4vTEdEUwphZG9ybmVkL1UKYWRvcm5tZW50L01TCmFkcmVuYWwvTVMKYWRyZW5hbGluJ3MKYWRyZW5hbGluZS9NCmFkcmVuZXJnaWMKYWRyaWZ0CmFkcm9pdC9QWQphZHJvaXRuZXNzL00KYWRzb3JiL1NERwphZHNvcmJlbnQvTVMKYWRzb3JwdGlvbi9TTQphZHVsYXRlL0RTR04KYWR1bGF0aW9uL00KYWR1bGF0b3IvTVMKYWR1bGF0b3J5CmFkdWx0L01TCmFkdWx0ZXJhbnQvTVMKYWR1bHRlcmF0ZS9HTkRTCmFkdWx0ZXJhdGVkL1UKYWR1bHRlcmF0aW9uL00KYWR1bHRlcmVyL1NNCmFkdWx0ZXJlc3MvTVMKYWR1bHRlcm91cwphZHVsdGVyeS9TTQphZHVsdGhvb2QvTQphZHVtYnJhdGUvR05EUwphZHVtYnJhdGlvbi9NCmFkdgphZHZhbmNlL0xEU01HCmFkdmFuY2VtZW50L1NNCmFkdmFudGFnZS9FRFNNRwphZHZhbnRhZ2VvdXMvRVkKYWR2ZW50L1NNCmFkdmVudGl0aW91cy9ZCmFkdmVudHVyZS9EUlNNWkcKYWR2ZW50dXJlci9NCmFkdmVudHVyZXNvbWUKYWR2ZW50dXJlc3MvTVMKYWR2ZW50dXJpc20KYWR2ZW50dXJpc3QvUwphZHZlbnR1cm91cy9ZUAphZHZlbnR1cm91c25lc3MvTQphZHZlcmIvU00KYWR2ZXJiaWFsL1NNWQphZHZlcnNhcmlhbAphZHZlcnNhcnkvU00KYWR2ZXJzZS9QUllUCmFkdmVyc2VuZXNzL00KYWR2ZXJzaXR5L1NNCmFkdmVydC9TTURHCmFkdmVydGlzZS9MWkdEUlMKYWR2ZXJ0aXNlZC9VCmFkdmVydGlzZW1lbnQvTVMKYWR2ZXJ0aXNlci9NCmFkdmVydGlzaW5nL00KYWR2ZXJ0b3JpYWwvU00KYWR2aWNlL00KYWR2aXNhYmlsaXR5L0lNCmFkdmlzYWJsZS9JCmFkdmlzYWJseQphZHZpc2UvTERSU1pHQgphZHZpc2VkL1VZCmFkdmlzZW1lbnQvTQphZHZpc2VyL00KYWR2aXNvcnkvU00KYWR2b2NhY3kvTQphZHZvY2F0ZS9NR0RTCmFkdnQKYWR3YXJlCmFkemUvU00KYWVnaXMvTQphZXJhdGUvRFNHTgphZXJhdGlvbi9NCmFlcmF0b3IvU00KYWVyaWFsL1NNWQphZXJpYWxpc3QvTVMKYWVyaWUvTVMKYWVyb2JhdGljL1MKYWVyb2JhdGljcy9NCmFlcm9iaWMvUwphZXJvYmljYWxseQphZXJvYmljcy9NCmFlcm9kcm9tZS9NUwphZXJvZHluYW1pYy9TCmFlcm9keW5hbWljYWxseQphZXJvZHluYW1pY3MvTQphZXJvZ3JhbS9TCmFlcm9uYXV0aWMvUwphZXJvbmF1dGljYWwKYWVyb25hdXRpY3MvTQphZXJvc29sL01TCmFlcm9zcGFjZS9NCmFlc3RoZXRlL01TCmFlc3RoZXRpYy9TCmFlc3RoZXRpY2FsbHkKYWVzdGhldGljaXNtL00KYWVzdGhldGljcy9NCmFmYXIKYWZmYWJpbGl0eS9NCmFmZmFibGUKYWZmYWJseQphZmZhaXIvTVMKYWZmZWN0J3MKYWZmZWN0L0VHRFMKYWZmZWN0YXRpb24vU00KYWZmZWN0ZWQvVVkKYWZmZWN0aW5nL1kKYWZmZWN0aW9uL0VNCmFmZmVjdGlvbmF0ZS9ZCmFmZmVjdGlvbnMKYWZmZXJlbnQKYWZmaWFuY2UvR0RTCmFmZmlkYXZpdC9TTQphZmZpbGlhdGUncwphZmZpbGlhdGUvRUdORFMKYWZmaWxpYXRlZC9VCmFmZmlsaWF0aW9uL0VNCmFmZmlsaWF0aW9ucwphZmZpbml0eS9TTQphZmZpcm0vQUdEUwphZmZpcm1hdGlvbi9BTVMKYWZmaXJtYXRpdmUvTVlTCmFmZml4L0dNRFMKYWZmbGF0dXMvTQphZmZsaWN0L0dEUwphZmZsaWN0aW9uL1NNCmFmZmx1ZW5jZS9NCmFmZmx1ZW50L1kKYWZmb3JkL0dEU0IKYWZmb3JkYWJpbGl0eQphZmZvcmRhYmx5CmFmZm9yZXN0L0VHU0QKYWZmb3Jlc3RhdGlvbi9NCmFmZnJheS9NUwphZmZyb250L0dNRFMKYWZnaGFuL01TCmFmaWNpb25hZG8vTVMKYWZpZWxkCmFmaXJlCmFmbGFtZQphZmxvYXQKYWZsdXR0ZXIKYWZvb3QKYWZvcmVtZW50aW9uZWQKYWZvcmVzYWlkCmFmb3JldGhvdWdodAphZm91bAphZnJhaWQvVQphZnJlc2gKYWZ0L1JaCmFmdGVyYmlydGgvTQphZnRlcmJpcnRocwphZnRlcmJ1cm5lci9NUwphZnRlcmNhcmUvTQphZnRlcmVmZmVjdC9NUwphZnRlcmdsb3cvU00KYWZ0ZXJpbWFnZS9NUwphZnRlcmxpZmUvTQphZnRlcmxpdmVzCmFmdGVybWFya2V0L01TCmFmdGVybWF0aC9NCmFmdGVybWF0aHMKYWZ0ZXJub29uL01TCmFmdGVyc2hhdmUvU00KYWZ0ZXJzaG9jay9TTQphZnRlcnRhc3RlL1NNCmFmdGVydGhvdWdodC9TTQphZnRlcndhcmQvUwphZnRlcndvcmQvTVMKYWdhaW4KYWdhaW5zdAphZ2FwZS9NCmFnYXIvTQphZ2F0ZS9NUwphZ2F2ZS9NCmFnZS9EU01HSgphZ2Vpc20vTQphZ2Vpc3QvU00KYWdlbGVzcy9ZUAphZ2VsZXNzbmVzcy9NCmFnZW5jeS9TTQphZ2VuZGEvU00KYWdlbnQvQU1TCmFnZXJhdHVtL00KYWdnbG9tZXJhdGUvRFNNR05YCmFnZ2xvbWVyYXRpb24vTQphZ2dsdXRpbmF0ZS9EU1hHTgphZ2dsdXRpbmF0aW9uL00KYWdncmFuZGl6ZS9HTERTCmFnZ3JhbmRpemVtZW50L00KYWdncmF2YXRlL0dOWERTCmFnZ3JhdmF0aW5nL1kKYWdncmF2YXRpb24vTQphZ2dyZWdhdGUvTUdORFNYCmFnZ3JlZ2F0aW9uL00KYWdncmVzc2lvbi9NCmFnZ3Jlc3NpdmUvUFkKYWdncmVzc2l2ZW5lc3MvTQphZ2dyZXNzb3IvU00KYWdncmlldmUvRFNHCmFnZ3JvCmFnaGFzdAphZ2lsZS9ZCmFnaWxpdHkvTQphZ2luZy9NCmFnaXRhdGUvWEdORFMKYWdpdGF0aW9uL00KYWdpdGF0b3IvTVMKYWdpdHByb3AvTQphZ2xlYW0KYWdsaXR0ZXIKYWdsb3cKYWdub3N0aWMvTVMKYWdub3N0aWNpc20vTQphZ28KYWdvZwphZ29uaXN0L1MKYWdvbml6ZS9HRFMKYWdvbml6aW5nL1kKYWdvbnkvU00KYWdvcmFwaG9iaWEvTQphZ29yYXBob2JpYy9NUwphZ3Jhcmlhbi9NUwphZ3JhcmlhbmlzbS9NCmFncmVlL0VCTERTCmFncmVlYWJsZW5lc3MvRU0KYWdyZWVhYmx5L0UKYWdyZWVpbmcvRQphZ3JlZW1lbnQvRVNNCmFncmlidXNpbmVzcy9NUwphZ3JpY3VsdHVyYWwvWQphZ3JpY3VsdHVyYWxpc3QvTVMKYWdyaWN1bHR1cmUvTQphZ3JpY3VsdHVyaXN0L01TCmFncm9ub21pYwphZ3Jvbm9taXN0L01TCmFncm9ub215L00KYWdyb3VuZAphZ3VlL00KYWgKYWhhCmFoY2hvbwphaGVhZAphaGVtCmFob3kKYWlkL1NNREcKYWlkZS9TTQphaWRlZC9VCmFpZ3JldHRlL01TCmFpbC9TRExHCmFpbGVyb24vU00KYWlsbWVudC9TTQphaW0vU01ERwphaW1sZXNzL1lQCmFpbWxlc3NuZXNzL00KYWluJ3QKYWlyL1NNREpHCmFpcmJhZy9NUwphaXJiYXNlL1NNCmFpcmJlZC9TCmFpcmJvcm5lCmFpcmJydXNoL01EU0cKYWlyYnVzL01TCmFpcmNyYWZ0L00KYWlyY3JhZnRtYW4KYWlyY3JhZnRtZW4KYWlyY3Jldy9TCmFpcmRyb21lL1MKYWlyZHJvcC9TTQphaXJkcm9wcGVkCmFpcmRyb3BwaW5nCmFpcmZhcmUvU00KYWlyZmllbGQvU00KYWlyZmxvdy9NCmFpcmZvaWwvU00KYWlyZnJlaWdodC9NCmFpcmd1bnMKYWlyaGVhZC9TTQphaXJpbHkKYWlyaW5lc3MvTQphaXJpbmcvTQphaXJsZXNzL1AKYWlybGVzc25lc3MvTQphaXJsZXR0ZXJzCmFpcmxpZnQvU0dNRAphaXJsaW5lL1JTTVoKYWlybGluZXIvTQphaXJsb2NrL1NNCmFpcm1haWwvR1NNRAphaXJtYW4vTQphaXJtZW4KYWlycGxhbmUvTVMKYWlycGxheS9NCmFpcnBvcnQvU00KYWlyc2hpcC9TTQphaXJzaG93L1MKYWlyc2ljay9QCmFpcnNpY2tuZXNzL00KYWlyc3BhY2UvTQphaXJzcGVlZAphaXJzdHJpa2UvTVMKYWlyc3RyaXAvU00KYWlydGlnaHQKYWlydGltZS9NCmFpcndhdmVzL00KYWlyd2F5L01TCmFpcndvbWFuCmFpcndvbWVuCmFpcndvcnRoaW5lc3MvTQphaXJ3b3J0aHkvUAphaXJ5L1BUUgphaXNsZS9NUwphaXRjaC9NUwphamFyCmFrYQpha2ltYm8KYWtpbgphbGFiYXN0ZXIvTQphbGFjawphbGFjcml0eS9NCmFsYXJtL0dNRFMKYWxhcm1pbmcvWQphbGFybWlzdC9TTQphbGFzCmFsYi9TTQphbGJhY29yZS9TTQphbGJhdHJvc3MvTVMKYWxiZWl0CmFsYmluaXNtL00KYWxiaW5vL01TCmFsYnVtL01OUwphbGJ1bWVuL00KYWxidW1pbi9NCmFsYnVtaW5vdXMKYWxjaGVtaXN0L1NNCmFsY2hlbXkvTQphbGNvaG9sL1NNCmFsY29ob2xpYy9NUwphbGNvaG9saWNhbGx5CmFsY29ob2xpc20vTQphbGNvdmUvTVMKYWxkZXIvTVMKYWxkZXJtYW4vTQphbGRlcm1lbgphbGRlcndvbWFuL00KYWxkZXJ3b21lbgphbGUvU01WCmFsZWF0b3J5CmFsZWhvdXNlL1NNCmFsZW1iaWMvU00KYWxlcnQvR01EWVBTCmFsZXJ0bmVzcy9NCmFsZXdpZmUvTQphbGV3aXZlcwphbGZhbGZhL00KYWxmcmVzY28KYWxnYS9NCmFsZ2FlCmFsZ2FsCmFsZ2VicmEvU00KYWxnZWJyYWljCmFsZ2VicmFpY2FsbHkKYWxnb3JpdGhtL1NNCmFsZ29yaXRobWljCmFsaWFzL0dNRFMKYWxpYmkvR01EUwphbGllbi9CR01EUwphbGllbmFibGUvSVUKYWxpZW5hdGUvRFNHTgphbGllbmF0aW9uL00KYWxpZW5pc3QvU00KYWxpZ2h0L0dEUwphbGlnbi9BTEdEUwphbGlnbmVkL1UKYWxpZ25lci9NUwphbGlnbm1lbnQvQU1TCmFsaWtlL1UKYWxpbWVudC9NRFNHCmFsaW1lbnRhcnkKYWxpbW9ueS9NCmFsaXZlbmVzcy9NCmFsaXlhaC9NCmFsaXlhaHMKYWxrYWxpL00KYWxrYWxpZXMKYWxrYWxpbmUKYWxrYWxpbml0eS9NCmFsa2FsaXplL0RTRwphbGthbG9pZC9TTQphbGt5ZC9NUwphbGwvTQphbGxheS9HRFMKYWxsZWdhdGlvbi9NUwphbGxlZ2UvR0RTCmFsbGVnZWQvWQphbGxlZ2lhbmNlL01TCmFsbGVnb3JpYwphbGxlZ29yaWNhbC9ZCmFsbGVnb3Jpc3QvTVMKYWxsZWdvcnkvU00KYWxsZWdyZXR0by9NUwphbGxlZ3JvL01TCmFsbGVsZS9NUwphbGxlbHVpYS9TTQphbGxlcmdlbi9TTQphbGxlcmdlbmljCmFsbGVyZ2ljCmFsbGVyZ2ljYWxseQphbGxlcmdpc3QvU00KYWxsZXJneS9TTQphbGxldmlhdGUvRFNHTgphbGxldmlhdGlvbi9NCmFsbGV5L01TCmFsbGV5d2F5L1NNCmFsbGlhbmNlL1NNCmFsbGlnYXRvci9NUwphbGxpdGVyYXRlL0RTWEdOVgphbGxpdGVyYXRpb24vTQphbGxpdGVyYXRpdmUvWQphbGxvY2F0ZS9BRFNHTgphbGxvY2F0aW9uL0FNCmFsbG9jYXRpb25zCmFsbG90L0xTCmFsbG90bWVudC9TTQphbGxvdHRlZAphbGxvdHRpbmcKYWxsb3ZlcgphbGxvdy9FR0RTCmFsbG93YWJsZS9VCmFsbG93YWJseQphbGxvd2FuY2UvU00KYWxsb3kvR01EUwphbGxveWVkL1UKYWxsc3BpY2UvTQphbGx1ZGUvR0RTCmFsbHVyZS9NR0xEUwphbGx1cmVtZW50L01TCmFsbHVyaW5nL1kKYWxsdXNpb24vU00KYWxsdXNpdmUvUFkKYWxsdXNpdmVuZXNzL00KYWxsdXZpYWwvTQphbGx1dml1bS9TTQphbGx5L0dEU00KYWxtYW5hYy9TTQphbG1pZ2h0eQphbG1vbmQvTVMKYWxtb25lci9TTQphbG1vc3QKYWxtcy9NCmFsbXNob3VzZS9NUwphbG9lL1NNCmFsb2Z0CmFsb2hhL01TCmFsb25lCmFsb25nCmFsb25nc2hvcmUKYWxvbmdzaWRlCmFsb29mL1BZCmFsb29mbmVzcy9NCmFsb3VkCmFscC9TTQphbHBhY2EvTVMKYWxwaGEvTVMKYWxwaGFiZXQvU00KYWxwaGFiZXRpYwphbHBoYWJldGljYWwvWQphbHBoYWJldGl6YXRpb24vU00KYWxwaGFiZXRpemUvWkdEUlMKYWxwaGFiZXRpemVyL00KYWxwaGFudW1lcmljCmFscGhhbnVtZXJpY2FsL1kKYWxwaW5lL1MKYWxyZWFkeQphbHJpZ2h0CmFsc28KYWx0L1MKYWx0YXIvTVMKYWx0YXJwaWVjZS9TTQphbHRlci9HREJTCmFsdGVyYWJsZS9VCmFsdGVyYXRpb24vTVMKYWx0ZXJjYXRpb24vU00KYWx0ZXJlZC9VCmFsdGVybmF0ZS9EU01ZR05WWAphbHRlcm5hdGlvbi9NCmFsdGVybmF0aXZlL01ZUwphbHRlcm5hdG9yL1NNCmFsdGhvdWdoCmFsdGltZXRlci9NUwphbHRpdHVkZS9NUwphbHRvL1NNCmFsdG9nZXRoZXIKYWx0cnVpc20vTQphbHRydWlzdC9TTQphbHRydWlzdGljCmFsdHJ1aXN0aWNhbGx5CmFsdW0vU00KYWx1bWluYS9NCmFsdW1pbnVtL00KYWx1bW5hL00KYWx1bW5hZQphbHVtbmkKYWx1bW51cy9NCmFsdmVvbGFyL1MKYWx3YXlzCmFtL04KYW1hbGdhbS9TTQphbWFsZ2FtYXRlL1hHTkRTCmFtYWxnYW1hdGlvbi9NCmFtYW51ZW5zZXMKYW1hbnVlbnNpcy9NCmFtYXJhbnRoL00KYW1hcmFudGhzCmFtYXJldHRvL00KYW1hcnlsbGlzL01TCmFtYXNzL0dEUwphbWF0ZXVyL1NNCmFtYXRldXJpc2gvWVAKYW1hdGV1cmlzaG5lc3MvTQphbWF0ZXVyaXNtL00KYW1hdG9yeQphbWF6ZS9MTUdEUwphbWF6ZW1lbnQvTQphbWF6aW5nL1kKYW1hem9uL01TCmFtYXpvbmlhbgphbWJhc3NhZG9yL1NNCmFtYmFzc2Fkb3JpYWwKYW1iYXNzYWRvcnNoaXAvTVMKYW1iYXNzYWRyZXNzL01TCmFtYmVyL00KYW1iZXJncmlzL00KYW1iaWFuY2UvTVMKYW1iaWRleHRlcml0eS9NCmFtYmlkZXh0cm91cy9ZCmFtYmllbnQKYW1iaWd1aXR5L1NNCmFtYmlndW91cy9VWQphbWJpdAphbWJpdGlvbi9NUwphbWJpdGlvdXMvWVAKYW1iaXRpb3VzbmVzcy9NCmFtYml2YWxlbmNlL00KYW1iaXZhbGVudC9ZCmFtYmxlL01aR0RSUwphbWJsZXIvTQphbWJyb3NpYS9NCmFtYnJvc2lhbAphbWJ1bGFuY2UvTVMKYW1idWxhbmNlbWFuCmFtYnVsYW5jZW1lbgphbWJ1bGFuY2V3b21hbgphbWJ1bGFuY2V3b21lbgphbWJ1bGFudAphbWJ1bGF0ZS9EU1hHTgphbWJ1bGF0aW9uL00KYW1idWxhdG9yeS9TTQphbWJ1c2NhZGUvTUdEUwphbWJ1c2gvR01EUwphbWVsaW9yYXRlL0dOVkRTCmFtZWxpb3JhdGlvbi9NCmFtZW4vQgphbWVuYWJpbGl0eS9NCmFtZW5hYmx5CmFtZW5kL0JMR0RTCmFtZW5kbWVudC9TTQphbWVuaXR5L1NNCmFtZXJjZS9HTERTCmFtZXJjZW1lbnQvU00KYW1lcmljaXVtL00KYW1ldGh5c3QvU00KYW1pYWJpbGl0eS9NCmFtaWFibGUKYW1pYWJseQphbWljYWJpbGl0eS9NCmFtaWNhYmxlCmFtaWNhYmx5CmFtaWQKYW1pZGUvTVMKYW1pZHNoaXAvUwphbWlnby9NUwphbWlubwphbWlzcwphbWl0eS9NCmFtbWV0ZXIvU00KYW1tby9NCmFtbW9uaWEvTQphbW1vbml1bQphbW11bml0aW9uL00KYW1uZXNpYS9NCmFtbmVzaWFjL01TCmFtbmVzaWMvU00KYW1uZXN0eS9HRFNNCmFtbmlvY2VudGVzZXMKYW1uaW9jZW50ZXNpcy9NCmFtbmlvbi9NUwphbW5pb3RpYwphbW9lYmEvTVMKYW1vZWJhZQphbW9lYmljCmFtb2sKYW1vbmcKYW1vbnRpbGxhZG8vU00KYW1vcmFsL1kKYW1vcmFsaXR5L00KYW1vcm91cy9ZUAphbW9yb3VzbmVzcy9NCmFtb3JwaG91cy9QWQphbW9ycGhvdXNuZXNzL00KYW1vcnRpemF0aW9uL1NNCmFtb3J0aXplL0RTR0IKYW1vdW50L0dNRFMKYW1vdXIvTVMKYW1veGljaWxsaW4KYW1wL1NNWQphbXBlcmFnZS9NCmFtcGVyZS9NUwphbXBlcnNhbmQvTVMKYW1waGV0YW1pbmUvU00KYW1waGliaWFuL01TCmFtcGhpYmlvdXMvWQphbXBoaXRoZWF0ZXIvU00KYW1waG9yYS9NCmFtcGhvcmFlCmFtcGljaWxsaW4KYW1wbGUvVFIKYW1wbGlmaWNhdGlvbi9NCmFtcGxpZmllci9NCmFtcGxpZnkvTkRSU1haRwphbXBsaXR1ZGUvU00KYW1wdWxlL01TCmFtcHV0YXRlL0dORFNYCmFtcHV0YXRpb24vTQphbXB1dGVlL01TCmFtdAphbXVsZXQvTVMKYW11c2UvTEdEUwphbXVzZW1lbnQvTVMKYW11c2luZy9ZCmFteWxhc2UvTQphbi9DUwphbmFib2xpc20vTQphbmFjaHJvbmlzbS9TTQphbmFjaHJvbmlzdGljCmFuYWNocm9uaXN0aWNhbGx5CmFuYWNvbmRhL1NNCmFuYWVyb2JlL1NNCmFuYWVyb2JpYwphbmFlcm9iaWNhbGx5CmFuYWdyYW0vTVMKYW5hbC9ZCmFuYWxnZXNpYS9NCmFuYWxnZXNpYy9TTQphbmFsb2cvTVMKYW5hbG9naWNhbC9ZCmFuYWxvZ2l6ZS9HRFMKYW5hbG9nb3VzL1lQCmFuYWxvZ291c25lc3MvTQphbmFsb2d1ZS9TTQphbmFsb2d5L1NNCmFuYWx5c2FuZC9NUwphbmFseXNlcy9BCmFuYWx5c2lzL0FNCmFuYWx5c3QvU00KYW5hbHl0aWMKYW5hbHl0aWNhbC9ZCmFuYWx5emFibGUKYW5hbHl6ZS9BRFNHCmFuYWx5emVyL1NNCmFuYXBlc3QvU00KYW5hcGVzdGljL01TCmFuYXJjaGljCmFuYXJjaGljYWxseQphbmFyY2hpc20vTQphbmFyY2hpc3QvTVMKYW5hcmNoaXN0aWMKYW5hcmNoeS9NCmFuYXRoZW1hL1NNCmFuYXRoZW1hdGl6ZS9EU0cKYW5hdG9taWMKYW5hdG9taWNhbC9ZCmFuYXRvbWlzdC9TTQphbmF0b21pemUvRFNHCmFuYXRvbXkvU00KYW5jZXN0b3IvU00KYW5jZXN0cmFsL1kKYW5jZXN0cmVzcy9NUwphbmNlc3RyeS9TTQphbmNob3IvTURHUwphbmNob3JhZ2UvTVMKYW5jaG9yaXRlL01TCmFuY2hvcm1hbi9NCmFuY2hvcm1lbgphbmNob3JwZW9wbGUKYW5jaG9ycGVyc29uL1NNCmFuY2hvcndvbWFuL00KYW5jaG9yd29tZW4KYW5jaG92eS9TTQphbmNpZW50L1NQTVJZVAphbmNpZW50bmVzcy9NCmFuY2lsbGFyeS9TTQphbmQKYW5kYW50ZS9TTQphbmRpcm9uL1NNCmFuZHJvZ2VuL00KYW5kcm9nZW5pYwphbmRyb2d5bm91cwphbmRyb2d5bnkvTQphbmRyb2lkL1NNCmFuZWNkb3RhbC9ZCmFuZWNkb3RlL01TCmFuZW1pYS9NCmFuZW1pYwphbmVtaWNhbGx5CmFuZW1vbWV0ZXIvU00KYW5lbW9uZS9TTQphbmVudAphbmVzdGhlc2lhL00KYW5lc3RoZXNpb2xvZ2lzdC9TTQphbmVzdGhlc2lvbG9neS9NCmFuZXN0aGV0aWMvU00KYW5lc3RoZXRpc3QvTVMKYW5lc3RoZXRpemF0aW9uL00KYW5lc3RoZXRpemUvR0RTCmFuZXVyeXNtL1NNCmFuZXcKYW5nZWwvTVMKYW5nZWxmaXNoL01TCmFuZ2VsaWMKYW5nZWxpY2EvTQphbmdlbGljYWwvWQphbmdlci9HTURTCmFuZ2luYS9NCmFuZ2lvcGxhc3R5L1NNCmFuZ2lvc3Blcm0vU00KYW5nbGUvTVpHRFJTCmFuZ2xlci9NCmFuZ2xld29ybS9NUwphbmdsaWNpc20vUwphbmdsaWNpemUvR0RTCmFuZ2xpbmcvTQphbmdsb3BoaWxlL1MKYW5nbG9waG9uZS9TCmFuZ29yYS9NUwphbmdvc3R1cmEKYW5ncmlseQphbmdyeS9UUgphbmdzdC9NCmFuZ3N0cm9tL01TCmFuZ3Vpc2gvR01EUwphbmd1bGFyCmFuZ3VsYXJpdHkvU00KYW5ndWxhdGlvbgphbmh5ZHJvdXMKYW5pbGluZS9NCmFuaW1hZHZlcnNpb24vTVMKYW5pbWFkdmVydC9HU0QKYW5pbWFsL01TCmFuaW1hbGN1bGUvU00KYW5pbWF0ZS9BRFNHTgphbmltYXRlZC9ZCmFuaW1hdGlvbi9BTQphbmltYXRpb25zCmFuaW1hdG9yL01TCmFuaW1lL00KYW5pbWlzbS9NCmFuaW1pc3QvU00KYW5pbWlzdGljCmFuaW1vc2l0eS9TTQphbmltdXMvTQphbmlvbi9NUwphbmlvbmljCmFuaXNlL00KYW5pc2VlZC9NCmFuaXNldHRlL00KYW5raC9NCmFua2hzCmFua2xlL01TCmFua2xlYm9uZS9NUwphbmtsZXQvTVMKYW5uYWxpc3QvU00KYW5uYWxzL00KYW5uZWFsL0dEUwphbm5lbGlkL01TCmFubmV4L0dNRFMKYW5uZXhhdGlvbi9NUwphbm5paGlsYXRlL0RTR04KYW5uaWhpbGF0aW9uL00KYW5uaWhpbGF0b3IvU00KYW5uaXZlcnNhcnkvU00KYW5ub3RhdGUvRFNYR05WCmFubm90YXRpb24vTQphbm5vdGF0b3IvTVMKYW5ub3VuY2UvRFJTTFpHCmFubm91bmNlZC9VCmFubm91bmNlbWVudC9NUwphbm5vdW5jZXIvTQphbm5veS9HRFMKYW5ub3lhbmNlL01TCmFubm95aW5nL1kKYW5udWFsL01ZUwphbm51YWxpemVkCmFubnVpdGFudC9TTQphbm51aXR5L1NNCmFubnVsL0xTCmFubnVsYXIKYW5udWxsZWQKYW5udWxsaW5nCmFubnVsbWVudC9TTQphbm51bmNpYXRpb24vU00KYW5vZGUvTVMKYW5vZGl6ZS9HRFMKYW5vZHluZS9NUwphbm9pbnQvR0RMUwphbm9pbnRtZW50L00KYW5vbWFsb3VzL1kKYW5vbWFseS9TTQphbm9uL1MKYW5vbnltaXR5L00KYW5vbnltb3VzL1kKYW5vcGhlbGVzL00KYW5vcmFrL01TCmFub3JlY3RpYy9TTQphbm9yZXhpYS9NCmFub3JleGljL01TCmFub3RoZXIKYW5zd2VyL0JNREdTCmFuc3dlcmFibGUvVQphbnN3ZXJlZC9VCmFuc3dlcnBob25lL1MKYW50L1NNRAphbnRhY2lkL1NNCmFudGFnb25pc20vU00KYW50YWdvbmlzdC9TTQphbnRhZ29uaXN0aWMKYW50YWdvbmlzdGljYWxseQphbnRhZ29uaXplL0RTRwphbnRhcmN0aWMKYW50ZS9TTQphbnRlYXRlci9NUwphbnRlYmVsbHVtCmFudGVjZWRlbmNlL00KYW50ZWNlZGVudC9TTQphbnRlY2hhbWJlci9TTQphbnRlZGF0ZS9HRFMKYW50ZWRpbHV2aWFuCmFudGVpbmcKYW50ZWxvcGUvTVMKYW50ZW5hdGFsCmFudGVubmEvU00KYW50ZW5uYWUKYW50ZXJpb3IKYW50ZXJvb20vTVMKYW50aGVtL01TCmFudGhlci9NUwphbnRoaWxsL1NNCmFudGhvbG9naXN0L1NNCmFudGhvbG9naXplL0RTRwphbnRob2xvZ3kvU00KYW50aHJhY2l0ZS9NCmFudGhyYXgvTQphbnRocm9wb2NlbnRyaWMKYW50aHJvcG9pZC9NUwphbnRocm9wb2xvZ2ljYWwvWQphbnRocm9wb2xvZ2lzdC9TTQphbnRocm9wb2xvZ3kvTQphbnRocm9wb21vcnBoaWMKYW50aHJvcG9tb3JwaGljYWxseQphbnRocm9wb21vcnBoaXNtL00KYW50aHJvcG9tb3JwaGl6ZQphbnRocm9wb21vcnBob3VzCmFudGkvU00KYW50aWFib3J0aW9uCmFudGlhYm9ydGlvbmlzdC9NUwphbnRpYWlyY3JhZnQKYW50aWJhY3RlcmlhbC9NUwphbnRpYmlvdGljL01TCmFudGlib2R5L1NNCmFudGljL01TCmFudGljYW5jZXIKYW50aWNpcGF0ZS9HTlhEUwphbnRpY2lwYXRlZC9VCmFudGljaXBhdGlvbi9NCmFudGljaXBhdG9yeQphbnRpY2tlZAphbnRpY2tpbmcKYW50aWNsZXJpY2FsCmFudGljbGltYWN0aWMKYW50aWNsaW1hY3RpY2FsbHkKYW50aWNsaW1heC9NUwphbnRpY2xpbmUvU00KYW50aWNsb2Nrd2lzZQphbnRpY29hZ3VsYW50L01TCmFudGljb21tdW5pc20vTQphbnRpY29tbXVuaXN0L1NNCmFudGljeWNsb25lL1NNCmFudGljeWNsb25pYwphbnRpZGVtb2NyYXRpYwphbnRpZGVwcmVzc2FudC9NUwphbnRpZG90ZS9NUwphbnRpZmFzY2lzdC9NUwphbnRpZnJlZXplL00KYW50aWdlbi9TTQphbnRpZ2VuaWMKYW50aWdlbmljaXR5L00KYW50aWhlcm8vTQphbnRpaGVyb2VzCmFudGloaXN0YW1pbmUvU00KYW50aWtub2NrL00KYW50aWxhYm9yCmFudGlsb2dhcml0aG0vU00KYW50aW1hY2Fzc2FyL01TCmFudGltYWxhcmlhbAphbnRpbWF0dGVyL00KYW50aW1pY3JvYmlhbAphbnRpbWlzc2lsZQphbnRpbW9ueS9NCmFudGludWNsZWFyCmFudGlveGlkYW50L01TCmFudGlwYXJ0aWNsZS9TTQphbnRpcGFzdGkKYW50aXBhc3RvL01TCmFudGlwYXRoZXRpYwphbnRpcGF0aHkvU00KYW50aXBlcnNvbm5lbAphbnRpcGVyc3BpcmFudC9TTQphbnRpcGhvbi9TTQphbnRpcGhvbmFsL01ZUwphbnRpcG9kYWwvUwphbnRpcG9kZWFuL01TCmFudGlwb2Rlcy9NCmFudGlwb2xsdXRpb24KYW50aXBvdmVydHkKYW50aXF1YXJpYW4vU00KYW50aXF1YXJpYW5pc20vTQphbnRpcXVhcnkvU00KYW50aXF1YXRlL0dEUwphbnRpcXVlL0RTTUcKYW50aXF1aXR5L1NNCmFudGlycmhpbnVtL1MKYW50aXNjaWVuY2UKYW50aXNlbWl0aWMKYW50aXNlbWl0aXNtL00KYW50aXNlcHNpcy9NCmFudGlzZXB0aWMvU00KYW50aXNlcHRpY2FsbHkKYW50aXNlcnVtL01TCmFudGlzbGF2ZXJ5CmFudGlzb2NpYWwvWQphbnRpc3Bhc21vZGljL01TCmFudGlzdWJtYXJpbmUKYW50aXRhbmsKYW50aXRoZXNlcwphbnRpdGhlc2lzL00KYW50aXRoZXRpYwphbnRpdGhldGljYWwvWQphbnRpdG94aW4vTVMKYW50aXRydXN0CmFudGl2ZW5pbi9NUwphbnRpdmVub20KYW50aXZpcmFsL01TCmFudGl2aXJ1cwphbnRpdml2aXNlY3Rpb25pc3QvTVMKYW50aXdhcgphbnRsZXIvTURTCmFudG9ueW0vU00KYW50b255bW91cwphbnRydW0KYW50c3kvVFIKYW51cy9NUwphbnZpbC9NUwphbnhpZXR5L1NNCmFueGlvdXMvWVAKYW54aW91c25lc3MvTQphbnkKYW55Ym9keS9TTQphbnlob3cKYW55bW9yZQphbnlvbmUvTQphbnlwbGFjZQphbnl0aGluZy9TTQphbnl0aW1lCmFueXdheS9TCmFueXdoZXJlCmFueXdpc2UKYW9ydGEvTVMKYW9ydGljCmFwYWNlCmFwYXJ0CmFwYXJ0aGVpZC9NCmFwYXJ0bWVudC9NUwphcGF0aGV0aWMKYXBhdGhldGljYWxseQphcGF0aHkvTQphcGF0aXRlL00KYXBlL0RTTUcKYXBlbGlrZQphcGVyaXRpZi9NUwphcGVydHVyZS9TTQphcGV4L01TCmFwaGFzaWEvTQphcGhhc2ljL01TCmFwaGVsaWEKYXBoZWxpb24vU00KYXBoaWQvTVMKYXBob3Jpc20vTVMKYXBob3Jpc3RpYwphcGhvcmlzdGljYWxseQphcGhyb2Rpc2lhYy9TTQphcGlhcmlzdC9TTQphcGlhcnkvU00KYXBpY2FsL1kKYXBpZWNlCmFwaXNoL1kKYXBsZW50eQphcGxvbWIvTQphcG9jYWx5cHNlL1NNCmFwb2NhbHlwdGljCmFwb2NyeXBoYS9NCmFwb2NyeXBoYWwvWQphcG9nZWUvTVMKYXBvbGl0aWNhbC9ZCmFwb2xvZ2V0aWMvVQphcG9sb2dldGljYWxseQphcG9sb2dpYS9TTQphcG9sb2dpc3QvTVMKYXBvbG9naXplL0dEUwphcG9sb2d5L1NNCmFwb3BsZWN0aWMKYXBvcGxleHkvU00KYXBvcHRvc2lzCmFwb3B0b3RpYwphcG9zdGFzeS9TTQphcG9zdGF0ZS9TTQphcG9zdGF0aXplL0dEUwphcG9zdGxlL01TCmFwb3N0bGVzaGlwL00KYXBvc3RvbGljCmFwb3N0cm9waGUvTVMKYXBvdGhlY2FyeS9TTQphcG90aGVnbS9TTQphcG90aGVvc2VzCmFwb3RoZW9zaXMvTQphcHAvU00KYXBwYWxsL0dEUwphcHBhbGxpbmcvWQphcHBhbG9vc2EvTVMKYXBwYXJhdGNoaWsvUwphcHBhcmF0dXMvTVMKYXBwYXJlbC9NREdTCmFwcGFyZW50L1kKYXBwYXJpdGlvbi9TTQphcHBlYWwvR01EUwphcHBlYWxpbmcvVVkKYXBwZWFyL0FFU0RHCmFwcGVhcmFuY2UvRUFNUwphcHBlYXNlL0xaR0RSUwphcHBlYXNlbWVudC9TTQphcHBlYXNlci9NCmFwcGVsbGFudC9TTQphcHBlbGxhdGUvWE4KYXBwZWxsYXRpb24vTQphcHBlbmQvR0RTCmFwcGVuZGFnZS9TTQphcHBlbmRlY3RvbXkvU00KYXBwZW5kaWNlcwphcHBlbmRpY2l0aXMvTQphcHBlbmRpeC9NUwphcHBlcnRhaW4vR0RTCmFwcGV0aXRlL1NNCmFwcGV0aXplci9NUwphcHBldGl6aW5nL1kKYXBwbGF1ZC9aR0RSUwphcHBsYXVkZXIvTQphcHBsYXVzZS9NCmFwcGxlL01TCmFwcGxlamFjay9NCmFwcGxlc2F1Y2UvTQphcHBsZXQvTVMKYXBwbGlhbmNlL1NNCmFwcGxpY2FiaWxpdHkvTQphcHBsaWNhYmxlL0kKYXBwbGljYWJseQphcHBsaWNhbnQvU00KYXBwbGljYXRpb24vQU0KYXBwbGljYXRvci9TTQphcHBsaWVyL01TCmFwcGxpcXVlL0RTTQphcHBsaXF1ZWluZwphcHBseS9BTlhHRFMKYXBwb2ludC9BRUxTVkdECmFwcG9pbnRlZS9TTQphcHBvaW50bWVudCdzL0EKYXBwb2ludG1lbnQvRVNNCmFwcG9ydGlvbi9BR0RMUwphcHBvcnRpb25tZW50L0FNCmFwcG9zZS9HRFMKYXBwb3NpdGUvWU5WUAphcHBvc2l0ZW5lc3MvTQphcHBvc2l0aW9uL00KYXBwb3NpdGl2ZS9TTQphcHByYWlzYWwvQU1TCmFwcHJhaXNlL0FEU0cKYXBwcmFpc2VyL01TCmFwcHJlY2lhYmxlL0kKYXBwcmVjaWFibHkvSQphcHByZWNpYXRlL0RTWEdOVgphcHByZWNpYXRlZC9VCmFwcHJlY2lhdGlvbi9NCmFwcHJlY2lhdGl2ZS9ZCmFwcHJlY2lhdG9yL01TCmFwcHJlY2lhdG9yeQphcHByZWhlbmQvR0RTCmFwcHJlaGVuc2lvbi9NUwphcHByZWhlbnNpdmUvWVAKYXBwcmVoZW5zaXZlbmVzcy9NCmFwcHJlbnRpY2UvRFNNRwphcHByZW50aWNlc2hpcC9NUwphcHByaXNlL0dEUwphcHByb2FjaC9HQk1EUwphcHByb2FjaGFibGUvVUkKYXBwcm9iYXRpb24vRU0KYXBwcm9iYXRpb25zCmFwcHJvcHJpYXRlL1BZR05YRFMKYXBwcm9wcmlhdGVkL1UKYXBwcm9wcmlhdGVuZXNzL0lNCmFwcHJvcHJpYXRpb24vTQphcHByb3ByaWF0b3IvU00KYXBwcm92YWwvRU0KYXBwcm92YWxzCmFwcHJvdmUvRUdEUwphcHByb3ZlZC9VCmFwcHJvdmluZy9FWQphcHByb3gKYXBwcm94aW1hdGUvRFNYWUdOCmFwcHJveGltYXRpb24vTQphcHB1cnRlbmFuY2UvU00KYXBwdXJ0ZW5hbnQKYXByaWNvdC9NUwphcHJvbi9NUwphcHJvcG9zCmFwc2UvU00KYXB0L0lZUFQKYXB0ZXIKYXB0aXR1ZGUvU00KYXB0bmVzcy9JTQphcXVhL1NNCmFxdWFjdWx0dXJlL00KYXF1YWx1bmcvTVMKYXF1YW1hcmluZS9TTQphcXVhbmF1dC9NUwphcXVhcGxhbmUvTUdEUwphcXVhcml1bS9NUwphcXVhdGljL1NNCmFxdWF0aWNhbGx5CmFxdWF0aWNzL00KYXF1YXRpbnQvUwphcXVhdml0L00KYXF1ZWR1Y3QvTVMKYXF1ZW91cwphcXVpZmVyL1NNCmFxdWlsaW5lCmFyYWJlc3F1ZS9NUwphcmFiaWxpdHkvTQphcmFjaG5pZC9NUwphcmFjaG5vcGhvYmlhCmFyYml0ZXIvU00KYXJiaXRyYWdlL01aR0RSUwphcmJpdHJhZ2VyL00KYXJiaXRyYWdldXIvU00KYXJiaXRyYW1lbnQvU00KYXJiaXRyYXJpbHkKYXJiaXRyYXJpbmVzcy9NCmFyYml0cmFyeS9QCmFyYml0cmF0ZS9HTkRTCmFyYml0cmF0aW9uL00KYXJiaXRyYXRvci9NUwphcmJvci9NUwphcmJvcmVhbAphcmJvcmV0dW0vU00KYXJib3J2aXRhZS9TTQphcmJ1dHVzL01TCmFyYy9TTURHCmFyY2FkZS9NUwphcmNhbmUKYXJjaC9QWlRHVk1EUlNZCmFyY2hhZW9sb2dpY2FsL1kKYXJjaGFlb2xvZ2lzdC9TTQphcmNoYWVvbG9neS9NCmFyY2hhaWMKYXJjaGFpY2FsbHkKYXJjaGFpc20vTVMKYXJjaGFpc3QvTVMKYXJjaGFuZ2VsL01TCmFyY2hiaXNob3AvU00KYXJjaGJpc2hvcHJpYy9TTQphcmNoZGVhY29uL1NNCmFyY2hkaW9jZXNhbgphcmNoZGlvY2VzZS9NUwphcmNoZHVjaGVzcy9NUwphcmNoZHVrZS9NUwphcmNoZW5lbXkvU00KYXJjaGVyL00KYXJjaGVyeS9NCmFyY2hldHlwYWwKYXJjaGV0eXBlL01TCmFyY2hmaWVuZC9NUwphcmNoaWVwaXNjb3BhbAphcmNoaXBlbGFnby9NUwphcmNoaXRlY3QvU00KYXJjaGl0ZWN0b25pYy9TCmFyY2hpdGVjdG9uaWNzL00KYXJjaGl0ZWN0dXJhbC9ZCmFyY2hpdGVjdHVyZS9NUwphcmNoaXRyYXZlL1NNCmFyY2hpdmFsCmFyY2hpdmUvRFNNRwphcmNoaXZpc3QvTVMKYXJjaG5lc3MvTQphcmNod2F5L1NNCmFyY3RpYy9NUwphcmRlbnQvWQphcmRvci9NUwphcmR1b3VzL1lQCmFyZHVvdXNuZXNzL00KYXJlL1NNQgphcmVhL1NNCmFyZWFsCmFyZW4ndAphcmVuYS9NUwphcmdlbnQvTQphcmdpbmluZQphcmdvbi9NCmFyZ29zeS9TTQphcmdvdC9NUwphcmd1YWJsZS9JVQphcmd1YWJseS9VCmFyZ3VlL1pHRFJTCmFyZ3Vlci9NCmFyZ3VtZW50L01TCmFyZ3VtZW50YXRpb24vTQphcmd1bWVudGF0aXZlL1BZCmFyZ3VtZW50YXRpdmVuZXNzL00KYXJneWxlL01TCmFyaWEvU00KYXJpZC9ZCmFyaWRpdHkvTQphcmlnaHQKYXJpc2UvR1MKYXJpc2VuCmFyaXN0b2NyYWN5L1NNCmFyaXN0b2NyYXQvU00KYXJpc3RvY3JhdGljCmFyaXN0b2NyYXRpY2FsbHkKYXJpdGhtZXRpYy9NCmFyaXRobWV0aWNhbC9ZCmFyaXRobWV0aWNpYW4vTVMKYXJrL1NNCmFybSdzCmFybS9FQUdEUwphcm1hZGEvTVMKYXJtYWRpbGxvL1NNCmFybWFtZW50L0FFTQphcm1hbWVudHMKYXJtYXR1cmUvTVMKYXJtYmFuZC9NUwphcm1jaGFpci9NUwphcm1lZC9VCmFybWZ1bC9NUwphcm1ob2xlL1NNCmFybWlzdGljZS9TTQphcm1sZXQvTVMKYXJtbG9hZC9TCmFybW9yL1pHTURSUwphcm1vcmVkL1UKYXJtb3Jlci9NCmFybW9yaWFsCmFybW9yeS9TTQphcm1waXQvTVMKYXJtcmVzdC9TTQphcm15L1NNCmFyb21hL01TCmFyb21hdGhlcmFwaXN0L01TCmFyb21hdGhlcmFweS9NCmFyb21hdGljL01TCmFyb21hdGljYWxseQphcm9zZQphcm91bmQKYXJvdXNhbC9NCmFyb3VzZS9HRFMKYXJwZWdnaW8vTVMKYXJyCmFycmFpZ24vREdTTAphcnJhaWdubWVudC9TTQphcnJhbmdlL0FFU0RMRwphcnJhbmdlbWVudCdzL0UKYXJyYW5nZW1lbnQvQVNNCmFycmFuZ2VyL1NNCmFycmFudAphcnJhcy9NUwphcnJheS9FR01EUwphcnJlYXJzL00KYXJyZXN0L0FHTURTCmFycmh5dGhtaWEvTQphcnJoeXRobWljCmFycmh5dGhtaWNhbAphcnJpdmFsL01TCmFycml2ZS9HRFMKYXJyb2dhbmNlL00KYXJyb2dhbnQvWQphcnJvZ2F0ZS9HTkRTCmFycm9nYXRpb24vTQphcnJvdy9NUwphcnJvd2hlYWQvTVMKYXJyb3dyb290L00KYXJyb3lvL01TCmFyc2VkCmFyc2VuYWwvTVMKYXJzZW5pYy9NCmFyc2luZwphcnNvbi9NCmFyc29uaXN0L1NNCmFydC9TTQphcnRlcmlhbAphcnRlcmlvbGUvTVMKYXJ0ZXJpb3NjbGVyb3Npcy9NCmFydGVyeS9TTQphcnRmdWwvUFkKYXJ0ZnVsbmVzcy9NCmFydGhyaXRpYy9NUwphcnRocml0aXMvTQphcnRocm9wb2QvTVMKYXJ0aHJvc2NvcGUvU00KYXJ0aHJvc2NvcGljCmFydGhyb3Njb3B5CmFydGljaG9rZS9TTQphcnRpY2xlL01EUwphcnRpY3VsYWN5L0kKYXJ0aWN1bGFyCmFydGljdWxhdGUvWUdOUERTWAphcnRpY3VsYXRlbmVzcy9JTQphcnRpY3VsYXRpb24vTQphcnRpZmFjdC9TTQphcnRpZmljZS9SU01aCmFydGlmaWNlci9NCmFydGlmaWNpYWwvWQphcnRpZmljaWFsaXR5L00KYXJ0aWxsZXJ5L00KYXJ0aWxsZXJ5bWFuL00KYXJ0aWxsZXJ5bWVuCmFydGluZXNzL00KYXJ0aXNhbi9NUwphcnRpc3QvTVMKYXJ0aXN0ZS9NUwphcnRpc3RpYy9JCmFydGlzdGljYWxseQphcnRpc3RyeS9NCmFydGxlc3MvUFkKYXJ0bGVzc25lc3MvTQphcnRzeS9UUgphcnR3b3JrL01TCmFydHkvUFRSCmFydWd1bGEKYXJ1bS9TTQphc2FwCmFzYmVzdG9zL00KYXNjZW5kL0FHRFMKYXNjZW5kYW5jZS9NCmFzY2VuZGFuY3kvTQphc2NlbmRhbnQvU00KYXNjZW5zaW9uL01TCmFzY2VudC9NUwphc2NlcnRhaW4vR0RTQkwKYXNjZXJ0YWlubWVudC9NCmFzY2V0aWMvTVMKYXNjZXRpY2FsbHkKYXNjZXRpY2lzbS9NCmFzY290L01TCmFzY3JpYmUvR0JEUwphc2NyaXB0aW9uL00KYXNlcHRpYwphc2VwdGljYWxseQphc2V4dWFsL1kKYXNleHVhbGl0eS9NCmFzaC9NRE5TRwphc2hhbWVkL1VZCmFzaGNhbi9NUwphc2hsYXIvTVMKYXNob3JlCmFzaHJhbS9NUwphc2h0cmF5L1NNCmFzaHkvVFIKYXNpZGUvTVMKYXNpbmluZS9ZCmFzaW5pbml0eS9TTQphc2svU0RHCmFza2FuY2UKYXNrZWQvVQphc2tldwphc2xhbnQKYXNsZWVwCmFzb2NpYWwKYXNwL1NNTlgKYXNwYXJhZ3VzL00KYXNwYXJ0YW1lL00KYXNwZWN0L01TCmFzcGVuL00KYXNwZXJpdHkvU00KYXNwZXJzaW9uL01TCmFzcGhhbHQvTURHUwphc3Bob2RlbC9TTQphc3BoeXhpYS9NCmFzcGh5eGlhdGUvRFNYR04KYXNwaHl4aWF0aW9uL00KYXNwaWMvTVMKYXNwaWRpc3RyYS9NUwphc3BpcmFudC9NUwphc3BpcmF0ZS9NR05EU1gKYXNwaXJhdGlvbi9NCmFzcGlyYXRvci9TTQphc3BpcmUvR0RTCmFzcGlyaW4vTVMKYXNzL01TCmFzc2FpbC9HQkRTCmFzc2FpbGFibGUvVQphc3NhaWxhbnQvU00KYXNzYXNzaW4vU00KYXNzYXNzaW5hdGUvR05YRFMKYXNzYXNzaW5hdGlvbi9NCmFzc2F1bHQvTURSR1MKYXNzYXkvWkdNRFJTCmFzc2F5ZXIvTQphc3NlbWJsYWdlL1NNCmFzc2VtYmxlL0FFR1NECmFzc2VtYmxlci9NUwphc3NlbWJsaWVzCmFzc2VtYmx5L0FNCmFzc2VtYmx5bWFuL00KYXNzZW1ibHltZW4KYXNzZW1ibHl3b21hbi9NCmFzc2VtYmx5d29tZW4KYXNzZW50L0dNRFMKYXNzZXJ0L0FHVkRTCmFzc2VydGlvbi9BTQphc3NlcnRpb25zCmFzc2VydGl2ZS9ZUAphc3NlcnRpdmVuZXNzL00KYXNzZXNzL0FMR0RTCmFzc2Vzc21lbnQvQVNNCmFzc2Vzc29yL01TCmFzc2V0L01TCmFzc2V2ZXJhdGUvRFNHTgphc3NldmVyYXRpb24vTQphc3Nob2xlL01TIQphc3NpZHVpdHkvTQphc3NpZHVvdXMvUFkKYXNzaWR1b3VzbmVzcy9NCmFzc2lnbidzCmFzc2lnbi9BTEdEUwphc3NpZ25hYmxlCmFzc2lnbmF0aW9uL01TCmFzc2lnbmVkL1UKYXNzaWduZWUvTQphc3NpZ25lci9NUwphc3NpZ25tZW50L0FNUwphc3NpZ25vci9NUwphc3NpbWlsYXRlL0RTR04KYXNzaW1pbGF0aW9uL00KYXNzaXN0L0dNRFMKYXNzaXN0YW5jZS9NCmFzc2lzdGFudC9TTQphc3Npc3RlZC9VCmFzc2l6ZS9NUwphc3NuCmFzc29jCmFzc29jaWF0ZSdzCmFzc29jaWF0ZS9FRFNHTlYKYXNzb2NpYXRpb24vRU0KYXNzb2NpYXRpb25zCmFzc29uYW5jZS9NCmFzc29uYW50L01TCmFzc29ydC9HTERTCmFzc29ydG1lbnQvTVMKYXNzdAphc3N1YWdlL0dEUwphc3N1bWUvQkdEUwphc3N1bXB0aW9uL1NNCmFzc3VtcHRpdmUKYXNzdXJhbmNlL0FTTQphc3N1cmUvQUdEUwphc3N1cmVkL01ZUwphc3RhdGluZS9NCmFzdGVyL0VNUwphc3Rlcmlzay9HTURTCmFzdGVybgphc3Rlcm9pZC9NUwphc3RobWEvTQphc3RobWF0aWMvU00KYXN0aG1hdGljYWxseQphc3RpZ21hdGljCmFzdGlnbWF0aXNtL1NNCmFzdGlyCmFzdG9uaXNoL0RTTEcKYXN0b25pc2hpbmcvWQphc3RvbmlzaG1lbnQvTQphc3RvdW5kL0dEUwphc3RvdW5kaW5nL1kKYXN0cmFkZGxlCmFzdHJha2hhbi9NCmFzdHJhbAphc3RyYXkKYXN0cmlkZQphc3RyaW5nZW5jeS9NCmFzdHJpbmdlbnQvU01ZCmFzdHJvbGFiZS9TTQphc3Ryb2xvZ2VyL1NNCmFzdHJvbG9naWNhbC9ZCmFzdHJvbG9naXN0L01TCmFzdHJvbG9neS9NCmFzdHJvbmF1dC9NUwphc3Ryb25hdXRpYy9TCmFzdHJvbmF1dGljYWwKYXN0cm9uYXV0aWNzL00KYXN0cm9ub21lci9TTQphc3Ryb25vbWljCmFzdHJvbm9taWNhbC9ZCmFzdHJvbm9teS9NCmFzdHJvcGh5c2ljYWwKYXN0cm9waHlzaWNpc3QvTVMKYXN0cm9waHlzaWNzL00KYXN0dXRlL1BZVFIKYXN0dXRlbmVzcy9NCmFzdW5kZXIKYXN5bHVtL1NNCmFzeW1tZXRyaWMKYXN5bW1ldHJpY2FsL1kKYXN5bW1ldHJ5L1NNCmFzeW1wdG9tYXRpYwphc3ltcHRvdGljCmFzeW1wdG90aWNhbGx5CmFzeW5jaHJvbm91cy9ZCmF0CmF0YXZpc20vTQphdGF2aXN0L1NNCmF0YXZpc3RpYwphdGF4aWEvTQphdGF4aWMvTVMKYXRlCmF0ZWxpZXIvU00KYXRoZWlzbS9NCmF0aGVpc3QvTVMKYXRoZWlzdGljCmF0aGVyb3NjbGVyb3Npcy9NCmF0aGVyb3NjbGVyb3RpYwphdGhpcnN0CmF0aGxldGUvTVMKYXRobGV0aWMvUwphdGhsZXRpY2FsbHkKYXRobGV0aWNpc20KYXRobGV0aWNzL00KYXRod2FydAphdGlsdAphdGlzaG9vCmF0bGFzL01TCmF0bW9zcGhlcmUvTVMKYXRtb3NwaGVyaWMvUwphdG1vc3BoZXJpY2FsbHkKYXRtb3NwaGVyaWNzL00KYXRvbGwvTVMKYXRvbS9TTQphdG9taWMKYXRvbWljYWxseQphdG9taXplL1pHRFJTCmF0b21pemVyL00KYXRvbmFsL1kKYXRvbmFsaXR5L00KYXRvbmUvTEdEUwphdG9uZW1lbnQvTQphdG9wCmF0cmlhCmF0cmlhbAphdHJpb3ZlbnRyaWN1bGFyCmF0cml1bS9NCmF0cm9jaW91cy9QWQphdHJvY2lvdXNuZXNzL00KYXRyb2NpdHkvU00KYXRyb3BoeS9EU01HCmF0cm9waW5lL00KYXR0YWNoL0FMR0RTCmF0dGFjaGUvQk0KYXR0YWNoZWQvVQphdHRhY2htZW50L0FNCmF0dGFjaG1lbnRzCmF0dGFjay9aR01EUlMKYXR0YWNrZXIvTQphdHRhaW4vQUdEUwphdHRhaW5hYmlsaXR5L00KYXR0YWluYWJsZS9VCmF0dGFpbmRlci9NCmF0dGFpbm1lbnQvU00KYXR0YXIvTQphdHRlbXB0J3MKYXR0ZW1wdC9BU0RHCmF0dGVuZC9TRFJaRwphdHRlbmRhbmNlL1NNCmF0dGVuZGFudC9TTQphdHRlbmRlZC9VCmF0dGVuZGVlL1NNCmF0dGVudGlvbi9JTQphdHRlbnRpb25zCmF0dGVudGl2ZS9JUFkKYXR0ZW50aXZlbmVzcy9JTQphdHRlbnVhdGUvRFNHTgphdHRlbnVhdGlvbi9NCmF0dGVzdC9TREcKYXR0ZXN0YXRpb24vU00KYXR0ZXN0ZWQvVQphdHRpYy9TTQphdHRpcmUvRFNNRwphdHRpdHVkZS9TTQphdHRpdHVkaW5hbAphdHRpdHVkaW5pemUvR0RTCmF0dG4KYXR0b3JuZXkvTVMKYXR0cmFjdC9TR1ZEQgphdHRyYWN0YW50L01TCmF0dHJhY3Rpb24vTVMKYXR0cmFjdGl2ZS9VWQphdHRyYWN0aXZlbmVzcy9NCmF0dHJpYnV0ZS9EU01HTlZCWAphdHRyaWJ1dGVkL1UKYXR0cmlidXRpb24vTQphdHRyaWJ1dGl2ZS9NWVMKYXR0cml0aW9uL00KYXR0dW5lL0RTRwphdHR5CmF0d2l0dGVyCmF0eXBpY2FsL1kKYXViZXJnaW5lL1MKYXVidXJuL00KYXVjdGlvbi9NREdTCmF1Y3Rpb25lZXIvU00KYXVkYWNpb3VzL1lQCmF1ZGFjaW91c25lc3MvTQphdWRhY2l0eS9NCmF1ZGliaWxpdHkvSU0KYXVkaWJsZS9NUwphdWRpYmx5L0kKYXVkaWVuY2UvTVMKYXVkaW8vTVMKYXVkaW9sb2dpY2FsCmF1ZGlvbG9naXN0L1NNCmF1ZGlvbG9neS9NCmF1ZGlvbWV0ZXIvU00KYXVkaW9waGlsZS9TTQphdWRpb3RhcGUvU00KYXVkaW92aXN1YWwvUwphdWRpb3Zpc3VhbHMvTQphdWRpdC9HTURTCmF1ZGl0aW9uL1NNREcKYXVkaXRvci9NUwphdWRpdG9yaXVtL1NNCmF1ZGl0b3J5CmF1Z2VyL01TCmF1Z2h0L01TCmF1Z21lbnQvRFJaR1MKYXVnbWVudGF0aW9uL01TCmF1Z21lbnRhdGl2ZQphdWdtZW50ZXIvTQphdWd1ci9HTURTCmF1Z3VyeS9TTQphdWd1c3QvUFRSWQphdWd1c3RuZXNzL00KYXVrL1NNCmF1bnQvU00KYXVudGllL1NNCmF1cmEvTVMKYXVyYWwvWQphdXJlb2xlL1NNCmF1cmV1cwphdXJpY2xlL1NNCmF1cmljdWxhcgphdXJvcmEvU00KYXVzY3VsdGF0ZS9HTkRTWAphdXNjdWx0YXRpb24vTQphdXNwaWNlL1NNCmF1c3BpY2lvdXMvSVkKYXVzcGljaW91c25lc3MvTQphdXN0ZXJlL1JZVAphdXN0ZXJpdHkvU00KYXVzdHJhbAphdXRoZW50aWMvSVUKYXV0aGVudGljYWxseQphdXRoZW50aWNhdGUvWEdORFMKYXV0aGVudGljYXRlZC9VCmF1dGhlbnRpY2F0aW9uL00KYXV0aGVudGljaXR5L00KYXV0aG9yL1NNREcKYXV0aG9yZXNzL01TCmF1dGhvcmlhbAphdXRob3JpdGFyaWFuL01TCmF1dGhvcml0YXJpYW5pc20vTQphdXRob3JpdGF0aXZlL1lQCmF1dGhvcml0YXRpdmVuZXNzL00KYXV0aG9yaXR5L1NNCmF1dGhvcml6YXRpb24vTVMKYXV0aG9yaXplL0FHRFMKYXV0aG9yaXplZC9VCmF1dGhvcnNoaXAvTQphdXRpc20vTQphdXRpc3RpYwphdXRvL01TCmF1dG9iYWhuL1NNCmF1dG9iaW9ncmFwaGVyL1NNCmF1dG9iaW9ncmFwaGljCmF1dG9iaW9ncmFwaGljYWwvWQphdXRvYmlvZ3JhcGh5L1NNCmF1dG9jbGF2ZS9NUwphdXRvY3JhY3kvU00KYXV0b2NyYXQvU00KYXV0b2NyYXRpYwphdXRvY3JhdGljYWxseQphdXRvY3Jvc3MKYXV0b2RpZGFjdC9TTQphdXRvZ3JhcGgvTURHCmF1dG9ncmFwaHMKYXV0b2ltbXVuZQphdXRvaW1tdW5pdHkvTQphdXRvbWFrZXIvU00KYXV0b21hdGUvR05EUwphdXRvbWF0aWMvU00KYXV0b21hdGljYWxseQphdXRvbWF0aW9uL00KYXV0b21hdGlzbS9NCmF1dG9tYXRpemUvR0RTCmF1dG9tYXRvbi9TTQphdXRvbW9iaWxlL0RTTUcKYXV0b21vdGl2ZQphdXRvbm9taWMKYXV0b25vbW91cy9ZCmF1dG9ub215L00KYXV0b3BpbG90L1NNCmF1dG9wc3kvR0RTTQphdXRvc3VnZ2VzdGlvbgphdXRvd29ya2VyL01TCmF1dHVtbi9TTQphdXR1bW5hbAphdXgKYXV4aWxpYXJ5L1NNCmF1eGluL00KYXYvUloKYXZhaWwvQkdNRFMKYXZhaWxhYmlsaXR5L1VNCmF2YWlsYWJsZS9VCmF2YWxhbmNoZS9TTQphdmFyaWNlL00KYXZhcmljaW91cy9ZCmF2YXN0CmF2YXRhci9NUwphdmF1bnQKYXZkcAphdmUKYXZlbmdlL1pHRFJTCmF2ZW5nZXIvTQphdmVudWUvTVMKYXZlcmFnZS9NWUdEUwphdmVycmVkCmF2ZXJyaW5nCmF2ZXJzZS9YTgphdmVyc2lvbi9NCmF2ZXJ0L0dEUwphdmcKYXZpYW4KYXZpYXJ5L1NNCmF2aWF0aW9uL00KYXZpYXRvci9NUwphdmlhdHJpY2VzCmF2aWF0cml4L01TCmF2aWQvWQphdmlkaXR5L00KYXZpb25pYy9TCmF2aW9uaWNzL00KYXZpdGFtaW5vc2lzL00KYXZvY2Fkby9TTQphdm9jYXRpb24vTVMKYXZvY2F0aW9uYWwKYXZvaWQvU0RHQgphdm9pZGFibGUvVQphdm9pZGFibHkvVQphdm9pZGFuY2UvTQphdm9pcmR1cG9pcy9NCmF2b3VjaC9EU0cKYXZvdy9FREdTCmF2b3dhbC9FU00KYXZvd2VkL1kKYXZ1bmN1bGFyL1kKYXcKYXdhaXQvR0RTCmF3YWtlL0dTCmF3YWtlbi9BR0RTCmF3YWtlbmluZy9TTQphd2FyZC9HTURTCmF3YXJkZWUvUwphd2FyZS9VUAphd2FyZW5lc3MvVU0KYXdhc2gKYXdheQphd2UvRFNNRwphd2VpZ2gKYXdlc29tZS9ZUAphd2Vzb21lbmVzcy9NCmF3ZXN0cnVjawphd2Z1bC9ZUAphd2Z1bGxlcgphd2Z1bGxlc3QKYXdmdWxuZXNzL00KYXdoaWxlCmF3a3dhcmQvUllQVAphd2t3YXJkbmVzcy9NCmF3bC9TTQphd24vR0pTTQphd25pbmcvTQphd29rZQphd29rZW4KYXdyeQpheC9NRFNHCmF4aWFsL1kKYXhpb20vU00KYXhpb21hdGljCmF4aW9tYXRpY2FsbHkKYXhpcy9NCmF4bGUvTVMKYXhsZXRyZWUvU00KYXhvbG90bC9TTQpheG9uL01TCmF5YWgvTQpheWFocwpheWF0b2xsYWgvTQpheWF0b2xsYWhzCmF5ZS9TTQphemFsZWEvU00KYXppbXV0aC9NCmF6aW11dGhzCmF6dXJlL1NNCmIvS0RUCmJhYS9TTURHCmJhYmJsZS9NWkdEUlMKYmFiYmxlci9NCmJhYmUvU00KYmFiZWwvTVMKYmFib29uL01TCmJhYnVzaGthL1NNCmJhYnkvVEdEUlNNCmJhYnlob29kL00KYmFieWlzaApiYWJ5c2F0CmJhYnlzaXQvUwpiYWJ5c2l0dGVyL01TCmJhYnlzaXR0aW5nL00KYmFjY2FsYXVyZWF0ZS9TTQpiYWNjYXJhdC9NCmJhY2NoYW5hbC9NUwpiYWNjaGFuYWxpYS9NCmJhY2NoYW5hbGlhbi9NUwpiYWNjeQpiYWNoZWxvci9TTQpiYWNoZWxvcmhvb2QvTQpiYWNpbGxhcnkKYmFjaWxsaQpiYWNpbGx1cy9NCmJhY2svU0paR01EUgpiYWNrYWNoZS9NUwpiYWNrYmVuY2gvUwpiYWNrYml0CmJhY2tiaXRlL1pHUlMKYmFja2JpdGVyL00KYmFja2JpdHRlbgpiYWNrYm9hcmQvU00KYmFja2JvbmUvTVMKYmFja2JyZWFraW5nCmJhY2tjaGF0CmJhY2tjbG90aApiYWNrY2xvdGhzCmJhY2tjb21iL0RTRwpiYWNrZGF0ZS9HRFMKYmFja2Rvb3IKYmFja2Ryb3AvTVMKYmFja2VyL00KYmFja2ZpZWxkL1NNCmJhY2tmaXJlL01HRFMKYmFja2dhbW1vbi9NCmJhY2tncm91bmQvTVJaUwpiYWNrZ3JvdW5kZXIvTQpiYWNraGFuZC9NRFJTWkcKYmFja2hhbmRlZC9ZCmJhY2toYW5kZXIvTQpiYWNraG9lL01TCmJhY2tpbmcvTQpiYWNrbGFzaC9NUwpiYWNrbGVzcwpiYWNrbG9nL01TCmJhY2tsb2dnZWQKYmFja2xvZ2dpbmcKYmFja3BhY2svWkdNRFJTCmJhY2twYWNrZXIvTQpiYWNrcGFja2luZy9NCmJhY2twZWRhbC9TREcKYmFja3Jlc3QvU00KYmFja3Jvb20vUwpiYWNrc2NyYXRjaGluZy9NCmJhY2tzZWF0L1NNCmJhY2tzaWRlL1NNCmJhY2tzbGFwcGVyL1NNCmJhY2tzbGFwcGluZy9NCmJhY2tzbGFzaC9NUwpiYWNrc2xpZApiYWNrc2xpZGUvUlNaRwpiYWNrc2xpZGVyL00KYmFja3NwYWNlL0RTTUcKYmFja3NwaW4vTQpiYWNrc3RhYmJlci9NUwpiYWNrc3RhYmJpbmcKYmFja3N0YWdlL00KYmFja3N0YWlyL1MKYmFja3N0b3AvU00KYmFja3N0b3BwZWQKYmFja3N0b3BwaW5nCmJhY2tzdG9yeS9TCmJhY2tzdHJlZXQvUwpiYWNrc3RyZXRjaC9NUwpiYWNrc3Ryb2tlL01HRFMKYmFja3RhbGsvTQpiYWNrdHJhY2svU0RHCmJhY2t1cC9NUwpiYWNrd2FyZC9QU1kKYmFja3dhcmRuZXNzL00KYmFja3dhc2gvTQpiYWNrd2F0ZXIvU00KYmFja3dvb2RzL00KYmFja3dvb2RzbWFuL00KYmFja3dvb2RzbWVuCmJhY2t5YXJkL1NNCmJhY29uL00KYmFjdGVyaWEvTQpiYWN0ZXJpYWwKYmFjdGVyaWNpZGFsCmJhY3RlcmljaWRlL1NNCmJhY3RlcmlvbG9naWMKYmFjdGVyaW9sb2dpY2FsCmJhY3RlcmlvbG9naXN0L1NNCmJhY3RlcmlvbG9neS9NCmJhY3Rlcml1bS9NCmJhZC9NWVAKYmFkZGVyCmJhZGRlc3QKYmFkZGllL01TCmJhZGUKYmFkZ2UvTVpSUwpiYWRnZXIvR01ECmJhZGluYWdlL00KYmFkbGFuZHMvTQpiYWRtYW4vTQpiYWRtZW4KYmFkbWludG9uL00KYmFkbW91dGgvR0QKYmFkbW91dGhzCmJhZG5lc3MvTQpiYWZmbGUvTVpHRFJTTApiYWZmbGVtZW50L00KYmFmZmxlci9NCmJhZy9TTQpiYWdhdGVsbGUvU00KYmFnZWwvTVMKYmFnZnVsL01TCmJhZ2dhZ2UvTQpiYWdnZWQKYmFnZ2llL00KYmFnZ2lseQpiYWdnaW5lc3MvTQpiYWdnaW5nCmJhZ2d5L1BUUlMKYmFncGlwZS9NWlJTCmJhZ3BpcGVyL00KYmFndWV0dGUvTVMKYmFoCmJhaHQvU00KYmFpbC9TQkdNRApiYWlsZXkvUwpiYWlsaWZmL1MKYmFpbGl3aWNrL01TCmJhaWxvdXQvU00KYmFpbHNtYW4vTQpiYWlsc21lbgpiYWlybi9NUwpiYWl0L1NHTUQKYmFpemUvTQpiYWtlL0RSU01aRwpiYWtlZC9VCmJha2VyL00KYmFrZXJ5L1NNCmJha2VzaG9wL01TCmJha2xhdmEvTQpiYWtzaGVlc2gvTQpiYWxhY2xhdmEvTVMKYmFsYWxhaWthL01TCmJhbGFuY2UncwpiYWxhbmNlL1VEU0cKYmFsYm9hL1NNCmJhbGNvbnkvU00KYmFsZC9TVEdQRFJZCmJhbGRlcmRhc2gvTQpiYWxkZmFjZWQKYmFsZG5lc3MvTQpiYWxkcmljL1NNCmJhbGR5L1MKYmFsZS9EUlNNWkcKYmFsZWVuL00KYmFsZWZ1bC9QWQpiYWxlZnVsbmVzcy9NCmJhbGVyL00KYmFsay9TR01ECmJhbGt5L1JUCmJhbGwvU0dNRApiYWxsYWQvU00KYmFsbGFkZWVyL01TCmJhbGxhZHJ5L00KYmFsbGFzdC9HU01ECmJhbGxjb2NrL01TCmJhbGxlcmluYS9TTQpiYWxsZXQvU00KYmFsbGV0aWMKYmFsbGdhbWUvTVMKYmFsbGdpcmwvUwpiYWxsZ293bi9TCmJhbGxpc3RpYy9TCmJhbGxpc3RpY3MvTQpiYWxsb29uL1NHTUQKYmFsbG9vbmlzdC9NUwpiYWxsb3QvU01ERwpiYWxscGFyay9NUwpiYWxscGxheWVyL01TCmJhbGxwb2ludC9NUwpiYWxscm9vbS9NUwpiYWxscy9EU0cKYmFsbHN5L1JUCmJhbGx5CmJhbGx5aG9vL1NNREcKYmFsbS9TTQpiYWxtaW5lc3MvTQpiYWxteS9SVFAKYmFsb25leS9NCmJhbHNhL01TCmJhbHNhbS9TTQpiYWxzYW1pYwpiYWx1c3Rlci9TTQpiYWx1c3RyYWRlL01TCmJhbWJvby9TTQpiYW1ib296bGUvRFNHCmJhbi9TTQpiYW5hbC9ZCmJhbmFsaXR5L1NNCmJhbmFuYS9TTQpiYW5kJ3MKYmFuZC9FU0dECmJhbmRhZ2UvRFNNRwpiYW5kYW5uYS9NUwpiYW5kYm94L01TCmJhbmRlYXUvTQpiYW5kZWF1eApiYW5kaXQvU00KYmFuZGl0cnkvTQpiYW5kbGVhZGVyL1MKYmFuZG1hc3Rlci9TTQpiYW5kb2xlZXIvU00KYmFuZHNtYW4vTQpiYW5kc21lbgpiYW5kc3RhbmQvU00KYmFuZHdhZ29uL1NNCmJhbmR3aWR0aApiYW5kd2lkdGhzCmJhbmR5L0RSU1RHCmJhbmUvU00KYmFuZWZ1bApiYW5nL1NHTURSCmJhbmdsZS9TTQpiYW5pCmJhbmlzaC9HTERTCmJhbmlzaG1lbnQvTQpiYW5pc3Rlci9TTQpiYW5qby9NUwpiYW5qb2lzdC9TTQpiYW5rL1NaR0JNRFIKYmFua2Jvb2svU00KYmFua2NhcmQvU00KYmFua2VyL00KYmFua2luZy9NCmJhbmtub3RlL1NNCmJhbmtyb2xsL1NHTUQKYmFua3J1cHQvU0dNRApiYW5rcnVwdGN5L1NNCmJhbm5lZApiYW5uZXIvU00KYmFubmluZwpiYW5ub2NrL01TCmJhbm5zL00KYmFucXVldC9aR01EUlMKYmFucXVldGVyL00KYmFucXVldHRlL1NNCmJhbnNoZWUvTVMKYmFudGFtL1NNCmJhbnRhbXdlaWdodC9TTQpiYW50ZXIvR1NNRApiYW50ZXJpbmcvWQpiYW55YW4vU00KYmFuemFpL1NNCmJhb2JhYi9TTQpiYXAvUwpiYXB0aXNtL01TCmJhcHRpc21hbApiYXB0aXN0L1MKYmFwdGlzdGVyeS9TTQpiYXB0aXplL1pHRFJTCmJhcHRpemVkL1UKYmFwdGl6ZXIvTQpiYXIncwpiYXIvRUNVVFMKYmFyYi9TWkdNRFIKYmFyYmFjb2EKYmFyYmFyaWFuL1NNCmJhcmJhcmlhbmlzbS9NUwpiYXJiYXJpYwpiYXJiYXJpY2FsbHkKYmFyYmFyaXNtL1NNCmJhcmJhcml0eS9TTQpiYXJiYXJpemUvRFNHCmJhcmJhcm91cy9ZCmJhcmJlY3VlL0RTTUcKYmFyYmVsL1NNCmJhcmJlbGwvTVMKYmFyYmVyL0dNRApiYXJiZXJyeS9TTQpiYXJiZXJzaG9wL01TCmJhcmJpZS9TCmJhcmJpdHVyYXRlL1NNCmJhcmJ3aXJlL00KYmFyY2Fyb2xlL1NNCmJhcmQvU00KYmFyZGljCmJhcmUvRFJTUFlHCmJhcmViYWNrL0QKYmFyZWZhY2VkL1kKYmFyZWZvb3QvRApiYXJlaGFuZGVkCmJhcmVoZWFkZWQKYmFyZWxlZ2dlZApiYXJlbmVzcy9NCmJhcmYvU0dNRFkKYmFyZmx5L1NNCmJhcmdhaW4vTURSWkdTCmJhcmdhaW5lci9NCmJhcmdlL01HRFMKYmFyZ2VtYW4vTQpiYXJnZW1lbgpiYXJob3AvUwpiYXJob3BwZWQKYmFyaG9wcGluZwpiYXJpc3RhL01TCmJhcml0b25lL01TCmJhcml1bS9NCmJhcmsncwpiYXJrL0NTR0QKYmFya2VlcC9aTVJTCmJhcmtlZXBlci9NCmJhcmtlci9TTQpiYXJsZXkvTQpiYXJtYWlkL01TCmJhcm1hbi9NCmJhcm1lbgpiYXJteS9SVApiYXJuL1NNCmJhcm5hY2xlL01EUwpiYXJuZXkvUwpiYXJuc3Rvcm0vU0RSWkcKYmFybnN0b3JtZXIvTQpiYXJueWFyZC9TTQpiYXJvbWV0ZXIvTVMKYmFyb21ldHJpYwpiYXJvbWV0cmljYWxseQpiYXJvbi9NUwpiYXJvbmFnZS9NUwpiYXJvbmVzcy9NUwpiYXJvbmV0L01TCmJhcm9uZXRjeS9TTQpiYXJvbmlhbApiYXJvbnkvU00KYmFyb3F1ZS9NCmJhcnF1ZS9TTQpiYXJyYWNrL01ER1MKYmFycmFjdWRhL1NNCmJhcnJhZ2UvTUdEUwpiYXJyZS9NR0pEUwpiYXJyZWQvVUVDCmJhcnJlbC9HU01ECmJhcnJlbi9UUFNNUgpiYXJyZW5uZXNzL00KYmFycmV0dGUvU00KYmFycmljYWRlL01HRFMKYmFycmllci9NUwpiYXJyaW5nL0VDVQpiYXJyaW8vU00KYmFycmlzdGVyL01TCmJhcnJvb20vTVMKYmFycm93L1NNCmJhcnRlbmRlci9TTQpiYXJ0ZXIvWkdTTURSCmJhcnRlcmVyL00KYmFyeW9uL1NNCmJhc2FsL1kKYmFzYWx0L00KYmFzYWx0aWMKYmFzZSdzCmJhc2UvQ0RTTFRHCmJhc2ViYWxsL1NNCmJhc2Vib2FyZC9NUwpiYXNlbGVzcwpiYXNlbGluZS9NUwpiYXNlbHkKYmFzZW1hbi9NCmJhc2VtZW4KYmFzZW1lbnQvQ01TCmJhc2VuZXNzL00KYmFzZXIKYmFzaC9HTURTCmJhc2hmdWwvUFkKYmFzaGZ1bG5lc3MvTQpiYXNoaW5nL00KYmFzaWMvTVMKYmFzaWNhbGx5CmJhc2lsL00KYmFzaWxpY2EvTVMKYmFzaWxpc2svTVMKYmFzaW4vTVMKYmFzaW5mdWwvTVMKYmFzaXMvTQpiYXNrL1NHRApiYXNrZXQvU00KYmFza2V0YmFsbC9NUwpiYXNrZXRyeS9NCmJhc2tldHdvcmsvTQpiYXNxdWUvUwpiYXNzL01TCmJhc3NldC9TTQpiYXNzaW5ldC9NUwpiYXNzaXN0L01TCmJhc3NvL01TCmJhc3Nvb24vTVMKYmFzc29vbmlzdC9TTQpiYXNzd29vZC9NUwpiYXN0L00KYmFzdGFyZC9NUwpiYXN0YXJkaXphdGlvbi9NUwpiYXN0YXJkaXplL0dEUwpiYXN0YXJkeS9NCmJhc3RlL1pHTlhEUlMKYmFzdGVyL00KYmFzdGlvbi9NCmJhdC9TTQpiYXRjaC9NRFNHCmJhdGUvS0FDR1NECmJhdGgvWkdNRFJTCmJhdGhlL00KYmF0aGVyL00KYmF0aGV0aWMKYmF0aGhvdXNlL01TCmJhdGhpbmcvTQpiYXRobWF0L01TCmJhdGhvcy9NCmJhdGhyb2JlL1NNCmJhdGhyb29tL1NNCmJhdGhzCmJhdGh0dWIvTVMKYmF0aHdhdGVyCmJhdGh5c2NhcGhlL1NNCmJhdGh5c3BoZXJlL01TCmJhdGlrL01TCmJhdGlzdGUvTQpiYXRtYW4vTQpiYXRtZW4KYmF0b24vTVMKYmF0c21hbi9NCmJhdHNtZW4KYmF0dGFsaW9uL1NNCmJhdHRlZApiYXR0ZW4vR1NNRApiYXR0ZXIvSlpHU01EUgpiYXR0ZXJlci9NCmJhdHRlcnkvU00KYmF0dGluZy9NCmJhdHRsZS9MRFJTTVpHCmJhdHRsZWF4ZS9NUwpiYXR0bGVkb3JlL1NNCmJhdHRsZWRyZXNzCmJhdHRsZWZpZWxkL01TCmJhdHRsZWZyb250L01TCmJhdHRsZWdyb3VuZC9NUwpiYXR0bGVtZW50L1NNCmJhdHRsZXIvTQpiYXR0bGVzaGlwL1NNCmJhdHR5L1JUCmJhdWJsZS9TTQpiYXVkL1NNCmJhdXhpdGUvTQpiYXdkL1NNCmJhd2RpbHkKYmF3ZGluZXNzL00KYmF3ZHkvUFJUCmJhd2wvU0dNRApiYXkvU01ERwpiYXliZXJyeS9TTQpiYXlvbmV0L1NNREcKYmF5b3UvTVMKYmF6YWFyL1NNCmJhemlsbGlvbi9TCmJhem9va2EvU00KYmJsCmJkcm0KYmUKYmVhY2gvTURTRwpiZWFjaGNvbWJlci9TTQpiZWFjaGZyb250CmJlYWNoaGVhZC9NUwpiZWFjaHdlYXIvTQpiZWFjb24vU00KYmVhZC9TR01ECmJlYWRpbmcvTQpiZWFkbGUvU00KYmVhZHkvUlQKYmVhZ2xlL1NNCmJlYWsvU1pNRFIKYmVha2VyL00KYmVhbS9TR01ECmJlYW4vU0dNRApiZWFuYmFnL01TCmJlYW5mZWFzdC9TCmJlYW5pZS9TTQpiZWFucG9sZS9NUwpiZWFuc3Byb3V0L1MKYmVhbnN0YWxrL01TCmJlYXIvU1pHQkpNUgpiZWFyYWJsZS9VCmJlYXJhYmx5L1UKYmVhcmQvTURHUwpiZWFyZGxlc3MKYmVhcmVyL00KYmVhcmluZy9NCmJlYXJpc2gvUFkKYmVhcmlzaG5lc3MvTQpiZWFybGlrZQpiZWFyc2tpbi9NUwpiZWFzdC9NUwpiZWFzdGxpbmVzcy9NCmJlYXN0bHkvVFBSTQpiZWF0L1NaR0JNTlJKCmJlYXRhYmxlL1UKYmVhdGVuL1UKYmVhdGVyL00KYmVhdGlmaWMKYmVhdGlmaWNhbGx5CmJlYXRpZmljYXRpb24vTQpiZWF0aWZ5L0dYTkRTCmJlYXRpbmcvTQpiZWF0aXR1ZGUvU00KYmVhdG5pay9NUwpiZWF1L1NNCmJlYXV0L01TCmJlYXV0ZW91cy9ZCmJlYXV0aWNpYW4vU00KYmVhdXRpZmljYXRpb24vTQpiZWF1dGlmaWVyL00KYmVhdXRpZnVsL1kKYmVhdXRpZnkvTkRSU1pHCmJlYXV0eS9TTQpiZWF2ZXIvU0dNRApiZWJvcC9NUwpiZWNhbG0vR1NECmJlY2FtZQpiZWNhdXNlCmJlY2svU00KYmVja29uL1NHRApiZWNsb3VkL0dEUwpiZWNvbWUvUwpiZWNvbWluZy9VWQpiZWNxdWVyZWwvUwpiZWQvU00KYmVkYXViL0dTRApiZWRhenpsZS9HRFNMCmJlZGF6emxlbWVudC9NCmJlZGJ1Zy9TTQpiZWRjaGFtYmVyL1MKYmVkY2xvdGhlcy9NCmJlZGRlZApiZWRkZXIKYmVkZGluZy9NCmJlZGVjay9HU0QKYmVkZXZpbC9MR0RTCmJlZGV2aWxtZW50L00KYmVkZmVsbG93L1NNCmJlZGhlYWQvUwpiZWRpbS9TCmJlZGltbWVkCmJlZGltbWluZwpiZWRpemVuL0dEUwpiZWRsYW0vU00KYmVkcGFuL1NNCmJlZHBvc3QvU00KYmVkcmFnZ2xlL0dEUwpiZWRyaWRkZW4KYmVkcm9jay9TTQpiZWRyb2xsL1NNCmJlZHJvb20vU00KYmVkc2lkZS9TTQpiZWRzaXQvUwpiZWRzaXR0ZXIvUwpiZWRzb3JlL1NNCmJlZHNwcmVhZC9TTQpiZWRzdGVhZC9TTQpiZWR0aW1lL1NNCmJlZS9SU01aR0oKYmVlYnJlYWQvTQpiZWVjaC9NUwpiZWVjaG51dC9NUwpiZWVmL1NHTUQKYmVlZmJ1cmdlci9TTQpiZWVmY2FrZS9NUwpiZWVmaW5lc3MvTQpiZWVmc3RlYWsvTVMKYmVlZnkvUlBUCmJlZWhpdmUvTVMKYmVla2VlcGVyL01TCmJlZWtlZXBpbmcvTQpiZWVsaW5lL01TCmJlZW4KYmVlcC9TWkdNRFIKYmVlcGVyL00KYmVlci9NCmJlZXJ5L1RSCmJlZXN3YXgvTQpiZWV0L1NNCmJlZXRsZS9NR0RTCmJlZXRyb290L1MKYmVldmVzCmJlZmFsbC9TR04KYmVmZWxsCmJlZml0L1MKYmVmaXR0ZWQKYmVmaXR0aW5nL1kKYmVmb2cvUwpiZWZvZ2dlZApiZWZvZ2dpbmcKYmVmb3JlCmJlZm9yZWhhbmQKYmVmb3VsL0RHUwpiZWZyaWVuZC9TR0QKYmVmdWRkbGUvR0xEUwpiZWZ1ZGRsZW1lbnQvTQpiZWcvUwpiZWdhbgpiZWdhdApiZWdldC9TCmJlZ2V0dGVyL1MKYmVnZXR0aW5nCmJlZ2dhci9NRFlHUwpiZWdnYXJ5L00KYmVnZ2VkCmJlZ2dpbmcKYmVnaW4vUwpiZWdpbm5lci9TTQpiZWdpbm5pbmcvTVMKYmVnb25lCmJlZ29uaWEvU00KYmVnb3QKYmVnb3R0ZW4KYmVncmltZS9EU0cKYmVncnVkZ2UvRFNHCmJlZ3J1ZGdpbmcvWQpiZWd1aWxlL0RSU1pHTApiZWd1aWxlbWVudC9NCmJlZ3VpbGVyL00KYmVndWlsaW5nL1kKYmVndWluZS9TTQpiZWd1bS9NUwpiZWd1bgpiZWhhbGYvTQpiZWhhbHZlcwpiZWhhdmUvR0RTCmJlaGF2aW9yL1NNCmJlaGF2aW9yYWwvWQpiZWhhdmlvcmlzbS9NCmJlaGF2aW9yaXN0L01TCmJlaGVhZC9ER1MKYmVoZWxkCmJlaGVtb3RoL00KYmVoZW1vdGhzCmJlaGVzdC9NUwpiZWhpbmQvTVMKYmVoaW5kaGFuZApiZWhvbGQvTlJaR1MKYmVob2xkZXIvTQpiZWhvb3ZlL0RTRwpiZWlnZS9NCmJlaW5nL00KYmVqZXdlbC9TREcKYmVsYWJvci9TREcKYmVsYXRlZC9ZCmJlbGF5L0dEUwpiZWxjaC9HTURTCmJlbGVhZ3Vlci9HU0QKYmVsZnJ5L1NNCmJlbGllL0RTCmJlbGllZi9FVU0KYmVsaWVmcwpiZWxpZXZhYmxlL1UKYmVsaWV2YWJseS9VCmJlbGlldmUvRURSU1pHCmJlbGlldmVyL0VVTVMKYmVsaWV2aW5nL1UKYmVsaXR0bGUvTERTRwpiZWxpdHRsZW1lbnQvTQpiZWxsL1NHTUQKYmVsbGFkb25uYS9NCmJlbGxib3kvU00KYmVsbGUvTVMKYmVsbGVkL0EKYmVsbGV0cmlzdC9NUwpiZWxsZXRyaXN0aWMKYmVsbGhvcC9TTQpiZWxsaWNvc2UKYmVsbGljb3NpdHkvTQpiZWxsaWdlcmVuY2UvTQpiZWxsaWdlcmVuY3kvTQpiZWxsaWdlcmVudC9NWVMKYmVsbGluZy9BCmJlbGxtYW4vTQpiZWxsbWVuCmJlbGxvdy9NREdTCmJlbGx3ZXRoZXIvTVMKYmVsbHkvR0RTTQpiZWxseWFjaGUvTUdEUwpiZWxseWJ1dHRvbi9TTQpiZWxseWZ1bC9NUwpiZWxvbmcvSkRHUwpiZWxvbmdpbmcvTQpiZWxvdmVkL1NNCmJlbG93CmJlbHQvU0dNRApiZWx0d2F5L1NNCmJlbHVnYS9NUwpiZWx5aW5nCmJlbWlyZS9HRFMKYmVtb2FuL0RHUwpiZW11c2UvTEdEUwpiZW11c2VkL1kKYmVtdXNlbWVudC9NCmJlbmNoL0dNRFMKYmVuY2htYXJrL01TCmJlbmQvQlNaR01SCmJlbmRlci9NCmJlbmR5L1RSCmJlbmVhdGgKYmVuZWRpY3RpbmUKYmVuZWRpY3Rpb24vU00KYmVuZWRpY3RvcnkKYmVuZWZhY3Rpb24vU00KYmVuZWZhY3Rvci9NUwpiZW5lZmFjdHJlc3MvTVMKYmVuZWZpY2UvU00KYmVuZWZpY2VuY2UvTQpiZW5lZmljZW50L1kKYmVuZWZpY2lhbC9ZCmJlbmVmaWNpYXJ5L1NNCmJlbmVmaXQvU01ERwpiZW5ldm9sZW5jZS9TTQpiZW5ldm9sZW50L1kKYmVuaWdodGVkL1kKYmVuaWduL1kKYmVuaWduYW50CmJlbmlnbml0eS9NCmJlbnQvU00KYmVudHdvb2QvTQpiZW51bWIvRFNHCmJlbnplbmUvTQpiZW56aW5lL00KYmVuenlsCmJlcXVlYXRoL0RHCmJlcXVlYXRocwpiZXF1ZXN0L01TCmJlcmF0ZS9HRFMKYmVyZWF2ZS9EU0xHCmJlcmVhdmVtZW50L01TCmJlcmVmdApiZXJldC9NUwpiZXJnL1NNCmJlcmliZXJpL00KYmVyay9TCmJlcmtlbGl1bS9NCmJlcm0vU00KYmVycnkvR0RTTQpiZXJyeWxpa2UKYmVyc2VyawpiZXJ0aC9HTUQKYmVydGhzCmJlcnlsL01TCmJlcnlsbGl1bS9NCmJlc2VlY2gvWkdSUwpiZXNlZWNoZXIvTQpiZXNlZWNoaW5nL1kKYmVzZWVtL0RTRwpiZXNldC9TCmJlc2V0dGluZwpiZXNpZGUvUwpiZXNpZWdlL1pHRFJTCmJlc2llZ2VyL00KYmVzbWVhci9EU0cKYmVzbWlyY2gvR0RTCmJlc29tL01TCmJlc290L1MKYmVzb3R0ZWQKYmVzb3R0aW5nCmJlc291Z2h0CmJlc3BhbmdsZS9EU0cKYmVzcGF0dGVyL0dTRApiZXNwZWFrL1NHCmJlc3BlY3RhY2xlZApiZXNwb2tlCmJlc3Bva2VuCmJlc3QvU0dNRApiZXN0aWFsL1kKYmVzdGlhbGl0eS9NCmJlc3RpYXJ5L1NNCmJlc3Rpci9TCmJlc3RpcnJlZApiZXN0aXJyaW5nCmJlc3Rvdy9ER1MKYmVzdG93YWwvU00KYmVzdHJldy9TREcKYmVzdHJld24KYmVzdHJpZGRlbgpiZXN0cmlkZS9TRwpiZXN0cm9kZQpiZXN0c2VsbGVyL01TCmJlc3RzZWxsaW5nCmJldC9TTQpiZXRhL1NNCmJldGFrZS9HUwpiZXRha2VuCmJldGNoYQpiZXRlbC9NCmJldGhpbmsvU0cKYmV0aG91Z2h0CmJldGlkZS9HRFMKYmV0aW1lcwpiZXRva2VuL0dEUwpiZXRvb2sKYmV0cmF5L0RSWkdTCmJldHJheWFsL1NNCmJldHJheWVyL00KYmV0cm90aC9ERwpiZXRyb3RoYWwvU00KYmV0cm90aGVkL00KYmV0cm90aHMKYmV0dGVyL01ER0xTCmJldHRlcm1lbnQvTQpiZXR0aW5nCmJldHRvci9NUwpiZXR3ZWVuCmJldHdpeHQKYmV2ZWwvR01EUwpiZXZlcmFnZS9TTQpiZXZ2eS9TCmJldnkvU00KYmV3YWlsL0RHUwpiZXdhcmUvR0RTCmJld2hpc2tlcmVkCmJld2lnZ2VkCmJld2lsZGVyL0xTR0QKYmV3aWxkZXJpbmcvWQpiZXdpbGRlcm1lbnQvTQpiZXdpdGNoL0dMRFMKYmV3aXRjaGluZy9ZCmJld2l0Y2htZW50L00KYmV5L1NNCmJleW9uZApiZXplbC9NUwpiZgpiaGFqaQpiaS9TTVJaCmJpYW5udWFsL1kKYmlhcy9HTURTCmJpYXNlZC9VCmJpYXRobG9uL1NNCmJpYi9TTQpiaWJsZS9NUwpiaWJsaWNhbApiaWJsaW9ncmFwaGVyL01TCmJpYmxpb2dyYXBoaWMKYmlibGlvZ3JhcGhpY2FsL1kKYmlibGlvZ3JhcGh5L1NNCmJpYmxpb3BoaWxlL1NNCmJpYnVsb3VzCmJpY2FtZXJhbApiaWNhbWVyYWxpc20vTQpiaWNhcmIvTVMKYmljYXJib25hdGUvTVMKYmljZW50ZW5hcnkvU00KYmljZW50ZW5uaWFsL1NNCmJpY2VwL01TCmJpY2Vwcy9NCmJpY2tlci9NRFJaR1MKYmlja2VyZXIvTQpiaWNvbmNhdmUKYmljb252ZXgKYmljdXNwaWQvTVMKYmljeWNsZS9EUlNNWkcKYmljeWNsZXIvTQpiaWN5Y2xpc3QvU00KYmlkL1NNRwpiaWRkYWJsZQpiaWRkZW4vVQpiaWRkZXIvTVMKYmlkZGluZy9NCmJpZGR5L1NNCmJpZGUvUwpiaWRldC9NUwpiaWRpcmVjdGlvbmFsL1kKYmllbm5pYWwvTVlTCmJpZW5uaXVtL01TCmJpZXIvTQpiaWZmL1NHRApiaWZvY2FsL1MKYmlmb2NhbHMvTQpiaWZ1cmNhdGUvWERTR04KYmlmdXJjYXRpb24vTQpiaWcvUApiaWdhbWlzdC9TTQpiaWdhbW91cwpiaWdhbXkvTQpiaWdnZXIKYmlnZ2VzdApiaWdnaWUvTVMKYmlnZ2lzaApiaWdoZWFkL1NNCmJpZ2hlYXJ0ZWQvUApiaWdoZWFydGVkbmVzcy9NCmJpZ2hvcm4vU00KYmlnaHQvTVMKYmlnbW91dGgvTQpiaWdtb3V0aHMKYmlnbmVzcy9NCmJpZ290L01EUwpiaWdvdHJ5L1NNCmJpZ3dpZy9NUwpiaWpvdS9NCmJpam91eApiaWtlL0RSU01aRwpiaWtlci9NCmJpa2luaS9NUwpiaWxhYmlhbC9NUwpiaWxhdGVyYWwvWQpiaWxiZXJyeS9TCmJpbGUvTQpiaWxnZS9NUwpiaWxpbmd1YWwvU01ZCmJpbGluZ3VhbGlzbS9NCmJpbGlvdXMvUApiaWxpb3VzbmVzcy9NCmJpbGlydWJpbgpiaWxrL1NaR0RSCmJpbGtlci9NCmJpbGwvU0JKR01ECmJpbGxib2FyZC9NUwpiaWxsZXQvR01EUwpiaWxsZm9sZC9TTQpiaWxsaG9vay9TCmJpbGxpYXJkL1MKYmlsbGlhcmRzL00KYmlsbGluZy9NCmJpbGxpbmdzZ2F0ZS9NCmJpbGxpb24vTUhTCmJpbGxpb25haXJlL1NNCmJpbGxpb250aC9NCmJpbGxpb250aHMKYmlsbG93L0dNRFMKYmlsbG93eQpiaWxseS9TTQpiaWxseWNhbi9TCmJpbWJvL01TCmJpbWV0YWxsaWMvU00KYmltZXRhbGxpc20vTQpiaW1vbnRobHkvU00KYmluL1NNCmJpbmFyeS9TTQpiaW5kJ3MKYmluZC9BVUdTCmJpbmRlci9NUwpiaW5kZXJ5L1NNCmJpbmRpbmcvTVMKYmluZHdlZWQvTQpiaW5nZS9NRFMKYmluZ28vTQpiaW5tYW4KYmlubWVuCmJpbm5hY2xlL1NNCmJpbm5lZApiaW5uaW5nCmJpbm9jdWxhci9NUwpiaW5vbWlhbC9TTQpiaW8vU00KYmlvY2hlbWljYWwvU01ZCmJpb2NoZW1pc3QvTVMKYmlvY2hlbWlzdHJ5L00KYmlvZGVncmFkYWJpbGl0eS9NCmJpb2RlZ3JhZGUvRFNHQgpiaW9kaXZlcnNpdHkvTQpiaW9ldGhpY3MvTQpiaW9mZWVkYmFjay9NCmJpb2cKYmlvZ3JhcGhlci9TTQpiaW9ncmFwaGljCmJpb2dyYXBoaWNhbC9ZCmJpb2dyYXBoeS9TTQpiaW9sCmJpb2xvZ2ljCmJpb2xvZ2ljYWwvWQpiaW9sb2dpc3QvTVMKYmlvbG9neS9NCmJpb21hc3MvTQpiaW9tZWRpY2FsCmJpb25pYy9TCmJpb25pY2FsbHkKYmlvbmljcy9NCmJpb3BoeXNpY2FsCmJpb3BoeXNpY2lzdC9NUwpiaW9waHlzaWNzL00KYmlvcGljL01TCmJpb3BzeS9HRFNNCmJpb3JlYWN0b3IvUwpiaW9yaHl0aG0vTVMKYmlvc2Vuc29yL1MKYmlvc3BoZXJlL1NNCmJpb3N5bnRoZXNpcwpiaW90ZWNoCmJpb3RlY2hub2xvZ2ljYWwKYmlvdGVjaG5vbG9neS9NCmJpb3Rpbi9NCmJpcGFydGlzYW4KYmlwYXJ0aXNhbnNoaXAvTQpiaXBhcnRpdGUKYmlwZWQvTVMKYmlwZWRhbApiaXBsYW5lL01TCmJpcG9sYXIKYmlwb2xhcml0eS9NCmJpcmFjaWFsCmJpcmNoL0dNRFMKYmlyZC9TWkdNRFIKYmlyZGJhdGgvTQpiaXJkYmF0aHMKYmlyZGJyYWluL1NNRApiaXJkY2FnZS9TCmJpcmRlci9NCmJpcmRob3VzZS9NUwpiaXJkaWUvTURTCmJpcmRpZWluZwpiaXJkbGlrZQpiaXJkbGltZS9NCmJpcmRzZWVkL00KYmlyZHNvbmcKYmlyZHdhdGNoZXIvU00KYmlyZHlpbmcKYmlyZXR0YS9TTQpiaXJ0aC9aR01EUgpiaXJ0aGRheS9NUwpiaXJ0aGVyL00KYmlydGhtYXJrL01TCmJpcnRocGxhY2UvTVMKYmlydGhyYXRlL01TCmJpcnRocmlnaHQvTVMKYmlydGhzL0EKYmlydGhzdG9uZS9TTQpiaXNjdWl0L1NNCmJpc2VjdC9ER1MKYmlzZWN0aW9uL01TCmJpc2VjdG9yL1NNCmJpc2V4dWFsL01ZUwpiaXNleHVhbGl0eS9NCmJpc2hvcC9NUwpiaXNob3ByaWMvU00KYmlzbXV0aC9NCmJpc29uL00KYmlzcXVlL00KYmlzdHJvL01TCmJpdC9DU01HCmJpdGNoL0dNRFMKYml0Y2hpbHkKYml0Y2hpbmVzcy9NCmJpdGNoeS9QUlQKYml0Y29pbi9TTQpiaXRlL1JTTVoKYml0ZXIvTQpiaXRpbmcvWQpiaXRtYXAvUwpiaXR0ZW4KYml0dGVyL1BNUllUUwpiaXR0ZXJuL1NNCmJpdHRlcm5lc3MvTQpiaXR0ZXJzL00KYml0dGVyc3dlZXQvTVMKYml0dHkvVFIKYml0dW1lbi9NCmJpdHVtaW5vdXMKYml2YWxlbnQKYml2YWx2ZS9TTQpiaXZvdWFjL01TCmJpdm91YWNrZWQKYml2b3VhY2tpbmcKYml3ZWVrbHkvU00KYml5ZWFybHkKYml6L00KYml6YXJyZS9ZCmJrCmJsL0RHCmJsYWIvU00KYmxhYmJlZApibGFiYmVyL0RHUwpibGFiYmVybW91dGgvTQpibGFiYmVybW91dGhzCmJsYWJiaW5nCmJsYWNrL1BYVEdNRE5SWVMKYmxhY2thbW9vci9NUwpibGFja2JhbGwvU0dNRApibGFja2JlcnJ5L0dTTQpibGFja2JpcmQvU00KYmxhY2tib2FyZC9NUwpibGFja2N1cnJhbnQvUwpibGFja2VuL0RHCmJsYWNrZmFjZQpibGFja2d1YXJkL1NNCmJsYWNraGVhZC9NUwpibGFja2luZy9NCmJsYWNraXNoCmJsYWNramFjay9NREdTCmJsYWNrbGVnL1MKYmxhY2tsaXN0L01EU0cKYmxhY2ttYWlsL01EUlNaRwpibGFja21haWxlci9NCmJsYWNrbmVzcy9NCmJsYWNrb3V0L1NNCmJsYWNrc21pdGgvTQpibGFja3NtaXRocwpibGFja3NuYWtlL1NNCmJsYWNrdGhvcm4vU00KYmxhY2t0b3AvU00KYmxhY2t0b3BwZWQKYmxhY2t0b3BwaW5nCmJsYWRkZXIvTVMKYmxhZGUvTURTCmJsYWcvUwpibGFnZ2VkCmJsYWdnaW5nCmJsYWgvTQpibGFocy9NCmJsYW1lL0JNR0RSUwpibGFtZWxlc3MvWVAKYmxhbWVsZXNzbmVzcy9NCmJsYW1ld29ydGhpbmVzcy9NCmJsYW1ld29ydGh5L1AKYmxhbW1vCmJsYW5jaC9HRFMKYmxhbmNtYW5nZS9NUwpibGFuZC9QVFJZCmJsYW5kaXNoL0RTTEcKYmxhbmRpc2htZW50L1NNCmJsYW5kbmVzcy9NCmJsYW5rL1RHUE1EUllTCmJsYW5rZXQvR01EUwpibGFua25lc3MvTQpibGFyZS9NR0RTCmJsYXJuZXkvU01ERwpibGFzZQpibGFzcGhlbWUvWkdEUlMKYmxhc3BoZW1lci9NCmJsYXNwaGVtb3VzL1kKYmxhc3BoZW15L1NNCmJsYXN0L1pHTURSUwpibGFzdGVyL00KYmxhc3RvZmYvTVMKYmxhdC9TCmJsYXRhbmN5L1NNCmJsYXRhbnQvWQpibGF0aGVyL1NNREcKYmxhemUvTVpHRFJTCmJsYXplci9NCmJsYXpvbi9NREdTCmJsZGcKYmxlYWNoL01EUlNaRwpibGVhY2hlZC9VCmJsZWFjaGVyL00KYmxlYWsvVFBSWQpibGVha25lc3MvTQpibGVhcgpibGVhcmlseQpibGVhcmluZXNzL00KYmxlYXJ5L1BSVApibGVhdC9HTURTCmJsZWVkL1pHUlMKYmxlZWRlci9NCmJsZWVkaW5nL00KYmxlZXAvWkdNRFJTCmJsZWVwZXIvTQpibGVtaXNoL0dNRFMKYmxlbWlzaGVkL1UKYmxlbmNoL0RTRwpibGVuZC9aR01EUlMKYmxlbmRlci9NCmJsZXNzL0dEU0oKYmxlc3NlZC9ZUApibGVzc2VkbmVzcy9NCmJsZXNzaW5nL00KYmxldGNoCmJsZXcKYmxpZ2h0L1pHTURSUwpibGltZXkKYmxpbXAvTVMKYmxpbXBpc2gKYmxpbmQvUFpUR01EUllTCmJsaW5kZXIvTQpibGluZGZvbGQvU01ERwpibGluZGluZy9ZCmJsaW5kbmVzcy9NCmJsaW5kc2lkZS9EU0cKYmxpbmkvTVMKYmxpbmsvWkdNRFJTCmJsaW5rZXIvTURHCmJsaW50ei9NUwpibGludHplL00KYmxpcC9TTQpibGlzcy9NCmJsaXNzZnVsL1lQCmJsaXNzZnVsbmVzcy9NCmJsaXN0ZXIvR01EUwpibGlzdGVyaW5nL1kKYmxpc3RlcnkKYmxpdGhlL1BZVFIKYmxpdGhlbmVzcy9NCmJsaXRoZXIvRwpibGl0aGVzb21lCmJsaXR6L0dNRFMKYmxpdHprcmllZy9NUwpibGl2ZXQvUwpibGl6emFyZC9TTQpibG9hdC9aR0RSUwpibG9hdHdhcmUKYmxvYi9TTQpibG9iYmVkCmJsb2JiaW5nCmJsb2MvU00KYmxvY2sncwpibG9jay9VR0RTCmJsb2NrYWRlL01aR0RSUwpibG9ja2FkZXIvTQpibG9ja2FnZS9NUwpibG9ja2J1c3Rlci9TTQpibG9ja2J1c3RpbmcvTQpibG9ja2VyL01TCmJsb2NraGVhZC9TTQpibG9ja2hvdXNlL01TCmJsb2cvU00KYmxvZ2dlZApibG9nZ2VyL01TCmJsb2dnaW5nCmJsb2tlL01TCmJsb2tpc2gKYmxvbmQvUFRNUlMKYmxvbmRlL01TCmJsb25kaXNoCmJsb25kbmVzcy9NCmJsb29kL0dNRFMKYmxvb2RiYXRoL00KYmxvb2RiYXRocwpibG9vZGN1cmRsaW5nCmJsb29kaG91bmQvU00KYmxvb2RpbHkKYmxvb2RpbmVzcy9NCmJsb29kbGVzcy9ZUApibG9vZGxlc3NuZXNzL00KYmxvb2RsZXR0aW5nL00KYmxvb2RsaW5lL1NNCmJsb29kbW9iaWxlL01TCmJsb29kc2hlZC9NCmJsb29kc2hvdApibG9vZHN0YWluL1NNRApibG9vZHN0b2NrL00KYmxvb2RzdHJlYW0vU00KYmxvb2RzdWNrZXIvU00KYmxvb2RzdWNraW5nCmJsb29kdGhpcnN0aWx5CmJsb29kdGhpcnN0aW5lc3MvTQpibG9vZHRoaXJzdHkvUlBUCmJsb29keS9QVEdEUlMKYmxvb20vWkdNRFJTCmJsb29tZXIvTQpibG9vcC9aR01EUlMKYmxvb3Blci9NCmJsb3Nzb20vR01EUwpibG9zc29teQpibG90L1NNCmJsb3RjaC9HTURTCmJsb3RjaHkvVFIKYmxvdHRlZApibG90dGVyL01TCmJsb3R0aW5nCmJsb3R0bwpibG91c2UvTUdEUwpibG93L1NaR01SCmJsb3dlci9NCmJsb3dmbHkvU00KYmxvd2d1bi9NUwpibG93aGFyZC9NUwpibG93aG9sZS9TCmJsb3dqb2IKYmxvd2xhbXAvUwpibG93bgpibG93b3V0L1NNCmJsb3dwaXBlL1NNCmJsb3d0b3JjaC9NUwpibG93dXAvTVMKYmxvd3kvVFIKYmxvd3p5L1JUCmJsdWJiZXIvR1NNRApibHViYmVyeQpibHVkZ2Vvbi9NREdTCmJsdWUvRFJTUE1URwpibHVlYmVsbC9NUwpibHVlYmVycnkvU00KYmx1ZWJpcmQvTVMKYmx1ZWJvbm5ldC9TTQpibHVlYm90dGxlL1NNCmJsdWVmaXNoL01TCmJsdWVnaWxsL01TCmJsdWVncmFzcy9NCmJsdWVpc2gKYmx1ZWphY2tldC9TTQpibHVlamVhbnMvTQpibHVlbmVzcy9NCmJsdWVub3NlL01TCmJsdWVwb2ludC9NUwpibHVlcHJpbnQvTURHUwpibHVlc3RvY2tpbmcvU00KYmx1ZXN5L1JUCmJsdWV0L01TCmJsdWZmL1pUR1BNRFJZUwpibHVmZmVyL00KYmx1ZmZuZXNzL00KYmx1aW5nL00KYmx1aXNoCmJsdW5kZXIvTURSWkdTCmJsdW5kZXJidXNzL01TCmJsdW5kZXJlci9NCmJsdW50L1BUR0RSWVMKYmx1bnRuZXNzL00KYmx1ci9TTQpibHVyYi9NUwpibHVycmVkCmJsdXJyaW5lc3MvTQpibHVycmluZwpibHVycnkvVFJQCmJsdXJ0L0dEUwpibHVzaC9aR01EUlMKYmx1c2hlci9NCmJsdXN0ZXIvTURSU1pHCmJsdXN0ZXJlci9NCmJsdXN0ZXJvdXMKYmx1c3RlcnkKYmx2ZApib2EvU00KYm9hci9TTQpib2FyZC9aR01EUlMKYm9hcmRlci9NCmJvYXJkaW5nL00KYm9hcmRpbmdob3VzZS9NUwpib2FyZHJvb20vTVMKYm9hcmR3YWxrL01TCmJvYXN0L1pHTURSUwpib2FzdGVyL00KYm9hc3RmdWwvUFkKYm9hc3RmdWxuZXNzL00KYm9hdC9TWkdNRFIKYm9hdGVyL00KYm9hdGhvdXNlL01TCmJvYXRpbmcvTQpib2F0bG9hZC9TCmJvYXRtYW4vTQpib2F0bWVuCmJvYXRzd2Fpbi9TTQpib2F0eWFyZC9TCmJvYi9TTQpib2JiZWQKYm9iYmluL01TCmJvYmJpbmcKYm9iYmxlL01HRFMKYm9iYnkvU00KYm9iYnlzb3hlci9TTQpib2JjYXQvTVMKYm9ib2xpbmsvU00KYm9ic2xlZC9TTQpib2JzbGVkZGVkCmJvYnNsZWRkZXIvTVMKYm9ic2xlZGRpbmcKYm9ic2xlaWdoL00KYm9ic2xlaWdocwpib2J0YWlsL1NNCmJvYndoaXRlL01TCmJvY2NpZS9NCmJvY2svTQpib2QvU01ERwpib2RhY2lvdXMKYm9kZS9TCmJvZGVnYS9NUwpib2RnZS9HRFMKYm9kaWNlL01TCmJvZGlseQpib2RraW4vTVMKYm9keS9EU00KYm9keWJ1aWxkZXIvU00KYm9keWJ1aWxkaW5nL00KYm9keWd1YXJkL01TCmJvZHlzdWl0L1NNCmJvZHl3b3JrL00KYm9mZmluL1MKYm9mZm8KYm9nL1NNCmJvZ2EKYm9nZXkvR01EUwpib2dleW1hbi9NCmJvZ2V5bWVuCmJvZ2dlZApib2dnaW5nCmJvZ2dsZS9HRFMKYm9nZ3kvVFIKYm9naWUvTVMKYm9nb24KYm9nb3NpdHkKYm9ndXMKYm9neW1hbi9NCmJvZ3ltZW4KYm9oZW1pYW4vU00KYm9oZW1pYW5pc20vTQpib2lsL1NKWkdNRFIKYm9pbGVyL00KYm9pbGVybWFrZXIvU00KYm9pbGVycGxhdGUvTQpib2luay9HRFMKYm9pc3Rlcm91cy9ZUApib2lzdGVyb3VzbmVzcy9NCmJvbGEvU00KYm9sZC9QVFJZCmJvbGRmYWNlL0RNCmJvbGRuZXNzL00KYm9sZS9TTQpib2xlcm8vTVMKYm9saXZhci9NUwpib2xpdmFyZXMKYm9sbC9TTQpib2xsYXJkL1MKYm9sbGl4L0dNRFMKYm9sbG9ja2luZy9TCmJvbGxvY2tzCmJvbG9nbmEvTQpib2xzaGllCmJvbHN0ZXIvR01EUwpib2x0J3MKYm9sdC9VU0dECmJvbHRob2xlL1MKYm9sdXMvTVMKYm9tYi9TSlpHTURSCmJvbWJhcmQvR0RMUwpib21iYXJkaWVyL01TCmJvbWJhcmRtZW50L1NNCmJvbWJhc3QvTQpib21iYXN0aWMKYm9tYmFzdGljYWxseQpib21iZXIvTQpib21icHJvb2YKYm9tYnNoZWxsL1NNCmJvbWJzaXRlL1MKYm9uYW56YS9NUwpib25ib24vTVMKYm9uY2UvUwpib25kL1NHTUQKYm9uZGFnZS9NCmJvbmRob2xkZXIvTVMKYm9uZGluZy9NCmJvbmRtYW4vTQpib25kbWVuCmJvbmRzbWFuL00KYm9uZHNtZW4KYm9uZHdvbWFuL00KYm9uZHdvbWVuCmJvbmUvRFJTTVpHCmJvbmVoZWFkL1NNRApib25lbGVzcwpib25lci9NCmJvbmVzaGFrZXIvUwpib25leWFyZApib25maXJlL01TCmJvbmcvU0dNRApib25nby9NUwpib25ob21pZS9NCmJvbmluZXNzL00KYm9uaXRvL01TCmJvbmsvU1pHRApib25uZXQvTVMKYm9ubnkvVFIKYm9ub2JvL01TCmJvbnNhaS9NCmJvbnVzL01TCmJvbnkvUFRSCmJvby9TTURIRwpib29iL1NHTUQKYm9vYnkvU00KYm9vZGxlL01TCmJvb2dlci9TCmJvb2dleW1hbi9NCmJvb2dleW1lbgpib29naWUvTURTCmJvb2dpZWluZwpib29naWVtYW4vTQpib29ob28vR01EUwpib29rL1NCSkdNRApib29rYmluZGVyL1NNCmJvb2tiaW5kZXJ5L1NNCmJvb2tiaW5kaW5nL00KYm9va2Nhc2UvTVMKYm9va2VuZC9NUwpib29raWUvTVMKYm9va2luZy9NCmJvb2tpc2gKYm9va2tlZXBlci9NUwpib29ra2VlcGluZy9NCmJvb2tsZXQvTVMKYm9va21ha2VyL1NNCmJvb2ttYWtpbmcvTQpib29rbWFyay9TTURHCmJvb2ttb2JpbGUvU00KYm9va3BsYXRlL01TCmJvb2tzZWxsZXIvTVMKYm9va3NoZWxmL00KYm9va3NoZWx2ZXMKYm9va3Nob3AvU00KYm9va3N0YWxsL1MKYm9va3N0b3JlL01TCmJvb2t3b3JtL1NNCmJvb20vU1pHTURSCmJvb21ib3gvTVMKYm9vbWVyYW5nL01ER1MKYm9vbi9TTQpib29uZG9ja3MvTQpib29uZG9nZ2xlL01aR0RSUwpib29uZG9nZ2xlci9NCmJvb25pZXMvTQpib29yL1NNCmJvb3Jpc2gvUFkKYm9vcmlzaG5lc3MvTVMKYm9vc3QvWkdNRFJTCmJvb3N0ZXIvTQpib290J3MKYm9vdC9BU0dECmJvb3RibGFjay9TTQpib290ZWUvTVMKYm9vdGgvTQpib290aHMKYm9vdGxhY2UvUwpib290bGVnL01TCmJvb3RsZWdnZWQKYm9vdGxlZ2dlci9NUwpib290bGVnZ2luZy9NCmJvb3RsZXNzCmJvb3RzdHJhcC9NUwpib290c3RyYXBwZWQKYm9vdHN0cmFwcGluZwpib290eS9TTQpib296ZS9NWkdEUlMKYm9vemVyL00KYm9venkvVFIKYm9wL1NNCmJvcHBlZApib3BwaW5nCmJvcmF4L00KYm9yZGVsbG8vTVMKYm9yZGVyL0dNRFMKYm9yZGVybGFuZC9NUwpib3JkZXJsaW5lL01TCmJvcmUvRFJTTVpHCmJvcmVkb20vTQpib3JlaG9sZS9TCmJvcmVyL00KYm9yaW5nL1kKYm9ybi9JQVUKYm9ybmUKYm9yb24vTQpib3JvdWdoL00KYm9yb3VnaHMKYm9ycm93L1NEUlpHSgpib3Jyb3dlci9NCmJvcnJvd2luZy9NCmJvcnNjaHQvTQpib3JzdGFsL1MKYm9yem9pL1NNCmJvc2gvTQpib3NvbSdzCmJvc29tL1VTCmJvc29teQpib3NzL0RTR00KYm9zc2lseQpib3NzaW5lc3MvTQpib3NzaXNtL00KYm9zc3kvUlRQCmJvdC9TCmJvdGFuaWMKYm90YW5pY2FsL1kKYm90YW5pc3QvU00KYm90YW55L00KYm90Y2gvRFJTWkdNCmJvdGNoZXIvTQpib3RoCmJvdGhlci9TTURHCmJvdGhlcmF0aW9uCmJvdGhlcnNvbWUKYm90bmV0L1NNCmJvdHRsZS9EUlNNWkcKYm90dGxlbmVjay9NUwpib3R0bGVyL00KYm90dG9tL1NNREcKYm90dG9tbGVzcwpib3R1bGludW0KYm90dWxpc20vTQpib3Vkb2lyL1NNCmJvdWZmYW50L1NNCmJvdWdhaW52aWxsZWEvTVMKYm91Z2gvTQpib3VnaHMKYm91Z2h0CmJvdWlsbGFiYWlzc2UvU00KYm91aWxsb24vTVMKYm91bGRlci9TTQpib3VsZXMKYm91bGV2YXJkL1NNCmJvdW5jZS9EUlNNWkcKYm91bmNlci9NCmJvdW5jaWx5CmJvdW5jaW5lc3MvTQpib3VuY3kvUlRQCmJvdW5kL0FTTUdECmJvdW5kYXJ5L1NNCmJvdW5kZW4KYm91bmRlci9TTQpib3VuZGxlc3MvUFkKYm91bmRsZXNzbmVzcy9NCmJvdW50ZW91cy9ZUApib3VudGVvdXNuZXNzL00KYm91bnRpZnVsL1lQCmJvdW50aWZ1bG5lc3MvTQpib3VudHkvU00KYm91cXVldC9TTQpib3VyYm9uL1NNCmJvdXJnZW9pcy9NCmJvdXJnZW9pc2llL00KYm91c3Ryb3BoZWRvbgpib3V0L01TCmJvdXRpcXVlL1NNCmJvdXRvbm5pZXJlL01TCmJvdXpvdWtpL01TCmJvdmluZS9TTQpib3Z2ZXIKYm93L1pHU01EUgpib3dkbGVyaXphdGlvbi9NUwpib3dkbGVyaXplL0RTRwpib3dlZC9VCmJvd2VsL1NNCmJvd2VyL00KYm93bC9NRFJaR1MKYm93bGVnL1NNCmJvd2xlZ2dlZApib3dsZXIvTQpib3dsZnVsL1NNCmJvd2xpbmUvU00KYm93bGluZy9NCmJvd21hbi9NCmJvd21lbgpib3dzcHJpdC9TTQpib3dzdHJpbmcvU00KYm93d293L1NNCmJveC9aR01ETlJTCmJveGNhci9TTQpib3hlci9NCmJveGluZy9NCmJveGxpa2UKYm94cm9vbS9TCmJveHdvb2QvTQpib3h5L1JUCmJveS9TTQpib3ljb3R0L1NHTUQKYm95ZnJpZW5kL01TCmJveWhvb2QvU00KYm95aXNoL1lQCmJveWlzaG5lc3MvTQpib3lzZW5iZXJyeS9TTQpib3pvL01TCmJwbQpicHMKYnJhL1NNCmJyYWNlL01aR0RSUwpicmFjZWxldC9NUwpicmFjZXIvTQpicmFjZXJvL01TCmJyYWNrZW4vTQpicmFja2V0L0dNRFMKYnJhY2tpc2gvUApicmFja2lzaG5lc3MvTQpicmFjdC9NUwpicmFkL1NNCmJyYWRhd2wvUwpicmFkeWNhcmRpYQpicmFlL1NNCmJyYWcvU00KYnJhZ2dhZG9jaW8vU00KYnJhZ2dhcnQvU00KYnJhZ2dlZApicmFnZ2VyL01TCmJyYWdnaW5nCmJyYWlkL0dNRFMKYnJhaWRpbmcvTQpicmFpbGxlL00KYnJhaW4vR01EUwpicmFpbmNoaWxkL00KYnJhaW5jaGlsZHJlbi9NCmJyYWluaW5lc3MvTQpicmFpbmxlc3MvWQpicmFpbnBvd2VyCmJyYWluc3Rvcm0vU01ERwpicmFpbnN0b3JtaW5nL00KYnJhaW50ZWFzZXIvU00KYnJhaW53YXNoL0RTRwpicmFpbndhc2hpbmcvTQpicmFpbndhdmUvUwpicmFpbnkvUFRSCmJyYWlzZS9HRFMKYnJha2UvTUdEUwpicmFrZW1hbi9NCmJyYWtlbWVuCmJyYW1ibGUvTVMKYnJhbWJseQpicmFuL00KYnJhbmNoL0dNRFMKYnJhbmNobGlrZQpicmFuZC9aR01EUlMKYnJhbmRlZC9VCmJyYW5kZXIvTQpicmFuZGlzaC9EU0cKYnJhbmR5L0dEU00KYnJhc2gvUFRSWQpicmFzaG5lc3MvTQpicmFzcy9NUwpicmFzc2VyaWUvTVMKYnJhc3NpZXJlL01TCmJyYXNzaWx5CmJyYXNzaW5lc3MvTQpicmFzc3kvUFRSCmJyYXQvU00KYnJhdHR5L1JUCmJyYXR3dXJzdC9TTQpicmF2YWRvL00KYnJhdmUvR1BNWURUUlMKYnJhdmVuZXNzL00KYnJhdmVyeS9NCmJyYXZvL1NNCmJyYXZ1cmEvU00KYnJhd2wvU0RSWkdNCmJyYXdsZXIvTQpicmF3bi9NCmJyYXduaW5lc3MvTQpicmF3bnkvUlRQCmJyYXkvREdTTQpicmF6ZS9EUlNaRwpicmF6ZW4vU0RZR1AKYnJhemVubmVzcy9NCmJyYXplci9NCmJyYXppZXIvU00KYnJlYWNoL0dNRFMKYnJlYWQvR01ESFMKYnJlYWRiYXNrZXQvU00KYnJlYWRib2FyZC9TTQpicmVhZGJveC9NUwpicmVhZGNydW1iL01TCmJyZWFkZnJ1aXQvU00KYnJlYWRsaW5lL01TCmJyZWFkdGgvTQpicmVhZHRocwpicmVhZHdpbm5lci9TTQpicmVhay9CTVpHUlMKYnJlYWthYmxlL01TCmJyZWFrYWdlL01TCmJyZWFrYXdheS9NUwpicmVha2Rvd24vTVMKYnJlYWtlci9NCmJyZWFrZmFzdC9NREdTCmJyZWFrZnJvbnQvTVMKYnJlYWtuZWNrCmJyZWFrb3V0L01TCmJyZWFrcG9pbnRzCmJyZWFrdGhyb3VnaC9NCmJyZWFrdGhyb3VnaHMKYnJlYWt1cC9TTQpicmVha3dhdGVyL1NNCmJyZWFtL01TCmJyZWFzdC9TTURHCmJyZWFzdGJvbmUvTVMKYnJlYXN0ZmVkCmJyZWFzdGZlZWQvR1MKYnJlYXN0cGxhdGUvU00KYnJlYXN0c3Ryb2tlL1NNCmJyZWFzdHdvcmsvTVMKYnJlYXRoL01EUlNaR0IKYnJlYXRoYWx5emUvWkdEUlMKYnJlYXRoZQpicmVhdGhlci9NCmJyZWF0aGluZy9NCmJyZWF0aGxlc3MvUFkKYnJlYXRobGVzc25lc3MvTQpicmVhdGhzCmJyZWF0aHRha2luZy9ZCmJyZWF0aHkvUlQKYnJlZC9JCmJyZWVjaC9NUwpicmVlZC9TUlpHTQpicmVlZGVyL00KYnJlZWRpbmcvSU0KYnJlZXplL0RTTUcKYnJlZXpld2F5L1NNCmJyZWV6aWx5CmJyZWV6aW5lc3MvTQpicmVlenkvUlRQCmJyZXRocmVuCmJyZXZlL1NNCmJyZXZldC9TTQpicmV2ZXR0ZWQKYnJldmV0dGluZwpicmV2aWFyeS9TTQpicmV2aXR5L00KYnJldy9NRFJaR1MKYnJld2VyL00KYnJld2VyeS9TTQpicmV3cHViL1NNCmJyaWJlL0RSU01aRwpicmliZXIvTQpicmliZXJ5L00KYnJpY2svU01ERwpicmlja2JhdC9TTQpicmlja2llL1MKYnJpY2tsYXllci9NUwpicmlja2xheWluZy9NCmJyaWNrd29yay9NCmJyaWNreWFyZC9TCmJyaWRhbC9TTQpicmlkZS9TTQpicmlkZWdyb29tL1NNCmJyaWRlc21haWQvTVMKYnJpZGdlL0RTTUcKYnJpZGdlYWJsZS9VCmJyaWRnZWhlYWQvU00KYnJpZGdld29yay9NCmJyaWRsZS9EU01HCmJyaWRsZWQvVQpicmlkbGV3YXkvUwpicmllL01aUgpicmllZidzCmJyaWVmL0NTRFRHSgpicmllZmNhc2UvU00KYnJpZWZlcgpicmllZmluZy9DTQpicmllZmx5CmJyaWVmbmVzcy9NCmJyaWVyL00KYnJpZy9NUwpicmlnYWRlL1NNCmJyaWdhZGllci9NUwpicmlnYW5kL1NNCmJyaWdhbmRhZ2UvTQpicmlnYW50aW5lL01TCmJyaWdodC9TUE5SWVhUCmJyaWdodGVuL0RSWkcKYnJpZ2h0ZW5lci9NCmJyaWdodG5lc3MvTQpicmlnaHRzL00KYnJpbGwKYnJpbGxpYW5jZS9NCmJyaWxsaWFuY3kvTQpicmlsbGlhbnQvTVlTCmJyaWxsaWFudGluZS9NCmJyaW0vTVMKYnJpbWZ1bApicmltbGVzcwpicmltbWVkCmJyaW1taW5nCmJyaW1zdG9uZS9NCmJyaW5kbGUvRE0KYnJpbmUvTQpicmluZy9TUlpHCmJyaW5nZXIvTQpicmluaW5lc3MvTQpicmluay9TTQpicmlua21hbnNoaXAvTQpicmlueS9SVFAKYnJpb2NoZS9TTQpicmlxdWV0dGUvTVMKYnJpc2svU0RSWVRHUApicmlza2V0L1NNCmJyaXNrbmVzcy9NCmJyaXN0bGUvRFNNRwpicmlzdGx5L1RSCmJyaXRjaGVzL00KYnJpdHRsZS9QUk1UCmJyaXR0bGVuZXNzL00KYnJvL1NNSApicm9hY2gvTURTRwpicm9hZC9TTU5SWVhUUApicm9hZGJhbmQvTQpicm9hZGNhc3QvQU1HUwpicm9hZGNhc3Rlci9NUwpicm9hZGNhc3RpbmcvTQpicm9hZGNsb3RoL00KYnJvYWRlbi9ERwpicm9hZGxvb20vTQpicm9hZG1pbmRlZApicm9hZG5lc3MvTQpicm9hZHNoZWV0L1NNCmJyb2Fkc2lkZS9NR0RTCmJyb2Fkc3dvcmQvU00KYnJvY2FkZS9EU01HCmJyb2Njb2xpL00KYnJvY2hldHRlL1NNCmJyb2NodXJlL01TCmJyb2dhbi9TTQpicm9ndWUvU00KYnJvaWwvU01EUlpHCmJyb2lsZXIvTQpicm9rZQpicm9rZW4vWVAKYnJva2VuaGVhcnRlZC9ZCmJyb2tlbm5lc3MvTQpicm9rZXIvU01ERwpicm9rZXJhZ2UvTVMKYnJvbGx5L1MKYnJvbWlkZS9TTQpicm9taWRpYwpicm9taW5lL00KYnJvbmMvU00KYnJvbmNoaQpicm9uY2hpYWwKYnJvbmNoaXRpYwpicm9uY2hpdGlzL00KYnJvbmNodXMvTQpicm9uY28vU00KYnJvbmNvYnVzdGVyL1NNCmJyb250b3NhdXIvTVMKYnJvbnRvc2F1cnVzL01TCmJyb256ZS9EU01HCmJyb29jaC9NUwpicm9vZC9TTURSWkcKYnJvb2Rlci9NCmJyb29kaWx5CmJyb29kaW5nL01ZCmJyb29kbWFyZS9NUwpicm9vZHkvUk1QVApicm9vay9TTURHCmJyb29rbGV0L1NNCmJyb29tL1NNCmJyb29tc3RpY2svTVMKYnJvdGgvTVJaCmJyb3RoZWwvTVMKYnJvdGhlci9NWQpicm90aGVyaG9vZC9NUwpicm90aGVybGluZXNzL00KYnJvdGhzCmJyb3VnaGFtL1NNCmJyb3VnaHQKYnJvdWhhaGEvU00KYnJvdy9NUwpicm93YmVhdC9TTkcKYnJvd24vU01EUlBURwpicm93bmZpZWxkCmJyb3duaWUvTVMKYnJvd25pc2gKYnJvd25uZXNzL00KYnJvd25vdXQvU00KYnJvd25zdG9uZS9NUwpicm93c2UvRFJTTVpHCmJyb3dzZXIvTQpicnIKYnJ1aW4vU00KYnJ1aXNlL0RSU01aRwpicnVpc2VyL00KYnJ1aXNpbmcvTQpicnVpdC9TREcKYnJ1bmNoL01EU0cKYnJ1bmV0L1NNCmJydW5ldHRlL01TCmJydW50L00KYnJ1c2gvTURTRwpicnVzaG9mZi9TTQpicnVzaHN0cm9rZS9TCmJydXNod29vZC9NCmJydXNod29yay9NCmJydXNxdWUvUlBZVApicnVzcXVlbmVzcy9NCmJydXRhbC9ZCmJydXRhbGl0eS9TTQpicnV0YWxpemF0aW9uL00KYnJ1dGFsaXplL0dEUwpicnV0ZS9TTQpicnV0aXNoL1BZCmJydXRpc2huZXNzL00KYnUKYnViL1NNCmJ1YmJsZS9EU01HCmJ1YmJsZWd1bS9NCmJ1YmJseS9STVQKYnViby9NCmJ1Ym9lcwpidWNjYW5lZXIvU0dNRApidWNrL01ER1MKYnVja2Fyb28vU00KYnVja2JvYXJkL01TCmJ1Y2tldC9TR01ECmJ1Y2tldGZ1bC9NUwpidWNrZXllL01TCmJ1Y2tsZSdzCmJ1Y2tsZS9VRFNHCmJ1Y2tsZXIvTVMKYnVja3JhbS9NCmJ1Y2tzYXcvTVMKYnVja3Nob3QvTQpidWNrc2tpbi9NUwpidWNrdGVldGgKYnVja3Rvb3RoL01ECmJ1Y2t3aGVhdC9NCmJ1Y2t5YmFsbC9TTQpidWNvbGljL01TCmJ1Y29saWNhbGx5CmJ1ZC9TTQpidWRkZWQKYnVkZGluZy9TCmJ1ZGR5L1NNCmJ1ZGdlL0RTRwpidWRnZXJpZ2FyL01TCmJ1ZGdldC9TR01ECmJ1ZGdldGFyeQpidWRnaWUvU00KYnVmZi9BTURHUwpidWZmYWxvL01ERwpidWZmYWxvZXMKYnVmZmVyL1NNREcKYnVmZmV0L1NNREdKCmJ1ZmZvb24vU00KYnVmZm9vbmVyeS9NCmJ1ZmZvb25pc2gKYnVnJ3MKYnVnL0NTCmJ1Z2Fib28vU00KYnVnYmVhci9TTQpidWdnZWQvQwpidWdnZXIvU01ERwpidWdnZXJ5CmJ1Z2dpbmcvQwpidWdneS9SU01UCmJ1Z2xlL0RSU01aRwpidWdsZXIvTQpidWlsZC9TTVJaR0oKYnVpbGRlci9NCmJ1aWxkaW5nL00KYnVpbGR1cC9TTQpidWlsdC9BSQpidWlsdGluCmJ1bGIvTVMKYnVsYm91cwpidWxnZS9EU01HCmJ1bGd5L1JUCmJ1bGltYXJleGlhL00KYnVsaW1pYS9NCmJ1bGltaWMvU00KYnVsay9NREdTCmJ1bGtoZWFkL01TCmJ1bGtpbmVzcy9NCmJ1bGt5L1JUUApidWxsL01ER1MKYnVsbGRvZy9TTQpidWxsZG9nZ2VkCmJ1bGxkb2dnaW5nCmJ1bGxkb3plL1pHRFJTCmJ1bGxkb3plci9NCmJ1bGxldC9TTQpidWxsZXRpbi9NREdTCmJ1bGxldHByb29mL1NERwpidWxsZmlnaHQvU01SWkcKYnVsbGZpZ2h0ZXIvTQpidWxsZmlnaHRpbmcvTQpidWxsZmluY2gvTVMKYnVsbGZyb2cvTVMKYnVsbGhlYWQvTURTCmJ1bGxoZWFkZWQvUFkKYnVsbGhlYWRlZG5lc3MvTQpidWxsaG9ybi9NUwpidWxsaW9uL00KYnVsbGlzaC9ZUApidWxsaXNobmVzcy9NCmJ1bGxvY2svU00KYnVsbHBlbi9TTQpidWxscmluZy9NUwpidWxsc2hpdC9NUyEKYnVsbHNoaXR0ZWQvIQpidWxsc2hpdHRlci9TTSEKYnVsbHNoaXR0aW5nLyEKYnVsbHdoaXAvUwpidWxseS9EU01HCmJ1bHJ1c2gvTVMKYnVsd2Fyay9NUwpidW0vU00KYnVtYmFnL1MKYnVtYmxlL0RSU1pHCmJ1bWJsZWJlZS9TTQpidW1ibGVyL00KYnVtZgpidW1tZWQKYnVtbWVyL1NNCmJ1bW1lc3QKYnVtbWluZwpidW1wL01EUlpHUwpidW1wZXIvTQpidW1waApidW1waW5lc3MvTQpidW1wa2luL01TCmJ1bXB0aW91cy9QWQpidW1wdGlvdXNuZXNzL00KYnVtcHkvUFJUCmJ1bi9TTQpidW5jaC9NRFNHCmJ1bmNoeS9SVApidW5jby9TTURHCmJ1bmRsZS9EU01HCmJ1bmcvTURHUwpidW5nYWxvdy9NUwpidW5nZWUvU00KYnVuZ2hvbGUvTVMKYnVuZ2xlL0RSU01aRwpidW5nbGVyL00KYnVuaW9uL1NNCmJ1bmsncwpidW5rL0NER1MKYnVua2VyL1NNCmJ1bmtob3VzZS9TTQpidW5rdW0vTQpidW5ueS9TTQpidW50L01ER1NKCmJ1bnRpbmcvTQpidW95L01ER1MKYnVveWFuY3kvTQpidW95YW50L1kKYnVyL1NNWQpidXJibGUvRFNNRwpidXJicy9NCmJ1cmRlbidzCmJ1cmRlbi9VU0dECmJ1cmRlbnNvbWUKYnVyZG9jay9NCmJ1cmVhdS9TTQpidXJlYXVjcmFjeS9TTQpidXJlYXVjcmF0L01TCmJ1cmVhdWNyYXRpYwpidXJlYXVjcmF0aWNhbGx5CmJ1cmVhdWNyYXRpemF0aW9uL00KYnVyZWF1Y3JhdGl6ZS9HRFMKYnVyZy9NUlpTCmJ1cmdlb24vRFNHCmJ1cmdlci9NCmJ1cmdoL01SWgpidXJnaGVyL00KYnVyZ2hzCmJ1cmdsYXIvTVMKYnVyZ2xhcml6ZS9HRFMKYnVyZ2xhcnByb29mCmJ1cmdsYXJ5L1NNCmJ1cmdsZS9EU0cKYnVyZ29tYXN0ZXIvU00KYnVyZ3VuZHkvU00KYnVyaWFsL0FTTQpidXJrYS9TTQpidXJsL01EUwpidXJsYXAvTQpidXJsZXNxdWUvTUdEUwpidXJsaW5lc3MvTQpidXJseS9SUFQKYnVybi9NRFJaR1NCCmJ1cm5hYmxlL1NNCmJ1cm5lci9NCmJ1cm5pc2gvWkdNRFJTCmJ1cm5pc2hlci9NCmJ1cm5vb3NlL01TCmJ1cm5vdXQvTVMKYnVybnQKYnVycC9NREdTCmJ1cnFhL1NNCmJ1cnIvTURHUwpidXJyaXRvL01TCmJ1cnJvL1NNCmJ1cnJvdy9TTURSWkcKYnVycm93ZXIvTQpidXJzYS9NCmJ1cnNhZQpidXJzYXIvU00KYnVyc2FyeS9TTQpidXJzaXRpcy9NCmJ1cnN0L1NNRwpidXJ5L0FEU0cKYnVzL0FNUwpidXNib3kvU00KYnVzYnkvU00KYnVzZWQKYnVzZ2lybC9NUwpidXNoL01EU0dKCmJ1c2hlbC9TR01ECmJ1c2hpbmVzcy9NCmJ1c2hpbmcvTQpidXNobWFuL00KYnVzaG1hc3Rlci9TTQpidXNobWVuCmJ1c2h3aGFjay9EUlNaRwpidXNod2hhY2tlci9NCmJ1c2h5L1JQVApidXNpbHkKYnVzaW5lc3MvTVMKYnVzaW5lc3NsaWtlCmJ1c2luZXNzbWFuL00KYnVzaW5lc3NtZW4KYnVzaW5lc3NwZXJzb24vU00KYnVzaW5lc3N3b21hbi9NCmJ1c2luZXNzd29tZW4KYnVzaW5nL00KYnVzay9EUlpHUwpidXNraW4vU00KYnVzbG9hZC9TCmJ1c3MvTQpidXN0L01EUlpHUwpidXN0ZXIvTQpidXN0bGUvRFNNRwpidXN0eS9SWlQKYnVzeS9EUlNUR1AKYnVzeWJvZHkvU00KYnVzeW5lc3MvTQpidXN5d29yay9NCmJ1dC9BQ1MKYnV0YW5lL00KYnV0Y2gvTVJTWgpidXRjaGVyL01ERwpidXRjaGVyeS9TTQpidXRsZXIvU00KYnV0dC9NRFJaR1MKYnV0dGUvU00KYnV0dGVkL0EKYnV0dGVyL01ERwpidXR0ZXJiYWxsL01TCmJ1dHRlcmNyZWFtCmJ1dHRlcmN1cC9TTQpidXR0ZXJmYXQvTQpidXR0ZXJmaW5nZXJlZApidXR0ZXJmaW5nZXJzL00KYnV0dGVyZmx5L0dEU00KYnV0dGVybWlsay9NCmJ1dHRlcm51dC9TTQpidXR0ZXJzY290Y2gvTQpidXR0ZXJ5L1RSU00KYnV0dGluZy9BCmJ1dHRvY2svU00KYnV0dG9uJ3MKYnV0dG9uL1VTREcKYnV0dG9uaG9sZS9EU01HCmJ1dHRvbndvb2QvTVMKYnV0dHJlc3MvTURTRwpidXR0eS9TCmJ1eG9tCmJ1eS9aR1NNUgpidXliYWNrL1NNCmJ1eWVyL00KYnV5b3V0L1NNCmJ1enovTURSU1pHCmJ1enphcmQvTVMKYnV6emVyL00KYnV6emtpbGwvU00KYnV6endvcmQvU00KYngKYnhzCmJ5L00KYnllL1NNCmJ5Z29uZS9TTQpieWxhdy9TTQpieWxpbmUvU00KYnlwYXNzL0dNRFMKYnlwYXRoL00KYnlwYXRocwpieXBsYXkvTQpieXByb2R1Y3QvTVMKYnlyZS9TCmJ5cm9hZC9TTQpieXN0YW5kZXIvTVMKYnl0ZS9NUwpieXdheS9TTQpieXdvcmQvU00KYnl6YW50aW5lCmMvSUVTCmNhCmNhYi9TTVJaCmNhYmFsL01TCmNhYmFsYSdzCmNhYmFsbGVyby9NUwpjYWJhbmEvU00KY2FiYXJldC9TTQpjYWJiYWdlL01TCmNhYmJlZApjYWJiaW5nCmNhYmJ5L1NNCmNhYmRyaXZlci9TTQpjYWJpbi9NUwpjYWJpbmV0L1NNCmNhYmluZXRtYWtlci9NUwpjYWJpbmV0bWFraW5nL00KY2FiaW5ldHJ5L00KY2FiaW5ldHdvcmsvTQpjYWJsZS9NR0RTCmNhYmxlY2FzdC9HTVMKY2FibGVncmFtL01TCmNhYm9jaG9uL1NNCmNhYm9vZGxlL00KY2Fib29zZS9TTQpjYWJyaW9sZXQvU00KY2Fic3RhbmQvU00KY2FjYW8vTVMKY2FjaGUvTUdEUwpjYWNoZXBvdC9TTQpjYWNoZXQvTVMKY2Fja2xlL01aR0RSUwpjYWNrbGVyL00KY2Fjb3Bob25vdXMKY2Fjb3Bob255L1NNCmNhY3RpCmNhY3R1cy9NCmNhZC9TTQpjYWRhdmVyL1NNCmNhZGF2ZXJvdXMKY2FkZGllL01EUwpjYWRkaXNoL1lQCmNhZGRpc2huZXNzL00KY2FkZHlpbmcKY2FkZW5jZS9EU00KY2FkZW56YS9TTQpjYWRldC9NUwpjYWRnZS9aR0RSUwpjYWRnZXIvTQpjYWRtaXVtL00KY2FkcmUvTVMKY2FkdWNlaQpjYWR1Y2V1cy9NCmNhZXN1cmEvU00KY2FmZS9TTQpjYWZldGVyaWEvTVMKY2FmZXRpZXJlL1MKY2FmZi9DUwpjYWZmZWluYXRlZApjYWZmZWluZS9NCmNhZnRhbi9NUwpjYWdlL0RTTUcKY2FnZXkKY2FnaWVyCmNhZ2llc3QKY2FnaWx5CmNhZ2luZXNzL00KY2Fnb3VsZS9TCmNhaG9vdC9NUwpjYWltYW4vTVMKY2Fpcm4vTVMKY2Fpc3Nvbi9TTQpjYWl0aWZmL1NNCmNham9sZS9aR0xEUlMKY2Fqb2xlbWVudC9NCmNham9sZXIvTQpjYWpvbGVyeS9NCmNha2UvRFNNRwpjYWtld2Fsay9TTQpjYWwKY2FsYWJhc2gvTVMKY2FsYWJvb3NlL1NNCmNhbGFtYXJpL1NNCmNhbGFtaW5lL00KY2FsYW1pdG91cy9ZCmNhbGFtaXR5L1NNCmNhbGNhcmVvdXMKY2FsY2lmZXJvdXMKY2FsY2lmaWNhdGlvbi9NCmNhbGNpZnkvR05EUwpjYWxjaW1pbmUvRFNNRwpjYWxjaW5lL0RTRwpjYWxjaXRlL00KY2FsY2l1bS9NCmNhbGN1bGFibGUvSQpjYWxjdWxhdGUvQUdOVkRTWApjYWxjdWxhdGVkL1kKY2FsY3VsYXRpbmcvWQpjYWxjdWxhdGlvbi9BTQpjYWxjdWxhdG9yL1NNCmNhbGN1bGkKY2FsY3VsdXMvTQpjYWxkZXJhL1NNCmNhbGVuZGFyL01ER1MKY2FsZW5kZXIncwpjYWxmL00KY2FsZnNraW4vTQpjYWxpYmVyL1NNCmNhbGlicmF0ZS9HTkRTWApjYWxpYnJhdGlvbi9NCmNhbGlicmF0b3IvU00KY2FsaWNvL00KY2FsaWNvZXMKY2FsaWZvcm5pdW0vTQpjYWxpcGVyL1NHTUQKY2FsaXBoL00KY2FsaXBoYXRlL01TCmNhbGlwaHMKY2FsaXN0aGVuaWMvUwpjYWxpc3RoZW5pY3MvTQpjYWxrL1NHTUQKY2FsbC9BU0dNRApjYWxsYS9NUwpjYWxsYWJsZQpjYWxsYmFjay9NUwpjYWxsZWQvVQpjYWxsZXIvTVMKY2FsbGlncmFwaGVyL1NNCmNhbGxpZ3JhcGhpYwpjYWxsaWdyYXBoaXN0L01TCmNhbGxpZ3JhcGh5L00KY2FsbGluZy9TTQpjYWxsaW9wZS9NUwpjYWxsb3NpdHkvU00KY2FsbG91cy9QR0RTWQpjYWxsb3VzbmVzcy9NCmNhbGxvdy9SUFQKY2FsbG93bmVzcy9NCmNhbGx1cy9NRFNHCmNhbG0vUFNUR01EUlkKY2FsbW5lc3MvTQpjYWxvcmljCmNhbG9yaWUvTVMKY2Fsb3JpZmljCmNhbHVtZXQvTVMKY2FsdW1uaWF0ZS9HTkRTCmNhbHVtbmlhdGlvbi9NCmNhbHVtbmlhdG9yL01TCmNhbHVtbmlvdXMKY2FsdW1ueS9TTQpjYWx2ZS9HRFMKY2FseXBzby9NUwpjYWx5eC9NUwpjYW0vU00KY2FtYXJhZGVyaWUvTQpjYW1iZXIvTURTRwpjYW1iaWFsCmNhbWJpdW0vU00KY2FtYnJpYy9NCmNhbWNvcmRlci9TTQpjYW1lCmNhbWVsL01TCmNhbWVsaGFpcgpjYW1lbGxpYS9NUwpjYW1lby9NUwpjYW1lcmEvTVMKY2FtZXJhbWFuL00KY2FtZXJhbWVuCmNhbWVyYXdvbWFuL00KY2FtZXJhd29tZW4KY2FtZXJhd29yawpjYW1pa25pY2tlcnMKY2FtaXNvbGUvU00KY2Ftb3VmbGFnZS9NWkdEUlMKY2Ftb3VmbGFnZXIvTQpjYW1wJ3MKY2FtcC9DU0dECmNhbXBhaWduL1NNRFJaRwpjYW1wYWlnbmVyL00KY2FtcGFuaWxlL1NNCmNhbXBhbm9sb2dpc3QvTVMKY2FtcGFub2xvZ3kvTQpjYW1wZXIvTVMKY2FtcGZpcmUvU00KY2FtcGdyb3VuZC9TTQpjYW1waG9yL00KY2FtcGluZy9NCmNhbXBzaXRlL1NNCmNhbXB1cy9NUwpjYW1weS9UUgpjYW1zaGFmdC9TTQpjYW4ndApjYW4vU01EUlpHCmNhbmFsL01TCmNhbmFsaXphdGlvbi9NCmNhbmFsaXplL0dEUwpjYW5hcGUvTVMKY2FuYXJkL01TCmNhbmFyeS9TTQpjYW5hc3RhL00KY2FuY2FuL01TCmNhbmNlbC9EUlNaRwpjYW5jZWxlci9NCmNhbmNlbGxhdGlvbi9TTQpjYW5jZXIvTVMKY2FuY2Vyb3VzCmNhbmRlbGFicmEvU00KY2FuZGVsYWJydW0vTQpjYW5kaWQvWVAKY2FuZGlkYQpjYW5kaWRhY3kvU00KY2FuZGlkYXRlL01TCmNhbmRpZGF0dXJlL1NNCmNhbmRpZG5lc3MvTQpjYW5kbGUvTVpHRFJTCmNhbmRsZWxpZ2h0L00KY2FuZGxlbGl0CmNhbmRsZXBvd2VyL00KY2FuZGxlci9NCmNhbmRsZXN0aWNrL01TCmNhbmRsZXdpY2svU00KY2FuZG9yL00KY2FuZHkvR0RTTQpjYW5keWZsb3NzCmNhbmUvU00KY2FuZWJyYWtlL01TCmNhbmVyL00KY2FuaW5lL01TCmNhbmlzdGVyL1NNCmNhbmtlci9HTURTCmNhbmtlcm91cwpjYW5uYWJpcy9NUwpjYW5uZWQKY2FubmVsbG9uaS9NCmNhbm5lcnkvU00KY2FubmliYWwvU00KY2FubmliYWxpc20vTQpjYW5uaWJhbGlzdGljCmNhbm5pYmFsaXphdGlvbi9NCmNhbm5pYmFsaXplL0dEUwpjYW5uaWx5L1UKY2FubmluZXNzL00KY2FubmluZwpjYW5ub24vR01EUwpjYW5ub25hZGUvTUdEUwpjYW5ub25iYWxsL1NNCmNhbm5vdApjYW5ueS9VVFIKY2Fub2UvTURTCmNhbm9laW5nCmNhbm9laXN0L1NNCmNhbm9sYS9NCmNhbm9uL01TCmNhbm9uaWNhbC9ZCmNhbm9uaXphdGlvbi9TTQpjYW5vbml6ZS9EU0cKY2Fub29kbGUvRFNHCmNhbm9weS9HRFNNCmNhbnN0CmNhbnQncwpjYW50L0NaUkRHUwpjYW50YWJpbGUKY2FudGFsb3VwZS9TTQpjYW50YW5rZXJvdXMvUFkKY2FudGFua2Vyb3VzbmVzcy9NCmNhbnRhdGEvTVMKY2FudGVlbi9NUwpjYW50ZXIvQ00KY2FudGVyZWQKY2FudGVyaW5nCmNhbnRpY2xlL01TCmNhbnRpbGV2ZXIvTURHUwpjYW50by9NUwpjYW50b24vTUxTCmNhbnRvbmFsCmNhbnRvbm1lbnQvTVMKY2FudG9yL01TCmNhbnZhcy9NR0RTCmNhbnZhc2JhY2svU00KY2FudmFzcy9NRFJTWkcKY2FudmFzc2VyL00KY2FueW9uL01HUwpjYXAvU01EUkJaCmNhcGFiaWxpdGllcwpjYXBhYmlsaXR5L0lNCmNhcGFibGUvSQpjYXBhYmx5L0kKY2FwYWNpb3VzL1BZCmNhcGFjaW91c25lc3MvTQpjYXBhY2l0YW5jZS9NCmNhcGFjaXRpZXMKY2FwYWNpdG9yL1NNCmNhcGFjaXR5L0lNCmNhcGFyaXNvbi9NREdTCmNhcGUvU00KY2FwZXIvR01ECmNhcGVza2luL00KY2FwaWxsYXJpdHkvTQpjYXBpbGxhcnkvU00KY2FwaXRhbC9NU1kKY2FwaXRhbGlzbS9NCmNhcGl0YWxpc3QvU00KY2FwaXRhbGlzdGljCmNhcGl0YWxpc3RpY2FsbHkKY2FwaXRhbGl6YXRpb24vTQpjYXBpdGFsaXplL0FEU0cKY2FwaXRhdGlvbi9DU00KY2FwaXRvbC9TTQpjYXBpdHVsYXRlL0FEU1hHTgpjYXBpdHVsYXRpb24vQU0KY2FwbGV0L01TCmNhcG8vU00KY2Fwb24vTVMKY2FwcGVkL1VBCmNhcHBpbmcvVUEKY2FwcHVjY2luby9TTQpjYXByaWNlL1NNCmNhcHJpY2lvdXMvUFkKY2FwcmljaW91c25lc3MvTQpjYXBzaWN1bS9TTQpjYXBzaXplL0RTRwpjYXBzdGFuL1NNCmNhcHN0b25lL01TCmNhcHN1bGFyCmNhcHN1bGUvRFNNRwpjYXBzdWxpemUvRFNHCmNhcHQKY2FwdGFpbi9TTURHCmNhcHRhaW5jeS9TTQpjYXB0aW9uL1NNREcKY2FwdGlvdXMvWVAKY2FwdGlvdXNuZXNzL00KY2FwdGl2YXRlL0RTR04KY2FwdGl2YXRpb24vTQpjYXB0aXZhdG9yL1NNCmNhcHRpdmUvU00KY2FwdGl2aXR5L1NNCmNhcHRvci9NUwpjYXB0dXJlL0FEU01HCmNhci9TTURSWkcKY2FyYWZlL01TCmNhcmFtZWwvU00KY2FyYW1lbGl6ZS9EU0cKY2FyYXBhY2UvU00KY2FyYXQvTVMKY2FyYXZhbi9TTQpjYXJhdmFuc2FyeS9TTQpjYXJhdmVsL1NNCmNhcmF3YXkvU00KY2FyYmlkZS9TTQpjYXJiaW5lL1NNCmNhcmJvaHlkcmF0ZS9TTQpjYXJib2xpYwpjYXJib24vTVMKY2FyYm9uYWNlb3VzCmNhcmJvbmF0ZS9NR05EUwpjYXJib25hdGlvbi9NCmNhcmJvbmlmZXJvdXMKY2FyYm9uaXplL0dEUwpjYXJib3J1bmR1bS9NCmNhcmJveS9NUwpjYXJicwpjYXJidW5jbGUvU00KY2FyYnVuY3VsYXIKY2FyYnVyZXRvci9TTQpjYXJjYXNzL01TCmNhcmNpbm9nZW4vU00KY2FyY2lub2dlbmljL01TCmNhcmNpbm9nZW5pY2l0eS9NCmNhcmNpbm9tYS9NUwpjYXJkL0VTR01ECmNhcmRhbW9tL1NNCmNhcmRhbW9uL1MKY2FyZGJvYXJkL00KY2FyZGVyL01TCmNhcmRob2xkZXIvUwpjYXJkaWFjCmNhcmRpZS9TCmNhcmRpZ2FuL1NNCmNhcmRpbmFsL1NNWQpjYXJkaW8KY2FyZGlvZ3JhbS9TTQpjYXJkaW9ncmFwaC9NCmNhcmRpb2dyYXBocwpjYXJkaW9sb2dpc3QvTVMKY2FyZGlvbG9neS9NCmNhcmRpb215b3BhdGh5CmNhcmRpb3B1bG1vbmFyeQpjYXJkaW92YXNjdWxhcgpjYXJkc2hhcnAvTVJaUwpjYXJkc2hhcnBlci9NCmNhcmUvU00KY2FyZWVuL0RHUwpjYXJlZXIvTURHUwpjYXJlZXJpc20KY2FyZWVyaXN0L1NNCmNhcmVmcmVlCmNhcmVmdWwvWVAKY2FyZWZ1bGxlcgpjYXJlZnVsbGVzdApjYXJlZnVsbmVzcy9NCmNhcmVnaXZlci9TTQpjYXJlbGVzcy9QWQpjYXJlbGVzc25lc3MvTQpjYXJlci9NCmNhcmVzcy9NRFNHCmNhcmV0L01TCmNhcmV0YWtlci9NUwpjYXJld29ybgpjYXJmYXJlL00KY2FyZ28vTQpjYXJnb2VzCmNhcmhvcC9NUwpjYXJpYm91L1NNCmNhcmljYXR1cmUvTUdEUwpjYXJpY2F0dXJpc3QvU00KY2FyaWVzL00KY2FyaWxsb24vU00KY2FyaW5nL00KY2FyaW91cwpjYXJqYWNrL0pTRFJaRwpjYXJqYWNrZXIvTQpjYXJqYWNraW5nL00KY2FybG9hZC9TTQpjYXJtaW5lL1NNCmNhcm5hZ2UvTQpjYXJuYWwvWQpjYXJuYWxpdHkvTQpjYXJuYXRpb24vSU1TCmNhcm5lbGlhbi9NUwpjYXJuaXZhbC9NUwpjYXJuaXZvcmEKY2Fybml2b3JlL1NNCmNhcm5pdm9yb3VzL1BZCmNhcm5pdm9yb3VzbmVzcy9NCmNhcm55L1NNCmNhcm9iL01TCmNhcm9sL1pHTURSUwpjYXJvbGVyL00KY2Fyb20vR01EUwpjYXJvdGVuZS9NCmNhcm90aWQvU00KY2Fyb3VzYWwvU00KY2Fyb3VzZS9EUlNNWkcKY2Fyb3VzZWwvU00KY2Fyb3VzZXIvTQpjYXJwL1NaR01EUgpjYXJwYWwvTVMKY2FycGVsL01TCmNhcnBlbnRlci9NREdTCmNhcnBlbnRyeS9NCmNhcnBlci9NCmNhcnBldC9NREdTCmNhcnBldGJhZy9NUwpjYXJwZXRiYWdnZWQKY2FycGV0YmFnZ2VyL01TCmNhcnBldGJhZ2dpbmcKY2FycGV0aW5nL00KY2FycGkKY2FycG9vbC9TTURHCmNhcnBvcnQvU00KY2FycHVzL00KY2FycmVsL01TCmNhcnJpYWdlL1NNCmNhcnJpYWdld2F5L1MKY2Fycmllci9NCmNhcnJpb24vTQpjYXJyb3QvTVMKY2Fycm90eQpjYXJyeS9aR0RSU00KY2FycnlhbGwvU00KY2Fycnljb3QvUwpjYXJyeW91dApjYXJyeW92ZXIvTVMKY2Fyc2ljay9QCmNhcnNpY2tuZXNzL00KY2FydC9TWkdNRFIKY2FydGFnZS9NCmNhcnRlbC9NUwpjYXJ0ZXIvTQpjYXJ0aG9yc2UvU00KY2FydGlsYWdlL1NNCmNhcnRpbGFnaW5vdXMKY2FydGxvYWQvU00KY2FydG9ncmFwaGVyL1NNCmNhcnRvZ3JhcGhpYwpjYXJ0b2dyYXBoeS9NCmNhcnRvbi9NUwpjYXJ0b29uL1NNREcKY2FydG9vbmlzdC9NUwpjYXJ0cmlkZ2UvTVMKY2FydHdoZWVsL0dNRFMKY2FydmUvSlpHRFJTCmNhcnZlci9NCmNhcnZlcnkvUwpjYXJ2aW5nL00KY2FyeWF0aWQvTVMKY2FzYWJhL01TCmNhc2NhZGUvRFNNRwpjYXNjYXJhL1NNCmNhc2UvTERTSk1HCmNhc2Vib29rL1MKY2FzZWQvVQpjYXNlaGFyZGVuL0RHUwpjYXNlaW4vTQpjYXNlbG9hZC9NUwpjYXNlbWVudC9NUwpjYXNld29yay9aTVIKY2FzZXdvcmtlci9NCmNhc2gvR01EUwpjYXNoYmFjay9NCmNhc2hib29rL01TCmNhc2hldy9NUwpjYXNoaWVyL0dTTUQKY2FzaGxlc3MKY2FzaG1lcmUvTQpjYXNpbmcvTQpjYXNpbm8vTVMKY2Fzay9TTQpjYXNrZXQvTVMKY2Fzc2F2YS9TTQpjYXNzZXJvbGUvRFNNRwpjYXNzZXR0ZS9NUwpjYXNzaWEvTVMKY2Fzc29jay9TTQpjYXNzb3dhcnkvU00KY2FzdC9BU0dNCmNhc3RhbmV0L01TCmNhc3Rhd2F5L01TCmNhc3RlL0pNWlJTCmNhc3RlbGxhdGVkCmNhc3Rlci9NCmNhc3RpZ2F0ZS9EU0dOCmNhc3RpZ2F0aW9uL00KY2FzdGlnYXRvci9TTQpjYXN0aW5nL0FNCmNhc3RsZS9NR0RTCmNhc3RvZmYvU00KY2FzdG9yL01TCmNhc3RyYXRlL0dOWERTCmNhc3RyYXRpb24vTQpjYXN1YWwvUE1ZUwpjYXN1YWxuZXNzL00KY2FzdWFsdHkvU00KY2FzdWlzdC9TTQpjYXN1aXN0aWMKY2FzdWlzdHJ5L00KY2F0L1NNCmNhdGFjbHlzbS9NUwpjYXRhY2x5c21hbApjYXRhY2x5c21pYwpjYXRhY29tYi9TTQpjYXRhZmFscXVlL01TCmNhdGFsZXBzeS9NCmNhdGFsZXB0aWMvTVMKY2F0YWxvZy9aR1NNRFIKY2F0YWxvZ2VyL00KY2F0YWxwYS9TTQpjYXRhbHlzZXMKY2F0YWx5c2lzL00KY2F0YWx5c3QvTVMKY2F0YWx5dGljL00KY2F0YWx5emUvR0RTCmNhdGFtYXJhbi9TTQpjYXRhcHVsdC9HTURTCmNhdGFyYWN0L01TCmNhdGFycmgvTQpjYXRhc3Ryb3BoZS9NUwpjYXRhc3Ryb3BoaWMKY2F0YXN0cm9waGljYWxseQpjYXRhdG9uaWEvTQpjYXRhdG9uaWMvU00KY2F0YmlyZC9TTQpjYXRib2F0L1NNCmNhdGNhbGwvR1NNRApjYXRjaC9aR0pMTVJTCmNhdGNoYWxsL01TCmNhdGNoZXIvTQpjYXRjaG1lbnQvTVMKY2F0Y2hwZW5ueQpjYXRjaHBocmFzZS9TTQpjYXRjaHdvcmQvTVMKY2F0Y2h5L1JUCmNhdGVjaGlzbS9TTQpjYXRlY2hpc3QvU00KY2F0ZWNoaXplL0RTRwpjYXRlZ29yaWNhbC9ZCmNhdGVnb3JpemF0aW9uL01TCmNhdGVnb3JpemUvR0RTCmNhdGVnb3J5L1NNCmNhdGVyL1pHSkRSUwpjYXRlcmNvcm5lcgpjYXRlcmVyL00KY2F0ZXJwaWxsYXIvTVMKY2F0ZXJ3YXVsL1NNREcKY2F0ZmlzaC9NUwpjYXRndXQvTQpjYXRoYXJzZXMKY2F0aGFyc2lzL00KY2F0aGFydGljL1NNCmNhdGhlZHJhbC9TTQpjYXRoZXRlci9TTQpjYXRoZXRlcml6ZS9EU0cKY2F0aG9kZS9TTQpjYXRob2RpYwpjYXRob2xpYwpjYXRob2xpY2l0eS9NCmNhdGlvbi9NUwpjYXRraW4vTVMKY2F0bGlrZQpjYXRuYXAvTVMKY2F0bmFwcGVkCmNhdG5hcHBpbmcKY2F0bmlwL00KY2F0c3VpdC9TCmNhdHRhaWwvU00KY2F0dGVkCmNhdHRlcnkvUwpjYXR0aWx5CmNhdHRpbmVzcy9NCmNhdHRpbmcKY2F0dGxlL00KY2F0dGxlbWFuL00KY2F0dGxlbWVuCmNhdHR5L1RQUgpjYXR3YWxrL1NNCmNhdWN1cy9NRFNHCmNhdWRhbC9ZCmNhdWdodC9VCmNhdWxkcm9uL01TCmNhdWxpZmxvd2VyL1NNCmNhdWxrL1pHTURSUwpjYXVsa2VyL00KY2F1c2FsL1kKY2F1c2FsaXR5L1NNCmNhdXNhdGlvbi9NCmNhdXNhdGl2ZQpjYXVzZS9NWkdEUlMKY2F1c2VsZXNzCmNhdXNlci9NCmNhdXNlcmllL1NNCmNhdXNld2F5L1NNCmNhdXN0aWMvU00KY2F1c3RpY2FsbHkKY2F1c3RpY2l0eS9NCmNhdXRlcml6YXRpb24vTQpjYXV0ZXJpemUvR0RTCmNhdXRpb24vU01ERwpjYXV0aW9uYXJ5CmNhdXRpb3VzL0lZCmNhdXRpb3VzbmVzcy9NCmNhdmFsY2FkZS9NUwpjYXZhbGllci9TTVkKY2F2YWxyeS9TTQpjYXZhbHJ5bWFuL00KY2F2YWxyeW1lbgpjYXZlL0RSU01aRwpjYXZlYXQvTVMKY2F2ZW1hbi9NCmNhdmVtZW4KY2F2ZXJuL01TCmNhdmVybm91cy9ZCmNhdmlhci9NCmNhdmlsL1pHSk1EUlMKY2F2aWxlci9NCmNhdmluZy9NCmNhdml0eS9GU00KY2F2b3J0L0RHUwpjYXcvU01ERwpjYXkvQ1NNCmNheWVubmUvTQpjYXl1c2UvTVMKY2MKY2Vhc2UvQ01HRFMKY2Vhc2VmaXJlL01TCmNlYXNlbGVzcy9ZUApjZWFzZWxlc3NuZXNzL00KY2VjYQpjZWNhbApjZWN1bS9NCmNlZGFyL01TCmNlZGUvRkFHU0QKY2VkZXIvTVMKY2VkaWxsYS9TTQpjZWlsaWRoCmNlaWxpZGhzCmNlaWxpbmcvTVMKY2VsYW5kaW5lL00KY2VsZWIvUwpjZWxlYnJhbnQvU00KY2VsZWJyYXRlL0RTR05YCmNlbGVicmF0aW9uL00KY2VsZWJyYXRvci9TTQpjZWxlYnJhdG9yeQpjZWxlYnJpdHkvU00KY2VsZXJpYWMKY2VsZXJpdHkvTQpjZWxlcnkvTQpjZWxlc3RhL01TCmNlbGVzdGlhbC9ZCmNlbGliYWN5L00KY2VsaWJhdGUvTVMKY2VsbC9TTUQKY2VsbGFyL01TCmNlbGxpc3QvU00KY2VsbG1hdGUvU00KY2VsbG8vTVMKY2VsbG9waGFuZS9NCmNlbGxwaG9uZS9NUwpjZWxsdWxhci9TTQpjZWxsdWxpdGUvTQpjZWxsdWxpdGlzCmNlbGx1bG9pZC9NCmNlbGx1bG9zZS9NCmNlbWVudC9NRFJaR1MKY2VtZW50ZXIvTQpjZW1lbnR1bS9NCmNlbWV0ZXJ5L1NNCmNlbm9iaXRlL01TCmNlbm9iaXRpYwpjZW5vdGFwaC9NCmNlbm90YXBocwpjZW5zZXIvTVMKY2Vuc29yL01ER1MKY2Vuc29yZWQvVQpjZW5zb3JpYWwKY2Vuc29yaW91cy9QWQpjZW5zb3Jpb3VzbmVzcy9NCmNlbnNvcnNoaXAvTQpjZW5zdXJlL0JEUlNNWkcKY2Vuc3VyZXIvTQpjZW5zdXMvTURTRwpjZW50L1NaTVIKY2VudGF1ci9TTQpjZW50YXZvL1NNCmNlbnRlbmFyaWFuL01TCmNlbnRlbmFyeS9TTQpjZW50ZW5uaWFsL01ZUwpjZW50ZXIvTURHCmNlbnRlcmJvYXJkL1NNCmNlbnRlcmZvbGQvTVMKY2VudGVycGllY2UvTVMKY2VudGlncmFkZQpjZW50aWdyYW0vU00KY2VudGlsaXRlci9NUwpjZW50aW1lL1NNCmNlbnRpbWV0ZXIvTVMKY2VudGlwZWRlL1NNCmNlbnRyYWwvU01ZCmNlbnRyYWxpc20KY2VudHJhbGlzdApjZW50cmFsaXR5L00KY2VudHJhbGl6YXRpb24vQ00KY2VudHJhbGl6ZS9DR0RTCmNlbnRyYWxpemVyL01TCmNlbnRyaWZ1Z2FsL1kKY2VudHJpZnVnZS9EU01HCmNlbnRyaXBldGFsL1kKY2VudHJpc20vTQpjZW50cmlzdC9NUwpjZW50dXJpb24vU00KY2VudHVyeS9TTQpjZXBoYWxpYwpjZXJhbWljL1NNCmNlcmFtaWNpc3QvU00KY2VyYW1pY3MvTQpjZXJhbWlzdC9NUwpjZXJlYWwvTVMKY2VyZWJlbGxhcgpjZXJlYmVsbHVtL1NNCmNlcmVicmEKY2VyZWJyYWwKY2VyZWJyYXRlL0dORFMKY2VyZWJyYXRpb24vTQpjZXJlYnJvdmFzY3VsYXIKY2VyZWJydW0vTVMKY2VyZW1lbnQvTVMKY2VyZW1vbmlhbC9TTVkKY2VyZW1vbmlvdXMvVVkKY2VyZW1vbmlvdXNuZXNzL00KY2VyZW1vbnkvU00KY2VyaXNlL00KY2VyaXVtL00KY2VybWV0L00KY2VydC9TCmNlcnRhaW4vVVkKY2VydGFpbnR5L1VTTQpjZXJ0aWZpYWJsZQpjZXJ0aWZpYWJseQpjZXJ0aWZpY2F0ZS9NR05YRFMKY2VydGlmaWNhdGlvbi9NCmNlcnRpZnkvRFNHCmNlcnRpdHVkZS9JTQpjZXJ0aXR1ZGVzCmNlcnVsZWFuL00KY2VydmljYWwKY2VydmljZXMKY2Vydml4L00KY2VzYXJlYW4vTVMKY2VzaXVtL00KY2Vzc2F0aW9uL01TCmNlc3Npb24vS0FGU00KY2Vzc3BpdC9TCmNlc3Nwb29sL01TCmNldGFjZWFuL01TCmNmCmNnCmNoL0lGVlQKY2hhZC9TCmNoYWZlL0dEUwpjaGFmZi9HTURTCmNoYWZmaW5jaC9NUwpjaGFncmluL0dTTUQKY2hhaW4ncwpjaGFpbi9VR0RTCmNoYWluc2F3L01ER1MKY2hhaXIvR01EUwpjaGFpcmxpZnQvTVMKY2hhaXJtYW4vTQpjaGFpcm1hbnNoaXAvU00KY2hhaXJtZW4KY2hhaXJwZXJzb24vU00KY2hhaXJ3b21hbi9NCmNoYWlyd29tZW4KY2hhaXNlL01TCmNoYWxjZWRvbnkvTQpjaGFsZXQvTVMKY2hhbGljZS9TTQpjaGFsay9HTURTCmNoYWxrYm9hcmQvU00KY2hhbGtpbmVzcy9NCmNoYWxreS9QUlQKY2hhbGxlbmdlL0RSU01aRwpjaGFsbGVuZ2VkL1UKY2hhbGxlbmdlci9NCmNoYWxsaXMvTQpjaGFtYmVyL1NNRApjaGFtYmVybGFpbi9NUwpjaGFtYmVybWFpZC9NUwpjaGFtYnJheS9NCmNoYW1lbGVvbi9TTQpjaGFtb2lzL00KY2hhbW9taWxlL01TCmNoYW1wL1pHTURTCmNoYW1wYWduZS9NUwpjaGFtcGlvbi9HTURTCmNoYW1waW9uc2hpcC9NUwpjaGFuY2UvTUdEUwpjaGFuY2VsL1NNCmNoYW5jZWxsZXJ5L1NNCmNoYW5jZWxsb3IvTVMKY2hhbmNlbGxvcnNoaXAvTQpjaGFuY2VyeS9TTQpjaGFuY2luZXNzL00KY2hhbmNyZS9TTQpjaGFuY3kvUFJUCmNoYW5kZWxpZXIvU00KY2hhbmRsZXIvTVMKY2hhbmdlL01aR0RSUwpjaGFuZ2VhYmlsaXR5L00KY2hhbmdlYWJsZS9QCmNoYW5nZWFibGVuZXNzL00KY2hhbmdlYWJseQpjaGFuZ2VkL1UKY2hhbmdlbGVzcy9ZCmNoYW5nZWxpbmcvU00KY2hhbmdlb3Zlci9TTQpjaGFuZ2VyL00KY2hhbmdpbmcvVQpjaGFubmVsL0dTTUQKY2hhbm5lbGl6YXRpb24vTQpjaGFubmVsaXplL0RTRwpjaGFuc29uL1NNCmNoYW50L1pHTURSUwpjaGFudGVyL00KY2hhbnRldXNlL01TCmNoYW50ZXkvU00KY2hhbnRpY2xlZXIvTVMKY2hhb3MvTQpjaGFvdGljCmNoYW90aWNhbGx5CmNoYXAvU00KY2hhcGFycmFsL1NNCmNoYXBhdGkvUwpjaGFwYXR0aS9TCmNoYXBib29rL01TCmNoYXBlYXUvU00KY2hhcGVsL01TCmNoYXBlcm9uL01ER1MKY2hhcGVyb25hZ2UvTQpjaGFwZXJvbmVkL1UKY2hhcGxhaW4vTVMKY2hhcGxhaW5jeS9TTQpjaGFwbGV0L1NNCmNoYXBwZWQKY2hhcHBpbmcKY2hhcHB5L1MKY2hhcHRlci9TTQpjaGFyL1NNCmNoYXJhYmFuYy9NUwpjaGFyYWN0ZXIvTVMKY2hhcmFjdGVyZnVsCmNoYXJhY3RlcmlzdGljL1NNCmNoYXJhY3RlcmlzdGljYWxseS9VCmNoYXJhY3Rlcml6YXRpb24vTVMKY2hhcmFjdGVyaXplL0RTRwpjaGFyYWN0ZXJsZXNzCmNoYXJhZGUvU00KY2hhcmJyb2lsL0dEUwpjaGFyY29hbC9NUwpjaGFyZC9NCmNoYXJkb25uYXkvU00KY2hhcmdlL0FFU0RHTQpjaGFyZ2VhYmxlL0EKY2hhcmdlZC9VCmNoYXJnZXIvU00KY2hhcmlseQpjaGFyaW5lc3MvTQpjaGFyaW90L1NNCmNoYXJpb3RlZXIvTVMKY2hhcmlzbWEvTQpjaGFyaXNtYXRpYy9NUwpjaGFyaXRhYmxlL1AKY2hhcml0YWJsZW5lc3MvTQpjaGFyaXRhYmx5L1UKY2hhcml0eS9TTQpjaGFybGFkeS9TCmNoYXJsYXRhbi9TTQpjaGFybGF0YW5pc20vTQpjaGFybGF0YW5yeS9NCmNoYXJsaWUvUwpjaGFybS9aR01EUlMKY2hhcm1lci9NCmNoYXJtaW5nL1kKY2hhcm1sZXNzCmNoYXJyZWQKY2hhcnJpbmcKY2hhcnQvR01EUwpjaGFydGVkL1UKY2hhcnRlcidzCmNoYXJ0ZXIvQVNHRApjaGFydGVyZXIvTVMKY2hhcnRyZXVzZS9NCmNoYXJ3b21hbi9NCmNoYXJ3b21lbgpjaGFyeS9UUlAKY2hhc2UvTVpHRFJTCmNoYXNlci9NCmNoYXNtL01TCmNoYXNzaXMvTQpjaGFzdGUvUFlUUgpjaGFzdGVuL0RHUwpjaGFzdGVuZXNzL00KY2hhc3Rpc2UvRFJTWkdMCmNoYXN0aXNlbWVudC9TTQpjaGFzdGlzZXIvTQpjaGFzdGl0eS9NCmNoYXN1YmxlL1NNCmNoYXQvU00KY2hhdGVhdS9TTQpjaGF0ZWF1eApjaGF0ZWxhaW5lL1NNCmNoYXRsaW5lL1MKY2hhdHJvb20vTQpjaGF0dGVkCmNoYXR0ZWwvTVMKY2hhdHRlci9NRFJaR1MKY2hhdHRlcmJveC9NUwpjaGF0dGVyZXIvTQpjaGF0dGlseQpjaGF0dGluZXNzL00KY2hhdHRpbmcKY2hhdHR5L1RQUgpjaGF1ZmZldXIvR01EUwpjaGF1dmluaXNtL00KY2hhdXZpbmlzdC9TTQpjaGF1dmluaXN0aWMKY2hhdXZpbmlzdGljYWxseQpjaGVhcC9QWFROUlkKY2hlYXBlbi9ERwpjaGVhcG5lc3MvTQpjaGVhcG8KY2hlYXBza2F0ZS9NUwpjaGVhdC9aR01EUlMKY2hlYXRlci9NCmNoZWNrL0FHTURTCmNoZWNrYm9vay9TTQpjaGVja2JveApjaGVja2VkL1UKY2hlY2tlci9NREdTCmNoZWNrZXJib2FyZC9TTQpjaGVja2Vycy9NCmNoZWNrbGlzdC9NUwpjaGVja21hdGUvTUdEUwpjaGVja29mZi9TTQpjaGVja291dC9TTQpjaGVja3BvaW50L1NNCmNoZWNrcm9vbS9NUwpjaGVja3N1bQpjaGVja3VwL01TCmNoZWRkYXIvTQpjaGVlay9HTURTCmNoZWVrYm9uZS9TTQpjaGVla2lseQpjaGVla2luZXNzL00KY2hlZWt5L1RQUgpjaGVlcC9HTURTCmNoZWVyL1pHTURSUwpjaGVlcmVyL00KY2hlZXJmdWwvWVAKY2hlZXJmdWxsZXIKY2hlZXJmdWxsZXN0CmNoZWVyZnVsbmVzcy9NCmNoZWVyaWx5CmNoZWVyaW5lc3MvTQpjaGVlcmlvL01TCmNoZWVybGVhZGVyL1NNCmNoZWVybGVzcy9QWQpjaGVlcmxlc3NuZXNzL00KY2hlZXJ5L1RQUgpjaGVlc2UvTUdEUwpjaGVlc2Vib2FyZC9TCmNoZWVzZWJ1cmdlci9TTQpjaGVlc2VjYWtlL1NNCmNoZWVzZWNsb3RoL00KY2hlZXNlcGFyaW5nL00KY2hlZXNpbmVzcy9NCmNoZWVzeS9UUFIKY2hlZXRhaC9NCmNoZWV0YWhzCmNoZWYvU00KY2hlbQpjaGVtaWNhbC9TTVkKY2hlbWlzZS9NUwpjaGVtaXN0L01TCmNoZW1pc3RyeS9NCmNoZW1vL00KY2hlbW90aGVyYXBldXRpYwpjaGVtb3RoZXJhcHkvTQpjaGVtdXJneS9NCmNoZW5pbGxlL00KY2hlcmlzaC9EU0cKY2hlcm9vdC9NUwpjaGVycnkvU00KY2hlcnQvTQpjaGVydWIvTVMKY2hlcnViaWMKY2hlcnViaW0KY2hlcnZpbC9NCmNoZXNzL00KY2hlc3Nib2FyZC9NUwpjaGVzc21hbi9NCmNoZXNzbWVuCmNoZXN0L01EUwpjaGVzdGVyZmllbGQvU00KY2hlc3RmdWwvU00KY2hlc3RudXQvU00KY2hlc3R5L1RSCmNoZXZhbGllci9TTQpjaGV2aW90L00KY2hldnJvbi9NUwpjaGV3L1NaR01EUgpjaGV3ZXIvTQpjaGV3aW5lc3MvTQpjaGV3eS9QVFIKY2hnCmNoZ2UKY2hpL1NNCmNoaWFyb3NjdXJvL00KY2hpYy9QVE1SCmNoaWNhbmUvTVMKY2hpY2FuZXJ5L1NNCmNoaWNoaS9NUwpjaGljay9YTU5TCmNoaWNrYWRlZS9TTQpjaGlja2VuL01ERwpjaGlja2VuZmVlZC9NCmNoaWNrZW5oZWFydGVkCmNoaWNrZW5wb3gvTQpjaGlja2Vuc2hpdC9TIQpjaGlja3BlYS9TTQpjaGlja3dlZWQvTQpjaGljbGUvTQpjaGljbmVzcy9NCmNoaWNvcnkvU00KY2hpZGUvR0RTCmNoaWRpbmcvWQpjaGllZi9UTVJZUwpjaGllZmRvbS9NCmNoaWVmdGFpbi9NUwpjaGllZnRhaW5zaGlwL1NNCmNoaWZmb24vTQpjaGlmZm9uaWVyL01TCmNoaWdnZXIvTVMKY2hpZ25vbi9NUwpjaGlodWFodWEvU00KY2hpbGJsYWluL1NNCmNoaWxkL00KY2hpbGRiZWFyaW5nL00KY2hpbGRiaXJ0aC9NCmNoaWxkYmlydGhzCmNoaWxkY2FyZS9NCmNoaWxkaG9vZC9TTQpjaGlsZGlzaC9ZUApjaGlsZGlzaG5lc3MvTQpjaGlsZGxlc3MvUApjaGlsZGxlc3NuZXNzL00KY2hpbGRsaWtlCmNoaWxkbWluZGVyL1MKY2hpbGRtaW5kaW5nCmNoaWxkcHJvb2YvR1NECmNoaWxkcmVuL00KY2hpbGkvTQpjaGlsaWVzCmNoaWxsL0pQWlRHTURSUwpjaGlsbGVyL00KY2hpbGxpbmVzcy9NCmNoaWxsaW5nL1kKY2hpbGxuZXNzL00KY2hpbGx5L1RQUgpjaGltZS9NWkdEUlMKY2hpbWVyL00KY2hpbWVyYS9NUwpjaGltZXJpYwpjaGltZXJpY2FsCmNoaW1uZXkvTVMKY2hpbXAvTVMKY2hpbXBhbnplZS9TTQpjaGluL1NNCmNoaW5hL00KY2hpbmF3YXJlL00KY2hpbmNoaWxsYS9NUwpjaGluZS9NUwpjaGluay9HTURTCmNoaW5sZXNzCmNoaW5uZWQKY2hpbm5pbmcKY2hpbm8vTVMKY2hpbnN0cmFwL01TCmNoaW50ei9NCmNoaW50enkvUlQKY2hpbndhZy9TCmNoaXAvU00KY2hpcGJvYXJkCmNoaXBtdW5rL1NNCmNoaXBvbGF0YS9TCmNoaXBwZWQKY2hpcHBlci9NUwpjaGlwcGllCmNoaXBwaW5nL1MKY2hpcHB5L1MKY2hpcm9ncmFwaHkvTQpjaGlyb3BvZGlzdC9NUwpjaGlyb3BvZHkvTQpjaGlyb3ByYWN0aWMvU00KY2hpcm9wcmFjdG9yL1NNCmNoaXJwL0dNRFMKY2hpcnBpbHkKY2hpcnB5L1BUUgpjaGlycnVwL0dNRFMKY2hpc2VsL1pHTURSUwpjaGlzZWxlci9NCmNoaXQvU00KY2hpdGNoYXQvU00KY2hpdGNoYXR0ZWQKY2hpdGNoYXR0aW5nCmNoaXRpbi9NCmNoaXRpbm91cwpjaGl0b3NhbgpjaGl0dGVybGluZ3MvTQpjaGl2YWxyb3VzL1BZCmNoaXZhbHJvdXNuZXNzL00KY2hpdmFscnkvTQpjaGl2ZS9NUwpjaGl2eS9HRFMKY2hsYW15ZGlhL01TCmNobGFteWRpYWUKY2hsb3JhbC9NCmNobG9yZGFuZS9NCmNobG9yaWRlL01TCmNobG9yaW5hdGUvR05EUwpjaGxvcmluYXRpb24vTQpjaGxvcmluZS9NCmNobG9yb2ZsdW9yb2NhcmJvbi9TTQpjaGxvcm9mb3JtL1NHTUQKY2hsb3JvcGh5bGwvTQpjaGxvcm9wbGFzdC9NUwpjaG0KY2hvYy9TCmNob2NrL0dNRFMKY2hvY2thYmxvY2sKY2hvY29ob2xpYy9TTQpjaG9jb2xhdGUvTVMKY2hvY29sYXR5CmNob2ljZS9NVFJTCmNob2lyL01TCmNob2lyYm95L01TCmNob2lybWFzdGVyL1NNCmNob2tlL01aR0RSUwpjaG9rZWNoZXJyeS9TTQpjaG9rZXIvTQpjaG9sZWN5c3RlY3RvbXkKY2hvbGVjeXN0aXRpcwpjaG9sZXIvTQpjaG9sZXJhL00KY2hvbGVyaWMKY2hvbGVzdGVyb2wvTQpjaG9tcC9aR01EUlMKY2hvb3NlL1pHUlMKY2hvb3Nlci9NCmNob29zaW5lc3MvTQpjaG9vc3kvVFBSCmNob3AvU00KY2hvcGhvdXNlL1NNCmNob3BwZWQKY2hvcHBlci9NREdTCmNob3BwaWx5CmNob3BwaW5lc3MvTQpjaG9wcGluZwpjaG9wcHkvVFBSCmNob3BzdGljay9TTQpjaG9yYWwvTVlTCmNob3JhbGUvTVMKY2hvcmQvTVMKY2hvcmRhbApjaG9yZGF0ZS9TTQpjaG9yZS9NUwpjaG9yZWEvTQpjaG9yZW9ncmFwaC9EUlpHCmNob3Jlb2dyYXBoZXIvTQpjaG9yZW9ncmFwaGljCmNob3Jlb2dyYXBoaWNhbGx5CmNob3Jlb2dyYXBocwpjaG9yZW9ncmFwaHkvTQpjaG9yaXN0ZXIvU00KY2hvcm9pZC9NUwpjaG9ydGxlL01aR0RSUwpjaG9ydGxlci9NCmNob3J1cy9HTURTCmNob3NlCmNob3NlbgpjaG93L1NHTUQKY2hvd2Rlci9NUwpjaHJpc20vTQpjaHJpc3Rlbi9BU0dECmNocmlzdGVuaW5nL01TCmNocmlzdGlhbi9VCmNocmlzdG9sb2d5CmNocm9tYXRpYwpjaHJvbWF0aWNhbGx5CmNocm9tYXRpbi9NCmNocm9tYXRvZ3JhcGh5CmNocm9tZS9NR0RTCmNocm9taXVtL00KY2hyb21vc29tYWwKY2hyb21vc29tZS9NUwpjaHJvbmljCmNocm9uaWNhbGx5CmNocm9uaWNsZS9EUlNNWkcKY2hyb25pY2xlci9NCmNocm9ub2dyYXBoL00KY2hyb25vZ3JhcGhzCmNocm9ub2xvZ2ljYWwvWQpjaHJvbm9sb2dpc3QvTVMKY2hyb25vbG9neS9TTQpjaHJvbm9tZXRlci9TTQpjaHJ5c2FsaXMvTVMKY2hyeXNhbnRoZW11bS9NUwpjaHViL1NNCmNodWJiaW5lc3MvTQpjaHViYnkvVFBSCmNodWNrL0dNRFMKY2h1Y2tob2xlL1NNCmNodWNrbGUvTUdEUwpjaHVmZmVkCmNodWcvU00KY2h1Z2dlZApjaHVnZ2luZwpjaHVra2EvTVMKY2h1bS9TTQpjaHVtbWVkCmNodW1taWx5CmNodW1taW5lc3MvTQpjaHVtbWluZwpjaHVtbXkvUFRSCmNodW1wL01TCmNodW5kZXIvR0RTCmNodW5rL0dNRFMKY2h1bmtpbmVzcy9NCmNodW5reS9QVFIKY2h1bnRlci9ER1MKY2h1cmNoL01TCmNodXJjaGdvZXIvU00KY2h1cmNoZ29pbmcvTQpjaHVyY2htYW4vTQpjaHVyY2htZW4KY2h1cmNod2FyZGVuL01TCmNodXJjaHdvbWFuCmNodXJjaHdvbWVuCmNodXJjaHlhcmQvU00KY2h1cmwvTVMKY2h1cmxpc2gvUFkKY2h1cmxpc2huZXNzL00KY2h1cm4vWkdNRFJTCmNodXJuZXIvTQpjaHV0ZS9NUwpjaHV0bmV5L01TCmNodXR6cGFoL00KY2h5bWUvTQpjaWFiYXR0YS9TTQpjaWFvL1MKY2ljYWRhL01TCmNpY2F0cmljZXMKY2ljYXRyaXgvTQpjaWNlcm9uZS9TTQpjaWNlcm9uaQpjaWRlcidzCmNpZGVyL1MKY2lnYXIvTVMKY2lnYXJldHRlL01TCmNpZ2FyaWxsby9NUwpjaWxhbnRyby9NCmNpbGlhCmNpbGl1bS9NCmNpbmNoL0dNRFMKY2luY2hvbmEvU00KY2luY3R1cmUvU00KY2luZGVyL0dNRFMKY2luZQpjaW5lbWEvTVMKY2luZW1hdGljCmNpbmVtYXRvZ3JhcGhlci9NUwpjaW5lbWF0b2dyYXBoaWMKY2luZW1hdG9ncmFwaHkvTQpjaW5uYWJhci9NCmNpbm5hbW9uL00KY2lwaGVyJ3MKY2lwaGVyL0NHRFMKY2lyCmNpcmNhCmNpcmNhZGlhbgpjaXJjbGUvTUdEUwpjaXJjbGV0L01TCmNpcmN1aXQvTURHUwpjaXJjdWl0YWwKY2lyY3VpdG91cy9ZUApjaXJjdWl0b3VzbmVzcy9NCmNpcmN1aXRyeS9NCmNpcmN1aXR5L00KY2lyY3VsYXIvU01ZCmNpcmN1bGFyaXR5L00KY2lyY3VsYXJpemUvRFNHCmNpcmN1bGF0ZS9BRFNHCmNpcmN1bGF0aW9uL1NNCmNpcmN1bGF0b3J5CmNpcmN1bWNpc2UvWERTR04KY2lyY3VtY2lzZWQvVQpjaXJjdW1jaXNpb24vTQpjaXJjdW1mZXJlbmNlL01TCmNpcmN1bWZlcmVudGlhbApjaXJjdW1mbGV4L01TCmNpcmN1bWxvY3V0aW9uL01TCmNpcmN1bWxvY3V0b3J5CmNpcmN1bW5hdmlnYXRlL1hHTkRTCmNpcmN1bW5hdmlnYXRpb24vTQpjaXJjdW1wb2xhcgpjaXJjdW1zY3JpYmUvR0RTCmNpcmN1bXNjcmlwdGlvbi9NUwpjaXJjdW1zcGVjdC9ZCmNpcmN1bXNwZWN0aW9uL00KY2lyY3Vtc3RhbmNlL01HRFMKY2lyY3Vtc3RhbnRpYWwvWQpjaXJjdW12ZW50L0RTRwpjaXJjdW12ZW50aW9uL00KY2lyY3VzL01TCmNpcnF1ZS9NUwpjaXJyaG9zaXMvTQpjaXJyaG90aWMvU00KY2lycmkKY2lycnVzL00KY2lzdGVybi9NUwpjaXQKY2l0YWRlbC9NUwpjaXRhdGlvbi9BTVMKY2l0ZSdzCmNpdGUvSUFHU0QKY2l0aWZpZWQKY2l0aXplbi9NUwpjaXRpemVucnkvTQpjaXRpemVuc2hpcC9NCmNpdHJpYwpjaXRyb24vTVMKY2l0cm9uZWxsYS9NCmNpdHJ1cy9NUwpjaXR5L1NNCmNpdHl3aWRlCmNpdmV0L01TCmNpdmljL1MKY2l2aWNhbGx5CmNpdmljcy9NCmNpdmlsL1VZCmNpdmlsaWFuL01TCmNpdmlsaXR5L0lTTQpjaXZpbGl6YXRpb24vTVMKY2l2aWxpemUvR0RTCmNpdmlsaXplZC9VCmNpdnZpZXMvTQpjawpjbApjbGFjay9HTURTCmNsYWQvVQpjbGFkZGluZy9NCmNsYWltJ3MKY2xhaW0vQ0tFQUdEUwpjbGFpbWFibGUvQQpjbGFpbWFudC9NUwpjbGFpbWVkL1UKY2xhaW1lci9FQ1NNCmNsYWlydm95YW5jZS9NCmNsYWlydm95YW50L01TCmNsYW0vU00KY2xhbWJha2UvTVMKY2xhbWJlci9aR01EUlMKY2xhbWJlcmVyL00KY2xhbW1lZApjbGFtbWlseQpjbGFtbWluZXNzL00KY2xhbW1pbmcKY2xhbW15L1BUUgpjbGFtb3IvR01EUwpjbGFtb3JvdXMKY2xhbXAvR01EUwpjbGFtcGRvd24vTVMKY2xhbi9TTQpjbGFuZGVzdGluZS9ZCmNsYW5nL1pHTURSUwpjbGFuZ29yL00KY2xhbmdvcm91cy9ZCmNsYW5rL0dNRFMKY2xhbm5pc2gvUApjbGFubmlzaG5lc3MvTQpjbGFuc21hbi9NCmNsYW5zbWVuCmNsYW5zd29tYW4KY2xhbnN3b21lbgpjbGFwL1NNCmNsYXBib2FyZC9NREdTCmNsYXBwZWQKY2xhcHBlci9NUwpjbGFwcGVyYm9hcmQvUwpjbGFwcGluZy9NCmNsYXB0cmFwL00KY2xhcXVlL01TCmNsYXJldC9NUwpjbGFyaWZpY2F0aW9uL00KY2xhcmlmeS9YRFNORwpjbGFyaW5ldC9TTQpjbGFyaW5ldGlzdC9TTQpjbGFyaW9uL01ER1MKY2xhcml0eS9NCmNsYXNoL0dNRFMKY2xhc3AncwpjbGFzcC9VR0RTCmNsYXNzL0dNRFMKY2xhc3NpYy9NUwpjbGFzc2ljYWwvTVkKY2xhc3NpY2lzbS9NCmNsYXNzaWNpc3QvTVMKY2xhc3NpZmlhYmxlCmNsYXNzaWZpY2F0aW9uL0NBTQpjbGFzc2lmaWNhdGlvbnMKY2xhc3NpZmllZCdzCmNsYXNzaWZpZWQvVQpjbGFzc2lmaWVkcwpjbGFzc2lmaWVyL01TCmNsYXNzaWZ5L0FDU0RHTgpjbGFzc2luZXNzL00KY2xhc3NsZXNzL1AKY2xhc3NtYXRlL01TCmNsYXNzcm9vbS9NUwpjbGFzc3dvcmsvTQpjbGFzc3kvVFJQCmNsYXR0ZXIvR01EUwpjbGF1c2FsCmNsYXVzZS9NUwpjbGF1c3Ryb3Bob2JpYS9NCmNsYXVzdHJvcGhvYmljCmNsYXZpY2hvcmQvU00KY2xhdmljbGUvTVMKY2xhdmllci9NUwpjbGF3J3MKY2xhdy9DU0dECmNsYXkvTQpjbGF5ZXkKY2xheWllcgpjbGF5aWVzdApjbGVhbi9CSlBaVEdEUllTCmNsZWFuZXIvTQpjbGVhbmluZy9NCmNsZWFubGluZXNzL1VNCmNsZWFubHkvVVRQUgpjbGVhbm5lc3MvVU0KY2xlYW5zZS9aR0RSUwpjbGVhbnNlci9NCmNsZWFudXAvTVMKY2xlYXIvSlBUR01EUllTCmNsZWFyYW5jZS9TTQpjbGVhcmhlYWRlZApjbGVhcmluZy9NCmNsZWFyaW5naG91c2UvU00KY2xlYXJuZXNzL00KY2xlYXJ3YXkvUwpjbGVhdC9NUwpjbGVhdmFnZS9NUwpjbGVhdmUvWkdEUlMKY2xlYXZlci9NCmNsZWYvU00KY2xlZnQvTVMKY2xlbWF0aXMvTVMKY2xlbWVuY3kvSU0KY2xlbWVudC9ZCmNsZW1lbnRpbmUvUwpjbGVuY2gvR01EUwpjbGVyZXN0b3J5L1NNCmNsZXJneS9TTQpjbGVyZ3ltYW4vTQpjbGVyZ3ltZW4KY2xlcmd5d29tYW4vTQpjbGVyZ3l3b21lbgpjbGVyaWMvTVMKY2xlcmljYWwvWQpjbGVyaWNhbGlzbS9NCmNsZXJrL0dNRFMKY2xlcmtzaGlwL00KY2xldmVyL1BUUlkKY2xldmVybmVzcy9NCmNsZXZpcy9NUwpjbGV3L1NHTUQKY2xpY2hlL01EUwpjbGljay9CWkdNRFJTCmNsaWNrZXIvTQpjbGllbnQvTVMKY2xpZW50ZWxlL01TCmNsaWZmL01TCmNsaWZmaGFuZ2VyL1NNCmNsaWZmaGFuZ2luZwpjbGlmZnRvcC9TCmNsaWkKY2xpbWFjdGVyaWMvTQpjbGltYWN0aWMKY2xpbWF0ZS9TTQpjbGltYXRpYwpjbGltYXRpY2FsbHkKY2xpbWF0b2xvZ2lzdC9TTQpjbGltYXRvbG9neS9NCmNsaW1heC9NRFNHCmNsaW1iL1NNRFJaR0IKY2xpbWJlci9NCmNsaW1iaW5nL00KY2xpbWUvU00KY2xpbmNoL01EUlNaRwpjbGluY2hlci9NCmNsaW5nL1NNUlpHCmNsaW5nZXIvTQpjbGluZ2ZpbG0KY2xpbmd5L1JUCmNsaW5pYy9TTQpjbGluaWNhbC9ZCmNsaW5pY2lhbi9TTQpjbGluay9TTURSWkcKY2xpbmtlci9NCmNsaW9tZXRyaWMvUwpjbGlvbWV0cmljaWFuL01TCmNsaW9tZXRyaWNzL00KY2xpcC9TTQpjbGlwYm9hcmQvTVMKY2xpcHBlZApjbGlwcGVyL1NNCmNsaXBwaW5nL1NNCmNsaXF1ZS9TTQpjbGlxdWV5CmNsaXF1aXNoL1lQCmNsaXF1aXNobmVzcy9NCmNsaXQvU00KY2xpdG9yYWwKY2xpdG9yaWRlcwpjbGl0b3Jpcy9NUwpjbGl4CmNsb2FjYS9NCmNsb2FjYWUKY2xvYWsncwpjbG9hay9VU0RHCmNsb2Frcm9vbS9NUwpjbG9iYmVyL1NNREcKY2xvY2hlL1NNCmNsb2NrL1NNREcKY2xvY2t3aXNlCmNsb2Nrd29yay9TTQpjbG9kL01TCmNsb2RkaXNoCmNsb2Rob3BwZXIvTVMKY2xvZydzCmNsb2cvVVMKY2xvZ2dlZC9VCmNsb2dnaW5nL1UKY2xvaXNvbm5lL00KY2xvaXN0ZXIvU01ERwpjbG9pc3RyYWwKY2xvbXAvU0RHCmNsb25hbApjbG9uZS9EU01HCmNsb25rL1NNREcKY2xvcC9NUwpjbG9wcGVkCmNsb3BwaW5nCmNsb3NlL0RSU01ZVEdKUApjbG9zZWZpc3RlZApjbG9zZW1vdXRoZWQKY2xvc2VuZXNzL00KY2xvc2VvdXQvTVMKY2xvc2V0L1NNREcKY2xvc2V1cC9TTQpjbG9zaW5nL00KY2xvc3VyZS9FU00KY2xvdC9NUwpjbG90aC9NCmNsb3RoZS9VRFNHCmNsb3RoZXNob3JzZS9NUwpjbG90aGVzbGluZS9TTQpjbG90aGVzcGluL1NNCmNsb3RoaWVyL01TCmNsb3RoaW5nL00KY2xvdGhzCmNsb3R0ZWQKY2xvdHRpbmcKY2xvdHVyZS9TTQpjbG91ZC9TTURHCmNsb3VkYnVyc3QvU00KY2xvdWRlZC9VCmNsb3VkaW5lc3MvTQpjbG91ZGxlc3MKY2xvdWR5L1JQVApjbG91dC9TTURHCmNsb3ZlL1JTTVoKY2xvdmVuCmNsb3Zlci9NCmNsb3ZlcmxlYWYvU00KY2xvdmVybGVhdmVzCmNsb3duL1NNREcKY2xvd25pc2gvWVAKY2xvd25pc2huZXNzL00KY2xveS9ER1MKY2xveWluZy9ZCmNsdWIvTVMKY2x1YmJhYmxlCmNsdWJiZWQKY2x1YmJlci9TCmNsdWJiaW5nCmNsdWJmZWV0CmNsdWJmb290L01ECmNsdWJob3VzZS9TTQpjbHVibGFuZApjbHVjay9TTURHCmNsdWUvTUdEUwpjbHVlbGVzcwpjbHVtcC9TTURHCmNsdW1weS9UUgpjbHVtc2lseQpjbHVtc2luZXNzL00KY2x1bXN5L1RSUApjbHVuZwpjbHVuay9TTURSWkcKY2x1bmtlci9NCmNsdW5reS9UUgpjbHVzdGVyL01EU0cKY2x1dGNoL0dNRFMKY2x1dHRlci9NRFNHCmNsdXR0ZXJlZC9VCmNsdmkKY2x2aWkKY2x4aQpjbHhpaQpjbHhpdgpjbHhpeApjbHh2aQpjbHh2aWkKY20KY25pZGFyaWFuL01TCmNvL0VTRApjb2FjaC9NRFNHCmNvYWNobG9hZC9TCmNvYWNobWFuL00KY29hY2htZW4KY29hY2h3b3JrCmNvYWRqdXRvci9NUwpjb2FndWxhbnQvTVMKY29hZ3VsYXRlL0dORFMKY29hZ3VsYXRpb24vTQpjb2FndWxhdG9yL01TCmNvYWwvTURHUwpjb2FsZXNjZS9HRFMKY29hbGVzY2VuY2UvTQpjb2FsZXNjZW50CmNvYWxmYWNlL01TCmNvYWxmaWVsZC9TCmNvYWxpdGlvbi9NUwpjb2FsaXRpb25pc3QvTVMKY29hbG1pbmUvUwpjb2Fyc2UvUllUUApjb2Fyc2VuL1NERwpjb2Fyc2VuZXNzL00KY29hc3QvU01EUlpHCmNvYXN0YWwKY29hc3Rlci9NCmNvYXN0Z3VhcmQvUwpjb2FzdGxpbmUvTVMKY29hdC9NREdKUwpjb2F0aW5nL00KY29hdHJvb20vUwpjb2F0dGFpbC9TTQpjb2F1dGhvci9NREdTCmNvYXgvRFJTWkcKY29heGVyL00KY29heGlhbApjb2F4aW5nL1kKY29iL1NNCmNvYmFsdC9NCmNvYmJlci9TCmNvYmJsZS9EUlNNWkcKY29iYmxlci9NCmNvYmJsZXN0b25lL1NNCmNvYm51dC9TCmNvYnJhL1NNCmNvYndlYi9TTQpjb2J3ZWJiZWQKY29id2ViYnkvUlQKY29jYS9NCmNvY2FpbmUvTQpjb2NjaS9TCmNvY2N1cy9NCmNvY2N5Z2VzCmNvY2N5eC9NCmNvY2hpbmVhbC9NCmNvY2hsZWEvU00KY29jaGxlYWUKY29jaGxlYXIKY29jay9NREdTCmNvY2thZGUvU00KY29ja2FtYW1pZQpjb2NrYXRvby9TTQpjb2NrYXRyaWNlL1NNCmNvY2tjaGFmZXIvUwpjb2NrY3Jvdy9TTQpjb2NrZXJlbC9TTQpjb2NrZXllZApjb2NrZmlnaHQvTUdTCmNvY2tmaWdodGluZy9NCmNvY2tpbHkKY29ja2luZXNzL00KY29ja2xlL1NNCmNvY2tsZXNoZWxsL1NNCmNvY2tuZXkvU00KY29ja3BpdC9TTQpjb2Nrcm9hY2gvTVMKY29ja3Njb21iL1NNCmNvY2tzdWNrZXIvTVMhCmNvY2tzdXJlCmNvY2t0YWlsL01TCmNvY2t5L1JUUApjb2NvL01TCmNvY29hL1NNCmNvY29udXQvU00KY29jb29uL1NNREcKY29kL1NNCmNvZGEvTVMKY29kZGVkCmNvZGRpbmcKY29kZGxlL0RTRwpjb2RlJ3MKY29kZS9DWkdEUlMKY29kZWluZS9NCmNvZGVwZW5kZW5jeS9NCmNvZGVwZW5kZW50L1NNCmNvZGVyL0NNCmNvZGV4L00KY29kZmlzaC9NUwpjb2RnZXIvU00KY29kaWNlcwpjb2RpY2lsL1NNCmNvZGlmaWNhdGlvbi9NCmNvZGlmaWVyL00KY29kaWZ5L1hEUlNOWkcKY29kb24vUwpjb2RwaWVjZS9NUwpjb2Rzd2FsbG9wCmNvZWQvTVMKY29lZHVjYXRpb24vTQpjb2VkdWNhdGlvbmFsCmNvZWZmaWNpZW50L01TCmNvZWxlbnRlcmF0ZS9NUwpjb2VxdWFsL01ZUwpjb2VyY2UvRFJTWkdOVgpjb2VyY2VyL00KY29lcmNpb24vTQpjb2V2YWwvU01ZCmNvZXhpc3QvRFNHCmNvZXhpc3RlbmNlL00KY29leGlzdGVudApjb2V4dGVuc2l2ZQpjb2ZmZWUvU00KY29mZmVlY2FrZS9TTQpjb2ZmZWVob3VzZS9NUwpjb2ZmZWVtYWtlci9TTQpjb2ZmZWVwb3QvTVMKY29mZmVyL1NNCmNvZmZlcmRhbS9NUwpjb2ZmaW4vU01ERwpjb2cvU00KY29nZW5jeS9NCmNvZ2VudC9ZCmNvZ2l0YXRlL0RTWEdOVgpjb2dpdGF0aW9uL00KY29naXRhdG9yL01TCmNvZ25hYy9TTQpjb2duYXRlL01TCmNvZ25pdGlvbi9BTQpjb2duaXRpb25hbApjb2duaXRpdmUvWQpjb2duaXphYmxlCmNvZ25pemFuY2UvQU0KY29nbml6YW50CmNvZ25vbWVuL1NNCmNvZ25vc2NlbnRlL00KY29nbm9zY2VudGkKY29nd2hlZWwvU00KY29oYWJpdC9TR0QKY29oYWJpdGFudC9NUwpjb2hhYml0YXRpb24vTQpjb2hlaXIvU00KY29oZXJlL0RTRwpjb2hlcmVuY2UvSU0KY29oZXJlbmN5L00KY29oZXJlbnQvSVkKY29oZXNpb24vTQpjb2hlc2l2ZS9ZUApjb2hlc2l2ZW5lc3MvTQpjb2hvL01TCmNvaG9ydC9TTQpjb2lmL01TCmNvaWZmZWQKY29pZmZpbmcKY29pZmZ1cmUvRFNNRwpjb2lsJ3MvQQpjb2lsL1VBREdTCmNvaW4vTURSWkdTCmNvaW5hZ2UvU00KY29pbmNpZGUvRFNHCmNvaW5jaWRlbmNlL01TCmNvaW5jaWRlbnQKY29pbmNpZGVudGFsL1kKY29pbmVyL00KY29pbnN1cmFuY2UvTQpjb2lyCmNvaXRhbApjb2l0dXMvTQpjb2tlL01HRFMKY29sL1MKY29sYS9NUwpjb2xhbmRlci9TTQpjb2xkL01SWVRQUwpjb2xkYmxvb2RlZApjb2xkbmVzcy9NCmNvbGVzbGF3L00KY29sZXVzL01TCmNvbGV5L1MKY29saWMvTQpjb2xpY2t5CmNvbGlzZXVtL01TCmNvbGl0aXMvTQpjb2xsCmNvbGxhYm9yYXRlL0RTWEdOVgpjb2xsYWJvcmF0aW9uL00KY29sbGFib3JhdGlvbmlzdApjb2xsYWJvcmF0aXZlL1kKY29sbGFib3JhdG9yL01TCmNvbGxhZ2UvU00KY29sbGFnZW4KY29sbGFwc2UvTUdEUwpjb2xsYXBzaWJsZQpjb2xsYXIvU01ERwpjb2xsYXJib25lL1NNCmNvbGxhcmQvU00KY29sbGFybGVzcwpjb2xsYXRlL0RTWEdOCmNvbGxhdGVyYWwvTVkKY29sbGF0ZXJhbGl6ZQpjb2xsYXRpb24vTQpjb2xsYXRvci9NUwpjb2xsZWFndWUvTVMKY29sbGVjdCdzCmNvbGxlY3QvQVNHVkQKY29sbGVjdGVkL1UKY29sbGVjdGVkbHkKY29sbGVjdGlibGUvU00KY29sbGVjdGlvbi9BTVMKY29sbGVjdGl2ZS9NWVMKY29sbGVjdGl2aXNtL00KY29sbGVjdGl2aXN0L1NNCmNvbGxlY3Rpdml6YXRpb24vTQpjb2xsZWN0aXZpemUvRFNHCmNvbGxlY3Rvci9NUwpjb2xsZWVuL1NNCmNvbGxlZ2UvU00KY29sbGVnaWFsaXR5L00KY29sbGVnaWFuL01TCmNvbGxlZ2lhdGUKY29sbGlkZS9EU0cKY29sbGllL1JTTVoKY29sbGllci9NCmNvbGxpZXJ5L1NNCmNvbGxpc2lvbi9TTQpjb2xsb2NhdGUvTUdORFNYCmNvbGxvY2F0aW9uL00KY29sbG9pZC9TTQpjb2xsb2lkYWwKY29sbG9xCmNvbGxvcXVpYWwvWQpjb2xsb3F1aWFsaXNtL1NNCmNvbGxvcXVpZXMKY29sbG9xdWl1bS9NUwpjb2xsb3F1eS9NCmNvbGx1ZGUvRFNHCmNvbGx1c2lvbi9NCmNvbGx1c2l2ZQpjb2xvZ25lL1NNCmNvbG9uL1NNCmNvbG9uZWwvU00KY29sb25lbGN5L00KY29sb25lcwpjb2xvbmlhbC9TTVkKY29sb25pYWxpc20vTQpjb2xvbmlhbGlzdC9NUwpjb2xvbmlzdC9TTQpjb2xvbml6YXRpb24vQUNNCmNvbG9uaXplL0NBR1NECmNvbG9uaXplci9NUwpjb2xvbm5hZGUvTURTCmNvbG9ub3Njb3B5L1NNCmNvbG9ueS9TTQpjb2xvcGhvbi9TTQpjb2xvcidzCmNvbG9yL0FFR0RTCmNvbG9yYW50L1NNCmNvbG9yYXRpb24vRU0KY29sb3JhdHVyYS9NUwpjb2xvcmJsaW5kL1AKY29sb3JibGluZG5lc3MvTQpjb2xvcmVkJ3MKY29sb3JlZC9VCmNvbG9yZWRzCmNvbG9yZmFzdC9QCmNvbG9yZmFzdG5lc3MvTQpjb2xvcmZ1bC9QWQpjb2xvcmZ1bG5lc3MvTQpjb2xvcmluZydzCmNvbG9yaXN0L1MKY29sb3JpemF0aW9uL00KY29sb3JpemUvRFNHCmNvbG9ybGVzcy9QWQpjb2xvcmxlc3NuZXNzL00KY29sb3J3YXkvUwpjb2xvc3NhbC9ZCmNvbG9zc2kKY29sb3NzdXMvTQpjb2xvc3RvbXkvU00KY29sb3N0cnVtL00KY29sdC9NUwpjb2x0aXNoCmNvbHVtYmluZS9TTQpjb2x1bW4vU01ECmNvbHVtbmFyCmNvbHVtbmlzdC9TTQpjb20vSkwKY29tYS9NUwpjb21ha2VyL1NNCmNvbWF0b3NlCmNvbWIvTURSWkdKUwpjb21iYXQvU01ER1YKY29tYmF0YW50L1NNCmNvbWJhdGl2ZW5lc3MvTQpjb21iZWQvVQpjb21iZXIvTQpjb21iaW5hdGlvbi9TTQpjb21iaW5lJ3MKY29tYmluZS9BRFNHCmNvbWJpbmVkL1UKY29tYmluZXIvTVMKY29tYmluZ3MvTQpjb21iby9TTQpjb21idXN0aWJpbGl0eS9NCmNvbWJ1c3RpYmxlL01TCmNvbWJ1c3Rpb24vTQpjb21idXN0aXZlCmNvbWUvSU1aR1JTCmNvbWViYWNrL01TCmNvbWVkaWFuL01TCmNvbWVkaWMKY29tZWRpZW5uZS9NUwpjb21lZG93bi9NUwpjb21lZHkvU00KY29tZWxpbmVzcy9NCmNvbWVseS9SUFQKY29tZXIncwpjb21lc3RpYmxlL1NNCmNvbWV0L1NNCmNvbWV1cHBhbmNlL1NNCmNvbWZpdCdzCmNvbWZpdC9FUwpjb21mb3J0L0VTTURHCmNvbWZvcnRhYmxlL1AKY29tZm9ydGFibGVuZXNzL00KY29tZm9ydGFibHkvVQpjb21mb3J0ZXIvTVMKY29tZm9ydGluZy9ZCmNvbWZvcnRsZXNzCmNvbWZ5L1JUCmNvbWljL1NNCmNvbWljYWwvWQpjb21pY2FsaXR5L00KY29taW5nL00KY29taXR5L00KY29tbQpjb21tYS9TTQpjb21tYW5kL1NNRFJMWkcKY29tbWFuZGFudC9NUwpjb21tYW5kZWVyL0dEUwpjb21tYW5kZXIvTQpjb21tYW5kbWVudC9NUwpjb21tYW5kby9TTQpjb21tZW1vcmF0ZS9YR05WRFMKY29tbWVtb3JhdGlvbi9NCmNvbW1lbW9yYXRvci9NUwpjb21tZW5jZS9BRFNMRwpjb21tZW5jZW1lbnQvQU0KY29tbWVuY2VtZW50cwpjb21tZW5kL0FTREJHCmNvbW1lbmRhYmx5CmNvbW1lbmRhdGlvbi9BTVMKY29tbWVuZGF0b3J5CmNvbW1lbnN1cmFibGUKY29tbWVuc3VyYXRlL0lZCmNvbW1lbnQvR1NNRApjb21tZW50YXJ5L1NNCmNvbW1lbnRhdGUvRFNHCmNvbW1lbnRhdG9yL1NNCmNvbW1lcmNlL00KY29tbWVyY2lhbC9TTVkKY29tbWVyY2lhbGlzbS9NCmNvbW1lcmNpYWxpemF0aW9uL00KY29tbWVyY2lhbGl6ZS9HRFMKY29tbWllL1NNCmNvbW1pbmdsZS9EU0cKY29tbWlzZXJhdGUvR05WRFNYCmNvbW1pc2VyYXRpb24vTQpjb21taXNzYXIvU00KY29tbWlzc2FyaWF0L1NNCmNvbW1pc3NhcnkvU00KY29tbWlzc2lvbidzCmNvbW1pc3Npb24vQUNTR0QKY29tbWlzc2lvbmFpcmUvUwpjb21taXNzaW9uZXIvU00KY29tbWl0L0FTCmNvbW1pdG1lbnQvTVMKY29tbWl0dGFsL1NNCmNvbW1pdHRlZC9BVQpjb21taXR0ZWUvU00KY29tbWl0dGVlbWFuL00KY29tbWl0dGVlbWVuCmNvbW1pdHRlZXdvbWFuL00KY29tbWl0dGVld29tZW4KY29tbWl0dGVyL1MKY29tbWl0dGluZy9BCmNvbW1vZGUncwpjb21tb2RlL0VJUwpjb21tb2RpZmljYXRpb24KY29tbW9kaW91cy9ZCmNvbW1vZGl0eS9TTQpjb21tb2RvcmUvU00KY29tbW9uJ3MKY29tbW9uL1VQUllUCmNvbW1vbmFsaXR5L1MKY29tbW9uYWx0eS9NCmNvbW1vbmVyL01TCmNvbW1vbm5lc3MvVU0KY29tbW9ucGxhY2UvTVMKY29tbW9ucwpjb21tb25zZW5zZQpjb21tb253ZWFsL01ICmNvbW1vbndlYWx0aC9NCmNvbW1vbndlYWx0aHMKY29tbW90aW9uL1NNCmNvbW11bmFsL1kKY29tbXVuZS9YRFNNR04KY29tbXVuaWNhYmlsaXR5L00KY29tbXVuaWNhYmxlL0kKY29tbXVuaWNhYmx5CmNvbW11bmljYW50L01TCmNvbW11bmljYXRlL0dOVkRTWApjb21tdW5pY2F0aW9uL00KY29tbXVuaWNhdGl2ZS9VCmNvbW11bmljYXRvci9TTQpjb21tdW5pb24vTQpjb21tdW5pcXVlL1NNCmNvbW11bmlzbS9NCmNvbW11bmlzdC9TTQpjb21tdW5pc3RpYwpjb21tdW5pdHkvU00KY29tbXV0YXRpb24vTVMKY29tbXV0YXRpdmUKY29tbXV0YXRvci9TTQpjb21tdXRlL0JEUlNNWkcKY29tbXV0ZXIvTQpjb21wL01EWUdTCmNvbXBhY3QvVEdTTURSWVAKY29tcGFjdGlvbgpjb21wYWN0bmVzcy9NCmNvbXBhY3Rvci9TTQpjb21wYW5pb24vU0JNCmNvbXBhbmlvbmFibHkKY29tcGFuaW9uc2hpcC9NCmNvbXBhbmlvbndheS9NUwpjb21wYW55L1NNCmNvbXBhcmFiaWxpdHkvTQpjb21wYXJhYmxlL0kKY29tcGFyYWJseS9JCmNvbXBhcmF0aXZlL01ZUwpjb21wYXJlL0JEU01HCmNvbXBhcmlzb24vTVMKY29tcGFydG1lbnQvU00KY29tcGFydG1lbnRhbApjb21wYXJ0bWVudGFsaXphdGlvbi9NCmNvbXBhcnRtZW50YWxpemUvRFNHCmNvbXBhc3MvR01EUwpjb21wYXNzaW9uL00KY29tcGFzc2lvbmF0ZS9ZCmNvbXBhdGliaWxpdHkvSU0KY29tcGF0aWJsZS9JTVMKY29tcGF0aWJseS9JCmNvbXBhdHJpb3QvTVMKY29tcGVlci9TTQpjb21wZWwvUwpjb21wZWxsZWQKY29tcGVsbGluZy9ZCmNvbXBlbmRpb3VzCmNvbXBlbmRpdW0vU00KY29tcGVuc2F0ZS9EU1hHTgpjb21wZW5zYXRlZC9VCmNvbXBlbnNhdGlvbi9NCmNvbXBlbnNhdG9yeQpjb21wZXJlL0RTRwpjb21wZXRlL0RTRwpjb21wZXRlbmNlL0lNCmNvbXBldGVuY2VzCmNvbXBldGVuY2llcwpjb21wZXRlbmN5L0lNCmNvbXBldGVudC9JWQpjb21wZXRpdGlvbi9TTQpjb21wZXRpdGl2ZS9QWQpjb21wZXRpdGl2ZW5lc3MvTQpjb21wZXRpdG9yL1NNCmNvbXBpbGF0aW9uL1NNCmNvbXBpbGUvRFJTWkcKY29tcGlsZXIvTQpjb21wbGFjZW5jZS9NCmNvbXBsYWNlbmN5L00KY29tcGxhY2VudC9ZCmNvbXBsYWluL0RSWkdTCmNvbXBsYWluYW50L01TCmNvbXBsYWluZXIvTQpjb21wbGFpbnQvU00KY29tcGxhaXNhbmNlL00KY29tcGxhaXNhbnQvWQpjb21wbGVjdGVkCmNvbXBsZW1lbnQvU0dNRApjb21wbGVtZW50YXJ5CmNvbXBsZXRlL1BZVEdOWERSUwpjb21wbGV0ZWQvVQpjb21wbGV0ZW5lc3MvSU0KY29tcGxldGlvbi9NCmNvbXBsZXgvTVNZCmNvbXBsZXhpb24vTURTCmNvbXBsZXhpb25hbApjb21wbGV4aXR5L1NNCmNvbXBsaWFuY2UvTQpjb21wbGlhbnQvWQpjb21wbGljYXRlL0dEUwpjb21wbGljYXRlZC9ZCmNvbXBsaWNhdGlvbi9NCmNvbXBsaWNpdApjb21wbGljaXR5L00KY29tcGxpbWVudC9NREdTCmNvbXBsaW1lbnRhcnkvVQpjb21wbHkvTkRTWEcKY29tcG8vUwpjb21wb25lbnQvU00KY29tcG9ydC9MU0dECmNvbXBvcnRtZW50L00KY29tcG9zZS9BRUNHU0QKY29tcG9zZWRseQpjb21wb3Nlci9NUwpjb21wb3NpdGUvTVlHTlhEUwpjb21wb3NpdGlvbi9DTQpjb21wb3NpdG9yL1NNCmNvbXBvc3QvU0dNRApjb21wb3N1cmUvRU0KY29tcG90ZS9TTQpjb21wb3VuZC9HTURCUwpjb21wb3VuZGVkL1UKY29tcHJlaGVuZC9TREcKY29tcHJlaGVuc2liaWxpdHkvSU0KY29tcHJlaGVuc2libGUvSQpjb21wcmVoZW5zaWJseS9JCmNvbXByZWhlbnNpb24vSU0KY29tcHJlaGVuc2lvbnMKY29tcHJlaGVuc2l2ZS9QTVlTCmNvbXByZWhlbnNpdmVuZXNzL00KY29tcHJlc3Mncwpjb21wcmVzcy9DR0RTCmNvbXByZXNzZWQvVQpjb21wcmVzc2libGUKY29tcHJlc3Npb24vQ00KY29tcHJlc3Nvci9TTQpjb21wcmlzZS9HRFMKY29tcHJvbWlzZS9NR0RTCmNvbXB0cm9sbGVyL01TCmNvbXB1bHNpb24vTVMKY29tcHVsc2l2ZS9ZUApjb21wdWxzaXZlbmVzcy9NCmNvbXB1bHNvcmlseQpjb21wdWxzb3J5L1NNCmNvbXB1bmN0aW9uL1NNCmNvbXB1dGF0aW9uL1NNCmNvbXB1dGF0aW9uYWwvWQpjb21wdXRlL0FEU0cKY29tcHV0ZXIvTVMKY29tcHV0ZXJhdGUKY29tcHV0ZXJpemF0aW9uL00KY29tcHV0ZXJpemUvR0RTCmNvbXB1dGluZy9NCmNvbXJhZGUvU01ZCmNvbXJhZGVzaGlwL00KY29uL0dTTQpjb25jYXRlbmF0ZS9YRFNHTgpjb25jYXRlbmF0aW9uL00KY29uY2F2ZS9ZUApjb25jYXZlbmVzcy9NCmNvbmNlYWwvU0RSWkdCTApjb25jZWFsZWQvVQpjb25jZWFsZXIvTQpjb25jZWFsbWVudC9NCmNvbmNlaXQvU01ECmNvbmNlaXRlZC9QWQpjb25jZWl0ZWRuZXNzL00KY29uY2VpdmFibGUvSQpjb25jZWl2YWJseS9JCmNvbmNlaXZlL0RTR0IKY29uY2VudHJhdGUvRFNNR05YCmNvbmNlbnRyYXRpb24vTQpjb25jZW50cmljCmNvbmNlbnRyaWNhbGx5CmNvbmNlcHQvU00KY29uY2VwdGlvbi9TTQpjb25jZXB0aW9uYWwKY29uY2VwdHVhbC9ZCmNvbmNlcHR1YWxpemF0aW9uL01TCmNvbmNlcHR1YWxpemUvRFNHCmNvbmNlcm4vVU1ECmNvbmNlcm5lZC9VWQpjb25jZXJuaW5nCmNvbmNlcm5zCmNvbmNlcnQncwpjb25jZXJ0L0VTREcKY29uY2VydGVkL1kKY29uY2VydGdvZXIvUwpjb25jZXJ0aW5hL1NHTUQKY29uY2VydGl6ZS9EU0cKY29uY2VydG1hc3Rlci9NUwpjb25jZXJ0by9TTQpjb25jZXNzaW9uYWlyZS9NUwpjb25jZXNzaW9uYWwKY29uY2Vzc2lvbmFyeQpjb25jaC9NCmNvbmNoaWUvUwpjb25jaHMKY29uY2llcmdlL01TCmNvbmNpbGlhdGUvRFNHTgpjb25jaWxpYXRpb24vQU0KY29uY2lsaWF0b3IvU00KY29uY2lsaWF0b3J5CmNvbmNpc2UvUlBZVE4KY29uY2lzZW5lc3MvTQpjb25jaXNpb24vTQpjb25jbGF2ZS9TTQpjb25jbHVkZS9EU0cKY29uY2x1c2lvbi9NUwpjb25jbHVzaXZlL0lZUApjb25jbHVzaXZlbmVzcy9JTQpjb25jb2N0L1NERwpjb25jb2N0aW9uL01TCmNvbmNvbWl0YW50L01ZUwpjb25jb3JkL00KY29uY29yZGFuY2UvU00KY29uY29yZGFudApjb25jb3JkYXQvU00KY29uY291cnNlL1NNCmNvbmNyZXRlL0RTUE1ZR05YCmNvbmNyZXRlbmVzcy9NCmNvbmNyZXRpb24vTQpjb25jdWJpbmFnZS9NCmNvbmN1YmluZS9NUwpjb25jdXBpc2NlbmNlL00KY29uY3VwaXNjZW50CmNvbmN1ci9TCmNvbmN1cnJlZApjb25jdXJyZW5jZS9TTQpjb25jdXJyZW5jeQpjb25jdXJyaW5nCmNvbmN1c3MvVgpjb25jdXNzaW9uL1NNCmNvbmRlbW4vU0RSWkcKY29uZGVtbmF0aW9uL01TCmNvbmRlbW5hdG9yeQpjb25kZW1uZXIvTQpjb25kZW5zYXRlL01OWFMKY29uZGVuc2F0aW9uL00KY29uZGVuc2UvRFJTWkcKY29uZGVuc2VyL00KY29uZGVzY2VuZGluZy9ZCmNvbmRlc2NlbnNpb24vTQpjb25kaWduCmNvbmRpbWVudC9NUwpjb25kaXRpb24ncwpjb25kaXRpb24vQUdTRApjb25kaXRpb25hbC9TTVkKY29uZGl0aW9uZWQvVQpjb25kaXRpb25lci9TTQpjb25kaXRpb25pbmcvTQpjb25kby9TTQpjb25kb2xlbmNlL1NNCmNvbmRvbS9TTQpjb25kb21pbml1bS9NUwpjb25kb25lL0RTRwpjb25kb3IvU00KY29uZHVjZS9EU0dWCmNvbmR1Y3QvTURHVgpjb25kdWN0YW5jZS9NCmNvbmR1Y3RpYmlsaXR5L00KY29uZHVjdGlibGUKY29uZHVjdGlvbi9NCmNvbmR1Y3Rpdml0eS9NCmNvbmR1Y3Rvci9NUwpjb25kdWN0cmVzcy9NUwpjb25kdWl0L1NNCmNvbmUvTQpjb25leXMKY29uZmFiL1NNCmNvbmZhYmJlZApjb25mYWJiaW5nCmNvbmZhYnVsYXRlL1hEU0dOCmNvbmZhYnVsYXRpb24vTQpjb25mZWN0aW9uL1NaTVIKY29uZmVjdGlvbmVyL00KY29uZmVjdGlvbmVyeS9TTQpjb25mZWRlcmFjeS9TTQpjb25mZWRlcmF0ZS9NCmNvbmZlci9TCmNvbmZlcmVlL1NNCmNvbmZlcmVuY2UvTUdTCmNvbmZlcnJhYmxlCmNvbmZlcnJhbC9NCmNvbmZlcnJlZApjb25mZXJyZXIvTVMKY29uZmVycmluZwpjb25mZXNzZWQvWQpjb25mZXNzaW9uL1NNCmNvbmZlc3Npb25hbC9TTQpjb25mZXNzb3IvTVMKY29uZmV0dGkvTQpjb25maWRhbnQvTVMKY29uZmlkYW50ZS9TTQpjb25maWRlL0RSU1pHCmNvbmZpZGVuY2UvU00KY29uZmlkZW50L1kKY29uZmlkZW50aWFsL1kKY29uZmlkZW50aWFsaXR5L00KY29uZmlkZXIvTQpjb25maWRpbmcvWQpjb25maWd1cmF0aW9uL1MKY29uZmlndXJlL0IKY29uZmluZWQvVQpjb25maW5lbWVudC9NUwpjb25maXJtL0FTREcKY29uZmlybWF0aW9uL0FTTQpjb25maXJtYXRvcnkKY29uZmlybWVkL1UKY29uZmlzY2F0ZS9EU0dOWApjb25maXNjYXRpb24vTQpjb25maXNjYXRvci9TTQpjb25maXNjYXRvcnkKY29uZmxhZ3JhdGlvbi9NUwpjb25mbGF0ZS9YRFNHTgpjb25mbGF0aW9uL00KY29uZmxpY3QvU0dNRApjb25mbHVlbmNlL01TCmNvbmZsdWVudApjb25mb3JtL1pCCmNvbmZvcm1hYmxlL1UKY29uZm9ybWFuY2UvTQpjb25mb3JtaXNtL00KY29uZm9ybWlzdC9TTQpjb25mb3JtaXR5L00KY29uZnJlcmUvTVMKY29uZnJvbnRhdGlvbi9TTQpjb25mcm9udGF0aW9uYWwKY29uZnVzZS9SWgpjb25mdXNlZC9ZCmNvbmZ1c2luZy9ZCmNvbmZ1dGF0aW9uL00KY29uZnV0ZS9EU0cKY29uZ2EvU01ERwpjb25nZWFsL1NMREcKY29uZ2VhbG1lbnQvTQpjb25nZXIvU00KY29uZ2VyaWVzL00KY29uZ2VzdC9TREdWCmNvbmdlc3Rpb24vTQpjb25nbG9tZXJhdGUvRFNYTUdOCmNvbmdsb21lcmF0aW9uL00KY29uZ3JhdHMvTQpjb25ncmF0dWxhdGUvWEdORFMKY29uZ3JhdHVsYXRpb24vTQpjb25ncmF0dWxhdG9yeQpjb25ncmVnYW50L01TCmNvbmdyZWdhdGUvR05EU1gKY29uZ3JlZ2F0aW9uL00KY29uZ3JlZ2F0aW9uYWwKY29uZ3JlZ2F0aW9uYWxpc20vTQpjb25ncmVnYXRpb25hbGlzdC9NUwpjb25ncmVzcy9NUwpjb25ncmVzc2lvbmFsCmNvbmdyZXNzbWFuL00KY29uZ3Jlc3NtZW4KY29uZ3Jlc3NwZW9wbGUKY29uZ3Jlc3NwZXJzb24vTVMKY29uZ3Jlc3N3b21hbi9NCmNvbmdyZXNzd29tZW4KY29uZ3J1ZW5jZS9NCmNvbmdydWVudC9ZCmNvbmdydWl0eS9JU00KY29uZ3J1b3VzCmNvbmljL1NNCmNvbmljYWwvWQpjb25pZmVyL1NNCmNvbmlmZXJvdXMKY29uamVjdHVyYWwKY29uamVjdHVyZS9NR0RTCmNvbmpvaW50CmNvbmp1Z2FsL1kKY29uanVnYXRlL0RTWEdOCmNvbmp1Z2F0aW9uL00KY29uanVuY3QvVk1TCmNvbmp1bmN0aXZhL1NNCmNvbmp1bmN0aXZlL1NNCmNvbmp1bmN0aXZpdGlzL00KY29uanVyYXRpb24vTVMKY29uanVyZS9EUlNaRwpjb25qdXJlci9NCmNvbmsvTURSWgpjb25tYW4KY29ubmVjdC9BRURWR1MKY29ubmVjdGFibGUKY29ubmVjdGVkL1UKY29ubmVjdGlvbi9FTVMKY29ubmVjdGl2ZS9NUwpjb25uZWN0aXZpdHkvTQpjb25uZWN0b3IvTVMKY29ubmVkCmNvbm5pbmcKY29ubmlwdGlvbi9NUwpjb25uaXZhbmNlL00KY29ubml2ZS9EUlNaRwpjb25uaXZlci9NCmNvbm5vaXNzZXVyL1NNCmNvbm5vdGF0aXZlCmNvbm51YmlhbApjb25xdWVyL0FTREcKY29ucXVlcmFibGUvVQpjb25xdWVyZWQvVQpjb25xdWVyb3IvTVMKY29ucXVlc3QvQU0KY29ucXVpc3RhZG9yL1NNCmNvbnMvRFNHCmNvbnNhbmd1aW5lb3VzCmNvbnNhbmd1aW5pdHkvTQpjb25zY2llbmNlbGVzcwpjb25zY2llbnRpb3VzL1BZCmNvbnNjaWVudGlvdXNuZXNzL00KY29uc2Npb3VzL1VZUApjb25zY2lvdXNuZXNzL1VNCmNvbnNjaW91c25lc3Nlcwpjb25zY3JpcHRpb24vTQpjb25zZWNyYXRlL0FEU0dOCmNvbnNlY3JhdGVkL1UKY29uc2VjcmF0aW9uL0FNCmNvbnNlY3JhdGlvbnMKY29uc2VjdXRpdmUvWQpjb25zZW5zdWFsCmNvbnNlbnN1cy9NUwpjb25zZW50L1NNREcKY29uc2VxdWVuY2UvU00KY29uc2VxdWVudC9ZCmNvbnNlcXVlbnRpYWwvSVkKY29uc2VydmFuY3kvU00KY29uc2VydmF0aW9uL00KY29uc2VydmF0aW9uaXNtL00KY29uc2VydmF0aW9uaXN0L1NNCmNvbnNlcnZhdGlzbS9NCmNvbnNlcnZhdGl2ZS9NWVMKY29uc2VydmF0b2lyZS9TCmNvbnNlcnZhdG9yL1NNCmNvbnNlcnZhdG9yeS9TTQpjb25zaWRlci9BR1NECmNvbnNpZGVyYWJsZS9JCmNvbnNpZGVyYWJseQpjb25zaWRlcmF0ZS9JUFlOCmNvbnNpZGVyYXRlbmVzcy9JTQpjb25zaWRlcmF0aW9uL0FJTQpjb25zaWRlcmF0aW9ucwpjb25zaWRlcmVkL1UKY29uc2lnbi9BU0RHCmNvbnNpZ25lZS9NUwpjb25zaWdubWVudC9NUwpjb25zaXN0L1NERwpjb25zaXN0ZW5jZS9NUwpjb25zaXN0ZW5jeS9JU00KY29uc2lzdGVudC9JWQpjb25zaXN0b3J5L1NNCmNvbnNvbGFibGUvSQpjb25zb2xhdGlvbi9NUwpjb25zb2xhdG9yeQpjb25zb2xpZGF0ZS9YRFNHTgpjb25zb2xpZGF0ZWQvVQpjb25zb2xpZGF0aW9uL00KY29uc29saWRhdG9yL01TCmNvbnNvbGluZy9ZCmNvbnNvbW1lL00KY29uc29uYW5jZS9TTQpjb25zb25hbnQvU01ZCmNvbnNvcnRpYQpjb25zb3J0aXVtL00KY29uc3BlY3R1cy9NUwpjb25zcGljdW91cy9JUFkKY29uc3BpY3VvdXNuZXNzL0lNCmNvbnNwaXJhY3kvU00KY29uc3BpcmF0b3IvTVMKY29uc3BpcmF0b3JpYWwvWQpjb25zcGlyZS9HRApjb25zdGFibGUvU00KY29uc3RhYnVsYXJ5L1NNCmNvbnN0YW5jeS9JTQpjb25zdGFudC9NWVMKY29uc3RlbGxhdGlvbi9TTQpjb25zdGVybmF0aW9uL00KY29uc3RpcGF0ZS9HTkRTCmNvbnN0aXBhdGlvbi9NCmNvbnN0aXR1ZW5jeS9TTQpjb25zdGl0dWVudC9TTQpjb25zdGl0dXRlL0FEU0dOVgpjb25zdGl0dXRpb24vQU0KY29uc3RpdHV0aW9uYWwvTVlTCmNvbnN0aXR1dGlvbmFsaXNtCmNvbnN0aXR1dGlvbmFsaXR5L1VNCmNvbnN0aXR1dGlvbnMKY29uc3RyYWluZWQvVQpjb25zdHJhaW50L1NNCmNvbnN0cmljdC9HVlNECmNvbnN0cmljdGlvbi9TTQpjb25zdHJpY3Rvci9TTQpjb25zdHJ1YWJsZQpjb25zdHJ1Y3Qncwpjb25zdHJ1Y3QvQ0FEVkdTCmNvbnN0cnVjdGlvbi9DQU1TCmNvbnN0cnVjdGlvbmFsCmNvbnN0cnVjdGlvbmlzdCdzCmNvbnN0cnVjdGlvbmlzdC9DUwpjb25zdHJ1Y3RpdmUvWVAKY29uc3RydWN0aXZlbmVzcy9NCmNvbnN0cnVjdG9yL01TCmNvbnN0cnVlL0dEUwpjb25zdWwvS1NNCmNvbnN1bGFyL0sKY29uc3VsYXRlL1NNCmNvbnN1bHNoaXAvTQpjb25zdWx0L0dTRApjb25zdWx0YW5jeS9TTQpjb25zdWx0YW50L01TCmNvbnN1bHRhdGlvbi9NUwpjb25zdWx0YXRpdmUKY29uc3VtYWJsZS9TTQpjb25zdW1lL0JEUlNaRwpjb25zdW1lZC9VCmNvbnN1bWVyL00KY29uc3VtZXJpc20vTQpjb25zdW1lcmlzdC9NUwpjb25zdW1tYXRlL1lHTlhEUwpjb25zdW1tYXRlZC9VCmNvbnN1bXB0aW9uL00KY29uc3VtcHRpdmUvU00KY29udApjb250YWN0L0FTREcKY29udGFjdGFibGUKY29udGFnaW9uL01TCmNvbnRhZ2lvdXMvUFkKY29udGFnaW91c25lc3MvTQpjb250YWluL1NCTERSWkcKY29udGFpbmVyL00KY29udGFpbmVyaXphdGlvbi9NCmNvbnRhaW5lcml6ZS9EU0cKY29udGFpbm1lbnQvTQpjb250YW1pbmFudC9TTQpjb250YW1pbmF0ZS9BQ0RTRwpjb250YW1pbmF0ZWQvVQpjb250YW1pbmF0aW9uL0NNCmNvbnRhbWluYXRvci9TTQpjb250ZApjb250ZW1uL1NERwpjb250ZW1wbGF0ZS9EU0dOVgpjb250ZW1wbGF0aW9uL00KY29udGVtcGxhdGl2ZS9TTVkKY29udGVtcG9yYW5laXR5L00KY29udGVtcG9yYW5lb3VzL1kKY29udGVtcHQvTQpjb250ZW1wdGlibGUKY29udGVtcHRpYmx5CmNvbnRlbXB0dW91cy9ZUApjb250ZW1wdHVvdXNuZXNzL00KY29udGVuZGVyL01TCmNvbnRlbnQvRVNMTURHCmNvbnRlbnRlZC9FWQpjb250ZW50ZWRuZXNzL00KY29udGVudGlvbi9TTQpjb250ZW50aW91cy9ZUApjb250ZW50aW91c25lc3MvTQpjb250ZW50bHkKY29udGVudG1lbnQvRU0KY29udGVybWlub3VzL1kKY29udGVzdGFibGUvSQpjb250ZXN0YW50L01TCmNvbnRlc3RlZC9VCmNvbnRleHR1YWxpemF0aW9uCmNvbnRleHR1YWxpemUvRFNHCmNvbnRpZ3VpdHkvTQpjb250aWd1b3VzL1kKY29udGluZW5jZS9JTQpjb250aW5lbnQvU00KY29udGluZW50YWwvU00KY29udGluZ2VuY3kvU00KY29udGluZ2VudC9TTVkKY29udGludWEKY29udGludWFsL1kKY29udGludWFuY2UvRU1TCmNvbnRpbnVhdGlvbi9FTVMKY29udGludWUvRUdEUwpjb250aW51aXR5L0VTTQpjb250aW51b3VzL0VZCmNvbnRpbnV1bS9NCmNvbnRvcnQvR0QKY29udG9ydGlvbi9NUwpjb250b3J0aW9uaXN0L1NNCmNvbnRyYWJhbmQvTQpjb250cmFiYXNzb29uL1MKY29udHJhY2VwdGlvbi9NCmNvbnRyYWNlcHRpdmUvU00KY29udHJhY3QvTURHCmNvbnRyYWN0aWJsZQpjb250cmFjdGlsZQpjb250cmFjdGlsaXR5CmNvbnRyYWN0aW9uL1MKY29udHJhY3R1YWwvWQpjb250cmFkaWN0L1NERwpjb250cmFkaWN0aW9uL1NNCmNvbnRyYWRpY3RvcnkKY29udHJhZGlzdGluY3Rpb24vTVMKY29udHJhZmxvdy9TCmNvbnRyYWlsL01TCmNvbnRyYWluZGljYXRlL0dOWERTCmNvbnRyYWluZGljYXRpb24vTQpjb250cmFsdG8vU00KY29udHJhcHRpb24vU00KY29udHJhcHVudGFsL1kKY29udHJhcmlhbi9TTQpjb250cmFyaWFuaXNtCmNvbnRyYXJpZXR5L00KY29udHJhcmlseQpjb250cmFyaW5lc3MvTQpjb250cmFyaXdpc2UKY29udHJhcnkvUFNNCmNvbnRyYXN0L01ER1MKY29udHJhdmVuZS9HRFMKY29udHJhdmVudGlvbi9TTQpjb250cmV0ZW1wcy9NCmNvbnRyaWJ1dGUvWEdORApjb250cmlidXRpb24vTQpjb250cmlidXRvci9NUwpjb250cmlidXRvcnkKY29udHJpdGlvbi9NCmNvbnRyaXZhbmNlL01TCmNvbnRyaXZlL1pHRFJTCmNvbnRyaXZlci9NCmNvbnRyb2wncwpjb250cm9sL0NTCmNvbnRyb2xsYWJsZS9VCmNvbnRyb2xsZWQvVUMKY29udHJvbGxlci9NUwpjb250cm9sbGluZy9DCmNvbnRyb3ZlcnNpYWwvWQpjb250cm92ZXJzeS9TTQpjb250cm92ZXJ0L0RTRwpjb250cm92ZXJ0aWJsZS9JCmNvbnR1bWFjaW91cy9ZCmNvbnR1bWFjeS9NCmNvbnR1bWVsaW91cwpjb250dW1lbHkvU00KY29udHVzZS9YRFNHTgpjb250dXNpb24vTQpjb251bmRydW0vU00KY29udXJiYXRpb24vTVMKY29udmFsZXNjZS9EU0cKY29udmFsZXNjZW5jZS9NUwpjb252YWxlc2NlbnQvU00KY29udmVjdGlvbi9NCmNvbnZlY3Rpb25hbApjb252ZWN0aXZlCmNvbnZlY3Rvci9TCmNvbnZlbmUvQURTRwpjb252ZW5lci9NUwpjb252ZW5pZW5jZS9JTVMKY29udmVuaWVudC9JWQpjb252ZW50L1NNCmNvbnZlbnRpY2xlL01TCmNvbnZlbnRpb24vU00KY29udmVudGlvbmFsL1VZCmNvbnZlbnRpb25hbGl0eS9VTQpjb252ZW50aW9uYWxpemUvR0RTCmNvbnZlbnRpb25lZXIvUwpjb252ZXJnZW5jZS9NUwpjb252ZXJnZW50CmNvbnZlcnNhbnQKY29udmVyc2F0aW9uL01TCmNvbnZlcnNhdGlvbmFsL1kKY29udmVyc2F0aW9uYWxpc3QvU00KY29udmVyc2UvWQpjb252ZXJ0J3MKY29udmVydC9BR1NECmNvbnZlcnRlZC9VCmNvbnZlcnRlci9TTQpjb252ZXJ0aWJpbGl0eS9NCmNvbnZlcnRpYmxlL1NNCmNvbnZleC9ZCmNvbnZleGl0eS9NCmNvbnZleS9TQkRHCmNvbnZleWFuY2UvTUdTCmNvbnZleW9yL01TCmNvbnZpY3QvR1NNRApjb252aWN0aW9uL01TCmNvbnZpbmNlL0dEUwpjb252aW5jZWQvVQpjb252aW5jaW5nL1VZCmNvbnZpdmlhbC9ZCmNvbnZpdmlhbGl0eS9NCmNvbnZva2UvRFNHCmNvbnZvbHV0ZWQKY29udm9sdXRpb24vTVMKY29udm95L1NNREcKY29udnVsc2UvR05WWERTCmNvbnZ1bHNpb24vTQpjb252dWxzaXZlL1kKY29ueS9NCmNvby9HU01ECmNvb2sncwpjb29rL0FER1MKY29va2Jvb2svTVMKY29va2VkL1UKY29va2VyL1NNCmNvb2tlcnkvU00KY29va2hvdXNlL1MKY29va2llL1NNCmNvb2tpbmcvTQpjb29rb3V0L1NNCmNvb2t3YXJlL1NNCmNvb2wvTURSWVpUR1BTCmNvb2xhbnQvU00KY29vbGVyL00KY29vbGllL1NNCmNvb2xuZXNzL00KY29vbi9NUyEKY29vbnNraW4vTVMKY29vcC9NRFJaR1MKY29vcGVyL01ERwpjb29wZXJhZ2UvTQpjb29wZXJhdGUvRFNHTlYKY29vcGVyYXRpb24vTQpjb29wZXJhdGl2ZS9QTVlTCmNvb3BlcmF0aXZlbmVzcy9NCmNvb3BlcmF0b3IvU00KY29vcmRpbmF0ZS9EU01ZR04KY29vcmRpbmF0ZWQvVQpjb29yZGluYXRpb24vTQpjb29yZGluYXRvci9NUwpjb290L01TCmNvb3RpZS9TTQpjb3AvR0pTTUQKY29wYWNldGljCmNvcGF5L00KY29wZS9NUwpjb3BpZXIvU00KY29waWxvdC9TTQpjb3BpbmcvTQpjb3Bpb3VzL1BZCmNvcGlvdXNuZXNzL00KY29wcGVkCmNvcHBlci9TTQpjb3BwZXJoZWFkL1NNCmNvcHBlcnBsYXRlL00KY29wcGVyeQpjb3BwaW5nCmNvcHJhL00KY29wc2UvU00KY29wdGVyL1NNCmNvcHVsYS9TTQpjb3B1bGF0ZS9HTlZEUwpjb3B1bGF0aW9uL00KY29wdWxhdGl2ZS9TTQpjb3B5J3MKY29weS9BRFNHCmNvcHlib29rL1NNCmNvcHljYXQvTVMKY29weWNhdHRlZApjb3B5Y2F0dGluZwpjb3B5aXN0L01TCmNvcHlsZWZ0CmNvcHlyaWdodC9HU01ECmNvcHl3cml0ZXIvTVMKY29xdWV0cnkvU00KY29xdWV0dGUvRFNNRwpjb3F1ZXR0aXNoL1kKY29yCmNvcmFjbGUvU00KY29yYWwvU00KY29yYmVsL1NNCmNvcmQvRUFTR0RNCmNvcmRhZ2UvTQpjb3JkaWFsL1NNWQpjb3JkaWFsaXR5L00KY29yZGlsbGVyYS9NUwpjb3JkaXRlL00KY29yZGxlc3MKY29yZG9uL1NNREcKY29yZG92YW4vTQpjb3JkdXJveS9NUwpjb3JkdXJveXMvTQpjb3JlL01aR0RSUwpjb3JlbGlnaW9uaXN0L1MKY29yZXIvTQpjb3Jlc3BvbmRlbnQvTVMKY29yZ2kvU00KY29yaWFuZGVyL00KY29yaydzCmNvcmsvVURHUwpjb3JrYWdlCmNvcmtlci9TTQpjb3Jrc2NyZXcvU01ERwpjb3JtL01TCmNvcm1vcmFudC9TTQpjb3JuL01EUlpHUwpjb3JuYmFsbC9NUwpjb3JuYnJlYWQvTQpjb3JuY29iL01TCmNvcm5jcmFrZS9TCmNvcm5lYS9TTQpjb3JuZWFsCmNvcm5lci9HTUQKY29ybmVyc3RvbmUvU00KY29ybmV0L1NNCmNvcm5maWVsZC9TCmNvcm5mbGFrZXMvTQpjb3JuZmxvdXIKY29ybmZsb3dlci9TTQpjb3JuaWNlL01TCmNvcm5pbHkKY29ybmluZXNzL00KY29ybm1lYWwvTQpjb3Jucm93L01ER1MKY29ybnN0YWxrL1NNCmNvcm5zdGFyY2gvTQpjb3JudWNvcGlhL01TCmNvcm55L1BSVApjb3JvbGxhL01TCmNvcm9sbGFyeS9TTQpjb3JvbmEvU00KY29yb25hbC9NUwpjb3JvbmFyeS9TTQpjb3JvbmF0aW9uL1NNCmNvcm9uZXIvTVMKY29yb25ldC9NUwpjb3JwCmNvcnBvcmEKY29ycG9yYWwvU00KY29ycG9yYXRlL1hZTgpjb3Jwb3JhdGlvbi9JTQpjb3Jwb3JhdGlzbQpjb3Jwb3JlYWwvWQpjb3Jwb3JlYWxpdHkvTQpjb3Jwcy9NUwpjb3Jwc2UvTQpjb3Jwc21hbi9NCmNvcnBzbWVuCmNvcnB1bGVuY2UvTQpjb3JwdWxlbnQKY29ycHVzL00KY29ycHVzY2xlL01TCmNvcnB1c2N1bGFyCmNvcnIKY29ycmFsL1NNCmNvcnJhbGxlZApjb3JyYWxsaW5nCmNvcnJlY3QvRFJZVEdWU0JQCmNvcnJlY3RlZC9VCmNvcnJlY3Rpb24vU00KY29ycmVjdGlvbmFsCmNvcnJlY3RpdmUvU00KY29ycmVjdG5lc3MvSU0KY29ycmVjdG9yCmNvcnJlbGF0ZS9YRFNNR05WCmNvcnJlbGF0ZWQvVQpjb3JyZWxhdGlvbi9NCmNvcnJlbGF0aXZlL01TCmNvcnJlc3BvbmQvU0RHCmNvcnJlc3BvbmRlbmNlL1NNCmNvcnJlc3BvbmRlbnQvU00KY29ycmVzcG9uZGluZy9ZCmNvcnJpZG9yL1NNCmNvcnJpZS9TCmNvcnJvYm9yYXRlL0dOVkRTWApjb3Jyb2JvcmF0ZWQvVQpjb3Jyb2JvcmF0aW9uL00KY29ycm9ib3JhdG9yL1NNCmNvcnJvYm9yYXRvcnkKY29ycm9kZS9HRFMKY29ycm9zaW9uL00KY29ycm9zaXZlL1NNWQpjb3JydWdhdGUvR05YRFMKY29ycnVnYXRpb24vTQpjb3JydXB0L0RSWVBTVEcKY29ycnVwdGliaWxpdHkvSU0KY29ycnVwdGlibGUvSQpjb3JydXB0aW9uL01TCmNvcnJ1cHRuZXNzL00KY29yc2FnZS9NUwpjb3JzYWlyL01TCmNvcnNldC9TR01ECmNvcnRlZ2UvTVMKY29ydGV4L00KY29ydGljYWwKY29ydGljZXMKY29ydGlzb25lL00KY29ydW5kdW0vTQpjb3J1c2NhdGUvR05EUwpjb3J1c2NhdGlvbi9NCmNvcnZldHRlL1NNCmNvcy9NCmNvc2gvRFNHCmNvc2lnbi9aR1NEUgpjb3NpZ25hdG9yeS9TTQpjb3NpZ25lci9NCmNvc2luZS9TTQpjb3NtZXRpYy9TTQpjb3NtZXRpY2FsbHkKY29zbWV0aWNpYW4vTVMKY29zbWV0b2xvZ2lzdC9NUwpjb3NtZXRvbG9neS9NCmNvc21pYwpjb3NtaWNhbGx5CmNvc21vZ29uaXN0L1NNCmNvc21vZ29ueS9TTQpjb3Ntb2xvZ2ljYWwKY29zbW9sb2dpc3QvU00KY29zbW9sb2d5L1NNCmNvc21vbmF1dC9TTQpjb3Ntb3BvbGl0YW4vTVMKY29zbW9wb2xpdGFuaXNtL00KY29zbW9zL01TCmNvc3BsYXkKY29zcG9uc29yL0dTTUQKY29zc2V0L1NHRApjb3NzZXR0ZWQKY29zc2V0dGluZwpjb3N0L01EWUdTSgpjb3N0YXIvU00KY29zdGFycmVkCmNvc3RhcnJpbmcKY29zdGxpbmVzcy9NCmNvc3RseS9QVFIKY29zdHVtZS9NWkdEUlMKY29zdHVtZXIvTQpjb3N0dW1pZXIvUwpjb3QvU00KY290YW5nZW50L01TCmNvdGUvTVMKY290ZXJpZS9NUwpjb3Rlcm1pbm91cwpjb3RpbGxpb24vU00KY290dGFnZS9NWkdSUwpjb3R0YWdlci9NCmNvdHRhci9TTQpjb3R0ZXIvU00KY290dG9uL1NHTUQKY290dG9ubW91dGgvTQpjb3R0b25tb3V0aHMKY290dG9uc2VlZC9NUwpjb3R0b250YWlsL01TCmNvdHRvbndvb2QvU00KY290dG9ueQpjb3R5bGVkb24vTVMKY291Y2gvTURTRwpjb3VjaGV0dGUvUwpjb3VnYXIvU00KY291Z2gvTURHCmNvdWdocwpjb3VsZApjb3VsZCd2ZQpjb3VsZG4ndApjb3VsZWUvU00KY291bGlzCmNvdWxvbWIvTVMKY291bmNpbC9NUwpjb3VuY2lsbWFuL00KY291bmNpbG1lbgpjb3VuY2lsb3IvTVMKY291bmNpbHBlcnNvbi9TTQpjb3VuY2lsd29tYW4vTQpjb3VuY2lsd29tZW4KY291bnNlbC9KTURHUwpjb3Vuc2Vsb3IvTVMKY291bnQvRUFTTURHCmNvdW50YWJsZS9VCmNvdW50YWJseQpjb3VudGRvd24vTVMKY291bnRlZC9VCmNvdW50ZW5hbmNlJ3MKY291bnRlbmFuY2UvRUdEUwpjb3VudGVyL0VNUwpjb3VudGVyYWN0L1NHVkQKY291bnRlcmFjdGlvbi9NUwpjb3VudGVyYXJndW1lbnQvUwpjb3VudGVyYXR0YWNrL0dNRFMKY291bnRlcmJhbGFuY2UvTUdEUwpjb3VudGVyYmxhc3QvUwpjb3VudGVyY2xhaW0vR1NNRApjb3VudGVyY2xvY2t3aXNlCmNvdW50ZXJjdWx0dXJlL1NNCmNvdW50ZXJlZApjb3VudGVyZXNwaW9uYWdlL00KY291bnRlcmV4YW1wbGUvUwpjb3VudGVyZmFjdHVhbApjb3VudGVyZmVpdC9aR01EUlMKY291bnRlcmZlaXRlci9NCmNvdW50ZXJmb2lsL01TCmNvdW50ZXJpbmcKY291bnRlcmluc3VyZ2VuY3kvU00KY291bnRlcmludGVsbGlnZW5jZS9NCmNvdW50ZXJtYW4vTQpjb3VudGVybWFuZC9HTURTCmNvdW50ZXJtZWFzdXJlL1NNCmNvdW50ZXJtZWxvZHkvUwpjb3VudGVybWVuCmNvdW50ZXJtb3ZlL1MKY291bnRlcm9mZmVuc2l2ZS9TTQpjb3VudGVyb2ZmZXIvU00KY291bnRlcnBhbmUvU00KY291bnRlcnBhcnQvU00KY291bnRlcnBldGl0aW9uCmNvdW50ZXJwb2ludC9NREdTCmNvdW50ZXJwb2lzZS9NR0RTCmNvdW50ZXJwcm9kdWN0aXZlCmNvdW50ZXJyZXZvbHV0aW9uL1NNCmNvdW50ZXJyZXZvbHV0aW9uYXJ5L1NNCmNvdW50ZXJzaWduL0dTTUQKY291bnRlcnNpZ25hdHVyZS9NUwpjb3VudGVyc2luay9HU00KY291bnRlcnNweS9TTQpjb3VudGVyc3Vuawpjb3VudGVydGVub3IvTVMKY291bnRlcnZhaWwvR1NECmNvdW50ZXJ3ZWlnaHQvTVMKY291bnRlc3MvTVMKY291bnRsZXNzCmNvdW50cmlmaWVkCmNvdW50cnkvU00KY291bnRyeW1hbi9NCmNvdW50cnltZW4KY291bnRyeXNpZGUvTVMKY291bnRyeXdpZGUKY291bnRyeXdvbWFuL00KY291bnRyeXdvbWVuCmNvdW50eS9TTQpjb3VudHl3aWRlCmNvdXAncwpjb3VwL0FTCmNvdXBlL1NNCmNvdXBsZSdzCmNvdXBsZS9VQ0dTRApjb3VwbGV0L01TCmNvdXBsaW5nL1NNCmNvdXBvbi9TTQpjb3VyYWdlL00KY291cmFnZW91cy9ZUApjb3VyYWdlb3VzbmVzcy9NCmNvdXJnZXR0ZS9TCmNvdXJpZXIvTURTRwpjb3Vyc2UvRURHTVMKY291cnNlYm9vay9TCmNvdXJzZXIvTVMKY291cnNld29yawpjb3VydC9TTURZRwpjb3VydGVvdXMvRVkKY291cnRlb3VzbmVzcy9NCmNvdXJ0ZXNhbi9TTQpjb3VydGVzeS9FU00KY291cnRob3VzZS9NUwpjb3VydGllci9TTQpjb3VydGxpbmVzcy9NCmNvdXJ0bHkvUFJUCmNvdXJ0cm9vbS9NUwpjb3VydHNoaXAvTVMKY291cnR5YXJkL01TCmNvdXNjb3VzL00KY291c2luL1NNCmNvdXR1cmUvTQpjb3V0dXJpZXIvTVMKY292ZS9NUwpjb3Zlbi9TTQpjb3ZlbmFudC9NRFNHCmNvdmVyJ3MKY292ZXIvQUVVR0RTCmNvdmVyYWdlL00KY292ZXJhbGwvTVMKY292ZXJpbmcncwpjb3ZlcmluZ3MKY292ZXJsZXQvTVMKY292ZXJ0L1NQTVkKY292ZXJ0bmVzcy9NCmNvdmV0L1NERwpjb3ZldG91cy9ZUApjb3ZldG91c25lc3MvTQpjb3ZleS9TTQpjb3cvWkdTTURSCmNvd2FyZC9TTVkKY293YXJkaWNlL00KY293YXJkbGluZXNzL00KY293YmVsbC9NUwpjb3diaXJkL01TCmNvd2JveS9TTQpjb3djYXRjaGVyL01TCmNvd2VyL0RHCmNvd2dpcmwvTVMKY293aGFuZC9NUwpjb3doZXJkL01TCmNvd2hpZGUvTVMKY293bC9NR1NKCmNvd2xpY2svTVMKY293bGluZy9NCmNvd21hbi9NCmNvd21lbgpjb3dvcmtlci9NUwpjb3dwYXQvUwpjb3dwb2tlL01TCmNvd3BveC9NCmNvd3B1bmNoZXIvU00KY293cmllL1NNCmNvd3NoZWQvUwpjb3dzbGlwL1NNCmNveC9HRFMKY294Y29tYi9NUwpjb3hzd2Fpbi9NUwpjb3kvVFBSWQpjb3luZXNzL00KY295b3RlL1NNCmNveXB1L1NNCmNvemVuL1NERwpjb3plbmFnZS9NCmNvemlseQpjb3ppbmVzcy9NCmNvenkvUlNNVFAKY3BkCmNwbApjcHMKY3JhYi9NUwpjcmFiYmVkCmNyYWJiZXIvU00KY3JhYmJpbHkKY3JhYmJpbmVzcy9NCmNyYWJiaW5nCmNyYWJieS9QUlQKY3JhYmdyYXNzL00KY3JhYmxpa2UKY3JhYndpc2UKY3JhY2svU01EUllaR0oKY3JhY2tkb3duL01TCmNyYWNrZXIvTQpjcmFja2VyamFjay9NUwpjcmFja2hlYWQvTVMKY3JhY2tsZS9EU0pNRwpjcmFja2xpbmcvTQpjcmFja3BvdC9NUwpjcmFja3VwL1NNCmNyYWRsZS9EU01HCmNyYWZ0L1NNREcKY3JhZnRpbHkKY3JhZnRpbmVzcy9NCmNyYWZ0c21hbi9NCmNyYWZ0c21hbnNoaXAvTQpjcmFmdHNtZW4KY3JhZnRzcGVvcGxlCmNyYWZ0c3dvbWFuL00KY3JhZnRzd29tZW4KY3JhZnR5L1JUUApjcmFnL01TCmNyYWdnaW5lc3MvTQpjcmFnZ3kvUlBUCmNyYW0vUwpjcmFtbWVkCmNyYW1tZXIvUwpjcmFtbWluZwpjcmFtcC9TTURHCmNyYW1waW5nL00KY3JhbXBvbi9TTQpjcmFuYmVycnkvU00KY3JhbmUvRFNNRwpjcmFuaWFsCmNyYW5pdW0vU00KY3JhbmsvU01ERwpjcmFua2Nhc2UvU00KY3JhbmtpbHkKY3JhbmtpbmVzcy9NCmNyYW5rc2hhZnQvTVMKY3Jhbmt5L1BSVApjcmFubnkvRFNNCmNyYXAvTVMKY3JhcGUvU00KY3JhcHBlZApjcmFwcGVyL1MKY3JhcHBpZS9SU01UCmNyYXBwaW5nCmNyYXBweQpjcmFwcy9NCmNyYXBzaG9vdGVyL01TCmNyYXNoL01EU0cKY3Jhc3MvUllUUApjcmFzc25lc3MvTQpjcmF0ZS9EUlNNWkcKY3JhdGVyL01ERwpjcmF2YXQvU00KY3JhdmUvRFNHSgpjcmF2ZW4vU01ZUApjcmF2ZW5uZXNzL00KY3JhdmluZy9NCmNyYXcvTVMKY3Jhd2RhZC9TTQpjcmF3bC9TTURSWkcKY3Jhd2xlci9NCmNyYXdsc3BhY2UvU00KY3Jhd2x5L1RSU00KY3JheS9TCmNyYXlmaXNoL01TCmNyYXlvbGEvUwpjcmF5b24vR1NNRApjcmF6ZS9EU01HCmNyYXppbHkKY3JhemluZXNzL00KY3JhenkvUFJTTVQKY3JlYWsvU01ERwpjcmVha2lseQpjcmVha2luZXNzL00KY3JlYWt5L1JQVApjcmVhbS9TTURSWkcKY3JlYW1lci9NCmNyZWFtZXJ5L1NNCmNyZWFtaWx5CmNyZWFtaW5lc3MvTQpjcmVhbXkvUlBUCmNyZWFzZS9JQ0dNU0QKY3JlYXRlL0tBRFNHTlYKY3JlYXRpb24ncy9LCmNyZWF0aW9uL0FTTQpjcmVhdGlvbmlzbS9TTQpjcmVhdGlvbmlzdC9TTQpjcmVhdGl2ZS9TTVlQCmNyZWF0aXZlbmVzcy9NCmNyZWF0aXZpdHkvTQpjcmVhdG9yL01TCmNyZWF0dXJlL1NNCmNyZWNoZS9TTQpjcmVkCmNyZWRlbmNlL00KY3JlZGVudGlhbC9TR01ECmNyZWRlbnphL1NNCmNyZWRpYmlsaXR5L0lNCmNyZWRpYmxlL0kKY3JlZGlibHkvSQpjcmVkaXQvRUdTQk1ECmNyZWRpdGFibHkvRQpjcmVkaXRvci9TTQpjcmVkaXR3b3J0aHkvUApjcmVkby9TTQpjcmVkdWxpdHkvSU0KY3JlZHVsb3VzL0lZCmNyZWR1bG91c25lc3MvTQpjcmVlZC9TTQpjcmVlay9TTQpjcmVlbC9TTQpjcmVlcC9TTVJaRwpjcmVlcGVyL00KY3JlZXBpbHkKY3JlZXBpbmVzcy9NCmNyZWVweS9UUFIKY3JlbWFpbnMvTQpjcmVtYXRlL0dORFNYCmNyZW1hdGlvbi9NCmNyZW1hdG9yaWEKY3JlbWF0b3JpdW0vTVMKY3JlbWF0b3J5L1NNCmNyZW1lL1NNCmNyZW5lbGF0ZS9YR05EUwpjcmVuZWxhdGlvbi9NCmNyZW9sZS9TTQpjcmVvc290ZS9NR0RTCmNyZXBlL1NNCmNyZXB0CmNyZXB1c2N1bGFyCmNyZXNjZW5kby9DU00KY3Jlc2NlbnQvTVMKY3Jlc3MvTQpjcmVzdC9TTURHCmNyZXN0ZmFsbGVuCmNyZXN0bGVzcwpjcmV0YWNlb3VzCmNyZXRpbi9TTQpjcmV0aW5pc20vTQpjcmV0aW5vdXMKY3JldG9ubmUvTQpjcmV2YXNzZS9TTQpjcmV2aWNlL01TCmNyZXcvTURHUwpjcmV3ZWwvTQpjcmV3ZWx3b3JrL00KY3Jld21hbi9NCmNyZXdtZW4KY3JpYi9NUwpjcmliYmFnZS9NCmNyaWJiZWQKY3JpYmJlci9NUwpjcmliYmluZwpjcmljay9TTURHCmNyaWNrZXQvTVJTWkcKY3JpY2tldGVyL00KY3JpZXIvTQpjcmlrZXkKY3JpbWUvU00KY3JpbWluYWwvTVlTCmNyaW1pbmFsaXR5L00KY3JpbWluYWxpemUvQ0dEUwpjcmltaW5vbG9naXN0L01TCmNyaW1pbm9sb2d5L00KY3JpbXAvU01ERwpjcmltc29uL1NNREcKY3JpbmdlL0RTTUcKY3JpbmtsZS9EU01HCmNyaW5rbHkvUlQKY3Jpbm9saW5lL1NNCmNyaXBlcwpjcmlwcGxlL0RSU01aRwpjcmlwcGxlci9NCmNyaXBwbGV3YXJlCmNyaXBwbGluZy9ZCmNyaXNlcwpjcmlzaXMvTQpjcmlzcC9TTURSWVRHUApjcmlzcGJyZWFkL1MKY3Jpc3BpbmVzcy9NCmNyaXNwbmVzcy9NCmNyaXNweS9QUlQKY3Jpc3Njcm9zcy9HTURTCmNyaXRlcmlhCmNyaXRlcmlvbi9NCmNyaXRpYy9TTQpjcml0aWNhbC9VWQpjcml0aWNpc20vTVMKY3JpdGljaXplL1pHRFJTCmNyaXRpY2l6ZXIvTQpjcml0aXF1ZS9NR0RTCmNyaXR0ZXIvU00KY3JvYWsvU01ERwpjcm9ha3kvUlQKY3JvY2hldC9TTURSWkcKY3JvY2hldGVyL00KY3JvY2hldGluZy9NCmNyb2NrL1NNRApjcm9ja2VyeS9NCmNyb2NvZGlsZS9TTQpjcm9jdXMvTVMKY3JvZnQvU1JaRwpjcm9pc3NhbnQvTVMKY3JvbmUvU00KY3JvbnkvU00KY3Jvbnlpc20vTQpjcm9vay9TTURHCmNyb29rZWQvUFRSWQpjcm9va2VkbmVzcy9NCmNyb29rbmVjay9TTQpjcm9vbi9TTURSWkcKY3Jvb25lci9NCmNyb3AvTVMKY3JvcGxhbmQvU00KY3JvcHBlZApjcm9wcGVyL01TCmNyb3BwaW5nCmNyb3F1ZXQvTQpjcm9xdWV0dGUvU00KY3Jvc2llci9NUwpjcm9zcydzCmNyb3NzL0FVR1RTRApjcm9zc2Jhci9TTQpjcm9zc2JlYW0vTVMKY3Jvc3Nib25lcy9NCmNyb3NzYm93L1NNCmNyb3NzYm93bWFuL00KY3Jvc3Nib3dtZW4KY3Jvc3NicmVkCmNyb3NzYnJlZWQvU0dNCmNyb3NzY2hlY2svU01ERwpjcm9zc2N1cnJlbnQvTVMKY3Jvc3NjdXQvU00KY3Jvc3NjdXR0aW5nCmNyb3NzZXIKY3Jvc3NmaXJlL01TCmNyb3NzaGF0Y2gvR0RTCmNyb3NzaW5nL1NNCmNyb3NzbHkKY3Jvc3NuZXNzL00KY3Jvc3NvdmVyL01TCmNyb3NzcGF0Y2gvTVMKY3Jvc3NwaWVjZS9TTQpjcm9zc3JvYWQvTVMKY3Jvc3Nyb2Fkcy9NCmNyb3NzdG93bgpjcm9zc3dhbGsvTVMKY3Jvc3N3aW5kL01TCmNyb3Nzd2lzZQpjcm9zc3dvcmQvTVMKY3JvdGNoL01TCmNyb3RjaGV0L1NNCmNyb3RjaGV0eQpjcm91Y2gvR01EUwpjcm91cC9NCmNyb3VwaWVyL00KY3JvdXB5L1pUUgpjcm91dG9uL01TCmNyb3cvTURHUwpjcm93YmFyL01TCmNyb3dkL1NNREcKY3Jvd2RlZC9VCmNyb3dkZnVuZC9TREcKY3Jvd2ZlZXQKY3Jvd2Zvb3QvU00KY3Jvd24vU01ERwpjcm93bmVkL1UKY3J1Y2lhbC9ZCmNydWNpYmxlL1NNCmNydWNpZml4L01TCmNydWNpZml4aW9uL1NNCmNydWNpZm9ybS9TTQpjcnVjaWZ5L0RTRwpjcnVkL00KY3J1ZGR5L1RSCmNydWRlL1JNWVRQCmNydWRlbmVzcy9NCmNydWRpdGVzL00KY3J1ZGl0eS9TTQpjcnVlbC9SWVBUCmNydWVsbmVzcy9NCmNydWVsdHkvU00KY3J1ZXQvU00KY3J1ZnQvU0QKY3J1ZnR5CmNydWlzZS9EUlNNWkcKY3J1aXNlci9NCmNydWxsZXIvTVMKY3J1bWIvU01EWUcKY3J1bWJsZS9NR0RTCmNydW1ibGluZXNzL00KY3J1bWJseS9UUFIKY3J1bWJ5L1RSCmNydW1taW5lc3MvTQpjcnVtbXkvUFRSCmNydW1wZXQvTVMKY3J1bXBsZS9NR0RTCmNydW5jaC9HTURSUwpjcnVuY2hpbmVzcy9NCmNydW5jaHkvVFJQCmNydXBwZXIvTVMKY3J1c2FkZS9NWkdEUlMKY3J1c2FkZXIvTQpjcnVzZS9TTQpjcnVzaC9NRFJTWkcKY3J1c2hlci9NCmNydXNoaW5nL1kKY3J1c3QvU01ERwpjcnVzdGFjZWFuL1NNCmNydXN0YWwKY3J1c3RpbHkKY3J1c3RpbmVzcy9NCmNydXN0eS9UUlAKY3J1dGNoL01TCmNydXgvTVMKY3J5L1pHSkRSU00KY3J5YmFieS9TTQpjcnlvZ2VuaWMvUwpjcnlvZ2VuaWNzL00KY3J5b25pY3MKY3J5b3N1cmdlcnkvTQpjcnlwdC9TTQpjcnlwdGljCmNyeXB0aWNhbGx5CmNyeXB0b2dyYW0vU00KY3J5cHRvZ3JhcGhlci9TTQpjcnlwdG9ncmFwaHkvTQpjcnlzdGFsL1NNCmNyeXN0YWxsaW5lCmNyeXN0YWxsaXphdGlvbi9NCmNyeXN0YWxsaXplL0FEU0cKY3J5c3RhbGxvZ3JhcGhpYwpjcnlzdGFsbG9ncmFwaHkKY3QKY3RuCmN0cgpjdQpjdWIvWkdTTURSCmN1YmJ5aG9sZS9NUwpjdWJlL01TCmN1YmVyL00KY3ViaWMKY3ViaWNhbApjdWJpY2xlL01TCmN1YmlzbS9NCmN1YmlzdC9TTQpjdWJpdC9TTQpjdWJvaWQvUwpjdWNrb2xkL01EU0cKY3Vja29sZHJ5L00KY3Vja29vL1NNCmN1Y3VtYmVyL1NNCmN1ZC9TTQpjdWRkbGUvRFNNRwpjdWRkbHkvVFIKY3VkZ2VsL1NHTURKCmN1ZS9EU01HCmN1ZmYvTURHUwpjdWlzaW5lL1NNCmN1bGluYXJ5CmN1bGwvTURHUwpjdWxtaW5hdGUvWERTR04KY3VsbWluYXRpb24vTQpjdWxvdHRlL1NNCmN1bHBhYmlsaXR5L00KY3VscGFibGUvSQpjdWxwYWJseQpjdWxwcml0L1NNCmN1bHQvTVMKY3VsdGlzbS9NCmN1bHRpc3QvTVMKY3VsdGl2YWJsZQpjdWx0aXZhci9TCmN1bHRpdmF0ZS9CRFNHTgpjdWx0aXZhdGVkL1UKY3VsdGl2YXRpb24vTQpjdWx0aXZhdG9yL01TCmN1bHR1cmFsL1kKY3VsdHVyZS9NR0RTCmN1bHR1cmVkL1UKY3VsdmVydC9NUwpjdW0vU00KY3VtYmVyL1NERwpjdW1iZXJzb21lL1AKY3VtYmVyc29tZW5lc3MvTQpjdW1icm91cwpjdW1pbi9NCmN1bW1lcmJ1bmQvTVMKY3VtbWluZwpjdW11bGF0aXZlL1kKY3VtdWxpCmN1bXVsb25pbWJpCmN1bXVsb25pbWJ1cy9NCmN1bXVsdXMvTQpjdW5laWZvcm0vTQpjdW5uaWxpbmd1cy9NCmN1bm5pbmcvTVJZVApjdW50L01TIQpjdXAvU00KY3VwYm9hcmQvU00KY3VwY2FrZS9NUwpjdXBmdWwvU00KY3VwaWQvU00KY3VwaWRpdHkvTQpjdXBvbGEvU01ECmN1cHBhL1MKY3VwcGVkCmN1cHBpbmcKY3VwcmljCmN1ci9TTVkKY3VyYWJpbGl0eS9NCmN1cmFjYW8KY3VyYWN5L1NNCmN1cmFyZS9NCmN1cmF0ZS9EU01HVgpjdXJhdGl2ZS9NUwpjdXJhdG9yL0tNUwpjdXJhdG9yaWFsCmN1cmIvTURHUwpjdXJiaW5nL00KY3VyYnNpZGUKY3VyYnN0b25lL1NNCmN1cmQvTVMKY3VyZGxlL0RTRwpjdXJlJ3MKY3VyZS9LWkdCRFJTCmN1cmVkL1UKY3VyZXIvS00KY3VyZXR0YWdlL00KY3VyZmV3L1NNCmN1cmlhL00KY3VyaWFlCmN1cmllL1NNCmN1cmlvL1NNCmN1cmlvc2l0eS9TTQpjdXJpb3VzL1lQCmN1cmlvdXNuZXNzL00KY3VyaXVtL00KY3VybCdzCmN1cmwvVURHUwpjdXJsZXIvU00KY3VybGV3L1NNCmN1cmxpY3VlL0RTTUcKY3VybGluZXNzL00KY3VybGluZy9NCmN1cmx5L1JQVApjdXJtdWRnZW9uL01ZUwpjdXJyYW50L01TCmN1cnJlbmN5L1NNCmN1cnJlbnQncwpjdXJyZW50L0ZBWQpjdXJyZW50cwpjdXJyaWN1bGEKY3VycmljdWxhcgpjdXJyaWN1bHVtL00KY3VycnkvRFNNRwpjdXJyeWNvbWIvU0dNRApjdXJzZS9EU01HVgpjdXJzZWQvWQpjdXJzaXZlJ3MKY3Vyc2l2ZS9FQVkKY3Vyc29yL1NNCmN1cnNvcmlseQpjdXJzb3JpbmVzcy9NCmN1cnNvcnkvUApjdXJ0L1JZVFAKY3VydGFpbC9HRFNMCmN1cnRhaWxtZW50L1NNCmN1cnRhaW4vR01EUwpjdXJ0bmVzcy9NCmN1cnRzeS9HRFNNCmN1cnZhY2VvdXMvUApjdXJ2YWNlb3VzbmVzcy9NCmN1cnZhdHVyZS9TTQpjdXJ2ZS9EU01HCmN1cnZ5L1JUCmN1c2hpb24vTURTRwpjdXNoeS9SVApjdXNwL01TCmN1c3BpZC9TTQpjdXNwaWRvci9TTQpjdXNzJ3MKY3Vzcy9GRUdTRApjdXNzZWQvUFkKY3VzdGFyZC9NUwpjdXN0b2RpYWwKY3VzdG9kaWFuL01TCmN1c3RvZGlhbnNoaXAvTQpjdXN0b2R5L00KY3VzdG9tL1NaTVIKY3VzdG9tYXJpbHkKY3VzdG9tYXJ5L1UKY3VzdG9tZXIvTQpjdXN0b21ob3VzZS9TTQpjdXN0b21pemF0aW9uL00KY3VzdG9taXplL0RTRwpjdXQvVFNNUgpjdXRhbmVvdXMKY3V0YXdheS9NUwpjdXRiYWNrL01TCmN1dGUvWVAKY3V0ZW5lc3MvTQpjdXRlc3kvVFIKY3V0ZXkvUwpjdXRpY2xlL01TCmN1dGllL1NNCmN1dGxhc3MvTVMKY3V0bGVyL1NNCmN1dGxlcnkvTQpjdXRsZXQvU00KY3V0b2ZmL1NNCmN1dG91dC9TTQpjdXR0ZXIvU00KY3V0dGhyb2F0L1NNCmN1dHRpbmcvTVlTCmN1dHRsZWZpc2gvTVMKY3V0dXAvU00KY3V0d29ybS9NUwpjdwpjd3QKY3lhbi9NCmN5YW5pZGUvTQpjeWJlcmJ1bGx5L1NNCmN5YmVyY2FmZS9TCmN5YmVybmV0aWMvUwpjeWJlcm5ldGljcy9NCmN5YmVycHVuay9TTQpjeWJlcnNleApjeWJlcnNwYWNlL01TCmN5Ym9yZy9TTQpjeWNsYW1lbi9NUwpjeWNsZS9BRFNNRwpjeWNsaWMKY3ljbGljYWwvWQpjeWNsaXN0L01TCmN5Y2xvbWV0ZXIvTVMKY3ljbG9uZS9NUwpjeWNsb25pYwpjeWNsb3BlZGlhL01TCmN5Y2xvcGVzCmN5Y2xvcHMvTQpjeWNsb3Ryb24vTVMKY3lnbmV0L01TCmN5bGluZGVyL01TCmN5bGluZHJpY2FsCmN5bWJhbC9NUwpjeW1iYWxpc3QvTVMKY3luaWMvU00KY3luaWNhbC9ZCmN5bmljaXNtL00KY3lub3N1cmUvTVMKY3lwcmVzcy9NUwpjeXN0L01TCmN5c3RpYwpjeXN0aXRpcwpjeXRva2luZXMKY3l0b2xvZ2lzdC9TTQpjeXRvbG9neS9NCmN5dG9wbGFzbS9NCmN5dG9wbGFzbWljCmN5dG9zaW5lL00KY3phci9NUwpjemFyaW5hL1NNCmN6YXJpc20KY3phcmlzdC9TTQpkJ0FyZXp6by9NCmQnRXN0YWluZy9NCmQvTlhHSgpkQgpkYWIvU00KZGFiYmVkCmRhYmJlci9NUwpkYWJiaW5nCmRhYmJsZS9aR0RSUwpkYWJibGVyL00KZGFjZS9TTQpkYWNoYS9NUwpkYWNoc2h1bmQvTVMKZGFjdHlsL01TCmRhY3R5bGljL01TCmRhZC9TTQpkYWRhaXNtL00KZGFkYWlzdC9NUwpkYWRkeS9TTQpkYWRvL00KZGFkb2VzCmRhZW1vbi9NUwpkYWVtb25pYwpkYWZmaW5lc3MvTQpkYWZmb2RpbC9TTQpkYWZmeS9QVFIKZGFmdC9QVFJZCmRhZnRuZXNzL00KZGFnL1MKZGFnZ2VyL01TCmRhZ28vUwpkYWdvZXMKZGFndWVycmVvdHlwZS9EU01HCmRhaGxpYS9NUwpkYWlsaW5lc3MvTQpkYWlseS9QU00KZGFpbnRpbHkKZGFpbnRpbmVzcy9NCmRhaW50eS9SU01UUApkYWlxdWlyaS9NUwpkYWlyeS9HU00KZGFpcnlpbmcvTQpkYWlyeW1haWQvTVMKZGFpcnltYW4vTQpkYWlyeW1lbgpkYWlyeXdvbWFuL00KZGFpcnl3b21lbgpkYWlzL01TCmRhaXN5L1NNCmRhbGUvU00KZGFsbGlhbmNlL01TCmRhbGxpZXIvTQpkYWxseS9aR0RSUwpkYWxtYXRpYW4vTVMKZGFtL1NNCmRhbWFnZS9NR0RTCmRhbWFnZWFibGUKZGFtYWdlZC9VCmRhbWFnZXMvTQpkYW1hc2svTURHUwpkYW1lL1NNCmRhbW1lZApkYW1taW5nCmRhbW1pdApkYW1uL1NCR01ECmRhbW5hYmx5CmRhbW5hdGlvbi9NCmRhbW5lZC9UCmRhbXAvU1BYWlRHTUROUlkKZGFtcGVuL1pHRFIKZGFtcGVuZXIvTQpkYW1wZXIvTQpkYW1wbmVzcy9NCmRhbXNlbC9NUwpkYW1zZWxmbHkvU00KZGFtc29uL01TCmRhbmNlL01aR0RSUwpkYW5jZXIvTQpkYW5jaW5nL00KZGFuZGVsaW9uL1NNCmRhbmRlci9NCmRhbmRpZnkvR0RTCmRhbmRsZS9HRFMKZGFuZHJ1ZmYvTQpkYW5keS9UUlNNCmRhbmcvU1pHRFIKZGFuZ2VyL00KZGFuZ2Vyb3VzL1kKZGFuZ2xlL1pHRFJTCmRhbmdsZXIvTQpkYW5pc2gvTVMKZGFuay9QVFJZCmRhbmtuZXNzL00KZGFuc2V1c2UvTVMKZGFwcGVyL1RSCmRhcHBsZS9NR0RTCmRhcmUvRFJTTVpHCmRhcmVkZXZpbC9NUwpkYXJlZGV2aWxyeS9NCmRhcmVyL00KZGFyZXNheQpkYXJpbmcvTVkKZGFyay9QWFRNTlJZCmRhcmtlbi9aR0RSCmRhcmtlbmVyL00KZGFya2llL1MKZGFya25lc3MvTQpkYXJrcm9vbS9NUwpkYXJsaW5nL01TCmRhcm4vU1pHTURSCmRhcm5lZC9UUgpkYXJuZXIvTQpkYXJ0L1NaR01EUgpkYXJ0Ym9hcmQvTVMKZGFydGVyL00KZGFzaC9aR01EUlMKZGFzaGJvYXJkL1NNCmRhc2hlci9NCmRhc2hpa2kvTVMKZGFzaGluZy9ZCmRhc3RhcmQvTVlTCmRhc3RhcmRsaW5lc3MvTQpkYXRhCmRhdGFiYXNlL1NNCmRhdGF0eXBlCmRhdGUvRFJTTVpHVgpkYXRlYm9vay9TCmRhdGVkL1UKZGF0ZWxlc3MKZGF0ZWxpbmUvTUdEUwpkYXRlci9NCmRhdGl2ZS9NUwpkYXR1bS9NCmRhdWIvU1pHTURSCmRhdWJlci9NCmRhdWdodGVyL1NNWQpkYXVudC9HRFMKZGF1bnRpbmcvWQpkYXVudGxlc3MvWVAKZGF1bnRsZXNzbmVzcy9NCmRhdXBoaW4vTVMKZGF2ZW5wb3J0L01TCmRhdml0L01TCmRhd2RsZS9aR0RSUwpkYXdkbGVyL00KZGF3bi9TR01ECmRheS9TTQpkYXliZWQvTVMKZGF5YnJlYWsvTQpkYXljYXJlL00KZGF5ZHJlYW0vTURSWkdTCmRheWRyZWFtZXIvTQpkYXlsaWdodC9NUwpkYXlsaWdodHMvTQpkYXlsb25nCmRheXRpbWUvTQpkYXplL0RTTUcKZGF6ZWQvWQpkYXp6bGUvTVpHRFJTCmRhenpsZXIvTQpkYXp6bGluZy9ZCmRiCmRibApkYwpkZC9TREcKZGRlZC9LCmRkaW5nL0sKZGVhY29uL01TCmRlYWNvbmVzcy9NUwpkZWFkL1hUTU5SWQpkZWFkYmVhdC9NUwpkZWFkYm9sdC9TTQpkZWFkZW4vR0QKZGVhZGhlYWQvU0RHCmRlYWRsaW5lL1NNCmRlYWRsaW5lc3MvTQpkZWFkbG9jay9HU01ECmRlYWRseS9UUFIKZGVhZHBhbi9NUwpkZWFkcGFubmVkCmRlYWRwYW5uaW5nCmRlYWR3b29kL00KZGVhZi9QWFROUgpkZWFmZW4vR0QKZGVhZmVuaW5nL1kKZGVhZm5lc3MvTQpkZWFsL1NKWkdNUgpkZWFsZXIvTQpkZWFsZXJzaGlwL1NNCmRlYWxpbmcvTQpkZWFsdApkZWFuL00KZGVhbmVyeS9TTQpkZWFuc2hpcC9NCmRlYXIvU1BUTVJZSApkZWFyZXN0L1MKZGVhcm5lc3MvTQpkZWFydGgvTQpkZWFydGhzCmRlYXJ5L1NNCmRlYXRoL01ZCmRlYXRoYmVkL1NNCmRlYXRoYmxvdy9NUwpkZWF0aGxlc3MvWQpkZWF0aGxpa2UKZGVhdGhzCmRlYXRodHJhcC9NUwpkZWF0aHdhdGNoL01TCmRlYXZlcwpkZWIvU00KZGViYWNsZS9NUwpkZWJhcmthdGlvbi9NCmRlYmFybWVudC9NCmRlYmF0ZS9CTVpSCmRlYmF0ZXIvTQpkZWJhdGluZy9NCmRlYmF1Y2gvTURTRwpkZWJhdWNoZWUvTVMKZGViYXVjaGVyeS9TTQpkZWJlbnR1cmUvTVMKZGViaWxpdGF0ZS9EU0dOCmRlYmlsaXRhdGlvbi9NCmRlYmlsaXR5L1NNCmRlYml0L0QKZGVib25haXIvUFkKZGVib25haXJuZXNzL00KZGVib3VjaC9HRFMKZGVicmlkZW1lbnQKZGVicmlzL00KZGVidC9TTQpkZWJ0b3IvTVMKZGVidWdnZXIvUwpkZWJ1dC9HTUQKZGVidXRhbnRlL1NNCmRlY2FkZS9NUwpkZWNhZGVuY2UvTQpkZWNhZGVuY3kvTQpkZWNhZGVudC9NWVMKZGVjYWYvTVMKZGVjYWZmZWluYXRlL0RTRwpkZWNhZ29uL01TCmRlY2FsL01TCmRlY2FtcG1lbnQvTQpkZWNhcGl0YXRlL1hHTkRTCmRlY2FwaXRhdG9yL01TCmRlY2F0aGxldGUvUwpkZWNhdGhsb24vU00KZGVjYXkvR0QKZGVjZWFzZWQvTQpkZWNlZGVudC9NUwpkZWNlaXQvTVMKZGVjZWl0ZnVsL1lQCmRlY2VpdGZ1bG5lc3MvTQpkZWNlaXZlL1VHRFMKZGVjZWl2ZXIvTVMKZGVjZWl2aW5nL1kKZGVjZWxlcmF0ZS9HTkRTCmRlY2VsZXJhdGlvbi9NCmRlY2VsZXJhdG9yL1NNCmRlY2VuY3kvSVNNCmRlY2VubmlhbC9TTQpkZWNlbnQvSVkKZGVjZXB0aW9uL01TCmRlY2VwdGl2ZS9ZUApkZWNlcHRpdmVuZXNzL00KZGVjaWJlbC9NUwpkZWNpZGFibGUvVQpkZWNpZGUvQlpHRFJTCmRlY2lkZWQvWQpkZWNpZHVvdXMKZGVjaWxpdGVyL01TCmRlY2ltYWwvU00KZGVjaW1hbGl6YXRpb24KZGVjaW1hdGUvRFNHTgpkZWNpbWF0aW9uL00KZGVjaW1ldGVyL01TCmRlY2lwaGVyYWJsZS9VSQpkZWNpc2lvbi9JTQpkZWNpc2lvbnMKZGVjaXNpdmUvSVBZCmRlY2lzaXZlbmVzcy9JTQpkZWNrL1NHTUQKZGVja2NoYWlyL1MKZGVja2hhbmQvU00KZGVja2xlL1MKZGVjbGFtYXRpb24vTVMKZGVjbGFtYXRvcnkKZGVjbGFyYXRpb24vTVMKZGVjbGFyYXRpdmUKZGVjbGFyYXRvcnkKZGVjbGFyZS9EUlNaR0IKZGVjbGFyZWQvVQpkZWNsYXJlci9NCmRlY2xlbnNpb24vU00KZGVjbGluYXRpb24vTQpkZWNsaW5lL0RSU01aRwpkZWNsaW5lci9NCmRlY2xpdml0eS9TTQpkZWNvbGxldGFnZS9TTQpkZWNvbGxldGUKZGVjb25nZXN0YW50L01TCmRlY29uc3RydWN0aW9uaXNtCmRlY29yL01TCmRlY29yYXRlL0FHTlZEUwpkZWNvcmF0aW5nL00KZGVjb3JhdGlvbi9BTQpkZWNvcmF0aW9ucwpkZWNvcmF0aXZlL1kKZGVjb3JhdG9yL01TCmRlY29yb3VzL0lZCmRlY29yb3VzbmVzcy9NCmRlY29ydW0vTQpkZWNvdXBhZ2UvRFNNRwpkZWNveS9HTURTCmRlY3JlYXNpbmcvWQpkZWNyZWUvTURTCmRlY3JlZWluZwpkZWNyZW1lbnRlZApkZWNyZW1lbnRzCmRlY3JlcGl0CmRlY3JlcGl0dWRlL00KZGVjcmltaW5hbGl6YXRpb24vTQpkZWNyeS9HRFMKZGVjcnlwdGlvbgpkZWRpY2F0ZS9BR0RTCmRlZGljYXRpb24vU00KZGVkaWNhdG9yL1NNCmRlZGljYXRvcnkKZGVkdWNlL0dEUwpkZWR1Y2libGUKZGVkdWN0L0dWRApkZWR1Y3RpYmxlL1NNCmRlZHVjdGlvbi9TTQpkZWR1Y3RpdmUvWQpkZWVkL0dECmRlZWpheS9NUwpkZWVtL0FTR0QKZGVlcC9TUFhUTU5SWQpkZWVwZW4vR0QKZGVlcG5lc3MvTQpkZWVyL00KZGVlcnNraW4vTQpkZWVyc3RhbGtlci9TCmRlZi9aCmRlZmFjZW1lbnQvTQpkZWZhY2VyL1NNCmRlZmFsY2F0ZS9EU1hHTgpkZWZhbGNhdGlvbi9NCmRlZmFtYXRpb24vTQpkZWZhbWF0b3J5CmRlZmFtZS9aR0RSUwpkZWZhbWVyL00KZGVmYXVsdGVyL1NNCmRlZmVhdC9NRFJaR1MKZGVmZWF0ZWQvVQpkZWZlYXRlci9NCmRlZmVhdGlzbS9NCmRlZmVhdGlzdC9NUwpkZWZlY2F0ZS9HTkRTCmRlZmVjYXRpb24vTQpkZWZlY3QvTURHVlMKZGVmZWN0aW9uL01TCmRlZmVjdGl2ZS9NUFlTCmRlZmVjdGl2ZW5lc3MvTQpkZWZlY3Rvci9NUwpkZWZlbmRhbnQvU00KZGVmZW5kZWQvVQpkZWZlbmVzdHJhdGlvbi9TCmRlZmVuc2UvRFNNR1YKZGVmZW5zZWxlc3MvWVAKZGVmZW5zZWxlc3NuZXNzL00KZGVmZW5zaWJsZS9JCmRlZmVuc2libHkvSQpkZWZlbnNpdmUvTVlQCmRlZmVuc2l2ZW5lc3MvTQpkZWZlcmVuY2UvTQpkZWZlcmVudGlhbC9ZCmRlZmVycmFsL01TCmRlZmVycmVkCmRlZmVycmluZwpkZWZmZXIKZGVmZmVzdApkZWZpYW50L1kKZGVmaWJyaWxsYXRpb24KZGVmaWJyaWxsYXRvci9TCmRlZmljaWVuY3kvU00KZGVmaWNpZW50CmRlZmljaXQvU00KZGVmaWxlbWVudC9NCmRlZmluYWJsZS9JVQpkZWZpbmUvQUdEUwpkZWZpbmVkL1UKZGVmaW5lci9NUwpkZWZpbml0ZS9JWVZQCmRlZmluaXRlbmVzcy9JTQpkZWZpbml0aW9uL0FNCmRlZmluaXRpb25zCmRlZmluaXRpdmUvWQpkZWZsYXRlL0dORFMKZGVmbGF0aW9uL00KZGVmbGF0aW9uYXJ5CmRlZmxlY3QvREdWUwpkZWZsZWN0aW9uL01TCmRlZmxlY3Rvci9TTQpkZWZvZ2dlci9TTQpkZWZvbGlhbnQvU00KZGVmb2xpYXRlL0RTR04KZGVmb2xpYXRpb24vTQpkZWZvbGlhdG9yL01TCmRlZm9ybWl0eS9TTQpkZWZyYXVkL0RSWkdTCmRlZnJhdWRlci9NCmRlZnJheWFsL00KZGVmcm9jay9ERwpkZWZyb3N0ZXIvTVMKZGVmdC9QVFJZCmRlZnRuZXNzL00KZGVmdW5jdApkZWZ5L0dEUwpkZWcKZGVnZW5lcmFjeS9NCmRlZ2VuZXJhdGUvTVYKZGVncmFkZS9CCmRlZ3JlZS9NUwpkZWh5ZHJhdG9yL1NNCmRlaHlkcm9nZW5hc2UKZGVpY2VyL01TCmRlaWZpY2F0aW9uL00KZGVpZnkvTkdEUwpkZWlnbi9HRFMKZGVpc3QvTVMKZGVpc3RpYwpkZWl0eS9TTQpkZWplY3QvR0RTCmRlamVjdGVkL1kKZGVqZWN0aW9uL00KZGVsYXkvWkRSCmRlbGVjdGFibGUKZGVsZWN0YWJseQpkZWxlY3RhdGlvbi9NCmRlbGVnYXRlL0dECmRlbGV0ZS9YR05EUwpkZWxldGVyaW91cwpkZWxldGlvbi9NCmRlbGZ0L00KZGVsZnR3YXJlL00KZGVsaS9TTQpkZWxpYmVyYXRlL1hZVlAKZGVsaWJlcmF0ZW5lc3MvTQpkZWxpY2FjeS9JU00KZGVsaWNhdGUvSVkKZGVsaWNhdGVuZXNzL00KZGVsaWNhdGVzc2VuL1NNCmRlbGljaW91cy9QWQpkZWxpY2lvdXNuZXNzL00KZGVsaWdodGVkL1kKZGVsaWdodGZ1bC9ZCmRlbGltaW5hdG9yCmRlbGluZWF0ZS9HTlhEUwpkZWxpbmVhdGlvbi9NCmRlbGlucXVlbmN5L1NNCmRlbGlucXVlbnQvU01ZCmRlbGlxdWVzY2UvRFNHCmRlbGlxdWVzY2VudApkZWxpcmlvdXMvWVAKZGVsaXJpb3VzbmVzcy9NCmRlbGlyaXVtL1NNCmRlbGl2ZXIvQURHUwpkZWxpdmVyYWJsZQpkZWxpdmVyYW5jZS9NCmRlbGl2ZXJlZC9VCmRlbGl2ZXJlci9TTQpkZWxsL1NNCmRlbHBoaW5pdW0vTVMKZGVsdGEvTVMKZGVsdWRlL0dEUwpkZWx1Z2UvTUdEUwpkZWx1c2lvbi9NUwpkZWx1c2lvbmFsCmRlbHVzaXZlL1kKZGVsdXhlCmRlbHZlL1pHRFJTCmRlbHZlci9NCmRlbWFnb2dpYwpkZW1hZ29naWNhbGx5CmRlbWFnb2d1ZS9TTQpkZW1hZ29ndWVyeS9NCmRlbWFnb2d5L00KZGVtYW5kL0dNRFMKZGVtYW5kaW5nL1UKZGVtYXJjYXRlL0RTR05YCmRlbWFyY2F0aW9uL00KZGVtZWFuL0dEUwpkZW1lYW5vci9NCmRlbWVudGVkL1kKZGVtZW50aWEvTQpkZW1lc25lL01TCmRlbWlnb2QvTVMKZGVtaWdvZGRlc3MvTVMKZGVtaWpvaG4vU00KZGVtaW1vbmRhaW5lL1NNCmRlbWltb25kZS9NCmRlbWlzZS9NR0RTCmRlbWl0YXNzZS9NUwpkZW1vL0dNRApkZW1vY3JhY3kvU00KZGVtb2NyYXQvTVMKZGVtb2NyYXRpYy9VCmRlbW9jcmF0aWNhbGx5CmRlbW9jcmF0aXphdGlvbi9NCmRlbW9jcmF0aXplL0dEUwpkZW1vZGUKZGVtb2dyYXBoZXIvU00KZGVtb2dyYXBoaWMvU00KZGVtb2dyYXBoaWNhbGx5CmRlbW9ncmFwaGljcy9NCmRlbW9ncmFwaHkvTQpkZW1vbGlzaC9EU0cKZGVtb2xpdGlvbi9NUwpkZW1vbi9NUwpkZW1vbmV0aXphdGlvbi9NCmRlbW9uaWFjCmRlbW9uaWFjYWwvWQpkZW1vbmljCmRlbW9uaWNhbGx5CmRlbW9uaXplL0dEUwpkZW1vbm9sb2d5L1NNCmRlbW9uc3RyYWJpbGl0eQpkZW1vbnN0cmFibGUvSQpkZW1vbnN0cmFibHkKZGVtb25zdHJhdGUvWEdOVkRTCmRlbW9uc3RyYXRpb24vTQpkZW1vbnN0cmF0aXZlL01ZU1AKZGVtb25zdHJhdGl2ZW5lc3MvTQpkZW1vbnN0cmF0b3IvTVMKZGVtb3RlL0dECmRlbW90aWMKZGVtb3VudApkZW11bGNlbnQvU00KZGVtdXIvVE1SUwpkZW11cmUvUFkKZGVtdXJlbmVzcy9NCmRlbXVycmFsL1NNCmRlbXVycmVkCmRlbXVycmVyL1NNCmRlbXVycmluZwpkZW4vTQpkZW5hdGlvbmFsaXphdGlvbgpkZW5hdHVyYXRpb24KZGVuYXR1cmUvREcKZGVuZHJpdGUvU00KZGVuZ3VlL00KZGVuaWFiaWxpdHkKZGVuaWFibGUvVQpkZW5pYWwvTVMKZGVuaWVyL00KZGVuaWdyYXRlL0RTR04KZGVuaWdyYXRpb24vTQpkZW5pbS9NUwpkZW5pdHJpZmljYXRpb24KZGVuaXplbi9NUwpkZW5vbWluYXRpb25hbApkZW5vdGF0aXZlCmRlbm91ZW1lbnQvTVMKZGVub3VuY2UvTERTRwpkZW5vdW5jZW1lbnQvU00KZGVuc2UvUFlUUgpkZW5zZW5lc3MvTQpkZW5zaXR5L1NNCmRlbnQvSVNHTUQKZGVudGFsL1kKZGVudGlmcmljZS9TTQpkZW50aW4vTQpkZW50aXN0L01TCmRlbnRpc3RyeS9NCmRlbnRpdGlvbi9NCmRlbnR1cmUvSU1TCmRlbnVjbGVhcml6ZS9HRFMKZGVudWRhdGlvbi9NCmRlbnVkZS9HRFMKZGVudW5jaWF0aW9uL1NNCmRlbnkvWkdEUlMKZGVvZG9yYW50L1NNCmRlb2Rvcml6YXRpb24vTQpkZW9kb3JpemUvRFJTWkcKZGVvZG9yaXplci9NCmRlcGFydGVkL00KZGVwYXJ0bWVudC9NUwpkZXBhcnRtZW50YWwvWQpkZXBhcnRtZW50YWxpemF0aW9uL00KZGVwYXJ0bWVudGFsaXplL0dEUwpkZXBhcnR1cmUvU00KZGVwZW5kYWJpbGl0eS9NCmRlcGVuZGFibGUvVQpkZXBlbmRhYmx5CmRlcGVuZGVuY2UvSU0KZGVwZW5kZW5jeS9TTQpkZXBlbmRlbnQvSU1ZUwpkZXBpY3QvR0RTCmRlcGljdGlvbi9NUwpkZXBpbGF0b3J5L1NNCmRlcGxldGUvR05EUwpkZXBsZXRpb24vTQpkZXBsb3JhYmx5CmRlcGxvcmUvQkdEUwpkZXBsb3kvQUxHRFMKZGVwbG95bWVudC9BTQpkZXBsb3ltZW50cwpkZXBvbmVudC9NUwpkZXBvcnRhdGlvbi9NUwpkZXBvcnRlZS9NUwpkZXBvcnRtZW50L00KZGVwb3NpdC9BR01EUwpkZXBvc2l0b3IvTVMKZGVwb3NpdG9yeS9TTQpkZXByYXZlL0dEUwpkZXByYXZpdHkvU00KZGVwcmVjYXRlL0dORFMKZGVwcmVjYXRpbmcvWQpkZXByZWNhdGlvbi9NCmRlcHJlY2F0b3J5CmRlcHJlY2lhdGUvRFNHTgpkZXByZWNpYXRpb24vTQpkZXByZWRhdGlvbi9TTQpkZXByZXNzYW50L1NNCmRlcHJlc3NpbmcvWQpkZXByZXNzaW9uL1NNCmRlcHJlc3NpdmUvU00KZGVwcmVzc29yL01TCmRlcHJlc3N1cml6YXRpb24KZGVwcml2ZS9HRFMKZGVwcm9ncmFtbWluZwpkZXB0aC9NCmRlcHRocwpkZXB1dGF0aW9uL01TCmRlcHV0ZS9EU0cKZGVwdXRpemUvRFNHCmRlcHV0eS9TTQpkZXJhaWxsZXVyL1NNCmRlcmFpbG1lbnQvU00KZGVyYW5nZW1lbnQvTQpkZXJieS9TTQpkZXJlbGljdC9NUwpkZXJlbGljdGlvbi9NCmRlcmlkZS9HRFMKZGVyaXNpb24vTQpkZXJpc2l2ZS9QWQpkZXJpc2l2ZW5lc3MvTQpkZXJpc29yeQpkZXJpdmF0aW9uL01TCmRlcml2YXRpdmUvTVMKZGVyaXZlL0IKZGVybWFsCmRlcm1hdGl0aXMvTQpkZXJtYXRvbG9naWNhbApkZXJtYXRvbG9naXN0L1NNCmRlcm1hdG9sb2d5L00KZGVybWlzL00KZGVyb2dhdGUvRFNHTgpkZXJvZ2F0aW9uL00KZGVyb2dhdG9yaWx5CmRlcm9nYXRvcnkKZGVycmljay9TTQpkZXJyaWVyZS9TTQpkZXJyaW5nZXIvU00KZGVydgpkZXJ2aXNoL01TCmRlc2FsaW5hdGUvR05EUwpkZXNhbGluYXRpb24vTQpkZXNhbGluaXphdGlvbi9NCmRlc2FsaW5pemUvR0RTCmRlc2NhbnQvTQpkZXNjZW5kL0ZHRFMKZGVzY2VuZGFudC9NUwpkZXNjZW5kZXIKZGVzY3JpYmFibGUvSQpkZXNjcmliZS9CWkdEUgpkZXNjcmliZXIvTQpkZXNjcmlwdGlvbi9TTQpkZXNjcmlwdGl2ZS9QWQpkZXNjcmlwdGl2ZW5lc3MvTQpkZXNjcmlwdG9yL1MKZGVzY3J5L0dEUwpkZXNlY3JhdGUvRFNHTgpkZXNlY3JhdGlvbi9NCmRlc2VsZWN0aW9uCmRlc2VydC9TRFJaR00KZGVzZXJ0ZXIvTQpkZXNlcnRpZmljYXRpb24KZGVzZXJ0aW9uL1NNCmRlc2VydmVkL1VZCmRlc2VydmluZy9VCmRlc2ljY2FudC9TTQpkZXNpY2NhdGUvRFNHTgpkZXNpY2NhdGlvbi9NCmRlc2ljY2F0b3IvU00KZGVzaWRlcmF0YQpkZXNpZGVyYXR1bS9NCmRlc2lnbi9BU0RHCmRlc2lnbmF0ZS9EU0dOWApkZXNpZ25hdGlvbi9NCmRlc2lyYWJpbGl0eS9VTQpkZXNpcmFibGVuZXNzL00KZGVzaXJhYmx5L1UKZGVzaXJlL0IKZGVzaXJlZC9VCmRlc2lyb3VzCmRlc2lzdC9TREcKZGVzay9TTQpkZXNraWxsL0cKZGVza3RvcC9TTQpkZXNvbGF0ZS9QRFNZR04KZGVzb2xhdGVuZXNzL00KZGVzb2xhdGlvbi9NCmRlc3BhaXIvU01ERwpkZXNwYWlyaW5nL1kKZGVzcGVyYWRvL00KZGVzcGVyYWRvZXMKZGVzcGVyYXRlL1lOUApkZXNwZXJhdGVuZXNzL00KZGVzcGVyYXRpb24vTQpkZXNwaWNhYmxlCmRlc3BpY2FibHkKZGVzcGlzZS9EU0cKZGVzcGl0ZQpkZXNwb2lsbWVudC9NCmRlc3BvbmRlbmNlL00KZGVzcG9uZGVuY3kvTQpkZXNwb25kZW50L1kKZGVzcG90aWMKZGVzcG90aWNhbGx5CmRlc3BvdGlzbS9NCmRlc3NlcnQvU00KZGVzc2VydHNwb29uL1MKZGVzc2VydHNwb29uZnVsL1MKZGVzdGluYXRpb24vU00KZGVzdGluZS9EU0cKZGVzdGlueS9TTQpkZXN0aXR1dGUvTgpkZXN0aXR1dGlvbi9NCmRlc3Ryb3kvU1pHRFIKZGVzdHJveWVyL00KZGVzdHJ1Y3QvR1ZNRFMKZGVzdHJ1Y3RpYmlsaXR5L0lNCmRlc3RydWN0aWJsZS9JCmRlc3RydWN0aW9uL00KZGVzdHJ1Y3RpdmUvUFkKZGVzdHJ1Y3RpdmVuZXNzL00KZGVzdWV0dWRlL00KZGVzdWx0b3JpbHkKZGVzdWx0b3J5CmRldGFjaC9CTEdEUwpkZXRhY2htZW50L01TCmRldGFpbi9MR0RTCmRldGFpbmVlL01TCmRldGFpbm1lbnQvTQpkZXRlY3QvU0RHVkIKZGV0ZWN0YWJsZS9VCmRldGVjdGVkL1UKZGV0ZWN0aW9uL00KZGV0ZWN0aXZlL1NNCmRldGVjdG9yL1NNCmRldGVudGUvU01OWApkZXRlbnRpb24vTQpkZXRlci9TTApkZXRlcmdlbnQvU00KZGV0ZXJpb3JhdGUvRFNHTgpkZXRlcmlvcmF0aW9uL00KZGV0ZXJtZW50L00KZGV0ZXJtaW5hYmxlL0kKZGV0ZXJtaW5hbnQvU00KZGV0ZXJtaW5hdGUKZGV0ZXJtaW5lL0FHRFMKZGV0ZXJtaW5lZC9VCmRldGVybWluZWRseQpkZXRlcm1pbmVyL1NNCmRldGVybWluaXNtL00KZGV0ZXJtaW5pc3RpYwpkZXRlcnJlZC9VCmRldGVycmVuY2UvTQpkZXRlcnJlbnQvTVMKZGV0ZXJyaW5nCmRldGVzdGFibHkKZGV0ZXN0YXRpb24vTQpkZXRocm9uZS9EU0xHCmRldGhyb25lbWVudC9NCmRldG9uYXRlL0dORFNYCmRldG9uYXRpb24vTQpkZXRvbmF0b3IvU00KZGV0b3gvTURTRwpkZXRveGlmaWNhdGlvbi9NCmRldG94aWZ5L0RTR04KZGV0cmFjdC9HRApkZXRyaW1lbnQvU00KZGV0cmltZW50YWwvWQpkZXRyaXR1cy9NCmRldWNlL1NNCmRldXRlcml1bS9NCmRldmFzdGF0ZS9HTkRTCmRldmFzdGF0aW5nL1kKZGV2YXN0YXRpb24vTQpkZXZhc3RhdG9yL01TCmRldmVsb3AvQVNHREwKZGV2ZWxvcGVkL1UKZGV2ZWxvcGVyL1NNCmRldmVsb3BtZW50L0FTTQpkZXZlbG9wbWVudGFsL1kKZGV2aWFuY2UvTQpkZXZpYW5jeS9NCmRldmlhbnQvU00KZGV2aWF0ZS9EU01HTlgKZGV2aWF0aW5nL1UKZGV2aWF0aW9uL00KZGV2aWwvU01ER0wKZGV2aWxpc2gvWVAKZGV2aWxpc2huZXNzL00KZGV2aWxtZW50L00KZGV2aWxyeS9TTQpkZXZpbHRyeS9TTQpkZXZpb3VzL1lQCmRldmlvdXNuZXNzL00KZGV2b2lkCmRldm9sdXRpb24vTQpkZXZvbHZlL0RTRwpkZXZvdGVkL1kKZGV2b3RlZS9TTQpkZXZvdGlvbi9NUwpkZXZvdGlvbmFsL1NNCmRldm91ci9TREcKZGV2b3V0L1BSWVQKZGV2b3V0bmVzcy9NCmRldy9NCmRld2JlcnJ5L1NNCmRld2NsYXcvU00KZGV3ZHJvcC9TTQpkZXdpbmVzcy9NCmRld2xhcC9TTQpkZXd5L1JUUApkZXh0ZXJpdHkvTQpkZXh0ZXJvdXMvWVAKZGV4dGVyb3VzbmVzcy9NCmRleHRyb3NlL00KZGhhcm1hCmRob3RpL1NNCmRob3cvTVMKZGlhYmV0ZXMvTQpkaWFiZXRpYy9TTQpkaWFib2xpYwpkaWFib2xpY2FsL1kKZGlhY3JpdGljL01TCmRpYWNyaXRpY2FsCmRpYWRlbS9TTQpkaWFlcmVzZXMKZGlhZXJlc2lzL00KZGlhZ25vc2UvRFNHCmRpYWdub3Npcy9NCmRpYWdub3N0aWMvUwpkaWFnbm9zdGljYWxseQpkaWFnbm9zdGljaWFuL1NNCmRpYWdub3N0aWNzL00KZGlhZ29uYWwvU01ZCmRpYWdyYW0vU00KZGlhZ3JhbW1hdGljCmRpYWdyYW1tYXRpY2FsbHkKZGlhZ3JhbW1lZApkaWFncmFtbWluZwpkaWFsL0FNREdTCmRpYWxlY3QvU00KZGlhbGVjdGFsCmRpYWxlY3RpYy9TTQpkaWFsZWN0aWNhbApkaWFsZWN0aWNzL00KZGlhbGluZy9TCmRpYWxvZwpkaWFsb2d1ZS9TTQpkaWFseXNlcwpkaWFseXNpcy9NCmRpYWx5emVzCmRpYW0KZGlhbWFudGUKZGlhbWV0ZXIvU00KZGlhbWV0cmljCmRpYW1ldHJpY2FsL1kKZGlhbW9uZC9TTQpkaWFtb25kYmFjay9NUwpkaWFwYXNvbi9TTQpkaWFwZXIvU01ERwpkaWFwaGFub3VzCmRpYXBocmFnbS9TTQpkaWFwaHJhZ21hdGljCmRpYXJpc3QvU00KZGlhcnJoZWEvTQpkaWFyeS9TTQpkaWFzcG9yYS9TTQpkaWFzdGFzZS9NCmRpYXN0b2xlL00KZGlhc3RvbGljCmRpYXRoZXJteS9NCmRpYXRvbS9TTQpkaWF0b21pYwpkaWF0b25pYwpkaWF0cmliZS9TTQpkaWJibGUvRFNNRwpkaWJzL00KZGljZS9HRFMKZGljZXMvSQpkaWNleQpkaWNob3RvbW91cwpkaWNob3RvbXkvU00KZGljaWVyCmRpY2llc3QKZGljay9NUlhaUwpkaWNrZXIvREcKZGlja2V5L1NNCmRpY2toZWFkL1MKZGlja3liaXJkL1MKZGljb3R5bGVkb24vTVMKZGljb3R5bGVkb25vdXMKZGljdApkaWN0YQpkaWN0YXRlL0RTTUdOWApkaWN0YXRpb24vTQpkaWN0YXRvci9TTQpkaWN0YXRvcmlhbC9ZCmRpY3RhdG9yc2hpcC9TTQpkaWN0aW9uL00KZGljdGlvbmFyeS9TTQpkaWN0dW0vTQpkaWQvQVUKZGlkYWN0aWMKZGlkYWN0aWNhbGx5CmRpZGRsZS9EUlNaRwpkaWRkbGVyL00KZGlkZGx5CmRpZGRseXNxdWF0CmRpZGR1bXMKZGlkZ2VyaWRvby9TCmRpZG4ndApkaWRvL00KZGlkb2VzCmRpZHN0CmRpZS9EU00KZGllbGVjdHJpYy9NUwpkaWVyZXNlcwpkaWVyZXNpcy9NCmRpZXNlbC9TTURHCmRpZXQvTURSWkdTCmRpZXRhcnkvU00KZGlldGVyL00KZGlldGV0aWMvUwpkaWV0ZXRpY3MvTQpkaWV0aXRpYW4vTVMKZGlmZi9EUlpHUwpkaWZmZXIvREcKZGlmZmVyZW5jZS9JTQpkaWZmZXJlbmNlcwpkaWZmZXJlbnQvSVkKZGlmZmVyZW50aWFsL1NNCmRpZmZlcmVudGlhdGUvRFNHTgpkaWZmZXJlbnRpYXRlZC9VCmRpZmZlcmVudGlhdGlvbi9NCmRpZmZpY3VsdC9ZCmRpZmZpY3VsdHkvU00KZGlmZmlkZW5jZS9NCmRpZmZpZGVudC9ZCmRpZmZyYWN0L0dTRApkaWZmcmFjdGlvbi9NCmRpZmZ1c2UvRFNZR05WUApkaWZmdXNlbmVzcy9NCmRpZmZ1c2lvbi9NCmRpZy9TTQpkaWdlcmF0aS9NCmRpZ2VzdC9TTURHVgpkaWdlc3RlZC9VCmRpZ2VzdGliaWxpdHkvTQpkaWdlc3RpYmxlL0kKZGlnZXN0aW9uL0lNCmRpZ2VzdGlvbnMKZGlnZXN0aXZlL1MKZGlnZ2VyL1NNCmRpZ2dpbmcvUwpkaWdnaW5ncy9NCmRpZ2ljYW0vUwpkaWdpdC9TTQpkaWdpdGFsL1kKZGlnaXRhbGlzL00KZGlnaXRpemF0aW9uCmRpZ2l0aXplL0dEUwpkaWduaWZpZWQvVQpkaWduaWZ5L0RTRwpkaWduaXRhcnkvU00KZGlnbml0eS9JU00KZGlncmFwaC9NCmRpZ3JhcGhzCmRpZ3Jlc3MvR1ZEUwpkaWdyZXNzaW9uL01TCmRpa2UvTUdEUwpkaWt0YXQvUwpkaWxhcGlkYXRlZApkaWxhcGlkYXRpb24vTQpkaWxhdGF0aW9uL00KZGlsYXRlL0RTR04KZGlsYXRpb24vTQpkaWxhdG9yL1NNCmRpbGF0b3J5CmRpbGRvL1MKZGlsZW1tYS9NUwpkaWxldHRhbnRlL1NNCmRpbGV0dGFudGlzaApkaWxldHRhbnRpc20vTQpkaWxpZ2VuY2UvTQpkaWxpZ2VudC9ZCmRpbGwvTVMKZGlsbHkvU00KZGlsbHlkYWxseS9EU0cKZGlsdXRlL0RTR05YCmRpbHV0ZWQvVQpkaWx1dGlvbi9NCmRpbS9QU1JZCmRpbWUvTVMKZGltZW5zaW9uL1NNCmRpbWVuc2lvbmFsCmRpbWVuc2lvbmxlc3MKZGltaW5pc2gvR0RTCmRpbWluaXNoZWQvVQpkaW1pbnVlbmRvL1NNCmRpbWludXRpb24vU00KZGltaW51dGl2ZS9TTQpkaW1pdHkvTQpkaW1tZWQvVQpkaW1tZXIvU00KZGltbWVzdApkaW1taW5nCmRpbW5lc3MvTQpkaW1wbGUvRFNNRwpkaW1wbHkKZGltd2l0L1NNCmRpbXdpdHRlZApkaW4vWkdTTURSCmRpbmFyL1NNCmRpbmUvUwpkaW5lci9NCmRpbmV0dGUvTVMKZGluZy9NREcKZGluZ2JhdC9NUwpkaW5naHkvU00KZGluZ2lseQpkaW5naW5lc3MvTQpkaW5nbGUvU00KZGluZ28vTQpkaW5nb2VzCmRpbmd1cy9NUwpkaW5neS9SUFQKZGluay9SCmRpbmt5L1JTTVQKZGlubmVkCmRpbm5lci9TTURHCmRpbm5lcnRpbWUvTQpkaW5uZXJ3YXJlL00KZGlubmluZwpkaW5vc2F1ci9TTQpkaW50L00KZGlvY2VzYW4vTVMKZGlvY2VzZS9NUwpkaW9kZS9TTQpkaW9yYW1hL1NNCmRpb3hpZGUvU00KZGlveGluL1NNCmRpcC9TTQpkaXBodGhlcmlhL00KZGlwaHRob25nL1NNCmRpcGxvaWQvU00KZGlwbG9tYS9TTQpkaXBsb21hY3kvTQpkaXBsb21hdC9NUwpkaXBsb21hdGEKZGlwbG9tYXRpYy9VCmRpcGxvbWF0aWNhbGx5CmRpcGxvbWF0aXN0L01TCmRpcGxvcGlhCmRpcG9sZS9TTQpkaXBwZWQKZGlwcGVyL1NNCmRpcHBpbmcKZGlwcHkvUlQKZGlwc28vUwpkaXBzb21hbmlhL00KZGlwc29tYW5pYWMvTVMKZGlwc3RpY2svU00KZGlwdGVyb3VzCmRpcHR5Y2gvTQpkaXB0eWNocwpkaXJlL1lUUgpkaXJlY3QvQVNER1ZUCmRpcmVjdGVyCmRpcmVjdGlvbi9JTQpkaXJlY3Rpb25hbApkaXJlY3Rpb25sZXNzCmRpcmVjdGlvbnMKZGlyZWN0aXZlL1NNCmRpcmVjdGx5CmRpcmVjdG5lc3MvSU0KZGlyZWN0b3IvTVMKZGlyZWN0b3JhdGUvU00KZGlyZWN0b3JpYWwKZGlyZWN0b3JzaGlwL1NNCmRpcmVjdG9yeS9TTQpkaXJlZnVsCmRpcmdlL1NNCmRpcmlnaWJsZS9NUwpkaXJrL01TCmRpcm5kbC9TTQpkaXJ0L00KZGlydGJhbGwvUwpkaXJ0aWx5CmRpcnRpbmVzcy9NCmRpcnR5L0RSU1RHUApkaXMvTQpkaXNhYmxlL0RTR0wKZGlzYWJsZW1lbnQvTQpkaXNhbWJpZ3VhdGUvTgpkaXNhcHBvaW50aW5nL1kKZGlzYXJtaW5nL1kKZGlzYXNzZW1ibHkKZGlzYXN0cm91cy9ZCmRpc2JhbmRtZW50L00KZGlzYmFybWVudC9NCmRpc2JlbGlldmluZy9ZCmRpc2J1cnNhbC9NCmRpc2J1cnNlL0RTR0wKZGlzYnVyc2VtZW50L01TCmRpc2MvTQpkaXNjZXJuL0xTREcKZGlzY2VybmlibGUvSQpkaXNjZXJuaWJseQpkaXNjZXJuaW5nL1kKZGlzY2Vybm1lbnQvTQpkaXNjaGFyZ2VkL1UKZGlzY2lwbGUvU00KZGlzY2lwbGVzaGlwL00KZGlzY2lwbGluYXJpYW4vU00KZGlzY2lwbGluYXJ5CmRpc2NpcGxpbmUvRFNNRwpkaXNjaXBsaW5lZC9VCmRpc2Nsb3NlL0RTRwpkaXNjbG9zZWQvVQpkaXNjby9NRwpkaXNjb2dyYXBoeS9TTQpkaXNjb2xvcmF0aW9uL1MKZGlzY29tYm9idWxhdGUvRFNHTgpkaXNjb21ib2J1bGF0aW9uL00KZGlzY29tZml0L0RHCmRpc2NvbWZpdHVyZS9NCmRpc2NvbW1vZGUvREcKZGlzY29uY2VydGluZy9ZCmRpc2Nvbm5lY3RlZC9QWQpkaXNjb25uZWN0ZWRuZXNzL00KZGlzY29uc29sYXRlL1kKZGlzY29yZGFuY2UvTQpkaXNjb3JkYW50L1kKZGlzY290aGVxdWUvU00KZGlzY291cmFnZS9MR0RTCmRpc2NvdXJhZ2VtZW50L1NNCmRpc2NvdXJhZ2luZy9ZCmRpc2NvdmVyL0FTREcKZGlzY292ZXJlZC9VCmRpc2NvdmVyZXIvTVMKZGlzY292ZXJ5L0FTTQpkaXNjcmVldC9QUllUCmRpc2NyZWV0bmVzcy9NCmRpc2NyZXBhbmN5L1NNCmRpc2NyZXBhbnQKZGlzY3JldGUvUFlOCmRpc2NyZXRlbmVzcy9NCmRpc2NyZXRpb24vSU0KZGlzY3JldGlvbmFyeQpkaXNjcmltaW5hbnQKZGlzY3JpbWluYXRlL0dORFMKZGlzY3JpbWluYXRpbmcvVQpkaXNjcmltaW5hdGlvbi9NCmRpc2NyaW1pbmF0b3IvTVMKZGlzY3JpbWluYXRvcnkKZGlzY3Vyc2l2ZW5lc3MvTQpkaXNjdXMvTVMKZGlzY3Vzc2FudC9TTQpkaXNjdXNzaW9uL1NNCmRpc2RhaW4vU01ERwpkaXNkYWluZnVsL1kKZGlzZW1ib3dlbC9TRExHCmRpc2VtYm93ZWxtZW50L00KZGlzZmlndXJlbWVudC9TTQpkaXNmcmFuY2hpc2VtZW50L00KZGlzZ29yZ2VtZW50L00KZGlzZ3J1bnRsZS9MR0RTCmRpc2dydW50bGVtZW50L00KZGlzZ3Vpc2UvR0QKZGlzZ3Vpc2VkL1UKZGlzZ3VzdGVkL1kKZGlzZ3VzdGluZy9ZCmRpc2gvTURTRwpkaXNoYWJpbGxlL00KZGlzaGFybW9uaW91cwpkaXNoY2xvdGgvTQpkaXNoY2xvdGhzCmRpc2hlYXJ0ZW5pbmcvWQpkaXNoZXZlbC9ER0xTCmRpc2hldmVsbWVudC9NCmRpc2hwYW4vU00KZGlzaHJhZy9TTQpkaXNodG93ZWwvTVMKZGlzaHdhcmUvTQpkaXNod2FzaGVyL01TCmRpc2h3YXRlci9NCmRpc2h5CmRpc2lsbHVzaW9uL0dMRApkaXNpbGx1c2lvbm1lbnQvTQpkaXNpbmZlY3RhbnQvTVMKZGlzaW5mZWN0aW9uL00KZGlzaW50ZXJlc3RlZC9QWQpkaXNpbnRlcmVzdGVkbmVzcy9NCmRpc2pvaW50ZWQvWVAKZGlzam9pbnRlZG5lc3MvTQpkaXNqdW5jdGl2ZQpkaXNqdW5jdHVyZQpkaXNrL01TCmRpc2tldHRlL01TCmRpc2xvZGdlL0dEUwpkaXNtYWwvWQpkaXNtYW50bGVtZW50L00KZGlzbWF5L1NNREcKZGlzbWF5ZWQvVQpkaXNtZW1iZXIvTEdECmRpc21lbWJlcm1lbnQvTQpkaXNtaXNzaXZlL1kKZGlzb3JkZXIvWQpkaXNvcmdhbml6YXRpb24vTQpkaXNwYXJhZ2UvRFNHTApkaXNwYXJhZ2VtZW50L00KZGlzcGFyYWdpbmcvWQpkaXNwYXJhdGUvWQpkaXNwYXRjaGVyL01TCmRpc3BlbC9TCmRpc3BlbGxlZApkaXNwZWxsaW5nCmRpc3BlbnNhcnkvU00KZGlzcGVuc2F0aW9uL01TCmRpc3BlbnNlL0JaR0RSUwpkaXNwZW5zZXIvTQpkaXNwZXJzYWwvTQpkaXNwZXJzZS9HTkRTCmRpc3BlcnNpb24vTQpkaXNwaXJpdC9HRFMKZGlzcGxlYXN1cmUvTQpkaXNwb3NhYmxlL1NNCmRpc3Bvc2FsL1NNCmRpc3Bvc2VkL0kKZGlzcG9zaXRpb24vSVNNCmRpc3Bvc3Nlc3Npb24vTQpkaXNwcm9vZi9TTQpkaXNwcm9wb3J0aW9uYWwKZGlzcHJvdmUvQgpkaXNwdXRhYmxlL0kKZGlzcHV0YWJseS9JCmRpc3B1dGFudC9NUwpkaXNwdXRhdGlvbi9TTQpkaXNwdXRhdGlvdXMvWQpkaXNwdXRlL0RSU01aR0IKZGlzcHV0ZWQvVQpkaXNwdXRlci9NCmRpc3F1aWV0L0dTTUQKZGlzcXVpc2l0aW9uL01TCmRpc3JlZ2FyZGZ1bApkaXNyZXBhaXIvTQpkaXNyZXB1dGUvTUIKZGlzcnVwdC9HVlNECmRpc3J1cHRpb24vU00KZGlzcnVwdGl2ZS9ZCmRpc3NlY3QvU0RHCmRpc3NlZApkaXNzZW1ibGFuY2UvTQpkaXNzZW1ibGUvWkdEUlMKZGlzc2VtYmxlci9NCmRpc3NlbWluYXRlL0dORFMKZGlzc2VtaW5hdGlvbi9NCmRpc3NlbnNpb24vU00KZGlzc2VudC9TTURSWkcKZGlzc2VudGVyL00KZGlzc2VydGF0aW9uL1NNCmRpc3NpZGVuY2UvTQpkaXNzaWRlbnQvTVMKZGlzc2ltaWxhcgpkaXNzaW1pbGl0dWRlL1MKZGlzc2luZwpkaXNzaXBhdGUvR05EUwpkaXNzaXBhdGlvbi9NCmRpc3NvY2lhdGUvR05EUwpkaXNzb2NpYXRpb24vTQpkaXNzb2x1YmxlL0kKZGlzc29sdXRlL1lOUApkaXNzb2x1dGVuZXNzL00KZGlzc29sdmUvQUdEUwpkaXNzb2x2ZWQvVQpkaXNzb25hbmNlL1NNCmRpc3NvbmFudApkaXNzdWFkZS9HRFMKZGlzc3Vhc2l2ZQpkaXN0CmRpc3RhZmYvU00KZGlzdGFsL1kKZGlzdGFuY2UvRFNNRwpkaXN0YW50L1kKZGlzdGFzdGUvU00KZGlzdGVtcGVyL00KZGlzdGVudGlvbi9TTQpkaXN0aWxsYXRlL1NNTlgKZGlzdGlsbGF0aW9uL00KZGlzdGlsbGVyeS9TTQpkaXN0aW5jdC9JWVRWUApkaXN0aW5jdGVyCmRpc3RpbmN0aW9uL1NNCmRpc3RpbmN0aXZlL1lQCmRpc3RpbmN0aXZlbmVzcy9NCmRpc3RpbmN0bmVzcy9JTQpkaXN0aW5ndWlzaC9HRFNCCmRpc3Rpbmd1aXNoYWJsZS9JCmRpc3Rpbmd1aXNoZWQvVQpkaXN0b3J0L0dEUgpkaXN0b3J0aW9uL01TCmRpc3RyYWN0L0RHCmRpc3RyYWN0ZWQvWQpkaXN0cmFjdGlvbi9TCmRpc3RyYWl0CmRpc3RyYXVnaHQKZGlzdHJlc3MvREcKZGlzdHJlc3NmdWwKZGlzdHJlc3NpbmcvWQpkaXN0cmlidXRlL0FHTlZEUwpkaXN0cmlidXRlZC9VCmRpc3RyaWJ1dGlvbi9BTQpkaXN0cmlidXRpb25hbApkaXN0cmlidXRpb25zCmRpc3RyaWJ1dGl2ZS9ZCmRpc3RyaWJ1dG9yJ3MKZGlzdHJpYnV0b3IvQVMKZGlzdHJpYnV0b3JzaGlwL1MKZGlzdHJpY3QncwpkaXN0cmljdC9BUwpkaXN0dXJiL1pHU0RSCmRpc3R1cmJhbmNlL1NNCmRpc3R1cmJlZC9VCmRpc3R1cmJlci9NCmRpc3R1cmJpbmcvWQpkaXN1bmlvbi9NCmRpc3lsbGFiaWMKZGl0Y2gvTURTRwpkaXRoZXIvU01EUlpHCmRpdGhlcmVyL00KZGl0cmFuc2l0aXZlCmRpdHN5CmRpdHRvL1NNREcKZGl0dHkvU00KZGl0ei9NUwpkaXVyZXRpYy9NUwpkaXVybmFsL1kKZGl2CmRpdmEvTVMKZGl2YWxlbnQKZGl2YW4vU00KZGl2ZS9NWlRHRFJTCmRpdmVyL00KZGl2ZXJnZS9EU0cKZGl2ZXJnZW5jZS9NUwpkaXZlcmdlbnQKZGl2ZXJzZS9YWU5QCmRpdmVyc2VuZXNzL00KZGl2ZXJzaWZpY2F0aW9uL00KZGl2ZXJzaWZ5L0dORFMKZGl2ZXJzaW9uL00KZGl2ZXJzaW9uYXJ5CmRpdmVyc2l0eS9TTQpkaXZlcnQvU0RHCmRpdmVydGljdWxpdGlzL00KZGl2ZXN0L1NMREcKZGl2ZXN0aXR1cmUvTVMKZGl2ZXN0bWVudC9NCmRpdmlkZS9EUlNNWkdCCmRpdmlkZWQvVQpkaXZpZGVuZC9NUwpkaXZpZGVyL00KZGl2aW5hdGlvbi9NCmRpdmluZS9EUlNNWVpURwpkaXZpbmVyL00KZGl2aW5nL00KZGl2aW5pdHkvU00KZGl2aXNpYmlsaXR5L0lNCmRpdmlzaWJsZS9JCmRpdmlzaW9uL01TCmRpdmlzaW9uYWwKZGl2aXNpdmUvUFkKZGl2aXNpdmVuZXNzL00KZGl2aXNvci9TTQpkaXZvcmNlL0RTTE1HCmRpdm9yY2VlL01TCmRpdm9yY2VtZW50L01TCmRpdm90L1NNCmRpdnVsZ2UvR0RTCmRpdnZ5L0RTTUcKZGl4aWVsYW5kL00KZGl6emlseQpkaXp6aW5lc3MvTQpkaXp6eS9EUlNQVEcKZGplbGxhYmEvTVMKZG8vU0pNUkhaRwpkb2FibGUKZG9iL1MKZG9iYmVkCmRvYmJpbi9TTQpkb2JiaW5nCmRvYmVybWFuL01TCmRvYnJvCmRvYy9TTQpkb2NlbnQvU00KZG9jaWxlL1kKZG9jaWxpdHkvTQpkb2NrL01EUlpHUwpkb2NrZXQvU01ERwpkb2NrbGFuZC9TCmRvY2tzaWRlCmRvY2t3b3JrZXIvTVMKZG9ja3lhcmQvTVMKZG9jdG9yL1NNREcKZG9jdG9yYWwKZG9jdG9yYXRlL01TCmRvY3RyaW5haXJlL01TCmRvY3RyaW5hbApkb2N0cmluZS9NUwpkb2N1ZHJhbWEvU00KZG9jdW1lbnQvR01EUwpkb2N1bWVudGFyeS9TTQpkb2N1bWVudGF0aW9uL1NNCmRvY3VtZW50ZWQvVQpkb2RkZXIvU01ERwpkb2RkZXJ5CmRvZGRsZQpkb2RnZS9EUlNNWkcKZG9kZ2VtL1MKZG9kZ2VyL00KZG9kZ3kvUlQKZG9kby9NUwpkb2UvU00KZG9lci9NCmRvZXMvQVUKZG9lc2tpbi9NUwpkb2Vzbid0CmRvZmYvREdTCmRvZy9TTQpkb2djYXJ0L1NNCmRvZ2NhdGNoZXIvU00KZG9nZS9NUwpkb2dlYXJlZApkb2dmaWdodC9TTQpkb2dmaXNoL01TCmRvZ2dlZC9QWQpkb2dnZWRuZXNzL00KZG9nZ2VyZWwvTQpkb2dnaW5nCmRvZ2dvbmUvVEdSUwpkb2dneS9SU01UCmRvZ2hvdXNlL1NNCmRvZ2llL1NNCmRvZ2xlZy9TTQpkb2dsZWdnZWQKZG9nbGVnZ2luZwpkb2dsaWtlCmRvZ21hL1NNCmRvZ21hdGljCmRvZ21hdGljYWxseQpkb2dtYXRpc20vTQpkb2dtYXRpc3QvU00KZG9nbmFwcGVyCmRvZ3Nib2R5L1MKZG9nc2xlZC9TCmRvZ3Ryb3QvTVMKZG9ndHJvdHRlZApkb2d0cm90dGluZwpkb2d3b29kL01TCmRvaWx5L1NNCmRvaW5nL1VTTQpkb2xkcnVtcy9NCmRvbGUncwpkb2xlL0ZHRFMKZG9sZWZ1bC9ZUApkb2xlZnVsbmVzcy9NCmRvbGwvTURHUwpkb2xsYXIvU00KZG9sbGhvdXNlL1NNCmRvbGxvcC9TR01ECmRvbGx5L1NNCmRvbG1lbi9TTQpkb2xvbWl0ZS9NCmRvbG9yL00KZG9sb3JvdXMvWQpkb2xwaGluL01TCmRvbHQvTVMKZG9sdGlzaC9ZUApkb2x0aXNobmVzcy9NCmRvbWFpbi9TTQpkb21lL01HRFMKZG9tZXN0aWMvU00KZG9tZXN0aWNhbGx5CmRvbWVzdGljYXRlL0RTR04KZG9tZXN0aWNhdGVkL1UKZG9tZXN0aWNhdGlvbi9NCmRvbWVzdGljaXR5L00KZG9taWNpbGUvRFNNRwpkb21pY2lsaWFyeQpkb21pbmFuY2UvTQpkb21pbmFudC9TTVkKZG9taW5hdGUvRFNHTgpkb21pbmF0aW9uL00KZG9taW5hdHJpY2VzCmRvbWluYXRyaXgvTQpkb21pbmVlci9TR0QKZG9taW5lZXJpbmcvWQpkb21pbmlvbi9TTQpkb21pbm8vTQpkb21pbm9lcwpkb24ndApkb24vU00KZG9uYS9NUwpkb25hdGUvRFNYR04KZG9uYXRpb24vTQpkb25lL0ZBVQpkb25nL01ER1MKZG9uZ2xlL1NNCmRvbmtleS9TTQpkb25uZWQKZG9ubmluZwpkb25uaXNoCmRvbm55YnJvb2svTVMKZG9ub3IvU00KZG9udXRzCmRvb2RhZC9TTQpkb29kYWgKZG9vZGFocwpkb29kbGUvRFJTTVpHCmRvb2RsZWJ1Zy9TTQpkb29kbGVyL00KZG9vaGlja2V5L1NNCmRvb2xhbGx5CmRvb20vTURHUwpkb29tc2F5ZXIvTVMKZG9vbXNkYXkvTQpkb29tc3Rlci9TCmRvb3Incwpkb29yL0lTCmRvb3JiZWxsL01TCmRvb3JqYW1iL1MKZG9vcmtlZXBlci9NUwpkb29ya25vYi9NUwpkb29ya25vY2tlci9TCmRvb3JtYW4vTQpkb29ybWF0L1NNCmRvb3JtZW4KZG9vcnBsYXRlL1NNCmRvb3Jwb3N0L1MKZG9vcnN0ZXAvTVMKZG9vcnN0ZXBwZWQKZG9vcnN0ZXBwaW5nCmRvb3JzdG9wL01TCmRvb3J3YXkvU00KZG9vcnlhcmQvTVMKZG9wYS9NCmRvcGFtaW5lCmRvcGUvTVpHRFJTCmRvcGVyL00KZG9wZXkKZG9waWVyCmRvcGllc3QKZG9waW5lc3MvTQpkb3BpbmcvTQpkb3BwZWxnYW5nZXIvUwpkb3JrL01TCmRvcmt5L1JUCmRvcm0vTVJaUwpkb3JtYW5jeS9NCmRvcm1hbnQKZG9ybWVyL00KZG9ybWljZQpkb3JtaXRvcnkvU00KZG9ybW91c2UvTQpkb3JzYWwvWQpkb3J5L1NNCmRvc2FnZS9TTQpkb3NlL01HRFMKZG9zaApkb3NpbWV0ZXIvU00KZG9zcy9EUlNaRwpkb3NzaG91c2UvUwpkb3NzaWVyL01TCmRvc3QKZG90L1pHU01EUgpkb3RhZ2UvTQpkb3RhcmQvU00KZG90Y29tL1NNCmRvdGUvUwpkb3Rlci9NCmRvdGluZy9ZCmRvdHRlZApkb3R0aW5nCmRvdHR5L1JUCmRvdWJsZSdzCmRvdWJsZS9BRFNHCmRvdWJsZWhlYWRlci9NUwpkb3VibGVzcGVhay9NCmRvdWJsZXQvTVMKZG91Ymxvb24vU00KZG91Ymx5CmRvdWJ0L1NNRFJaRwpkb3VidGVyL00KZG91YnRmdWwvUFkKZG91YnRmdWxuZXNzL00KZG91YnRpbmcvWQpkb3VidGxlc3MvWQpkb3VjaGUvRFNNRwpkb3VnaC9NCmRvdWdobnV0L1NNCmRvdWdodHkvUlQKZG91Z2h5L1RSCmRvdXIvUllUUApkb3VybmVzcy9NCmRvdXNlL0RTRwpkb3ZlL01TCmRvdmVjb3QvUwpkb3ZlY290ZS9TTQpkb3ZldGFpbC9NRFNHCmRvdmlzaApkb3dhZ2VyL01TCmRvd2RpbHkKZG93ZGluZXNzL00KZG93ZHkvUlNQVApkb3dlbC9TTURHCmRvd2VyL1NNREcKZG93bi9NRFJaR1MKZG93bmJlYXQvU00KZG93bmNhc3QKZG93bmRyYWZ0L01TCmRvd25lci9NCmRvd25mYWxsL1NNTgpkb3duZmllbGQKZG93bmdyYWRlL0RTTUcKZG93bmhlYXJ0ZWQvUFkKZG93bmhlYXJ0ZWRuZXNzL00KZG93bmhpbGwvTVMKZG93bmxvYWQvTURCU0cKZG93bm1hcmtldApkb3ducGxheS9EU0cKZG93bnBvdXIvTVMKZG93bnJhbmdlCmRvd25yaWdodApkb3ducml2ZXIKZG93bnNjYWxlCmRvd25zaGlmdC9TR0QKZG93bnNpZGUvTVMKZG93bnNpemUvR0RTCmRvd25zaXppbmcvTQpkb3duc3BvdXQvTVMKZG93bnN0YWdlCmRvd25zdGFpcnMvTQpkb3duc3RhdGUvTQpkb3duc3RyZWFtCmRvd25zd2luZy9NUwpkb3dudGltZS9NCmRvd250b3duL00KZG93bnRyZW5kL01TCmRvd250cm9kZGVuCmRvd250dXJuL01TCmRvd253YXJkL1MKZG93bndpbmQKZG93bnkvUlQKZG93cnkvU00KZG93c2UvRFJTWkcKZG93c2VyL00KZG94b2xvZ3kvU00KZG95ZW4vU00KZG95ZW5uZS9NUwpkb3ovWEdETlMKZG96ZS9NCmRvemVuL01ICmRvemlseQpkb3p5L1JUUApkcGkKZHB0CmRyYWIvTVlTUApkcmFiYmVyCmRyYWJiZXN0CmRyYWJuZXNzL00KZHJhY2htYS9NUwpkcmFjb25pYW4KZHJhZnQncwpkcmFmdC9BU0RHCmRyYWZ0ZWUvU00KZHJhZnRlci9TTQpkcmFmdGlseQpkcmFmdGluZXNzL00KZHJhZnRpbmcvTQpkcmFmdHNtYW4vTQpkcmFmdHNtYW5zaGlwL00KZHJhZnRzbWVuCmRyYWZ0c3dvbWFuL00KZHJhZnRzd29tZW4KZHJhZnR5L1JUUApkcmFnL01TCmRyYWdnZWQKZHJhZ2dpbmcKZHJhZ2d5L1RSCmRyYWduZXQvU00KZHJhZ29uL1NNCmRyYWdvbmZseS9TTQpkcmFnb29uL1NNREcKZHJhZ3N0ZXIvUwpkcmFpbi9TTURSWkcKZHJhaW5hZ2UvTQpkcmFpbmJvYXJkL1NNCmRyYWluZXIvTQpkcmFpbnBpcGUvTVMKZHJha2UvU00KZHJhbS9NUwpkcmFtYS9TTQpkcmFtYXRpYy9TCmRyYW1hdGljYWxseQpkcmFtYXRpY3MvTQpkcmFtYXRpc3QvU00KZHJhbWF0aXphdGlvbi9TTQpkcmFtYXRpemUvRFNHCmRyYW5rCmRyYXBlL0RSU01aRwpkcmFwZXIvTQpkcmFwZXJ5L1NNCmRyYXN0aWMKZHJhc3RpY2FsbHkKZHJhdApkcmF0dGVkCmRyYXVnaHRib2FyZC9TCmRyYXcvTVJaR1NKCmRyYXdiYWNrL01TCmRyYXdicmlkZ2UvTVMKZHJhd2VyL00KZHJhd2luZy9NCmRyYXdsL1NNREcKZHJhd24vQQpkcmF3c3RyaW5nL01TCmRyYXkvTVMKZHJlYWQvU01ERwpkcmVhZGZ1bC9QWQpkcmVhZGZ1bG5lc3MvTQpkcmVhZGxvY2tzL00KZHJlYWRub3VnaHQvTVMKZHJlYW0vU01EUlpHCmRyZWFtYm9hdC9NUwpkcmVhbWVkL1UKZHJlYW1lci9NCmRyZWFtaWx5CmRyZWFtaW5lc3MvTQpkcmVhbWxhbmQvTQpkcmVhbWxlc3MKZHJlYW1saWtlCmRyZWFtd29ybGQvU00KZHJlYW15L1JQVApkcmVhcgpkcmVhcmlseQpkcmVhcmluZXNzL00KZHJlYXJ5L1JQVApkcmVkZ2UvRFJTTVpHCmRyZWRnZXIvTQpkcmVncy9NCmRyZW5jaC9HRFMKZHJlc3MvQVVHU0RNCmRyZXNzYWdlL00KZHJlc3Nlci9NUwpkcmVzc2luZXNzL00KZHJlc3NpbmcvU00KZHJlc3NtYWtlci9TTQpkcmVzc21ha2luZy9NCmRyZXNzeS9UUFIKZHJldy9BCmRyaWJibGUvTVpHRFJTCmRyaWJibGVyL00KZHJpYmxldC9NUwpkcmllci9NCmRyaWZ0L1NNRFJaRwpkcmlmdGVyL00KZHJpZnRuZXQvUwpkcmlmdHdvb2QvTQpkcmlsbC9TTURSWkcKZHJpbGxlci9NCmRyaWxsbWFzdGVyL1NNCmRyaW5rL1NNUkJKWkcKZHJpbmthYmxlL1UKZHJpbmtlci9NCmRyaXAvTVMKZHJpcHBlZApkcmlwcGluZy9TTQpkcmlwcHkvVFIKZHJpdmUvUlNNWkdKCmRyaXZlbC9TWkdNRFIKZHJpdmVsZXIvTQpkcml2ZW4KZHJpdmVyL00KZHJpdmVzaGFmdC9TTQpkcml2ZXdheS9NUwpkcml6emxlL01HRFMKZHJpenpseQpkcm9ndWUvU00KZHJvaWQvUwpkcm9sbC9SUFQKZHJvbGxlcnkvU00KZHJvbGxuZXNzL00KZHJvbGx5CmRyb21lZGFyeS9TTQpkcm9uZS9EU01HCmRyb29sL1NNREcKZHJvb3AvR1NNRApkcm9vcGluZXNzL00KZHJvb3B5L1RQUgpkcm9wL01TCmRyb3BraWNrL01TCmRyb3BsZXQvU00KZHJvcG91dC9TTQpkcm9wcGVkCmRyb3BwZXIvU00KZHJvcHBpbmcvUwpkcm9wcGluZ3MvTQpkcm9wc2ljYWwKZHJvcHN5L00KZHJvc3MvTQpkcm91Z2h0L1NNCmRyb3ZlL1JTTVoKZHJvdmVyL00KZHJvd24vR1NKRApkcm93bmluZy9NCmRyb3dzZS9NR0RTCmRyb3dzaWx5CmRyb3dzaW5lc3MvTQpkcm93c3kvUlRQCmRydWIvUwpkcnViYmVkCmRydWJiZXIvU00KZHJ1YmJpbmcvTVMKZHJ1ZGdlL01HRFMKZHJ1ZGdlcnkvTQpkcnVnL01TCmRydWdnZWQKZHJ1Z2dpZS9TTQpkcnVnZ2luZwpkcnVnZ2lzdC9TTQpkcnVnZ3kKZHJ1Z3N0b3JlL01TCmRydWlkL1NNCmRydWlkaXNtL00KZHJ1bS9NUwpkcnVtYmVhdC9TTQpkcnVtbGluL1NNCmRydW1tZWQKZHJ1bW1lci9TTQpkcnVtbWluZwpkcnVtc3RpY2svU00KZHJ1bmsvU1RNTlIKZHJ1bmthcmQvTVMKZHJ1bmtlbi9QWQpkcnVua2VubmVzcy9NCmRydXBlL1NNCmRydXRoZXJzL00KZHJ5L1pUR0RSU01ZCmRyeWFkL1NNCmRyeWVyL1NNCmRyeW5lc3MvTQpkcnlzCmRyeXdhbGwvTQpkdWFsCmR1YWxpc20vTQpkdWFsaXR5L00KZHViL1NNCmR1YmJlZApkdWJiZXIvU00KZHViYmluL00KZHViYmluZwpkdWJpZXR5L00KZHViaW91cy9ZUApkdWJpb3VzbmVzcy9NCmR1Y2FsCmR1Y2F0L1NNCmR1Y2hlc3MvTVMKZHVjaHkvU00KZHVjay9NREdTCmR1Y2tiaWxsL1NNCmR1Y2tib2FyZHMKZHVja2xpbmcvU00KZHVja3BpbnMvTQpkdWNrd2VlZC9NCmR1Y2t5L1RSU00KZHVjdCdzL0sKZHVjdC9DS0lGUwpkdWN0aWxlCmR1Y3RpbGl0eS9NCmR1Y3RpbmcKZHVjdGxlc3MKZHVkL0dTTUQKZHVkZS9NUwpkdWRnZW9uL00KZHVlL1NNCmR1ZWwvTURSSlpHUwpkdWVsZXIvTQpkdWVsaXN0L1NNCmR1ZW5uYS9NUwpkdWV0L01TCmR1ZmYvTURSWkdTCmR1ZmZlci9NCmR1ZwpkdWdvdXQvTVMKZHVoCmR1a2UvTVMKZHVrZWRvbS9TTQpkdWxjZXQKZHVsY2ltZXIvTVMKZHVsbC9EUlBUR1MKZHVsbGFyZC9TTQpkdWxsbmVzcy9NCmR1bGx5CmR1bHkvVQpkdW1iL1JZUFQKZHVtYmJlbGwvU00KZHVtYmZvdW5kL1NERwpkdW1ibmVzcy9NCmR1bWJvL1MKZHVtYnN0cnVjawpkdW1id2FpdGVyL1NNCmR1bWR1bS9NUwpkdW1teS9TTQpkdW1wL01EUlpHUwpkdW1waW5lc3MvTQpkdW1wbGluZy9TTQpkdW1wc2l0ZS9TCmR1bXBzdGVyL1NNCmR1bXB5L1BUUgpkdW4vU00KZHVuY2UvU00KZHVuZGVyaGVhZC9NUwpkdW5lL01TCmR1bmcvTURHUwpkdW5nYXJlZS9NUwpkdW5nZW9uL1NNCmR1bmdoaWxsL01TCmR1bmsvTURHUwpkdW5uZWQKZHVubmVyCmR1bm5lc3QKZHVubmluZwpkdW5ubwpkdW8vU00KZHVvZGVjaW1hbApkdW9kZW5hCmR1b2RlbmFsCmR1b2RlbnVtL00KZHVvcG9seS9TCmR1cGUvTVpHRFJTCmR1cGVyL00KZHVwbGUKZHVwbGV4L01TCmR1cGxpY2F0ZSdzCmR1cGxpY2F0ZS9BR05EUwpkdXBsaWNhdGlvbi9BTQpkdXBsaWNhdG9yL01TCmR1cGxpY2l0b3VzCmR1cGxpY2l0eS9NCmR1cmFiaWxpdHkvTQpkdXJhYmxlCmR1cmFibHkKZHVyYW5jZS9NCmR1cmF0aW9uL00KZHVyZXNzL00KZHVyaW5nCmR1cnN0CmR1cnVtL00KZHVzay9NCmR1c2tpbmVzcy9NCmR1c2t5L1JUUApkdXN0L01EUlpHUwpkdXN0YmluL1NNCmR1c3RjYXJ0L1MKZHVzdGVyL00KZHVzdGluZXNzL00KZHVzdGxlc3MKZHVzdG1hbgpkdXN0bWVuCmR1c3RwYW4vU00KZHVzdHNoZWV0L1MKZHVzdHkvUlRQCmR1dGNoCmR1dGVvdXMvWQpkdXRpYWJsZQpkdXRpZnVsL1lQCmR1dGlmdWxuZXNzL00KZHV0eS9TTQpkdXZldC9TTQpkd2FyZi9TR01ECmR3YXJmaXNoCmR3YXJmaXNtL00KZHdlZWIvU00KZHdlbGwvU0paR1IKZHdlbGxlci9NCmR3ZWxsaW5nL00KZHdlbHQvSQpkd2luZGxlL0RTRwpkeWFkaWMKZHliYnVrL1NNCmR5YmJ1a2ltCmR5ZS9EUlNNWkcKZHllaW5nL0EKZHllci9NCmR5ZXN0dWZmL00KZHlpbmcvTQpkeWtlL01TCmR5bmFtaWMvTVMKZHluYW1pY2FsL1kKZHluYW1pY3MvTQpkeW5hbWlzbS9NCmR5bmFtaXRlL01aR0RSUwpkeW5hbWl0ZXIvTQpkeW5hbW8vU00KZHluYXN0aWMKZHluYXN0eS9TTQpkeXNlbnRlcnkvTQpkeXNmdW5jdGlvbi9NUwpkeXNmdW5jdGlvbmFsCmR5c2xlY3RpYy9TTQpkeXNsZXhpYS9NCmR5c2xleGljL1NNCmR5c3BlcHNpYS9NCmR5c3BlcHRpYy9NUwpkeXNwaGFnaWEKZHlzcHJvc2l1bS9NCmR5c3RvbmlhCmR6CmUnZW4KZSdlcgplL0ZEU1QKZUJheS9NCmVNdXNpYy9NCmVhCmVhY2gKZWFnZXIvUFRSWQplYWdlcm5lc3MvTQplYWdsZS9NUwplYWdsZXQvTVMKZWFyL1NNRFkKZWFyYWNoZS9TTQplYXJidWQvU00KZWFyZHJ1bS9TTQplYXJmdWwvU00KZWFybC9NUwplYXJsZG9tL1NNCmVhcmxpbmVzcy9NCmVhcmxvYmUvU00KZWFybHkvUlRQCmVhcm1hcmsvU01ERwplYXJtdWZmL1NNCmVhcm4vRFJaVEdKUwplYXJuZWQvVQplYXJuZXIvTQplYXJuZXN0L1NNWVAKZWFybmVzdG5lc3MvTQplYXJuaW5ncy9NCmVhcnBob25lL01TCmVhcnBpZWNlL1MKZWFycGx1Zy9TTQplYXJyaW5nL1NNCmVhcnNob3QvTQplYXJzcGxpdHRpbmcKZWFydGgncwplYXJ0aC9VRFlHCmVhcnRoYm91bmQKZWFydGhlbgplYXJ0aGVud2FyZS9NCmVhcnRoaW5lc3MvTQplYXJ0aGxpbmcvTVMKZWFydGhseS9SVAplYXJ0aHF1YWtlL1NNCmVhcnRocy9VCmVhcnRoc2hha2luZwplYXJ0aHdhcmQvUwplYXJ0aHdvcmsvTVMKZWFydGh3b3JtL01TCmVhcnRoeS9SVFAKZWFyd2F4L00KZWFyd2lnL1NNCmVhc2UvRURTTQplYXNlbC9TTQplYXNlbWVudC9TTQplYXNpbHkvVQplYXNpbmVzcy9VTQplYXNpbmcKZWFzdC9NCmVhc3Rib3VuZAplYXN0ZXJseS9TTQplYXN0ZXJuL1pSCmVhc3Rlcm5lci9NCmVhc3Rlcm5tb3N0CmVhc3R3YXJkL1MKZWFzeS9VUlRQCmVhc3lnb2luZwplYXQvWkdCU05SCmVhdGFibGUvU00KZWF0ZW4vVQplYXRlci9NCmVhdGVyeS9TTQplYXZlL01TCmVhdmVzZHJvcC9TCmVhdmVzZHJvcHBlZAplYXZlc2Ryb3BwZXIvU00KZWF2ZXNkcm9wcGluZwplYmIvU01ERwplYm9ueS9TTQplYnVsbGllbmNlL00KZWJ1bGxpZW50L1kKZWJ1bGxpdGlvbi9NCmVjY2VudHJpYy9TTQplY2NlbnRyaWNhbGx5CmVjY2VudHJpY2l0eS9TTQplY2NsCmVjY2xlc2lhbAplY2NsZXNpYXN0aWMvU00KZWNjbGVzaWFzdGljYWwvWQplY2hlbG9uL1NNCmVjaGlub2Rlcm0vU00KZWNobydzCmVjaG8vQURHCmVjaG9lcy9BCmVjaG9pYwplY2hvbG9jYXRpb24vTQplY2hvcwplY2xhaXIvU00KZWNsYXQvTQplY2xlY3RpYy9TTQplY2xlY3RpY2FsbHkKZWNsZWN0aWNpc20vTQplY2xpcHNlL0RTTUcKZWNsaXB0aWMvTQplY2xvZ3VlL1NNCmVjb2NpZGUvTQplY29sCmVjb2xvZ2ljCmVjb2xvZ2ljYWwvWQplY29sb2dpc3QvTVMKZWNvbG9neS9NCmVjb24KZWNvbm9tZXRyaWMKZWNvbm9taWMvUwplY29ub21pY2FsL1VZCmVjb25vbWljcy9NCmVjb25vbWlzdC9TTQplY29ub21pemUvRFJTWkcKZWNvbm9taXplci9NCmVjb25vbXkvU00KZWNvc3lzdGVtL01TCmVjb3RvdXJpc20vTQplY290b3VyaXN0L01TCmVjcnUvTQplY3N0YXN5L1NNCmVjc3RhdGljCmVjc3RhdGljYWxseQplY3UvUwplY3VtZW5pY2FsL1kKZWN1bWVuaWNpc20vTQplY3VtZW5pc20vTQplY3plbWEvTQplZC9BQ1NNCmVkYW1hbWUKZWRkeS9EU01HCmVkZWx3ZWlzcy9NCmVkZW1hL1NNCmVkZ2UvTVpHSkRSUwplZGdlci9NCmVkZ2V3aXNlCmVkZ2lseQplZGdpbmVzcy9NCmVkZ2luZy9NCmVkZ3kvUlRQCmVkaWJpbGl0eS9NCmVkaWJsZS9TTVAKZWRpYmxlbmVzcy9NCmVkaWN0L1NNCmVkaWZpY2F0aW9uL00KZWRpZmljZS9TTQplZGlmaWVyL00KZWRpZnkvRFJTWkdOCmVkaWZ5aW5nL1UKZWRpdCdzCmVkaXQvQURHUwplZGl0YWJsZQplZGl0ZWQvVQplZGl0aW9uL01TCmVkaXRvci9TTQplZGl0b3JpYWwvU01ZCmVkaXRvcmlhbGl6ZS9EU0cKZWRpdG9yc2hpcC9NCmVkdWMKZWR1Y2FiaWxpdHkvTQplZHVjYWJsZS9JCmVkdWNhdGUvQURTR05WCmVkdWNhdGVkL1UKZWR1Y2F0aW9uL0FNCmVkdWNhdGlvbmFsL1kKZWR1Y2F0aW9uYWxpc3QvUwplZHVjYXRpb25pc3QvUwplZHVjYXRpb25zCmVkdWNhdG9yL01TCmVkdWNlL0RTR0IKZWR1dGFpbm1lbnQvTQplZWsKZWVsL1NNCmVlcmllL1JUCmVlcmlseQplZXJpbmVzcy9NCmVmZi9HU0QKZWZmYWNlL0RTTEcKZWZmYWNlbWVudC9NCmVmZmVjdC9TTURHVgplZmZlY3RpdmUvSVBZCmVmZmVjdGl2ZW5lc3MvSU0KZWZmZWN0dWFsL0lZCmVmZmVjdHVhdGUvRFNHCmVmZmVtaW5hY3kvTQplZmZlbWluYXRlL1kKZWZmZW5kaS9TTQplZmZlcmVudAplZmZlcnZlc2NlL0dEUwplZmZlcnZlc2NlbmNlL00KZWZmZXJ2ZXNjZW50L1kKZWZmZXRlL1lQCmVmZmV0ZW5lc3MvTQplZmZpY2FjaW91cy9ZCmVmZmljYWN5L0lNCmVmZmljaWVuY3kvSVNNCmVmZmljaWVudC9JWQplZmZpZ3kvU00KZWZmbG9yZXNjZW5jZS9NCmVmZmxvcmVzY2VudAplZmZsdWVuY2UvTQplZmZsdWVudC9NUwplZmZsdXZpYQplZmZsdXZpdW0vTQplZmZvcnQvU00KZWZmb3J0bGVzcy9ZUAplZmZvcnRsZXNzbmVzcy9NCmVmZnJvbnRlcnkvTQplZmZ1bGdlbmNlL00KZWZmdWxnZW50CmVmZnVzZS9EU0dOVlgKZWZmdXNpb24vTQplZmZ1c2l2ZS9ZUAplZmZ1c2l2ZW5lc3MvTQplZ2FkCmVnYWxpdGFyaWFuL1NNCmVnYWxpdGFyaWFuaXNtL00KZWdnL0dTTUQKZWdnYmVhdGVyL01TCmVnZ2N1cC9TTQplZ2doZWFkL1NNCmVnZ25vZy9NCmVnZ3BsYW50L01TCmVnZ3NoZWxsL1NNCmVnbGFudGluZS9TTQplZ28vU00KZWdvY2VudHJpYy9NUwplZ29jZW50cmljYWxseQplZ29jZW50cmljaXR5L00KZWdvaXNtL00KZWdvaXN0L1NNCmVnb2lzdGljCmVnb2lzdGljYWwvWQplZ29tYW5pYS9NCmVnb21hbmlhYy9NUwplZ290aXNtL00KZWdvdGlzdC9TTQplZ290aXN0aWMKZWdvdGlzdGljYWwvWQplZ3JlZ2lvdXMvUFkKZWdyZWdpb3VzbmVzcy9NCmVncmVzcy9NUwplZ3JldC9TTQplaAplaWRlci9TTQplaWRlcmRvd24vTVMKZWlnZW52YWx1ZS9TCmVpZ2h0L1NNCmVpZ2h0ZWVuL01IUwplaWdodGVlbnRoL00KZWlnaHRlZW50aHMKZWlnaHRoL00KZWlnaHRocwplaWdodGlldGgvTQplaWdodGlldGhzCmVpZ2h0eS9TTUgKZWluc3RlaW5pdW0vTQplaXN0ZWRkZm9kL1MKZWl0aGVyCmVqYWN1bGF0ZS9HTlhEUwplamFjdWxhdGlvbi9NCmVqYWN1bGF0b3J5CmVqZWN0L1NERwplamVjdGlvbi9NUwplamVjdG9yL1NNCmVrZS9EU0cKZWxhYm9yYXRlL1lHTkRTUFgKZWxhYm9yYXRlbmVzcy9NCmVsYWJvcmF0aW9uL00KZWxhbi9NCmVsYW5kL1NNCmVsYXBzZS9EU0cKZWxhc3RpYy9NUwplbGFzdGljYWxseQplbGFzdGljYXRlZAplbGFzdGljaXR5L00KZWxhc3RpY2l6ZS9EU0cKZWxhdGUvRFNHTgplbGF0ZWQvWQplbGF0aW9uL00KZWxib3cvU01ERwplbGJvd3Jvb20vTQplbGRlci9TTVkKZWxkZXJiZXJyeS9TTQplbGRlcmNhcmUvTQplbGRlc3QKZWxkcml0Y2gKZWxlY3QncwplbGVjdC9BU0RHVgplbGVjdGFibGUKZWxlY3Rpb24vQU1TCmVsZWN0aW9uZWVyL0RHUwplbGVjdGl2ZS9NUwplbGVjdG9yL01TCmVsZWN0b3JhbC9ZCmVsZWN0b3JhdGUvTVMKZWxlY3RyaWMvUwplbGVjdHJpY2FsL1kKZWxlY3RyaWNpYW4vTVMKZWxlY3RyaWNpdHkvTQplbGVjdHJpZmljYXRpb24vTQplbGVjdHJpZmllci9NCmVsZWN0cmlmeS9aR05EUlMKZWxlY3Ryb2NhcmRpb2dyYW0vTVMKZWxlY3Ryb2NhcmRpb2dyYXBoL00KZWxlY3Ryb2NhcmRpb2dyYXBocwplbGVjdHJvY2FyZGlvZ3JhcGh5L00KZWxlY3Ryb2N1dGUvRFNYR04KZWxlY3Ryb2N1dGlvbi9NCmVsZWN0cm9kZS9TTQplbGVjdHJvZHluYW1pY3MKZWxlY3Ryb2VuY2VwaGFsb2dyYW0vTVMKZWxlY3Ryb2VuY2VwaGFsb2dyYXBoL00KZWxlY3Ryb2VuY2VwaGFsb2dyYXBoaWMKZWxlY3Ryb2VuY2VwaGFsb2dyYXBocwplbGVjdHJvZW5jZXBoYWxvZ3JhcGh5L00KZWxlY3Ryb2xvZ2lzdC9TTQplbGVjdHJvbHlzaXMvTQplbGVjdHJvbHl0ZS9NUwplbGVjdHJvbHl0aWMKZWxlY3Ryb21hZ25ldC9NUwplbGVjdHJvbWFnbmV0aWMKZWxlY3Ryb21hZ25ldGljYWxseQplbGVjdHJvbWFnbmV0aXNtL00KZWxlY3Ryb21vdGl2ZQplbGVjdHJvbi9NUwplbGVjdHJvbmljL1MKZWxlY3Ryb25pY2EvTQplbGVjdHJvbmljYWxseQplbGVjdHJvbmljcy9NCmVsZWN0cm9wbGF0ZS9EU0cKZWxlY3Ryb3Njb3BlL1NNCmVsZWN0cm9zY29waWMKZWxlY3Ryb3Nob2NrL00KZWxlY3Ryb3N0YXRpYy9TCmVsZWN0cm9zdGF0aWNzL00KZWxlY3Ryb3R5cGUvTVMKZWxlZW1vc3luYXJ5CmVsZWdhbmNlL0lNCmVsZWdhbnQvSVkKZWxlZ2lhYy9NUwplbGVnaWFjYWwKZWxlZ3kvU00KZWxlbQplbGVtZW50L01TCmVsZW1lbnRhbC9ZCmVsZW1lbnRhcnkKZWxlcGhhbnQvU00KZWxlcGhhbnRpYXNpcy9NCmVsZXBoYW50aW5lCmVsZXYKZWxldmF0ZS9YRFNHTgplbGV2YXRpb24vTQplbGV2YXRvci9NUwplbGV2ZW4vU01ICmVsZXZlbnMvUwplbGV2ZW50aC9NCmVsZXZlbnRocwplbGYvTQplbGZpbgplbGZpc2gKZWxpY2l0L1NERwplbGljaXRhdGlvbi9NCmVsaWRlL0RTRwplbGlnaWJpbGl0eS9JTQplbGlnaWJsZQplbGltaW5hdGUvWERTR04KZWxpbWluYXRpb24vTQplbGltaW5hdG9yL1MKZWxpc2lvbi9NUwplbGl0ZS9TTQplbGl0aXNtL00KZWxpdGlzdC9NUwplbGl4aXIvU00KZWxrL1NNCmVsbC9TTQplbGxpcHNlL01TCmVsbGlwc2lzL00KZWxsaXBzb2lkL1NNCmVsbGlwc29pZGFsCmVsbGlwdGljCmVsbGlwdGljYWwvWQplbG0vU00KZWxvY3V0aW9uL00KZWxvY3V0aW9uYXJ5CmVsb2N1dGlvbmlzdC9TTQplbG9kZWEvU00KZWxvbmdhdGUvRFNHTlgKZWxvbmdhdGlvbi9NCmVsb3BlL0RTR0wKZWxvcGVtZW50L01TCmVsb3F1ZW5jZS9NCmVsb3F1ZW50L1kKZWxzZQplbHNld2hlcmUKZWx1Y2lkYXRlL0RTR05YCmVsdWNpZGF0aW9uL00KZWx1ZGUvRFNHCmVsdXNpdmUvWVAKZWx1c2l2ZW5lc3MvTQplbHZlci9TTQplbHZlcwplbHZpc2gKZW0ncwplbS9TCmVtYWNpYXRlL0dORFMKZW1hY2lhdGlvbi9NCmVtYWlsL1NNREcKZW1hbmF0ZS9YRFNHTgplbWFuYXRpb24vTQplbWFuY2lwYXRlL0RTR04KZW1hbmNpcGF0aW9uL00KZW1hbmNpcGF0b3IvTVMKZW1hc2N1bGF0ZS9HTkRTCmVtYXNjdWxhdGlvbi9NCmVtYmFsbS9TWkdEUgplbWJhbG1lci9NCmVtYmFuay9TTEdECmVtYmFua21lbnQvU00KZW1iYXJnby9NREcKZW1iYXJnb2VzCmVtYmFyay9BRUdEUwplbWJhcmthdGlvbi9FTQplbWJhcmthdGlvbnMKZW1iYXJyYXNzL0dMRFMKZW1iYXJyYXNzZWQvVQplbWJhcnJhc3NpbmcvWQplbWJhcnJhc3NtZW50L1NNCmVtYmFzc3kvU00KZW1iYXR0bGVkCmVtYmVkL1MKZW1iZWRkZWQKZW1iZWRkaW5nCmVtYmVsbGlzaC9MR0RTCmVtYmVsbGlzaG1lbnQvU00KZW1iZXIvU00KZW1iZXp6bGUvWkdMRFJTCmVtYmV6emxlbWVudC9NCmVtYmV6emxlci9NCmVtYml0dGVyL0dMRFMKZW1iaXR0ZXJtZW50L00KZW1ibGF6b24vR0RMUwplbWJsYXpvbm1lbnQvTQplbWJsZW0vU00KZW1ibGVtYXRpYwplbWJsZW1hdGljYWxseQplbWJvZGltZW50L0VNCmVtYm9keS9BRUdTRAplbWJvbGRlbi9ER1MKZW1ib2xpc20vTVMKZW1ib2xpemF0aW9uCmVtYm9zcy9EUlNaRwplbWJvc3Nlci9NCmVtYm91Y2h1cmUvTQplbWJvd2VyL1NHRAplbWJyYWNlL0RTTUcKZW1icmFjZWFibGUKZW1icmFzdXJlL01TCmVtYnJvY2F0aW9uL01TCmVtYnJvaWRlci9TRFJaRwplbWJyb2lkZXJlci9NCmVtYnJvaWRlcnkvU00KZW1icm9pbC9ER0xTCmVtYnJvaWxtZW50L00KZW1icnlvL1NNCmVtYnJ5b2xvZ2ljYWwKZW1icnlvbG9naXN0L01TCmVtYnJ5b2xvZ3kvTQplbWJyeW9uaWMKZW1jZWUvRFNNCmVtY2VlaW5nCmVtZW5kL1NERwplbWVuZGF0aW9uL01TCmVtZXJhbGQvTVMKZW1lcmdlL0FEU0cKZW1lcmdlbmNlL0FNCmVtZXJnZW5jeS9TTQplbWVyZ2VudAplbWVyaXRhCmVtZXJpdHVzCmVtZXJ5L00KZW1ldGljL1NNCmVtZi9TCmVtaWdyYW50L1NNCmVtaWdyYXRlL0RTWEdOCmVtaWdyYXRpb24vTQplbWlncmUvU00KZW1pbmVuY2UvTVMKZW1pbmVudC9ZCmVtaXIvTVMKZW1pcmF0ZS9NUwplbWlzc2FyeS9TTQplbWlzc2lvbi9TTQplbWl0L1MKZW1pdHRlZAplbWl0dGVyL01TCmVtaXR0aW5nCmVtby9TTQplbW9qaS9TTQplbW9sbGllbnQvTVMKZW1vbHVtZW50L01TCmVtb3RlL1hEU0dOVgplbW90aWNvbi9TTQplbW90aW9uL00KZW1vdGlvbmFsL1VZCmVtb3Rpb25hbGlzbS9NCmVtb3Rpb25hbGl6ZS9HRFMKZW1vdGlvbmxlc3MKZW1vdGl2ZS9ZCmVtcGF0aGV0aWMKZW1wYXRoaXplL0RTRwplbXBhdGh5L00KZW1wZXJvci9NUwplbXBoYXNlcwplbXBoYXNpcy9NCmVtcGhhc2l6ZS9BR0RTCmVtcGhhdGljL1UKZW1waGF0aWNhbGx5CmVtcGh5c2VtYS9NCmVtcGlyZS9TTQplbXBpcmljCmVtcGlyaWNhbC9ZCmVtcGlyaWNpc20vTQplbXBpcmljaXN0L1NNCmVtcGxhY2VtZW50L1NNCmVtcGxveSdzCmVtcGxveS9BREdMUwplbXBsb3lhYmxlL1UKZW1wbG95ZWUvU00KZW1wbG95ZXIvU00KZW1wbG95bWVudC9VQU0KZW1wbG95bWVudHMKZW1wb3JpdW0vU00KZW1wb3dlci9TREdMCmVtcG93ZXJtZW50L00KZW1wcmVzcy9NUwplbXB0aWx5CmVtcHRpbmVzcy9NCmVtcHR5L1RHUERSU00KZW1weXJlYW4vTQplbXUvU00KZW11bGF0ZS9EU0dOVlgKZW11bGF0aW9uL00KZW11bGF0b3IvU00KZW11bHNpZmljYXRpb24vTQplbXVsc2lmaWVyL00KZW11bHNpZnkvTkRSU1pHCmVtdWxzaW9uL01TCmVuL1NNCmVuYWJsZS9EUlNaRwplbmFibGVyL00KZW5hY3QvQVNMREcKZW5hY3RtZW50L0FTTQplbmFtZWwvSlNaR01EUgplbmFtZWxlci9NCmVuYW1lbHdhcmUvTQplbmFtb3IvU0dECmVuYwplbmNhbXAvTFNHRAplbmNhbXBtZW50L01TCmVuY2Fwc3VsYXRlL1hHTkRTCmVuY2Fwc3VsYXRpb24vTQplbmNhc2UvTERTRwplbmNhc2VtZW50L00KZW5jZXBoYWxpdGljCmVuY2VwaGFsaXRpcy9NCmVuY2hhaW4vREdTCmVuY2hhbnQvRUxER1MKZW5jaGFudGVyL01TCmVuY2hhbnRpbmcvWQplbmNoYW50bWVudC9FTQplbmNoYW50bWVudHMKZW5jaGFudHJlc3MvTVMKZW5jaGlsYWRhL1NNCmVuY2lwaGVyL1NHRAplbmNpcmNsZS9EU0dMCmVuY2lyY2xlbWVudC9NCmVuY2wKZW5jbGF2ZS9NUwplbmNsb3NlL0dEUwplbmNsb3NlZC9VCmVuY2xvc3VyZS9TTQplbmNvZGUvRFJTWkcKZW5jb2Rlci9NCmVuY29taXVtL01TCmVuY29tcGFzcy9HRFMKZW5jb3JlL0RTTUcKZW5jb3VudGVyL0dTTUQKZW5jb3VyYWdlL0RTTEcKZW5jb3VyYWdlbWVudC9TTQplbmNvdXJhZ2luZy9ZCmVuY3JvYWNoL0dMRFMKZW5jcm9hY2htZW50L1NNCmVuY3J1c3QvREdTCmVuY3J1c3RhdGlvbi9TTQplbmNyeXB0L0RHUwplbmNyeXB0aW9uCmVuY3VtYmVyL0VHU0QKZW5jdW1iZXJlZC9VCmVuY3VtYnJhbmNlL01TCmVuY3kKZW5jeWNsaWNhbC9TTQplbmN5Y2xvcGVkaWEvTVMKZW5jeWNsb3BlZGljCmVuY3lzdC9MU0dECmVuY3lzdG1lbnQvTQplbmQvR1ZTSk1ECmVuZGFuZ2VyL1NHREwKZW5kYW5nZXJtZW50L00KZW5kZWFyL1NHTEQKZW5kZWFyaW5nL1kKZW5kZWFybWVudC9TTQplbmRlYXZvci9HU01ECmVuZGVtaWMvTVMKZW5kZW1pY2FsbHkKZW5kZ2FtZS9TCmVuZGluZy9NCmVuZGl2ZS9TTQplbmRsZXNzL1BZCmVuZGxlc3NuZXNzL00KZW5kbW9zdAplbmRvY2FyZGl0aXMKZW5kb2NyaW5lL01TCmVuZG9jcmlub2xvZ2lzdC9NUwplbmRvY3Jpbm9sb2d5L00KZW5kb2dlbm91cy9ZCmVuZG9tZXRyaWFsCmVuZG9tZXRyaW9zaXMKZW5kb21ldHJpdW0KZW5kb3JwaGluL01TCmVuZG9yc2UvTFpHRFJTCmVuZG9yc2VtZW50L01TCmVuZG9yc2VyL00KZW5kb3Njb3BlL01TCmVuZG9zY29waWMKZW5kb3Njb3B5L00KZW5kb3RoZWxpYWwKZW5kb3RoZXJtaWMKZW5kb3cvU0RMRwplbmRvd21lbnQvTVMKZW5kcG9pbnQvU00KZW5kdWUvRFNHCmVuZHVyYWJsZS9VCmVuZHVyYW5jZS9NCmVuZHVyZS9EU0JHCmVuZHdheXMKZW5lbWEvU00KZW5lbXkvU00KZW5lcmdldGljCmVuZXJnZXRpY2FsbHkKZW5lcmdpemUvWkdEUlMKZW5lcmdpemVyL00KZW5lcmd5L1NNCmVuZXJ2YXRlL0dORFMKZW5lcnZhdGlvbi9NCmVuZmVlYmxlL0dEU0wKZW5mZWVibGVtZW50L00KZW5maWxhZGUvRFNNRwplbmZvbGQvU0dECmVuZm9yY2UvTFpHRFJTCmVuZm9yY2VhYmxlL1UKZW5mb3JjZWQvVQplbmZvcmNlbWVudC9NCmVuZm9yY2VyL00KZW5mcmFuY2hpc2UvRUdEU0wKZW5mcmFuY2hpc2VtZW50L0VNCmVuZ2FnZS9FQURTRwplbmdhZ2VtZW50L0VNUwplbmdhZ2luZ2x5CmVuZ2VuZGVyL1NHRAplbmdpbmUvU00KZW5naW5lZXIvTURHUwplbmdpbmVlcmluZy9NCmVuZ29yZ2UvTEdEUwplbmdvcmdlbWVudC9NCmVuZ3JhbS9TTQplbmdyYXZlL1pHSkRSUwplbmdyYXZlci9NCmVuZ3JhdmluZy9NCmVuZ3Jvc3MvR0xEUwplbmdyb3NzbWVudC9NCmVuZ3VsZi9TTEdECmVuZ3VsZm1lbnQvTQplbmhhbmNlL0xaR0RSUwplbmhhbmNlbWVudC9TTQplbmlnbWEvU00KZW5pZ21hdGljCmVuaWdtYXRpY2FsbHkKZW5qYW1ibWVudC9TTQplbmpvaW4vU0dECmVuam95L0dCTFNECmVuam95YWJseQplbmpveW1lbnQvU00KZW5sYXJnZS9MWkdEUlMKZW5sYXJnZWFibGUKZW5sYXJnZW1lbnQvTVMKZW5sYXJnZXIvTQplbmxpZ2h0ZW4vU0dMRAplbmxpZ2h0ZW5lZC9VCmVubGlnaHRlbm1lbnQvTQplbmxpc3QvQURHU0wKZW5saXN0ZWUvU00KZW5saXN0bWVudC9BTQplbmxpc3RtZW50cwplbmxpdmVuL1NMREcKZW5saXZlbm1lbnQvTQplbm1lc2gvRFNHTAplbm1lc2htZW50L00KZW5taXR5L1NNCmVubm9ibGUvRFNHTAplbm5vYmxlbWVudC9NCmVubnVpL00KZW5vcm1pdHkvU00KZW5vcm1vdXMvUFkKZW5vcm1vdXNuZXNzL00KZW5vdWdoL00KZW5wbGFuZS9EU0cKZW5xdWlyZXIvUwplbnF1aXJpbmdseQplbnJhZ2UvR0RTCmVucmFwdHVyZS9EU0cKZW5yaWNoL0RTTEcKZW5yaWNobWVudC9NCmVucm9sbC9ETFNHCmVucm9sbG1lbnQvTVMKZW5zY29uY2UvRFNHCmVuc2VtYmxlL1NNCmVuc2hyaW5lL0dMRFMKZW5zaHJpbmVtZW50L00KZW5zaHJvdWQvREdTCmVuc2lnbi9NUwplbnNpbGFnZS9NCmVuc2xhdmUvRFNHTAplbnNsYXZlbWVudC9NCmVuc25hcmUvRFNMRwplbnNuYXJlbWVudC9NCmVuc3VlL0RTRwplbnN1cmUvWkdEUlMKZW5zdXJlci9NCmVudGFpbC9EU0dMCmVudGFpbG1lbnQvTQplbnRhbmdsZS9FRFNMRwplbnRhbmdsZW1lbnQvRU0KZW50YW5nbGVtZW50cwplbnRlbnRlL1NNCmVudGVyL0FTR0QKZW50ZXJpYwplbnRlcml0aXMvTQplbnRlcnByaXNlL01HUwplbnRlcnByaXNpbmcvWQplbnRlcnRhaW4vWkdEUlNMCmVudGVydGFpbmVyL00KZW50ZXJ0YWluaW5nL01ZCmVudGVydGFpbm1lbnQvTVMKZW50aHJhbGwvR0RTTAplbnRocmFsbG1lbnQvTQplbnRocm9uZS9HRFNMCmVudGhyb25lbWVudC9TTQplbnRodXNlL0RTRwplbnRodXNpYXNtL01TCmVudGh1c2lhc3QvTVMKZW50aHVzaWFzdGljL1UKZW50aHVzaWFzdGljYWxseQplbnRpY2UvR0RTTAplbnRpY2VtZW50L01TCmVudGljaW5nL1kKZW50aXJlL1kKZW50aXJldHkvTQplbnRpdGxlL0RTR0wKZW50aXRsZW1lbnQvU00KZW50aXR5L1NNCmVudG9tYi9EU0dMCmVudG9tYm1lbnQvTQplbnRvbW9sb2dpY2FsCmVudG9tb2xvZ2lzdC9NUwplbnRvbW9sb2d5L00KZW50b3VyYWdlL1NNCmVudHInYWN0ZQplbnRyYWlscy9NCmVudHJhbmNlL0xEU01HCmVudHJhbmNlbWVudC9NCmVudHJhbmNpbmcvWQplbnRyYW50L1NNCmVudHJhcC9MUwplbnRyYXBtZW50L00KZW50cmFwcGVkCmVudHJhcHBpbmcKZW50cmVhdC9HU0QKZW50cmVhdGluZy9ZCmVudHJlYXR5L1NNCmVudHJlZS9NUwplbnRyZW5jaC9EU0dMCmVudHJlbmNobWVudC9NUwplbnRyZXByZW5ldXIvU00KZW50cmVwcmVuZXVyaWFsCmVudHJlcHJlbmV1cnNoaXAKZW50cm9weS9NCmVudHJ1c3QvU0dECmVudHJ5L0FTTQplbnRyeXBob25lL1MKZW50cnl3YXkvTVMKZW50d2luZS9EU0cKZW51bWVyYWJsZQplbnVtZXJhdGUvRFNHTlgKZW51bWVyYXRpb24vTQplbnVtZXJhdG9yL1NNCmVudW5jaWF0ZS9EU0dOCmVudW5jaWF0aW9uL00KZW51cmVzaXMvTQplbnZlbG9wL1NMRFJaRwplbnZlbG9wZS9TTQplbnZlbG9wZXIvTQplbnZlbG9wbWVudC9NCmVudmVub20vU0RHCmVudmlhYmxlL1UKZW52aWFibHkKZW52aW91cy9QWQplbnZpb3VzbmVzcy9NCmVudmlyb25tZW50L01TCmVudmlyb25tZW50YWwvWQplbnZpcm9ubWVudGFsaXNtL00KZW52aXJvbm1lbnRhbGlzdC9TTQplbnZpcm9ucy9NCmVudmlzYWdlL0dEUwplbnZpc2lvbi9ER1MKZW52b3kvU00KZW52eS9EU01HCmVudnlpbmcvWQplbnp5bWF0aWMKZW56eW1lL1NNCmVvbGlhbgplb24vU00KZW9zaW5vcGhpbC9TCmVvc2lub3BoaWxpYwplcGF1bGV0L1NNCmVwZWUvTVMKZXBoZWRyaW5lL00KZXBoZW1lcmEvTQplcGhlbWVyYWwvWQplcGljL01TCmVwaWNlbnRlci9NUwplcGljdXJlL1NNCmVwaWN1cmVhbi9NUwplcGlkZW1pYy9TTQplcGlkZW1pY2FsbHkKZXBpZGVtaW9sb2dpY2FsCmVwaWRlbWlvbG9naXN0L1NNCmVwaWRlbWlvbG9neS9NCmVwaWRlcm1hbAplcGlkZXJtaWMKZXBpZGVybWlzL01TCmVwaWR1cmFsL1MKZXBpZ2xvdHRpcy9NUwplcGlncmFtL1NNCmVwaWdyYW1tYXRpYwplcGlncmFwaC9NCmVwaWdyYXBocwplcGlncmFwaHkvTQplcGlsZXBzeS9NCmVwaWxlcHRpYy9TTQplcGlsb2d1ZS9NUwplcGluZXBocmluZS9NCmVwaXBoYW55L1NNCmVwaXNjb3BhY3kvTQplcGlzY29wYWwKZXBpc2NvcGF0ZS9NCmVwaXNvZGUvU00KZXBpc29kaWMKZXBpc29kaWNhbGx5CmVwaXN0ZW1pYwplcGlzdGVtb2xvZ2ljYWwKZXBpc3RlbW9sb2d5CmVwaXN0bGUvU00KZXBpc3RvbGFyeQplcGl0YXBoL00KZXBpdGFwaHMKZXBpdGhlbGlhbAplcGl0aGVsaXVtL00KZXBpdGhldC9TTQplcGl0b21lL1NNCmVwaXRvbWl6ZS9HRFMKZXBvY2gvTQplcG9jaGFsCmVwb2NocwplcG9ueW1vdXMKZXBveHkvRFNNRwplcHNpbG9uL1NNCmVxdWFiaWxpdHkvTQplcXVhYmxlCmVxdWFibHkKZXF1YWwvU01EWUcKZXF1YWxpdHkvSU0KZXF1YWxpemF0aW9uL00KZXF1YWxpemUvWkdEUlMKZXF1YWxpemVyL00KZXF1YW5pbWl0eS9NCmVxdWF0ZS9EU0dOQlgKZXF1YXRpb24vTQplcXVhdG9yL1NNCmVxdWF0b3JpYWwKZXF1ZXJyeS9TTQplcXVlc3RyaWFuL1NNCmVxdWVzdHJpYW5pc20vTQplcXVlc3RyaWVubmUvU00KZXF1aWRpc3RhbnQvWQplcXVpbGF0ZXJhbC9TTQplcXVpbGlicml1bS9FTQplcXVpbmUvU00KZXF1aW5vY3RpYWwKZXF1aW5veC9NUwplcXVpcC9BUwplcXVpcGFnZS9NUwplcXVpcG1lbnQvTQplcXVpcG9pc2UvTQplcXVpcHBlZC9VQQplcXVpcHBpbmcvQQplcXVpdGFibGUvSQplcXVpdGFibHkvSQplcXVpdGF0aW9uL00KZXF1aXR5L0lTTQplcXVpdgplcXVpdmFsZW5jZS9NUwplcXVpdmFsZW5jeS9TTQplcXVpdmFsZW50L01ZUwplcXVpdm9jYWwvVVkKZXF1aXZvY2FsbmVzcy9NCmVxdWl2b2NhdGUvR05YRFMKZXF1aXZvY2F0aW9uL00KZXF1aXZvY2F0b3IvU00KZXIvQwplcmEvU00KZXJhZGljYWJsZS9JCmVyYWRpY2F0ZS9EU0dOCmVyYWRpY2F0aW9uL00KZXJhZGljYXRvci9NUwplcmFzZS9EUlNCWkcKZXJhc2VyL00KZXJhc3VyZS9TTQplcmJpdW0vTQplcmUKZXJlY3QvUFNHRFkKZXJlY3RpbGUKZXJlY3Rpb24vU00KZXJlY3RuZXNzL00KZXJlY3Rvci9NUwplcmVsb25nCmVyZW1pdGUvTVMKZXJnL1NNCmVyZ28KZXJnb25vbWljL1MKZXJnb25vbWljYWxseQplcmdvbm9taWNzL00KZXJnb3N0ZXJvbC9NCmVyZ290L00KZXJtaW5lL1NNCmVyb2RlL0RTRwplcm9kaWJsZQplcm9nZW5vdXMKZXJvc2lvbi9NCmVyb3NpdmUKZXJvdGljL1MKZXJvdGljYS9NCmVyb3RpY2FsbHkKZXJvdGljaXNtL00KZXJyL0dTRAplcnJhbmQvU00KZXJyYW50L0kKZXJyYXRhL1NNCmVycmF0aWMKZXJyYXRpY2FsbHkKZXJyYXR1bS9NCmVycm9uZW91cy9ZCmVycm9yL1NNCmVyc2F0ei9NUwplcnN0CmVyc3R3aGlsZQplcnVjdC9TREcKZXJ1Y3RhdGlvbi9TTQplcnVkaXRlL1lOCmVydWRpdGlvbi9NCmVydXB0L1NER1YKZXJ1cHRpb24vTVMKZXJ5c2lwZWxhcy9NCmVyeXRocm9jeXRlL1NNCmVyeXRocm9teWNpbgplc2NhbGF0ZS9DRFNHTgplc2NhbGF0aW9uL0NNCmVzY2FsYXRpb25zCmVzY2FsYXRvci9NUwplc2NhbGxvcC9TR01ECmVzY2Fsb3BlL1MKZXNjYXBhZGUvTVMKZXNjYXBlL0xNR0RTCmVzY2FwZWUvTVMKZXNjYXBlbWVudC9TTQplc2NhcGlzbS9NCmVzY2FwaXN0L01TCmVzY2Fwb2xvZ2lzdC9TCmVzY2Fwb2xvZ3kKZXNjYXJnb3QvTVMKZXNjYXJvbGUvTVMKZXNjYXJwbWVudC9NUwplc2NoYXRvbG9naWNhbAplc2NoYXRvbG9neQplc2NoZXcvU0RHCmVzY29ydC9TTURHCmVzY3JpdG9pcmUvTVMKZXNjcm93L1NNCmVzY3Vkby9TTQplc2N1dGNoZW9uL1NNCmVzb3BoYWdlYWwKZXNvcGhhZ2kKZXNvcGhhZ3VzL00KZXNvdGVyaWMKZXNvdGVyaWNhbGx5CmVzcAplc3BhZHJpbGxlL01TCmVzcGFsaWVyL01EU0cKZXNwZWNpYWwvWQplc3Bpb25hZ2UvTQplc3BsYW5hZGUvTVMKZXNwb3VzYWwvTQplc3BvdXNlL0dEUwplc3ByZXNzby9NUwplc3ByaXQvTQplc3B5L0RTRwplc3F1aXJlL1NNCmVzc2F5L1NNRFJaRwplc3NheWVyL00KZXNzYXlpc3QvU00KZXNzZW5jZS9TTQplc3NlbnRpYWwvSU1TCmVzc2VudGlhbGx5CmVzdGFibGlzaC9BRVNER0wKZXN0YWJsaXNobWVudC9BRU0KZXN0YWJsaXNobWVudHMKZXN0YXRlL1NNCmVzdGVlbS9FU01ERwplc3Rlci9TTQplc3RpbWFibGUvSQplc3RpbWF0ZS9NR05EU1gKZXN0aW1hdGlvbi9NCmVzdGltYXRvci9TTQplc3RvcHBlbAplc3RyYW5nZS9MRFNHCmVzdHJhbmdlbWVudC9NUwplc3Ryb2dlbi9NCmVzdHJvdXMKZXN0cnVzL01TCmVzdHVhcnkvU00KZXRhL1NNCmV0YwpldGNoL0RSU1pHSgpldGNoZXIvTQpldGNoaW5nL00KZXRlcm5hbC9ZUApldGVybmFsbmVzcy9NCmV0ZXJuaXR5L1NNCmV0aGFuZS9NCmV0aGFub2wvTQpldGhlci9NCmV0aGVyZWFsL1kKZXRoaWMvU00KZXRoaWNhbC9VWQpldGhpY3MvTQpldGhuaWMvU00KZXRobmljYWxseQpldGhuaWNpdHkvTQpldGhub2NlbnRyaWMKZXRobm9jZW50cmlzbS9NCmV0aG5vZ3JhcGhlci9TCmV0aG5vZ3JhcGhpYwpldGhub2dyYXBoaWNhbGx5CmV0aG5vZ3JhcGh5CmV0aG5vbG9naWNhbC9ZCmV0aG5vbG9naXN0L1NNCmV0aG5vbG9neS9NCmV0aG9sb2dpY2FsCmV0aG9sb2dpc3QvTVMKZXRob2xvZ3kvTQpldGhvcy9NCmV0aHlsL00KZXRoeWxlbmUvTQpldGlvbGF0ZWQKZXRpb2xvZ2ljCmV0aW9sb2dpY2FsCmV0aW9sb2d5L1NNCmV0aXF1ZXR0ZS9NCmV0dWRlL1NNCmV0eW1vbG9naWNhbC9ZCmV0eW1vbG9naXN0L1NNCmV0eW1vbG9neS9TTQpldWNhbHlwdGkKZXVjYWx5cHR1cy9NUwpldWNocmUvRFNNRwpldWNsaWRlYW4KZXVnZW5pYy9TCmV1Z2VuaWNhbGx5CmV1Z2VuaWNpc3QvTVMKZXVnZW5pY3MvTQpldWxvZ2lzdC9NUwpldWxvZ2lzdGljCmV1bG9naXplL1pHRFJTCmV1bG9naXplci9NCmV1bG9neS9TTQpldW51Y2gvTQpldW51Y2hzCmV1cGhlbWlzbS9TTQpldXBoZW1pc3RpYwpldXBoZW1pc3RpY2FsbHkKZXVwaG9uaW91cy9ZCmV1cGhvbnkvTQpldXBob3JpYS9NCmV1cGhvcmljCmV1cGhvcmljYWxseQpldXJla2EKZXVyby9NUwpldXJvcGl1bS9NCmV1dGVjdGljCmV1dGhhbmFzaWEvTQpldXRoYW5pemUvRFNHCmV1dGhlbmljcy9NCmV2YWN1YXRlL1hEU0dOCmV2YWN1YXRpb24vTQpldmFjdWVlL01TCmV2YWRlL0RSU1pHCmV2YWRlci9NCmV2YWx1YXRlL0FHTlZEU1gKZXZhbHVhdGlvbi9BTQpldmFuZXNjZW5jZS9NCmV2YW5lc2NlbnQKZXZhbmdlbGljCmV2YW5nZWxpY2FsL1NNWQpldmFuZ2VsaWNhbGlzbS9NCmV2YW5nZWxpc20vTQpldmFuZ2VsaXN0L01TCmV2YW5nZWxpc3RpYwpldmFuZ2VsaXplL0dEUwpldmFwb3JhdGUvR05EUwpldmFwb3JhdGlvbi9NCmV2YXBvcmF0b3IvU00KZXZhc2lvbi9TTQpldmFzaXZlL1lQCmV2YXNpdmVuZXNzL00KZXZlL0FTTQpldmVuL01EUllUR1NKUApldmVuaGFuZGVkL1kKZXZlbmluZy9NCmV2ZW5uZXNzL1VNCmV2ZW5zb25nL00KZXZlbnQvU00KZXZlbnRmdWwvVVkKZXZlbnRmdWxuZXNzL00KZXZlbnRpZGUvTQpldmVudHVhbC9ZCmV2ZW50dWFsaXR5L1NNCmV2ZW50dWF0ZS9HRFMKZXZlcgpldmVyZ2xhZGUvU00KZXZlcmdyZWVuL1NNCmV2ZXJsYXN0aW5nL01ZUwpldmVybW9yZQpldmVyeQpldmVyeWJvZHkvTQpldmVyeWRheQpldmVyeW9uZS9NCmV2ZXJ5cGxhY2UKZXZlcnl0aGluZy9NCmV2ZXJ5d2hlcmUKZXZpY3QvU0RHCmV2aWN0aW9uL01TCmV2aWRlbmNlL01HRFMKZXZpZGVudC9ZCmV2aWwvTVJZVFNQCmV2aWxkb2VyL1NNCmV2aWxkb2luZy9NCmV2aWxsZXIKZXZpbGxlc3QKZXZpbG5lc3MvTQpldmluY2UvRFNHCmV2aXNjZXJhdGUvRFNHTgpldmlzY2VyYXRpb24vTQpldm9jYXRpb24vTVMKZXZvY2F0aXZlL1kKZXZva2UvRFNHCmV2b2x1dGlvbi9NCmV2b2x1dGlvbmFyeQpldm9sdXRpb25pc3QvU00KZXZvbHZlL0RTRwpld2UvUlNNWgpld2VyL00KZXgvTVMKZXhhYnl0ZS9NUwpleGFjZXJiYXRlL0dORFMKZXhhY2VyYmF0aW9uL00KZXhhY3QvU1BEUllURwpleGFjdGluZy9ZCmV4YWN0aW9uL00KZXhhY3RpdHVkZS9NCmV4YWN0bmVzcy9JTQpleGFnZ2VyYXRlL1hEU0dOCmV4YWdnZXJhdGVkL1kKZXhhZ2dlcmF0aW9uL00KZXhhZ2dlcmF0b3IvTVMKZXhhbHQvU0RHCmV4YWx0YXRpb24vTQpleGFtL01TCmV4YW1pbmF0aW9uL0FNUwpleGFtaW5lL0FHRFMKZXhhbWluZXIvTVMKZXhhbXBsZS9NR0RTCmV4YW1wbGVkL1UKZXhhc3BlcmF0ZS9EU0dOCmV4YXNwZXJhdGVkL1kKZXhhc3BlcmF0aW5nL1kKZXhhc3BlcmF0aW9uL00KZXhjYXZhdGUvR05EU1gKZXhjYXZhdGlvbi9NCmV4Y2F2YXRvci9TTQpleGNlZWQvR1NECmV4Y2VlZGluZy9ZCmV4Y2VsL1MKZXhjZWxsZWQKZXhjZWxsZW5jZS9NCmV4Y2VsbGVuY3kvU00KZXhjZWxsZW50L1kKZXhjZWxsaW5nCmV4Y2Vsc2lvci9NCmV4Y2VwdC9HU0QKZXhjZXB0aW9uL0JTTQpleGNlcHRpb25hYmxlL1UKZXhjZXB0aW9uYWwvVVkKZXhjZXB0aW9uYWxpc20KZXhjZXJwdC9NREdTCmV4Y2Vzcy9WTVMKZXhjZXNzaXZlL1kKZXhjaGFuZ2UvRFNNRwpleGNoYW5nZWFibGUKZXhjaGVxdWVyL1NNCmV4Y2lzZS9YRFNNR04KZXhjaXNpb24vTQpleGNpdGFiaWxpdHkvTQpleGNpdGFibHkKZXhjaXRhdGlvbi9NCmV4Y2l0ZS9CRFJTTFpHCmV4Y2l0ZWQvWQpleGNpdGVtZW50L1NNCmV4Y2l0ZXIvTQpleGNpdGluZy9ZCmV4Y2wKZXhjbGFpbS9ER1MKZXhjbGFtYXRpb24vU00KZXhjbGFtYXRvcnkKZXhjbHVkZS9HRFMKZXhjbHVzaW9uL01TCmV4Y2x1c2lvbmFyeQpleGNsdXNpdmUvUE1ZUwpleGNsdXNpdmVuZXNzL00KZXhjbHVzaXZpdHkvTQpleGNvbW11bmljYXRlL0dORFNYCmV4Y29tbXVuaWNhdGlvbi9NCmV4Y29yaWF0ZS9EU0dOWApleGNvcmlhdGlvbi9NCmV4Y3JlbWVudC9NCmV4Y3JlbWVudGFsCmV4Y3Jlc2NlbmNlL01TCmV4Y3Jlc2NlbnQKZXhjcmV0YS9NCmV4Y3JldGUvWEdORFMKZXhjcmV0aW9uL00KZXhjcmV0b3J5CmV4Y3J1Y2lhdGluZy9ZCmV4Y3VscGF0ZS9EU0dOCmV4Y3VscGF0aW9uL00KZXhjdWxwYXRvcnkKZXhjdXJzaW9uL01TCmV4Y3Vyc2lvbmlzdC9NUwpleGN1cnNpdmUvWVAKZXhjdXJzaXZlbmVzcy9NCmV4Y3VzYWJsZS9JCmV4Y3VzYWJseS9JCmV4Y3VzZS9EU0JNRwpleGN1c2VkL1UKZXhlYy9NUwpleGVjcmFibGUKZXhlY3JhYmx5CmV4ZWNyYXRlL0RTR04KZXhlY3JhdGlvbi9NCmV4ZWN1dGUvQlhHTlZEUwpleGVjdXRpb24vWk1SCmV4ZWN1dGlvbmVyL00KZXhlY3V0aXZlL1NNCmV4ZWN1dG9yL01TCmV4ZWN1dHJpY2VzCmV4ZWN1dHJpeC9NCmV4ZWdlc2VzCmV4ZWdlc2lzL00KZXhlZ2V0aWMKZXhlZ2V0aWNhbApleGVtcGxhci9TTQpleGVtcGxhcnkKZXhlbXBsaWZpY2F0aW9uL00KZXhlbXBsaWZ5L0dEU1hOCmV4ZW1wdC9TR0QKZXhlbXB0aW9uL1NNCmV4ZXJjaXNlL0RSU01aRwpleGVyY2lzZXIvTQpleGVydC9TREcKZXhlcnRpb24vTVMKZXhldW50CmV4Zm9saWF0ZS9HTkRTCmV4aGFsYXRpb24vTVMKZXhoYWxlL0RTRwpleGhhdXN0L0dWTURTCmV4aGF1c3RpYmxlL0kKZXhoYXVzdGlvbi9NCmV4aGF1c3RpdmUvWVAKZXhoYXVzdGl2ZW5lc3MvTQpleGhpYml0L0dNRFMKZXhoaWJpdGlvbi9NUwpleGhpYml0aW9uaXNtL00KZXhoaWJpdGlvbmlzdC9NUwpleGhpYml0b3IvU00KZXhoaWxhcmF0ZS9EU0dOCmV4aGlsYXJhdGlvbi9NCmV4aG9ydC9TREcKZXhob3J0YXRpb24vTVMKZXhodW1hdGlvbi9NUwpleGh1bWUvRFNHCmV4aWdlbmNlL01TCmV4aWdlbmN5L1NNCmV4aWdlbnQKZXhpZ3VpdHkvTQpleGlndW91cwpleGlsZS9EU01HCmV4aXN0L1NERwpleGlzdGVuY2UvTVMKZXhpc3RlbnQKZXhpc3RlbnRpYWwvWQpleGlzdGVudGlhbGlzbS9NCmV4aXN0ZW50aWFsaXN0L01TCmV4aXQvTURHUwpleG9iaW9sb2d5L00KZXhvZHVzL01TCmV4b2dlbm91cwpleG9uCmV4b25lcmF0ZS9HTkRTCmV4b25lcmF0aW9uL00KZXhvcGxhbmV0L01TCmV4b3JiaXRhbmNlL00KZXhvcmJpdGFudC9ZCmV4b3JjaXNlL0RTRwpleG9yY2lzbS9TTQpleG9yY2lzdC9TTQpleG9za2VsZXRvbi9TTQpleG9zcGhlcmUvU00KZXhvdGhlcm1pYwpleG90aWMvU00KZXhvdGljYQpleG90aWNhbGx5CmV4b3RpY2lzbS9NCmV4cApleHBhbmQvQkdTRApleHBhbnNlL1hNTlZTCmV4cGFuc2libGUKZXhwYW5zaW9uL00KZXhwYW5zaW9uYXJ5CmV4cGFuc2lvbmlzbS9NCmV4cGFuc2lvbmlzdC9NUwpleHBhbnNpdmUvWVAKZXhwYW5zaXZlbmVzcy9NCmV4cGF0L1MKZXhwYXRpYXRlL0dORFMKZXhwYXRpYXRpb24vTQpleHBhdHJpYXRlL0RTTUdOCmV4cGF0cmlhdGlvbi9NCmV4cGVjdC9HU0QKZXhwZWN0YW5jeS9NCmV4cGVjdGFudC9ZCmV4cGVjdGF0aW9uL1NNCmV4cGVjdG9yYW50L1NNCmV4cGVjdG9yYXRlL0RTR04KZXhwZWN0b3JhdGlvbi9NCmV4cGVkaWVuY2UvSU0KZXhwZWRpZW5jZXMKZXhwZWRpZW5jaWVzCmV4cGVkaWVuY3kvSU0KZXhwZWRpZW50L1NNWQpleHBlZGl0ZS9EUlNaR05YCmV4cGVkaXRlci9NCmV4cGVkaXRpb24vTQpleHBlZGl0aW9uYXJ5CmV4cGVkaXRpb3VzL1BZCmV4cGVkaXRpb3VzbmVzcy9NCmV4cGVsL1MKZXhwZWxsZWQKZXhwZWxsaW5nCmV4cGVuZC9HU0JECmV4cGVuZGFibGUvU00KZXhwZW5kaXR1cmUvU00KZXhwZW5zZS9NUwpleHBlbnNpdmUvSVlQCmV4cGVuc2l2ZW5lc3MvSU0KZXhwZXJpZW5jZS9JTUQKZXhwZXJpZW5jZXMKZXhwZXJpZW5jaW5nCmV4cGVyaWVudGlhbApleHBlcmltZW50L01EUlNaRwpleHBlcmltZW50YWwvWQpleHBlcmltZW50YXRpb24vTQpleHBlcmltZW50ZXIvTQpleHBlcnQvU1BNWQpleHBlcnRpc2UvTQpleHBlcnRuZXNzL00KZXhwaWF0ZS9HTkRTCmV4cGlhdGlvbi9NCmV4cGlhdG9yeQpleHBpcmF0aW9uL00KZXhwaXJlL0RTRwpleHBpcmVkL1UKZXhwaXJ5L00KZXhwbGFpbi9BREdTCmV4cGxhaW5hYmxlCmV4cGxhaW5lZC9VCmV4cGxhbmF0aW9uL01TCmV4cGxhbmF0b3J5CmV4cGxldGl2ZS9NUwpleHBsaWNhYmxlL0kKZXhwbGljYXRlL1hHTkRTCmV4cGxpY2F0aW9uL00KZXhwbGljaXQvUFkKZXhwbGljaXRuZXNzL00KZXhwbG9kZS9HRFMKZXhwbG9pdC9aR0JNRFJTCmV4cGxvaXRhdGlvbi9NCmV4cGxvaXRhdGl2ZQpleHBsb2l0ZWQvVQpleHBsb2l0ZXIvTQpleHBsb3JhdGlvbi9NUwpleHBsb3JhdG9yeQpleHBsb3JlL1pHRFJTCmV4cGxvcmVkL1UKZXhwbG9yZXIvTQpleHBsb3Npb24vU00KZXhwbG9zaXZlL1NQTVkKZXhwbG9zaXZlbmVzcy9NCmV4cG8vTVMKZXhwb25lbnQvTVMKZXhwb25lbnRpYWwvWQpleHBvbmVudGlhdGlvbgpleHBvcnQvQlNaR01EUgpleHBvcnRhdGlvbi9NCmV4cG9ydGVyL00KZXhwb3NlL0RTTUcKZXhwb3NlZC9VCmV4cG9zaXRpb24vU00KZXhwb3NpdG9yL1NNCmV4cG9zaXRvcnkKZXhwb3N0dWxhdGUvR05YRFMKZXhwb3N0dWxhdGlvbi9NCmV4cG9zdXJlL01TCmV4cG91bmQvWkdEUlMKZXhwb3VuZGVyL00KZXhwcmVzcy9HVk1EU1kKZXhwcmVzc2VkL1UKZXhwcmVzc2libGUvSQpleHByZXNzaW9uL1NNCmV4cHJlc3Npb25pc20vTQpleHByZXNzaW9uaXN0L1NNCmV4cHJlc3Npb25pc3RpYwpleHByZXNzaW9ubGVzcy9ZCmV4cHJlc3NpdmUvUFkKZXhwcmVzc2l2ZW5lc3MvTQpleHByZXNzd2F5L1NNCmV4cHJvcHJpYXRlL0dOWERTCmV4cHJvcHJpYXRpb24vTQpleHByb3ByaWF0b3IvU00KZXhwdWxzaW9uL01TCmV4cHVuZ2UvR0RTCmV4cHVyZ2F0ZS9EU0dOWApleHB1cmdhdGVkL1UKZXhwdXJnYXRpb24vTQpleHF1aXNpdGUvWVAKZXhxdWlzaXRlbmVzcy9NCmV4dApleHRhbnQKZXh0ZW1wb3JhbmVvdXMvUFkKZXh0ZW1wb3JhbmVvdXNuZXNzL00KZXh0ZW1wb3JlCmV4dGVtcG9yaXphdGlvbi9NCmV4dGVtcG9yaXplL0dEUwpleHRlbmQvU1pHRFJCCmV4dGVuZGVyL00KZXh0ZW5zaWJsZQpleHRlbnNpb24vU00KZXh0ZW5zaW9uYWwKZXh0ZW5zaXZlL1lQCmV4dGVuc2l2ZW5lc3MvTQpleHRlbnQvU00KZXh0ZW51YXRlL0RTR04KZXh0ZW51YXRpb24vTQpleHRlcmlvci9NUwpleHRlcm1pbmF0ZS9EU1hHTgpleHRlcm1pbmF0aW9uL00KZXh0ZXJtaW5hdG9yL01TCmV4dGVybmFsL01ZUwpleHRlcm5hbGl6YXRpb24vU00KZXh0ZXJuYWxpemUvRFNHCmV4dGluY3QvR0RTCmV4dGluY3Rpb24vTVMKZXh0aW5ndWlzaC9aR0JEUlMKZXh0aW5ndWlzaGFibGUvSQpleHRpbmd1aXNoZXIvTQpleHRpcnBhdGUvR05EUwpleHRpcnBhdGlvbi9NCmV4dG9sL1MKZXh0b2xsZWQKZXh0b2xsaW5nCmV4dG9ydC9TR0QKZXh0b3J0aW9uL01SWgpleHRvcnRpb25hdGUvWQpleHRvcnRpb25lci9NCmV4dG9ydGlvbmlzdC9NUwpleHRyYS9TTQpleHRyYWNlbGx1bGFyCmV4dHJhY3QvTURHUwpleHRyYWN0aW9uL1NNCmV4dHJhY3Rvci9NUwpleHRyYWN1cnJpY3VsYXIKZXh0cmFkaXRlL0dOQlhEUwpleHRyYWRpdGlvbi9NCmV4dHJhanVkaWNpYWwKZXh0cmFsZWdhbApleHRyYW1hcml0YWwKZXh0cmFtdXJhbApleHRyYW5lb3VzL1kKZXh0cmFvcmRpbmFpcmUKZXh0cmFvcmRpbmFyaWx5CmV4dHJhb3JkaW5hcnkKZXh0cmFwb2xhdGUvWEdORFMKZXh0cmFwb2xhdGlvbi9NCmV4dHJhc2Vuc29yeQpleHRyYXRlcnJlc3RyaWFsL01TCmV4dHJhdGVycml0b3JpYWwKZXh0cmF0ZXJyaXRvcmlhbGl0eS9NCmV4dHJhdmFnYW5jZS9NUwpleHRyYXZhZ2FudC9ZCmV4dHJhdmFnYW56YS9NUwpleHRyYXZlaGljdWxhcgpleHRyZW1lL1BNWVRSUwpleHRyZW1lbmVzcy9NCmV4dHJlbWlzbS9NCmV4dHJlbWlzdC9NUwpleHRyZW1pdHkvU00KZXh0cmljYWJsZS9JCmV4dHJpY2F0ZS9HTkRTCmV4dHJpY2F0aW9uL00KZXh0cmluc2ljCmV4dHJpbnNpY2FsbHkKZXh0cm92ZXJzaW9uL00KZXh0cm92ZXJ0L1NNRApleHRydWRlL0dEUwpleHRydXNpb24vU00KZXh0cnVzaXZlCmV4dWJlcmFuY2UvTQpleHViZXJhbnQvWQpleHVkYXRpb24vTQpleHVkZS9EU0cKZXh1bHQvU0RHCmV4dWx0YW50L1kKZXh1bHRhdGlvbi9NCmV4dXJiL1NNCmV4dXJiYW4KZXh1cmJhbml0ZS9TTQpleHVyYmlhL00KZXllL0RTTQpleWViYWxsL0dNRFMKZXllYnJvdy9TTQpleWVkcm9wcGVyL1NNCmV5ZWZ1bC9TTQpleWVnbGFzcy9NUwpleWVpbmcKZXllbGFzaC9NUwpleWVsZXNzCmV5ZWxldC9TTQpleWVsaWQvU00KZXllbGluZXIvTVMKZXllb3BlbmVyL01TCmV5ZW9wZW5pbmcKZXllcGllY2UvTVMKZXllc2lnaHQvTQpleWVzb3JlL01TCmV5ZXN0cmFpbi9NCmV5ZXRlZXRoCmV5ZXRvb3RoL00KZXlld2FzaC9NCmV5ZXdpdG5lc3MvTVMKZi9DSUFWVFIKZmEvTQpmYWIKZmFibGUvRFNNCmZhYnJpYy9TTQpmYWJyaWNhdGUvRFNHTlgKZmFicmljYXRpb24vTQpmYWJyaWNhdG9yL1NNCmZhYnVsb3VzL1kKZmFjYWRlL1NNCmZhY2UncwpmYWNlL0FDU0RHCmZhY2VjbG90aC9NCmZhY2VjbG90aHMKZmFjZWxlc3MKZmFjZXQvU01ERwpmYWNldGlvdXMvWVAKZmFjZXRpb3VzbmVzcy9NCmZhY2lhbC9TTVkKZmFjaWxlL1kKZmFjaWxpdGF0ZS9HTkRTCmZhY2lsaXRhdGlvbi9NCmZhY2lsaXRhdG9yL01TCmZhY2lsaXR5L1NNCmZhY2luZy9TTQpmYWNzaW1pbGUvRFNNCmZhY3NpbWlsZWluZwpmYWN0L01TCmZhY3Rpb24vU00KZmFjdGlvbmFsCmZhY3Rpb25hbGlzbS9NCmZhY3Rpb3VzCmZhY3RpdGlvdXMKZmFjdG9pZC9TTQpmYWN0b3IncwpmYWN0b3IvQVNERwpmYWN0b3JpYWwvTVMKZmFjdG9yaXphdGlvbgpmYWN0b3JpemUvR0RTCmZhY3RvcnkvU00KZmFjdG90dW0vU00KZmFjdHVhbC9ZCmZhY3VsdHkvU00KZmFkL0dTTUQKZmFkZGlzaC9QCmZhZGRpc3QvTVMKZmFkZHkvUApmYWRlL01TCmZhZGluZy9VCmZhZXJpZS9TTQpmYWZmL0RHUwpmYWcvU00KZmFnZ2VkCmZhZ2dpbmcKZmFnZ290L1NNCmZhZ290L1NNRwpmYWllbmNlL00KZmFpbC9NREdKUwpmYWlsaW5nL00KZmFpbGxlL00KZmFpbHVyZS9TTQpmYWluL1JUCmZhaW50L1NNRFJZVEdQCmZhaW50aGVhcnRlZApmYWludG5lc3MvTQpmYWlyL01SWVRHSlBTCmZhaXJncm91bmQvTVMKZmFpcmluZy9NCmZhaXJuZXNzL1VNCmZhaXJ3YXkvU00KZmFpcnkvU00KZmFpcnlsYW5kL1NNCmZhaXRoL00KZmFpdGhmdWwncwpmYWl0aGZ1bC9VUFkKZmFpdGhmdWxuZXNzL1VNCmZhaXRoZnVscwpmYWl0aGxlc3MvUFkKZmFpdGhsZXNzbmVzcy9NCmZhaXRocwpmYWppdGEvU00KZmFqaXRhcy9NCmZha2UvTVpHRFJTCmZha2VyL00KZmFraXIvU00KZmFsY29uL1NNUloKZmFsY29uZXIvTQpmYWxjb25yeS9NCmZhbGwvTU5HUwpmYWxsYWNpb3VzL1kKZmFsbGFjeS9TTQpmYWxsYmFjawpmYWxsaWJpbGl0eS9JTQpmYWxsaWJsZS9QCmZhbGxpYmxlbmVzcy9NCmZhbGxpYmx5L0kKZmFsbG9mZi9TTQpmYWxsb3V0L00KZmFsbG93L1NNREcKZmFsc2UvUFJZVApmYWxzZWhvb2QvU00KZmFsc2VuZXNzL00KZmFsc2V0dG8vU00KZmFsc2llL1NNCmZhbHNpZmlhYmxlCmZhbHNpZmljYXRpb24vTQpmYWxzaWZpZXIvTQpmYWxzaWZ5L0RSU1pHTlgKZmFsc2l0eS9TTQpmYWx0ZXIvR1NKTUQKZmFsdGVyaW5nL1kKZmFtZSdzCmZhbWUvRApmYW1pbGlhbApmYW1pbGlhci9NWVMKZmFtaWxpYXJpdHkvVU0KZmFtaWxpYXJpemF0aW9uL00KZmFtaWxpYXJpemUvR0RTCmZhbWlseS9TTQpmYW1pbmUvU00KZmFtaXNoL0RTRwpmYW1vdXMvSVkKZmFuL1NNCmZhbmF0aWMvU00KZmFuYXRpY2FsL1kKZmFuYXRpY2lzbS9NCmZhbmJveS9TTQpmYW5jaWFibGUKZmFuY2llci9NCmZhbmNpZnVsL1lQCmZhbmNpZnVsbmVzcy9NCmZhbmNpbHkKZmFuY2luZXNzL00KZmFuY3kvRFJTTVpUR1AKZmFuY3l3b3JrL00KZmFuZGFuZ28vTVMKZmFuZG9tCmZhbmZhcmUvU00KZmFuZy9NRFMKZmFubGlnaHQvU00KZmFubmVkCmZhbm5pbmcKZmFubnkvU00KZmFudGFpbC9NUwpmYW50YXNpYS9TTQpmYW50YXNpc3QvUwpmYW50YXNpemUvR0RTCmZhbnRhc3RpYwpmYW50YXN0aWNhbC9ZCmZhbnRhc3kvRFNNRwpmYW56aW5lL01TCmZhcgpmYXJhZC9TTQpmYXJhZGl6ZS9ERwpmYXJhd2F5CmZhcmNlL1NNCmZhcmNpY2FsL1kKZmFyZS9NR0RTCmZhcmV3ZWxsL1NNCmZhcmluYS9NCmZhcmluYWNlb3VzCmZhcm0vTURSWkdTSgpmYXJtZXIvTQpmYXJtaGFuZC9TTQpmYXJtaG91c2UvU00KZmFybWluZy9NCmZhcm1sYW5kL01TCmZhcm1zdGVhZC9NUwpmYXJteWFyZC9NUwpmYXJvL00KZmFycmFnby9NCmZhcnJhZ29lcwpmYXJyaWVyL01TCmZhcnJvdy9TTURHCmZhcnNlZWluZwpmYXJzaWdodGVkL1AKZmFyc2lnaHRlZG5lc3MvTQpmYXJ0L01ER1MKZmFydGhlcgpmYXJ0aGVybW9zdApmYXJ0aGVzdApmYXJ0aGluZy9TTQpmYXNjaWEvU00KZmFzY2ljbGUvU00KZmFzY2luYXRlL0dORFNYCmZhc2NpbmF0aW5nL1kKZmFzY2luYXRpb24vTQpmYXNjaXNtL00KZmFzY2lzdC9NUwpmYXNjaXN0aWMKZmFzaGlvbi9aR0JNRFJTCmZhc2hpb25hYmxlL1UKZmFzaGlvbmFibHkvVQpmYXNoaW9uZXIvTQpmYXNoaW9uaXN0YS9NUwpmYXN0L01EUlRHU1AKZmFzdGJhY2svU00KZmFzdGJhbGwvU00KZmFzdGVuL1VBR0RTCmZhc3RlbmVyL1NNCmZhc3RlbmluZy9NUwpmYXN0aWRpb3VzL1BZCmZhc3RpZGlvdXNuZXNzL00KZmFzdG5lc3MvTVMKZmF0L0dTUE1ECmZhdGFsL1kKZmF0YWxpc20vTQpmYXRhbGlzdC9TTQpmYXRhbGlzdGljCmZhdGFsaXN0aWNhbGx5CmZhdGFsaXR5L1NNCmZhdGJhY2svTQpmYXRlL01TCmZhdGVmdWwvWVAKZmF0ZWZ1bG5lc3MvTQpmYXRoZWFkL01EUwpmYXRoZXIvU0dNRFkKZmF0aGVyaG9vZC9NCmZhdGhlcmxhbmQvTVMKZmF0aGVybGVzcwpmYXRob20vU01ER0IKZmF0aG9tYWJsZS9VCmZhdGhvbWxlc3MKZmF0aWd1ZS9NRFNHCmZhdGlndWVzL00KZmF0bmVzcy9NCmZhdHNvL1MKZmF0dGVuL1NERwpmYXR0ZXIKZmF0dGVzdApmYXR0aW5lc3MvTQpmYXR0eS9SU01UUApmYXR1aXR5L00KZmF0dW91cy9ZUApmYXR1b3VzbmVzcy9NCmZhdHdhL1NNCmZhdWNldC9TTQpmYXVsdC9DU01ERwpmYXVsdGZpbmRlci9TTQpmYXVsdGZpbmRpbmcvTQpmYXVsdGlseQpmYXVsdGluZXNzL00KZmF1bHRsZXNzL1BZCmZhdWx0bGVzc25lc3MvTQpmYXVsdHkvUFJUCmZhdW4vTVMKZmF1bmEvU00KZmF1dmlzbS9NCmZhdXZpc3QvU00KZmF1eApmYXZlL1MKZmF2b3IvRVNNREcKZmF2b3JhYmxlL1UKZmF2b3JhYmx5L1UKZmF2b3JpdGUvU00KZmF2b3JpdGlzbS9NCmZhd24vTURSWkdTCmZhd25lci9NCmZheC9HTURTCmZheS9UU01SCmZhemUvR0RTCmZhemVkL1UKZmVhbHR5L00KZmVhci9NREdTCmZlYXJmdWwvWVAKZmVhcmZ1bG5lc3MvTQpmZWFybGVzcy9QWQpmZWFybGVzc25lc3MvTQpmZWFyc29tZQpmZWFzaWJpbGl0eS9NCmZlYXNpYmxlL0lVCmZlYXNpYmx5CmZlYXN0L1NNRFJaRwpmZWFzdGVyL00KZmVhdC9NUwpmZWF0aGVyL1NHTUQKZmVhdGhlcmJlZGRpbmcvTQpmZWF0aGVyYnJhaW5lZApmZWF0aGVybGVzcwpmZWF0aGVyd2VpZ2h0L01TCmZlYXRoZXJ5L1RSCmZlYXR1cmUvRFNNRwpmZWF0dXJlbGVzcwpmZWJyaWxlCmZlY2FsCmZlY2VzL00KZmVja2xlc3MvUFkKZmVjdW5kCmZlY3VuZGF0ZS9HTkRTCmZlY3VuZGF0aW9uL00KZmVjdW5kaXR5L00KZmVkL1NNCmZlZGVyYWwvU01ZCmZlZGVyYWxpc20vTQpmZWRlcmFsaXN0L01TCmZlZGVyYWxpemF0aW9uL00KZmVkZXJhbGl6ZS9HRFMKZmVkZXJhdGUvRlhEU0dOCmZlZGVyYXRpb24vRk0KZmVkb3JhL1NNCmZlZS9TTQpmZWVibGUvUlRQCmZlZWJsZW5lc3MvTQpmZWVibHkKZmVlZC9NUlpHU0oKZmVlZGJhY2svTQpmZWVkYmFnL1NNCmZlZWRlci9NCmZlZWRpbmcvTQpmZWVkbG90L1NNCmZlZWwvTVJaR1NKCmZlZWxlci9NCmZlZWxnb29kCmZlZWxpbmcvTVkKZmVldApmZWlnbi9TREcKZmVpZ25lZC9VCmZlaW50L1NNREcKZmVpc3R5L1RSCmZlbGRzcGFyL00KZmVsaWNpdGF0ZS9HTlhEUwpmZWxpY2l0YXRpb24vTQpmZWxpY2l0b3VzL1kKZmVsaWNpdHkvSVNNCmZlbGluZS9TTQpmZWxsL01EUlpUR1MKZmVsbGEvUwpmZWxsYXRpby9NCmZlbGxvdy9TTQpmZWxsb3dtYW4vTQpmZWxsb3dtZW4KZmVsbG93c2hpcC9NUwpmZWxvbi9TTQpmZWxvbmlvdXMKZmVsb255L1NNCmZlbHQvTURHUwpmZW0KZmVtYWxlL1BTTQpmZW1hbGVuZXNzL00KZmVtaW5pbmUvU01ZCmZlbWluaW5pdHkvTQpmZW1pbmlzbS9NCmZlbWluaXN0L1NNCmZlbWluaXplL0RTRwpmZW1vcmFsCmZlbXVyL1NNCmZlbi9TTQpmZW5jZS9EUlNNWkcKZmVuY2VyL00KZmVuY2luZy9NCmZlbmQvQ0RSWkdTCmZlbmRlci9DTQpmZW5lc3RyYXRpb24vTQpmZW5uZWwvTQpmZXJhbApmZXJtZW50L0ZDTVMKZmVybWVudGF0aW9uL00KZmVybWVudGVkCmZlcm1lbnRpbmcKZmVybWl1bS9NCmZlcm4vTVMKZmVybnkvUlQKZmVyb2Npb3VzL1BZCmZlcm9jaW91c25lc3MvTQpmZXJvY2l0eS9NCmZlcnJldC9HU01ECmZlcnJpYwpmZXJyb21hZ25ldGljCmZlcnJvdXMKZmVycnVsZS9NUwpmZXJyeS9EU01HCmZlcnJ5Ym9hdC9TTQpmZXJyeW1hbi9NCmZlcnJ5bWVuCmZlcnRpbGUvSQpmZXJ0aWxpdHkvSU0KZmVydGlsaXphdGlvbi9NCmZlcnRpbGl6ZS9EUlNaRwpmZXJ0aWxpemVkL1UKZmVydGlsaXplci9NCmZlcnVsZS9TTQpmZXJ2ZW5jeS9NCmZlcnZlbnQvWQpmZXJ2aWQvWQpmZXJ2b3IvTQpmZXNzL0ZLR1NECmZlc3QvTVJaVlMKZmVzdGFsCmZlc3Rlci9HTUQKZmVzdGl2YWwvU00KZmVzdGl2ZS9ZUApmZXN0aXZlbmVzcy9NCmZlc3Rpdml0eS9TTQpmZXN0b29uL0dNRFMKZmV0YS9NCmZldGFsCmZldGNoL0RSU1pHCmZldGNoZXIvTQpmZXRjaGluZy9ZCmZldGUvTUdEUwpmZXRpZC9QCmZldGlkbmVzcy9NCmZldGlzaC9NUwpmZXRpc2hpc20vTQpmZXRpc2hpc3QvU00KZmV0aXNoaXN0aWMKZmV0bG9jay9NUwpmZXR0ZXIncwpmZXR0ZXIvVVNHRApmZXR0bGUvTQpmZXR0dWNjaW5lL00KZmV0dXMvTVMKZmV1ZC9NREdTCmZldWRhbApmZXVkYWxpc20vTQpmZXVkYWxpc3RpYwpmZXZlci9TTUQKZmV2ZXJpc2gvWVAKZmV2ZXJpc2huZXNzL00KZmV3L1RQTVIKZmV3bmVzcy9NCmZleQpmZXovTQpmZXp6ZXMKZmYKZmlhbmNlL0NNCmZpYW5jZWUvTVMKZmlhbmNlcwpmaWFzY28vTQpmaWFzY29lcwpmaWF0L01TCmZpYi9aU01SCmZpYmJlZApmaWJiZXIvU00KZmliYmluZwpmaWJlci9NCmZpYmVyYm9hcmQvTQpmaWJlcmZpbGwvTQpmaWJlcmdsYXNzL00KZmlicmlsL1NNCmZpYnJpbGxhdGUvR05EUwpmaWJyaWxsYXRpb24vTQpmaWJyaW4vTQpmaWJyb2lkCmZpYnJvc2lzL00KZmlicm91cwpmaWJ1bGEvTQpmaWJ1bGFlCmZpYnVsYXIKZmljaGUvU00KZmljaHUvU00KZmlja2xlL1JQVApmaWNrbGVuZXNzL00KZmljdGlvbi9NUwpmaWN0aW9uYWwvWQpmaWN0aW9uYWxpemF0aW9uL1NNCmZpY3Rpb25hbGl6ZS9EU0cKZmljdGl0aW91cy9ZCmZpY3RpdmUKZmljdXMvTQpmaWRkbGUvRFJTTVpHCmZpZGRsZXIvTQpmaWRkbGVzdGlja3MKZmlkZGx5L1RSCmZpZGVsaXR5L0lNCmZpZGdldC9TR01ECmZpZGdldHkKZmlkdWNpYXJ5L1NNCmZpZQpmaWVmL01TCmZpZWZkb20vTVMKZmllbGQvSVNNUloKZmllbGRlZApmaWVsZGVyL0lNCmZpZWxkaW5nCmZpZWxkc21hbgpmaWVsZHNtZW4KZmllbGR3b3JrL01SWgpmaWVsZHdvcmtlci9NCmZpZW5kL1NNCmZpZW5kaXNoL1kKZmllcmNlL1BSWVQKZmllcmNlbmVzcy9NCmZpZXJpbmVzcy9NCmZpZXJ5L1JQVApmaWVzdGEvU00KZmlmZS9NWlJTCmZpZmVyL00KZmlmdGVlbi9NSFMKZmlmdGVlbnRoL00KZmlmdGVlbnRocwpmaWZ0aC9NWQpmaWZ0aHMKZmlmdGlldGgvTQpmaWZ0aWV0aHMKZmlmdHkvU01ICmZpZy9TTE0KZmlnaHQvU01SWkcKZmlnaHRiYWNrCmZpZ2h0ZXIvSU1TCmZpZ2h0aW5nL0lNCmZpZ21lbnQvTVMKZmlndXJhdGlvbi9GTQpmaWd1cmF0aXZlL1kKZmlndXJlJ3MKZmlndXJlL0ZFR1NECmZpZ3VyZWhlYWQvU00KZmlndXJpbmUvTVMKZmlsYW1lbnQvTVMKZmlsYW1lbnRvdXMKZmlsYmVydC9NUwpmaWxjaC9EU0cKZmlsZSdzL0tDCmZpbGUvQ0FLR0RTCmZpbGVuYW1lL1MKZmlsZXIvQ1NNCmZpbGV0CmZpbGlhbApmaWxpYnVzdGVyL01EUlNaRwpmaWxpYnVzdGVyZXIvTQpmaWxpZ3JlZS9EU00KZmlsaWdyZWVpbmcKZmlsaW5nJ3MKZmlsaW5ncwpmaWxsJ3MKZmlsbC9BSURHUwpmaWxsZWQvVQpmaWxsZXIvTVMKZmlsbGV0L01ER1MKZmlsbGluZy9TTQpmaWxsaXAvTURHUwpmaWxseS9TTQpmaWxtL01ER1MKZmlsbWluZXNzL00KZmlsbW1ha2VyL1NNCmZpbG1zdHJpcC9NUwpmaWxteS9UUFIKZmlsbwpmaWx0ZXIvTURSQlNaRwpmaWx0ZXJlZC9VCmZpbHRlcmVyL00KZmlsdGgvTQpmaWx0aGlseQpmaWx0aGluZXNzL00KZmlsdGh5L1JQVApmaWx0cmF0ZSdzCmZpbHRyYXRlL0lHTkRTCmZpbHRyYXRpb24vSU0KZmluL1NNUgpmaW5hZ2xlL0RSU1pHCmZpbmFnbGVyL00KZmluYWwvU01ZCmZpbmFsZS9NUwpmaW5hbGlzdC9TTQpmaW5hbGl0eS9NCmZpbmFsaXphdGlvbi9NCmZpbmFsaXplL0RTRwpmaW5hbmNlJ3MKZmluYW5jZS9BRFNHCmZpbmFuY2lhbC9ZCmZpbmFuY2llci9NUwpmaW5hbmNpbmcvTQpmaW5jaC9NUwpmaW5kL0pNUlpHUwpmaW5kZXIvTQpmaW5kaW5nL00KZmluZGluZ3MvTQpmaW5lJ3MvRgpmaW5lL0NBRlRHRFMKZmluZWx5CmZpbmVuZXNzL00KZmluZXJ5L0FNCmZpbmVzcHVuCmZpbmVzc2UvRFNNRwpmaW5nZXIvTURHU0oKZmluZ2VyYm9hcmQvU00KZmluZ2VyaW5nL00KZmluZ2VybGluZy9TTQpmaW5nZXJtYXJrL1MKZmluZ2VybmFpbC9TTQpmaW5nZXJwcmludC9TR01ECmZpbmdlcnRpcC9NUwpmaW5pYWwvTVMKZmluaWNhbApmaW5pY2tpbmVzcy9NCmZpbmlja3kvUlBUCmZpbmlzL01TCmZpbmlzaCdzCmZpbmlzaC9BRFNHCmZpbmlzaGVkL1UKZmluaXNoZXIvTVMKZmluaXRlL0lZCmZpbmsvTURHUwpmaW5uZWQKZmlubnkKZmlyL1pHU0pNRFJICmZpcmUvTVMKZmlyZWFybS9TTQpmaXJlYmFsbC9NUwpmaXJlYm9tYi9NRFNKRwpmaXJlYm94L01TCmZpcmVicmFuZC9TTQpmaXJlYnJlYWsvU00KZmlyZWJyaWNrL1NNCmZpcmVidWcvU00KZmlyZWNyYWNrZXIvU00KZmlyZWRhbXAvTQpmaXJlZmlnaHQvTVJTWkcKZmlyZWZpZ2h0ZXIvTQpmaXJlZmlnaHRpbmcvTQpmaXJlZmx5L1NNCmZpcmVndWFyZC9TCmZpcmVob3VzZS9TTQpmaXJlbGlnaHQvWk1SCmZpcmVtYW4vTQpmaXJlbWVuCmZpcmVwbGFjZS9TTQpmaXJlcGx1Zy9NUwpmaXJlcG93ZXIvTQpmaXJlcHJvb2YvRFNHCmZpcmVyL00KZmlyZXNjcmVlbi9TCmZpcmVzaWRlL01TCmZpcmVzdG9ybS9NUwpmaXJldHJhcC9NUwpmaXJldHJ1Y2svTVMKZmlyZXdhbGwvTVMKZmlyZXdhdGVyL00KZmlyZXdvb2QvTQpmaXJld29yay9TTQpmaXJtL01EUllQVEdTCmZpcm1hbWVudC9TTQpmaXJtbmVzcy9NCmZpcm13YXJlL00KZmlyc3QvU01ZCmZpcnN0Ym9ybi9TTQpmaXJzdGhhbmQKZmlydGgvTQpmaXJ0aHMKZmlzY2FsL01ZUwpmaXNoL01EUlNaRwpmaXNoYm93bC9TTQpmaXNoY2FrZS9TTQpmaXNoZXIvTQpmaXNoZXJtYW4vTQpmaXNoZXJtZW4KZmlzaGVyeS9TTQpmaXNoaG9vay9TTQpmaXNoaWx5CmZpc2hpbmVzcy9NCmZpc2hpbmcvTQpmaXNobW9uZ2VyL01TCmZpc2huZXQvU00KZmlzaHBvbmQvTVMKZmlzaHRhaWwvREdTCmZpc2h3aWZlL00KZmlzaHdpdmVzCmZpc2h5L1RSUApmaXNzaWxlCmZpc3Npb24vQk0KZmlzc3VyZS9TTQpmaXN0L01TCmZpc3RmaWdodC9NUwpmaXN0ZnVsL1NNCmZpc3RpY3VmZnMvTQpmaXN0dWxhL1NNCmZpc3R1bG91cy9NCmZpdC9LQU1TCmZpdGZ1bC9ZUApmaXRmdWxuZXNzL00KZml0bHkKZml0bWVudC9TCmZpdG5lc3MvVU0KZml0dGVkL1VBCmZpdHRlci9NUwpmaXR0ZXN0CmZpdHRpbmcvU01ZCmZpdmUvTVpSUwpmaXgvWkdCSk1EUlMKZml4YXRlL0dOVkRTWApmaXhhdGlvbi9NCmZpeGF0aXZlL01TCmZpeGVkL1kKZml4ZXIvTQpmaXhpbmdzL00KZml4aXR5L00KZml4dHVyZS9NUwpmaXp6L01EU0cKZml6emxlL0RTTUcKZml6enkvUlQKZmpvcmQvU00KZmwvSkRHCmZsYWIvTQpmbGFiYmVyZ2FzdC9TR0QKZmxhYmJpbHkKZmxhYmJpbmVzcy9NCmZsYWJieS9SUFQKZmxhY2NpZC9ZCmZsYWNjaWRpdHkvTQpmbGFjay9TTQpmbGFnL01TCmZsYWdlbGxhCmZsYWdlbGxhbnQvUwpmbGFnZWxsYXRlL0dORFMKZmxhZ2VsbGF0aW9uL00KZmxhZ2VsbHVtL00KZmxhZ2dlZApmbGFnZ2luZy9VCmZsYWdtYW4vTQpmbGFnbWVuCmZsYWdvbi9NUwpmbGFncG9sZS9TTQpmbGFncmFuY2UvTQpmbGFncmFuY3kvTQpmbGFncmFudC9ZCmZsYWdzaGlwL1NNCmZsYWdzdGFmZi9NUwpmbGFnc3RvbmUvTVMKZmxhaWwvU0dNRApmbGFpci9TTQpmbGFrL00KZmxha2UvRFNNRwpmbGFraW5lc3MvTQpmbGFreS9UUlAKZmxhbWFnZQpmbGFtYmUvTVMKZmxhbWJlZWQKZmxhbWJlaW5nCmZsYW1ib3lhbmNlL00KZmxhbWJveWFuY3kvTQpmbGFtYm95YW50L1kKZmxhbWUvRFJTSk1aRwpmbGFtZW5jby9NUwpmbGFtZXByb29mL0RHUwpmbGFtZXRocm93ZXIvU00KZmxhbWluZ28vTVMKZmxhbW1hYmlsaXR5L0lNCmZsYW1tYWJsZS9TTQpmbGFuL01TCmZsYW5nZS9NUwpmbGFuay9TWkdNRFIKZmxhbmtlci9NCmZsYW5uZWwvU0dNRApmbGFubmVsZXR0ZS9NCmZsYXAvTVMKZmxhcGphY2svTVMKZmxhcHBlZApmbGFwcGVyL1NNCmZsYXBwaW5nCmZsYXJlL0RTTUcKZmxhcmV1cC9TTQpmbGFzaC9aVEdNRFJTCmZsYXNoYmFjay9TTQpmbGFzaGJ1bGIvU00KZmxhc2hjYXJkL1NNCmZsYXNoY3ViZS9TTQpmbGFzaGVyL00KZmxhc2hndW4vU00KZmxhc2hpbHkKZmxhc2hpbmVzcy9NCmZsYXNoaW5nL00KZmxhc2hsaWdodC9NUwpmbGFzaHkvUlRQCmZsYXNrL1NNCmZsYXQvTVlQUwpmbGF0YmVkL1NNCmZsYXRib2F0L1NNCmZsYXRicmVhZApmbGF0Y2FyL1NNCmZsYXRmZWV0CmZsYXRmaXNoL01TCmZsYXRmb290L1NNRApmbGF0aXJvbi9TTQpmbGF0bGFuZC9NCmZsYXRsZXQvUwpmbGF0bWF0ZS9TCmZsYXRuZXNzL00KZmxhdHRlZApmbGF0dGVuL1NERwpmbGF0dGVyL1NEUlpHCmZsYXR0ZXJlci9NCmZsYXR0ZXJpbmcvWQpmbGF0dGVyeS9NCmZsYXR0ZXN0CmZsYXR0aW5nCmZsYXR0aXNoCmZsYXR0b3AvU00KZmxhdHVsZW5jZS9NCmZsYXR1bGVudApmbGF0dXMvTQpmbGF0d2FyZS9NCmZsYXR3b3JtL1NNCmZsYXVudC9NRFNHCmZsYXVudGluZy9ZCmZsYXZvci9NRFNHSgpmbGF2b3JlZC9VCmZsYXZvcmZ1bApmbGF2b3JpbmcvTQpmbGF2b3JsZXNzCmZsYXZvcnNvbWUKZmxhdy9NREdTCmZsYXdsZXNzL1BZCmZsYXdsZXNzbmVzcy9NCmZsYXgvTU4KZmxheS9ER1MKZmxlYS9NUwpmbGVhYmFnL1NNCmZsZWFiaXRlL1MKZmxlYXBpdC9TCmZsZWNrL1NHTUQKZmxlZGdlZC9VCmZsZWRnbGluZy9NUwpmbGVlL1MKZmxlZWNlL01aR0RSUwpmbGVlY2VyL00KZmxlZWNpbmVzcy9NCmZsZWVjeS9SVFAKZmxlZWluZwpmbGVldC9TVEdNRFJZUApmbGVldGluZ2x5L00KZmxlZXRpbmduZXNzL00KZmxlZXRuZXNzL00KZmxlc2gvR01EU1kKZmxlc2hseS9UUgpmbGVzaHBvdC9NUwpmbGVzaHkvUlQKZmxldwpmbGV4L0FNUwpmbGV4ZWQKZmxleGliaWxpdHkvSU0KZmxleGlibGUvSQpmbGV4aWJseS9JCmZsZXhpbmcKZmxleGlvbgpmbGV4dGltZS9NCmZsaWJiZXJ0aWdpYmJldC9TTQpmbGljay9TWkdNRFIKZmxpY2tlci9HTUQKZmxpZXIvTQpmbGlnaHQvTVMKZmxpZ2h0aW5lc3MvTQpmbGlnaHRsZXNzCmZsaWdodHkvUFRSCmZsaW1mbGFtL1NNCmZsaW1mbGFtbWVkCmZsaW1mbGFtbWluZwpmbGltc2lseQpmbGltc2luZXNzL00KZmxpbXN5L1RSUApmbGluY2gvR01EUwpmbGluZy9HTQpmbGludC9TTQpmbGludGxvY2svU00KZmxpbnR5L1RSCmZsaXAvTVMKZmxpcHBhbmN5L00KZmxpcHBhbnQvWQpmbGlwcGVkCmZsaXBwZXIvTVMKZmxpcHBlc3QKZmxpcHBpbmcKZmxpcHB5L1MKZmxpcnQvU0dNRApmbGlydGF0aW9uL01TCmZsaXJ0YXRpb3VzL1lQCmZsaXJ0YXRpb3VzbmVzcy9NCmZsaXJ0eQpmbGl0L01TCmZsaXR0ZWQKZmxpdHRpbmcKZmxvYXQvU01EUlpHCmZsb2F0ZXIvTQpmbG9jay9TTURHCmZsb2NraW5nL00KZmxvZS9NUwpmbG9nL1MKZmxvZ2dlZApmbG9nZ2VyL1NNCmZsb2dnaW5nL01TCmZsb29kL1NNRFJHCmZsb29kZ2F0ZS9NUwpmbG9vZGxpZ2h0L01EU0cKZmxvb2RsaXQKZmxvb2RwbGFpbi9NUwpmbG9vZHdhdGVyL01TCmZsb29yL1NNREcKZmxvb3Jib2FyZC9NUwpmbG9vcmluZy9NCmZsb29yd2Fsa2VyL1NNCmZsb296eS9TTQpmbG9wL01TCmZsb3Bob3VzZS9NUwpmbG9wcGVkCmZsb3BwaWx5CmZsb3BwaW5lc3MvTQpmbG9wcGluZwpmbG9wcHkvUFJTTVQKZmxvcmEvU00KZmxvcmFsCmZsb3Jlc2NlbmNlL0lNCmZsb3Jlc2NlbnQvSQpmbG9yZXQvU00KZmxvcmlkL1BZCmZsb3JpZG5lc3MvTQpmbG9yaW4vU00KZmxvcmlzdC9TTQpmbG9zcy9NRFNHCmZsb3NzeS9SVApmbG90YXRpb24vU00KZmxvdGlsbGEvTVMKZmxvdHNhbS9NCmZsb3VuY2UvRFNNRwpmbG91bmN5CmZsb3VuZGVyL01EU0cKZmxvdXIvU01ERwpmbG91cmlzaC9HTURTCmZsb3VyeQpmbG91dC9TTURSWkcKZmxvdXRlci9NCmZsb3cvTURHUwpmbG93Y2hhcnQvU00KZmxvd2VyJ3MKZmxvd2VyL0NTREcKZmxvd2VyYmVkL01TCmZsb3dlcmluZXNzL00KZmxvd2VyaW5nL1MKZmxvd2VybGVzcwpmbG93ZXJwb3QvTVMKZmxvd2VyeS9QVFIKZmxvd24KZmx0CmZsdS9NCmZsdWIvTVMKZmx1YmJlZApmbHViYmluZwpmbHVjdHVhdGUvR05EU1gKZmx1Y3R1YXRpb24vTQpmbHVlL01TCmZsdWVuY3kvTQpmbHVlbnQvWQpmbHVmZi9TTURHCmZsdWZmaW5lc3MvTQpmbHVmZnkvUlBUCmZsdWlkL1NNWQpmbHVpZGl0eS9NCmZsdWtlL1NNCmZsdWt5L1JUCmZsdW1lL1NNCmZsdW1tb3gvRFNHCmZsdW5nCmZsdW5rL1NNREcKZmx1bmt5L1NNCmZsdW9yZXNjZS9EU0cKZmx1b3Jlc2NlbmNlL00KZmx1b3Jlc2NlbnQKZmx1b3JpZGF0ZS9HTkRTCmZsdW9yaWRhdGlvbi9NCmZsdW9yaWRlL1NNCmZsdW9yaW5lL00KZmx1b3JpdGUvTQpmbHVvcm9jYXJib24vTVMKZmx1b3Jvc2NvcGUvU00KZmx1b3Jvc2NvcGljCmZsdXJyeS9HRFNNCmZsdXNoL01EUlNURwpmbHVzdGVyL01EU0cKZmx1dGUvRFNNRwpmbHV0aW5nL00KZmx1dGlzdC9NUwpmbHV0dGVyL01EU0cKZmx1dHRlcnkKZmx1dmlhbApmbHV4L0lNUwpmbHV4ZWQKZmx1eGluZwpmbHkvWlRHQkRSU00KZmx5YXdheQpmbHlibG93bgpmbHlieS9NCmZseWJ5cwpmbHljYXRjaGVyL01TCmZseWluZy9NCmZseWxlYWYvTQpmbHlsZWF2ZXMKZmx5b3Zlci9NUwpmbHlwYXBlci9TTQpmbHlwYXN0L1MKZmx5c2hlZXQvUwpmbHlzcGVjay9HTURTCmZseXN3YXR0ZXIvTVMKZmx5dHJhcC9TCmZseXdheS9TTQpmbHl3ZWlnaHQvU00KZmx5d2hlZWwvTVMKZm9hbC9NREdTCmZvYW0vTURHUwpmb2FtaW5lc3MvTQpmb2FteS9SVFAKZm9iL1NNCmZvYmJlZApmb2JiaW5nCmZvY2FsL1kKZm9jdXMncwpmb2N1cy9BRFNHCmZvY3VzZWQvVQpmb2RkZXIvU00KZm9lL1NNCmZvZydzCmZvZy9DUwpmb2dib3VuZApmb2dnZWQvQwpmb2dnaWx5CmZvZ2dpbmVzcy9NCmZvZ2dpbmcvQwpmb2dneS9SVFAKZm9naG9ybi9NUwpmb2d5L1NNCmZvZ3lpc2gKZm9pYmxlL1NNCmZvaWwvTURHUwpmb2lzdC9TREcKZm9sCmZvbGQncwpmb2xkL0FVU0dECmZvbGRhd2F5CmZvbGRlci9TTQpmb2xkb3V0L01TCmZvbGlhZ2UvTQpmb2xpYwpmb2xpby9TTQpmb2xrL01TCmZvbGtsb3JlL00KZm9sa2xvcmljCmZvbGtsb3Jpc3QvTVMKZm9sa3NpbmVzcy9NCmZvbGtzaW5nZXIvU00KZm9sa3NpbmdpbmcvTQpmb2xrc3kvUFRSCmZvbGt0YWxlL01TCmZvbGt3YXkvTVMKZm9sbApmb2xsaWNsZS9NUwpmb2xsb3cvU0RSWkdKCmZvbGxvd2VyL00KZm9sbG93aW5nL00KZm9sbG93dXAvUwpmb2xseS9TTQpmb21lbnQvU0dECmZvbWVudGF0aW9uL00KZm9uZC9SWVRQCmZvbmRhbnQvTVMKZm9uZGxlL0RTRwpmb25kbmVzcy9NCmZvbmR1ZS9TTQpmb250L01TCmZvbnRhbmVsL01TCmZvbwpmb29iYXIKZm9vZC9NUwpmb29kaWUvU00KZm9vZHN0dWZmL1NNCmZvb2wvTURHUwpmb29sZXJ5L1NNCmZvb2xoYXJkaWx5CmZvb2xoYXJkaW5lc3MvTQpmb29saGFyZHkvVFBSCmZvb2xpc2gvWVAKZm9vbGlzaG5lc3MvTQpmb29scHJvb2YKZm9vbHNjYXAvTQpmb290L01EUlpHU0oKZm9vdGFnZS9NCmZvb3RiYWxsL01SWkdTCmZvb3RiYWxsZXIvTQpmb290YnJpZGdlL1NNCmZvb3RmYWxsL01TCmZvb3RoaWxsL01TCmZvb3Rob2xkL01TCmZvb3RpZQpmb290aW5nL00KZm9vdGxlc3MKZm9vdGxpZ2h0cy9NCmZvb3RsaW5nL01TCmZvb3Rsb2NrZXIvU00KZm9vdGxvb3NlCmZvb3RtYW4vTQpmb290bWVuCmZvb3Rub3RlL01HRFMKZm9vdHBhdGgvTQpmb290cGF0aHMKZm9vdHBsYXRlL1MKZm9vdHByaW50L1NNCmZvb3RyYWNlL01TCmZvb3RyZXN0L01TCmZvb3RzaWUvU00KZm9vdHNsb2dnaW5nCmZvb3Rzb3JlCmZvb3RzdGVwL01TCmZvb3RzdG9vbC9TTQpmb290d2Vhci9NCmZvb3R3b3JrL00KZm9vdHkKZm9wL1NNCmZvcHBlcnkvTQpmb3BwaXNoL1AKZm9wcGlzaG5lc3MvTQpmb3IvSApmb3JhCmZvcmFnZS9EUlNNWkcKZm9yYWdlci9NCmZvcmF5L1NNREcKZm9yYmFkZQpmb3JiZWFyL1NNRwpmb3JiZWFyYW5jZS9NCmZvcmJpZC9TCmZvcmJpZGRlbgpmb3JiaWRkaW5nL1lTCmZvcmJvcmUKZm9yYm9ybmUKZm9yY2UvRFNNRwpmb3JjZWQvVQpmb3JjZWZ1bC9QWQpmb3JjZWZ1bG5lc3MvTQpmb3JjZXBzL00KZm9yY2libGUKZm9yY2libHkKZm9yZC9NREdTQgpmb3JlL01TCmZvcmVhcm0vR1NNRApmb3JlYmVhci9NUwpmb3JlYm9kZS9HSkRTCmZvcmVib2RpbmcvTQpmb3JlY2FzdC9NUlpHUwpmb3JlY2FzdGVyL00KZm9yZWNhc3RsZS9NUwpmb3JlY2xvc2UvRFNHCmZvcmVjbG9zdXJlL01TCmZvcmVjb3VydC9TTQpmb3JlZG9vbS9ER1MKZm9yZWZhdGhlci9NUwpmb3JlZmVldApmb3JlZmluZ2VyL1NNCmZvcmVmb290L00KZm9yZWZyb250L1NNCmZvcmVnby9HCmZvcmVnb2VzCmZvcmVnb25lCmZvcmVncm91bmQvR01EUwpmb3JlaGFuZC9NUwpmb3JlaGVhZC9NUwpmb3JlaWduL1pSUApmb3JlaWduZXIvTQpmb3JlaWdubmVzcy9NCmZvcmVrbmV3CmZvcmVrbm93L0dTCmZvcmVrbm93bGVkZ2UvTQpmb3Jla25vd24KZm9yZWxlZy9TTQpmb3JlbGltYi9NUwpmb3JlbG9jay9NUwpmb3JlbWFuL00KZm9yZW1hc3QvTVMKZm9yZW1lbgpmb3JlbW9zdApmb3JlbmFtZS9NRFMKZm9yZW5vb24vTVMKZm9yZW5zaWMvTVMKZm9yZW5zaWNhbGx5CmZvcmVuc2ljcy9NCmZvcmVvcmRhaW4vR1NECmZvcmVwYXJ0L01TCmZvcmVwZXJzb24vU00KZm9yZXBsYXkvTQpmb3JlcXVhcnRlci9NUwpmb3JlcnVubmVyL01TCmZvcmVzYWlsL01TCmZvcmVzYXcKZm9yZXNlZS9SU0JaCmZvcmVzZWVhYmxlL1UKZm9yZXNlZWluZwpmb3Jlc2Vlbi9VCmZvcmVzZWVyL00KZm9yZXNoYWRvdy9HRFMKZm9yZXNob3JlL1MKZm9yZXNob3J0ZW4vRFNHCmZvcmVzaWdodC9NRApmb3Jlc2lnaHRlZG5lc3MvTQpmb3Jlc2tpbi9NUwpmb3Jlc3Qncwpmb3Jlc3QvQUNHRFMKZm9yZXN0YWxsL1NHRApmb3Jlc3RhdGlvbi9BQ00KZm9yZXN0ZXIvTVMKZm9yZXN0bGFuZC9NCmZvcmVzdHJ5L00KZm9yZXRhc3RlL0RTTUcKZm9yZXRlbGwvR1MKZm9yZXRob3VnaHQvTQpmb3JldG9sZApmb3JldmVyL00KZm9yZXZlcm1vcmUKZm9yZXdhcm4vRFNHCmZvcmV3ZW50CmZvcmV3b21hbi9NCmZvcmV3b21lbgpmb3Jld29yZC9NUwpmb3JmZWl0L0dTTUQKZm9yZmVpdHVyZS9TTQpmb3JnYXRoZXIvU0RHCmZvcmdhdmUKZm9yZ2UvRFJTTVpHVkoKZm9yZ2VyL00KZm9yZ2VyeS9TTQpmb3JnZXQvUwpmb3JnZXRmdWwvWVAKZm9yZ2V0ZnVsbmVzcy9NCmZvcmdldHRhYmxlL1UKZm9yZ2V0dGluZwpmb3JnaW5nL00KZm9yZ2l2YWJsZS9VCmZvcmdpdmUvQlJTWkdQCmZvcmdpdmVuCmZvcmdpdmVuZXNzL00KZm9yZ2l2ZXIvTQpmb3JnaXZpbmcvVQpmb3Jnby9SWkcKZm9yZ29lci9NCmZvcmdvZXMKZm9yZ29uZQpmb3Jnb3QKZm9yZ290dGVuL1UKZm9yay9NREdTCmZvcmtmdWwvU00KZm9ya2xpZnQvTVMKZm9ybG9ybi9ZCmZvcm0ncwpmb3JtL0NBSUZER1MKZm9ybWFsL1NNWQpmb3JtYWxkZWh5ZGUvTQpmb3JtYWxpbgpmb3JtYWxpc20vTQpmb3JtYWxpc3QvTVMKZm9ybWFsaXRpZXMKZm9ybWFsaXR5L0lNCmZvcm1hbGl6YXRpb24vTQpmb3JtYWxpemUvR0RTCmZvcm1hdC9TTVYKZm9ybWF0aW9uL0NGQVNNCmZvcm1hdHRlZC9BCmZvcm1hdHRpbmcvTQpmb3JtZWQvVQpmb3JtZXIvRklBTQpmb3JtZXJseQpmb3JtZml0dGluZwpmb3JtaWMKZm9ybWlkYWJsZQpmb3JtaWRhYmx5CmZvcm1sZXNzL1BZCmZvcm1sZXNzbmVzcy9NCmZvcm11bGEvTVMKZm9ybXVsYWljCmZvcm11bGF0ZS9BRFNHTlgKZm9ybXVsYXRlZC9VCmZvcm11bGF0aW9uL0FNCmZvcm11bGF0b3IvU00KZm9ybmljYXRlL0dORFMKZm9ybmljYXRpb24vTQpmb3JuaWNhdG9yL01TCmZvcnNha2UvR1MKZm9yc2FrZW4KZm9yc29vawpmb3Jzb290aApmb3Jzd2Vhci9TRwpmb3Jzd29yZQpmb3Jzd29ybgpmb3JzeXRoaWEvU00KZm9ydC9NUwpmb3J0ZS9TTQpmb3J0aGNvbWluZy9NCmZvcnRocmlnaHQvWVAKZm9ydGhyaWdodG5lc3MvTQpmb3J0aHdpdGgKZm9ydGlldGgvTQpmb3J0aWV0aHMKZm9ydGlmaWNhdGlvbi9NCmZvcnRpZmllZC9VCmZvcnRpZmllci9NCmZvcnRpZnkvRFJTTlpHWApmb3J0aXNzaW1vCmZvcnRpdHVkZS9NCmZvcnRuaWdodC9NWVMKZm9ydHJlc3MvTVMKZm9ydHVpdG91cy9ZUApmb3J0dWl0b3VzbmVzcy9NCmZvcnR1aXR5L00KZm9ydHVuYXRlL1VZCmZvcnR1bmUvTVMKZm9ydHVuZXRlbGxlci9TTQpmb3J0dW5ldGVsbGluZy9NCmZvcnR5L1NNSApmb3J1bS9TTQpmb3J3YXJkL01EUllaVEdTUApmb3J3YXJkZXIvTQpmb3J3YXJkbmVzcy9NCmZvcndlbnQKZm9zc2EKZm9zc2lsL1NNCmZvc3NpbGl6YXRpb24vTQpmb3NzaWxpemUvR0RTCmZvc3Rlci9HU0QKZm91Z2h0CmZvdWwvTURSWVRHU1AKZm91bGFyZC9NCmZvdWxtb3V0aGVkCmZvdWxuZXNzL00KZm91bmQvRlNERwpmb3VuZGF0aW9uL1NNCmZvdW5kZWQvVQpmb3VuZGVyL0dNRFMKZm91bmRsaW5nL1NNCmZvdW5kcnkvU00KZm91bnQvU00KZm91bnRhaW4vU00KZm91bnRhaW5oZWFkL01TCmZvdXIvTUhTCmZvdXJmb2xkCmZvdXJwb3N0ZXIvU00KZm91cnNjb3JlL00KZm91cnNvbWUvU00KZm91cnNxdWFyZQpmb3VydGVlbi9TTUgKZm91cnRlZW50aC9NCmZvdXJ0ZWVudGhzCmZvdXJ0aC9NWQpmb3VydGhzCmZvd2wvTURHUwpmb3gvR01EUwpmb3hmaXJlL00KZm94Z2xvdmUvU00KZm94aG9sZS9NUwpmb3hob3VuZC9TTQpmb3hodW50L0dTCmZveGlseQpmb3hpbmVzcy9NCmZveHRyb3QvTVMKZm94dHJvdHRlZApmb3h0cm90dGluZwpmb3h5L1JUUApmb3llci9TTQpmcHMKZnIKZnJhY2FzL01TCmZyYWNrL1NERwpmcmFjdGFsL1NNCmZyYWN0aW9uL0lTTQpmcmFjdGlvbmFsL1kKZnJhY3Rpb3VzL1lQCmZyYWN0aW91c25lc3MvTQpmcmFjdHVyZS9NR0RTCmZyYWcvUwpmcmFnaWxlL1JUCmZyYWdpbGl0eS9NCmZyYWdtZW50L0dNRFMKZnJhZ21lbnRhcnkvTQpmcmFnbWVudGF0aW9uL00KZnJhZ3JhbmNlL01TCmZyYWdyYW50L1kKZnJhaWwvUllUUApmcmFpbG5lc3MvTQpmcmFpbHR5L1NNCmZyYW1lL0RSU01aRwpmcmFtZWQvVQpmcmFtZXIvTQpmcmFtZXdvcmsvU00KZnJhbmMvU00KZnJhbmNoaXNlJ3MKZnJhbmNoaXNlL0VEU0cKZnJhbmNoaXNlZS9TTQpmcmFuY2hpc2VyL1NNCmZyYW5jaXVtL00KZnJhbmNvcGhvbmUKZnJhbmdpYmlsaXR5L00KZnJhbmdpYmxlCmZyYW5rL1NNRFJZVEdQCmZyYW5rZnVydGVyL01TCmZyYW5raW5jZW5zZS9NCmZyYW5rbmVzcy9NCmZyYW50aWMKZnJhbnRpY2FsbHkKZnJhcHBlL1NNCmZyYXQvTVMKZnJhdGVybmFsL1kKZnJhdGVybml0eS9GU00KZnJhdGVybml6YXRpb24vTQpmcmF0ZXJuaXplL1pHRFJTCmZyYXRlcm5pemVyL00KZnJhdHJpY2lkYWwKZnJhdHJpY2lkZS9NUwpmcmF1ZCdzCmZyYXVkL1MKZnJhdWRzdGVyL1MKZnJhdWR1bGVuY2UvTQpmcmF1ZHVsZW50L1kKZnJhdWdodApmcmF5J3MKZnJheS9DREdTCmZyYXp6bGUvTUdEUwpmcmVhay9TTURHCmZyZWFraXNoL1lQCmZyZWFraXNobmVzcy9NCmZyZWFreS9SVApmcmVja2xlL0RTTUcKZnJlY2tseQpmcmVlL1lURFJTCmZyZWViYXNlL01HRFMKZnJlZWJpZS9TTQpmcmVlYm9vdGVyL1NNCmZyZWVib3JuCmZyZWVkbWFuL00KZnJlZWRtZW4KZnJlZWRvbS9TTQpmcmVlaGFuZApmcmVlaG9sZC9aTVJTCmZyZWVob2xkZXIvTQpmcmVlaW5nCmZyZWVsYW5jZS9EUlNNWkcKZnJlZWxhbmNlci9NCmZyZWVsb2FkL1NEUlpHCmZyZWVsb2FkZXIvTQpmcmVlbWFuL00KZnJlZW1hc29ucnkKZnJlZW1lbgpmcmVlcGhvbmUKZnJlZXNpYS9TCmZyZWVzdGFuZGluZwpmcmVlc3RvbmUvU00KZnJlZXN0eWxlL1NNCmZyZWV0aGlua2VyL1NNCmZyZWV0aGlua2luZy9NCmZyZWV3YXJlL00KZnJlZXdheS9NUwpmcmVld2hlZWwvREdTCmZyZWV3aWxsCmZyZWV6YWJsZQpmcmVlemUncwpmcmVlemUvVUFHUwpmcmVlemVyL01TCmZyZWV6aW5nJ3MKZnJlaWdodC9NRFJaR1MKZnJlaWdodGVyL00KZnJlbmNoCmZyZW5ldGljCmZyZW5ldGljYWxseQpmcmVuemllZC9ZCmZyZW56eS9EU00KZnJlcQpmcmVxdWVuY2llcwpmcmVxdWVuY3kvSU0KZnJlcXVlbnQvRFJZU1pURwpmcmVxdWVudGVkL1UKZnJlcXVlbnRlci9NCmZyZXNjby9NCmZyZXNjb2VzCmZyZXNoL1BOUllYWlQKZnJlc2hlbi9aR0RSCmZyZXNoZW5lci9NCmZyZXNoZXQvTVMKZnJlc2htYW4vTQpmcmVzaG1lbgpmcmVzaG5lc3MvTQpmcmVzaHdhdGVyL00KZnJldC9NUwpmcmV0ZnVsL1lQCmZyZXRmdWxuZXNzL00KZnJldHNhdy9NUwpmcmV0dGVkCmZyZXR0aW5nCmZyZXR3b3JrL00KZnJpYWJsZQpmcmlhci9TTQpmcmlhcnkvU00KZnJpY2Fzc2VlL0RTTQpmcmljYXNzZWVpbmcKZnJpY2F0aXZlL1NNCmZyaWN0aW9uL1NNCmZyaWN0aW9uYWwKZnJpZGdlL1NNCmZyaWVkY2FrZS9NUwpmcmllbmQncwpmcmllbmQvVUdTRFkKZnJpZW5kbGVzcwpmcmllbmRsaWVzCmZyaWVuZGxpbmVzcy9VTQpmcmllbmRseSdzCmZyaWVuZGx5L1VQVFIKZnJpZW5kc2hpcC9NUwpmcmllemUvU00KZnJpZy9TCmZyaWdhdGUvTVMKZnJpZ2dlZApmcmlnZ2luZwpmcmlnaHQvU1hHTUROCmZyaWdodGVuL0RHCmZyaWdodGVuaW5nL1kKZnJpZ2h0ZnVsL1BZCmZyaWdodGZ1bG5lc3MvTQpmcmlnaWQvWVAKZnJpZ2lkaXR5L00KZnJpZ2lkbmVzcy9NCmZyaWxsL1NNRApmcmlsbHkvVFIKZnJpbmdlJ3MKZnJpbmdlL0lEU0cKZnJpcHBlcnkvU00KZnJpc2svU0RHCmZyaXNraWx5CmZyaXNraW5lc3MvTQpmcmlza3kvVFJQCmZyaXNzb24vUwpmcml0dGVyL01EU0cKZnJpdHovTQpmcml2b2xpdHkvU00KZnJpdm9sb3VzL1BZCmZyaXZvbG91c25lc3MvTQpmcml6ei9NRFNZRwpmcml6emxlL01HRFMKZnJpenp5L1RSCmZybwpmcm9jaydzCmZyb2NrL0NVUwpmcm9nL01TCmZyb2dnaW5nL1MKZnJvZ21hbi9NCmZyb2dtYXJjaC9HRFMKZnJvZ21lbgpmcm9nc3Bhd24KZnJvbGljL1NNCmZyb2xpY2tlZApmcm9saWNrZXIvU00KZnJvbGlja2luZwpmcm9saWNzb21lCmZyb20KZnJvbmQvU00KZnJvbnQncwpmcm9udC9GU0RHCmZyb250YWdlL01TCmZyb250YWwvWQpmcm9udGJlbmNoL1pSUwpmcm9udGllci9NUwpmcm9udGllcnNtYW4vTQpmcm9udGllcnNtZW4KZnJvbnRpZXJzd29tYW4KZnJvbnRpZXJzd29tZW4KZnJvbnRpc3BpZWNlL01TCmZyb250d2FyZC9TCmZyb3NoL00KZnJvc3Qncwpmcm9zdC9DU0RHCmZyb3N0Yml0CmZyb3N0Yml0ZS9NR1MKZnJvc3RiaXR0ZW4KZnJvc3RpbHkKZnJvc3RpbmVzcy9NCmZyb3N0aW5nL1NNCmZyb3N0eS9UUFIKZnJvdGgvTURHCmZyb3RoaW5lc3MvTQpmcm90aHMKZnJvdGh5L1RQUgpmcm91ZnJvdS9NCmZyb3dhcmQvUApmcm93YXJkbmVzcy9NCmZyb3duL1NNREcKZnJvd3ppbHkKZnJvd3ppbmVzcy9NCmZyb3d6eS9UUFIKZnJvemUvQVUKZnJvemVuL1VBCmZydWN0aWZ5L0RTRwpmcnVjdG9zZS9NCmZydWdhbC9ZCmZydWdhbGl0eS9NCmZydWl0L1NNREcKZnJ1aXRjYWtlL01TCmZydWl0ZXJlci9TCmZydWl0ZnVsL1lQCmZydWl0ZnVsbmVzcy9NCmZydWl0aW5lc3MvTQpmcnVpdGlvbi9NCmZydWl0bGVzcy9QWQpmcnVpdGxlc3NuZXNzL00KZnJ1aXR5L1RQUgpmcnVtcC9TTQpmcnVtcGlzaApmcnVtcHkvVFIKZnJ1c3RyYXRlL0dOWERTCmZydXN0cmF0aW5nL1kKZnJ1c3RyYXRpb24vTQpmcnVzdHVtL01TCmZyeS9HRFNNCmZyeWVyL1NNCmZ0CmZ0cC9aR1MKZnVjaHNpYS9NUwpmdWNrL1NNR0RSWiEKZnVja2VyL00hCmZ1Y2toZWFkL1MhCmZ1ZGRsZS9EU01HCmZ1ZGdlL0RTTUcKZnVlaHJlci9NUwpmdWVsJ3MKZnVlbC9BREdTCmZ1ZwpmdWdhbApmdWdneQpmdWdpdGl2ZS9NUwpmdWd1ZS9TTQpmdWhyZXIvU00KZnVsY3J1bS9NUwpmdWxmaWxsL0xER1MKZnVsZmlsbGVkL1UKZnVsZmlsbGluZy9VCmZ1bGZpbGxtZW50L00KZnVsbC9NRFJaVEdTUApmdWxsYmFjay9NUwpmdWxsZXIvTQpmdWxsbmVzcy9NCmZ1bGx5CmZ1bG1pbmF0ZS9EU1hHTgpmdWxtaW5hdGlvbi9NCmZ1bHNvbWUvUFkKZnVsc29tZW5lc3MvTQpmdW0vUwpmdW1ibGUvRFJTTVpHCmZ1bWJsZXIvTQpmdW1ibGluZy9ZCmZ1bWUvTUdEUwpmdW1pZ2FudC9NUwpmdW1pZ2F0ZS9HTkRTCmZ1bWlnYXRpb24vTQpmdW1pZ2F0b3IvU00KZnVteS9SVApmdW4vTQpmdW5jdGlvbi9NREdTCmZ1bmN0aW9uYWwvWQpmdW5jdGlvbmFsaXNtCmZ1bmN0aW9uYWxpc3QvUwpmdW5jdGlvbmFsaXR5L1MKZnVuY3Rpb25hcnkvU00KZnVuZC9BTURHUwpmdW5kYW1lbnRhbC9TTVkKZnVuZGFtZW50YWxpc20vTQpmdW5kYW1lbnRhbGlzdC9TTQpmdW5kZWQvVQpmdW5kaW5nL00KZnVuZHJhaXNlci9NUwpmdW5kcmFpc2luZwpmdW5lcmFsL01TCmZ1bmVyYXJ5CmZ1bmVyZWFsL1kKZnVuZmFpci9TCmZ1bmdhbApmdW5naQpmdW5naWJsZS9NUwpmdW5naWNpZGFsCmZ1bmdpY2lkZS9NUwpmdW5nb2lkCmZ1bmdvdXMKZnVuZ3VzL00KZnVuaWN1bGFyL1NNCmZ1bmsvTURHUwpmdW5raW5lc3MvTQpmdW5reS9QUlQKZnVubmVsL01ER1MKZnVubmVyCmZ1bm5lc3QKZnVubmlseQpmdW5uaW5lc3MvTQpmdW5ueS9UUFJTTQpmdW5ueW1hbi9NCmZ1bm55bWVuCmZ1ci9TTQpmdXJiZWxvdy9NCmZ1cmJpc2gvQURTRwpmdXJpb3VzL1kKZnVybCdzCmZ1cmwvVURHUwpmdXJsb25nL1NNCmZ1cmxvdWdoL0dNRApmdXJsb3VnaHMKZnVybgpmdXJuYWNlL1NNCmZ1cm5pc2gvQURTRwpmdXJuaXNoZWQvVQpmdXJuaXNoaW5ncy9NCmZ1cm5pdHVyZS9NCmZ1cm9yL1NNCmZ1cnJlZApmdXJyaWVyL00KZnVycmluZXNzL00KZnVycmluZy9NCmZ1cnJvdy9NRFNHCmZ1cnJ5L1pUUlAKZnVydGhlci9TR0QKZnVydGhlcmFuY2UvTQpmdXJ0aGVybW9yZQpmdXJ0aGVybW9zdApmdXJ0aGVzdApmdXJ0aXZlL1lQCmZ1cnRpdmVuZXNzL00KZnVyeS9TTQpmdXJ6ZS9NCmZ1c2Uncy9BCmZ1c2UvQ0FJRkdEUwpmdXNlZS9TTQpmdXNlbGFnZS9TTQpmdXNpYmlsaXR5L00KZnVzaWJsZQpmdXNpbGllci9TTQpmdXNpbGxhZGUvTVMKZnVzaW9uL0lGS1NNCmZ1c3MvTURTRwpmdXNzYnVkZ2V0L01TCmZ1c3NpbHkKZnVzc2luZXNzL00KZnVzc3BvdC9TTQpmdXNzeS9UUlAKZnVzdGlhbi9NCmZ1c3RpbmVzcy9NCmZ1c3R5L1RSUApmdXQKZnV0aWxlL1kKZnV0aWxpdHkvTQpmdXRvbi9TTQpmdXR1cmUvTVMKZnV0dXJpc20vTQpmdXR1cmlzdC9NUwpmdXR1cmlzdGljCmZ1dHVyaXR5L1NNCmZ1dHVyb2xvZ2lzdC9NUwpmdXR1cm9sb2d5L00KZnV0ei9EU0cKZnV6ei9NRFNHCmZ1enpiYWxsL1MKZnV6emlseQpmdXp6aW5lc3MvTQpmdXp6eS9QVFIKZndkCmZ3eQpnL1NOWFZCCmdhYi9TTQpnYWJhcmRpbmUvU00KZ2FiYmVkCmdhYmJpbmVzcy9NCmdhYmJpbmcKZ2FiYmxlL0RTTUcKZ2FiYnkvUlRQCmdhYmVyZGluZS9TTQpnYWJmZXN0L01TCmdhYmxlL0RTTQpnYWQvUwpnYWRhYm91dC9TTQpnYWRkZWQKZ2FkZGVyL1NNCmdhZGRpbmcKZ2FkZmx5L1NNCmdhZGdldC9TTQpnYWRnZXRyeS9NCmdhZG9saW5pdW0vTQpnYWZmL01EUlpHUwpnYWZmZS9TTQpnYWZmZXIvTQpnYWcvU00KZ2FnYQpnYWdnZWQKZ2FnZ2luZwpnYWdnbGUvU00KZ2FpZXR5L00KZ2FpbHkKZ2FpbidzCmdhaW4vQURHUwpnYWluZXIvU00KZ2FpbmZ1bC9ZCmdhaW5zYWlkCmdhaW5zYXkvWkdSUwpnYWluc2F5ZXIvTQpnYWl0L01SWlMKZ2FpdGVyL00KZ2FsL1NNCmdhbGEvTVMKZ2FsYWN0aWMKZ2FsYXh5L1NNCmdhbGUncwpnYWxlL0FTCmdhbGVuYS9NCmdhbGwvTURHUwpnYWxsYW50L1NNWQpnYWxsYW50cnkvTQpnYWxsYmxhZGRlci9NUwpnYWxsZW9uL1NNCmdhbGxlcmlhL01TCmdhbGxlcnkvU00KZ2FsbGV5L1NNCmdhbGxpbWF1ZnJ5L1NNCmdhbGxpdW0vTQpnYWxsaXZhbnQvR1NECmdhbGxvbi9TTQpnYWxsb3AvU01ERwpnYWxsb3dzL00KZ2FsbHN0b25lL01TCmdhbG9vdC9TTQpnYWxvcmUKZ2Fsb3NoL01TCmdhbHVtcGgvREcKZ2FsdW1waHMKZ2FsdmFuaWMKZ2FsdmFuaXNtL00KZ2FsdmFuaXphdGlvbi9NCmdhbHZhbml6ZS9EU0cKZ2FsdmFub21ldGVyL01TCmdhbWJpdC9TTQpnYW1ibGUvRFJTTVpHCmdhbWJsZXIvTQpnYW1ibGluZy9NCmdhbWJvbC9TTURHCmdhbWUvTVlUR0RSU1AKZ2FtZWNvY2svTVMKZ2FtZWtlZXBlci9NUwpnYW1lbmVzcy9NCmdhbWVzbWFuc2hpcC9NCmdhbWVzdGVyL01TCmdhbWV0ZS9TTQpnYW1ldGljCmdhbWluL1NNCmdhbWluZS9TTQpnYW1pbmVzcy9NCmdhbWluZy9NCmdhbW1hL1NNCmdhbW1vbi9NCmdhbW15CmdhbXV0L1NNCmdhbXkvUlRQCmdhbmRlci9TTQpnYW5nL01ER1MKZ2FuZ2J1c3RlcnMvTQpnYW5nbGFuZC9NCmdhbmdsaWEKZ2FuZ2xpbmcKZ2FuZ2xpb24vTQpnYW5nbGlvbmljCmdhbmdwbGFuay9TTQpnYW5ncmVuZS9EU01HCmdhbmdyZW5vdXMKZ2FuZ3N0YS9TCmdhbmdzdGVyL1NNCmdhbmd3YXkvTVMKZ2FuamEKZ2FubmV0L1NNCmdhbnRsZXQvTVMKZ2FudHJ5L1NNCmdhcC9HU01ECmdhcGUvTVMKZ2FyL1NMTQpnYXJhZ2UvRFNNRwpnYXJiL01ER1MKZ2FyYmFnZS9NCmdhcmJhZ2VtYW4KZ2FyYmFuem8vU00KZ2FyYmxlL0RTRwpnYXJjb24vU00KZ2FyZGVuL1NaR01EUgpnYXJkZW5lci9NCmdhcmRlbmlhL01TCmdhcmRlbmluZy9NCmdhcmZpc2gvTVMKZ2FyZ2FudHVhbgpnYXJnbGUvRFNNRwpnYXJnb3lsZS9TTQpnYXJpc2gvUFkKZ2FyaXNobmVzcy9NCmdhcmxhbmQvTURHUwpnYXJsaWMvTQpnYXJsaWNreQpnYXJtZW50L01TCmdhcm5lci9TR0QKZ2FybmV0L1NNCmdhcm5pc2gvR0xNRFMKZ2FybmlzaGVlL0RTTQpnYXJuaXNoZWVpbmcKZ2FybmlzaG1lbnQvU00KZ2FycmV0L1NNCmdhcnJpc29uL01EU0cKZ2Fycm90ZS9NWkdEUlMKZ2Fycm90ZXIvTQpnYXJydWxpdHkvTQpnYXJydWxvdXMvUFkKZ2FycnVsb3VzbmVzcy9NCmdhcnRlci9TTQpnYXMncwpnYXMvQ1MKZ2FzYmFnL1NNCmdhc2VvdXMKZ2FzaC9NRFNHCmdhc2hvbGRlci9TCmdhc2tldC9TTQpnYXNsaWdodC9NUwpnYXNtYW4KZ2FzbWVuCmdhc29ob2wvTQpnYXNvbGluZS9NCmdhc29tZXRlci9TCmdhc3AvTURHUwpnYXNzZWQvQwpnYXNzZXMKZ2Fzc2luZy9DCmdhc3N5L1JUCmdhc3RyaWMKZ2FzdHJpdGlzL00KZ2FzdHJvZW50ZXJpdGlzL00KZ2FzdHJvaW50ZXN0aW5hbApnYXN0cm9ub21lL1MKZ2FzdHJvbm9taWMKZ2FzdHJvbm9taWNhbC9ZCmdhc3Ryb25vbXkvTQpnYXN0cm9wb2QvU00KZ2Fzd29ya3MvTQpnYXRlL01HRFMKZ2F0ZWF1CmdhdGVhdXgKZ2F0ZWNyYXNoL0RSU1pHCmdhdGVjcmFzaGVyL00KZ2F0ZWhvdXNlL1NNCmdhdGVrZWVwZXIvTVMKZ2F0ZXBvc3QvTVMKZ2F0ZXdheS9NUwpnYXRoZXIvU0paR01EUgpnYXRoZXJlci9NCmdhdGhlcmluZy9NCmdhdG9yL1NNCmdhdWNoZS9SUFlUCmdhdWNoZW5lc3MvTQpnYXVjaGVyaWUvTQpnYXVjaG8vU00KZ2F1ZGlseQpnYXVkaW5lc3MvTQpnYXVkeS9SUFQKZ2F1Z2UvRFNNRwpnYXVudC9SUFQKZ2F1bnRsZXQvTVMKZ2F1bnRuZXNzL00KZ2F1emUvTQpnYXV6aW5lc3MvTQpnYXV6eS9SUFQKZ2F2ZQpnYXZlbC9TTQpnYXZvdHRlL01TCmdhd2QKZ2F3ay9ER1MKZ2F3a2lseQpnYXdraW5lc3MvTQpnYXdreS9SUFQKZ2F3cC9ER1MKZ2F5L1RTUE1SCmdheW5lc3MvTQpnYXplL01aR0RSUwpnYXplYm8vU00KZ2F6ZWxsZS9NUwpnYXplci9NCmdhemV0dGUvTUdEUwpnYXpldHRlZXIvTVMKZ2F6aWxsaW9uL1MKZ2F6cGFjaG8vTQpnYXp1bXAvREdTCmdlYXIvTURHUwpnZWFyYm94L01TCmdlYXJpbmcvTQpnZWFyc2hpZnQvTVMKZ2VhcndoZWVsL1NNCmdlY2tvL1NNCmdlZGRpdApnZWUvRFMKZ2VlaW5nCmdlZWsvTVMKZ2Vla3kvUlQKZ2Vlc2UKZ2VlemVyL01TCmdlaXNoYS9NCmdlbC9TTQpnZWxhdGluL00KZ2VsYXRpbm91cwpnZWxjYXAvTQpnZWxkL0RKR1MKZ2VsZGluZy9NCmdlbGlkCmdlbGlnbml0ZS9NCmdlbGxlZApnZWxsaW5nCmdlbS9TTQpnZW1vbG9naWNhbApnZW1vbG9naXN0L01TCmdlbW9sb2d5L00KZ2Vtc3RvbmUvTVMKZ2VuZGFybWUvTVMKZ2VuZGVyL01EUwpnZW5lL01TCmdlbmVhbG9naWNhbC9ZCmdlbmVhbG9naXN0L01TCmdlbmVhbG9neS9TTQpnZW5lcmEKZ2VuZXJhbC9TTVkKZ2VuZXJhbGlzc2ltby9NUwpnZW5lcmFsaXN0L01TCmdlbmVyYWxpdHkvU00KZ2VuZXJhbGl6YXRpb24vTVMKZ2VuZXJhbGl6ZS9HRFMKZ2VuZXJhbHNoaXAvTQpnZW5lcmF0ZS9DQVZOR1NECmdlbmVyYXRpb24vQUNNCmdlbmVyYXRpb25hbApnZW5lcmF0aW9ucwpnZW5lcmF0b3IvU00KZ2VuZXJpYy9TTQpnZW5lcmljYWxseQpnZW5lcm9zaXR5L1NNCmdlbmVyb3VzL1BZCmdlbmVyb3VzbmVzcy9NCmdlbmVzL1MKZ2VuZXNpcy9NCmdlbmV0aWMvUwpnZW5ldGljYWxseQpnZW5ldGljaXN0L01TCmdlbmV0aWNzL00KZ2VuaWFsL0ZZCmdlbmlhbGl0eS9GTQpnZW5pY3VsYXRlCmdlbmllL1NNCmdlbmlpCmdlbml0YWwvRlkKZ2VuaXRhbGlhL00KZ2VuaXRhbHMvTQpnZW5pdGl2ZS9NUwpnZW5pdG91cmluYXJ5Cmdlbml1cy9NUwpnZW5uZWQKZ2VubmluZwpnZW5vY2lkYWwKZ2Vub2NpZGUvTVMKZ2Vub21lL01TCmdlbm9taWNzCmdlbnJlL1NNCmdlbnQvQU1TCmdlbnRlZWwvWVAKZ2VudGVlbG5lc3MvTQpnZW50aWFuL1NNCmdlbnRpbGUvU00KZ2VudGlsaXR5L00KZ2VudGxlL1RHRFJTUApnZW50bGVmb2xrL01TCmdlbnRsZWZvbGtzL00KZ2VudGxlbWFuL01ZCmdlbnRsZW1hbmx5L1UKZ2VudGxlbWVuCmdlbnRsZW5lc3MvTQpnZW50bGV3b21hbi9NCmdlbnRsZXdvbWVuCmdlbnRseQpnZW50cmlmaWNhdGlvbi9NCmdlbnRyaWZ5L0RTR04KZ2VudHJ5L1NNCmdlbnVmbGVjdC9ER1MKZ2VudWZsZWN0aW9uL01TCmdlbnVpbmUvUFkKZ2VudWluZW5lc3MvTQpnZW51cy9NCmdlb2NhY2hlL0RTRwpnZW9jZW50cmljCmdlb2NlbnRyaWNhbGx5Cmdlb2NoZW1pc3RyeS9NCmdlb2RlL1NNCmdlb2Rlc2ljL1NNCmdlb2Rlc3kvTQpnZW9kZXRpYwpnZW9lbmdpbmVlcmluZwpnZW9nCmdlb2dyYXBoZXIvU00KZ2VvZ3JhcGhpYwpnZW9ncmFwaGljYWwvWQpnZW9ncmFwaHkvU00KZ2VvbG9naWMKZ2VvbG9naWNhbC9ZCmdlb2xvZ2lzdC9NUwpnZW9sb2d5L1NNCmdlb20KZ2VvbWFnbmV0aWMKZ2VvbWFnbmV0aXNtL00KZ2VvbWV0ZXIKZ2VvbWV0cmljCmdlb21ldHJpY2FsL1kKZ2VvbWV0cnkvU00KZ2VvcGh5c2ljYWwKZ2VvcGh5c2ljaXN0L1NNCmdlb3BoeXNpY3MvTQpnZW9wb2xpdGljYWwKZ2VvcG9saXRpY3MvTQpnZW9zdGF0aW9uYXJ5Cmdlb3N5bmNocm9ub3VzCmdlb3N5bmNsaW5lL01TCmdlb3RoZXJtYWwKZ2VvdGhlcm1pYwpnZXJhbml1bS9NUwpnZXJiaWwvTVMKZ2VyaWF0cmljL1MKZ2VyaWF0cmljaWFuL1MKZ2VyaWF0cmljcy9NCmdlcm0vTVMKZ2VybWFuZQpnZXJtYW5pdW0vTQpnZXJtaWNpZGFsCmdlcm1pY2lkZS9NUwpnZXJtaW5hbC9NCmdlcm1pbmF0ZS9HTkRTCmdlcm1pbmF0aW9uL00KZ2Vyb250b2xvZ2ljYWwKZ2Vyb250b2xvZ2lzdC9NUwpnZXJvbnRvbG9neS9NCmdlcnJ5bWFuZGVyL0dNRFMKZ2VycnltYW5kZXJpbmcvTQpnZXJ1bmQvTVMKZ2VzdGFsdC9TCmdlc3RhcG8vTVMKZ2VzdGF0ZS9HTkRTCmdlc3RhdGlvbi9NCmdlc3RhdGlvbmFsCmdlc3RpY3VsYXRlL0RTR05YCmdlc3RpY3VsYXRpb24vTQpnZXN0dXJhbApnZXN0dXJlL01HRFMKZ2VzdW5kaGVpdApnZXQvUwpnZXRhd2F5L1NNCmdldHRpbmcKZ2V0dXAvTQpnZXdnYXcvU00KZ2V5c2VyL1NNCmdoYXN0bGluZXNzL00KZ2hhc3RseS9UUFIKZ2hhdC9NUwpnaGVlCmdoZXJraW4vTVMKZ2hldHRvL1NNCmdoZXR0b2l6ZS9HRFMKZ2hvc3QvU01EWUcKZ2hvc3RsaW5lc3MvTQpnaG9zdGx5L1JUUApnaG9zdHdyaXRlL1pHUlMKZ2hvc3R3cml0ZXIvTQpnaG9zdHdyaXR0ZW4KZ2hvc3R3cm90ZQpnaG91bC9TTQpnaG91bGlzaC9ZUApnaG91bGlzaG5lc3MvTQpnaWFudC9TTQpnaWFudGVzcy9NUwpnaWJiZXIvR0RTCmdpYmJlcmlzaC9NCmdpYmJldC9HTURTCmdpYmJvbi9NUwpnaWJib3VzCmdpYmUvTUdEUwpnaWJsZXQvU00KZ2lkZGlseQpnaWRkaW5lc3MvTQpnaWRkeS9SVFAKZ2lmdC9NREdTCmdpZy9TTQpnaWdhYml0L1NNCmdpZ2FieXRlL01TCmdpZ2FoZXJ0ei9NCmdpZ2FudGljCmdpZ2FudGljYWxseQpnaWdhcGl4ZWwvTVMKZ2lnYXdhdHQvU00KZ2lnZ2VkCmdpZ2dpbmcKZ2lnZ2xlL0RSU01aRwpnaWdnbGVyL00KZ2lnZ2x5L1JUCmdpZ29sby9TTQpnaWxkL01EUlpHUwpnaWxkZXIvTQpnaWxkaW5nL00KZ2lsbC9NUwpnaWxsaWUvUwpnaWxsaW9uL1MKZ2lsdC9NUwpnaW1iYWxzL00KZ2ltY3JhY2svU00KZ2ltY3JhY2tlcnkvTQpnaW1sZXQvR1NNRApnaW1tZS9TTQpnaW1taWNrL01TCmdpbW1pY2tyeS9NCmdpbW1pY2t5CmdpbXAvTURHUwpnaW1weQpnaW4vU00KZ2luZ2VyL0dTTURZCmdpbmdlcmJyZWFkL00KZ2luZ2Vyc25hcC9TTQpnaW5nZXJ5CmdpbmdoYW0vTQpnaW5naXZpdGlzL00KZ2lua2dvL00KZ2lua2dvZXMKZ2lubmVkCmdpbm5pbmcKZ2lub3Jtb3VzCmdpbnNlbmcvTQpnaXJhZmZlL01TCmdpcmQvRFJaR1MKZ2lyZGVyL00KZ2lyZGxlL0RTTUcKZ2lybC9NUwpnaXJsZnJpZW5kL01TCmdpcmxob29kL1NNCmdpcmxpc2gvWVAKZ2lybGlzaG5lc3MvTQpnaXJseQpnaXJvL1MKZ2lydC9NREdTCmdpcnRoL00KZ2lydGhzCmdpc3QvTQpnaXQvUwpnaXRlL1MKZ2l2ZS9aR0pSUwpnaXZlYXdheS9NUwpnaXZlYmFjay9NUwpnaXZlbi9TTQpnaXZlci9NCmdpem1vL1NNCmdpenphcmQvTVMKZ2xhY2UvUwpnbGFjZWVkCmdsYWNlaW5nCmdsYWNpYWwvWQpnbGFjaWF0ZS9YR05EUwpnbGFjaWF0aW9uL00KZ2xhY2llci9NUwpnbGFkL01ZU1AKZ2xhZGRlbi9HRFMKZ2xhZGRlcgpnbGFkZGVzdApnbGFkZS9TTQpnbGFkaWF0b3IvU00KZ2xhZGlhdG9yaWFsCmdsYWRpb2xhL1NNCmdsYWRpb2xpCmdsYWRpb2x1cy9NCmdsYWRuZXNzL00KZ2xhZHNvbWUKZ2xhbQpnbGFtb3JpemF0aW9uL00KZ2xhbW9yaXplL0RTRwpnbGFtb3JvdXMvWQpnbGFtb3VyL0dNRFMKZ2xhbmNlL0RTTUcKZ2xhbmQvU00KZ2xhbmRlcwpnbGFuZHVsYXIKZ2xhbnMvTQpnbGFyZS9EU01HCmdsYXJpbmcvWQpnbGFzbm9zdC9NCmdsYXNzL01EU0cKZ2xhc3NibG93ZXIvTVMKZ2xhc3NibG93aW5nL00KZ2xhc3NmdWwvU00KZ2xhc3Nob3VzZS9TCmdsYXNzaWx5CmdsYXNzaW5lc3MvTQpnbGFzc3dhcmUvTQpnbGFzc3kvUlRQCmdsYXVjb21hL00KZ2xhemUvRFNNRwpnbGF6aWVyL1NNCmdsYXppbmcvTQpnbGVhbS9TTURHSgpnbGVhbi9TRFJaR0oKZ2xlYW5lci9NCmdsZWFuaW5ncy9NCmdsZWUvTQpnbGVlZnVsL1lQCmdsZWVmdWxuZXNzL00KZ2xlbi9NUwpnbGVub2h1bWVyYWwKZ2xlbm9pZApnbGliL1lQCmdsaWJiZXIKZ2xpYmJlc3QKZ2xpYm5lc3MvTQpnbGlkZS9EUlNNWkcKZ2xpZGVyL00KZ2xpZGluZy9NCmdsaW1tZXIvTURHSlMKZ2xpbW1lcmluZy9NCmdsaW1wc2UvTUdEUwpnbGludC9TTURHCmdsaXNzYW5kaQpnbGlzc2FuZG8vTQpnbGlzdGVuL01EU0cKZ2xpc3Rlci9EU0cKZ2xpdGNoL0dNRFMKZ2xpdHRlci9NRFNHCmdsaXR0ZXJhdGkKZ2xpdHRlcnkKZ2xpdHovTQpnbGl0enkvVFIKZ2xvYW1pbmcvU00KZ2xvYXQvU01ERwpnbG9hdGluZy9ZCmdsb2IvTURHUwpnbG9iYWwvWQpnbG9iYWxpc20vTQpnbG9iYWxpc3QvTVMKZ2xvYmFsaXphdGlvbi9NCmdsb2JhbGl6ZS9HRFMKZ2xvYmUvU00KZ2xvYmV0cm90dGVyL01TCmdsb2JldHJvdHRpbmcKZ2xvYnVsYXIKZ2xvYnVsZS9NUwpnbG9idWxpbi9NCmdsb2NrZW5zcGllbC9TTQpnbG9vbS9NCmdsb29taWx5Cmdsb29taW5lc3MvTQpnbG9vbXkvVFJQCmdsb3AvTQpnbG9wcHkKZ2xvcmlmaWNhdGlvbi9NCmdsb3JpZnkvR0RTTgpnbG9yaW91cy9JWQpnbG9yeS9EU01HCmdsb3NzL01EU0cKZ2xvc3NhcnkvU00KZ2xvc3NpbHkKZ2xvc3NpbmVzcy9NCmdsb3Nzb2xhbGlhL00KZ2xvc3N5L1BUUlNNCmdsb3R0YWwKZ2xvdHRpcy9NUwpnbG92ZS9EU01HCmdsb3cvTURSWkdTCmdsb3dlci9HTUQKZ2xvd2luZy9ZCmdsb3d3b3JtL01TCmdsdWNhZ29uCmdsdWNvc2UvTQpnbHVlL01HRFMKZ2x1ZWQvVQpnbHVleQpnbHVpZXIKZ2x1aWVzdApnbHVtL1lQCmdsdW1tZXIKZ2x1bW1lc3QKZ2x1bW5lc3MvTQpnbHV0L01OUwpnbHV0ZW4vTQpnbHV0ZW5vdXMKZ2x1dGlub3VzL1kKZ2x1dHRlZApnbHV0dGluZwpnbHV0dG9uL01TCmdsdXR0b25vdXMvWQpnbHV0dG9ueS9NCmdseWNlcmluL00KZ2x5Y2Vyb2wvTQpnbHljb2dlbi9NCmdseXBoCmdtCmduYXJsL1NNREcKZ25hcmx5L1RSCmduYXNoL01EU0cKZ25hdC9NUwpnbmF3L0RHUwpnbmVpc3MvTQpnbm9jY2hpCmdub21lL1NNCmdub21pYwpnbm9taXNoCmdudS9TTQpnby9KTVJIWkcKZ29hZC9NREdTCmdvYWwvTVMKZ29hbGllL1NNCmdvYWxrZWVwZXIvTVMKZ29hbGtlZXBpbmcvTQpnb2FsbGVzcwpnb2FsbW91dGgKZ29hbG1vdXRocwpnb2FscG9zdC9NUwpnb2Fsc2NvcmVyL1MKZ29hbHRlbmRlci9NUwpnb2F0L01TCmdvYXRlZS9TTQpnb2F0aGVyZC9NUwpnb2F0c2tpbi9NUwpnb2IvU00KZ29iYmVkCmdvYmJldC9TTQpnb2JiaW5nCmdvYmJsZS9EUlNNWkcKZ29iYmxlZHlnb29rL00KZ29iYmxlci9NCmdvYmxldC9TTQpnb2JsaW4vU00KZ29ic21hY2tlZApnb2JzdG9wcGVyL1MKZ29kL1NNCmdvZGF3ZnVsCmdvZGNoaWxkL00KZ29kY2hpbGRyZW4vTQpnb2RkYW1taXQKZ29kZGFtbi9ECmdvZGRhdWdodGVyL01TCmdvZGRlc3MvTVMKZ29kZmF0aGVyL1NNCmdvZGZvcnNha2VuCmdvZGhlYWQvTQpnb2Rob29kL00KZ29kbGVzcy9QWQpnb2RsZXNzbmVzcy9NCmdvZGxpa2UKZ29kbGluZXNzL1VNCmdvZGx5L1VSVFAKZ29kbW90aGVyL1NNCmdvZHBhcmVudC9TTQpnb2RzZW5kL1NNCmdvZHNvbi9TTQpnb2RzcGVlZApnb2VyL00KZ29lcwpnb2Zlci9TTQpnb2dnbGUvRFNNRwpnb2dnbGVzL00KZ29pbmcvTQpnb2l0ZXIvU00KZ29sZC9NTlMKZ29sZGJyaWNrL1pHU01EUgpnb2xkYnJpY2tlci9NCmdvbGRlbi9UUgpnb2xkZW5yb2QvTQpnb2xkZmllbGQvUwpnb2xkZmluY2gvTVMKZ29sZGZpc2gvTVMKZ29sZG1pbmUvU00KZ29sZHNtaXRoL00KZ29sZHNtaXRocwpnb2xmL01EUlpHUwpnb2xmZXIvTQpnb2xsaXdvZy9TCmdvbGx5L1NNCmdvbmFkL1NNCmdvbmFkYWwKZ29uZG9sYS9NUwpnb25kb2xpZXIvU00KZ29uZS9aUgpnb25lci9NCmdvbmcvTURHUwpnb25rL1MKZ29ubmEKZ29ub3JyaGVhL00KZ29ub3JyaGVhbApnb256bwpnb28vTQpnb29iZXIvU00KZ29vZC9NWVNQCmdvb2RieWUvTVMKZ29vZGhlYXJ0ZWQKZ29vZGlzaApnb29kbHkvVFIKZ29vZG5lc3MvTQpnb29kbmlnaHQKZ29vZHMvTQpnb29kd2lsbC9NCmdvb2R5L1NNCmdvb2V5Cmdvb2YvTURHUwpnb29mYmFsbC9TTQpnb29maW5lc3MvTQpnb29meS9SUFQKZ29vZ2xlL0RTTUcKZ29vZ2x5L1MKZ29vaWVyCmdvb2llc3QKZ29vay9NUwpnb29uL01TCmdvb3AvTQpnb29zZS9EU01HCmdvb3NlYmVycnkvU00KZ29vc2VidW1wcy9NCmdvb3Nlc3RlcC9TCmdvb3Nlc3RlcHBlZApnb29zZXN0ZXBwaW5nCmdvcGhlci9TTQpnb3JlL01HRFMKZ29yZ2Uncwpnb3JnZS9FRFNHCmdvcmdlb3VzL1lQCmdvcmdlb3VzbmVzcy9NCmdvcmdvbi9TTQpnb3JpbGxhL01TCmdvcmlseQpnb3JpbmVzcy9NCmdvcm1hbmRpemUvRFJTWkcKZ29ybWFuZGl6ZXIvTQpnb3JtbGVzcwpnb3JwL01TCmdvcnNlL00KZ29yeS9SVFAKZ29zaApnb3NoYXdrL01TCmdvc2xpbmcvU00KZ29zcGVsL01TCmdvc3NhbWVyL00KZ29zc2lwL01EUlpHUwpnb3NzaXBlci9NCmdvc3NpcHkKZ290CmdvdGNoYS9TCmdvdGhzCmdvdHRhCmdvdHRlbgpnb3VhY2hlL1MKZ291Z2UvRFJTTVpHCmdvdWdlci9NCmdvdWxhc2gvTVMKZ291cmQvU00KZ291cmRlL01TCmdvdXJtYW5kL1NNCmdvdXJtZXQvU00KZ291dC9NCmdvdXR5L1RSCmdvdgpnb3Zlcm4vREdTQkwKZ292ZXJuYWJsZS9VCmdvdmVybmFuY2UvTQpnb3Zlcm5lZC9VCmdvdmVybmVzcy9NUwpnb3Zlcm5tZW50L01TCmdvdmVybm1lbnRhbApnb3Zlcm5vci9TTQpnb3Zlcm5vcnNoaXAvTQpnb3Z0Cmdvd24vTURHUwpncgpncmFiL01TCmdyYWJiZWQKZ3JhYmJlci9NUwpncmFiYmluZwpncmFiYnkvVFIKZ3JhY2UvRURTTUcKZ3JhY2VmdWwvRVBZCmdyYWNlZnVsbmVzcy9FTQpncmFjZWxlc3MvUFkKZ3JhY2VsZXNzbmVzcy9NCmdyYWNpb3VzL1VZCmdyYWNpb3VzbmVzcy9NCmdyYWNrbGUvTVMKZ3JhZC9NUlpTQgpncmFkYXRlL1hHTkRTCmdyYWRhdGlvbi9DTQpncmFkZSdzCmdyYWRlL0NBRFNHCmdyYWRlZC9VCmdyYWRlci9NCmdyYWRpZW50L01TCmdyYWR1YWwvUFkKZ3JhZHVhbGlzbS9NCmdyYWR1YWxuZXNzL00KZ3JhZHVhdGUvWE1HTkRTCmdyYWR1YXRpb24vTQpncmFmZml0aQpncmFmZml0by9NCmdyYWZ0L1NNRFJaRwpncmFmdGVyL00KZ3JhaGFtL1MKZ3JhaWwKZ3JhaW4vSVNNRApncmFpbmluZXNzL00KZ3JhaW55L1BUUgpncmFtL0tNUwpncmFtbWFyL01TCmdyYW1tYXJpYW4vU00KZ3JhbW1hdGljYWwvVVkKZ3JhbW9waG9uZS9NUwpncmFtcHVzL01TCmdyYW4vUwpncmFuYXJ5L1NNCmdyYW5kL1NNUllQVApncmFuZGFtL01TCmdyYW5kYXVudC9NUwpncmFuZGNoaWxkL00KZ3JhbmRjaGlsZHJlbi9NCmdyYW5kZGFkL1NNCmdyYW5kZGFkZHkvU00KZ3JhbmRkYXVnaHRlci9TTQpncmFuZGVlL01TCmdyYW5kZXVyL00KZ3JhbmRmYXRoZXIvR01EWVMKZ3JhbmRpbG9xdWVuY2UvTQpncmFuZGlsb3F1ZW50CmdyYW5kaW9zZS9ZCmdyYW5kaW9zaXR5L00KZ3JhbmRtYS9NUwpncmFuZG1vdGhlci9NWVMKZ3JhbmRuZXBoZXcvTVMKZ3JhbmRuZXNzL00KZ3JhbmRuaWVjZS9NUwpncmFuZHBhL01TCmdyYW5kcGFyZW50L01TCmdyYW5kc29uL01TCmdyYW5kc3RhbmQvU0dNRApncmFuZHVuY2xlL1NNCmdyYW5nZS9TTQpncmFuaXRlL00KZ3Jhbml0aWMKZ3Jhbm55L1NNCmdyYW5vbGEvTQpncmFudC9TTURSWkcKZ3JhbnRlZS9NUwpncmFudGVyL00KZ3JhbnRzbWFuc2hpcC9NCmdyYW51bGFyCmdyYW51bGFyaXR5L00KZ3JhbnVsYXRlL0dORFMKZ3JhbnVsYXRpb24vTQpncmFudWxlL01TCmdyYXBlL1NNCmdyYXBlZnJ1aXQvTVMKZ3JhcGVzaG90L00KZ3JhcGV2aW5lL1NNCmdyYXBoL01ERwpncmFwaGljL01TCmdyYXBoaWNhbC9ZCmdyYXBoaXRlL00KZ3JhcGhvbG9naXN0L01TCmdyYXBob2xvZ3kvTQpncmFwaHMKZ3JhcG5lbC9NUwpncmFwcGxlL01HRFMKZ3Jhc3AvU01EQkcKZ3Jhc3MvTURTRwpncmFzc2hvcHBlci9NUwpncmFzc2xhbmQvTVMKZ3Jhc3Nyb290cwpncmFzc3kvVFIKZ3JhdGUvRFJTTVpHSgpncmF0ZWZ1bC9VWVAKZ3JhdGVmdWxuZXNzL1VNCmdyYXRlci9NCmdyYXRpZmljYXRpb24vTQpncmF0aWZ5L0dOWERTCmdyYXRpZnlpbmcvWQpncmF0aW4vUwpncmF0aW5nL01ZCmdyYXRpcwpncmF0aXR1ZGUvSU0KZ3JhdHVpdG91cy9ZUApncmF0dWl0b3VzbmVzcy9NCmdyYXR1aXR5L1NNCmdyYXZhbWVuL01TCmdyYXZlL0RSU01ZVEdQCmdyYXZlZGlnZ2VyL1NNCmdyYXZlbC9TR01EWQpncmF2ZW4KZ3JhdmVuZXNzL00KZ3JhdmVzaWRlL01TCmdyYXZlc3RvbmUvU00KZ3JhdmV5YXJkL01TCmdyYXZpZApncmF2aW1ldGVyL01TCmdyYXZpdGFzCmdyYXZpdGF0ZS9HTkRTCmdyYXZpdGF0aW9uL00KZ3Jhdml0YXRpb25hbApncmF2aXR5L00KZ3JhdnkvU00KZ3JheS9NRFJUR1NQCmdyYXliZWFyZC9TTQpncmF5aXNoCmdyYXluZXNzL00KZ3JhemUvRFJTTVpHCmdyYXplci9NCmdyZWFzZS9EUlNNWkcKZ3JlYXNlcGFpbnQvTQpncmVhc2lseQpncmVhc2luZXNzL00KZ3JlYXN5L1BUUgpncmVhdC9TTVJZUFQKZ3JlYXRjb2F0L1NNCmdyZWF0aGVhcnRlZApncmVhdG5lc3MvTQpncmViZS9TTQpncmVlZC9NCmdyZWVkaWx5CmdyZWVkaW5lc3MvTQpncmVlZHkvUFRSCmdyZWVuL0dQU01EUllUCmdyZWVuYmFjay9NUwpncmVlbmJlbHQvTVMKZ3JlZW5lcnkvTQpncmVlbmZpZWxkCmdyZWVuZmx5L1MKZ3JlZW5nYWdlL01TCmdyZWVuZ3JvY2VyL1NNCmdyZWVuaG9ybi9TTQpncmVlbmhvdXNlL1NNCmdyZWVuaXNoCmdyZWVubWFpbC9NCmdyZWVubmVzcy9NCmdyZWVucm9vbS9TTQpncmVlbnN3YXJkL00KZ3JlZW53b29kL00KZ3JlZXQvWkdKU0RSCmdyZWV0ZXIvTQpncmVldGluZy9NCmdyZWdhcmlvdXMvUFkKZ3JlZ2FyaW91c25lc3MvTQpncmVtbGluL1NNCmdyZW5hZGUvU00KZ3JlbmFkaWVyL01TCmdyZW5hZGluZS9NCmdyZXAvUwpncmVwcGVkCmdyZXBwaW5nCmdyZXcvQQpncmV5aG91bmQvU00KZ3JpYmJsZS9TCmdyaWQvTVMKZ3JpZGRsZS9TTQpncmlkZGxlY2FrZS9TTQpncmlkaXJvbi9TTQpncmlkbG9jay9TTUQKZ3JpZWYvU00KZ3JpZXZhbmNlL01TCmdyaWV2ZS9aR0RSUwpncmlldmVyL00KZ3JpZXZvdXMvUFkKZ3JpZXZvdXNuZXNzL00KZ3JpZmZpbi9TTQpncmlmZm9uL1NNCmdyaWxsL1NHTURKCmdyaWxsZS9NUwpncmltL0RZUEcKZ3JpbWFjZS9EU01HCmdyaW1lL1NNCmdyaW1pbmVzcy9NCmdyaW1tZXIKZ3JpbW1lc3QKZ3JpbW5lc3MvTQpncmlteS9UUlAKZ3Jpbi9NUwpncmluZC9TWkdNUkoKZ3JpbmRlci9NCmdyaW5kc3RvbmUvTVMKZ3JpbmdvL01TCmdyaW5uZWQKZ3Jpbm5pbmcKZ3JpcC9NRFJTWkcKZ3JpcGUvU00KZ3JpcGVyL00KZ3JpcHBlL01aR0RSCmdyaXBwZXIvTQpncmlzbGluZXNzL00KZ3Jpc2x5L1JUUApncmlzdC9NWQpncmlzdGxlL00KZ3Jpc3RtaWxsL01TCmdyaXQvTVMKZ3JpdHMvTQpncml0dGVkCmdyaXR0ZXIvU00KZ3JpdHRpbmVzcy9NCmdyaXR0aW5nCmdyaXR0eS9SVFAKZ3JpenpsZS9EU0cKZ3JpenpseS9UUlNNCmdyb2FuL1NHTUQKZ3JvYXQvU00KZ3JvY2VyL01TCmdyb2NlcnkvU00KZ3JvZy9NCmdyb2dnaWx5Cmdyb2dnaW5lc3MvTQpncm9nZ3kvUFJUCmdyb2luL1NNCmdyb2svUwpncm9ra2VkCmdyb2traW5nCmdyb21tZXQvU00KZ3Jvb20vU1pHTURSCmdyb29tZXIvTQpncm9vbWluZy9NCmdyb29tc21hbi9NCmdyb29tc21lbgpncm9vdmUvTUdEUwpncm9vdnkvUlQKZ3JvcGUvRFJTTVpHCmdyb3Blci9NCmdyb3NiZWFrL01TCmdyb3NncmFpbi9NCmdyb3NzL1BUR01EUlNZCmdyb3NzbmVzcy9NCmdyb3Rlc3F1ZS9TUE1ZCmdyb3Rlc3F1ZW5lc3MvTQpncm90dG8vTQpncm90dG9lcwpncm90dHkvVFIKZ3JvdWNoL0dNRFMKZ3JvdWNoaWx5Cmdyb3VjaGluZXNzL00KZ3JvdWNoeS9SVFAKZ3JvdW5kL1pHTURSSlMKZ3JvdW5kYnJlYWtpbmcvTVMKZ3JvdW5kY2xvdGgKZ3JvdW5kY2xvdGhzCmdyb3VuZGVyL00KZ3JvdW5kaG9nL01TCmdyb3VuZGluZy9NCmdyb3VuZGxlc3MvWQpncm91bmRudXQvTVMKZ3JvdW5kc2hlZXQvUwpncm91bmRza2VlcGVyL1MKZ3JvdW5kc21hbgpncm91bmRzbWVuCmdyb3VuZHN3ZWxsL1NNCmdyb3VuZHdhdGVyL00KZ3JvdW5kd29yay9NCmdyb3VwL0pTWkdNRFIKZ3JvdXBlci9NCmdyb3VwaWUvTVMKZ3JvdXBpbmcvTQpncm91cHdhcmUvTQpncm91c2UvTVpHRFJTCmdyb3VzZXIvTQpncm91dC9TR01ECmdyb3ZlL1NNCmdyb3ZlbC9aR0RSUwpncm92ZWxlci9NCmdyb3ZlbGxlZApncm92ZWxsaW5nCmdyb3cvQUhTRwpncm93ZXIvTVMKZ3Jvd2luZy9JCmdyb3dsL1NaR01EUgpncm93bGVyL00KZ3Jvd24vQUkKZ3Jvd251cC9NUwpncm93dGgvQU0KZ3Jvd3RocwpncnViL01TCmdydWJiZWQKZ3J1YmJlci9NUwpncnViYmlseQpncnViYmluZXNzL00KZ3J1YmJpbmcKZ3J1YmJ5L1RSUApncnVic3Rha2UvTQpncnVkZ2UvTUdEUwpncnVkZ2luZy9ZCmdydWUvUwpncnVlbC9HSk0KZ3J1ZWxpbmcvWQpncnVlc29tZS9SWVRQCmdydWVzb21lbmVzcy9NCmdydWZmL1RQUlkKZ3J1ZmZuZXNzL00KZ3J1bWJsZS9EUlNNWkdKCmdydW1ibGVyL00KZ3J1bXAvU00KZ3J1bXBpbHkKZ3J1bXBpbmVzcy9NCmdydW1weS9QUlQKZ3J1bmdlL01TCmdydW5neS9SVApncnVuaW9uL1NNCmdydW50L1NHTUQKZ3QKZ3VhY2Ftb2xlL00KZ3VhbmluZS9NCmd1YW5vL00KZ3VhcmFuaS9NUwpndWFyYW50ZWUvTURTCmd1YXJhbnRlZWluZwpndWFyYW50b3IvTVMKZ3VhcmFudHkvR0RTTQpndWFyZC9TWkdNRFIKZ3VhcmRlZC9ZCmd1YXJkZXIvTQpndWFyZGhvdXNlL1NNCmd1YXJkaWFuL1NNCmd1YXJkaWFuc2hpcC9NCmd1YXJkcmFpbC9TTQpndWFyZHJvb20vU00KZ3VhcmRzbWFuL00KZ3VhcmRzbWVuCmd1YXZhL1NNCmd1YmVybmF0b3JpYWwKZ3VlcnJpbGxhL1NNCmd1ZXNzL1pHQk1EUlMKZ3Vlc3Nlci9NCmd1ZXNzdGltYXRlL0RTTUcKZ3Vlc3N3b3JrL00KZ3Vlc3QvU0dNRApndWVzdGJvb2svU00KZ3Vlc3Rob3VzZS9TCmd1ZXN0cm9vbS9TCmd1ZmYvTQpndWZmYXcvTURHUwpndWlkYW5jZS9NCmd1aWRlL0RSU01aRwpndWlkZWJvb2svU00KZ3VpZGVkL1UKZ3VpZGVsaW5lL1NNCmd1aWRlcG9zdC9TTQpndWlkZXIvTQpndWlsZC9TWk1SCmd1aWxkZXIvTQpndWlsZGhhbGwvTVMKZ3VpbGUvTQpndWlsZWZ1bApndWlsZWxlc3MvWVAKZ3VpbGVsZXNzbmVzcy9NCmd1aWxsZW1vdC9TCmd1aWxsb3RpbmUvRFNNRwpndWlsdC9NCmd1aWx0aWx5Cmd1aWx0aW5lc3MvTQpndWlsdGxlc3MKZ3VpbHR5L1BSVApndWluZWEvTVMKZ3Vpc2UvRVNNCmd1aXRhci9NUwpndWl0YXJpc3QvU00KZ3VsYWcvU00KZ3VsY2gvTVMKZ3VsZGVuL01TCmd1bGYvTVMKZ3VsbC9NRFNHCmd1bGxldC9NUwpndWxsaWJpbGl0eS9NCmd1bGxpYmxlCmd1bGx5L1NNCmd1bHAvTURSU1pHCmd1bHBlci9NCmd1bS9TTQpndW1iYWxsL1MKZ3VtYm8vU00KZ3VtYm9pbC9TTQpndW1ib290L1MKZ3VtZHJvcC9TTQpndW1tZWQKZ3VtbWluZwpndW1teS9UUgpndW1wdGlvbi9NCmd1bXNob2UvTURTCmd1bXNob2VpbmcKZ3VuL1NNCmd1bmJvYXQvU00KZ3VuZmlnaHQvTVJaUwpndW5maWdodGVyL00KZ3VuZmlyZS9NCmd1bmdlCmd1bmd5Cmd1bmsvTQpndW5reQpndW5tYW4vTQpndW5tZW4KZ3VubWV0YWwvTQpndW5uZWQKZ3VubmVsL01TCmd1bm5lci9NUwpndW5uZXJ5L00KZ3VubmluZwpndW5ueS9NCmd1bm55c2Fjay9NUwpndW5wb2ludC9NCmd1bnBvd2Rlci9NCmd1bnJ1bm5lci9NUwpndW5ydW5uaW5nL00KZ3Vuc2hpcC9NUwpndW5zaG90L01TCmd1bnNsaW5nZXIvU00KZ3Vuc21pdGgvTQpndW5zbWl0aHMKZ3Vud2FsZS9NUwpndXBweS9TTQpndXJnbGUvTUdEUwpndXJuZXkvTVMKZ3VydS9NUwpndXNoL01EUlNaRwpndXNoZXIvTQpndXNoaW5nL1kKZ3VzaHkvVFIKZ3Vzc2V0L01TREcKZ3Vzc3kvRFNHCmd1c3QvRU1EU0cKZ3VzdGF0b3J5Cmd1c3RpbHkKZ3VzdG8vTQpndXN0eS9SVApndXQvU00KZ3V0bGVzcy9QCmd1dGxlc3NuZXNzL00KZ3V0c3kvUlQKZ3V0dGVkCmd1dHRlci9TTURHCmd1dHRlcnNuaXBlL01TCmd1dHRpbmcKZ3V0dHVyYWwvTVMKZ3V0dHkvUlQKZ3V2L1MKZ3V2bm9yL1MKZ3V5L1NHTUQKZ3V6emxlL0RSU1pHCmd1enpsZXIvTQpneW0vU00KZ3lta2hhbmEvTVMKZ3ltbmFzaXVtL01TCmd5bW5hc3QvTVMKZ3ltbmFzdGljL1MKZ3ltbmFzdGljYWxseQpneW1uYXN0aWNzL00KZ3ltbm9zcGVybS9TTQpneW1zbGlwL1MKZ3luZWNvbG9naWMKZ3luZWNvbG9naWNhbApneW5lY29sb2dpc3QvU00KZ3luZWNvbG9neS9NCmd5cC9TTQpneXBwZWQKZ3lwcGVyL1NNCmd5cHBpbmcKZ3lwc3Rlci9TTQpneXBzdW0vTQpneXBzeS9TTQpneXJhdGUvRFNHTlgKZ3lyYXRpb24vTQpneXJhdG9yL1NNCmd5cmZhbGNvbi9NUwpneXJvL01TCmd5cm9zY29wZS9NUwpneXJvc2NvcGljCmd5dmUvTUdEUwpoJ20KaC9OUlNYWkdWSgpoYS9TSApoYWJlcmRhc2hlci9TTQpoYWJlcmRhc2hlcnkvU00KaGFiaWxpbWVudC9TTQpoYWJpdCdzCmhhYml0L0lTQgpoYWJpdGFiaWxpdHkvTQpoYWJpdGF0L1NNCmhhYml0YXRpb24vTVMKaGFiaXR1YWwvWVAKaGFiaXR1YWxuZXNzL00KaGFiaXR1YXRlL0dORFMKaGFiaXR1YXRpb24vTQpoYWJpdHVlL1NNCmhhY2llbmRhL1NNCmhhY2svTURSWkdTCmhhY2tlci9NCmhhY2tpbmcvTQpoYWNraXNoCmhhY2tsZS9NUwpoYWNrbmV5L1NNREcKaGFja3Nhdy9TTQpoYWNrdGl2aXN0L01TCmhhY2t3b3JrL00KaGFkCmhhZGRvY2svU00KaGFkbid0CmhhZHN0CmhhZm5pdW0vTQpoYWZ0L01TCmhhZy9TTQpoYWdnYXJkL1lQCmhhZ2dhcmRuZXNzL00KaGFnZ2lzL01TCmhhZ2dpc2gKaGFnZ2xlL01aR0RSUwpoYWdnbGVyL00KaGFnaW9ncmFwaGVyL1NNCmhhZ2lvZ3JhcGh5L1NNCmhhaG5pdW0vTQpoYWlrdS9NCmhhaWwvTURHUwpoYWlsc3RvbmUvTVMKaGFpbHN0b3JtL01TCmhhaXIvTURTCmhhaXJiYWxsL01TCmhhaXJiYW5kL1MKaGFpcmJyZWFkdGgvTQpoYWlyYnJlYWR0aHMKaGFpcmJydXNoL01TCmhhaXJjbG90aC9NCmhhaXJjdXQvU00KaGFpcmRvL01TCmhhaXJkcmVzc2VyL1NNCmhhaXJkcmVzc2luZy9NCmhhaXJkcnllci9NUwpoYWlyZ3JpcC9TCmhhaXJpbmVzcy9NCmhhaXJsZXNzCmhhaXJsaWtlCmhhaXJsaW5lL1NNCmhhaXJuZXQvU00KaGFpcnBpZWNlL01TCmhhaXJwaW4vU00KaGFpcnNicmVhZHRoL00KaGFpcnNicmVhZHRocwpoYWlyc3BsaXR0ZXIvU00KaGFpcnNwbGl0dGluZy9NCmhhaXJzcHJheS9TCmhhaXJzcHJpbmcvTVMKaGFpcnN0eWxlL01TCmhhaXJzdHlsaXN0L1NNCmhhaXJ5L1RSUApoYWoKaGFqai9NCmhhamplcwpoYWpqaS9TTQpoYWtlL01TCmhhbGFsL00KaGFsYmVyZC9TTQpoYWxjeW9uCmhhbGUvSVRHRFJTCmhhbGYvTQpoYWxmYmFjay9TTQpoYWxmaGVhcnRlZC9QWQpoYWxmaGVhcnRlZG5lc3MvTQpoYWxmcGVuY2UKaGFsZnBlbm55L1NNCmhhbGZ0aW1lL01TCmhhbGZ0b25lL01TCmhhbGZ3YXkKaGFsZndpdC9TTQpoYWxpYnV0L1NNCmhhbGl0ZS9NCmhhbGl0b3Npcy9NCmhhbGwvTVMKaGFsbGVsdWphaC9NCmhhbGxlbHVqYWhzCmhhbGxtYXJrL0dNRFMKaGFsbG9vL01TRwpoYWxsb3cvRFNHCmhhbGxvd2VkL1UKaGFsbHVjaW5hdGUvR05YRFMKaGFsbHVjaW5hdGlvbi9NCmhhbGx1Y2luYXRvcnkKaGFsbHVjaW5vZ2VuL1NNCmhhbGx1Y2lub2dlbmljL1NNCmhhbGx3YXkvU00KaGFsby9NREdTCmhhbG9nZW4vU00KaGFsb24KaGFsdC9NRFJaR1MKaGFsdGVyL0dNRApoYWx0ZXJuZWNrL1MKaGFsdGluZy9ZCmhhbHZlL0RTRwpoYWx5YXJkL01TCmhhbS9TTQpoYW1idXJnL1NaTVIKaGFtYnVyZ2VyL00KaGFtbGV0L01TCmhhbW1lZApoYW1tZXIvTURSU0paRwpoYW1tZXJlci9NCmhhbW1lcmhlYWQvU00KaGFtbWVybG9jay9TTQpoYW1tZXJ0b2UvTVMKaGFtbWluZwpoYW1tb2NrL1NNCmhhbW15L1RSCmhhbXBlci9HTURTCmhhbXBlcmVkL1UKaGFtc3Rlci9NUwpoYW1zdHJpbmcvR1NNCmhhbXN0cnVuZwpoYW5kJ3MKaGFuZC9VREdTCmhhbmRiYWcvU00KaGFuZGJhbGwvTVMKaGFuZGJhcnJvdy9TTQpoYW5kYmlsbC9NUwpoYW5kYm9vay9NUwpoYW5kYnJha2UvUwpoYW5kY2FyL1NNCmhhbmRjYXJ0L01TCmhhbmRjbGFzcC9NUwpoYW5kY3JhZnQvU01ERwpoYW5kY3VmZi9NREdTCmhhbmRlZC9QCmhhbmRmdWwvU00KaGFuZGd1bi9TTQpoYW5kaGVsZC9NUwpoYW5kaG9sZC9NUwpoYW5kaWNhcC9NUwpoYW5kaWNhcHBlZApoYW5kaWNhcHBlci9NUwpoYW5kaWNhcHBpbmcKaGFuZGljcmFmdC9NUwpoYW5kaWx5CmhhbmRpbmVzcy9NCmhhbmRpd29yay9NCmhhbmRrZXJjaGllZi9NUwpoYW5kbGUvTVpHRFJTCmhhbmRsZWJhci9NUwpoYW5kbGVyL00KaGFuZG1hZGUKaGFuZG1haWQvWE1OUwpoYW5kbWFpZGVuL00KaGFuZG91dC9TTQpoYW5kb3Zlci9TCmhhbmRwaWNrL0dEUwpoYW5kcmFpbC9NUwpoYW5kc2F3L1NNCmhhbmRzZXQvU00KaGFuZHNoYWtlL0pNR1MKaGFuZHNvbWUvUFlUUgpoYW5kc29tZW5lc3MvTQpoYW5kc3ByaW5nL01TCmhhbmRzdGFuZC9TTQpoYW5kd29yay9NCmhhbmR3b3ZlbgpoYW5kd3JpdGluZy9NCmhhbmR3cml0dGVuCmhhbmR5L1VUUgpoYW5keW1hbi9NCmhhbmR5bWVuCmhhbmcvTURSSlpHUwpoYW5nYXIvTVMKaGFuZ2RvZwpoYW5nZXIvTQpoYW5naW5nL00KaGFuZ21hbi9NCmhhbmdtZW4KaGFuZ25haWwvTVMKaGFuZ291dC9TTQpoYW5nb3Zlci9NUwpoYW5ndXAvTVMKaGFuay9NUlpTCmhhbmtlci9HSkQKaGFua2VyaW5nL00KaGFua2llL01TCmhhbnNvbS9NUwpoYXAvTVkKaGFwaGF6YXJkL1lQCmhhcGhhemFyZG5lc3MvTQpoYXBsZXNzL1lQCmhhcGxlc3NuZXNzL00KaGFwbG9pZC9NUwpoYXBwZW4vU0RHSgpoYXBwZW5pbmcvTQpoYXBwZW5zdGFuY2UvU00KaGFwcGlseS9VCmhhcHBpbmVzcy9VTQpoYXBweS9VUlRQCmhhcmFuZ3VlL01HRFMKaGFyYXNzL0xaR0RSUwpoYXJhc3Nlci9NCmhhcmFzc21lbnQvTQpoYXJiaW5nZXIvU00KaGFyYm9yL0dNRFMKaGFyYm9ybWFzdGVyL1MKaGFyZC9OUllYVFAKaGFyZGJhY2svTVMKaGFyZGJhbGwvTQpoYXJkYm9hcmQvTQpoYXJkYm91bmQKaGFyZGNvcmUKaGFyZGNvdmVyL1NNCmhhcmRlbi9aR0RSCmhhcmRlbmVkL1UKaGFyZGVuZXIvTQpoYXJkaGF0L01TCmhhcmRoZWFkZWQvUFkKaGFyZGhlYWRlZG5lc3MvTQpoYXJkaGVhcnRlZC9QWQpoYXJkaGVhcnRlZG5lc3MvTQpoYXJkaWhvb2QvTQpoYXJkaWx5CmhhcmRpbmVzcy9NCmhhcmRsaW5lci9NUwpoYXJkbmVzcy9NCmhhcmRzY3JhYmJsZQpoYXJkc2hpcC9TTQpoYXJkc3RhbmQvU00KaGFyZHRhY2svTQpoYXJkdG9wL1NNCmhhcmR3YXJlL00KaGFyZHdpcmVkCmhhcmR3b29kL1NNCmhhcmR3b3JraW5nCmhhcmR5L1BUUgpoYXJlL01HRFMKaGFyZWJlbGwvTVMKaGFyZWJyYWluZWQKaGFyZWxpcC9TTQpoYXJlbGlwcGVkCmhhcmVtL1NNCmhhcmljb3QvUwpoYXJrL0RHUwpoYXJsZXF1aW4vU00KaGFybG90L1NNCmhhcmxvdHJ5L00KaGFybS9NREdTCmhhcm1lZC9VCmhhcm1mdWwvWVAKaGFybWZ1bG5lc3MvTQpoYXJtbGVzcy9QWQpoYXJtbGVzc25lc3MvTQpoYXJtb25pYy9TTQpoYXJtb25pY2EvTVMKaGFybW9uaWNhbGx5Cmhhcm1vbmllcwpoYXJtb25pb3VzL1BZCmhhcm1vbmlvdXNuZXNzL00KaGFybW9uaXVtL01TCmhhcm1vbml6YXRpb24vTQpoYXJtb25pemUvWkdEUlMKaGFybW9uaXplci9NCmhhcm1vbnkvRU0KaGFybmVzcydzCmhhcm5lc3MvVURTRwpoYXJwL01ER1MKaGFycGlzdC9TTQpoYXJwb29uL1pHU01EUgpoYXJwb29uZXIvTQpoYXJwc2ljaG9yZC9NUwpoYXJwc2ljaG9yZGlzdC9TTQpoYXJweS9TTQpoYXJyaWRhbi9NUwpoYXJyaWVyL00KaGFycm93L1NNREcKaGFycnVtcGgvR0QKaGFycnVtcGhzCmhhcnJ5L0RSU1pHCmhhcnNoL1JZVFAKaGFyc2huZXNzL00KaGFydC9NUwpoYXJ2ZXN0L1NNRFJaRwpoYXJ2ZXN0ZWQvVQpoYXJ2ZXN0ZXIvTQpoYXNoL0FNRFNHCmhhc2hpc2gvTQpoYXNodGFnL1NNCmhhc24ndApoYXNwL01TCmhhc3NsZS9EU01HCmhhc3NvY2svU00KaGFzdC9ETlhHCmhhc3RlL1NNCmhhc3Rlbi9ERwpoYXN0aWx5Cmhhc3RpbmVzcy9NCmhhc3R5L1JUUApoYXQvWkdTTURSCmhhdGJhbmQvUwpoYXRib3gvTVMKaGF0Y2gvTURTRwpoYXRjaGJhY2svTVMKaGF0Y2hlY2svU00KaGF0Y2hlZC9VCmhhdGNoZXJ5L1NNCmhhdGNoZXQvU00KaGF0Y2hpbmcvTQpoYXRjaHdheS9TTQpoYXRlL01TCmhhdGVmdWwvUFkKaGF0ZWZ1bG5lc3MvTQpoYXRlbW9uZ2VyL01TCmhhdGVyL00KaGF0cGluL1MKaGF0cmVkL1NNCmhhdHN0YW5kL1MKaGF0dGVkCmhhdHRlci9TTQpoYXR0aW5nCmhhdWJlcmsvU00KaGF1Z2h0aWx5CmhhdWdodGluZXNzL00KaGF1Z2h0eS9QUlQKaGF1bC9NRFJaR1MKaGF1bGFnZS9NCmhhdWxlci9NCmhhdWxpZXIvUwpoYXVuY2gvTVMKaGF1bnQvU01EUlpHCmhhdW50ZXIvTQpoYXVudGluZy9ZCmhhdXRldXIvTQpoYXZlL01HUwpoYXZlbid0CmhhdmVuL1NNCmhhdmVyc2Fjay9TTQpoYXZvYy9NCmhhdy9HU01ECmhhd2svTURSWkdTCmhhd2tlci9NCmhhd2tpc2gvUApoYXdraXNobmVzcy9NCmhhd3Nlci9TTQpoYXd0aG9ybi9NUwpoYXkvR1NNRApoYXljb2NrL1NNCmhheWxvZnQvU00KaGF5bWFraW5nCmhheW1vdy9TTQpoYXlyaWNrL01TCmhheXJpZGUvTVMKaGF5c2VlZC9NUwpoYXlzdGFjay9TTQpoYXl3aXJlCmhhemFyZC9TTURHCmhhemFyZG91cy9ZCmhhemUvTVpHSkRSUwpoYXplbC9TTQpoYXplbG51dC9NUwpoYXplci9NCmhhemlseQpoYXppbmVzcy9NCmhhemluZy9NCmhhem1hdApoYXp5L1JUUApoZHFycwpoZSdkCmhlJ2xsCmhlL00KaGVhZC9NRFJaR0pTCmhlYWRhY2hlL01TCmhlYWRiYW5kL01TCmhlYWRiYW5nZXIvUwpoZWFkYmFuZ2luZwpoZWFkYm9hcmQvU00KaGVhZGJ1dHQvRFNHCmhlYWRjYXNlL1MKaGVhZGNoZWVzZQpoZWFkY291bnQvUwpoZWFkZHJlc3MvTVMKaGVhZGVyL00KaGVhZGZpcnN0CmhlYWRnZWFyL00KaGVhZGh1bnQvRFJTWkcKaGVhZGh1bnRlci9NCmhlYWRodW50aW5nL00KaGVhZGlseQpoZWFkaW5lc3MvTQpoZWFkaW5nL00KaGVhZGxhbXAvTVMKaGVhZGxhbmQvTVMKaGVhZGxlc3MKaGVhZGxpZ2h0L01TCmhlYWRsaW5lL01aR0RSUwpoZWFkbGluZXIvTQpoZWFkbG9jay9NUwpoZWFkbG9uZwpoZWFkbWFuL00KaGVhZG1hc3Rlci9TTQpoZWFkbWVuCmhlYWRtaXN0cmVzcy9NUwpoZWFkcGhvbmUvTVMKaGVhZHBpZWNlL01TCmhlYWRwaW4vU00KaGVhZHF1YXJ0ZXIvU0RHCmhlYWRxdWFydGVycy9NCmhlYWRyZXN0L01TCmhlYWRyb29tL00KaGVhZHNjYXJmCmhlYWRzY2FydmVzCmhlYWRzZXQvU00KaGVhZHNoaXAvU00KaGVhZHNocmlua2VyL1NNCmhlYWRzbWFuL00KaGVhZHNtZW4KaGVhZHN0YWxsL1NNCmhlYWRzdGFuZC9TTQpoZWFkc3RvbmUvU00KaGVhZHN0cm9uZwpoZWFkdGVhY2hlci9TCmhlYWR3YWl0ZXIvU00KaGVhZHdhdGVycy9NCmhlYWR3YXkvTQpoZWFkd2luZC9TTQpoZWFkd29yZC9TTQpoZWFkeS9SVFAKaGVhbC9EUkhaR1MKaGVhbGVkL1UKaGVhbGVyL00KaGVhbHRoL00KaGVhbHRoY2FyZQpoZWFsdGhmdWwvUFkKaGVhbHRoZnVsbmVzcy9NCmhlYWx0aGlseS9VCmhlYWx0aGluZXNzL1VNCmhlYWx0aHkvVVRSUApoZWFwL01ER1MKaGVhci9BSEdKUwpoZWFyZC9BVQpoZWFyZXIvU00KaGVhcmluZy9BTQpoZWFya2VuL1NHRApoZWFyc2F5L00KaGVhcnNlJ3MKaGVhcnNlL0FTCmhlYXJ0L1NNCmhlYXJ0YWNoZS9NUwpoZWFydGJlYXQvTVMKaGVhcnRicmVhay9TTUcKaGVhcnRicm9rZW4KaGVhcnRidXJuL00KaGVhcnRlbi9FU0dECmhlYXJ0ZmVsdApoZWFydGgvTQpoZWFydGhydWcvUwpoZWFydGhzCmhlYXJ0aHN0b25lL1NNCmhlYXJ0aWx5CmhlYXJ0aW5lc3MvTQpoZWFydGxhbmQvTVMKaGVhcnRsZXNzL1BZCmhlYXJ0bGVzc25lc3MvTQpoZWFydHJlbmRpbmcvWQpoZWFydHNpY2svUApoZWFydHNpY2tuZXNzL00KaGVhcnRzdHJpbmdzL00KaGVhcnR0aHJvYi9NUwpoZWFydHdhcm1pbmcKaGVhcnR3b29kL00KaGVhcnR5L1JTTVBUCmhlYXQncwpoZWF0L0FER1MKaGVhdGVkL1UKaGVhdGVkbHkKaGVhdGVyL1NNCmhlYXRoL01OUlgKaGVhdGhlbi9NCmhlYXRoZW5kb20vTQpoZWF0aGVuaXNoCmhlYXRoZW5pc20vTQpoZWF0aGVyL00KaGVhdGhzCmhlYXRpbmcvTQpoZWF0cHJvb2YKaGVhdHN0cm9rZS9NCmhlYXR3YXZlL1MKaGVhdmUvRFJTTVpHCmhlYXZlbi9TTVkKaGVhdmVubHkvVFIKaGVhdmVucy9NCmhlYXZlbndhcmQvUwpoZWF2ZXIvTQpoZWF2aWx5CmhlYXZpbmVzcy9NCmhlYXZ5L1JTTVRQCmhlYXZ5aGVhcnRlZApoZWF2eXNldApoZWF2eXdlaWdodC9NUwpoZWNrL00KaGVja2xlL0RSU01aRwpoZWNrbGVyL00KaGVja2xpbmcvTQpoZWN0YXJlL1NNCmhlY3RpYwpoZWN0aWNhbGx5CmhlY3RvZ3JhbS9TTQpoZWN0b21ldGVyL01TCmhlY3Rvci9TTURHCmhlZGdlL0RSU01aRwpoZWRnZWhvZy9NUwpoZWRnZWhvcC9TCmhlZGdlaG9wcGVkCmhlZGdlaG9wcGluZwpoZWRnZXIvTQpoZWRnZXJvdy9TTQpoZWRvbmlzbS9NCmhlZG9uaXN0L01TCmhlZG9uaXN0aWMKaGVlZC9NREdTCmhlZWRlZC9VCmhlZWRmdWwvWQpoZWVkbGVzcy9QWQpoZWVkbGVzc25lc3MvTQpoZWVoYXcvU01ERwpoZWVsL01ER1MKaGVlbGxlc3MKaGVmdC9NREdTCmhlZnRpbHkKaGVmdGluZXNzL00KaGVmdHkvUFJUCmhlZ2Vtb25pYwpoZWdlbW9ueS9NCmhlZ2lyYS9TTQpoZWlmZXIvU00KaGVpZ2h0L1hTTU4KaGVpZ2h0ZW4vREcKaGVpbm91cy9ZUApoZWlub3VzbmVzcy9NCmhlaXIvTVMKaGVpcmVzcy9NUwpoZWlybG9vbS9TTQpoZWlzdC9TTURHCmhlbGQKaGVsaWNhbApoZWxpY2VzCmhlbGljb3B0ZXIvU0dNRApoZWxpb2NlbnRyaWMKaGVsaW90cm9wZS9TTQpoZWxpcGFkL1MKaGVsaXBvcnQvTVMKaGVsaXVtL00KaGVsaXgvTQpoZWxsL00KaGVsbGJlbnQKaGVsbGNhdC9NUwpoZWxsZWJvcmUvTQpoZWxsZmlyZQpoZWxsaG9sZS9NUwpoZWxsaW9uL01TCmhlbGxpc2gvWVAKaGVsbGlzaG5lc3MvTQpoZWxsby9TTQpoZWxsdXZhCmhlbG0vTVMKaGVsbWV0L1NNRApoZWxtc21hbi9NCmhlbG1zbWVuCmhlbG90L1NNCmhlbHAvTURSWkdTSgpoZWxwZXIvTQpoZWxwZnVsL1VZCmhlbHBmdWxuZXNzL00KaGVscGluZy9NCmhlbHBsZXNzL1BZCmhlbHBsZXNzbmVzcy9NCmhlbHBsaW5lL1NNCmhlbHBtYXRlL1NNCmhlbHZlL1NNCmhlbS9TTQpoZW1hdGl0ZS9NCmhlbWF0b2xvZ2ljCmhlbWF0b2xvZ2ljYWwKaGVtYXRvbG9naXN0L01TCmhlbWF0b2xvZ3kvTQpoZW1lL00KaGVtaXNwaGVyZS9TTQpoZW1pc3BoZXJpYwpoZW1pc3BoZXJpY2FsCmhlbWxpbmUvU00KaGVtbG9jay9TTQpoZW1tZWQKaGVtbWVyL1NNCmhlbW1pbmcKaGVtb2dsb2Jpbi9NCmhlbW9waGlsaWEvTQpoZW1vcGhpbGlhYy9NUwpoZW1vcnJoYWdlL01HRFMKaGVtb3JyaGFnaWMKaGVtb3JyaG9pZC9NUwpoZW1vc3RhdC9NUwpoZW1wL01OCmhlbXN0aXRjaC9NRFNHCmhlbi9NCmhlbmNlCmhlbmNlZm9ydGgKaGVuY2Vmb3J3YXJkCmhlbmNobWFuL00KaGVuY2htZW4KaGVubmEvU01ERwpoZW5wZWNrL0dTRApoZXAKaGVwYXJpbi9NCmhlcGF0aWMKaGVwYXRpdGlzL00KaGVwYXRvY3l0ZS9TCmhlcHBlcgpoZXBwZXN0CmhlcHRhZ29uL01TCmhlcHRhZ29uYWwKaGVwdGF0aGxvbi9TTQpoZXJhbGQvU01ERwpoZXJhbGRlZC9VCmhlcmFsZGljCmhlcmFsZHJ5L00KaGVyYi9NUwpoZXJiYWNlb3VzCmhlcmJhZ2UvTQpoZXJiYWwvUwpoZXJiYWxpc3QvTVMKaGVyYmljaWRhbApoZXJiaWNpZGUvTVMKaGVyYml2b3JlL1NNCmhlcmJpdm9yb3VzCmhlcmN1bGVhbgpoZXJkL01EUlpHUwpoZXJkZXIvTQpoZXJkc21hbi9NCmhlcmRzbWVuCmhlcmUvTQpoZXJlYWJvdXQvUwpoZXJlYWZ0ZXIvU00KaGVyZWJ5CmhlcmVkaXRhcnkKaGVyZWRpdHkvTQpoZXJlaW4KaGVyZWluYWZ0ZXIKaGVyZW9mCmhlcmVvbgpoZXJlc3kvU00KaGVyZXRpYy9TTQpoZXJldGljYWwKaGVyZXRvCmhlcmV0b2ZvcmUKaGVyZXVudG8KaGVyZXVwb24KaGVyZXdpdGgKaGVyaXRhYmxlL0kKaGVyaXRhZ2UvTVMKaGVybWFwaHJvZGl0ZS9TTQpoZXJtYXBocm9kaXRpYwpoZXJtZXRpYwpoZXJtZXRpY2FsL1kKaGVybWl0L1NNCmhlcm1pdGFnZS9NUwpoZXJuaWEvU00KaGVybmlhbApoZXJuaWF0ZS9HTkRTCmhlcm5pYXRpb24vTQpoZXJvL00KaGVyb2VzCmhlcm9pYy9TCmhlcm9pY2FsbHkKaGVyb2ljcy9NCmhlcm9pbi9TTQpoZXJvaW5lL1NNCmhlcm9pc20vTQpoZXJvbi9TTQpoZXJwZXMvTQpoZXJwZXRvbG9naXN0L1NNCmhlcnBldG9sb2d5L00KaGVycmluZy9NUwpoZXJyaW5nYm9uZS9NCmhlcnNlbGYKaGVydHovTQpoZXNpdGFuY2UvTQpoZXNpdGFuY3kvTQpoZXNpdGFudC9ZCmhlc2l0YXRlL0RTR05YCmhlc2l0YXRpbmcvVVkKaGVzaXRhdGlvbi9NCmhlc3NpYW4KaGV0ZXJvL1NNCmhldGVyb2RveApoZXRlcm9kb3h5L00KaGV0ZXJvZ2VuZWl0eS9NCmhldGVyb2dlbmVvdXMvWQpoZXRlcm9zZXh1YWwvTVlTCmhldGVyb3NleHVhbGl0eS9NCmhldXJpc3RpYy9NUwpoZXVyaXN0aWNhbGx5CmhldXJpc3RpY3MvTQpoZXcvWkdTRFIKaGV3ZXIvTQpoZXgvR01EUwpoZXhhZGVjaW1hbC9TCmhleGFnb24vTVMKaGV4YWdvbmFsCmhleGFncmFtL1NNCmhleGFtZXRlci9TTQpoZXkKaGV5ZGF5L1NNCmhmCmhndApoZ3d5CmhpL1NECmhpYXR1cy9NUwpoaWJhY2hpL01TCmhpYmVybmF0ZS9HTkRTCmhpYmVybmF0aW9uL00KaGliZXJuYXRvci9NUwpoaWJpc2N1cy9NUwpoaWNjb3VnaC9ERwpoaWNjb3VnaHMKaGljY3VwL0dTTUQKaGljay9NUwpoaWNrZXkvU00KaGlja29yeS9TTQpoaWQKaGlkZGVuCmhpZGUvTVpHSkRSUwpoaWRlYXdheS9TTQpoaWRlYm91bmQKaGlkZW91cy9ZUApoaWRlb3VzbmVzcy9NCmhpZGVvdXQvTVMKaGlkZXIvTQpoaWRpbmcvTQpoaWUvUwpoaWVpbmcKaGllcmFyY2hpYwpoaWVyYXJjaGljYWwvWQpoaWVyYXJjaHkvU00KaGllcm9nbHlwaC9NCmhpZXJvZ2x5cGhpYy9NUwpoaWVyb2dseXBocwpoaWdoL01SWVpUUApoaWdoYmFsbC9TTQpoaWdoYm9ybgpoaWdoYm95L01TCmhpZ2hicm93L1NNCmhpZ2hjaGFpci9NUwpoaWdoZmFsdXRpbgpoaWdoaGFuZGVkL1BZCmhpZ2hoYW5kZWRuZXNzL00KaGlnaGxhbmQvTVJaUwpoaWdobGFuZGVyL00KaGlnaGxpZ2h0L1NNRFJaRwpoaWdobGlnaHRlci9NCmhpZ2huZXNzL00KaGlnaHJvYWQvTVMKaGlnaHMKaGlnaHRhaWwvRFNHCmhpZ2h3YXkvTVMKaGlnaHdheW1hbi9NCmhpZ2h3YXltZW4KaGlqYWIKaGlqYWNrL1NKWkdNRFIKaGlqYWNrZXIvTQpoaWphY2tpbmcvTQpoaWtlL01aR0RSUwpoaWtlci9NCmhpa2luZy9NCmhpbGFyaW91cy9QWQpoaWxhcmlvdXNuZXNzL00KaGlsYXJpdHkvTQpoaWxsL01TCmhpbGxiaWxseS9TTQpoaWxsaW5lc3MvTQpoaWxsb2NrL01TCmhpbGxzaWRlL1NNCmhpbGx0b3AvTVMKaGlsbHkvUFJUCmhpbHQvTVMKaGltL1MKaGltc2VsZgpoaW5kL01SWlMKaGluZGVyL0dECmhpbmRlcmVkL1UKaGluZG1vc3QKaGluZHF1YXJ0ZXIvTVMKaGluZHJhbmNlL1NNCmhpbmRzaWdodC9NCmhpbmdlJ3MKaGluZ2UvVURTRwpoaW50L01EUlpHUwpoaW50ZXIvTQpoaW50ZXJsYW5kL1NNCmhpcC9TUE0KaGlwYmF0aApoaXBiYXRocwpoaXBib25lL01TCmhpcGh1Z2dlcnMKaGlwbmVzcy9NCmhpcHBlZApoaXBwZXIKaGlwcGVzdApoaXBwaWUvU00KaGlwcGluZwpoaXBwby9TTQpoaXBwb2Ryb21lL1NNCmhpcHBvcG90YW11cy9NUwpoaXBweQpoaXBzdGVyL01TCmhpcmFnYW5hCmhpcmUncwpoaXJlL0FHRFMKaGlyZWxpbmcvTVMKaGlyc3V0ZS9QCmhpcnN1dGVuZXNzL00KaGlzcy9NRFNHCmhpc3QKaGlzdGFtaW5lL01TCmhpc3RvZ3JhbS9NUwpoaXN0b2xvZ2lzdC9TTQpoaXN0b2xvZ3kvTQpoaXN0b3JpYW4vTVMKaGlzdG9yaWMKaGlzdG9yaWNhbC9ZCmhpc3RvcmljaXR5L00KaGlzdG9yaW9ncmFwaGVyL01TCmhpc3RvcmlvZ3JhcGh5L00KaGlzdG9yeS9TTQpoaXN0cmlvbmljL1MKaGlzdHJpb25pY2FsbHkKaGlzdHJpb25pY3MvTQpoaXQvU00KaGl0Y2gncwpoaXRjaC9VRFNHCmhpdGNoZXIvTVMKaGl0Y2hoaWtlL0RSU01aRwpoaXRjaGhpa2VyL00KaGl0aGVyCmhpdGhlcnRvCmhpdHRlci9TTQpoaXR0aW5nCmhpdmUvTUdEUwpoaXlhCmhtbQpoby9TTURSWVoKaG9hZ2llL01TCmhvYXJkL1NaR01EUkoKaG9hcmRlci9NCmhvYXJkaW5nL00KaG9hcmZyb3N0L00KaG9hcmluZXNzL00KaG9hcnNlL1lUUlAKaG9hcnNlbmVzcy9NCmhvYXJ5L1RSUApob2F4L01EUlNaRwpob2F4ZXIvTQpob2IvU00KaG9iYml0L1MKaG9iYmxlL01aR0RSUwpob2JibGVyL00KaG9iYnkvU00KaG9iYnlob3JzZS9NUwpob2JieWlzdC9TTQpob2Jnb2JsaW4vTVMKaG9ibmFpbC9TR01ECmhvYm5vYi9TCmhvYm5vYmJlZApob2Jub2JiaW5nCmhvYm8vTVMKaG9jay9NRFNHCmhvY2tleS9NCmhvY2tzaG9wL01TCmhvZC9TTQpob2RnZXBvZGdlL1NNCmhvZS9TTQpob2VjYWtlL1NNCmhvZWRvd24vU00KaG9laW5nCmhvZXIvTQpob2cvU00KaG9nYW4vU00KaG9nYmFjay9TTQpob2dnZWQKaG9nZ2luZwpob2dnaXNoL1kKaG9nc2hlYWQvU00KaG9ndGllL0RTCmhvZ3R5aW5nCmhvZ3dhc2gvTQpob2ljay9TR0QKaG9pc3QvU0dNRApob2tlL0dEUwpob2tleQpob2tpZXIKaG9raWVzdApob2t1bS9NCmhvbGQvTVJKU1pHCmhvbGRhbGwvUwpob2xkZXIvTQpob2xkaW5nL00KaG9sZG91dC9TTQpob2xkb3Zlci9TTQpob2xkdXAvTVMKaG9sZS9NR0RTCmhvbGV5CmhvbGlkYXkvU01ERwpob2xpZGF5bWFrZXIvUwpob2xpbmVzcy9VTQpob2xpc20KaG9saXN0aWMKaG9saXN0aWNhbGx5CmhvbGxlci9NREdTCmhvbGxvdy9NRFJZUFNURwpob2xsb3duZXNzL00KaG9sbHkvU00KaG9sbHlob2NrL01TCmhvbG1pdW0vTQpob2xvY2F1c3QvU00KaG9sb2dyYW0vTVMKaG9sb2dyYXBoL00KaG9sb2dyYXBoaWMKaG9sb2dyYXBocwpob2xvZ3JhcGh5L00KaG9scwpob2xzdGVyL1NNREcKaG9seS9VUlBUCmhvbWFnZS9NUwpob21icmUvTVMKaG9tYnVyZy9TTQpob21lL01ZWkdEUlMKaG9tZWJvZHkvU00KaG9tZWJveS9TTQpob21lY29taW5nL1NNCmhvbWVncm93bgpob21lbGFuZC9NUwpob21lbGVzcy9NUApob21lbGVzc25lc3MvTQpob21lbGlrZQpob21lbGluZXNzL00KaG9tZWx5L1BSVApob21lbWFkZQpob21lbWFrZXIvU00KaG9tZW1ha2luZy9NCmhvbWVvcGF0aC9NCmhvbWVvcGF0aGljCmhvbWVvcGF0aHMKaG9tZW9wYXRoeS9NCmhvbWVvc3Rhc2lzL00KaG9tZW9zdGF0aWMKaG9tZW93bmVyL01TCmhvbWVwYWdlL01TCmhvbWVyL0dNRApob21lcm9vbS9NUwpob21lc2Nob29saW5nL00KaG9tZXNpY2svUApob21lc2lja25lc3MvTQpob21lc3B1bi9NCmhvbWVzdGVhZC9TTURSWkcKaG9tZXN0ZWFkZXIvTQpob21lc3RyZXRjaC9NUwpob21ldG93bi9NUwpob21ld2FyZC9TCmhvbWV3b3JrL01SWkcKaG9tZXdyZWNrZXIvU00KaG9tZXkvU01QCmhvbWV5bmVzcy9NCmhvbWljaWRhbApob21pY2lkZS9NUwpob21pZXIKaG9taWVzdApob21pbGV0aWMKaG9taWx5L1NNCmhvbWluaWQvU00KaG9taW5vaWQvUwpob21pbnkvTQpob21vL01TCmhvbW9lcm90aWMKaG9tb2dlbmVpdHkvTQpob21vZ2VuZW91cy9ZCmhvbW9nZW5pemF0aW9uL00KaG9tb2dlbml6ZS9EU0cKaG9tb2dyYXBoL00KaG9tb2dyYXBocwpob21vbG9nb3VzCmhvbW9ueW0vU00KaG9tb3Bob2JpYS9NCmhvbW9waG9iaWMKaG9tb3Bob25lL01TCmhvbW9zZXh1YWwvU00KaG9tb3NleHVhbGl0eS9NCmhvbi9TWlRHTURSCmhvbmNoby9NUwpob25lL01TCmhvbmVyL00KaG9uZXN0L0VZVApob25lc3Rlcgpob25lc3R5L0VNCmhvbmV5L1NHTUQKaG9uZXliZWUvU00KaG9uZXljb21iL01EU0cKaG9uZXlkZXcvU00KaG9uZXlsb2N1c3QvTQpob25leW1vb24vWkdNRFJTCmhvbmV5bW9vbmVyL00KaG9uZXlwb3QvUwpob25leXN1Y2tsZS9TTQpob25rL01EUlNaRwpob25rZXIvTQpob25reS9TTQpob25vci9FU0dNREIKaG9ub3JhYmxlbmVzcy9NCmhvbm9yYWJseS9FCmhvbm9yYXJpbHkKaG9ub3Jhcml1bS9NUwpob25vcmFyeQpob25vcmVlL1NNCmhvbm9yZXIvU00KaG9ub3JpZmljL01TCmhvb2NoL00KaG9vZC9NRFNHCmhvb2RpZS9NUwpob29kbHVtL1NNCmhvb2Rvby9NRFNHCmhvb2R3aW5rL0RHUwpob29leS9NCmhvb2YvTURSU1pHCmhvb2sncwpob29rL1VEU0cKaG9va2FoL00KaG9va2Focwpob29rZXIvTVMKaG9va3VwL01TCmhvb2t3b3JtL01TCmhvb2t5L00KaG9vbGlnYW4vTVMKaG9vbGlnYW5pc20vTQpob29wL01EU0cKaG9vcGxhL00KaG9vcmF5Cmhvb3NlZ293L1NNCmhvb3QvTURSU1pHCmhvb3RlbmFubnkvU00KaG9vdGVyL00KaG9vdmVyL0RTRwpob292ZXMKaG9wL1NHTUQKaG9wZS9NUwpob3BlZnVsL1BTTVkKaG9wZWZ1bG5lc3MvTQpob3BlbGVzcy9ZUApob3BlbGVzc25lc3MvTQpob3BwZWQKaG9wcGVyL01TCmhvcHBpbmcKaG9wc2NvdGNoL01EU0cKaG9yYS9NUwpob3JkZS9EU01HCmhvcmVob3VuZC9TTQpob3Jpem9uL1NNCmhvcml6b250YWwvU01ZCmhvcm1vbmFsCmhvcm1vbmUvU00KaG9ybi9NRFMKaG9ybmJsZW5kZS9NCmhvcm5ldC9NUwpob3JubGVzcwpob3JubGlrZQpob3JucGlwZS9NUwpob3JueS9UUgpob3JvbG9naWMKaG9yb2xvZ2ljYWwKaG9yb2xvZ2lzdC9NUwpob3JvbG9neS9NCmhvcm9zY29wZS9TTQpob3JyZW5kb3VzL1kKaG9ycmlibGUvUApob3JyaWJsZW5lc3MvTQpob3JyaWJseQpob3JyaWQvWQpob3JyaWZpYwpob3JyaWZpY2FsbHkKaG9ycmlmeS9EU0cKaG9ycmlmeWluZy9ZCmhvcnJvci9NUwpob3JzZSdzCmhvcnNlL1VEU0cKaG9yc2ViYWNrL00KaG9yc2Vib3gvUwpob3JzZWZsZXNoL00KaG9yc2VmbHkvU00KaG9yc2VoYWlyL00KaG9yc2VoaWRlL00KaG9yc2VsYXVnaC9NCmhvcnNlbGF1Z2hzCmhvcnNlbGVzcwpob3JzZW1hbi9NCmhvcnNlbWFuc2hpcC9NCmhvcnNlbWVuCmhvcnNlcGxheS9NCmhvcnNlcG93ZXIvTQpob3JzZXJhZGlzaC9NUwpob3JzZXNoaXQvIQpob3JzZXNob2UvRFNNCmhvcnNlc2hvZWluZwpob3JzZXRhaWwvU00KaG9yc2V0cmFkaW5nCmhvcnNld2hpcC9TTQpob3JzZXdoaXBwZWQKaG9yc2V3aGlwcGluZwpob3JzZXdvbWFuL00KaG9yc2V3b21lbgpob3JzZXkKaG9yc2llcgpob3JzaWVzdApob3J0YXRvcnkKaG9ydGljdWx0dXJhbApob3J0aWN1bHR1cmFsaXN0L1MKaG9ydGljdWx0dXJlL00KaG9ydGljdWx0dXJpc3QvTVMKaG9zYW5uYS9TTQpob3NlL01HRFMKaG9zZXBpcGUvUwpob3NpZXIvTVMKaG9zaWVyeS9NCmhvc3AKaG9zcGhvbGlwYXNlCmhvc3BpY2UvTVMKaG9zcGl0YWJsZS9JCmhvc3BpdGFibHkvSQpob3NwaXRhbC9TTQpob3NwaXRhbGl0eS9NCmhvc3BpdGFsaXphdGlvbi9TTQpob3NwaXRhbGl6ZS9EU0cKaG9zdC9NRFNHCmhvc3RhZ2UvTVMKaG9zdGVsL1pHTURSUwpob3N0ZWxlci9NCmhvc3RlbHJ5L1NNCmhvc3Rlc3MvTURTRwpob3N0aWxlL01ZUwpob3N0aWxpdGllcy9NCmhvc3RpbGl0eS9TTQpob3N0bGVyL01TCmhvdC9TWVAKaG90YmVkL01TCmhvdGJsb29kZWQKaG90Ym94L01TCmhvdGNha2UvU00KaG90ZWwvU00KaG90ZWxpZXIvTVMKaG90Zm9vdC9NREdTCmhvdGhlYWQvRFNNCmhvdGhlYWRlZC9ZUApob3RoZWFkZWRuZXNzL00KaG90aG91c2UvU00KaG90a2V5L1MKaG90bGluay9TCmhvdG5lc3MvTQpob3RwbGF0ZS9TTQpob3Rwb3QvUwpob3RzL00KaG90c2hvdC9NUwpob3R0ZWQKaG90dGVyCmhvdHRlc3QKaG90dGllL1MKaG90dGluZwpob3VuZC9TR01ECmhvdXIvTVlTCmhvdXJnbGFzcy9NUwpob3VyaS9TTQpob3VzZSdzCmhvdXNlL0FEU0cKaG91c2Vib2F0L1NNCmhvdXNlYm91bmQKaG91c2Vib3kvU00KaG91c2VicmVhay9SU1pHCmhvdXNlYnJlYWtlci9NCmhvdXNlYnJlYWtpbmcvTQpob3VzZWJyb2tlCmhvdXNlYnJva2VuCmhvdXNlY2xlYW4vRFNHCmhvdXNlY2xlYW5pbmcvTQpob3VzZWNvYXQvU00KaG91c2VmbHkvU00KaG91c2VmdWwvU00KaG91c2Vob2xkL1NNUloKaG91c2Vob2xkZXIvTQpob3VzZWh1c2JhbmQvU00KaG91c2VrZWVwZXIvTVMKaG91c2VrZWVwaW5nL00KaG91c2VsaWdodHMvTQpob3VzZW1haWQvU00KaG91c2VtYW4vTQpob3VzZW1hc3Rlci9TCmhvdXNlbWF0ZS9TCmhvdXNlbWVuCmhvdXNlbWlzdHJlc3MvUwpob3VzZW1vdGhlci9TTQpob3VzZXBhcmVudC9TTQpob3VzZXBsYW50L01TCmhvdXNlcHJvdWQKaG91c2Vyb29tCmhvdXNldG9wL1NNCmhvdXNld2FyZXMvTQpob3VzZXdhcm1pbmcvU00KaG91c2V3aWZlL01ZCmhvdXNld2l2ZXMKaG91c2V3b3JrL00KaG91c2luZy9NUwpob3ZlCmhvdmVsL1NNCmhvdmVyL1NHRApob3ZlcmNyYWZ0L00KaG93J2QKaG93J3JlCmhvdy9TTQpob3diZWl0Cmhvd2RhaC9NCmhvd2RhaHMKaG93ZHkKaG93ZXZlcgpob3dpdHplci9TTQpob3dsL01EUlNaRwpob3dsZXIvTQpob3dzb2V2ZXIKaG95ZGVuL01TCmhveWRlbmlzaApocApoci9TCmh0Cmh1YXJhY2hlL1NNCmh1Yi9TTQpodWJidWIvU00KaHViYnkvU00KaHViY2FwL1NNCmh1YnJpcy9NCmh1Y2tsZWJlcnJ5L1NNCmh1Y2tzdGVyL1NHTUQKaHVja3N0ZXJpc20vTQpodWRkbGUvRFNNRwpodWUvRFNNCmh1ZmYvTURTRwpodWZmaWx5Cmh1ZmZpbmVzcy9NCmh1ZmZ5L1BSVApodWcvU1RNUgpodWdlL1lQCmh1Z2VuZXNzL00KaHVnZ2VkCmh1Z2dpbmcKaHVoCmh1bGEvTVMKaHVsay9NU0cKaHVsbC9NRFJTWkcKaHVsbGFiYWxvby9TTQpodWxsZXIvTQpodW0vU00KaHVtYW4vU01SWVRQCmh1bWFuZS9QWQpodW1hbmVuZXNzL00KaHVtYW5pc20vTQpodW1hbmlzdC9TTQpodW1hbmlzdGljCmh1bWFuaXRhcmlhbi9NUwpodW1hbml0YXJpYW5pc20vTQpodW1hbml0aWVzL00KaHVtYW5pdHkvSVNNCmh1bWFuaXphdGlvbi9DTQpodW1hbml6ZS9DRFNHCmh1bWFuaXplci9TTQpodW1hbmtpbmQvTQpodW1hbm5lc3MvTQpodW1hbm9pZC9TTQpodW1ibGUvRFJTWlRHSlAKaHVtYmxlbmVzcy9NCmh1bWJsZXIvTQpodW1ibHkKaHVtYnVnL1NNCmh1bWJ1Z2dlZApodW1idWdnaW5nCmh1bWRpbmdlci9NUwpodW1kcnVtL00KaHVtZXJhbApodW1lcmkKaHVtZXJ1cy9NCmh1bWlkL1kKaHVtaWRpZmljYXRpb24vTQpodW1pZGlmaWVyL0NNCmh1bWlkaWZ5L0NaR0RSUwpodW1pZGl0eS9NCmh1bWlkb3IvU00KaHVtaWxpYXRlL0RTR05YCmh1bWlsaWF0aW5nL1kKaHVtaWxpYXRpb24vTQpodW1pbGl0eS9NCmh1bW1lZApodW1tZXIvU00KaHVtbWluZwpodW1taW5nYmlyZC9TTQpodW1tb2NrL1NNCmh1bW1vY2t5Cmh1bW11cy9NCmh1bW9uZ291cwpodW1vci9TTURHCmh1bW9yZXNxdWUKaHVtb3Jpc3QvTVMKaHVtb3JsZXNzL1lQCmh1bW9ybGVzc25lc3MvTQpodW1vcm91cy9QWQpodW1vcm91c25lc3MvTQpodW1wL01EU0cKaHVtcGJhY2svTURTCmh1bXBoL0RHCmh1bXBocwpodW11cy9NCmh1bmNoL01EU0cKaHVuY2hiYWNrL1NNRApodW5kcmVkL1NNSApodW5kcmVkZm9sZApodW5kcmVkdGgvTQpodW5kcmVkdGhzCmh1bmRyZWR3ZWlnaHQvU00KaHVuZwpodW5nZXIvU01ERwpodW5nb3ZlcgpodW5ncmlseQpodW5ncmluZXNzL00KaHVuZ3J5L1BSVApodW5rL01SU1oKaHVua2VyL0RHCmh1bmt5L1JUCmh1bnQvTURSU1pHCmh1bnRlci9NCmh1bnRpbmcvTQpodW50cmVzcy9NUwpodW50c21hbi9NCmh1bnRzbWVuCmh1cmRsZS9EUlNNWkcKaHVyZGxlci9NCmh1cmRsaW5nL00KaHVybC9NRFJTWkcKaHVybGVyL00KaHVybGluZy9NCmh1cnJhaC9HTUQKaHVycmFocwpodXJyaWNhbmUvTVMKaHVycmllZC9VWQpodXJyeS9EU01HCmh1cnQvTVNHCmh1cnRmdWwvWVAKaHVydGZ1bG5lc3MvTQpodXJ0bGUvRFNHCmh1c2JhbmQvR01EUwpodXNiYW5kbWFuL00KaHVzYmFuZG1lbgpodXNiYW5kcnkvTQpodXNoL01EU0cKaHVzay9NRFJTWkcKaHVza2VyL00KaHVza2lseQpodXNraW5lc3MvTQpodXNreS9QUlNNVApodXNzYXIvU00KaHVzc3kvU00KaHVzdGluZ3MvTQpodXN0bGUvRFJTTVpHCmh1c3RsZXIvTQpodXQvU00KaHV0Y2gvTVMKaHV6emFoL01ERwpodXp6YWhzCmh3eQpoeWFjaW50aC9NCmh5YWNpbnRocwpoeWJyaWQvU00KaHlicmlkaXNtL00KaHlicmlkaXphdGlvbi9NCmh5YnJpZGl6ZS9EU0cKaHlkcmEvU00KaHlkcmFuZ2VhL1NNCmh5ZHJhbnQvTVMKaHlkcmF0ZSdzCmh5ZHJhdGUvQ0dORFMKaHlkcmF0aW9uL0NNCmh5ZHJhdWxpYy9TCmh5ZHJhdWxpY2FsbHkKaHlkcmF1bGljcy9NCmh5ZHJvL00KaHlkcm9jYXJib24vTVMKaHlkcm9jZXBoYWx1cy9NCmh5ZHJvZHluYW1pYy9TCmh5ZHJvZHluYW1pY3MvTQpoeWRyb2VsZWN0cmljCmh5ZHJvZWxlY3RyaWNhbGx5Cmh5ZHJvZWxlY3RyaWNpdHkvTQpoeWRyb2ZvaWwvTVMKaHlkcm9nZW4vTQpoeWRyb2dlbmF0ZS9DR0RTCmh5ZHJvZ2VuYXRpb24vTQpoeWRyb2dlbm91cwpoeWRyb2xvZ2lzdC9NUwpoeWRyb2xvZ3kvTQpoeWRyb2x5c2VzCmh5ZHJvbHlzaXMvTQpoeWRyb2x5emUvRFNHCmh5ZHJvbWV0ZXIvU00KaHlkcm9tZXRyeS9NCmh5ZHJvcGhvYmlhL00KaHlkcm9waG9iaWMKaHlkcm9waG9uZS9TTQpoeWRyb3BsYW5lL0dEU00KaHlkcm9wb25pYy9TCmh5ZHJvcG9uaWNhbGx5Cmh5ZHJvcG9uaWNzL00KaHlkcm9zcGhlcmUvTQpoeWRyb3RoZXJhcHkvTQpoeWRyb3VzCmh5ZHJveGlkZS9TTQpoeWVuYS9TTQpoeWdpZW5lL00KaHlnaWVuaWMvVQpoeWdpZW5pY2FsbHkKaHlnaWVuaXN0L01TCmh5Z3JvbWV0ZXIvU00KaHlpbmcKaHltZW4vU00KaHltZW5lYWwKaHltbi9NRFNHCmh5bW5hbC9NUwpoeW1uYm9vay9TTQpoeXBlL01HRFJTCmh5cGVyYWN0aXZlCmh5cGVyYWN0aXZpdHkvTQpoeXBlcmJvbGEvU00KaHlwZXJib2xlL00KaHlwZXJib2xpYwpoeXBlcmNyaXRpY2FsL1kKaHlwZXJnbHljZW1pYS9NCmh5cGVyaW5mbGF0aW9uCmh5cGVybGluay9HU01ECmh5cGVybWFya2V0L1MKaHlwZXJtZWRpYS9NCmh5cGVycGFyYXRoeXJvaWRpc20KaHlwZXJzZW5zaXRpdmUvUApoeXBlcnNlbnNpdGl2ZW5lc3MvTQpoeXBlcnNlbnNpdGl2aXR5L1NNCmh5cGVyc3BhY2UvUwpoeXBlcnRlbnNpb24vTQpoeXBlcnRlbnNpdmUvU00KaHlwZXJ0ZXh0L00KaHlwZXJ0aHlyb2lkL00KaHlwZXJ0aHlyb2lkaXNtL00KaHlwZXJ0cm9waHkvRFNNRwpoeXBlcnZlbnRpbGF0ZS9HTkRTCmh5cGVydmVudGlsYXRpb24vTQpoeXBoZW4vTURTRwpoeXBoZW5hdGUvWERTTUdOCmh5cGhlbmF0aW9uL00KaHlwbm9zZXMKaHlwbm9zaXMvTQpoeXBub3RoZXJhcGlzdC9TCmh5cG5vdGhlcmFweS9NCmh5cG5vdGljL1NNCmh5cG5vdGljYWxseQpoeXBub3Rpc20vTQpoeXBub3Rpc3QvTVMKaHlwbm90aXplL0dEUwpoeXBvL01TCmh5cG9hbGxlcmdlbmljCmh5cG9jaG9uZHJpYS9NCmh5cG9jaG9uZHJpYWMvU00KaHlwb2NyaXN5L1NNCmh5cG9jcml0ZS9NUwpoeXBvY3JpdGljYWwvWQpoeXBvZGVybWljL01TCmh5cG9nbHljZW1pYS9NCmh5cG9nbHljZW1pYy9TTQpoeXBvdGVudXNlL01TCmh5cG90aGFsYW1pCmh5cG90aGFsYW11cy9NCmh5cG90aGVybWlhL00KaHlwb3RoZXNlcwpoeXBvdGhlc2lzL00KaHlwb3RoZXNpemUvRFNHCmh5cG90aGV0aWNhbC9ZCmh5cG90aHlyb2lkL00KaHlwb3RoeXJvaWRpc20vTQpoeXNzb3AvTQpoeXN0ZXJlY3RvbXkvU00KaHlzdGVyZXNpcwpoeXN0ZXJpYS9NCmh5c3RlcmljL1NNCmh5c3RlcmljYWwvWQpoeXN0ZXJpY3MvTQppL1VTCmlQYWQvTQppUGhvbmUvTQppUG9kL00KaVR1bmVzL00KaWFtYi9NUwppYW1iaQppYW1iaWMvU00KaWFtYnVzL01TCmliZXgvTVMKaWJpZAppYmlkZW0KaWJpcy9NUwppYnVwcm9mZW4vTQppY2UncwppY2UvQ0RTRwppY2ViZXJnL1NNCmljZWJvYXQvU00KaWNlYm91bmQKaWNlYm94L01TCmljZWJyZWFrZXIvU00KaWNlY2FwL1NNCmljZW1hbi9NCmljZW1lbgppY2h0aHlvbG9naXN0L01TCmljaHRoeW9sb2d5L00KaWNpY2xlL1NNCmljaWx5CmljaW5lc3MvTQppY2luZy9TTQppY2t5L1JUCmljb24vTVMKaWNvbmljCmljb25vY2xhc20vTQppY29ub2NsYXN0L1NNCmljb25vY2xhc3RpYwppY29ub2dyYXBoeS9NCmljdHVzL00KaWN5L1RQUgppZC9TTVkKaWRlYS9NUwppZGVhbC9TTVkKaWRlYWxpc20vTQppZGVhbGlzdC9TTQppZGVhbGlzdGljCmlkZWFsaXN0aWNhbGx5CmlkZWFsaXphdGlvbi9NUwppZGVhbGl6ZS9EU0cKaWRlbQppZGVtcG90ZW50CmlkZW50aWNhbC9ZCmlkZW50aWZpYWJsZS9VCmlkZW50aWZpY2F0aW9uL00KaWRlbnRpZmllZC9VCmlkZW50aWZ5L1pHTkRSU1gKaWRlbnRpa2l0L1MKaWRlbnRpdHkvU00KaWRlb2dyYW0vU00KaWRlb2dyYXBoL00KaWRlb2dyYXBocwppZGVvbG9naWNhbC9ZCmlkZW9sb2dpc3QvU00KaWRlb2xvZ3VlL01TCmlkZW9sb2d5L1NNCmlkZXMvTQppZGlvY3kvU00KaWRpb20vU00KaWRpb21hdGljL1UKaWRpb21hdGljYWxseQppZGlvcGF0aGljCmlkaW9zeW5jcmFzeS9TTQppZGlvc3luY3JhdGljCmlkaW9zeW5jcmF0aWNhbGx5CmlkaW90L1NNCmlkaW90aWMKaWRpb3RpY2FsbHkKaWRsZS9NWlRHRFJTUAppZGxlbmVzcy9NCmlkbGVyL00KaWRvbC9NUwppZG9sYXRlci9TTQppZG9sYXRyZXNzL01TCmlkb2xhdHJvdXMKaWRvbGF0cnkvTQppZG9saXphdGlvbi9NCmlkb2xpemUvR0RTCmlkeWxsL1NNCmlkeWxsaWMKaWR5bGxpY2FsbHkKaWYvU00KaWZmaW5lc3MvTQppZmZ5L1JUUAppZ2xvby9TTQppZ25lb3VzCmlnbml0YWJsZQppZ25pdGUvQUdEUwppZ25pdGlvbi9NUwppZ25vYmxlCmlnbm9ibHkKaWdub21pbmlvdXMvWQppZ25vbWlueS9TTQppZ25vcmFtdXMvTVMKaWdub3JhbmNlL00KaWdub3JhbnQvWQppZ25vcmUvR0RTCmlndWFuYS9NUwppaQppaWkKaWxlYQppbGVpdGlzL00KaWxldW0vTQppbGlhCmlsaXVtL00KaWxrL1NNCmlsbC9TTVAKaWxsZWdhbC9NWVMKaWxsZWdhbGl0eS9TTQppbGxlZ2liaWxpdHkvTQppbGxlZ2libGUKaWxsZWdpYmx5CmlsbGVnaXRpbWFjeS9NCmlsbGVnaXRpbWF0ZS9ZCmlsbGliZXJhbC9ZCmlsbGliZXJhbGl0eS9NCmlsbGljaXQvWVAKaWxsaWNpdG5lc3MvTQppbGxpbWl0YWJsZQppbGxpdGVyYWN5L00KaWxsaXRlcmF0ZS9NWVMKaWxsbmVzcy9NUwppbGxvZ2ljYWwvWQppbGxvZ2ljYWxpdHkvTQppbGx1bWluYXRlL0dOWERTCmlsbHVtaW5hdGluZy9ZCmlsbHVtaW5hdGlvbi9NCmlsbHVtaW5lL0RTQkcKaWxsdXMvVgppbGx1c2lvbi9FTVMKaWxsdXNpb25pc3QvU00KaWxsdXNvcnkKaWxsdXN0cmF0ZS9HTlZYRFMKaWxsdXN0cmF0aW9uL00KaWxsdXN0cmF0aXZlL1kKaWxsdXN0cmF0b3IvU00KaWxsdXN0cmlvdXMvUFkKaWxsdXN0cmlvdXNuZXNzL00KaW1hZ2UvRFNNRwppbWFnZXJ5L00KaW1hZ2luYWJsZS9VCmltYWdpbmFibHkvVQppbWFnaW5hbAppbWFnaW5hcnkKaW1hZ2luYXRpb24vTVMKaW1hZ2luYXRpdmUvVVkKaW1hZ2luZS9EU0JKRwppbWFnby9NCmltYWdvZXMKaW1hbS9NUwppbWJhbGFuY2UvRFNNCmltYmVjaWxlL01TCmltYmVjaWxpYwppbWJlY2lsaXR5L1NNCmltYmliZS9aR0RSUwppbWJpYmVyL00KaW1icmljYXRpb24vTQppbWJyb2dsaW8vU00KaW1idWUvRFNHCmltaXRhYmxlL0kKaW1pdGF0ZS9EU0dOVlgKaW1pdGF0aW9uL00KaW1pdGF0aXZlL1BZCmltaXRhdGl2ZW5lc3MvTQppbWl0YXRvci9TTQppbW1hY3VsYXRlL1BZCmltbWFjdWxhdGVuZXNzL00KaW1tYW5lbmNlL00KaW1tYW5lbmN5L00KaW1tYW5lbnQvWQppbW1hdGVyaWFsL1lQCmltbWF0ZXJpYWxpdHkvTQppbW1hdGVyaWFsbmVzcy9NCmltbWF0dXJlL1kKaW1tYXR1cml0eS9NCmltbWVhc3VyYWJsZQppbW1lYXN1cmFibHkKaW1tZWRpYWNpZXMvTQppbW1lZGlhY3kvU00KaW1tZWRpYXRlL1BZCmltbWVkaWF0ZW5lc3MvTQppbW1lbW9yaWFsL1kKaW1tZW5zZS9ZCmltbWVuc2l0eS9TTQppbW1lcnNlL1hEU0dOVgppbW1lcnNpYmxlCmltbWVyc2lvbi9NCmltbWlncmFudC9TTQppbW1pZ3JhdGUvRFNHTgppbW1pZ3JhdGlvbi9NCmltbWluZW5jZS9NCmltbWluZW50L1kKaW1tb2JpbGUKaW1tb2JpbGl0eS9NCmltbW9iaWxpemF0aW9uL00KaW1tb2JpbGl6ZS9aR0RSUwppbW1vZGVyYXRlL1kKaW1tb2Rlc3QvWQppbW1vZGVzdHkvTQppbW1vbGF0ZS9EU0dOCmltbW9sYXRpb24vTQppbW1vcmFsL1kKaW1tb3JhbGl0eS9TTQppbW1vcnRhbC9NWVMKaW1tb3J0YWxpdHkvTQppbW1vcnRhbGl6ZS9EU0cKaW1tb3ZhYmlsaXR5L00KaW1tb3ZhYmxlCmltbW92YWJseQppbW11bmUKaW1tdW5pdHkvTQppbW11bml6YXRpb24vU00KaW1tdW5pemUvR0RTCmltbXVub2RlZmljaWVuY3kvTQppbW11bm9kZWZpY2llbnQKaW1tdW5vZ2xvYnVsaW4vUwppbW11bm9sb2dpYwppbW11bm9sb2dpY2FsCmltbXVub2xvZ2lzdC9NUwppbW11bm9sb2d5L00KaW1tdXJlL0RTRwppbW11dGFiaWxpdHkvTQppbW11dGFibGUKaW1tdXRhYmx5CmltcC9TTVIKaW1wYWN0L1NNREcKaW1wYWlyL1NER0wKaW1wYWlyZWQvVQppbXBhaXJtZW50L01TCmltcGFsYS9TTQppbXBhbGUvRFNHTAppbXBhbGVtZW50L00KaW1wYWxwYWJsZQppbXBhbHBhYmx5CmltcGFuZWwvU0RHCmltcGFydC9TREcKaW1wYXJ0aWFsL1kKaW1wYXJ0aWFsaXR5L00KaW1wYXNzYWJseQppbXBhc3NlL0JTTVYKaW1wYXNzaWJpbGl0eS9NCmltcGFzc2libGUKaW1wYXNzaWJseQppbXBhc3Npb25lZAppbXBhc3NpdmUvWVAKaW1wYXNzaXZlbmVzcy9NCmltcGFzc2l2aXR5L00KaW1wYXN0by9NCmltcGF0aWVuY2UvTVMKaW1wYXRpZW5zL00KaW1wYXRpZW50L1kKaW1wZWFjaC9aR0JMRFJTCmltcGVhY2hhYmxlL1UKaW1wZWFjaGVyL00KaW1wZWFjaG1lbnQvU00KaW1wZWNjYWJpbGl0eS9NCmltcGVjY2FibGUKaW1wZWNjYWJseQppbXBlY3VuaW91cy9QWQppbXBlY3VuaW91c25lc3MvTQppbXBlZGFuY2UvTQppbXBlZGUvRFNHCmltcGVkZWQvVQppbXBlZGltZW50L1NNCmltcGVkaW1lbnRhL00KaW1wZWwvUwppbXBlbGxlZAppbXBlbGxlci9NUwppbXBlbGxpbmcKaW1wZW5kL1NERwppbXBlbmV0cmFiaWxpdHkvTQppbXBlbmV0cmFibGUKaW1wZW5ldHJhYmx5CmltcGVuaXRlbmNlL00KaW1wZW5pdGVudC9ZCmltcGVyYXRpdmUvU01ZCmltcGVyY2VwdGliaWxpdHkvTQppbXBlcmNlcHRpYmxlCmltcGVyY2VwdGlibHkKaW1wZXJjZXB0aXZlCmltcGVyZgppbXBlcmZlY3QvU01ZUAppbXBlcmZlY3Rpb24vTVMKaW1wZXJmZWN0bmVzcy9NCmltcGVyaWFsL01ZUwppbXBlcmlhbGlzbS9NCmltcGVyaWFsaXN0L1NNCmltcGVyaWFsaXN0aWMKaW1wZXJpYWxpc3RpY2FsbHkKaW1wZXJpbC9HU0xECmltcGVyaWxtZW50L00KaW1wZXJpb3VzL1BZCmltcGVyaW91c25lc3MvTQppbXBlcmlzaGFibGUKaW1wZXJpc2hhYmx5CmltcGVybWFuZW5jZS9NCmltcGVybWFuZW50L1kKaW1wZXJtZWFiaWxpdHkvTQppbXBlcm1lYWJsZQppbXBlcm1lYWJseQppbXBlcm1pc3NpYmxlCmltcGVyc29uYWwvWQppbXBlcnNvbmF0ZS9HTlhEUwppbXBlcnNvbmF0aW9uL00KaW1wZXJzb25hdG9yL1NNCmltcGVydGluZW5jZS9NUwppbXBlcnRpbmVudC9ZCmltcGVydHVyYmFiaWxpdHkvTQppbXBlcnR1cmJhYmxlCmltcGVydHVyYmFibHkKaW1wZXJ2aW91cy9ZCmltcGV0aWdvL00KaW1wZXR1b3NpdHkvTQppbXBldHVvdXMvWVAKaW1wZXR1b3VzbmVzcy9NCmltcGV0dXMvTVMKaW1waWV0eS9TTQppbXBpbmdlL0xEU0cKaW1waW5nZW1lbnQvTQppbXBpb3VzL1BZCmltcGlvdXNuZXNzL00KaW1waXNoL1lQCmltcGlzaG5lc3MvTQppbXBsYWNhYmlsaXR5L00KaW1wbGFjYWJsZQppbXBsYWNhYmx5CmltcGxhbnQvQlNHTUQKaW1wbGFudGF0aW9uL00KaW1wbGF1c2liaWxpdHkvU00KaW1wbGF1c2libGUKaW1wbGF1c2libHkKaW1wbGVtZW50L0dCTURSUwppbXBsZW1lbnRhYmxlL1UKaW1wbGVtZW50YXRpb24vU00KaW1wbGVtZW50ZWQvVQppbXBsaWNhdGUvRFNHCmltcGxpY2F0aW9uL00KaW1wbGljaXQvUFkKaW1wbGljaXRuZXNzL00KaW1wbG9kZS9EU0cKaW1wbG9yZS9EU0cKaW1wbG9yaW5nL1kKaW1wbG9zaW9uL01TCmltcGxvc2l2ZQppbXBseS9YRFNHTgppbXBvbGl0ZS9ZUAppbXBvbGl0ZW5lc3MvTVMKaW1wb2xpdGljCmltcG9uZGVyYWJsZS9NUwppbXBvcnQvWkdCU01EUgppbXBvcnRhbmNlL00KaW1wb3J0YW50L1kKaW1wb3J0YXRpb24vTVMKaW1wb3J0ZXIvTQppbXBvcnR1bmF0ZS9ZCmltcG9ydHVuZS9HRFMKaW1wb3J0dW5pdHkvTQppbXBvc2UvQURTRwppbXBvc2VyL01TCmltcG9zaW5nL1UKaW1wb3NpbmdseQppbXBvc2l0aW9uL01TCmltcG9zc2liaWxpdHkvU00KaW1wb3NzaWJsZS9TCmltcG9zc2libHkKaW1wb3N0L1NNCmltcG9zdG9yL1NNCmltcG9zdHVyZS9NUwppbXBvdGVuY2UvTQppbXBvdGVuY3kvTQppbXBvdGVudC9ZCmltcG91bmQvREdTCmltcG92ZXJpc2gvRFNMRwppbXBvdmVyaXNobWVudC9NCmltcHJhY3RpY2FiaWxpdHkKaW1wcmFjdGljYWJsZQppbXByYWN0aWNhYmx5CmltcHJhY3RpY2FsL1kKaW1wcmFjdGljYWxpdHkvTQppbXByZWNhdGUvRFNYR04KaW1wcmVjYXRpb24vTQppbXByZWNpc2UvUFlOCmltcHJlY2lzZW5lc3MvTQppbXByZWNpc2lvbi9NCmltcHJlZ25hYmlsaXR5L00KaW1wcmVnbmFibGUKaW1wcmVnbmFibHkKaW1wcmVnbmF0ZS9HTkRTCmltcHJlZ25hdGlvbi9NCmltcHJlc2FyaW8vU00KaW1wcmVzcy9NRFNHVgppbXByZXNzZWQvVQppbXByZXNzaWJpbGl0eS9NCmltcHJlc3NpYmxlCmltcHJlc3Npb24vQlNNCmltcHJlc3Npb25hYmlsaXR5L00KaW1wcmVzc2lvbmlzbS9NCmltcHJlc3Npb25pc3QvU00KaW1wcmVzc2lvbmlzdGljCmltcHJlc3NpdmUvUFkKaW1wcmVzc2l2ZW5lc3MvTQppbXByaW1hdHVyL1NNCmltcHJpbnQvTURSWkdTCmltcHJpbnRlci9NCmltcHJpc29uL1NETEcKaW1wcmlzb25tZW50L1NNCmltcHJvYmFiaWxpdHkvU00KaW1wcm9iYWJsZQppbXByb2JhYmx5CmltcHJvbXB0dS9TTQppbXByb3Blci9ZCmltcHJvcHJpZXR5L1NNCmltcHJvdmUvR0JEU0wKaW1wcm92ZWQvVQppbXByb3ZlbWVudC9NUwppbXByb3ZpZGVuY2UvTQppbXByb3ZpZGVudC9ZCmltcHJvdmlzYXRpb24vU00KaW1wcm92aXNhdGlvbmFsCmltcHJvdmlzZS9aR0RSUwppbXByb3Zpc2VyL00KaW1wcnVkZW5jZS9NCmltcHJ1ZGVudC9ZCmltcHVkZW5jZS9NCmltcHVkZW50L1kKaW1wdWduL1pHU0RSCmltcHVnbmVyL00KaW1wdWxzZS9NR05WRFMKaW1wdWxzaW9uL00KaW1wdWxzaXZlL1BZCmltcHVsc2l2ZW5lc3MvTQppbXB1bml0eS9NCmltcHVyZS9SWVQKaW1wdXJpdHkvU00KaW1wdXRhdGlvbi9TTQppbXB1dGUvQkRTRwppbi9BU00KaW5hY2N1cmFjeS9TCmluYWN0aW9uL00KaW5hZGVxdWFjeS9TCmluYWR2ZXJ0ZW5jZS9NCmluYWR2ZXJ0ZW50L1kKaW5hbGllbmFiaWxpdHkvTQppbmFsaWVuYWJseQppbmFtb3JhdGEvU00KaW5hbmUvUllUCmluYW5pbWF0ZS9QWQppbmFuaW1hdGVuZXNzL00KaW5hbml0eS9TTQppbmFwcHJvcHJpYXRlL1kKaW5hcnRpY3VsYXRlL1kKaW5hc211Y2gKaW5hdWRpYmxlCmluYXVndXJhbC9TTQppbmF1Z3VyYXRlL1hHTkRTCmluYXVndXJhdGlvbi9NCmluYm9hcmQvTVMKaW5ib3VuZAppbmJveC9NUwppbmJyZWVkL1MKaW5jL1RHRAppbmNhbGN1bGFibHkKaW5jYW5kZXNjZW5jZS9NCmluY2FuZGVzY2VudC9ZCmluY2FudGF0aW9uL1NNCmluY2FwYWNpdGF0ZS9HRFMKaW5jYXJjZXJhdGUvWERTR04KaW5jYXJjZXJhdGlvbi9NCmluY2FybmFkaW5lL0RTRwppbmNhcm5hdGUvQVhHTkRTCmluY2FybmF0aW9uL0FNCmluY2VuZGlhcnkvU00KaW5jZW5zZS9NR0RTCmluY2VudGl2ZSdzCmluY2VudGl2ZS9FUwppbmNlcHRpb24vU00KaW5jZXNzYW50L1kKaW5jZXN0L00KaW5jZXN0dW91cy9QWQppbmNlc3R1b3VzbmVzcy9NCmluY2gvTURTRwppbmNob2F0ZQppbmNod29ybS9TTQppbmNpZGVuY2UvU00KaW5jaWRlbnQvU00KaW5jaWRlbnRhbC9NWVMKaW5jaW5lcmF0ZS9EU0dOCmluY2luZXJhdGlvbi9NCmluY2luZXJhdG9yL01TCmluY2lwaWVuY2UvTQppbmNpcGllbnQvWQppbmNpc2UvWEdOVkRTCmluY2lzaW9uL00KaW5jaXNpdmUvUFkKaW5jaXNpdmVuZXNzL00KaW5jaXNvci9NUwppbmNpdGVtZW50L01TCmluY2l0ZXIvTVMKaW5jbAppbmNsZW1lbnQKaW5jbGluYXRpb24vRU0KaW5jbGluYXRpb25zCmluY2xpbmUncwppbmNsaW5lL0VHRFMKaW5jbHVkZS9HRFMKaW5jbHVzaW9uL01TCmluY2x1c2l2ZS9ZUAppbmNsdXNpdmVuZXNzL00KaW5jb2duaXRvL01TCmluY29tYnVzdGlibGUKaW5jb21tb2RlL0dECmluY29tbW9kaW91cwppbmNvbW11bmljYWRvCmluY29tcGF0aWJpbGl0eS9TCmluY29tcGV0ZW50L01TCmluY29tcGxldGUvWQppbmNvbmNlaXZhYmlsaXR5L00KaW5jb25ncnVvdXMvUFkKaW5jb25ncnVvdXNuZXNzL00KaW5jb25zb2xhYmx5CmluY29uc3RhbnQvWQppbmNvbnRlc3RhYmlsaXR5L00KaW5jb250ZXN0YWJseQppbmNvbnRpbmVudAppbmNvbnRyb3ZlcnRpYmx5CmluY29udmVuaWVuY2UvR0QKaW5jb3Jwb3JhdGUvQURTR04KaW5jb3Jwb3JhdGVkL1UKaW5jb3Jwb3JhdGlvbi9BTQppbmNvcnBvcmVhbAppbmNvcnJlY3QvWQppbmNvcnJpZ2liaWxpdHkvTQppbmNvcnJpZ2libGUKaW5jb3JyaWdpYmx5CmluY29ycnVwdGlibHkKaW5jcmVhc2luZy9ZCmluY3JlbWVudC9TTUQKaW5jcmVtZW50YWwvWQppbmNyZW1lbnRhbGlzbQppbmNyZW1lbnRhbGlzdC9TTQppbmNyaW1pbmF0ZS9HTkRTCmluY3JpbWluYXRpb24vTQppbmNyaW1pbmF0b3J5CmluY3J1c3RhdGlvbi9TTQppbmN1YmF0ZS9HTkRTCmluY3ViYXRpb24vTQppbmN1YmF0b3IvU00KaW5jdWJ1cy9NUwppbmN1bGNhdGUvRFNHTgppbmN1bGNhdGlvbi9NCmluY3VscGF0ZS9EU0cKaW5jdW1iZW5jeS9TTQppbmN1bWJlbnQvU00KaW5jdW5hYnVsYQppbmN1bmFidWx1bS9NCmluY3VyL1NCCmluY3VyYWJsZS9NUwppbmN1cmFibHkKaW5jdXJpb3VzCmluY3VycmVkCmluY3VycmluZwppbmN1cnNpb24vTVMKaW5kCmluZGVidGVkL1AKaW5kZWJ0ZWRuZXNzL00KaW5kZWVkCmluZGVmYXRpZ2FibGUKaW5kZWZhdGlnYWJseQppbmRlZmVhc2libGUKaW5kZWZlYXNpYmx5CmluZGVmaW5hYmx5CmluZGVsaWJsZQppbmRlbGlibHkKaW5kZW1uaWZpY2F0aW9uL00KaW5kZW1uaWZ5L0dEU1hOCmluZGVtbml0eS9TTQppbmRlbnRhdGlvbi9NUwppbmRlbnRpb24vTQppbmRlbnR1cmUvREcKaW5kZXNjcmliYWJseQppbmRlc3RydWN0aWJseQppbmRldGVybWluYWJseQppbmRldGVybWluYWN5L00KaW5kZXRlcm1pbmF0ZS9ZCmluZGV4L1pHTURSUwppbmRleGF0aW9uL1NNCmluZGV4ZXIvTQppbmRpY2F0ZS9YRFNHTlYKaW5kaWNhdGlvbi9NCmluZGljYXRpdmUvU01ZCmluZGljYXRvci9NUwppbmRpY3QvR0RTQkwKaW5kaWN0bWVudC9TTQppbmRpZS9TCmluZGlnZW5jZS9NCmluZGlnZW5vdXMKaW5kaWdlbnQvU01ZCmluZGlnbmFudC9ZCmluZGlnbmF0aW9uL00KaW5kaWdvL00KaW5kaXJlY3QvWQppbmRpc2NpcGxpbmUKaW5kaXNjcmVldC9ZCmluZGlzY3JldGlvbi9TCmluZGlzY3JpbWluYXRlL1kKaW5kaXNwZW5zYWJpbGl0eS9NCmluZGlzcGVuc2FibGUvTVMKaW5kaXNwZW5zYWJseQppbmRpc3NvbHViaWxpdHkKaW5kaXNzb2x1Ymx5CmluZGlzdGluZ3Vpc2hhYmx5CmluZGl0ZS9HRFMKaW5kaXVtL00KaW5kaXZpZHVhbC9NWVMKaW5kaXZpZHVhbGlzbS9NCmluZGl2aWR1YWxpc3QvTVMKaW5kaXZpZHVhbGlzdGljCmluZGl2aWR1YWxpc3RpY2FsbHkKaW5kaXZpZHVhbGl0eS9NCmluZGl2aWR1YWxpemF0aW9uL00KaW5kaXZpZHVhbGl6ZS9HRFMKaW5kaXZpZHVhdGUvRFNHTgppbmRpdmlkdWF0aW9uL00KaW5kaXZpc2libHkKaW5kb2N0cmluYXRlL0dORFMKaW5kb2N0cmluYXRpb24vTQppbmRvbGVuY2UvTQppbmRvbGVudC9ZCmluZG9taXRhYmxlCmluZG9taXRhYmx5CmluZHViaXRhYmxlCmluZHViaXRhYmx5CmluZHVjZS9EUlNaR0wKaW5kdWNlbWVudC9TTQppbmR1Y2VyL00KaW5kdWN0L0RHVgppbmR1Y3RhbmNlL00KaW5kdWN0ZWUvU00KaW5kdWN0aW9uL01TCmluZHVjdGl2ZS9ZCmluZHVsZ2UvRFNHCmluZHVsZ2VuY2UvU00KaW5kdWxnZW50L1kKaW5kdXN0cmlhbC9ZCmluZHVzdHJpYWxpc20vTQppbmR1c3RyaWFsaXN0L1NNCmluZHVzdHJpYWxpemF0aW9uL00KaW5kdXN0cmlhbGl6ZS9EU0cKaW5kdXN0cmlvdXMvWVAKaW5kdXN0cmlvdXNuZXNzL00KaW5kdXN0cnkvU00KaW5kd2VsbC9TRwppbmVicmlhdGUvTUdORFMKaW5lYnJpYXRpb24vTQppbmVkaWJsZQppbmVmZmFiaWxpdHkvTQppbmVmZmFibGUKaW5lZmZhYmx5CmluZWxhc3RpYwppbmVsaWdpYmxlL01TCmluZWxpZ2libHkKaW5lbHVjdGFibGUKaW5lbHVjdGFibHkKaW5lcHQvWVAKaW5lcHRpdHVkZS9NCmluZXB0bmVzcy9NCmluZXF1YWxpdHkvUwppbmVydC9ZUAppbmVydGlhL00KaW5lcnRpYWwKaW5lcnRuZXNzL00KaW5lc2NhcGFibGUKaW5lc2NhcGFibHkKaW5lc3RpbWFibHkKaW5ldml0YWJpbGl0eS9NCmluZXZpdGFibGUvTQppbmV2aXRhYmx5CmluZXhhY3QvWQppbmV4aGF1c3RpYmx5CmluZXhvcmFiaWxpdHkKaW5leG9yYWJsZQppbmV4b3JhYmx5CmluZXhwZWRpZW50CmluZXhwZXJ0L1kKaW5leHBpYWJsZQppbmV4cGxpY2FibHkKaW5leHByZXNzaWJseQppbmV4cHJlc3NpdmUKaW5leHRyaWNhYmx5CmluZi9aVAppbmZhbGxpYmxlCmluZmFteS9TTQppbmZhbmN5L00KaW5mYW50L01TCmluZmFudGljaWRlL01TCmluZmFudGlsZQppbmZhbnRyeS9TTQppbmZhbnRyeW1hbi9NCmluZmFudHJ5bWVuCmluZmFyY3QvTVMKaW5mYXJjdGlvbi9NCmluZmF0dWF0ZS9EU1hHTgppbmZhdHVhdGlvbi9NCmluZmVjdC9BRVNERwppbmZlY3RlZC9VCmluZmVjdGlvbi9BU00KaW5mZWN0aW91cy9QWQppbmZlY3Rpb3VzbmVzcy9NCmluZmVsaWNpdG91cwppbmZlcmVuY2UvU00KaW5mZXJlbnRpYWwKaW5mZXJpb3IvTVMKaW5mZXJpb3JpdHkvTQppbmZlcm5hbC9ZCmluZmVybm8vTVMKaW5mZXJyZWQKaW5mZXJyaW5nCmluZmVzdC9HRFMKaW5mZXN0YXRpb24vTVMKaW5maWRlbC9NUwppbmZpZGVsaXR5L1MKaW5maWx0cmF0b3IvU00KaW5maW5pdGUvTVYKaW5maW5pdGVzaW1hbC9TTVkKaW5maW5pdGl2YWwKaW5maW5pdGl2ZS9NUwppbmZpbml0dWRlL00KaW5maW5pdHkvU00KaW5maXJtCmluZmlybWFyeS9TTQppbmZpcm1pdHkvU00KaW5maXgKaW5mbGFtZS9EU0cKaW5mbGFtbWFibGUKaW5mbGFtbWF0aW9uL1NNCmluZmxhbW1hdG9yeQppbmZsYXRhYmxlL1NNCmluZmxhdGUvRFNHTkIKaW5mbGF0aW9uL0VNCmluZmxhdGlvbmFyeQppbmZsZWN0L1NERwppbmZsZWN0aW9uL01TCmluZmxlY3Rpb25hbAppbmZsaWN0L1NER1YKaW5mbGljdGlvbi9NCmluZmxvdy9TTQppbmZsdWVuY2UvTUdEUwppbmZsdWVuY2VkL1UKaW5mbHVlbnRpYWwvWQppbmZsdWVuemEvTQppbmZvL00KaW5mb21lcmNpYWwvU00KaW5mb3JtL1oKaW5mb3JtYWwvWQppbmZvcm1hbnQvU00KaW5mb3JtYXRpb24vRU0KaW5mb3JtYXRpb25hbAppbmZvcm1hdGl2ZS9QWQppbmZvcm1hdGl2ZW5lc3MvTQppbmZvcm1lZC9VCmluZm90YWlubWVudC9NCmluZnJhCmluZnJhcmVkL00KaW5mcmFzb25pYwppbmZyYXN0cnVjdHVyYWwKaW5mcmFzdHJ1Y3R1cmUvU00KaW5mcmVxdWVuY2UvTQppbmZyZXF1ZW50L1kKaW5mcmluZ2VtZW50L01TCmluZnVyaWF0ZS9HRFMKaW5mdXJpYXRpbmcvWQppbmZ1c2VyL1NNCmluZ2VuaW91cy9QWQppbmdlbmlvdXNuZXNzL00KaW5nZW51ZS9TTQppbmdlbnVpdHkvTQppbmdlbnVvdXMvRVkKaW5nZW51b3VzbmVzcy9NCmluZ2VzdC9TREcKaW5nZXN0aW9uL00KaW5nbGVub29rL1NNCmluZ290L1NNCmluZ3JhaW4vRwppbmdyYXRlL1NNCmluZ3JhdGlhdGUvR05EUwppbmdyYXRpYXRpbmcvWQppbmdyYXRpYXRpb24vTQppbmdyZWRpZW50L01TCmluZ3Jlc3MvTVMKaW5ndWluYWwKaW5oYWJpdC9ERwppbmhhYml0YWJsZS9VCmluaGFiaXRhbnQvU00KaW5oYWJpdGVkL1UKaW5oYWxhbnQvU00KaW5oYWxhdGlvbi9NUwppbmhhbGF0b3IvTVMKaW5oYWxlci9TTQppbmhhcm1vbmlvdXMKaW5oZXJlL0RTRwppbmhlcmVudC9ZCmluaGVyaXQvRUdTRAppbmhlcml0YW5jZS9FTQppbmhlcml0YW5jZXMKaW5oZXJpdG9yL1NNCmluaGliaXQvR1NECmluaGliaXRpb24vU00KaW5oaWJpdG9yL1NNCmluaGliaXRvcnkKaW5odW1hbi9ZCmluaHVtYW5lL1kKaW5pbWljYWwvWQppbmltaXRhYmx5CmluaXF1aXRvdXMvWQppbmlxdWl0eS9TTQppbml0aWFsL1NHTURZCmluaXRpYWxpc20KaW5pdGlhbGl6YXRpb24KaW5pdGlhbGl6ZS9EU0cKaW5pdGlhbGl6ZWQvQVUKaW5pdGlhdGUvWE1HTlZEUwppbml0aWF0ZWQvVQppbml0aWF0aW9uL00KaW5pdGlhdGl2ZS9TTQppbml0aWF0b3IvTVMKaW5pdGlhdG9yeQppbmplY3QvU0RHCmluamVjdGlvbi9TTQppbmplY3Rvci9TTQppbmp1cmUvRFJTWkcKaW5qdXJlZC9VCmluanVyZXIvTQppbmp1cmlvdXMKaW5rL01ECmlua2Jsb3QvU00KaW5raW5lc3MvTQppbmtsaW5nL1NNCmlua3N0YW5kL1NNCmlua3dlbGwvTVMKaW5reS9SVFAKaW5sYW5kL00KaW5saW5lCmlubWF0ZS9TTQppbm1vc3QKaW5uL1NHTVJKCmlubmFyZHMvTQppbm5hdGUvUFkKaW5uYXRlbmVzcy9NCmlubmVybW9zdAppbm5lcnNvbGUvU00KaW5uZXJzcHJpbmcKaW5uZXJ2YXRlL0dORFMKaW5uZXJ2YXRpb24vTQppbm5pbmcvTQppbm5pdAppbm5rZWVwZXIvTVMKaW5ub2NlbmNlL00KaW5ub2NlbnQvTVlTCmlubm9jdW91cy9QWQppbm5vY3VvdXNuZXNzL00KaW5ub3ZhdGUvWERTR05WCmlubm92YXRpb24vTQppbm5vdmF0b3IvTVMKaW5ub3ZhdG9yeQppbm51ZW5kby9TTQppbm51bWVyYWJseQppbm51bWVyYXRlCmlub2N1bGF0ZS9BR0RTCmlub2N1bGF0aW9uL01TCmlub3BlcmF0aXZlCmlub3JkaW5hdGUvWQppbm9yZ2FuaWMKaW5xdWlyZS9aR0RSCmlucXVpcmVyL00KaW5xdWlyaW5nL1kKaW5xdWlyeS9TTQppbnF1aXNpdGlvbi9NUwppbnF1aXNpdGlvbmFsCmlucXVpc2l0aXZlL1lQCmlucXVpc2l0aXZlbmVzcy9NCmlucXVpc2l0b3IvU00KaW5xdWlzaXRvcmlhbAppbnJ1c2gvTVMKaW5zYW5lL1QKaW5zYXRpYWJpbGl0eS9NCmluc2F0aWFibHkKaW5zY3JpYmUvWkdEUgppbnNjcmliZXIvTQppbnNjcmlwdGlvbi9NUwppbnNjcnV0YWJpbGl0eS9NCmluc2NydXRhYmxlL1AKaW5zY3J1dGFibGVuZXNzL00KaW5zY3J1dGFibHkKaW5zZWFtL1NNCmluc2VjdGljaWRhbAppbnNlY3RpY2lkZS9NUwppbnNlY3Rpdm9yZS9NUwppbnNlY3Rpdm9yb3VzCmluc2VjdXJlL1kKaW5zZW1pbmF0ZS9EU0dOCmluc2VtaW5hdGlvbi9NCmluc2Vuc2F0ZQppbnNlbnNpYmxlCmluc2Vuc2l0aXZlL1kKaW5zZXBhcmFibGUvTVMKaW5zZXJ0J3MKaW5zZXJ0L0FHU0QKaW5zZXJ0aW9uL0FNCmluc2VydGlvbnMKaW5zZXR0aW5nCmluc2hvcmUKaW5zaWRlL1JTTVoKaW5zaWRlci9NCmluc2lkaW91cy9ZUAppbnNpZGlvdXNuZXNzL00KaW5zaWdodC9NUwppbnNpZ2h0ZnVsCmluc2lnbmlhL00KaW5zaW51YXRlL0dOVkRTWAppbnNpbnVhdGlvbi9NCmluc2ludWF0b3IvU00KaW5zaXBpZC9QWQppbnNpcGlkaXR5L00KaW5zaXN0L1NHRAppbnNpc3RlbmNlL00KaW5zaXN0ZW50L1kKaW5zaXN0aW5nL1kKaW5zb2ZhcgppbnNvbGUvU00KaW5zb2xlbmNlL00KaW5zb2xlbnQvWQppbnNvbHVibGUKaW5zb2x1Ymx5Cmluc29sdmVuY3kvUwppbnNvbW5pYS9NCmluc29tbmlhYy9TTQppbnNvbXVjaAppbnNvdWNpYW5jZS9NCmluc291Y2lhbnQKaW5zcGVjdC9BR0RTCmluc3BlY3Rpb24vU00KaW5zcGVjdG9yL01TCmluc3BlY3RvcmF0ZS9NUwppbnNwaXJhdGlvbi9NUwppbnNwaXJhdGlvbmFsCmluc3BpcmVkL1UKaW5zcGlyaW5nL1UKaW5zdAppbnN0YWJpbGl0eS9TCmluc3RhbGxhdGlvbi9NUwppbnN0YWxsZXIvVU1TCmluc3RhbGxtZW50L1NNCmluc3RhbmNlL0dECmluc3RhbnQvTVJZUwppbnN0YW50YW5lb3VzL1kKaW5zdGFudGlhdGUvRFNHCmluc3RhcgppbnN0YXRlL0FHRFMKaW5zdGVhZAppbnN0aWdhdGUvRFNHTgppbnN0aWdhdGlvbi9NCmluc3RpZ2F0b3IvTVMKaW5zdGlsbGF0aW9uL00KaW5zdGluY3QvVk1TCmluc3RpbmN0aXZlL1kKaW5zdGluY3R1YWwKaW5zdGl0dXRlL1hNWkdORFJTCmluc3RpdHV0ZXIvTQppbnN0aXR1dGlvbi9NCmluc3RpdHV0aW9uYWwvWQppbnN0aXR1dGlvbmFsaXphdGlvbi9NCmluc3RpdHV0aW9uYWxpemUvRFNHCmluc3RyCmluc3RydWN0L1NER1YKaW5zdHJ1Y3RlZC9VCmluc3RydWN0aW9uL01TCmluc3RydWN0aW9uYWwKaW5zdHJ1Y3RpdmUvWQppbnN0cnVjdG9yL01TCmluc3RydW1lbnQvTURTRwppbnN0cnVtZW50YWwvTVlTCmluc3RydW1lbnRhbGlzdC9TTQppbnN0cnVtZW50YWxpdHkvTQppbnN0cnVtZW50YXRpb24vTQppbnN1Ym9yZGluYXRlCmluc3VmZmVyYWJsZQppbnN1ZmZlcmFibHkKaW5zdWxhcgppbnN1bGFyaXR5L00KaW5zdWxhdGUvR05EUwppbnN1bGF0aW9uL00KaW5zdWxhdG9yL01TCmluc3VsaW4vTQppbnN1bHQvU01ERwppbnN1bHRpbmcvWQppbnN1cGVyYWJsZQppbnN1cGVyYWJseQppbnN1cmFuY2UvU00KaW5zdXJlL0RSU1pHQgppbnN1cmVkL1NNCmluc3VyZXIvTQppbnN1cmdlbmNlL1NNCmluc3VyZ2VuY3kvU00KaW5zdXJnZW50L01TCmluc3VybW91bnRhYmx5Cmluc3VycmVjdGlvbi9TTQppbnN1cnJlY3Rpb25pc3QvU00KaW50CmludGFjdAppbnRhZ2xpby9NUwppbnRlZ2VyL01TCmludGVncmFsL1NNWQppbnRlZ3JhdGUvQUVWTkdTRAppbnRlZ3JhdGlvbi9FQU0KaW50ZWdyYXRvcgppbnRlZ3JpdHkvTQppbnRlZ3VtZW50L1NNCmludGVsbGVjdC9NUwppbnRlbGxlY3R1YWwvTVlTCmludGVsbGVjdHVhbGlzbS9NCmludGVsbGVjdHVhbGl6ZS9HRFMKaW50ZWxsaWdlbmNlL00KaW50ZWxsaWdlbnQvWQppbnRlbGxpZ2VudHNpYS9NCmludGVsbGlnaWJpbGl0eS9NCmludGVsbGlnaWJsZS9VCmludGVsbGlnaWJseS9VCmludGVuZGVkL1NNCmludGVuc2UvWVRWUgppbnRlbnNpZmljYXRpb24vTQppbnRlbnNpZmllci9NCmludGVuc2lmeS9EUlNaR04KaW50ZW5zaXR5L1MKaW50ZW5zaXZlL01ZUFMKaW50ZW5zaXZlbmVzcy9NCmludGVudC9TTVlQCmludGVudGlvbi9NUwppbnRlbnRpb25hbC9VWQppbnRlbnRuZXNzL00KaW50ZXIvRVNMCmludGVyYWN0L1NHVkQKaW50ZXJhY3Rpb24vU00KaW50ZXJhY3RpdmUvWQppbnRlcmFjdGl2aXR5CmludGVyYnJlZAppbnRlcmJyZWVkL0dTCmludGVyY2VkZS9HRFMKaW50ZXJjZXB0L0dNRFMKaW50ZXJjZXB0aW9uL01TCmludGVyY2VwdG9yL1NNCmludGVyY2Vzc2lvbi9TTQppbnRlcmNlc3Nvci9NUwppbnRlcmNlc3NvcnkKaW50ZXJjaGFuZ2UvRFNNRwppbnRlcmNoYW5nZWFiaWxpdHkKaW50ZXJjaGFuZ2VhYmxlCmludGVyY2hhbmdlYWJseQppbnRlcmNpdHkKaW50ZXJjb2xsZWdpYXRlCmludGVyY29tL1NNCmludGVyY29tbXVuaWNhdGUvRFNHTgppbnRlcmNvbW11bmljYXRpb24vTQppbnRlcmNvbm5lY3QvR0RTCmludGVyY29ubmVjdGlvbi9TTQppbnRlcmNvbnRpbmVudGFsCmludGVyY291cnNlL00KaW50ZXJjdWx0dXJhbAppbnRlcmRlbm9taW5hdGlvbmFsCmludGVyZGVwYXJ0bWVudGFsCmludGVyZGVwZW5kZW5jZS9NCmludGVyZGVwZW5kZW50L1kKaW50ZXJkaWN0L0dNRFMKaW50ZXJkaWN0aW9uL00KaW50ZXJkaXNjaXBsaW5hcnkKaW50ZXJlc3QvRVNNRAppbnRlcmVzdGVkL1UKaW50ZXJlc3RpbmcvWQppbnRlcmZhY2UvTUdEUwppbnRlcmZhaXRoCmludGVyZmVyZS9HRFMKaW50ZXJmZXJlbmNlL00KaW50ZXJmZXJvbi9NCmludGVyZmlsZS9HRFMKaW50ZXJnYWxhY3RpYwppbnRlcmdvdmVybm1lbnRhbAppbnRlcmltL00KaW50ZXJpb3IvU00KaW50ZXJqCmludGVyamVjdC9HRFMKaW50ZXJqZWN0aW9uL1NNCmludGVybGFjZS9HRFMKaW50ZXJsYXJkL0RHUwppbnRlcmxlYXZlL0RTRwppbnRlcmxldWtpbi9NCmludGVybGluZS9HRFNKCmludGVybGluZWFyCmludGVybGluaW5nL00KaW50ZXJsaW5rL0RTRwppbnRlcmxvY2svR01EUwppbnRlcmxvY3V0b3IvU00KaW50ZXJsb2N1dG9yeQppbnRlcmxvcGUvWkdEUlMKaW50ZXJsb3Blci9NCmludGVybHVkZS9NR0RTCmludGVybWFycmlhZ2UvU00KaW50ZXJtYXJyeS9HRFMKaW50ZXJtZWRpYXJ5L1NNCmludGVybWVkaWF0ZS9NWVMKaW50ZXJtZW50L0VNCmludGVybWVudHMKaW50ZXJtZXp6aQppbnRlcm1lenpvL01TCmludGVybWluYWJseQppbnRlcm1pbmdsZS9EU0cKaW50ZXJtaXNzaW9uL1NNCmludGVybWl0dGVudC9ZCmludGVybWl4L0dEUwppbnRlcm4vR0RMCmludGVybmFsL1NZCmludGVybmFsaXphdGlvbi9NCmludGVybmFsaXplL0dEUwppbnRlcm5hdGlvbmFsL1NNWQppbnRlcm5hdGlvbmFsaXNtL00KaW50ZXJuYXRpb25hbGlzdC9TTQppbnRlcm5hdGlvbmFsaXphdGlvbgppbnRlcm5hdGlvbmFsaXplL0RTRwppbnRlcm5lY2luZQppbnRlcm5lZS9TTQppbnRlcm5ldAppbnRlcm5pc3QvTVMKaW50ZXJubWVudC9NCmludGVybnNoaXAvTVMKaW50ZXJvZmZpY2UKaW50ZXJwZW5ldHJhdGUvRFNHTgppbnRlcnBlcnNvbmFsCmludGVycGxhbmV0YXJ5CmludGVycGxheS9NCmludGVycG9sYXRlL1hEU0dOCmludGVycG9sYXRpb24vTQppbnRlcnBvc2UvR0RTCmludGVycG9zaXRpb24vTQppbnRlcnByZXQvQUdWRFMKaW50ZXJwcmV0YXRpb24vQU1TCmludGVycHJldGF0aXZlCmludGVycHJldGVkL1UKaW50ZXJwcmV0ZXIvTVMKaW50ZXJyYWNpYWwKaW50ZXJyZWQvRQppbnRlcnJlZ251bS9TTQppbnRlcnJlbGF0ZS9YRFNHTgppbnRlcnJlbGF0aW9uL00KaW50ZXJyZWxhdGlvbnNoaXAvTVMKaW50ZXJyaW5nL0UKaW50ZXJyb2dhdGUvRFNHTlZYCmludGVycm9nYXRpb24vTQppbnRlcnJvZ2F0aXZlL01ZUwppbnRlcnJvZ2F0b3IvU00KaW50ZXJyb2dhdG9yeS9TTQppbnRlcnJ1cHQvWkdNRFJTCmludGVycnVwdGVyL00KaW50ZXJydXB0aW9uL01TCmludGVyc2Nob2xhc3RpYwppbnRlcnNlY3QvR0RTCmludGVyc2VjdGlvbi9TTQppbnRlcnNlc3Npb24vU00KaW50ZXJzZXgKaW50ZXJzcGVyc2UvR05EUwppbnRlcnNwZXJzaW9uL00KaW50ZXJzdGF0ZS9NUwppbnRlcnN0ZWxsYXIKaW50ZXJzdGljZS9NUwppbnRlcnN0aXRpYWwKaW50ZXJ0d2luZS9HRFMKaW50ZXJ1cmJhbgppbnRlcnZhbC9TTQppbnRlcnZlbmUvR0RTCmludGVydmVudGlvbi9TTQppbnRlcnZlbnRpb25pc20vTQppbnRlcnZlbnRpb25pc3QvU00KaW50ZXJ2aWV3L1pHTURSUwppbnRlcnZpZXdlZS9NUwppbnRlcnZpZXdlci9NCmludGVydm9jYWxpYwppbnRlcndhcgppbnRlcndlYXZlL0dTCmludGVyd292ZQppbnRlcndvdmVuCmludGVzdGFjeS9NCmludGVzdGF0ZQppbnRlc3RpbmFsCmludGVzdGluZS9NUwppbnRpbWFjeS9TTQppbnRpbWF0ZS9NWUdORFNYCmludGltYXRpb24vTQppbnRpbWlkYXRlL0dORFMKaW50aW1pZGF0aW5nL1kKaW50aW1pZGF0aW9uL00KaW50b25hdGlvbi9TTQppbnRveGljYW50L1NNCmludG94aWNhdGUvRFNHTgppbnRveGljYXRpb24vTQppbnRyYWNyYW5pYWwKaW50cmFtdXJhbAppbnRyYW11c2N1bGFyCmludHJhbmV0L01TCmludHJhbnNpZ2VuY2UvTQppbnRyYW5zaWdlbnQvTVlTCmludHJhc3RhdGUKaW50cmF1dGVyaW5lCmludHJhdmVub3VzL01TWQppbnRyZXBpZC9ZCmludHJlcGlkaXR5L00KaW50cmljYWN5L1NNCmludHJpY2F0ZS9ZCmludHJpZ3VlL0RSU01aRwppbnRyaWd1ZXIvTQppbnRyaWd1aW5nL1kKaW50cmluc2ljCmludHJpbnNpY2FsbHkKaW50cm8vU00KaW50cm9kdWNlL0FHRFMKaW50cm9kdWN0aW9uL0FNCmludHJvZHVjdGlvbnMKaW50cm9kdWN0b3J5CmludHJvaXQvU00KaW50cm9zcGVjdC9HVkRTCmludHJvc3BlY3Rpb24vTQppbnRyb3NwZWN0aXZlL1kKaW50cm92ZXJzaW9uL00KaW50cm92ZXJ0L01EUwppbnRydWRlL0RSU1pHCmludHJ1ZGVyL00KaW50cnVzaW9uL1NNCmludHJ1c2l2ZS9ZUAppbnRydXNpdmVuZXNzL00KaW50dWl0L1NER1YKaW50dWl0aW9uL1MKaW50dWl0aXZlL1BZCmludHVpdGl2ZW5lc3MvTQppbnVuZGF0ZS9YRFNHTgppbnVuZGF0aW9uL00KaW51cmUvRFNHCmludmFkZS9EUlNaRwppbnZhZGVyL00KaW52YWxpZC9HTURZUwppbnZhbGlkaXNtL00KaW52YWx1YWJsZQppbnZhbHVhYmx5CmludmFyaWFudAppbnZhc2lvbi9NUwppbnZhc2l2ZQppbnZlY3RpdmUvTQppbnZlaWdoL0dECmludmVpZ2hzCmludmVpZ2xlL1pHRFJTCmludmVpZ2xlci9NCmludmVudC9BU0dWRAppbnZlbnRpb24vQU1TCmludmVudGl2ZS9QWQppbnZlbnRpdmVuZXNzL00KaW52ZW50b3IvTVMKaW52ZW50b3J5L0RTTUcKaW52ZXJzZS9TTVkKaW52ZXJ0L1NNREcKaW52ZXN0L0FTREdMCmludmVzdGlnYXRlL0dOVkRTWAppbnZlc3RpZ2F0aW9uL00KaW52ZXN0aWdhdG9yL1NNCmludmVzdGlnYXRvcnkKaW52ZXN0aXR1cmUvTVMKaW52ZXN0bWVudC9BRU0KaW52ZXN0b3IvU00KaW52ZXRlcmFjeS9NCmludmV0ZXJhdGUKaW52aWRpb3VzL1lQCmludmlkaW91c25lc3MvTQppbnZpZ2lsYXRlL0dORFMKaW52aWdpbGF0b3IvUwppbnZpZ29yYXRlL0FEU0cKaW52aWdvcmF0aW5nL1kKaW52aWdvcmF0aW9uL00KaW52aW5jaWJpbGl0eS9NCmludmluY2libHkKaW52aW9sYWJpbGl0eS9NCmludmlvbGFibHkKaW52aW9sYXRlCmludml0YXRpb24vU00KaW52aXRhdGlvbmFsL1NNCmludml0ZS9EU01HCmludml0ZWQvVQppbnZpdGVlL1NNCmludml0aW5nL1kKaW52b2tlL0RTRwppbnZvbHVudGFyaW5lc3MvTQppbnZvbHVudGFyeS9QCmludm9sdXRpb24vTQppbnZvbHZlL0xEU0cKaW52b2x2ZW1lbnQvU00KaW53YXJkL1NZCmlvY3RsCmlvZGlkZS9TTQppb2RpbmUvTQppb2RpemUvRFNHCmlvbi9VU00KaW9uaWMKaW9uaXphdGlvbi9VTQppb25pemUvVURTRwppb25pemVyL01TCmlvbm9zcGhlcmUvTVMKaW9ub3NwaGVyaWMKaW90YS9NUwppcGVjYWMvU00KaXJhc2NpYmlsaXR5L00KaXJhc2NpYmxlCmlyYXNjaWJseQppcmF0ZS9ZUAppcmF0ZW5lc3MvTQppcmUvTQppcmVmdWwKaXJlbmljCmlyaWRlcwppcmlkZXNjZW5jZS9NCmlyaWRlc2NlbnQvWQppcmlkaXVtL00KaXJpcy9NUwppcmsvU0dECmlya3NvbWUvWVAKaXJrc29tZW5lc3MvTQppcm9uL01EU0cKaXJvbmNsYWQvTVMKaXJvbmljCmlyb25pY2FsL1kKaXJvbmluZy9NCmlyb25tb25nZXIvUwppcm9ubW9uZ2VyeQppcm9uc3RvbmUvTQppcm9ud2FyZS9NCmlyb253b29kL01TCmlyb253b3JrL00KaXJvbnkvU00KaXJyYWRpYXRlL0RTR04KaXJyYWRpYXRpb24vTQppcnJhdGlvbmFsL1NNWQppcnJhdGlvbmFsaXR5L00KaXJyZWNsYWltYWJsZQppcnJlY29uY2lsYWJpbGl0eS9NCmlycmVjb25jaWxhYmxlCmlycmVjb25jaWxhYmx5CmlycmVjb3ZlcmFibGUKaXJyZWNvdmVyYWJseQppcnJlZGVlbWFibGUKaXJyZWRlZW1hYmx5CmlycmVkdWNpYmxlCmlycmVkdWNpYmx5CmlycmVmdXRhYmxlCmlycmVmdXRhYmx5CmlycmVnYXJkbGVzcwppcnJlZ3VsYXIvTVlTCmlycmVndWxhcml0eS9TTQppcnJlbGV2YW5jZS9NUwppcnJlbGV2YW5jeS9NUwppcnJlbGV2YW50L1kKaXJyZWxpZ2lvbgppcnJlbGlnaW91cwppcnJlbWVkaWFibGUKaXJyZW1lZGlhYmx5CmlycmVtb3ZhYmxlCmlycmVwYXJhYmxlCmlycmVwYXJhYmx5CmlycmVwbGFjZWFibGUKaXJyZXByZXNzaWJsZQppcnJlcHJlc3NpYmx5CmlycmVwcm9hY2hhYmxlCmlycmVwcm9hY2hhYmx5CmlycmVzaXN0aWJsZQppcnJlc2lzdGlibHkKaXJyZXNvbHV0ZS9QWU4KaXJyZXNvbHV0ZW5lc3MvTQppcnJlc29sdXRpb24vTQppcnJlc3BlY3RpdmUKaXJyZXNwb25zaWJpbGl0eS9NCmlycmVzcG9uc2libGUKaXJyZXNwb25zaWJseQppcnJldHJpZXZhYmxlCmlycmV0cmlldmFibHkKaXJyZXZlcmVuY2UvTQppcnJldmVyZW50L1kKaXJyZXZlcnNpYmxlCmlycmV2ZXJzaWJseQppcnJldm9jYWJsZQppcnJldm9jYWJseQppcnJpZ2FibGUKaXJyaWdhdGUvRFNHTgppcnJpZ2F0aW9uL00KaXJyaXRhYmlsaXR5L00KaXJyaXRhYmxlCmlycml0YWJseQppcnJpdGFudC9TTQppcnJpdGF0ZS9EU1hHTgppcnJpdGF0aW5nL1kKaXJyaXRhdGlvbi9NCmlycnVwdC9ER1ZTCmlycnVwdGlvbi9TTQppc2NoZW1pYQppc2NoZW1pYwppc2luZ2xhc3MvTQppc2wKaXNsYW5kL1NaTVIKaXNsYW5kZXIvTQppc2xlL01TCmlzbGV0L1NNCmlzbS9DTQppc21zCmlzbid0Cmlzb2Jhci9NUwppc29iYXJpYwppc29sYXRlL0RTTUdOCmlzb2xhdGlvbi9NCmlzb2xhdGlvbmlzbS9NCmlzb2xhdGlvbmlzdC9TTQppc29tZXIvTVMKaXNvbWVyaWMKaXNvbWVyaXNtL00KaXNvbWV0cmljL1MKaXNvbWV0cmljYWxseQppc29tZXRyaWNzL00KaXNvbW9ycGhpYwppc29zY2VsZXMKaXNvdGhlcm0vU00KaXNvdG9wZS9TTQppc290b3BpYwppc290cm9waWMKaXNzdWFuY2UvTQppc3N1ZS9BRFNNRwppc3N1ZXIvTVMKaXN0aG1pYW4KaXN0aG11cy9NUwppdCdkCml0J2xsCml0L1VTTQppdGFsCml0YWxpYy9TTQppdGFsaWNpemF0aW9uL00KaXRhbGljaXplL0dEUwppdGFsaWNzL00KaXRjaC9NRFNHCml0Y2hpbmVzcy9NCml0Y2h5L1JQVAppdGVtL01TCml0ZW1pemF0aW9uL00KaXRlbWl6ZS9HRFMKaXRlcmF0ZS9BWEdOVkRTCml0ZXJhdGlvbi9BTQppdGVyYXRvci9TCml0aW5lcmFudC9TTQppdGluZXJhcnkvU00KaXRzZWxmCml2L1UKaXZvcnkvU00KaXZ5L0RTTQppeApqL0YKamFiL1NNCmphYmJlZApqYWJiZXIvU01EUlpHCmphYmJlcmVyL00KamFiYmluZwpqYWJvdC9TTQpqYWNhcmFuZGEvTVMKamFjay9NREdTCmphY2thbC9TTQpqYWNrYXNzL01TCmphY2tib290L1NNRApqYWNrZGF3L01TCmphY2tldC9TTUQKamFja2hhbW1lci9NUwpqYWNra25pZmUvTUdEUwpqYWNra25pdmVzCmphY2twb3QvTVMKamFja3JhYmJpdC9NUwpqYWNrc3RyYXcvTVMKamFjcXVhcmQvTQpqYWRlL01HRFMKamFkZWQvUFkKamFkZWRuZXNzL00KamFkZWl0ZS9NCmphZy9TTQpqYWdnZWQvVFBSWQpqYWdnZWRuZXNzL00KamFnZ2llcwpqYWd1YXIvU00KamFpbC9NRFJaR1MKamFpbGJpcmQvU00KamFpbGJyZWFrL1NNCmphaWxlci9NCmphaWxob3VzZS9TCmphbGFwZW5vL01TCmphbG9weS9TTQpqYWxvdXNpZS9NUwpqYW0vU00KamFtYi9NUwpqYW1iYWxheWEvTQpqYW1ib3JlZS9NUwpqYW1tZWQKamFtbWluZwpqYW1teS9SVApqYW5nbGUvRFJTTVpHCmphbmdsZXIvTQpqYW5pdG9yL1NNCmphbml0b3JpYWwKamFwYW4vU00KamFwYW5uZWQKamFwYW5uaW5nCmphcGUvTUdEUwpqYXIvU00KamFyZGluaWVyZS9TTQpqYXJmdWwvTVMKamFyZ29uL00KamFycmVkCmphcnJpbmcvWQpqYXNtaW5lL1NNCmphc3Blci9NCmphdG8vTVMKamF1bmRpY2UvRFNNRwpqYXVudC9TR01ECmphdW50aWx5CmphdW50aW5lc3MvTQpqYXVudHkvUlBUCmphdmEvTQpqYXZlbGluL1NNCmphdy9TR01ECmphd2JvbmUvRFNNRwpqYXdicmVha2VyL01TCmphd2xpbmUvUwpqYXkvU00KamF5YmlyZC9TTQpqYXl3YWxrL0RSU1pHCmpheXdhbGtlci9NCmpheXdhbGtpbmcvTQpqYXp6L01EU0cKamF6enkvVFIKamN0CmplYWxvdXMvWQpqZWFsb3VzeS9TTQpqZWFuL01TCmplYW5zL00KamVlcC9NUwpqZWVyL01EU0cKamVlcmluZy9NWQpqZWV6CmplanVuYQpqZWp1bmUKamVqdW51bS9NCmplbGwvRFNHCmplbGxvL1MKamVsbHkvR0RTTQpqZWxseWJlYW4vTVMKamVsbHlmaXNoL01TCmplbGx5bGlrZQpqZWxseXJvbGwvU00KamVtbXkvR0RTCmplbm5ldC9NUwpqZW5ueS9TTQpqZW9wYXJkaXplL0dEUwpqZW9wYXJkeS9NCmplcmVtaWFkL01TCmplcmsvTURTRwpqZXJraWx5Cmplcmtpbi9NUwpqZXJraW5lc3MvTQpqZXJrd2F0ZXIKamVya3kvVFJNUApqZXJvYm9hbS9TCmplcnJ5YnVpbHQKamVycnljYW4vUwpqZXJzZXkvTVMKamVzdC9NRFJTWkcKamVzdGVyL00KamVzdGluZy9ZCmpldC9TTQpqZXRsaW5lci9TTQpqZXRwb3J0L01TCmpldHNhbS9NCmpldHRlZApqZXR0aW5nCmpldHRpc29uL01EU0cKamV0dHkvU00KamV3Cmpld2VsL1NaR01EUgpqZXdlbGVyL00KamV3ZWxyeS9TTQpqZwpqaWIvU0dNRApqaWJiZWQKamliYmluZwpqaWJlL01TCmppZmYvTVMKamlmZnkvU00KamlnJ3MKamlnL0FTCmppZ2dlZC9BCmppZ2dlcidzCmppZ2dlci9BU0RHCmppZ2dpbmcvQQpqaWdnbGUvRFNNRwpqaWdnbHkKamlnc2F3L1NNREcKamloYWQvU00KamloYWRpc3QvU00KamlsdC9NRFNHCmppbW15L0RTTUcKamltc29ud2VlZC9NCmppbmdsZS9EU01HCmppbmdseQpqaW5nb2lzbS9NCmppbmdvaXN0L1NNCmppbmdvaXN0aWMKamluay9EU0cKamlubgpqaW5uaS9NCmppbnJpa2lzaGEvU00KamlueC9NRFNHCmppdG5leS9TTQpqaXR0ZXJidWcvTVMKaml0dGVyYnVnZ2VkCmppdHRlcmJ1Z2dlci9NCmppdHRlcmJ1Z2dpbmcKaml0dGVycy9NCmppdHRlcnkvUlQKaml2ZS9NR0RTCmpvYi9TTQpqb2JiZWQKam9iYmVyL1NNCmpvYmJpbmcKam9iaG9sZGVyL01TCmpvYmxlc3MvUApqb2JsZXNzbmVzcy9NCmpvYnNoYXJlL1MKam9ic3dvcnRoCmpvYnN3b3J0aHMKam9jay9NUwpqb2NrZXkvU0dNRApqb2Nrc3RyYXAvTVMKam9jb3NlL1BZCmpvY29zZW5lc3MvTQpqb2Nvc2l0eS9NCmpvY3VsYXIvWQpqb2N1bGFyaXR5L00Kam9jdW5kL1kKam9jdW5kaXR5L00Kam9kaHB1cnMvTQpqb2V5L1MKam9nL1NNCmpvZ2dlZApqb2dnZXIvU00Kam9nZ2luZy9NCmpvZ2dsZS9EU01HCmpvaG4vTVMKam9obm55L1NNCmpvaG5ueWNha2UvTVMKam9pbidzCmpvaW4vQUZEU0cKam9pbmVyL0ZNUwpqb2luZXJ5L00Kam9pbnQncwpqb2ludC9FR1NECmpvaW50bHkvRgpqb2lzdC9TTQpqb2pvYmEKam9rZS9NWkdEUlMKam9rZXIvTQpqb2tleQpqb2tpZXIKam9raWVzdApqb2tpbmcvWQpqb2xsaWZpY2F0aW9uL1NNCmpvbGxpbHkKam9sbGluZXNzL00Kam9sbGl0eS9NCmpvbGx5L1RHUERSU00Kam9sdC9NRFJTWkcKam9sdGVyL00Kam9ucXVpbC9TTQpqb3NoL01EUlNaRwpqb3NoZXIvTQpqb3N0bGUvTUdEUwpqb3QvU00Kam90dGVkCmpvdHRlci9NUwpqb3R0aW5nL01TCmpvdWxlL1NNCmpvdW5jZS9NR0RTCmpvdW5jeQpqb3VybmFsL01TCmpvdXJuYWxlc2UvTQpqb3VybmFsaXNtL00Kam91cm5hbGlzdC9TTQpqb3VybmFsaXN0aWMKam91cm5leS9aR01EUlMKam91cm5leWVyL00Kam91cm5leW1hbi9NCmpvdXJuZXltZW4Kam91cm5vL1MKam91c3QvU1pHTURSCmpvdXN0ZXIvTQpqb3VzdGluZy9NCmpvdmlhbC9ZCmpvdmlhbGl0eS9NCmpvd2wvTVMKam93bHkvVFIKam95L1NHTUQKam95ZnVsL1lQCmpveWZ1bGxlcgpqb3lmdWxsZXN0CmpveWZ1bG5lc3MvTQpqb3lsZXNzL1BZCmpveWxlc3NuZXNzL00Kam95b3VzL1lQCmpveW91c25lc3MvTQpqb3lyaWRkZW4Kam95cmlkZS9SU01aRwpqb3lyaWRlci9NCmpveXJpZGluZy9NCmpveXJvZGUKam95c3RpY2svU00KanIKanViaWxhbnQvWQpqdWJpbGF0aW9uL00KanViaWxlZS9TTQpqdWRkZXIvR0RTCmp1ZGdlJ3MKanVkZ2UvQURTRwpqdWRnZXNoaXAvTQpqdWRnbWVudC9TTQpqdWRnbWVudGFsL1kKanVkaWNhdG9yeS9TTQpqdWRpY2F0dXJlL00KanVkaWNpYWwvWQpqdWRpY2lhcnkvU00KanVkaWNpb3VzL0lZUApqdWRpY2lvdXNuZXNzL0lNCmp1ZG8vTQpqdWcvU00KanVnZnVsL01TCmp1Z2dlZApqdWdnZXJuYXV0L1NNCmp1Z2dpbmcKanVnZ2xlL01aR0RSUwpqdWdnbGVyL00KanVnZ2xlcnkvTQpqdWd1bGFyL1NNCmp1aWNlL0RSU01aRwpqdWljZXIvTQpqdWljaWx5Cmp1aWNpbmVzcy9NCmp1aWN5L1BUUgpqdWppdHN1L00KanVqdWJlL01TCmp1a2Vib3gvTVMKanVsZXAvU00KanVsaWVubmUKanVtYmxlL01HRFMKanVtYm8vU00KanVtcC9NRFJTWkcKanVtcGVyL00KanVtcGlseQpqdW1waW5lc3MvTQpqdW1wc3VpdC9NUwpqdW1weS9UUlAKanVuCmp1bmNvL1NNCmp1bmN0aW9uL0ZJU00KanVuY3R1cmUvRk1TCmp1bmdsZS9NUwpqdW5pb3IvTVMKanVuaXBlci9TTQpqdW5rL01EUlNaRwpqdW5rZXIvTQpqdW5rZXQvTURTRwpqdW5rZXRlZXIvTVMKanVua2llL01UUlMKanVua3lhcmQvTVMKanVudGEvU00KanVyaWRpYwpqdXJpZGljYWwvWQpqdXJpc2RpY3Rpb24vU00KanVyaXNkaWN0aW9uYWwKanVyaXNwcnVkZW5jZS9NCmp1cmlzdC9NUwpqdXJpc3RpYwpqdXJvci9TTQpqdXJ5L0lTTQpqdXJ5bWFuL00KanVyeW1lbgpqdXJ5d29tYW4vTQpqdXJ5d29tZW4KanVzdC9SWVBUCmp1c3RpY2UvSU1TCmp1c3RpZmlhYmxlL1UKanVzdGlmaWFibHkvVQpqdXN0aWZpY2F0aW9uL00KanVzdGlmaWVkL1UKanVzdGlmeS9YR0RTTgpqdXN0bmVzcy9NCmp1dC9TTQpqdXRlL00KanV0dGVkCmp1dHRpbmcKanV2ZW5pbGUvU00KanV4dGFwb3NlL0RTRwpqdXh0YXBvc2l0aW9uL1NNCmsvSUZHUwprSHoKa1cKa1doCmthYmJhbGFoCmthYm9vbQprYWJ1a2kvTQprYWRkaXNoL01TCmthZmZlZWtsYXRjaC9NUwprYWZmZWVrbGF0c2NoL01TCmthaHVuYS9TCmthaXNlci9NUwprYWxlL00Ka2FsZWlkb3Njb3BlL01TCmthbGVpZG9zY29waWMKa2FsZWlkb3Njb3BpY2FsbHkKa2FtaWthemUvTVMKa2FuYQprYW5nYXJvby9NUwprYW5qaQprYW9saW4vTQprYXBvay9NCmthcHBhL1NNCmthcHV0CmthcmFrdWwvTQprYXJhb2tlL01TCmthcmF0L1NNCmthcmF0ZS9NCmthcm1hL00Ka2FybWljCmthcnQvTVMKa2F0YWthbmEKa2F0eWRpZC9TTQprYXlhay9TTURHCmtheWFraW5nL00Ka2F5by9NRFNHCmthem9vL1NNCmtjCmtlYmFiL1NNCmtlZGdlcmVlCmtlZWwvTURTRwprZWVsaGF1bC9ER1MKa2Vlbi9NRFJZU1RHUAprZWVubmVzcy9NCmtlZXAvTVJTWkcKa2VlcGVyL00Ka2VlcGluZy9NCmtlZXBzYWtlL01TCmtlZy9TTQprZWxwL00Ka2VsdmluL1NNCmtlbi9TTQprZW5uZWQKa2VubmVsL1NHTUQKa2VubmluZwprZW5vL00Ka2VwaS9NUwprZXB0CmtlcmF0aW4vTQprZXJhdGl0aXMKa2VyYnNpZGUKa2VyY2hpZWYvU00Ka2VyZnVmZmxlL1MKa2VybmVsL1NNCmtlcm9zZW5lL00Ka2VzdHJlbC9NUwprZXRjaC9NUwprZXRjaHVwL00Ka2V0dGxlL1NNCmtldHRsZWRydW0vU00Ka2V5L1NHTUQKa2V5YmluZGluZy9TCmtleWJvYXJkL1pHU01EUgprZXlib2FyZGVyL00Ka2V5Ym9hcmRpc3QvU00Ka2V5aG9sZS9NUwprZXlub3RlL01aR0RSUwprZXlub3Rlci9NCmtleXBhZC9TTQprZXlwdW5jaC9aR01EUlMKa2V5cHVuY2hlci9NCmtleXN0b25lL01TCmtleXN0cm9rZS9TTQprZXl3b3JkL01TCmtnCmtoYWtpL1NNCmtoYW4vTVMKa2liYmxlL0RTTUcKa2liYnV0ei9NUwpraWJidXR6aW0Ka2liaXR6L1pHRFJTCmtpYml0emVyL00Ka2lib3NoL00Ka2ljay9NRFJTWkcKa2lja2JhY2svU00Ka2lja2JhbGwvTQpraWNrYm94aW5nCmtpY2tlci9NCmtpY2tvZmYvTVMKa2lja3N0YW5kL01TCmtpY2t5L1JUCmtpZC9TTQpraWRkZWQKa2lkZGVyL1NNCmtpZGRpZS9TTQpraWRkaW5nCmtpZGRpc2gKa2lkZG8vU00Ka2lkbmFwL1MKa2lkbmFwcGVkCmtpZG5hcHBlci9NUwpraWRuYXBwaW5nL01TCmtpZG5leS9TTQpraWRza2luL00Ka2llbGJhc2EvTVMKa2llbGJhc2kKa2lrZS9TCmtpbGwvSk1EUlNaRwpraWxsZGVlci9TTQpraWxsZXIvTQpraWxsaW5nL00Ka2lsbGpveS9TTQpraWxuL01EU0cKa2lsby9NUwpraWxvYnl0ZS9TTQpraWxvY3ljbGUvU00Ka2lsb2dyYW0vU00Ka2lsb2hlcnR6L00Ka2lsb2xpdGVyL01TCmtpbG9tZXRlci9NUwpraWxvdG9uL1NNCmtpbG93YXR0L1NNCmtpbHQvTURSUwpraWx0ZXIvTQpraW1vbm8vTVMKa2luL00Ka2luYXNlCmtpbmQncwpraW5kL1VQUllUCmtpbmRhCmtpbmRlcmdhcnRlbi9NUwpraW5kZXJnYXJ0bmVyL1NNCmtpbmRoZWFydGVkL1BZCmtpbmRoZWFydGVkbmVzcy9NCmtpbmRsZS9BR0RTCmtpbmRsaW5lc3MvTQpraW5kbGluZy9NCmtpbmRseS9VUlQKa2luZG5lc3MvVU0Ka2luZG5lc3NlcwpraW5kcmVkL00Ka2luZHMKa2luZS9TCmtpbmVtYXRpYy9TCmtpbmVtYXRpY3MvTQpraW5ldGljL1MKa2luZXRpY2FsbHkKa2luZXRpY3MvTQpraW5mb2xrL1NNCmtpbmZvbGtzL00Ka2luZy9NWVMKa2luZ2RvbS9TTQpraW5nZmlzaGVyL1NNCmtpbmdseS9SVApraW5nbWFrZXIvUwpraW5ncGluL1NNCmtpbmdzaGlwL00Ka2luay9NRFNHCmtpbmtpbHkKa2lua2luZXNzL00Ka2lua3kvVFBSCmtpbnNmb2xrL00Ka2luc2hpcC9NCmtpbnNtYW4vTQpraW5zbWVuCmtpbnN3b21hbi9NCmtpbnN3b21lbgpraW9zay9TTQpraXAvU00Ka2lwcGVkCmtpcHBlci9NREdTCmtpcHBpbmcKa2lyc2NoL01TCmtpc21ldC9NCmtpc3MvTURSU0JaRwpraXNzZXIvTQpraXNzb2ZmL1NNCmtpc3NvZ3JhbS9TCmtpdC9TR01ECmtpdGNoZW4vU00Ka2l0Y2hlbmV0dGUvTVMKa2l0Y2hlbndhcmUvTQpraXRlL01TCmtpdGgvTQpraXRzY2gvTQpraXRzY2h5CmtpdHRlZApraXR0ZW4vTVMKa2l0dGVuaXNoCmtpdHRpbmcKa2l0dHkvU00Ka2l3aS9NUwpraXdpZnJ1aXQvTVMKa2wKa2xheG9uL1MKa2xlcHRvY3JhY3kKa2xlcHRvbWFuaWEvTQprbGVwdG9tYW5pYWMvU00Ka2x1ZGdlL0dEUwprbHVnZS9EUwprbHV0ei9NUwprbHV0emluZXNzL00Ka2x1dHp5L1RSUAprbQprbgprbmFjay9TWk1SCmtuYWNrZXIvR0QKa25hcHNhY2svTVMKa25hdmUvU00Ka25hdmVyeS9NCmtuYXZpc2gvWQprbmVhZC9TWkdEUgprbmVhZGVyL00Ka25lZS9NRFMKa25lZWNhcC9TTQprbmVlY2FwcGVkCmtuZWVjYXBwaW5nCmtuZWVpbmcKa25lZWwvU0cKa25lbGwvU0dNRAprbmVsdAprbmV3CmtuaWNrZXIvUwprbmlja2VyYm9ja2Vycy9NCmtuaWNrZXJzL00Ka25pY2trbmFjay9NUwprbmlmZS9EU01HCmtuaWdodC9NRFlTRwprbmlnaHRob29kL01TCmtuaWdodGxpbmVzcy9NCmtuaXNoL01TCmtuaXQvTVMKa25pdHRlZAprbml0dGVyL1NNCmtuaXR0aW5nL00Ka25pdHdlYXIvTQprbml2ZXMKa25vYi9NUwprbm9iYmx5Cmtub2JieS9UUgprbm9jay9TWkdNRFIKa25vY2thYm91dAprbm9ja2Rvd24vU00Ka25vY2tlci9NCmtub2Nrb2ZmL1NNCmtub2Nrb3V0L1NNCmtub2Nrd3Vyc3QvU00Ka25vbGwvU00Ka25vdC9NUwprbm90aG9sZS9TTQprbm90dGVkCmtub3R0aW5nCmtub3R0eS9UUgprbm93L1NCCmtub3dpbmcvVVlTCmtub3dsZWRnZS9NCmtub3dsZWRnZWFibGUKa25vd2xlZGdlYWJseQprbm93bgprbnVja2xlL0RTTUcKa251Y2tsZWR1c3Rlci9TCmtudWNrbGVoZWFkL01TCmtudXJsL1NHTUQKa29hbGEvU00Ka29hbi9TCmtvaGwKa29obHJhYmkvTQprb2hscmFiaWVzCmtvbGEvTVMKa29vay9NUwprb29rYWJ1cnJhL1NNCmtvb2tpbmVzcy9NCmtvb2t5L1RQUgprb3BlY2svTVMKa29ybWEKa29zaGVyL0RTRwprb3d0b3cvR01EUwprcGgKa3JhYWwvU00Ka3JhdXQvU00hCmtyaWxsL00Ka3JvbmEvTQprcm9uZS9STQprcm9ub3IKa3JvbnVyCmtyeXB0b24vTQprdAprdWNoZW4vU00Ka3Vkb3MvTQprdWR6dS9TTQprdW1xdWF0L01TCmt2ZXRjaC9aR01EUlMKa3ZldGNoZXIvTQprdwpsL1NEWFRHSgpsYS9NCmxhYi9TTQpsYWJlbCdzCmxhYmVsL0FTREcKbGFiZWxlZC9VCmxhYmlhCmxhYmlhbC9TTQpsYWJpbGUKbGFiaXVtL00KbGFib3IvU01EUlpHCmxhYm9yYXRvcnkvU00KbGFib3Jlci9NCmxhYm9yaW91cy9QWQpsYWJvcmlvdXNuZXNzL00KbGFib3JzYXZpbmcKbGFidXJudW0vTVMKbGFieXJpbnRoL00KbGFieXJpbnRoaW5lCmxhYnlyaW50aHMKbGFjL00KbGFjZSdzCmxhY2UvVUdEUwpsYWNlcmF0ZS9EU0dOWApsYWNlcmF0aW9uL00KbGFjZXdpbmcvU00KbGFjZXdvcmsvTQpsYWNocnltYWwKbGFjaHJ5bW9zZQpsYWNrL01EU0cKbGFja2FkYWlzaWNhbC9ZCmxhY2tleS9TTQpsYWNrbHVzdGVyCmxhY29uaWMKbGFjb25pY2FsbHkKbGFjcXVlci9HTURTCmxhY3Jvc3NlL00KbGFjdGF0ZS9HTkRTCmxhY3RhdGlvbi9NCmxhY3RlYWwKbGFjdGljCmxhY3Rvc2UvTQpsYWN1bmEvTQpsYWN1bmFlCmxhY3kvUlQKbGFkL1NHTUROSgpsYWRkZXIvR1NNRApsYWRkaWUvU00KbGFkZGlzaC9QCmxhZGUvUwpsYWRlbi9VCmxhZGluZy9NCmxhZGxlL0RTTUcKbGFkeS9TTQpsYWR5YmlyZC9TTQpsYWR5YnVnL01TCmxhZHlmaW5nZXIvTVMKbGFkeWxpa2UvVQpsYWR5bG92ZS9NUwpsYWR5c2hpcC9NUwpsYWV0cmlsZS9NCmxhZy9TWk1SCmxhZ2VyL00KbGFnZ2FyZC9NWVMKbGFnZ2VkCmxhZ2dpbmcvTQpsYWduaWFwcGUvU00KbGFnb29uL1NNCmxhaWQvSUEKbGFpbgpsYWlyL01TCmxhaXJkL1NNCmxhaXR5L00KbGFrZS9NUwpsYWtlZnJvbnQvUwpsYWtlc2lkZQpsYW0vU00KbGFtYS9NUwpsYW1hc2VyeS9TTQpsYW1iL01EU0cKbGFtYmFkYS9NUwpsYW1iYXN0ZS9HRFMKbGFtYmRhL1NNCmxhbWJlbmN5L00KbGFtYmVudC9ZCmxhbWJraW4vU00KbGFtYnNraW4vU00KbGFtYnN3b29sCmxhbWUvTVlaVEdEUlNQCmxhbWVicmFpbi9NRFMKbGFtZW5lc3MvTQpsYW1lbnQvQlNNREcKbGFtZW50YWJseQpsYW1lbnRhdGlvbi9NUwpsYW1pbmEvTQpsYW1pbmFlCmxhbWluYXIKbGFtaW5hdGUvTUdORFMKbGFtaW5hdGlvbi9NCmxhbW1lZApsYW1taW5nCmxhbXAvTVMKbGFtcGJsYWNrL00KbGFtcGxpZ2h0L01SWgpsYW1wbGlnaHRlci9NCmxhbXBvb24vU0dNRApsYW1wcG9zdC9TTQpsYW1wcmV5L01TCmxhbXBzaGFkZS9TTQpsYW5haS9TTQpsYW5jZS9EUlNNWkcKbGFuY2VyL00KbGFuY2V0L1NNCmxhbmQvTURSU0dKCmxhbmRhdS9TTQpsYW5kZmFsbC9NUwpsYW5kZmlsbC9NUwpsYW5kaG9sZGVyL1NNCmxhbmRob2xkaW5nL01TCmxhbmRpbmcvTQpsYW5kbGFkeS9TTQpsYW5kbGVzcy9NCmxhbmRsaW5lL01TCmxhbmRsb2NrZWQKbGFuZGxvcmQvTVMKbGFuZGx1YmJlci9NUwpsYW5kbWFyay9NUwpsYW5kbWFzcy9NUwpsYW5kbWluZS9TCmxhbmRvd25lci9NUwpsYW5kb3duZXJzaGlwCmxhbmRvd25pbmcvU00KbGFuZHNjYXBlL01aR0RSUwpsYW5kc2NhcGVyL00KbGFuZHNsaWQKbGFuZHNsaWRlL01HUwpsYW5kc2xpcC9TCmxhbmRzbWFuL00KbGFuZHNtZW4KbGFuZHdhcmQvUwpsYW5lL01TCmxhbmd1YWdlL01TCmxhbmd1aWQvUFkKbGFuZ3VpZG5lc3MvTQpsYW5ndWlzaC9EU0cKbGFuZ3Vvci9TTQpsYW5ndW9yb3VzL1kKbGFuay9SWVRQCmxhbmtpbmVzcy9NCmxhbmtuZXNzL00KbGFua3kvUlRQCmxhbm9saW4vTQpsYW50ZXJuL01TCmxhbnRoYW51bS9NCmxhbnlhcmQvTVMKbGFwL1NNCmxhcGFyb3Njb3BpYwpsYXBhcm9zY29weQpsYXBhcm90b215CmxhcGJvYXJkL1NNCmxhcGRvZy9TTQpsYXBlbC9TTQpsYXBpZGFyeS9TTQpsYXBpbi9TTQpsYXBwZWQKbGFwcGV0L1NNCmxhcHBpbmcKbGFwc2UvQUtHTVNECmxhcHRvcC9TTQpsYXB3aW5nL01TCmxhcmJvYXJkL1NNCmxhcmNlbmlzdC9TTQpsYXJjZW5vdXMKbGFyY2VueS9TTQpsYXJjaC9NUwpsYXJkL01EUlNaRwpsYXJkZXIvTQpsYXJkeS9SVApsYXJnZS9SU1BNWVQKbGFyZ2VoZWFydGVkCmxhcmdlbmVzcy9NCmxhcmdlc3MvTQpsYXJnaXNoCmxhcmdvL1NNCmxhcmlhdC9TTQpsYXJrL01EU0cKbGFya3NwdXIvU00KbGFydmEvTQpsYXJ2YWUKbGFydmFsCmxhcnluZ2VhbApsYXJ5bmdlcwpsYXJ5bmdpdGlzL00KbGFyeW54L00KbGFzYWduYS9NUwpsYXNjaXZpb3VzL1lQCmxhc2NpdmlvdXNuZXNzL00KbGFzZS9aR0RSUwpsYXNlci9NCmxhc2gvTURTR0oKbGFzaGluZy9NCmxhc3MvTVMKbGFzc2llL1NNCmxhc3NpdHVkZS9NCmxhc3NvL1NNREcKbGFzdC9NRFlTRwpsYXN0aW5nL1kKbGF0L1MKbGF0Y2gncwpsYXRjaC9VRFNHCmxhdGNoa2V5L1NNCmxhdGUvWVRSUApsYXRlY29tZXIvTVMKbGF0ZW5jeS9NCmxhdGVuZXNzL00KbGF0ZW50CmxhdGVyYWwvTURZU0cKbGF0ZXN0L00KbGF0ZXgvTQpsYXRoL01EUlNaRwpsYXRoZS9NCmxhdGhlci9HTUQKbGF0aGVyeQpsYXRocwpsYXRpY2VzCmxhdGlzaApsYXRpdHVkZS9NUwpsYXRpdHVkaW5hbApsYXRpdHVkaW5hcmlhbi9NUwpsYXRyaW5lL01TCmxhdHRlL1JTTQpsYXR0ZXIvTVkKbGF0dGljZS9NRFMKbGF0dGljZXdvcmsvU00KbGF1ZC9NRFNHQgpsYXVkYWJseQpsYXVkYW51bS9NCmxhdWRhdG9yeQpsYXVnaC9CTURHCmxhdWdoYWJseQpsYXVnaGluZy9NWQpsYXVnaGluZ3N0b2NrL1NNCmxhdWdocwpsYXVnaHRlci9NCmxhdW5jaC9BR01EUwpsYXVuY2hlci9TTQpsYXVuY2hwYWQvU00KbGF1bmRlci9EUlpHUwpsYXVuZGVyZXIvTQpsYXVuZGVyZXR0ZS9TTQpsYXVuZHJlc3MvTVMKbGF1bmRyb21hdC9NUwpsYXVuZHJ5L1NNCmxhdW5kcnltYW4vTQpsYXVuZHJ5bWVuCmxhdW5kcnl3b21hbi9NCmxhdW5kcnl3b21lbgpsYXVyZWF0ZS9NUwpsYXVyZWF0ZXNoaXAvTQpsYXVyZWwvU00KbGF2L1NHRApsYXZhL00KbGF2YWdlL00KbGF2YWxpZXJlL1NNCmxhdmF0b3JpYWwKbGF2YXRvcnkvU00KbGF2ZS9TCmxhdmVuZGVyL1NNCmxhdmlzaC9QVEdEUlNZCmxhdmlzaG5lc3MvTQpsYXcvU00KbGF3YnJlYWtlci9TTQpsYXdicmVha2luZy9NCmxhd2Z1bC9VUFkKbGF3ZnVsbmVzcy9VTQpsYXdnaXZlci9NUwpsYXdsZXNzL1BZCmxhd2xlc3NuZXNzL00KbGF3bWFrZXIvTVMKbGF3bWFraW5nL00KbGF3bWFuL00KbGF3bWVuCmxhd24vTVMKbGF3bm1vd2VyL1NNCmxhd3JlbmNpdW0vTQpsYXdzdWl0L01TCmxhd3llci9TTQpsYXgvVFJZUApsYXhhdGl2ZS9NUwpsYXhpdHkvTQpsYXhuZXNzL00KbGF5L0FJQ1NHTQpsYXlhYm91dC9TCmxheWF3YXkvTQpsYXllci9DU00KbGF5ZXJlZApsYXllcmluZy9NCmxheWV0dGUvTVMKbGF5bWFuL00KbGF5bWVuCmxheW9mZi9TTQpsYXlvdXQvU00KbGF5b3Zlci9NUwpsYXlwZW9wbGUKbGF5cGVyc29uL01TCmxheXVwL1NNCmxheXdvbWFuL00KbGF5d29tZW4KbGF6ZS9NR0RTCmxhemlseQpsYXppbmVzcy9NCmxhenkvRFJTVEdQCmxhenlib25lcy9NCmxiL1MKbGJ3CmxlYS9TTQpsZWFjaC9EU0cKbGVhZC9NRE5SU1pHCmxlYWRlci9NCmxlYWRlcmxlc3MKbGVhZGVyc2hpcC9TTQpsZWFkaW5nL00KbGVhZi9NRFNHCmxlYWZhZ2UvTQpsZWFmbGVzcwpsZWFmbGV0L0dNRFMKbGVhZnN0YWxrL01TCmxlYWZ5L1JUCmxlYWd1ZS9EU01HCmxlYWsvTURTRwpsZWFrYWdlL01TCmxlYWtpbmVzcy9NCmxlYWt5L1BSVApsZWFuL01EUlNUR0pQCmxlYW5pbmcvTQpsZWFubmVzcy9NCmxlYXAvTURSU1pHCmxlYXBlci9NCmxlYXBmcm9nL01TCmxlYXBmcm9nZ2VkCmxlYXBmcm9nZ2luZwpsZWFybi9BVUdEUwpsZWFybmVkbHkKbGVhcm5lci9NUwpsZWFybmluZydzCmxlYXNlL0FEU01HCmxlYXNlYmFjay9TTQpsZWFzZWhvbGQvTVJTWgpsZWFzZWhvbGRlci9NCmxlYXNlci9TTQpsZWFzaCdzCmxlYXNoL1VEU0cKbGVhc3QvTQpsZWFzdHdpc2UKbGVhdGhlci9NUwpsZWF0aGVyZXR0ZS9NCmxlYXRoZXJuZWNrL01TCmxlYXRoZXJ5CmxlYXZlL0RSU01aR0oKbGVhdmVuL1NHTUQKbGVhdmVuZWQvVQpsZWF2ZW5pbmcvTQpsZWF2ZXIvTQpsZWF2aW5ncy9NCmxlY2gvTURSU1pHCmxlY2hlci9NCmxlY2hlcm91cy9QWQpsZWNoZXJvdXNuZXNzL00KbGVjaGVyeS9NCmxlY2l0aGluL00KbGVjdGVybi9NUwpsZWN0dXJlL01aR0RSUwpsZWN0dXJlci9NCmxlY3R1cmVzaGlwL1NNCmxlZGdlL1JTTVoKbGVkZ2VyL00KbGVlL1JTTVoKbGVlY2gvTURTRwpsZWVrL01TCmxlZXIvTURHCmxlZXJpbmVzcy9NCmxlZXJ5L1JQVApsZWV3YXJkL1NNCmxlZXdheS9NCmxlZnQvTVJTVApsZWZ0aXNtL00KbGVmdGlzdC9TTQpsZWZ0bW9zdApsZWZ0b3Zlci9TTQpsZWZ0d2FyZC9TCmxlZnR5L1NNCmxlZy9TTQpsZWdhY3kvU00KbGVnYWwvU01ZCmxlZ2FsZXNlL00KbGVnYWxpc20vTVMKbGVnYWxpc3RpYwpsZWdhbGlzdGljYWxseQpsZWdhbGl0eS9TTQpsZWdhbGl6YXRpb24vTQpsZWdhbGl6ZS9HRFMKbGVnYXRlL0NYTU5TCmxlZ2F0ZWUvTVMKbGVnYXRpb24ncy9BQwpsZWdhdG8vU00KbGVnZW5kL1NNCmxlZ2VuZGFyaWx5CmxlZ2VuZGFyeQpsZWdlcmRlbWFpbi9NCmxlZ2dlZApsZWdnaW5lc3MvTQpsZWdnaW5nL01TCmxlZ2d5L1JQVApsZWdob3JuL01TCmxlZ2liaWxpdHkvTQpsZWdpYmxlCmxlZ2libHkKbGVnaW9uL1NNCmxlZ2lvbmFyeS9TTQpsZWdpb25uYWlyZS9TTQpsZWdpc2xhdGUvRFNHTlYKbGVnaXNsYXRpb24vTQpsZWdpc2xhdGl2ZS9ZCmxlZ2lzbGF0b3IvTVMKbGVnaXNsYXR1cmUvU00KbGVnaXQKbGVnaXRpbWFjeS9NCmxlZ2l0aW1hdGUvRFNZRwpsZWdpdGltYXRpemUvR0RTCmxlZ2l0aW1pemF0aW9uL00KbGVnaXRpbWl6ZS9EU0cKbGVnbGVzcwpsZWdtYW4vTQpsZWdtZW4KbGVncm9vbS9TTQpsZWd1bWUvTVMKbGVndW1pbm91cwpsZWd3YXJtZXIvUwpsZWd3b3JrL00KbGVpL1NNCmxlaXN1cmUvRE1ZCmxlaXN1cmVsaW5lc3MvTQpsZWlzdXJld2Vhci9NCmxlaXRtb3RpZi9NUwpsZWl0bW90aXYvTVMKbGVtbWEvUwpsZW1tZS9KRwpsZW1taW5nL00KbGVtb24vU00KbGVtb25hZGUvU00KbGVtb25ncmFzcwpsZW1vbnkKbGVtdXIvU00KbGVuZC9SU1pHCmxlbmRlci9NCmxlbmd0aC9NTlgKbGVuZ3RoZW4vR0QKbGVuZ3RoaWx5Cmxlbmd0aGluZXNzL00KbGVuZ3RocwpsZW5ndGh3aXNlCmxlbmd0aHkvUFJUCmxlbmllbmNlL00KbGVuaWVuY3kvTQpsZW5pZW50L1kKbGVuaXRpdmUKbGVucy9NUwpsZW50CmxlbnRpbC9NUwpsZW50bwpsZW9uaW5lCmxlb3BhcmQvU00KbGVvcGFyZGVzcy9NUwpsZW90YXJkL1NNCmxlcGVyL1NNCmxlcHJlY2hhdW4vTVMKbGVwcm9zeS9NCmxlcHJvdXMKbGVwdGEKbGVwdG9uL01TCmxlc2JpYW4vU00KbGVzYmlhbmlzbS9NCmxlc2lvbi9NUwpsZXNzL01OUlgKbGVzc2VlL01TCmxlc3Nlbi9HRApsZXNzb24vTVMKbGVzc29yL01TCmxldC9JU00KbGV0ZG93bi9TTQpsZXRoYWwvWQpsZXRoYXJnaWMKbGV0aGFyZ2ljYWxseQpsZXRoYXJneS9NCmxldHRlci9aR01EUlMKbGV0dGVyYm9tYi9TCmxldHRlcmJveC9TCmxldHRlcmVkL1UKbGV0dGVyZXIvTQpsZXR0ZXJoZWFkL01TCmxldHRlcmluZy9NCmxldHRlcnByZXNzL00KbGV0dGluZy9TCmxldHR1Y2UvTVMKbGV0dXAvU00KbGV1Y2luZQpsZXVjb3RvbXkvUwpsZXVrZW1pYS9NCmxldWtlbWljL1NNCmxldWtvY3l0ZS9NUwpsZXZlZS9TTQpsZXZlbC9QU1pHTURSWQpsZXZlbGVyL00KbGV2ZWxoZWFkZWQvUApsZXZlbGhlYWRlZG5lc3MvTQpsZXZlbG5lc3MvTQpsZXZlci9TR01ECmxldmVyYWdlJ3MKbGV2ZXJhZ2UvQ0RTRwpsZXZpYXRoYW4vTVMKbGV2aWVyL00KbGV2aXRhdGUvRFNHTgpsZXZpdGF0aW9uL00KbGV2aXR5L00KbGV2eS9EUlNNWkcKbGV3ZC9SWVBUCmxld2RuZXNzL00KbGV4ZXIvUwpsZXhpY2FsCmxleGljb2dyYXBoZXIvTVMKbGV4aWNvZ3JhcGhpYwpsZXhpY29ncmFwaGljYWwKbGV4aWNvZ3JhcGh5L00KbGV4aWNvbi9TTQpsZXhpcwpsZwpsaWFiaWxpdGllcwpsaWFiaWxpdHkvQU0KbGlhYmxlL0EKbGlhaXNlL0dEUwpsaWFpc29uL01TCmxpYXIvTVMKbGliL00KbGliYXRpb24vU00KbGliYmVyL01TCmxpYmVsL1NaR01EUgpsaWJlbGVyL00KbGliZWxvdXMKbGliZXJhbC9NWVBTCmxpYmVyYWxpc20vTQpsaWJlcmFsaXR5L00KbGliZXJhbGl6YXRpb24vU00KbGliZXJhbGl6ZS9HRFMKbGliZXJhbG5lc3MvTQpsaWJlcmF0ZS9DRFNHTgpsaWJlcmF0aW9uL0NNCmxpYmVyYXRvci9NUwpsaWJlcnRhcmlhbi9TTQpsaWJlcnRpbmUvTVMKbGliZXJ0eS9TTQpsaWJpZGluYWwKbGliaWRpbm91cwpsaWJpZG8vTVMKbGlicmFyaWFuL01TCmxpYnJhcmlhbnNoaXAKbGlicmFyeS9TTQpsaWJyZXR0aXN0L01TCmxpYnJldHRvL1NNCmxpY2UKbGljZW5zZS9NR0RTCmxpY2Vuc2VkL1UKbGljZW5zZWUvTVMKbGljZW50aWF0ZS9TTQpsaWNlbnRpb3VzL1lQCmxpY2VudGlvdXNuZXNzL00KbGljaGVuL01TCmxpY2l0L1kKbGljay9NREpTRwpsaWNraW5nL00KbGljb3JpY2UvU00KbGlkL1NNCmxpZGRlZApsaWRsZXNzCmxpZG8vTVMKbGllL0RTTQpsaWVkL01SCmxpZWYvUlQKbGllZ2UvU00KbGllbi9NUwpsaWV1L00KbGlldXRlbmFuY3kvTQpsaWV1dGVuYW50L01TCmxpZmUvTVpSCmxpZmViZWx0L1MKbGlmZWJsb29kL00KbGlmZWJvYXQvTVMKbGlmZWJ1b3kvTVMKbGlmZWZvcm1zCmxpZmVndWFyZC9TTQpsaWZlbGVzcy9ZUApsaWZlbGVzc25lc3MvTQpsaWZlbGlrZQpsaWZlbGluZS9NUwpsaWZlbG9uZwpsaWZlci9NCmxpZmVzYXZlci9TTQpsaWZlc2F2aW5nL00KbGlmZXNwYW4vUwpsaWZlc3R5bGUvU00KbGlmZXRpbWUvTVMKbGlmZXdvcmsvTVMKbGlmdC9NRFJTWkcKbGlmdGVyL00KbGlmdG9mZi9TTQpsaWdhbWVudC9NUwpsaWdhdGUvR05EUwpsaWdhdGlvbi9NCmxpZ2F0dXJlL01HRFMKbGlnaHQncy9DCmxpZ2h0L0NBU1RHRApsaWdodGVkL1UKbGlnaHRlbi9TRFJaRwpsaWdodGVuZXIvTQpsaWdodGVyL1NNCmxpZ2h0ZmFjZS9NRApsaWdodGhlYWRlZApsaWdodGhlYXJ0ZWQvWVAKbGlnaHRoZWFydGVkbmVzcy9NCmxpZ2h0aG91c2UvTVMKbGlnaHRpbmcncwpsaWdodGx5CmxpZ2h0bmVzcy9NCmxpZ2h0bmluZy9NRFMKbGlnaHRwcm9vZgpsaWdodHNoaXAvTVMKbGlnaHR3ZWlnaHQvU00KbGlnbmVvdXMKbGlnbmluCmxpZ25pdGUvTQpsaWkKbGlrYWJpbGl0eS9NCmxpa2FibGUvUApsaWthYmxlbmVzcy9NCmxpa2UvRU1HRFNUCmxpa2VsaWhvb2QvVU0KbGlrZWxpaG9vZHMKbGlrZWxpbmVzcy9VTQpsaWtlbHkvVVBSVApsaWtlbi9TR0QKbGlrZW5lc3MvVU0KbGlrZW5lc3NlcwpsaWtlcgpsaWtld2lzZQpsaWtpbmcvTQpsaWxhYy9TTQpsaWxsaXB1dGlhbgpsaWxvL1MKbGlsdC9NRFNHCmxpbHkvU00KbGltYi9NUwpsaW1iZXIvVURTRwpsaW1iZXJuZXNzL00KbGltYmxlc3MKbGltYm8vU00KbGltZS9NR0RTCmxpbWVhZGUvU00KbGltZWxpZ2h0L00KbGltZXJpY2svU00KbGltZXNjYWxlCmxpbWVzdG9uZS9NCmxpbWV5L1MKbGltaXQncwpsaW1pdC9DU1pHRFIKbGltaXRhdGlvbi9DTQpsaW1pdGF0aW9ucwpsaW1pdGVkL1UKbGltaXRlcidzCmxpbWl0aW5nL1MKbGltaXRsZXNzL1AKbGltaXRsZXNzbmVzcy9NCmxpbW4vRFNHCmxpbW8vTVMKbGltb3VzaW5lL01TCmxpbXAvTURSWVNQVEcKbGltcGV0L01TCmxpbXBpZC9ZUApsaW1waWRpdHkvTQpsaW1waWRuZXNzL00KbGltcG5lc3MvTQpsaW15L1JUCmxpbmFnZS9NCmxpbmNocGluL1NNCmxpbmRlbi9NUwpsaW5lL01aR0RSU0oKbGluZWFnZS9NUwpsaW5lYWwvWQpsaW5lYW1lbnQvU00KbGluZWFyL1kKbGluZWFyaXR5L00KbGluZWJhY2tlci9NUwpsaW5lZC9VCmxpbmVmZWVkCmxpbmVtYW4vTQpsaW5lbWVuCmxpbmVuL1NNCmxpbmVucy9NCmxpbmVyL00KbGluZXNtYW4vTQpsaW5lc21lbgpsaW5ldXAvTVMKbGluZy9NCmxpbmdlci9aR0pEUlMKbGluZ2VyZXIvTQpsaW5nZXJpZS9NCmxpbmdlcmluZy9ZCmxpbmdvL00KbGluZ29lcwpsaW5ndWFsCmxpbmd1aW5lL00KbGluZ3Vpc3QvU00KbGluZ3Vpc3RpYy9TCmxpbmd1aXN0aWNhbGx5Cmxpbmd1aXN0aWNzL00KbGluaW1lbnQvU00KbGluaW5nL00KbGluay9NRFJTRwpsaW5rYWdlL01TCmxpbmttYW4KbGlua21lbgpsaW5rdXAvTVMKbGlubmV0L01TCmxpbm8KbGlub2xldW0vTQpsaW5zZWVkL00KbGludCdzCmxpbnQvQ0RHCmxpbnRlbC9NUwpsaW50cwpsaW50eS9UUgpsaW9uL01TCmxpb25lc3MvTVMKbGlvbmhlYXJ0ZWQKbGlvbml6YXRpb24vTQpsaW9uaXplL0dEUwpsaXAvU00KbGlwaWQvU00KbGlwb3N1Y3Rpb24vTQpsaXBwZWQKbGlwcHkKbGlwcmVhZC9HUlMKbGlwcmVhZGVyL00KbGlwcmVhZGluZy9NCmxpcHN0aWNrL01EU0cKbGlxCmxpcXVlZmFjdGlvbi9NCmxpcXVlZnkvRFNHCmxpcXVldXIvU00KbGlxdWlkL01TCmxpcXVpZGF0ZS9YR05EUwpsaXF1aWRhdGlvbi9NCmxpcXVpZGF0b3IvTVMKbGlxdWlkaXR5L00KbGlxdWlkaXplL1pHRFJTCmxpcXVpZGl6ZXIvTQpsaXF1b3IvTURHUwpsaXJhL00KbGlyZQpsaXNsZS9NCmxpc3AvTURSU1pHCmxpc3Blci9NCmxpc3NvbWUKbGlzdC9NRE5TSlhHCmxpc3RlZC9VCmxpc3Rlbi9CTURSWkcKbGlzdGVuZXIvTQpsaXN0ZXJpYQpsaXN0aW5nL00KbGlzdGxlc3MvWVAKbGlzdGxlc3NuZXNzL00KbGl0L1pSCmxpdGFueS9TTQpsaXRjaGkvTVMKbGl0ZQpsaXRlci9NCmxpdGVyYWN5L00KbGl0ZXJhbC9TTVlQCmxpdGVyYWxuZXNzL00KbGl0ZXJhcmluZXNzL00KbGl0ZXJhcnkvUApsaXRlcmF0ZS9TTVkKbGl0ZXJhdGkvTQpsaXRlcmF0dXJlL00KbGl0aGUvUlBZVApsaXRoZW5lc3MvTQpsaXRoZXNvbWUKbGl0aGl1bS9NCmxpdGhvZ3JhcGgvTURSWkcKbGl0aG9ncmFwaGVyL00KbGl0aG9ncmFwaGljCmxpdGhvZ3JhcGhpY2FsbHkKbGl0aG9ncmFwaHMKbGl0aG9ncmFwaHkvTQpsaXRob3NwaGVyZS9TTQpsaXRpZ2FudC9TTQpsaXRpZ2F0ZS9EU0dOCmxpdGlnYXRpb24vTQpsaXRpZ2F0b3IvTVMKbGl0aWdpb3VzL1AKbGl0aWdpb3VzbmVzcy9NCmxpdG11cy9NCmxpdG90ZXMvTQpsaXR0ZXIvTURSU1pHCmxpdHRlcmF0ZXVyL01TCmxpdHRlcmJ1Zy9NUwpsaXR0ZXJlci9NCmxpdHRsZS9NVFJQCmxpdHRsZW5lc3MvTQpsaXR0b3JhbC9TTQpsaXR1cmdpY2FsL1kKbGl0dXJnaXN0L1NNCmxpdHVyZ3kvU00KbGl2YWJpbGl0eS9NCmxpdmFibGUvVQpsaXZlL0FUR0RTQgpsaXZlbGlob29kL1NNCmxpdmVsaW5lc3MvTQpsaXZlbG9uZy9TCmxpdmVseS9QUlQKbGl2ZW4vU0dECmxpdmVyJ3MKbGl2ZXIvUwpsaXZlcmllZApsaXZlcmlzaApsaXZlcndvcnQvTVMKbGl2ZXJ3dXJzdC9NCmxpdmVyeS9DU00KbGl2ZXJ5bWFuL0NNCmxpdmVyeW1lbi9DCmxpdmVzdG9jay9NCmxpdmV3YXJlCmxpdmlkL1kKbGl2aW5nL01TCmxpeC9LCmxpemFyZC9NUwpsbApsbGFtYS9TTQpsbGFuby9TTQpsbwpsb2FkJ3MKbG9hZC9BVUdTRApsb2FkYWJsZQpsb2FkZXIvTVMKbG9hZGluZydzCmxvYWYvTURSU1pHCmxvYWZlci9NCmxvYW0vTQpsb2FteS9UUgpsb2FuL01EUlNaRwpsb2FuZXIvTQpsb2Fuc2hhcmtpbmcvTQpsb2Fud29yZC9NUwpsb2F0aC9KWkdEUlMKbG9hdGhlCmxvYXRoZXIvTQpsb2F0aGluZy9NCmxvYXRoc29tZS9QWQpsb2F0aHNvbWVuZXNzL00KbG9hdmVzCmxvYi9TTUQKbG9iYXIKbG9iYmVkCmxvYmJlci9NUwpsb2JiaW5nCmxvYmJ5L0dEU00KbG9iYnlpc3QvTVMKbG9iZS9NUwpsb2JvdG9taXplL0RTRwpsb2JvdG9teS9TTQpsb2JzdGVyL01TCmxvY2FsL1NNWQpsb2NhbGUvTVMKbG9jYWxpdHkvU00KbG9jYWxpemF0aW9uL00KbG9jYWxpemUvRFNHCmxvY2F0ZS9FQUdORFMKbG9jYXRpb24ncy9BCmxvY2F0aW9uL0VTTQpsb2NhdG9yL01TCmxvY2F2b3JlL1NNCmxvY2kKbG9jay9NRFJTQlpHCmxvY2tlci9NCmxvY2tldC9NUwpsb2NramF3L00KbG9ja291dC9NUwpsb2Nrc21pdGgvTQpsb2Nrc21pdGhzCmxvY2tzdGVwL00KbG9ja3VwL01TCmxvY28vUwpsb2NvbW90aW9uL00KbG9jb21vdGl2ZS9NUwpsb2Nvd2VlZC9TTQpsb2N1bS9TCmxvY3VzL00KbG9jdXN0L1NNCmxvY3V0aW9uL01TCmxvZGUvTVMKbG9kZXN0YXIvTVMKbG9kZXN0b25lL01TCmxvZGdlL0RSU0pNWkcKbG9kZ2VyL00KbG9kZ2luZy9NCmxvZGdpbmdzL00KbG9mdC9NRFNHCmxvZnRpbHkKbG9mdGluZXNzL00KbG9mdHkvUFJUCmxvZy9TTQpsb2dhbmJlcnJ5L1NNCmxvZ2FyaXRobS9TTQpsb2dhcml0aG1pYwpsb2dib29rL1NNCmxvZ2UvTVMKbG9nZ2VkCmxvZ2dlci9TTQpsb2dnZXJoZWFkL1NNCmxvZ2dpYS9TTQpsb2dnaW5nL00KbG9naWMvTQpsb2dpY2FsL1kKbG9naWNhbGl0eS9NCmxvZ2ljaWFuL01TCmxvZ2luL1NNCmxvZ2lzdGljL1MKbG9naXN0aWNhbC9ZCmxvZ2lzdGljcy9NCmxvZ2phbS9TTQpsb2dvL01TCmxvZ29mZi9TTQpsb2dvbi9TTQpsb2dvdHlwZS9TTQpsb2dvdXQvU00KbG9ncm9sbGluZy9NCmxvZ3kvUlQKbG9pbi9NUwpsb2luY2xvdGgvTQpsb2luY2xvdGhzCmxvaXRlci9aR1NEUgpsb2l0ZXJlci9NCmxvaXRlcmluZy9NCmxvbGNhdC9TTQpsb2xsL0RTRwpsb2xsaXBvcC9TTQpsb2xsb3AvR1NECmxvbGx5L1MKbG9sbHlnYWcvUwpsb2xseWdhZ2dlZApsb2xseWdhZ2dpbmcKbG9uZS9ZWlIKbG9uZWxpbmVzcy9NCmxvbmVseS9QVFIKbG9uZXIvTQpsb25lc29tZS9ZUApsb25lc29tZW5lc3MvTQpsb25nJ3MKbG9uZy9LRFNURwpsb25nYm9hdC9NUwpsb25nYm93L01TCmxvbmdlcgpsb25nZXZpdHkvTQpsb25naGFpci9NUwpsb25naGFuZC9NCmxvbmdob3JuL01TCmxvbmdob3VzZS9TCmxvbmdpbmcvTVlTCmxvbmdpc2gKbG9uZ2l0dWRlL01TCmxvbmdpdHVkaW5hbC9ZCmxvbmdzaG9yZW1hbi9NCmxvbmdzaG9yZW1lbgpsb25nc2lnaHRlZApsb25nc3RhbmRpbmcKbG9uZ3RpbWUKbG9uZ3VldXIvU00KbG9uZ3dheXMKbG9vCmxvb2ZhaC9NCmxvb2ZhaHMKbG9vay9NRFJTWkcKbG9va2FsaWtlL01TCmxvb2tlci9NCmxvb2tvdXQvTVMKbG9va3VwCmxvb20vTURTRwpsb29uL01TCmxvb25pZS9NCmxvb255L1JTTVQKbG9vcC9NRFNHCmxvb3Bob2xlL01TCmxvb3B5L1JUCmxvb3MvTlJYCmxvb3NlL1VEU1RHCmxvb3NlbHkKbG9vc2VuL1VHU0QKbG9vc2VuZXNzL00KbG9vdC9NRFJTWkcKbG9vdGVyL00KbG9vdGluZy9NCmxvcC9TCmxvcGUvTUdEUwpsb3BwZWQKbG9wcGluZwpsb3BzaWRlZC9ZUApsb3BzaWRlZG5lc3MvTQpsb3F1YWNpb3VzL1BZCmxvcXVhY2lvdXNuZXNzL00KbG9xdWFjaXR5L00KbG9yZC9NRFlTRwpsb3JkbGluZXNzL00KbG9yZGx5L1RQUgpsb3Jkc2hpcC9TTQpsb3JlL00KbG9yZ25ldHRlL1NNCmxvcmlzL01TCmxvcm4KbG9ycnkvU00KbG9zZS9aR1JTSgpsb3Nlci9NCmxvc2luZy9NCmxvc3MvTVMKbG9zc2xlc3MKbG9zdApsb3QvU00KbG90aW9uL1NNCmxvdHRlcnkvU00KbG90dG8vTQpsb3R1cy9NUwpsb3VjaGUKbG91ZC9SWVRQCmxvdWRoYWlsZXIvU00KbG91ZG1vdXRoL01ECmxvdWRtb3V0aHMKbG91ZG5lc3MvTQpsb3Vkc3BlYWtlci9NUwpsb3VnaApsb3VnaHMKbG91bmdlL01aR0RSUwpsb3VuZ2VyL00KbG91ci9EU0cKbG91c2Uncwpsb3VzZS9DRFNHCmxvdXNpbHkKbG91c2luZXNzL00KbG91c3kvVFBSCmxvdXQvTVMKbG91dGlzaC9QWQpsb3V2ZXIvTURTCmxvdmFibGVuZXNzL00KbG92YWJseQpsb3ZlL01ZWkdEUlNCCmxvdmViaXJkL1NNCmxvdmVjaGlsZC9NCmxvdmVkL1UKbG92ZWxlc3MKbG92ZWxpbmVzcy9NCmxvdmVsb3JuCmxvdmVseS9SU01UUApsb3ZlbWFraW5nL00KbG92ZXIvTQpsb3Zlc2ljawpsb3ZleS9TCmxvdmluZy9ZCmxvdy9TWlRHTURSWVAKbG93Ym9ybgpsb3dib3kvTVMKbG93YnJvdy9TTQpsb3dkb3duL00KbG93ZXIvR0QKbG93ZXJjYXNlL00KbG93ZXJtb3N0Cmxvd2lzaApsb3dsYW5kL1NaTVIKbG93bGFuZGVyL00KbG93bGlmZS9TTQpsb3dsaW5lc3MvTQpsb3dseS9UUFIKbG93bmVzcy9NCmxveC9NCmxveWFsL0VUWQpsb3lhbGVyCmxveWFsaXNtL00KbG95YWxpc3QvU00KbG95YWx0aWVzCmxveWFsdHkvRU0KbG96ZW5nZS9TTQpsdGQKbHVhdS9NUwpsdWJiZXIvTVlTCmx1YmUvTUdEUwpsdWJyaWNhbnQvU00KbHVicmljYXRlL0RTR04KbHVicmljYXRpb24vTQpsdWJyaWNhdG9yL01TCmx1YnJpY2lvdXMvWQpsdWJyaWNpdHkvTQpsdWNpZC9QWQpsdWNpZGl0eS9NCmx1Y2lkbmVzcy9NCmx1Y2svTURTRwpsdWNraWx5L1UKbHVja2luZXNzL1VNCmx1Y2tsZXNzCmx1Y2t5L1VQVFIKbHVjcmF0aXZlL1lQCmx1Y3JhdGl2ZW5lc3MvTQpsdWNyZS9NCmx1Y3VicmF0ZS9HTkRTCmx1Y3VicmF0aW9uL00KbHVkaWNyb3VzL1lQCmx1ZGljcm91c25lc3MvTQpsdWRvCmx1ZmYvRFNHCmx1Zy9TTQpsdWdlL1MKbHVnZ2FnZS9NCmx1Z2dlZApsdWdnZXIvTVMKbHVnZ2luZwpsdWdob2xlL1MKbHVnc2FpbC9TTQpsdWd1YnJpb3VzL1lQCmx1Z3VicmlvdXNuZXNzL00KbHVrZXdhcm0vWVAKbHVrZXdhcm1uZXNzL00KbHVsbC9NRFNHCmx1bGxhYnkvU00KbHVsdS9TCmx1bWJhZ28vTQpsdW1iYXIKbHVtYmVyL01EUlpHUwpsdW1iZXJlci9NCmx1bWJlcmluZy9NCmx1bWJlcmphY2svU00KbHVtYmVybWFuL00KbHVtYmVybWVuCmx1bWJlcnlhcmQvU00KbHVtaW5hcnkvU00KbHVtaW5lc2NlbmNlL00KbHVtaW5lc2NlbnQKbHVtaW5vc2l0eS9NCmx1bWlub3VzL1kKbHVtbW94L01TCmx1bXAvTUROU0cKbHVtcGVjdG9teS9TCmx1bXBpbmVzcy9NCmx1bXBpc2gKbHVtcHkvVFJQCmx1bmFjeS9TTQpsdW5hcgpsdW5hdGljL1NNCmx1bmNoL0dNRFMKbHVuY2hib3gvUwpsdW5jaGVvbi9TTQpsdW5jaGVvbmV0dGUvU00KbHVuY2hyb29tL01TCmx1bmNodGltZS9NUwpsdW5nL01EU0cKbHVuZ2UvU00KbHVuZ2Zpc2gvTVMKbHVuZ2Z1bC9TCmx1bmtoZWFkL01TCmx1cGluZS9NUwpsdXB1cy9NCmx1cmNoL0dNRFMKbHVyZS9NR0RTCmx1cmd5Cmx1cmlkL1BZCmx1cmlkbmVzcy9NCmx1cmsvRFJTWkcKbHVzY2lvdXMvUFkKbHVzY2lvdXNuZXNzL00KbHVzaC9NUlNZUFQKbHVzaG5lc3MvTQpsdXN0L01EUlNHCmx1c3Rlci9NCmx1c3Rlcmxlc3MKbHVzdGZ1bC9ZCmx1c3RpbHkKbHVzdGluZXNzL00KbHVzdHJvdXMvWQpsdXN0eS9QVFIKbHV0YW5pc3QvU00KbHV0ZS9NUwpsdXRlbmlzdC9TTQpsdXRldGl1bS9NCmx1eHVyaWFuY2UvTQpsdXh1cmlhbnQvWQpsdXh1cmlhdGUvRFNHTgpsdXh1cmlhdGlvbi9NCmx1eHVyaW91cy9QWQpsdXh1cmlvdXNuZXNzL00KbHV4dXJ5L1NNCmx2aQpsdmlpCmx4aQpseGlpCmx4aXYKbHhpeApseHZpCmx4dmlpCmx5Y2V1bS9NUwpseWNoZ2F0ZS9TCmx5ZS9NRwpseWluZy9NCmx5bXBoL00KbHltcGhhdGljL1NNCmx5bXBob2N5dGUvU00KbHltcGhvaWQKbHltcGhvbWEvU00KbHluY2gvSlpHRFJTCmx5bmNoZXIvTQpseW5jaGluZy9NCmx5bngvTVMKbHlyZS9NUwpseXJlYmlyZC9NUwpseXJpYy9TTQpseXJpY2FsL1kKbHlyaWNpc20vTQpseXJpY2lzdC9TTQpseXNvc29tYWwKbHlzb3NvbWVzCm0vS0FTCm1hJ2FtCm1hL1NNSAptYWMvU0dNRAptYWNhYnJlCm1hY2FkYW0vTQptYWNhZGFtaWEvU00KbWFjYWRhbWl6ZS9HRFMKbWFjYXF1ZS9NUwptYWNhcm9uaS9NUwptYWNhcm9vbi9NUwptYWNhdy9TTQptYWNlL01TCm1hY2VyYXRlL0RTR04KbWFjZXJhdGlvbi9NCm1hY2gvTQptYWNoZXRlL1NNCm1hY2hpbmF0ZS9HTkRTWAptYWNoaW5hdGlvbi9NCm1hY2hpbmUvRFNNR0IKbWFjaGluZXJ5L00KbWFjaGluaXN0L01TCm1hY2hpc21vL00KbWFjaG8vTQptYWNrZXJlbC9TTQptYWNraW5hdy9TTQptYWNraW50b3NoL01TCm1hY3JhbWUvTQptYWNyby9TTQptYWNyb2Jpb3RpYy9TCm1hY3JvYmlvdGljcy9NCm1hY3JvY29zbS9TTQptYWNyb2Vjb25vbWljL1MKbWFjcm9lY29ub21pY3MvTQptYWNyb2xvZ3kvUwptYWNyb24vTVMKbWFjcm9waGFnZXMKbWFjcm9zY29waWMKbWFkL1NNWVAKbWFkYW0vU00KbWFkYW1lL00KbWFkY2FwL01TCm1hZGRlbi9ER1MKbWFkZGVuaW5nL1kKbWFkZGVyL01TCm1hZGRlc3QKbWFkZGluZwptYWRlL0FVCm1hZGVtb2lzZWxsZS9NUwptYWRob3VzZS9TTQptYWRtYW4vTQptYWRtZW4KbWFkbmVzcy9NCm1hZHJhcy9NUwptYWRyYXNhL1NNCm1hZHJhc2FoL00KbWFkcmFzYWhzCm1hZHJhc3NhL1NNCm1hZHJpZ2FsL1NNCm1hZHdvbWFuL00KbWFkd29tZW4KbWFlbHN0cm9tL1NNCm1hZXN0cm8vU00KbWFmaWEvU00KbWFmaW9zaQptYWZpb3NvL00KbWFnL1NNCm1hZ2F6aW5lL1NNCm1hZ2UvTVMKbWFnZW50YS9NCm1hZ2dvdC9NUwptYWdnb3R5Cm1hZ2kvTQptYWdpYy9TTQptYWdpY2FsL1kKbWFnaWNpYW4vU00KbWFnaWNrZWQKbWFnaWNraW5nCm1hZ2lzdGVyaWFsL1kKbWFnaXN0cmFjeS9NCm1hZ2lzdHJhdGUvU00KbWFnbWEvTQptYWduYW5pbWl0eS9NCm1hZ25hbmltb3VzL1kKbWFnbmF0ZS9TTQptYWduZXNpYS9NCm1hZ25lc2l1bS9NCm1hZ25ldC9NUwptYWduZXRpYwptYWduZXRpY2FsbHkKbWFnbmV0aXNtL00KbWFnbmV0aXRlL00KbWFnbmV0aXphYmxlCm1hZ25ldGl6YXRpb24vQ00KbWFnbmV0aXplL0NHRFMKbWFnbmV0by9TTQptYWduZXRvbWV0ZXIvU00KbWFnbmV0b3NwaGVyZQptYWduaWZpY2F0aW9uL00KbWFnbmlmaWNlbmNlL00KbWFnbmlmaWNlbnQvWQptYWduaWZpZXIvTQptYWduaWZ5L1pHWERSU04KbWFnbmlsb3F1ZW5jZS9NCm1hZ25pbG9xdWVudAptYWduaXR1ZGUvU00KbWFnbm9saWEvTVMKbWFnbnVtL01TCm1hZ3BpZS9NUwptYWd1cy9NCm1haGFyYWphaC9NCm1haGFyYWphaHMKbWFoYXJhbmkvU00KbWFoYXJpc2hpL1NNCm1haGF0bWEvU00KbWFob2dhbnkvU00KbWFob3V0L01TCm1haWQvTU5TWAptYWlkZW4vTVkKbWFpZGVuaGFpci9NCm1haWRlbmhlYWQvU00KbWFpZGVuaG9vZC9NCm1haWRzZXJ2YW50L1NNCm1haWwvSk1EUlNaRwptYWlsYmFnL1NNCm1haWxib21iL0dTRAptYWlsYm94L01TCm1haWxlci9NCm1haWxpbmcvTQptYWlsbG90L1NNCm1haWxtYW4vTQptYWlsbWVuCm1haWxzaG90L1MKbWFpbS9EU0cKbWFpbi9NWVMKbWFpbmZyYW1lL1NNCm1haW5sYW5kL01TCm1haW5saW5lL01HRFMKbWFpbm1hc3QvTVMKbWFpbnNhaWwvTVMKbWFpbnNwcmluZy9NUwptYWluc3RheS9NUwptYWluc3RyZWFtL1NNREcKbWFpbnRhaW4vWkdCRFJTCm1haW50YWluYWJpbGl0eQptYWludGVuYW5jZS9NCm1haW50b3AvU00KbWFpc29uZXR0ZS9NUwptYWl6ZS9TTQptYWplc3RpYwptYWplc3RpY2FsbHkKbWFqZXN0eS9TTQptYWpvbGljYS9NCm1ham9yL1NHTURZCm1ham9yZG9tby9NUwptYWpvcmV0dGUvTVMKbWFqb3JpdGFyaWFuL1NNCm1ham9yaXRhcmlhbmlzbQptYWpvcml0eS9TTQptYWtlJ3MvQQptYWtlL1VBR1MKbWFrZW92ZXIvTVMKbWFrZXIvU00KbWFrZXNoaWZ0L1NNCm1ha2V1cC9NUwptYWtld2VpZ2h0L1MKbWFraW5nL01TCm1ha2luZ3MvTQptYWxhY2hpdGUvTQptYWxhZGp1c3RlZAptYWxhZGp1c3RtZW50L00KbWFsYWRtaW5pc3RyYXRpb24KbWFsYWRyb2l0L1BZCm1hbGFkcm9pdG5lc3MvTQptYWxhZHkvU00KbWFsYWlzZS9NCm1hbGFtdXRlL01TCm1hbGFwcm9waXNtL1NNCm1hbGFyaWEvTQptYWxhcmlhbAptYWxhcmtleS9NCm1hbGF0aGlvbi9NCm1hbGNvbnRlbnQvTVMKbWFsZS9NUFMKbWFsZWRpY3Rpb24vU00KbWFsZWZhY3Rpb24vTQptYWxlZmFjdG9yL1NNCm1hbGVmaWMKbWFsZWZpY2VuY2UvTQptYWxlZmljZW50Cm1hbGVuZXNzL00KbWFsZXZvbGVuY2UvTQptYWxldm9sZW50L1kKbWFsZmVhc2FuY2UvTQptYWxmb3JtYXRpb24vU00KbWFsZm9ybWVkCm1hbGZ1bmN0aW9uL01EU0cKbWFsaWNlL00KbWFsaWNpb3VzL1BZCm1hbGljaW91c25lc3MvTQptYWxpZ24vRFNHCm1hbGlnbmFuY3kvU00KbWFsaWduYW50L1kKbWFsaWduaXR5L00KbWFsaW5nZXIvWkdTRFIKbWFsaW5nZXJlci9NCm1hbGwvTVMKbWFsbGFyZC9TTQptYWxsZWFiaWxpdHkvTQptYWxsZWFibGUKbWFsbGV0L01TCm1hbGxvdy9NUwptYWxub3VyaXNoZWQKbWFsbnV0cml0aW9uL00KbWFsb2NjbHVzaW9uL00KbWFsb2Rvcm91cwptYWxwcmFjdGljZS9TTQptYWx0L01EU0cKbWFsdGVkL01TCm1hbHRvc2UvTQptYWx0cmVhdC9HTERTCm1hbHRyZWF0bWVudC9NCm1hbHR5L1RSCm1hbHdhcmUvTQptYW0vUwptYW1hL01TCm1hbWJhL1NNCm1hbWJvL1NHTUQKbWFtbWEvTQptYW1tYWwvTVMKbWFtbWFsaWFuL01TCm1hbW1hcnkKbWFtbW9ncmFtL01TCm1hbW1vZ3JhcGh5L00KbWFtbW9uL00KbWFtbW90aC9NCm1hbW1vdGhzCm1hbW15L1NNCm1hbidzL0YKbWFuL1VTWQptYW5hY2xlL0RTTUcKbWFuYWdlL1pHRFJTTAptYW5hZ2VhYmlsaXR5L00KbWFuYWdlYWJsZS9VCm1hbmFnZW1lbnQvTVMKbWFuYWdlci9NCm1hbmFnZXJlc3MvUwptYW5hZ2VyaWFsCm1hbmFuYS9NUwptYW5hdGVlL1NNCm1hbmRhbGEvU00KbWFuZGFtdXMvTVMKbWFuZGFyaW4vTVMKbWFuZGF0ZS9EU01HCm1hbmRhdG9yeQptYW5kaWJsZS9NUwptYW5kaWJ1bGFyCm1hbmRvbGluL01TCm1hbmRyYWtlL01TCm1hbmRyZWwvU00KbWFuZHJpbGwvTVMKbWFuZS9NRFMKbWFuZWdlL00KbWFuZXV2ZXIvTURHU0JKCm1hbmV1dmVyYWJpbGl0eS9NCm1hbmZ1bC9ZCm1hbmdhL00KbWFuZ2FuZXNlL00KbWFuZ2UvRFJNWgptYW5nZXIvTQptYW5nZXRvdXQvUwptYW5naW5lc3MvTQptYW5nbGUvTVpHRFJTCm1hbmdvL00KbWFuZ29lcwptYW5ncm92ZS9NUwptYW5neS9UUlAKbWFuaGFuZGxlL0dEUwptYW5ob2xlL1NNCm1hbmhvb2QvTQptYW5odW50L1NNCm1hbmlhL1NNCm1hbmlhYy9NUwptYW5pYWNhbC9ZCm1hbmljL1NNCm1hbmljYWxseQptYW5pY3VyZS9NR0RTCm1hbmljdXJpc3QvTVMKbWFuaWZlc3QvTURZU0cKbWFuaWZlc3RhdGlvbi9TTQptYW5pZmVzdG8vU00KbWFuaWZvbGQvR01EUwptYW5pa2luL1NNCm1hbmlsYS9NCm1hbmlvYy9NUwptYW5pcHVsYWJsZQptYW5pcHVsYXRlL1hHTlZEUwptYW5pcHVsYXRpb24vTQptYW5pcHVsYXRpdmUvWQptYW5pcHVsYXRvci9NUwptYW5raW5kL00KbWFua3kKbWFubGlrZQptYW5saW5lc3MvTQptYW5seS9VVFIKbWFubmEvTQptYW5uZWQvVQptYW5uZXF1aW4vU00KbWFubmVyL01EWVMKbWFubmVyaXNtL1NNCm1hbm5lcmx5L1UKbWFubmluZy9VCm1hbm5pc2gvWVAKbWFubmlzaG5lc3MvTQptYW5vbWV0ZXIvU00KbWFub3IvU00KbWFub3JpYWwKbWFucG93ZXIvTQptYW5xdWUKbWFuc2FyZC9NUwptYW5zZS9TWE1OCm1hbnNlcnZhbnQvTQptYW5zaW9uL00KbWFuc2xhdWdodGVyL00KbWFudGEvU00KbWFudGVsL01TCm1hbnRlbHBpZWNlL1NNCm1hbnRlbHNoZWxmCm1hbnRlbHNoZWx2ZXMKbWFudGVzCm1hbnRpbGxhL1NNCm1hbnRpcy9NUwptYW50aXNzYS9TTQptYW50bGUncwptYW50bGUvRUdEUwptYW50cmEvTVMKbWFudWFsL01ZUwptYW51ZmFjdHVyZS9EUlNNWkcKbWFudWZhY3R1cmVyL00KbWFudWZhY3R1cmluZy9NCm1hbnVtaXNzaW9uL1NNCm1hbnVtaXQvUwptYW51bWl0dGVkCm1hbnVtaXR0aW5nCm1hbnVyZS9NR0RTCm1hbnVzY3JpcHQvTVMKbWFueS9NCm1hcCdzCm1hcC9BUwptYXBsZS9TTQptYXBtYWtlci9TTQptYXBwZWQvQQptYXBwZXIvTVMKbWFwcGluZy9TCm1hci9TCm1hcmFib3UvTVMKbWFyYWJvdXQvU00KbWFyYWNhL01TCm1hcmFzY2hpbm8vTVMKbWFyYXRob24vU01SWgptYXJhdGhvbmVyL00KbWFyYXVkL1pHRFJTCm1hcmF1ZGVyL00KbWFyYmxlL01HRFMKbWFyYmxlaXplL0dEUwptYXJibGluZy9NCm1hcmNoL1pHTURSUwptYXJjaGVyL00KbWFyY2hpb25lc3MvTVMKbWFyZS9NUwptYXJnYXJpbmUvTQptYXJnYXJpdGEvTVMKbWFyZ2UKbWFyZ2luL01TCm1hcmdpbmFsL1lTCm1hcmdpbmFsaWEvTQptYXJnaW5hbGl6YXRpb24vTQptYXJnaW5hbGl6ZS9HRFMKbWFyaWEvTQptYXJpYWNoaS9NUwptYXJpZ29sZC9NUwptYXJpanVhbmEvTQptYXJpbWJhL1NNCm1hcmluYS9NUwptYXJpbmFkZS9EU01HCm1hcmluYXJhL00KbWFyaW5hdGUvRFNHTgptYXJpbmF0aW9uL00KbWFyaW5lL01aUlMKbWFyaW5lci9NCm1hcmlvbmV0dGUvTVMKbWFyaXRhbC9ZCm1hcml0aW1lCm1hcmpvcmFtL00KbWFyay9BTURTRwptYXJrZG93bi9TTQptYXJrZWQvVQptYXJrZWRseQptYXJrZXIvTVMKbWFya2V0L01EUlpHQlMKbWFya2V0YWJpbGl0eS9NCm1hcmtldGFibGUvVQptYXJrZXRlZXIvU00KbWFya2V0ZXIvTQptYXJrZXRpbmcvTQptYXJrZXRwbGFjZS9TTQptYXJraW5nL1NNCm1hcmtrYS9NCm1hcmtrYWEKbWFya3NtYW4vTQptYXJrc21hbnNoaXAvTQptYXJrc21lbgptYXJrdXAvTVMKbWFybC9NCm1hcmxpbi9NUwptYXJsaW5lc3Bpa2UvU00KbWFybWFsYWRlL00KbWFybW9yZWFsCm1hcm1vc2V0L1NNCm1hcm1vdC9NUwptYXJvb24vTURHUwptYXJxdWUvTVMKbWFycXVlZS9TTQptYXJxdWVzcy9NUwptYXJxdWV0cnkvTQptYXJxdWlzL01TCm1hcnF1aXNlL00KbWFycXVpc2V0dGUvTQptYXJyZWQvVQptYXJyaWFnZS9BU00KbWFycmlhZ2VhYmlsaXR5L00KbWFycmlhZ2VhYmxlCm1hcnJpZWQvU00KbWFycmluZwptYXJyb3cvTVMKbWFycnkvQUdEUwptYXJzaC9NUwptYXJzaGFsL1NNREcKbWFyc2hsYW5kL1NNCm1hcnNobWFsbG93L1NNCm1hcnNoeS9SVAptYXJzdXBpYWwvTVMKbWFydC9NTlNYCm1hcnRlbi9NCm1hcnRlbnNpdGUKbWFydGlhbC9ZCm1hcnRpYW4vUwptYXJ0aW4vTVMKbWFydGluZXQvTVMKbWFydGluZ2FsZS9NUwptYXJ0aW5pL1NNCm1hcnR5ci9NREdTCm1hcnR5cmRvbS9NCm1hcnZlbC9NREdTCm1hcnZlbG91cy9ZCm1hcnppcGFuL00KbWFzYwptYXNjYXJhL0dNRFMKbWFzY290L01TCm1hc2N1bGluZS9TTQptYXNjdWxpbml0eS9NCm1hc2VyL1NNCm1hc2gvTURSU1pHCm1hc2hlci9NCm1hc2h1cC9NUwptYXNrJ3MKbWFzay9VRFNHCm1hc2tlci9NUwptYXNvY2hpc20vTQptYXNvY2hpc3QvU00KbWFzb2NoaXN0aWMKbWFzb2NoaXN0aWNhbGx5Cm1hc29uL1NNCm1hc29uaWMKbWFzb25yeS9NCm1hc3F1ZS9NUwptYXNxdWVyYWRlL0RSU01aRwptYXNxdWVyYWRlci9NCm1hc3MvTURTR1YKbWFzc2FjcmUvTUdEUwptYXNzYWdlL0RTTUcKbWFzc2V1ci9TTQptYXNzZXVzZS9NUwptYXNzaWYvTVMKbWFzc2l2ZS9QWQptYXNzaXZlbmVzcy9NCm1hc3QvTURTCm1hc3RlY3RvbXkvU00KbWFzdGVyJ3MKbWFzdGVyL0FER1MKbWFzdGVyY2xhc3MvUwptYXN0ZXJmdWwvWQptYXN0ZXJseQptYXN0ZXJtaW5kL1NHTUQKbWFzdGVycGllY2UvTVMKbWFzdGVyc3Ryb2tlL1NNCm1hc3RlcndvcmsvTVMKbWFzdGVyeS9NCm1hc3RoZWFkL01TCm1hc3RpYy9NCm1hc3RpY2F0ZS9HTkRTCm1hc3RpY2F0aW9uL00KbWFzdGlmZi9TTQptYXN0aXRpcwptYXN0b2Rvbi9TTQptYXN0b2lkL1NNCm1hc3R1cmJhdGUvR05EUwptYXN0dXJiYXRpb24vTQptYXN0dXJiYXRvcnkKbWF0L1NaR01EUgptYXRhZG9yL1NNCm1hdGNoL0FNUwptYXRjaGJvb2svU00KbWF0Y2hib3gvTVMKbWF0Y2hlZC9VCm1hdGNoaW5nCm1hdGNobGVzcwptYXRjaGxvY2svU00KbWF0Y2htYWtlci9NUwptYXRjaG1ha2luZy9NCm1hdGNoc3RpY2svTVMKbWF0Y2h3b29kL00KbWF0ZS9NUwptYXRlcmlhbC9TTVkKbWF0ZXJpYWxpc20vTQptYXRlcmlhbGlzdC9TTQptYXRlcmlhbGlzdGljCm1hdGVyaWFsaXN0aWNhbGx5Cm1hdGVyaWFsaXphdGlvbi9NCm1hdGVyaWFsaXplL0RTRwptYXRlcmllbC9NCm1hdGVybmFsL1kKbWF0ZXJuaXR5L00KbWF0ZXkvUwptYXRoL00KbWF0aGVtYXRpY2FsL1kKbWF0aGVtYXRpY2lhbi9TTQptYXRoZW1hdGljcy9NCm1hdGhzCm1hdGluZWUvU00KbWF0aW5nL00KbWF0aW5zL00KbWF0cmlhcmNoL00KbWF0cmlhcmNoYWwKbWF0cmlhcmNocwptYXRyaWFyY2h5L1NNCm1hdHJpY2VzCm1hdHJpY2lkYWwKbWF0cmljaWRlL01TCm1hdHJpY3VsYXRlL0RTR04KbWF0cmljdWxhdGlvbi9NCm1hdHJpbW9uaWFsCm1hdHJpbW9ueS9NCm1hdHJpeC9NCm1hdHJvbi9NWVMKbWF0dGUvRFJTTVpHCm1hdHRlci9NREcKbWF0dGluZy9NCm1hdHRvY2svU00KbWF0dHJlc3MvTVMKbWF0dXJhdGUvR05EUwptYXR1cmF0aW9uL00KbWF0dXJlL1lUR0RSUwptYXR1cml0eS9TTQptYXR6by9TTUgKbWF0em9oL00KbWF0em9ocwptYXR6b3QKbWF1ZGxpbgptYXVsL01EUlNaRwptYXVsZXIvTQptYXVuZGVyL1NERwptYXVzb2xldW0vU00KbWF1dmUvTQptYXZlbi9TTQptYXZlcmljay9TTQptYXcvU00KbWF3a2lzaC9QWQptYXdraXNobmVzcy9NCm1heC9HTURTCm1heGkvTVMKbWF4aWxsYS9NCm1heGlsbGFlCm1heGlsbGFyeQptYXhpbS9TTQptYXhpbWFsL1kKbWF4aW1pemF0aW9uL00KbWF4aW1pemUvR0RTCm1heGltdW0vU00KbWF5L00KbWF5YmUvU00KbWF5ZGF5L01TCm1heWZsb3dlci9NUwptYXlmbHkvU00KbWF5aGVtL00KbWF5bid0Cm1heW8vTQptYXlvbm5haXNlL00KbWF5b3IvU00KbWF5b3JhbAptYXlvcmFsdHkvTQptYXlvcmVzcy9NUwptYXlwb2xlL1NNCm1heXN0Cm1hemUvTVMKbWF6dXJrYS9NUwptZHNlCm1lL0RTSAptZWFkL00KbWVhZG93L01TCm1lYWRvd2xhcmsvTVMKbWVhZ2VyL1BZCm1lYWdlcm5lc3MvTQptZWFsL01TCm1lYWxpbmVzcy9NCm1lYWx0aW1lL1NNCm1lYWx5L1RQUgptZWFseWJ1Zy9TTQptZWFseW1vdXRoZWQKbWVhbi9NUllKUFNURwptZWFuZGVyL1NNREpHCm1lYW5kZXJpbmdzL00KbWVhbmllL00KbWVhbmluZy9NCm1lYW5pbmdmdWwvUFkKbWVhbmluZ2Z1bG5lc3MvTQptZWFuaW5nbGVzcy9ZUAptZWFuaW5nbGVzc25lc3MvTQptZWFubmVzcy9NCm1lYW50L1UKbWVhbnRpbWUvTQptZWFud2hpbGUvTQptZWFueS9TTQptZWFzCm1lYXNsZXMvTQptZWFzbHkvUlQKbWVhc3VyYWJsZQptZWFzdXJhYmx5Cm1lYXN1cmUncwptZWFzdXJlL0FEU0cKbWVhc3VyZWQvVQptZWFzdXJlbGVzcwptZWFzdXJlbWVudC9NUwptZWF0L01TCm1lYXRiYWxsL01TCm1lYXRoZWFkL01TCm1lYXRpbmVzcy9NCm1lYXRsZXNzCm1lYXRsb2FmL00KbWVhdGxvYXZlcwptZWF0cGFja2luZy9NCm1lYXR5L1RQUgptZWNjYS9TTQptZWNoYW5pYy9NUwptZWNoYW5pY2FsL1kKbWVjaGFuaWNzL00KbWVjaGFuaXNtL1NNCm1lY2hhbmlzdGljCm1lY2hhbmlzdGljYWxseQptZWNoYW5pemF0aW9uL00KbWVjaGFuaXplL0RTRwptZWRhbC9TTQptZWRhbGlzdC9NUwptZWRhbGxpb24vU00KbWVkZGxlL1pHRFJTCm1lZGRsZXIvTQptZWRkbGVzb21lCm1lZGlhL1NNCm1lZGlhbC9BWQptZWRpYW4vTVMKbWVkaWF0ZS9EU0dOCm1lZGlhdGVkL1UKbWVkaWF0aW9uL0FNCm1lZGlhdG9yL01TCm1lZGljL1NNCm1lZGljYWlkL00KbWVkaWNhbC9TTVkKbWVkaWNhbWVudC9NCm1lZGljYXJlL00KbWVkaWNhdGUvR05YRFMKbWVkaWNhdGlvbi9NCm1lZGljaW5hbC9ZCm1lZGljaW5lL01TCm1lZGljby9NUwptZWRpZXZhbAptZWRpZXZhbGlzdC9NUwptZWRpb2NyZQptZWRpb2NyaXR5L1NNCm1lZGl0YXRlL0RTR05WWAptZWRpdGF0aW9uL00KbWVkaXRhdGl2ZS9ZCm1lZGl1bS9NUwptZWRsZXkvTVMKbWVkdWxsYS9TTQptZWR1c2EKbWVkdXNhZQptZWVkL00KbWVlay9SWVBUCm1lZWtuZXNzL00KbWVlcnNjaGF1bS9TTQptZWV0L01KU0cKbWVldGluZy9NCm1lZXRpbmdob3VzZS9TTQptZWV0dXAKbWVnL1MKbWVnYQptZWdhYml0L1NNCm1lZ2FidWNrcy9NCm1lZ2FieXRlL01TCm1lZ2FjaHVyY2gvTVMKbWVnYWN5Y2xlL1NNCm1lZ2FkZWF0aC9NCm1lZ2FkZWF0aHMKbWVnYWhlcnR6L00KbWVnYWxpdGgvTQptZWdhbGl0aGljCm1lZ2FsaXRocwptZWdhbG9tYW5pYS9NCm1lZ2Fsb21hbmlhYy9TTQptZWdhbG9wb2xpcy9NUwptZWdhcGhvbmUvRFNNRwptZWdhcGl4ZWwvU00KbWVnYXN0YXIvUwptZWdhdG9uL1NNCm1lZ2F3YXR0L01TCm1laAptZWlvc2lzL00KbWVpb3RpYwptZWxhbWluZS9NCm1lbGFuY2hvbGlhL00KbWVsYW5jaG9saWMvUwptZWxhbmNob2x5L00KbWVsYW5nZS9NUwptZWxhbmluL00KbWVsYW5vbWEvU00KbWVsZC9NRFNHCm1lbGVlL1NNCm1lbGlvcmF0ZS9HTlZEUwptZWxpb3JhdGlvbi9NCm1lbGxpZmx1b3VzL1BZCm1lbGxpZmx1b3VzbmVzcy9NCm1lbGxvdy9QVEdEUllTCm1lbGxvd25lc3MvTQptZWxvZGljCm1lbG9kaWNhbGx5Cm1lbG9kaW91cy9ZUAptZWxvZGlvdXNuZXNzL00KbWVsb2RyYW1hL01TCm1lbG9kcmFtYXRpYy9TCm1lbG9kcmFtYXRpY2FsbHkKbWVsb2RyYW1hdGljcy9NCm1lbG9keS9TTQptZWxvbi9TTQptZWx0J3MKbWVsdC9BRFNHCm1lbHRkb3duL1NNCm1lbWJlcidzCm1lbWJlci9FQVMKbWVtYmVyc2hpcC9TTQptZW1icmFuZS9TTQptZW1icmFub3VzCm1lbWUvTVMKbWVtZW50by9NUwptZW1vL01TCm1lbW9pci9NUwptZW1vcmFiaWxpYS9NCm1lbW9yYWJpbGl0eS9NCm1lbW9yYWJsZS9VCm1lbW9yYWJseQptZW1vcmFuZHVtL01TCm1lbW9yaWFsL1NNCm1lbW9yaWFsaXplL0RTRwptZW1vcml6YXRpb24vTQptZW1vcml6ZS9EU0cKbWVtb3J5L1NNCm1lbXNhaGliL1MKbWVuL00KbWVuYWNlL01HRFMKbWVuYWNpbmcvWQptZW5hZ2UvTVMKbWVuYWdlcmllL01TCm1lbmQvTURSU1pHCm1lbmRhY2lvdXMvWQptZW5kYWNpdHkvTQptZW5kZWxldml1bS9NCm1lbmRlci9NCm1lbmRpY2FuY3kvTQptZW5kaWNhbnQvU00KbWVuZGluZy9NCm1lbmZvbGsvTVMKbWVuZm9sa3MvTQptZW5oYWRlbi9NCm1lbmlhbC9NWVMKbWVuaW5nZWFsCm1lbmluZ2VzCm1lbmluZ2l0aXMvTQptZW5pbngvTQptZW5pc2NpCm1lbmlzY3VzL00KbWVub3BhdXNhbAptZW5vcGF1c2UvTQptZW5vcmFoL00KbWVub3JhaHMKbWVuc2NoL01TCm1lbnNlcnZhbnRzCm1lbnNlcy9NCm1lbnN0cnVhbAptZW5zdHJ1YXRlL0dORFMKbWVuc3RydWF0aW9uL00KbWVuc3VyYWJsZQptZW5zdXJhdGlvbi9NCm1lbnN3ZWFyL00KbWVudGFsL1kKbWVudGFsaXN0L1NNCm1lbnRhbGl0eS9TTQptZW50aG9sL00KbWVudGhvbGF0ZWQKbWVudGlvbi9HU01ECm1lbnRpb25lZC9VCm1lbnRvci9NRFNHCm1lbnUvTVMKbWVvdy9NRFNHCm1lcmNhbnRpbGUKbWVyY2FudGlsaXNtL00KbWVyY2VuYXJ5L1NNCm1lcmNlci9NUwptZXJjZXJpemUvR0RTCm1lcmNoYW5kaXNlL01aR0RSUwptZXJjaGFuZGlzZXIvTQptZXJjaGFuZGlzaW5nL00KbWVyY2hhbnQvTUJTCm1lcmNoYW50bWFuL00KbWVyY2hhbnRtZW4KbWVyY2lmdWwvVVkKbWVyY2lsZXNzL1BZCm1lcmNpbGVzc25lc3MvTQptZXJjdXJpYWwvWQptZXJjdXJpYwptZXJjdXJ5L00KbWVyY3kvU00KbWVyZS9NWVRTCm1lcmV0cmljaW91cy9ZUAptZXJldHJpY2lvdXNuZXNzL00KbWVyZ2Fuc2VyL01TCm1lcmdlL0RSU1pHCm1lcmdlci9NCm1lcmlkaWFuL01TCm1lcmluZ3VlL01TCm1lcmluby9NUwptZXJpdC9DU00KbWVyaXRlZC9VCm1lcml0aW5nCm1lcml0b2NyYWN5L1NNCm1lcml0b2NyYXRpYwptZXJpdG9yaW91cy9QWQptZXJpdG9yaW91c25lc3MvTQptZXJtYWlkL1NNCm1lcm1hbi9NCm1lcm1lbgptZXJyaWx5Cm1lcnJpbWVudC9NCm1lcnJpbmVzcy9NCm1lcnJ5L1RSUAptZXJyeW1ha2VyL01TCm1lcnJ5bWFraW5nL00KbWVzYS9NUwptZXNjYWwvTVMKbWVzY2FsaW4KbWVzY2FsaW5lL00KbWVzZGFtZXMKbWVzZGVtb2lzZWxsZXMKbWVzaC9NRFNHCm1lc21lcmljCm1lc21lcmlzbS9NCm1lc21lcml6ZS9aR0RSUwptZXNtZXJpemVyL00KbWVzb21vcnBoL00KbWVzb21vcnBocwptZXNvbi9TTQptZXNvc3BoZXJlL1NNCm1lc3F1aXRlL1NNCm1lc3MvTURTRwptZXNzYWdlL01HRFMKbWVzc2VpZ25ldXJzCm1lc3Nlbmdlci9TTQptZXNzaWFoL00KbWVzc2lhaHMKbWVzc2lhbmljCm1lc3NpZXVycwptZXNzaWx5Cm1lc3NpbmVzcy9NCm1lc3NtYXRlL1NNCm1lc3N5L1BUUgptZXN0aXpvL01TCm1ldAptZXRhCm1ldGFib2xpYwptZXRhYm9saWNhbGx5Cm1ldGFib2xpc20vU00KbWV0YWJvbGl0ZS9TTQptZXRhYm9saXplL0RTRwptZXRhY2FycGFsL1NNCm1ldGFjYXJwaQptZXRhY2FycHVzL00KbWV0YWRhdGEKbWV0YWwvU01ECm1ldGFsYW5ndWFnZS9NUwptZXRhbGxpYwptZXRhbGx1cmdpYwptZXRhbGx1cmdpY2FsCm1ldGFsbHVyZ2lzdC9NUwptZXRhbGx1cmd5L00KbWV0YWx3b3JrL01SWkcKbWV0YWx3b3JrZXIvTQptZXRhbHdvcmtpbmcvTQptZXRhbW9ycGhpYwptZXRhbW9ycGhpc20vTQptZXRhbW9ycGhvc2UvR0RTCm1ldGFtb3JwaG9zaXMvTQptZXRhcGhvci9NUwptZXRhcGhvcmljCm1ldGFwaG9yaWNhbC9ZCm1ldGFwaHlzaWNhbC9ZCm1ldGFwaHlzaWNzL00KbWV0YXN0YXNlcwptZXRhc3Rhc2lzL00KbWV0YXN0YXNpemUvRFNHCm1ldGFzdGF0aWMKbWV0YXRhcnNhbC9NUwptZXRhdGFyc2kKbWV0YXRhcnN1cy9NCm1ldGF0aGVzZXMKbWV0YXRoZXNpcy9NCm1ldGUvTVpHRFJTCm1ldGVtcHN5Y2hvc2VzCm1ldGVtcHN5Y2hvc2lzL00KbWV0ZW9yL01TCm1ldGVvcmljCm1ldGVvcmljYWxseQptZXRlb3JpdGUvU00KbWV0ZW9yb2lkL1NNCm1ldGVvcm9sb2dpYwptZXRlb3JvbG9naWNhbAptZXRlb3JvbG9naXN0L1NNCm1ldGVvcm9sb2d5L00KbWV0ZXIvR01ECm1ldGhhZG9uZS9NCm1ldGhhbXBoZXRhbWluZS9NCm1ldGhhbmUvTQptZXRoYW5vbC9NCm1ldGhpbmtzCm1ldGhvZC9NUwptZXRob2RpY2FsL1lQCm1ldGhvZGljYWxuZXNzL00KbWV0aG9kb2xvZ2ljYWwvWQptZXRob2RvbG9neS9TTQptZXRob3RyZXhhdGUKbWV0aG91Z2h0Cm1ldGhzCm1ldGh5bC9NCm1ldGljdWxvdXMvWVAKbWV0aWN1bG91c25lc3MvTQptZXRpZXIvTVMKbWV0cmljL1MKbWV0cmljYWwvWQptZXRyaWNhdGUvR05EUwptZXRyaWNhdGlvbi9NCm1ldHJpY2l6ZS9HRFMKbWV0cm8vU00KbWV0cm9ub21lL01TCm1ldHJvcG9saXMvTVMKbWV0cm9wb2xpdGFuCm1ldHRsZS9NCm1ldHRsZXNvbWUKbWV3L1NHTUQKbWV3bC9EU0cKbWV3cy9NCm1lenphbmluZS9NUwptZXp6by9TTQptZmcKbWZyL1MKbWcKbWdyCm1pL01OWAptaWFzbWEvTVMKbWljL1MKbWljYS9NCm1pY2UKbWljay9TCm1pY2tleS9NUwptaWNyby9TTQptaWNyb2FnZ3Jlc3Npb24vU00KbWljcm9iZS9NUwptaWNyb2JpYWwKbWljcm9iaW9sb2dpY2FsCm1pY3JvYmlvbG9naXN0L01TCm1pY3JvYmlvbG9neS9NCm1pY3JvYnJld2VyeS9TTQptaWNyb2NoaXAvTVMKbWljcm9jaXJjdWl0L1NNCm1pY3JvY29kZQptaWNyb2NvbXB1dGVyL01TCm1pY3JvY29zbS9NUwptaWNyb2Nvc21pYwptaWNyb2RvdC9TTQptaWNyb2Vjb25vbWljcy9NCm1pY3JvZWxlY3Ryb25pYy9TCm1pY3JvZWxlY3Ryb25pY3MvTQptaWNyb2ZpYmVyL01TCm1pY3JvZmljaGUvTQptaWNyb2ZpbG0vR01EUwptaWNyb2Zsb3BwaWVzCm1pY3JvZ3Jvb3ZlL1NNCm1pY3JvbGlnaHQvTVMKbWljcm9sb2FuL01TCm1pY3JvbWFuYWdlL0dEU0wKbWljcm9tYW5hZ2VtZW50L00KbWljcm9tZXRlb3JpdGUvU00KbWljcm9tZXRlci9NUwptaWNyb24vTVMKbWljcm9vcmdhbmlzbS9NUwptaWNyb3Bob25lL1NNCm1pY3JvcHJvY2Vzc29yL01TCm1pY3Jvc2NvcGUvU00KbWljcm9zY29waWMKbWljcm9zY29waWNhbC9ZCm1pY3Jvc2NvcHkvTQptaWNyb3NlY29uZC9NUwptaWNyb3N1cmdlcnkvTQptaWNyb3dhdmUvRFNNR0IKbWljcm93YXZlYWJsZQptaWQKbWlkYWlyL00KbWlkZGF5L00KbWlkZGVuL01TCm1pZGRsZS9NR1MKbWlkZGxlYnJvdy9TTQptaWRkbGVtYW4vTQptaWRkbGVtZW4KbWlkZGxlbW9zdAptaWRkbGV3ZWlnaHQvTVMKbWlkZHkvU00KbWlkZmllbGQvUloKbWlkZ2UvU00KbWlkZ2V0L01TCm1pZGkvTVMKbWlkbGFuZC9NUwptaWRsaWZlL00KbWlkbW9zdAptaWRuaWdodC9NCm1pZHBvaW50L01TCm1pZHJpYi9NUwptaWRyaWZmL01TCm1pZHNlY3Rpb24vTVMKbWlkc2hpcG1hbi9NCm1pZHNoaXBtZW4KbWlkc2hpcHMKbWlkc2l6ZQptaWRzdC9NCm1pZHN0cmVhbS9NCm1pZHN1bW1lci9NCm1pZHRlcm0vTVMKbWlkdG93bi9NCm1pZHdheS9NUwptaWR3ZWVrL01TCm1pZHdpZmUvTUdEUwptaWR3aWZlcnkvU00KbWlkd2ludGVyL00KbWlkd2l2ZXMKbWlkeWVhci9NUwptaWVuL00KbWlmZi9EU0cKbWlnaHQndmUKbWlnaHQvTQptaWdodGlseQptaWdodGluZXNzL00KbWlnaHRuJ3QKbWlnaHR5L1RSUAptaWdub25ldHRlL1NNCm1pZ3JhaW5lL01TCm1pZ3JhbnQvTVMKbWlncmF0ZS9BR0RTCm1pZ3JhdGlvbi9TTQptaWdyYXRvcnkKbWlrYWRvL01TCm1pa2UvTUdEUwptaWwvU1pNUgptaWxhZHkvU00KbWlsY2gKbWlsZC9NUllUUAptaWxkZXcvU01ERwptaWxkbmVzcy9NCm1pbGUvTVMKbWlsZWFnZS9TTQptaWxlcG9zdC9NUwptaWxlci9NCm1pbGVzdG9uZS9NUwptaWxmL01TCm1pbGlldS9TTQptaWxpdGFuY3kvTQptaWxpdGFudC9NWVMKbWlsaXRhcmlseQptaWxpdGFyaXNtL00KbWlsaXRhcmlzdC9TTQptaWxpdGFyaXN0aWMKbWlsaXRhcml6YXRpb24vQ00KbWlsaXRhcml6ZS9DRFNHCm1pbGl0YXJ5L00KbWlsaXRhdGUvR0RTCm1pbGl0aWEvU00KbWlsaXRpYW1hbi9NCm1pbGl0aWFtZW4KbWlsay9NRFJTWkcKbWlsa2VyL00KbWlsa2luZXNzL00KbWlsa21haWQvTVMKbWlsa21hbi9NCm1pbGttZW4KbWlsa3NoYWtlL1NNCm1pbGtzb3AvTVMKbWlsa3dlZWQvU00KbWlsa3kvUlRQCm1pbGwvTURSU1pHSgptaWxsYWdlL00KbWlsbGVubmlhCm1pbGxlbm5pYWwvTQptaWxsZW5uaXVtL01TCm1pbGxlci9NCm1pbGxldC9NCm1pbGxpYXJkL01TCm1pbGxpYmFyL01TCm1pbGxpZ3JhbS9NUwptaWxsaWxpdGVyL01TCm1pbGxpbWV0ZXIvTVMKbWlsbGluZXIvTVMKbWlsbGluZXJ5L00KbWlsbGluZy9NCm1pbGxpb24vSFNNCm1pbGxpb25haXJlL1NNCm1pbGxpb25haXJlc3MvUwptaWxsaW9udGgvTQptaWxsaW9udGhzCm1pbGxpcGVkZS9TTQptaWxsaXNlY29uZC9TTQptaWxscG9uZC9TTQptaWxscmFjZS9TTQptaWxsc3RvbmUvU00KbWlsbHN0cmVhbS9NUwptaWxsd3JpZ2h0L1NNCm1pbG9tZXRlci9TCm1pbHF1ZXRvYXN0L1NNCm1pbHQvTURTRwptaW1lL01HRFMKbWltZW9ncmFwaC9HTUQKbWltZW9ncmFwaHMKbWltZXRpYwptaW1pYy9TTQptaW1pY2tlZAptaW1pY2tlci9TTQptaW1pY2tpbmcKbWltaWNyeS9TTQptaW1vc2EvU00KbWluCm1pbmFyZXQvTVMKbWluYXRvcnkKbWluY2UvRFJTTVpHCm1pbmNlbWVhdC9NCm1pbmNlci9NCm1pbmQncwptaW5kL0FEUlNaRwptaW5kYm9nZ2xpbmdseQptaW5kZWQvUAptaW5kZnVsL1lQCm1pbmRmdWxuZXNzL00KbWluZGxlc3MvWVAKbWluZGxlc3NuZXNzL00KbWluZHNldC9NUwptaW5lL01aR05EUlNYCm1pbmVmaWVsZC9TTQptaW5lci9NCm1pbmVyYWwvTVMKbWluZXJhbG9naWNhbAptaW5lcmFsb2dpc3QvTVMKbWluZXJhbG9neS9NCm1pbmVzdHJvbmUvTQptaW5lc3dlZXBlci9TTQptaW5nbGUvRFNHCm1pbmd5Cm1pbmkvTVMKbWluaWF0dXJlL01TCm1pbmlhdHVyaXN0L01TCm1pbmlhdHVyaXphdGlvbi9NCm1pbmlhdHVyaXplL0dEUwptaW5pYmFyL1MKbWluaWJpa2UvU00KbWluaWJ1cy9NUwptaW5pY2FiL1MKbWluaWNhbS9NUwptaW5pY29tcHV0ZXIvU00KbWluaWZsb3BwaWVzCm1pbmltL1NNCm1pbmltYWwvWQptaW5pbWFsaXNtL00KbWluaW1hbGlzdC9NUwptaW5pbWl6YXRpb24vTQptaW5pbWl6ZS9EU0cKbWluaW11bS9NUwptaW5pbmcvTQptaW5pb24vTQptaW5pc2VyaWVzL00KbWluaXNraXJ0L01TCm1pbmlzdGVyL1NHTUQKbWluaXN0ZXJpYWwKbWluaXN0cmFudC9NUwptaW5pc3RyYXRpb24vTVMKbWluaXN0cnkvU00KbWluaXZhbi9NUwptaW5rL01TCm1pbm5lc2luZ2VyL01TCm1pbm5vdy9TTQptaW5vci9TTURHCm1pbm9yaXR5L1NNCm1pbm94aWRpbC9NCm1pbnN0ZXIvTVMKbWluc3RyZWwvU00KbWluc3RyZWxzeS9NCm1pbnQvTURSU1pHCm1pbnRhZ2UvTQptaW50ZXIvTQptaW50eS9SVAptaW51ZW5kL01TCm1pbnVldC9TTQptaW51cy9NUwptaW51c2N1bGUvTVMKbWludXRlL1BEUlNNWVRHCm1pbnV0ZW1hbi9NCm1pbnV0ZW1lbgptaW51dGVuZXNzL00KbWludXRpYS9NCm1pbnV0aWFlCm1pbngvTVMKbWlyYWNsZS9NUwptaXJhY3Vsb3VzL1kKbWlyYWdlL1NNCm1pcmUvTUdEUwptaXJyb3IvR1NNRAptaXJ0aC9NCm1pcnRoZnVsL1BZCm1pcnRoZnVsbmVzcy9NCm1pcnRobGVzcy9ZCm1pcnkvUlQKbWlzYWRkcmVzcy9EU0cKbWlzYWR2ZW50dXJlL01TCm1pc2FsaWduZWQKbWlzYWxpZ25tZW50L00KbWlzYWxsaWFuY2UvTVMKbWlzYW50aHJvcGUvU00KbWlzYW50aHJvcGljCm1pc2FudGhyb3BpY2FsbHkKbWlzYW50aHJvcGlzdC9NUwptaXNhbnRocm9weS9NCm1pc2FwcGxpY2F0aW9uL00KbWlzYXBwbHkvRFNHTlgKbWlzYXBwcmVoZW5kL0dTRAptaXNhcHByZWhlbnNpb24vTVMKbWlzYXBwcm9wcmlhdGUvWERTR04KbWlzYXBwcm9wcmlhdGlvbi9NCm1pc2JlZ290dGVuCm1pc2JlaGF2ZS9HRFMKbWlzYmVoYXZpb3IvTQptaXNjCm1pc2NhbGN1bGF0ZS9EU1hHTgptaXNjYWxjdWxhdGlvbi9NCm1pc2NhbGwvRFNHCm1pc2NhcnJpYWdlL01TCm1pc2NhcnJ5L0dEUwptaXNjYXN0L1NHCm1pc2NlZ2VuYXRpb24vTQptaXNjZWxsYW5lb3VzL1kKbWlzY2VsbGFueS9TTQptaXNjaGFuY2UvU00KbWlzY2hpZWYvTQptaXNjaGlldm91cy9ZUAptaXNjaGlldm91c25lc3MvTQptaXNjaWJpbGl0eS9NCm1pc2NpYmxlCm1pc2NvbW11bmljYXRpb24vUwptaXNjb25jZWl2ZS9HRFMKbWlzY29uY2VwdGlvbi9TTQptaXNjb25kdWN0L01ER1MKbWlzY29uc3RydWN0aW9uL01TCm1pc2NvbnN0cnVlL0dEUwptaXNjb3VudC9NRFNHCm1pc2NyZWFudC9TTQptaXNjdWUvRFNNRwptaXNkZWFsL0dNUwptaXNkZWFsdAptaXNkZWVkL01TCm1pc2RlbWVhbm9yL01TCm1pc2RpYWdub3NlL0dEUwptaXNkaWFnbm9zaXMvTQptaXNkaWQKbWlzZGlyZWN0L1NERwptaXNkaXJlY3Rpb24vTQptaXNkby9KRwptaXNkb2VzCm1pc2RvaW5nL00KbWlzZG9uZQptaXNlci9TQk1ZCm1pc2VyYWJsZW5lc3MvTQptaXNlcmFibHkKbWlzZXJsaW5lc3MvTQptaXNlcnkvU00KbWlzZmVhc2FuY2UvTQptaXNmZWF0dXJlL1MKbWlzZmlsZS9HRFMKbWlzZmlyZS9NR0RTCm1pc2ZpdC9TTQptaXNmaXR0ZWQKbWlzZml0dGluZwptaXNmb3J0dW5lL1NNCm1pc2dpdmluZy9NUwptaXNnb3Zlcm4vU0RHTAptaXNnb3Zlcm5tZW50L00KbWlzZ3VpZGFuY2UvTQptaXNndWlkZS9EU0cKbWlzZ3VpZGVkL1kKbWlzaGFuZGxlL0RTRwptaXNoYXAvU00KbWlzaGVhci9HUwptaXNoZWFyZAptaXNoaXQvUwptaXNoaXR0aW5nCm1pc2htYXNoL01TCm1pc2lkZW50aWZ5L0dEUwptaXNpbmZvcm0vREdTCm1pc2luZm9ybWF0aW9uL00KbWlzaW50ZXJwcmV0L1NHRAptaXNpbnRlcnByZXRhdGlvbi9TTQptaXNqdWRnZS9EU0cKbWlzanVkZ21lbnQvU00KbWlzbGFiZWwvR1NECm1pc2xhaWQKbWlzbGF5L0dTCm1pc2xlYWQvR1MKbWlzbGVhZGluZy9ZCm1pc2xlZAptaXNtYW5hZ2UvTEdEUwptaXNtYW5hZ2VtZW50L00KbWlzbWF0Y2gvR01EUwptaXNuYW1lL0dEUwptaXNub21lci9NUwptaXNvZ2FtaXN0L01TCm1pc29nYW15L00KbWlzb2d5bmlzdC9TTQptaXNvZ3luaXN0aWMKbWlzb2d5bm91cwptaXNvZ3lueS9NCm1pc3BsYWNlL0dMRFMKbWlzcGxhY2VtZW50L00KbWlzcGxheS9HTURTCm1pc3ByaW50L0dNRFMKbWlzcHJpc2lvbi9NCm1pc3Byb25vdW5jZS9EU0cKbWlzcHJvbnVuY2lhdGlvbi9TTQptaXNxdW90YXRpb24vTVMKbWlzcXVvdGUvTUdEUwptaXNyZWFkL0dKUwptaXNyZWFkaW5nL00KbWlzcmVwb3J0L01ER1MKbWlzcmVwcmVzZW50L0dEUwptaXNyZXByZXNlbnRhdGlvbi9NUwptaXNydWxlL01HRFMKbWlzcydzCm1pc3MvRURTR1YKbWlzc2FsL0VTTQptaXNzZWQvVQptaXNzaGFwZS9HRFMKbWlzc2hhcGVuCm1pc3NpbGUvTVMKbWlzc2lsZXJ5L00KbWlzc2lvbi9BTVMKbWlzc2lvbmFyeS9TTQptaXNzaW9uZXIvU00KbWlzc2l2ZS9NUwptaXNzcGVhay9HUwptaXNzcGVsbC9HREpTCm1pc3NwZWxsaW5nL00KbWlzc3BlbmQvR1MKbWlzc3BlbnQKbWlzc3Bva2UKbWlzc3Bva2VuCm1pc3N0YXRlL0dEU0wKbWlzc3RhdGVtZW50L1NNCm1pc3N0ZXAvTVMKbWlzc3VzL01TCm1pc3QncwptaXN0L0NEUlNaRwptaXN0YWthYmxlL1UKbWlzdGFrZS9CTUdTCm1pc3Rha2VuL1kKbWlzdGVyJ3MKbWlzdGlseQptaXN0aW1lL0dEUwptaXN0aW5lc3MvTQptaXN0bGV0b2UvTQptaXN0b29rCm1pc3RyYWwvTVMKbWlzdHJhbnNsYXRlZAptaXN0cmVhdC9MREdTCm1pc3RyZWF0bWVudC9NCm1pc3RyZXNzL01TCm1pc3RyaWFsL01TCm1pc3RydXN0L01EU0cKbWlzdHJ1c3RmdWwvWQptaXN0eS9QUlQKbWlzdHlwZS9HUwptaXN1bmRlcnN0YW5kL1NHSgptaXN1bmRlcnN0YW5kaW5nL00KbWlzdW5kZXJzdG9vZAptaXN1c2UvRFNNRwptaXRlL01aUlMKbWl0ZXIvTURHCm1pdGlnYXRlL0RTR04KbWl0aWdhdGVkL1UKbWl0aWdhdGlvbi9NCm1pdG9jaG9uZHJpYQptaXRvY2hvbmRyaWFsCm1pdG9jaG9uZHJpb24KbWl0b3NlcwptaXRvc2lzL00KbWl0b3RpYwptaXRyYWwKbWl0dC9NTlNYCm1pdHRlbi9NCm1peC9aR01EUlNCCm1peGVkL1UKbWl4ZXIvTQptaXh0dXJlL1NNCm1penplbi9NUwptaXp6ZW5tYXN0L1NNCm1rYXkKbWtzCm1sCm1tCm1uZW1vbmljL01TCm1uZW1vbmljYWxseQptby9DS0hTCm1vYW4vTURSU1pHCm1vYW5lci9NCm1vYXQvTURTCm1vYidzCm1vYi9DUwptb2JiZWQvQwptb2JiaW5nL0MKbW9iaWxlL01TCm1vYmlsaXR5L00KbW9iaWxpemF0aW9uL0NNCm1vYmlsaXphdGlvbnMKbW9iaWxpemUvQ0RTRwptb2JpbGl6ZXIvU00KbW9ic3Rlci9TTQptb2NjYXNpbi9TTQptb2NoYS9TTQptb2NrL0RSU1pHCm1vY2tlci9NCm1vY2tlcnkvU00KbW9ja2luZy9ZCm1vY2tpbmdiaXJkL1NNCm1vZC9TVE0KbW9kYWwvU00KbW9kYWxpdHkvUwptb2RkZWQKbW9kZGluZwptb2RlL01TCm1vZGVsL1pHU0pNRFIKbW9kZWxlci9NCm1vZGVsaW5nL00KbW9kZW0vU00KbW9kZXJhdGUvTVlHTlBEUwptb2RlcmF0ZW5lc3MvTQptb2RlcmF0aW9uL00KbW9kZXJhdG9yL1NNCm1vZGVybi9NWVBTCm1vZGVybmlzbS9NCm1vZGVybmlzdC9TTQptb2Rlcm5pc3RpYwptb2Rlcm5pdHkvTQptb2Rlcm5pemF0aW9uL00KbW9kZXJuaXplL0RSU1pHCm1vZGVybml6ZXIvTQptb2Rlcm5uZXNzL00KbW9kZXN0L1kKbW9kZXN0eS9NCm1vZGljdW0vU00KbW9kaWZpYWJsZQptb2RpZmljYXRpb24vTQptb2RpZmllZC9VCm1vZGlmaWVyL00KbW9kaWZ5L0RSU1haR04KbW9kaXNoL1lQCm1vZGlzaG5lc3MvTQptb2R1bGFyCm1vZHVsYXRlL0NHTkRTCm1vZHVsYXRpb24vQ00KbW9kdWxhdGlvbnMKbW9kdWxhdG9yL01TCm1vZHVsZS9NUwptb2R1bG8KbW9kdWx1cwptb2dneQptb2d1bC9TTQptb2hhaXIvTQptb2kKbW9pZXR5L1NNCm1vaWwvTURTRwptb2lyZS9TTQptb2lzdC9YVFBOUlkKbW9pc3Rlbi9EUlpHCm1vaXN0ZW5lci9NCm1vaXN0bmVzcy9NCm1vaXN0dXJlL00KbW9pc3R1cml6ZS9aR0RSUwptb2lzdHVyaXplci9NCm1vbGFyL1NNCm1vbGFzc2VzL00KbW9sZC9NRFJKU1pHCm1vbGRib2FyZC9TTQptb2xkZXIvR01ECm1vbGRpbmVzcy9NCm1vbGRpbmcvTQptb2xkeS9UUFIKbW9sZS9NUwptb2xlY3VsYXIKbW9sZWN1bGFyaXR5L00KbW9sZWN1bGUvU00KbW9sZWhpbGwvU00KbW9sZXNraW4vTQptb2xlc3QvRFJaR1MKbW9sZXN0YXRpb24vTQptb2xlc3RlZC9VCm1vbGVzdGVyL00KbW9sbC9NUwptb2xsaWZpY2F0aW9uL00KbW9sbGlmeS9EU05HCm1vbGx1c2Nhbgptb2xsdXNrL1NNCm1vbGx5L1NNCm1vbGx5Y29kZGxlL0RTTUcKbW9sdC9NRE5SU1pHCm1vbHRlci9NCm1vbHliZGVudW0vTQptb20vU00KbW9tZW50L01TCm1vbWVudGEKbW9tZW50YXJpbHkKbW9tZW50YXJpbmVzcy9NCm1vbWVudGFyeS9QCm1vbWVudG91cy9QWQptb21lbnRvdXNuZXNzL00KbW9tZW50dW0vTQptb21teS9TTQptb25hcmNoL00KbW9uYXJjaGljCm1vbmFyY2hpY2FsCm1vbmFyY2hpc20vTQptb25hcmNoaXN0L01TCm1vbmFyY2hpc3RpYwptb25hcmNocwptb25hcmNoeS9TTQptb25hc3RlcnkvU00KbW9uYXN0aWMvTVMKbW9uYXN0aWNhbC9ZCm1vbmFzdGljaXNtL00KbW9uYXVyYWwKbW9uZXRhcmlseQptb25ldGFyaXNtL00KbW9uZXRhcmlzdC9NUwptb25ldGFyeQptb25ldGl6ZS9DR0RTCm1vbmV5L1NNRAptb25leWJhZy9NUwptb25leWJveC9TCm1vbmV5bGVuZGVyL1NNCm1vbmV5bWFrZXIvU00KbW9uZXltYWtpbmcvTQptb25nZXIvTURHUwptb25nb2wvUwptb25nb2xpc20vTQptb25nb2xvaWQvTVMKbW9uZ29vc2UvTVMKbW9uZ3JlbC9TTQptb25pZXMKbW9uaWtlci9TTQptb25pc20vTQptb25pc3QvTVMKbW9uaXRpb24vU00KbW9uaXRvci9TTURHCm1vbml0b3J5Cm1vbmsvTVMKbW9ua2V5L01ER1MKbW9ua2V5c2hpbmUvU00KbW9ua2lzaAptb25rc2hvb2QvU00KbW9uby9NCm1vbm9jaHJvbWF0aWMKbW9ub2Nocm9tZS9NUwptb25vY2xlL0RTTQptb25vY2xvbmFsCm1vbm9jb3R5bGVkb24vU00KbW9ub2NvdHlsZWRvbm91cwptb25vY3VsYXIKbW9ub2RpYwptb25vZGlzdC9TTQptb25vZHkvU00KbW9ub2dhbWlzdC9NUwptb25vZ2Ftb3VzL1kKbW9ub2dhbXkvTQptb25vZ3JhbS9TTQptb25vZ3JhbW1lZAptb25vZ3JhbW1pbmcKbW9ub2dyYXBoL00KbW9ub2dyYXBocwptb25vbGluZ3VhbC9NUwptb25vbGl0aC9NCm1vbm9saXRoaWMKbW9ub2xpdGhzCm1vbm9sb2dpc3QvU00KbW9ub2xvZ3VlL1NNCm1vbm9tYW5pYS9NCm1vbm9tYW5pYWMvTVMKbW9ub21hbmlhY2FsCm1vbm9tZXIvU00KbW9ub251Y2xlb3Npcy9NCm1vbm9waG9uaWMKbW9ub3BsYW5lL1NNCm1vbm9wb2xpc3QvU00KbW9ub3BvbGlzdGljCm1vbm9wb2xpemF0aW9uL00KbW9ub3BvbGl6ZS9EUlNaRwptb25vcG9saXplci9NCm1vbm9wb2x5L1NNCm1vbm9yYWlsL01TCm1vbm9zeWxsYWJpYwptb25vc3lsbGFibGUvTVMKbW9ub3RoZWlzbS9NCm1vbm90aGVpc3QvU00KbW9ub3RoZWlzdGljCm1vbm90b25lL01TCm1vbm90b25pYwptb25vdG9uaWNhbGx5Cm1vbm90b25vdXMvUFkKbW9ub3Rvbm91c25lc3MvTQptb25vdG9ueS9NCm1vbm91bnNhdHVyYXRlZAptb25veGlkZS9NUwptb25zZWlnbmV1ci9NCm1vbnNpZXVyL00KbW9uc2lnbm9yL1NNCm1vbnNvb24vU00KbW9uc29vbmFsCm1vbnN0ZXIvU00KbW9uc3RyYW5jZS9BU00KbW9uc3Ryb3NpdHkvU00KbW9uc3Ryb3VzL1kKbW9udGFnZS9TTQptb250aC9NWQptb250aGx5L1NNCm1vbnRocwptb251bWVudC9NUwptb251bWVudGFsL1kKbW9vL1NHTUQKbW9vY2gvWkdNRFJTCm1vb2NoZXIvTQptb29kL01TCm1vb2RpbHkKbW9vZGluZXNzL00KbW9vZHkvVFBSCm1vb24vTURTRwptb29uYmVhbS9NUwptb29ubGVzcwptb29ubGlnaHQvU01EUlpHCm1vb25saWdodGVyL00KbW9vbmxpZ2h0aW5nL00KbW9vbmxpdAptb29uc2NhcGUvU00KbW9vbnNoaW5lL01aUlMKbW9vbnNoaW5lci9NCm1vb25zaG90L01TCm1vb25zdG9uZS9NUwptb29uc3RydWNrCm1vb253YWxrL01TCm1vb3IvTURKU0cKbW9vcmhlbi9TCm1vb3JpbmcvTQptb29ybGFuZC9NUwptb29zZS9NCm1vb3QvRFNHCm1vcC9TWkdNRFIKbW9wZS9NUwptb3BlZC9TTQptb3Blci9NCm1vcGV5Cm1vcGllcgptb3BpZXN0Cm1vcGlzaAptb3BwZWQKbW9wcGV0L01TCm1vcHBpbmcKbW9yYWluZS9TTQptb3JhbC9TTVkKbW9yYWxlL00KbW9yYWxpc3QvTVMKbW9yYWxpc3RpYwptb3JhbGlzdGljYWxseQptb3JhbGl0aWVzCm1vcmFsaXR5L1VNCm1vcmFsaXphdGlvbi9DTQptb3JhbGl6ZS9DR0RTCm1vcmFsaXplci9NUwptb3Jhc3MvTVMKbW9yYXRvcml1bS9TTQptb3JheS9TTQptb3JiaWQvWVAKbW9yYmlkaXR5L00KbW9yYmlkbmVzcy9NCm1vcmRhbmN5L00KbW9yZGFudC9TTVkKbW9yZS9NUwptb3JlaXNoCm1vcmVsL1NNCm1vcmVvdmVyCm1vcmVzL00KbW9yZ3VlL01TCm1vcmlidW5kCm1vcm4vTUpTRwptb3JuaW5nL00KbW9yb2Njby9NCm1vcm9uL1NNCm1vcm9uaWMKbW9yb25pY2FsbHkKbW9yb3NlL1lQCm1vcm9zZW5lc3MvTQptb3JwaC9HRAptb3JwaGVtZS9NUwptb3JwaGVtaWMKbW9ycGhpYS9NCm1vcnBoaW5lL00KbW9ycGhpbmcvTQptb3JwaG9sb2dpY2FsCm1vcnBob2xvZ3kvTQptb3JwaHMKbW9ycm93L01TCm1vcnNlbC9NUwptb3J0YWwvTVlTCm1vcnRhbGl0eS9NCm1vcnRhci9NRFNHCm1vcnRhcmJvYXJkL1NNCm1vcnRnYWdlJ3MKbW9ydGdhZ2UvQUdEUwptb3J0Z2FnZWUvTVMKbW9ydGdhZ29yL01TCm1vcnRpY2lhbi9NUwptb3J0aWZpY2F0aW9uL00KbW9ydGlmeS9OR0RTCm1vcnRpc2UvRFNNRwptb3J0dWFyeS9TTQptb3NhaWMvTVMKbW9zZXkvU0dECm1vc2gvRFNHCm1vc3F1ZS9NUwptb3NxdWl0by9NCm1vc3F1aXRvZXMKbW9zcy9NUwptb3NzYmFjay9TTQptb3NzeS9UUgptb3N0L01ZCm1vdC9TTQptb3RlJ3MKbW90ZS9LQ1hTVk4KbW90ZWwvU00KbW90ZXQvU00KbW90aC9NCm1vdGhiYWxsL0dNRFMKbW90aGVyL01EWVNHCm1vdGhlcmJvYXJkL1NNCm1vdGhlcmZ1Y2tlci9NUyEKbW90aGVyZnVja2luZy8hCm1vdGhlcmhvb2QvTQptb3RoZXJsYW5kL01TCm1vdGhlcmxlc3MKbW90aGVybGluZXNzL00KbW90aHMKbW90aWYvU00KbW90aWxlL1MKbW90aWxpdHkvTQptb3Rpb24vS0NNCm1vdGlvbmVkCm1vdGlvbmluZwptb3Rpb25sZXNzL1lQCm1vdGlvbmxlc3NuZXNzL00KbW90aXZhdGUvQ0RTRwptb3RpdmF0ZWQvVQptb3RpdmF0aW9uL1NNCm1vdGl2YXRpb25hbAptb3RpdmF0b3IvU00KbW90aXZlL01TCm1vdGl2ZWxlc3MKbW90bGV5L01TCm1vdGxpZXIKbW90bGllc3QKbW90b2Nyb3NzL01TCm1vdG9yL1NHTUQKbW90b3JiaWtlL01HRFMKbW90b3Jib2F0L01TCm1vdG9yY2FkZS9NUwptb3RvcmNhci9TTQptb3RvcmN5Y2xlL0RTTUcKbW90b3JjeWNsaXN0L01TCm1vdG9yaXN0L1NNCm1vdG9yaXphdGlvbi9NCm1vdG9yaXplL0RTRwptb3Rvcm1hbi9NCm1vdG9ybWVuCm1vdG9ybW91dGgvTQptb3Rvcm1vdXRocwptb3RvcndheS9TTQptb3R0bGUvR0RTCm1vdHRvL00KbW90dG9lcwptb3VlL01TCm1vdW5kL1NHTUQKbW91bnQvRUFTR01ECm1vdW50YWJsZQptb3VudGFpbi9TTQptb3VudGFpbmVlci9TTURHCm1vdW50YWluZWVyaW5nL00KbW91bnRhaW5vdXMKbW91bnRhaW5zaWRlL1NNCm1vdW50YWludG9wL1NNCm1vdW50ZWJhbmsvTVMKbW91bnRlZC9VCm1vdW50ZXIvTVMKbW91bnRpbmcvU00KbW91cm4vU1pHRFIKbW91cm5lZC9VCm1vdXJuZXIvTQptb3VybmZ1bC9ZUAptb3VybmZ1bG5lc3MvTQptb3VybmluZy9NCm1vdXNlL0RSU01aRwptb3VzZXIvTQptb3VzZXRyYXAvU00KbW91c2V0cmFwcGVkCm1vdXNldHJhcHBpbmcKbW91c2luZXNzL00KbW91c3Nha2EvUwptb3Vzc2UvTUdEUwptb3VzeS9QVFIKbW91dGgvR01ECm1vdXRoZmVlbAptb3V0aGZ1bC9NUwptb3V0aGluZXNzL00KbW91dGhwaWVjZS9NUwptb3V0aHMKbW91dGh3YXNoL01TCm1vdXRod2F0ZXJpbmcKbW91dGh5L1BUUgptb3V0b24vTQptb3ZhYmxlL1NNCm1vdmUvQU1aR0RSU0IKbW92ZWQvVQptb3ZlbWVudC9TTQptb3Zlci9BTQptb3ZpZS9TTQptb3ZpZWdvZXIvU00KbW92aW5nL1kKbW93L1NaR01EUgptb3dlci9NCm1veGllL00KbW96emFyZWxsYS9NCm1wCm1wZwptcGgKbXQKbXRnCm10Z2UKbXUvU00KbXVjaC9NCm11Y2lsYWdlL00KbXVjaWxhZ2lub3VzCm11Y2svTURTRwptdWNrcmFrZS9EUlNaRwptdWNrcmFrZXIvTQptdWNreS9UUgptdWNvdXMKbXVjdXMvTQptdWQvTQptdWRkaWx5Cm11ZGRpbmVzcy9NCm11ZGRsZS9NR0RTCm11ZGRsZWhlYWRlZAptdWRkeS9QVEdEUlMKbXVkZmxhcC9TCm11ZGZsYXQvTVMKbXVkZ3VhcmQvU00KbXVkcGFjay9TCm11ZHJvb20vTVMKbXVkc2xpZGUvTVMKbXVkc2xpbmdlci9TTQptdWRzbGluZ2luZy9NCm11ZW5zdGVyL00KbXVlc2xpCm11ZXp6aW4vTVMKbXVmZi9NRFNHCm11ZmZpbi9NUwptdWZmbGUvWkdEUlMKbXVmZmxlci9NCm11ZnRpL1NNCm11Zy9TTQptdWdmdWwvTVMKbXVnZ2VkCm11Z2dlci9NUwptdWdnaW5lc3MvTQptdWdnaW5nL01TCm11Z2dpbnMKbXVnZ2xlL01TCm11Z2d5L1BUUgptdWdzaG90L01TCm11Z3d1bXAvTVMKbXVqYWhlZGRpbgptdWtsdWsvTVMKbXVsYXR0by9NCm11bGF0dG9lcwptdWxiZXJyeS9TTQptdWxjaC9HTURTCm11bGN0L1NHTUQKbXVsZS9NUwptdWxlc2tpbm5lci9NUwptdWxldGVlci9NUwptdWxpc2gvUFkKbXVsaXNobmVzcy9NCm11bGwvRFNHCm11bGxhaC9NCm11bGxhaHMKbXVsbGVpbi9NCm11bGxldC9NUwptdWxsaWdhbi9TTQptdWxsaWdhdGF3bnkvTQptdWxsaW9uL1NNRAptdWx0aQptdWx0aWNvbG9yZWQKbXVsdGljdWx0dXJhbAptdWx0aWN1bHR1cmFsaXNtL00KbXVsdGlkaW1lbnNpb25hbAptdWx0aWRpc2NpcGxpbmFyeQptdWx0aWZhY2V0ZWQKbXVsdGlmYW1pbHkKbXVsdGlmYXJpb3VzL1BZCm11bHRpZmFyaW91c25lc3MvTQptdWx0aWZvcm0KbXVsdGlncmFpbgptdWx0aWxhdGVyYWwvWQptdWx0aWxheWVyZWQKbXVsdGlsZXZlbAptdWx0aWxpbmd1YWwKbXVsdGlsaW5ndWFsaXNtL00KbXVsdGltZWRpYS9NCm11bHRpbWlsbGlvbmFpcmUvU00KbXVsdGluYXRpb25hbC9TTQptdWx0aXBhcnR5Cm11bHRpcGxheWVyL00KbXVsdGlwbGUvTVMKbXVsdGlwbGV4L1pHTURSUwptdWx0aXBsZXhlci9NCm11bHRpcGxpY2FuZC9NUwptdWx0aXBsaWNhdGlvbi9NCm11bHRpcGxpY2F0aXZlCm11bHRpcGxpY2l0eS9TTQptdWx0aXBsaWVyL00KbXVsdGlwbHkvTlpHRFJTWAptdWx0aXByb2Nlc3NpbmcKbXVsdGlwcm9jZXNzb3IvU00KbXVsdGlwdXJwb3NlCm11bHRpcmFjaWFsCm11bHRpc3RhZ2UKbXVsdGlzdG9yeQptdWx0aXRhc2svR1MKbXVsdGl0YXNraW5nL00KbXVsdGl0dWRlL1NNCm11bHRpdHVkaW5vdXMKbXVsdGl2YXJpYXRlCm11bHRpdmVyc2UvU00KbXVsdGl2aXRhbWluL01TCm11bHRpeWVhcgptdW0vU00KbXVtYmxlL01aR0RSUwptdW1ibGVyL00KbXVtYmxldHlwZWcvTQptdW1tZXIvTVMKbXVtbWVyeS9NCm11bW1pZmljYXRpb24vTQptdW1taWZ5L0dORFMKbXVtbXkvU00KbXVtcHMvTQptdW4KbXVuY2gvR0RTCm11bmNoaWVzL00KbXVuY2hraW4vU00KbXVuZGFuZS9TWQptdW5nL0RTRwptdW5pY2lwYWwvU01ZCm11bmljaXBhbGl0eS9TTQptdW5pZmljZW5jZS9NCm11bmlmaWNlbnQvWQptdW5pdGlvbi9NREdTCm11cmFsL1NNCm11cmFsaXN0L1NNCm11cmRlci9aR01EUlMKbXVyZGVyZXIvTQptdXJkZXJlc3MvTVMKbXVyZGVyb3VzL1kKbXVyay9NUwptdXJraWx5Cm11cmtpbmVzcy9NCm11cmt5L1BUUgptdXJtdXIvWkdKTURSUwptdXJtdXJlci9NCm11cm11cmluZy9NCm11cm11cm91cwptdXJyYWluL00KbXVzY2F0L01TCm11c2NhdGVsL1NNCm11c2NsZS9NR0RTCm11c2NsZWJvdW5kCm11c2NsZW1hbgptdXNjbGVtZW4KbXVzY2x5Cm11c2N1bGFyL1kKbXVzY3VsYXJpdHkvTQptdXNjdWxhdHVyZS9NCm11c2UvTUdEU0oKbXVzZXR0ZS9NUwptdXNldW0vTVMKbXVzaC9NRFJTWkcKbXVzaGluZXNzL00KbXVzaHJvb20vR1NNRAptdXNoeS9QVFIKbXVzaWMvU00KbXVzaWNhbC9NWVMKbXVzaWNhbGUvTVMKbXVzaWNhbGl0eS9NCm11c2ljaWFuL1NNWQptdXNpY2lhbnNoaXAvTQptdXNpY29sb2dpY2FsCm11c2ljb2xvZ2lzdC9NUwptdXNpY29sb2d5L00KbXVzaW5nL01ZCm11c2svTQptdXNrZWcvTVMKbXVza2VsbHVuZ2UvTVMKbXVza2V0L01TCm11c2tldGVlci9NUwptdXNrZXRyeS9NCm11c2tpZS9NCm11c2tpbmVzcy9NCm11c2ttZWxvbi9TTQptdXNrb3gvTU4KbXVza3JhdC9NUwptdXNreS9QVFJTCm11c2xpbi9NCm11c3MvTURTRwptdXNzZWwvTVMKbXVzc3kvVFIKbXVzdCd2ZQptdXN0L01SU1oKbXVzdGFjaGUvTURTCm11c3RhY2hpby9TTUQKbXVzdGFuZy9NUwptdXN0YXJkL00KbXVzdGVyL0dNRAptdXN0aWx5Cm11c3RpbmVzcy9NCm11c3RuJ3QKbXVzdHkvUFRSCm11dGFiaWxpdHkvTQptdXRhYmx5Cm11dGFnZW4vTVMKbXV0YW50L01TCm11dGF0ZS9YR05WRFMKbXV0YXRpb24vTQptdXRhdGlvbmFsCm11dGUvTVlUR0RSU1BCCm11dGVuZXNzL00KbXV0aWxhdGUvRFNHTlgKbXV0aWxhdGlvbi9NCm11dGlsYXRvci9TTQptdXRpbmVlci9TTQptdXRpbm91cy9ZCm11dGlueS9HRFNNCm11dHQvTVMKbXV0dGVyL1pHSk1EUlMKbXV0dGVyZXIvTQptdXR0ZXJpbmcvTQptdXR0b24vTQptdXR0b25jaG9wcy9NCm11dHRvbnkKbXV0dWFsL1kKbXV0dWFsaXR5L00KbXV1bXV1L01TCm11emFrCm11enppbHkKbXV6emxlL0RTTUcKbXV6enkvUApteQpteWNvbG9naXN0L1NNCm15Y29sb2d5L00KbXllbGl0aXMvTQpteW5hL01TCm15b2NhcmRpYWwKbXlvY2FyZGl1bQpteW9waWEvTQpteW9waWMKbXlvcGljYWxseQpteXJpYWQvU00KbXlybWlkb24vTVMKbXlycmgvTQpteXJ0bGUvU00KbXlzCm15c2VsZgpteXN0ZXJpb3VzL1BZCm15c3RlcmlvdXNuZXNzL00KbXlzdGVyeS9TTQpteXN0aWMvU00KbXlzdGljYWwvWQpteXN0aWNpc20vTQpteXN0aWZpY2F0aW9uL0NNCm15c3RpZnkvQ0RTR04KbXlzdGlxdWUvTQpteXRoL00KbXl0aGljCm15dGhpY2FsCm15dGhvbG9naWNhbApteXRob2xvZ2lzdC9TTQpteXRob2xvZ2l6ZS9EU0cKbXl0aG9sb2d5L1NNCm15dGhzCm15eG9tYXRvc2lzCm4vSUtUSApuYWFuL1MKbmFiL1MKbmFiYmVkCm5hYmJpbmcKbmFib2IvU00KbmFjZWxsZS9TTQpuYWNoby9TTQpuYWNyZS9NCm5hY3Jlb3VzCm5hZGlyL1NNCm5hZQpuYWZmL1JUCm5hZy9TTQpuYWdnZWQKbmFnZ2VyL01TCm5hZ2dpbmcKbmFnd2FyZQpuYWgKbmFpYWQvU00KbmFpZi9NUwpuYWlsL01EU0cKbmFpbGJydXNoL01TCm5haXZlL1JZVApuYWl2ZXRlL00KbmFpdmV0eS9NCm5ha2VkL1BZCm5ha2VkbmVzcy9NCm5hbWUncwpuYW1lL0FHRFMKbmFtZWFibGUvVQpuYW1lZC9VCm5hbWVkcm9wCm5hbWVkcm9wcGluZy9NCm5hbWVsZXNzL1kKbmFtZWx5Cm5hbWVwbGF0ZS9NUwpuYW1lc2FrZS9TTQpuYW5ueS9TTQpuYW5vYm90L1MKbmFub3NlY29uZC9TTQpuYW5vdGVjaG5vbG9neS9TTQpuYXAvU00KbmFwYWxtL01EU0cKbmFwZS9NUwpuYXBodGhhL00KbmFwaHRoYWxlbmUvTQpuYXBraW4vTVMKbmFwbGVzcwpuYXBvbGVvbi9TTQpuYXBwZWQKbmFwcGVyL01TCm5hcHBpbmcKbmFwcHkvVFJTTQpuYXJjL01TCm5hcmNpc3Npc20vTQpuYXJjaXNzaXN0L01TCm5hcmNpc3Npc3RpYwpuYXJjaXNzdXMvTQpuYXJjb2xlcHN5L00KbmFyY29sZXB0aWMKbmFyY29zZXMKbmFyY29zaXMvTQpuYXJjb3RpYy9TTQpuYXJjb3RpemF0aW9uL00KbmFyY290aXplL0dEUwpuYXJrCm5hcmt5Cm5hcnJhdGUvR05WRFNYCm5hcnJhdGlvbi9NCm5hcnJhdGl2ZS9TTQpuYXJyYXRvci9TTQpuYXJyb3cvUFRHTURSWVMKbmFycm93bmVzcy9NCm5hcndoYWwvTVMKbmFyeQpuYXNhbC9TTVkKbmFzYWxpdHkvTQpuYXNhbGl6YXRpb24vTQpuYXNhbGl6ZS9EU0cKbmFzY2VuY2UvQU0KbmFzY2VudC9BCm5hc3RpbHkKbmFzdGluZXNzL00KbmFzdHVydGl1bS9TTQpuYXN0eS9QVFIKbmF0YWwKbmF0Y2gKbmF0aW9uL01TCm5hdGlvbmFsL01ZUwpuYXRpb25hbGlzbS9NCm5hdGlvbmFsaXN0L1NNCm5hdGlvbmFsaXN0aWMKbmF0aW9uYWxpc3RpY2FsbHkKbmF0aW9uYWxpdHkvU00KbmF0aW9uYWxpemF0aW9uL01TCm5hdGlvbmFsaXplL0NEU0cKbmF0aW9uaG9vZC9NCm5hdGlvbndpZGUKbmF0aXZlL01TCm5hdGl2aXR5L1NNCm5hdGwKbmF0dGVyL0dNRFMKbmF0dGlseQpuYXR0aW5lc3MvTQpuYXR0eS9QVFIKbmF0dXJhbCdzCm5hdHVyYWwvVVBZCm5hdHVyYWxpc20vTQpuYXR1cmFsaXN0L1NNCm5hdHVyYWxpc3RpYwpuYXR1cmFsaXphdGlvbi9NCm5hdHVyYWxpemUvRFNHCm5hdHVyYWxuZXNzL1VNCm5hdHVyYWxzCm5hdHVyZSdzCm5hdHVyZS9DUwpuYXR1cmlzbQpuYXR1cmlzdC9TCm5hdWdodC9NUwpuYXVnaHRpbHkKbmF1Z2h0aW5lc3MvTQpuYXVnaHR5L1BUUgpuYXVzZWEvTQpuYXVzZWF0ZS9HRFMKbmF1c2VhdGluZy9ZCm5hdXNlb3VzL1BZCm5hdXNlb3VzbmVzcy9NCm5hdXRpY2FsL1kKbmF1dGlsdXMvTVMKbmF2YWwKbmF2ZS9NUwpuYXZlbC9TTQpuYXZpZ2FiaWxpdHkvTQpuYXZpZ2FibGUKbmF2aWdhdGUvRFNHTgpuYXZpZ2F0aW9uL00KbmF2aWdhdGlvbmFsCm5hdmlnYXRvci9NUwpuYXZ2eS9TCm5hdnkvU00KbmF5L1NNCm5heXNheWVyL01TCm5lJ2VyCm5lYW5kZXJ0aGFsL01TCm5lYXAvTVMKbmVhci9EUllTUFRHCm5lYXJieQpuZWFybmVzcy9NCm5lYXJzaG9yZQpuZWFyc2lkZQpuZWFyc2lnaHRlZC9ZUApuZWFyc2lnaHRlZG5lc3MvTQpuZWF0L05SWVBYVApuZWF0ZW4vR0QKbmVhdGgKbmVhdG5lc3MvTQpuZWJ1bGEvTQpuZWJ1bGFlCm5lYnVsYXIKbmVidWxvdXMvUFkKbmVidWxvdXNuZXNzL00KbmVjZXNzYXJpbHkvVQpuZWNlc3NhcnkvU00KbmVjZXNzaXRhdGUvRFNHCm5lY2Vzc2l0b3VzCm5lY2Vzc2l0eS9TTQpuZWNrL01EU0cKbmVja2JhbmQvUwpuZWNrZXJjaGllZi9NUwpuZWNraW5nL00KbmVja2xhY2UvTUdEU0oKbmVja2xpbmUvTVMKbmVja3RpZS9NUwpuZWNyb2xvZ3kvTQpuZWNyb21hbmNlci9TTQpuZWNyb21hbmN5L00KbmVjcm9waGlsaWEKbmVjcm9waGlsaWFjL1MKbmVjcm9wb2xpcy9NUwpuZWNyb3NlcwpuZWNyb3Npcy9NCm5lY3JvdGljCm5lY3Rhci9NCm5lY3RhcmluZS9NUwpuZWUKbmVlZC9NRFNHCm5lZWRlZC9VCm5lZWRmdWwvWQpuZWVkaW5lc3MvTQpuZWVkbGUvTUdEUwpuZWVkbGVwb2ludC9NCm5lZWRsZXNzL1lQCm5lZWRsZXNzbmVzcy9NCm5lZWRsZXdvbWFuL00KbmVlZGxld29tZW4KbmVlZGxld29yay9NCm5lZWRuJ3QKbmVlZHkvUFRSCm5lZmFyaW91cy9ZUApuZWZhcmlvdXNuZXNzL00KbmVnCm5lZ2F0ZS9EU0dOVlgKbmVnYXRpb24vTQpuZWdhdGl2ZS9NWUdQRFMKbmVnYXRpdmVuZXNzL00KbmVnYXRpdmlzbS9NCm5lZ2F0aXZpdHkvTQpuZWdsZWN0L1NHTUQKbmVnbGVjdGZ1bC9ZUApuZWdsZWN0ZnVsbmVzcy9NCm5lZ2xpZ2VlL01TCm5lZ2xpZ2VuY2UvTQpuZWdsaWdlbnQvWQpuZWdsaWdpYmxlCm5lZ2xpZ2libHkKbmVnb3RpYWJpbGl0eS9NCm5lZ290aWFibGUvQQpuZWdvdGlhdGUvQURTR04KbmVnb3RpYXRpb24vQU0KbmVnb3RpYXRpb25zCm5lZ290aWF0b3IvTVMKbmVncml0dWRlL00KbmVncm8KbmVncm9pZApuZWlnaC9NREcKbmVpZ2hib3IvU01EWUcKbmVpZ2hib3Job29kL1NNCm5laWdoYm9ybGluZXNzL00KbmVpZ2hzCm5laXRoZXIKbmVsc29uL1NNCm5lbWF0b2RlL1NNCm5lbWVzZXMKbmVtZXNpcy9NCm5lb2NsYXNzaWMKbmVvY2xhc3NpY2FsCm5lb2NsYXNzaWNpc20vTQpuZW9jb2xvbmlhbGlzbS9NCm5lb2NvbG9uaWFsaXN0L01TCm5lb2Nvbi9TTQpuZW9jb25zZXJ2YXRpdmUvU00KbmVvZHltaXVtL00KbmVvbGl0aGljCm5lb2xvZ2lzbS9TTQpuZW9uL00KbmVvbmF0YWwKbmVvbmF0ZS9NUwpuZW9waGlsaWEKbmVvcGh5dGUvTVMKbmVvcGxhc20vTVMKbmVvcGxhc3RpYwpuZW9wcmVuZS9NCm5lcGVudGhlL00KbmVwaGV3L1NNCm5lcGhyaXRlL00KbmVwaHJpdGljCm5lcGhyaXRpcy9NCm5lcGhyb3BhdGh5Cm5lcG90aXNtL00KbmVwb3Rpc3QvU00KbmVwb3Rpc3RpYwpuZXB0dW5pdW0vTQpuZXJkL01TCm5lcmR5L1JUCm5lcnZlJ3MKbmVydmUvVURTRwpuZXJ2ZWxlc3MvWVAKbmVydmVsZXNzbmVzcy9NCm5lcnZpbmVzcy9NCm5lcnZvdXMvWVAKbmVydm91c25lc3MvTQpuZXJ2eS9UUFIKbmVzdC9NRFNHCm5lc3RsZS9HSkRTCm5lc3RsaW5nL00KbmV0L1NNCm5ldGJhbGwKbmV0Ym9vay9NUwpuZXRoZXIKbmV0aGVybW9zdApuZXRoZXJ3b3JsZC9NCm5ldGlxdWV0dGUvUwpuZXR0ZWQKbmV0dGVyL1MKbmV0dGluZy9NCm5ldHRsZS9NR0RTCm5ldHRsZXNvbWUKbmV0d29yay9TR01ECm5ldHdvcmtpbmcvTQpuZXVyYWwvWQpuZXVyYWxnaWEvTQpuZXVyYWxnaWMKbmV1cmFzdGhlbmlhL00KbmV1cmFzdGhlbmljL01TCm5ldXJpdGljL01TCm5ldXJpdGlzL00KbmV1cm9sb2dpY2FsL1kKbmV1cm9sb2dpc3QvU00KbmV1cm9sb2d5L00KbmV1cm9uL01TCm5ldXJvbmFsCm5ldXJvc2VzCm5ldXJvc2lzL00KbmV1cm9zdXJnZW9uL01TCm5ldXJvc3VyZ2VyeS9NCm5ldXJvc3VyZ2ljYWwKbmV1cm90aWMvTVMKbmV1cm90aWNhbGx5Cm5ldXJvdHJhbnNtaXR0ZXIvU00KbmV1dApuZXV0ZXIvTURHUwpuZXV0cmFsL1NNWQpuZXV0cmFsaXNtL00KbmV1dHJhbGlzdC9TTQpuZXV0cmFsaXR5L00KbmV1dHJhbGl6YXRpb24vTQpuZXV0cmFsaXplL0RSU1pHCm5ldXRyYWxpemVyL00KbmV1dHJpbm8vU00KbmV1dHJvbi9TTQpuZXZlcgpuZXZlcm1vcmUKbmV2ZXJ0aGVsZXNzCm5ldmkKbmV2dXMvTQpuZXcvU1RNUllQCm5ld2JpZS9NUwpuZXdib3JuL1NNCm5ld2NvbWVyL1NNCm5ld2VsL1NNCm5ld2ZhbmdsZWQKbmV3Zm91bmQKbmV3bGluZS9TCm5ld2x5d2VkL1NNCm5ld25lc3MvTQpuZXdzL00KbmV3c2FnZW50L1MKbmV3c2JveS9TTQpuZXdzY2FzdC9TTVJaCm5ld3NjYXN0ZXIvTQpuZXdzZGVhbGVyL1NNCm5ld3NmbGFzaC9TCm5ld3NnaXJsL1NNCm5ld3Nncm91cC9NUwpuZXdzaG91bmQvUwpuZXdzbGV0dGVyL01TCm5ld3NtYW4vTQpuZXdzbWVuCm5ld3NwYXBlci9NUwpuZXdzcGFwZXJtYW4vTQpuZXdzcGFwZXJtZW4KbmV3c3BhcGVyd29tYW4vTQpuZXdzcGFwZXJ3b21lbgpuZXdzcGVhawpuZXdzcHJpbnQvTQpuZXdzcmVhZGVyL1MKbmV3c3JlZWwvTVMKbmV3c3Jvb20vTVMKbmV3c3N0YW5kL1NNCm5ld3N3ZWVrbHkvU00KbmV3c3dvbWFuL00KbmV3c3dvbWVuCm5ld3N3b3J0aGluZXNzL00KbmV3c3dvcnRoeS9QCm5ld3N5L1RSCm5ld3QvTVMKbmV3dG9uL01TCm5leHQvTQpuZXh1cy9NUwpuaWFjaW4vTQpuaWIvU00KbmliYmxlL01aR0RSUwpuaWJibGVyL00KbmljZS9QWVRSCm5pY2VuZXNzL00KbmljZXR5L1NNCm5pY2hlL1NNCm5pY2svTURSU1pHCm5pY2tlbC9NUwpuaWNrZWxvZGVvbi9TTQpuaWNrZXIvTURHCm5pY2tsZS9TCm5pY2tuYW1lL0RTTUcKbmljb3RpbmUvTQpuaWVjZS9TTQpuaWZmCm5pZmZ5Cm5pZnR5L1RSCm5pZ2dhL1NNCm5pZ2dhcmQvU01ZCm5pZ2dhcmRsaW5lc3MvTQpuaWdnYXoKbmlnZ2VyL1NNIQpuaWdnbGUvTVpHRFJTCm5pZ2dsZXIvTQpuaWdoL1JUCm5pZ2h0L1NNWQpuaWdodGNhcC9TTQpuaWdodGNsb3RoZXMvTQpuaWdodGNsdWIvU00KbmlnaHRjbHViYmVkCm5pZ2h0Y2x1YmJpbmcKbmlnaHRkcmVzcy9NUwpuaWdodGZhbGwvTQpuaWdodGdvd24vU00KbmlnaHRoYXdrL1NNCm5pZ2h0aWUvU00KbmlnaHRpbmdhbGUvU00KbmlnaHRsaWZlL00KbmlnaHRsaWdodC9TCm5pZ2h0bG9uZwpuaWdodG1hcmUvU00KbmlnaHRtYXJpc2gKbmlnaHRzaGFkZS9TTQpuaWdodHNoaXJ0L1NNCm5pZ2h0c3BvdC9NUwpuaWdodHN0YW5kL1NNCm5pZ2h0c3RpY2svU00KbmlnaHR0aW1lL00KbmlnaHR3YXRjaG1hbgpuaWdodHdhdGNobWVuCm5pZ2h0d2Vhci9NCm5paGlsaXNtL00KbmloaWxpc3QvTVMKbmloaWxpc3RpYwpuaWwvTQpuaW1iaQpuaW1ibGUvVFBSCm5pbWJsZW5lc3MvTQpuaW1ibHkKbmltYnVzL00KbmltYnkKbmltcm9kL01TCm5pbmNvbXBvb3AvU00KbmluZS9NUwpuaW5lcGluL01TCm5pbmVwaW5zL00KbmluZXRlZW4vU01ICm5pbmV0ZWVudGgvTQpuaW5ldGVlbnRocwpuaW5ldGlldGgvTQpuaW5ldGlldGhzCm5pbmV0eS9IU00KbmluamEvU00KbmlubnkvU00KbmludGgvTQpuaW50aHMKbmlvYml1bS9NCm5pcC9TTQpuaXBwZWQKbmlwcGVyL01TCm5pcHBpbmVzcy9NCm5pcHBpbmcKbmlwcGxlL01TCm5pcHB5L1RQUgpuaXJ2YW5hL00KbmlzZWkvTQpuaXQvU01SCm5pdGVyL00Kbml0cGljay9TWkdEUgpuaXRwaWNrZXIvTQpuaXRwaWNraW5nL00Kbml0cmF0ZS9EU01HTgpuaXRyYXRpb24vTQpuaXRyaWZpY2F0aW9uL00Kbml0cml0ZS9TTQpuaXRybwpuaXRyb2NlbGx1bG9zZS9NCm5pdHJvZ2VuL00Kbml0cm9nZW5vdXMKbml0cm9nbHljZXJpbi9NCm5pdHdpdC9NUwpuaXgvR01EUwpuby9TTQpub2IvU1kKbm9iYmxlL0dEUwpub2JlbGl1bS9NCm5vYmlsaXR5L00Kbm9ibGUvUlNQTVQKbm9ibGVtYW4vTQpub2JsZW1lbgpub2JsZW5lc3MvTQpub2JsZXdvbWFuL00Kbm9ibGV3b21lbgpub2JvZHkvU00Kbm9jdHVybmFsL1kKbm9jdHVybmUvTVMKbm9kL1NNCm5vZGFsCm5vZGRlZApub2RkaW5nCm5vZGRsZS9NUwpub2RkeQpub2RlL01TCm5vZHVsYXIKbm9kdWxlL01TCm5vZWwvTVMKbm9lcwpub2dnaW4vTVMKbm9ob3cKbm9pc2UvRFNNRwpub2lzZWxlc3MvUFkKbm9pc2VsZXNzbmVzcy9NCm5vaXNlbWFrZXIvTVMKbm9pc2lseQpub2lzaW5lc3MvTQpub2lzb21lCm5vaXN5L1BUUgpub21hZC9TTQpub21hZGljCm5vbWVuY2xhdHVyZS9NUwpub21pbmFsL1kKbm9taW5hdGUvQUNHTlZEUwpub21pbmF0aW9uJ3MvQQpub21pbmF0aW9uL0NTTQpub21pbmF0aXZlL1NNCm5vbWluYXRvci9DU00Kbm9taW5lZS9NUwpub24Kbm9uYWJyYXNpdmUKbm9uYWJzb3JiZW50L1NNCm5vbmFjYWRlbWljCm5vbmFjY2VwdGFuY2UvTQpub25hY2lkCm5vbmFjdGl2ZS9NUwpub25hZGRpY3RpdmUKbm9uYWRoZXNpdmUKbm9uYWRqYWNlbnQKbm9uYWRqdXN0YWJsZQpub25hZG1pbmlzdHJhdGl2ZQpub25hZ2UvTVMKbm9uYWdlbmFyaWFuL01TCm5vbmFnZ3Jlc3Npb24vTQpub25hbGNvaG9saWMKbm9uYWxpZ25lZApub25hbGlnbm1lbnQvTQpub25hbGxlcmdpYwpub25hcHBlYXJhbmNlL01TCm5vbmFzc2lnbmFibGUKbm9uYXRobGV0aWMKbm9uYXR0ZW5kYW5jZS9NCm5vbmF1dG9tb3RpdmUKbm9uYXZhaWxhYmlsaXR5L00Kbm9uYmFzaWMKbm9uYmVsaWV2ZXIvTVMKbm9uYmVsbGlnZXJlbnQvTVMKbm9uYmluZGluZwpub25icmVha2FibGUKbm9uYnVybmFibGUKbm9uY2Fsb3JpYwpub25jYW5jZXJvdXMKbm9uY2UvTQpub25jaGFsYW5jZS9NCm5vbmNoYWxhbnQvWQpub25jaGFyZ2VhYmxlCm5vbmNsZXJpY2FsL01TCm5vbmNsaW5pY2FsCm5vbmNvbGxlY3RhYmxlCm5vbmNvbS9NUwpub25jb21iYXQKbm9uY29tYmF0YW50L01TCm5vbmNvbWJ1c3RpYmxlCm5vbmNvbW1lcmNpYWwvTVMKbm9uY29tbWl0dGFsL1kKbm9uY29tbXVuaWNhYmxlCm5vbmNvbXBldGluZwpub25jb21wZXRpdGl2ZQpub25jb21wbGlhbmNlL00Kbm9uY29tcGx5aW5nCm5vbmNvbXByZWhlbmRpbmcKbm9uY29uZHVjdGluZwpub25jb25kdWN0b3IvTVMKbm9uY29uZm9ybWluZwpub25jb25mb3JtaXNtCm5vbmNvbmZvcm1pc3QvTVMKbm9uY29uZm9ybWl0eS9NCm5vbmNvbnNlY3V0aXZlCm5vbmNvbnN0cnVjdGl2ZQpub25jb250YWdpb3VzCm5vbmNvbnRpbnVvdXMKbm9uY29udHJpYnV0aW5nCm5vbmNvbnRyaWJ1dG9yeQpub25jb250cm92ZXJzaWFsCm5vbmNvbnZlcnRpYmxlCm5vbmNvb3BlcmF0aW9uL00Kbm9uY29ycm9kaW5nCm5vbmNvcnJvc2l2ZQpub25jcmVkaXQKbm9uY3JpbWluYWwvU00Kbm9uY3JpdGljYWwKbm9uY3J5c3RhbGxpbmUKbm9uY3VtdWxhdGl2ZQpub25jdXN0b2RpYWwKbm9uZGFpcnkKbm9uZGVkdWN0aWJsZS9NCm5vbmRlbGl2ZXJ5L1NNCm5vbmRlbW9jcmF0aWMKbm9uZGVub21pbmF0aW9uYWwKbm9uZGVwYXJ0bWVudGFsCm5vbmRlcHJlY2lhdGluZwpub25kZXNjcmlwdApub25kZXN0cnVjdGl2ZQpub25kZXRhY2hhYmxlCm5vbmRpc2NpcGxpbmFyeQpub25kaXNjbG9zdXJlL00Kbm9uZGlzY3JpbWluYXRpb24vTQpub25kaXNjcmltaW5hdG9yeQpub25kcmFtYXRpYwpub25kcmlua2VyL01TCm5vbmRyeWluZwpub25lCm5vbmVkdWNhdGlvbmFsCm5vbmVmZmVjdGl2ZQpub25lbGFzdGljCm5vbmVsZWN0cmljCm5vbmVsZWN0cmljYWwKbm9uZW1wdHkKbm9uZW5mb3JjZWFibGUKbm9uZW50aXR5L1NNCm5vbmVxdWl2YWxlbnQvTVMKbm9uZXNzZW50aWFsCm5vbmVzdWNoL01TCm5vbmV0aGVsZXNzCm5vbmV2ZW50L01TCm5vbmV4Y2hhbmdlYWJsZQpub25leGNsdXNpdmUKbm9uZXhlbXB0L00Kbm9uZXhpc3RlbmNlL00Kbm9uZXhpc3RlbnQKbm9uZXhwbG9zaXZlL01TCm5vbmZhY3R1YWwKbm9uZmFkaW5nCm5vbmZhdApub25mYXRhbApub25mYXR0ZW5pbmcKbm9uZmVycm91cwpub25maWN0aW9uL00Kbm9uZmljdGlvbmFsCm5vbmZsYW1tYWJsZQpub25mbG93ZXJpbmcKbm9uZmx1Y3R1YXRpbmcKbm9uZmx5aW5nCm5vbmZvb2QvTQpub25mcmVlemluZwpub25mdW5jdGlvbmFsCm5vbmdvdmVybm1lbnRhbApub25ncmFudWxhcgpub25oYXphcmRvdXMKbm9uaGVyZWRpdGFyeQpub25odW1hbgpub25pZGVudGljYWwKbm9uaW5jbHVzaXZlCm5vbmluZGVwZW5kZW50Cm5vbmluZHVzdHJpYWwKbm9uaW5mZWN0aW91cwpub25pbmZsYW1tYXRvcnkKbm9uaW5mbGF0aW9uYXJ5Cm5vbmluZmxlY3RlZApub25pbnRlbGxlY3R1YWwvTVMKbm9uaW50ZXJjaGFuZ2VhYmxlCm5vbmludGVyZmVyZW5jZS9NCm5vbmludGVydmVudGlvbi9NCm5vbmludG94aWNhdGluZwpub25pbnZhc2l2ZQpub25pcnJpdGF0aW5nCm5vbmlzc3VlCm5vbmp1ZGdtZW50YWwKbm9uanVkaWNpYWwKbm9ubGVnYWwKbm9ubGV0aGFsCm5vbmxpbmVhcgpub25saXRlcmFyeQpub25saXZpbmcvTQpub25tYWduZXRpYwpub25tYWxpZ25hbnQKbm9ubWVtYmVyL01TCm5vbm1ldGFsL1NNCm5vbm1ldGFsbGljCm5vbm1pZ3JhdG9yeQpub25taWxpdGFudApub25taWxpdGFyeQpub25uYXJjb3RpYy9TTQpub25uYXRpdmUvTVMKbm9ubmVnb3RpYWJsZQpub25udWNsZWFyCm5vbm51bWVyaWNhbApub25vYmplY3RpdmUKbm9ub2JsaWdhdG9yeQpub25vYnNlcnZhbmNlL00Kbm9ub2JzZXJ2YW50Cm5vbm9jY3VwYXRpb25hbApub25vY2N1cmVuY2UKbm9ub2ZmaWNpYWwKbm9ub3BlcmF0aW9uYWwKbm9ub3BlcmF0aXZlCm5vbnBhcmFsbGVsL01TCm5vbnBhcmVpbC9NUwpub25wYXJ0aWNpcGFudC9NUwpub25wYXJ0aWNpcGF0aW5nCm5vbnBhcnRpc2FuL1NNCm5vbnBheWluZwpub25wYXltZW50L1NNCm5vbnBlcmZvcm1hbmNlL00Kbm9ucGVyZm9ybWluZwpub25wZXJpc2hhYmxlCm5vbnBlcnNvbi9NUwpub25waHlzaWNhbC9ZCm5vbnBsdXMvUwpub25wbHVzc2VkCm5vbnBsdXNzaW5nCm5vbnBvaXNvbm91cwpub25wb2xpdGljYWwKbm9ucG9sbHV0aW5nCm5vbnBvcm91cwpub25wcmFjdGljaW5nCm5vbnByZWp1ZGljaWFsCm5vbnByZXNjcmlwdGlvbgpub25wcm9kdWN0aXZlCm5vbnByb2Zlc3Npb25hbC9TTQpub25wcm9maXQvU01CCm5vbnByb2xpZmVyYXRpb24vTQpub25wdWJsaWMKbm9ucHVuaXNoYWJsZQpub25yYWNpYWwKbm9ucmFkaW9hY3RpdmUKbm9ucmFuZG9tCm5vbnJlYWN0aXZlCm5vbnJlY2lwcm9jYWwvU00Kbm9ucmVjaXByb2NhdGluZwpub25yZWNvZ25pdGlvbi9NCm5vbnJlY292ZXJhYmxlCm5vbnJlY3VycmluZwpub25yZWRlZW1hYmxlCm5vbnJlZmlsbGFibGUKbm9ucmVmdW5kYWJsZQpub25yZWxpZ2lvdXMKbm9ucmVuZXdhYmxlCm5vbnJlcHJlc2VudGF0aW9uYWwKbm9ucmVzaWRlbnQvTVMKbm9ucmVzaWRlbnRpYWwKbm9ucmVzaWR1YWwvTQpub25yZXNpc3RhbmNlL00Kbm9ucmVzaXN0YW50Cm5vbnJlc3RyaWN0aXZlCm5vbnJldHVybmFibGUvTVMKbm9ucmh5dGhtaWMKbm9ucmlnaWQKbm9uc2FsYXJpZWQKbm9uc2NoZWR1bGVkCm5vbnNjaWVudGlmaWMKbm9uc2NvcmluZwpub25zZWFzb25hbApub25zZWN0YXJpYW4Kbm9uc2VjdWxhcgpub25zZWdyZWdhdGVkCm5vbnNlbnNlL00Kbm9uc2Vuc2ljYWwvWQpub25zZW5zaXRpdmUKbm9uc2V4aXN0Cm5vbnNleHVhbApub25za2lkCm5vbnNsaXAKbm9uc21va2VyL1NNCm5vbnNtb2tpbmcKbm9uc29jaWFsCm5vbnNwZWFraW5nCm5vbnNwZWNpYWxpc3QvTVMKbm9uc3BlY2lhbGl6aW5nCm5vbnNwZWNpZmljCm5vbnNwaXJpdHVhbC9TTQpub25zdGFpbmluZwpub25zdGFuZGFyZApub25zdGFydGVyL01TCm5vbnN0aWNrCm5vbnN0b3AKbm9uc3RyYXRlZ2ljCm5vbnN0cmlraW5nCm5vbnN0cnVjdHVyYWwKbm9uc3VjY2Vzc2l2ZQpub25zdXBwb3J0L0dNCm5vbnN1cmdpY2FsCm5vbnN1c3RhaW5pbmcKbm9uc3ltcGF0aGl6ZXIvTQpub250YXJuaXNoYWJsZQpub250YXhhYmxlCm5vbnRlY2huaWNhbApub250ZW51cmVkCm5vbnRoZWF0cmljYWwKbm9udGhpbmtpbmcKbm9udGhyZWF0ZW5pbmcKbm9udG94aWMKbm9udHJhZGl0aW9uYWwKbm9udHJhbnNmZXJhYmxlCm5vbnRyYW5zcGFyZW50Cm5vbnRyaXZpYWwKbm9udHJvcGljYWwKbm9udW5pZm9ybQpub251bmlvbgpub251c2VyL01TCm5vbnZlbm9tb3VzCm5vbnZlcmJhbApub252aWFibGUKbm9udmlvbGVuY2UvTQpub252aW9sZW50L1kKbm9udmlydWxlbnQKbm9udm9jYWwKbm9udm9jYXRpb25hbApub252b2xhdGlsZQpub252b3Rlci9NUwpub252b3RpbmcKbm9ud2hpdGUvTVMKbm9ud29ya2luZwpub255aWVsZGluZwpub256ZXJvCm5vb2RsZS9NR0RTCm5vb2svTVMKbm9va2llCm5vb2t5Cm5vb24vTQpub29uZGF5L00Kbm9vbnRpZGUvTQpub29udGltZS9NCm5vb3NlL1NNCm5vcGUKbm9yCm5vcidlYXN0ZXIKbm9ybS9NUwpub3JtYWwvTVkKbm9ybWFsY3kvTQpub3JtYWxpdHkvTQpub3JtYWxpemF0aW9uL00Kbm9ybWFsaXplL0RTRwpub3JtYXRpdmUKbm9ydGgvWk1SCm5vcnRoYm91bmQKbm9ydGhlYXN0L01SWgpub3J0aGVhc3Rlci9NWQpub3J0aGVhc3Rlcm4Kbm9ydGhlYXN0d2FyZC9TCm5vcnRoZXIvTVkKbm9ydGhlcmx5L1NNCm5vcnRoZXJuL1pSCm5vcnRoZXJuZXIvTQpub3J0aGVybm1vc3QKbm9ydGh3YXJkL1MKbm9ydGh3ZXN0L1pNUgpub3J0aHdlc3Rlci9NWQpub3J0aHdlc3Rlcm4Kbm9ydGh3ZXN0d2FyZC9TCm5vc2UvTUdEUwpub3NlYmFnL1MKbm9zZWJsZWVkL01TCm5vc2Vjb25lL1NNCm5vc2VkaXZlL0RTTUcKbm9zZWdheS9TTQpub3NoL01EUlNaRwpub3NoZXIvTQpub3NpbHkKbm9zaW5lc3MvTQpub3N0YWxnaWEvTQpub3N0YWxnaWMKbm9zdGFsZ2ljYWxseQpub3N0cmlsL01TCm5vc3RydW0vTVMKbm9zeS9SUFQKbm90L0IKbm90YWJpbGl0eS9TTQpub3RhYmxlL1NNCm5vdGFibHkKbm90YXJpYWwKbm90YXJpemF0aW9uL00Kbm90YXJpemUvR0RTCm5vdGFyeS9TTQpub3RhdGUvR0RTCm5vdGF0aW9uL0ZDU00Kbm90Y2gvR01EUwpub3RlJ3MKbm90ZS9GQ1NERwpub3RlYm9vay9NUwpub3RlbGV0L1MKbm90ZXBhZC9TCm5vdGVwYXBlci9NCm5vdGV3b3J0aGluZXNzL00Kbm90ZXdvcnRoeS9QCm5vdGhpbmcvUFNNCm5vdGhpbmduZXNzL00Kbm90aWNlL01HRFMKbm90aWNlYWJsZS9VCm5vdGljZWFibHkKbm90aWNlYm9hcmQvUwpub3RpY2VkL1UKbm90aWZpYWJsZQpub3RpZmljYXRpb24vTQpub3RpZmllci9NCm5vdGlmeS9ORFJTWFpHCm5vdGlvbi9NUwpub3Rpb25hbC9ZCm5vdG9yaWV0eS9NCm5vdG9yaW91cy9ZCm5vdHdpdGhzdGFuZGluZwpub3R3b3JrL1MKbm91Z2F0L01TCm5vdW4vS01TCm5vdXJpc2gvRFNMRwpub3VyaXNobWVudC9NCm5vdXMKbm92YS9NUwpub3ZhZQpub3ZlbC9TTQpub3ZlbGV0dGUvU00Kbm92ZWxpc3QvU00Kbm92ZWxpemF0aW9uL01TCm5vdmVsaXplL0RTRwpub3ZlbGxhL01TCm5vdmVsdHkvU00Kbm92ZW5hL01TCm5vdmVuZQpub3ZpY2UvTVMKbm92aXRpYXRlL01TCm5vdy9NCm5vd2FkYXlzL00Kbm93YXkvUwpub3doZXJlL00Kbm93aXNlCm5vd3QKbm94aW91cwpub3p6bGUvTVMKbnUvU00KbnVhbmNlL01EUwpudWIvU00KbnViYmluL01TCm51YmJ5L1RSCm51YmlsZQpudWNsZWFyL0sKbnVjbGVhdGUvRFNHTgpudWNsZWF0aW9uL00KbnVjbGVpCm51Y2xlaWMKbnVjbGVvbGkKbnVjbGVvbHVzL00KbnVjbGVvbi9TTQpudWNsZW9zaWRlCm51Y2xlb3RpZGUKbnVjbGV1cy9NCm51ZGUvTVRSUwpudWRnZS9HRFNNCm51ZGlzbS9NCm51ZGlzdC9TTQpudWRpdHkvTQpudWdhdG9yeQpudWdnZXQvU00KbnVpc2FuY2UvTVMKbnVrZS9NR0RTCm51bGwvUwpudWxsaWZpY2F0aW9uL00KbnVsbGlmeS9ORFNHCm51bGxpdHkvTQpudW1iL1pUR1BEUllTCm51bWJlcidzCm51bWJlci9BU0RHCm51bWJlcmVkL1UKbnVtYmVybGVzcwpudW1ibmVzcy9NCm51bWVyYWJsZS9JCm51bWVyYWN5L0lNCm51bWVyYWwvU00KbnVtZXJhdGUvWEdORFMKbnVtZXJhdGlvbi9NCm51bWVyYXRvci9NUwpudW1lcmljCm51bWVyaWNhbC9ZCm51bWVyb2xvZ2lzdC9NUwpudW1lcm9sb2d5L00KbnVtZXJvdXMvWQpudW1pbm91cwpudW1pc21hdGljL1MKbnVtaXNtYXRpY3MvTQpudW1pc21hdGlzdC9TTQpudW1za3VsbC9NUwpudW4vU00KbnVuY2lvL1NNCm51bm5lcnkvU00KbnVwdGlhbC9NUwpudXJzZS9NWkdEUlMKbnVyc2VsaW5ncwpudXJzZW1haWQvTVMKbnVyc2VyL00KbnVyc2VyeS9TTQpudXJzZXJ5bWFuL00KbnVyc2VyeW1lbgpudXJzaW5nL00KbnVyc2xpbmcvU00KbnVydHVyZS9EUlNNWkcKbnVydHVyZXIvTQpudXQvU00KbnV0Y2FzZS9TCm51dGNyYWNrZXIvTVMKbnV0aGF0Y2gvTVMKbnV0aG91c2UvUwpudXRtZWF0L1NNCm51dG1lZy9TTQpudXRwaWNrL1NNCm51dHJpYS9TTQpudXRyaWVudC9NUwpudXRyaW1lbnQvTVMKbnV0cml0aW9uL00KbnV0cml0aW9uYWwvWQpudXRyaXRpb25pc3QvU00KbnV0cml0aW91cy9ZUApudXRyaXRpb3VzbmVzcy9NCm51dHJpdGl2ZQpudXRzaGVsbC9NUwpudXR0ZWQKbnV0dGVyL1MKbnV0dGluZXNzL00KbnV0dGluZwpudXR0eS9SVFAKbnV6emxlL0RSU01aRwpudXp6bGVyL00KbnliYmxlL1MKbnlsb24vTVMKbnlsb25zL00KbnltcGgvTQpueW1waGV0L01TCm55bXBoby9TCm55bXBob21hbmlhL00KbnltcGhvbWFuaWFjL1NNCm55bXBocwpvCm8nY2xvY2sKbydlcgpvYWYvU00Kb2FmaXNoL1BZCm9hZmlzaG5lc3MvTQpvYWsvU01OCm9ha3VtL00Kb2FyL1NHTUQKb2FybG9jay9TTQpvYXJzbWFuL00Kb2Fyc21lbgpvYXJzd29tYW4vTQpvYXJzd29tZW4Kb2FzZXMKb2FzaXMvTQpvYXQvU01OCm9hdGNha2UvU00Kb2F0aC9NCm9hdGhzCm9hdG1lYWwvTQpvYXRzL00Kb2IvUwpvYmJsaWdhdG8vTVMKb2JkdXJhY3kvTQpvYmR1cmF0ZS9QWQpvYmR1cmF0ZW5lc3MvTQpvYmVkaWVuY2UvRU0Kb2JlZGllbnQvRVkKb2JlaXNhbmNlL1NNCm9iZWlzYW50Cm9iZWxpc2svTVMKb2Jlc2UKb2Jlc2l0eS9NCm9iZXkvRURTRwpvYmZ1c2NhdGUvR05YRFMKb2JmdXNjYXRpb24vTQpvYmkvU00Kb2JpdC9NUwpvYml0dWFyeS9TTQpvYmoKb2JqZWN0L1NHVk1ECm9iamVjdGlmeS9OR0RTCm9iamVjdGlvbi9TTUIKb2JqZWN0aW9uYWJsZS9VCm9iamVjdGlvbmFibHkKb2JqZWN0aXZlL1NNWVAKb2JqZWN0aXZlbmVzcy9NCm9iamVjdGl2aXR5L00Kb2JqZWN0b3IvTVMKb2JqdXJnYXRlL1hHTkRTCm9ianVyZ2F0aW9uL00Kb2JsYXRlL05YCm9ibGF0aW9uL00Kb2JsaWdhdGUvRFNYR04Kb2JsaWdhdGlvbi9NCm9ibGlnYXRvcmlseQpvYmxpZ2F0b3J5Cm9ibGlnZS9FR0RTCm9ibGlnaW5nL1kKb2JsaXF1ZS9TTVlQCm9ibGlxdWVuZXNzL00Kb2JsaXF1aXR5L00Kb2JsaXRlcmF0ZS9EU0dOCm9ibGl0ZXJhdGlvbi9NCm9ibGl2aW9uL00Kb2JsaXZpb3VzL1lQCm9ibGl2aW91c25lc3MvTQpvYmxvbmcvTVMKb2Jsb3F1eS9NCm9ibm94aW91cy9ZUApvYm5veGlvdXNuZXNzL00Kb2JvZS9NUwpvYm9pc3QvTVMKb2JzY2VuZS9SWVQKb2JzY2VuaXR5L1NNCm9ic2N1cmFudGlzbS9NCm9ic2N1cmFudGlzdC9TTQpvYnNjdXJlL0RSU1lURwpvYnNjdXJpdHkvU00Kb2JzZXF1aWVzCm9ic2VxdWlvdXMvUFkKb2JzZXF1aW91c25lc3MvTQpvYnNlcXV5L00Kb2JzZXJ2YWJseQpvYnNlcnZhbmNlL01TCm9ic2VydmFudC9ZCm9ic2VydmF0aW9uL1NNCm9ic2VydmF0aW9uYWwKb2JzZXJ2YXRvcnkvU00Kb2JzZXJ2ZS9EUlNCWkcKb2JzZXJ2ZWQvVQpvYnNlcnZlci9NCm9ic2Vzcy9EU0dWCm9ic2Vzc2lvbi9TTQpvYnNlc3Npb25hbC9ZCm9ic2Vzc2l2ZS9QU01ZCm9ic2Vzc2l2ZW5lc3MvTQpvYnNpZGlhbi9NCm9ic29sZXNjZS9EU0cKb2Jzb2xlc2NlbmNlL00Kb2Jzb2xlc2NlbnQKb2Jzb2xldGUvR0RTCm9ic3RhY2xlL01TCm9ic3RldHJpYy9TCm9ic3RldHJpY2FsCm9ic3RldHJpY2lhbi9TTQpvYnN0ZXRyaWNzL00Kb2JzdGluYWN5L00Kb2JzdGluYXRlL1kKb2JzdHJlcGVyb3VzL1lQCm9ic3RyZXBlcm91c25lc3MvTQpvYnN0cnVjdC9ER1ZTCm9ic3RydWN0ZWQvVQpvYnN0cnVjdGlvbi9TTQpvYnN0cnVjdGlvbmlzbS9NCm9ic3RydWN0aW9uaXN0L01TCm9ic3RydWN0aXZlL1lQCm9ic3RydWN0aXZlbmVzcy9NCm9idGFpbi9EQkxHUwpvYnRhaW5hYmxlL1UKb2J0YWlubWVudC9NCm9idHJ1ZGUvRFNHCm9idHJ1c2lvbi9NCm9idHJ1c2l2ZS9VUFkKb2J0cnVzaXZlbmVzcy9VTQpvYnR1c2UvWVRSUApvYnR1c2VuZXNzL00Kb2J2ZXJzZS9TTQpvYnZpYXRlL0RTR04Kb2J2aWF0aW9uL00Kb2J2aW91cy9QWQpvYnZpb3VzbmVzcy9NCm9jYXJpbmEvTVMKb2NjYXNpb24vR01EUwpvY2Nhc2lvbmFsL1kKb2NjaWRlbnRhbC9TTQpvY2NsdWRlL0dEUwpvY2NsdXNpb24vU00Kb2NjbHVzaXZlCm9jY3VsdC9NCm9jY3VsdGlzbS9NCm9jY3VsdGlzdC9TTQpvY2N1cGFuY3kvTQpvY2N1cGFudC9TTQpvY2N1cGF0aW9uL0FNCm9jY3VwYXRpb25hbC9ZCm9jY3VwYXRpb25zCm9jY3VwaWVkL1UKb2NjdXBpZXIvU00Kb2NjdXB5L0FEU0cKb2NjdXIvQVMKb2NjdXJyZWQvQQpvY2N1cnJlbmNlL1NNCm9jY3VycmluZy9BCm9jZWFuL1NNCm9jZWFuZnJvbnQvU00Kb2NlYW5nb2luZwpvY2VhbmljL00Kb2NlYW5vZ3JhcGhlci9TTQpvY2Vhbm9ncmFwaGljCm9jZWFub2dyYXBoeS9NCm9jZWFub2xvZ3kvTQpvY2Vsb3QvTVMKb2NoL1IKb2NoZXIvTQpvY2tlci9TCm9jdGFnb24vTVMKb2N0YWdvbmFsCm9jdGFsCm9jdGFuZS9NUwpvY3RhdmUvTVMKb2N0YXZvL01TCm9jdGV0L1NNCm9jdG9nZW5hcmlhbi9TTQpvY3RvcHVzL01TCm9jdWxhci9NUwpvY3VsaXN0L1NNCm9kYWxpc3F1ZS9TTQpvZGQvU1RSWUxQCm9kZGJhbGwvU00Kb2RkaXR5L1NNCm9kZG1lbnQvU00Kb2RkbmVzcy9NCm9kZHMvTQpvZGUvU00Kb2Rpb3VzL1lQCm9kaW91c25lc3MvTQpvZGl1bS9NCm9kb21ldGVyL01TCm9kb3IvTURTCm9kb3JpZmVyb3VzCm9kb3JsZXNzCm9kb3JvdXMKb2R5c3NleS9NUwpvZWRpcGFsCm9lbm9sb2d5L00Kb2Vub3BoaWxlL1NNCm9ldXZyZS9NUwpvZgpvZmYvU1pHRFJKCm9mZmFsL00Kb2ZmYmVhdC9NUwpvZmZlbmQvWkdEUlMKb2ZmZW5kZXIvTQpvZmZlbnNlL01TCm9mZmVuc2l2ZSdzCm9mZmVuc2l2ZS9JUFkKb2ZmZW5zaXZlbmVzcy9JTQpvZmZlbnNpdmVzCm9mZmVyL0pHTUQKb2ZmZXJpbmcvTQpvZmZlcnRvcnkvU00Kb2ZmaGFuZApvZmZoYW5kZWQvUFkKb2ZmaGFuZGVkbmVzcy9NCm9mZmljZS9NWlJTCm9mZmljZWhvbGRlci9TTQpvZmZpY2VyL00Kb2ZmaWNpYWwvTVlTCm9mZmljaWFsZG9tL00Kb2ZmaWNpYWxlc2UKb2ZmaWNpYWxpc20vTQpvZmZpY2lhbnQvU00Kb2ZmaWNpYXRlL0RTRwpvZmZpY2lhdG9yL01TCm9mZmljaW91cy9QWQpvZmZpY2lvdXNuZXNzL00Kb2ZmaW5nL00Kb2ZmaXNoCm9mZmxpbmUKb2ZmbG9hZC9TREcKb2ZmcHJpbnQvU00Kb2Zmc2V0L01TCm9mZnNldHRpbmcKb2Zmc2hvb3QvTVMKb2Zmc2hvcmUvRwpvZmZzaWRlCm9mZnNpdGUKb2Zmc3ByaW5nL00Kb2Zmc3RhZ2UvUwpvZmZ0cmFjawpvZnQKb2Z0ZW4vVFIKb2Z0ZW50aW1lcwpvZnR0aW1lcwpvZ2xlL01aR0RSUwpvZ2xlci9NCm9ncmUvTVMKb2dyZWlzaApvZ3Jlc3MvTVMKb2gvTQpvaG0vU00Kb2htbWV0ZXIvTVMKb2hvCm9ocwpvaQpvaWsvUwpvaWwvU0dNRApvaWxjYW4vUwpvaWxjbG90aC9NCm9pbGNsb3RocwpvaWxmaWVsZC9TCm9pbGluZXNzL00Kb2lsbWFuCm9pbG1lbgpvaWxza2luL01TCm9pbHNraW5zL00Kb2lseS9SUFQKb2luay9NRFNHCm9pbnRtZW50L1NNCm9rYXBpL1NNCm9rYXkvTVNHCm9rcmEvTVMKb2xkL1RNTlJQCm9sZGllL1NNCm9sZGlzaApvbGRuZXNzL00Kb2xkc3Rlci9NUwpvbGUvU01WCm9sZWFnaW5vdXMKb2xlYW5kZXIvTVMKb2xlby9NCm9sZW9tYXJnYXJpbmUvTQpvbGZhY3RvcnkvU00Kb2xpZ2FyY2gvTQpvbGlnYXJjaGljCm9saWdhcmNoaWNhbApvbGlnYXJjaHMKb2xpZ2FyY2h5L1NNCm9saWdvbnVjbGVvdGlkZS9TCm9saWdvcG9seS9TTQpvbGl2ZS9TTQpvbS9TTU5YCm9tYnVkc21hbi9NCm9tYnVkc21lbgpvbWVnYS9TTQpvbWVsZXQvTVMKb21lbi9NCm9taWNyb24vTVMKb21pbm91cy9ZUApvbWlub3VzbmVzcy9NCm9taXNzaW9uL01TCm9taXQvUwpvbWl0dGVkCm9taXR0aW5nCm9tbmlidXMvTVMKb21uaXBvdGVuY2UvTQpvbW5pcG90ZW50Cm9tbmlwcmVzZW5jZS9NCm9tbmlwcmVzZW50Cm9tbmlzY2llbmNlL00Kb21uaXNjaWVudApvbW5pdm9yZS9NUwpvbW5pdm9yb3VzL1BZCm9tbml2b3JvdXNuZXNzL00Kb24vWQpvbmNlL00Kb25jb2dlbmUvU00Kb25jb2xvZ2lzdC9TTQpvbmNvbG9neS9NCm9uY29taW5nCm9uZS9TWE1OUApvbmVuZXNzL00Kb25lcm91cy9QWQpvbmVyb3VzbmVzcy9NCm9uZXNlbGYKb25ldGltZQpvbmdvaW5nCm9uaW9uL00Kb25pb25za2luL00Kb25saW5lCm9ubG9va2VyL1NNCm9ubG9va2luZwpvbm9tYXRvcG9laWEvTQpvbm9tYXRvcG9laWMKb25vbWF0b3BvZXRpYwpvbnJ1c2gvTVNHCm9uc2NyZWVuCm9uc2V0L01TCm9uc2hvcmUKb25zaWRlCm9uc2l0ZQpvbnNsYXVnaHQvTVMKb25zdGFnZQpvbnRvCm9udG9nZW55L00Kb250b2xvZ2ljYWwKb250b2xvZ3kvTQpvbnVzL01TCm9ud2FyZApvbnl4L01TCm9vZGxlcy9NCm9vaC9HRApvb2hzCm9vbXBoCm9vcHMKb296ZS9NR0RTCm9venkvVFIKb3AvU01ERwpvcGFjaXR5L00Kb3BhbC9NUwpvcGFsZXNjZW5jZS9NCm9wYWxlc2NlbnQKb3BhcXVlL1BZVEdEUlMKb3BhcXVlbmVzcy9NCm9wY29kZS9TCm9wZS9TCm9wZW4vWlRHSlBNRFJZUwpvcGVuY2FzdApvcGVuZWQvVQpvcGVuZXIvTQpvcGVuaGFuZGVkL1AKb3BlbmhhbmRlZG5lc3MvTQpvcGVuaGVhcnRlZApvcGVuaW5nL00Kb3Blbm5lc3MvTQpvcGVud29yay9NCm9wZXJhL01TCm9wZXJhYmxlL0kKb3BlcmFuZC9TCm9wZXJhdGUvRFNHTlZYCm9wZXJhdGljCm9wZXJhdGljYWxseQpvcGVyYXRpb24vTQpvcGVyYXRpb25hbC9ZCm9wZXJhdGl2ZS9TTQpvcGVyYXRvci9TTQpvcGVyZXR0YS9TTQpvcGh0aGFsbWljCm9waHRoYWxtb2xvZ2lzdC9TTQpvcGh0aGFsbW9sb2d5L00Kb3BpYXRlL1NNCm9waW5lL0dOWERTCm9waW5pb24vTQpvcGluaW9uYXRlZApvcGl1bS9NCm9wb3NzdW0vTVMKb3BwCm9wcG9uZW50L1NNCm9wcG9ydHVuZS9JWQpvcHBvcnR1bmlzbS9NCm9wcG9ydHVuaXN0L1NNCm9wcG9ydHVuaXN0aWMKb3Bwb3J0dW5pc3RpY2FsbHkKb3Bwb3J0dW5pdHkvU00Kb3Bwb3NlL0RTRwpvcHBvc2VkL1UKb3Bwb3NpdGUvU01ZTlgKb3Bwb3NpdGlvbi9NCm9wcHJlc3MvRFNHVgpvcHByZXNzaW9uL00Kb3BwcmVzc2l2ZS9ZUApvcHByZXNzaXZlbmVzcy9NCm9wcHJlc3Nvci9NUwpvcHByb2JyaW91cy9ZCm9wcHJvYnJpdW0vTQpvcHQvU0dECm9wdGljL01TCm9wdGljYWwvWQpvcHRpY2lhbi9TTQpvcHRpY3MvTQpvcHRpbWEKb3B0aW1hbC9ZCm9wdGltaXNtL1NNCm9wdGltaXN0L1NNCm9wdGltaXN0aWMKb3B0aW1pc3RpY2FsbHkKb3B0aW1pemF0aW9uL01TCm9wdGltaXplL0RSU0cKb3B0aW11bS9TTQpvcHRpb24vU01ERwpvcHRpb25hbC9ZCm9wdG9tZXRyaXN0L01TCm9wdG9tZXRyeS9NCm9wdWxlbmNlL00Kb3B1bGVudC9ZCm9wdXMvTVMKb3IKb3JhY2xlL1NNCm9yYWN1bGFyCm9yYWwvTVlTCm9yYW5nZS9TTVAKb3JhbmdlYWRlL01TCm9yYW5nZXJ5L1NNCm9yYW5ndXRhbi9TTQpvcmF0ZS9HTlhEUwpvcmF0aW9uL00Kb3JhdG9yL1NNCm9yYXRvcmljYWwvWQpvcmF0b3Jpby9NUwpvcmF0b3J5L1NNCm9yYi9TTQpvcmJpY3VsYXIKb3JiaXQvTURSWkdTCm9yYml0YWwvU00Kb3JiaXRlci9NCm9yYy9TTQpvcmNoYXJkL1NNCm9yY2hlc3RyYS9NUwpvcmNoZXN0cmFsCm9yY2hlc3RyYXRlL0RTWEdOCm9yY2hlc3RyYXRpb24vTQpvcmNoaWQvU00Kb3JkYWluL1NETEcKb3JkYWlubWVudC9NCm9yZGVhbC9TTQpvcmRlci9FQU1ER1MKb3JkZXJpbmdzCm9yZGVybGluZXNzL0VNCm9yZGVybHkvUFNNCm9yZGluYWwvU00Kb3JkaW5hbmNlL1NNCm9yZGluYXJpbHkKb3JkaW5hcmluZXNzL00Kb3JkaW5hcnkvU01QCm9yZGluYXRlL01OU1gKb3JkaW5hdGlvbi9NCm9yZG5hbmNlL00Kb3JkdXJlL00Kb3JlL1NNCm9yZWdhbm8vTQpvcmcKb3JnYW4vTVMKb3JnYW5keS9NCm9yZ2FuZWxsZS9NUwpvcmdhbmljL1NNCm9yZ2FuaWNhbGx5L0kKb3JnYW5pc20vTVMKb3JnYW5pc21pYwpvcmdhbmlzdC9NUwpvcmdhbml6YXRpb24vQVNNCm9yZ2FuaXphdGlvbmFsL1kKb3JnYW5pemUvQUVTREcKb3JnYW5pemVkL1UKb3JnYW5pemVyL01TCm9yZ2FuemEvTQpvcmdhc20vU00Kb3JnYXNtaWMKb3JnaWFzdGljCm9yZ3kvU00Kb3JpZWwvTVMKb3JpZW50J3MKb3JpZW50L0FFREdTCm9yaWVudGFsL01TCm9yaWVudGFsaXN0L1MKb3JpZW50YXRlL0VEU0dOCm9yaWVudGF0aW9uL0FFTQpvcmllbnRhdGlvbnMKb3JpZW50ZWVyaW5nCm9yaWZpY2UvTVMKb3JpZwpvcmlnYW1pL00Kb3JpZ2luL1NNCm9yaWdpbmFsL01ZUwpvcmlnaW5hbGl0eS9NCm9yaWdpbmF0ZS9EU0dOCm9yaWdpbmF0aW9uL00Kb3JpZ2luYXRvci9TTQpvcmlvbGUvU00Kb3Jpc29uL1NNCm9ybW9sdS9NCm9ybmFtZW50L1NHTUQKb3JuYW1lbnRhbApvcm5hbWVudGF0aW9uL00Kb3JuYXRlL1lQCm9ybmF0ZW5lc3MvTQpvcm5lcmluZXNzL00Kb3JuZXJ5L1BSVApvcm5pdGhvbG9naWNhbApvcm5pdGhvbG9naXN0L01TCm9ybml0aG9sb2d5L00Kb3JvdHVuZApvcm90dW5kaXR5L1NNCm9ycGhhbi9TTURHCm9ycGhhbmFnZS9NUwpvcnJpcy9NUwpvcnRob2RvbnRpYS9NCm9ydGhvZG9udGljL1MKb3J0aG9kb250aWNzL00Kb3J0aG9kb250aXN0L1NNCm9ydGhvZG94L1UKb3J0aG9kb3h5L1NNCm9ydGhvZ29uYWwKb3J0aG9nb25hbGl0eQpvcnRob2dyYXBoaWMKb3J0aG9ncmFwaGljYWxseQpvcnRob2dyYXBoeS9TTQpvcnRob3BlZGljL1MKb3J0aG9wZWRpY3MvTQpvcnRob3BlZGlzdC9NUwpvcnpvL00Kb3NjaWxsYXRlL0dORFNYCm9zY2lsbGF0aW9uL00Kb3NjaWxsYXRvci9TTQpvc2NpbGxhdG9yeQpvc2NpbGxvc2NvcGUvTVMKb3NjdWxhdGUvRFNYR04Kb3NjdWxhdGlvbi9NCm9zaWVyL01TCm9zbWl1bS9NCm9zbW9zaXMvTQpvc21vdGljCm9zcHJleS9TTQpvc3NpZmljYXRpb24vTQpvc3NpZnkvTkdEUwpvc3RlbnNpYmxlCm9zdGVuc2libHkKb3N0ZW50YXRpb24vTQpvc3RlbnRhdGlvdXMvWQpvc3Rlb2FydGhyaXRpcy9NCm9zdGVvcGF0aC9NCm9zdGVvcGF0aGljCm9zdGVvcGF0aHMKb3N0ZW9wYXRoeS9NCm9zdGVvcG9yb3Npcy9NCm9zdGxlci9TCm9zdHJhY2lzbS9NCm9zdHJhY2l6ZS9HRFMKb3N0cmljaC9NUwpvdGhlci9TUApvdGhlcndpc2UKb3RoZXJ3b3JsZGx5Cm90aW9zZQpvdHRlci9NUwpvdHRvbWFuL01TCm91YmxpZXR0ZS9NUwpvdWNoCm91Z2h0Cm91Z2h0bid0Cm91bmNlL01TCm91ci9TCm91cnNlbHZlcwpvdXN0L1pHRFJTCm91c3Rlci9NCm91dC9TSkdNRFIKb3V0YWdlL1NNCm91dGFyZ3VlL0dEUwpvdXRiYWNrL01TCm91dGJhbGFuY2UvRFNHCm91dGJpZC9TCm91dGJpZGRpbmcKb3V0Ym9hcmQvTVMKb3V0Ym9hc3QvRFNHCm91dGJvdW5kCm91dGJveC9NUwpvdXRicmVhay9NUwpvdXRidWlsZGluZy9NUwpvdXRidXJzdC9TTQpvdXRjYXN0L01TCm91dGNsYXNzL0RTRwpvdXRjb21lL01TCm91dGNyb3AvTVMKb3V0Y3JvcHBlZApvdXRjcm9wcGluZy9TTQpvdXRjcnkvU00Kb3V0ZGF0ZWQKb3V0ZGlkCm91dGRpc3RhbmNlL0dEUwpvdXRkby9HCm91dGRvZXMKb3V0ZG9uZQpvdXRkb29yL1MKb3V0ZG9vcnMvTQpvdXRkb29yc3kKb3V0ZHJhdy9HUwpvdXRkcmF3bgpvdXRkcmV3Cm91dGVybW9zdApvdXRlcndlYXIvTQpvdXRmYWNlL0dEUwpvdXRmYWxsL1MKb3V0ZmllbGQvU01SWgpvdXRmaWVsZGVyL00Kb3V0ZmlnaHQvU0cKb3V0Zml0L1NNCm91dGZpdHRlZApvdXRmaXR0ZXIvTVMKb3V0Zml0dGluZwpvdXRmbGFuay9HU0QKb3V0Zmxvdy9NUwpvdXRmb3VnaHQKb3V0Zm94L0dEUwpvdXRnby9NSkcKb3V0Z29lcwpvdXRncmV3Cm91dGdyb3cvSEdTCm91dGdyb3duCm91dGdyb3d0aC9NCm91dGdyb3d0aHMKb3V0Z3Vlc3MvR0RTCm91dGd1bi9TCm91dGd1bm5lZApvdXRndW5uaW5nCm91dGhpdC9TCm91dGhpdHRpbmcKb3V0aG91c2UvU00Kb3V0aW5nL00Kb3V0bGFpZApvdXRsYW5kaXNoL1BZCm91dGxhbmRpc2huZXNzL00Kb3V0bGFzdC9EU0cKb3V0bGF3L1NHTUQKb3V0bGF5L1NHTQpvdXRsZXQvU00Kb3V0bGluZS9NR0RTCm91dGxpdmUvR0RTCm91dGxvb2svTVMKb3V0bHlpbmcKb3V0bWFuZXV2ZXIvR0RTCm91dG1hdGNoL0dEUwpvdXRtb2RlZApvdXRudW1iZXIvRFNHCm91dHBhY2UvR0RTCm91dHBhdGllbnQvTVMKb3V0cGVyZm9ybS9HU0QKb3V0cGxhY2UvTApvdXRwbGFjZW1lbnQvTQpvdXRwbGF5L0dEUwpvdXRwb2ludC9ER1MKb3V0cG9zdC9NUwpvdXRwb3VyaW5nL01TCm91dHByb2R1Y2UvRFNHCm91dHB1dC9TTQpvdXRwdXR0ZWQKb3V0cHV0dGluZwpvdXRyYWNlL0dEUwpvdXRyYWdlL01HRFMKb3V0cmFnZW91cy9ZCm91dHJhbgpvdXRyYW5rL0dEUwpvdXRyZQpvdXRyZWFjaC9NRFNHCm91dHJpZGVyL01TCm91dHJpZ2dlci9TTQpvdXRyaWdodApvdXRydW4vUwpvdXRydW5uaW5nCm91dHNjb3JlL0dEUwpvdXRzZWxsL0dTCm91dHNldC9TTQpvdXRzaGluZS9HUwpvdXRzaG9uZQpvdXRzaG91dC9HRFMKb3V0c2lkZS9NWlJTCm91dHNpZGVyL00Kb3V0c2l6ZS9NUwpvdXRza2lydC9NUwpvdXRzbWFydC9HRFMKb3V0c29sZApvdXRzb3VyY2UvRFNHCm91dHNvdXJjaW5nL00Kb3V0c3BlbmQvU0cKb3V0c3BlbnQKb3V0c3Bva2VuL1lQCm91dHNwb2tlbm5lc3MvTQpvdXRzcHJlYWQvR1MKb3V0c3RhbmRpbmcvWQpvdXRzdGF0aW9uL01TCm91dHN0YXkvREdTCm91dHN0cmV0Y2gvRFNHCm91dHN0cmlwL1MKb3V0c3RyaXBwZWQKb3V0c3RyaXBwaW5nCm91dHRhCm91dHRha2UvTVMKb3V0dm90ZS9HRFMKb3V0d2FyZC9ZUwpvdXR3ZWFyL0dTCm91dHdlaWdoL0dECm91dHdlaWdocwpvdXR3aXQvUwpvdXR3aXRoCm91dHdpdHRlZApvdXR3aXR0aW5nCm91dHdvcmUKb3V0d29yay9NRFJTWkcKb3V0d29ybgpvdXpvL01TCm92YQpvdmFsL01TCm92YXJpYW4Kb3ZhcnkvU00Kb3ZhdGUvTlgKb3ZhdGlvbi9NCm92ZW4vTVMKb3ZlbmJpcmQvU00Kb3ZlbnByb29mCm92ZW53YXJlCm92ZXIvTVlTCm92ZXJhYnVuZGFuY2UvTQpvdmVyYWJ1bmRhbnQKb3ZlcmFjaGlldmUvWkdEUlMKb3ZlcmFjaGlldmVyL00Kb3ZlcmFjdC9HVlNECm92ZXJhZ2UvU00Kb3ZlcmFnZ3Jlc3NpdmUKb3ZlcmFsbC9TTQpvdmVyYWxscy9NCm92ZXJhbWJpdGlvdXMKb3ZlcmFueGlvdXMKb3ZlcmFyY2hpbmcKb3ZlcmFybS9HU0QKb3ZlcmF0ZQpvdmVyYXR0ZW50aXZlCm92ZXJhd2UvRFNHCm92ZXJiYWxhbmNlL01HRFMKb3ZlcmJlYXIvR1MKb3ZlcmJlYXJpbmcvWQpvdmVyYmlkL1NNCm92ZXJiaWRkaW5nCm92ZXJiaXRlL01TCm92ZXJibG93bgpvdmVyYm9hcmQKb3ZlcmJvbGQKb3ZlcmJvb2svREdTCm92ZXJib3JlCm92ZXJib3JuZQpvdmVyYm91Z2h0Cm92ZXJidWlsZC9TRwpvdmVyYnVpbHQKb3ZlcmJ1cmRlbi9HU0QKb3ZlcmJ1eS9HUwpvdmVyY2FtZQpvdmVyY2FwYWNpdHkvTQpvdmVyY2FwaXRhbGl6ZS9EU0cKb3ZlcmNhcmVmdWwKb3ZlcmNhc3QvTUdTCm92ZXJjYXV0aW91cwpvdmVyY2hhcmdlL0RTTUcKb3ZlcmNsb2NrL0dECm92ZXJjbG91ZC9TR0QKb3ZlcmNvYXQvTVMKb3ZlcmNvbWUvR1MKb3ZlcmNvbXBlbnNhdGUvRFNHTgpvdmVyY29tcGVuc2F0aW9uL00Kb3ZlcmNvbmZpZGVuY2UvTQpvdmVyY29uZmlkZW50Cm92ZXJjb25zY2llbnRpb3VzCm92ZXJjb29rL0RHUwpvdmVyY3JpdGljYWwKb3ZlcmNyb3dkL1NERwpvdmVyY3Jvd2RpbmcvTQpvdmVyZGVjb3JhdGUvRFNHCm92ZXJkZXBlbmRlbnQKb3ZlcmRldmVsb3AvU0RHCm92ZXJkaWQKb3ZlcmRvL0cKb3ZlcmRvZXMKb3ZlcmRvbmUKb3ZlcmRvc2UvTUdEUwpvdmVyZHJhZnQvU00Kb3ZlcmRyYXcvR1MKb3ZlcmRyYXduCm92ZXJkcmVzcy9HTURTCm92ZXJkcmV3Cm92ZXJkcml2ZS9TTQpvdmVyZHViL1NNCm92ZXJkdWJiZWQKb3ZlcmR1YmJpbmcKb3ZlcmR1ZQpvdmVyZWFnZXIKb3ZlcmVhdC9HU04Kb3ZlcmVtb3Rpb25hbApvdmVyZW1waGFzaXMvTQpvdmVyZW1waGFzaXplL0dEUwpvdmVyZW50aHVzaWFzdGljCm92ZXJlc3RpbWF0ZS9NR05EUwpvdmVyZXN0aW1hdGlvbi9NCm92ZXJleGNpdGUvRFNHCm92ZXJleGVyY2lzZS9HRFMKb3ZlcmV4ZXJ0L1NERwpvdmVyZXhlcnRpb24vTQpvdmVyZXhwb3NlL0dEUwpvdmVyZXhwb3N1cmUvTQpvdmVyZXh0ZW5kL0RHUwpvdmVyZmVkCm92ZXJmZWVkL0dTCm92ZXJmaWxsL0RHUwpvdmVyZmxldwpvdmVyZmxpZ2h0L01TCm92ZXJmbG93L01EU0cKb3ZlcmZsb3duCm92ZXJmbHkvR1MKb3ZlcmZvbmQKb3ZlcmZ1bGwKb3ZlcmdlbmVyYWxpemUvRFNHCm92ZXJnZW5lcm91cwpvdmVyZ3JhemUvRFNHCm92ZXJncmV3Cm92ZXJncm91bmQKb3Zlcmdyb3cvSFNHCm92ZXJncm93bgpvdmVyZ3Jvd3RoL00Kb3ZlcmhhbmQvTURTCm92ZXJoYW5nL01TRwpvdmVyaGFzdHkKb3ZlcmhhdWwvTURTRwpvdmVyaGVhZC9NUwpvdmVyaGVhci9TRwpvdmVyaGVhcmQKb3ZlcmhlYXQvRFNHCm92ZXJodW5nCm92ZXJpbmR1bGdlL0dEUwpvdmVyaW5kdWxnZW5jZS9NCm92ZXJpbmR1bGdlbnQKb3ZlcmpveS9HU0QKb3ZlcmtpbGwvTQpvdmVybGFkZW4Kb3ZlcmxhaWQKb3ZlcmxhaW4Kb3ZlcmxhbmQKb3ZlcmxhcC9TTQpvdmVybGFwcGVkCm92ZXJsYXBwaW5nCm92ZXJsYXJnZQpvdmVybGF5L0dTTQpvdmVybGVhZgpvdmVybGllCm92ZXJsb2FkL0dNRFMKb3ZlcmxvbmcKb3Zlcmxvb2svR01EUwpvdmVybG9yZC9NUwpvdmVybHkvU0cKb3Zlcm1hbm5lZApvdmVybWFubmluZwpvdmVybWFzdGVyL1NERwpvdmVybW9kZXN0Cm92ZXJtdWNoL1MKb3Zlcm5pY2UKb3Zlcm5pZ2h0L01TCm92ZXJvcHRpbWlzbS9NCm92ZXJvcHRpbWlzdGljCm92ZXJwYWlkCm92ZXJwYXJ0aWN1bGFyCm92ZXJwYXNzL01TCm92ZXJwYXkvR1MKb3ZlcnBsYXkvR0RTCm92ZXJwb3B1bGF0ZS9HTkRTCm92ZXJwb3B1bGF0aW9uL00Kb3ZlcnBvd2VyL1NERwpvdmVycG93ZXJpbmcvWQpvdmVycHJhaXNlL0RTRwpvdmVycHJlY2lzZQpvdmVycHJpY2UvRFNHCm92ZXJwcmludC9TTURHCm92ZXJwcm9kdWNlL0dEUwpvdmVycHJvZHVjdGlvbi9NCm92ZXJwcm90ZWN0L1NER1YKb3ZlcnF1YWxpZmllZApvdmVycmFuCm92ZXJyYXRlL0dEUwpvdmVycmVhY2gvR0RTCm92ZXJyZWFjdC9TREcKb3ZlcnJlYWN0aW9uL1NNCm92ZXJyZWZpbmVkCm92ZXJyaWRkZW4Kb3ZlcnJpZGUvTUdTCm92ZXJyaXBlL00Kb3ZlcnJvZGUKb3ZlcnJ1bGUvR0RTCm92ZXJydW4vU00Kb3ZlcnJ1bm5pbmcKb3ZlcnNhbXBsaW5nCm92ZXJzYXcKb3ZlcnNlYS9TCm92ZXJzZWUvUlNaCm92ZXJzZWVpbmcKb3ZlcnNlZW4Kb3ZlcnNlZXIvTQpvdmVyc2VsbC9HUwpvdmVyc2Vuc2l0aXZlL1AKb3ZlcnNlbnNpdGl2ZW5lc3MvTQpvdmVyc2V4ZWQKb3ZlcnNoYWRvdy9EU0cKb3ZlcnNoYXJlL0RTRwpvdmVyc2hvZS9NUwpvdmVyc2hvb3QvR1MKb3ZlcnNob3QKb3ZlcnNpZ2h0L1NNCm92ZXJzaW1wbGUKb3ZlcnNpbXBsaWZpY2F0aW9uL00Kb3ZlcnNpbXBsaWZ5L0RTTkdYCm92ZXJzaXplCm92ZXJzbGVlcC9HUwpvdmVyc2xlcHQKb3ZlcnNvbGQKb3ZlcnNwZWNpYWxpemF0aW9uL00Kb3ZlcnNwZWNpYWxpemUvR0RTCm92ZXJzcGVuZC9TRwpvdmVyc3BlbnQKb3ZlcnNwcmVhZC9HUwpvdmVyc3RhZmZlZApvdmVyc3RhdGUvRFNMRwpvdmVyc3RhdGVtZW50L01TCm92ZXJzdGF5L0RTRwpvdmVyc3RlcC9TCm92ZXJzdGVwcGVkCm92ZXJzdGVwcGluZwpvdmVyc3RpbXVsYXRlL0RTRwpvdmVyc3RvY2svR1NECm92ZXJzdHJldGNoL0dEUwpvdmVyc3RyaWN0Cm92ZXJzdHJ1bmcKb3ZlcnN0dWZmZWQKb3ZlcnN1YnNjcmliZS9EU0cKb3ZlcnN1YnRsZQpvdmVyc3VwcGx5L0dEUwpvdmVyc3VzcGljaW91cwpvdmVydC9ZCm92ZXJ0YWtlL0dTCm92ZXJ0YWtlbgpvdmVydGF4L0dEUwpvdmVydGhpbmsvU0cKb3ZlcnRob3VnaHQKb3ZlcnRocmV3Cm92ZXJ0aHJvdy9TTUcKb3ZlcnRocm93bgpvdmVydGltZS9NUwpvdmVydGlyZS9HRFMKb3ZlcnRvbmUvTVMKb3ZlcnRvb2sKb3ZlcnR1cmUvTVMKb3ZlcnR1cm4vRFNHCm92ZXJ1c2UvRFNNRwpvdmVydmFsdWF0aW9uL1MKb3ZlcnZhbHVlL0RTRwpvdmVydmlldy9NUwpvdmVyd2VlbmluZy9ZCm92ZXJ3ZWlnaHQvTQpvdmVyd2hlbG0vU0dECm92ZXJ3aGVsbWluZy9ZCm92ZXJ3aW50ZXIvU0RHCm92ZXJ3b3JrL0dNRFMKb3ZlcndyaXRlL0dTCm92ZXJ3cml0dGVuCm92ZXJ3cm90ZQpvdmVyd3JvdWdodApvdmVyemVhbG91cwpvdmlkdWN0L1NNCm92aXBhcm91cwpvdm9pZC9NUwpvdnVsYXIKb3Z1bGF0ZS9EU0dOCm92dWxhdGlvbi9NCm92dWxlL01TCm92dW0vTQpvdwpvd2UvRFNHCm93bC9TTQpvd2xldC9NUwpvd2xpc2gvWQpvd24vRVNHRApvd25lci9NUwpvd25lcnNoaXAvTQpveC9NTgpveGJsb29kL00Kb3hib3cvTVMKb3hjYXJ0L1NNCm94Zm9yZC9TTQpveGlkYW50L01TCm94aWRhc2UKb3hpZGF0aW9uL00Kb3hpZGUvTVMKb3hpZGl6YXRpb24vTQpveGlkaXplL1pHRFJTCm94aWRpemVyL00Kb3h0YWlsL1MKb3h5YWNldHlsZW5lL00Kb3h5Z2VuL00Kb3h5Z2VuYXRlL0RTR04Kb3h5Z2VuYXRpb24vTQpveHltb3JhCm94eW1vcm9uL00Kb3lzdGVyL1NNCm96Cm96b25lL00KcC9OUlhUR0oKcEgKcGEvU01ICnBhYmx1bS9NCnBhYnVsdW0vTQpwYWNlL01aR0RSUwpwYWNlbWFrZXIvU00KcGFjZXIvTQpwYWNlc2V0dGVyL1NNCnBhY2V5CnBhY2h5ZGVybS9NUwpwYWNoeXNhbmRyYS9NUwpwYWNpZmljCnBhY2lmaWNhbGx5CnBhY2lmaWNhdGlvbi9NCnBhY2lmaWVyL00KcGFjaWZpc20vTQpwYWNpZmlzdC9TTQpwYWNpZmlzdGljCnBhY2lmeS9aR0RSU04KcGFjaydzCnBhY2svQVVHU0QKcGFja2FnZSdzCnBhY2thZ2UvQUdEUwpwYWNrYWdlci9TTQpwYWNrYWdpbmcvTQpwYWNrZXIvTVMKcGFja2V0L01TCnBhY2tpbmcncwpwYWNraW5naG91c2UvU00KcGFja3NhZGRsZS9NUwpwYWN0L01TCnBhY3kvUlQKcGFkL1NNCnBhZGRlZApwYWRkaW5nL00KcGFkZGxlL01aR0RSUwpwYWRkbGVyL00KcGFkZG9jay9NREdTCnBhZGR5L1NNCnBhZGxvY2svTURTRwpwYWRyZS9TTQpwYWVhbi9TTQpwYWVsbGEvTVMKcGFnYW4vU00KcGFnYW5pc20vTQpwYWdlL01aR0RSUwpwYWdlYW50L01TCnBhZ2VhbnRyeS9NCnBhZ2Vib3kvU00KcGFnZXIvTQpwYWdpbmF0ZS9EU0dOCnBhZ2luYXRpb24vTQpwYWdvZGEvTVMKcGFoCnBhaWQvQVUKcGFpbC9NUwpwYWlsZnVsL1NNCnBhaW4vTURTRwpwYWluZnVsL1BZCnBhaW5mdWxsZXIKcGFpbmZ1bGxlc3QKcGFpbmZ1bG5lc3MvTQpwYWlua2lsbGVyL01TCnBhaW5raWxsaW5nCnBhaW5sZXNzL1BZCnBhaW5sZXNzbmVzcy9NCnBhaW5zdGFraW5nL01ZCnBhaW50L1NaR0pNRFIKcGFpbnRiYWxsCnBhaW50Ym94L01TCnBhaW50YnJ1c2gvTVMKcGFpbnRlZC9VCnBhaW50ZXIvTVkKcGFpbnRpbmcvTQpwYWludHdvcmsKcGFpci9BTURTRwpwYWlyZWQvVQpwYWlyaW5nL1MKcGFpcndpc2UKcGFpc2xleS9TTQpwYWphbWEvUwpwYWphbWFzL00KcGFsL1NNWQpwYWxhY2UvTVMKcGFsYWRpbi9TTQpwYWxhbnF1aW4vU00KcGFsYXRhYmxlL1UKcGFsYXRhbC9TTQpwYWxhdGFsaXphdGlvbi9NCnBhbGF0YWxpemUvR0RTCnBhbGF0ZS9NQlMKcGFsYXRpYWwvWQpwYWxhdGluYXRlL01TCnBhbGF0aW5lL01TCnBhbGF2ZXIvR1NNRApwYWxhenppCnBhbGF6em8KcGFsZS9NWVRHUERSU0oKcGFsZWZhY2UvTVMKcGFsZW5lc3MvTQpwYWxlb2dyYXBoZXIvTVMKcGFsZW9ncmFwaHkvTQpwYWxlb2xpdGhpYwpwYWxlb250b2xvZ2lzdC9TTQpwYWxlb250b2xvZ3kvTQpwYWxldHRlL1NNCnBhbGZyZXkvU00KcGFsaW1vbnkvTQpwYWxpbXBzZXN0L01TCnBhbGluZHJvbWUvTVMKcGFsaW5kcm9taWMKcGFsaW5nL00KcGFsaXNhZGUvU00KcGFsaXNoCnBhbGwvTURTRwpwYWxsYWRpdW0vTQpwYWxsYmVhcmVyL01TCnBhbGxldC9NUwpwYWxsaWF0ZS9EU0dOVgpwYWxsaWF0aW9uL00KcGFsbGlhdGl2ZS9TTQpwYWxsaWQvWVAKcGFsbGlkbmVzcy9NCnBhbGxvci9NCnBhbG0vTURTRwpwYWxtYXRlCnBhbG1ldHRvL1NNCnBhbG1pc3QvU00KcGFsbWlzdHJ5L00KcGFsbXRvcC9TTQpwYWxteS9UUgpwYWxvbWluby9NUwpwYWxwYWJsZQpwYWxwYWJseQpwYWxwYXRlL0RTR04KcGFscGF0aW9uL00KcGFscGl0YXRlL1hHTkRTCnBhbHBpdGF0aW9uL00KcGFsc3kvR0RTTQpwYWx0cmluZXNzL00KcGFsdHJ5L1JQVApwYW1wYXMvTQpwYW1wZXIvRFNHCnBhbXBobGV0L01TCnBhbXBobGV0ZWVyL01TCnBhbi9TTQpwYW5hY2VhL1NNCnBhbmFjaGUvTQpwYW5hbWEvTVMKcGFuYXRlbGxhL1MKcGFuY2FrZS9EU01HCnBhbmNocm9tYXRpYwpwYW5jcmVhcy9NUwpwYW5jcmVhdGljCnBhbmNyZWF0aXRpcwpwYW5kYS9TTQpwYW5kZW1pYy9TTQpwYW5kZW1vbml1bS9NCnBhbmRlci9NRFJaR1MKcGFuZGVyZXIvTQpwYW5lL0tNCnBhbmVneXJpYy9TTQpwYW5lbC9TR0pNRApwYW5lbGluZy9NCnBhbmVsaXN0L01TCnBhbmVzCnBhbmcvTVMKcGFuaGFuZGxlL0RSU01aRwpwYW5oYW5kbGVyL00KcGFuaWMvU00KcGFuaWNrZWQKcGFuaWNraW5nCnBhbmlja3kKcGFubmVkCnBhbm5pZXIvU00KcGFubmluZwpwYW5vcGx5L1NNCnBhbm9yYW1hL1NNCnBhbm9yYW1pYwpwYW5waXBlcy9NCnBhbnN5L1NNCnBhbnQvTURTRwpwYW50YWxvb25zL00KcGFudGVjaG5pY29uL1MKcGFudGhlaXNtL00KcGFudGhlaXN0L1NNCnBhbnRoZWlzdGljCnBhbnRoZW9uL1NNCnBhbnRoZXIvTVMKcGFudGllL01TCnBhbnRvL1MKcGFudG9taW1lL01HRFMKcGFudG9taW1pYwpwYW50b21pbWlzdC9TTQpwYW50cnkvU00KcGFudHN1aXQvU00KcGFudHlob3NlL00KcGFudHlsaW5lci9NCnBhbnR5d2Fpc3QvU00KcGFwL1NNCnBhcGEvTVMKcGFwYWN5L1NNCnBhcGFsCnBhcGFyYXp6aS9NCnBhcGFyYXp6bwpwYXBheWEvTVMKcGFwZXIvU1pHTURSCnBhcGVyYmFjay9TTQpwYXBlcmJhcmsvUwpwYXBlcmJvYXJkL00KcGFwZXJib3kvU00KcGFwZXJjbGlwL1MKcGFwZXJlci9NCnBhcGVyZ2lybC9TTQpwYXBlcmhhbmdlci9TTQpwYXBlcmhhbmdpbmcvTQpwYXBlcmxlc3MKcGFwZXJ3ZWlnaHQvTVMKcGFwZXJ3b3JrL00KcGFwZXJ5CnBhcGlsbGEvTQpwYXBpbGxhZQpwYXBpbGxhcnkKcGFwaXN0L01TCnBhcG9vc2UvTVMKcGFwcHkvU00KcGFwcmlrYS9NCnBhcHlyaQpwYXB5cnVzL00KcGFyL1NaR01EUkJKCnBhcmEvTVMKcGFyYWJsZS9NUwpwYXJhYm9sYS9TTQpwYXJhYm9saWMKcGFyYWNldGFtb2wvUwpwYXJhY2h1dGUvRFNNRwpwYXJhY2h1dGlzdC9NUwpwYXJhZGUvTVpHRFJTCnBhcmFkZXIvTQpwYXJhZGlnbS9TTQpwYXJhZGlnbWF0aWMKcGFyYWRpc2FpY2FsCnBhcmFkaXNlL1NNCnBhcmFkb3gvTVMKcGFyYWRveGljYWwvWQpwYXJhZmZpbi9NCnBhcmFnbGlkaW5nCnBhcmFnb24vTVMKcGFyYWdyYXBoL0dNRApwYXJhZ3JhcGhzCnBhcmFrZWV0L1NNCnBhcmFsZWdhbC9NUwpwYXJhbGxheC9NUwpwYXJhbGxlbC9TR01ECnBhcmFsbGVsZWQvVQpwYXJhbGxlbGlzbS9NUwpwYXJhbGxlbG9ncmFtL1NNCnBhcmFseXNlcwpwYXJhbHlzaXMvTQpwYXJhbHl0aWMvU00KcGFyYWx5emUvRFNHCnBhcmFseXppbmcvWQpwYXJhbWVjaWEKcGFyYW1lY2l1bS9NCnBhcmFtZWRpYy9NUwpwYXJhbWVkaWNhbC9NUwpwYXJhbWV0ZXIvTVMKcGFyYW1ldHJpYwpwYXJhbWlsaXRhcnkvU00KcGFyYW1vdW50CnBhcmFtb3VudGN5CnBhcmFtb3VyL1NNCnBhcmFub2lhL00KcGFyYW5vaWFjL01TCnBhcmFub2lkL1NNCnBhcmFub3JtYWwKcGFyYXBldC9NUwpwYXJhcGhlcm5hbGlhL00KcGFyYXBocmFzZS9EU01HCnBhcmFwbGVnaWEvTQpwYXJhcGxlZ2ljL1NNCnBhcmFwcm9mZXNzaW9uYWwvTVMKcGFyYXBzeWNob2xvZ2lzdC9NUwpwYXJhcHN5Y2hvbG9neS9NCnBhcmFxdWF0L00KcGFyYXNhaWxpbmcKcGFyYXNjZW5kaW5nCnBhcmFzaXRlL1NNCnBhcmFzaXRpYwpwYXJhc2l0aWNhbC9ZCnBhcmFzaXRpc20vTQpwYXJhc29sL01TCnBhcmFzeW1wYXRoZXRpYy9TCnBhcmF0aGlvbi9NCnBhcmF0aHlyb2lkL01TCnBhcmF0cm9vcC9SWlMKcGFyYXRyb29wZXIvTQpwYXJhdHJvb3BzL00KcGFyYXR5cGhvaWQvTQpwYXJib2lsL0RTRwpwYXJjZWwvR01EUwpwYXJjaC9MR0RTCnBhcmNobWVudC9TTQpwYXJkbmVyL1MKcGFyZG9uL1pHTURSQlMKcGFyZG9uYWJsZS9VCnBhcmRvbmFibHkvVQpwYXJkb25lci9NCnBhcmUvUwpwYXJlZ29yaWMvTQpwYXJlbnQvR01EUwpwYXJlbnRhZ2UvTQpwYXJlbnRhbApwYXJlbnRoZXNlcwpwYXJlbnRoZXNpcy9NCnBhcmVudGhlc2l6ZS9EU0cKcGFyZW50aGV0aWMKcGFyZW50aGV0aWNhbC9ZCnBhcmVudGhvb2QvTQpwYXJlbnRpbmcvTQpwYXJlci9NCnBhcmVzL1MKcGFyZXNpcy9NCnBhcmZhaXQvTVMKcGFyaWFoL00KcGFyaWFocwpwYXJpZXRhbApwYXJpbXV0dWVsL01TCnBhcmluZy9NCnBhcmlzaC9NUwpwYXJpc2hpb25lci9NUwpwYXJpdHkvRVNNCnBhcmsvTURTRwpwYXJrYS9TTQpwYXJraW5nL00KcGFya2xhbmQKcGFya291cgpwYXJrd2F5L01TCnBhcmt5CnBhcmxhbmNlL00KcGFybGF5L0dNRFMKcGFybGV5L0dNRFMKcGFybGlhbWVudC9TTQpwYXJsaWFtZW50YXJpYW4vU00KcGFybGlhbWVudGFyeQpwYXJsb3IvTVMKcGFybG91cwpwYXJtaWdpYW5hCnBhcm9jaGlhbC9ZCnBhcm9jaGlhbGlzbS9NCnBhcm9kaXN0L1NNCnBhcm9keS9HRFNNCnBhcm9sZS9NR0RTCnBhcm9sZWUvTVMKcGFyb3RpZApwYXJveHlzbS9TTQpwYXJveHlzbWFsCnBhcnF1ZXQvTURTRwpwYXJxdWV0cnkvTQpwYXJyZWQKcGFycmljaWRhbApwYXJyaWNpZGUvTVMKcGFycmluZwpwYXJyb3QvR01EUwpwYXJyeS9HRFNNCnBhcnNlL0RSU0cKcGFyc2VjL01TCnBhcnNpbW9uaW91cy9ZCnBhcnNpbW9ueS9NCnBhcnNsZXkvTQpwYXJzbmlwL01TCnBhcnNvbi9NUwpwYXJzb25hZ2UvTVMKcGFydCdzCnBhcnQvQ0RTRwpwYXJ0YWtlL1pHUlMKcGFydGFrZW4KcGFydGFrZXIvTQpwYXJ0ZXJyZS9TTQpwYXJ0aGVub2dlbmVzaXMvTQpwYXJ0aWFsL01ZUwpwYXJ0aWFsaXR5L00KcGFydGljaXBhbnQvU00KcGFydGljaXBhdGUvRFNHTgpwYXJ0aWNpcGF0aW9uL00KcGFydGljaXBhdG9yL01TCnBhcnRpY2lwYXRvcnkKcGFydGljaXBpYWwvTQpwYXJ0aWNpcGxlL01TCnBhcnRpY2xlL1NNCnBhcnRpY2xlYm9hcmQvTQpwYXJ0aWN1bGFyL1NNWQpwYXJ0aWN1bGFyaXR5L1NNCnBhcnRpY3VsYXJpemF0aW9uL00KcGFydGljdWxhcml6ZS9EU0cKcGFydGljdWxhdGUvU00KcGFydGluZy9NUwpwYXJ0aXNhbi9TTQpwYXJ0aXNhbnNoaXAvTQpwYXJ0aXRpb24vR01EUwpwYXJ0aXRpdmUvTVMKcGFydGx5CnBhcnRuZXIvTURTRwpwYXJ0bmVyc2hpcC9NUwpwYXJ0b29rCnBhcnRyaWRnZS9TTQpwYXJ0dXJpdGlvbi9NCnBhcnR3YXkKcGFydHkvR0RTTQpwYXJ2ZW51L01TCnBhc2NhbC9NUwpwYXNjaGFsCnBhc2hhL1NNCnBhc3MvTQpwYXNzYWJseQpwYXNzYWdlL01TCnBhc3NhZ2V3YXkvTVMKcGFzc2Jvb2svTVMKcGFzc2UvRFJTQlhaR05WCnBhc3NlbC9NUwpwYXNzZW5nZXIvU00KcGFzc2VyL00KcGFzc2VyYnkvTQpwYXNzZXJzYnkKcGFzc2ltCnBhc3NpbmcvTVkKcGFzc2lvbi9FTQpwYXNzaW9uYXRlL0VZCnBhc3Npb25mbG93ZXIvU00KcGFzc2lvbmxlc3MKcGFzc2l2ZS9QTVlTCnBhc3NpdmVuZXNzL00KcGFzc2l2aXR5L00KcGFzc2l2aXphdGlvbgpwYXNzaXZpemUvRFNHCnBhc3NrZXkvTVMKcGFzc3BocmFzZS9TCnBhc3Nwb3J0L01TCnBhc3N3b3JkL01TCnBhc3QvQU1TCnBhc3RhL1NNCnBhc3RlL0RTTUcKcGFzdGVib2FyZC9NCnBhc3RlbC9NUwpwYXN0ZXJuL01TCnBhc3RldXJpemF0aW9uL00KcGFzdGV1cml6ZS9aR0RSUwpwYXN0ZXVyaXplZC9VCnBhc3RldXJpemVyL00KcGFzdGljaGUvTVMKcGFzdGllCnBhc3RpbGxlL01TCnBhc3RpbWUvTVMKcGFzdGluZXNzL00KcGFzdG9yL01TCnBhc3RvcmFsL01TCnBhc3RvcmF0ZS9NUwpwYXN0cmFtaS9NCnBhc3RyeS9TTQpwYXN0dXJhZ2UvTQpwYXN0dXJlL0RTTUcKcGFzdHVyZWxhbmQvTQpwYXN0eS9QVFJTTQpwYXQvU00KcGF0Y2gvRUdNRFMKcGF0Y2hpbHkKcGF0Y2hpbmVzcy9NCnBhdGNob3VsaQpwYXRjaHdvcmsvU00KcGF0Y2h5L1RQUgpwYXRlL01TCnBhdGVsbGEvTVMKcGF0ZWxsYWUKcGF0ZW50L0dNRFlTCnBhdGVyZmFtaWxpYXMvTVMKcGF0ZXJuYWwvWQpwYXRlcm5hbGlzbS9NCnBhdGVybmFsaXN0L1MKcGF0ZXJuYWxpc3RpYwpwYXRlcm5pdHkvTQpwYXRlcm5vc3Rlci9NUwpwYXRoL00KcGF0aGV0aWMKcGF0aGV0aWNhbGx5CnBhdGhmaW5kZXIvU00KcGF0aGxlc3MKcGF0aG9nZW4vU00KcGF0aG9nZW5pYwpwYXRob2xvZ2ljYWwvWQpwYXRob2xvZ2lzdC9TTQpwYXRob2xvZ3kvTQpwYXRob3MvTQpwYXRocwpwYXRod2F5L01TCnBhdGllbmNlL00KcGF0aWVudC9JTVNUCnBhdGllbnRlcgpwYXRpZW50bHkKcGF0aW5hL01TCnBhdGluZQpwYXRpby9TTQpwYXRpc3NlcmllL1MKcGF0b2lzL00KcGF0cmVzZmFtaWxpYXMKcGF0cmlhcmNoL00KcGF0cmlhcmNoYWwKcGF0cmlhcmNoYXRlL01TCnBhdHJpYXJjaHMKcGF0cmlhcmNoeS9TTQpwYXRyaWNpYW4vU00KcGF0cmljaWRlL1NNCnBhdHJpbW9uaWFsCnBhdHJpbW9ueS9TTQpwYXRyaW90L1NNCnBhdHJpb3RpYy9VCnBhdHJpb3RpY2FsbHkKcGF0cmlvdGlzbS9NCnBhdHJvbC9NUwpwYXRyb2xsZWQKcGF0cm9sbGluZwpwYXRyb2xtYW4vTQpwYXRyb2xtZW4KcGF0cm9sd29tYW4vTQpwYXRyb2x3b21lbgpwYXRyb24vTVMKcGF0cm9uYWdlL01TCnBhdHJvbmVzcy9NUwpwYXRyb25pemUvWkdEUlMKcGF0cm9uaXplci9NCnBhdHJvbml6aW5nL1kKcGF0cm9ueW1pYy9TTQpwYXRyb255bWljYWxseQpwYXRyb29uL1NNCnBhdHN5L1NNCnBhdHRlZApwYXR0ZXIvTURHUwpwYXR0ZXJuL1NNREcKcGF0dGluZwpwYXR0eS9TTQpwYXVjaXR5L00KcGF1bmNoL01TCnBhdW5jaHkvUlQKcGF1cGVyL01TCnBhdXBlcmlzbS9NCnBhdXBlcml6ZS9EU0cKcGF1c2UvRFNNRwpwYXZlL0FHRFMKcGF2ZWQvVQpwYXZlbWVudC9NUwpwYXZpbGlvbi9TTQpwYXZpbmcvTVMKcGF2bG92YS9TCnBhdy9TR01ECnBhd2wvTVMKcGF3bi9NRFNHCnBhd25icm9rZXIvTVMKcGF3bmJyb2tpbmcvTQpwYXduc2hvcC9NUwpwYXdwYXcvTVMKcGF5J3MKcGF5L0FTR0JMCnBheWJhY2svU00KcGF5Y2hlY2svTVMKcGF5ZGF5L01TCnBheWVkCnBheWVlL1NNCnBheWVyL1NNCnBheWxvYWQvU00KcGF5bWFzdGVyL1NNCnBheW1lbnQvQVNNCnBheW9mZi9NUwpwYXlvbGEvTQpwYXlvdXQvTVMKcGF5cGhvbmUvUwpwYXlyb2xsL1NNCnBheXNsaXAvU00KcGF5d2FsbC9TTQpwYXl3YXJlCnBjdApwZApwZWEvU00KcGVhY2UvU00KcGVhY2VhYmxlCnBlYWNlYWJseQpwZWFjZWZ1bC9QWQpwZWFjZWZ1bG5lc3MvTQpwZWFjZWtlZXBlci9TTQpwZWFjZWtlZXBpbmcvTQpwZWFjZW1ha2VyL01TCnBlYWNlbWFraW5nL00KcGVhY2V0aW1lL00KcGVhY2gvTVMKcGVhY2h5L1RSCnBlYWNvY2svTVMKcGVhZm93bC9NUwpwZWFoZW4vTVMKcGVhay9NRFNHCnBlYWt5CnBlYWwvQU1EU0cKcGVhbnV0L01TCnBlYXIvTVlTCnBlYXJsL1NHTUQKcGVhcmx5L1JUCnBlYXNhbnQvU00KcGVhc2FudHJ5L00KcGVhc2hvb3Rlci9TTQpwZWF0L00KcGVhdHkvVFIKcGViYmxlL01HRFMKcGViYmx5CnBlY2FuL1NNCnBlY2NhZGlsbG8vTQpwZWNjYWRpbGxvZXMKcGVjY2FyeS9TTQpwZWNrL01EUlNaRwpwZWNraXNoCnBlY3MKcGVjdGljCnBlY3Rpbi9NCnBlY3RvcmFsL01TCnBlY3VsYXRlL0dORFMKcGVjdWxhdGlvbi9NCnBlY3VsYXRvci9TTQpwZWN1bGlhci9ZCnBlY3VsaWFyaXR5L1NNCnBlY3VuaWFyeQpwZWRhZ29naWMKcGVkYWdvZ2ljYWwvWQpwZWRhZ29ndWUvU00KcGVkYWdvZ3kvTQpwZWRhbC9TR01ECnBlZGFsby9TCnBlZGFudC9NUwpwZWRhbnRpYwpwZWRhbnRpY2FsbHkKcGVkYW50cnkvTQpwZWRkbGUvWkdEUlMKcGVkZGxlci9NCnBlZGVyYXN0L01TCnBlZGVyYXN0eS9NCnBlZGVzdGFsL01TCnBlZGVzdHJpYW4vU00KcGVkZXN0cmlhbml6YXRpb24KcGVkZXN0cmlhbml6ZS9HRFMKcGVkaWF0cmljL1MKcGVkaWF0cmljaWFuL01TCnBlZGlhdHJpY3MvTQpwZWRpY2FiL1NNCnBlZGljdXJlL01HRFMKcGVkaWN1cmlzdC9NUwpwZWRpZ3JlZS9NRFMKcGVkaW1lbnQvTVMKcGVkb21ldGVyL01TCnBlZG9waGlsZS9TCnBlZG9waGlsaWEKcGVkdW5jbGUvTVMKcGVlL0RSU01aCnBlZWluZwpwZWVrL01EU0cKcGVla2Fib28vTQpwZWVsL01EUlNKWkcKcGVlbGVkL1UKcGVlbGVyL00KcGVlbGluZy9NCnBlZW4vTVMKcGVlcC9NRFJTWkcKcGVlcGJvCnBlZXBlci9NCnBlZXBob2xlL01TCnBlZXBzaG93L01TCnBlZXIvTURHCnBlZXJhZ2UvU00KcGVlcmVzcy9NUwpwZWVybGVzcwpwZWV2ZS9EU01HCnBlZXZpc2gvUFkKcGVldmlzaG5lc3MvTQpwZWV3ZWUvTVMKcGVld2l0L1MKcGVnL1NNCnBlZ2JvYXJkL01TCnBlZ2dlZApwZWdnaW5nCnBlaWdub2lyL1NNCnBlam9yYXRpb24vTQpwZWpvcmF0aXZlL1NNWQpwZWtlL01TCnBla2luZXNlcwpwZWtpbmdlc2UvU00KcGVrb2UvTQpwZWxhZ2ljCnBlbGYvTQpwZWxpY2FuL01TCnBlbGxhZ3JhL00KcGVsbGV0L0dNRFMKcGVsbHVjaWQKcGVsbWV0L1MKcGVsdC9NRFNHCnBlbHZpYwpwZWx2aXMvTVMKcGVtbWljYW4vTQpwZW4vTQpwZW5hbApwZW5hbGl6YXRpb24vTQpwZW5hbGl6ZS9EU0cKcGVuYWx0eS9TTQpwZW5hbmNlL01TCnBlbmNlCnBlbmNoYW50L1NNCnBlbmNpbC9HTURKUwpwZW5kL0NEU0cKcGVuZGFudC9NUwpwZW5kZW50L01TCnBlbmR1bG91cwpwZW5kdWx1bS9NUwpwZW5ldHJhYmlsaXR5L00KcGVuZXRyYWJsZQpwZW5ldHJhdGUvRFNHTlZYCnBlbmV0cmF0aW5nL1kKcGVuZXRyYXRpb24vTQpwZW5mcmllbmQvUwpwZW5ndWluL01TCnBlbmljaWxsaW4vTQpwZW5pbGUKcGVuaW5zdWxhL1NNCnBlbmluc3VsYXIKcGVuaXMvTVMKcGVuaXRlbmNlL00KcGVuaXRlbnQvU01ZCnBlbml0ZW50aWFsCnBlbml0ZW50aWFyeS9TTQpwZW5rbmlmZS9NCnBlbmtuaXZlcwpwZW5saWdodC9TTQpwZW5tYW4vTQpwZW5tYW5zaGlwL00KcGVubWVuCnBlbm5hbnQvTVMKcGVubmVkCnBlbm5pbGVzcwpwZW5uaW5nCnBlbm5vbi9NUwpwZW5ueS9TTQpwZW5ueXdlaWdodC9NUwpwZW5ueXdvcnRoCnBlbm9sb2dpc3QvTVMKcGVub2xvZ3kvTQpwZW5zaW9uL0JaR01EUlMKcGVuc2lvbmVyL00KcGVuc2l2ZS9QWQpwZW5zaXZlbmVzcy9NCnBlbnQKcGVudGFjbGUvTVMKcGVudGFnb24vTVMKcGVudGFnb25hbApwZW50YWdyYW0vU00KcGVudGFtZXRlci9TTQpwZW50YXRobGV0ZS9NUwpwZW50YXRobG9uL01TCnBlbnRob3VzZS9TTQpwZW51Y2hlL00KcGVudWx0aW1hdGUvU00KcGVudW1icmEvTVMKcGVudW1icmFlCnBlbnVyaW91cy9QWQpwZW51cmlvdXNuZXNzL00KcGVudXJ5L00KcGVvbi9NUwpwZW9uYWdlL00KcGVvbnkvU00KcGVvcGxlL01HRFMKcGVwL1NNCnBlcHBlZApwZXBwZXIvR01EUwpwZXBwZXJjb3JuL1NNCnBlcHBlcm1pbnQvU00KcGVwcGVyb25pL01TCnBlcHBlcnkKcGVwcGluZXNzL00KcGVwcGluZwpwZXBweS9UUFIKcGVwc2luL00KcGVwdGljL01TCnBlcHRpZGUvUwpwZXJhZHZlbnR1cmUvTQpwZXJhbWJ1bGF0ZS9YR05EUwpwZXJhbWJ1bGF0aW9uL00KcGVyYW1idWxhdG9yL01TCnBlcmNhbGUvTVMKcGVyY2VpdmUvQkdEUwpwZXJjZWl2ZWQvVQpwZXJjZW50L01TCnBlcmNlbnRhZ2UvU00KcGVyY2VudGlsZS9TTQpwZXJjZXB0aWJsZQpwZXJjZXB0aWJseQpwZXJjZXB0aW9uL1NNCnBlcmNlcHRpb25hbApwZXJjZXB0aXZlL1BZCnBlcmNlcHRpdmVuZXNzL00KcGVyY2VwdHVhbC9ZCnBlcmNoL0dNRFMKcGVyY2hhbmNlCnBlcmNpcGllbmNlL00KcGVyY2lwaWVudApwZXJjb2xhdGUvR05EUwpwZXJjb2xhdGlvbi9NCnBlcmNvbGF0b3IvU00KcGVyY3Vzc2lvbi9BTQpwZXJjdXNzaW9uaXN0L01TCnBlcmN1c3NpdmUKcGVyZGl0aW9uL00KcGVyZHVyYWJsZQpwZXJlZ3JpbmF0ZS9EU1hHTgpwZXJlZ3JpbmF0aW9uL00KcGVyZWdyaW5lL01TCnBlcmVtcHRvcmlseQpwZXJlbXB0b3J5CnBlcmVubmlhbC9TTVkKcGVyZXN0cm9pa2EvTQpwZXJmZWN0L1BUR01EUllTCnBlcmZlY3RhL01TCnBlcmZlY3RpYmlsaXR5L00KcGVyZmVjdGlibGUKcGVyZmVjdGlvbi9TTQpwZXJmZWN0aW9uaXNtL00KcGVyZmVjdGlvbmlzdC9TTQpwZXJmZWN0bmVzcy9NCnBlcmZpZGlvdXMvWQpwZXJmaWR5L1NNCnBlcmZvcmF0ZS9HTlhEUwpwZXJmb3JhdGlvbi9NCnBlcmZvcmNlCnBlcmZvcm0vU0RSWkcKcGVyZm9ybWFuY2UvU00KcGVyZm9ybWF0aXZlCnBlcmZvcm1lZC9VCnBlcmZvcm1lci9NCnBlcmZ1bWUvRFJTTVpHCnBlcmZ1bWVyL00KcGVyZnVtZXJ5L1NNCnBlcmZ1bmN0b3JpbHkKcGVyZnVuY3RvcnkKcGVyZnVzaW9uCnBlcmdvbGEvU00KcGVyaGFwcwpwZXJpY2FyZGlhCnBlcmljYXJkaWFsCnBlcmljYXJkaXRpcwpwZXJpY2FyZGl1bS9NCnBlcmlnZWUvU00KcGVyaWhlbGlhCnBlcmloZWxpb24vTQpwZXJpbC9TR01ECnBlcmlsb3VzL1kKcGVyaW1ldGVyL1NNCnBlcmluYXRhbApwZXJpbmVhCnBlcmluZXVtL00KcGVyaW9kL01TCnBlcmlvZGljCnBlcmlvZGljYWwvU01ZCnBlcmlvZGljaXR5L00KcGVyaW9kb250YWwKcGVyaW9kb250aWNzL00KcGVyaW9kb250aXN0L1NNCnBlcmlwYXRldGljL01TCnBlcmlwaGVyYWwvTVlTCnBlcmlwaGVyeS9TTQpwZXJpcGhyYXNlcwpwZXJpcGhyYXNpcy9NCnBlcmlwaHJhc3RpYwpwZXJpc2NvcGUvU00KcGVyaXNoL0JEUlNaRwpwZXJpc2hhYmxlL01TCnBlcmlzdGFsc2VzCnBlcmlzdGFsc2lzL00KcGVyaXN0YWx0aWMKcGVyaXN0eWxlL1NNCnBlcml0b25lYWwKcGVyaXRvbmV1bS9NUwpwZXJpdG9uaXRpcy9NCnBlcml3aWcvU00KcGVyaXdpbmtsZS9TTQpwZXJqdXJlL0RSU1pHCnBlcmp1cmVyL00KcGVyanVyeS9TTQpwZXJrL01EU0cKcGVya2lseQpwZXJraW5lc3MvTQpwZXJreS9UUFIKcGVybS9NRFNHCnBlcm1hZnJvc3QvTQpwZXJtYW5lbmNlL00KcGVybWFuZW5jeS9NCnBlcm1hbmVudC9TTVkKcGVybWVhYmlsaXR5L00KcGVybWVhYmxlCnBlcm1lYXRlL0dORFMKcGVybWVhdGlvbi9NCnBlcm1pc3NpYmxlCnBlcm1pc3NpYmx5CnBlcm1pc3Npb24vTVMKcGVybWlzc2l2ZS9QWQpwZXJtaXNzaXZlbmVzcy9NCnBlcm1pdC9NUwpwZXJtaXR0ZWQKcGVybWl0dGluZwpwZXJtdXRhdGlvbi9TTQpwZXJtdXRlL0RTRwpwZXJuaWNpb3VzL1lQCnBlcm5pY2lvdXNuZXNzL00KcGVyb3JhdGlvbi9NUwpwZXJveGlkZS9NR0RTCnBlcnBlbmRpY3VsYXIvU01ZCnBlcnBlbmRpY3VsYXJpdHkvTQpwZXJwZXRyYXRlL0RTR04KcGVycGV0cmF0aW9uL00KcGVycGV0cmF0b3IvTVMKcGVycGV0dWFsL1NNWQpwZXJwZXR1YXRlL0RTR04KcGVycGV0dWF0aW9uL00KcGVycGV0dWl0eS9NCnBlcnBsZXgvR0RTCnBlcnBsZXhlZC9ZCnBlcnBsZXhpdHkvU00KcGVycXVpc2l0ZS9TTQpwZXJzZWN1dGUvR05YRFMKcGVyc2VjdXRpb24vTQpwZXJzZWN1dG9yL1NNCnBlcnNldmVyYW5jZS9NCnBlcnNldmVyZS9EU0cKcGVyc2lmbGFnZS9NCnBlcnNpbW1vbi9TTQpwZXJzaXN0L1NHRApwZXJzaXN0ZW5jZS9NCnBlcnNpc3RlbnQvWQpwZXJzbmlja2V0eQpwZXJzb24vVU1TCnBlcnNvbmEvU00KcGVyc29uYWJsZQpwZXJzb25hZQpwZXJzb25hZ2UvTVMKcGVyc29uYWwvTVlTCnBlcnNvbmFsaXR5L1NNCnBlcnNvbmFsaXplL0NEU0cKcGVyc29uYWx0eS9NCnBlcnNvbmlmaWNhdGlvbi9NCnBlcnNvbmlmeS9HRFNOWApwZXJzb25uZWwvTQpwZXJzcGVjdGl2ZS9NUwpwZXJzcGV4CnBlcnNwaWNhY2lvdXMvWQpwZXJzcGljYWNpdHkvTQpwZXJzcGljdWl0eS9NCnBlcnNwaWN1b3VzCnBlcnNwaXJhdGlvbi9NCnBlcnNwaXJlL0dEUwpwZXJzdWFkZS9CWkdEUlMKcGVyc3VhZGVkL1UKcGVyc3VhZGVyL00KcGVyc3Vhc2lvbi9TTQpwZXJzdWFzaXZlL1BZCnBlcnN1YXNpdmVuZXNzL00KcGVydC9SWVBUCnBlcnRhaW4vR1NECnBlcnRpbmFjaW91cy9ZCnBlcnRpbmFjaXR5L00KcGVydGluZW5jZS9NCnBlcnRpbmVudC9ZCnBlcnRuZXNzL00KcGVydHVyYi9ER1MKcGVydHVyYmF0aW9uL1NNCnBlcnR1cmJlZC9VCnBlcnR1c3Npcy9NCnBlcnVrZS9NUwpwZXJ1c2FsL01TCnBlcnVzZS9HRFMKcGVydi9TCnBlcnZhZGUvRFNHCnBlcnZhc2l2ZS9QWQpwZXJ2YXNpdmVuZXNzL00KcGVydmVyc2UvUFhZTgpwZXJ2ZXJzZW5lc3MvTQpwZXJ2ZXJzaW9uL00KcGVydmVyc2l0eS9NCnBlcnZlcnQvU0dNRApwZXNldGEvTVMKcGVza2lseQpwZXNraW5lc3MvTQpwZXNreS9UUFIKcGVzby9NUwpwZXNzYXJ5L1MKcGVzc2ltYWwKcGVzc2ltaXNtL00KcGVzc2ltaXN0L1NNCnBlc3NpbWlzdGljCnBlc3NpbWlzdGljYWxseQpwZXN0L01SU1oKcGVzdGVyL0dECnBlc3RpY2lkZS9NUwpwZXN0aWZlcm91cwpwZXN0aWxlbmNlL1NNCnBlc3RpbGVudApwZXN0aWxlbnRpYWwKcGVzdGxlL01HRFMKcGVzdG8vTQpwZXQvU1pNUgpwZXRhYnl0ZS9NUwpwZXRhbC9TTUQKcGV0YXJkL01TCnBldGNvY2svU00KcGV0ZXIvR01ECnBldGlvbGUvU00KcGV0aXRlL01TCnBldGl0aW9uL1pHTURSUwpwZXRpdGlvbmVyL00KcGV0cmVsL01TCnBldHJpZmFjdGlvbi9NCnBldHJpZnkvRFNHCnBldHJvY2hlbWljYWwvU00KcGV0cm9kb2xsYXIvTVMKcGV0cm9sL00KcGV0cm9sYXR1bS9NCnBldHJvbGV1bS9NCnBldHJvbG9naXN0L1NNCnBldHJvbG9neS9NCnBldHRlZApwZXR0aWNvYXQvTVMKcGV0dGlmb2cvUwpwZXR0aWZvZ2dlZApwZXR0aWZvZ2dlci9TTQpwZXR0aWZvZ2dlcnkvTQpwZXR0aWZvZ2dpbmcKcGV0dGlseQpwZXR0aW5lc3MvTQpwZXR0aW5nL00KcGV0dGlzaC9ZCnBldHR5L1BUUgpwZXR1bGFuY2UvTQpwZXR1bGFudC9ZCnBldHVuaWEvTVMKcGV3L1NNCnBld2VlL1NNCnBld2l0L1NNCnBld3Rlci9NUwpwZXlvdGUvTQpwZgpwZmVubmlnL01TCnBnCnBoYWV0b24vTVMKcGhhZ2UvUwpwaGFnb2N5dGUvU00KcGhhbGFuZ2VyL1NNCnBoYWxhbmdlcwpwaGFsYW54L01TCnBoYWxsaQpwaGFsbGljCnBoYWxsb2NlbnRyaWMKcGhhbGxvY2VudHJpc20KcGhhbGx1cy9NCnBoYW50YXNtL01TCnBoYW50YXNtYWdvcmlhL01TCnBoYW50YXNtYWdvcmljYWwKcGhhbnRhc21hbApwaGFudG9tL1NNCnBoYXJhb2gvTQpwaGFyYW9ocwpwaGFyaXNhaWMKcGhhcmlzZWUvU00KcGhhcm1hY2V1dGljL01TCnBoYXJtYWNldXRpY2FsL1NNCnBoYXJtYWNldXRpY3MvTQpwaGFybWFjaXN0L01TCnBoYXJtYWNvbG9naWMKcGhhcm1hY29sb2dpY2FsCnBoYXJtYWNvbG9naXN0L1NNCnBoYXJtYWNvbG9neS9NCnBoYXJtYWNvcG9laWEvTVMKcGhhcm1hY3kvU00KcGhhcnluZ2VhbApwaGFyeW5nZXMKcGhhcnluZ2l0aXMvTQpwaGFyeW54L00KcGhhc2UvRFNNRwpwaGFzZW91dC9TTQpwaGF0CnBoZWFzYW50L01TCnBoZW5hY2V0aW4vTQpwaGVub2JhcmJpdGFsL00KcGhlbm9sL00KcGhlbm9tL01TCnBoZW5vbWVuYQpwaGVub21lbmFsL1kKcGhlbm9tZW5vbG9naWNhbApwaGVub21lbm9sb2d5CnBoZW5vbWVub24vTVMKcGhlbm90eXBlCnBoZXJvbW9uZS9NUwpwaGV3CnBoaS9TTQpwaGlhbC9TTQpwaGlsYW5kZXIvWkdEUlMKcGhpbGFuZGVyZXIvTQpwaGlsYW5kZXJpbmcvTQpwaGlsYW50aHJvcGljCnBoaWxhbnRocm9waWNhbGx5CnBoaWxhbnRocm9waXN0L01TCnBoaWxhbnRocm9weS9TTQpwaGlsYXRlbGljCnBoaWxhdGVsaXN0L01TCnBoaWxhdGVseS9NCnBoaWxoYXJtb25pYy9TTQpwaGlsaXBwaWMvTVMKcGhpbGlzdGluZS9NUwpwaGlsaXN0aW5pc20vTQpwaGlsb2RlbmRyb24vU00KcGhpbG9sb2dpY2FsCnBoaWxvbG9naXN0L01TCnBoaWxvbG9neS9NCnBoaWxvc29waGVyL01TCnBoaWxvc29waGljCnBoaWxvc29waGljYWwvWQpwaGlsb3NvcGhpemUvRFJTWkcKcGhpbG9zb3BoaXplci9NCnBoaWxvc29waHkvU00KcGhpbHRlci9NUwpwaGlzaC9aR0RSCnBoaXNoZXIvTQpwaGxlYml0aXMvTQpwaGxlZ20vTQpwaGxlZ21hdGljCnBobGVnbWF0aWNhbGx5CnBobG9lbS9NCnBobG94L00KcGhvYmlhL01TCnBob2JpYy9NUwpwaG9lYmUvTVMKcGhvZW5peC9NUwpwaG9uZS9EU01HCnBob25lY2FyZC9TCnBob25lbWUvTVMKcGhvbmVtaWMKcGhvbmVtaWNhbGx5CnBob25ldGljL1MKcGhvbmV0aWNhbGx5CnBob25ldGljaWFuL1NNCnBob25ldGljcy9NCnBob25leWVkCnBob25leWluZwpwaG9uaWMvUwpwaG9uaWNhbGx5CnBob25pY3MvTQpwaG9uaW5lc3MvTQpwaG9ub2dyYXBoL00KcGhvbm9ncmFwaGljCnBob25vZ3JhcGhzCnBob25vbG9naWNhbC9ZCnBob25vbG9naXN0L01TCnBob25vbG9neS9NCnBob255L1BUR0RSU00KcGhvb2V5CnBob3NwaGF0ZS9NUwpwaG9zcGhvZGllc3RlcmFzZQpwaG9zcGhvci9NUwpwaG9zcGhvcmVzY2VuY2UvTQpwaG9zcGhvcmVzY2VudC9ZCnBob3NwaG9yaWMKcGhvc3Bob3JvdXMKcGhvc3Bob3J1cy9NCnBob3NwaG9yeWxhdGlvbgpwaG90by9TR01ECnBob3RvY2VsbC9NUwpwaG90b2NvcGllci9NCnBob3RvY29weS9EUlNNWkcKcGhvdG9lbGVjdHJpYwpwaG90b2VsZWN0cmljYWxseQpwaG90b2VuZ3JhdmUvRFJTSlpHCnBob3RvZW5ncmF2ZXIvTQpwaG90b2VuZ3JhdmluZy9NCnBob3RvZmluaXNoaW5nL00KcGhvdG9nZW5pYwpwaG90b2dlbmljYWxseQpwaG90b2dyYXBoL01EUlpHCnBob3RvZ3JhcGhlci9NCnBob3RvZ3JhcGhpYwpwaG90b2dyYXBoaWNhbGx5CnBob3RvZ3JhcGhzL0EKcGhvdG9ncmFwaHkvTQpwaG90b2pvdXJuYWxpc20vTQpwaG90b2pvdXJuYWxpc3QvU00KcGhvdG9tZXRlci9NUwpwaG90b24vTVMKcGhvdG9zZW5zaXRpdmUKcGhvdG9zdGF0L1NNCnBob3Rvc3RhdGljCnBob3Rvc3RhdHRlZApwaG90b3N0YXR0aW5nCnBob3Rvc3ludGhlc2lzL00KcGhvdG9zeW50aGVzaXplL0dEUwpwaG90b3N5bnRoZXRpYwpwaG90b3Ryb3BpYwpwaG90b3Ryb3Bpc20KcGhvdG90eXBlc2V0dGVyCnBob3RvdHlwZXNldHRpbmcKcGhyYXNhbApwaHJhc2UncwpwaHJhc2UvQUdEUwpwaHJhc2Vib29rL1MKcGhyYXNlb2xvZ3kvTQpwaHJhc2luZy9NUwpwaHJlYWtpbmcKcGhyZW5vbG9naXN0L1NNCnBocmVub2xvZ3kvTQpwaHlsYQpwaHlsYWN0ZXJ5L1NNCnBoeWxvZ2VueS9NCnBoeWx1bS9NCnBoeXMKcGh5c2ljL1NNCnBoeXNpY2FsL01ZUwpwaHlzaWNhbGl0eQpwaHlzaWNpYW4vU00KcGh5c2ljaXN0L1NNCnBoeXNpY2tlZApwaHlzaWNraW5nCnBoeXNpY3MvTQpwaHlzaW8vUwpwaHlzaW9nbm9teS9TTQpwaHlzaW9ncmFwaHkvTQpwaHlzaW9sb2dpYwpwaHlzaW9sb2dpY2FsL1kKcGh5c2lvbG9naXN0L01TCnBoeXNpb2xvZ3kvTQpwaHlzaW90aGVyYXBpc3QvTVMKcGh5c2lvdGhlcmFweS9NCnBoeXNpcXVlL01TCnBpL1NNRFJIWkcKcGlhbmlzc2ltby9TTQpwaWFuaXN0L01TCnBpYW5vL1NNCnBpYW5vZm9ydGUvU00KcGlhbm9sYS9TCnBpYXN0ZXIvTVMKcGlhenphL01TCnBpYnJvY2gvTQpwaWJyb2NocwpwaWMvU00KcGljYS9NCnBpY2Fkb3IvTVMKcGljYW50ZQpwaWNhcmVzcXVlCnBpY2F5dW5lCnBpY2NhbGlsbGkvTQpwaWNjb2xvL01TCnBpY2svTURSU0paRwpwaWNrYXgvR01EUwpwaWNrZXIvTQpwaWNrZXJlbC9NUwpwaWNrZXQvWkdNRFJTCnBpY2tpbmdzL00KcGlja2xlL01HRFMKcGlja3BvY2tldC9TTQpwaWNrdXAvTVMKcGlja3kvUFRSCnBpY25pYy9NUwpwaWNuaWNrZWQKcGljbmlja2VyL1NNCnBpY25pY2tpbmcKcGljb3QvU00KcGljdG9ncmFwaC9NCnBpY3RvZ3JhcGhzCnBpY3RvcmlhbC9NWVMKcGljdHVyZS9NR0RTCnBpY3R1cmVzcXVlL1BZCnBpY3R1cmVzcXVlbmVzcy9NCnBpZGRsZS9NR0RTCnBpZGRseQpwaWRnaW4vTVMKcGllL1NNCnBpZWJhbGQvTVMKcGllY2UvRFNNRwpwaWVjZW1lYWwKcGllY2V3b3JrL01SWgpwaWVjZXdvcmtlci9NCnBpZWNydXN0L1NNCnBpZWluZwpwaWVyL00KcGllcmNlL0pHRFMKcGllcmNpbmcvTVkKcGlldHkvTQpwaWV6b2VsZWN0cmljCnBpZmZsZS9NRwpwaWcvU01MCnBpZ2Vvbi9NUwpwaWdlb25ob2xlL0RTTUcKcGlnZ2VkCnBpZ2dlcnkvUwpwaWdnaW5nCnBpZ2dpc2gvUFkKcGlnZ2lzaG5lc3MvTQpwaWdneS9UUlNNCnBpZ2d5YmFjay9NRFNHCnBpZ2hlYWRlZC9QWQpwaWdoZWFkZWRuZXNzL00KcGlnbGV0L01TCnBpZ21lbnQvTURTCnBpZ21lbnRhdGlvbi9NCnBpZ3Blbi9NUwpwaWdza2luL01TCnBpZ3N0eS9TTQpwaWdzd2lsbApwaWd0YWlsL01TCnBpa2UvTVpHRFJTCnBpa2VyL00KcGlrZXN0YWZmL1NNCnBpbGFmL1NNCnBpbGFzdGVyL01TCnBpbGNoYXJkL01TCnBpbGUvTUdEU0oKcGlsZXVwL01TCnBpbGZlci9aR0RSUwpwaWxmZXJhZ2UvTQpwaWxmZXJlci9NCnBpbGdyaW0vTVMKcGlsZ3JpbWFnZS9NUwpwaWxpbmcvTQpwaWxsL01EU0cKcGlsbGFnZS9NWkdEUlMKcGlsbGFnZXIvTQpwaWxsYXIvTURTCnBpbGxib3gvTVMKcGlsbGlvbi9NUwpwaWxsb2NrL1MKcGlsbG9yeS9HRFNNCnBpbGxvdy9HTURTCnBpbGxvd2Nhc2UvTVMKcGlsbG93c2xpcC9NUwpwaWxvdC9ER1NNCnBpbG90aG91c2UvU00KcGltZW50by9NUwpwaW1pZW50by9NUwpwaW1wL0dNRFlTCnBpbXBlcm5lbC9NUwpwaW1wbGUvRFNNCnBpbXBseS9SVApwaW4vU00KcGluYWZvcmUvTVMKcGluYXRhL01TCnBpbmJhbGwvTQpwaW5jZXIvTVMKcGluY2gvR01EUwpwaW5jdXNoaW9uL01TCnBpbmUncwpwaW5lL0FHRFMKcGluZWFwcGxlL01TCnBpbmV3b29kL1MKcGluZXkKcGluZmVhdGhlci9TTQpwaW5nL0dNRApwaW5oZWFkL1NNCnBpbmhvbGUvU00KcGluaWVyCnBpbmllc3QKcGluaW9uL1NNREcKcGluay9UR1BNRFJTCnBpbmtleWUvTQpwaW5raWUvU00KcGlua2lzaApwaW5rbmVzcy9NCnBpbmtvL01TCnBpbm5hY2xlL1NNCnBpbm5hdGUKcGlubmVkL1UKcGlubmluZy9VCnBpbm55L1MKcGlub2NobGUvTQpwaW5vbi9NUwpwaW5wb2ludC9TR01ECnBpbnByaWNrL01TCnBpbnNldHRlci9TTQpwaW5zdHJpcGUvRFNNCnBpbnQvTVMKcGludG8vTVMKcGludXAvTVMKcGlud2hlZWwvR1NNRApwaW55aW4vTQpwaW55b24vU00KcGlvbmVlci9TR01ECnBpb3VzL1lQCnBpb3VzbmVzcy9NCnBpcC9TWkdNRFIKcGlwZS9NUwpwaXBlbGluZS9TTQpwaXBlci9NCnBpcGV0dGUvU00KcGlwZXdvcmsKcGlwaW5nL00KcGlwaXQvTVMKcGlwcGVkCnBpcHBpbi9TTQpwaXBwaW5nCnBpcHNxdWVhay9TTQpwaXF1YW5jeS9NCnBpcXVhbnQvWQpwaXF1ZS9NR0RTCnBpcmFjeS9NCnBpcmFuaGEvU00KcGlyYXRlL0RTTUcKcGlyYXRpY2FsL1kKcGlyb2dpL00KcGlyb3Noa2kvTQpwaXJvdWV0dGUvRFNNRwpwaXNjYXRvcmlhbApwaXNtaXJlL1NNCnBpc3MvWkdNRFJTCnBpc3NvaXIvUwpwaXN0YWNoaW8vU00KcGlzdGUvUwpwaXN0aWwvU00KcGlzdGlsbGF0ZQpwaXN0b2wvU00KcGlzdG9uL1NNCnBpdC9TTQpwaXRhL01TCnBpdGFwYXQvU00KcGl0Y2gvTURSU1pHCnBpdGNoYmxlbmRlL00KcGl0Y2hlci9NCnBpdGNoZm9yay9NRFNHCnBpdGNobWFuL00KcGl0Y2htZW4KcGl0ZW91cy9ZUApwaXRlb3VzbmVzcy9NCnBpdGZhbGwvU00KcGl0aC9NCnBpdGhlYWQvUwpwaXRoaWx5CnBpdGhpbmVzcy9NCnBpdGh5L1JUUApwaXRpYWJsZQpwaXRpYWJseQpwaXRpZnVsL1kKcGl0aWxlc3MvUFkKcGl0aWxlc3NuZXNzL00KcGl0b24vTVMKcGl0dGEvUwpwaXR0YW5jZS9NUwpwaXR0ZWQKcGl0dGluZwpwaXR1aXRhcnkvU00KcGl0eS9HRFNNCnBpdHlpbmcvWQpwaXZvdC9NREdTCnBpdm90YWwKcGl4L00KcGl4ZWwvTVMKcGl4aWUvTVMKcGl6emEvTVMKcGl6emF6ei9NCnBpenplcmlhL1NNCnBpenppY2F0aQpwaXp6aWNhdG8vTQpwaidzCnBrCnBrZwpwa3QKcGt3eQpwbApwbGFjYXJkL1NNREcKcGxhY2F0ZS9EU0dOCnBsYWNhdGlvbi9NCnBsYWNhdG9yeQpwbGFjZSdzCnBsYWNlL0FFU0RMRwpwbGFjZWJvL1NNCnBsYWNlZC9VCnBsYWNlaG9sZGVyL01TCnBsYWNla2ljay9NRFJaR1MKcGxhY2VraWNrZXIvTQpwbGFjZW1lbnQvRUFTTQpwbGFjZW50YS9TTQpwbGFjZW50YWwvUwpwbGFjZXIvU00KcGxhY2lkL1kKcGxhY2lkaXR5L00KcGxhY2luZ3MKcGxhY2tldC9TTQpwbGFnaWFyaXNtL1NNCnBsYWdpYXJpc3QvU00KcGxhZ2lhcml6ZS9EUlNaRwpwbGFnaWFyaXplci9NCnBsYWdpYXJ5L00KcGxhZ3VlL0RTTUcKcGxhaWNlCnBsYWlkL01TCnBsYWluL01SWVRTUApwbGFpbmNoYW50CnBsYWluY2xvdGhlcwpwbGFpbmNsb3RoZXNtYW4vTQpwbGFpbmNsb3RoZXNtZW4KcGxhaW5uZXNzL00KcGxhaW5zbWFuL00KcGxhaW5zbWVuCnBsYWluc29uZy9NCnBsYWluc3Bva2VuCnBsYWludC9TTVYKcGxhaW50aWZmL1NNCnBsYWludGl2ZS9ZCnBsYWl0L01ER1MKcGxhbi9aTVJTCnBsYW5hcgpwbGFuZSdzCnBsYW5lL0NHRFMKcGxhbmVsb2FkL01TCnBsYW5lci9NCnBsYW5ldC9TTQpwbGFuZXRhcml1bS9TTQpwbGFuZXRhcnkKcGxhbmdlbmN5L00KcGxhbmdlbnQKcGxhbmsvTURHUwpwbGFua2luZy9NCnBsYW5rdG9uL00KcGxhbm5lZC9VCnBsYW5uZXIvU00KcGxhbm5pbmcvUwpwbGFudC9NRFJaR1NKCnBsYW50YWluL1NNCnBsYW50YXIKcGxhbnRhdGlvbi9NUwpwbGFudGVyL00KcGxhbnRpbmcvTQpwbGFudGxpa2UKcGxhcXVlL1NNCnBsYXNoL01EU0cKcGxhc21hL00KcGxhc3Rlci9TWkdNRFIKcGxhc3RlcmJvYXJkL00KcGxhc3RlcmVyL00KcGxhc3RpYy9TTQpwbGFzdGljaXR5L00KcGxhc3RpY2l6ZS9EU0cKcGxhc3RpcXVlCnBsYXQvWEdNRE5TCnBsYXRlL01TCnBsYXRlYXUvU01ERwpwbGF0ZWZ1bC9TTQpwbGF0ZWxldC9TTQpwbGF0ZW4vTQpwbGF0Zm9ybS9TR01ECnBsYXRpbmcvTQpwbGF0aW51bS9NCnBsYXRpdHVkZS9TTQpwbGF0aXR1ZGlub3VzCnBsYXRvbmljCnBsYXRvb24vU0dNRApwbGF0dGVkCnBsYXR0ZXIvU00KcGxhdHRpbmcKcGxhdHkvTQpwbGF0eXB1cy9NUwpwbGF0eXMKcGxhdWRpdC9TTQpwbGF1c2liaWxpdHkvTQpwbGF1c2libGUKcGxhdXNpYmx5CnBsYXkvQUVHTURTCnBsYXlhYmxlL0VVCnBsYXlhY3QvU0dECnBsYXlhY3RpbmcvTQpwbGF5YmFjay9NUwpwbGF5YmlsbC9NUwpwbGF5Ym9vay9NUwpwbGF5Ym95L1NNCnBsYXllci9TTQpwbGF5ZmVsbG93L1NNCnBsYXlmdWwvUFkKcGxheWZ1bG5lc3MvTQpwbGF5Z2lybC9NUwpwbGF5Z29lci9NUwpwbGF5Z3JvdW5kL1NNCnBsYXlncm91cC9TCnBsYXlob3VzZS9NUwpwbGF5bGlzdC9NUwpwbGF5bWF0ZS9NUwpwbGF5b2ZmL1NNCnBsYXlwZW4vU00KcGxheXJvb20vU00KcGxheXNjaG9vbC9TCnBsYXl0aGluZy9TTQpwbGF5dGltZS9NCnBsYXl3cmlnaHQvU00KcGxhemEvTVMKcGxlYS9NUwpwbGVhZC9EUlpHU0oKcGxlYWRlci9NCnBsZWFkaW5nL01ZCnBsZWFzYW50L1VUWVAKcGxlYXNhbnRlcgpwbGVhc2FudG5lc3MvVU0KcGxlYXNhbnRyeS9TTQpwbGVhc2UvRURTRwpwbGVhc2luZy9ZUwpwbGVhc3VyYWJseQpwbGVhc3VyZS9NR0RTQgpwbGVhc3VyZWZ1bApwbGVhdC9NREdTCnBsZWIvUwpwbGViYnkKcGxlYmUvTVMKcGxlYmVpYW4vTVMKcGxlYmlzY2l0ZS9NUwpwbGVjdHJhCnBsZWN0cnVtL01TCnBsZWRnZS9EU01HCnBsZW5hcnkvU00KcGxlbmlwb3RlbnRpYXJ5L1NNCnBsZW5pdHVkZS9TTQpwbGVudGVvdXMKcGxlbnRpZnVsL1kKcGxlbnR5L00KcGxlbnVtL1MKcGxlb25hc20vTVMKcGxldGhvcmEvTQpwbGV1cmEvTQpwbGV1cmFlCnBsZXVyaXN5L00KcGxleHVzL01TCnBsaWFiaWxpdHkvTQpwbGlhYmxlCnBsaWFuY3kvTQpwbGlhbnQvWQpwbGllcnMvTQpwbGlnaHQvU01ERwpwbGltc29sbC9TCnBsaW50aC9NCnBsaW50aHMKcGxvZC9TCnBsb2RkZWQKcGxvZGRlci9NUwpwbG9kZGluZy9TCnBsb25rL0RSU1pHCnBsb3AvTVMKcGxvcHBlZApwbG9wcGluZwpwbG9zaXZlL1MKcGxvdC9NUwpwbG90dGVkCnBsb3R0ZXIvU00KcGxvdHRpbmcKcGxvdmVyL1NNCnBsb3cvR01EUwpwbG93bWFuL00KcGxvd21lbgpwbG93c2hhcmUvTVMKcGxveSdzCnBsb3kvUwpwbHVjay9NRFNHCnBsdWNraWx5CnBsdWNraW5lc3MvTQpwbHVja3kvUlBUCnBsdWcncwpwbHVnL1VTCnBsdWdnZWQvVQpwbHVnZ2luZy9VCnBsdWdob2xlL1MKcGx1Z2luL1NNCnBsdW0vR01EUwpwbHVtYWdlL00KcGx1bWIvTURSU1pHSgpwbHVtYmVkL1UKcGx1bWJlci9NCnBsdW1iaW5nL00KcGx1bWUvTVMKcGx1bW1ldC9TR01ECnBsdW1teQpwbHVtcC9NRFJZU1RHUApwbHVtcG5lc3MvTQpwbHVteS9SVApwbHVuZGVyL1NaR01EUgpwbHVuZGVyZXIvTQpwbHVuZ2UvRFJTTVpHCnBsdW5nZXIvTQpwbHVuay9NRFNHCnBsdXBlcmZlY3QvU00KcGx1cmFsL1NNCnBsdXJhbGlzbS9NCnBsdXJhbGlzdC9NUwpwbHVyYWxpc3RpYwpwbHVyYWxpdHkvU00KcGx1cmFsaXphdGlvbi9NCnBsdXJhbGl6ZS9HRFMKcGx1cy9NUwpwbHVzaC9NUllUUApwbHVzaG5lc3MvTQpwbHVzaHkvUlQKcGx1dG9jcmFjeS9TTQpwbHV0b2NyYXQvU00KcGx1dG9jcmF0aWMKcGx1dG9uaXVtL00KcGx1dmlhbApwbHkvQUdEU00KcGx5d29vZC9NCnBtCnBuZXVtYXRpYwpwbmV1bWF0aWNhbGx5CnBuZXVtb2NvY2NhbApwbmV1bW9jb2NjaQpwbmV1bW9jb2NjdXMKcG5ldW1vbmlhL00KcG9hY2gvRFJTWkcKcG9hY2hlci9NCnBvYWNoaW5nL00KcG9jay9HTURTCnBvY2tldC9TTURHCnBvY2tldGJvb2svU00KcG9ja2V0ZnVsL1NNCnBvY2tldGtuaWZlL00KcG9ja2V0a25pdmVzCnBvY2ttYXJrL01ER1MKcG9kL1NNCnBvZGNhc3QvU01HCnBvZGRlZApwb2RkaW5nCnBvZGlhdHJpc3QvU00KcG9kaWF0cnkvTQpwb2RpdW0vU00KcG9lbS9NUwpwb2VzeS9NCnBvZXQvTVMKcG9ldGFzdGVyL01TCnBvZXRlc3MvTVMKcG9ldGljL1MKcG9ldGljYWwvWQpwb2V0cnkvTQpwb2dyb20vU00KcG9pL00KcG9pZ25hbmN5L00KcG9pZ25hbnQvWQpwb2luY2lhbmEvU00KcG9pbnNldHRpYS9TTQpwb2ludC9NRFJTWkcKcG9pbnRibGFuawpwb2ludGVkL1kKcG9pbnRlci9NCnBvaW50aWxsaXNtL00KcG9pbnRpbGxpc3QvU00KcG9pbnRsZXNzL1BZCnBvaW50bGVzc25lc3MvTQpwb2ludHkvVFIKcG9pc2UvTUdEUwpwb2lzb24vU0paR01EUgpwb2lzb25lci9NCnBvaXNvbmluZy9NCnBvaXNvbm91cy9ZCnBva2UvTVpHRFJTCnBva2VyL00KcG9rZXkvTVMKcG9reS9UUgpwb2wvU0dNRApwb2xhcgpwb2xhcml0eS9TTQpwb2xhcml6YXRpb24vQ00KcG9sYXJpemUvQ0RTRwpwb2xlL01TCnBvbGVheGUvR0RTCnBvbGVjYXQvTVMKcG9sZW1pYy9NUwpwb2xlbWljYWwvWQpwb2xlbWljaXN0L1NNCnBvbGVtaWNzL00KcG9sZXN0YXIvU00KcG9saWNlL0RTTUcKcG9saWNlbWFuL00KcG9saWNlbWVuCnBvbGljZXdvbWFuL00KcG9saWNld29tZW4KcG9saWN5L1NNCnBvbGljeWhvbGRlci9NUwpwb2xpY3ltYWtlci9TCnBvbGlvL01TCnBvbGlvbXllbGl0aXMvTQpwb2xpc2gvWkdNRFJTCnBvbGlzaGVkL1UKcG9saXNoZXIvTQpwb2xpdGJ1cm8vTVMKcG9saXRlL1JZVFAKcG9saXRlbmVzcy9NCnBvbGl0ZXNzZS9NCnBvbGl0aWMvUwpwb2xpdGljYWwvWQpwb2xpdGljaWFuL1NNCnBvbGl0aWNpemF0aW9uL00KcG9saXRpY2l6ZS9DRFNHCnBvbGl0aWNraW5nL00KcG9saXRpY28vU00KcG9saXRpY3MvTQpwb2xpdHkvU00KcG9sa2EvTURTRwpwb2xsL0dNRE5TCnBvbGxhY2svTVMKcG9sbGFyZC9TCnBvbGxlbi9NCnBvbGxpbmF0ZS9HTkRTCnBvbGxpbmF0aW9uL00KcG9sbGluYXRvci9TTQpwb2xsaW5nL00KcG9sbGl3b2cvU00KcG9sbHN0ZXIvU00KcG9sbHV0YW50L01TCnBvbGx1dGUvWkdORFJTCnBvbGx1dGVkL1UKcG9sbHV0ZXIvTQpwb2xsdXRpb24vTQpwb2xvL00KcG9sb25haXNlL1NNCnBvbG9uaXVtL00KcG9sdGVyZ2Vpc3QvTVMKcG9sdHJvb24vU00KcG9seQpwb2x5YWNyeWxhbWlkZQpwb2x5YW1vcnkvUwpwb2x5YW5kcm91cwpwb2x5YW5kcnkvTQpwb2x5Y2xpbmljL1NNCnBvbHllc3Rlci9NUwpwb2x5ZXRoeWxlbmUvTQpwb2x5Z2FtaXN0L01TCnBvbHlnYW1vdXMKcG9seWdhbXkvTQpwb2x5Z2xvdC9TTQpwb2x5Z29uL1NNCnBvbHlnb25hbApwb2x5Z3JhcGgvR01ECnBvbHlncmFwaHMKcG9seWhlZHJhbApwb2x5aGVkcm9uL1NNCnBvbHltYXRoL00KcG9seW1hdGhzCnBvbHltZXIvU00KcG9seW1lcmljCnBvbHltZXJpemF0aW9uL00KcG9seW1lcml6ZS9HRFMKcG9seW1vcnBoaWMKcG9seW1vcnBob3VzCnBvbHlub21pYWwvTVMKcG9seXAvTVMKcG9seXBob25pYwpwb2x5cGhvbnkvTQpwb2x5cHJvcHlsZW5lL00KcG9seXMKcG9seXNlbW91cwpwb2x5c3R5cmVuZS9NCnBvbHlzeWxsYWJpYwpwb2x5c3lsbGFibGUvTVMKcG9seXRlY2huaWMvTVMKcG9seXRoZWlzbS9NCnBvbHl0aGVpc3QvU00KcG9seXRoZWlzdGljCnBvbHl0aGVuZQpwb2x5dW5zYXR1cmF0ZS9EUwpwb2x5dXJldGhhbmUvTVMKcG9seXZpbnlsCnBvbS9TCnBvbWFkZS9EU01HCnBvbWFuZGVyL1NNCnBvbWVncmFuYXRlL01TCnBvbW1lbC9TR01ECnBvbW15L1MKcG9tcC9NCnBvbXBhZG91ci9TTUQKcG9tcGFuby9NUwpwb21wb20vU00KcG9tcG9zaXR5L00KcG9tcG91cy9ZUApwb21wb3VzbmVzcy9NCnBvbmNlL0dEUwpwb25jaG8vU00KcG9uY3kKcG9uZC9NUwpwb25kZXIvU1pHRFIKcG9uZGVyZXIvTQpwb25kZXJvdXMvWVAKcG9uZGVyb3VzbmVzcy9NCnBvbmUvTVMKcG9uZy9HRFMKcG9uZ2VlL00KcG9uaWFyZC9NUwpwb250aWZmL1NNCnBvbnRpZmljYWwvWQpwb250aWZpY2F0ZS9EU01HCnBvbnRvb24vU00KcG9ueS9HRFNNCnBvbnl0YWlsL01TCnBvby9TR0QKcG9vY2gvTURTRwpwb29kbGUvU00KcG9vZi9NUwpwb29mdGVyL1MKcG9vaC9HTUQKcG9vaHMKcG9vbC9HTURTCnBvb2xyb29tL01TCnBvb2xzaWRlL1MKcG9vcC9HTURTCnBvb3IvVFJZUApwb29yYm95L00KcG9vcmhvdXNlL1NNCnBvb3JuZXNzL00KcG9wL1NNCnBvcGNvcm4vTQpwb3BlL01TCnBvcGd1bi9TTQpwb3BpbmpheS9NUwpwb3BsYXIvU00KcG9wbGluL00KcG9wb3Zlci9TTQpwb3BwYS9NUwpwb3BwYWRvbS9TCnBvcHBlZApwb3BwZXIvU00KcG9wcGV0L1MKcG9wcGluZwpwb3BweS9TTQpwb3BweWNvY2svTQpwb3B1bGFjZS9NUwpwb3B1bGFyL1kKcG9wdWxhcml0eS9VTQpwb3B1bGFyaXphdGlvbi9NCnBvcHVsYXJpemUvRFNHCnBvcHVsYXRlL0FDR0RTCnBvcHVsYXRpb24vQ00KcG9wdWxhdGlvbnMKcG9wdWxpc20vTQpwb3B1bGlzdC9NUwpwb3B1bG91cy9QCnBvcHVsb3VzbmVzcy9NCnBvcHVwL01TCnBvcmNlbGFpbi9TTQpwb3JjaC9NUwpwb3JjaW5lCnBvcmN1cGluZS9TTQpwb3JlL01HRFMKcG9yZ3kvU00KcG9yay9aTVIKcG9ya2VyL00KcG9ya3kvUlNNVApwb3JuL00KcG9ybm8vTQpwb3Jub2dyYXBoZXIvTVMKcG9ybm9ncmFwaGljCnBvcm5vZ3JhcGhpY2FsbHkKcG9ybm9ncmFwaHkvTQpwb3Jvc2l0eS9NCnBvcm91cy9QCnBvcm91c25lc3MvTQpwb3JwaHlyaXRpYwpwb3JwaHlyeS9NCnBvcnBvaXNlL01HRFMKcG9ycmlkZ2UvTQpwb3JyaW5nZXIvU00KcG9ydCdzL0EKcG9ydC9DQUVHRFMKcG9ydGFiaWxpdHkvTQpwb3J0YWJsZS9NUwpwb3J0YWdlL0RTTUcKcG9ydGFsL1NNCnBvcnRjdWxsaXMvTVMKcG9ydGVuZC9TR0QKcG9ydGVudC9TTQpwb3J0ZW50b3VzL1lQCnBvcnRlci9BU00KcG9ydGVyaG91c2UvU00KcG9ydGZvbGlvL01TCnBvcnRob2xlL01TCnBvcnRpY28vTQpwb3J0aWNvZXMKcG9ydGllcmUvTVMKcG9ydGlvbi9LU0dNRApwb3J0bGluZXNzL00KcG9ydGx5L1JQVApwb3J0bWFudGVhdS9NUwpwb3J0cmFpdC9NUwpwb3J0cmFpdGlzdC9TTQpwb3J0cmFpdHVyZS9NCnBvcnRyYXkvU0dECnBvcnRyYXlhbC9NUwpwb3J0dWxhY2EvTQpwb3NlJ3MvQQpwb3NlL0NBS0VHRFMKcG9zZXIvRUtTTQpwb3NldXIvU00KcG9zaC9UUgpwb3NpdC9EU0dWCnBvc2l0aW9uL0NLRU1TCnBvc2l0aW9uYWwvSwpwb3NpdGlvbmVkL0sKcG9zaXRpb25pbmcvSwpwb3NpdGl2ZS9NWVBTCnBvc2l0aXZlbmVzcy9NCnBvc2l0aXZpc20KcG9zaXRpdmlzdC9TCnBvc2l0cm9uL01TCnBvc3MKcG9zc2UvTVMKcG9zc2Vzcy9BRVZHU0QKcG9zc2Vzc2lvbi9BU00KcG9zc2Vzc2l2ZS9TTVlQCnBvc3Nlc3NpdmVuZXNzL00KcG9zc2Vzc29yL1NNCnBvc3NpYmlsaXR5L1NNCnBvc3NpYmxlL1NNCnBvc3NpYmx5CnBvc3N1bS9TTQpwb3N0L1pHTURSU0oKcG9zdGFnZS9NCnBvc3RhbApwb3N0YmFnL1MKcG9zdGJveC9TCnBvc3RjYXJkL1NNCnBvc3Rjb2RlL1MKcG9zdGNvbG9uaWFsCnBvc3Rjb25zb25hbnRhbApwb3N0ZGF0ZS9EU0cKcG9zdGRvYy9NUwpwb3N0ZG9jdG9yYWwKcG9zdGVyL00KcG9zdGVyaW9yL1NNCnBvc3Rlcml0eS9NCnBvc3RncmFkdWF0ZS9TTQpwb3N0aGFzdGUKcG9zdGh1bW91cy9ZCnBvc3RoeXBub3RpYwpwb3N0aWUvUwpwb3N0aWxpb24vU00KcG9zdGluZHVzdHJpYWwKcG9zdGluZy9NCnBvc3RsdWRlL1NNCnBvc3RtYW4vTQpwb3N0bWFyay9TTURHCnBvc3RtYXN0ZXIvTVMKcG9zdG1lbgpwb3N0bWVub3BhdXNhbApwb3N0bWVyaWRpYW4KcG9zdG1pc3RyZXNzL01TCnBvc3Rtb2Rlcm4KcG9zdG1vZGVybmlzbS9NCnBvc3Rtb2Rlcm5pc3QvTVMKcG9zdG1vcnRlbS9TTQpwb3N0bmFzYWwKcG9zdG5hdGFsCnBvc3RvcGVyYXRpdmUKcG9zdHBhaWQKcG9zdHBhcnR1bQpwb3N0cG9uZS9EU0dMCnBvc3Rwb25lbWVudC9TTQpwb3N0cHJhbmRpYWwKcG9zdHNjcmlwdC9TTQpwb3N0c2Vhc29uL1NNCnBvc3RzeW5hcHRpYwpwb3N0dWxhdGUvWERTTUdOCnBvc3R1bGF0aW9uL00KcG9zdHVyYWwKcG9zdHVyZS9NR0pEUwpwb3N0dXJpbmcvTQpwb3N0d2FyCnBvc3R3b21hbgpwb3N0d29tZW4KcG9zeS9TTQpwb3QvQ1NNCnBvdGFiaWxpdHkvTQpwb3RhYmxlL1NNCnBvdGFzaC9NCnBvdGFzc2l1bS9NCnBvdGF0by9NCnBvdGF0b2VzCnBvdGJlbGx5L0RTTQpwb3Rib2lsZXIvU00KcG90ZW5jeS9NCnBvdGVudC9ZCnBvdGVudGF0ZS9NUwpwb3RlbnRpYWwvTVlTCnBvdGVudGlhbGl0eS9TTQpwb3RlbnRpYXRlL0dEUwpwb3RmdWwvU00KcG90aGVhZC9TTQpwb3RoZXIvU01ERwpwb3RoZXJiL1NNCnBvdGhvbGRlci9NUwpwb3Rob2xlL0RSU01aRwpwb3Rob29rL1NNCnBvdGlvbi9TTQpwb3RsdWNrL01TCnBvdHBpZS9TTQpwb3Rwb3VycmkvU00KcG90c2hlcmQvU00KcG90c2hvdC9NUwpwb3R0YWdlL00KcG90dGVkCnBvdHRlci9HU01ECnBvdHRlcnkvU00KcG90dGluZwpwb3R0eS9QUlNNVApwb3VjaC9NRFNHCnBvdWYvUwpwb3VmZmUvUwpwb3VsdGVyZXIvTVMKcG91bHRpY2UvRFNNRwpwb3VsdHJ5L00KcG91bmNlL0RTTUcKcG91bmQncwpwb3VuZC9LRFNHCnBvdW5kYWdlL00KcG91bmRpbmcvU00KcG91ci9HRFNKCnBvdXQvWkdNRFJTCnBvdXRlci9NCnBvdmVydHkvTQpwb3cKcG93ZGVyL0dTTUQKcG93ZGVyeQpwb3dlci9NRFNHCnBvd2VyYm9hdC9NUwpwb3dlcmZ1bC9ZCnBvd2VyaG91c2UvU00KcG93ZXJsZXNzL1BZCnBvd2VybGVzc25lc3MvTQpwb3d3b3cvU0dNRApwb3gvTVMKcHAKcHBtCnBwcgpwcgpwcmFjdGljYWJpbGl0eS9NCnByYWN0aWNhYmx5CnByYWN0aWNhbC9TTVkKcHJhY3RpY2FsaXR5L1NNCnByYWN0aWNlL0RTTUdCCnByYWN0aWNlZC9VCnByYWN0aWN1bS9TTQpwcmFjdGl0aW9uZXIvU00KcHJhZXRvci9TTQpwcmFldG9yaWFuCnByYWdtYXRpYy9NUwpwcmFnbWF0aWNhbC9ZCnByYWdtYXRpc20vTQpwcmFnbWF0aXN0L01TCnByYWlyaWUvU00KcHJhaXNlL0VEU01HCnByYWlzZXdvcnRoaW5lc3MvTQpwcmFpc2V3b3J0aHkvUApwcmFsaW5lL1NNCnByYW0vTVMKcHJhbmNlL0RSU01aRwpwcmFuY2VyL00KcHJhbmNpbmcvWQpwcmFuZy9EU0cKcHJhbmsvTVMKcHJhbmtzdGVyL1NNCnByYXNlb2R5bWl1bS9NCnByYXQvUwpwcmF0ZS9NWkdEUlMKcHJhdGVyL00KcHJhdGZhbGwvU00KcHJhdHRsZS9EUlNNWkcKcHJhdHRsZXIvTQpwcmF3bi9NRFNHCnByYXkvWkdEUlMKcHJheWVyL00KcHJheWVyZnVsL1kKcHJlYWNoL0RSU1pHTApwcmVhY2hlci9NCnByZWFjaG1lbnQvTQpwcmVhY2h5L1JUCnByZWFkb2xlc2NlbmNlL1NNCnByZWFtYmxlL01HRFMKcHJlYXJyYW5nZS9MR0RTCnByZWFycmFuZ2VtZW50L00KcHJlYXNzaWduZWQKcHJlY2FuY2VsL1NNREcKcHJlY2FuY2Vyb3VzCnByZWNhcmlvdXMvUFkKcHJlY2FyaW91c25lc3MvTQpwcmVjYXN0CnByZWNhdXRpb24vTVMKcHJlY2F1dGlvbmFyeQpwcmVjZWRlL0RTRwpwcmVjZWRlbmNlL00KcHJlY2VkZW50L1NNCnByZWNlcHQvU00KcHJlY2VwdG9yL1NNCnByZWNpbmN0L01TCnByZWNpb3NpdHkvTQpwcmVjaW91cy9ZUApwcmVjaW91c25lc3MvTQpwcmVjaXBpY2UvU00KcHJlY2lwaXRhbnQvTVMKcHJlY2lwaXRhdGUvWE1ZR05EUwpwcmVjaXBpdGF0aW9uL00KcHJlY2lwaXRvdXMvWQpwcmVjaXMvTQpwcmVjaXNlL0RSU1lUR05QCnByZWNpc2VuZXNzL00KcHJlY2lzaW9uL00KcHJlY2x1ZGUvR0RTCnByZWNsdXNpb24vTQpwcmVjb2Npb3VzL1lQCnByZWNvY2lvdXNuZXNzL00KcHJlY29jaXR5L00KcHJlY29nbml0aW9uL00KcHJlY29nbml0aXZlCnByZWNvbG9uaWFsCnByZWNvbmNlaXZlL0dEUwpwcmVjb25jZXB0aW9uL1NNCnByZWNvbmRpdGlvbi9NREdTCnByZWNvb2svR1NECnByZWN1cnNvci9TTQpwcmVjdXJzb3J5CnByZWRhdGUvRFNHCnByZWRhdG9yL01TCnByZWRhdG9yeQpwcmVkYXduCnByZWRlY2Vhc2UvR0RTCnByZWRlY2Vzc29yL1NNCnByZWRlZmluZWQKcHJlZGVzaWduYXRlL0dEUwpwcmVkZXN0aW5hdGlvbi9NCnByZWRlc3RpbmUvRFNHCnByZWRldGVybWluYXRpb24vTQpwcmVkZXRlcm1pbmUvWkdEUlMKcHJlZGV0ZXJtaW5lci9NCnByZWRpY2FibGUKcHJlZGljYW1lbnQvTVMKcHJlZGljYXRlL01HTlZEUwpwcmVkaWNhdGlvbi9NCnByZWRpY2F0aXZlL1kKcHJlZGljdC9CR1ZTRApwcmVkaWN0YWJpbGl0eS9VTQpwcmVkaWN0YWJsZS9VCnByZWRpY3RhYmx5L1UKcHJlZGljdGlvbi9TTQpwcmVkaWN0b3IvTVMKcHJlZGlnZXN0L0dEUwpwcmVkaWxlY3Rpb24vU00KcHJlZGlzcG9zZS9HRFMKcHJlZGlzcG9zaXRpb24vTVMKcHJlZG9taW5hbmNlL00KcHJlZG9taW5hbnQvWQpwcmVkb21pbmF0ZS9ZR0RTCnByZWVtaWUvU00KcHJlZW1pbmVuY2UvTQpwcmVlbWluZW50L1kKcHJlZW1wdC9HVlNECnByZWVtcHRpb24vTQpwcmVlbXB0aXZlL1kKcHJlZW4vRFNHCnByZWV4aXN0L0RHUwpwcmVleGlzdGVuY2UvTQpwcmVmCnByZWZhYi9TTQpwcmVmYWJiZWQKcHJlZmFiYmluZwpwcmVmYWJyaWNhdGUvRFNHTgpwcmVmYWJyaWNhdGlvbi9NCnByZWZhY2UvRFNNRwpwcmVmYXRvcnkKcHJlZmVjdC9TTQpwcmVmZWN0dXJlL01TCnByZWZlci9TQkwKcHJlZmVyYWJseQpwcmVmZXJlbmNlL01TCnByZWZlcmVudGlhbC9ZCnByZWZlcm1lbnQvTQpwcmVmZXJyZWQKcHJlZmVycmluZwpwcmVmaWd1cmUvR0RTCnByZWZpeC9NRFNHCnByZWZvcm0vR1NECnByZWZyb250YWwKcHJlZ2FtZS9TTQpwcmVnbmFuY3kvU00KcHJlZ25hbnQKcHJlaGVhdC9HU0QKcHJlaGVuc2lsZQpwcmVoaXN0b3JpYW4vUwpwcmVoaXN0b3JpYwpwcmVoaXN0b3JpY2FsL1kKcHJlaGlzdG9yeS9NCnByZWh1bWFuCnByZWp1ZGdlL0dEUwpwcmVqdWRnbWVudC9TTQpwcmVqdWRpY2UvTUdEUwpwcmVqdWRpY2VkL1UKcHJlanVkaWNpYWwKcHJla2luZGVyZ2FydGVuL1NNCnByZWxhY3kvTQpwcmVsYXRlL1NNCnByZWxpbS9TTQpwcmVsaW1pbmFyeS9TTQpwcmVsaXRlcmF0ZQpwcmVsdWRlL01TCnByZW1hcml0YWwKcHJlbWF0dXJlL1kKcHJlbWVkL1NNCnByZW1lZGljYWwKcHJlbWVkaXRhdGUvRFNHTgpwcmVtZWRpdGF0ZWQvVQpwcmVtZWRpdGF0aW9uL00KcHJlbWVuc3RydWFsCnByZW1pZXIvU0dNRApwcmVtaWVyZS9NUwpwcmVtaWVyc2hpcC9NUwpwcmVtaXNlL0RTTUcKcHJlbWl1bS9TTQpwcmVtaXgvR0RTCnByZW1vbGFyL1NNCnByZW1vbml0aW9uL01TCnByZW1vbml0b3J5CnByZW5hdGFsL1kKcHJlbnVwL1NNCnByZW51cHRpYWwKcHJlb2NjdXBhdGlvbi9TTQpwcmVvY2N1cHkvRFNHCnByZW9wZXJhdGl2ZQpwcmVvcmRhaW4vR0RTCnByZXAvTVMKcHJlcGFja2FnZS9EU0cKcHJlcGFja2VkCnByZXBhaWQKcHJlcGFyYXRpb24vU00KcHJlcGFyYXRvcnkKcHJlcGFyZS9HRFMKcHJlcGFyZWQvVVAKcHJlcGFyZWRuZXNzL1VNCnByZXBheS9HU0wKcHJlcGF5bWVudC9NUwpwcmVwb25kZXJhbmNlL1NNCnByZXBvbmRlcmFudC9ZCnByZXBvbmRlcmF0ZS9HRFMKcHJlcG9zaXRpb24vU00KcHJlcG9zaXRpb25hbC9ZCnByZXBvc3Nlc3MvR0RTCnByZXBvc3Nlc3NpbmcvVQpwcmVwb3NzZXNzaW9uL1NNCnByZXBvc3Rlcm91cy9ZCnByZXBwZWQKcHJlcHBpbmcKcHJlcHB5L1RSU00KcHJlcHViZXNjZW5jZS9NCnByZXB1YmVzY2VudC9TTQpwcmVwdWNlL01TCnByZXF1ZWwvTVMKcHJlcmVjb3JkL0dTRApwcmVyZWdpc3Rlci9TR0QKcHJlcmVnaXN0cmF0aW9uL00KcHJlcmVxdWlzaXRlL01TCnByZXJvZ2F0aXZlL1NNCnByZXMKcHJlc2FnZS9NR0RTCnByZXNieW9waWEvTQpwcmVzYnl0ZXIvU00KcHJlc2J5dGVyeS9TTQpwcmVzY2hvb2wvU1pNUgpwcmVzY2hvb2xlci9NCnByZXNjaWVuY2UvTQpwcmVzY2llbnQvWQpwcmVzY3JpYmUvRFNHCnByZXNjcmlwdC9TVk0KcHJlc2NyaXB0aW9uL1NNCnByZXNjcmlwdGl2ZS9ZCnByZXNlYXNvbi9TTQpwcmVzZW5jZS9TTQpwcmVzZW50L0xNRFJZWkdTQgpwcmVzZW50YWJseQpwcmVzZW50YXRpb24vQVNNCnByZXNlbnRlci9NCnByZXNlbnRpbWVudC9TTQpwcmVzZW50bWVudC9TTQpwcmVzZXJ2YXRpb24vTQpwcmVzZXJ2YXRpb25pc3QvU00KcHJlc2VydmF0aXZlL1NNCnByZXNlcnZlL0JEUlNNWkcKcHJlc2VydmVyL00KcHJlc2V0L1MKcHJlc2V0dGluZwpwcmVzaHJhbmsKcHJlc2hyaW5rL0dTCnByZXNocnVuawpwcmVzaWRlL0dEUwpwcmVzaWRlbmN5L1NNCnByZXNpZGVudC9NUwpwcmVzaWRlbnRpYWwKcHJlc2lkaXVtL00KcHJlc29ydC9ER1MKcHJlc3MncwpwcmVzcy9BQ0dTRApwcmVzc2VkL1UKcHJlc3Nlci9NUwpwcmVzc2llL1MKcHJlc3NpbmcvU01ZCnByZXNzbWFuL00KcHJlc3NtZW4KcHJlc3N1cmUvRFNNRwpwcmVzc3VyaXphdGlvbi9NCnByZXNzdXJpemUvQ0dEUwpwcmVzc3VyaXplci9TTQpwcmVzdGlkaWdpdGF0aW9uL00KcHJlc3RpZ2UvTQpwcmVzdGlnaW91cwpwcmVzdG8vU00KcHJlc3VtYWJseQpwcmVzdW1lL0dEU0IKcHJlc3VtcHRpb24vU00KcHJlc3VtcHRpdmUKcHJlc3VtcHR1b3VzL1lQCnByZXN1bXB0dW91c25lc3MvTQpwcmVzdXBwb3NlL0RTRwpwcmVzdXBwb3NpdGlvbi9NUwpwcmV0YXgKcHJldGVlbi9NUwpwcmV0ZW5kL0RSWkdTCnByZXRlbmRlci9NCnByZXRlbnNlL1NYTU4KcHJldGVuc2lvbi9NCnByZXRlbnRpb3VzL1VZCnByZXRlbnRpb3VzbmVzcy9NCnByZXRlcml0L1NNCnByZXRlcm0KcHJldGVybmF0dXJhbC9ZCnByZXRlc3QvREdTCnByZXRleHQvTVMKcHJldHJpYWwvUwpwcmV0dGlmeS9HRFMKcHJldHRpbHkKcHJldHRpbmVzcy9NCnByZXR0eS9UR0RSU01QCnByZXR6ZWwvTVMKcHJldmFpbC9ER1MKcHJldmFsZW5jZS9NCnByZXZhbGVudApwcmV2YXJpY2F0ZS9EU0dOWApwcmV2YXJpY2F0aW9uL00KcHJldmFyaWNhdG9yL1NNCnByZXZlbnQvREJTR1YKcHJldmVudGFibGUvVQpwcmV2ZW50YXRpdmUvTVMKcHJldmVudGlvbi9NCnByZXZlbnRpdmUvU00KcHJldmlldy9NRFJTWkcKcHJldmlvdXMvWQpwcmV2aXNpb24vTVMKcHJld2FyCnByZXkvR01EUwpwcmV6emllL1MKcHJpYXBpYwpwcmljZSdzCnByaWNlL0FHRFMKcHJpY2VsZXNzCnByaWNleQpwcmljaWVyCnByaWNpZXN0CnByaWNrL01EUllTWkcKcHJpY2tlci9NCnByaWNrbGUvTUdEUwpwcmlja2xpbmVzcy9NCnByaWNrbHkvUFJUCnByaWRlL01HRFMKcHJpZGVmdWwvWQpwcmllci9NCnByaWVzdC9TTVkKcHJpZXN0ZXNzL01TCnByaWVzdGhvb2QvU00KcHJpZXN0bGluZXNzL00KcHJpZXN0bHkvUlRQCnByaWcvTVMKcHJpZ2dpc2gvUApwcmlnZ2lzaG5lc3MvTQpwcmltL1pHRFJZUApwcmltYWN5L00KcHJpbWFsCnByaW1hcmlseQpwcmltYXJ5L1NNCnByaW1hdGUvTVMKcHJpbWUvTVMKcHJpbWVyL00KcHJpbWV2YWwKcHJpbWluZy9NCnByaW1pdGl2ZS9TUE1ZCnByaW1pdGl2ZW5lc3MvTQpwcmltbWVyCnByaW1tZXN0CnByaW1uZXNzL00KcHJpbW9nZW5pdG9yL1NNCnByaW1vZ2VuaXR1cmUvTQpwcmltb3JkaWFsL1kKcHJpbXAvRFNHCnByaW1yb3NlL1NNCnByaW11bGEvUwpwcmluY2UvU01ZCnByaW5jZWRvbS9TTQpwcmluY2VsaW5lc3MvTQpwcmluY2VseS9QUlQKcHJpbmNlc3MvTVMKcHJpbmNpcGFsL1NNWQpwcmluY2lwYWxpdHkvU00KcHJpbmNpcGxlL0RTTQpwcmluY2lwbGVkL1UKcHJpbnQvQU1EU0cKcHJpbnRhYmxlL1UKcHJpbnRlci9NUwpwcmludGluZy9TTQpwcmludG1ha2luZwpwcmludG91dC9TTQpwcmlvbi9TCnByaW9yL01TCnByaW9yZXNzL01TCnByaW9yaXRpemF0aW9uCnByaW9yaXRpemUvRFNHCnByaW9yaXR5L1NNCnByaW9yeS9TTQpwcmlzbS9NUwpwcmlzbWF0aWMKcHJpc29uL1NaTVIKcHJpc29uZXIvTQpwcmlzc2lseQpwcmlzc2luZXNzL00KcHJpc3N5L1BUUgpwcmlzdGluZQpwcml0aGVlCnByaXZhY3kvTQpwcml2YXRlL1hNWVROUlMKcHJpdmF0ZWVyL1NNCnByaXZhdGlvbi9DU00KcHJpdmF0aXphdGlvbi9TTQpwcml2YXRpemUvRFNHCnByaXZldC9TTQpwcml2aWxlZ2UvRFNNRwpwcml2aWxlZ2VkL1UKcHJpdmlseQpwcml2eS9SU01UCnByaXplL01HRFMKcHJpemVkL0EKcHJpemVmaWdodC9aR1NNUgpwcml6ZWZpZ2h0ZXIvTQpwcml6ZWZpZ2h0aW5nL00KcHJpemV3aW5uZXIvTVMKcHJpemV3aW5uaW5nCnByby9TTQpwcm9iYWJpbGlzdGljCnByb2JhYmlsaXR5L1NNCnByb2JhYmxlL1NNCnByb2JhYmx5CnByb2JhdGUvTU4KcHJvYmF0aW9uL1pNUgpwcm9iYXRpb25hbApwcm9iYXRpb25hcnkKcHJvYmF0aW9uZXIvTQpwcm9iZS9NR0RTQkoKcHJvYml0eS9NCnByb2JsZW0vTVMKcHJvYmxlbWF0aWMKcHJvYmxlbWF0aWNhbC9ZCnByb2Jvc2Nlcwpwcm9ib3NjaXMvTVMKcHJvY2FpbmUvTQpwcm9jZWR1cmFsCnByb2NlZHVyZS9TTQpwcm9jZWVkL0dKRFMKcHJvY2VlZGluZy9NCnByb2NlZWRzL00KcHJvY2VzcydzCnByb2Nlc3MvQUdEUwpwcm9jZXNzZWQvVQpwcm9jZXNzaW9uL0dECnByb2Nlc3Npb25hbC9NUwpwcm9jZXNzb3IvU00KcHJvY2xhbWF0aW9uL01TCnByb2NsaXZpdHkvU00KcHJvY3Jhc3RpbmF0ZS9EU0dOCnByb2NyYXN0aW5hdGlvbi9NCnByb2NyYXN0aW5hdG9yL01TCnByb2NyZWF0ZS9WCnByb2N0b3IvR01EUwpwcm9jdXJlbWVudC9NCnByb2QvTVMKcHJvZGlnYWwvTVlTCnByb2RpZ2FsaXR5L00KcHJvZGlnaW91cy9ZCnByb2RpZ3kvU00KcHJvZHVjZSdzCnByb2R1Y2UvQVpHRFJTCnByb2R1Y2VyL0FNCnByb2R1Y2libGUvQQpwcm9kdWN0aW9uL0FTTQpwcm9kdWN0aXZlL1VZCnByb2R1Y3RpdmVuZXNzL00KcHJvZHVjdGl2aXR5L00KcHJvZi9NUwpwcm9mYW5hdGlvbi9NUwpwcm9mYW5lL1BZR0RTCnByb2ZhbmVuZXNzL00KcHJvZmFuaXR5L1NNCnByb2Zlc3NlZC9ZCnByb2Zlc3Npb24vU00KcHJvZmVzc2lvbmFsL01ZUwpwcm9mZXNzaW9uYWxpc20vTQpwcm9mZXNzaW9uYWxpemF0aW9uCnByb2Zlc3Npb25hbGl6ZS9EU0cKcHJvZmVzc29yL1NNCnByb2Zlc3NvcmlhbC9ZCnByb2Zlc3NvcnNoaXAvU00KcHJvZmZlci9HTURTCnByb2ZpY2llbmN5L00KcHJvZmljaWVudC9NWVMKcHJvZml0L0JHRApwcm9maXRhYmlsaXR5L00KcHJvZml0YWJsZS9VCnByb2ZpdGFibHkvVQpwcm9maXRlZXIvTURHUwpwcm9maXRlZXJpbmcvTQpwcm9maXRlcm9sZS9TTQpwcm9maXRsZXNzCnByb2ZsaWdhY3kvTQpwcm9mbGlnYXRlL1NNWQpwcm9mb3JtYQpwcm9mb3VuZC9SWVRQCnByb2ZvdW5kbmVzcy9NCnByb2Z1bmRpdHkvU00KcHJvZnVzZS9QWQpwcm9mdXNlbmVzcy9NCnByb2dlbml0b3IvU00KcHJvZ2VueS9NCnByb2dlc3Rlcm9uZS9NCnByb2dlc3Rpbi9TCnByb2duYXRob3VzCnByb2dub3Nlcwpwcm9nbm9zaXMvTQpwcm9nbm9zdGljL01TCnByb2dub3N0aWNhdGUvWEdORFMKcHJvZ25vc3RpY2F0aW9uL00KcHJvZ25vc3RpY2F0b3IvTVMKcHJvZ3JhbS9DQVMKcHJvZ3JhbW1hYmxlL01TCnByb2dyYW1tYXRpYwpwcm9ncmFtbWVkL0FDCnByb2dyYW1tZXIvTVMKcHJvZ3JhbW1pbmcvU00KcHJvZ3Jlc3MvTURTR1YKcHJvZ3Jlc3Npb24vTVMKcHJvZ3Jlc3NpdmUvUE1ZUwpwcm9ncmVzc2l2ZW5lc3MvTQpwcm9oaWJpdC9ER1ZTCnByb2hpYml0aW9uL1NNCnByb2hpYml0aW9uaXN0L01TCnByb2hpYml0aXZlL1kKcHJvaGliaXRvcnkKcHJvamVjdC9HTURTCnByb2plY3RpbGUvU00KcHJvamVjdGlvbi9TTQpwcm9qZWN0aW9uaXN0L1NNCnByb2plY3Rvci9NUwpwcm9rYXJ5b3RpYwpwcm9sZS9TCnByb2xldGFyaWFuL01TCnByb2xldGFyaWF0L00KcHJvbGlmZXJhdGUvRFNHTgpwcm9saWZlcmF0aW9uL00KcHJvbGlmaWMKcHJvbGlmaWNhbGx5CnByb2xpeC9ZCnByb2xpeGl0eS9NCnByb2xvZ3VlL1NNCnByb2xvbmdhdGlvbi9TTQpwcm9tL00KcHJvbWVuYWRlL01HRFMKcHJvbWV0aGl1bS9NCnByb21pbmVuY2UvTQpwcm9taW5lbnQvWQpwcm9taXNjdWl0eS9NCnByb21pc2N1b3VzL1kKcHJvbWlzZS9EU01HCnByb21pc2luZy9ZCnByb21pc3NvcnkKcHJvbW8vTQpwcm9tb250b3J5L1NNCnByb21vdGUvRFJaRwpwcm9tb3Rlci9NCnByb21vdGlvbmFsCnByb21wdC9KUFNNRFJZWlRHCnByb21wdGVkL1UKcHJvbXB0ZXIvTQpwcm9tcHRpbmcvTQpwcm9tcHRpdHVkZS9NCnByb21wdG5lc3MvTQpwcm9tdWxnYXRlL0dORFMKcHJvbXVsZ2F0aW9uL00KcHJvbXVsZ2F0b3IvTVMKcHJvbmUvUApwcm9uZW5lc3MvTQpwcm9uZy9NRFMKcHJvbmdob3JuL01TCnByb25vbWluYWwvTQpwcm9ub3VuY2UvRFNMRwpwcm9ub3VuY2VhYmxlL1UKcHJvbm91bmNlbWVudC9TTQpwcm9udG8KcHJvbnVuY2lhdGlvbi9NUwpwcm9vZi9BREdTTQpwcm9vZnJlYWQvU1JaRwpwcm9vZnJlYWRlci9NCnByb3AvTVMKcHJvcGFnYW5kYS9NCnByb3BhZ2FuZGlzdC9NUwpwcm9wYWdhbmRpemUvR0RTCnByb3BhZ2F0ZS9EU0dOCnByb3BhZ2F0aW9uL00KcHJvcGFnYXRvci9TTQpwcm9wZWwvUwpwcm9wZWxsYW50L01TCnByb3BlbGxlZApwcm9wZWxsZXIvU00KcHJvcGVsbGluZwpwcm9wZW5zaXR5L1NNCnByb3Blci9NUllUCnByb3BlcnR5L0RTTQpwcm9waGVjeS9TTQpwcm9waGVzaWVyL00KcHJvcGhlc3kvRFJTTVpHCnByb3BoZXQvU00KcHJvcGhldGVzcy9NUwpwcm9waGV0aWMKcHJvcGhldGljYWwvWQpwcm9waHlsYWN0aWMvU00KcHJvcGh5bGF4ZXMKcHJvcGh5bGF4aXMvTQpwcm9waW5xdWl0eS9NCnByb3BpdGlhdGUvRFNHTgpwcm9waXRpYXRpb24vTQpwcm9waXRpYXRvcnkKcHJvcGl0aW91cy9ZCnByb3BvbmVudC9TTQpwcm9wb3J0aW9uL0VTTQpwcm9wb3J0aW9uYWwvWVMKcHJvcG9ydGlvbmFsaXR5CnByb3BvcnRpb25hdGUvRVkKcHJvcG9zYWwvTVMKcHJvcHBlZApwcm9wcGluZwpwcm9wcmlldGFyeS9TTQpwcm9wcmlldGllcy9NCnByb3ByaWV0b3IvU00KcHJvcHJpZXRvcmlhbC9ZCnByb3ByaWV0b3JzaGlwL00KcHJvcHJpZXRyZXNzL01TCnByb3ByaWV0eS9TTQpwcm9wdWxzaW9uL00KcHJvcHVsc2l2ZQpwcm9yYXRlL0RTRwpwcm9yb2dhdGlvbi9NCnByb3JvZ3VlL0dECnByb3NhaWMKcHJvc2FpY2FsbHkKcHJvc2Nlbml1bS9TTQpwcm9zY2l1dHRvL00KcHJvc2NyaWJlL0RHCnByb3NjcmlwdGlvbi9NUwpwcm9zZS9NCnByb3NlY3V0ZS9EU1hHTgpwcm9zZWN1dGlvbi9NCnByb3NlY3V0b3IvTVMKcHJvc2VseXRlL0RTTUcKcHJvc2VseXRpc20vTQpwcm9zZWx5dGl6ZS9EUlNaRwpwcm9zZWx5dGl6ZXIvTQpwcm9zb2R5L1NNCnByb3NwZWN0L01ER1ZTCnByb3NwZWN0aXZlL1kKcHJvc3BlY3Rvci9TTQpwcm9zcGVjdHVzL01TCnByb3NwZXIvR1NECnByb3NwZXJpdHkvTQpwcm9zcGVyb3VzL1kKcHJvc3RhdGUvTVMKcHJvc3RoZXNlcwpwcm9zdGhlc2lzL00KcHJvc3RoZXRpYwpwcm9zdGl0dXRlL01HTkRTCnByb3N0aXR1dGlvbi9NCnByb3N0cmF0ZS9HTlhEUwpwcm9zdHJhdGlvbi9NCnByb3N5L1JUCnByb3RhY3Rpbml1bS9NCnByb3RhZ29uaXN0L1NNCnByb3RlYW4KcHJvdGVjdC9HVlNECnByb3RlY3RlZC9VCnByb3RlY3Rpb24vU00KcHJvdGVjdGlvbmlzbS9NCnByb3RlY3Rpb25pc3QvTVMKcHJvdGVjdGl2ZS9QWQpwcm90ZWN0aXZlbmVzcy9NCnByb3RlY3Rvci9NUwpwcm90ZWN0b3JhdGUvTVMKcHJvdGVnZS9TTQpwcm90ZWdlZS9TCnByb3RlaW4vU00KcHJvdGVzdGFudC9TCnByb3Rlc3RhdGlvbi9NUwpwcm90b2NvbC9NUwpwcm90b24vU00KcHJvdG9wbGFzbS9NCnByb3RvcGxhc21pYwpwcm90b3R5cGUvTUdTCnByb3RvdHlwaWNhbApwcm90b3pvYQpwcm90b3pvYW4vTVMKcHJvdG96b2ljCnByb3RyYWN0L0dECnByb3RydWRlL0dEUwpwcm90cnVzaWxlCnByb3RydXNpb24vTVMKcHJvdHViZXJhbmNlL01TCnByb3R1YmVyYW50CnByb3VkL1JZVApwcm92L05CCnByb3ZhYmlsaXR5L00KcHJvdmFibHkKcHJvdmUvRUFHRFMKcHJvdmVkL1UKcHJvdmVuL1UKcHJvdmVuYW5jZS9TTQpwcm92ZW5kZXIvTQpwcm92ZW5pZW5jZS9NCnByb3ZlcmJpYWwvWQpwcm92aWRlL0RSU1pHCnByb3ZpZGVkL1UKcHJvdmlkZW5jZS9NCnByb3ZpZGVudC9ZCnByb3ZpZGVudGlhbC9ZCnByb3ZpZGVyL00KcHJvdmluY2UvTVMKcHJvdmluY2lhbC9TTVkKcHJvdmluY2lhbGlzbS9NCnByb3Zpc2lvbmFsL1kKcHJvdmlzby9TTQpwcm92b2NhdGV1ci9TCnByb3ZvY2F0aXZlL1BZCnByb3ZvY2F0aXZlbmVzcy9NCnByb3Zva2UvRFJTWkcKcHJvdm9rZWQvVQpwcm92b2tlci9NCnByb3Zva2luZy9ZCnByb3ZvbG9uZS9NCnByb3Zvc3QvU00KcHJvdy9NUwpwcm93ZXNzL00KcHJvd2wvTURSU1pHCnByb3dsZXIvTQpwcm94aW1hbApwcm94aW1hdGUKcHJveGltaXR5L00KcHJveHkvU00KcHJ1ZGUvTVMKcHJ1ZGVuY2UvTQpwcnVkZW50L1kKcHJ1ZGVudGlhbC9ZCnBydWRlcnkvTQpwcnVkaXNoL1lQCnBydWRpc2huZXNzL00KcHJ1bmUvTVpHRFJTCnBydW5lci9NCnBydXJpZW5jZS9NCnBydXJpZW50L1kKcHJ5L1pUR0RSU00KcHNhbG0vTVMKcHNhbG1pc3QvU00KcHNhbHRlcnkvU00KcHNlcGhvbG9naXN0L1MKcHNlcGhvbG9neQpwc2V1ZC9TCnBzZXVkby9TCnBzZXVkb255bS9TTQpwc2V1ZG9ueW1vdXMKcHNldWRvc2NpZW5jZS9NUwpwc2V1ZHkKcHNoYXcvTVMKcHNpL1NNCnBzaXR0YWNvc2lzL00KcHNvcmlhc2lzL00KcHNzdApwc3ljaC9NRFNHCnBzeWNoZS9NCnBzeWNoZWRlbGlhCnBzeWNoZWRlbGljL1NNCnBzeWNoZWRlbGljYWxseQpwc3ljaGlhdHJpYwpwc3ljaGlhdHJpc3QvU00KcHN5Y2hpYXRyeS9NCnBzeWNoaWMvTVMKcHN5Y2hpY2FsL1kKcHN5Y2hvL1NNCnBzeWNob2FjdGl2ZQpwc3ljaG9hbmFseXNlcwpwc3ljaG9hbmFseXNpcy9NCnBzeWNob2FuYWx5c3QvU00KcHN5Y2hvYW5hbHl0aWMKcHN5Y2hvYW5hbHl0aWNhbC9ZCnBzeWNob2FuYWx5emUvRFNHCnBzeWNob2JhYmJsZS9NCnBzeWNob2RyYW1hL01TCnBzeWNob2dlbmljCnBzeWNob2tpbmVzaXMKcHN5Y2hva2luZXRpYwpwc3ljaG9sb2dpY2FsL1kKcHN5Y2hvbG9naXN0L01TCnBzeWNob2xvZ3kvU00KcHN5Y2hvbWV0cmljCnBzeWNob25ldXJvc2VzCnBzeWNob25ldXJvc2lzL00KcHN5Y2hvcGF0aC9NCnBzeWNob3BhdGhpYwpwc3ljaG9wYXRob2xvZ3kKcHN5Y2hvcGF0aHMKcHN5Y2hvcGF0aHkvTQpwc3ljaG9waGFybWFjb2xvZ3kKcHN5Y2hvcy9TCnBzeWNob3Npcy9NCnBzeWNob3NvbWF0aWMKcHN5Y2hvdGhlcmFwaXN0L01TCnBzeWNob3RoZXJhcHkvU00KcHN5Y2hvdGljL1NNCnBzeWNob3RpY2FsbHkKcHN5Y2hvdHJvcGljL01TCnBzeWNocwpwdC9DCnB0YXJtaWdhbi9NUwpwdGVyb2RhY3R5bC9NUwpwdG9tYWluZS9TTQpwdWIvU00KcHViZXJ0YWwKcHViZXJ0eS9NCnB1YmVzL00KcHViZXNjZW5jZS9NCnB1YmVzY2VudApwdWJpYwpwdWJpcy9NCnB1YmxpYy9BTQpwdWJsaWNhbi9BTVMKcHVibGljYXRpb24vQVNNCnB1YmxpY2lzdC9NUwpwdWJsaWNpdHkvTQpwdWJsaWNpemUvR0RTCnB1YmxpY2x5CnB1Ymxpc2gvQUdEUwpwdWJsaXNoYWJsZQpwdWJsaXNoZWQvVQpwdWJsaXNoZXIvTVMKcHVibGlzaGluZy9NCnB1Y2UvTQpwdWNrL1pNUlMKcHVja2VyL01ERwpwdWNraXNoL1lQCnB1Y2tpc2huZXNzL00KcHVkL1MKcHVkZGluZy9TTQpwdWRkbGUvRFNNRwpwdWRkbGluZy9NCnB1ZGVuZGEKcHVkZW5kdW0vTQpwdWRnaW5lc3MvTQpwdWRneS9QUlQKcHVlYmxvL1NNCnB1ZXJpbGUKcHVlcmlsaXR5L00KcHVlcnBlcmFsCnB1ZmYvWkdNRFJTCnB1ZmZiYWxsL1NNCnB1ZmZlci9NCnB1ZmZpbi9TTQpwdWZmaW5lc3MvTQpwdWZmeS9QUlQKcHVnL1NNCnB1Z2lsaXNtL00KcHVnaWxpc3QvU00KcHVnaWxpc3RpYwpwdWduYWNpb3VzL1lQCnB1Z25hY2lvdXNuZXNzL00KcHVnbmFjaXR5L00KcHVrZS9NR0RTCnB1a2thCnB1bGNocml0dWRlL00KcHVsY2hyaXR1ZGlub3VzCnB1bGUvR0RTCnB1bGwvWkdNRFJTCnB1bGxiYWNrL01TCnB1bGxlci9NCnB1bGxldC9TTQpwdWxsZXkvU00KcHVsbG91dC9NUwpwdWxsb3Zlci9TTQpwdWxtb25hcnkKcHVscC9HTURTCnB1bHBpbmVzcy9NCnB1bHBpdC9TTQpwdWxwd29vZC9NCnB1bHB5L1JQVApwdWxzYXIvU00KcHVsc2F0ZS9YR05EUwpwdWxzYXRpb24vTQpwdWxzZS9BTUdEUwpwdWx2ZXJpemF0aW9uL00KcHVsdmVyaXplL0RTRwpwdW1hL01TCnB1bWljZS9TTQpwdW1tZWwvU0dECnB1bXAvWkdNRFJTCnB1bXBlci9NCnB1bXBlcm5pY2tlbC9NCnB1bXBraW4vTVMKcHVuL1NNCnB1bmNoL01EUlNaRwpwdW5jaGJhZy9TCnB1bmNoZW9uL01TCnB1bmNoZXIvTQpwdW5jaGxpbmUvUwpwdW5jaHkvVFIKcHVuY3RpbGlvL00KcHVuY3RpbGlvdXMvUFkKcHVuY3RpbGlvdXNuZXNzL00KcHVuY3R1YWwvWQpwdW5jdHVhbGl0eS9NCnB1bmN0dWF0ZS9HTkRTCnB1bmN0dWF0aW9uL00KcHVuY3R1cmUvRFNNRwpwdW5kaXQvU00KcHVuZGl0cnkvTQpwdW5nZW5jeS9NCnB1bmdlbnQvWQpwdW5pbmVzcy9NCnB1bmlzaC9CTEdEUwpwdW5pc2hlZC9VCnB1bmlzaGluZy9ZCnB1bmlzaG1lbnQvTVMKcHVuaXRpdmUvWQpwdW5rL1RNUlMKcHVubmVkCnB1bm5ldC9TCnB1bm5pbmcKcHVuc3Rlci9TTQpwdW50L1pHTURSUwpwdW50ZXIvTQpwdW55L1RSUApwdXAvU00KcHVwYS9NCnB1cGFlCnB1cGFsCnB1cGF0ZS9EU0cKcHVwaWwvTVMKcHVwcGVkCnB1cHBldC9NUwpwdXBwZXRlZXIvU00KcHVwcGV0cnkvTQpwdXBwaW5nCnB1cHB5L1NNCnB1cmJsaW5kCnB1cmNoYXNlL0RSU01aR0IKcHVyY2hhc2VyL00KcHVyZGFoL00KcHVyZS9QWVRSCnB1cmVicmVkL1NNCnB1cmVlL01EUwpwdXJlZWluZwpwdXJlbmVzcy9NCnB1cmdhdGl2ZS9TTQpwdXJnYXRvcmlhbApwdXJnYXRvcnkvU00KcHVyZ2UvTVpHRFJTCnB1cmdlci9NCnB1cmlmaWNhdGlvbi9NCnB1cmlmaWVyL00KcHVyaWZ5L05EUlNaRwpwdXJpbmUvTVMKcHVyaXNtL00KcHVyaXN0L01TCnB1cmlzdGljCnB1cml0YW4vU00KcHVyaXRhbmljYWwvWQpwdXJpdGFuaXNtL00KcHVyaXR5L00KcHVybC9HTURTCnB1cmxpZXUvU00KcHVybG9pbi9TR0QKcHVycGxlL01UUlMKcHVycGxpc2gKcHVycG9ydC9TTURHCnB1cnBvcnRlZC9ZCnB1cnBvc2UvRFNNWUcKcHVycG9zZWZ1bC9ZUApwdXJwb3NlZnVsbmVzcy9NCnB1cnBvc2VsZXNzL1BZCnB1cnIvR01EUwpwdXJzZS9NWkdEUlMKcHVyc2VyL00KcHVyc3VhbmNlL00KcHVyc3VhbnQKcHVyc3VlL1pHRFJTCnB1cnN1ZXIvTQpwdXJzdWl0L1NNCnB1cnVsZW5jZS9NCnB1cnVsZW50CnB1cnZleS9EU0cKcHVydmV5YW5jZS9NCnB1cnZleW9yL1NNCnB1cnZpZXcvTQpwdXMvTQpwdXNoL1pHTURSUwpwdXNoYmlrZS9TCnB1c2hjYXJ0L1NNCnB1c2hjaGFpci9TCnB1c2hlci9NCnB1c2hpbHkKcHVzaGluZXNzL00KcHVzaG92ZXIvTVMKcHVzaHBpbi9TCnB1c2h5L1RSUApwdXNpbGxhbmltaXR5L00KcHVzaWxsYW5pbW91cy9ZCnB1c3MvTVMKcHVzc3kvVFJTTQpwdXNzeWNhdC9NUwpwdXNzeWZvb3QvRFNHCnB1c3R1bGFyCnB1c3R1bGUvU00KcHV0L0lTTQpwdXRhdGl2ZQpwdXRvdXQvTVMKcHV0cmVmYWN0aW9uL00KcHV0cmVmYWN0aXZlCnB1dHJlZnkvR0RTCnB1dHJlc2NlbmNlL00KcHV0cmVzY2VudApwdXRyaWQKcHV0c2NoL01TCnB1dHQvWkdNRFJTCnB1dHRlZC9JCnB1dHRlZS9NUwpwdXR0ZXIvTURSWkcKcHV0dGVyZXIvTQpwdXR0aW5nL0kKcHV0dHkvR0RTTQpwdXR6L1MKcHV6emxlL01aR0RSU0wKcHV6emxlbWVudC9NCnB1enpsZXIvTQpwdnQKcHduL1NHRApweWVsb25lcGhyaXRpcwpweWdteS9TTQpweWxvbi9TTQpweWxvcmkKcHlsb3JpYwpweWxvcnVzL00KcHlvcnJoZWEvTQpweXJhbWlkL0dTTUQKcHlyYW1pZGFsCnB5cmUvTVMKcHlyaW1pZGluZS9NUwpweXJpdGUvU00KcHlyaXRlcy9NCnB5cm9tYW5pYS9NCnB5cm9tYW5pYWMvU00KcHlyb3RlY2huaWMvUwpweXJvdGVjaG5pY2FsCnB5cm90ZWNobmljcy9NCnB5cnV2YXRlCnB5dGhvbi9TTQpweXgvTVMKcHphenoKcQpxcgpxdC9TCnF0eQpxdWEKcXVhY2svR01EUwpxdWFja2VyeS9NCnF1YWQvTVMKcXVhZHJhbmdsZS9TTQpxdWFkcmFuZ3VsYXIKcXVhZHJhbnQvTVMKcXVhZHJhcGhvbmljCnF1YWRyYXRpYy9NUwpxdWFkcmF0dXJlCnF1YWRyZW5uaWFsCnF1YWRyZW5uaXVtL01TCnF1YWRyaWNlcHMvTVMKcXVhZHJpbGF0ZXJhbC9TTQpxdWFkcmlsbGUvWE1OUwpxdWFkcmlsbGlvbi9NCnF1YWRyaXBsZWdpYS9NCnF1YWRyaXBsZWdpYy9TTQpxdWFkcml2aXVtL00KcXVhZHJ1cGVkL01TCnF1YWRydXBlZGFsCnF1YWRydXBsZS9NR0RTCnF1YWRydXBsZXQvTVMKcXVhZHJ1cGxpY2F0ZS9NR05EUwpxdWFkcnVwbGljYXRpb24vTQpxdWFmZi9HTURTCnF1YWdtaXJlL1NNCnF1YWhvZy9NUwpxdWFpbC9HTURTCnF1YWludC9QUllUCnF1YWludG5lc3MvTQpxdWFrZS9NR0RTCnF1YWt5CnF1YWxpZmljYXRpb24vRU0KcXVhbGlmaWVkL1UKcXVhbGlmaWVyL1NNCnF1YWxpZnkvRUdYTkRTCnF1YWxpdGF0aXZlL1kKcXVhbGl0eS9TTQpxdWFsbS9NUwpxdWFsbWlzaApxdWFuZGFyeS9TTQpxdWFuZ28vUwpxdWFudGEKcXVhbnRpZmlhYmxlCnF1YW50aWZpY2F0aW9uL00KcXVhbnRpZmllci9NCnF1YW50aWZ5L05EUlNaRwpxdWFudGl0YXRpdmUvWQpxdWFudGl0eS9TTQpxdWFudHVtL00KcXVhcmFudGluZS9NR0RTCnF1YXJrL01TCnF1YXJyZWwvU1pHTURSCnF1YXJyZWxlci9NCnF1YXJyZWxzb21lL1AKcXVhcnJlbHNvbWVuZXNzL00KcXVhcnJ5L0RTTUcKcXVhcnQvTVMKcXVhcnRlci9TR01EWQpxdWFydGVyYmFjay9HTURTCnF1YXJ0ZXJkZWNrL01TCnF1YXJ0ZXJmaW5hbC9TTQpxdWFydGVybHkvU00KcXVhcnRlcm1hc3Rlci9NUwpxdWFydGVyc3RhZmYvTQpxdWFydGVyc3RhdmVzCnF1YXJ0ZXQvU00KcXVhcnRvL01TCnF1YXJ0ei9NCnF1YXNhci9NUwpxdWFzaC9HRFMKcXVhc2kKcXVhdHJhaW4vTVMKcXVhdmVyL01EU0cKcXVhdmVyeQpxdWF5L01TCnF1YXlzaWRlL1MKcXVlYXNpbHkKcXVlYXNpbmVzcy9NCnF1ZWFzeS9UUFIKcXVlZW4vR01EWVMKcXVlZW5seS9SVApxdWVlci9QVEdNRFJZUwpxdWVlcm5lc3MvTQpxdWVsbC9HRFMKcXVlbmNoL1pHRFJTQgpxdWVuY2hhYmxlL1UKcXVlbmNoZXIvTQpxdWVuY2hsZXNzCnF1ZXJ1bG91cy9ZUApxdWVydWxvdXNuZXNzL00KcXVlcnkvRFNNRwpxdWVzCnF1ZXNhZGlsbGEvTVMKcXVlc3QvSUZBTVMKcXVlc3RlZApxdWVzdGluZwpxdWVzdGlvbi9TTURSWkdCSgpxdWVzdGlvbmFibGUvVQpxdWVzdGlvbmFibHkvVQpxdWVzdGlvbmVkL1UKcXVlc3Rpb25lci9NCnF1ZXN0aW9uaW5nL01ZCnF1ZXN0aW9ubmFpcmUvU00KcXVldWUvTURTRwpxdWliYmxlL0RSU01aRwpxdWliYmxlci9NCnF1aWNoZS9TTQpxdWljay9NTlJZWFRQCnF1aWNrZW4vREcKcXVpY2tmaXJlCnF1aWNraWUvU00KcXVpY2tsaW1lL00KcXVpY2tuZXNzL00KcXVpY2tzYW5kL01TCnF1aWNrc2lsdmVyL00KcXVpY2tzdGVwL01TCnF1aWQvTVMKcXVpZXNjZW5jZS9NCnF1aWVzY2VudC9ZCnF1aWV0L1NNRE5SWVhUR1AKcXVpZXRlbi9ERwpxdWlldGlzbQpxdWlldG5lc3MvTQpxdWlldHVkZS9JRU0KcXVpZXR1cy9NUwpxdWlmZi9TCnF1aWxsL1NNCnF1aWx0L1NNRFJaRwpxdWlsdGVyL00KcXVpbHRpbmcvTQpxdWluL1MKcXVpbmNlL1NNCnF1aW5lL1MKcXVpbmluZS9NCnF1aW5vYQpxdWluc3kvTQpxdWludC9TTQpxdWludGVzc2VuY2UvU00KcXVpbnRlc3NlbnRpYWwvWQpxdWludGV0L1NNCnF1aW50dXBsZS9NR0RTCnF1aW50dXBsZXQvTVMKcXVpcC9NUwpxdWlwcGVkCnF1aXBwaW5nCnF1aXBzdGVyL1NNCnF1aXJlJ3MKcXVpcmUvSUFTCnF1aXJrL1NNREcKcXVpcmtpbmVzcy9NCnF1aXJreS9SVFAKcXVpcnQvU00KcXVpc2xpbmcvU00KcXVpdC9TCnF1aXRjbGFpbS9NUwpxdWl0ZQpxdWl0dGFuY2UvTQpxdWl0dGVyL1NNCnF1aXR0aW5nCnF1aXZlci9TTURHCnF1aXZlcnkKcXVpeG90aWMKcXVpeG90aWNhbGx5CnF1aXovTQpxdWl6emVkCnF1aXp6ZXIvU00KcXVpenplcwpxdWl6emljYWwvWQpxdWl6emluZwpxdW8vSApxdW9pbi9TTQpxdW9pdC9TTURHCnF1b25kYW0KcXVvcmF0ZS9JCnF1b3J1bS9TTQpxdW90L0IKcXVvdGEvU00KcXVvdGFiaWxpdHkvTQpxdW90YXRpb24vU00KcXVvdGUncwpxdW90ZS9VRFNHCnF1b3RpZGlhbgpxdW90aWVudC9TTQpxd2VydHkKci9TCnJhYmJldC9HTURTCnJhYmJpL1NNCnJhYmJpbmF0ZS9NCnJhYmJpbmljCnJhYmJpbmljYWwKcmFiYml0L0dNRFMKcmFiYmxlL01TCnJhYmlkL1BZCnJhYmlkbmVzcy9NCnJhYmllcy9NCnJhY2Nvb24vTQpyYWNlL01aR0RSUwpyYWNlY291cnNlL1NNCnJhY2Vnb2VyL1MKcmFjZWhvcnNlL01TCnJhY2VtZS9NUwpyYWNlci9NCnJhY2V0cmFjay9NUwpyYWNld2F5L01TCnJhY2lhbC9ZCnJhY2lhbGlzbS9NCnJhY2lhbGlzdC9NUwpyYWNpbHkKcmFjaW5lc3MvTQpyYWNpbmcvTQpyYWNpc20vTQpyYWNpc3QvU00KcmFjay9HTURTCnJhY2tldC9TTURHCnJhY2tldGVlci9TTURHCnJhY2tldGVlcmluZy9NCnJhY29udGV1ci9TTQpyYWNxdWV0YmFsbC9TTQpyYWN5L1BSVApyYWQvU00KcmFkYXIvU00KcmFkYXJzY29wZS9TTQpyYWRkbGVkCnJhZGlhbC9TTVkKcmFkaWFuY2UvTQpyYWRpYW50L1kKcmFkaWF0ZS9EU0dOWApyYWRpYXRpb24vTQpyYWRpYXRvci9TTQpyYWRpY2FsL1NNWQpyYWRpY2FsaXNtL00KcmFkaWNhbGl6YXRpb24vTQpyYWRpY2FsaXplL0RTRwpyYWRpY2NoaW8vTQpyYWRpaQpyYWRpby9NREdTCnJhZGlvYWN0aXZlL1kKcmFkaW9hY3Rpdml0eS9NCnJhZGlvY2FyYm9uL00KcmFkaW9ncmFtL01TCnJhZGlvZ3JhcGhlci9TTQpyYWRpb2dyYXBoeS9NCnJhZGlvaXNvdG9wZS9NUwpyYWRpb2xvZ2lzdC9TTQpyYWRpb2xvZ3kvTQpyYWRpb21hbi9NCnJhZGlvbWVuCnJhZGlvbWV0ZXIvTVMKcmFkaW9tZXRyaWMKcmFkaW9tZXRyeS9NCnJhZGlvcGhvbmUvU00KcmFkaW9zY29weS9NCnJhZGlvc29uZGUvU00KcmFkaW9zdXJnZXJ5CnJhZGlvdGVsZWdyYXBoL00KcmFkaW90ZWxlZ3JhcGhzCnJhZGlvdGVsZWdyYXBoeS9NCnJhZGlvdGVsZXBob25lL01TCnJhZGlvdGhlcmFwaXN0L01TCnJhZGlvdGhlcmFweS9NCnJhZGlzaC9NUwpyYWRpdW0vTQpyYWRpdXMvTQpyYWRvbi9NCnJhZmZpYS9NCnJhZmZpc2gvWVAKcmFmZmlzaG5lc3MvTQpyYWZmbGUvRFNNRwpyYWZ0L1pHTURSUwpyYWZ0ZXIvTQpyYWZ0aW5nL00KcmFnL1NHTUQKcmFnYS9NUwpyYWdhbXVmZmluL01TCnJhZ2JhZy9NCnJhZ2UvTVMKcmFnZ2EKcmFnZ2VkL1JZVFAKcmFnZ2VkbmVzcy9NCnJhZ2dlZHkvUlQKcmFnZ2luZwpyYWdpbmcvWQpyYWdsYW4vU00KcmFnb3V0L1NNCnJhZ3RhZy9TCnJhZ3RpbWUvTQpyYWd3ZWVkL00KcmFnd29ydApyYWgKcmFpZC9aR01EUlMKcmFpZGVyL00KcmFpbCdzCnJhaWwvQ0dEUwpyYWlsY2FyZC9TCnJhaWxpbmcvU00KcmFpbGxlcnkvU00KcmFpbHJvYWQvU1pHTURSCnJhaWxyb2FkZXIvTQpyYWlscm9hZGluZy9NCnJhaWx3YXkvU00KcmFpbHdheW1hbgpyYWlsd2F5bWVuCnJhaW1lbnQvTQpyYWluL0dNRFMKcmFpbmJvdy9TTQpyYWluY29hdC9TTQpyYWluZHJvcC9TTQpyYWluZmFsbC9TTQpyYWlubWFrZXIvU00KcmFpbm1ha2luZy9NCnJhaW5wcm9vZgpyYWluc3Rvcm0vTVMKcmFpbndhdGVyL00KcmFpbnkvUlQKcmFpc2UvTVpHRFJTCnJhaXNlci9NCnJhaXNpbi9TTQpyYWphaC9NCnJhamFocwpyYWtlL01HRFMKcmFraXNoL1lQCnJha2lzaG5lc3MvTQpyYWxseS9EU01HCnJhbS9TTQpyYW1ibGUvRFJTTVpHSgpyYW1ibGVyL00KcmFtYnVuY3Rpb3VzL1BZCnJhbWJ1bmN0aW91c25lc3MvTQpyYW1la2luL1NNCnJhbWllL00KcmFtaWZpY2F0aW9uL00KcmFtaWZ5L0RTWE5HCnJhbWpldC9TTQpyYW1tZWQKcmFtbWluZwpyYW1wL0dNUwpyYW1wYWdlL0RTTUcKcmFtcGFuY3kvTQpyYW1wYW50L1kKcmFtcGFydC9TTQpyYW1yb2QvU00KcmFtcm9kZGVkCnJhbXJvZGRpbmcKcmFtc2hhY2tsZQpyYW4vQQpyYW5jaC9NRFJTWkcKcmFuY2hlci9NCnJhbmNoaW5nL00KcmFuY2lkL1AKcmFuY2lkaXR5L00KcmFuY2lkbmVzcy9NCnJhbmNvci9NCnJhbmNvcm91cy9ZCnJhbmQvTQpyYW5kaW5lc3MvTQpyYW5kb20vUFNZCnJhbmRvbWl6YXRpb24vTQpyYW5kb21pemUvRFNHCnJhbmRvbW5lc3MvTVMKcmFuZHkvUlRQCnJhbmVlL01TCnJhbmcvWlIKcmFuZ2UncwpyYW5nZS9DR0RTCnJhbmdlZmluZGVyL1MKcmFuZ2VyL00KcmFuZ2luZXNzL00KcmFuZ3kvUlRQCnJhbmsvVEdKUE1EUllTCnJhbmtpbmcvTQpyYW5rbGUvRFNHCnJhbmtuZXNzL00KcmFuc2Fjay9TR0QKcmFuc29tL1NaR01EUgpyYW5zb21lci9NCnJhbnNvbXdhcmUKcmFudC9aR01ESlJTCnJhbnRlci9NCnJhcC9TWkdNRFIKcmFwYWNpb3VzL1BZCnJhcGFjaW91c25lc3MvTQpyYXBhY2l0eS9NCnJhcGUvTVMKcmFwZXIvTQpyYXBlc2VlZC9NCnJhcGlkL1BNUllUUwpyYXBpZGl0eS9NCnJhcGlkbmVzcy9NCnJhcGllci9TTQpyYXBpbmUvTQpyYXBpc3QvU00KcmFwcGVkCnJhcHBlbC9TTQpyYXBwZWxsZWQKcmFwcGVsbGluZwpyYXBwZXIvU00KcmFwcGluZwpyYXBwb3J0L01TCnJhcHBvcnRldXIvUwpyYXBwcm9jaGVtZW50L1NNCnJhcHNjYWxsaW9uL01TCnJhcHQvWVAKcmFwdG5lc3MvTQpyYXB0b3IvUwpyYXB0dXJlL01TCnJhcHR1cm91cy9ZCnJhcmUvWVRHUERSUwpyYXJlYml0L01TCnJhcmVmYWN0aW9uL00KcmFyZWZ5L0dEUwpyYXJlbmVzcy9NCnJhcml0eS9TTQpyYXNjYWwvU01ZCnJhc2gvWlRNUlNZUApyYXNoZXIvTQpyYXNobmVzcy9NCnJhc3AvR01EUwpyYXNwYmVycnkvU00KcmFzcHkvUlQKcmFzdGVyCnJhdC9TTQpyYXRhdG91aWxsZS9NCnJhdGJhZy9TCnJhdGNoZXQvR01EUwpyYXRlL0pYTVpHTkRSUwpyYXRlZC9VCnJhdGVwYXllci9TCnJhdGVyL00KcmF0aGVyCnJhdGhza2VsbGVyL1NNCnJhdGlmaWNhdGlvbi9NCnJhdGlmaWVyL00KcmF0aWZ5L05EUlNaRwpyYXRpbmcvTQpyYXRpby9NUwpyYXRpb2NpbmF0ZS9HTkRTCnJhdGlvY2luYXRpb24vTQpyYXRpb24vTURHCnJhdGlvbmFsL1NNWQpyYXRpb25hbGUvTVMKcmF0aW9uYWxpc20vTQpyYXRpb25hbGlzdC9TTQpyYXRpb25hbGlzdGljCnJhdGlvbmFsaXR5L00KcmF0aW9uYWxpemF0aW9uL01TCnJhdGlvbmFsaXplL0RTRwpyYXRsaWtlCnJhdGxpbmUvU00KcmF0dGFuL1NNCnJhdHRlZApyYXR0ZXIvU00KcmF0dGluZwpyYXR0bGUvRFJTTVpHSgpyYXR0bGVicmFpbi9TTUQKcmF0dGxlci9NCnJhdHRsZXNuYWtlL1NNCnJhdHRsZXRyYXAvU00KcmF0dGx5CnJhdHRyYXAvU00KcmF0dHkvUlQKcmF1Y291cy9ZUApyYXVjb3VzbmVzcy9NCnJhdW5jaGlseQpyYXVuY2hpbmVzcy9NCnJhdW5jaHkvVFJQCnJhdmFnZS9EUlNNWkcKcmF2YWdlci9NCnJhdmFnZXMvTQpyYXZlL0pNWkdEUlMKcmF2ZWwncwpyYXZlbC9VRFNHCnJhdmVsaW5nL1MKcmF2ZW4vTURTRwpyYXZlbm91cy9ZCnJhdmluZS9TTQpyYXZpbmcvTQpyYXZpb2xpL1NNCnJhdmlzaC9EUlNaR0wKcmF2aXNoZXIvTQpyYXZpc2hpbmcvWQpyYXZpc2htZW50L00KcmF3L1BUTVIKcmF3Ym9uZWQKcmF3aGlkZS9NCnJhd25lc3MvTQpyYXkvU00KcmF5b24vTQpyYXplL0dEUwpyYXpvci9NUwpyYXpvcmJhY2svTVMKcmF6ei9HTURTCnJhenptYXRhenovTQpyY3B0CnJkCnJlL0RTTVlUR1ZKCnJlYWNoL01EU0dCCnJlYWNoYWJsZS9VCnJlYWNxdWlyZS9EU0cKcmVhY3QvVgpyZWFjdGFudC9TTQpyZWFjdGlvbmFyeS9TTQpyZWFjdGl2aXR5CnJlYWQvWkdNUkJKUwpyZWFkYWJpbGl0eS9TTQpyZWFkZXIvTQpyZWFkZXJzaGlwL1NNCnJlYWRpbHkKcmVhZGluZXNzL00KcmVhZGluZy9NCnJlYWRtaXR0ZWQKcmVhZG91dC9TTQpyZWFkeS9EUlNUR1AKcmVhZmZvcmVzdGF0aW9uCnJlYWwvVE1SWVBTCnJlYWxpc20vTQpyZWFsaXN0L1NNCnJlYWxpc3RpYy9VCnJlYWxpc3RpY2FsbHkvVQpyZWFsaXRpZXMKcmVhbGl0eS9VTQpyZWFsaXphdGlvbi9NUwpyZWFsaXplL0RTQkcKcmVhbGl6ZWQvVQpyZWFsbS9NUwpyZWFsbmVzcy9NCnJlYWxwb2xpdGlrL00KcmVhbHR5L00KcmVhbS9aR01EUlMKcmVhbWVyL00KcmVhcC9aR0RSUwpyZWFwZXIvTQpyZWFyL0dNRFMKcmVhcmd1YXJkL01TCnJlYXJtb3N0CnJlYXJ3YXJkL1MKcmVhc29uL1NNRFJaR0IKcmVhc29uYWJsZS9VUApyZWFzb25hYmxlbmVzcy9VTQpyZWFzb25hYmx5L1UKcmVhc29uZXIvTQpyZWFzb25pbmcvTQpyZWFzc3VyaW5nL1kKcmViYXRlL00KcmViZWwvTVMKcmViZWxsaW9uL01TCnJlYmVsbGlvdXMvWVAKcmViZWxsaW91c25lc3MvTQpyZWJpZC9TCnJlYmlkZGluZwpyZWJpcnRoL00KcmVib2lsL1NERwpyZWJ1aWxkL1NHCnJlYnVrZS9EU01HCnJlYnVraW5nL1kKcmVidXR0YWwvTVMKcmVjJ2QKcmVjL00KcmVjYWxjaXRyYW5jZS9NCnJlY2FsY2l0cmFudApyZWNhbnQvU0RHCnJlY2FudGF0aW9uL1NNCnJlY2FwL01TCnJlY2FwaXRhbGl6YXRpb24KcmVjY2UvUwpyZWNkCnJlY2VpcHQvU01ERwpyZWNlaXZhYmxlcy9NCnJlY2VpdmUvRFJTWkdCCnJlY2VpdmVyL00KcmVjZWl2ZXJzaGlwL00KcmVjZW50L1JZVFAKcmVjZW50bmVzcy9NCnJlY2VwdGFjbGUvU00KcmVjZXB0aW9uL01TCnJlY2VwdGlvbmlzdC9TTQpyZWNlcHRpdmUvUFkKcmVjZXB0aXZlbmVzcy9NCnJlY2VwdGl2aXR5L00KcmVjZXB0b3IvU00KcmVjZXNzL01EU0dWCnJlY2Vzc2lvbmFsL1NNCnJlY2Vzc2lvbmFyeQpyZWNlc3NpdmUvU00KcmVjaGVyY2hlCnJlY2lkaXZpc20vTQpyZWNpZGl2aXN0L1NNCnJlY2lwZS9TTQpyZWNpcGllbnQvU00KcmVjaXByb2NhbC9TTVkKcmVjaXByb2NhdGUvR05EUwpyZWNpcHJvY2F0aW9uL00KcmVjaXByb2NpdHkvTQpyZWNpdGFsL1NNCnJlY2l0YWxpc3QvTVMKcmVjaXRhdGl2ZS9NUwpyZWNpdGVyL1NNCnJlY2tsZXNzL1lQCnJlY2tsZXNzbmVzcy9NCnJlY2tvbi9TSkRHCnJlY2tvbmluZy9NCnJlY2xhbWF0aW9uL00KcmVjbGluZS9EUlNaRwpyZWNsaW5lci9NCnJlY2x1c2UvU01WCnJlY29nbml6YWJsZS9VCnJlY29nbml6YWJseQpyZWNvZ25pemUvRFJTR0IKcmVjb2duaXplZC9VCnJlY29tYmluYXRpb24KcmVjb21wZW5zZS9EU01HCnJlY29tcGlsYXRpb24KcmVjb21waWxlL0dECnJlY29uL1MKcmVjb25jaWxlL0dEU0IKcmVjb25jaWxpYXRpb24vUwpyZWNvbmRpdGUKcmVjb25maWd1cmF0aW9uCnJlY29uZmlndXJlL0QKcmVjb25uYWlzc2FuY2UvTVMKcmVjb25ub2l0ZXIvREdTCnJlY29uc3RydWN0L1YKcmVjb25zdHJ1Y3RlZC9VCnJlY29yZGVkL1UKcmVjb3JkZXIvTVMKcmVjb3JkaW5nL01TCnJlY291cC9ERwpyZWNvdXJzZS9NCnJlY292ZXJhYmxlL1UKcmVjb3ZlcnkvU00KcmVjcmVhbnQvTVMKcmVjcmVhdGlvbmFsCnJlY3JpbWluYXRlL0RTR05YCnJlY3JpbWluYXRpb24vTQpyZWNyaW1pbmF0b3J5CnJlY3J1ZGVzY2UvR0RTCnJlY3J1ZGVzY2VuY2UvTQpyZWNydWRlc2NlbnQKcmVjcnVpdC9MU01EUlpHCnJlY3J1aXRlci9NCnJlY3J1aXRtZW50L00KcmVjdGFsL1kKcmVjdGFuZ2xlL01TCnJlY3Rhbmd1bGFyCnJlY3RpZmlhYmxlCnJlY3RpZmljYXRpb24vTQpyZWN0aWZpZXIvTQpyZWN0aWZ5L1hORFJTWkcKcmVjdGlsaW5lYXIKcmVjdGl0dWRlL00KcmVjdG8vTVMKcmVjdG9yL1NNCnJlY3RvcnkvU00KcmVjdHVtL1NNCnJlY3VtYmVudApyZWN1cGVyYXRlL0dOVkRTCnJlY3VwZXJhdGlvbi9NCnJlY3VyL1MKcmVjdXJyZWQKcmVjdXJyZW5jZS9TTQpyZWN1cnJpbmcKcmVjdXJzaW9uL1MKcmVjdXNlCnJlY3ljbGFibGUvU00KcmVjeWNsaW5nL00KcmVkL1BTTQpyZWRhY3QvU0RHCnJlZGFjdGlvbi9NCnJlZGFjdG9yL1NNCnJlZGJpcmQvU00KcmVkYnJlYXN0L01TCnJlZGJyaWNrCnJlZGNhcC9TTQpyZWRjb2F0L1NNCnJlZGN1cnJhbnQvUwpyZWRkZW4vU0RHCnJlZGRlcgpyZWRkZXN0CnJlZGRpc2gKcmVkZWVtL1JaQgpyZWRlZW1lci9NCnJlZGVtcHRpb24vTQpyZWRlbXB0aXZlCnJlZGhlYWQvU01ECnJlZGlyZWN0aW9uCnJlZGlzdHJpY3QvR0QKcmVkaXZpZGUvR0RTCnJlZGxpbmluZy9NCnJlZG5lY2svU00KcmVkbmVzcy9NCnJlZG8vRwpyZWRvbGVuY2UvTQpyZWRvbGVudApyZWRvdWJ0L1NCTQpyZWRvdWJ0YWJseQpyZWRvdW5kL1NERwpyZWRyYXcvU0cKcmVkc2tpbi9TTQpyZWR1Y2UvRFJTWkcKcmVkdWNlci9NCnJlZHVjaWJsZQpyZWR1Y3Rhc2UKcmVkdWN0aW9uL1NNCnJlZHVjdGlvbmlzdApyZWR1Y3RpdmUKcmVkdW5kYW5jeS9TTQpyZWR1bmRhbnQvWQpyZWR3b29kL1NNCnJlZHllL0RTCnJlZWRpbmVzcy9NCnJlZWR5L1JUUApyZWVmL1pHTURSUwpyZWVmZXIvTQpyZWVrL0dNRFMKcmVlbCdzCnJlZWwvVUdEUwpyZWV2ZS9HCnJlZXhwb3J0L1NERwpyZWYvU1pNCnJlZmFzaGlvbi9ER1MKcmVmZWN0aW9uL00KcmVmZWN0b3J5L1NNCnJlZmVyL0IKcmVmZXJlZS9EU00KcmVmZXJlZWluZwpyZWZlcmVuY2UvTUdEUwpyZWZlcmVuZHVtL01TCnJlZmVyZW50L1NNCnJlZmVyZW50aWFsCnJlZmVycmFsL1NNCnJlZmVycmVkCnJlZmVycmVyL1NNCnJlZmVycmluZwpyZWZmZWQKcmVmZmluZwpyZWZpbGwvQk0KcmVmaW5lZC9VCnJlZmluZW1lbnQvU00KcmVmaW5lci9TTQpyZWZpbmVyeS9TCnJlZml0dGluZwpyZWZsYXRlL1hEU0dOCnJlZmxhdGlvbmFyeQpyZWZsZWN0L0dWU0QKcmVmbGVjdGlvbi9NUwpyZWZsZWN0aXZlL1kKcmVmbGVjdG9yL01TCnJlZmxleGl2ZS9TTVkKcmVmbGV4b2xvZ3kKcmVmb3JnZS9EU0cKcmVmb3JtL01aCnJlZm9ybWF0L1YKcmVmb3JtYXRvcnkvU00KcmVmb3JtYXR0aW5nCnJlZm9ybWVkL1UKcmVmb3JtaXN0L1MKcmVmb3J0aWZ5L0dEUwpyZWZyYWN0L1NHVkQKcmVmcmFjdGlvbi9NCnJlZnJhY3RvcnkvU00KcmVmcmFpbi9TR01ECnJlZnJlc2gvWkdMRFJTCnJlZnJlc2hlci9NCnJlZnJlc2hpbmcvWQpyZWZyZXNobWVudC9TTQpyZWZyZXNobWVudHMvTQpyZWZyaWdlcmFudC9TTQpyZWZyaWdlcmF0ZS9EU0dOCnJlZnJpZ2VyYXRpb24vTQpyZWZyaWdlcmF0b3IvTVMKcmVmdWdlL1NNCnJlZnVnZWUvU00KcmVmdWxnZW5jZS9NCnJlZnVsZ2VudApyZWZ1bmQvQgpyZWZ1cmJpc2htZW50L01TCnJlZnVzYWwvTVMKcmVmdXRhdGlvbi9NUwpyZWZ1dGUvQkRSU1pHCnJlZnV0ZXIvTQpyZWcKcmVnYWwvRFlHCnJlZ2FsZW1lbnQvTQpyZWdhbGlhL00KcmVnYXJkL0VTTURHCnJlZ2FyZGxlc3MKcmVnYXJkcy9NCnJlZ2F0aGVyL0RHUwpyZWdhdHRhL1NNCnJlZ2VuY3kvU00KcmVnZW5lcmFjeS9NCnJlZ2VuZXJhdGUvVgpyZWdleC9NCnJlZ2V4cC9TCnJlZ2dhZS9NCnJlZ2ljaWRlL01TCnJlZ2ltZS9TTQpyZWdpbWVuL1NNCnJlZ2ltZW50L01ER1MKcmVnaW1lbnRhbApyZWdpbWVudGF0aW9uL00KcmVnaW9uL1NNCnJlZ2lvbmFsL1kKcmVnaW9uYWxpc20vTVMKcmVnaXN0ZXIvR01EUwpyZWdpc3RlcmVkL1UKcmVnaXN0cmFudC9NUwpyZWdpc3RyYXIvTVMKcmVnaXN0cmF0aW9uL1NNCnJlZ2lzdHJ5L1NNCnJlZ25hbnQKcmVncmVzcy9NRFNHVgpyZWdyZXNzaW9uL01TCnJlZ3JldC9TTQpyZWdyZXRmdWwvWQpyZWdyZXR0YWJsZQpyZWdyZXR0YWJseQpyZWdyZXR0ZWQKcmVncmV0dGluZwpyZWdyaW5kL0dTCnJlZ3JvdW5kCnJlZ3JvdXAvREdTCnJlZ3VsYXIvTVlTCnJlZ3VsYXJpdHkvU00KcmVndWxhcml6YXRpb24vTQpyZWd1bGFyaXplL0RTRwpyZWd1bGF0ZS9DRFNHTlYKcmVndWxhdGVkL1UKcmVndWxhdGlvbi9DTQpyZWd1bGF0aW9ucwpyZWd1bGF0b3IvTVMKcmVndWxhdG9yeQpyZWd1cmdpdGF0ZS9EU0dOCnJlZ3VyZ2l0YXRpb24vTQpyZWhhYi9NUwpyZWhhYmJlZApyZWhhYmJpbmcKcmVoYWJpbGl0YXRlL0dOVkRTCnJlaGFiaWxpdGF0aW9uL00KcmVoYW5nL1NERwpyZWhlYXJzL0dECnJlaGVhcnNhbC9NUwpyZWhlYXJzZWQvVQpyZWhpCnJlaHVuZwpyZWlnbi9NRFNHCnJlaW1idXJzZS9CRFNHTApyZWltYnVyc2VtZW50L01TCnJlaW4vR0QKcmVpbmRlZXIvTQpyZWluZm9yY2UvTEdEUwpyZWluZm9yY2VtZW50L1NNCnJlaW5pdGlhbGl6ZQpyZWluc3RhbGwvREcKcmVpbnN0YXRlbWVudC9NCnJlaW5zdXJhbmNlCnJlaXRlcmF0ZS9WCnJlamVjdC9HU01ECnJlamVjdGlvbi9TTQpyZWpvaWNlL0pHRFMKcmVqb2ljaW5nL00KcmVqb2luZGVyL1NNCnJlanV2ZW5hdGUvRFNHTgpyZWp1dmVuYXRpb24vTQpyZWwKcmVsYXRlL0RSU1haR05WCnJlbGF0ZWRuZXNzL00KcmVsYXRlci9NCnJlbGF0aW9uL00KcmVsYXRpb25hbApyZWxhdGlvbnNoaXAvTVMKcmVsYXRpdmUvTVlTCnJlbGF0aXZpc20vTQpyZWxhdGl2aXN0L1MKcmVsYXRpdmlzdGljCnJlbGF0aXZpdHkvTQpyZWxheC9EUlNaRwpyZWxheGFudC9NUwpyZWxheGF0aW9uL1NNCnJlbGF4ZXIvTQpyZWxheS9ECnJlbGVhc2UvQgpyZWxlYXNlZC9VCnJlbGVnYXRlL0dORFMKcmVsZW50L1NHRApyZWxlbnRsZXNzL1BZCnJlbGVudGxlc3NuZXNzL00KcmVsZXZhbmNlL00KcmVsZXZhbmN5L00KcmVsZXZhbnQvWQpyZWxpYWJpbGl0eS9VTQpyZWxpYWJsZS9VCnJlbGlhYmx5L1UKcmVsaWFuY2UvTQpyZWxpYW50CnJlbGljL01TCnJlbGllZi9TTQpyZWxpZXZlL1pHRFJTCnJlbGlldmVyL00KcmVsaWdpb24vU00KcmVsaWdpb3NpdHkKcmVsaWdpb3VzL01ZUApyZWxpZ2lvdXNuZXNzL00KcmVsaW5lL0RTRwpyZWxpbnF1aXNoL0xEU0cKcmVsaW5xdWlzaG1lbnQvTQpyZWxpcXVhcnkvU00KcmVsaXNoL0dNRFMKcmVsaXN0L1NHRApyZWxvY2F0ZS9CCnJlbHVjdGFuY2UvTQpyZWx1Y3RhbnQvWQpyZWx5L0dEUwpyZW0vTQpyZW1haW4vU0dECnJlbWFpbmRlci9HTURTCnJlbWFuZC9TR0QKcmVtYXBwaW5nCnJlbWFyay9CCnJlbWFya2FibGVuZXNzL00KcmVtYXJrYWJseQpyZW1hcmtlZC9VCnJlbWVkaWFibGUKcmVtZWR5L0dEU00KcmVtZW1iZXIvREcKcmVtZW1iZXJlZC9VCnJlbWVtYnJhbmNlL01TCnJlbWluZGVyL00KcmVtaW5pc2NlL0dEUwpyZW1pbmlzY2VuY2UvTVMKcmVtaW5pc2NlbnQvWQpyZW1pc3MvUFkKcmVtaXNzbmVzcy9NCnJlbWl0L1MKcmVtaXR0YW5jZS9TTQpyZW1pdHRlZApyZW1pdHRpbmcvVQpyZW1peC9EU0cKcmVtbmFudC9NUwpyZW1vZGVsL0dEUwpyZW1vbGQvU0dECnJlbW9uc3RyYW50L1NNCnJlbW9uc3RyYXRlL0RTRwpyZW1vcnNlL00KcmVtb3JzZWZ1bC9ZCnJlbW9yc2VsZXNzL1BZCnJlbW9yc2VsZXNzbmVzcy9NCnJlbW90ZS9SU01ZVFAKcmVtb3RlbmVzcy9NCnJlbW92YWwvU00KcmVtdW5lcmF0ZS9HTlZYRFMKcmVtdW5lcmF0aW9uL00KcmVuYWlzc2FuY2UvTVMKcmVuYWwKcmVuYXNjZW5jZS9TCnJlbmQvR1MKcmVuZGVyL1NHTURKCnJlbmRlcmluZy9NCnJlbmRlenZvdXMvR01EUwpyZW5kaXRpb24vTVMKcmVuZWdhZGUvRFNNRwpyZW5lZ2UvRFJTWkcKcmVuZWdlci9NCnJlbmV3L0RTQkcKcmVuZXdhbC9NUwpyZW5uZXQvTQpyZW5uaW4vTQpyZW5vdW5jZS9MRFNHCnJlbm91bmNlbWVudC9NCnJlbm92YXRlL0RTWEdOCnJlbm92YXRpb24vTQpyZW5vdmF0b3IvTVMKcmVub3duL01ECnJlbnQvWkdNRFJTCnJlbnRhbC9TTQpyZW50ZXIvTQpyZW51bmNpYXRpb24vU00KcmVvcGVuL1NERwpyZW9yZy9NRFNHCnJlcC9TTQpyZXBhaW50L0dEUwpyZXBhaXIvQlpSCnJlcGFpcmVyL00KcmVwYWlybWFuL00KcmVwYWlybWVuCnJlcGFyYWJsZQpyZXBhcmF0aW9uL01TCnJlcGFyYXRpb25zL00KcmVwYXJ0ZWUvTQpyZXBhdHJpYXRlL1hEU01HTgpyZXBhdHJpYXRpb24vTQpyZXBlYXQvU01EUlpHQgpyZXBlYXRhYmxlL1UKcmVwZWF0YWJseQpyZXBlYXRlZC9ZCnJlcGVhdGVyL00KcmVwZWF0aW5nL00KcmVwZWwvUwpyZXBlbGxlZApyZXBlbGxlbnQvU00KcmVwZWxsaW5nCnJlcGVudC9TREcKcmVwZW50YW5jZS9NCnJlcGVudGFudC9ZCnJlcGVyY3Vzc2lvbi9TCnJlcGVydG9pcmUvTVMKcmVwZXJ0b3J5L1NNCnJlcGV0aXRpb24vTVMKcmVwZXRpdGlvdXMvWVAKcmVwZXRpdGlvdXNuZXNzL00KcmVwZXRpdGl2ZS9ZUApyZXBldGl0aXZlbmVzcy9NCnJlcGhvdG9ncmFwaC9ERwpyZXBsYWNlYWJsZQpyZXBsYW50L0dTRApyZXBsZW5pc2gvTEdEUwpyZXBsZW5pc2htZW50L00KcmVwbGV0ZS9QRFNHTgpyZXBsZXRlbmVzcy9NCnJlcGxldGlvbi9NCnJlcGxpY2EvU00KcmVwbGljYXRlL0RTR05YCnJlcGxpY2F0aW9uL00KcmVwbGljYXRvci9TCnJlcG9ydGFnZS9NCnJlcG9ydGVkL1kKcmVwb3J0b3JpYWwKcmVwb3NlZnVsCnJlcG9zaXRvcnkvU00KcmVwcmVoZW5kL0RHUwpyZXByZWhlbnNpYmlsaXR5L00KcmVwcmVoZW5zaWJsZQpyZXByZWhlbnNpYmx5CnJlcHJlaGVuc2lvbi9NCnJlcHJlc2VudC9HRFMKcmVwcmVzZW50YXRpb25hbApyZXByZXNlbnRhdGl2ZS9NUwpyZXByZXNlbnRlZC9VCnJlcHJlc3Npb24vTVMKcmVwcmVzc2l2ZS9QWQpyZXByaWV2ZS9EU01HCnJlcHJpbWFuZC9HU01ECnJlcHJpc2FsL1NNCnJlcHJpc2UvU01HCnJlcHJvYWNoL0dNRFNCCnJlcHJvYWNoZnVsL1kKcmVwcm9iYXRlL01TCnJlcHJvZHVjdGl2ZQpyZXByb2dyYW1taW5nCnJlcHJvdmluZy9ZCnJlcHRpbGUvU00KcmVwdGlsaWFuL01TCnJlcHVibGljL1MKcmVwdWJsaWNhbmlzbS9NCnJlcHVkaWF0ZS9YR05EUwpyZXB1ZGlhdGlvbi9NCnJlcHVkaWF0b3IvTVMKcmVwdWduYW5jZS9NCnJlcHVnbmFudApyZXB1bHNpb24vTQpyZXB1bHNpdmUvWVAKcmVwdWxzaXZlbmVzcy9NCnJlcHVyY2hhc2UvR0RTCnJlcHV0YWJpbGl0eS9NCnJlcHV0YWJseS9FCnJlcHV0YXRpb24vTVMKcmVwdXRlL0RTTUdCCnJlcHV0ZWQvWQpyZXF1ZXN0L0dEUgpyZXF1aWVtL1NNCnJlcXVpcmUvTERHCnJlcXVpcmVtZW50L01TCnJlcXVpc2l0ZS9YTU5TCnJlcXVpc2l0aW9uL0dNRApyZXF1aXRhbC9NCnJlcXVpdGUvRFJTWkcKcmVxdWl0ZWQvVQpyZXF1aXRlci9NCnJlcmVhZC9TRwpyZXJlY29yZC9HRFMKcmVydW5uaW5nCnJlc2F0CnJlc2NpbmQvU0RHCnJlc2Npc3Npb24vTQpyZXNjdWUvRFJTTVpHCnJlc2N1ZXIvTQpyZXNlYWwvQgpyZXNlbGwvU0cKcmVzZW1ibGUvRFNHCnJlc2VuZApyZXNlbnQvTFNERwpyZXNlbnRmdWwvWVAKcmVzZW50ZnVsbmVzcy9NCnJlc2VudG1lbnQvTVMKcmVzZXJwaW5lL00KcmVzZXJ2YXRpb24vTVMKcmVzZXJ2ZWQvVVkKcmVzZXJ2ZWRuZXNzL00KcmVzZXJ2aXN0L1NNCnJlc2Vydm9pci9TTQpyZXNldHRpbmcKcmVzaGlwcGluZwpyZXNpZGVuY2UvU00KcmVzaWRlbmN5L1NNCnJlc2lkZW50L01TCnJlc2lkZW50aWFsCnJlc2lkdWEKcmVzaWR1YWwvTVMKcmVzaWR1ZS9TTQpyZXNpZHV1bS9NCnJlc2lnbmF0aW9uL1NNCnJlc2lnbmVkL1kKcmVzaWxpZW5jZS9NCnJlc2lsaWVuY3kvTQpyZXNpbGllbnQvWQpyZXNpbm91cwpyZXNpc3QvU01EUlpHCnJlc2lzdGFuY2UvU00KcmVzaXN0YW50L1UKcmVzaXN0aWJsZQpyZXNpc3RsZXNzCnJlc2lzdG9yL01TCnJlc2l0L1MKcmVzaXR0aW5nCnJlc29sZApyZXNvbGUvRFNHCnJlc29sdXRlL1BZCnJlc29sdXRlbmVzcy9NCnJlc29sdmUvUkJNCnJlc29sdmVkL1UKcmVzb25hbmNlL1NNCnJlc29uYW50L1kKcmVzb25hdGUvR0RTCnJlc29uYXRvci9TTQpyZXNvcnB0aW9uL00KcmVzb3VuZC9TR0QKcmVzb3VuZGluZy9ZCnJlc291cmNlZnVsL1lQCnJlc291cmNlZnVsbmVzcy9NCnJlc3AKcmVzcGVjdC9FU0dWTUQKcmVzcGVjdGFiaWxpdHkvTQpyZXNwZWN0YWJsZQpyZXNwZWN0YWJseQpyZXNwZWN0ZnVsL0VZCnJlc3BlY3RmdWxuZXNzL00KcmVzcGVjdGl2ZS9ZCnJlc3BlbGwvU0dECnJlc3BpcmF0aW9uL00KcmVzcGlyYXRvci9TTQpyZXNwaXJhdG9yeQpyZXNwaXJlL0RHCnJlc3BsZW5kZW5jZS9NCnJlc3BsZW5kZW50L1kKcmVzcG9uZC9TR0QKcmVzcG9uZGVudC9TTQpyZXNwb25zZS9NUwpyZXNwb25zaWJpbGl0eS9TTQpyZXNwb25zaWJsZQpyZXNwb25zaWJseQpyZXNwb25zaXZlL1VZUApyZXNwb25zaXZlbmVzcy9VTQpyZXN0L0dWTURTCnJlc3RhdGUvR0RTCnJlc3RhdXJhbnQvU00KcmVzdGF1cmF0ZXVyL01TCnJlc3RmdWwvWVAKcmVzdGZ1bGxlcgpyZXN0ZnVsbGVzdApyZXN0ZnVsbmVzcy9NCnJlc3RpdHV0aW9uL00KcmVzdGl2ZS9ZUApyZXN0aXZlbmVzcy9NCnJlc3RsZXNzL1BZCnJlc3RsZXNzbmVzcy9NCnJlc3RvcmF0aW9uL1NNCnJlc3RvcmF0aXZlL1NNCnJlc3RvcmVyL1NNCnJlc3RyYWluZWQvVQpyZXN0cmFpbnQvTVMKcmVzdHJpY3QvU0RHVgpyZXN0cmljdGVkL1UKcmVzdHJpY3Rpb24vTVMKcmVzdHJpY3RpdmUvWVAKcmVzdHJpY3RpdmVuZXNzL00KcmVzdHJpbmcvU0cKcmVzdHJvb20vU00KcmVzdHJ1Y3R1cmluZy9TTQpyZXN1bHQvR1NNRApyZXN1bHRhbnQvU00KcmVzdW1lL0RTTUcKcmVzdW1wdGlvbi9NUwpyZXN1cHBseS9EU0cKcmVzdXJnZW5jZS9NUwpyZXN1cmdlbnQKcmVzdXJyZWN0L0dTRApyZXN1cnJlY3Rpb24vTVMKcmVzdXNjaXRhdGUvR05EUwpyZXN1c2NpdGF0aW9uL00KcmVzdXNjaXRhdG9yL1NNCnJldGFpbGVyL01TCnJldGFpbi9TRFJaRwpyZXRhaW5lci9NCnJldGFrZS9HCnJldGFsaWF0ZS9EU0dOVlgKcmV0YWxpYXRpb24vTQpyZXRhbGlhdG9yeQpyZXRhcmQvU01EUlpHCnJldGFyZGFudC9TTQpyZXRhcmRhdGlvbi9NCnJldGFyZGVyL00KcmV0Y2gvRFNHCnJldGVhY2gvR1MKcmV0ZW50aW9uL00KcmV0ZW50aXZlL1lQCnJldGVudGl2ZW5lc3MvTQpyZXRoaW5rL1NHTQpyZXRob3VnaHQKcmV0aWNlbmNlL00KcmV0aWNlbnQvWQpyZXRpY3VsYXRlZApyZXRpY3VsYXRpb24vTVMKcmV0aW5hL1NNCnJldGluYWwKcmV0aW51ZS9TTQpyZXRpcmVlL1NNCnJldGlyZW1lbnQvTVMKcmV0b3J0L0dNRApyZXRyYWNlL0dEUwpyZXRyYWN0L0RCRwpyZXRyYWN0aWxlCnJldHJhY3Rpb24vUwpyZXRyYWluL0RHUwpyZXRyZWFkL0QKcmV0cmVuY2htZW50L01TCnJldHJpYnV0aW9uL01TCnJldHJpYnV0aXZlCnJldHJpZXZhbC9TTQpyZXRyaWV2ZS9EUlNNWkdCCnJldHJpZXZlci9NCnJldHJvL01TCnJldHJvYWN0aXZlL1kKcmV0cm9maXJlL0dEUwpyZXRyb2ZpdC9TTQpyZXRyb2ZpdHRlZApyZXRyb2ZpdHRpbmcKcmV0cm9ncmFkZS9EU0cKcmV0cm9ncmVzcy9HVkRTCnJldHJvZ3Jlc3Npb24vTQpyZXRyb3JvY2tldC9NUwpyZXRyb3NwZWN0L01EU0dWCnJldHJvc3BlY3Rpb24vTQpyZXRyb3NwZWN0aXZlL01ZUwpyZXRyb3ZpcnVzL01TCnJldHNpbmEvTQpyZXR1cm5hYmxlL1NNCnJldHVybmVlL1NNCnJldi9aVk0KcmV2YW1waW5nL00KcmV2ZWFsL0dKU0QKcmV2ZWFsZWQvVQpyZXZlYWxpbmcvWQpyZXZlaWxsZS9NCnJldmVsL0pNRFJTWkcKcmV2ZWxhdGlvbi9TTQpyZXZlbGVyL00KcmV2ZWxyeS9TTQpyZXZlbmdlL01HRFMKcmV2ZW51ZXIvU00KcmV2ZXJiCnJldmVyYmVyYXRlL0RTR05YCnJldmVyYmVyYXRpb24vTQpyZXZlcmUvRFNHCnJldmVyZW5jZS9EU01HCnJldmVyZW5kL1NNCnJldmVyZW50L1kKcmV2ZXJlbnRpYWwvWQpyZXZlcmllL01TCnJldmVycy9NCnJldmVyc2FsL1NNCnJldmVyc2UvWQpyZXZlcnNpYmlsaXR5CnJldmVyc2libGUKcmV2ZXJzaWJseQpyZXZlcnQvR1NECnJldmVydGlibGUKcmV2ZXRtZW50L1NNCnJldmlsZS9EUlNMWkcKcmV2aWxlbWVudC9NCnJldmlsZXIvTQpyZXZpc2VyL01TCnJldmlzaW9uL1NNCnJldmlzaW9uaXNtL00KcmV2aXNpb25pc3QvU00KcmV2aXZhbC9NUwpyZXZpdmFsaXNtL00KcmV2aXZhbGlzdC9TTQpyZXZpdmUvRFNHCnJldml2aWZpY2F0aW9uL00KcmV2b2NhYmxlCnJldm9rZS9EU0cKcmV2b2x0L0dECnJldm9sdGluZy9ZCnJldm9sdXRpb24vU00KcmV2b2x1dGlvbmFyeS9TTQpyZXZvbHV0aW9uaXN0L1NNCnJldm9sdXRpb25pemUvRFNHCnJldm9sdmUvQlpHRFJTCnJldm9sdmVyL00KcmV2dWUvTVMKcmV2dWxzaW9uL00KcmV2dmVkCnJldnZpbmcKcmV3YXJkZWQvVQpyZXdhcmRpbmcvVQpyZXdhcm0vR1NECnJld2FzaC9HRFMKcmV3ZWF2ZS9HUwpyZXdlZGRpbmcKcmV3aW5kL01CCnJld291bmQKcmV3cml0ZS9NR1MKcmhhcHNvZGljCnJoYXBzb2RpY2FsCnJoYXBzb2RpemUvR0RTCnJoYXBzb2R5L1NNCnJoZWEvTVMKcmhlbml1bS9NCnJoZW9zdGF0L1NNCnJoZXN1cy9NUwpyaGV0b3JpYy9NCnJoZXRvcmljYWwvWQpyaGV0b3JpY2lhbi9TTQpyaGV1bS9NCnJoZXVtYXRpYy9NUwpyaGV1bWF0aWNhbGx5CnJoZXVtYXRpc20vTQpyaGV1bWF0b2lkCnJoZXVteQpyaGluZXN0b25lL1NNCnJoaW5pdGlzL00Kcmhpbm8vTVMKcmhpbm9jZXJvcy9NUwpyaGlub3BsYXN0eQpyaGlub3ZpcnVzL01TCnJoaXpvbWUvTVMKcmhvL1NNCnJob2RpdW0vTQpyaG9kb2RlbmRyb24vU00KcmhvbWJvaWQvU00KcmhvbWJvaWRhbApyaG9tYnVzL01TCnJodWJhcmIvTVMKcmh5bWUvTVpHRFJTCnJoeW1lci9NCnJoeW1lc3Rlci9NUwpyaHl0aG0vU00Kcmh5dGhtaWMKcmh5dGhtaWNhbC9ZCnJpYWwvTVMKcmliL1NNCnJpYmFsZApyaWJhbGRyeS9NCnJpYmJlZApyaWJiZXIvU00KcmliYmluZwpyaWJib24vU00Kcmlib2ZsYXZpbi9NCnJpY2UvTVpHRFJTCnJpY2VyL00KcmljaC9UTVJTWVAKcmljaG5lc3MvTQpyaWNrL0dNRFMKcmlja2V0cy9NCnJpY2tldHkvUlQKcmlja3JhY2svTQpyaWNrc2hhdy9NUwpyaWNvY2hldC9HTURTCnJpY290dGEvTQpyaWQvUwpyaWRkYW5jZS9NCnJpZGRlbgpyaWRkaW5nCnJpZGRsZS9EU01HCnJpZGUvTVpHUlMKcmlkZXIvTQpyaWRlcmxlc3MKcmlkZXJzaGlwL00KcmlkZ2UvTUdEUwpyaWRnZXBvbGUvU00KcmlkZ3kKcmlkaWN1bGUvTUdEUwpyaWRpY3Vsb3VzL1lQCnJpZGljdWxvdXNuZXNzL00KcmlkaW5nL00KcmlmZS9UUgpyaWZmL0dNRFMKcmlmZmxlL0RTTUcKcmlmZnJhZmYvTQpyaWZsZS9NWkdEUlMKcmlmbGVtYW4vTQpyaWZsZW1lbgpyaWZsZXIvTQpyaWZsaW5nL00KcmlmdC9HTURTCnJpZy9TTQpyaWdhdG9uaS9NCnJpZ2dlZApyaWdnZXIvU00KcmlnZ2luZy9NCnJpZ2h0L01EUllTUFRHCnJpZ2h0ZW91cy9VUApyaWdodGVvdXNseQpyaWdodGVvdXNuZXNzL1VNCnJpZ2h0ZnVsL1BZCnJpZ2h0ZnVsbmVzcy9NCnJpZ2h0aXNtL00KcmlnaHRpc3QvU00KcmlnaHRtb3N0CnJpZ2h0bmVzcy9NCnJpZ2h0bwpyaWdodHNpemUvRFNHCnJpZ2h0d2FyZC9TCnJpZ2lkL1lQCnJpZ2lkaXR5L00KcmlnaWRuZXNzL00KcmlnbWFyb2xlL01TCnJpZ29yL01TCnJpZ29yb3VzL1lQCnJpZ29yb3VzbmVzcy9NCnJpbGUvR0RTCnJpbGwvTVMKcmltL1NHTUQKcmltZS9NUwpyaW1sZXNzCnJpbW1lZApyaW1taW5nCnJpbmQvTVMKcmluZy9aR01EUkoKcmluZ2VyL00KcmluZ2dpdC9NUwpyaW5nbGVhZGVyL01TCnJpbmdsZXQvTVMKcmluZ2xpa2UKcmluZ21hc3Rlci9NUwpyaW5nc2lkZS9NCnJpbmd0b25lL1NNCnJpbmd3b3JtL00Kcmluay9NUwpyaW5zZS9NR0RTCnJpb3QvWkdNRFJTCnJpb3Rlci9NCnJpb3RpbmcvTQpyaW90b3VzL1BZCnJpcC9TWFRNTlIKcmlwYXJpYW4KcmlwY29yZC9NUwpyaXBlL1lQCnJpcGVuL0RHCnJpcGVuZWQvVQpyaXBlbmVzcy9NCnJpcG9mZi9TTQpyaXBvc3RlL01HRFMKcmlwcGVkCnJpcHBlci9TTQpyaXBwaW5nCnJpcHBsZS9EU01HCnJpcHBseQpyaXBzYXcvU00KcmlwdGlkZS9NUwpyaXNlL0pNWkdSUwpyaXNlbgpyaXNlci9NCnJpc2liaWxpdHkvTQpyaXNpYmxlCnJpc2luZy9NCnJpc2svR01EUwpyaXNraWx5CnJpc2tpbmVzcy9NCnJpc2t5L1JQVApyaXNvdHRvL01TCnJpc3F1ZQpyaXNzb2xlL1MKcml0ZS9NUwpyaXR1YWwvU01ZCnJpdHVhbGlzbS9NCnJpdHVhbGlzdGljCnJpdHVhbGlzdGljYWxseQpyaXR1YWxpemVkCnJpdHp5L1JUCnJpdi9aTlIKcml2YWwvTURTRwpyaXZhbGVkL1UKcml2YWxyeS9TTQpyaXZlL0NHRFMKcml2ZXIvTQpyaXZlcmJhbmsvU00Kcml2ZXJiZWQvTVMKcml2ZXJib2F0L1NNCnJpdmVyZnJvbnQKcml2ZXJzaWRlL01TCnJpdmV0L01EUlNaRwpyaXZldGVyL00Kcml2aWVyYS9TCnJpdnVsZXQvTVMKcml5YWwvTVMKcm0Kcm9hY2gvR01EUwpyb2FkL0lNUwpyb2FkYmVkL1NNCnJvYWRibG9jay9NRFNHCnJvYWRob3VzZS9TTQpyb2FkaWUvTVMKcm9hZGtpbGwvTQpyb2FkcnVubmVyL1NNCnJvYWRzaG93L1NNCnJvYWRzaWRlL1NNCnJvYWRzdGVyL1NNCnJvYWR3YXkvU00Kcm9hZHdvcmsvU00Kcm9hZHdvcnRoeQpyb2FtL1pHRFJTCnJvYW1lci9NCnJvYW1pbmcvTQpyb2FuL01TCnJvYXIvWkdNRFJTCnJvYXJlci9NCnJvYXJpbmcvTQpyb2FzdC9aR01EUlNKCnJvYXN0ZXIvTQpyb2FzdGluZy9NCnJvYi9TCnJvYmJlZApyb2JiZXIvTVMKcm9iYmVyeS9TTQpyb2JiaW5nCnJvYmUncwpyb2JlL0VHRFMKcm9iaW4vTVMKcm9ib2NhbGwvU0dNRApyb2JvdC9NUwpyb2JvdGljL1MKcm9ib3RpY3MvTQpyb2JvdGl6ZS9HRFMKcm9idXN0L1JZUFQKcm9idXN0bmVzcy9NCnJvY2svWkdNRFJTCnJvY2thYmlsbHkvTQpyb2NrYm91bmQKcm9ja2VyL00Kcm9ja2VyeS9TCnJvY2tldC9NRFNHCnJvY2tldHJ5L00Kcm9ja2ZhbGwvU00Kcm9ja2luZXNzL00Kcm9ja3kvVFJQCnJvY29jby9NCnJvZC9TTQpyb2RlCnJvZGVudC9NUwpyb2Rlby9NUwpyb2UvU00Kcm9lYnVjay9TTQpyb2VudGdlbi9NUwpyb2dlci9HRFMKcm9ndWUncwpyb2d1ZS9LUwpyb2d1ZXJ5L00Kcm9ndWlzaC9ZUApyb2d1aXNobmVzcy9NCnJvaWwvR0RTCnJvaXN0ZXIvWkdEUlMKcm9pc3RlcmVyL00Kcm9sZS9NUwpyb2xsL01EUlpHSlMKcm9sbGJhY2svU00Kcm9sbGVyL00Kcm9sbGVyYmxhZGluZwpyb2xsZXJza2F0aW5nL00Kcm9sbGljay9TREcKcm9sbGlja2luZy9NCnJvbGxtb3AvUwpyb2xsb3Zlci9TTQpyb21haW5lL01TCnJvbWFuL00Kcm9tYW5jZS9NWkdEUlMKcm9tYW5jZXIvTQpyb21hbnRpYy9NUwpyb21hbnRpY2FsbHkKcm9tYW50aWNpc20vTQpyb21hbnRpY2lzdC9TTQpyb21hbnRpY2l6ZS9EU0cKcm9tZW8vTVMKcm9tcC9NRFJaR1MKcm9tcGVyL00Kcm9uZG8vU00Kcm9vZC9NUwpyb29mL01EUlpHUwpyb29mZXIvTQpyb29maW5nL00Kcm9vZmxlc3MKcm9vZnRvcC9TTQpyb29rL01ER1MKcm9va2VyeS9TTQpyb29raWUvU00Kcm9vbS9NRFJaR1MKcm9vbWVyL00Kcm9vbWV0dGUvU00Kcm9vbWZ1bC9TTQpyb29taW5lc3MvTQpyb29tbWF0ZS9TTQpyb29teS9SVFAKcm9vc3QvU01EUlpHCnJvb3N0ZXIvTQpyb290L01EUlpHUwpyb290ZXIvTQpyb290a2l0L1NNCnJvb3RsZXNzL1AKcm9vdGxldC9TTQpyb3BlL01aR0RSUwpyb3Blci9NCnJvcHkvUlQKcm9zYXJ5L1NNCnJvc2UvTVMKcm9zZWF0ZQpyb3NlYnVkL1NNCnJvc2VidXNoL01TCnJvc2VtYXJ5L00Kcm9zZXR0ZS9TTQpyb3Nld2F0ZXIvTQpyb3Nld29vZC9NUwpyb3NpbHkKcm9zaW4vU01ERwpyb3NpbmVzcy9NCnJvc3Rlci9TTQpyb3N0cnVtL01TCnJvc3kvUlRQCnJvdC9TTQpyb3RhL1MKcm90YXJ5L1NNCnJvdGF0ZS9EU0dOWApyb3RhdGlvbi9NCnJvdGF0aW9uYWwKcm90YXRvcnkKcm90ZS9NCnJvdGd1dC9NCnJvdGlzc2VyaWUvU00Kcm90b2dyYXZ1cmUvTVMKcm90b3IvU00Kcm90b3RpbGxlci9NUwpyb3R0ZWQKcm90dGVuL1RQUlkKcm90dGVubmVzcy9NCnJvdHRlci9TCnJvdHRpbmcKcm90dHdlaWxlci9TCnJvdHVuZC9QCnJvdHVuZGEvTVMKcm90dW5kaXR5L00Kcm90dW5kbmVzcy9NCnJvdWUvTVMKcm91Z2UvRFNNRwpyb3VnaC9NRE5SWVhUR1AKcm91Z2hhZ2UvTQpyb3VnaGNhc3QKcm91Z2hlbi9HRApyb3VnaGhvdXNlL01HRFMKcm91Z2huZWNrL0dNRFMKcm91Z2huZXNzL00Kcm91Z2hzCnJvdWdoc2hvZApyb3VsZXR0ZS9NCnJvdW5kL1BTTURSWVpURwpyb3VuZGFib3V0L1NNCnJvdW5kZWwvUwpyb3VuZGVsYXkvTVMKcm91bmRob3VzZS9TTQpyb3VuZGlzaApyb3VuZG5lc3MvTQpyb3VuZHVwL01TCnJvdW5kd29ybS9TTQpyb3VzZS9EU0cKcm91c3QvU0RHCnJvdXN0YWJvdXQvU00Kcm91dC9NUlpTCnJvdXRlJ3MKcm91dGUvQURTRwpyb3V0ZWluZwpyb3V0ZXIvTQpyb3V0aW5lL01ZUwpyb3V0aW5pemUvR0RTCnJvdXgKcm92ZS9aR0RSUwpyb3Zlci9NCnJvdy9TWkdNRFIKcm93YW4vUwpyb3dib2F0L01TCnJvd2RpbHkKcm93ZGluZXNzL00Kcm93ZHkvUFJTTVQKcm93ZHlpc20vTQpyb3dlbC9TTURHCnJvd2VyL00Kcm93aW5nL00Kcm93bG9jay9TCnJveWFsL1NNWQpyb3lhbGlzdC9TTQpyb3lhbHRpZXMvTQpyb3lhbHR5L1NNCnJwbQpycHMKcnQKcnRlCnJ1Yi9TTQpydWJhdG8vU00KcnViYmVkCnJ1YmJlci9TTQpydWJiZXJpemUvR0RTCnJ1YmJlcm5lY2svTURSU1pHCnJ1YmJlcm5lY2tlci9NCnJ1YmJlcnkKcnViYmluZy9TCnJ1YmJpc2gvTURTRwpydWJiaXNoeQpydWJibGUvTQpydWJkb3duL1NNCnJ1YmUvTVMKcnViZWxsYS9NCnJ1YmljdW5kCnJ1YmlkaXVtL00KcnVibGUvU00KcnVicmljL1NNCnJ1YnkvUlNNVApydWNoZWQKcnVjay9ER1MKcnVja3NhY2svTVMKcnVja3VzL01TCnJ1Y3Rpb25zCnJ1ZGRlci9TTQpydWRkZXJsZXNzCnJ1ZGRpbmVzcy9NCnJ1ZGR5L1JUUApydWRlL1lUUlAKcnVkZW5lc3MvTQpydWRpbWVudC9TTQpydWRpbWVudGFyeQpydWUvRFNNRwpydWVmdWwvUFkKcnVlZnVsbmVzcy9NCnJ1ZmYvTURZR1MKcnVmZmlhbi9NWVMKcnVmZmxlL0RTTUcKcnVmZmxlZC9VCnJ1Zy9TTQpydWdieS9NCnJ1Z2dlZC9QVFJZCnJ1Z2dlZG5lc3MvTQpydWdnZXIKcnVncmF0L1NNCnJ1aW4vTURHUwpydWluYXRpb24vTQpydWlub3VzL1kKcnVsZS9NWkdKRFJTCnJ1bGVyL00KcnVsaW5nL00KcnVtL1NNCnJ1bWJhL1NNREcKcnVtYmxlL0RTSk1HCnJ1bWJsaW5nL00KcnVtYnVzdGlvdXMKcnVtaW5hbnQvTVMKcnVtaW5hdGUvWEdOVkRTCnJ1bWluYXRpb24vTQpydW1pbmF0aXZlL1kKcnVtbWFnZS9EU01HCnJ1bW1lcgpydW1tZXN0CnJ1bW15L00KcnVtb3IvU01ERwpydW1vcm1vbmdlci9TTQpydW1wL01ZUwpydW1wbGUvRFNNRwpydW1wdXMvTVMKcnVuL0FTTQpydW5hYm91dC9NUwpydW5hcm91bmQvU00KcnVuYXdheS9NUwpydW5kb3duL1NNCnJ1bmUvTVMKcnVuZy9NUwpydW5pYwpydW5sZXQvU00KcnVubmVsL1NNCnJ1bm5lci9TTQpydW5uaW5nL00KcnVubnkvUlQKcnVub2ZmL1NNCnJ1bnQvTVMKcnVudHkvUlQKcnVud2F5L1NNCnJ1cGVlL1NNCnJ1cGlhaC9NCnJ1cGlhaHMKcnVwdHVyZS9NR0RTCnJ1cmFsCnJ1c2UvTVMKcnVzaC9NRFJTWkcKcnVzaGVyL00KcnVzaHkKcnVzay9NUwpydXNzZXQvU00KcnVzdC9NREdTCnJ1c3RpYy9TTQpydXN0aWNhbGx5CnJ1c3RpY2F0ZS9HRFMKcnVzdGljYXRpb24vTQpydXN0aWNpdHkvTQpydXN0aW5lc3MvTQpydXN0bGUvRFJTSk1aRwpydXN0bGVyL00KcnVzdHByb29mL1NERwpydXN0eS9SUE5UCnJ1dC9TTQpydXRhYmFnYS9TTQpydXRoZW5pdW0vTQpydXRoZXJmb3JkaXVtL00KcnV0aGxlc3MvWVAKcnV0aGxlc3NuZXNzL00KcnV0dGVkCnJ1dHRpbmcKcnV0dHkvUlQKcnllL00Kcy9OWVhCCnNhYmJhdGgvTQpzYWJiYXRocwpzYWJiYXRpY2FsL1NNCnNhYmVyL01TCnNhYmxlL01TCnNhYm90L01TCnNhYm90YWdlL0RTTUcKc2Fib3RldXIvU00Kc2FicmEvTVMKc2FjL1NNCnNhY2NoYXJpbi9NCnNhY2NoYXJpbmUKc2FjZXJkb3RhbApzYWNoZW0vU00Kc2FjaGV0L1NNCnNhY2svWkdNRFJKUwpzYWNrY2xvdGgvTQpzYWNrZXIvTQpzYWNrZnVsL01TCnNhY2tpbmcvTQpzYWNyYQpzYWNyYW1lbnQvTVMKc2FjcmFtZW50YWwKc2FjcmVkL1lQCnNhY3JlZG5lc3MvTQpzYWNyaWZpY2UvRFNNRwpzYWNyaWZpY2lhbC9ZCnNhY3JpbGVnZS9NUwpzYWNyaWxlZ2lvdXMvWQpzYWNyaXN0YW4vTVMKc2FjcmlzdHkvU00Kc2Fjcm9pbGlhYy9NUwpzYWNyb3NhbmN0L1AKc2Fjcm9zYW5jdG5lc3MvTQpzYWNydW0vTQpzYWQvUFkKc2FkZGVuL1NERwpzYWRkZXIKc2FkZGVzdApzYWRkbGUncwpzYWRkbGUvVURTRwpzYWRkbGViYWcvTVMKc2FkZGxlci9TCnNhZGRsZXJ5CnNhZGVzCnNhZGh1L1MKc2FkaXNtL00Kc2FkaXN0L1NNCnNhZGlzdGljCnNhZGlzdGljYWxseQpzYWRuZXNzL00Kc2Fkb21hc29jaGlzbS9NCnNhZG9tYXNvY2hpc3QvTVMKc2Fkb21hc29jaGlzdGljCnNhZmFyaS9TR01ECnNhZmUvTVlUUFJTCnNhZmVndWFyZC9TTURHCnNhZmVrZWVwaW5nL00Kc2FmZW5lc3MvTQpzYWZldHkvU00Kc2FmZmxvd2VyL01TCnNhZmZyb24vTVMKc2FnL1NNCnNhZ2EvTVMKc2FnYWNpb3VzL1kKc2FnYWNpdHkvTQpzYWdlL01ZVFJTCnNhZ2VicnVzaC9NCnNhZ2dlZApzYWdnaW5nCnNhZ2d5L1JUCnNhZ28vTQpzYWd1YXJvL01TCnNhaGliL01TCnNhaWQvVQpzYWlsL0dNRFNKCnNhaWxib2FyZC9NUlpHUwpzYWlsYm9hcmRlci9NCnNhaWxib2FyZGluZy9NCnNhaWxib2F0L01TCnNhaWxjbG90aC9NCnNhaWxmaXNoL01TCnNhaWxpbmcvTQpzYWlsb3IvU00Kc2FpbHBsYW5lL01TCnNhaW50L01EWVMKc2FpbnRob29kL00Kc2FpbnRsaWtlCnNhaW50bGluZXNzL00Kc2FpbnRseS9QUlQKc2FpdGgKc2FrZS9NCnNhbGFhbS9TTURHCnNhbGFibGUvVQpzYWxhY2lvdXMvUFkKc2FsYWNpb3VzbmVzcy9NCnNhbGFjaXR5L00Kc2FsYWQvTVMKc2FsYW1hbmRlci9TTQpzYWxhbWkvU00Kc2FsYXJ5L0RTTQpzYWxlL0FCTVMKc2FsZXJvb20vUwpzYWxlc2NsZXJrL1NNCnNhbGVzZ2lybC9TTQpzYWxlc2xhZHkvU00Kc2FsZXNtYW4vTQpzYWxlc21hbnNoaXAvTQpzYWxlc21lbgpzYWxlc3Blb3BsZS9NCnNhbGVzcGVyc29uL01TCnNhbGVzcm9vbS9TCnNhbGVzd29tYW4vTQpzYWxlc3dvbWVuCnNhbGllbmNlL00Kc2FsaWVudC9TTVkKc2FsaW5lL1NNCnNhbGluaXR5L00Kc2FsaXZhL00Kc2FsaXZhcnkKc2FsaXZhdGUvR05EUwpzYWxpdmF0aW9uL00Kc2FsbG93L1JUUApzYWxsb3duZXNzL00Kc2FsbHkvRFNNRwpzYWxtb24vU00Kc2FsbW9uZWxsYS9NCnNhbG1vbmVsbGFlCnNhbG9uL01TCnNhbG9vbi9TTQpzYWxzYS9NUwpzYWx0J3MKc2FsdC9DVEdEUwpzYWx0Ym94L01TCnNhbHRjZWxsYXIvU00Kc2FsdGVkL1UKc2FsdGVyCnNhbHRpbmUvU00Kc2FsdGluZXNzL00Kc2FsdHBldGVyL00Kc2FsdHNoYWtlci9TTQpzYWx0d2F0ZXIvTQpzYWx0eS9SVFAKc2FsdWJyaW91cy9JCnNhbHV0YXJ5CnNhbHV0YXRpb24vTVMKc2FsdXRhdG9yaWFuL01TCnNhbHV0YXRvcnkKc2FsdXRlL0RTTUcKc2FsdmFnZS9EU01HCnNhbHZhZ2VhYmxlCnNhbHZhdGlvbi9NCnNhbHZlL01aR0RSUwpzYWx2ZXIvTQpzYWx2by9NUwpzYW1hcml1bS9NCnNhbWJhL01EU0cKc2FtZS9TUApzYW1lbmVzcy9NCnNhbWV5CnNhbWl6ZGF0L1MKc2Ftb3NhL1MKc2Ftb3Zhci9TTQpzYW1wYW4vU00Kc2FtcGxlL0RSU01aR0oKc2FtcGxlci9NCnNhbXBsaW5nL00Kc2FtdXJhaS9TTQpzYW5hdG9yaXVtL1NNCnNhbmN0aWZpY2F0aW9uL00Kc2FuY3RpZnkvR0RTTgpzYW5jdGltb25pb3VzL1lQCnNhbmN0aW1vbmlvdXNuZXNzL00Kc2FuY3RpbW9ueS9NCnNhbmN0aW9uL0dTTUQKc2FuY3Rpb25lZC9VCnNhbmN0aXR5L00Kc2FuY3R1YXJ5L1NNCnNhbmN0dW0vU00Kc2FuZC9aR01EUlMKc2FuZGFsL1NNCnNhbmRhbHdvb2QvTQpzYW5kYmFnL1NNCnNhbmRiYWdnZWQKc2FuZGJhZ2dlci9TTQpzYW5kYmFnZ2luZwpzYW5kYmFuay9NUwpzYW5kYmFyL1NNCnNhbmRibGFzdC9aR01EUlMKc2FuZGJsYXN0ZXIvTQpzYW5kYm94L01TCnNhbmRjYXN0bGUvTVMKc2FuZGVyL00Kc2FuZGhvZy9TTQpzYW5kaW5lc3MvTQpzYW5kbG90L1NNCnNhbmRsb3R0ZXIvTVMKc2FuZG1hbi9NCnNhbmRtZW4Kc2FuZHBhcGVyL0dNRFMKc2FuZHBpcGVyL01TCnNhbmRwaXQvUwpzYW5kc3RvbmUvTQpzYW5kc3Rvcm0vU00Kc2FuZHdpY2gvTURTRwpzYW5keS9SVFAKc2FuZS9JWVRSCnNhbmVuZXNzL00Kc2FuZy9TCnNhbmdmcm9pZC9NCnNhbmdyaWEvTQpzYW5ndWluYXJ5CnNhbmd1aW5lL1kKc2FuaXRhcmlhbi9TTQpzYW5pdGFyaXVtL1NNCnNhbml0YXJ5L0lVCnNhbml0YXRpb24vTQpzYW5pdGl6ZS9HRFMKc2FuaXR5L0lNCnNhbmsKc2FucwpzYW5zZXJpZgpzYXAvU00Kc2FwaWVuY2UvTQpzYXBpZW5zCnNhcGllbnQKc2FwbGVzcwpzYXBsaW5nL01TCnNhcHBlZApzYXBwZXIvUwpzYXBwaGlyZS9TTQpzYXBwaW5lc3MvTQpzYXBwaW5nCnNhcHB5L1BSVApzYXByb3BoeXRlL1NNCnNhcHJvcGh5dGljCnNhcHN1Y2tlci9TTQpzYXB3b29kL00Kc2FyYW4vTQpzYXJjYXNtL01TCnNhcmNhc3RpYwpzYXJjYXN0aWNhbGx5CnNhcmNvbWEvTVMKc2FyY29waGFnaQpzYXJjb3BoYWd1cy9NCnNhcmRpbmUvTVMKc2FyZG9uaWMKc2FyZG9uaWNhbGx5CnNhcmdlL01TCnNhcmkvTVMKc2Fya3kKc2FybmllL1MKc2Fyb25nL1NNCnNhcnNhcGFyaWxsYS9NUwpzYXJ0b3JpYWwvWQpzYXNoL01TCnNhc2hheS9TR01ECnNhc3MvR01EUwpzYXNzYWZyYXMvTVMKc2Fzc3kvUlQKc2F0CnNhdGFuaWMKc2F0YW5pY2FsL1kKc2F0YW5pc20vTQpzYXRhbmlzdC9NUwpzYXRheQpzYXRjaGVsL01TCnNhdGUvR0RTCnNhdGVlbi9NCnNhdGVsbGl0ZS9EU01HCnNhdGlhYmxlL0kKc2F0aWF0ZS9HTkRTCnNhdGlhdGlvbi9NCnNhdGlldHkvTQpzYXRpbi9NCnNhdGlud29vZC9TTQpzYXRpbnkKc2F0aXJlL1NNCnNhdGlyaWMKc2F0aXJpY2FsL1kKc2F0aXJpc3QvU00Kc2F0aXJpemUvRFNHCnNhdGlzZmFjdGlvbi9FTQpzYXRpc2ZhY3Rpb25zCnNhdGlzZmFjdG9yaWx5L1UKc2F0aXNmYWN0b3J5L1UKc2F0aXNmaWVkL1UKc2F0aXNmeS9FRFNHCnNhdGlzZnlpbmcvVQpzYXRpc2Z5aW5nbHkKc2F0b3JpL00Kc2F0cmFwL1NNCnNhdHN1bWEvUwpzYXR1cmF0ZS9EU0dOCnNhdHVyYXRlZC9VCnNhdHVyYXRpb24vTQpzYXR1cm5pbmUKc2F0eXIvTVMKc2F0eXJpYXNpcy9NCnNhdHlyaWMKc2F1Y2UvTVpHRFJTCnNhdWNlcGFuL1NNCnNhdWNlci9NCnNhdWNpbHkKc2F1Y2luZXNzL00Kc2F1Y3kvUlBUCnNhdWVya3JhdXQvTQpzYXVuYS9NRFNHCnNhdW50ZXIvTURHUwpzYXVyaWFuCnNhdXJvcG9kL1NNCnNhdXNhZ2UvTVMKc2F1dGUvTVMKc2F1dGVlZApzYXV0ZWluZwpzYXZhZ2UvRFJTTVlUR1AKc2F2YWdlbmVzcy9NCnNhdmFnZXJ5L1NNCnNhdmFubmEvTVMKc2F2YW50L1NNCnNhdmUvQkpNWkdEUlMKc2F2ZWQvVQpzYXZlci9NCnNhdmluZy9NCnNhdmluZ3MvTQpzYXZpb3IvU00Kc2F2b3IvTURTRwpzYXZvcmluZXNzL00Kc2F2b3J5L1BUUlNNCnNhdm95L01TCnNhdnZ5L0RSU01URwpzYXcvU0dNRApzYXdib25lcy9NCnNhd2J1Y2svTVMKc2F3ZHVzdC9NCnNhd2ZseS9TTQpzYXdob3JzZS9TTQpzYXdtaWxsL01TCnNhd3llci9TTQpzYXgvTVMKc2F4aWZyYWdlL1NNCnNheG9waG9uZS9NUwpzYXhvcGhvbmlzdC9TTQpzYXkncwpzYXkvVVNHCnNheWluZy9TTQpzY2FiL01TCnNjYWJiYXJkL01TCnNjYWJiZWQKc2NhYmJpbmVzcy9NCnNjYWJiaW5nCnNjYWJieS9QVFIKc2NhYmllcy9NCnNjYWJyb3VzCnNjYWQvTVMKc2NhZmZvbGQvU01HCnNjYWZmb2xkaW5nL00Kc2NhZy9TCnNjYWdnZWQKc2NhbGFyL1MKc2NhbGF3YWcvTVMKc2NhbGQvTURTRwpzY2FsZSdzCnNjYWxlL0NHRFMKc2NhbGVsZXNzCnNjYWxlbmUKc2NhbGluZXNzL00Kc2NhbGxpb24vTVMKc2NhbGxvcC9HU01ECnNjYWxwL01EUlNaRwpzY2FscGVsL1NNCnNjYWxwZXIvTQpzY2FseS9SVFAKc2NhbS9NUwpzY2FtbWVkCnNjYW1tZXIvUwpzY2FtbWluZwpzY2FtcC9NUlNaCnNjYW1wZXIvR01ECnNjYW1waS9NCnNjYW4vTVMKc2NhbmRhbC9TTQpzY2FuZGFsaXplL0RTRwpzY2FuZGFsbW9uZ2VyL1NNCnNjYW5kYWxvdXMvWQpzY2FuZGl1bS9NCnNjYW5uZWQKc2Nhbm5lci9TTQpzY2FubmluZwpzY2Fuc2lvbi9NCnNjYW50L0NEU1RHCnNjYW50ZXIKc2NhbnRpbHkKc2NhbnRpbmVzcy9NCnNjYW50bHkKc2NhbnRuZXNzL00Kc2NhbnR5L1JTUFQKc2NhcGVnb2F0L1NHTUQKc2NhcGVncmFjZS9NUwpzY2FwdWxhL00Kc2NhcHVsYWUKc2NhcHVsYXIvU00Kc2Nhci9HTURTCnNjYXJhYi9TTQpzY2FyY2UvUllUUApzY2FyY2VuZXNzL00Kc2NhcmNpdHkvU00Kc2NhcmUvTVMKc2NhcmVjcm93L01TCnNjYXJlbW9uZ2VyL1NNRwpzY2FyZi9NRFNHCnNjYXJpZmljYXRpb24vTQpzY2FyaWZ5L05EU0cKc2NhcmlseQpzY2FyaW5lc3MvTQpzY2FybGF0aW5hL00Kc2NhcmxldC9NCnNjYXJwL01EUlNaRwpzY2FycGVyL0RHCnNjYXJyZWQKc2NhcnJpbmcKc2NhcnZlcwpzY2FyeS9SVFAKc2NhdC9NUwpzY2F0aGluZy9ZCnNjYXRvbG9naWNhbApzY2F0b2xvZ3kvTQpzY2F0dGVkCnNjYXR0ZXIvR0pTTUQKc2NhdHRlcmJyYWluL1NNRApzY2F0dGVyaW5nL00Kc2NhdHRlcnNob3QKc2NhdHRpbmcKc2NhdHR5CnNjYXZlbmdlL1pHRFJTCnNjYXZlbmdlci9NCnNjZW5hcmlvL01TCnNjZW5hcmlzdC9NUwpzY2VuZS9NUwpzY2VuZXJ5L00Kc2NlbmljCnNjZW5pY2FsbHkKc2NlbnQvQ01TCnNjZW50ZWQvVQpzY2VudGluZwpzY2VudGxlc3MKc2NlcHRlci9NUwpzY2gKc2NoYWRlbmZyZXVkZQpzY2hlZHVsZSdzCnNjaGVkdWxlL0FEU0cKc2NoZWR1bGVkL1UKc2NoZWR1bGVyL1MKc2NoZW1hCnNjaGVtYXRhCnNjaGVtYXRpYy9TTQpzY2hlbWF0aWNhbGx5CnNjaGVtYXRpemUvR0RTCnNjaGVtZS9EUlNNWkcKc2NoZW1lci9NCnNjaGVyem8vTVMKc2NoaWxsaW5nL01TCnNjaGlzbS9TTQpzY2hpc21hdGljL1NNCnNjaGlzdC9NCnNjaGl6by9TTQpzY2hpem9pZC9NUwpzY2hpem9waHJlbmlhL00Kc2NoaXpvcGhyZW5pYy9TTQpzY2hsZW1pZWwvU00Kc2NobGVwL1NNCnNjaGxlcHBlZApzY2hsZXBwaW5nCnNjaGxvY2svTQpzY2htYWx0ei9NCnNjaG1hbHR6eS9UUgpzY2htby9NCnNjaG1vZXMKc2NobW9vemUvRFJTWkcKc2NobXVjay9NUwpzY2huYXBwcy9NCnNjaG5hdXplci9TTQpzY2huaXR6ZWwvU00Kc2Nobm9vay9NUwpzY2hub3ovTVMKc2Nobm96emxlL1NNCnNjaG9sYXIvTVlTCnNjaG9sYXJzaGlwL01TCnNjaG9sYXN0aWMKc2Nob2xhc3RpY2FsbHkKc2Nob2xhc3RpY2lzbQpzY2hvb2wvU0dNRApzY2hvb2xiYWcvTVMKc2Nob29sYm9vay9TTQpzY2hvb2xib3kvTVMKc2Nob29sY2hpbGQvTQpzY2hvb2xjaGlsZHJlbi9NCnNjaG9vbGRheXMKc2Nob29sZWQvVQpzY2hvb2xmZWxsb3cvU00Kc2Nob29sZ2lybC9TTQpzY2hvb2xob3VzZS9TTQpzY2hvb2xpbmcvTQpzY2hvb2xraWQvUwpzY2hvb2xtYXJtL1NNCnNjaG9vbG1hcm1pc2gKc2Nob29sbWFzdGVyL01TCnNjaG9vbG1hdGUvU00Kc2Nob29sbWlzdHJlc3MvTVMKc2Nob29scm9vbS9TTQpzY2hvb2x0ZWFjaGVyL01TCnNjaG9vbHdvcmsvTQpzY2hvb2x5YXJkL1NNCnNjaG9vbmVyL1NNCnNjaHVzcy9HTURTCnNjaHVzc2Jvb21lci9NUwpzY2h3YS9NUwpzY2kKc2NpYXRpYwpzY2lhdGljYS9NCnNjaWVuY2UvRk1TCnNjaWVudGlmaWMvVQpzY2llbnRpZmljYWxseS9VCnNjaWVudGlzdC9TTQpzY2ltaXRhci9TTQpzY2ludGlsbGEvTVMKc2NpbnRpbGxhdGUvRFNHTgpzY2ludGlsbGF0aW9uL00Kc2Npb24vTVMKc2Npc3Nvci9HRFMKc2NsZXJvc2VzCnNjbGVyb3Npcy9NCnNjbGVyb3RpYwpzY29mZi9NRFJTWkcKc2NvZmZlci9NCnNjb2ZmbGF3L01TCnNjb2xkL01EU0dKCnNjb2xkaW5nL00Kc2NvbGlvc2lzL00Kc2NvbmNlL1NNCnNjb25lL01TCnNjb29wL01EU0cKc2Nvb3BmdWwvTVMKc2Nvb3QvRFJTWkcKc2Nvb3Rlci9NCnNjb3BlL01HRFMKc2NvcmJ1dGljCnNjb3JjaC9NRFJTWkcKc2NvcmNoZXIvTQpzY29yZS9NWkdEUlMKc2NvcmVib2FyZC9TTQpzY29yZWNhcmQvTVMKc2NvcmVrZWVwZXIvTVMKc2NvcmVsZXNzCnNjb3JlbGluZS9TCnNjb3Jlci9NCnNjb3JuL01EUlNaRwpzY29ybmVyL00Kc2Nvcm5mdWwvWQpzY29ycGlvbi9NUwpzY290Y2gvTURTRwpzY290Y2hzCnNjb3VuZHJlbC9NUwpzY291ci9EUlNaRwpzY291cmVyL00Kc2NvdXJnZS9EU01HCnNjb3V0L01EUlNaRwpzY291dGluZy9NCnNjb3V0bWFzdGVyL01TCnNjb3cvTVMKc2Nvd2wvTURTRwpzY3JhYmJsZS9NWkdEUlMKc2NyYWJibGVyL00Kc2NyYWcvTVMKc2NyYWdnbHkvUlQKc2NyYWdneS9UUgpzY3JhbS9TCnNjcmFtYmxlJ3MKc2NyYW1ibGUvVUdEUwpzY3JhbWJsZXIvTVMKc2NyYW1tZWQKc2NyYW1taW5nCnNjcmFwL01EUlNaR0oKc2NyYXBib29rL1NNCnNjcmFwZS9TTQpzY3JhcGVyL00Kc2NyYXBoZWFwL1NNCnNjcmFwaWUKc2NyYXBwZWQKc2NyYXBwZXIvTVMKc2NyYXBwaW5nCnNjcmFwcHkvVFIKc2NyYXB5YXJkL1NNCnNjcmF0Y2gvR01EUwpzY3JhdGNoY2FyZC9TCnNjcmF0Y2hlZC9VCnNjcmF0Y2hpbHkKc2NyYXRjaGluZXNzL00Kc2NyYXRjaHBhZC9TCnNjcmF0Y2h5L1BSVApzY3Jhd2wvU01ERwpzY3Jhd2x5CnNjcmF3bmluZXNzL00Kc2NyYXdueS9QVFIKc2NyZWFtL1NNRFJaRwpzY3JlYW1lci9NCnNjcmVhbWluZy9ZCnNjcmVlL01EUwpzY3JlZWNoL0dNRFMKc2NyZWVjaHkvVFIKc2NyZWVkL1MKc2NyZWVuL1NKTURHCnNjcmVlbmluZy9NCnNjcmVlbnBsYXkvU00Kc2NyZWVuc2F2ZXIKc2NyZWVuc2hvdC9TCnNjcmVlbndyaXRlci9TTQpzY3JlZW53cml0aW5nL00Kc2NyZXcncwpzY3Jldy9VRFNHCnNjcmV3YmFsbC9NUwpzY3Jld2RyaXZlci9NUwpzY3Jld2luZXNzL00Kc2NyZXd3b3JtL1NNCnNjcmV3eS9QUlQKc2NyaWJhbApzY3JpYmJsZS9NWkdEUlMKc2NyaWJibGVyL00Kc2NyaWJlJ3MKc2NyaWJlL0NLSVMKc2NyaW0vTVMKc2NyaW1tYWdlL01HRFMKc2NyaW1wL1NERwpzY3JpbXNoYXcvTURHUwpzY3JpcC9NUwpzY3JpcHQvRlNNREcKc2NyaXB0ZWQvVQpzY3JpcHR1cmFsCnNjcmlwdHVyZS9NUwpzY3JpcHR3cml0ZXIvU00Kc2NyaXZlbmVyL1NNCnNjcm9kL00Kc2Nyb2Z1bGEvTQpzY3JvZnVsb3VzCnNjcm9nL1MKc2Nyb2xsL0dTTUQKc2Nyb29nZS9NUwpzY3JvdGEKc2Nyb3RhbApzY3JvdHVtL00Kc2Nyb3VuZ2UvRFJTWkcKc2Nyb3VuZ2VyL00Kc2Nyb3VuZ3kvVFIKc2NydWIvTVMKc2NydWJiZWQKc2NydWJiZXIvU00Kc2NydWJiaW5nCnNjcnViYnkvUlQKc2NydWZmL1NNCnNjcnVmZmlseQpzY3J1ZmZpbmVzcy9NCnNjcnVmZnkvUlBUCnNjcnVtL1MKc2NydW1oYWxmCnNjcnVtaGFsdmVzCnNjcnVtbWFnZS9TCnNjcnVtbWVkCnNjcnVtbWluZwpzY3J1bXAvU0dECnNjcnVtcHRpb3VzL1kKc2NydW1weQpzY3J1bmNoL01EU0cKc2NydW5jaHkvU00Kc2NydXBsZS9NR0RTCnNjcnVwdWxvc2l0eS9NCnNjcnVwdWxvdXMvVVBZCnNjcnVwdWxvdXNuZXNzL1VNCnNjcnV0aW5lZXIvUwpzY3J1dGluaXplL0dEUwpzY3J1dGlueS9NCnNjdWJhL01EU0cKc2N1ZC9NUwpzY3VkZGVkCnNjdWRkaW5nCnNjdWZmL01EU0cKc2N1ZmZsZS9NR0RTCnNjdWxsL01EUlNaRwpzY3VsbGVyL00Kc2N1bGxlcnkvU00Kc2N1bGxpb24vU00Kc2N1bHB0L1NHRApzY3VscHRvci9TTQpzY3VscHRyZXNzL01TCnNjdWxwdHVyYWwKc2N1bHB0dXJlL0RTTUcKc2N1bS9NUwpzY3VtYmFnL01TCnNjdW1tZWQKc2N1bW1pbmcKc2N1bW15L1RSCnNjdXBwZXIvTURHUwpzY3VyZi9NCnNjdXJmeQpzY3VycmlsaXR5L00Kc2N1cnJpbG91cy9QWQpzY3Vycmlsb3VzbmVzcy9NCnNjdXJyeS9HRFNNCnNjdXJ2aWx5CnNjdXJ2eS9UUk0Kc2N1dGNoZW9uL1NNCnNjdXR0bGUvTUdEUwpzY3V0dGxlYnV0dC9NCnNjdXp6eS9UUgpzY3l0aGUvRFNNRwpzZWEvU00Kc2VhYmVkL1NNCnNlYWJpcmQvTVMKc2VhYm9hcmQvU00Kc2VhYm9ybmUKc2VhY29hc3QvU00Kc2VhZmFyZXIvU00Kc2VhZmFyaW5nL00Kc2VhZmxvb3IvU00Kc2VhZm9vZC9NCnNlYWZyb250L1NNCnNlYWdvaW5nCnNlYWd1bGwvTVMKc2VhaG9yc2UvTVMKc2VhbCdzCnNlYWwvQVVTREcKc2VhbGFudC9NUwpzZWFsZXIvU00Kc2VhbHNraW4vTQpzZWFtL0dNRE5TCnNlYW1hbi9NCnNlYW1hbnNoaXAvTQpzZWFtbGVzcy9ZCnNlYW1vdW50L01TCnNlYW1zdHJlc3MvTVMKc2VhbXkvUlQKc2VhbmNlL1NNCnNlYXBsYW5lL1NNCnNlYXBvcnQvTVMKc2Vhci9HTURTCnNlYXJjaC9BWkdNRFJTCnNlYXJjaGVyL0FNCnNlYXJjaGluZy9ZCnNlYXJjaGxpZ2h0L01TCnNlYXJpbmcvWQpzZWFzY2FwZS9TTQpzZWFzaGVsbC9TTQpzZWFzaG9yZS9TTQpzZWFzaWNrL1AKc2Vhc2lja25lc3MvTQpzZWFzaWRlL01TCnNlYXNvbi9TR01EQkoKc2Vhc29uYWJsZS9VCnNlYXNvbmFibHkvVQpzZWFzb25hbC9ZCnNlYXNvbmFsaXR5CnNlYXNvbmVkL1UKc2Vhc29uaW5nL00Kc2VhdCdzCnNlYXQvVUdEUwpzZWF0aW5nL00Kc2VhdG1hdGUvU00Kc2Vhd2FsbC9NUwpzZWF3YXJkL01TCnNlYXdhdGVyL00Kc2Vhd2F5L1NNCnNlYXdlZWQvTVMKc2Vhd29ydGhpbmVzcy9NCnNlYXdvcnRoeS9QCnNlYmFjZW91cwpzZWJvcnJoZWEvTQpzZWJ1bQpzZWMneQpzZWMvU00Kc2VjYW50L1NNCnNlY2F0ZXVycwpzZWNlZGUvRFNHCnNlY2Vzc2lvbi9NCnNlY2Vzc2lvbmlzdC9NUwpzZWNsdWRlL0dEUwpzZWNsdXNpb24vTQpzZWNsdXNpdmUKc2Vjb25kL1NMWkdNRFJZCnNlY29uZGFyaWx5CnNlY29uZGFyeS9TTQpzZWNvbmRlci9NCnNlY29uZGhhbmQKc2Vjb25kbWVudC9TCnNlY3JlY3kvTQpzZWNyZXQvU0dWTURZCnNlY3JldGFyaWFsCnNlY3JldGFyaWF0L01TCnNlY3JldGFyeS9TTQpzZWNyZXRhcnlzaGlwL00Kc2VjcmV0ZS9YTlMKc2VjcmV0aW9uL00Kc2VjcmV0aXZlL1BZCnNlY3JldGl2ZW5lc3MvTQpzZWNyZXRvcnkKc2VjdC9JTVMKc2VjdGFyaWFuL01TCnNlY3RhcmlhbmlzbS9NCnNlY3RhcnkvU00Kc2VjdGlvbi9BRVNNCnNlY3Rpb25hbC9NUwpzZWN0aW9uYWxpc20vTQpzZWN0aW9uZWQKc2VjdGlvbmluZwpzZWN0b3IvRVNNCnNlY3VsYXIKc2VjdWxhcmlzbS9NCnNlY3VsYXJpc3QvU00Kc2VjdWxhcml6YXRpb24vTQpzZWN1bGFyaXplL0RTRwpzZWN1cmUvRFJTWVRHCnNlY3VyZWQvVQpzZWN1cml0eS9JU00Kc2VjeQpzZWRhbi9NUwpzZWRhdGUvRFJTWVRHTlZQCnNlZGF0ZW5lc3MvTQpzZWRhdGlvbi9NCnNlZGF0aXZlL1NNCnNlZGVudGFyeQpzZWRnZS9NCnNlZGd5CnNlZGltZW50L01TCnNlZGltZW50YXJ5CnNlZGltZW50YXRpb24vTQpzZWRpdGlvbi9NCnNlZGl0aW91cwpzZWR1Y2UvRFJTWkcKc2VkdWNlci9NCnNlZHVjdGlvbi9TTQpzZWR1Y3RpdmUvWVAKc2VkdWN0aXZlbmVzcy9NCnNlZHVjdHJlc3MvTVMKc2VkdWxvdXMvWQpzZWUvUlNNWgpzZWVkJ3MKc2VlZC9BR0RTCnNlZWRiZWQvTVMKc2VlZGNhc2UvTVMKc2VlZGVkL1UKc2VlZGVyL1NNCnNlZWRpbmVzcy9NCnNlZWRsZXNzCnNlZWRsaW5nL01TCnNlZWRwb2QvTVMKc2VlZHkvUlBUCnNlZWluZy9TCnNlZWsvWkdSUwpzZWVrZXIvTQpzZWVtL0dEUwpzZWVtaW5nL1kKc2VlbWxpbmVzcy9VTQpzZWVtbHkvVVJUUApzZWVuL1UKc2VlcC9HRFMKc2VlcGFnZS9NCnNlZXIvTQpzZWVyc3Vja2VyL00Kc2Vlc2F3L1NNREcKc2VldGhlL0RTRwpzZWdmYXVsdC9TCnNlZ21lbnQvR1NNRApzZWdtZW50YXRpb24vTQpzZWdtZW50ZWQvVQpzZWdyZWdhdGUvQ0RTR04Kc2VncmVnYXRlZC9VCnNlZ3JlZ2F0aW9uL0NNCnNlZ3JlZ2F0aW9uaXN0L01TCnNlZ3VlL01HRFMKc2VndWVpbmcKc2VpZ25ldXIvU00Kc2VpZ25pb3IvU00Kc2VpbmUvTVpHRFJTCnNlaW5lci9NCnNlaXNtaWMKc2Vpc21pY2FsbHkKc2Vpc21vZ3JhcGgvWk1SCnNlaXNtb2dyYXBoZXIvTQpzZWlzbW9ncmFwaGljCnNlaXNtb2dyYXBocwpzZWlzbW9ncmFwaHkvTQpzZWlzbW9sb2dpYwpzZWlzbW9sb2dpY2FsCnNlaXNtb2xvZ2lzdC9NUwpzZWlzbW9sb2d5L00Kc2VpemUvR0RTCnNlaXp1cmUvTVMKc2VsZG9tCnNlbGVjdC9DU0dWRApzZWxlY3Rpb24vU00Kc2VsZWN0aXZlL1kKc2VsZWN0aXZpdHkvTQpzZWxlY3RtYW4vTQpzZWxlY3RtZW4Kc2VsZWN0bmVzcy9NCnNlbGVjdG9yL01TCnNlbGVuaXVtL00Kc2VsZW5vZ3JhcGhlci9NUwpzZWxlbm9ncmFwaHkvTQpzZWxmL00Kc2VsZmllL1NNCnNlbGZpc2gvVVlQCnNlbGZpc2huZXNzL1VNCnNlbGZsZXNzL1BZCnNlbGZsZXNzbmVzcy9NCnNlbGZzYW1lCnNlbGwvWkdNUlMKc2VsbGVyL00Kc2VsbG9mZi9NUwpzZWxsb3RhcGUvRFNHCnNlbGxvdXQvTVMKc2VsdHplci9NUwpzZWx2YWdlL01TCnNlbHZlcwpzZW1hbnRpYy9TCnNlbWFudGljYWxseQpzZW1hbnRpY2lzdC9NUwpzZW1hbnRpY3MvTQpzZW1hcGhvcmUvRFNNRwpzZW1ibGFuY2UvQVNNCnNlbWVuL00Kc2VtZXN0ZXIvU00Kc2VtaS9NUwpzZW1pYW5udWFsL1kKc2VtaWFyaWQKc2VtaWF1dG9tYXRpYy9NUwpzZW1pYnJldmUvUwpzZW1pY2lyY2xlL1NNCnNlbWljaXJjdWxhcgpzZW1pY29sb24vTVMKc2VtaWNvbmR1Y3RpbmcKc2VtaWNvbmR1Y3Rvci9NUwpzZW1pY29uc2Npb3VzCnNlbWlkYXJrbmVzcy9NCnNlbWlkZXRhY2hlZApzZW1pZmluYWwvU00Kc2VtaWZpbmFsaXN0L01TCnNlbWlnbG9zcy9TCnNlbWltb250aGx5L1NNCnNlbWluYWwKc2VtaW5hci9NUwpzZW1pbmFyaWFuL1NNCnNlbWluYXJ5L1NNCnNlbWlvZmZpY2lhbApzZW1pb3RpYy9TCnNlbWlvdGljcy9NCnNlbWlwZXJtZWFibGUKc2VtaXByZWNpb3VzCnNlbWlwcml2YXRlCnNlbWlwcm8vUwpzZW1pcHJvZmVzc2lvbmFsL1NNCnNlbWlxdWF2ZXIvUwpzZW1pcmV0aXJlZApzZW1pc2tpbGxlZApzZW1pc29saWQKc2VtaXN3ZWV0CnNlbWl0b25lL1NNCnNlbWl0cmFpbGVyL01TCnNlbWl0cmFuc3BhcmVudApzZW1pdHJvcGljYWwKc2VtaXZvd2VsL1NNCnNlbWl3ZWVrbHkvU00Kc2VtaXllYXJseQpzZW1vbGluYS9NCnNlbXBzdHJlc3MvTVMKc2VuYXRlL1NNCnNlbmF0b3IvTVMKc2VuYXRvcmlhbApzZW5kL1pHUlMKc2VuZGVyL00Kc2VuZG9mZi9NUwpzZW5lc2NlbmNlL00Kc2VuZXNjZW50CnNlbmlsZQpzZW5pbGl0eS9NCnNlbmlvci9TTQpzZW5pb3JpdHkvTQpzZW5uYS9NCnNlbm9yL01TCnNlbm9yYS9TTQpzZW5vcml0YS9TTQpzZW5zYXRpb24vTVMKc2Vuc2F0aW9uYWwvWQpzZW5zYXRpb25hbGlzbS9NCnNlbnNhdGlvbmFsaXN0L01TCnNlbnNhdGlvbmFsaXplL0dEUwpzZW5zZS9NR0RTCnNlbnNlbGVzcy9QWQpzZW5zZWxlc3NuZXNzL00Kc2Vuc2liaWxpdGllcwpzZW5zaWJpbGl0eS9JTQpzZW5zaWJsZS9QCnNlbnNpYmxlbmVzcy9NCnNlbnNpYmx5L0kKc2Vuc2l0aXZlL1NNWVAKc2Vuc2l0aXZlbmVzcy9NCnNlbnNpdGl2aXRpZXMKc2Vuc2l0aXZpdHkvSU0Kc2Vuc2l0aXphdGlvbi9DTQpzZW5zaXRpemUvQ0RTRwpzZW5zb3IvU00Kc2Vuc29yeQpzZW5zdWFsL1kKc2Vuc3VhbGlzdC9TTQpzZW5zdWFsaXR5L00Kc2Vuc3VvdXMvWVAKc2Vuc3VvdXNuZXNzL00Kc2VudC9GQVUKc2VudGVuY2UvTUdEUwpzZW50ZW50aW91cy9ZCnNlbnRpZW5jZS9JTQpzZW50aWVudC9JCnNlbnRpbWVudC9TTQpzZW50aW1lbnRhbC9ZCnNlbnRpbWVudGFsaXNtL00Kc2VudGltZW50YWxpc3QvTVMKc2VudGltZW50YWxpdHkvTQpzZW50aW1lbnRhbGl6YXRpb24vTQpzZW50aW1lbnRhbGl6ZS9HRFMKc2VudGluZWwvTVMKc2VudHJ5L1NNCnNlcGFsL01TCnNlcGFyYWJpbGl0eS9JTQpzZXBhcmFibGUKc2VwYXJhYmx5L0kKc2VwYXJhdGUvWE1ZR05WRFNQCnNlcGFyYXRlbmVzcy9NCnNlcGFyYXRpb24vTQpzZXBhcmF0aXNtL00Kc2VwYXJhdGlzdC9NUwpzZXBhcmF0b3IvTVMKc2VwaWEvTQpzZXBzaXMvTQpzZXB0YQpzZXB0YWwKc2VwdGV0L1NNCnNlcHRpYwpzZXB0aWNlbWlhL00Kc2VwdGljZW1pYwpzZXB0dWFnZW5hcmlhbi9NUwpzZXB0dW0vTQpzZXB1bGNoZXIvR01EUwpzZXB1bGNocmFsCnNlcQpzZXF1ZWwvU00Kc2VxdWVuY2UvTVpHRFJTCnNlcXVlbmNpbmcvTQpzZXF1ZW50aWFsL0ZZCnNlcXVlc3Rlci9TREcKc2VxdWVzdHJhdGUvWEdORFMKc2VxdWVzdHJhdGlvbi9NCnNlcXVpbi9TTUQKc2VxdWlubmVkCnNlcXVpdHVyCnNlcXVvaWEvTVMKc2VyYWdsaW8vTVMKc2VyYXBlL1NNCnNlcmFwaC9NCnNlcmFwaGljCnNlcmFwaHMKc2VyZS9UUgpzZXJlbmFkZS9NR0RTCnNlcmVuZGlwaXRvdXMKc2VyZW5kaXBpdHkvTQpzZXJlbmUvUlBZVApzZXJlbmVuZXNzL00Kc2VyZW5pdHkvTQpzZXJmL01TCnNlcmZkb20vTQpzZXJnZS9NCnNlcmdlYW50L01TCnNlcmlhbC9TTVkKc2VyaWFsaXphdGlvbi9TTQpzZXJpYWxpemUvR0RTCnNlcmllcy9NCnNlcmlmL01TCnNlcmlncmFwaC9NCnNlcmlncmFwaHMKc2VyaW5lCnNlcmlvdXMvUFkKc2VyaW91c25lc3MvTQpzZXJtb24vU00Kc2VybW9uaXplL0dEUwpzZXJvbG9neS9NCnNlcm90b25pbgpzZXJvdXMKc2VycGVudC9NUwpzZXJwZW50aW5lL00Kc2VycmF0ZS9YTkQKc2VycmF0aW9uL00Kc2VycmllZApzZXJ1bS9NUwpzZXJ2YW50L01TCnNlcnZlJ3MvQUYKc2VydmUvRkFDR0RTCnNlcnZlci9TTQpzZXJ2ZXJ5L1MKc2VydmljZS9FTVMKc2VydmljZWFiaWxpdHkvTQpzZXJ2aWNlYWJsZQpzZXJ2aWNlZApzZXJ2aWNlbWFuL00Kc2VydmljZW1lbgpzZXJ2aWNld29tYW4vTQpzZXJ2aWNld29tZW4Kc2VydmljaW5nCnNlcnZpZXR0ZS9NUwpzZXJ2aWxlCnNlcnZpbGl0eS9NCnNlcnZpbmcncwpzZXJ2aW5ncwpzZXJ2aXRvci9NUwpzZXJ2aXR1ZGUvTQpzZXJ2by9NUwpzZXJ2b21lY2hhbmlzbS9TTQpzZXJ2b21vdG9yL01TCnNlc2FtZS9TTQpzZXNxdWljZW50ZW5uaWFsL01TCnNlc3Npb24vTVMKc2V0L0FJU00Kc2V0YmFjay9NUwpzZXRzY3Jldy9TTQpzZXRzcXVhcmUvUwpzZXR0L0JKWkdSUwpzZXR0ZWUvTVMKc2V0dGVyL00Kc2V0dGluZy9NCnNldHRsZSdzCnNldHRsZS9BVUdEUwpzZXR0bGVtZW50L0FNCnNldHRsZW1lbnRzCnNldHRsZXIvU00Kc2V0dXAvTVMKc2V2ZW4vTUhTCnNldmVudGVlbi9TTUgKc2V2ZW50ZWVudGgvTQpzZXZlbnRlZW50aHMKc2V2ZW50aC9NCnNldmVudGhzCnNldmVudGlldGgvTQpzZXZlbnRpZXRocwpzZXZlbnR5L1NNSApzZXZlci9FVEdEUwpzZXZlcmFsL01ZCnNldmVyYW5jZS9TTQpzZXZlcmUvWVBSCnNldmVyZW5lc3MvTQpzZXZlcml0eS9NCnNldy9BU0dECnNld2FnZS9NCnNld2VyL01TCnNld2VyYWdlL00Kc2V3aW5nL00Kc2V3bi9BCnNleC9HTURTCnNleGFnZW5hcmlhbi9TTQpzZXhpbHkKc2V4aW5lc3MvTQpzZXhpc20vTQpzZXhpc3QvTVMKc2V4bGVzcwpzZXhvbG9naXN0L1NNCnNleG9sb2d5L00Kc2V4cG90L01TCnNleHRhbnQvU00Kc2V4dGV0L01TCnNleHRpbmcKc2V4dG9uL01TCnNleHR1cGxldC9TTQpzZXh1YWwvWQpzZXh1YWxpdHkvTQpzZXh5L1BUUgpzZgpzaApzaGFiYmlseQpzaGFiYmluZXNzL00Kc2hhYmJ5L1BUUgpzaGFjay9NRFNHCnNoYWNrbGUncwpzaGFja2xlL1VHRFMKc2hhZC9HTURTSgpzaGFkZS9NUwpzaGFkaWx5CnNoYWRpbmVzcy9NCnNoYWRpbmcvTQpzaGFkb3cvU0dNRApzaGFkb3dib3gvR0RTCnNoYWRvd3kvUlQKc2hhZHkvUlBUCnNoYWZ0L01EU0cKc2hhZy9NUwpzaGFnZ2VkCnNoYWdnaW5lc3MvTQpzaGFnZ2luZwpzaGFnZ3kvVFBSCnNoYWgvTQpzaGFocwpzaGFrZS9NWkdSUwpzaGFrZWRvd24vU00Kc2hha2VuL1UKc2hha2VvdXQvTVMKc2hha2VyL00Kc2hha2V1cC9NUwpzaGFraWx5CnNoYWtpbmVzcy9NCnNoYWt5L1JQVApzaGFsZS9NCnNoYWxsCnNoYWxsb3QvTVMKc2hhbGxvdy9UUE1SWVMKc2hhbGxvd25lc3MvTQpzaGFsb20Kc2hhbHQKc2hhbS9HTURTCnNoYW1hbi9TTQpzaGFtYW5pYwpzaGFtYW5pc20Kc2hhbWFuaXN0aWMKc2hhbWJsZS9NR0RTCnNoYW1ibGVzL00Kc2hhbWJvbGljCnNoYW1lL01TCnNoYW1lZmFjZWQvWQpzaGFtZWZ1bC9QWQpzaGFtZWZ1bG5lc3MvTQpzaGFtZWxlc3MvWVAKc2hhbWVsZXNzbmVzcy9NCnNoYW1tZWQKc2hhbW1pbmcKc2hhbXBvby9aR01EUlMKc2hhbXBvb2VyL00Kc2hhbXJvY2svTVMKc2hhbid0CnNoYW5keS9TCnNoYW5naGFpL0RTRwpzaGFuay9NUwpzaGFudHVuZy9NCnNoYW50eS9TTQpzaGFudHl0b3duL1NNCnNoYXBlJ3MKc2hhcGUvQUdEUwpzaGFwZWQvVQpzaGFwZWxlc3MvWVAKc2hhcGVsZXNzbmVzcy9NCnNoYXBlbGluZXNzL00Kc2hhcGVseS9QVFIKc2hhcmQvTVMKc2hhcmUvTVpHRFJTCnNoYXJlYWJsZQpzaGFyZWNyb3AvUwpzaGFyZWNyb3BwZWQKc2hhcmVjcm9wcGVyL01TCnNoYXJlY3JvcHBpbmcKc2hhcmVob2xkZXIvU00Kc2hhcmVob2xkaW5nL1MKc2hhcmVyL00Kc2hhcmV3YXJlL00Kc2hhcmlhL00Kc2hhcmlhaApzaGFyay9NRFNHCnNoYXJrc2tpbi9NCnNoYXJwL01ETlJZU1BYWlRHCnNoYXJwZW4vQURHUwpzaGFycGVuZXIvTVMKc2hhcnBlci9NCnNoYXJwaWUvTVMKc2hhcnBpc2gKc2hhcnBuZXNzL00Kc2hhcnBzaG9vdGVyL1NNCnNoYXJwc2hvb3RpbmcvTQpzaGF0dGVyL0dNRFMKc2hhdHRlcnByb29mCnNoYXZlL01aR0RSU0oKc2hhdmVuL1UKc2hhdmVyL00Kc2hhdmluZy9NCnNoYXdsL01TCnNoYXkvTVMKc2hlJ2QKc2hlJ2xsCnNoZS9EU00Kc2hlYWYvTQpzaGVhci9NRFJTWkcKc2hlYXJlci9NCnNoZWF0aC9KTQpzaGVhdGhlL1VHRFMKc2hlYXRoaW5nL00Kc2hlYXRocwpzaGVhdmUvRFNNRwpzaGViYW5nL01TCnNoZWJlZW4vUwpzaGVkL01TCnNoZWRkaW5nCnNoZWVuL00Kc2hlZW55L1RSCnNoZWVwL00Kc2hlZXBkb2cvTVMKc2hlZXBmb2xkL1NNCnNoZWVwaGVyZGVyL01TCnNoZWVwaXNoL1lQCnNoZWVwaXNobmVzcy9NCnNoZWVwc2tpbi9NUwpzaGVlci9NRFJTUFRHCnNoZWVybmVzcy9NCnNoZWV0L01TRwpzaGVldGluZy9NCnNoZWV0bGlrZQpzaGVpa2RvbS9NUwpzaGVpa2gvTQpzaGVpa2hzCnNoZWlsYS9TCnNoZWtlbC9TTQpzaGVsZi9NCnNoZWxsL01EUlNHCnNoZWxsYWMvTVMKc2hlbGxhY2tlZApzaGVsbGFja2luZy9NUwpzaGVsbGZpcmUvTQpzaGVsbGZpc2gvTVMKc2hlbHRlci9HTURTCnNoZWx2ZS9HRFMKc2hlbHZpbmcvTQpzaGVuYW5pZ2FuL1NNCnNoZXBoZXJkL1NNREcKc2hlcGhlcmRlc3MvTVMKc2hlcmJldC9TTQpzaGVyaWZmL1NNCnNoZXJyeS9TTQpzaGV3L0dEUwpzaGV3bgpzaGgKc2hpYXRzdS9NCnNoaWJib2xldGgvTQpzaGliYm9sZXRocwpzaGllbGQvTURHUwpzaGlmdC9HTURTCnNoaWZ0aWx5CnNoaWZ0aW5lc3MvTQpzaGlmdGxlc3MvUFkKc2hpZnRsZXNzbmVzcy9NCnNoaWZ0eS9SUFQKc2hpaXRha2UvU00Kc2hpbGwvR01EU0oKc2hpbGxlbGFnaC9NCnNoaWxsZWxhZ2hzCnNoaWxsaW5nL00Kc2hpbS9NUwpzaGltbWVkCnNoaW1tZXIvU01ERwpzaGltbWVyeQpzaGltbWluZwpzaGltbXkvRFNNRwpzaGluL1pHTURSUwpzaGluYm9uZS9TTQpzaGluZGlnL1NNCnNoaW5lL01TCnNoaW5lci9NCnNoaW5nbGUvRFNNRwpzaGluZ3VhcmQvTQpzaGluaW5lc3MvTQpzaGlubmVkCnNoaW5uaW5nCnNoaW5ueS9EU0cKc2hpbnNwbGludHMvTQpzaGlueS9UUlAKc2hpcCdzCnNoaXAvQUxTCnNoaXBib2FyZC9NUwpzaGlwYnVpbGRlci9TTQpzaGlwYnVpbGRpbmcvTQpzaGlwbG9hZC9TTQpzaGlwbWF0ZS9TTQpzaGlwbWVudC9BTQpzaGlwbWVudHMKc2hpcG93bmVyL01TCnNoaXBwZWQvQQpzaGlwcGVyL1NNCnNoaXBwaW5nL00Kc2hpcHNoYXBlCnNoaXB3cmVjay9HTURTCnNoaXB3cmlnaHQvTVMKc2hpcHlhcmQvU00Kc2hpcmUvTVMKc2hpcmsvWkdEUlMKc2hpcmtlci9NCnNoaXJyL0dNRFNKCnNoaXJyaW5nL00Kc2hpcnQvR01EUwpzaGlydGZyb250L1NNCnNoaXJ0aW5nL00Kc2hpcnRsZXNzCnNoaXJ0c2xlZXZlL1NNCnNoaXJ0dGFpbC9TTQpzaGlydHdhaXN0L01TCnNoaXJ0eQpzaGl0L1NNIQpzaGl0ZmFjZWQvIQpzaGl0aGVhZC9TIQpzaGl0bG9hZC8hCnNoaXR0ZWQvIQpzaGl0dGluZy8hCnNoaXR0eS9SVCEKc2hpdi9aTVJTCnNoaXZlci9NREcKc2hpdmVyeQpzaG9hbC9HTURTCnNob2F0L01TCnNob2NrL1pHTURSUwpzaG9ja2VyL00Kc2hvY2tpbmcvWQpzaG9ja3Byb29mCnNob2QvVQpzaG9kZGlseQpzaG9kZGluZXNzL00Kc2hvZGR5L1BSTVQKc2hvZS9NUwpzaG9laG9ybi9HTURTCnNob2VpbmcKc2hvZWxhY2UvTVMKc2hvZW1ha2VyL1NNCnNob2VzaGluZS9TTQpzaG9lc3RyaW5nL1NNCnNob2V0cmVlL01TCnNob2d1bi9NUwpzaG9ndW5hdGUvTQpzaG9uZQpzaG9vL0dEUwpzaG9vawpzaG9vdC9aR01SU0oKc2hvb3Rlci9NCnNob290aW5nL00Kc2hvb3RvdXQvTVMKc2hvcC9NUwpzaG9wYWhvbGljL01TCnNob3BmaXR0ZXIvUwpzaG9wZml0dGluZwpzaG9wZnJvbnQvUwpzaG9wa2VlcGVyL01TCnNob3BsaWZ0L0RSWkdTCnNob3BsaWZ0ZXIvTQpzaG9wbGlmdGluZy9NCnNob3BwZS9NWkdEUlMKc2hvcHBlci9NCnNob3BwaW5nL00Kc2hvcHRhbGsvTQpzaG9wd29ybgpzaG9yZS9NR0RTCnNob3JlYmlyZC9TTQpzaG9yZWxpbmUvTVMKc2hvcmluZy9NCnNob3J0L1hUR01ETlJZU1AKc2hvcnRhZ2UvTVMKc2hvcnRicmVhZC9NCnNob3J0Y2FrZS9NUwpzaG9ydGNoYW5nZS9EU0cKc2hvcnRjb21pbmcvTVMKc2hvcnRjcnVzdApzaG9ydGN1dC9NUwpzaG9ydGVuL0pHRApzaG9ydGVuaW5nL00Kc2hvcnRmYWxsL01TCnNob3J0aGFuZC9NRApzaG9ydGhvcm4vTVMKc2hvcnRpc2gKc2hvcnRsaXN0L0RHUwpzaG9ydG5lc3MvTQpzaG9ydHNpZ2h0ZWQvUFkKc2hvcnRzaWdodGVkbmVzcy9NCnNob3J0c3RvcC9NUwpzaG9ydHdhdmUvTVMKc2hvcnR5L1NNCnNob3QvTVMKc2hvdGd1bi9TTQpzaG90Z3VubmVkCnNob3RndW5uaW5nCnNob3VsZApzaG91bGQndmUKc2hvdWxkZXIvTURHUwpzaG91bGRuJ3QKc2hvdXQvWkdNRFJTCnNob3V0ZXIvTQpzaG92ZS9NR0RTCnNob3ZlbC9NRFNHCnNob3ZlbGZ1bC9TTQpzaG93L0paR01EUlMKc2hvd2Jpei9NCnNob3dib2F0L01ER1MKc2hvd2Nhc2UvTUdEUwpzaG93ZG93bi9NUwpzaG93ZXIvTURHCnNob3dlcnByb29mCnNob3dlcnkKc2hvd2dpcmwvTVMKc2hvd2dyb3VuZC9TCnNob3dpbHkKc2hvd2luZXNzL00Kc2hvd2luZy9NCnNob3dqdW1waW5nCnNob3dtYW4vTQpzaG93bWFuc2hpcC9NCnNob3dtZW4Kc2hvd24Kc2hvd29mZi9TTQpzaG93cGllY2UvU00Kc2hvd3BsYWNlL1NNCnNob3dyb29tL01TCnNob3dzdG9wcGVyL01TCnNob3dzdG9wcGluZwpzaG93dGltZQpzaG93eS9UUlAKc2hwdApzaHJhbmsKc2hyYXBuZWwvTQpzaHJlZC9NUwpzaHJlZGRlZApzaHJlZGRlci9NUwpzaHJlZGRpbmcKc2hyZXcvTVMKc2hyZXdkL1JZUFQKc2hyZXdkbmVzcy9NCnNocmV3aXNoCnNocmllay9NRFNHCnNocmlmdC9NCnNocmlrZS9NUwpzaHJpbGwvRFJTUFRHCnNocmlsbG5lc3MvTQpzaHJpbGx5CnNocmltcC9NRFJTWkcKc2hyaW5lL01TCnNocmluay9NU0JHCnNocmlua2FnZS9NCnNocml2ZS9HRFMKc2hyaXZlbC9TR0QKc2hyaXZlbgpzaHJvdWQvR01EUwpzaHJ1Yi9NUwpzaHJ1YmJlcnkvU00Kc2hydWJieS9SVApzaHJ1Zy9NUwpzaHJ1Z2dlZApzaHJ1Z2dpbmcKc2hydW5rL04Kc2h0aWNrL01TCnNodWNrL0dNRFMKc2h1Y2tzL1MKc2h1ZGRlci9NRFNHCnNodWZmbGUvQU1HRFMKc2h1ZmZsZWJvYXJkL1NNCnNodWZmbGVyL1NNCnNodW4vUwpzaHVubmVkCnNodW5uaW5nCnNodW50L01TREcKc2h1c2gvRFNHCnNodXQvUwpzaHV0ZG93bi9TTQpzaHV0ZXllL00Kc2h1dG9mZi9TTQpzaHV0b3V0L1NNCnNodXR0ZXIvU01ERwpzaHV0dGVyYnVnL01TCnNodXR0aW5nCnNodXR0bGUvRFNNRwpzaHV0dGxlY29jay9HTURTCnNoeS9UR0RSU01ZCnNoeWVyCnNoeWVzdApzaHluZXNzL00Kc2h5c3Rlci9TTQpzaWJpbGFudC9TTQpzaWJsaW5nL1NNCnNpYnlsL01TCnNpYnlsbGluZQpzaWMvUwpzaWNjZWQKc2ljY2luZwpzaWNrL1BYVEdETlJZUwpzaWNrYmF5L1MKc2lja2JlZC9TTQpzaWNrZW4vREcKc2lja2VuaW5nL1kKc2lja2llL01TCnNpY2tpc2gKc2lja2xlL01TCnNpY2tseS9SVApzaWNrbmVzcy9NUwpzaWNrby9NUwpzaWNrb3V0L1NNCnNpY2tyb29tL01TCnNpZGUncwpzaWRlL0FHRFMKc2lkZWFybS9TTQpzaWRlYmFyL1NNCnNpZGVib2FyZC9TTQpzaWRlYnVybnMvTQpzaWRlY2FyL1NNCnNpZGVraWNrL1NNCnNpZGVsaWdodC9NUwpzaWRlbGluZS9EU01HCnNpZGVsb25nCnNpZGVtYW4vTQpzaWRlbWVuCnNpZGVwaWVjZS9NUwpzaWRlcmVhbApzaWRlc2FkZGxlL01TCnNpZGVzaG93L01TCnNpZGVzcGxpdHRpbmcKc2lkZXN0ZXAvTVMKc2lkZXN0ZXBwZWQKc2lkZXN0ZXBwaW5nCnNpZGVzdHJva2UvRFNNRwpzaWRlc3dpcGUvRFNNRwpzaWRldHJhY2svU01ERwpzaWRld2Fsay9NUwpzaWRld2FsbC9NUwpzaWRld2F5cwpzaWRld2luZGVyL1NNCnNpZGluZy9NUwpzaWRsZS9NR0RTCnNpZWdlL01TCnNpZW5uYS9NCnNpZXJyYS9NUwpzaWVzdGEvTVMKc2lldmUvTUdEUwpzaWZ0L1pHRFJTCnNpZnRlZC9VCnNpZnRlci9NCnNpZ2gvR01ECnNpZ2hzCnNpZ2h0L0dNRFlTSgpzaWdodGluZy9NCnNpZ2h0bGVzcwpzaWdodGx5L1VUUgpzaWdodHJlYWQKc2lnaHRzZWVpbmcvTQpzaWdodHNlZXIvTVMKc2lnbWEvTVMKc2lnbidzL0MKc2lnbi9BRkNHRFMKc2lnbmFnZS9NCnNpZ25hbC9NRFJZU1pHCnNpZ25hbGVyL00Kc2lnbmFsaXphdGlvbi9NCnNpZ25hbGl6ZS9HRFMKc2lnbmFsbWFuL00Kc2lnbmFsbWVuCnNpZ25hdG9yeS9TTQpzaWduYXR1cmUvTVMKc2lnbmJvYXJkL01TCnNpZ25lZC9VCnNpZ25lci9DTVMKc2lnbmV0L01TCnNpZ25pZmljYW5jZS9JTQpzaWduaWZpY2FudC9JWQpzaWduaWZpY2F0aW9uL00Kc2lnbmlmeS9YRFNORwpzaWduaW5nJ3MvQwpzaWduaW5ncwpzaWdub3IvRk1TCnNpZ25vcmEvU00Kc2lnbm9yZQpzaWdub3JpCnNpZ25vcmluYS9NUwpzaWdub3JpbmUKc2lnbnBvc3QvR1NNRApzaWxhZ2UvTQpzaWxlbmNlL0RSU01aRwpzaWxlbmNlci9NCnNpbGVudC9NUllTVApzaWxob3VldHRlL0RTTUcKc2lsaWNhL00Kc2lsaWNhdGUvTVMKc2lsaWNlb3VzCnNpbGljb24vU00Kc2lsaWNvbmUvTQpzaWxpY29zaXMvTQpzaWxrL01OUwpzaWxraWx5CnNpbGtpbmVzcy9NCnNpbGtzY3JlZW4vU00Kc2lsa3dvcm0vTVMKc2lsa3kvVFJQCnNpbGwvTVMKc2lsbGluZXNzL00Kc2lsbHkvVFJTTVAKc2lsby9NUwpzaWx0L0dNRFMKc2lsdHkvVFIKc2lsdmVyL0dNRFMKc2lsdmVyZmlzaC9NUwpzaWx2ZXJzbWl0aC9NCnNpbHZlcnNtaXRocwpzaWx2ZXJ3YXJlL00Kc2lsdmVyeQpzaW0vU00Kc2ltaWFuL01TCnNpbWlsYXIvWQpzaW1pbGFyaXR5L0VTTQpzaW1pbGUvTVMKc2ltaWxpdHVkZS9FTQpzaW1tZXIvR01EUwpzaW1vbml6ZS9EU0cKc2ltb255L00Kc2ltcGF0aWNvCnNpbXBlci9HTURTCnNpbXBlcmluZy9ZCnNpbXBsZS9UUlAKc2ltcGxlbWluZGVkCnNpbXBsZW5lc3MvTQpzaW1wbGV0b24vU00Kc2ltcGxleApzaW1wbGljaXR5L00Kc2ltcGxpZmljYXRpb24vTQpzaW1wbGlmeS9EU1hORwpzaW1wbGlzdGljCnNpbXBsaXN0aWNhbGx5CnNpbXBseQpzaW11bGFjcmEKc2ltdWxhY3J1bS9TCnNpbXVsYXRlL0VEU0dOCnNpbXVsYXRpb24vRU0Kc2ltdWxhdGlvbnMKc2ltdWxhdG9yL0VNUwpzaW11bGNhc3QvR01EUwpzaW11bHRhbmVpdHkvTQpzaW11bHRhbmVvdXMvWQpzaW4vQVNNCnNpbmNlCnNpbmNlcmUvSVlUCnNpbmNlcmVyCnNpbmNlcml0eS9JTQpzaW5lL01TCnNpbmVjdXJlL01TCnNpbmV3L01TCnNpbmV3eQpzaW5mdWwvUFkKc2luZnVsbmVzcy9NCnNpbmcvQlpHTURSWVMKc2luZ2Fsb25nL1MKc2luZ2UvTVMKc2luZ2VpbmcKc2luZ2VyL00Kc2luZ2luZy9NCnNpbmdsZS9QTUdEUwpzaW5nbGVuZXNzL00Kc2luZ2xlcy9NCnNpbmdsZXQvUwpzaW5nbGV0b24vU00Kc2luZ2xldHJlZS9TTQpzaW5nc29uZy9TTURHCnNpbmd1bGFyL1NNWQpzaW5ndWxhcml0eS9TTQpzaW5pc3RlcgpzaW5rL0JaR01SUwpzaW5rYWJsZS9VCnNpbmtlci9NCnNpbmtob2xlL1NNCnNpbmxlc3MKc2lubmVkCnNpbm5lci9NUwpzaW5uaW5nCnNpbm9sb2d5CnNpbnVvc2l0eS9NCnNpbnVvdXMvWQpzaW51cy9NUwpzaW51c2l0aXMvTQpzaW51c29pZGFsCnNpcC9TTQpzaXBob24vR01EUwpzaXBwZWQKc2lwcGVyL1NNCnNpcHBpbmcKc2lyL1NYTU4Kc2lyZS9DTUdEUwpzaXJlbi9NCnNpcmxvaW4vU00Kc2lyb2Njby9TTQpzaXJyYWgKc2lycmVlL00Kc2lzL01TCnNpc2FsL00Kc2lzc2lmaWVkCnNpc3N5L1JTTVQKc2lzdGVyL0FTTQpzaXN0ZXJob29kL01TCnNpc3RlcmxpbmVzcy9NCnNpc3Rlcmx5L1AKc2l0L1MKc2l0YXIvU00Kc2l0YXJpc3QvTVMKc2l0Y29tL1NNCnNpdGUvTUdEUwpzaXRlbWFwL1NNCnNpdHRlci9TTQpzaXR0aW5nL1NNCnNpdHVhdGUvRFNYR04Kc2l0dWF0aW9uL00Kc2l0dWF0aW9uYWwKc2l4L01TSApzaXhmb2xkCnNpeHBlbmNlL01TCnNpeHNob290ZXIvTQpzaXh0ZWVuL1NNSApzaXh0ZWVudGgvTQpzaXh0ZWVudGhzCnNpeHRoL00Kc2l4dGhzCnNpeHRpZXRoL00Kc2l4dGlldGhzCnNpeHR5L1NNSApzaXphYmxlCnNpemUncwpzaXplL0FHRFMKc2l6ZXIKc2l6aW5nL00Kc2l6emxlL0RSU01aRwpza2EvTQpza2F0ZS9NWkdEUlMKc2thdGVib2FyZC9NRFJTWkcKc2thdGVib2FyZGVyL00Kc2thdGVib2FyZGluZy9NCnNrYXRlci9NCnNrYXRpbmcvTQpza2VkYWRkbGUvTUdEUwpza2VldC9aTVIKc2tlaW4vTVMKc2tlbGV0YWwKc2tlbGV0b24vU00Kc2tlcHRpYy9TTQpza2VwdGljYWwvWQpza2VwdGljaXNtL00Kc2tldGNoL01EUlNaRwpza2V0Y2hib29rL1MKc2tldGNoZXIvTQpza2V0Y2hpbHkKc2tldGNoaW5lc3MvTQpza2V0Y2hwYWQvUwpza2V0Y2h5L1JUUApza2V3L01EUlpHUwpza2V3YmFsZC9TCnNrZXdlci9NREcKc2tpL1NaR01EUgpza2lib2IvUwpza2lkL01TCnNraWRkZWQKc2tpZGRpbmcKc2tpZHBhbi9TCnNraWVyL00Kc2tpZmYvU00Kc2tpZmZsZQpza2lpbmcvTQpza2lsZnVsbHkKc2tpbGwncwpza2lsbC9DU0QKc2tpbGxlZC9VCnNraWxsZXQvU00Kc2tpbGxmdWwvVVkKc2tpbGxmdWxuZXNzL00Kc2tpbS9NUwpza2ltbWVkCnNraW1tZXIvU00Kc2tpbW1pbmcKc2tpbXAvU0RHCnNraW1waWx5CnNraW1waW5lc3MvTQpza2ltcHkvUlRQCnNraW4vTVMKc2tpbmNhcmUvTQpza2luZmxpbnQvTVMKc2tpbmZ1bApza2luaGVhZC9NUwpza2lubGVzcwpza2lubmVkCnNraW5uaW5lc3MvTQpza2lubmluZwpza2lubnkvUk1UUApza2ludApza2ludGlnaHQKc2tpcC9NUwpza2lwcGVkCnNraXBwZXIvU01ERwpza2lwcGluZwpza2lybWlzaC9aR01EUlMKc2tpcnQvU01ERwpza2l0L01TCnNraXR0ZXIvR1NECnNraXR0aXNoL1lQCnNraXR0aXNobmVzcy9NCnNraXR0bGUvUwpza2l2ZS9EUlNaRwpza2l2dnkvRFNNRwpza29hbC9TTQpza3VhL1MKc2t1bGR1Z2dlcnkvTQpza3Vsay9TRFJaRwpza3Vsa2VyL00Kc2t1bGwvU00Kc2t1bGxjYXAvTVMKc2t1bmsvU01ERwpza3kvR1NNCnNreWNhcC9TTQpza3lkaXZlL0RSU1pHCnNreWRpdmVyL00Kc2t5ZGl2aW5nL00Kc2t5amFjay9KWkdTRFIKc2t5amFja2VyL00Kc2t5amFja2luZy9NCnNreWxhcmsvU0dNRApza3lsaWdodC9NUwpza3lsaW5lL1NNCnNreXJvY2tldC9HU01ECnNreXNjcmFwZXIvU00Kc2t5d2FyZC9TCnNreXdyaXRlci9TTQpza3l3cml0aW5nL00Kc2xhYi9NUwpzbGFiYmVkCnNsYWJiaW5nCnNsYWNrL1BYWlRHTUROUllTCnNsYWNrZW4vREcKc2xhY2tlci9NCnNsYWNrbmVzcy9NCnNsYWNrcy9NCnNsYWcvTVMKc2xhZ2dlZApzbGFnZ2luZwpzbGFnaGVhcC9TCnNsYWluCnNsYWtlL0dEUwpzbGFsb20vTVNERwpzbGFtL01TCnNsYW1tZWQKc2xhbW1lci9TTQpzbGFtbWluZwpzbGFuZGVyL01aR0RSUwpzbGFuZGVyZXIvTQpzbGFuZGVyb3VzCnNsYW5nL00Kc2xhbmd5L1JUCnNsYW50L01TREcKc2xhbnRpbmcvWQpzbGFudHdpc2UKc2xhcC9NUwpzbGFwZGFzaApzbGFwaGFwcHkKc2xhcHBlZApzbGFwcGVyL1MKc2xhcHBpbmcKc2xhcHN0aWNrL00Kc2xhc2gvTURSU1pHCnNsYXNoZXIvTQpzbGF0L01ER1MKc2xhdGUvU00Kc2xhdGhlci9TREcKc2xhdHRlZApzbGF0dGVybi9TTVkKc2xhdWdodGVyL01EUlpHUwpzbGF1Z2h0ZXJlci9NCnNsYXVnaHRlcmhvdXNlL01TCnNsYXZlL0RSU01aRwpzbGF2ZWhvbGRlci9NUwpzbGF2ZXIvTURHCnNsYXZlcnkvTQpzbGF2aXNoL1BZCnNsYXZpc2huZXNzL00Kc2xhdy9NCnNsYXkvRFJaR0pTCnNsYXllci9NCnNsYXlpbmcvTQpzbGVhemUvU00Kc2xlYXplYmFnL1MKc2xlYXplYmFsbC9TCnNsZWF6aWx5CnNsZWF6aW5lc3MvTQpzbGVhenkvUFJUCnNsZWQvTVMKc2xlZGRlZApzbGVkZGVyL1NNCnNsZWRkaW5nCnNsZWRnZS9EU01HCnNsZWRnZWhhbW1lci9HU01ECnNsZWVrL1NEUllUR1AKc2xlZWtuZXNzL00Kc2xlZXAvU01SWkcKc2xlZXBlci9NCnNsZWVwaWx5CnNsZWVwaW5lc3MvTQpzbGVlcGxlc3MvUFkKc2xlZXBsZXNzbmVzcy9NCnNsZWVwb3Zlci9TTQpzbGVlcHdhbGsvWkdTRFIKc2xlZXB3YWxrZXIvTQpzbGVlcHdhbGtpbmcvTQpzbGVlcHdlYXIvTQpzbGVlcHkvUlBUCnNsZWVweWhlYWQvTVMKc2xlZXQvU01ERwpzbGVldHkKc2xlZXZlL0RTTQpzbGVldmVsZXNzCnNsZWlnaC9NREcKc2xlaWdocwpzbGVpZ2h0L1NNCnNsZW5kZXIvUFJUCnNsZW5kZXJpemUvRFNHCnNsZW5kZXJuZXNzL00Kc2xlcHQKc2xldXRoL01HCnNsZXV0aHMKc2xldy9NREdTCnNsaWNlL0RSU01aRwpzbGljZXIvTQpzbGljay9TTURSWVpUR1AKc2xpY2tlci9NCnNsaWNrbmVzcy9NCnNsaWQKc2xpZGUvUlNNWkcKc2xpZGVyL00Kc2xpZGVzaG93L01TCnNsaWdodC9TTURSWVRHUApzbGlnaHRuZXNzL00Kc2xpbS9QUwpzbGltZS9NCnNsaW1pbmVzcy9NCnNsaW1saW5lCnNsaW1tZWQKc2xpbW1lci9TCnNsaW1tZXN0CnNsaW1taW5nL00Kc2xpbW5lc3MvTQpzbGlteS9SVFAKc2xpbmcvU01HCnNsaW5nYmFjay9TCnNsaW5nc2hvdC9TTQpzbGluay9TRwpzbGlua3kvUlQKc2xpcC9NUwpzbGlwY2FzZS9NUwpzbGlwY292ZXIvTVMKc2xpcGtub3QvTVMKc2xpcHBhZ2UvTVMKc2xpcHBlZApzbGlwcGVyL1NNCnNsaXBwZXJpbmVzcy9NCnNsaXBwZXJ5L1BSVApzbGlwcGluZwpzbGlwcHkKc2xpcHNob2QKc2xpcHN0cmVhbS9TTQpzbGlwd2F5L1NNCnNsaXQvTVMKc2xpdGhlci9TR01ECnNsaXRoZXJ5CnNsaXR0ZXIKc2xpdHRpbmcKc2xpdmVyL0dTTUQKc2xvYi9NUwpzbG9iYmVkCnNsb2JiZXIvTURTRwpzbG9iYmVyeQpzbG9iYmluZwpzbG9lL01TCnNsb2cvTVMKc2xvZ2FuL1NNCnNsb2dhbmVlcmluZwpzbG9nZ2VkCnNsb2dnaW5nCnNsb29wL1NNCnNsb3AvTURHUwpzbG9wZS9TTQpzbG9wcGVkCnNsb3BwaWx5CnNsb3BwaW5lc3MvTQpzbG9wcGluZwpzbG9wcHkvUFRSCnNsb3BzL00Kc2xvc2gvRFNHCnNsb3QvTVMKc2xvdGgvTQpzbG90aGZ1bC9ZUApzbG90aGZ1bG5lc3MvTQpzbG90aHMKc2xvdHRlZApzbG90dGluZwpzbG91Y2gvWkdNRFJTCnNsb3VjaGVyL00Kc2xvdWNoeS9UUgpzbG91Z2gvR01ECnNsb3VnaHMKc2xvdmVuL1NNWQpzbG92ZW5saW5lc3MvTQpzbG92ZW5seS9QVFIKc2xvdy9EUllUR1NQCnNsb3djb2FjaC9TCnNsb3dkb3duL1NNCnNsb3duZXNzL00Kc2xvd3Bva2UvU00Kc2x1ZGdlL00Kc2x1ZGd5L1JUCnNsdWUvTUdEUwpzbHVnL01TCnNsdWdnYXJkL01TCnNsdWdnZWQKc2x1Z2dlci9TTQpzbHVnZ2luZwpzbHVnZ2lzaC9QWQpzbHVnZ2lzaG5lc3MvTQpzbHVpY2UvRFNNRwpzbHVtL01TCnNsdW1iZXIvR1NNRApzbHVtYmVyb3VzCnNsdW1kb2cvU00Kc2x1bWxvcmQvTVMKc2x1bW1lZApzbHVtbWVyCnNsdW1taW5nCnNsdW1teS9SVApzbHVtcC9TTURHCnNsdW5nCnNsdW5rCnNsdXIvTVMKc2x1cnAvU01ERwpzbHVycmVkCnNsdXJyaW5nCnNsdXJyeS9NCnNsdXNoL00Kc2x1c2hpbmVzcy9NCnNsdXNoeS9SUFQKc2x1dC9NUwpzbHV0dGlzaApzbHV0dHkvUlQKc2x5L1RSWQpzbHluZXNzL00Kc21hY2svU01EUlpHCnNtYWNrZXIvTQpzbWFsbC9TTVJUUApzbWFsbGhvbGRlci9TCnNtYWxsaG9sZGluZy9TCnNtYWxsaXNoCnNtYWxsbmVzcy9NCnNtYWxscG94L00Kc21hcm15L1JUCnNtYXJ0L1NNRE5SWVhUR1AKc21hcnRlbi9ERwpzbWFydG5lc3MvTQpzbWFydHBob25lL1NNCnNtYXJ0cy9NCnNtYXJ0d2F0Y2gvTVMKc21hcnR5L1NNCnNtYXJ0eXBhbnRzL00Kc21hc2gvTURSU1pHCnNtYXNoZXIvTQpzbWFzaHVwL1NNCnNtYXR0ZXJpbmcvTVMKc21lYXIvU01ERwpzbWVhcnkvUlQKc21lbGwvU01ERwpzbWVsbGluZXNzL00Kc21lbGx5L1JQVApzbWVsdC9TTURSWkcKc21lbHRlci9NCnNtaWRnZW4vTVMKc21pbGF4L00Kc21pbGUvRFNNRwpzbWlsZXkvU00Kc21pbGluZy9ZCnNtaXJjaC9HTURTCnNtaXJrL1NNREcKc21pdGUvU0cKc21pdGgvTQpzbWl0aGVyZWVucy9NCnNtaXRocwpzbWl0aHkvU00Kc21pdHRlbgpzbW9jay9TTURHCnNtb2NraW5nL00Kc21vZy9NUwpzbW9nZ3kvUlQKc21va2UvRFJTTVpHCnNtb2tlaG91c2UvTVMKc21va2VsZXNzCnNtb2tlci9NCnNtb2tlc2NyZWVuL1NNCnNtb2tlc3RhY2svU00Kc21va2V5CnNtb2tpbmVzcy9NCnNtb2tpbmcvTQpzbW9reS9SVFAKc21vbGRlci9TR01ECnNtb29jaC9NRFNHCnNtb29jaHkKc21vb3RoL1BEUllURwpzbW9vdGhpZS9NUwpzbW9vdGhuZXNzL00Kc21vb3RocwpzbW9yZ2FzYm9yZC9TTQpzbW90ZQpzbW90aGVyL0dTTUQKc211ZGdlL0RTTUcKc211ZGd5L1RSCnNtdWcvWVAKc211Z2dlcgpzbXVnZ2VzdApzbXVnZ2xlL1pHRFJTCnNtdWdnbGVyL00Kc211Z2dsaW5nL00Kc211Z25lc3MvTQpzbXVyZi9TCnNtdXQvTVMKc211dHRpbmVzcy9NCnNtdXR0eS9UUlAKc25hY2svU01ERwpzbmFmZmxlL0RTTUcKc25hZnUvU00Kc25hZy9NUwpzbmFnZ2VkCnNuYWdnaW5nCnNuYWlsL1NNREcKc25ha2UvRFNNRwpzbmFrZWJpdGUvTVMKc25ha2VsaWtlCnNuYWtlc2tpbgpzbmFreS9SVApzbmFwJ3MKc25hcC9VUwpzbmFwZHJhZ29uL1NNCnNuYXBwZWQvVQpzbmFwcGVyL01TCnNuYXBwaWx5CnNuYXBwaW5lc3MvTQpzbmFwcGluZy9VCnNuYXBwaXNoL1lQCnNuYXBwaXNobmVzcy9NCnNuYXBweS9UUlAKc25hcHNob3QvU00Kc25hcmUvRFNNRwpzbmFyZi9TREcKc25hcmsvUwpzbmFya3kvVFIKc25hcmwncwpzbmFybC9VU0RHCnNuYXJsaW5nL1kKc25hcmx5L1RSCnNuYXRjaC9aR01EUlMKc25hdGNoZXIvTQpzbmF6emlseQpzbmF6enkvVFIKc25lYWsvU01EUlpHCnNuZWFrZXIvTQpzbmVha2lseQpzbmVha2luZXNzL00Kc25lYWtpbmcvWQpzbmVha3kvVFJQCnNuZWVyL1NKTURHCnNuZWVyaW5nL1kKc25lZXplL0RTTUcKc25pY2svU0RSWkcKc25pY2tlci9NREcKc25pZGUvUllUCnNuaWZmL1NNRFJaRwpzbmlmZmVyL00Kc25pZmZsZS9EU01HCnNuaWZmeS9SVApzbmlmdGVyL1NNCnNuaXAvTURSWkdTCnNuaXBlL1NNCnNuaXBlci9NCnNuaXBwZWQKc25pcHBldC9TTQpzbmlwcGluZwpzbmlwcHkvUlQKc25pcHMvTQpzbml0L01TCnNuaXRjaC9NRFNHCnNuaXZlbC9TTURSWkcKc25pdmVsZXIvTQpzbm9iL01TCnNub2JiZXJ5L00Kc25vYmJpc2gvUFkKc25vYmJpc2huZXNzL00Kc25vYmJ5L1JUCnNub2cvUwpzbm9nZ2VkCnNub2dnaW5nCnNub29kL1NNCnNub29rZXIvTURTRwpzbm9vcC9TTURSWkcKc25vb3Blci9NCnNub29weS9UUgpzbm9vdC9TTQpzbm9vdGlseQpzbm9vdGluZXNzL00Kc25vb3R5L1BUUgpzbm9vemUvRFNNRwpzbm9yZS9EUlNNWkcKc25vcmVyL00Kc25vcmtlbC9aR01EUlMKc25vcmtlbGVyL00Kc25vcmtlbGluZy9NCnNub3J0L1NNRFJaRwpzbm9ydGVyL00Kc25vdC9NUwpzbm90dGlseQpzbm90dGluZXNzL00Kc25vdHR5L1RQUgpzbm91dC9TTQpzbm93L01ER1MKc25vd2JhbGwvR1NNRApzbm93YmFuay9TTQpzbm93YmlyZC9TTQpzbm93Ymxvd2VyL01TCnNub3dib2FyZC9aR01EUlMKc25vd2JvYXJkZXIvTQpzbm93Ym9hcmRpbmcvTQpzbm93Ym91bmQKc25vd2RyaWZ0L1NNCnNub3dkcm9wL1NNCnNub3dmYWxsL1NNCnNub3dmaWVsZC9TTQpzbm93Zmxha2UvU00Kc25vd2luZXNzL00Kc25vd2xpbmUKc25vd21hbi9NCnNub3dtZW4Kc25vd21vYmlsZS9EU01HCnNub3dwbG93L1NHTUQKc25vd3NoZWQKc25vd3Nob2UvU00Kc25vd3Nob2VpbmcKc25vd3N0b3JtL1NNCnNub3dzdWl0L1NNCnNub3d5L1BSVApzbnViL01TCnNudWJiZWQKc251YmJpbmcKc251ZmYvU01EUllaRwpzbnVmZmJveC9NUwpzbnVmZmVyL00Kc251ZmZsZS9NR0RTCnNudWcvTVlTUApzbnVnZ2VkCnNudWdnZXIKc251Z2dlc3QKc251Z2dpbmcKc251Z2dsZS9NR0RTCnNudWduZXNzL00Kc28Kc29hay9NREdTSgpzb2FraW5nL00Kc29hcC9NREdTCnNvYXBib3gvTVMKc29hcGluZXNzL00Kc29hcHN0b25lL00Kc29hcHN1ZHMvTQpzb2FweS9SUFQKc29hci9NREdTCnNvYi9TTQpzb2JiZWQKc29iYmluZy9ZCnNvYmVyL1NEUllQVEcKc29iZXJuZXNzL00Kc29icmlldHkvSU0Kc29icmlxdWV0L1NNCnNvYwpzb2NjZXIvTQpzb2NpYWJpbGl0eS9NCnNvY2lhYmxlL1NNCnNvY2lhYmx5CnNvY2lhbC9TTVkKc29jaWFsaXNtL00Kc29jaWFsaXN0L1NNCnNvY2lhbGlzdGljCnNvY2lhbGl0ZS9TTQpzb2NpYWxpemF0aW9uL00Kc29jaWFsaXplL0RTRwpzb2NpZXRhbApzb2NpZXR5L1NNCnNvY2lvZWNvbm9taWMKc29jaW9lY29ub21pY2FsbHkKc29jaW9sb2dpY2FsL1kKc29jaW9sb2dpc3QvU00Kc29jaW9sb2d5L00Kc29jaW9wYXRoL00Kc29jaW9wYXRocwpzb2Npb3BvbGl0aWNhbApzb2NrL01ER1MKc29ja2V0L1NNCnNvY2tleWUvU00Kc29kL1NNCnNvZGEvTVMKc29kZGVkCnNvZGRlbi9ZCnNvZGRpbmcKc29kaXVtL00Kc29kb21pdGUvTVMKc29kb21pemUvR0RTCnNvZG9teS9NCnNvZXZlcgpzb2ZhL01TCnNvZnQvTlJZWFRQCnNvZnRiYWNrCnNvZnRiYWxsL01TCnNvZnRib3VuZApzb2Z0Y292ZXIKc29mdGVuL0RSWkcKc29mdGVuZXIvTQpzb2Z0aGVhcnRlZApzb2Z0bmVzcy9NCnNvZnR3YXJlL00Kc29mdHdvb2QvU00Kc29mdHkvU00Kc29nZ2lseQpzb2dnaW5lc3MvTQpzb2dneS9SVFAKc29pZ25lCnNvaWduZWUKc29pbC9NREdTCnNvaWxlZC9VCnNvaXJlZS9TTQpzb2pvdXJuL1pHTURSUwpzb2pvdXJuZXIvTQpzb2wvU00Kc29sYWNlL0RTTUcKc29sYXIKc29sYXJpYQpzb2xhcml1bS9NCnNvbGQKc29sZGVyL1pHU01EUgpzb2xkZXJlci9NCnNvbGRpZXIvTURZU0cKc29sZGllcnkvTQpzb2xlL0ZTREdNCnNvbGVjaXNtL1NNCnNvbGVseQpzb2xlbW4vUFRSWQpzb2xlbW5lc3MvTQpzb2xlbW5pZnkvRFNHCnNvbGVtbml0eS9TTQpzb2xlbW5pemF0aW9uL00Kc29sZW1uaXplL0RTRwpzb2xlbW5uZXNzL00Kc29sZW5vaWQvTVMKc29saWNpdC9HRFMKc29saWNpdGF0aW9uL1NNCnNvbGljaXRlZC9VCnNvbGljaXRvci9TTQpzb2xpY2l0b3VzL1BZCnNvbGljaXRvdXNuZXNzL00Kc29saWNpdHVkZS9NCnNvbGlkL1BTTVJZVApzb2xpZGFyaXR5L00Kc29saWRpCnNvbGlkaWZpY2F0aW9uL00Kc29saWRpZnkvRFNORwpzb2xpZGl0eS9NCnNvbGlkbmVzcy9NCnNvbGlkdXMvTQpzb2xpbG9xdWllcwpzb2xpbG9xdWl6ZS9EU0cKc29saWxvcXV5L00Kc29saXBzaXNtL00Kc29saXBzaXN0aWMKc29saXRhaXJlL01TCnNvbGl0YXJpbmVzcy9NCnNvbGl0YXJ5L1NNUApzb2xpdHVkZS9NCnNvbG8vTURHUwpzb2xvaXN0L01TCnNvbHN0aWNlL01TCnNvbHViaWxpdHkvSU0Kc29sdWJsZS9NUwpzb2x1dGUncwpzb2x1dGUvQVhOCnNvbHV0ZXMKc29sdXRpb24ncy9BRQpzb2x2YWJsZS9JVQpzb2x2ZS9FQURTRwpzb2x2ZWQvVQpzb2x2ZW5jeS9JTQpzb2x2ZW50L0lNUwpzb2x2ZXIvU00Kc29tYXRpYwpzb21iZXIvUFkKc29tYmVybmVzcy9NCnNvbWJyZXJvL01TCnNvbWUKc29tZWJvZHkvU00Kc29tZWRheQpzb21laG93CnNvbWVvbmUvTVMKc29tZXBsYWNlCnNvbWVyc2F1bHQvTURHUwpzb21lcnNldC9TTQpzb21lcnNldHRlZApzb21lcnNldHRpbmcKc29tZXRoaW5nL1NNCnNvbWV0aW1lL1MKc29tZXdheS9TCnNvbWV3aGF0L1MKc29tZXdoZXJlCnNvbW5hbWJ1bGlzbS9NCnNvbW5hbWJ1bGlzdC9TTQpzb21ub2xlbmNlL00Kc29tbm9sZW50CnNvbi9TTQpzb25hci9TTQpzb25hdGEvU00Kc29uYXRpbmEvU00Kc29uZy9NUwpzb25nYmlyZC9TTQpzb25nYm9vay9TTQpzb25nZmVzdC9TTQpzb25nc3Rlci9NUwpzb25nc3RyZXNzL01TCnNvbmd3cml0ZXIvU00Kc29uZ3dyaXRpbmcKc29uaWMKc29ubmV0L1NNCnNvbm55L1NNCnNvbm9ncmFtL1NNCnNvbm9yaXR5L00Kc29ub3JvdXMvWVAKc29ub3JvdXNuZXNzL00Kc29uc29mYml0Y2hlcwpzb29uL1JUCnNvb3QvTQpzb290aC9NRFJTWkcKc29vdGhlCnNvb3RoZXIvTQpzb290aGluZy9ZCnNvb3Roc2F5ZXIvTVMKc29vdGhzYXlpbmcvTQpzb290eS9SVApzb3AvU00Kc29waApzb3BoaXNtL00Kc29waGlzdC9NUwpzb3BoaXN0aWMKc29waGlzdGljYWwKc29waGlzdGljYXRlL0RTTUdOCnNvcGhpc3RpY2F0ZWQvVQpzb3BoaXN0aWNhdGlvbi9NCnNvcGhpc3RyeS9TTQpzb3Bob21vcmUvTVMKc29waG9tb3JpYwpzb3BvcmlmaWMvTVMKc29wb3JpZmljYWxseQpzb3BwZWQKc29wcGluZwpzb3BweS9SVApzb3ByYW5vL01TCnNvcmJldC9TTQpzb3JjZXJlci9NUwpzb3JjZXJlc3MvTVMKc29yY2VyeS9NCnNvcmRpZC9QWQpzb3JkaWRuZXNzL00Kc29yZS9NWVRSU1AKc29yZWhlYWQvTVMKc29yZW5lc3MvTQpzb3JnaHVtL00Kc29yb3JpdHkvU00Kc29ycmVsL1NNCnNvcnJpbHkKc29ycmluZXNzL00Kc29ycm93L1NNREcKc29ycm93ZnVsL1lQCnNvcnJvd2Z1bG5lc3MvTQpzb3JyeS9SVFAKc29ydC9GQVNHRE0Kc29ydGEKc29ydGVkL1UKc29ydGVyL1NNCnNvcnRpZS9EU00Kc29ydGllaW5nCnNvdC9TTQpzb3R0aXNoCnNvdSd3ZXN0ZXIKc291L1NNSApzb3VmZmxlL1NNCnNvdWdoL01ERwpzb3VnaHMKc291Z2h0L1UKc291ay9TCnNvdWwvTVMKc291bGZ1bC9ZUApzb3VsZnVsbmVzcy9NCnNvdWxsZXNzL1lQCnNvdWxtYXRlL1NNCnNvdW5kL0pQU01EUllaVEcKc291bmRhbGlrZS9TCnNvdW5kYmFyL1MKc291bmRiaXRlL1MKc291bmRib2FyZC9NUwpzb3VuZGNoZWNrL1MKc291bmRlci9NCnNvdW5kaW5nL00Kc291bmRsZXNzL1kKc291bmRuZXNzL1VNCnNvdW5kcHJvb2YvR0RTCnNvdW5kcHJvb2ZpbmcvTQpzb3VuZHNjYXBlL1MKc291bmR0cmFjay9TTQpzb3VwL01ER1MKc291cGNvbi9NUwpzb3VweS9SVApzb3VyL01EUllUR1NQCnNvdXJjZS9BRFNNRwpzb3VyZG91Z2gvTQpzb3VyZG91Z2hzCnNvdXJpc2gKc291cm5lc3MvTQpzb3VycHVzcy9NUwpzb3VzYXBob25lL01TCnNvdXNlL0RTTUcKc291dGgvTQpzb3V0aGJvdW5kCnNvdXRoZWFzdC9aTVIKc291dGhlYXN0ZXIvTVkKc291dGhlYXN0ZXJuCnNvdXRoZWFzdHdhcmQvUwpzb3V0aGVybHkvU00Kc291dGhlcm4vU1pNUgpzb3V0aGVybmVyL00Kc291dGhlcm5tb3N0CnNvdXRocGF3L1NNCnNvdXRod2FyZC9NUwpzb3V0aHdlc3QvWk1SCnNvdXRod2VzdGVyL01ZCnNvdXRod2VzdGVybgpzb3V0aHdlc3R3YXJkL1MKc291dmVuaXIvU00Kc292ZXJlaWduL1NNCnNvdmVyZWlnbnR5L00Kc292aWV0L1NNCnNvdydzCnNvdy9BU0dECnNvd2VyL1NNCnNvd24vQQpzb3kvTQpzb3liZWFuL01TCnNvenpsZWQKc3BhL1NNCnNwYWNlL0RSU01aRwpzcGFjZWNyYWZ0L01TCnNwYWNlZmxpZ2h0L01TCnNwYWNlbWFuL00Kc3BhY2VtZW4Kc3BhY2Vwb3J0L1NNCnNwYWNlci9NCnNwYWNlc2hpcC9TTQpzcGFjZXN1aXQvU00Kc3BhY2V3YWxrL1NHTUQKc3BhY2V3b21hbi9NCnNwYWNld29tZW4Kc3BhY2V5CnNwYWNpYWwKc3BhY2llcgpzcGFjaWVzdApzcGFjaW5lc3MvTQpzcGFjaW5nL00Kc3BhY2lvdXMvWVAKc3BhY2lvdXNuZXNzL00Kc3BhZGUvRFNNRwpzcGFkZWZ1bC9NUwpzcGFkZXdvcmsvTQpzcGFkaWNlcwpzcGFkaXgvTQpzcGFnaGV0dGkvTQpzcGFrZQpzcGFtL01TCnNwYW1tZWQKc3BhbW1lci9TTQpzcGFtbWluZwpzcGFuL01TCnNwYW5kZXgvTQpzcGFuZ2xlL0RTTUcKc3BhbmdseQpzcGFuaWVsL1NNCnNwYW5rL1NNREdKCnNwYW5raW5nL00Kc3Bhbm5lZApzcGFubmVyL1NNCnNwYW5uaW5nCnNwYXIvTVMKc3BhcmUvRFJTTVlUR1AKc3BhcmVuZXNzL00Kc3BhcmVyaWJzL00Kc3BhcmluZy9VWQpzcGFyay9TTURZRwpzcGFya2xlL0RSU01aRwpzcGFya2xlci9NCnNwYXJreS9SVApzcGFycmVkCnNwYXJyaW5nCnNwYXJyb3cvU00Kc3BhcnJvd2hhd2svUwpzcGFyc2UvUllUUApzcGFyc2VuZXNzL00Kc3BhcnNpdHkvTQpzcGFydGFuCnNwYXNtL1NNCnNwYXNtb2RpYwpzcGFzbW9kaWNhbGx5CnNwYXN0aWMvU00Kc3BhdC9NUwpzcGF0ZS9TTQpzcGF0aGUvU00Kc3BhdGlhbC9ZCnNwYXR0ZWQKc3BhdHRlci9TR01ECnNwYXR0aW5nCnNwYXR1bGEvU00Kc3BhdmluL01ECnNwYXduL1NNREcKc3BheS9ER1MKc3BlYWsvU1JaR0oKc3BlYWtlYXN5L1NNCnNwZWFrZXIvTQpzcGVha2VycGhvbmUvUwpzcGVhci9TTURHCnNwZWFyZmlzaC9HTURTCnNwZWFyZ3VuCnNwZWFyaGVhZC9HTURTCnNwZWFybWludC9NCnNwZWMvTVMKc3BlY2lhbC9TTVkKc3BlY2lhbGlzbS9TCnNwZWNpYWxpc3QvTVMKc3BlY2lhbGl6YXRpb24vTVMKc3BlY2lhbGl6ZS9HRFMKc3BlY2lhbHR5L1NNCnNwZWNpZS9TTQpzcGVjaWVzL00Kc3BlY2lmCnNwZWNpZmlhYmxlCnNwZWNpZmljL01TCnNwZWNpZmljYWxseQpzcGVjaWZpY2F0aW9uL00Kc3BlY2lmaWNpdHkvTQpzcGVjaWZpZWQvVQpzcGVjaWZ5L1hOWkRSU0cKc3BlY2ltZW4vU00Kc3BlY2lvdXMvWVAKc3BlY2lvdXNuZXNzL00Kc3BlY2svU01ERwpzcGVja2xlL01HRFMKc3BlY3MvTQpzcGVjdGFjbGUvU00Kc3BlY3RhY2xlcy9NCnNwZWN0YWN1bGFyL01ZUwpzcGVjdGF0ZS9EU0cKc3BlY3RhdG9yL1NNCnNwZWN0ZXIvQU1TCnNwZWN0cmEKc3BlY3RyYWwKc3BlY3Ryb21ldGVyL01TCnNwZWN0cm9zY29wZS9NUwpzcGVjdHJvc2NvcGljCnNwZWN0cm9zY29weS9NCnNwZWN0cnVtL00Kc3BlY3VsYXRlL0RTWEdOVgpzcGVjdWxhdGlvbi9NCnNwZWN1bGF0aXZlL1kKc3BlY3VsYXRvci9NUwpzcGVkCnNwZWVjaC9NUwpzcGVlY2hpZnkvRFNHCnNwZWVjaGxlc3MvWVAKc3BlZWNobGVzc25lc3MvTQpzcGVlY2h3cml0ZXIvUwpzcGVlZC9TTVJaRwpzcGVlZGJvYXQvU00Kc3BlZWRlci9NCnNwZWVkaWx5CnNwZWVkaW5lc3MvTQpzcGVlZGluZy9NCnNwZWVkb21ldGVyL01TCnNwZWVkc3Rlci9TTQpzcGVlZHVwL01TCnNwZWVkd2F5L1NNCnNwZWVkd2VsbC9NCnNwZWVkeS9UUFIKc3BlbGVvbG9naWNhbApzcGVsZW9sb2dpc3QvTVMKc3BlbGVvbG9neS9NCnNwZWxsL0pTTURSWkcKc3BlbGxiaW5kL1pHUlMKc3BlbGxiaW5kZXIvTQpzcGVsbGJvdW5kCnNwZWxsY2hlY2svTURSWkdTCnNwZWxsY2hlY2tlci9NCnNwZWxsZG93bi9TTQpzcGVsbGVyL00Kc3BlbGxpbmcvTQpzcGVsdW5rZXIvTVMKc3BlbHVua2luZy9NCnNwZW5kL0JTUlpHCnNwZW5kZXIvTQpzcGVuZGluZy9NCnNwZW5kdGhyaWZ0L01TCnNwZW50L1UKc3Blcm0vU00Kc3Blcm1hdG96b2EKc3Blcm1hdG96b29uL00Kc3Blcm1pY2lkYWwKc3Blcm1pY2lkZS9NUwpzcGV3L01EUlpHUwpzcGV3ZXIvTQpzcGhhZ251bS9NUwpzcGhlcmUvU00Kc3BoZXJpY2FsL1kKc3BoZXJvaWQvU00Kc3BoZXJvaWRhbApzcGhpbmN0ZXIvTVMKc3BoaW54L01TCnNwaWMvUwpzcGljZS9EU01HCnNwaWNpbHkKc3BpY2luZXNzL00Kc3BpY3VsZS9NUwpzcGljeS9QUlQKc3BpZGVyL1NNCnNwaWRlcndlYi9NUwpzcGlkZXJ5CnNwaWVsL1NNREcKc3BpZmYvU0RHCnNwaWZmeS9UUgpzcGlnb3QvU00Kc3Bpa2UvRFNNRwpzcGlraW5lc3MvTQpzcGlreS9SUFQKc3BpbGwvU01ERwpzcGlsbGFnZS9NUwpzcGlsbG92ZXIvU00Kc3BpbGx3YXkvTVMKc3Bpbi9NUwpzcGluYWNoL00Kc3BpbmFsL1NNWQpzcGluZGxlL01HRFMKc3BpbmRseS9UUgpzcGluZS9TTQpzcGluZWxlc3MvWVAKc3BpbmV0L1NNCnNwaW5uYWtlci9TTQpzcGlubmVyL01TCnNwaW5uZXJldC9TTQpzcGlubmV5L1MKc3Bpbm5pbmcvTQpzcGluc3Rlci9TTQpzcGluc3Rlcmhvb2QvTQpzcGluc3RlcmlzaApzcGlueS9SVApzcGlyYWNsZS9TTQpzcGlyYWwvU0dNRFkKc3BpcmUncwpzcGlyZS9JRkFTCnNwaXJlYS9TTQpzcGlyaXQncwpzcGlyaXQvSVNHRApzcGlyaXRlZC9ZCnNwaXJpdGxlc3MKc3Bpcml0dWFsL01ZUwpzcGlyaXR1YWxpc20vTQpzcGlyaXR1YWxpc3QvTVMKc3Bpcml0dWFsaXN0aWMKc3Bpcml0dWFsaXR5L00Kc3Bpcml0dW91cwpzcGlyb2NoZXRlL1NNCnNwaXJ5CnNwaXQvTURHUwpzcGl0YmFsbC9TTQpzcGl0ZS9BU00Kc3BpdGVmdWwvUFkKc3BpdGVmdWxsZXIKc3BpdGVmdWxsZXN0CnNwaXRlZnVsbmVzcy9NCnNwaXRmaXJlL1NNCnNwaXR0ZWQKc3BpdHRpbmcKc3BpdHRsZS9NCnNwaXR0b29uL01TCnNwaXYvUwpzcGxhc2gvR01EUwpzcGxhc2hkb3duL01TCnNwbGFzaGlseQpzcGxhc2hpbmVzcy9NCnNwbGFzaHkvUlRQCnNwbGF0L1NNCnNwbGF0dGVkCnNwbGF0dGVyL0dTTUQKc3BsYXR0aW5nCnNwbGF5L1NNREcKc3BsYXlmZWV0CnNwbGF5Zm9vdC9NRApzcGxlZW4vU00Kc3BsZW5kaWQvUllUCnNwbGVuZG9yL01TCnNwbGVuZG9yb3VzCnNwbGVuZWN0b215CnNwbGVuZXRpYwpzcGxpY2UvRFJTTVpHCnNwbGljZXIvTQpzcGxpZmYvUwpzcGxpbmUvUwpzcGxpbnQvU1pHTURSCnNwbGludGVyL01ERwpzcGxpbnRlcnkKc3BsaXQvU00Kc3BsaXR0aW5nL01TCnNwbG9kZ2UvUwpzcGxvc2gvRFNHCnNwbG90Y2gvTURTRwpzcGxvdGNoeS9UUgpzcGx1cmdlL0RTTUcKc3BsdXR0ZXIvR01EUwpzcG9pbCdzCnNwb2lsL0NTRFJaRwpzcG9pbGFnZS9NCnNwb2lsZWQvVQpzcG9pbGVyL0NNCnNwb2lsc3BvcnQvTVMKc3Bva2UvU00Kc3Bva2VuL1UKc3Bva2VzbWFuL00Kc3Bva2VzbWVuCnNwb2tlc3Blb3BsZQpzcG9rZXNwZXJzb24vTVMKc3Bva2Vzd29tYW4vTQpzcG9rZXN3b21lbgpzcG9saWF0aW9uL0NNCnNwb25nZS9EUlNNWkcKc3BvbmdlY2FrZS9NCnNwb25nZXIvTQpzcG9uZ2luZXNzL00Kc3Bvbmd5L1JQVApzcG9uc29yL01ER1MKc3BvbnNvcnNoaXAvTQpzcG9udGFuZWl0eS9NCnNwb250YW5lb3VzL1kKc3Bvb2YvU01ERwpzcG9vay9TTURHCnNwb29raW5lc3MvTQpzcG9va3kvUlBUCnNwb29sL1NNREcKc3Bvb24vU01ERwpzcG9vbmJpbGwvTVMKc3Bvb25lcmlzbS9NUwpzcG9vbmZ1bC9TTQpzcG9vci9TTURHCnNwb3JhZGljCnNwb3JhZGljYWxseQpzcG9yZS9EU01HCnNwb3JyYW4vUwpzcG9ydC9TTURHVgpzcG9ydGluZXNzL00Kc3BvcnRpbmcvWQpzcG9ydGl2ZS9ZCnNwb3J0c2Nhc3QvTVJaR1MKc3BvcnRzY2FzdGVyL00Kc3BvcnRzbWFuL00Kc3BvcnRzbWFubGlrZS9VCnNwb3J0c21hbnNoaXAvTQpzcG9ydHNtZW4Kc3BvcnRzcGVvcGxlCnNwb3J0c3BlcnNvbgpzcG9ydHN3ZWFyL00Kc3BvcnRzd29tYW4vTQpzcG9ydHN3b21lbgpzcG9ydHN3cml0ZXIvU00Kc3BvcnR5L1RQUgpzcG90L0NNUwpzcG90bGVzcy9QWQpzcG90bGVzc25lc3MvTQpzcG90bGlnaHQvR1NNRApzcG90bGl0CnNwb3R0ZWQKc3BvdHRlci9NUwpzcG90dGlseQpzcG90dGluZXNzL00Kc3BvdHRpbmcKc3BvdHR5L1RQUgpzcG91c2FsL01TCnNwb3VzZS9TTQpzcG91dC9TTURHCnNwcmFpbi9HU01ECnNwcmFuZwpzcHJhdC9TTQpzcHJhd2wvR1NNRApzcHJheSdzCnNwcmF5L0FTREcKc3ByYXllci9NUwpzcHJlYWQvWkdCU01SCnNwcmVhZGVhZ2xlZApzcHJlYWRlci9NCnNwcmVhZHNoZWV0L01TCnNwcmVlL0RTTQpzcHJlZWluZwpzcHJpZy9TTQpzcHJpZ2dlZApzcHJpZ2h0bGluZXNzL00Kc3ByaWdodGx5L1JUUApzcHJpbmcvR1NNCnNwcmluZ2JvYXJkL01TCnNwcmluZ2Jvay9NUwpzcHJpbmdpbHkKc3ByaW5naW5lc3MvTQpzcHJpbmdsaWtlCnNwcmluZ3RpbWUvTQpzcHJpbmd5L1JQVApzcHJpbmtsZS9EUlNKTVpHCnNwcmlua2xlci9NCnNwcmlua2xpbmcvTQpzcHJpbnQvWkdTTURSCnNwcmludGVyL00Kc3ByaXRlL1NNCnNwcml0ei9aR01EUlMKc3ByaXR6ZXIvTQpzcHJvY2tldC9NUwpzcHJvZy9TCnNwcm91dC9HU01ECnNwcnVjZS9EUlNQTVlURwpzcHJ1Y2VuZXNzL00Kc3BydW5nCnNwcnkvUllUCnNwcnluZXNzL00Kc3B1ZC9NUwpzcHVtZS9EU01HCnNwdW1vbmkvTQpzcHVteQpzcHVuCnNwdW5rL1NNCnNwdW5reS9UUgpzcHVyL01TCnNwdXJnZS9NCnNwdXJpb3VzL1BZCnNwdXJpb3VzbmVzcy9NCnNwdXJuL1NERwpzcHVycmVkCnNwdXJyaW5nCnNwdXJ0L1NNREcKc3B1dGEKc3B1dG5pay9NUwpzcHV0dGVyL01ER1MKc3B1dHVtL00Kc3B5L0dEU00Kc3B5Z2xhc3MvTVMKc3B5bWFzdGVyL1MKc3B5d2FyZS9NCnNxCnNxcQpzcXVhYi9TTQpzcXVhYmJsZS9NWkdEUlMKc3F1YWJibGVyL00Kc3F1YWQvU00Kc3F1YWRyb24vTVMKc3F1YWxpZC9QVFJZCnNxdWFsaWRuZXNzL00Kc3F1YWxsL1NHTUQKc3F1YWxseQpzcXVhbG9yL00Kc3F1YW1vdXMKc3F1YW5kZXIvR0RTCnNxdWFyZS9QRFJTTVlURwpzcXVhcmVuZXNzL00Kc3F1YXJpc2gKc3F1YXNoL0dNRFMKc3F1YXNoeS9UUgpzcXVhdC9TTVAKc3F1YXRuZXNzL00Kc3F1YXR0ZWQKc3F1YXR0ZXIvTVMKc3F1YXR0ZXN0CnNxdWF0dGluZwpzcXVhdy9TTQpzcXVhd2svU1pHTURSCnNxdWF3a2VyL00Kc3F1ZWFrL1NaR01EUgpzcXVlYWtlci9NCnNxdWVha2lseQpzcXVlYWtpbmVzcy9NCnNxdWVha3kvVFJQCnNxdWVhbC9TWkdNRFIKc3F1ZWFsZXIvTQpzcXVlYW1pc2gvUFkKc3F1ZWFtaXNobmVzcy9NCnNxdWVlZ2VlL01EUwpzcXVlZWdlZWluZwpzcXVlZXplL0JNWkdEUlMKc3F1ZWV6ZWJveC9TCnNxdWVlemVyL00Kc3F1ZWxjaC9HTURTCnNxdWVsY2h5CnNxdWliL1NNCnNxdWlkL1NNCnNxdWlkZ3kKc3F1aWZmeQpzcXVpZ2dsZS9EU01HCnNxdWlnZ2x5CnNxdWludC9TVEdNRFIKc3F1aXJlL0RTTUcKc3F1aXJtL1NHTUQKc3F1aXJteS9SVApzcXVpcnJlbC9TR01ECnNxdWlydC9TR01ECnNxdWlzaC9HTURTCnNxdWlzaHkvUlQKc3JpcmFjaGEKc3NoCnN0CnN0YWIvTVlTCnN0YWJiZWQKc3RhYmJlci9NUwpzdGFiYmluZy9NUwpzdGFiaWxpdHkvSU0Kc3RhYmlsaXphdGlvbi9DTQpzdGFiaWxpemUvQ0RTRwpzdGFiaWxpemVyL01TCnN0YWJsZS9EUlNNVEcKc3RhYmxlbWFuL00Kc3RhYmxlbWF0ZS9TCnN0YWJsZW1lbgpzdGFibHkvVQpzdGFjY2F0by9NUwpzdGFjay9TTURHCnN0YWRpdW0vTVMKc3RhZmYncwpzdGFmZi9BU0RHCnN0YWZmZXIvTVMKc3RhZmZpbmcvTQpzdGFnL01ER1NKCnN0YWdlL1NNCnN0YWdlY29hY2gvTVMKc3RhZ2VjcmFmdC9NCnN0YWdlaGFuZC9NUwpzdGFnZXN0cnVjawpzdGFnZmxhdGlvbi9NCnN0YWdnZXIvTURHUwpzdGFnZ2VyaW5nL1kKc3RhZ2luZy9NCnN0YWduYW5jeS9NCnN0YWduYW50L1kKc3RhZ25hdGUvRFNHTgpzdGFnbmF0aW9uL00Kc3RhZ3kvUlQKc3RhaWQvUFJZVApzdGFpZG5lc3MvTQpzdGFpbi9TTURHCnN0YWluZWQvVQpzdGFpbmxlc3MvTQpzdGFpci9TTQpzdGFpcmNhc2UvTVMKc3RhaXJ3YXkvTVMKc3RhaXJ3ZWxsL1NNCnN0YWtlL0RTTUcKc3Rha2Vob2xkZXIvTVMKc3Rha2VvdXQvU00Kc3RhbGFjdGl0ZS9NUwpzdGFsYWdtaXRlL01TCnN0YWxlL0RSU1RHUApzdGFsZW1hdGUvRFNNRwpzdGFsZW5lc3MvTQpzdGFsay9TTURSSlpHCnN0YWxrZXIvTQpzdGFsa2luZy9NCnN0YWxsJ3MKc3RhbGwvSVNERwpzdGFsbGhvbGRlci9TCnN0YWxsaW9uL01TCnN0YWx3YXJ0L01ZUwpzdGFtZW4vU00Kc3RhbWluYS9NCnN0YW1tZXIvWkdNRFJTCnN0YW1tZXJlci9NCnN0YW1tZXJpbmcvWQpzdGFtcC9TTURSWkcKc3RhbXBlZGUvTUdEUwpzdGFtcGVyL00Kc3RhbmNlL0lTTQpzdGFuY2gvVEdEUlMKc3RhbmNoaW9uL1NNCnN0YW5kL1NNUkpaRwpzdGFuZGFsb25lCnN0YW5kYXJkL01TCnN0YW5kYXJkaXphdGlvbi9NCnN0YW5kYXJkaXplL0RTRwpzdGFuZGJ5L00Kc3RhbmRieXMKc3RhbmRlZS9NUwpzdGFuZGVyL00Kc3RhbmRpbmcvTQpzdGFuZG9mZi9NUwpzdGFuZG9mZmlzaApzdGFuZG91dC9NUwpzdGFuZHBpcGUvU00Kc3RhbmRwb2ludC9NUwpzdGFuZHN0aWxsL01TCnN0YW5rCnN0YW56YS9TTQpzdGFwaC9NCnN0YXBoeWxvY29jY2FsCnN0YXBoeWxvY29jY2kKc3RhcGh5bG9jb2NjdXMvTQpzdGFwbGUvRFJTTVpHCnN0YXBsZXIvTQpzdGFyL01EUlpHUwpzdGFyYm9hcmQvTQpzdGFyYnVyc3QvUwpzdGFyY2gvR01EUwpzdGFyY2hpbHkKc3RhcmNoaW5lc3MvTQpzdGFyY2h5L1BUUgpzdGFyZG9tL00Kc3RhcmR1c3QvTQpzdGFyZS9TTQpzdGFyZXIvTQpzdGFyZmlzaC9NUwpzdGFyZnJ1aXQKc3RhcmdhemUvRFJTWkcKc3RhcmdhemVyL00Kc3RhcmsvUllQWlQKc3RhcmtuZXNzL00Kc3Rhcmxlc3MKc3RhcmxldC9NUwpzdGFybGlnaHQvTQpzdGFybGluZy9TTQpzdGFybGl0CnN0YXJyZWQKc3RhcnJpbmcKc3RhcnJ5L1RSCnN0YXJzdHJ1Y2sKc3RhcnQvQVNNREcKc3RhcnRlci9NUwpzdGFydGxlL0dEUwpzdGFydGxpbmcvWQpzdGFydHVwL01TCnN0YXJ2YXRpb24vTQpzdGFydmUvRFNKRwpzdGFydmVsaW5nL01TCnN0YXNoL01EU0cKc3Rhc2lzCnN0YXQvTVMKc3RhdGUvRFJTTVlHTkxYCnN0YXRlY3JhZnQvTQpzdGF0ZWQvVQpzdGF0ZWhvb2QvTQpzdGF0ZWhvdXNlL01TCnN0YXRlbGVzcy9QCnN0YXRlbGVzc25lc3MvTQpzdGF0ZWxpbmVzcy9NCnN0YXRlbHkvUFJUCnN0YXRlbWVudC9BTVMKc3RhdGVtZW50ZWQKc3RhdGVtZW50aW5nCnN0YXRlcm9vbS9NUwpzdGF0ZXNpZGUKc3RhdGVzbWFuL00Kc3RhdGVzbWFubGlrZQpzdGF0ZXNtYW5zaGlwL00Kc3RhdGVzbWVuCnN0YXRlc3dvbWFuL00Kc3RhdGVzd29tZW4Kc3RhdGV3aWRlCnN0YXRpYy9TTQpzdGF0aWNhbGx5CnN0YXRpb24vTURSWkcKc3RhdGlvbmFyeQpzdGF0aW9uZXIvTQpzdGF0aW9uZXJ5L00Kc3RhdGlvbm1hc3Rlci9TCnN0YXRpc3RpYy9NUwpzdGF0aXN0aWNhbC9ZCnN0YXRpc3RpY2lhbi9TTQpzdGF0dWFyeS9NCnN0YXR1ZS9TTQpzdGF0dWVzcXVlCnN0YXR1ZXR0ZS9NUwpzdGF0dXJlL01TCnN0YXR1cy9NUwpzdGF0dXRlL01TCnN0YXR1dG9yaWx5CnN0YXR1dG9yeQpzdGF1bmNoL1BEUlNZVEcKc3RhdW5jaG5lc3MvTQpzdGF2ZS9EU01HCnN0YXkvTURSWkdTCnN0ZApzdGRpbwpzdGVhZC9TTQpzdGVhZGZhc3QvWVAKc3RlYWRmYXN0bmVzcy9NCnN0ZWFkaWx5L1UKc3RlYWRpbmVzcy9VTQpzdGVhZHkvVEdQRFJTTQpzdGVhay9TTQpzdGVha2hvdXNlL1NNCnN0ZWFsL1NNSEcKc3RlYWx0aC9NCnN0ZWFsdGhpbHkKc3RlYWx0aGluZXNzL00Kc3RlYWx0aHkvVFBSCnN0ZWFtL1NNRFJaRwpzdGVhbWJvYXQvTVMKc3RlYW1lci9NCnN0ZWFtZml0dGVyL1NNCnN0ZWFtZml0dGluZy9NCnN0ZWFtaW5lc3MvTQpzdGVhbXB1bmsKc3RlYW1yb2xsL1pHRFJTCnN0ZWFtcm9sbGVyL01ERwpzdGVhbXNoaXAvTVMKc3RlYW15L1RQUgpzdGVlZC9TTQpzdGVlbC9TTURHCnN0ZWVsaW5lc3MvTQpzdGVlbG1ha2VyL1MKc3RlZWx3b3JrZXIvU00Kc3RlZWx3b3Jrcy9NCnN0ZWVseS9QVFIKc3RlZWx5YXJkL1NNCnN0ZWVwL1NNRE5SWVBYVEcKc3RlZXBlbi9HRApzdGVlcGxlL01TCnN0ZWVwbGVjaGFzZS9NUwpzdGVlcGxlamFjay9TTQpzdGVlcG5lc3MvTQpzdGVlci9TTURCRwpzdGVlcmFnZS9NCnN0ZWVyaW5nL00Kc3RlZXJzbWFuL00Kc3RlZXJzbWVuCnN0ZWdvc2F1cmkKc3RlZ29zYXVydXMvTVMKc3RlaW4vU00Kc3RlbGxhcgpzdGVtL01TCnN0ZW1sZXNzCnN0ZW1tZWQKc3RlbW1pbmcKc3RlbXdhcmUvTQpzdGVuY2gvTVMKc3RlbmNpbC9HTURTCnN0ZW5vL1NNCnN0ZW5vZ3JhcGhlci9TTQpzdGVub2dyYXBoaWMKc3Rlbm9ncmFwaHkvTQpzdGVub3NpcwpzdGVudC9TTQpzdGVudG9yaWFuCnN0ZXAvSU1TCnN0ZXBicm90aGVyL1NNCnN0ZXBjaGlsZC9NCnN0ZXBjaGlsZHJlbi9NCnN0ZXBkYWQvTVMKc3RlcGRhdWdodGVyL1NNCnN0ZXBmYXRoZXIvU00Kc3RlcGxhZGRlci9NUwpzdGVwbW9tL01TCnN0ZXBtb3RoZXIvU00Kc3RlcHBhcmVudC9TTQpzdGVwcGUvRFJTTVpHCnN0ZXBwZXIvTQpzdGVwcGluZ3N0b25lL1NNCnN0ZXBzaXN0ZXIvTVMKc3RlcHNvbi9NUwpzdGVyZW8vU00Kc3RlcmVvcGhvbmljCnN0ZXJlb3Njb3BlL01TCnN0ZXJlb3Njb3BpYwpzdGVyZW90eXBlL0RTTUcKc3RlcmVvdHlwaWNhbApzdGVyaWxlCnN0ZXJpbGl0eS9NCnN0ZXJpbGl6YXRpb24vU00Kc3RlcmlsaXplL0RSU1pHCnN0ZXJpbGl6ZXIvTQpzdGVybGluZy9NCnN0ZXJuL1NNUllQVApzdGVybm5lc3MvTQpzdGVybnVtL01TCnN0ZXJvaWQvTVMKc3Rlcm9pZGFsCnN0ZXJ0b3JvdXMKc3RldC9TCnN0ZXRob3Njb3BlL01TCnN0ZXRzb24vTVMKc3RldHRlZApzdGV0dGluZwpzdGV2ZWRvcmUvU00Kc3Rldy9NREdTCnN0ZXdhcmQvR01EUwpzdGV3YXJkZXNzL01TCnN0ZXdhcmRzaGlwL00Kc3RpY2svU01SWkcKc3RpY2tlci9NCnN0aWNraWx5CnN0aWNraW5lc3MvTQpzdGlja2xlYmFjay9TTQpzdGlja2xlci9NUwpzdGlja3Bpbi9NUwpzdGlja3VwL01TCnN0aWNreS9QVFJTTQpzdGlmZi9TTUROUllQWFRHCnN0aWZmZW4vWkdEUgpzdGlmZmVuZXIvTQpzdGlmZmVuaW5nL00Kc3RpZmZuZXNzL00Kc3RpZmxlL0RTSkcKc3RpZmxpbmcvWQpzdGlnbWEvU00Kc3RpZ21hdGEKc3RpZ21hdGljCnN0aWdtYXRpemF0aW9uL00Kc3RpZ21hdGl6ZS9HRFMKc3RpbGUvU00Kc3RpbGV0dG8vU00Kc3RpbGwncwpzdGlsbC9JVEdTRApzdGlsbGJpcnRoL00Kc3RpbGxiaXJ0aHMKc3RpbGxib3JuCnN0aWxsZXIKc3RpbGxuZXNzL00Kc3RpbHQvU01ECnN0aWx0ZWQvWQpzdGltdWxhbnQvU00Kc3RpbXVsYXRlL0RTR05WCnN0aW11bGF0aW9uL00Kc3RpbXVsaQpzdGltdWx1cy9NCnN0aW5nL1pHU01SCnN0aW5nZXIvTQpzdGluZ2lseQpzdGluZ2luZXNzL00Kc3RpbmdyYXkvU00Kc3Rpbmd5L1JUUApzdGluay9aR1NNUgpzdGlua2J1Zy9TTQpzdGlua2VyL00Kc3Rpbmt5L1JUCnN0aW50L0dTTUQKc3RpcGVuZC9TTQpzdGlwZW5kaWFyeS9TCnN0aXBwbGUvRFNNRwpzdGlwcGxpbmcvTQpzdGlwdWxhdGUvWERTR04Kc3RpcHVsYXRpb24vTQpzdGlyL01TCnN0aXJyZWQKc3RpcnJlci9TTQpzdGlycmluZy9TWQpzdGlycnVwL1NNCnN0aXRjaCdzCnN0aXRjaC9BRFNHCnN0aXRjaGVyeS9NCnN0aXRjaGluZy9NCnN0b2F0L1NNCnN0b2NoYXN0aWMKc3RvY2sncwpzdG9jay9BR1NECnN0b2NrYWRlL0RTTUcKc3RvY2ticmVlZGVyL01TCnN0b2NrYnJva2VyL1NNCnN0b2NrYnJva2luZy9NCnN0b2NraG9sZGVyL1NNCnN0b2NraWx5CnN0b2NraW5lc3MvTQpzdG9ja2luZXR0ZS9NCnN0b2NraW5nL1NNCnN0b2NraXN0L1MKc3RvY2twaWxlL01HRFMKc3RvY2twb3QvU00Kc3RvY2tyb29tL01TCnN0b2NrdGFraW5nL00Kc3RvY2t5L1JUUApzdG9ja3lhcmQvTVMKc3RvZGdlCnN0b2RnaWx5CnN0b2RnaW5lc3MvTQpzdG9kZ3kvUlRQCnN0b2dpZS9NUwpzdG9pYy9TTQpzdG9pY2FsL1kKc3RvaWNpc20vTQpzdG9rZS9EUlNaRwpzdG9rZXIvTQpzdG9sZS9TTQpzdG9sZW4Kc3RvbGlkL1JZVFAKc3RvbGlkaXR5L00Kc3RvbGlkbmVzcy9NCnN0b2xvbi9NUwpzdG9tYWNoL01EUlpHCnN0b21hY2hhY2hlL1NNCnN0b21hY2hlci9NCnN0b21hY2hzCnN0b21wL0dTTUQKc3RvbmUvRFJTTVpHCnN0b25lbWFzb24vTVMKc3RvbmVyL00Kc3RvbmV3YWxsL0dTRApzdG9uZXdhcmUvTQpzdG9uZXdhc2hlZApzdG9uZXdvcmsvTQpzdG9uaWx5CnN0b25pbmVzcy9NCnN0b25rZXJlZApzdG9ua2luZwpzdG9ueS9UUlAKc3Rvb2QKc3Rvb2dlL01TCnN0b29sL1NNCnN0b29wL0dTTUQKc3RvcCdzCnN0b3AvVVMKc3RvcGNvY2svU00Kc3RvcGdhcC9TTQpzdG9wbGlnaHQvTVMKc3RvcG92ZXIvTVMKc3RvcHBhYmxlL1UKc3RvcHBhZ2UvTVMKc3RvcHBlZC9VCnN0b3BwZXIvR1NNRApzdG9wcGluZy9VCnN0b3BwbGUvRFNNRwpzdG9wd2F0Y2gvTVMKc3RvcmFnZS9NCnN0b3JlJ3MKc3RvcmUvQURTRwpzdG9yZWZyb250L01TCnN0b3JlaG91c2UvTVMKc3RvcmVrZWVwZXIvU00Kc3RvcmVyb29tL1NNCnN0b3JrL1NNCnN0b3JtL0dTTUQKc3Rvcm1pbHkKc3Rvcm1pbmVzcy9NCnN0b3JteS9SUFQKc3RvcnkvRFNNCnN0b3J5Ym9hcmQvTVMKc3Rvcnlib29rL1NNCnN0b3J5dGVsbGVyL01TCnN0b3J5dGVsbGluZy9NCnN0b3VwL1NNCnN0b3V0L1RTTVJZUApzdG91dGhlYXJ0ZWQKc3RvdXRuZXNzL00Kc3RvdmUvU00Kc3RvdmVwaXBlL1NNCnN0b3cvREdTCnN0b3dhZ2UvTQpzdG93YXdheS9NUwpzdHJhZGRsZS9EUlNNWkcKc3RyYWRkbGVyL00Kc3RyYWZlL01HRFMKc3RyYWdnbGUvRFJTWkcKc3RyYWdnbGVyL00Kc3RyYWdnbHkvVFIKc3RyYWlnaHQvU1BYVE1OUlkKc3RyYWlnaHRhd2F5L1NNCnN0cmFpZ2h0ZWRnZS9TTQpzdHJhaWdodGVuL1pHRFIKc3RyYWlnaHRlbmVyL00Kc3RyYWlnaHRmb3J3YXJkL1lQUwpzdHJhaWdodGZvcndhcmRuZXNzL00Kc3RyYWlnaHRuZXNzL00Kc3RyYWlnaHR3YXkKc3RyYWluJ3MKc3RyYWluL0ZBRFNHCnN0cmFpbmVyL0FTTQpzdHJhaXQvTU5TWApzdHJhaXRlbi9HRApzdHJhaXRqYWNrZXQvU0dNRApzdHJhaXRsYWNlZApzdHJhbmQvTURTRwpzdHJhbmdlL1BSWVpUCnN0cmFuZ2VuZXNzL00Kc3RyYW5nZXIvTQpzdHJhbmdsZS9aR0RSUwpzdHJhbmdsZWhvbGQvU00Kc3RyYW5nbGVyL00Kc3RyYW5ndWxhdGUvR05EUwpzdHJhbmd1bGF0aW9uL00Kc3RyYXAncwpzdHJhcC9VUwpzdHJhcGxlc3MvTVMKc3RyYXBwZWQvVQpzdHJhcHBpbmcvTQpzdHJhdGEKc3RyYXRhZ2VtL1NNCnN0cmF0ZWdpYy9TCnN0cmF0ZWdpY2FsL1kKc3RyYXRlZ2ljcy9NCnN0cmF0ZWdpc3QvU00Kc3RyYXRlZ3kvU00Kc3RyYXRpCnN0cmF0aWZpY2F0aW9uL00Kc3RyYXRpZnkvRFNHTgpzdHJhdG9zcGhlcmUvU00Kc3RyYXRvc3BoZXJpYwpzdHJhdHVtL00Kc3RyYXR1cy9NCnN0cmF3L0dTTUQKc3RyYXdiZXJyeS9TTQpzdHJheS9HU01ECnN0cmVhay9NRFJTWkcKc3RyZWFrZXIvTQpzdHJlYWt5L1RSCnN0cmVhbS9NRFJTWkcKc3RyZWFtZXIvTQpzdHJlYW1saW5lL0RTRwpzdHJlZXQvTVMKc3RyZWV0Y2FyL01TCnN0cmVldGxhbXAvUwpzdHJlZXRsaWdodC9TTQpzdHJlZXR3YWxrZXIvU00Kc3RyZWV0d2lzZQpzdHJlbmd0aC9NCnN0cmVuZ3RoZW4vQUdEUwpzdHJlbmd0aGVuZXIvTVMKc3RyZW5ndGhzCnN0cmVudW91cy9QWQpzdHJlbnVvdXNuZXNzL00Kc3RyZXAvTQpzdHJlcHRvY29jY2FsCnN0cmVwdG9jb2NjaQpzdHJlcHRvY29jY3VzL00Kc3RyZXB0b215Y2luL00Kc3RyZXNzL01EU0cKc3RyZXNzZWQvVQpzdHJlc3NmdWwKc3RyZXRjaC9CWkdNRFJTCnN0cmV0Y2hlci9NREcKc3RyZXRjaG1hcmtzCnN0cmV0Y2h5L1RSCnN0cmV3L0dTREgKc3RyZXduCnN0cmlhL00Kc3RyaWFlCnN0cmlhdGVkCnN0cmlhdGlvbi9NUwpzdHJpY2tlbgpzdHJpY3QvUllQVApzdHJpY3RuZXNzL00Kc3RyaWN0dXJlL1NNCnN0cmlkZGVuCnN0cmlkZS9NR1MKc3RyaWRlbmN5L00Kc3RyaWRlbnQvWQpzdHJpZmUvTQpzdHJpa2UvTVpHUlNKCnN0cmlrZWJvdW5kCnN0cmlrZWJyZWFrZXIvU00Kc3RyaWtlYnJlYWtpbmcKc3RyaWtlb3V0L01TCnN0cmlrZXIvTQpzdHJpa2luZy9ZCnN0cmluZy9NRFJTWkcKc3RyaW5nZW5jeS9NCnN0cmluZ2VudC9ZCnN0cmluZ2VyL00Kc3RyaW5naW5lc3MvTQpzdHJpbmd5L1BUUgpzdHJpcC9HU01ECnN0cmlwZS9NUwpzdHJpcGV5CnN0cmlwbGluZy9NUwpzdHJpcHBlZApzdHJpcHBlci9NUwpzdHJpcHBpbmcKc3RyaXB0ZWFzZS9NWkdEUlMKc3RyaXB0ZWFzZXIvTQpzdHJpcHkKc3RyaXZlL0dTCnN0cml2ZW4Kc3Ryb2JlL01TCnN0cm9ib3Njb3BlL01TCnN0cm9ib3Njb3BpYwpzdHJvZGUKc3Ryb2tlL01HRFMKc3Ryb2xsL01EUlNaRwpzdHJvbGxlci9NCnN0cm9uZy9SWVQKc3Ryb25nYm94L01TCnN0cm9uZ2hvbGQvTVMKc3Ryb25nbWFuL00Kc3Ryb25nbWVuCnN0cm9uZ3Jvb20vUwpzdHJvbnRpdW0vTQpzdHJvcC9TTQpzdHJvcGhlL1NNCnN0cm9waGljCnN0cm9wcGVkCnN0cm9wcGlseQpzdHJvcHBpbmcKc3Ryb3BweS9UUlAKc3Ryb3ZlCnN0cnVjawpzdHJ1Y3R1cmFsL1kKc3RydWN0dXJhbGlzbQpzdHJ1Y3R1cmFsaXN0L1MKc3RydWN0dXJlJ3MKc3RydWN0dXJlL0FHRFMKc3RydWN0dXJlZC9VCnN0cnVkZWwvU00Kc3RydWdnbGUvTUdEUwpzdHJ1bS9TTQpzdHJ1bW1lZApzdHJ1bW1pbmcKc3RydW1wZXQvTVMKc3RydW5nL1VBCnN0cnV0L1NNCnN0cnV0dGVkCnN0cnV0dGluZwpzdHJ5Y2huaW5lL00Kc3R1Yi9NUwpzdHViYmVkCnN0dWJiaW5nCnN0dWJibGUvTQpzdHViYmx5CnN0dWJib3JuL1JZUFQKc3R1YmJvcm5uZXNzL00Kc3R1YmJ5L1JUCnN0dWNjby9NREcKc3R1Y2NvZXMKc3R1Y2svVQpzdHVkL01ZUwpzdHVkYm9vay9NUwpzdHVkZGVkCnN0dWRkaW5nL00Kc3R1ZGVudC9TTQpzdHVkZW50c2hpcC9TCnN0dWRpZWQvVQpzdHVkaWVkbHkKc3R1ZGlvL01TCnN0dWRpb3VzL1BZCnN0dWRpb3VzbmVzcy9NCnN0dWRseS9SVApzdHVkeSdzCnN0dWR5L0FHRFMKc3R1ZmYvR1NNREoKc3R1ZmZpbHkKc3R1ZmZpbmVzcy9NCnN0dWZmaW5nL00Kc3R1ZmZ5L1JQVApzdHVsdGlmaWNhdGlvbi9NCnN0dWx0aWZ5L0RTTkcKc3R1bWJsZS9EUlNNWkcKc3R1bWJsZXIvTQpzdHVtcC9HU01ECnN0dW1weS9UUgpzdHVuL1MKc3R1bmcKc3R1bmsKc3R1bm5lZApzdHVubmVyL1MKc3R1bm5pbmcvWQpzdHVudC9HU01ECnN0dW50bWFuCnN0dW50bWVuCnN0dXBlZmFjdGlvbi9NCnN0dXBlZnkvRFNHCnN0dXBlbmRvdXMvWQpzdHVwaWQvVE1SWVMKc3R1cGlkaXR5L1NNCnN0dXBvci9NUwpzdHVyZGlseQpzdHVyZGluZXNzL00Kc3R1cmR5L1RSUApzdHVyZ2Vvbi9TTQpzdHV0dGVyL01EUlNaRwpzdHV0dGVyZXIvTQpzdHkvU00Kc3R5bGUncwpzdHlsZS9BRFNHCnN0eWxpCnN0eWxpc2gvUFkKc3R5bGlzaG5lc3MvTQpzdHlsaXN0L1NNCnN0eWxpc3RpYy9TCnN0eWxpc3RpY2FsbHkKc3R5bGl6ZS9EU0cKc3R5bHVzL01TCnN0eW1pZS9NRFMKc3R5bWllaW5nCnN0eXB0aWMvU00Kc3Vhc2lvbi9FTQpzdWF2ZS9SWVRQCnN1YXZlbmVzcy9NCnN1YXZpdHkvTQpzdWIvU00Kc3ViYWx0ZXJuL01TCnN1YmFxdWEKc3ViYXJjdGljCnN1YmFyZWEvTVMKc3ViYXRvbWljCnN1YmJhc2VtZW50L1NNCnN1YmJlZApzdWJiaW5nCnN1YmJyYW5jaC9NUwpzdWJjYXRlZ29yeS9TTQpzdWJjbGFzcwpzdWJjb21taXR0ZWUvU00Kc3ViY29tcGFjdC9TTQpzdWJjb25zY2lvdXMvUE1ZCnN1YmNvbnNjaW91c25lc3MvTQpzdWJjb250aW5lbnQvU00Kc3ViY29udGluZW50YWwKc3ViY29udHJhY3QvTURTRwpzdWJjb250cmFjdG9yL01TCnN1YmN1bHR1cmUvTVMKc3ViY3V0YW5lb3VzL1kKc3ViZGl2aWRlL0dEUwpzdWJkaXZpc2lvbi9TTQpzdWJkb21pbmFudApzdWJkdWUvRFNHCnN1YmVkaXRvci9TCnN1YmZhbWlseS9TTQpzdWJmcmVlemluZwpzdWJncm91cC9NUwpzdWJoZWFkL0dKTVMKc3ViaGVhZGluZy9NCnN1Ymh1bWFuL01TCnN1YmoKc3ViamVjdC9HVk1EUwpzdWJqZWN0aW9uL00Kc3ViamVjdGl2ZS9ZCnN1YmplY3Rpdml0eS9NCnN1YmpvaW4vR0RTCnN1Ymp1Z2F0ZS9HTkRTCnN1Ymp1Z2F0aW9uL00Kc3VianVuY3RpdmUvU00Kc3VibGVhc2UvTUdEUwpzdWJsZXQvU00Kc3VibGV0dGluZwpzdWJsaWV1dGVuYW50L1MKc3VibGltYXRlL0dORFMKc3VibGltYXRpb24vTQpzdWJsaW1lL1lUR0RSUwpzdWJsaW1pbmFsL1kKc3VibGltaXR5L00Kc3VibGluZ3VhbApzdWJtYXJnaW5hbApzdWJtYXJpbmUvTVpSUwpzdWJtYXJpbmVyL00Kc3VibWVyZ2UvR0RTCnN1Ym1lcmdlbmNlL00Kc3VibWVyc2UvR05EUwpzdWJtZXJzaWJsZS9NUwpzdWJtZXJzaW9uL00Kc3VibWljcm9zY29waWMKc3VibWlzc2lvbi9NUwpzdWJtaXNzaXZlL1BZCnN1Ym1pc3NpdmVuZXNzL00Kc3VibWl0L0FTCnN1Ym1pdHRlZC9BCnN1Ym1pdHRlcgpzdWJtaXR0aW5nL0EKc3Vibm9ybWFsCnN1Ym9yYml0YWwKc3Vib3JkZXIvTVMKc3Vib3JkaW5hdGUvRFNNR04Kc3Vib3JkaW5hdGlvbi9JTQpzdWJvcm4vU0dECnN1Ym9ybmF0aW9uL00Kc3VicGFyYWdyYXBoCnN1YnBsb3QvTVMKc3VicG9lbmEvR01EUwpzdWJwcmltZQpzdWJwcm9mZXNzaW9uYWwvU00Kc3VicHJvZ3JhbS9TCnN1YnJvdXRpbmUvU00Kc3Vic2NyaWJlL1VBU0RHCnN1YnNjcmliZXIvTVMKc3Vic2NyaXB0L01TCnN1YnNjcmlwdGlvbi9NUwpzdWJzZWN0aW9uL01TCnN1YnNlcXVlbnQvWQpzdWJzZXJ2aWVuY2UvTQpzdWJzZXJ2aWVudC9ZCnN1YnNldC9TTQpzdWJzaWRlL0dEUwpzdWJzaWRlbmNlL00Kc3Vic2lkaWFyaXR5CnN1YnNpZGlhcnkvU00Kc3Vic2lkaXphdGlvbi9NCnN1YnNpZGl6ZS9aR0RSUwpzdWJzaWRpemVyL00Kc3Vic2lkeS9TTQpzdWJzaXN0L1NERwpzdWJzaXN0ZW5jZS9NCnN1YnNvaWwvTQpzdWJzb25pYwpzdWJzcGFjZQpzdWJzcGVjaWVzL00Kc3Vic3RhbmNlL1NNCnN1YnN0YW5kYXJkCnN1YnN0YW50aWFsL0lZCnN1YnN0YW50aWF0ZS9HTkRTWApzdWJzdGFudGlhdGVkL1UKc3Vic3RhbnRpYXRpb24vRk0Kc3Vic3RhbnRpdmUvU01ZCnN1YnN0YXRpb24vTVMKc3Vic3RpdHVlbnQKc3Vic3RpdHV0ZS9YTUdORFMKc3Vic3RpdHV0aW9uL00Kc3Vic3RyYXRhCnN1YnN0cmF0ZS9NUwpzdWJzdHJhdHVtL00Kc3Vic3RydWN0dXJlL1NNCnN1YnN1bWUvRFNHCnN1YnN1bXB0aW9uCnN1YnN1cmZhY2UvTQpzdWJzeXN0ZW0vU00Kc3VidGVlbi9TTQpzdWJ0ZW5hbmN5L00Kc3VidGVuYW50L1NNCnN1YnRlbmQvU0RHCnN1YnRlcmZ1Z2UvU00Kc3VidGVycmFuZWFuCnN1YnRleHQvU00Kc3VidGl0bGUvRFNNRwpzdWJ0bGUvVFIKc3VidGxldHkvU00Kc3VidGx5CnN1YnRvcGljL1NNCnN1YnRvdGFsL1NHTUQKc3VidHJhY3QvR1NECnN1YnRyYWN0aW9uL1NNCnN1YnRyYWhlbmQvU00Kc3VidHJvcGljL1MKc3VidHJvcGljYWwKc3VidHJvcGljcy9NCnN1YnVyYi9NUwpzdWJ1cmJhbi9TTQpzdWJ1cmJhbml0ZS9TTQpzdWJ1cmJpYS9NCnN1YnZlbnRpb24vU00Kc3VidmVyc2lvbi9NCnN1YnZlcnNpdmUvU1BNWQpzdWJ2ZXJzaXZlbmVzcy9NCnN1YnZlcnQvU0RHCnN1YndheS9NUwpzdWJ6ZXJvCnN1Y2NlZWQvR0RTCnN1Y2Nlc3MvVk1TCnN1Y2Nlc3NmdWwvVVkKc3VjY2Vzc2lvbi9TTQpzdWNjZXNzaXZlL1kKc3VjY2Vzc29yL1NNCnN1Y2NpbmN0L1JZVFAKc3VjY2luY3RuZXNzL00Kc3VjY29yL1NHTUQKc3VjY290YXNoL00Kc3VjY3ViaQpzdWNjdWJ1cwpzdWNjdWxlbmNlL00Kc3VjY3VsZW5jeS9NCnN1Y2N1bGVudC9TTQpzdWNjdW1iL0dEUwpzdWNoCnN1Y2hsaWtlCnN1Y2svTURSWkdTCnN1Y2tlci9HTUQKc3Vja2xlL0RTSkcKc3Vja2xpbmcvTQpzdWNyb3NlL00Kc3VjdGlvbi9TTURHCnN1ZGRlbi9QWQpzdWRkZW5uZXNzL00Kc3Vkcy9NCnN1ZHN5L1RSCnN1ZS9EU0cKc3VlZGUvTQpzdWV0L00Kc3VldHkKc3VmZmVyL0RSWkdTSgpzdWZmZXJhbmNlL00Kc3VmZmVyZXIvTQpzdWZmZXJpbmcvTQpzdWZmaWNlL0RTRwpzdWZmaWNpZW5jeS9JTQpzdWZmaWNpZW50L0lZCnN1ZmZpeC9NRFNHCnN1ZmZpeGF0aW9uL00Kc3VmZm9jYXRlL0dORFMKc3VmZm9jYXRpb24vTQpzdWZmcmFnYW4vTVMKc3VmZnJhZ2UvTQpzdWZmcmFnZXR0ZS9TTQpzdWZmcmFnaXN0L01TCnN1ZmZ1c2UvRFNHTgpzdWZmdXNpb24vTQpzdWdhci9HU01ECnN1Z2FyY2FuZS9NCnN1Z2FyY29hdC9HRFMKc3VnYXJsZXNzCnN1Z2FycGx1bS9NUwpzdWdhcnkvUlQKc3VnZ2VzdC9HVlNEUgpzdWdnZXN0aWJpbGl0eS9NCnN1Z2dlc3RpYmxlCnN1Z2dlc3Rpb24vU00Kc3VnZ2VzdGl2ZS9ZUApzdWdnZXN0aXZlbmVzcy9NCnN1aWNpZGFsCnN1aWNpZGUvU00Kc3VpdC9CTURHUwpzdWl0YWJpbGl0eS9VTQpzdWl0YWJsZW5lc3MvTQpzdWl0YWJseS9VCnN1aXRjYXNlL1NNCnN1aXRlL1NNCnN1aXRlZC9VCnN1aXRpbmcvTQpzdWl0b3IvTVMKc3VraXlha2kvTQpzdWxmYS9NCnN1bGZhdGUvU00Kc3VsZmlkZS9TTQpzdWxmb25hbWlkZXMKc3VsZnVyL01EU0cKc3VsZnVyaWMKc3VsZnVyb3VzCnN1bGsvTURHUwpzdWxraWx5CnN1bGtpbmVzcy9NCnN1bGt5L1RSU01QCnN1bGxlbi9SWVBUCnN1bGxlbm5lc3MvTQpzdWxsaWVkL1UKc3VsbHkvR0RTCnN1bHRhbi9NUwpzdWx0YW5hL1NNCnN1bHRhbmF0ZS9NUwpzdWx0cmlseQpzdWx0cmluZXNzL00Kc3VsdHJ5L1JQVApzdW0vU00Kc3VtYWMvTQpzdW1tYXJpbHkKc3VtbWFyaXplL0dEUwpzdW1tYXJ5L1NNCnN1bW1hdApzdW1tYXRpb24vRk1TCnN1bW1lZApzdW1tZXIvTURTRwpzdW1tZXJob3VzZS9TTQpzdW1tZXJ0aW1lL00Kc3VtbWVyeQpzdW1taW5nCnN1bW1pdC9NUwpzdW1taXRyeS9NCnN1bW1vbi9EUlNaRwpzdW1tb25lci9NCnN1bW1vbnMvR01EUwpzdW1vL00Kc3VtcC9NUwpzdW1wdHVvdXMvUFkKc3VtcHR1b3VzbmVzcy9NCnN1bi9TTQpzdW5iYXRoL1pHTURSUwpzdW5iYXRoZQpzdW5iYXRoZXIvTQpzdW5iYXRoaW5nL00Kc3VuYmF0aHMKc3VuYmVhbS9TTQpzdW5iZWQvUwpzdW5iZWx0L1NNCnN1bmJsb2NrL01TCnN1bmJvbm5ldC9TTQpzdW5idXJuL1NHTUQKc3VuYnVyc3QvTVMKc3VuZGFlL01TCnN1bmRlY2svUwpzdW5kZXIvRFNHCnN1bmRpYWwvU00Kc3VuZG93bi9TTQpzdW5kcmVzcy9TCnN1bmRyaWVzL00Kc3VuZHJ5L1MKc3VuZmlzaC9NUwpzdW5mbG93ZXIvTVMKc3VuZy9VCnN1bmdsYXNzZXMvTQpzdW5oYXQvUwpzdW5rL04Kc3VubGFtcC9TTQpzdW5sZXNzCnN1bmxpZ2h0L00Kc3VubGl0CnN1bm5lZApzdW5uaW5lc3MvTQpzdW5uaW5nCnN1bm55L1RSUApzdW5yaXNlL1NNCnN1bnJvb2YvU00Kc3Vuc2NyZWVuL01TCnN1bnNldC9NUwpzdW5zaGFkZS9NUwpzdW5zaGluZS9NCnN1bnNoaW55CnN1bnNwb3QvU00Kc3Vuc3Ryb2tlL00Kc3VudGFuL01TCnN1bnRhbm5lZApzdW50YW5uaW5nCnN1bnRyYXAvUwpzdW51cC9NCnN1cC9TWk1SCnN1cGVyL00Kc3VwZXJhYnVuZGFuY2UvTVMKc3VwZXJhYnVuZGFudApzdXBlcmFubnVhdGUvR05EUwpzdXBlcmFubnVhdGlvbi9NCnN1cGVyYi9SWVQKc3VwZXJjYXJnby9NCnN1cGVyY2FyZ29lcwpzdXBlcmNoYXJnZS9aR0RSUwpzdXBlcmNoYXJnZXIvTQpzdXBlcmNpbGlvdXMvUFkKc3VwZXJjaWxpb3VzbmVzcy9NCnN1cGVyY2l0eS9TTQpzdXBlcmNvbXB1dGVyL01TCnN1cGVyY29uZHVjdGluZwpzdXBlcmNvbmR1Y3RpdmUKc3VwZXJjb25kdWN0aXZpdHkvTQpzdXBlcmNvbmR1Y3Rvci9TTQpzdXBlcmVnby9NUwpzdXBlcmVyb2dhdGlvbi9NCnN1cGVyZXJvZ2F0b3J5CnN1cGVyZmljaWFsL1kKc3VwZXJmaWNpYWxpdHkvTQpzdXBlcmZpbmUKc3VwZXJmbHVpdHkvTQpzdXBlcmZsdW91cy9ZUApzdXBlcmZsdW91c25lc3MvTQpzdXBlcmdsdWUKc3VwZXJncmFzcy9TCnN1cGVyaGVyby9NUwpzdXBlcmhlcm9lcwpzdXBlcmhpZ2h3YXkvU00Kc3VwZXJodW1hbgpzdXBlcmltcG9zZS9HRFMKc3VwZXJpbXBvc2l0aW9uL00Kc3VwZXJpbnRlbmQvRFNHCnN1cGVyaW50ZW5kZW5jZS9NCnN1cGVyaW50ZW5kZW5jeS9NCnN1cGVyaW50ZW5kZW50L1NNCnN1cGVyaW9yL01TCnN1cGVyaW9yaXR5L00Kc3VwZXJsYXRpdmUvU01ZCnN1cGVybWFuL00Kc3VwZXJtYXJrZXQvU00Kc3VwZXJtZW4Kc3VwZXJtb2RlbC9TTQpzdXBlcm1vbS9NUwpzdXBlcm5hbApzdXBlcm5hdHVyYWwvU1kKc3VwZXJub3ZhL01TCnN1cGVybm92YWUKc3VwZXJudW1lcmFyeS9TTQpzdXBlcnBvc2UvR0RTCnN1cGVycG9zaXRpb24vTQpzdXBlcnBvd2VyL1NNCnN1cGVyc2F0dXJhdGUvR05EUwpzdXBlcnNhdHVyYXRpb24vTQpzdXBlcnNjcmliZS9HRFMKc3VwZXJzY3JpcHQvTVMKc3VwZXJzY3JpcHRpb24vTQpzdXBlcnNlZGUvR0RTCnN1cGVyc2l6ZS9HRFMKc3VwZXJzb25pYwpzdXBlcnN0YXIvTVMKc3VwZXJzdGF0ZS9TCnN1cGVyc3RpdGlvbi9NUwpzdXBlcnN0aXRpb3VzL1kKc3VwZXJzdG9yZS9NUwpzdXBlcnN0cnVjdHVyZS9NUwpzdXBlcnRhbmtlci9NUwpzdXBlcnVzZXIvUwpzdXBlcnZlbmUvR0RTCnN1cGVydmVudGlvbi9NCnN1cGVydmlzZS9YR05EUwpzdXBlcnZpc2VkL1UKc3VwZXJ2aXNpb24vTQpzdXBlcnZpc29yL01TCnN1cGVydmlzb3J5CnN1cGVyd29tYW4vTQpzdXBlcndvbWVuCnN1cGluZS9ZCnN1cHAvRFJaRwpzdXBwZXIvTQpzdXBwZXJ0aW1lCnN1cHBsCnN1cHBsYW50L1NERwpzdXBwbGUvVExQUgpzdXBwbGVtZW50L01ER1MKc3VwcGxlbWVudGFsCnN1cHBsZW1lbnRhcnkKc3VwcGxlbWVudGF0aW9uL00Kc3VwcGxlbmVzcy9NCnN1cHBsaWFudC9TTQpzdXBwbGljYW50L01TCnN1cHBsaWNhdGUvR0RTCnN1cHBsaWNhdGlvbi9NCnN1cHBsaWVyL00Kc3VwcGx5L1pHRFJTTVhOCnN1cHBvcnQvTURSU0JaR1YKc3VwcG9ydGFibGUvVUkKc3VwcG9ydGVkL1UKc3VwcG9ydGVyL00Kc3VwcG9zZS9HRFMKc3VwcG9zZWQvWQpzdXBwb3NpdGlvbi9NUwpzdXBwb3NpdG9yeS9TTQpzdXBwcmVzcy9HRFMKc3VwcHJlc3NhbnQvTVMKc3VwcHJlc3NpYmxlCnN1cHByZXNzaW9uL00Kc3VwcHJlc3Nvci9TTQpzdXBwdXJhdGUvRFNHTgpzdXBwdXJhdGlvbi9NCnN1cHJhCnN1cHJhbmF0aW9uYWwKc3VwcmVtYWNpc3QvTVMKc3VwcmVtYWN5L00Kc3VwcmVtZS9ZCnN1cHJlbW8vUwpzdXB0CnN1cmNlYXNlL0RTTUcKc3VyY2hhcmdlL0RTTUcKc3VyY2luZ2xlL1NNCnN1cmUvUFlUUgpzdXJlZmlyZQpzdXJlZm9vdGVkCnN1cmVuZXNzL00Kc3VyZXR5L1NNCnN1cmYvTURSWkdTCnN1cmZhY2UncwpzdXJmYWNlL0FHRFMKc3VyZmJvYXJkL01EU0cKc3VyZmVpdC9NRFNHCnN1cmZlci9NCnN1cmZpbmcvTQpzdXJnZS9EU01HCnN1cmdlb24vTVMKc3VyZ2VyeS9TTQpzdXJnaWNhbC9ZCnN1cmxpbmVzcy9NCnN1cmx5L1BUUgpzdXJtaXNlL01HRFMKc3VybW91bnQvREdTQgpzdXJtb3VudGFibGUvSQpzdXJuYW1lL01TCnN1cnBhc3MvR0RTCnN1cnBhc3NlZC9VCnN1cnBsaWNlL01TCnN1cnBsdXMvTVMKc3VycGx1c3NlZApzdXJwbHVzc2luZwpzdXJwcmlzZS9EU01HSgpzdXJwcmlzaW5nL1VZCnN1cnJlYWwKc3VycmVhbGlzbS9NCnN1cnJlYWxpc3QvU00Kc3VycmVhbGlzdGljCnN1cnJlYWxpc3RpY2FsbHkKc3VycmVuZGVyL01EU0cKc3VycmVwdGl0aW91cy9QWQpzdXJyZXB0aXRpb3VzbmVzcy9NCnN1cnJleS9NUwpzdXJyb2dhY3kvTQpzdXJyb2dhdGUvU00Kc3Vycm91bmQvR1NESgpzdXJyb3VuZGluZy9NCnN1cnJvdW5kaW5ncy9NCnN1cnRheC9NRFNHCnN1cnRpdGxlL1MKc3VydmVpbGxhbmNlL00Kc3VydmV5J3MKc3VydmV5L0FER1MKc3VydmV5aW5nL00Kc3VydmV5b3IvU00Kc3Vydml2YWwvU00Kc3Vydml2YWxpc3QvU00Kc3Vydml2ZS9EU0dCCnN1cnZpdm9yL1NNCnN1c2NlcHRpYmlsaXR5L1NNCnN1c2NlcHRpYmxlL0kKc3VzaGkvTQpzdXNwZWN0L1NNREcKc3VzcGVjdGVkL1UKc3VzcGVuZC9TRFJaRwpzdXNwZW5kZXIvTQpzdXNwZW5zZS9YTU4Kc3VzcGVuc2VmdWwKc3VzcGVuc2lvbi9NCnN1c3BpY2lvbi9TTQpzdXNwaWNpb3VzL1kKc3Vzcy9EU0cKc3VzdGFpbi9TREJHCnN1c3RhaW5hYmlsaXR5CnN1c3RhaW5hYmxlL1UKc3VzdGVuYW5jZS9NCnN1dGxlci9NUwpzdXR0ZWUKc3V0dXJlL01HRFMKc3V6ZXJhaW4vTVMKc3V6ZXJhaW50eS9NCnN2ZWx0ZS9UUgpzd2FiL01TCnN3YWJiZWQKc3dhYmJpbmcKc3dhZGRsZS9EU0cKc3dhZy9NUwpzd2FnZ2VkCnN3YWdnZXIvU01EUkcKc3dhZ2dpbmcKc3dhaW4vU00Kc3dhbGxvdy9HU01ECnN3YWxsb3d0YWlsL01TCnN3YW0Kc3dhbWkvU00Kc3dhbXAvR1NNRApzd2FtcGxhbmQvTQpzd2FtcHkvUlQKc3dhbi9NUwpzd2Fuay9UR1NNRFIKc3dhbmtpbHkKc3dhbmtpbmVzcy9NCnN3YW5reS9SUFQKc3dhbm5lZApzd2FubmluZwpzd2Fuc29uZy9TCnN3YXAvTVMKc3dhcHBlZApzd2FwcGluZwpzd2FyZC9TTQpzd2FybS9HU01ECnN3YXJ0aHkvVFIKc3dhc2gvR01EUwpzd2FzaGJ1Y2tsZXIvU00Kc3dhc2hidWNrbGluZy9NCnN3YXN0aWthL1NNCnN3YXQvTVMKc3dhdGNoL01TCnN3YXRoL0dNRFMKc3dhdGhlL00Kc3dhdGhzCnN3YXR0ZWQKc3dhdHRlci9TTURHCnN3YXR0aW5nCnN3YXkvTURHUwpzd2F5YmFjay9NRApzd2F5ZWQvVQpzd2Vhci9aR1NSCnN3ZWFyZXIvTQpzd2VhcndvcmQvTVMKc3dlYXQvWkdTTURSCnN3ZWF0YmFuZC9NUwpzd2VhdGVyL00Kc3dlYXRwYW50cy9NCnN3ZWF0cy9NCnN3ZWF0c2hpcnQvU00Kc3dlYXRzaG9wL01TCnN3ZWF0c3VpdC9TCnN3ZWF0eS9SVApzd2VkZS9TTQpzd2VlcC9aR1NNUkoKc3dlZXBlci9NCnN3ZWVwaW5nL01ZCnN3ZWVwaW5ncy9NCnN3ZWVwc3Rha2VzL00Kc3dlZXQvWFRTTU5SWVAKc3dlZXRicmVhZC9TTQpzd2VldGJyaWVyL1NNCnN3ZWV0Y29ybgpzd2VldGVuZWQvVQpzd2VldGVuZXIvTVMKc3dlZXRlbmluZy9NCnN3ZWV0aGVhcnQvU00Kc3dlZXRpZS9TTQpzd2VldGlzaApzd2VldG1lYXQvTVMKc3dlZXRuZXNzL00Kc3dlbGwvVEdTTURSSgpzd2VsbGhlYWQvTURTCnN3ZWxsaW5nL00Kc3dlbHRlci9TR01ECnN3ZXB0CnN3ZXB0YmFjawpzd2VydmUvTUdEUwpzd2VydmluZy9VCnN3aWZ0L1BUU01SWQpzd2lmdG5lc3MvTQpzd2lnL01TCnN3aWdnZWQKc3dpZ2dpbmcKc3dpbGwvR1NNRApzd2ltL01TCnN3aW1tZXIvU00Kc3dpbW1pbmcvTVkKc3dpbXN1aXQvU00Kc3dpbXdlYXIKc3dpbmRsZS9EUlNNWkcKc3dpbmRsZXIvTQpzd2luZS9TTQpzd2luZWhlcmQvU00Kc3dpbmcvWkdTTVIKc3dpbmdlaW5nCnN3aW5nZXIvTQpzd2luaXNoCnN3aXBlL0RTTUcKc3dpcmwvR1NNRApzd2lybHkKc3dpc2gvVEdNRFJTCnN3aXRjaC9NRFJTWkdCCnN3aXRjaGJhY2svTVMKc3dpdGNoYmxhZGUvU00Kc3dpdGNoYm9hcmQvU00Kc3dpdGNoZXIvTQpzd2l2ZWwvTURHUwpzd2l6CnN3aXp6CnN3aXp6bGUvRFNHCnN3b2xsZW4Kc3dvb24vU0dNRApzd29vcC9TR01ECnN3b29zaC9NRFNHCnN3b3JkL1NNCnN3b3JkZmlzaC9NUwpzd29yZHBsYXkvTQpzd29yZHNtYW4vTQpzd29yZHNtYW5zaGlwL00Kc3dvcmRzbWVuCnN3b3JlCnN3b3JuCnN3b3QvUwpzd290dGVkCnN3b3R0aW5nCnN3dW0Kc3d1bmcKc3liYXJpdGUvU00Kc3liYXJpdGljCnN5Y2Ftb3JlL01TCnN5Y29waGFuY3kvTQpzeWNvcGhhbnQvU00Kc3ljb3BoYW50aWMKc3lsbGFiaWMKc3lsbGFiaWNhdGUvR05EUwpzeWxsYWJpY2F0aW9uL00Kc3lsbGFiaWZpY2F0aW9uL00Kc3lsbGFiaWZ5L0RTTkcKc3lsbGFibGUvTVMKc3lsbGFidWIvUwpzeWxsYWJ1cy9NUwpzeWxsb2dpc20vTVMKc3lsbG9naXN0aWMKc3lscGgvTQpzeWxwaGljCnN5bHBobGlrZQpzeWxwaHMKc3lsdmFuCnN5bWJpb3NlcwpzeW1iaW9zaXMvTQpzeW1iaW90aWMKc3ltYmlvdGljYWxseQpzeW1ib2wvTVMKc3ltYm9saWMKc3ltYm9saWNhbC9ZCnN5bWJvbGlzbS9NCnN5bWJvbGl6YXRpb24vTQpzeW1ib2xpemUvRFNHCnN5bW1ldHJpYwpzeW1tZXRyaWNhbC9ZCnN5bW1ldHJ5L1NNCnN5bXBhdGhldGljL1UKc3ltcGF0aGV0aWNhbGx5L1UKc3ltcGF0aGllcy9NCnN5bXBhdGhpemUvWkdEUlMKc3ltcGF0aGl6ZXIvTQpzeW1wYXRoeS9TTQpzeW1waG9uaWMKc3ltcGhvbnkvU00Kc3ltcG9zaXVtL01TCnN5bXB0b20vTVMKc3ltcHRvbWF0aWMKc3ltcHRvbWF0aWNhbGx5CnN5bi9ICnN5bmFnb2dhbApzeW5hZ29ndWUvU00Kc3luYXBzZS9NUwpzeW5hcHRpYwpzeW5jL01EU0cKc3luY2hyb25pY2l0eQpzeW5jaHJvbml6YXRpb24vU00Kc3luY2hyb25pemUvR0RTCnN5bmNocm9ub3VzL1kKc3luY29wYXRlL0RTR04Kc3luY29wYXRpb24vTQpzeW5jb3BlL00Kc3luZGljYWxpc20Kc3luZGljYWxpc3QvUwpzeW5kaWNhdGUvRFNNR04Kc3luZGljYXRpb24vTQpzeW5kcm9tZS9TTQpzeW5lcmdpc20vTQpzeW5lcmdpc3RpYwpzeW5lcmd5L1NNCnN5bmZ1ZWwvTVMKc3lub2QvU00Kc3lub255bS9TTQpzeW5vbnltb3VzCnN5bm9ueW15L00Kc3lub3BzZXMKc3lub3BzaXMvTQpzeW5vcHRpYwpzeW5vdmlhbApzeW50YWN0aWMKc3ludGFjdGljYWwvWQpzeW50YXgvTQpzeW50aGVzZXMKc3ludGhlc2lzL00Kc3ludGhlc2l6ZS9aR0RSUwpzeW50aGVzaXplci9NCnN5bnRoZXRpYy9TTQpzeW50aGV0aWNhbGx5CnN5bnRocwpzeXBoaWxpcy9NCnN5cGhpbGl0aWMvU00Kc3lyaW5nZS9EU01HCnN5cnVwL1NNCnN5cnVweQpzeXNhZG1pbi9TCnN5c29wL1MKc3lzdGVtL1NNCnN5c3RlbWF0aWMvVQpzeXN0ZW1hdGljYWwvWQpzeXN0ZW1hdGl6YXRpb24vTQpzeXN0ZW1hdGl6ZS9HRFMKc3lzdGVtaWMvTVMKc3lzdGVtaWNhbGx5CnN5c3RvbGUvU00Kc3lzdG9saWMKdC9TRE5YR0JKCnRhCnRhYi9TTQp0YWJiZWQKdGFiYmluZwp0YWJib3VsZWgvTQp0YWJieS9TTQp0YWJlcm5hY2xlL1NNCnRhYmxhL01TCnRhYmxlL01HRFMKdGFibGVhdS9NCnRhYmxlYXV4CnRhYmxlY2xvdGgvTQp0YWJsZWNsb3Rocwp0YWJsZWxhbmQvU00KdGFibGVzcG9vbi9TTQp0YWJsZXNwb29uZnVsL1NNCnRhYmxldC9TTQp0YWJsZXRvcC9NUwp0YWJsZXdhcmUvTQp0YWJsb2lkL1NNCnRhYm9vL01EU0cKdGFib3IvTVMKdGFidWxhcgp0YWJ1bGF0ZS9EU0dOWAp0YWJ1bGF0aW9uL00KdGFidWxhdG9yL1NNCnRhY2hvZ3JhcGgKdGFjaG9ncmFwaHMKdGFjaG9tZXRlci9TTQp0YWNoeWNhcmRpYS9NCnRhY2h5b24KdGFjaXQvUFkKdGFjaXRuZXNzL00KdGFjaXR1cm4vWQp0YWNpdHVybml0eS9NCnRhY2svWkdNRFJTCnRhY2tlci9NCnRhY2tpbmVzcy9NCnRhY2tsZS9EUlNNWkcKdGFja2xlci9NCnRhY2t5L1JUUAp0YWNvL01TCnRhY3QvRk0KdGFjdGZ1bC9ZUAp0YWN0ZnVsbmVzcy9NCnRhY3RpYy9TTQp0YWN0aWNhbC9ZCnRhY3RpY2lhbi9NUwp0YWN0aWxlCnRhY3RpbGl0eS9NCnRhY3RsZXNzL1BZCnRhY3RsZXNzbmVzcy9NCnRhZC9TTQp0YWRwb2xlL01TCnRhZmZldGEvTQp0YWZmcmFpbC9TTQp0YWZmeS9TTQp0YWcvU00KdGFnZ2VkCnRhZ2dlci9TTQp0YWdnaW5nCnRhZ2xpYXRlbGxlCnRhZ2xpbmUvTVMKdGFpZ2EvTVMKdGFpbC9BQ1NETUcKdGFpbGJhY2svTVMKdGFpbGJvYXJkL1MKdGFpbGJvbmUvUwp0YWlsY29hdC9NUwp0YWlsZ2F0ZS9NWkdEUlMKdGFpbGdhdGVyL00KdGFpbGxlc3MKdGFpbGxpZ2h0L01TCnRhaWxvci9TR01ECnRhaWxvcmluZy9NCnRhaWxwaWVjZS9TCnRhaWxwaXBlL1NNCnRhaWxzcGluL1NNCnRhaWx3aW5kL1NNCnRhaW50L01EU0cKdGFpbnRlZC9VCnRha2UvQUlNUwp0YWtlYXdheS9TCnRha2VuL0EKdGFrZW9mZi9NUwp0YWtlb3V0L01TCnRha2VvdmVyL1NNCnRha2VyL01TCnRha2luZy9TTQp0YWtpbmdzL00KdGFsYy9NCnRhbGN1bS9NCnRhbGUvTVMKdGFsZWJlYXJlci9NUwp0YWxlbnQvU01ECnRhbGVudGVkL1UKdGFsaQp0YWxpc21hbi9NUwp0YWxrL1pHTURSUwp0YWxrYXRpdmUvUFkKdGFsa2F0aXZlbmVzcy9NCnRhbGtlci9NCnRhbGtpZS9SU01UCnRhbGt5CnRhbGwvVFJQCnRhbGxib3kvTVMKdGFsbGllci9NCnRhbGxpc2gKdGFsbG5lc3MvTQp0YWxsb3cvTQp0YWxsb3d5CnRhbGx5L0RSU01aRwp0YWxseWhvL01ER1MKdGFsb24vTVMKdGFsdXMvTVMKdGFtL1NNCnRhbWFsZS9TTQp0YW1hcmFjay9NUwp0YW1hcmluZC9NUwp0YW1ib3VyaW5lL01TCnRhbWUvQllaVEdEUlNQCnRhbWVkL1UKdGFtZW5lc3MvTQp0YW1lci9NCnRhbW94aWZlbgp0YW1wL1pHRFJTCnRhbXBlci9aR0RSCnRhbXBlcmVyL00KdGFtcG9uL1NNCnRhbi9TTQp0YW5hZ2VyL01TCnRhbmJhcmsvTQp0YW5kZW0vU00KdGFuZG9vcmkvTQp0YW5nL01TCnRhbmdlbG8vTVMKdGFuZ2VudC9NUwp0YW5nZW50aWFsL1kKdGFuZ2VyaW5lL01TCnRhbmdpYmlsaXR5L0lNCnRhbmdpYmxlL0lNUwp0YW5naWJsZW5lc3MvTQp0YW5naWJseS9JCnRhbmdsZSdzCnRhbmdsZS9VRFNHCnRhbmdvL01EU0cKdGFuZ3kvUlQKdGFuay9aR01EUlMKdGFua2FyZC9NUwp0YW5rZXIvTQp0YW5rZnVsL01TCnRhbm5lZC9VCnRhbm5lci9TTQp0YW5uZXJ5L1NNCnRhbm5lc3QKdGFubmluL00KdGFubmluZy9NCnRhbnN5L00KdGFudGFsaXphdGlvbi9NCnRhbnRhbGl6ZS9aR0RSUwp0YW50YWxpemVyL00KdGFudGFsaXppbmcvWQp0YW50YWx1bS9NCnRhbnRhbW91bnQKdGFudHJhL00KdGFudHJ1bS9TTQp0YXAvU1pHTURSCnRhcGFzCnRhcGUvTVMKdGFwZWxpbmUvTVMKdGFwZXIvTURHCnRhcGVzdHJ5L1NNCnRhcGV3b3JtL01TCnRhcGlvY2EvTQp0YXBpci9NUwp0YXBwZWQvVQp0YXBwZXIvTVMKdGFwcGV0L01TCnRhcHBpbmcKdGFwcm9vbS9TTQp0YXByb290L1NNCnRhci9TR01ECnRhcmFtYXNhbGF0YQp0YXJhbnRlbGxhL01TCnRhcmFudHVsYS9TTQp0YXJiYWxsL1MKdGFyZGlseQp0YXJkaW5lc3MvTQp0YXJkeS9UUFIKdGFyZS9NUwp0YXJnZXQvTURHUwp0YXJpZmYvTVMKdGFybWFjL01TCnRhcm1hY2FkYW0KdGFybWFja2VkCnRhcm1hY2tpbmcKdGFybi9NUwp0YXJuaXNoL0dNRFMKdGFybmlzaGVkL1UKdGFyby9NUwp0YXJvdC9NUwp0YXJwL01TCnRhcnBhdWxpbi9NUwp0YXJwb24vTVMKdGFycmFnb24vU00KdGFycmVkCnRhcnJpbmcKdGFycnkvVEdEUlMKdGFyc2FsL01TCnRhcnNpCnRhcnN1cy9NCnRhcnQvUFRHTURSWVMKdGFydGFuL01TCnRhcnRhci9NUwp0YXJ0YXJpYwp0YXJ0bmVzcy9NCnRhcnR5L1QKdGFzZXIvR01EUwp0YXNrL0dNRFMKdGFza21hc3Rlci9NUwp0YXNrbWlzdHJlc3MvTVMKdGFzc2VsL01EU0cKdGFzdGUvSk1aR0RSUwp0YXN0ZWQvVQp0YXN0ZWZ1bC9FUFkKdGFzdGVmdWxuZXNzL0VNCnRhc3RlbGVzcy9QWQp0YXN0ZWxlc3NuZXNzL00KdGFzdGVyL00KdGFzdGlseQp0YXN0aW5lc3MvTQp0YXN0aW5nL00KdGFzdHkvVFJQCnRhdC9TWlIKdGF0YW1pL01TCnRhdGVyL00KdGF0dGVkCnRhdHRlci9NRFNHCnRhdHRlcmRlbWFsaW9uL01TCnRhdHRpZQp0YXR0aW5nL00KdGF0dGxlL01aR0RSUwp0YXR0bGVyL00KdGF0dGxldGFsZS9NUwp0YXR0b28vTURSU1pHCnRhdHRvb2VyL00KdGF0dG9vaXN0L1NNCnRhdHR5L1RSUwp0YXUvU00KdGF1Z2h0L1VBCnRhdW50L1pHTURSUwp0YXVudGVyL00KdGF1bnRpbmcvWQp0YXVwZS9NCnRhdXQvUFhUTlJZCnRhdXRlbi9ERwp0YXV0bmVzcy9NCnRhdXRvbG9naWNhbC9ZCnRhdXRvbG9nb3VzCnRhdXRvbG9neS9TTQp0YXZlcm4vTVMKdGF3ZHJpbHkKdGF3ZHJpbmVzcy9NCnRhd2RyeS9SVFAKdGF3bnkvVFJNCnRheC9CWkdNRFJTCnRheGEKdGF4YXRpb24vTQp0YXhlci9NCnRheGkvR01EUwp0YXhpY2FiL1NNCnRheGlkZXJtaXN0L1NNCnRheGlkZXJteS9NCnRheGltZXRlci9NUwp0YXhpd2F5L1MKdGF4bWFuCnRheG1lbgp0YXhvbgp0YXhvbm9taWMKdGF4b25vbWlzdC9NUwp0YXhvbm9teS9TTQp0YXhwYXllci9NUwp0YXhwYXlpbmcKdGIvUwp0YnNwCnRlYS9TTQp0ZWFiYWcvUwp0ZWFjYWtlL1NNCnRlYWNoL1pHUlNCSgp0ZWFjaGFibGUvVQp0ZWFjaGVyL00KdGVhY2hpbmcvTQp0ZWFjdXAvTVMKdGVhY3VwZnVsL01TCnRlYWsvTVMKdGVha2V0dGxlL1NNCnRlYWwvTVMKdGVhbGlnaHQvTVMKdGVhbS9HTURTCnRlYW1tYXRlL01TCnRlYW1zdGVyL01TCnRlYW13b3JrL00KdGVhcG90L01TCnRlYXIvR01EUwp0ZWFyYXdheS9TCnRlYXJkcm9wL1NNCnRlYXJmdWwvWQp0ZWFyZ2FzL01TCnRlYXJnYXNzZWQKdGVhcmdhc3NpbmcKdGVhcmplcmtlci9NUwp0ZWFyb29tL1NNCnRlYXJ5L1RSCnRlYXNlL01aR0RSUwp0ZWFzZWwvTVMKdGVhc2VyL00KdGVhc2luZy9ZCnRlYXNwb29uL1NNCnRlYXNwb29uZnVsL1NNCnRlYXQvTVMKdGVhdGltZS9TCnRlY2gvTQp0ZWNoaWUvUwp0ZWNobmV0aXVtL00KdGVjaG5pY2FsL1kKdGVjaG5pY2FsaXR5L1NNCnRlY2huaWNpYW4vU00KdGVjaG5pY29sb3IKdGVjaG5pcXVlL1NNCnRlY2hubwp0ZWNobm9iYWJibGUKdGVjaG5vY3JhY3kvU00KdGVjaG5vY3JhdC9NUwp0ZWNobm9jcmF0aWMKdGVjaG5vbG9naWNhbC9ZCnRlY2hub2xvZ2lzdC9NUwp0ZWNobm9sb2d5L1NNCnRlY2hub3Bob2JlL1MKdGVjaHMKdGVjdG9uaWMvUwp0ZWN0b25pY3MvTQp0ZWQvUwp0ZWRkeS9TCnRlZGlvdXMvUFkKdGVkaW91c25lc3MvTQp0ZWRpdW0vTQp0ZWUvRFNNSAp0ZWVpbmcKdGVlbS9HRFMKdGVlbi9NUwp0ZWVuYWdlL1JaCnRlZW5hZ2VyL00KdGVlbnkvVFIKdGVlbnlib3BwZXIvTVMKdGVldGVyL01EU0cKdGVldGhlL0dEUwp0ZWV0aGluZy9NCnRlZXRvdGFsL1JaCnRlZXRvdGFsZXIvTQp0ZWV0b3RhbGlzbS9NCnRla3RpdGUvU00KdGVsCnRlbGVjYXN0L1NaR01SCnRlbGVjYXN0ZXIvTQp0ZWxlY29tbXVuaWNhdGlvbi9NUwp0ZWxlY29tbXVuaWNhdGlvbnMvTQp0ZWxlY29tbXV0ZS9aR0RSUwp0ZWxlY29tbXV0ZXIvTQp0ZWxlY29tbXV0aW5nL00KdGVsZWNvbmZlcmVuY2UvTUdEUwp0ZWxlY29uZmVyZW5jaW5nL00KdGVsZWdlbmljCnRlbGVncmFtL01TCnRlbGVncmFwaC9NRFJaRwp0ZWxlZ3JhcGhlci9NCnRlbGVncmFwaGVzZQp0ZWxlZ3JhcGhpYwp0ZWxlZ3JhcGhpY2FsbHkKdGVsZWdyYXBoaXN0L1NNCnRlbGVncmFwaHMKdGVsZWdyYXBoeS9NCnRlbGVraW5lc2lzL00KdGVsZWtpbmV0aWMKdGVsZW1hcmtldGVyL1NNCnRlbGVtYXJrZXRpbmcvTQp0ZWxlbWV0ZXIvU00KdGVsZW1ldHJ5L1NNCnRlbGVvbG9naWNhbAp0ZWxlb2xvZ3kKdGVsZXBhdGhpYwp0ZWxlcGF0aGljYWxseQp0ZWxlcGF0aHkvTQp0ZWxlcGhvbmUvRFJTTVpHCnRlbGVwaG9uZXIvTQp0ZWxlcGhvbmljCnRlbGVwaG9uaXN0L1MKdGVsZXBob255L00KdGVsZXBob3RvL1NNCnRlbGVwaG90b2dyYXBoeS9NCnRlbGVwbGF5L01TCnRlbGVwb3J0CnRlbGVwb3J0YXRpb24KdGVsZXByaW50ZXIvTVMKdGVsZXByb2Nlc3NpbmcvTQp0ZWxlcHJvbXB0ZXIvU00KdGVsZXNhbGVzCnRlbGVzY29wZS9EU01HCnRlbGVzY29waWMKdGVsZXNjb3BpY2FsbHkKdGVsZXRleHQvTVMKdGVsZXRob24vTVMKdGVsZXR5cGUvUwp0ZWxldHlwZXdyaXRlci9NUwp0ZWxldmFuZ2VsaXNtL00KdGVsZXZhbmdlbGlzdC9NUwp0ZWxldmlzZS9YR05EUwp0ZWxldmlzaW9uL00KdGVsZXdvcmtlci9TCnRlbGV3b3JraW5nCnRlbGV4L01EU0cKdGVsbC9BR1MKdGVsbGVyL1NNCnRlbGxpbmcvWQp0ZWxsdGFsZS9TTQp0ZWxsdXJpdW0vTQp0ZWxseS9TTQp0ZWxuZXQKdGVtYmxvci9NUwp0ZW1lcml0eS9NCnRlbXAvTURSWlRHUwp0ZW1wZXIvTURHCnRlbXBlcmEvTFNNCnRlbXBlcmFtZW50L01TCnRlbXBlcmFtZW50YWwvWQp0ZW1wZXJhbmNlL0lNCnRlbXBlcmF0ZS9JWQp0ZW1wZXJhdGVuZXNzL00KdGVtcGVyYXR1cmUvU00KdGVtcGVzdC9TTQp0ZW1wZXN0dW91cy9ZUAp0ZW1wZXN0dW91c25lc3MvTQp0ZW1wbGF0ZSdzCnRlbXBsYXRlL1MKdGVtcGxlL1NNCnRlbXBvL1NNCnRlbXBvcmFsL1kKdGVtcG9yYXJpbHkKdGVtcG9yYXJpbmVzcy9NCnRlbXBvcmFyeS9GU00KdGVtcG9yaXplL1pHRFJTCnRlbXBvcml6ZXIvTQp0ZW1wdC9TRFJaRwp0ZW1wdGF0aW9uL01TCnRlbXB0ZXIvTQp0ZW1wdGluZy9ZCnRlbXB0cmVzcy9NUwp0ZW1wdXJhL00KdGVuL0JNSAp0ZW5hYmlsaXR5L00KdGVuYWJsZS9VCnRlbmFibHkKdGVuYWNpb3VzL1lQCnRlbmFjaW91c25lc3MvTQp0ZW5hY2l0eS9NCnRlbmFuY3kvU00KdGVuYW50L1NNREcKdGVuYW50ZWQvVQp0ZW5hbnRyeS9NCnRlbmNoCnRlbmQvSUVGREdTCnRlbmRlZC9VCnRlbmRlbmN5L1NNCnRlbmRlbnRpb3VzL1lQCnRlbmRlbnRpb3VzbmVzcy9NCnRlbmRlci9TTURSWVRHUAp0ZW5kZXJmb290L01TCnRlbmRlcmhlYXJ0ZWQvUAp0ZW5kZXJoZWFydGVkbmVzcy9NCnRlbmRlcml6ZS9aR0RSUwp0ZW5kZXJpemVyL00KdGVuZGVybG9pbi9TTQp0ZW5kZXJuZXNzL00KdGVuZGluaXRpcy9NCnRlbmRvbi9TTQp0ZW5kcmlsL1NNCnRlbmVtZW50L1NNCnRlbmV0L1NNCnRlbmZvbGQKdGVubmVyL1MKdGVubmlzL00KdGVub24vU01ERwp0ZW5vci9TTQp0ZW5waW4vU00KdGVucGlucy9NCnRlbnNlL0RSU01ZVEdOWFAKdGVuc2VuZXNzL00KdGVuc2lsZQp0ZW5zaW9uL0VTTQp0ZW5zaXR5L0lNCnRlbnNvci9TCnRlbnQvREdTTQp0ZW50YWNsZS9EU00KdGVudGF0aXZlL1BZCnRlbnRhdGl2ZW5lc3MvTQp0ZW50ZXJob29rL01TCnRlbnRoL01ZCnRlbnRocwp0ZW51aXR5L00KdGVudW91cy9QWQp0ZW51b3VzbmVzcy9NCnRlbnVyZS9EU01HCnRlcGVlL1NNCnRlcGlkL1lQCnRlcGlkaXR5L00KdGVwaWRuZXNzL00KdGVxdWlsYS9TTQp0ZXJhYml0L1NNCnRlcmFieXRlL01TCnRlcmFoZXJ0ei9NCnRlcmFwaXhlbC9NUwp0ZXJiaXVtL00KdGVyY2VudGVuYXJ5L1NNCnRlcmNlbnRlbm5pYWwvU00KdGVyaXlha2kKdGVybS9NRFlHUwp0ZXJtYWdhbnQvTVMKdGVybWluYWJsZS9JQwp0ZXJtaW5hbC9NWVMKdGVybWluYXRlL0RTR05YCnRlcm1pbmF0aW9uL0NTTQp0ZXJtaW5hdG9yL1MKdGVybWluaQp0ZXJtaW5vbG9naWNhbC9ZCnRlcm1pbm9sb2d5L1NNCnRlcm1pbnVzL00KdGVybWl0ZS9TTQp0ZXJuL0lNUwp0ZXJuYXJ5L1NNCnRlcnIKdGVycmFjZS9EU01HCnRlcnJhY290dGEvTQp0ZXJyYWluL1NNCnRlcnJhcGluL01TCnRlcnJhcml1bS9TTQp0ZXJyYXp6by9NUwp0ZXJyZXN0cmlhbC9TTVkKdGVycmlibGUvUAp0ZXJyaWJsZW5lc3MvTQp0ZXJyaWJseQp0ZXJyaWVyL00KdGVycmlmaWMKdGVycmlmaWNhbGx5CnRlcnJpZnkvR0RTCnRlcnJpZnlpbmcvWQp0ZXJyaW5lL1MKdGVycml0b3JpYWwvTVMKdGVycml0b3JpYWxpdHkKdGVycml0b3J5L1NNCnRlcnJvci9TTQp0ZXJyb3Jpc20vTQp0ZXJyb3Jpc3QvU00KdGVycm9yaXplL0RTRwp0ZXJyeS9STVoKdGVycnljbG90aC9NCnRlcnNlL1JZVFAKdGVyc2VuZXNzL00KdGVydGlhcnkKdGVzc2VsbGF0ZS9EU1hHTgp0ZXNzZWxsYXRpb24vTQp0ZXN0J3MvQUZLCnRlc3QvQUtGQ0RHUwp0ZXN0YWJsZS9DRgp0ZXN0YW1lbnQvTVMKdGVzdGFtZW50YXJ5CnRlc3RhdGUvUwp0ZXN0YXRvci9NUwp0ZXN0YXRyaWNlcwp0ZXN0YXRyaXgvTQp0ZXN0ZWQvVQp0ZXN0ZXIvS1NNCnRlc3Rlcwp0ZXN0aWNsZS9NUwp0ZXN0aWN1bGFyCnRlc3RpZmllci9NCnRlc3RpZnkvWkdEUlMKdGVzdGlseQp0ZXN0aW1vbmlhbC9NUwp0ZXN0aW1vbnkvU00KdGVzdGluZXNzL00KdGVzdGluZ3MKdGVzdGlzL00KdGVzdG9zdGVyb25lL00KdGVzdHkvUFJUCnRldGFudXMvTQp0ZXRjaGlseQp0ZXRjaHkvUFJUCnRldGhlci9TTURHCnRldHJhL1NNCnRldHJhY3ljbGluZS9NCnRldHJhaGVkcmFsCnRldHJhaGVkcm9uL01TCnRldHJhbWV0ZXIvU00KdGV4dC9GTVMKdGV4dGJvb2svU00KdGV4dGVkCnRleHRpbGUvTVMKdGV4dGluZwp0ZXh0dWFsL0ZZCnRleHR1cmFsCnRleHR1cmUvTUdEUwp0aGFsYW1pCnRoYWxhbXVzL00KdGhhbGlkb21pZGUvTQp0aGFsbGl1bS9NCnRoYW4KdGhhbmUvU00KdGhhbmsvU0RHCnRoYW5rZnVsL1lQCnRoYW5rZnVsbmVzcy9NCnRoYW5rbGVzcy9QWQp0aGFua2xlc3NuZXNzL00KdGhhbmtzZ2l2aW5nL1NNCnRoYXQvTQp0aGF0Y2gvTURSU1pHCnRoYXRjaGVyL00KdGhhdGNoaW5nL00KdGhhdy9NREdTCnRoZS9KRwp0aGVhdGVyL1NNCnRoZWF0ZXJnb2VyL1NNCnRoZWF0cmljYWwvWVMKdGhlYXRyaWNhbGl0eS9NCnRoZWF0cmljYWxzL00KdGhlYXRyaWNzL00KdGhlZS9TCnRoZWZ0L1NNCnRoZWlyL1MKdGhlaXNtL00KdGhlaXN0L1NNCnRoZWlzdGljCnRoZW0KdGhlbWF0aWMKdGhlbWF0aWNhbGx5CnRoZW1lL0RTTQp0aGVtc2VsdmVzCnRoZW4vTQp0aGVuY2UKdGhlbmNlZm9ydGgKdGhlbmNlZm9yd2FyZAp0aGVvY3JhY3kvU00KdGhlb2NyYXRpYwp0aGVvZG9saXRlL1MKdGhlb2xvZ2lhbi9TTQp0aGVvbG9naWNhbC9ZCnRoZW9sb2d5L1NNCnRoZW9yZW0vTVMKdGhlb3JldGljCnRoZW9yZXRpY2FsL1kKdGhlb3JldGljaWFuL1NNCnRoZW9yaXN0L1NNCnRoZW9yaXplL0RTRwp0aGVvcnkvU00KdGhlb3NvcGhpYwp0aGVvc29waGljYWwKdGhlb3NvcGhpc3QvU00KdGhlb3NvcGh5L00KdGhlcmFwZXV0aWMvUwp0aGVyYXBldXRpY2FsbHkKdGhlcmFwZXV0aWNzL00KdGhlcmFwaXN0L1NNCnRoZXJhcHkvU00KdGhlcmUvTQp0aGVyZWFib3V0L1MKdGhlcmVhZnRlcgp0aGVyZWF0CnRoZXJlYnkKdGhlcmVmb3IKdGhlcmVmb3JlCnRoZXJlZnJvbQp0aGVyZWluCnRoZXJlbWluL1NNCnRoZXJlb2YKdGhlcmVvbgp0aGVyZXRvCnRoZXJldG9mb3JlCnRoZXJldW50bwp0aGVyZXVwb24KdGhlcmV3aXRoCnRoZXJtL1NNCnRoZXJtYWwvTVlTCnRoZXJtaW9uaWMKdGhlcm1vZHluYW1pYy9TCnRoZXJtb2R5bmFtaWNzL00KdGhlcm1vbWV0ZXIvTVMKdGhlcm1vbWV0cmljCnRoZXJtb251Y2xlYXIKdGhlcm1vcGxhc3RpYy9TTQp0aGVybW9zL01TCnRoZXJtb3N0YXQvTVMKdGhlcm1vc3RhdGljCnRoZXJtb3N0YXRpY2FsbHkKdGhlc2F1cmkKdGhlc2F1cnVzL01TCnRoZXNlL1MKdGhlc2lzL00KdGhlc3BpYW4vU00KdGhldGEvU00KdGhldy9NUwp0aGV5CnRoZXknZAp0aGV5J2xsCnRoZXkncmUKdGhleSd2ZQp0aGlhbWluZS9NCnRoaWNrL1BNTlJZWFQKdGhpY2tlbi9EUkpaRwp0aGlja2VuZXIvTQp0aGlja2VuaW5nL00KdGhpY2tldC9NUwp0aGlja2hlYWRlZC9NCnRoaWNrbmVzcy9NUwp0aGlja28vUwp0aGlja3NldAp0aGllZi9NCnRoaWV2ZS9EU0cKdGhpZXZlcnkvTQp0aGlldmluZy9NCnRoaWV2aXNoCnRoaWdoL00KdGhpZ2hib25lL01TCnRoaWdocwp0aGltYmxlL01TCnRoaW1ibGVmdWwvU00KdGhpbi9ZU1AKdGhpbmUKdGhpbmcvTQp0aGluZ2FtYWJvYi9TTQp0aGluZ2FtYWppZy9TTQp0aGluZ3VtYWJvYi9TCnRoaW5ndW1teS9TCnRoaW5neS9TCnRoaW5rL1NSQlpHCnRoaW5rYWJsZS9VCnRoaW5rZXIvTQp0aGlua2luZydzCnRoaW5uZWQKdGhpbm5lci9NUwp0aGlubmVzcy9NCnRoaW5uZXN0CnRoaW5uaW5nCnRoaXJkL1NNWQp0aGlyc3QvU0dNRAp0aGlyc3RpbHkKdGhpcnN0aW5lc3MvTQp0aGlyc3R5L1RQUgp0aGlydGVlbi9TTUgKdGhpcnRlZW50aC9NCnRoaXJ0ZWVudGhzCnRoaXJ0aWV0aC9NCnRoaXJ0aWV0aHMKdGhpcnR5L0hTTQp0aGlzCnRoaXN0bGUvTVMKdGhpc3RsZWRvd24vTQp0aGl0aGVyCnRobwp0aG9sZS9TTQp0aG9uZy9TTQp0aG9yYWNpYwp0aG9yYXgvTVMKdGhvcml1bS9NCnRob3JuL1NNCnRob3JuaW5lc3MvTQp0aG9ybnkvUFJUCnRob3JvdWdoL1JZUFQKdGhvcm91Z2hicmVkL01TCnRob3JvdWdoZmFyZS9NUwp0aG9yb3VnaGdvaW5nCnRob3JvdWdobmVzcy9NCnRob3NlCnRob3UvTVMKdGhvdWdoCnRob3VnaHQvU00KdGhvdWdodGZ1bC9ZUAp0aG91Z2h0ZnVsbmVzcy9NCnRob3VnaHRsZXNzL1BZCnRob3VnaHRsZXNzbmVzcy9NCnRob3VzYW5kL01IUwp0aG91c2FuZGZvbGQKdGhvdXNhbmR0aC9NCnRob3VzYW5kdGhzCnRocmFsbC9TTURHCnRocmFsbGRvbS9NCnRocmFzaC9KTURSU1pHCnRocmFzaGVyL00KdGhyYXNoaW5nL00KdGhyZWFkL1NNRFJaRwp0aHJlYWRiYXJlCnRocmVhZGVyL00KdGhyZWFkbGlrZQp0aHJlYWR5L1RSCnRocmVhdC9TTU5YCnRocmVhdGVuL0RHCnRocmVhdGVuaW5nL1kKdGhyZWUvU00KdGhyZWVmb2xkCnRocmVlcGVuY2UvTQp0aHJlZXNjb3JlL01TCnRocmVlc29tZS9TTQp0aHJlbm9keS9TTQp0aHJlc2gvTURSU1pHCnRocmVzaGVyL00KdGhyZXNob2xkL1NNCnRocmV3CnRocmljZQp0aHJpZnQvU00KdGhyaWZ0aWx5CnRocmlmdGluZXNzL00KdGhyaWZ0bGVzcwp0aHJpZnR5L1BUUgp0aHJpbGwvU01EUlpHCnRocmlsbGVyL00KdGhyaWxsaW5nL1kKdGhyaXZlL0RTRwp0aHJvYXQvU00KdGhyb2F0aWx5CnRocm9hdGluZXNzL00KdGhyb2F0eS9SVFAKdGhyb2IvU00KdGhyb2JiZWQKdGhyb2JiaW5nCnRocm9lL1NNCnRocm9tYmkKdGhyb21ib2x5dGljCnRocm9tYm9zZXMKdGhyb21ib3Npcy9NCnRocm9tYm90aWMKdGhyb21idXMvTQp0aHJvbmUncwp0aHJvbmUvUwp0aHJvbmcvR1NNRAp0aHJvdHRsZS9EUlNNWkcKdGhyb3R0bGVyL00KdGhyb3VnaAp0aHJvdWdob3V0CnRocm91Z2hwdXQvTQp0aHJvdy9TTVJaRwp0aHJvd2F3YXkvU00KdGhyb3diYWNrL1NNCnRocm93ZXIvTQp0aHJvd24KdGhydQp0aHJ1bS9TTQp0aHJ1bW1lZAp0aHJ1bW1pbmcKdGhydXNoL01TCnRocnVzdC9HU00KdGhydXdheS9NUwp0aHVkL01TCnRodWRkZWQKdGh1ZGRpbmcKdGh1Zy9NUwp0aHVnZ2VyeS9NCnRodWdnaXNoCnRodWxpdW0vTQp0aHVtYi9TTURHCnRodW1ibmFpbC9TTQp0aHVtYnByaW50L1NNCnRodW1ic2NyZXcvU00KdGh1bWJ0YWNrL1NNCnRodW1wL1NNREcKdGh1bXBpbmcvTQp0aHVuZGVyL1pHTURSUwp0aHVuZGVyYm9sdC9TTQp0aHVuZGVyY2xhcC9TTQp0aHVuZGVyY2xvdWQvTVMKdGh1bmRlcmVyL00KdGh1bmRlcmhlYWQvU00KdGh1bmRlcm91cy9ZCnRodW5kZXJzaG93ZXIvU00KdGh1bmRlcnN0b3JtL1NNCnRodW5kZXJzdHJ1Y2sKdGh1bmRlcnkKdGh1bmsvUwp0aHVzCnRod2Fjay9aR1NNRFIKdGh3YWNrZXIvTQp0aHdhcnQvR1NNRAp0aHkKdGh5bWUvTQp0aHltaW5lL00KdGh5bXVzL01TCnRoeXJvaWQvTVMKdGh5cm9pZGFsCnRoeXNlbGYKdGkvTVJaCnRpYXJhL1NNCnRpYmlhL00KdGliaWFlCnRpYmlhbAp0aWMvU00KdGljay9NRFJaR1MKdGlja2VyL00KdGlja2V0L0dTTUQKdGlja2luZy9NCnRpY2tsZS9EUlNNWkcKdGlja2xlci9NCnRpY2tsaXNoL1lQCnRpY2tsaXNobmVzcy9NCnRpY2t0YWNrdG9lL00KdGlja3RvY2svTVMKdGlkYWwvWQp0aWRiaXQvU00KdGlkZGxlci9TCnRpZGRseQp0aWRkbHl3aW5rL1MKdGlkZGx5d2lua3MvTQp0aWRlL01HSkRTCnRpZGVsYW5kL1NNCnRpZGVtYXJrL1MKdGlkZXdhdGVyL01TCnRpZGV3YXkvTVMKdGlkaWx5L1UKdGlkaW5lc3MvVU0KdGlkaW5ncy9NCnRpZHkvRFJTTVRHUAp0aWUncwp0aWUvQVVTRAp0aWViYWNrL01TCnRpZWJyZWFrL1JTWgp0aWVicmVha2VyL00KdGllcGluL1MKdGllci9NRAp0aWZmL01ER1MKdGlnZXIvU00KdGlnZXJpc2gKdGlnaHQvU05SWVBYVAp0aWdodGVuL1pHRFIKdGlnaHRlbmVyL00KdGlnaHRmaXN0ZWQKdGlnaHRuZXNzL00KdGlnaHRyb3BlL01TCnRpZ2h0cy9NCnRpZ2h0d2FkL01TCnRpZ3Jlc3MvTVMKdGlsCnRpbGFwaWEKdGlsZGUvU00KdGlsZS9NWkdEUlMKdGlsZXIvTQp0aWxpbmcvTQp0aWxsJ3MKdGlsbC9FRFJaR1MKdGlsbGFibGUKdGlsbGFnZS9NCnRpbGxlci9FTQp0aWx0L01ER1MKdGltYmVyL1NNREcKdGltYmVybGFuZC9NCnRpbWJlcmxpbmUvTVMKdGltYnJlL1NNCnRpbWJyZWwvU00KdGltZS9NWVpHSkRSUwp0aW1la2VlcGVyL01TCnRpbWVrZWVwaW5nL00KdGltZWxlc3MvUFkKdGltZWxlc3NuZXNzL00KdGltZWxpbmUvTVMKdGltZWxpbmVzcy9VTQp0aW1lbHkvVVBSVAp0aW1lb3V0L1NNCnRpbWVwaWVjZS9NUwp0aW1lci9NCnRpbWVzY2FsZS9TCnRpbWVzZXJ2ZXIvU00KdGltZXNlcnZpbmcvTQp0aW1lc2hhcmUvUwp0aW1ldGFibGUvRFNNRwp0aW1ld29ybgp0aW1lem9uZQp0aW1pZC9SWVRQCnRpbWlkaXR5L00KdGltaWRuZXNzL00KdGltaW5nL00KdGltb3JvdXMvUFkKdGltb3JvdXNuZXNzL00KdGltb3RoeS9NCnRpbXBhbmkvTQp0aW1wYW5pc3QvU00KdGluL1NNCnRpbmN0dXJlL01HRFMKdGluZGVyL00KdGluZGVyYm94L01TCnRpbmUvTVMKdGluZm9pbC9NCnRpbmcvTURZRwp0aW5nZS9TTQp0aW5nZWluZwp0aW5nbGUvRFNNR0oKdGluZ2xpbmcvTQp0aW5pbmVzcy9NCnRpbmtlci9aR1NNRFIKdGlua2VyZXIvTQp0aW5rbGUvRFNNRwp0aW5uZWQKdGlubmluZXNzL00KdGlubmluZwp0aW5uaXR1cy9NCnRpbm55L1BSVAp0aW5wbGF0ZS9NCnRpbnBvdAp0aW5zZWwvR1NNRAp0aW5zbWl0aC9NCnRpbnNtaXRocwp0aW50L01ER1MKdGludGlubmFidWxhdGlvbi9NUwp0aW50eXBlL01TCnRpbndhcmUvTQp0aW55L1JUUAp0aXAvU00KdGlwcGVkCnRpcHBlci9TTQp0aXBwZXQvU00KdGlwcGV4L0dEUwp0aXBwaW5nCnRpcHBsZS9EUlNNWkcKdGlwcGxlci9NCnRpcHNpbHkKdGlwc2luZXNzL00KdGlwc3Rlci9NUwp0aXBzeS9SUFQKdGlwdG9lL0RTTQp0aXB0b2VpbmcKdGlwdG9wL1NNCnRpcmFkZS9TTQp0aXJhbWlzdS9NUwp0aXJlJ3MKdGlyZS9BR0RTCnRpcmVkL1BSWVQKdGlyZWRuZXNzL00KdGlyZWxlc3MvWVAKdGlyZWxlc3NuZXNzL00KdGlyZXNvbWUvUFkKdGlyZXNvbWVuZXNzL00KdGlzc3VlL1NNCnRpdC9TTQp0aXRhbi9TTQp0aXRhbmljCnRpdGFuaXVtL00KdGl0Y2gvUwp0aXRjaHkKdGl0aGUvRFJTTVpHCnRpdGhlci9NCnRpdGlhbi9NCnRpdGlsbGF0ZS9EU0dOCnRpdGlsbGF0aW5nL1kKdGl0aWxsYXRpb24vTQp0aXRpdmF0ZS9EU0dOCnRpdGl2YXRpb24vTQp0aXRsZS9EU01HCnRpdGxlZC9VCnRpdGxlaG9sZGVyL01TCnRpdGxpc3QvTVMKdGl0bWljZQp0aXRtb3VzZS9NCnRpdHRlci9TR01ECnRpdHRsZS9TTQp0aXR0eS9TCnRpdHVsYXIKdGl6egp0aXp6eS9TTQp0bgp0bnBrCnRvL0lVCnRvYWQvTVMKdG9hZHN0b29sL01TCnRvYWR5L0RTTUcKdG9hZHlpc20vTQp0b2FzdC9TTURSWkcKdG9hc3Rlci9NCnRvYXN0bWFzdGVyL1NNCnRvYXN0bWlzdHJlc3MvTVMKdG9hc3R5L1RSUwp0b2JhY2NvL01TCnRvYmFjY29uaXN0L1NNCnRvYm9nZ2FuL1pHU01EUgp0b2JvZ2dhbmVyL00KdG9ib2dnYW5pbmcvTQp0b2NjYXRhL1MKdG9jc2luL1NNCnRvZGF5L00KdG9kZGxlL0RSU01aRwp0b2RkbGVyL00KdG9kZHkvU00KdG9lL0RTTQp0b2VjYXAvU00KdG9laG9sZC9NUwp0b2VpbmcKdG9lbmFpbC9NUwp0b2VyYWcvUwp0b2ZmL1MKdG9mZmVlL1NNCnRvZnUvTQp0b2cvU00KdG9nYS9NRFMKdG9nZXRoZXIvUAp0b2dldGhlcm5lc3MvTQp0b2dnZWQKdG9nZ2luZwp0b2dnbGUvRFNNRwp0b2dzL00KdG9pbC9NRFJaR1MKdG9pbGVyL00KdG9pbGV0L01ER1MKdG9pbGV0cnkvU00KdG9pbGV0dGUvTQp0b2lsc29tZQp0b2tlL01HRFMKdG9rZW4vU00KdG9rZW5pc20vTQp0b2xkL0FVCnRvbGUvTQp0b2xlcmFibGUvSQp0b2xlcmFibHkvSQp0b2xlcmFuY2UvSU0KdG9sZXJhbmNlcwp0b2xlcmFudC9JWQp0b2xlcmF0ZS9HTkRTCnRvbGVyYXRpb24vTQp0b2xsL01ER1MKdG9sbGJvb3RoL00KdG9sbGJvb3Rocwp0b2xsZ2F0ZS9TTQp0b2xsd2F5L1NNCnRvbHVlbmUvTQp0b20vU00KdG9tYWhhd2svU0dNRAp0b21hdG8vTQp0b21hdG9lcwp0b21iL01ER1MKdG9tYm9sYS9TCnRvbWJveS9NUwp0b21ib3lpc2gKdG9tYnN0b25lL01TCnRvbWNhdC9NUwp0b21lL01TCnRvbWZvb2xlcnkvU00KdG9tb2dyYXBoaWMKdG9tb2dyYXBoeS9NCnRvbW9ycm93L01TCnRvbXRpdC9NUwp0b24vU00KdG9uYWwvWQp0b25hbGl0eS9TTQp0b25lJ3MKdG9uZS9JWkdEUlMKdG9uZWFybS9TTQp0b25lbGVzcy9ZCnRvbmVyL0lNCnRvbmcvTURHUwp0b25ndWUvTUdEUwp0b25ndWVsZXNzCnRvbmljL1NNCnRvbmlnaHQvTQp0b25uYWdlL1NNCnRvbm5lL1NNCnRvbnNpbC9NUwp0b25zaWxsZWN0b215L1NNCnRvbnNpbGxpdGlzL00KdG9uc29yaWFsCnRvbnN1cmUvRFNNRwp0b255L1JUCnRvbwp0b29rL0EKdG9vbCdzCnRvb2wvQURHUwp0b29sYmFyL00KdG9vbGJveC9NUwp0b29sa2l0CnRvb2xtYWtlci9NUwp0b290L01EUlpHUwp0b290ZXIvTQp0b290aC9NRAp0b290aGFjaGUvTVMKdG9vdGhicnVzaC9NUwp0b290aGlseQp0b290aGxlc3MKdG9vdGhwYXN0ZS9TTQp0b290aHBpY2svU00KdG9vdGhzb21lCnRvb3RoeS9SVAp0b290bGUvR0RTCnRvb3RzaWUvUwp0b3AvU00KdG9wYXovTVMKdG9wY29hdC9TTQp0b3BkcmVzc2luZy9TTQp0b3BlZS9TCnRvcGZsaWdodAp0b3BpCnRvcGlhcnkvTQp0b3BpYy9TTQp0b3BpY2FsL1kKdG9waWNhbGl0eS9NCnRvcGtub3QvU00KdG9wbGVzcwp0b3BtYXN0L1NNCnRvcG1vc3QKdG9wbm90Y2gKdG9wb2dyYXBoZXIvU00KdG9wb2dyYXBoaWMKdG9wb2dyYXBoaWNhbC9ZCnRvcG9ncmFwaHkvU00KdG9wb2xvZ2ljYWwvWQp0b3BvbG9neQp0b3BwZWQKdG9wcGVyL01TCnRvcHBpbmcvU00KdG9wcGxlL0dEUwp0b3BzYWlsL1NNCnRvcHNpZGUvU00KdG9wc29pbC9NCnRvcHNwaW4vTQp0b3F1ZS9TTQp0b3IvU00KdG9yY2gvR01EUwp0b3JjaGJlYXJlci9NUwp0b3JjaGxpZ2h0L00KdG9yZQp0b3JlYWRvci9NUwp0b3JtZW50L1NNREcKdG9ybWVudGluZy9ZCnRvcm1lbnRvci9NUwp0b3JuCnRvcm5hZG8vTQp0b3JuYWRvZXMKdG9ycGVkby9HTUQKdG9ycGVkb2VzCnRvcnBpZC9ZCnRvcnBpZGl0eS9NCnRvcnBvci9NCnRvcnF1ZS9NR0RTCnRvcnJlbnQvU00KdG9ycmVudGlhbAp0b3JyaWQvWVAKdG9ycmlkaXR5L00KdG9ycmlkbmVzcy9NCnRvcnNpb24vTQp0b3JzaW9uYWwKdG9yc28vU00KdG9ydCdzCnRvcnQvRkVBUwp0b3J0ZS9TTQp0b3J0ZWxsaW5pL00KdG9ydGlsbGEvTVMKdG9ydG9pc2UvTVMKdG9ydG9pc2VzaGVsbC9TTQp0b3J0b25pL00KdG9ydHVvdXMvUFkKdG9ydHVvdXNuZXNzL00KdG9ydHVyZS9EUlNNWkcKdG9ydHVyZXIvTQp0b3J0dXJvdXMKdG9ydXMKdG9zaAp0b3NzL01EUlNaRwp0b3NzdXAvTVMKdG90L1NHTUQKdG90YWwvR1NNRFkKdG90YWxpdGFyaWFuL1NNCnRvdGFsaXRhcmlhbmlzbS9NCnRvdGFsaXR5L1NNCnRvdGFsaXphdG9yL1NNCnRvdGUvTVMKdG90ZW0vU00KdG90ZW1pYwp0b3R0ZWQKdG90dGVyL1pHTURSUwp0b3R0ZXJlci9NCnRvdHRpbmcKdG91Y2FuL01TCnRvdWNoL0FHTURTCnRvdWNoZG93bi9TTQp0b3VjaGUvQkoKdG91Y2hlZC9VCnRvdWNoaWx5CnRvdWNoaW5lc3MvTQp0b3VjaGluZy9ZCnRvdWNobGluZS9TCnRvdWNocGFwZXIvUwp0b3VjaHNjcmVlbi9NUwp0b3VjaHN0b25lL01TCnRvdWNoeS9SUFQKdG91Z2gvWFRHTUROUllQCnRvdWdoZW4vWkdEUgp0b3VnaGVuZXIvTQp0b3VnaGllL1NNCnRvdWdobmVzcy9NCnRvdWdocwp0b3VwZWUvTVMKdG91ci9DRlNHRE0KdG91cmlzbS9NCnRvdXJpc3QvTVMKdG91cmlzdGljCnRvdXJpc3R5CnRvdXJtYWxpbmUvTQp0b3VybmFtZW50L1NNCnRvdXJuZXkvTVMKdG91cm5pcXVldC9NUwp0b3VzbGUvR0RTCnRvdXQvTURHUwp0b3cvU1pHTURSCnRvd2FyZC9TCnRvd2JvYXQvTVMKdG93ZWwvSkdTTUQKdG93ZWxldHRlL1NNCnRvd2VsaW5nL00KdG93ZXIvR01ECnRvd2hlYWQvTURTCnRvd2hlZS9NUwp0b3dsaW5lL01TCnRvd24vTVMKdG93bmVlL1MKdG93bmhvdXNlL01TCnRvd25pZS9NUwp0b3duc2ZvbGsvTQp0b3duc2hpcC9NUwp0b3duc21hbi9NCnRvd25zbWVuCnRvd25zcGVvcGxlL00KdG93bnN3b21hbi9NCnRvd25zd29tZW4KdG93cGF0aC9NCnRvd3BhdGhzCnRvd3JvcGUvU00KdG94ZW1pYS9NCnRveGljCnRveGljaXR5L1NNCnRveGljb2xvZ2ljYWwKdG94aWNvbG9naXN0L1NNCnRveGljb2xvZ3kvTQp0b3hpbi9TTQp0b3kvU0dNRAp0b3lib3kvUwp0cgp0cmFiZWN1bGEKdHJhYmVjdWxhcgp0cmFiZWN1bGUKdHJhY2UvSkRSU01aRwp0cmFjZWFibGUvVQp0cmFjZXIvTQp0cmFjZXJ5L1NNCnRyYWNoZWEvTQp0cmFjaGVhZQp0cmFjaGVhbAp0cmFjaGVvdG9teS9TTQp0cmFjaW5nL00KdHJhY2svWkdTTURSCnRyYWNrYmFsbC9TTQp0cmFja2VyL00KdHJhY2tsZXNzCnRyYWNrc3VpdC9TCnRyYWN0J3MKdHJhY3QvQ0VLRkFTCnRyYWN0YWJpbGl0eS9JTQp0cmFjdGFibGUvSQp0cmFjdGFibHkvSQp0cmFjdGlvbi9FRkFDS00KdHJhY3Rvci9GQ0tNUwp0cmFkCnRyYWRlL0pEUlNNWkcKdHJhZGVtYXJrL1NHTUQKdHJhZGVyL00KdHJhZGVzbWFuL00KdHJhZGVzbWVuCnRyYWRlc3Blb3BsZS9NCnRyYWRlc3dvbWFuL00KdHJhZGVzd29tZW4KdHJhZGluZy9NCnRyYWRpdGlvbi9NUwp0cmFkaXRpb25hbC9ZCnRyYWRpdGlvbmFsaXNtL00KdHJhZGl0aW9uYWxpc3QvU00KdHJhZHVjZS9EUlNaRwp0cmFkdWNlci9NCnRyYWZmaWMvU00KdHJhZmZpY2tlZAp0cmFmZmlja2VyL1NNCnRyYWZmaWNraW5nL00KdHJhZ2VkaWFuL1NNCnRyYWdlZGllbm5lL01TCnRyYWdlZHkvU00KdHJhZ2ljCnRyYWdpY2FsbHkKdHJhZ2ljb21lZHkvU00KdHJhZ2ljb21pYwp0cmFpbC9aR1NNRFIKdHJhaWxibGF6ZXIvTVMKdHJhaWxibGF6aW5nL00KdHJhaWxlci9NCnRyYWluL1pHU01EUkIKdHJhaW5lZC9VCnRyYWluZWUvU00KdHJhaW5lci9NCnRyYWluaW5nL00KdHJhaW5sb2FkL01TCnRyYWlubWFuL00KdHJhaW5tZW4KdHJhaW5zcG90dGVyL1MKdHJhaW5zcG90dGluZwp0cmFpcHNlL0RTTUcKdHJhaXQvU00KdHJhaXRvci9TTQp0cmFpdG9yb3VzL1kKdHJhamVjdG9yeS9TTQp0cmFtL01TCnRyYW1jYXIvUwp0cmFtbGluZXMKdHJhbW1lZAp0cmFtbWVsL1NHTUQKdHJhbW1lbGVkL1UKdHJhbW1pbmcKdHJhbXAvWkdTTURSCnRyYW1wZXIvTQp0cmFtcGxlL0RSU01aRwp0cmFtcGxlci9NCnRyYW1wb2xpbmUvTUdEUwp0cmFtd2F5L1MKdHJhbmNlL01TCnRyYW5jaGUvUwp0cmFucXVpbC9SWVQKdHJhbnF1aWxpdHkvTQp0cmFucXVpbGl6ZS9aR0RSUwp0cmFucXVpbGl6ZXIvTQp0cmFucy9JCnRyYW5zYWN0L0RHUwp0cmFuc2FjdGlvbi9TTQp0cmFuc2FjdG9yL01TCnRyYW5zYXRsYW50aWMKdHJhbnNjZWl2ZXIvU00KdHJhbnNjZW5kL0dTRAp0cmFuc2NlbmRlbmNlL00KdHJhbnNjZW5kZW50CnRyYW5zY2VuZGVudGFsL1kKdHJhbnNjZW5kZW50YWxpc20vTQp0cmFuc2NlbmRlbnRhbGlzdC9TTQp0cmFuc2NvbnRpbmVudGFsCnRyYW5zY3JpYmUvWkdEUlMKdHJhbnNjcmliZXIvTQp0cmFuc2NyaXB0L01TCnRyYW5zY3JpcHRpb24vU00KdHJhbnNkdWNlci9NUwp0cmFuc2VjdC9EU0cKdHJhbnNlcHQvTVMKdHJhbnNmZXIvTUJTCnRyYW5zZmVyYWwvTVMKdHJhbnNmZXJlbmNlL00KdHJhbnNmZXJyZWQKdHJhbnNmZXJyaW5nCnRyYW5zZmlndXJhdGlvbi9NCnRyYW5zZmlndXJlL0dEUwp0cmFuc2Zpbml0ZQp0cmFuc2ZpeC9EU0cKdHJhbnNmb3JtL0JTWkdNRFIKdHJhbnNmb3JtYXRpb24vU00KdHJhbnNmb3JtZXIvTQp0cmFuc2Z1c2UvRFNYR04KdHJhbnNmdXNpb24vTQp0cmFuc2dlbmRlci9TCnRyYW5zZ2VuaWMKdHJhbnNncmVzcy9HRFMKdHJhbnNncmVzc2lvbi9TTQp0cmFuc2dyZXNzb3IvU00KdHJhbnNpZW5jZS9NCnRyYW5zaWVuY3kvTQp0cmFuc2llbnQvU01ZCnRyYW5zaXN0b3IvU00KdHJhbnNpc3Rvcml6ZS9EU0cKdHJhbnNpdC9TR01ECnRyYW5zaXRpb24vR1NNRAp0cmFuc2l0aW9uYWwvWQp0cmFuc2l0aXZlL0lTTVkKdHJhbnNpdGl2ZW5lc3MvTQp0cmFuc2l0aXZpdHkvTQp0cmFuc2l0b3J5CnRyYW5zbAp0cmFuc2xhdGFibGUvVQp0cmFuc2xhdGUvRFNHTkJYCnRyYW5zbGF0ZWQvVQp0cmFuc2xhdGlvbi9NCnRyYW5zbGF0b3IvU00KdHJhbnNsaXRlcmF0ZS9EU0dOWAp0cmFuc2xpdGVyYXRpb24vTQp0cmFuc2xvY2F0aW9uCnRyYW5zbHVjZW5jZS9NCnRyYW5zbHVjZW5jeS9NCnRyYW5zbHVjZW50L1kKdHJhbnNtaWdyYXRlL0dORFMKdHJhbnNtaWdyYXRpb24vTQp0cmFuc21pc3NpYmxlCnRyYW5zbWlzc2lvbi9NUwp0cmFuc21pdC9TCnRyYW5zbWl0dGFibGUKdHJhbnNtaXR0YWwvTQp0cmFuc21pdHRhbmNlL00KdHJhbnNtaXR0ZWQKdHJhbnNtaXR0ZXIvU00KdHJhbnNtaXR0aW5nCnRyYW5zbW9ncmlmaWNhdGlvbi9NCnRyYW5zbW9ncmlmeS9EU05HCnRyYW5zbXV0YXRpb24vU00KdHJhbnNtdXRlL0JEU0cKdHJhbnNuYXRpb25hbC9NUwp0cmFuc29jZWFuaWMKdHJhbnNvbS9TTQp0cmFuc3BhY2lmaWMKdHJhbnNwYXJlbmN5L1NNCnRyYW5zcGFyZW50L1kKdHJhbnNwaXJhdGlvbi9NCnRyYW5zcGlyZS9EU0cKdHJhbnNwbGFudC9NREdTCnRyYW5zcGxhbnRhdGlvbi9NCnRyYW5zcG9sYXIKdHJhbnNwb25kZXIvU00KdHJhbnNwb3J0L0JTWkdNRFIKdHJhbnNwb3J0YXRpb24vTQp0cmFuc3BvcnRlci9NCnRyYW5zcG9zZS9EU0cKdHJhbnNwb3NpdGlvbi9NUwp0cmFuc3NleHVhbC9TTQp0cmFuc3NleHVhbGlzbS9NCnRyYW5zc2hpcC9TTAp0cmFuc3NoaXBtZW50L00KdHJhbnNzaGlwcGVkCnRyYW5zc2hpcHBpbmcKdHJhbnN1YnN0YW50aWF0aW9uL00KdHJhbnN2ZXJzZS9NWVMKdHJhbnN2ZXN0aXNtL00KdHJhbnN2ZXN0aXRlL01TCnRyYXAvTVMKdHJhcGRvb3IvTVMKdHJhcGV6ZS9TTQp0cmFwZXppdW0vU00KdHJhcGV6b2lkL1NNCnRyYXBlem9pZGFsCnRyYXBwYWJsZQp0cmFwcGVkCnRyYXBwZXIvU00KdHJhcHBpbmcvUwp0cmFwcGluZ3MvTQp0cmFwc2hvb3RpbmcvTQp0cmFzaC9HTURTCnRyYXNoY2FuL01TCnRyYXNoaW5lc3MvTQp0cmFzaHkvUlBUCnRyYXVtYS9NUwp0cmF1bWF0aWMKdHJhdW1hdGljYWxseQp0cmF1bWF0aXplL0dEUwp0cmF2YWlsL1NHTUQKdHJhdmVsL01EUlNaR0oKdHJhdmVsZWQvVQp0cmF2ZWxlci9NCnRyYXZlbGluZy9NCnRyYXZlbG9ndWUvTVMKdHJhdmVyc2FsL1NNCnRyYXZlcnNlL0RTTUcKdHJhdmVzdHkvR0RTTQp0cmF3bC9aR1NNRFIKdHJhd2xlci9NCnRyYXkvTVMKdHJlYWNoZXJvdXMvUFkKdHJlYWNoZXJvdXNuZXNzL00KdHJlYWNoZXJ5L1NNCnRyZWFjbGUvTQp0cmVhY2x5CnRyZWFkL0FHU00KdHJlYWRsZS9EU01HCnRyZWFkbWlsbC9NUwp0cmVhcwp0cmVhc29uL0JNCnRyZWFzb25vdXMKdHJlYXN1cmUvRFJTTVpHCnRyZWFzdXJlci9NCnRyZWFzdXJ5L1NNCnRyZWF0L0FHU01ECnRyZWF0YWJsZQp0cmVhdGVkL1UKdHJlYXRpc2UvU00KdHJlYXRtZW50L01TCnRyZWF0eS9TTQp0cmVibGUvTUdEUwp0cmVlL01EUwp0cmVlaW5nCnRyZWVsZXNzCnRyZWVsaWtlCnRyZWVsaW5lCnRyZWV0b3AvU00KdHJlZm9pbC9TTQp0cmVrL01TCnRyZWtrZWQKdHJla2tlci9TTQp0cmVra2luZwp0cmVsbGlzL0dNRFMKdHJlbWF0b2RlL01TCnRyZW1ibGUvRFNNRwp0cmVtZW5kb3VzL1kKdHJlbW9sby9TTQp0cmVtb3IvTVMKdHJlbXVsb3VzL1BZCnRyZW11bG91c25lc3MvTQp0cmVuY2gncwp0cmVuY2gvQURTRwp0cmVuY2hhbmN5L00KdHJlbmNoYW50L1kKdHJlbmNoZXIvTVMKdHJlbmNoZXJtYW4vTQp0cmVuY2hlcm1lbgp0cmVuZC9HU01ECnRyZW5kaWx5CnRyZW5kaW5lc3MvTQp0cmVuZHNldHRlci9TCnRyZW5kc2V0dGluZwp0cmVuZHkvUlNNUFQKdHJlcGlkYXRpb24vTQp0cmVzcGFzcy9NRFJTWkcKdHJlc3Bhc3Nlci9NCnRyZXNzL0VNUwp0cmVzdGxlL01TCnRyZXdzCnRyZXkvTVMKdHJpYWQvU00KdHJpYWdlL00KdHJpYWwvQVNNCnRyaWFsZWQKdHJpYWxpbmcKdHJpYW5nbGUvU00KdHJpYW5ndWxhci9ZCnRyaWFuZ3VsYXRlL0dORFMKdHJpYW5ndWxhdGlvbi9NCnRyaWF0aGxldGUvUwp0cmlhdGhsb24vU00KdHJpYmFsCnRyaWJhbGlzbS9NCnRyaWJlL1NNCnRyaWJlc21hbi9NCnRyaWJlc21lbgp0cmliZXN3b21hbi9NCnRyaWJlc3dvbWVuCnRyaWJ1bGF0aW9uL1NNCnRyaWJ1bmFsL1NNCnRyaWJ1bmUvTVMKdHJpYnV0YXJ5L1NNCnRyaWJ1dGUncwp0cmlidXRlL0ZTCnRyaWNlL00KdHJpY2VudGVubmlhbC9NUwp0cmljZXBzL01TCnRyaWNlcmF0b3BzL00KdHJpY2hpbmEvTQp0cmljaGluYWUKdHJpY2hpbm9zaXMvTQp0cmljay9HU01ECnRyaWNrZXJ5L00KdHJpY2tpbHkKdHJpY2tpbmVzcy9NCnRyaWNrbGUvTUdEUwp0cmlja3N0ZXIvU00KdHJpY2t5L1RSUAp0cmljb2xvci9TTQp0cmljeWNsZS9TTQp0cmlkZW50L01TCnRyaWVkL1UKdHJpZW5uaWFsL01ZUwp0cmllci9TTQp0cmlmZWN0YS9TTQp0cmlmbGUvTVpHRFJTCnRyaWZsZXIvTQp0cmlmb2NhbHMvTQp0cmlnL00KdHJpZ2dlci9NRFNHCnRyaWdseWNlcmlkZS9NUwp0cmlnb25vbWV0cmljCnRyaWdvbm9tZXRyaWNhbAp0cmlnb25vbWV0cnkvTQp0cmlrZS9TTQp0cmlsYXRlcmFsL1MKdHJpbGJ5L1NNCnRyaWxsL0dTTUQKdHJpbGxpb24vU01ICnRyaWxsaW9udGgvTQp0cmlsbGlvbnRocwp0cmlsbGl1bS9NCnRyaWxvYml0ZS9TTQp0cmlsb2d5L1NNCnRyaW0vUE1ZUwp0cmltYXJhbi9NUwp0cmltZXN0ZXIvU00KdHJpbW1lZC9VCnRyaW1tZXIvU00KdHJpbW1lc3QKdHJpbW1pbmcvU00KdHJpbW1pbmdzL00KdHJpbW5lc3MvTQp0cmltb250aGx5CnRyaW5pdHJvdG9sdWVuZS9NCnRyaW5pdHkvU00KdHJpbmtldC9TTQp0cmlvL01TCnRyaXAvTVlTCnRyaXBhcnRpdGUKdHJpcGUvTQp0cmlwbGUvTUdEUwp0cmlwbGV0L1NNCnRyaXBsZXgvTVMKdHJpcGxpY2F0ZS9NR0RTCnRyaXBvZC9NUwp0cmlwb2RhbAp0cmlwb3MKdHJpcHBlZAp0cmlwcGVyL1NNCnRyaXBwaW5nCnRyaXB0eWNoL00KdHJpcHR5Y2hzCnRyaXB3aXJlL1MKdHJpcmVtZS9TTQp0cmlzZWN0L1NERwp0cmlzZWN0aW9uL00KdHJpdGUvRlBZVAp0cml0ZW5lc3MvRk0KdHJpdGVyCnRyaXRpdW0vTQp0cml1bXBoL0dNRAp0cml1bXBoYWwKdHJpdW1waGFsaXNtCnRyaXVtcGhhbGlzdAp0cml1bXBoYW50L1kKdHJpdW1waHMKdHJpdW12aXIvTVMKdHJpdW12aXJhdGUvU00KdHJpdmFsZW50CnRyaXZldC9NUwp0cml2aWEvTQp0cml2aWFsL1kKdHJpdmlhbGl0eS9TTQp0cml2aWFsaXphdGlvbi9NCnRyaXZpYWxpemUvR0RTCnRyaXZpdW0vTQp0cm9jaGFpYwp0cm9jaGVlL1NNCnRyb2QvQVUKdHJvZGRlbi9BCnRyb2dsb2R5dGUvU00KdHJvaWthL01TCnRyb2xsL1NHTUQKdHJvbGxleS9TTQp0cm9sbGV5YnVzL01TCnRyb2xsb3AvU00KdHJvbWJvbmUvTVMKdHJvbWJvbmlzdC9NUwp0cm9tcC9TR0QKdHJvbi9TCnRyb29wL1NaR01EUgp0cm9vcGVyL00KdHJvb3BzaGlwL01TCnRyb3BlL1NNCnRyb3BoeS9TTQp0cm9waWMvTVMKdHJvcGljYWwvWQp0cm9waWNzL00KdHJvcGlzbS9TTQp0cm9wb3NwaGVyZS9TTQp0cm90L01TCnRyb3RoL00KdHJvdHRlZAp0cm90dGVyL1NNCnRyb3R0aW5nCnRyb3ViYWRvdXIvTVMKdHJvdWJsZS9EU01HCnRyb3VibGVkL1UKdHJvdWJsZW1ha2VyL01TCnRyb3VibGVzaG9vdC9EUlpHUwp0cm91Ymxlc2hvb3Rlci9NCnRyb3VibGVzaG9vdGluZy9NCnRyb3VibGVzaG90CnRyb3VibGVzb21lL1kKdHJvdWdoL00KdHJvdWdocwp0cm91bmNlL0RSU1pHCnRyb3VuY2VyL00KdHJvdXBlL01aR0RSUwp0cm91cGVyL00KdHJvdXNlci9TTQp0cm91c2Vycy9NCnRyb3Vzc2VhdS9NCnRyb3Vzc2VhdXgKdHJvdXQvU00KdHJvdmUvU00KdHJvdy9EU0cKdHJvd2VsL01EU0cKdHJveS9TCnRydWFuY3kvTQp0cnVhbnQvR01EUwp0cnVjZS9TTQp0cnVjay9TWkdNRFIKdHJ1Y2tlci9NCnRydWNraW5nL00KdHJ1Y2tsZS9NR0RTCnRydWNrbG9hZC9TTQp0cnVjdWxlbmNlL00KdHJ1Y3VsZW50L1kKdHJ1ZGdlL01HRFMKdHJ1ZS9NVEdEUlMKdHJ1ZWxvdmUvU00KdHJ1ZmZsZS9NUwp0cnVnL1MKdHJ1aXNtL01TCnRydWx5L1UKdHJ1bXAvU0dNRAp0cnVtcGVyeS9NCnRydW1wZXQvWkdNRFJTCnRydW1wZXRlci9NCnRydW5jYXRlL0dORFMKdHJ1bmNhdGlvbi9NCnRydW5jaGVvbi9TTQp0cnVuZGxlL01aR0RSUwp0cnVuZGxlci9NCnRydW5rL1NHTQp0cnVzcy9HTURTCnRydXN0L0VTR01ECnRydXN0ZWUvTVMKdHJ1c3RlZXNoaXAvU00KdHJ1c3RmdWwvRVkKdHJ1c3RmdWxuZXNzL00KdHJ1c3RpbmcvWQp0cnVzdHdvcnRoaW5lc3MvTQp0cnVzdHdvcnRoeS9UUFIKdHJ1c3R5L1RSU00KdHJ1dGgvWk1SCnRydXRoZXIvTQp0cnV0aGZ1bC9VWVAKdHJ1dGhmdWxuZXNzL1VNCnRydXRoaW5lc3MKdHJ1dGhzL1UKdHJ5J3MKdHJ5L0FHRFMKdHJ5aW5nL1kKdHJ5b3V0L1NNCnRyeXB0b3BoYW4KdHJ5c3QvU01ERwp0c2FyaXN0cwp0c2V0c2UvTVMKdHNwCnRzdW5hbWkvU00KdHR5cwp0dWIvU1pHTURSCnR1YmEvTVMKdHViYWwKdHViYnkvVFIKdHViZS9NUwp0dWJlbGVzcy9NCnR1YmVyL00KdHViZXJjbGUvU00KdHViZXJjdWxhcgp0dWJlcmN1bGluL00KdHViZXJjdWxvc2lzL00KdHViZXJjdWxvdXMKdHViZXJvc2UvTQp0dWJlcm91cwp0dWJmdWwvTVMKdHViaW5nL00KdHVidWxhcgp0dWJ1bGUvTVMKdHVjay9NRFJTWkcKdHVja2VyL01ERwp0dWZ0L01EUlNaRwp0dWZ0ZXIvTQp0dWcvU00KdHVnYm9hdC9NUwp0dWdnZWQKdHVnZ2luZwp0dWl0aW9uL0lNCnR1bGFyZW1pYS9NCnR1bGlwL1NNCnR1bGxlL00KdHVtL1MKdHVtYmxlL0RSU01aRwp0dW1ibGVkb3duCnR1bWJsZXIvTQp0dW1ibGV3ZWVkL1NNCnR1bWJsaW5nL00KdHVtYnJlbC9TTQp0dW1lc2NlbmNlL00KdHVtZXNjZW50CnR1bWlkCnR1bWlkaXR5L00KdHVtbXkvU00KdHVtb3IvU00KdHVtb3JvdXMKdHVtdWx0L1NNCnR1bXVsdHVvdXMvWQp0dW4vU1pHTURSCnR1bmEvTVMKdHVuZHJhL1NNCnR1bmUvTVMKdHVuZWZ1bC9ZUAp0dW5lZnVsbmVzcy9NCnR1bmVsZXNzL1kKdHVuZXIvTQp0dW5ldXAvU00KdHVuZ3N0ZW4vTQp0dW5pYy9TTQp0dW5uZWwvSlNNRFJaRwp0dW5uZWxlci9NCnR1bm55L1NNCnR1cGxlL1MKdHVwcGVuY2UKdHVwcGVubnkKdHVxdWUvU00KdHVyYmFuL1NNRAp0dXJiaWQKdHVyYmlkaXR5L00KdHVyYmluZS9TTQp0dXJiby9TTQp0dXJib2NoYXJnZS9aR0RSUwp0dXJib2NoYXJnZXIvTQp0dXJib2Zhbi9TTQp0dXJib2pldC9TTQp0dXJib3Byb3AvU00KdHVyYm90L1NNCnR1cmJ1bGVuY2UvTQp0dXJidWxlbnQvWQp0dXJkL01TCnR1cmR1Y2tlbi9TTQp0dXJlZW4vU00KdHVyZi9NRFNHCnR1cmZ5CnR1cmdpZC9ZCnR1cmdpZGl0eS9NCnR1cmtleS9TTQp0dXJtZXJpYy9TTQp0dXJtb2lsL01TCnR1cm4vQU1EUlNaRwp0dXJuYWJvdXQvU00KdHVybmFyb3VuZC9TTQp0dXJuYnVja2xlL1NNCnR1cm5jb2F0L1NNCnR1cm5lci9BTQp0dXJuaW5nL01TCnR1cm5pcC9TTQp0dXJua2V5L01TCnR1cm5vZmYvTVMKdHVybm91dC9NUwp0dXJub3Zlci9NUwp0dXJucGlrZS9NUwp0dXJuc3RpbGUvU00KdHVybnRhYmxlL1NNCnR1cnBlbnRpbmUvTQp0dXJwaXR1ZGUvTQp0dXJwcwp0dXJxdW9pc2UvU00KdHVycmV0L1NNRAp0dXJ0bGUvU00KdHVydGxlZG92ZS9TTQp0dXJ0bGVuZWNrL1NNRAp0dXNoL01TCnR1c2svTURTCnR1c3NsZS9EU01HCnR1c3NvY2svTVMKdHVzc29ja3kKdHV0L1NNCnR1dGVsYWdlL00KdHV0ZWxhcnkKdHV0b3IvU01ERwp0dXRvcmVkL1UKdHV0b3JpYWwvU00KdHV0b3JzaGlwL00KdHV0dGVkCnR1dHRpL1NNCnR1dHRpbmcKdHV0dS9NUwp0dXgvTVMKdHV4ZWRvL1NNCnR3YWRkbGUvTVpHRFJTCnR3YWRkbGVyL00KdHdhaW4vTQp0d2FuZy9TTURHCnR3YW5neS9SVAp0d2FzCnR3YXQvUwp0d2Vhay9TTURHCnR3ZWUKdHdlZWQvU00KdHdlZWRzL00KdHdlZWR5L1JUCnR3ZWVuCnR3ZWV0J3MKdHdlZXQvQVNERwp0d2VldGVyL1NNCnR3ZWV6ZXJzL00KdHdlbGZ0aC9NCnR3ZWxmdGhzCnR3ZWx2ZS9TTQp0d2VsdmVtb250aC9NCnR3ZWx2ZW1vbnRocwp0d2VudGlldGgvTQp0d2VudGlldGhzCnR3ZW50eS9TTUgKdHdlcmsvU0RHCnR3ZXJwL1NNCnR3aWNlCnR3aWRkbGUvTUdEUwp0d2lkZGx5CnR3aWcvTVMKdHdpZ2dlZAp0d2lnZ2luZwp0d2lnZ3kvVFIKdHdpbGlnaHQvTQp0d2lsaXQKdHdpbGwvTUQKdHdpbi9NRFJTWkcKdHdpbmUvU00KdHdpbmVyL00KdHdpbmdlL0RTTUcKdHdpbmsvU1kKdHdpbmtsZS9NR0pEUwp0d2lua2xpbmcvTQp0d2lubmVkCnR3aW5uaW5nCnR3aW5zZXQvUwp0d2lybC9TTURSWkcKdHdpcmxlci9NCnR3aXJseQp0d2lzdCdzCnR3aXN0L1VTREcKdHdpc3Rlci9NUwp0d2lzdHkvVFIKdHdpdC9NUwp0d2l0Y2gvR01EUwp0d2l0Y2h5L1JUCnR3aXR0ZWQKdHdpdHRlci9NRFNHCnR3aXR0ZXJ5CnR3aXR0aW5nCnR3aXh0CnR3by9TTQp0d29mZXIvU00KdHdvZm9sZAp0d29wZW5jZS9TTQp0d29wZW5ueQp0d29zb21lL1NNCnR3cAp0eWNvb24vU00KdHlpbmcvQVUKdHlrZS9NUwp0eW1wYW5pL00KdHltcGFuaWMKdHltcGFuaXN0L01TCnR5bXBhbnVtL1NNCnR5cGUncwp0eXBlL0FHRFMKdHlwZWNhc3QvR1MKdHlwZWZhY2UvTVMKdHlwZXNjcmlwdC9NUwp0eXBlc2V0L1MKdHlwZXNldHRlci9NUwp0eXBlc2V0dGluZy9NCnR5cGV3cml0ZS9SU1pHCnR5cGV3cml0ZXIvTQp0eXBld3JpdGluZy9NCnR5cGV3cml0dGVuCnR5cGV3cm90ZQp0eXBob2lkL00KdHlwaG9vbi9NUwp0eXBodXMvTQp0eXBpY2FsL1VZCnR5cGljYWxpdHkvTQp0eXBpZmljYXRpb24vTQp0eXBpZnkvTkdEUwp0eXBpbmcvTQp0eXBpc3QvU00KdHlwby9NUwp0eXBvZ3JhcGhlci9TTQp0eXBvZ3JhcGhpYwp0eXBvZ3JhcGhpY2FsL1kKdHlwb2dyYXBoeS9NCnR5cG9sb2d5L1NNCnR5cmFubmljCnR5cmFubmljYWwvWQp0eXJhbm5pemUvR0RTCnR5cmFubm9zYXVyL01TCnR5cmFubm9zYXVydXMvTVMKdHlyYW5ub3VzCnR5cmFubnkvU00KdHlyYW50L1NNCnR5cm8vTVMKdS9TCnViaXF1aXRvdXMvWQp1YmlxdWl0eS9NCnVkZGVyL1NNCnVmb2xvZ2lzdC9TTQp1Zm9sb2d5L00KdWdoCnVnbGluZXNzL00KdWdseS9SVFAKdWgKdWhmCnVrYXNlL1NNCnVrdWxlbGUvU00KdWxjZXIvU00KdWxjZXJhdGUvWERTR04KdWxjZXJhdGlvbi9NCnVsY2Vyb3VzCnVsbmEvTQp1bG5hZQp1bG5hcgp1bHN0ZXIvTVMKdWx0CnVsdGVyaW9yCnVsdGltYXRlL01ZCnVsdGltYXR1bS9NUwp1bHRpbW8KdWx0cmEvU00KdWx0cmFjb25zZXJ2YXRpdmUvU00KdWx0cmFoaWdoCnVsdHJhbGlnaHQvU00KdWx0cmFtYXJpbmUvTQp1bHRyYW1vZGVybgp1bHRyYXNvbmljCnVsdHJhc29uaWNhbGx5CnVsdHJhc291bmQvTVMKdWx0cmF2aW9sZXQvTQp1bHVsYXRlL0RTR05YCnVsdWxhdGlvbi9NCnVtCnVtYmVsL1NNCnVtYmVyL00KdW1iaWxpY2FsCnVtYmlsaWNpCnVtYmlsaWN1cy9NCnVtYnJhL1NNCnVtYnJhZ2UvTQp1bWJyZWxsYS9TTQp1bWlhay9TTQp1bWxhdXQvTVMKdW1wL1NHTUQKdW1waXJlL01HRFMKdW1wdGVlbi9ICnVuYWJyaWRnZWQvTVMKdW5hY2NlcHRhYmlsaXR5CnVuYWNjZXB0YWJsZQp1bmFjY29tbW9kYXRpbmcKdW5hY2NvdW50YWJseQp1bmFkdmVudHVyb3VzCnVuYWVzdGhldGljCnVuYWx0ZXJhYmx5CnVuYW1iaXRpb3VzCnVuYW5pbWl0eS9NCnVuYW5pbW91cy9ZCnVuYXBwYXJlbnQKdW5hcHBldGl6aW5nCnVuYXBwcmVjaWF0aXZlCnVuYXNzZXJ0aXZlCnVuYXNzdW1pbmcvWQp1bmF2YWlsaW5nL1kKdW5hd2FyZS9TCnVuYmVrbm93bnN0CnVuYmVuZC9TRwp1bmJlbnQKdW5iaWQKdW5ibGlua2luZy9ZCnVuYmx1c2hpbmcvWQp1bmJvc29tL0RHCnVuYm91bmQvRAp1bmJyZWFrYWJsZQp1bmJyb2tlbgp1bmNhbm55L1QKdW5jYXAvUwp1bmNhcmluZwp1bmNhdGFsb2d1ZWQKdW5jZWFzaW5nL1kKdW5jaGFuZ2VhYmxlCnVuY2hhcmFjdGVyaXN0aWMKdW5jaGFyaXRhYmxlCnVuY2hhc3RlL1JUCnVuY2lhbC9NCnVuY2xlL1NNCnVuY2xlYW4vRFJQVAp1bmNsZWFubHkvVAp1bmNsZWFyL0RSVAp1bmNvbWZvcnRhYmxlCnVuY29tbW9uL1QKdW5jb21wbGFpbmluZy9ZCnVuY29tcGxpY2F0ZWQKdW5jb21wcmVoZW5kaW5nL1kKdW5jb21wcm9taXNpbmcvWQp1bmNvbmRpdGlvbmFsL1kKdW5jb25nZW5pYWwKdW5jb25zY2lvbmFibGUKdW5jb25zY2lvbmFibHkKdW5jb25zY2lvdXMvTQp1bmNvbnN0aXR1dGlvbmFsL1kKdW5jb250cm9sbGFibHkKdW5jb250cm92ZXJzaWFsCnVuY29vbAp1bmNvb3BlcmF0aXZlCnVuY291dGgvWQp1bmNydXNoYWJsZQp1bmN0aW9uL1NNCnVuY3R1b3VzL1lQCnVuY3R1b3VzbmVzcy9NCnVuY3V0CnVuZGF1bnRlZC9ZCnVuZGVjaWRlZC9TTQp1bmRlbW9uc3RyYXRpdmUvWQp1bmRlbmlhYmx5CnVuZGVyCnVuZGVyYWNoaWV2ZS9MWkdEUlMKdW5kZXJhY2hpZXZlci9NCnVuZGVyYWN0L1NERwp1bmRlcmFnZQp1bmRlcmFwcHJlY2lhdGVkCnVuZGVyYXJtL1NNCnVuZGVyYmVsbHkvU00KdW5kZXJiaWQvUwp1bmRlcmJpZGRpbmcKdW5kZXJicnVzaC9NCnVuZGVyY2FycmlhZ2UvTVMKdW5kZXJjaGFyZ2UvTUdEUwp1bmRlcmNsYXNzL01TCnVuZGVyY2xhc3NtYW4vTQp1bmRlcmNsYXNzbWVuCnVuZGVyY2xvdGhlcy9NCnVuZGVyY2xvdGhpbmcvTQp1bmRlcmNvYXQvR0pTTUQKdW5kZXJjb2F0aW5nL00KdW5kZXJjb3Zlcgp1bmRlcmN1cnJlbnQvU00KdW5kZXJjdXQvU00KdW5kZXJjdXR0aW5nCnVuZGVyZGV2ZWxvcGVkCnVuZGVyZGV2ZWxvcG1lbnQvTQp1bmRlcmRvZy9TTQp1bmRlcmRvbmUKdW5kZXJlbXBsb3llZAp1bmRlcmVtcGxveW1lbnQvTQp1bmRlcmVzdGltYXRlL0RTTUdOWAp1bmRlcmVzdGltYXRpb24vTQp1bmRlcmV4cG9zZS9HRFMKdW5kZXJleHBvc3VyZS9NUwp1bmRlcmZlZAp1bmRlcmZlZWQvR1MKdW5kZXJmbG9vcgp1bmRlcmZsb3cKdW5kZXJmb290CnVuZGVyZnVuZGVkCnVuZGVyZnVyL00KdW5kZXJnYXJtZW50L1NNCnVuZGVyZ28vRwp1bmRlcmdvZXMKdW5kZXJnb25lCnVuZGVyZ3JhZC9TCnVuZGVyZ3JhZHVhdGUvU00KdW5kZXJncm91bmQvTVMKdW5kZXJncm93dGgvTQp1bmRlcmhhbmQKdW5kZXJoYW5kZWQvUFkKdW5kZXJoYW5kZWRuZXNzL00KdW5kZXJsYWluCnVuZGVybGF5L1NNCnVuZGVybGllL1MKdW5kZXJsaW5lL01HRFMKdW5kZXJsaW5nL01TCnVuZGVybGlwL1NNCnVuZGVybHlpbmcKdW5kZXJtYW5uZWQKdW5kZXJtZW50aW9uZWQKdW5kZXJtaW5lL0dEUwp1bmRlcm1vc3QKdW5kZXJuZWF0aC9NCnVuZGVybmVhdGhzCnVuZGVybm91cmlzaGVkCnVuZGVybm91cmlzaG1lbnQvTQp1bmRlcnBhaWQKdW5kZXJwYW50cy9NCnVuZGVycGFydC9NUwp1bmRlcnBhc3MvTVMKdW5kZXJwYXkvR1NMCnVuZGVycGF5bWVudC9TTQp1bmRlcnBpbi9TCnVuZGVycGlubmVkCnVuZGVycGlubmluZy9NUwp1bmRlcnBsYXkvREdTCnVuZGVycG9wdWxhdGVkCnVuZGVycHJpdmlsZWdlZAp1bmRlcnByb2R1Y3Rpb24vTQp1bmRlcnJhdGUvR0RTCnVuZGVycmVwcmVzZW50ZWQKdW5kZXJzY29yZS9EU01HCnVuZGVyc2VhL1MKdW5kZXJzZWNyZXRhcnkvU00KdW5kZXJzZWxsL0dTCnVuZGVyc2V4ZWQKdW5kZXJzaGlydC9TTQp1bmRlcnNob290L1NHCnVuZGVyc2hvcnRzL00KdW5kZXJzaG90CnVuZGVyc2lkZS9NUwp1bmRlcnNpZ24vREdTCnVuZGVyc2lnbmVkL00KdW5kZXJzaXplZAp1bmRlcnNraXJ0L1NNCnVuZGVyc29sZAp1bmRlcnN0YWZmZWQKdW5kZXJzdGFuZC9TR0JKCnVuZGVyc3RhbmRhYmx5CnVuZGVyc3RhbmRpbmcvTVkKdW5kZXJzdGF0ZS9EU0xHCnVuZGVyc3RhdGVtZW50L1NNCnVuZGVyc3Rvb2QKdW5kZXJzdHVkeS9HRFNNCnVuZGVydGFrZS9aR0pSUwp1bmRlcnRha2VuCnVuZGVydGFrZXIvTQp1bmRlcnRha2luZy9NCnVuZGVydGhpbmdzL00KdW5kZXJ0b25lL01TCnVuZGVydG9vawp1bmRlcnRvdy9TTQp1bmRlcnVzZWQKdW5kZXJ1dGlsaXplZAp1bmRlcnZhbHVhdGlvbi9NCnVuZGVydmFsdWUvRFNHCnVuZGVyd2F0ZXIKdW5kZXJ3YXkKdW5kZXJ3ZWFyL00KdW5kZXJ3ZWlnaHQvTQp1bmRlcndlbnQKdW5kZXJ3aGVsbS9ER1MKdW5kZXJ3aXJlL0RTCnVuZGVyd29ybGQvTVMKdW5kZXJ3cml0ZS9aR1JTCnVuZGVyd3JpdGVyL00KdW5kZXJ3cml0dGVuCnVuZGVyd3JvdGUKdW5kZXNpcmFibGUvTVMKdW5kaWVzL00KdW5kbwp1bmRvdWJ0ZWQvWQp1bmRyYW1hdGljCnVuZHVlCnVuZHVsYW50CnVuZHVsYXRlL0RTWEdOCnVuZHVsYXRpb24vTQp1bmR5aW5nCnVuZWFydGhsaW5lc3MvTQp1bmVhc2UvTQp1bmVhc3kvVAp1bmVhdGFibGUKdW5lY29ub21pYwp1bmVtcGxveWVkL00KdW5lbmRpbmcKdW5lbnRlcnByaXNpbmcKdW5lcXVhbC9EWQp1bmVycmluZy9ZCnVuZXNzZW50aWFsCnVuZXZlbi9ZCnVuZXhjZXB0aW9uYWJseQp1bmV4Y2l0ZWQKdW5leGNpdGluZwp1bmV4cGVjdGVkL1lQCnVuZXhwZWN0ZWRuZXNzL00KdW5mYWlsaW5nL1kKdW5mYWlyL1BUUlkKdW5mYWx0ZXJpbmcKdW5mYW1pbGlhcgp1bmZhdGhvbWFibHkKdW5mZWQKdW5mZWVsaW5nL1kKdW5mZW1pbmluZQp1bmZpdC9TCnVuZml0dGluZwp1bmZpeC9HRFMKdW5mbGFnZ2luZy9ZCnVuZmxhcHBhYmlsaXR5L00KdW5mbGFwcGFibGUKdW5mbGFwcGFibHkKdW5mbGF0dGVyaW5nCnVuZmxpbmNoaW5nL1kKdW5mb3JnZXR0YWJseQp1bmZvcmdpdmFibHkKdW5mb3J0dW5hdGUvTVMKdW5mcmllbmRseS9UCnVuZnJvY2svREcKdW5mcnVpdGZ1bAp1bmZ1bm55CnVuZ2FpbmxpbmVzcy9NCnVuZ2Fpbmx5L1JQVAp1bmdlbmVyb3VzCnVuZ2VudGxlCnVuZ29kbHkvVAp1bmdyYWNlZnVsL1kKdW5ncnVkZ2luZwp1bmd1YXJkZWQKdW5ndWVudC9TTQp1bmd1bGF0ZS9NUwp1bmhhbmR5L1QKdW5oYXBweS9UCnVuaGVhbHRoZnVsCnVuaGVhbHRoeS9UCnVuaGlzdG9yaWNhbAp1bmhvbHkvVAp1bmh1cnQKdW5pY2FtZXJhbAp1bmljZWxsdWxhcgp1bmljb3JuL1NNCnVuaWN5Y2xlL1NNCnVuaWRpcmVjdGlvbmFsCnVuaWZpY2F0aW9uL0FNCnVuaWZvcm0vU01EWUcKdW5pZm9ybWl0eS9NCnVuaWZ5L0FHRFNOCnVuaWxhdGVyYWwvWQp1bmlsYXRlcmFsaXNtCnVuaW1wb3J0YW50CnVuaW1wcmVzc2l2ZQp1bmluZm9ybWF0aXZlCnVuaW5oaWJpdGVkL1kKdW5pbnN0YWxsL0JTWkdEUgp1bmluc3VyZWQKdW5pbnRlbGxpZ2VudAp1bmludGVuZGVkCnVuaW50ZXJlc3RpbmcKdW5pbnRlcnJ1cHRlZC9ZCnVuaW50ZXJydXB0aWJsZQp1bmludml0aW5nCnVuaW9uL0FTTQp1bmlvbmlzbS9NCnVuaW9uaXN0L01TCnVuaXF1ZS9ZVFJQCnVuaXF1ZW5lc3MvTQp1bmlzZXgvTQp1bmlzb24vTQp1bml0YXJ5CnVuaXRlL0FFR1NECnVuaXRlZGx5CnVuaXRpZXMKdW5pdGl6ZS9EU0cKdW5pdHkvRU0KdW5pdmFsZW50CnVuaXZhbHZlL1NNCnVuaXZlcnNhbC9NWVMKdW5pdmVyc2FsaXR5L00KdW5pdmVyc2FsaXplL0RTRwp1bml2ZXJzZS9TTQp1bml2ZXJzaXR5L1NNCnVuanVzdC9ZCnVua2VtcHQKdW5raW5kL1QKdW5raW5kbHkvVAp1bmtub3dhYmxlL00KdW5rbm93bi9TTQp1bmxlYWRlZC9NCnVubGVzcwp1bmxpa2UvUEIKdW5saWtlbHkvVAp1bmxpdAp1bmxvY2svRFNHCnVubG92YWJsZQp1bmxvdmVseS9UUgp1bmxvdmluZwp1bmx1Y2t5L1QKdW5tYW5seS9UCnVubWFycmllZAp1bm1lYW5pbmcKdW5tZW50aW9uYWJsZS9NUwp1bm1lbnRpb25hYmxlcy9NCnVubWV0CnVubWluZGZ1bAp1bm1pc3NhYmxlCnVubWlzdGFrYWJseQp1bm1vcmFsCnVubW92YWJsZQp1bm11c2ljYWwKdW5uZWNlc3NhcnkKdW5uZXJ2aW5nL1kKdW5vYnNlcnZhbnQKdW5vZmZlbnNpdmUKdW5vZmZpY2lhbC9ZCnVub3JpZ2luYWwKdW5wZW9wbGUKdW5wZXJjZXB0aXZlCnVucGVyc3Vhc2l2ZQp1bnBpY2svR0RTCnVucGluL1MKdW5wbGVhc2luZwp1bnBvbGl0aWNhbAp1bnBvcHVsYXIKdW5wcmFjdGljYWwKdW5wcmVjZWRlbnRlZC9ZCnVucHJvZmVzc2lvbmFsL1kKdW5wcm9taXNpbmcKdW5wcm9waXRpb3VzCnVucXVlc3Rpb25pbmcvWQp1bnF1aWV0L1RSCnVucmVhZC9CCnVucmVhZHkKdW5yZWFsCnVucmVhc29uaW5nCnVucmVnZW5lcmF0ZQp1bnJlbGF0ZWQKdW5yZWxlbnRpbmcvWQp1bnJlbGlldmVkL1kKdW5yZW1hcmthYmxlCnVucmVtaXR0aW5nL1kKdW5yZXBlbnRhbnQKdW5yZXBvcnRlZAp1bnJlcHJlc2VudGF0aXZlCnVucmVzdC9NCnVucmlwZS9UUgp1bnJvbGwvR0RTCnVucm9tYW50aWMKdW5ydWxpbmVzcy9NCnVucnVseS9SVFAKdW5zYWZlL1lUUgp1bnNhbGVhYmxlCnVuc2F2b3J5CnVuc2NhdGhlZAp1bnNlYXJjaGFibGUKdW5zZWVpbmcvWQp1bnNlZW1seS9UCnVuc2Vlbi9NCnVuc2VudGltZW50YWwKdW5zZXQKdW5zaGFrYWJsZQp1bnNoYWthYmx5CnVuc2hhcGVseQp1bnNob2NrYWJsZQp1bnNob3JuCnVuc2lnaHRsaW5lc3MvTQp1bnNpZ2h0bHkvUFQKdW5zbWlsaW5nCnVuc29jaWFibGUKdW5zb2NpYWwKdW5zb2xkCnVuc291bmQvUFJZVAp1bnNwZWFrYWJsZQp1bnNwZWFrYWJseQp1bnNwZWNpZmljCnVuc3BlY3RhY3VsYXIKdW5zcG9ydGluZwp1bnN0YWJsZQp1bnN0ZWFkeS9UUlAKdW5zdGludGluZy9ZCnVuc3RyYXBwaW5nCnVuc3Vic3RhbnRpYWwKdW5zdWJ0bGUKdW5zdWl0YWJsZQp1bnN1cmUKdW5zdXNwZWN0aW5nL1kKdW5zeW1tZXRyaWNhbAp1bnRhY3RmdWwKdW50aGlua2FibHkKdW50aGlua2luZy9ZCnVudGlkeS9QVFIKdW50aWwKdW50aW1lbHkvVAp1bnRpcmluZy9ZCnVudG91Y2hhYmxlL01TCnVudG93YXJkCnVudHJ1ZS9SVAp1bnRydXN0d29ydGh5CnVudHJ1dGgvTQp1bnV0dGVyYWJsZQp1bnV0dGVyYWJseQp1bndhcnJhbnRhYmxlCnVud2FyeS9UCnVud2F2ZXJpbmcKdW53ZWQKdW53ZWxjb21lL0cKdW53ZWxsCnVud2llbGRpbmVzcy9NCnVud2llbGR5L1RSUAp1bndpc2UvUllUCnVud29ycmllZAp1bndvcnRoeS9UCnVud291bmQKdW53cmFwcGluZwp1bnlpZWxkaW5nCnVwL1MKdXBiZWF0L01TCnVwYnJhaWQvU0dECnVwYnJpbmdpbmcvTVMKdXBjaHVjay9TR0QKdXBjb21pbmcKdXBjb3VudHJ5L00KdXBkYXRlL01HRFJTCnVwZHJhZnQvTVMKdXBlbmQvU0dECnVwZnJvbnQKdXBncmFkZS9NR0RTCnVwaGVhdmFsL01TCnVwaGVsZAp1cGhpbGwvTVMKdXBob2xkL1pHUlMKdXBob2xkZXIvTQp1cGhvbHN0ZXIvQVNHRAp1cGhvbHN0ZXJlci9NUwp1cGhvbHN0ZXJ5L00KdXBrZWVwL00KdXBsYW5kL01TCnVwbGlmdC9KU01ERwp1cGxvYWQvU0RHCnVwbWFya2V0CnVwbW9zdAp1cG9uCnVwcGVkCnVwcGVyL1NNCnVwcGVyY2FzZS9NCnVwcGVyY2xhc3NtYW4vTQp1cHBlcmNsYXNzbWVuCnVwcGVyY2xhc3N3b21hbgp1cHBlcmNsYXNzd29tZW4KdXBwZXJjdXQvTVMKdXBwZXJjdXR0aW5nCnVwcGVybW9zdAp1cHBpbmcKdXBwaXNoCnVwcGl0eQp1cHJhaXNlL0RTRwp1cHJlYXIvR1NECnVwcmlnaHQvTVlQUwp1cHJpZ2h0bmVzcy9NCnVwcmlzaW5nL1NNCnVwcml2ZXIKdXByb2FyL1NNCnVwcm9hcmlvdXMvWQp1cHJvb3QvR1NECnVwc2NhbGUKdXBzZXQvU00KdXBzZXR0aW5nCnVwc2hvdC9TTQp1cHNpZGUvU00KdXBzaWxvbi9NUwp1cHN0YWdlL0dEUwp1cHN0YWlycwp1cHN0YW5kaW5nCnVwc3RhcnQvTURTRwp1cHN0YXRlL00KdXBzdHJlYW0KdXBzdHJva2UvU00KdXBzdXJnZS9NR0RTCnVwc3dpbmcvTVMKdXB0YWtlL1NNCnVwdGVtcG8KdXB0aHJ1c3QvR1NNCnVwdGljay9TTQp1cHRpZ2h0CnVwdG93bi9NCnVwdHJlbmQKdXB0dXJuL0dTTUQKdXB3YXJkL1NZCnVwd2luZAp1cmFjaWwvTQp1cmFuaXVtL00KdXJiYW4KdXJiYW5lL1JZVAp1cmJhbml0eS9NCnVyYmFuaXphdGlvbi9NCnVyYmFuaXplL0RTRwp1cmJhbm9sb2dpc3QvTVMKdXJiYW5vbG9neS9NCnVyY2hpbi9TTQp1cmVhL00KdXJlbWlhL00KdXJlbWljCnVyZXRlci9TTQp1cmV0aGFuZS9NCnVyZXRocmEvTQp1cmV0aHJhZQp1cmV0aHJhbAp1cmdlL01HRFMKdXJnZW5jeS9NCnVyZ2VudC9ZCnVyaWMKdXJpbmFsL1NNCnVyaW5hbHlzZXMKdXJpbmFseXNpcy9NCnVyaW5hcnkKdXJpbmF0ZS9HTkRTCnVyaW5hdGlvbi9NCnVyaW5lL00KdXJuL1NNCnVyb2dlbml0YWwKdXJvbG9naWNhbAp1cm9sb2dpc3QvTVMKdXJvbG9neS9NCnVyc2luZQp1cnRpY2FyaWEvTQp1c2FiaWxpdHkvTQp1c2FibGUvVUEKdXNhZ2UvU00KdXNlL0FFRFNNRwp1c2VkL1UKdXNlZnVsL1BZCnVzZWZ1bG5lc3MvTQp1c2VsZXNzL1lQCnVzZWxlc3NuZXNzL00KdXNlci9NUwp1c2VybmFtZS9NUwp1c2hlci9TTURHCnVzaGVyZXR0ZS9TTQp1c3UKdXN1YWwncwp1c3VhbC9VWQp1c3VyZXIvU00KdXN1cmlvdXMKdXN1cnAvU0RSWkcKdXN1cnBhdGlvbi9NCnVzdXJwZXIvTQp1c3VyeS9NCnV0ZW5zaWwvU00KdXRlcmkKdXRlcmluZQp1dGVydXMvTQp1dGlsaXRhcmlhbi9NUwp1dGlsaXRhcmlhbmlzbS9NCnV0aWxpdHkvU00KdXRpbGl6YXRpb24vTQp1dGlsaXplL0dCRFMKdXRtb3N0L00KdXRvcGlhL1NNCnV0dGVyL1NEWUcKdXR0ZXJhbmNlL1NNCnV0dGVybW9zdC9NCnV2ZWl0aXMKdXZ1bGEvU00KdXZ1bGFyL01TCnV4b3Jpb3VzCnYvQVMKdmFjL1MKdmFjYW5jeS9TTQp2YWNhbnQvWQp2YWNhdGUvRFNHCnZhY2F0aW9uL1pHTURSUwp2YWNhdGlvbmVyL00KdmFjYXRpb25pc3QvU00KdmFjY2luYXRlL0dORFNYCnZhY2NpbmF0aW9uL00KdmFjY2luZS9TTQp2YWNpbGxhdGUvWEdORFMKdmFjaWxsYXRpb24vTQp2YWN1aXR5L00KdmFjdW9sZS9NUwp2YWN1b3VzL1lQCnZhY3VvdXNuZXNzL00KdmFjdXVtL0dTTUQKdmFnYWJvbmQvU01ERwp2YWdhYm9uZGFnZS9NCnZhZ2FyaW91cwp2YWdhcnkvU00KdmFnaW5hL1NNCnZhZ2luYWUKdmFnaW5hbC9ZCnZhZ3JhbmN5L00KdmFncmFudC9NUwp2YWd1ZS9SWVRQCnZhZ3VlbmVzcy9NCnZhZ3VzCnZhaW4vUllUCnZhaW5nbG9yaW91cy9ZCnZhaW5nbG9yeS9NCnZhbAp2YWxhbmNlL01TCnZhbGUvTVMKdmFsZWRpY3Rpb24vTVMKdmFsZWRpY3Rvcmlhbi9TTQp2YWxlZGljdG9yeS9TTQp2YWxlbmNlL01TCnZhbGVuY3kvU00KdmFsZW50aW5lL1NNCnZhbGV0L1NNREcKdmFsZXR1ZGluYXJpYW4vTVMKdmFsZXR1ZGluYXJpYW5pc20vTQp2YWxpYW5jZS9NCnZhbGlhbnQvWQp2YWxpZC9ZCnZhbGlkYXRlL0lHTkRTCnZhbGlkYXRpb24vSU0KdmFsaWRhdGlvbnMKdmFsaWRpdHkvSU0KdmFsaWRuZXNzL00KdmFsaXNlL1NNCnZhbGxleS9TTQp2YWxvci9NCnZhbG9yb3VzL1kKdmFsdWFibGUvTVMKdmFsdWF0ZS9EU0cKdmFsdWF0aW9uL0NBTVMKdmFsdWUncwp2YWx1ZS9DQUdTRAp2YWx1ZWxlc3MKdmFsdWVyL1NNCnZhbHZlL0RTTUcKdmFsdmVsZXNzCnZhbHZ1bGFyCnZhbW9vc2UvRFNHCnZhbXAvQU1ER1MKdmFtcGlyZS9TTQp2YW4vU00KdmFuYWRpdW0vTQp2YW5kYWwvU00KdmFuZGFsaXNtL00KdmFuZGFsaXplL0RTRwp2YW5lL01TCnZhbmd1YXJkL01TCnZhbmlsbGEvU00KdmFuaXNoL0pEU0cKdmFuaXR5L1NNCnZhbm5lZAp2YW5uaW5nCnZhbnF1aXNoL1pHRFJTCnZhbnF1aXNoZXIvTQp2YW50YWdlL1NNCnZhcGUvR0RTCnZhcGlkL1lQCnZhcGlkaXR5L00KdmFwaWRuZXNzL00KdmFwb3IvU00KdmFwb3JpemF0aW9uL00KdmFwb3JpemUvRFJTWkcKdmFwb3JpemVyL00KdmFwb3JvdXMKdmFwb3J3YXJlCnZhcG9yeQp2YXF1ZXJvL01TCnZhci9TCnZhcmlhYmlsaXR5L0lNCnZhcmlhYmxlL0lTTQp2YXJpYWJseS9JCnZhcmlhbmNlL1NNCnZhcmlhbnQvTVMKdmFyaWF0ZS9OWAp2YXJpYXRpb24vTQp2YXJpY29sb3JlZAp2YXJpY29zZQp2YXJpZWQvVQp2YXJpZWdhdGUvRFNHTgp2YXJpZWdhdGlvbi9NCnZhcmlldGFsL1NNCnZhcmlldHkvU00KdmFyaW91cy9ZCnZhcmxldC9TTQp2YXJtaW50L01TCnZhcm5pc2gvR01EUwp2YXJuaXNoZWQvVQp2YXJzaXR5L1NNCnZhcnkvRFNHCnZhcnlpbmcvVQp2YXNjdWxhcgp2YXNlL01TCnZhc2VjdG9teS9TTQp2YXNvY29uc3RyaWN0aW9uCnZhc29tb3Rvcgp2YXNzYWwvU00KdmFzc2FsYWdlL00KdmFzdC9NUllUU1AKdmFzdG5lc3MvTQp2YXQvU00KdmF0dGVkCnZhdHRpbmcKdmF1ZGV2aWxsZS9NCnZhdWRldmlsbGlhbi9NUwp2YXVsdC9TTURSWkcKdmF1bHRlci9NCnZhdWx0aW5nL00KdmF1bnQvU01ERwp2Ygp2ZWFsL00KdmVjdG9yL1NHTUQKdmVlamF5L1NNCnZlZXAvTVMKdmVlci9NREdTCnZlZy9NCnZlZ2FuL1NNCnZlZ2FuaXNtCnZlZ2VidXJnZXIvUwp2ZWdlcwp2ZWdldGFibGUvU00KdmVnZXRhcmlhbi9TTQp2ZWdldGFyaWFuaXNtL00KdmVnZXRhdGUvR05WRFMKdmVnZXRhdGlvbi9NCnZlZ2dlZAp2ZWdnZXMKdmVnZ2llL1NNCnZlZ2dpZWJ1cmdlci9TCnZlZ2dpbmcKdmVoZW1lbmNlL00KdmVoZW1lbmN5L00KdmVoZW1lbnQvWQp2ZWhpY2xlL01TCnZlaGljdWxhcgp2ZWlsJ3MKdmVpbC9VREdTCnZlaW4vTURHUwp2ZWxhCnZlbGFyL1NNCnZlbGQvTVMKdmVsbHVtL00KdmVsb2NpcGVkZS9NUwp2ZWxvY2l0eS9TTQp2ZWxvZHJvbWUvUwp2ZWxvdXIvTVMKdmVsdW0vTQp2ZWx2ZXQvTQp2ZWx2ZXRlZW4vTQp2ZWx2ZXR5CnZlbmFsL1kKdmVuYWxpdHkvTQp2ZW5hdGlvbi9NCnZlbmQvREdTCnZlbmRldHRhL1NNCnZlbmRpYmxlCnZlbmRvci9NUwp2ZW5lZXIvTURHUwp2ZW5lcmFiaWxpdHkvTQp2ZW5lcmFibGUKdmVuZXJhdGUvRFNHTgp2ZW5lcmF0aW9uL00KdmVuZXJlYWwKdmVuZ2VhbmNlL00KdmVuZ2VmdWwvQVkKdmVuaWFsCnZlbmlyZW1hbi9NCnZlbmlyZW1lbgp2ZW5pc29uL00KdmVub20vTQp2ZW5vbW91cy9ZCnZlbm91cwp2ZW50J3MKdmVudC9ER1MKdmVudGlsYXRlL0dORFMKdmVudGlsYXRpb24vTQp2ZW50aWxhdG9yL1NNCnZlbnRyYWwKdmVudHJpY2xlL1NNCnZlbnRyaWN1bGFyCnZlbnRyaWxvcXVpc20vTQp2ZW50cmlsb3F1aXN0L1NNCnZlbnRyaWxvcXV5L00KdmVudHVyZS9EU01HCnZlbnR1cmVzb21lL1BZCnZlbnR1cmVzb21lbmVzcy9NCnZlbnR1cm91cy9QWQp2ZW50dXJvdXNuZXNzL00KdmVudWUvQVNNCnZlcmFjaW91cy9ZCnZlcmFjaXR5L00KdmVyYW5kYS9TTQp2ZXJiL0tNUwp2ZXJiYWwvTVlTCnZlcmJhbGl6YXRpb24vTQp2ZXJiYWxpemUvR0RTCnZlcmJhdGltCnZlcmJlbmEvU00KdmVyYmlhZ2UvTVMKdmVyYm9zZS9ZCnZlcmJvc2l0eS9NCnZlcmJvdGVuCnZlcmRhbnQvWQp2ZXJkaWN0L1NNCnZlcmRpZ3Jpcy9HTURTCnZlcmR1cmUvTQp2ZXJnZSdzCnZlcmdlL0ZEU0cKdmVyZ2VyL01TCnZlcmlmaWFibGUvVQp2ZXJpZmljYXRpb24vTQp2ZXJpZmllZC9VCnZlcmlmeS9EU05HCnZlcmlseQp2ZXJpc2ltaWxpdHVkZS9NCnZlcml0YWJsZQp2ZXJpdGFibHkKdmVyaXR5L1NNCnZlcm1pY2VsbGkvTQp2ZXJtaWN1bGl0ZS9NCnZlcm1pZm9ybQp2ZXJtaWxpb24vTQp2ZXJtaW4vTQp2ZXJtaW5vdXMKdmVybW91dGgvTQp2ZXJuYWN1bGFyL01TCnZlcm5hbAp2ZXJuaWVyL1NNCnZlcm9uaWNhL00KdmVycnVjYS9TTQp2ZXJydWNhZQp2ZXJzYQp2ZXJzYXRpbGUKdmVyc2F0aWxpdHkvTQp2ZXJzZS9BRk5HTVNEWAp2ZXJzZWQvVQp2ZXJzaWZpY2F0aW9uL00KdmVyc2lmaWVyL00KdmVyc2lmeS9aR05EUlMKdmVyc2lvbi9BRklNUwp2ZXJzaW9uZWQKdmVyc2lvbmluZwp2ZXJzby9TTQp2ZXJzdXMKdmVydC9BCnZlcnRlYnJhL00KdmVydGVicmFlCnZlcnRlYnJhbAp2ZXJ0ZWJyYXRlL0lNUwp2ZXJ0ZXgvTVMKdmVydGljYWwvTVlTCnZlcnRpY2VzCnZlcnRpZ2lub3VzCnZlcnRpZ28vTQp2ZXJ2ZS9NCnZlcnkvUlQKdmVzaWNsZS9TTQp2ZXNpY3VsYXIKdmVzaWN1bGF0ZQp2ZXNwZXIvTVMKdmVzc2VsL01TCnZlc3Qncwp2ZXN0L0lMREdTCnZlc3RhbC9NUwp2ZXN0aWJ1bGUvTVMKdmVzdGlnZS9TTQp2ZXN0aWdpYWwvWQp2ZXN0aW5nL00KdmVzdG1lbnQvSU1TCnZlc3RyeS9TTQp2ZXN0cnltYW4vTQp2ZXN0cnltZW4KdmV0L1NNCnZldGNoL01TCnZldGVyYW4vU00KdmV0ZXJpbmFyaWFuL01TCnZldGVyaW5hcnkvU00KdmV0by9NREcKdmV0b2VzCnZldHRlZAp2ZXR0aW5nCnZleC9HRFMKdmV4YXRpb24vU00KdmV4YXRpb3VzL1kKdmhmCnZpCnZpYQp2aWFiaWxpdHkvTQp2aWFibGUKdmlhYmx5CnZpYWR1Y3QvU00KdmlhbC9NUwp2aWFuZC9TTQp2aWJlL01TCnZpYmVzL00KdmlicmFoYXJwL1NNCnZpYnJhbmN5L00KdmlicmFudC9ZCnZpYnJhcGhvbmUvTVMKdmlicmFwaG9uaXN0L01TCnZpYnJhdGUvR05EU1gKdmlicmF0aW9uL00KdmlicmF0by9NUwp2aWJyYXRvci9TTQp2aWJyYXRvcnkKdmlidXJudW0vU00KdmljYXIvU00KdmljYXJhZ2UvU00KdmljYXJpb3VzL1lQCnZpY2FyaW91c25lc3MvTQp2aWNlL0NNUwp2aWNlZAp2aWNlZ2VyZW50L1NNCnZpY2VubmlhbAp2aWNlcmVnYWwKdmljZXJveS9NUwp2aWNoeXNzb2lzZS9NCnZpY2luZwp2aWNpbml0eS9NCnZpY2lvdXMvWVAKdmljaW91c25lc3MvTQp2aWNpc3NpdHVkZS9TTQp2aWN0aW0vTVMKdmljdGltaXphdGlvbi9NCnZpY3RpbWl6ZS9HRFMKdmljdG9yL01TCnZpY3RvcmlvdXMvWQp2aWN0b3J5L1NNCnZpY3R1YWwvU01ERwp2aWN1bmEvTVMKdmlkZWxpY2V0CnZpZGVvL0dTTUQKdmlkZW9jYXNzZXR0ZS9TTQp2aWRlb2NvbmZlcmVuY2luZwp2aWRlb2Rpc2MvTVMKdmlkZW9waG9uZS9NUwp2aWRlb3RhcGUvRFNNRwp2aWRlb3RleAp2aWUvRFMKdmlldy9BTURSU1pHCnZpZXdlci9BTQp2aWV3ZXJzaGlwL00Kdmlld2ZpbmRlci9TTQp2aWV3aW5nL1NNCnZpZXdwb2ludC9NUwp2aWdlc2ltYWwKdmlnaWwvU00KdmlnaWxhbmNlL00KdmlnaWxhbnQvWQp2aWdpbGFudGUvU00KdmlnaWxhbnRpc20vTQp2aWdpbGFudGlzdC9NCnZpZ25ldHRlL0RTTUcKdmlnbmV0dGlzdC9NUwp2aWdvci9NCnZpZ29yb3VzL1kKdmlpCnZpaWkKdmlraW5nL01TCnZpbGUvWVRQUgp2aWxlbmVzcy9NCnZpbGlmaWNhdGlvbi9NCnZpbGlmeS9EU05HCnZpbGxhL1NNCnZpbGxhZ2UvUlNNWgp2aWxsYWdlci9NCnZpbGxhaW4vU00KdmlsbGFpbm91cwp2aWxsYWlueS9TTQp2aWxsZWluL1NNCnZpbGxlaW5hZ2UvTQp2aWxsaQp2aWxsdXMvTQp2aW0vTQp2aW5haWdyZXR0ZS9NCnZpbmNpYmxlL0kKdmluZGljYXRlL1hEU0dOCnZpbmRpY2F0aW9uL00KdmluZGljYXRvci9NUwp2aW5kaWN0aXZlL1BZCnZpbmRpY3RpdmVuZXNzL00KdmluZS9NUwp2aW5lZ2FyL00KdmluZWdhcnkKdmluZXlhcmQvTVMKdmluby9NCnZpbm91cwp2aW50YWdlL01TCnZpbnRuZXIvTVMKdmlueWwvU00KdmlvbC9NQlMKdmlvbGEvU00KdmlvbGFibGUvSQp2aW9sYXRlL0dORFNYCnZpb2xhdGlvbi9NCnZpb2xhdG9yL1NNCnZpb2xlbmNlL00KdmlvbGVudC9ZCnZpb2xldC9NUwp2aW9saW4vTVMKdmlvbGluY2VsbG8vUwp2aW9saW5pc3QvU00KdmlvbGlzdC9NUwp2aW9sb25jZWxsaXN0L1NNCnZpb2xvbmNlbGxvL01TCnZpcGVyL1NNCnZpcGVyb3VzCnZpcmFnby9NCnZpcmFnb2VzCnZpcmFsCnZpcmVvL1NNCnZpcmdpbi9NUwp2aXJnaW5hbC9TTQp2aXJnaW5pdHkvTQp2aXJndWxlL01TCnZpcmlsZQp2aXJpbGl0eS9NCnZpcm9sb2dpc3QvU00Kdmlyb2xvZ3kvTQp2aXJ0dWFsL1kKdmlydHVhbGl6YXRpb24KdmlydHVlL1NNCnZpcnR1b3NpdHkvTQp2aXJ0dW9zby9NCnZpcnR1b3VzL1lQCnZpcnR1b3VzbmVzcy9NCnZpcnVsZW5jZS9NCnZpcnVsZW50L1kKdmlydXMvTVMKdmlzYS9NRFNHCnZpc2FnZS9NUwp2aXNjZXJhCnZpc2NlcmFsL1kKdmlzY2lkCnZpc2Nvc2UvTQp2aXNjb3NpdHkvTQp2aXNjb3VudC9TTQp2aXNjb3VudGN5L1NNCnZpc2NvdW50ZXNzL01TCnZpc2NvdXMKdmlzY3VzL00KdmlzZS9BQ01HRFMKdmlzaWJpbGl0eS9JTQp2aXNpYmxlL0kKdmlzaWJseS9JCnZpc2lvbi9LR0RTTQp2aXNpb25hcnkvU00KdmlzaXQncwp2aXNpdC9BU0dECnZpc2l0YW50L01TCnZpc2l0YXRpb24vTVMKdmlzaXRvci9NUwp2aXNvci9TTQp2aXN0YS9TTQp2aXN1YWwvU01ZCnZpc3VhbGl6YXRpb24vU00KdmlzdWFsaXplL0RSU1pHCnZpc3VhbGl6ZXIvTQp2aXRhL00Kdml0YWUKdml0YWwvU1kKdml0YWxpdHkvTQp2aXRhbGl6YXRpb24vQU0Kdml0YWxpemUvQ0FHU0QKdml0YWxzL00Kdml0YW1pbi9NUwp2aXRpYXRlL0dORFMKdml0aWF0aW9uL00Kdml0aWN1bHR1cmUvTQp2aXRpY3VsdHVyaXN0L01TCnZpdHJlb3VzCnZpdHJpZmFjdGlvbi9NCnZpdHJpZmljYXRpb24vTQp2aXRyaWZ5L0dORFMKdml0cmluZS9TTQp2aXRyaW9sL00Kdml0cmlvbGljCnZpdHJpb2xpY2FsbHkKdml0dGxlcy9NCnZpdHVwZXJhdGUvR05WRFMKdml0dXBlcmF0aW9uL00Kdml2YS9NUwp2aXZhY2UKdml2YWNpb3VzL1BZCnZpdmFjaW91c25lc3MvTQp2aXZhY2l0eS9NCnZpdmFyaWEKdml2YXJpdW0vU00Kdml2aWQvUllUUAp2aXZpZG5lc3MvTQp2aXZpZnkvQURTRwp2aXZpcGFyb3VzCnZpdmlzZWN0L0RHUwp2aXZpc2VjdGlvbi9NCnZpdmlzZWN0aW9uYWwKdml2aXNlY3Rpb25pc3QvU00Kdml4ZW4vU00Kdml4ZW5pc2gvWQp2aXoKdml6aWVyL1NNCnZsZgp2b2NhYgp2b2NhYmxlL01TCnZvY2FidWxhcnkvU00Kdm9jYWwvU01ZCnZvY2FsaWMKdm9jYWxpc3QvU00Kdm9jYWxpemF0aW9uL01TCnZvY2FsaXplL0RTRwp2b2NhdGlvbi9GSUtBU00Kdm9jYXRpb25hbC9ZCnZvY2F0aXZlL01TCnZvY2lmZXJhdGUvRFNHTgp2b2NpZmVyYXRpb24vTQp2b2NpZmVyb3VzL1lQCnZvY2lmZXJvdXNuZXNzL00Kdm9ka2EvU00Kdm9ndWUvU00Kdm9ndWlzaAp2b2ljZS9JRFNNRwp2b2ljZWQvVQp2b2ljZWxlc3MvUFkKdm9pY2VsZXNzbmVzcy9NCnZvaWNlbWFpbC9TTQp2b2lkL01EU0dCCnZvaWxhCnZvaWxlL00Kdm9sL1MKdm9sYXRpbGUKdm9sYXRpbGl0eS9NCnZvbGF0aWxpemUvRFNHCnZvbGNhbmljCnZvbGNhbm8vTQp2b2xjYW5vZXMKdm9sZS9NUwp2b2xpdGlvbi9NCnZvbGl0aW9uYWwKdm9sbGV5L0dTTUQKdm9sbGV5YmFsbC9NUwp2b2x0L0FNUwp2b2x0YWdlL01TCnZvbHRhaWMKdm9sdG1ldGVyL1NNCnZvbHViaWxpdHkvTQp2b2x1YmxlCnZvbHVibHkKdm9sdW1lL1NNCnZvbHVtaW5vdXMvWVAKdm9sdW1pbm91c25lc3MvTQp2b2x1bnRhcmlseS9JCnZvbHVudGFyaXNtL00Kdm9sdW50YXJ5L1NNCnZvbHVudGVlci9TR01ECnZvbHVudGVlcmlzbS9NCnZvbHVwdHVhcnkvU00Kdm9sdXB0dW91cy9QWQp2b2x1cHR1b3VzbmVzcy9NCnZvbHV0ZS9TTQp2b21pdC9TTURHCnZvb2Rvby9HU01ECnZvb2Rvb2lzbS9NCnZvcmFjaW91cy9QWQp2b3JhY2lvdXNuZXNzL00Kdm9yYWNpdHkvTQp2b3J0ZXgvTVMKdm90YXJ5L1NNCnZvdGUncwp2b3RlL0NHVkRTCnZvdGVyL1NNCnZvdWNoL0RSU1pHCnZvdWNoZXIvTQp2b3VjaHNhZmUvRFNHCnZvdy9TR01ECnZvd2VsL1NNCnZveWFnZS9NWkdEUlMKdm95YWdlci9NCnZveWFnZXVyL1NNCnZveWV1ci9NUwp2b3lldXJpc20vTQp2b3lldXJpc3RpYwp2dWxjYW5pemF0aW9uL00KdnVsY2FuaXplL0dEUwp2dWxnYXIvUllUCnZ1bGdhcmlhbi9NUwp2dWxnYXJpc20vTVMKdnVsZ2FyaXR5L1NNCnZ1bGdhcml6YXRpb24vTQp2dWxnYXJpemUvWkdEUlMKdnVsZ2FyaXplci9NCnZ1bG5lcmFiaWxpdGllcwp2dWxuZXJhYmlsaXR5L0lNCnZ1bG5lcmFibGUvSQp2dWxuZXJhYmx5L0kKdnVscGluZQp2dWx0dXJlL1NNCnZ1bHR1cm91cwp2dWx2YS9NCnZ1bHZhZQp2dXZ1emVsYS9NUwp2eWluZwp3L0ROWFRHVkoKd2FiYml0L1MKd2Fjay9NUlRTCndhY2tpbmVzcy9NCndhY2tvL1NNCndhY2t5L1JQVAp3YWQvU1pHTURSCndhZGRlZAp3YWRkaW5nL00Kd2FkZGxlL0RTTUcKd2FkZS9NUwp3YWRlci9NCndhZGVycy9NCndhZGdlL1MKd2FkaS9NUwp3YWZlci9TTQp3YWZmbGUvTVpHRFJTCndhZmZsZXIvTQp3YWZ0L01ER1MKd2FnL1NaR01EUgp3YWdlL01TCndhZ2VkL1UKd2FnZXIvWkdNRFIKd2FnZXJlci9NCndhZ2dlZAp3YWdnZXJ5L1NNCndhZ2dpbmcKd2FnZ2lzaC9ZUAp3YWdnaXNobmVzcy9NCndhZ2dsZS9NR0RTCndhZ29uL1pTTVIKd2Fnb25lci9NCndhZ3RhaWwvU00Kd2FpZi9NUwp3YWlsL01EUlpHUwp3YWlsZXIvTQp3YWlsaW5nL00Kd2Fpbi9NUwp3YWluc2NvdC9TSk1ERwp3YWluc2NvdGluZy9NCndhaW53cmlnaHQvTVMKd2Fpc3QvU00Kd2Fpc3RiYW5kL01TCndhaXN0Y29hdC9NUwp3YWlzdGxpbmUvTVMKd2FpdC9NRFJaR1MKd2FpdGVyL00Kd2FpdGluZy9NCndhaXRwZXJzb24vTVMKd2FpdHJlc3MvTVMKd2FpdHN0YWZmL00Kd2FpdmUvRFJTWkcKd2FpdmVyL00Kd2FrZS9NR0pEUwp3YWtlZnVsL1BZCndha2VmdWxuZXNzL00Kd2FrZW4vR1NECndhbGRvL1MKd2FsZG9lcwp3YWxlL01HRFMKd2Fsay9NRFJaR1MKd2Fsa2Fib3V0L1MKd2Fsa2F3YXkvTVMKd2Fsa2VyL00Kd2Fsa2llcwp3YWxraW5nL00Kd2Fsa291dC9TTQp3YWxrb3Zlci9NUwp3YWxrd2F5L1NNCndhbGwvTURHUwp3YWxsYWJ5L1NNCndhbGxhaAp3YWxsYWhzCndhbGxib2FyZC9NCndhbGxldC9NUwp3YWxsZXllL0RTTQp3YWxsZmxvd2VyL01TCndhbGxvcC9NRFNKRwp3YWxsb3BpbmcvTQp3YWxsb3cvTURTRwp3YWxscGFwZXIvU01ERwp3YWxseS9TCndhbG51dC9NUwp3YWxydXMvTVMKd2FsdHovWkdNRFJTCndhbHR6ZXIvTQp3YW1wdW0vTQp3YW4vR1BEWQp3YW5kL01TCndhbmRlci9EUlNKWkcKd2FuZGVyZXIvTQp3YW5kZXJpbmdzL00Kd2FuZGVybHVzdC9TTQp3YW5lL01TCndhbmdsZS9NWkdEUlMKd2FuZ2xlci9NCndhbmsvRFJaR1MKd2FubmEKd2FubmFiZS9TTQp3YW5uYWJlZS9TCndhbm5lcgp3YW5uZXNzL00Kd2FubmVzdAp3YW50L01ER1MKd2FudGVkL1UKd2FudG9uL01EWVNQRwp3YW50b25uZXNzL00Kd2FwaXRpL01TCndhci9TTQp3YXJibGUvTVpHRFJTCndhcmJsZXIvTQp3YXJib25uZXQvU00Kd2FyZC9BTURHUwp3YXJkZW4vTVMKd2FyZGVyL01TCndhcmRyZXNzL1MKd2FyZHJvYmUvU00Kd2FyZHJvb20vU00Kd2FyZS9NUwp3YXJlaG91c2UvRFNNRwp3YXJlegp3YXJmYXJlL00Kd2FyaGVhZC9NUwp3YXJob3JzZS9TTQp3YXJpbHkvVQp3YXJpbmVzcy9VTQp3YXJsaWtlCndhcmxvY2svTVMKd2FybG9yZC9NUwp3YXJtL1BEUllIWlRHUwp3YXJtYmxvb2RlZAp3YXJtZXIvTQp3YXJtaGVhcnRlZC9QCndhcm1oZWFydGVkbmVzcy9NCndhcm1pc2gKd2FybW5lc3MvTQp3YXJtb25nZXIvU01HCndhcm1vbmdlcmluZy9NCndhcm10aC9NCndhcm4vSkRHUwp3YXJuaW5nL00Kd2FycC9NREdTCndhcnBhaW50CndhcnBhdGgvTQp3YXJwYXRocwp3YXJwbGFuZS9NUwp3YXJyYW50L0dNRFMKd2FycmFudGVkL1UKd2FycmFudHkvRFNNRwp3YXJyZWQKd2FycmVuL01TCndhcnJpbmcKd2Fycmlvci9TTQp3YXJzaGlwL1NNCndhcnQvTVMKd2FydGhvZy9TTQp3YXJ0aW1lL00Kd2FydHkvVFIKd2FyeS9VUFJUCndhcwp3YXNhYmkKd2FzaC9CSk1EUlNaRwp3YXNoYWJsZS9TTQp3YXNoYmFzaW4vU00Kd2FzaGJvYXJkL1NNCndhc2hib3dsL1NNCndhc2hjbG90aC9NCndhc2hjbG90aHMKd2FzaGVkL1UKd2FzaGVyL00Kd2FzaGVyd29tYW4vTQp3YXNoZXJ3b21lbgp3YXNoaW5nL00Kd2FzaG91dC9NUwp3YXNocmFnL01TCndhc2hyb29tL01TCndhc2hzdGFuZC9TTQp3YXNodHViL01TCndhc2h5L1RSCndhc24ndAp3YXNwL01TCndhc3Bpc2gvWVAKd2FzcGlzaG5lc3MvTQp3YXNzYWlsL1NNREcKd2FzdAp3YXN0YWdlL00Kd2FzdGUvRFJTTVpHCndhc3RlYmFza2V0L01TCndhc3RlZnVsL1BZCndhc3RlZnVsbmVzcy9NCndhc3RlbGFuZC9TTQp3YXN0ZXBhcGVyL00Kd2FzdGVyL00Kd2FzdGV3YXRlcgp3YXN0cmVsL1NNCndhdGNoL0JaR01EUlMKd2F0Y2hhYmxlL1UKd2F0Y2hiYW5kL01TCndhdGNoZG9nL1NNCndhdGNoZXIvTQp3YXRjaGZ1bC9ZUAp3YXRjaGZ1bG5lc3MvTQp3YXRjaG1ha2VyL01TCndhdGNobWFraW5nL00Kd2F0Y2htYW4vTQp3YXRjaG1lbgp3YXRjaHN0cmFwL1MKd2F0Y2h0b3dlci9TTQp3YXRjaHdvcmQvTVMKd2F0ZXIvR1NNRAp3YXRlcmJlZC9NUwp3YXRlcmJpcmQvU00Kd2F0ZXJib2FyZC9NREpTRwp3YXRlcmJvYXJkaW5nL00Kd2F0ZXJib3JuZQp3YXRlcmNvbG9yL01TCndhdGVyY291cnNlL1NNCndhdGVyY3JhZnQvTQp3YXRlcmNyZXNzL00Kd2F0ZXJmYWxsL1NNCndhdGVyZm93bC9TTQp3YXRlcmZyb250L01TCndhdGVyaG9sZS9TTQp3YXRlcmluZXNzL00Kd2F0ZXJsaWx5L1NNCndhdGVybGluZS9NUwp3YXRlcmxvZ2dlZAp3YXRlcm1hcmsvTURHUwp3YXRlcm1lbG9uL1NNCndhdGVybWlsbC9NUwp3YXRlcnByb29mL1NNREcKd2F0ZXJwcm9vZmluZy9NCndhdGVycy9NCndhdGVyc2hlZC9NUwp3YXRlcnNpZGUvTVMKd2F0ZXJzcG91dC9TTQp3YXRlcnRpZ2h0CndhdGVyd2F5L01TCndhdGVyd2hlZWwvU00Kd2F0ZXJ3b3Jrcy9NCndhdGVyeS9QVFIKd2F0dC9NUwp3YXR0YWdlL00Kd2F0dGxlL01HRFMKd2F2ZS9NWkdEUlMKd2F2ZWJhbmQvUwp3YXZlZm9ybQp3YXZlbGVuZ3RoL00Kd2F2ZWxlbmd0aHMKd2F2ZWxldC9TTQp3YXZlbGlrZQp3YXZlci9aR01EUgp3YXZlcmVyL00Kd2F2ZXJpbmcvWQp3YXZpbmVzcy9NCndhdnkvUFJUCndheC9HTUROUwp3YXhpbmVzcy9NCndheHdpbmcvU00Kd2F4d29yay9TTQp3YXh5L1JQVAp3YXkvU00Kd2F5YmlsbC9TTQp3YXlmYXJlci9NUwp3YXlmYXJpbmcvU00Kd2F5bGFpZAp3YXlsYXkvUlNaRwp3YXlsYXllci9NCndheXNpZGUvU00Kd2F5d2FyZC9QWQp3YXl3YXJkbmVzcy9NCndhem9vL1MKd2UKd2UnZAp3ZSdsbAp3ZSdyZQp3ZSd2ZQp3ZWFrL1BOUllYVAp3ZWFrZW4vRFJaRwp3ZWFrZW5lci9NCndlYWtmaXNoL01TCndlYWtpc2gKd2Vha2xpbmcvU00Kd2Vha25lc3MvTVMKd2VhbC9NSFMKd2VhbHRoL00Kd2VhbHRoaW5lc3MvTQp3ZWFsdGh5L1RSUAp3ZWFuL0RHUwp3ZWFwb24vTVMKd2VhcG9uaXplCndlYXBvbmxlc3MKd2VhcG9ucnkvTQp3ZWFyL01SQkpTWkcKd2VhcmFibGUvVQp3ZWFyZXIvTQp3ZWFyaWVkL1UKd2VhcmlseQp3ZWFyaW5lc3MvTQp3ZWFyaXNvbWUvWQp3ZWFyeS9UR0RSU1AKd2Vhc2VsL01EWVNHCndlYXRoZXIvU01ERwp3ZWF0aGVyYm9hcmQvU0cKd2VhdGhlcmNvY2svTVMKd2VhdGhlcmluZy9NCndlYXRoZXJpemF0aW9uL00Kd2VhdGhlcml6ZS9EU0cKd2VhdGhlcm1hbi9NCndlYXRoZXJtZW4Kd2VhdGhlcnBlcnNvbi9NUwp3ZWF0aGVycHJvb2YvR1NECndlYXRoZXJzdHJpcC9TCndlYXRoZXJzdHJpcHBlZAp3ZWF0aGVyc3RyaXBwaW5nL00Kd2VhdmUvRFJTTVpHCndlYXZlci9NCndlYXZpbmcvTQp3ZWIvU00Kd2ViYmVkCndlYmJpbmcvTQp3ZWJjYW0vTVMKd2ViY2FzdC9TTUcKd2ViZmVldAp3ZWJmb290L00Kd2ViaW5hci9TTQp3ZWJpc29kZS9NUwp3ZWJsb2cvTVMKd2VibWFzdGVyL1NNCndlYm1pc3RyZXNzL01TCndlYnNpdGUvU00Kd2VkL0FTCndlZGRlZC9BCndlZGRlcgp3ZWRkaW5nL1NNCndlZGdlL0RTTUcKd2VkZ2llL01TCndlZGxvY2svTQp3ZWUvUlNNVAp3ZWVkL01EUlNaRwp3ZWVkZXIvTQp3ZWVka2lsbGVyL1MKd2VlZGxlc3MKd2VlZHkvVFIKd2VlaW5nCndlZWsvTVlTCndlZWtkYXkvU00Kd2Vla2VuZC9TWkdNRFIKd2Vla2x5L1NNCndlZWtuaWdodC9TTQp3ZWVuL0RTRwp3ZWVuaWUvTVRSUwp3ZWVuc3kvUlQKd2VlbnkKd2VlcC9NUkpTWkcKd2VlcGVyL00Kd2VlcGllCndlZXB5L1RSU00Kd2VldmlsL01TCndlZnQvTVMKd2VpZ2gncwp3ZWlnaC9BR0QKd2VpZ2hicmlkZ2UvUwp3ZWlnaHMvQQp3ZWlnaHQvTURTSkcKd2VpZ2h0ZWQvVQp3ZWlnaHRpbHkKd2VpZ2h0aW5lc3MvTQp3ZWlnaHRsZXNzL1lQCndlaWdodGxlc3NuZXNzL00Kd2VpZ2h0bGlmdGVyL01TCndlaWdodGxpZnRpbmcvTQp3ZWlnaHR5L1BUUgp3ZWlyL01TCndlaXJkL1BUUlkKd2VpcmRpZS9NUwp3ZWlyZG5lc3MvTQp3ZWlyZG8vTVMKd2VsY29tZS9NR0RTCndlbGQvTURSQlNaRwp3ZWxkZXIvTQp3ZWxmYXJlL00Kd2Vsa2luL00Kd2VsbC9NRFBTRwp3ZWxsaGVhZC9TTQp3ZWxsaWUKd2VsbGluZ3Rvbi9NUwp3ZWxsbmVzcy9NCndlbGxzcHJpbmcvTVMKd2VsbHkvUwp3ZWxzaC9aR0RSUwp3ZWxzaGVyL00Kd2VsdC9NRFJTWkcKd2VsdGVyL0dNRAp3ZWx0ZXJ3ZWlnaHQvU00Kd2VuL00Kd2VuY2gvTVMKd2VuZC9EU0cKd2VudAp3ZXB0CndlcmUKd2VyZW4ndAp3ZXJld29sZi9NCndlcmV3b2x2ZXMKd2VzdC9NCndlc3Rib3VuZAp3ZXN0ZXJseS9TTQp3ZXN0ZXJuL1NaTVIKd2VzdGVybmVyL00Kd2VzdGVybml6YXRpb24vTQp3ZXN0ZXJuaXplL0dEUwp3ZXN0ZXJubW9zdAp3ZXN0d2FyZC9TCndldC9TTVlQCndldGJhY2svU00Kd2V0bGFuZC9TTQp3ZXRuZXNzL00Kd2V0dGVyL1NNCndldHRlc3QKd2V0dGluZwp3ZXR3YXJlL1MKd2hhY2svU0paR01EUgp3aGFja2VyL00Kd2hhbGUvRFJTTVpHCndoYWxlYm9hdC9NUwp3aGFsZWJvbmUvTQp3aGFsZXIvTQp3aGFsaW5nL00Kd2hhbS9NUwp3aGFtbWVkCndoYW1taW5nCndoYW1teS9TTQp3aGFyZi9NCndoYXJ2ZXMKd2hhdC9NUwp3aGF0Y2hhbWFjYWxsaXQvTVMKd2hhdGV2ZXIKd2hhdG5vdC9NCndoYXRzaGVybmFtZQp3aGF0c2hpc25hbWUKd2hhdHNpdC9TCndoYXRzb2V2ZXIKd2hlYWwvU00Kd2hlYXQvTU4Kd2hlYXRnZXJtCndoZWF0bWVhbAp3aGVlCndoZWVkbGUvRFJTWkcKd2hlZWRsZXIvTQp3aGVlbC9TTURSRwp3aGVlbGJhcnJvdy9TTQp3aGVlbGJhc2UvU00Kd2hlZWxjaGFpci9TTQp3aGVlbGhvdXNlL01TCndoZWVsaWUvU00Kd2hlZWx3cmlnaHQvTVMKd2hlZXplL0RTTUcKd2hlZXppbHkKd2hlZXppbmVzcy9NCndoZWV6eS9QUlQKd2hlbGsvU01ECndoZWxtL1NERwp3aGVscC9TTURHCndoZW4vTVMKd2hlbmNlCndoZW5ldmVyCndoZW5zb2V2ZXIKd2hlcmUvU00Kd2hlcmVhYm91dHMvTQp3aGVyZWFzCndoZXJlYXQKd2hlcmVieQp3aGVyZWZvcmUvTVMKd2hlcmVpbgp3aGVyZW9mCndoZXJlb24Kd2hlcmVzb2V2ZXIKd2hlcmV0bwp3aGVyZXVwb24Kd2hlcmV2ZXIKd2hlcmV3aXRoCndoZXJld2l0aGFsL00Kd2hlcnJ5L1NNCndoZXQvUwp3aGV0aGVyCndoZXRzdG9uZS9TTQp3aGV0dGVkCndoZXR0aW5nCndoZXcKd2hleS9NCndoaWNoCndoaWNoZXZlcgp3aGlmZi9TTURHCndoaWZmbGV0cmVlL01TCndoaWxlL0RTTUcKd2hpbG9tCndoaWxzdAp3aGltL01TCndoaW1wZXIvTURHUwp3aGltc2ljYWwvWQp3aGltc2ljYWxpdHkvTQp3aGltc3kvU00Kd2hpbmUvRFJTTVpHCndoaW5lci9NCndoaW5nZS9EUlNaRwp3aGluZ2VpbmcKd2hpbm55L0dEU00Kd2hpbnkvUlQKd2hpcC9NUwp3aGlwY29yZC9NCndoaXBsYXNoL01TCndoaXBwZWQKd2hpcHBlci9NUwp3aGlwcGVyc25hcHBlci9NUwp3aGlwcGV0L01TCndoaXBwaW5nL1NNCndoaXBwbGV0cmVlL1NNCndoaXBwb29yd2lsbC9NUwp3aGlwc2F3L01ER1MKd2hpci9NUwp3aGlybC9TTURHCndoaXJsaWdpZy9NUwp3aGlybHBvb2wvTVMKd2hpcmx3aW5kL01TCndoaXJseWJpcmQvU00Kd2hpcnJlZAp3aGlycmluZwp3aGlzay9TTURSWkcKd2hpc2tlci9NRAp3aGlza2VyeQp3aGlza2V5L01TCndoaXNreXMKd2hpc3Blci9NRFJTWkcKd2hpc3BlcmVyL00Kd2hpc3QvTQp3aGlzdGxlL01aR0RSUwp3aGlzdGxlci9NCndoaXQvTUROUlNYVEdKCndoaXRlL1NQTQp3aGl0ZWJhaXQKd2hpdGVib2FyZC9TCndoaXRlY2FwL1NNCndoaXRlZmlzaC9NUwp3aGl0ZWhlYWQvTVMKd2hpdGVuL1pHRFJKCndoaXRlbmVyL00Kd2hpdGVuZXNzL00Kd2hpdGVuaW5nL00Kd2hpdGVvdXQvU00Kd2hpdGV0YWlsL01TCndoaXRld2FsbC9TTQp3aGl0ZXdhc2gvTURTRwp3aGl0ZXdhdGVyL00Kd2hpdGV5L1NNCndoaXRoZXIKd2hpdGluZy9NCndoaXRpc2gKd2hpdHRsZS9aR0RSUwp3aGl0dGxlci9NCndoaXovTQp3aGl6a2lkL00Kd2hpenpiYW5nL01TCndoaXp6ZWQKd2hpenplcwp3aGl6emluZwp3aG8nZAp3aG8nbGwKd2hvJ3JlCndobyd2ZQp3aG8vTQp3aG9hCndob2R1bml0L01TCndob2V2ZXIKd2hvbGUvU01QCndob2xlZm9vZC9TCndob2xlZ3JhaW4Kd2hvbGVoZWFydGVkL1lQCndob2xlaGVhcnRlZG5lc3MvTQp3aG9sZW1lYWwKd2hvbGVuZXNzL00Kd2hvbGVzYWxlL01aR0RSUwp3aG9sZXNhbGVyL00Kd2hvbGVzb21lL1VQCndob2xlc29tZWx5Cndob2xlc29tZW5lc3MvVU0Kd2hvbGV3aGVhdAp3aG9sbHkKd2hvbQp3aG9tZXZlcgp3aG9tc29ldmVyCndob29wL1NNRFJaRwp3aG9vcGVlL1MKd2hvb3Blci9NCndob29zaC9NRFNHCndob3AvUwp3aG9wcGVkCndob3BwZXIvU00Kd2hvcHBpbmcKd2hvcmUvU01HCndob3JlaG91c2UvTVMKd2hvcmVpc2gKd2hvcmlzaAp3aG9ybC9TTUQKd2hvc2UKd2hvc28Kd2hvc29ldmVyCndodXAvUwp3aHVwcGVkCndodXBwaW5nCndoeSdkCndoeS9NCndoeXMKd2ljay9NRFJTWgp3aWNrZWQvVFBSWQp3aWNrZWRuZXNzL00Kd2lja2VyL00Kd2lja2Vyd29yay9NCndpY2tldC9TTQp3aWRlL1lUUlAKd2lkZW1vdXRoZWQKd2lkZW4vU0RSWkcKd2lkZW5lci9NCndpZGVuZXNzL00Kd2lkZXNjcmVlbi9NUwp3aWRlc3ByZWFkCndpZGdldC9TCndpZG93L1NNRFJaRwp3aWRvd2VyL00Kd2lkb3dob29kL00Kd2lkdGgvTQp3aWR0aHMKd2llbGQvU0RSWkcKd2llbGRlci9NCndpZW5lci9TTQp3aWVuaWUvU00Kd2lmZS9NWQp3aWZlbGVzcwp3aWcvU00Kd2lnZW9uL00Kd2lnZ2VkCndpZ2dpbmcKd2lnZ2xlL0RSU01aRwp3aWdnbGVyL00Kd2lnZ2x5L1RSCndpZ2h0L1NNCndpZ2xldC9TTQp3aWd3YWcvU00Kd2lnd2FnZ2VkCndpZ3dhZ2dpbmcKd2lnd2FtL1NNCndpa2kvTVMKd2lsZC9NUllTVFAKd2lsZGNhcmQKd2lsZGNhdC9NUwp3aWxkY2F0dGVkCndpbGRjYXR0ZXIvTVMKd2lsZGNhdHRpbmcKd2lsZGViZWVzdC9NUwp3aWxkZXJuZXNzL01TCndpbGRmaXJlL01TCndpbGRmbG93ZXIvU00Kd2lsZGZvd2wvTQp3aWxkbGlmZS9NCndpbGRuZXNzL00Kd2lsZHMvTQp3aWxlL01HRFMKd2lsaW5lc3MvTQp3aWxsL01EUwp3aWxsZnVsL1BZCndpbGxmdWxuZXNzL00Kd2lsbGllcy9NCndpbGxpbmcvVVBZCndpbGxpbmduZXNzL1VNCndpbGxpd2F3L01TCndpbGxvdy9TTQp3aWxsb3d5CndpbGxwb3dlci9NCndpbGx5L1MKd2lsdC9NRFNHCndpbHkvUlRQCndpbXAvTURTRwp3aW1waXNoCndpbXBsZS9EU01HCndpbXB5L1JUCndpbi9TR01ECndpbmNlL0RTTUcKd2luY2gvTURTRwp3aW5kJ3MKd2luZC9VQVNHCndpbmRiYWcvU00Kd2luZGJsb3duCndpbmRicmVhay9TWk1SCndpbmRicmVha2VyL00Kd2luZGJ1cm4vTUQKd2luZGNoZWF0ZXIvUwp3aW5kY2hpbGwvTQp3aW5kZWQKd2luZGVyL1NNCndpbmRmYWxsL01TCndpbmRmbG93ZXIvTVMKd2luZGlseQp3aW5kaW5lc3MvTQp3aW5kaW5nJ3MKd2luZGphbW1lci9TTQp3aW5kbGFzcy9NUwp3aW5kbGVzcwp3aW5kbWlsbC9NREdTCndpbmRvdy9TTURHCndpbmRvd2xlc3MKd2luZG93cGFuZS9TTQp3aW5kb3dzaWxsL1NNCndpbmRwaXBlL01TCndpbmRwcm9vZgp3aW5kcm93L1NNCndpbmRzY3JlZW4vU00Kd2luZHNoaWVsZC9TTQp3aW5kc29jay9NUwp3aW5kc3Rvcm0vTVMKd2luZHN1cmYvWkdEUlMKd2luZHN1cmZlci9NCndpbmRzdXJmaW5nL00Kd2luZHN3ZXB0CndpbmR1cC9TTQp3aW5kd2FyZC9NCndpbmR5L1JUUAp3aW5lL01TCndpbmVnbGFzcy9NUwp3aW5lZ3Jvd2VyL01TCndpbmVtYWtlci9NUwp3aW5lcnkvU00Kd2luZy9NRFJaRwp3aW5nZGluZy9NUwp3aW5nbGVzcwp3aW5nbGlrZQp3aW5nbnV0L1NNCndpbmdzcGFuL01TCndpbmdzcHJlYWQvU00Kd2luZ3RpcC9TTQp3aW5rL01EUlNaRwp3aW5rZXIvTQp3aW5rbGUvRFNNRwp3aW5uYWJsZS9VCndpbm5lci9TTQp3aW5uaW5nL01ZUwp3aW5ub3cvWkdTRFIKd2lubm93ZXIvTQp3aW5vL01TCndpbnNvbWUvWVRSUAp3aW5zb21lbmVzcy9NCndpbnRlci9HU01ECndpbnRlcmdyZWVuL00Kd2ludGVyaXplL0dEUwp3aW50ZXJ0aW1lL00Kd2ludHJ5L1RSCndpbnkvUlQKd2lwZS9NWkdEUlMKd2lwZXIvTQp3aXJlJ3MKd2lyZS9BR0RTCndpcmVkL1MKd2lyZWhhaXIvTVMKd2lyZWxlc3MvTVMKd2lyZXRhcC9NUwp3aXJldGFwcGVkCndpcmV0YXBwZXIvU00Kd2lyZXRhcHBpbmcvTQp3aXJpbmVzcy9NCndpcmluZy9NCndpcnkvUlRQCndpc2RvbS9NCndpc2UvTVlUR0RSUwp3aXNlYWNyZS9TTQp3aXNlY3JhY2svTURTRwp3aXNlZ3V5L1MKd2lzaC9NRFJTWkcKd2lzaGJvbmUvU00Kd2lzaGVyL00Kd2lzaGZ1bC9ZCndpc2hsaXN0J3MKd2lzcC9NUwp3aXNweS9SVAp3aXN0Cndpc3RlcmlhL1NNCndpc3RmdWwvWVAKd2lzdGZ1bG5lc3MvTQp3aXQvU00Kd2l0Y2gvTURTRwp3aXRjaGNyYWZ0L00Kd2l0Y2hlcnkvTQp3aXRoCndpdGhhbAp3aXRoZHJhdy9TRwp3aXRoZHJhd2FsL01TCndpdGhkcmF3bgp3aXRoZHJldwp3aXRoZS9EUlNNWkcKd2l0aGVyL0pHRAp3aXRoZXJpbmcvWQp3aXRoZXJzL00Kd2l0aGhlbGQKd2l0aGhvbGQvU0cKd2l0aGhvbGRpbmcvTQp3aXRoaW4vTQp3aXRob3V0CndpdGhzdGFuZC9HUwp3aXRoc3Rvb2QKd2l0bGVzcy9QWQp3aXRsZXNzbmVzcy9NCndpdG5lc3MvTURTRwp3aXRzL00Kd2l0dGVkCndpdHRlci9TR0QKd2l0dGljaXNtL1NNCndpdHRpbHkKd2l0dGluZXNzL00Kd2l0dGluZy9VWQp3aXR0eS9SUFQKd2l2ZS9HRFMKd2l6CndpemFyZC9TTVkKd2l6YXJkcnkvTQp3aXplbmVkCndrL1kKd29hZC9NCndvYmJsZS9NR0RTCndvYmJsaW5lc3MvTQp3b2JibHkvUlRQCndvZGdlL1MKd29lL1NNCndvZWJlZ29uZQp3b2VmdWwvWVAKd29lZnVsbGVyCndvZWZ1bGxlc3QKd29lZnVsbmVzcy9NCndvZy9TCndvay9TTU4Kd29rZQp3b2xkL01TCndvbGYvTURTRwp3b2xmaG91bmQvU00Kd29sZmlzaAp3b2xmcmFtL00Kd29sdmVyaW5lL1NNCndvbHZlcwp3b21hbi9NCndvbWFuaG9vZC9NCndvbWFuaXNoCndvbWFuaXplL0RSU1pHCndvbWFuaXplci9NCndvbWFua2luZC9NCndvbWFubGlrZS9NCndvbWFubGluZXNzL00Kd29tYW5seS9SUFQKd29tYi9NUwp3b21iYXQvTVMKd29tYmxlL1MKd29tZW4vTQp3b21lbmZvbGsvU00Kd29tZW5mb2xrcy9NCndvbid0Cndvbi9NCndvbmRlci9NREdMUwp3b25kZXJmdWwvWVAKd29uZGVyZnVsbmVzcy9NCndvbmRlcmluZy9ZCndvbmRlcmxhbmQvTVMKd29uZGVybWVudC9NCndvbmRyb3VzL1kKd29uay9NUwp3b25reS9UUgp3b250L01ECndvbnRlZC9VCndvby9TWkdEUgp3b29kL01ETlNHCndvb2RiaW5lL00Kd29vZGJsb2NrL01TCndvb2RjYXJ2ZXIvTVMKd29vZGNhcnZpbmcvU00Kd29vZGNodWNrL01TCndvb2Rjb2NrL1NNCndvb2RjcmFmdC9NCndvb2RjdXQvU00Kd29vZGN1dHRlci9TTQp3b29kY3V0dGluZy9NCndvb2Rlbi9SWVRQCndvb2Rlbm5lc3MvTQp3b29kaW5lc3MvTQp3b29kbGFuZC9TTQp3b29kbGljZQp3b29kbG90L1NNCndvb2Rsb3VzZQp3b29kbWFuL00Kd29vZG1lbgp3b29kcGVja2VyL01TCndvb2RwaWxlL1NNCndvb2RzL00Kd29vZHNoZWQvU00Kd29vZHNpbmVzcy9NCndvb2RzbWFuL00Kd29vZHNtZW4Kd29vZHN5L1JUUAp3b29kd2luZC9NUwp3b29kd29yay9NUlpHCndvb2R3b3JrZXIvTQp3b29kd29ya2luZy9NCndvb2R3b3JtL1MKd29vZHkvVFBSU00Kd29vZXIvTQp3b29mL01EUlNaRwp3b29mZXIvTQp3b29sL01OWAp3b29sZW4vTQp3b29sZ2F0aGVyaW5nL00Kd29vbGluZXNzCndvb2xsaW5lc3MvTQp3b29sbHkvUlNNUFQKd29vemlseQp3b296aW5lc3MvTQp3b296eS9UUlAKd29wL1MhCndvcmQncwp3b3JkL0FEU0cKd29yZGFnZS9NCndvcmRib29rL1NNCndvcmRpbHkKd29yZGluZXNzL00Kd29yZGluZy9TTQp3b3JkbGVzcy9ZCndvcmRwbGF5L00Kd29yZHNtaXRoCndvcmRzbWl0aHMKd29yZHkvVFBSCndvcmUKd29yaydzCndvcmsvQURKU0cKd29ya2FibGUvVQp3b3JrYWRheQp3b3JrYWhvbGljL1NNCndvcmthcm91bmQvUwp3b3JrYmFza2V0L1MKd29ya2JlbmNoL01TCndvcmtib29rL01TCndvcmtkYXkvU00Kd29ya2VyL01TCndvcmtmYXJlL00Kd29ya2Zsb3cvTVMKd29ya2ZvcmNlL00Kd29ya2hvcnNlL1NNCndvcmtob3VzZS9TTQp3b3JraW5nJ3MKd29ya2luZ21hbi9NCndvcmtpbmdtZW4Kd29ya2luZ3MvTQp3b3JraW5nd29tYW4vTQp3b3JraW5nd29tZW4Kd29ya2xvYWQvTVMKd29ya21hbi9NCndvcmttYW5saWtlCndvcmttYW5zaGlwL00Kd29ya21hdGUvUwp3b3JrbWVuCndvcmtvdXQvU00Kd29ya3BsYWNlL01TCndvcmtyb29tL01TCndvcmtzL00Kd29ya3NoZWV0L01TCndvcmtzaG9wL01TCndvcmtzaHkKd29ya3N0YXRpb24vTVMKd29ya3RhYmxlL01TCndvcmt0b3AvUwp3b3JrdXAvTVMKd29ya3dlZWsvU00Kd29ybGQvU00Kd29ybGRsaWVyCndvcmxkbGluZXNzL1VNCndvcmxkbHkvVVRQCndvcmxkdmlldy9TTQp3b3JsZHdpZGUKd29ybS9NRFNHCndvcm1ob2xlL01TCndvcm13b29kL00Kd29ybXkvVFIKd29ybi9VCndvcnJpZWQvWQp3b3JyaWVyL00Kd29ycmltZW50L00Kd29ycmlzb21lCndvcnJ5L1pHRFJTTUoKd29ycnlpbmcvWQp3b3JyeXdhcnQvU00Kd29yc2UvTQp3b3JzZW4vRFNHCndvcnNoaXAvWkdTTURSCndvcnNoaXBlci9NCndvcnNoaXBmdWwKd29yc3QvU0dNRAp3b3JzdGVkL00Kd29ydC9NCndvcnRoL00Kd29ydGhpZXMKd29ydGhpbHkvVQp3b3J0aGluZXNzL1VNCndvcnRobGVzcy9QWQp3b3J0aGxlc3NuZXNzL00Kd29ydGh3aGlsZQp3b3J0aHkncwp3b3J0aHkvVVBSVAp3b3QKd290Y2hhCndvdWxkJ3ZlCndvdWxkL1MKd291bGRuJ3QKd291bGRzdAp3b3VuZC9TR01EUgp3b3ZlL0EKd292ZW4vQVUKd293L1NHTUQKd3BtCndyYWNrL0dTTUQKd3JhaXRoL00Kd3JhaXRocwp3cmFuZ2xlL0RSU01aR0oKd3JhbmdsZXIvTQp3cmFwJ3MKd3JhcC9VUwp3cmFwYXJvdW5kL1NNCndyYXBwZWQvVQp3cmFwcGVyL1NNCndyYXBwaW5nL01TCndyYXNzZS9NUwp3cmF0aC9NCndyYXRoZnVsL1kKd3JlYWsvU0dECndyZWF0aC9NRFNHCndyZWF0aGUKd3JlYXRocwp3cmVjay9TWkdNRFIKd3JlY2thZ2UvTQp3cmVja2VyL00Kd3Jlbi9NUwp3cmVuY2gvTURTRwp3cmVzdC9TR01ECndyZXN0bGUvTVpHRFJTCndyZXN0bGVyL00Kd3Jlc3RsaW5nL00Kd3JldGNoL01TCndyZXRjaGVkL1RQUlkKd3JldGNoZWRuZXNzL00Kd3JpZ2dsZS9NWkdEUlMKd3JpZ2dsZXIvTQp3cmlnZ2x5CndyaWdodC9NUwp3cmluZy9TWkdNUgp3cmluZ2VyL00Kd3JpbmtsZS9NR0RTCndyaW5rbGVkL1UKd3JpbmtseS9UUlNNCndyaXN0L1NNCndyaXN0YmFuZC9NUwp3cmlzdHdhdGNoL01TCndyaXQvTVJCSlNaRwp3cml0ZS9TCndyaXRlci9NCndyaXRoZS9NR0RTCndyaXRpbmcvTQp3cml0dGVuL0FVCndyb25nL1NUR01QRFJZCndyb25nZG9lci9TTQp3cm9uZ2RvaW5nL1NNCndyb25nZnVsL1BZCndyb25nZnVsbmVzcy9NCndyb25naGVhZGVkL1lQCndyb25naGVhZGVkbmVzcy9NCndyb25nbmVzcy9NCndyb3RlL0EKd3JvdGgKd3JvdWdodAp3cnVuZwp3cnkvWQp3cnllcgp3cnllc3QKd3J5bmVzcy9NCnd0Cnd1bmRlcmtpbmQvUwp3dXJzdC9TTQp3dXNzL01TCnd1c3N5L1JTTVQKeAp4Y2kKeGNpaQp4Y2l2CnhjaXgKeGN2aQp4Y3ZpaQp4ZW5vbi9NCnhlbm9waG9iZS9NUwp4ZW5vcGhvYmlhL00KeGVub3Bob2JpYwp4ZXJvZ3JhcGhpYwp4ZXJvZ3JhcGh5L00KeGVyb3gvTURTRwp4aS9TTQp4aWkKeGlpaQp4aXYKeGl4Cnhvcgp4cmVmL1MKeHRlcm0vTQp4dgp4dmkKeHZpaQp4dmlpaQp4eAp4eGkKeHhpaQp4eGlpaQp4eGl2Cnh4aXgKeHh2Cnh4dmkKeHh2aWkKeHh2aWlpCnh4eAp4eHhpCnh4eGlpCnh4eGlpaQp4eHhpdgp4eHhpeAp4eHh2Cnh4eHZpCnh4eHZpaQp4eHh2aWlpCnh5bGVtL00KeHlsZW5lCnh5bG9waG9uZS9TTQp4eWxvcGhvbmlzdC9NUwp5J2FsbAp5L0YKeWEKeWFjaHQvU01ERwp5YWNodGluZy9NCnlhY2h0c21hbi9NCnlhY2h0c21lbgp5YWNodHN3b21hbi9NCnlhY2h0c3dvbWVuCnlhaG9vL1NNCnlhay9TTQp5YWtrZWQKeWFra2luZwp5YW0vU00KeWFtbWVyL1NaR01EUgp5YW1tZXJlci9NCnlhbmcvTQp5YW5rL01EU0cKeWFwL1NNCnlhcHBlZAp5YXBwaW5nCnlhcmQvTVMKeWFyZGFnZS9NUwp5YXJkYXJtL01TCnlhcmRtYW4vTQp5YXJkbWFzdGVyL01TCnlhcmRtZW4KeWFyZHN0aWNrL01TCnlhcm11bGtlL1NNCnlhcm4vTVMKeWFycm93L00KeWFzaG1hay9TCnlhdy9TR01ECnlhd2wvTVMKeWF3bi9NRFJTWkcKeWF3bmVyL00KeWF3cy9NCnlkCnllL1JTVAp5ZWEvU00KeWVhaC9NCnllYWhzCnllYXIvTVlTCnllYXJib29rL01TCnllYXJsaW5nL01TCnllYXJsb25nCnllYXJseS9TTQp5ZWFybi9HU0pECnllYXJuaW5nL00KeWVhc3QvU00KeWVhc3R5L1JUCnllZ2cvTVMKeWVsbC9NRFNHCnllbGxvdy9NRFJUR1BTCnllbGxvd2hhbW1lci9TCnllbGxvd2lzaAp5ZWxsb3duZXNzL00KeWVsbG93eQp5ZWxwL01EU0cKeWVuL1NNCnllb21hbi9NCnllb21hbnJ5L00KeWVvbWVuCnllcC9TTQp5ZXMvTVMKeWVzaGl2YS9TTQp5ZXNzZWQKeWVzc2luZwp5ZXN0ZXJkYXkvTVMKeWVzdGVyeWVhci9NCnlldAp5ZXRpL01TCnlldy9TTQp5aWQvUwp5aWVsZC9KU0dNRAp5aWtlcwp5aW4vTQp5aXAvU00KeWlwZQp5aXBwZWQKeWlwcGVlCnlpcHBpbmcKeW8KeW9iL1MKeW9iYm8vUwp5b2RlbC9TTURSWkcKeW9kZWxlci9NCnlvZ2EvTQp5b2dpL01TCnlvZ2ljCnlvZ3VydC9TTQp5b2tlJ3MKeW9rZS9VR0RTCnlva2VsL1NNCnlvbGsvTURTCnlvbgp5b25kZXIKeW9ua3MKeW9yZS9NCnlvdSdkCnlvdSdsbAp5b3UncmUKeW91J3ZlCnlvdS9TTUgKeW91bmcvVE1SCnlvdW5naXNoCnlvdW5nc3Rlci9NUwp5b3VyL1MKeW91cnNlbGYKeW91cnNlbHZlcwp5b3V0aC9NCnlvdXRoZnVsL1lQCnlvdXRoZnVsbmVzcy9NCnlvdXRocwp5b3cKeW93bC9NRFNHCnlyL1MKeXR0ZXJiaXVtL00KeXR0cml1bS9NCnl1YW4vTQp5dWNjYS9TTQp5dWNrCnl1Y2t5L1RSCnl1ay9TTQp5dWtrZWQKeXVra2luZwp5dWtreQp5dWxlL00KeXVsZXRpZGUvTQp5dW0KeXVtbXkvVFIKeXVwL1NNCnl1cHBpZS9NUwp5dXBwaWZ5L0dEUwp5dXJ0L01TCnovRE5YVEdKCnphbmluZXNzL00KemFueS9SU01QVAp6YXAvU00KemFwcGVkCnphcHBlci9NUwp6YXBwaW5nCnphcHB5CnplYWwvTQp6ZWFsb3QvTVMKemVhbG90cnkvTQp6ZWFsb3VzL1lQCnplYWxvdXNuZXNzL00KemVicmEvU00KemVidS9NUwp6ZWQvU00KemVpdGdlaXN0L1NNCnplbml0aC9NCnplbml0aHMKemVubmVkCnplb2xpdGUvUwp6ZXBoeXIvTVMKemVwcGVsaW4vTVMKemVyby9NREhTRwp6ZXJvZXMKemVzdC9NUwp6ZXN0ZnVsL1lQCnplc3RmdWxuZXNzL00KemVzdHkvUlQKemV0YS9NUwp6aWd6YWcvU00KemlnemFnZ2VkCnppZ3phZ2dpbmcKemlsY2gvTQp6aWxsaW9uL01TCnppbmMvTVMKemluY2tlZAp6aW5ja2luZwp6aW5lL1MKemluZmFuZGVsL00KemluZy9NRFJaRwp6aW5nZXIvTQp6aW5neS9SVAp6aW5uaWEvTVMKemlwJ3MKemlwL1VTCnppcHBlZC9VCnppcHBlci9NREdTCnppcHBpbmcvVQp6aXBweS9UUgp6aXJjb24vTVMKemlyY29uaXVtL00Keml0L1NNCnppdGhlci9NUwp6bG90eS9TTQp6bG90eXMKem9kaWFjL01TCnpvZGlhY2FsCnpvbWJpZS9NUwp6b25hbC9ZCnpvbmUncwp6b25lL0FHRFMKem9uaW5nL00Kem9ua2VkCnpvby9TTQp6b29rZWVwZXIvU00Kem9vbG9naWNhbC9ZCnpvb2xvZ2lzdC9TTQp6b29sb2d5L00Kem9vbS9NRFNHCnpvb3BoeXRlL1NNCnpvb3BoeXRpYwp6b29wbGFua3Rvbgp6b3JjaAp6b3N0ZXIKem91bmRzCnp1Y2NoaW5pL01TCnp3aWViYWNrL00KenlkZWNvL00Kenlnb3RlL1NNCnp5Z290aWMKenltdXJneS9NCg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/Hunspell/Dictionaries/Readme.md" Permission="660" Encode="Base64">VGFrZW4gZnJvbSBodHRwczovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2xpYnJlb2ZmaWNlL2RpY3Rpb25hcmllcy8uCg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Configuration.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+CiAgICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIi8+CgogICAgPHhzOmVsZW1lbnQgbmFtZT0ib3RvYm9fY29uZmlnIj4KICAgICAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlNldHRpbmciIHR5cGU9IlNldHRpbmdUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgogICAgICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZlcnNpb24iIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzOnN0cmluZyIvPgogICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImluaXQiIHVzZT0icmVxdWlyZWQiPgogICAgICAgICAgICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgICAgICAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRnJhbWV3b3JrIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYXRpb24iLz4KICAgICAgICAgICAgICAgICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJDb25maWciLz4KICAgICAgICAgICAgICAgICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFuZ2VzIi8+CiAgICAgICAgICAgICAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgICAgICAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgICAgICAgICAgPC94czphdHRyaWJ1dGU+CiAgICAgICAgPC94czpjb21wbGV4VHlwZT4KICAgIDwveHM6ZWxlbWVudD4KCiAgICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJCb29sZWFuQXR0cmlidXRlIj4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4KICAgICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIwIi8+CiAgICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iMSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICA8L3hzOnNpbXBsZVR5cGU+CgogICAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlNldHRpbmdUeXBlIj4KICAgICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkRlc2NyaXB0aW9uIj4KICAgICAgICAgICAgICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgICAgICAgICAgICAgICA8eHM6c2ltcGxlQ29udGVudD4KICAgICAgICAgICAgICAgICAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpzdHJpbmciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJUcmFuc2xhdGFibGUiIHVzZT0ib3B0aW9uYWwiIHR5cGU9IkJvb2xlYW5BdHRyaWJ1dGUiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC94czpleHRlbnNpb24+CiAgICAgICAgICAgICAgICAgICAgPC94czpzaW1wbGVDb250ZW50PgogICAgICAgICAgICAgICAgPC94czpjb21wbGV4VHlwZT4KICAgICAgICAgICAgPC94czplbGVtZW50PgogICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYXZpZ2F0aW9uIiB0eXBlPSJ4czpzdHJpbmciIC8+CiAgICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IlZhbHVlIiAgICAgIHR5cGU9IlZhbHVlVHlwZSIvPgogICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJOYW1lIiB1c2U9InJlcXVpcmVkIj4KICAgICAgICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4KICAgICAgICAgICAgICAgICAgICA8eHM6bWF4TGVuZ3RoIHZhbHVlPSIyNTAiIC8+CiAgICAgICAgICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICAgICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICAgICAgPC94czphdHRyaWJ1dGU+CgogICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iUmVxdWlyZWQiICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIiB0eXBlPSJCb29sZWFuQXR0cmlidXRlIiAvPgogICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iVmFsaWQiICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIiB0eXBlPSJCb29sZWFuQXR0cmlidXRlIi8+CiAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJSZWFkT25seSIgICAgICAgICAgICAgICAgIHVzZT0ib3B0aW9uYWwiIHR5cGU9IkJvb2xlYW5BdHRyaWJ1dGUiIC8+CiAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJJbnZpc2libGUiICAgICAgICAgICAgICAgIHVzZT0ib3B0aW9uYWwiIHR5cGU9IkJvb2xlYW5BdHRyaWJ1dGUiIC8+CiAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJVc2VyTW9kaWZpY2F0aW9uUG9zc2libGUiIHVzZT0ib3B0aW9uYWwiIHR5cGU9IkJvb2xlYW5BdHRyaWJ1dGUiIC8+CiAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJVc2VyTW9kaWZpY2F0aW9uQWN0aXZlIiAgIHVzZT0ib3B0aW9uYWwiIHR5cGU9IkJvb2xlYW5BdHRyaWJ1dGUiIC8+CgogICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iQ29uZmlnTGV2ZWwiIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOmludCIvPgoKICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9IlVzZXJQcmVmZXJlbmNlc0dyb3VwIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czpzdHJpbmciLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CgogICAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlZhbHVlVHlwZSI+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSXRlbSIgIHR5cGU9Ikl0ZW1UeXBlIi8+CiAgICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhhc2giICB0eXBlPSJIYXNoVHlwZSIvPgogICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJBcnJheSIgdHlwZT0iQXJyYXlUeXBlIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgoKICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSIgbmFtZT0iSXRlbVR5cGUiPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkFycmF5IiB0eXBlPSJBcnJheVR5cGUiLz4KICAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSGFzaCIgIHR5cGU9Ikhhc2hUeXBlIi8+CiAgICAgICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ikl0ZW0iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHR5cGU9Ikl0ZW1UeXBlIi8+CiAgICAgICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJUcmFuc2xhdGFibGUiIHR5cGU9IkJvb2xlYW5BdHRyaWJ1dGUiIHVzZT0ib3B0aW9uYWwiIC8+CiAgICAgICAgPCEtLSBhbGxvdyBmb3IgYXJiaXRyYXJ5IHVuc3BlY2lmaWVkIHZhbHVlLXR5cGUgc3BlY2lmaWMgYXR0cmlidXRlcyAtLT4KICAgICAgICA8eHM6YW55QXR0cmlidXRlIHByb2Nlc3NDb250ZW50cz0ic2tpcCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KCiAgICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iSGFzaFR5cGUiPgogICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iRGVmYXVsdEl0ZW0iIHR5cGU9Ikl0ZW1UeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIvPgogICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJdGVtIiB0eXBlPSJJdGVtVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJNaW5JdGVtcyIgdHlwZT0ieHM6aW50IiB1c2U9Im9wdGlvbmFsIiAvPgogICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iTWF4SXRlbXMiIHR5cGU9InhzOmludCIgdXNlPSJvcHRpb25hbCIgLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CgogICAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkFycmF5VHlwZSI+CiAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZWZhdWx0SXRlbSIgdHlwZT0iRGVmYXVsdEl0ZW1UeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIvPgogICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJJdGVtIiB0eXBlPSJJdGVtVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgogICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJNaW5JdGVtcyIgdHlwZT0ieHM6aW50IiB1c2U9Im9wdGlvbmFsIiAvPgogICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iTWF4SXRlbXMiIHR5cGU9InhzOmludCIgdXNlPSJvcHRpb25hbCIgLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIiBuYW1lPSJEZWZhdWx0SXRlbVR5cGUiPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9IkFycmF5IiB0eXBlPSJEZWZhdWx0QXJyYXlUeXBlIi8+CiAgICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Ikhhc2giICB0eXBlPSJEZWZhdWx0SGFzaFR5cGUiLz4KICAgICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iSXRlbSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgdHlwZT0iSXRlbVR5cGUiLz4KICAgICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9IlRyYW5zbGF0YWJsZSIgdHlwZT0iQm9vbGVhbkF0dHJpYnV0ZSIgdXNlPSJvcHRpb25hbCIgLz4KICAgICAgICA8IS0tIGFsbG93IGZvciBhcmJpdHJhcnkgdW5zcGVjaWZpZWQgdmFsdWUtdHlwZSBzcGVjaWZpYyBhdHRyaWJ1dGVzIC0tPgogICAgICAgIDx4czphbnlBdHRyaWJ1dGUgcHJvY2Vzc0NvbnRlbnRzPSJza2lwIi8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgoKICAgIDwhLS0gSGFzaGVzIGluIERlZmF1bHRJdGVtcyBjYW4gb25seSBjb250YWluIG90aGVyIERlZmF1bHRJdGVtcywgbm90IHJlYWwgSXRlbXMuIC0tPgogICAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRlZmF1bHRIYXNoVHlwZSI+CiAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZWZhdWx0SXRlbSIgdHlwZT0iRGVmYXVsdEl0ZW1UeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIvPgogICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJNaW5JdGVtcyIgdHlwZT0ieHM6aW50IiB1c2U9Im9wdGlvbmFsIiAvPgogICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iTWF4SXRlbXMiIHR5cGU9InhzOmludCIgdXNlPSJvcHRpb25hbCIgLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CgogICAgPCEtLSBBcnJheXMgaW4gRGVmYXVsdEl0ZW1zIGNhbiBvbmx5IGNvbnRhaW4gb3RoZXIgRGVmYXVsdEl0ZW1zLCBub3QgcmVhbCBJdGVtcy4gLS0+CiAgICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRGVmYXVsdEFycmF5VHlwZSI+CiAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJEZWZhdWx0SXRlbSIgdHlwZT0iRGVmYXVsdEl0ZW1UeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIvPgogICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJNaW5JdGVtcyIgdHlwZT0ieHM6aW50IiB1c2U9Im9wdGlvbmFsIiAvPgogICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iTWF4SXRlbXMiIHR5cGU9InhzOmludCIgdXNlPSJvcHRpb25hbCIgLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CjwveHM6c2NoZW1hPgo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Database.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+CiAgICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIi8+CgogICAgPCEtLSBPVE9CTyBzY2hlbWEgZmlsZXMgLS0+CiAgICA8eHM6ZWxlbWVudCBuYW1lPSJkYXRhYmFzZSI+CiAgICAgICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICAgICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iVGFibGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CiAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9IlRhYmxlQ3JlYXRlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgogICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJUYWJsZUFsdGVyIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgogICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJUYWJsZURyb3AiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CiAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Ikluc2VydCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KICAgICAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iTmFtZSIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICA8L3hzOmNvbXBsZXhUeXBlPgogICAgPC94czplbGVtZW50PgoKICAgIDwhLS0gT1RPQk8gcGFja2FnZSBmaWxlcyAoLnNvcG0pIC0tPgogICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YWJhc2VJbnN0YWxsIj4KICAgICAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgICAgICAgIDx4czpjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJUYWJsZUNyZWF0ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iVGFibGVBbHRlciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iVGFibGVEcm9wIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgogICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJJbnNlcnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CiAgICAgICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9IlR5cGUiIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iSWZQYWNrYWdlIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9IklmTm90UGFja2FnZSIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICA8L3hzOmNvbXBsZXhUeXBlPgogICAgPC94czplbGVtZW50PgogICAgPHhzOmVsZW1lbnQgbmFtZT0iRGF0YWJhc2VVbmluc3RhbGwiPgogICAgICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9IlRhYmxlQ3JlYXRlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgogICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJUYWJsZUFsdGVyIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgogICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJUYWJsZURyb3AiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CiAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Ikluc2VydCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KICAgICAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iVHlwZSIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJJZlBhY2thZ2UiIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iSWZOb3RQYWNrYWdlIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgIDwveHM6Y29tcGxleFR5cGU+CiAgICA8L3hzOmVsZW1lbnQ+CiAgICA8eHM6ZWxlbWVudCBuYW1lPSJEYXRhYmFzZVJlaW5zdGFsbCI+CiAgICAgICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICAgICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iVGFibGVDcmVhdGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CiAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9IlRhYmxlQWx0ZXIiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CiAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9IlRhYmxlRHJvcCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iSW5zZXJ0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgogICAgICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJUeXBlIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9IklmUGFja2FnZSIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJJZk5vdFBhY2thZ2UiIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgPC94czpjb21wbGV4VHlwZT4KICAgIDwveHM6ZWxlbWVudD4KICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGFiYXNlVXBncmFkZSI+CiAgICAgICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICAgICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iVGFibGVDcmVhdGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CiAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9IlRhYmxlQWx0ZXIiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CiAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9IlRhYmxlRHJvcCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iSW5zZXJ0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgogICAgICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJUeXBlIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9IklmUGFja2FnZSIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJJZk5vdFBhY2thZ2UiIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgPC94czpjb21wbGV4VHlwZT4KICAgIDwveHM6ZWxlbWVudD4KCiAgICA8IS0tIE9yYWNsZSBhbGxvd3MgdGFibGUgbmFtZXMgdXAgdG8gMzAgY2hhcmFjdGVycyBvbmx5LiAtLT4KICAgIDx4czpzaW1wbGVUeXBlIG5hbWU9IlRhYmxlTmFtZSI+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czptYXhMZW5ndGggdmFsdWU9IjMwIiAvPgogICAgICAgICAgPHhzOnBhdHRlcm4gdmFsdWU9IlthLXpBLVowLTlfLV0rIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgIDwveHM6c2ltcGxlVHlwZT4KCiAgICA8eHM6ZWxlbWVudCBuYW1lPSJUYWJsZSI+CiAgICAgICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICAgICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iQ29sdW1uIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iRm9yZWlnbktleSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iSW5kZXgiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CiAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9IlVuaXF1ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KICAgICAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iTmFtZSIgdXNlPSJvcHRpb25hbCIgdHlwZT0iVGFibGVOYW1lIi8+CiAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iVmVyc2lvbiIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICA8L3hzOmNvbXBsZXhUeXBlPgogICAgPC94czplbGVtZW50PgoKICAgIDx4czplbGVtZW50IG5hbWU9IlRhYmxlQ3JlYXRlIj4KICAgICAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgICAgICAgIDx4czpjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJDb2x1bW4iIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgogICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJGb3JlaWduS2V5IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgogICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJJbmRleCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iVW5pcXVlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgogICAgICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJOYW1lIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJUYWJsZU5hbWUiLz4KICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJWZXJzaW9uIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgIDwveHM6Y29tcGxleFR5cGU+CiAgICA8L3hzOmVsZW1lbnQ+CgogICAgPHhzOmVsZW1lbnQgbmFtZT0iVGFibGVBbHRlciI+CiAgICAgICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICAgICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iQ29sdW1uQWRkIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgogICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJDb2x1bW5DaGFuZ2UiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CiAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9IkNvbHVtbkRyb3AiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CiAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9IkZvcmVpZ25LZXlDcmVhdGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CiAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9IkZvcmVpZ25LZXlEcm9wIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgogICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJJbmRleENyZWF0ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iSW5kZXhEcm9wIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgogICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJVbmlxdWVDcmVhdGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CiAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9IlVuaXF1ZURyb3AiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CiAgICAgICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Ik5hbWUiIHVzZT0ib3B0aW9uYWwiIHR5cGU9IlRhYmxlTmFtZSIvPgogICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Ik5hbWVPbGQiIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iTmFtZU5ldyIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJWZXJzaW9uIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgIDwveHM6Y29tcGxleFR5cGU+CiAgICA8L3hzOmVsZW1lbnQ+CgogICAgPHhzOmVsZW1lbnQgbmFtZT0iVGFibGVEcm9wIj4KICAgICAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgICAgICAgIDx4czpzaW1wbGVDb250ZW50PgogICAgICAgICAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpzdHJpbmciPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iTmFtZSIgdXNlPSJyZXF1aXJlZCIgdHlwZT0iVGFibGVOYW1lIi8+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJWZXJzaW9uIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgPC94czpleHRlbnNpb24+CiAgICAgICAgICAgIDwveHM6c2ltcGxlQ29udGVudD4KICAgICAgICA8L3hzOmNvbXBsZXhUeXBlPgogICAgPC94czplbGVtZW50PgoKICAgIDwhLS0gQ29sdW1ucyAtLT4KCiAgICA8IS0tIE9yYWNsZSBhbGxvd3MgY29sdW1uIG5hbWVzIHVwIHRvIDMwIGNoYXJhY3RlcnMgb25seS4gLS0+CiAgICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJDb2x1bW5OYW1lIj4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOm1heExlbmd0aCB2YWx1ZT0iMzAiIC8+CiAgICAgICAgICA8eHM6cGF0dGVybiB2YWx1ZT0iW2EtekEtWjAtOV8tXSsiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgPC94czpzaW1wbGVUeXBlPgoKICAgIDx4czpzaW1wbGVUeXBlIG5hbWU9IkNvbHVtblR5cGUiPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPgogICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRBVEUiLz4KICAgICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTTUFMTElOVCIvPgogICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkJJR0lOVCIvPgogICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IklOVEVHRVIiLz4KICAgICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJERUNJTUFMIi8+CiAgICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVkFSQ0hBUiIvPgogICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkxPTkdCTE9CIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgIDwveHM6c2ltcGxlVHlwZT4KCiAgICA8eHM6ZWxlbWVudCBuYW1lPSJDb2x1bW4iPgogICAgICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgICAgICAgPHhzOnNpbXBsZUNvbnRlbnQ+CiAgICAgICAgICAgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOnN0cmluZyI+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJUeXBlIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJDb2x1bW5UeXBlIi8+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJBdXRvSW5jcmVtZW50IiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iTmFtZSIgdXNlPSJyZXF1aXJlZCIgdHlwZT0iQ29sdW1uTmFtZSIvPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iUmVxdWlyZWQiIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJTaXplIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iUHJpbWFyeUtleSIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICAgICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9IkRlZmF1bHQiIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgICAgICAgICA8L3hzOmV4dGVuc2lvbj4KICAgICAgICAgICAgPC94czpzaW1wbGVDb250ZW50PgogICAgICAgIDwveHM6Y29tcGxleFR5cGU+CiAgICA8L3hzOmVsZW1lbnQ+CiAgICA8eHM6ZWxlbWVudCBuYW1lPSJDb2x1bW5BZGQiPgogICAgICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgICAgICAgPHhzOnNpbXBsZUNvbnRlbnQ+CiAgICAgICAgICAgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOnN0cmluZyI+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJUeXBlIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJDb2x1bW5UeXBlIi8+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJBdXRvSW5jcmVtZW50IiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iTmFtZSIgdXNlPSJyZXF1aXJlZCIgdHlwZT0iQ29sdW1uTmFtZSIvPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iUmVxdWlyZWQiIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJTaXplIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iUHJpbWFyeUtleSIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICAgICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9IkRlZmF1bHQiIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgICAgICAgICA8L3hzOmV4dGVuc2lvbj4KICAgICAgICAgICAgPC94czpzaW1wbGVDb250ZW50PgogICAgICAgIDwveHM6Y29tcGxleFR5cGU+CiAgICA8L3hzOmVsZW1lbnQ+CiAgICA8eHM6ZWxlbWVudCBuYW1lPSJDb2x1bW5DaGFuZ2UiPgogICAgICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgICAgICAgPHhzOnNpbXBsZUNvbnRlbnQ+CiAgICAgICAgICAgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOnN0cmluZyI+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJUeXBlIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJDb2x1bW5UeXBlIi8+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJBdXRvSW5jcmVtZW50IiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iUHJpbWFyeUtleSIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICAgICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9IkRlZmF1bHQiIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJOYW1lT2xkIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJDb2x1bW5OYW1lIi8+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJOYW1lTmV3IiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJDb2x1bW5OYW1lIi8+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJSZXF1aXJlZCIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICAgICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9IlNpemUiIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgICAgICAgICA8L3hzOmV4dGVuc2lvbj4KICAgICAgICAgICAgPC94czpzaW1wbGVDb250ZW50PgogICAgICAgIDwveHM6Y29tcGxleFR5cGU+CiAgICA8L3hzOmVsZW1lbnQ+CiAgICA8eHM6ZWxlbWVudCBuYW1lPSJDb2x1bW5Ecm9wIj4KICAgICAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iTmFtZSIgdXNlPSJyZXF1aXJlZCIgdHlwZT0iQ29sdW1uTmFtZSIvPgogICAgICAgIDwveHM6Y29tcGxleFR5cGU+CiAgICA8L3hzOmVsZW1lbnQ+CgogICAgPCEtLSBGb3JlaWduIEtleXMgLS0+CgogICAgPHhzOmVsZW1lbnQgbmFtZT0iRm9yZWlnbktleSI+CiAgICAgICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICAgICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9IlJlZmVyZW5jZSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CiAgICAgICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iRm9yZWlnblRhYmxlIiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgIDwveHM6Y29tcGxleFR5cGU+CiAgICA8L3hzOmVsZW1lbnQ+CgogICAgPHhzOmVsZW1lbnQgbmFtZT0iRm9yZWlnbktleUNyZWF0ZSI+CiAgICAgICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICAgICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9IlJlZmVyZW5jZSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CiAgICAgICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iRm9yZWlnblRhYmxlIiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgIDwveHM6Y29tcGxleFR5cGU+CiAgICA8L3hzOmVsZW1lbnQ+CgogICAgPHhzOmVsZW1lbnQgbmFtZT0iRm9yZWlnbktleURyb3AiPgogICAgICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJSZWZlcmVuY2UiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgogICAgICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9IkZvcmVpZ25UYWJsZSIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICA8L3hzOmNvbXBsZXhUeXBlPgogICAgPC94czplbGVtZW50PgoKICAgIDx4czplbGVtZW50IG5hbWU9IlJlZmVyZW5jZSI+CiAgICAgICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICAgICAgICA8eHM6c2ltcGxlQ29udGVudD4KICAgICAgICAgICAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6c3RyaW5nIj4KICAgICAgICAgICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9IkxvY2FsIiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iRm9yZWlnbiIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICAgICAgICAgIDwveHM6ZXh0ZW5zaW9uPgogICAgICAgICAgICA8L3hzOnNpbXBsZUNvbnRlbnQ+CiAgICAgICAgPC94czpjb21wbGV4VHlwZT4KICAgIDwveHM6ZWxlbWVudD4KCiAgICA8IS0tIFVuaXF1ZSBjb2x1bW5zIC0tPgoKICAgIDx4czplbGVtZW50IG5hbWU9IlVuaXF1ZSI+CiAgICAgICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICAgICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9IlVuaXF1ZUNvbHVtbiIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CiAgICAgICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iTmFtZSIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICA8L3hzOmNvbXBsZXhUeXBlPgogICAgPC94czplbGVtZW50PgoKICAgIDx4czplbGVtZW50IG5hbWU9IlVuaXF1ZUNvbHVtbiI+CiAgICAgICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICAgICAgICA8eHM6c2ltcGxlQ29udGVudD4KICAgICAgICAgICAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6c3RyaW5nIj4KICAgICAgICAgICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Ik5hbWUiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgICAgICAgICA8L3hzOmV4dGVuc2lvbj4KICAgICAgICAgICAgPC94czpzaW1wbGVDb250ZW50PgogICAgICAgIDwveHM6Y29tcGxleFR5cGU+CiAgICA8L3hzOmVsZW1lbnQ+CgogICAgPHhzOmVsZW1lbnQgbmFtZT0iVW5pcXVlQ3JlYXRlIj4KICAgICAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iVW5pcXVlQ29sdW1uIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KICAgICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJOYW1lIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgIDwveHM6Y29tcGxleFR5cGU+CiAgICA8L3hzOmVsZW1lbnQ+CgogICAgPHhzOmVsZW1lbnQgbmFtZT0iVW5pcXVlRHJvcCI+CiAgICAgICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICAgICAgICA8eHM6c2ltcGxlQ29udGVudD4KICAgICAgICAgICAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6c3RyaW5nIj4KICAgICAgICAgICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Ik5hbWUiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgICAgICAgICA8L3hzOmV4dGVuc2lvbj4KICAgICAgICAgICAgPC94czpzaW1wbGVDb250ZW50PgogICAgICAgIDwveHM6Y29tcGxleFR5cGU+CiAgICA8L3hzOmVsZW1lbnQ+CgogICAgPCEtLSBJbmRleCBjb2x1bW5zIC0tPgoKICAgIDx4czplbGVtZW50IG5hbWU9IkluZGV4Ij4KICAgICAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iSW5kZXhDb2x1bW4iIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgogICAgICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Ik5hbWUiIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgPC94czpjb21wbGV4VHlwZT4KICAgIDwveHM6ZWxlbWVudD4KCiAgICA8eHM6ZWxlbWVudCBuYW1lPSJJbmRleENvbHVtbiI+CiAgICAgICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICAgICAgICA8eHM6c2ltcGxlQ29udGVudD4KICAgICAgICAgICAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6c3RyaW5nIj4KICAgICAgICAgICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Ik5hbWUiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJTaXplIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgPC94czpleHRlbnNpb24+CiAgICAgICAgICAgIDwveHM6c2ltcGxlQ29udGVudD4KICAgICAgICA8L3hzOmNvbXBsZXhUeXBlPgogICAgPC94czplbGVtZW50PgoKICAgIDx4czplbGVtZW50IG5hbWU9IkluZGV4Q3JlYXRlIj4KICAgICAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iSW5kZXhDb2x1bW4iIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgogICAgICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Ik5hbWUiIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgPC94czpjb21wbGV4VHlwZT4KICAgIDwveHM6ZWxlbWVudD4KCiAgICA8eHM6ZWxlbWVudCBuYW1lPSJJbmRleERyb3AiPgogICAgICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgICAgICAgPHhzOnNpbXBsZUNvbnRlbnQ+CiAgICAgICAgICAgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOnN0cmluZyI+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJOYW1lIiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgPC94czpleHRlbnNpb24+CiAgICAgICAgICAgIDwveHM6c2ltcGxlQ29udGVudD4KICAgICAgICA8L3hzOmNvbXBsZXhUeXBlPgogICAgPC94czplbGVtZW50PgoKICAgIDwhLS0gSW5zZXJ0IHN0dWZmIGludG8gZGF0YWJhc2UgLS0+CgogICAgPHhzOmVsZW1lbnQgbmFtZT0iSW5zZXJ0Ij4KICAgICAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iRGF0YSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CiAgICAgICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iVHlwZSIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJUYWJsZSIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJWZXJzaW9uIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgIDwveHM6Y29tcGxleFR5cGU+CiAgICA8L3hzOmVsZW1lbnQ+CgogICAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlRyYW5zbGF0YWJsZVN0cmluZyI+CiAgICAgICAgPHhzOnNpbXBsZUNvbnRlbnQ+CiAgICAgICAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6c3RyaW5nIj4KICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iVHJhbnNsYXRhYmxlIiB1c2U9Im9wdGlvbmFsIj4KICAgICAgICAgICAgICAgICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IjAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iMSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICAgICAgICAgICAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgICAgICAgICAgICAgIDwveHM6YXR0cmlidXRlPgogICAgICAgICAgICA8L3hzOmV4dGVuc2lvbj4KICAgICAgICA8L3hzOnNpbXBsZUNvbnRlbnQ+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgoKICAgIDx4czplbGVtZW50IG5hbWU9IkRhdGEiPgogICAgICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgICAgICAgPHhzOnNpbXBsZUNvbnRlbnQ+CiAgICAgICAgICAgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9IlRyYW5zbGF0YWJsZVN0cmluZyI+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJLZXkiIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJUeXBlIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgPC94czpleHRlbnNpb24+CiAgICAgICAgICAgIDwveHM6c2ltcGxlQ29udGVudD4KICAgICAgICA8L3hzOmNvbXBsZXhUeXBlPgogICAgPC94czplbGVtZW50PgoKPC94czpzY2hlbWE+Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Docbook/4_2/calstblx.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIERvY0Jvb2sgQ0FMUyBUYWJsZSBNb2RlbCBWNC4zQ1IzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRmlsZSBjYWxzdGJseC5tb2QgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIENvcHlyaWdodCAxOTkyLTIwMDIgSGFMIENvbXB1dGVyIFN5c3RlbXMsIEluYy4sCiAgTydSZWlsbHkgJiBBc3NvY2lhdGVzLCBJbmMuLCBBcmJvclRleHQsIEluYy4sIEZ1aml0c3UgU29mdHdhcmUKICBDb3Jwb3JhdGlvbiwgTm9ybWFuIFdhbHNoLCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCBhbmQgdGhlCiAgT3JnYW5pemF0aW9uIGZvciB0aGUgQWR2YW5jZW1lbnQgb2YgU3RydWN0dXJlZCBJbmZvcm1hdGlvbgogIFN0YW5kYXJkcyAoT0FTSVMpLgogIAogIFRoaXMgRFREIGlzIGJhc2VkIG9uIHRoZSBDQUxTIFRhYmxlIE1vZGVsCiAgUFVCTElDICItLy9VU0EtRE9ELy9EVEQgVGFibGUgTW9kZWwgOTUxMDEwLy9FTiIKICAKICAkSWQ6IGNhbHN0Ymx4LmR0ZCx2IDEuMTkgMjAwNC8wMS8yMSAxODo1NDoyMSBud2Fsc2ggRXhwICQKICAKICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIHRoZSBEb2NCb29rIERURAogIGFuZCBpdHMgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZQogIGlzIGhlcmVieSBncmFudGVkIGluIHBlcnBldHVpdHksIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAogIG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggYXBwZWFyIGluIGFsbCBjb3BpZXMuICBUaGUgY29weXJpZ2h0CiAgaG9sZGVycyBtYWtlIG5vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGUgRFREIGZvcgogIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3NlZCBvciBpbXBsaWVkCiAgd2FycmFudHkuCiAgCiAgSWYgeW91IG1vZGlmeSB0aGUgRG9jQm9vayBEVEQgaW4gYW55IHdheSwgZXhjZXB0IGZvciBkZWNsYXJpbmcgYW5kCiAgcmVmZXJlbmNpbmcgYWRkaXRpb25hbCBzZXRzIG9mIGdlbmVyYWwgZW50aXRpZXMgYW5kIGRlY2xhcmluZwogIGFkZGl0aW9uYWwgbm90YXRpb25zLCBsYWJlbCB5b3VyIERURCBhcyBhIHZhcmlhbnQgb2YgRG9jQm9vay4gIFNlZQogIHRoZSBtYWludGVuYW5jZSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIAogIFBsZWFzZSBkaXJlY3QgYWxsIHF1ZXN0aW9ucywgYnVnIHJlcG9ydHMsIG9yIHN1Z2dlc3Rpb25zIGZvcgogIGNoYW5nZXMgdG8gdGhlIGRvY2Jvb2tAbGlzdHMub2FzaXMtb3Blbi5vcmcgbWFpbGluZyBsaXN0LiBGb3IgbW9yZQogIGluZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rLy4KLS0+CjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIFRoaXMgbW9kdWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIENBTFMgVGFibGUgTW9kZWwKICBjb252ZXJ0ZWQgdG8gWE1MLiBJdCBoYXMgYmVlbiBtb2RpZmllZCBzbGlnaHRseSBmb3IgdXNlIGluIHRoZQogIGNvbWJpbmVkIEhUTUwvQ0FMUyBtb2RlbHMgc3VwcG9ydGVkIGJ5IERvY0Jvb2sgVjQuMy4KLS0+CjwhLS0KICBUaGVzZSBkZWZpbml0aW9ucyBhcmUgbm90IGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIHRhYmxlIG1vZGVsLCBidXQgYXJlCiAgdXNlZCBpbiB0aGUgZGVmYXVsdCBDQUxTIHRhYmxlIG1vZGVsIGFuZCBhcmUgdXN1YWxseSBkZWZpbmVkIGVsc2V3aGVyZQogIChhbmQgcHJpb3IgdG8gdGhlIGluY2x1c2lvbiBvZiB0aGlzIHRhYmxlIG1vZHVsZSkgaW4gYSBDQUxTIERURC4KLS0+CjwhLS0KICBubyBpZiB6ZXJvKHMpLAogIHllcyBpZiBhbnkgb3RoZXIgZGlnaXRzIHZhbHVlCi0tPgo8eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgogIDx4czppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiIHNjaGVtYUxvY2F0aW9uPSJ4bWwueHNkIi8+CiAgPHhzOnNpbXBsZVR5cGUgbmFtZT0ieWVzb3JubyI+CiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIi8+CiAgPC94czpzaW1wbGVUeXBlPgogIDx4czpncm91cCBuYW1lPSJ0aXRsZXMiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpncm91cD4KICA8IS0tIGRlZmF1bHQgZm9yIHVzZSBpbiBlbnRyeSBjb250ZW50IC0tPgogIDwhLS0KICAgIFRoZSBwYXJhbWV0ZXIgZW50aXRpZXMgYXMgZGVmaW5lZCBiZWxvdyBwcm92aWRlIHRoZSBDQUxTIHRhYmxlIG1vZGVsCiAgICBhcyBwdWJsaXNoZWQgKGFzIHBhcnQgb2YgdGhlIEV4YW1wbGUgRFREKSBpbiBNSUwtSERCSy0yODAwMS4KICAgIAogICAgVGhlc2UgZm9sbG93aW5nIGRlY2xhcmF0aW9ucyBwcm92aWRlIHRoZSBDQUxTLWNvbXBsaWFudCBkZWZhdWx0IGRlZmluaXRpb25zCiAgICBmb3IgdGhlc2UgZW50aXRpZXMuICBIb3dldmVyLCB0aGVzZSBlbnRpdGllcyBjYW4gYW5kIHNob3VsZCBiZSByZWRlZmluZWQKICAgIChieSBnaXZpbmcgdGhlIGFwcHJvcHJpYXRlIHBhcmFtZXRlciBlbnRpdHkgZGVjbGFyYXRpb24ocykgcHJpb3IgdG8gdGhlCiAgICByZWZlcmVuY2UgdG8gdGhpcyBUYWJsZSBNb2RlbCBkZWNsYXJhdGlvbiBzZXQgZW50aXR5KSB0byBmaXQgdGhlIG5lZWRzCiAgICBvZiB0aGUgY3VycmVudCBhcHBsaWNhdGlvbi4KICAtLT4KICA8eHM6Z3JvdXAgbmFtZT0idGJsLnRhYmxlLXRpdGxlcy5tZGwiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6Z3JvdXAgcmVmPSJ0aXRsZXMiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0idGJsLnRhYmxlLW1haW4ubWRsIj4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRncm91cCIvPgogICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJncmFwaGljIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0YmwudGdyb3VwLm1kbCI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29sc3BlYyIvPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNwYW5zcGVjIi8+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0aGVhZCIvPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGZvb3QiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0Ym9keSIvPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmNvbXBsZXhUeXBlPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0YmwudGdyb3VwLmF0dCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InRncm91cHN0eWxlIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idGJsLnJvdy5tZGwiPgogICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZW50cnkiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlbnRyeXRibCIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpjb21wbGV4VHlwZT4KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idGJsLmVudHJ5dGJsLm1kbCI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29sc3BlYyIvPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNwYW5zcGVjIi8+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0aGVhZCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InRib2R5Ii8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Y29tcGxleFR5cGU+CiAgPCEtLSA9PT09PSAgRWxlbWVudCBhbmQgYXR0cmlidXRlIGRlY2xhcmF0aW9ucyBmb2xsb3cuID09PT09IC0tPgogIDx4czplbGVtZW50IG5hbWU9InRhYmxlIiBzdWJzdGl0dXRpb25Hcm91cD0iZm9ybWFsLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNvbXBsZXhDb250ZW50PgogICAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idGJsLnRhYmxlLm1kbCI+CiAgICAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0YWJsZS5hdHRsaXN0Ii8+CiAgICAgICAgPC94czpleHRlbnNpb24+CiAgICAgIDwveHM6Y29tcGxleENvbnRlbnQ+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGFibGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZyYW1lIiB0eXBlPSJ0YmwuZnJhbWUuYXR0dmFsIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbHNlcCIgdHlwZT0ieWVzb3JubyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyb3dzZXAiIHR5cGU9Inllc29ybm8iLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRibC50YWJsZS5hdHQiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJvZHlhdHQiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3VyIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0Z3JvdXAiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Y29tcGxleENvbnRlbnQ+CiAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0YmwudGdyb3VwLm1kbCI+CiAgICAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0Z3JvdXAuYXR0bGlzdCIvPgogICAgICAgIDwveHM6ZXh0ZW5zaW9uPgogICAgICA8L3hzOmNvbXBsZXhDb250ZW50PgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRncm91cC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29scyIgdXNlPSJyZXF1aXJlZCIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGJsLnRncm91cC5hdHQiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29sc2VwIiB0eXBlPSJ5ZXNvcm5vIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJvd3NlcCIgdHlwZT0ieWVzb3JubyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxlZnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmlnaHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2VudGVyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imp1c3RpZnkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2hhciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjaGFyIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNoYXJvZmYiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3VyIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb2xzcGVjIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29sc3BlYy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29sc3BlYy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29sbnVtIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbG5hbWUiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29sd2lkdGgiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29sc2VwIiB0eXBlPSJ5ZXNvcm5vIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJvd3NlcCIgdHlwZT0ieWVzb3JubyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxlZnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmlnaHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2VudGVyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imp1c3RpZnkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2hhciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjaGFyIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNoYXJvZmYiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNwYW5zcGVjIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3BhbnNwZWMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNwYW5zcGVjLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lc3QiIHVzZT0icmVxdWlyZWQiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZWVuZCIgdXNlPSJyZXF1aXJlZCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzcGFubmFtZSIgdXNlPSJyZXF1aXJlZCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb2xzZXAiIHR5cGU9Inllc29ybm8iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icm93c2VwIiB0eXBlPSJ5ZXNvcm5vIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGVmdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyaWdodCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjZW50ZXIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ianVzdGlmeSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjaGFyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNoYXIiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2hhcm9mZiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idGhlYWQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Y29tcGxleENvbnRlbnQ+CiAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0YmwuaGRmdC5tZGwiPgogICAgICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGhlYWQuYXR0bGlzdCIvPgogICAgICAgIDwveHM6ZXh0ZW5zaW9uPgogICAgICA8L3hzOmNvbXBsZXhDb250ZW50PgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRoZWFkLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2YWxpZ24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0b3AiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibWlkZGxlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImJvdHRvbSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdXIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRmb290Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNvbXBsZXhDb250ZW50PgogICAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idGJsLmhkZnQubWRsIj4KICAgICAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRmb290LmF0dGxpc3QiLz4KICAgICAgICA8L3hzOmV4dGVuc2lvbj4KICAgICAgPC94czpjb21wbGV4Q29udGVudD4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0Zm9vdC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idmFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idG9wIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im1pZGRsZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJib3R0b20iLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3VyIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0Ym9keSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpjb21wbGV4Q29udGVudD4KICAgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRibC50Ym9keS5tZGwiPgogICAgICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGJvZHkuYXR0bGlzdCIvPgogICAgICAgIDwveHM6ZXh0ZW5zaW9uPgogICAgICA8L3hzOmNvbXBsZXhDb250ZW50PgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRib2R5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2YWxpZ24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0b3AiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibWlkZGxlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImJvdHRvbSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdXIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJvdyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpjb21wbGV4Q29udGVudD4KICAgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRibC5yb3cubWRsIj4KICAgICAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvdy5hdHRsaXN0Ii8+CiAgICAgICAgPC94czpleHRlbnNpb24+CiAgICAgIDwveHM6Y29tcGxleENvbnRlbnQ+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icm93LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyb3dzZXAiIHR5cGU9Inllc29ybm8iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idmFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idG9wIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im1pZGRsZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJib3R0b20iLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3VyIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJlbnRyeXRibCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpjb21wbGV4Q29udGVudD4KICAgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRibC5lbnRyeXRibC5tZGwiPgogICAgICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZW50cnl0YmwuYXR0bGlzdCIvPgogICAgICAgIDwveHM6ZXh0ZW5zaW9uPgogICAgICA8L3hzOmNvbXBsZXhDb250ZW50PgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVudHJ5dGJsLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb2xzIiB1c2U9InJlcXVpcmVkIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0YmwudGdyb3VwLmF0dCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb2xuYW1lIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNwYW5uYW1lIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWVzdCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lZW5kIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbHNlcCIgdHlwZT0ieWVzb3JubyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyb3dzZXAiIHR5cGU9Inllc29ybm8iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYWxpZ24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsZWZ0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJpZ2h0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNlbnRlciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJqdXN0aWZ5Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNoYXIiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2hhciIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjaGFyb2ZmIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN1ciIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZW50cnkiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idGJsLmVudHJ5Lm1kbCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlbnRyeS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZW50cnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbG5hbWUiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZXN0Ii8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWVlbmQiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3Bhbm5hbWUiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibW9yZXJvd3MiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29sc2VwIiB0eXBlPSJ5ZXNvcm5vIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJvd3NlcCIgdHlwZT0ieWVzb3JubyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxlZnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmlnaHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2VudGVyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imp1c3RpZnkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2hhciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjaGFyIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNoYXJvZmYiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icm90YXRlIiB0eXBlPSJ5ZXNvcm5vIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbGlnbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRvcCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJtaWRkbGUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYm90dG9tIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN1ciIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CjwveHM6c2NoZW1hPgo8IS0tIEVuZCBvZiBEb2NCb29rIENBTFMgVGFibGUgTW9kZWwgVjQuM0NSMyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4K</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Docbook/4_2/dbhierx.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIERvY0Jvb2sgZG9jdW1lbnQgaGllcmFyY2h5IG1vZHVsZSBWNC4zQ1IzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRmlsZSBkYmhpZXJ4Lm1vZCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIENvcHlyaWdodCAxOTkyLTIwMDIgSGFMIENvbXB1dGVyIFN5c3RlbXMsIEluYy4sCiAgTydSZWlsbHkgJiBBc3NvY2lhdGVzLCBJbmMuLCBBcmJvclRleHQsIEluYy4sIEZ1aml0c3UgU29mdHdhcmUKICBDb3Jwb3JhdGlvbiwgTm9ybWFuIFdhbHNoLCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCBhbmQgdGhlCiAgT3JnYW5pemF0aW9uIGZvciB0aGUgQWR2YW5jZW1lbnQgb2YgU3RydWN0dXJlZCBJbmZvcm1hdGlvbgogIFN0YW5kYXJkcyAoT0FTSVMpLgogIAogICRJZDogZGJoaWVyeC5tb2QsdiAxLjI4IDIwMDQvMDEvMjEgMTg6NTQ6MjEgbndhbHNoIEV4cCAkCiAgCiAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jQm9vayBEVEQKICBhbmQgaXRzIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUKICBpcyBoZXJlYnkgZ3JhbnRlZCBpbiBwZXJwZXR1aXR5LCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKICBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGFwcGVhciBpbiBhbGwgY29waWVzLiAgVGhlIGNvcHlyaWdodAogIGhvbGRlcnMgbWFrZSBubyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhlIERURCBmb3IKICBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzZWQgb3IgaW1wbGllZAogIHdhcnJhbnR5LgogIAogIElmIHlvdSBtb2RpZnkgdGhlIERvY0Jvb2sgRFREIGluIGFueSB3YXksIGV4Y2VwdCBmb3IgZGVjbGFyaW5nIGFuZAogIHJlZmVyZW5jaW5nIGFkZGl0aW9uYWwgc2V0cyBvZiBnZW5lcmFsIGVudGl0aWVzIGFuZCBkZWNsYXJpbmcKICBhZGRpdGlvbmFsIG5vdGF0aW9ucywgbGFiZWwgeW91ciBEVEQgYXMgYSB2YXJpYW50IG9mIERvY0Jvb2suICBTZWUKICB0aGUgbWFpbnRlbmFuY2UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAKICBQbGVhc2UgZGlyZWN0IGFsbCBxdWVzdGlvbnMsIGJ1ZyByZXBvcnRzLCBvciBzdWdnZXN0aW9ucyBmb3IKICBjaGFuZ2VzIHRvIHRoZSBkb2Nib29rQGxpc3RzLm9hc2lzLW9wZW4ub3JnIG1haWxpbmcgbGlzdC4gRm9yIG1vcmUKICBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay8uCi0tPgo8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0KICBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBvdmVyYWxsIGRvY3VtZW50CiAgaGllcmFyY2hpZXMgb2YgRG9jQm9vayBkb2N1bWVudHMuICBJdCBjb3ZlcnMgY29tcHV0ZXIgZG9jdW1lbnRhdGlvbgogIG1hbnVhbHMgYW5kIG1hbnVhbCBmcmFnbWVudHMsIGFzIHdlbGwgYXMgcmVmZXJlbmNlIGVudHJpZXMgKHN1Y2ggYXMKICBtYW4gcGFnZXMpIGFuZCB0ZWNobmljYWwgam91cm5hbHMgb3IgYW50aG9sb2dpZXMgY29udGFpbmluZwogIGFydGljbGVzLgogIAogIFRoaXMgbW9kdWxlIGRlcGVuZHMgb24gdGhlIERvY0Jvb2sgaW5mb3JtYXRpb24gcG9vbCBtb2R1bGUuICBBbGwKICBlbGVtZW50cyBhbmQgZW50aXRpZXMgcmVmZXJlbmNlZCBidXQgbm90IGRlZmluZWQgaGVyZSBhcmUgYXNzdW1lZAogIHRvIGJlIGRlZmluZWQgaW4gdGhlIGluZm9ybWF0aW9uIHBvb2wgbW9kdWxlLgogIAogIEluIERURCBkcml2ZXIgZmlsZXMgcmVmZXJyaW5nIHRvIHRoaXMgbW9kdWxlLCBwbGVhc2UgdXNlIGFuIGVudGl0eQogIGRlY2xhcmF0aW9uIHRoYXQgdXNlcyB0aGUgcHVibGljIGlkZW50aWZpZXIgc2hvd24gYmVsb3c6CiAgCiAgPCFFTlRJVFkgJSBkYmhpZXIgUFVCTElDCiAgIi0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIERvY3VtZW50IEhpZXJhcmNoeSBWNC4zQ1IzLy9FTiIKICAiZGJoaWVyeC5tb2QiPgogICVkYmhpZXI7CiAgCiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgcGFyYW1ldGVyCiAgZW50aXR5IGFuZCBtb2R1bGUgc2NoZW1lIHVzZWQgaW4gRG9jQm9vaywgY3VzdG9taXppbmcgRG9jQm9vayBhbmQKICBwbGFubmluZyBmb3IgaW50ZXJjaGFuZ2UsIGFuZCBjaGFuZ2VzIG1hZGUgc2luY2UgdGhlIGxhc3QgcmVsZWFzZQogIG9mIERvY0Jvb2suCi0tPgo8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRW50aXRpZXMgZm9yIG1vZHVsZSBpbmNsdXNpb25zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIEVudGl0aWVzIGZvciBlbGVtZW50IGNsYXNzZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cjx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+CiAgPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIgc2NoZW1hTG9jYXRpb249InhtbC54c2QiLz4KICA8eHM6ZWxlbWVudCBuYW1lPSJhcHBlbmRpeC5jbGFzcyIgYWJzdHJhY3Q9InRydWUiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJlZ2lucGFnZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJhcHBlbmRpeGluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJib29rY29tcG9uZW50LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idG9jY2hhcCIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJvb2tjb21wb25lbnQuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5hdi5jbGFzcyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhcHBlbmRpeC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhcnRpY2xlLmNsYXNzIiBhYnN0cmFjdD0idHJ1ZSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImRpdi50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImFydGljbGVpbmZvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRvY2NoYXAiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImxvdCIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJvb2tjb21wb25lbnQuY29udGVudCIvPgogICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6Z3JvdXAgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iYXBwZW5kaXguY2xhc3MiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iYWNrbm8iLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXJ0aWNsZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6ZWxlbWVudCBuYW1lPSJib29rLmNsYXNzIiBhYnN0cmFjdD0idHJ1ZSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImRpdi50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJvb2tpbmZvIi8+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iZGVkaWNhdGlvbiIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0b2MiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ibG90Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Imdsb3NzYXJ5Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImJpYmxpb2dyYXBoeSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwcmVmYWNlIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNoYXB0ZXIuY2xhc3MiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0icmVmZXJlbmNlIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InBhcnQiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iYXJ0aWNsZS5jbGFzcyIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcHBlbmRpeC5jbGFzcyIvPgogICAgICAgICAgPHhzOmdyb3VwIHJlZj0iaW5kZXguY2xhc3MiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iY29sb3Bob24iLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYm9vay5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjaGFwdGVyLmNsYXNzIiBhYnN0cmFjdD0idHJ1ZSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmVnaW5wYWdlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImNoYXB0ZXJpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iYm9va2NvbXBvbmVudC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRvY2NoYXAiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJib29rY29tcG9uZW50LmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2hhcHRlci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6Z3JvdXAgbmFtZT0iaW5kZXguY2xhc3MiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmRleCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InNldGluZGV4Ii8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlZmVudHJ5LmNsYXNzIiBhYnN0cmFjdD0idHJ1ZSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmVnaW5wYWdlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InJlZmVudHJ5aW5mbyIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJyZWZtZXRhIi8+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0icmVtYXJrIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmsuY2hhci5jbGFzcyIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZm5hbWVkaXYiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0icmVmc3lub3BzaXNkaXYiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmc2VjdDEiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZnNlY3Rpb24iLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmZW50cnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VjdGlvbi5jbGFzcyIgYWJzdHJhY3Q9InRydWUiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InNlY3Rpb25pbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ic2VjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRpdmNvbXBvbmVudC5taXgiLz4KICAgICAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmVudHJ5LmNsYXNzIi8+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWN0aW9uLmNsYXNzIi8+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzaW1wbGVzZWN0Ii8+CiAgICAgICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmVudHJ5LmNsYXNzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWN0aW9uLmNsYXNzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzaW1wbGVzZWN0Ii8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3Rpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmdyb3VwIG5hbWU9Im5hdi5jbGFzcyI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9InRvYyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxvdCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImluZGV4Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZ2xvc3NhcnkiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiaWJsaW9ncmFwaHkiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPCEtLSBSZWRlY2xhcmF0aW9uIHBsYWNlaG9sZGVyIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0KICAgIEZvciByZWRlY2xhcmluZyBlbnRpdGllcyB0aGF0IGFyZSBkZWNsYXJlZCBhZnRlciB0aGlzIHBvaW50IHdoaWxlCiAgICByZXRhaW5pbmcgdGhlaXIgcmVmZXJlbmNlcyB0byB0aGUgZW50aXRpZXMgdGhhdCBhcmUgZGVjbGFyZWQgYmVmb3JlCiAgICB0aGlzIHBvaW50CiAgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gRW50aXRpZXMgZm9yIGVsZW1lbnQgbWl4dHVyZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIFRoZSBEb2NCb29rIFRDIG1heSBwcm9kdWNlIGFuIG9mZmljaWFsIGZvcm1zIG1vZHVsZSBmb3IgRG9jQm9vay4gLS0+CiAgPCEtLSBUaGlzIFBFIHByb3ZpZGVzIHRoZSBob29rIGJ5IHdoaWNoIGl0IGNhbiBiZSBpbnNlcnRlZCBpbnRvIHRoZSBEVEQuIC0tPgogIDx4czpncm91cCBuYW1lPSJkaXZjb21wb25lbnQubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGlzdC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFkbW9uLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZXNwZWNpZmljLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ic3lub3AuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaW5mb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb21wb3VuZC5jbGFzcyIvPgogICAgICA8eHM6Z3JvdXAgcmVmPSJnZW5vYmouY2xhc3MiLz4KICAgICAgPHhzOmdyb3VwIHJlZj0iZGVzY29iai5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9InJlZmNvbXBvbmVudC5taXgiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaXN0LmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYWRtb24uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lc3BlY2lmaWMuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzeW5vcC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmZvcm1hbC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImZvcm1hbC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImNvbXBvdW5kLmNsYXNzIi8+CiAgICAgIDx4czpncm91cCByZWY9Imdlbm9iai5jbGFzcyIvPgogICAgICA8eHM6Z3JvdXAgcmVmPSJkZXNjb2JqLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImJlZ2lucGFnZSIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0iaW5kZXhkaXZjb21wb25lbnQubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaXRlbWl6ZWRsaXN0Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ib3JkZXJlZGxpc3QiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ2YXJpYWJsZWxpc3QiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzaW1wbGVsaXN0Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZXNwZWNpZmljLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ic3lub3AuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaW5mb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhbmNob3IiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZW1hcmsiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rLmNoYXIuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9InJlZm5hbWUuY2hhci5taXgiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGVjaC5jaGFyLmNsYXNzIi8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9InBhcnRjb250ZW50Lm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFwcGVuZGl4LmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iY2hhcHRlci5jbGFzcyIvPgogICAgICA8eHM6Z3JvdXAgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcnRpY2xlLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icHJlZmFjZSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InJlZmVudHJ5LmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icmVmZXJlbmNlIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJyZWZpbmxpbmUuY2hhci5taXgiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4cmVmLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Imdlbi5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRlY2guY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJhc2UuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZG9jaW5mby5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ib3RoZXIuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYmVnaW5wYWdlIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJyZWZjbGFzcy5jaGFyLm1peCI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJhcHBsaWNhdGlvbiIvPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmdyb3VwPgogIDwhLS0gUmVkZWNsYXJhdGlvbiBwbGFjZWhvbGRlciAyIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tCiAgICBGb3IgcmVkZWNsYXJpbmcgZW50aXRpZXMgdGhhdCBhcmUgZGVjbGFyZWQgYWZ0ZXIgdGhpcyBwb2ludCB3aGlsZQogICAgcmV0YWluaW5nIHRoZWlyIHJlZmVyZW5jZXMgdG8gdGhlIGVudGl0aWVzIHRoYXQgYXJlIGRlY2xhcmVkIGJlZm9yZQogICAgdGhpcyBwb2ludAogIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEVudGl0aWVzIGZvciBjb250ZW50IG1vZGVscyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmdyb3VwIG5hbWU9ImRpdi50aXRsZS5jb250ZW50Ij4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0aXRsZSIvPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ic3VidGl0bGUiLz4KICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlYWJicmV2Ii8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9ImJvb2tjb21wb25lbnQudGl0bGUuY29udGVudCI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0idGl0bGUiLz4KICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InN1YnRpdGxlIi8+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0aXRsZWFiYnJldiIvPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJzZWN0LnRpdGxlLmNvbnRlbnQiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9InRpdGxlIi8+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJzdWJ0aXRsZSIvPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGVhYmJyZXYiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0icmVmc2VjdC50aXRsZS5jb250ZW50Ij4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0aXRsZSIvPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ic3VidGl0bGUiLz4KICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlYWJicmV2Ii8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9ImJvb2tjb21wb25lbnQuY29udGVudCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRpdmNvbXBvbmVudC5taXgiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWN0MSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZlbnRyeS5jbGFzcyIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzaW1wbGVzZWN0Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNlY3Rpb24uY2xhc3MiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmNob2ljZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWN0MSIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmVudHJ5LmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2ltcGxlc2VjdCIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNlY3Rpb24uY2xhc3MiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIFNldCBhbmQgU2V0SW5mbyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNldC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2V0Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0iZGl2LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ic2V0aW5mbyIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0b2MiLz4KICAgICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic2V0Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImJvb2suY2xhc3MiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ic2V0aW5kZXgiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2V0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNldC5lbGVtZW50IC0tPgogIDwhLS0gRlBJOiBTR01MIGZvcm1hbCBwdWJsaWMgaWRlbnRpZmllciAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2V0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmcGkiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNldC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2V0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2V0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2V0aW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2V0aW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmZvLmNsYXNzIi8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNldGluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2V0aW5mby5lbGVtZW50IC0tPgogIDwhLS0KICAgIENvbnRlbnRzOiBJRHMgb2YgdGhlIFRvQywgQm9va3MsIGFuZCBTZXRJbmRleCB0aGF0IGNvbXByaXNlCiAgICB0aGUgc2V0LCBpbiB0aGUgb3JkZXIgb2YgdGhlaXIgYXBwZWFyYW5jZQogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZXRpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb250ZW50cyIgdHlwZT0ieHM6SURSRUZTIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZXRpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZXRpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2V0aW5mby5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2Ygc2V0LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEJvb2sgYW5kIEJvb2tJbmZvIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJvb2sucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImJvb2siIHN1YnN0aXR1dGlvbkdyb3VwPSJib29rLmNsYXNzIi8+CiAgPCEtLSBlbmQgb2YgYm9vay5lbGVtZW50IC0tPgogIDwhLS0gRlBJOiBTR01MIGZvcm1hbCBwdWJsaWMgaWRlbnRpZmllciAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYm9vay5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZnBpIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJvb2sucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJvb2suYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBib29rLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYm9va2luZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImJvb2tpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYm9va2luZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYm9va2luZm8uZWxlbWVudCAtLT4KICA8IS0tCiAgICBDb250ZW50czogSURzIG9mIHRoZSBUb0MsIExvVHMsIFByZWZhY2VzLCBQYXJ0cywgQ2hhcHRlcnMsCiAgICBBcHBlbmRpeGVzLCBSZWZlcmVuY2VzLCBHTG9zc2FyeSwgQmlibGlvZ3JhcGh5LCBhbmQgaW5kZXhlcwogICAgY29tcHJpc2luZyB0aGUgQm9vaywgaW4gdGhlIG9yZGVyIG9mIHRoZWlyIGFwcGVhcmFuY2UKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYm9va2luZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbnRlbnRzIiB0eXBlPSJ4czpJRFJFRlMiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJvb2tpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBib29raW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJvb2tpbmZvLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBib29rLmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIERlZGljYXRpb24sIFRvQywgYW5kIExvVCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImRlZGljYXRpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImRlZGljYXRpb24iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJzZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibGVnYWxub3RpY2UubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImRlZGljYXRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZGVkaWNhdGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJkZWRpY2F0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZGVkaWNhdGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZGVkaWNhdGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGRlZGljYXRpb24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb2xvcGhvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29sb3Bob24iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJzZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idGV4dG9iamVjdC5taXgiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29sb3Bob24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY29sb3Bob24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29sb3Bob24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb2xvcGhvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY29sb3Bob24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb2xvcGhvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRvYy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idG9jIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJiZWdpbnBhZ2UiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImJvb2tjb21wb25lbnQudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idG9jZnJvbnQiLz4KICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0b2NwYXJ0Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRvY2NoYXAiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRvY2JhY2siLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRvYy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2MuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYWdlbnVtLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0b2MuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0b2MubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2Nmcm9udC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idG9jZnJvbnQiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0b2Nmcm9udC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0b2Nmcm9udC5lbGVtZW50IC0tPgogIDwhLS0gdG8gZWxlbWVudCB0aGF0IHRoaXMgZW50cnkgcmVwcmVzZW50cyAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jZnJvbnQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmtlbmQuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYWdlbnVtLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jZnJvbnQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRvY2Zyb250LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdG9jZnJvbnQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2NlbnRyeS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idG9jZW50cnkiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0b2NlbnRyeS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0b2NlbnRyeS5lbGVtZW50IC0tPgogIDwhLS0gdG8gZWxlbWVudCB0aGF0IHRoaXMgZW50cnkgcmVwcmVzZW50cyAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jZW50cnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rZW5kLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFnZW51bS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2VudHJ5LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0b2NlbnRyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHRvY2VudHJ5Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jcGFydC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idG9jcGFydCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0b2NlbnRyeSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idG9jY2hhcCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0b2NwYXJ0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRvY3BhcnQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jcGFydC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY3BhcnQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRvY3BhcnQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0b2NwYXJ0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jY2hhcC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idG9jY2hhcCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0b2NlbnRyeSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idG9jbGV2ZWwxIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2NoYXAuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdG9jY2hhcC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2NjaGFwLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0b2NjaGFwLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0b2NjaGFwLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdG9jY2hhcC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRvY2xldmVsMS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idG9jbGV2ZWwxIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRvY2VudHJ5Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0b2NsZXZlbDIiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jbGV2ZWwxLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRvY2xldmVsMS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2NsZXZlbDEuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0b2NsZXZlbDEucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRvY2xldmVsMS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHRvY2xldmVsMS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRvY2xldmVsMi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idG9jbGV2ZWwyIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRvY2VudHJ5Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0b2NsZXZlbDMiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jbGV2ZWwyLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRvY2xldmVsMi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2NsZXZlbDIuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0b2NsZXZlbDIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRvY2xldmVsMi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHRvY2xldmVsMi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRvY2xldmVsMy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idG9jbGV2ZWwzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRvY2VudHJ5Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0b2NsZXZlbDQiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jbGV2ZWwzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRvY2xldmVsMy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2NsZXZlbDMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0b2NsZXZlbDMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRvY2xldmVsMy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHRvY2xldmVsMy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRvY2xldmVsNC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idG9jbGV2ZWw0Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRvY2VudHJ5Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0b2NsZXZlbDUiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jbGV2ZWw0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRvY2xldmVsNC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2NsZXZlbDQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0b2NsZXZlbDQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRvY2xldmVsNC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHRvY2xldmVsNC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRvY2xldmVsNS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idG9jbGV2ZWw1Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRvY2VudHJ5Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2xldmVsNS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jbGV2ZWw1LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jbGV2ZWw1LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2NiYWNrLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0b2NiYWNrIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jYmFjay5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0b2NiYWNrLmVsZW1lbnQgLS0+CiAgPCEtLSB0byBlbGVtZW50IHRoYXQgdGhpcyBlbnRyeSByZXByZXNlbnRzIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2NiYWNrLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rZW5kLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFnZW51bS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2JhY2sucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRvY2JhY2suYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0b2NiYWNrLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiB0b2MuY29udGVudC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxvdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibG90Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJiZWdpbnBhZ2UiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImJvb2tjb21wb25lbnQudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibG90ZW50cnkiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibG90LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGxvdC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsb3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxvdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbG90LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbG90Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibG90ZW50cnkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImxvdGVudHJ5Ij4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibG90ZW50cnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbG90ZW50cnkuZWxlbWVudCAtLT4KICA8IS0tCiAgICBTcmNDcmVkaXQ6IEluZm9ybWF0aW9uIGFib3V0IHRoZSBzb3VyY2Ugb2YgdGhlIGVudHJ5LAogICAgYXMgZm9yIGEgbGlzdCBvZiBpbGx1c3RyYXRpb25zCiAgLS0+CiAgPCEtLSBsaW5rZW5kOiB0byBlbGVtZW50IHRoYXQgdGhpcyBlbnRyeSByZXByZXNlbnRzIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsb3RlbnRyeS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmtlbmQuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYWdlbnVtLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzcmNjcmVkaXQiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxvdGVudHJ5LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBsb3RlbnRyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGxvdGVudHJ5Lm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBsb3QuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gQXBwZW5kaXgsIENoYXB0ZXIsIFBhcnQsIFByZWZhY2UsIFJlZmVyZW5jZSwgUGFydEludHJvIC4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXBwZW5kaXgucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImFwcGVuZGl4IiBzdWJzdGl0dXRpb25Hcm91cD0iYXBwZW5kaXguY2xhc3MiLz4KICA8IS0tIGVuZCBvZiBhcHBlbmRpeC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcHBlbmRpeC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXBwZW5kaXgucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGFwcGVuZGl4LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYXBwZW5kaXgubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjaGFwdGVyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjaGFwdGVyIiBzdWJzdGl0dXRpb25Hcm91cD0iY2hhcHRlci5jbGFzcyIvPgogIDwhLS0gZW5kIG9mIGNoYXB0ZXIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2hhcHRlci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2hhcHRlci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY2hhcHRlci5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNoYXB0ZXIubW9kdWxlIC0tPgogIDwhLS0KICAgIE5vdGUgdGhhdCBQYXJ0IHdhcyB0byBoYXZlIGl0cyBjb250ZW50IG1vZGVsIHJlZHVjZWQgaW4gVjQuM0NSMy4gIFRoaXMKICAgIGNoYW5nZSB3aWxsIG5vdCBiZSBtYWRlIGFmdGVyIGFsbC4KICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGFydC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icGFydCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmVnaW5wYWdlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InBhcnRpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iYm9va2NvbXBvbmVudC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InBhcnRpbnRybyIvPgogICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJ0Y29udGVudC5taXgiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFydC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwYXJ0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBhcnQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhcnQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHBhcnQuYXR0bGlzdCAtLT4KICA8IS0tIEVMRU1FTlQgUGFydEludHJvIChkZWZpbmVkIGJlbG93KSAtLT4KICA8IS0tIGVuZCBvZiBwYXJ0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJlZmFjZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icHJlZmFjZSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmVnaW5wYWdlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InByZWZhY2VpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iYm9va2NvbXBvbmVudC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRvY2NoYXAiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJib29rY29tcG9uZW50LmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJlZmFjZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwcmVmYWNlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByZWZhY2UuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcmVmYWNlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwcmVmYWNlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcHJlZmFjZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZmVyZW5jZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmZXJlbmNlIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJiZWdpbnBhZ2UiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0icmVmZXJlbmNlaW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJvb2tjb21wb25lbnQudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJwYXJ0aW50cm8iLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZlbnRyeS5jbGFzcyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZlcmVuY2UuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmZXJlbmNlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZmVyZW5jZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmZXJlbmNlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZWZlcmVuY2UuYXR0bGlzdCAtLT4KICA8IS0tIEVMRU1FTlQgUGFydEludHJvIChkZWZpbmVkIGJlbG93KSAtLT4KICA8IS0tIGVuZCBvZiByZWZlcmVuY2UubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwYXJ0aW50cm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InBhcnRpbnRybyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImRpdi50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iYm9va2NvbXBvbmVudC5jb250ZW50Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhcnRpbnRyby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwYXJ0aW50cm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGFydGludHJvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYXJ0aW50cm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHBhcnRpbnRyby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHBhcnRpbnRyby5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gT3RoZXIgSW5mbyBlbGVtZW50cyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXBwZW5kaXhpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhcHBlbmRpeGluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhcHBlbmRpeGluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYXBwZW5kaXhpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFwcGVuZGl4aW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFwcGVuZGl4aW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYXBwZW5kaXhpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYXBwZW5kaXhpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvZ3JhcGh5aW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYmlibGlvZ3JhcGh5aW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmZvLmNsYXNzIi8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb2dyYXBoeWluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYmlibGlvZ3JhcGh5aW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9ncmFwaHlpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvZ3JhcGh5aW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYmlibGlvZ3JhcGh5aW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJpYmxpb2dyYXBoeWluZm8ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjaGFwdGVyaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY2hhcHRlcmluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjaGFwdGVyaW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjaGFwdGVyaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjaGFwdGVyaW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNoYXB0ZXJpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjaGFwdGVyaW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNoYXB0ZXJpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ2xvc3NhcnlpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJnbG9zc2FyeWluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJnbG9zc2FyeWluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZ2xvc3NhcnlpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3NzYXJ5aW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdsb3NzYXJ5aW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZ2xvc3NhcnlpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZ2xvc3NhcnlpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5kZXhpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbmRleGluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmRleGluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW5kZXhpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImluZGV4aW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImluZGV4aW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaW5kZXhpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW5kZXhpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2V0aW5kZXhpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZXRpbmRleGluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZXRpbmRleGluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2V0aW5kZXhpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNldGluZGV4aW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNldGluZGV4aW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2V0aW5kZXhpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2V0aW5kZXhpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGFydGluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InBhcnRpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFydGluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcGFydGluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGFydGluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYXJ0aW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcGFydGluZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwYXJ0aW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByZWZhY2VpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJwcmVmYWNlaW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmZvLmNsYXNzIi8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByZWZhY2VpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHByZWZhY2VpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByZWZhY2VpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJlZmFjZWluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHByZWZhY2VpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcHJlZmFjZWluZm8ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZlbnRyeWluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlZmVudHJ5aW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmZvLmNsYXNzIi8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZmVudHJ5aW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZWZlbnRyeWluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmZW50cnlpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmZW50cnlpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZWZlbnRyeWluZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZlbnRyeWluZm8ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzZWN0aW9uaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmc2VjdGlvbmluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzZWN0aW9uaW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZWZzZWN0aW9uaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzZWN0aW9uaW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZnNlY3Rpb25pbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZWZzZWN0aW9uaW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZnNlY3Rpb25pbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmc2VjdDFpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZzZWN0MWluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzZWN0MWluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdDFpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnNlY3QxaW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZnNlY3QxaW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdDFpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdDFpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmc2VjdDJpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZzZWN0MmluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzZWN0MmluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdDJpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnNlY3QyaW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZnNlY3QyaW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdDJpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdDJpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmc2VjdDNpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZzZWN0M2luZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzZWN0M2luZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdDNpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnNlY3QzaW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZnNlY3QzaW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdDNpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdDNpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmc3lub3BzaXNkaXZpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZzeW5vcHNpc2RpdmluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzeW5vcHNpc2RpdmluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmc3lub3BzaXNkaXZpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnN5bm9wc2lzZGl2aW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZnN5bm9wc2lzZGl2aW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmc3lub3BzaXNkaXZpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVmc3lub3BzaXNkaXZpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmZXJlbmNlaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmZXJlbmNlaW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmZvLmNsYXNzIi8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZmVyZW5jZWluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmZXJlbmNlaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZlcmVuY2VpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmZXJlbmNlaW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmZXJlbmNlaW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZmVyZW5jZWluZm8ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0MWluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNlY3QxaW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmZvLmNsYXNzIi8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3QxaW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWN0MWluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdDFpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDFpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWN0MWluZm8uYXR0bGlzdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdDJpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWN0MmluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0MmluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VjdDJpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3QyaW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3QyaW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VjdDJpbmZvLmF0dGxpc3QgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3QzaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VjdDNpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDNpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlY3QzaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0M2luZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0M2luZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlY3QzaW5mby5hdHRsaXN0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0NGluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNlY3Q0aW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmZvLmNsYXNzIi8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3Q0aW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWN0NGluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdDRpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDRpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWN0NGluZm8uYXR0bGlzdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdDVpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWN0NWluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0NWluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VjdDVpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3Q1aW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3Q1aW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VjdDVpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gU2VjdGlvbiAocGFyYWxsZWwgdG8gU2VjdCopIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0aW9uLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWN0aW9uIiBzdWJzdGl0dXRpb25Hcm91cD0ic2VjdGlvbi5jbGFzcyIvPgogIDwhLS0gZW5kIG9mIHNlY3Rpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdGlvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VjdGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNlY3Rpb24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0aW9uaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VjdGlvbmluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0aW9uaW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWN0aW9uaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0aW9uaW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3Rpb25pbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWN0aW9uaW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNlY3Rpb25pbmZvLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBzZWN0aW9uLmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIFNlY3QxLCBTZWN0MiwgU2VjdDMsIFNlY3Q0LCBTZWN0NSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3QxLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWN0MSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ic2VjdDFpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ic2VjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRpdmNvbXBvbmVudC5taXgiLz4KICAgICAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmVudHJ5LmNsYXNzIi8+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWN0MiIvPgogICAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2ltcGxlc2VjdCIvPgogICAgICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZlbnRyeS5jbGFzcyIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2VjdDIiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNpbXBsZXNlY3QiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDEuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VjdDEuZWxlbWVudCAtLT4KICA8IS0tCiAgICBSZW5kZXJhczogSW5kaWNhdGVzIHRoZSBmb3JtYXQgaW4gd2hpY2ggdGhlIGhlYWRpbmcgc2hvdWxkCiAgICBhcHBlYXIKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdDEuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlbmRlcmFzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDMiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDUiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDEucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlY3QxLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2VjdDEubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0Mi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VjdDIiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InNlY3QyaW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9InNlY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5hdi5jbGFzcyIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkaXZjb21wb25lbnQubWl4Ii8+CiAgICAgICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZlbnRyeS5jbGFzcyIvPgogICAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2VjdDMiLz4KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNpbXBsZXNlY3QiLz4KICAgICAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmZW50cnkuY2xhc3MiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNlY3QzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzaW1wbGVzZWN0Ii8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3QyLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlY3QyLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgUmVuZGVyYXM6IEluZGljYXRlcyB0aGUgZm9ybWF0IGluIHdoaWNoIHRoZSBoZWFkaW5nIHNob3VsZAogICAgYXBwZWFyCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3QyLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZW5kZXJhcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3QxIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3QzIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3Q0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3Q1Ii8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3QyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWN0Mi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNlY3QyLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdDMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNlY3QzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJzZWN0M2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJzZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZGl2Y29tcG9uZW50Lm1peCIvPgogICAgICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmZW50cnkuY2xhc3MiLz4KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNlY3Q0Ii8+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzaW1wbGVzZWN0Ii8+CiAgICAgICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmVudHJ5LmNsYXNzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWN0NCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2ltcGxlc2VjdCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5hdi5jbGFzcyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0My5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWN0My5lbGVtZW50IC0tPgogIDwhLS0KICAgIFJlbmRlcmFzOiBJbmRpY2F0ZXMgdGhlIGZvcm1hdCBpbiB3aGljaCB0aGUgaGVhZGluZyBzaG91bGQKICAgIGFwcGVhcgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0My5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVuZGVyYXMiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0MSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0MiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0NCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0NSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0My5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VjdDMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzZWN0My5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3Q0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWN0NCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ic2VjdDRpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ic2VjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRpdmNvbXBvbmVudC5taXgiLz4KICAgICAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmVudHJ5LmNsYXNzIi8+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWN0NSIvPgogICAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2ltcGxlc2VjdCIvPgogICAgICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZlbnRyeS5jbGFzcyIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2VjdDUiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNpbXBsZXNlY3QiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VjdDQuZWxlbWVudCAtLT4KICA8IS0tCiAgICBSZW5kZXJhczogSW5kaWNhdGVzIHRoZSBmb3JtYXQgaW4gd2hpY2ggdGhlIGhlYWRpbmcgc2hvdWxkCiAgICBhcHBlYXIKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdDQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlbmRlcmFzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDEiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDMiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDUiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlY3Q0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2VjdDQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0NS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VjdDUiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InNlY3Q1aW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9InNlY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5hdi5jbGFzcyIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkaXZjb21wb25lbnQubWl4Ii8+CiAgICAgICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZlbnRyeS5jbGFzcyIvPgogICAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2ltcGxlc2VjdCIvPgogICAgICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZlbnRyeS5jbGFzcyIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2ltcGxlc2VjdCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5hdi5jbGFzcyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0NS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWN0NS5lbGVtZW50IC0tPgogIDwhLS0KICAgIFJlbmRlcmFzOiBJbmRpY2F0ZXMgdGhlIGZvcm1hdCBpbiB3aGljaCB0aGUgaGVhZGluZyBzaG91bGQKICAgIGFwcGVhcgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0NS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVuZGVyYXMiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0MSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0MiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0MyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0NCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0NS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VjdDUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzZWN0NS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNpbXBsZXNlY3Qucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNpbXBsZXNlY3QiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ic2VjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRpdmNvbXBvbmVudC5taXgiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2ltcGxlc2VjdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzaW1wbGVzZWN0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNpbXBsZXNlY3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzaW1wbGVzZWN0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzaW1wbGVzZWN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2ltcGxlc2VjdC5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gQmlibGlvZ3JhcGh5IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvZ3JhcGh5LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJiaWJsaW9ncmFwaHkiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJpYmxpb2dyYXBoeWluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImJvb2tjb21wb25lbnQudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbXBvbmVudC5taXgiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iYmlibGlvZGl2Ii8+CiAgICAgICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiaWJsaW9lbnRyeSIvPgogICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImJpYmxpb21peGVkIi8+CiAgICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvZ3JhcGh5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb2dyYXBoeS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9ncmFwaHkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9ncmFwaHkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJpYmxpb2dyYXBoeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJpYmxpb2dyYXBoeS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb2Rpdi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYmlibGlvZGl2Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0ic2VjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICAgIDx4czpjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiaWJsaW9lbnRyeSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiaWJsaW9taXhlZCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9kaXYuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYmlibGlvZGl2LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb2Rpdi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb2Rpdi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYmlibGlvZGl2LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYmlibGlvZGl2Lm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBiaWJsaW9ncmFwaHkuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gR2xvc3NhcnkgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ2xvc3Nhcnkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Imdsb3NzYXJ5Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJnbG9zc2FyeWluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImJvb2tjb21wb25lbnQudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbXBvbmVudC5taXgiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZ2xvc3NkaXYiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Imdsb3NzZW50cnkiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmlibGlvZ3JhcGh5Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdsb3NzYXJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGdsb3NzYXJ5LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3NzYXJ5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3Nhcnkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGdsb3NzYXJ5LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZ2xvc3NhcnkubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJnbG9zc2Rpdi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZ2xvc3NkaXYiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ic2VjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Imdsb3NzZW50cnkiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3NkaXYuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZ2xvc3NkaXYuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ2xvc3NkaXYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJnbG9zc2Rpdi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZ2xvc3NkaXYuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBnbG9zc2Rpdi5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgZ2xvc3NhcnkuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gSW5kZXggYW5kIFNldEluZGV4IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5kZXhlcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW5kZXgiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImluZGV4aW5mbyIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0iYm9va2NvbXBvbmVudC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZGV4ZGl2Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZGV4ZW50cnkiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5kZXguYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW5kZXguZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5kZXguYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InR5cGUiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImluZGV4ZXMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGluZGV4LmF0dGxpc3QgLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2V0aW5kZXgiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InNldGluZGV4aW5mbyIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0iYm9va2NvbXBvbmVudC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZGV4ZGl2Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZGV4ZW50cnkiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2V0aW5kZXguYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2V0aW5kZXguZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2V0aW5kZXguYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmRleGVzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZXRpbmRleC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGluZGV4ZXMubW9kdWxlIC0tPgogIDwhLS0KICAgIFNlZ21lbnRlZExpc3QgaW4gdGhpcyBjb250ZW50IGlzIHVzZWZ1bCBmb3IgbWFya2luZyB1cCBwZXJtdXRlZAogICAgaW5kaWNlcy4KICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5kZXhkaXYucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImluZGV4ZGl2Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0ic2VjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5kZXhkaXZjb21wb25lbnQubWl4Ii8+CiAgICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmRleGVudHJ5Ii8+CiAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic2VnbWVudGVkbGlzdCIvPgogICAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5kZXhkaXYuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW5kZXhkaXYuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5kZXhkaXYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmRleGRpdi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaW5kZXhkaXYuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBpbmRleGRpdi5tb2R1bGUgLS0+CiAgPCEtLSBJbmRleCBlbnRyaWVzIGFwcGVhciBpbiB0aGUgaW5kZXgsIG5vdCB0aGUgdGV4dC4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImluZGV4ZW50cnkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImluZGV4ZW50cnkiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwcmltYXJ5aWUiLz4KICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzZWVpZSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzZWVhbHNvaWUiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6c2VxdWVuY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InNlY29uZGFyeWllIi8+CiAgICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InNlZWllIi8+CiAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic2VlYWxzb2llIi8+CiAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0idGVydGlhcnlpZSIvPgogICAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5kZXhlbnRyeS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBpbmRleGVudHJ5LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImluZGV4ZW50cnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmRleGVudHJ5LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpbmRleGVudHJ5LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW5kZXhlbnRyeS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByaW1zZWN0ZXJpZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icHJpbWFyeWllIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5keHRlcm0uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJpbWFyeWllLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHByaW1hcnlpZS5lbGVtZW50IC0tPgogIDwhLS0gdG8gSW5kZXhUZXJtcyB0aGF0IHRoZXNlIGVudHJpZXMgcmVwcmVzZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcmltYXJ5aWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rZW5kcy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByaW1zZWN0ZXJpZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcHJpbWFyeWllLmF0dGxpc3QgLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2Vjb25kYXJ5aWUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmR4dGVybS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWNvbmRhcnlpZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWNvbmRhcnlpZS5lbGVtZW50IC0tPgogIDwhLS0gdG8gSW5kZXhUZXJtcyB0aGF0IHRoZXNlIGVudHJpZXMgcmVwcmVzZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWNvbmRhcnlpZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmtlbmRzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJpbXNlY3RlcmllLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWNvbmRhcnlpZS5hdHRsaXN0IC0tPgogIDx4czplbGVtZW50IG5hbWU9InRlcnRpYXJ5aWUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmR4dGVybS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0ZXJ0aWFyeWllLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRlcnRpYXJ5aWUuZWxlbWVudCAtLT4KICA8IS0tIHRvIEluZGV4VGVybXMgdGhhdCB0aGVzZSBlbnRyaWVzIHJlcHJlc2VudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGVydGlhcnlpZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmtlbmRzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJpbXNlY3RlcmllLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0ZXJ0aWFyeWllLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcHJpbXNlY3RlcmllLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VlaWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNlZWllIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5keHRlcm0uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VlaWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VlaWUuZWxlbWVudCAtLT4KICA8IS0tIHRvIEluZGV4RW50cnkgdG8gbG9vayB1cCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VlaWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rZW5kLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VlaWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlZWllLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2VlaWUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWVhbHNvaWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNlZWFsc29pZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlZWFsc29pZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWVhbHNvaWUuZWxlbWVudCAtLT4KICA8IS0tIHRvIHJlbGF0ZWQgSW5kZXhFbnRyaWVzIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWVhbHNvaWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rZW5kcy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlZWFsc29pZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VlYWxzb2llLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2VlYWxzb2llLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBpbmRleC5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBSZWZFbnRyeSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZlbnRyeS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmZW50cnkiIHN1YnN0aXR1dGlvbkdyb3VwPSJyZWZlbnRyeS5jbGFzcyIvPgogIDwhLS0gZW5kIG9mIHJlZmVudHJ5LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZmVudHJ5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmZW50cnkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZmVudHJ5LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVmZW50cnkubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZtZXRhLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZtZXRhIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icmVmZW50cnl0aXRsZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJtYW52b2xudW0iLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZm1pc2NpbmZvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZm1ldGEuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmbWV0YS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZtZXRhLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmbWV0YS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmbWV0YS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZm1ldGEubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZtaXNjaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmbWlzY2luZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZtaXNjaW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZWZtaXNjaW5mby5lbGVtZW50IC0tPgogIDwhLS0gQ2xhc3M6IEZyZWVseSBhc3NpZ25hYmxlIHBhcmFtZXRlcjsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmbWlzY2luZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNsYXNzIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZtaXNjaW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmbWlzY2luZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZtaXNjaW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZm5hbWVkaXYucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlZm5hbWVkaXYiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InJlZmRlc2NyaXB0b3IiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZuYW1lIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZWZwdXJwb3NlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZjbGFzcyIvPgogICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InJlbWFyayIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rLmNoYXIuY2xhc3MiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmbmFtZWRpdi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZWZuYW1lZGl2LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZm5hbWVkaXYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZuYW1lZGl2LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZWZuYW1lZGl2LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVmbmFtZWRpdi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZmRlc2NyaXB0b3Iucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlZmRlc2NyaXB0b3IiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmbmFtZS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZkZXNjcmlwdG9yLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZmRlc2NyaXB0b3IuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmZGVzY3JpcHRvci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZmRlc2NyaXB0b3Iucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZmRlc2NyaXB0b3IuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZkZXNjcmlwdG9yLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmbmFtZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmbmFtZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZuYW1lLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZm5hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmbmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZuYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmbmFtZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmbmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZm5hbWUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZwdXJwb3NlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZwdXJwb3NlIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmlubGluZS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZwdXJwb3NlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZnB1cnBvc2UuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmcHVycG9zZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZnB1cnBvc2Uucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZnB1cnBvc2UuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZwdXJwb3NlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmY2xhc3Mucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlZmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmNsYXNzLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZmNsYXNzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZmNsYXNzLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZmNsYXNzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmY2xhc3Mucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZmNsYXNzLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVmY2xhc3MubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzeW5vcHNpc2Rpdi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmc3lub3BzaXNkaXYiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InJlZnN5bm9wc2lzZGl2aW5mbyIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0icmVmc2VjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmNvbXBvbmVudC5taXgiLz4KICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZzZWN0MiIvPgogICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZnNlY3QyIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZnN5bm9wc2lzZGl2LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZnN5bm9wc2lzZGl2LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnN5bm9wc2lzZGl2LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc3lub3BzaXNkaXYucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZnN5bm9wc2lzZGl2LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVmc3lub3BzaXNkaXYubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzZWN0aW9uLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZzZWN0aW9uIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJyZWZzZWN0aW9uaW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9InJlZnNlY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZjb21wb25lbnQubWl4Ii8+CiAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmc2VjdGlvbiIvPgogICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZnNlY3Rpb24iLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc2VjdGlvbi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZWZzZWN0aW9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnNlY3Rpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzZWN0aW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZWZzZWN0aW9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdGlvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnNlY3QxLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZzZWN0MSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0icmVmc2VjdDFpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0icmVmc2VjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmNvbXBvbmVudC5taXgiLz4KICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZzZWN0MiIvPgogICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZnNlY3QyIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZnNlY3QxLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZnNlY3QxLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnNlY3QxLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc2VjdDEucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZnNlY3QxLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdDEubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzZWN0Mi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmc2VjdDIiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InJlZnNlY3QyaW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9InJlZnNlY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZjb21wb25lbnQubWl4Ii8+CiAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmc2VjdDMiLz4KICAgICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZzZWN0MyIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzZWN0Mi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZWZzZWN0Mi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzZWN0Mi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZnNlY3QyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZWZzZWN0Mi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZnNlY3QyLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmc2VjdDMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlZnNlY3QzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJyZWZzZWN0M2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJyZWZzZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmY29tcG9uZW50Lm1peCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzZWN0My5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZWZzZWN0My5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzZWN0My5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZnNlY3QzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZWZzZWN0My5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZnNlY3QzLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiByZWZlbnRyeS5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBBcnRpY2xlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0KICAgIEFuIEFydGljbGUgaXMgYSBjaGFwdGVyLWxldmVsLCBzdGFuZC1hbG9uZSBkb2N1bWVudCB0aGF0IGlzIG9mdGVuLAogICAgYnV0IG5lZWQgbm90IGJlLCBjb2xsZWN0ZWQgaW50byBhIEJvb2suCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFydGljbGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImFydGljbGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJhcnRpY2xlLmNsYXNzIi8+CiAgPCEtLSBlbmQgb2YgYXJ0aWNsZS5lbGVtZW50IC0tPgogIDwhLS0KICAgIENsYXNzOiBJbmRpY2F0ZXMgdGhlIHR5cGUgb2YgYSBwYXJ0aWN1bGFyIGFydGljbGU7CiAgICBhbGwgYXJ0aWNsZXMgaGF2ZSB0aGUgc2FtZSBzdHJ1Y3R1cmUgYW5kIGdlbmVyYWwgcHVycG9zZS4KICAgIE5vIGRlZmF1bHQuCiAgLS0+CiAgPCEtLSBQYXJlbnRCb29rOiBJRCBvZiB0aGUgZW5jbG9zaW5nIEJvb2sgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFydGljbGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iam91cm5hbGFydGljbGUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icHJvZHVjdHNoZWV0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IndoaXRlcGFwZXIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idGVjaHJlcG9ydCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzcGVjaWZpY2F0aW9uIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImZhcSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwYXJlbnRib29rIiB0eXBlPSJ4czpJRFJFRiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXJ0aWNsZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CjwveHM6c2NoZW1hPgo8IS0tIGVuZCBvZiBhcnRpY2xlLmF0dGxpc3QgLS0+CjwhLS0gZW5kIG9mIGFydGljbGUubW9kdWxlIC0tPgo8IS0tIEVuZCBvZiBEb2NCb29rIGRvY3VtZW50IGhpZXJhcmNoeSBtb2R1bGUgVjQuM0NSMyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4K</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Docbook/4_2/dbnotnx.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIERvY0Jvb2sgbm90YXRpb25zIG1vZHVsZSBWNC4zQ1IzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRmlsZSBkYm5vdG54Lm1vZCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIENvcHlyaWdodCAxOTkyLTIwMDIgSGFMIENvbXB1dGVyIFN5c3RlbXMsIEluYy4sCiAgTydSZWlsbHkgJiBBc3NvY2lhdGVzLCBJbmMuLCBBcmJvclRleHQsIEluYy4sIEZ1aml0c3UgU29mdHdhcmUKICBDb3Jwb3JhdGlvbiwgTm9ybWFuIFdhbHNoLCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCBhbmQgdGhlCiAgT3JnYW5pemF0aW9uIGZvciB0aGUgQWR2YW5jZW1lbnQgb2YgU3RydWN0dXJlZCBJbmZvcm1hdGlvbgogIFN0YW5kYXJkcyAoT0FTSVMpLgogIAogICRJZDogZGJub3RueC5tb2QsdiAxLjIxIDIwMDQvMDEvMjEgMTg6NTQ6MjEgbndhbHNoIEV4cCAkCiAgCiAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jQm9vayBEVEQKICBhbmQgaXRzIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUKICBpcyBoZXJlYnkgZ3JhbnRlZCBpbiBwZXJwZXR1aXR5LCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKICBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGFwcGVhciBpbiBhbGwgY29waWVzLiAgVGhlIGNvcHlyaWdodAogIGhvbGRlcnMgbWFrZSBubyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhlIERURCBmb3IKICBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzZWQgb3IgaW1wbGllZAogIHdhcnJhbnR5LgogIAogIElmIHlvdSBtb2RpZnkgdGhlIERvY0Jvb2sgRFREIGluIGFueSB3YXksIGV4Y2VwdCBmb3IgZGVjbGFyaW5nIGFuZAogIHJlZmVyZW5jaW5nIGFkZGl0aW9uYWwgc2V0cyBvZiBnZW5lcmFsIGVudGl0aWVzIGFuZCBkZWNsYXJpbmcKICBhZGRpdGlvbmFsIG5vdGF0aW9ucywgbGFiZWwgeW91ciBEVEQgYXMgYSB2YXJpYW50IG9mIERvY0Jvb2suICBTZWUKICB0aGUgbWFpbnRlbmFuY2UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAKICBQbGVhc2UgZGlyZWN0IGFsbCBxdWVzdGlvbnMsIGJ1ZyByZXBvcnRzLCBvciBzdWdnZXN0aW9ucyBmb3IKICBjaGFuZ2VzIHRvIHRoZSBkb2Nib29rQGxpc3RzLm9hc2lzLW9wZW4ub3JnIG1haWxpbmcgbGlzdC4gRm9yIG1vcmUKICBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay8uCi0tPgo8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0KICBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgZW50aXR5IGRlY2xhcmF0aW9ucyBmb3IgdGhlIHN0YW5kYXJkIElTTwogIGVudGl0eSBzZXRzIHVzZWQgYnkgRG9jQm9vay4KICAKICBJbiBEVEQgZHJpdmVyIGZpbGVzIHJlZmVycmluZyB0byB0aGlzIG1vZHVsZSwgcGxlYXNlIHVzZSBhbiBlbnRpdHkKICBkZWNsYXJhdGlvbiB0aGF0IHVzZXMgdGhlIHB1YmxpYyBpZGVudGlmaWVyIHNob3duIGJlbG93OgogIAogIDwhRU5USVRZICUgZGJub3RuIFBVQkxJQwogICItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBOb3RhdGlvbnMgVjQuM0NSMy8vRU4iCiAgImRibm90bngubW9kIj4KICAlZGJub3RuOwogIAogIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIHBhcmFtZXRlcgogIGVudGl0eSBhbmQgbW9kdWxlIHNjaGVtZSB1c2VkIGluIERvY0Jvb2ssIGN1c3RvbWl6aW5nIERvY0Jvb2sgYW5kCiAgcGxhbm5pbmcgZm9yIGludGVyY2hhbmdlLCBhbmQgY2hhbmdlcyBtYWRlIHNpbmNlIHRoZSBsYXN0IHJlbGVhc2UKICBvZiBEb2NCb29rLgotLT4KPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiBzY2hlbWFMb2NhdGlvbj0ieG1sLnhzZCIvPgogIDx4czpzaW1wbGVUeXBlIG5hbWU9Im5vdGF0aW9uLmNsYXNzIj4KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQk1QIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQ0dNLUNIQVIiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJDR00tQklOQVJZIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQ0dNLUNMRUFSIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRElUUk9GRiIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRWSSIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkVQUyIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkVRTiIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkZBWCIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkdJRiIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkdJRjg3YSIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkdJRjg5YSIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkpQRyIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkpQRUciLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJR0VTIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUENYIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUElDIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUE5HIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUFMiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTR01MIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVEJMIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVEVYIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVElGRiIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IldNRiIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IldQRyIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlNWRyIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBERiIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlNXRiIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxpbmVzcGVjaWZpYyIvPgogICAgPC94czpyZXN0cmljdGlvbj4KICA8L3hzOnNpbXBsZVR5cGU+CjwveHM6c2NoZW1hPgo8IS0tIFdvcmRQZXJmZWN0IEdyYXBoaWMgZm9ybWF0IC0tPgo8IS0tIEVuZCBvZiBEb2NCb29rIG5vdGF0aW9ucyBtb2R1bGUgVjQuM0NSMyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4K</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Docbook/4_2/dbpoolx.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIERvY0Jvb2sgWE1MIGluZm9ybWF0aW9uIHBvb2wgbW9kdWxlIFY0LjNDUjMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRmlsZSBkYnBvb2x4Lm1vZCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIENvcHlyaWdodCAxOTkyLTIwMDIgSGFMIENvbXB1dGVyIFN5c3RlbXMsIEluYy4sCiAgTydSZWlsbHkgJiBBc3NvY2lhdGVzLCBJbmMuLCBBcmJvclRleHQsIEluYy4sIEZ1aml0c3UgU29mdHdhcmUKICBDb3Jwb3JhdGlvbiwgTm9ybWFuIFdhbHNoLCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCBhbmQgdGhlCiAgT3JnYW5pemF0aW9uIGZvciB0aGUgQWR2YW5jZW1lbnQgb2YgU3RydWN0dXJlZCBJbmZvcm1hdGlvbgogIFN0YW5kYXJkcyAoT0FTSVMpLgogIAogICRJZDogZGJwb29seC5tb2QsdiAxLjg1IDIwMDQvMDEvMjEgMTg6NTQ6MjEgbndhbHNoIEV4cCAkCiAgCiAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jQm9vayBYTUwgRFRECiAgYW5kIGl0cyBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlCiAgaXMgaGVyZWJ5IGdyYW50ZWQgaW4gcGVycGV0dWl0eSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CiAgbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBhcHBlYXIgaW4gYWxsIGNvcGllcy4gIFRoZSBjb3B5cmlnaHQKICBob2xkZXJzIG1ha2Ugbm8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoZSBEVEQgZm9yCiAgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzc2VkIG9yIGltcGxpZWQKICB3YXJyYW50eS4KICAKICBJZiB5b3UgbW9kaWZ5IHRoZSBEb2NCb29rIFhNTCBEVEQgaW4gYW55IHdheSwgZXhjZXB0IGZvciBkZWNsYXJpbmcgYW5kCiAgcmVmZXJlbmNpbmcgYWRkaXRpb25hbCBzZXRzIG9mIGdlbmVyYWwgZW50aXRpZXMgYW5kIGRlY2xhcmluZwogIGFkZGl0aW9uYWwgbm90YXRpb25zLCBsYWJlbCB5b3VyIERURCBhcyBhIHZhcmlhbnQgb2YgRG9jQm9vay4gIFNlZQogIHRoZSBtYWludGVuYW5jZSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIAogIFBsZWFzZSBkaXJlY3QgYWxsIHF1ZXN0aW9ucywgYnVnIHJlcG9ydHMsIG9yIHN1Z2dlc3Rpb25zIGZvcgogIGNoYW5nZXMgdG8gdGhlIGRvY2Jvb2tAbGlzdHMub2FzaXMtb3Blbi5vcmcgbWFpbGluZyBsaXN0LiBGb3IgbW9yZQogIGluZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rLy4KLS0+CjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIFRoaXMgbW9kdWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIG9iamVjdHMsIGlubGluZQogIGVsZW1lbnRzLCBhbmQgc28gb24gdGhhdCBhcmUgYXZhaWxhYmxlIHRvIGJlIHVzZWQgYXMgdGhlIG1haW4KICBjb250ZW50IG9mIERvY0Jvb2sgZG9jdW1lbnRzLiAgU29tZSBlbGVtZW50cyBhcmUgdXNlZnVsIGZvciBnZW5lcmFsCiAgcHVibGlzaGluZywgYW5kIG90aGVycyBhcmUgdXNlZnVsIHNwZWNpZmljYWxseSBmb3IgY29tcHV0ZXIKICBkb2N1bWVudGF0aW9uLgogIAogIFRoaXMgbW9kdWxlIGhhcyB0aGUgZm9sbG93aW5nIGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzOgogIAogIG8gSXQgYXNzdW1lcyB0aGF0IGEgJW5vdGF0aW9uLmNsYXNzOyBlbnRpdHkgaXMgZGVmaW5lZCBieSB0aGUKICAgIGRyaXZlciBmaWxlIG9yIG90aGVyIGhpZ2gtbGV2ZWwgbW9kdWxlLiAgVGhpcyBlbnRpdHkgaXMKICAgIHJlZmVyZW5jZWQgaW4gdGhlIE5PVEFUSU9OIGF0dHJpYnV0ZXMgZm9yIHRoZSBncmFwaGljLXJlbGF0ZWQgYW5kCiAgICBNb2RlU3BlYyBlbGVtZW50cy4KICAKICBvIEl0IGFzc3VtZXMgdGhhdCBhbiBhcHByb3ByaWF0ZWx5IHBhcmFtZXRlcml6ZWQgdGFibGUgbW9kdWxlIGlzCiAgICBhdmFpbGFibGUgZm9yIHVzZSB3aXRoIHRoZSB0YWJsZS1yZWxhdGVkIGVsZW1lbnRzLgogIAogIEluIERURCBkcml2ZXIgZmlsZXMgcmVmZXJyaW5nIHRvIHRoaXMgbW9kdWxlLCBwbGVhc2UgdXNlIGFuIGVudGl0eQogIGRlY2xhcmF0aW9uIHRoYXQgdXNlcyB0aGUgcHVibGljIGlkZW50aWZpZXIgc2hvd24gYmVsb3c6CiAgCiAgPCFFTlRJVFkgJSBkYnBvb2wgUFVCTElDCiAgIi0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBJbmZvcm1hdGlvbiBQb29sIFY0LjNDUjMvL0VOIgogICJkYnBvb2x4Lm1vZCI+CiAgJWRicG9vbDsKICAKICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoZSBwYXJhbWV0ZXIKICBlbnRpdHkgYW5kIG1vZHVsZSBzY2hlbWUgdXNlZCBpbiBEb2NCb29rLCBjdXN0b21pemluZyBEb2NCb29rIGFuZAogIHBsYW5uaW5nIGZvciBpbnRlcmNoYW5nZSwgYW5kIGNoYW5nZXMgbWFkZSBzaW5jZSB0aGUgbGFzdCByZWxlYXNlCiAgb2YgRG9jQm9vay4KLS0+CjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLSBHZW5lcmFsLXB1cnBvc2Ugc2VtYW50aWNzIGVudGl0aWVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgogIDx4czppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJodG1sdGJseC54c2QiLz4KICA8eHM6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iY2Fsc3RibHgueHNkIi8+CiAgPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIgc2NoZW1hTG9jYXRpb249InhtbC54c2QiLz4KICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJ5ZXNvcm5vLmF0dHZhbHMiPgogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyIvPgogIDwveHM6c2ltcGxlVHlwZT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBFbnRpdGllcyBmb3IgbW9kdWxlIGluY2x1c2lvbnMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEVudGl0aWVzIGZvciBlbGVtZW50IGNsYXNzZXMgYW5kIG1peHR1cmVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSAiVWJpcXVpdG91cyIgY2xhc3NlczogbmR4dGVybS5jbGFzcyBhbmQgYmVnaW5wYWdlIC0tPgogIDx4czplbGVtZW50IG5hbWU9Im5keHRlcm0uY2xhc3MiIGFic3RyYWN0PSJ0cnVlIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJwcmltYXJ5Ii8+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiPgogICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InNlY29uZGFyeSIvPgogICAgICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+CiAgICAgICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0ZXJ0aWFyeSIvPgogICAgICAgICAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiPgogICAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InNlZSIvPgogICAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWVhbHNvIi8+CiAgICAgICAgICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic2VlIi8+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2VlYWxzbyIvPgogICAgICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InNlZSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2VlYWxzbyIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmRleHRlcm0uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBPYmplY3QtbGV2ZWwgY2xhc3NlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czplbGVtZW50IG5hbWU9Imxpc3QuY2xhc3MiIGFic3RyYWN0PSJ0cnVlIi8+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYWRtb24uY2xhc3MiIGFic3RyYWN0PSJ0cnVlIi8+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibGluZXNwZWNpZmljLmNsYXNzIiBhYnN0cmFjdD0idHJ1ZSIvPgogIDx4czplbGVtZW50IG5hbWU9Im1ldGhvZC5zeW5vcC5jbGFzcyIgYWJzdHJhY3Q9InRydWUiIHN1YnN0aXR1dGlvbkdyb3VwPSJzeW5vcC5jbGFzcyIvPgogIDx4czplbGVtZW50IG5hbWU9InN5bm9wLmNsYXNzIiBhYnN0cmFjdD0idHJ1ZSIvPgogIDx4czplbGVtZW50IG5hbWU9InBhcmEuY2xhc3MiIGFic3RyYWN0PSJ0cnVlIi8+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW5mb3JtYWwuY2xhc3MiIGFic3RyYWN0PSJ0cnVlIi8+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZm9ybWFsLmNsYXNzIiBhYnN0cmFjdD0idHJ1ZSIvPgogIDwhLS0gVGhlIERvY0Jvb2sgVEMgbWF5IHByb2R1Y2UgYW4gb2ZmaWNpYWwgRUJORiBtb2R1bGUgZm9yIERvY0Jvb2suIC0tPgogIDwhLS0gVGhpcyBQRSBwcm92aWRlcyB0aGUgaG9vayBieSB3aGljaCBpdCBjYW4gYmUgaW5zZXJ0ZWQgaW50byB0aGUgRFRELiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb21wb3VuZC5jbGFzcyIgYWJzdHJhY3Q9InRydWUiLz4KICA8eHM6Z3JvdXAgbmFtZT0iZ2Vub2JqLmNsYXNzIj4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYW5jaG9yIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYnJpZGdlaGVhZCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InJlbWFyayIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImhpZ2hsaWdodHMiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9ImRlc2NvYmouY2xhc3MiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhYnN0cmFjdCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImF1dGhvcmJsdXJiIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZXBpZ3JhcGgiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPCEtLSBDaGFyYWN0ZXItbGV2ZWwgY2xhc3NlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czplbGVtZW50IG5hbWU9InhyZWYuY2hhci5jbGFzcyIgYWJzdHJhY3Q9InRydWUiLz4KICA8eHM6ZWxlbWVudCBuYW1lPSJnZW4uY2hhci5jbGFzcyIgYWJzdHJhY3Q9InRydWUiLz4KICA8eHM6ZWxlbWVudCBuYW1lPSJsaW5rLmNoYXIuY2xhc3MiIGFic3RyYWN0PSJ0cnVlIi8+CiAgPCEtLSBUaGUgRG9jQm9vayBUQyBtYXkgcHJvZHVjZSBhbiBvZmZpY2lhbCBFQk5GIG1vZHVsZSBmb3IgRG9jQm9vay4gLS0+CiAgPCEtLSBUaGlzIFBFIHByb3ZpZGVzIHRoZSBob29rIGJ5IHdoaWNoIGl0IGNhbiBiZSBpbnNlcnRlZCBpbnRvIHRoZSBEVEQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InRlY2guY2hhci5jbGFzcyIgYWJzdHJhY3Q9InRydWUiLz4KICA8eHM6Z3JvdXAgbmFtZT0iYmFzZS5jaGFyLmNsYXNzIj4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhbmNob3IiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpncm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJkb2NpbmZvLmNoYXIuY2xhc3MiIGFic3RyYWN0PSJ0cnVlIi8+CiAgPHhzOmdyb3VwIG5hbWU9Im90aGVyLmNoYXIuY2xhc3MiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZW1hcmsiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdWJzY3JpcHQiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdXBlcnNjcmlwdCIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbmxpbmVvYmouY2hhci5jbGFzcyIgYWJzdHJhY3Q9InRydWUiLz4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBFbnRpdGllcyBmb3IgY29udGVudCBtb2RlbHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czpncm91cCBuYW1lPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0idGl0bGUiLz4KICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlYWJicmV2Ii8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPCEtLSBSZWRlY2xhcmF0aW9uIHBsYWNlaG9sZGVyIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0KICAgIEZvciByZWRlY2xhcmluZyBlbnRpdGllcyB0aGF0IGFyZSBkZWNsYXJlZCBhZnRlciB0aGlzIHBvaW50IHdoaWxlCiAgICByZXRhaW5pbmcgdGhlaXIgcmVmZXJlbmNlcyB0byB0aGUgZW50aXRpZXMgdGhhdCBhcmUgZGVjbGFyZWQgYmVmb3JlCiAgICB0aGlzIHBvaW50CiAgLS0+CiAgPCEtLSBPYmplY3QtbGV2ZWwgbWl4dHVyZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0KICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0IGFkbW4gbGluZSBzeW5wIHBhcmEgaW5mbSBmb3JtIGNtcGQgZ2VuICBkZXNjCiAgICBDb21wb25lbnQgbWl4dHVyZSAgICAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYCiAgICBTaWRlYmFyIG1peHR1cmUgICAgICAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIGEgICAgWAogICAgRm9vdG5vdGUgbWl4dHVyZSAgICAgICAgWCAgICAgICAgIFggICAgWCAgICBYICAgIFgKICAgIEV4YW1wbGUgbWl4dHVyZSAgICAgICAgIFggICAgICAgICBYICAgIFggICAgWCAgICBYCiAgICBIaWdobGlnaHRzIG1peHR1cmUgICAgICBYICAgIFggICAgICAgICAgICAgIFgKICAgIFBhcmFncmFwaCBtaXh0dXJlICAgICAgIFggICAgICAgICBYICAgIFggICAgICAgICBYCiAgICBBZG1vbml0aW9uIG1peHR1cmUgICAgICBYICAgICAgICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIGIgICAgYwogICAgRmlndXJlIG1peHR1cmUgICAgICAgICAgICAgICAgICAgIFggICAgWCAgICAgICAgIFgKICAgIFRhYmxlIGVudHJ5IG1peHR1cmUgICAgIFggICAgWCAgICBYICAgICAgICAgWCAgICBkCiAgICBHbG9zc2FyeSBkZWYgbWl4dHVyZSAgICBYICAgICAgICAgWCAgICBYICAgIFggICAgWCAgICAgICAgIGUKICAgIExlZ2FsIG5vdGljZSBtaXh0dXJlICAgIFggICAgWCAgICBYICAgICAgICAgWCAgICBmCiAgICAKICAgIGEuIEp1c3QgUHJvY2VkdXJlOyBub3QgU2lkZWJhciBpdHNlbGYgb3IgTXNnU2V0LgogICAgYi4gTm8gTXNnU2V0LgogICAgYy4gTm8gSGlnaGxpZ2h0cy4KICAgIGQuIEp1c3QgR3JhcGhpYzsgbm8gb3RoZXIgaW5mb3JtYWwgb2JqZWN0cy4KICAgIGUuIE5vIEFuY2hvciwgQnJpZGdlSGVhZCwgb3IgSGlnaGxpZ2h0cy4KICAgIGYuIEp1c3QgQmxvY2tRdW90ZTsgbm8gb3RoZXIgaW5mb3JtYWwgb2JqZWN0cy4KICAtLT4KICA8eHM6Z3JvdXAgbmFtZT0iY29tcG9uZW50Lm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imxpc3QuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhZG1vbi5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVzcGVjaWZpYy5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN5bm9wLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImluZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iY29tcG91bmQuY2xhc3MiLz4KICAgICAgPHhzOmdyb3VwIHJlZj0iZ2Vub2JqLmNsYXNzIi8+CiAgICAgIDx4czpncm91cCByZWY9ImRlc2NvYmouY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYmVnaW5wYWdlIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJzaWRlYmFyLm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imxpc3QuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhZG1vbi5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVzcGVjaWZpYy5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN5bm9wLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImluZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icHJvY2VkdXJlIi8+CiAgICAgIDx4czpncm91cCByZWY9Imdlbm9iai5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9InFhbmRhc2V0Lm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imxpc3QuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhZG1vbi5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVzcGVjaWZpYy5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN5bm9wLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImluZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icHJvY2VkdXJlIi8+CiAgICAgIDx4czpncm91cCByZWY9Imdlbm9iai5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9InJldmRlc2NyaXB0aW9uLm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imxpc3QuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhZG1vbi5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVzcGVjaWZpYy5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN5bm9wLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImluZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icHJvY2VkdXJlIi8+CiAgICAgIDx4czpncm91cCByZWY9Imdlbm9iai5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9ImZvb3Rub3RlLm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imxpc3QuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lc3BlY2lmaWMuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzeW5vcC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmZvcm1hbC5jbGFzcyIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0iZXhhbXBsZS5taXgiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaXN0LmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZXNwZWNpZmljLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ic3lub3AuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaW5mb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYmVnaW5wYWdlIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJoaWdobGlnaHRzLm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imxpc3QuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhZG1vbi5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDwhLS0KICAgICVmb3JtYWwuY2xhc3M7IGlzIGV4cGxpY2l0bHkgZXhjbHVkZWQgZnJvbSBtYW55IGNvbnRleHRzIGluIHdoaWNoCiAgICBwYXJhZ3JhcGhzIGFyZSB1c2VkCiAgLS0+CiAgPHhzOmdyb3VwIG5hbWU9InBhcmEubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGlzdC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFkbW9uLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZXNwZWNpZmljLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaW5mb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmb3JtYWwuY2xhc3MiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9ImFkbW9uLm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imxpc3QuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lc3BlY2lmaWMuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzeW5vcC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmZvcm1hbC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImZvcm1hbC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InByb2NlZHVyZSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InNpZGViYXIiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhbmNob3IiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJicmlkZ2VoZWFkIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icmVtYXJrIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImJlZ2lucGFnZSIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0iZmlndXJlLm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVzcGVjaWZpYy5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN5bm9wLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaW5mb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYmVnaW5wYWdlIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJ0YWJlbnRyeS5taXgiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaXN0LmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYWRtb24uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lc3BlY2lmaWMuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZ3JhcGhpYyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im1lZGlhb2JqZWN0Ii8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJnbG9zc2RlZi5taXgiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaXN0LmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZXNwZWNpZmljLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ic3lub3AuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaW5mb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZW1hcmsiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYmVnaW5wYWdlIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJsZWdhbG5vdGljZS5taXgiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaXN0LmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYWRtb24uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lc3BlY2lmaWMuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYmxvY2txdW90ZSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9InRleHRvYmplY3QubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGlzdC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFkbW9uLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZXNwZWNpZmljLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImJsb2NrcXVvdGUiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibWVkaWFvYmplY3QubWl4IiBhYnN0cmFjdD0idHJ1ZSIvPgogIDx4czpncm91cCBuYW1lPSJsaXN0cHJlYW1ibGUubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYWRtb24uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lc3BlY2lmaWMuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzeW5vcC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmZvcm1hbC5jbGFzcyIvPgogICAgICA8eHM6Z3JvdXAgcmVmPSJnZW5vYmouY2xhc3MiLz4KICAgICAgPHhzOmdyb3VwIHJlZj0iZGVzY29iai5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPCEtLSBDaGFyYWN0ZXItbGV2ZWwgbWl4dHVyZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gc2dtbC5mZWF0dXJlcyAtLT4KICA8IS0tIG5vdCBbc2dtbC5mZWF0dXJlc1sgLS0+CiAgPCEtLSBdXSBub3Qgc2dtbC5mZWF0dXJlcyAtLT4KICA8IS0tCiAgICAgICAgICAgICAgICAgICAgICAgICNQQ0QgeHJlZiB3b3JkIGxpbmsgY3B0ciBiYXNlIGRuZm8gb3RociBpbm9iIChzeW5vcCkKICAgIHBhcmEuY2hhci5taXggICAgICAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgWAogICAgdGl0bGUuY2hhci5taXggICAgICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYCiAgICBuZHh0ZXJtLmNoYXIubWl4ICAgICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIGEKICAgIGNwdHIuY2hhci5taXggICAgICAgICBYICAgICAgICAgICAgICBYICAgIFggICAgWCAgICAgICAgIFggICAgYQogICAgc21hbGxjcHRyLmNoYXIubWl4ICAgIFggICAgICAgICAgICAgICAgICAgYiAgICAgICAgICAgICAgICAgICBhCiAgICB3b3JkLmNoYXIubWl4ICAgICAgICAgWCAgICAgICAgIGMgICAgWCAgICAgICAgIFggICAgICAgICBYICAgIGEKICAgIGRvY2luZm8uY2hhci5taXggICAgICBYICAgICAgICAgZCAgICBYICAgIGIgICAgICAgICAgICAgIFggICAgYQogICAgCiAgICBhLiBKdXN0IElubGluZUdyYXBoaWM7IG5vIElubGluZUVxdWF0aW9uLgogICAgYi4gSnVzdCBSZXBsYWNlYWJsZTsgbm8gb3RoZXIgY29tcHV0ZXIgdGVybXMuCiAgICBjLiBKdXN0IEVtcGhhc2lzIGFuZCBUcmFkZW1hcms7IG5vIG90aGVyIHdvcmQgZWxlbWVudHMuCiAgICBkLiBKdXN0IEFjcm9ueW0sIEVtcGhhc2lzLCBhbmQgVHJhZGVtYXJrOyBubyBvdGhlciB3b3JkIGVsZW1lbnRzLgogIC0tPgogIDwhLS0gVGhlIERvY0Jvb2sgVEMgbWF5IHByb2R1Y2UgYW4gb2ZmaWNpYWwgZm9ybXMgbW9kdWxlIGZvciBEb2NCb29rLiAtLT4KICA8IS0tIFRoaXMgUEUgcHJvdmlkZXMgdGhlIGhvb2sgYnkgd2hpY2ggaXQgY2FuIGJlIGluc2VydGVkIGludG8gdGhlIERURC4gLS0+CiAgPHhzOmdyb3VwIG5hbWU9InBhcmEuY2hhci5taXgiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4cmVmLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Imdlbi5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRlY2guY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJhc2UuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZG9jaW5mby5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ib3RoZXIuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lb2JqLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN5bm9wLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9InRpdGxlLmNoYXIubWl4Ij4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ieHJlZi5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJnZW4uY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluay5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0ZWNoLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJiYXNlLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImRvY2luZm8uY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9Im90aGVyLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZW9iai5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJuZHh0ZXJtLmNoYXIubWl4Ij4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ieHJlZi5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJnZW4uY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluay5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0ZWNoLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJiYXNlLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImRvY2luZm8uY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9Im90aGVyLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZWdyYXBoaWMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZW1lZGlhb2JqZWN0Ii8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJjcHRyLmNoYXIubWl4Ij4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluay5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0ZWNoLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJiYXNlLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJvdGhlci5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmxpbmVncmFwaGljIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmxpbmVtZWRpYW9iamVjdCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYmVnaW5wYWdlIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJzbWFsbGNwdHIuY2hhci5taXgiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZXBsYWNlYWJsZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lZ3JhcGhpYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lbWVkaWFvYmplY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImJlZ2lucGFnZSIvPgogICAgICA8L3hzOmNob2ljZT4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0id29yZC5jaGFyLm1peCI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFjcm9ueW0iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImVtcGhhc2lzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0cmFkZW1hcmsiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmsuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJhc2UuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9Im90aGVyLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZWdyYXBoaWMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZW1lZGlhb2JqZWN0Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9ImRvY2luZm8uY2hhci5taXgiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImVtcGhhc2lzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0cmFkZW1hcmsiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InJlcGxhY2VhYmxlIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ib3RoZXIuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lZ3JhcGhpYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lbWVkaWFvYmplY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPCEtLSBFTlRJVFkgJSBiaWJsaW9jb21wb25lbnQubWl4IChzZWUgQmlibGlvZ3JhcGhpYyBzZWN0aW9uLCBiZWxvdykgLS0+CiAgPCEtLSBFTlRJVFkgJSBwZXJzb24uaWRlbnQubWl4IChzZWUgQmlibGlvZ3JhcGhpYyBzZWN0aW9uLCBiZWxvdykgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gRW50aXRpZXMgZm9yIGF0dHJpYnV0ZXMgYW5kIGF0dHJpYnV0ZSBjb21wb25lbnRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEVmZmVjdGl2aXR5IGF0dHJpYnV0ZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLQogICAgQXJjaDogQ29tcHV0ZXIgb3IgY2hpcCBhcmNoaXRlY3R1cmUgdG8gd2hpY2ggZWxlbWVudCBhcHBsaWVzOyBubwogICAgZGVmYXVsdAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcmNoLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFyY2giLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gQ29uZGl0aW9uOiBHZW5lcmFsLXB1cnBvc2UgZWZmZWN0aXZpdHkgYXR0cmlidXRlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25kaXRpb24uYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29uZGl0aW9uIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIENvbmZvcm1hbmNlOiBTdGFuZGFyZHMgY29uZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25mb3JtYW5jZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb25mb3JtYW5jZSIgdHlwZT0ieHM6Tk1UT0tFTlMiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gT1M6IE9wZXJhdGluZyBzeXN0ZW0gdG8gd2hpY2ggZWxlbWVudCBhcHBsaWVzOyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvcy5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvcyIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBSZXZpc2lvbjogRWRpdG9yaWFsIHJldmlzaW9uIHRvIHdoaWNoIGVsZW1lbnQgYmVsb25nczsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmV2aXNpb24uYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmV2aXNpb24iLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gU2VjdXJpdHk6IFNlY3VyaXR5IGNsYXNzaWZpY2F0aW9uOyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN1cml0eS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZWN1cml0eSIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLQogICAgVXNlckxldmVsOiBMZXZlbCBvZiB1c2VyIGV4cGVyaWVuY2UgdG8gd2hpY2ggZWxlbWVudCBhcHBsaWVzOyBubwogICAgZGVmYXVsdAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ1c2VybGV2ZWwuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXNlcmxldmVsIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIFZlbmRvcjogQ29tcHV0ZXIgdmVuZG9yIHRvIHdoaWNoIGVsZW1lbnQgYXBwbGllczsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idmVuZG9yLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZlbmRvciIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVmZmVjdGl2aXR5LmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhcmNoLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29uZGl0aW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29uZm9ybWFuY2UuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvcy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJldmlzaW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdXJpdHkuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ1c2VybGV2ZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2ZW5kb3IuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIENvbW1vbiBhdHRyaWJ1dGVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBJZDogVW5pcXVlIGlkZW50aWZpZXIgb2YgZWxlbWVudDsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaWQuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InhzOklEIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tCiAgICBJZDogVW5pcXVlIGlkZW50aWZpZXIgb2YgZWxlbWVudDsgYSB2YWx1ZSBtdXN0IGJlIHN1cHBsaWVkOyBubwogICAgZGVmYXVsdAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpZHJlcS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6SUQiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0KICAgIExhbmc6IEluZGljYXRvciBvZiBsYW5ndWFnZSBpbiB3aGljaCBlbGVtZW50IGlzIHdyaXR0ZW4sIGZvcgogICAgdHJhbnNsYXRpb24sIGNoYXJhY3RlciBzZXQgbWFuYWdlbWVudCwgZXRjLjsgbm8gZGVmYXVsdAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsYW5nLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImxhbmciLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gUmVtYXA6IFByZXZpb3VzIHJvbGUgb2YgZWxlbWVudCBiZWZvcmUgY29udmVyc2lvbjsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVtYXAuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVtYXAiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gUm9sZTogTmV3IHJvbGUgb2YgZWxlbWVudCBpbiBsb2NhbCBlbnZpcm9ubWVudDsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyb2xlIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tCiAgICBYUmVmTGFiZWw6IEFsdGVybmF0ZSBsYWJlbGluZyBzdHJpbmcgZm9yIFhSZWYgdGV4dCBnZW5lcmF0aW9uOwogICAgZGVmYXVsdCBpcyB1c3VhbGx5IHRpdGxlIG9yIG90aGVyIGFwcHJvcHJpYXRlIGxhYmVsIHRleHQgYWxyZWFkeQogICAgY29udGFpbmVkIGluIGVsZW1lbnQKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ieHJlZmxhYmVsLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InhyZWZsYWJlbCIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLQogICAgUmV2aXNpb25GbGFnOiBSZXZpc2lvbiBzdGF0dXMgb2YgZWxlbWVudDsgZGVmYXVsdCBpcyB0aGF0IGVsZW1lbnQKICAgIHdhc24ndCByZXZpc2VkCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJldmlzaW9uZmxhZy5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZXZpc2lvbmZsYWciPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjaGFuZ2VkIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImFkZGVkIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImRlbGV0ZWQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib2ZmIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRpcjogQmlkaXJlY3Rpb25hbCBvdmVycmlkZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZGlyLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImRpciI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imx0ciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJydGwiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibHJvIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJsbyIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSB4bWw6YmFzZTogYmFzZSBVUkkgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InhtbC1iYXNlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIHJlZj0ieG1sOmJhc2UiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gUm9sZSBpcyBpbmNsdWRlZCBleHBsaWNpdGx5IG9uIGVhY2ggZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29tbW9uLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpZC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhbmcuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZW1hcC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InhyZWZsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJldmlzaW9uZmxhZy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVmZmVjdGl2aXR5LmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZGlyLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ieG1sLWJhc2UuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIFJvbGUgaXMgaW5jbHVkZWQgZXhwbGljaXRseSBvbiBlYWNoIGVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImlkcmVxLmNvbW1vbi5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaWRyZXEuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYW5nLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVtYXAuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ4cmVmbGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXZpc2lvbmZsYWcuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlZmZlY3Rpdml0eS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImRpci5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InhtbC1iYXNlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBTZW1pLWNvbW1vbiBhdHRyaWJ1dGVzIGFuZCBvdGhlciBhdHRyaWJ1dGUgZW50aXRpZXMgLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0KICAgIEVudGl0eVJlZjogTmFtZSBvZiBhbiBleHRlcm5hbCBlbnRpdHkgY29udGFpbmluZyB0aGUgY29udGVudAogICAgb2YgdGhlIGdyYXBoaWMKICAtLT4KICA8IS0tCiAgICBGaWxlUmVmOiBGaWxlbmFtZSwgcXVhbGlmaWVkIGJ5IGEgcGF0aG5hbWUgaWYgZGVzaXJlZCwKICAgIGRlc2lnbmF0aW5nIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGdyYXBoaWMKICAtLT4KICA8IS0tIEZvcm1hdDogTm90YXRpb24gb2YgdGhlIGVsZW1lbnQgY29udGVudCwgaWYgYW55IC0tPgogIDwhLS0gU3JjQ3JlZGl0OiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgc291cmNlIG9mIHRoZSBHcmFwaGljIC0tPgogIDwhLS0gV2lkdGg6IFNhbWUgYXMgQ0FMUyByZXByb3dpZCAoZGVzaXJlZCB3aWR0aCkgLS0+CiAgPCEtLSBEZXB0aDogU2FtZSBhcyBDQUxTIHJlcHJvZGVwIChkZXNpcmVkIGRlcHRoKSAtLT4KICA8IS0tCiAgICBBbGlnbjogU2FtZSBhcyBDQUxTIGhwbGFjZSB3aXRoICdub25lJyByZW1vdmVkOyAjSU1QTElFRCBtZWFucwogICAgYXBwbGljYXRpb24tc3BlY2lmaWMKICAtLT4KICA8IS0tIFNjYWxlOiBDb25mbGF0aW9uIG9mIENBTFMgaHNjYWxlIGFuZCB2c2NhbGUgLS0+CiAgPCEtLSBTY2FsZWZpdDogU2FtZSBhcyBDQUxTIHNjYWxlZml0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJncmFwaGljcy5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJlbnRpdHlyZWYiIHR5cGU9InhzOkVOVElUWSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmaWxlcmVmIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZvcm1hdCIgdHlwZT0ibm90YXRpb24uY2xhc3MiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3JjY3JlZGl0Ii8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9IndpZHRoIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbnRlbnR3aWR0aCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkZXB0aCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb250ZW50ZGVwdGgiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYWxpZ24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsZWZ0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJpZ2h0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNlbnRlciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2YWxpZ24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0b3AiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibWlkZGxlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImJvdHRvbSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzY2FsZSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzY2FsZWZpdCIgdHlwZT0ieWVzb3Juby5hdHR2YWxzIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tCiAgICBBY3Rpb246IEtleSBjb21iaW5hdGlvbiB0eXBlOyBkZWZhdWx0IGlzIHVuc3BlY2lmaWVkIGlmIG9uZQogICAgY2hpbGQgZWxlbWVudCwgU2ltdWwgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZTsgaWYgdmFsdWUgaXMKICAgIE90aGVyLCB0aGUgT3RoZXJBY3Rpb24gYXR0cmlidXRlIG11c3QgaGF2ZSBhIG5vbmVtcHR5IHZhbHVlCiAgLS0+CiAgPCEtLSBPdGhlckFjdGlvbjogVXNlci1kZWZpbmVkIGtleSBjb21iaW5hdGlvbiB0eXBlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJrZXlhY3Rpb24uYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYWN0aW9uIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2xpY2siLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZG91YmxlLWNsaWNrIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InByZXNzIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlcSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzaW11bCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvdGhlciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvdGhlcmFjdGlvbiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLQogICAgTGFiZWw6IElkZW50aWZ5aW5nIG51bWJlciBvciBzdHJpbmc7IGRlZmF1bHQgaXMgdXN1YWxseSB0aGUKICAgIGFwcHJvcHJpYXRlIG51bWJlciBvciBzdHJpbmcgYXV0b2dlbmVyYXRlZCBieSBhIGZvcm1hdHRlcgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsYWJlbC5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsYWJlbCIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLQogICAgRm9ybWF0OiB3aGV0aGVyIGVsZW1lbnQgaXMgYXNzdW1lZCB0byBjb250YWluIHNpZ25pZmljYW50IHdoaXRlCiAgICBzcGFjZQogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsaW5lc3BlY2lmaWMuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZm9ybWF0IiBkZWZhdWx0PSJsaW5lc3BlY2lmaWMiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsaW5lc3BlY2lmaWMiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGluZW51bWJlcmluZyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im51bWJlcmVkIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InVubnVtYmVyZWQiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29udGludWF0aW9uIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY29udGludWVzIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlc3RhcnRzIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InN0YXJ0aW5nbGluZW51bWJlciIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsYW5ndWFnZSIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBMaW5rZW5kOiBsaW5rIHRvIHJlbGF0ZWQgaW5mb3JtYXRpb247IG5vIGRlZmF1bHQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxpbmtlbmQuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGlua2VuZCIgdHlwZT0ieHM6SURSRUYiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gTGlua2VuZDogcmVxdWlyZWQgbGluayB0byByZWxhdGVkIGluZm9ybWF0aW9uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsaW5rZW5kcmVxLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImxpbmtlbmQiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzOklEUkVGIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tCiAgICBMaW5rZW5kczogbGluayB0byBvbmUgb3IgbW9yZSBzZXRzIG9mIHJlbGF0ZWQgaW5mb3JtYXRpb247IG5vCiAgICBkZWZhdWx0CiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxpbmtlbmRzLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImxpbmtlbmRzIiB0eXBlPSJ4czpJRFJFRlMiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtYXJrLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1hcmsiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gTW9yZUluZm86IHdoZXRoZXIgZWxlbWVudCdzIGNvbnRlbnQgaGFzIGFuIGFzc29jaWF0ZWQgUmVmRW50cnkgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1vcmVpbmZvLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1vcmVpbmZvIiBkZWZhdWx0PSJub25lIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVmZW50cnkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibm9uZSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBQYWdlbnVtOiBudW1iZXIgb2YgcGFnZSBvbiB3aGljaCBlbGVtZW50IGFwcGVhcnM7IG5vIGRlZmF1bHQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBhZ2VudW0uYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icGFnZW51bSIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLQogICAgU3RhdHVzOiBFZGl0b3JpYWwgb3IgcHVibGljYXRpb24gc3RhdHVzIG9mIHRoZSBlbGVtZW50CiAgICBpdCBhcHBsaWVzIHRvLCBzdWNoIGFzICJpbiByZXZpZXciIG9yICJhcHByb3ZlZCBmb3IgZGlzdHJpYnV0aW9uIgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdGF0dXMuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3RhdHVzIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tCiAgICBXaWR0aDogd2lkdGggb2YgdGhlIGxvbmdlc3QgbGluZSBpbiB0aGUgZWxlbWVudCB0byB3aGljaCBpdAogICAgcGVydGFpbnMsIGluIG51bWJlciBvZiBjaGFyYWN0ZXJzCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IndpZHRoLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9IndpZHRoIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBUaXRsZSBlbGVtZW50cyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0aXRsZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idGl0bGUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idGl0bGUuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGl0bGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdGl0bGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGl0bGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYWdlbnVtLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGl0bGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRpdGxlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdGl0bGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0aXRsZWFiYnJldi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idGl0bGVhYmJyZXYiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idGl0bGUuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGl0bGVhYmJyZXYuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdGl0bGVhYmJyZXYuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGl0bGVhYmJyZXYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0aXRsZWFiYnJldi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdGl0bGVhYmJyZXYuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0aXRsZWFiYnJldi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN1YnRpdGxlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzdWJ0aXRsZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0aXRsZS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdWJ0aXRsZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzdWJ0aXRsZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdWJ0aXRsZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN1YnRpdGxlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzdWJ0aXRsZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHN1YnRpdGxlLm1vZHVsZSAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBCaWJsaW9ncmFwaGljIGVudGl0aWVzIGFuZCBlbGVtZW50cyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0KICAgIFRoZSBiaWJsaW9ncmFwaGljIGVsZW1lbnRzIGFyZSB0eXBpY2FsbHkgdXNlZCBpbiB0aGUgZG9jdW1lbnQKICAgIGhpZXJhcmNoeS4gVGhleSBkbyBub3QgYXBwZWFyIGluIGNvbnRlbnQgbW9kZWxzIG9mIGluZm9ybWF0aW9uCiAgICBwb29sIGVsZW1lbnRzLiAgU2VlIGFsc28gdGhlIGRvY3VtZW50IGluZm9ybWF0aW9uIGVsZW1lbnRzLAogICAgYmVsb3cuCiAgLS0+CiAgPHhzOmdyb3VwIG5hbWU9InBlcnNvbi5pZGVudC5taXgiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJob25vcmlmaWMiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmaXJzdG5hbWUiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdXJuYW1lIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZWFnZSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im90aGVybmFtZSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFmZmlsaWF0aW9uIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYXV0aG9yYmx1cmIiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb250cmliIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJiaWJsaW9jb21wb25lbnQubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYWJicmV2Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYWJzdHJhY3QiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhZGRyZXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYXJ0cGFnZW51bXMiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhdXRob3IiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhdXRob3Jncm91cCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImF1dGhvcmluaXRpYWxzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYmlibGlvbWlzYyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImJpYmxpb3NldCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImNvbGxhYiIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImNvbmZncm91cCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImNvbnRyYWN0bnVtIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iY29udHJhY3RzcG9uc29yIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iY29weXJpZ2h0Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iY29ycGF1dGhvciIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImNvcnBuYW1lIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iY29ycGNyZWRpdCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImRhdGUiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlZGl0aW9uIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZWRpdG9yIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaW52cGFydG51bWJlciIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImlzYm4iLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpc3NuIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaXNzdWVudW0iLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJvcmduYW1lIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYmlibGlvaWQiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjaXRlYmlibGlvaWQiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiaWJsaW9zb3VyY2UiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiaWJsaW9yZWxhdGlvbiIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImJpYmxpb2NvdmVyYWdlIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ib3RoZXJjcmVkaXQiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYWdlbnVtcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InByaW50aGlzdG9yeSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InByb2R1Y3RuYW1lIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icHJvZHVjdG51bWJlciIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InB1YmRhdGUiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwdWJsaXNoZXIiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwdWJsaXNoZXJuYW1lIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icHVic251bWJlciIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InJlbGVhc2VpbmZvIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icmV2aGlzdG9yeSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InNlcmllc3ZvbG51bXMiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdWJ0aXRsZSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InRpdGxlIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0idGl0bGVhYmJyZXYiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ2b2x1bWVudW0iLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjaXRldGl0bGUiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwZXJzb25uYW1lIi8+CiAgICAgIDx4czpncm91cCByZWY9InBlcnNvbi5pZGVudC5taXgiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDwhLS0gSSBkb24ndCB0aGluayB0aGlzIGlzIHdlbGwgcGxhY2VkLCBidXQgaXQgbmVlZHMgdG8gYmUgaGVyZSBiZWNhdXNlIG9mIC0tPgogIDwhLS0gdGhlIHJlZmVyZW5jZSB0byBiaWJsaW9jb21wb25lbnQubWl4IC0tPgogIDx4czpncm91cCBuYW1lPSJpbmZvLmNsYXNzIj4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZ3JhcGhpYyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im1lZGlhb2JqZWN0Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGVnYWxub3RpY2UiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtb2Rlc3BlYyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN1YmplY3RzZXQiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJrZXl3b3Jkc2V0Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaXRlcm1zZXQiLz4KICAgICAgPHhzOmdyb3VwIHJlZj0iYmlibGlvY29tcG9uZW50Lm1peCIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvZW50cnkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImJpYmxpb2VudHJ5Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcnRpY2xlaW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJpYmxpb2NvbXBvbmVudC5taXgiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb2VudHJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb2VudHJ5LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb2VudHJ5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvZW50cnkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJpYmxpb2VudHJ5LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYmlibGlvZW50cnkubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9taXhlZC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYmlibGlvbWl4ZWQiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJiaWJsaW9jb21wb25lbnQubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiaWJsaW9tc2V0Ii8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9taXhlZC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBiaWJsaW9taXhlZC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9taXhlZC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb21peGVkLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBiaWJsaW9taXhlZC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJpYmxpb21peGVkLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXJ0aWNsZWluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImFydGljbGVpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXJ0aWNsZWluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYXJ0aWNsZWluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXJ0aWNsZWluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhcnRpY2xlaW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYXJ0aWNsZWluZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhcnRpY2xlaW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb3NldC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYmlibGlvc2V0Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImJpYmxpb2NvbXBvbmVudC5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvc2V0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb3NldC5lbGVtZW50IC0tPgogIDwhLS0gUmVsYXRpb246IFJlbGF0aW9uc2hpcCBvZiBlbGVtZW50cyBjb250YWluZWQgd2l0aGluIEJpYmxpb1NldCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvc2V0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZWxhdGlvbiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvc2V0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBiaWJsaW9zZXQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBiaWJsaW9zZXQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9tc2V0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJiaWJsaW9tc2V0Ij4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iYmlibGlvY29tcG9uZW50Lm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYmlibGlvbXNldCIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvbXNldC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBiaWJsaW9tc2V0LmVsZW1lbnQgLS0+CiAgPCEtLSBSZWxhdGlvbjogUmVsYXRpb25zaGlwIG9mIGVsZW1lbnRzIGNvbnRhaW5lZCB3aXRoaW4gQmlibGlvTVNldCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvbXNldC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVsYXRpb24iLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb21zZXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJpYmxpb21zZXQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBiaWJsaW9tc2V0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvbWlzYy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYmlibGlvbWlzYyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb21pc2MuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYmlibGlvbWlzYy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9taXNjLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvbWlzYy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYmlibGlvbWlzYy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJpYmxpb21pc2MubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIFN1YmplY3QsIEtleXdvcmQsIGFuZCBJVGVybVNldCBlbGVtZW50cyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN1YmplY3RzZXQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InN1YmplY3RzZXQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic3ViamVjdCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdWJqZWN0c2V0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN1YmplY3RzZXQuZWxlbWVudCAtLT4KICA8IS0tIFNjaGVtZTogQ29udHJvbGxlZCB2b2NhYnVsYXJ5IGVtcGxveWVkIGluIFN1YmplY3RUZXJtcyAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3ViamVjdHNldC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2NoZW1lIiB0eXBlPSJ4czpOTVRPS0VOIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdWJqZWN0c2V0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzdWJqZWN0c2V0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc3ViamVjdHNldC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN1YmplY3Qucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InN1YmplY3QiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic3ViamVjdHRlcm0iLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3ViamVjdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzdWJqZWN0LmVsZW1lbnQgLS0+CiAgPCEtLQogICAgV2VpZ2h0OiBSYW5raW5nIG9mIHRoaXMgZ3JvdXAgb2YgU3ViamVjdFRlcm1zIHJlbGF0aXZlCiAgICB0byBvdGhlcnMsIDAgaXMgbG93LCBubyBoaWdoZXN0IHZhbHVlIHNwZWNpZmllZAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdWJqZWN0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ3ZWlnaHQiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN1YmplY3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN1YmplY3QuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzdWJqZWN0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3ViamVjdHRlcm0ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InN1YmplY3R0ZXJtIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN1YmplY3R0ZXJtLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN1YmplY3R0ZXJtLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN1YmplY3R0ZXJtLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3ViamVjdHRlcm0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN1YmplY3R0ZXJtLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc3ViamVjdHRlcm0ubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIHN1YmplY3RzZXQuY29udGVudC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImtleXdvcmRzZXQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImtleXdvcmRzZXQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ia2V5d29yZCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJrZXl3b3Jkc2V0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGtleXdvcmRzZXQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ia2V5d29yZHNldC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImtleXdvcmRzZXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGtleXdvcmRzZXQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBrZXl3b3Jkc2V0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ia2V5d29yZC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ia2V5d29yZCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJrZXl3b3JkLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGtleXdvcmQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ia2V5d29yZC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImtleXdvcmQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGtleXdvcmQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBrZXl3b3JkLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBrZXl3b3Jkc2V0LmNvbnRlbnQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpdGVybXNldC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaXRlcm1zZXQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5kZXh0ZXJtIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Iml0ZXJtc2V0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGl0ZXJtc2V0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Iml0ZXJtc2V0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaXRlcm1zZXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGl0ZXJtc2V0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaXRlcm1zZXQubW9kdWxlIC0tPgogIDwhLS0gQmlibGlvZ3JhcGhpYyBpbmZvIGZvciAiYmxvY2tzIiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmxvY2tpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJibG9ja2luZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJibG9ja2luZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYmxvY2tpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJsb2NraW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJsb2NraW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYmxvY2tpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYmxvY2tpbmZvLm1vZHVsZSAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBDb21wb3VuZCAoc2VjdGlvbi1pc2gpIGVsZW1lbnRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gTWVzc2FnZSBzZXQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnc2V0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtc2dzZXQiIHN1YnN0aXR1dGlvbkdyb3VwPSJjb21wb3VuZC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmxvY2tpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtc2dlbnRyeSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2ltcGxlbXNnZW50cnkiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNnc2V0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1zZ3NldC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtc2dzZXQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dzZXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1zZ3NldC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1zZ3NldC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ2VudHJ5LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtc2dlbnRyeSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtc2ciLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ibXNnaW5mbyIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibXNnZXhwbGFuIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ2VudHJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1zZ2VudHJ5LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ2VudHJ5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNnZW50cnkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1zZ2VudHJ5LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbXNnZW50cnkubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzaW1wbGVtc2dlbnRyeS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2ltcGxlbXNnZW50cnkiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtc2d0ZXh0Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibXNnZXhwbGFuIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNpbXBsZW1zZ2VudHJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNpbXBsZW1zZ2VudHJ5LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNpbXBsZW1zZ2VudHJ5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhdWRpZW5jZSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsZXZlbCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvcmlnaW4iLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNpbXBsZW1zZ2VudHJ5LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzaW1wbGVtc2dlbnRyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNpbXBsZW1zZ2VudHJ5Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtc2ciPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtc2dtYWluIi8+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ibXNnc3ViIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im1zZ3JlbCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2cuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbXNnLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbXNnLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbXNnLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnbWFpbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibXNnbWFpbiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im1zZ3RleHQiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNnbWFpbi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtc2dtYWluLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ21haW4uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dtYWluLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtc2dtYWluLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbXNnbWFpbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ3N1Yi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibXNnc3ViIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0aXRsZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibXNndGV4dCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dzdWIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbXNnc3ViLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ3N1Yi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ3N1Yi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbXNnc3ViLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbXNnc3ViLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNncmVsLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtc2dyZWwiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtc2d0ZXh0Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ3JlbC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtc2dyZWwuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNncmVsLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNncmVsLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtc2dyZWwuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtc2dyZWwubW9kdWxlIC0tPgogIDwhLS0gTXNnVGV4dCAoZGVmaW5lZCBpbiB0aGUgSW5saW5lcyBzZWN0aW9uLCBiZWxvdykgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ2luZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im1zZ2luZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibXNnbGV2ZWwiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im1zZ29yaWciLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im1zZ2F1ZCIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNnaW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtc2dpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ2luZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtc2dpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbXNnaW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ2xldmVsLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtc2dsZXZlbCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNnbGV2ZWwuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbXNnbGV2ZWwuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnbGV2ZWwuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dsZXZlbC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbXNnbGV2ZWwuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtc2dsZXZlbC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ29yaWcucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im1zZ29yaWciPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ29yaWcuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbXNnb3JpZy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtc2dvcmlnLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNnb3JpZy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbXNnb3JpZy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1zZ29yaWcubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtc2dhdWQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im1zZ2F1ZCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ2F1ZC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtc2dhdWQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnYXVkLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNnYXVkLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtc2dhdWQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtc2dhdWQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtc2dleHBsYW4ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im1zZ2V4cGxhbiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dleHBsYW4uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbXNnZXhwbGFuLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ2V4cGxhbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ2V4cGxhbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbXNnZXhwbGFuLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbXNnZXhwbGFuLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBtc2dzZXQuY29udGVudC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRhc2sucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRhc2siIHN1YnN0aXR1dGlvbkdyb3VwPSJjb21wb3VuZC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmxvY2tpbmZvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iZm9ybWFsb2JqZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGFza3N1bW1hcnkiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGFza3ByZXJlcXVpc2l0ZXMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InByb2NlZHVyZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZXhhbXBsZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0YXNrcmVsYXRlZCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0YXNrLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRhc2suZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGFzay5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRhc2sucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRhc2suYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0YXNrLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGFza3N1bW1hcnkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRhc2tzdW1tYXJ5Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImZvcm1hbG9iamVjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbXBvbmVudC5taXgiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGFza3N1bW1hcnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdGFza3N1bW1hcnkuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGFza3N1bW1hcnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0YXNrc3VtbWFyeS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdGFza3N1bW1hcnkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0YXNrc3VtbWFyeS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRhc2twcmVyZXF1aXNpdGVzLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0YXNrcHJlcmVxdWlzaXRlcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmxvY2tpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjb21wb25lbnQubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRhc2twcmVyZXF1aXNpdGVzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRhc2twcmVyZXF1aXNpdGVzLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRhc2twcmVyZXF1aXNpdGVzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGFza3ByZXJlcXVpc2l0ZXMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRhc2twcmVyZXF1aXNpdGVzLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdGFza3ByZXJlcXVpc2l0ZXMubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0YXNrcmVsYXRlZC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idGFza3JlbGF0ZWQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0iZm9ybWFsb2JqZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0YXNrcmVsYXRlZC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0YXNrcmVsYXRlZC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0YXNrcmVsYXRlZC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRhc2tyZWxhdGVkLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0YXNrcmVsYXRlZC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHRhc2tyZWxhdGVkLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiB0YXNrLmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gUWFuZEFTZXQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJxYW5kYXNldC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icWFuZGFzZXQiIHN1YnN0aXR1dGlvbkdyb3VwPSJjb21wb3VuZC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmxvY2tpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InFhbmRhc2V0Lm1peCIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJxYW5kYWRpdiIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icWFuZGFlbnRyeSIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJxYW5kYXNldC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBxYW5kYXNldC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJxYW5kYXNldC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZGVmYXVsdGxhYmVsIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icWFuZGEiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibnVtYmVyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5vbmUiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InFhbmRhc2V0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBxYW5kYXNldC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHFhbmRhc2V0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icWFuZGFkaXYucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InFhbmRhZGl2Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImZvcm1hbG9iamVjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icWFuZGFzZXQubWl4Ii8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InFhbmRhZGl2Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJxYW5kYWVudHJ5Ii8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InFhbmRhZGl2LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHFhbmRhZGl2LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InFhbmRhZGl2LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icWFuZGFkaXYucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHFhbmRhZGl2LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcWFuZGFkaXYubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJxYW5kYWVudHJ5LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJxYW5kYWVudHJ5Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0icmV2aGlzdG9yeSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icXVlc3Rpb24iLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImFuc3dlciIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJxYW5kYWVudHJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHFhbmRhZW50cnkuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icWFuZGFlbnRyeS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InFhbmRhZW50cnkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHFhbmRhZW50cnkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBxYW5kYWVudHJ5Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icXVlc3Rpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InF1ZXN0aW9uIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJsYWJlbCIvPgogICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJxYW5kYXNldC5taXgiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icXVlc3Rpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcXVlc3Rpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icXVlc3Rpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJxdWVzdGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcXVlc3Rpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBxdWVzdGlvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFuc3dlci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYW5zd2VyIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJsYWJlbCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InFhbmRhc2V0Lm1peCIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icWFuZGFlbnRyeSIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhbnN3ZXIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYW5zd2VyLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFuc3dlci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFuc3dlci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYW5zd2VyLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYW5zd2VyLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGFiZWwucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImxhYmVsIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9IndvcmQuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbGFiZWwuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGFiZWwuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbGFiZWwuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBsYWJlbC5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgcWFuZGFzZXQuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSBQcm9jZWR1cmUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcm9jZWR1cmUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InByb2NlZHVyZSIgc3Vic3RpdHV0aW9uR3JvdXA9ImNvbXBvdW5kLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImZvcm1hbG9iamVjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InN0ZXAiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJvY2VkdXJlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHByb2NlZHVyZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcm9jZWR1cmUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcm9jZWR1cmUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHByb2NlZHVyZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHByb2NlZHVyZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN0ZXAucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InN0ZXAiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlIi8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbXBvbmVudC5taXgiLz4KICAgICAgICAgICAgPHhzOnNlcXVlbmNlIG1pbk9jY3Vycz0iMCI+CiAgICAgICAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic3Vic3RlcHMiLz4KICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic3RlcGFsdGVybmF0aXZlcyIvPgogICAgICAgICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbXBvbmVudC5taXgiLz4KICAgICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdWJzdGVwcyIvPgogICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic3RlcGFsdGVybmF0aXZlcyIvPgogICAgICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RlcC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzdGVwLmVsZW1lbnQgLS0+CiAgPCEtLSBQZXJmb3JtYW5jZTogV2hldGhlciB0aGUgU3RlcCBtdXN0IGJlIHBlcmZvcm1lZCAtLT4KICA8IS0tIG5vdCAjUkVRVUlSRUQhIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdGVwLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwZXJmb3JtYW5jZSIgZGVmYXVsdD0icmVxdWlyZWQiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvcHRpb25hbCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZXF1aXJlZCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RlcC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc3RlcC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHN0ZXAubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdWJzdGVwcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3Vic3RlcHMiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic3RlcCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdWJzdGVwcy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzdWJzdGVwcy5lbGVtZW50IC0tPgogIDwhLS0gUGVyZm9ybWFuY2U6IHdoZXRoZXIgZW50aXJlIHNldCBvZiBzdWJzdGVwcyBtdXN0IGJlIHBlcmZvcm1lZCAtLT4KICA8IS0tIG5vdCAjUkVRVUlSRUQhIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdWJzdGVwcy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icGVyZm9ybWFuY2UiIGRlZmF1bHQ9InJlcXVpcmVkIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3B0aW9uYWwiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVxdWlyZWQiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN1YnN0ZXBzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzdWJzdGVwcy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHN1YnN0ZXBzLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3RlcGFsdGVybmF0aXZlcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3RlcGFsdGVybmF0aXZlcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzdGVwIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0ZXBhbHRlcm5hdGl2ZXMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc3RlcGFsdGVybmF0aXZlcy5lbGVtZW50IC0tPgogIDwhLS0gUGVyZm9ybWFuY2U6IFdoZXRoZXIgKG9uZSBvZikgdGhlIGFsdGVybmF0aXZlcyBtdXN0IGJlIHBlcmZvcm1lZCAtLT4KICA8IS0tIG5vdCAjUkVRVUlSRUQhIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdGVwYWx0ZXJuYXRpdmVzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwZXJmb3JtYW5jZSIgZGVmYXVsdD0icmVxdWlyZWQiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvcHRpb25hbCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZXF1aXJlZCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RlcGFsdGVybmF0aXZlcy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc3RlcGFsdGVybmF0aXZlcy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHN0ZXBhbHRlcm5hdGl2ZXMubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIHByb2NlZHVyZS5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIFNpZGViYXIgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNpZGViYXJpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzaWRlYmFyaW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmZvLmNsYXNzIi8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNpZGViYXJpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNpZGViYXJpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNpZGViYXJpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2lkZWJhcmluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNpZGViYXJpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2lkZWJhcmluZm8ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzaWRlYmFyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzaWRlYmFyIiBzdWJzdGl0dXRpb25Hcm91cD0iY29tcG91bmQuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InNpZGViYXJpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzaWRlYmFyLm1peCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzaWRlYmFyLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNpZGViYXIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2lkZWJhci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNpZGViYXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNpZGViYXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzaWRlYmFyLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBzaWRlYmFyLmNvbnRlbnQubW9kZWwgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gUGFyYWdyYXBoLXJlbGF0ZWQgZWxlbWVudHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYWJzdHJhY3Qucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImFic3RyYWN0Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0aXRsZSIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWJzdHJhY3QuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYWJzdHJhY3QuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYWJzdHJhY3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhYnN0cmFjdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYWJzdHJhY3QuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhYnN0cmFjdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImF1dGhvcmJsdXJiLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhdXRob3JibHVyYiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImF1dGhvcmJsdXJiLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGF1dGhvcmJsdXJiLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImF1dGhvcmJsdXJiLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXV0aG9yYmx1cmIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGF1dGhvcmJsdXJiLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYXV0aG9yYmx1cmIubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwZXJzb25ibHVyYi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icGVyc29uYmx1cmIiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwZXJzb25ibHVyYi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwZXJzb25ibHVyYi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwZXJzb25ibHVyYi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBlcnNvbmJsdXJiLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwZXJzb25ibHVyYi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHBlcnNvbmJsdXJiLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmxvY2txdW90ZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYmxvY2txdW90ZSIgc3Vic3RpdHV0aW9uR3JvdXA9ImluZm9ybWFsLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYXR0cmlidXRpb24iLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJibG9ja3F1b3RlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJsb2NrcXVvdGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmxvY2txdW90ZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJsb2NrcXVvdGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJsb2NrcXVvdGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBibG9ja3F1b3RlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXR0cmlidXRpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImF0dHJpYnV0aW9uIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXR0cmlidXRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYXR0cmlidXRpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXR0cmlidXRpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhdHRyaWJ1dGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYXR0cmlidXRpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhdHRyaWJ1dGlvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJyaWRnZWhlYWQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImJyaWRnZWhlYWQiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idGl0bGUuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYnJpZGdlaGVhZC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBicmlkZ2VoZWFkLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgUmVuZGVyYXM6IEluZGljYXRlcyB0aGUgZm9ybWF0IGluIHdoaWNoIHRoZSBCcmlkZ2VIZWFkCiAgICBzaG91bGQgYXBwZWFyCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJyaWRnZWhlYWQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlbmRlcmFzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3RoZXIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDEiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDMiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDUiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJyaWRnZWhlYWQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJyaWRnZWhlYWQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBicmlkZ2VoZWFkLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVtYXJrLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZW1hcmsiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZW1hcmsuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVtYXJrLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlbWFyay5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlbWFyay5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVtYXJrLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVtYXJrLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZXBpZ3JhcGgucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImVwaWdyYXBoIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJhdHRyaWJ1dGlvbiIvPgogICAgICAgIDx4czpjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxpdGVyYWxsYXlvdXQiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZXBpZ3JhcGguYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZXBpZ3JhcGguZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZXBpZ3JhcGguYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlcGlncmFwaC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZXBpZ3JhcGguYXR0bGlzdCAtLT4KICA8IS0tIEF0dHJpYnV0aW9uIChkZWZpbmVkIGFib3ZlKSAtLT4KICA8IS0tIGVuZCBvZiBlcGlncmFwaC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZvb3Rub3RlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJmb290bm90ZSIgc3Vic3RpdHV0aW9uR3JvdXA9Imdlbi5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImZvb3Rub3RlLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmb290bm90ZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBmb290bm90ZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmb290bm90ZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZm9vdG5vdGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGZvb3Rub3RlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZm9vdG5vdGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJoaWdobGlnaHRzLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJoaWdobGlnaHRzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImhpZ2hsaWdodHMubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImhpZ2hsaWdodHMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaGlnaGxpZ2h0cy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJoaWdobGlnaHRzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaGlnaGxpZ2h0cy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaGlnaGxpZ2h0cy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGhpZ2hsaWdodHMubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmb3JtYWxwYXJhLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJmb3JtYWxwYXJhIiBzdWJzdGl0dXRpb25Hcm91cD0icGFyYS5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRpdGxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZvcm1hbHBhcmEuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZm9ybWFscGFyYS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmb3JtYWxwYXJhLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZm9ybWFscGFyYS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZm9ybWFscGFyYS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGZvcm1hbHBhcmEubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwYXJhLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJwYXJhIiBzdWJzdGl0dXRpb25Hcm91cD0icGFyYS5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJwYXJhLm1peCIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFyYS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwYXJhLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBhcmEuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYXJhLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwYXJhLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcGFyYS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNpbXBhcmEucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNpbXBhcmEiIHN1YnN0aXR1dGlvbkdyb3VwPSJwYXJhLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2ltcGFyYS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzaW1wYXJhLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNpbXBhcmEuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzaW1wYXJhLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzaW1wYXJhLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2ltcGFyYS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFkbW9uLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjYXV0aW9uIiBzdWJzdGl0dXRpb25Hcm91cD0iYWRtb24uY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlIi8+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImFkbW9uLm1peCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjYXV0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNhdXRpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2F1dGlvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFkbW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjYXV0aW9uLmF0dGxpc3QgLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW1wb3J0YW50IiBzdWJzdGl0dXRpb25Hcm91cD0iYWRtb24uY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlIi8+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImFkbW9uLm1peCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbXBvcnRhbnQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW1wb3J0YW50LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImltcG9ydGFudC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFkbW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpbXBvcnRhbnQuYXR0bGlzdCAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJub3RlIiBzdWJzdGl0dXRpb25Hcm91cD0iYWRtb24uY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlIi8+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImFkbW9uLm1peCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJub3RlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG5vdGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibm90ZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFkbW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBub3RlLmF0dGxpc3QgLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idGlwIiBzdWJzdGl0dXRpb25Hcm91cD0iYWRtb24uY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlIi8+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImFkbW9uLm1peCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0aXAuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdGlwLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRpcC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFkbW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0aXAuYXR0bGlzdCAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJ3YXJuaW5nIiBzdWJzdGl0dXRpb25Hcm91cD0iYWRtb24uY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlIi8+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImFkbW9uLm1peCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ3YXJuaW5nLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHdhcm5pbmcuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0id2FybmluZy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFkbW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB3YXJuaW5nLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYWRtb24ubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIExpc3RzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBHbG9zc0xpc3QgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJnbG9zc2xpc3Qucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Imdsb3NzbGlzdCIgc3Vic3RpdHV0aW9uR3JvdXA9Imxpc3QuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0iZm9ybWFsb2JqZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJnbG9zc2VudHJ5Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdsb3NzbGlzdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBnbG9zc2xpc3QuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ2xvc3NsaXN0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3NsaXN0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBnbG9zc2xpc3QuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBnbG9zc2xpc3QubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJnbG9zc2VudHJ5LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJnbG9zc2VudHJ5Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZ2xvc3N0ZXJtIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImFjcm9ueW0iLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYWJicmV2Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InJldmhpc3RvcnkiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJnbG9zc3NlZSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZ2xvc3NkZWYiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3NlbnRyeS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBnbG9zc2VudHJ5LmVsZW1lbnQgLS0+CiAgPCEtLQogICAgU29ydEFzOiBTdHJpbmcgYnkgd2hpY2ggdGhlIEdsb3NzRW50cnkgaXMgdG8gYmUgc29ydGVkCiAgICAoYWxwaGFiZXRpemVkKSBpbiBsaWV1IG9mIGl0cyBwcm9wZXIgY29udGVudAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJnbG9zc2VudHJ5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzb3J0YXMiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdsb3NzZW50cnkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGdsb3NzZW50cnkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBnbG9zc2VudHJ5Lm1vZHVsZSAtLT4KICA8IS0tIEdsb3NzVGVybSAoZGVmaW5lZCBpbiB0aGUgSW5saW5lcyBzZWN0aW9uLCBiZWxvdykgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3NzZGVmLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJnbG9zc2RlZiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZ2xvc3NkZWYubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJnbG9zc3NlZWFsc28iLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3NkZWYuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZ2xvc3NkZWYuZWxlbWVudCAtLT4KICA8IS0tIFN1YmplY3Q6IExpc3Qgb2Ygc3ViamVjdHM7IGtleXdvcmRzIGZvciB0aGUgZGVmaW5pdGlvbiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ2xvc3NkZWYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InN1YmplY3QiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdsb3NzZGVmLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBnbG9zc2RlZi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGdsb3NzZGVmLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ2xvc3NzZWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Imdsb3Nzc2VlIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3NzZWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZ2xvc3NzZWUuZWxlbWVudCAtLT4KICA8IS0tCiAgICBPdGhlclRlcm06IFJlZmVyZW5jZSB0byB0aGUgR2xvc3NFbnRyeSB3aG9zZSBHbG9zc1Rlcm0KICAgIHNob3VsZCBiZSBkaXNwbGF5ZWQgYXQgdGhlIHBvaW50IG9mIHRoZSBHbG9zc1NlZQogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJnbG9zc3NlZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib3RoZXJ0ZXJtIiB0eXBlPSJ4czpJRFJFRiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3NzZWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGdsb3Nzc2VlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZ2xvc3NzZWUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJnbG9zc3NlZWFsc28ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Imdsb3Nzc2VlYWxzbyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdsb3Nzc2VlYWxzby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBnbG9zc3NlZWFsc28uZWxlbWVudCAtLT4KICA8IS0tCiAgICBPdGhlclRlcm06IFJlZmVyZW5jZSB0byB0aGUgR2xvc3NFbnRyeSB3aG9zZSBHbG9zc1Rlcm0KICAgIHNob3VsZCBiZSBkaXNwbGF5ZWQgYXQgdGhlIHBvaW50IG9mIHRoZSBHbG9zc1NlZUFsc28KICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ2xvc3NzZWVhbHNvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvdGhlcnRlcm0iIHR5cGU9InhzOklEUkVGIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJnbG9zc3NlZWFsc28ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGdsb3Nzc2VlYWxzby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGdsb3Nzc2VlYWxzby5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgZ2xvc3NlbnRyeS5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIEl0ZW1pemVkTGlzdCBhbmQgT3JkZXJlZExpc3QgLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Iml0ZW1pemVkbGlzdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaXRlbWl6ZWRsaXN0IiBzdWJzdGl0dXRpb25Hcm91cD0ibGlzdC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmxvY2tpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Imxpc3RwcmVhbWJsZS5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJsaXN0aXRlbSIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpdGVtaXplZGxpc3QuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaXRlbWl6ZWRsaXN0LmVsZW1lbnQgLS0+CiAgPCEtLQogICAgU3BhY2luZzogV2hldGhlciB0aGUgdmVydGljYWwgc3BhY2UgaW4gdGhlIGxpc3Qgc2hvdWxkIGJlCiAgICBjb21wcmVzc2VkCiAgLS0+CiAgPCEtLQogICAgTWFyazogS2V5d29yZCwgZS5nLiwgYnVsbGV0LCBkYXNoLCBjaGVja2JveCwgbm9uZTsKICAgIGxpc3Qgb2Yga2V5d29yZHMgYW5kIGRlZmF1bHRzIGFyZSBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYwogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpdGVtaXplZGxpc3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNwYWNpbmciPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJub3JtYWwiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY29tcGFjdCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWFyay5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Iml0ZW1pemVkbGlzdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaXRlbWl6ZWRsaXN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaXRlbWl6ZWRsaXN0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib3JkZXJlZGxpc3Qucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im9yZGVyZWRsaXN0IiBzdWJzdGl0dXRpb25Hcm91cD0ibGlzdC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmxvY2tpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Imxpc3RwcmVhbWJsZS5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJsaXN0aXRlbSIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvcmRlcmVkbGlzdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBvcmRlcmVkbGlzdC5lbGVtZW50IC0tPgogIDwhLS0KICAgIE51bWVyYXRpb246IFN0eWxlIG9mIExpc3RJdGVtIG51bWJlcmVkOyBkZWZhdWx0IGlzIGV4cGVjdGVkCiAgICB0byBiZSBBcmFiaWMKICAtLT4KICA8IS0tCiAgICBJbmhlcml0TnVtOiBTcGVjaWZpZXMgZm9yIGEgbmVzdGVkIGxpc3QgdGhhdCB0aGUgbnVtYmVyaW5nCiAgICBvZiBMaXN0SXRlbXMgc2hvdWxkIGluY2x1ZGUgdGhlIG51bWJlciBvZiB0aGUgaXRlbQogICAgd2l0aGluIHdoaWNoIHRoZXkgYXJlIG5lc3RlZCAoZS5nLiwgMWEgYW5kIDFiIHdpdGhpbiAxLAogICAgcmF0aGVyIHRoYW4gYSBhbmQgYikKICAtLT4KICA8IS0tCiAgICBDb250aW51YXRpb246IFdoZXJlIGxpc3QgbnVtYmVyaW5nIGJlZ2lucyBhZnJlc2ggKFJlc3RhcnRzLAogICAgdGhlIGRlZmF1bHQpIG9yIGNvbnRpbnVlcyB0aGF0IG9mIHRoZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcKICAgIGxpc3QgKENvbnRpbnVlcykKICAtLT4KICA8IS0tCiAgICBTcGFjaW5nOiBXaGV0aGVyIHRoZSB2ZXJ0aWNhbCBzcGFjZSBpbiB0aGUgbGlzdCBzaG91bGQgYmUKICAgIGNvbXByZXNzZWQKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib3JkZXJlZGxpc3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im51bWVyYXRpb24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJhcmFiaWMiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idXBwZXJhbHBoYSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsb3dlcmFscGhhIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InVwcGVycm9tYW4iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibG93ZXJyb21hbiIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpbmhlcml0bnVtIiBkZWZhdWx0PSJpZ25vcmUiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJpbmhlcml0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imlnbm9yZSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb250aW51YXRpb24iIGRlZmF1bHQ9InJlc3RhcnRzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY29udGludWVzIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlc3RhcnRzIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNwYWNpbmciPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJub3JtYWwiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY29tcGFjdCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib3JkZXJlZGxpc3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG9yZGVyZWRsaXN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygb3JkZXJlZGxpc3QubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsaXN0aXRlbS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibGlzdGl0ZW0iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaXN0aXRlbS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBsaXN0aXRlbS5lbGVtZW50IC0tPgogIDwhLS0KICAgIE92ZXJyaWRlOiBJbmRpY2F0ZXMgdGhlIG1hcmsgdG8gYmUgdXNlZCBmb3IgdGhpcyBMaXN0SXRlbQogICAgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBtYXJrIG9yIHRoZSBtYXJrIHNwZWNpZmllZCBieQogICAgdGhlIE1hcmsgYXR0cmlidXRlIG9uIHRoZSBlbmNsb3NpbmcgSXRlbWl6ZWRMaXN0CiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imxpc3RpdGVtLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvdmVycmlkZSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlzdGl0ZW0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGxpc3RpdGVtLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbGlzdGl0ZW0ubW9kdWxlIC0tPgogIDwhLS0gU2VnbWVudGVkTGlzdCAuLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VnbWVudGVkbGlzdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VnbWVudGVkbGlzdCIgc3Vic3RpdHV0aW9uR3JvdXA9Imxpc3QuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNlZ3RpdGxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2VnbGlzdGl0ZW0iLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VnbWVudGVkbGlzdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWdtZW50ZWRsaXN0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlZ21lbnRlZGxpc3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWdtZW50ZWRsaXN0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWdtZW50ZWRsaXN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2VnbWVudGVkbGlzdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlZ3RpdGxlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWd0aXRsZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0aXRsZS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWd0aXRsZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWd0aXRsZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWd0aXRsZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlZ3RpdGxlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWd0aXRsZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNlZ3RpdGxlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VnbGlzdGl0ZW0ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNlZ2xpc3RpdGVtIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNlZyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWdsaXN0aXRlbS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWdsaXN0aXRlbS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWdsaXN0aXRlbS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlZ2xpc3RpdGVtLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWdsaXN0aXRlbS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNlZ2xpc3RpdGVtLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VnLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWciPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWcuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VnLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlZy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlZy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VnLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2VnLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBzZWdtZW50ZWRsaXN0LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gU2ltcGxlTGlzdCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2ltcGxlbGlzdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2ltcGxlbGlzdCIgc3Vic3RpdHV0aW9uR3JvdXA9Imxpc3QuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibWVtYmVyIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNpbXBsZWxpc3QuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2ltcGxlbGlzdC5lbGVtZW50IC0tPgogIDwhLS0gQ29sdW1uczogVGhlIG51bWJlciBvZiBjb2x1bW5zIHRoZSBhcnJheSBzaG91bGQgY29udGFpbiAtLT4KICA8IS0tCiAgICBUeXBlOiBIb3cgdGhlIE1lbWJlcnMgb2YgdGhlIFNpbXBsZUxpc3Qgc2hvdWxkIGJlCiAgICBmb3JtYXR0ZWQ6IElubGluZSAobWVtYmVycyBzZXBhcmF0ZWQgd2l0aCBjb21tYXMgZXRjLgogICAgaW5saW5lKSwgVmVydCAodG9wIHRvIGJvdHRvbSBpbiBuIENvbHVtbnMpLCBvciBIb3JpeiAoaW4KICAgIHRoZSBkaXJlY3Rpb24gb2YgdGV4dCBmbG93KSBpbiBuIENvbHVtbnMuICBJZiBDb2x1bW4KICAgIGlzIDEgb3IgaW1wbGllZCwgVHlwZT1WZXJ0IGFuZCBUeXBlPUhvcml6IGdpdmUgdGhlIHNhbWUKICAgIHJlc3VsdHMuCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNpbXBsZWxpc3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbHVtbnMiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idHlwZSIgZGVmYXVsdD0idmVydCI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImlubGluZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ2ZXJ0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imhvcml6Ii8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzaW1wbGVsaXN0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzaW1wbGVsaXN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2ltcGxlbGlzdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1lbWJlci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibWVtYmVyIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWVtYmVyLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1lbWJlci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtZW1iZXIuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtZW1iZXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1lbWJlci5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1lbWJlci5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2Ygc2ltcGxlbGlzdC5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIFZhcmlhYmxlTGlzdCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InZhcmlhYmxlbGlzdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idmFyaWFibGVsaXN0IiBzdWJzdGl0dXRpb25Hcm91cD0ibGlzdC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmxvY2tpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Imxpc3RwcmVhbWJsZS5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ2YXJsaXN0ZW50cnkiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idmFyaWFibGVsaXN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHZhcmlhYmxlbGlzdC5lbGVtZW50IC0tPgogIDwhLS0KICAgIFRlcm1MZW5ndGg6IExlbmd0aCBiZXlvbmQgd2hpY2ggdGhlIHByZXNlbnRhdGlvbiBlbmdpbmUKICAgIG1heSBjb25zaWRlciB0aGUgVGVybSB0b28gbG9uZyBhbmQgc2VsZWN0IGFuIGFsdGVybmF0ZQogICAgcHJlc2VudGF0aW9uIG9mIHRoZSBUZXJtIGFuZCwgb3IsIGl0cyBhc3NvY2lhdGVkIExpc3RJdGVtLgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ2YXJpYWJsZWxpc3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InRlcm1sZW5ndGgiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InZhcmlhYmxlbGlzdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdmFyaWFibGVsaXN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdmFyaWFibGVsaXN0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idmFybGlzdGVudHJ5LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ2YXJsaXN0ZW50cnkiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idGVybSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGlzdGl0ZW0iLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idmFybGlzdGVudHJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHZhcmxpc3RlbnRyeS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ2YXJsaXN0ZW50cnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2YXJsaXN0ZW50cnkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHZhcmxpc3RlbnRyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHZhcmxpc3RlbnRyeS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRlcm0ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRlcm0iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0ZXJtLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRlcm0uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGVybS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRlcm0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRlcm0uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0ZXJtLm1vZHVsZSAtLT4KICA8IS0tIExpc3RJdGVtIChkZWZpbmVkIGFib3ZlKSAtLT4KICA8IS0tIGVuZCBvZiB2YXJpYWJsZWxpc3QuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSBDYWxsb3V0TGlzdCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjYWxsb3V0bGlzdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY2FsbG91dGxpc3QiIHN1YnN0aXR1dGlvbkdyb3VwPSJsaXN0LmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0iZm9ybWFsb2JqZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjYWxsb3V0Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNhbGxvdXRsaXN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNhbGxvdXRsaXN0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNhbGxvdXRsaXN0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2FsbG91dGxpc3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNhbGxvdXRsaXN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY2FsbG91dGxpc3QubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjYWxsb3V0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjYWxsb3V0Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbXBvbmVudC5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2FsbG91dC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjYWxsb3V0LmVsZW1lbnQgLS0+CiAgPCEtLQogICAgQXJlYVJlZnM6IElEcyBvZiBvbmUgb3IgbW9yZSBBcmVhcyBvciBBcmVhU2V0cyBkZXNjcmliZWQKICAgIGJ5IHRoaXMgQ2FsbG91dAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjYWxsb3V0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhcmVhcmVmcyIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6SURSRUZTIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjYWxsb3V0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjYWxsb3V0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY2FsbG91dC5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgY2FsbG91dGxpc3QuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gT2JqZWN0cyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEV4YW1wbGVzIGV0Yy4gLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImV4YW1wbGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImV4YW1wbGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJmb3JtYWwuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImZvcm1hbG9iamVjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImV4YW1wbGUubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImV4YW1wbGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZXhhbXBsZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJleGFtcGxlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmbG9hdHN0eWxlIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9IndpZHRoLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZXhhbXBsZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZXhhbXBsZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGV4YW1wbGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmZvcm1hbGV4YW1wbGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImluZm9ybWFsZXhhbXBsZSIgc3Vic3RpdHV0aW9uR3JvdXA9ImluZm9ybWFsLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZXhhbXBsZS5taXgiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5mb3JtYWxleGFtcGxlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGluZm9ybWFsZXhhbXBsZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmZvcm1hbGV4YW1wbGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZsb2F0c3R5bGUiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9IndpZHRoLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5mb3JtYWxleGFtcGxlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpbmZvcm1hbGV4YW1wbGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBpbmZvcm1hbGV4YW1wbGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcm9ncmFtbGlzdGluZ2NvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJwcm9ncmFtbGlzdGluZ2NvIiBzdWJzdGl0dXRpb25Hcm91cD0ibGluZXNwZWNpZmljLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYXJlYXNwZWMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InByb2dyYW1saXN0aW5nIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjYWxsb3V0bGlzdCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcm9ncmFtbGlzdGluZ2NvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHByb2dyYW1saXN0aW5nY28uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJvZ3JhbWxpc3Rpbmdjby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByb2dyYW1saXN0aW5nY28ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHByb2dyYW1saXN0aW5nY28uYXR0bGlzdCAtLT4KICA8IS0tIENhbGxvdXRMaXN0IChkZWZpbmVkIGFib3ZlIGluIExpc3RzKSAtLT4KICA8IS0tIGVuZCBvZiBpbmZvcm1hbGV4YW1wbGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcmVhc3BlYy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXJlYXNwZWMiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFyZWEiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFyZWFzZXQiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFyZWFzcGVjLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFyZWFzcGVjLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgVW5pdHM6IGdsb2JhbCB1bml0IG9mIG1lYXN1cmUgaW4gd2hpY2ggY29vcmRpbmF0ZXMgaW4KICAgIHRoaXMgc3BlYyBhcmUgZXhwcmVzc2VkOgogICAgCiAgICAtIENBTFNQYWlyICJ4MSx5MSB4Mix5MiI6IGxvd2VyLWxlZnQgYW5kIHVwcGVyLXJpZ2h0CiAgICBjb29yZGluYXRlcyBpbiBhIHJlY3RhbmdsZSBkZXNjcmliaW5nIHJlcHJvIGFyZWEgaW4gd2hpY2gKICAgIGdyYXBoaWMgaXMgcGxhY2VkLCB3aGVyZSBYIGFuZCBZIGRpbWVuc2lvbnMgYXJlIGVhY2ggc29tZQogICAgbnVtYmVyIDAuLjEwMDAwICh0YWtlbiBmcm9tIENBTFMgZ3JhcGhpYyBhdHRyaWJ1dGVzKQogICAgCiAgICAtIExpbmVDb2x1bW4gImxpbmUgY29sdW1uIjogbGluZSBudW1iZXIgYW5kIGNvbHVtbiBudW1iZXIKICAgIGF0IHdoaWNoIHRvIHN0YXJ0IGNhbGxvdXQgdGV4dCBpbiAibGluZXNwZWNpZmljIiBjb250ZW50CiAgICAKICAgIC0gTGluZVJhbmdlICJzdGFydGxpbmUgZW5kbGluZSI6IHdob2xlIGxpbmVzIGZyb20gc3RhcnRsaW5lCiAgICB0byBlbmRsaW5lIGluICJsaW5lc3BlY2lmaWMiIGNvbnRlbnQKICAgIAogICAgLSBMaW5lQ29sdW1uUGFpciAibGluZTEgY29sMSBsaW5lMiBjb2wyIjogc3RhcnRpbmcgYW5kIGVuZGluZwogICAgcG9pbnRzIG9mIGFyZWEgaW4gImxpbmVzcGVjaWZpYyIgY29udGVudCB0aGF0IHN0YXJ0cyBhdAogICAgZmlyc3QgcG9zaXRpb24gYW5kIGVuZHMgYXQgc2Vjb25kIHBvc2l0aW9uIChpbmNsdWRpbmcgdGhlCiAgICBiZWdpbm5pbmdzIG9mIGFueSBpbnRlcnZlbmluZyBsaW5lcykKICAgIAogICAgLSBPdGhlcjogZGlyZWN0aXZlIHRvIGxvb2sgYXQgdmFsdWUgb2YgT3RoZXJVbml0cyBhdHRyaWJ1dGUKICAgIHRvIGdldCBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBrZXl3b3JkCiAgICAKICAgIFRoZSBkZWZhdWx0IGlzIGltcGxlbWVudGF0aW9uLXNwZWNpZmljOyB1c3VhbGx5IGRlcGVuZGVudCBvbgogICAgdGhlIHBhcmVudCBlbGVtZW50IChHcmFwaGljQ08gZ2V0cyBDQUxTUGFpciwgUHJvZ3JhbUxpc3RpbmdDTwogICAgYW5kIFNjcmVlbkNPIGdldCBMaW5lQ29sdW1uKQogIC0tPgogIDwhLS0gT3RoZXJVbml0czogVXNlci1kZWZpbmVkIHVuaXRzIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcmVhc3BlYy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idW5pdHMiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjYWxzcGFpciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsaW5lY29sdW1uIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxpbmVyYW5nZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsaW5lY29sdW1ucGFpciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvdGhlciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvdGhlcnVuaXRzIiB0eXBlPSJ4czpOTVRPS0VOIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhcmVhc3BlYy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYXJlYXNwZWMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhcmVhc3BlYy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFyZWEucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImFyZWEiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhcmVhLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFyZWEuZWxlbWVudCAtLT4KICA8IS0tIGJ1ZyBudW1iZXIvc3ltYm9sIG92ZXJyaWRlIG9yIGluaXRpYWxpemF0aW9uIC0tPgogIDwhLS0gdG8gYW55IHJlbGF0ZWQgaW5mb3JtYXRpb24gLS0+CiAgPCEtLQogICAgVW5pdHM6IHVuaXQgb2YgbWVhc3VyZSBpbiB3aGljaCBjb29yZGluYXRlcyBpbiB0aGlzCiAgICBhcmVhIGFyZSBleHByZXNzZWQ7IGluaGVyaXRzIGZyb20gQXJlYVNldCBhbmQgQXJlYVNwZWMKICAtLT4KICA8IS0tIE90aGVyVW5pdHM6IFVzZXItZGVmaW5lZCB1bml0cyAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXJlYS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlua2VuZHMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InVuaXRzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2Fsc3BhaXIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGluZWNvbHVtbiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsaW5lcmFuZ2UiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGluZWNvbHVtbnBhaXIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3RoZXIiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib3RoZXJ1bml0cyIgdHlwZT0ieHM6Tk1UT0tFTiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb29yZHMiIHVzZT0icmVxdWlyZWQiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImlkcmVxLmNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFyZWEucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGFyZWEuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhcmVhLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXJlYXNldC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXJlYXNldCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJhcmVhIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFyZWFzZXQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYXJlYXNldC5lbGVtZW50IC0tPgogIDwhLS0gYnVnIG51bWJlci9zeW1ib2wgb3ZlcnJpZGUgb3IgaW5pdGlhbGl6YXRpb24gLS0+CiAgPCEtLQogICAgVW5pdHM6IHVuaXQgb2YgbWVhc3VyZSBpbiB3aGljaCBjb29yZGluYXRlcyBpbiB0aGlzCiAgICBhcmVhIGFyZSBleHByZXNzZWQ7IGluaGVyaXRzIGZyb20gQXJlYVNwZWMKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXJlYXNldC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1bml0cyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNhbHNwYWlyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxpbmVjb2x1bW4iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGluZXJhbmdlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxpbmVjb2x1bW5wYWlyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im90aGVyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im90aGVydW5pdHMiIHR5cGU9InhzOk5NVE9LRU4iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29vcmRzIiB1c2U9InJlcXVpcmVkIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpZHJlcS5jb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhcmVhc2V0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhcmVhc2V0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYXJlYXNldC5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgYXJlYXNwZWMuY29udGVudC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByb2dyYW1saXN0aW5nLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJwcm9ncmFtbGlzdGluZyIgc3Vic3RpdHV0aW9uR3JvdXA9ImxpbmVzcGVjaWZpYy5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb3JlZiIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZWFubm90YXRpb24iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRleHRvYmplY3QiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByb2dyYW1saXN0aW5nLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHByb2dyYW1saXN0aW5nLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByb2dyYW1saXN0aW5nLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0id2lkdGguYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5lc3BlY2lmaWMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcm9ncmFtbGlzdGluZy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcHJvZ3JhbWxpc3RpbmcuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwcm9ncmFtbGlzdGluZy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxpdGVyYWxsYXlvdXQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImxpdGVyYWxsYXlvdXQiIHN1YnN0aXR1dGlvbkdyb3VwPSJsaW5lc3BlY2lmaWMuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjbyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY29yZWYiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRleHRvYmplY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVhbm5vdGF0aW9uIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaXRlcmFsbGF5b3V0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGxpdGVyYWxsYXlvdXQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGl0ZXJhbGxheW91dC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9IndpZHRoLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGluZXNwZWNpZmljLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgZGVmYXVsdD0ibm9ybWFsIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibW9ub3NwYWNlZCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJub3JtYWwiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpdGVyYWxsYXlvdXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGxpdGVyYWxsYXlvdXQuYXR0bGlzdCAtLT4KICA8IS0tIExpbmVBbm5vdGF0aW9uIChkZWZpbmVkIGluIHRoZSBJbmxpbmVzIHNlY3Rpb24sIGJlbG93KSAtLT4KICA8IS0tIGVuZCBvZiBsaXRlcmFsbGF5b3V0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2NyZWVuY28ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNjcmVlbmNvIiBzdWJzdGl0dXRpb25Hcm91cD0ibGluZXNwZWNpZmljLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYXJlYXNwZWMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InNjcmVlbiIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY2FsbG91dGxpc3QiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2NyZWVuY28uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2NyZWVuY28uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2NyZWVuY28uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzY3JlZW5jby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2NyZWVuY28uYXR0bGlzdCAtLT4KICA8IS0tIEFyZWFTcGVjIChkZWZpbmVkIGFib3ZlKSAtLT4KICA8IS0tIENhbGxvdXRMaXN0IChkZWZpbmVkIGFib3ZlIGluIExpc3RzKSAtLT4KICA8IS0tIGVuZCBvZiBzY3JlZW5jby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNjcmVlbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2NyZWVuIiBzdWJzdGl0dXRpb25Hcm91cD0ibGluZXNwZWNpZmljLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY28iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvcmVmIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0ZXh0b2JqZWN0Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lYW5ub3RhdGlvbiIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2NyZWVuLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNjcmVlbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzY3JlZW4uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ3aWR0aC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmVzcGVjaWZpYy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNjcmVlbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2NyZWVuLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2NyZWVuLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2NyZWVuc2hvdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2NyZWVuc2hvdCIgc3Vic3RpdHV0aW9uR3JvdXA9ImxpbmVzcGVjaWZpYy5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ic2NyZWVuaW5mbyIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImdyYXBoaWMiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iZ3JhcGhpY2NvIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im1lZGlhb2JqZWN0Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im1lZGlhb2JqZWN0Y28iLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2NyZWVuc2hvdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzY3JlZW5zaG90LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNjcmVlbnNob3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzY3JlZW5zaG90LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzY3JlZW5zaG90LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2NyZWVuc2hvdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNjcmVlbmluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNjcmVlbmluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzY3JlZW5pbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNjcmVlbmluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2NyZWVuaW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNjcmVlbmluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNjcmVlbmluZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzY3JlZW5pbmZvLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBzY3JlZW5zaG90LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gRmlndXJlcyBldGMuIC4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZmlndXJlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJmaWd1cmUiIHN1YnN0aXR1dGlvbkdyb3VwPSJmb3JtYWwuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImZvcm1hbG9iamVjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6Z3JvdXAgcmVmPSJmaWd1cmUubWl4Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmsuY2hhci5jbGFzcyIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmaWd1cmUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZmlndXJlLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgRmxvYXQ6IFdoZXRoZXIgdGhlIEZpZ3VyZSBpcyBzdXBwb3NlZCB0byBiZSByZW5kZXJlZAogICAgd2hlcmUgY29udmVuaWVudCAoeWVzICgxKSB2YWx1ZSkgb3IgYXQgdGhlIHBsYWNlIGl0IG9jY3VycwogICAgaW4gdGhlIHRleHQgKG5vICgwKSB2YWx1ZSwgdGhlIGRlZmF1bHQpCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZpZ3VyZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZmxvYXQiIGRlZmF1bHQ9IjAiIHR5cGU9Inllc29ybm8uYXR0dmFscyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmbG9hdHN0eWxlIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InBnd2lkZSIgdHlwZT0ieWVzb3Juby5hdHR2YWxzIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZpZ3VyZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZmlndXJlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZmlndXJlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5mb3JtYWxmaWd1cmUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImluZm9ybWFsZmlndXJlIiBzdWJzdGl0dXRpb25Hcm91cD0iaW5mb3JtYWwuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czpjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmdyb3VwIHJlZj0iZmlndXJlLm1peCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rLmNoYXIuY2xhc3MiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5mb3JtYWxmaWd1cmUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW5mb3JtYWxmaWd1cmUuZWxlbWVudCAtLT4KICA8IS0tCiAgICBGbG9hdDogV2hldGhlciB0aGUgRmlndXJlIGlzIHN1cHBvc2VkIHRvIGJlIHJlbmRlcmVkCiAgICB3aGVyZSBjb252ZW5pZW50ICh5ZXMgKDEpIHZhbHVlKSBvciBhdCB0aGUgcGxhY2UgaXQgb2NjdXJzCiAgICBpbiB0aGUgdGV4dCAobm8gKDApIHZhbHVlLCB0aGUgZGVmYXVsdCkKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5mb3JtYWxmaWd1cmUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZsb2F0IiBkZWZhdWx0PSIwIiB0eXBlPSJ5ZXNvcm5vLmF0dHZhbHMiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZmxvYXRzdHlsZSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwZ3dpZGUiIHR5cGU9Inllc29ybm8uYXR0dmFscyIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmZvcm1hbGZpZ3VyZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaW5mb3JtYWxmaWd1cmUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBpbmZvcm1hbGZpZ3VyZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImdyYXBoaWNjby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZ3JhcGhpY2NvIiBzdWJzdGl0dXRpb25Hcm91cD0iaW5mb3JtYWwuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcmVhc3BlYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZ3JhcGhpYyIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY2FsbG91dGxpc3QiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ3JhcGhpY2NvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGdyYXBoaWNjby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJncmFwaGljY28uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJncmFwaGljY28ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGdyYXBoaWNjby5hdHRsaXN0IC0tPgogIDwhLS0gQXJlYVNwZWMgKGRlZmluZWQgYWJvdmUgaW4gRXhhbXBsZXMpIC0tPgogIDwhLS0gQ2FsbG91dExpc3QgKGRlZmluZWQgYWJvdmUgaW4gTGlzdHMpIC0tPgogIDwhLS0gZW5kIG9mIGdyYXBoaWNjby5tb2R1bGUgLS0+CiAgPCEtLQogICAgR3JhcGhpY2FsIGRhdGEgY2FuIGJlIHRoZSBjb250ZW50IG9mIEdyYXBoaWMsIG9yIHlvdSBjYW4gcmVmZXJlbmNlCiAgICBhbiBleHRlcm5hbCBmaWxlIGVpdGhlciBhcyBhbiBlbnRpdHkgKEVudGl0cmVmKSBvciBhIGZpbGVuYW1lCiAgICAoRmlsZXJlZikuCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImdyYXBoaWMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImdyYXBoaWMiIHN1YnN0aXR1dGlvbkdyb3VwPSJpbmZvcm1hbC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImdyYXBoaWMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZ3JhcGhpYy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJncmFwaGljLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ3JhcGhpY3MuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJncmFwaGljLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBncmFwaGljLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZ3JhcGhpYy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImlubGluZWdyYXBoaWMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImlubGluZWdyYXBoaWMiIHN1YnN0aXR1dGlvbkdyb3VwPSJpbmxpbmVvYmouY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImlubGluZWdyYXBoaWMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW5saW5lZ3JhcGhpYy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmxpbmVncmFwaGljLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ3JhcGhpY3MuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmxpbmVncmFwaGljLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpbmxpbmVncmFwaGljLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW5saW5lZ3JhcGhpYy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1lZGlhb2JqZWN0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtZWRpYW9iamVjdCIgc3Vic3RpdHV0aW9uR3JvdXA9ImluZm9ybWFsLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJvYmplY3RpbmZvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibWVkaWFvYmplY3QubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImNhcHRpb24iLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWVkaWFvYmplY3QuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbWVkaWFvYmplY3QuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibWVkaWFvYmplY3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtZWRpYW9iamVjdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbWVkaWFvYmplY3QuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtZWRpYW9iamVjdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImlubGluZW1lZGlhb2JqZWN0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbmxpbmVtZWRpYW9iamVjdCIgc3Vic3RpdHV0aW9uR3JvdXA9ImlubGluZW9iai5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJvYmplY3RpbmZvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibWVkaWFvYmplY3QubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImlubGluZW1lZGlhb2JqZWN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGlubGluZW1lZGlhb2JqZWN0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImlubGluZW1lZGlhb2JqZWN0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5saW5lbWVkaWFvYmplY3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGlubGluZW1lZGlhb2JqZWN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW5saW5lbWVkaWFvYmplY3QubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ2aWRlb29iamVjdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idmlkZW9vYmplY3QiIHN1YnN0aXR1dGlvbkdyb3VwPSJtZWRpYW9iamVjdC5taXgiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Im9iamVjdGluZm8iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InZpZGVvZGF0YSIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2aWRlb29iamVjdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB2aWRlb29iamVjdC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ2aWRlb29iamVjdC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InZpZGVvb2JqZWN0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB2aWRlb29iamVjdC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHZpZGVvb2JqZWN0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXVkaW9vYmplY3Qucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImF1ZGlvb2JqZWN0IiBzdWJzdGl0dXRpb25Hcm91cD0ibWVkaWFvYmplY3QubWl4Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJvYmplY3RpbmZvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhdWRpb2RhdGEiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXVkaW9vYmplY3QuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYXVkaW9vYmplY3QuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXVkaW9vYmplY3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhdWRpb29iamVjdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYXVkaW9vYmplY3QuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhdWRpb29iamVjdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImltYWdlb2JqZWN0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbWFnZW9iamVjdCIgc3Vic3RpdHV0aW9uR3JvdXA9Im1lZGlhb2JqZWN0Lm1peCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ib2JqZWN0aW5mbyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW1hZ2VkYXRhIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImltYWdlb2JqZWN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGltYWdlb2JqZWN0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImltYWdlb2JqZWN0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW1hZ2VvYmplY3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGltYWdlb2JqZWN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW1hZ2VvYmplY3QubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0ZXh0b2JqZWN0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0ZXh0b2JqZWN0IiBzdWJzdGl0dXRpb25Hcm91cD0ibWVkaWFvYmplY3QubWl4Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJvYmplY3RpbmZvIi8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0icGhyYXNlIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRleHRkYXRhIi8+CiAgICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idGV4dG9iamVjdC5taXgiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGV4dG9iamVjdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0ZXh0b2JqZWN0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRleHRvYmplY3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0ZXh0b2JqZWN0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0ZXh0b2JqZWN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdGV4dG9iamVjdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9iamVjdGluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im9iamVjdGluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvYmplY3RpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG9iamVjdGluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib2JqZWN0aW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9iamVjdGluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG9iamVjdGluZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBvYmplY3RpbmZvLm1vZHVsZSAtLT4KICA8IS0tCiAgICBFbnRpdHlSZWY6IE5hbWUgb2YgYW4gZXh0ZXJuYWwgZW50aXR5IGNvbnRhaW5pbmcgdGhlIGNvbnRlbnQKICAgIG9mIHRoZSBvYmplY3QgZGF0YQogIC0tPgogIDwhLS0KICAgIEZpbGVSZWY6IEZpbGVuYW1lLCBxdWFsaWZpZWQgYnkgYSBwYXRobmFtZSBpZiBkZXNpcmVkLAogICAgZGVzaWduYXRpbmcgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgY29udGVudCBvZiB0aGUgb2JqZWN0IGRhdGEKICAtLT4KICA8IS0tIEZvcm1hdDogTm90YXRpb24gb2YgdGhlIGVsZW1lbnQgY29udGVudCwgaWYgYW55IC0tPgogIDwhLS0gU3JjQ3JlZGl0OiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgc291cmNlIG9mIHRoZSBpbWFnZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib2JqZWN0ZGF0YS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJlbnRpdHlyZWYiIHR5cGU9InhzOkVOVElUWSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmaWxlcmVmIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZvcm1hdCIgdHlwZT0ibm90YXRpb24uY2xhc3MiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3JjY3JlZGl0Ii8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idmlkZW9kYXRhLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ2aWRlb2RhdGEiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2aWRlb2RhdGEuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdmlkZW9kYXRhLmVsZW1lbnQgLS0+CiAgPCEtLSBXaWR0aDogU2FtZSBhcyBDQUxTIHJlcHJvd2lkIChkZXNpcmVkIHdpZHRoKSAtLT4KICA8IS0tIERlcHRoOiBTYW1lIGFzIENBTFMgcmVwcm9kZXAgKGRlc2lyZWQgZGVwdGgpIC0tPgogIDwhLS0KICAgIEFsaWduOiBTYW1lIGFzIENBTFMgaHBsYWNlIHdpdGggJ25vbmUnIHJlbW92ZWQ7ICNJTVBMSUVEIG1lYW5zCiAgICBhcHBsaWNhdGlvbi1zcGVjaWZpYwogIC0tPgogIDwhLS0gU2NhbGU6IENvbmZsYXRpb24gb2YgQ0FMUyBoc2NhbGUgYW5kIHZzY2FsZSAtLT4KICA8IS0tIFNjYWxlZml0OiBTYW1lIGFzIENBTFMgc2NhbGVmaXQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InZpZGVvZGF0YS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0id2lkdGgiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29udGVudHdpZHRoIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImRlcHRoIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbnRlbnRkZXB0aCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxlZnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmlnaHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2VudGVyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbGlnbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRvcCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJtaWRkbGUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYm90dG9tIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNjYWxlIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNjYWxlZml0IiB0eXBlPSJ5ZXNvcm5vLmF0dHZhbHMiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9iamVjdGRhdGEuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2aWRlb2RhdGEucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHZpZGVvZGF0YS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHZpZGVvZGF0YS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImF1ZGlvZGF0YS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXVkaW9kYXRhIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXVkaW9kYXRhLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGF1ZGlvZGF0YS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhdWRpb2RhdGEuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvYmplY3RkYXRhLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXVkaW9kYXRhLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhdWRpb2RhdGEuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhdWRpb2RhdGEubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbWFnZWRhdGEucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImltYWdlZGF0YSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImltYWdlZGF0YS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBpbWFnZWRhdGEuZWxlbWVudCAtLT4KICA8IS0tIFdpZHRoOiBTYW1lIGFzIENBTFMgcmVwcm93aWQgKGRlc2lyZWQgd2lkdGgpIC0tPgogIDwhLS0gRGVwdGg6IFNhbWUgYXMgQ0FMUyByZXByb2RlcCAoZGVzaXJlZCBkZXB0aCkgLS0+CiAgPCEtLQogICAgQWxpZ246IFNhbWUgYXMgQ0FMUyBocGxhY2Ugd2l0aCAnbm9uZScgcmVtb3ZlZDsgI0lNUExJRUQgbWVhbnMKICAgIGFwcGxpY2F0aW9uLXNwZWNpZmljCiAgLS0+CiAgPCEtLSBTY2FsZTogQ29uZmxhdGlvbiBvZiBDQUxTIGhzY2FsZSBhbmQgdnNjYWxlIC0tPgogIDwhLS0gU2NhbGVmaXQ6IFNhbWUgYXMgQ0FMUyBzY2FsZWZpdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW1hZ2VkYXRhLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ3aWR0aCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb250ZW50d2lkdGgiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZGVwdGgiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29udGVudGRlcHRoIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGVmdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyaWdodCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjZW50ZXIiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idmFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idG9wIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im1pZGRsZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJib3R0b20iLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2NhbGUiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2NhbGVmaXQiIHR5cGU9Inllc29ybm8uYXR0dmFscyIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib2JqZWN0ZGF0YS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImltYWdlZGF0YS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaW1hZ2VkYXRhLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW1hZ2VkYXRhLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGV4dGRhdGEucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRleHRkYXRhIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGV4dGRhdGEuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdGV4dGRhdGEuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGV4dGRhdGEuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImVuY29kaW5nIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvYmplY3RkYXRhLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGV4dGRhdGEucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRleHRkYXRhLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdGV4dGRhdGEubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtZWRpYW9iamVjdGNvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtZWRpYW9iamVjdGNvIiBzdWJzdGl0dXRpb25Hcm91cD0iaW5mb3JtYWwuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Im9iamVjdGluZm8iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImltYWdlb2JqZWN0Y28iLz4KICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbWFnZW9iamVjdGNvIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRleHRvYmplY3QiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWVkaWFvYmplY3Rjby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtZWRpYW9iamVjdGNvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1lZGlhb2JqZWN0Y28uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtZWRpYW9iamVjdGNvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtZWRpYW9iamVjdGNvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbWVkaWFvYmplY3Rjby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImltYWdlb2JqZWN0Y28ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImltYWdlb2JqZWN0Y28iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcmVhc3BlYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW1hZ2VvYmplY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNhbGxvdXRsaXN0Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImltYWdlb2JqZWN0Y28uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW1hZ2VvYmplY3Rjby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbWFnZW9iamVjdGNvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW1hZ2VvYmplY3Rjby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaW1hZ2VvYmplY3Rjby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGltYWdlb2JqZWN0Y28ubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIG1lZGlhb2JqZWN0LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gRXF1YXRpb25zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIFRoaXMgUEUgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIHJlcGxhY2luZyBlcXVhdGlvbiBjb250ZW50LCAtLT4KICA8IS0tIHBlcmhhcHMgYWRkaW5nIGEgbmV3IG9yIGRpZmZlcmVudCBtb2RlbCAoZS5nLiwgTWF0aE1MKSAtLT4KICA8eHM6Z3JvdXAgbmFtZT0iZXF1YXRpb24uY29udGVudCI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJhbHQiLz4KICAgICAgPHhzOmNob2ljZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJncmFwaGljIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibWVkaWFvYmplY3QiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImlubGluZWVxdWF0aW9uLmNvbnRlbnQiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYWx0Ii8+CiAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZ3JhcGhpYyIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImlubGluZW1lZGlhb2JqZWN0Ii8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmNvbXBsZXhUeXBlPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlcXVhdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZXF1YXRpb24iIHN1YnN0aXR1dGlvbkdyb3VwPSJmb3JtYWwuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0iZm9ybWFsb2JqZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmZvcm1hbGVxdWF0aW9uIi8+CiAgICAgICAgICA8eHM6Z3JvdXAgcmVmPSJlcXVhdGlvbi5jb250ZW50Ii8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVxdWF0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGVxdWF0aW9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVxdWF0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmbG9hdHN0eWxlIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVxdWF0aW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBlcXVhdGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGVxdWF0aW9uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5mb3JtYWxlcXVhdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW5mb3JtYWxlcXVhdGlvbiIgc3Vic3RpdHV0aW9uR3JvdXA9ImluZm9ybWFsLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJlcXVhdGlvbi5jb250ZW50Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImluZm9ybWFsZXF1YXRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW5mb3JtYWxlcXVhdGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmZvcm1hbGVxdWF0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmbG9hdHN0eWxlIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmZvcm1hbGVxdWF0aW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpbmZvcm1hbGVxdWF0aW9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW5mb3JtYWxlcXVhdGlvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImlubGluZWVxdWF0aW9uLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbmxpbmVlcXVhdGlvbiIgc3Vic3RpdHV0aW9uR3JvdXA9ImlubGluZW9iai5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNvbXBsZXhDb250ZW50PgogICAgICAgIDx4czpleHRlbnNpb24gYmFzZT0iaW5saW5lZXF1YXRpb24uY29udGVudCI+CiAgICAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmxpbmVlcXVhdGlvbi5hdHRsaXN0Ii8+CiAgICAgICAgPC94czpleHRlbnNpb24+CiAgICAgIDwveHM6Y29tcGxleENvbnRlbnQ+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBpbmxpbmVlcXVhdGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmxpbmVlcXVhdGlvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImlubGluZWVxdWF0aW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpbmxpbmVlcXVhdGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGlubGluZWVxdWF0aW9uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYWx0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhbHQiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWx0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFsdC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhbHQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhbHQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGFsdC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGFsdC5tb2R1bGUgLS0+CiAgPCEtLSBUYWJsZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gQ2hvb3NlIGEgdGFibGUgbW9kZWwuIENBTFMgb3IgT0FTSVMgWE1MIEV4Y2hhbmdlIC0tPgogIDwhLS0gRG8gd2UgYWxsb3cgdGhlIEhUTUwgdGFibGUgbW9kZWwgYXMgd2VsbD8gLS0+CiAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgPCEtLQogICAgeGh0bWx0YmwubW9kIGRlZmluZXMgSFRNTCB0YWJsZXMgYW5kIHNldHMgcGFyYW1ldGVyCiAgICBlbnRpdGllcyBzbyB0aGF0LCB3aGVuIHRoZSBDQUxTIHRhYmxlIG1vZHVsZSBpcyByZWFkLAogICAgd2UgZW5kIHVwIGFsbG93aW5nIGFueSB0YWJsZSB0byBiZSBDQUxTIG9yIEhUTUwuCiAgICBpLmUuIFRoaXMgaW5jbHVkZSBtdXN0IGNvbWUgZmlyc3QhCiAgLS0+CiAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgPCEtLSBlbmQgb2YgYWxsb3cuaHRtbC50YWJsZXMgLS0+CiAgPCEtLSBBZGQgbGFiZWwgYW5kIHJvbGUgYXR0cmlidXRlcyB0byB0YWJsZSBhbmQgaW5mb3JtYWx0YWJsZSAtLT4KICA8IS0tCiAgICBBZGQgY29tbW9uIGF0dHJpYnV0ZXMgdG8gVGFibGUsIFRHcm91cCwgVEJvZHksIFRIZWFkLCBURm9vdCwgUm93LAogICAgRW50cnlUYmwsIGFuZCBFbnRyeSAoYW5kIEluZm9ybWFsVGFibGUgZWxlbWVudCkuCiAgLS0+CiAgPCEtLSBDb250ZW50IG1vZGVsIGZvciBUYWJsZS4gLS0+CiAgPCEtLSBBbGxvdyBlaXRoZXIgb2JqZWN0cyBvciBpbmxpbmVzOyBiZXdhcmUgb2YgUkVzIGJldHdlZW4gZWxlbWVudHMuIC0tPgogIDwhLS0gUmVmZXJlbmNlIENBTFMgVGFibGUgTW9kZWwgLS0+CiAgPCEtLSBlbmQgb2YgdGFibGUubW9kdWxlIC0tPgogIDwhLS0KICAgIE5vdGUgdGhhdCBJbmZvcm1hbFRhYmxlIGlzIGRlcGVuZGVudCBvbiBzb21lIG9mIHRoZSBlbnRpdHkKICAgIGRlY2xhcmF0aW9ucyB0aGF0IGN1c3RvbWl6ZSBUYWJsZS4KICAtLT4KICA8IS0tIHRoZSBmb2xsb3dpbmcgZW50aXR5IG1heSBoYXZlIGJlZW4gZGVjbGFyZWQgYnkgdGhlIFhIVE1MIHRhYmxlIG1vZHVsZSAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbmZvcm1hbHRhYmxlIiBzdWJzdGl0dXRpb25Hcm91cD0iaW5mb3JtYWwuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImluZm9ybWFsLnRibC50YWJsZS5tZGwiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5mb3JtYWx0YWJsZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBpbmZvcm1hbHRhYmxlLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgRnJhbWUsIENvbHNlcCwgYW5kIFJvd3NlcCBtdXN0IGJlIHJlcGVhdGVkIGJlY2F1c2UKICAgIHRoZXkgYXJlIG5vdCBpbiBlbnRpdGllcyBpbiB0aGUgdGFibGUgbW9kdWxlLgogIC0tPgogIDwhLS0KICAgIGluY2x1ZGVzIFRhYlN0eWxlLCBUb0NlbnRyeSwgU2hvcnRFbnRyeSwKICAgIE9yaWVudCwgUGdXaWRlCiAgLS0+CiAgPCEtLSBpbmNsdWRlcyBMYWJlbCAtLT4KICA8IS0tIGluY2x1ZGVzIGNvbW1vbiBhdHRyaWJ1dGVzIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmZvcm1hbHRhYmxlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmcmFtZSIgdHlwZT0idGJsLmZyYW1lLmF0dHZhbCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb2xzZXAiIHR5cGU9Inllc29ybm8uYXR0dmFscyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyb3dzZXAiIHR5cGU9Inllc29ybm8uYXR0dmFscyIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLnRhYmxlLmF0dHJpYnMiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRibC50YWJsZS5hdHQiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGluZm9ybWFsdGFibGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBpbmZvcm1hbHRhYmxlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2FwdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY2FwdGlvbiI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0ZXh0b2JqZWN0Lm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjYXB0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNhcHRpb24uZWxlbWVudCAtLT4KICA8IS0tIGF0dHJzIGNvbWVzIGZyb20gSFRNTCB0YWJsZXMgLi4uIC0tPgogIDwhLS0gY29tbW9uLmF0dHJpYiwgYnV0IHdpdGhvdXQgSUQgYmVjYXVzZSBJRCBpcyBpbiBhdHRycyAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2FwdGlvbi5hdHRsaXN0LmNvbnRlbnQiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFuZy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlbWFwLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ieHJlZmxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmV2aXNpb25mbGFnLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZWZmZWN0aXZpdHkuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJkaXIuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ4bWwtYmFzZS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNhcHRpb24ucm9sZS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImF0dHJzIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idG9wIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImJvdHRvbSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsZWZ0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJpZ2h0Ii8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2FwdGlvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNhcHRpb24uYXR0bGlzdC5jb250ZW50Ii8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjYXB0aW9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY2FwdGlvbi5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gU3lub3BzZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIFN5bm9wc2lzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN5bm9wc2lzLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzeW5vcHNpcyIgc3Vic3RpdHV0aW9uR3JvdXA9InN5bm9wLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZ3JhcGhpYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibWVkaWFvYmplY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb3JlZiIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0idGV4dG9iamVjdCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZWFubm90YXRpb24iLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN5bm9wc2lzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN5bm9wc2lzLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN5bm9wc2lzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5lc3BlY2lmaWMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzeW5vcHNpcy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc3lub3BzaXMuYXR0bGlzdCAtLT4KICA8IS0tIExpbmVBbm5vdGF0aW9uIChkZWZpbmVkIGluIHRoZSBJbmxpbmVzIHNlY3Rpb24sIGJlbG93KSAtLT4KICA8IS0tIGVuZCBvZiBzeW5vcHNpcy5tb2R1bGUgLS0+CiAgPCEtLSBDbWRTeW5vcHNpcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjbWRzeW5vcHNpcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY21kc3lub3BzaXMiIHN1YnN0aXR1dGlvbkdyb3VwPSJzeW5vcC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iY29tbWFuZCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcmciLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iZ3JvdXAiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic2JyIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzeW5vcGZyYWdtZW50Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNtZHN5bm9wc2lzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNtZHN5bm9wc2lzLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgU2VwY2hhcjogQ2hhcmFjdGVyIHRoYXQgc2hvdWxkIHNlcGFyYXRlIGNvbW1hbmQgYW5kIGFsbAogICAgdG9wLWxldmVsIGFyZ3VtZW50czsgYWx0ZXJuYXRlIHZhbHVlIG1pZ2h0IGJlIGUuZy4sICZEZWx0YTsKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY21kc3lub3BzaXMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2VwY2hhciIgZGVmYXVsdD0iICIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbWRsZW5ndGgiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNtZHN5bm9wc2lzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjbWRzeW5vcHNpcy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNtZHN5bm9wc2lzLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXJnLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhcmciPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFyZyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZ3JvdXAiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im9wdGlvbiIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ic3lub3BmcmFnbWVudHJlZiIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icmVwbGFjZWFibGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InNiciIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXJnLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFyZy5lbGVtZW50IC0tPgogIDwhLS0KICAgIENob2ljZTogV2hldGhlciBBcmcgbXVzdCBiZSBzdXBwbGllZDogT3B0IChvcHRpb25hbCB0bwogICAgc3VwcGx5LCBlLmcuIFthcmddOyB0aGUgZGVmYXVsdCksIFJlcSAocmVxdWlyZWQgdG8gc3VwcGx5LAogICAgZS5nLiB7YXJnfSksIG9yIFBsYWluIChyZXF1aXJlZCB0byBzdXBwbHksIGUuZy4gYXJnKQogIC0tPgogIDwhLS0KICAgIFJlcDogd2hldGhlciBBcmcgaXMgcmVwZWF0YWJsZTogTm9yZXBlYXQgKGUuZy4gYXJnIHdpdGhvdXQKICAgIGVsbGlwc2lzOyB0aGUgZGVmYXVsdCksIG9yIFJlcGVhdCAoZS5nLiBhcmcuLi4pCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFyZy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2hvaWNlIiBkZWZhdWx0PSJvcHQiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvcHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVxIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InBsYWluIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlcCIgZGVmYXVsdD0ibm9yZXBlYXQiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJub3JlcGVhdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZXBlYXQiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFyZy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYXJnLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYXJnLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ3JvdXAucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Imdyb3VwIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcmciLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Imdyb3VwIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJvcHRpb24iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN5bm9wZnJhZ21lbnRyZWYiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InJlcGxhY2VhYmxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzYnIiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdyb3VwLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGdyb3VwLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgQ2hvaWNlOiBXaGV0aGVyIEdyb3VwIG11c3QgYmUgc3VwcGxpZWQ6IE9wdCAob3B0aW9uYWwgdG8KICAgIHN1cHBseSwgZS5nLiAgW2cxfGcyfGczXTsgdGhlIGRlZmF1bHQpLCBSZXEgKHJlcXVpcmVkIHRvCiAgICBzdXBwbHksIGUuZy4gIHtnMXxnMnxnM30pLCBQbGFpbiAocmVxdWlyZWQgdG8gc3VwcGx5LAogICAgZS5nLiAgZzF8ZzJ8ZzMpLCBPcHRNdWx0IChjYW4gc3VwcGx5IHplcm8gb3IgbW9yZSwgZS5nLgogICAgW1tnMXxnMnxnM11dKSwgb3IgUmVxTXVsdCAobXVzdCBzdXBwbHkgb25lIG9yIG1vcmUsIGUuZy4KICAgIHt7ZzF8ZzJ8ZzN9fSkKICAtLT4KICA8IS0tCiAgICBSZXA6IHdoZXRoZXIgR3JvdXAgaXMgcmVwZWF0YWJsZTogTm9yZXBlYXQgKGUuZy4gZ3JvdXAKICAgIHdpdGhvdXQgZWxsaXBzaXM7IHRoZSBkZWZhdWx0KSwgb3IgUmVwZWF0IChlLmcuIGdyb3VwLi4uKQogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJncm91cC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2hvaWNlIiBkZWZhdWx0PSJvcHQiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvcHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVxIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InBsYWluIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlcCIgZGVmYXVsdD0ibm9yZXBlYXQiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJub3JlcGVhdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZXBlYXQiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdyb3VwLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBncm91cC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGdyb3VwLm1vZHVsZSAtLT4KICA8IS0tIFN5bm9wc2lzIGJyZWFrIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzYnIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNiciI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNici5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzYnIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2JyLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2JyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzYnIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzYnIubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzeW5vcGZyYWdtZW50cmVmLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzeW5vcGZyYWdtZW50cmVmIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN5bm9wZnJhZ21lbnRyZWYuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc3lub3BmcmFnbWVudHJlZi5lbGVtZW50IC0tPgogIDwhLS0KICAgIHRvIFN5bm9wRnJhZ21lbnQgb2YgY29tcGxleCBzeW5vcHNpcwogICAgbWF0ZXJpYWwgZm9yIHNlcGFyYXRlIHJlZmVyZW5jaW5nCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN5bm9wZnJhZ21lbnRyZWYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rZW5kcmVxLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3lub3BmcmFnbWVudHJlZi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc3lub3BmcmFnbWVudHJlZi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHN5bm9wZnJhZ21lbnRyZWYubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzeW5vcGZyYWdtZW50LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzeW5vcGZyYWdtZW50Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcmciLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Imdyb3VwIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzeW5vcGZyYWdtZW50LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN5bm9wZnJhZ21lbnQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3lub3BmcmFnbWVudC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImlkcmVxLmNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN5bm9wZnJhZ21lbnQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN5bm9wZnJhZ21lbnQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzeW5vcGZyYWdtZW50Lm1vZHVsZSAtLT4KICA8IS0tIENvbW1hbmQgKGRlZmluZWQgaW4gdGhlIElubGluZXMgc2VjdGlvbiwgYmVsb3cpIC0tPgogIDwhLS0gT3B0aW9uIChkZWZpbmVkIGluIHRoZSBJbmxpbmVzIHNlY3Rpb24sIGJlbG93KSAtLT4KICA8IS0tIFJlcGxhY2VhYmxlIChkZWZpbmVkIGluIHRoZSBJbmxpbmVzIHNlY3Rpb24sIGJlbG93KSAtLT4KICA8IS0tIGVuZCBvZiBjbWRzeW5vcHNpcy5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIEZ1bmNTeW5vcHNpcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZ1bmNzeW5vcHNpcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZnVuY3N5bm9wc2lzIiBzdWJzdGl0dXRpb25Hcm91cD0ic3lub3AuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImZ1bmNzeW5vcHNpc2luZm8iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImZ1bmNwcm90b3R5cGUiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZ1bmNzeW5vcHNpcy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBmdW5jc3lub3BzaXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZnVuY3N5bm9wc2lzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmdW5jc3lub3BzaXMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGZ1bmNzeW5vcHNpcy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGZ1bmNzeW5vcHNpcy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZ1bmNzeW5vcHNpc2luZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImZ1bmNzeW5vcHNpc2luZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0ZXh0b2JqZWN0Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lYW5ub3RhdGlvbiIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZnVuY3N5bm9wc2lzaW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBmdW5jc3lub3BzaXNpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZ1bmNzeW5vcHNpc2luZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5lc3BlY2lmaWMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmdW5jc3lub3BzaXNpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBmdW5jc3lub3BzaXNpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZnVuY3N5bm9wc2lzaW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZ1bmNwcm90b3R5cGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImZ1bmNwcm90b3R5cGUiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtb2RpZmllciIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZnVuY2RlZiIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InZvaWQiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0idmFyYXJncyIvPgogICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhbWRlZiIvPgogICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idmFyYXJncyIvPgogICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1vZGlmaWVyIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZ1bmNwcm90b3R5cGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZnVuY3Byb3RvdHlwZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmdW5jcHJvdG90eXBlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZnVuY3Byb3RvdHlwZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZnVuY3Byb3RvdHlwZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGZ1bmNwcm90b3R5cGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmdW5jZGVmLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJmdW5jZGVmIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0eXBlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZXBsYWNlYWJsZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZnVuY3Rpb24iLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZ1bmNkZWYuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZnVuY2RlZi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmdW5jZGVmLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZnVuY2RlZi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZnVuY2RlZi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGZ1bmNkZWYubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ2b2lkLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ2b2lkIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idm9pZC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB2b2lkLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InZvaWQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2b2lkLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB2b2lkLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygdm9pZC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InZhcmFyZ3Mucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InZhcmFyZ3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2YXJhcmdzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHZhcmFyZ3MuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idmFyYXJncy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InZhcmFyZ3Mucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHZhcmFyZ3MuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB2YXJhcmdzLm1vZHVsZSAtLT4KICA8IS0tCiAgICBQcm9jZXNzaW5nIGFzc3VtZXMgdGhhdCBvbmx5IG9uZSBQYXJhbWV0ZXIgd2lsbCBhcHBlYXIgaW4gYQogICAgUGFyYW1EZWYsIGFuZCB0aGF0IEZ1bmNQYXJhbXMgd2lsbCBiZSB1c2VkIGF0IG1vc3Qgb25jZSwgZm9yCiAgICBwcm92aWRpbmcgaW5mb3JtYXRpb24gb24gdGhlICJpbm5lciBwYXJhbWV0ZXJzIiBmb3IgcGFyYW1ldGVycyB0aGF0CiAgICBhcmUgcG9pbnRlcnMgdG8gZnVuY3Rpb25zLgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwYXJhbWRlZi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icGFyYW1kZWYiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImluaXRpYWxpemVyIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0eXBlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZXBsYWNlYWJsZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icGFyYW1ldGVyIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmdW5jcGFyYW1zIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYXJhbWRlZi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwYXJhbWRlZi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwYXJhbWRlZi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2hvaWNlIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3B0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlcSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFyYW1kZWYucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHBhcmFtZGVmLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcGFyYW1kZWYubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmdW5jcGFyYW1zLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJmdW5jcGFyYW1zIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZnVuY3BhcmFtcy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBmdW5jcGFyYW1zLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZ1bmNwYXJhbXMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmdW5jcGFyYW1zLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBmdW5jcGFyYW1zLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZnVuY3BhcmFtcy5tb2R1bGUgLS0+CiAgPCEtLSBMaW5lQW5ub3RhdGlvbiAoZGVmaW5lZCBpbiB0aGUgSW5saW5lcyBzZWN0aW9uLCBiZWxvdykgLS0+CiAgPCEtLSBSZXBsYWNlYWJsZSAoZGVmaW5lZCBpbiB0aGUgSW5saW5lcyBzZWN0aW9uLCBiZWxvdykgLS0+CiAgPCEtLSBGdW5jdGlvbiAoZGVmaW5lZCBpbiB0aGUgSW5saW5lcyBzZWN0aW9uLCBiZWxvdykgLS0+CiAgPCEtLSBQYXJhbWV0ZXIgKGRlZmluZWQgaW4gdGhlIElubGluZXMgc2VjdGlvbiwgYmVsb3cpIC0tPgogIDwhLS0gZW5kIG9mIGZ1bmNzeW5vcHNpcy5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIENsYXNzU3lub3BzaXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjbGFzc3N5bm9wc2lzLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjbGFzc3N5bm9wc2lzIiBzdWJzdGl0dXRpb25Hcm91cD0ic3lub3AuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im9vY2xhc3MiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ib29pbnRlcmZhY2UiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ib29leGNlcHRpb24iLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjbGFzc3N5bm9wc2lzaW5mbyIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmaWVsZHN5bm9wc2lzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im1ldGhvZC5zeW5vcC5jbGFzcyIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjbGFzc3N5bm9wc2lzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNsYXNzc3lub3BzaXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2xhc3NzeW5vcHNpcy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGFuZ3VhZ2UiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIGRlZmF1bHQ9ImNsYXNzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2xhc3MiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaW50ZXJmYWNlIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjbGFzc3N5bm9wc2lzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjbGFzc3N5bm9wc2lzLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY2xhc3NzeW5vcHNpcy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNsYXNzc3lub3BzaXNpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjbGFzc3N5bm9wc2lzaW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRleHRvYmplY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVhbm5vdGF0aW9uIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjbGFzc3N5bm9wc2lzaW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjbGFzc3N5bm9wc2lzaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjbGFzc3N5bm9wc2lzaW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmVzcGVjaWZpYy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNsYXNzc3lub3BzaXNpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjbGFzc3N5bm9wc2lzaW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNsYXNzc3lub3BzaXNpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib29jbGFzcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ib29jbGFzcyIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1vZGlmaWVyIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjbGFzc25hbWUiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib29jbGFzcy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBvb2NsYXNzLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9vY2xhc3MuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvb2NsYXNzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBvb2NsYXNzLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygb29jbGFzcy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9vaW50ZXJmYWNlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJvb2ludGVyZmFjZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1vZGlmaWVyIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbnRlcmZhY2VuYW1lIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9vaW50ZXJmYWNlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG9vaW50ZXJmYWNlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9vaW50ZXJmYWNlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib29pbnRlcmZhY2Uucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG9vaW50ZXJmYWNlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygb29pbnRlcmZhY2UubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvb2V4Y2VwdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ib29leGNlcHRpb24iIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtb2RpZmllciIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZXhjZXB0aW9ubmFtZSIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvb2V4Y2VwdGlvbi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBvb2V4Y2VwdGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvb2V4Y2VwdGlvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9vZXhjZXB0aW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBvb2V4Y2VwdGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG9vZXhjZXB0aW9uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibW9kaWZpZXIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im1vZGlmaWVyIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb2RpZmllci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtb2RpZmllci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtb2RpZmllci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vZGlmaWVyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtb2RpZmllci5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1vZGlmaWVyLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW50ZXJmYWNlbmFtZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW50ZXJmYWNlbmFtZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImludGVyZmFjZW5hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW50ZXJmYWNlbmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbnRlcmZhY2VuYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW50ZXJmYWNlbmFtZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaW50ZXJmYWNlbmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGludGVyZmFjZW5hbWUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJleGNlcHRpb25uYW1lLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJleGNlcHRpb25uYW1lIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJleGNlcHRpb25uYW1lLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGV4Y2VwdGlvbm5hbWUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZXhjZXB0aW9ubmFtZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImV4Y2VwdGlvbm5hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGV4Y2VwdGlvbm5hbWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBleGNlcHRpb25uYW1lLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZmllbGRzeW5vcHNpcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZmllbGRzeW5vcHNpcyIgc3Vic3RpdHV0aW9uR3JvdXA9InN5bm9wLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibW9kaWZpZXIiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idHlwZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0idmFybmFtZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJpbml0aWFsaXplciIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmaWVsZHN5bm9wc2lzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGZpZWxkc3lub3BzaXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZmllbGRzeW5vcHNpcy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGFuZ3VhZ2UiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZpZWxkc3lub3BzaXMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGZpZWxkc3lub3BzaXMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBmaWVsZHN5bm9wc2lzLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5pdGlhbGl6ZXIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImluaXRpYWxpemVyIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbml0aWFsaXplci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBpbml0aWFsaXplci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbml0aWFsaXplci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImluaXRpYWxpemVyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpbml0aWFsaXplci5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGluaXRpYWxpemVyLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29uc3RydWN0b3JzeW5vcHNpcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29uc3RydWN0b3JzeW5vcHNpcyIgc3Vic3RpdHV0aW9uR3JvdXA9Im1ldGhvZC5zeW5vcC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1vZGlmaWVyIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Im1ldGhvZG5hbWUiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibWV0aG9kcGFyYW0iLz4KICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ2b2lkIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJleGNlcHRpb25uYW1lIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbnN0cnVjdG9yc3lub3BzaXMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY29uc3RydWN0b3JzeW5vcHNpcy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25zdHJ1Y3RvcnN5bm9wc2lzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsYW5ndWFnZSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29uc3RydWN0b3JzeW5vcHNpcy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY29uc3RydWN0b3JzeW5vcHNpcy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvbnN0cnVjdG9yc3lub3BzaXMubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJkZXN0cnVjdG9yc3lub3BzaXMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImRlc3RydWN0b3JzeW5vcHNpcyIgc3Vic3RpdHV0aW9uR3JvdXA9Im1ldGhvZC5zeW5vcC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1vZGlmaWVyIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Im1ldGhvZG5hbWUiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibWV0aG9kcGFyYW0iLz4KICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ2b2lkIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJleGNlcHRpb25uYW1lIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImRlc3RydWN0b3JzeW5vcHNpcy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBkZXN0cnVjdG9yc3lub3BzaXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZGVzdHJ1Y3RvcnN5bm9wc2lzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsYW5ndWFnZSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZGVzdHJ1Y3RvcnN5bm9wc2lzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBkZXN0cnVjdG9yc3lub3BzaXMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBkZXN0cnVjdG9yc3lub3BzaXMubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtZXRob2RzeW5vcHNpcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibWV0aG9kc3lub3BzaXMiIHN1YnN0aXR1dGlvbkdyb3VwPSJtZXRob2Quc3lub3AuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtb2RpZmllciIvPgogICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0idHlwZSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ2b2lkIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtZXRob2RuYW1lIi8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1ldGhvZHBhcmFtIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idm9pZCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZXhjZXB0aW9ubmFtZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibW9kaWZpZXIiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWV0aG9kc3lub3BzaXMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbWV0aG9kc3lub3BzaXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibWV0aG9kc3lub3BzaXMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Imxhbmd1YWdlIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtZXRob2RzeW5vcHNpcy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbWV0aG9kc3lub3BzaXMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtZXRob2RzeW5vcHNpcy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1ldGhvZG5hbWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im1ldGhvZG5hbWUiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1ldGhvZG5hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbWV0aG9kbmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtZXRob2RuYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWV0aG9kbmFtZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbWV0aG9kbmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1ldGhvZG5hbWUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtZXRob2RwYXJhbS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibWV0aG9kcGFyYW0iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtb2RpZmllciIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0eXBlIi8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhbWV0ZXIiLz4KICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImluaXRpYWxpemVyIi8+CiAgICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmdW5jcGFyYW1zIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtb2RpZmllciIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtZXRob2RwYXJhbS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtZXRob2RwYXJhbS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtZXRob2RwYXJhbS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2hvaWNlIiBkZWZhdWx0PSJyZXEiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvcHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVxIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InBsYWluIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlcCIgZGVmYXVsdD0ibm9yZXBlYXQiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJub3JlcGVhdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZXBlYXQiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1ldGhvZHBhcmFtLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtZXRob2RwYXJhbS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1ldGhvZHBhcmFtLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBjbGFzc3N5bm9wc2lzLmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIERvY3VtZW50IGluZm9ybWF0aW9uIGVudGl0aWVzIGFuZCBlbGVtZW50cyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLQogICAgVGhlIGRvY3VtZW50IGluZm9ybWF0aW9uIGVsZW1lbnRzIGluY2x1ZGUgc29tZSBlbGVtZW50cyB0aGF0IGFyZQogICAgY3VycmVudGx5IHVzZWQgb25seSBpbiB0aGUgZG9jdW1lbnQgaGllcmFyY2h5IG1vZHVsZS4gVGhleSBhcmUKICAgIGRlZmluZWQgaGVyZSBzbyB0aGF0IHRoZXkgd2lsbCBiZSBhdmFpbGFibGUgZm9yIHVzZSBpbiBjdXN0b21pemVkCiAgICBkb2N1bWVudCBoaWVyYXJjaGllcy4KICAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBBY2tubyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhY2tuby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYWNrbm8iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhY2tuby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBhY2tuby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhY2tuby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFja25vLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhY2tuby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGFja25vLm1vZHVsZSAtLT4KICA8IS0tIEFkZHJlc3MgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFkZHJlc3Mucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImFkZHJlc3MiIHN1YnN0aXR1dGlvbkdyb3VwPSJpbmZvcm1hbC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icGVyc29ubmFtZSIvPgogICAgICAgIDx4czpncm91cCByZWY9InBlcnNvbi5pZGVudC5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN0cmVldCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icG9iIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwb3N0Y29kZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY2l0eSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ic3RhdGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvdW50cnkiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InBob25lIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmYXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImVtYWlsIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJvdGhlcmFkZHIiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFkZHJlc3MuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYWRkcmVzcy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhZGRyZXNzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGluZXNwZWNpZmljLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWRkcmVzcy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYWRkcmVzcy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGFkZHJlc3MubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdHJlZXQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InN0cmVldCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0cmVldC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzdHJlZXQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3RyZWV0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RyZWV0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzdHJlZXQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzdHJlZXQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwb2Iucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InBvYiI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBvYi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwb2IuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icG9iLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icG9iLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwb2IuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwb2IubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwb3N0Y29kZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icG9zdGNvZGUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwb3N0Y29kZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwb3N0Y29kZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwb3N0Y29kZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBvc3Rjb2RlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwb3N0Y29kZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHBvc3Rjb2RlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2l0eS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY2l0eSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNpdHkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY2l0eS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjaXR5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2l0eS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY2l0eS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNpdHkubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdGF0ZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3RhdGUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0ZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzdGF0ZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdGF0ZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXRlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzdGF0ZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHN0YXRlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY291bnRyeS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY291bnRyeSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvdW50cnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY291bnRyeS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb3VudHJ5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY291bnRyeS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY291bnRyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvdW50cnkubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwaG9uZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icGhvbmUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwaG9uZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwaG9uZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwaG9uZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBob25lLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwaG9uZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHBob25lLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZmF4LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJmYXgiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmYXguYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZmF4LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZheC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZheC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZmF4LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZmF4Lm1vZHVsZSAtLT4KICA8IS0tIEVtYWlsIChkZWZpbmVkIGluIHRoZSBJbmxpbmVzIHNlY3Rpb24sIGJlbG93KSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib3RoZXJhZGRyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJvdGhlcmFkZHIiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvdGhlcmFkZHIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygb3RoZXJhZGRyLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im90aGVyYWRkci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im90aGVyYWRkci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygb3RoZXJhZGRyLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygb3RoZXJhZGRyLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBhZGRyZXNzLmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gQWZmaWxpYXRpb24gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYWZmaWxpYXRpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImFmZmlsaWF0aW9uIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJzaG9ydGFmZmlsIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJqb2J0aXRsZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJvcmduYW1lIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJvcmdkaXYiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImFkZHJlc3MiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWZmaWxpYXRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYWZmaWxpYXRpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYWZmaWxpYXRpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhZmZpbGlhdGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYWZmaWxpYXRpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhZmZpbGlhdGlvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNob3J0YWZmaWwucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNob3J0YWZmaWwiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzaG9ydGFmZmlsLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNob3J0YWZmaWwuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2hvcnRhZmZpbC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNob3J0YWZmaWwucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNob3J0YWZmaWwuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzaG9ydGFmZmlsLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iam9idGl0bGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImpvYnRpdGxlIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iam9idGl0bGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygam9idGl0bGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iam9idGl0bGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJqb2J0aXRsZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygam9idGl0bGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBqb2J0aXRsZS5tb2R1bGUgLS0+CiAgPCEtLSBPcmdOYW1lIChkZWZpbmVkIGVsc2V3aGVyZSBpbiB0aGlzIHNlY3Rpb24pIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvcmdkaXYucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im9yZ2RpdiI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9yZ2Rpdi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBvcmdkaXYuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib3JnZGl2LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib3JnZGl2LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBvcmdkaXYuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBvcmdkaXYubW9kdWxlIC0tPgogIDwhLS0gQWRkcmVzcyAoZGVmaW5lZCBlbHNld2hlcmUgaW4gdGhpcyBzZWN0aW9uKSAtLT4KICA8IS0tIGVuZCBvZiBhZmZpbGlhdGlvbi5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIEFydFBhZ2VOdW1zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFydHBhZ2VudW1zLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhcnRwYWdlbnVtcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFydHBhZ2VudW1zLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFydHBhZ2VudW1zLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFydHBhZ2VudW1zLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXJ0cGFnZW51bXMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGFydHBhZ2VudW1zLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYXJ0cGFnZW51bXMubW9kdWxlIC0tPgogIDwhLS0gUGVyc29uTmFtZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGVyc29ubmFtZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icGVyc29ubmFtZSIgc3Vic3RpdHV0aW9uR3JvdXA9Imdlbi5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJob25vcmlmaWMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImZpcnN0bmFtZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ic3VybmFtZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZWFnZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ib3RoZXJuYW1lIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwZXJzb25uYW1lLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHBlcnNvbm5hbWUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGVyc29ubmFtZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBlcnNvbm5hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHBlcnNvbm5hbWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwZXJzb25uYW1lLm1vZHVsZSAtLT4KICA8IS0tIEF1dGhvciAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImF1dGhvci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXV0aG9yIiBzdWJzdGl0dXRpb25Hcm91cD0iZG9jaW5mby5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InBlcnNvbm5hbWUiLz4KICAgICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwZXJzb24uaWRlbnQubWl4Ii8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0icGVyc29uYmx1cmIiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iZW1haWwiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iYWRkcmVzcyIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhdXRob3IuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYXV0aG9yLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImF1dGhvci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImF1dGhvci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYXV0aG9yLmF0dGxpc3QgLS0+CiAgPCEtLSAoc2VlICJQZXJzb25hbCBpZGVudGl0eSBlbGVtZW50cyIgZm9yICVwZXJzb24uaWRlbnQubWl4OykgLS0+CiAgPCEtLSBlbmQgb2YgYXV0aG9yLm1vZHVsZSAtLT4KICA8IS0tIEF1dGhvckdyb3VwIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImF1dGhvcmdyb3VwLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhdXRob3Jncm91cCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYXV0aG9yIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlZGl0b3IiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvbGxhYiIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY29ycGF1dGhvciIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY29ycGNyZWRpdCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ib3RoZXJjcmVkaXQiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImF1dGhvcmdyb3VwLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGF1dGhvcmdyb3VwLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImF1dGhvcmdyb3VwLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXV0aG9yZ3JvdXAucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGF1dGhvcmdyb3VwLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYXV0aG9yZ3JvdXAubW9kdWxlIC0tPgogIDwhLS0gQXV0aG9yIChkZWZpbmVkIGVsc2V3aGVyZSBpbiB0aGlzIHNlY3Rpb24pIC0tPgogIDwhLS0gRWRpdG9yIChkZWZpbmVkIGVsc2V3aGVyZSBpbiB0aGlzIHNlY3Rpb24pIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb2xsYWIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNvbGxhYiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvbGxhYm5hbWUiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImFmZmlsaWF0aW9uIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbGxhYi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb2xsYWIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29sbGFiLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29sbGFiLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjb2xsYWIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb2xsYWIubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb2xsYWJuYW1lLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb2xsYWJuYW1lIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29sbGFibmFtZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb2xsYWJuYW1lLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbGxhYm5hbWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb2xsYWJuYW1lLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjb2xsYWJuYW1lLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29sbGFibmFtZS5tb2R1bGUgLS0+CiAgPCEtLSBBZmZpbGlhdGlvbiAoZGVmaW5lZCBlbHNld2hlcmUgaW4gdGhpcyBzZWN0aW9uKSAtLT4KICA8IS0tIGVuZCBvZiBjb2xsYWIuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSBDb3JwQXV0aG9yIChkZWZpbmVkIGVsc2V3aGVyZSBpbiB0aGlzIHNlY3Rpb24pIC0tPgogIDwhLS0gT3RoZXJDcmVkaXQgKGRlZmluZWQgZWxzZXdoZXJlIGluIHRoaXMgc2VjdGlvbikgLS0+CiAgPCEtLSBlbmQgb2YgYXV0aG9yZ3JvdXAuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSBBdXRob3JJbml0aWFscyAuLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhdXRob3Jpbml0aWFscy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXV0aG9yaW5pdGlhbHMiIHN1YnN0aXR1dGlvbkdyb3VwPSJkb2NpbmZvLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhdXRob3Jpbml0aWFscy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBhdXRob3Jpbml0aWFscy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhdXRob3Jpbml0aWFscy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImF1dGhvcmluaXRpYWxzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhdXRob3Jpbml0aWFscy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGF1dGhvcmluaXRpYWxzLm1vZHVsZSAtLT4KICA8IS0tIENvbmZHcm91cCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbmZncm91cC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29uZmdyb3VwIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvbmZkYXRlcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY29uZnRpdGxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb25mbnVtIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhZGRyZXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb25mc3BvbnNvciIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29uZmdyb3VwLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvbmZncm91cC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25mZ3JvdXAuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb25mZ3JvdXAucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvbmZncm91cC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvbmZncm91cC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbmZkYXRlcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29uZmRhdGVzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29uZmRhdGVzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvbmZkYXRlcy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25mZGF0ZXMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb25mZGF0ZXMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvbmZkYXRlcy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvbmZkYXRlcy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbmZ0aXRsZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29uZnRpdGxlIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29uZnRpdGxlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvbmZ0aXRsZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25mdGl0bGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb25mdGl0bGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvbmZ0aXRsZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvbmZ0aXRsZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbmZudW0ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNvbmZudW0iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb25mbnVtLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvbmZudW0uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29uZm51bS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbmZudW0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvbmZudW0uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb25mbnVtLm1vZHVsZSAtLT4KICA8IS0tIEFkZHJlc3MgKGRlZmluZWQgZWxzZXdoZXJlIGluIHRoaXMgc2VjdGlvbikgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbmZzcG9uc29yLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb25mc3BvbnNvciI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbmZzcG9uc29yLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvbmZzcG9uc29yLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbmZzcG9uc29yLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29uZnNwb25zb3Iucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvbmZzcG9uc29yLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29uZnNwb25zb3IubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIGNvbmZncm91cC5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIENvbnRyYWN0TnVtIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbnRyYWN0bnVtLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb250cmFjdG51bSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbnRyYWN0bnVtLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvbnRyYWN0bnVtLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbnRyYWN0bnVtLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29udHJhY3RudW0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvbnRyYWN0bnVtLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29udHJhY3RudW0ubW9kdWxlIC0tPgogIDwhLS0gQ29udHJhY3RTcG9uc29yIC4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29udHJhY3RzcG9uc29yLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb250cmFjdHNwb25zb3IiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb250cmFjdHNwb25zb3IuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY29udHJhY3RzcG9uc29yLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbnRyYWN0c3BvbnNvci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbnRyYWN0c3BvbnNvci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY29udHJhY3RzcG9uc29yLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29udHJhY3RzcG9uc29yLm1vZHVsZSAtLT4KICA8IS0tIENvcHlyaWdodCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvcHlyaWdodC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29weXJpZ2h0Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InllYXIiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImhvbGRlciIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb3B5cmlnaHQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY29weXJpZ2h0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvcHlyaWdodC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvcHlyaWdodC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY29weXJpZ2h0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29weXJpZ2h0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ieWVhci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ieWVhciI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InllYXIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgeWVhci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ5ZWFyLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ieWVhci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgeWVhci5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHllYXIubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJob2xkZXIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImhvbGRlciI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImhvbGRlci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBob2xkZXIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaG9sZGVyLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaG9sZGVyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBob2xkZXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBob2xkZXIubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIGNvcHlyaWdodC5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIENvcnBBdXRob3IgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvcnBhdXRob3Iucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNvcnBhdXRob3IiIHN1YnN0aXR1dGlvbkdyb3VwPSJkb2NpbmZvLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb3JwYXV0aG9yLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvcnBhdXRob3IuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29ycGF1dGhvci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvcnBhdXRob3Iucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvcnBhdXRob3IuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb3JwYXV0aG9yLm1vZHVsZSAtLT4KICA8IS0tIENvcnBDcmVkaXQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29ycGNyZWRpdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29ycGNyZWRpdCIgc3Vic3RpdHV0aW9uR3JvdXA9ImRvY2luZm8uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvcnBjcmVkaXQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY29ycGNyZWRpdC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb3JwY3JlZGl0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImdyYXBoaWNkZXNpZ25lciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwcm9kdWN0aW9uZWRpdG9yIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNvcHllZGl0b3IiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idGVjaG5pY2FsZWRpdG9yIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRyYW5zbGF0b3IiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3RoZXIiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvcnBjcmVkaXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvcnBjcmVkaXQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb3JwY3JlZGl0Lm1vZHVsZSAtLT4KICA8IS0tIENvcnBOYW1lIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29ycG5hbWUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb3JwbmFtZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb3JwbmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb3JwbmFtZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvcnBuYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29ycG5hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvcnBuYW1lLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29ycG5hbWUubW9kdWxlIC0tPgogIDwhLS0gRGF0ZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZGF0ZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZGF0ZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImRhdGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZGF0ZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJkYXRlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZGF0ZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZGF0ZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGRhdGUubW9kdWxlIC0tPgogIDwhLS0gRWRpdGlvbiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZWRpdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZWRpdGlvbiI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVkaXRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZWRpdGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlZGl0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZWRpdGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZWRpdGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGVkaXRpb24ubW9kdWxlIC0tPgogIDwhLS0gRWRpdG9yIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZWRpdG9yLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJlZGl0b3IiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0icGVyc29ubmFtZSIvPgogICAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBlcnNvbi5pZGVudC5taXgiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwZXJzb25ibHVyYiIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlbWFpbCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhZGRyZXNzIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVkaXRvci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBlZGl0b3IuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZWRpdG9yLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZWRpdG9yLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBlZGl0b3IuYXR0bGlzdCAtLT4KICA8IS0tIChzZWUgIlBlcnNvbmFsIGlkZW50aXR5IGVsZW1lbnRzIiBmb3IgJXBlcnNvbi5pZGVudC5taXg7KSAtLT4KICA8IS0tIGVuZCBvZiBlZGl0b3IubW9kdWxlIC0tPgogIDwhLS0gSVNCTiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaXNibi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaXNibiI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImlzYm4uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaXNibi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpc2JuLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaXNibi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaXNibi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGlzYm4ubW9kdWxlIC0tPgogIDwhLS0gSVNTTiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaXNzbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaXNzbiI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imlzc24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaXNzbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpc3NuLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaXNzbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaXNzbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGlzc24ubW9kdWxlIC0tPgogIDwhLS0gQmlibGlvSWQgLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpby5jbGFzcy5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InVyaSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJkb2kiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaXNibiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJpc3NuIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxpYnJhcnlvZmNvbmdyZXNzIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InB1Ym51bWJlciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvdGhlciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvdGhlcmNsYXNzIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvaWQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImJpYmxpb2lkIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvaWQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYmlibGlvaWQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvaWQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW8uY2xhc3MuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9pZC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYmlibGlvaWQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBiaWJsaW9pZC5tb2R1bGUgLS0+CiAgPCEtLSBDaXRlQmlibGlvSWQgLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNpdGViaWJsaW9pZC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY2l0ZWJpYmxpb2lkIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2l0ZWJpYmxpb2lkLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNpdGViaWJsaW9pZC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjaXRlYmlibGlvaWQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW8uY2xhc3MuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjaXRlYmlibGlvaWQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNpdGViaWJsaW9pZC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNpdGViaWJsaW9pZC5tb2R1bGUgLS0+CiAgPCEtLSBCaWJsaW9Tb3VyY2UgLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb3NvdXJjZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYmlibGlvc291cmNlIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvc291cmNlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb3NvdXJjZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9zb3VyY2UuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW8uY2xhc3MuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9zb3VyY2Uucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJpYmxpb3NvdXJjZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJpYmxpb3NvdXJjZS5tb2R1bGUgLS0+CiAgPCEtLSBCaWJsaW9SZWxhdGlvbiAuLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvcmVsYXRpb24udHlwZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaXN2ZXJzaW9ub2YiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaGFzdmVyc2lvbiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJpc3JlcGxhY2VkYnkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVwbGFjZXMiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaXNyZXF1aXJlZGJ5Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlcXVpcmVzIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImlzcGFydG9mIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imhhc3BhcnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaXNyZWZlcmVuY2VkYnkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVmZXJlbmNlcyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJpc2Zvcm1hdG9mIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imhhc2Zvcm1hdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvdGhlcnR5cGUiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib3RoZXJ0eXBlIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvcmVsYXRpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImJpYmxpb3JlbGF0aW9uIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvcmVsYXRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYmlibGlvcmVsYXRpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvcmVsYXRpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW8uY2xhc3MuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9yZWxhdGlvbi50eXBlLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvcmVsYXRpb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJpYmxpb3JlbGF0aW9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYmlibGlvcmVsYXRpb24ubW9kdWxlIC0tPgogIDwhLS0gQmlibGlvQ292ZXJhZ2UgLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb2NvdmVyYWdlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJiaWJsaW9jb3ZlcmFnZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb2NvdmVyYWdlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb2NvdmVyYWdlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb2NvdmVyYWdlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzcGF0aWFsIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZGNtaXBvaW50Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImlzbzMxNjYiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZGNtaWJveCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0Z24iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3RoZXJzcGF0aWFsIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im90aGVyc3BhdGlhbCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0ZW1wb3JhbCI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImRjbWlwZXJpb2QiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idzNjLWR0ZiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvdGhlcnRlbXBvcmFsIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im90aGVydGVtcG9yYWwiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb2NvdmVyYWdlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBiaWJsaW9jb3ZlcmFnZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJpYmxpb2NvdmVyYWdlLm1vZHVsZSAtLT4KICA8IS0tIEludlBhcnROdW1iZXIgLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImludnBhcnRudW1iZXIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImludnBhcnRudW1iZXIiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbnZwYXJ0bnVtYmVyLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGludnBhcnRudW1iZXIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW52cGFydG51bWJlci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImludnBhcnRudW1iZXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGludnBhcnRudW1iZXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBpbnZwYXJ0bnVtYmVyLm1vZHVsZSAtLT4KICA8IS0tIElzc3VlTnVtIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imlzc3VlbnVtLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJpc3N1ZW51bSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imlzc3VlbnVtLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGlzc3VlbnVtLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imlzc3VlbnVtLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaXNzdWVudW0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGlzc3VlbnVtLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaXNzdWVudW0ubW9kdWxlIC0tPgogIDwhLS0gTGVnYWxOb3RpY2UgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGVnYWxub3RpY2Uucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImxlZ2Fsbm90aWNlIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibGVnYWxub3RpY2UubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxlZ2Fsbm90aWNlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGxlZ2Fsbm90aWNlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxlZ2Fsbm90aWNlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGVnYWxub3RpY2Uucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGxlZ2Fsbm90aWNlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbGVnYWxub3RpY2UubW9kdWxlIC0tPgogIDwhLS0gTW9kZVNwZWMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibW9kZXNwZWMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im1vZGVzcGVjIiBzdWJzdGl0dXRpb25Hcm91cD0iZG9jaW5mby5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9kZXNwZWMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbW9kZXNwZWMuZWxlbWVudCAtLT4KICA8IS0tCiAgICBBcHBsaWNhdGlvbjogVHlwZSBvZiBhY3Rpb24gcmVxdWlyZWQgZm9yIGNvbXBsZXRpb24KICAgIG9mIHRoZSBsaW5rcyB0byB3aGljaCB0aGUgTW9kZVNwZWMgaXMgcmVsZXZhbnQgKGUuZy4sCiAgICByZXRyaWV2YWwgcXVlcnkpCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1vZGVzcGVjLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhcHBsaWNhdGlvbiIgdHlwZT0ibm90YXRpb24uY2xhc3MiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vZGVzcGVjLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtb2Rlc3BlYy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1vZGVzcGVjLm1vZHVsZSAtLT4KICA8IS0tIE9yZ05hbWUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9yZ25hbWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im9yZ25hbWUiIHN1YnN0aXR1dGlvbkdyb3VwPSJnZW4uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9yZ25hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygb3JnbmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvcmduYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNvcnBvcmF0aW9uIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5vbnByb2ZpdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjb25zb3J0aXVtIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImluZm9ybWFsIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im90aGVyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im90aGVyY2xhc3MiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9yZ25hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG9yZ25hbWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBvcmduYW1lLm1vZHVsZSAtLT4KICA8IS0tIE90aGVyQ3JlZGl0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im90aGVyY3JlZGl0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJvdGhlcmNyZWRpdCIgc3Vic3RpdHV0aW9uR3JvdXA9ImRvY2luZm8uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwZXJzb25uYW1lIi8+CiAgICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGVyc29uLmlkZW50Lm1peCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InBlcnNvbmJsdXJiIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImVtYWlsIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFkZHJlc3MiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib3RoZXJjcmVkaXQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygb3RoZXJjcmVkaXQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib3RoZXJjcmVkaXQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZ3JhcGhpY2Rlc2lnbmVyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InByb2R1Y3Rpb25lZGl0b3IiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY29weWVkaXRvciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0ZWNobmljYWxlZGl0b3IiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idHJhbnNsYXRvciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvdGhlciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib3RoZXJjcmVkaXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG90aGVyY3JlZGl0LmF0dGxpc3QgLS0+CiAgPCEtLSAoc2VlICJQZXJzb25hbCBpZGVudGl0eSBlbGVtZW50cyIgZm9yICVwZXJzb24uaWRlbnQubWl4OykgLS0+CiAgPCEtLSBlbmQgb2Ygb3RoZXJjcmVkaXQubW9kdWxlIC0tPgogIDwhLS0gUGFnZU51bXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGFnZW51bXMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InBhZ2VudW1zIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFnZW51bXMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcGFnZW51bXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGFnZW51bXMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYWdlbnVtcy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcGFnZW51bXMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwYWdlbnVtcy5tb2R1bGUgLS0+CiAgPCEtLSBQZXJzb25hbCBpZGVudGl0eSBlbGVtZW50cyAuLi4uLi4uIC0tPgogIDwhLS0KICAgIFRoZXNlIGVsZW1lbnRzIGFyZSB1c2VkIG9ubHkgd2l0aGluIEF1dGhvciwgRWRpdG9yLCBhbmQKICAgIE90aGVyQ3JlZGl0LgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb250cmliLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb250cmliIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29udHJpYi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb250cmliLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbnRyaWIuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb250cmliLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjb250cmliLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29udHJpYi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZpcnN0bmFtZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZmlyc3RuYW1lIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZmlyc3RuYW1lLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGZpcnN0bmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmaXJzdG5hbWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmaXJzdG5hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGZpcnN0bmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGZpcnN0bmFtZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imhvbm9yaWZpYy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaG9ub3JpZmljIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaG9ub3JpZmljLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGhvbm9yaWZpYy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJob25vcmlmaWMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJob25vcmlmaWMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGhvbm9yaWZpYy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGhvbm9yaWZpYy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxpbmVhZ2Uucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImxpbmVhZ2UiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5lYWdlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGxpbmVhZ2UuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGluZWFnZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmVhZ2Uucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGxpbmVhZ2UuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBsaW5lYWdlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib3RoZXJuYW1lLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJvdGhlcm5hbWUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvdGhlcm5hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygb3RoZXJuYW1lLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im90aGVybmFtZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im90aGVybmFtZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygb3RoZXJuYW1lLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygb3RoZXJuYW1lLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3VybmFtZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3VybmFtZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN1cm5hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc3VybmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdXJuYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3VybmFtZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc3VybmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHN1cm5hbWUubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIHBlcnNvbi5pZGVudC5tb2R1bGUgLS0+CiAgPCEtLSBQcmludEhpc3RvcnkgLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcmludGhpc3Rvcnkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InByaW50aGlzdG9yeSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByaW50aGlzdG9yeS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwcmludGhpc3RvcnkuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJpbnRoaXN0b3J5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJpbnRoaXN0b3J5LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwcmludGhpc3RvcnkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwcmludGhpc3RvcnkubW9kdWxlIC0tPgogIDwhLS0gUHJvZHVjdE5hbWUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJvZHVjdG5hbWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InByb2R1Y3RuYW1lIiBzdWJzdGl0dXRpb25Hcm91cD0iZG9jaW5mby5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJvZHVjdG5hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcHJvZHVjdG5hbWUuZWxlbWVudCAtLT4KICA8IS0tIENsYXNzOiBNb3JlIHByZWNpc2VseSBpZGVudGlmaWVzIHRoZSBpdGVtIHRoZSBlbGVtZW50IG5hbWVzIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcm9kdWN0bmFtZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIGRlZmF1bHQ9InRyYWRlIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VydmljZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0cmFkZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZWdpc3RlcmVkIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNvcHlyaWdodCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJvZHVjdG5hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHByb2R1Y3RuYW1lLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcHJvZHVjdG5hbWUubW9kdWxlIC0tPgogIDwhLS0gUHJvZHVjdE51bWJlciAuLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJvZHVjdG51bWJlci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icHJvZHVjdG51bWJlciIgc3Vic3RpdHV0aW9uR3JvdXA9ImRvY2luZm8uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByb2R1Y3RudW1iZXIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcHJvZHVjdG51bWJlci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcm9kdWN0bnVtYmVyLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJvZHVjdG51bWJlci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcHJvZHVjdG51bWJlci5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHByb2R1Y3RudW1iZXIubW9kdWxlIC0tPgogIDwhLS0gUHViRGF0ZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHViZGF0ZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icHViZGF0ZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InB1YmRhdGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcHViZGF0ZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwdWJkYXRlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHViZGF0ZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcHViZGF0ZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHB1YmRhdGUubW9kdWxlIC0tPgogIDwhLS0gUHVibGlzaGVyIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHVibGlzaGVyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJwdWJsaXNoZXIiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwdWJsaXNoZXJuYW1lIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJhZGRyZXNzIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InB1Ymxpc2hlci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwdWJsaXNoZXIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHVibGlzaGVyLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHVibGlzaGVyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwdWJsaXNoZXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwdWJsaXNoZXIubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwdWJsaXNoZXJuYW1lLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJwdWJsaXNoZXJuYW1lIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHVibGlzaGVybmFtZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwdWJsaXNoZXJuYW1lLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InB1Ymxpc2hlcm5hbWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwdWJsaXNoZXJuYW1lLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwdWJsaXNoZXJuYW1lLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcHVibGlzaGVybmFtZS5tb2R1bGUgLS0+CiAgPCEtLSBBZGRyZXNzIChkZWZpbmVkIGVsc2V3aGVyZSBpbiB0aGlzIHNlY3Rpb24pIC0tPgogIDwhLS0gZW5kIG9mIHB1Ymxpc2hlci5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIFB1YnNOdW1iZXIgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InB1YnNudW1iZXIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InB1YnNudW1iZXIiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwdWJzbnVtYmVyLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHB1YnNudW1iZXIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHVic251bWJlci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InB1YnNudW1iZXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHB1YnNudW1iZXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwdWJzbnVtYmVyLm1vZHVsZSAtLT4KICA8IS0tIFJlbGVhc2VJbmZvIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlbGVhc2VpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWxlYXNlaW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlbGVhc2VpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlbGVhc2VpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlbGVhc2VpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVsZWFzZWluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlbGVhc2VpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVsZWFzZWluZm8ubW9kdWxlIC0tPgogIDwhLS0gUmV2SGlzdG9yeSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmV2aGlzdG9yeS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmV2aGlzdG9yeSIgc3Vic3RpdHV0aW9uR3JvdXA9ImRvY2luZm8uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZXZpc2lvbiIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXZoaXN0b3J5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJldmhpc3RvcnkuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmV2aGlzdG9yeS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJldmhpc3Rvcnkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJldmhpc3RvcnkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZXZoaXN0b3J5Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmV2aXNpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJldmlzaW9uIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icmV2bnVtYmVyIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJkYXRlIi8+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iYXV0aG9yIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImF1dGhvcmluaXRpYWxzIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZXZyZW1hcmsiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0icmV2ZGVzY3JpcHRpb24iLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmV2aXNpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmV2aXNpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmV2aXNpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXZpc2lvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmV2aXNpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZXZpc2lvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJldm51bWJlci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmV2bnVtYmVyIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmV2bnVtYmVyLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJldm51bWJlci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZXZudW1iZXIuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXZudW1iZXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJldm51bWJlci5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJldm51bWJlci5tb2R1bGUgLS0+CiAgPCEtLSBEYXRlIChkZWZpbmVkIGVsc2V3aGVyZSBpbiB0aGlzIHNlY3Rpb24pIC0tPgogIDwhLS0gQXV0aG9ySW5pdGlhbHMgKGRlZmluZWQgZWxzZXdoZXJlIGluIHRoaXMgc2VjdGlvbikgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJldnJlbWFyay5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmV2cmVtYXJrIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmV2cmVtYXJrLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJldnJlbWFyay5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZXZyZW1hcmsuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXZyZW1hcmsucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJldnJlbWFyay5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJldnJlbWFyay5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJldmRlc2NyaXB0aW9uLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZXZkZXNjcmlwdGlvbiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZXZkZXNjcmlwdGlvbi5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmV2ZGVzY3JpcHRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmV2ZGVzY3JpcHRpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmV2ZGVzY3JpcHRpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXZkZXNjcmlwdGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmV2ZGVzY3JpcHRpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZXZkZXNjcmlwdGlvbi5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgcmV2aGlzdG9yeS5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIFNlcmllc1ZvbE51bXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlcmllc3ZvbG51bXMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNlcmllc3ZvbG51bXMiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZXJpZXN2b2xudW1zLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlcmllc3ZvbG51bXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VyaWVzdm9sbnVtcy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlcmllc3ZvbG51bXMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlcmllc3ZvbG51bXMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzZXJpZXN2b2xudW1zLm1vZHVsZSAtLT4KICA8IS0tIFZvbHVtZU51bSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InZvbHVtZW51bS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idm9sdW1lbnVtIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idm9sdW1lbnVtLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHZvbHVtZW51bS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ2b2x1bWVudW0uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2b2x1bWVudW0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHZvbHVtZW51bS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHZvbHVtZW51bS5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gZW5kIG9mIGRvY2luZm8uY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gSW5saW5lLCBsaW5rLCBhbmQgdWJpcXVpdG91cyBlbGVtZW50cyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIFRlY2huaWNhbCBhbmQgY29tcHV0ZXIgdGVybXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFjY2VsLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhY2NlbCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWNjZWwuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYWNjZWwuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYWNjZWwuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhY2NlbC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYWNjZWwuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhY2NlbC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFjdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYWN0aW9uIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWN0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFjdGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhY3Rpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFjdGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYWN0aW9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYWN0aW9uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXBwbGljYXRpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImFwcGxpY2F0aW9uIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXBwbGljYXRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYXBwbGljYXRpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXBwbGljYXRpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaGFyZHdhcmUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic29mdHdhcmUiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXBwbGljYXRpb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGFwcGxpY2F0aW9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYXBwbGljYXRpb24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjbGFzc25hbWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNsYXNzbmFtZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2xhc3NuYW1lLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNsYXNzbmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjbGFzc25hbWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjbGFzc25hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNsYXNzbmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNsYXNzbmFtZS5tb2R1bGUgLS0+CiAgPCEtLQogICAgQ08gaXMgYSBjYWxsb3V0IGFyZWEgb2YgdGhlIExpbmVDb2x1bW4gdW5pdCB0eXBlIChhIHNpbmdsZSBjaGFyYWN0ZXIKICAgIHBvc2l0aW9uKTsgdGhlIHBvc2l0aW9uIGlzIGRpcmVjdGx5IGluZGljYXRlZCBieSB0aGUgbG9jYXRpb24gb2YgQ08uCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjbyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvLmVsZW1lbnQgLS0+CiAgPCEtLSBidWcgbnVtYmVyL3N5bWJvbCBvdmVycmlkZSBvciBpbml0aWFsaXphdGlvbiAtLT4KICA8IS0tIHRvIGFueSByZWxhdGVkIGluZm9ybWF0aW9uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlua2VuZHMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpZHJlcS5jb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY28uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjby5tb2R1bGUgLS0+CiAgPCEtLSBDT1JFRiBpcyBhIHJlZmVyZW5jZSB0byBhIENPIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb3JlZi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29yZWYiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb3JlZi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb3JlZi5lbGVtZW50IC0tPgogIDwhLS0gYnVnIG51bWJlci9zeW1ib2wgb3ZlcnJpZGUgb3IgaW5pdGlhbGl6YXRpb24gLS0+CiAgPCEtLSB0byBhbnkgcmVsYXRlZCBpbmZvcm1hdGlvbiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29yZWYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmtlbmRyZXEuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb3JlZi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY29yZWYuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb3JlZi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbW1hbmQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNvbW1hbmQiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tYW5kLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvbW1hbmQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29tbWFuZC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbWFuZC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY29tbWFuZC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvbW1hbmQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb21wdXRlcm91dHB1dC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29tcHV0ZXJvdXRwdXQiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjbyIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tcHV0ZXJvdXRwdXQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY29tcHV0ZXJvdXRwdXQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29tcHV0ZXJvdXRwdXQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbXB1dGVyb3V0cHV0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjb21wdXRlcm91dHB1dC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvbXB1dGVyb3V0cHV0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZGF0YWJhc2Uucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImRhdGFiYXNlIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZGF0YWJhc2UuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZGF0YWJhc2UuZWxlbWVudCAtLT4KICA8IS0tIENsYXNzOiBUeXBlIG9mIGRhdGFiYXNlIHRoZSBlbGVtZW50IG5hbWVzOyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJkYXRhYmFzZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJuYW1lIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRhYmxlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImZpZWxkIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImtleTEiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ia2V5MiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZWNvcmQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaW5kZXgiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idmlldyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwcmltYXJ5a2V5Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY29uZGFyeWtleSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJmb3JlaWdua2V5Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImFsdGtleSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwcm9jZWR1cmUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZGF0YXR5cGUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY29uc3RyYWludCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJydWxlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InVzZXIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZ3JvdXAiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZGF0YWJhc2Uucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGRhdGFiYXNlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZGF0YWJhc2UubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlbWFpbC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZW1haWwiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlbWFpbC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBlbWFpbC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlbWFpbC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVtYWlsLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBlbWFpbC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGVtYWlsLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZW52YXIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImVudmFyIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlbnZhci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBlbnZhci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlbnZhci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVudmFyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBlbnZhci5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGVudmFyLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZXJyb3Jjb2RlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJlcnJvcmNvZGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVycm9yY29kZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBlcnJvcmNvZGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZXJyb3Jjb2RlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlcnJvcmNvZGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGVycm9yY29kZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGVycm9yY29kZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVycm9ybmFtZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZXJyb3JuYW1lIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlcnJvcm5hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZXJyb3JuYW1lLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVycm9ybmFtZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVycm9ybmFtZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZXJyb3JuYW1lLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZXJyb3JuYW1lLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZXJyb3J0ZXh0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJlcnJvcnRleHQiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVycm9ydGV4dC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBlcnJvcnRleHQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZXJyb3J0ZXh0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZXJyb3J0ZXh0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBlcnJvcnRleHQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBlcnJvcnRleHQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlcnJvcnR5cGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImVycm9ydHlwZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZXJyb3J0eXBlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGVycm9ydHlwZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlcnJvcnR5cGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlcnJvcnR5cGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGVycm9ydHlwZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGVycm9ydHlwZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZpbGVuYW1lLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJmaWxlbmFtZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZpbGVuYW1lLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGZpbGVuYW1lLmVsZW1lbnQgLS0+CiAgPCEtLSBDbGFzczogVHlwZSBvZiBmaWxlbmFtZSB0aGUgZWxlbWVudCBuYW1lczsgbm8gZGVmYXVsdCAtLT4KICA8IS0tCiAgICBQYXRoOiBTZWFyY2ggcGF0aCAocG9zc2libHkgc3lzdGVtLXNwZWNpZmljKSBpbiB3aGljaAogICAgZmlsZSBjYW4gYmUgZm91bmQKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZmlsZW5hbWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaGVhZGVyZmlsZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwYXJ0aXRpb24iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZGV2aWNlZmlsZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsaWJyYXJ5ZmlsZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJkaXJlY3RvcnkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZXh0ZW5zaW9uIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InN5bWxpbmsiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icGF0aCIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmaWxlbmFtZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZmlsZW5hbWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBmaWxlbmFtZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZ1bmN0aW9uLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJmdW5jdGlvbiIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZ1bmN0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGZ1bmN0aW9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZ1bmN0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmdW5jdGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZnVuY3Rpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBmdW5jdGlvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imd1aWJ1dHRvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZ3VpYnV0dG9uIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhY2NlbCIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ3VpYnV0dG9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGd1aWJ1dHRvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJndWlidXR0b24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imd1aWJ1dHRvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZ3VpYnV0dG9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZ3VpYnV0dG9uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ3VpaWNvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZ3VpaWNvbiIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYWNjZWwiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imd1aWljb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZ3VpaWNvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJndWlpY29uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJndWlpY29uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBndWlpY29uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZ3VpaWNvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imd1aWxhYmVsLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJndWlsYWJlbCIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYWNjZWwiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imd1aWxhYmVsLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGd1aWxhYmVsLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imd1aWxhYmVsLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJndWlsYWJlbC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZ3VpbGFiZWwuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBndWlsYWJlbC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imd1aW1lbnUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Imd1aW1lbnUiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFjY2VsIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJndWltZW51LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGd1aW1lbnUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ3VpbWVudS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ3VpbWVudS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZ3VpbWVudS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGd1aW1lbnUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJndWltZW51aXRlbS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZ3VpbWVudWl0ZW0iIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFjY2VsIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJndWltZW51aXRlbS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBndWltZW51aXRlbS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJndWltZW51aXRlbS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ3VpbWVudWl0ZW0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGd1aW1lbnVpdGVtLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZ3VpbWVudWl0ZW0ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJndWlzdWJtZW51LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJndWlzdWJtZW51IiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhY2NlbCIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ3Vpc3VibWVudS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBndWlzdWJtZW51LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imd1aXN1Ym1lbnUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imd1aXN1Ym1lbnUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGd1aXN1Ym1lbnUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBndWlzdWJtZW51Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaGFyZHdhcmUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImhhcmR3YXJlIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaGFyZHdhcmUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaGFyZHdhcmUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaGFyZHdhcmUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImhhcmR3YXJlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBoYXJkd2FyZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGhhcmR3YXJlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW50ZXJmYWNlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbnRlcmZhY2UiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFjY2VsIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbnRlcmZhY2UuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW50ZXJmYWNlLmVsZW1lbnQgLS0+CiAgPCEtLSBDbGFzczogVHlwZSBvZiB0aGUgSW50ZXJmYWNlIGl0ZW07IG5vIGRlZmF1bHQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImludGVyZmFjZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW50ZXJmYWNlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpbnRlcmZhY2UuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBpbnRlcmZhY2UubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJrZXljYXAucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImtleWNhcCIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImtleWNhcC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBrZXljYXAuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ia2V5Y2FwLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmdW5jdGlvbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImFsdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjb250cm9sIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNoaWZ0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im1ldGEiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZXNjYXBlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImVudGVyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRhYiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJiYWNrc3BhY2UiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY29tbWFuZCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvcHRpb24iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic3BhY2UiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZGVsZXRlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imluc2VydCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ1cCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJkb3duIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxlZnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmlnaHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaG9tZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJlbmQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icGFnZXVwIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InBhZ2Vkb3duIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im90aGVyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im90aGVyZnVuY3Rpb24iLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ia2V5Y2FwLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBrZXljYXAuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBrZXljYXAubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJrZXljb2RlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJrZXljb2RlIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJrZXljb2RlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGtleWNvZGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ia2V5Y29kZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImtleWNvZGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGtleWNvZGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBrZXljb2RlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ia2V5Y29tYm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImtleWNvbWJvIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJrZXljYXAiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImtleWNvbWJvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJrZXlzeW0iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im1vdXNlYnV0dG9uIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJrZXljb21iby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBrZXljb21iby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJrZXljb21iby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImtleWFjdGlvbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ia2V5Y29tYm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGtleWNvbWJvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Yga2V5Y29tYm8ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJrZXlzeXNtLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJrZXlzeW0iIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImtleXN5bS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBrZXlzeW0uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ia2V5c3ltLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ia2V5c3lzbS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Yga2V5c3ltLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Yga2V5c3ltLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGluZWFubm90YXRpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImxpbmVhbm5vdGF0aW9uIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGluZWFubm90YXRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbGluZWFubm90YXRpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGluZWFubm90YXRpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5lYW5ub3RhdGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbGluZWFubm90YXRpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBsaW5lYW5ub3RhdGlvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxpdGVyYWwucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImxpdGVyYWwiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaXRlcmFsLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGxpdGVyYWwuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGl0ZXJhbC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGl0ZXJhbC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbGl0ZXJhbC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGxpdGVyYWwubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb2RlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb2RlIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29kZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb2RlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvZGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Imxhbmd1YWdlIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb2RlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjb2RlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29kZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbnN0YW50LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb25zdGFudCIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29uc3RhbnQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY29uc3RhbnQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29uc3RhbnQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGltaXQiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbnN0YW50LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjb25zdGFudC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvbnN0YW50Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idmFybmFtZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idmFybmFtZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idmFybmFtZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB2YXJuYW1lLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InZhcm5hbWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2YXJuYW1lLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB2YXJuYW1lLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdmFybmFtZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1hcmt1cC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibWFya3VwIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtYXJrdXAuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbWFya3VwLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1hcmt1cC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1hcmt1cC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbWFya3VwLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbWFya3VwLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibWVkaWFsYWJlbC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibWVkaWFsYWJlbCIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWVkaWFsYWJlbC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtZWRpYWxhYmVsLmVsZW1lbnQgLS0+CiAgPCEtLSBDbGFzczogVHlwZSBvZiBtZWRpdW0gbmFtZWQgYnkgdGhlIGVsZW1lbnQ7IG5vIGRlZmF1bHQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1lZGlhbGFiZWwuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2FydHJpZGdlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNkcm9tIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImRpc2siLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idGFwZSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWVkaWFsYWJlbC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbWVkaWFsYWJlbC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1lZGlhbGFiZWwubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtZW51Y2hvaWNlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtZW51Y2hvaWNlIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJzaG9ydGN1dCIvPgogICAgICAgIDx4czpjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJndWlidXR0b24iLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iZ3VpaWNvbiIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJndWlsYWJlbCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJndWltZW51Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Imd1aW1lbnVpdGVtIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Imd1aXN1Ym1lbnUiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iaW50ZXJmYWNlIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1lbnVjaG9pY2UuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbWVudWNob2ljZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtZW51Y2hvaWNlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtZW51Y2hvaWNlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtZW51Y2hvaWNlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbWVudWNob2ljZS5tb2R1bGUgLS0+CiAgPCEtLSBTZWUgYWxzbyBLZXlDb21ibyAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2hvcnRjdXQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNob3J0Y3V0Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJrZXljYXAiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImtleWNvbWJvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJrZXlzeW0iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im1vdXNlYnV0dG9uIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzaG9ydGN1dC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzaG9ydGN1dC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzaG9ydGN1dC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImtleWFjdGlvbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2hvcnRjdXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNob3J0Y3V0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2hvcnRjdXQubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIG1lbnVjaG9pY2UuY29udGVudC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1vdXNlYnV0dG9uLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtb3VzZWJ1dHRvbiIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW91c2VidXR0b24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbW91c2VidXR0b24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibW91c2VidXR0b24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vdXNlYnV0dG9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtb3VzZWJ1dHRvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1vdXNlYnV0dG9uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNndGV4dC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibXNndGV4dCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjb21wb25lbnQubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ3RleHQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbXNndGV4dC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtc2d0ZXh0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNndGV4dC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbXNndGV4dC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1zZ3RleHQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvcHRpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im9wdGlvbiIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9wdGlvbi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBvcHRpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib3B0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib3B0aW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBvcHRpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBvcHRpb24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvcHRpb25hbC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ib3B0aW9uYWwiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvcHRpb25hbC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBvcHRpb25hbC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvcHRpb25hbC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9wdGlvbmFsLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBvcHRpb25hbC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG9wdGlvbmFsLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGFyYW1ldGVyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJwYXJhbWV0ZXIiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYXJhbWV0ZXIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcGFyYW1ldGVyLmVsZW1lbnQgLS0+CiAgPCEtLSBDbGFzczogVHlwZSBvZiB0aGUgUGFyYW1ldGVyOyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwYXJhbWV0ZXIuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY29tbWFuZCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJmdW5jdGlvbiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvcHRpb24iLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFyYW1ldGVyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwYXJhbWV0ZXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwYXJhbWV0ZXIubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcm9tcHQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InByb21wdCIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY28iLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByb21wdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwcm9tcHQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJvbXB0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcm9tcHQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHByb21wdC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHByb21wdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByb3BlcnR5LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJwcm9wZXJ0eSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByb3BlcnR5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHByb3BlcnR5LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByb3BlcnR5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcm9wZXJ0eS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcHJvcGVydHkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwcm9wZXJ0eS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlcGxhY2VhYmxlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZXBsYWNlYWJsZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluay5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJvcHRpb25hbCIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJhc2UuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9Im90aGVyLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZWdyYXBoaWMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZW1lZGlhb2JqZWN0Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjbyIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVwbGFjZWFibGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVwbGFjZWFibGUuZWxlbWVudCAtLT4KICA8IS0tCiAgICBDbGFzczogVHlwZSBvZiBpbmZvcm1hdGlvbiB0aGUgZWxlbWVudCByZXByZXNlbnRzOyBubwogICAgZGVmYXVsdAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZXBsYWNlYWJsZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjb21tYW5kIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImZ1bmN0aW9uIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im9wdGlvbiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwYXJhbWV0ZXIiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlcGxhY2VhYmxlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZXBsYWNlYWJsZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlcGxhY2VhYmxlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmV0dXJudmFsdWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJldHVybnZhbHVlIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXR1cm52YWx1ZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZXR1cm52YWx1ZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZXR1cm52YWx1ZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJldHVybnZhbHVlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZXR1cm52YWx1ZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJldHVybnZhbHVlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2dtbHRhZy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2dtbHRhZyIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2dtbHRhZy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZ21sdGFnLmVsZW1lbnQgLS0+CiAgPCEtLSBDbGFzczogVHlwZSBvZiBTR01MIGNvbnN0cnVjdCB0aGUgZWxlbWVudCBuYW1lczsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2dtbHRhZy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJhdHRyaWJ1dGUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYXR0dmFsdWUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZWxlbWVudCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJlbmR0YWciLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZW1wdHl0YWciLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZ2VuZW50aXR5Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im51bWNoYXJyZWYiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icGFyYW1lbnRpdHkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icGkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ieG1scGkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic3RhcnR0YWciLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2dtbGNvbW1lbnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icHJlZml4Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5hbWVzcGFjZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsb2NhbG5hbWUiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZXNwYWNlIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZ21sdGFnLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZ21sdGFnLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2dtbHRhZy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN0cnVjdGZpZWxkLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzdHJ1Y3RmaWVsZCIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RydWN0ZmllbGQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc3RydWN0ZmllbGQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3RydWN0ZmllbGQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdHJ1Y3RmaWVsZC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc3RydWN0ZmllbGQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzdHJ1Y3RmaWVsZC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN0cnVjdG5hbWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InN0cnVjdG5hbWUiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0cnVjdG5hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc3RydWN0bmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdHJ1Y3RuYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RydWN0bmFtZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc3RydWN0bmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHN0cnVjdG5hbWUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzeW1ib2wucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InN5bWJvbCIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3ltYm9sLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN5bWJvbC5lbGVtZW50IC0tPgogIDwhLS0gQ2xhc3M6IFR5cGUgb2Ygc3ltYm9sOyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzeW1ib2wuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGltaXQiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN5bWJvbC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc3ltYm9sLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc3ltYm9sLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3lzdGVtaXRlbS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3lzdGVtaXRlbSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFjcm9ueW0iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzeXN0ZW1pdGVtLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN5c3RlbWl0ZW0uZWxlbWVudCAtLT4KICA8IS0tIENsYXNzOiBUeXBlIG9mIHN5c3RlbSBpdGVtIHRoZSBlbGVtZW50IG5hbWVzOyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzeXN0ZW1pdGVtLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNvbnN0YW50Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImV2ZW50Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImV2ZW50aGFuZGxlciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJkb21haW5uYW1lIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImZxZG9tYWlubmFtZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJpcGFkZHJlc3MiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibmV0bWFzayIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJldGhlcmFkZHJlc3MiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZ3JvdXBuYW1lIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxpYnJhcnkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibWFjcm8iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3NuYW1lIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImZpbGVzeXN0ZW0iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVzb3VyY2UiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic3lzdGVtbmFtZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ1c2VybmFtZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJuZXdzZ3JvdXAiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icHJvY2VzcyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZXJ2aWNlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlcnZlciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJkYWVtb24iLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3lzdGVtaXRlbS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc3lzdGVtaXRlbS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHN5c3RlbWl0ZW0ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ1cmkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InVyaSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idXJpLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHVyaS5lbGVtZW50IC0tPgogIDwhLS0gVHlwZTogVHlwZSBvZiBVUkk7IG5vIGRlZmF1bHQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InVyaS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idHlwZSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idXJpLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB1cmkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB1cmkubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2tlbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idG9rZW4iIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRva2VuLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRva2VuLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRva2VuLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9rZW4ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRva2VuLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdG9rZW4ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0eXBlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0eXBlIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0eXBlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHR5cGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idHlwZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InR5cGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHR5cGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0eXBlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idXNlcmlucHV0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ1c2VyaW5wdXQiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjbyIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idXNlcmlucHV0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHVzZXJpbnB1dC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ1c2VyaW5wdXQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InVzZXJpbnB1dC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdXNlcmlucHV0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdXNlcmlucHV0Lm1vZHVsZSAtLT4KICA8IS0tIEdlbmVyYWwgd29yZHMgYW5kIHBocmFzZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFiYnJldi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYWJicmV2IiBzdWJzdGl0dXRpb25Hcm91cD0iZ2VuLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0id29yZC5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhYmJyZXYuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYWJicmV2LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFiYnJldi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFiYnJldi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYWJicmV2LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYWJicmV2Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYWNyb255bS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYWNyb255bSIgc3Vic3RpdHV0aW9uR3JvdXA9Imdlbi5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9IndvcmQuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWNyb255bS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBhY3JvbnltLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFjcm9ueW0uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhY3JvbnltLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhY3JvbnltLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYWNyb255bS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNpdGF0aW9uLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjaXRhdGlvbiIgc3Vic3RpdHV0aW9uR3JvdXA9Imdlbi5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2l0YXRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY2l0YXRpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2l0YXRpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjaXRhdGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY2l0YXRpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjaXRhdGlvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNpdGVyZWZlbnRyeS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY2l0ZXJlZmVudHJ5IiBzdWJzdGl0dXRpb25Hcm91cD0iZ2VuLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZWZlbnRyeXRpdGxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Im1hbnZvbG51bSIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjaXRlcmVmZW50cnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY2l0ZXJlZmVudHJ5LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNpdGVyZWZlbnRyeS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNpdGVyZWZlbnRyeS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY2l0ZXJlZmVudHJ5LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY2l0ZXJlZmVudHJ5Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmZW50cnl0aXRsZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmZW50cnl0aXRsZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZmVudHJ5dGl0bGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmZW50cnl0aXRsZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZlbnRyeXRpdGxlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmZW50cnl0aXRsZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmZW50cnl0aXRsZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZmVudHJ5dGl0bGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJuYW12b2xudW0ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im1hbnZvbG51bSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ3b3JkLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1hbnZvbG51bS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtYW52b2xudW0uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibWFudm9sbnVtLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibmFtdm9sbnVtLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtYW52b2xudW0uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtYW52b2xudW0ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjaXRldGl0bGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNpdGV0aXRsZSIgc3Vic3RpdHV0aW9uR3JvdXA9Imdlbi5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2l0ZXRpdGxlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNpdGV0aXRsZS5lbGVtZW50IC0tPgogIDwhLS0gUHVid29yazogR2VucmUgb2YgcHVibGlzaGVkIHdvcmsgY2l0ZWQ7IG5vIGRlZmF1bHQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNpdGV0aXRsZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icHVid29yayI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImFydGljbGUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYm9vayIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjaGFwdGVyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InBhcnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVmZW50cnkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdGlvbiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJqb3VybmFsIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlcmllcyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZXQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibWFudXNjcmlwdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjZHJvbSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJkdmQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0id2lraSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJnb3BoZXIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYmJzIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImVtYWlsbWVzc2FnZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ3ZWJwYWdlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5ld3Nwb3N0aW5nIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjaXRldGl0bGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNpdGV0aXRsZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNpdGV0aXRsZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVtcGhhc2lzLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJlbXBoYXNpcyIgc3Vic3RpdHV0aW9uR3JvdXA9Imdlbi5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZW1waGFzaXMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZW1waGFzaXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZW1waGFzaXMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlbXBoYXNpcy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZW1waGFzaXMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBlbXBoYXNpcy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZvcmVpZ25waHJhc2Uucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImZvcmVpZ25waHJhc2UiIHN1YnN0aXR1dGlvbkdyb3VwPSJnZW4uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZvcmVpZ25waHJhc2UuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZm9yZWlnbnBocmFzZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmb3JlaWducGhyYXNlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZm9yZWlnbnBocmFzZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZm9yZWlnbnBocmFzZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGZvcmVpZ25waHJhc2UubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJnbG9zc3Rlcm0ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Imdsb3NzdGVybSIgc3Vic3RpdHV0aW9uR3JvdXA9Imdlbi5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3N0ZXJtLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGdsb3NzdGVybS5lbGVtZW50IC0tPgogIDwhLS0gdG8gR2xvc3NFbnRyeSBpZiBHbG9zc3Rlcm0gdXNlZCBpbiB0ZXh0IC0tPgogIDwhLS0KICAgIEJhc2VGb3JtOiBQcm92aWRlcyB0aGUgZm9ybSBvZiBHbG9zc1Rlcm0gdG8gYmUgdXNlZAogICAgZm9yIGluZGV4aW5nCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3NzdGVybS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYmFzZWZvcm0iLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmtlbmQuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJnbG9zc3Rlcm0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGdsb3NzdGVybS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGdsb3NzdGVybS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZpcnN0dGVybS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZmlyc3R0ZXJtIiBzdWJzdGl0dXRpb25Hcm91cD0iZ2VuLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmaXJzdHRlcm0uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZmlyc3R0ZXJtLmVsZW1lbnQgLS0+CiAgPCEtLSB0byBHbG9zc0VudHJ5IG9yIG90aGVyIGV4cGxhbmF0aW9uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmaXJzdHRlcm0uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImJhc2Vmb3JtIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rZW5kLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZmlyc3R0ZXJtLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBmaXJzdHRlcm0uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBmaXJzdHRlcm0ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwaHJhc2Uucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InBocmFzZSIgc3Vic3RpdHV0aW9uR3JvdXA9Imdlbi5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGhyYXNlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHBocmFzZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwaHJhc2UuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwaHJhc2Uucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHBocmFzZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHBocmFzZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InF1b3RlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJxdW90ZSIgc3Vic3RpdHV0aW9uR3JvdXA9Imdlbi5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icXVvdGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcXVvdGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icXVvdGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJxdW90ZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcXVvdGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBxdW90ZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNzc2NyaXB0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzdWJzY3JpcHQiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmsuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZW1waGFzaXMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InJlcGxhY2VhYmxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzeW1ib2wiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZWdyYXBoaWMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZW1lZGlhb2JqZWN0Ii8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iYmFzZS5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ib3RoZXIuY2hhci5jbGFzcyIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3Vic2NyaXB0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN1YnNjcmlwdC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdWJzY3JpcHQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzc3NjcmlwdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc3Vic2NyaXB0LmF0dGxpc3QgLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3VwZXJzY3JpcHQiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmsuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZW1waGFzaXMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InJlcGxhY2VhYmxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzeW1ib2wiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZWdyYXBoaWMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZW1lZGlhb2JqZWN0Ii8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iYmFzZS5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ib3RoZXIuY2hhci5jbGFzcyIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3VwZXJzY3JpcHQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc3VwZXJzY3JpcHQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3VwZXJzY3JpcHQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzc3NjcmlwdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc3VwZXJzY3JpcHQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzc3NjcmlwdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRyYWRlbWFyay5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idHJhZGVtYXJrIiBzdWJzdGl0dXRpb25Hcm91cD0iZ2VuLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmsuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0idGVjaC5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iYmFzZS5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ib3RoZXIuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lZ3JhcGhpYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lbWVkaWFvYmplY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImVtcGhhc2lzIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0cmFkZW1hcmsuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdHJhZGVtYXJrLmVsZW1lbnQgLS0+CiAgPCEtLSBDbGFzczogTW9yZSBwcmVjaXNlbHkgaWRlbnRpZmllcyB0aGUgaXRlbSB0aGUgZWxlbWVudCBuYW1lcyAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idHJhZGVtYXJrLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgZGVmYXVsdD0idHJhZGUiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZXJ2aWNlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRyYWRlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlZ2lzdGVyZWQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY29weXJpZ2h0Ii8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0cmFkZW1hcmsucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRyYWRlbWFyay5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHRyYWRlbWFyay5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IndvcmRhc3dvcmQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9IndvcmRhc3dvcmQiIHN1YnN0aXR1dGlvbkdyb3VwPSJnZW4uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ3b3JkLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9IndvcmRhc3dvcmQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygd29yZGFzd29yZC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ3b3JkYXN3b3JkLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0id29yZGFzd29yZC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygd29yZGFzd29yZC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHdvcmRhc3dvcmQubW9kdWxlIC0tPgogIDwhLS0gTGlua3MgYW5kIGNyb3NzLXJlZmVyZW5jZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGluay5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibGluayIgc3Vic3RpdHV0aW9uR3JvdXA9ImxpbmsuY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmsuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbGluay5lbGVtZW50IC0tPgogIDwhLS0KICAgIEVuZHRlcm06IElEIG9mIGVsZW1lbnQgY29udGFpbmluZyB0ZXh0IHRoYXQgaXMgdG8gYmUKICAgIGZldGNoZWQgZnJvbSBlbHNld2hlcmUgaW4gdGhlIGRvY3VtZW50IHRvIGFwcGVhciBhcwogICAgdGhlIGNvbnRlbnQgb2YgdGhpcyBlbGVtZW50CiAgLS0+CiAgPCEtLSB0byBsaW5rZWQtdG8gb2JqZWN0IC0tPgogIDwhLS0gVHlwZTogRnJlZWx5IGFzc2lnbmFibGUgcGFyYW1ldGVyIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsaW5rLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJlbmR0ZXJtIiB0eXBlPSJ4czpJRFJFRiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ4cmVmc3R5bGUiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idHlwZSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlua2VuZHJlcS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imxpbmsucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGxpbmsuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBsaW5rLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib2xpbmsucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im9saW5rIiBzdWJzdGl0dXRpb25Hcm91cD0ibGluay5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib2xpbmsuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygb2xpbmsuZWxlbWVudCAtLT4KICA8IS0tIFRhcmdldERvY0VudDogTmFtZSBvZiBhbiBlbnRpdHkgdG8gYmUgdGhlIHRhcmdldCBvZiB0aGUgbGluayAtLT4KICA8IS0tCiAgICBMaW5rTW9kZTogSUQgb2YgYSBNb2RlU3BlYyBjb250YWluaW5nIGluc3RydWN0aW9ucyBmb3IKICAgIG9wZXJhdGluZyBvbiB0aGUgZW50aXR5IG5hbWVkIGJ5IFRhcmdldERvY0VudAogIC0tPgogIDwhLS0gTG9jYWxJbmZvOiBJbmZvcm1hdGlvbiB0aGF0IG1heSBiZSBwYXNzZWQgdG8gTW9kZVNwZWMgLS0+CiAgPCEtLSBUeXBlOiBGcmVlbHkgYXNzaWduYWJsZSBwYXJhbWV0ZXIgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9saW5rLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0YXJnZXRkb2NlbnQiIHR5cGU9InhzOkVOVElUWSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsaW5rbW9kZSIgdHlwZT0ieHM6SURSRUYiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibG9jYWxpbmZvIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InR5cGUiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idGFyZ2V0ZG9jIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InRhcmdldHB0ciIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ4cmVmc3R5bGUiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9saW5rLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBvbGluay5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG9saW5rLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idWxpbmsucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InVsaW5rIiBzdWJzdGl0dXRpb25Hcm91cD0ibGluay5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idWxpbmsuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdWxpbmsuZWxlbWVudCAtLT4KICA8IS0tIFVSTDogdW5pZm9ybSByZXNvdXJjZSBsb2NhdG9yOyB0aGUgdGFyZ2V0IG9mIHRoZSBVTGluayAtLT4KICA8IS0tIFR5cGU6IEZyZWVseSBhc3NpZ25hYmxlIHBhcmFtZXRlciAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idWxpbmsuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InVybCIgdXNlPSJyZXF1aXJlZCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InhyZWZzdHlsZSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idWxpbmsucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHVsaW5rLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdWxpbmsubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmb290bm90ZXJlZi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZm9vdG5vdGVyZWYiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4cmVmLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmb290bm90ZXJlZi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBmb290bm90ZXJlZi5lbGVtZW50IC0tPgogIDwhLS0gdG8gZm9vdG5vdGUgY29udGVudCBzdXBwbGllZCBlbHNld2hlcmUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZvb3Rub3RlcmVmLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlua2VuZHJlcS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZm9vdG5vdGVyZWYucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGZvb3Rub3RlcmVmLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZm9vdG5vdGVyZWYubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ4cmVmLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ4cmVmIiBzdWJzdGl0dXRpb25Hcm91cD0ieHJlZi5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ieHJlZi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB4cmVmLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgRW5kdGVybTogSUQgb2YgZWxlbWVudCBjb250YWluaW5nIHRleHQgdGhhdCBpcyB0byBiZQogICAgZmV0Y2hlZCBmcm9tIGVsc2V3aGVyZSBpbiB0aGUgZG9jdW1lbnQgdG8gYXBwZWFyIGFzCiAgICB0aGUgY29udGVudCBvZiB0aGlzIGVsZW1lbnQKICAtLT4KICA8IS0tIHRvIGxpbmtlZC10byBvYmplY3QgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InhyZWYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImVuZHRlcm0iIHR5cGU9InhzOklEUkVGIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InhyZWZzdHlsZSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlua2VuZHJlcS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InhyZWYucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHhyZWYuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB4cmVmLm1vZHVsZSAtLT4KICA8IS0tIFViaXF1aXRvdXMgZWxlbWVudHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFuY2hvci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYW5jaG9yIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYW5jaG9yLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFuY2hvci5lbGVtZW50IC0tPgogIDwhLS0gcmVxdWlyZWQgLS0+CiAgPCEtLSByZXBsYWNlcyBMYW5nIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhbmNob3IuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpZHJlcS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhZ2VudW0uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZW1hcC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InhyZWZsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJldmlzaW9uZmxhZy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVmZmVjdGl2aXR5LmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYW5jaG9yLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhbmNob3IuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhbmNob3IubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiZWdpbnBhZ2Uucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImJlZ2lucGFnZSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJlZ2lucGFnZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBiZWdpbnBhZ2UuZWxlbWVudCAtLT4KICA8IS0tIFBhZ2VOdW06IE51bWJlciBvZiBwYWdlIHRoYXQgYmVnaW5zIGF0IHRoaXMgcG9pbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJlZ2lucGFnZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhZ2VudW0uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiZWdpbnBhZ2Uucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJlZ2lucGFnZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJlZ2lucGFnZS5tb2R1bGUgLS0+CiAgPCEtLQogICAgSW5kZXhUZXJtcyBhcHBlYXIgaW4gdGhlIHRleHQgZmxvdyBmb3IgZ2VuZXJhdGluZyBvciBsaW5raW5nIGFuCiAgICBpbmRleC4KICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5kZXh0ZXJtLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbmRleHRlcm0iIHN1YnN0aXR1dGlvbkdyb3VwPSJuZHh0ZXJtLmNsYXNzIi8+CiAgPCEtLSBlbmQgb2YgaW5kZXh0ZXJtLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgU2NvcGU6IEluZGljYXRlcyB3aGljaCBnZW5lcmF0ZWQgaW5kaWNlcyB0aGUgSW5kZXhUZXJtCiAgICBzaG91bGQgYXBwZWFyIGluOiBHbG9iYWwgKHdob2xlIGRvY3VtZW50IHNldCksIExvY2FsICh0aGlzCiAgICBkb2N1bWVudCBvbmx5KSwgb3IgQWxsIChib3RoKQogIC0tPgogIDwhLS0KICAgIFNpZ25pZmljYW5jZTogV2hldGhlciB0aGlzIEluZGV4VGVybSBpcyB0aGUgbW9zdCBwZXJ0aW5lbnQKICAgIG9mIGl0cyBzZXJpZXMgKFByZWZlcnJlZCkgb3Igbm90IChOb3JtYWwsIHRoZSBkZWZhdWx0KQogIC0tPgogIDwhLS0KICAgIENsYXNzOiBJbmRpY2F0ZXMgdHlwZSBvZiBJbmRleFRlcm07IGRlZmF1bHQgaXMgU2luZ3VsYXIsCiAgICBvciBFbmRPZlJhbmdlIGlmIFN0YXJ0UmVmIGlzIHN1cHBsaWVkOyBTdGFydE9mUmFuZ2UgdmFsdWUKICAgIG11c3QgYmUgc3VwcGxpZWQgZXhwbGljaXRseSBvbiBzdGFydHMgb2YgcmFuZ2VzCiAgLS0+CiAgPCEtLQogICAgU3RhcnRSZWY6IElEIG9mIHRoZSBJbmRleFRlcm0gdGhhdCBzdGFydHMgdGhlIGluZGV4aW5nCiAgICByYW5nZSBlbmRlZCBieSB0aGlzIEluZGV4VGVybQogIC0tPgogIDwhLS0KICAgIFpvbmU6IElEcyBvZiB0aGUgZWxlbWVudHMgdG8gd2hpY2ggdGhlIEluZGV4VGVybSBhcHBsaWVzLAogICAgYW5kIGluZGljYXRlcyB0aGF0IHRoZSBJbmRleFRlcm0gYXBwbGllcyB0byB0aG9zZSBlbnRpcmUKICAgIGVsZW1lbnRzIHJhdGhlciB0aGFuIHRoZSBwb2ludCBhdCB3aGljaCB0aGUgSW5kZXhUZXJtCiAgICBvY2N1cnMKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5kZXh0ZXJtLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFnZW51bS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2NvcGUiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJhbGwiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZ2xvYmFsIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxvY2FsIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNpZ25pZmljYW5jZSIgZGVmYXVsdD0ibm9ybWFsIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icHJlZmVycmVkIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5vcm1hbCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNpbmd1bGFyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InN0YXJ0b2ZyYW5nZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJlbmRvZnJhbmdlIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InN0YXJ0cmVmIiB0eXBlPSJ4czpJRFJFRiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ6b25lIiB0eXBlPSJ4czpJRFJFRlMiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idHlwZSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5kZXh0ZXJtLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpbmRleHRlcm0uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBpbmRleHRlcm0ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcmltc2VjdGVyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJwcmltYXJ5Ij4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5keHRlcm0uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJpbWFyeS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwcmltYXJ5LmVsZW1lbnQgLS0+CiAgPCEtLQogICAgU29ydEFzOiBBbHRlcm5hdGUgc29ydCBzdHJpbmcgZm9yIGluZGV4IHNvcnRpbmcsIGUuZy4sCiAgICAiZm91cnRlZW4iIGZvciBhbiBlbGVtZW50IGNvbnRhaW5pbmcgIjE0IgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcmltYXJ5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzb3J0YXMiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByaW1zZWN0ZXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHByaW1hcnkuYXR0bGlzdCAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWNvbmRhcnkiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmR4dGVybS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWNvbmRhcnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2Vjb25kYXJ5LmVsZW1lbnQgLS0+CiAgPCEtLQogICAgU29ydEFzOiBBbHRlcm5hdGUgc29ydCBzdHJpbmcgZm9yIGluZGV4IHNvcnRpbmcsIGUuZy4sCiAgICAiZm91cnRlZW4iIGZvciBhbiBlbGVtZW50IGNvbnRhaW5pbmcgIjE0IgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWNvbmRhcnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNvcnRhcyIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJpbXNlY3Rlci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2Vjb25kYXJ5LmF0dGxpc3QgLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idGVydGlhcnkiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmR4dGVybS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0ZXJ0aWFyeS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0ZXJ0aWFyeS5lbGVtZW50IC0tPgogIDwhLS0KICAgIFNvcnRBczogQWx0ZXJuYXRlIHNvcnQgc3RyaW5nIGZvciBpbmRleCBzb3J0aW5nLCBlLmcuLAogICAgImZvdXJ0ZWVuIiBmb3IgYW4gZWxlbWVudCBjb250YWluaW5nICIxNCIKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGVydGlhcnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNvcnRhcyIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJpbXNlY3Rlci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdGVydGlhcnkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwcmltc2VjdGVyLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2Vlc2VlYWxzby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VlIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5keHRlcm0uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWVzZWVhbHNvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWUuYXR0bGlzdCAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWVhbHNvIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5keHRlcm0uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VlYWxzby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWVhbHNvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlZWFsc28uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWVzZWVhbHNvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KPC94czpzY2hlbWE+CjwhLS0gZW5kIG9mIHNlZWFsc28uYXR0bGlzdCAtLT4KPCEtLSBlbmQgb2Ygc2Vlc2VlYWxzby5tb2R1bGUgLS0+CjwhLS0gZW5kIG9mIGluZGV4dGVybS5jb250ZW50Lm1vZHVsZSAtLT4KPCEtLSBFbmQgb2YgRG9jQm9vayBYTUwgaW5mb3JtYXRpb24gcG9vbCBtb2R1bGUgVjQuM0NSMyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Docbook/4_2/docbook.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIERvY0Jvb2sgWE1MIERURCBWNC4zQ1IzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRmlsZSBkb2Nib29reC5kdGQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIENvcHlyaWdodCAxOTkyLTIwMDIgSGFMIENvbXB1dGVyIFN5c3RlbXMsIEluYy4sCiAgTydSZWlsbHkgJiBBc3NvY2lhdGVzLCBJbmMuLCBBcmJvclRleHQsIEluYy4sIEZ1aml0c3UgU29mdHdhcmUKICBDb3Jwb3JhdGlvbiwgTm9ybWFuIFdhbHNoLCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCBhbmQgdGhlCiAgT3JnYW5pemF0aW9uIGZvciB0aGUgQWR2YW5jZW1lbnQgb2YgU3RydWN0dXJlZCBJbmZvcm1hdGlvbgogIFN0YW5kYXJkcyAoT0FTSVMpLgogIAogICRJZDogZG9jYm9va3guZHRkLHYgMS4yMCAyMDA0LzAxLzIxIDE4OjU0OjIxIG53YWxzaCBFeHAgJAogIAogIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY0Jvb2sgWE1MIERURAogIGFuZCBpdHMgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZQogIGlzIGhlcmVieSBncmFudGVkIGluIHBlcnBldHVpdHksIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAogIG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggYXBwZWFyIGluIGFsbCBjb3BpZXMuICBUaGUgY29weXJpZ2h0CiAgaG9sZGVycyBtYWtlIG5vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGUgRFREIGZvcgogIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3NlZCBvciBpbXBsaWVkCiAgd2FycmFudHkuCiAgCiAgSWYgeW91IG1vZGlmeSB0aGUgRG9jQm9vayBEVEQgaW4gYW55IHdheSwgZXhjZXB0IGZvciBkZWNsYXJpbmcgYW5kCiAgcmVmZXJlbmNpbmcgYWRkaXRpb25hbCBzZXRzIG9mIGdlbmVyYWwgZW50aXRpZXMgYW5kIGRlY2xhcmluZwogIGFkZGl0aW9uYWwgbm90YXRpb25zLCBsYWJlbCB5b3VyIERURCBhcyBhIHZhcmlhbnQgb2YgRG9jQm9vay4gIFNlZQogIHRoZSBtYWludGVuYW5jZSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIAogIFBsZWFzZSBkaXJlY3QgYWxsIHF1ZXN0aW9ucywgYnVnIHJlcG9ydHMsIG9yIHN1Z2dlc3Rpb25zIGZvcgogIGNoYW5nZXMgdG8gdGhlIGRvY2Jvb2tAbGlzdHMub2FzaXMtb3Blbi5vcmcgbWFpbGluZyBsaXN0LiBGb3IgbW9yZQogIGluZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rLy4KLS0+CjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIFRoaXMgaXMgdGhlIGRyaXZlciBmaWxlIGZvciBWNC4zQ1IzIG9mIHRoZSBEb2NCb29rIERURC4KICBQbGVhc2UgdXNlIHRoZSBmb2xsb3dpbmcgZm9ybWFsIHB1YmxpYyBpZGVudGlmaWVyIHRvIGlkZW50aWZ5IGl0OgogIAogICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjNDUjMvL0VOIgogIAogIEZvciBleGFtcGxlLCBpZiB5b3VyIGRvY3VtZW50J3MgdG9wLWxldmVsIGVsZW1lbnQgaXMgQm9vaywgYW5kCiAgeW91IGFyZSB1c2luZyBEb2NCb29rIGRpcmVjdGx5LCB1c2UgdGhlIEZQSSBpbiB0aGUgRE9DVFlQRQogIGRlY2xhcmF0aW9uOgogIAogIDwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4zQ1IzLy9FTiIKICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjNiMi9kb2Nib29reC5kdGQiCiAgICAgICAgICAgICAgICAgWy4uLl0+CiAgCiAgT3IsIGlmIHlvdSBoYXZlIGEgaGlnaGVyLWxldmVsIGRyaXZlciBmaWxlIHRoYXQgY3VzdG9taXplcyBEb2NCb29rLAogIHVzZSB0aGUgRlBJIGluIHRoZSBwYXJhbWV0ZXIgZW50aXR5IGRlY2xhcmF0aW9uOgogIAogIDwhRU5USVRZICUgRG9jQm9va0RURCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuM0NSMy8vRU4iCiAgICAgICAgICAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjNiMi9kb2Nib29reC5kdGQiPgogICVEb2NCb29rRFREOwogIAogIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIHBhcmFtZXRlcgogIGVudGl0eSBhbmQgbW9kdWxlIHNjaGVtZSB1c2VkIGluIERvY0Jvb2ssIGN1c3RvbWl6aW5nIERvY0Jvb2sgYW5kCiAgcGxhbm5pbmcgZm9yIGludGVyY2hhbmdlLCBhbmQgY2hhbmdlcyBtYWRlIHNpbmNlIHRoZSBsYXN0IHJlbGVhc2UKICBvZiBEb2NCb29rLgotLT4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIEVuYWJsZSBTR01MIGZlYXR1cmVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLSBOb3RhdGlvbiBkZWNsYXJhdGlvbnMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgogIDx4czppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJkYm5vdG54LnhzZCIvPgogIDx4czppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJkYnBvb2x4LnhzZCIvPgogIDx4czppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJkYmhpZXJ4LnhzZCIvPgogIDx4czppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiIHNjaGVtYUxvY2F0aW9uPSJ4bWwueHNkIi8+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gSVNPIGNoYXJhY3RlciBlbnRpdHkgc2V0cyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIGV1cm8gc2lnbiwgVSsyMEFDIE5FVyAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBEVEQgbW9kdWxlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gSW5mb3JtYXRpb24gcG9vbCAuLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIFJlZGVjbGFyYXRpb24gcGxhY2Vob2xkZXIgLi4uLi4gLS0+CiAgPCEtLSBEb2N1bWVudCBoaWVyYXJjaHkgLi4uLi4uLi4uLi4uIC0tPgo8L3hzOnNjaGVtYT4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIE90aGVyIGdlbmVyYWwgZW50aXRpZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRW5kIG9mIERvY0Jvb2sgWE1MIERURCBWNC4zQ1IzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Docbook/4_2/htmltblx.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIERvY0Jvb2sgWE1MIEhUTUwgVGFibGUgTW9kdWxlIFY0LjNDUjMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRmlsZSBodG1sdGJseC5tb2QgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIENvcHlyaWdodCAyMDAzIEFyYm9yVGV4dCwgSW5jLiwgTm9ybWFuIFdhbHNoLCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLAogIGFuZCB0aGUgT3JnYW5pemF0aW9uIGZvciB0aGUgQWR2YW5jZW1lbnQgb2YgU3RydWN0dXJlZCBJbmZvcm1hdGlvbgogIFN0YW5kYXJkcyAoT0FTSVMpLgogIAogICRJZDogaHRtbHRibHgubW9kLHYgMS4xMSAyMDA0LzAxLzIxIDE4OjU0OjIxIG53YWxzaCBFeHAgJAogIAogIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY0Jvb2sgWE1MIERURAogIGFuZCBpdHMgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZQogIGlzIGhlcmVieSBncmFudGVkIGluIHBlcnBldHVpdHksIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAogIG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggYXBwZWFyIGluIGFsbCBjb3BpZXMuICBUaGUgY29weXJpZ2h0CiAgaG9sZGVycyBtYWtlIG5vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGUgRFREIGZvcgogIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3NlZCBvciBpbXBsaWVkCiAgd2FycmFudHkuCiAgCiAgSWYgeW91IG1vZGlmeSB0aGUgRG9jQm9vayBYTUwgRFREIGluIGFueSB3YXksIGV4Y2VwdCBmb3IgZGVjbGFyaW5nIGFuZAogIHJlZmVyZW5jaW5nIGFkZGl0aW9uYWwgc2V0cyBvZiBnZW5lcmFsIGVudGl0aWVzIGFuZCBkZWNsYXJpbmcKICBhZGRpdGlvbmFsIG5vdGF0aW9ucywgbGFiZWwgeW91ciBEVEQgYXMgYSB2YXJpYW50IG9mIERvY0Jvb2suICBTZWUKICB0aGUgbWFpbnRlbmFuY2UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAKICBQbGVhc2UgZGlyZWN0IGFsbCBxdWVzdGlvbnMsIGJ1ZyByZXBvcnRzLCBvciBzdWdnZXN0aW9ucyBmb3IKICBjaGFuZ2VzIHRvIHRoZSBkb2Nib29rQGxpc3RzLm9hc2lzLW9wZW4ub3JnIG1haWxpbmcgbGlzdC4gRm9yIG1vcmUKICBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay8uCi0tPgo8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0KICBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIGVsZW1lbnRzIHRoYXQgYXJlCiAgaXNvbW9ycGhpYyB0byB0aGUgSFRNTCBlbGVtZW50cy4gT25lIGNvdWxkIGFyZ3VlIHdlIHNob3VsZAogIGluc3RlYWQgaGF2ZSBiYXNlZCBvdXJzZWx2ZXMgb24gdGhlIFhIVE1MIFRhYmxlIE1vZHVsZSwgYnV0IHRoZQogIEhUTUwgb25lIGlzIG1vcmUgbGlrZSB3aGF0IGJyb3dzZXJzIGFyZSBsaWtlbHkgdG8gYWNjZXB0IHRvZGF5CiAgYW5kIHVzZXJzIGFyZSBsaWtlbHkgdG8gdXNlLgogIAogIFRoaXMgbW9kdWxlIGhhcyBiZWVuIGRldmVsb3BlZCBmb3IgdXNlIHdpdGggdGhlIERvY0Jvb2sgVjQuMwogICJ1bmlvbiB0YWJsZSBtb2RlbCIgaW4gd2hpY2ggZWxlbWVudHMgYW5kIGF0dGxpc3RzIGNvbW1vbiB0byBib3RoCiAgbW9kZWxzIGFyZSBkZWZpbmVkIChhcyB0aGUgdW5pb24pIGluIHRoZSBDQUxTIHRhYmxlIG1vZHVsZSBieQogIHNldHRpbmcgdmFyaW91cyBwYXJhbWV0ZXIgZW50aXRpZXMgYXBwcm9wcmlhdGVseSBpbiB0aGlzIGZpbGUuCiAgCiAgSW4gRFREIGRyaXZlciBmaWxlcyByZWZlcnJpbmcgdG8gdGhpcyBtb2R1bGUsIHBsZWFzZSB1c2UgYW4gZW50aXR5CiAgZGVjbGFyYXRpb24gdGhhdCB1c2VzIHRoZSBwdWJsaWMgaWRlbnRpZmllciBzaG93biBiZWxvdzoKICAKICA8IUVOVElUWSAlIGh0bWx0YmwgUFVCTElDCiAgIi0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBIVE1MIFRhYmxlcyBWNC4zQ1IzLy9FTiIKICAiaHRtbHRibHgubW9kIj4KICAlaHRtbHRibDsKICAKICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoZSBwYXJhbWV0ZXIKICBlbnRpdHkgYW5kIG1vZHVsZSBzY2hlbWUgdXNlZCBpbiBEb2NCb29rLCBjdXN0b21pemluZyBEb2NCb29rIGFuZAogIHBsYW5uaW5nIGZvciBpbnRlcmNoYW5nZSwgYW5kIGNoYW5nZXMgbWFkZSBzaW5jZSB0aGUgbGFzdCByZWxlYXNlCiAgb2YgRG9jQm9vay4KLS0+CjwhLS0gPT09PT09PT09PT09PT09PT09PT09PT0gWEhUTUwgVGFibGVzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiBzY2hlbWFMb2NhdGlvbj0ieG1sLnhzZCIvPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJodG1sLmNvcmVhdHRycyI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czpJRCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzdHlsZSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0aXRsZSIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBEb2VzIG5vdCBjb250YWluIGxhbmcgb3IgZGlyIGJlY2F1c2UgdGhleSBhcmUgaW4gJWNvbW1vbi5hdHRyaWJzIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpMThuIj4KICAgIDx4czphdHRyaWJ1dGUgcmVmPSJ4bWw6bGFuZyIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImV2ZW50cyI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im9uY2xpY2siLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib25kYmxjbGljayIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvbm1vdXNlZG93biIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvbm1vdXNldXAiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib25tb3VzZW92ZXIiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib25tb3VzZW1vdmUiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib25tb3VzZW91dCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvbmtleXByZXNzIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im9ua2V5ZG93biIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvbmtleXVwIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXR0cnMiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaHRtbC5jb3JlYXR0cnMiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImkxOG4iLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImV2ZW50cyIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNlbGxoYWxpZ24iPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxlZnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2VudGVyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJpZ2h0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imp1c3RpZnkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2hhciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjaGFyIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNoYXJvZmYiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjZWxsdmFsaWduIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idmFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idG9wIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im1pZGRsZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJib3R0b20iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYmFzZWxpbmUiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNvbGdyb3VwIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29sIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbGdyb3VwLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDx4czplbGVtZW50IG5hbWU9ImNvbCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0ciI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0idGgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRkIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0ci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0aCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJ0YWJlbnRyeS5taXgiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRoLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDx4czplbGVtZW50IG5hbWU9InRkIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICAgIDx4czpncm91cCByZWY9InRhYmVudHJ5Lm1peCIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbGdyb3VwLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXR0cnMiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3BhbiIgZGVmYXVsdD0iMSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ3aWR0aCIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2VsbGhhbGlnbiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2VsbHZhbGlnbiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImF0dHJzIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNwYW4iIGRlZmF1bHQ9IjEiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0id2lkdGgiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNlbGxoYWxpZ24iLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNlbGx2YWxpZ24iLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0ci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImF0dHJzIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjZWxsaGFsaWduIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjZWxsdmFsaWduIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImJnY29sb3IiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0aC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImF0dHJzIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFiYnIiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYXhpcyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJoZWFkZXJzIiB0eXBlPSJ4czpJRFJFRlMiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2NvcGUiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyb3ciLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY29sIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJvd2dyb3VwIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNvbGdyb3VwIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJvd3NwYW4iIGRlZmF1bHQ9IjEiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29sc3BhbiIgZGVmYXVsdD0iMSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2VsbGhhbGlnbiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2VsbHZhbGlnbiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJub3dyYXAiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJub3dyYXAiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYmdjb2xvciIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ3aWR0aCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJoZWlnaHQiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0ZC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImF0dHJzIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFiYnIiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYXhpcyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJoZWFkZXJzIiB0eXBlPSJ4czpJRFJFRlMiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2NvcGUiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyb3ciLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY29sIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJvd2dyb3VwIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNvbGdyb3VwIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJvd3NwYW4iIGRlZmF1bHQ9IjEiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29sc3BhbiIgZGVmYXVsdD0iMSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2VsbGhhbGlnbiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2VsbHZhbGlnbiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJub3dyYXAiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJub3dyYXAiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYmdjb2xvciIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ3aWR0aCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJoZWlnaHQiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogIDwhLS0KICAgIFNldCB1cCB0byByZWFkIGluIHRoZSBDQUxTIG1vZGVsIGNvbmZpZ3VyZWQgdG8KICAgIG1lcmdlIHdpdGggdGhlIFhIVE1MIHRhYmxlIG1vZGVsCiAgLS0+CiAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRhYmxlcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBBZGQgbGFiZWwgYW5kIHJvbGUgYXR0cmlidXRlcyB0byB0YWJsZSBhbmQgaW5mb3JtYWx0YWJsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYm9keWF0dCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZsb2F0c3R5bGUiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLQogICAgQWRkIGNvbW1vbiBhdHRyaWJ1dGVzIHRvIFRhYmxlLCBUR3JvdXAsIFRCb2R5LCBUSGVhZCwgVEZvb3QsIFJvdywgCiAgICBFbnRyeVRibCwgYW5kIEVudHJ5IChhbmQgSW5mb3JtYWxUYWJsZSBlbGVtZW50KS4KICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdXIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzdHlsZSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0aXRsZSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaTE4biIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZXZlbnRzIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0YWJsZXMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb21tb24udGFibGUuYXR0cmlicyI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJib2R5YXR0Ii8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN1ciIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBDb250ZW50IG1vZGVsIGZvciBUYWJsZSAodGhhdCBhbHNvIGFsbG93cyBIVE1MIHRhYmxlcykgLS0+CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRibC50YWJsZS5tZGwiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idGV4dG9iamVjdCIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJncmFwaGljIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtZWRpYW9iamVjdCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idGdyb3VwIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNhcHRpb24iLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjb2wiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29sZ3JvdXAiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGhlYWQiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGZvb3QiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idGJvZHkiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRyIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmNvbXBsZXhUeXBlPgogIDx4czpncm91cCBuYW1lPSJpbmZvcm1hbC50YmwudGFibGUubWRsIj4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRleHRvYmplY3QiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZ3JhcGhpYyIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibWVkaWFvYmplY3QiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRncm91cCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29sIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbGdyb3VwIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRoZWFkIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRmb290Ii8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRib2R5Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0ciIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8IS0tIEF0dHJpYnV0ZXMgZm9yIFRhYmxlIChpbmNsdWRpbmcgSFRNTCBvbmVzKSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGJsLnRhYmxlLmF0dCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InRhYnN0eWxlIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InRvY2VudHJ5IiB0eXBlPSJ5ZXNvcm5vLmF0dHZhbHMiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2hvcnRlbnRyeSIgdHlwZT0ieWVzb3Juby5hdHR2YWxzIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im9yaWVudCI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InBvcnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGFuZCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwZ3dpZGUiIHR5cGU9Inllc29ybm8uYXR0dmFscyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzdW1tYXJ5Ii8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9IndpZHRoIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImJvcmRlciIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJydWxlcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5vbmUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZ3JvdXBzIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJvd3MiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY29scyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJhbGwiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2VsbHNwYWNpbmciLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2VsbHBhZGRpbmciLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYWxpZ24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsZWZ0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNlbnRlciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyaWdodCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJiZ2NvbG9yIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJ0YmwuZnJhbWUuYXR0dmFsIj4KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idm9pZCIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImFib3ZlIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYmVsb3ciLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJoc2lkZXMiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsaHMiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyaHMiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ2c2lkZXMiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJib3giLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJib3JkZXIiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0b3AiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJib3R0b20iLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0b3Bib3QiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJhbGwiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzaWRlcyIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5vbmUiLz4KICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgPC94czpzaW1wbGVUeXBlPgogIDwhLS0gQWxsb3cgZWl0aGVyIG9iamVjdHMgb3IgaW5saW5lczsgYmV3YXJlIG9mIFJFcyBiZXR3ZWVuIGVsZW1lbnRzLiAtLT4KICA8eHM6Z3JvdXAgbmFtZT0idGJsLmVudHJ5Lm1kbCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6Z3JvdXAgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czpncm91cCByZWY9InRhYmVudHJ5Lm1peCIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8IS0tCiAgICB0aGVhZCwgdGZvb3QsIGFuZCB0Ym9keSBhcmUgZGVmaW5lZCBpbiBib3RoIHRhYmxlIG1vZGVscywKICAgIHNvIHdlIHNldCB1cCBwYXJhbWV0ZXIgZW50aXRpZXMgdG8gZGVmaW5lIHVuaW9uIG1vZGVscyBmb3IgdGhlbQogIC0tPgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0YmwuaGRmdC5tZGwiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idHIiLz4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29sc3BlYyIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJvdyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgPC94czpjaG9pY2U+CiAgPC94czpjb21wbGV4VHlwZT4KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idGJsLnRib2R5Lm1kbCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0ciIvPgogICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyb3ciLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Y29tcGxleFR5cGU+CjwveHM6c2NoZW1hPgo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Docbook/4_2/xml.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSI+CiAgPHhzOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iZG9jYm9vay54c2QiLz4KICA8eHM6YXR0cmlidXRlIG5hbWU9ImJhc2UiLz4KICA8eHM6YXR0cmlidXRlIG5hbWU9ImxhbmciIHR5cGU9InhzOk5NVE9LRU4iLz4KPC94czpzY2hlbWE+Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Docbook/4_3/calstblx.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIERvY0Jvb2sgQ0FMUyBUYWJsZSBNb2RlbCBWNC4yIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRmlsZSBjYWxzdGJseC5tb2QgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIENvcHlyaWdodCAxOTkyLTIwMDIgSGFMIENvbXB1dGVyIFN5c3RlbXMsIEluYy4sCiAgTydSZWlsbHkgJiBBc3NvY2lhdGVzLCBJbmMuLCBBcmJvclRleHQsIEluYy4sIEZ1aml0c3UgU29mdHdhcmUKICBDb3Jwb3JhdGlvbiwgTm9ybWFuIFdhbHNoLCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCBhbmQgdGhlCiAgT3JnYW5pemF0aW9uIGZvciB0aGUgQWR2YW5jZW1lbnQgb2YgU3RydWN0dXJlZCBJbmZvcm1hdGlvbgogIFN0YW5kYXJkcyAoT0FTSVMpLgogIAogIFRoaXMgRFREIGlzIGJhc2VkIG9uIHRoZSBDQUxTIFRhYmxlIE1vZGVsCiAgUFVCTElDICItLy9VU0EtRE9ELy9EVEQgVGFibGUgTW9kZWwgOTUxMDEwLy9FTiIKICAKICAkSWQ6IGNhbHN0Ymx4LmR0ZCx2IDEuMTIgMjAwMi8wNy8xNyAxNToyNjoxNiBud2Fsc2ggRXhwICQKICAKICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIHRoZSBEb2NCb29rIERURAogIGFuZCBpdHMgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZQogIGlzIGhlcmVieSBncmFudGVkIGluIHBlcnBldHVpdHksIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAogIG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggYXBwZWFyIGluIGFsbCBjb3BpZXMuICBUaGUgY29weXJpZ2h0CiAgaG9sZGVycyBtYWtlIG5vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGUgRFREIGZvcgogIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3NlZCBvciBpbXBsaWVkCiAgd2FycmFudHkuCiAgCiAgSWYgeW91IG1vZGlmeSB0aGUgRG9jQm9vayBEVEQgaW4gYW55IHdheSwgZXhjZXB0IGZvciBkZWNsYXJpbmcgYW5kCiAgcmVmZXJlbmNpbmcgYWRkaXRpb25hbCBzZXRzIG9mIGdlbmVyYWwgZW50aXRpZXMgYW5kIGRlY2xhcmluZwogIGFkZGl0aW9uYWwgbm90YXRpb25zLCBsYWJlbCB5b3VyIERURCBhcyBhIHZhcmlhbnQgb2YgRG9jQm9vay4gIFNlZQogIHRoZSBtYWludGVuYW5jZSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIAogIFBsZWFzZSBkaXJlY3QgYWxsIHF1ZXN0aW9ucywgYnVnIHJlcG9ydHMsIG9yIHN1Z2dlc3Rpb25zIGZvcgogIGNoYW5nZXMgdG8gdGhlIGRvY2Jvb2tAbGlzdHMub2FzaXMtb3Blbi5vcmcgbWFpbGluZyBsaXN0LiBGb3IgbW9yZQogIGluZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rLy4KLS0+CjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIFRoaXMgbW9kdWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIENBTFMgVGFibGUgTW9kZWwKICBjb252ZXJ0ZWQgdG8gWE1MLgotLT4KPCEtLQogIFRoZXNlIGRlZmluaXRpb25zIGFyZSBub3QgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgdGFibGUgbW9kZWwsIGJ1dCBhcmUKICB1c2VkIGluIHRoZSBkZWZhdWx0IENBTFMgdGFibGUgbW9kZWwgYW5kIGFyZSB1c3VhbGx5IGRlZmluZWQgZWxzZXdoZXJlCiAgKGFuZCBwcmlvciB0byB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgdGFibGUgbW9kdWxlKSBpbiBhIENBTFMgRFRELgotLT4KPCEtLQogIG5vIGlmIHplcm8ocyksCiAgeWVzIGlmIGFueSBvdGhlciBkaWdpdHMgdmFsdWUKLS0+Cjx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+CiAgPHhzOnNpbXBsZVR5cGUgbmFtZT0ieWVzb3JubyI+CiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIi8+CiAgPC94czpzaW1wbGVUeXBlPgogIDx4czpncm91cCBuYW1lPSJ0aXRsZXMiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpncm91cD4KICA8IS0tIGRlZmF1bHQgZm9yIHVzZSBpbiBlbnRyeSBjb250ZW50IC0tPgogIDwhLS0KICAgIFRoZSBwYXJhbWV0ZXIgZW50aXRpZXMgYXMgZGVmaW5lZCBiZWxvdyBwcm92aWRlIHRoZSBDQUxTIHRhYmxlIG1vZGVsCiAgICBhcyBwdWJsaXNoZWQgKGFzIHBhcnQgb2YgdGhlIEV4YW1wbGUgRFREKSBpbiBNSUwtSERCSy0yODAwMS4KICAgIAogICAgVGhlc2UgZm9sbG93aW5nIGRlY2xhcmF0aW9ucyBwcm92aWRlIHRoZSBDQUxTLWNvbXBsaWFudCBkZWZhdWx0IGRlZmluaXRpb25zCiAgICBmb3IgdGhlc2UgZW50aXRpZXMuICBIb3dldmVyLCB0aGVzZSBlbnRpdGllcyBjYW4gYW5kIHNob3VsZCBiZSByZWRlZmluZWQKICAgIChieSBnaXZpbmcgdGhlIGFwcHJvcHJpYXRlIHBhcmFtZXRlciBlbnRpdHkgZGVjbGFyYXRpb24ocykgcHJpb3IgdG8gdGhlCiAgICByZWZlcmVuY2UgdG8gdGhpcyBUYWJsZSBNb2RlbCBkZWNsYXJhdGlvbiBzZXQgZW50aXR5KSB0byBmaXQgdGhlIG5lZWRzCiAgICBvZiB0aGUgY3VycmVudCBhcHBsaWNhdGlvbi4KICAtLT4KICA8eHM6Z3JvdXAgbmFtZT0idGJsLnRhYmxlLXRpdGxlcy5tZGwiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6Z3JvdXAgcmVmPSJ0aXRsZXMiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0idGJsLnRhYmxlLW1haW4ubWRsIj4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRncm91cCIvPgogICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJncmFwaGljIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0YmwudGFibGUuYXR0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idGFic3R5bGUiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idG9jZW50cnkiIHR5cGU9Inllc29ybm8iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2hvcnRlbnRyeSIgdHlwZT0ieWVzb3JubyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvcmllbnQiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwb3J0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxhbmQiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icGd3aWRlIiB0eXBlPSJ5ZXNvcm5vIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idGJsLnRncm91cC5tZGwiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbHNwZWMiLz4KICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzcGFuc3BlYyIvPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGhlYWQiLz4KICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRmb290Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0idGJvZHkiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpjb21wbGV4VHlwZT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGJsLnRncm91cC5hdHQiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0Z3JvdXBzdHlsZSIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRibC5oZGZ0Lm1kbCI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29sc3BlYyIvPgogICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyb3ciLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpjb21wbGV4VHlwZT4KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idGJsLnJvdy5tZGwiPgogICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZW50cnkiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlbnRyeXRibCIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpjb21wbGV4VHlwZT4KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idGJsLmVudHJ5dGJsLm1kbCI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29sc3BlYyIvPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNwYW5zcGVjIi8+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0aGVhZCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InRib2R5Ii8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Y29tcGxleFR5cGU+CiAgPCEtLSA9PT09PSAgRWxlbWVudCBhbmQgYXR0cmlidXRlIGRlY2xhcmF0aW9ucyBmb2xsb3cuID09PT09IC0tPgogIDx4czplbGVtZW50IG5hbWU9InRhYmxlIiBzdWJzdGl0dXRpb25Hcm91cD0iZm9ybWFsLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNvbXBsZXhDb250ZW50PgogICAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idGJsLnRhYmxlLm1kbCI+CiAgICAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0YWJsZS5hdHRsaXN0Ii8+CiAgICAgICAgPC94czpleHRlbnNpb24+CiAgICAgIDwveHM6Y29tcGxleENvbnRlbnQ+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGFibGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZyYW1lIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idG9wIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImJvdHRvbSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0b3Bib3QiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYWxsIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNpZGVzIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5vbmUiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29sc2VwIiB0eXBlPSJ5ZXNvcm5vIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJvd3NlcCIgdHlwZT0ieWVzb3JubyIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGJsLnRhYmxlLmF0dCIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYm9keWF0dCIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdXIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRncm91cCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpjb21wbGV4Q29udGVudD4KICAgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRibC50Z3JvdXAubWRsIj4KICAgICAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRncm91cC5hdHRsaXN0Ii8+CiAgICAgICAgPC94czpleHRlbnNpb24+CiAgICAgIDwveHM6Y29tcGxleENvbnRlbnQ+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGdyb3VwLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb2xzIiB1c2U9InJlcXVpcmVkIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0YmwudGdyb3VwLmF0dCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb2xzZXAiIHR5cGU9Inllc29ybm8iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icm93c2VwIiB0eXBlPSJ5ZXNvcm5vIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGVmdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyaWdodCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjZW50ZXIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ianVzdGlmeSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjaGFyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNoYXIiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2hhcm9mZiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdXIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNvbHNwZWMiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb2xzcGVjLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb2xzcGVjLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb2xudW0iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29sbmFtZSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb2x3aWR0aCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb2xzZXAiIHR5cGU9Inllc29ybm8iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icm93c2VwIiB0eXBlPSJ5ZXNvcm5vIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGVmdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyaWdodCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjZW50ZXIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ianVzdGlmeSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjaGFyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNoYXIiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2hhcm9mZiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3BhbnNwZWMiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzcGFuc3BlYy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3BhbnNwZWMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWVzdCIgdXNlPSJyZXF1aXJlZCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lZW5kIiB1c2U9InJlcXVpcmVkIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNwYW5uYW1lIiB1c2U9InJlcXVpcmVkIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbHNlcCIgdHlwZT0ieWVzb3JubyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyb3dzZXAiIHR5cGU9Inllc29ybm8iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYWxpZ24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsZWZ0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJpZ2h0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNlbnRlciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJqdXN0aWZ5Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNoYXIiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2hhciIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjaGFyb2ZmIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0aGVhZCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpjb21wbGV4Q29udGVudD4KICAgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRibC5oZGZ0Lm1kbCI+CiAgICAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0aGVhZC5hdHRsaXN0Ii8+CiAgICAgICAgPC94czpleHRlbnNpb24+CiAgICAgIDwveHM6Y29tcGxleENvbnRlbnQ+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGhlYWQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbGlnbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRvcCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJtaWRkbGUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYm90dG9tIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN1ciIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idGZvb3QiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Y29tcGxleENvbnRlbnQ+CiAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0YmwuaGRmdC5tZGwiPgogICAgICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGZvb3QuYXR0bGlzdCIvPgogICAgICAgIDwveHM6ZXh0ZW5zaW9uPgogICAgICA8L3hzOmNvbXBsZXhDb250ZW50PgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRmb290LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2YWxpZ24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0b3AiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibWlkZGxlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImJvdHRvbSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdXIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRib2R5Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJvdyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0Ym9keS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGJvZHkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbGlnbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRvcCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJtaWRkbGUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYm90dG9tIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN1ciIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icm93Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNvbXBsZXhDb250ZW50PgogICAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idGJsLnJvdy5tZGwiPgogICAgICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm93LmF0dGxpc3QiLz4KICAgICAgICA8L3hzOmV4dGVuc2lvbj4KICAgICAgPC94czpjb21wbGV4Q29udGVudD4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyb3cuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJvd3NlcCIgdHlwZT0ieWVzb3JubyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2YWxpZ24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0b3AiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibWlkZGxlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImJvdHRvbSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdXIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImVudHJ5dGJsIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNvbXBsZXhDb250ZW50PgogICAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idGJsLmVudHJ5dGJsLm1kbCI+CiAgICAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlbnRyeXRibC5hdHRsaXN0Ii8+CiAgICAgICAgPC94czpleHRlbnNpb24+CiAgICAgIDwveHM6Y29tcGxleENvbnRlbnQ+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZW50cnl0YmwuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbHMiIHVzZT0icmVxdWlyZWQiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRibC50Z3JvdXAuYXR0Ii8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbG5hbWUiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3Bhbm5hbWUiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZXN0Ii8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWVlbmQiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29sc2VwIiB0eXBlPSJ5ZXNvcm5vIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJvd3NlcCIgdHlwZT0ieWVzb3JubyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxlZnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmlnaHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2VudGVyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imp1c3RpZnkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2hhciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjaGFyIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNoYXJvZmYiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3VyIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJlbnRyeSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0YmwuZW50cnkubWRsIi8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVudHJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlbnRyeS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29sbmFtZSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lc3QiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZWVuZCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzcGFubmFtZSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtb3Jlcm93cyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb2xzZXAiIHR5cGU9Inllc29ybm8iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icm93c2VwIiB0eXBlPSJ5ZXNvcm5vIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGVmdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyaWdodCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjZW50ZXIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ianVzdGlmeSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjaGFyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNoYXIiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2hhcm9mZiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyb3RhdGUiIHR5cGU9Inllc29ybm8iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idmFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idG9wIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im1pZGRsZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJib3R0b20iLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3VyIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KPC94czpzY2hlbWE+CjwhLS0gRW5kIG9mIERvY0Jvb2sgQ0FMUyBUYWJsZSBNb2RlbCBWNC4yIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Docbook/4_3/dbhierx.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIERvY0Jvb2sgZG9jdW1lbnQgaGllcmFyY2h5IG1vZHVsZSBWNC4yIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRmlsZSBkYmhpZXJ4Lm1vZCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIENvcHlyaWdodCAxOTkyLTIwMDIgSGFMIENvbXB1dGVyIFN5c3RlbXMsIEluYy4sCiAgTydSZWlsbHkgJiBBc3NvY2lhdGVzLCBJbmMuLCBBcmJvclRleHQsIEluYy4sIEZ1aml0c3UgU29mdHdhcmUKICBDb3Jwb3JhdGlvbiwgTm9ybWFuIFdhbHNoLCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCBhbmQgdGhlCiAgT3JnYW5pemF0aW9uIGZvciB0aGUgQWR2YW5jZW1lbnQgb2YgU3RydWN0dXJlZCBJbmZvcm1hdGlvbgogIFN0YW5kYXJkcyAoT0FTSVMpLgogIAogICRJZDogZGJoaWVyeC5tb2QsdiAxLjE5IDIwMDIvMDcvMTcgMTU6MjY6MTYgbndhbHNoIEV4cCAkCiAgCiAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jQm9vayBEVEQKICBhbmQgaXRzIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUKICBpcyBoZXJlYnkgZ3JhbnRlZCBpbiBwZXJwZXR1aXR5LCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKICBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGFwcGVhciBpbiBhbGwgY29waWVzLiAgVGhlIGNvcHlyaWdodAogIGhvbGRlcnMgbWFrZSBubyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhlIERURCBmb3IKICBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzZWQgb3IgaW1wbGllZAogIHdhcnJhbnR5LgogIAogIElmIHlvdSBtb2RpZnkgdGhlIERvY0Jvb2sgRFREIGluIGFueSB3YXksIGV4Y2VwdCBmb3IgZGVjbGFyaW5nIGFuZAogIHJlZmVyZW5jaW5nIGFkZGl0aW9uYWwgc2V0cyBvZiBnZW5lcmFsIGVudGl0aWVzIGFuZCBkZWNsYXJpbmcKICBhZGRpdGlvbmFsIG5vdGF0aW9ucywgbGFiZWwgeW91ciBEVEQgYXMgYSB2YXJpYW50IG9mIERvY0Jvb2suICBTZWUKICB0aGUgbWFpbnRlbmFuY2UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAKICBQbGVhc2UgZGlyZWN0IGFsbCBxdWVzdGlvbnMsIGJ1ZyByZXBvcnRzLCBvciBzdWdnZXN0aW9ucyBmb3IKICBjaGFuZ2VzIHRvIHRoZSBkb2Nib29rQGxpc3RzLm9hc2lzLW9wZW4ub3JnIG1haWxpbmcgbGlzdC4gRm9yIG1vcmUKICBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay8uCi0tPgo8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0KICBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBvdmVyYWxsIGRvY3VtZW50CiAgaGllcmFyY2hpZXMgb2YgRG9jQm9vayBkb2N1bWVudHMuICBJdCBjb3ZlcnMgY29tcHV0ZXIgZG9jdW1lbnRhdGlvbgogIG1hbnVhbHMgYW5kIG1hbnVhbCBmcmFnbWVudHMsIGFzIHdlbGwgYXMgcmVmZXJlbmNlIGVudHJpZXMgKHN1Y2ggYXMKICBtYW4gcGFnZXMpIGFuZCB0ZWNobmljYWwgam91cm5hbHMgb3IgYW50aG9sb2dpZXMgY29udGFpbmluZwogIGFydGljbGVzLgogIAogIFRoaXMgbW9kdWxlIGRlcGVuZHMgb24gdGhlIERvY0Jvb2sgaW5mb3JtYXRpb24gcG9vbCBtb2R1bGUuICBBbGwKICBlbGVtZW50cyBhbmQgZW50aXRpZXMgcmVmZXJlbmNlZCBidXQgbm90IGRlZmluZWQgaGVyZSBhcmUgYXNzdW1lZAogIHRvIGJlIGRlZmluZWQgaW4gdGhlIGluZm9ybWF0aW9uIHBvb2wgbW9kdWxlLgogIAogIEluIERURCBkcml2ZXIgZmlsZXMgcmVmZXJyaW5nIHRvIHRoaXMgbW9kdWxlLCBwbGVhc2UgdXNlIGFuIGVudGl0eQogIGRlY2xhcmF0aW9uIHRoYXQgdXNlcyB0aGUgcHVibGljIGlkZW50aWZpZXIgc2hvd24gYmVsb3c6CiAgCiAgPCFFTlRJVFkgJSBkYmhpZXIgUFVCTElDCiAgIi0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIERvY3VtZW50IEhpZXJhcmNoeSBWNC4yLy9FTiIKICAiZGJoaWVyeC5tb2QiPgogICVkYmhpZXI7CiAgCiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgcGFyYW1ldGVyCiAgZW50aXR5IGFuZCBtb2R1bGUgc2NoZW1lIHVzZWQgaW4gRG9jQm9vaywgY3VzdG9taXppbmcgRG9jQm9vayBhbmQKICBwbGFubmluZyBmb3IgaW50ZXJjaGFuZ2UsIGFuZCBjaGFuZ2VzIG1hZGUgc2luY2UgdGhlIGxhc3QgcmVsZWFzZQogIG9mIERvY0Jvb2suCi0tPgo8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRW50aXRpZXMgZm9yIG1vZHVsZSBpbmNsdXNpb25zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIEVudGl0aWVzIGZvciBlbGVtZW50IGNsYXNzZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cjx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXBwZW5kaXguY2xhc3MiIGFic3RyYWN0PSJ0cnVlIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJiZWdpbnBhZ2UiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYXBwZW5kaXhpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iYm9va2NvbXBvbmVudC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRvY2NoYXAiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJib29rY29tcG9uZW50LmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXBwZW5kaXguYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXJ0aWNsZS5jbGFzcyIgYWJzdHJhY3Q9InRydWUiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJkaXYudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJhcnRpY2xlaW5mbyIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0b2NjaGFwIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJsb3QiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJib29rY29tcG9uZW50LmNvbnRlbnQiLz4KICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmdyb3VwIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFwcGVuZGl4LmNsYXNzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFja25vIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFydGljbGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYm9vay5jbGFzcyIgYWJzdHJhY3Q9InRydWUiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJkaXYudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJib29raW5mbyIvPgogICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImRlZGljYXRpb24iLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0idG9jIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxvdCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJnbG9zc2FyeSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiaWJsaW9ncmFwaHkiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0icHJlZmFjZSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjaGFwdGVyLmNsYXNzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InJlZmVyZW5jZSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJ0Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFydGljbGUuY2xhc3MiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iYXBwZW5kaXguY2xhc3MiLz4KICAgICAgICAgIDx4czpncm91cCByZWY9ImluZGV4LmNsYXNzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvbG9waG9uIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJvb2suYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY2hhcHRlci5jbGFzcyIgYWJzdHJhY3Q9InRydWUiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJlZ2lucGFnZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJjaGFwdGVyaW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJvb2tjb21wb25lbnQudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5hdi5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0b2NjaGFwIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iYm9va2NvbXBvbmVudC5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNoYXB0ZXIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmdyb3VwIG5hbWU9ImluZGV4LmNsYXNzIj4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaW5kZXgiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzZXRpbmRleCIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZlbnRyeS5jbGFzcyIgYWJzdHJhY3Q9InRydWUiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJlZ2lucGFnZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJyZWZlbnRyeWluZm8iLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0icmVmbWV0YSIvPgogICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InJlbWFyayIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rLmNoYXIuY2xhc3MiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InJlZm5hbWVkaXYiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0icmVmc3lub3BzaXNkaXYiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmc2VjdDEiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZnNlY3Rpb24iLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmZW50cnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VjdGlvbi5jbGFzcyIgYWJzdHJhY3Q9InRydWUiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InNlY3Rpb25pbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ic2VjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRpdmNvbXBvbmVudC5taXgiLz4KICAgICAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmVudHJ5LmNsYXNzIi8+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWN0aW9uLmNsYXNzIi8+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzaW1wbGVzZWN0Ii8+CiAgICAgICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmVudHJ5LmNsYXNzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWN0aW9uLmNsYXNzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzaW1wbGVzZWN0Ii8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3Rpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmdyb3VwIG5hbWU9Im5hdi5jbGFzcyI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9InRvYyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxvdCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImluZGV4Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZ2xvc3NhcnkiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiaWJsaW9ncmFwaHkiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPCEtLSBSZWRlY2xhcmF0aW9uIHBsYWNlaG9sZGVyIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0KICAgIEZvciByZWRlY2xhcmluZyBlbnRpdGllcyB0aGF0IGFyZSBkZWNsYXJlZCBhZnRlciB0aGlzIHBvaW50IHdoaWxlCiAgICByZXRhaW5pbmcgdGhlaXIgcmVmZXJlbmNlcyB0byB0aGUgZW50aXRpZXMgdGhhdCBhcmUgZGVjbGFyZWQgYmVmb3JlCiAgICB0aGlzIHBvaW50CiAgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gRW50aXRpZXMgZm9yIGVsZW1lbnQgbWl4dHVyZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIFRoZSBEb2NCb29rIFRDIG1heSBwcm9kdWNlIGFuIG9mZmljaWFsIGZvcm1zIG1vZHVsZSBmb3IgRG9jQm9vay4gLS0+CiAgPCEtLSBUaGlzIFBFIHByb3ZpZGVzIHRoZSBob29rIGJ5IHdoaWNoIGl0IGNhbiBiZSBpbnNlcnRlZCBpbnRvIHRoZSBEVEQuIC0tPgogIDx4czpncm91cCBuYW1lPSJkaXZjb21wb25lbnQubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGlzdC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFkbW9uLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZXNwZWNpZmljLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ic3lub3AuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaW5mb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb21wb3VuZC5jbGFzcyIvPgogICAgICA8eHM6Z3JvdXAgcmVmPSJnZW5vYmouY2xhc3MiLz4KICAgICAgPHhzOmdyb3VwIHJlZj0iZGVzY29iai5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9InJlZmNvbXBvbmVudC5taXgiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaXN0LmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYWRtb24uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lc3BlY2lmaWMuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzeW5vcC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmZvcm1hbC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImZvcm1hbC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImNvbXBvdW5kLmNsYXNzIi8+CiAgICAgIDx4czpncm91cCByZWY9Imdlbm9iai5jbGFzcyIvPgogICAgICA8eHM6Z3JvdXAgcmVmPSJkZXNjb2JqLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImJlZ2lucGFnZSIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0iaW5kZXhkaXZjb21wb25lbnQubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaXRlbWl6ZWRsaXN0Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ib3JkZXJlZGxpc3QiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ2YXJpYWJsZWxpc3QiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzaW1wbGVsaXN0Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZXNwZWNpZmljLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ic3lub3AuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaW5mb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhbmNob3IiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZW1hcmsiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rLmNoYXIuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9InJlZm5hbWUuY2hhci5taXgiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGVjaC5jaGFyLmNsYXNzIi8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9InBhcnRjb250ZW50Lm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFwcGVuZGl4LmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iY2hhcHRlci5jbGFzcyIvPgogICAgICA8eHM6Z3JvdXAgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcnRpY2xlLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icHJlZmFjZSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InJlZmVudHJ5LmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icmVmZXJlbmNlIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJyZWZpbmxpbmUuY2hhci5taXgiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4cmVmLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Imdlbi5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRlY2guY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJhc2UuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZG9jaW5mby5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ib3RoZXIuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYmVnaW5wYWdlIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJyZWZjbGFzcy5jaGFyLm1peCI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJhcHBsaWNhdGlvbiIvPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmdyb3VwPgogIDwhLS0gUmVkZWNsYXJhdGlvbiBwbGFjZWhvbGRlciAyIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tCiAgICBGb3IgcmVkZWNsYXJpbmcgZW50aXRpZXMgdGhhdCBhcmUgZGVjbGFyZWQgYWZ0ZXIgdGhpcyBwb2ludCB3aGlsZQogICAgcmV0YWluaW5nIHRoZWlyIHJlZmVyZW5jZXMgdG8gdGhlIGVudGl0aWVzIHRoYXQgYXJlIGRlY2xhcmVkIGJlZm9yZQogICAgdGhpcyBwb2ludAogIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEVudGl0aWVzIGZvciBjb250ZW50IG1vZGVscyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmdyb3VwIG5hbWU9ImRpdi50aXRsZS5jb250ZW50Ij4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0aXRsZSIvPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ic3VidGl0bGUiLz4KICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlYWJicmV2Ii8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9ImJvb2tjb21wb25lbnQudGl0bGUuY29udGVudCI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0idGl0bGUiLz4KICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InN1YnRpdGxlIi8+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0aXRsZWFiYnJldiIvPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJzZWN0LnRpdGxlLmNvbnRlbnQiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9InRpdGxlIi8+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJzdWJ0aXRsZSIvPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGVhYmJyZXYiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0icmVmc2VjdC50aXRsZS5jb250ZW50Ij4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0aXRsZSIvPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ic3VidGl0bGUiLz4KICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlYWJicmV2Ii8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9ImJvb2tjb21wb25lbnQuY29udGVudCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRpdmNvbXBvbmVudC5taXgiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWN0MSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZlbnRyeS5jbGFzcyIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzaW1wbGVzZWN0Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNlY3Rpb24uY2xhc3MiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmNob2ljZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWN0MSIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmVudHJ5LmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2ltcGxlc2VjdCIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNlY3Rpb24uY2xhc3MiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIFNldCBhbmQgU2V0SW5mbyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNldC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2V0Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0iZGl2LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ic2V0aW5mbyIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0b2MiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJib29rLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InNldGluZGV4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNldC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZXQuZWxlbWVudCAtLT4KICA8IS0tIEZQSTogU0dNTCBmb3JtYWwgcHVibGljIGlkZW50aWZpZXIgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNldC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZnBpIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNldC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNldC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNldGluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNldGluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZXRpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNldGluZm8uZWxlbWVudCAtLT4KICA8IS0tCiAgICBDb250ZW50czogSURzIG9mIHRoZSBUb0MsIEJvb2tzLCBhbmQgU2V0SW5kZXggdGhhdCBjb21wcmlzZQogICAgdGhlIHNldCwgaW4gdGhlIG9yZGVyIG9mIHRoZWlyIGFwcGVhcmFuY2UKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2V0aW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29udGVudHMiIHR5cGU9InhzOklEUkVGUyIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2V0aW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2V0aW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNldGluZm8ubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIHNldC5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBCb29rIGFuZCBCb29rSW5mbyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJib29rLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJib29rIiBzdWJzdGl0dXRpb25Hcm91cD0iYm9vay5jbGFzcyIvPgogIDwhLS0gZW5kIG9mIGJvb2suZWxlbWVudCAtLT4KICA8IS0tIEZQSTogU0dNTCBmb3JtYWwgcHVibGljIGlkZW50aWZpZXIgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJvb2suYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZwaSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJib29rLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBib29rLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYm9vay5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJvb2tpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJib29raW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmZvLmNsYXNzIi8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJvb2tpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJvb2tpbmZvLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgQ29udGVudHM6IElEcyBvZiB0aGUgVG9DLCBMb1RzLCBQcmVmYWNlcywgUGFydHMsIENoYXB0ZXJzLAogICAgQXBwZW5kaXhlcywgUmVmZXJlbmNlcywgR0xvc3NhcnksIEJpYmxpb2dyYXBoeSwgYW5kIGluZGV4ZXMKICAgIGNvbXByaXNpbmcgdGhlIEJvb2ssIGluIHRoZSBvcmRlciBvZiB0aGVpciBhcHBlYXJhbmNlCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJvb2tpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb250ZW50cyIgdHlwZT0ieHM6SURSRUZTIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJib29raW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYm9va2luZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBib29raW5mby5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgYm9vay5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBEZWRpY2F0aW9uLCBUb0MsIGFuZCBMb1QgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJkZWRpY2F0aW9uLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJkZWRpY2F0aW9uIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0ic2VjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImxlZ2Fsbm90aWNlLm1peCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJkZWRpY2F0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGRlZGljYXRpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZGVkaWNhdGlvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImRlZGljYXRpb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGRlZGljYXRpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBkZWRpY2F0aW9uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29sb3Bob24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNvbG9waG9uIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0ic2VjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRleHRvYmplY3QubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbG9waG9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvbG9waG9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbG9waG9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29sb3Bob24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvbG9waG9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29sb3Bob24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2Mucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRvYyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmVnaW5wYWdlIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJib29rY29tcG9uZW50LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRvY2Zyb250Ii8+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0idG9jcGFydCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0b2NjaGFwIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0b2NiYWNrIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvYy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0b2MuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFnZW51bS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvYy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdG9jLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdG9jLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jZnJvbnQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRvY2Zyb250Ij4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jZnJvbnQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdG9jZnJvbnQuZWxlbWVudCAtLT4KICA8IS0tIHRvIGVsZW1lbnQgdGhhdCB0aGlzIGVudHJ5IHJlcHJlc2VudHMgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRvY2Zyb250LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rZW5kLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFnZW51bS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2Zyb250LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0b2Nmcm9udC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHRvY2Zyb250Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jZW50cnkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRvY2VudHJ5Ij4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jZW50cnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdG9jZW50cnkuZWxlbWVudCAtLT4KICA8IS0tIHRvIGVsZW1lbnQgdGhhdCB0aGlzIGVudHJ5IHJlcHJlc2VudHMgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRvY2VudHJ5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlua2VuZC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhZ2VudW0uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0b2NlbnRyeS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdG9jZW50cnkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0b2NlbnRyeS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRvY3BhcnQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRvY3BhcnQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idG9jZW50cnkiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRvY2NoYXAiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jcGFydC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0b2NwYXJ0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRvY3BhcnQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0b2NwYXJ0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0b2NwYXJ0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdG9jcGFydC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRvY2NoYXAucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRvY2NoYXAiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idG9jZW50cnkiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRvY2xldmVsMSIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0b2NjaGFwLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRvY2NoYXAuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jY2hhcC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jY2hhcC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdG9jY2hhcC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHRvY2NoYXAubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2NsZXZlbDEucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRvY2xldmVsMSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0b2NlbnRyeSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idG9jbGV2ZWwyIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2xldmVsMS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDEuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jbGV2ZWwxLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jbGV2ZWwxLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDEuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDEubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2NsZXZlbDIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRvY2xldmVsMiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0b2NlbnRyeSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idG9jbGV2ZWwzIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2xldmVsMi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jbGV2ZWwyLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jbGV2ZWwyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDIubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2NsZXZlbDMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRvY2xldmVsMyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0b2NlbnRyeSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idG9jbGV2ZWw0Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2xldmVsMy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jbGV2ZWwzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jbGV2ZWwzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDMubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2NsZXZlbDQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRvY2xldmVsNCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0b2NlbnRyeSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idG9jbGV2ZWw1Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2xldmVsNC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jbGV2ZWw0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jbGV2ZWw0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2NsZXZlbDUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRvY2xldmVsNSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0b2NlbnRyeSIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0b2NsZXZlbDUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdG9jbGV2ZWw1LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRvY2xldmVsNS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2xldmVsNS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdG9jbGV2ZWw1LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdG9jbGV2ZWw1Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jYmFjay5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idG9jYmFjayI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2JhY2suYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdG9jYmFjay5lbGVtZW50IC0tPgogIDwhLS0gdG8gZWxlbWVudCB0aGF0IHRoaXMgZW50cnkgcmVwcmVzZW50cyAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jYmFjay5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlua2VuZC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhZ2VudW0uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0b2NiYWNrLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0b2NiYWNrLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdG9jYmFjay5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgdG9jLmNvbnRlbnQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsb3Qucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImxvdCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmVnaW5wYWdlIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJib29rY29tcG9uZW50LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImxvdGVudHJ5Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxvdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBsb3QuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibG90LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsb3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGxvdC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGxvdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxvdGVudHJ5LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJsb3RlbnRyeSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxvdGVudHJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGxvdGVudHJ5LmVsZW1lbnQgLS0+CiAgPCEtLQogICAgU3JjQ3JlZGl0OiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgc291cmNlIG9mIHRoZSBlbnRyeSwKICAgIGFzIGZvciBhIGxpc3Qgb2YgaWxsdXN0cmF0aW9ucwogIC0tPgogIDwhLS0gbGlua2VuZDogdG8gZWxlbWVudCB0aGF0IHRoaXMgZW50cnkgcmVwcmVzZW50cyAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibG90ZW50cnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rZW5kLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFnZW51bS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3JjY3JlZGl0Ii8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsb3RlbnRyeS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbG90ZW50cnkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBsb3RlbnRyeS5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgbG90LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEFwcGVuZGl4LCBDaGFwdGVyLCBQYXJ0LCBQcmVmYWNlLCBSZWZlcmVuY2UsIFBhcnRJbnRybyAuLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFwcGVuZGl4LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhcHBlbmRpeCIgc3Vic3RpdHV0aW9uR3JvdXA9ImFwcGVuZGl4LmNsYXNzIi8+CiAgPCEtLSBlbmQgb2YgYXBwZW5kaXguZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXBwZW5kaXguYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFwcGVuZGl4LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhcHBlbmRpeC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGFwcGVuZGl4Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2hhcHRlci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY2hhcHRlciIgc3Vic3RpdHV0aW9uR3JvdXA9ImNoYXB0ZXIuY2xhc3MiLz4KICA8IS0tIGVuZCBvZiBjaGFwdGVyLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNoYXB0ZXIuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNoYXB0ZXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNoYXB0ZXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjaGFwdGVyLm1vZHVsZSAtLT4KICA8IS0tCiAgICBOb3RlIHRoYXQgUGFydCB3YXMgdG8gaGF2ZSBpdHMgY29udGVudCBtb2RlbCByZWR1Y2VkIGluIFY0LjIuICBUaGlzCiAgICBjaGFuZ2Ugd2lsbCBub3QgYmUgbWFkZSBhZnRlciBhbGwuCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBhcnQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InBhcnQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJlZ2lucGFnZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJwYXJ0aW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJvb2tjb21wb25lbnQudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJwYXJ0aW50cm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFydGNvbnRlbnQubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhcnQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcGFydC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwYXJ0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYXJ0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwYXJ0LmF0dGxpc3QgLS0+CiAgPCEtLSBFTEVNRU5UIFBhcnRJbnRybyAoZGVmaW5lZCBiZWxvdykgLS0+CiAgPCEtLSBlbmQgb2YgcGFydC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByZWZhY2Uucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InByZWZhY2UiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJlZ2lucGFnZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJwcmVmYWNlaW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJvb2tjb21wb25lbnQudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5hdi5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0b2NjaGFwIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iYm9va2NvbXBvbmVudC5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByZWZhY2UuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcHJlZmFjZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcmVmYWNlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJlZmFjZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcHJlZmFjZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHByZWZhY2UubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZlcmVuY2Uucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlZmVyZW5jZSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmVnaW5wYWdlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InJlZmVyZW5jZWluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJib29rY29tcG9uZW50LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0icGFydGludHJvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmZW50cnkuY2xhc3MiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmZXJlbmNlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZmVyZW5jZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZlcmVuY2UuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZmVyZW5jZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmZXJlbmNlLmF0dGxpc3QgLS0+CiAgPCEtLSBFTEVNRU5UIFBhcnRJbnRybyAoZGVmaW5lZCBiZWxvdykgLS0+CiAgPCEtLSBlbmQgb2YgcmVmZXJlbmNlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGFydGludHJvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJwYXJ0aW50cm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJkaXYudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJvb2tjb21wb25lbnQuY29udGVudCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYXJ0aW50cm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcGFydGludHJvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBhcnRpbnRyby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFydGludHJvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwYXJ0aW50cm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwYXJ0aW50cm8ubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIE90aGVyIEluZm8gZWxlbWVudHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFwcGVuZGl4aW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXBwZW5kaXhpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXBwZW5kaXhpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFwcGVuZGl4aW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcHBlbmRpeGluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhcHBlbmRpeGluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGFwcGVuZGl4aW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGFwcGVuZGl4aW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb2dyYXBoeWluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImJpYmxpb2dyYXBoeWluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9ncmFwaHlpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb2dyYXBoeWluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvZ3JhcGh5aW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb2dyYXBoeWluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJpYmxpb2dyYXBoeWluZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBiaWJsaW9ncmFwaHlpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2hhcHRlcmluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNoYXB0ZXJpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2hhcHRlcmluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY2hhcHRlcmluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2hhcHRlcmluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjaGFwdGVyaW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY2hhcHRlcmluZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjaGFwdGVyaW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3NzYXJ5aW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZ2xvc3NhcnlpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3NhcnlpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGdsb3NzYXJ5aW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJnbG9zc2FyeWluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJnbG9zc2FyeWluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGdsb3NzYXJ5aW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGdsb3NzYXJ5aW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImluZGV4aW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW5kZXhpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5kZXhpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGluZGV4aW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmRleGluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmRleGluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGluZGV4aW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGluZGV4aW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNldGluZGV4aW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2V0aW5kZXhpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2V0aW5kZXhpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNldGluZGV4aW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZXRpbmRleGluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZXRpbmRleGluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNldGluZGV4aW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNldGluZGV4aW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBhcnRpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJwYXJ0aW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmZvLmNsYXNzIi8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhcnRpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHBhcnRpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBhcnRpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFydGluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHBhcnRpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcGFydGluZm8ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcmVmYWNlaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icHJlZmFjZWluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcmVmYWNlaW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwcmVmYWNlaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcmVmYWNlaW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByZWZhY2VpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwcmVmYWNlaW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHByZWZhY2VpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmZW50cnlpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZlbnRyeWluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZlbnRyeWluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmZW50cnlpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZmVudHJ5aW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZmVudHJ5aW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmZW50cnlpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVmZW50cnlpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmc2VjdGlvbmluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlZnNlY3Rpb25pbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc2VjdGlvbmluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdGlvbmluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmc2VjdGlvbmluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzZWN0aW9uaW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdGlvbmluZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZzZWN0aW9uaW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnNlY3QxaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmc2VjdDFpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc2VjdDFpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZnNlY3QxaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzZWN0MWluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzZWN0MWluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZnNlY3QxaW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZnNlY3QxaW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnNlY3QyaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmc2VjdDJpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc2VjdDJpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZnNlY3QyaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzZWN0MmluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzZWN0MmluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZnNlY3QyaW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZnNlY3QyaW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnNlY3QzaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmc2VjdDNpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc2VjdDNpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZnNlY3QzaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzZWN0M2luZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzZWN0M2luZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZnNlY3QzaW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZnNlY3QzaW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnN5bm9wc2lzZGl2aW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmc3lub3BzaXNkaXZpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc3lub3BzaXNkaXZpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZnN5bm9wc2lzZGl2aW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzeW5vcHNpc2RpdmluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzeW5vcHNpc2RpdmluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZnN5bm9wc2lzZGl2aW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZnN5bm9wc2lzZGl2aW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZmVyZW5jZWluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlZmVyZW5jZWluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZlcmVuY2VpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZmVyZW5jZWluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmZXJlbmNlaW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZmVyZW5jZWluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZmVyZW5jZWluZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZlcmVuY2VpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdDFpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWN0MWluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0MWluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VjdDFpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3QxaW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3QxaW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VjdDFpbmZvLmF0dGxpc3QgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3QyaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VjdDJpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDJpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlY3QyaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0MmluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0MmluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlY3QyaW5mby5hdHRsaXN0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0M2luZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNlY3QzaW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmZvLmNsYXNzIi8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3QzaW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWN0M2luZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdDNpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDNpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWN0M2luZm8uYXR0bGlzdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdDRpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWN0NGluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0NGluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VjdDRpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3Q0aW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3Q0aW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VjdDRpbmZvLmF0dGxpc3QgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3Q1aW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VjdDVpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDVpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlY3Q1aW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0NWluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0NWluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlY3Q1aW5mby5hdHRsaXN0IC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIFNlY3Rpb24gKHBhcmFsbGVsIHRvIFNlY3QqKSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VjdGlvbiIgc3Vic3RpdHV0aW9uR3JvdXA9InNlY3Rpb24uY2xhc3MiLz4KICA8IS0tIGVuZCBvZiBzZWN0aW9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3Rpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3Rpb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlY3Rpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzZWN0aW9uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdGlvbmluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNlY3Rpb25pbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdGlvbmluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VjdGlvbmluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdGlvbmluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0aW9uaW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VjdGlvbmluZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzZWN0aW9uaW5mby5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2Ygc2VjdGlvbi5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBTZWN0MSwgU2VjdDIsIFNlY3QzLCBTZWN0NCwgU2VjdDUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0MS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VjdDEiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InNlY3QxaW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9InNlY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5hdi5jbGFzcyIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkaXZjb21wb25lbnQubWl4Ii8+CiAgICAgICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZlbnRyeS5jbGFzcyIvPgogICAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2VjdDIiLz4KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNpbXBsZXNlY3QiLz4KICAgICAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmZW50cnkuY2xhc3MiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNlY3QyIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzaW1wbGVzZWN0Ii8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3QxLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlY3QxLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgUmVuZGVyYXM6IEluZGljYXRlcyB0aGUgZm9ybWF0IGluIHdoaWNoIHRoZSBoZWFkaW5nIHNob3VsZAogICAgYXBwZWFyCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3QxLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZW5kZXJhcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3QyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3QzIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3Q0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3Q1Ii8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3QxLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWN0MS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNlY3QxLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdDIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNlY3QyIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJzZWN0MmluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJzZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZGl2Y29tcG9uZW50Lm1peCIvPgogICAgICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmZW50cnkuY2xhc3MiLz4KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNlY3QzIi8+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzaW1wbGVzZWN0Ii8+CiAgICAgICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmVudHJ5LmNsYXNzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWN0MyIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2ltcGxlc2VjdCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5hdi5jbGFzcyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0Mi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWN0Mi5lbGVtZW50IC0tPgogIDwhLS0KICAgIFJlbmRlcmFzOiBJbmRpY2F0ZXMgdGhlIGZvcm1hdCBpbiB3aGljaCB0aGUgaGVhZGluZyBzaG91bGQKICAgIGFwcGVhcgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0Mi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVuZGVyYXMiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0MSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0MyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0NCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0NSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0Mi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VjdDIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzZWN0Mi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3QzLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWN0MyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ic2VjdDNpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ic2VjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRpdmNvbXBvbmVudC5taXgiLz4KICAgICAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmVudHJ5LmNsYXNzIi8+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWN0NCIvPgogICAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2ltcGxlc2VjdCIvPgogICAgICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZlbnRyeS5jbGFzcyIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2VjdDQiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNpbXBsZXNlY3QiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VjdDMuZWxlbWVudCAtLT4KICA8IS0tCiAgICBSZW5kZXJhczogSW5kaWNhdGVzIHRoZSBmb3JtYXQgaW4gd2hpY2ggdGhlIGhlYWRpbmcgc2hvdWxkCiAgICBhcHBlYXIKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdDMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlbmRlcmFzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDEiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDUiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlY3QzLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2VjdDMubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0NC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VjdDQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InNlY3Q0aW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9InNlY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5hdi5jbGFzcyIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkaXZjb21wb25lbnQubWl4Ii8+CiAgICAgICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZlbnRyeS5jbGFzcyIvPgogICAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2VjdDUiLz4KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNpbXBsZXNlY3QiLz4KICAgICAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmZW50cnkuY2xhc3MiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNlY3Q1Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzaW1wbGVzZWN0Ii8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3Q0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlY3Q0LmVsZW1lbnQgLS0+CiAgPCEtLQogICAgUmVuZGVyYXM6IEluZGljYXRlcyB0aGUgZm9ybWF0IGluIHdoaWNoIHRoZSBoZWFkaW5nIHNob3VsZAogICAgYXBwZWFyCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3Q0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZW5kZXJhcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3QxIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3QyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3QzIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3Q1Ii8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3Q0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWN0NC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNlY3Q0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdDUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNlY3Q1Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJzZWN0NWluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJzZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZGl2Y29tcG9uZW50Lm1peCIvPgogICAgICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmZW50cnkuY2xhc3MiLz4KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNpbXBsZXNlY3QiLz4KICAgICAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmZW50cnkuY2xhc3MiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNpbXBsZXNlY3QiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VjdDUuZWxlbWVudCAtLT4KICA8IS0tCiAgICBSZW5kZXJhczogSW5kaWNhdGVzIHRoZSBmb3JtYXQgaW4gd2hpY2ggdGhlIGhlYWRpbmcgc2hvdWxkCiAgICBhcHBlYXIKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdDUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlbmRlcmFzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDEiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDMiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDQiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlY3Q1LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2VjdDUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzaW1wbGVzZWN0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzaW1wbGVzZWN0Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpncm91cCByZWY9InNlY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkaXZjb21wb25lbnQubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNpbXBsZXNlY3QuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2ltcGxlc2VjdC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzaW1wbGVzZWN0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2ltcGxlc2VjdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2ltcGxlc2VjdC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNpbXBsZXNlY3QubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEJpYmxpb2dyYXBoeSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb2dyYXBoeS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYmlibGlvZ3JhcGh5Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJiaWJsaW9ncmFwaHlpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJib29rY29tcG9uZW50LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjb21wb25lbnQubWl4Ii8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImJpYmxpb2RpdiIvPgogICAgICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iYmlibGlvZW50cnkiLz4KICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiaWJsaW9taXhlZCIvPgogICAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb2dyYXBoeS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBiaWJsaW9ncmFwaHkuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvZ3JhcGh5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvZ3JhcGh5LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBiaWJsaW9ncmFwaHkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBiaWJsaW9ncmFwaHkubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9kaXYucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImJpYmxpb2RpdiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9InNlY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbXBvbmVudC5taXgiLz4KICAgICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iYmlibGlvZW50cnkiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iYmlibGlvbWl4ZWQiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvZGl2LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb2Rpdi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9kaXYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9kaXYucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJpYmxpb2Rpdi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJpYmxpb2Rpdi5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgYmlibGlvZ3JhcGh5LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEdsb3NzYXJ5IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3NzYXJ5LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJnbG9zc2FyeSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iZ2xvc3NhcnlpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJib29rY29tcG9uZW50LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjb21wb25lbnQubWl4Ii8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Imdsb3NzZGl2Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJnbG9zc2VudHJ5Ii8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJpYmxpb2dyYXBoeSIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJnbG9zc2FyeS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBnbG9zc2FyeS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJnbG9zc2FyeS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdsb3NzYXJ5LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBnbG9zc2FyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGdsb3NzYXJ5Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ2xvc3NkaXYucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Imdsb3NzZGl2Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpncm91cCByZWY9InNlY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbXBvbmVudC5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJnbG9zc2VudHJ5Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdsb3NzZGl2LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGdsb3NzZGl2LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3NzZGl2LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3NkaXYucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGdsb3NzZGl2LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZ2xvc3NkaXYubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIGdsb3NzYXJ5LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEluZGV4IGFuZCBTZXRJbmRleCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImluZGV4ZXMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImluZGV4Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJpbmRleGluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImJvb2tjb21wb25lbnQudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbXBvbmVudC5taXgiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmRleGRpdiIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmRleGVudHJ5Ii8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImluZGV4LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGluZGV4LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImluZGV4LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5kZXhlcy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaW5kZXguYXR0bGlzdCAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZXRpbmRleCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ic2V0aW5kZXhpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJib29rY29tcG9uZW50LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjb21wb25lbnQubWl4Ii8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5kZXhkaXYiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5kZXhlbnRyeSIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZXRpbmRleC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZXRpbmRleC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZXRpbmRleC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImluZGV4ZXMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNldGluZGV4LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW5kZXhlcy5tb2R1bGUgLS0+CiAgPCEtLQogICAgU2VnbWVudGVkTGlzdCBpbiB0aGlzIGNvbnRlbnQgaXMgdXNlZnVsIGZvciBtYXJraW5nIHVwIHBlcm11dGVkCiAgICBpbmRpY2VzLgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmRleGRpdi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW5kZXhkaXYiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJzZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmRleGRpdmNvbXBvbmVudC5taXgiLz4KICAgICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZGV4ZW50cnkiLz4KICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzZWdtZW50ZWRsaXN0Ii8+CiAgICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmRleGRpdi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBpbmRleGRpdi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmRleGRpdi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImluZGV4ZGl2LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpbmRleGRpdi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGluZGV4ZGl2Lm1vZHVsZSAtLT4KICA8IS0tIEluZGV4IGVudHJpZXMgYXBwZWFyIGluIHRoZSBpbmRleCwgbm90IHRoZSB0ZXh0LiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5kZXhlbnRyeS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW5kZXhlbnRyeSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InByaW1hcnlpZSIvPgogICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InNlZWllIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InNlZWFsc29pZSIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czpzZXF1ZW5jZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic2Vjb25kYXJ5aWUiLz4KICAgICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic2VlaWUiLz4KICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzZWVhbHNvaWUiLz4KICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0ZXJ0aWFyeWllIi8+CiAgICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmRleGVudHJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGluZGV4ZW50cnkuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5kZXhlbnRyeS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImluZGV4ZW50cnkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGluZGV4ZW50cnkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBpbmRleGVudHJ5Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJpbXNlY3RlcmllLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJwcmltYXJ5aWUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmR4dGVybS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcmltYXJ5aWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcHJpbWFyeWllLmVsZW1lbnQgLS0+CiAgPCEtLSB0byBJbmRleFRlcm1zIHRoYXQgdGhlc2UgZW50cmllcyByZXByZXNlbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByaW1hcnlpZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmtlbmRzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJpbXNlY3RlcmllLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwcmltYXJ5aWUuYXR0bGlzdCAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWNvbmRhcnlpZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY29uZGFyeWllLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlY29uZGFyeWllLmVsZW1lbnQgLS0+CiAgPCEtLSB0byBJbmRleFRlcm1zIHRoYXQgdGhlc2UgZW50cmllcyByZXByZXNlbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY29uZGFyeWllLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlua2VuZHMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcmltc2VjdGVyaWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlY29uZGFyeWllLmF0dGxpc3QgLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idGVydGlhcnlpZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRlcnRpYXJ5aWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdGVydGlhcnlpZS5lbGVtZW50IC0tPgogIDwhLS0gdG8gSW5kZXhUZXJtcyB0aGF0IHRoZXNlIGVudHJpZXMgcmVwcmVzZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0ZXJ0aWFyeWllLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlua2VuZHMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcmltc2VjdGVyaWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRlcnRpYXJ5aWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwcmltc2VjdGVyaWUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWVpZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VlaWUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmR4dGVybS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWVpZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWVpZS5lbGVtZW50IC0tPgogIDwhLS0gdG8gSW5kZXhFbnRyeSB0byBsb29rIHVwIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWVpZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmtlbmQuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWVpZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VlaWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzZWVpZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlZWFsc29pZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VlYWxzb2llIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5keHRlcm0uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VlYWxzb2llLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlZWFsc29pZS5lbGVtZW50IC0tPgogIDwhLS0gdG8gcmVsYXRlZCBJbmRleEVudHJpZXMgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlZWFsc29pZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmtlbmRzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VlYWxzb2llLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWVhbHNvaWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzZWVhbHNvaWUubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIGluZGV4LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIFJlZkVudHJ5IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZmVudHJ5LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZlbnRyeSIgc3Vic3RpdHV0aW9uR3JvdXA9InJlZmVudHJ5LmNsYXNzIi8+CiAgPCEtLSBlbmQgb2YgcmVmZW50cnkuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmZW50cnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZlbnRyeS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmZW50cnkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZlbnRyeS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZm1ldGEucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlZm1ldGEiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZWZlbnRyeXRpdGxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Im1hbnZvbG51bSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmbWlzY2luZm8iLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmbWV0YS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZWZtZXRhLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZm1ldGEuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZtZXRhLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZWZtZXRhLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVmbWV0YS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZm1pc2NpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZtaXNjaW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZm1pc2NpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZm1pc2NpbmZvLmVsZW1lbnQgLS0+CiAgPCEtLSBDbGFzczogRnJlZWx5IGFzc2lnbmFibGUgcGFyYW1ldGVyOyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZtaXNjaW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZm1pc2NpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZWZtaXNjaW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZm1pc2NpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmbmFtZWRpdi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmbmFtZWRpdiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0icmVmZGVzY3JpcHRvciIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZm5hbWUiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InJlZnB1cnBvc2UiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmNsYXNzIi8+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0icmVtYXJrIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmsuY2hhci5jbGFzcyIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZuYW1lZGl2LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZm5hbWVkaXYuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmbmFtZWRpdi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZm5hbWVkaXYucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZm5hbWVkaXYuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZuYW1lZGl2Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmZGVzY3JpcHRvci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmZGVzY3JpcHRvciI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZuYW1lLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZmRlc2NyaXB0b3IuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmZGVzY3JpcHRvci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZkZXNjcmlwdG9yLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmZGVzY3JpcHRvci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmZGVzY3JpcHRvci5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZmRlc2NyaXB0b3IubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZuYW1lLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZuYW1lIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZm5hbWUuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmbmFtZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZWZuYW1lLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZm5hbWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZuYW1lLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZWZuYW1lLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVmbmFtZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnB1cnBvc2Uucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlZnB1cnBvc2UiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmaW5saW5lLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZnB1cnBvc2UuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmcHVycG9zZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZwdXJwb3NlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmcHVycG9zZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmcHVycG9zZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZnB1cnBvc2UubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZjbGFzcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmY2xhc3MuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmY2xhc3MuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmY2xhc3MuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmY2xhc3MuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZjbGFzcy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmY2xhc3MuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZjbGFzcy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnN5bm9wc2lzZGl2LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZzeW5vcHNpc2RpdiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0icmVmc3lub3BzaXNkaXZpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJyZWZzZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmY29tcG9uZW50Lm1peCIvPgogICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZnNlY3QyIi8+CiAgICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmc2VjdDIiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc3lub3BzaXNkaXYuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmc3lub3BzaXNkaXYuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmc3lub3BzaXNkaXYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzeW5vcHNpc2Rpdi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmc3lub3BzaXNkaXYuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZzeW5vcHNpc2Rpdi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnNlY3Rpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlZnNlY3Rpb24iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InJlZnNlY3Rpb25pbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0icmVmc2VjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmNvbXBvbmVudC5taXgiLz4KICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZzZWN0aW9uIi8+CiAgICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmc2VjdGlvbiIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzZWN0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZnNlY3Rpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmc2VjdGlvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZnNlY3Rpb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZnNlY3Rpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZzZWN0aW9uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmc2VjdDEucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlZnNlY3QxIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJyZWZzZWN0MWluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJyZWZzZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmY29tcG9uZW50Lm1peCIvPgogICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZnNlY3QyIi8+CiAgICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmc2VjdDIiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc2VjdDEuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdDEuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmc2VjdDEuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzZWN0MS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdDEuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZzZWN0MS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnNlY3QyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZzZWN0MiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0icmVmc2VjdDJpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0icmVmc2VjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmNvbXBvbmVudC5taXgiLz4KICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZzZWN0MyIvPgogICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZnNlY3QzIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZnNlY3QyLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZnNlY3QyLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnNlY3QyLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc2VjdDIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZnNlY3QyLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdDIubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzZWN0My5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmc2VjdDMiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InJlZnNlY3QzaW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9InJlZnNlY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZjb21wb25lbnQubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZnNlY3QzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZnNlY3QzLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnNlY3QzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc2VjdDMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZnNlY3QzLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdDMubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIHJlZmVudHJ5LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEFydGljbGUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLQogICAgQW4gQXJ0aWNsZSBpcyBhIGNoYXB0ZXItbGV2ZWwsIHN0YW5kLWFsb25lIGRvY3VtZW50IHRoYXQgaXMgb2Z0ZW4sCiAgICBidXQgbmVlZCBub3QgYmUsIGNvbGxlY3RlZCBpbnRvIGEgQm9vay4KICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXJ0aWNsZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXJ0aWNsZSIgc3Vic3RpdHV0aW9uR3JvdXA9ImFydGljbGUuY2xhc3MiLz4KICA8IS0tIGVuZCBvZiBhcnRpY2xlLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgQ2xhc3M6IEluZGljYXRlcyB0aGUgdHlwZSBvZiBhIHBhcnRpY3VsYXIgYXJ0aWNsZTsKICAgIGFsbCBhcnRpY2xlcyBoYXZlIHRoZSBzYW1lIHN0cnVjdHVyZSBhbmQgZ2VuZXJhbCBwdXJwb3NlLgogICAgTm8gZGVmYXVsdC4KICAtLT4KICA8IS0tIFBhcmVudEJvb2s6IElEIG9mIHRoZSBlbmNsb3NpbmcgQm9vayAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXJ0aWNsZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJqb3VybmFsYXJ0aWNsZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwcm9kdWN0c2hlZXQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0id2hpdGVwYXBlciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0ZWNocmVwb3J0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNwZWNpZmljYXRpb24iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZmFxIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InBhcmVudGJvb2siIHR5cGU9InhzOklEUkVGIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhcnRpY2xlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KPC94czpzY2hlbWE+CjwhLS0gZW5kIG9mIGFydGljbGUuYXR0bGlzdCAtLT4KPCEtLSBlbmQgb2YgYXJ0aWNsZS5tb2R1bGUgLS0+CjwhLS0gRW5kIG9mIERvY0Jvb2sgZG9jdW1lbnQgaGllcmFyY2h5IG1vZHVsZSBWNC4yIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Docbook/4_3/dbnotnx.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIERvY0Jvb2sgbm90YXRpb25zIG1vZHVsZSBWNC4yIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRmlsZSBkYm5vdG54Lm1vZCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIENvcHlyaWdodCAxOTkyLTIwMDIgSGFMIENvbXB1dGVyIFN5c3RlbXMsIEluYy4sCiAgTydSZWlsbHkgJiBBc3NvY2lhdGVzLCBJbmMuLCBBcmJvclRleHQsIEluYy4sIEZ1aml0c3UgU29mdHdhcmUKICBDb3Jwb3JhdGlvbiwgTm9ybWFuIFdhbHNoLCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCBhbmQgdGhlCiAgT3JnYW5pemF0aW9uIGZvciB0aGUgQWR2YW5jZW1lbnQgb2YgU3RydWN0dXJlZCBJbmZvcm1hdGlvbgogIFN0YW5kYXJkcyAoT0FTSVMpLgogIAogICRJZDogZGJub3RueC5tb2QsdiAxLjEzIDIwMDIvMDcvMTcgMTU6MjY6MTYgbndhbHNoIEV4cCAkCiAgCiAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jQm9vayBEVEQKICBhbmQgaXRzIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUKICBpcyBoZXJlYnkgZ3JhbnRlZCBpbiBwZXJwZXR1aXR5LCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKICBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGFwcGVhciBpbiBhbGwgY29waWVzLiAgVGhlIGNvcHlyaWdodAogIGhvbGRlcnMgbWFrZSBubyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhlIERURCBmb3IKICBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzZWQgb3IgaW1wbGllZAogIHdhcnJhbnR5LgogIAogIElmIHlvdSBtb2RpZnkgdGhlIERvY0Jvb2sgRFREIGluIGFueSB3YXksIGV4Y2VwdCBmb3IgZGVjbGFyaW5nIGFuZAogIHJlZmVyZW5jaW5nIGFkZGl0aW9uYWwgc2V0cyBvZiBnZW5lcmFsIGVudGl0aWVzIGFuZCBkZWNsYXJpbmcKICBhZGRpdGlvbmFsIG5vdGF0aW9ucywgbGFiZWwgeW91ciBEVEQgYXMgYSB2YXJpYW50IG9mIERvY0Jvb2suICBTZWUKICB0aGUgbWFpbnRlbmFuY2UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAKICBQbGVhc2UgZGlyZWN0IGFsbCBxdWVzdGlvbnMsIGJ1ZyByZXBvcnRzLCBvciBzdWdnZXN0aW9ucyBmb3IKICBjaGFuZ2VzIHRvIHRoZSBkb2Nib29rQGxpc3RzLm9hc2lzLW9wZW4ub3JnIG1haWxpbmcgbGlzdC4gRm9yIG1vcmUKICBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay8uCi0tPgo8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0KICBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgZW50aXR5IGRlY2xhcmF0aW9ucyBmb3IgdGhlIHN0YW5kYXJkIElTTwogIGVudGl0eSBzZXRzIHVzZWQgYnkgRG9jQm9vay4KICAKICBJbiBEVEQgZHJpdmVyIGZpbGVzIHJlZmVycmluZyB0byB0aGlzIG1vZHVsZSwgcGxlYXNlIHVzZSBhbiBlbnRpdHkKICBkZWNsYXJhdGlvbiB0aGF0IHVzZXMgdGhlIHB1YmxpYyBpZGVudGlmaWVyIHNob3duIGJlbG93OgogIAogIDwhRU5USVRZICUgZGJub3RuIFBVQkxJQwogICItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBOb3RhdGlvbnMgVjQuMi8vRU4iCiAgImRibm90bngubW9kIj4KICAlZGJub3RuOwogIAogIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIHBhcmFtZXRlcgogIGVudGl0eSBhbmQgbW9kdWxlIHNjaGVtZSB1c2VkIGluIERvY0Jvb2ssIGN1c3RvbWl6aW5nIERvY0Jvb2sgYW5kCiAgcGxhbm5pbmcgZm9yIGludGVyY2hhbmdlLCBhbmQgY2hhbmdlcyBtYWRlIHNpbmNlIHRoZSBsYXN0IHJlbGVhc2UKICBvZiBEb2NCb29rLgotLT4KPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJub3RhdGlvbi5jbGFzcyI+CiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkJNUCIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkNHTS1DSEFSIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQ0dNLUJJTkFSWSIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkNHTS1DTEVBUiIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRJVFJPRkYiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJEVkkiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFUFMiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFUU4iLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJGQVgiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJHSUYiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJHSUY4N2EiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJHSUY4OWEiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJKUEciLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJKUEVHIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSUdFUyIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBDWCIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBJQyIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBORyIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBTIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU0dNTCIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlRCTCIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlRFWCIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlRJRkYiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJXTUYiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJXUEciLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTVkciLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsaW5lc3BlY2lmaWMiLz4KICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgPC94czpzaW1wbGVUeXBlPgo8L3hzOnNjaGVtYT4KPCEtLSBXb3JkUGVyZmVjdCBHcmFwaGljIGZvcm1hdCAtLT4KPCEtLSBFbmQgb2YgRG9jQm9vayBub3RhdGlvbnMgbW9kdWxlIFY0LjIgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Docbook/4_3/dbpoolx.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIERvY0Jvb2sgWE1MIGluZm9ybWF0aW9uIHBvb2wgbW9kdWxlIFY0LjIgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRmlsZSBkYnBvb2x4Lm1vZCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIENvcHlyaWdodCAxOTkyLTIwMDIgSGFMIENvbXB1dGVyIFN5c3RlbXMsIEluYy4sCiAgTydSZWlsbHkgJiBBc3NvY2lhdGVzLCBJbmMuLCBBcmJvclRleHQsIEluYy4sIEZ1aml0c3UgU29mdHdhcmUKICBDb3Jwb3JhdGlvbiwgTm9ybWFuIFdhbHNoLCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCBhbmQgdGhlCiAgT3JnYW5pemF0aW9uIGZvciB0aGUgQWR2YW5jZW1lbnQgb2YgU3RydWN0dXJlZCBJbmZvcm1hdGlvbgogIFN0YW5kYXJkcyAoT0FTSVMpLgogIAogICRJZDogZGJwb29seC5tb2QsdiAxLjQ2IDIwMDIvMDcvMTcgMTU6MjY6MTYgbndhbHNoIEV4cCAkCiAgCiAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jQm9vayBYTUwgRFRECiAgYW5kIGl0cyBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlCiAgaXMgaGVyZWJ5IGdyYW50ZWQgaW4gcGVycGV0dWl0eSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CiAgbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBhcHBlYXIgaW4gYWxsIGNvcGllcy4gIFRoZSBjb3B5cmlnaHQKICBob2xkZXJzIG1ha2Ugbm8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoZSBEVEQgZm9yCiAgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzc2VkIG9yIGltcGxpZWQKICB3YXJyYW50eS4KICAKICBJZiB5b3UgbW9kaWZ5IHRoZSBEb2NCb29rIFhNTCBEVEQgaW4gYW55IHdheSwgZXhjZXB0IGZvciBkZWNsYXJpbmcgYW5kCiAgcmVmZXJlbmNpbmcgYWRkaXRpb25hbCBzZXRzIG9mIGdlbmVyYWwgZW50aXRpZXMgYW5kIGRlY2xhcmluZwogIGFkZGl0aW9uYWwgbm90YXRpb25zLCBsYWJlbCB5b3VyIERURCBhcyBhIHZhcmlhbnQgb2YgRG9jQm9vay4gIFNlZQogIHRoZSBtYWludGVuYW5jZSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIAogIFBsZWFzZSBkaXJlY3QgYWxsIHF1ZXN0aW9ucywgYnVnIHJlcG9ydHMsIG9yIHN1Z2dlc3Rpb25zIGZvcgogIGNoYW5nZXMgdG8gdGhlIGRvY2Jvb2tAbGlzdHMub2FzaXMtb3Blbi5vcmcgbWFpbGluZyBsaXN0LiBGb3IgbW9yZQogIGluZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rLy4KLS0+CjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIFRoaXMgbW9kdWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIG9iamVjdHMsIGlubGluZQogIGVsZW1lbnRzLCBhbmQgc28gb24gdGhhdCBhcmUgYXZhaWxhYmxlIHRvIGJlIHVzZWQgYXMgdGhlIG1haW4KICBjb250ZW50IG9mIERvY0Jvb2sgZG9jdW1lbnRzLiAgU29tZSBlbGVtZW50cyBhcmUgdXNlZnVsIGZvciBnZW5lcmFsCiAgcHVibGlzaGluZywgYW5kIG90aGVycyBhcmUgdXNlZnVsIHNwZWNpZmljYWxseSBmb3IgY29tcHV0ZXIKICBkb2N1bWVudGF0aW9uLgogIAogIFRoaXMgbW9kdWxlIGhhcyB0aGUgZm9sbG93aW5nIGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzOgogIAogIG8gSXQgYXNzdW1lcyB0aGF0IGEgJW5vdGF0aW9uLmNsYXNzOyBlbnRpdHkgaXMgZGVmaW5lZCBieSB0aGUKICAgIGRyaXZlciBmaWxlIG9yIG90aGVyIGhpZ2gtbGV2ZWwgbW9kdWxlLiAgVGhpcyBlbnRpdHkgaXMKICAgIHJlZmVyZW5jZWQgaW4gdGhlIE5PVEFUSU9OIGF0dHJpYnV0ZXMgZm9yIHRoZSBncmFwaGljLXJlbGF0ZWQgYW5kCiAgICBNb2RlU3BlYyBlbGVtZW50cy4KICAKICBvIEl0IGFzc3VtZXMgdGhhdCBhbiBhcHByb3ByaWF0ZWx5IHBhcmFtZXRlcml6ZWQgdGFibGUgbW9kdWxlIGlzCiAgICBhdmFpbGFibGUgZm9yIHVzZSB3aXRoIHRoZSB0YWJsZS1yZWxhdGVkIGVsZW1lbnRzLgogIAogIEluIERURCBkcml2ZXIgZmlsZXMgcmVmZXJyaW5nIHRvIHRoaXMgbW9kdWxlLCBwbGVhc2UgdXNlIGFuIGVudGl0eQogIGRlY2xhcmF0aW9uIHRoYXQgdXNlcyB0aGUgcHVibGljIGlkZW50aWZpZXIgc2hvd24gYmVsb3c6CiAgCiAgPCFFTlRJVFkgJSBkYnBvb2wgUFVCTElDCiAgIi0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBJbmZvcm1hdGlvbiBQb29sIFY0LjIvL0VOIgogICJkYnBvb2x4Lm1vZCI+CiAgJWRicG9vbDsKICAKICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoZSBwYXJhbWV0ZXIKICBlbnRpdHkgYW5kIG1vZHVsZSBzY2hlbWUgdXNlZCBpbiBEb2NCb29rLCBjdXN0b21pemluZyBEb2NCb29rIGFuZAogIHBsYW5uaW5nIGZvciBpbnRlcmNoYW5nZSwgYW5kIGNoYW5nZXMgbWFkZSBzaW5jZSB0aGUgbGFzdCByZWxlYXNlCiAgb2YgRG9jQm9vay4KLS0+CjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLSBHZW5lcmFsLXB1cnBvc2Ugc2VtYW50aWNzIGVudGl0aWVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgogIDx4czppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJjYWxzdGJseC54c2QiLz4KICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJ5ZXNvcm5vLmF0dHZhbHMiPgogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyIvPgogIDwveHM6c2ltcGxlVHlwZT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBFbnRpdGllcyBmb3IgbW9kdWxlIGluY2x1c2lvbnMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEVudGl0aWVzIGZvciBlbGVtZW50IGNsYXNzZXMgYW5kIG1peHR1cmVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSAiVWJpcXVpdG91cyIgY2xhc3NlczogbmR4dGVybS5jbGFzcyBhbmQgYmVnaW5wYWdlIC0tPgogIDx4czplbGVtZW50IG5hbWU9Im5keHRlcm0uY2xhc3MiIGFic3RyYWN0PSJ0cnVlIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJwcmltYXJ5Ii8+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiPgogICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InNlY29uZGFyeSIvPgogICAgICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+CiAgICAgICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0ZXJ0aWFyeSIvPgogICAgICAgICAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiPgogICAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InNlZSIvPgogICAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWVhbHNvIi8+CiAgICAgICAgICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic2VlIi8+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2VlYWxzbyIvPgogICAgICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InNlZSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2VlYWxzbyIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmRleHRlcm0uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBPYmplY3QtbGV2ZWwgY2xhc3NlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czplbGVtZW50IG5hbWU9Imxpc3QuY2xhc3MiIGFic3RyYWN0PSJ0cnVlIi8+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYWRtb24uY2xhc3MiIGFic3RyYWN0PSJ0cnVlIi8+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibGluZXNwZWNpZmljLmNsYXNzIiBhYnN0cmFjdD0idHJ1ZSIvPgogIDx4czplbGVtZW50IG5hbWU9Im1ldGhvZC5zeW5vcC5jbGFzcyIgYWJzdHJhY3Q9InRydWUiIHN1YnN0aXR1dGlvbkdyb3VwPSJzeW5vcC5jbGFzcyIvPgogIDx4czplbGVtZW50IG5hbWU9InN5bm9wLmNsYXNzIiBhYnN0cmFjdD0idHJ1ZSIvPgogIDx4czplbGVtZW50IG5hbWU9InBhcmEuY2xhc3MiIGFic3RyYWN0PSJ0cnVlIi8+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW5mb3JtYWwuY2xhc3MiIGFic3RyYWN0PSJ0cnVlIi8+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZm9ybWFsLmNsYXNzIiBhYnN0cmFjdD0idHJ1ZSIvPgogIDwhLS0gVGhlIERvY0Jvb2sgVEMgbWF5IHByb2R1Y2UgYW4gb2ZmaWNpYWwgRUJORiBtb2R1bGUgZm9yIERvY0Jvb2suIC0tPgogIDwhLS0gVGhpcyBQRSBwcm92aWRlcyB0aGUgaG9vayBieSB3aGljaCBpdCBjYW4gYmUgaW5zZXJ0ZWQgaW50byB0aGUgRFRELiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb21wb3VuZC5jbGFzcyIgYWJzdHJhY3Q9InRydWUiLz4KICA8eHM6Z3JvdXAgbmFtZT0iZ2Vub2JqLmNsYXNzIj4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYW5jaG9yIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYnJpZGdlaGVhZCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InJlbWFyayIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImhpZ2hsaWdodHMiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9ImRlc2NvYmouY2xhc3MiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhYnN0cmFjdCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImF1dGhvcmJsdXJiIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZXBpZ3JhcGgiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPCEtLSBDaGFyYWN0ZXItbGV2ZWwgY2xhc3NlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czplbGVtZW50IG5hbWU9InhyZWYuY2hhci5jbGFzcyIgYWJzdHJhY3Q9InRydWUiLz4KICA8eHM6ZWxlbWVudCBuYW1lPSJnZW4uY2hhci5jbGFzcyIgYWJzdHJhY3Q9InRydWUiLz4KICA8eHM6ZWxlbWVudCBuYW1lPSJsaW5rLmNoYXIuY2xhc3MiIGFic3RyYWN0PSJ0cnVlIi8+CiAgPCEtLSBUaGUgRG9jQm9vayBUQyBtYXkgcHJvZHVjZSBhbiBvZmZpY2lhbCBFQk5GIG1vZHVsZSBmb3IgRG9jQm9vay4gLS0+CiAgPCEtLSBUaGlzIFBFIHByb3ZpZGVzIHRoZSBob29rIGJ5IHdoaWNoIGl0IGNhbiBiZSBpbnNlcnRlZCBpbnRvIHRoZSBEVEQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InRlY2guY2hhci5jbGFzcyIgYWJzdHJhY3Q9InRydWUiLz4KICA8eHM6Z3JvdXAgbmFtZT0iYmFzZS5jaGFyLmNsYXNzIj4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhbmNob3IiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpncm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJkb2NpbmZvLmNoYXIuY2xhc3MiIGFic3RyYWN0PSJ0cnVlIi8+CiAgPHhzOmdyb3VwIG5hbWU9Im90aGVyLmNoYXIuY2xhc3MiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZW1hcmsiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdWJzY3JpcHQiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdXBlcnNjcmlwdCIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbmxpbmVvYmouY2hhci5jbGFzcyIgYWJzdHJhY3Q9InRydWUiLz4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBFbnRpdGllcyBmb3IgY29udGVudCBtb2RlbHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czpncm91cCBuYW1lPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0idGl0bGUiLz4KICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlYWJicmV2Ii8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPCEtLSBSZWRlY2xhcmF0aW9uIHBsYWNlaG9sZGVyIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0KICAgIEZvciByZWRlY2xhcmluZyBlbnRpdGllcyB0aGF0IGFyZSBkZWNsYXJlZCBhZnRlciB0aGlzIHBvaW50IHdoaWxlCiAgICByZXRhaW5pbmcgdGhlaXIgcmVmZXJlbmNlcyB0byB0aGUgZW50aXRpZXMgdGhhdCBhcmUgZGVjbGFyZWQgYmVmb3JlCiAgICB0aGlzIHBvaW50CiAgLS0+CiAgPCEtLSBPYmplY3QtbGV2ZWwgbWl4dHVyZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0KICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0IGFkbW4gbGluZSBzeW5wIHBhcmEgaW5mbSBmb3JtIGNtcGQgZ2VuICBkZXNjCiAgICBDb21wb25lbnQgbWl4dHVyZSAgICAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYCiAgICBTaWRlYmFyIG1peHR1cmUgICAgICAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIGEgICAgWAogICAgRm9vdG5vdGUgbWl4dHVyZSAgICAgICAgWCAgICAgICAgIFggICAgWCAgICBYICAgIFgKICAgIEV4YW1wbGUgbWl4dHVyZSAgICAgICAgIFggICAgICAgICBYICAgIFggICAgWCAgICBYCiAgICBIaWdobGlnaHRzIG1peHR1cmUgICAgICBYICAgIFggICAgICAgICAgICAgIFgKICAgIFBhcmFncmFwaCBtaXh0dXJlICAgICAgIFggICAgICAgICBYICAgIFggICAgICAgICBYCiAgICBBZG1vbml0aW9uIG1peHR1cmUgICAgICBYICAgICAgICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIGIgICAgYwogICAgRmlndXJlIG1peHR1cmUgICAgICAgICAgICAgICAgICAgIFggICAgWCAgICAgICAgIFgKICAgIFRhYmxlIGVudHJ5IG1peHR1cmUgICAgIFggICAgWCAgICBYICAgICAgICAgWCAgICBkCiAgICBHbG9zc2FyeSBkZWYgbWl4dHVyZSAgICBYICAgICAgICAgWCAgICBYICAgIFggICAgWCAgICAgICAgIGUKICAgIExlZ2FsIG5vdGljZSBtaXh0dXJlICAgIFggICAgWCAgICBYICAgICAgICAgWCAgICBmCiAgICAKICAgIGEuIEp1c3QgUHJvY2VkdXJlOyBub3QgU2lkZWJhciBpdHNlbGYgb3IgTXNnU2V0LgogICAgYi4gTm8gTXNnU2V0LgogICAgYy4gTm8gSGlnaGxpZ2h0cy4KICAgIGQuIEp1c3QgR3JhcGhpYzsgbm8gb3RoZXIgaW5mb3JtYWwgb2JqZWN0cy4KICAgIGUuIE5vIEFuY2hvciwgQnJpZGdlSGVhZCwgb3IgSGlnaGxpZ2h0cy4KICAgIGYuIEp1c3QgQmxvY2tRdW90ZTsgbm8gb3RoZXIgaW5mb3JtYWwgb2JqZWN0cy4KICAtLT4KICA8eHM6Z3JvdXAgbmFtZT0iY29tcG9uZW50Lm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imxpc3QuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhZG1vbi5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVzcGVjaWZpYy5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN5bm9wLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImluZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iY29tcG91bmQuY2xhc3MiLz4KICAgICAgPHhzOmdyb3VwIHJlZj0iZ2Vub2JqLmNsYXNzIi8+CiAgICAgIDx4czpncm91cCByZWY9ImRlc2NvYmouY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYmVnaW5wYWdlIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJzaWRlYmFyLm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imxpc3QuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhZG1vbi5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVzcGVjaWZpYy5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN5bm9wLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImluZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icHJvY2VkdXJlIi8+CiAgICAgIDx4czpncm91cCByZWY9Imdlbm9iai5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9InFhbmRhc2V0Lm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imxpc3QuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhZG1vbi5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVzcGVjaWZpYy5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN5bm9wLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImluZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icHJvY2VkdXJlIi8+CiAgICAgIDx4czpncm91cCByZWY9Imdlbm9iai5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9InJldmRlc2NyaXB0aW9uLm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imxpc3QuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhZG1vbi5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVzcGVjaWZpYy5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN5bm9wLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImluZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icHJvY2VkdXJlIi8+CiAgICAgIDx4czpncm91cCByZWY9Imdlbm9iai5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9ImZvb3Rub3RlLm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imxpc3QuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lc3BlY2lmaWMuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzeW5vcC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmZvcm1hbC5jbGFzcyIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0iZXhhbXBsZS5taXgiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaXN0LmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZXNwZWNpZmljLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ic3lub3AuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaW5mb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYmVnaW5wYWdlIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJoaWdobGlnaHRzLm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imxpc3QuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhZG1vbi5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDwhLS0KICAgICVmb3JtYWwuY2xhc3M7IGlzIGV4cGxpY2l0bHkgZXhjbHVkZWQgZnJvbSBtYW55IGNvbnRleHRzIGluIHdoaWNoCiAgICBwYXJhZ3JhcGhzIGFyZSB1c2VkCiAgLS0+CiAgPHhzOmdyb3VwIG5hbWU9InBhcmEubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGlzdC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFkbW9uLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZXNwZWNpZmljLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaW5mb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmb3JtYWwuY2xhc3MiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9ImFkbW9uLm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imxpc3QuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lc3BlY2lmaWMuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzeW5vcC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmZvcm1hbC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImZvcm1hbC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InByb2NlZHVyZSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InNpZGViYXIiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhbmNob3IiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJicmlkZ2VoZWFkIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icmVtYXJrIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImJlZ2lucGFnZSIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0iZmlndXJlLm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVzcGVjaWZpYy5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN5bm9wLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaW5mb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYmVnaW5wYWdlIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJ0YWJlbnRyeS5taXgiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaXN0LmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYWRtb24uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lc3BlY2lmaWMuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZ3JhcGhpYyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im1lZGlhb2JqZWN0Ii8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJnbG9zc2RlZi5taXgiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaXN0LmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZXNwZWNpZmljLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ic3lub3AuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaW5mb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZW1hcmsiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYmVnaW5wYWdlIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJsZWdhbG5vdGljZS5taXgiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaXN0LmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYWRtb24uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lc3BlY2lmaWMuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYmxvY2txdW90ZSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9InRleHRvYmplY3QubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGlzdC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFkbW9uLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZXNwZWNpZmljLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImJsb2NrcXVvdGUiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibWVkaWFvYmplY3QubWl4IiBhYnN0cmFjdD0idHJ1ZSIvPgogIDx4czpncm91cCBuYW1lPSJsaXN0cHJlYW1ibGUubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYWRtb24uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lc3BlY2lmaWMuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzeW5vcC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmZvcm1hbC5jbGFzcyIvPgogICAgICA8eHM6Z3JvdXAgcmVmPSJnZW5vYmouY2xhc3MiLz4KICAgICAgPHhzOmdyb3VwIHJlZj0iZGVzY29iai5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPCEtLSBDaGFyYWN0ZXItbGV2ZWwgbWl4dHVyZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gc2dtbC5mZWF0dXJlcyAtLT4KICA8IS0tIG5vdCBbc2dtbC5mZWF0dXJlc1sgLS0+CiAgPCEtLSBdXSBub3Qgc2dtbC5mZWF0dXJlcyAtLT4KICA8IS0tCiAgICAgICAgICAgICAgICAgICAgICAgICNQQ0QgeHJlZiB3b3JkIGxpbmsgY3B0ciBiYXNlIGRuZm8gb3RociBpbm9iIChzeW5vcCkKICAgIHBhcmEuY2hhci5taXggICAgICAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgWAogICAgdGl0bGUuY2hhci5taXggICAgICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYCiAgICBuZHh0ZXJtLmNoYXIubWl4ICAgICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIGEKICAgIGNwdHIuY2hhci5taXggICAgICAgICBYICAgICAgICAgICAgICBYICAgIFggICAgWCAgICAgICAgIFggICAgYQogICAgc21hbGxjcHRyLmNoYXIubWl4ICAgIFggICAgICAgICAgICAgICAgICAgYiAgICAgICAgICAgICAgICAgICBhCiAgICB3b3JkLmNoYXIubWl4ICAgICAgICAgWCAgICAgICAgIGMgICAgWCAgICAgICAgIFggICAgICAgICBYICAgIGEKICAgIGRvY2luZm8uY2hhci5taXggICAgICBYICAgICAgICAgZCAgICBYICAgIGIgICAgICAgICAgICAgIFggICAgYQogICAgCiAgICBhLiBKdXN0IElubGluZUdyYXBoaWM7IG5vIElubGluZUVxdWF0aW9uLgogICAgYi4gSnVzdCBSZXBsYWNlYWJsZTsgbm8gb3RoZXIgY29tcHV0ZXIgdGVybXMuCiAgICBjLiBKdXN0IEVtcGhhc2lzIGFuZCBUcmFkZW1hcms7IG5vIG90aGVyIHdvcmQgZWxlbWVudHMuCiAgICBkLiBKdXN0IEFjcm9ueW0sIEVtcGhhc2lzLCBhbmQgVHJhZGVtYXJrOyBubyBvdGhlciB3b3JkIGVsZW1lbnRzLgogIC0tPgogIDwhLS0gVGhlIERvY0Jvb2sgVEMgbWF5IHByb2R1Y2UgYW4gb2ZmaWNpYWwgZm9ybXMgbW9kdWxlIGZvciBEb2NCb29rLiAtLT4KICA8IS0tIFRoaXMgUEUgcHJvdmlkZXMgdGhlIGhvb2sgYnkgd2hpY2ggaXQgY2FuIGJlIGluc2VydGVkIGludG8gdGhlIERURC4gLS0+CiAgPHhzOmdyb3VwIG5hbWU9InBhcmEuY2hhci5taXgiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4cmVmLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Imdlbi5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRlY2guY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJhc2UuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZG9jaW5mby5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ib3RoZXIuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lb2JqLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN5bm9wLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9InRpdGxlLmNoYXIubWl4Ij4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ieHJlZi5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJnZW4uY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluay5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0ZWNoLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJiYXNlLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImRvY2luZm8uY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9Im90aGVyLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZW9iai5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJuZHh0ZXJtLmNoYXIubWl4Ij4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ieHJlZi5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJnZW4uY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluay5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0ZWNoLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJiYXNlLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImRvY2luZm8uY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9Im90aGVyLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZWdyYXBoaWMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZW1lZGlhb2JqZWN0Ii8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJjcHRyLmNoYXIubWl4Ij4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluay5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0ZWNoLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJiYXNlLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJvdGhlci5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmxpbmVncmFwaGljIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmxpbmVtZWRpYW9iamVjdCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYmVnaW5wYWdlIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJzbWFsbGNwdHIuY2hhci5taXgiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZXBsYWNlYWJsZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lZ3JhcGhpYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lbWVkaWFvYmplY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImJlZ2lucGFnZSIvPgogICAgICA8L3hzOmNob2ljZT4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0id29yZC5jaGFyLm1peCI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFjcm9ueW0iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImVtcGhhc2lzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0cmFkZW1hcmsiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmsuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJhc2UuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9Im90aGVyLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZWdyYXBoaWMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZW1lZGlhb2JqZWN0Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9ImRvY2luZm8uY2hhci5taXgiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImVtcGhhc2lzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0cmFkZW1hcmsiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InJlcGxhY2VhYmxlIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ib3RoZXIuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lZ3JhcGhpYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lbWVkaWFvYmplY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPCEtLSBFTlRJVFkgJSBiaWJsaW9jb21wb25lbnQubWl4IChzZWUgQmlibGlvZ3JhcGhpYyBzZWN0aW9uLCBiZWxvdykgLS0+CiAgPCEtLSBFTlRJVFkgJSBwZXJzb24uaWRlbnQubWl4IChzZWUgQmlibGlvZ3JhcGhpYyBzZWN0aW9uLCBiZWxvdykgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gRW50aXRpZXMgZm9yIGF0dHJpYnV0ZXMgYW5kIGF0dHJpYnV0ZSBjb21wb25lbnRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEVmZmVjdGl2aXR5IGF0dHJpYnV0ZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLQogICAgQXJjaDogQ29tcHV0ZXIgb3IgY2hpcCBhcmNoaXRlY3R1cmUgdG8gd2hpY2ggZWxlbWVudCBhcHBsaWVzOyBubwogICAgZGVmYXVsdAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcmNoLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFyY2giLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gQ29uZGl0aW9uOiBHZW5lcmFsLXB1cnBvc2UgZWZmZWN0aXZpdHkgYXR0cmlidXRlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25kaXRpb24uYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29uZGl0aW9uIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIENvbmZvcm1hbmNlOiBTdGFuZGFyZHMgY29uZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25mb3JtYW5jZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb25mb3JtYW5jZSIgdHlwZT0ieHM6Tk1UT0tFTlMiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gT1M6IE9wZXJhdGluZyBzeXN0ZW0gdG8gd2hpY2ggZWxlbWVudCBhcHBsaWVzOyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvcy5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvcyIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBSZXZpc2lvbjogRWRpdG9yaWFsIHJldmlzaW9uIHRvIHdoaWNoIGVsZW1lbnQgYmVsb25nczsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmV2aXNpb24uYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmV2aXNpb24iLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gU2VjdXJpdHk6IFNlY3VyaXR5IGNsYXNzaWZpY2F0aW9uOyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN1cml0eS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZWN1cml0eSIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLQogICAgVXNlckxldmVsOiBMZXZlbCBvZiB1c2VyIGV4cGVyaWVuY2UgdG8gd2hpY2ggZWxlbWVudCBhcHBsaWVzOyBubwogICAgZGVmYXVsdAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ1c2VybGV2ZWwuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXNlcmxldmVsIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIFZlbmRvcjogQ29tcHV0ZXIgdmVuZG9yIHRvIHdoaWNoIGVsZW1lbnQgYXBwbGllczsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idmVuZG9yLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZlbmRvciIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVmZmVjdGl2aXR5LmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhcmNoLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29uZGl0aW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29uZm9ybWFuY2UuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvcy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJldmlzaW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdXJpdHkuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ1c2VybGV2ZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2ZW5kb3IuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIENvbW1vbiBhdHRyaWJ1dGVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBJZDogVW5pcXVlIGlkZW50aWZpZXIgb2YgZWxlbWVudDsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaWQuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InhzOklEIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tCiAgICBJZDogVW5pcXVlIGlkZW50aWZpZXIgb2YgZWxlbWVudDsgYSB2YWx1ZSBtdXN0IGJlIHN1cHBsaWVkOyBubwogICAgZGVmYXVsdAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpZHJlcS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6SUQiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0KICAgIExhbmc6IEluZGljYXRvciBvZiBsYW5ndWFnZSBpbiB3aGljaCBlbGVtZW50IGlzIHdyaXR0ZW4sIGZvcgogICAgdHJhbnNsYXRpb24sIGNoYXJhY3RlciBzZXQgbWFuYWdlbWVudCwgZXRjLjsgbm8gZGVmYXVsdAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsYW5nLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImxhbmciLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gUmVtYXA6IFByZXZpb3VzIHJvbGUgb2YgZWxlbWVudCBiZWZvcmUgY29udmVyc2lvbjsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVtYXAuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVtYXAiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gUm9sZTogTmV3IHJvbGUgb2YgZWxlbWVudCBpbiBsb2NhbCBlbnZpcm9ubWVudDsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyb2xlIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tCiAgICBYUmVmTGFiZWw6IEFsdGVybmF0ZSBsYWJlbGluZyBzdHJpbmcgZm9yIFhSZWYgdGV4dCBnZW5lcmF0aW9uOwogICAgZGVmYXVsdCBpcyB1c3VhbGx5IHRpdGxlIG9yIG90aGVyIGFwcHJvcHJpYXRlIGxhYmVsIHRleHQgYWxyZWFkeQogICAgY29udGFpbmVkIGluIGVsZW1lbnQKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ieHJlZmxhYmVsLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InhyZWZsYWJlbCIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLQogICAgUmV2aXNpb25GbGFnOiBSZXZpc2lvbiBzdGF0dXMgb2YgZWxlbWVudDsgZGVmYXVsdCBpcyB0aGF0IGVsZW1lbnQKICAgIHdhc24ndCByZXZpc2VkCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJldmlzaW9uZmxhZy5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZXZpc2lvbmZsYWciPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjaGFuZ2VkIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImFkZGVkIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImRlbGV0ZWQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib2ZmIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIFJvbGUgaXMgaW5jbHVkZWQgZXhwbGljaXRseSBvbiBlYWNoIGVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbW1vbi5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaWQuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYW5nLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVtYXAuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ4cmVmbGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXZpc2lvbmZsYWcuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlZmZlY3Rpdml0eS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gUm9sZSBpcyBpbmNsdWRlZCBleHBsaWNpdGx5IG9uIGVhY2ggZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaWRyZXEuY29tbW9uLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpZHJlcS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhbmcuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZW1hcC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InhyZWZsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJldmlzaW9uZmxhZy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVmZmVjdGl2aXR5LmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBTZW1pLWNvbW1vbiBhdHRyaWJ1dGVzIGFuZCBvdGhlciBhdHRyaWJ1dGUgZW50aXRpZXMgLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0KICAgIEVudGl0eVJlZjogTmFtZSBvZiBhbiBleHRlcm5hbCBlbnRpdHkgY29udGFpbmluZyB0aGUgY29udGVudAogICAgb2YgdGhlIGdyYXBoaWMKICAtLT4KICA8IS0tCiAgICBGaWxlUmVmOiBGaWxlbmFtZSwgcXVhbGlmaWVkIGJ5IGEgcGF0aG5hbWUgaWYgZGVzaXJlZCwKICAgIGRlc2lnbmF0aW5nIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGdyYXBoaWMKICAtLT4KICA8IS0tIEZvcm1hdDogTm90YXRpb24gb2YgdGhlIGVsZW1lbnQgY29udGVudCwgaWYgYW55IC0tPgogIDwhLS0gU3JjQ3JlZGl0OiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgc291cmNlIG9mIHRoZSBHcmFwaGljIC0tPgogIDwhLS0gV2lkdGg6IFNhbWUgYXMgQ0FMUyByZXByb3dpZCAoZGVzaXJlZCB3aWR0aCkgLS0+CiAgPCEtLSBEZXB0aDogU2FtZSBhcyBDQUxTIHJlcHJvZGVwIChkZXNpcmVkIGRlcHRoKSAtLT4KICA8IS0tCiAgICBBbGlnbjogU2FtZSBhcyBDQUxTIGhwbGFjZSB3aXRoICdub25lJyByZW1vdmVkOyAjSU1QTElFRCBtZWFucwogICAgYXBwbGljYXRpb24tc3BlY2lmaWMKICAtLT4KICA8IS0tIFNjYWxlOiBDb25mbGF0aW9uIG9mIENBTFMgaHNjYWxlIGFuZCB2c2NhbGUgLS0+CiAgPCEtLSBTY2FsZWZpdDogU2FtZSBhcyBDQUxTIHNjYWxlZml0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJncmFwaGljcy5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJlbnRpdHlyZWYiIHR5cGU9InhzOkVOVElUWSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmaWxlcmVmIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZvcm1hdCIgdHlwZT0ibm90YXRpb24uY2xhc3MiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3JjY3JlZGl0Ii8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9IndpZHRoIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbnRlbnR3aWR0aCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkZXB0aCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb250ZW50ZGVwdGgiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYWxpZ24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsZWZ0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJpZ2h0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNlbnRlciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2YWxpZ24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0b3AiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibWlkZGxlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImJvdHRvbSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzY2FsZSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzY2FsZWZpdCIgdHlwZT0ieWVzb3Juby5hdHR2YWxzIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tCiAgICBBY3Rpb246IEtleSBjb21iaW5hdGlvbiB0eXBlOyBkZWZhdWx0IGlzIHVuc3BlY2lmaWVkIGlmIG9uZQogICAgY2hpbGQgZWxlbWVudCwgU2ltdWwgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZTsgaWYgdmFsdWUgaXMKICAgIE90aGVyLCB0aGUgT3RoZXJBY3Rpb24gYXR0cmlidXRlIG11c3QgaGF2ZSBhIG5vbmVtcHR5IHZhbHVlCiAgLS0+CiAgPCEtLSBPdGhlckFjdGlvbjogVXNlci1kZWZpbmVkIGtleSBjb21iaW5hdGlvbiB0eXBlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJrZXlhY3Rpb24uYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYWN0aW9uIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2xpY2siLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZG91YmxlLWNsaWNrIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InByZXNzIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlcSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzaW11bCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvdGhlciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvdGhlcmFjdGlvbiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLQogICAgTGFiZWw6IElkZW50aWZ5aW5nIG51bWJlciBvciBzdHJpbmc7IGRlZmF1bHQgaXMgdXN1YWxseSB0aGUKICAgIGFwcHJvcHJpYXRlIG51bWJlciBvciBzdHJpbmcgYXV0b2dlbmVyYXRlZCBieSBhIGZvcm1hdHRlcgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsYWJlbC5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsYWJlbCIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLQogICAgRm9ybWF0OiB3aGV0aGVyIGVsZW1lbnQgaXMgYXNzdW1lZCB0byBjb250YWluIHNpZ25pZmljYW50IHdoaXRlCiAgICBzcGFjZQogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsaW5lc3BlY2lmaWMuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZm9ybWF0IiBkZWZhdWx0PSJsaW5lc3BlY2lmaWMiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsaW5lc3BlY2lmaWMiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGluZW51bWJlcmluZyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im51bWJlcmVkIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InVubnVtYmVyZWQiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gTGlua2VuZDogbGluayB0byByZWxhdGVkIGluZm9ybWF0aW9uOyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsaW5rZW5kLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImxpbmtlbmQiIHR5cGU9InhzOklEUkVGIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIExpbmtlbmQ6IHJlcXVpcmVkIGxpbmsgdG8gcmVsYXRlZCBpbmZvcm1hdGlvbiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGlua2VuZHJlcS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsaW5rZW5kIiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4czpJRFJFRiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLQogICAgTGlua2VuZHM6IGxpbmsgdG8gb25lIG9yIG1vcmUgc2V0cyBvZiByZWxhdGVkIGluZm9ybWF0aW9uOyBubwogICAgZGVmYXVsdAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsaW5rZW5kcy5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsaW5rZW5kcyIgdHlwZT0ieHM6SURSRUZTIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibWFyay5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtYXJrIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIE1vcmVJbmZvOiB3aGV0aGVyIGVsZW1lbnQncyBjb250ZW50IGhhcyBhbiBhc3NvY2lhdGVkIFJlZkVudHJ5IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtb3JlaW5mby5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtb3JlaW5mbyIgZGVmYXVsdD0ibm9uZSI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlZmVudHJ5Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5vbmUiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gUGFnZW51bTogbnVtYmVyIG9mIHBhZ2Ugb24gd2hpY2ggZWxlbWVudCBhcHBlYXJzOyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwYWdlbnVtLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InBhZ2VudW0iLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0KICAgIFN0YXR1czogRWRpdG9yaWFsIG9yIHB1YmxpY2F0aW9uIHN0YXR1cyBvZiB0aGUgZWxlbWVudAogICAgaXQgYXBwbGllcyB0bywgc3VjaCBhcyAiaW4gcmV2aWV3IiBvciAiYXBwcm92ZWQgZm9yIGRpc3RyaWJ1dGlvbiIKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3RhdHVzLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InN0YXR1cyIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLQogICAgV2lkdGg6IHdpZHRoIG9mIHRoZSBsb25nZXN0IGxpbmUgaW4gdGhlIGVsZW1lbnQgdG8gd2hpY2ggaXQKICAgIHBlcnRhaW5zLCBpbiBudW1iZXIgb2YgY2hhcmFjdGVycwogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ3aWR0aC5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ3aWR0aCIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gVGl0bGUgZWxlbWVudHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGl0bGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRpdGxlIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRpdGxlLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRpdGxlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRpdGxlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRpdGxlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFnZW51bS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRpdGxlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0aXRsZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHRpdGxlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGl0bGVhYmJyZXYucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRpdGxlYWJicmV2Ij4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRpdGxlLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRpdGxlYWJicmV2LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRpdGxlYWJicmV2LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRpdGxlYWJicmV2LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGl0bGVhYmJyZXYucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRpdGxlYWJicmV2LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdGl0bGVhYmJyZXYubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdWJ0aXRsZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3VidGl0bGUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idGl0bGUuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3VidGl0bGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc3VidGl0bGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3VidGl0bGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdWJ0aXRsZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc3VidGl0bGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzdWJ0aXRsZS5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gQmlibGlvZ3JhcGhpYyBlbnRpdGllcyBhbmQgZWxlbWVudHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tCiAgICBUaGUgYmlibGlvZ3JhcGhpYyBlbGVtZW50cyBhcmUgdHlwaWNhbGx5IHVzZWQgaW4gdGhlIGRvY3VtZW50CiAgICBoaWVyYXJjaHkuIFRoZXkgZG8gbm90IGFwcGVhciBpbiBjb250ZW50IG1vZGVscyBvZiBpbmZvcm1hdGlvbgogICAgcG9vbCBlbGVtZW50cy4gIFNlZSBhbHNvIHRoZSBkb2N1bWVudCBpbmZvcm1hdGlvbiBlbGVtZW50cywKICAgIGJlbG93LgogIC0tPgogIDx4czpncm91cCBuYW1lPSJwZXJzb24uaWRlbnQubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaG9ub3JpZmljIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZmlyc3RuYW1lIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ic3VybmFtZSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVhZ2UiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJvdGhlcm5hbWUiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhZmZpbGlhdGlvbiIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImF1dGhvcmJsdXJiIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iY29udHJpYiIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0iYmlibGlvY29tcG9uZW50Lm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFiYnJldiIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFic3RyYWN0Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYWRkcmVzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFydHBhZ2VudW1zIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYXV0aG9yIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYXV0aG9yZ3JvdXAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhdXRob3Jpbml0aWFscyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImJpYmxpb21pc2MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiaWJsaW9zZXQiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb2xsYWIiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb25mZ3JvdXAiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb250cmFjdG51bSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImNvbnRyYWN0c3BvbnNvciIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImNvcHlyaWdodCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImNvcnBhdXRob3IiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb3JwbmFtZSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImRhdGUiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlZGl0aW9uIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZWRpdG9yIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaW52cGFydG51bWJlciIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImlzYm4iLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpc3NuIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaXNzdWVudW0iLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJvcmduYW1lIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYmlibGlvaWQiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjaXRlYmlibGlvaWQiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiaWJsaW9zb3VyY2UiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiaWJsaW9yZWxhdGlvbiIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImJpYmxpb2NvdmVyYWdlIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ib3RoZXJjcmVkaXQiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYWdlbnVtcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InByaW50aGlzdG9yeSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InByb2R1Y3RuYW1lIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icHJvZHVjdG51bWJlciIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InB1YmRhdGUiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwdWJsaXNoZXIiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwdWJsaXNoZXJuYW1lIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icHVic251bWJlciIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InJlbGVhc2VpbmZvIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icmV2aGlzdG9yeSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InNlcmllc3ZvbG51bXMiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdWJ0aXRsZSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InRpdGxlIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0idGl0bGVhYmJyZXYiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ2b2x1bWVudW0iLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjaXRldGl0bGUiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwZXJzb25uYW1lIi8+CiAgICAgIDx4czpncm91cCByZWY9InBlcnNvbi5pZGVudC5taXgiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDwhLS0gSSBkb24ndCB0aGluayB0aGlzIGlzIHdlbGwgcGxhY2VkLCBidXQgaXQgbmVlZHMgdG8gYmUgaGVyZSBiZWNhdXNlIG9mIC0tPgogIDwhLS0gdGhlIHJlZmVyZW5jZSB0byBiaWJsaW9jb21wb25lbnQubWl4IC0tPgogIDx4czpncm91cCBuYW1lPSJpbmZvLmNsYXNzIj4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZ3JhcGhpYyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im1lZGlhb2JqZWN0Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGVnYWxub3RpY2UiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtb2Rlc3BlYyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN1YmplY3RzZXQiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJrZXl3b3Jkc2V0Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaXRlcm1zZXQiLz4KICAgICAgPHhzOmdyb3VwIHJlZj0iYmlibGlvY29tcG9uZW50Lm1peCIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvZW50cnkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImJpYmxpb2VudHJ5Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcnRpY2xlaW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJpYmxpb2NvbXBvbmVudC5taXgiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb2VudHJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb2VudHJ5LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb2VudHJ5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvZW50cnkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJpYmxpb2VudHJ5LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYmlibGlvZW50cnkubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9taXhlZC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYmlibGlvbWl4ZWQiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJiaWJsaW9jb21wb25lbnQubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiaWJsaW9tc2V0Ii8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9taXhlZC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBiaWJsaW9taXhlZC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9taXhlZC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb21peGVkLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBiaWJsaW9taXhlZC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJpYmxpb21peGVkLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXJ0aWNsZWluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImFydGljbGVpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXJ0aWNsZWluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYXJ0aWNsZWluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXJ0aWNsZWluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhcnRpY2xlaW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYXJ0aWNsZWluZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhcnRpY2xlaW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb3NldC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYmlibGlvc2V0Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImJpYmxpb2NvbXBvbmVudC5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvc2V0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb3NldC5lbGVtZW50IC0tPgogIDwhLS0gUmVsYXRpb246IFJlbGF0aW9uc2hpcCBvZiBlbGVtZW50cyBjb250YWluZWQgd2l0aGluIEJpYmxpb1NldCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvc2V0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZWxhdGlvbiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvc2V0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBiaWJsaW9zZXQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBiaWJsaW9zZXQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9tc2V0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJiaWJsaW9tc2V0Ij4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iYmlibGlvY29tcG9uZW50Lm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYmlibGlvbXNldCIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvbXNldC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBiaWJsaW9tc2V0LmVsZW1lbnQgLS0+CiAgPCEtLSBSZWxhdGlvbjogUmVsYXRpb25zaGlwIG9mIGVsZW1lbnRzIGNvbnRhaW5lZCB3aXRoaW4gQmlibGlvTVNldCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvbXNldC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVsYXRpb24iLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb21zZXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJpYmxpb21zZXQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBiaWJsaW9tc2V0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvbWlzYy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYmlibGlvbWlzYyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb21pc2MuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYmlibGlvbWlzYy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9taXNjLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvbWlzYy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYmlibGlvbWlzYy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJpYmxpb21pc2MubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIFN1YmplY3QsIEtleXdvcmQsIGFuZCBJVGVybVNldCBlbGVtZW50cyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN1YmplY3RzZXQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InN1YmplY3RzZXQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic3ViamVjdCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdWJqZWN0c2V0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN1YmplY3RzZXQuZWxlbWVudCAtLT4KICA8IS0tIFNjaGVtZTogQ29udHJvbGxlZCB2b2NhYnVsYXJ5IGVtcGxveWVkIGluIFN1YmplY3RUZXJtcyAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3ViamVjdHNldC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2NoZW1lIiB0eXBlPSJ4czpOTVRPS0VOIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdWJqZWN0c2V0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzdWJqZWN0c2V0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc3ViamVjdHNldC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN1YmplY3Qucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InN1YmplY3QiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic3ViamVjdHRlcm0iLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3ViamVjdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzdWJqZWN0LmVsZW1lbnQgLS0+CiAgPCEtLQogICAgV2VpZ2h0OiBSYW5raW5nIG9mIHRoaXMgZ3JvdXAgb2YgU3ViamVjdFRlcm1zIHJlbGF0aXZlCiAgICB0byBvdGhlcnMsIDAgaXMgbG93LCBubyBoaWdoZXN0IHZhbHVlIHNwZWNpZmllZAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdWJqZWN0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ3ZWlnaHQiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN1YmplY3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN1YmplY3QuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzdWJqZWN0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3ViamVjdHRlcm0ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InN1YmplY3R0ZXJtIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN1YmplY3R0ZXJtLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN1YmplY3R0ZXJtLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN1YmplY3R0ZXJtLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3ViamVjdHRlcm0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN1YmplY3R0ZXJtLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc3ViamVjdHRlcm0ubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIHN1YmplY3RzZXQuY29udGVudC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImtleXdvcmRzZXQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImtleXdvcmRzZXQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ia2V5d29yZCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJrZXl3b3Jkc2V0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGtleXdvcmRzZXQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ia2V5d29yZHNldC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImtleXdvcmRzZXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGtleXdvcmRzZXQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBrZXl3b3Jkc2V0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ia2V5d29yZC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ia2V5d29yZCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJrZXl3b3JkLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGtleXdvcmQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ia2V5d29yZC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImtleXdvcmQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGtleXdvcmQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBrZXl3b3JkLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBrZXl3b3Jkc2V0LmNvbnRlbnQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpdGVybXNldC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaXRlcm1zZXQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5kZXh0ZXJtIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Iml0ZXJtc2V0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGl0ZXJtc2V0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Iml0ZXJtc2V0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaXRlcm1zZXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGl0ZXJtc2V0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaXRlcm1zZXQubW9kdWxlIC0tPgogIDwhLS0gQmlibGlvZ3JhcGhpYyBpbmZvIGZvciAiYmxvY2tzIiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmxvY2tpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJibG9ja2luZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJibG9ja2luZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYmxvY2tpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJsb2NraW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJsb2NraW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYmxvY2tpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYmxvY2tpbmZvLm1vZHVsZSAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBDb21wb3VuZCAoc2VjdGlvbi1pc2gpIGVsZW1lbnRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gTWVzc2FnZSBzZXQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnc2V0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtc2dzZXQiIHN1YnN0aXR1dGlvbkdyb3VwPSJjb21wb3VuZC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmxvY2tpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtc2dlbnRyeSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2ltcGxlbXNnZW50cnkiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNnc2V0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1zZ3NldC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtc2dzZXQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dzZXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1zZ3NldC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1zZ3NldC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ2VudHJ5LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtc2dlbnRyeSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtc2ciLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ibXNnaW5mbyIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibXNnZXhwbGFuIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ2VudHJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1zZ2VudHJ5LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ2VudHJ5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNnZW50cnkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1zZ2VudHJ5LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbXNnZW50cnkubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzaW1wbGVtc2dlbnRyeS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2ltcGxlbXNnZW50cnkiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtc2d0ZXh0Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibXNnZXhwbGFuIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNpbXBsZW1zZ2VudHJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNpbXBsZW1zZ2VudHJ5LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNpbXBsZW1zZ2VudHJ5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhdWRpZW5jZSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsZXZlbCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvcmlnaW4iLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNpbXBsZW1zZ2VudHJ5LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzaW1wbGVtc2dlbnRyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNpbXBsZW1zZ2VudHJ5Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtc2ciPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtc2dtYWluIi8+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ibXNnc3ViIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im1zZ3JlbCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2cuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbXNnLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbXNnLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbXNnLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnbWFpbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibXNnbWFpbiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im1zZ3RleHQiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNnbWFpbi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtc2dtYWluLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ21haW4uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dtYWluLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtc2dtYWluLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbXNnbWFpbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ3N1Yi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibXNnc3ViIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0aXRsZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibXNndGV4dCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dzdWIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbXNnc3ViLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ3N1Yi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ3N1Yi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbXNnc3ViLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbXNnc3ViLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNncmVsLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtc2dyZWwiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtc2d0ZXh0Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ3JlbC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtc2dyZWwuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNncmVsLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNncmVsLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtc2dyZWwuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtc2dyZWwubW9kdWxlIC0tPgogIDwhLS0gTXNnVGV4dCAoZGVmaW5lZCBpbiB0aGUgSW5saW5lcyBzZWN0aW9uLCBiZWxvdykgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ2luZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im1zZ2luZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibXNnbGV2ZWwiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im1zZ29yaWciLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im1zZ2F1ZCIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNnaW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtc2dpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ2luZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtc2dpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbXNnaW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ2xldmVsLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtc2dsZXZlbCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNnbGV2ZWwuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbXNnbGV2ZWwuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnbGV2ZWwuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dsZXZlbC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbXNnbGV2ZWwuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtc2dsZXZlbC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ29yaWcucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im1zZ29yaWciPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ29yaWcuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbXNnb3JpZy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtc2dvcmlnLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNnb3JpZy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbXNnb3JpZy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1zZ29yaWcubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtc2dhdWQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im1zZ2F1ZCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ2F1ZC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtc2dhdWQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnYXVkLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNnYXVkLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtc2dhdWQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtc2dhdWQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtc2dleHBsYW4ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im1zZ2V4cGxhbiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dleHBsYW4uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbXNnZXhwbGFuLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ2V4cGxhbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ2V4cGxhbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbXNnZXhwbGFuLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbXNnZXhwbGFuLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBtc2dzZXQuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSBRYW5kQVNldCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InFhbmRhc2V0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJxYW5kYXNldCIgc3Vic3RpdHV0aW9uR3JvdXA9ImNvbXBvdW5kLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImZvcm1hbG9iamVjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icWFuZGFzZXQubWl4Ii8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InFhbmRhZGl2Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJxYW5kYWVudHJ5Ii8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InFhbmRhc2V0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHFhbmRhc2V0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InFhbmRhc2V0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkZWZhdWx0bGFiZWwiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJxYW5kYSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJudW1iZXIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibm9uZSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icWFuZGFzZXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHFhbmRhc2V0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcWFuZGFzZXQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJxYW5kYWRpdi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icWFuZGFkaXYiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0iZm9ybWFsb2JqZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJxYW5kYXNldC5taXgiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icWFuZGFkaXYiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InFhbmRhZW50cnkiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icWFuZGFkaXYuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcWFuZGFkaXYuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icWFuZGFkaXYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJxYW5kYWRpdi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcWFuZGFkaXYuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBxYW5kYWRpdi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InFhbmRhZW50cnkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InFhbmRhZW50cnkiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJyZXZoaXN0b3J5Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJxdWVzdGlvbiIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iYW5zd2VyIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InFhbmRhZW50cnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcWFuZGFlbnRyeS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJxYW5kYWVudHJ5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icWFuZGFlbnRyeS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcWFuZGFlbnRyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHFhbmRhZW50cnkubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJxdWVzdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icXVlc3Rpb24iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImxhYmVsIi8+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InFhbmRhc2V0Lm1peCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJxdWVzdGlvbi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBxdWVzdGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJxdWVzdGlvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InF1ZXN0aW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBxdWVzdGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHF1ZXN0aW9uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYW5zd2VyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhbnN3ZXIiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImxhYmVsIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icWFuZGFzZXQubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJxYW5kYWVudHJ5Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFuc3dlci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBhbnN3ZXIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYW5zd2VyLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYW5zd2VyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhbnN3ZXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhbnN3ZXIubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsYWJlbC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibGFiZWwiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0id29yZC5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBsYWJlbC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsYWJlbC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBsYWJlbC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGxhYmVsLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBxYW5kYXNldC5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIFByb2NlZHVyZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByb2NlZHVyZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icHJvY2VkdXJlIiBzdWJzdGl0dXRpb25Hcm91cD0iY29tcG91bmQuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0iZm9ybWFsb2JqZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjb21wb25lbnQubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic3RlcCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcm9jZWR1cmUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcHJvY2VkdXJlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByb2NlZHVyZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByb2NlZHVyZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcHJvY2VkdXJlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcHJvY2VkdXJlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3RlcC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3RlcCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICAgICAgICA8eHM6c2VxdWVuY2UgbWluT2NjdXJzPSIwIj4KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN1YnN0ZXBzIi8+CiAgICAgICAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdWJzdGVwcyIvPgogICAgICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjb21wb25lbnQubWl4Ii8+CiAgICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGVwLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN0ZXAuZWxlbWVudCAtLT4KICA8IS0tIFBlcmZvcm1hbmNlOiBXaGV0aGVyIHRoZSBTdGVwIG11c3QgYmUgcGVyZm9ybWVkIC0tPgogIDwhLS0gbm90ICNSRVFVSVJFRCEgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN0ZXAuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InBlcmZvcm1hbmNlIiBkZWZhdWx0PSJyZXF1aXJlZCI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im9wdGlvbmFsIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlcXVpcmVkIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGVwLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzdGVwLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc3RlcC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN1YnN0ZXBzLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzdWJzdGVwcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzdGVwIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN1YnN0ZXBzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN1YnN0ZXBzLmVsZW1lbnQgLS0+CiAgPCEtLSBQZXJmb3JtYW5jZTogd2hldGhlciBlbnRpcmUgc2V0IG9mIHN1YnN0ZXBzIG11c3QgYmUgcGVyZm9ybWVkIC0tPgogIDwhLS0gbm90ICNSRVFVSVJFRCEgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN1YnN0ZXBzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwZXJmb3JtYW5jZSIgZGVmYXVsdD0icmVxdWlyZWQiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvcHRpb25hbCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZXF1aXJlZCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3Vic3RlcHMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN1YnN0ZXBzLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc3Vic3RlcHMubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIHByb2NlZHVyZS5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIFNpZGViYXIgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNpZGViYXJpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzaWRlYmFyaW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmZvLmNsYXNzIi8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNpZGViYXJpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNpZGViYXJpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNpZGViYXJpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2lkZWJhcmluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNpZGViYXJpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2lkZWJhcmluZm8ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzaWRlYmFyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzaWRlYmFyIiBzdWJzdGl0dXRpb25Hcm91cD0iY29tcG91bmQuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InNpZGViYXJpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzaWRlYmFyLm1peCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzaWRlYmFyLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNpZGViYXIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2lkZWJhci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNpZGViYXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNpZGViYXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzaWRlYmFyLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBzaWRlYmFyLmNvbnRlbnQubW9kZWwgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gUGFyYWdyYXBoLXJlbGF0ZWQgZWxlbWVudHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYWJzdHJhY3Qucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImFic3RyYWN0Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0aXRsZSIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWJzdHJhY3QuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYWJzdHJhY3QuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYWJzdHJhY3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhYnN0cmFjdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYWJzdHJhY3QuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhYnN0cmFjdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImF1dGhvcmJsdXJiLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhdXRob3JibHVyYiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImF1dGhvcmJsdXJiLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGF1dGhvcmJsdXJiLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImF1dGhvcmJsdXJiLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXV0aG9yYmx1cmIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGF1dGhvcmJsdXJiLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYXV0aG9yYmx1cmIubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwZXJzb25ibHVyYi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icGVyc29uYmx1cmIiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwZXJzb25ibHVyYi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwZXJzb25ibHVyYi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwZXJzb25ibHVyYi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBlcnNvbmJsdXJiLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwZXJzb25ibHVyYi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHBlcnNvbmJsdXJiLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmxvY2txdW90ZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYmxvY2txdW90ZSIgc3Vic3RpdHV0aW9uR3JvdXA9ImluZm9ybWFsLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0aXRsZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJhdHRyaWJ1dGlvbiIvPgogICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjb21wb25lbnQubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJsb2NrcXVvdGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYmxvY2txdW90ZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJibG9ja3F1b3RlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmxvY2txdW90ZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYmxvY2txdW90ZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJsb2NrcXVvdGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhdHRyaWJ1dGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXR0cmlidXRpb24iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhdHRyaWJ1dGlvbi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBhdHRyaWJ1dGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhdHRyaWJ1dGlvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImF0dHJpYnV0aW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhdHRyaWJ1dGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGF0dHJpYnV0aW9uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYnJpZGdlaGVhZC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYnJpZGdlaGVhZCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0aXRsZS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJicmlkZ2VoZWFkLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJyaWRnZWhlYWQuZWxlbWVudCAtLT4KICA8IS0tCiAgICBSZW5kZXJhczogSW5kaWNhdGVzIHRoZSBmb3JtYXQgaW4gd2hpY2ggdGhlIEJyaWRnZUhlYWQKICAgIHNob3VsZCBhcHBlYXIKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYnJpZGdlaGVhZC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVuZGVyYXMiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvdGhlciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0MSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0MiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0MyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0NCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0NSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYnJpZGdlaGVhZC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYnJpZGdlaGVhZC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJyaWRnZWhlYWQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZW1hcmsucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlbWFyayI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlbWFyay5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZW1hcmsuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVtYXJrLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVtYXJrLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZW1hcmsuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZW1hcmsubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlcGlncmFwaC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZXBpZ3JhcGgiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImF0dHJpYnV0aW9uIi8+CiAgICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ibGl0ZXJhbGxheW91dCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlcGlncmFwaC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBlcGlncmFwaC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlcGlncmFwaC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVwaWdyYXBoLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBlcGlncmFwaC5hdHRsaXN0IC0tPgogIDwhLS0gQXR0cmlidXRpb24gKGRlZmluZWQgYWJvdmUpIC0tPgogIDwhLS0gZW5kIG9mIGVwaWdyYXBoLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZm9vdG5vdGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImZvb3Rub3RlIiBzdWJzdGl0dXRpb25Hcm91cD0iZ2VuLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZm9vdG5vdGUubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZvb3Rub3RlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGZvb3Rub3RlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZvb3Rub3RlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmb290bm90ZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZm9vdG5vdGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBmb290bm90ZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImhpZ2hsaWdodHMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImhpZ2hsaWdodHMiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaGlnaGxpZ2h0cy5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaGlnaGxpZ2h0cy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBoaWdobGlnaHRzLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImhpZ2hsaWdodHMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJoaWdobGlnaHRzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBoaWdobGlnaHRzLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaGlnaGxpZ2h0cy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZvcm1hbHBhcmEucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImZvcm1hbHBhcmEiIHN1YnN0aXR1dGlvbkdyb3VwPSJwYXJhLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmEiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZm9ybWFscGFyYS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBmb3JtYWxwYXJhLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZvcm1hbHBhcmEuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmb3JtYWxwYXJhLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBmb3JtYWxwYXJhLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZm9ybWFscGFyYS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBhcmEucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InBhcmEiIHN1YnN0aXR1dGlvbkdyb3VwPSJwYXJhLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICAgIDx4czpncm91cCByZWY9InBhcmEubWl4Ii8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYXJhLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHBhcmEuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGFyYS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhcmEucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHBhcmEuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwYXJhLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2ltcGFyYS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2ltcGFyYSIgc3Vic3RpdHV0aW9uR3JvdXA9InBhcmEuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzaW1wYXJhLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNpbXBhcmEuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2ltcGFyYS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNpbXBhcmEucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNpbXBhcmEuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzaW1wYXJhLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYWRtb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNhdXRpb24iIHN1YnN0aXR1dGlvbkdyb3VwPSJhZG1vbi5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iYWRtb24ubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNhdXRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY2F1dGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjYXV0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWRtb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNhdXRpb24uYXR0bGlzdCAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbXBvcnRhbnQiIHN1YnN0aXR1dGlvbkdyb3VwPSJhZG1vbi5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iYWRtb24ubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImltcG9ydGFudC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBpbXBvcnRhbnQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW1wb3J0YW50LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWRtb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGltcG9ydGFudC5hdHRsaXN0IC0tPgogIDx4czplbGVtZW50IG5hbWU9Im5vdGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJhZG1vbi5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iYWRtb24ubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im5vdGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygbm90ZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJub3RlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWRtb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG5vdGUuYXR0bGlzdCAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0aXAiIHN1YnN0aXR1dGlvbkdyb3VwPSJhZG1vbi5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iYWRtb24ubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRpcC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0aXAuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGlwLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWRtb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRpcC5hdHRsaXN0IC0tPgogIDx4czplbGVtZW50IG5hbWU9Indhcm5pbmciIHN1YnN0aXR1dGlvbkdyb3VwPSJhZG1vbi5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iYWRtb24ubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Indhcm5pbmcuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygd2FybmluZy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ3YXJuaW5nLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWRtb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHdhcm5pbmcuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhZG1vbi5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gTGlzdHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEdsb3NzTGlzdCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3NzbGlzdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZ2xvc3NsaXN0IiBzdWJzdGl0dXRpb25Hcm91cD0ibGlzdC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJnbG9zc2VudHJ5Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdsb3NzbGlzdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBnbG9zc2xpc3QuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ2xvc3NsaXN0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3NsaXN0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBnbG9zc2xpc3QuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBnbG9zc2xpc3QubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJnbG9zc2VudHJ5LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJnbG9zc2VudHJ5Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZ2xvc3N0ZXJtIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImFjcm9ueW0iLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYWJicmV2Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InJldmhpc3RvcnkiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJnbG9zc3NlZSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZ2xvc3NkZWYiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3NlbnRyeS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBnbG9zc2VudHJ5LmVsZW1lbnQgLS0+CiAgPCEtLQogICAgU29ydEFzOiBTdHJpbmcgYnkgd2hpY2ggdGhlIEdsb3NzRW50cnkgaXMgdG8gYmUgc29ydGVkCiAgICAoYWxwaGFiZXRpemVkKSBpbiBsaWV1IG9mIGl0cyBwcm9wZXIgY29udGVudAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJnbG9zc2VudHJ5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzb3J0YXMiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdsb3NzZW50cnkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGdsb3NzZW50cnkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBnbG9zc2VudHJ5Lm1vZHVsZSAtLT4KICA8IS0tIEdsb3NzVGVybSAoZGVmaW5lZCBpbiB0aGUgSW5saW5lcyBzZWN0aW9uLCBiZWxvdykgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3NzZGVmLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJnbG9zc2RlZiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZ2xvc3NkZWYubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJnbG9zc3NlZWFsc28iLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3NkZWYuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZ2xvc3NkZWYuZWxlbWVudCAtLT4KICA8IS0tIFN1YmplY3Q6IExpc3Qgb2Ygc3ViamVjdHM7IGtleXdvcmRzIGZvciB0aGUgZGVmaW5pdGlvbiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ2xvc3NkZWYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InN1YmplY3QiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdsb3NzZGVmLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBnbG9zc2RlZi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGdsb3NzZGVmLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ2xvc3NzZWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Imdsb3Nzc2VlIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3NzZWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZ2xvc3NzZWUuZWxlbWVudCAtLT4KICA8IS0tCiAgICBPdGhlclRlcm06IFJlZmVyZW5jZSB0byB0aGUgR2xvc3NFbnRyeSB3aG9zZSBHbG9zc1Rlcm0KICAgIHNob3VsZCBiZSBkaXNwbGF5ZWQgYXQgdGhlIHBvaW50IG9mIHRoZSBHbG9zc1NlZQogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJnbG9zc3NlZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib3RoZXJ0ZXJtIiB0eXBlPSJ4czpJRFJFRiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3NzZWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGdsb3Nzc2VlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZ2xvc3NzZWUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJnbG9zc3NlZWFsc28ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Imdsb3Nzc2VlYWxzbyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdsb3Nzc2VlYWxzby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBnbG9zc3NlZWFsc28uZWxlbWVudCAtLT4KICA8IS0tCiAgICBPdGhlclRlcm06IFJlZmVyZW5jZSB0byB0aGUgR2xvc3NFbnRyeSB3aG9zZSBHbG9zc1Rlcm0KICAgIHNob3VsZCBiZSBkaXNwbGF5ZWQgYXQgdGhlIHBvaW50IG9mIHRoZSBHbG9zc1NlZUFsc28KICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ2xvc3NzZWVhbHNvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvdGhlcnRlcm0iIHR5cGU9InhzOklEUkVGIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJnbG9zc3NlZWFsc28ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGdsb3Nzc2VlYWxzby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGdsb3Nzc2VlYWxzby5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgZ2xvc3NlbnRyeS5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIEl0ZW1pemVkTGlzdCBhbmQgT3JkZXJlZExpc3QgLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Iml0ZW1pemVkbGlzdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaXRlbWl6ZWRsaXN0IiBzdWJzdGl0dXRpb25Hcm91cD0ibGlzdC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmxvY2tpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Imxpc3RwcmVhbWJsZS5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJsaXN0aXRlbSIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpdGVtaXplZGxpc3QuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaXRlbWl6ZWRsaXN0LmVsZW1lbnQgLS0+CiAgPCEtLQogICAgU3BhY2luZzogV2hldGhlciB0aGUgdmVydGljYWwgc3BhY2UgaW4gdGhlIGxpc3Qgc2hvdWxkIGJlCiAgICBjb21wcmVzc2VkCiAgLS0+CiAgPCEtLQogICAgTWFyazogS2V5d29yZCwgZS5nLiwgYnVsbGV0LCBkYXNoLCBjaGVja2JveCwgbm9uZTsKICAgIGxpc3Qgb2Yga2V5d29yZHMgYW5kIGRlZmF1bHRzIGFyZSBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYwogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpdGVtaXplZGxpc3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNwYWNpbmciPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJub3JtYWwiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY29tcGFjdCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWFyay5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Iml0ZW1pemVkbGlzdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaXRlbWl6ZWRsaXN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaXRlbWl6ZWRsaXN0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib3JkZXJlZGxpc3Qucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im9yZGVyZWRsaXN0IiBzdWJzdGl0dXRpb25Hcm91cD0ibGlzdC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmxvY2tpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Imxpc3RwcmVhbWJsZS5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJsaXN0aXRlbSIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvcmRlcmVkbGlzdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBvcmRlcmVkbGlzdC5lbGVtZW50IC0tPgogIDwhLS0KICAgIE51bWVyYXRpb246IFN0eWxlIG9mIExpc3RJdGVtIG51bWJlcmVkOyBkZWZhdWx0IGlzIGV4cGVjdGVkCiAgICB0byBiZSBBcmFiaWMKICAtLT4KICA8IS0tCiAgICBJbmhlcml0TnVtOiBTcGVjaWZpZXMgZm9yIGEgbmVzdGVkIGxpc3QgdGhhdCB0aGUgbnVtYmVyaW5nCiAgICBvZiBMaXN0SXRlbXMgc2hvdWxkIGluY2x1ZGUgdGhlIG51bWJlciBvZiB0aGUgaXRlbQogICAgd2l0aGluIHdoaWNoIHRoZXkgYXJlIG5lc3RlZCAoZS5nLiwgMWEgYW5kIDFiIHdpdGhpbiAxLAogICAgcmF0aGVyIHRoYW4gYSBhbmQgYikKICAtLT4KICA8IS0tCiAgICBDb250aW51YXRpb246IFdoZXJlIGxpc3QgbnVtYmVyaW5nIGJlZ2lucyBhZnJlc2ggKFJlc3RhcnRzLAogICAgdGhlIGRlZmF1bHQpIG9yIGNvbnRpbnVlcyB0aGF0IG9mIHRoZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcKICAgIGxpc3QgKENvbnRpbnVlcykKICAtLT4KICA8IS0tCiAgICBTcGFjaW5nOiBXaGV0aGVyIHRoZSB2ZXJ0aWNhbCBzcGFjZSBpbiB0aGUgbGlzdCBzaG91bGQgYmUKICAgIGNvbXByZXNzZWQKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib3JkZXJlZGxpc3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im51bWVyYXRpb24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJhcmFiaWMiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idXBwZXJhbHBoYSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsb3dlcmFscGhhIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InVwcGVycm9tYW4iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibG93ZXJyb21hbiIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpbmhlcml0bnVtIiBkZWZhdWx0PSJpZ25vcmUiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJpbmhlcml0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imlnbm9yZSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb250aW51YXRpb24iIGRlZmF1bHQ9InJlc3RhcnRzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY29udGludWVzIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlc3RhcnRzIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNwYWNpbmciPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJub3JtYWwiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY29tcGFjdCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib3JkZXJlZGxpc3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG9yZGVyZWRsaXN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygb3JkZXJlZGxpc3QubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsaXN0aXRlbS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibGlzdGl0ZW0iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaXN0aXRlbS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBsaXN0aXRlbS5lbGVtZW50IC0tPgogIDwhLS0KICAgIE92ZXJyaWRlOiBJbmRpY2F0ZXMgdGhlIG1hcmsgdG8gYmUgdXNlZCBmb3IgdGhpcyBMaXN0SXRlbQogICAgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBtYXJrIG9yIHRoZSBtYXJrIHNwZWNpZmllZCBieQogICAgdGhlIE1hcmsgYXR0cmlidXRlIG9uIHRoZSBlbmNsb3NpbmcgSXRlbWl6ZWRMaXN0CiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imxpc3RpdGVtLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvdmVycmlkZSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlzdGl0ZW0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGxpc3RpdGVtLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbGlzdGl0ZW0ubW9kdWxlIC0tPgogIDwhLS0gU2VnbWVudGVkTGlzdCAuLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VnbWVudGVkbGlzdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VnbWVudGVkbGlzdCIgc3Vic3RpdHV0aW9uR3JvdXA9Imxpc3QuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNlZ3RpdGxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2VnbGlzdGl0ZW0iLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VnbWVudGVkbGlzdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWdtZW50ZWRsaXN0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlZ21lbnRlZGxpc3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWdtZW50ZWRsaXN0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWdtZW50ZWRsaXN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2VnbWVudGVkbGlzdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlZ3RpdGxlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWd0aXRsZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0aXRsZS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWd0aXRsZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWd0aXRsZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWd0aXRsZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlZ3RpdGxlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWd0aXRsZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNlZ3RpdGxlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VnbGlzdGl0ZW0ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNlZ2xpc3RpdGVtIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNlZyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWdsaXN0aXRlbS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWdsaXN0aXRlbS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWdsaXN0aXRlbS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlZ2xpc3RpdGVtLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWdsaXN0aXRlbS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNlZ2xpc3RpdGVtLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VnLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWciPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWcuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VnLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlZy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlZy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VnLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2VnLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBzZWdtZW50ZWRsaXN0LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gU2ltcGxlTGlzdCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2ltcGxlbGlzdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2ltcGxlbGlzdCIgc3Vic3RpdHV0aW9uR3JvdXA9Imxpc3QuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibWVtYmVyIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNpbXBsZWxpc3QuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2ltcGxlbGlzdC5lbGVtZW50IC0tPgogIDwhLS0gQ29sdW1uczogVGhlIG51bWJlciBvZiBjb2x1bW5zIHRoZSBhcnJheSBzaG91bGQgY29udGFpbiAtLT4KICA8IS0tCiAgICBUeXBlOiBIb3cgdGhlIE1lbWJlcnMgb2YgdGhlIFNpbXBsZUxpc3Qgc2hvdWxkIGJlCiAgICBmb3JtYXR0ZWQ6IElubGluZSAobWVtYmVycyBzZXBhcmF0ZWQgd2l0aCBjb21tYXMgZXRjLgogICAgaW5saW5lKSwgVmVydCAodG9wIHRvIGJvdHRvbSBpbiBuIENvbHVtbnMpLCBvciBIb3JpeiAoaW4KICAgIHRoZSBkaXJlY3Rpb24gb2YgdGV4dCBmbG93KSBpbiBuIENvbHVtbnMuICBJZiBDb2x1bW4KICAgIGlzIDEgb3IgaW1wbGllZCwgVHlwZT1WZXJ0IGFuZCBUeXBlPUhvcml6IGdpdmUgdGhlIHNhbWUKICAgIHJlc3VsdHMuCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNpbXBsZWxpc3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbHVtbnMiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idHlwZSIgZGVmYXVsdD0idmVydCI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImlubGluZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ2ZXJ0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imhvcml6Ii8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzaW1wbGVsaXN0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzaW1wbGVsaXN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2ltcGxlbGlzdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1lbWJlci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibWVtYmVyIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWVtYmVyLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1lbWJlci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtZW1iZXIuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtZW1iZXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1lbWJlci5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1lbWJlci5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2Ygc2ltcGxlbGlzdC5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIFZhcmlhYmxlTGlzdCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InZhcmlhYmxlbGlzdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idmFyaWFibGVsaXN0IiBzdWJzdGl0dXRpb25Hcm91cD0ibGlzdC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmxvY2tpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Imxpc3RwcmVhbWJsZS5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ2YXJsaXN0ZW50cnkiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idmFyaWFibGVsaXN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHZhcmlhYmxlbGlzdC5lbGVtZW50IC0tPgogIDwhLS0KICAgIFRlcm1MZW5ndGg6IExlbmd0aCBiZXlvbmQgd2hpY2ggdGhlIHByZXNlbnRhdGlvbiBlbmdpbmUKICAgIG1heSBjb25zaWRlciB0aGUgVGVybSB0b28gbG9uZyBhbmQgc2VsZWN0IGFuIGFsdGVybmF0ZQogICAgcHJlc2VudGF0aW9uIG9mIHRoZSBUZXJtIGFuZCwgb3IsIGl0cyBhc3NvY2lhdGVkIExpc3RJdGVtLgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ2YXJpYWJsZWxpc3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InRlcm1sZW5ndGgiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InZhcmlhYmxlbGlzdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdmFyaWFibGVsaXN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdmFyaWFibGVsaXN0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idmFybGlzdGVudHJ5LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ2YXJsaXN0ZW50cnkiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idGVybSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGlzdGl0ZW0iLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idmFybGlzdGVudHJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHZhcmxpc3RlbnRyeS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ2YXJsaXN0ZW50cnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2YXJsaXN0ZW50cnkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHZhcmxpc3RlbnRyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHZhcmxpc3RlbnRyeS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRlcm0ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRlcm0iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0ZXJtLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRlcm0uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGVybS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRlcm0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRlcm0uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0ZXJtLm1vZHVsZSAtLT4KICA8IS0tIExpc3RJdGVtIChkZWZpbmVkIGFib3ZlKSAtLT4KICA8IS0tIGVuZCBvZiB2YXJpYWJsZWxpc3QuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSBDYWxsb3V0TGlzdCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjYWxsb3V0bGlzdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY2FsbG91dGxpc3QiIHN1YnN0aXR1dGlvbkdyb3VwPSJsaXN0LmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0iZm9ybWFsb2JqZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjYWxsb3V0Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNhbGxvdXRsaXN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNhbGxvdXRsaXN0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNhbGxvdXRsaXN0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2FsbG91dGxpc3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNhbGxvdXRsaXN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY2FsbG91dGxpc3QubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjYWxsb3V0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjYWxsb3V0Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbXBvbmVudC5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2FsbG91dC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjYWxsb3V0LmVsZW1lbnQgLS0+CiAgPCEtLQogICAgQXJlYVJlZnM6IElEcyBvZiBvbmUgb3IgbW9yZSBBcmVhcyBvciBBcmVhU2V0cyBkZXNjcmliZWQKICAgIGJ5IHRoaXMgQ2FsbG91dAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjYWxsb3V0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhcmVhcmVmcyIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6SURSRUZTIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjYWxsb3V0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjYWxsb3V0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY2FsbG91dC5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgY2FsbG91dGxpc3QuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gT2JqZWN0cyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEV4YW1wbGVzIGV0Yy4gLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImV4YW1wbGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImV4YW1wbGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJmb3JtYWwuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImZvcm1hbG9iamVjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImV4YW1wbGUubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImV4YW1wbGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZXhhbXBsZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJleGFtcGxlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ3aWR0aC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImV4YW1wbGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGV4YW1wbGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBleGFtcGxlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5mb3JtYWxleGFtcGxlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbmZvcm1hbGV4YW1wbGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJpbmZvcm1hbC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmxvY2tpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImV4YW1wbGUubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImluZm9ybWFsZXhhbXBsZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBpbmZvcm1hbGV4YW1wbGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5mb3JtYWxleGFtcGxlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0id2lkdGguYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmZvcm1hbGV4YW1wbGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGluZm9ybWFsZXhhbXBsZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGluZm9ybWFsZXhhbXBsZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByb2dyYW1saXN0aW5nY28ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InByb2dyYW1saXN0aW5nY28iIHN1YnN0aXR1dGlvbkdyb3VwPSJsaW5lc3BlY2lmaWMuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcmVhc3BlYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icHJvZ3JhbWxpc3RpbmciLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNhbGxvdXRsaXN0Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByb2dyYW1saXN0aW5nY28uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcHJvZ3JhbWxpc3Rpbmdjby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcm9ncmFtbGlzdGluZ2NvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJvZ3JhbWxpc3Rpbmdjby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcHJvZ3JhbWxpc3Rpbmdjby5hdHRsaXN0IC0tPgogIDwhLS0gQ2FsbG91dExpc3QgKGRlZmluZWQgYWJvdmUgaW4gTGlzdHMpIC0tPgogIDwhLS0gZW5kIG9mIGluZm9ybWFsZXhhbXBsZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFyZWFzcGVjLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhcmVhc3BlYyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYXJlYSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYXJlYXNldCIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXJlYXNwZWMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYXJlYXNwZWMuZWxlbWVudCAtLT4KICA8IS0tCiAgICBVbml0czogZ2xvYmFsIHVuaXQgb2YgbWVhc3VyZSBpbiB3aGljaCBjb29yZGluYXRlcyBpbgogICAgdGhpcyBzcGVjIGFyZSBleHByZXNzZWQ6CiAgICAKICAgIC0gQ0FMU1BhaXIgIngxLHkxIHgyLHkyIjogbG93ZXItbGVmdCBhbmQgdXBwZXItcmlnaHQKICAgIGNvb3JkaW5hdGVzIGluIGEgcmVjdGFuZ2xlIGRlc2NyaWJpbmcgcmVwcm8gYXJlYSBpbiB3aGljaAogICAgZ3JhcGhpYyBpcyBwbGFjZWQsIHdoZXJlIFggYW5kIFkgZGltZW5zaW9ucyBhcmUgZWFjaCBzb21lCiAgICBudW1iZXIgMC4uMTAwMDAgKHRha2VuIGZyb20gQ0FMUyBncmFwaGljIGF0dHJpYnV0ZXMpCiAgICAKICAgIC0gTGluZUNvbHVtbiAibGluZSBjb2x1bW4iOiBsaW5lIG51bWJlciBhbmQgY29sdW1uIG51bWJlcgogICAgYXQgd2hpY2ggdG8gc3RhcnQgY2FsbG91dCB0ZXh0IGluICJsaW5lc3BlY2lmaWMiIGNvbnRlbnQKICAgIAogICAgLSBMaW5lUmFuZ2UgInN0YXJ0bGluZSBlbmRsaW5lIjogd2hvbGUgbGluZXMgZnJvbSBzdGFydGxpbmUKICAgIHRvIGVuZGxpbmUgaW4gImxpbmVzcGVjaWZpYyIgY29udGVudAogICAgCiAgICAtIExpbmVDb2x1bW5QYWlyICJsaW5lMSBjb2wxIGxpbmUyIGNvbDIiOiBzdGFydGluZyBhbmQgZW5kaW5nCiAgICBwb2ludHMgb2YgYXJlYSBpbiAibGluZXNwZWNpZmljIiBjb250ZW50IHRoYXQgc3RhcnRzIGF0CiAgICBmaXJzdCBwb3NpdGlvbiBhbmQgZW5kcyBhdCBzZWNvbmQgcG9zaXRpb24gKGluY2x1ZGluZyB0aGUKICAgIGJlZ2lubmluZ3Mgb2YgYW55IGludGVydmVuaW5nIGxpbmVzKQogICAgCiAgICAtIE90aGVyOiBkaXJlY3RpdmUgdG8gbG9vayBhdCB2YWx1ZSBvZiBPdGhlclVuaXRzIGF0dHJpYnV0ZQogICAgdG8gZ2V0IGltcGxlbWVudGF0aW9uLXNwZWNpZmljIGtleXdvcmQKICAgIAogICAgVGhlIGRlZmF1bHQgaXMgaW1wbGVtZW50YXRpb24tc3BlY2lmaWM7IHVzdWFsbHkgZGVwZW5kZW50IG9uCiAgICB0aGUgcGFyZW50IGVsZW1lbnQgKEdyYXBoaWNDTyBnZXRzIENBTFNQYWlyLCBQcm9ncmFtTGlzdGluZ0NPCiAgICBhbmQgU2NyZWVuQ08gZ2V0IExpbmVDb2x1bW4pCiAgLS0+CiAgPCEtLSBPdGhlclVuaXRzOiBVc2VyLWRlZmluZWQgdW5pdHMgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFyZWFzcGVjLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1bml0cyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNhbHNwYWlyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxpbmVjb2x1bW4iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGluZXJhbmdlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxpbmVjb2x1bW5wYWlyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im90aGVyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im90aGVydW5pdHMiIHR5cGU9InhzOk5NVE9LRU4iLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFyZWFzcGVjLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhcmVhc3BlYy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGFyZWFzcGVjLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXJlYS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXJlYSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFyZWEuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYXJlYS5lbGVtZW50IC0tPgogIDwhLS0gYnVnIG51bWJlci9zeW1ib2wgb3ZlcnJpZGUgb3IgaW5pdGlhbGl6YXRpb24gLS0+CiAgPCEtLSB0byBhbnkgcmVsYXRlZCBpbmZvcm1hdGlvbiAtLT4KICA8IS0tCiAgICBVbml0czogdW5pdCBvZiBtZWFzdXJlIGluIHdoaWNoIGNvb3JkaW5hdGVzIGluIHRoaXMKICAgIGFyZWEgYXJlIGV4cHJlc3NlZDsgaW5oZXJpdHMgZnJvbSBBcmVhU2V0IGFuZCBBcmVhU3BlYwogIC0tPgogIDwhLS0gT3RoZXJVbml0czogVXNlci1kZWZpbmVkIHVuaXRzIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcmVhLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rZW5kcy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idW5pdHMiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjYWxzcGFpciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsaW5lY29sdW1uIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxpbmVyYW5nZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsaW5lY29sdW1ucGFpciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvdGhlciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvdGhlcnVuaXRzIiB0eXBlPSJ4czpOTVRPS0VOIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvb3JkcyIgdXNlPSJyZXF1aXJlZCIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaWRyZXEuY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXJlYS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYXJlYS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGFyZWEubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcmVhc2V0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhcmVhc2V0Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImFyZWEiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXJlYXNldC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBhcmVhc2V0LmVsZW1lbnQgLS0+CiAgPCEtLSBidWcgbnVtYmVyL3N5bWJvbCBvdmVycmlkZSBvciBpbml0aWFsaXphdGlvbiAtLT4KICA8IS0tCiAgICBVbml0czogdW5pdCBvZiBtZWFzdXJlIGluIHdoaWNoIGNvb3JkaW5hdGVzIGluIHRoaXMKICAgIGFyZWEgYXJlIGV4cHJlc3NlZDsgaW5oZXJpdHMgZnJvbSBBcmVhU3BlYwogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcmVhc2V0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InVuaXRzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2Fsc3BhaXIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGluZWNvbHVtbiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsaW5lcmFuZ2UiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGluZWNvbHVtbnBhaXIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3RoZXIiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib3RoZXJ1bml0cyIgdHlwZT0ieHM6Tk1UT0tFTiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb29yZHMiIHVzZT0icmVxdWlyZWQiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImlkcmVxLmNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFyZWFzZXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGFyZWFzZXQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhcmVhc2V0Lm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBhcmVhc3BlYy5jb250ZW50Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJvZ3JhbWxpc3Rpbmcucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InByb2dyYW1saXN0aW5nIiBzdWJzdGl0dXRpb25Hcm91cD0ibGluZXNwZWNpZmljLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY28iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvcmVmIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lYW5ub3RhdGlvbiIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0idGV4dG9iamVjdCIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJvZ3JhbWxpc3RpbmcuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcHJvZ3JhbWxpc3RpbmcuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJvZ3JhbWxpc3RpbmcuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ3aWR0aC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmVzcGVjaWZpYy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByb2dyYW1saXN0aW5nLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwcm9ncmFtbGlzdGluZy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHByb2dyYW1saXN0aW5nLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGl0ZXJhbGxheW91dC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibGl0ZXJhbGxheW91dCIgc3Vic3RpdHV0aW9uR3JvdXA9ImxpbmVzcGVjaWZpYy5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb3JlZiIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0idGV4dG9iamVjdCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZWFubm90YXRpb24iLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpdGVyYWxsYXlvdXQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbGl0ZXJhbGxheW91dC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsaXRlcmFsbGF5b3V0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0id2lkdGguYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5lc3BlY2lmaWMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNsYXNzIiBkZWZhdWx0PSJub3JtYWwiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJtb25vc3BhY2VkIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5vcm1hbCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGl0ZXJhbGxheW91dC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbGl0ZXJhbGxheW91dC5hdHRsaXN0IC0tPgogIDwhLS0gTGluZUFubm90YXRpb24gKGRlZmluZWQgaW4gdGhlIElubGluZXMgc2VjdGlvbiwgYmVsb3cpIC0tPgogIDwhLS0gZW5kIG9mIGxpdGVyYWxsYXlvdXQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzY3JlZW5jby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2NyZWVuY28iIHN1YnN0aXR1dGlvbkdyb3VwPSJsaW5lc3BlY2lmaWMuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcmVhc3BlYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ic2NyZWVuIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjYWxsb3V0bGlzdCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzY3JlZW5jby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzY3JlZW5jby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzY3JlZW5jby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNjcmVlbmNvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzY3JlZW5jby5hdHRsaXN0IC0tPgogIDwhLS0gQXJlYVNwZWMgKGRlZmluZWQgYWJvdmUpIC0tPgogIDwhLS0gQ2FsbG91dExpc3QgKGRlZmluZWQgYWJvdmUgaW4gTGlzdHMpIC0tPgogIDwhLS0gZW5kIG9mIHNjcmVlbmNvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2NyZWVuLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzY3JlZW4iIHN1YnN0aXR1dGlvbkdyb3VwPSJsaW5lc3BlY2lmaWMuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjbyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY29yZWYiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRleHRvYmplY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVhbm5vdGF0aW9uIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzY3JlZW4uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2NyZWVuLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNjcmVlbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9IndpZHRoLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGluZXNwZWNpZmljLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2NyZWVuLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzY3JlZW4uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzY3JlZW4ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzY3JlZW5zaG90LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzY3JlZW5zaG90IiBzdWJzdGl0dXRpb25Hcm91cD0ibGluZXNwZWNpZmljLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJzY3JlZW5pbmZvIi8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iZ3JhcGhpYyIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJncmFwaGljY28iLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ibWVkaWFvYmplY3QiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ibWVkaWFvYmplY3RjbyIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzY3JlZW5zaG90LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNjcmVlbnNob3QuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2NyZWVuc2hvdC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNjcmVlbnNob3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNjcmVlbnNob3QuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzY3JlZW5zaG90Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2NyZWVuaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2NyZWVuaW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNjcmVlbmluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2NyZWVuaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzY3JlZW5pbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2NyZWVuaW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2NyZWVuaW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNjcmVlbmluZm8ubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIHNjcmVlbnNob3QuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSBGaWd1cmVzIGV0Yy4gLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmaWd1cmUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImZpZ3VyZSIgc3Vic3RpdHV0aW9uR3JvdXA9ImZvcm1hbC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmxvY2tpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iZm9ybWFsb2JqZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czpncm91cCByZWY9ImZpZ3VyZS5taXgiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluay5jaGFyLmNsYXNzIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZpZ3VyZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBmaWd1cmUuZWxlbWVudCAtLT4KICA8IS0tCiAgICBGbG9hdDogV2hldGhlciB0aGUgRmlndXJlIGlzIHN1cHBvc2VkIHRvIGJlIHJlbmRlcmVkCiAgICB3aGVyZSBjb252ZW5pZW50ICh5ZXMgKDEpIHZhbHVlKSBvciBhdCB0aGUgcGxhY2UgaXQgb2NjdXJzCiAgICBpbiB0aGUgdGV4dCAobm8gKDApIHZhbHVlLCB0aGUgZGVmYXVsdCkKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZmlndXJlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmbG9hdCIgZGVmYXVsdD0iMCIgdHlwZT0ieWVzb3Juby5hdHR2YWxzIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InBnd2lkZSIgdHlwZT0ieWVzb3Juby5hdHR2YWxzIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZpZ3VyZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZmlndXJlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZmlndXJlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5mb3JtYWxmaWd1cmUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImluZm9ybWFsZmlndXJlIiBzdWJzdGl0dXRpb25Hcm91cD0iaW5mb3JtYWwuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czpjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmdyb3VwIHJlZj0iZmlndXJlLm1peCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rLmNoYXIuY2xhc3MiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5mb3JtYWxmaWd1cmUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW5mb3JtYWxmaWd1cmUuZWxlbWVudCAtLT4KICA8IS0tCiAgICBGbG9hdDogV2hldGhlciB0aGUgRmlndXJlIGlzIHN1cHBvc2VkIHRvIGJlIHJlbmRlcmVkCiAgICB3aGVyZSBjb252ZW5pZW50ICh5ZXMgKDEpIHZhbHVlKSBvciBhdCB0aGUgcGxhY2UgaXQgb2NjdXJzCiAgICBpbiB0aGUgdGV4dCAobm8gKDApIHZhbHVlLCB0aGUgZGVmYXVsdCkKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5mb3JtYWxmaWd1cmUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZsb2F0IiBkZWZhdWx0PSIwIiB0eXBlPSJ5ZXNvcm5vLmF0dHZhbHMiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icGd3aWRlIiB0eXBlPSJ5ZXNvcm5vLmF0dHZhbHMiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5mb3JtYWxmaWd1cmUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGluZm9ybWFsZmlndXJlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW5mb3JtYWxmaWd1cmUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJncmFwaGljY28ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImdyYXBoaWNjbyIgc3Vic3RpdHV0aW9uR3JvdXA9ImluZm9ybWFsLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYXJlYXNwZWMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImdyYXBoaWMiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNhbGxvdXRsaXN0Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImdyYXBoaWNjby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBncmFwaGljY28uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ3JhcGhpY2NvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ3JhcGhpY2NvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBncmFwaGljY28uYXR0bGlzdCAtLT4KICA8IS0tIEFyZWFTcGVjIChkZWZpbmVkIGFib3ZlIGluIEV4YW1wbGVzKSAtLT4KICA8IS0tIENhbGxvdXRMaXN0IChkZWZpbmVkIGFib3ZlIGluIExpc3RzKSAtLT4KICA8IS0tIGVuZCBvZiBncmFwaGljY28ubW9kdWxlIC0tPgogIDwhLS0KICAgIEdyYXBoaWNhbCBkYXRhIGNhbiBiZSB0aGUgY29udGVudCBvZiBHcmFwaGljLCBvciB5b3UgY2FuIHJlZmVyZW5jZQogICAgYW4gZXh0ZXJuYWwgZmlsZSBlaXRoZXIgYXMgYW4gZW50aXR5IChFbnRpdHJlZikgb3IgYSBmaWxlbmFtZQogICAgKEZpbGVyZWYpLgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJncmFwaGljLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJncmFwaGljIiBzdWJzdGl0dXRpb25Hcm91cD0iaW5mb3JtYWwuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJncmFwaGljLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGdyYXBoaWMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ3JhcGhpYy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImdyYXBoaWNzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ3JhcGhpYy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZ3JhcGhpYy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGdyYXBoaWMubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmxpbmVncmFwaGljLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbmxpbmVncmFwaGljIiBzdWJzdGl0dXRpb25Hcm91cD0iaW5saW5lb2JqLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmxpbmVncmFwaGljLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGlubGluZWdyYXBoaWMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5saW5lZ3JhcGhpYy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImdyYXBoaWNzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5saW5lZ3JhcGhpYy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaW5saW5lZ3JhcGhpYy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGlubGluZWdyYXBoaWMubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtZWRpYW9iamVjdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibWVkaWFvYmplY3QiIHN1YnN0aXR1dGlvbkdyb3VwPSJpbmZvcm1hbC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ib2JqZWN0aW5mbyIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1lZGlhb2JqZWN0Lm1peCIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJjYXB0aW9uIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1lZGlhb2JqZWN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1lZGlhb2JqZWN0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1lZGlhb2JqZWN0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWVkaWFvYmplY3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1lZGlhb2JqZWN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbWVkaWFvYmplY3QubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmxpbmVtZWRpYW9iamVjdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW5saW5lbWVkaWFvYmplY3QiIHN1YnN0aXR1dGlvbkdyb3VwPSJpbmxpbmVvYmouY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ib2JqZWN0aW5mbyIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1lZGlhb2JqZWN0Lm1peCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmxpbmVtZWRpYW9iamVjdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBpbmxpbmVtZWRpYW9iamVjdC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmxpbmVtZWRpYW9iamVjdC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImlubGluZW1lZGlhb2JqZWN0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpbmxpbmVtZWRpYW9iamVjdC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGlubGluZW1lZGlhb2JqZWN0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idmlkZW9vYmplY3Qucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InZpZGVvb2JqZWN0IiBzdWJzdGl0dXRpb25Hcm91cD0ibWVkaWFvYmplY3QubWl4Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJvYmplY3RpbmZvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ2aWRlb2RhdGEiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idmlkZW9vYmplY3QuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdmlkZW9vYmplY3QuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idmlkZW9vYmplY3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2aWRlb29iamVjdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdmlkZW9vYmplY3QuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB2aWRlb29iamVjdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImF1ZGlvb2JqZWN0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhdWRpb29iamVjdCIgc3Vic3RpdHV0aW9uR3JvdXA9Im1lZGlhb2JqZWN0Lm1peCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ib2JqZWN0aW5mbyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYXVkaW9kYXRhIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImF1ZGlvb2JqZWN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGF1ZGlvb2JqZWN0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImF1ZGlvb2JqZWN0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXVkaW9vYmplY3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGF1ZGlvb2JqZWN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYXVkaW9vYmplY3QubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbWFnZW9iamVjdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW1hZ2VvYmplY3QiIHN1YnN0aXR1dGlvbkdyb3VwPSJtZWRpYW9iamVjdC5taXgiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Im9iamVjdGluZm8iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImltYWdlZGF0YSIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbWFnZW9iamVjdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBpbWFnZW9iamVjdC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbWFnZW9iamVjdC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImltYWdlb2JqZWN0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpbWFnZW9iamVjdC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGltYWdlb2JqZWN0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGV4dG9iamVjdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idGV4dG9iamVjdCIgc3Vic3RpdHV0aW9uR3JvdXA9Im1lZGlhb2JqZWN0Lm1peCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ib2JqZWN0aW5mbyIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InBocmFzZSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0ZXh0ZGF0YSIvPgogICAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRleHRvYmplY3QubWl4Ii8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRleHRvYmplY3QuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdGV4dG9iamVjdC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0ZXh0b2JqZWN0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGV4dG9iamVjdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdGV4dG9iamVjdC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHRleHRvYmplY3QubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvYmplY3RpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJvYmplY3RpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib2JqZWN0aW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBvYmplY3RpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9iamVjdGluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvYmplY3RpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBvYmplY3RpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygb2JqZWN0aW5mby5tb2R1bGUgLS0+CiAgPCEtLQogICAgRW50aXR5UmVmOiBOYW1lIG9mIGFuIGV4dGVybmFsIGVudGl0eSBjb250YWluaW5nIHRoZSBjb250ZW50CiAgICBvZiB0aGUgb2JqZWN0IGRhdGEKICAtLT4KICA8IS0tCiAgICBGaWxlUmVmOiBGaWxlbmFtZSwgcXVhbGlmaWVkIGJ5IGEgcGF0aG5hbWUgaWYgZGVzaXJlZCwKICAgIGRlc2lnbmF0aW5nIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnQgb2YgdGhlIG9iamVjdCBkYXRhCiAgLS0+CiAgPCEtLSBGb3JtYXQ6IE5vdGF0aW9uIG9mIHRoZSBlbGVtZW50IGNvbnRlbnQsIGlmIGFueSAtLT4KICA8IS0tIFNyY0NyZWRpdDogSW5mb3JtYXRpb24gYWJvdXQgdGhlIHNvdXJjZSBvZiB0aGUgaW1hZ2UgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9iamVjdGRhdGEuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZW50aXR5cmVmIiB0eXBlPSJ4czpFTlRJVFkiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZmlsZXJlZiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmb3JtYXQiIHR5cGU9Im5vdGF0aW9uLmNsYXNzIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNyY2NyZWRpdCIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InZpZGVvZGF0YS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idmlkZW9kYXRhIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idmlkZW9kYXRhLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHZpZGVvZGF0YS5lbGVtZW50IC0tPgogIDwhLS0gV2lkdGg6IFNhbWUgYXMgQ0FMUyByZXByb3dpZCAoZGVzaXJlZCB3aWR0aCkgLS0+CiAgPCEtLSBEZXB0aDogU2FtZSBhcyBDQUxTIHJlcHJvZGVwIChkZXNpcmVkIGRlcHRoKSAtLT4KICA8IS0tCiAgICBBbGlnbjogU2FtZSBhcyBDQUxTIGhwbGFjZSB3aXRoICdub25lJyByZW1vdmVkOyAjSU1QTElFRCBtZWFucwogICAgYXBwbGljYXRpb24tc3BlY2lmaWMKICAtLT4KICA8IS0tIFNjYWxlOiBDb25mbGF0aW9uIG9mIENBTFMgaHNjYWxlIGFuZCB2c2NhbGUgLS0+CiAgPCEtLSBTY2FsZWZpdDogU2FtZSBhcyBDQUxTIHNjYWxlZml0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ2aWRlb2RhdGEuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9IndpZHRoIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbnRlbnR3aWR0aCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkZXB0aCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb250ZW50ZGVwdGgiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYWxpZ24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsZWZ0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJpZ2h0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNlbnRlciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2YWxpZ24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0b3AiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibWlkZGxlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImJvdHRvbSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzY2FsZSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzY2FsZWZpdCIgdHlwZT0ieWVzb3Juby5hdHR2YWxzIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvYmplY3RkYXRhLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idmlkZW9kYXRhLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB2aWRlb2RhdGEuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB2aWRlb2RhdGEubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhdWRpb2RhdGEucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImF1ZGlvZGF0YSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImF1ZGlvZGF0YS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBhdWRpb2RhdGEuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXVkaW9kYXRhLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib2JqZWN0ZGF0YS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImF1ZGlvZGF0YS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYXVkaW9kYXRhLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYXVkaW9kYXRhLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW1hZ2VkYXRhLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbWFnZWRhdGEiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbWFnZWRhdGEuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW1hZ2VkYXRhLmVsZW1lbnQgLS0+CiAgPCEtLSBXaWR0aDogU2FtZSBhcyBDQUxTIHJlcHJvd2lkIChkZXNpcmVkIHdpZHRoKSAtLT4KICA8IS0tIERlcHRoOiBTYW1lIGFzIENBTFMgcmVwcm9kZXAgKGRlc2lyZWQgZGVwdGgpIC0tPgogIDwhLS0KICAgIEFsaWduOiBTYW1lIGFzIENBTFMgaHBsYWNlIHdpdGggJ25vbmUnIHJlbW92ZWQ7ICNJTVBMSUVEIG1lYW5zCiAgICBhcHBsaWNhdGlvbi1zcGVjaWZpYwogIC0tPgogIDwhLS0gU2NhbGU6IENvbmZsYXRpb24gb2YgQ0FMUyBoc2NhbGUgYW5kIHZzY2FsZSAtLT4KICA8IS0tIFNjYWxlZml0OiBTYW1lIGFzIENBTFMgc2NhbGVmaXQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImltYWdlZGF0YS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0id2lkdGgiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29udGVudHdpZHRoIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImRlcHRoIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbnRlbnRkZXB0aCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxlZnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmlnaHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2VudGVyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbGlnbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRvcCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJtaWRkbGUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYm90dG9tIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNjYWxlIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNjYWxlZml0IiB0eXBlPSJ5ZXNvcm5vLmF0dHZhbHMiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9iamVjdGRhdGEuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbWFnZWRhdGEucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGltYWdlZGF0YS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGltYWdlZGF0YS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRleHRkYXRhLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0ZXh0ZGF0YSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRleHRkYXRhLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRleHRkYXRhLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRleHRkYXRhLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJlbmNvZGluZyIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib2JqZWN0ZGF0YS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRleHRkYXRhLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0ZXh0ZGF0YS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHRleHRkYXRhLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2FwdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY2FwdGlvbiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRleHRvYmplY3QubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNhcHRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY2FwdGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjYXB0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2FwdGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY2FwdGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNhcHRpb24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtZWRpYW9iamVjdGNvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtZWRpYW9iamVjdGNvIiBzdWJzdGl0dXRpb25Hcm91cD0iaW5mb3JtYWwuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Im9iamVjdGluZm8iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImltYWdlb2JqZWN0Y28iLz4KICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbWFnZW9iamVjdGNvIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRleHRvYmplY3QiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWVkaWFvYmplY3Rjby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtZWRpYW9iamVjdGNvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1lZGlhb2JqZWN0Y28uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtZWRpYW9iamVjdGNvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtZWRpYW9iamVjdGNvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbWVkaWFvYmplY3Rjby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImltYWdlb2JqZWN0Y28ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImltYWdlb2JqZWN0Y28iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcmVhc3BlYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW1hZ2VvYmplY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNhbGxvdXRsaXN0Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImltYWdlb2JqZWN0Y28uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW1hZ2VvYmplY3Rjby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbWFnZW9iamVjdGNvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW1hZ2VvYmplY3Rjby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaW1hZ2VvYmplY3Rjby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGltYWdlb2JqZWN0Y28ubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIG1lZGlhb2JqZWN0LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gRXF1YXRpb25zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIFRoaXMgUEUgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIHJlcGxhY2luZyBlcXVhdGlvbiBjb250ZW50LCAtLT4KICA8IS0tIHBlcmhhcHMgYWRkaW5nIGEgbmV3IG9yIGRpZmZlcmVudCBtb2RlbCAoZS5nLiwgTWF0aE1MKSAtLT4KICA8eHM6Z3JvdXAgbmFtZT0iZXF1YXRpb24uY29udGVudCI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJhbHQiLz4KICAgICAgPHhzOmNob2ljZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJncmFwaGljIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibWVkaWFvYmplY3QiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImlubGluZWVxdWF0aW9uLmNvbnRlbnQiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYWx0Ii8+CiAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZ3JhcGhpYyIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImlubGluZW1lZGlhb2JqZWN0Ii8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmNvbXBsZXhUeXBlPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlcXVhdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZXF1YXRpb24iIHN1YnN0aXR1dGlvbkdyb3VwPSJmb3JtYWwuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0iZm9ybWFsb2JqZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmZvcm1hbGVxdWF0aW9uIi8+CiAgICAgICAgICA8eHM6Z3JvdXAgcmVmPSJlcXVhdGlvbi5jb250ZW50Ii8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVxdWF0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGVxdWF0aW9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVxdWF0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlcXVhdGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZXF1YXRpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBlcXVhdGlvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImluZm9ybWFsZXF1YXRpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImluZm9ybWFsZXF1YXRpb24iIHN1YnN0aXR1dGlvbkdyb3VwPSJpbmZvcm1hbC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmxvY2tpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iZXF1YXRpb24uY29udGVudCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmZvcm1hbGVxdWF0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGluZm9ybWFsZXF1YXRpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5mb3JtYWxlcXVhdGlvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImluZm9ybWFsZXF1YXRpb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGluZm9ybWFsZXF1YXRpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBpbmZvcm1hbGVxdWF0aW9uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5saW5lZXF1YXRpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImlubGluZWVxdWF0aW9uIiBzdWJzdGl0dXRpb25Hcm91cD0iaW5saW5lb2JqLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Y29tcGxleENvbnRlbnQ+CiAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJpbmxpbmVlcXVhdGlvbi5jb250ZW50Ij4KICAgICAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImlubGluZWVxdWF0aW9uLmF0dGxpc3QiLz4KICAgICAgICA8L3hzOmV4dGVuc2lvbj4KICAgICAgPC94czpjb21wbGV4Q29udGVudD4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGlubGluZWVxdWF0aW9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImlubGluZWVxdWF0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5saW5lZXF1YXRpb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGlubGluZWVxdWF0aW9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW5saW5lZXF1YXRpb24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhbHQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImFsdCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhbHQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYWx0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFsdC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFsdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYWx0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYWx0Lm1vZHVsZSAtLT4KICA8IS0tIFRhYmxlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBDaG9vc2UgYSB0YWJsZSBtb2RlbC4gQ0FMUyBvciBPQVNJUyBYTUwgRXhjaGFuZ2UgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRhYmxlcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBBZGQgbGFiZWwgYW5kIHJvbGUgYXR0cmlidXRlcyB0byB0YWJsZSBhbmQgaW5mb3JtYWx0YWJsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYm9keWF0dCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0KICAgIEFkZCBjb21tb24gYXR0cmlidXRlcyB0byBUYWJsZSwgVEdyb3VwLCBUQm9keSwgVEhlYWQsIFRGb290LCBSb3csCiAgICBFbnRyeVRibCwgYW5kIEVudHJ5IChhbmQgSW5mb3JtYWxUYWJsZSBlbGVtZW50KS4KICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdXIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGFibGVzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29tbW9uLnRhYmxlLmF0dHJpYnMiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYm9keWF0dCIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdXIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gQ29udGVudCBtb2RlbCBmb3IgVGFibGUuIC0tPgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0YmwudGFibGUubWRsIj4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICA8eHM6Z3JvdXAgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0ZXh0b2JqZWN0Ii8+CiAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZ3JhcGhpYyIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1lZGlhb2JqZWN0Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idGdyb3VwIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmNvbXBsZXhUeXBlPgogIDwhLS0gQWxsb3cgZWl0aGVyIG9iamVjdHMgb3IgaW5saW5lczsgYmV3YXJlIG9mIFJFcyBiZXR3ZWVuIGVsZW1lbnRzLiAtLT4KICA8eHM6Z3JvdXAgbmFtZT0idGJsLmVudHJ5Lm1kbCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6Z3JvdXAgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czpncm91cCByZWY9InRhYmVudHJ5Lm1peCIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8IS0tIFJlZmVyZW5jZSBDQUxTIFRhYmxlIE1vZGVsIC0tPgogIDwhLS0gZW5kIG9mIHRhYmxlLm1vZHVsZSAtLT4KICA8IS0tCiAgICBOb3RlIHRoYXQgSW5mb3JtYWxUYWJsZSBpcyBkZXBlbmRlbnQgb24gc29tZSBvZiB0aGUgZW50aXR5CiAgICBkZWNsYXJhdGlvbnMgdGhhdCBjdXN0b21pemUgVGFibGUuCiAgLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW5mb3JtYWx0YWJsZSIgc3Vic3RpdHV0aW9uR3JvdXA9ImluZm9ybWFsLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRleHRvYmplY3QiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZ3JhcGhpYyIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibWVkaWFvYmplY3QiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRncm91cCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmZvcm1hbHRhYmxlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGluZm9ybWFsdGFibGUuZWxlbWVudCAtLT4KICA8IS0tCiAgICBGcmFtZSwgQ29sc2VwLCBhbmQgUm93c2VwIG11c3QgYmUgcmVwZWF0ZWQgYmVjYXVzZQogICAgdGhleSBhcmUgbm90IGluIGVudGl0aWVzIGluIHRoZSB0YWJsZSBtb2R1bGUuCiAgLS0+CiAgPCEtLQogICAgaW5jbHVkZXMgVGFiU3R5bGUsIFRvQ2VudHJ5LCBTaG9ydEVudHJ5LAogICAgT3JpZW50LCBQZ1dpZGUKICAtLT4KICA8IS0tIGluY2x1ZGVzIExhYmVsIC0tPgogIDwhLS0gaW5jbHVkZXMgY29tbW9uIGF0dHJpYnV0ZXMgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImluZm9ybWFsdGFibGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZyYW1lIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idG9wIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImJvdHRvbSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0b3Bib3QiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYWxsIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNpZGVzIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5vbmUiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29sc2VwIiB0eXBlPSJ5ZXNvcm5vLmF0dHZhbHMiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icm93c2VwIiB0eXBlPSJ5ZXNvcm5vLmF0dHZhbHMiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi50YWJsZS5hdHRyaWJzIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0YmwudGFibGUuYXR0Ii8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpbmZvcm1hbHRhYmxlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW5mb3JtYWx0YWJsZS5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gU3lub3BzZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIFN5bm9wc2lzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN5bm9wc2lzLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzeW5vcHNpcyIgc3Vic3RpdHV0aW9uR3JvdXA9InN5bm9wLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZ3JhcGhpYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibWVkaWFvYmplY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb3JlZiIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0idGV4dG9iamVjdCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZWFubm90YXRpb24iLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN5bm9wc2lzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN5bm9wc2lzLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN5bm9wc2lzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5lc3BlY2lmaWMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzeW5vcHNpcy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc3lub3BzaXMuYXR0bGlzdCAtLT4KICA8IS0tIExpbmVBbm5vdGF0aW9uIChkZWZpbmVkIGluIHRoZSBJbmxpbmVzIHNlY3Rpb24sIGJlbG93KSAtLT4KICA8IS0tIGVuZCBvZiBzeW5vcHNpcy5tb2R1bGUgLS0+CiAgPCEtLSBDbWRTeW5vcHNpcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjbWRzeW5vcHNpcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY21kc3lub3BzaXMiIHN1YnN0aXR1dGlvbkdyb3VwPSJzeW5vcC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iY29tbWFuZCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcmciLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iZ3JvdXAiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic2JyIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzeW5vcGZyYWdtZW50Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNtZHN5bm9wc2lzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNtZHN5bm9wc2lzLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgU2VwY2hhcjogQ2hhcmFjdGVyIHRoYXQgc2hvdWxkIHNlcGFyYXRlIGNvbW1hbmQgYW5kIGFsbAogICAgdG9wLWxldmVsIGFyZ3VtZW50czsgYWx0ZXJuYXRlIHZhbHVlIG1pZ2h0IGJlIGUuZy4sICZEZWx0YTsKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY21kc3lub3BzaXMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2VwY2hhciIgZGVmYXVsdD0iICIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbWRsZW5ndGgiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNtZHN5bm9wc2lzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjbWRzeW5vcHNpcy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNtZHN5bm9wc2lzLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXJnLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhcmciPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFyZyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZ3JvdXAiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im9wdGlvbiIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ic3lub3BmcmFnbWVudHJlZiIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icmVwbGFjZWFibGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InNiciIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXJnLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFyZy5lbGVtZW50IC0tPgogIDwhLS0KICAgIENob2ljZTogV2hldGhlciBBcmcgbXVzdCBiZSBzdXBwbGllZDogT3B0IChvcHRpb25hbCB0bwogICAgc3VwcGx5LCBlLmcuIFthcmddOyB0aGUgZGVmYXVsdCksIFJlcSAocmVxdWlyZWQgdG8gc3VwcGx5LAogICAgZS5nLiB7YXJnfSksIG9yIFBsYWluIChyZXF1aXJlZCB0byBzdXBwbHksIGUuZy4gYXJnKQogIC0tPgogIDwhLS0KICAgIFJlcDogd2hldGhlciBBcmcgaXMgcmVwZWF0YWJsZTogTm9yZXBlYXQgKGUuZy4gYXJnIHdpdGhvdXQKICAgIGVsbGlwc2lzOyB0aGUgZGVmYXVsdCksIG9yIFJlcGVhdCAoZS5nLiBhcmcuLi4pCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFyZy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2hvaWNlIiBkZWZhdWx0PSJvcHQiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvcHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVxIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InBsYWluIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlcCIgZGVmYXVsdD0ibm9yZXBlYXQiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJub3JlcGVhdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZXBlYXQiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFyZy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYXJnLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYXJnLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ3JvdXAucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Imdyb3VwIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcmciLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Imdyb3VwIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJvcHRpb24iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN5bm9wZnJhZ21lbnRyZWYiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InJlcGxhY2VhYmxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzYnIiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdyb3VwLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGdyb3VwLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgQ2hvaWNlOiBXaGV0aGVyIEdyb3VwIG11c3QgYmUgc3VwcGxpZWQ6IE9wdCAob3B0aW9uYWwgdG8KICAgIHN1cHBseSwgZS5nLiAgW2cxfGcyfGczXTsgdGhlIGRlZmF1bHQpLCBSZXEgKHJlcXVpcmVkIHRvCiAgICBzdXBwbHksIGUuZy4gIHtnMXxnMnxnM30pLCBQbGFpbiAocmVxdWlyZWQgdG8gc3VwcGx5LAogICAgZS5nLiAgZzF8ZzJ8ZzMpLCBPcHRNdWx0IChjYW4gc3VwcGx5IHplcm8gb3IgbW9yZSwgZS5nLgogICAgW1tnMXxnMnxnM11dKSwgb3IgUmVxTXVsdCAobXVzdCBzdXBwbHkgb25lIG9yIG1vcmUsIGUuZy4KICAgIHt7ZzF8ZzJ8ZzN9fSkKICAtLT4KICA8IS0tCiAgICBSZXA6IHdoZXRoZXIgR3JvdXAgaXMgcmVwZWF0YWJsZTogTm9yZXBlYXQgKGUuZy4gZ3JvdXAKICAgIHdpdGhvdXQgZWxsaXBzaXM7IHRoZSBkZWZhdWx0KSwgb3IgUmVwZWF0IChlLmcuIGdyb3VwLi4uKQogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJncm91cC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2hvaWNlIiBkZWZhdWx0PSJvcHQiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvcHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVxIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InBsYWluIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlcCIgZGVmYXVsdD0ibm9yZXBlYXQiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJub3JlcGVhdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZXBlYXQiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdyb3VwLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBncm91cC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGdyb3VwLm1vZHVsZSAtLT4KICA8IS0tIFN5bm9wc2lzIGJyZWFrIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzYnIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNiciI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNici5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzYnIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2JyLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2JyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzYnIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzYnIubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzeW5vcGZyYWdtZW50cmVmLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzeW5vcGZyYWdtZW50cmVmIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN5bm9wZnJhZ21lbnRyZWYuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc3lub3BmcmFnbWVudHJlZi5lbGVtZW50IC0tPgogIDwhLS0KICAgIHRvIFN5bm9wRnJhZ21lbnQgb2YgY29tcGxleCBzeW5vcHNpcwogICAgbWF0ZXJpYWwgZm9yIHNlcGFyYXRlIHJlZmVyZW5jaW5nCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN5bm9wZnJhZ21lbnRyZWYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rZW5kcmVxLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3lub3BmcmFnbWVudHJlZi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc3lub3BmcmFnbWVudHJlZi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHN5bm9wZnJhZ21lbnRyZWYubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzeW5vcGZyYWdtZW50LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzeW5vcGZyYWdtZW50Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcmciLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Imdyb3VwIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzeW5vcGZyYWdtZW50LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN5bm9wZnJhZ21lbnQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3lub3BmcmFnbWVudC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImlkcmVxLmNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN5bm9wZnJhZ21lbnQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN5bm9wZnJhZ21lbnQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzeW5vcGZyYWdtZW50Lm1vZHVsZSAtLT4KICA8IS0tIENvbW1hbmQgKGRlZmluZWQgaW4gdGhlIElubGluZXMgc2VjdGlvbiwgYmVsb3cpIC0tPgogIDwhLS0gT3B0aW9uIChkZWZpbmVkIGluIHRoZSBJbmxpbmVzIHNlY3Rpb24sIGJlbG93KSAtLT4KICA8IS0tIFJlcGxhY2VhYmxlIChkZWZpbmVkIGluIHRoZSBJbmxpbmVzIHNlY3Rpb24sIGJlbG93KSAtLT4KICA8IS0tIGVuZCBvZiBjbWRzeW5vcHNpcy5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIEZ1bmNTeW5vcHNpcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZ1bmNzeW5vcHNpcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZnVuY3N5bm9wc2lzIiBzdWJzdGl0dXRpb25Hcm91cD0ic3lub3AuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImZ1bmNzeW5vcHNpc2luZm8iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImZ1bmNwcm90b3R5cGUiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZ1bmNzeW5vcHNpcy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBmdW5jc3lub3BzaXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZnVuY3N5bm9wc2lzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmdW5jc3lub3BzaXMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGZ1bmNzeW5vcHNpcy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGZ1bmNzeW5vcHNpcy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZ1bmNzeW5vcHNpc2luZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImZ1bmNzeW5vcHNpc2luZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0ZXh0b2JqZWN0Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lYW5ub3RhdGlvbiIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZnVuY3N5bm9wc2lzaW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBmdW5jc3lub3BzaXNpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZ1bmNzeW5vcHNpc2luZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5lc3BlY2lmaWMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmdW5jc3lub3BzaXNpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBmdW5jc3lub3BzaXNpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZnVuY3N5bm9wc2lzaW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZ1bmNwcm90b3R5cGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImZ1bmNwcm90b3R5cGUiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmdW5jZGVmIi8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0idm9pZCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ2YXJhcmdzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhbWRlZiIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmdW5jcHJvdG90eXBlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGZ1bmNwcm90b3R5cGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZnVuY3Byb3RvdHlwZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZ1bmNwcm90b3R5cGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGZ1bmNwcm90b3R5cGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBmdW5jcHJvdG90eXBlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZnVuY2RlZi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZnVuY2RlZiI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0idHlwZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icmVwbGFjZWFibGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImZ1bmN0aW9uIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmdW5jZGVmLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGZ1bmNkZWYuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZnVuY2RlZi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZ1bmNkZWYucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGZ1bmNkZWYuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBmdW5jZGVmLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idm9pZC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idm9pZCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InZvaWQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygdm9pZC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ2b2lkLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idm9pZC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygdm9pZC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHZvaWQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ2YXJhcmdzLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ2YXJhcmdzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idmFyYXJncy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB2YXJhcmdzLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InZhcmFyZ3MuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2YXJhcmdzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB2YXJhcmdzLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdmFyYXJncy5tb2R1bGUgLS0+CiAgPCEtLQogICAgUHJvY2Vzc2luZyBhc3N1bWVzIHRoYXQgb25seSBvbmUgUGFyYW1ldGVyIHdpbGwgYXBwZWFyIGluIGEKICAgIFBhcmFtRGVmLCBhbmQgdGhhdCBGdW5jUGFyYW1zIHdpbGwgYmUgdXNlZCBhdCBtb3N0IG9uY2UsIGZvcgogICAgcHJvdmlkaW5nIGluZm9ybWF0aW9uIG9uIHRoZSAiaW5uZXIgcGFyYW1ldGVycyIgZm9yIHBhcmFtZXRlcnMgdGhhdAogICAgYXJlIHBvaW50ZXJzIHRvIGZ1bmN0aW9ucy4KICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGFyYW1kZWYucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InBhcmFtZGVmIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0eXBlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZXBsYWNlYWJsZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icGFyYW1ldGVyIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmdW5jcGFyYW1zIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYXJhbWRlZi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwYXJhbWRlZi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwYXJhbWRlZi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhcmFtZGVmLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwYXJhbWRlZi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHBhcmFtZGVmLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZnVuY3BhcmFtcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZnVuY3BhcmFtcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZ1bmNwYXJhbXMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZnVuY3BhcmFtcy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmdW5jcGFyYW1zLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZnVuY3BhcmFtcy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZnVuY3BhcmFtcy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGZ1bmNwYXJhbXMubW9kdWxlIC0tPgogIDwhLS0gTGluZUFubm90YXRpb24gKGRlZmluZWQgaW4gdGhlIElubGluZXMgc2VjdGlvbiwgYmVsb3cpIC0tPgogIDwhLS0gUmVwbGFjZWFibGUgKGRlZmluZWQgaW4gdGhlIElubGluZXMgc2VjdGlvbiwgYmVsb3cpIC0tPgogIDwhLS0gRnVuY3Rpb24gKGRlZmluZWQgaW4gdGhlIElubGluZXMgc2VjdGlvbiwgYmVsb3cpIC0tPgogIDwhLS0gUGFyYW1ldGVyIChkZWZpbmVkIGluIHRoZSBJbmxpbmVzIHNlY3Rpb24sIGJlbG93KSAtLT4KICA8IS0tIGVuZCBvZiBmdW5jc3lub3BzaXMuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSBDbGFzc1N5bm9wc2lzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2xhc3NzeW5vcHNpcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY2xhc3NzeW5vcHNpcyIgc3Vic3RpdHV0aW9uR3JvdXA9InN5bm9wLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJvb2NsYXNzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im9vaW50ZXJmYWNlIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im9vZXhjZXB0aW9uIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iY2xhc3NzeW5vcHNpc2luZm8iLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iZmllbGRzeW5vcHNpcyIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtZXRob2Quc3lub3AuY2xhc3MiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2xhc3NzeW5vcHNpcy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjbGFzc3N5bm9wc2lzLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNsYXNzc3lub3BzaXMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Imxhbmd1YWdlIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNsYXNzIiBkZWZhdWx0PSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNsYXNzIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImludGVyZmFjZSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2xhc3NzeW5vcHNpcy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY2xhc3NzeW5vcHNpcy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNsYXNzc3lub3BzaXMubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjbGFzc3N5bm9wc2lzaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY2xhc3NzeW5vcHNpc2luZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0ZXh0b2JqZWN0Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lYW5ub3RhdGlvbiIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2xhc3NzeW5vcHNpc2luZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY2xhc3NzeW5vcHNpc2luZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2xhc3NzeW5vcHNpc2luZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5lc3BlY2lmaWMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjbGFzc3N5bm9wc2lzaW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY2xhc3NzeW5vcHNpc2luZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjbGFzc3N5bm9wc2lzaW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9vY2xhc3Mucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im9vY2xhc3MiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtb2RpZmllciIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY2xhc3NuYW1lIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9vY2xhc3MuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygb29jbGFzcy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvb2NsYXNzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib29jbGFzcy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygb29jbGFzcy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG9vY2xhc3MubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvb2ludGVyZmFjZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ib29pbnRlcmZhY2UiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtb2RpZmllciIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW50ZXJmYWNlbmFtZSIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvb2ludGVyZmFjZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBvb2ludGVyZmFjZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvb2ludGVyZmFjZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9vaW50ZXJmYWNlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBvb2ludGVyZmFjZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG9vaW50ZXJmYWNlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib29leGNlcHRpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im9vZXhjZXB0aW9uIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibW9kaWZpZXIiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImV4Y2VwdGlvbm5hbWUiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib29leGNlcHRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygb29leGNlcHRpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib29leGNlcHRpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvb2V4Y2VwdGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygb29leGNlcHRpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBvb2V4Y2VwdGlvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1vZGlmaWVyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtb2RpZmllciI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9kaWZpZXIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbW9kaWZpZXIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibW9kaWZpZXIuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb2RpZmllci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbW9kaWZpZXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtb2RpZmllci5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImludGVyZmFjZW5hbWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImludGVyZmFjZW5hbWUiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbnRlcmZhY2VuYW1lLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGludGVyZmFjZW5hbWUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW50ZXJmYWNlbmFtZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImludGVyZmFjZW5hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGludGVyZmFjZW5hbWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBpbnRlcmZhY2VuYW1lLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZXhjZXB0aW9ubmFtZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZXhjZXB0aW9ubmFtZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZXhjZXB0aW9ubmFtZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBleGNlcHRpb25uYW1lLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImV4Y2VwdGlvbm5hbWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJleGNlcHRpb25uYW1lLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBleGNlcHRpb25uYW1lLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZXhjZXB0aW9ubmFtZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZpZWxkc3lub3BzaXMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImZpZWxkc3lub3BzaXMiIHN1YnN0aXR1dGlvbkdyb3VwPSJzeW5vcC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1vZGlmaWVyIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InR5cGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InZhcm5hbWUiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iaW5pdGlhbGl6ZXIiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZmllbGRzeW5vcHNpcy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBmaWVsZHN5bm9wc2lzLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZpZWxkc3lub3BzaXMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Imxhbmd1YWdlIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmaWVsZHN5bm9wc2lzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBmaWVsZHN5bm9wc2lzLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZmllbGRzeW5vcHNpcy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImluaXRpYWxpemVyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbml0aWFsaXplciI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5pdGlhbGl6ZXIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW5pdGlhbGl6ZXIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5pdGlhbGl6ZXIuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbml0aWFsaXplci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaW5pdGlhbGl6ZXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBpbml0aWFsaXplci5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbnN0cnVjdG9yc3lub3BzaXMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNvbnN0cnVjdG9yc3lub3BzaXMiIHN1YnN0aXR1dGlvbkdyb3VwPSJtZXRob2Quc3lub3AuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtb2RpZmllciIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJtZXRob2RuYW1lIi8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1ldGhvZHBhcmFtIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InZvaWQiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImV4Y2VwdGlvbm5hbWUiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29uc3RydWN0b3JzeW5vcHNpcy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb25zdHJ1Y3RvcnN5bm9wc2lzLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbnN0cnVjdG9yc3lub3BzaXMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Imxhbmd1YWdlIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb25zdHJ1Y3RvcnN5bm9wc2lzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjb25zdHJ1Y3RvcnN5bm9wc2lzLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29uc3RydWN0b3JzeW5vcHNpcy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImRlc3RydWN0b3JzeW5vcHNpcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZGVzdHJ1Y3RvcnN5bm9wc2lzIiBzdWJzdGl0dXRpb25Hcm91cD0ibWV0aG9kLnN5bm9wLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibW9kaWZpZXIiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ibWV0aG9kbmFtZSIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtZXRob2RwYXJhbSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ2b2lkIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJleGNlcHRpb25uYW1lIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImRlc3RydWN0b3JzeW5vcHNpcy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBkZXN0cnVjdG9yc3lub3BzaXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZGVzdHJ1Y3RvcnN5bm9wc2lzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsYW5ndWFnZSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZGVzdHJ1Y3RvcnN5bm9wc2lzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBkZXN0cnVjdG9yc3lub3BzaXMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBkZXN0cnVjdG9yc3lub3BzaXMubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtZXRob2RzeW5vcHNpcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibWV0aG9kc3lub3BzaXMiIHN1YnN0aXR1dGlvbkdyb3VwPSJtZXRob2Quc3lub3AuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtb2RpZmllciIvPgogICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0idHlwZSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ2b2lkIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtZXRob2RuYW1lIi8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1ldGhvZHBhcmFtIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InZvaWQiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImV4Y2VwdGlvbm5hbWUiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1vZGlmaWVyIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1ldGhvZHN5bm9wc2lzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1ldGhvZHN5bm9wc2lzLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1ldGhvZHN5bm9wc2lzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsYW5ndWFnZSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWV0aG9kc3lub3BzaXMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1ldGhvZHN5bm9wc2lzLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbWV0aG9kc3lub3BzaXMubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtZXRob2RuYW1lLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtZXRob2RuYW1lIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtZXRob2RuYW1lLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1ldGhvZG5hbWUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibWV0aG9kbmFtZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1ldGhvZG5hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1ldGhvZG5hbWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtZXRob2RuYW1lLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibWV0aG9kcGFyYW0ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im1ldGhvZHBhcmFtIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibW9kaWZpZXIiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idHlwZSIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0icGFyYW1ldGVyIi8+CiAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJpbml0aWFsaXplciIvPgogICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iZnVuY3BhcmFtcyIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibW9kaWZpZXIiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWV0aG9kcGFyYW0uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbWV0aG9kcGFyYW0uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibWV0aG9kcGFyYW0uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNob2ljZSIgZGVmYXVsdD0icmVxIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3B0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlcSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwbGFpbiIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZXAiIGRlZmF1bHQ9Im5vcmVwZWF0Ij4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibm9yZXBlYXQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVwZWF0Ii8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtZXRob2RwYXJhbS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbWV0aG9kcGFyYW0uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtZXRob2RwYXJhbS5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgY2xhc3NzeW5vcHNpcy5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBEb2N1bWVudCBpbmZvcm1hdGlvbiBlbnRpdGllcyBhbmQgZWxlbWVudHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0KICAgIFRoZSBkb2N1bWVudCBpbmZvcm1hdGlvbiBlbGVtZW50cyBpbmNsdWRlIHNvbWUgZWxlbWVudHMgdGhhdCBhcmUKICAgIGN1cnJlbnRseSB1c2VkIG9ubHkgaW4gdGhlIGRvY3VtZW50IGhpZXJhcmNoeSBtb2R1bGUuIFRoZXkgYXJlCiAgICBkZWZpbmVkIGhlcmUgc28gdGhhdCB0aGV5IHdpbGwgYmUgYXZhaWxhYmxlIGZvciB1c2UgaW4gY3VzdG9taXplZAogICAgZG9jdW1lbnQgaGllcmFyY2hpZXMuCiAgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gQWNrbm8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYWNrbm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImFja25vIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWNrbm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYWNrbm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYWNrbm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhY2tuby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYWNrbm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhY2tuby5tb2R1bGUgLS0+CiAgPCEtLSBBZGRyZXNzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhZGRyZXNzLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiBzdWJzdGl0dXRpb25Hcm91cD0iaW5mb3JtYWwuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InBlcnNvbm5hbWUiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJwZXJzb24uaWRlbnQubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdHJlZXQiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InBvYiIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icG9zdGNvZGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNpdHkiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN0YXRlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb3VudHJ5Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwaG9uZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZmF4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlbWFpbCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ib3RoZXJhZGRyIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhZGRyZXNzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFkZHJlc3MuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYWRkcmVzcy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmVzcGVjaWZpYy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFkZHJlc3Mucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGFkZHJlc3MuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhZGRyZXNzLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3RyZWV0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzdHJlZXQiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdHJlZXQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc3RyZWV0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN0cmVldC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0cmVldC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc3RyZWV0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc3RyZWV0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icG9iLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJwb2IiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwb2IuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcG9iLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBvYi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBvYi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcG9iLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcG9iLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icG9zdGNvZGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InBvc3Rjb2RlIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icG9zdGNvZGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcG9zdGNvZGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icG9zdGNvZGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwb3N0Y29kZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcG9zdGNvZGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwb3N0Y29kZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNpdHkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNpdHkiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjaXR5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNpdHkuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2l0eS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNpdHkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNpdHkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjaXR5Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3RhdGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InN0YXRlIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc3RhdGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3RhdGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0ZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc3RhdGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzdGF0ZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvdW50cnkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNvdW50cnkiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb3VudHJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvdW50cnkuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY291bnRyeS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvdW50cnkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvdW50cnkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb3VudHJ5Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGhvbmUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InBob25lIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGhvbmUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcGhvbmUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGhvbmUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwaG9uZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcGhvbmUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwaG9uZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZheC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZmF4Ij4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZmF4LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGZheC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmYXguYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmYXgucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGZheC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGZheC5tb2R1bGUgLS0+CiAgPCEtLSBFbWFpbCAoZGVmaW5lZCBpbiB0aGUgSW5saW5lcyBzZWN0aW9uLCBiZWxvdykgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im90aGVyYWRkci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ib3RoZXJhZGRyIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib3RoZXJhZGRyLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG90aGVyYWRkci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvdGhlcmFkZHIuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvdGhlcmFkZHIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG90aGVyYWRkci5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG90aGVyYWRkci5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgYWRkcmVzcy5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIEFmZmlsaWF0aW9uIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFmZmlsaWF0aW9uLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhZmZpbGlhdGlvbiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ic2hvcnRhZmZpbCIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iam9idGl0bGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ib3JnbmFtZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ib3JnZGl2Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJhZGRyZXNzIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFmZmlsaWF0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFmZmlsaWF0aW9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFmZmlsaWF0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWZmaWxpYXRpb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGFmZmlsaWF0aW9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYWZmaWxpYXRpb24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzaG9ydGFmZmlsLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzaG9ydGFmZmlsIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2hvcnRhZmZpbC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzaG9ydGFmZmlsLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNob3J0YWZmaWwuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzaG9ydGFmZmlsLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzaG9ydGFmZmlsLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2hvcnRhZmZpbC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImpvYnRpdGxlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJqb2J0aXRsZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImpvYnRpdGxlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGpvYnRpdGxlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImpvYnRpdGxlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iam9idGl0bGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGpvYnRpdGxlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygam9idGl0bGUubW9kdWxlIC0tPgogIDwhLS0gT3JnTmFtZSAoZGVmaW5lZCBlbHNld2hlcmUgaW4gdGhpcyBzZWN0aW9uKSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib3JnZGl2LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJvcmdkaXYiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvcmdkaXYuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygb3JnZGl2LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9yZ2Rpdi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9yZ2Rpdi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygb3JnZGl2LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygb3JnZGl2Lm1vZHVsZSAtLT4KICA8IS0tIEFkZHJlc3MgKGRlZmluZWQgZWxzZXdoZXJlIGluIHRoaXMgc2VjdGlvbikgLS0+CiAgPCEtLSBlbmQgb2YgYWZmaWxpYXRpb24uY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSBBcnRQYWdlTnVtcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcnRwYWdlbnVtcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXJ0cGFnZW51bXMiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhcnRwYWdlbnVtcy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBhcnRwYWdlbnVtcy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcnRwYWdlbnVtcy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFydHBhZ2VudW1zLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhcnRwYWdlbnVtcy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGFydHBhZ2VudW1zLm1vZHVsZSAtLT4KICA8IS0tIFBlcnNvbk5hbWUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBlcnNvbm5hbWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InBlcnNvbm5hbWUiIHN1YnN0aXR1dGlvbkdyb3VwPSJnZW4uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaG9ub3JpZmljIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmaXJzdG5hbWUiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN1cm5hbWUiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVhZ2UiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im90aGVybmFtZSIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGVyc29ubmFtZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwZXJzb25uYW1lLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBlcnNvbm5hbWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwZXJzb25uYW1lLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwZXJzb25uYW1lLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcGVyc29ubmFtZS5tb2R1bGUgLS0+CiAgPCEtLSBBdXRob3IgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhdXRob3Iucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImF1dGhvciIgc3Vic3RpdHV0aW9uR3JvdXA9ImRvY2luZm8uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwZXJzb25uYW1lIi8+CiAgICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGVyc29uLmlkZW50Lm1peCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InBlcnNvbmJsdXJiIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImVtYWlsIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFkZHJlc3MiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXV0aG9yLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGF1dGhvci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhdXRob3IuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhdXRob3Iucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGF1dGhvci5hdHRsaXN0IC0tPgogIDwhLS0gKHNlZSAiUGVyc29uYWwgaWRlbnRpdHkgZWxlbWVudHMiIGZvciAlcGVyc29uLmlkZW50Lm1peDspIC0tPgogIDwhLS0gZW5kIG9mIGF1dGhvci5tb2R1bGUgLS0+CiAgPCEtLSBBdXRob3JHcm91cCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhdXRob3Jncm91cC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXV0aG9yZ3JvdXAiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImF1dGhvciIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZWRpdG9yIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb2xsYWIiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvcnBhdXRob3IiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im90aGVyY3JlZGl0Ii8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhdXRob3Jncm91cC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBhdXRob3Jncm91cC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhdXRob3Jncm91cC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImF1dGhvcmdyb3VwLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhdXRob3Jncm91cC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGF1dGhvcmdyb3VwLm1vZHVsZSAtLT4KICA8IS0tIEF1dGhvciAoZGVmaW5lZCBlbHNld2hlcmUgaW4gdGhpcyBzZWN0aW9uKSAtLT4KICA8IS0tIEVkaXRvciAoZGVmaW5lZCBlbHNld2hlcmUgaW4gdGhpcyBzZWN0aW9uKSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29sbGFiLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb2xsYWIiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb2xsYWJuYW1lIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJhZmZpbGlhdGlvbiIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb2xsYWIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY29sbGFiLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbGxhYi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbGxhYi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY29sbGFiLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29sbGFiLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29sbGFibmFtZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29sbGFibmFtZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbGxhYm5hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY29sbGFibmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb2xsYWJuYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29sbGFibmFtZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY29sbGFibmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvbGxhYm5hbWUubW9kdWxlIC0tPgogIDwhLS0gQWZmaWxpYXRpb24gKGRlZmluZWQgZWxzZXdoZXJlIGluIHRoaXMgc2VjdGlvbikgLS0+CiAgPCEtLSBlbmQgb2YgY29sbGFiLmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gQ29ycEF1dGhvciAoZGVmaW5lZCBlbHNld2hlcmUgaW4gdGhpcyBzZWN0aW9uKSAtLT4KICA8IS0tIE90aGVyQ3JlZGl0IChkZWZpbmVkIGVsc2V3aGVyZSBpbiB0aGlzIHNlY3Rpb24pIC0tPgogIDwhLS0gZW5kIG9mIGF1dGhvcmdyb3VwLmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gQXV0aG9ySW5pdGlhbHMgLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXV0aG9yaW5pdGlhbHMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImF1dGhvcmluaXRpYWxzIiBzdWJzdGl0dXRpb25Hcm91cD0iZG9jaW5mby5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXV0aG9yaW5pdGlhbHMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYXV0aG9yaW5pdGlhbHMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXV0aG9yaW5pdGlhbHMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhdXRob3Jpbml0aWFscy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYXV0aG9yaW5pdGlhbHMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhdXRob3Jpbml0aWFscy5tb2R1bGUgLS0+CiAgPCEtLSBDb25mR3JvdXAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25mZ3JvdXAucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNvbmZncm91cCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb25mZGF0ZXMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvbmZ0aXRsZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY29uZm51bSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYWRkcmVzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY29uZnNwb25zb3IiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbmZncm91cC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb25mZ3JvdXAuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29uZmdyb3VwLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29uZmdyb3VwLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjb25mZ3JvdXAuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb25mZ3JvdXAubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25mZGF0ZXMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNvbmZkYXRlcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbmZkYXRlcy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb25mZGF0ZXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29uZmRhdGVzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29uZmRhdGVzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjb25mZGF0ZXMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb25mZGF0ZXMubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25mdGl0bGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNvbmZ0aXRsZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbmZ0aXRsZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb25mdGl0bGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29uZnRpdGxlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29uZnRpdGxlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjb25mdGl0bGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb25mdGl0bGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25mbnVtLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb25mbnVtIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29uZm51bS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb25mbnVtLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbmZudW0uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb25mbnVtLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjb25mbnVtLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29uZm51bS5tb2R1bGUgLS0+CiAgPCEtLSBBZGRyZXNzIChkZWZpbmVkIGVsc2V3aGVyZSBpbiB0aGlzIHNlY3Rpb24pIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25mc3BvbnNvci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29uZnNwb25zb3IiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb25mc3BvbnNvci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb25mc3BvbnNvci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25mc3BvbnNvci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbmZzcG9uc29yLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjb25mc3BvbnNvci5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvbmZzcG9uc29yLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBjb25mZ3JvdXAuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSBDb250cmFjdE51bSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb250cmFjdG51bS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29udHJhY3RudW0iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb250cmFjdG51bS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb250cmFjdG51bS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb250cmFjdG51bS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbnRyYWN0bnVtLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjb250cmFjdG51bS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvbnRyYWN0bnVtLm1vZHVsZSAtLT4KICA8IS0tIENvbnRyYWN0U3BvbnNvciAuLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbnRyYWN0c3BvbnNvci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29udHJhY3RzcG9uc29yIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29udHJhY3RzcG9uc29yLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvbnRyYWN0c3BvbnNvci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb250cmFjdHNwb25zb3IuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb250cmFjdHNwb25zb3Iucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvbnRyYWN0c3BvbnNvci5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvbnRyYWN0c3BvbnNvci5tb2R1bGUgLS0+CiAgPCEtLSBDb3B5cmlnaHQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb3B5cmlnaHQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNvcHlyaWdodCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ5ZWFyIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJob2xkZXIiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29weXJpZ2h0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvcHlyaWdodC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb3B5cmlnaHQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb3B5cmlnaHQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvcHlyaWdodC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvcHlyaWdodC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InllYXIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InllYXIiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ5ZWFyLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHllYXIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ieWVhci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InllYXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHllYXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB5ZWFyLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaG9sZGVyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJob2xkZXIiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJob2xkZXIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaG9sZGVyLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImhvbGRlci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImhvbGRlci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaG9sZGVyLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaG9sZGVyLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBjb3B5cmlnaHQuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSBDb3JwQXV0aG9yIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb3JwYXV0aG9yLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb3JwYXV0aG9yIiBzdWJzdGl0dXRpb25Hcm91cD0iZG9jaW5mby5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29ycGF1dGhvci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb3JwYXV0aG9yLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvcnBhdXRob3IuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb3JwYXV0aG9yLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjb3JwYXV0aG9yLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29ycGF1dGhvci5tb2R1bGUgLS0+CiAgPCEtLSBDb3JwTmFtZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImNvcnBuYW1lIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29ycG5hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY29ycG5hbWUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29ycG5hbWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb3JwbmFtZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvcnBuYW1lLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjb3JwbmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvcnBuYW1lLm1vZHVsZSAtLT4KICA8IS0tIERhdGUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImRhdGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImRhdGUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJkYXRlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGRhdGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZGF0ZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImRhdGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGRhdGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBkYXRlLm1vZHVsZSAtLT4KICA8IS0tIEVkaXRpb24gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVkaXRpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImVkaXRpb24iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlZGl0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGVkaXRpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZWRpdGlvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVkaXRpb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGVkaXRpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBlZGl0aW9uLm1vZHVsZSAtLT4KICA8IS0tIEVkaXRvciAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVkaXRvci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZWRpdG9yIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InBlcnNvbm5hbWUiLz4KICAgICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwZXJzb24uaWRlbnQubWl4Ii8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0icGVyc29uYmx1cmIiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iZW1haWwiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iYWRkcmVzcyIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlZGl0b3IuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZWRpdG9yLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVkaXRvci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVkaXRvci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZWRpdG9yLmF0dGxpc3QgLS0+CiAgPCEtLSAoc2VlICJQZXJzb25hbCBpZGVudGl0eSBlbGVtZW50cyIgZm9yICVwZXJzb24uaWRlbnQubWl4OykgLS0+CiAgPCEtLSBlbmQgb2YgZWRpdG9yLm1vZHVsZSAtLT4KICA8IS0tIElTQk4gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImlzYm4ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImlzYm4iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpc2JuLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGlzYm4uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaXNibi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImlzYm4ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGlzYm4uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBpc2JuLm1vZHVsZSAtLT4KICA8IS0tIElTU04gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imlzc24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Imlzc24iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpc3NuLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGlzc24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaXNzbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imlzc24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGlzc24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBpc3NuLm1vZHVsZSAtLT4KICA8IS0tIEJpYmxpb0lkIC4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW8uY2xhc3MuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ1cmkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZG9pIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImlzYm4iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaXNzbiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsaWJyYXJ5b2Zjb25ncmVzcyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwdWJudW1iZXIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3RoZXIiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib3RoZXJjbGFzcyIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb2lkLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJiaWJsaW9pZCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb2lkLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb2lkLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb2lkLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvLmNsYXNzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvaWQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJpYmxpb2lkLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYmlibGlvaWQubW9kdWxlIC0tPgogIDwhLS0gQ2l0ZUJpYmxpb0lkIC4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjaXRlYmlibGlvaWQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNpdGViaWJsaW9pZCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNpdGViaWJsaW9pZC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjaXRlYmlibGlvaWQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2l0ZWJpYmxpb2lkLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvLmNsYXNzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2l0ZWJpYmxpb2lkLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjaXRlYmlibGlvaWQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjaXRlYmlibGlvaWQubW9kdWxlIC0tPgogIDwhLS0gQmlibGlvU291cmNlIC4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9zb3VyY2Uucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImJpYmxpb3NvdXJjZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb3NvdXJjZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBiaWJsaW9zb3VyY2UuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvc291cmNlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvLmNsYXNzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvc291cmNlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBiaWJsaW9zb3VyY2UuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBiaWJsaW9zb3VyY2UubW9kdWxlIC0tPgogIDwhLS0gQmlibGlvUmVsYXRpb24gLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb3JlbGF0aW9uLnR5cGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idHlwZSI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImlzdmVyc2lvbm9mIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imhhc3ZlcnNpb24iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaXNyZXBsYWNlZGJ5Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlcGxhY2VzIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImlzcmVxdWlyZWRieSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZXF1aXJlcyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJpc3BhcnRvZiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJoYXNwYXJ0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImlzcmVmZXJlbmNlZGJ5Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlZmVyZW5jZXMiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaXNmb3JtYXRvZiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJoYXNmb3JtYXQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3RoZXJ0eXBlIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im90aGVydHlwZSIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb3JlbGF0aW9uLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJiaWJsaW9yZWxhdGlvbiI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb3JlbGF0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb3JlbGF0aW9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb3JlbGF0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvLmNsYXNzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvcmVsYXRpb24udHlwZS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb3JlbGF0aW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBiaWJsaW9yZWxhdGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJpYmxpb3JlbGF0aW9uLm1vZHVsZSAtLT4KICA8IS0tIEJpYmxpb0NvdmVyYWdlIC4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9jb3ZlcmFnZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYmlibGlvY292ZXJhZ2UiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9jb3ZlcmFnZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBiaWJsaW9jb3ZlcmFnZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9jb3ZlcmFnZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3BhdGlhbCI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImRjbWlwb2ludCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJpc28zMTY2Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImRjbWlib3giLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idGduIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im90aGVyc3BhdGlhbCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvdGhlcnNwYXRpYWwiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idGVtcG9yYWwiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJkY21pcGVyaW9kIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InczYy1kdGYiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3RoZXJ0ZW1wb3JhbCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvdGhlcnRlbXBvcmFsIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9jb3ZlcmFnZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYmlibGlvY292ZXJhZ2UuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBiaWJsaW9jb3ZlcmFnZS5tb2R1bGUgLS0+CiAgPCEtLSBJbnZQYXJ0TnVtYmVyIC4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbnZwYXJ0bnVtYmVyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbnZwYXJ0bnVtYmVyIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW52cGFydG51bWJlci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBpbnZwYXJ0bnVtYmVyLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImludnBhcnRudW1iZXIuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbnZwYXJ0bnVtYmVyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpbnZwYXJ0bnVtYmVyLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW52cGFydG51bWJlci5tb2R1bGUgLS0+CiAgPCEtLSBJc3N1ZU51bSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpc3N1ZW51bS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaXNzdWVudW0iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpc3N1ZW51bS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBpc3N1ZW51bS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpc3N1ZW51bS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imlzc3VlbnVtLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpc3N1ZW51bS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGlzc3VlbnVtLm1vZHVsZSAtLT4KICA8IS0tIExlZ2FsTm90aWNlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxlZ2Fsbm90aWNlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJsZWdhbG5vdGljZSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmxvY2tpbmZvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlIi8+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImxlZ2Fsbm90aWNlLm1peCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsZWdhbG5vdGljZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBsZWdhbG5vdGljZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsZWdhbG5vdGljZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxlZ2Fsbm90aWNlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBsZWdhbG5vdGljZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGxlZ2Fsbm90aWNlLm1vZHVsZSAtLT4KICA8IS0tIE1vZGVTcGVjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1vZGVzcGVjLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtb2Rlc3BlYyIgc3Vic3RpdHV0aW9uR3JvdXA9ImRvY2luZm8uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vZGVzcGVjLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1vZGVzcGVjLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgQXBwbGljYXRpb246IFR5cGUgb2YgYWN0aW9uIHJlcXVpcmVkIGZvciBjb21wbGV0aW9uCiAgICBvZiB0aGUgbGlua3MgdG8gd2hpY2ggdGhlIE1vZGVTcGVjIGlzIHJlbGV2YW50IChlLmcuLAogICAgcmV0cmlldmFsIHF1ZXJ5KQogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtb2Rlc3BlYy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYXBwbGljYXRpb24iIHR5cGU9Im5vdGF0aW9uLmNsYXNzIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb2Rlc3BlYy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbW9kZXNwZWMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtb2Rlc3BlYy5tb2R1bGUgLS0+CiAgPCEtLSBPcmdOYW1lIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvcmduYW1lLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJvcmduYW1lIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib3JnbmFtZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBvcmduYW1lLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9yZ25hbWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY29ycG9yYXRpb24iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibm9ucHJvZml0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNvbnNvcnRpdW0iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaW5mb3JtYWwiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3RoZXIiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib3RoZXJjbGFzcyIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib3JnbmFtZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygb3JnbmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG9yZ25hbWUubW9kdWxlIC0tPgogIDwhLS0gT3RoZXJDcmVkaXQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib3RoZXJjcmVkaXQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im90aGVyY3JlZGl0IiBzdWJzdGl0dXRpb25Hcm91cD0iZG9jaW5mby5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InBlcnNvbm5hbWUiLz4KICAgICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwZXJzb24uaWRlbnQubWl4Ii8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0icGVyc29uYmx1cmIiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iZW1haWwiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iYWRkcmVzcyIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvdGhlcmNyZWRpdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBvdGhlcmNyZWRpdC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvdGhlcmNyZWRpdC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im90aGVyY3JlZGl0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBvdGhlcmNyZWRpdC5hdHRsaXN0IC0tPgogIDwhLS0gKHNlZSAiUGVyc29uYWwgaWRlbnRpdHkgZWxlbWVudHMiIGZvciAlcGVyc29uLmlkZW50Lm1peDspIC0tPgogIDwhLS0gZW5kIG9mIG90aGVyY3JlZGl0Lm1vZHVsZSAtLT4KICA8IS0tIFBhZ2VOdW1zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBhZ2VudW1zLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJwYWdlbnVtcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhZ2VudW1zLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHBhZ2VudW1zLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBhZ2VudW1zLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFnZW51bXMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHBhZ2VudW1zLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcGFnZW51bXMubW9kdWxlIC0tPgogIDwhLS0gUGVyc29uYWwgaWRlbnRpdHkgZWxlbWVudHMgLi4uLi4uLiAtLT4KICA8IS0tCiAgICBUaGVzZSBlbGVtZW50cyBhcmUgdXNlZCBvbmx5IHdpdGhpbiBBdXRob3IsIEVkaXRvciwgYW5kCiAgICBPdGhlckNyZWRpdC4KICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29udHJpYi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29udHJpYiI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbnRyaWIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY29udHJpYi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb250cmliLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29udHJpYi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY29udHJpYi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvbnRyaWIubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmaXJzdG5hbWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImZpcnN0bmFtZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZpcnN0bmFtZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBmaXJzdG5hbWUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZmlyc3RuYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZmlyc3RuYW1lLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBmaXJzdG5hbWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBmaXJzdG5hbWUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJob25vcmlmaWMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Imhvbm9yaWZpYyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imhvbm9yaWZpYy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBob25vcmlmaWMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaG9ub3JpZmljLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaG9ub3JpZmljLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBob25vcmlmaWMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBob25vcmlmaWMubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsaW5lYWdlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJsaW5lYWdlIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGluZWFnZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBsaW5lYWdlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxpbmVhZ2UuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5lYWdlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBsaW5lYWdlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbGluZWFnZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im90aGVybmFtZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ib3RoZXJuYW1lIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib3RoZXJuYW1lLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG90aGVybmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvdGhlcm5hbWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvdGhlcm5hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG90aGVybmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG90aGVybmFtZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN1cm5hbWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InN1cm5hbWUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdXJuYW1lLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN1cm5hbWUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3VybmFtZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN1cm5hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN1cm5hbWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzdXJuYW1lLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBwZXJzb24uaWRlbnQubW9kdWxlIC0tPgogIDwhLS0gUHJpbnRIaXN0b3J5IC4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJpbnRoaXN0b3J5LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJwcmludGhpc3RvcnkiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcmludGhpc3RvcnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcHJpbnRoaXN0b3J5LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByaW50aGlzdG9yeS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByaW50aGlzdG9yeS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcHJpbnRoaXN0b3J5LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcHJpbnRoaXN0b3J5Lm1vZHVsZSAtLT4KICA8IS0tIFByb2R1Y3ROYW1lIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByb2R1Y3RuYW1lLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJwcm9kdWN0bmFtZSIgc3Vic3RpdHV0aW9uR3JvdXA9ImRvY2luZm8uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByb2R1Y3RuYW1lLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHByb2R1Y3RuYW1lLmVsZW1lbnQgLS0+CiAgPCEtLSBDbGFzczogTW9yZSBwcmVjaXNlbHkgaWRlbnRpZmllcyB0aGUgaXRlbSB0aGUgZWxlbWVudCBuYW1lcyAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJvZHVjdG5hbWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNsYXNzIiBkZWZhdWx0PSJ0cmFkZSI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlcnZpY2UiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idHJhZGUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVnaXN0ZXJlZCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjb3B5cmlnaHQiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByb2R1Y3RuYW1lLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwcm9kdWN0bmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHByb2R1Y3RuYW1lLm1vZHVsZSAtLT4KICA8IS0tIFByb2R1Y3ROdW1iZXIgLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByb2R1Y3RudW1iZXIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InByb2R1Y3RudW1iZXIiIHN1YnN0aXR1dGlvbkdyb3VwPSJkb2NpbmZvLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcm9kdWN0bnVtYmVyLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHByb2R1Y3RudW1iZXIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJvZHVjdG51bWJlci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByb2R1Y3RudW1iZXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHByb2R1Y3RudW1iZXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwcm9kdWN0bnVtYmVyLm1vZHVsZSAtLT4KICA8IS0tIFB1YkRhdGUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InB1YmRhdGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InB1YmRhdGUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwdWJkYXRlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHB1YmRhdGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHViZGF0ZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InB1YmRhdGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHB1YmRhdGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwdWJkYXRlLm1vZHVsZSAtLT4KICA8IS0tIFB1Ymxpc2hlciAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InB1Ymxpc2hlci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icHVibGlzaGVyIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icHVibGlzaGVybmFtZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iYWRkcmVzcyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwdWJsaXNoZXIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcHVibGlzaGVyLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InB1Ymxpc2hlci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InB1Ymxpc2hlci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcHVibGlzaGVyLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcHVibGlzaGVyLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHVibGlzaGVybmFtZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icHVibGlzaGVybmFtZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InB1Ymxpc2hlcm5hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcHVibGlzaGVybmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwdWJsaXNoZXJuYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHVibGlzaGVybmFtZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcHVibGlzaGVybmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHB1Ymxpc2hlcm5hbWUubW9kdWxlIC0tPgogIDwhLS0gQWRkcmVzcyAoZGVmaW5lZCBlbHNld2hlcmUgaW4gdGhpcyBzZWN0aW9uKSAtLT4KICA8IS0tIGVuZCBvZiBwdWJsaXNoZXIuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSBQdWJzTnVtYmVyIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwdWJzbnVtYmVyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJwdWJzbnVtYmVyIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHVic251bWJlci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwdWJzbnVtYmVyLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InB1YnNudW1iZXIuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwdWJzbnVtYmVyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwdWJzbnVtYmVyLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcHVic251bWJlci5tb2R1bGUgLS0+CiAgPCEtLSBSZWxlYXNlSW5mbyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWxlYXNlaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVsZWFzZWluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWxlYXNlaW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZWxlYXNlaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWxlYXNlaW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlbGVhc2VpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZWxlYXNlaW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlbGVhc2VpbmZvLm1vZHVsZSAtLT4KICA8IS0tIFJldkhpc3RvcnkgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJldmhpc3Rvcnkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJldmhpc3RvcnkiIHN1YnN0aXR1dGlvbkdyb3VwPSJkb2NpbmZvLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmV2aXNpb24iLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmV2aGlzdG9yeS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZXZoaXN0b3J5LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJldmhpc3RvcnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXZoaXN0b3J5LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZXZoaXN0b3J5LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmV2aGlzdG9yeS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJldmlzaW9uLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZXZpc2lvbiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InJldm51bWJlciIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZGF0ZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iYXV0aG9yaW5pdGlhbHMiLz4KICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InJldnJlbWFyayIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZXZkZXNjcmlwdGlvbiIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXZpc2lvbi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZXZpc2lvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZXZpc2lvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJldmlzaW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZXZpc2lvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJldmlzaW9uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmV2bnVtYmVyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZXZudW1iZXIiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXZudW1iZXIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmV2bnVtYmVyLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJldm51bWJlci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJldm51bWJlci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmV2bnVtYmVyLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmV2bnVtYmVyLm1vZHVsZSAtLT4KICA8IS0tIERhdGUgKGRlZmluZWQgZWxzZXdoZXJlIGluIHRoaXMgc2VjdGlvbikgLS0+CiAgPCEtLSBBdXRob3JJbml0aWFscyAoZGVmaW5lZCBlbHNld2hlcmUgaW4gdGhpcyBzZWN0aW9uKSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmV2cmVtYXJrLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZXZyZW1hcmsiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXZyZW1hcmsuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmV2cmVtYXJrLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJldnJlbWFyay5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJldnJlbWFyay5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmV2cmVtYXJrLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmV2cmVtYXJrLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmV2ZGVzY3JpcHRpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJldmRlc2NyaXB0aW9uIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJldmRlc2NyaXB0aW9uLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXZkZXNjcmlwdGlvbi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZXZkZXNjcmlwdGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZXZkZXNjcmlwdGlvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJldmRlc2NyaXB0aW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZXZkZXNjcmlwdGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJldmRlc2NyaXB0aW9uLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiByZXZoaXN0b3J5LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gU2VyaWVzVm9sTnVtcyAuLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VyaWVzdm9sbnVtcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VyaWVzdm9sbnVtcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlcmllc3ZvbG51bXMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VyaWVzdm9sbnVtcy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZXJpZXN2b2xudW1zLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VyaWVzdm9sbnVtcy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VyaWVzdm9sbnVtcy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNlcmllc3ZvbG51bXMubW9kdWxlIC0tPgogIDwhLS0gVm9sdW1lTnVtIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idm9sdW1lbnVtLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ2b2x1bWVudW0iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2b2x1bWVudW0uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygdm9sdW1lbnVtLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InZvbHVtZW51bS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InZvbHVtZW51bS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygdm9sdW1lbnVtLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygdm9sdW1lbnVtLm1vZHVsZSAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBlbmQgb2YgZG9jaW5mby5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBJbmxpbmUsIGxpbmssIGFuZCB1YmlxdWl0b3VzIGVsZW1lbnRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gVGVjaG5pY2FsIGFuZCBjb21wdXRlciB0ZXJtcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYWNjZWwucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImFjY2VsIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhY2NlbC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBhY2NlbC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhY2NlbC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFjY2VsLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhY2NlbC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGFjY2VsLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYWN0aW9uLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhY3Rpb24iIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhY3Rpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYWN0aW9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFjdGlvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWN0aW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhY3Rpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhY3Rpb24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcHBsaWNhdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXBwbGljYXRpb24iIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhcHBsaWNhdGlvbi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBhcHBsaWNhdGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcHBsaWNhdGlvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJoYXJkd2FyZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzb2Z0d2FyZSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhcHBsaWNhdGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYXBwbGljYXRpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhcHBsaWNhdGlvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNsYXNzbmFtZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY2xhc3NuYW1lIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjbGFzc25hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY2xhc3NuYW1lLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNsYXNzbmFtZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNsYXNzbmFtZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY2xhc3NuYW1lLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY2xhc3NuYW1lLm1vZHVsZSAtLT4KICA8IS0tCiAgICBDTyBpcyBhIGNhbGxvdXQgYXJlYSBvZiB0aGUgTGluZUNvbHVtbiB1bml0IHR5cGUgKGEgc2luZ2xlIGNoYXJhY3RlcgogICAgcG9zaXRpb24pOyB0aGUgcG9zaXRpb24gaXMgZGlyZWN0bHkgaW5kaWNhdGVkIGJ5IHRoZSBsb2NhdGlvbiBvZiBDTy4KICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY28ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY28uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY28uZWxlbWVudCAtLT4KICA8IS0tIGJ1ZyBudW1iZXIvc3ltYm9sIG92ZXJyaWRlIG9yIGluaXRpYWxpemF0aW9uIC0tPgogIDwhLS0gdG8gYW55IHJlbGF0ZWQgaW5mb3JtYXRpb24gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rZW5kcy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImlkcmVxLmNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvLm1vZHVsZSAtLT4KICA8IS0tIENPUkVGIGlzIGEgcmVmZXJlbmNlIHRvIGEgQ08gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvcmVmLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb3JlZiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvcmVmLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvcmVmLmVsZW1lbnQgLS0+CiAgPCEtLSBidWcgbnVtYmVyL3N5bWJvbCBvdmVycmlkZSBvciBpbml0aWFsaXphdGlvbiAtLT4KICA8IS0tIHRvIGFueSByZWxhdGVkIGluZm9ybWF0aW9uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb3JlZi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlua2VuZHJlcS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvcmVmLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjb3JlZi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvcmVmLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29tbWFuZC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29tbWFuZCIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1hbmQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY29tbWFuZC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb21tYW5kLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tYW5kLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjb21tYW5kLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29tbWFuZC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbXB1dGVyb3V0cHV0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb21wdXRlcm91dHB1dCIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21wdXRlcm91dHB1dC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb21wdXRlcm91dHB1dC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb21wdXRlcm91dHB1dC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tcHV0ZXJvdXRwdXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvbXB1dGVyb3V0cHV0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29tcHV0ZXJvdXRwdXQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJkYXRhYmFzZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZGF0YWJhc2UiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJkYXRhYmFzZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBkYXRhYmFzZS5lbGVtZW50IC0tPgogIDwhLS0gQ2xhc3M6IFR5cGUgb2YgZGF0YWJhc2UgdGhlIGVsZW1lbnQgbmFtZXM7IG5vIGRlZmF1bHQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImRhdGFiYXNlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5hbWUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idGFibGUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZmllbGQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ia2V5MSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJrZXkyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlY29yZCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJkYXRhYmFzZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZGF0YWJhc2UuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBkYXRhYmFzZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVtYWlsLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJlbWFpbCIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVtYWlsLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGVtYWlsLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVtYWlsLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZW1haWwucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGVtYWlsLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZW1haWwubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlbnZhci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZW52YXIiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVudmFyLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGVudmFyLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVudmFyLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZW52YXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGVudmFyLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZW52YXIubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlcnJvcmNvZGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImVycm9yY29kZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZXJyb3Jjb2RlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGVycm9yY29kZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlcnJvcmNvZGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVycm9yY29kZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZXJyb3Jjb2RlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZXJyb3Jjb2RlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZXJyb3JuYW1lLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJlcnJvcm5hbWUiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVycm9ybmFtZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBlcnJvcm5hbWUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZXJyb3JuYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZXJyb3JuYW1lLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBlcnJvcm5hbWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBlcnJvcm5hbWUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlcnJvcnRleHQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImVycm9ydGV4dCIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZXJyb3J0ZXh0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGVycm9ydGV4dC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlcnJvcnRleHQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlcnJvcnRleHQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGVycm9ydGV4dC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGVycm9ydGV4dC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVycm9ydHlwZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZXJyb3J0eXBlIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlcnJvcnR5cGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZXJyb3J0eXBlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVycm9ydHlwZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVycm9ydHlwZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZXJyb3J0eXBlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZXJyb3J0eXBlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZmlsZW5hbWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImZpbGVuYW1lIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZmlsZW5hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZmlsZW5hbWUuZWxlbWVudCAtLT4KICA8IS0tIENsYXNzOiBUeXBlIG9mIGZpbGVuYW1lIHRoZSBlbGVtZW50IG5hbWVzOyBubyBkZWZhdWx0IC0tPgogIDwhLS0KICAgIFBhdGg6IFNlYXJjaCBwYXRoIChwb3NzaWJseSBzeXN0ZW0tc3BlY2lmaWMpIGluIHdoaWNoCiAgICBmaWxlIGNhbiBiZSBmb3VuZAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmaWxlbmFtZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJoZWFkZXJmaWxlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InBhcnRpdGlvbiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJkZXZpY2VmaWxlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxpYnJhcnlmaWxlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImRpcmVjdG9yeSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJleHRlbnNpb24iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic3ltbGluayIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwYXRoIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZpbGVuYW1lLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBmaWxlbmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGZpbGVuYW1lLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZnVuY3Rpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImZ1bmN0aW9uIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZnVuY3Rpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZnVuY3Rpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZnVuY3Rpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZ1bmN0aW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBmdW5jdGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGZ1bmN0aW9uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ3VpYnV0dG9uLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJndWlidXR0b24iIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFjY2VsIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJndWlidXR0b24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZ3VpYnV0dG9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imd1aWJ1dHRvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ3VpYnV0dG9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBndWlidXR0b24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBndWlidXR0b24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJndWlpY29uLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJndWlpY29uIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhY2NlbCIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ3VpaWNvbi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBndWlpY29uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imd1aWljb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imd1aWljb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGd1aWljb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBndWlpY29uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ3VpbGFiZWwucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Imd1aWxhYmVsIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhY2NlbCIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ3VpbGFiZWwuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZ3VpbGFiZWwuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ3VpbGFiZWwuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imd1aWxhYmVsLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBndWlsYWJlbC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGd1aWxhYmVsLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ3VpbWVudS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZ3VpbWVudSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYWNjZWwiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imd1aW1lbnUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZ3VpbWVudS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJndWltZW51LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJndWltZW51LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBndWltZW51LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZ3VpbWVudS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imd1aW1lbnVpdGVtLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJndWltZW51aXRlbSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYWNjZWwiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imd1aW1lbnVpdGVtLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGd1aW1lbnVpdGVtLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imd1aW1lbnVpdGVtLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJndWltZW51aXRlbS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZ3VpbWVudWl0ZW0uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBndWltZW51aXRlbS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imd1aXN1Ym1lbnUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Imd1aXN1Ym1lbnUiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFjY2VsIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJndWlzdWJtZW51LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGd1aXN1Ym1lbnUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ3Vpc3VibWVudS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ3Vpc3VibWVudS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZ3Vpc3VibWVudS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGd1aXN1Ym1lbnUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJoYXJkd2FyZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaGFyZHdhcmUiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJoYXJkd2FyZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBoYXJkd2FyZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJoYXJkd2FyZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaGFyZHdhcmUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGhhcmR3YXJlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaGFyZHdhcmUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbnRlcmZhY2Uucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImludGVyZmFjZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYWNjZWwiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImludGVyZmFjZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBpbnRlcmZhY2UuZWxlbWVudCAtLT4KICA8IS0tIENsYXNzOiBUeXBlIG9mIHRoZSBJbnRlcmZhY2UgaXRlbTsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW50ZXJmYWNlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbnRlcmZhY2Uucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGludGVyZmFjZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGludGVyZmFjZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImtleWNhcC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ia2V5Y2FwIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ia2V5Y2FwLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGtleWNhcC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJrZXljYXAuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImtleWNhcC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Yga2V5Y2FwLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Yga2V5Y2FwLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ia2V5Y29kZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ia2V5Y29kZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ia2V5Y29kZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBrZXljb2RlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImtleWNvZGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJrZXljb2RlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBrZXljb2RlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Yga2V5Y29kZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImtleWNvbWJvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJrZXljb21ibyIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ia2V5Y2FwIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJrZXljb21ibyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ia2V5c3ltIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtb3VzZWJ1dHRvbiIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ia2V5Y29tYm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Yga2V5Y29tYm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ia2V5Y29tYm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJrZXlhY3Rpb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImtleWNvbWJvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBrZXljb21iby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGtleWNvbWJvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ia2V5c3lzbS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ia2V5c3ltIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJrZXlzeW0uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Yga2V5c3ltLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImtleXN5bS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImtleXN5c20ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGtleXN5bS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGtleXN5bS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxpbmVhbm5vdGF0aW9uLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJsaW5lYW5ub3RhdGlvbiI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmVhbm5vdGF0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGxpbmVhbm5vdGF0aW9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxpbmVhbm5vdGF0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGluZWFubm90YXRpb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGxpbmVhbm5vdGF0aW9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbGluZWFubm90YXRpb24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsaXRlcmFsLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJsaXRlcmFsIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGl0ZXJhbC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBsaXRlcmFsLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxpdGVyYWwuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpdGVyYWwucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGxpdGVyYWwuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBsaXRlcmFsLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29uc3RhbnQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNvbnN0YW50IiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb25zdGFudC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb25zdGFudC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25zdGFudC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsaW1pdCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29uc3RhbnQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvbnN0YW50LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29uc3RhbnQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ2YXJuYW1lLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ2YXJuYW1lIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2YXJuYW1lLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHZhcm5hbWUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idmFybmFtZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InZhcm5hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHZhcm5hbWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB2YXJuYW1lLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibWFya3VwLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtYXJrdXAiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1hcmt1cC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtYXJrdXAuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibWFya3VwLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWFya3VwLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtYXJrdXAuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtYXJrdXAubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtZWRpYWxhYmVsLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtZWRpYWxhYmVsIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtZWRpYWxhYmVsLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1lZGlhbGFiZWwuZWxlbWVudCAtLT4KICA8IS0tIENsYXNzOiBUeXBlIG9mIG1lZGl1bSBuYW1lZCBieSB0aGUgZWxlbWVudDsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibWVkaWFsYWJlbC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjYXJ0cmlkZ2UiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2Ryb20iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZGlzayIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0YXBlIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtZWRpYWxhYmVsLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtZWRpYWxhYmVsLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbWVkaWFsYWJlbC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1lbnVjaG9pY2Uucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im1lbnVjaG9pY2UiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InNob3J0Y3V0Ii8+CiAgICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Imd1aWJ1dHRvbiIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJndWlpY29uIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Imd1aWxhYmVsIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Imd1aW1lbnUiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iZ3VpbWVudWl0ZW0iLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iZ3Vpc3VibWVudSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbnRlcmZhY2UiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWVudWNob2ljZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtZW51Y2hvaWNlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1lbnVjaG9pY2UuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1lbnVjaG9pY2Uucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1lbnVjaG9pY2UuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtZW51Y2hvaWNlLm1vZHVsZSAtLT4KICA8IS0tIFNlZSBhbHNvIEtleUNvbWJvIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzaG9ydGN1dC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2hvcnRjdXQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImtleWNhcCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ia2V5Y29tYm8iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImtleXN5bSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibW91c2VidXR0b24iLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNob3J0Y3V0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNob3J0Y3V0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNob3J0Y3V0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ia2V5YWN0aW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzaG9ydGN1dC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2hvcnRjdXQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzaG9ydGN1dC5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgbWVudWNob2ljZS5jb250ZW50Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibW91c2VidXR0b24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im1vdXNlYnV0dG9uIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3VzZWJ1dHRvbi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtb3VzZWJ1dHRvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtb3VzZWJ1dHRvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW91c2VidXR0b24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1vdXNlYnV0dG9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbW91c2VidXR0b24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtc2d0ZXh0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtc2d0ZXh0Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbXBvbmVudC5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNndGV4dC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtc2d0ZXh0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ3RleHQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2d0ZXh0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtc2d0ZXh0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbXNndGV4dC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9wdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ib3B0aW9uIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib3B0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG9wdGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvcHRpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvcHRpb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG9wdGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG9wdGlvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9wdGlvbmFsLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJvcHRpb25hbCIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9wdGlvbmFsLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG9wdGlvbmFsLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9wdGlvbmFsLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib3B0aW9uYWwucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG9wdGlvbmFsLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygb3B0aW9uYWwubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwYXJhbWV0ZXIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InBhcmFtZXRlciIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhcmFtZXRlci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwYXJhbWV0ZXIuZWxlbWVudCAtLT4KICA8IS0tIENsYXNzOiBUeXBlIG9mIHRoZSBQYXJhbWV0ZXI7IG5vIGRlZmF1bHQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBhcmFtZXRlci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjb21tYW5kIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImZ1bmN0aW9uIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im9wdGlvbiIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYXJhbWV0ZXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHBhcmFtZXRlci5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHBhcmFtZXRlci5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByb21wdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icHJvbXB0IiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjbyIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJvbXB0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHByb21wdC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcm9tcHQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByb21wdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcHJvbXB0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcHJvbXB0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJvcGVydHkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InByb3BlcnR5IiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJvcGVydHkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcHJvcGVydHkuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJvcGVydHkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByb3BlcnR5LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwcm9wZXJ0eS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHByb3BlcnR5Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVwbGFjZWFibGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlcGxhY2VhYmxlIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im9wdGlvbmFsIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iYmFzZS5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ib3RoZXIuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lZ3JhcGhpYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lbWVkaWFvYmplY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXBsYWNlYWJsZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZXBsYWNlYWJsZS5lbGVtZW50IC0tPgogIDwhLS0KICAgIENsYXNzOiBUeXBlIG9mIGluZm9ybWF0aW9uIHRoZSBlbGVtZW50IHJlcHJlc2VudHM7IG5vCiAgICBkZWZhdWx0CiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlcGxhY2VhYmxlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNvbW1hbmQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZnVuY3Rpb24iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3B0aW9uIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InBhcmFtZXRlciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVwbGFjZWFibGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlcGxhY2VhYmxlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVwbGFjZWFibGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZXR1cm52YWx1ZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmV0dXJudmFsdWUiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJldHVybnZhbHVlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJldHVybnZhbHVlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJldHVybnZhbHVlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmV0dXJudmFsdWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJldHVybnZhbHVlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmV0dXJudmFsdWUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZ21sdGFnLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZ21sdGFnIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZ21sdGFnLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNnbWx0YWcuZWxlbWVudCAtLT4KICA8IS0tIENsYXNzOiBUeXBlIG9mIFNHTUwgY29uc3RydWN0IHRoZSBlbGVtZW50IG5hbWVzOyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZ21sdGFnLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImF0dHJpYnV0ZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJhdHR2YWx1ZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJlbGVtZW50Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImVuZHRhZyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJlbXB0eXRhZyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJnZW5lbnRpdHkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibnVtY2hhcnJlZiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwYXJhbWVudGl0eSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwaSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ4bWxwaSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzdGFydHRhZyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZ21sY29tbWVudCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2dtbHRhZy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2dtbHRhZy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNnbWx0YWcubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdHJ1Y3RmaWVsZC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3RydWN0ZmllbGQiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0cnVjdGZpZWxkLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN0cnVjdGZpZWxkLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN0cnVjdGZpZWxkLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RydWN0ZmllbGQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN0cnVjdGZpZWxkLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc3RydWN0ZmllbGQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdHJ1Y3RuYW1lLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzdHJ1Y3RuYW1lIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdHJ1Y3RuYW1lLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN0cnVjdG5hbWUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3RydWN0bmFtZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0cnVjdG5hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN0cnVjdG5hbWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzdHJ1Y3RuYW1lLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3ltYm9sLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzeW1ib2wiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN5bWJvbC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzeW1ib2wuZWxlbWVudCAtLT4KICA8IS0tIENsYXNzOiBUeXBlIG9mIHN5bWJvbDsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3ltYm9sLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxpbWl0Ii8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzeW1ib2wucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN5bWJvbC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHN5bWJvbC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN5c3RlbWl0ZW0ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InN5c3RlbWl0ZW0iIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhY3JvbnltIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjbyIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3lzdGVtaXRlbS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzeXN0ZW1pdGVtLmVsZW1lbnQgLS0+CiAgPCEtLSBDbGFzczogVHlwZSBvZiBzeXN0ZW0gaXRlbSB0aGUgZWxlbWVudCBuYW1lczsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3lzdGVtaXRlbS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjb25zdGFudCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJldmVudCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJldmVudGhhbmRsZXIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZG9tYWlubmFtZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJmcWRvbWFpbm5hbWUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaXBhZGRyZXNzIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5ldG1hc2siLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZXRoZXJhZGRyZXNzIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imdyb3VwbmFtZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsaWJyYXJ5Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im1hY3JvIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im9zbmFtZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJmaWxlc3lzdGVtIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlc291cmNlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InN5c3RlbW5hbWUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idXNlcm5hbWUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibmV3c2dyb3VwIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN5c3RlbWl0ZW0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN5c3RlbWl0ZW0uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzeXN0ZW1pdGVtLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9rZW4ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRva2VuIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0b2tlbi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0b2tlbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2tlbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRva2VuLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0b2tlbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHRva2VuLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idHlwZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idHlwZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idHlwZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0eXBlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InR5cGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0eXBlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0eXBlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdHlwZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InVzZXJpbnB1dC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idXNlcmlucHV0IiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iY3B0ci5jaGFyLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY28iLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InVzZXJpbnB1dC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB1c2VyaW5wdXQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idXNlcmlucHV0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ1c2VyaW5wdXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHVzZXJpbnB1dC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHVzZXJpbnB1dC5tb2R1bGUgLS0+CiAgPCEtLSBHZW5lcmFsIHdvcmRzIGFuZCBwaHJhc2VzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhYmJyZXYucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImFiYnJldiIgc3Vic3RpdHV0aW9uR3JvdXA9Imdlbi5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9IndvcmQuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWJicmV2LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFiYnJldi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhYmJyZXYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhYmJyZXYucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGFiYnJldi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGFiYnJldi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFjcm9ueW0ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImFjcm9ueW0iIHN1YnN0aXR1dGlvbkdyb3VwPSJnZW4uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ3b3JkLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFjcm9ueW0uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYWNyb255bS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhY3JvbnltLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWNyb255bS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYWNyb255bS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGFjcm9ueW0ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjaXRhdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY2l0YXRpb24iIHN1YnN0aXR1dGlvbkdyb3VwPSJnZW4uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNpdGF0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNpdGF0aW9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNpdGF0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2l0YXRpb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNpdGF0aW9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY2l0YXRpb24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjaXRlcmVmZW50cnkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNpdGVyZWZlbnRyeSIgc3Vic3RpdHV0aW9uR3JvdXA9Imdlbi5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icmVmZW50cnl0aXRsZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJtYW52b2xudW0iLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2l0ZXJlZmVudHJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNpdGVyZWZlbnRyeS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjaXRlcmVmZW50cnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjaXRlcmVmZW50cnkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNpdGVyZWZlbnRyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNpdGVyZWZlbnRyeS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZmVudHJ5dGl0bGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlZmVudHJ5dGl0bGUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZlbnRyeXRpdGxlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZmVudHJ5dGl0bGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmZW50cnl0aXRsZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZmVudHJ5dGl0bGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZmVudHJ5dGl0bGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZlbnRyeXRpdGxlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibmFtdm9sbnVtLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtYW52b2xudW0iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0id29yZC5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtYW52b2xudW0uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbWFudm9sbnVtLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1hbnZvbG51bS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im5hbXZvbG51bS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbWFudm9sbnVtLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbWFudm9sbnVtLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2l0ZXRpdGxlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjaXRldGl0bGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJnZW4uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNpdGV0aXRsZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjaXRldGl0bGUuZWxlbWVudCAtLT4KICA8IS0tIFB1Yndvcms6IEdlbnJlIG9mIHB1Ymxpc2hlZCB3b3JrIGNpdGVkOyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjaXRldGl0bGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InB1YndvcmsiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJhcnRpY2xlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImJvb2siLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2hhcHRlciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwYXJ0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlZmVudHJ5Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3Rpb24iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iam91cm5hbCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZXJpZXMiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im1hbnVzY3JpcHQiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNpdGV0aXRsZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY2l0ZXRpdGxlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY2l0ZXRpdGxlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZW1waGFzaXMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImVtcGhhc2lzIiBzdWJzdGl0dXRpb25Hcm91cD0iZ2VuLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlbXBoYXNpcy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBlbXBoYXNpcy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlbXBoYXNpcy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVtcGhhc2lzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBlbXBoYXNpcy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGVtcGhhc2lzLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZmlyc3R0ZXJtLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJmaXJzdHRlcm0iIHN1YnN0aXR1dGlvbkdyb3VwPSJnZW4uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ3b3JkLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZpcnN0dGVybS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBmaXJzdHRlcm0uZWxlbWVudCAtLT4KICA8IS0tIHRvIEdsb3NzRW50cnkgb3Igb3RoZXIgZXhwbGFuYXRpb24gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZpcnN0dGVybS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmtlbmQuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmaXJzdHRlcm0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGZpcnN0dGVybS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGZpcnN0dGVybS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZvcmVpZ25waHJhc2Uucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImZvcmVpZ25waHJhc2UiIHN1YnN0aXR1dGlvbkdyb3VwPSJnZW4uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZvcmVpZ25waHJhc2UuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZm9yZWlnbnBocmFzZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmb3JlaWducGhyYXNlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZm9yZWlnbnBocmFzZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZm9yZWlnbnBocmFzZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGZvcmVpZ25waHJhc2UubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJnbG9zc3Rlcm0ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Imdsb3NzdGVybSIgc3Vic3RpdHV0aW9uR3JvdXA9Imdlbi5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3N0ZXJtLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGdsb3NzdGVybS5lbGVtZW50IC0tPgogIDwhLS0gdG8gR2xvc3NFbnRyeSBpZiBHbG9zc3Rlcm0gdXNlZCBpbiB0ZXh0IC0tPgogIDwhLS0KICAgIEJhc2VGb3JtOiBQcm92aWRlcyB0aGUgZm9ybSBvZiBHbG9zc1Rlcm0gdG8gYmUgdXNlZAogICAgZm9yIGluZGV4aW5nCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3NzdGVybS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmtlbmQuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImJhc2Vmb3JtIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJnbG9zc3Rlcm0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGdsb3NzdGVybS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGdsb3NzdGVybS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBocmFzZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icGhyYXNlIiBzdWJzdGl0dXRpb25Hcm91cD0iZ2VuLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwaHJhc2UuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcGhyYXNlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBocmFzZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBocmFzZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcGhyYXNlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcGhyYXNlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icXVvdGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InF1b3RlIiBzdWJzdGl0dXRpb25Hcm91cD0iZ2VuLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJxdW90ZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBxdW90ZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJxdW90ZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InF1b3RlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBxdW90ZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHF1b3RlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3NzY3JpcHQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InN1YnNjcmlwdCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluay5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlbXBoYXNpcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icmVwbGFjZWFibGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN5bWJvbCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lZ3JhcGhpYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lbWVkaWFvYmplY3QiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJiYXNlLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJvdGhlci5jaGFyLmNsYXNzIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdWJzY3JpcHQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc3Vic2NyaXB0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN1YnNjcmlwdC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNzc2NyaXB0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzdWJzY3JpcHQuYXR0bGlzdCAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJzdXBlcnNjcmlwdCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluay5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlbXBoYXNpcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icmVwbGFjZWFibGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN5bWJvbCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lZ3JhcGhpYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lbWVkaWFvYmplY3QiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJiYXNlLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJvdGhlci5jaGFyLmNsYXNzIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdXBlcnNjcmlwdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzdXBlcnNjcmlwdC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdXBlcnNjcmlwdC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNzc2NyaXB0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzdXBlcnNjcmlwdC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNzc2NyaXB0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idHJhZGVtYXJrLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0cmFkZW1hcmsiIHN1YnN0aXR1dGlvbkdyb3VwPSJnZW4uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluay5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0ZWNoLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJiYXNlLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJvdGhlci5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmxpbmVncmFwaGljIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmxpbmVtZWRpYW9iamVjdCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZW1waGFzaXMiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRyYWRlbWFyay5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0cmFkZW1hcmsuZWxlbWVudCAtLT4KICA8IS0tIENsYXNzOiBNb3JlIHByZWNpc2VseSBpZGVudGlmaWVzIHRoZSBpdGVtIHRoZSBlbGVtZW50IG5hbWVzIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0cmFkZW1hcmsuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNsYXNzIiBkZWZhdWx0PSJ0cmFkZSI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlcnZpY2UiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idHJhZGUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVnaXN0ZXJlZCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjb3B5cmlnaHQiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRyYWRlbWFyay5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdHJhZGVtYXJrLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdHJhZGVtYXJrLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0id29yZGFzd29yZC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0id29yZGFzd29yZCIgc3Vic3RpdHV0aW9uR3JvdXA9Imdlbi5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9IndvcmQuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0id29yZGFzd29yZC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB3b3JkYXN3b3JkLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IndvcmRhc3dvcmQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ3b3JkYXN3b3JkLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB3b3JkYXN3b3JkLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygd29yZGFzd29yZC5tb2R1bGUgLS0+CiAgPCEtLSBMaW5rcyBhbmQgY3Jvc3MtcmVmZXJlbmNlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsaW5rLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJsaW5rIiBzdWJzdGl0dXRpb25Hcm91cD0ibGluay5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGluay5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBsaW5rLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgRW5kdGVybTogSUQgb2YgZWxlbWVudCBjb250YWluaW5nIHRleHQgdGhhdCBpcyB0byBiZQogICAgZmV0Y2hlZCBmcm9tIGVsc2V3aGVyZSBpbiB0aGUgZG9jdW1lbnQgdG8gYXBwZWFyIGFzCiAgICB0aGUgY29udGVudCBvZiB0aGlzIGVsZW1lbnQKICAtLT4KICA8IS0tIHRvIGxpbmtlZC10byBvYmplY3QgLS0+CiAgPCEtLSBUeXBlOiBGcmVlbHkgYXNzaWduYWJsZSBwYXJhbWV0ZXIgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxpbmsuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImVuZHRlcm0iIHR5cGU9InhzOklEUkVGIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rZW5kcmVxLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBsaW5rLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbGluay5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9saW5rLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJvbGluayIgc3Vic3RpdHV0aW9uR3JvdXA9ImxpbmsuY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9saW5rLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG9saW5rLmVsZW1lbnQgLS0+CiAgPCEtLSBUYXJnZXREb2NFbnQ6IE5hbWUgb2YgYW4gZW50aXR5IHRvIGJlIHRoZSB0YXJnZXQgb2YgdGhlIGxpbmsgLS0+CiAgPCEtLQogICAgTGlua01vZGU6IElEIG9mIGEgTW9kZVNwZWMgY29udGFpbmluZyBpbnN0cnVjdGlvbnMgZm9yCiAgICBvcGVyYXRpbmcgb24gdGhlIGVudGl0eSBuYW1lZCBieSBUYXJnZXREb2NFbnQKICAtLT4KICA8IS0tIExvY2FsSW5mbzogSW5mb3JtYXRpb24gdGhhdCBtYXkgYmUgcGFzc2VkIHRvIE1vZGVTcGVjIC0tPgogIDwhLS0gVHlwZTogRnJlZWx5IGFzc2lnbmFibGUgcGFyYW1ldGVyIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvbGluay5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idGFyZ2V0ZG9jZW50IiB0eXBlPSJ4czpFTlRJVFkiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGlua21vZGUiIHR5cGU9InhzOklEUkVGIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImxvY2FsaW5mbyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InRhcmdldGRvYyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0YXJnZXRwdHIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9saW5rLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBvbGluay5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG9saW5rLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idWxpbmsucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InVsaW5rIiBzdWJzdGl0dXRpb25Hcm91cD0ibGluay5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idWxpbmsuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdWxpbmsuZWxlbWVudCAtLT4KICA8IS0tIFVSTDogdW5pZm9ybSByZXNvdXJjZSBsb2NhdG9yOyB0aGUgdGFyZ2V0IG9mIHRoZSBVTGluayAtLT4KICA8IS0tIFR5cGU6IEZyZWVseSBhc3NpZ25hYmxlIHBhcmFtZXRlciAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idWxpbmsuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InVybCIgdXNlPSJyZXF1aXJlZCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ1bGluay5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdWxpbmsuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB1bGluay5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZvb3Rub3RlcmVmLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJmb290bm90ZXJlZiIgc3Vic3RpdHV0aW9uR3JvdXA9InhyZWYuY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZvb3Rub3RlcmVmLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGZvb3Rub3RlcmVmLmVsZW1lbnQgLS0+CiAgPCEtLSB0byBmb290bm90ZSBjb250ZW50IHN1cHBsaWVkIGVsc2V3aGVyZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZm9vdG5vdGVyZWYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rZW5kcmVxLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmb290bm90ZXJlZi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZm9vdG5vdGVyZWYuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBmb290bm90ZXJlZi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InhyZWYucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InhyZWYiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4cmVmLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ4cmVmLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHhyZWYuZWxlbWVudCAtLT4KICA8IS0tCiAgICBFbmR0ZXJtOiBJRCBvZiBlbGVtZW50IGNvbnRhaW5pbmcgdGV4dCB0aGF0IGlzIHRvIGJlCiAgICBmZXRjaGVkIGZyb20gZWxzZXdoZXJlIGluIHRoZSBkb2N1bWVudCB0byBhcHBlYXIgYXMKICAgIHRoZSBjb250ZW50IG9mIHRoaXMgZWxlbWVudAogIC0tPgogIDwhLS0gdG8gbGlua2VkLXRvIG9iamVjdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ieHJlZi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZW5kdGVybSIgdHlwZT0ieHM6SURSRUYiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmtlbmRyZXEuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ4cmVmLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB4cmVmLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgeHJlZi5tb2R1bGUgLS0+CiAgPCEtLSBVYmlxdWl0b3VzIGVsZW1lbnRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhbmNob3Iucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImFuY2hvciI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFuY2hvci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBhbmNob3IuZWxlbWVudCAtLT4KICA8IS0tIHJlcXVpcmVkIC0tPgogIDwhLS0gcmVwbGFjZXMgTGFuZyAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYW5jaG9yLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaWRyZXEuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYWdlbnVtLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVtYXAuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ4cmVmbGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXZpc2lvbmZsYWcuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlZmZlY3Rpdml0eS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFuY2hvci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYW5jaG9yLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYW5jaG9yLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmVnaW5wYWdlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJiZWdpbnBhZ2UiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiZWdpbnBhZ2UuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYmVnaW5wYWdlLmVsZW1lbnQgLS0+CiAgPCEtLSBQYWdlTnVtOiBOdW1iZXIgb2YgcGFnZSB0aGF0IGJlZ2lucyBhdCB0aGlzIHBvaW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiZWdpbnBhZ2UuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYWdlbnVtLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmVnaW5wYWdlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBiZWdpbnBhZ2UuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBiZWdpbnBhZ2UubW9kdWxlIC0tPgogIDwhLS0KICAgIEluZGV4VGVybXMgYXBwZWFyIGluIHRoZSB0ZXh0IGZsb3cgZm9yIGdlbmVyYXRpbmcgb3IgbGlua2luZyBhbgogICAgaW5kZXguCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImluZGV4dGVybS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW5kZXh0ZXJtIiBzdWJzdGl0dXRpb25Hcm91cD0ibmR4dGVybS5jbGFzcyIvPgogIDwhLS0gZW5kIG9mIGluZGV4dGVybS5lbGVtZW50IC0tPgogIDwhLS0KICAgIFNjb3BlOiBJbmRpY2F0ZXMgd2hpY2ggZ2VuZXJhdGVkIGluZGljZXMgdGhlIEluZGV4VGVybQogICAgc2hvdWxkIGFwcGVhciBpbjogR2xvYmFsICh3aG9sZSBkb2N1bWVudCBzZXQpLCBMb2NhbCAodGhpcwogICAgZG9jdW1lbnQgb25seSksIG9yIEFsbCAoYm90aCkKICAtLT4KICA8IS0tCiAgICBTaWduaWZpY2FuY2U6IFdoZXRoZXIgdGhpcyBJbmRleFRlcm0gaXMgdGhlIG1vc3QgcGVydGluZW50CiAgICBvZiBpdHMgc2VyaWVzIChQcmVmZXJyZWQpIG9yIG5vdCAoTm9ybWFsLCB0aGUgZGVmYXVsdCkKICAtLT4KICA8IS0tCiAgICBDbGFzczogSW5kaWNhdGVzIHR5cGUgb2YgSW5kZXhUZXJtOyBkZWZhdWx0IGlzIFNpbmd1bGFyLAogICAgb3IgRW5kT2ZSYW5nZSBpZiBTdGFydFJlZiBpcyBzdXBwbGllZDsgU3RhcnRPZlJhbmdlIHZhbHVlCiAgICBtdXN0IGJlIHN1cHBsaWVkIGV4cGxpY2l0bHkgb24gc3RhcnRzIG9mIHJhbmdlcwogIC0tPgogIDwhLS0KICAgIFN0YXJ0UmVmOiBJRCBvZiB0aGUgSW5kZXhUZXJtIHRoYXQgc3RhcnRzIHRoZSBpbmRleGluZwogICAgcmFuZ2UgZW5kZWQgYnkgdGhpcyBJbmRleFRlcm0KICAtLT4KICA8IS0tCiAgICBab25lOiBJRHMgb2YgdGhlIGVsZW1lbnRzIHRvIHdoaWNoIHRoZSBJbmRleFRlcm0gYXBwbGllcywKICAgIGFuZCBpbmRpY2F0ZXMgdGhhdCB0aGUgSW5kZXhUZXJtIGFwcGxpZXMgdG8gdGhvc2UgZW50aXJlCiAgICBlbGVtZW50cyByYXRoZXIgdGhhbiB0aGUgcG9pbnQgYXQgd2hpY2ggdGhlIEluZGV4VGVybQogICAgb2NjdXJzCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImluZGV4dGVybS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhZ2VudW0uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNjb3BlIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYWxsIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imdsb2JhbCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsb2NhbCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzaWduaWZpY2FuY2UiIGRlZmF1bHQ9Im5vcm1hbCI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InByZWZlcnJlZCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJub3JtYWwiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzaW5ndWxhciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzdGFydG9mcmFuZ2UiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZW5kb2ZyYW5nZSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzdGFydHJlZiIgdHlwZT0ieHM6SURSRUYiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iem9uZSIgdHlwZT0ieHM6SURSRUZTIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmRleHRlcm0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGluZGV4dGVybS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGluZGV4dGVybS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByaW1zZWN0ZXIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InByaW1hcnkiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmR4dGVybS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcmltYXJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHByaW1hcnkuZWxlbWVudCAtLT4KICA8IS0tCiAgICBTb3J0QXM6IEFsdGVybmF0ZSBzb3J0IHN0cmluZyBmb3IgaW5kZXggc29ydGluZywgZS5nLiwKICAgICJmb3VydGVlbiIgZm9yIGFuIGVsZW1lbnQgY29udGFpbmluZyAiMTQiCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByaW1hcnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNvcnRhcyIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJpbXNlY3Rlci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcHJpbWFyeS5hdHRsaXN0IC0tPgogIDx4czplbGVtZW50IG5hbWU9InNlY29uZGFyeSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY29uZGFyeS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWNvbmRhcnkuZWxlbWVudCAtLT4KICA8IS0tCiAgICBTb3J0QXM6IEFsdGVybmF0ZSBzb3J0IHN0cmluZyBmb3IgaW5kZXggc29ydGluZywgZS5nLiwKICAgICJmb3VydGVlbiIgZm9yIGFuIGVsZW1lbnQgY29udGFpbmluZyAiMTQiCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY29uZGFyeS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic29ydGFzIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcmltc2VjdGVyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWNvbmRhcnkuYXR0bGlzdCAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0ZXJ0aWFyeSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRlcnRpYXJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRlcnRpYXJ5LmVsZW1lbnQgLS0+CiAgPCEtLQogICAgU29ydEFzOiBBbHRlcm5hdGUgc29ydCBzdHJpbmcgZm9yIGluZGV4IHNvcnRpbmcsIGUuZy4sCiAgICAiZm91cnRlZW4iIGZvciBhbiBlbGVtZW50IGNvbnRhaW5pbmcgIjE0IgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0ZXJ0aWFyeS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic29ydGFzIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcmltc2VjdGVyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0ZXJ0aWFyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHByaW1zZWN0ZXIubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWVzZWVhbHNvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmR4dGVybS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlZXNlZWFsc28ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlZS5hdHRsaXN0IC0tPgogIDx4czplbGVtZW50IG5hbWU9InNlZWFsc28iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmR4dGVybS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWVhbHNvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlZWFsc28uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VlYWxzby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlZXNlZWFsc28ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgo8L3hzOnNjaGVtYT4KPCEtLSBlbmQgb2Ygc2VlYWxzby5hdHRsaXN0IC0tPgo8IS0tIGVuZCBvZiBzZWVzZWVhbHNvLm1vZHVsZSAtLT4KPCEtLSBlbmQgb2YgaW5kZXh0ZXJtLmNvbnRlbnQubW9kdWxlIC0tPgo8IS0tIEVuZCBvZiBEb2NCb29rIFhNTCBpbmZvcm1hdGlvbiBwb29sIG1vZHVsZSBWNC4yIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4K</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Docbook/4_3/docbook.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIERvY0Jvb2sgWE1MIERURCBWNC4yIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRmlsZSBkb2Nib29reC5kdGQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIENvcHlyaWdodCAxOTkyLTIwMDIgSGFMIENvbXB1dGVyIFN5c3RlbXMsIEluYy4sCiAgTydSZWlsbHkgJiBBc3NvY2lhdGVzLCBJbmMuLCBBcmJvclRleHQsIEluYy4sIEZ1aml0c3UgU29mdHdhcmUKICBDb3Jwb3JhdGlvbiwgTm9ybWFuIFdhbHNoLCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCBhbmQgdGhlCiAgT3JnYW5pemF0aW9uIGZvciB0aGUgQWR2YW5jZW1lbnQgb2YgU3RydWN0dXJlZCBJbmZvcm1hdGlvbgogIFN0YW5kYXJkcyAoT0FTSVMpLgogIAogICRJZDogZG9jYm9va3guZHRkLHYgMS4xMyAyMDAyLzA3LzE3IDE1OjI2OjE2IG53YWxzaCBFeHAgJAogIAogIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY0Jvb2sgWE1MIERURAogIGFuZCBpdHMgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZQogIGlzIGhlcmVieSBncmFudGVkIGluIHBlcnBldHVpdHksIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAogIG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggYXBwZWFyIGluIGFsbCBjb3BpZXMuICBUaGUgY29weXJpZ2h0CiAgaG9sZGVycyBtYWtlIG5vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGUgRFREIGZvcgogIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3NlZCBvciBpbXBsaWVkCiAgd2FycmFudHkuCiAgCiAgSWYgeW91IG1vZGlmeSB0aGUgRG9jQm9vayBEVEQgaW4gYW55IHdheSwgZXhjZXB0IGZvciBkZWNsYXJpbmcgYW5kCiAgcmVmZXJlbmNpbmcgYWRkaXRpb25hbCBzZXRzIG9mIGdlbmVyYWwgZW50aXRpZXMgYW5kIGRlY2xhcmluZwogIGFkZGl0aW9uYWwgbm90YXRpb25zLCBsYWJlbCB5b3VyIERURCBhcyBhIHZhcmlhbnQgb2YgRG9jQm9vay4gIFNlZQogIHRoZSBtYWludGVuYW5jZSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIAogIFBsZWFzZSBkaXJlY3QgYWxsIHF1ZXN0aW9ucywgYnVnIHJlcG9ydHMsIG9yIHN1Z2dlc3Rpb25zIGZvcgogIGNoYW5nZXMgdG8gdGhlIGRvY2Jvb2tAbGlzdHMub2FzaXMtb3Blbi5vcmcgbWFpbGluZyBsaXN0LiBGb3IgbW9yZQogIGluZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rLy4KLS0+CjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIFRoaXMgaXMgdGhlIGRyaXZlciBmaWxlIGZvciBWNC4yIG9mIHRoZSBEb2NCb29rIERURC4KICBQbGVhc2UgdXNlIHRoZSBmb2xsb3dpbmcgZm9ybWFsIHB1YmxpYyBpZGVudGlmaWVyIHRvIGlkZW50aWZ5IGl0OgogIAogICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgogIAogIEZvciBleGFtcGxlLCBpZiB5b3VyIGRvY3VtZW50J3MgdG9wLWxldmVsIGVsZW1lbnQgaXMgQm9vaywgYW5kCiAgeW91IGFyZSB1c2luZyBEb2NCb29rIGRpcmVjdGx5LCB1c2UgdGhlIEZQSSBpbiB0aGUgRE9DVFlQRQogIGRlY2xhcmF0aW9uOgogIAogIDwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgogICAgICAgICAgICAgICAgIFsuLi5dPgogIAogIE9yLCBpZiB5b3UgaGF2ZSBhIGhpZ2hlci1sZXZlbCBkcml2ZXIgZmlsZSB0aGF0IGN1c3RvbWl6ZXMgRG9jQm9vaywKICB1c2UgdGhlIEZQSSBpbiB0aGUgcGFyYW1ldGVyIGVudGl0eSBkZWNsYXJhdGlvbjoKICAKICA8IUVOVElUWSAlIERvY0Jvb2tEVEQgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgogICAgICAgICAgICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCI+CiAgJURvY0Jvb2tEVEQ7CiAgCiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgcGFyYW1ldGVyCiAgZW50aXR5IGFuZCBtb2R1bGUgc2NoZW1lIHVzZWQgaW4gRG9jQm9vaywgY3VzdG9taXppbmcgRG9jQm9vayBhbmQKICBwbGFubmluZyBmb3IgaW50ZXJjaGFuZ2UsIGFuZCBjaGFuZ2VzIG1hZGUgc2luY2UgdGhlIGxhc3QgcmVsZWFzZQogIG9mIERvY0Jvb2suCi0tPgo8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRW5hYmxlIFNHTUwgZmVhdHVyZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIE5vdGF0aW9uIGRlY2xhcmF0aW9ucyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cjx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+CiAgPHhzOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249ImRibm90bngueHNkIi8+CiAgPHhzOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249ImRicG9vbHgueHNkIi8+CiAgPHhzOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249ImRiaGllcngueHNkIi8+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gSVNPIGNoYXJhY3RlciBlbnRpdHkgc2V0cyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIGV1cm8gc2lnbiwgVSsyMEFDIE5FVyAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBEVEQgbW9kdWxlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gSW5mb3JtYXRpb24gcG9vbCAuLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIFJlZGVjbGFyYXRpb24gcGxhY2Vob2xkZXIgLi4uLi4gLS0+CiAgPCEtLSBEb2N1bWVudCBoaWVyYXJjaHkgLi4uLi4uLi4uLi4uIC0tPgo8L3hzOnNjaGVtYT4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIE90aGVyIGdlbmVyYWwgZW50aXRpZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRW5kIG9mIERvY0Jvb2sgWE1MIERURCBWNC4yIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Docbook/4_4/calstblx.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIERvY0Jvb2sgQ0FMUyBUYWJsZSBNb2RlbCBWNC40IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRmlsZSBjYWxzdGJseC5tb2QgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIENvcHlyaWdodCAxOTkyLTIwMDIgSGFMIENvbXB1dGVyIFN5c3RlbXMsIEluYy4sCiAgTydSZWlsbHkgJiBBc3NvY2lhdGVzLCBJbmMuLCBBcmJvclRleHQsIEluYy4sIEZ1aml0c3UgU29mdHdhcmUKICBDb3Jwb3JhdGlvbiwgTm9ybWFuIFdhbHNoLCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCBhbmQgdGhlCiAgT3JnYW5pemF0aW9uIGZvciB0aGUgQWR2YW5jZW1lbnQgb2YgU3RydWN0dXJlZCBJbmZvcm1hdGlvbgogIFN0YW5kYXJkcyAoT0FTSVMpLgogIAogIFRoaXMgRFREIGlzIGJhc2VkIG9uIHRoZSBDQUxTIFRhYmxlIE1vZGVsCiAgUFVCTElDICItLy9VU0EtRE9ELy9EVEQgVGFibGUgTW9kZWwgOTUxMDEwLy9FTiIKICAKICAkSWQ6IGNhbHN0Ymx4LmR0ZCx2IDEuMjcgMjAwNS8wMS8yNyAxMzo1MjowMCBud2Fsc2ggRXhwICQKICAKICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIHRoZSBEb2NCb29rIERURAogIGFuZCBpdHMgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZQogIGlzIGhlcmVieSBncmFudGVkIGluIHBlcnBldHVpdHksIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAogIG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggYXBwZWFyIGluIGFsbCBjb3BpZXMuICBUaGUgY29weXJpZ2h0CiAgaG9sZGVycyBtYWtlIG5vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGUgRFREIGZvcgogIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3NlZCBvciBpbXBsaWVkCiAgd2FycmFudHkuCiAgCiAgSWYgeW91IG1vZGlmeSB0aGUgRG9jQm9vayBEVEQgaW4gYW55IHdheSwgZXhjZXB0IGZvciBkZWNsYXJpbmcgYW5kCiAgcmVmZXJlbmNpbmcgYWRkaXRpb25hbCBzZXRzIG9mIGdlbmVyYWwgZW50aXRpZXMgYW5kIGRlY2xhcmluZwogIGFkZGl0aW9uYWwgbm90YXRpb25zLCBsYWJlbCB5b3VyIERURCBhcyBhIHZhcmlhbnQgb2YgRG9jQm9vay4gIFNlZQogIHRoZSBtYWludGVuYW5jZSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIAogIFBsZWFzZSBkaXJlY3QgYWxsIHF1ZXN0aW9ucywgYnVnIHJlcG9ydHMsIG9yIHN1Z2dlc3Rpb25zIGZvcgogIGNoYW5nZXMgdG8gdGhlIGRvY2Jvb2tAbGlzdHMub2FzaXMtb3Blbi5vcmcgbWFpbGluZyBsaXN0LiBGb3IgbW9yZQogIGluZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rLy4KLS0+CjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIFRoaXMgbW9kdWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIENBTFMgVGFibGUgTW9kZWwKICBjb252ZXJ0ZWQgdG8gWE1MLiBJdCBoYXMgYmVlbiBtb2RpZmllZCBzbGlnaHRseSBmb3IgdXNlIGluIHRoZQogIGNvbWJpbmVkIEhUTUwvQ0FMUyBtb2RlbHMgc3VwcG9ydGVkIGJ5IERvY0Jvb2sgVjQuNC4KLS0+CjwhLS0KICBUaGVzZSBkZWZpbml0aW9ucyBhcmUgbm90IGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIHRhYmxlIG1vZGVsLCBidXQgYXJlCiAgdXNlZCBpbiB0aGUgZGVmYXVsdCBDQUxTIHRhYmxlIG1vZGVsIGFuZCBhcmUgdXN1YWxseSBkZWZpbmVkIGVsc2V3aGVyZQogIChhbmQgcHJpb3IgdG8gdGhlIGluY2x1c2lvbiBvZiB0aGlzIHRhYmxlIG1vZHVsZSkgaW4gYSBDQUxTIERURC4KLS0+CjwhLS0KICBubyBpZiB6ZXJvKHMpLAogIHllcyBpZiBhbnkgb3RoZXIgZGlnaXRzIHZhbHVlCi0tPgo8eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgogIDx4czppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiIHNjaGVtYUxvY2F0aW9uPSJ4bWwueHNkIi8+CiAgPHhzOnNpbXBsZVR5cGUgbmFtZT0ieWVzb3JubyI+CiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIi8+CiAgPC94czpzaW1wbGVUeXBlPgogIDx4czpncm91cCBuYW1lPSJ0aXRsZXMiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpncm91cD4KICA8IS0tIGRlZmF1bHQgZm9yIHVzZSBpbiBlbnRyeSBjb250ZW50IC0tPgogIDwhLS0KICAgIFRoZSBwYXJhbWV0ZXIgZW50aXRpZXMgYXMgZGVmaW5lZCBiZWxvdyBwcm92aWRlIHRoZSBDQUxTIHRhYmxlIG1vZGVsCiAgICBhcyBwdWJsaXNoZWQgKGFzIHBhcnQgb2YgdGhlIEV4YW1wbGUgRFREKSBpbiBNSUwtSERCSy0yODAwMS4KICAgIAogICAgVGhlc2UgZm9sbG93aW5nIGRlY2xhcmF0aW9ucyBwcm92aWRlIHRoZSBDQUxTLWNvbXBsaWFudCBkZWZhdWx0IGRlZmluaXRpb25zCiAgICBmb3IgdGhlc2UgZW50aXRpZXMuICBIb3dldmVyLCB0aGVzZSBlbnRpdGllcyBjYW4gYW5kIHNob3VsZCBiZSByZWRlZmluZWQKICAgIChieSBnaXZpbmcgdGhlIGFwcHJvcHJpYXRlIHBhcmFtZXRlciBlbnRpdHkgZGVjbGFyYXRpb24ocykgcHJpb3IgdG8gdGhlCiAgICByZWZlcmVuY2UgdG8gdGhpcyBUYWJsZSBNb2RlbCBkZWNsYXJhdGlvbiBzZXQgZW50aXR5KSB0byBmaXQgdGhlIG5lZWRzCiAgICBvZiB0aGUgY3VycmVudCBhcHBsaWNhdGlvbi4KICAtLT4KICA8eHM6Z3JvdXAgbmFtZT0idGJsLnRhYmxlLXRpdGxlcy5tZGwiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6Z3JvdXAgcmVmPSJ0aXRsZXMiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0idGJsLnRhYmxlLW1haW4ubWRsIj4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRncm91cCIvPgogICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJncmFwaGljIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0YmwudGdyb3VwLm1kbCI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29sc3BlYyIvPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNwYW5zcGVjIi8+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0aGVhZCIvPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGZvb3QiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0Ym9keSIvPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmNvbXBsZXhUeXBlPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0YmwudGdyb3VwLmF0dCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InRncm91cHN0eWxlIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idGJsLnJvdy5tZGwiPgogICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZW50cnkiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlbnRyeXRibCIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpjb21wbGV4VHlwZT4KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idGJsLmVudHJ5dGJsLm1kbCI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29sc3BlYyIvPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNwYW5zcGVjIi8+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0aGVhZCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InRib2R5Ii8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Y29tcGxleFR5cGU+CiAgPCEtLSA9PT09PSAgRWxlbWVudCBhbmQgYXR0cmlidXRlIGRlY2xhcmF0aW9ucyBmb2xsb3cuID09PT09IC0tPgogIDx4czplbGVtZW50IG5hbWU9InRhYmxlIiBzdWJzdGl0dXRpb25Hcm91cD0iZm9ybWFsLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNvbXBsZXhDb250ZW50PgogICAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idGJsLnRhYmxlLm1kbCI+CiAgICAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0YWJsZS5hdHRsaXN0Ii8+CiAgICAgICAgPC94czpleHRlbnNpb24+CiAgICAgIDwveHM6Y29tcGxleENvbnRlbnQ+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGFibGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZyYW1lIiB0eXBlPSJ0YmwuZnJhbWUuYXR0dmFsIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbHNlcCIgdHlwZT0ieWVzb3JubyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyb3dzZXAiIHR5cGU9Inllc29ybm8iLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRibC50YWJsZS5hdHQiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJvZHlhdHQiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3VyIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0Z3JvdXAiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Y29tcGxleENvbnRlbnQ+CiAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0YmwudGdyb3VwLm1kbCI+CiAgICAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0Z3JvdXAuYXR0bGlzdCIvPgogICAgICAgIDwveHM6ZXh0ZW5zaW9uPgogICAgICA8L3hzOmNvbXBsZXhDb250ZW50PgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRncm91cC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29scyIgdXNlPSJyZXF1aXJlZCIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGJsLnRncm91cC5hdHQiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29sc2VwIiB0eXBlPSJ5ZXNvcm5vIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJvd3NlcCIgdHlwZT0ieWVzb3JubyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxlZnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmlnaHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2VudGVyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imp1c3RpZnkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2hhciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjaGFyIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNoYXJvZmYiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3VyIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb2xzcGVjIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29sc3BlYy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29sc3BlYy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29sbnVtIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbG5hbWUiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29sd2lkdGgiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29sc2VwIiB0eXBlPSJ5ZXNvcm5vIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJvd3NlcCIgdHlwZT0ieWVzb3JubyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxlZnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmlnaHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2VudGVyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imp1c3RpZnkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2hhciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjaGFyIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNoYXJvZmYiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNwYW5zcGVjIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3BhbnNwZWMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNwYW5zcGVjLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lc3QiIHVzZT0icmVxdWlyZWQiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZWVuZCIgdXNlPSJyZXF1aXJlZCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzcGFubmFtZSIgdXNlPSJyZXF1aXJlZCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb2xzZXAiIHR5cGU9Inllc29ybm8iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icm93c2VwIiB0eXBlPSJ5ZXNvcm5vIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGVmdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyaWdodCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjZW50ZXIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ianVzdGlmeSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjaGFyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNoYXIiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2hhcm9mZiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idGhlYWQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Y29tcGxleENvbnRlbnQ+CiAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0YmwuaGRmdC5tZGwiPgogICAgICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGhlYWQuYXR0bGlzdCIvPgogICAgICAgIDwveHM6ZXh0ZW5zaW9uPgogICAgICA8L3hzOmNvbXBsZXhDb250ZW50PgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRoZWFkLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2YWxpZ24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0b3AiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibWlkZGxlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImJvdHRvbSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdXIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRmb290Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNvbXBsZXhDb250ZW50PgogICAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idGJsLmhkZnQubWRsIj4KICAgICAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRmb290LmF0dGxpc3QiLz4KICAgICAgICA8L3hzOmV4dGVuc2lvbj4KICAgICAgPC94czpjb21wbGV4Q29udGVudD4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0Zm9vdC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idmFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idG9wIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im1pZGRsZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJib3R0b20iLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3VyIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0Ym9keSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpjb21wbGV4Q29udGVudD4KICAgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRibC50Ym9keS5tZGwiPgogICAgICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGJvZHkuYXR0bGlzdCIvPgogICAgICAgIDwveHM6ZXh0ZW5zaW9uPgogICAgICA8L3hzOmNvbXBsZXhDb250ZW50PgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRib2R5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2YWxpZ24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0b3AiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibWlkZGxlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImJvdHRvbSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdXIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJvdyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpjb21wbGV4Q29udGVudD4KICAgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRibC5yb3cubWRsIj4KICAgICAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvdy5hdHRsaXN0Ii8+CiAgICAgICAgPC94czpleHRlbnNpb24+CiAgICAgIDwveHM6Y29tcGxleENvbnRlbnQ+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icm93LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyb3dzZXAiIHR5cGU9Inllc29ybm8iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idmFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idG9wIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im1pZGRsZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJib3R0b20iLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3VyIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJlbnRyeXRibCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpjb21wbGV4Q29udGVudD4KICAgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRibC5lbnRyeXRibC5tZGwiPgogICAgICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZW50cnl0YmwuYXR0bGlzdCIvPgogICAgICAgIDwveHM6ZXh0ZW5zaW9uPgogICAgICA8L3hzOmNvbXBsZXhDb250ZW50PgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVudHJ5dGJsLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb2xzIiB1c2U9InJlcXVpcmVkIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0YmwudGdyb3VwLmF0dCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb2xuYW1lIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNwYW5uYW1lIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWVzdCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lZW5kIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbHNlcCIgdHlwZT0ieWVzb3JubyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyb3dzZXAiIHR5cGU9Inllc29ybm8iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYWxpZ24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsZWZ0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJpZ2h0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNlbnRlciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJqdXN0aWZ5Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNoYXIiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2hhciIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjaGFyb2ZmIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN1ciIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZW50cnkiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idGJsLmVudHJ5Lm1kbCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlbnRyeS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZW50cnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbG5hbWUiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZXN0Ii8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWVlbmQiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3Bhbm5hbWUiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibW9yZXJvd3MiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29sc2VwIiB0eXBlPSJ5ZXNvcm5vIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJvd3NlcCIgdHlwZT0ieWVzb3JubyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxlZnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmlnaHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2VudGVyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imp1c3RpZnkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2hhciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjaGFyIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNoYXJvZmYiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icm90YXRlIiB0eXBlPSJ5ZXNvcm5vIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbGlnbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRvcCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJtaWRkbGUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYm90dG9tIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN1ciIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CjwveHM6c2NoZW1hPgo8IS0tIEVuZCBvZiBEb2NCb29rIENBTFMgVGFibGUgTW9kZWwgVjQuNCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4K</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Docbook/4_4/dbhierx.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIERvY0Jvb2sgZG9jdW1lbnQgaGllcmFyY2h5IG1vZHVsZSBWNC40IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRmlsZSBkYmhpZXJ4Lm1vZCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIENvcHlyaWdodCAxOTkyLTIwMDQgSGFMIENvbXB1dGVyIFN5c3RlbXMsIEluYy4sCiAgTydSZWlsbHkgJiBBc3NvY2lhdGVzLCBJbmMuLCBBcmJvclRleHQsIEluYy4sIEZ1aml0c3UgU29mdHdhcmUKICBDb3Jwb3JhdGlvbiwgTm9ybWFuIFdhbHNoLCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCBhbmQgdGhlCiAgT3JnYW5pemF0aW9uIGZvciB0aGUgQWR2YW5jZW1lbnQgb2YgU3RydWN0dXJlZCBJbmZvcm1hdGlvbgogIFN0YW5kYXJkcyAoT0FTSVMpLgogIAogICRJZDogZGJoaWVyeC5tb2QsdiAxLjM4IDIwMDUvMDEvMjcgMTM6NTI6MDAgbndhbHNoIEV4cCAkCiAgCiAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jQm9vayBEVEQKICBhbmQgaXRzIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUKICBpcyBoZXJlYnkgZ3JhbnRlZCBpbiBwZXJwZXR1aXR5LCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKICBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGFwcGVhciBpbiBhbGwgY29waWVzLiAgVGhlIGNvcHlyaWdodAogIGhvbGRlcnMgbWFrZSBubyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhlIERURCBmb3IKICBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzZWQgb3IgaW1wbGllZAogIHdhcnJhbnR5LgogIAogIElmIHlvdSBtb2RpZnkgdGhlIERvY0Jvb2sgRFREIGluIGFueSB3YXksIGV4Y2VwdCBmb3IgZGVjbGFyaW5nIGFuZAogIHJlZmVyZW5jaW5nIGFkZGl0aW9uYWwgc2V0cyBvZiBnZW5lcmFsIGVudGl0aWVzIGFuZCBkZWNsYXJpbmcKICBhZGRpdGlvbmFsIG5vdGF0aW9ucywgbGFiZWwgeW91ciBEVEQgYXMgYSB2YXJpYW50IG9mIERvY0Jvb2suICBTZWUKICB0aGUgbWFpbnRlbmFuY2UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAKICBQbGVhc2UgZGlyZWN0IGFsbCBxdWVzdGlvbnMsIGJ1ZyByZXBvcnRzLCBvciBzdWdnZXN0aW9ucyBmb3IKICBjaGFuZ2VzIHRvIHRoZSBkb2Nib29rQGxpc3RzLm9hc2lzLW9wZW4ub3JnIG1haWxpbmcgbGlzdC4gRm9yIG1vcmUKICBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay8uCi0tPgo8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0KICBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBvdmVyYWxsIGRvY3VtZW50CiAgaGllcmFyY2hpZXMgb2YgRG9jQm9vayBkb2N1bWVudHMuICBJdCBjb3ZlcnMgY29tcHV0ZXIgZG9jdW1lbnRhdGlvbgogIG1hbnVhbHMgYW5kIG1hbnVhbCBmcmFnbWVudHMsIGFzIHdlbGwgYXMgcmVmZXJlbmNlIGVudHJpZXMgKHN1Y2ggYXMKICBtYW4gcGFnZXMpIGFuZCB0ZWNobmljYWwgam91cm5hbHMgb3IgYW50aG9sb2dpZXMgY29udGFpbmluZwogIGFydGljbGVzLgogIAogIFRoaXMgbW9kdWxlIGRlcGVuZHMgb24gdGhlIERvY0Jvb2sgaW5mb3JtYXRpb24gcG9vbCBtb2R1bGUuICBBbGwKICBlbGVtZW50cyBhbmQgZW50aXRpZXMgcmVmZXJlbmNlZCBidXQgbm90IGRlZmluZWQgaGVyZSBhcmUgYXNzdW1lZAogIHRvIGJlIGRlZmluZWQgaW4gdGhlIGluZm9ybWF0aW9uIHBvb2wgbW9kdWxlLgogIAogIEluIERURCBkcml2ZXIgZmlsZXMgcmVmZXJyaW5nIHRvIHRoaXMgbW9kdWxlLCBwbGVhc2UgdXNlIGFuIGVudGl0eQogIGRlY2xhcmF0aW9uIHRoYXQgdXNlcyB0aGUgcHVibGljIGlkZW50aWZpZXIgc2hvd24gYmVsb3c6CiAgCiAgPCFFTlRJVFkgJSBkYmhpZXIgUFVCTElDCiAgIi0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIERvY3VtZW50IEhpZXJhcmNoeSBWNC40Ly9FTiIKICAiZGJoaWVyeC5tb2QiPgogICVkYmhpZXI7CiAgCiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgcGFyYW1ldGVyCiAgZW50aXR5IGFuZCBtb2R1bGUgc2NoZW1lIHVzZWQgaW4gRG9jQm9vaywgY3VzdG9taXppbmcgRG9jQm9vayBhbmQKICBwbGFubmluZyBmb3IgaW50ZXJjaGFuZ2UsIGFuZCBjaGFuZ2VzIG1hZGUgc2luY2UgdGhlIGxhc3QgcmVsZWFzZQogIG9mIERvY0Jvb2suCi0tPgo8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRW50aXRpZXMgZm9yIG1vZHVsZSBpbmNsdXNpb25zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIEVudGl0aWVzIGZvciBlbGVtZW50IGNsYXNzZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cjx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+CiAgPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIgc2NoZW1hTG9jYXRpb249InhtbC54c2QiLz4KICA8eHM6ZWxlbWVudCBuYW1lPSJhcHBlbmRpeC5jbGFzcyIgYWJzdHJhY3Q9InRydWUiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJlZ2lucGFnZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJhcHBlbmRpeGluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJib29rY29tcG9uZW50LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idG9jY2hhcCIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJvb2tjb21wb25lbnQuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5hdi5jbGFzcyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhcHBlbmRpeC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhcnRpY2xlLmNsYXNzIiBhYnN0cmFjdD0idHJ1ZSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImRpdi50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImFydGljbGVpbmZvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRvY2NoYXAiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImxvdCIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJvb2tjb21wb25lbnQuY29udGVudCIvPgogICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6Z3JvdXAgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iYXBwZW5kaXguY2xhc3MiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iYWNrbm8iLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXJ0aWNsZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6ZWxlbWVudCBuYW1lPSJib29rLmNsYXNzIiBhYnN0cmFjdD0idHJ1ZSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImRpdi50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJvb2tpbmZvIi8+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iZGVkaWNhdGlvbiIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0b2MiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ibG90Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Imdsb3NzYXJ5Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImJpYmxpb2dyYXBoeSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwcmVmYWNlIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNoYXB0ZXIuY2xhc3MiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0icmVmZXJlbmNlIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InBhcnQiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iYXJ0aWNsZS5jbGFzcyIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcHBlbmRpeC5jbGFzcyIvPgogICAgICAgICAgPHhzOmdyb3VwIHJlZj0iaW5kZXguY2xhc3MiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iY29sb3Bob24iLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYm9vay5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjaGFwdGVyLmNsYXNzIiBhYnN0cmFjdD0idHJ1ZSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmVnaW5wYWdlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImNoYXB0ZXJpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iYm9va2NvbXBvbmVudC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRvY2NoYXAiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJib29rY29tcG9uZW50LmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2hhcHRlci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6Z3JvdXAgbmFtZT0iaW5kZXguY2xhc3MiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmRleCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InNldGluZGV4Ii8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlZmVudHJ5LmNsYXNzIiBhYnN0cmFjdD0idHJ1ZSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmVnaW5wYWdlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InJlZmVudHJ5aW5mbyIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJyZWZtZXRhIi8+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0icmVtYXJrIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmsuY2hhci5jbGFzcyIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZm5hbWVkaXYiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0icmVmc3lub3BzaXNkaXYiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmc2VjdDEiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZnNlY3Rpb24iLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmZW50cnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VjdGlvbi5jbGFzcyIgYWJzdHJhY3Q9InRydWUiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InNlY3Rpb25pbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ic2VjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRpdmNvbXBvbmVudC5taXgiLz4KICAgICAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmVudHJ5LmNsYXNzIi8+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWN0aW9uLmNsYXNzIi8+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzaW1wbGVzZWN0Ii8+CiAgICAgICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmVudHJ5LmNsYXNzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWN0aW9uLmNsYXNzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzaW1wbGVzZWN0Ii8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3Rpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmdyb3VwIG5hbWU9Im5hdi5jbGFzcyI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9InRvYyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxvdCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImluZGV4Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZ2xvc3NhcnkiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiaWJsaW9ncmFwaHkiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPCEtLSBSZWRlY2xhcmF0aW9uIHBsYWNlaG9sZGVyIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0KICAgIEZvciByZWRlY2xhcmluZyBlbnRpdGllcyB0aGF0IGFyZSBkZWNsYXJlZCBhZnRlciB0aGlzIHBvaW50IHdoaWxlCiAgICByZXRhaW5pbmcgdGhlaXIgcmVmZXJlbmNlcyB0byB0aGUgZW50aXRpZXMgdGhhdCBhcmUgZGVjbGFyZWQgYmVmb3JlCiAgICB0aGlzIHBvaW50CiAgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gRW50aXRpZXMgZm9yIGVsZW1lbnQgbWl4dHVyZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6Z3JvdXAgbmFtZT0iZGl2Y29tcG9uZW50Lm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imxpc3QuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhZG1vbi5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVzcGVjaWZpYy5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN5bm9wLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImluZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iY29tcG91bmQuY2xhc3MiLz4KICAgICAgPHhzOmdyb3VwIHJlZj0iZ2Vub2JqLmNsYXNzIi8+CiAgICAgIDx4czpncm91cCByZWY9ImRlc2NvYmouY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYmVnaW5wYWdlIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJyZWZjb21wb25lbnQubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGlzdC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFkbW9uLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZXNwZWNpZmljLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ic3lub3AuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaW5mb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb21wb3VuZC5jbGFzcyIvPgogICAgICA8eHM6Z3JvdXAgcmVmPSJnZW5vYmouY2xhc3MiLz4KICAgICAgPHhzOmdyb3VwIHJlZj0iZGVzY29iai5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9ImluZGV4ZGl2Y29tcG9uZW50Lm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Iml0ZW1pemVkbGlzdCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im9yZGVyZWRsaXN0Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0idmFyaWFibGVsaXN0Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ic2ltcGxlbGlzdCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVzcGVjaWZpYy5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN5bm9wLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImluZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYW5jaG9yIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icmVtYXJrIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGluay5jaGFyLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYmVnaW5wYWdlIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJyZWZuYW1lLmNoYXIubWl4Ij4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRlY2guY2hhci5jbGFzcyIvPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJwYXJ0Y29udGVudC5taXgiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcHBlbmRpeC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImNoYXB0ZXIuY2xhc3MiLz4KICAgICAgPHhzOmdyb3VwIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYXJ0aWNsZS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InByZWZhY2UiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZWZlbnRyeS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InJlZmVyZW5jZSIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0icmVmaW5saW5lLmNoYXIubWl4Ij4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ieHJlZi5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJnZW4uY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluay5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0ZWNoLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJiYXNlLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImRvY2luZm8uY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9Im90aGVyLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImJlZ2lucGFnZSIvPgogICAgICA8L3hzOmNob2ljZT4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0icmVmY2xhc3MuY2hhci5taXgiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYXBwbGljYXRpb24iLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpncm91cD4KICA8IS0tIFJlZGVjbGFyYXRpb24gcGxhY2Vob2xkZXIgMiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLQogICAgRm9yIHJlZGVjbGFyaW5nIGVudGl0aWVzIHRoYXQgYXJlIGRlY2xhcmVkIGFmdGVyIHRoaXMgcG9pbnQgd2hpbGUKICAgIHJldGFpbmluZyB0aGVpciByZWZlcmVuY2VzIHRvIHRoZSBlbnRpdGllcyB0aGF0IGFyZSBkZWNsYXJlZCBiZWZvcmUKICAgIHRoaXMgcG9pbnQKICAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBFbnRpdGllcyBmb3IgY29udGVudCBtb2RlbHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czpncm91cCBuYW1lPSJkaXYudGl0bGUuY29udGVudCI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0idGl0bGUiLz4KICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InN1YnRpdGxlIi8+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0aXRsZWFiYnJldiIvPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJib29rY29tcG9uZW50LnRpdGxlLmNvbnRlbnQiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9InRpdGxlIi8+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJzdWJ0aXRsZSIvPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGVhYmJyZXYiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0ic2VjdC50aXRsZS5jb250ZW50Ij4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0aXRsZSIvPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ic3VidGl0bGUiLz4KICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlYWJicmV2Ii8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9InJlZnNlY3QudGl0bGUuY29udGVudCI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0idGl0bGUiLz4KICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InN1YnRpdGxlIi8+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0aXRsZWFiYnJldiIvPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJib29rY29tcG9uZW50LmNvbnRlbnQiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkaXZjb21wb25lbnQubWl4Ii8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2VjdDEiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmZW50cnkuY2xhc3MiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2ltcGxlc2VjdCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWN0aW9uLmNsYXNzIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2VjdDEiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZlbnRyeS5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNpbXBsZXNlY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWN0aW9uLmNsYXNzIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBTZXQgYW5kIFNldEluZm8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZXQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNldCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImRpdi50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InNldGluZm8iLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idG9jIi8+CiAgICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InNldCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJib29rLmNsYXNzIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InNldGluZGV4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNldC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZXQuZWxlbWVudCAtLT4KICA8IS0tIEZQSTogU0dNTCBmb3JtYWwgcHVibGljIGlkZW50aWZpZXIgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNldC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZnBpIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNldC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNldC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNldGluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNldGluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZXRpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNldGluZm8uZWxlbWVudCAtLT4KICA8IS0tCiAgICBDb250ZW50czogSURzIG9mIHRoZSBUb0MsIEJvb2tzLCBhbmQgU2V0SW5kZXggdGhhdCBjb21wcmlzZQogICAgdGhlIHNldCwgaW4gdGhlIG9yZGVyIG9mIHRoZWlyIGFwcGVhcmFuY2UKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2V0aW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29udGVudHMiIHR5cGU9InhzOklEUkVGUyIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2V0aW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2V0aW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNldGluZm8ubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIHNldC5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBCb29rIGFuZCBCb29rSW5mbyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJib29rLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJib29rIiBzdWJzdGl0dXRpb25Hcm91cD0iYm9vay5jbGFzcyIvPgogIDwhLS0gZW5kIG9mIGJvb2suZWxlbWVudCAtLT4KICA8IS0tIEZQSTogU0dNTCBmb3JtYWwgcHVibGljIGlkZW50aWZpZXIgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJvb2suYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZwaSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJib29rLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBib29rLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYm9vay5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJvb2tpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJib29raW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmZvLmNsYXNzIi8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJvb2tpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJvb2tpbmZvLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgQ29udGVudHM6IElEcyBvZiB0aGUgVG9DLCBMb1RzLCBQcmVmYWNlcywgUGFydHMsIENoYXB0ZXJzLAogICAgQXBwZW5kaXhlcywgUmVmZXJlbmNlcywgR0xvc3NhcnksIEJpYmxpb2dyYXBoeSwgYW5kIGluZGV4ZXMKICAgIGNvbXByaXNpbmcgdGhlIEJvb2ssIGluIHRoZSBvcmRlciBvZiB0aGVpciBhcHBlYXJhbmNlCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJvb2tpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb250ZW50cyIgdHlwZT0ieHM6SURSRUZTIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJib29raW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYm9va2luZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBib29raW5mby5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgYm9vay5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBEZWRpY2F0aW9uLCBUb0MsIGFuZCBMb1QgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJkZWRpY2F0aW9uLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJkZWRpY2F0aW9uIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0ic2VjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImxlZ2Fsbm90aWNlLm1peCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJkZWRpY2F0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGRlZGljYXRpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZGVkaWNhdGlvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImRlZGljYXRpb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGRlZGljYXRpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBkZWRpY2F0aW9uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29sb3Bob24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNvbG9waG9uIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0ic2VjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRleHRvYmplY3QubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbG9waG9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvbG9waG9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbG9waG9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29sb3Bob24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvbG9waG9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29sb3Bob24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2Mucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRvYyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmVnaW5wYWdlIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJib29rY29tcG9uZW50LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRvY2Zyb250Ii8+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0idG9jcGFydCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0b2NjaGFwIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0b2NiYWNrIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvYy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0b2MuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFnZW51bS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvYy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdG9jLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdG9jLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jZnJvbnQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRvY2Zyb250Ij4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jZnJvbnQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdG9jZnJvbnQuZWxlbWVudCAtLT4KICA8IS0tIHRvIGVsZW1lbnQgdGhhdCB0aGlzIGVudHJ5IHJlcHJlc2VudHMgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRvY2Zyb250LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rZW5kLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFnZW51bS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2Zyb250LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0b2Nmcm9udC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHRvY2Zyb250Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jZW50cnkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRvY2VudHJ5Ij4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jZW50cnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdG9jZW50cnkuZWxlbWVudCAtLT4KICA8IS0tIHRvIGVsZW1lbnQgdGhhdCB0aGlzIGVudHJ5IHJlcHJlc2VudHMgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRvY2VudHJ5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlua2VuZC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhZ2VudW0uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0b2NlbnRyeS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdG9jZW50cnkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0b2NlbnRyeS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRvY3BhcnQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRvY3BhcnQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idG9jZW50cnkiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRvY2NoYXAiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jcGFydC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0b2NwYXJ0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRvY3BhcnQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0b2NwYXJ0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0b2NwYXJ0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdG9jcGFydC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRvY2NoYXAucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRvY2NoYXAiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idG9jZW50cnkiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRvY2xldmVsMSIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0b2NjaGFwLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRvY2NoYXAuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jY2hhcC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jY2hhcC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdG9jY2hhcC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHRvY2NoYXAubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2NsZXZlbDEucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRvY2xldmVsMSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0b2NlbnRyeSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idG9jbGV2ZWwyIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2xldmVsMS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDEuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jbGV2ZWwxLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jbGV2ZWwxLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDEuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDEubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2NsZXZlbDIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRvY2xldmVsMiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0b2NlbnRyeSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idG9jbGV2ZWwzIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2xldmVsMi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jbGV2ZWwyLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jbGV2ZWwyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDIubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2NsZXZlbDMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRvY2xldmVsMyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0b2NlbnRyeSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idG9jbGV2ZWw0Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2xldmVsMy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jbGV2ZWwzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jbGV2ZWwzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDMubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2NsZXZlbDQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRvY2xldmVsNCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0b2NlbnRyeSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idG9jbGV2ZWw1Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2xldmVsNC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jbGV2ZWw0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jbGV2ZWw0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2NsZXZlbDUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRvY2xldmVsNSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0b2NlbnRyeSIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0b2NsZXZlbDUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdG9jbGV2ZWw1LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRvY2xldmVsNS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2xldmVsNS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdG9jbGV2ZWw1LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdG9jbGV2ZWw1Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jYmFjay5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idG9jYmFjayI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2JhY2suYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdG9jYmFjay5lbGVtZW50IC0tPgogIDwhLS0gdG8gZWxlbWVudCB0aGF0IHRoaXMgZW50cnkgcmVwcmVzZW50cyAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jYmFjay5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlua2VuZC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhZ2VudW0uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0b2NiYWNrLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0b2NiYWNrLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdG9jYmFjay5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgdG9jLmNvbnRlbnQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsb3Qucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImxvdCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmVnaW5wYWdlIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJib29rY29tcG9uZW50LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImxvdGVudHJ5Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxvdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBsb3QuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibG90LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsb3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGxvdC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGxvdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxvdGVudHJ5LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJsb3RlbnRyeSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxvdGVudHJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGxvdGVudHJ5LmVsZW1lbnQgLS0+CiAgPCEtLQogICAgU3JjQ3JlZGl0OiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgc291cmNlIG9mIHRoZSBlbnRyeSwKICAgIGFzIGZvciBhIGxpc3Qgb2YgaWxsdXN0cmF0aW9ucwogIC0tPgogIDwhLS0gbGlua2VuZDogdG8gZWxlbWVudCB0aGF0IHRoaXMgZW50cnkgcmVwcmVzZW50cyAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibG90ZW50cnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rZW5kLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFnZW51bS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3JjY3JlZGl0Ii8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsb3RlbnRyeS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbG90ZW50cnkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBsb3RlbnRyeS5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgbG90LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEFwcGVuZGl4LCBDaGFwdGVyLCBQYXJ0LCBQcmVmYWNlLCBSZWZlcmVuY2UsIFBhcnRJbnRybyAuLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFwcGVuZGl4LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhcHBlbmRpeCIgc3Vic3RpdHV0aW9uR3JvdXA9ImFwcGVuZGl4LmNsYXNzIi8+CiAgPCEtLSBlbmQgb2YgYXBwZW5kaXguZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXBwZW5kaXguYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFwcGVuZGl4LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhcHBlbmRpeC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGFwcGVuZGl4Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2hhcHRlci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY2hhcHRlciIgc3Vic3RpdHV0aW9uR3JvdXA9ImNoYXB0ZXIuY2xhc3MiLz4KICA8IS0tIGVuZCBvZiBjaGFwdGVyLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNoYXB0ZXIuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNoYXB0ZXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNoYXB0ZXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjaGFwdGVyLm1vZHVsZSAtLT4KICA8IS0tCiAgICBOb3RlIHRoYXQgUGFydCB3YXMgdG8gaGF2ZSBpdHMgY29udGVudCBtb2RlbCByZWR1Y2VkIGluIFY0LjQuICBUaGlzCiAgICBjaGFuZ2Ugd2lsbCBub3QgYmUgbWFkZSBhZnRlciBhbGwuCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBhcnQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InBhcnQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJlZ2lucGFnZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJwYXJ0aW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJvb2tjb21wb25lbnQudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJwYXJ0aW50cm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFydGNvbnRlbnQubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhcnQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcGFydC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwYXJ0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYXJ0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwYXJ0LmF0dGxpc3QgLS0+CiAgPCEtLSBFTEVNRU5UIFBhcnRJbnRybyAoZGVmaW5lZCBiZWxvdykgLS0+CiAgPCEtLSBlbmQgb2YgcGFydC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByZWZhY2Uucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InByZWZhY2UiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJlZ2lucGFnZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJwcmVmYWNlaW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJvb2tjb21wb25lbnQudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5hdi5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0b2NjaGFwIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iYm9va2NvbXBvbmVudC5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByZWZhY2UuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcHJlZmFjZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcmVmYWNlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJlZmFjZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcHJlZmFjZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHByZWZhY2UubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZlcmVuY2Uucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlZmVyZW5jZSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmVnaW5wYWdlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InJlZmVyZW5jZWluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJib29rY29tcG9uZW50LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0icGFydGludHJvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmZW50cnkuY2xhc3MiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmZXJlbmNlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZmVyZW5jZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZlcmVuY2UuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZmVyZW5jZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmZXJlbmNlLmF0dGxpc3QgLS0+CiAgPCEtLSBFTEVNRU5UIFBhcnRJbnRybyAoZGVmaW5lZCBiZWxvdykgLS0+CiAgPCEtLSBlbmQgb2YgcmVmZXJlbmNlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGFydGludHJvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJwYXJ0aW50cm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJkaXYudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJvb2tjb21wb25lbnQuY29udGVudCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYXJ0aW50cm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcGFydGludHJvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBhcnRpbnRyby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFydGludHJvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwYXJ0aW50cm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwYXJ0aW50cm8ubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIE90aGVyIEluZm8gZWxlbWVudHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFwcGVuZGl4aW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXBwZW5kaXhpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXBwZW5kaXhpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFwcGVuZGl4aW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcHBlbmRpeGluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhcHBlbmRpeGluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGFwcGVuZGl4aW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGFwcGVuZGl4aW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb2dyYXBoeWluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImJpYmxpb2dyYXBoeWluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9ncmFwaHlpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb2dyYXBoeWluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvZ3JhcGh5aW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb2dyYXBoeWluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJpYmxpb2dyYXBoeWluZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBiaWJsaW9ncmFwaHlpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2hhcHRlcmluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNoYXB0ZXJpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2hhcHRlcmluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY2hhcHRlcmluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2hhcHRlcmluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjaGFwdGVyaW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY2hhcHRlcmluZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjaGFwdGVyaW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3NzYXJ5aW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZ2xvc3NhcnlpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3NhcnlpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGdsb3NzYXJ5aW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJnbG9zc2FyeWluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJnbG9zc2FyeWluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGdsb3NzYXJ5aW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGdsb3NzYXJ5aW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImluZGV4aW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW5kZXhpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5kZXhpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGluZGV4aW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmRleGluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmRleGluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGluZGV4aW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGluZGV4aW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNldGluZGV4aW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2V0aW5kZXhpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2V0aW5kZXhpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNldGluZGV4aW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZXRpbmRleGluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZXRpbmRleGluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNldGluZGV4aW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNldGluZGV4aW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBhcnRpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJwYXJ0aW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmZvLmNsYXNzIi8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhcnRpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHBhcnRpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBhcnRpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFydGluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHBhcnRpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcGFydGluZm8ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcmVmYWNlaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icHJlZmFjZWluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcmVmYWNlaW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwcmVmYWNlaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcmVmYWNlaW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByZWZhY2VpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwcmVmYWNlaW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHByZWZhY2VpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmZW50cnlpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZlbnRyeWluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZlbnRyeWluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmZW50cnlpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZmVudHJ5aW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZmVudHJ5aW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmZW50cnlpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVmZW50cnlpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmc2VjdGlvbmluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlZnNlY3Rpb25pbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc2VjdGlvbmluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdGlvbmluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmc2VjdGlvbmluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzZWN0aW9uaW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdGlvbmluZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZzZWN0aW9uaW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnNlY3QxaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmc2VjdDFpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc2VjdDFpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZnNlY3QxaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzZWN0MWluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzZWN0MWluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZnNlY3QxaW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZnNlY3QxaW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnNlY3QyaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmc2VjdDJpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc2VjdDJpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZnNlY3QyaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzZWN0MmluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzZWN0MmluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZnNlY3QyaW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZnNlY3QyaW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnNlY3QzaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmc2VjdDNpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc2VjdDNpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZnNlY3QzaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzZWN0M2luZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzZWN0M2luZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZnNlY3QzaW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZnNlY3QzaW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnN5bm9wc2lzZGl2aW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmc3lub3BzaXNkaXZpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc3lub3BzaXNkaXZpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZnN5bm9wc2lzZGl2aW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzeW5vcHNpc2RpdmluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzeW5vcHNpc2RpdmluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZnN5bm9wc2lzZGl2aW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZnN5bm9wc2lzZGl2aW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZmVyZW5jZWluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlZmVyZW5jZWluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZlcmVuY2VpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZmVyZW5jZWluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmZXJlbmNlaW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZmVyZW5jZWluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZmVyZW5jZWluZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZlcmVuY2VpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdDFpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWN0MWluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0MWluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VjdDFpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3QxaW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3QxaW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VjdDFpbmZvLmF0dGxpc3QgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3QyaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VjdDJpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDJpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlY3QyaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0MmluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0MmluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlY3QyaW5mby5hdHRsaXN0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0M2luZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNlY3QzaW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmZvLmNsYXNzIi8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3QzaW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWN0M2luZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdDNpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDNpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWN0M2luZm8uYXR0bGlzdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdDRpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWN0NGluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0NGluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VjdDRpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3Q0aW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3Q0aW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VjdDRpbmZvLmF0dGxpc3QgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3Q1aW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VjdDVpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDVpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlY3Q1aW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0NWluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0NWluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlY3Q1aW5mby5hdHRsaXN0IC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIFNlY3Rpb24gKHBhcmFsbGVsIHRvIFNlY3QqKSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VjdGlvbiIgc3Vic3RpdHV0aW9uR3JvdXA9InNlY3Rpb24uY2xhc3MiLz4KICA8IS0tIGVuZCBvZiBzZWN0aW9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3Rpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3Rpb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlY3Rpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzZWN0aW9uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdGlvbmluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNlY3Rpb25pbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdGlvbmluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VjdGlvbmluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdGlvbmluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0aW9uaW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VjdGlvbmluZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzZWN0aW9uaW5mby5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2Ygc2VjdGlvbi5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBTZWN0MSwgU2VjdDIsIFNlY3QzLCBTZWN0NCwgU2VjdDUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0MS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VjdDEiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InNlY3QxaW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9InNlY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5hdi5jbGFzcyIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkaXZjb21wb25lbnQubWl4Ii8+CiAgICAgICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZlbnRyeS5jbGFzcyIvPgogICAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2VjdDIiLz4KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNpbXBsZXNlY3QiLz4KICAgICAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmZW50cnkuY2xhc3MiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNlY3QyIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzaW1wbGVzZWN0Ii8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3QxLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlY3QxLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgUmVuZGVyYXM6IEluZGljYXRlcyB0aGUgZm9ybWF0IGluIHdoaWNoIHRoZSBoZWFkaW5nIHNob3VsZAogICAgYXBwZWFyCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3QxLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZW5kZXJhcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3QyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3QzIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3Q0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3Q1Ii8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3QxLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWN0MS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNlY3QxLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdDIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNlY3QyIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJzZWN0MmluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJzZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZGl2Y29tcG9uZW50Lm1peCIvPgogICAgICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmZW50cnkuY2xhc3MiLz4KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNlY3QzIi8+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzaW1wbGVzZWN0Ii8+CiAgICAgICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmVudHJ5LmNsYXNzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWN0MyIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2ltcGxlc2VjdCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5hdi5jbGFzcyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0Mi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWN0Mi5lbGVtZW50IC0tPgogIDwhLS0KICAgIFJlbmRlcmFzOiBJbmRpY2F0ZXMgdGhlIGZvcm1hdCBpbiB3aGljaCB0aGUgaGVhZGluZyBzaG91bGQKICAgIGFwcGVhcgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0Mi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVuZGVyYXMiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0MSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0MyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0NCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0NSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0Mi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VjdDIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzZWN0Mi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3QzLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWN0MyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ic2VjdDNpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ic2VjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRpdmNvbXBvbmVudC5taXgiLz4KICAgICAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmVudHJ5LmNsYXNzIi8+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWN0NCIvPgogICAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2ltcGxlc2VjdCIvPgogICAgICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZlbnRyeS5jbGFzcyIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2VjdDQiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNpbXBsZXNlY3QiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VjdDMuZWxlbWVudCAtLT4KICA8IS0tCiAgICBSZW5kZXJhczogSW5kaWNhdGVzIHRoZSBmb3JtYXQgaW4gd2hpY2ggdGhlIGhlYWRpbmcgc2hvdWxkCiAgICBhcHBlYXIKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdDMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlbmRlcmFzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDEiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDUiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlY3QzLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2VjdDMubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0NC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VjdDQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InNlY3Q0aW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9InNlY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5hdi5jbGFzcyIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkaXZjb21wb25lbnQubWl4Ii8+CiAgICAgICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZlbnRyeS5jbGFzcyIvPgogICAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2VjdDUiLz4KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNpbXBsZXNlY3QiLz4KICAgICAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmZW50cnkuY2xhc3MiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNlY3Q1Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzaW1wbGVzZWN0Ii8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3Q0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlY3Q0LmVsZW1lbnQgLS0+CiAgPCEtLQogICAgUmVuZGVyYXM6IEluZGljYXRlcyB0aGUgZm9ybWF0IGluIHdoaWNoIHRoZSBoZWFkaW5nIHNob3VsZAogICAgYXBwZWFyCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3Q0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZW5kZXJhcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3QxIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3QyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3QzIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3Q1Ii8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3Q0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWN0NC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNlY3Q0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdDUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNlY3Q1Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJzZWN0NWluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJzZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZGl2Y29tcG9uZW50Lm1peCIvPgogICAgICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmZW50cnkuY2xhc3MiLz4KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNpbXBsZXNlY3QiLz4KICAgICAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmZW50cnkuY2xhc3MiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNpbXBsZXNlY3QiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VjdDUuZWxlbWVudCAtLT4KICA8IS0tCiAgICBSZW5kZXJhczogSW5kaWNhdGVzIHRoZSBmb3JtYXQgaW4gd2hpY2ggdGhlIGhlYWRpbmcgc2hvdWxkCiAgICBhcHBlYXIKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdDUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlbmRlcmFzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDEiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDMiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDQiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlY3Q1LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2VjdDUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzaW1wbGVzZWN0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzaW1wbGVzZWN0Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpncm91cCByZWY9InNlY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkaXZjb21wb25lbnQubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNpbXBsZXNlY3QuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2ltcGxlc2VjdC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzaW1wbGVzZWN0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2ltcGxlc2VjdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2ltcGxlc2VjdC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNpbXBsZXNlY3QubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEJpYmxpb2dyYXBoeSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb2dyYXBoeS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYmlibGlvZ3JhcGh5Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJiaWJsaW9ncmFwaHlpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJib29rY29tcG9uZW50LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjb21wb25lbnQubWl4Ii8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImJpYmxpb2RpdiIvPgogICAgICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iYmlibGlvZW50cnkiLz4KICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiaWJsaW9taXhlZCIvPgogICAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb2dyYXBoeS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBiaWJsaW9ncmFwaHkuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvZ3JhcGh5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvZ3JhcGh5LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBiaWJsaW9ncmFwaHkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBiaWJsaW9ncmFwaHkubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9kaXYucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImJpYmxpb2RpdiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9InNlY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbXBvbmVudC5taXgiLz4KICAgICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iYmlibGlvZW50cnkiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iYmlibGlvbWl4ZWQiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvZGl2LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb2Rpdi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9kaXYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9kaXYucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJpYmxpb2Rpdi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJpYmxpb2Rpdi5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgYmlibGlvZ3JhcGh5LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEdsb3NzYXJ5IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3NzYXJ5LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJnbG9zc2FyeSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iZ2xvc3NhcnlpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJib29rY29tcG9uZW50LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjb21wb25lbnQubWl4Ii8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Imdsb3NzZGl2Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJnbG9zc2VudHJ5Ii8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJpYmxpb2dyYXBoeSIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJnbG9zc2FyeS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBnbG9zc2FyeS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJnbG9zc2FyeS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdsb3NzYXJ5LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBnbG9zc2FyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGdsb3NzYXJ5Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ2xvc3NkaXYucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Imdsb3NzZGl2Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpncm91cCByZWY9InNlY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbXBvbmVudC5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJnbG9zc2VudHJ5Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdsb3NzZGl2LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGdsb3NzZGl2LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3NzZGl2LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3NkaXYucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGdsb3NzZGl2LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZ2xvc3NkaXYubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIGdsb3NzYXJ5LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEluZGV4IGFuZCBTZXRJbmRleCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImluZGV4ZXMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImluZGV4Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJpbmRleGluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImJvb2tjb21wb25lbnQudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbXBvbmVudC5taXgiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmRleGRpdiIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmRleGVudHJ5Ii8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImluZGV4LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGluZGV4LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImluZGV4LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmRleGVzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpbmRleC5hdHRsaXN0IC0tPgogIDx4czplbGVtZW50IG5hbWU9InNldGluZGV4Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJzZXRpbmRleGluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImJvb2tjb21wb25lbnQudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbXBvbmVudC5taXgiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmRleGRpdiIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmRleGVudHJ5Ii8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNldGluZGV4LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNldGluZGV4LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNldGluZGV4LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5kZXhlcy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2V0aW5kZXguYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBpbmRleGVzLm1vZHVsZSAtLT4KICA8IS0tCiAgICBTZWdtZW50ZWRMaXN0IGluIHRoaXMgY29udGVudCBpcyB1c2VmdWwgZm9yIG1hcmtpbmcgdXAgcGVybXV0ZWQKICAgIGluZGljZXMuCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImluZGV4ZGl2LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbmRleGRpdiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9InNlY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZGV4ZGl2Y29tcG9uZW50Lm1peCIvPgogICAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5kZXhlbnRyeSIvPgogICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InNlZ21lbnRlZGxpc3QiLz4KICAgICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImluZGV4ZGl2LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGluZGV4ZGl2LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImluZGV4ZGl2LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5kZXhkaXYucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGluZGV4ZGl2LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW5kZXhkaXYubW9kdWxlIC0tPgogIDwhLS0gSW5kZXggZW50cmllcyBhcHBlYXIgaW4gdGhlIGluZGV4LCBub3QgdGhlIHRleHQuIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmRleGVudHJ5LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbmRleGVudHJ5Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icHJpbWFyeWllIi8+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic2VlaWUiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic2VlYWxzb2llIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOnNlcXVlbmNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzZWNvbmRhcnlpZSIvPgogICAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzZWVpZSIvPgogICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InNlZWFsc29pZSIvPgogICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRlcnRpYXJ5aWUiLz4KICAgICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImluZGV4ZW50cnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW5kZXhlbnRyeS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmRleGVudHJ5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5kZXhlbnRyeS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaW5kZXhlbnRyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGluZGV4ZW50cnkubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcmltc2VjdGVyaWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InByaW1hcnlpZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByaW1hcnlpZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwcmltYXJ5aWUuZWxlbWVudCAtLT4KICA8IS0tIHRvIEluZGV4VGVybXMgdGhhdCB0aGVzZSBlbnRyaWVzIHJlcHJlc2VudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJpbWFyeWllLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlua2VuZHMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcmltc2VjdGVyaWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHByaW1hcnlpZS5hdHRsaXN0IC0tPgogIDx4czplbGVtZW50IG5hbWU9InNlY29uZGFyeWllIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5keHRlcm0uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2Vjb25kYXJ5aWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2Vjb25kYXJ5aWUuZWxlbWVudCAtLT4KICA8IS0tIHRvIEluZGV4VGVybXMgdGhhdCB0aGVzZSBlbnRyaWVzIHJlcHJlc2VudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2Vjb25kYXJ5aWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rZW5kcy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByaW1zZWN0ZXJpZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2Vjb25kYXJ5aWUuYXR0bGlzdCAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0ZXJ0aWFyeWllIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5keHRlcm0uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGVydGlhcnlpZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0ZXJ0aWFyeWllLmVsZW1lbnQgLS0+CiAgPCEtLSB0byBJbmRleFRlcm1zIHRoYXQgdGhlc2UgZW50cmllcyByZXByZXNlbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRlcnRpYXJ5aWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rZW5kcy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByaW1zZWN0ZXJpZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdGVydGlhcnlpZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHByaW1zZWN0ZXJpZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlZWllLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWVpZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlZWllLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlZWllLmVsZW1lbnQgLS0+CiAgPCEtLSB0byBJbmRleEVudHJ5IHRvIGxvb2sgdXAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlZWllLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlua2VuZC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlZWllLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWVpZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNlZWllLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VlYWxzb2llLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWVhbHNvaWUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmR4dGVybS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWVhbHNvaWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VlYWxzb2llLmVsZW1lbnQgLS0+CiAgPCEtLSB0byByZWxhdGVkIEluZGV4RW50cmllcyAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VlYWxzb2llLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlua2VuZHMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWVhbHNvaWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlZWFsc29pZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNlZWFsc29pZS5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgaW5kZXguY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gUmVmRW50cnkgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmZW50cnkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlZmVudHJ5IiBzdWJzdGl0dXRpb25Hcm91cD0icmVmZW50cnkuY2xhc3MiLz4KICA8IS0tIGVuZCBvZiByZWZlbnRyeS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZlbnRyeS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZmVudHJ5LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZWZlbnRyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZmVudHJ5Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmbWV0YS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmbWV0YSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InJlZmVudHJ5dGl0bGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ibWFudm9sbnVtIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZtaXNjaW5mbyIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZtZXRhLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZm1ldGEuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmbWV0YS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZm1ldGEucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZm1ldGEuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZtZXRhLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmbWlzY2luZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlZm1pc2NpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmbWlzY2luZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmbWlzY2luZm8uZWxlbWVudCAtLT4KICA8IS0tIENsYXNzOiBGcmVlbHkgYXNzaWduYWJsZSBwYXJhbWV0ZXI7IG5vIGRlZmF1bHQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZm1pc2NpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmbWlzY2luZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZm1pc2NpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVmbWlzY2luZm8ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZuYW1lZGl2LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZuYW1lZGl2Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJyZWZkZXNjcmlwdG9yIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmbmFtZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icmVmcHVycG9zZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmY2xhc3MiLz4KICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZW1hcmsiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluay5jaGFyLmNsYXNzIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZm5hbWVkaXYuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmbmFtZWRpdi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZuYW1lZGl2LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmbmFtZWRpdi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmbmFtZWRpdi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZm5hbWVkaXYubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZkZXNjcmlwdG9yLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZkZXNjcmlwdG9yIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZm5hbWUuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmZGVzY3JpcHRvci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZWZkZXNjcmlwdG9yLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZmRlc2NyaXB0b3IuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZkZXNjcmlwdG9yLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZWZkZXNjcmlwdG9yLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVmZGVzY3JpcHRvci5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZm5hbWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlZm5hbWUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmbmFtZS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZuYW1lLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZm5hbWUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmbmFtZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZm5hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZm5hbWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZuYW1lLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmcHVycG9zZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmcHVycG9zZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZpbmxpbmUuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmcHVycG9zZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZWZwdXJwb3NlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnB1cnBvc2UuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZwdXJwb3NlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZWZwdXJwb3NlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVmcHVycG9zZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZmNsYXNzLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZjbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZjbGFzcy5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZjbGFzcy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZWZjbGFzcy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZjbGFzcy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZmNsYXNzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZWZjbGFzcy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZmNsYXNzLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmc3lub3BzaXNkaXYucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlZnN5bm9wc2lzZGl2Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJyZWZzeW5vcHNpc2RpdmluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9InJlZnNlY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZjb21wb25lbnQubWl4Ii8+CiAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmc2VjdDIiLz4KICAgICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZzZWN0MiIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzeW5vcHNpc2Rpdi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZWZzeW5vcHNpc2Rpdi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzeW5vcHNpc2Rpdi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZnN5bm9wc2lzZGl2LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZWZzeW5vcHNpc2Rpdi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZnN5bm9wc2lzZGl2Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmc2VjdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmc2VjdGlvbiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0icmVmc2VjdGlvbmluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJyZWZzZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmY29tcG9uZW50Lm1peCIvPgogICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZnNlY3Rpb24iLz4KICAgICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZzZWN0aW9uIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZnNlY3Rpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzZWN0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc2VjdGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZnNlY3Rpb24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzZWN0MS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmc2VjdDEiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InJlZnNlY3QxaW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9InJlZnNlY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZjb21wb25lbnQubWl4Ii8+CiAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmc2VjdDIiLz4KICAgICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZzZWN0MiIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzZWN0MS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZWZzZWN0MS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzZWN0MS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZnNlY3QxLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZWZzZWN0MS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZnNlY3QxLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmc2VjdDIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlZnNlY3QyIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJyZWZzZWN0MmluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJyZWZzZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmY29tcG9uZW50Lm1peCIvPgogICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZnNlY3QzIi8+CiAgICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmc2VjdDMiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc2VjdDIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdDIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmc2VjdDIuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzZWN0Mi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdDIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZzZWN0Mi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnNlY3QzLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZzZWN0MyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0icmVmc2VjdDNpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0icmVmc2VjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmNvbXBvbmVudC5taXgiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc2VjdDMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdDMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmc2VjdDMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzZWN0My5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdDMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZzZWN0My5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgcmVmZW50cnkuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gQXJ0aWNsZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tCiAgICBBbiBBcnRpY2xlIGlzIGEgY2hhcHRlci1sZXZlbCwgc3RhbmQtYWxvbmUgZG9jdW1lbnQgdGhhdCBpcyBvZnRlbiwKICAgIGJ1dCBuZWVkIG5vdCBiZSwgY29sbGVjdGVkIGludG8gYSBCb29rLgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcnRpY2xlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhcnRpY2xlIiBzdWJzdGl0dXRpb25Hcm91cD0iYXJ0aWNsZS5jbGFzcyIvPgogIDwhLS0gZW5kIG9mIGFydGljbGUuZWxlbWVudCAtLT4KICA8IS0tCiAgICBDbGFzczogSW5kaWNhdGVzIHRoZSB0eXBlIG9mIGEgcGFydGljdWxhciBhcnRpY2xlOwogICAgYWxsIGFydGljbGVzIGhhdmUgdGhlIHNhbWUgc3RydWN0dXJlIGFuZCBnZW5lcmFsIHB1cnBvc2UuCiAgICBObyBkZWZhdWx0LgogIC0tPgogIDwhLS0gUGFyZW50Qm9vazogSUQgb2YgdGhlIGVuY2xvc2luZyBCb29rIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcnRpY2xlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImpvdXJuYWxhcnRpY2xlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InByb2R1Y3RzaGVldCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ3aGl0ZXBhcGVyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRlY2hyZXBvcnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic3BlY2lmaWNhdGlvbiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJmYXEiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icGFyZW50Ym9vayIgdHlwZT0ieHM6SURSRUYiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFydGljbGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgo8L3hzOnNjaGVtYT4KPCEtLSBlbmQgb2YgYXJ0aWNsZS5hdHRsaXN0IC0tPgo8IS0tIGVuZCBvZiBhcnRpY2xlLm1vZHVsZSAtLT4KPCEtLSBFbmQgb2YgRG9jQm9vayBkb2N1bWVudCBoaWVyYXJjaHkgbW9kdWxlIFY0LjQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Docbook/4_4/dbnotnx.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIERvY0Jvb2sgbm90YXRpb25zIG1vZHVsZSBWNC40IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRmlsZSBkYm5vdG54Lm1vZCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIENvcHlyaWdodCAxOTkyLTIwMDQgSGFMIENvbXB1dGVyIFN5c3RlbXMsIEluYy4sCiAgTydSZWlsbHkgJiBBc3NvY2lhdGVzLCBJbmMuLCBBcmJvclRleHQsIEluYy4sIEZ1aml0c3UgU29mdHdhcmUKICBDb3Jwb3JhdGlvbiwgTm9ybWFuIFdhbHNoLCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCBhbmQgdGhlCiAgT3JnYW5pemF0aW9uIGZvciB0aGUgQWR2YW5jZW1lbnQgb2YgU3RydWN0dXJlZCBJbmZvcm1hdGlvbgogIFN0YW5kYXJkcyAoT0FTSVMpLgogIAogICRJZDogZGJub3RueC5tb2QsdiAxLjMxIDIwMDUvMDEvMjcgMTM6NTI6MDAgbndhbHNoIEV4cCAkCiAgCiAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jQm9vayBEVEQKICBhbmQgaXRzIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUKICBpcyBoZXJlYnkgZ3JhbnRlZCBpbiBwZXJwZXR1aXR5LCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKICBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGFwcGVhciBpbiBhbGwgY29waWVzLiAgVGhlIGNvcHlyaWdodAogIGhvbGRlcnMgbWFrZSBubyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhlIERURCBmb3IKICBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzZWQgb3IgaW1wbGllZAogIHdhcnJhbnR5LgogIAogIElmIHlvdSBtb2RpZnkgdGhlIERvY0Jvb2sgRFREIGluIGFueSB3YXksIGV4Y2VwdCBmb3IgZGVjbGFyaW5nIGFuZAogIHJlZmVyZW5jaW5nIGFkZGl0aW9uYWwgc2V0cyBvZiBnZW5lcmFsIGVudGl0aWVzIGFuZCBkZWNsYXJpbmcKICBhZGRpdGlvbmFsIG5vdGF0aW9ucywgbGFiZWwgeW91ciBEVEQgYXMgYSB2YXJpYW50IG9mIERvY0Jvb2suICBTZWUKICB0aGUgbWFpbnRlbmFuY2UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAKICBQbGVhc2UgZGlyZWN0IGFsbCBxdWVzdGlvbnMsIGJ1ZyByZXBvcnRzLCBvciBzdWdnZXN0aW9ucyBmb3IKICBjaGFuZ2VzIHRvIHRoZSBkb2Nib29rQGxpc3RzLm9hc2lzLW9wZW4ub3JnIG1haWxpbmcgbGlzdC4gRm9yIG1vcmUKICBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay8uCi0tPgo8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0KICBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgbm90YXRpb24gZGVjbGFyYXRpb25zIHVzZWQgYnkgRG9jQm9vay4KICAKICBJbiBEVEQgZHJpdmVyIGZpbGVzIHJlZmVycmluZyB0byB0aGlzIG1vZHVsZSwgcGxlYXNlIHVzZSBhbiBlbnRpdHkKICBkZWNsYXJhdGlvbiB0aGF0IHVzZXMgdGhlIHB1YmxpYyBpZGVudGlmaWVyIHNob3duIGJlbG93OgogIAogIDwhRU5USVRZICUgZGJub3RuIFBVQkxJQwogICItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBOb3RhdGlvbnMgVjQuNC8vRU4iCiAgImRibm90bngubW9kIj4KICAlZGJub3RuOwogIAogIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIHBhcmFtZXRlcgogIGVudGl0eSBhbmQgbW9kdWxlIHNjaGVtZSB1c2VkIGluIERvY0Jvb2ssIGN1c3RvbWl6aW5nIERvY0Jvb2sgYW5kCiAgcGxhbm5pbmcgZm9yIGludGVyY2hhbmdlLCBhbmQgY2hhbmdlcyBtYWRlIHNpbmNlIHRoZSBsYXN0IHJlbGVhc2UKICBvZiBEb2NCb29rLgotLT4KPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiBzY2hlbWFMb2NhdGlvbj0ieG1sLnhzZCIvPgogIDx4czpzaW1wbGVUeXBlIG5hbWU9Im5vdGF0aW9uLmNsYXNzIj4KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQk1QIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQ0dNLUNIQVIiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJDR00tQklOQVJZIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQ0dNLUNMRUFSIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRElUUk9GRiIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRWSSIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkVQUyIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkVRTiIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkZBWCIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkdJRiIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkdJRjg3YSIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkdJRjg5YSIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkpQRyIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkpQRUciLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJR0VTIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUENYIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUElDIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUE5HIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUFMiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTR01MIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVEJMIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVEVYIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVElGRiIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IldNRiIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IldQRyIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlNWRyIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBERiIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlNXRiIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxpbmVzcGVjaWZpYyIvPgogICAgPC94czpyZXN0cmljdGlvbj4KICA8L3hzOnNpbXBsZVR5cGU+CjwveHM6c2NoZW1hPgo8IS0tIFdvcmRQZXJmZWN0IEdyYXBoaWMgZm9ybWF0IC0tPgo8IS0tIEVuZCBvZiBEb2NCb29rIG5vdGF0aW9ucyBtb2R1bGUgVjQuNCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4K</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Docbook/4_4/dbpoolx.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIERvY0Jvb2sgWE1MIGluZm9ybWF0aW9uIHBvb2wgbW9kdWxlIFY0LjQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRmlsZSBkYnBvb2x4Lm1vZCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIENvcHlyaWdodCAxOTkyLTIwMDQgSGFMIENvbXB1dGVyIFN5c3RlbXMsIEluYy4sCiAgTydSZWlsbHkgJiBBc3NvY2lhdGVzLCBJbmMuLCBBcmJvclRleHQsIEluYy4sIEZ1aml0c3UgU29mdHdhcmUKICBDb3Jwb3JhdGlvbiwgTm9ybWFuIFdhbHNoLCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCBhbmQgdGhlCiAgT3JnYW5pemF0aW9uIGZvciB0aGUgQWR2YW5jZW1lbnQgb2YgU3RydWN0dXJlZCBJbmZvcm1hdGlvbgogIFN0YW5kYXJkcyAoT0FTSVMpLgogIAogICRJZDogZGJwb29seC5tb2QsdiAxLjEwNyAyMDA1LzAxLzI3IDEzOjUyOjAwIG53YWxzaCBFeHAgJAogIAogIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY0Jvb2sgWE1MIERURAogIGFuZCBpdHMgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZQogIGlzIGhlcmVieSBncmFudGVkIGluIHBlcnBldHVpdHksIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAogIG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggYXBwZWFyIGluIGFsbCBjb3BpZXMuICBUaGUgY29weXJpZ2h0CiAgaG9sZGVycyBtYWtlIG5vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGUgRFREIGZvcgogIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3NlZCBvciBpbXBsaWVkCiAgd2FycmFudHkuCiAgCiAgSWYgeW91IG1vZGlmeSB0aGUgRG9jQm9vayBYTUwgRFREIGluIGFueSB3YXksIGV4Y2VwdCBmb3IgZGVjbGFyaW5nIGFuZAogIHJlZmVyZW5jaW5nIGFkZGl0aW9uYWwgc2V0cyBvZiBnZW5lcmFsIGVudGl0aWVzIGFuZCBkZWNsYXJpbmcKICBhZGRpdGlvbmFsIG5vdGF0aW9ucywgbGFiZWwgeW91ciBEVEQgYXMgYSB2YXJpYW50IG9mIERvY0Jvb2suICBTZWUKICB0aGUgbWFpbnRlbmFuY2UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAKICBQbGVhc2UgZGlyZWN0IGFsbCBxdWVzdGlvbnMsIGJ1ZyByZXBvcnRzLCBvciBzdWdnZXN0aW9ucyBmb3IKICBjaGFuZ2VzIHRvIHRoZSBkb2Nib29rQGxpc3RzLm9hc2lzLW9wZW4ub3JnIG1haWxpbmcgbGlzdC4gRm9yIG1vcmUKICBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay8uCi0tPgo8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0KICBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBvYmplY3RzLCBpbmxpbmUKICBlbGVtZW50cywgYW5kIHNvIG9uIHRoYXQgYXJlIGF2YWlsYWJsZSB0byBiZSB1c2VkIGFzIHRoZSBtYWluCiAgY29udGVudCBvZiBEb2NCb29rIGRvY3VtZW50cy4gIFNvbWUgZWxlbWVudHMgYXJlIHVzZWZ1bCBmb3IgZ2VuZXJhbAogIHB1Ymxpc2hpbmcsIGFuZCBvdGhlcnMgYXJlIHVzZWZ1bCBzcGVjaWZpY2FsbHkgZm9yIGNvbXB1dGVyCiAgZG9jdW1lbnRhdGlvbi4KICAKICBUaGlzIG1vZHVsZSBoYXMgdGhlIGZvbGxvd2luZyBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlczoKICAKICBvIEl0IGFzc3VtZXMgdGhhdCBhICVub3RhdGlvbi5jbGFzczsgZW50aXR5IGlzIGRlZmluZWQgYnkgdGhlCiAgICBkcml2ZXIgZmlsZSBvciBvdGhlciBoaWdoLWxldmVsIG1vZHVsZS4gIFRoaXMgZW50aXR5IGlzCiAgICByZWZlcmVuY2VkIGluIHRoZSBOT1RBVElPTiBhdHRyaWJ1dGVzIGZvciB0aGUgZ3JhcGhpYy1yZWxhdGVkIGFuZAogICAgTW9kZVNwZWMgZWxlbWVudHMuCiAgCiAgbyBJdCBhc3N1bWVzIHRoYXQgYW4gYXBwcm9wcmlhdGVseSBwYXJhbWV0ZXJpemVkIHRhYmxlIG1vZHVsZSBpcwogICAgYXZhaWxhYmxlIGZvciB1c2Ugd2l0aCB0aGUgdGFibGUtcmVsYXRlZCBlbGVtZW50cy4KICAKICBJbiBEVEQgZHJpdmVyIGZpbGVzIHJlZmVycmluZyB0byB0aGlzIG1vZHVsZSwgcGxlYXNlIHVzZSBhbiBlbnRpdHkKICBkZWNsYXJhdGlvbiB0aGF0IHVzZXMgdGhlIHB1YmxpYyBpZGVudGlmaWVyIHNob3duIGJlbG93OgogIAogIDwhRU5USVRZICUgZGJwb29sIFBVQkxJQwogICItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBYTUwgSW5mb3JtYXRpb24gUG9vbCBWNC40Ly9FTiIKICAiZGJwb29seC5tb2QiPgogICVkYnBvb2w7CiAgCiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgcGFyYW1ldGVyCiAgZW50aXR5IGFuZCBtb2R1bGUgc2NoZW1lIHVzZWQgaW4gRG9jQm9vaywgY3VzdG9taXppbmcgRG9jQm9vayBhbmQKICBwbGFubmluZyBmb3IgaW50ZXJjaGFuZ2UsIGFuZCBjaGFuZ2VzIG1hZGUgc2luY2UgdGhlIGxhc3QgcmVsZWFzZQogIG9mIERvY0Jvb2suCi0tPgo8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRm9ybXMgZW50aXRpZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLSBUaGVzZSBQRXMgcHJvdmlkZSB0aGUgaG9vayBieSB3aGljaCB0aGUgZm9ybXMgbW9kdWxlIGNhbiBiZSBpbnNlcnRlZCAtLT4KPCEtLSBpbnRvIHRoZSBEVEQuIC0tPgo8eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgogIDx4czppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJodG1sdGJseC54c2QiLz4KICA8eHM6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iY2Fsc3RibHgueHNkIi8+CiAgPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIgc2NoZW1hTG9jYXRpb249InhtbC54c2QiLz4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBHZW5lcmFsLXB1cnBvc2Ugc2VtYW50aWNzIGVudGl0aWVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czpzaW1wbGVUeXBlIG5hbWU9Inllc29ybm8uYXR0dmFscyI+CiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIi8+CiAgPC94czpzaW1wbGVUeXBlPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEVudGl0aWVzIGZvciBtb2R1bGUgaW5jbHVzaW9ucyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gRW50aXRpZXMgZm9yIGVsZW1lbnQgY2xhc3NlcyBhbmQgbWl4dHVyZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tICJVYmlxdWl0b3VzIiBjbGFzc2VzOiBuZHh0ZXJtLmNsYXNzIGFuZCBiZWdpbnBhZ2UgLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibmR4dGVybS5jbGFzcyIgYWJzdHJhY3Q9InRydWUiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InByaW1hcnkiLz4KICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+CiAgICAgICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic2Vjb25kYXJ5Ii8+CiAgICAgICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIj4KICAgICAgICAgICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRlcnRpYXJ5Ii8+CiAgICAgICAgICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+CiAgICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic2VlIi8+CiAgICAgICAgICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNlZWFsc28iLz4KICAgICAgICAgICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzZWUiLz4KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWVhbHNvIi8+CiAgICAgICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic2VlIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWVhbHNvIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImluZGV4dGVybS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIE9iamVjdC1sZXZlbCBjbGFzc2VzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibGlzdC5jbGFzcyIgYWJzdHJhY3Q9InRydWUiLz4KICA8eHM6ZWxlbWVudCBuYW1lPSJhZG1vbi5jbGFzcyIgYWJzdHJhY3Q9InRydWUiLz4KICA8eHM6ZWxlbWVudCBuYW1lPSJsaW5lc3BlY2lmaWMuY2xhc3MiIGFic3RyYWN0PSJ0cnVlIi8+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibWV0aG9kLnN5bm9wLmNsYXNzIiBhYnN0cmFjdD0idHJ1ZSIgc3Vic3RpdHV0aW9uR3JvdXA9InN5bm9wLmNsYXNzIi8+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3lub3AuY2xhc3MiIGFic3RyYWN0PSJ0cnVlIi8+CiAgPHhzOmVsZW1lbnQgbmFtZT0icGFyYS5jbGFzcyIgYWJzdHJhY3Q9InRydWUiLz4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbmZvcm1hbC5jbGFzcyIgYWJzdHJhY3Q9InRydWUiLz4KICA8eHM6ZWxlbWVudCBuYW1lPSJmb3JtYWwuY2xhc3MiIGFic3RyYWN0PSJ0cnVlIi8+CiAgPCEtLSBUaGUgRG9jQm9vayBUQyBtYXkgcHJvZHVjZSBhbiBvZmZpY2lhbCBFQk5GIG1vZHVsZSBmb3IgRG9jQm9vay4gLS0+CiAgPCEtLSBUaGlzIFBFIHByb3ZpZGVzIHRoZSBob29rIGJ5IHdoaWNoIGl0IGNhbiBiZSBpbnNlcnRlZCBpbnRvIHRoZSBEVEQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImNvbXBvdW5kLmNsYXNzIiBhYnN0cmFjdD0idHJ1ZSIvPgogIDx4czpncm91cCBuYW1lPSJnZW5vYmouY2xhc3MiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhbmNob3IiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJicmlkZ2VoZWFkIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icmVtYXJrIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaGlnaGxpZ2h0cyIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0iZGVzY29iai5jbGFzcyI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFic3RyYWN0Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYXV0aG9yYmx1cmIiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlcGlncmFwaCIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8IS0tIENoYXJhY3Rlci1sZXZlbCBjbGFzc2VzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ieHJlZi5jaGFyLmNsYXNzIiBhYnN0cmFjdD0idHJ1ZSIvPgogIDx4czplbGVtZW50IG5hbWU9Imdlbi5jaGFyLmNsYXNzIiBhYnN0cmFjdD0idHJ1ZSIvPgogIDx4czplbGVtZW50IG5hbWU9ImxpbmsuY2hhci5jbGFzcyIgYWJzdHJhY3Q9InRydWUiLz4KICA8IS0tIFRoZSBEb2NCb29rIFRDIG1heSBwcm9kdWNlIGFuIG9mZmljaWFsIEVCTkYgbW9kdWxlIGZvciBEb2NCb29rLiAtLT4KICA8IS0tIFRoaXMgUEUgcHJvdmlkZXMgdGhlIGhvb2sgYnkgd2hpY2ggaXQgY2FuIGJlIGluc2VydGVkIGludG8gdGhlIERURC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idGVjaC5jaGFyLmNsYXNzIiBhYnN0cmFjdD0idHJ1ZSIvPgogIDx4czpncm91cCBuYW1lPSJiYXNlLmNoYXIuY2xhc3MiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFuY2hvciIvPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImRvY2luZm8uY2hhci5jbGFzcyIgYWJzdHJhY3Q9InRydWUiLz4KICA8eHM6Z3JvdXAgbmFtZT0ib3RoZXIuY2hhci5jbGFzcyI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9InJlbWFyayIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN1YnNjcmlwdCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN1cGVyc2NyaXB0Ii8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImlubGluZW9iai5jaGFyLmNsYXNzIiBhYnN0cmFjdD0idHJ1ZSIvPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEVudGl0aWVzIGZvciBjb250ZW50IG1vZGVscyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmdyb3VwIG5hbWU9ImZvcm1hbG9iamVjdC50aXRsZS5jb250ZW50Ij4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0aXRsZSIvPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGVhYmJyZXYiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpncm91cD4KICA8IS0tIFJlZGVjbGFyYXRpb24gcGxhY2Vob2xkZXIgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLQogICAgRm9yIHJlZGVjbGFyaW5nIGVudGl0aWVzIHRoYXQgYXJlIGRlY2xhcmVkIGFmdGVyIHRoaXMgcG9pbnQgd2hpbGUKICAgIHJldGFpbmluZyB0aGVpciByZWZlcmVuY2VzIHRvIHRoZSBlbnRpdGllcyB0aGF0IGFyZSBkZWNsYXJlZCBiZWZvcmUKICAgIHRoaXMgcG9pbnQKICAtLT4KICA8IS0tIE9iamVjdC1sZXZlbCBtaXh0dXJlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLQogICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgYWRtbiBsaW5lIHN5bnAgcGFyYSBpbmZtIGZvcm0gY21wZCBnZW4gIGRlc2MKICAgIENvbXBvbmVudCBtaXh0dXJlICAgICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIFgKICAgIFNpZGViYXIgbWl4dHVyZSAgICAgICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgYSAgICBYCiAgICBGb290bm90ZSBtaXh0dXJlICAgICAgICBYICAgICAgICAgWCAgICBYICAgIFggICAgWAogICAgRXhhbXBsZSBtaXh0dXJlICAgICAgICAgWCAgICAgICAgIFggICAgWCAgICBYICAgIFgKICAgIEhpZ2hsaWdodHMgbWl4dHVyZSAgICAgIFggICAgWCAgICAgICAgICAgICAgWAogICAgUGFyYWdyYXBoIG1peHR1cmUgICAgICAgWCAgICAgICAgIFggICAgWCAgICAgICAgIFgKICAgIEFkbW9uaXRpb24gbWl4dHVyZSAgICAgIFggICAgICAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgYiAgICBjCiAgICBGaWd1cmUgbWl4dHVyZSAgICAgICAgICAgICAgICAgICAgWCAgICBYICAgICAgICAgWAogICAgVGFibGUgZW50cnkgbWl4dHVyZSAgICAgWCAgICBYICAgIFggICAgICAgICBYICAgIGQKICAgIEdsb3NzYXJ5IGRlZiBtaXh0dXJlICAgIFggICAgICAgICBYICAgIFggICAgWCAgICBYICAgICAgICAgZQogICAgTGVnYWwgbm90aWNlIG1peHR1cmUgICAgWCAgICBYICAgIFggICAgICAgICBYICAgIGYKICAgIAogICAgYS4gSnVzdCBQcm9jZWR1cmU7IG5vdCBTaWRlYmFyIGl0c2VsZiBvciBNc2dTZXQuCiAgICBiLiBObyBNc2dTZXQuCiAgICBjLiBObyBIaWdobGlnaHRzLgogICAgZC4gSnVzdCBHcmFwaGljOyBubyBvdGhlciBpbmZvcm1hbCBvYmplY3RzLgogICAgZS4gTm8gQW5jaG9yLCBCcmlkZ2VIZWFkLCBvciBIaWdobGlnaHRzLgogICAgZi4gSnVzdCBCbG9ja1F1b3RlOyBubyBvdGhlciBpbmZvcm1hbCBvYmplY3RzLgogIC0tPgogIDx4czpncm91cCBuYW1lPSJjb21wb25lbnQubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGlzdC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFkbW9uLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZXNwZWNpZmljLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ic3lub3AuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaW5mb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb21wb3VuZC5jbGFzcyIvPgogICAgICA8eHM6Z3JvdXAgcmVmPSJnZW5vYmouY2xhc3MiLz4KICAgICAgPHhzOmdyb3VwIHJlZj0iZGVzY29iai5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9InNpZGViYXIubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGlzdC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFkbW9uLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZXNwZWNpZmljLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ic3lub3AuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaW5mb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwcm9jZWR1cmUiLz4KICAgICAgPHhzOmdyb3VwIHJlZj0iZ2Vub2JqLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImJlZ2lucGFnZSIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0icWFuZGFzZXQubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGlzdC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFkbW9uLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZXNwZWNpZmljLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ic3lub3AuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaW5mb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwcm9jZWR1cmUiLz4KICAgICAgPHhzOmdyb3VwIHJlZj0iZ2Vub2JqLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0icmV2ZGVzY3JpcHRpb24ubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGlzdC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFkbW9uLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZXNwZWNpZmljLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ic3lub3AuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaW5mb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwcm9jZWR1cmUiLz4KICAgICAgPHhzOmdyb3VwIHJlZj0iZ2Vub2JqLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0iZm9vdG5vdGUubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGlzdC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVzcGVjaWZpYy5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN5bm9wLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImluZm9ybWFsLmNsYXNzIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJleGFtcGxlLm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imxpc3QuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lc3BlY2lmaWMuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzeW5vcC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmZvcm1hbC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9ImhpZ2hsaWdodHMubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGlzdC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFkbW9uLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPCEtLQogICAgJWZvcm1hbC5jbGFzczsgaXMgZXhwbGljaXRseSBleGNsdWRlZCBmcm9tIG1hbnkgY29udGV4dHMgaW4gd2hpY2gKICAgIHBhcmFncmFwaHMgYXJlIHVzZWQKICAtLT4KICA8eHM6Z3JvdXAgbmFtZT0icGFyYS5taXgiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaXN0LmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYWRtb24uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lc3BlY2lmaWMuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmZvcm1hbC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImZvcm1hbC5jbGFzcyIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0iYWRtb24ubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGlzdC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVzcGVjaWZpYy5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN5bm9wLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImluZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icHJvY2VkdXJlIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ic2lkZWJhciIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFuY2hvciIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImJyaWRnZWhlYWQiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZW1hcmsiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYmVnaW5wYWdlIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJmaWd1cmUubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZXNwZWNpZmljLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ic3lub3AuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmZvcm1hbC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9InRhYmVudHJ5Lm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imxpc3QuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhZG1vbi5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVzcGVjaWZpYy5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJncmFwaGljIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibWVkaWFvYmplY3QiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9Imdsb3NzZGVmLm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imxpc3QuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lc3BlY2lmaWMuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzeW5vcC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmZvcm1hbC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImZvcm1hbC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InJlbWFyayIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9ImxlZ2Fsbm90aWNlLm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imxpc3QuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhZG1vbi5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVzcGVjaWZpYy5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJibG9ja3F1b3RlIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImJlZ2lucGFnZSIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0idGV4dG9iamVjdC5taXgiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaXN0LmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYWRtb24uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lc3BlY2lmaWMuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYmxvY2txdW90ZSIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtZWRpYW9iamVjdC5taXgiIGFic3RyYWN0PSJ0cnVlIi8+CiAgPHhzOmdyb3VwIG5hbWU9Imxpc3RwcmVhbWJsZS5taXgiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhZG1vbi5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVzcGVjaWZpYy5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN5bm9wLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImluZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czpncm91cCByZWY9Imdlbm9iai5jbGFzcyIvPgogICAgICA8eHM6Z3JvdXAgcmVmPSJkZXNjb2JqLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImJlZ2lucGFnZSIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8IS0tIENoYXJhY3Rlci1sZXZlbCBtaXh0dXJlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBzZ21sLmZlYXR1cmVzIC0tPgogIDwhLS0gbm90IFtzZ21sLmZlYXR1cmVzWyAtLT4KICA8IS0tIF1dIG5vdCBzZ21sLmZlYXR1cmVzIC0tPgogIDwhLS0KICAgICAgICAgICAgICAgICAgICAgICAgI1BDRCB4cmVmIHdvcmQgbGluayBjcHRyIGJhc2UgZG5mbyBvdGhyIGlub2IgKHN5bm9wKQogICAgcGFyYS5jaGFyLm1peCAgICAgICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYCiAgICB0aXRsZS5jaGFyLm1peCAgICAgICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIFgKICAgIG5keHRlcm0uY2hhci5taXggICAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgYQogICAgY3B0ci5jaGFyLm1peCAgICAgICAgIFggICAgICAgICAgICAgIFggICAgWCAgICBYICAgICAgICAgWCAgICBhCiAgICBzbWFsbGNwdHIuY2hhci5taXggICAgWCAgICAgICAgICAgICAgICAgICBiICAgICAgICAgICAgICAgICAgIGEKICAgIHdvcmQuY2hhci5taXggICAgICAgICBYICAgICAgICAgYyAgICBYICAgICAgICAgWCAgICAgICAgIFggICAgYQogICAgZG9jaW5mby5jaGFyLm1peCAgICAgIFggICAgICAgICBkICAgIFggICAgYiAgICAgICAgICAgICAgWCAgICBhCiAgICAKICAgIGEuIEp1c3QgSW5saW5lR3JhcGhpYzsgbm8gSW5saW5lRXF1YXRpb24uCiAgICBiLiBKdXN0IFJlcGxhY2VhYmxlOyBubyBvdGhlciBjb21wdXRlciB0ZXJtcy4KICAgIGMuIEp1c3QgRW1waGFzaXMgYW5kIFRyYWRlbWFyazsgbm8gb3RoZXIgd29yZCBlbGVtZW50cy4KICAgIGQuIEp1c3QgQWNyb255bSwgRW1waGFzaXMsIGFuZCBUcmFkZW1hcms7IG5vIG90aGVyIHdvcmQgZWxlbWVudHMuCiAgLS0+CiAgPHhzOmdyb3VwIG5hbWU9InBhcmEuY2hhci5taXgiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4cmVmLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Imdlbi5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRlY2guY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJhc2UuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZG9jaW5mby5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ib3RoZXIuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lb2JqLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN5bm9wLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9InRpdGxlLmNoYXIubWl4Ij4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ieHJlZi5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJnZW4uY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluay5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0ZWNoLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJiYXNlLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImRvY2luZm8uY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9Im90aGVyLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZW9iai5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJuZHh0ZXJtLmNoYXIubWl4Ij4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ieHJlZi5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJnZW4uY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluay5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0ZWNoLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJiYXNlLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImRvY2luZm8uY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9Im90aGVyLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZWdyYXBoaWMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZW1lZGlhb2JqZWN0Ii8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJjcHRyLmNoYXIubWl4Ij4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluay5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0ZWNoLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJiYXNlLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJvdGhlci5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmxpbmVncmFwaGljIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmxpbmVtZWRpYW9iamVjdCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYmVnaW5wYWdlIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJzbWFsbGNwdHIuY2hhci5taXgiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZXBsYWNlYWJsZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lZ3JhcGhpYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lbWVkaWFvYmplY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImJlZ2lucGFnZSIvPgogICAgICA8L3hzOmNob2ljZT4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0id29yZC5jaGFyLm1peCI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFjcm9ueW0iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImVtcGhhc2lzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0cmFkZW1hcmsiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmsuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJhc2UuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9Im90aGVyLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZWdyYXBoaWMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZW1lZGlhb2JqZWN0Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9ImRvY2luZm8uY2hhci5taXgiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImVtcGhhc2lzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0cmFkZW1hcmsiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InJlcGxhY2VhYmxlIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ib3RoZXIuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lZ3JhcGhpYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lbWVkaWFvYmplY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPCEtLSBFTlRJVFkgJSBiaWJsaW9jb21wb25lbnQubWl4IChzZWUgQmlibGlvZ3JhcGhpYyBzZWN0aW9uLCBiZWxvdykgLS0+CiAgPCEtLSBFTlRJVFkgJSBwZXJzb24uaWRlbnQubWl4IChzZWUgQmlibGlvZ3JhcGhpYyBzZWN0aW9uLCBiZWxvdykgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gRW50aXRpZXMgZm9yIGF0dHJpYnV0ZXMgYW5kIGF0dHJpYnV0ZSBjb21wb25lbnRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEVmZmVjdGl2aXR5IGF0dHJpYnV0ZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLQogICAgQXJjaDogQ29tcHV0ZXIgb3IgY2hpcCBhcmNoaXRlY3R1cmUgdG8gd2hpY2ggZWxlbWVudCBhcHBsaWVzOyBubwogICAgZGVmYXVsdAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcmNoLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFyY2giLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gQ29uZGl0aW9uOiBHZW5lcmFsLXB1cnBvc2UgZWZmZWN0aXZpdHkgYXR0cmlidXRlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25kaXRpb24uYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29uZGl0aW9uIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIENvbmZvcm1hbmNlOiBTdGFuZGFyZHMgY29uZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25mb3JtYW5jZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb25mb3JtYW5jZSIgdHlwZT0ieHM6Tk1UT0tFTlMiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gT1M6IE9wZXJhdGluZyBzeXN0ZW0gdG8gd2hpY2ggZWxlbWVudCBhcHBsaWVzOyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvcy5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvcyIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBSZXZpc2lvbjogRWRpdG9yaWFsIHJldmlzaW9uIHRvIHdoaWNoIGVsZW1lbnQgYmVsb25nczsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmV2aXNpb24uYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmV2aXNpb24iLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gU2VjdXJpdHk6IFNlY3VyaXR5IGNsYXNzaWZpY2F0aW9uOyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN1cml0eS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZWN1cml0eSIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLQogICAgVXNlckxldmVsOiBMZXZlbCBvZiB1c2VyIGV4cGVyaWVuY2UgdG8gd2hpY2ggZWxlbWVudCBhcHBsaWVzOyBubwogICAgZGVmYXVsdAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ1c2VybGV2ZWwuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXNlcmxldmVsIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIFZlbmRvcjogQ29tcHV0ZXIgdmVuZG9yIHRvIHdoaWNoIGVsZW1lbnQgYXBwbGllczsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idmVuZG9yLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZlbmRvciIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBXb3Jkc2l6ZTogQ29tcHV0ZXIgd29yZCBzaXplICgzMiBiaXQsIDY0IGJpdCwgZXRjLik7IG5vIGRlZmF1bHQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IndvcmRzaXplLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9IndvcmRzaXplIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZWZmZWN0aXZpdHkuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFyY2guYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb25kaXRpb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb25mb3JtYW5jZS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9zLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmV2aXNpb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN1cml0eS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InVzZXJsZXZlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InZlbmRvci5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9IndvcmRzaXplLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBDb21tb24gYXR0cmlidXRlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gSWQ6IFVuaXF1ZSBpZGVudGlmaWVyIG9mIGVsZW1lbnQ7IG5vIGRlZmF1bHQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImlkLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czpJRCIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLQogICAgSWQ6IFVuaXF1ZSBpZGVudGlmaWVyIG9mIGVsZW1lbnQ7IGEgdmFsdWUgbXVzdCBiZSBzdXBwbGllZDsgbm8KICAgIGRlZmF1bHQKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaWRyZXEuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaWQiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzOklEIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tCiAgICBMYW5nOiBJbmRpY2F0b3Igb2YgbGFuZ3VhZ2UgaW4gd2hpY2ggZWxlbWVudCBpcyB3cml0dGVuLCBmb3IKICAgIHRyYW5zbGF0aW9uLCBjaGFyYWN0ZXIgc2V0IG1hbmFnZW1lbnQsIGV0Yy47IG5vIGRlZmF1bHQKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGFuZy5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsYW5nIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIFJlbWFwOiBQcmV2aW91cyByb2xlIG9mIGVsZW1lbnQgYmVmb3JlIGNvbnZlcnNpb247IG5vIGRlZmF1bHQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlbWFwLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlbWFwIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIFJvbGU6IE5ldyByb2xlIG9mIGVsZW1lbnQgaW4gbG9jYWwgZW52aXJvbm1lbnQ7IG5vIGRlZmF1bHQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icm9sZSIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLQogICAgWFJlZkxhYmVsOiBBbHRlcm5hdGUgbGFiZWxpbmcgc3RyaW5nIGZvciBYUmVmIHRleHQgZ2VuZXJhdGlvbjsKICAgIGRlZmF1bHQgaXMgdXN1YWxseSB0aXRsZSBvciBvdGhlciBhcHByb3ByaWF0ZSBsYWJlbCB0ZXh0IGFscmVhZHkKICAgIGNvbnRhaW5lZCBpbiBlbGVtZW50CiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InhyZWZsYWJlbC5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ4cmVmbGFiZWwiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0KICAgIFJldmlzaW9uRmxhZzogUmV2aXNpb24gc3RhdHVzIG9mIGVsZW1lbnQ7IGRlZmF1bHQgaXMgdGhhdCBlbGVtZW50CiAgICB3YXNuJ3QgcmV2aXNlZAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZXZpc2lvbmZsYWcuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmV2aXNpb25mbGFnIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2hhbmdlZCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJhZGRlZCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJkZWxldGVkIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im9mZiIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkaXI6IEJpZGlyZWN0aW9uYWwgb3ZlcnJpZGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImRpci5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkaXIiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsdHIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icnRsIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxybyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJybG8iLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0geG1sOmJhc2U6IGJhc2UgVVJJIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ4bWwtYmFzZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSByZWY9InhtbDpiYXNlIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIFJvbGUgaXMgaW5jbHVkZWQgZXhwbGljaXRseSBvbiBlYWNoIGVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbW1vbi5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaWQuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYW5nLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVtYXAuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ4cmVmbGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXZpc2lvbmZsYWcuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlZmZlY3Rpdml0eS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImRpci5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InhtbC1iYXNlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBSb2xlIGlzIGluY2x1ZGVkIGV4cGxpY2l0bHkgb24gZWFjaCBlbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpZHJlcS5jb21tb24uYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImlkcmVxLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFuZy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlbWFwLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ieHJlZmxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmV2aXNpb25mbGFnLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZWZmZWN0aXZpdHkuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJkaXIuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ4bWwtYmFzZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gU2VtaS1jb21tb24gYXR0cmlidXRlcyBhbmQgb3RoZXIgYXR0cmlidXRlIGVudGl0aWVzIC4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tCiAgICBFbnRpdHlSZWY6IE5hbWUgb2YgYW4gZXh0ZXJuYWwgZW50aXR5IGNvbnRhaW5pbmcgdGhlIGNvbnRlbnQKICAgIG9mIHRoZSBncmFwaGljCiAgLS0+CiAgPCEtLQogICAgRmlsZVJlZjogRmlsZW5hbWUsIHF1YWxpZmllZCBieSBhIHBhdGhuYW1lIGlmIGRlc2lyZWQsCiAgICBkZXNpZ25hdGluZyB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBjb250ZW50IG9mIHRoZSBncmFwaGljCiAgLS0+CiAgPCEtLSBGb3JtYXQ6IE5vdGF0aW9uIG9mIHRoZSBlbGVtZW50IGNvbnRlbnQsIGlmIGFueSAtLT4KICA8IS0tIFNyY0NyZWRpdDogSW5mb3JtYXRpb24gYWJvdXQgdGhlIHNvdXJjZSBvZiB0aGUgR3JhcGhpYyAtLT4KICA8IS0tIFdpZHRoOiBTYW1lIGFzIENBTFMgcmVwcm93aWQgKGRlc2lyZWQgd2lkdGgpIC0tPgogIDwhLS0gRGVwdGg6IFNhbWUgYXMgQ0FMUyByZXByb2RlcCAoZGVzaXJlZCBkZXB0aCkgLS0+CiAgPCEtLQogICAgQWxpZ246IFNhbWUgYXMgQ0FMUyBocGxhY2Ugd2l0aCAnbm9uZScgcmVtb3ZlZDsgI0lNUExJRUQgbWVhbnMKICAgIGFwcGxpY2F0aW9uLXNwZWNpZmljCiAgLS0+CiAgPCEtLSBTY2FsZTogQ29uZmxhdGlvbiBvZiBDQUxTIGhzY2FsZSBhbmQgdnNjYWxlIC0tPgogIDwhLS0gU2NhbGVmaXQ6IFNhbWUgYXMgQ0FMUyBzY2FsZWZpdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ3JhcGhpY3MuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZW50aXR5cmVmIiB0eXBlPSJ4czpFTlRJVFkiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZmlsZXJlZiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmb3JtYXQiIHR5cGU9Im5vdGF0aW9uLmNsYXNzIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNyY2NyZWRpdCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ3aWR0aCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb250ZW50d2lkdGgiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZGVwdGgiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29udGVudGRlcHRoIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGVmdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyaWdodCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjZW50ZXIiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idmFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idG9wIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im1pZGRsZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJib3R0b20iLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2NhbGUiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2NhbGVmaXQiIHR5cGU9Inllc29ybm8uYXR0dmFscyIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLQogICAgQWN0aW9uOiBLZXkgY29tYmluYXRpb24gdHlwZTsgZGVmYXVsdCBpcyB1bnNwZWNpZmllZCBpZiBvbmUKICAgIGNoaWxkIGVsZW1lbnQsIFNpbXVsIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmU7IGlmIHZhbHVlIGlzCiAgICBPdGhlciwgdGhlIE90aGVyQWN0aW9uIGF0dHJpYnV0ZSBtdXN0IGhhdmUgYSBub25lbXB0eSB2YWx1ZQogIC0tPgogIDwhLS0gT3RoZXJBY3Rpb246IFVzZXItZGVmaW5lZCBrZXkgY29tYmluYXRpb24gdHlwZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ia2V5YWN0aW9uLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFjdGlvbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNsaWNrIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImRvdWJsZS1jbGljayIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwcmVzcyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZXEiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2ltdWwiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3RoZXIiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib3RoZXJhY3Rpb24iLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0KICAgIExhYmVsOiBJZGVudGlmeWluZyBudW1iZXIgb3Igc3RyaW5nOyBkZWZhdWx0IGlzIHVzdWFsbHkgdGhlCiAgICBhcHByb3ByaWF0ZSBudW1iZXIgb3Igc3RyaW5nIGF1dG9nZW5lcmF0ZWQgYnkgYSBmb3JtYXR0ZXIKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGFiZWwuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGFiZWwiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0geG1sOnNwYWNlOiB3aGl0ZXNwYWNlIHRyZWF0bWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ieG1sLXNwYWNlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIHJlZj0ieG1sOnNwYWNlIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tCiAgICBGb3JtYXQ6IHdoZXRoZXIgZWxlbWVudCBpcyBhc3N1bWVkIHRvIGNvbnRhaW4gc2lnbmlmaWNhbnQgd2hpdGUKICAgIHNwYWNlCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxpbmVzcGVjaWZpYy5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmb3JtYXQiIGRlZmF1bHQ9ImxpbmVzcGVjaWZpYyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxpbmVzcGVjaWZpYyIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ieG1sLXNwYWNlLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsaW5lbnVtYmVyaW5nIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibnVtYmVyZWQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idW5udW1iZXJlZCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb250aW51YXRpb24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjb250aW51ZXMiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVzdGFydHMiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3RhcnRpbmdsaW5lbnVtYmVyIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Imxhbmd1YWdlIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIExpbmtlbmQ6IGxpbmsgdG8gcmVsYXRlZCBpbmZvcm1hdGlvbjsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGlua2VuZC5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsaW5rZW5kIiB0eXBlPSJ4czpJRFJFRiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBMaW5rZW5kOiByZXF1aXJlZCBsaW5rIHRvIHJlbGF0ZWQgaW5mb3JtYXRpb24gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxpbmtlbmRyZXEuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGlua2VuZCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6SURSRUYiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0KICAgIExpbmtlbmRzOiBsaW5rIHRvIG9uZSBvciBtb3JlIHNldHMgb2YgcmVsYXRlZCBpbmZvcm1hdGlvbjsgbm8KICAgIGRlZmF1bHQKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGlua2VuZHMuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGlua2VuZHMiIHR5cGU9InhzOklEUkVGUyIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1hcmsuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWFyayIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBNb3JlSW5mbzogd2hldGhlciBlbGVtZW50J3MgY29udGVudCBoYXMgYW4gYXNzb2NpYXRlZCBSZWZFbnRyeSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibW9yZWluZm8uYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibW9yZWluZm8iIGRlZmF1bHQ9Im5vbmUiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZWZlbnRyeSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJub25lIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIFBhZ2VudW06IG51bWJlciBvZiBwYWdlIG9uIHdoaWNoIGVsZW1lbnQgYXBwZWFyczsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGFnZW51bS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwYWdlbnVtIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tCiAgICBTdGF0dXM6IEVkaXRvcmlhbCBvciBwdWJsaWNhdGlvbiBzdGF0dXMgb2YgdGhlIGVsZW1lbnQKICAgIGl0IGFwcGxpZXMgdG8sIHN1Y2ggYXMgImluIHJldmlldyIgb3IgImFwcHJvdmVkIGZvciBkaXN0cmlidXRpb24iCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN0YXR1cy5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzdGF0dXMiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0KICAgIFdpZHRoOiB3aWR0aCBvZiB0aGUgbG9uZ2VzdCBsaW5lIGluIHRoZSBlbGVtZW50IHRvIHdoaWNoIGl0CiAgICBwZXJ0YWlucywgaW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0id2lkdGguYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0id2lkdGgiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIFRpdGxlIGVsZW1lbnRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRpdGxlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0aXRsZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0aXRsZS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0aXRsZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0aXRsZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0aXRsZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhZ2VudW0uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0aXRsZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdGl0bGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0aXRsZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRpdGxlYWJicmV2LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0aXRsZWFiYnJldiI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0aXRsZS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0aXRsZWFiYnJldi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0aXRsZWFiYnJldi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0aXRsZWFiYnJldi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRpdGxlYWJicmV2LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0aXRsZWFiYnJldi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHRpdGxlYWJicmV2Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3VidGl0bGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InN1YnRpdGxlIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRpdGxlLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN1YnRpdGxlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN1YnRpdGxlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN1YnRpdGxlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3VidGl0bGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN1YnRpdGxlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc3VidGl0bGUubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEJpYmxpb2dyYXBoaWMgZW50aXRpZXMgYW5kIGVsZW1lbnRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLQogICAgVGhlIGJpYmxpb2dyYXBoaWMgZWxlbWVudHMgYXJlIHR5cGljYWxseSB1c2VkIGluIHRoZSBkb2N1bWVudAogICAgaGllcmFyY2h5LiBUaGV5IGRvIG5vdCBhcHBlYXIgaW4gY29udGVudCBtb2RlbHMgb2YgaW5mb3JtYXRpb24KICAgIHBvb2wgZWxlbWVudHMuICBTZWUgYWxzbyB0aGUgZG9jdW1lbnQgaW5mb3JtYXRpb24gZWxlbWVudHMsCiAgICBiZWxvdy4KICAtLT4KICA8eHM6Z3JvdXAgbmFtZT0icGVyc29uLmlkZW50Lm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imhvbm9yaWZpYyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImZpcnN0bmFtZSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN1cm5hbWUiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lYWdlIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ib3RoZXJuYW1lIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYWZmaWxpYXRpb24iLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhdXRob3JibHVyYiIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImNvbnRyaWIiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9ImJpYmxpb2NvbXBvbmVudC5taXgiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhYmJyZXYiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhYnN0cmFjdCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFkZHJlc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcnRwYWdlbnVtcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImF1dGhvciIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImF1dGhvcmdyb3VwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYXV0aG9yaW5pdGlhbHMiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiaWJsaW9taXNjIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYmlibGlvc2V0Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iY29sbGFiIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iY29uZmdyb3VwIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iY29udHJhY3RudW0iLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb250cmFjdHNwb25zb3IiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb3B5cmlnaHQiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb3JwYXV0aG9yIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iY29ycG5hbWUiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb3JwY3JlZGl0Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZGF0ZSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImVkaXRpb24iLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlZGl0b3IiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbnZwYXJ0bnVtYmVyIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaXNibiIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imlzc24iLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpc3N1ZW51bSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im9yZ25hbWUiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiaWJsaW9pZCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImNpdGViaWJsaW9pZCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImJpYmxpb3NvdXJjZSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImJpYmxpb3JlbGF0aW9uIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYmlibGlvY292ZXJhZ2UiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJvdGhlcmNyZWRpdCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InBhZ2VudW1zIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icHJpbnRoaXN0b3J5Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icHJvZHVjdG5hbWUiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwcm9kdWN0bnVtYmVyIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icHViZGF0ZSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InB1Ymxpc2hlciIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InB1Ymxpc2hlcm5hbWUiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwdWJzbnVtYmVyIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icmVsZWFzZWluZm8iLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZXZoaXN0b3J5Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ic2VyaWVzdm9sbnVtcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN1YnRpdGxlIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0idGl0bGUiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0aXRsZWFiYnJldiIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InZvbHVtZW51bSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImNpdGV0aXRsZSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InBlcnNvbm5hbWUiLz4KICAgICAgPHhzOmdyb3VwIHJlZj0icGVyc29uLmlkZW50Lm1peCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPCEtLSBJIGRvbid0IHRoaW5rIHRoaXMgaXMgd2VsbCBwbGFjZWQsIGJ1dCBpdCBuZWVkcyB0byBiZSBoZXJlIGJlY2F1c2Ugb2YgLS0+CiAgPCEtLSB0aGUgcmVmZXJlbmNlIHRvIGJpYmxpb2NvbXBvbmVudC5taXggLS0+CiAgPHhzOmdyb3VwIG5hbWU9ImluZm8uY2xhc3MiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJncmFwaGljIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibWVkaWFvYmplY3QiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsZWdhbG5vdGljZSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im1vZGVzcGVjIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ic3ViamVjdHNldCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImtleXdvcmRzZXQiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpdGVybXNldCIvPgogICAgICA8eHM6Z3JvdXAgcmVmPSJiaWJsaW9jb21wb25lbnQubWl4Ii8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDwhLS0gQmlibGlvTGlzdCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb2xpc3Qucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImJpYmxpb2xpc3QiIHN1YnN0aXR1dGlvbkdyb3VwPSJsaXN0LmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImZvcm1hbG9iamVjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImJpYmxpb2VudHJ5Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImJpYmxpb21peGVkIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb2xpc3QuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYmlibGlvbGlzdC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9saXN0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvbGlzdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYmlibGlvbGlzdC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJpYmxpb2xpc3QubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9lbnRyeS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYmlibGlvZW50cnkiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFydGljbGVpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iYmlibGlvY29tcG9uZW50Lm1peCIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvZW50cnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYmlibGlvZW50cnkuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvZW50cnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9lbnRyeS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYmlibGlvZW50cnkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBiaWJsaW9lbnRyeS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb21peGVkLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJiaWJsaW9taXhlZCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9ImJpYmxpb2NvbXBvbmVudC5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImJpYmxpb21zZXQiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb21peGVkLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb21peGVkLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb21peGVkLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvbWl4ZWQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJpYmxpb21peGVkLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYmlibGlvbWl4ZWQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcnRpY2xlaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXJ0aWNsZWluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhcnRpY2xlaW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBhcnRpY2xlaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcnRpY2xlaW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFydGljbGVpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhcnRpY2xlaW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGFydGljbGVpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvc2V0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJiaWJsaW9zZXQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iYmlibGlvY29tcG9uZW50Lm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9zZXQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYmlibGlvc2V0LmVsZW1lbnQgLS0+CiAgPCEtLSBSZWxhdGlvbjogUmVsYXRpb25zaGlwIG9mIGVsZW1lbnRzIGNvbnRhaW5lZCB3aXRoaW4gQmlibGlvU2V0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9zZXQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlbGF0aW9uIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9zZXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJpYmxpb3NldC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJpYmxpb3NldC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb21zZXQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImJpYmxpb21zZXQiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJiaWJsaW9jb21wb25lbnQubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiaWJsaW9tc2V0Ii8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9tc2V0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb21zZXQuZWxlbWVudCAtLT4KICA8IS0tIFJlbGF0aW9uOiBSZWxhdGlvbnNoaXAgb2YgZWxlbWVudHMgY29udGFpbmVkIHdpdGhpbiBCaWJsaW9NU2V0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9tc2V0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZWxhdGlvbiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvbXNldC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYmlibGlvbXNldC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJpYmxpb21zZXQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9taXNjLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJiaWJsaW9taXNjIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvbWlzYy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBiaWJsaW9taXNjLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb21pc2MuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9taXNjLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBiaWJsaW9taXNjLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYmlibGlvbWlzYy5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gU3ViamVjdCwgS2V5d29yZCwgYW5kIElUZXJtU2V0IGVsZW1lbnRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3ViamVjdHNldC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3ViamVjdHNldCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzdWJqZWN0Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN1YmplY3RzZXQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc3ViamVjdHNldC5lbGVtZW50IC0tPgogIDwhLS0gU2NoZW1lOiBDb250cm9sbGVkIHZvY2FidWxhcnkgZW1wbG95ZWQgaW4gU3ViamVjdFRlcm1zIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdWJqZWN0c2V0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzY2hlbWUiIHR5cGU9InhzOk5NVE9LRU4iLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN1YmplY3RzZXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN1YmplY3RzZXQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzdWJqZWN0c2V0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3ViamVjdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3ViamVjdCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzdWJqZWN0dGVybSIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdWJqZWN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN1YmplY3QuZWxlbWVudCAtLT4KICA8IS0tCiAgICBXZWlnaHQ6IFJhbmtpbmcgb2YgdGhpcyBncm91cCBvZiBTdWJqZWN0VGVybXMgcmVsYXRpdmUKICAgIHRvIG90aGVycywgMCBpcyBsb3csIG5vIGhpZ2hlc3QgdmFsdWUgc3BlY2lmaWVkCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN1YmplY3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9IndlaWdodCIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3ViamVjdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc3ViamVjdC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHN1YmplY3QubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdWJqZWN0dGVybS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3ViamVjdHRlcm0iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3ViamVjdHRlcm0uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc3ViamVjdHRlcm0uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3ViamVjdHRlcm0uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdWJqZWN0dGVybS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc3ViamVjdHRlcm0uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzdWJqZWN0dGVybS5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2Ygc3ViamVjdHNldC5jb250ZW50Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ia2V5d29yZHNldC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ia2V5d29yZHNldCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJrZXl3b3JkIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImtleXdvcmRzZXQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Yga2V5d29yZHNldC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJrZXl3b3Jkc2V0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ia2V5d29yZHNldC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Yga2V5d29yZHNldC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGtleXdvcmRzZXQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJrZXl3b3JkLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJrZXl3b3JkIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImtleXdvcmQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Yga2V5d29yZC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJrZXl3b3JkLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ia2V5d29yZC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Yga2V5d29yZC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGtleXdvcmQubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIGtleXdvcmRzZXQuY29udGVudC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Iml0ZXJtc2V0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJpdGVybXNldCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmRleHRlcm0iLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaXRlcm1zZXQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaXRlcm1zZXQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaXRlcm1zZXQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpdGVybXNldC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaXRlcm1zZXQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBpdGVybXNldC5tb2R1bGUgLS0+CiAgPCEtLSBCaWJsaW9ncmFwaGljIGluZm8gZm9yICJibG9ja3MiIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJibG9ja2luZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImJsb2NraW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmZvLmNsYXNzIi8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJsb2NraW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBibG9ja2luZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmxvY2tpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmxvY2tpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBibG9ja2luZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBibG9ja2luZm8ubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIENvbXBvdW5kIChzZWN0aW9uLWlzaCkgZWxlbWVudHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBNZXNzYWdlIHNldCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtc2dzZXQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im1zZ3NldCIgc3Vic3RpdHV0aW9uR3JvdXA9ImNvbXBvdW5kLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImZvcm1hbG9iamVjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1zZ2VudHJ5Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzaW1wbGVtc2dlbnRyeSIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dzZXQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbXNnc2V0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ3NldC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ3NldC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbXNnc2V0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbXNnc2V0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnZW50cnkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im1zZ2VudHJ5Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1zZyIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJtc2dpbmZvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtc2dleHBsYW4iLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNnZW50cnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbXNnZW50cnkuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnZW50cnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dlbnRyeS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbXNnZW50cnkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtc2dlbnRyeS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNpbXBsZW1zZ2VudHJ5LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzaW1wbGVtc2dlbnRyeSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im1zZ3RleHQiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtc2dleHBsYW4iLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2ltcGxlbXNnZW50cnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2ltcGxlbXNnZW50cnkuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2ltcGxlbXNnZW50cnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImF1ZGllbmNlIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImxldmVsIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im9yaWdpbiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2ltcGxlbXNnZW50cnkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNpbXBsZW1zZ2VudHJ5LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2ltcGxlbXNnZW50cnkubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtc2cucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im1zZyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im1zZ21haW4iLz4KICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtc2dzdWIiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ibXNncmVsIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtc2cuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNnLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtc2cuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtc2cubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtc2dtYWluLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtc2dtYWluIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0aXRsZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibXNndGV4dCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dtYWluLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1zZ21haW4uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnbWFpbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ21haW4ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1zZ21haW4uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtc2dtYWluLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnc3ViLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtc2dzdWIiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtc2d0ZXh0Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ3N1Yi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtc2dzdWIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnc3ViLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNnc3ViLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtc2dzdWIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtc2dzdWIubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtc2dyZWwucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im1zZ3JlbCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im1zZ3RleHQiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNncmVsLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1zZ3JlbC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtc2dyZWwuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dyZWwucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1zZ3JlbC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1zZ3JlbC5tb2R1bGUgLS0+CiAgPCEtLSBNc2dUZXh0IChkZWZpbmVkIGluIHRoZSBJbmxpbmVzIHNlY3Rpb24sIGJlbG93KSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibXNnaW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtc2dsZXZlbCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibXNnb3JpZyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibXNnYXVkIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1zZ2luZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnaW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ2luZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1zZ2luZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtc2dpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnbGV2ZWwucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im1zZ2xldmVsIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dsZXZlbC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtc2dsZXZlbC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtc2dsZXZlbC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ2xldmVsLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtc2dsZXZlbC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1zZ2xldmVsLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnb3JpZy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibXNnb3JpZyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNnb3JpZy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtc2dvcmlnLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ29yaWcuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dvcmlnLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtc2dvcmlnLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbXNnb3JpZy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ2F1ZC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibXNnYXVkIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNnYXVkLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1zZ2F1ZC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtc2dhdWQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dhdWQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1zZ2F1ZC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1zZ2F1ZC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ2V4cGxhbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibXNnZXhwbGFuIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0aXRsZSIvPgogICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjb21wb25lbnQubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ2V4cGxhbi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtc2dleHBsYW4uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnZXhwbGFuLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNnZXhwbGFuLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtc2dleHBsYW4uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtc2dleHBsYW4ubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIG1zZ3NldC5jb250ZW50Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGFzay5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idGFzayIgc3Vic3RpdHV0aW9uR3JvdXA9ImNvbXBvdW5kLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0YXNrc3VtbWFyeSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0YXNrcHJlcmVxdWlzaXRlcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icHJvY2VkdXJlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJleGFtcGxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRhc2tyZWxhdGVkIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRhc2suYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdGFzay5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0YXNrLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGFzay5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdGFzay5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHRhc2subW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0YXNrc3VtbWFyeS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idGFza3N1bW1hcnkiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0iZm9ybWFsb2JqZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0YXNrc3VtbWFyeS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0YXNrc3VtbWFyeS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0YXNrc3VtbWFyeS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRhc2tzdW1tYXJ5LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0YXNrc3VtbWFyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHRhc2tzdW1tYXJ5Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGFza3ByZXJlcXVpc2l0ZXMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRhc2twcmVyZXF1aXNpdGVzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImZvcm1hbG9iamVjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbXBvbmVudC5taXgiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGFza3ByZXJlcXVpc2l0ZXMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdGFza3ByZXJlcXVpc2l0ZXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGFza3ByZXJlcXVpc2l0ZXMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0YXNrcHJlcmVxdWlzaXRlcy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdGFza3ByZXJlcXVpc2l0ZXMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0YXNrcHJlcmVxdWlzaXRlcy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRhc2tyZWxhdGVkLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0YXNrcmVsYXRlZCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmxvY2tpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjb21wb25lbnQubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRhc2tyZWxhdGVkLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRhc2tyZWxhdGVkLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRhc2tyZWxhdGVkLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGFza3JlbGF0ZWQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRhc2tyZWxhdGVkLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdGFza3JlbGF0ZWQubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIHRhc2suY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSBRYW5kQVNldCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InFhbmRhc2V0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJxYW5kYXNldCIgc3Vic3RpdHV0aW9uR3JvdXA9ImNvbXBvdW5kLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImZvcm1hbG9iamVjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icWFuZGFzZXQubWl4Ii8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InFhbmRhZGl2Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJxYW5kYWVudHJ5Ii8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InFhbmRhc2V0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHFhbmRhc2V0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InFhbmRhc2V0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkZWZhdWx0bGFiZWwiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJxYW5kYSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJudW1iZXIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibm9uZSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icWFuZGFzZXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHFhbmRhc2V0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcWFuZGFzZXQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJxYW5kYWRpdi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icWFuZGFkaXYiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0iZm9ybWFsb2JqZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJxYW5kYXNldC5taXgiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icWFuZGFkaXYiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InFhbmRhZW50cnkiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icWFuZGFkaXYuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcWFuZGFkaXYuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icWFuZGFkaXYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJxYW5kYWRpdi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcWFuZGFkaXYuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBxYW5kYWRpdi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InFhbmRhZW50cnkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InFhbmRhZW50cnkiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJyZXZoaXN0b3J5Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJxdWVzdGlvbiIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iYW5zd2VyIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InFhbmRhZW50cnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcWFuZGFlbnRyeS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJxYW5kYWVudHJ5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icWFuZGFlbnRyeS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcWFuZGFlbnRyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHFhbmRhZW50cnkubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJxdWVzdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icXVlc3Rpb24iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImxhYmVsIi8+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InFhbmRhc2V0Lm1peCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJxdWVzdGlvbi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBxdWVzdGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJxdWVzdGlvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InF1ZXN0aW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBxdWVzdGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHF1ZXN0aW9uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYW5zd2VyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhbnN3ZXIiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImxhYmVsIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icWFuZGFzZXQubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJxYW5kYWVudHJ5Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFuc3dlci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBhbnN3ZXIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYW5zd2VyLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYW5zd2VyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhbnN3ZXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhbnN3ZXIubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsYWJlbC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibGFiZWwiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0id29yZC5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBsYWJlbC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsYWJlbC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBsYWJlbC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGxhYmVsLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBxYW5kYXNldC5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIFByb2NlZHVyZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByb2NlZHVyZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icHJvY2VkdXJlIiBzdWJzdGl0dXRpb25Hcm91cD0iY29tcG91bmQuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0iZm9ybWFsb2JqZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjb21wb25lbnQubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic3RlcCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcm9jZWR1cmUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcHJvY2VkdXJlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByb2NlZHVyZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByb2NlZHVyZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcHJvY2VkdXJlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcHJvY2VkdXJlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3RlcC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3RlcCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICAgICAgICA8eHM6c2VxdWVuY2UgbWluT2NjdXJzPSIwIj4KICAgICAgICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdWJzdGVwcyIvPgogICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdGVwYWx0ZXJuYXRpdmVzIi8+CiAgICAgICAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN1YnN0ZXBzIi8+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdGVwYWx0ZXJuYXRpdmVzIi8+CiAgICAgICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjb21wb25lbnQubWl4Ii8+CiAgICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGVwLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN0ZXAuZWxlbWVudCAtLT4KICA8IS0tIFBlcmZvcm1hbmNlOiBXaGV0aGVyIHRoZSBTdGVwIG11c3QgYmUgcGVyZm9ybWVkIC0tPgogIDwhLS0gbm90ICNSRVFVSVJFRCEgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN0ZXAuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InBlcmZvcm1hbmNlIiBkZWZhdWx0PSJyZXF1aXJlZCI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im9wdGlvbmFsIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlcXVpcmVkIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGVwLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzdGVwLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc3RlcC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN1YnN0ZXBzLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzdWJzdGVwcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzdGVwIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN1YnN0ZXBzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN1YnN0ZXBzLmVsZW1lbnQgLS0+CiAgPCEtLSBQZXJmb3JtYW5jZTogd2hldGhlciBlbnRpcmUgc2V0IG9mIHN1YnN0ZXBzIG11c3QgYmUgcGVyZm9ybWVkIC0tPgogIDwhLS0gbm90ICNSRVFVSVJFRCEgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN1YnN0ZXBzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwZXJmb3JtYW5jZSIgZGVmYXVsdD0icmVxdWlyZWQiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvcHRpb25hbCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZXF1aXJlZCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3Vic3RlcHMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN1YnN0ZXBzLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc3Vic3RlcHMubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdGVwYWx0ZXJuYXRpdmVzLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzdGVwYWx0ZXJuYXRpdmVzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InN0ZXAiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RlcGFsdGVybmF0aXZlcy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzdGVwYWx0ZXJuYXRpdmVzLmVsZW1lbnQgLS0+CiAgPCEtLSBQZXJmb3JtYW5jZTogV2hldGhlciAob25lIG9mKSB0aGUgYWx0ZXJuYXRpdmVzIG11c3QgYmUgcGVyZm9ybWVkIC0tPgogIDwhLS0gbm90ICNSRVFVSVJFRCEgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN0ZXBhbHRlcm5hdGl2ZXMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InBlcmZvcm1hbmNlIiBkZWZhdWx0PSJyZXF1aXJlZCI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im9wdGlvbmFsIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlcXVpcmVkIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGVwYWx0ZXJuYXRpdmVzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzdGVwYWx0ZXJuYXRpdmVzLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc3RlcGFsdGVybmF0aXZlcy5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgcHJvY2VkdXJlLmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gU2lkZWJhciAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2lkZWJhcmluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNpZGViYXJpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2lkZWJhcmluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2lkZWJhcmluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2lkZWJhcmluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzaWRlYmFyaW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2lkZWJhcmluZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzaWRlYmFyaW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNpZGViYXIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNpZGViYXIiIHN1YnN0aXR1dGlvbkdyb3VwPSJjb21wb3VuZC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ic2lkZWJhcmluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImZvcm1hbG9iamVjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNpZGViYXIubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNpZGViYXIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2lkZWJhci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzaWRlYmFyLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2lkZWJhci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2lkZWJhci5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNpZGViYXIubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIHNpZGViYXIuY29udGVudC5tb2RlbCAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBQYXJhZ3JhcGgtcmVsYXRlZCBlbGVtZW50cyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhYnN0cmFjdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYWJzdHJhY3QiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhYnN0cmFjdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBhYnN0cmFjdC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhYnN0cmFjdC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFic3RyYWN0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhYnN0cmFjdC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGFic3RyYWN0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXV0aG9yYmx1cmIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImF1dGhvcmJsdXJiIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0aXRsZSIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXV0aG9yYmx1cmIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYXV0aG9yYmx1cmIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXV0aG9yYmx1cmIuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhdXRob3JibHVyYi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYXV0aG9yYmx1cmIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhdXRob3JibHVyYi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBlcnNvbmJsdXJiLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJwZXJzb25ibHVyYiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBlcnNvbmJsdXJiLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHBlcnNvbmJsdXJiLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBlcnNvbmJsdXJiLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGVyc29uYmx1cmIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHBlcnNvbmJsdXJiLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcGVyc29uYmx1cmIubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJibG9ja3F1b3RlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJibG9ja3F1b3RlIiBzdWJzdGl0dXRpb25Hcm91cD0iaW5mb3JtYWwuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0aXRsZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJhdHRyaWJ1dGlvbiIvPgogICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjb21wb25lbnQubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJsb2NrcXVvdGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYmxvY2txdW90ZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJibG9ja3F1b3RlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmxvY2txdW90ZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYmxvY2txdW90ZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJsb2NrcXVvdGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhdHRyaWJ1dGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXR0cmlidXRpb24iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhdHRyaWJ1dGlvbi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBhdHRyaWJ1dGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhdHRyaWJ1dGlvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImF0dHJpYnV0aW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhdHRyaWJ1dGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGF0dHJpYnV0aW9uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYnJpZGdlaGVhZC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYnJpZGdlaGVhZCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0aXRsZS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJicmlkZ2VoZWFkLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJyaWRnZWhlYWQuZWxlbWVudCAtLT4KICA8IS0tCiAgICBSZW5kZXJhczogSW5kaWNhdGVzIHRoZSBmb3JtYXQgaW4gd2hpY2ggdGhlIEJyaWRnZUhlYWQKICAgIHNob3VsZCBhcHBlYXIKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYnJpZGdlaGVhZC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVuZGVyYXMiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvdGhlciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0MSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0MiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0MyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0NCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0NSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYnJpZGdlaGVhZC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYnJpZGdlaGVhZC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJyaWRnZWhlYWQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZW1hcmsucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlbWFyayI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlbWFyay5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZW1hcmsuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVtYXJrLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVtYXJrLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZW1hcmsuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZW1hcmsubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlcGlncmFwaC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZXBpZ3JhcGgiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImF0dHJpYnV0aW9uIi8+CiAgICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ibGl0ZXJhbGxheW91dCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlcGlncmFwaC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBlcGlncmFwaC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlcGlncmFwaC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVwaWdyYXBoLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBlcGlncmFwaC5hdHRsaXN0IC0tPgogIDwhLS0gQXR0cmlidXRpb24gKGRlZmluZWQgYWJvdmUpIC0tPgogIDwhLS0gZW5kIG9mIGVwaWdyYXBoLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZm9vdG5vdGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImZvb3Rub3RlIiBzdWJzdGl0dXRpb25Hcm91cD0iZ2VuLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZm9vdG5vdGUubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZvb3Rub3RlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGZvb3Rub3RlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZvb3Rub3RlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmb290bm90ZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZm9vdG5vdGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBmb290bm90ZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImhpZ2hsaWdodHMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImhpZ2hsaWdodHMiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaGlnaGxpZ2h0cy5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaGlnaGxpZ2h0cy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBoaWdobGlnaHRzLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImhpZ2hsaWdodHMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJoaWdobGlnaHRzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBoaWdobGlnaHRzLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaGlnaGxpZ2h0cy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZvcm1hbHBhcmEucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImZvcm1hbHBhcmEiIHN1YnN0aXR1dGlvbkdyb3VwPSJwYXJhLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmEiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZm9ybWFscGFyYS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBmb3JtYWxwYXJhLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZvcm1hbHBhcmEuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmb3JtYWxwYXJhLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBmb3JtYWxwYXJhLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZm9ybWFscGFyYS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBhcmEucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InBhcmEiIHN1YnN0aXR1dGlvbkdyb3VwPSJwYXJhLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICAgIDx4czpncm91cCByZWY9InBhcmEubWl4Ii8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYXJhLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHBhcmEuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGFyYS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhcmEucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHBhcmEuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwYXJhLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2ltcGFyYS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2ltcGFyYSIgc3Vic3RpdHV0aW9uR3JvdXA9InBhcmEuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzaW1wYXJhLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNpbXBhcmEuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2ltcGFyYS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNpbXBhcmEucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNpbXBhcmEuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzaW1wYXJhLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYWRtb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNhdXRpb24iIHN1YnN0aXR1dGlvbkdyb3VwPSJhZG1vbi5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iYWRtb24ubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNhdXRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY2F1dGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjYXV0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWRtb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNhdXRpb24uYXR0bGlzdCAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbXBvcnRhbnQiIHN1YnN0aXR1dGlvbkdyb3VwPSJhZG1vbi5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iYWRtb24ubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImltcG9ydGFudC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBpbXBvcnRhbnQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW1wb3J0YW50LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWRtb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGltcG9ydGFudC5hdHRsaXN0IC0tPgogIDx4czplbGVtZW50IG5hbWU9Im5vdGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJhZG1vbi5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iYWRtb24ubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im5vdGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygbm90ZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJub3RlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWRtb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG5vdGUuYXR0bGlzdCAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0aXAiIHN1YnN0aXR1dGlvbkdyb3VwPSJhZG1vbi5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iYWRtb24ubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRpcC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0aXAuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGlwLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWRtb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRpcC5hdHRsaXN0IC0tPgogIDx4czplbGVtZW50IG5hbWU9Indhcm5pbmciIHN1YnN0aXR1dGlvbkdyb3VwPSJhZG1vbi5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iYWRtb24ubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Indhcm5pbmcuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygd2FybmluZy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ3YXJuaW5nLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWRtb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHdhcm5pbmcuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhZG1vbi5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gTGlzdHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEdsb3NzTGlzdCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3NzbGlzdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZ2xvc3NsaXN0IiBzdWJzdGl0dXRpb25Hcm91cD0ibGlzdC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmxvY2tpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Imdsb3NzZW50cnkiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3NsaXN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGdsb3NzbGlzdC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJnbG9zc2xpc3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJnbG9zc2xpc3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGdsb3NzbGlzdC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGdsb3NzbGlzdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3NzZW50cnkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Imdsb3NzZW50cnkiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJnbG9zc3Rlcm0iLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYWNyb255bSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJhYmJyZXYiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0icmV2aGlzdG9yeSIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Imdsb3Nzc2VlIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJnbG9zc2RlZiIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJnbG9zc2VudHJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGdsb3NzZW50cnkuZWxlbWVudCAtLT4KICA8IS0tCiAgICBTb3J0QXM6IFN0cmluZyBieSB3aGljaCB0aGUgR2xvc3NFbnRyeSBpcyB0byBiZSBzb3J0ZWQKICAgIChhbHBoYWJldGl6ZWQpIGluIGxpZXUgb2YgaXRzIHByb3BlciBjb250ZW50CiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3NzZW50cnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNvcnRhcyIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3NlbnRyeS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZ2xvc3NlbnRyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGdsb3NzZW50cnkubW9kdWxlIC0tPgogIDwhLS0gR2xvc3NUZXJtIChkZWZpbmVkIGluIHRoZSBJbmxpbmVzIHNlY3Rpb24sIGJlbG93KSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ2xvc3NkZWYucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Imdsb3NzZGVmIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJnbG9zc2RlZi5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Imdsb3Nzc2VlYWxzbyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJnbG9zc2RlZi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBnbG9zc2RlZi5lbGVtZW50IC0tPgogIDwhLS0gU3ViamVjdDogTGlzdCBvZiBzdWJqZWN0czsga2V5d29yZHMgZm9yIHRoZSBkZWZpbml0aW9uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJnbG9zc2RlZi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3ViamVjdCIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3NkZWYucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGdsb3NzZGVmLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZ2xvc3NkZWYubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJnbG9zc3NlZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZ2xvc3NzZWUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJnbG9zc3NlZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBnbG9zc3NlZS5lbGVtZW50IC0tPgogIDwhLS0KICAgIE90aGVyVGVybTogUmVmZXJlbmNlIHRvIHRoZSBHbG9zc0VudHJ5IHdob3NlIEdsb3NzVGVybQogICAgc2hvdWxkIGJlIGRpc3BsYXllZCBhdCB0aGUgcG9pbnQgb2YgdGhlIEdsb3NzU2VlCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3Nzc2VlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvdGhlcnRlcm0iIHR5cGU9InhzOklEUkVGIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJnbG9zc3NlZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZ2xvc3NzZWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBnbG9zc3NlZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3Nzc2VlYWxzby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZ2xvc3NzZWVhbHNvIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3NzZWVhbHNvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGdsb3Nzc2VlYWxzby5lbGVtZW50IC0tPgogIDwhLS0KICAgIE90aGVyVGVybTogUmVmZXJlbmNlIHRvIHRoZSBHbG9zc0VudHJ5IHdob3NlIEdsb3NzVGVybQogICAgc2hvdWxkIGJlIGRpc3BsYXllZCBhdCB0aGUgcG9pbnQgb2YgdGhlIEdsb3NzU2VlQWxzbwogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJnbG9zc3NlZWFsc28uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im90aGVydGVybSIgdHlwZT0ieHM6SURSRUYiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdsb3Nzc2VlYWxzby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZ2xvc3NzZWVhbHNvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZ2xvc3NzZWVhbHNvLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBnbG9zc2VudHJ5LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gSXRlbWl6ZWRMaXN0IGFuZCBPcmRlcmVkTGlzdCAuLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaXRlbWl6ZWRsaXN0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJpdGVtaXplZGxpc3QiIHN1YnN0aXR1dGlvbkdyb3VwPSJsaXN0LmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImZvcm1hbG9iamVjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibGlzdHByZWFtYmxlLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Imxpc3RpdGVtIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Iml0ZW1pemVkbGlzdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBpdGVtaXplZGxpc3QuZWxlbWVudCAtLT4KICA8IS0tCiAgICBTcGFjaW5nOiBXaGV0aGVyIHRoZSB2ZXJ0aWNhbCBzcGFjZSBpbiB0aGUgbGlzdCBzaG91bGQgYmUKICAgIGNvbXByZXNzZWQKICAtLT4KICA8IS0tCiAgICBNYXJrOiBLZXl3b3JkLCBlLmcuLCBidWxsZXQsIGRhc2gsIGNoZWNrYm94LCBub25lOwogICAgbGlzdCBvZiBrZXl3b3JkcyBhbmQgZGVmYXVsdHMgYXJlIGltcGxlbWVudGF0aW9uIHNwZWNpZmljCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Iml0ZW1pemVkbGlzdC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3BhY2luZyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5vcm1hbCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjb21wYWN0Ii8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtYXJrLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaXRlbWl6ZWRsaXN0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpdGVtaXplZGxpc3QuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBpdGVtaXplZGxpc3QubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvcmRlcmVkbGlzdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ib3JkZXJlZGxpc3QiIHN1YnN0aXR1dGlvbkdyb3VwPSJsaXN0LmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImZvcm1hbG9iamVjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibGlzdHByZWFtYmxlLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Imxpc3RpdGVtIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9yZGVyZWRsaXN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG9yZGVyZWRsaXN0LmVsZW1lbnQgLS0+CiAgPCEtLQogICAgTnVtZXJhdGlvbjogU3R5bGUgb2YgTGlzdEl0ZW0gbnVtYmVyZWQ7IGRlZmF1bHQgaXMgZXhwZWN0ZWQKICAgIHRvIGJlIEFyYWJpYwogIC0tPgogIDwhLS0KICAgIEluaGVyaXROdW06IFNwZWNpZmllcyBmb3IgYSBuZXN0ZWQgbGlzdCB0aGF0IHRoZSBudW1iZXJpbmcKICAgIG9mIExpc3RJdGVtcyBzaG91bGQgaW5jbHVkZSB0aGUgbnVtYmVyIG9mIHRoZSBpdGVtCiAgICB3aXRoaW4gd2hpY2ggdGhleSBhcmUgbmVzdGVkIChlLmcuLCAxYSBhbmQgMWIgd2l0aGluIDEsCiAgICByYXRoZXIgdGhhbiBhIGFuZCBiKQogIC0tPgogIDwhLS0KICAgIENvbnRpbnVhdGlvbjogV2hlcmUgbGlzdCBudW1iZXJpbmcgYmVnaW5zIGFmcmVzaCAoUmVzdGFydHMsCiAgICB0aGUgZGVmYXVsdCkgb3IgY29udGludWVzIHRoYXQgb2YgdGhlIGltbWVkaWF0ZWx5IHByZWNlZGluZwogICAgbGlzdCAoQ29udGludWVzKQogIC0tPgogIDwhLS0KICAgIFNwYWNpbmc6IFdoZXRoZXIgdGhlIHZlcnRpY2FsIHNwYWNlIGluIHRoZSBsaXN0IHNob3VsZCBiZQogICAgY29tcHJlc3NlZAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvcmRlcmVkbGlzdC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibnVtZXJhdGlvbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImFyYWJpYyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ1cHBlcmFscGhhIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imxvd2VyYWxwaGEiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idXBwZXJyb21hbiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsb3dlcnJvbWFuIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImluaGVyaXRudW0iIGRlZmF1bHQ9Imlnbm9yZSI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImluaGVyaXQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaWdub3JlIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbnRpbnVhdGlvbiIgZGVmYXVsdD0icmVzdGFydHMiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjb250aW51ZXMiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVzdGFydHMiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3BhY2luZyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5vcm1hbCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjb21wYWN0Ii8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvcmRlcmVkbGlzdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygb3JkZXJlZGxpc3QuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBvcmRlcmVkbGlzdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imxpc3RpdGVtLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJsaXN0aXRlbSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjb21wb25lbnQubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imxpc3RpdGVtLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGxpc3RpdGVtLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgT3ZlcnJpZGU6IEluZGljYXRlcyB0aGUgbWFyayB0byBiZSB1c2VkIGZvciB0aGlzIExpc3RJdGVtCiAgICBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IG1hcmsgb3IgdGhlIG1hcmsgc3BlY2lmaWVkIGJ5CiAgICB0aGUgTWFyayBhdHRyaWJ1dGUgb24gdGhlIGVuY2xvc2luZyBJdGVtaXplZExpc3QKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGlzdGl0ZW0uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im92ZXJyaWRlIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaXN0aXRlbS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbGlzdGl0ZW0uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBsaXN0aXRlbS5tb2R1bGUgLS0+CiAgPCEtLSBTZWdtZW50ZWRMaXN0IC4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWdtZW50ZWRsaXN0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWdtZW50ZWRsaXN0IiBzdWJzdGl0dXRpb25Hcm91cD0ibGlzdC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImZvcm1hbG9iamVjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2VndGl0bGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWdsaXN0aXRlbSIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWdtZW50ZWRsaXN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlZ21lbnRlZGxpc3QuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VnbWVudGVkbGlzdC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlZ21lbnRlZGxpc3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlZ21lbnRlZGxpc3QuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzZWdtZW50ZWRsaXN0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VndGl0bGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNlZ3RpdGxlIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRpdGxlLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlZ3RpdGxlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlZ3RpdGxlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlZ3RpdGxlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VndGl0bGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlZ3RpdGxlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2VndGl0bGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWdsaXN0aXRlbS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VnbGlzdGl0ZW0iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2VnIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlZ2xpc3RpdGVtLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlZ2xpc3RpdGVtLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlZ2xpc3RpdGVtLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VnbGlzdGl0ZW0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlZ2xpc3RpdGVtLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2VnbGlzdGl0ZW0ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWcucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNlZyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlZy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWcuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VnLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VnLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWcuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzZWcubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIHNlZ21lbnRlZGxpc3QuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSBTaW1wbGVMaXN0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzaW1wbGVsaXN0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzaW1wbGVsaXN0IiBzdWJzdGl0dXRpb25Hcm91cD0ibGlzdC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtZW1iZXIiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2ltcGxlbGlzdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzaW1wbGVsaXN0LmVsZW1lbnQgLS0+CiAgPCEtLSBDb2x1bW5zOiBUaGUgbnVtYmVyIG9mIGNvbHVtbnMgdGhlIGFycmF5IHNob3VsZCBjb250YWluIC0tPgogIDwhLS0KICAgIFR5cGU6IEhvdyB0aGUgTWVtYmVycyBvZiB0aGUgU2ltcGxlTGlzdCBzaG91bGQgYmUKICAgIGZvcm1hdHRlZDogSW5saW5lIChtZW1iZXJzIHNlcGFyYXRlZCB3aXRoIGNvbW1hcyBldGMuCiAgICBpbmxpbmUpLCBWZXJ0ICh0b3AgdG8gYm90dG9tIGluIG4gQ29sdW1ucyksIG9yIEhvcml6IChpbgogICAgdGhlIGRpcmVjdGlvbiBvZiB0ZXh0IGZsb3cpIGluIG4gQ29sdW1ucy4gIElmIENvbHVtbgogICAgaXMgMSBvciBpbXBsaWVkLCBUeXBlPVZlcnQgYW5kIFR5cGU9SG9yaXogZ2l2ZSB0aGUgc2FtZQogICAgcmVzdWx0cy4KICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2ltcGxlbGlzdC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29sdW1ucyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiBkZWZhdWx0PSJ2ZXJ0Ij4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaW5saW5lIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InZlcnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaG9yaXoiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNpbXBsZWxpc3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNpbXBsZWxpc3QuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzaW1wbGVsaXN0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibWVtYmVyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtZW1iZXIiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtZW1iZXIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbWVtYmVyLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1lbWJlci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1lbWJlci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbWVtYmVyLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbWVtYmVyLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBzaW1wbGVsaXN0LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gVmFyaWFibGVMaXN0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idmFyaWFibGVsaXN0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ2YXJpYWJsZWxpc3QiIHN1YnN0aXR1dGlvbkdyb3VwPSJsaXN0LmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImZvcm1hbG9iamVjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibGlzdHByZWFtYmxlLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InZhcmxpc3RlbnRyeSIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2YXJpYWJsZWxpc3QuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdmFyaWFibGVsaXN0LmVsZW1lbnQgLS0+CiAgPCEtLQogICAgVGVybUxlbmd0aDogTGVuZ3RoIGJleW9uZCB3aGljaCB0aGUgcHJlc2VudGF0aW9uIGVuZ2luZQogICAgbWF5IGNvbnNpZGVyIHRoZSBUZXJtIHRvbyBsb25nIGFuZCBzZWxlY3QgYW4gYWx0ZXJuYXRlCiAgICBwcmVzZW50YXRpb24gb2YgdGhlIFRlcm0gYW5kLCBvciwgaXRzIGFzc29jaWF0ZWQgTGlzdEl0ZW0uCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InZhcmlhYmxlbGlzdC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idGVybWxlbmd0aCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzcGFjaW5nIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibm9ybWFsIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNvbXBhY3QiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InZhcmlhYmxlbGlzdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdmFyaWFibGVsaXN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdmFyaWFibGVsaXN0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idmFybGlzdGVudHJ5LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ2YXJsaXN0ZW50cnkiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idGVybSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGlzdGl0ZW0iLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idmFybGlzdGVudHJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHZhcmxpc3RlbnRyeS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ2YXJsaXN0ZW50cnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2YXJsaXN0ZW50cnkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHZhcmxpc3RlbnRyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHZhcmxpc3RlbnRyeS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRlcm0ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRlcm0iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0ZXJtLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRlcm0uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGVybS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRlcm0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRlcm0uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0ZXJtLm1vZHVsZSAtLT4KICA8IS0tIExpc3RJdGVtIChkZWZpbmVkIGFib3ZlKSAtLT4KICA8IS0tIGVuZCBvZiB2YXJpYWJsZWxpc3QuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSBDYWxsb3V0TGlzdCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjYWxsb3V0bGlzdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY2FsbG91dGxpc3QiIHN1YnN0aXR1dGlvbkdyb3VwPSJsaXN0LmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0iZm9ybWFsb2JqZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjYWxsb3V0Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNhbGxvdXRsaXN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNhbGxvdXRsaXN0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNhbGxvdXRsaXN0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2FsbG91dGxpc3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNhbGxvdXRsaXN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY2FsbG91dGxpc3QubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjYWxsb3V0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjYWxsb3V0Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbXBvbmVudC5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2FsbG91dC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjYWxsb3V0LmVsZW1lbnQgLS0+CiAgPCEtLQogICAgQXJlYVJlZnM6IElEcyBvZiBvbmUgb3IgbW9yZSBBcmVhcyBvciBBcmVhU2V0cyBkZXNjcmliZWQKICAgIGJ5IHRoaXMgQ2FsbG91dAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjYWxsb3V0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhcmVhcmVmcyIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6SURSRUZTIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjYWxsb3V0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjYWxsb3V0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY2FsbG91dC5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgY2FsbG91dGxpc3QuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gT2JqZWN0cyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEV4YW1wbGVzIGV0Yy4gLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImV4YW1wbGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImV4YW1wbGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJmb3JtYWwuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImZvcm1hbG9iamVjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImV4YW1wbGUubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImV4YW1wbGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZXhhbXBsZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJleGFtcGxlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmbG9hdHN0eWxlIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9IndpZHRoLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZXhhbXBsZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZXhhbXBsZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGV4YW1wbGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmZvcm1hbGV4YW1wbGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImluZm9ybWFsZXhhbXBsZSIgc3Vic3RpdHV0aW9uR3JvdXA9ImluZm9ybWFsLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZXhhbXBsZS5taXgiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5mb3JtYWxleGFtcGxlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGluZm9ybWFsZXhhbXBsZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmZvcm1hbGV4YW1wbGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZsb2F0c3R5bGUiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9IndpZHRoLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5mb3JtYWxleGFtcGxlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpbmZvcm1hbGV4YW1wbGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBpbmZvcm1hbGV4YW1wbGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcm9ncmFtbGlzdGluZ2NvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJwcm9ncmFtbGlzdGluZ2NvIiBzdWJzdGl0dXRpb25Hcm91cD0ibGluZXNwZWNpZmljLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYXJlYXNwZWMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InByb2dyYW1saXN0aW5nIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjYWxsb3V0bGlzdCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcm9ncmFtbGlzdGluZ2NvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHByb2dyYW1saXN0aW5nY28uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJvZ3JhbWxpc3Rpbmdjby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByb2dyYW1saXN0aW5nY28ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHByb2dyYW1saXN0aW5nY28uYXR0bGlzdCAtLT4KICA8IS0tIENhbGxvdXRMaXN0IChkZWZpbmVkIGFib3ZlIGluIExpc3RzKSAtLT4KICA8IS0tIGVuZCBvZiBpbmZvcm1hbGV4YW1wbGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcmVhc3BlYy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXJlYXNwZWMiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFyZWEiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFyZWFzZXQiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFyZWFzcGVjLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFyZWFzcGVjLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgVW5pdHM6IGdsb2JhbCB1bml0IG9mIG1lYXN1cmUgaW4gd2hpY2ggY29vcmRpbmF0ZXMgaW4KICAgIHRoaXMgc3BlYyBhcmUgZXhwcmVzc2VkOgogICAgCiAgICAtIENBTFNQYWlyICJ4MSx5MSB4Mix5MiI6IGxvd2VyLWxlZnQgYW5kIHVwcGVyLXJpZ2h0CiAgICBjb29yZGluYXRlcyBpbiBhIHJlY3RhbmdsZSBkZXNjcmliaW5nIHJlcHJvIGFyZWEgaW4gd2hpY2gKICAgIGdyYXBoaWMgaXMgcGxhY2VkLCB3aGVyZSBYIGFuZCBZIGRpbWVuc2lvbnMgYXJlIGVhY2ggc29tZQogICAgbnVtYmVyIDAuLjEwMDAwICh0YWtlbiBmcm9tIENBTFMgZ3JhcGhpYyBhdHRyaWJ1dGVzKQogICAgCiAgICAtIExpbmVDb2x1bW4gImxpbmUgY29sdW1uIjogbGluZSBudW1iZXIgYW5kIGNvbHVtbiBudW1iZXIKICAgIGF0IHdoaWNoIHRvIHN0YXJ0IGNhbGxvdXQgdGV4dCBpbiAibGluZXNwZWNpZmljIiBjb250ZW50CiAgICAKICAgIC0gTGluZVJhbmdlICJzdGFydGxpbmUgZW5kbGluZSI6IHdob2xlIGxpbmVzIGZyb20gc3RhcnRsaW5lCiAgICB0byBlbmRsaW5lIGluICJsaW5lc3BlY2lmaWMiIGNvbnRlbnQKICAgIAogICAgLSBMaW5lQ29sdW1uUGFpciAibGluZTEgY29sMSBsaW5lMiBjb2wyIjogc3RhcnRpbmcgYW5kIGVuZGluZwogICAgcG9pbnRzIG9mIGFyZWEgaW4gImxpbmVzcGVjaWZpYyIgY29udGVudCB0aGF0IHN0YXJ0cyBhdAogICAgZmlyc3QgcG9zaXRpb24gYW5kIGVuZHMgYXQgc2Vjb25kIHBvc2l0aW9uIChpbmNsdWRpbmcgdGhlCiAgICBiZWdpbm5pbmdzIG9mIGFueSBpbnRlcnZlbmluZyBsaW5lcykKICAgIAogICAgLSBPdGhlcjogZGlyZWN0aXZlIHRvIGxvb2sgYXQgdmFsdWUgb2YgT3RoZXJVbml0cyBhdHRyaWJ1dGUKICAgIHRvIGdldCBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBrZXl3b3JkCiAgICAKICAgIFRoZSBkZWZhdWx0IGlzIGltcGxlbWVudGF0aW9uLXNwZWNpZmljOyB1c3VhbGx5IGRlcGVuZGVudCBvbgogICAgdGhlIHBhcmVudCBlbGVtZW50IChHcmFwaGljQ08gZ2V0cyBDQUxTUGFpciwgUHJvZ3JhbUxpc3RpbmdDTwogICAgYW5kIFNjcmVlbkNPIGdldCBMaW5lQ29sdW1uKQogIC0tPgogIDwhLS0gT3RoZXJVbml0czogVXNlci1kZWZpbmVkIHVuaXRzIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcmVhc3BlYy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idW5pdHMiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjYWxzcGFpciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsaW5lY29sdW1uIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxpbmVyYW5nZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsaW5lY29sdW1ucGFpciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvdGhlciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvdGhlcnVuaXRzIiB0eXBlPSJ4czpOTVRPS0VOIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhcmVhc3BlYy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYXJlYXNwZWMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhcmVhc3BlYy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFyZWEucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImFyZWEiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhcmVhLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFyZWEuZWxlbWVudCAtLT4KICA8IS0tIGJ1ZyBudW1iZXIvc3ltYm9sIG92ZXJyaWRlIG9yIGluaXRpYWxpemF0aW9uIC0tPgogIDwhLS0gdG8gYW55IHJlbGF0ZWQgaW5mb3JtYXRpb24gLS0+CiAgPCEtLQogICAgVW5pdHM6IHVuaXQgb2YgbWVhc3VyZSBpbiB3aGljaCBjb29yZGluYXRlcyBpbiB0aGlzCiAgICBhcmVhIGFyZSBleHByZXNzZWQ7IGluaGVyaXRzIGZyb20gQXJlYVNldCBhbmQgQXJlYVNwZWMKICAtLT4KICA8IS0tIE90aGVyVW5pdHM6IFVzZXItZGVmaW5lZCB1bml0cyAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXJlYS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlua2VuZHMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InVuaXRzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2Fsc3BhaXIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGluZWNvbHVtbiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsaW5lcmFuZ2UiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGluZWNvbHVtbnBhaXIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3RoZXIiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib3RoZXJ1bml0cyIgdHlwZT0ieHM6Tk1UT0tFTiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb29yZHMiIHVzZT0icmVxdWlyZWQiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImlkcmVxLmNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFyZWEucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGFyZWEuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhcmVhLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXJlYXNldC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXJlYXNldCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJhcmVhIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFyZWFzZXQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYXJlYXNldC5lbGVtZW50IC0tPgogIDwhLS0gYnVnIG51bWJlci9zeW1ib2wgb3ZlcnJpZGUgb3IgaW5pdGlhbGl6YXRpb24gLS0+CiAgPCEtLQogICAgVW5pdHM6IHVuaXQgb2YgbWVhc3VyZSBpbiB3aGljaCBjb29yZGluYXRlcyBpbiB0aGlzCiAgICBhcmVhIGFyZSBleHByZXNzZWQ7IGluaGVyaXRzIGZyb20gQXJlYVNwZWMKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXJlYXNldC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1bml0cyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNhbHNwYWlyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxpbmVjb2x1bW4iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGluZXJhbmdlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxpbmVjb2x1bW5wYWlyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im90aGVyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im90aGVydW5pdHMiIHR5cGU9InhzOk5NVE9LRU4iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29vcmRzIiB1c2U9InJlcXVpcmVkIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpZHJlcS5jb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhcmVhc2V0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhcmVhc2V0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYXJlYXNldC5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgYXJlYXNwZWMuY29udGVudC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByb2dyYW1saXN0aW5nLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJwcm9ncmFtbGlzdGluZyIgc3Vic3RpdHV0aW9uR3JvdXA9ImxpbmVzcGVjaWZpYy5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb3JlZiIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZWFubm90YXRpb24iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRleHRvYmplY3QiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByb2dyYW1saXN0aW5nLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHByb2dyYW1saXN0aW5nLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByb2dyYW1saXN0aW5nLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0id2lkdGguYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5lc3BlY2lmaWMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcm9ncmFtbGlzdGluZy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcHJvZ3JhbWxpc3RpbmcuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwcm9ncmFtbGlzdGluZy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxpdGVyYWxsYXlvdXQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImxpdGVyYWxsYXlvdXQiIHN1YnN0aXR1dGlvbkdyb3VwPSJsaW5lc3BlY2lmaWMuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjbyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY29yZWYiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRleHRvYmplY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVhbm5vdGF0aW9uIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaXRlcmFsbGF5b3V0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGxpdGVyYWxsYXlvdXQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGl0ZXJhbGxheW91dC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9IndpZHRoLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGluZXNwZWNpZmljLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgZGVmYXVsdD0ibm9ybWFsIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibW9ub3NwYWNlZCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJub3JtYWwiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpdGVyYWxsYXlvdXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGxpdGVyYWxsYXlvdXQuYXR0bGlzdCAtLT4KICA8IS0tIExpbmVBbm5vdGF0aW9uIChkZWZpbmVkIGluIHRoZSBJbmxpbmVzIHNlY3Rpb24sIGJlbG93KSAtLT4KICA8IS0tIGVuZCBvZiBsaXRlcmFsbGF5b3V0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2NyZWVuY28ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNjcmVlbmNvIiBzdWJzdGl0dXRpb25Hcm91cD0ibGluZXNwZWNpZmljLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYXJlYXNwZWMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InNjcmVlbiIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY2FsbG91dGxpc3QiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2NyZWVuY28uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2NyZWVuY28uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2NyZWVuY28uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzY3JlZW5jby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2NyZWVuY28uYXR0bGlzdCAtLT4KICA8IS0tIEFyZWFTcGVjIChkZWZpbmVkIGFib3ZlKSAtLT4KICA8IS0tIENhbGxvdXRMaXN0IChkZWZpbmVkIGFib3ZlIGluIExpc3RzKSAtLT4KICA8IS0tIGVuZCBvZiBzY3JlZW5jby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNjcmVlbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2NyZWVuIiBzdWJzdGl0dXRpb25Hcm91cD0ibGluZXNwZWNpZmljLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY28iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvcmVmIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0ZXh0b2JqZWN0Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lYW5ub3RhdGlvbiIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2NyZWVuLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNjcmVlbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzY3JlZW4uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ3aWR0aC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmVzcGVjaWZpYy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNjcmVlbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2NyZWVuLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2NyZWVuLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2NyZWVuc2hvdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2NyZWVuc2hvdCIgc3Vic3RpdHV0aW9uR3JvdXA9ImxpbmVzcGVjaWZpYy5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ic2NyZWVuaW5mbyIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImdyYXBoaWMiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iZ3JhcGhpY2NvIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im1lZGlhb2JqZWN0Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im1lZGlhb2JqZWN0Y28iLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2NyZWVuc2hvdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzY3JlZW5zaG90LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNjcmVlbnNob3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzY3JlZW5zaG90LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzY3JlZW5zaG90LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2NyZWVuc2hvdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNjcmVlbmluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNjcmVlbmluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzY3JlZW5pbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNjcmVlbmluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2NyZWVuaW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNjcmVlbmluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNjcmVlbmluZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzY3JlZW5pbmZvLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBzY3JlZW5zaG90LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gRmlndXJlcyBldGMuIC4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZmlndXJlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJmaWd1cmUiIHN1YnN0aXR1dGlvbkdyb3VwPSJmb3JtYWwuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImZvcm1hbG9iamVjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6Z3JvdXAgcmVmPSJmaWd1cmUubWl4Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmsuY2hhci5jbGFzcyIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmaWd1cmUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZmlndXJlLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgRmxvYXQ6IFdoZXRoZXIgdGhlIEZpZ3VyZSBpcyBzdXBwb3NlZCB0byBiZSByZW5kZXJlZAogICAgd2hlcmUgY29udmVuaWVudCAoeWVzICgxKSB2YWx1ZSkgb3IgYXQgdGhlIHBsYWNlIGl0IG9jY3VycwogICAgaW4gdGhlIHRleHQgKG5vICgwKSB2YWx1ZSwgdGhlIGRlZmF1bHQpCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZpZ3VyZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZmxvYXQiIGRlZmF1bHQ9IjAiIHR5cGU9Inllc29ybm8uYXR0dmFscyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmbG9hdHN0eWxlIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InBnd2lkZSIgdHlwZT0ieWVzb3Juby5hdHR2YWxzIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZpZ3VyZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZmlndXJlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZmlndXJlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5mb3JtYWxmaWd1cmUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImluZm9ybWFsZmlndXJlIiBzdWJzdGl0dXRpb25Hcm91cD0iaW5mb3JtYWwuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czpjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmdyb3VwIHJlZj0iZmlndXJlLm1peCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rLmNoYXIuY2xhc3MiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5mb3JtYWxmaWd1cmUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW5mb3JtYWxmaWd1cmUuZWxlbWVudCAtLT4KICA8IS0tCiAgICBGbG9hdDogV2hldGhlciB0aGUgRmlndXJlIGlzIHN1cHBvc2VkIHRvIGJlIHJlbmRlcmVkCiAgICB3aGVyZSBjb252ZW5pZW50ICh5ZXMgKDEpIHZhbHVlKSBvciBhdCB0aGUgcGxhY2UgaXQgb2NjdXJzCiAgICBpbiB0aGUgdGV4dCAobm8gKDApIHZhbHVlLCB0aGUgZGVmYXVsdCkKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5mb3JtYWxmaWd1cmUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZsb2F0IiBkZWZhdWx0PSIwIiB0eXBlPSJ5ZXNvcm5vLmF0dHZhbHMiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZmxvYXRzdHlsZSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwZ3dpZGUiIHR5cGU9Inllc29ybm8uYXR0dmFscyIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmZvcm1hbGZpZ3VyZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaW5mb3JtYWxmaWd1cmUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBpbmZvcm1hbGZpZ3VyZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImdyYXBoaWNjby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZ3JhcGhpY2NvIiBzdWJzdGl0dXRpb25Hcm91cD0iaW5mb3JtYWwuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcmVhc3BlYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZ3JhcGhpYyIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY2FsbG91dGxpc3QiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ3JhcGhpY2NvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGdyYXBoaWNjby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJncmFwaGljY28uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJncmFwaGljY28ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGdyYXBoaWNjby5hdHRsaXN0IC0tPgogIDwhLS0gQXJlYVNwZWMgKGRlZmluZWQgYWJvdmUgaW4gRXhhbXBsZXMpIC0tPgogIDwhLS0gQ2FsbG91dExpc3QgKGRlZmluZWQgYWJvdmUgaW4gTGlzdHMpIC0tPgogIDwhLS0gZW5kIG9mIGdyYXBoaWNjby5tb2R1bGUgLS0+CiAgPCEtLQogICAgR3JhcGhpY2FsIGRhdGEgY2FuIGJlIHRoZSBjb250ZW50IG9mIEdyYXBoaWMsIG9yIHlvdSBjYW4gcmVmZXJlbmNlCiAgICBhbiBleHRlcm5hbCBmaWxlIGVpdGhlciBhcyBhbiBlbnRpdHkgKEVudGl0cmVmKSBvciBhIGZpbGVuYW1lCiAgICAoRmlsZXJlZikuCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImdyYXBoaWMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImdyYXBoaWMiIHN1YnN0aXR1dGlvbkdyb3VwPSJpbmZvcm1hbC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImdyYXBoaWMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZ3JhcGhpYy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJncmFwaGljLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ3JhcGhpY3MuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJncmFwaGljLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBncmFwaGljLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZ3JhcGhpYy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImlubGluZWdyYXBoaWMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImlubGluZWdyYXBoaWMiIHN1YnN0aXR1dGlvbkdyb3VwPSJpbmxpbmVvYmouY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImlubGluZWdyYXBoaWMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW5saW5lZ3JhcGhpYy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmxpbmVncmFwaGljLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ3JhcGhpY3MuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmxpbmVncmFwaGljLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpbmxpbmVncmFwaGljLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW5saW5lZ3JhcGhpYy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1lZGlhb2JqZWN0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtZWRpYW9iamVjdCIgc3Vic3RpdHV0aW9uR3JvdXA9ImluZm9ybWFsLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJvYmplY3RpbmZvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibWVkaWFvYmplY3QubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImNhcHRpb24iLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWVkaWFvYmplY3QuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbWVkaWFvYmplY3QuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibWVkaWFvYmplY3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtZWRpYW9iamVjdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbWVkaWFvYmplY3QuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtZWRpYW9iamVjdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImlubGluZW1lZGlhb2JqZWN0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbmxpbmVtZWRpYW9iamVjdCIgc3Vic3RpdHV0aW9uR3JvdXA9ImlubGluZW9iai5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJvYmplY3RpbmZvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibWVkaWFvYmplY3QubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImlubGluZW1lZGlhb2JqZWN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGlubGluZW1lZGlhb2JqZWN0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImlubGluZW1lZGlhb2JqZWN0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5saW5lbWVkaWFvYmplY3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGlubGluZW1lZGlhb2JqZWN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW5saW5lbWVkaWFvYmplY3QubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ2aWRlb29iamVjdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idmlkZW9vYmplY3QiIHN1YnN0aXR1dGlvbkdyb3VwPSJtZWRpYW9iamVjdC5taXgiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Im9iamVjdGluZm8iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InZpZGVvZGF0YSIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2aWRlb29iamVjdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB2aWRlb29iamVjdC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ2aWRlb29iamVjdC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InZpZGVvb2JqZWN0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB2aWRlb29iamVjdC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHZpZGVvb2JqZWN0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXVkaW9vYmplY3Qucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImF1ZGlvb2JqZWN0IiBzdWJzdGl0dXRpb25Hcm91cD0ibWVkaWFvYmplY3QubWl4Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJvYmplY3RpbmZvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhdWRpb2RhdGEiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXVkaW9vYmplY3QuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYXVkaW9vYmplY3QuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXVkaW9vYmplY3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhdWRpb29iamVjdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYXVkaW9vYmplY3QuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhdWRpb29iamVjdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImltYWdlb2JqZWN0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbWFnZW9iamVjdCIgc3Vic3RpdHV0aW9uR3JvdXA9Im1lZGlhb2JqZWN0Lm1peCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ib2JqZWN0aW5mbyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW1hZ2VkYXRhIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImltYWdlb2JqZWN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGltYWdlb2JqZWN0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImltYWdlb2JqZWN0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW1hZ2VvYmplY3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGltYWdlb2JqZWN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW1hZ2VvYmplY3QubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0ZXh0b2JqZWN0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0ZXh0b2JqZWN0IiBzdWJzdGl0dXRpb25Hcm91cD0ibWVkaWFvYmplY3QubWl4Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJvYmplY3RpbmZvIi8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0icGhyYXNlIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRleHRkYXRhIi8+CiAgICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idGV4dG9iamVjdC5taXgiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGV4dG9iamVjdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0ZXh0b2JqZWN0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRleHRvYmplY3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0ZXh0b2JqZWN0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0ZXh0b2JqZWN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdGV4dG9iamVjdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9iamVjdGluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im9iamVjdGluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvYmplY3RpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG9iamVjdGluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib2JqZWN0aW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9iamVjdGluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG9iamVjdGluZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBvYmplY3RpbmZvLm1vZHVsZSAtLT4KICA8IS0tCiAgICBFbnRpdHlSZWY6IE5hbWUgb2YgYW4gZXh0ZXJuYWwgZW50aXR5IGNvbnRhaW5pbmcgdGhlIGNvbnRlbnQKICAgIG9mIHRoZSBvYmplY3QgZGF0YQogIC0tPgogIDwhLS0KICAgIEZpbGVSZWY6IEZpbGVuYW1lLCBxdWFsaWZpZWQgYnkgYSBwYXRobmFtZSBpZiBkZXNpcmVkLAogICAgZGVzaWduYXRpbmcgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgY29udGVudCBvZiB0aGUgb2JqZWN0IGRhdGEKICAtLT4KICA8IS0tIEZvcm1hdDogTm90YXRpb24gb2YgdGhlIGVsZW1lbnQgY29udGVudCwgaWYgYW55IC0tPgogIDwhLS0gU3JjQ3JlZGl0OiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgc291cmNlIG9mIHRoZSBpbWFnZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib2JqZWN0ZGF0YS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJlbnRpdHlyZWYiIHR5cGU9InhzOkVOVElUWSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmaWxlcmVmIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZvcm1hdCIgdHlwZT0ibm90YXRpb24uY2xhc3MiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3JjY3JlZGl0Ii8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idmlkZW9kYXRhLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ2aWRlb2RhdGEiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2aWRlb2RhdGEuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdmlkZW9kYXRhLmVsZW1lbnQgLS0+CiAgPCEtLSBXaWR0aDogU2FtZSBhcyBDQUxTIHJlcHJvd2lkIChkZXNpcmVkIHdpZHRoKSAtLT4KICA8IS0tIERlcHRoOiBTYW1lIGFzIENBTFMgcmVwcm9kZXAgKGRlc2lyZWQgZGVwdGgpIC0tPgogIDwhLS0KICAgIEFsaWduOiBTYW1lIGFzIENBTFMgaHBsYWNlIHdpdGggJ25vbmUnIHJlbW92ZWQ7ICNJTVBMSUVEIG1lYW5zCiAgICBhcHBsaWNhdGlvbi1zcGVjaWZpYwogIC0tPgogIDwhLS0gU2NhbGU6IENvbmZsYXRpb24gb2YgQ0FMUyBoc2NhbGUgYW5kIHZzY2FsZSAtLT4KICA8IS0tIFNjYWxlZml0OiBTYW1lIGFzIENBTFMgc2NhbGVmaXQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InZpZGVvZGF0YS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0id2lkdGgiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29udGVudHdpZHRoIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImRlcHRoIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbnRlbnRkZXB0aCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxlZnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmlnaHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2VudGVyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbGlnbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRvcCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJtaWRkbGUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYm90dG9tIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNjYWxlIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNjYWxlZml0IiB0eXBlPSJ5ZXNvcm5vLmF0dHZhbHMiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9iamVjdGRhdGEuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2aWRlb2RhdGEucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHZpZGVvZGF0YS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHZpZGVvZGF0YS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImF1ZGlvZGF0YS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXVkaW9kYXRhIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXVkaW9kYXRhLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGF1ZGlvZGF0YS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhdWRpb2RhdGEuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvYmplY3RkYXRhLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXVkaW9kYXRhLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhdWRpb2RhdGEuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhdWRpb2RhdGEubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbWFnZWRhdGEucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImltYWdlZGF0YSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImltYWdlZGF0YS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBpbWFnZWRhdGEuZWxlbWVudCAtLT4KICA8IS0tIFdpZHRoOiBTYW1lIGFzIENBTFMgcmVwcm93aWQgKGRlc2lyZWQgd2lkdGgpIC0tPgogIDwhLS0gRGVwdGg6IFNhbWUgYXMgQ0FMUyByZXByb2RlcCAoZGVzaXJlZCBkZXB0aCkgLS0+CiAgPCEtLQogICAgQWxpZ246IFNhbWUgYXMgQ0FMUyBocGxhY2Ugd2l0aCAnbm9uZScgcmVtb3ZlZDsgI0lNUExJRUQgbWVhbnMKICAgIGFwcGxpY2F0aW9uLXNwZWNpZmljCiAgLS0+CiAgPCEtLSBTY2FsZTogQ29uZmxhdGlvbiBvZiBDQUxTIGhzY2FsZSBhbmQgdnNjYWxlIC0tPgogIDwhLS0gU2NhbGVmaXQ6IFNhbWUgYXMgQ0FMUyBzY2FsZWZpdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW1hZ2VkYXRhLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ3aWR0aCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb250ZW50d2lkdGgiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZGVwdGgiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29udGVudGRlcHRoIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGVmdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyaWdodCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjZW50ZXIiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idmFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idG9wIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im1pZGRsZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJib3R0b20iLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2NhbGUiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2NhbGVmaXQiIHR5cGU9Inllc29ybm8uYXR0dmFscyIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib2JqZWN0ZGF0YS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImltYWdlZGF0YS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaW1hZ2VkYXRhLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW1hZ2VkYXRhLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGV4dGRhdGEucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRleHRkYXRhIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGV4dGRhdGEuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdGV4dGRhdGEuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGV4dGRhdGEuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImVuY29kaW5nIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvYmplY3RkYXRhLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGV4dGRhdGEucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRleHRkYXRhLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdGV4dGRhdGEubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtZWRpYW9iamVjdGNvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtZWRpYW9iamVjdGNvIiBzdWJzdGl0dXRpb25Hcm91cD0iaW5mb3JtYWwuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Im9iamVjdGluZm8iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImltYWdlb2JqZWN0Y28iLz4KICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbWFnZW9iamVjdGNvIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRleHRvYmplY3QiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWVkaWFvYmplY3Rjby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtZWRpYW9iamVjdGNvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1lZGlhb2JqZWN0Y28uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtZWRpYW9iamVjdGNvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtZWRpYW9iamVjdGNvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbWVkaWFvYmplY3Rjby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImltYWdlb2JqZWN0Y28ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImltYWdlb2JqZWN0Y28iIHN1YnN0aXR1dGlvbkdyb3VwPSJtZWRpYW9iamVjdC5taXgiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcmVhc3BlYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW1hZ2VvYmplY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNhbGxvdXRsaXN0Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImltYWdlb2JqZWN0Y28uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW1hZ2VvYmplY3Rjby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbWFnZW9iamVjdGNvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW1hZ2VvYmplY3Rjby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaW1hZ2VvYmplY3Rjby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGltYWdlb2JqZWN0Y28ubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIG1lZGlhb2JqZWN0LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gRXF1YXRpb25zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIFRoaXMgUEUgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIHJlcGxhY2luZyBlcXVhdGlvbiBjb250ZW50LCAtLT4KICA8IS0tIHBlcmhhcHMgYWRkaW5nIGEgbmV3IG9yIGRpZmZlcmVudCBtb2RlbCAoZS5nLiwgTWF0aE1MKSAtLT4KICA8eHM6Z3JvdXAgbmFtZT0iZXF1YXRpb24uY29udGVudCI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJhbHQiLz4KICAgICAgPHhzOmNob2ljZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJncmFwaGljIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibWVkaWFvYmplY3QiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImlubGluZWVxdWF0aW9uLmNvbnRlbnQiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYWx0Ii8+CiAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZ3JhcGhpYyIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImlubGluZW1lZGlhb2JqZWN0Ii8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmNvbXBsZXhUeXBlPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlcXVhdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZXF1YXRpb24iIHN1YnN0aXR1dGlvbkdyb3VwPSJmb3JtYWwuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0iZm9ybWFsb2JqZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmZvcm1hbGVxdWF0aW9uIi8+CiAgICAgICAgICA8eHM6Z3JvdXAgcmVmPSJlcXVhdGlvbi5jb250ZW50Ii8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVxdWF0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGVxdWF0aW9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVxdWF0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmbG9hdHN0eWxlIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVxdWF0aW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBlcXVhdGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGVxdWF0aW9uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5mb3JtYWxlcXVhdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW5mb3JtYWxlcXVhdGlvbiIgc3Vic3RpdHV0aW9uR3JvdXA9ImluZm9ybWFsLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJlcXVhdGlvbi5jb250ZW50Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImluZm9ybWFsZXF1YXRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW5mb3JtYWxlcXVhdGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmZvcm1hbGVxdWF0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmbG9hdHN0eWxlIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmZvcm1hbGVxdWF0aW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpbmZvcm1hbGVxdWF0aW9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW5mb3JtYWxlcXVhdGlvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImlubGluZWVxdWF0aW9uLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbmxpbmVlcXVhdGlvbiIgc3Vic3RpdHV0aW9uR3JvdXA9ImlubGluZW9iai5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNvbXBsZXhDb250ZW50PgogICAgICAgIDx4czpleHRlbnNpb24gYmFzZT0iaW5saW5lZXF1YXRpb24uY29udGVudCI+CiAgICAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmxpbmVlcXVhdGlvbi5hdHRsaXN0Ii8+CiAgICAgICAgPC94czpleHRlbnNpb24+CiAgICAgIDwveHM6Y29tcGxleENvbnRlbnQ+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBpbmxpbmVlcXVhdGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmxpbmVlcXVhdGlvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImlubGluZWVxdWF0aW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpbmxpbmVlcXVhdGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGlubGluZWVxdWF0aW9uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYWx0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhbHQiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWx0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFsdC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhbHQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhbHQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGFsdC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGFsdC5tb2R1bGUgLS0+CiAgPCEtLSBUYWJsZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gQ2hvb3NlIGEgdGFibGUgbW9kZWwuIENBTFMgb3IgT0FTSVMgWE1MIEV4Y2hhbmdlIC0tPgogIDwhLS0gRG8gd2UgYWxsb3cgdGhlIEhUTUwgdGFibGUgbW9kZWwgYXMgd2VsbD8gLS0+CiAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgPCEtLQogICAgeGh0bWx0YmwubW9kIGRlZmluZXMgSFRNTCB0YWJsZXMgYW5kIHNldHMgcGFyYW1ldGVyCiAgICBlbnRpdGllcyBzbyB0aGF0LCB3aGVuIHRoZSBDQUxTIHRhYmxlIG1vZHVsZSBpcyByZWFkLAogICAgd2UgZW5kIHVwIGFsbG93aW5nIGFueSB0YWJsZSB0byBiZSBDQUxTIG9yIEhUTUwuCiAgICBpLmUuIFRoaXMgaW5jbHVkZSBtdXN0IGNvbWUgZmlyc3QhCiAgLS0+CiAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgPCEtLSBlbmQgb2YgYWxsb3cuaHRtbC50YWJsZXMgLS0+CiAgPCEtLSBBZGQgbGFiZWwgYW5kIHJvbGUgYXR0cmlidXRlcyB0byB0YWJsZSBhbmQgaW5mb3JtYWx0YWJsZSAtLT4KICA8IS0tCiAgICBBZGQgY29tbW9uIGF0dHJpYnV0ZXMgdG8gVGFibGUsIFRHcm91cCwgVEJvZHksIFRIZWFkLCBURm9vdCwgUm93LAogICAgRW50cnlUYmwsIGFuZCBFbnRyeSAoYW5kIEluZm9ybWFsVGFibGUgZWxlbWVudCkuCiAgLS0+CiAgPCEtLSBDb250ZW50IG1vZGVsIGZvciBUYWJsZS4gLS0+CiAgPCEtLSBBbGxvdyBlaXRoZXIgb2JqZWN0cyBvciBpbmxpbmVzOyBiZXdhcmUgb2YgUkVzIGJldHdlZW4gZWxlbWVudHMuIC0tPgogIDwhLS0gUmVmZXJlbmNlIENBTFMgVGFibGUgTW9kZWwgLS0+CiAgPCEtLSBlbmQgb2YgdGFibGUubW9kdWxlIC0tPgogIDwhLS0KICAgIE5vdGUgdGhhdCBJbmZvcm1hbFRhYmxlIGlzIGRlcGVuZGVudCBvbiBzb21lIG9mIHRoZSBlbnRpdHkKICAgIGRlY2xhcmF0aW9ucyB0aGF0IGN1c3RvbWl6ZSBUYWJsZS4KICAtLT4KICA8IS0tIHRoZSBmb2xsb3dpbmcgZW50aXR5IG1heSBoYXZlIGJlZW4gZGVjbGFyZWQgYnkgdGhlIFhIVE1MIHRhYmxlIG1vZHVsZSAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbmZvcm1hbHRhYmxlIiBzdWJzdGl0dXRpb25Hcm91cD0iaW5mb3JtYWwuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImluZm9ybWFsLnRibC50YWJsZS5tZGwiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5mb3JtYWx0YWJsZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBpbmZvcm1hbHRhYmxlLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgRnJhbWUsIENvbHNlcCwgYW5kIFJvd3NlcCBtdXN0IGJlIHJlcGVhdGVkIGJlY2F1c2UKICAgIHRoZXkgYXJlIG5vdCBpbiBlbnRpdGllcyBpbiB0aGUgdGFibGUgbW9kdWxlLgogIC0tPgogIDwhLS0KICAgIGluY2x1ZGVzIFRhYlN0eWxlLCBUb0NlbnRyeSwgU2hvcnRFbnRyeSwKICAgIE9yaWVudCwgUGdXaWRlCiAgLS0+CiAgPCEtLSBpbmNsdWRlcyBMYWJlbCAtLT4KICA8IS0tIGluY2x1ZGVzIGNvbW1vbiBhdHRyaWJ1dGVzIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmZvcm1hbHRhYmxlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmcmFtZSIgdHlwZT0idGJsLmZyYW1lLmF0dHZhbCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb2xzZXAiIHR5cGU9Inllc29ybm8uYXR0dmFscyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyb3dzZXAiIHR5cGU9Inllc29ybm8uYXR0dmFscyIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLnRhYmxlLmF0dHJpYnMiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRibC50YWJsZS5hdHQiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGluZm9ybWFsdGFibGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBpbmZvcm1hbHRhYmxlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2FwdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY2FwdGlvbiI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0ZXh0b2JqZWN0Lm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjYXB0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNhcHRpb24uZWxlbWVudCAtLT4KICA8IS0tIGF0dHJzIGNvbWVzIGZyb20gSFRNTCB0YWJsZXMgLi4uIC0tPgogIDwhLS0gY29tbW9uLmF0dHJpYiwgYnV0IHdpdGhvdXQgSUQgYmVjYXVzZSBJRCBpcyBpbiBhdHRycyAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2FwdGlvbi5hdHRsaXN0LmNvbnRlbnQiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFuZy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlbWFwLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ieHJlZmxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmV2aXNpb25mbGFnLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZWZmZWN0aXZpdHkuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJkaXIuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ4bWwtYmFzZS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNhcHRpb24ucm9sZS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImF0dHJzIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idG9wIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImJvdHRvbSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsZWZ0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJpZ2h0Ii8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2FwdGlvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNhcHRpb24uYXR0bGlzdC5jb250ZW50Ii8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjYXB0aW9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY2FwdGlvbi5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gU3lub3BzZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIFN5bm9wc2lzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN5bm9wc2lzLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzeW5vcHNpcyIgc3Vic3RpdHV0aW9uR3JvdXA9InN5bm9wLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZ3JhcGhpYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibWVkaWFvYmplY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb3JlZiIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0idGV4dG9iamVjdCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZWFubm90YXRpb24iLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN5bm9wc2lzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN5bm9wc2lzLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN5bm9wc2lzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5lc3BlY2lmaWMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzeW5vcHNpcy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc3lub3BzaXMuYXR0bGlzdCAtLT4KICA8IS0tIExpbmVBbm5vdGF0aW9uIChkZWZpbmVkIGluIHRoZSBJbmxpbmVzIHNlY3Rpb24sIGJlbG93KSAtLT4KICA8IS0tIGVuZCBvZiBzeW5vcHNpcy5tb2R1bGUgLS0+CiAgPCEtLSBDbWRTeW5vcHNpcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjbWRzeW5vcHNpcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY21kc3lub3BzaXMiIHN1YnN0aXR1dGlvbkdyb3VwPSJzeW5vcC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iY29tbWFuZCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcmciLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iZ3JvdXAiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic2JyIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzeW5vcGZyYWdtZW50Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNtZHN5bm9wc2lzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNtZHN5bm9wc2lzLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgU2VwY2hhcjogQ2hhcmFjdGVyIHRoYXQgc2hvdWxkIHNlcGFyYXRlIGNvbW1hbmQgYW5kIGFsbAogICAgdG9wLWxldmVsIGFyZ3VtZW50czsgYWx0ZXJuYXRlIHZhbHVlIG1pZ2h0IGJlIGUuZy4sICZEZWx0YTsKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY21kc3lub3BzaXMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2VwY2hhciIgZGVmYXVsdD0iICIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbWRsZW5ndGgiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNtZHN5bm9wc2lzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjbWRzeW5vcHNpcy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNtZHN5bm9wc2lzLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXJnLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhcmciPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFyZyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZ3JvdXAiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im9wdGlvbiIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ic3lub3BmcmFnbWVudHJlZiIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icmVwbGFjZWFibGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InNiciIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXJnLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFyZy5lbGVtZW50IC0tPgogIDwhLS0KICAgIENob2ljZTogV2hldGhlciBBcmcgbXVzdCBiZSBzdXBwbGllZDogT3B0IChvcHRpb25hbCB0bwogICAgc3VwcGx5LCBlLmcuIFthcmddOyB0aGUgZGVmYXVsdCksIFJlcSAocmVxdWlyZWQgdG8gc3VwcGx5LAogICAgZS5nLiB7YXJnfSksIG9yIFBsYWluIChyZXF1aXJlZCB0byBzdXBwbHksIGUuZy4gYXJnKQogIC0tPgogIDwhLS0KICAgIFJlcDogd2hldGhlciBBcmcgaXMgcmVwZWF0YWJsZTogTm9yZXBlYXQgKGUuZy4gYXJnIHdpdGhvdXQKICAgIGVsbGlwc2lzOyB0aGUgZGVmYXVsdCksIG9yIFJlcGVhdCAoZS5nLiBhcmcuLi4pCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFyZy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2hvaWNlIiBkZWZhdWx0PSJvcHQiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvcHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVxIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InBsYWluIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlcCIgZGVmYXVsdD0ibm9yZXBlYXQiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJub3JlcGVhdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZXBlYXQiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFyZy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYXJnLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYXJnLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ3JvdXAucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Imdyb3VwIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcmciLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Imdyb3VwIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJvcHRpb24iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN5bm9wZnJhZ21lbnRyZWYiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InJlcGxhY2VhYmxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzYnIiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdyb3VwLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGdyb3VwLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgQ2hvaWNlOiBXaGV0aGVyIEdyb3VwIG11c3QgYmUgc3VwcGxpZWQ6IE9wdCAob3B0aW9uYWwgdG8KICAgIHN1cHBseSwgZS5nLiAgW2cxfGcyfGczXTsgdGhlIGRlZmF1bHQpLCBSZXEgKHJlcXVpcmVkIHRvCiAgICBzdXBwbHksIGUuZy4gIHtnMXxnMnxnM30pLCBQbGFpbiAocmVxdWlyZWQgdG8gc3VwcGx5LAogICAgZS5nLiAgZzF8ZzJ8ZzMpLCBPcHRNdWx0IChjYW4gc3VwcGx5IHplcm8gb3IgbW9yZSwgZS5nLgogICAgW1tnMXxnMnxnM11dKSwgb3IgUmVxTXVsdCAobXVzdCBzdXBwbHkgb25lIG9yIG1vcmUsIGUuZy4KICAgIHt7ZzF8ZzJ8ZzN9fSkKICAtLT4KICA8IS0tCiAgICBSZXA6IHdoZXRoZXIgR3JvdXAgaXMgcmVwZWF0YWJsZTogTm9yZXBlYXQgKGUuZy4gZ3JvdXAKICAgIHdpdGhvdXQgZWxsaXBzaXM7IHRoZSBkZWZhdWx0KSwgb3IgUmVwZWF0IChlLmcuIGdyb3VwLi4uKQogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJncm91cC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2hvaWNlIiBkZWZhdWx0PSJvcHQiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvcHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVxIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InBsYWluIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlcCIgZGVmYXVsdD0ibm9yZXBlYXQiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJub3JlcGVhdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZXBlYXQiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdyb3VwLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBncm91cC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGdyb3VwLm1vZHVsZSAtLT4KICA8IS0tIFN5bm9wc2lzIGJyZWFrIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzYnIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNiciI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNici5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzYnIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2JyLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2JyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzYnIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzYnIubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzeW5vcGZyYWdtZW50cmVmLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzeW5vcGZyYWdtZW50cmVmIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN5bm9wZnJhZ21lbnRyZWYuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc3lub3BmcmFnbWVudHJlZi5lbGVtZW50IC0tPgogIDwhLS0KICAgIHRvIFN5bm9wRnJhZ21lbnQgb2YgY29tcGxleCBzeW5vcHNpcwogICAgbWF0ZXJpYWwgZm9yIHNlcGFyYXRlIHJlZmVyZW5jaW5nCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN5bm9wZnJhZ21lbnRyZWYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rZW5kcmVxLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3lub3BmcmFnbWVudHJlZi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc3lub3BmcmFnbWVudHJlZi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHN5bm9wZnJhZ21lbnRyZWYubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzeW5vcGZyYWdtZW50LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzeW5vcGZyYWdtZW50Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcmciLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Imdyb3VwIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzeW5vcGZyYWdtZW50LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN5bm9wZnJhZ21lbnQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3lub3BmcmFnbWVudC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImlkcmVxLmNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN5bm9wZnJhZ21lbnQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN5bm9wZnJhZ21lbnQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzeW5vcGZyYWdtZW50Lm1vZHVsZSAtLT4KICA8IS0tIENvbW1hbmQgKGRlZmluZWQgaW4gdGhlIElubGluZXMgc2VjdGlvbiwgYmVsb3cpIC0tPgogIDwhLS0gT3B0aW9uIChkZWZpbmVkIGluIHRoZSBJbmxpbmVzIHNlY3Rpb24sIGJlbG93KSAtLT4KICA8IS0tIFJlcGxhY2VhYmxlIChkZWZpbmVkIGluIHRoZSBJbmxpbmVzIHNlY3Rpb24sIGJlbG93KSAtLT4KICA8IS0tIGVuZCBvZiBjbWRzeW5vcHNpcy5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIEZ1bmNTeW5vcHNpcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZ1bmNzeW5vcHNpcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZnVuY3N5bm9wc2lzIiBzdWJzdGl0dXRpb25Hcm91cD0ic3lub3AuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImZ1bmNzeW5vcHNpc2luZm8iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImZ1bmNwcm90b3R5cGUiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZ1bmNzeW5vcHNpcy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBmdW5jc3lub3BzaXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZnVuY3N5bm9wc2lzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmdW5jc3lub3BzaXMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGZ1bmNzeW5vcHNpcy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGZ1bmNzeW5vcHNpcy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZ1bmNzeW5vcHNpc2luZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImZ1bmNzeW5vcHNpc2luZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0ZXh0b2JqZWN0Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lYW5ub3RhdGlvbiIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZnVuY3N5bm9wc2lzaW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBmdW5jc3lub3BzaXNpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZ1bmNzeW5vcHNpc2luZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5lc3BlY2lmaWMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmdW5jc3lub3BzaXNpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBmdW5jc3lub3BzaXNpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZnVuY3N5bm9wc2lzaW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZ1bmNwcm90b3R5cGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImZ1bmNwcm90b3R5cGUiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtb2RpZmllciIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZnVuY2RlZiIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InZvaWQiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0idmFyYXJncyIvPgogICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhbWRlZiIvPgogICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idmFyYXJncyIvPgogICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1vZGlmaWVyIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZ1bmNwcm90b3R5cGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZnVuY3Byb3RvdHlwZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmdW5jcHJvdG90eXBlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZnVuY3Byb3RvdHlwZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZnVuY3Byb3RvdHlwZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGZ1bmNwcm90b3R5cGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmdW5jZGVmLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJmdW5jZGVmIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0eXBlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZXBsYWNlYWJsZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZnVuY3Rpb24iLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZ1bmNkZWYuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZnVuY2RlZi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmdW5jZGVmLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZnVuY2RlZi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZnVuY2RlZi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGZ1bmNkZWYubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ2b2lkLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ2b2lkIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idm9pZC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB2b2lkLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InZvaWQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2b2lkLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB2b2lkLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygdm9pZC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InZhcmFyZ3Mucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InZhcmFyZ3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2YXJhcmdzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHZhcmFyZ3MuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idmFyYXJncy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InZhcmFyZ3Mucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHZhcmFyZ3MuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB2YXJhcmdzLm1vZHVsZSAtLT4KICA8IS0tCiAgICBQcm9jZXNzaW5nIGFzc3VtZXMgdGhhdCBvbmx5IG9uZSBQYXJhbWV0ZXIgd2lsbCBhcHBlYXIgaW4gYQogICAgUGFyYW1EZWYsIGFuZCB0aGF0IEZ1bmNQYXJhbXMgd2lsbCBiZSB1c2VkIGF0IG1vc3Qgb25jZSwgZm9yCiAgICBwcm92aWRpbmcgaW5mb3JtYXRpb24gb24gdGhlICJpbm5lciBwYXJhbWV0ZXJzIiBmb3IgcGFyYW1ldGVycyB0aGF0CiAgICBhcmUgcG9pbnRlcnMgdG8gZnVuY3Rpb25zLgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwYXJhbWRlZi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icGFyYW1kZWYiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImluaXRpYWxpemVyIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0eXBlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZXBsYWNlYWJsZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icGFyYW1ldGVyIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmdW5jcGFyYW1zIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYXJhbWRlZi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwYXJhbWRlZi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwYXJhbWRlZi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2hvaWNlIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3B0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlcSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFyYW1kZWYucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHBhcmFtZGVmLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcGFyYW1kZWYubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmdW5jcGFyYW1zLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJmdW5jcGFyYW1zIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZnVuY3BhcmFtcy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBmdW5jcGFyYW1zLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZ1bmNwYXJhbXMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmdW5jcGFyYW1zLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBmdW5jcGFyYW1zLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZnVuY3BhcmFtcy5tb2R1bGUgLS0+CiAgPCEtLSBMaW5lQW5ub3RhdGlvbiAoZGVmaW5lZCBpbiB0aGUgSW5saW5lcyBzZWN0aW9uLCBiZWxvdykgLS0+CiAgPCEtLSBSZXBsYWNlYWJsZSAoZGVmaW5lZCBpbiB0aGUgSW5saW5lcyBzZWN0aW9uLCBiZWxvdykgLS0+CiAgPCEtLSBGdW5jdGlvbiAoZGVmaW5lZCBpbiB0aGUgSW5saW5lcyBzZWN0aW9uLCBiZWxvdykgLS0+CiAgPCEtLSBQYXJhbWV0ZXIgKGRlZmluZWQgaW4gdGhlIElubGluZXMgc2VjdGlvbiwgYmVsb3cpIC0tPgogIDwhLS0gZW5kIG9mIGZ1bmNzeW5vcHNpcy5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIENsYXNzU3lub3BzaXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjbGFzc3N5bm9wc2lzLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjbGFzc3N5bm9wc2lzIiBzdWJzdGl0dXRpb25Hcm91cD0ic3lub3AuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im9vY2xhc3MiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ib29pbnRlcmZhY2UiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ib29leGNlcHRpb24iLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjbGFzc3N5bm9wc2lzaW5mbyIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmaWVsZHN5bm9wc2lzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im1ldGhvZC5zeW5vcC5jbGFzcyIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjbGFzc3N5bm9wc2lzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNsYXNzc3lub3BzaXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2xhc3NzeW5vcHNpcy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGFuZ3VhZ2UiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIGRlZmF1bHQ9ImNsYXNzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2xhc3MiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaW50ZXJmYWNlIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjbGFzc3N5bm9wc2lzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjbGFzc3N5bm9wc2lzLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY2xhc3NzeW5vcHNpcy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNsYXNzc3lub3BzaXNpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjbGFzc3N5bm9wc2lzaW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRleHRvYmplY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVhbm5vdGF0aW9uIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjbGFzc3N5bm9wc2lzaW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjbGFzc3N5bm9wc2lzaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjbGFzc3N5bm9wc2lzaW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmVzcGVjaWZpYy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNsYXNzc3lub3BzaXNpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjbGFzc3N5bm9wc2lzaW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNsYXNzc3lub3BzaXNpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib29jbGFzcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ib29jbGFzcyIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtb2RpZmllciIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYWNrYWdlIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjbGFzc25hbWUiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib29jbGFzcy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBvb2NsYXNzLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9vY2xhc3MuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvb2NsYXNzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBvb2NsYXNzLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygb29jbGFzcy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9vaW50ZXJmYWNlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJvb2ludGVyZmFjZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtb2RpZmllciIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYWNrYWdlIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbnRlcmZhY2VuYW1lIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9vaW50ZXJmYWNlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG9vaW50ZXJmYWNlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9vaW50ZXJmYWNlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib29pbnRlcmZhY2Uucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG9vaW50ZXJmYWNlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygb29pbnRlcmZhY2UubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvb2V4Y2VwdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ib29leGNlcHRpb24iIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ibW9kaWZpZXIiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0icGFja2FnZSIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZXhjZXB0aW9ubmFtZSIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvb2V4Y2VwdGlvbi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBvb2V4Y2VwdGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvb2V4Y2VwdGlvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9vZXhjZXB0aW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBvb2V4Y2VwdGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG9vZXhjZXB0aW9uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibW9kaWZpZXIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im1vZGlmaWVyIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb2RpZmllci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtb2RpZmllci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtb2RpZmllci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vZGlmaWVyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtb2RpZmllci5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1vZGlmaWVyLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW50ZXJmYWNlbmFtZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW50ZXJmYWNlbmFtZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImludGVyZmFjZW5hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW50ZXJmYWNlbmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbnRlcmZhY2VuYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW50ZXJmYWNlbmFtZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaW50ZXJmYWNlbmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGludGVyZmFjZW5hbWUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJleGNlcHRpb25uYW1lLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJleGNlcHRpb25uYW1lIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJleGNlcHRpb25uYW1lLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGV4Y2VwdGlvbm5hbWUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZXhjZXB0aW9ubmFtZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImV4Y2VwdGlvbm5hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGV4Y2VwdGlvbm5hbWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBleGNlcHRpb25uYW1lLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZmllbGRzeW5vcHNpcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZmllbGRzeW5vcHNpcyIgc3Vic3RpdHV0aW9uR3JvdXA9InN5bm9wLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibW9kaWZpZXIiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idHlwZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0idmFybmFtZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJpbml0aWFsaXplciIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmaWVsZHN5bm9wc2lzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGZpZWxkc3lub3BzaXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZmllbGRzeW5vcHNpcy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGFuZ3VhZ2UiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZpZWxkc3lub3BzaXMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGZpZWxkc3lub3BzaXMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBmaWVsZHN5bm9wc2lzLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5pdGlhbGl6ZXIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImluaXRpYWxpemVyIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbml0aWFsaXplci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBpbml0aWFsaXplci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbml0aWFsaXplci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImluaXRpYWxpemVyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpbml0aWFsaXplci5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGluaXRpYWxpemVyLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29uc3RydWN0b3JzeW5vcHNpcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29uc3RydWN0b3JzeW5vcHNpcyIgc3Vic3RpdHV0aW9uR3JvdXA9Im1ldGhvZC5zeW5vcC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1vZGlmaWVyIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Im1ldGhvZG5hbWUiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibWV0aG9kcGFyYW0iLz4KICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ2b2lkIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJleGNlcHRpb25uYW1lIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbnN0cnVjdG9yc3lub3BzaXMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY29uc3RydWN0b3JzeW5vcHNpcy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25zdHJ1Y3RvcnN5bm9wc2lzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsYW5ndWFnZSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29uc3RydWN0b3JzeW5vcHNpcy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY29uc3RydWN0b3JzeW5vcHNpcy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvbnN0cnVjdG9yc3lub3BzaXMubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJkZXN0cnVjdG9yc3lub3BzaXMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImRlc3RydWN0b3JzeW5vcHNpcyIgc3Vic3RpdHV0aW9uR3JvdXA9Im1ldGhvZC5zeW5vcC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1vZGlmaWVyIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Im1ldGhvZG5hbWUiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibWV0aG9kcGFyYW0iLz4KICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ2b2lkIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJleGNlcHRpb25uYW1lIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImRlc3RydWN0b3JzeW5vcHNpcy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBkZXN0cnVjdG9yc3lub3BzaXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZGVzdHJ1Y3RvcnN5bm9wc2lzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsYW5ndWFnZSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZGVzdHJ1Y3RvcnN5bm9wc2lzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBkZXN0cnVjdG9yc3lub3BzaXMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBkZXN0cnVjdG9yc3lub3BzaXMubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtZXRob2RzeW5vcHNpcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibWV0aG9kc3lub3BzaXMiIHN1YnN0aXR1dGlvbkdyb3VwPSJtZXRob2Quc3lub3AuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtb2RpZmllciIvPgogICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0idHlwZSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ2b2lkIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtZXRob2RuYW1lIi8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1ldGhvZHBhcmFtIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idm9pZCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZXhjZXB0aW9ubmFtZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibW9kaWZpZXIiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWV0aG9kc3lub3BzaXMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbWV0aG9kc3lub3BzaXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibWV0aG9kc3lub3BzaXMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Imxhbmd1YWdlIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtZXRob2RzeW5vcHNpcy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbWV0aG9kc3lub3BzaXMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtZXRob2RzeW5vcHNpcy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1ldGhvZG5hbWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im1ldGhvZG5hbWUiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1ldGhvZG5hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbWV0aG9kbmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtZXRob2RuYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWV0aG9kbmFtZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbWV0aG9kbmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1ldGhvZG5hbWUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtZXRob2RwYXJhbS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibWV0aG9kcGFyYW0iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtb2RpZmllciIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0eXBlIi8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhbWV0ZXIiLz4KICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImluaXRpYWxpemVyIi8+CiAgICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmdW5jcGFyYW1zIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtb2RpZmllciIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtZXRob2RwYXJhbS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtZXRob2RwYXJhbS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtZXRob2RwYXJhbS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2hvaWNlIiBkZWZhdWx0PSJyZXEiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvcHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVxIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InBsYWluIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlcCIgZGVmYXVsdD0ibm9yZXBlYXQiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJub3JlcGVhdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZXBlYXQiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1ldGhvZHBhcmFtLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtZXRob2RwYXJhbS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1ldGhvZHBhcmFtLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBjbGFzc3N5bm9wc2lzLmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIERvY3VtZW50IGluZm9ybWF0aW9uIGVudGl0aWVzIGFuZCBlbGVtZW50cyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLQogICAgVGhlIGRvY3VtZW50IGluZm9ybWF0aW9uIGVsZW1lbnRzIGluY2x1ZGUgc29tZSBlbGVtZW50cyB0aGF0IGFyZQogICAgY3VycmVudGx5IHVzZWQgb25seSBpbiB0aGUgZG9jdW1lbnQgaGllcmFyY2h5IG1vZHVsZS4gVGhleSBhcmUKICAgIGRlZmluZWQgaGVyZSBzbyB0aGF0IHRoZXkgd2lsbCBiZSBhdmFpbGFibGUgZm9yIHVzZSBpbiBjdXN0b21pemVkCiAgICBkb2N1bWVudCBoaWVyYXJjaGllcy4KICAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBBY2tubyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhY2tuby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYWNrbm8iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhY2tuby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBhY2tuby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhY2tuby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFja25vLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhY2tuby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGFja25vLm1vZHVsZSAtLT4KICA8IS0tIEFkZHJlc3MgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFkZHJlc3Mucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImFkZHJlc3MiIHN1YnN0aXR1dGlvbkdyb3VwPSJpbmZvcm1hbC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icGVyc29ubmFtZSIvPgogICAgICAgIDx4czpncm91cCByZWY9InBlcnNvbi5pZGVudC5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN0cmVldCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icG9iIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwb3N0Y29kZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY2l0eSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ic3RhdGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvdW50cnkiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InBob25lIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmYXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImVtYWlsIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJvdGhlcmFkZHIiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFkZHJlc3MuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYWRkcmVzcy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhZGRyZXNzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGluZXNwZWNpZmljLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWRkcmVzcy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYWRkcmVzcy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGFkZHJlc3MubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdHJlZXQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InN0cmVldCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0cmVldC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzdHJlZXQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3RyZWV0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RyZWV0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzdHJlZXQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzdHJlZXQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwb2Iucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InBvYiI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBvYi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwb2IuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icG9iLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icG9iLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwb2IuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwb2IubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwb3N0Y29kZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icG9zdGNvZGUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwb3N0Y29kZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwb3N0Y29kZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwb3N0Y29kZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBvc3Rjb2RlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwb3N0Y29kZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHBvc3Rjb2RlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2l0eS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY2l0eSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNpdHkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY2l0eS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjaXR5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2l0eS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY2l0eS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNpdHkubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdGF0ZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3RhdGUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0ZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzdGF0ZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdGF0ZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXRlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzdGF0ZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHN0YXRlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY291bnRyeS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY291bnRyeSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvdW50cnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY291bnRyeS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb3VudHJ5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY291bnRyeS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY291bnRyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvdW50cnkubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwaG9uZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icGhvbmUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwaG9uZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwaG9uZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwaG9uZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBob25lLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwaG9uZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHBob25lLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZmF4LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJmYXgiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmYXguYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZmF4LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZheC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZheC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZmF4LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZmF4Lm1vZHVsZSAtLT4KICA8IS0tIEVtYWlsIChkZWZpbmVkIGluIHRoZSBJbmxpbmVzIHNlY3Rpb24sIGJlbG93KSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib3RoZXJhZGRyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJvdGhlcmFkZHIiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvdGhlcmFkZHIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygb3RoZXJhZGRyLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im90aGVyYWRkci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im90aGVyYWRkci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygb3RoZXJhZGRyLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygb3RoZXJhZGRyLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBhZGRyZXNzLmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gQWZmaWxpYXRpb24gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYWZmaWxpYXRpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImFmZmlsaWF0aW9uIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJzaG9ydGFmZmlsIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJqb2J0aXRsZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJvcmduYW1lIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJvcmdkaXYiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImFkZHJlc3MiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWZmaWxpYXRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYWZmaWxpYXRpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYWZmaWxpYXRpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhZmZpbGlhdGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYWZmaWxpYXRpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhZmZpbGlhdGlvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNob3J0YWZmaWwucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNob3J0YWZmaWwiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzaG9ydGFmZmlsLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNob3J0YWZmaWwuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2hvcnRhZmZpbC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNob3J0YWZmaWwucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNob3J0YWZmaWwuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzaG9ydGFmZmlsLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iam9idGl0bGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImpvYnRpdGxlIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iam9idGl0bGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygam9idGl0bGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iam9idGl0bGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJqb2J0aXRsZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygam9idGl0bGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBqb2J0aXRsZS5tb2R1bGUgLS0+CiAgPCEtLSBPcmdOYW1lIChkZWZpbmVkIGVsc2V3aGVyZSBpbiB0aGlzIHNlY3Rpb24pIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvcmdkaXYucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im9yZ2RpdiI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9yZ2Rpdi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBvcmdkaXYuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib3JnZGl2LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib3JnZGl2LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBvcmdkaXYuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBvcmdkaXYubW9kdWxlIC0tPgogIDwhLS0gQWRkcmVzcyAoZGVmaW5lZCBlbHNld2hlcmUgaW4gdGhpcyBzZWN0aW9uKSAtLT4KICA8IS0tIGVuZCBvZiBhZmZpbGlhdGlvbi5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIEFydFBhZ2VOdW1zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFydHBhZ2VudW1zLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhcnRwYWdlbnVtcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFydHBhZ2VudW1zLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFydHBhZ2VudW1zLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFydHBhZ2VudW1zLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXJ0cGFnZW51bXMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGFydHBhZ2VudW1zLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYXJ0cGFnZW51bXMubW9kdWxlIC0tPgogIDwhLS0gUGVyc29uTmFtZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGVyc29ubmFtZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icGVyc29ubmFtZSIgc3Vic3RpdHV0aW9uR3JvdXA9Imdlbi5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJob25vcmlmaWMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImZpcnN0bmFtZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ic3VybmFtZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZWFnZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ib3RoZXJuYW1lIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwZXJzb25uYW1lLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHBlcnNvbm5hbWUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGVyc29ubmFtZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBlcnNvbm5hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHBlcnNvbm5hbWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwZXJzb25uYW1lLm1vZHVsZSAtLT4KICA8IS0tIEF1dGhvciAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImF1dGhvci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXV0aG9yIiBzdWJzdGl0dXRpb25Hcm91cD0iZG9jaW5mby5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InBlcnNvbm5hbWUiLz4KICAgICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwZXJzb24uaWRlbnQubWl4Ii8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0icGVyc29uYmx1cmIiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iZW1haWwiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iYWRkcmVzcyIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhdXRob3IuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYXV0aG9yLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImF1dGhvci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImF1dGhvci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYXV0aG9yLmF0dGxpc3QgLS0+CiAgPCEtLSAoc2VlICJQZXJzb25hbCBpZGVudGl0eSBlbGVtZW50cyIgZm9yICVwZXJzb24uaWRlbnQubWl4OykgLS0+CiAgPCEtLSBlbmQgb2YgYXV0aG9yLm1vZHVsZSAtLT4KICA8IS0tIEF1dGhvckdyb3VwIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImF1dGhvcmdyb3VwLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhdXRob3Jncm91cCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYXV0aG9yIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlZGl0b3IiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvbGxhYiIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY29ycGF1dGhvciIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY29ycGNyZWRpdCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ib3RoZXJjcmVkaXQiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImF1dGhvcmdyb3VwLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGF1dGhvcmdyb3VwLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImF1dGhvcmdyb3VwLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXV0aG9yZ3JvdXAucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGF1dGhvcmdyb3VwLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYXV0aG9yZ3JvdXAubW9kdWxlIC0tPgogIDwhLS0gQXV0aG9yIChkZWZpbmVkIGVsc2V3aGVyZSBpbiB0aGlzIHNlY3Rpb24pIC0tPgogIDwhLS0gRWRpdG9yIChkZWZpbmVkIGVsc2V3aGVyZSBpbiB0aGlzIHNlY3Rpb24pIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb2xsYWIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNvbGxhYiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvbGxhYm5hbWUiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImFmZmlsaWF0aW9uIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbGxhYi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb2xsYWIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29sbGFiLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29sbGFiLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjb2xsYWIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb2xsYWIubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb2xsYWJuYW1lLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb2xsYWJuYW1lIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29sbGFibmFtZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb2xsYWJuYW1lLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbGxhYm5hbWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb2xsYWJuYW1lLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjb2xsYWJuYW1lLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29sbGFibmFtZS5tb2R1bGUgLS0+CiAgPCEtLSBBZmZpbGlhdGlvbiAoZGVmaW5lZCBlbHNld2hlcmUgaW4gdGhpcyBzZWN0aW9uKSAtLT4KICA8IS0tIGVuZCBvZiBjb2xsYWIuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSBDb3JwQXV0aG9yIChkZWZpbmVkIGVsc2V3aGVyZSBpbiB0aGlzIHNlY3Rpb24pIC0tPgogIDwhLS0gT3RoZXJDcmVkaXQgKGRlZmluZWQgZWxzZXdoZXJlIGluIHRoaXMgc2VjdGlvbikgLS0+CiAgPCEtLSBlbmQgb2YgYXV0aG9yZ3JvdXAuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSBBdXRob3JJbml0aWFscyAuLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhdXRob3Jpbml0aWFscy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXV0aG9yaW5pdGlhbHMiIHN1YnN0aXR1dGlvbkdyb3VwPSJkb2NpbmZvLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhdXRob3Jpbml0aWFscy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBhdXRob3Jpbml0aWFscy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhdXRob3Jpbml0aWFscy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImF1dGhvcmluaXRpYWxzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhdXRob3Jpbml0aWFscy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGF1dGhvcmluaXRpYWxzLm1vZHVsZSAtLT4KICA8IS0tIENvbmZHcm91cCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbmZncm91cC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29uZmdyb3VwIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvbmZkYXRlcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY29uZnRpdGxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb25mbnVtIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhZGRyZXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb25mc3BvbnNvciIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29uZmdyb3VwLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvbmZncm91cC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25mZ3JvdXAuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb25mZ3JvdXAucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvbmZncm91cC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvbmZncm91cC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbmZkYXRlcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29uZmRhdGVzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29uZmRhdGVzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvbmZkYXRlcy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25mZGF0ZXMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb25mZGF0ZXMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvbmZkYXRlcy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvbmZkYXRlcy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbmZ0aXRsZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29uZnRpdGxlIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29uZnRpdGxlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvbmZ0aXRsZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25mdGl0bGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb25mdGl0bGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvbmZ0aXRsZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvbmZ0aXRsZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbmZudW0ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNvbmZudW0iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb25mbnVtLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvbmZudW0uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29uZm51bS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbmZudW0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvbmZudW0uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb25mbnVtLm1vZHVsZSAtLT4KICA8IS0tIEFkZHJlc3MgKGRlZmluZWQgZWxzZXdoZXJlIGluIHRoaXMgc2VjdGlvbikgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbmZzcG9uc29yLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb25mc3BvbnNvciI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbmZzcG9uc29yLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvbmZzcG9uc29yLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbmZzcG9uc29yLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29uZnNwb25zb3Iucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvbmZzcG9uc29yLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29uZnNwb25zb3IubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIGNvbmZncm91cC5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIENvbnRyYWN0TnVtIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbnRyYWN0bnVtLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb250cmFjdG51bSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbnRyYWN0bnVtLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvbnRyYWN0bnVtLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbnRyYWN0bnVtLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29udHJhY3RudW0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvbnRyYWN0bnVtLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29udHJhY3RudW0ubW9kdWxlIC0tPgogIDwhLS0gQ29udHJhY3RTcG9uc29yIC4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29udHJhY3RzcG9uc29yLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb250cmFjdHNwb25zb3IiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb250cmFjdHNwb25zb3IuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY29udHJhY3RzcG9uc29yLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbnRyYWN0c3BvbnNvci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbnRyYWN0c3BvbnNvci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY29udHJhY3RzcG9uc29yLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29udHJhY3RzcG9uc29yLm1vZHVsZSAtLT4KICA8IS0tIENvcHlyaWdodCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvcHlyaWdodC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29weXJpZ2h0Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InllYXIiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImhvbGRlciIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb3B5cmlnaHQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY29weXJpZ2h0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvcHlyaWdodC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvcHlyaWdodC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY29weXJpZ2h0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29weXJpZ2h0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ieWVhci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ieWVhciI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InllYXIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgeWVhci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ5ZWFyLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ieWVhci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgeWVhci5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHllYXIubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJob2xkZXIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImhvbGRlciI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImhvbGRlci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBob2xkZXIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaG9sZGVyLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaG9sZGVyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBob2xkZXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBob2xkZXIubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIGNvcHlyaWdodC5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIENvcnBBdXRob3IgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvcnBhdXRob3Iucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNvcnBhdXRob3IiIHN1YnN0aXR1dGlvbkdyb3VwPSJkb2NpbmZvLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb3JwYXV0aG9yLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvcnBhdXRob3IuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29ycGF1dGhvci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvcnBhdXRob3Iucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvcnBhdXRob3IuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb3JwYXV0aG9yLm1vZHVsZSAtLT4KICA8IS0tIENvcnBDcmVkaXQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29ycGNyZWRpdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29ycGNyZWRpdCIgc3Vic3RpdHV0aW9uR3JvdXA9ImRvY2luZm8uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvcnBjcmVkaXQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY29ycGNyZWRpdC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb3JwY3JlZGl0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImdyYXBoaWNkZXNpZ25lciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwcm9kdWN0aW9uZWRpdG9yIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNvcHllZGl0b3IiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idGVjaG5pY2FsZWRpdG9yIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRyYW5zbGF0b3IiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3RoZXIiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvcnBjcmVkaXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvcnBjcmVkaXQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb3JwY3JlZGl0Lm1vZHVsZSAtLT4KICA8IS0tIENvcnBOYW1lIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29ycG5hbWUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb3JwbmFtZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb3JwbmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb3JwbmFtZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvcnBuYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29ycG5hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvcnBuYW1lLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29ycG5hbWUubW9kdWxlIC0tPgogIDwhLS0gRGF0ZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZGF0ZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZGF0ZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImRhdGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZGF0ZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJkYXRlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZGF0ZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZGF0ZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGRhdGUubW9kdWxlIC0tPgogIDwhLS0gRWRpdGlvbiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZWRpdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZWRpdGlvbiI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVkaXRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZWRpdGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlZGl0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZWRpdGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZWRpdGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGVkaXRpb24ubW9kdWxlIC0tPgogIDwhLS0gRWRpdG9yIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZWRpdG9yLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJlZGl0b3IiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0icGVyc29ubmFtZSIvPgogICAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBlcnNvbi5pZGVudC5taXgiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwZXJzb25ibHVyYiIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlbWFpbCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhZGRyZXNzIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVkaXRvci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBlZGl0b3IuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZWRpdG9yLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZWRpdG9yLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBlZGl0b3IuYXR0bGlzdCAtLT4KICA8IS0tIChzZWUgIlBlcnNvbmFsIGlkZW50aXR5IGVsZW1lbnRzIiBmb3IgJXBlcnNvbi5pZGVudC5taXg7KSAtLT4KICA8IS0tIGVuZCBvZiBlZGl0b3IubW9kdWxlIC0tPgogIDwhLS0gSVNCTiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaXNibi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaXNibiI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImlzYm4uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaXNibi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpc2JuLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaXNibi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaXNibi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGlzYm4ubW9kdWxlIC0tPgogIDwhLS0gSVNTTiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaXNzbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaXNzbiI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imlzc24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaXNzbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpc3NuLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaXNzbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaXNzbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGlzc24ubW9kdWxlIC0tPgogIDwhLS0gQmlibGlvSWQgLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpby5jbGFzcy5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InVyaSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJkb2kiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaXNibiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJpc3NuIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxpYnJhcnlvZmNvbmdyZXNzIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InB1Ym51bWJlciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvdGhlciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvdGhlcmNsYXNzIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvaWQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImJpYmxpb2lkIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvaWQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYmlibGlvaWQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvaWQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW8uY2xhc3MuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9pZC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYmlibGlvaWQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBiaWJsaW9pZC5tb2R1bGUgLS0+CiAgPCEtLSBDaXRlQmlibGlvSWQgLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNpdGViaWJsaW9pZC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY2l0ZWJpYmxpb2lkIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2l0ZWJpYmxpb2lkLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNpdGViaWJsaW9pZC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjaXRlYmlibGlvaWQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW8uY2xhc3MuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjaXRlYmlibGlvaWQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNpdGViaWJsaW9pZC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNpdGViaWJsaW9pZC5tb2R1bGUgLS0+CiAgPCEtLSBCaWJsaW9Tb3VyY2UgLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb3NvdXJjZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYmlibGlvc291cmNlIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvc291cmNlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb3NvdXJjZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9zb3VyY2UuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW8uY2xhc3MuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9zb3VyY2Uucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJpYmxpb3NvdXJjZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJpYmxpb3NvdXJjZS5tb2R1bGUgLS0+CiAgPCEtLSBCaWJsaW9SZWxhdGlvbiAuLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvcmVsYXRpb24udHlwZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaXN2ZXJzaW9ub2YiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaGFzdmVyc2lvbiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJpc3JlcGxhY2VkYnkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVwbGFjZXMiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaXNyZXF1aXJlZGJ5Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlcXVpcmVzIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImlzcGFydG9mIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imhhc3BhcnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaXNyZWZlcmVuY2VkYnkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVmZXJlbmNlcyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJpc2Zvcm1hdG9mIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imhhc2Zvcm1hdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvdGhlcnR5cGUiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib3RoZXJ0eXBlIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvcmVsYXRpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImJpYmxpb3JlbGF0aW9uIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvcmVsYXRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYmlibGlvcmVsYXRpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvcmVsYXRpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW8uY2xhc3MuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9yZWxhdGlvbi50eXBlLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvcmVsYXRpb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJpYmxpb3JlbGF0aW9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYmlibGlvcmVsYXRpb24ubW9kdWxlIC0tPgogIDwhLS0gQmlibGlvQ292ZXJhZ2UgLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb2NvdmVyYWdlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJiaWJsaW9jb3ZlcmFnZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb2NvdmVyYWdlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb2NvdmVyYWdlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb2NvdmVyYWdlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzcGF0aWFsIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZGNtaXBvaW50Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImlzbzMxNjYiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZGNtaWJveCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0Z24iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3RoZXJzcGF0aWFsIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im90aGVyc3BhdGlhbCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0ZW1wb3JhbCI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImRjbWlwZXJpb2QiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idzNjLWR0ZiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvdGhlcnRlbXBvcmFsIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im90aGVydGVtcG9yYWwiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb2NvdmVyYWdlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBiaWJsaW9jb3ZlcmFnZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJpYmxpb2NvdmVyYWdlLm1vZHVsZSAtLT4KICA8IS0tIEludlBhcnROdW1iZXIgLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImludnBhcnRudW1iZXIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImludnBhcnRudW1iZXIiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbnZwYXJ0bnVtYmVyLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGludnBhcnRudW1iZXIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW52cGFydG51bWJlci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImludnBhcnRudW1iZXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGludnBhcnRudW1iZXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBpbnZwYXJ0bnVtYmVyLm1vZHVsZSAtLT4KICA8IS0tIElzc3VlTnVtIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imlzc3VlbnVtLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJpc3N1ZW51bSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imlzc3VlbnVtLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGlzc3VlbnVtLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imlzc3VlbnVtLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaXNzdWVudW0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGlzc3VlbnVtLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaXNzdWVudW0ubW9kdWxlIC0tPgogIDwhLS0gTGVnYWxOb3RpY2UgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGVnYWxub3RpY2Uucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImxlZ2Fsbm90aWNlIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibGVnYWxub3RpY2UubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxlZ2Fsbm90aWNlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGxlZ2Fsbm90aWNlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxlZ2Fsbm90aWNlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGVnYWxub3RpY2Uucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGxlZ2Fsbm90aWNlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbGVnYWxub3RpY2UubW9kdWxlIC0tPgogIDwhLS0gTW9kZVNwZWMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibW9kZXNwZWMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im1vZGVzcGVjIiBzdWJzdGl0dXRpb25Hcm91cD0iZG9jaW5mby5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9kZXNwZWMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbW9kZXNwZWMuZWxlbWVudCAtLT4KICA8IS0tCiAgICBBcHBsaWNhdGlvbjogVHlwZSBvZiBhY3Rpb24gcmVxdWlyZWQgZm9yIGNvbXBsZXRpb24KICAgIG9mIHRoZSBsaW5rcyB0byB3aGljaCB0aGUgTW9kZVNwZWMgaXMgcmVsZXZhbnQgKGUuZy4sCiAgICByZXRyaWV2YWwgcXVlcnkpCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1vZGVzcGVjLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhcHBsaWNhdGlvbiIgdHlwZT0ibm90YXRpb24uY2xhc3MiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vZGVzcGVjLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtb2Rlc3BlYy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1vZGVzcGVjLm1vZHVsZSAtLT4KICA8IS0tIE9yZ05hbWUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9yZ25hbWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im9yZ25hbWUiIHN1YnN0aXR1dGlvbkdyb3VwPSJnZW4uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9yZ25hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygb3JnbmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvcmduYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNvcnBvcmF0aW9uIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5vbnByb2ZpdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjb25zb3J0aXVtIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImluZm9ybWFsIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im90aGVyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im90aGVyY2xhc3MiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9yZ25hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG9yZ25hbWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBvcmduYW1lLm1vZHVsZSAtLT4KICA8IS0tIE90aGVyQ3JlZGl0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im90aGVyY3JlZGl0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJvdGhlcmNyZWRpdCIgc3Vic3RpdHV0aW9uR3JvdXA9ImRvY2luZm8uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwZXJzb25uYW1lIi8+CiAgICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGVyc29uLmlkZW50Lm1peCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InBlcnNvbmJsdXJiIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImVtYWlsIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFkZHJlc3MiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib3RoZXJjcmVkaXQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygb3RoZXJjcmVkaXQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib3RoZXJjcmVkaXQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZ3JhcGhpY2Rlc2lnbmVyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InByb2R1Y3Rpb25lZGl0b3IiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY29weWVkaXRvciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0ZWNobmljYWxlZGl0b3IiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idHJhbnNsYXRvciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvdGhlciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib3RoZXJjcmVkaXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG90aGVyY3JlZGl0LmF0dGxpc3QgLS0+CiAgPCEtLSAoc2VlICJQZXJzb25hbCBpZGVudGl0eSBlbGVtZW50cyIgZm9yICVwZXJzb24uaWRlbnQubWl4OykgLS0+CiAgPCEtLSBlbmQgb2Ygb3RoZXJjcmVkaXQubW9kdWxlIC0tPgogIDwhLS0gUGFnZU51bXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGFnZW51bXMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InBhZ2VudW1zIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFnZW51bXMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcGFnZW51bXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGFnZW51bXMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYWdlbnVtcy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcGFnZW51bXMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwYWdlbnVtcy5tb2R1bGUgLS0+CiAgPCEtLSBQZXJzb25hbCBpZGVudGl0eSBlbGVtZW50cyAuLi4uLi4uIC0tPgogIDwhLS0KICAgIFRoZXNlIGVsZW1lbnRzIGFyZSB1c2VkIG9ubHkgd2l0aGluIEF1dGhvciwgRWRpdG9yLCBhbmQKICAgIE90aGVyQ3JlZGl0LgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb250cmliLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb250cmliIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29udHJpYi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb250cmliLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbnRyaWIuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb250cmliLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjb250cmliLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29udHJpYi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZpcnN0bmFtZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZmlyc3RuYW1lIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZmlyc3RuYW1lLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGZpcnN0bmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmaXJzdG5hbWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmaXJzdG5hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGZpcnN0bmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGZpcnN0bmFtZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imhvbm9yaWZpYy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaG9ub3JpZmljIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaG9ub3JpZmljLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGhvbm9yaWZpYy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJob25vcmlmaWMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJob25vcmlmaWMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGhvbm9yaWZpYy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGhvbm9yaWZpYy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxpbmVhZ2Uucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImxpbmVhZ2UiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5lYWdlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGxpbmVhZ2UuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGluZWFnZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmVhZ2Uucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGxpbmVhZ2UuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBsaW5lYWdlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib3RoZXJuYW1lLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJvdGhlcm5hbWUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvdGhlcm5hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygb3RoZXJuYW1lLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im90aGVybmFtZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im90aGVybmFtZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygb3RoZXJuYW1lLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygb3RoZXJuYW1lLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3VybmFtZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3VybmFtZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN1cm5hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc3VybmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdXJuYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3VybmFtZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc3VybmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHN1cm5hbWUubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIHBlcnNvbi5pZGVudC5tb2R1bGUgLS0+CiAgPCEtLSBQcmludEhpc3RvcnkgLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcmludGhpc3Rvcnkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InByaW50aGlzdG9yeSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByaW50aGlzdG9yeS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwcmludGhpc3RvcnkuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJpbnRoaXN0b3J5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJpbnRoaXN0b3J5LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwcmludGhpc3RvcnkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwcmludGhpc3RvcnkubW9kdWxlIC0tPgogIDwhLS0gUHJvZHVjdE5hbWUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJvZHVjdG5hbWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InByb2R1Y3RuYW1lIiBzdWJzdGl0dXRpb25Hcm91cD0iZG9jaW5mby5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJvZHVjdG5hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcHJvZHVjdG5hbWUuZWxlbWVudCAtLT4KICA8IS0tIENsYXNzOiBNb3JlIHByZWNpc2VseSBpZGVudGlmaWVzIHRoZSBpdGVtIHRoZSBlbGVtZW50IG5hbWVzIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcm9kdWN0bmFtZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIGRlZmF1bHQ9InRyYWRlIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VydmljZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0cmFkZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZWdpc3RlcmVkIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNvcHlyaWdodCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJvZHVjdG5hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHByb2R1Y3RuYW1lLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcHJvZHVjdG5hbWUubW9kdWxlIC0tPgogIDwhLS0gUHJvZHVjdE51bWJlciAuLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJvZHVjdG51bWJlci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icHJvZHVjdG51bWJlciIgc3Vic3RpdHV0aW9uR3JvdXA9ImRvY2luZm8uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByb2R1Y3RudW1iZXIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcHJvZHVjdG51bWJlci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcm9kdWN0bnVtYmVyLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJvZHVjdG51bWJlci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcHJvZHVjdG51bWJlci5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHByb2R1Y3RudW1iZXIubW9kdWxlIC0tPgogIDwhLS0gUHViRGF0ZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHViZGF0ZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icHViZGF0ZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InB1YmRhdGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcHViZGF0ZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwdWJkYXRlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHViZGF0ZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcHViZGF0ZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHB1YmRhdGUubW9kdWxlIC0tPgogIDwhLS0gUHVibGlzaGVyIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHVibGlzaGVyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJwdWJsaXNoZXIiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwdWJsaXNoZXJuYW1lIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJhZGRyZXNzIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InB1Ymxpc2hlci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwdWJsaXNoZXIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHVibGlzaGVyLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHVibGlzaGVyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwdWJsaXNoZXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwdWJsaXNoZXIubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwdWJsaXNoZXJuYW1lLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJwdWJsaXNoZXJuYW1lIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHVibGlzaGVybmFtZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwdWJsaXNoZXJuYW1lLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InB1Ymxpc2hlcm5hbWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwdWJsaXNoZXJuYW1lLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwdWJsaXNoZXJuYW1lLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcHVibGlzaGVybmFtZS5tb2R1bGUgLS0+CiAgPCEtLSBBZGRyZXNzIChkZWZpbmVkIGVsc2V3aGVyZSBpbiB0aGlzIHNlY3Rpb24pIC0tPgogIDwhLS0gZW5kIG9mIHB1Ymxpc2hlci5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIFB1YnNOdW1iZXIgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InB1YnNudW1iZXIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InB1YnNudW1iZXIiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwdWJzbnVtYmVyLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHB1YnNudW1iZXIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHVic251bWJlci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InB1YnNudW1iZXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHB1YnNudW1iZXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwdWJzbnVtYmVyLm1vZHVsZSAtLT4KICA8IS0tIFJlbGVhc2VJbmZvIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlbGVhc2VpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWxlYXNlaW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlbGVhc2VpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlbGVhc2VpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlbGVhc2VpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVsZWFzZWluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlbGVhc2VpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVsZWFzZWluZm8ubW9kdWxlIC0tPgogIDwhLS0gUmV2SGlzdG9yeSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmV2aGlzdG9yeS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmV2aGlzdG9yeSIgc3Vic3RpdHV0aW9uR3JvdXA9ImRvY2luZm8uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZXZpc2lvbiIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXZoaXN0b3J5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJldmhpc3RvcnkuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmV2aGlzdG9yeS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJldmhpc3Rvcnkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJldmhpc3RvcnkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZXZoaXN0b3J5Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmV2aXNpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJldmlzaW9uIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icmV2bnVtYmVyIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJkYXRlIi8+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iYXV0aG9yIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImF1dGhvcmluaXRpYWxzIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZXZyZW1hcmsiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0icmV2ZGVzY3JpcHRpb24iLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmV2aXNpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmV2aXNpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmV2aXNpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXZpc2lvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmV2aXNpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZXZpc2lvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJldm51bWJlci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmV2bnVtYmVyIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmV2bnVtYmVyLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJldm51bWJlci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZXZudW1iZXIuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXZudW1iZXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJldm51bWJlci5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJldm51bWJlci5tb2R1bGUgLS0+CiAgPCEtLSBEYXRlIChkZWZpbmVkIGVsc2V3aGVyZSBpbiB0aGlzIHNlY3Rpb24pIC0tPgogIDwhLS0gQXV0aG9ySW5pdGlhbHMgKGRlZmluZWQgZWxzZXdoZXJlIGluIHRoaXMgc2VjdGlvbikgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJldnJlbWFyay5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmV2cmVtYXJrIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmV2cmVtYXJrLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJldnJlbWFyay5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZXZyZW1hcmsuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXZyZW1hcmsucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJldnJlbWFyay5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJldnJlbWFyay5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJldmRlc2NyaXB0aW9uLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZXZkZXNjcmlwdGlvbiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZXZkZXNjcmlwdGlvbi5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmV2ZGVzY3JpcHRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmV2ZGVzY3JpcHRpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmV2ZGVzY3JpcHRpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXZkZXNjcmlwdGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmV2ZGVzY3JpcHRpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZXZkZXNjcmlwdGlvbi5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgcmV2aGlzdG9yeS5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIFNlcmllc1ZvbE51bXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlcmllc3ZvbG51bXMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNlcmllc3ZvbG51bXMiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZXJpZXN2b2xudW1zLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlcmllc3ZvbG51bXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VyaWVzdm9sbnVtcy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlcmllc3ZvbG51bXMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlcmllc3ZvbG51bXMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzZXJpZXN2b2xudW1zLm1vZHVsZSAtLT4KICA8IS0tIFZvbHVtZU51bSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InZvbHVtZW51bS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idm9sdW1lbnVtIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idm9sdW1lbnVtLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHZvbHVtZW51bS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ2b2x1bWVudW0uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2b2x1bWVudW0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHZvbHVtZW51bS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHZvbHVtZW51bS5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gZW5kIG9mIGRvY2luZm8uY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gSW5saW5lLCBsaW5rLCBhbmQgdWJpcXVpdG91cyBlbGVtZW50cyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIFRlY2huaWNhbCBhbmQgY29tcHV0ZXIgdGVybXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFjY2VsLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJhY2NlbCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWNjZWwuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYWNjZWwuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYWNjZWwuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhY2NlbC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYWNjZWwuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhY2NlbC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFjdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYWN0aW9uIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWN0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFjdGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhY3Rpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFjdGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYWN0aW9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYWN0aW9uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXBwbGljYXRpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImFwcGxpY2F0aW9uIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXBwbGljYXRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYXBwbGljYXRpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXBwbGljYXRpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaGFyZHdhcmUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic29mdHdhcmUiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXBwbGljYXRpb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGFwcGxpY2F0aW9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYXBwbGljYXRpb24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjbGFzc25hbWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNsYXNzbmFtZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2xhc3NuYW1lLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNsYXNzbmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjbGFzc25hbWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjbGFzc25hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNsYXNzbmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNsYXNzbmFtZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBhY2thZ2Uucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InBhY2thZ2UiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhY2thZ2UuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcGFja2FnZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwYWNrYWdlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFja2FnZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcGFja2FnZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHBhY2thZ2UubW9kdWxlIC0tPgogIDwhLS0KICAgIENPIGlzIGEgY2FsbG91dCBhcmVhIG9mIHRoZSBMaW5lQ29sdW1uIHVuaXQgdHlwZSAoYSBzaW5nbGUgY2hhcmFjdGVyCiAgICBwb3NpdGlvbik7IHRoZSBwb3NpdGlvbiBpcyBkaXJlY3RseSBpbmRpY2F0ZWQgYnkgdGhlIGxvY2F0aW9uIG9mIENPLgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY28iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjby5lbGVtZW50IC0tPgogIDwhLS0gYnVnIG51bWJlci9zeW1ib2wgb3ZlcnJpZGUgb3IgaW5pdGlhbGl6YXRpb24gLS0+CiAgPCEtLSB0byBhbnkgcmVsYXRlZCBpbmZvcm1hdGlvbiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY28uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmtlbmRzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaWRyZXEuY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY28ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY28ubW9kdWxlIC0tPgogIDwhLS0gQ09SRUYgaXMgYSByZWZlcmVuY2UgdG8gYSBDTyAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29yZWYucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNvcmVmIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29yZWYuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY29yZWYuZWxlbWVudCAtLT4KICA8IS0tIGJ1ZyBudW1iZXIvc3ltYm9sIG92ZXJyaWRlIG9yIGluaXRpYWxpemF0aW9uIC0tPgogIDwhLS0gdG8gYW55IHJlbGF0ZWQgaW5mb3JtYXRpb24gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvcmVmLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rZW5kcmVxLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29yZWYucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvcmVmLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29yZWYubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb21tYW5kLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb21tYW5kIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbWFuZC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb21tYW5kLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbW1hbmQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1hbmQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvbW1hbmQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb21tYW5kLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29tcHV0ZXJvdXRwdXQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNvbXB1dGVyb3V0cHV0IiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iY3B0ci5jaGFyLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY28iLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbXB1dGVyb3V0cHV0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvbXB1dGVyb3V0cHV0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbXB1dGVyb3V0cHV0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21wdXRlcm91dHB1dC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY29tcHV0ZXJvdXRwdXQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb21wdXRlcm91dHB1dC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImRhdGFiYXNlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJkYXRhYmFzZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImRhdGFiYXNlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGRhdGFiYXNlLmVsZW1lbnQgLS0+CiAgPCEtLSBDbGFzczogVHlwZSBvZiBkYXRhYmFzZSB0aGUgZWxlbWVudCBuYW1lczsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZGF0YWJhc2UuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibmFtZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0YWJsZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJmaWVsZCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJrZXkxIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImtleTIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVjb3JkIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImluZGV4Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InZpZXciLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icHJpbWFyeWtleSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWNvbmRhcnlrZXkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZm9yZWlnbmtleSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJhbHRrZXkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icHJvY2VkdXJlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImRhdGF0eXBlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNvbnN0cmFpbnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icnVsZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ1c2VyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imdyb3VwIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImRhdGFiYXNlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBkYXRhYmFzZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGRhdGFiYXNlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZW1haWwucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImVtYWlsIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZW1haWwuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZW1haWwuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZW1haWwuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlbWFpbC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZW1haWwuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBlbWFpbC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVudmFyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJlbnZhciIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZW52YXIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZW52YXIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZW52YXIuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlbnZhci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZW52YXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBlbnZhci5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVycm9yY29kZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZXJyb3Jjb2RlIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlcnJvcmNvZGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZXJyb3Jjb2RlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVycm9yY29kZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZXJyb3Jjb2RlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBlcnJvcmNvZGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBlcnJvcmNvZGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlcnJvcm5hbWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImVycm9ybmFtZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZXJyb3JuYW1lLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGVycm9ybmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlcnJvcm5hbWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlcnJvcm5hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGVycm9ybmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGVycm9ybmFtZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVycm9ydGV4dC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZXJyb3J0ZXh0IiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlcnJvcnRleHQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZXJyb3J0ZXh0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVycm9ydGV4dC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVycm9ydGV4dC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZXJyb3J0ZXh0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZXJyb3J0ZXh0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZXJyb3J0eXBlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJlcnJvcnR5cGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVycm9ydHlwZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBlcnJvcnR5cGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZXJyb3J0eXBlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZXJyb3J0eXBlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBlcnJvcnR5cGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBlcnJvcnR5cGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmaWxlbmFtZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZmlsZW5hbWUiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmaWxlbmFtZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBmaWxlbmFtZS5lbGVtZW50IC0tPgogIDwhLS0gQ2xhc3M6IFR5cGUgb2YgZmlsZW5hbWUgdGhlIGVsZW1lbnQgbmFtZXM7IG5vIGRlZmF1bHQgLS0+CiAgPCEtLQogICAgUGF0aDogU2VhcmNoIHBhdGggKHBvc3NpYmx5IHN5c3RlbS1zcGVjaWZpYykgaW4gd2hpY2gKICAgIGZpbGUgY2FuIGJlIGZvdW5kCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZpbGVuYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImhlYWRlcmZpbGUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icGFydGl0aW9uIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImRldmljZWZpbGUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGlicmFyeWZpbGUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZGlyZWN0b3J5Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImV4dGVuc2lvbiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzeW1saW5rIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InBhdGgiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZmlsZW5hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGZpbGVuYW1lLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZmlsZW5hbWUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmdW5jdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZnVuY3Rpb24iIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmdW5jdGlvbi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBmdW5jdGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmdW5jdGlvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZnVuY3Rpb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGZ1bmN0aW9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZnVuY3Rpb24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJndWlidXR0b24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Imd1aWJ1dHRvbiIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYWNjZWwiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN1cGVyc2NyaXB0Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdWJzY3JpcHQiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imd1aWJ1dHRvbi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBndWlidXR0b24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ3VpYnV0dG9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJndWlidXR0b24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGd1aWJ1dHRvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGd1aWJ1dHRvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imd1aWljb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Imd1aWljb24iIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFjY2VsIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdXBlcnNjcmlwdCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ic3Vic2NyaXB0Ii8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJndWlpY29uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGd1aWljb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ3VpaWNvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ3VpaWNvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZ3VpaWNvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGd1aWljb24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJndWlsYWJlbC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZ3VpbGFiZWwiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFjY2VsIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdXBlcnNjcmlwdCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ic3Vic2NyaXB0Ii8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJndWlsYWJlbC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBndWlsYWJlbC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJndWlsYWJlbC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ3VpbGFiZWwucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGd1aWxhYmVsLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZ3VpbGFiZWwubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJndWltZW51LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJndWltZW51IiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhY2NlbCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ic3VwZXJzY3JpcHQiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN1YnNjcmlwdCIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ3VpbWVudS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBndWltZW51LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imd1aW1lbnUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imd1aW1lbnUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGd1aW1lbnUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBndWltZW51Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ3VpbWVudWl0ZW0ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Imd1aW1lbnVpdGVtIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhY2NlbCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ic3VwZXJzY3JpcHQiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN1YnNjcmlwdCIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ3VpbWVudWl0ZW0uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZ3VpbWVudWl0ZW0uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ3VpbWVudWl0ZW0uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imd1aW1lbnVpdGVtLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBndWltZW51aXRlbS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGd1aW1lbnVpdGVtLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ3Vpc3VibWVudS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZ3Vpc3VibWVudSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYWNjZWwiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN1cGVyc2NyaXB0Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdWJzY3JpcHQiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imd1aXN1Ym1lbnUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZ3Vpc3VibWVudS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJndWlzdWJtZW51LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJndWlzdWJtZW51LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBndWlzdWJtZW51LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZ3Vpc3VibWVudS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImhhcmR3YXJlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJoYXJkd2FyZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImhhcmR3YXJlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGhhcmR3YXJlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImhhcmR3YXJlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJoYXJkd2FyZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaGFyZHdhcmUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBoYXJkd2FyZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImludGVyZmFjZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW50ZXJmYWNlIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhY2NlbCIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW50ZXJmYWNlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGludGVyZmFjZS5lbGVtZW50IC0tPgogIDwhLS0gQ2xhc3M6IFR5cGUgb2YgdGhlIEludGVyZmFjZSBpdGVtOyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbnRlcmZhY2UuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImludGVyZmFjZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaW50ZXJmYWNlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW50ZXJmYWNlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ia2V5Y2FwLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJrZXljYXAiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJrZXljYXAuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Yga2V5Y2FwLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImtleWNhcC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZnVuY3Rpb24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJhbHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY29udHJvbCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzaGlmdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJtZXRhIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImVzY2FwZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJlbnRlciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0YWIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYmFja3NwYWNlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNvbW1hbmQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3B0aW9uIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNwYWNlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImRlbGV0ZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJpbnNlcnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idXAiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZG93biIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsZWZ0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJpZ2h0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImhvbWUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZW5kIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InBhZ2V1cCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwYWdlZG93biIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvdGhlciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvdGhlcmZ1bmN0aW9uIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImtleWNhcC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Yga2V5Y2FwLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Yga2V5Y2FwLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ia2V5Y29kZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ia2V5Y29kZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ia2V5Y29kZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBrZXljb2RlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImtleWNvZGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJrZXljb2RlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBrZXljb2RlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Yga2V5Y29kZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImtleWNvbWJvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJrZXljb21ibyIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ia2V5Y2FwIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJrZXljb21ibyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ia2V5c3ltIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtb3VzZWJ1dHRvbiIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ia2V5Y29tYm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Yga2V5Y29tYm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ia2V5Y29tYm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJrZXlhY3Rpb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImtleWNvbWJvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBrZXljb21iby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGtleWNvbWJvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ia2V5c3lzbS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ia2V5c3ltIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJrZXlzeW0uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Yga2V5c3ltLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImtleXN5bS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImtleXN5c20ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGtleXN5bS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGtleXN5bS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxpbmVhbm5vdGF0aW9uLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJsaW5lYW5ub3RhdGlvbiI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmVhbm5vdGF0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGxpbmVhbm5vdGF0aW9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxpbmVhbm5vdGF0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGluZWFubm90YXRpb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGxpbmVhbm5vdGF0aW9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbGluZWFubm90YXRpb24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsaXRlcmFsLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJsaXRlcmFsIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGl0ZXJhbC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBsaXRlcmFsLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxpdGVyYWwuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpdGVyYWwucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGxpdGVyYWwuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBsaXRlcmFsLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29kZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29kZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvZGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY29kZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb2RlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsYW5ndWFnZSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29kZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY29kZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvZGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25zdGFudC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29uc3RhbnQiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbnN0YW50LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvbnN0YW50LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbnN0YW50LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxpbWl0Ii8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb25zdGFudC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY29uc3RhbnQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb25zdGFudC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InZhcm5hbWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InZhcm5hbWUiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InZhcm5hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdmFybmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ2YXJuYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idmFybmFtZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdmFybmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHZhcm5hbWUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtYXJrdXAucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im1hcmt1cCIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWFya3VwLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1hcmt1cC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtYXJrdXAuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtYXJrdXAucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1hcmt1cC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1hcmt1cC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1lZGlhbGFiZWwucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im1lZGlhbGFiZWwiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1lZGlhbGFiZWwuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbWVkaWFsYWJlbC5lbGVtZW50IC0tPgogIDwhLS0gQ2xhc3M6IFR5cGUgb2YgbWVkaXVtIG5hbWVkIGJ5IHRoZSBlbGVtZW50OyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtZWRpYWxhYmVsLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNhcnRyaWRnZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjZHJvbSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJkaXNrIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRhcGUiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1lZGlhbGFiZWwucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1lZGlhbGFiZWwuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtZWRpYWxhYmVsLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibWVudWNob2ljZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibWVudWNob2ljZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ic2hvcnRjdXQiLz4KICAgICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iZ3VpYnV0dG9uIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Imd1aWljb24iLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iZ3VpbGFiZWwiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iZ3VpbWVudSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJndWltZW51aXRlbSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJndWlzdWJtZW51Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImludGVyZmFjZSIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtZW51Y2hvaWNlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1lbnVjaG9pY2UuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibWVudWNob2ljZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWVudWNob2ljZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbWVudWNob2ljZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1lbnVjaG9pY2UubW9kdWxlIC0tPgogIDwhLS0gU2VlIGFsc28gS2V5Q29tYm8gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNob3J0Y3V0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzaG9ydGN1dCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ia2V5Y2FwIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJrZXljb21ibyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ia2V5c3ltIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtb3VzZWJ1dHRvbiIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2hvcnRjdXQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2hvcnRjdXQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2hvcnRjdXQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJrZXlhY3Rpb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNob3J0Y3V0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzaG9ydGN1dC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNob3J0Y3V0Lm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBtZW51Y2hvaWNlLmNvbnRlbnQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtb3VzZWJ1dHRvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibW91c2VidXR0b24iIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vdXNlYnV0dG9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1vdXNlYnV0dG9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1vdXNlYnV0dG9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3VzZWJ1dHRvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbW91c2VidXR0b24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtb3VzZWJ1dHRvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ3RleHQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im1zZ3RleHQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2d0ZXh0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1zZ3RleHQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNndGV4dC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ3RleHQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1zZ3RleHQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtc2d0ZXh0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib3B0aW9uLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJvcHRpb24iIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvcHRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygb3B0aW9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9wdGlvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9wdGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygb3B0aW9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygb3B0aW9uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib3B0aW9uYWwucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9Im9wdGlvbmFsIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib3B0aW9uYWwuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygb3B0aW9uYWwuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib3B0aW9uYWwuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvcHRpb25hbC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygb3B0aW9uYWwuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBvcHRpb25hbC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBhcmFtZXRlci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icGFyYW1ldGVyIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFyYW1ldGVyLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHBhcmFtZXRlci5lbGVtZW50IC0tPgogIDwhLS0gQ2xhc3M6IFR5cGUgb2YgdGhlIFBhcmFtZXRlcjsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGFyYW1ldGVyLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNvbW1hbmQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZnVuY3Rpb24iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3B0aW9uIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhcmFtZXRlci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcGFyYW1ldGVyLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcGFyYW1ldGVyLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJvbXB0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJwcm9tcHQiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcm9tcHQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcHJvbXB0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByb21wdC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJvbXB0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwcm9tcHQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwcm9tcHQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcm9wZXJ0eS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icHJvcGVydHkiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcm9wZXJ0eS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwcm9wZXJ0eS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcm9wZXJ0eS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJvcGVydHkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHByb3BlcnR5LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcHJvcGVydHkubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZXBsYWNlYWJsZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVwbGFjZWFibGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmsuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ib3B0aW9uYWwiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJiYXNlLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJvdGhlci5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmxpbmVncmFwaGljIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmxpbmVtZWRpYW9iamVjdCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY28iLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlcGxhY2VhYmxlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlcGxhY2VhYmxlLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgQ2xhc3M6IFR5cGUgb2YgaW5mb3JtYXRpb24gdGhlIGVsZW1lbnQgcmVwcmVzZW50czsgbm8KICAgIGRlZmF1bHQKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVwbGFjZWFibGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY29tbWFuZCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJmdW5jdGlvbiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvcHRpb24iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icGFyYW1ldGVyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXBsYWNlYWJsZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVwbGFjZWFibGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZXBsYWNlYWJsZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJldHVybnZhbHVlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZXR1cm52YWx1ZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmV0dXJudmFsdWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmV0dXJudmFsdWUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmV0dXJudmFsdWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXR1cm52YWx1ZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmV0dXJudmFsdWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZXR1cm52YWx1ZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNnbWx0YWcucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNnbWx0YWciIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNnbWx0YWcuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2dtbHRhZy5lbGVtZW50IC0tPgogIDwhLS0gQ2xhc3M6IFR5cGUgb2YgU0dNTCBjb25zdHJ1Y3QgdGhlIGVsZW1lbnQgbmFtZXM7IG5vIGRlZmF1bHQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNnbWx0YWcuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYXR0cmlidXRlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImF0dHZhbHVlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImVsZW1lbnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZW5kdGFnIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImVtcHR5dGFnIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImdlbmVudGl0eSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJudW1jaGFycmVmIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InBhcmFtZW50aXR5Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InBpIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InhtbHBpIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InN0YXJ0dGFnIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNnbWxjb21tZW50Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InByZWZpeCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJuYW1lc3BhY2UiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibG9jYWxuYW1lIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2dtbHRhZy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2dtbHRhZy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNnbWx0YWcubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdHJ1Y3RmaWVsZC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3RydWN0ZmllbGQiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0cnVjdGZpZWxkLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN0cnVjdGZpZWxkLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN0cnVjdGZpZWxkLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RydWN0ZmllbGQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN0cnVjdGZpZWxkLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc3RydWN0ZmllbGQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdHJ1Y3RuYW1lLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzdHJ1Y3RuYW1lIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdHJ1Y3RuYW1lLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN0cnVjdG5hbWUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3RydWN0bmFtZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0cnVjdG5hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN0cnVjdG5hbWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzdHJ1Y3RuYW1lLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3ltYm9sLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJzeW1ib2wiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN5bWJvbC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzeW1ib2wuZWxlbWVudCAtLT4KICA8IS0tIENsYXNzOiBUeXBlIG9mIHN5bWJvbDsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3ltYm9sLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxpbWl0Ii8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzeW1ib2wucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN5bWJvbC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHN5bWJvbC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN5c3RlbWl0ZW0ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InN5c3RlbWl0ZW0iIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhY3JvbnltIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjbyIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3lzdGVtaXRlbS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzeXN0ZW1pdGVtLmVsZW1lbnQgLS0+CiAgPCEtLSBDbGFzczogVHlwZSBvZiBzeXN0ZW0gaXRlbSB0aGUgZWxlbWVudCBuYW1lczsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3lzdGVtaXRlbS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjb25zdGFudCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJkYWVtb24iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZG9tYWlubmFtZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJldGhlcmFkZHJlc3MiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZXZlbnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZXZlbnRoYW5kbGVyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImZpbGVzeXN0ZW0iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZnFkb21haW5uYW1lIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imdyb3VwbmFtZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJpcGFkZHJlc3MiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGlicmFyeSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJtYWNybyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJuZXRtYXNrIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5ld3Nncm91cCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvc25hbWUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icHJvdG9jb2wiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVzb3VyY2UiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic3lzdGVtbmFtZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ1c2VybmFtZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwcm9jZXNzIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlcnZlciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZXJ2aWNlIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN5c3RlbWl0ZW0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN5c3RlbWl0ZW0uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzeXN0ZW1pdGVtLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idXJpLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ1cmkiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InVyaS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB1cmkuZWxlbWVudCAtLT4KICA8IS0tIFR5cGU6IFR5cGUgb2YgVVJJOyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ1cmkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InR5cGUiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InVyaS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdXJpLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdXJpLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9rZW4ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRva2VuIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0b2tlbi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0b2tlbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2tlbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRva2VuLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0b2tlbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHRva2VuLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idHlwZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idHlwZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idHlwZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0eXBlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InR5cGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0eXBlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0eXBlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdHlwZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InVzZXJpbnB1dC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0idXNlcmlucHV0IiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iY3B0ci5jaGFyLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY28iLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InVzZXJpbnB1dC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB1c2VyaW5wdXQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idXNlcmlucHV0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ1c2VyaW5wdXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHVzZXJpbnB1dC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHVzZXJpbnB1dC5tb2R1bGUgLS0+CiAgPCEtLSBHZW5lcmFsIHdvcmRzIGFuZCBwaHJhc2VzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhYmJyZXYucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImFiYnJldiIgc3Vic3RpdHV0aW9uR3JvdXA9Imdlbi5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9IndvcmQuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWJicmV2LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFiYnJldi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhYmJyZXYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhYmJyZXYucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGFiYnJldi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGFiYnJldi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFjcm9ueW0ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImFjcm9ueW0iIHN1YnN0aXR1dGlvbkdyb3VwPSJnZW4uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ3b3JkLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFjcm9ueW0uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYWNyb255bS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhY3JvbnltLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWNyb255bS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYWNyb255bS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGFjcm9ueW0ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjaXRhdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY2l0YXRpb24iIHN1YnN0aXR1dGlvbkdyb3VwPSJnZW4uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNpdGF0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNpdGF0aW9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNpdGF0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2l0YXRpb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNpdGF0aW9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY2l0YXRpb24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjaXRlcmVmZW50cnkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNpdGVyZWZlbnRyeSIgc3Vic3RpdHV0aW9uR3JvdXA9Imdlbi5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icmVmZW50cnl0aXRsZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJtYW52b2xudW0iLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2l0ZXJlZmVudHJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNpdGVyZWZlbnRyeS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjaXRlcmVmZW50cnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjaXRlcmVmZW50cnkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNpdGVyZWZlbnRyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNpdGVyZWZlbnRyeS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZmVudHJ5dGl0bGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InJlZmVudHJ5dGl0bGUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZlbnRyeXRpdGxlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZmVudHJ5dGl0bGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmZW50cnl0aXRsZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZmVudHJ5dGl0bGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZmVudHJ5dGl0bGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZlbnRyeXRpdGxlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibmFtdm9sbnVtLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtYW52b2xudW0iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0id29yZC5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtYW52b2xudW0uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbWFudm9sbnVtLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1hbnZvbG51bS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im5hbXZvbG51bS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbWFudm9sbnVtLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbWFudm9sbnVtLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2l0ZXRpdGxlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJjaXRldGl0bGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJnZW4uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNpdGV0aXRsZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjaXRldGl0bGUuZWxlbWVudCAtLT4KICA8IS0tIFB1Yndvcms6IEdlbnJlIG9mIHB1Ymxpc2hlZCB3b3JrIGNpdGVkOyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjaXRldGl0bGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InB1YndvcmsiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJhcnRpY2xlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImJvb2siLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2hhcHRlciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwYXJ0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlZmVudHJ5Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3Rpb24iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iam91cm5hbCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZXJpZXMiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im1hbnVzY3JpcHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2Ryb20iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZHZkIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Indpa2kiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZ29waGVyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImJicyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJlbWFpbG1lc3NhZ2UiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0id2VicGFnZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJuZXdzcG9zdGluZyIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2l0ZXRpdGxlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjaXRldGl0bGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjaXRldGl0bGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlbXBoYXNpcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZW1waGFzaXMiIHN1YnN0aXR1dGlvbkdyb3VwPSJnZW4uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVtcGhhc2lzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGVtcGhhc2lzLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVtcGhhc2lzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZW1waGFzaXMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGVtcGhhc2lzLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZW1waGFzaXMubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmb3JlaWducGhyYXNlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJmb3JlaWducGhyYXNlIiBzdWJzdGl0dXRpb25Hcm91cD0iZ2VuLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmb3JlaWducGhyYXNlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGZvcmVpZ25waHJhc2UuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZm9yZWlnbnBocmFzZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZvcmVpZ25waHJhc2Uucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGZvcmVpZ25waHJhc2UuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBmb3JlaWducGhyYXNlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ2xvc3N0ZXJtLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJnbG9zc3Rlcm0iIHN1YnN0aXR1dGlvbkdyb3VwPSJnZW4uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdsb3NzdGVybS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBnbG9zc3Rlcm0uZWxlbWVudCAtLT4KICA8IS0tIHRvIEdsb3NzRW50cnkgaWYgR2xvc3N0ZXJtIHVzZWQgaW4gdGV4dCAtLT4KICA8IS0tCiAgICBCYXNlRm9ybTogUHJvdmlkZXMgdGhlIGZvcm0gb2YgR2xvc3NUZXJtIHRvIGJlIHVzZWQKICAgIGZvciBpbmRleGluZwogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJnbG9zc3Rlcm0uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImJhc2Vmb3JtIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rZW5kLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3N0ZXJtLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBnbG9zc3Rlcm0uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBnbG9zc3Rlcm0ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmaXJzdHRlcm0ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImZpcnN0dGVybSIgc3Vic3RpdHV0aW9uR3JvdXA9Imdlbi5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZmlyc3R0ZXJtLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGZpcnN0dGVybS5lbGVtZW50IC0tPgogIDwhLS0gdG8gR2xvc3NFbnRyeSBvciBvdGhlciBleHBsYW5hdGlvbiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZmlyc3R0ZXJtLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJiYXNlZm9ybSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlua2VuZC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZpcnN0dGVybS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZmlyc3R0ZXJtLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZmlyc3R0ZXJtLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGhyYXNlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJwaHJhc2UiIHN1YnN0aXR1dGlvbkdyb3VwPSJnZW4uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBocmFzZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwaHJhc2UuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGhyYXNlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGhyYXNlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwaHJhc2UuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwaHJhc2UubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJxdW90ZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icXVvdGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJnZW4uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InF1b3RlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHF1b3RlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InF1b3RlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icXVvdGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHF1b3RlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcXVvdGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzc3NjcmlwdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3Vic2NyaXB0Ij4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImVtcGhhc2lzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZXBsYWNlYWJsZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ic3ltYm9sIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmxpbmVncmFwaGljIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmxpbmVtZWRpYW9iamVjdCIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJhc2UuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9Im90aGVyLmNoYXIuY2xhc3MiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN1YnNjcmlwdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzdWJzY3JpcHQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3Vic2NyaXB0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3NzY3JpcHQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN1YnNjcmlwdC5hdHRsaXN0IC0tPgogIDx4czplbGVtZW50IG5hbWU9InN1cGVyc2NyaXB0Ij4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImVtcGhhc2lzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZXBsYWNlYWJsZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ic3ltYm9sIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmxpbmVncmFwaGljIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmxpbmVtZWRpYW9iamVjdCIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJhc2UuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9Im90aGVyLmNoYXIuY2xhc3MiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN1cGVyc2NyaXB0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN1cGVyc2NyaXB0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN1cGVyc2NyaXB0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3NzY3JpcHQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN1cGVyc2NyaXB0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc3NzY3JpcHQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0cmFkZW1hcmsucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InRyYWRlbWFyayIgc3Vic3RpdHV0aW9uR3JvdXA9Imdlbi5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRlY2guY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJhc2UuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9Im90aGVyLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZWdyYXBoaWMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZW1lZGlhb2JqZWN0Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlbXBoYXNpcyIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idHJhZGVtYXJrLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRyYWRlbWFyay5lbGVtZW50IC0tPgogIDwhLS0gQ2xhc3M6IE1vcmUgcHJlY2lzZWx5IGlkZW50aWZpZXMgdGhlIGl0ZW0gdGhlIGVsZW1lbnQgbmFtZXMgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRyYWRlbWFyay5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIGRlZmF1bHQ9InRyYWRlIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VydmljZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0cmFkZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZWdpc3RlcmVkIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNvcHlyaWdodCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idHJhZGVtYXJrLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0cmFkZW1hcmsuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0cmFkZW1hcmsubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ3b3JkYXN3b3JkLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ3b3JkYXN3b3JkIiBzdWJzdGl0dXRpb25Hcm91cD0iZ2VuLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0id29yZC5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ3b3JkYXN3b3JkLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHdvcmRhc3dvcmQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0id29yZGFzd29yZC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9IndvcmRhc3dvcmQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHdvcmRhc3dvcmQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB3b3JkYXN3b3JkLm1vZHVsZSAtLT4KICA8IS0tIExpbmtzIGFuZCBjcm9zcy1yZWZlcmVuY2VzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imxpbmsucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImxpbmsiIHN1YnN0aXR1dGlvbkdyb3VwPSJsaW5rLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGxpbmsuZWxlbWVudCAtLT4KICA8IS0tCiAgICBFbmR0ZXJtOiBJRCBvZiBlbGVtZW50IGNvbnRhaW5pbmcgdGV4dCB0aGF0IGlzIHRvIGJlCiAgICBmZXRjaGVkIGZyb20gZWxzZXdoZXJlIGluIHRoZSBkb2N1bWVudCB0byBhcHBlYXIgYXMKICAgIHRoZSBjb250ZW50IG9mIHRoaXMgZWxlbWVudAogIC0tPgogIDwhLS0gdG8gbGlua2VkLXRvIG9iamVjdCAtLT4KICA8IS0tIFR5cGU6IEZyZWVseSBhc3NpZ25hYmxlIHBhcmFtZXRlciAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGluay5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZW5kdGVybSIgdHlwZT0ieHM6SURSRUYiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ieHJlZnN0eWxlIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InR5cGUiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmtlbmRyZXEuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBsaW5rLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbGluay5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9saW5rLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJvbGluayIgc3Vic3RpdHV0aW9uR3JvdXA9ImxpbmsuY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9saW5rLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG9saW5rLmVsZW1lbnQgLS0+CiAgPCEtLSBUYXJnZXREb2NFbnQ6IE5hbWUgb2YgYW4gZW50aXR5IHRvIGJlIHRoZSB0YXJnZXQgb2YgdGhlIGxpbmsgLS0+CiAgPCEtLQogICAgTGlua01vZGU6IElEIG9mIGEgTW9kZVNwZWMgY29udGFpbmluZyBpbnN0cnVjdGlvbnMgZm9yCiAgICBvcGVyYXRpbmcgb24gdGhlIGVudGl0eSBuYW1lZCBieSBUYXJnZXREb2NFbnQKICAtLT4KICA8IS0tIExvY2FsSW5mbzogSW5mb3JtYXRpb24gdGhhdCBtYXkgYmUgcGFzc2VkIHRvIE1vZGVTcGVjIC0tPgogIDwhLS0gVHlwZTogRnJlZWx5IGFzc2lnbmFibGUgcGFyYW1ldGVyIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvbGluay5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idGFyZ2V0ZG9jZW50IiB0eXBlPSJ4czpFTlRJVFkiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGlua21vZGUiIHR5cGU9InhzOklEUkVGIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImxvY2FsaW5mbyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InRhcmdldGRvYyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0YXJnZXRwdHIiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ieHJlZnN0eWxlIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvbGluay5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygb2xpbmsuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBvbGluay5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InVsaW5rLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ1bGluayIgc3Vic3RpdHV0aW9uR3JvdXA9ImxpbmsuY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InVsaW5rLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHVsaW5rLmVsZW1lbnQgLS0+CiAgPCEtLSBVUkw6IHVuaWZvcm0gcmVzb3VyY2UgbG9jYXRvcjsgdGhlIHRhcmdldCBvZiB0aGUgVUxpbmsgLS0+CiAgPCEtLSBUeXBlOiBGcmVlbHkgYXNzaWduYWJsZSBwYXJhbWV0ZXIgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InVsaW5rLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1cmwiIHVzZT0icmVxdWlyZWQiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idHlwZSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ4cmVmc3R5bGUiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InVsaW5rLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB1bGluay5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHVsaW5rLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZm9vdG5vdGVyZWYucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImZvb3Rub3RlcmVmIiBzdWJzdGl0dXRpb25Hcm91cD0ieHJlZi5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZm9vdG5vdGVyZWYuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZm9vdG5vdGVyZWYuZWxlbWVudCAtLT4KICA8IS0tIHRvIGZvb3Rub3RlIGNvbnRlbnQgc3VwcGxpZWQgZWxzZXdoZXJlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmb290bm90ZXJlZi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmtlbmRyZXEuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZvb3Rub3RlcmVmLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBmb290bm90ZXJlZi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGZvb3Rub3RlcmVmLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ieHJlZi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0ieHJlZiIgc3Vic3RpdHV0aW9uR3JvdXA9InhyZWYuY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InhyZWYuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgeHJlZi5lbGVtZW50IC0tPgogIDwhLS0KICAgIEVuZHRlcm06IElEIG9mIGVsZW1lbnQgY29udGFpbmluZyB0ZXh0IHRoYXQgaXMgdG8gYmUKICAgIGZldGNoZWQgZnJvbSBlbHNld2hlcmUgaW4gdGhlIGRvY3VtZW50IHRvIGFwcGVhciBhcwogICAgdGhlIGNvbnRlbnQgb2YgdGhpcyBlbGVtZW50CiAgLS0+CiAgPCEtLSB0byBsaW5rZWQtdG8gb2JqZWN0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ4cmVmLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJlbmR0ZXJtIiB0eXBlPSJ4czpJRFJFRiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ4cmVmc3R5bGUiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmtlbmRyZXEuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ4cmVmLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB4cmVmLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgeHJlZi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb3JlZi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYmlibGlvcmVmIiBzdWJzdGl0dXRpb25Hcm91cD0ieHJlZi5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvcmVmLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb3JlZi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9yZWYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImVuZHRlcm0iIHR5cGU9InhzOklEUkVGIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InhyZWZzdHlsZSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1bml0cyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJiZWdpbiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJlbmQiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmtlbmRyZXEuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9yZWYucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJpYmxpb3JlZi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJpYmxpb3JlZi5tb2R1bGUgLS0+CiAgPCEtLSBVYmlxdWl0b3VzIGVsZW1lbnRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhbmNob3Iucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImFuY2hvciI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFuY2hvci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBhbmNob3IuZWxlbWVudCAtLT4KICA8IS0tIHJlcXVpcmVkIC0tPgogIDwhLS0gcmVwbGFjZXMgTGFuZyAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYW5jaG9yLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaWRyZXEuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYWdlbnVtLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVtYXAuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ4cmVmbGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXZpc2lvbmZsYWcuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlZmZlY3Rpdml0eS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFuY2hvci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYW5jaG9yLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYW5jaG9yLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmVnaW5wYWdlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJiZWdpbnBhZ2UiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiZWdpbnBhZ2UuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYmVnaW5wYWdlLmVsZW1lbnQgLS0+CiAgPCEtLSBQYWdlTnVtOiBOdW1iZXIgb2YgcGFnZSB0aGF0IGJlZ2lucyBhdCB0aGlzIHBvaW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiZWdpbnBhZ2UuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYWdlbnVtLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmVnaW5wYWdlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBiZWdpbnBhZ2UuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBiZWdpbnBhZ2UubW9kdWxlIC0tPgogIDwhLS0KICAgIEluZGV4VGVybXMgYXBwZWFyIGluIHRoZSB0ZXh0IGZsb3cgZm9yIGdlbmVyYXRpbmcgb3IgbGlua2luZyBhbgogICAgaW5kZXguCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImluZGV4dGVybS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW5kZXh0ZXJtIiBzdWJzdGl0dXRpb25Hcm91cD0ibmR4dGVybS5jbGFzcyIvPgogIDwhLS0gZW5kIG9mIGluZGV4dGVybS5lbGVtZW50IC0tPgogIDwhLS0KICAgIFNjb3BlOiBJbmRpY2F0ZXMgd2hpY2ggZ2VuZXJhdGVkIGluZGljZXMgdGhlIEluZGV4VGVybQogICAgc2hvdWxkIGFwcGVhciBpbjogR2xvYmFsICh3aG9sZSBkb2N1bWVudCBzZXQpLCBMb2NhbCAodGhpcwogICAgZG9jdW1lbnQgb25seSksIG9yIEFsbCAoYm90aCkKICAtLT4KICA8IS0tCiAgICBTaWduaWZpY2FuY2U6IFdoZXRoZXIgdGhpcyBJbmRleFRlcm0gaXMgdGhlIG1vc3QgcGVydGluZW50CiAgICBvZiBpdHMgc2VyaWVzIChQcmVmZXJyZWQpIG9yIG5vdCAoTm9ybWFsLCB0aGUgZGVmYXVsdCkKICAtLT4KICA8IS0tCiAgICBDbGFzczogSW5kaWNhdGVzIHR5cGUgb2YgSW5kZXhUZXJtOyBkZWZhdWx0IGlzIFNpbmd1bGFyLAogICAgb3IgRW5kT2ZSYW5nZSBpZiBTdGFydFJlZiBpcyBzdXBwbGllZDsgU3RhcnRPZlJhbmdlIHZhbHVlCiAgICBtdXN0IGJlIHN1cHBsaWVkIGV4cGxpY2l0bHkgb24gc3RhcnRzIG9mIHJhbmdlcwogIC0tPgogIDwhLS0KICAgIFN0YXJ0UmVmOiBJRCBvZiB0aGUgSW5kZXhUZXJtIHRoYXQgc3RhcnRzIHRoZSBpbmRleGluZwogICAgcmFuZ2UgZW5kZWQgYnkgdGhpcyBJbmRleFRlcm0KICAtLT4KICA8IS0tCiAgICBab25lOiBJRHMgb2YgdGhlIGVsZW1lbnRzIHRvIHdoaWNoIHRoZSBJbmRleFRlcm0gYXBwbGllcywKICAgIGFuZCBpbmRpY2F0ZXMgdGhhdCB0aGUgSW5kZXhUZXJtIGFwcGxpZXMgdG8gdGhvc2UgZW50aXJlCiAgICBlbGVtZW50cyByYXRoZXIgdGhhbiB0aGUgcG9pbnQgYXQgd2hpY2ggdGhlIEluZGV4VGVybQogICAgb2NjdXJzCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImluZGV4dGVybS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhZ2VudW0uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNjb3BlIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYWxsIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imdsb2JhbCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsb2NhbCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzaWduaWZpY2FuY2UiIGRlZmF1bHQ9Im5vcm1hbCI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InByZWZlcnJlZCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJub3JtYWwiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzaW5ndWxhciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzdGFydG9mcmFuZ2UiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZW5kb2ZyYW5nZSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzdGFydHJlZiIgdHlwZT0ieHM6SURSRUYiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iem9uZSIgdHlwZT0ieHM6SURSRUZTIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InR5cGUiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImluZGV4dGVybS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaW5kZXh0ZXJtLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW5kZXh0ZXJtLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJpbXNlY3Rlci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmVsZW1lbnQgbmFtZT0icHJpbWFyeSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByaW1hcnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcHJpbWFyeS5lbGVtZW50IC0tPgogIDwhLS0KICAgIFNvcnRBczogQWx0ZXJuYXRlIHNvcnQgc3RyaW5nIGZvciBpbmRleCBzb3J0aW5nLCBlLmcuLAogICAgImZvdXJ0ZWVuIiBmb3IgYW4gZWxlbWVudCBjb250YWluaW5nICIxNCIKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJpbWFyeS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic29ydGFzIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcmltc2VjdGVyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwcmltYXJ5LmF0dGxpc3QgLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2Vjb25kYXJ5Ij4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5keHRlcm0uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2Vjb25kYXJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlY29uZGFyeS5lbGVtZW50IC0tPgogIDwhLS0KICAgIFNvcnRBczogQWx0ZXJuYXRlIHNvcnQgc3RyaW5nIGZvciBpbmRleCBzb3J0aW5nLCBlLmcuLAogICAgImZvdXJ0ZWVuIiBmb3IgYW4gZWxlbWVudCBjb250YWluaW5nICIxNCIKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2Vjb25kYXJ5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzb3J0YXMiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByaW1zZWN0ZXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlY29uZGFyeS5hdHRsaXN0IC0tPgogIDx4czplbGVtZW50IG5hbWU9InRlcnRpYXJ5Ij4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5keHRlcm0uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGVydGlhcnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdGVydGlhcnkuZWxlbWVudCAtLT4KICA8IS0tCiAgICBTb3J0QXM6IEFsdGVybmF0ZSBzb3J0IHN0cmluZyBmb3IgaW5kZXggc29ydGluZywgZS5nLiwKICAgICJmb3VydGVlbiIgZm9yIGFuIGVsZW1lbnQgY29udGFpbmluZyAiMTQiCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRlcnRpYXJ5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzb3J0YXMiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByaW1zZWN0ZXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRlcnRpYXJ5LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcHJpbXNlY3Rlci5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlZXNlZWFsc28ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9InNlZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2Vlc2VlYWxzby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VlLmF0dGxpc3QgLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VlYWxzbyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlZWFsc28uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VlYWxzby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWVhbHNvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2Vlc2VlYWxzby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CjwveHM6c2NoZW1hPgo8IS0tIGVuZCBvZiBzZWVhbHNvLmF0dGxpc3QgLS0+CjwhLS0gZW5kIG9mIHNlZXNlZWFsc28ubW9kdWxlIC0tPgo8IS0tIGVuZCBvZiBpbmRleHRlcm0uY29udGVudC5tb2R1bGUgLS0+CjwhLS0gRW5kIG9mIERvY0Jvb2sgWE1MIGluZm9ybWF0aW9uIHBvb2wgbW9kdWxlIFY0LjQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Docbook/4_4/docbook.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIERvY0Jvb2sgWE1MIERURCBWNC40IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRmlsZSBkb2Nib29reC5kdGQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIENvcHlyaWdodCAxOTkyLTIwMDQgSGFMIENvbXB1dGVyIFN5c3RlbXMsIEluYy4sCiAgTydSZWlsbHkgJiBBc3NvY2lhdGVzLCBJbmMuLCBBcmJvclRleHQsIEluYy4sIEZ1aml0c3UgU29mdHdhcmUKICBDb3Jwb3JhdGlvbiwgTm9ybWFuIFdhbHNoLCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCBhbmQgdGhlCiAgT3JnYW5pemF0aW9uIGZvciB0aGUgQWR2YW5jZW1lbnQgb2YgU3RydWN0dXJlZCBJbmZvcm1hdGlvbgogIFN0YW5kYXJkcyAoT0FTSVMpLgogIAogIFNlZSBhbHNvIGh0dHA6Ly9kb2Nib29rLm9yZy9zcGVjcy8KICAKICAkSWQ6IGRvY2Jvb2t4LmR0ZCx2IDEuMzEgMjAwNS8wMS8yNyAxMzo1MjozNiBud2Fsc2ggRXhwICQKICAKICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIHRoZSBEb2NCb29rIFhNTCBEVEQKICBhbmQgaXRzIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUKICBpcyBoZXJlYnkgZ3JhbnRlZCBpbiBwZXJwZXR1aXR5LCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKICBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGFwcGVhciBpbiBhbGwgY29waWVzLiAgVGhlIGNvcHlyaWdodAogIGhvbGRlcnMgbWFrZSBubyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhlIERURCBmb3IKICBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzZWQgb3IgaW1wbGllZAogIHdhcnJhbnR5LgogIAogIElmIHlvdSBtb2RpZnkgdGhlIERvY0Jvb2sgRFREIGluIGFueSB3YXksIGV4Y2VwdCBmb3IgZGVjbGFyaW5nIGFuZAogIHJlZmVyZW5jaW5nIGFkZGl0aW9uYWwgc2V0cyBvZiBnZW5lcmFsIGVudGl0aWVzIGFuZCBkZWNsYXJpbmcKICBhZGRpdGlvbmFsIG5vdGF0aW9ucywgbGFiZWwgeW91ciBEVEQgYXMgYSB2YXJpYW50IG9mIERvY0Jvb2suICBTZWUKICB0aGUgbWFpbnRlbmFuY2UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAKICBQbGVhc2UgZGlyZWN0IGFsbCBxdWVzdGlvbnMsIGJ1ZyByZXBvcnRzLCBvciBzdWdnZXN0aW9ucyBmb3IKICBjaGFuZ2VzIHRvIHRoZSBkb2Nib29rQGxpc3RzLm9hc2lzLW9wZW4ub3JnIG1haWxpbmcgbGlzdC4gRm9yIG1vcmUKICBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay8uCi0tPgo8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0KICBUaGlzIGlzIHRoZSBkcml2ZXIgZmlsZSBmb3IgVjQuNCBvZiB0aGUgRG9jQm9vayBEVEQuCiAgUGxlYXNlIHVzZSB0aGUgZm9sbG93aW5nIGZvcm1hbCBwdWJsaWMgaWRlbnRpZmllciB0byBpZGVudGlmeSBpdDoKICAKICAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC40Ly9FTiIKICAKICBGb3IgZXhhbXBsZSwgaWYgeW91ciBkb2N1bWVudCdzIHRvcC1sZXZlbCBlbGVtZW50IGlzIEJvb2ssIGFuZAogIHlvdSBhcmUgdXNpbmcgRG9jQm9vayBkaXJlY3RseSwgdXNlIHRoZSBGUEkgaW4gdGhlIERPQ1RZUEUKICBkZWNsYXJhdGlvbjoKICAKICA8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuNC8vRU4iCiAgICAgICAgICAgICAgICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC40L2RvY2Jvb2t4LmR0ZCIKICAgICAgICAgICAgICAgICBbLi4uXT4KICAKICBPciwgaWYgeW91IGhhdmUgYSBoaWdoZXItbGV2ZWwgZHJpdmVyIGZpbGUgdGhhdCBjdXN0b21pemVzIERvY0Jvb2ssCiAgdXNlIHRoZSBGUEkgaW4gdGhlIHBhcmFtZXRlciBlbnRpdHkgZGVjbGFyYXRpb246CiAgCiAgPCFFTlRJVFkgJSBEb2NCb29rRFREIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC40Ly9FTiIKICAgICAgICAgICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuNC9kb2Nib29reC5kdGQiPgogICVEb2NCb29rRFREOwogIAogIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIHBhcmFtZXRlcgogIGVudGl0eSBhbmQgbW9kdWxlIHNjaGVtZSB1c2VkIGluIERvY0Jvb2ssIGN1c3RvbWl6aW5nIERvY0Jvb2sgYW5kCiAgcGxhbm5pbmcgZm9yIGludGVyY2hhbmdlLCBhbmQgY2hhbmdlcyBtYWRlIHNpbmNlIHRoZSBsYXN0IHJlbGVhc2UKICBvZiBEb2NCb29rLgotLT4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIEVuYWJsZSBTR01MIGZlYXR1cmVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLSBOb3RhdGlvbiBkZWNsYXJhdGlvbnMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgogIDx4czppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJkYm5vdG54LnhzZCIvPgogIDx4czppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJkYnBvb2x4LnhzZCIvPgogIDx4czppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJkYmhpZXJ4LnhzZCIvPgogIDx4czppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiIHNjaGVtYUxvY2F0aW9uPSJ4bWwueHNkIi8+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gSVNPIGNoYXJhY3RlciBlbnRpdHkgc2V0cyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIGV1cm8gc2lnbiwgVSsyMEFDIE5FVyAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBEVEQgbW9kdWxlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gSW5mb3JtYXRpb24gcG9vbCAuLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIFJlZGVjbGFyYXRpb24gcGxhY2Vob2xkZXIgLi4uLi4gLS0+CiAgPCEtLSBEb2N1bWVudCBoaWVyYXJjaHkgLi4uLi4uLi4uLi4uIC0tPgo8L3hzOnNjaGVtYT4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIE90aGVyIGdlbmVyYWwgZW50aXRpZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRW5kIG9mIERvY0Jvb2sgWE1MIERURCBWNC40IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Docbook/4_4/htmltblx.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIERvY0Jvb2sgWE1MIEhUTUwgVGFibGUgTW9kdWxlIFY0LjQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRmlsZSBodG1sdGJseC5tb2QgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIENvcHlyaWdodCAyMDAzLCAyMDA0IEFyYm9yVGV4dCwgSW5jLiwgTm9ybWFuIFdhbHNoLCBTdW4gTWljcm9zeXN0ZW1zLAogIEluYy4sIGFuZCB0aGUgT3JnYW5pemF0aW9uIGZvciB0aGUgQWR2YW5jZW1lbnQgb2YgU3RydWN0dXJlZCBJbmZvcm1hdGlvbgogIFN0YW5kYXJkcyAoT0FTSVMpLgogIAogICRJZDogaHRtbHRibHgubW9kLHYgMS4yMyAyMDA1LzAxLzI3IDEzOjUyOjAwIG53YWxzaCBFeHAgJAogIAogIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY0Jvb2sgWE1MIERURAogIGFuZCBpdHMgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZQogIGlzIGhlcmVieSBncmFudGVkIGluIHBlcnBldHVpdHksIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAogIG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggYXBwZWFyIGluIGFsbCBjb3BpZXMuICBUaGUgY29weXJpZ2h0CiAgaG9sZGVycyBtYWtlIG5vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGUgRFREIGZvcgogIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3NlZCBvciBpbXBsaWVkCiAgd2FycmFudHkuCiAgCiAgSWYgeW91IG1vZGlmeSB0aGUgRG9jQm9vayBYTUwgRFREIGluIGFueSB3YXksIGV4Y2VwdCBmb3IgZGVjbGFyaW5nIGFuZAogIHJlZmVyZW5jaW5nIGFkZGl0aW9uYWwgc2V0cyBvZiBnZW5lcmFsIGVudGl0aWVzIGFuZCBkZWNsYXJpbmcKICBhZGRpdGlvbmFsIG5vdGF0aW9ucywgbGFiZWwgeW91ciBEVEQgYXMgYSB2YXJpYW50IG9mIERvY0Jvb2suICBTZWUKICB0aGUgbWFpbnRlbmFuY2UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAKICBQbGVhc2UgZGlyZWN0IGFsbCBxdWVzdGlvbnMsIGJ1ZyByZXBvcnRzLCBvciBzdWdnZXN0aW9ucyBmb3IKICBjaGFuZ2VzIHRvIHRoZSBkb2Nib29rQGxpc3RzLm9hc2lzLW9wZW4ub3JnIG1haWxpbmcgbGlzdC4gRm9yIG1vcmUKICBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay8uCi0tPgo8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0KICBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIGVsZW1lbnRzIHRoYXQgYXJlCiAgaXNvbW9ycGhpYyB0byB0aGUgSFRNTCBlbGVtZW50cy4gT25lIGNvdWxkIGFyZ3VlIHdlIHNob3VsZAogIGluc3RlYWQgaGF2ZSBiYXNlZCBvdXJzZWx2ZXMgb24gdGhlIFhIVE1MIFRhYmxlIE1vZHVsZSwgYnV0IHRoZQogIEhUTUwgb25lIGlzIG1vcmUgbGlrZSB3aGF0IGJyb3dzZXJzIGFyZSBsaWtlbHkgdG8gYWNjZXB0IHRvZGF5CiAgYW5kIHVzZXJzIGFyZSBsaWtlbHkgdG8gdXNlLgogIAogIFRoaXMgbW9kdWxlIGhhcyBiZWVuIGRldmVsb3BlZCBmb3IgdXNlIHdpdGggdGhlIERvY0Jvb2sgVjQuNAogICJ1bmlvbiB0YWJsZSBtb2RlbCIgaW4gd2hpY2ggZWxlbWVudHMgYW5kIGF0dGxpc3RzIGNvbW1vbiB0byBib3RoCiAgbW9kZWxzIGFyZSBkZWZpbmVkIChhcyB0aGUgdW5pb24pIGluIHRoZSBDQUxTIHRhYmxlIG1vZHVsZSBieQogIHNldHRpbmcgdmFyaW91cyBwYXJhbWV0ZXIgZW50aXRpZXMgYXBwcm9wcmlhdGVseSBpbiB0aGlzIGZpbGUuCiAgCiAgSW4gRFREIGRyaXZlciBmaWxlcyByZWZlcnJpbmcgdG8gdGhpcyBtb2R1bGUsIHBsZWFzZSB1c2UgYW4gZW50aXR5CiAgZGVjbGFyYXRpb24gdGhhdCB1c2VzIHRoZSBwdWJsaWMgaWRlbnRpZmllciBzaG93biBiZWxvdzoKICAKICA8IUVOVElUWSAlIGh0bWx0YmwgUFVCTElDCiAgIi0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBIVE1MIFRhYmxlcyBWNC40Ly9FTiIKICAiaHRtbHRibHgubW9kIj4KICAlaHRtbHRibDsKICAKICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoZSBwYXJhbWV0ZXIKICBlbnRpdHkgYW5kIG1vZHVsZSBzY2hlbWUgdXNlZCBpbiBEb2NCb29rLCBjdXN0b21pemluZyBEb2NCb29rIGFuZAogIHBsYW5uaW5nIGZvciBpbnRlcmNoYW5nZSwgYW5kIGNoYW5nZXMgbWFkZSBzaW5jZSB0aGUgbGFzdCByZWxlYXNlCiAgb2YgRG9jQm9vay4KLS0+CjwhLS0gPT09PT09PT09PT09PT09PT09PT09PT0gWEhUTUwgVGFibGVzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiBzY2hlbWFMb2NhdGlvbj0ieG1sLnhzZCIvPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJodG1sLmNvcmVhdHRycyI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czpJRCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzdHlsZSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0aXRsZSIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBEb2VzIG5vdCBjb250YWluIGxhbmcgb3IgZGlyIGJlY2F1c2UgdGhleSBhcmUgaW4gJWNvbW1vbi5hdHRyaWJzIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpMThuIj4KICAgIDx4czphdHRyaWJ1dGUgcmVmPSJ4bWw6bGFuZyIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImV2ZW50cyI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im9uY2xpY2siLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib25kYmxjbGljayIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvbm1vdXNlZG93biIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvbm1vdXNldXAiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib25tb3VzZW92ZXIiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib25tb3VzZW1vdmUiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib25tb3VzZW91dCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvbmtleXByZXNzIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im9ua2V5ZG93biIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvbmtleXVwIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXR0cnMiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaHRtbC5jb3JlYXR0cnMiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImkxOG4iLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImV2ZW50cyIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNlbGxoYWxpZ24iPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxlZnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2VudGVyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJpZ2h0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imp1c3RpZnkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2hhciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjaGFyIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNoYXJvZmYiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjZWxsdmFsaWduIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idmFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idG9wIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im1pZGRsZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJib3R0b20iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYmFzZWxpbmUiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImNvbGdyb3VwIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29sIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbGdyb3VwLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDx4czplbGVtZW50IG5hbWU9ImNvbCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0ciI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0idGgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRkIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0ci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0aCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJ0YWJlbnRyeS5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRhYmxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmZvcm1hbHRhYmxlIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0aC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0ZCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJ0YWJlbnRyeS5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRhYmxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmZvcm1hbHRhYmxlIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0ZC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29sZ3JvdXAuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhdHRycyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzcGFuIiBkZWZhdWx0PSIxIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9IndpZHRoIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjZWxsaGFsaWduIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjZWxsdmFsaWduIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29sLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXR0cnMiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3BhbiIgZGVmYXVsdD0iMSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ3aWR0aCIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2VsbGhhbGlnbiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2VsbHZhbGlnbiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRyLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXR0cnMiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNlbGxoYWxpZ24iLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNlbGx2YWxpZ24iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYmdjb2xvciIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRoLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXR0cnMiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYWJiciIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJheGlzIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImhlYWRlcnMiIHR5cGU9InhzOklEUkVGUyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzY29wZSI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJvdyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjb2wiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icm93Z3JvdXAiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY29sZ3JvdXAiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icm93c3BhbiIgZGVmYXVsdD0iMSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb2xzcGFuIiBkZWZhdWx0PSIxIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjZWxsaGFsaWduIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjZWxsdmFsaWduIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5vd3JhcCI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5vd3JhcCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJiZ2NvbG9yIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9IndpZHRoIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImhlaWdodCIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRkLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXR0cnMiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYWJiciIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJheGlzIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImhlYWRlcnMiIHR5cGU9InhzOklEUkVGUyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzY29wZSI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJvdyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjb2wiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icm93Z3JvdXAiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY29sZ3JvdXAiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icm93c3BhbiIgZGVmYXVsdD0iMSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb2xzcGFuIiBkZWZhdWx0PSIxIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjZWxsaGFsaWduIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjZWxsdmFsaWduIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5vd3JhcCI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5vd3JhcCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJiZ2NvbG9yIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9IndpZHRoIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImhlaWdodCIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgPCEtLQogICAgU2V0IHVwIHRvIHJlYWQgaW4gdGhlIENBTFMgbW9kZWwgY29uZmlndXJlZCB0bwogICAgbWVyZ2Ugd2l0aCB0aGUgWEhUTUwgdGFibGUgbW9kZWwKICAtLT4KICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGFibGVzLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIEFkZCBsYWJlbCBhbmQgcm9sZSBhdHRyaWJ1dGVzIHRvIHRhYmxlIGFuZCBpbmZvcm1hbHRhYmxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJib2R5YXR0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZmxvYXRzdHlsZSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyb3doZWFkZXIiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJmaXJzdGNvbCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJub3Jvd2hlYWRlciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tCiAgICBBZGQgY29tbW9uIGF0dHJpYnV0ZXMgdG8gVGFibGUsIFRHcm91cCwgVEJvZHksIFRIZWFkLCBURm9vdCwgUm93LCAKICAgIEVudHJ5VGJsLCBhbmQgRW50cnkgKGFuZCBJbmZvcm1hbFRhYmxlIGVsZW1lbnQpLgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN1ciI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNsYXNzIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InN0eWxlIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InRpdGxlIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpMThuIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJldmVudHMiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRhYmxlcy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbW1vbi50YWJsZS5hdHRyaWJzIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJvZHlhdHQiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3VyIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIENvbnRlbnQgbW9kZWwgZm9yIFRhYmxlICh0aGF0IGFsc28gYWxsb3dzIEhUTUwgdGFibGVzKSAtLT4KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idGJsLnRhYmxlLm1kbCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImZvcm1hbG9iamVjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0ZXh0b2JqZWN0Ii8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImdyYXBoaWMiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1lZGlhb2JqZWN0Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0Z3JvdXAiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY2FwdGlvbiIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjb2xncm91cCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0aGVhZCIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0Zm9vdCIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0Ym9keSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idHIiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Y29tcGxleFR5cGU+CiAgPHhzOmdyb3VwIG5hbWU9ImluZm9ybWFsLnRibC50YWJsZS5tZGwiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idGV4dG9iamVjdCIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJncmFwaGljIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtZWRpYW9iamVjdCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idGdyb3VwIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjb2wiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29sZ3JvdXAiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGhlYWQiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGZvb3QiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idGJvZHkiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRyIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDwhLS0gQXR0cmlidXRlcyBmb3IgVGFibGUgKGluY2x1ZGluZyBIVE1MIG9uZXMpIC0tPgogIDwhLS0gTi5CLiBydWxlcyA9IChub25lIHwgZ3JvdXBzIHwgcm93cyB8IGNvbHMgfCBhbGwpIGJ1dCBpdCBjYW4ndCBiZSBzcGVjJ2QgLS0+CiAgPCEtLSB0aGF0IHdheSBiZWNhdXNlICdhbGwnIGFscmVhZHkgb2NjdXJzIGluIGEgZGlmZmVyZW50IGVudW1lcmF0aW9uIGluIC0tPgogIDwhLS0gQ0FMUyB0YWJsZXMgKGZyYW1lKS4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRibC50YWJsZS5hdHQiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0YWJzdHlsZSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0b2NlbnRyeSIgdHlwZT0ieWVzb3Juby5hdHR2YWxzIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNob3J0ZW50cnkiIHR5cGU9Inllc29ybm8uYXR0dmFscyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvcmllbnQiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwb3J0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxhbmQiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icGd3aWRlIiB0eXBlPSJ5ZXNvcm5vLmF0dHZhbHMiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3VtbWFyeSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ3aWR0aCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJib3JkZXIiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icnVsZXMiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2VsbHNwYWNpbmciLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2VsbHBhZGRpbmciLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYWxpZ24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsZWZ0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNlbnRlciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyaWdodCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJiZ2NvbG9yIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJ0YmwuZnJhbWUuYXR0dmFsIj4KICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idm9pZCIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImFib3ZlIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYmVsb3ciLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJoc2lkZXMiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsaHMiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyaHMiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ2c2lkZXMiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJib3giLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJib3JkZXIiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0b3AiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJib3R0b20iLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0b3Bib3QiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJhbGwiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzaWRlcyIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5vbmUiLz4KICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgPC94czpzaW1wbGVUeXBlPgogIDwhLS0gQWxsb3cgZWl0aGVyIG9iamVjdHMgb3IgaW5saW5lczsgYmV3YXJlIG9mIFJFcyBiZXR3ZWVuIGVsZW1lbnRzLiAtLT4KICA8eHM6Z3JvdXAgbmFtZT0idGJsLmVudHJ5Lm1kbCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6Z3JvdXAgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czpncm91cCByZWY9InRhYmVudHJ5Lm1peCIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8IS0tCiAgICB0aGVhZCwgdGZvb3QsIGFuZCB0Ym9keSBhcmUgZGVmaW5lZCBpbiBib3RoIHRhYmxlIG1vZGVscywKICAgIHNvIHdlIHNldCB1cCBwYXJhbWV0ZXIgZW50aXRpZXMgdG8gZGVmaW5lIHVuaW9uIG1vZGVscyBmb3IgdGhlbQogIC0tPgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0YmwuaGRmdC5tZGwiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idHIiLz4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29sc3BlYyIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJvdyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgPC94czpjaG9pY2U+CiAgPC94czpjb21wbGV4VHlwZT4KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idGJsLnRib2R5Lm1kbCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0ciIvPgogICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyb3ciLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Y29tcGxleFR5cGU+CjwveHM6c2NoZW1hPgo8IS0tIEVuZCBvZiBEb2NCb29rIFhNTCBIVE1MIFRhYmxlIE1vZHVsZSBWNC40IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4K</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Docbook/4_4/xml.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSI+CiAgPHhzOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iZG9jYm9vay54c2QiLz4KICA8eHM6YXR0cmlidXRlIG5hbWU9ImJhc2UiLz4KICA8eHM6YXR0cmlidXRlIG5hbWU9InNwYWNlIj4KICAgIDx4czpzaW1wbGVUeXBlPgogICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icHJlc2VydmUiLz4KICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgIDwveHM6c2ltcGxlVHlwZT4KICA8L3hzOmF0dHJpYnV0ZT4KICA8eHM6YXR0cmlidXRlIG5hbWU9ImxhbmciIHR5cGU9InhzOk5NVE9LRU4iLz4KPC94czpzY2hlbWE+Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Docbook/4_5/calstblx.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIERvY0Jvb2sgQ0FMUyBUYWJsZSBNb2RlbCBWNC41IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRmlsZSBjYWxzdGJseC5tb2QgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIENvcHlyaWdodCAxOTkyLTIwMDIgSGFMIENvbXB1dGVyIFN5c3RlbXMsIEluYy4sCiAgTydSZWlsbHkgJiBBc3NvY2lhdGVzLCBJbmMuLCBBcmJvclRleHQsIEluYy4sIEZ1aml0c3UgU29mdHdhcmUKICBDb3Jwb3JhdGlvbiwgTm9ybWFuIFdhbHNoLCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCBhbmQgdGhlCiAgT3JnYW5pemF0aW9uIGZvciB0aGUgQWR2YW5jZW1lbnQgb2YgU3RydWN0dXJlZCBJbmZvcm1hdGlvbgogIFN0YW5kYXJkcyAoT0FTSVMpLgogIAogIFRoaXMgRFREIGlzIGJhc2VkIG9uIHRoZSBDQUxTIFRhYmxlIE1vZGVsCiAgUFVCTElDICItLy9VU0EtRE9ELy9EVEQgVGFibGUgTW9kZWwgOTUxMDEwLy9FTiIKICAKICAkSWQ6IGNhbHN0Ymx4LmR0ZCA2MzQwIDIwMDYtMTAtMDMgMTM6MjM6MjRaIG53YWxzaCAkCiAgCiAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jQm9vayBEVEQKICBhbmQgaXRzIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUKICBpcyBoZXJlYnkgZ3JhbnRlZCBpbiBwZXJwZXR1aXR5LCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKICBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGFwcGVhciBpbiBhbGwgY29waWVzLiAgVGhlIGNvcHlyaWdodAogIGhvbGRlcnMgbWFrZSBubyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhlIERURCBmb3IKICBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzZWQgb3IgaW1wbGllZAogIHdhcnJhbnR5LgogIAogIElmIHlvdSBtb2RpZnkgdGhlIERvY0Jvb2sgRFREIGluIGFueSB3YXksIGV4Y2VwdCBmb3IgZGVjbGFyaW5nIGFuZAogIHJlZmVyZW5jaW5nIGFkZGl0aW9uYWwgc2V0cyBvZiBnZW5lcmFsIGVudGl0aWVzIGFuZCBkZWNsYXJpbmcKICBhZGRpdGlvbmFsIG5vdGF0aW9ucywgbGFiZWwgeW91ciBEVEQgYXMgYSB2YXJpYW50IG9mIERvY0Jvb2suICBTZWUKICB0aGUgbWFpbnRlbmFuY2UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAKICBQbGVhc2UgZGlyZWN0IGFsbCBxdWVzdGlvbnMsIGJ1ZyByZXBvcnRzLCBvciBzdWdnZXN0aW9ucyBmb3IKICBjaGFuZ2VzIHRvIHRoZSBkb2Nib29rQGxpc3RzLm9hc2lzLW9wZW4ub3JnIG1haWxpbmcgbGlzdC4gRm9yIG1vcmUKICBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay8uCi0tPgo8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0KICBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBDQUxTIFRhYmxlIE1vZGVsCiAgY29udmVydGVkIHRvIFhNTC4gSXQgaGFzIGJlZW4gbW9kaWZpZWQgc2xpZ2h0bHkgZm9yIHVzZSBpbiB0aGUKICBjb21iaW5lZCBIVE1ML0NBTFMgbW9kZWxzIHN1cHBvcnRlZCBieSBEb2NCb29rIFY0LjUuCi0tPgo8IS0tCiAgVGhlc2UgZGVmaW5pdGlvbnMgYXJlIG5vdCBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSB0YWJsZSBtb2RlbCwgYnV0IGFyZQogIHVzZWQgaW4gdGhlIGRlZmF1bHQgQ0FMUyB0YWJsZSBtb2RlbCBhbmQgYXJlIHVzdWFsbHkgZGVmaW5lZCBlbHNld2hlcmUKICAoYW5kIHByaW9yIHRvIHRoZSBpbmNsdXNpb24gb2YgdGhpcyB0YWJsZSBtb2R1bGUpIGluIGEgQ0FMUyBEVEQuCi0tPgo8IS0tCiAgbm8gaWYgemVybyhzKSwKICB5ZXMgaWYgYW55IG90aGVyIGRpZ2l0cyB2YWx1ZQotLT4KPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiBzY2hlbWFMb2NhdGlvbj0ieG1sLnhzZCIvPgogIDx4czpzaW1wbGVUeXBlIG5hbWU9Inllc29ybm8iPgogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyIvPgogIDwveHM6c2ltcGxlVHlwZT4KICA8eHM6Z3JvdXAgbmFtZT0idGl0bGVzIj4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlIi8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPCEtLSBkZWZhdWx0IGZvciB1c2UgaW4gZW50cnkgY29udGVudCAtLT4KICA8IS0tCiAgICBUaGUgcGFyYW1ldGVyIGVudGl0aWVzIGFzIGRlZmluZWQgYmVsb3cgcHJvdmlkZSB0aGUgQ0FMUyB0YWJsZSBtb2RlbAogICAgYXMgcHVibGlzaGVkIChhcyBwYXJ0IG9mIHRoZSBFeGFtcGxlIERURCkgaW4gTUlMLUhEQkstMjgwMDEuCiAgICAKICAgIFRoZXNlIGZvbGxvd2luZyBkZWNsYXJhdGlvbnMgcHJvdmlkZSB0aGUgQ0FMUy1jb21wbGlhbnQgZGVmYXVsdCBkZWZpbml0aW9ucwogICAgZm9yIHRoZXNlIGVudGl0aWVzLiAgSG93ZXZlciwgdGhlc2UgZW50aXRpZXMgY2FuIGFuZCBzaG91bGQgYmUgcmVkZWZpbmVkCiAgICAoYnkgZ2l2aW5nIHRoZSBhcHByb3ByaWF0ZSBwYXJhbWV0ZXIgZW50aXR5IGRlY2xhcmF0aW9uKHMpIHByaW9yIHRvIHRoZQogICAgcmVmZXJlbmNlIHRvIHRoaXMgVGFibGUgTW9kZWwgZGVjbGFyYXRpb24gc2V0IGVudGl0eSkgdG8gZml0IHRoZSBuZWVkcwogICAgb2YgdGhlIGN1cnJlbnQgYXBwbGljYXRpb24uCiAgLS0+CiAgPHhzOmdyb3VwIG5hbWU9InRibC50YWJsZS10aXRsZXMubWRsIj4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmdyb3VwIHJlZj0idGl0bGVzIi8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9InRibC50YWJsZS1tYWluLm1kbCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0Z3JvdXAiLz4KICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZ3JhcGhpYyIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idGJsLnRncm91cC5tZGwiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbHNwZWMiLz4KICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzcGFuc3BlYyIvPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGhlYWQiLz4KICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRmb290Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0idGJvZHkiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpjb21wbGV4VHlwZT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGJsLnRncm91cC5hdHQiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0Z3JvdXBzdHlsZSIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRibC5yb3cubWRsIj4KICAgIDx4czpjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImVudHJ5Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZW50cnl0YmwiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Y29tcGxleFR5cGU+CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRibC5lbnRyeXRibC5tZGwiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbHNwZWMiLz4KICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzcGFuc3BlYyIvPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGhlYWQiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0Ym9keSIvPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmNvbXBsZXhUeXBlPgogIDwhLS0gPT09PT0gIEVsZW1lbnQgYW5kIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbnMgZm9sbG93LiA9PT09PSAtLT4KICA8IS0tIGRvYzpBIGZvcm1hbCB0YWJsZSBpbiBhIGRvY3VtZW50LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0YWJsZSIgc3Vic3RpdHV0aW9uR3JvdXA9ImZvcm1hbC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpjb21wbGV4Q29udGVudD4KICAgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRibC50YWJsZS5tZGwiPgogICAgICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGFibGUuYXR0bGlzdCIvPgogICAgICAgIDwveHM6ZXh0ZW5zaW9uPgogICAgICA8L3hzOmNvbXBsZXhDb250ZW50PgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRhYmxlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmcmFtZSIgdHlwZT0idGJsLmZyYW1lLmF0dHZhbCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb2xzZXAiIHR5cGU9Inllc29ybm8iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icm93c2VwIiB0eXBlPSJ5ZXNvcm5vIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0YmwudGFibGUuYXR0Ii8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJib2R5YXR0Ii8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN1ciIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSB3cmFwcGVyIGZvciB0aGUgbWFpbiBjb250ZW50IG9mIGEgdGFibGUsIG9yIHBhcnQgb2YgYSB0YWJsZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idGdyb3VwIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNvbXBsZXhDb250ZW50PgogICAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idGJsLnRncm91cC5tZGwiPgogICAgICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGdyb3VwLmF0dGxpc3QiLz4KICAgICAgICA8L3hzOmV4dGVuc2lvbj4KICAgICAgPC94czpjb21wbGV4Q29udGVudD4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0Z3JvdXAuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbHMiIHVzZT0icmVxdWlyZWQiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRibC50Z3JvdXAuYXR0Ii8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbHNlcCIgdHlwZT0ieWVzb3JubyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyb3dzZXAiIHR5cGU9Inllc29ybm8iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYWxpZ24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsZWZ0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJpZ2h0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNlbnRlciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJqdXN0aWZ5Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNoYXIiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2hhciIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjaGFyb2ZmIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN1ciIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6U3BlY2lmaWNhdGlvbnMgZm9yIGEgY29sdW1uIGluIGEgdGFibGUuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImNvbHNwZWMiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb2xzcGVjLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb2xzcGVjLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb2xudW0iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29sbmFtZSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb2x3aWR0aCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb2xzZXAiIHR5cGU9Inllc29ybm8iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icm93c2VwIiB0eXBlPSJ5ZXNvcm5vIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGVmdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyaWdodCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjZW50ZXIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ianVzdGlmeSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjaGFyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNoYXIiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2hhcm9mZiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6Rm9ybWF0dGluZyBpbmZvcm1hdGlvbiBmb3IgYSBzcGFubmVkIGNvbHVtbiBpbiBhIHRhYmxlLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJzcGFuc3BlYyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNwYW5zcGVjLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzcGFuc3BlYy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZXN0IiB1c2U9InJlcXVpcmVkIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWVlbmQiIHVzZT0icmVxdWlyZWQiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3Bhbm5hbWUiIHVzZT0icmVxdWlyZWQiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29sc2VwIiB0eXBlPSJ5ZXNvcm5vIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJvd3NlcCIgdHlwZT0ieWVzb3JubyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxlZnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmlnaHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2VudGVyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imp1c3RpZnkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2hhciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjaGFyIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNoYXJvZmYiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgdGFibGUgaGVhZGVyIGNvbnNpc3Rpbmcgb2Ygb25lIG9yIG1vcmUgcm93cy4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idGhlYWQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Y29tcGxleENvbnRlbnQ+CiAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0YmwuaGRmdC5tZGwiPgogICAgICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGhlYWQuYXR0bGlzdCIvPgogICAgICAgIDwveHM6ZXh0ZW5zaW9uPgogICAgICA8L3hzOmNvbXBsZXhDb250ZW50PgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRoZWFkLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2YWxpZ24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0b3AiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibWlkZGxlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImJvdHRvbSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdXIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgdGFibGUgZm9vdGVyIGNvbnNpc3Rpbmcgb2Ygb25lIG9yIG1vcmUgcm93cy4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idGZvb3QiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Y29tcGxleENvbnRlbnQ+CiAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0YmwuaGRmdC5tZGwiPgogICAgICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGZvb3QuYXR0bGlzdCIvPgogICAgICAgIDwveHM6ZXh0ZW5zaW9uPgogICAgICA8L3hzOmNvbXBsZXhDb250ZW50PgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRmb290LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2YWxpZ24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0b3AiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibWlkZGxlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImJvdHRvbSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdXIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgd3JhcHBlciBmb3IgdGhlIHJvd3Mgb2YgYSB0YWJsZSBvciBpbmZvcm1hbCB0YWJsZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idGJvZHkiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Y29tcGxleENvbnRlbnQ+CiAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0YmwudGJvZHkubWRsIj4KICAgICAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRib2R5LmF0dGxpc3QiLz4KICAgICAgICA8L3hzOmV4dGVuc2lvbj4KICAgICAgPC94czpjb21wbGV4Q29udGVudD4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0Ym9keS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idmFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idG9wIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im1pZGRsZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJib3R0b20iLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3VyIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHJvdyBpbiBhIHRhYmxlLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJyb3ciPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Y29tcGxleENvbnRlbnQ+CiAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0Ymwucm93Lm1kbCI+CiAgICAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb3cuYXR0bGlzdCIvPgogICAgICAgIDwveHM6ZXh0ZW5zaW9uPgogICAgICA8L3hzOmNvbXBsZXhDb250ZW50PgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJvdy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icm93c2VwIiB0eXBlPSJ5ZXNvcm5vIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbGlnbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRvcCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJtaWRkbGUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYm90dG9tIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN1ciIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBzdWJ0YWJsZSBhcHBlYXJpbmcgaW4gcGxhY2Ugb2YgYW4gRW50cnkgaW4gYSB0YWJsZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZW50cnl0YmwiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Y29tcGxleENvbnRlbnQ+CiAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ0YmwuZW50cnl0YmwubWRsIj4KICAgICAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVudHJ5dGJsLmF0dGxpc3QiLz4KICAgICAgICA8L3hzOmV4dGVuc2lvbj4KICAgICAgPC94czpjb21wbGV4Q29udGVudD4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlbnRyeXRibC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29scyIgdXNlPSJyZXF1aXJlZCIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGJsLnRncm91cC5hdHQiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29sbmFtZSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzcGFubmFtZSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lc3QiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZWVuZCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb2xzZXAiIHR5cGU9Inllc29ybm8iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icm93c2VwIiB0eXBlPSJ5ZXNvcm5vIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGVmdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyaWdodCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjZW50ZXIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ianVzdGlmeSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjaGFyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNoYXIiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2hhcm9mZiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdXIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgY2VsbCBpbiBhIHRhYmxlLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJlbnRyeSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0YmwuZW50cnkubWRsIi8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVudHJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlbnRyeS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29sbmFtZSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lc3QiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZWVuZCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzcGFubmFtZSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtb3Jlcm93cyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb2xzZXAiIHR5cGU9Inllc29ybm8iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icm93c2VwIiB0eXBlPSJ5ZXNvcm5vIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGVmdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyaWdodCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjZW50ZXIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ianVzdGlmeSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjaGFyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNoYXIiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2hhcm9mZiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyb3RhdGUiIHR5cGU9Inllc29ybm8iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idmFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idG9wIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im1pZGRsZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJib3R0b20iLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3VyIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KPC94czpzY2hlbWE+CjwhLS0gRW5kIG9mIERvY0Jvb2sgQ0FMUyBUYWJsZSBNb2RlbCBWNC41IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Docbook/4_5/dbhierx.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIERvY0Jvb2sgZG9jdW1lbnQgaGllcmFyY2h5IG1vZHVsZSBWNC41IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRmlsZSBkYmhpZXJ4Lm1vZCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIENvcHlyaWdodCAxOTkyLTIwMDQgSGFMIENvbXB1dGVyIFN5c3RlbXMsIEluYy4sCiAgTydSZWlsbHkgJiBBc3NvY2lhdGVzLCBJbmMuLCBBcmJvclRleHQsIEluYy4sIEZ1aml0c3UgU29mdHdhcmUKICBDb3Jwb3JhdGlvbiwgTm9ybWFuIFdhbHNoLCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCBhbmQgdGhlCiAgT3JnYW5pemF0aW9uIGZvciB0aGUgQWR2YW5jZW1lbnQgb2YgU3RydWN0dXJlZCBJbmZvcm1hdGlvbgogIFN0YW5kYXJkcyAoT0FTSVMpLgogIAogICRJZDogZGJoaWVyeC5tb2QgNjM0MCAyMDA2LTEwLTAzIDEzOjIzOjI0WiBud2Fsc2ggJAogIAogIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY0Jvb2sgRFRECiAgYW5kIGl0cyBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlCiAgaXMgaGVyZWJ5IGdyYW50ZWQgaW4gcGVycGV0dWl0eSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CiAgbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBhcHBlYXIgaW4gYWxsIGNvcGllcy4gIFRoZSBjb3B5cmlnaHQKICBob2xkZXJzIG1ha2Ugbm8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoZSBEVEQgZm9yCiAgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzc2VkIG9yIGltcGxpZWQKICB3YXJyYW50eS4KICAKICBJZiB5b3UgbW9kaWZ5IHRoZSBEb2NCb29rIERURCBpbiBhbnkgd2F5LCBleGNlcHQgZm9yIGRlY2xhcmluZyBhbmQKICByZWZlcmVuY2luZyBhZGRpdGlvbmFsIHNldHMgb2YgZ2VuZXJhbCBlbnRpdGllcyBhbmQgZGVjbGFyaW5nCiAgYWRkaXRpb25hbCBub3RhdGlvbnMsIGxhYmVsIHlvdXIgRFREIGFzIGEgdmFyaWFudCBvZiBEb2NCb29rLiAgU2VlCiAgdGhlIG1haW50ZW5hbmNlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgCiAgUGxlYXNlIGRpcmVjdCBhbGwgcXVlc3Rpb25zLCBidWcgcmVwb3J0cywgb3Igc3VnZ2VzdGlvbnMgZm9yCiAgY2hhbmdlcyB0byB0aGUgZG9jYm9va0BsaXN0cy5vYXNpcy1vcGVuLm9yZyBtYWlsaW5nIGxpc3QuIEZvciBtb3JlCiAgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2svLgotLT4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tCiAgVGhpcyBtb2R1bGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgb3ZlcmFsbCBkb2N1bWVudAogIGhpZXJhcmNoaWVzIG9mIERvY0Jvb2sgZG9jdW1lbnRzLiAgSXQgY292ZXJzIGNvbXB1dGVyIGRvY3VtZW50YXRpb24KICBtYW51YWxzIGFuZCBtYW51YWwgZnJhZ21lbnRzLCBhcyB3ZWxsIGFzIHJlZmVyZW5jZSBlbnRyaWVzIChzdWNoIGFzCiAgbWFuIHBhZ2VzKSBhbmQgdGVjaG5pY2FsIGpvdXJuYWxzIG9yIGFudGhvbG9naWVzIGNvbnRhaW5pbmcKICBhcnRpY2xlcy4KICAKICBUaGlzIG1vZHVsZSBkZXBlbmRzIG9uIHRoZSBEb2NCb29rIGluZm9ybWF0aW9uIHBvb2wgbW9kdWxlLiAgQWxsCiAgZWxlbWVudHMgYW5kIGVudGl0aWVzIHJlZmVyZW5jZWQgYnV0IG5vdCBkZWZpbmVkIGhlcmUgYXJlIGFzc3VtZWQKICB0byBiZSBkZWZpbmVkIGluIHRoZSBpbmZvcm1hdGlvbiBwb29sIG1vZHVsZS4KICAKICBJbiBEVEQgZHJpdmVyIGZpbGVzIHJlZmVycmluZyB0byB0aGlzIG1vZHVsZSwgcGxlYXNlIHVzZSBhbiBlbnRpdHkKICBkZWNsYXJhdGlvbiB0aGF0IHVzZXMgdGhlIHB1YmxpYyBpZGVudGlmaWVyIHNob3duIGJlbG93OgogIAogIDwhRU5USVRZICUgZGJoaWVyIFBVQkxJQwogICItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBEb2N1bWVudCBIaWVyYXJjaHkgVjQuNS8vRU4iCiAgImRiaGllcngubW9kIj4KICAlZGJoaWVyOwogIAogIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIHBhcmFtZXRlcgogIGVudGl0eSBhbmQgbW9kdWxlIHNjaGVtZSB1c2VkIGluIERvY0Jvb2ssIGN1c3RvbWl6aW5nIERvY0Jvb2sgYW5kCiAgcGxhbm5pbmcgZm9yIGludGVyY2hhbmdlLCBhbmQgY2hhbmdlcyBtYWRlIHNpbmNlIHRoZSBsYXN0IHJlbGVhc2UKICBvZiBEb2NCb29rLgotLT4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIEVudGl0aWVzIGZvciBtb2R1bGUgaW5jbHVzaW9ucyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLSBFbnRpdGllcyBmb3IgZWxlbWVudCBjbGFzc2VzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgogIDx4czppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiIHNjaGVtYUxvY2F0aW9uPSJ4bWwueHNkIi8+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXBwZW5kaXguY2xhc3MiIGFic3RyYWN0PSJ0cnVlIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJiZWdpbnBhZ2UiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYXBwZW5kaXhpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iYm9va2NvbXBvbmVudC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRvY2NoYXAiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJib29rY29tcG9uZW50LmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXBwZW5kaXguYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXJ0aWNsZS5jbGFzcyIgYWJzdHJhY3Q9InRydWUiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJkaXYudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJhcnRpY2xlaW5mbyIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0b2NjaGFwIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJsb3QiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJib29rY29tcG9uZW50LmNvbnRlbnQiLz4KICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmdyb3VwIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFwcGVuZGl4LmNsYXNzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvbG9waG9uIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFja25vIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFydGljbGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYm9vay5jbGFzcyIgYWJzdHJhY3Q9InRydWUiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJkaXYudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJib29raW5mbyIvPgogICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImRlZGljYXRpb24iLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0idG9jIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxvdCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJnbG9zc2FyeSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiaWJsaW9ncmFwaHkiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0icHJlZmFjZSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjaGFwdGVyLmNsYXNzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InJlZmVyZW5jZSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJ0Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFydGljbGUuY2xhc3MiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iYXBwZW5kaXguY2xhc3MiLz4KICAgICAgICAgIDx4czpncm91cCByZWY9ImluZGV4LmNsYXNzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvbG9waG9uIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJvb2suYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY2hhcHRlci5jbGFzcyIgYWJzdHJhY3Q9InRydWUiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJlZ2lucGFnZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJjaGFwdGVyaW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJvb2tjb21wb25lbnQudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5hdi5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0b2NjaGFwIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iYm9va2NvbXBvbmVudC5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmF2LmNsYXNzIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNoYXB0ZXIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPHhzOmdyb3VwIG5hbWU9ImluZGV4LmNsYXNzIj4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaW5kZXgiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzZXRpbmRleCIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZlbnRyeS5jbGFzcyIgYWJzdHJhY3Q9InRydWUiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJlZ2lucGFnZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJyZWZlbnRyeWluZm8iLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0icmVmbWV0YSIvPgogICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InJlbWFyayIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rLmNoYXIuY2xhc3MiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZuYW1lZGl2Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InJlZnN5bm9wc2lzZGl2Ii8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZnNlY3QxIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZzZWN0aW9uIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZmVudHJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDx4czplbGVtZW50IG5hbWU9InNlY3Rpb24uY2xhc3MiIGFic3RyYWN0PSJ0cnVlIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJzZWN0aW9uaW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9InNlY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5hdi5jbGFzcyIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkaXZjb21wb25lbnQubWl4Ii8+CiAgICAgICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZlbnRyeS5jbGFzcyIvPgogICAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2VjdGlvbi5jbGFzcyIvPgogICAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2ltcGxlc2VjdCIvPgogICAgICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZlbnRyeS5jbGFzcyIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2VjdGlvbi5jbGFzcyIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2ltcGxlc2VjdCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5hdi5jbGFzcyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDx4czpncm91cCBuYW1lPSJuYXYuY2xhc3MiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0b2MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsb3QiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmRleCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imdsb3NzYXJ5Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYmlibGlvZ3JhcGh5Ii8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDwhLS0gUmVkZWNsYXJhdGlvbiBwbGFjZWhvbGRlciAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tCiAgICBGb3IgcmVkZWNsYXJpbmcgZW50aXRpZXMgdGhhdCBhcmUgZGVjbGFyZWQgYWZ0ZXIgdGhpcyBwb2ludCB3aGlsZQogICAgcmV0YWluaW5nIHRoZWlyIHJlZmVyZW5jZXMgdG8gdGhlIGVudGl0aWVzIHRoYXQgYXJlIGRlY2xhcmVkIGJlZm9yZQogICAgdGhpcyBwb2ludAogIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEVudGl0aWVzIGZvciBlbGVtZW50IG1peHR1cmVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmdyb3VwIG5hbWU9ImRpdmNvbXBvbmVudC5taXgiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaXN0LmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYWRtb24uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lc3BlY2lmaWMuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzeW5vcC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmZvcm1hbC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImZvcm1hbC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImNvbXBvdW5kLmNsYXNzIi8+CiAgICAgIDx4czpncm91cCByZWY9Imdlbm9iai5jbGFzcyIvPgogICAgICA8eHM6Z3JvdXAgcmVmPSJkZXNjb2JqLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImJlZ2lucGFnZSIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0icmVmY29tcG9uZW50Lm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imxpc3QuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhZG1vbi5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVzcGVjaWZpYy5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN5bm9wLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImluZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iY29tcG91bmQuY2xhc3MiLz4KICAgICAgPHhzOmdyb3VwIHJlZj0iZ2Vub2JqLmNsYXNzIi8+CiAgICAgIDx4czpncm91cCByZWY9ImRlc2NvYmouY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYmVnaW5wYWdlIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJpbmRleGRpdmNvbXBvbmVudC5taXgiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpdGVtaXplZGxpc3QiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJvcmRlcmVkbGlzdCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InZhcmlhYmxlbGlzdCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InNpbXBsZWxpc3QiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lc3BlY2lmaWMuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzeW5vcC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmZvcm1hbC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFuY2hvciIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InJlbWFyayIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmsuY2hhci5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImJlZ2lucGFnZSIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0icmVmbmFtZS5jaGFyLm1peCI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0ZWNoLmNoYXIuY2xhc3MiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0icGFydGNvbnRlbnQubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYXBwZW5kaXguY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjaGFwdGVyLmNsYXNzIi8+CiAgICAgIDx4czpncm91cCByZWY9Im5hdi5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFydGljbGUuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwcmVmYWNlIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icmVmZW50cnkuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZWZlcmVuY2UiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9InJlZmlubGluZS5jaGFyLm1peCI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhyZWYuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZ2VuLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmsuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0idGVjaC5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iYmFzZS5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJkb2NpbmZvLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJvdGhlci5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9InJlZmNsYXNzLmNoYXIubWl4Ij4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImFwcGxpY2F0aW9uIi8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPCEtLSBSZWRlY2xhcmF0aW9uIHBsYWNlaG9sZGVyIDIgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0KICAgIEZvciByZWRlY2xhcmluZyBlbnRpdGllcyB0aGF0IGFyZSBkZWNsYXJlZCBhZnRlciB0aGlzIHBvaW50IHdoaWxlCiAgICByZXRhaW5pbmcgdGhlaXIgcmVmZXJlbmNlcyB0byB0aGUgZW50aXRpZXMgdGhhdCBhcmUgZGVjbGFyZWQgYmVmb3JlCiAgICB0aGlzIHBvaW50CiAgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gRW50aXRpZXMgZm9yIGNvbnRlbnQgbW9kZWxzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6Z3JvdXAgbmFtZT0iZGl2LnRpdGxlLmNvbnRlbnQiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9InRpdGxlIi8+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJzdWJ0aXRsZSIvPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGVhYmJyZXYiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0iYm9va2NvbXBvbmVudC50aXRsZS5jb250ZW50Ij4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0aXRsZSIvPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ic3VidGl0bGUiLz4KICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlYWJicmV2Ii8+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9InNlY3QudGl0bGUuY29udGVudCI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0idGl0bGUiLz4KICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InN1YnRpdGxlIi8+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0aXRsZWFiYnJldiIvPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJyZWZzZWN0LnRpdGxlLmNvbnRlbnQiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9InRpdGxlIi8+CiAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJzdWJ0aXRsZSIvPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGVhYmJyZXYiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0iYm9va2NvbXBvbmVudC5jb250ZW50Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZGl2Y29tcG9uZW50Lm1peCIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNlY3QxIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmVudHJ5LmNsYXNzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNpbXBsZXNlY3QiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2VjdGlvbi5jbGFzcyIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6Y2hvaWNlPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNlY3QxIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmZW50cnkuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzaW1wbGVzZWN0Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2VjdGlvbi5jbGFzcyIvPgogICAgICA8L3hzOmNob2ljZT4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gU2V0IGFuZCBTZXRJbmZvIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2V0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIGNvbGxlY3Rpb24gb2YgYm9va3MuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InNldCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImRpdi50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InNldGluZm8iLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idG9jIi8+CiAgICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InNldCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJib29rLmNsYXNzIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InNldGluZGV4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNldC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZXQuZWxlbWVudCAtLT4KICA8IS0tIEZQSTogU0dNTCBmb3JtYWwgcHVibGljIGlkZW50aWZpZXIgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNldC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZnBpIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNldC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNldC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNldGluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOk1ldGEtaW5mb3JtYXRpb24gZm9yIGEgU2V0LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZXRpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2V0aW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZXRpbmZvLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgQ29udGVudHM6IElEcyBvZiB0aGUgVG9DLCBCb29rcywgYW5kIFNldEluZGV4IHRoYXQgY29tcHJpc2UKICAgIHRoZSBzZXQsIGluIHRoZSBvcmRlciBvZiB0aGVpciBhcHBlYXJhbmNlCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNldGluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbnRlbnRzIiB0eXBlPSJ4czpJRFJFRlMiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNldGluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNldGluZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzZXRpbmZvLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBzZXQuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gQm9vayBhbmQgQm9va0luZm8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYm9vay5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBib29rLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJib29rIiBzdWJzdGl0dXRpb25Hcm91cD0iYm9vay5jbGFzcyIvPgogIDwhLS0gZW5kIG9mIGJvb2suZWxlbWVudCAtLT4KICA8IS0tIEZQSTogU0dNTCBmb3JtYWwgcHVibGljIGlkZW50aWZpZXIgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJvb2suYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZwaSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJib29rLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBib29rLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYm9vay5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJvb2tpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpNZXRhLWluZm9ybWF0aW9uIGZvciBhIEJvb2suIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImJvb2tpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYm9va2luZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYm9va2luZm8uZWxlbWVudCAtLT4KICA8IS0tCiAgICBDb250ZW50czogSURzIG9mIHRoZSBUb0MsIExvVHMsIFByZWZhY2VzLCBQYXJ0cywgQ2hhcHRlcnMsCiAgICBBcHBlbmRpeGVzLCBSZWZlcmVuY2VzLCBHTG9zc2FyeSwgQmlibGlvZ3JhcGh5LCBhbmQgaW5kZXhlcwogICAgY29tcHJpc2luZyB0aGUgQm9vaywgaW4gdGhlIG9yZGVyIG9mIHRoZWlyIGFwcGVhcmFuY2UKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYm9va2luZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbnRlbnRzIiB0eXBlPSJ4czpJRFJFRlMiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJvb2tpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBib29raW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJvb2tpbmZvLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBib29rLmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIERlZGljYXRpb24sIFRvQywgYW5kIExvVCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImRlZGljYXRpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgd3JhcHBlciBmb3IgdGhlIGRlZGljYXRpb24gc2VjdGlvbiBvZiBhIGJvb2suIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImRlZGljYXRpb24iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJzZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibGVnYWxub3RpY2UubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImRlZGljYXRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZGVkaWNhdGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJkZWRpY2F0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZGVkaWNhdGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZGVkaWNhdGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGRlZGljYXRpb24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb2xvcGhvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGV4dCBhdCB0aGUgYmFjayBvZiBhIGJvb2sgZGVzY3JpYmluZyBmYWN0cyBhYm91dCBpdHMgcHJvZHVjdGlvbi4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29sb3Bob24iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJzZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idGV4dG9iamVjdC5taXgiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29sb3Bob24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY29sb3Bob24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29sb3Bob24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb2xvcGhvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY29sb3Bob24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb2xvcGhvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRvYy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSB0YWJsZSBvZiBjb250ZW50cy4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idG9jIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJiZWdpbnBhZ2UiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImJvb2tjb21wb25lbnQudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idG9jZnJvbnQiLz4KICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0b2NwYXJ0Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRvY2NoYXAiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRvY2JhY2siLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRvYy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2MuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYWdlbnVtLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0b2MuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0b2MubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2Nmcm9udC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QW4gZW50cnkgaW4gYSB0YWJsZSBvZiBjb250ZW50cyBmb3IgYSBmcm9udCBtYXR0ZXIgY29tcG9uZW50LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0b2Nmcm9udCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2Zyb250LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRvY2Zyb250LmVsZW1lbnQgLS0+CiAgPCEtLSB0byBlbGVtZW50IHRoYXQgdGhpcyBlbnRyeSByZXByZXNlbnRzIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2Nmcm9udC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlua2VuZC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhZ2VudW0uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0b2Nmcm9udC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdG9jZnJvbnQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0b2Nmcm9udC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRvY2VudHJ5LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIGNvbXBvbmVudCB0aXRsZSBpbiBhIHRhYmxlIG9mIGNvbnRlbnRzLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0b2NlbnRyeSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2VudHJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRvY2VudHJ5LmVsZW1lbnQgLS0+CiAgPCEtLSB0byBlbGVtZW50IHRoYXQgdGhpcyBlbnRyeSByZXByZXNlbnRzIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2NlbnRyeS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmtlbmQuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYWdlbnVtLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jZW50cnkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRvY2VudHJ5LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdG9jZW50cnkubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2NwYXJ0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBbiBlbnRyeSBpbiBhIHRhYmxlIG9mIGNvbnRlbnRzIGZvciBhIHBhcnQgb2YgYSBib29rLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0b2NwYXJ0Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRvY2VudHJ5Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0b2NjaGFwIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY3BhcnQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdG9jcGFydC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2NwYXJ0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jcGFydC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdG9jcGFydC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHRvY3BhcnQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2NjaGFwLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBbiBlbnRyeSBpbiBhIHRhYmxlIG9mIGNvbnRlbnRzIGZvciBhIGNvbXBvbmVudCBpbiB0aGUgYm9keSBvZiBhIGRvY3VtZW50LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0b2NjaGFwIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRvY2VudHJ5Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0b2NsZXZlbDEiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jY2hhcC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0b2NjaGFwLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRvY2NoYXAuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2NoYXAucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRvY2NoYXAuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0b2NjaGFwLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jbGV2ZWwxLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHRvcC1sZXZlbCBlbnRyeSB3aXRoaW4gYSB0YWJsZSBvZiBjb250ZW50cyBlbnRyeSBmb3IgYSBjaGFwdGVyLWxpa2UgY29tcG9uZW50LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0b2NsZXZlbDEiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idG9jZW50cnkiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRvY2xldmVsMiIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0b2NsZXZlbDEuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdG9jbGV2ZWwxLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRvY2xldmVsMS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2xldmVsMS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdG9jbGV2ZWwxLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdG9jbGV2ZWwxLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jbGV2ZWwyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHNlY29uZC1sZXZlbCBlbnRyeSB3aXRoaW4gYSB0YWJsZSBvZiBjb250ZW50cyBlbnRyeSBmb3IgYSBjaGFwdGVyLWxpa2UgY29tcG9uZW50LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0b2NsZXZlbDIiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idG9jZW50cnkiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRvY2xldmVsMyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0b2NsZXZlbDIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdG9jbGV2ZWwyLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRvY2xldmVsMi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2xldmVsMi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdG9jbGV2ZWwyLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdG9jbGV2ZWwyLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jbGV2ZWwzLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHRoaXJkLWxldmVsIGVudHJ5IHdpdGhpbiBhIHRhYmxlIG9mIGNvbnRlbnRzIGVudHJ5IGZvciBhIGNoYXB0ZXItbGlrZSBjb21wb25lbnQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InRvY2xldmVsMyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0b2NlbnRyeSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idG9jbGV2ZWw0Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2xldmVsMy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jbGV2ZWwzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jbGV2ZWwzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDMubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2NsZXZlbDQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgZm91cnRoLWxldmVsIGVudHJ5IHdpdGhpbiBhIHRhYmxlIG9mIGNvbnRlbnRzIGVudHJ5IGZvciBhIGNoYXB0ZXItbGlrZSBjb21wb25lbnQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InRvY2xldmVsNCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0b2NlbnRyeSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idG9jbGV2ZWw1Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2xldmVsNC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jbGV2ZWw0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jbGV2ZWw0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2NsZXZlbDUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgZmlmdGgtbGV2ZWwgZW50cnkgd2l0aGluIGEgdGFibGUgb2YgY29udGVudHMgZW50cnkgZm9yIGEgY2hhcHRlci1saWtlIGNvbXBvbmVudC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idG9jbGV2ZWw1Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRvY2VudHJ5Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2xldmVsNS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jbGV2ZWw1LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9jbGV2ZWw1LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0b2NsZXZlbDUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0b2NiYWNrLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBbiBlbnRyeSBpbiBhIHRhYmxlIG9mIGNvbnRlbnRzIGZvciBhIGJhY2sgbWF0dGVyIGNvbXBvbmVudC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idG9jYmFjayI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRvY2JhY2suYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdG9jYmFjay5lbGVtZW50IC0tPgogIDwhLS0gdG8gZWxlbWVudCB0aGF0IHRoaXMgZW50cnkgcmVwcmVzZW50cyAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9jYmFjay5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlua2VuZC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhZ2VudW0uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0b2NiYWNrLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0b2NiYWNrLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdG9jYmFjay5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgdG9jLmNvbnRlbnQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsb3Qucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgbGlzdCBvZiB0aGUgdGl0bGVzIG9mIGZvcm1hbCBvYmplY3RzIChhcyB0YWJsZXMgb3IgZmlndXJlcykgaW4gYSBkb2N1bWVudC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibG90Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJiZWdpbnBhZ2UiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImJvb2tjb21wb25lbnQudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibG90ZW50cnkiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibG90LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGxvdC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsb3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxvdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbG90LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbG90Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibG90ZW50cnkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkFuIGVudHJ5IGluIGEgbGlzdCBvZiB0aXRsZXMuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImxvdGVudHJ5Ij4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibG90ZW50cnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbG90ZW50cnkuZWxlbWVudCAtLT4KICA8IS0tCiAgICBTcmNDcmVkaXQ6IEluZm9ybWF0aW9uIGFib3V0IHRoZSBzb3VyY2Ugb2YgdGhlIGVudHJ5LAogICAgYXMgZm9yIGEgbGlzdCBvZiBpbGx1c3RyYXRpb25zCiAgLS0+CiAgPCEtLSBsaW5rZW5kOiB0byBlbGVtZW50IHRoYXQgdGhpcyBlbnRyeSByZXByZXNlbnRzIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsb3RlbnRyeS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmtlbmQuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYWdlbnVtLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzcmNjcmVkaXQiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxvdGVudHJ5LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBsb3RlbnRyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGxvdGVudHJ5Lm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBsb3QuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gQXBwZW5kaXgsIENoYXB0ZXIsIFBhcnQsIFByZWZhY2UsIFJlZmVyZW5jZSwgUGFydEludHJvIC4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXBwZW5kaXgucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkFuIGFwcGVuZGl4IGluIGEgQm9vayBvciBBcnRpY2xlLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJhcHBlbmRpeCIgc3Vic3RpdHV0aW9uR3JvdXA9ImFwcGVuZGl4LmNsYXNzIi8+CiAgPCEtLSBlbmQgb2YgYXBwZW5kaXguZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXBwZW5kaXguYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFwcGVuZGl4LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhcHBlbmRpeC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGFwcGVuZGl4Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2hhcHRlci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBjaGFwdGVyLCBhcyBvZiBhIGJvb2suIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImNoYXB0ZXIiIHN1YnN0aXR1dGlvbkdyb3VwPSJjaGFwdGVyLmNsYXNzIi8+CiAgPCEtLSBlbmQgb2YgY2hhcHRlci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjaGFwdGVyLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjaGFwdGVyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjaGFwdGVyLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY2hhcHRlci5tb2R1bGUgLS0+CiAgPCEtLQogICAgTm90ZSB0aGF0IFBhcnQgd2FzIHRvIGhhdmUgaXRzIGNvbnRlbnQgbW9kZWwgcmVkdWNlZCBpbiBWNC41LiAgVGhpcwogICAgY2hhbmdlIHdpbGwgbm90IGJlIG1hZGUgYWZ0ZXIgYWxsLgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwYXJ0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIGRpdmlzaW9uIGluIGEgYm9vay4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0icGFydCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmVnaW5wYWdlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InBhcnRpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iYm9va2NvbXBvbmVudC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InBhcnRpbnRybyIvPgogICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJ0Y29udGVudC5taXgiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFydC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwYXJ0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBhcnQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhcnQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHBhcnQuYXR0bGlzdCAtLT4KICA8IS0tIEVMRU1FTlQgUGFydEludHJvIChkZWZpbmVkIGJlbG93KSAtLT4KICA8IS0tIGVuZCBvZiBwYXJ0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJlZmFjZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6SW50cm9kdWN0b3J5IG1hdHRlciBwcmVjZWRpbmcgdGhlIGZpcnN0IGNoYXB0ZXIgb2YgYSBib29rLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJwcmVmYWNlIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJiZWdpbnBhZ2UiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0icHJlZmFjZWluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJib29rY29tcG9uZW50LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idG9jY2hhcCIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJvb2tjb21wb25lbnQuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5hdi5jbGFzcyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcmVmYWNlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHByZWZhY2UuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJlZmFjZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByZWZhY2Uucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHByZWZhY2UuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwcmVmYWNlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmZXJlbmNlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIGNvbGxlY3Rpb24gb2YgcmVmZXJlbmNlIGVudHJpZXMuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InJlZmVyZW5jZSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmVnaW5wYWdlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InJlZmVyZW5jZWluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJib29rY29tcG9uZW50LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0icGFydGludHJvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmZW50cnkuY2xhc3MiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmZXJlbmNlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZmVyZW5jZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZlcmVuY2UuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0YXR1cy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZmVyZW5jZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmZXJlbmNlLmF0dGxpc3QgLS0+CiAgPCEtLSBFTEVNRU5UIFBhcnRJbnRybyAoZGVmaW5lZCBiZWxvdykgLS0+CiAgPCEtLSBlbmQgb2YgcmVmZXJlbmNlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGFydGludHJvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBbiBpbnRyb2R1Y3Rpb24gdG8gdGhlIGNvbnRlbnRzIG9mIGEgcGFydC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0icGFydGludHJvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0iZGl2LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJib29rY29tcG9uZW50LmNvbnRlbnQiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFydGludHJvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHBhcnRpbnRyby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwYXJ0aW50cm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhcnRpbnRyby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcGFydGludHJvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcGFydGludHJvLm1vZHVsZSAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBPdGhlciBJbmZvIGVsZW1lbnRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcHBlbmRpeGluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOk1ldGEtaW5mb3JtYXRpb24gZm9yIGFuIEFwcGVuZGl4LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJhcHBlbmRpeGluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhcHBlbmRpeGluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYXBwZW5kaXhpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFwcGVuZGl4aW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFwcGVuZGl4aW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYXBwZW5kaXhpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYXBwZW5kaXhpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvZ3JhcGh5aW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6TWV0YS1pbmZvcm1hdGlvbiBmb3IgYSBCaWJsaW9ncmFwaHkuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImJpYmxpb2dyYXBoeWluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9ncmFwaHlpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb2dyYXBoeWluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvZ3JhcGh5aW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb2dyYXBoeWluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJpYmxpb2dyYXBoeWluZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBiaWJsaW9ncmFwaHlpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2hhcHRlcmluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOk1ldGEtaW5mb3JtYXRpb24gZm9yIGEgQ2hhcHRlci4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY2hhcHRlcmluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjaGFwdGVyaW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjaGFwdGVyaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjaGFwdGVyaW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNoYXB0ZXJpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjaGFwdGVyaW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNoYXB0ZXJpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ2xvc3NhcnlpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpNZXRhLWluZm9ybWF0aW9uIGZvciBhIEdsb3NzYXJ5LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJnbG9zc2FyeWluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJnbG9zc2FyeWluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZ2xvc3NhcnlpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3NzYXJ5aW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdsb3NzYXJ5aW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZ2xvc3NhcnlpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZ2xvc3NhcnlpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5kZXhpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpNZXRhLWluZm9ybWF0aW9uIGZvciBhbiBJbmRleC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW5kZXhpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5kZXhpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGluZGV4aW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmRleGluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmRleGluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGluZGV4aW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGluZGV4aW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNldGluZGV4aW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6TWV0YS1pbmZvcm1hdGlvbiBmb3IgYSBTZXRJbmRleC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2V0aW5kZXhpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2V0aW5kZXhpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNldGluZGV4aW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZXRpbmRleGluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZXRpbmRleGluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNldGluZGV4aW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNldGluZGV4aW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBhcnRpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpNZXRhLWluZm9ybWF0aW9uIGZvciBhIFBhcnQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InBhcnRpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFydGluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcGFydGluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGFydGluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYXJ0aW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcGFydGluZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwYXJ0aW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByZWZhY2VpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpNZXRhLWluZm9ybWF0aW9uIGZvciBhIFByZWZhY2UuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InByZWZhY2VpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJlZmFjZWluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcHJlZmFjZWluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJlZmFjZWluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcmVmYWNlaW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcHJlZmFjZWluZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwcmVmYWNlaW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZmVudHJ5aW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6TWV0YS1pbmZvcm1hdGlvbiBmb3IgYSBSZWZlbnRyeS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmZW50cnlpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmZW50cnlpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZmVudHJ5aW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZlbnRyeWluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZlbnRyeWluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZmVudHJ5aW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZmVudHJ5aW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnNlY3Rpb25pbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpNZXRhLWluZm9ybWF0aW9uIGZvciBhIHJlZnNlY3Rpb24uIC0tPgogIDx4czplbGVtZW50IG5hbWU9InJlZnNlY3Rpb25pbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc2VjdGlvbmluZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdGlvbmluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmc2VjdGlvbmluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzZWN0aW9uaW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdGlvbmluZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZzZWN0aW9uaW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnNlY3QxaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6TWV0YS1pbmZvcm1hdGlvbiBmb3IgYSBSZWZTZWN0MS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmc2VjdDFpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc2VjdDFpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZnNlY3QxaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzZWN0MWluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzZWN0MWluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZnNlY3QxaW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZnNlY3QxaW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnNlY3QyaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6TWV0YS1pbmZvcm1hdGlvbiBmb3IgYSBSZWZTZWN0Mi4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmc2VjdDJpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc2VjdDJpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZnNlY3QyaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzZWN0MmluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzZWN0MmluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZnNlY3QyaW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZnNlY3QyaW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnNlY3QzaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6TWV0YS1pbmZvcm1hdGlvbiBmb3IgYSBSZWZTZWN0My4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmc2VjdDNpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc2VjdDNpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZnNlY3QzaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzZWN0M2luZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzZWN0M2luZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZnNlY3QzaW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZnNlY3QzaW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnN5bm9wc2lzZGl2aW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6TWV0YS1pbmZvcm1hdGlvbiBmb3IgYSBSZWZTeW5vcHNpc0Rpdi4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmc3lub3BzaXNkaXZpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc3lub3BzaXNkaXZpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZnN5bm9wc2lzZGl2aW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzeW5vcHNpc2RpdmluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzeW5vcHNpc2RpdmluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZnN5bm9wc2lzZGl2aW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZnN5bm9wc2lzZGl2aW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZmVyZW5jZWluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOk1ldGEtaW5mb3JtYXRpb24gZm9yIGEgUmVmZXJlbmNlLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZlcmVuY2VpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmZXJlbmNlaW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZWZlcmVuY2VpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZmVyZW5jZWluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZlcmVuY2VpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZWZlcmVuY2VpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVmZXJlbmNlaW5mby5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3QxaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6TWV0YS1pbmZvcm1hdGlvbiBmb3IgYSBTZWN0MS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VjdDFpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDFpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlY3QxaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0MWluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0MWluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlY3QxaW5mby5hdHRsaXN0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0MmluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOk1ldGEtaW5mb3JtYXRpb24gZm9yIGEgU2VjdDIuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InNlY3QyaW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmZvLmNsYXNzIi8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3QyaW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWN0MmluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdDJpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDJpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWN0MmluZm8uYXR0bGlzdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdDNpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpNZXRhLWluZm9ybWF0aW9uIGZvciBhIFNlY3QzLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWN0M2luZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0M2luZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VjdDNpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3QzaW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3QzaW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VjdDNpbmZvLmF0dGxpc3QgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3Q0aW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6TWV0YS1pbmZvcm1hdGlvbiBmb3IgYSBTZWN0NC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VjdDRpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDRpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlY3Q0aW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0NGluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0NGluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlY3Q0aW5mby5hdHRsaXN0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0NWluZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOk1ldGEtaW5mb3JtYXRpb24gZm9yIGEgU2VjdDUuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InNlY3Q1aW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmZvLmNsYXNzIi8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3Q1aW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWN0NWluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdDVpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDVpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWN0NWluZm8uYXR0bGlzdCAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBTZWN0aW9uIChwYXJhbGxlbCB0byBTZWN0KikgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3Rpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgcmVjdXJzaXZlIHNlY3Rpb24uIC0tPgogIDx4czplbGVtZW50IG5hbWU9InNlY3Rpb24iIHN1YnN0aXR1dGlvbkdyb3VwPSJzZWN0aW9uLmNsYXNzIi8+CiAgPCEtLSBlbmQgb2Ygc2VjdGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0aW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWN0aW9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2VjdGlvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3Rpb25pbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpNZXRhLWluZm9ybWF0aW9uIGZvciBhIHJlY3Vyc2l2ZSBzZWN0aW9uLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWN0aW9uaW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmZvLmNsYXNzIi8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY3Rpb25pbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlY3Rpb25pbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3Rpb25pbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdGlvbmluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlY3Rpb25pbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2VjdGlvbmluZm8ubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIHNlY3Rpb24uY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gU2VjdDEsIFNlY3QyLCBTZWN0MywgU2VjdDQsIFNlY3Q1IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdDEucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgdG9wLWxldmVsIHNlY3Rpb24gb2YgZG9jdW1lbnQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InNlY3QxIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJzZWN0MWluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJzZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZGl2Y29tcG9uZW50Lm1peCIvPgogICAgICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmZW50cnkuY2xhc3MiLz4KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNlY3QyIi8+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzaW1wbGVzZWN0Ii8+CiAgICAgICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmVudHJ5LmNsYXNzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWN0MiIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2ltcGxlc2VjdCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5hdi5jbGFzcyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0MS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWN0MS5lbGVtZW50IC0tPgogIDwhLS0KICAgIFJlbmRlcmFzOiBJbmRpY2F0ZXMgdGhlIGZvcm1hdCBpbiB3aGljaCB0aGUgaGVhZGluZyBzaG91bGQKICAgIGFwcGVhcgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0MS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVuZGVyYXMiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0MiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0MyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0NCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0NSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0MS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VjdDEuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzZWN0MS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3QyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHN1YnNlY3Rpb24gd2l0aGluIGEgU2VjdDEuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InNlY3QyIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJzZWN0MmluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJzZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZGl2Y29tcG9uZW50Lm1peCIvPgogICAgICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmZW50cnkuY2xhc3MiLz4KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNlY3QzIi8+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzaW1wbGVzZWN0Ii8+CiAgICAgICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmVudHJ5LmNsYXNzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWN0MyIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2ltcGxlc2VjdCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5hdi5jbGFzcyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0Mi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWN0Mi5lbGVtZW50IC0tPgogIDwhLS0KICAgIFJlbmRlcmFzOiBJbmRpY2F0ZXMgdGhlIGZvcm1hdCBpbiB3aGljaCB0aGUgaGVhZGluZyBzaG91bGQKICAgIGFwcGVhcgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0Mi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVuZGVyYXMiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0MSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0MyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0NCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0NSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0Mi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VjdDIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzZWN0Mi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3QzLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHN1YnNlY3Rpb24gd2l0aGluIGEgU2VjdDIuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InNlY3QzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJzZWN0M2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJzZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZGl2Y29tcG9uZW50Lm1peCIvPgogICAgICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmZW50cnkuY2xhc3MiLz4KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNlY3Q0Ii8+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzaW1wbGVzZWN0Ii8+CiAgICAgICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmVudHJ5LmNsYXNzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWN0NCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2ltcGxlc2VjdCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5hdi5jbGFzcyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0My5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWN0My5lbGVtZW50IC0tPgogIDwhLS0KICAgIFJlbmRlcmFzOiBJbmRpY2F0ZXMgdGhlIGZvcm1hdCBpbiB3aGljaCB0aGUgaGVhZGluZyBzaG91bGQKICAgIGFwcGVhcgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0My5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVuZGVyYXMiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0MSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0MiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0NCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0NSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0My5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VjdDMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzZWN0My5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3Q0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHN1YnNlY3Rpb24gd2l0aGluIGEgU2VjdDMuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InNlY3Q0Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJzZWN0NGluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJzZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZGl2Y29tcG9uZW50Lm1peCIvPgogICAgICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmZW50cnkuY2xhc3MiLz4KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNlY3Q1Ii8+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzaW1wbGVzZWN0Ii8+CiAgICAgICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmVudHJ5LmNsYXNzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWN0NSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2ltcGxlc2VjdCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5hdi5jbGFzcyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0NC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWN0NC5lbGVtZW50IC0tPgogIDwhLS0KICAgIFJlbmRlcmFzOiBJbmRpY2F0ZXMgdGhlIGZvcm1hdCBpbiB3aGljaCB0aGUgaGVhZGluZyBzaG91bGQKICAgIGFwcGVhcgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN0NC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVuZGVyYXMiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0MSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0MiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0MyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZWN0NSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN0NC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VjdDQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzZWN0NC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3Q1LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHN1YnNlY3Rpb24gd2l0aGluIGEgU2VjdDQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InNlY3Q1Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJzZWN0NWluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJzZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZGl2Y29tcG9uZW50Lm1peCIvPgogICAgICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmZW50cnkuY2xhc3MiLz4KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNpbXBsZXNlY3QiLz4KICAgICAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmZW50cnkuY2xhc3MiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNpbXBsZXNlY3QiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuYXYuY2xhc3MiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VjdDUuZWxlbWVudCAtLT4KICA8IS0tCiAgICBSZW5kZXJhczogSW5kaWNhdGVzIHRoZSBmb3JtYXQgaW4gd2hpY2ggdGhlIGhlYWRpbmcgc2hvdWxkCiAgICBhcHBlYXIKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VjdDUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlbmRlcmFzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDEiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDMiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VjdDQiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdDUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlY3Q1LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2VjdDUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzaW1wbGVzZWN0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHNlY3Rpb24gb2YgYSBkb2N1bWVudCB3aXRoIG5vIHN1YmRpdmlzaW9ucy4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2ltcGxlc2VjdCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJzZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZGl2Y29tcG9uZW50Lm1peCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzaW1wbGVzZWN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNpbXBsZXNlY3QuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2ltcGxlc2VjdC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNpbXBsZXNlY3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNpbXBsZXNlY3QuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzaW1wbGVzZWN0Lm1vZHVsZSAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBCaWJsaW9ncmFwaHkgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9ncmFwaHkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgYmlibGlvZ3JhcGh5LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJiaWJsaW9ncmFwaHkiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJpYmxpb2dyYXBoeWluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImJvb2tjb21wb25lbnQudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbXBvbmVudC5taXgiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iYmlibGlvZGl2Ii8+CiAgICAgICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiaWJsaW9lbnRyeSIvPgogICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImJpYmxpb21peGVkIi8+CiAgICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvZ3JhcGh5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb2dyYXBoeS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9ncmFwaHkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9ncmFwaHkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJpYmxpb2dyYXBoeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJpYmxpb2dyYXBoeS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb2Rpdi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBzZWN0aW9uIG9mIGEgQmlibGlvZ3JhcGh5LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJiaWJsaW9kaXYiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJzZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjb21wb25lbnQubWl4Ii8+CiAgICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImJpYmxpb2VudHJ5Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImJpYmxpb21peGVkIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb2Rpdi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBiaWJsaW9kaXYuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvZGl2LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvZGl2LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBiaWJsaW9kaXYuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBiaWJsaW9kaXYubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIGJpYmxpb2dyYXBoeS5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBHbG9zc2FyeSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJnbG9zc2FyeS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBnbG9zc2FyeS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZ2xvc3NhcnkiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Imdsb3NzYXJ5aW5mbyIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0iYm9va2NvbXBvbmVudC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJnbG9zc2RpdiIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZ2xvc3NlbnRyeSIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJiaWJsaW9ncmFwaHkiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3NhcnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZ2xvc3NhcnkuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ2xvc3NhcnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJnbG9zc2FyeS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZ2xvc3NhcnkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBnbG9zc2FyeS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3NzZGl2LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIGRpdmlzaW9uIGluIGEgR2xvc3NhcnkuIC0tPgogIDx4czplbGVtZW50IG5hbWU9Imdsb3NzZGl2Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpncm91cCByZWY9InNlY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbXBvbmVudC5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJnbG9zc2VudHJ5Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdsb3NzZGl2LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGdsb3NzZGl2LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3NzZGl2LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3NkaXYucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGdsb3NzZGl2LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZ2xvc3NkaXYubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIGdsb3NzYXJ5LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEluZGV4IGFuZCBTZXRJbmRleCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImluZGV4ZXMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkFuIGluZGV4LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbmRleCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iaW5kZXhpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJib29rY29tcG9uZW50LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjb21wb25lbnQubWl4Ii8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5kZXhkaXYiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5kZXhlbnRyeSIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmRleC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBpbmRleC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmRleC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idHlwZSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5kZXhlcy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaW5kZXguYXR0bGlzdCAtLT4KICA8IS0tIGRvYzpBbiBpbmRleCB0byBhIHNldCBvZiBib29rcy4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2V0aW5kZXgiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InNldGluZGV4aW5mbyIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0iYm9va2NvbXBvbmVudC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZGV4ZGl2Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZGV4ZW50cnkiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2V0aW5kZXguYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2V0aW5kZXguZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2V0aW5kZXguYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmRleGVzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZXRpbmRleC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGluZGV4ZXMubW9kdWxlIC0tPgogIDwhLS0KICAgIFNlZ21lbnRlZExpc3QgaW4gdGhpcyBjb250ZW50IGlzIHVzZWZ1bCBmb3IgbWFya2luZyB1cCBwZXJtdXRlZAogICAgaW5kaWNlcy4KICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5kZXhkaXYucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgZGl2aXNpb24gaW4gYW4gaW5kZXguIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImluZGV4ZGl2Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0ic2VjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5kZXhkaXZjb21wb25lbnQubWl4Ii8+CiAgICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmRleGVudHJ5Ii8+CiAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic2VnbWVudGVkbGlzdCIvPgogICAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5kZXhkaXYuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW5kZXhkaXYuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5kZXhkaXYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmRleGRpdi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaW5kZXhkaXYuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBpbmRleGRpdi5tb2R1bGUgLS0+CiAgPCEtLSBJbmRleCBlbnRyaWVzIGFwcGVhciBpbiB0aGUgaW5kZXgsIG5vdCB0aGUgdGV4dC4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImluZGV4ZW50cnkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkFuIGVudHJ5IGluIGFuIGluZGV4LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbmRleGVudHJ5Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icHJpbWFyeWllIi8+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic2VlaWUiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic2VlYWxzb2llIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOnNlcXVlbmNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzZWNvbmRhcnlpZSIvPgogICAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzZWVpZSIvPgogICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InNlZWFsc29pZSIvPgogICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRlcnRpYXJ5aWUiLz4KICAgICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImluZGV4ZW50cnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW5kZXhlbnRyeS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmRleGVudHJ5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5kZXhlbnRyeS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaW5kZXhlbnRyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGluZGV4ZW50cnkubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcmltc2VjdGVyaWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgcHJpbWFyeSB0ZXJtIGluIGFuIGluZGV4IGVudHJ5LCBub3QgaW4gdGhlIHRleHQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InByaW1hcnlpZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByaW1hcnlpZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwcmltYXJ5aWUuZWxlbWVudCAtLT4KICA8IS0tIHRvIEluZGV4VGVybXMgdGhhdCB0aGVzZSBlbnRyaWVzIHJlcHJlc2VudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJpbWFyeWllLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlua2VuZHMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcmltc2VjdGVyaWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHByaW1hcnlpZS5hdHRsaXN0IC0tPgogIDwhLS0gZG9jOkEgc2Vjb25kYXJ5IHRlcm0gaW4gYW4gaW5kZXggZW50cnksIHJhdGhlciB0aGFuIGluIHRoZSB0ZXh0LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWNvbmRhcnlpZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlY29uZGFyeWllLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlY29uZGFyeWllLmVsZW1lbnQgLS0+CiAgPCEtLSB0byBJbmRleFRlcm1zIHRoYXQgdGhlc2UgZW50cmllcyByZXByZXNlbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY29uZGFyeWllLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlua2VuZHMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcmltc2VjdGVyaWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlY29uZGFyeWllLmF0dGxpc3QgLS0+CiAgPCEtLSBkb2M6QSB0ZXJ0aWFyeSB0ZXJtIGluIGFuIGluZGV4IGVudHJ5LCByYXRoZXIgdGhhbiBpbiB0aGUgdGV4dC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idGVydGlhcnlpZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRlcnRpYXJ5aWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdGVydGlhcnlpZS5lbGVtZW50IC0tPgogIDwhLS0gdG8gSW5kZXhUZXJtcyB0aGF0IHRoZXNlIGVudHJpZXMgcmVwcmVzZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0ZXJ0aWFyeWllLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlua2VuZHMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcmltc2VjdGVyaWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRlcnRpYXJ5aWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwcmltc2VjdGVyaWUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWVpZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBTZWUgZW50cnkgaW4gYW4gaW5kZXgsIHJhdGhlciB0aGFuIGluIHRoZSB0ZXh0LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWVpZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlZWllLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlZWllLmVsZW1lbnQgLS0+CiAgPCEtLSB0byBJbmRleEVudHJ5IHRvIGxvb2sgdXAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlZWllLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlua2VuZC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlZWllLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWVpZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNlZWllLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VlYWxzb2llLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIFNlZSBhbHNvIGVudHJ5IGluIGFuIGluZGV4LCByYXRoZXIgdGhhbiBpbiB0aGUgdGV4dC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VlYWxzb2llIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5keHRlcm0uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VlYWxzb2llLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlZWFsc29pZS5lbGVtZW50IC0tPgogIDwhLS0gdG8gcmVsYXRlZCBJbmRleEVudHJpZXMgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlZWFsc29pZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmtlbmRzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VlYWxzb2llLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzZWVhbHNvaWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzZWVhbHNvaWUubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIGluZGV4LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIFJlZkVudHJ5IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZmVudHJ5LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHJlZmVyZW5jZSBwYWdlIChvcmlnaW5hbGx5IGEgVU5JWCBtYW4tc3R5bGUgcmVmZXJlbmNlIHBhZ2UpLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZlbnRyeSIgc3Vic3RpdHV0aW9uR3JvdXA9InJlZmVudHJ5LmNsYXNzIi8+CiAgPCEtLSBlbmQgb2YgcmVmZW50cnkuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmZW50cnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZlbnRyeS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmZW50cnkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZlbnRyeS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZm1ldGEucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOk1ldGEtaW5mb3JtYXRpb24gZm9yIGEgcmVmZXJlbmNlIGVudHJ5LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZtZXRhIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icmVmZW50cnl0aXRsZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJtYW52b2xudW0iLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZm1pc2NpbmZvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZm1ldGEuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmbWV0YS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZtZXRhLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmbWV0YS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmbWV0YS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZm1ldGEubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZtaXNjaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6TWV0YS1pbmZvcm1hdGlvbiBmb3IgYSByZWZlcmVuY2UgZW50cnkgb3RoZXIgdGhhbiB0aGUgdGl0bGUgYW5kIHZvbHVtZSBudW1iZXIuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InJlZm1pc2NpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmbWlzY2luZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmbWlzY2luZm8uZWxlbWVudCAtLT4KICA8IS0tIENsYXNzOiBGcmVlbHkgYXNzaWduYWJsZSBwYXJhbWV0ZXI7IG5vIGRlZmF1bHQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZm1pc2NpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmbWlzY2luZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZm1pc2NpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVmbWlzY2luZm8ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZuYW1lZGl2LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgbmFtZSwgcHVycG9zZSwgYW5kIGNsYXNzaWZpY2F0aW9uIG9mIGEgcmVmZXJlbmNlIHBhZ2UuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InJlZm5hbWVkaXYiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InJlZmRlc2NyaXB0b3IiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZuYW1lIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZWZwdXJwb3NlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZjbGFzcyIvPgogICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InJlbWFyayIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rLmNoYXIuY2xhc3MiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmbmFtZWRpdi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZWZuYW1lZGl2LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZm5hbWVkaXYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZuYW1lZGl2LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZWZuYW1lZGl2LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVmbmFtZWRpdi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZmRlc2NyaXB0b3Iucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgZGVzY3JpcHRpb24gb2YgdGhlIHRvcGljIG9mIGEgcmVmZXJlbmNlIHBhZ2UuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InJlZmRlc2NyaXB0b3IiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmbmFtZS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZkZXNjcmlwdG9yLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZmRlc2NyaXB0b3IuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmZGVzY3JpcHRvci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZmRlc2NyaXB0b3Iucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZmRlc2NyaXB0b3IuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZkZXNjcmlwdG9yLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmbmFtZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIG5hbWUgb2YgKG9uZSBvZikgdGhlIHN1YmplY3Qocykgb2YgYSByZWZlcmVuY2UgcGFnZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmbmFtZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZuYW1lLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZm5hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmbmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZuYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmbmFtZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmbmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZm5hbWUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZwdXJwb3NlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHNob3J0IChvbmUgc2VudGVuY2UpIHN5bm9wc2lzIG9mIHRoZSB0b3BpYyBvZiBhIHJlZmVyZW5jZSBwYWdlLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZwdXJwb3NlIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmlubGluZS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZwdXJwb3NlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZnB1cnBvc2UuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmcHVycG9zZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZnB1cnBvc2Uucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZnB1cnBvc2UuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZwdXJwb3NlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmY2xhc3Mucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSBzY29wZSBvciBvdGhlciBpbmRpY2F0aW9uIG9mIGFwcGxpY2FiaWxpdHkgb2YgYSByZWZlcmVuY2UgZW50cnkuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InJlZmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmNsYXNzLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZmNsYXNzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZmNsYXNzLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZmNsYXNzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmY2xhc3Mucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZmNsYXNzLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVmY2xhc3MubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzeW5vcHNpc2Rpdi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBzeW50YWN0aWMgc3lub3BzaXMgb2YgdGhlIHN1YmplY3Qgb2YgdGhlIHJlZmVyZW5jZSBwYWdlLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZzeW5vcHNpc2RpdiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0icmVmc3lub3BzaXNkaXZpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJyZWZzZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmY29tcG9uZW50Lm1peCIvPgogICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZnNlY3QyIi8+CiAgICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmc2VjdDIiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc3lub3BzaXNkaXYuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmc3lub3BzaXNkaXYuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmc3lub3BzaXNkaXYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzeW5vcHNpc2Rpdi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmc3lub3BzaXNkaXYuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZzeW5vcHNpc2Rpdi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnNlY3Rpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgcmVjdXJzaXZlIHNlY3Rpb24gaW4gYSByZWZlbnRyeS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmc2VjdGlvbiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0icmVmc2VjdGlvbmluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJyZWZzZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmY29tcG9uZW50Lm1peCIvPgogICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZnNlY3Rpb24iLz4KICAgICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZzZWN0aW9uIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZnNlY3Rpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzZWN0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc2VjdGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJlZnNlY3Rpb24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzZWN0MS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBtYWpvciBzdWJzZWN0aW9uIG9mIGEgcmVmZXJlbmNlIGVudHJ5LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWZzZWN0MSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0icmVmc2VjdDFpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0icmVmc2VjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZmNvbXBvbmVudC5taXgiLz4KICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZzZWN0MiIvPgogICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZnNlY3QyIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZnNlY3QxLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZnNlY3QxLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnNlY3QxLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc2VjdDEucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZnNlY3QxLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdDEubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZWZzZWN0Mi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBzdWJzZWN0aW9uIG9mIGEgUmVmU2VjdDEuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InJlZnNlY3QyIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJyZWZzZWN0MmluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJyZWZzZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmY29tcG9uZW50Lm1peCIvPgogICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJlZnNlY3QzIi8+CiAgICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icmVmc2VjdDMiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc2VjdDIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdDIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmc2VjdDIuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZzZWN0Mi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdDIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZzZWN0Mi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnNlY3QzLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHN1YnNlY3Rpb24gb2YgYSBSZWZTZWN0Mi4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmVmc2VjdDMiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InJlZnNlY3QzaW5mbyIvPgogICAgICAgIDx4czpncm91cCByZWY9InJlZnNlY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZWZjb21wb25lbnQubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZnNlY3QzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZnNlY3QzLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlZnNlY3QzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdHVzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVmc2VjdDMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZnNlY3QzLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVmc2VjdDMubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIHJlZmVudHJ5LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEFydGljbGUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLQogICAgQW4gQXJ0aWNsZSBpcyBhIGNoYXB0ZXItbGV2ZWwsIHN0YW5kLWFsb25lIGRvY3VtZW50IHRoYXQgaXMgb2Z0ZW4sCiAgICBidXQgbmVlZCBub3QgYmUsIGNvbGxlY3RlZCBpbnRvIGEgQm9vay4KICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXJ0aWNsZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QW4gYXJ0aWNsZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXJ0aWNsZSIgc3Vic3RpdHV0aW9uR3JvdXA9ImFydGljbGUuY2xhc3MiLz4KICA8IS0tIGVuZCBvZiBhcnRpY2xlLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgQ2xhc3M6IEluZGljYXRlcyB0aGUgdHlwZSBvZiBhIHBhcnRpY3VsYXIgYXJ0aWNsZTsKICAgIGFsbCBhcnRpY2xlcyBoYXZlIHRoZSBzYW1lIHN0cnVjdHVyZSBhbmQgZ2VuZXJhbCBwdXJwb3NlLgogICAgTm8gZGVmYXVsdC4KICAtLT4KICA8IS0tIFBhcmVudEJvb2s6IElEIG9mIHRoZSBlbmNsb3NpbmcgQm9vayAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXJ0aWNsZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJqb3VybmFsYXJ0aWNsZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwcm9kdWN0c2hlZXQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0id2hpdGVwYXBlciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0ZWNocmVwb3J0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNwZWNpZmljYXRpb24iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZmFxIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InBhcmVudGJvb2siIHR5cGU9InhzOklEUkVGIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0dXMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhcnRpY2xlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KPC94czpzY2hlbWE+CjwhLS0gZW5kIG9mIGFydGljbGUuYXR0bGlzdCAtLT4KPCEtLSBlbmQgb2YgYXJ0aWNsZS5tb2R1bGUgLS0+CjwhLS0gRW5kIG9mIERvY0Jvb2sgZG9jdW1lbnQgaGllcmFyY2h5IG1vZHVsZSBWNC41IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Docbook/4_5/dbnotnx.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIERvY0Jvb2sgbm90YXRpb25zIG1vZHVsZSBWNC41IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRmlsZSBkYm5vdG54Lm1vZCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIENvcHlyaWdodCAxOTkyLTIwMDQgSGFMIENvbXB1dGVyIFN5c3RlbXMsIEluYy4sCiAgTydSZWlsbHkgJiBBc3NvY2lhdGVzLCBJbmMuLCBBcmJvclRleHQsIEluYy4sIEZ1aml0c3UgU29mdHdhcmUKICBDb3Jwb3JhdGlvbiwgTm9ybWFuIFdhbHNoLCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCBhbmQgdGhlCiAgT3JnYW5pemF0aW9uIGZvciB0aGUgQWR2YW5jZW1lbnQgb2YgU3RydWN0dXJlZCBJbmZvcm1hdGlvbgogIFN0YW5kYXJkcyAoT0FTSVMpLgogIAogICRJZDogZGJub3RueC5tb2QgNjM0MCAyMDA2LTEwLTAzIDEzOjIzOjI0WiBud2Fsc2ggJAogIAogIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY0Jvb2sgRFRECiAgYW5kIGl0cyBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlCiAgaXMgaGVyZWJ5IGdyYW50ZWQgaW4gcGVycGV0dWl0eSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CiAgbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBhcHBlYXIgaW4gYWxsIGNvcGllcy4gIFRoZSBjb3B5cmlnaHQKICBob2xkZXJzIG1ha2Ugbm8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoZSBEVEQgZm9yCiAgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzc2VkIG9yIGltcGxpZWQKICB3YXJyYW50eS4KICAKICBJZiB5b3UgbW9kaWZ5IHRoZSBEb2NCb29rIERURCBpbiBhbnkgd2F5LCBleGNlcHQgZm9yIGRlY2xhcmluZyBhbmQKICByZWZlcmVuY2luZyBhZGRpdGlvbmFsIHNldHMgb2YgZ2VuZXJhbCBlbnRpdGllcyBhbmQgZGVjbGFyaW5nCiAgYWRkaXRpb25hbCBub3RhdGlvbnMsIGxhYmVsIHlvdXIgRFREIGFzIGEgdmFyaWFudCBvZiBEb2NCb29rLiAgU2VlCiAgdGhlIG1haW50ZW5hbmNlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgCiAgUGxlYXNlIGRpcmVjdCBhbGwgcXVlc3Rpb25zLCBidWcgcmVwb3J0cywgb3Igc3VnZ2VzdGlvbnMgZm9yCiAgY2hhbmdlcyB0byB0aGUgZG9jYm9va0BsaXN0cy5vYXNpcy1vcGVuLm9yZyBtYWlsaW5nIGxpc3QuIEZvciBtb3JlCiAgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2svLgotLT4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tCiAgVGhpcyBtb2R1bGUgY29udGFpbnMgdGhlIG5vdGF0aW9uIGRlY2xhcmF0aW9ucyB1c2VkIGJ5IERvY0Jvb2suCiAgCiAgSW4gRFREIGRyaXZlciBmaWxlcyByZWZlcnJpbmcgdG8gdGhpcyBtb2R1bGUsIHBsZWFzZSB1c2UgYW4gZW50aXR5CiAgZGVjbGFyYXRpb24gdGhhdCB1c2VzIHRoZSBwdWJsaWMgaWRlbnRpZmllciBzaG93biBiZWxvdzoKICAKICA8IUVOVElUWSAlIGRibm90biBQVUJMSUMKICAiLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgTm90YXRpb25zIFY0LjUvL0VOIgogICJkYm5vdG54Lm1vZCI+CiAgJWRibm90bjsKICAKICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoZSBwYXJhbWV0ZXIKICBlbnRpdHkgYW5kIG1vZHVsZSBzY2hlbWUgdXNlZCBpbiBEb2NCb29rLCBjdXN0b21pemluZyBEb2NCb29rIGFuZAogIHBsYW5uaW5nIGZvciBpbnRlcmNoYW5nZSwgYW5kIGNoYW5nZXMgbWFkZSBzaW5jZSB0aGUgbGFzdCByZWxlYXNlCiAgb2YgRG9jQm9vay4KLS0+Cjx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+CiAgPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIgc2NoZW1hTG9jYXRpb249InhtbC54c2QiLz4KICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJub3RhdGlvbi5jbGFzcyI+CiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkJNUCIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkNHTS1DSEFSIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQ0dNLUJJTkFSWSIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkNHTS1DTEVBUiIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRJVFJPRkYiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJEVkkiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFUFMiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFUU4iLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJGQVgiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJHSUYiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJHSUY4N2EiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJHSUY4OWEiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJKUEciLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJKUEVHIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSUdFUyIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBDWCIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBJQyIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBORyIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBTIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU0dNTCIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlRCTCIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlRFWCIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlRJRkYiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJXTUYiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJXUEciLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTVkciLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJQREYiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTV0YiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsaW5lc3BlY2lmaWMiLz4KICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgPC94czpzaW1wbGVUeXBlPgo8L3hzOnNjaGVtYT4KPCEtLSBXb3JkUGVyZmVjdCBHcmFwaGljIGZvcm1hdCAtLT4KPCEtLSBFbmQgb2YgRG9jQm9vayBub3RhdGlvbnMgbW9kdWxlIFY0LjUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Docbook/4_5/dbpoolx.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIERvY0Jvb2sgWE1MIGluZm9ybWF0aW9uIHBvb2wgbW9kdWxlIFY0LjUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRmlsZSBkYnBvb2x4Lm1vZCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIENvcHlyaWdodCAxOTkyLTIwMDQgSGFMIENvbXB1dGVyIFN5c3RlbXMsIEluYy4sCiAgTydSZWlsbHkgJiBBc3NvY2lhdGVzLCBJbmMuLCBBcmJvclRleHQsIEluYy4sIEZ1aml0c3UgU29mdHdhcmUKICBDb3Jwb3JhdGlvbiwgTm9ybWFuIFdhbHNoLCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCBhbmQgdGhlCiAgT3JnYW5pemF0aW9uIGZvciB0aGUgQWR2YW5jZW1lbnQgb2YgU3RydWN0dXJlZCBJbmZvcm1hdGlvbgogIFN0YW5kYXJkcyAoT0FTSVMpLgogIAogICRJZDogZGJwb29seC5tb2QgNjM0MCAyMDA2LTEwLTAzIDEzOjIzOjI0WiBud2Fsc2ggJAogIAogIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY0Jvb2sgWE1MIERURAogIGFuZCBpdHMgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZQogIGlzIGhlcmVieSBncmFudGVkIGluIHBlcnBldHVpdHksIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAogIG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggYXBwZWFyIGluIGFsbCBjb3BpZXMuICBUaGUgY29weXJpZ2h0CiAgaG9sZGVycyBtYWtlIG5vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGUgRFREIGZvcgogIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3NlZCBvciBpbXBsaWVkCiAgd2FycmFudHkuCiAgCiAgSWYgeW91IG1vZGlmeSB0aGUgRG9jQm9vayBYTUwgRFREIGluIGFueSB3YXksIGV4Y2VwdCBmb3IgZGVjbGFyaW5nIGFuZAogIHJlZmVyZW5jaW5nIGFkZGl0aW9uYWwgc2V0cyBvZiBnZW5lcmFsIGVudGl0aWVzIGFuZCBkZWNsYXJpbmcKICBhZGRpdGlvbmFsIG5vdGF0aW9ucywgbGFiZWwgeW91ciBEVEQgYXMgYSB2YXJpYW50IG9mIERvY0Jvb2suICBTZWUKICB0aGUgbWFpbnRlbmFuY2UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAKICBQbGVhc2UgZGlyZWN0IGFsbCBxdWVzdGlvbnMsIGJ1ZyByZXBvcnRzLCBvciBzdWdnZXN0aW9ucyBmb3IKICBjaGFuZ2VzIHRvIHRoZSBkb2Nib29rQGxpc3RzLm9hc2lzLW9wZW4ub3JnIG1haWxpbmcgbGlzdC4gRm9yIG1vcmUKICBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay8uCi0tPgo8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0KICBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBvYmplY3RzLCBpbmxpbmUKICBlbGVtZW50cywgYW5kIHNvIG9uIHRoYXQgYXJlIGF2YWlsYWJsZSB0byBiZSB1c2VkIGFzIHRoZSBtYWluCiAgY29udGVudCBvZiBEb2NCb29rIGRvY3VtZW50cy4gIFNvbWUgZWxlbWVudHMgYXJlIHVzZWZ1bCBmb3IgZ2VuZXJhbAogIHB1Ymxpc2hpbmcsIGFuZCBvdGhlcnMgYXJlIHVzZWZ1bCBzcGVjaWZpY2FsbHkgZm9yIGNvbXB1dGVyCiAgZG9jdW1lbnRhdGlvbi4KICAKICBUaGlzIG1vZHVsZSBoYXMgdGhlIGZvbGxvd2luZyBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlczoKICAKICBvIEl0IGFzc3VtZXMgdGhhdCBhICVub3RhdGlvbi5jbGFzczsgZW50aXR5IGlzIGRlZmluZWQgYnkgdGhlCiAgICBkcml2ZXIgZmlsZSBvciBvdGhlciBoaWdoLWxldmVsIG1vZHVsZS4gIFRoaXMgZW50aXR5IGlzCiAgICByZWZlcmVuY2VkIGluIHRoZSBOT1RBVElPTiBhdHRyaWJ1dGVzIGZvciB0aGUgZ3JhcGhpYy1yZWxhdGVkIGFuZAogICAgTW9kZVNwZWMgZWxlbWVudHMuCiAgCiAgbyBJdCBhc3N1bWVzIHRoYXQgYW4gYXBwcm9wcmlhdGVseSBwYXJhbWV0ZXJpemVkIHRhYmxlIG1vZHVsZSBpcwogICAgYXZhaWxhYmxlIGZvciB1c2Ugd2l0aCB0aGUgdGFibGUtcmVsYXRlZCBlbGVtZW50cy4KICAKICBJbiBEVEQgZHJpdmVyIGZpbGVzIHJlZmVycmluZyB0byB0aGlzIG1vZHVsZSwgcGxlYXNlIHVzZSBhbiBlbnRpdHkKICBkZWNsYXJhdGlvbiB0aGF0IHVzZXMgdGhlIHB1YmxpYyBpZGVudGlmaWVyIHNob3duIGJlbG93OgogIAogIDwhRU5USVRZICUgZGJwb29sIFBVQkxJQwogICItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBYTUwgSW5mb3JtYXRpb24gUG9vbCBWNC41Ly9FTiIKICAiZGJwb29seC5tb2QiPgogICVkYnBvb2w7CiAgCiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgcGFyYW1ldGVyCiAgZW50aXR5IGFuZCBtb2R1bGUgc2NoZW1lIHVzZWQgaW4gRG9jQm9vaywgY3VzdG9taXppbmcgRG9jQm9vayBhbmQKICBwbGFubmluZyBmb3IgaW50ZXJjaGFuZ2UsIGFuZCBjaGFuZ2VzIG1hZGUgc2luY2UgdGhlIGxhc3QgcmVsZWFzZQogIG9mIERvY0Jvb2suCi0tPgo8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRm9ybXMgZW50aXRpZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLSBUaGVzZSBQRXMgcHJvdmlkZSB0aGUgaG9vayBieSB3aGljaCB0aGUgZm9ybXMgbW9kdWxlIGNhbiBiZSBpbnNlcnRlZCAtLT4KPCEtLSBpbnRvIHRoZSBEVEQuIC0tPgo8eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgogIDx4czppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJodG1sdGJseC54c2QiLz4KICA8eHM6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iY2Fsc3RibHgueHNkIi8+CiAgPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIgc2NoZW1hTG9jYXRpb249InhtbC54c2QiLz4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBHZW5lcmFsLXB1cnBvc2Ugc2VtYW50aWNzIGVudGl0aWVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czpzaW1wbGVUeXBlIG5hbWU9Inllc29ybm8uYXR0dmFscyI+CiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIi8+CiAgPC94czpzaW1wbGVUeXBlPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEVudGl0aWVzIGZvciBtb2R1bGUgaW5jbHVzaW9ucyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gRW50aXRpZXMgZm9yIGVsZW1lbnQgY2xhc3NlcyBhbmQgbWl4dHVyZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tICJVYmlxdWl0b3VzIiBjbGFzc2VzOiBuZHh0ZXJtLmNsYXNzIGFuZCBiZWdpbnBhZ2UgLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibmR4dGVybS5jbGFzcyIgYWJzdHJhY3Q9InRydWUiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InByaW1hcnkiLz4KICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+CiAgICAgICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic2Vjb25kYXJ5Ii8+CiAgICAgICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIj4KICAgICAgICAgICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRlcnRpYXJ5Ii8+CiAgICAgICAgICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+CiAgICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic2VlIi8+CiAgICAgICAgICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNlZWFsc28iLz4KICAgICAgICAgICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzZWUiLz4KICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWVhbHNvIi8+CiAgICAgICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic2VlIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWVhbHNvIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImluZGV4dGVybS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIE9iamVjdC1sZXZlbCBjbGFzc2VzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibGlzdC5jbGFzcyIgYWJzdHJhY3Q9InRydWUiLz4KICA8eHM6ZWxlbWVudCBuYW1lPSJhZG1vbi5jbGFzcyIgYWJzdHJhY3Q9InRydWUiLz4KICA8eHM6ZWxlbWVudCBuYW1lPSJsaW5lc3BlY2lmaWMuY2xhc3MiIGFic3RyYWN0PSJ0cnVlIi8+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibWV0aG9kLnN5bm9wLmNsYXNzIiBhYnN0cmFjdD0idHJ1ZSIgc3Vic3RpdHV0aW9uR3JvdXA9InN5bm9wLmNsYXNzIi8+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3lub3AuY2xhc3MiIGFic3RyYWN0PSJ0cnVlIi8+CiAgPHhzOmVsZW1lbnQgbmFtZT0icGFyYS5jbGFzcyIgYWJzdHJhY3Q9InRydWUiLz4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbmZvcm1hbC5jbGFzcyIgYWJzdHJhY3Q9InRydWUiLz4KICA8eHM6ZWxlbWVudCBuYW1lPSJmb3JtYWwuY2xhc3MiIGFic3RyYWN0PSJ0cnVlIi8+CiAgPCEtLSBUaGUgRG9jQm9vayBUQyBtYXkgcHJvZHVjZSBhbiBvZmZpY2lhbCBFQk5GIG1vZHVsZSBmb3IgRG9jQm9vay4gLS0+CiAgPCEtLSBUaGlzIFBFIHByb3ZpZGVzIHRoZSBob29rIGJ5IHdoaWNoIGl0IGNhbiBiZSBpbnNlcnRlZCBpbnRvIHRoZSBEVEQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImNvbXBvdW5kLmNsYXNzIiBhYnN0cmFjdD0idHJ1ZSIvPgogIDx4czpncm91cCBuYW1lPSJnZW5vYmouY2xhc3MiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhbmNob3IiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJicmlkZ2VoZWFkIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icmVtYXJrIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaGlnaGxpZ2h0cyIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0iZGVzY29iai5jbGFzcyI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFic3RyYWN0Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYXV0aG9yYmx1cmIiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlcGlncmFwaCIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8IS0tIENoYXJhY3Rlci1sZXZlbCBjbGFzc2VzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ieHJlZi5jaGFyLmNsYXNzIiBhYnN0cmFjdD0idHJ1ZSIvPgogIDx4czplbGVtZW50IG5hbWU9Imdlbi5jaGFyLmNsYXNzIiBhYnN0cmFjdD0idHJ1ZSIvPgogIDx4czplbGVtZW50IG5hbWU9ImxpbmsuY2hhci5jbGFzcyIgYWJzdHJhY3Q9InRydWUiLz4KICA8IS0tIFRoZSBEb2NCb29rIFRDIG1heSBwcm9kdWNlIGFuIG9mZmljaWFsIEVCTkYgbW9kdWxlIGZvciBEb2NCb29rLiAtLT4KICA8IS0tIFRoaXMgUEUgcHJvdmlkZXMgdGhlIGhvb2sgYnkgd2hpY2ggaXQgY2FuIGJlIGluc2VydGVkIGludG8gdGhlIERURC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idGVjaC5jaGFyLmNsYXNzIiBhYnN0cmFjdD0idHJ1ZSIvPgogIDx4czpncm91cCBuYW1lPSJiYXNlLmNoYXIuY2xhc3MiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFuY2hvciIvPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImRvY2luZm8uY2hhci5jbGFzcyIgYWJzdHJhY3Q9InRydWUiLz4KICA8eHM6Z3JvdXAgbmFtZT0ib3RoZXIuY2hhci5jbGFzcyI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9InJlbWFyayIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN1YnNjcmlwdCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN1cGVyc2NyaXB0Ii8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czplbGVtZW50IG5hbWU9ImlubGluZW9iai5jaGFyLmNsYXNzIiBhYnN0cmFjdD0idHJ1ZSIvPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEVudGl0aWVzIGZvciBjb250ZW50IG1vZGVscyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmdyb3VwIG5hbWU9ImZvcm1hbG9iamVjdC50aXRsZS5jb250ZW50Ij4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0aXRsZSIvPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGVhYmJyZXYiLz4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpncm91cD4KICA8IS0tIFJlZGVjbGFyYXRpb24gcGxhY2Vob2xkZXIgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLQogICAgRm9yIHJlZGVjbGFyaW5nIGVudGl0aWVzIHRoYXQgYXJlIGRlY2xhcmVkIGFmdGVyIHRoaXMgcG9pbnQgd2hpbGUKICAgIHJldGFpbmluZyB0aGVpciByZWZlcmVuY2VzIHRvIHRoZSBlbnRpdGllcyB0aGF0IGFyZSBkZWNsYXJlZCBiZWZvcmUKICAgIHRoaXMgcG9pbnQKICAtLT4KICA8IS0tIE9iamVjdC1sZXZlbCBtaXh0dXJlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLQogICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgYWRtbiBsaW5lIHN5bnAgcGFyYSBpbmZtIGZvcm0gY21wZCBnZW4gIGRlc2MKICAgIENvbXBvbmVudCBtaXh0dXJlICAgICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIFgKICAgIFNpZGViYXIgbWl4dHVyZSAgICAgICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgYSAgICBYCiAgICBGb290bm90ZSBtaXh0dXJlICAgICAgICBYICAgICAgICAgWCAgICBYICAgIFggICAgWAogICAgRXhhbXBsZSBtaXh0dXJlICAgICAgICAgWCAgICAgICAgIFggICAgWCAgICBYICAgIFgKICAgIEhpZ2hsaWdodHMgbWl4dHVyZSAgICAgIFggICAgWCAgICAgICAgICAgICAgWAogICAgUGFyYWdyYXBoIG1peHR1cmUgICAgICAgWCAgICAgICAgIFggICAgWCAgICAgICAgIFgKICAgIEFkbW9uaXRpb24gbWl4dHVyZSAgICAgIFggICAgICAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgYiAgICBjCiAgICBGaWd1cmUgbWl4dHVyZSAgICAgICAgICAgICAgICAgICAgWCAgICBYICAgICAgICAgWAogICAgVGFibGUgZW50cnkgbWl4dHVyZSAgICAgWCAgICBYICAgIFggICAgICAgICBYICAgIGQKICAgIEdsb3NzYXJ5IGRlZiBtaXh0dXJlICAgIFggICAgICAgICBYICAgIFggICAgWCAgICBYICAgICAgICAgZQogICAgTGVnYWwgbm90aWNlIG1peHR1cmUgICAgWCAgICBYICAgIFggICAgICAgICBYICAgIGYKICAgIAogICAgYS4gSnVzdCBQcm9jZWR1cmU7IG5vdCBTaWRlYmFyIGl0c2VsZiBvciBNc2dTZXQuCiAgICBiLiBObyBNc2dTZXQuCiAgICBjLiBObyBIaWdobGlnaHRzLgogICAgZC4gSnVzdCBHcmFwaGljOyBubyBvdGhlciBpbmZvcm1hbCBvYmplY3RzLgogICAgZS4gTm8gQW5jaG9yLCBCcmlkZ2VIZWFkLCBvciBIaWdobGlnaHRzLgogICAgZi4gSnVzdCBCbG9ja1F1b3RlOyBubyBvdGhlciBpbmZvcm1hbCBvYmplY3RzLgogIC0tPgogIDx4czpncm91cCBuYW1lPSJjb21wb25lbnQubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGlzdC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFkbW9uLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZXNwZWNpZmljLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ic3lub3AuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaW5mb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb21wb3VuZC5jbGFzcyIvPgogICAgICA8eHM6Z3JvdXAgcmVmPSJnZW5vYmouY2xhc3MiLz4KICAgICAgPHhzOmdyb3VwIHJlZj0iZGVzY29iai5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9InNpZGViYXIubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGlzdC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFkbW9uLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZXNwZWNpZmljLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ic3lub3AuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaW5mb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwcm9jZWR1cmUiLz4KICAgICAgPHhzOmdyb3VwIHJlZj0iZ2Vub2JqLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImJlZ2lucGFnZSIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0icWFuZGFzZXQubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGlzdC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFkbW9uLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZXNwZWNpZmljLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ic3lub3AuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaW5mb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwcm9jZWR1cmUiLz4KICAgICAgPHhzOmdyb3VwIHJlZj0iZ2Vub2JqLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0icmV2ZGVzY3JpcHRpb24ubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGlzdC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFkbW9uLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZXNwZWNpZmljLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ic3lub3AuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaW5mb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmb3JtYWwuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwcm9jZWR1cmUiLz4KICAgICAgPHhzOmdyb3VwIHJlZj0iZ2Vub2JqLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0iZm9vdG5vdGUubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGlzdC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVzcGVjaWZpYy5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN5bm9wLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImluZm9ybWFsLmNsYXNzIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJleGFtcGxlLm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imxpc3QuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lc3BlY2lmaWMuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzeW5vcC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmZvcm1hbC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwcm9jZWR1cmUiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9ImhpZ2hsaWdodHMubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGlzdC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFkbW9uLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPCEtLQogICAgJWZvcm1hbC5jbGFzczsgaXMgZXhwbGljaXRseSBleGNsdWRlZCBmcm9tIG1hbnkgY29udGV4dHMgaW4gd2hpY2gKICAgIHBhcmFncmFwaHMgYXJlIHVzZWQKICAtLT4KICA8eHM6Z3JvdXAgbmFtZT0icGFyYS5taXgiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaXN0LmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYWRtb24uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lc3BlY2lmaWMuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmZvcm1hbC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImZvcm1hbC5jbGFzcyIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0iYWRtb24ubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGlzdC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVzcGVjaWZpYy5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN5bm9wLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImluZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icHJvY2VkdXJlIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ic2lkZWJhciIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFuY2hvciIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImJyaWRnZWhlYWQiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZW1hcmsiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYmVnaW5wYWdlIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJmaWd1cmUubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZXNwZWNpZmljLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ic3lub3AuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmZvcm1hbC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9InRhYmVudHJ5Lm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imxpc3QuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhZG1vbi5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVzcGVjaWZpYy5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJncmFwaGljIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibWVkaWFvYmplY3QiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9Imdsb3NzZGVmLm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imxpc3QuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lc3BlY2lmaWMuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzeW5vcC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmZvcm1hbC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImZvcm1hbC5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InJlbWFyayIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9ImxlZ2Fsbm90aWNlLm1peCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCByZWY9Imxpc3QuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhZG1vbi5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVzcGVjaWZpYy5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJibG9ja3F1b3RlIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImJlZ2lucGFnZSIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0idGV4dG9iamVjdC5taXgiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaXN0LmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYWRtb24uY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lc3BlY2lmaWMuY2xhc3MiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYmxvY2txdW90ZSIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8eHM6ZWxlbWVudCBuYW1lPSJtZWRpYW9iamVjdC5taXgiIGFic3RyYWN0PSJ0cnVlIi8+CiAgPHhzOmdyb3VwIG5hbWU9Imxpc3RwcmVhbWJsZS5taXgiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhZG1vbi5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVzcGVjaWZpYy5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN5bm9wLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImluZm9ybWFsLmNsYXNzIi8+CiAgICAgIDx4czpncm91cCByZWY9Imdlbm9iai5jbGFzcyIvPgogICAgICA8eHM6Z3JvdXAgcmVmPSJkZXNjb2JqLmNsYXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImJlZ2lucGFnZSIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8IS0tIENoYXJhY3Rlci1sZXZlbCBtaXh0dXJlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBzZ21sLmZlYXR1cmVzIC0tPgogIDwhLS0gbm90IFtzZ21sLmZlYXR1cmVzWyAtLT4KICA8IS0tIF1dIG5vdCBzZ21sLmZlYXR1cmVzIC0tPgogIDwhLS0KICAgICAgICAgICAgICAgICAgICAgICAgI1BDRCB4cmVmIHdvcmQgbGluayBjcHRyIGJhc2UgZG5mbyBvdGhyIGlub2IgKHN5bm9wKQogICAgcGFyYS5jaGFyLm1peCAgICAgICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYCiAgICB0aXRsZS5jaGFyLm1peCAgICAgICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIFgKICAgIG5keHRlcm0uY2hhci5taXggICAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgWCAgICBYICAgIFggICAgYQogICAgY3B0ci5jaGFyLm1peCAgICAgICAgIFggICAgICAgICAgICAgIFggICAgWCAgICBYICAgICAgICAgWCAgICBhCiAgICBzbWFsbGNwdHIuY2hhci5taXggICAgWCAgICAgICAgICAgICAgICAgICBiICAgICAgICAgICAgICAgICAgIGEKICAgIHdvcmQuY2hhci5taXggICAgICAgICBYICAgICAgICAgYyAgICBYICAgICAgICAgWCAgICAgICAgIFggICAgYQogICAgZG9jaW5mby5jaGFyLm1peCAgICAgIFggICAgICAgICBkICAgIFggICAgYiAgICAgICAgICAgICAgWCAgICBhCiAgICAKICAgIGEuIEp1c3QgSW5saW5lR3JhcGhpYzsgbm8gSW5saW5lRXF1YXRpb24uCiAgICBiLiBKdXN0IFJlcGxhY2VhYmxlOyBubyBvdGhlciBjb21wdXRlciB0ZXJtcy4KICAgIGMuIEp1c3QgRW1waGFzaXMgYW5kIFRyYWRlbWFyazsgbm8gb3RoZXIgd29yZCBlbGVtZW50cy4KICAgIGQuIEp1c3QgQWNyb255bSwgRW1waGFzaXMsIGFuZCBUcmFkZW1hcms7IG5vIG90aGVyIHdvcmQgZWxlbWVudHMuCiAgLS0+CiAgPHhzOmdyb3VwIG5hbWU9InBhcmEuY2hhci5taXgiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4cmVmLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Imdlbi5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRlY2guY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJhc2UuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZG9jaW5mby5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ib3RoZXIuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lb2JqLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN5bm9wLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9InRpdGxlLmNoYXIubWl4Ij4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ieHJlZi5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJnZW4uY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluay5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0ZWNoLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJiYXNlLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImRvY2luZm8uY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9Im90aGVyLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZW9iai5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJuZHh0ZXJtLmNoYXIubWl4Ij4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ieHJlZi5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJnZW4uY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluay5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0ZWNoLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJiYXNlLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImRvY2luZm8uY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9Im90aGVyLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZWdyYXBoaWMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZW1lZGlhb2JqZWN0Ii8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJjcHRyLmNoYXIubWl4Ij4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluay5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0ZWNoLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJiYXNlLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJvdGhlci5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmxpbmVncmFwaGljIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmxpbmVtZWRpYW9iamVjdCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYmVnaW5wYWdlIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgPC94czpzZXF1ZW5jZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJzbWFsbGNwdHIuY2hhci5taXgiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZXBsYWNlYWJsZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lZ3JhcGhpYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lbWVkaWFvYmplY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImJlZ2lucGFnZSIvPgogICAgICA8L3hzOmNob2ljZT4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpncm91cD4KICA8eHM6Z3JvdXAgbmFtZT0id29yZC5jaGFyLm1peCI+CiAgICA8eHM6c2VxdWVuY2U+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFjcm9ueW0iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImVtcGhhc2lzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0cmFkZW1hcmsiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmsuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9ImJhc2UuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czpncm91cCByZWY9Im90aGVyLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZWdyYXBoaWMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImlubGluZW1lZGlhb2JqZWN0Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiZWdpbnBhZ2UiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmdyb3VwIG5hbWU9ImRvY2luZm8uY2hhci5taXgiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImVtcGhhc2lzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0cmFkZW1hcmsiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InJlcGxhY2VhYmxlIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ib3RoZXIuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lZ3JhcGhpYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lbWVkaWFvYmplY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPCEtLSBFTlRJVFkgJSBiaWJsaW9jb21wb25lbnQubWl4IChzZWUgQmlibGlvZ3JhcGhpYyBzZWN0aW9uLCBiZWxvdykgLS0+CiAgPCEtLSBFTlRJVFkgJSBwZXJzb24uaWRlbnQubWl4IChzZWUgQmlibGlvZ3JhcGhpYyBzZWN0aW9uLCBiZWxvdykgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gRW50aXRpZXMgZm9yIGF0dHJpYnV0ZXMgYW5kIGF0dHJpYnV0ZSBjb21wb25lbnRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEVmZmVjdGl2aXR5IGF0dHJpYnV0ZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLQogICAgQXJjaDogQ29tcHV0ZXIgb3IgY2hpcCBhcmNoaXRlY3R1cmUgdG8gd2hpY2ggZWxlbWVudCBhcHBsaWVzOyBubwogICAgZGVmYXVsdAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcmNoLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFyY2giLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gQ29uZGl0aW9uOiBHZW5lcmFsLXB1cnBvc2UgZWZmZWN0aXZpdHkgYXR0cmlidXRlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25kaXRpb24uYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29uZGl0aW9uIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIENvbmZvcm1hbmNlOiBTdGFuZGFyZHMgY29uZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25mb3JtYW5jZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb25mb3JtYW5jZSIgdHlwZT0ieHM6Tk1UT0tFTlMiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gT1M6IE9wZXJhdGluZyBzeXN0ZW0gdG8gd2hpY2ggZWxlbWVudCBhcHBsaWVzOyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvcy5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvcyIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBSZXZpc2lvbjogRWRpdG9yaWFsIHJldmlzaW9uIHRvIHdoaWNoIGVsZW1lbnQgYmVsb25nczsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmV2aXNpb24uYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmV2aXNpb24iLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gU2VjdXJpdHk6IFNlY3VyaXR5IGNsYXNzaWZpY2F0aW9uOyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWN1cml0eS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZWN1cml0eSIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLQogICAgVXNlckxldmVsOiBMZXZlbCBvZiB1c2VyIGV4cGVyaWVuY2UgdG8gd2hpY2ggZWxlbWVudCBhcHBsaWVzOyBubwogICAgZGVmYXVsdAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ1c2VybGV2ZWwuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXNlcmxldmVsIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIFZlbmRvcjogQ29tcHV0ZXIgdmVuZG9yIHRvIHdoaWNoIGVsZW1lbnQgYXBwbGllczsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idmVuZG9yLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZlbmRvciIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBXb3Jkc2l6ZTogQ29tcHV0ZXIgd29yZCBzaXplICgzMiBiaXQsIDY0IGJpdCwgZXRjLik7IG5vIGRlZmF1bHQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IndvcmRzaXplLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9IndvcmRzaXplIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZWZmZWN0aXZpdHkuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFyY2guYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb25kaXRpb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb25mb3JtYW5jZS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9zLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmV2aXNpb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWN1cml0eS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InVzZXJsZXZlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InZlbmRvci5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9IndvcmRzaXplLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBDb21tb24gYXR0cmlidXRlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gSWQ6IFVuaXF1ZSBpZGVudGlmaWVyIG9mIGVsZW1lbnQ7IG5vIGRlZmF1bHQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImlkLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czpJRCIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLQogICAgSWQ6IFVuaXF1ZSBpZGVudGlmaWVyIG9mIGVsZW1lbnQ7IGEgdmFsdWUgbXVzdCBiZSBzdXBwbGllZDsgbm8KICAgIGRlZmF1bHQKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaWRyZXEuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaWQiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzOklEIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tCiAgICBMYW5nOiBJbmRpY2F0b3Igb2YgbGFuZ3VhZ2UgaW4gd2hpY2ggZWxlbWVudCBpcyB3cml0dGVuLCBmb3IKICAgIHRyYW5zbGF0aW9uLCBjaGFyYWN0ZXIgc2V0IG1hbmFnZW1lbnQsIGV0Yy47IG5vIGRlZmF1bHQKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGFuZy5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsYW5nIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIFJlbWFwOiBQcmV2aW91cyByb2xlIG9mIGVsZW1lbnQgYmVmb3JlIGNvbnZlcnNpb247IG5vIGRlZmF1bHQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlbWFwLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlbWFwIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIFJvbGU6IE5ldyByb2xlIG9mIGVsZW1lbnQgaW4gbG9jYWwgZW52aXJvbm1lbnQ7IG5vIGRlZmF1bHQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icm9sZSIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLQogICAgWFJlZkxhYmVsOiBBbHRlcm5hdGUgbGFiZWxpbmcgc3RyaW5nIGZvciBYUmVmIHRleHQgZ2VuZXJhdGlvbjsKICAgIGRlZmF1bHQgaXMgdXN1YWxseSB0aXRsZSBvciBvdGhlciBhcHByb3ByaWF0ZSBsYWJlbCB0ZXh0IGFscmVhZHkKICAgIGNvbnRhaW5lZCBpbiBlbGVtZW50CiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InhyZWZsYWJlbC5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ4cmVmbGFiZWwiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0KICAgIFJldmlzaW9uRmxhZzogUmV2aXNpb24gc3RhdHVzIG9mIGVsZW1lbnQ7IGRlZmF1bHQgaXMgdGhhdCBlbGVtZW50CiAgICB3YXNuJ3QgcmV2aXNlZAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZXZpc2lvbmZsYWcuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmV2aXNpb25mbGFnIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2hhbmdlZCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJhZGRlZCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJkZWxldGVkIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im9mZiIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkaXI6IEJpZGlyZWN0aW9uYWwgb3ZlcnJpZGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImRpci5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkaXIiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsdHIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icnRsIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxybyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJybG8iLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0geG1sOmJhc2U6IGJhc2UgVVJJIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ4bWwtYmFzZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSByZWY9InhtbDpiYXNlIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIFJvbGUgaXMgaW5jbHVkZWQgZXhwbGljaXRseSBvbiBlYWNoIGVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbW1vbi5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaWQuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYW5nLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVtYXAuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ4cmVmbGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXZpc2lvbmZsYWcuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlZmZlY3Rpdml0eS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImRpci5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InhtbC1iYXNlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBSb2xlIGlzIGluY2x1ZGVkIGV4cGxpY2l0bHkgb24gZWFjaCBlbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpZHJlcS5jb21tb24uYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImlkcmVxLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFuZy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlbWFwLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ieHJlZmxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmV2aXNpb25mbGFnLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZWZmZWN0aXZpdHkuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJkaXIuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ4bWwtYmFzZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gU2VtaS1jb21tb24gYXR0cmlidXRlcyBhbmQgb3RoZXIgYXR0cmlidXRlIGVudGl0aWVzIC4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tCiAgICBFbnRpdHlSZWY6IE5hbWUgb2YgYW4gZXh0ZXJuYWwgZW50aXR5IGNvbnRhaW5pbmcgdGhlIGNvbnRlbnQKICAgIG9mIHRoZSBncmFwaGljCiAgLS0+CiAgPCEtLQogICAgRmlsZVJlZjogRmlsZW5hbWUsIHF1YWxpZmllZCBieSBhIHBhdGhuYW1lIGlmIGRlc2lyZWQsCiAgICBkZXNpZ25hdGluZyB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBjb250ZW50IG9mIHRoZSBncmFwaGljCiAgLS0+CiAgPCEtLSBGb3JtYXQ6IE5vdGF0aW9uIG9mIHRoZSBlbGVtZW50IGNvbnRlbnQsIGlmIGFueSAtLT4KICA8IS0tIFNyY0NyZWRpdDogSW5mb3JtYXRpb24gYWJvdXQgdGhlIHNvdXJjZSBvZiB0aGUgR3JhcGhpYyAtLT4KICA8IS0tIFdpZHRoOiBTYW1lIGFzIENBTFMgcmVwcm93aWQgKGRlc2lyZWQgd2lkdGgpIC0tPgogIDwhLS0gRGVwdGg6IFNhbWUgYXMgQ0FMUyByZXByb2RlcCAoZGVzaXJlZCBkZXB0aCkgLS0+CiAgPCEtLQogICAgQWxpZ246IFNhbWUgYXMgQ0FMUyBocGxhY2Ugd2l0aCAnbm9uZScgcmVtb3ZlZDsgI0lNUExJRUQgbWVhbnMKICAgIGFwcGxpY2F0aW9uLXNwZWNpZmljCiAgLS0+CiAgPCEtLSBTY2FsZTogQ29uZmxhdGlvbiBvZiBDQUxTIGhzY2FsZSBhbmQgdnNjYWxlIC0tPgogIDwhLS0gU2NhbGVmaXQ6IFNhbWUgYXMgQ0FMUyBzY2FsZWZpdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ3JhcGhpY3MuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZW50aXR5cmVmIiB0eXBlPSJ4czpFTlRJVFkiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZmlsZXJlZiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmb3JtYXQiIHR5cGU9Im5vdGF0aW9uLmNsYXNzIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNyY2NyZWRpdCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ3aWR0aCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb250ZW50d2lkdGgiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZGVwdGgiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29udGVudGRlcHRoIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGVmdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyaWdodCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjZW50ZXIiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idmFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idG9wIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im1pZGRsZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJib3R0b20iLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2NhbGUiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2NhbGVmaXQiIHR5cGU9Inllc29ybm8uYXR0dmFscyIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLQogICAgQWN0aW9uOiBLZXkgY29tYmluYXRpb24gdHlwZTsgZGVmYXVsdCBpcyB1bnNwZWNpZmllZCBpZiBvbmUKICAgIGNoaWxkIGVsZW1lbnQsIFNpbXVsIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmU7IGlmIHZhbHVlIGlzCiAgICBPdGhlciwgdGhlIE90aGVyQWN0aW9uIGF0dHJpYnV0ZSBtdXN0IGhhdmUgYSBub25lbXB0eSB2YWx1ZQogIC0tPgogIDwhLS0gT3RoZXJBY3Rpb246IFVzZXItZGVmaW5lZCBrZXkgY29tYmluYXRpb24gdHlwZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ia2V5YWN0aW9uLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFjdGlvbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNsaWNrIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImRvdWJsZS1jbGljayIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwcmVzcyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZXEiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2ltdWwiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3RoZXIiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib3RoZXJhY3Rpb24iLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0KICAgIExhYmVsOiBJZGVudGlmeWluZyBudW1iZXIgb3Igc3RyaW5nOyBkZWZhdWx0IGlzIHVzdWFsbHkgdGhlCiAgICBhcHByb3ByaWF0ZSBudW1iZXIgb3Igc3RyaW5nIGF1dG9nZW5lcmF0ZWQgYnkgYSBmb3JtYXR0ZXIKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGFiZWwuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGFiZWwiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0geG1sOnNwYWNlOiB3aGl0ZXNwYWNlIHRyZWF0bWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ieG1sLXNwYWNlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlIHJlZj0ieG1sOnNwYWNlIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tCiAgICBGb3JtYXQ6IHdoZXRoZXIgZWxlbWVudCBpcyBhc3N1bWVkIHRvIGNvbnRhaW4gc2lnbmlmaWNhbnQgd2hpdGUKICAgIHNwYWNlCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxpbmVzcGVjaWZpYy5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmb3JtYXQiIGRlZmF1bHQ9ImxpbmVzcGVjaWZpYyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxpbmVzcGVjaWZpYyIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ieG1sLXNwYWNlLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsaW5lbnVtYmVyaW5nIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibnVtYmVyZWQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idW5udW1iZXJlZCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb250aW51YXRpb24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjb250aW51ZXMiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVzdGFydHMiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3RhcnRpbmdsaW5lbnVtYmVyIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Imxhbmd1YWdlIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIExpbmtlbmQ6IGxpbmsgdG8gcmVsYXRlZCBpbmZvcm1hdGlvbjsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGlua2VuZC5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsaW5rZW5kIiB0eXBlPSJ4czpJRFJFRiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBMaW5rZW5kOiByZXF1aXJlZCBsaW5rIHRvIHJlbGF0ZWQgaW5mb3JtYXRpb24gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxpbmtlbmRyZXEuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGlua2VuZCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6SURSRUYiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0KICAgIExpbmtlbmRzOiBsaW5rIHRvIG9uZSBvciBtb3JlIHNldHMgb2YgcmVsYXRlZCBpbmZvcm1hdGlvbjsgbm8KICAgIGRlZmF1bHQKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGlua2VuZHMuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGlua2VuZHMiIHR5cGU9InhzOklEUkVGUyIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1hcmsuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWFyayIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBNb3JlSW5mbzogd2hldGhlciBlbGVtZW50J3MgY29udGVudCBoYXMgYW4gYXNzb2NpYXRlZCBSZWZFbnRyeSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibW9yZWluZm8uYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibW9yZWluZm8iIGRlZmF1bHQ9Im5vbmUiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZWZlbnRyeSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJub25lIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIFBhZ2VudW06IG51bWJlciBvZiBwYWdlIG9uIHdoaWNoIGVsZW1lbnQgYXBwZWFyczsgbm8gZGVmYXVsdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGFnZW51bS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwYWdlbnVtIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tCiAgICBTdGF0dXM6IEVkaXRvcmlhbCBvciBwdWJsaWNhdGlvbiBzdGF0dXMgb2YgdGhlIGVsZW1lbnQKICAgIGl0IGFwcGxpZXMgdG8sIHN1Y2ggYXMgImluIHJldmlldyIgb3IgImFwcHJvdmVkIGZvciBkaXN0cmlidXRpb24iCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN0YXR1cy5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzdGF0dXMiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0KICAgIFdpZHRoOiB3aWR0aCBvZiB0aGUgbG9uZ2VzdCBsaW5lIGluIHRoZSBlbGVtZW50IHRvIHdoaWNoIGl0CiAgICBwZXJ0YWlucywgaW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0id2lkdGguYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0id2lkdGgiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIFRpdGxlIGVsZW1lbnRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRpdGxlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgdGV4dCBvZiB0aGUgdGl0bGUgb2YgYSBzZWN0aW9uIG9mIGEgZG9jdW1lbnQgb3Igb2YgYSBmb3JtYWwgYmxvY2stbGV2ZWwgZWxlbWVudC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idGl0bGUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idGl0bGUuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGl0bGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdGl0bGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGl0bGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYWdlbnVtLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGl0bGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRpdGxlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdGl0bGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0aXRsZWFiYnJldi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIGFiYnJldmlhdGlvbiBvZiBhIFRpdGxlLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0aXRsZWFiYnJldiI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0aXRsZS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0aXRsZWFiYnJldi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0aXRsZWFiYnJldi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0aXRsZWFiYnJldi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRpdGxlYWJicmV2LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0aXRsZWFiYnJldi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHRpdGxlYWJicmV2Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3VidGl0bGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSBzdWJ0aXRsZSBvZiBhIGRvY3VtZW50LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJzdWJ0aXRsZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0aXRsZS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdWJ0aXRsZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzdWJ0aXRsZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdWJ0aXRsZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN1YnRpdGxlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzdWJ0aXRsZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHN1YnRpdGxlLm1vZHVsZSAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBCaWJsaW9ncmFwaGljIGVudGl0aWVzIGFuZCBlbGVtZW50cyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0KICAgIFRoZSBiaWJsaW9ncmFwaGljIGVsZW1lbnRzIGFyZSB0eXBpY2FsbHkgdXNlZCBpbiB0aGUgZG9jdW1lbnQKICAgIGhpZXJhcmNoeS4gVGhleSBkbyBub3QgYXBwZWFyIGluIGNvbnRlbnQgbW9kZWxzIG9mIGluZm9ybWF0aW9uCiAgICBwb29sIGVsZW1lbnRzLiAgU2VlIGFsc28gdGhlIGRvY3VtZW50IGluZm9ybWF0aW9uIGVsZW1lbnRzLAogICAgYmVsb3cuCiAgLS0+CiAgPHhzOmdyb3VwIG5hbWU9InBlcnNvbi5pZGVudC5taXgiPgogICAgPHhzOmNob2ljZT4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJob25vcmlmaWMiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmaXJzdG5hbWUiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdXJuYW1lIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZWFnZSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im90aGVybmFtZSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImFmZmlsaWF0aW9uIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYXV0aG9yYmx1cmIiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb250cmliIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDx4czpncm91cCBuYW1lPSJiaWJsaW9jb21wb25lbnQubWl4Ij4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYWJicmV2Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYWJzdHJhY3QiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhZGRyZXNzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYXJ0cGFnZW51bXMiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhdXRob3IiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhdXRob3Jncm91cCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImF1dGhvcmluaXRpYWxzIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYmlibGlvbWlzYyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImJpYmxpb3NldCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImNvbGxhYiIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImNvbmZncm91cCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImNvbnRyYWN0bnVtIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iY29udHJhY3RzcG9uc29yIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iY29weXJpZ2h0Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iY29ycGF1dGhvciIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImNvcnBuYW1lIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iY29ycGNyZWRpdCIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImRhdGUiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlZGl0aW9uIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZWRpdG9yIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaW52cGFydG51bWJlciIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImlzYm4iLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpc3NuIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaXNzdWVudW0iLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJvcmduYW1lIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iYmlibGlvaWQiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjaXRlYmlibGlvaWQiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiaWJsaW9zb3VyY2UiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiaWJsaW9yZWxhdGlvbiIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9ImJpYmxpb2NvdmVyYWdlIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ib3RoZXJjcmVkaXQiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYWdlbnVtcyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InByaW50aGlzdG9yeSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InByb2R1Y3RuYW1lIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icHJvZHVjdG51bWJlciIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InB1YmRhdGUiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwdWJsaXNoZXIiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwdWJsaXNoZXJuYW1lIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icHVic251bWJlciIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InJlbGVhc2VpbmZvIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0icmV2aGlzdG9yeSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InNlcmllc3ZvbG51bXMiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdWJ0aXRsZSIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InRpdGxlIi8+CiAgICAgIDx4czplbGVtZW50IHJlZj0idGl0bGVhYmJyZXYiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ2b2x1bWVudW0iLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjaXRldGl0bGUiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwZXJzb25uYW1lIi8+CiAgICAgIDx4czpncm91cCByZWY9InBlcnNvbi5pZGVudC5taXgiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDwhLS0gSSBkb24ndCB0aGluayB0aGlzIGlzIHdlbGwgcGxhY2VkLCBidXQgaXQgbmVlZHMgdG8gYmUgaGVyZSBiZWNhdXNlIG9mIC0tPgogIDwhLS0gdGhlIHJlZmVyZW5jZSB0byBiaWJsaW9jb21wb25lbnQubWl4IC0tPgogIDx4czpncm91cCBuYW1lPSJpbmZvLmNsYXNzIj4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IHJlZj0iZ3JhcGhpYyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9Im1lZGlhb2JqZWN0Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0ibGVnYWxub3RpY2UiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtb2Rlc3BlYyIvPgogICAgICA8eHM6ZWxlbWVudCByZWY9InN1YmplY3RzZXQiLz4KICAgICAgPHhzOmVsZW1lbnQgcmVmPSJrZXl3b3Jkc2V0Ii8+CiAgICAgIDx4czplbGVtZW50IHJlZj0iaXRlcm1zZXQiLz4KICAgICAgPHhzOmdyb3VwIHJlZj0iYmlibGlvY29tcG9uZW50Lm1peCIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpncm91cD4KICA8IS0tIEJpYmxpb0xpc3QgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9saXN0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHdyYXBwZXIgZm9yIGEgc2V0IG9mIGJpYmxpb2dyYXBoeSBlbnRyaWVzLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJiaWJsaW9saXN0IiBzdWJzdGl0dXRpb25Hcm91cD0ibGlzdC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmxvY2tpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiaWJsaW9lbnRyeSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiaWJsaW9taXhlZCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9saXN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb2xpc3QuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvbGlzdC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb2xpc3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJpYmxpb2xpc3QuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBiaWJsaW9saXN0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvZW50cnkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkFuIGVudHJ5IGluIGEgQmlibGlvZ3JhcGh5LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJiaWJsaW9lbnRyeSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYXJ0aWNsZWluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJiaWJsaW9jb21wb25lbnQubWl4Ii8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9lbnRyeS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBiaWJsaW9lbnRyeS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9lbnRyeS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb2VudHJ5LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBiaWJsaW9lbnRyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJpYmxpb2VudHJ5Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvbWl4ZWQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkFuIGVudHJ5IGluIGEgQmlibGlvZ3JhcGh5LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJiaWJsaW9taXhlZCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9ImJpYmxpb2NvbXBvbmVudC5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImJpYmxpb21zZXQiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb21peGVkLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb21peGVkLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb21peGVkLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvbWl4ZWQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJpYmxpb21peGVkLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYmlibGlvbWl4ZWQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcnRpY2xlaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6TWV0YS1pbmZvcm1hdGlvbiBmb3IgYW4gQXJ0aWNsZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXJ0aWNsZWluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5mby5jbGFzcyIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhcnRpY2xlaW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBhcnRpY2xlaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcnRpY2xlaW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFydGljbGVpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhcnRpY2xlaW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGFydGljbGVpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvc2V0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBICJyYXciIGNvbnRhaW5lciBmb3IgcmVsYXRlZCBiaWJsaW9ncmFwaGljIGluZm9ybWF0aW9uLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJiaWJsaW9zZXQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iYmlibGlvY29tcG9uZW50Lm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9zZXQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYmlibGlvc2V0LmVsZW1lbnQgLS0+CiAgPCEtLSBSZWxhdGlvbjogUmVsYXRpb25zaGlwIG9mIGVsZW1lbnRzIGNvbnRhaW5lZCB3aXRoaW4gQmlibGlvU2V0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9zZXQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlbGF0aW9uIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9zZXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJpYmxpb3NldC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJpYmxpb3NldC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb21zZXQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgImNvb2tlZCIgY29udGFpbmVyIGZvciByZWxhdGVkIGJpYmxpb2dyYXBoaWMgaW5mb3JtYXRpb24uIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImJpYmxpb21zZXQiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJiaWJsaW9jb21wb25lbnQubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJiaWJsaW9tc2V0Ii8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9tc2V0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb21zZXQuZWxlbWVudCAtLT4KICA8IS0tIFJlbGF0aW9uOiBSZWxhdGlvbnNoaXAgb2YgZWxlbWVudHMgY29udGFpbmVkIHdpdGhpbiBCaWJsaW9NU2V0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9tc2V0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZWxhdGlvbiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvbXNldC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYmlibGlvbXNldC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJpYmxpb21zZXQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9taXNjLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpVbnR5cGVkIGJpYmxpb2dyYXBoaWMgaW5mb3JtYXRpb24uIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImJpYmxpb21pc2MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9taXNjLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb21pc2MuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvbWlzYy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb21pc2Mucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJpYmxpb21pc2MuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBiaWJsaW9taXNjLm1vZHVsZSAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBTdWJqZWN0LCBLZXl3b3JkLCBhbmQgSVRlcm1TZXQgZWxlbWVudHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdWJqZWN0c2V0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHNldCBvZiB0ZXJtcyBkZXNjcmliaW5nIHRoZSBzdWJqZWN0IG1hdHRlciBvZiBhIGRvY3VtZW50LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJzdWJqZWN0c2V0Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InN1YmplY3QiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3ViamVjdHNldC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzdWJqZWN0c2V0LmVsZW1lbnQgLS0+CiAgPCEtLSBTY2hlbWU6IENvbnRyb2xsZWQgdm9jYWJ1bGFyeSBlbXBsb3llZCBpbiBTdWJqZWN0VGVybXMgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN1YmplY3RzZXQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNjaGVtZSIgdHlwZT0ieHM6Tk1UT0tFTiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3ViamVjdHNldC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc3ViamVjdHNldC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHN1YmplY3RzZXQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdWJqZWN0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpPbmUgb2YgYSBncm91cCBvZiB0ZXJtcyBkZXNjcmliaW5nIHRoZSBzdWJqZWN0IG1hdHRlciBvZiBhIGRvY3VtZW50LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJzdWJqZWN0Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InN1YmplY3R0ZXJtIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN1YmplY3QuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc3ViamVjdC5lbGVtZW50IC0tPgogIDwhLS0KICAgIFdlaWdodDogUmFua2luZyBvZiB0aGlzIGdyb3VwIG9mIFN1YmplY3RUZXJtcyByZWxhdGl2ZQogICAgdG8gb3RoZXJzLCAwIGlzIGxvdywgbm8gaGlnaGVzdCB2YWx1ZSBzcGVjaWZpZWQKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3ViamVjdC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0id2VpZ2h0Ii8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdWJqZWN0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzdWJqZWN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc3ViamVjdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN1YmplY3R0ZXJtLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHRlcm0gaW4gYSBncm91cCBvZiB0ZXJtcyBkZXNjcmliaW5nIHRoZSBzdWJqZWN0IG1hdHRlciBvZiBhIGRvY3VtZW50LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJzdWJqZWN0dGVybSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdWJqZWN0dGVybS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzdWJqZWN0dGVybS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdWJqZWN0dGVybS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN1YmplY3R0ZXJtLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzdWJqZWN0dGVybS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHN1YmplY3R0ZXJtLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBzdWJqZWN0c2V0LmNvbnRlbnQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJrZXl3b3Jkc2V0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHNldCBvZiBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIGEgZG9jdW1lbnQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImtleXdvcmRzZXQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ia2V5d29yZCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJrZXl3b3Jkc2V0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGtleXdvcmRzZXQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ia2V5d29yZHNldC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImtleXdvcmRzZXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGtleXdvcmRzZXQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBrZXl3b3Jkc2V0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ia2V5d29yZC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6T25lIG9mIGEgc2V0IG9mIGtleXdvcmRzIGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgYSBkb2N1bWVudC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ia2V5d29yZCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJrZXl3b3JkLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGtleXdvcmQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ia2V5d29yZC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImtleXdvcmQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGtleXdvcmQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBrZXl3b3JkLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBrZXl3b3Jkc2V0LmNvbnRlbnQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpdGVybXNldC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBzZXQgb2YgaW5kZXggdGVybXMgaW4gdGhlIG1ldGEtaW5mb3JtYXRpb24gb2YgYSBkb2N1bWVudC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaXRlcm1zZXQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaW5kZXh0ZXJtIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Iml0ZXJtc2V0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGl0ZXJtc2V0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Iml0ZXJtc2V0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaXRlcm1zZXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGl0ZXJtc2V0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaXRlcm1zZXQubW9kdWxlIC0tPgogIDwhLS0gQmlibGlvZ3JhcGhpYyBpbmZvIGZvciAiYmxvY2tzIiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmxvY2tpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpNZXRhLWluZm9ybWF0aW9uIGZvciBhIGJsb2NrIGVsZW1lbnQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImJsb2NraW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmZvLmNsYXNzIi8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJsb2NraW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBibG9ja2luZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmxvY2tpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmxvY2tpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBibG9ja2luZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBibG9ja2luZm8ubW9kdWxlIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIENvbXBvdW5kIChzZWN0aW9uLWlzaCkgZWxlbWVudHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBNZXNzYWdlIHNldCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtc2dzZXQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgZGV0YWlsZWQgc2V0IG9mIG1lc3NhZ2VzLCB1c3VhbGx5IGVycm9yIG1lc3NhZ2VzLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJtc2dzZXQiIHN1YnN0aXR1dGlvbkdyb3VwPSJjb21wb3VuZC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmxvY2tpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtc2dlbnRyeSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic2ltcGxlbXNnZW50cnkiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNnc2V0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1zZ3NldC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtc2dzZXQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dzZXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1zZ3NldC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1zZ3NldC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ2VudHJ5LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHdyYXBwZXIgZm9yIGFuIGVudHJ5IGluIGEgbWVzc2FnZSBzZXQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9Im1zZ2VudHJ5Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1zZyIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJtc2dpbmZvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtc2dleHBsYW4iLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNnZW50cnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbXNnZW50cnkuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnZW50cnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dlbnRyeS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbXNnZW50cnkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtc2dlbnRyeS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNpbXBsZW1zZ2VudHJ5LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHdyYXBwZXIgZm9yIGEgc2ltcGxlciBlbnRyeSBpbiBhIG1lc3NhZ2Ugc2V0LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJzaW1wbGVtc2dlbnRyeSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im1zZ3RleHQiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtc2dleHBsYW4iLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2ltcGxlbXNnZW50cnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2ltcGxlbXNnZW50cnkuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2ltcGxlbXNnZW50cnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImF1ZGllbmNlIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImxldmVsIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im9yaWdpbiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2ltcGxlbXNnZW50cnkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNpbXBsZW1zZ2VudHJ5LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2ltcGxlbXNnZW50cnkubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtc2cucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgbWVzc2FnZSBpbiBhIG1lc3NhZ2Ugc2V0LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJtc2ciPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtc2dtYWluIi8+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ibXNnc3ViIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im1zZ3JlbCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2cuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbXNnLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbXNnLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbXNnLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnbWFpbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIHByaW1hcnkgY29tcG9uZW50IG9mIGEgbWVzc2FnZSBpbiBhIG1lc3NhZ2Ugc2V0LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJtc2dtYWluIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0aXRsZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibXNndGV4dCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dtYWluLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1zZ21haW4uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnbWFpbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ21haW4ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1zZ21haW4uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtc2dtYWluLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnc3ViLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHN1YmNvbXBvbmVudCBvZiBhIG1lc3NhZ2UgaW4gYSBtZXNzYWdlIHNldC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibXNnc3ViIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0aXRsZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibXNndGV4dCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dzdWIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbXNnc3ViLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ3N1Yi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ3N1Yi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbXNnc3ViLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbXNnc3ViLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNncmVsLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHJlbGF0ZWQgY29tcG9uZW50IG9mIGEgbWVzc2FnZSBpbiBhIG1lc3NhZ2Ugc2V0LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJtc2dyZWwiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtc2d0ZXh0Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ3JlbC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtc2dyZWwuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNncmVsLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNncmVsLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtc2dyZWwuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtc2dyZWwubW9kdWxlIC0tPgogIDwhLS0gTXNnVGV4dCAoZGVmaW5lZCBpbiB0aGUgSW5saW5lcyBzZWN0aW9uLCBiZWxvdykgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ2luZm8ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkluZm9ybWF0aW9uIGFib3V0IGEgbWVzc2FnZSBpbiBhIG1lc3NhZ2Ugc2V0LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJtc2dpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im1zZ2xldmVsIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtc2dvcmlnIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtc2dhdWQiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ2luZm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbXNnaW5mby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtc2dpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNnaW5mby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbXNnaW5mby5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1zZ2luZm8ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtc2dsZXZlbC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIGxldmVsIG9mIGltcG9ydGFuY2Ugb3Igc2V2ZXJpdHkgb2YgYSBtZXNzYWdlIGluIGEgbWVzc2FnZSBzZXQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9Im1zZ2xldmVsIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dsZXZlbC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtc2dsZXZlbC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtc2dsZXZlbC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ2xldmVsLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtc2dsZXZlbC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1zZ2xldmVsLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnb3JpZy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIG9yaWdpbiBvZiBhIG1lc3NhZ2UgaW4gYSBtZXNzYWdlIHNldC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibXNnb3JpZyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNnb3JpZy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtc2dvcmlnLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ29yaWcuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dvcmlnLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtc2dvcmlnLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbXNnb3JpZy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ2F1ZC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIGF1ZGllbmNlIHRvIHdoaWNoIGEgbWVzc2FnZSBpbiBhIG1lc3NhZ2Ugc2V0IGlzIHJlbGV2YW50LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJtc2dhdWQiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2dhdWQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbXNnYXVkLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ2F1ZC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ2F1ZC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbXNnYXVkLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbXNnYXVkLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnZXhwbGFuLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpFeHBsYW5hdG9yeSBtYXRlcmlhbCByZWxhdGluZyB0byBhIG1lc3NhZ2UgaW4gYSBtZXNzYWdlIHNldC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibXNnZXhwbGFuIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0aXRsZSIvPgogICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjb21wb25lbnQubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ2V4cGxhbi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtc2dleHBsYW4uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNnZXhwbGFuLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibXNnZXhwbGFuLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtc2dleHBsYW4uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtc2dleHBsYW4ubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIG1zZ3NldC5jb250ZW50Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGFzay5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSB0YXNrIHRvIGJlIGNvbXBsZXRlZC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idGFzayIgc3Vic3RpdHV0aW9uR3JvdXA9ImNvbXBvdW5kLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0YXNrc3VtbWFyeSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0YXNrcHJlcmVxdWlzaXRlcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icHJvY2VkdXJlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJleGFtcGxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRhc2tyZWxhdGVkIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRhc2suYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdGFzay5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0YXNrLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGFzay5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdGFzay5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHRhc2subW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0YXNrc3VtbWFyeS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBzdW1tYXJ5IG9mIGEgdGFzay4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idGFza3N1bW1hcnkiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0iZm9ybWFsb2JqZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0YXNrc3VtbWFyeS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0YXNrc3VtbWFyeS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0YXNrc3VtbWFyeS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRhc2tzdW1tYXJ5LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0YXNrc3VtbWFyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHRhc2tzdW1tYXJ5Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGFza3ByZXJlcXVpc2l0ZXMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSBwcmVyZXF1aXNpdGVzIGZvciBhIHRhc2suIC0tPgogIDx4czplbGVtZW50IG5hbWU9InRhc2twcmVyZXF1aXNpdGVzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImZvcm1hbG9iamVjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbXBvbmVudC5taXgiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGFza3ByZXJlcXVpc2l0ZXMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdGFza3ByZXJlcXVpc2l0ZXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGFza3ByZXJlcXVpc2l0ZXMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0YXNrcHJlcmVxdWlzaXRlcy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdGFza3ByZXJlcXVpc2l0ZXMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0YXNrcHJlcmVxdWlzaXRlcy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRhc2tyZWxhdGVkLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpJbmZvcm1hdGlvbiByZWxhdGVkIHRvIGEgdGFzay4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idGFza3JlbGF0ZWQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0iZm9ybWFsb2JqZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0YXNrcmVsYXRlZC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0YXNrcmVsYXRlZC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0YXNrcmVsYXRlZC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRhc2tyZWxhdGVkLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0YXNrcmVsYXRlZC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHRhc2tyZWxhdGVkLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiB0YXNrLmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gUWFuZEFTZXQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJxYW5kYXNldC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBxdWVzdGlvbi1hbmQtYW5zd2VyIHNldC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0icWFuZGFzZXQiIHN1YnN0aXR1dGlvbkdyb3VwPSJjb21wb3VuZC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmxvY2tpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InFhbmRhc2V0Lm1peCIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJxYW5kYWRpdiIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icWFuZGFlbnRyeSIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJxYW5kYXNldC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBxYW5kYXNldC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJxYW5kYXNldC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZGVmYXVsdGxhYmVsIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icWFuZGEiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibnVtYmVyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5vbmUiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InFhbmRhc2V0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBxYW5kYXNldC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHFhbmRhc2V0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icWFuZGFkaXYucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgdGl0bGVkIGRpdmlzaW9uIGluIGEgUWFuZEFTZXQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InFhbmRhZGl2Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImZvcm1hbG9iamVjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icWFuZGFzZXQubWl4Ii8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InFhbmRhZGl2Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJxYW5kYWVudHJ5Ii8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InFhbmRhZGl2LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHFhbmRhZGl2LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InFhbmRhZGl2LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icWFuZGFkaXYucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHFhbmRhZGl2LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcWFuZGFkaXYubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJxYW5kYWVudHJ5LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHF1ZXN0aW9uL2Fuc3dlciBzZXQgd2l0aGluIGEgUWFuZEFTZXQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InFhbmRhZW50cnkiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJyZXZoaXN0b3J5Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJxdWVzdGlvbiIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iYW5zd2VyIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InFhbmRhZW50cnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcWFuZGFlbnRyeS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJxYW5kYWVudHJ5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icWFuZGFlbnRyeS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcWFuZGFlbnRyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHFhbmRhZW50cnkubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJxdWVzdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBxdWVzdGlvbiBpbiBhIFFhbmRBU2V0LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJxdWVzdGlvbiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ibGFiZWwiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icWFuZGFzZXQubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InF1ZXN0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHF1ZXN0aW9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InF1ZXN0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icXVlc3Rpb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHF1ZXN0aW9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcXVlc3Rpb24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhbnN3ZXIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkFuIGFuc3dlciB0byBhIHF1ZXN0aW9uIHBvc2VkIGluIGEgUWFuZEFTZXQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImFuc3dlciI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ibGFiZWwiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJxYW5kYXNldC5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InFhbmRhZW50cnkiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYW5zd2VyLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFuc3dlci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhbnN3ZXIuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhbnN3ZXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGFuc3dlci5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGFuc3dlci5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxhYmVsLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIGxhYmVsIG9uIGEgUXVlc3Rpb24gb3IgQW5zd2VyLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJsYWJlbCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ3b3JkLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGxhYmVsLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxhYmVsLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGxhYmVsLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbGFiZWwubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIHFhbmRhc2V0LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gUHJvY2VkdXJlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJvY2VkdXJlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIGxpc3Qgb2Ygb3BlcmF0aW9ucyB0byBiZSBwZXJmb3JtZWQgaW4gYSB3ZWxsLWRlZmluZWQgc2VxdWVuY2UuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InByb2NlZHVyZSIgc3Vic3RpdHV0aW9uR3JvdXA9ImNvbXBvdW5kLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImZvcm1hbG9iamVjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InN0ZXAiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJvY2VkdXJlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHByb2NlZHVyZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcm9jZWR1cmUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcm9jZWR1cmUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHByb2NlZHVyZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHByb2NlZHVyZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN0ZXAucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgdW5pdCBvZiBhY3Rpb24gaW4gYSBwcm9jZWR1cmUuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InN0ZXAiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlIi8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbXBvbmVudC5taXgiLz4KICAgICAgICAgICAgPHhzOnNlcXVlbmNlIG1pbk9jY3Vycz0iMCI+CiAgICAgICAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic3Vic3RlcHMiLz4KICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic3RlcGFsdGVybmF0aXZlcyIvPgogICAgICAgICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbXBvbmVudC5taXgiLz4KICAgICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdWJzdGVwcyIvPgogICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic3RlcGFsdGVybmF0aXZlcyIvPgogICAgICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RlcC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzdGVwLmVsZW1lbnQgLS0+CiAgPCEtLSBQZXJmb3JtYW5jZTogV2hldGhlciB0aGUgU3RlcCBtdXN0IGJlIHBlcmZvcm1lZCAtLT4KICA8IS0tIG5vdCAjUkVRVUlSRUQhIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdGVwLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwZXJmb3JtYW5jZSIgZGVmYXVsdD0icmVxdWlyZWQiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvcHRpb25hbCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZXF1aXJlZCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RlcC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc3RlcC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHN0ZXAubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdWJzdGVwcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSB3cmFwcGVyIGZvciBzdGVwcyB0aGF0IG9jY3VyIHdpdGhpbiBzdGVwcyBpbiBhIHByb2NlZHVyZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3Vic3RlcHMiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic3RlcCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdWJzdGVwcy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzdWJzdGVwcy5lbGVtZW50IC0tPgogIDwhLS0gUGVyZm9ybWFuY2U6IHdoZXRoZXIgZW50aXJlIHNldCBvZiBzdWJzdGVwcyBtdXN0IGJlIHBlcmZvcm1lZCAtLT4KICA8IS0tIG5vdCAjUkVRVUlSRUQhIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdWJzdGVwcy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icGVyZm9ybWFuY2UiIGRlZmF1bHQ9InJlcXVpcmVkIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3B0aW9uYWwiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVxdWlyZWQiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN1YnN0ZXBzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzdWJzdGVwcy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHN1YnN0ZXBzLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3RlcGFsdGVybmF0aXZlcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QWx0ZXJuYXRpdmUgc3RlcHMgaW4gYSBwcm9jZWR1cmUuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InN0ZXBhbHRlcm5hdGl2ZXMiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic3RlcCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGVwYWx0ZXJuYXRpdmVzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN0ZXBhbHRlcm5hdGl2ZXMuZWxlbWVudCAtLT4KICA8IS0tIFBlcmZvcm1hbmNlOiBXaGV0aGVyIChvbmUgb2YpIHRoZSBhbHRlcm5hdGl2ZXMgbXVzdCBiZSBwZXJmb3JtZWQgLS0+CiAgPCEtLSBub3QgI1JFUVVJUkVEISAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3RlcGFsdGVybmF0aXZlcy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icGVyZm9ybWFuY2UiIGRlZmF1bHQ9InJlcXVpcmVkIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3B0aW9uYWwiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVxdWlyZWQiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0ZXBhbHRlcm5hdGl2ZXMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN0ZXBhbHRlcm5hdGl2ZXMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzdGVwYWx0ZXJuYXRpdmVzLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBwcm9jZWR1cmUuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSBTaWRlYmFyIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzaWRlYmFyaW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6TWV0YS1pbmZvcm1hdGlvbiBmb3IgYSBTaWRlYmFyLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJzaWRlYmFyaW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJpbmZvLmNsYXNzIi8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNpZGViYXJpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNpZGViYXJpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNpZGViYXJpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2lkZWJhcmluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNpZGViYXJpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2lkZWJhcmluZm8ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzaWRlYmFyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHBvcnRpb24gb2YgYSBkb2N1bWVudCB0aGF0IGlzIGlzb2xhdGVkIGZyb20gdGhlIG1haW4gbmFycmF0aXZlIGZsb3cuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InNpZGViYXIiIHN1YnN0aXR1dGlvbkdyb3VwPSJjb21wb3VuZC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ic2lkZWJhcmluZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImZvcm1hbG9iamVjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNpZGViYXIubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNpZGViYXIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2lkZWJhci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzaWRlYmFyLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2lkZWJhci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2lkZWJhci5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNpZGViYXIubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIHNpZGViYXIuY29udGVudC5tb2RlbCAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBQYXJhZ3JhcGgtcmVsYXRlZCBlbGVtZW50cyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhYnN0cmFjdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBzdW1tYXJ5LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJhYnN0cmFjdCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNsYXNzIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFic3RyYWN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFic3RyYWN0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFic3RyYWN0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWJzdHJhY3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGFic3RyYWN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYWJzdHJhY3QubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhdXRob3JibHVyYi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBzaG9ydCBkZXNjcmlwdGlvbiBvciBub3RlIGFib3V0IGFuIGF1dGhvci4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXV0aG9yYmx1cmIiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhdXRob3JibHVyYi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBhdXRob3JibHVyYi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhdXRob3JibHVyYi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImF1dGhvcmJsdXJiLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhdXRob3JibHVyYi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGF1dGhvcmJsdXJiLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGVyc29uYmx1cmIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgc2hvcnQgZGVzY3JpcHRpb24gb3Igbm90ZSBhYm91dCBhIHBlcnNvbi4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0icGVyc29uYmx1cmIiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jbGFzcyIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwZXJzb25ibHVyYi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwZXJzb25ibHVyYi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwZXJzb25ibHVyYi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBlcnNvbmJsdXJiLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwZXJzb25ibHVyYi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHBlcnNvbmJsdXJiLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmxvY2txdW90ZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBxdW90YXRpb24gc2V0IG9mZiBmcm9tIHRoZSBtYWluIHRleHQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImJsb2NrcXVvdGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJpbmZvcm1hbC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmxvY2tpbmZvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImF0dHJpYnV0aW9uIi8+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbXBvbmVudC5taXgiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmxvY2txdW90ZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBibG9ja3F1b3RlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJsb2NrcXVvdGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJibG9ja3F1b3RlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBibG9ja3F1b3RlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYmxvY2txdW90ZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImF0dHJpYnV0aW9uLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgc291cmNlIG9mIGEgYmxvY2sgcXVvdGUgb3IgZXBpZ3JhcGguIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImF0dHJpYnV0aW9uIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXR0cmlidXRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYXR0cmlidXRpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXR0cmlidXRpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhdHRyaWJ1dGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYXR0cmlidXRpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhdHRyaWJ1dGlvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJyaWRnZWhlYWQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgZnJlZS1mbG9hdGluZyBoZWFkaW5nLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJicmlkZ2VoZWFkIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRpdGxlLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJyaWRnZWhlYWQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYnJpZGdlaGVhZC5lbGVtZW50IC0tPgogIDwhLS0KICAgIFJlbmRlcmFzOiBJbmRpY2F0ZXMgdGhlIGZvcm1hdCBpbiB3aGljaCB0aGUgQnJpZGdlSGVhZAogICAgc2hvdWxkIGFwcGVhcgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJicmlkZ2VoZWFkLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZW5kZXJhcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im90aGVyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3QxIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3QyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3QzIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3Q0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3Q1Ii8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJicmlkZ2VoZWFkLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBicmlkZ2VoZWFkLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYnJpZGdlaGVhZC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlbWFyay5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSByZW1hcmsgKG9yIGNvbW1lbnQpIGludGVuZGVkIGZvciBwcmVzZW50YXRpb24gaW4gYSBkcmFmdCBtYW51c2NyaXB0LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZW1hcmsiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZW1hcmsuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmVtYXJrLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlbWFyay5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlbWFyay5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmVtYXJrLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVtYXJrLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZXBpZ3JhcGgucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgc2hvcnQgaW5zY3JpcHRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiBhIGRvY3VtZW50IG9yIGNvbXBvbmVudC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZXBpZ3JhcGgiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImF0dHJpYnV0aW9uIi8+CiAgICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ibGl0ZXJhbGxheW91dCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlcGlncmFwaC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBlcGlncmFwaC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlcGlncmFwaC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVwaWdyYXBoLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBlcGlncmFwaC5hdHRsaXN0IC0tPgogIDwhLS0gQXR0cmlidXRpb24gKGRlZmluZWQgYWJvdmUpIC0tPgogIDwhLS0gZW5kIG9mIGVwaWdyYXBoLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZm9vdG5vdGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgZm9vdG5vdGUuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImZvb3Rub3RlIiBzdWJzdGl0dXRpb25Hcm91cD0iZ2VuLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZm9vdG5vdGUubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZvb3Rub3RlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGZvb3Rub3RlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZvb3Rub3RlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmb290bm90ZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZm9vdG5vdGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBmb290bm90ZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImhpZ2hsaWdodHMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgc3VtbWFyeSBvZiB0aGUgbWFpbiBwb2ludHMgb2YgdGhlIGRpc2N1c3NlZCBjb21wb25lbnQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImhpZ2hsaWdodHMiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iaGlnaGxpZ2h0cy5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaGlnaGxpZ2h0cy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBoaWdobGlnaHRzLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImhpZ2hsaWdodHMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJoaWdobGlnaHRzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBoaWdobGlnaHRzLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaGlnaGxpZ2h0cy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZvcm1hbHBhcmEucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgcGFyYWdyYXBoIHdpdGggYSB0aXRsZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZm9ybWFscGFyYSIgc3Vic3RpdHV0aW9uR3JvdXA9InBhcmEuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0aXRsZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmR4dGVybS5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icGFyYSIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmb3JtYWxwYXJhLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGZvcm1hbHBhcmEuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZm9ybWFscGFyYS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZvcm1hbHBhcmEucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGZvcm1hbHBhcmEuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBmb3JtYWxwYXJhLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGFyYS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBwYXJhZ3JhcGguIC0tPgogIDx4czplbGVtZW50IG5hbWU9InBhcmEiIHN1YnN0aXR1dGlvbkdyb3VwPSJwYXJhLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICAgIDx4czpncm91cCByZWY9InBhcmEubWl4Ii8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYXJhLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHBhcmEuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGFyYS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhcmEucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHBhcmEuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwYXJhLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2ltcGFyYS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBwYXJhZ3JhcGggdGhhdCBjb250YWlucyBvbmx5IHRleHQgYW5kIGlubGluZSBtYXJrdXAsIG5vIGJsb2NrIGVsZW1lbnRzLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJzaW1wYXJhIiBzdWJzdGl0dXRpb25Hcm91cD0icGFyYS5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNpbXBhcmEuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2ltcGFyYS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzaW1wYXJhLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2ltcGFyYS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2ltcGFyYS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNpbXBhcmEubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhZG1vbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBub3RlIG9mIGNhdXRpb24uIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImNhdXRpb24iIHN1YnN0aXR1dGlvbkdyb3VwPSJhZG1vbi5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iYWRtb24ubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNhdXRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY2F1dGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjYXV0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWRtb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNhdXRpb24uYXR0bGlzdCAtLT4KICA8IS0tIGRvYzpBbiBhZG1vbml0aW9uIHNldCBvZmYgZnJvbSB0aGUgdGV4dC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW1wb3J0YW50IiBzdWJzdGl0dXRpb25Hcm91cD0iYWRtb24uY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlIi8+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImFkbW9uLm1peCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbXBvcnRhbnQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW1wb3J0YW50LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImltcG9ydGFudC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFkbW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpbXBvcnRhbnQuYXR0bGlzdCAtLT4KICA8IS0tIGRvYzpBIG1lc3NhZ2Ugc2V0IG9mZiBmcm9tIHRoZSB0ZXh0LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJub3RlIiBzdWJzdGl0dXRpb25Hcm91cD0iYWRtb24uY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRpdGxlIi8+CiAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImFkbW9uLm1peCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJub3RlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG5vdGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibm90ZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFkbW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBub3RlLmF0dGxpc3QgLS0+CiAgPCEtLSBkb2M6QSBzdWdnZXN0aW9uIHRvIHRoZSB1c2VyLCBzZXQgb2ZmIGZyb20gdGhlIHRleHQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InRpcCIgc3Vic3RpdHV0aW9uR3JvdXA9ImFkbW9uLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0aXRsZSIvPgogICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJhZG1vbi5taXgiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGlwLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRpcC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0aXAuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhZG1vbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdGlwLmF0dGxpc3QgLS0+CiAgPCEtLSBkb2M6QW4gYWRtb25pdGlvbiBzZXQgb2ZmIGZyb20gdGhlIHRleHQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9Indhcm5pbmciIHN1YnN0aXR1dGlvbkdyb3VwPSJhZG1vbi5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iYWRtb24ubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Indhcm5pbmcuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygd2FybmluZy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ3YXJuaW5nLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWRtb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHdhcm5pbmcuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhZG1vbi5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gTGlzdHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEdsb3NzTGlzdCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3NzbGlzdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSB3cmFwcGVyIGZvciBhIHNldCBvZiBHbG9zc0VudHJ5cy4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZ2xvc3NsaXN0IiBzdWJzdGl0dXRpb25Hcm91cD0ibGlzdC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmxvY2tpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Imdsb3NzZW50cnkiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3NsaXN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGdsb3NzbGlzdC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJnbG9zc2xpc3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJnbG9zc2xpc3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGdsb3NzbGlzdC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGdsb3NzbGlzdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3NzZW50cnkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkFuIGVudHJ5IGluIGEgR2xvc3Nhcnkgb3IgR2xvc3NMaXN0LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJnbG9zc2VudHJ5Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZ2xvc3N0ZXJtIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImFjcm9ueW0iLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYWJicmV2Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InJldmhpc3RvcnkiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJnbG9zc3NlZSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZ2xvc3NkZWYiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3NlbnRyeS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBnbG9zc2VudHJ5LmVsZW1lbnQgLS0+CiAgPCEtLQogICAgU29ydEFzOiBTdHJpbmcgYnkgd2hpY2ggdGhlIEdsb3NzRW50cnkgaXMgdG8gYmUgc29ydGVkCiAgICAoYWxwaGFiZXRpemVkKSBpbiBsaWV1IG9mIGl0cyBwcm9wZXIgY29udGVudAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJnbG9zc2VudHJ5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzb3J0YXMiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdsb3NzZW50cnkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGdsb3NzZW50cnkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBnbG9zc2VudHJ5Lm1vZHVsZSAtLT4KICA8IS0tIEdsb3NzVGVybSAoZGVmaW5lZCBpbiB0aGUgSW5saW5lcyBzZWN0aW9uLCBiZWxvdykgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3NzZGVmLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIGRlZmluaXRpb24gaW4gYSBHbG9zc0VudHJ5LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJnbG9zc2RlZiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZ2xvc3NkZWYubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJnbG9zc3NlZWFsc28iLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3NkZWYuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZ2xvc3NkZWYuZWxlbWVudCAtLT4KICA8IS0tIFN1YmplY3Q6IExpc3Qgb2Ygc3ViamVjdHM7IGtleXdvcmRzIGZvciB0aGUgZGVmaW5pdGlvbiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ2xvc3NkZWYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InN1YmplY3QiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdsb3NzZGVmLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBnbG9zc2RlZi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGdsb3NzZGVmLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ2xvc3NzZWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgY3Jvc3MtcmVmZXJlbmNlIGZyb20gb25lIEdsb3NzRW50cnkgdG8gYW5vdGhlci4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZ2xvc3NzZWUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJnbG9zc3NlZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBnbG9zc3NlZS5lbGVtZW50IC0tPgogIDwhLS0KICAgIE90aGVyVGVybTogUmVmZXJlbmNlIHRvIHRoZSBHbG9zc0VudHJ5IHdob3NlIEdsb3NzVGVybQogICAgc2hvdWxkIGJlIGRpc3BsYXllZCBhdCB0aGUgcG9pbnQgb2YgdGhlIEdsb3NzU2VlCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3Nzc2VlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvdGhlcnRlcm0iIHR5cGU9InhzOklEUkVGIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJnbG9zc3NlZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZ2xvc3NzZWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBnbG9zc3NlZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3Nzc2VlYWxzby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBjcm9zcy1yZWZlcmVuY2UgZnJvbSBvbmUgR2xvc3NFbnRyeSB0byBhbm90aGVyLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJnbG9zc3NlZWFsc28iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJnbG9zc3NlZWFsc28uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZ2xvc3NzZWVhbHNvLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgT3RoZXJUZXJtOiBSZWZlcmVuY2UgdG8gdGhlIEdsb3NzRW50cnkgd2hvc2UgR2xvc3NUZXJtCiAgICBzaG91bGQgYmUgZGlzcGxheWVkIGF0IHRoZSBwb2ludCBvZiB0aGUgR2xvc3NTZWVBbHNvCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3Nzc2VlYWxzby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib3RoZXJ0ZXJtIiB0eXBlPSJ4czpJRFJFRiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3NzZWVhbHNvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBnbG9zc3NlZWFsc28uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBnbG9zc3NlZWFsc28ubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIGdsb3NzZW50cnkuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSBJdGVtaXplZExpc3QgYW5kIE9yZGVyZWRMaXN0IC4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpdGVtaXplZGxpc3Qucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgbGlzdCBpbiB3aGljaCBlYWNoIGVudHJ5IGlzIG1hcmtlZCB3aXRoIGEgYnVsbGV0IG9yIG90aGVyIGRpbmdiYXQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9Iml0ZW1pemVkbGlzdCIgc3Vic3RpdHV0aW9uR3JvdXA9Imxpc3QuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0iZm9ybWFsb2JqZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJsaXN0cHJlYW1ibGUubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibGlzdGl0ZW0iLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaXRlbWl6ZWRsaXN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGl0ZW1pemVkbGlzdC5lbGVtZW50IC0tPgogIDwhLS0KICAgIFNwYWNpbmc6IFdoZXRoZXIgdGhlIHZlcnRpY2FsIHNwYWNlIGluIHRoZSBsaXN0IHNob3VsZCBiZQogICAgY29tcHJlc3NlZAogIC0tPgogIDwhLS0KICAgIE1hcms6IEtleXdvcmQsIGUuZy4sIGJ1bGxldCwgZGFzaCwgY2hlY2tib3gsIG5vbmU7CiAgICBsaXN0IG9mIGtleXdvcmRzIGFuZCBkZWZhdWx0cyBhcmUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaXRlbWl6ZWRsaXN0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzcGFjaW5nIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibm9ybWFsIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNvbXBhY3QiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1hcmsuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpdGVtaXplZGxpc3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGl0ZW1pemVkbGlzdC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGl0ZW1pemVkbGlzdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9yZGVyZWRsaXN0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIGxpc3QgaW4gd2hpY2ggZWFjaCBlbnRyeSBpcyBtYXJrZWQgd2l0aCBhIHNlcXVlbnRpYWxseSBpbmNyZW1lbnRlZCBsYWJlbC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ib3JkZXJlZGxpc3QiIHN1YnN0aXR1dGlvbkdyb3VwPSJsaXN0LmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiByZWY9ImZvcm1hbG9iamVjdC50aXRsZS5jb250ZW50Ii8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibGlzdHByZWFtYmxlLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Imxpc3RpdGVtIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9yZGVyZWRsaXN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG9yZGVyZWRsaXN0LmVsZW1lbnQgLS0+CiAgPCEtLQogICAgTnVtZXJhdGlvbjogU3R5bGUgb2YgTGlzdEl0ZW0gbnVtYmVyZWQ7IGRlZmF1bHQgaXMgZXhwZWN0ZWQKICAgIHRvIGJlIEFyYWJpYwogIC0tPgogIDwhLS0KICAgIEluaGVyaXROdW06IFNwZWNpZmllcyBmb3IgYSBuZXN0ZWQgbGlzdCB0aGF0IHRoZSBudW1iZXJpbmcKICAgIG9mIExpc3RJdGVtcyBzaG91bGQgaW5jbHVkZSB0aGUgbnVtYmVyIG9mIHRoZSBpdGVtCiAgICB3aXRoaW4gd2hpY2ggdGhleSBhcmUgbmVzdGVkIChlLmcuLCAxYSBhbmQgMWIgd2l0aGluIDEsCiAgICByYXRoZXIgdGhhbiBhIGFuZCBiKQogIC0tPgogIDwhLS0KICAgIENvbnRpbnVhdGlvbjogV2hlcmUgbGlzdCBudW1iZXJpbmcgYmVnaW5zIGFmcmVzaCAoUmVzdGFydHMsCiAgICB0aGUgZGVmYXVsdCkgb3IgY29udGludWVzIHRoYXQgb2YgdGhlIGltbWVkaWF0ZWx5IHByZWNlZGluZwogICAgbGlzdCAoQ29udGludWVzKQogIC0tPgogIDwhLS0KICAgIFNwYWNpbmc6IFdoZXRoZXIgdGhlIHZlcnRpY2FsIHNwYWNlIGluIHRoZSBsaXN0IHNob3VsZCBiZQogICAgY29tcHJlc3NlZAogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvcmRlcmVkbGlzdC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibnVtZXJhdGlvbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImFyYWJpYyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ1cHBlcmFscGhhIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imxvd2VyYWxwaGEiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idXBwZXJyb21hbiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsb3dlcnJvbWFuIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImluaGVyaXRudW0iIGRlZmF1bHQ9Imlnbm9yZSI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImluaGVyaXQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaWdub3JlIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbnRpbnVhdGlvbiIgZGVmYXVsdD0icmVzdGFydHMiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjb250aW51ZXMiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVzdGFydHMiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3BhY2luZyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5vcm1hbCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjb21wYWN0Ii8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvcmRlcmVkbGlzdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygb3JkZXJlZGxpc3QuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBvcmRlcmVkbGlzdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imxpc3RpdGVtLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHdyYXBwZXIgZm9yIHRoZSBlbGVtZW50cyBvZiBhIGxpc3QgaXRlbS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibGlzdGl0ZW0iPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaXN0aXRlbS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBsaXN0aXRlbS5lbGVtZW50IC0tPgogIDwhLS0KICAgIE92ZXJyaWRlOiBJbmRpY2F0ZXMgdGhlIG1hcmsgdG8gYmUgdXNlZCBmb3IgdGhpcyBMaXN0SXRlbQogICAgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBtYXJrIG9yIHRoZSBtYXJrIHNwZWNpZmllZCBieQogICAgdGhlIE1hcmsgYXR0cmlidXRlIG9uIHRoZSBlbmNsb3NpbmcgSXRlbWl6ZWRMaXN0CiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imxpc3RpdGVtLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvdmVycmlkZSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlzdGl0ZW0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGxpc3RpdGVtLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbGlzdGl0ZW0ubW9kdWxlIC0tPgogIDwhLS0gU2VnbWVudGVkTGlzdCAuLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VnbWVudGVkbGlzdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBzZWdtZW50ZWQgbGlzdCwgYSBsaXN0IG9mIHNldHMgb2YgZWxlbWVudHMuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InNlZ21lbnRlZGxpc3QiIHN1YnN0aXR1dGlvbkdyb3VwPSJsaXN0LmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0iZm9ybWFsb2JqZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWd0aXRsZSIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNlZ2xpc3RpdGVtIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlZ21lbnRlZGxpc3QuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VnbWVudGVkbGlzdC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWdtZW50ZWRsaXN0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VnbWVudGVkbGlzdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VnbWVudGVkbGlzdC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNlZ21lbnRlZGxpc3QubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWd0aXRsZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIHRpdGxlIG9mIGFuIGVsZW1lbnQgb2YgYSBsaXN0IGl0ZW0gaW4gYSBzZWdtZW50ZWQgbGlzdC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2VndGl0bGUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idGl0bGUuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VndGl0bGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VndGl0bGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VndGl0bGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWd0aXRsZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VndGl0bGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzZWd0aXRsZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlZ2xpc3RpdGVtLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIGxpc3QgaXRlbSBpbiBhIHNlZ21lbnRlZCBsaXN0LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWdsaXN0aXRlbSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzZWciLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VnbGlzdGl0ZW0uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VnbGlzdGl0ZW0uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VnbGlzdGl0ZW0uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWdsaXN0aXRlbS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VnbGlzdGl0ZW0uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzZWdsaXN0aXRlbS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlZy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QW4gZWxlbWVudCBvZiBhIGxpc3QgaXRlbSBpbiBhIHNlZ21lbnRlZCBsaXN0LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJzZWciPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWcuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2VnLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlZy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlZy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VnLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2VnLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBzZWdtZW50ZWRsaXN0LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gU2ltcGxlTGlzdCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2ltcGxlbGlzdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QW4gdW5kZWNvcmF0ZWQgbGlzdCBvZiBzaW5nbGUgd29yZHMgb3Igc2hvcnQgcGhyYXNlcy4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2ltcGxlbGlzdCIgc3Vic3RpdHV0aW9uR3JvdXA9Imxpc3QuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibWVtYmVyIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNpbXBsZWxpc3QuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2ltcGxlbGlzdC5lbGVtZW50IC0tPgogIDwhLS0gQ29sdW1uczogVGhlIG51bWJlciBvZiBjb2x1bW5zIHRoZSBhcnJheSBzaG91bGQgY29udGFpbiAtLT4KICA8IS0tCiAgICBUeXBlOiBIb3cgdGhlIE1lbWJlcnMgb2YgdGhlIFNpbXBsZUxpc3Qgc2hvdWxkIGJlCiAgICBmb3JtYXR0ZWQ6IElubGluZSAobWVtYmVycyBzZXBhcmF0ZWQgd2l0aCBjb21tYXMgZXRjLgogICAgaW5saW5lKSwgVmVydCAodG9wIHRvIGJvdHRvbSBpbiBuIENvbHVtbnMpLCBvciBIb3JpeiAoaW4KICAgIHRoZSBkaXJlY3Rpb24gb2YgdGV4dCBmbG93KSBpbiBuIENvbHVtbnMuICBJZiBDb2x1bW4KICAgIGlzIDEgb3IgaW1wbGllZCwgVHlwZT1WZXJ0IGFuZCBUeXBlPUhvcml6IGdpdmUgdGhlIHNhbWUKICAgIHJlc3VsdHMuCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNpbXBsZWxpc3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbHVtbnMiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idHlwZSIgZGVmYXVsdD0idmVydCI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImlubGluZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ2ZXJ0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imhvcml6Ii8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzaW1wbGVsaXN0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzaW1wbGVsaXN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc2ltcGxlbGlzdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1lbWJlci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QW4gZWxlbWVudCBvZiBhIHNpbXBsZSBsaXN0LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJtZW1iZXIiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtZW1iZXIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbWVtYmVyLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1lbWJlci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1lbWJlci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbWVtYmVyLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbWVtYmVyLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBzaW1wbGVsaXN0LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gVmFyaWFibGVMaXN0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idmFyaWFibGVsaXN0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIGxpc3QgaW4gd2hpY2ggZWFjaCBlbnRyeSBpcyBjb21wb3NlZCBvZiBhIHNldCBvZiBvbmUgb3IgbW9yZSB0ZXJtcyBhbmQgYW4gYXNzb2NpYXRlZCBkZXNjcmlwdGlvbi4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idmFyaWFibGVsaXN0IiBzdWJzdGl0dXRpb25Hcm91cD0ibGlzdC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmxvY2tpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Imxpc3RwcmVhbWJsZS5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ2YXJsaXN0ZW50cnkiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idmFyaWFibGVsaXN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHZhcmlhYmxlbGlzdC5lbGVtZW50IC0tPgogIDwhLS0KICAgIFRlcm1MZW5ndGg6IExlbmd0aCBiZXlvbmQgd2hpY2ggdGhlIHByZXNlbnRhdGlvbiBlbmdpbmUKICAgIG1heSBjb25zaWRlciB0aGUgVGVybSB0b28gbG9uZyBhbmQgc2VsZWN0IGFuIGFsdGVybmF0ZQogICAgcHJlc2VudGF0aW9uIG9mIHRoZSBUZXJtIGFuZCwgb3IsIGl0cyBhc3NvY2lhdGVkIExpc3RJdGVtLgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ2YXJpYWJsZWxpc3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InRlcm1sZW5ndGgiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3BhY2luZyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5vcm1hbCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjb21wYWN0Ii8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2YXJpYWJsZWxpc3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHZhcmlhYmxlbGlzdC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHZhcmlhYmxlbGlzdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InZhcmxpc3RlbnRyeS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSB3cmFwcGVyIGZvciBhIHNldCBvZiB0ZXJtcyBhbmQgdGhlIGFzc29jaWF0ZWQgZGVzY3JpcHRpb24gaW4gYSB2YXJpYWJsZSBsaXN0LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJ2YXJsaXN0ZW50cnkiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idGVybSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGlzdGl0ZW0iLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idmFybGlzdGVudHJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHZhcmxpc3RlbnRyeS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ2YXJsaXN0ZW50cnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2YXJsaXN0ZW50cnkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHZhcmxpc3RlbnRyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHZhcmxpc3RlbnRyeS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRlcm0ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSB3b3JkIG9yIHBocmFzZSBiZWluZyBkZWZpbmVkIG9yIGRlc2NyaWJlZCBpbiBhIHZhcmlhYmxlIGxpc3QuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InRlcm0iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0ZXJtLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRlcm0uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGVybS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRlcm0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRlcm0uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0ZXJtLm1vZHVsZSAtLT4KICA8IS0tIExpc3RJdGVtIChkZWZpbmVkIGFib3ZlKSAtLT4KICA8IS0tIGVuZCBvZiB2YXJpYWJsZWxpc3QuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSBDYWxsb3V0TGlzdCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjYWxsb3V0bGlzdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBsaXN0IG9mIENhbGxvdXRzLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJjYWxsb3V0bGlzdCIgc3Vic3RpdHV0aW9uR3JvdXA9Imxpc3QuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNhbGxvdXQiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2FsbG91dGxpc3QuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY2FsbG91dGxpc3QuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2FsbG91dGxpc3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjYWxsb3V0bGlzdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY2FsbG91dGxpc3QuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjYWxsb3V0bGlzdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNhbGxvdXQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgJmxkcXVvO2NhbGxlZCBvdXQmcmRxdW87IGRlc2NyaXB0aW9uIG9mIGEgbWFya2VkIEFyZWEuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImNhbGxvdXQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjYWxsb3V0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNhbGxvdXQuZWxlbWVudCAtLT4KICA8IS0tCiAgICBBcmVhUmVmczogSURzIG9mIG9uZSBvciBtb3JlIEFyZWFzIG9yIEFyZWFTZXRzIGRlc2NyaWJlZAogICAgYnkgdGhpcyBDYWxsb3V0CiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNhbGxvdXQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFyZWFyZWZzIiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4czpJRFJFRlMiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNhbGxvdXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNhbGxvdXQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjYWxsb3V0Lm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBjYWxsb3V0bGlzdC5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBPYmplY3RzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gRXhhbXBsZXMgZXRjLiAuLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZXhhbXBsZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBmb3JtYWwgZXhhbXBsZSwgd2l0aCBhIHRpdGxlLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJleGFtcGxlIiBzdWJzdGl0dXRpb25Hcm91cD0iZm9ybWFsLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJleGFtcGxlLm1peCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJleGFtcGxlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGV4YW1wbGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZXhhbXBsZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZmxvYXRzdHlsZSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ3aWR0aC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImV4YW1wbGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGV4YW1wbGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBleGFtcGxlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5mb3JtYWxleGFtcGxlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIGRpc3BsYXllZCBleGFtcGxlIHdpdGhvdXQgYSB0aXRsZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW5mb3JtYWxleGFtcGxlIiBzdWJzdGl0dXRpb25Hcm91cD0iaW5mb3JtYWwuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJleGFtcGxlLm1peCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmZvcm1hbGV4YW1wbGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW5mb3JtYWxleGFtcGxlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImluZm9ybWFsZXhhbXBsZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZmxvYXRzdHlsZSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0id2lkdGguYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmZvcm1hbGV4YW1wbGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGluZm9ybWFsZXhhbXBsZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGluZm9ybWFsZXhhbXBsZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByb2dyYW1saXN0aW5nY28ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgcHJvZ3JhbSBsaXN0aW5nIHdpdGggYXNzb2NpYXRlZCBhcmVhcyB1c2VkIGluIGNhbGxvdXRzLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJwcm9ncmFtbGlzdGluZ2NvIiBzdWJzdGl0dXRpb25Hcm91cD0ibGluZXNwZWNpZmljLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYXJlYXNwZWMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InByb2dyYW1saXN0aW5nIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjYWxsb3V0bGlzdCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcm9ncmFtbGlzdGluZ2NvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHByb2dyYW1saXN0aW5nY28uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJvZ3JhbWxpc3Rpbmdjby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByb2dyYW1saXN0aW5nY28ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHByb2dyYW1saXN0aW5nY28uYXR0bGlzdCAtLT4KICA8IS0tIENhbGxvdXRMaXN0IChkZWZpbmVkIGFib3ZlIGluIExpc3RzKSAtLT4KICA8IS0tIGVuZCBvZiBpbmZvcm1hbGV4YW1wbGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcmVhc3BlYy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBjb2xsZWN0aW9uIG9mIHJlZ2lvbnMgaW4gYSBncmFwaGljIG9yIGNvZGUgZXhhbXBsZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXJlYXNwZWMiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFyZWEiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFyZWFzZXQiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFyZWFzcGVjLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFyZWFzcGVjLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgVW5pdHM6IGdsb2JhbCB1bml0IG9mIG1lYXN1cmUgaW4gd2hpY2ggY29vcmRpbmF0ZXMgaW4KICAgIHRoaXMgc3BlYyBhcmUgZXhwcmVzc2VkOgogICAgCiAgICAtIENBTFNQYWlyICJ4MSx5MSB4Mix5MiI6IGxvd2VyLWxlZnQgYW5kIHVwcGVyLXJpZ2h0CiAgICBjb29yZGluYXRlcyBpbiBhIHJlY3RhbmdsZSBkZXNjcmliaW5nIHJlcHJvIGFyZWEgaW4gd2hpY2gKICAgIGdyYXBoaWMgaXMgcGxhY2VkLCB3aGVyZSBYIGFuZCBZIGRpbWVuc2lvbnMgYXJlIGVhY2ggc29tZQogICAgbnVtYmVyIDAuLjEwMDAwICh0YWtlbiBmcm9tIENBTFMgZ3JhcGhpYyBhdHRyaWJ1dGVzKQogICAgCiAgICAtIExpbmVDb2x1bW4gImxpbmUgY29sdW1uIjogbGluZSBudW1iZXIgYW5kIGNvbHVtbiBudW1iZXIKICAgIGF0IHdoaWNoIHRvIHN0YXJ0IGNhbGxvdXQgdGV4dCBpbiAibGluZXNwZWNpZmljIiBjb250ZW50CiAgICAKICAgIC0gTGluZVJhbmdlICJzdGFydGxpbmUgZW5kbGluZSI6IHdob2xlIGxpbmVzIGZyb20gc3RhcnRsaW5lCiAgICB0byBlbmRsaW5lIGluICJsaW5lc3BlY2lmaWMiIGNvbnRlbnQKICAgIAogICAgLSBMaW5lQ29sdW1uUGFpciAibGluZTEgY29sMSBsaW5lMiBjb2wyIjogc3RhcnRpbmcgYW5kIGVuZGluZwogICAgcG9pbnRzIG9mIGFyZWEgaW4gImxpbmVzcGVjaWZpYyIgY29udGVudCB0aGF0IHN0YXJ0cyBhdAogICAgZmlyc3QgcG9zaXRpb24gYW5kIGVuZHMgYXQgc2Vjb25kIHBvc2l0aW9uIChpbmNsdWRpbmcgdGhlCiAgICBiZWdpbm5pbmdzIG9mIGFueSBpbnRlcnZlbmluZyBsaW5lcykKICAgIAogICAgLSBPdGhlcjogZGlyZWN0aXZlIHRvIGxvb2sgYXQgdmFsdWUgb2YgT3RoZXJVbml0cyBhdHRyaWJ1dGUKICAgIHRvIGdldCBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBrZXl3b3JkCiAgICAKICAgIFRoZSBkZWZhdWx0IGlzIGltcGxlbWVudGF0aW9uLXNwZWNpZmljOyB1c3VhbGx5IGRlcGVuZGVudCBvbgogICAgdGhlIHBhcmVudCBlbGVtZW50IChHcmFwaGljQ08gZ2V0cyBDQUxTUGFpciwgUHJvZ3JhbUxpc3RpbmdDTwogICAgYW5kIFNjcmVlbkNPIGdldCBMaW5lQ29sdW1uKQogIC0tPgogIDwhLS0gT3RoZXJVbml0czogVXNlci1kZWZpbmVkIHVuaXRzIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcmVhc3BlYy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idW5pdHMiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjYWxzcGFpciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsaW5lY29sdW1uIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxpbmVyYW5nZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsaW5lY29sdW1ucGFpciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvdGhlciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvdGhlcnVuaXRzIiB0eXBlPSJ4czpOTVRPS0VOIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhcmVhc3BlYy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYXJlYXNwZWMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhcmVhc3BlYy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFyZWEucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgcmVnaW9uIGRlZmluZWQgZm9yIGEgQ2FsbG91dCBpbiBhIGdyYXBoaWMgb3IgY29kZSBleGFtcGxlLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJhcmVhIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXJlYS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBhcmVhLmVsZW1lbnQgLS0+CiAgPCEtLSBidWcgbnVtYmVyL3N5bWJvbCBvdmVycmlkZSBvciBpbml0aWFsaXphdGlvbiAtLT4KICA8IS0tIHRvIGFueSByZWxhdGVkIGluZm9ybWF0aW9uIC0tPgogIDwhLS0KICAgIFVuaXRzOiB1bml0IG9mIG1lYXN1cmUgaW4gd2hpY2ggY29vcmRpbmF0ZXMgaW4gdGhpcwogICAgYXJlYSBhcmUgZXhwcmVzc2VkOyBpbmhlcml0cyBmcm9tIEFyZWFTZXQgYW5kIEFyZWFTcGVjCiAgLS0+CiAgPCEtLSBPdGhlclVuaXRzOiBVc2VyLWRlZmluZWQgdW5pdHMgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFyZWEuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmtlbmRzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1bml0cyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNhbHNwYWlyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxpbmVjb2x1bW4iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGluZXJhbmdlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxpbmVjb2x1bW5wYWlyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im90aGVyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im90aGVydW5pdHMiIHR5cGU9InhzOk5NVE9LRU4iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29vcmRzIiB1c2U9InJlcXVpcmVkIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpZHJlcS5jb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhcmVhLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhcmVhLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYXJlYS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFyZWFzZXQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgc2V0IG9mIHJlbGF0ZWQgYXJlYXMgaW4gYSBncmFwaGljIG9yIGNvZGUgZXhhbXBsZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYXJlYXNldCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJhcmVhIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFyZWFzZXQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYXJlYXNldC5lbGVtZW50IC0tPgogIDwhLS0gYnVnIG51bWJlci9zeW1ib2wgb3ZlcnJpZGUgb3IgaW5pdGlhbGl6YXRpb24gLS0+CiAgPCEtLQogICAgVW5pdHM6IHVuaXQgb2YgbWVhc3VyZSBpbiB3aGljaCBjb29yZGluYXRlcyBpbiB0aGlzCiAgICBhcmVhIGFyZSBleHByZXNzZWQ7IGluaGVyaXRzIGZyb20gQXJlYVNwZWMKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXJlYXNldC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1bml0cyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNhbHNwYWlyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxpbmVjb2x1bW4iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGluZXJhbmdlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxpbmVjb2x1bW5wYWlyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im90aGVyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im90aGVydW5pdHMiIHR5cGU9InhzOk5NVE9LRU4iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29vcmRzIiB1c2U9InJlcXVpcmVkIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpZHJlcS5jb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhcmVhc2V0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhcmVhc2V0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYXJlYXNldC5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgYXJlYXNwZWMuY29udGVudC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByb2dyYW1saXN0aW5nLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIGxpdGVyYWwgbGlzdGluZyBvZiBhbGwgb3IgcGFydCBvZiBhIHByb2dyYW0uIC0tPgogIDx4czplbGVtZW50IG5hbWU9InByb2dyYW1saXN0aW5nIiBzdWJzdGl0dXRpb25Hcm91cD0ibGluZXNwZWNpZmljLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY28iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvcmVmIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lYW5ub3RhdGlvbiIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0idGV4dG9iamVjdCIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJvZ3JhbWxpc3RpbmcuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcHJvZ3JhbWxpc3RpbmcuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJvZ3JhbWxpc3RpbmcuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ3aWR0aC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmVzcGVjaWZpYy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByb2dyYW1saXN0aW5nLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwcm9ncmFtbGlzdGluZy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHByb2dyYW1saXN0aW5nLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGl0ZXJhbGxheW91dC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBibG9jayBvZiB0ZXh0IGluIHdoaWNoIGxpbmUgYnJlYWtzIGFuZCB3aGl0ZSBzcGFjZSBhcmUgdG8gYmUgcmVwcm9kdWNlZCBmYWl0aGZ1bGx5LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJsaXRlcmFsbGF5b3V0IiBzdWJzdGl0dXRpb25Hcm91cD0ibGluZXNwZWNpZmljLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY28iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvcmVmIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0ZXh0b2JqZWN0Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5lYW5ub3RhdGlvbiIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGl0ZXJhbGxheW91dC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBsaXRlcmFsbGF5b3V0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxpdGVyYWxsYXlvdXQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ3aWR0aC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmVzcGVjaWZpYy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIGRlZmF1bHQ9Im5vcm1hbCI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im1vbm9zcGFjZWQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibm9ybWFsIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaXRlcmFsbGF5b3V0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBsaXRlcmFsbGF5b3V0LmF0dGxpc3QgLS0+CiAgPCEtLSBMaW5lQW5ub3RhdGlvbiAoZGVmaW5lZCBpbiB0aGUgSW5saW5lcyBzZWN0aW9uLCBiZWxvdykgLS0+CiAgPCEtLSBlbmQgb2YgbGl0ZXJhbGxheW91dC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNjcmVlbmNvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHNjcmVlbiB3aXRoIGFzc29jaWF0ZWQgYXJlYXMgdXNlZCBpbiBjYWxsb3V0cy4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2NyZWVuY28iIHN1YnN0aXR1dGlvbkdyb3VwPSJsaW5lc3BlY2lmaWMuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcmVhc3BlYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ic2NyZWVuIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjYWxsb3V0bGlzdCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzY3JlZW5jby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzY3JlZW5jby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzY3JlZW5jby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNjcmVlbmNvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzY3JlZW5jby5hdHRsaXN0IC0tPgogIDwhLS0gQXJlYVNwZWMgKGRlZmluZWQgYWJvdmUpIC0tPgogIDwhLS0gQ2FsbG91dExpc3QgKGRlZmluZWQgYWJvdmUgaW4gTGlzdHMpIC0tPgogIDwhLS0gZW5kIG9mIHNjcmVlbmNvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2NyZWVuLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUZXh0IHRoYXQgYSB1c2VyIHNlZXMgb3IgbWlnaHQgc2VlIG9uIGEgY29tcHV0ZXIgc2NyZWVuLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJzY3JlZW4iIHN1YnN0aXR1dGlvbkdyb3VwPSJsaW5lc3BlY2lmaWMuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjbyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY29yZWYiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRleHRvYmplY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVhbm5vdGF0aW9uIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzY3JlZW4uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2NyZWVuLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNjcmVlbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9IndpZHRoLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGluZXNwZWNpZmljLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2NyZWVuLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzY3JlZW4uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzY3JlZW4ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzY3JlZW5zaG90LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHJlcHJlc2VudGF0aW9uIG9mIHdoYXQgdGhlIHVzZXIgc2VlcyBvciBtaWdodCBzZWUgb24gYSBjb21wdXRlciBzY3JlZW4uIC0tPgogIDx4czplbGVtZW50IG5hbWU9InNjcmVlbnNob3QiIHN1YnN0aXR1dGlvbkdyb3VwPSJsaW5lc3BlY2lmaWMuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InNjcmVlbmluZm8iLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJncmFwaGljIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImdyYXBoaWNjbyIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtZWRpYW9iamVjdCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtZWRpYW9iamVjdGNvIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNjcmVlbnNob3QuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2NyZWVuc2hvdC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzY3JlZW5zaG90LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2NyZWVuc2hvdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2NyZWVuc2hvdC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNjcmVlbnNob3QubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzY3JlZW5pbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpJbmZvcm1hdGlvbiBhYm91dCBob3cgYSBzY3JlZW4gc2hvdCB3YXMgcHJvZHVjZWQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InNjcmVlbmluZm8iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzY3JlZW5pbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNjcmVlbmluZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2NyZWVuaW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNjcmVlbmluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNjcmVlbmluZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzY3JlZW5pbmZvLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBzY3JlZW5zaG90LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gRmlndXJlcyBldGMuIC4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZmlndXJlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIGZvcm1hbCBmaWd1cmUsIGdlbmVyYWxseSBhbiBpbGx1c3RyYXRpb24sIHdpdGggYSB0aXRsZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZmlndXJlIiBzdWJzdGl0dXRpb25Hcm91cD0iZm9ybWFsLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCIvPgogICAgICAgIDx4czpjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmdyb3VwIHJlZj0iZmlndXJlLm1peCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rLmNoYXIuY2xhc3MiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZmlndXJlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGZpZ3VyZS5lbGVtZW50IC0tPgogIDwhLS0KICAgIEZsb2F0OiBXaGV0aGVyIHRoZSBGaWd1cmUgaXMgc3VwcG9zZWQgdG8gYmUgcmVuZGVyZWQKICAgIHdoZXJlIGNvbnZlbmllbnQgKHllcyAoMSkgdmFsdWUpIG9yIGF0IHRoZSBwbGFjZSBpdCBvY2N1cnMKICAgIGluIHRoZSB0ZXh0IChubyAoMCkgdmFsdWUsIHRoZSBkZWZhdWx0KQogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmaWd1cmUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZsb2F0IiBkZWZhdWx0PSIwIiB0eXBlPSJ5ZXNvcm5vLmF0dHZhbHMiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZmxvYXRzdHlsZSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwZ3dpZGUiIHR5cGU9Inllc29ybm8uYXR0dmFscyIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmaWd1cmUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGZpZ3VyZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGZpZ3VyZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImluZm9ybWFsZmlndXJlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHVudGl0bGVkIGZpZ3VyZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW5mb3JtYWxmaWd1cmUiIHN1YnN0aXR1dGlvbkdyb3VwPSJpbmZvcm1hbC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmxvY2tpbmZvIi8+CiAgICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6Z3JvdXAgcmVmPSJmaWd1cmUubWl4Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmsuY2hhci5jbGFzcyIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmZvcm1hbGZpZ3VyZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBpbmZvcm1hbGZpZ3VyZS5lbGVtZW50IC0tPgogIDwhLS0KICAgIEZsb2F0OiBXaGV0aGVyIHRoZSBGaWd1cmUgaXMgc3VwcG9zZWQgdG8gYmUgcmVuZGVyZWQKICAgIHdoZXJlIGNvbnZlbmllbnQgKHllcyAoMSkgdmFsdWUpIG9yIGF0IHRoZSBwbGFjZSBpdCBvY2N1cnMKICAgIGluIHRoZSB0ZXh0IChubyAoMCkgdmFsdWUsIHRoZSBkZWZhdWx0KQogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmZvcm1hbGZpZ3VyZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZmxvYXQiIGRlZmF1bHQ9IjAiIHR5cGU9Inllc29ybm8uYXR0dmFscyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmbG9hdHN0eWxlIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InBnd2lkZSIgdHlwZT0ieWVzb3Juby5hdHR2YWxzIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImluZm9ybWFsZmlndXJlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpbmZvcm1hbGZpZ3VyZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGluZm9ybWFsZmlndXJlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ3JhcGhpY2NvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIGdyYXBoaWMgdGhhdCBjb250YWlucyBjYWxsb3V0IGFyZWFzLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJncmFwaGljY28iIHN1YnN0aXR1dGlvbkdyb3VwPSJpbmZvcm1hbC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFyZWFzcGVjIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJncmFwaGljIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjYWxsb3V0bGlzdCIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJncmFwaGljY28uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZ3JhcGhpY2NvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImdyYXBoaWNjby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImdyYXBoaWNjby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZ3JhcGhpY2NvLmF0dGxpc3QgLS0+CiAgPCEtLSBBcmVhU3BlYyAoZGVmaW5lZCBhYm92ZSBpbiBFeGFtcGxlcykgLS0+CiAgPCEtLSBDYWxsb3V0TGlzdCAoZGVmaW5lZCBhYm92ZSBpbiBMaXN0cykgLS0+CiAgPCEtLSBlbmQgb2YgZ3JhcGhpY2NvLm1vZHVsZSAtLT4KICA8IS0tCiAgICBHcmFwaGljYWwgZGF0YSBjYW4gYmUgdGhlIGNvbnRlbnQgb2YgR3JhcGhpYywgb3IgeW91IGNhbiByZWZlcmVuY2UKICAgIGFuIGV4dGVybmFsIGZpbGUgZWl0aGVyIGFzIGFuIGVudGl0eSAoRW50aXRyZWYpIG9yIGEgZmlsZW5hbWUKICAgIChGaWxlcmVmKS4KICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ3JhcGhpYy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBkaXNwbGF5ZWQgZ3JhcGhpY2FsIG9iamVjdCAobm90IGFuIGlubGluZSkuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImdyYXBoaWMiIHN1YnN0aXR1dGlvbkdyb3VwPSJpbmZvcm1hbC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImdyYXBoaWMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZ3JhcGhpYy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJncmFwaGljLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ3JhcGhpY3MuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJncmFwaGljLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBncmFwaGljLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZ3JhcGhpYy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImlubGluZWdyYXBoaWMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkFuIG9iamVjdCBjb250YWluaW5nIG9yIHBvaW50aW5nIHRvIGdyYXBoaWNhbCBkYXRhIHRoYXQgd2lsbCBiZSByZW5kZXJlZCBpbmxpbmUuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImlubGluZWdyYXBoaWMiIHN1YnN0aXR1dGlvbkdyb3VwPSJpbmxpbmVvYmouY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImlubGluZWdyYXBoaWMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW5saW5lZ3JhcGhpYy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmxpbmVncmFwaGljLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ3JhcGhpY3MuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmxpbmVncmFwaGljLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpbmxpbmVncmFwaGljLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW5saW5lZ3JhcGhpYy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1lZGlhb2JqZWN0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIGRpc3BsYXllZCBtZWRpYSBvYmplY3QgKHZpZGVvLCBhdWRpbywgaW1hZ2UsIGV0Yy4pLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJtZWRpYW9iamVjdCIgc3Vic3RpdHV0aW9uR3JvdXA9ImluZm9ybWFsLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJvYmplY3RpbmZvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibWVkaWFvYmplY3QubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImNhcHRpb24iLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWVkaWFvYmplY3QuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbWVkaWFvYmplY3QuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibWVkaWFvYmplY3QuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtZWRpYW9iamVjdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbWVkaWFvYmplY3QuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtZWRpYW9iamVjdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImlubGluZW1lZGlhb2JqZWN0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBbiBpbmxpbmUgbWVkaWEgb2JqZWN0ICh2aWRlbywgYXVkaW8sIGltYWdlLCBhbmQgc28gb24pLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbmxpbmVtZWRpYW9iamVjdCIgc3Vic3RpdHV0aW9uR3JvdXA9ImlubGluZW9iai5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJvYmplY3RpbmZvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibWVkaWFvYmplY3QubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImlubGluZW1lZGlhb2JqZWN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGlubGluZW1lZGlhb2JqZWN0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImlubGluZW1lZGlhb2JqZWN0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5saW5lbWVkaWFvYmplY3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGlubGluZW1lZGlhb2JqZWN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW5saW5lbWVkaWFvYmplY3QubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ2aWRlb29iamVjdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSB3cmFwcGVyIGZvciB2aWRlbyBkYXRhIGFuZCBpdHMgYXNzb2NpYXRlZCBtZXRhLWluZm9ybWF0aW9uLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJ2aWRlb29iamVjdCIgc3Vic3RpdHV0aW9uR3JvdXA9Im1lZGlhb2JqZWN0Lm1peCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ib2JqZWN0aW5mbyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0idmlkZW9kYXRhIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InZpZGVvb2JqZWN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHZpZGVvb2JqZWN0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InZpZGVvb2JqZWN0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idmlkZW9vYmplY3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHZpZGVvb2JqZWN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdmlkZW9vYmplY3QubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhdWRpb29iamVjdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSB3cmFwcGVyIGZvciBhdWRpbyBkYXRhIGFuZCBpdHMgYXNzb2NpYXRlZCBtZXRhLWluZm9ybWF0aW9uLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJhdWRpb29iamVjdCIgc3Vic3RpdHV0aW9uR3JvdXA9Im1lZGlhb2JqZWN0Lm1peCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ib2JqZWN0aW5mbyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYXVkaW9kYXRhIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImF1ZGlvb2JqZWN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGF1ZGlvb2JqZWN0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImF1ZGlvb2JqZWN0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXVkaW9vYmplY3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGF1ZGlvb2JqZWN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYXVkaW9vYmplY3QubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbWFnZW9iamVjdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSB3cmFwcGVyIGZvciBpbWFnZSBkYXRhIGFuZCBpdHMgYXNzb2NpYXRlZCBtZXRhLWluZm9ybWF0aW9uLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbWFnZW9iamVjdCIgc3Vic3RpdHV0aW9uR3JvdXA9Im1lZGlhb2JqZWN0Lm1peCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ib2JqZWN0aW5mbyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW1hZ2VkYXRhIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImltYWdlb2JqZWN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGltYWdlb2JqZWN0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImltYWdlb2JqZWN0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW1hZ2VvYmplY3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGltYWdlb2JqZWN0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW1hZ2VvYmplY3QubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0ZXh0b2JqZWN0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHdyYXBwZXIgZm9yIGEgdGV4dCBkZXNjcmlwdGlvbiBvZiBhbiBvYmplY3QgYW5kIGl0cyBhc3NvY2lhdGVkIG1ldGEtaW5mb3JtYXRpb24uIC0tPgogIDx4czplbGVtZW50IG5hbWU9InRleHRvYmplY3QiIHN1YnN0aXR1dGlvbkdyb3VwPSJtZWRpYW9iamVjdC5taXgiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Im9iamVjdGluZm8iLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwaHJhc2UiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0idGV4dGRhdGEiLz4KICAgICAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0ZXh0b2JqZWN0Lm1peCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0ZXh0b2JqZWN0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRleHRvYmplY3QuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGV4dG9iamVjdC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRleHRvYmplY3Qucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRleHRvYmplY3QuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0ZXh0b2JqZWN0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib2JqZWN0aW5mby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6TWV0YS1pbmZvcm1hdGlvbiBmb3IgYW4gb2JqZWN0LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJvYmplY3RpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImluZm8uY2xhc3MiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib2JqZWN0aW5mby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBvYmplY3RpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9iamVjdGluZm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvYmplY3RpbmZvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBvYmplY3RpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygb2JqZWN0aW5mby5tb2R1bGUgLS0+CiAgPCEtLQogICAgRW50aXR5UmVmOiBOYW1lIG9mIGFuIGV4dGVybmFsIGVudGl0eSBjb250YWluaW5nIHRoZSBjb250ZW50CiAgICBvZiB0aGUgb2JqZWN0IGRhdGEKICAtLT4KICA8IS0tCiAgICBGaWxlUmVmOiBGaWxlbmFtZSwgcXVhbGlmaWVkIGJ5IGEgcGF0aG5hbWUgaWYgZGVzaXJlZCwKICAgIGRlc2lnbmF0aW5nIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnQgb2YgdGhlIG9iamVjdCBkYXRhCiAgLS0+CiAgPCEtLSBGb3JtYXQ6IE5vdGF0aW9uIG9mIHRoZSBlbGVtZW50IGNvbnRlbnQsIGlmIGFueSAtLT4KICA8IS0tIFNyY0NyZWRpdDogSW5mb3JtYXRpb24gYWJvdXQgdGhlIHNvdXJjZSBvZiB0aGUgaW1hZ2UgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9iamVjdGRhdGEuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZW50aXR5cmVmIiB0eXBlPSJ4czpFTlRJVFkiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZmlsZXJlZiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmb3JtYXQiIHR5cGU9Im5vdGF0aW9uLmNsYXNzIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNyY2NyZWRpdCIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InZpZGVvZGF0YS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6UG9pbnRlciB0byBleHRlcm5hbCB2aWRlbyBkYXRhLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJ2aWRlb2RhdGEiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2aWRlb2RhdGEuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdmlkZW9kYXRhLmVsZW1lbnQgLS0+CiAgPCEtLSBXaWR0aDogU2FtZSBhcyBDQUxTIHJlcHJvd2lkIChkZXNpcmVkIHdpZHRoKSAtLT4KICA8IS0tIERlcHRoOiBTYW1lIGFzIENBTFMgcmVwcm9kZXAgKGRlc2lyZWQgZGVwdGgpIC0tPgogIDwhLS0KICAgIEFsaWduOiBTYW1lIGFzIENBTFMgaHBsYWNlIHdpdGggJ25vbmUnIHJlbW92ZWQ7ICNJTVBMSUVEIG1lYW5zCiAgICBhcHBsaWNhdGlvbi1zcGVjaWZpYwogIC0tPgogIDwhLS0gU2NhbGU6IENvbmZsYXRpb24gb2YgQ0FMUyBoc2NhbGUgYW5kIHZzY2FsZSAtLT4KICA8IS0tIFNjYWxlZml0OiBTYW1lIGFzIENBTFMgc2NhbGVmaXQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InZpZGVvZGF0YS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0id2lkdGgiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29udGVudHdpZHRoIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImRlcHRoIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbnRlbnRkZXB0aCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxlZnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmlnaHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2VudGVyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbGlnbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRvcCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJtaWRkbGUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYm90dG9tIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNjYWxlIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNjYWxlZml0IiB0eXBlPSJ5ZXNvcm5vLmF0dHZhbHMiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9iamVjdGRhdGEuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2aWRlb2RhdGEucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHZpZGVvZGF0YS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHZpZGVvZGF0YS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImF1ZGlvZGF0YS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6UG9pbnRlciB0byBleHRlcm5hbCBhdWRpbyBkYXRhLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJhdWRpb2RhdGEiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhdWRpb2RhdGEuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYXVkaW9kYXRhLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImF1ZGlvZGF0YS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9iamVjdGRhdGEuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhdWRpb2RhdGEucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGF1ZGlvZGF0YS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGF1ZGlvZGF0YS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImltYWdlZGF0YS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6UG9pbnRlciB0byBleHRlcm5hbCBpbWFnZSBkYXRhLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbWFnZWRhdGEiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbWFnZWRhdGEuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW1hZ2VkYXRhLmVsZW1lbnQgLS0+CiAgPCEtLSBXaWR0aDogU2FtZSBhcyBDQUxTIHJlcHJvd2lkIChkZXNpcmVkIHdpZHRoKSAtLT4KICA8IS0tIERlcHRoOiBTYW1lIGFzIENBTFMgcmVwcm9kZXAgKGRlc2lyZWQgZGVwdGgpIC0tPgogIDwhLS0KICAgIEFsaWduOiBTYW1lIGFzIENBTFMgaHBsYWNlIHdpdGggJ25vbmUnIHJlbW92ZWQ7ICNJTVBMSUVEIG1lYW5zCiAgICBhcHBsaWNhdGlvbi1zcGVjaWZpYwogIC0tPgogIDwhLS0gU2NhbGU6IENvbmZsYXRpb24gb2YgQ0FMUyBoc2NhbGUgYW5kIHZzY2FsZSAtLT4KICA8IS0tIFNjYWxlZml0OiBTYW1lIGFzIENBTFMgc2NhbGVmaXQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImltYWdlZGF0YS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0id2lkdGgiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29udGVudHdpZHRoIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImRlcHRoIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbnRlbnRkZXB0aCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxlZnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmlnaHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2VudGVyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbGlnbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRvcCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJtaWRkbGUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYm90dG9tIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNjYWxlIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNjYWxlZml0IiB0eXBlPSJ5ZXNvcm5vLmF0dHZhbHMiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9iamVjdGRhdGEuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbWFnZWRhdGEucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGltYWdlZGF0YS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGltYWdlZGF0YS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRleHRkYXRhLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpQb2ludGVyIHRvIGV4dGVybmFsIHRleHQgZGF0YS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idGV4dGRhdGEiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0ZXh0ZGF0YS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0ZXh0ZGF0YS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0ZXh0ZGF0YS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZW5jb2RpbmciLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9iamVjdGRhdGEuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0ZXh0ZGF0YS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdGV4dGRhdGEuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0ZXh0ZGF0YS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1lZGlhb2JqZWN0Y28ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgbWVkaWEgb2JqZWN0IHRoYXQgY29udGFpbnMgY2FsbG91dHMuIC0tPgogIDx4czplbGVtZW50IG5hbWU9Im1lZGlhb2JqZWN0Y28iIHN1YnN0aXR1dGlvbkdyb3VwPSJpbmZvcm1hbC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0ib2JqZWN0aW5mbyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW1hZ2VvYmplY3RjbyIvPgogICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImltYWdlb2JqZWN0Y28iLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0idGV4dG9iamVjdCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtZWRpYW9iamVjdGNvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1lZGlhb2JqZWN0Y28uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibWVkaWFvYmplY3Rjby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1lZGlhb2JqZWN0Y28ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1lZGlhb2JqZWN0Y28uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtZWRpYW9iamVjdGNvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW1hZ2VvYmplY3Rjby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSB3cmFwcGVyIGZvciBhbiBpbWFnZSBvYmplY3Qgd2l0aCBjYWxsb3V0cy4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW1hZ2VvYmplY3RjbyIgc3Vic3RpdHV0aW9uR3JvdXA9Im1lZGlhb2JqZWN0Lm1peCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFyZWFzcGVjIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbWFnZW9iamVjdCIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY2FsbG91dGxpc3QiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW1hZ2VvYmplY3Rjby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBpbWFnZW9iamVjdGNvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImltYWdlb2JqZWN0Y28uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbWFnZW9iamVjdGNvLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpbWFnZW9iamVjdGNvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW1hZ2VvYmplY3Rjby5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgbWVkaWFvYmplY3QuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSBFcXVhdGlvbnMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gVGhpcyBQRSBwcm92aWRlcyBhIG1lY2hhbmlzbSBmb3IgcmVwbGFjaW5nIGVxdWF0aW9uIGNvbnRlbnQsIC0tPgogIDwhLS0gcGVyaGFwcyBhZGRpbmcgYSBuZXcgb3IgZGlmZmVyZW50IG1vZGVsIChlLmcuLCBNYXRoTUwpIC0tPgogIDx4czpncm91cCBuYW1lPSJlcXVhdGlvbi5jb250ZW50Ij4KICAgIDx4czpzZXF1ZW5jZT4KICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImFsdCIvPgogICAgICA8eHM6Y2hvaWNlPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImdyYXBoaWMiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtZWRpYW9iamVjdCIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1hdGhwaHJhc2UiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICA8L3hzOnNlcXVlbmNlPgogIDwveHM6Z3JvdXA+CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImlubGluZWVxdWF0aW9uLmNvbnRlbnQiPgogICAgPHhzOnNlcXVlbmNlPgogICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYWx0Ii8+CiAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZ3JhcGhpYyIvPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImlubGluZW1lZGlhb2JqZWN0Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibWF0aHBocmFzZSIvPgogICAgICA8L3hzOmNob2ljZT4KICAgIDwveHM6c2VxdWVuY2U+CiAgPC94czpjb21wbGV4VHlwZT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZXF1YXRpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgZGlzcGxheWVkIG1hdGhlbWF0aWNhbCBlcXVhdGlvbi4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZXF1YXRpb24iIHN1YnN0aXR1dGlvbkdyb3VwPSJmb3JtYWwuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImJsb2NraW5mbyIvPgogICAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIHJlZj0iZm9ybWFsb2JqZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbmZvcm1hbGVxdWF0aW9uIi8+CiAgICAgICAgICA8eHM6Z3JvdXAgcmVmPSJlcXVhdGlvbi5jb250ZW50Ii8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVxdWF0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGVxdWF0aW9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVxdWF0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmbG9hdHN0eWxlIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVxdWF0aW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBlcXVhdGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGVxdWF0aW9uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5mb3JtYWxlcXVhdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBkaXNwbGF5ZWQgbWF0aGVtYXRpY2FsIGVxdWF0aW9uIHdpdGhvdXQgYSB0aXRsZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW5mb3JtYWxlcXVhdGlvbiIgc3Vic3RpdHV0aW9uR3JvdXA9ImluZm9ybWFsLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJlcXVhdGlvbi5jb250ZW50Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImluZm9ybWFsZXF1YXRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW5mb3JtYWxlcXVhdGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmZvcm1hbGVxdWF0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmbG9hdHN0eWxlIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmZvcm1hbGVxdWF0aW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpbmZvcm1hbGVxdWF0aW9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW5mb3JtYWxlcXVhdGlvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImlubGluZWVxdWF0aW9uLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIG1hdGhlbWF0aWNhbCBlcXVhdGlvbiBvciBleHByZXNzaW9uIG9jY3VycmluZyBpbmxpbmUuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImlubGluZWVxdWF0aW9uIiBzdWJzdGl0dXRpb25Hcm91cD0iaW5saW5lb2JqLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Y29tcGxleENvbnRlbnQ+CiAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJpbmxpbmVlcXVhdGlvbi5jb250ZW50Ij4KICAgICAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImlubGluZWVxdWF0aW9uLmF0dGxpc3QiLz4KICAgICAgICA8L3hzOmV4dGVuc2lvbj4KICAgICAgPC94czpjb21wbGV4Q29udGVudD4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGlubGluZWVxdWF0aW9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImlubGluZWVxdWF0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5saW5lZXF1YXRpb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGlubGluZWVxdWF0aW9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW5saW5lZXF1YXRpb24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhbHQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRleHQgcmVwcmVzZW50YXRpb24gZm9yIGEgZ3JhcGhpY2FsIGVsZW1lbnQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImFsdCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhbHQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYWx0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFsdC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFsdC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYWx0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYWx0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibWF0aHBocmFzZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBtYXRoZW1hdGljYWwgcGhyYXNlLCBhbiBleHByZXNzaW9uIHRoYXQgY2FuIGJlIHJlcHJlc2VudGVkIHdpdGggb3JkaW5hcnkgdGV4dCBhbmQgYSBzbWFsbCBhbW91bnQgb2YgbWFya3VwLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJtYXRocGhyYXNlIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdWJzY3JpcHQiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN1cGVyc2NyaXB0Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlbXBoYXNpcyIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWF0aHBocmFzZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtYXRocGhyYXNlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1hdGhwaHJhc2UuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtYXRocGhyYXNlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtYXRocGhyYXNlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbWF0aHBocmFzZS5tb2R1bGUgLS0+CiAgPCEtLSBUYWJsZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gQ2hvb3NlIGEgdGFibGUgbW9kZWwuIENBTFMgb3IgT0FTSVMgWE1MIEV4Y2hhbmdlIC0tPgogIDwhLS0gRG8gd2UgYWxsb3cgdGhlIEhUTUwgdGFibGUgbW9kZWwgYXMgd2VsbD8gLS0+CiAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgPCEtLQogICAgeGh0bWx0YmwubW9kIGRlZmluZXMgSFRNTCB0YWJsZXMgYW5kIHNldHMgcGFyYW1ldGVyCiAgICBlbnRpdGllcyBzbyB0aGF0LCB3aGVuIHRoZSBDQUxTIHRhYmxlIG1vZHVsZSBpcyByZWFkLAogICAgd2UgZW5kIHVwIGFsbG93aW5nIGFueSB0YWJsZSB0byBiZSBDQUxTIG9yIEhUTUwuCiAgICBpLmUuIFRoaXMgaW5jbHVkZSBtdXN0IGNvbWUgZmlyc3QhCiAgLS0+CiAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgPCEtLSBlbmQgb2YgYWxsb3cuaHRtbC50YWJsZXMgLS0+CiAgPCEtLSBBZGQgbGFiZWwgYW5kIHJvbGUgYXR0cmlidXRlcyB0byB0YWJsZSBhbmQgaW5mb3JtYWx0YWJsZSAtLT4KICA8IS0tCiAgICBBZGQgY29tbW9uIGF0dHJpYnV0ZXMgdG8gVGFibGUsIFRHcm91cCwgVEJvZHksIFRIZWFkLCBURm9vdCwgUm93LAogICAgRW50cnlUYmwsIGFuZCBFbnRyeSAoYW5kIEluZm9ybWFsVGFibGUgZWxlbWVudCkuCiAgLS0+CiAgPCEtLSBDb250ZW50IG1vZGVsIGZvciBUYWJsZS4gLS0+CiAgPCEtLSBBbGxvdyBlaXRoZXIgb2JqZWN0cyBvciBpbmxpbmVzOyBiZXdhcmUgb2YgUkVzIGJldHdlZW4gZWxlbWVudHMuIC0tPgogIDwhLS0gUmVmZXJlbmNlIENBTFMgVGFibGUgTW9kZWwgLS0+CiAgPCEtLSBlbmQgb2YgdGFibGUubW9kdWxlIC0tPgogIDwhLS0KICAgIE5vdGUgdGhhdCBJbmZvcm1hbFRhYmxlIGlzIGRlcGVuZGVudCBvbiBzb21lIG9mIHRoZSBlbnRpdHkKICAgIGRlY2xhcmF0aW9ucyB0aGF0IGN1c3RvbWl6ZSBUYWJsZS4KICAtLT4KICA8IS0tIHRoZSBmb2xsb3dpbmcgZW50aXR5IG1heSBoYXZlIGJlZW4gZGVjbGFyZWQgYnkgdGhlIFhIVE1MIHRhYmxlIG1vZHVsZSAtLT4KICA8IS0tIGRvYzpBIHRhYmxlIHdpdGhvdXQgYSB0aXRsZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW5mb3JtYWx0YWJsZSIgc3Vic3RpdHV0aW9uR3JvdXA9ImluZm9ybWFsLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJpbmZvcm1hbC50YmwudGFibGUubWRsIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImluZm9ybWFsdGFibGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW5mb3JtYWx0YWJsZS5lbGVtZW50IC0tPgogIDwhLS0KICAgIEZyYW1lLCBDb2xzZXAsIGFuZCBSb3dzZXAgbXVzdCBiZSByZXBlYXRlZCBiZWNhdXNlCiAgICB0aGV5IGFyZSBub3QgaW4gZW50aXRpZXMgaW4gdGhlIHRhYmxlIG1vZHVsZS4KICAtLT4KICA8IS0tCiAgICBpbmNsdWRlcyBUYWJTdHlsZSwgVG9DZW50cnksIFNob3J0RW50cnksCiAgICBPcmllbnQsIFBnV2lkZQogIC0tPgogIDwhLS0gaW5jbHVkZXMgTGFiZWwgLS0+CiAgPCEtLSBpbmNsdWRlcyBjb21tb24gYXR0cmlidXRlcyAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5mb3JtYWx0YWJsZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZnJhbWUiIHR5cGU9InRibC5mcmFtZS5hdHR2YWwiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29sc2VwIiB0eXBlPSJ5ZXNvcm5vLmF0dHZhbHMiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icm93c2VwIiB0eXBlPSJ5ZXNvcm5vLmF0dHZhbHMiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi50YWJsZS5hdHRyaWJzIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0YmwudGFibGUuYXR0Ii8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpbmZvcm1hbHRhYmxlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW5mb3JtYWx0YWJsZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNhcHRpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgY2FwdGlvbi4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY2FwdGlvbiI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0ZXh0b2JqZWN0Lm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjYXB0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNhcHRpb24uZWxlbWVudCAtLT4KICA8IS0tIGF0dHJzIGNvbWVzIGZyb20gSFRNTCB0YWJsZXMgLi4uIC0tPgogIDwhLS0gY29tbW9uLmF0dHJpYiwgYnV0IHdpdGhvdXQgSUQgYmVjYXVzZSBJRCBpcyBpbiBhdHRycyAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2FwdGlvbi5hdHRsaXN0LmNvbnRlbnQiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2FwdGlvbi5yb2xlLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXR0cnMiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYWxpZ24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0b3AiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYm90dG9tIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxlZnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmlnaHQiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjYXB0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2FwdGlvbi5hdHRsaXN0LmNvbnRlbnQiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNhcHRpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjYXB0aW9uLm1vZHVsZSAtLT4KICA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBTeW5vcHNlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gU3lub3BzaXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3lub3BzaXMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgZ2VuZXJhbC1wdXJwb3NlIGVsZW1lbnQgZm9yIHJlcHJlc2VudGluZyB0aGUgc3ludGF4IG9mIGNvbW1hbmRzIG9yIGZ1bmN0aW9ucy4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3lub3BzaXMiIHN1YnN0aXR1dGlvbkdyb3VwPSJzeW5vcC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImdyYXBoaWMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im1lZGlhb2JqZWN0Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjbyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY29yZWYiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRleHRvYmplY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVhbm5vdGF0aW9uIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzeW5vcHNpcy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzeW5vcHNpcy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzeW5vcHNpcy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGluZXNwZWNpZmljLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3lub3BzaXMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN5bm9wc2lzLmF0dGxpc3QgLS0+CiAgPCEtLSBMaW5lQW5ub3RhdGlvbiAoZGVmaW5lZCBpbiB0aGUgSW5saW5lcyBzZWN0aW9uLCBiZWxvdykgLS0+CiAgPCEtLSBlbmQgb2Ygc3lub3BzaXMubW9kdWxlIC0tPgogIDwhLS0gQ21kU3lub3BzaXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY21kc3lub3BzaXMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgc3ludGF4IHN1bW1hcnkgZm9yIGEgc29mdHdhcmUgY29tbWFuZC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY21kc3lub3BzaXMiIHN1YnN0aXR1dGlvbkdyb3VwPSJzeW5vcC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iY29tbWFuZCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcmciLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iZ3JvdXAiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ic2JyIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzeW5vcGZyYWdtZW50Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNtZHN5bm9wc2lzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNtZHN5bm9wc2lzLmVsZW1lbnQgLS0+CiAgPCEtLQogICAgU2VwY2hhcjogQ2hhcmFjdGVyIHRoYXQgc2hvdWxkIHNlcGFyYXRlIGNvbW1hbmQgYW5kIGFsbAogICAgdG9wLWxldmVsIGFyZ3VtZW50czsgYWx0ZXJuYXRlIHZhbHVlIG1pZ2h0IGJlIGUuZy4sICZEZWx0YTsKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY21kc3lub3BzaXMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2VwY2hhciIgZGVmYXVsdD0iICIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbWRsZW5ndGgiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNtZHN5bm9wc2lzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjbWRzeW5vcHNpcy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNtZHN5bm9wc2lzLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXJnLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBbiBhcmd1bWVudCBpbiBhIENtZFN5bm9wc2lzLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJhcmciPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFyZyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZ3JvdXAiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im9wdGlvbiIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ic3lub3BmcmFnbWVudHJlZiIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icmVwbGFjZWFibGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InNiciIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXJnLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFyZy5lbGVtZW50IC0tPgogIDwhLS0KICAgIENob2ljZTogV2hldGhlciBBcmcgbXVzdCBiZSBzdXBwbGllZDogT3B0IChvcHRpb25hbCB0bwogICAgc3VwcGx5LCBlLmcuIFthcmddOyB0aGUgZGVmYXVsdCksIFJlcSAocmVxdWlyZWQgdG8gc3VwcGx5LAogICAgZS5nLiB7YXJnfSksIG9yIFBsYWluIChyZXF1aXJlZCB0byBzdXBwbHksIGUuZy4gYXJnKQogIC0tPgogIDwhLS0KICAgIFJlcDogd2hldGhlciBBcmcgaXMgcmVwZWF0YWJsZTogTm9yZXBlYXQgKGUuZy4gYXJnIHdpdGhvdXQKICAgIGVsbGlwc2lzOyB0aGUgZGVmYXVsdCksIG9yIFJlcGVhdCAoZS5nLiBhcmcuLi4pCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFyZy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2hvaWNlIiBkZWZhdWx0PSJvcHQiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvcHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVxIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InBsYWluIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlcCIgZGVmYXVsdD0ibm9yZXBlYXQiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJub3JlcGVhdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZXBlYXQiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFyZy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYXJnLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYXJnLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ3JvdXAucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgZ3JvdXAgb2YgZWxlbWVudHMgaW4gYSBDbWRTeW5vcHNpcy4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZ3JvdXAiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFyZyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZ3JvdXAiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im9wdGlvbiIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ic3lub3BmcmFnbWVudHJlZiIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icmVwbGFjZWFibGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InNiciIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ3JvdXAuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZ3JvdXAuZWxlbWVudCAtLT4KICA8IS0tCiAgICBDaG9pY2U6IFdoZXRoZXIgR3JvdXAgbXVzdCBiZSBzdXBwbGllZDogT3B0IChvcHRpb25hbCB0bwogICAgc3VwcGx5LCBlLmcuICBbZzF8ZzJ8ZzNdOyB0aGUgZGVmYXVsdCksIFJlcSAocmVxdWlyZWQgdG8KICAgIHN1cHBseSwgZS5nLiAge2cxfGcyfGczfSksIFBsYWluIChyZXF1aXJlZCB0byBzdXBwbHksCiAgICBlLmcuICBnMXxnMnxnMyksIE9wdE11bHQgKGNhbiBzdXBwbHkgemVybyBvciBtb3JlLCBlLmcuCiAgICBbW2cxfGcyfGczXV0pLCBvciBSZXFNdWx0IChtdXN0IHN1cHBseSBvbmUgb3IgbW9yZSwgZS5nLgogICAge3tnMXxnMnxnM319KQogIC0tPgogIDwhLS0KICAgIFJlcDogd2hldGhlciBHcm91cCBpcyByZXBlYXRhYmxlOiBOb3JlcGVhdCAoZS5nLiBncm91cAogICAgd2l0aG91dCBlbGxpcHNpczsgdGhlIGRlZmF1bHQpLCBvciBSZXBlYXQgKGUuZy4gZ3JvdXAuLi4pCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdyb3VwLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjaG9pY2UiIGRlZmF1bHQ9Im9wdCI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im9wdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZXEiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icGxhaW4iLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVwIiBkZWZhdWx0PSJub3JlcGVhdCI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5vcmVwZWF0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlcGVhdCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ3JvdXAucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGdyb3VwLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZ3JvdXAubW9kdWxlIC0tPgogIDwhLS0gU3lub3BzaXMgYnJlYWsgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNici5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QW4gZXhwbGljaXQgbGluZSBicmVhayBpbiBhIGNvbW1hbmQgc3lub3BzaXMuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InNiciI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNici5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzYnIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2JyLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2JyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzYnIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzYnIubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzeW5vcGZyYWdtZW50cmVmLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHJlZmVyZW5jZSB0byBhIGZyYWdtZW50IG9mIGEgY29tbWFuZCBzeW5vcHNpcy4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3lub3BmcmFnbWVudHJlZiI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzeW5vcGZyYWdtZW50cmVmLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN5bm9wZnJhZ21lbnRyZWYuZWxlbWVudCAtLT4KICA8IS0tCiAgICB0byBTeW5vcEZyYWdtZW50IG9mIGNvbXBsZXggc3lub3BzaXMKICAgIG1hdGVyaWFsIGZvciBzZXBhcmF0ZSByZWZlcmVuY2luZwogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzeW5vcGZyYWdtZW50cmVmLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlua2VuZHJlcS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN5bm9wZnJhZ21lbnRyZWYucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN5bm9wZnJhZ21lbnRyZWYuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzeW5vcGZyYWdtZW50cmVmLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3lub3BmcmFnbWVudC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBwb3J0aW9uIG9mIGEgQ21kU3lub3BzaXMgYnJva2VuIG91dCBmcm9tIHRoZSBtYWluIGJvZHkgb2YgdGhlIHN5bm9wc2lzLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJzeW5vcGZyYWdtZW50Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhcmciLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Imdyb3VwIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzeW5vcGZyYWdtZW50LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN5bm9wZnJhZ21lbnQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3lub3BmcmFnbWVudC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImlkcmVxLmNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN5bm9wZnJhZ21lbnQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN5bm9wZnJhZ21lbnQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzeW5vcGZyYWdtZW50Lm1vZHVsZSAtLT4KICA8IS0tIENvbW1hbmQgKGRlZmluZWQgaW4gdGhlIElubGluZXMgc2VjdGlvbiwgYmVsb3cpIC0tPgogIDwhLS0gT3B0aW9uIChkZWZpbmVkIGluIHRoZSBJbmxpbmVzIHNlY3Rpb24sIGJlbG93KSAtLT4KICA8IS0tIFJlcGxhY2VhYmxlIChkZWZpbmVkIGluIHRoZSBJbmxpbmVzIHNlY3Rpb24sIGJlbG93KSAtLT4KICA8IS0tIGVuZCBvZiBjbWRzeW5vcHNpcy5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIEZ1bmNTeW5vcHNpcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZ1bmNzeW5vcHNpcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIHN5bnRheCBzdW1tYXJ5IGZvciBhIGZ1bmN0aW9uIGRlZmluaXRpb24uIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImZ1bmNzeW5vcHNpcyIgc3Vic3RpdHV0aW9uR3JvdXA9InN5bm9wLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmdW5jc3lub3BzaXNpbmZvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmdW5jcHJvdG90eXBlIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmdW5jc3lub3BzaXMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZnVuY3N5bm9wc2lzLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZ1bmNzeW5vcHNpcy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZnVuY3N5bm9wc2lzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBmdW5jc3lub3BzaXMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBmdW5jc3lub3BzaXMubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmdW5jc3lub3BzaXNpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpJbmZvcm1hdGlvbiBzdXBwbGVtZW50aW5nIHRoZSBGdW5jRGVmcyBvZiBhIEZ1bmNTeW5vcHNpcy4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZnVuY3N5bm9wc2lzaW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRleHRvYmplY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmVhbm5vdGF0aW9uIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmdW5jc3lub3BzaXNpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGZ1bmNzeW5vcHNpc2luZm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZnVuY3N5bm9wc2lzaW5mby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmVzcGVjaWZpYy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZ1bmNzeW5vcHNpc2luZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGZ1bmNzeW5vcHNpc2luZm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBmdW5jc3lub3BzaXNpbmZvLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZnVuY3Byb3RvdHlwZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIHByb3RvdHlwZSBvZiBhIGZ1bmN0aW9uLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJmdW5jcHJvdG90eXBlIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibW9kaWZpZXIiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImZ1bmNkZWYiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ2b2lkIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InZhcmFyZ3MiLz4KICAgICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYW1kZWYiLz4KICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InZhcmFyZ3MiLz4KICAgICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtb2RpZmllciIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmdW5jcHJvdG90eXBlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGZ1bmNwcm90b3R5cGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZnVuY3Byb3RvdHlwZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZ1bmNwcm90b3R5cGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGZ1bmNwcm90b3R5cGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBmdW5jcHJvdG90eXBlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZnVuY2RlZi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBmdW5jdGlvbiAoc3Vicm91dGluZSkgbmFtZSBhbmQgaXRzIHJldHVybiB0eXBlLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJmdW5jZGVmIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0eXBlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZXBsYWNlYWJsZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZnVuY3Rpb24iLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZ1bmNkZWYuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZnVuY2RlZi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmdW5jZGVmLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZnVuY2RlZi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZnVuY2RlZi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGZ1bmNkZWYubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ2b2lkLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBbiBlbXB0eSBlbGVtZW50IGluIGEgZnVuY3Rpb24gc3lub3BzaXMgaW5kaWNhdGluZyB0aGF0IHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbiB0YWtlcyBubyBhcmd1bWVudHMuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InZvaWQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2b2lkLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHZvaWQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idm9pZC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InZvaWQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHZvaWQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB2b2lkLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idmFyYXJncy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QW4gZW1wdHkgZWxlbWVudCBpbiBhIGZ1bmN0aW9uIHN5bm9wc2lzIGluZGljYXRpbmcgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJ2YXJhcmdzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idmFyYXJncy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB2YXJhcmdzLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InZhcmFyZ3MuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2YXJhcmdzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB2YXJhcmdzLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdmFyYXJncy5tb2R1bGUgLS0+CiAgPCEtLQogICAgUHJvY2Vzc2luZyBhc3N1bWVzIHRoYXQgb25seSBvbmUgUGFyYW1ldGVyIHdpbGwgYXBwZWFyIGluIGEKICAgIFBhcmFtRGVmLCBhbmQgdGhhdCBGdW5jUGFyYW1zIHdpbGwgYmUgdXNlZCBhdCBtb3N0IG9uY2UsIGZvcgogICAgcHJvdmlkaW5nIGluZm9ybWF0aW9uIG9uIHRoZSAiaW5uZXIgcGFyYW1ldGVycyIgZm9yIHBhcmFtZXRlcnMgdGhhdAogICAgYXJlIHBvaW50ZXJzIHRvIGZ1bmN0aW9ucy4KICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGFyYW1kZWYucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkluZm9ybWF0aW9uIGFib3V0IGEgZnVuY3Rpb24gcGFyYW1ldGVyIGluIGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InBhcmFtZGVmIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbml0aWFsaXplciIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0idHlwZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icmVwbGFjZWFibGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmFtZXRlciIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZnVuY3BhcmFtcyIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFyYW1kZWYuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcGFyYW1kZWYuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGFyYW1kZWYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNob2ljZSI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im9wdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZXEiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhcmFtZGVmLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwYXJhbWRlZi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHBhcmFtZGVmLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZnVuY3BhcmFtcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6UGFyYW1ldGVycyBmb3IgYSBmdW5jdGlvbiByZWZlcmVuY2VkIHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVyIGluIGEgc3lub3BzaXMuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImZ1bmNwYXJhbXMiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmdW5jcGFyYW1zLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGZ1bmNwYXJhbXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZnVuY3BhcmFtcy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZ1bmNwYXJhbXMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGZ1bmNwYXJhbXMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBmdW5jcGFyYW1zLm1vZHVsZSAtLT4KICA8IS0tIExpbmVBbm5vdGF0aW9uIChkZWZpbmVkIGluIHRoZSBJbmxpbmVzIHNlY3Rpb24sIGJlbG93KSAtLT4KICA8IS0tIFJlcGxhY2VhYmxlIChkZWZpbmVkIGluIHRoZSBJbmxpbmVzIHNlY3Rpb24sIGJlbG93KSAtLT4KICA8IS0tIEZ1bmN0aW9uIChkZWZpbmVkIGluIHRoZSBJbmxpbmVzIHNlY3Rpb24sIGJlbG93KSAtLT4KICA8IS0tIFBhcmFtZXRlciAoZGVmaW5lZCBpbiB0aGUgSW5saW5lcyBzZWN0aW9uLCBiZWxvdykgLS0+CiAgPCEtLSBlbmQgb2YgZnVuY3N5bm9wc2lzLmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gQ2xhc3NTeW5vcHNpcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNsYXNzc3lub3BzaXMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSBzeW50YXggc3VtbWFyeSBmb3IgYSBjbGFzcyBkZWZpbml0aW9uLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJjbGFzc3N5bm9wc2lzIiBzdWJzdGl0dXRpb25Hcm91cD0ic3lub3AuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im9vY2xhc3MiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ib29pbnRlcmZhY2UiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ib29leGNlcHRpb24iLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjbGFzc3N5bm9wc2lzaW5mbyIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmaWVsZHN5bm9wc2lzIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im1ldGhvZC5zeW5vcC5jbGFzcyIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjbGFzc3N5bm9wc2lzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNsYXNzc3lub3BzaXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2xhc3NzeW5vcHNpcy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGFuZ3VhZ2UiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIGRlZmF1bHQ9ImNsYXNzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2xhc3MiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaW50ZXJmYWNlIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjbGFzc3N5bm9wc2lzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjbGFzc3N5bm9wc2lzLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY2xhc3NzeW5vcHNpcy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNsYXNzc3lub3BzaXNpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpJbmZvcm1hdGlvbiBzdXBwbGVtZW50aW5nIHRoZSBjb250ZW50cyBvZiBhIENsYXNzU3lub3BzaXMuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImNsYXNzc3lub3BzaXNpbmZvIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iY3B0ci5jaGFyLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0idGV4dG9iamVjdCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZWFubm90YXRpb24iLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNsYXNzc3lub3BzaXNpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNsYXNzc3lub3BzaXNpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNsYXNzc3lub3BzaXNpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGluZXNwZWNpZmljLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2xhc3NzeW5vcHNpc2luZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNsYXNzc3lub3BzaXNpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY2xhc3NzeW5vcHNpc2luZm8ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvb2NsYXNzLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIGNsYXNzIGluIGFuIG9iamVjdC1vcmllbnRlZCBwcm9ncmFtbWluZyBsYW5ndWFnZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ib29jbGFzcyIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtb2RpZmllciIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYWNrYWdlIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjbGFzc25hbWUiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib29jbGFzcy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBvb2NsYXNzLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9vY2xhc3MuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvb2NsYXNzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBvb2NsYXNzLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygb29jbGFzcy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9vaW50ZXJmYWNlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBbiBpbnRlcmZhY2UgaW4gYW4gb2JqZWN0LW9yaWVudGVkIHByb2dyYW1taW5nIGxhbmd1YWdlLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJvb2ludGVyZmFjZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJtb2RpZmllciIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwYWNrYWdlIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbnRlcmZhY2VuYW1lIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9vaW50ZXJmYWNlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG9vaW50ZXJmYWNlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9vaW50ZXJmYWNlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib29pbnRlcmZhY2Uucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG9vaW50ZXJmYWNlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygb29pbnRlcmZhY2UubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvb2V4Y2VwdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QW4gZXhjZXB0aW9uIGluIGFuIG9iamVjdC1vcmllbnRlZCBwcm9ncmFtbWluZyBsYW5ndWFnZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ib29leGNlcHRpb24iIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ibW9kaWZpZXIiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0icGFja2FnZSIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iZXhjZXB0aW9ubmFtZSIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvb2V4Y2VwdGlvbi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBvb2V4Y2VwdGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvb2V4Y2VwdGlvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9vZXhjZXB0aW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBvb2V4Y2VwdGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG9vZXhjZXB0aW9uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibW9kaWZpZXIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOk1vZGlmaWVycyBpbiBhIHN5bm9wc2lzLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJtb2RpZmllciI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9kaWZpZXIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbW9kaWZpZXIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibW9kaWZpZXIuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb2RpZmllci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbW9kaWZpZXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtb2RpZmllci5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImludGVyZmFjZW5hbWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSBuYW1lIG9mIGFuIGludGVyZmFjZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW50ZXJmYWNlbmFtZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImludGVyZmFjZW5hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW50ZXJmYWNlbmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbnRlcmZhY2VuYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW50ZXJmYWNlbmFtZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaW50ZXJmYWNlbmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGludGVyZmFjZW5hbWUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJleGNlcHRpb25uYW1lLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgbmFtZSBvZiBhbiBleGNlcHRpb24uIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImV4Y2VwdGlvbm5hbWUiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImV4Y2VwdGlvbm5hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZXhjZXB0aW9ubmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJleGNlcHRpb25uYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZXhjZXB0aW9ubmFtZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZXhjZXB0aW9ubmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGV4Y2VwdGlvbm5hbWUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmaWVsZHN5bm9wc2lzLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgbmFtZSBvZiBhIGZpZWxkIGluIGEgY2xhc3MgZGVmaW5pdGlvbi4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZmllbGRzeW5vcHNpcyIgc3Vic3RpdHV0aW9uR3JvdXA9InN5bm9wLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibW9kaWZpZXIiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idHlwZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0idmFybmFtZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJpbml0aWFsaXplciIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmaWVsZHN5bm9wc2lzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGZpZWxkc3lub3BzaXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZmllbGRzeW5vcHNpcy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGFuZ3VhZ2UiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZpZWxkc3lub3BzaXMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGZpZWxkc3lub3BzaXMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBmaWVsZHN5bm9wc2lzLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5pdGlhbGl6ZXIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSBpbml0aWFsaXplciBmb3IgYSBGaWVsZFN5bm9wc2lzLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJpbml0aWFsaXplciI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW5pdGlhbGl6ZXIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaW5pdGlhbGl6ZXIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5pdGlhbGl6ZXIuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbml0aWFsaXplci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaW5pdGlhbGl6ZXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBpbml0aWFsaXplci5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbnN0cnVjdG9yc3lub3BzaXMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgc3ludGF4IHN1bW1hcnkgZm9yIGEgY29uc3RydWN0b3IuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImNvbnN0cnVjdG9yc3lub3BzaXMiIHN1YnN0aXR1dGlvbkdyb3VwPSJtZXRob2Quc3lub3AuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtb2RpZmllciIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJtZXRob2RuYW1lIi8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1ldGhvZHBhcmFtIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idm9pZCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZXhjZXB0aW9ubmFtZSIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb25zdHJ1Y3RvcnN5bm9wc2lzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvbnN0cnVjdG9yc3lub3BzaXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29uc3RydWN0b3JzeW5vcHNpcy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGFuZ3VhZ2UiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbnN0cnVjdG9yc3lub3BzaXMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvbnN0cnVjdG9yc3lub3BzaXMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb25zdHJ1Y3RvcnN5bm9wc2lzLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZGVzdHJ1Y3RvcnN5bm9wc2lzLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHN5bnRheCBzdW1tYXJ5IGZvciBhIGRlc3RydWN0b3IuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImRlc3RydWN0b3JzeW5vcHNpcyIgc3Vic3RpdHV0aW9uR3JvdXA9Im1ldGhvZC5zeW5vcC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1vZGlmaWVyIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Im1ldGhvZG5hbWUiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibWV0aG9kcGFyYW0iLz4KICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ2b2lkIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJleGNlcHRpb25uYW1lIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImRlc3RydWN0b3JzeW5vcHNpcy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBkZXN0cnVjdG9yc3lub3BzaXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZGVzdHJ1Y3RvcnN5bm9wc2lzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsYW5ndWFnZSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZGVzdHJ1Y3RvcnN5bm9wc2lzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBkZXN0cnVjdG9yc3lub3BzaXMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBkZXN0cnVjdG9yc3lub3BzaXMubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtZXRob2RzeW5vcHNpcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBzeW50YXggc3VtbWFyeSBmb3IgYSBtZXRob2QuIC0tPgogIDx4czplbGVtZW50IG5hbWU9Im1ldGhvZHN5bm9wc2lzIiBzdWJzdGl0dXRpb25Hcm91cD0ibWV0aG9kLnN5bm9wLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibW9kaWZpZXIiLz4KICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InR5cGUiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0idm9pZCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibWV0aG9kbmFtZSIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtZXRob2RwYXJhbSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InZvaWQiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImV4Y2VwdGlvbm5hbWUiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1vZGlmaWVyIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1ldGhvZHN5bm9wc2lzLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1ldGhvZHN5bm9wc2lzLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1ldGhvZHN5bm9wc2lzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsYW5ndWFnZSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWV0aG9kc3lub3BzaXMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1ldGhvZHN5bm9wc2lzLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbWV0aG9kc3lub3BzaXMubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtZXRob2RuYW1lLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgbmFtZSBvZiBhIG1ldGhvZC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibWV0aG9kbmFtZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWV0aG9kbmFtZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtZXRob2RuYW1lLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1ldGhvZG5hbWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtZXRob2RuYW1lLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtZXRob2RuYW1lLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbWV0aG9kbmFtZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1ldGhvZHBhcmFtLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpQYXJhbWV0ZXJzIHRvIGEgbWV0aG9kLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJtZXRob2RwYXJhbSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1vZGlmaWVyIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InR5cGUiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InBhcmFtZXRlciIvPgogICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iaW5pdGlhbGl6ZXIiLz4KICAgICAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImZ1bmNwYXJhbXMiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1vZGlmaWVyIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1ldGhvZHBhcmFtLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1ldGhvZHBhcmFtLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1ldGhvZHBhcmFtLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjaG9pY2UiIGRlZmF1bHQ9InJlcSI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im9wdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZXEiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icGxhaW4iLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVwIiBkZWZhdWx0PSJub3JlcGVhdCI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5vcmVwZWF0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlcGVhdCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWV0aG9kcGFyYW0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1ldGhvZHBhcmFtLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbWV0aG9kcGFyYW0ubW9kdWxlIC0tPgogIDwhLS0gZW5kIG9mIGNsYXNzc3lub3BzaXMuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gRG9jdW1lbnQgaW5mb3JtYXRpb24gZW50aXRpZXMgYW5kIGVsZW1lbnRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tCiAgICBUaGUgZG9jdW1lbnQgaW5mb3JtYXRpb24gZWxlbWVudHMgaW5jbHVkZSBzb21lIGVsZW1lbnRzIHRoYXQgYXJlCiAgICBjdXJyZW50bHkgdXNlZCBvbmx5IGluIHRoZSBkb2N1bWVudCBoaWVyYXJjaHkgbW9kdWxlLiBUaGV5IGFyZQogICAgZGVmaW5lZCBoZXJlIHNvIHRoYXQgdGhleSB3aWxsIGJlIGF2YWlsYWJsZSBmb3IgdXNlIGluIGN1c3RvbWl6ZWQKICAgIGRvY3VtZW50IGhpZXJhcmNoaWVzLgogIC0tPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEFja25vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFja25vLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBY2tub3dsZWRnZW1lbnRzIGluIGFuIEFydGljbGUuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImFja25vIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWNrbm8uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYWNrbm8uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYWNrbm8uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhY2tuby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYWNrbm8uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhY2tuby5tb2R1bGUgLS0+CiAgPCEtLSBBZGRyZXNzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhZGRyZXNzLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHJlYWwtd29ybGQgYWRkcmVzcywgZ2VuZXJhbGx5IGEgcG9zdGFsIGFkZHJlc3MuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImFkZHJlc3MiIHN1YnN0aXR1dGlvbkdyb3VwPSJpbmZvcm1hbC5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icGVyc29ubmFtZSIvPgogICAgICAgIDx4czpncm91cCByZWY9InBlcnNvbi5pZGVudC5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN0cmVldCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icG9iIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwb3N0Y29kZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY2l0eSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ic3RhdGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvdW50cnkiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InBob25lIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJmYXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImVtYWlsIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJvdGhlcmFkZHIiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFkZHJlc3MuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYWRkcmVzcy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhZGRyZXNzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGluZXNwZWNpZmljLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWRkcmVzcy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYWRkcmVzcy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGFkZHJlc3MubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdHJlZXQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgc3RyZWV0IGFkZHJlc3MgaW4gYW4gYWRkcmVzcy4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3RyZWV0Ij4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RyZWV0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN0cmVldC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdHJlZXQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdHJlZXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN0cmVldC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHN0cmVldC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBvYi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBwb3N0IG9mZmljZSBib3ggaW4gYW4gYWRkcmVzcy4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0icG9iIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icG9iLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHBvYi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwb2IuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwb2Iucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHBvYi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHBvYi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBvc3Rjb2RlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHBvc3RhbCBjb2RlIGluIGFuIGFkZHJlc3MuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InBvc3Rjb2RlIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icG9zdGNvZGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcG9zdGNvZGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icG9zdGNvZGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwb3N0Y29kZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcG9zdGNvZGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwb3N0Y29kZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNpdHkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSBuYW1lIG9mIGEgY2l0eSBpbiBhbiBhZGRyZXNzLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJjaXR5Ij4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2l0eS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjaXR5LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNpdHkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjaXR5LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjaXR5LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY2l0eS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN0YXRlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHN0YXRlIG9yIHByb3ZpbmNlIGluIGFuIGFkZHJlc3MuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InN0YXRlIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RhdGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc3RhdGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3RhdGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdGF0ZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc3RhdGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzdGF0ZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvdW50cnkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSBuYW1lIG9mIGEgY291bnRyeS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY291bnRyeSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvdW50cnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY291bnRyeS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb3VudHJ5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY291bnRyeS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY291bnRyeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvdW50cnkubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwaG9uZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSB0ZWxlcGhvbmUgbnVtYmVyLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJwaG9uZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBob25lLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHBob25lLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBob25lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGhvbmUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHBob25lLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcGhvbmUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmYXgucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgZmF4IG51bWJlci4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZmF4Ij4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZmF4LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGZheC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmYXguYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmYXgucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGZheC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGZheC5tb2R1bGUgLS0+CiAgPCEtLSBFbWFpbCAoZGVmaW5lZCBpbiB0aGUgSW5saW5lcyBzZWN0aW9uLCBiZWxvdykgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im90aGVyYWRkci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VW5jYXRlZ29yaXplZCBpbmZvcm1hdGlvbiBpbiBhZGRyZXNzLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJvdGhlcmFkZHIiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvdGhlcmFkZHIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygb3RoZXJhZGRyLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im90aGVyYWRkci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im90aGVyYWRkci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygb3RoZXJhZGRyLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygb3RoZXJhZGRyLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBhZGRyZXNzLmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gQWZmaWxpYXRpb24gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYWZmaWxpYXRpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSBpbnN0aXR1dGlvbmFsIGFmZmlsaWF0aW9uIG9mIGFuIGluZGl2aWR1YWwuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImFmZmlsaWF0aW9uIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJzaG9ydGFmZmlsIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJqb2J0aXRsZSIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJvcmduYW1lIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJvcmdkaXYiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImFkZHJlc3MiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWZmaWxpYXRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYWZmaWxpYXRpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYWZmaWxpYXRpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhZmZpbGlhdGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYWZmaWxpYXRpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhZmZpbGlhdGlvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNob3J0YWZmaWwucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgYnJpZWYgZGVzY3JpcHRpb24gb2YgYW4gYWZmaWxpYXRpb24uIC0tPgogIDx4czplbGVtZW50IG5hbWU9InNob3J0YWZmaWwiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzaG9ydGFmZmlsLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNob3J0YWZmaWwuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2hvcnRhZmZpbC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNob3J0YWZmaWwucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNob3J0YWZmaWwuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzaG9ydGFmZmlsLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iam9idGl0bGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSB0aXRsZSBvZiBhbiBpbmRpdmlkdWFsIGluIGFuIG9yZ2FuaXphdGlvbi4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iam9idGl0bGUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJqb2J0aXRsZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBqb2J0aXRsZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJqb2J0aXRsZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImpvYnRpdGxlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBqb2J0aXRsZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGpvYnRpdGxlLm1vZHVsZSAtLT4KICA8IS0tIE9yZ05hbWUgKGRlZmluZWQgZWxzZXdoZXJlIGluIHRoaXMgc2VjdGlvbikgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9yZ2Rpdi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBkaXZpc2lvbiBvZiBhbiBvcmdhbml6YXRpb24uIC0tPgogIDx4czplbGVtZW50IG5hbWU9Im9yZ2RpdiI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9yZ2Rpdi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBvcmdkaXYuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib3JnZGl2LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib3JnZGl2LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBvcmdkaXYuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBvcmdkaXYubW9kdWxlIC0tPgogIDwhLS0gQWRkcmVzcyAoZGVmaW5lZCBlbHNld2hlcmUgaW4gdGhpcyBzZWN0aW9uKSAtLT4KICA8IS0tIGVuZCBvZiBhZmZpbGlhdGlvbi5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIEFydFBhZ2VOdW1zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFydHBhZ2VudW1zLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgcGFnZSBudW1iZXJzIG9mIGFuIGFydGljbGUgYXMgcHVibGlzaGVkLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJhcnRwYWdlbnVtcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFydHBhZ2VudW1zLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFydHBhZ2VudW1zLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFydHBhZ2VudW1zLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXJ0cGFnZW51bXMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGFydHBhZ2VudW1zLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYXJ0cGFnZW51bXMubW9kdWxlIC0tPgogIDwhLS0gUGVyc29uTmFtZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGVyc29ubmFtZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIHBlcnNvbmFsIG5hbWUgb2YgYW4gaW5kaXZpZHVhbC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0icGVyc29ubmFtZSIgc3Vic3RpdHV0aW9uR3JvdXA9Imdlbi5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJob25vcmlmaWMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImZpcnN0bmFtZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ic3VybmFtZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluZWFnZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ib3RoZXJuYW1lIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwZXJzb25uYW1lLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHBlcnNvbm5hbWUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGVyc29ubmFtZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBlcnNvbm5hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHBlcnNvbm5hbWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwZXJzb25uYW1lLm1vZHVsZSAtLT4KICA8IS0tIEF1dGhvciAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImF1dGhvci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIG5hbWUgb2YgYW4gaW5kaXZpZHVhbCBhdXRob3IuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImF1dGhvciIgc3Vic3RpdHV0aW9uR3JvdXA9ImRvY2luZm8uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwZXJzb25uYW1lIi8+CiAgICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGVyc29uLmlkZW50Lm1peCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InBlcnNvbmJsdXJiIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImVtYWlsIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFkZHJlc3MiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXV0aG9yLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGF1dGhvci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhdXRob3IuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhdXRob3Iucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGF1dGhvci5hdHRsaXN0IC0tPgogIDwhLS0gKHNlZSAiUGVyc29uYWwgaWRlbnRpdHkgZWxlbWVudHMiIGZvciAlcGVyc29uLmlkZW50Lm1peDspIC0tPgogIDwhLS0gZW5kIG9mIGF1dGhvci5tb2R1bGUgLS0+CiAgPCEtLSBBdXRob3JHcm91cCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhdXRob3Jncm91cC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6V3JhcHBlciBmb3IgYXV0aG9yIGluZm9ybWF0aW9uIHdoZW4gYSBkb2N1bWVudCBoYXMgbXVsdGlwbGUgYXV0aG9ycyBvciBjb2xsYWJhcmF0b3JzLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJhdXRob3Jncm91cCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYXV0aG9yIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlZGl0b3IiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvbGxhYiIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY29ycGF1dGhvciIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY29ycGNyZWRpdCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ib3RoZXJjcmVkaXQiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImF1dGhvcmdyb3VwLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGF1dGhvcmdyb3VwLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImF1dGhvcmdyb3VwLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXV0aG9yZ3JvdXAucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGF1dGhvcmdyb3VwLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYXV0aG9yZ3JvdXAubW9kdWxlIC0tPgogIDwhLS0gQXV0aG9yIChkZWZpbmVkIGVsc2V3aGVyZSBpbiB0aGlzIHNlY3Rpb24pIC0tPgogIDwhLS0gRWRpdG9yIChkZWZpbmVkIGVsc2V3aGVyZSBpbiB0aGlzIHNlY3Rpb24pIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb2xsYWIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOklkZW50aWZpZXMgYSBjb2xsYWJvcmF0b3IuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImNvbGxhYiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvbGxhYm5hbWUiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImFmZmlsaWF0aW9uIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbGxhYi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb2xsYWIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29sbGFiLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29sbGFiLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjb2xsYWIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb2xsYWIubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb2xsYWJuYW1lLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgbmFtZSBvZiBhIGNvbGxhYm9yYXRvci4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29sbGFibmFtZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbGxhYm5hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY29sbGFibmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb2xsYWJuYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29sbGFibmFtZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY29sbGFibmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvbGxhYm5hbWUubW9kdWxlIC0tPgogIDwhLS0gQWZmaWxpYXRpb24gKGRlZmluZWQgZWxzZXdoZXJlIGluIHRoaXMgc2VjdGlvbikgLS0+CiAgPCEtLSBlbmQgb2YgY29sbGFiLmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gQ29ycEF1dGhvciAoZGVmaW5lZCBlbHNld2hlcmUgaW4gdGhpcyBzZWN0aW9uKSAtLT4KICA8IS0tIE90aGVyQ3JlZGl0IChkZWZpbmVkIGVsc2V3aGVyZSBpbiB0aGlzIHNlY3Rpb24pIC0tPgogIDwhLS0gZW5kIG9mIGF1dGhvcmdyb3VwLmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gQXV0aG9ySW5pdGlhbHMgLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXV0aG9yaW5pdGlhbHMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSBpbml0aWFscyBvciBvdGhlciBzaG9ydCBpZGVudGlmaWVyIGZvciBhbiBhdXRob3IuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImF1dGhvcmluaXRpYWxzIiBzdWJzdGl0dXRpb25Hcm91cD0iZG9jaW5mby5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXV0aG9yaW5pdGlhbHMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYXV0aG9yaW5pdGlhbHMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYXV0aG9yaW5pdGlhbHMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhdXRob3Jpbml0aWFscy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYXV0aG9yaW5pdGlhbHMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhdXRob3Jpbml0aWFscy5tb2R1bGUgLS0+CiAgPCEtLSBDb25mR3JvdXAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25mZ3JvdXAucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgd3JhcHBlciBmb3IgZG9jdW1lbnQgbWV0YS1pbmZvcm1hdGlvbiBhYm91dCBhIGNvbmZlcmVuY2UuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImNvbmZncm91cCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjb25mZGF0ZXMiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvbmZ0aXRsZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY29uZm51bSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYWRkcmVzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY29uZnNwb25zb3IiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbmZncm91cC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb25mZ3JvdXAuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29uZmdyb3VwLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29uZmdyb3VwLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjb25mZ3JvdXAuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb25mZ3JvdXAubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25mZGF0ZXMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSBkYXRlcyBvZiBhIGNvbmZlcmVuY2UgZm9yIHdoaWNoIGEgZG9jdW1lbnQgd2FzIHdyaXR0ZW4uIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImNvbmZkYXRlcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbmZkYXRlcy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb25mZGF0ZXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29uZmRhdGVzLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29uZmRhdGVzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjb25mZGF0ZXMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb25mZGF0ZXMubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25mdGl0bGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSB0aXRsZSBvZiBhIGNvbmZlcmVuY2UgZm9yIHdoaWNoIGEgZG9jdW1lbnQgd2FzIHdyaXR0ZW4uIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImNvbmZ0aXRsZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbmZ0aXRsZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb25mdGl0bGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29uZnRpdGxlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29uZnRpdGxlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjb25mdGl0bGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb25mdGl0bGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25mbnVtLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBbiBpZGVudGlmaWVyLCBmcmVxdWVudGx5IG51bWVyaWNhbCwgYXNzb2NpYXRlZCB3aXRoIGEgY29uZmVyZW5jZSBmb3Igd2hpY2ggYSBkb2N1bWVudCB3YXMgd3JpdHRlbi4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29uZm51bSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbmZudW0uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY29uZm51bS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25mbnVtLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29uZm51bS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY29uZm51bS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvbmZudW0ubW9kdWxlIC0tPgogIDwhLS0gQWRkcmVzcyAoZGVmaW5lZCBlbHNld2hlcmUgaW4gdGhpcyBzZWN0aW9uKSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29uZnNwb25zb3Iucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSBzcG9uc29yIG9mIGEgY29uZmVyZW5jZSBmb3Igd2hpY2ggYSBkb2N1bWVudCB3YXMgd3JpdHRlbi4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29uZnNwb25zb3IiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb25mc3BvbnNvci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb25mc3BvbnNvci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb25mc3BvbnNvci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbmZzcG9uc29yLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjb25mc3BvbnNvci5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvbmZzcG9uc29yLm1vZHVsZSAtLT4KICA8IS0tIGVuZCBvZiBjb25mZ3JvdXAuY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSBDb250cmFjdE51bSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb250cmFjdG51bS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIGNvbnRyYWN0IG51bWJlciBvZiBhIGRvY3VtZW50LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb250cmFjdG51bSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbnRyYWN0bnVtLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvbnRyYWN0bnVtLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbnRyYWN0bnVtLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29udHJhY3RudW0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvbnRyYWN0bnVtLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29udHJhY3RudW0ubW9kdWxlIC0tPgogIDwhLS0gQ29udHJhY3RTcG9uc29yIC4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29udHJhY3RzcG9uc29yLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgc3BvbnNvciBvZiBhIGNvbnRyYWN0LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb250cmFjdHNwb25zb3IiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb250cmFjdHNwb25zb3IuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY29udHJhY3RzcG9uc29yLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbnRyYWN0c3BvbnNvci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbnRyYWN0c3BvbnNvci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY29udHJhY3RzcG9uc29yLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29udHJhY3RzcG9uc29yLm1vZHVsZSAtLT4KICA8IS0tIENvcHlyaWdodCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvcHlyaWdodC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6Q29weXJpZ2h0IGluZm9ybWF0aW9uIGFib3V0IGEgZG9jdW1lbnQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImNvcHlyaWdodCI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ5ZWFyIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJob2xkZXIiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29weXJpZ2h0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvcHlyaWdodC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb3B5cmlnaHQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb3B5cmlnaHQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvcHlyaWdodC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGNvcHlyaWdodC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InllYXIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSB5ZWFyIG9mIHB1YmxpY2F0aW9uIG9mIGEgZG9jdW1lbnQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InllYXIiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ5ZWFyLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHllYXIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ieWVhci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InllYXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHllYXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB5ZWFyLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaG9sZGVyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgbmFtZSBvZiB0aGUgaW5kaXZpZHVhbCBvciBvcmdhbml6YXRpb24gdGhhdCBob2xkcyBhIGNvcHlyaWdodC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaG9sZGVyIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaG9sZGVyLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGhvbGRlci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJob2xkZXIuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJob2xkZXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGhvbGRlci5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGhvbGRlci5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgY29weXJpZ2h0LmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gQ29ycEF1dGhvciAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29ycGF1dGhvci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBjb3Jwb3JhdGUgYXV0aG9yLCBhcyBvcHBvc2VkIHRvIGFuIGluZGl2aWR1YWwuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImNvcnBhdXRob3IiIHN1YnN0aXR1dGlvbkdyb3VwPSJkb2NpbmZvLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb3JwYXV0aG9yLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvcnBhdXRob3IuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29ycGF1dGhvci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvcnBhdXRob3Iucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvcnBhdXRob3IuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb3JwYXV0aG9yLm1vZHVsZSAtLT4KICA8IS0tIENvcnBDcmVkaXQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29ycGNyZWRpdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBjb3Jwb3JhdGlvbiBvciBvcmdhbml6YXRpb24gY3JlZGl0ZWQgaW4gYSBkb2N1bWVudC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29ycGNyZWRpdCIgc3Vic3RpdHV0aW9uR3JvdXA9ImRvY2luZm8uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvcnBjcmVkaXQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY29ycGNyZWRpdC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb3JwY3JlZGl0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImdyYXBoaWNkZXNpZ25lciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwcm9kdWN0aW9uZWRpdG9yIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNvcHllZGl0b3IiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idGVjaG5pY2FsZWRpdG9yIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRyYW5zbGF0b3IiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3RoZXIiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvcnBjcmVkaXQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvcnBjcmVkaXQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb3JwY3JlZGl0Lm1vZHVsZSAtLT4KICA8IS0tIENvcnBOYW1lIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBkb2M6VGhlIG5hbWUgb2YgYSBjb3Jwb3JhdGlvbi4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29ycG5hbWUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb3JwbmFtZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb3JwbmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb3JwbmFtZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvcnBuYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29ycG5hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvcnBuYW1lLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29ycG5hbWUubW9kdWxlIC0tPgogIDwhLS0gRGF0ZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZGF0ZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIGRhdGUgb2YgcHVibGljYXRpb24gb3IgcmV2aXNpb24gb2YgYSBkb2N1bWVudC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZGF0ZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImRhdGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZGF0ZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJkYXRlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZGF0ZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZGF0ZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGRhdGUubW9kdWxlIC0tPgogIDwhLS0gRWRpdGlvbiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZWRpdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIG5hbWUgb3IgbnVtYmVyIG9mIGFuIGVkaXRpb24gb2YgYSBkb2N1bWVudC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZWRpdGlvbiI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVkaXRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZWRpdGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlZGl0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZWRpdGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZWRpdGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGVkaXRpb24ubW9kdWxlIC0tPgogIDwhLS0gRWRpdG9yIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZWRpdG9yLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgbmFtZSBvZiB0aGUgZWRpdG9yIG9mIGEgZG9jdW1lbnQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImVkaXRvciI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwZXJzb25uYW1lIi8+CiAgICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGVyc29uLmlkZW50Lm1peCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InBlcnNvbmJsdXJiIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImVtYWlsIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFkZHJlc3MiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZWRpdG9yLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGVkaXRvci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlZGl0b3IuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlZGl0b3Iucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGVkaXRvci5hdHRsaXN0IC0tPgogIDwhLS0gKHNlZSAiUGVyc29uYWwgaWRlbnRpdHkgZWxlbWVudHMiIGZvciAlcGVyc29uLmlkZW50Lm1peDspIC0tPgogIDwhLS0gZW5kIG9mIGVkaXRvci5tb2R1bGUgLS0+CiAgPCEtLSBJU0JOIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpc2JuLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBCb29rIE51bWJlciBvZiBhIGRvY3VtZW50LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJpc2JuIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaXNibi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBpc2JuLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImlzYm4uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpc2JuLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpc2JuLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaXNibi5tb2R1bGUgLS0+CiAgPCEtLSBJU1NOIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpc3NuLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBTZXJpYWwgTnVtYmVyIG9mIGEgcGVyaW9kaWNhbC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaXNzbiI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imlzc24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaXNzbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpc3NuLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaXNzbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaXNzbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGlzc24ubW9kdWxlIC0tPgogIDwhLS0gQmlibGlvSWQgLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpby5jbGFzcy5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InVyaSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJkb2kiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaXNibiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJpc3JuIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imlzc24iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGlicmFyeW9mY29uZ3Jlc3MiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icHVibnVtYmVyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im90aGVyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im90aGVyY2xhc3MiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9pZC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QW4gaWRlbnRpZmllciBmb3IgYSBkb2N1bWVudC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYmlibGlvaWQiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9pZC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBiaWJsaW9pZC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9pZC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpby5jbGFzcy5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb2lkLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBiaWJsaW9pZC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJpYmxpb2lkLm1vZHVsZSAtLT4KICA8IS0tIENpdGVCaWJsaW9JZCAuLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2l0ZWJpYmxpb2lkLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIGNpdGF0aW9uIG9mIGEgYmlibGlvZ3JhcGhpYyBpZGVudGlmaWVyLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJjaXRlYmlibGlvaWQiIHN1YnN0aXR1dGlvbkdyb3VwPSJnZW4uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNpdGViaWJsaW9pZC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjaXRlYmlibGlvaWQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2l0ZWJpYmxpb2lkLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvLmNsYXNzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2l0ZWJpYmxpb2lkLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjaXRlYmlibGlvaWQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjaXRlYmlibGlvaWQubW9kdWxlIC0tPgogIDwhLS0gQmlibGlvU291cmNlIC4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9zb3VyY2Uucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSBzb3VyY2Ugb2YgYSBkb2N1bWVudC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYmlibGlvc291cmNlIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvc291cmNlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb3NvdXJjZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9zb3VyY2UuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW8uY2xhc3MuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9zb3VyY2Uucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJpYmxpb3NvdXJjZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJpYmxpb3NvdXJjZS5tb2R1bGUgLS0+CiAgPCEtLSBCaWJsaW9SZWxhdGlvbiAuLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvcmVsYXRpb24udHlwZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaXN2ZXJzaW9ub2YiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaGFzdmVyc2lvbiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJpc3JlcGxhY2VkYnkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVwbGFjZXMiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaXNyZXF1aXJlZGJ5Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlcXVpcmVzIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImlzcGFydG9mIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imhhc3BhcnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaXNyZWZlcmVuY2VkYnkiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVmZXJlbmNlcyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJpc2Zvcm1hdG9mIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imhhc2Zvcm1hdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvdGhlcnR5cGUiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib3RoZXJ0eXBlIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmlibGlvcmVsYXRpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSByZWxhdGlvbnNoaXAgb2YgYSBkb2N1bWVudCB0byBhbm90aGVyLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJiaWJsaW9yZWxhdGlvbiI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb3JlbGF0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb3JlbGF0aW9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJpYmxpb3JlbGF0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvLmNsYXNzLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvcmVsYXRpb24udHlwZS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJpYmxpb3JlbGF0aW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBiaWJsaW9yZWxhdGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJpYmxpb3JlbGF0aW9uLm1vZHVsZSAtLT4KICA8IS0tIEJpYmxpb0NvdmVyYWdlIC4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9jb3ZlcmFnZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIHNwYXRpYWwgb3IgdGVtcG9yYWwgY292ZXJhZ2Ugb2YgYSBkb2N1bWVudC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYmlibGlvY292ZXJhZ2UiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9jb3ZlcmFnZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBiaWJsaW9jb3ZlcmFnZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9jb3ZlcmFnZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3BhdGlhbCI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImRjbWlwb2ludCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJpc28zMTY2Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImRjbWlib3giLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idGduIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im90aGVyc3BhdGlhbCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvdGhlcnNwYXRpYWwiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idGVtcG9yYWwiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJkY21pcGVyaW9kIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InczYy1kdGYiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3RoZXJ0ZW1wb3JhbCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvdGhlcnRlbXBvcmFsIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9jb3ZlcmFnZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYmlibGlvY292ZXJhZ2UuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBiaWJsaW9jb3ZlcmFnZS5tb2R1bGUgLS0+CiAgPCEtLSBJbnZQYXJ0TnVtYmVyIC4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbnZwYXJ0bnVtYmVyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBbiBpbnZlbnRvcnkgcGFydCBudW1iZXIuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImludnBhcnRudW1iZXIiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbnZwYXJ0bnVtYmVyLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGludnBhcnRudW1iZXIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW52cGFydG51bWJlci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImludnBhcnRudW1iZXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGludnBhcnRudW1iZXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBpbnZwYXJ0bnVtYmVyLm1vZHVsZSAtLT4KICA8IS0tIElzc3VlTnVtIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imlzc3VlbnVtLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgbnVtYmVyIG9mIGFuIGlzc3VlIG9mIGEgam91cm5hbC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaXNzdWVudW0iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpc3N1ZW51bS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBpc3N1ZW51bS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpc3N1ZW51bS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imlzc3VlbnVtLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBpc3N1ZW51bS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGlzc3VlbnVtLm1vZHVsZSAtLT4KICA8IS0tIExlZ2FsTm90aWNlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxlZ2Fsbm90aWNlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHN0YXRlbWVudCBvZiBsZWdhbCBvYmxpZ2F0aW9ucyBvciByZXF1aXJlbWVudHMuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImxlZ2Fsbm90aWNlIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJibG9ja2luZm8iLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0idGl0bGUiLz4KICAgICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibGVnYWxub3RpY2UubWl4Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxlZ2Fsbm90aWNlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGxlZ2Fsbm90aWNlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxlZ2Fsbm90aWNlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGVnYWxub3RpY2Uucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGxlZ2Fsbm90aWNlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbGVnYWxub3RpY2UubW9kdWxlIC0tPgogIDwhLS0gTW9kZVNwZWMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibW9kZXNwZWMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkFwcGxpY2F0aW9uLXNwZWNpZmljIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdGhlIGNvbXBsZXRpb24gb2YgYW4gT0xpbmsuIC0tPgogIDx4czplbGVtZW50IG5hbWU9Im1vZGVzcGVjIiBzdWJzdGl0dXRpb25Hcm91cD0iZG9jaW5mby5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9kZXNwZWMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbW9kZXNwZWMuZWxlbWVudCAtLT4KICA8IS0tCiAgICBBcHBsaWNhdGlvbjogVHlwZSBvZiBhY3Rpb24gcmVxdWlyZWQgZm9yIGNvbXBsZXRpb24KICAgIG9mIHRoZSBsaW5rcyB0byB3aGljaCB0aGUgTW9kZVNwZWMgaXMgcmVsZXZhbnQgKGUuZy4sCiAgICByZXRyaWV2YWwgcXVlcnkpCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1vZGVzcGVjLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhcHBsaWNhdGlvbiIgdHlwZT0ibm90YXRpb24uY2xhc3MiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vZGVzcGVjLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBtb2Rlc3BlYy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1vZGVzcGVjLm1vZHVsZSAtLT4KICA8IS0tIE9yZ05hbWUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9yZ25hbWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSBuYW1lIG9mIGFuIG9yZ2FuaXphdGlvbiBvdGhlciB0aGFuIGEgY29ycG9yYXRpb24uIC0tPgogIDx4czplbGVtZW50IG5hbWU9Im9yZ25hbWUiIHN1YnN0aXR1dGlvbkdyb3VwPSJnZW4uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9yZ25hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygb3JnbmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvcmduYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNvcnBvcmF0aW9uIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5vbnByb2ZpdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjb25zb3J0aXVtIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImluZm9ybWFsIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im90aGVyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im90aGVyY2xhc3MiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9yZ25hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG9yZ25hbWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBvcmduYW1lLm1vZHVsZSAtLT4KICA8IS0tIE90aGVyQ3JlZGl0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im90aGVyY3JlZGl0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHBlcnNvbiBvciBlbnRpdHksIG90aGVyIHRoYW4gYW4gYXV0aG9yIG9yIGVkaXRvciwgY3JlZGl0ZWQgaW4gYSBkb2N1bWVudC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ib3RoZXJjcmVkaXQiIHN1YnN0aXR1dGlvbkdyb3VwPSJkb2NpbmZvLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0icGVyc29ubmFtZSIvPgogICAgICAgICAgPHhzOmdyb3VwIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBlcnNvbi5pZGVudC5taXgiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwZXJzb25ibHVyYiIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlbWFpbCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhZGRyZXNzIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im90aGVyY3JlZGl0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG90aGVyY3JlZGl0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im90aGVyY3JlZGl0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImdyYXBoaWNkZXNpZ25lciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwcm9kdWN0aW9uZWRpdG9yIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNvcHllZGl0b3IiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idGVjaG5pY2FsZWRpdG9yIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRyYW5zbGF0b3IiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3RoZXIiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im90aGVyY3JlZGl0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBvdGhlcmNyZWRpdC5hdHRsaXN0IC0tPgogIDwhLS0gKHNlZSAiUGVyc29uYWwgaWRlbnRpdHkgZWxlbWVudHMiIGZvciAlcGVyc29uLmlkZW50Lm1peDspIC0tPgogIDwhLS0gZW5kIG9mIG90aGVyY3JlZGl0Lm1vZHVsZSAtLT4KICA8IS0tIFBhZ2VOdW1zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBhZ2VudW1zLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgbnVtYmVycyBvZiB0aGUgcGFnZXMgaW4gYSBib29rLCBmb3IgdXNlIGluIGEgYmlibGlvZ3JhcGhpYyBlbnRyeS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0icGFnZW51bXMiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYWdlbnVtcy5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwYWdlbnVtcy5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwYWdlbnVtcy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhZ2VudW1zLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwYWdlbnVtcy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHBhZ2VudW1zLm1vZHVsZSAtLT4KICA8IS0tIFBlcnNvbmFsIGlkZW50aXR5IGVsZW1lbnRzIC4uLi4uLi4gLS0+CiAgPCEtLQogICAgVGhlc2UgZWxlbWVudHMgYXJlIHVzZWQgb25seSB3aXRoaW4gQXV0aG9yLCBFZGl0b3IsIGFuZAogICAgT3RoZXJDcmVkaXQuCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbnRyaWIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgc3VtbWFyeSBvZiB0aGUgY29udHJpYnV0aW9ucyBtYWRlIHRvIGEgZG9jdW1lbnQgYnkgYSBjcmVkaXRlZCBzb3VyY2UuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImNvbnRyaWIiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb250cmliLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvbnRyaWIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29udHJpYi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbnRyaWIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvbnRyaWIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb250cmliLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZmlyc3RuYW1lLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgZmlyc3QgbmFtZSBvZiBhIHBlcnNvbi4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZmlyc3RuYW1lIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZmlyc3RuYW1lLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGZpcnN0bmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmaXJzdG5hbWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmaXJzdG5hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGZpcnN0bmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGZpcnN0bmFtZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imhvbm9yaWZpYy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIHRpdGxlIG9mIGEgcGVyc29uLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJob25vcmlmaWMiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJob25vcmlmaWMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgaG9ub3JpZmljLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imhvbm9yaWZpYy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imhvbm9yaWZpYy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaG9ub3JpZmljLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaG9ub3JpZmljLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGluZWFnZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIHBvcnRpb24gb2YgYSBwZXJzb24ncyBuYW1lIGluZGljYXRpbmcgYSByZWxhdGlvbnNoaXAgdG8gYW5jZXN0b3JzLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJsaW5lYWdlIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGluZWFnZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBsaW5lYWdlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxpbmVhZ2UuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5lYWdlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBsaW5lYWdlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbGluZWFnZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im90aGVybmFtZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBjb21wb25lbnQgb2YgYSBwZXJzb25zIG5hbWUgdGhhdCBpcyBub3QgYSBmaXJzdCBuYW1lLCBzdXJuYW1lLCBvciBsaW5lYWdlLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJvdGhlcm5hbWUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvdGhlcm5hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygb3RoZXJuYW1lLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im90aGVybmFtZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im90aGVybmFtZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygb3RoZXJuYW1lLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygb3RoZXJuYW1lLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3VybmFtZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBmYW1pbHkgbmFtZTsgaW4gd2VzdGVybiBjdWx0dXJlcyB0aGUgbGFzdCBuYW1lLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJzdXJuYW1lIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3VybmFtZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzdXJuYW1lLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN1cm5hbWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdXJuYW1lLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzdXJuYW1lLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc3VybmFtZS5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgcGVyc29uLmlkZW50Lm1vZHVsZSAtLT4KICA8IS0tIFByaW50SGlzdG9yeSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByaW50aGlzdG9yeS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIHByaW50aW5nIGhpc3Rvcnkgb2YgYSBkb2N1bWVudC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0icHJpbnRoaXN0b3J5Ij4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2xhc3MiLz4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJpbnRoaXN0b3J5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHByaW50aGlzdG9yeS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcmludGhpc3RvcnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcmludGhpc3Rvcnkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHByaW50aGlzdG9yeS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHByaW50aGlzdG9yeS5tb2R1bGUgLS0+CiAgPCEtLSBQcm9kdWN0TmFtZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcm9kdWN0bmFtZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIGZvcm1hbCBuYW1lIG9mIGEgcHJvZHVjdC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0icHJvZHVjdG5hbWUiIHN1YnN0aXR1dGlvbkdyb3VwPSJkb2NpbmZvLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcm9kdWN0bmFtZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwcm9kdWN0bmFtZS5lbGVtZW50IC0tPgogIDwhLS0gQ2xhc3M6IE1vcmUgcHJlY2lzZWx5IGlkZW50aWZpZXMgdGhlIGl0ZW0gdGhlIGVsZW1lbnQgbmFtZXMgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByb2R1Y3RuYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgZGVmYXVsdD0idHJhZGUiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZXJ2aWNlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRyYWRlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlZ2lzdGVyZWQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY29weXJpZ2h0Ii8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcm9kdWN0bmFtZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcHJvZHVjdG5hbWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwcm9kdWN0bmFtZS5tb2R1bGUgLS0+CiAgPCEtLSBQcm9kdWN0TnVtYmVyIC4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwcm9kdWN0bnVtYmVyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIG51bWJlciBhc3NpZ25lZCB0byBhIHByb2R1Y3QuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InByb2R1Y3RudW1iZXIiIHN1YnN0aXR1dGlvbkdyb3VwPSJkb2NpbmZvLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcm9kdWN0bnVtYmVyLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHByb2R1Y3RudW1iZXIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJvZHVjdG51bWJlci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByb2R1Y3RudW1iZXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHByb2R1Y3RudW1iZXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwcm9kdWN0bnVtYmVyLm1vZHVsZSAtLT4KICA8IS0tIFB1YkRhdGUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InB1YmRhdGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSBkYXRlIG9mIHB1YmxpY2F0aW9uIG9mIGEgZG9jdW1lbnQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InB1YmRhdGUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwdWJkYXRlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHB1YmRhdGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHViZGF0ZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InB1YmRhdGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHB1YmRhdGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwdWJkYXRlLm1vZHVsZSAtLT4KICA8IS0tIFB1Ymxpc2hlciAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InB1Ymxpc2hlci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIHB1Ymxpc2hlciBvZiBhIGRvY3VtZW50LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJwdWJsaXNoZXIiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJwdWJsaXNoZXJuYW1lIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJhZGRyZXNzIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InB1Ymxpc2hlci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwdWJsaXNoZXIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHVibGlzaGVyLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHVibGlzaGVyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwdWJsaXNoZXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwdWJsaXNoZXIubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwdWJsaXNoZXJuYW1lLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgbmFtZSBvZiB0aGUgcHVibGlzaGVyIG9mIGEgZG9jdW1lbnQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InB1Ymxpc2hlcm5hbWUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwdWJsaXNoZXJuYW1lLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHB1Ymxpc2hlcm5hbWUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHVibGlzaGVybmFtZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InB1Ymxpc2hlcm5hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHB1Ymxpc2hlcm5hbWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwdWJsaXNoZXJuYW1lLm1vZHVsZSAtLT4KICA8IS0tIEFkZHJlc3MgKGRlZmluZWQgZWxzZXdoZXJlIGluIHRoaXMgc2VjdGlvbikgLS0+CiAgPCEtLSBlbmQgb2YgcHVibGlzaGVyLmNvbnRlbnQubW9kdWxlIC0tPgogIDwhLS0gUHVic051bWJlciAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHVic251bWJlci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBudW1iZXIgYXNzaWduZWQgdG8gYSBwdWJsaWNhdGlvbiBvdGhlciB0aGFuIGFuIElTQk4gb3IgSVNTTiBvciBpbnZlbnRvcnkgcGFydCBudW1iZXIuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InB1YnNudW1iZXIiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwdWJzbnVtYmVyLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHB1YnNudW1iZXIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHVic251bWJlci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InB1YnNudW1iZXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHB1YnNudW1iZXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwdWJzbnVtYmVyLm1vZHVsZSAtLT4KICA8IS0tIFJlbGVhc2VJbmZvIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlbGVhc2VpbmZvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpJbmZvcm1hdGlvbiBhYm91dCBhIHBhcnRpY3VsYXIgcmVsZWFzZSBvZiBhIGRvY3VtZW50LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZWxlYXNlaW5mbyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlbGVhc2VpbmZvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlbGVhc2VpbmZvLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlbGVhc2VpbmZvLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVsZWFzZWluZm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlbGVhc2VpbmZvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVsZWFzZWluZm8ubW9kdWxlIC0tPgogIDwhLS0gUmV2SGlzdG9yeSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmV2aGlzdG9yeS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBoaXN0b3J5IG9mIHRoZSByZXZpc2lvbnMgdG8gYSBkb2N1bWVudC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0icmV2aGlzdG9yeSIgc3Vic3RpdHV0aW9uR3JvdXA9ImRvY2luZm8uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZXZpc2lvbiIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXZoaXN0b3J5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJldmhpc3RvcnkuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmV2aGlzdG9yeS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJldmhpc3Rvcnkucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJldmhpc3RvcnkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZXZoaXN0b3J5Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmV2aXNpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkFuIGVudHJ5IGRlc2NyaWJpbmcgYSBzaW5nbGUgcmV2aXNpb24gaW4gdGhlIGhpc3Rvcnkgb2YgdGhlIHJldmlzaW9ucyB0byBhIGRvY3VtZW50LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZXZpc2lvbiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0icmV2bnVtYmVyIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJkYXRlIi8+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iYXV0aG9yIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImF1dGhvcmluaXRpYWxzIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZXZyZW1hcmsiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0icmV2ZGVzY3JpcHRpb24iLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmV2aXNpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmV2aXNpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmV2aXNpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXZpc2lvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmV2aXNpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZXZpc2lvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJldm51bWJlci5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBkb2N1bWVudCByZXZpc2lvbiBudW1iZXIuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InJldm51bWJlciI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJkb2NpbmZvLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJldm51bWJlci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZXZudW1iZXIuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmV2bnVtYmVyLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmV2bnVtYmVyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZXZudW1iZXIuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZXZudW1iZXIubW9kdWxlIC0tPgogIDwhLS0gRGF0ZSAoZGVmaW5lZCBlbHNld2hlcmUgaW4gdGhpcyBzZWN0aW9uKSAtLT4KICA8IS0tIEF1dGhvckluaXRpYWxzIChkZWZpbmVkIGVsc2V3aGVyZSBpbiB0aGlzIHNlY3Rpb24pIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZXZyZW1hcmsucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgZGVzY3JpcHRpb24gb2YgYSByZXZpc2lvbiB0byBhIGRvY3VtZW50LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZXZyZW1hcmsiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXZyZW1hcmsuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmV2cmVtYXJrLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJldnJlbWFyay5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJldnJlbWFyay5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmV2cmVtYXJrLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmV2cmVtYXJrLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmV2ZGVzY3JpcHRpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgZXh0ZW5kZWQgZGVzY3JpcHRpb24gb2YgYSByZXZpc2lvbiB0byBhIGRvY3VtZW50LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJyZXZkZXNjcmlwdGlvbiI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czpncm91cCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJyZXZkZXNjcmlwdGlvbi5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmV2ZGVzY3JpcHRpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcmV2ZGVzY3JpcHRpb24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmV2ZGVzY3JpcHRpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXZkZXNjcmlwdGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcmV2ZGVzY3JpcHRpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZXZkZXNjcmlwdGlvbi5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgcmV2aGlzdG9yeS5jb250ZW50Lm1vZHVsZSAtLT4KICA8IS0tIFNlcmllc1ZvbE51bXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlcmllc3ZvbG51bXMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOk51bWJlcnMgb2YgdGhlIHZvbHVtZXMgaW4gYSBzZXJpZXMgb2YgYm9va3MuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InNlcmllc3ZvbG51bXMiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZXJpZXN2b2xudW1zLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlcmllc3ZvbG51bXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VyaWVzdm9sbnVtcy5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlcmllc3ZvbG51bXMucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlcmllc3ZvbG51bXMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzZXJpZXN2b2xudW1zLm1vZHVsZSAtLT4KICA8IS0tIFZvbHVtZU51bSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InZvbHVtZW51bS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIHZvbHVtZSBudW1iZXIgb2YgYSBkb2N1bWVudCBpbiBhIHNldCAoYXMgb2YgYm9va3MgaW4gYSBzZXQgb3IgYXJ0aWNsZXMgaW4gYSBqb3VybmFsKS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idm9sdW1lbnVtIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRvY2luZm8uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idm9sdW1lbnVtLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHZvbHVtZW51bS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ2b2x1bWVudW0uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ2b2x1bWVudW0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHZvbHVtZW51bS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHZvbHVtZW51bS5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gZW5kIG9mIGRvY2luZm8uY29udGVudC5tb2R1bGUgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gSW5saW5lLCBsaW5rLCBhbmQgdWJpcXVpdG91cyBlbGVtZW50cyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIFRlY2huaWNhbCBhbmQgY29tcHV0ZXIgdGVybXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFjY2VsLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSAoR1VJKSBrZXlib2FyZCBzaG9ydGN1dC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYWNjZWwiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFjY2VsLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFjY2VsLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFjY2VsLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWNjZWwucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGFjY2VsLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYWNjZWwubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhY3Rpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgcmVzcG9uc2UgdG8gYSB1c2VyIGV2ZW50LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJhY3Rpb24iIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhY3Rpb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYWN0aW9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFjdGlvbi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWN0aW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhY3Rpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBhY3Rpb24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhcHBsaWNhdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIG5hbWUgb2YgYSBzb2Z0d2FyZSBwcm9ncmFtLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJhcHBsaWNhdGlvbiIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFwcGxpY2F0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGFwcGxpY2F0aW9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFwcGxpY2F0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImhhcmR3YXJlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNvZnR3YXJlIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFwcGxpY2F0aW9uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhcHBsaWNhdGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGFwcGxpY2F0aW9uLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2xhc3NuYW1lLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgbmFtZSBvZiBhIGNsYXNzLCBpbiB0aGUgb2JqZWN0LW9yaWVudGVkIHByb2dyYW1taW5nIHNlbnNlLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJjbGFzc25hbWUiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNsYXNzbmFtZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjbGFzc25hbWUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2xhc3NuYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2xhc3NuYW1lLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjbGFzc25hbWUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjbGFzc25hbWUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwYWNrYWdlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHBhY2thZ2UuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InBhY2thZ2UiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhY2thZ2UuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcGFja2FnZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwYWNrYWdlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGFja2FnZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcGFja2FnZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHBhY2thZ2UubW9kdWxlIC0tPgogIDwhLS0KICAgIENPIGlzIGEgY2FsbG91dCBhcmVhIG9mIHRoZSBMaW5lQ29sdW1uIHVuaXQgdHlwZSAoYSBzaW5nbGUgY2hhcmFjdGVyCiAgICBwb3NpdGlvbik7IHRoZSBwb3NpdGlvbiBpcyBkaXJlY3RseSBpbmRpY2F0ZWQgYnkgdGhlIGxvY2F0aW9uIG9mIENPLgogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIGxvY2F0aW9uIG9mIGEgY2FsbG91dCBlbWJlZGRlZCBpbiB0ZXh0LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJjbyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvLmVsZW1lbnQgLS0+CiAgPCEtLSBidWcgbnVtYmVyL3N5bWJvbCBvdmVycmlkZSBvciBpbml0aWFsaXphdGlvbiAtLT4KICA8IS0tIHRvIGFueSByZWxhdGVkIGluZm9ybWF0aW9uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxhYmVsLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlua2VuZHMuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpZHJlcS5jb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY28uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjby5tb2R1bGUgLS0+CiAgPCEtLSBDT1JFRiBpcyBhIHJlZmVyZW5jZSB0byBhIENPIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb3JlZi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBjcm9zcyByZWZlcmVuY2UgdG8gYSBjby4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29yZWYiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb3JlZi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb3JlZi5lbGVtZW50IC0tPgogIDwhLS0gYnVnIG51bWJlci9zeW1ib2wgb3ZlcnJpZGUgb3IgaW5pdGlhbGl6YXRpb24gLS0+CiAgPCEtLSB0byBhbnkgcmVsYXRlZCBpbmZvcm1hdGlvbiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29yZWYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmtlbmRyZXEuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb3JlZi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY29yZWYuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb3JlZi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbW1hbmQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSBuYW1lIG9mIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSBvciBvdGhlciBzb2Z0d2FyZSBjb21tYW5kLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb21tYW5kIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbWFuZC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb21tYW5kLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbW1hbmQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1hbmQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNvbW1hbmQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb21tYW5kLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29tcHV0ZXJvdXRwdXQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkRhdGEsIGdlbmVyYWxseSB0ZXh0LCBkaXNwbGF5ZWQgb3IgcHJlc2VudGVkIGJ5IGEgY29tcHV0ZXIuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImNvbXB1dGVyb3V0cHV0IiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iY3B0ci5jaGFyLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY28iLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbXB1dGVyb3V0cHV0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvbXB1dGVyb3V0cHV0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbXB1dGVyb3V0cHV0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21wdXRlcm91dHB1dC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY29tcHV0ZXJvdXRwdXQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb21wdXRlcm91dHB1dC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImRhdGFiYXNlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgbmFtZSBvZiBhIGRhdGFiYXNlLCBvciBwYXJ0IG9mIGEgZGF0YWJhc2UuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImRhdGFiYXNlIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZGF0YWJhc2UuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZGF0YWJhc2UuZWxlbWVudCAtLT4KICA8IS0tIENsYXNzOiBUeXBlIG9mIGRhdGFiYXNlIHRoZSBlbGVtZW50IG5hbWVzOyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJkYXRhYmFzZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJuYW1lIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRhYmxlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImZpZWxkIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImtleTEiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ia2V5MiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZWNvcmQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaW5kZXgiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idmlldyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwcmltYXJ5a2V5Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY29uZGFyeWtleSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJmb3JlaWdua2V5Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImFsdGtleSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwcm9jZWR1cmUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZGF0YXR5cGUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY29uc3RyYWludCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJydWxlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InVzZXIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZ3JvdXAiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZGF0YWJhc2Uucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGRhdGFiYXNlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZGF0YWJhc2UubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlbWFpbC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QW4gZW1haWwgYWRkcmVzcy4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZW1haWwiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZG9jaW5mby5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlbWFpbC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBlbWFpbC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlbWFpbC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVtYWlsLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBlbWFpbC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGVtYWlsLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZW52YXIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgc29mdHdhcmUgZW52aXJvbm1lbnQgdmFyaWFibGUuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImVudmFyIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlbnZhci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBlbnZhci5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlbnZhci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVudmFyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBlbnZhci5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGVudmFyLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZXJyb3Jjb2RlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBbiBlcnJvciBjb2RlLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJlcnJvcmNvZGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVycm9yY29kZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBlcnJvcmNvZGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZXJyb3Jjb2RlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlcnJvcmNvZGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGVycm9yY29kZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGVycm9yY29kZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVycm9ybmFtZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QW4gZXJyb3IgbmFtZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZXJyb3JuYW1lIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlcnJvcm5hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZXJyb3JuYW1lLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVycm9ybmFtZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVycm9ybmFtZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZXJyb3JuYW1lLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZXJyb3JuYW1lLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZXJyb3J0ZXh0LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBbiBlcnJvciBtZXNzYWdlLi4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZXJyb3J0ZXh0IiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlcnJvcnRleHQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZXJyb3J0ZXh0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVycm9ydGV4dC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVycm9ydGV4dC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZXJyb3J0ZXh0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZXJyb3J0ZXh0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZXJyb3J0eXBlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgY2xhc3NpZmljYXRpb24gb2YgYW4gZXJyb3IgbWVzc2FnZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZXJyb3J0eXBlIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlcnJvcnR5cGUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZXJyb3J0eXBlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImVycm9ydHlwZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImVycm9ydHlwZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZXJyb3J0eXBlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZXJyb3J0eXBlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZmlsZW5hbWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSBuYW1lIG9mIGEgZmlsZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZmlsZW5hbWUiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmaWxlbmFtZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBmaWxlbmFtZS5lbGVtZW50IC0tPgogIDwhLS0gQ2xhc3M6IFR5cGUgb2YgZmlsZW5hbWUgdGhlIGVsZW1lbnQgbmFtZXM7IG5vIGRlZmF1bHQgLS0+CiAgPCEtLQogICAgUGF0aDogU2VhcmNoIHBhdGggKHBvc3NpYmx5IHN5c3RlbS1zcGVjaWZpYykgaW4gd2hpY2gKICAgIGZpbGUgY2FuIGJlIGZvdW5kCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZpbGVuYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImhlYWRlcmZpbGUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icGFydGl0aW9uIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImRldmljZWZpbGUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGlicmFyeWZpbGUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZGlyZWN0b3J5Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImV4dGVuc2lvbiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzeW1saW5rIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InBhdGgiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZmlsZW5hbWUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGZpbGVuYW1lLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZmlsZW5hbWUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmdW5jdGlvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIG5hbWUgb2YgYSBmdW5jdGlvbiBvciBzdWJyb3V0aW5lLCBhcyBpbiBhIHByb2dyYW1taW5nIGxhbmd1YWdlLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJmdW5jdGlvbiIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZ1bmN0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGZ1bmN0aW9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZ1bmN0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmdW5jdGlvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZnVuY3Rpb24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBmdW5jdGlvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imd1aWJ1dHRvbi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIHRleHQgb24gYSBidXR0b24gaW4gYSBHVUkuIC0tPgogIDx4czplbGVtZW50IG5hbWU9Imd1aWJ1dHRvbiIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYWNjZWwiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN1cGVyc2NyaXB0Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdWJzY3JpcHQiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imd1aWJ1dHRvbi5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBndWlidXR0b24uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ3VpYnV0dG9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJndWlidXR0b24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGd1aWJ1dHRvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGd1aWJ1dHRvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imd1aWljb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkdyYXBoaWMgYW5kL29yIHRleHQgYXBwZWFyaW5nIGFzIGEgaWNvbiBpbiBhIEdVSS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZ3VpaWNvbiIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYWNjZWwiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN1cGVyc2NyaXB0Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdWJzY3JpcHQiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imd1aWljb24uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZ3VpaWNvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJndWlpY29uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJndWlpY29uLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBndWlpY29uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZ3VpaWNvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imd1aWxhYmVsLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgdGV4dCBvZiBhIGxhYmVsIGluIGEgR1VJLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJndWlsYWJlbCIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYWNjZWwiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN1cGVyc2NyaXB0Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdWJzY3JpcHQiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imd1aWxhYmVsLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGd1aWxhYmVsLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imd1aWxhYmVsLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJndWlsYWJlbC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZ3VpbGFiZWwuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBndWlsYWJlbC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imd1aW1lbnUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSBuYW1lIG9mIGEgbWVudSBpbiBhIEdVSS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZ3VpbWVudSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iYWNjZWwiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN1cGVyc2NyaXB0Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdWJzY3JpcHQiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imd1aW1lbnUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZ3VpbWVudS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJndWltZW51LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJndWltZW51LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBndWltZW51LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZ3VpbWVudS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imd1aW1lbnVpdGVtLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgbmFtZSBvZiBhIHRlcm1pbmFsIG1lbnUgaXRlbSBpbiBhIEdVSS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZ3VpbWVudWl0ZW0iIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFjY2VsIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdXBlcnNjcmlwdCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ic3Vic2NyaXB0Ii8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJndWltZW51aXRlbS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBndWltZW51aXRlbS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJndWltZW51aXRlbS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ3VpbWVudWl0ZW0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGd1aW1lbnVpdGVtLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZ3VpbWVudWl0ZW0ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJndWlzdWJtZW51LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgbmFtZSBvZiBhIHN1Ym1lbnUgaW4gYSBHVUkuIC0tPgogIDx4czplbGVtZW50IG5hbWU9Imd1aXN1Ym1lbnUiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFjY2VsIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJzdXBlcnNjcmlwdCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ic3Vic2NyaXB0Ii8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJndWlzdWJtZW51LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGd1aXN1Ym1lbnUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZ3Vpc3VibWVudS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ3Vpc3VibWVudS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZ3Vpc3VibWVudS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGd1aXN1Ym1lbnUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJoYXJkd2FyZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBwaHlzaWNhbCBwYXJ0IG9mIGEgY29tcHV0ZXIgc3lzdGVtLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJoYXJkd2FyZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImhhcmR3YXJlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGhhcmR3YXJlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImhhcmR3YXJlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJoYXJkd2FyZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaGFyZHdhcmUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBoYXJkd2FyZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImludGVyZmFjZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QW4gZWxlbWVudCBvZiBhIEdVSS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iaW50ZXJmYWNlIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJhY2NlbCIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW50ZXJmYWNlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGludGVyZmFjZS5lbGVtZW50IC0tPgogIDwhLS0gQ2xhc3M6IFR5cGUgb2YgdGhlIEludGVyZmFjZSBpdGVtOyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbnRlcmZhY2UuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImludGVyZmFjZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgaW50ZXJmYWNlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgaW50ZXJmYWNlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ia2V5Y2FwLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgdGV4dCBwcmludGVkIG9uIGEga2V5IG9uIGEga2V5Ym9hcmQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImtleWNhcCIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImtleWNhcC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBrZXljYXAuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ia2V5Y2FwLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmdW5jdGlvbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImFsdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjb250cm9sIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNoaWZ0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im1ldGEiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZXNjYXBlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImVudGVyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRhYiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJiYWNrc3BhY2UiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY29tbWFuZCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJvcHRpb24iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic3BhY2UiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZGVsZXRlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imluc2VydCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ1cCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJkb3duIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxlZnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmlnaHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaG9tZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJlbmQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icGFnZXVwIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InBhZ2Vkb3duIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im90aGVyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im90aGVyZnVuY3Rpb24iLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ia2V5Y2FwLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBrZXljYXAuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBrZXljYXAubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJrZXljb2RlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgaW50ZXJuYWwsIGZyZXF1ZW50bHkgbnVtZXJpYywgaWRlbnRpZmllciBmb3IgYSBrZXkgb24gYSBrZXlib2FyZC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ia2V5Y29kZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ia2V5Y29kZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBrZXljb2RlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImtleWNvZGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJrZXljb2RlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBrZXljb2RlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Yga2V5Y29kZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImtleWNvbWJvLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIGNvbWJpbmF0aW9uIG9mIGlucHV0IGFjdGlvbnMuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImtleWNvbWJvIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJrZXljYXAiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImtleWNvbWJvIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJrZXlzeW0iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im1vdXNlYnV0dG9uIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJrZXljb21iby5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBrZXljb21iby5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJrZXljb21iby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImtleWFjdGlvbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ia2V5Y29tYm8ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGtleWNvbWJvLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Yga2V5Y29tYm8ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJrZXlzeXNtLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgc3ltYm9saWMgbmFtZSBvZiBhIGtleSBvbiBhIGtleWJvYXJkLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJrZXlzeW0iIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImtleXN5bS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBrZXlzeW0uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ia2V5c3ltLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ia2V5c3lzbS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Yga2V5c3ltLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Yga2V5c3ltLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGluZWFubm90YXRpb24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgY29tbWVudCBvbiBhIGxpbmUgaW4gYSB2ZXJiYXRpbSBsaXN0aW5nLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJsaW5lYW5ub3RhdGlvbiI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmVhbm5vdGF0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGxpbmVhbm5vdGF0aW9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxpbmVhbm5vdGF0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGluZWFubm90YXRpb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGxpbmVhbm5vdGF0aW9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbGluZWFubm90YXRpb24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsaXRlcmFsLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpJbmxpbmUgdGV4dCB0aGF0IGlzIHNvbWUgbGl0ZXJhbCB2YWx1ZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibGl0ZXJhbCIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpdGVyYWwuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbGl0ZXJhbC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsaXRlcmFsLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaXRlcmFsLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBsaXRlcmFsLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbGl0ZXJhbC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvZGUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkFuIGlubGluZSBjb2RlIGZyYWdtZW50LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb2RlIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29kZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjb2RlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvZGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Imxhbmd1YWdlIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb2RlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjb2RlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY29kZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbnN0YW50LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHByb2dyYW1taW5nIG9yIHN5c3RlbSBjb25zdGFudC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY29uc3RhbnQiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbnN0YW50LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNvbnN0YW50LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNvbnN0YW50LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxpbWl0Ii8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb25zdGFudC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY29uc3RhbnQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjb25zdGFudC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InZhcm5hbWUucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSBuYW1lIG9mIGEgdmFyaWFibGUuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InZhcm5hbWUiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InZhcm5hbWUuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdmFybmFtZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ2YXJuYW1lLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idmFybmFtZS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdmFybmFtZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHZhcm5hbWUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtYXJrdXAucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgc3RyaW5nIG9mIGZvcm1hdHRpbmcgbWFya3VwIGluIHRleHQgdGhhdCBpcyB0byBiZSByZXByZXNlbnRlZCBsaXRlcmFsbHkuIC0tPgogIDx4czplbGVtZW50IG5hbWU9Im1hcmt1cCIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWFya3VwLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1hcmt1cC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtYXJrdXAuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtYXJrdXAucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1hcmt1cC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG1hcmt1cC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1lZGlhbGFiZWwucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgbmFtZSB0aGF0IGlkZW50aWZpZXMgdGhlIHBoeXNpY2FsIG1lZGl1bSBvbiB3aGljaCBzb21lIGluZm9ybWF0aW9uIHJlc2lkZXMuIC0tPgogIDx4czplbGVtZW50IG5hbWU9Im1lZGlhbGFiZWwiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1lZGlhbGFiZWwuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbWVkaWFsYWJlbC5lbGVtZW50IC0tPgogIDwhLS0gQ2xhc3M6IFR5cGUgb2YgbWVkaXVtIG5hbWVkIGJ5IHRoZSBlbGVtZW50OyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJtZWRpYWxhYmVsLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNhcnRyaWRnZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjZHJvbSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJkaXNrIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRhcGUiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1lZGlhbGFiZWwucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1lZGlhbGFiZWwuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtZWRpYWxhYmVsLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibWVudWNob2ljZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBzZWxlY3Rpb24gb3Igc2VyaWVzIG9mIHNlbGVjdGlvbnMgZnJvbSBhIG1lbnUuIC0tPgogIDx4czplbGVtZW50IG5hbWU9Im1lbnVjaG9pY2UiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InNob3J0Y3V0Ii8+CiAgICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Imd1aWJ1dHRvbiIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJndWlpY29uIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Imd1aWxhYmVsIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Imd1aW1lbnUiLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iZ3VpbWVudWl0ZW0iLz4KICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iZ3Vpc3VibWVudSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJpbnRlcmZhY2UiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibWVudWNob2ljZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBtZW51Y2hvaWNlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1lbnVjaG9pY2UuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1lbnVjaG9pY2Uucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1lbnVjaG9pY2UuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtZW51Y2hvaWNlLm1vZHVsZSAtLT4KICA8IS0tIFNlZSBhbHNvIEtleUNvbWJvIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzaG9ydGN1dC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBrZXkgY29tYmluYXRpb24gZm9yIGFuIGFjdGlvbiB0aGF0IGlzIGFsc28gYWNjZXNzaWJsZSB0aHJvdWdoIGEgbWVudS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2hvcnRjdXQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImtleWNhcCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ia2V5Y29tYm8iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImtleXN5bSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibW91c2VidXR0b24iLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNob3J0Y3V0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNob3J0Y3V0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNob3J0Y3V0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ia2V5YWN0aW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzaG9ydGN1dC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2hvcnRjdXQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzaG9ydGN1dC5tb2R1bGUgLS0+CiAgPCEtLSBlbmQgb2YgbWVudWNob2ljZS5jb250ZW50Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibW91c2VidXR0b24ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSBjb252ZW50aW9uYWwgbmFtZSBvZiBhIG1vdXNlIGJ1dHRvbi4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibW91c2VidXR0b24iIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vdXNlYnV0dG9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1vdXNlYnV0dG9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1vdXNlYnV0dG9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3VzZWJ1dHRvbi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbW91c2VidXR0b24uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtb3VzZWJ1dHRvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1zZ3RleHQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSBhY3R1YWwgdGV4dCBvZiBhIG1lc3NhZ2UgY29tcG9uZW50IGluIGEgbWVzc2FnZSBzZXQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9Im1zZ3RleHQiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Z3JvdXAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29tcG9uZW50Lm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtc2d0ZXh0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG1zZ3RleHQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibXNndGV4dC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1zZ3RleHQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG1zZ3RleHQuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBtc2d0ZXh0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib3B0aW9uLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBbiBvcHRpb24gZm9yIGEgc29mdHdhcmUgY29tbWFuZC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ib3B0aW9uIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ib3B0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG9wdGlvbi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvcHRpb24uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvcHRpb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIG9wdGlvbi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG9wdGlvbi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im9wdGlvbmFsLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpPcHRpb25hbCBpbmZvcm1hdGlvbi4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ib3B0aW9uYWwiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvcHRpb25hbC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBvcHRpb25hbC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvcHRpb25hbC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9wdGlvbmFsLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBvcHRpb25hbC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIG9wdGlvbmFsLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGFyYW1ldGVyLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHZhbHVlIG9yIGEgc3ltYm9saWMgcmVmZXJlbmNlIHRvIGEgdmFsdWUuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InBhcmFtZXRlciIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhcmFtZXRlci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwYXJhbWV0ZXIuZWxlbWVudCAtLT4KICA8IS0tIENsYXNzOiBUeXBlIG9mIHRoZSBQYXJhbWV0ZXI7IG5vIGRlZmF1bHQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InBhcmFtZXRlci5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjb21tYW5kIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImZ1bmN0aW9uIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im9wdGlvbiIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYXJhbWV0ZXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHBhcmFtZXRlci5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHBhcmFtZXRlci5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByb21wdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBjaGFyYWN0ZXIgb3Igc3RyaW5nIGluZGljYXRpbmcgdGhlIHN0YXJ0IG9mIGFuIGlucHV0IGZpZWxkIGluIGEgIGNvbXB1dGVyIGRpc3BsYXkuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InByb21wdCIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iY28iLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByb21wdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwcm9tcHQuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJvbXB0LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcm9tcHQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHByb21wdC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHByb21wdC5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByb3BlcnR5LnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHVuaXQgb2YgZGF0YSBhc3NvY2lhdGVkIHdpdGggc29tZSBwYXJ0IG9mIGEgY29tcHV0ZXIgc3lzdGVtLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJwcm9wZXJ0eSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByb3BlcnR5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHByb3BlcnR5LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByb3BlcnR5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibW9yZWluZm8uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcm9wZXJ0eS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgcHJvcGVydHkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwcm9wZXJ0eS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlcGxhY2VhYmxlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpDb250ZW50IHRoYXQgbWF5IG9yIG11c3QgYmUgcmVwbGFjZWQgYnkgdGhlIHVzZXIuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InJlcGxhY2VhYmxlIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9Im9wdGlvbmFsIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iYmFzZS5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ib3RoZXIuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lZ3JhcGhpYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lbWVkaWFvYmplY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXBsYWNlYWJsZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZXBsYWNlYWJsZS5lbGVtZW50IC0tPgogIDwhLS0KICAgIENsYXNzOiBUeXBlIG9mIGluZm9ybWF0aW9uIHRoZSBlbGVtZW50IHJlcHJlc2VudHM7IG5vCiAgICBkZWZhdWx0CiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InJlcGxhY2VhYmxlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNvbW1hbmQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZnVuY3Rpb24iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3B0aW9uIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InBhcmFtZXRlciIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVwbGFjZWFibGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlcGxhY2VhYmxlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcmVwbGFjZWFibGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZXR1cm52YWx1ZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIHZhbHVlIHJldHVybmVkIGJ5IGEgZnVuY3Rpb24uIC0tPgogIDx4czplbGVtZW50IG5hbWU9InJldHVybnZhbHVlIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXR1cm52YWx1ZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiByZXR1cm52YWx1ZS5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJyZXR1cm52YWx1ZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJldHVybnZhbHVlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiByZXR1cm52YWx1ZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHJldHVybnZhbHVlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2dtbHRhZy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBjb21wb25lbnQgb2YgU0dNTCBtYXJrdXAuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InNnbWx0YWciIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNnbWx0YWcuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc2dtbHRhZy5lbGVtZW50IC0tPgogIDwhLS0gQ2xhc3M6IFR5cGUgb2YgU0dNTCBjb25zdHJ1Y3QgdGhlIGVsZW1lbnQgbmFtZXM7IG5vIGRlZmF1bHQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNnbWx0YWcuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYXR0cmlidXRlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImF0dHZhbHVlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImVsZW1lbnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZW5kdGFnIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImVtcHR5dGFnIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImdlbmVudGl0eSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJudW1jaGFycmVmIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InBhcmFtZW50aXR5Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InBpIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InhtbHBpIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InN0YXJ0dGFnIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNnbWxjb21tZW50Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InByZWZpeCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJuYW1lc3BhY2UiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibG9jYWxuYW1lIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2dtbHRhZy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2dtbHRhZy5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNnbWx0YWcubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdHJ1Y3RmaWVsZC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBmaWVsZCBpbiBhIHN0cnVjdHVyZSAoaW4gdGhlIHByb2dyYW1taW5nIGxhbmd1YWdlIHNlbnNlKS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3RydWN0ZmllbGQiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InN0cnVjdGZpZWxkLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN0cnVjdGZpZWxkLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN0cnVjdGZpZWxkLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RydWN0ZmllbGQucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHN0cnVjdGZpZWxkLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc3RydWN0ZmllbGQubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdHJ1Y3RuYW1lLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgbmFtZSBvZiBhIHN0cnVjdHVyZSAoaW4gdGhlIHByb2dyYW1taW5nIGxhbmd1YWdlIHNlbnNlKS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3RydWN0bmFtZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3RydWN0bmFtZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzdHJ1Y3RuYW1lLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN0cnVjdG5hbWUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdHJ1Y3RuYW1lLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzdHJ1Y3RuYW1lLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2Ygc3RydWN0bmFtZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN5bWJvbC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBuYW1lIHRoYXQgaXMgcmVwbGFjZWQgYnkgYSB2YWx1ZSBiZWZvcmUgcHJvY2Vzc2luZy4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3ltYm9sIiBzdWJzdGl0dXRpb25Hcm91cD0idGVjaC5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InNtYWxsY3B0ci5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzeW1ib2wuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc3ltYm9sLmVsZW1lbnQgLS0+CiAgPCEtLSBDbGFzczogVHlwZSBvZiBzeW1ib2w7IG5vIGRlZmF1bHQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN5bWJvbC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsaW1pdCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3ltYm9sLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzeW1ib2wuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBzeW1ib2wubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzeXN0ZW1pdGVtLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHN5c3RlbS1yZWxhdGVkIGl0ZW0gb3IgdGVybS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic3lzdGVtaXRlbSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czpncm91cCByZWY9ImNwdHIuY2hhci5taXgiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImFjcm9ueW0iLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImNvIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzeXN0ZW1pdGVtLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHN5c3RlbWl0ZW0uZWxlbWVudCAtLT4KICA8IS0tIENsYXNzOiBUeXBlIG9mIHN5c3RlbSBpdGVtIHRoZSBlbGVtZW50IG5hbWVzOyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzeXN0ZW1pdGVtLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNvbnN0YW50Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImRhZW1vbiIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJkb21haW5uYW1lIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImV0aGVyYWRkcmVzcyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJldmVudCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJldmVudGhhbmRsZXIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZmlsZXN5c3RlbSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJmcWRvbWFpbm5hbWUiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZ3JvdXBuYW1lIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImlwYWRkcmVzcyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsaWJyYXJ5Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im1hY3JvIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5ldG1hc2siLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibmV3c2dyb3VwIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im9zbmFtZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwcm90b2NvbCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZXNvdXJjZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzeXN0ZW1uYW1lIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InVzZXJuYW1lIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InByb2Nlc3MiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2VydmVyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlcnZpY2UiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im1vcmVpbmZvLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic3lzdGVtaXRlbS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc3lzdGVtaXRlbS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHN5c3RlbWl0ZW0ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ1cmkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJ1cmkiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InVyaS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB1cmkuZWxlbWVudCAtLT4KICA8IS0tIFR5cGU6IFR5cGUgb2YgVVJJOyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ1cmkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InR5cGUiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InVyaS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdXJpLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdXJpLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idG9rZW4ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgdW5pdCBvZiBpbmZvcm1hdGlvbi4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idG9rZW4iIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic21hbGxjcHRyLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRva2VuLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRva2VuLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InRva2VuLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG9rZW4ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRva2VuLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdG9rZW4ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0eXBlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgY2xhc3NpZmljYXRpb24gb2YgYSB2YWx1ZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idHlwZSIgc3Vic3RpdHV0aW9uR3JvdXA9InRlY2guY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzbWFsbGNwdHIuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idHlwZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0eXBlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InR5cGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0eXBlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiB0eXBlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdHlwZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InVzZXJpbnB1dC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6RGF0YSBlbnRlcmVkIGJ5IHRoZSB1c2VyLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJ1c2VyaW5wdXQiIHN1YnN0aXR1dGlvbkdyb3VwPSJ0ZWNoLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJjcHRyLmNoYXIubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjbyIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idXNlcmlucHV0LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHVzZXJpbnB1dC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ1c2VyaW5wdXQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtb3JlaW5mby5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InVzZXJpbnB1dC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdXNlcmlucHV0LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgdXNlcmlucHV0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGVybWRlZi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QW4gaW5saW5lIGRlZmluaXRpb24gb2YgYSB0ZXJtLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJ0ZXJtZGVmIiBzdWJzdGl0dXRpb25Hcm91cD0iZ2VuLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0ZXJtZGVmLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHRlcm1kZWYuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGVybWRlZi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRlcm1kZWYucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRlcm1kZWYuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB0ZXJtZGVmLm1vZHVsZSAtLT4KICA8IS0tIEdlbmVyYWwgd29yZHMgYW5kIHBocmFzZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFiYnJldi5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QW4gYWJicmV2aWF0aW9uLCBlc3BlY2lhbGx5IG9uZSBmb2xsb3dlZCBieSBhIHBlcmlvZC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYWJicmV2IiBzdWJzdGl0dXRpb25Hcm91cD0iZ2VuLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0id29yZC5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhYmJyZXYuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgYWJicmV2LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFiYnJldi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFiYnJldi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYWJicmV2LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYWJicmV2Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYWNyb255bS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QW4gb2Z0ZW4gcHJvbm91bmNlYWJsZSB3b3JkIG1hZGUgZnJvbSB0aGUgaW5pdGlhbCAob3Igc2VsZWN0ZWQpIGxldHRlcnMgb2YgYSBuYW1lIG9yIHBocmFzZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYWNyb255bSIgc3Vic3RpdHV0aW9uR3JvdXA9Imdlbi5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9IndvcmQuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYWNyb255bS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBhY3JvbnltLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFjcm9ueW0uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhY3JvbnltLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBhY3JvbnltLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYWNyb255bS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNpdGF0aW9uLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBbiBpbmxpbmUgYmlibGlvZ3JhcGhpYyByZWZlcmVuY2UgdG8gYW5vdGhlciBwdWJsaXNoZWQgd29yay4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY2l0YXRpb24iIHN1YnN0aXR1dGlvbkdyb3VwPSJnZW4uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNpdGF0aW9uLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGNpdGF0aW9uLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNpdGF0aW9uLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2l0YXRpb24ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGNpdGF0aW9uLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY2l0YXRpb24ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjaXRlcmVmZW50cnkucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgY2l0YXRpb24gdG8gYSByZWZlcmVuY2UgcGFnZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iY2l0ZXJlZmVudHJ5IiBzdWJzdGl0dXRpb25Hcm91cD0iZ2VuLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyZWZlbnRyeXRpdGxlIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Im1hbnZvbG51bSIvPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjaXRlcmVmZW50cnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgY2l0ZXJlZmVudHJ5LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNpdGVyZWZlbnRyeS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNpdGVyZWZlbnRyeS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgY2l0ZXJlZmVudHJ5LmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgY2l0ZXJlZmVudHJ5Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmZW50cnl0aXRsZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6VGhlIHRpdGxlIG9mIGEgcmVmZXJlbmNlIHBhZ2UuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InJlZmVudHJ5dGl0bGUiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZWZlbnRyeXRpdGxlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHJlZmVudHJ5dGl0bGUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icmVmZW50cnl0aXRsZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJlZmVudHJ5dGl0bGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHJlZmVudHJ5dGl0bGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiByZWZlbnRyeXRpdGxlLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibmFtdm9sbnVtLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHJlZmVyZW5jZSB2b2x1bWUgbnVtYmVyLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJtYW52b2xudW0iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0id29yZC5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJtYW52b2xudW0uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbWFudm9sbnVtLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Im1hbnZvbG51bS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im5hbXZvbG51bS5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgbWFudm9sbnVtLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgbWFudm9sbnVtLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2l0ZXRpdGxlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgdGl0bGUgb2YgYSBjaXRlZCB3b3JrLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJjaXRldGl0bGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJnZW4uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNpdGV0aXRsZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBjaXRldGl0bGUuZWxlbWVudCAtLT4KICA8IS0tIFB1Yndvcms6IEdlbnJlIG9mIHB1Ymxpc2hlZCB3b3JrIGNpdGVkOyBubyBkZWZhdWx0IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjaXRldGl0bGUuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InB1YndvcmsiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJhcnRpY2xlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImJvb2siLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2hhcHRlciIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwYXJ0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlZmVudHJ5Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNlY3Rpb24iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iam91cm5hbCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZXJpZXMiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im1hbnVzY3JpcHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2Ryb20iLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZHZkIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Indpa2kiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZ29waGVyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImJicyIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJlbWFpbG1lc3NhZ2UiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0id2VicGFnZSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJuZXdzcG9zdGluZyIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2l0ZXRpdGxlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBjaXRldGl0bGUuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBjaXRldGl0bGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJlbXBoYXNpcy5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6RW1waGFzaXplZCB0ZXh0LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJlbXBoYXNpcyIgc3Vic3RpdHV0aW9uR3JvdXA9Imdlbi5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZW1waGFzaXMuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZW1waGFzaXMuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZW1waGFzaXMuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlbXBoYXNpcy5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZW1waGFzaXMuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBlbXBoYXNpcy5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZvcmVpZ25waHJhc2Uucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgd29yZCBvciBwaHJhc2UgaW4gYSBsYW5ndWFnZSBvdGhlciB0aGFuIHRoZSBwcmltYXJ5IGxhbmd1YWdlIG9mIHRoZSBkb2N1bWVudC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZm9yZWlnbnBocmFzZSIgc3Vic3RpdHV0aW9uR3JvdXA9Imdlbi5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZm9yZWlnbnBocmFzZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBmb3JlaWducGhyYXNlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZvcmVpZ25waHJhc2UuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmb3JlaWducGhyYXNlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBmb3JlaWducGhyYXNlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgZm9yZWlnbnBocmFzZS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Imdsb3NzdGVybS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBnbG9zc2FyeSB0ZXJtLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJnbG9zc3Rlcm0iIHN1YnN0aXR1dGlvbkdyb3VwPSJnZW4uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imdsb3NzdGVybS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBnbG9zc3Rlcm0uZWxlbWVudCAtLT4KICA8IS0tIHRvIEdsb3NzRW50cnkgaWYgR2xvc3N0ZXJtIHVzZWQgaW4gdGV4dCAtLT4KICA8IS0tCiAgICBCYXNlRm9ybTogUHJvdmlkZXMgdGhlIGZvcm0gb2YgR2xvc3NUZXJtIHRvIGJlIHVzZWQKICAgIGZvciBpbmRleGluZwogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJnbG9zc3Rlcm0uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImJhc2Vmb3JtIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rZW5kLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZ2xvc3N0ZXJtLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBnbG9zc3Rlcm0uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBnbG9zc3Rlcm0ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmaXJzdHRlcm0ucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgdGVybS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iZmlyc3R0ZXJtIiBzdWJzdGl0dXRpb25Hcm91cD0iZ2VuLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmaXJzdHRlcm0uYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgZmlyc3R0ZXJtLmVsZW1lbnQgLS0+CiAgPCEtLSB0byBHbG9zc0VudHJ5IG9yIG90aGVyIGV4cGxhbmF0aW9uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJmaXJzdHRlcm0uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImJhc2Vmb3JtIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rZW5kLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZmlyc3R0ZXJtLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBmaXJzdHRlcm0uYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBmaXJzdHRlcm0ubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJwaHJhc2Uucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgc3BhbiBvZiB0ZXh0LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJwaHJhc2UiIHN1YnN0aXR1dGlvbkdyb3VwPSJnZW4uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBocmFzZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBwaHJhc2UuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icGhyYXNlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icGhyYXNlLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwaHJhc2UuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwaHJhc2UubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJxdW90ZS5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QW4gaW5saW5lIHF1b3RhdGlvbi4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0icXVvdGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJnZW4uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InF1b3RlLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHF1b3RlLmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InF1b3RlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icXVvdGUucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHF1b3RlLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgcXVvdGUubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzc3NjcmlwdC5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBzdWJzY3JpcHQgKGFzIGluIEh7XjJ9TywgdGhlIG1vbGVjdWxhciBmb3JtdWxhIGZvciB3YXRlcikuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InN1YnNjcmlwdCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluay5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlbXBoYXNpcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icmVwbGFjZWFibGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN5bWJvbCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lZ3JhcGhpYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lbWVkaWFvYmplY3QiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJiYXNlLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJvdGhlci5jaGFyLmNsYXNzIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdWJzY3JpcHQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygc3Vic2NyaXB0LmVsZW1lbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InN1YnNjcmlwdC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNzc2NyaXB0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzdWJzY3JpcHQuYXR0bGlzdCAtLT4KICA8IS0tIGRvYzpBIHN1cGVyc2NyaXB0IChhcyBpbiB4XjIsIHRoZSBtYXRoZW1hdGljYWwgbm90YXRpb24gZm9yIHggbXVsdGlwbGllZCBieSBpdHNlbGYpLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJzdXBlcnNjcmlwdCI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgogICAgICAgIDx4czplbGVtZW50IHJlZj0ibGluay5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlbXBoYXNpcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0icmVwbGFjZWFibGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InN5bWJvbCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lZ3JhcGhpYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lbWVkaWFvYmplY3QiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJiYXNlLmNoYXIuY2xhc3MiLz4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJvdGhlci5jaGFyLmNsYXNzIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzdXBlcnNjcmlwdC5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzdXBlcnNjcmlwdC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzdXBlcnNjcmlwdC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNzc2NyaXB0LnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBzdXBlcnNjcmlwdC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHNzc2NyaXB0Lm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idHJhZGVtYXJrLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHRyYWRlbWFyay4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idHJhZGVtYXJrIiBzdWJzdGl0dXRpb25Hcm91cD0iZ2VuLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmsuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0idGVjaC5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iYmFzZS5jaGFyLmNsYXNzIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0ib3RoZXIuY2hhci5jbGFzcyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lZ3JhcGhpYyIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5saW5lbWVkaWFvYmplY3QiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImVtcGhhc2lzIi8+CiAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0cmFkZW1hcmsuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgdHJhZGVtYXJrLmVsZW1lbnQgLS0+CiAgPCEtLSBDbGFzczogTW9yZSBwcmVjaXNlbHkgaWRlbnRpZmllcyB0aGUgaXRlbSB0aGUgZWxlbWVudCBuYW1lcyAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idHJhZGVtYXJrLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgZGVmYXVsdD0idHJhZGUiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzZXJ2aWNlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRyYWRlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlZ2lzdGVyZWQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY29weXJpZ2h0Ii8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0cmFkZW1hcmsucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHRyYWRlbWFyay5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHRyYWRlbWFyay5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IndvcmRhc3dvcmQucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgd29yZCBtZWFudCBzcGVjaWZpY2FsbHkgYXMgYSB3b3JkIGFuZCBub3QgcmVwcmVzZW50aW5nIGFueXRoaW5nIGVsc2UuIC0tPgogIDx4czplbGVtZW50IG5hbWU9IndvcmRhc3dvcmQiIHN1YnN0aXR1dGlvbkdyb3VwPSJnZW4uY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ3b3JkLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9IndvcmRhc3dvcmQuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2Ygd29yZGFzd29yZC5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ3b3JkYXN3b3JkLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0id29yZGFzd29yZC5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygd29yZGFzd29yZC5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHdvcmRhc3dvcmQubW9kdWxlIC0tPgogIDwhLS0gTGlua3MgYW5kIGNyb3NzLXJlZmVyZW5jZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ibGluay5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBoeXBlcnRleHQgbGluay4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ibGluayIgc3Vic3RpdHV0aW9uR3JvdXA9ImxpbmsuY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmsuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgbGluay5lbGVtZW50IC0tPgogIDwhLS0KICAgIEVuZHRlcm06IElEIG9mIGVsZW1lbnQgY29udGFpbmluZyB0ZXh0IHRoYXQgaXMgdG8gYmUKICAgIGZldGNoZWQgZnJvbSBlbHNld2hlcmUgaW4gdGhlIGRvY3VtZW50IHRvIGFwcGVhciBhcwogICAgdGhlIGNvbnRlbnQgb2YgdGhpcyBlbGVtZW50CiAgLS0+CiAgPCEtLSB0byBsaW5rZWQtdG8gb2JqZWN0IC0tPgogIDwhLS0gVHlwZTogRnJlZWx5IGFzc2lnbmFibGUgcGFyYW1ldGVyIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsaW5rLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJlbmR0ZXJtIiB0eXBlPSJ4czpJRFJFRiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ4cmVmc3R5bGUiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idHlwZSIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGlua2VuZHJlcS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Imxpbmsucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGxpbmsuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBsaW5rLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ib2xpbmsucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgbGluayB0aGF0IGFkZHJlc3NlcyBpdHMgdGFyZ2V0IGluZGlyZWN0bHksIHRocm91Z2ggYW4gZW50aXR5LiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJvbGluayIgc3Vic3RpdHV0aW9uR3JvdXA9ImxpbmsuY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9Im9saW5rLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIG9saW5rLmVsZW1lbnQgLS0+CiAgPCEtLSBUYXJnZXREb2NFbnQ6IE5hbWUgb2YgYW4gZW50aXR5IHRvIGJlIHRoZSB0YXJnZXQgb2YgdGhlIGxpbmsgLS0+CiAgPCEtLQogICAgTGlua01vZGU6IElEIG9mIGEgTW9kZVNwZWMgY29udGFpbmluZyBpbnN0cnVjdGlvbnMgZm9yCiAgICBvcGVyYXRpbmcgb24gdGhlIGVudGl0eSBuYW1lZCBieSBUYXJnZXREb2NFbnQKICAtLT4KICA8IS0tIExvY2FsSW5mbzogSW5mb3JtYXRpb24gdGhhdCBtYXkgYmUgcGFzc2VkIHRvIE1vZGVTcGVjIC0tPgogIDwhLS0gVHlwZTogRnJlZWx5IGFzc2lnbmFibGUgcGFyYW1ldGVyIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvbGluay5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idGFyZ2V0ZG9jZW50IiB0eXBlPSJ4czpFTlRJVFkiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGlua21vZGUiIHR5cGU9InhzOklEUkVGIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImxvY2FsaW5mbyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InRhcmdldGRvYyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0YXJnZXRwdHIiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ieHJlZnN0eWxlIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJvbGluay5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygb2xpbmsuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBvbGluay5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InVsaW5rLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIGxpbmsgdGhhdCBhZGRyZXNzZXMgaXRzIHRhcmdldCBieSBtZWFucyBvZiBhIFVSTCAoVW5pZm9ybSBSZXNvdXJjZSBMb2NhdG9yKS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idWxpbmsiIHN1YnN0aXR1dGlvbkdyb3VwPSJsaW5rLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ1bGluay5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB1bGluay5lbGVtZW50IC0tPgogIDwhLS0gVVJMOiB1bmlmb3JtIHJlc291cmNlIGxvY2F0b3I7IHRoZSB0YXJnZXQgb2YgdGhlIFVMaW5rIC0tPgogIDwhLS0gVHlwZTogRnJlZWx5IGFzc2lnbmFibGUgcGFyYW1ldGVyIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ1bGluay5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXJsIiB1c2U9InJlcXVpcmVkIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InR5cGUiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ieHJlZnN0eWxlIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ1bGluay5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdWxpbmsuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiB1bGluay5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImZvb3Rub3RlcmVmLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIGNyb3NzIHJlZmVyZW5jZSB0byBhIGZvb3Rub3RlIChhIGZvb3Rub3RlIG1hcmspLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJmb290bm90ZXJlZiIgc3Vic3RpdHV0aW9uR3JvdXA9InhyZWYuY2hhci5jbGFzcyI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImZvb3Rub3RlcmVmLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGZvb3Rub3RlcmVmLmVsZW1lbnQgLS0+CiAgPCEtLSB0byBmb290bm90ZSBjb250ZW50IHN1cHBsaWVkIGVsc2V3aGVyZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZm9vdG5vdGVyZWYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rZW5kcmVxLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ibGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJmb290bm90ZXJlZi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgZm9vdG5vdGVyZWYuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBmb290bm90ZXJlZi5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InhyZWYucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgY3Jvc3MgcmVmZXJlbmNlIHRvIGFub3RoZXIgcGFydCBvZiB0aGUgZG9jdW1lbnQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InhyZWYiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4cmVmLmNoYXIuY2xhc3MiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ4cmVmLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHhyZWYuZWxlbWVudCAtLT4KICA8IS0tCiAgICBFbmR0ZXJtOiBJRCBvZiBlbGVtZW50IGNvbnRhaW5pbmcgdGV4dCB0aGF0IGlzIHRvIGJlCiAgICBmZXRjaGVkIGZyb20gZWxzZXdoZXJlIGluIHRoZSBkb2N1bWVudCB0byBhcHBlYXIgYXMKICAgIHRoZSBjb250ZW50IG9mIHRoaXMgZWxlbWVudAogIC0tPgogIDwhLS0gdG8gbGlua2VkLXRvIG9iamVjdCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ieHJlZi5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZW5kdGVybSIgdHlwZT0ieHM6SURSRUYiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ieHJlZnN0eWxlIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsaW5rZW5kcmVxLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ieHJlZi5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgeHJlZi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIHhyZWYubW9kdWxlIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9yZWYucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgY3Jvc3MgcmVmZXJlbmNlIHRvIGEgYmlibGlvZ3JhcGhpYyBlbnRyeS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0iYmlibGlvcmVmIiBzdWJzdGl0dXRpb25Hcm91cD0ieHJlZi5jaGFyLmNsYXNzIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYmlibGlvcmVmLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIGJpYmxpb3JlZi5lbGVtZW50IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJiaWJsaW9yZWYuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImVuZHRlcm0iIHR5cGU9InhzOklEUkVGIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InhyZWZzdHlsZSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1bml0cyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJiZWdpbiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJlbmQiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImxpbmtlbmRyZXEuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiaWJsaW9yZWYucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJpYmxpb3JlZi5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJpYmxpb3JlZi5tb2R1bGUgLS0+CiAgPCEtLSBVYmlxdWl0b3VzIGVsZW1lbnRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhbmNob3Iucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOkEgc3BvdCBpbiB0aGUgZG9jdW1lbnQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImFuY2hvciI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFuY2hvci5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBhbmNob3IuZWxlbWVudCAtLT4KICA8IS0tIHJlcXVpcmVkIC0tPgogIDwhLS0gcmVwbGFjZXMgTGFuZyAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYW5jaG9yLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaWRyZXEuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYWdlbnVtLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icmVtYXAuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ4cmVmbGFiZWwuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyZXZpc2lvbmZsYWcuYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJlZmZlY3Rpdml0eS5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImFuY2hvci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgYW5jaG9yLmF0dGxpc3QgLS0+CiAgPCEtLSBlbmQgb2YgYW5jaG9yLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iYmVnaW5wYWdlLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpUaGUgbG9jYXRpb24gb2YgYSBwYWdlIGJyZWFrIGluIGEgcHJpbnQgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImJlZ2lucGFnZSI+CiAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImJlZ2lucGFnZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBiZWdpbnBhZ2UuZWxlbWVudCAtLT4KICA8IS0tIFBhZ2VOdW06IE51bWJlciBvZiBwYWdlIHRoYXQgYmVnaW5zIGF0IHRoaXMgcG9pbnQgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJlZ2lucGFnZS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InBhZ2VudW0uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJiZWdpbnBhZ2Uucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGJlZ2lucGFnZS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGJlZ2lucGFnZS5tb2R1bGUgLS0+CiAgPCEtLQogICAgSW5kZXhUZXJtcyBhcHBlYXIgaW4gdGhlIHRleHQgZmxvdyBmb3IgZ2VuZXJhdGluZyBvciBsaW5raW5nIGFuCiAgICBpbmRleC4KICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iaW5kZXh0ZXJtLnJvbGUuYXR0cmliIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGRvYzpBIHdyYXBwZXIgZm9yIHRlcm1zIHRvIGJlIGluZGV4ZWQuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImluZGV4dGVybSIgc3Vic3RpdHV0aW9uR3JvdXA9Im5keHRlcm0uY2xhc3MiLz4KICA8IS0tIGVuZCBvZiBpbmRleHRlcm0uZWxlbWVudCAtLT4KICA8IS0tCiAgICBTY29wZTogSW5kaWNhdGVzIHdoaWNoIGdlbmVyYXRlZCBpbmRpY2VzIHRoZSBJbmRleFRlcm0KICAgIHNob3VsZCBhcHBlYXIgaW46IEdsb2JhbCAod2hvbGUgZG9jdW1lbnQgc2V0KSwgTG9jYWwgKHRoaXMKICAgIGRvY3VtZW50IG9ubHkpLCBvciBBbGwgKGJvdGgpCiAgLS0+CiAgPCEtLQogICAgU2lnbmlmaWNhbmNlOiBXaGV0aGVyIHRoaXMgSW5kZXhUZXJtIGlzIHRoZSBtb3N0IHBlcnRpbmVudAogICAgb2YgaXRzIHNlcmllcyAoUHJlZmVycmVkKSBvciBub3QgKE5vcm1hbCwgdGhlIGRlZmF1bHQpCiAgLS0+CiAgPCEtLQogICAgQ2xhc3M6IEluZGljYXRlcyB0eXBlIG9mIEluZGV4VGVybTsgZGVmYXVsdCBpcyBTaW5ndWxhciwKICAgIG9yIEVuZE9mUmFuZ2UgaWYgU3RhcnRSZWYgaXMgc3VwcGxpZWQ7IFN0YXJ0T2ZSYW5nZSB2YWx1ZQogICAgbXVzdCBiZSBzdXBwbGllZCBleHBsaWNpdGx5IG9uIHN0YXJ0cyBvZiByYW5nZXMKICAtLT4KICA8IS0tCiAgICBTdGFydFJlZjogSUQgb2YgdGhlIEluZGV4VGVybSB0aGF0IHN0YXJ0cyB0aGUgaW5kZXhpbmcKICAgIHJhbmdlIGVuZGVkIGJ5IHRoaXMgSW5kZXhUZXJtCiAgLS0+CiAgPCEtLQogICAgWm9uZTogSURzIG9mIHRoZSBlbGVtZW50cyB0byB3aGljaCB0aGUgSW5kZXhUZXJtIGFwcGxpZXMsCiAgICBhbmQgaW5kaWNhdGVzIHRoYXQgdGhlIEluZGV4VGVybSBhcHBsaWVzIHRvIHRob3NlIGVudGlyZQogICAgZWxlbWVudHMgcmF0aGVyIHRoYW4gdGhlIHBvaW50IGF0IHdoaWNoIHRoZSBJbmRleFRlcm0KICAgIG9jY3VycwogIC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJpbmRleHRlcm0uYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwYWdlbnVtLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzY29wZSI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImFsbCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJnbG9iYWwiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibG9jYWwiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2lnbmlmaWNhbmNlIiBkZWZhdWx0PSJub3JtYWwiPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwcmVmZXJyZWQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibm9ybWFsIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2luZ3VsYXIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic3RhcnRvZnJhbmdlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImVuZG9mcmFuZ2UiLz4KICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmF0dHJpYnV0ZT4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3RhcnRyZWYiIHR5cGU9InhzOklEUkVGIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InpvbmUiIHR5cGU9InhzOklEUkVGUyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJpbmRleHRlcm0ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIGluZGV4dGVybS5hdHRsaXN0IC0tPgogIDwhLS0gZW5kIG9mIGluZGV4dGVybS5tb2R1bGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InByaW1zZWN0ZXIucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZG9jOlRoZSBwcmltYXJ5IHdvcmQgb3IgcGhyYXNlIHVuZGVyIHdoaWNoIGFuIGluZGV4IHRlcm0gc2hvdWxkIGJlIHNvcnRlZC4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0icHJpbWFyeSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByaW1hcnkuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBlbmQgb2YgcHJpbWFyeS5lbGVtZW50IC0tPgogIDwhLS0KICAgIFNvcnRBczogQWx0ZXJuYXRlIHNvcnQgc3RyaW5nIGZvciBpbmRleCBzb3J0aW5nLCBlLmcuLAogICAgImZvdXJ0ZWVuIiBmb3IgYW4gZWxlbWVudCBjb250YWluaW5nICIxNCIKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0icHJpbWFyeS5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic29ydGFzIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJwcmltc2VjdGVyLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIGVuZCBvZiBwcmltYXJ5LmF0dGxpc3QgLS0+CiAgPCEtLSBkb2M6QSBzZWNvbmRhcnkgd29yZCBvciBwaHJhc2UgaW4gYW4gaW5kZXggdGVybS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0ic2Vjb25kYXJ5Ij4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpncm91cCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5keHRlcm0uY2hhci5taXgiLz4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2Vjb25kYXJ5LmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlY29uZGFyeS5lbGVtZW50IC0tPgogIDwhLS0KICAgIFNvcnRBczogQWx0ZXJuYXRlIHNvcnQgc3RyaW5nIGZvciBpbmRleCBzb3J0aW5nLCBlLmcuLAogICAgImZvdXJ0ZWVuIiBmb3IgYW4gZWxlbWVudCBjb250YWluaW5nICIxNCIKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2Vjb25kYXJ5LmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzb3J0YXMiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InByaW1zZWN0ZXIucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gZW5kIG9mIHNlY29uZGFyeS5hdHRsaXN0IC0tPgogIDwhLS0gZG9jOkEgdGVydGlhcnkgd29yZCBvciBwaHJhc2UgaW4gYW4gaW5kZXggdGVybS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idGVydGlhcnkiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmR4dGVybS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0ZXJ0aWFyeS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiB0ZXJ0aWFyeS5lbGVtZW50IC0tPgogIDwhLS0KICAgIFNvcnRBczogQWx0ZXJuYXRlIHNvcnQgc3RyaW5nIGZvciBpbmRleCBzb3J0aW5nLCBlLmcuLAogICAgImZvdXJ0ZWVuIiBmb3IgYW4gZWxlbWVudCBjb250YWluaW5nICIxNCIKICAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGVydGlhcnkuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNvcnRhcyIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icHJpbXNlY3Rlci5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2YgdGVydGlhcnkuYXR0bGlzdCAtLT4KICA8IS0tIGVuZCBvZiBwcmltc2VjdGVyLm1vZHVsZSAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2Vlc2VlYWxzby5yb2xlLmF0dHJpYiI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJyb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6UGFydCBvZiBhbiBpbmRleCB0ZXJtIGRpcmVjdGluZyB0aGUgcmVhZGVyIGluc3RlYWQgdG8gYW5vdGhlciBlbnRyeSBpbiB0aGUgaW5kZXguIC0tPgogIDx4czplbGVtZW50IG5hbWU9InNlZSI+CiAgICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgogICAgICA8eHM6Z3JvdXAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJuZHh0ZXJtLmNoYXIubWl4Ii8+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlZS5hdHRsaXN0Ii8+CiAgICA8L3hzOmNvbXBsZXhUeXBlPgogIDwveHM6ZWxlbWVudD4KICA8IS0tIGVuZCBvZiBzZWUuZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VlLmF0dGxpc3QiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY29tbW9uLmF0dHJpYiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2Vlc2VlYWxzby5yb2xlLmF0dHJpYiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBlbmQgb2Ygc2VlLmF0dGxpc3QgLS0+CiAgPCEtLSBkb2M6UGFydCBvZiBhbiBpbmRleCB0ZXJtIGRpcmVjdGluZyB0aGUgcmVhZGVyIGFsc28gdG8gYW5vdGhlciBlbnRyeSBpbiB0aGUgaW5kZXguIC0tPgogIDx4czplbGVtZW50IG5hbWU9InNlZWFsc28iPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmdyb3VwIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibmR4dGVybS5jaGFyLm1peCIvPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWVhbHNvLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZW5kIG9mIHNlZWFsc28uZWxlbWVudCAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VlYWxzby5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InNlZXNlZWFsc28ucm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgo8L3hzOnNjaGVtYT4KPCEtLSBlbmQgb2Ygc2VlYWxzby5hdHRsaXN0IC0tPgo8IS0tIGVuZCBvZiBzZWVzZWVhbHNvLm1vZHVsZSAtLT4KPCEtLSBlbmQgb2YgaW5kZXh0ZXJtLmNvbnRlbnQubW9kdWxlIC0tPgo8IS0tIEVuZCBvZiBEb2NCb29rIFhNTCBpbmZvcm1hdGlvbiBwb29sIG1vZHVsZSBWNC41IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4K</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Docbook/4_5/docbook.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIERvY0Jvb2sgWE1MIERURCBWNC41IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRmlsZSBkb2Nib29reC5kdGQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIENvcHlyaWdodCAxOTkyLTIwMDYgSGFMIENvbXB1dGVyIFN5c3RlbXMsIEluYy4sCiAgTydSZWlsbHkgJiBBc3NvY2lhdGVzLCBJbmMuLCBBcmJvclRleHQsIEluYy4sIEZ1aml0c3UgU29mdHdhcmUKICBDb3Jwb3JhdGlvbiwgTm9ybWFuIFdhbHNoLCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCBhbmQgdGhlCiAgT3JnYW5pemF0aW9uIGZvciB0aGUgQWR2YW5jZW1lbnQgb2YgU3RydWN0dXJlZCBJbmZvcm1hdGlvbgogIFN0YW5kYXJkcyAoT0FTSVMpLgogIAogIFNlZSBhbHNvIGh0dHA6Ly9kb2Nib29rLm9yZy9zcGVjcy8KICAKICAkSWQ6IGRvY2Jvb2t4LmR0ZCA2MzQwIDIwMDYtMTAtMDMgMTM6MjM6MjRaIG53YWxzaCAkCiAgCiAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jQm9vayBYTUwgRFRECiAgYW5kIGl0cyBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlCiAgaXMgaGVyZWJ5IGdyYW50ZWQgaW4gcGVycGV0dWl0eSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CiAgbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBhcHBlYXIgaW4gYWxsIGNvcGllcy4gIFRoZSBjb3B5cmlnaHQKICBob2xkZXJzIG1ha2Ugbm8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoZSBEVEQgZm9yCiAgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzc2VkIG9yIGltcGxpZWQKICB3YXJyYW50eS4KICAKICBJZiB5b3UgbW9kaWZ5IHRoZSBEb2NCb29rIERURCBpbiBhbnkgd2F5LCBleGNlcHQgZm9yIGRlY2xhcmluZyBhbmQKICByZWZlcmVuY2luZyBhZGRpdGlvbmFsIHNldHMgb2YgZ2VuZXJhbCBlbnRpdGllcyBhbmQgZGVjbGFyaW5nCiAgYWRkaXRpb25hbCBub3RhdGlvbnMsIGxhYmVsIHlvdXIgRFREIGFzIGEgdmFyaWFudCBvZiBEb2NCb29rLiAgU2VlCiAgdGhlIG1haW50ZW5hbmNlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgCiAgUGxlYXNlIGRpcmVjdCBhbGwgcXVlc3Rpb25zLCBidWcgcmVwb3J0cywgb3Igc3VnZ2VzdGlvbnMgZm9yCiAgY2hhbmdlcyB0byB0aGUgZG9jYm9va0BsaXN0cy5vYXNpcy1vcGVuLm9yZyBtYWlsaW5nIGxpc3QuIEZvciBtb3JlCiAgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2svLgotLT4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tCiAgVGhpcyBpcyB0aGUgZHJpdmVyIGZpbGUgZm9yIFY0LjUgb2YgdGhlIERvY0Jvb2sgRFRELgogIFBsZWFzZSB1c2UgdGhlIGZvbGxvd2luZyBmb3JtYWwgcHVibGljIGlkZW50aWZpZXIgdG8gaWRlbnRpZnkgaXQ6CiAgCiAgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuNS8vRU4iCiAgCiAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgZG9jdW1lbnQncyB0b3AtbGV2ZWwgZWxlbWVudCBpcyBCb29rLCBhbmQKICB5b3UgYXJlIHVzaW5nIERvY0Jvb2sgZGlyZWN0bHksIHVzZSB0aGUgRlBJIGluIHRoZSBET0NUWVBFCiAgZGVjbGFyYXRpb246CiAgCiAgPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjUvL0VOIgogICAgICAgICAgICAgICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuNS9kb2Nib29reC5kdGQiCiAgICAgICAgICAgICAgICAgWy4uLl0+CiAgCiAgT3IsIGlmIHlvdSBoYXZlIGEgaGlnaGVyLWxldmVsIGRyaXZlciBmaWxlIHRoYXQgY3VzdG9taXplcyBEb2NCb29rLAogIHVzZSB0aGUgRlBJIGluIHRoZSBwYXJhbWV0ZXIgZW50aXR5IGRlY2xhcmF0aW9uOgogIAogIDwhRU5USVRZICUgRG9jQm9va0RURCBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuNS8vRU4iCiAgICAgICAgICAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjUvZG9jYm9va3guZHRkIj4KICAlRG9jQm9va0RURDsKICAKICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoZSBwYXJhbWV0ZXIKICBlbnRpdHkgYW5kIG1vZHVsZSBzY2hlbWUgdXNlZCBpbiBEb2NCb29rLCBjdXN0b21pemluZyBEb2NCb29rIGFuZAogIHBsYW5uaW5nIGZvciBpbnRlcmNoYW5nZSwgYW5kIGNoYW5nZXMgbWFkZSBzaW5jZSB0aGUgbGFzdCByZWxlYXNlCiAgb2YgRG9jQm9vay4KLS0+CjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLSBFbmFibGUgU0dNTCBmZWF0dXJlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gTm90YXRpb24gZGVjbGFyYXRpb25zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KICA8eHM6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iZGJub3RueC54c2QiLz4KICA8eHM6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iZGJwb29seC54c2QiLz4KICA8eHM6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iZGJoaWVyeC54c2QiLz4KICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiBzY2hlbWFMb2NhdGlvbj0ieG1sLnhzZCIvPgogIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIElTTyBjaGFyYWN0ZXIgZW50aXR5IHNldHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBldXJvIHNpZ24sIFUrMjBBQyBORVcgLS0+CiAgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgogIDwhLS0gRFREIG1vZHVsZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KICA8IS0tIEluZm9ybWF0aW9uIHBvb2wgLi4uLi4uLi4uLi4uLi4gLS0+CiAgPCEtLSBSZWRlY2xhcmF0aW9uIHBsYWNlaG9sZGVyIC4uLi4uIC0tPgogIDwhLS0gRG9jdW1lbnQgaGllcmFyY2h5IC4uLi4uLi4uLi4uLiAtLT4KPC94czpzY2hlbWE+CjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLSBPdGhlciBnZW5lcmFsIGVudGl0aWVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIEVuZCBvZiBEb2NCb29rIFhNTCBEVEQgVjQuNSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4K</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Docbook/4_5/htmltblx.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo8IS0tIERvY0Jvb2sgWE1MIEhUTUwgVGFibGUgTW9kdWxlIFY0LjUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0gRmlsZSBodG1sdGJseC5tb2QgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLQogIENvcHlyaWdodCAyMDAzLTIwMDYgQXJib3JUZXh0LCBJbmMuLCBOb3JtYW4gV2Fsc2gsIFN1biBNaWNyb3N5c3RlbXMsCiAgSW5jLiwgYW5kIHRoZSBPcmdhbml6YXRpb24gZm9yIHRoZSBBZHZhbmNlbWVudCBvZiBTdHJ1Y3R1cmVkIEluZm9ybWF0aW9uCiAgU3RhbmRhcmRzIChPQVNJUykuCiAgCiAgJElkOiBodG1sdGJseC5tb2QgNjM0MCAyMDA2LTEwLTAzIDEzOjIzOjI0WiBud2Fsc2ggJAogIAogIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY0Jvb2sgWE1MIERURAogIGFuZCBpdHMgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZQogIGlzIGhlcmVieSBncmFudGVkIGluIHBlcnBldHVpdHksIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAogIG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggYXBwZWFyIGluIGFsbCBjb3BpZXMuICBUaGUgY29weXJpZ2h0CiAgaG9sZGVycyBtYWtlIG5vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGUgRFREIGZvcgogIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3NlZCBvciBpbXBsaWVkCiAgd2FycmFudHkuCiAgCiAgSWYgeW91IG1vZGlmeSB0aGUgRG9jQm9vayBYTUwgRFREIGluIGFueSB3YXksIGV4Y2VwdCBmb3IgZGVjbGFyaW5nIGFuZAogIHJlZmVyZW5jaW5nIGFkZGl0aW9uYWwgc2V0cyBvZiBnZW5lcmFsIGVudGl0aWVzIGFuZCBkZWNsYXJpbmcKICBhZGRpdGlvbmFsIG5vdGF0aW9ucywgbGFiZWwgeW91ciBEVEQgYXMgYSB2YXJpYW50IG9mIERvY0Jvb2suICBTZWUKICB0aGUgbWFpbnRlbmFuY2UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAKICBQbGVhc2UgZGlyZWN0IGFsbCBxdWVzdGlvbnMsIGJ1ZyByZXBvcnRzLCBvciBzdWdnZXN0aW9ucyBmb3IKICBjaGFuZ2VzIHRvIHRoZSBkb2Nib29rQGxpc3RzLm9hc2lzLW9wZW4ub3JnIG1haWxpbmcgbGlzdC4gRm9yIG1vcmUKICBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay8uCi0tPgo8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CjwhLS0KICBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIGVsZW1lbnRzIHRoYXQgYXJlCiAgaXNvbW9ycGhpYyB0byB0aGUgSFRNTCBlbGVtZW50cy4gT25lIGNvdWxkIGFyZ3VlIHdlIHNob3VsZAogIGluc3RlYWQgaGF2ZSBiYXNlZCBvdXJzZWx2ZXMgb24gdGhlIFhIVE1MIFRhYmxlIE1vZHVsZSwgYnV0IHRoZQogIEhUTUwgb25lIGlzIG1vcmUgbGlrZSB3aGF0IGJyb3dzZXJzIGFyZSBsaWtlbHkgdG8gYWNjZXB0IHRvZGF5CiAgYW5kIHVzZXJzIGFyZSBsaWtlbHkgdG8gdXNlLgogIAogIFRoaXMgbW9kdWxlIGhhcyBiZWVuIGRldmVsb3BlZCBmb3IgdXNlIHdpdGggdGhlIERvY0Jvb2sgVjQuNQogICJ1bmlvbiB0YWJsZSBtb2RlbCIgaW4gd2hpY2ggZWxlbWVudHMgYW5kIGF0dGxpc3RzIGNvbW1vbiB0byBib3RoCiAgbW9kZWxzIGFyZSBkZWZpbmVkIChhcyB0aGUgdW5pb24pIGluIHRoZSBDQUxTIHRhYmxlIG1vZHVsZSBieQogIHNldHRpbmcgdmFyaW91cyBwYXJhbWV0ZXIgZW50aXRpZXMgYXBwcm9wcmlhdGVseSBpbiB0aGlzIGZpbGUuCiAgCiAgSW4gRFREIGRyaXZlciBmaWxlcyByZWZlcnJpbmcgdG8gdGhpcyBtb2R1bGUsIHBsZWFzZSB1c2UgYW4gZW50aXR5CiAgZGVjbGFyYXRpb24gdGhhdCB1c2VzIHRoZSBwdWJsaWMgaWRlbnRpZmllciBzaG93biBiZWxvdzoKICAKICA8IUVOVElUWSAlIGh0bWx0YmwgUFVCTElDCiAgIi0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBIVE1MIFRhYmxlcyBWNC41Ly9FTiIKICAiaHRtbHRibHgubW9kIj4KICAlaHRtbHRibDsKICAKICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoZSBwYXJhbWV0ZXIKICBlbnRpdHkgYW5kIG1vZHVsZSBzY2hlbWUgdXNlZCBpbiBEb2NCb29rLCBjdXN0b21pemluZyBEb2NCb29rIGFuZAogIHBsYW5uaW5nIGZvciBpbnRlcmNoYW5nZSwgYW5kIGNoYW5nZXMgbWFkZSBzaW5jZSB0aGUgbGFzdCByZWxlYXNlCiAgb2YgRG9jQm9vay4KLS0+CjwhLS0gPT09PT09PT09PT09PT09PT09PT09PT0gWEhUTUwgVGFibGVzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiBzY2hlbWFMb2NhdGlvbj0ieG1sLnhzZCIvPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJodG1sLmNvcmVhdHRycyI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb21tb24uYXR0cmliIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNsYXNzIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InN0eWxlIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InRpdGxlIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tIERvZXMgbm90IGNvbnRhaW4gbGFuZyBvciBkaXIgYmVjYXVzZSB0aGV5IGFyZSBpbiAlY29tbW9uLmF0dHJpYnMgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImkxOG4iPgogICAgPHhzOmF0dHJpYnV0ZSByZWY9InhtbDpsYW5nIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iZXZlbnRzIj4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib25jbGljayIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvbmRibGNsaWNrIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im9ubW91c2Vkb3duIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im9ubW91c2V1cCIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvbm1vdXNlb3ZlciIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvbm1vdXNlbW92ZSIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvbm1vdXNlb3V0Ii8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im9ua2V5cHJlc3MiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib25rZXlkb3duIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im9ua2V5dXAiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJhdHRycyI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJodG1sLmNvcmVhdHRycyIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaTE4biIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iZXZlbnRzIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY2VsbGhhbGlnbiI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFsaWduIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGVmdCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjZW50ZXIiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmlnaHQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ianVzdGlmeSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjaGFyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNoYXIiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2hhcm9mZiIvPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImNlbGx2YWxpZ24iPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2YWxpZ24iPgogICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0b3AiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibWlkZGxlIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImJvdHRvbSIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJiYXNlbGluZSIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogIDwveHM6YXR0cmlidXRlR3JvdXA+CiAgPCEtLSBkb2M6QSBncm91cCBvZiBjb2x1bW5zIGluIGFuIEhUTUwgdGFibGUuIC0tPgogIDx4czplbGVtZW50IG5hbWU9ImNvbGdyb3VwIj4KICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29sIi8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbGdyb3VwLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDwhLS0gZG9jOlNwZWNpZmljYXRpb25zIGZvciBhIGNvbHVtbiBpbiBhbiBIVE1MIHRhYmxlLiAtLT4KICA8eHM6ZWxlbWVudCBuYW1lPSJjb2wiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjb2wuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBkb2M6QSByb3cgaW4gYW4gSFRNTCB0YWJsZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idHIiPgogICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRoIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0ZCIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idHIuYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBkb2M6QSB0YWJsZSBoZWFkZXIgZW50cnkgaW4gYW4gSFRNTCB0YWJsZS4gLS0+CiAgPHhzOmVsZW1lbnQgbmFtZT0idGgiPgogICAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICA8eHM6Z3JvdXAgcmVmPSJwYXJhLmNoYXIubWl4Ii8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0idGFiZW50cnkubWl4Ii8+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ0YWJsZSIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0iaW5mb3JtYWx0YWJsZSIvPgogICAgICA8L3hzOmNob2ljZT4KICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGguYXR0bGlzdCIvPgogICAgPC94czpjb21wbGV4VHlwZT4KICA8L3hzOmVsZW1lbnQ+CiAgPCEtLSBkb2M6QSB0YWJsZSBudHJ5IGluIGFuIEhUTUwgdGFibGUuIC0tPgogIDx4czplbGVtZW50IG5hbWU9InRkIj4KICAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+CiAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0icGFyYS5jaGFyLm1peCIvPgogICAgICAgIDx4czpncm91cCByZWY9InRhYmVudHJ5Lm1peCIvPgogICAgICAgIDx4czplbGVtZW50IHJlZj0idGFibGUiLz4KICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImluZm9ybWFsdGFibGUiLz4KICAgICAgPC94czpjaG9pY2U+CiAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRkLmF0dGxpc3QiLz4KICAgIDwveHM6Y29tcGxleFR5cGU+CiAgPC94czplbGVtZW50PgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb2xncm91cC5hdHRsaXN0Ij4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImF0dHJzIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNwYW4iIGRlZmF1bHQ9IjEiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0id2lkdGgiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNlbGxoYWxpZ24iLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNlbGx2YWxpZ24iLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb2wuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhdHRycyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzcGFuIiBkZWZhdWx0PSIxIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9IndpZHRoIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjZWxsaGFsaWduIi8+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJjZWxsdmFsaWduIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idHIuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhdHRycyIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2VsbGhhbGlnbiIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iY2VsbHZhbGlnbiIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJiZ2NvbG9yIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGguYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhdHRycyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhYmJyIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImF4aXMiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaGVhZGVycyIgdHlwZT0ieHM6SURSRUZTIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNjb3BlIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icm93Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNvbCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyb3dncm91cCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjb2xncm91cCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyb3dzcGFuIiBkZWZhdWx0PSIxIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbHNwYW4iIGRlZmF1bHQ9IjEiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNlbGxoYWxpZ24iLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNlbGx2YWxpZ24iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibm93cmFwIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibm93cmFwIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImJnY29sb3IiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0id2lkdGgiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaGVpZ2h0Ii8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGQuYXR0bGlzdCI+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJhdHRycyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhYmJyIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImF4aXMiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaGVhZGVycyIgdHlwZT0ieHM6SURSRUZTIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNjb3BlIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icm93Ii8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNvbCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyb3dncm91cCIvPgogICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjb2xncm91cCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyb3dzcGFuIiBkZWZhdWx0PSIxIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbHNwYW4iIGRlZmF1bHQ9IjEiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNlbGxoYWxpZ24iLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNlbGx2YWxpZ24iLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibm93cmFwIj4KICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibm93cmFwIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImJnY29sb3IiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0id2lkdGgiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaGVpZ2h0Ii8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KICA8IS0tCiAgICBTZXQgdXAgdG8gcmVhZCBpbiB0aGUgQ0FMUyBtb2RlbCBjb25maWd1cmVkIHRvCiAgICBtZXJnZSB3aXRoIHRoZSBYSFRNTCB0YWJsZSBtb2RlbAogIC0tPgogIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJ0YWJsZXMucm9sZS5hdHRyaWIiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0icm9sZS5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gQWRkIGxhYmVsIGFuZCByb2xlIGF0dHJpYnV0ZXMgdG8gdGFibGUgYW5kIGluZm9ybWFsdGFibGUgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImJvZHlhdHQiPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmbG9hdHN0eWxlIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJvd2hlYWRlciI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImZpcnN0Y29sIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5vcm93aGVhZGVyIi8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJsYWJlbC5hdHRyaWIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0KICAgIEFkZCBjb21tb24gYXR0cmlidXRlcyB0byBUYWJsZSwgVEdyb3VwLCBUQm9keSwgVEhlYWQsIFRGb290LCBSb3csIAogICAgRW50cnlUYmwsIGFuZCBFbnRyeSAoYW5kIEluZm9ybWFsVGFibGUgZWxlbWVudCkuCiAgLS0+CiAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNlY3VyIj4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImNvbW1vbi5hdHRyaWIiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3R5bGUiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idGl0bGUiLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImkxOG4iLz4KICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9ImV2ZW50cyIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idGFibGVzLnJvbGUuYXR0cmliIi8+CiAgPC94czphdHRyaWJ1dGVHcm91cD4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0iY29tbW9uLnRhYmxlLmF0dHJpYnMiPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYm9keWF0dCIvPgogICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VjdXIiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDwhLS0gQ29udGVudCBtb2RlbCBmb3IgVGFibGUgKHRoYXQgYWxzbyBhbGxvd3MgSFRNTCB0YWJsZXMpIC0tPgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0YmwudGFibGUubWRsIj4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iYmxvY2tpbmZvIi8+CiAgICAgICAgPHhzOmdyb3VwIHJlZj0iZm9ybWFsb2JqZWN0LnRpdGxlLmNvbnRlbnQiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im5keHRlcm0uY2xhc3MiLz4KICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRleHRvYmplY3QiLz4KICAgICAgICA8eHM6Y2hvaWNlPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZ3JhcGhpYyIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibWVkaWFvYmplY3QiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRncm91cCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJjYXB0aW9uIi8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY29sIi8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbGdyb3VwIi8+CiAgICAgICAgPC94czpjaG9pY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRoZWFkIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9InRmb290Ii8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRib2R5Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0ciIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICA8L3hzOnNlcXVlbmNlPgogICAgPC94czpjaG9pY2U+CiAgPC94czpjb21wbGV4VHlwZT4KICA8eHM6Z3JvdXAgbmFtZT0iaW5mb3JtYWwudGJsLnRhYmxlLm1kbCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0ZXh0b2JqZWN0Ii8+CiAgICAgICAgPHhzOmNob2ljZT4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImdyYXBoaWMiLz4KICAgICAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1lZGlhb2JqZWN0Ii8+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0Z3JvdXAiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvbCIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjb2xncm91cCIvPgogICAgICAgIDwveHM6Y2hvaWNlPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0aGVhZCIvPgogICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJ0Zm9vdCIvPgogICAgICAgIDx4czpjaG9pY2U+CiAgICAgICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0Ym9keSIvPgogICAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0idHIiLz4KICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgPC94czpzZXF1ZW5jZT4KICAgIDwveHM6Y2hvaWNlPgogIDwveHM6Z3JvdXA+CiAgPCEtLSBBdHRyaWJ1dGVzIGZvciBUYWJsZSAoaW5jbHVkaW5nIEhUTUwgb25lcykgLS0+CiAgPCEtLSBOLkIuIHJ1bGVzID0gKG5vbmUgfCBncm91cHMgfCByb3dzIHwgY29scyB8IGFsbCkgYnV0IGl0IGNhbid0IGJlIHNwZWMnZCAtLT4KICA8IS0tIHRoYXQgd2F5IGJlY2F1c2UgJ2FsbCcgYWxyZWFkeSBvY2N1cnMgaW4gYSBkaWZmZXJlbnQgZW51bWVyYXRpb24gaW4gLS0+CiAgPCEtLSBDQUxTIHRhYmxlcyAoZnJhbWUpLiAtLT4KICA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0idGJsLnRhYmxlLmF0dCI+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InRhYnN0eWxlIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9InRvY2VudHJ5IiB0eXBlPSJ5ZXNvcm5vLmF0dHZhbHMiLz4KICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2hvcnRlbnRyeSIgdHlwZT0ieWVzb3Juby5hdHR2YWxzIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im9yaWVudCI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InBvcnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGFuZCIvPgogICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6YXR0cmlidXRlPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwZ3dpZGUiIHR5cGU9Inllc29ybm8uYXR0dmFscyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzdW1tYXJ5Ii8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9IndpZHRoIi8+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImJvcmRlciIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJydWxlcyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjZWxsc3BhY2luZyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjZWxscGFkZGluZyIvPgogICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbiI+CiAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxlZnQiLz4KICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY2VudGVyIi8+CiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJpZ2h0Ii8+CiAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czphdHRyaWJ1dGU+CiAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImJnY29sb3IiLz4KICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgogIDx4czpzaW1wbGVUeXBlIG5hbWU9InRibC5mcmFtZS5hdHR2YWwiPgogICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ2b2lkIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYWJvdmUiLz4KICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJiZWxvdyIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImhzaWRlcyIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxocyIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJocyIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InZzaWRlcyIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImJveCIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImJvcmRlciIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRvcCIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImJvdHRvbSIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRvcGJvdCIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImFsbCIvPgogICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNpZGVzIi8+CiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibm9uZSIvPgogICAgPC94czpyZXN0cmljdGlvbj4KICA8L3hzOnNpbXBsZVR5cGU+CiAgPCEtLSBBbGxvdyBlaXRoZXIgb2JqZWN0cyBvciBpbmxpbmVzOyBiZXdhcmUgb2YgUkVzIGJldHdlZW4gZWxlbWVudHMuIC0tPgogIDx4czpncm91cCBuYW1lPSJ0YmwuZW50cnkubWRsIj4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czpncm91cCByZWY9InBhcmEuY2hhci5taXgiLz4KICAgICAgPHhzOmdyb3VwIHJlZj0idGFiZW50cnkubWl4Ii8+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmdyb3VwPgogIDwhLS0KICAgIHRoZWFkLCB0Zm9vdCwgYW5kIHRib2R5IGFyZSBkZWZpbmVkIGluIGJvdGggdGFibGUgbW9kZWxzLAogICAgc28gd2Ugc2V0IHVwIHBhcmFtZXRlciBlbnRpdGllcyB0byBkZWZpbmUgdW5pb24gbW9kZWxzIGZvciB0aGVtCiAgLS0+CiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRibC5oZGZ0Lm1kbCI+CiAgICA8eHM6Y2hvaWNlPgogICAgICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJ0ciIvPgogICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJjb2xzcGVjIi8+CiAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0icm93Ii8+CiAgICAgIDwveHM6c2VxdWVuY2U+CiAgICA8L3hzOmNob2ljZT4KICA8L3hzOmNvbXBsZXhUeXBlPgogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0YmwudGJvZHkubWRsIj4KICAgIDx4czpjaG9pY2U+CiAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRyIi8+CiAgICAgIDx4czplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InJvdyIvPgogICAgPC94czpjaG9pY2U+CiAgPC94czpjb21wbGV4VHlwZT4KPC94czpzY2hlbWE+CjwhLS0gRW5kIG9mIERvY0Jvb2sgWE1MIEhUTUwgVGFibGUgTW9kdWxlIFY0LjUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/Docbook/4_5/xml.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSI+CiAgPHhzOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iZG9jYm9vay54c2QiLz4KICA8eHM6YXR0cmlidXRlIG5hbWU9ImJhc2UiLz4KICA8eHM6YXR0cmlidXRlIG5hbWU9InNwYWNlIj4KICAgIDx4czpzaW1wbGVUeXBlPgogICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgogICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icHJlc2VydmUiLz4KICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgIDwveHM6c2ltcGxlVHlwZT4KICA8L3hzOmF0dHJpYnV0ZT4KICA8eHM6YXR0cmlidXRlIG5hbWU9ImxhbmciIHR5cGU9InhzOk5NVE9LRU4iLz4KPC94czpzY2hlbWE+Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/WSDL/Literal.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+DQo8IS0tDQoNCkNvcHlyaWdodCAyMDAxIC0gMjAwNSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgTWljcm9zb2Z0IENvcnBvcmF0aW9uDQpBbGwgUmlnaHRzIFJlc2VydmVkDQoNCkxpY2Vuc2UgZm9yIFdTREwgU2NoZW1hIEZpbGVzDQoNClRoZSBBdXRob3JzIGdyYW50IHBlcm1pc3Npb24gdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgV1NETCBTY2hlbWENCkZpbGVzIGluIGFueSBtZWRpdW0gd2l0aG91dCBmZWUgb3Igcm95YWx0eSBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGFuZA0KbGljZW5zZSBhcmUgZGlzdHJpYnV0ZWQgd2l0aCB0aGVtLiAgVGhlIG9yaWdpbmFscyBvZiB0aGVzZSBmaWxlcyBjYW4NCmJlIGxvY2F0ZWQgYXQ6DQoNCmh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvMjAwMy0wMi0xMS54c2QNCg0KVEhFU0UgU0NIRU1BIEZJTEVTIEFSRSBQUk9WSURFRCAiQVMgSVMsIiBBTkQgVEhFIEFVVEhPUlMgTUFLRSBOTyBSRVBSRVNFTlRBVElPTlMNCk9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCwgUkVHQVJESU5HIFRIRVNFIEZJTEVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCkxJTUlURUQgVE8sIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwNCk5PTi1JTkZSSU5HRU1FTlQgT1IgVElUTEUuICBUSEUgQVVUSE9SUyBXSUxMIE5PVCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsDQpJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgT1INClJFTEFUSU5HIFRPIEFOWSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRVNFIEZJTEVTLg0KDQpUaGUgbmFtZSBhbmQgdHJhZGVtYXJrcyBvZiB0aGUgQXV0aG9ycyBtYXkgTk9UIGJlIHVzZWQgaW4gYW55IG1hbm5lciwNCmluY2x1ZGluZyBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byB0aGVzZSBmaWxlcyBvciBhbnkgcHJvZ3JhbQ0Kb3Igc2VydmljZSB0aGF0IHVzZXMgdGhlc2UgZmlsZXMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIFRpdGxlIHRvIGNvcHlyaWdodA0KaW4gdGhlc2UgZmlsZXMgd2lsbCBhdCBhbGwgdGltZXMgcmVtYWluIHdpdGggdGhlIEF1dGhvcnMuDQoNCk5vIG90aGVyIHJpZ2h0cyBhcmUgZ3JhbnRlZCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLg0KDQoNCi0tPg0KPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiDQogICAgICAgICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIg0KICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIg0KICAgICAgICAgICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgPg0KDQogIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSIgbmFtZT0idERvY3VtZW50YXRpb24iID4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6YW55IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHByb2Nlc3NDb250ZW50cz0ibGF4IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InREb2N1bWVudGVkIiA+DQogICAgPHhzOmFubm90YXRpb24+DQogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4NCiAgICAgIFRoaXMgdHlwZSBpcyBleHRlbmRlZCBieSAgY29tcG9uZW50IHR5cGVzIHRvIGFsbG93IHRoZW0gdG8gYmUgZG9jdW1lbnRlZA0KICAgICAgPC94czpkb2N1bWVudGF0aW9uPg0KICAgIDwveHM6YW5ub3RhdGlvbj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJkb2N1bWVudGF0aW9uIiB0eXBlPSJ3c2RsOnREb2N1bWVudGF0aW9uIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idEV4dGVuc2libGVBdHRyaWJ1dGVzRG9jdW1lbnRlZCIgYWJzdHJhY3Q9InRydWUiID4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQ+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9IndzZGw6dERvY3VtZW50ZWQiID4NCiAgICAgICAgPHhzOmFubm90YXRpb24+DQogICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24+DQogICAgICAgICAgVGhpcyB0eXBlIGlzIGV4dGVuZGVkIGJ5IGNvbXBvbmVudCB0eXBlcyB0byBhbGxvdyBhdHRyaWJ1dGVzIGZyb20gb3RoZXIgbmFtZXNwYWNlcyB0byBiZSBhZGRlZC4NCiAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+DQogICAgICAgIDwveHM6YW5ub3RhdGlvbj4NCiAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiAvPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idEV4dGVuc2libGVEb2N1bWVudGVkIiBhYnN0cmFjdD0idHJ1ZSIgPg0KICAgIDx4czpjb21wbGV4Q29udGVudD4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0id3NkbDp0RG9jdW1lbnRlZCIgPg0KICAgICAgICA8eHM6YW5ub3RhdGlvbj4NCiAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4NCiAgICAgICAgICBUaGlzIHR5cGUgaXMgZXh0ZW5kZWQgYnkgY29tcG9uZW50IHR5cGVzIHRvIGFsbG93IGVsZW1lbnRzIGZyb20gb3RoZXIgbmFtZXNwYWNlcyB0byBiZSBhZGRlZC4NCiAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+DQogICAgICAgIDwveHM6YW5ub3RhdGlvbj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czphbnkgbmFtZXNwYWNlPSIjI290aGVyIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBwcm9jZXNzQ29udGVudHM9ImxheCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQoNCiAgPHhzOmVsZW1lbnQgbmFtZT0iZGVmaW5pdGlvbnMiIHR5cGU9IndzZGw6dERlZmluaXRpb25zIiA+DQogICAgPHhzOmtleSBuYW1lPSJtZXNzYWdlIiA+DQogICAgICA8eHM6c2VsZWN0b3IgeHBhdGg9IndzZGw6bWVzc2FnZSIgLz4NCiAgICAgIDx4czpmaWVsZCB4cGF0aD0iQG5hbWUiIC8+DQogICAgPC94czprZXk+DQogICAgPHhzOmtleSBuYW1lPSJwb3J0VHlwZSIgPg0KICAgICAgPHhzOnNlbGVjdG9yIHhwYXRoPSJ3c2RsOnBvcnRUeXBlIiAvPg0KICAgICAgPHhzOmZpZWxkIHhwYXRoPSJAbmFtZSIgLz4NCiAgICA8L3hzOmtleT4NCiAgICA8eHM6a2V5IG5hbWU9ImJpbmRpbmciID4NCiAgICAgIDx4czpzZWxlY3RvciB4cGF0aD0id3NkbDpiaW5kaW5nIiAvPg0KICAgICAgPHhzOmZpZWxkIHhwYXRoPSJAbmFtZSIgLz4NCiAgICA8L3hzOmtleT4NCiAgICA8eHM6a2V5IG5hbWU9InNlcnZpY2UiID4NCiAgICAgIDx4czpzZWxlY3RvciB4cGF0aD0id3NkbDpzZXJ2aWNlIiAvPg0KICAgICAgPHhzOmZpZWxkIHhwYXRoPSJAbmFtZSIgLz4NCiAgICA8L3hzOmtleT4NCiAgICA8eHM6a2V5IG5hbWU9ImltcG9ydCIgPg0KICAgICAgPHhzOnNlbGVjdG9yIHhwYXRoPSJ3c2RsOmltcG9ydCIgLz4NCiAgICAgIDx4czpmaWVsZCB4cGF0aD0iQG5hbWVzcGFjZSIgLz4NCiAgICA8L3hzOmtleT4NCiAgPC94czplbGVtZW50Pg0KDQogIDx4czpncm91cCBuYW1lPSJhbnlUb3BMZXZlbE9wdGlvbmFsRWxlbWVudCIgPg0KICAgIDx4czphbm5vdGF0aW9uPg0KICAgICAgPHhzOmRvY3VtZW50YXRpb24+DQogICAgICBBbnkgdG9wIGxldmVsIG9wdGlvbmFsIGVsZW1lbnQgYWxsb3dlZCB0byBhcHBlYXIgbW9yZSB0aGVuIG9uY2UgLSBhbnkgY2hpbGQgb2YgZGVmaW5pdGlvbnMgZWxlbWVudCBleGNlcHQgd3NkbDp0eXBlcy4gQW55IGV4dGVuc2liaWxpdHkgZWxlbWVudCBpcyBhbGxvd2VkIGluIGFueSBwbGFjZS4NCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4NCiAgICA8L3hzOmFubm90YXRpb24+DQogICAgPHhzOmNob2ljZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9ImltcG9ydCIgdHlwZT0id3NkbDp0SW1wb3J0IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0idHlwZXMiIHR5cGU9IndzZGw6dFR5cGVzIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ibWVzc2FnZSIgIHR5cGU9IndzZGw6dE1lc3NhZ2UiID4NCiAgICAgICAgPHhzOnVuaXF1ZSBuYW1lPSJwYXJ0IiA+DQogICAgICAgICAgPHhzOnNlbGVjdG9yIHhwYXRoPSJ3c2RsOnBhcnQiIC8+DQogICAgICAgICAgPHhzOmZpZWxkIHhwYXRoPSJAbmFtZSIgLz4NCiAgICAgICAgPC94czp1bmlxdWU+DQogICAgICA8L3hzOmVsZW1lbnQ+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJwb3J0VHlwZSIgdHlwZT0id3NkbDp0UG9ydFR5cGUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJiaW5kaW5nIiAgdHlwZT0id3NkbDp0QmluZGluZyIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9InNlcnZpY2UiICB0eXBlPSJ3c2RsOnRTZXJ2aWNlIiA+DQogICAgICAgIDx4czp1bmlxdWUgbmFtZT0icG9ydCIgPg0KICAgICAgICAgIDx4czpzZWxlY3RvciB4cGF0aD0id3NkbDpwb3J0IiAvPg0KICAgICAgICAgIDx4czpmaWVsZCB4cGF0aD0iQG5hbWUiIC8+DQogICAgICAgIDwveHM6dW5pcXVlPg0KCSAgPC94czplbGVtZW50Pg0KICAgIDwveHM6Y2hvaWNlPg0KICA8L3hzOmdyb3VwPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0RGVmaW5pdGlvbnMiID4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQ+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9IndzZGw6dEV4dGVuc2libGVEb2N1bWVudGVkIiA+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6Z3JvdXAgcmVmPSJ3c2RsOmFueVRvcExldmVsT3B0aW9uYWxFbGVtZW50IiAgbWluT2NjdXJzPSIwIiAgIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InRhcmdldE5hbWVzcGFjZSIgdHlwZT0ieHM6YW55VVJJIiB1c2U9Im9wdGlvbmFsIiAvPg0KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzOk5DTmFtZSIgdXNlPSJvcHRpb25hbCIgLz4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRJbXBvcnQiID4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQ+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9IndzZGw6dEV4dGVuc2libGVBdHRyaWJ1dGVzRG9jdW1lbnRlZCIgPg0KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdHlwZT0ieHM6YW55VVJJIiB1c2U9InJlcXVpcmVkIiAvPg0KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImxvY2F0aW9uIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0icmVxdWlyZWQiIC8+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0VHlwZXMiID4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQ+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9IndzZGw6dEV4dGVuc2libGVEb2N1bWVudGVkIiAvPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRNZXNzYWdlIiA+DQogICAgPHhzOmNvbXBsZXhDb250ZW50Pg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ3c2RsOnRFeHRlbnNpYmxlRG9jdW1lbnRlZCIgPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0icGFydCIgdHlwZT0id3NkbDp0UGFydCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpOQ05hbWUiIHVzZT0icmVxdWlyZWQiIC8+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0UGFydCIgPg0KICAgIDx4czpjb21wbGV4Q29udGVudD4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0id3NkbDp0RXh0ZW5zaWJsZUF0dHJpYnV0ZXNEb2N1bWVudGVkIiA+DQogICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6TkNOYW1lIiB1c2U9InJlcXVpcmVkIiAvPg0KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImVsZW1lbnQiIHR5cGU9InhzOlFOYW1lIiB1c2U9Im9wdGlvbmFsIiAvPg0KPCEtLQ0KUmVtb3ZlZCBieSBPVE9CTzoNClRvIGJlIGFsaWduZWQgd2l0aCBMaXRlcmFsIHN0eWxlDQogICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idHlwZSIgdHlwZT0ieHM6UU5hbWUiIHVzZT0ib3B0aW9uYWwiIC8+DQotLT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRQb3J0VHlwZSIgPg0KICAgIDx4czpjb21wbGV4Q29udGVudD4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0id3NkbDp0RXh0ZW5zaWJsZUF0dHJpYnV0ZXNEb2N1bWVudGVkIiA+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJvcGVyYXRpb24iIHR5cGU9IndzZGw6dE9wZXJhdGlvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpOQ05hbWUiIHVzZT0icmVxdWlyZWQiIC8+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0T3BlcmF0aW9uIiA+DQogICAgPHhzOmNvbXBsZXhDb250ZW50Pg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ3c2RsOnRFeHRlbnNpYmxlRG9jdW1lbnRlZCIgPg0KCSAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmNob2ljZT4NCiAgICAgICAgICAgIDx4czpncm91cCByZWY9IndzZGw6cmVxdWVzdC1yZXNwb25zZS1vci1vbmUtd2F5LW9wZXJhdGlvbiIgLz4NCiAgICAgICAgICAgIDx4czpncm91cCByZWY9IndzZGw6c29saWNpdC1yZXNwb25zZS1vci1ub3RpZmljYXRpb24tb3BlcmF0aW9uIiAvPg0KICAgICAgICAgIDwveHM6Y2hvaWNlPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzOk5DTmFtZSIgdXNlPSJyZXF1aXJlZCIgLz4NCiAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwYXJhbWV0ZXJPcmRlciIgdHlwZT0ieHM6Tk1UT0tFTlMiIHVzZT0ib3B0aW9uYWwiIC8+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KDQogIDx4czpncm91cCBuYW1lPSJyZXF1ZXN0LXJlc3BvbnNlLW9yLW9uZS13YXktb3BlcmF0aW9uIiA+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iaW5wdXQiIHR5cGU9IndzZGw6dFBhcmFtIiAvPg0KCSAgPHhzOnNlcXVlbmNlIG1pbk9jY3Vycz0nMCcgPg0KCSAgICA8eHM6ZWxlbWVudCBuYW1lPSJvdXRwdXQiIHR5cGU9IndzZGw6dFBhcmFtIiAvPg0KCQk8eHM6ZWxlbWVudCBuYW1lPSJmYXVsdCIgdHlwZT0id3NkbDp0RmF1bHQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQogICAgICA8L3hzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Z3JvdXA+DQoNCiAgPHhzOmdyb3VwIG5hbWU9InNvbGljaXQtcmVzcG9uc2Utb3Itbm90aWZpY2F0aW9uLW9wZXJhdGlvbiIgPg0KICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9Im91dHB1dCIgdHlwZT0id3NkbDp0UGFyYW0iIC8+DQoJICA8eHM6c2VxdWVuY2UgbWluT2NjdXJzPScwJyA+DQoJICAgIDx4czplbGVtZW50IG5hbWU9ImlucHV0IiB0eXBlPSJ3c2RsOnRQYXJhbSIgLz4NCgkJPHhzOmVsZW1lbnQgbmFtZT0iZmF1bHQiIHR5cGU9IndzZGw6dEZhdWx0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KCSAgPC94czpzZXF1ZW5jZT4NCiAgICA8L3hzOnNlcXVlbmNlPg0KICA8L3hzOmdyb3VwPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0UGFyYW0iID4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQ+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9IndzZGw6dEV4dGVuc2libGVBdHRyaWJ1dGVzRG9jdW1lbnRlZCIgPg0KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzOk5DTmFtZSIgdXNlPSJvcHRpb25hbCIgLz4NCiAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtZXNzYWdlIiB0eXBlPSJ4czpRTmFtZSIgdXNlPSJyZXF1aXJlZCIgLz4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRGYXVsdCIgPg0KICAgIDx4czpjb21wbGV4Q29udGVudD4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0id3NkbDp0RXh0ZW5zaWJsZUF0dHJpYnV0ZXNEb2N1bWVudGVkIiA+DQogICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6TkNOYW1lIiAgdXNlPSJyZXF1aXJlZCIgLz4NCiAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtZXNzYWdlIiB0eXBlPSJ4czpRTmFtZSIgdXNlPSJyZXF1aXJlZCIgLz4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRCaW5kaW5nIiA+DQogICAgPHhzOmNvbXBsZXhDb250ZW50Pg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ3c2RsOnRFeHRlbnNpYmxlRG9jdW1lbnRlZCIgPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ib3BlcmF0aW9uIiB0eXBlPSJ3c2RsOnRCaW5kaW5nT3BlcmF0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzOk5DTmFtZSIgdXNlPSJyZXF1aXJlZCIgLz4NCiAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiB0eXBlPSJ4czpRTmFtZSIgdXNlPSJyZXF1aXJlZCIgLz4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRCaW5kaW5nT3BlcmF0aW9uTWVzc2FnZSIgPg0KICAgIDx4czpjb21wbGV4Q29udGVudD4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0id3NkbDp0RXh0ZW5zaWJsZURvY3VtZW50ZWQiID4NCiAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpOQ05hbWUiIHVzZT0ib3B0aW9uYWwiIC8+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0QmluZGluZ09wZXJhdGlvbkZhdWx0IiA+DQogICAgPHhzOmNvbXBsZXhDb250ZW50Pg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ3c2RsOnRFeHRlbnNpYmxlRG9jdW1lbnRlZCIgPg0KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzOk5DTmFtZSIgdXNlPSJyZXF1aXJlZCIgLz4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRCaW5kaW5nT3BlcmF0aW9uIiA+DQogICAgPHhzOmNvbXBsZXhDb250ZW50Pg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ3c2RsOnRFeHRlbnNpYmxlRG9jdW1lbnRlZCIgPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iaW5wdXQiIHR5cGU9IndzZGw6dEJpbmRpbmdPcGVyYXRpb25NZXNzYWdlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ib3V0cHV0IiB0eXBlPSJ3c2RsOnRCaW5kaW5nT3BlcmF0aW9uTWVzc2FnZSIgbWluT2NjdXJzPSIwIiAvPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9ImZhdWx0IiB0eXBlPSJ3c2RsOnRCaW5kaW5nT3BlcmF0aW9uRmF1bHQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6TkNOYW1lIiB1c2U9InJlcXVpcmVkIiAvPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idFNlcnZpY2UiID4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQ+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9IndzZGw6dEV4dGVuc2libGVEb2N1bWVudGVkIiA+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJwb3J0IiB0eXBlPSJ3c2RsOnRQb3J0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzOk5DTmFtZSIgdXNlPSJyZXF1aXJlZCIgLz4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRQb3J0IiA+DQogICAgPHhzOmNvbXBsZXhDb250ZW50Pg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ3c2RsOnRFeHRlbnNpYmxlRG9jdW1lbnRlZCIgPg0KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzOk5DTmFtZSIgdXNlPSJyZXF1aXJlZCIgLz4NCiAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJiaW5kaW5nIiB0eXBlPSJ4czpRTmFtZSIgdXNlPSJyZXF1aXJlZCIgLz4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQoNCiAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhcnJheVR5cGUiIHR5cGU9InhzOnN0cmluZyIgLz4NCiAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZXF1aXJlZCIgdHlwZT0ieHM6Ym9vbGVhbiIgLz4NCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRFeHRlbnNpYmlsaXR5RWxlbWVudCIgYWJzdHJhY3Q9InRydWUiID4NCiAgICA8eHM6YXR0cmlidXRlIHJlZj0id3NkbDpyZXF1aXJlZCIgdXNlPSJvcHRpb25hbCIgLz4NCiAgPC94czpjb21wbGV4VHlwZT4NCg0KPC94czpzY2hlbWE+</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/WSDL/WSDL.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+DQo8IS0tDQoNCkNvcHlyaWdodCAyMDAxIC0gMjAwNSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgTWljcm9zb2Z0IENvcnBvcmF0aW9uDQpBbGwgUmlnaHRzIFJlc2VydmVkDQoNCkxpY2Vuc2UgZm9yIFdTREwgU2NoZW1hIEZpbGVzDQoNClRoZSBBdXRob3JzIGdyYW50IHBlcm1pc3Npb24gdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgV1NETCBTY2hlbWENCkZpbGVzIGluIGFueSBtZWRpdW0gd2l0aG91dCBmZWUgb3Igcm95YWx0eSBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGFuZA0KbGljZW5zZSBhcmUgZGlzdHJpYnV0ZWQgd2l0aCB0aGVtLiAgVGhlIG9yaWdpbmFscyBvZiB0aGVzZSBmaWxlcyBjYW4NCmJlIGxvY2F0ZWQgYXQ6DQoNCmh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvMjAwMy0wMi0xMS54c2QNCg0KVEhFU0UgU0NIRU1BIEZJTEVTIEFSRSBQUk9WSURFRCAiQVMgSVMsIiBBTkQgVEhFIEFVVEhPUlMgTUFLRSBOTyBSRVBSRVNFTlRBVElPTlMNCk9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCwgUkVHQVJESU5HIFRIRVNFIEZJTEVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCkxJTUlURUQgVE8sIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwNCk5PTi1JTkZSSU5HRU1FTlQgT1IgVElUTEUuICBUSEUgQVVUSE9SUyBXSUxMIE5PVCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsDQpJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgT1INClJFTEFUSU5HIFRPIEFOWSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRVNFIEZJTEVTLg0KDQpUaGUgbmFtZSBhbmQgdHJhZGVtYXJrcyBvZiB0aGUgQXV0aG9ycyBtYXkgTk9UIGJlIHVzZWQgaW4gYW55IG1hbm5lciwNCmluY2x1ZGluZyBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byB0aGVzZSBmaWxlcyBvciBhbnkgcHJvZ3JhbQ0Kb3Igc2VydmljZSB0aGF0IHVzZXMgdGhlc2UgZmlsZXMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIFRpdGxlIHRvIGNvcHlyaWdodA0KaW4gdGhlc2UgZmlsZXMgd2lsbCBhdCBhbGwgdGltZXMgcmVtYWluIHdpdGggdGhlIEF1dGhvcnMuDQoNCk5vIG90aGVyIHJpZ2h0cyBhcmUgZ3JhbnRlZCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLg0KDQoNCi0tPg0KPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiDQogICAgICAgICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIg0KICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIg0KICAgICAgICAgICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgPg0KDQogIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSIgbmFtZT0idERvY3VtZW50YXRpb24iID4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6YW55IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHByb2Nlc3NDb250ZW50cz0ibGF4IiAvPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Y29tcGxleFR5cGU+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InREb2N1bWVudGVkIiA+DQogICAgPHhzOmFubm90YXRpb24+DQogICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4NCiAgICAgIFRoaXMgdHlwZSBpcyBleHRlbmRlZCBieSAgY29tcG9uZW50IHR5cGVzIHRvIGFsbG93IHRoZW0gdG8gYmUgZG9jdW1lbnRlZA0KICAgICAgPC94czpkb2N1bWVudGF0aW9uPg0KICAgIDwveHM6YW5ub3RhdGlvbj4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJkb2N1bWVudGF0aW9uIiB0eXBlPSJ3c2RsOnREb2N1bWVudGF0aW9uIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpjb21wbGV4VHlwZT4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idEV4dGVuc2libGVBdHRyaWJ1dGVzRG9jdW1lbnRlZCIgYWJzdHJhY3Q9InRydWUiID4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQ+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9IndzZGw6dERvY3VtZW50ZWQiID4NCiAgICAgICAgPHhzOmFubm90YXRpb24+DQogICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24+DQogICAgICAgICAgVGhpcyB0eXBlIGlzIGV4dGVuZGVkIGJ5IGNvbXBvbmVudCB0eXBlcyB0byBhbGxvdyBhdHRyaWJ1dGVzIGZyb20gb3RoZXIgbmFtZXNwYWNlcyB0byBiZSBhZGRlZC4NCiAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+DQogICAgICAgIDwveHM6YW5ub3RhdGlvbj4NCiAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiAvPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idEV4dGVuc2libGVEb2N1bWVudGVkIiBhYnN0cmFjdD0idHJ1ZSIgPg0KICAgIDx4czpjb21wbGV4Q29udGVudD4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0id3NkbDp0RG9jdW1lbnRlZCIgPg0KICAgICAgICA8eHM6YW5ub3RhdGlvbj4NCiAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4NCiAgICAgICAgICBUaGlzIHR5cGUgaXMgZXh0ZW5kZWQgYnkgY29tcG9uZW50IHR5cGVzIHRvIGFsbG93IGVsZW1lbnRzIGZyb20gb3RoZXIgbmFtZXNwYWNlcyB0byBiZSBhZGRlZC4NCiAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+DQogICAgICAgIDwveHM6YW5ub3RhdGlvbj4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czphbnkgbmFtZXNwYWNlPSIjI290aGVyIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBwcm9jZXNzQ29udGVudHM9ImxheCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQoNCiAgPHhzOmVsZW1lbnQgbmFtZT0iZGVmaW5pdGlvbnMiIHR5cGU9IndzZGw6dERlZmluaXRpb25zIiA+DQogICAgPHhzOmtleSBuYW1lPSJtZXNzYWdlIiA+DQogICAgICA8eHM6c2VsZWN0b3IgeHBhdGg9IndzZGw6bWVzc2FnZSIgLz4NCiAgICAgIDx4czpmaWVsZCB4cGF0aD0iQG5hbWUiIC8+DQogICAgPC94czprZXk+DQogICAgPHhzOmtleSBuYW1lPSJwb3J0VHlwZSIgPg0KICAgICAgPHhzOnNlbGVjdG9yIHhwYXRoPSJ3c2RsOnBvcnRUeXBlIiAvPg0KICAgICAgPHhzOmZpZWxkIHhwYXRoPSJAbmFtZSIgLz4NCiAgICA8L3hzOmtleT4NCiAgICA8eHM6a2V5IG5hbWU9ImJpbmRpbmciID4NCiAgICAgIDx4czpzZWxlY3RvciB4cGF0aD0id3NkbDpiaW5kaW5nIiAvPg0KICAgICAgPHhzOmZpZWxkIHhwYXRoPSJAbmFtZSIgLz4NCiAgICA8L3hzOmtleT4NCiAgICA8eHM6a2V5IG5hbWU9InNlcnZpY2UiID4NCiAgICAgIDx4czpzZWxlY3RvciB4cGF0aD0id3NkbDpzZXJ2aWNlIiAvPg0KICAgICAgPHhzOmZpZWxkIHhwYXRoPSJAbmFtZSIgLz4NCiAgICA8L3hzOmtleT4NCiAgICA8eHM6a2V5IG5hbWU9ImltcG9ydCIgPg0KICAgICAgPHhzOnNlbGVjdG9yIHhwYXRoPSJ3c2RsOmltcG9ydCIgLz4NCiAgICAgIDx4czpmaWVsZCB4cGF0aD0iQG5hbWVzcGFjZSIgLz4NCiAgICA8L3hzOmtleT4NCiAgPC94czplbGVtZW50Pg0KDQogIDx4czpncm91cCBuYW1lPSJhbnlUb3BMZXZlbE9wdGlvbmFsRWxlbWVudCIgPg0KICAgIDx4czphbm5vdGF0aW9uPg0KICAgICAgPHhzOmRvY3VtZW50YXRpb24+DQogICAgICBBbnkgdG9wIGxldmVsIG9wdGlvbmFsIGVsZW1lbnQgYWxsb3dlZCB0byBhcHBlYXIgbW9yZSB0aGVuIG9uY2UgLSBhbnkgY2hpbGQgb2YgZGVmaW5pdGlvbnMgZWxlbWVudCBleGNlcHQgd3NkbDp0eXBlcy4gQW55IGV4dGVuc2liaWxpdHkgZWxlbWVudCBpcyBhbGxvd2VkIGluIGFueSBwbGFjZS4NCiAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4NCiAgICA8L3hzOmFubm90YXRpb24+DQogICAgPHhzOmNob2ljZT4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9ImltcG9ydCIgdHlwZT0id3NkbDp0SW1wb3J0IiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0idHlwZXMiIHR5cGU9IndzZGw6dFR5cGVzIiAvPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ibWVzc2FnZSIgIHR5cGU9IndzZGw6dE1lc3NhZ2UiID4NCiAgICAgICAgPHhzOnVuaXF1ZSBuYW1lPSJwYXJ0IiA+DQogICAgICAgICAgPHhzOnNlbGVjdG9yIHhwYXRoPSJ3c2RsOnBhcnQiIC8+DQogICAgICAgICAgPHhzOmZpZWxkIHhwYXRoPSJAbmFtZSIgLz4NCiAgICAgICAgPC94czp1bmlxdWU+DQogICAgICA8L3hzOmVsZW1lbnQ+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJwb3J0VHlwZSIgdHlwZT0id3NkbDp0UG9ydFR5cGUiIC8+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJiaW5kaW5nIiAgdHlwZT0id3NkbDp0QmluZGluZyIgLz4NCiAgICAgIDx4czplbGVtZW50IG5hbWU9InNlcnZpY2UiICB0eXBlPSJ3c2RsOnRTZXJ2aWNlIiA+DQogICAgICAgIDx4czp1bmlxdWUgbmFtZT0icG9ydCIgPg0KICAgICAgICAgIDx4czpzZWxlY3RvciB4cGF0aD0id3NkbDpwb3J0IiAvPg0KICAgICAgICAgIDx4czpmaWVsZCB4cGF0aD0iQG5hbWUiIC8+DQogICAgICAgIDwveHM6dW5pcXVlPg0KCSAgPC94czplbGVtZW50Pg0KICAgIDwveHM6Y2hvaWNlPg0KICA8L3hzOmdyb3VwPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0RGVmaW5pdGlvbnMiID4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQ+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9IndzZGw6dEV4dGVuc2libGVEb2N1bWVudGVkIiA+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6Z3JvdXAgcmVmPSJ3c2RsOmFueVRvcExldmVsT3B0aW9uYWxFbGVtZW50IiAgbWluT2NjdXJzPSIwIiAgIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InRhcmdldE5hbWVzcGFjZSIgdHlwZT0ieHM6YW55VVJJIiB1c2U9Im9wdGlvbmFsIiAvPg0KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzOk5DTmFtZSIgdXNlPSJvcHRpb25hbCIgLz4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRJbXBvcnQiID4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQ+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9IndzZGw6dEV4dGVuc2libGVBdHRyaWJ1dGVzRG9jdW1lbnRlZCIgPg0KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdHlwZT0ieHM6YW55VVJJIiB1c2U9InJlcXVpcmVkIiAvPg0KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImxvY2F0aW9uIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0icmVxdWlyZWQiIC8+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0VHlwZXMiID4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQ+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9IndzZGw6dEV4dGVuc2libGVEb2N1bWVudGVkIiAvPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRNZXNzYWdlIiA+DQogICAgPHhzOmNvbXBsZXhDb250ZW50Pg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ3c2RsOnRFeHRlbnNpYmxlRG9jdW1lbnRlZCIgPg0KICAgICAgICA8eHM6c2VxdWVuY2U+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0icGFydCIgdHlwZT0id3NkbDp0UGFydCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpOQ05hbWUiIHVzZT0icmVxdWlyZWQiIC8+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0UGFydCIgPg0KICAgIDx4czpjb21wbGV4Q29udGVudD4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0id3NkbDp0RXh0ZW5zaWJsZUF0dHJpYnV0ZXNEb2N1bWVudGVkIiA+DQogICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6TkNOYW1lIiB1c2U9InJlcXVpcmVkIiAvPg0KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImVsZW1lbnQiIHR5cGU9InhzOlFOYW1lIiB1c2U9Im9wdGlvbmFsIiAvPg0KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InR5cGUiIHR5cGU9InhzOlFOYW1lIiB1c2U9Im9wdGlvbmFsIiAvPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idFBvcnRUeXBlIiA+DQogICAgPHhzOmNvbXBsZXhDb250ZW50Pg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ3c2RsOnRFeHRlbnNpYmxlQXR0cmlidXRlc0RvY3VtZW50ZWQiID4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Im9wZXJhdGlvbiIgdHlwZT0id3NkbDp0T3BlcmF0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPg0KICAgICAgICA8L3hzOnNlcXVlbmNlPg0KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzOk5DTmFtZSIgdXNlPSJyZXF1aXJlZCIgLz4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRPcGVyYXRpb24iID4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQ+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9IndzZGw6dEV4dGVuc2libGVEb2N1bWVudGVkIiA+DQoJICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6Y2hvaWNlPg0KICAgICAgICAgICAgPHhzOmdyb3VwIHJlZj0id3NkbDpyZXF1ZXN0LXJlc3BvbnNlLW9yLW9uZS13YXktb3BlcmF0aW9uIiAvPg0KICAgICAgICAgICAgPHhzOmdyb3VwIHJlZj0id3NkbDpzb2xpY2l0LXJlc3BvbnNlLW9yLW5vdGlmaWNhdGlvbi1vcGVyYXRpb24iIC8+DQogICAgICAgICAgPC94czpjaG9pY2U+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6TkNOYW1lIiB1c2U9InJlcXVpcmVkIiAvPg0KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InBhcmFtZXRlck9yZGVyIiB0eXBlPSJ4czpOTVRPS0VOUyIgdXNlPSJvcHRpb25hbCIgLz4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQoNCiAgPHhzOmdyb3VwIG5hbWU9InJlcXVlc3QtcmVzcG9uc2Utb3Itb25lLXdheS1vcGVyYXRpb24iID4NCiAgICA8eHM6c2VxdWVuY2U+DQogICAgICA8eHM6ZWxlbWVudCBuYW1lPSJpbnB1dCIgdHlwZT0id3NkbDp0UGFyYW0iIC8+DQoJICA8eHM6c2VxdWVuY2UgbWluT2NjdXJzPScwJyA+DQoJICAgIDx4czplbGVtZW50IG5hbWU9Im91dHB1dCIgdHlwZT0id3NkbDp0UGFyYW0iIC8+DQoJCTx4czplbGVtZW50IG5hbWU9ImZhdWx0IiB0eXBlPSJ3c2RsOnRGYXVsdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgPC94czpzZXF1ZW5jZT4NCiAgPC94czpncm91cD4NCg0KICA8eHM6Z3JvdXAgbmFtZT0ic29saWNpdC1yZXNwb25zZS1vci1ub3RpZmljYXRpb24tb3BlcmF0aW9uIiA+DQogICAgPHhzOnNlcXVlbmNlPg0KICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ib3V0cHV0IiB0eXBlPSJ3c2RsOnRQYXJhbSIgLz4NCgkgIDx4czpzZXF1ZW5jZSBtaW5PY2N1cnM9JzAnID4NCgkgICAgPHhzOmVsZW1lbnQgbmFtZT0iaW5wdXQiIHR5cGU9IndzZGw6dFBhcmFtIiAvPg0KCQk8eHM6ZWxlbWVudCBuYW1lPSJmYXVsdCIgdHlwZT0id3NkbDp0RmF1bHQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQoJICA8L3hzOnNlcXVlbmNlPg0KICAgIDwveHM6c2VxdWVuY2U+DQogIDwveHM6Z3JvdXA+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRQYXJhbSIgPg0KICAgIDx4czpjb21wbGV4Q29udGVudD4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0id3NkbDp0RXh0ZW5zaWJsZUF0dHJpYnV0ZXNEb2N1bWVudGVkIiA+DQogICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6TkNOYW1lIiB1c2U9Im9wdGlvbmFsIiAvPg0KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1lc3NhZ2UiIHR5cGU9InhzOlFOYW1lIiB1c2U9InJlcXVpcmVkIiAvPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idEZhdWx0IiA+DQogICAgPHhzOmNvbXBsZXhDb250ZW50Pg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ3c2RsOnRFeHRlbnNpYmxlQXR0cmlidXRlc0RvY3VtZW50ZWQiID4NCiAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpOQ05hbWUiICB1c2U9InJlcXVpcmVkIiAvPg0KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1lc3NhZ2UiIHR5cGU9InhzOlFOYW1lIiB1c2U9InJlcXVpcmVkIiAvPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idEJpbmRpbmciID4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQ+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9IndzZGw6dEV4dGVuc2libGVEb2N1bWVudGVkIiA+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJvcGVyYXRpb24iIHR5cGU9IndzZGw6dEJpbmRpbmdPcGVyYXRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6TkNOYW1lIiB1c2U9InJlcXVpcmVkIiAvPg0KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InR5cGUiIHR5cGU9InhzOlFOYW1lIiB1c2U9InJlcXVpcmVkIiAvPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idEJpbmRpbmdPcGVyYXRpb25NZXNzYWdlIiA+DQogICAgPHhzOmNvbXBsZXhDb250ZW50Pg0KICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ3c2RsOnRFeHRlbnNpYmxlRG9jdW1lbnRlZCIgPg0KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzOk5DTmFtZSIgdXNlPSJvcHRpb25hbCIgLz4NCiAgICAgIDwveHM6ZXh0ZW5zaW9uPg0KICAgIDwveHM6Y29tcGxleENvbnRlbnQ+DQogIDwveHM6Y29tcGxleFR5cGU+DQoNCiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRCaW5kaW5nT3BlcmF0aW9uRmF1bHQiID4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQ+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9IndzZGw6dEV4dGVuc2libGVEb2N1bWVudGVkIiA+DQogICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6TkNOYW1lIiB1c2U9InJlcXVpcmVkIiAvPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idEJpbmRpbmdPcGVyYXRpb24iID4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQ+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9IndzZGw6dEV4dGVuc2libGVEb2N1bWVudGVkIiA+DQogICAgICAgIDx4czpzZXF1ZW5jZT4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJpbnB1dCIgdHlwZT0id3NkbDp0QmluZGluZ09wZXJhdGlvbk1lc3NhZ2UiIG1pbk9jY3Vycz0iMCIgLz4NCiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJvdXRwdXQiIHR5cGU9IndzZGw6dEJpbmRpbmdPcGVyYXRpb25NZXNzYWdlIiBtaW5PY2N1cnM9IjAiIC8+DQogICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iZmF1bHQiIHR5cGU9IndzZGw6dEJpbmRpbmdPcGVyYXRpb25GYXVsdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4NCiAgICAgICAgPC94czpzZXF1ZW5jZT4NCiAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpOQ05hbWUiIHVzZT0icmVxdWlyZWQiIC8+DQogICAgICA8L3hzOmV4dGVuc2lvbj4NCiAgICA8L3hzOmNvbXBsZXhDb250ZW50Pg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KDQogIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0U2VydmljZSIgPg0KICAgIDx4czpjb21wbGV4Q29udGVudD4NCiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0id3NkbDp0RXh0ZW5zaWJsZURvY3VtZW50ZWQiID4NCiAgICAgICAgPHhzOnNlcXVlbmNlPg0KICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9InBvcnQiIHR5cGU9IndzZGw6dFBvcnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+DQogICAgICAgIDwveHM6c2VxdWVuY2U+DQogICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6TkNOYW1lIiB1c2U9InJlcXVpcmVkIiAvPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idFBvcnQiID4NCiAgICA8eHM6Y29tcGxleENvbnRlbnQ+DQogICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9IndzZGw6dEV4dGVuc2libGVEb2N1bWVudGVkIiA+DQogICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6TkNOYW1lIiB1c2U9InJlcXVpcmVkIiAvPg0KICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImJpbmRpbmciIHR5cGU9InhzOlFOYW1lIiB1c2U9InJlcXVpcmVkIiAvPg0KICAgICAgPC94czpleHRlbnNpb24+DQogICAgPC94czpjb21wbGV4Q29udGVudD4NCiAgPC94czpjb21wbGV4VHlwZT4NCg0KICA8eHM6YXR0cmlidXRlIG5hbWU9ImFycmF5VHlwZSIgdHlwZT0ieHM6c3RyaW5nIiAvPg0KICA8eHM6YXR0cmlidXRlIG5hbWU9InJlcXVpcmVkIiB0eXBlPSJ4czpib29sZWFuIiAvPg0KICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idEV4dGVuc2liaWxpdHlFbGVtZW50IiBhYnN0cmFjdD0idHJ1ZSIgPg0KICAgIDx4czphdHRyaWJ1dGUgcmVmPSJ3c2RsOnJlcXVpcmVkIiB1c2U9Im9wdGlvbmFsIiAvPg0KICA8L3hzOmNvbXBsZXhUeXBlPg0KDQo8L3hzOnNjaGVtYT4=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/StaticFiles/XSD/SOPM.xsd" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+CiAgICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIi8+CgogICAgPHhzOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249IkRhdGFiYXNlLnhzZCIvPgoKICAgIDx4czplbGVtZW50IG5hbWU9Im90b2JvX3BhY2thZ2UiPgogICAgICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJOYW1lIiAvPgogICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJWZXJzaW9uIi8+CiAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9IkZyYW1ld29yayIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJQYWNrYWdlUmVxdWlyZWQiLz4KICAgICAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Ik1vZHVsZVJlcXVpcmVkIi8+CiAgICAgICAgICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iVmVuZG9yIi8+CiAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9IlVSTCIvPgogICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJMaWNlbnNlIi8+CiAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9IkRlc2NyaXB0aW9uIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KCiAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9IlBhY2thZ2VJc1Zpc2libGUiIG1pbk9jY3Vycz0iMCIgLz4KICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iUGFja2FnZUlzRG93bmxvYWRhYmxlIiBtaW5PY2N1cnM9IjAiIC8+CiAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9IlBhY2thZ2VJc0J1aWxkYWJsZSIgbWluT2NjdXJzPSIwIiAvPgogICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJQYWNrYWdlSXNSZW1vdmFibGUiIG1pbk9jY3Vycz0iMCIgLz4KICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iUGFja2FnZUFsbG93RGlyZWN0VXBkYXRlIiBtaW5PY2N1cnM9IjAiIC8+CgogICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJDaGFuZ2VMb2ciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CiAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9Ik9TIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgogICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJGaWxlbGlzdCIvPgogICAgICAgICAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KICAgICAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9IkludHJvSW5zdGFsbCIvPgogICAgICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iSW50cm9Vbmluc3RhbGwiLz4KICAgICAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9IkludHJvUmVpbnN0YWxsIi8+CiAgICAgICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJJbnRyb1VwZ3JhZGUiLz4KICAgICAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9IkNvZGVJbnN0YWxsIi8+CiAgICAgICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJDb2RlVXBncmFkZSIvPgogICAgICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iQ29kZVVuaW5zdGFsbCIvPgogICAgICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iQ29kZVJlaW5zdGFsbCIvPgogICAgICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iRGF0YWJhc2VJbnN0YWxsIi8+CiAgICAgICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJEYXRhYmFzZVVwZ3JhZGUiLz4KICAgICAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9IkRhdGFiYXNlUmVpbnN0YWxsIi8+CiAgICAgICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJEYXRhYmFzZVVuaW5zdGFsbCIvPgogICAgICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iUGFja2FnZU1lcmdlIi8+CiAgICAgICAgICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgIDwveHM6Y29tcGxleFR5cGU+CiAgICA8L3hzOmVsZW1lbnQ+CgogICAgPHhzOmVsZW1lbnQgbmFtZT0iQ2hhbmdlTG9nIj4KICAgICAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgICAgICAgIDx4czpzaW1wbGVDb250ZW50PgogICAgICAgICAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpzdHJpbmciPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iRGF0ZSIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICAgICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9IlZlcnNpb24iIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgICAgICAgICA8L3hzOmV4dGVuc2lvbj4KICAgICAgICAgICAgPC94czpzaW1wbGVDb250ZW50PgogICAgICAgIDwveHM6Y29tcGxleFR5cGU+CiAgICA8L3hzOmVsZW1lbnQ+CgogICAgPHhzOmVsZW1lbnQgbmFtZT0iRGVzY3JpcHRpb24iPgogICAgICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgICAgICAgPHhzOnNpbXBsZUNvbnRlbnQ+CiAgICAgICAgICAgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOnN0cmluZyI+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJMYW5nIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iRm9ybWF0IiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iVHJhbnNsYXRhYmxlIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgPC94czpleHRlbnNpb24+CiAgICAgICAgICAgIDwveHM6c2ltcGxlQ29udGVudD4KICAgICAgICA8L3hzOmNvbXBsZXhUeXBlPgogICAgPC94czplbGVtZW50PgoKICAgIDx4czplbGVtZW50IG5hbWU9IlBhY2thZ2VJc1Zpc2libGUiPgogICAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4KICAgICAgICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iMCIvPgogICAgICAgICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIxIi8+CiAgICAgICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czplbGVtZW50PgoKICAgIDx4czplbGVtZW50IG5hbWU9IlBhY2thZ2VJc0Rvd25sb2FkYWJsZSI+CiAgICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPgogICAgICAgICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIwIi8+CiAgICAgICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IjEiLz4KICAgICAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmVsZW1lbnQ+CgogICAgPHhzOmVsZW1lbnQgbmFtZT0iUGFja2FnZUlzQnVpbGRhYmxlIj4KICAgICAgICA8eHM6c2ltcGxlVHlwZT4KICAgICAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+CiAgICAgICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IjAiLz4KICAgICAgICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iMSIvPgogICAgICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgogICAgICAgIDwveHM6c2ltcGxlVHlwZT4KICAgIDwveHM6ZWxlbWVudD4KCiAgICA8eHM6ZWxlbWVudCBuYW1lPSJQYWNrYWdlSXNSZW1vdmFibGUiPgogICAgICAgIDx4czpzaW1wbGVUeXBlPgogICAgICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4KICAgICAgICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iMCIvPgogICAgICAgICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIxIi8+CiAgICAgICAgICAgIDwveHM6cmVzdHJpY3Rpb24+CiAgICAgICAgPC94czpzaW1wbGVUeXBlPgogICAgPC94czplbGVtZW50PgoKICAgIDx4czplbGVtZW50IG5hbWU9IlBhY2thZ2VBbGxvd0RpcmVjdFVwZGF0ZSI+CiAgICAgICAgPHhzOnNpbXBsZVR5cGU+CiAgICAgICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPgogICAgICAgICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIwIi8+CiAgICAgICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IjEiLz4KICAgICAgICAgICAgPC94czpyZXN0cmljdGlvbj4KICAgICAgICA8L3hzOnNpbXBsZVR5cGU+CiAgICA8L3hzOmVsZW1lbnQ+CgogICAgPHhzOmVsZW1lbnQgbmFtZT0iRmlsZWxpc3QiPgogICAgICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgICAgICAgPHhzOnNlcXVlbmNlPgogICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJGaWxlIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KICAgICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICA8L3hzOmNvbXBsZXhUeXBlPgogICAgICAgIDx4czprZXkgbmFtZT0idW5pcXVlLWxvY2F0aW9uIj4KICAgICAgICAgICAgPHhzOnNlbGVjdG9yIHhwYXRoPSJGaWxlIiAvPgogICAgICAgICAgICA8eHM6ZmllbGQgeHBhdGg9IkBMb2NhdGlvbiIgLz4KICAgICAgICA8L3hzOmtleT4KICAgIDwveHM6ZWxlbWVudD4KCiAgICA8eHM6ZWxlbWVudCBuYW1lPSJGaWxlIj4KICAgICAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iUGVybWlzc2lvbiIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJMb2NhdGlvbiIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJFbmNvZGUiIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgPC94czpjb21wbGV4VHlwZT4KICAgIDwveHM6ZWxlbWVudD4KCiAgICA8eHM6ZWxlbWVudCBuYW1lPSJQYWNrYWdlUmVxdWlyZWQiPgogICAgICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgICAgICAgPHhzOnNpbXBsZUNvbnRlbnQ+CiAgICAgICAgICAgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOnN0cmluZyI+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJWZXJzaW9uIiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgPC94czpleHRlbnNpb24+CiAgICAgICAgICAgIDwveHM6c2ltcGxlQ29udGVudD4KICAgICAgICA8L3hzOmNvbXBsZXhUeXBlPgogICAgPC94czplbGVtZW50PgoKICAgIDx4czplbGVtZW50IG5hbWU9Ik1vZHVsZVJlcXVpcmVkIj4KICAgICAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgICAgICAgIDx4czpzaW1wbGVDb250ZW50PgogICAgICAgICAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpzdHJpbmciPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iVmVyc2lvbiIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICAgICAgICAgIDwveHM6ZXh0ZW5zaW9uPgogICAgICAgICAgICA8L3hzOnNpbXBsZUNvbnRlbnQ+CiAgICAgICAgPC94czpjb21wbGV4VHlwZT4KICAgIDwveHM6ZWxlbWVudD4KCiAgICA8eHM6ZWxlbWVudCBuYW1lPSJJbnRyb0luc3RhbGwiPgogICAgICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgICAgICAgPHhzOnNpbXBsZUNvbnRlbnQ+CiAgICAgICAgICAgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOnN0cmluZyI+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJUeXBlIiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iTGFuZyIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICAgICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9IlRpdGxlIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iVHJhbnNsYXRhYmxlIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iRm9ybWF0IiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgPC94czpleHRlbnNpb24+CiAgICAgICAgICAgIDwveHM6c2ltcGxlQ29udGVudD4KICAgICAgICA8L3hzOmNvbXBsZXhUeXBlPgogICAgPC94czplbGVtZW50PgogICAgPHhzOmVsZW1lbnQgbmFtZT0iSW50cm9Vbmluc3RhbGwiPgogICAgICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgICAgICAgPHhzOnNpbXBsZUNvbnRlbnQ+CiAgICAgICAgICAgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOnN0cmluZyI+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJUeXBlIiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iTGFuZyIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICAgICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9IlRpdGxlIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iVHJhbnNsYXRhYmxlIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iRm9ybWF0IiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgPC94czpleHRlbnNpb24+CiAgICAgICAgICAgIDwveHM6c2ltcGxlQ29udGVudD4KICAgICAgICA8L3hzOmNvbXBsZXhUeXBlPgogICAgPC94czplbGVtZW50PgogICAgPHhzOmVsZW1lbnQgbmFtZT0iSW50cm9SZWluc3RhbGwiPgogICAgICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgICAgICAgPHhzOnNpbXBsZUNvbnRlbnQ+CiAgICAgICAgICAgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOnN0cmluZyI+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJUeXBlIiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iTGFuZyIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICAgICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9IlRpdGxlIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iVHJhbnNsYXRhYmxlIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iRm9ybWF0IiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgPC94czpleHRlbnNpb24+CiAgICAgICAgICAgIDwveHM6c2ltcGxlQ29udGVudD4KICAgICAgICA8L3hzOmNvbXBsZXhUeXBlPgogICAgPC94czplbGVtZW50PgogICAgPHhzOmVsZW1lbnQgbmFtZT0iSW50cm9VcGdyYWRlIj4KICAgICAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgICAgICAgIDx4czpzaW1wbGVDb250ZW50PgogICAgICAgICAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpzdHJpbmciPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iVHlwZSIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICAgICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9IkxhbmciIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJUaXRsZSIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICAgICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9IlRyYW5zbGF0YWJsZSIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICAgICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9IlZlcnNpb24iIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJGb3JtYXQiIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgICAgICAgICA8L3hzOmV4dGVuc2lvbj4KICAgICAgICAgICAgPC94czpzaW1wbGVDb250ZW50PgogICAgICAgIDwveHM6Y29tcGxleFR5cGU+CiAgICA8L3hzOmVsZW1lbnQ+CgogICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29kZUluc3RhbGwiPgogICAgICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgICAgICAgPHhzOnNpbXBsZUNvbnRlbnQ+CiAgICAgICAgICAgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOnN0cmluZyI+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJUeXBlIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iSWZQYWNrYWdlIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iSWZOb3RQYWNrYWdlIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgPC94czpleHRlbnNpb24+CiAgICAgICAgICAgIDwveHM6c2ltcGxlQ29udGVudD4KICAgICAgICA8L3hzOmNvbXBsZXhUeXBlPgogICAgPC94czplbGVtZW50PgogICAgPHhzOmVsZW1lbnQgbmFtZT0iQ29kZVVuaW5zdGFsbCI+CiAgICAgICAgPHhzOmNvbXBsZXhUeXBlPgogICAgICAgICAgICA8eHM6c2ltcGxlQ29udGVudD4KICAgICAgICAgICAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6c3RyaW5nIj4KICAgICAgICAgICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9IlR5cGUiIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJJZlBhY2thZ2UiIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJJZk5vdFBhY2thZ2UiIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgICAgICAgICA8L3hzOmV4dGVuc2lvbj4KICAgICAgICAgICAgPC94czpzaW1wbGVDb250ZW50PgogICAgICAgIDwveHM6Y29tcGxleFR5cGU+CiAgICA8L3hzOmVsZW1lbnQ+CiAgICA8eHM6ZWxlbWVudCBuYW1lPSJDb2RlUmVpbnN0YWxsIj4KICAgICAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgICAgICAgIDx4czpzaW1wbGVDb250ZW50PgogICAgICAgICAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpzdHJpbmciPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iVHlwZSIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICAgICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9IklmUGFja2FnZSIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICAgICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9IklmTm90UGFja2FnZSIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICAgICAgICAgIDwveHM6ZXh0ZW5zaW9uPgogICAgICAgICAgICA8L3hzOnNpbXBsZUNvbnRlbnQ+CiAgICAgICAgPC94czpjb21wbGV4VHlwZT4KICAgIDwveHM6ZWxlbWVudD4KICAgIDx4czplbGVtZW50IG5hbWU9IkNvZGVVcGdyYWRlIj4KICAgICAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgICAgICAgIDx4czpzaW1wbGVDb250ZW50PgogICAgICAgICAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpzdHJpbmciPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iVHlwZSIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICAgICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9IlZlcnNpb24iIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJJZlBhY2thZ2UiIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJJZk5vdFBhY2thZ2UiIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgICAgICAgICA8L3hzOmV4dGVuc2lvbj4KICAgICAgICAgICAgPC94czpzaW1wbGVDb250ZW50PgogICAgICAgIDwveHM6Y29tcGxleFR5cGU+CiAgICA8L3hzOmVsZW1lbnQ+CgogICAgPHhzOmVsZW1lbnQgbmFtZT0iUGFja2FnZU1lcmdlIj4KICAgICAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgICAgICAgIDx4czpzZXF1ZW5jZT4KICAgICAgICAgICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CiAgICAgICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJDb2RlVXBncmFkZSIvPgogICAgICAgICAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iRGF0YWJhc2VVcGdyYWRlIi8+CiAgICAgICAgICAgICAgICA8L3hzOmNob2ljZT4KICAgICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJOYW1lIiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9IlRhcmdldFZlcnNpb24iIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzOnRva2VuIi8+CiAgICAgICAgPC94czpjb21wbGV4VHlwZT4KICAgIDwveHM6ZWxlbWVudD4KCiAgICA8eHM6ZWxlbWVudCBuYW1lPSJOYW1lIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgPHhzOmVsZW1lbnQgbmFtZT0iVmVuZG9yIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgPHhzOmVsZW1lbnQgbmFtZT0iVVJMIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgPHhzOmVsZW1lbnQgbmFtZT0iRnJhbWV3b3JrIj4KICAgICAgICA8eHM6Y29tcGxleFR5cGU+CiAgICAgICAgICAgIDx4czpzaW1wbGVDb250ZW50PgogICAgICAgICAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czp0b2tlbiI+CiAgICAgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJNaW5pbXVtIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iTWF4aW11bSIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6dG9rZW4iLz4KICAgICAgICAgICAgICAgIDwveHM6ZXh0ZW5zaW9uPgogICAgICAgICAgICA8L3hzOnNpbXBsZUNvbnRlbnQ+CiAgICAgICAgPC94czpjb21wbGV4VHlwZT4KICAgIDwveHM6ZWxlbWVudD4KICAgIDx4czplbGVtZW50IG5hbWU9IlZlcnNpb24iIHR5cGU9InhzOnRva2VuIi8+CiAgICA8eHM6ZWxlbWVudCBuYW1lPSJMaWNlbnNlIiB0eXBlPSJ4czp0b2tlbiIvPgogICAgPHhzOmVsZW1lbnQgbmFtZT0iT1MiIHR5cGU9InhzOnRva2VuIi8+CjwveHM6c2NoZW1hPgo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/TT/ScriptUsage.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlRUOjpTY3JpcHRVc2FnZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkJhc2UpOwoKc3ViIHZhbGlkYXRlX3NvdXJjZSB7CiAgICBteSAoICRTZWxmLCAkQ29kZSApID0gQF87CgogICAgcmV0dXJuIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBDb2RlID0+ICRDb2RlICk7CgogICAgbXkgJEVycm9yTWVzc2FnZTsKICAgIG15ICRDb3VudGVyOwoKICAgIGZvciBteSAkTGluZSAoIHNwbGl0KCAvXG4vLCAkQ29kZSApICkgewogICAgICAgICRDb3VudGVyKys7CiAgICAgICAgaWYgKCAkTGluZSA9fiBteyA8c2NyaXB0IH14bXMgKSB7CiAgICAgICAgICAgICRFcnJvck1lc3NhZ2UKICAgICAgICAgICAgICAgIC49ICJFUlJPUjogRm91bmQgSmF2YVNjcmlwdCB1c2FnZSBpbiBsaW5lKCAkQ291bnRlciApOiAkTGluZVxuIjsKICAgICAgICAgICAgJEVycm9yTWVzc2FnZSAuPSAiUGxlYXNlIHVzZSBKYXZhU2NyaXB0IGZpbGVzIGluc3RlYWQuXG4iOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoJEVycm9yTWVzc2FnZSkgewogICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKCIkRXJyb3JNZXNzYWdlIik7CiAgICB9Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/TT/TranslationFilter.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlRUOjpUcmFuc2xhdGlvbkZpbHRlcjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkJhc2UpOwoKc3ViIHZhbGlkYXRlX3NvdXJjZSB7CiAgICBteSAoICRTZWxmLCAkQ29kZSApID0gQF87CgogICAgcmV0dXJuIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBDb2RlID0+ICRDb2RlICk7CgogICAgbXkgJEVycm9yTWVzc2FnZTsKICAgIG15ICRDb3VudGVyOwoKICAgIGZvciBteSAkTGluZSAoIHNwbGl0KCAvXG4vLCAkQ29kZSApICkgewogICAgICAgICRDb3VudGVyKys7CgogICAgICAgICMgUHJvY2VzcyBsaW5lcyB0aGF0IGRlYWwgd2l0aCB0cmFuc2xhdGlvbiBvdXRwdXQgaW4gZnVuY3Rpb24gZm9ybS4KICAgICAgICB3aGlsZSAoICRMaW5lID1+IG17IFxbJSBccyogXGJUcmFuc2xhdGVcKChbXigpXSp8XChbXigpXSpcKSkqXCk/ICg/PEZpbHRlcj4uKj8pICVcXSB9Z3N4bSApIHsKCiAgICAgICAgICAgICMgQ2hlY2sgaWYgb3V0cHV0IGlzIG5vdCBmaWx0ZXJlZC4KICAgICAgICAgICAgaWYgKCAkK3tGaWx0ZXJ9ICF+IG17IFxzKiAoPzpGSUxURVJ8XHwpIFxzKiAoPzpodG1sfEpTT04pIH1zeG0gKSB7CiAgICAgICAgICAgICAgICAkRXJyb3JNZXNzYWdlCiAgICAgICAgICAgICAgICAgICAgLj0gIkVSUk9SOiBGb3VuZCB1bmZpbHRlcmVkIHRyYW5zbGF0aW9uIHN0cmluZyBpbiBsaW5lKCAkQ291bnRlciApOiAkTGluZVxuIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBQcm9jZXNzIGxpbmVzIHRoYXQgZGVhbCB3aXRoIHRyYW5zbGF0aW9uIG91dHB1dCBpbiBmaWx0ZXIgZm9ybS4KICAgICAgICB3aGlsZSAoICRMaW5lID1+IG17ICg/OkZJTFRFUnxcfCkgXHMqIFxiVHJhbnNsYXRlICg/PEZpbHRlcj4uKj8pICVcXSB9Z3N4bSApIHsKCiAgICAgICAgICAgICMgQ2hlY2sgaWYgb3V0cHV0IGlzIG5vdCBmaWx0ZXJlZC4KICAgICAgICAgICAgaWYgKCAkK3tGaWx0ZXJ9ICF+IG17IFxzKiAoPzpGSUxURVJ8XHwpIFxzKiAoPzpodG1sfEpTT04pIH1zeG0gKSB7CiAgICAgICAgICAgICAgICAkRXJyb3JNZXNzYWdlCiAgICAgICAgICAgICAgICAgICAgLj0gIkVSUk9SOiBGb3VuZCB1bmZpbHRlcmVkIHRyYW5zbGF0aW9uIHN0cmluZyBpbiBsaW5lKCAkQ291bnRlciApOiAkTGluZVxuIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBpZiAoJEVycm9yTWVzc2FnZSkgewogICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKAogICAgICAgICAgICAiJHtFcnJvck1lc3NhZ2V9UGxlYXNlIG1ha2Ugc3VyZSB0byBwcm9jZXNzIHRyYW5zbGF0ZWQgc3RyaW5ncyB3aXRoIGh0bWwgb3IgSlNPTiBmaWx0ZXIuXG4iCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm47Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Whitespace/FourSpaces.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OldoaXRlc3BhY2U6OkZvdXJTcGFjZXM7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgTW9vOwoKZXh0ZW5kcyBxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpCYXNlKTsKCnN1YiB2YWxpZGF0ZV9zb3VyY2UgewogICAgbXkgKCAkU2VsZiwgJENvZGUgKSA9IEBfOwoKICAgIHJldHVybiBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZCggQ29kZSA9PiAkQ29kZSApOwoKICAgIG15ICRDb3VudGVyOwogICAgbXkgJEVycm9yTWVzc2FnZTsKICAgIG15ICRJc1RleHRBcmVhID0gMDsgICAgIyBpbiBjb25maWcgZmlsZXMKICAgIG15ICRJc1NPUE1EYXRhID0gMDsgICAgIyBkYXRhYmFzZSBlbnRyaWVzIG9mIHNvcG0gZmlsZXMKCiAgICAjCiAgICAjIENoZWNrIGZvciBzdGVwcyBvZiBmb3VyIHNwYWNlcwogICAgIwogICAgTElORToKICAgIGZvciBteSAkTGluZSAoIHNwbGl0KCAvXG4vLCAkQ29kZSApICkgewoKICAgICAgICAkQ291bnRlcisrOwoKICAgICAgICAjIHRleHRhcmVhcyBpbiBjb25maWcgZmlsZXMKICAgICAgICBpZiAoICRMaW5lID1+IC88VGV4dEFyZWE+LyApIHsKICAgICAgICAgICAgJElzVGV4dEFyZWEgPSAxOwogICAgICAgIH0KICAgICAgICBpZiAoICRMaW5lID1+IC88XC9UZXh0QXJlYT4vICkgewogICAgICAgICAgICAkSXNUZXh0QXJlYSA9IDA7CiAgICAgICAgfQoKICAgICAgICAjIGRhdGFiYXNlIGVudHJpZXMgb2Ygc29wbSBmaWxlcwogICAgICAgIGlmICggJExpbmUgPX4gbXsgPERhdGEgXHN9c214ICkgewogICAgICAgICAgICAkSXNTT1BNRGF0YSA9IDE7CiAgICAgICAgfQogICAgICAgIGlmICggJExpbmUgPX4gbXsgPCBcLyBEYXRhID4gfXNteCApIHsKICAgICAgICAgICAgJElzU09QTURhdGEgPSAwOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkTGluZSA9fiAvXiggKykvICkgewogICAgICAgICAgICBteSAkU3BhY2VTdHJpbmcgPSAkMTsKICAgICAgICAgICAgbXkgJExlbmd0aCAgICAgID0gbGVuZ3RoICRTcGFjZVN0cmluZzsKCiAgICAgICAgICAgIGlmICggJExlbmd0aCAlIDQgJiYgISRJc1RleHRBcmVhICYmICEkSXNTT1BNRGF0YSApIHsKICAgICAgICAgICAgICAgICRFcnJvck1lc3NhZ2UgLj0gIkxpbmUgJENvdW50ZXI6ICRMaW5lXG4iOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmICgkRXJyb3JNZXNzYWdlKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoPDwiRU9GIik7ClNwYWNlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSBzaG91bGQgYmUgaW4gc3RlcHMgb2YgZm91ciEKJEVycm9yTWVzc2FnZQpFT0YKICAgIH0KfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Whitespace/Tabs.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OldoaXRlc3BhY2U6OlRhYnM7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgTW9vOwoKZXh0ZW5kcyBxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpCYXNlKTsKCnN1YiB2YWxpZGF0ZV9zb3VyY2UgewogICAgbXkgKCAkU2VsZiwgJENvZGUgKSA9IEBfOwoKICAgIHJldHVybiBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZCggQ29kZSA9PiAkQ29kZSApOwoKICAgIG15ICRDb3VudGVyID0gMTsKICAgIG15ICRFcnJvck1lc3NhZ2U7CgogICAgIwogICAgIyBDaGVjayBmb3Igc3RyYXkgdGFicwogICAgIwogICAgTElORToKICAgIGZvciBteSAkTGluZSAoIHNwbGl0KCAvXG4vLCAkQ29kZSApICkgewoKICAgICAgICAkQ291bnRlcisrOwoKICAgICAgICBpZiAoICRMaW5lID1+IG0vXHQvICkgewogICAgICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICJMaW5lICRDb3VudGVyOiAkTGluZVxuIjsKICAgICAgICB9CgogICAgfQoKICAgIGlmICgkRXJyb3JNZXNzYWdlKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoPDwiRU9GIik7ClBsZWFzZSBzdWJzdGl0dXRlIGFsbCB0YWJ1bGF0b3JzIHdpdGggZm91ciBzcGFjZXMuCiRFcnJvck1lc3NhZ2UKRU9GCiAgICB9Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/Whitespace/TrailingWhitespace.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OldoaXRlc3BhY2U6OlRyYWlsaW5nV2hpdGVzcGFjZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkJhc2UpOwoKc3ViIHRyYW5zZm9ybV9zb3VyY2UgewogICAgbXkgKCAkU2VsZiwgJENvZGUgKSA9IEBfOwoKICAgIHJldHVybiBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZCggQ29kZSA9PiAkQ29kZSApOwoKICAgICMgUmVtb3ZlIHRyYWlsaW5nIHNwYWNlcyBhdCBlbmQgb2YgbGluZXMKICAgICRDb2RlID1+IHMvXiguKj8pWyBdK1xuLyQxXG4veG1zZzsKCiAgICAjIFJlbW92ZSBlbXB0eSB0cmFpbGluZyBsaW5lcwogICAgJENvZGUgPX4gcy9cbihcc3xcbikrXHovXG4veG1zZzsKCiAgICByZXR1cm4gJENvZGU7Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/XML/ConfigDescription.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6Q29uZmlnRGVzY3JpcHRpb247Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgTW9vOwoKZXh0ZW5kcyBxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpCYXNlKTsKCnN1YiB2YWxpZGF0ZV9zb3VyY2UgewogICAgbXkgKCAkU2VsZiwgJENvZGUgKSA9IEBfOwoKICAgIHJldHVybiBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZCggQ29kZSA9PiAkQ29kZSApOwoKICAgIG15ICggJEVycm9yTWVzc2FnZSwgJENvdW50ZXIsICROYXZCYXIgKTsKCiAgICBmb3IgbXkgJExpbmUgKCBzcGxpdCAvXG4vLCAkQ29kZSApIHsKICAgICAgICAkQ291bnRlcisrOwogICAgICAgIGlmICggJExpbmUgPX4gLzxOYXZCYXIvICkgewogICAgICAgICAgICAkTmF2QmFyID0gMTsKICAgICAgICB9CiAgICAgICAgaWYgKCAkTGluZSA9fiAvPFwvTmF2QmFyLyApIHsKICAgICAgICAgICAgJE5hdkJhciA9IDA7CiAgICAgICAgfQoKICAgICAgICBpZiAoICEkTmF2QmFyICYmICRMaW5lID1+IC88RGVzY3JpcHRpb24uKz8+KC4pLio/KC4pXCk/PFwvRGVzY3JpcHRpb24+LyApIHsKICAgICAgICAgICAgaWYgKCAkMiBuZSAnLicgJiYgJDIgbmUgJz8nICYmICQyIG5lICchJyApIHsKICAgICAgICAgICAgICAgICRFcnJvck1lc3NhZ2UgLj0gIkxpbmUgJENvdW50ZXI6ICRMaW5lXG4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJDEgIX4gL1tBLVrDi8Ocw5YiXS8gKSB7CiAgICAgICAgICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICJMaW5lICRDb3VudGVyOiAkTGluZVxuIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBpZiAoJEVycm9yTWVzc2FnZSkgewogICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKDw8IkVPRiIpOwpQbGVhc2UgbWFrZSBjb21wbGV0ZSBzZW50ZW5jZXMgaW4gPERlc2NyaXB0aW9uPiB0YWdzOiBzdGFydCB3aXRoIGEgY2FwaXRhbCBsZXR0ZXIgYW5kIGZpbmlzaCB3aXRoIGEgZG90LgokRXJyb3JNZXNzYWdlCkVPRgogICAgfQp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/XML/ConfigSyntax.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6Q29uZmlnU3ludGF4OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6QmFzZSk7CgojIFRoaXMgcGx1Z2luIGRvZXMgbm90IHRyYW5zZm9ybSBhbnkgZmlsZXMuIEZvbGxvd2luZyBtZXRob2QgaXMgaW1wbGVtZW50ZWQgb25seSBiZWNhdXNlIGl0J3MgZXhlY3V0ZWQgYmVmb3JlCiMgICB2YWxpZGF0ZV9zb3VyY2UgYW5kIGNvbnRhaW5zIGZpbGVuYW1lIG9mIHRoZSBmaWxlLiBGaWxlbmFtZSBpcyBzYXZlZCBpbiAkU2VsZiBmb3IgbGF0ZXIgdXNlLgpzdWIgdHJhbnNmb3JtX2ZpbGUgewogICAgbXkgKCAkU2VsZiwgJEZpbGVuYW1lICkgPSBAXzsKCiAgICAjIFN0b3JlIGZpbGVuYW1lIGZvciBsYXRlciB1c2UuCiAgICAkU2VsZi0+e0ZpbGVuYW1lfSA9ICRGaWxlbmFtZTsKCiAgICByZXR1cm47Cn0KCnN1YiB2YWxpZGF0ZV9zb3VyY2UgewogICAgbXkgKCAkU2VsZiwgJENvZGUgKSA9IEBfOwoKICAgIHJldHVybiBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZCggQ29kZSA9PiAkQ29kZSApOwoKICAgIG15ICRFcnJvck1lc3NhZ2U7CiAgICBteSAkQ291bnRlcjsKCiAgICBmb3IgbXkgJExpbmUgKCBzcGxpdCAvXG4vLCAkQ29kZSApIHsKICAgICAgICAkQ291bnRlcisrOwoKICAgICAgICAjIENoZWNrIGZpcnN0IFhNTCBsaW5lCiAgICAgICAgaWYgKCAkQ291bnRlciA9PSAxICkgewogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkTGluZSAgICAhfiAvXjxcP3htbC4rXD8+LwogICAgICAgICAgICAgICAgfHwgJExpbmUgIX4gL3ZlcnNpb249WyInJ10xLlswMV1bIiddLwogICAgICAgICAgICAgICAgfHwgJExpbmUgIX4gL2VuY29kaW5nPVsiJ10oPzppc28tODg1OS0xfHV0Zi04KVsiJ10vaQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkRXJyb3JNZXNzYWdlCiAgICAgICAgICAgICAgICAgICAgLj0gIlRoZSBmaXJzdCBsaW5lIG9mIHRoZSBmaWxlIHNob3VsZCBoYXZlIHRoZSBjb250ZW50IDw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cInV0Zi04XCIgPz4uXG4iOwogICAgICAgICAgICAgICAgJEVycm9yTWVzc2FnZSAuPSAiTGluZSAkQ291bnRlcjogJExpbmVcbiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgVmFsaWRhdGUgb3RvYm9fY29uZmlnIHRhZwogICAgICAgIGlmICggJExpbmUgPX4gL148b3RvYm9fY29uZmlnLyApIHsKCiAgICAgICAgICAgICMgT1RPQk8gMTAgc3RhcnRlZCB3aXRoIHZlcnNpb249IjIuMCIKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbXkgJFZlcnNpb24gPSAnMi4wJzsKCiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgJExpbmUgIX4gL2luaXQ9IihGcmFtZXdvcmt8QXBwbGljYXRpb258Q29uZmlnfENoYW5nZXMpIi8KICAgICAgICAgICAgICAgICAgICB8fCAkTGluZSAhfiAvdmVyc2lvbj0iJFZlcnNpb24iLwogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3JNZXNzYWdlCiAgICAgICAgICAgICAgICAgICAgICAgIC49ICJUaGUgPG90b2JvX2NvbmZpZz4tdGFnIGhhcyBtaXNzaW5nIG9yIGluY29ycmVjdCBhdHRyaWJ1dGVzLiBFeGFtcGxlTGluZTogPG90b2JvX2NvbmZpZyB2ZXJzaW9uPVwiMi4wXCIgaW5pdD1cIkFwcGxpY2F0aW9uXCI+XG4iOwogICAgICAgICAgICAgICAgICAgICRFcnJvck1lc3NhZ2UgLj0gIkxpbmUgJENvdW50ZXI6ICRMaW5lXG4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmICgkRXJyb3JNZXNzYWdlKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoIiRFcnJvck1lc3NhZ2UiKTsKICAgIH0KfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/XML/Configuration/Navigation.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6Q29uZmlndXJhdGlvbjo6TmF2aWdhdGlvbjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkJhc2UpOwoKc3ViIHZhbGlkYXRlX3NvdXJjZSB7CiAgICBteSAoICRTZWxmLCAkQ29kZSApID0gQF87CgogICAgcmV0dXJuICRDb2RlIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBDb2RlID0+ICRDb2RlICk7CgogICAgbXkgKCAkQ291bnRlciwgJEVycm9yTWVzc2FnZSApOwoKICAgIG15ICRDdXJyZW50U2V0dGluZ05hbWU7CgogICAgTElORToKICAgIGZvciBteSAkTGluZSAoIHNwbGl0IC9cbi8sICRDb2RlICkgewogICAgICAgICRDb3VudGVyKys7CgogICAgICAgIGlmICggJExpbmUgPX4gbXs8U2V0dGluZ1xzK05hbWU9IiguKj8pIn1zbXggKSB7CiAgICAgICAgICAgICRDdXJyZW50U2V0dGluZ05hbWUgPSAkMTsKICAgICAgICB9CiAgICAgICAgbXkgKCROYXZpZ2F0aW9uQ29udGVudCkgPSAkTGluZSA9fiBtezxOYXZpZ2F0aW9uPiguKj8pPC9OYXZpZ2F0aW9uPn1zbXg7CgogICAgICAgIG5leHQgTElORSB1bmxlc3MgJE5hdmlnYXRpb25Db250ZW50OwoKICAgICAgICBteSBAUnVsZXMgPSAoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgICAgPT4gJ1ZhbGlkIHRvcGxldmVsIGVudHJpZXMnLAogICAgICAgICAgICAgICAgTWF0Y2hTZXR0aW5nTmFtZSAgICAgICA9PiBxcnsuKn0sCiAgICAgICAgICAgICAgICBNYXRjaE5hdmlnYXRpb25WYWx1ZSAgID0+IHFyey4qfSwKICAgICAgICAgICAgICAgIFJlcXVpcmVOYXZpZ2F0aW9uTWF0Y2ggPT4gcXJ7XihDbG91ZFNlcnZpY2V8Q29yZXxEYWVtb258R2VuZXJpY0ludGVyZmFjZXxGcm9udGVuZCkoOjp8JCl9LAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlICAgICAgICAgICA9PiAnSW52YWxpZCB0b3AgbGV2ZWwgZ3JvdXAgZm91bmQgKG9ubHkgQ2xvdWRTZXJ2aWNlfENvcmV8RGFlbW9ufEdlbmVyaWNJbnRlcmZhY2V8RnJvbnRlbmQgYXJlIGFsbG93ZWQpLicsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgICAgPT4gJ0V2ZW50IGhhbmRsZXJzJywKICAgICAgICAgICAgICAgIE1hdGNoU2V0dGluZ05hbWUgICAgICAgPT4gcXJ7OjpFdmVudE1vZHVsZX0sCiAgICAgICAgICAgICAgICBNYXRjaE5hdmlnYXRpb25WYWx1ZSAgID0+IHFyey4qfSwKICAgICAgICAgICAgICAgIFJlcXVpcmVOYXZpZ2F0aW9uTWF0Y2ggPT4gcXJ7XkNvcmU6OkV2ZW50Ojp9LAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlICAgICAgICAgICA9PiAiRXZlbnQgaGFuZGxlciByZWdpc3RyYXRpb25zIHNob3VsZCBiZSBncm91cGVkIGluICdDb3JlOjpFdmVudDo6Ki4iLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgID0+ICdWYWxpZCBGcm9udGVuZCBzdWJncm91cHMnLAogICAgICAgICAgICAgICAgTWF0Y2hTZXR0aW5nTmFtZSAgICAgICA9PiBxcnsuKn0sCiAgICAgICAgICAgICAgICBNYXRjaE5hdmlnYXRpb25WYWx1ZSAgID0+IHFye15Gcm9udGVuZH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBubyBlbnRyaWVzIGFsbG93ZWQgaW4gIkZyb250ZW5kIiBkaXJlY3RseQogICAgICAgICAgICAgICAgUmVxdWlyZU5hdmlnYXRpb25NYXRjaCA9PiBxcnteRnJvbnRlbmQ6OihBZG1pbnxBZ2VudHxCYXNlfEN1c3RvbWVyfFB1YmxpY3xFeHRlcm5hbCkoOjp8JCl9LAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlICAgICAgICAgICA9PgogICAgICAgICAgICAgICAgICAgICdJbnZhbGlkIHRvcCBGcm9udGVuZCBzdWJncm91cCBmb3VuZCAob25seSBBZG1pbnxBZ2VudHxCYXNlfEN1c3RvbWVyfFB1YmxpY3xFeHRlcm5hbCBhcmUgYWxsb3dlZCkuJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgICA9PiAnTWFpbiBMb2FkZXIgY29uZmlnJywKICAgICAgICAgICAgICAgIE1hdGNoU2V0dGluZ05hbWUgICAgICAgPT4gcXJ7XkxvYWRlcjo6KEFnZW50fEN1c3RvbWVyfEVuYWJsZWQpfSwKICAgICAgICAgICAgICAgIE1hdGNoTmF2aWdhdGlvblZhbHVlICAgPT4gcXJ7Lip9LAogICAgICAgICAgICAgICAgUmVxdWlyZU5hdmlnYXRpb25NYXRjaCA9PiBxcnteRnJvbnRlbmQ6OkJhc2U6OkxvYWRlciR9LAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlICAgICAgICAgICA9PiAiTWFpbiBMb2FkZXIgc2V0dGluZ3Mgc2hvdWxkIGJlIGdyb3VwZWQgaW4gJ0Zyb250ZW5kOjpCYXNlOjpMb2FkZXInLiIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgICAgPT4gJ0xvYWRlciBjb25maWcgZm9yIEFkbWluIGludGVyZmFjZScsCiAgICAgICAgICAgICAgICBNYXRjaFNldHRpbmdOYW1lICAgICAgID0+IHFye15Mb2FkZXI6Ok1vZHVsZTo6QWRtaW59LAogICAgICAgICAgICAgICAgTWF0Y2hOYXZpZ2F0aW9uVmFsdWUgICA9PiBxcnsuKn0sCiAgICAgICAgICAgICAgICBSZXF1aXJlTmF2aWdhdGlvbk1hdGNoID0+IHFye15Gcm9udGVuZDo6QWRtaW46Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TG9hZGVyfSwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSAgICAgICAgICAgPT4KICAgICAgICAgICAgICAgICAgICAiTG9hZGVyIGNvbmZpZyBmb3IgQWRtaW4gaW50ZXJmYWNlIHNob3VsZCBiZSBncm91cGVkIGluICdGcm9udGVuZDo6QWRtaW46Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TG9hZGVyJy4iLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgID0+ICdMb2FkZXIgY29uZmlnIGZvciBBZ2VudCBpbnRlcmZhY2UnLAogICAgICAgICAgICAgICAgTWF0Y2hTZXR0aW5nTmFtZSAgICAgICA9PiBxcnteTG9hZGVyOjpNb2R1bGU6OkFnZW50fSwKICAgICAgICAgICAgICAgIE1hdGNoTmF2aWdhdGlvblZhbHVlICAgPT4gcXJ7Lip9LAogICAgICAgICAgICAgICAgUmVxdWlyZU5hdmlnYXRpb25NYXRjaCA9PiBxcnteRnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb246OkxvYWRlcn0sCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgICAgICAgICAgID0+CiAgICAgICAgICAgICAgICAgICAgIkxvYWRlciBzZXR0aW5ncyBmb3IgQWdlbnQgaW50ZXJmYWNlIHNob3VsZCBiZSBncm91cGVkIGluICdGcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TG9hZGVyJy4iLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgID0+ICdMb2FkZXIgY29uZmlnIGZvciBDdXN0b21lciBpbnRlcmZhY2UnLAogICAgICAgICAgICAgICAgTWF0Y2hTZXR0aW5nTmFtZSAgICAgICA9PiBxcnteTG9hZGVyOjpNb2R1bGU6OkN1c3RvbWVyfSwKICAgICAgICAgICAgICAgIE1hdGNoTmF2aWdhdGlvblZhbHVlICAgPT4gcXJ7Lip9LAogICAgICAgICAgICAgICAgUmVxdWlyZU5hdmlnYXRpb25NYXRjaCA9PiBxcnteRnJvbnRlbmQ6OkN1c3RvbWVyOjpNb2R1bGVSZWdpc3RyYXRpb246OkxvYWRlcn0sCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgICAgICAgICAgID0+CiAgICAgICAgICAgICAgICAgICAgIkxvYWRlciBzZXR0aW5ncyBmb3IgQ3VzdG9tZXIgaW50ZXJmYWNlIHNob3VsZCBiZSBncm91cGVkIGluICdGcm9udGVuZDo6Q3VzdG9tZXI6Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TG9hZGVyJy4iLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgID0+ICdMb2FkZXIgY29uZmlnIGZvciBQdWJsaWMgaW50ZXJmYWNlJywKICAgICAgICAgICAgICAgIE1hdGNoU2V0dGluZ05hbWUgICAgICAgPT4gcXJ7XkxvYWRlcjo6TW9kdWxlOjpQdWJsaWN9LAogICAgICAgICAgICAgICAgTWF0Y2hOYXZpZ2F0aW9uVmFsdWUgICA9PiBxcnsuKn0sCiAgICAgICAgICAgICAgICBSZXF1aXJlTmF2aWdhdGlvbk1hdGNoID0+IHFye15Gcm9udGVuZDo6UHVibGljOjpNb2R1bGVSZWdpc3RyYXRpb259LAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlICAgICAgICAgICA9PgogICAgICAgICAgICAgICAgICAgICJMb2FkZXIgc2V0dGluZ3MgZm9yIFB1YmxpYyBpbnRlcmZhY2Ugc2hvdWxkIGJlIGdyb3VwZWQgaW4gJ0Zyb250ZW5kOjpQdWJsaWM6Ok1vZHVsZVJlZ2lzdHJhdGlvbicuIiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgICA9PiAnRnJvbnRlbmQgbmF2aWdhdGlvbiBjb25maWcgZm9yIEFkbWluIGludGVyZmFjZScsCiAgICAgICAgICAgICAgICBNYXRjaFNldHRpbmdOYW1lICAgICAgID0+IHFye15Gcm9udGVuZDo6TmF2aWdhdGlvbiMjI0FkbWlufSwKICAgICAgICAgICAgICAgIE1hdGNoTmF2aWdhdGlvblZhbHVlICAgPT4gcXJ7Lip9LAogICAgICAgICAgICAgICAgUmVxdWlyZU5hdmlnYXRpb25NYXRjaCA9PiBxcnteRnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb246Ok1haW5NZW51fSwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSAgICAgICAgICAgPT4KICAgICAgICAgICAgICAgICAgICAiRnJvbnRlbmQgbmF2aWdhdGlvbiBjb25maWcgZm9yIEFkbWluIGludGVyZmFjZSBzaG91bGQgYmUgZ3JvdXBlZCBpbiAnRnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb246Ok1haW5NZW51Jy4iLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgID0+ICdGcm9udGVuZCBuYXZpZ2F0aW9uIGNvbmZpZyBmb3IgQWdlbnQgaW50ZXJmYWNlJywKICAgICAgICAgICAgICAgIE1hdGNoU2V0dGluZ05hbWUgICAgICAgPT4gcXJ7XkZyb250ZW5kOjpOYXZpZ2F0aW9uIyMjQWdlbnR9LAogICAgICAgICAgICAgICAgTWF0Y2hOYXZpZ2F0aW9uVmFsdWUgICA9PiBxcnsuKn0sCiAgICAgICAgICAgICAgICBSZXF1aXJlTmF2aWdhdGlvbk1hdGNoID0+IHFye15Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TWFpbk1lbnV9LAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlICAgICAgICAgICA9PgogICAgICAgICAgICAgICAgICAgICJGcm9udGVuZCBuYXZpZ2F0aW9uIGNvbmZpZyBmb3IgQWdlbnQgaW50ZXJmYWNlIHNob3VsZCBiZSBncm91cGVkIGluICdGcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TWFpbk1lbnUnLiIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgICAgPT4gJ0Zyb250ZW5kIG5hdmlnYXRpb24gY29uZmlnIGZvciBDdXN0b21lciBpbnRlcmZhY2UnLAogICAgICAgICAgICAgICAgTWF0Y2hTZXR0aW5nTmFtZSAgICAgICA9PiBxcnteQ3VzdG9tZXJGcm9udGVuZDo6TmF2aWdhdGlvbiMjI0N1c3RvbWVyfSwKICAgICAgICAgICAgICAgIE1hdGNoTmF2aWdhdGlvblZhbHVlICAgPT4gcXJ7Lip9LAogICAgICAgICAgICAgICAgUmVxdWlyZU5hdmlnYXRpb25NYXRjaCA9PiBxcnteRnJvbnRlbmQ6OkN1c3RvbWVyOjpNb2R1bGVSZWdpc3RyYXRpb246Ok1haW5NZW51fSwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSAgICAgICAgICAgPT4KICAgICAgICAgICAgICAgICAgICAiRnJvbnRlbmQgbmF2aWdhdGlvbiBjb25maWcgZm9yIEN1c3RvbWVyIGludGVyZmFjZSBzaG91bGQgYmUgZ3JvdXBlZCBpbiAnRnJvbnRlbmQ6OkN1c3RvbWVyOjpNb2R1bGVSZWdpc3RyYXRpb246Ok1haW5NZW51Jy4iLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgID0+ICdGcm9udGVuZCBuYXZpZ2F0aW9uIGNvbmZpZyBmb3IgUHVibGljIGludGVyZmFjZScsCiAgICAgICAgICAgICAgICBNYXRjaFNldHRpbmdOYW1lICAgICAgID0+IHFye15QdWJsaWNGcm9udGVuZDo6KE1vZHVsZXxOYXZpZ2F0aW9uKX0sCiAgICAgICAgICAgICAgICBNYXRjaE5hdmlnYXRpb25WYWx1ZSAgID0+IHFyey4qfSwKICAgICAgICAgICAgICAgIFJlcXVpcmVOYXZpZ2F0aW9uTWF0Y2ggPT4gcXJ7XkZyb250ZW5kOjpQdWJsaWM6Ok1vZHVsZVJlZ2lzdHJhdGlvbn0sCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgICAgICAgICAgID0+CiAgICAgICAgICAgICAgICAgICAgIk1vZHVsZSByZWdpc3RyYXRpb24gY29uZmlnIGZvciBQdWJsaWMgaW50ZXJmYWNlIHNob3VsZCBiZSBncm91cGVkIGluICdGcm9udGVuZDo6UHVibGljOjpNb2R1bGVSZWdpc3RyYXRpb24nLiIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgICAgPT4gJ05hdmlnYXRpb24gbW9kdWxlIGNvbmZpZycsCiAgICAgICAgICAgICAgICBNYXRjaFNldHRpbmdOYW1lICAgICAgID0+IHFye15Gcm9udGVuZDo6TmF2aWdhdGlvbk1vZHVsZX0sCiAgICAgICAgICAgICAgICBNYXRjaE5hdmlnYXRpb25WYWx1ZSAgID0+IHFyey4qfSwKICAgICAgICAgICAgICAgIFJlcXVpcmVOYXZpZ2F0aW9uTWF0Y2ggPT4gcXJ7XkZyb250ZW5kOjpBZG1pbjo6TW9kdWxlUmVnaXN0cmF0aW9uOjpBZG1pbk92ZXJ2aWV3fSwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSAgICAgICAgICAgPT4KICAgICAgICAgICAgICAgICAgICAiTmF2aWdhdGlvbiBtb2R1bGUgY29uZmlnIHNob3VsZCBiZSBncm91cGVkIGluICdGcm9udGVuZDo6QWRtaW46Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6QWRtaW5PdmVydmlldycuIiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgICA9PiAnU2VhcmNoIHJvdXRlciBjb25maWcgZm9yIEFkbWluIGludGVyZmFjZScsCiAgICAgICAgICAgICAgICBNYXRjaFNldHRpbmdOYW1lICAgICAgID0+IHFye15Gcm9udGVuZDo6U2VhcmNoLio/IyMjQWRtaW59LAogICAgICAgICAgICAgICAgTWF0Y2hOYXZpZ2F0aW9uVmFsdWUgICA9PiBxcnsuKn0sCiAgICAgICAgICAgICAgICBSZXF1aXJlTmF2aWdhdGlvbk1hdGNoID0+IHFye15Gcm9udGVuZDo6QWRtaW46Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TWFpbk1lbnU6OlNlYXJjaH0sCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgICAgICAgICAgID0+CiAgICAgICAgICAgICAgICAgICAgIlNlYXJjaCByb3V0ZXIgY29uZmlnIGZvciBBZG1pbiBpbnRlcmZhY2Ugc2hvdWxkIGJlIGdyb3VwZWQgaW4gJ0Zyb250ZW5kOjpBZG1pbjo6TW9kdWxlUmVnaXN0cmF0aW9uOjpTZWFyY2gnLiIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgICAgPT4gJ1NlYXJjaCByb3V0ZXIgY29uZmlnIGZvciBBZ2VudCBpbnRlcmZhY2UnLAogICAgICAgICAgICAgICAgTWF0Y2hTZXR0aW5nTmFtZSAgICAgICA9PiBxcnteRnJvbnRlbmQ6OlNlYXJjaC4qPyMjI0FnZW50fSwKICAgICAgICAgICAgICAgIE1hdGNoTmF2aWdhdGlvblZhbHVlICAgPT4gcXJ7Lip9LAogICAgICAgICAgICAgICAgUmVxdWlyZU5hdmlnYXRpb25NYXRjaCA9PiBxcnteRnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb246Ok1haW5NZW51OjpTZWFyY2h9LAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlICAgICAgICAgICA9PgogICAgICAgICAgICAgICAgICAgICJTZWFyY2ggcm91dGVyIGNvbmZpZyBmb3IgQWdlbnQgaW50ZXJmYWNlIHNob3VsZCBiZSBncm91cGVkIGluICdGcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6U2VhcmNoJy4iLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgID0+ICdPdXRwdXQgZmlsdGVycycsCiAgICAgICAgICAgICAgICBNYXRjaFNldHRpbmdOYW1lICAgICAgID0+IHFyeyhPdXRwdXQ6OkZpbHRlcnxPdXRwdXRGaWx0ZXIpfSwKICAgICAgICAgICAgICAgIE1hdGNoTmF2aWdhdGlvblZhbHVlICAgPT4gcXJ7Lip9LAogICAgICAgICAgICAgICAgUmVxdWlyZU5hdmlnYXRpb25NYXRjaCA9PiBxcnteRnJvbnRlbmQ6OkJhc2U6Ok91dHB1dEZpbHRlcn0sCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgICAgICAgICAgID0+CiAgICAgICAgICAgICAgICAgICAgIk91dHB1dCBmaWx0ZXIgc2V0dGluZ3Mgc2hvdWxkIGJlIGdyb3VwZWQgaW4gJ0Zyb250ZW5kOjpCYXNlOjpPdXRwdXRGaWx0ZXInIG9yIHN1Ymdyb3Vwcy4iLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgID0+ICdWYWxpZCBmcm9udGVuZCB2aWV3cycsCiAgICAgICAgICAgICAgICBNYXRjaFNldHRpbmdOYW1lICAgICAgID0+IHFyey4qfSwKICAgICAgICAgICAgICAgIE1hdGNoTmF2aWdhdGlvblZhbHVlICAgPT4gcXJ7XkZyb250ZW5kOjooQWRtaW58QWdlbnR8Q3VzdG9tZXJ8UHVibGljKTo6KC4rOjopKlZpZXcuKyR9LAogICAgICAgICAgICAgICAgUmVxdWlyZU5hdmlnYXRpb25NYXRjaCA9PiBxcnteRnJvbnRlbmQ6OihBZG1pbnxBZ2VudHxDdXN0b21lcnxQdWJsaWMpOjpWaWV3OjouKyR9LAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlICAgICAgICAgICA9PgogICAgICAgICAgICAgICAgICAgICJTY3JlZW4gc3BlY2lmaWMgc2V0dGluZ3Mgc2hvdWxkIGJlIGFkZGVkIGluIEZyb250ZW5kOjooQWRtaW58QWdlbnR8Q3VzdG9tZXJ8UHVibGljKTo6Vmlldy4iLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgIFJVTEU6CiAgICAgICAgZm9yIG15ICRSdWxlIChAUnVsZXMpIHsKICAgICAgICAgICAgbmV4dCBSVUxFIHVubGVzcyAkQ3VycmVudFNldHRpbmdOYW1lID1+ICRSdWxlLT57TWF0Y2hTZXR0aW5nTmFtZX07CiAgICAgICAgICAgIG5leHQgUlVMRSB1bmxlc3MgJE5hdmlnYXRpb25Db250ZW50ICA9fiAkUnVsZS0+e01hdGNoTmF2aWdhdGlvblZhbHVlfTsKCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRSdWxlLT57U2tpcEZvckZyYW1ld29ya1ZlcnNpb25MZXNzVGhhbn0KICAgICAgICAgICAgICAgICYmICRTZWxmLT5Jc0ZyYW1ld29ya1ZlcnNpb25MZXNzVGhhbiggQHsgJFJ1bGUtPntTa2lwRm9yRnJhbWV3b3JrVmVyc2lvbkxlc3NUaGFufSB9ICkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbmV4dCBSVUxFOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICROYXZpZ2F0aW9uQ29udGVudCAhfiAkUnVsZS0+e1JlcXVpcmVOYXZpZ2F0aW9uTWF0Y2h9ICkgewogICAgICAgICAgICAgICAgJEVycm9yTWVzc2FnZQogICAgICAgICAgICAgICAgICAgIC49ICJJbnZhbGlkIG5hdmlnYXRpb24gdmFsdWUgZm91bmQgZm9yIHNldHRpbmcgJEN1cnJlbnRTZXR0aW5nTmFtZTogJFJ1bGUtPntFcnJvck1lc3NhZ2V9XG4iOwogICAgICAgICAgICAgICAgJEVycm9yTWVzc2FnZSAuPSAiTGluZSAkQ291bnRlcjogJExpbmVcbiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaWYgKCRFcnJvck1lc3NhZ2UpIHsKICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcig8PCJFT0YiKTsKUHJvYmxlbXMgd2VyZSBmb3VuZCBpbiB0aGUgbmF2aWdhdGlvbiBzdHJ1Y3R1cmUgb2YgdGhlIFhNTCBjb25maWd1cmF0aW9uOgokRXJyb3JNZXNzYWdlCkVPRgogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/XML/Configuration/UnitTestBlacklist.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6Q29uZmlndXJhdGlvbjo6VW5pdFRlc3RCbGFja2xpc3Q7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgTW9vOwoKZXh0ZW5kcyBxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpCYXNlKTsKCj1oZWFkMSBTWU5PUFNJUwoKVGhpcyBwbHVnaW4gY2hlY2tzIGlzIGEgYmxhY2tsaXN0ZWQgdW5pdCB0ZXN0IHZpYSBDPFVuaXRUZXN0OjpCbGFja2xpc3Q+IGZlYXR1cmUgaXMgcHJlc2VudCBpbiB0aGUgZmlsZXN5c3RlbS4KCj1jdXQKCnN1YiB2YWxpZGF0ZV9zb3VyY2UgewogICAgbXkgKCAkU2VsZiwgJENvZGUgKSA9IEBfOwoKICAgIHJldHVybiBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZCggQ29kZSA9PiAkQ29kZSApOwoKICAgIG15ICRFcnJvck1lc3NhZ2U7CiAgICBteSAkUGFja2FnZU5hbWUgPSAnJzsKCiAgICBMSU5FOgogICAgZm9yIG15ICRMaW5lICggc3BsaXQgL1xuLywgJENvZGUgKSB7CgogICAgICAgIGlmICggISRQYWNrYWdlTmFtZSAmJiAkTGluZSA9fiBtezxTZXR0aW5nLio/TmFtZT0iVW5pdFRlc3Q6OkJsYWNrbGlzdCMjI1xkKy0oLio/KSJ9c20gKSB7CiAgICAgICAgICAgICRQYWNrYWdlTmFtZSA9ICQxOwogICAgICAgICAgICBuZXh0IExJTkU7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRQYWNrYWdlTmFtZSAmJiAkTGluZSA9fiAvPEl0ZW0uKj8+KC4qKTxcL0l0ZW0+LyApIHsKCiAgICAgICAgICAgIG15IEBUZXN0TmFtZXMgPSBzcGxpdCAvXC8vLCAkMTsKICAgICAgICAgICAgJFRlc3ROYW1lc1stMV0gPSAkUGFja2FnZU5hbWUgLiAkVGVzdE5hbWVzWy0xXTsKCiAgICAgICAgICAgIG15ICRQYWNrYWdlVW5pdFRlc3QgPSAnc2NyaXB0cy90ZXN0LycgLiBqb2luKCAnLycsIEBUZXN0TmFtZXMgKTsKICAgICAgICAgICAgaWYgKCAhZ3JlcCB7ICRfIGVxICRQYWNrYWdlVW5pdFRlc3QgfSBAVGlkeUFsbDo6T1RPQk86OkZpbGVMaXN0ICkgewogICAgICAgICAgICAgICAgJEVycm9yTWVzc2FnZSAuPSAkUGFja2FnZVVuaXRUZXN0IC4gIlxuIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCAkTGluZSA9fiAvPFwvU2V0dGluZz4vICkgewogICAgICAgICAgICAkUGFja2FnZU5hbWUgPSAnJzsKICAgICAgICAgICAgbmV4dCBMSU5FOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoJEVycm9yTWVzc2FnZSkgewogICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKDw8IkVPRiIpOwoKCkluIG9yZGVyIHRvIGJsYWNrbGlzdCB1bml0IHRlc3QgZmlsZShzKSwgeW91IG5lZWQgdG8gZmlyc3QgcHJvdmlkZSBhIHN1aXRhYmxlIHJlcGxhY2VtZW50IHVuZGVyIHRoZXNlIHBhdGgocyk6CiRFcnJvck1lc3NhZ2UKRU9GCiAgICB9CgogICAgcmV0dXJuOwp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/XML/Configuration/XSDValidator.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6Q29uZmlndXJhdGlvbjo6WFNEVmFsaWRhdG9yOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEZpbGU6OkJhc2VuYW1lOwp1c2UgTW9vOwoKZXh0ZW5kcyBxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpCYXNlKTsKCnN1YiB2YWxpZGF0ZV9maWxlIHsKICAgIG15ICggJFNlbGYsICRGaWxlbmFtZSApID0gQF87CgogICAgcmV0dXJuIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBGaWxlbmFtZSA9PiAkRmlsZW5hbWUgKTsKCiAgICAjIERlZmF1bHQ6IE9UT0JPIDEwKyBjb25maWd1cmF0aW9uIGZpbGVzIGluIEtlcm5lbC9Db25maWcvRmlsZXMvWE1MLgogICAgbXkgJFhTREZpbGUgICA9IGRpcm5hbWUoX19GSUxFX18pIC4gJy8uLi8uLi9TdGF0aWNGaWxlcy9YU0QvQ29uZmlndXJhdGlvbi54c2QnOwogICAgbXkgJFdhbnRlZERpciA9ICdLZXJuZWwvQ29uZmlnL0ZpbGVzL1hNTCc7CgogICAgaWYgKCAkRmlsZW5hbWUgIX4gbXskV2FudGVkRGlyL1teL10rWy5deG1sJH1zbXggKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoCiAgICAgICAgICAgICJDb25maWd1cmF0aW9uIGZpbGUgJEZpbGVuYW1lIGRvZXMgbm90IGV4aXN0IGluIHRoZSBjb3JyZWN0IGRpcmVjdG9yeSAkV2FudGVkRGlyLlxuIgogICAgICAgICk7CiAgICB9CgogICAgbXkgJENvbW1hbmQgPSBzcHJpbnRmKCAieG1sbGludCAtLW5vb3V0IC0tbm9uZXQgLS1zY2hlbWEgJXMgJXMgJXMgMj4mMSIsICRYU0RGaWxlLCAkU2VsZi0+YXJndigpLCAkRmlsZW5hbWUgKTsKICAgIG15ICRPdXRwdXQgID0gYCRDb21tYW5kYDsKCiAgICAjIElmIGV4ZWN1dGlvbiBmYWlsZWQsIHdhcm4gYWJvdXQgaW5zdGFsbGluZyBwYWNrYWdlLgogICAgaWYgKCAke15DSElMRF9FUlJPUl9OQVRJVkV9ID09IC0xICkgewogICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKCIneG1sbGludCcgd2FzIG5vdCBmb3VuZCwgcGxlYXNlIGluc3RhbGwgaXQuXG4iKTsKICAgIH0KCiAgICBpZiAoICR7XkNISUxEX0VSUk9SX05BVElWRX0gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoIiRPdXRwdXRcbiIpOyAgICAjIG5vbi16ZXJvIGV4aXQgY29kZQogICAgfQp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/XML/Database/XSDValidator.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6RGF0YWJhc2U6OlhTRFZhbGlkYXRvcjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBGaWxlOjpCYXNlbmFtZTsKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6QmFzZSk7CgpzdWIgdmFsaWRhdGVfZmlsZSB7CiAgICBteSAoICRTZWxmLCAkRmlsZW5hbWUgKSA9IEBfOwogICAgcmV0dXJuIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBGaWxlbmFtZSA9PiAkRmlsZW5hbWUgKTsKCiAgICBteSAkWFNERmlsZSA9IGRpcm5hbWUoX19GSUxFX18pIC4gJy8uLi8uLi9TdGF0aWNGaWxlcy9YU0QvRGF0YWJhc2UueHNkJzsKICAgIG15ICRDTUQgICAgID0gInhtbGxpbnQgLS1ub291dCAtLW5vbmV0IC0tc2NoZW1hICRYU0RGaWxlIjsKCiAgICBteSAkQ29tbWFuZCA9IHNwcmludGYoICIlcyAlcyAlcyAyPiYxIiwgJENNRCwgJFNlbGYtPmFyZ3YoKSwgJEZpbGVuYW1lICk7CiAgICBteSAkT3V0cHV0ICA9IGAkQ29tbWFuZGA7CgogICAgIyBJZiBleGVjdXRpb24gZmFpbGVkLCB3YXJuIGFib3V0IGluc3RhbGxpbmcgcGFja2FnZS4KICAgIGlmICggJHteQ0hJTERfRVJST1JfTkFUSVZFfSA9PSAtMSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcigiJ3htbGxpbnQnIHdhcyBub3QgZm91bmQsIHBsZWFzZSBpbnN0YWxsIGl0LlxuIik7CiAgICB9CgogICAgaWYgKCAke15DSElMRF9FUlJPUl9OQVRJVkV9ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKCIkT3V0cHV0XG4iKTsgICAgIyBub24temVybyBleGl0IGNvZGUKICAgIH0KfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/XML/Database/KeyLength.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6RGF0YWJhc2U6OktleUxlbmd0aDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkJhc2UpOwoKc3ViIHZhbGlkYXRlX3NvdXJjZSB7CiAgICBteSAoICRTZWxmLCAkQ29kZSApID0gQF87CgogICAgcmV0dXJuICRDb2RlIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBDb2RlID0+ICRDb2RlICk7CgogICAgbXkgJENvdW50ZXI7CgogICAgIyBBY2NvdW50IGZvciAzLWJ5dGUgVVRGOCBjaGFyYWN0ZXJzLiBXZSBjdXJyZW50bHkgdXNlIHRoZSAidXRmOCIgY2hhcnNldCBpbiBNeVNRTCwKICAgICMgICB3aGljaCB1c2VzIHRocmVlIGJ5dGVzIHBlciBjaGFyYWN0ZXIuIEluIGZ1dHVyZSB3ZSBtaWdodCB3YW50IHRvIHN3aXRjaCB0byB1dGY4bWI0LAogICAgIyAgIHdoaWNoIHdvdWxkIGV2ZW4gZnVydGhlciByZWR1Y2UgcG9zc2libGUga2V5IGxlbmd0aCBieSB1c2luZyA0IGJ5dGVzIHBlciBjaGFyYWN0ZXIuCiAgICBteSAkQ2hhcmFjdGVyU2l6ZSA9IDM7CgogICAgIyBLZXlzIHdpdGggc2l6ZSBvZiBtb3JlIHRoYW4gMTAwMCBieXRlcyB3aWxsIGZhaWwgb24gTXlJU0FNIHN0b3JhZ2UgZW5naW5lIGluIE15U1FMLgogICAgbXkgJEtleVNpemVMaW1pdCA9IDEwMDA7CgogICAgbXkgJEN1cnJlbnRUYWJsZU5hbWU7CiAgICBteSAlQ3VycmVudENvbHVtbnM7CiAgICBteSAkQ3VycmVudEtleTsKICAgIG15ICRDdXJyZW50S2V5U2l6ZSA9IDA7CiAgICBteSAkRXJyb3JNZXNzYWdlOwoKICAgIG15ICVDb2x1bW5UeXBlMlNpemUgPSAoCiAgICAgICAgJ1RJTllJTlQnICAgPT4gMSwKICAgICAgICAnU01BTExJTlQnICA9PiAyLAogICAgICAgICdNRURJVU1JTlQnID0+IDMsCiAgICAgICAgJ0lOVCcgICAgICAgPT4gOCwKICAgICAgICAnSU5URUdFUicgICA9PiA4LAogICAgICAgICdCSUdJTlQnICAgID0+IDgsCiAgICAgICAgJ0RBVEUnICAgICAgPT4gOCwKICAgICAgICAnTE9OR0JMT0InICA9PiA0Mjk0OTY3Mjk1LAogICAgKTsKCiAgICBMSU5FOgogICAgZm9yIG15ICRMaW5lICggc3BsaXQgL1xuLywgJENvZGUgKSB7CiAgICAgICAgJENvdW50ZXIrKzsKCiAgICAgICAgIyBNYXRjaCB0YWJsZSBjcmVhdGUgb3BlbmluZyB0YWcgYW5kIHJlc2V0IGFueSBmb3VuZCBjb2x1bW5zLgogICAgICAgIGlmICggJExpbmUgPX4gbXsgPFRhYmxlKD86Q3JlYXRlKT8gLio/IE5hbWU9Iig/PFRhYmxlTmFtZT4uKj8pIiB9c214ICkgewogICAgICAgICAgICAkQ3VycmVudFRhYmxlTmFtZSA9ICQre1RhYmxlTmFtZX07CiAgICAgICAgICAgICVDdXJyZW50Q29sdW1ucyAgID0gKCk7CiAgICAgICAgICAgIG5leHQgTElORTsKICAgICAgICB9CgogICAgICAgICMgSWRlbnRpZnkgYWxsIGNvbHVtbnMgd2l0aCBkZWZpbmVkIHNpemUuCiAgICAgICAgaWYgKCAkTGluZSA9fiBteyA8Q29sdW1uIC4qPyBOYW1lPSIoPzxDb2x1bW5OYW1lPlx3KykiIH1zbXggKSB7CiAgICAgICAgICAgIG15ICRDb2x1bW5OYW1lID0gJCt7Q29sdW1uTmFtZX07CgogICAgICAgICAgICBpZiAoICRMaW5lID1+IG17IFR5cGU9Iig/PENvbHVtblR5cGU+XHcrKSIgfXNteCApIHsKICAgICAgICAgICAgICAgIG15ICRDb2x1bW5UeXBlID0gJCt7Q29sdW1uVHlwZX07CgogICAgICAgICAgICAgICAgIyBVc2UgaW50ZXJuYWwgc2l6ZXMgZm9yIHNvbWUgcHJlZGVmaW5lZCBjb2x1bW4gdHlwZXMuCiAgICAgICAgICAgICAgICBpZiAoICRDb2x1bW5UeXBlMlNpemV7IHVjICRDb2x1bW5UeXBlIH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJEN1cnJlbnRDb2x1bW5zeyRDb2x1bW5OYW1lfSA9ICRDb2x1bW5UeXBlMlNpemV7IHVjICRDb2x1bW5UeXBlIH07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBDaGVjayBpZiB0aGVyZSBpcyBhIGRlZmluZWQgc2l6ZSB0YWcuCiAgICAgICAgICAgICAgICBpZiAoICRMaW5lID1+IG17IFNpemU9Iig/PENvbHVtblNpemU+W1xkLF0rKSIgfXNteCApIHsKICAgICAgICAgICAgICAgICAgICBteSAkQ29sdW1uU2l6ZSA9ICQre0NvbHVtblNpemV9OwoKICAgICAgICAgICAgICAgICAgICAjIEZvciB0ZXh0IGNvbHVtbnMgbXVsdGlwbHkgZm91bmQgc2l6ZSB3aXRoIGRlZmluZWQgbnVtYmVyIG9mIGJ5dGVzIHBlciBjaGFyYWN0ZXIuCiAgICAgICAgICAgICAgICAgICAgaWYgKCB1YyAkQ29sdW1uVHlwZSBlcSAnVkFSQ0hBUicgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRDdXJyZW50Q29sdW1uc3skQ29sdW1uTmFtZX0gPSAkQ29sdW1uU2l6ZSAqICRDaGFyYWN0ZXJTaXplOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBGb3IgZGVjaW1hbCBjb2x1bW4gdHlwZSB1c2UgYXBwcm94aW1hdGUgY2FsY3VsYXRpb24sIGl0IHNob3VsZCBiZSBlbm91Z2ggZm9yIG91ciBwdXJwb3Nlcy4KICAgICAgICAgICAgICAgICAgICAjICAgTW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vZGV2Lm15c3FsLmNvbS9kb2MvcmVmbWFuLzUuNy9lbi9wcmVjaXNpb24tbWF0aC1kZWNpbWFsLWNoYXJhY3RlcmlzdGljcy5odG1sCiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCB1YyAkQ29sdW1uVHlwZSBlcSAnREVDSU1BTCcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICggJFRvdGFsRGlnaXRzLCAkRnJhY3Rpb25hbERpZ2l0cyApID0gc3BsaXQgbS8sLywgJENvbHVtblNpemU7CiAgICAgICAgICAgICAgICAgICAgICAgICRGcmFjdGlvbmFsRGlnaXRzIC8vPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBteSAkSW50ZWdlckRpZ2l0cyA9ICRUb3RhbERpZ2l0cyAtICRGcmFjdGlvbmFsRGlnaXRzOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJERpZ2l0cyAoICRJbnRlZ2VyRGlnaXRzLCAkRnJhY3Rpb25hbERpZ2l0cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRDdXJyZW50Q29sdW1uc3skQ29sdW1uTmFtZX0gKz0gc3ByaW50ZiggJyUwLmYnLCAkRGlnaXRzIC8gOSAqIDQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBGb3IgYW55IHVzZSBjYXNlIHRoYXQgaGFzIG5vdCBiZWVuIGNvdmVyZWQgdW50aWwgdGhpcyBwb2ludCwganVzdCB1c2UgZGVmaW5lZCBzaXplLgogICAgICAgICAgICAgICAgICAgIGVsc2lmICggISRDb2x1bW5UeXBlMlNpemV7IHVjICRDb2x1bW5UeXBlIH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRDdXJyZW50Q29sdW1uc3skQ29sdW1uTmFtZX0gKz0gJENvbHVtblNpemU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIE1hdGNoIGtleSBvcGVuaW5nIHRhZyBhbmQgcmVtZW1iZXIgaXRzIG5hbWUuCiAgICAgICAgaWYgKCAkTGluZSA9fiBteyA8KD86VW5pcXVlfEluZGV4KSBccysgTmFtZT0iKD88S2V5TmFtZT5cdyspIiB9c214ICkgewogICAgICAgICAgICAkQ3VycmVudEtleSA9ICQre0tleU5hbWV9OwogICAgICAgICAgICBuZXh0IExJTkU7CiAgICAgICAgfQoKICAgICAgICAjIE1hdGNoIGtleSBjbG9zaW5nIHRhZyBhbmQgcmVzZXQgYW55IGZvdW5kIGtleXMuCiAgICAgICAgaWYgKCAkTGluZSA9fiBteyA8Lyg/OlVuaXF1ZXxJbmRleCk+IH1zbXggKSB7CiAgICAgICAgICAgICRDdXJyZW50S2V5ICAgICA9IHVuZGVmOwogICAgICAgICAgICAkQ3VycmVudEtleVNpemUgPSAwOwogICAgICAgICAgICBuZXh0IExJTkU7CiAgICAgICAgfQoKICAgICAgICAjIFByb2NlZWQgb25seSBpZiB3ZSBhcmUgd2l0aGluIGtleSBkZWZpbml0aW9uLgogICAgICAgIGlmICgkQ3VycmVudEtleSkgewoKICAgICAgICAgICAgIyBNYXRjaCBrZXkgY29sdW1uIHRhZy4KICAgICAgICAgICAgaWYgKCAkTGluZSA9fiBteyA8KD86VW5pcXVlfEluZGV4KUNvbHVtbiAuKj8gTmFtZT0iKD88Q29sdW1uTmFtZT5cdyspIiB9c214ICkgewogICAgICAgICAgICAgICAgbXkgJENvbHVtbk5hbWUgPSAkK3tDb2x1bW5OYW1lfTsKCiAgICAgICAgICAgICAgICAjIFNraXAgdW5kZWZpbmVkIGNvbHVtbnMuIFNob3VsZCBub3QgaGFwcGVuLCBpZiB0aGUgZGVmaW5pdGlvbiBpcyB2YWxpZC4KICAgICAgICAgICAgICAgIG5leHQgTElORSBpZiAhJEN1cnJlbnRDb2x1bW5zeyRDb2x1bW5OYW1lfTsKCiAgICAgICAgICAgICAgICAjIElmIGtleSBzaXplIGlzIGRlZmluZWQsIHVzZSBpdC4KICAgICAgICAgICAgICAgIGlmICggJExpbmUgPX4gbXsgU2l6ZT0iKD88S2V5U2l6ZT5cZCspIiB9c214ICkgewogICAgICAgICAgICAgICAgICAgICRDdXJyZW50S2V5U2l6ZSArPSAkK3tLZXlTaXplfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIE90aGVyd2lzZSwgdXNlIHNpemUgZnJvbSBjb2x1bW4gZGVmaW5pdGlvbi4KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRDdXJyZW50S2V5U2l6ZSArPSAkQ3VycmVudENvbHVtbnN7JENvbHVtbk5hbWV9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIENoZWNrIGlmIGN1cnJlbnQgc2l6ZSBvZiB0aGUga2V5IGV4Y2VlZHMgY29uZmlndXJlZCBsaW1pdC4KICAgICAgICAgICAgaWYgKCRDdXJyZW50S2V5U2l6ZSkgewogICAgICAgICAgICAgICAgbmV4dCBMSU5FIGlmICRDdXJyZW50S2V5U2l6ZSA8PSAkS2V5U2l6ZUxpbWl0OwoKICAgICAgICAgICAgICAgICRFcnJvck1lc3NhZ2UgLj0gIlRhYmxlOiAkQ3VycmVudFRhYmxlTmFtZSwgS2V5OiAkQ3VycmVudEtleVxuIjsKCiAgICAgICAgICAgICAgICAjIFNraXAgcHJvY2Vzc2luZyBjdXJyZW50IGtleS4KICAgICAgICAgICAgICAgICRDdXJyZW50S2V5ICAgICA9IHVuZGVmOwogICAgICAgICAgICAgICAgJEN1cnJlbnRLZXlTaXplID0gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBpZiAoJEVycm9yTWVzc2FnZSkgewogICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKDw8IkVPRiIpOwpQcm9ibGVtIGZvdW5kIGluIFhNTCBkYXRhYmFzZSBzY2hlbWE6IGtleXMgd2l0aCBtb3JlIHRoYW4gMTAwMCBieXRlcyB3aWxsIGZhaWwgb24gTXlJU0FNIHN0b3JhZ2UgZW5naW5lIGluIE15U1FMIQokRXJyb3JNZXNzYWdlCkVPRgogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/XML/Docbook/BinScripts.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6RG9jYm9vazo6QmluU2NyaXB0czsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBGaWxlOjpCYXNlbmFtZTsKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkJhc2UpOwoKPWhlYWQxIFNZTk9QU0lTCgpUaGlzIHBsdWdpbiBjaGVja3MgdGhhdCBiaW4gc2NyaXB0cyBwb2ludCB0byBuZXcgcGF0aHMuCgo9Y3V0CgpzdWIgdmFsaWRhdGVfc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gJENvZGUgaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICBteSAlQWxsb3dlZEZpbGVzID0gKAogICAgICAgICdvdG9iby5DaGVja01vZHVsZXMucGwnICAgPT4gMSwKICAgICAgICAnb3RvYm8uQ2hlY2tTdW0ucGwnICAgICAgID0+IDEsCiAgICAgICAgJ290b2JvLkNvZGVQb2xpY3kucGwnICAgICA9PiAxLAogICAgICAgICdvdG9iby5Db25zb2xlLnBsJyAgICAgICAgPT4gMSwKICAgICAgICAnb3RvYm8uRGFlbW9uLnBsJyAgICAgICAgID0+IDEsCiAgICAgICAgJ290b2JvLlNldFBlcm1pc3Npb25zLnBsJyA9PiAxLAogICAgKTsKCiAgICBteSAoICRDb3VudGVyLCAkRXJyb3JNZXNzYWdlICk7CgogICAgTElORToKICAgIGZvciBteSAkTGluZSAoIHNwbGl0IC9cbi8sICRDb2RlICkgewogICAgICAgICRDb3VudGVyKys7CiAgICAgICAgaWYgKCAkTGluZSA9fiAvYmluXC8ob3RvYm9cLlx3K1wucGwpL2lzbXggKSB7CgogICAgICAgICAgICBuZXh0IExJTkUgaWYgJEFsbG93ZWRGaWxlc3skMX07CgogICAgICAgICAgICAkRXJyb3JNZXNzYWdlIC49ICJMaW5lICRDb3VudGVyOiAkTGluZVxuIjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCRFcnJvck1lc3NhZ2UpIHsKICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcig8PCJFT0YiKTsKRG9uJ3QgdXNlIG9sZCBiaW4gc2NyaXB0cyBpbiBkb2N1bWVudGF0aW9uLgokRXJyb3JNZXNzYWdlCkVPRgogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/XML/Docbook/ImageOutput.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6RG9jYm9vazo6SW1hZ2VPdXRwdXQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgRmlsZTo6QmFzZW5hbWU7Cgp1c2UgTW9vOwoKZXh0ZW5kcyBxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpCYXNlKTsKCnN1YiB0cmFuc2Zvcm1fc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gJENvZGUgaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICAjIE1ha2Ugc3VyZSBpbWFnZXMgYXJlIGNvcnJlY3RseSBlbWJlZGRlZCwgc2hvd2luZyBpbiBvcmlnaW5hbCBzaXplIGFuZCBjYXBwZWQgYXQKICAgICMgICBhdmFpbGFibGUgd2l0aC4gRm9yYmlkIG1hbnVhbCBzY2FsaW5nLgoKICAgICMgU2VlIGh0dHA6Ly93d3cuc2FnZWhpbGwubmV0L2RvY2Jvb2t4c2wvSW1hZ2VTaXppbmcuaHRtbDoKICAgICMgIlRvIGtlZXAgYSBncmFwaGljIGZvciBwcmludGVkIG91dHB1dCBhdCBpdHMgbmF0dXJhbCBzaXplIHVubGVzcyBpdCBpcyB0b28gbGFyZ2UgdG8gZml0CiAgICAjICAgdGhlIGF2YWlsYWJsZSB3aWR0aCwgaW4gd2hpY2ggY2FzZSBzaHJpbmsgaXQgdG8gZml0LCB1c2Ugc2NhbGVmaXQ9IjEiLCB3aWR0aD0iMTAwJSIsCiAgICAjICAgYW5kIGNvbnRlbnRkZXB0aD0iMTAwJSIgYXR0cmlidXRlcy4iCgogICAgJENvZGUKICAgICAgICA9fiBzezxncmFwaGljIFtePl0rIChmaWxlcmVmPSJbXiI+XSsiKVtePi9dKigvPyk+fXs8Z3JhcGhpYyAkMSBzY2FsZWZpdD0iMSIgd2lkdGg9IjEwMCUiIGNvbnRlbnRkZXB0aD0iMTAwJSIkMj59bXN4ZzsKCiAgICByZXR1cm4gJENvZGU7Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/XML/Docbook/ReplaceSupportEmail.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6RG9jYm9vazo6UmVwbGFjZVN1cHBvcnRFbWFpbDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkJhc2UpOwoKbXkgJEVuZ2xpc2gxUmVnRXhwID0gPDwnRU5EX1JFR0VYUCc7ClxuIFxzKiA8cGFyYT4gXHMqClxzKiAgICAgICAgSWYgXHMrIHlvdSBccysgaGF2ZSBccysgcXVlc3Rpb25zIFxzKyByZWdhcmRpbmcgXHMrIHRoaXMgXHMrIHBhY2thZ2UsIFxzKyBwbGVhc2UgXHMrIGNvbnRhY3QgXHMrIHlvdXIgXHMrIHN1cHBvcnQgXHMrIHRlYW0KXHMrICAgICAgICBcKHN1cHBvcnRcQG90b2JvXC5jb21cKSBccysgZm9yIFxzKyBtb3JlIFxzKyBpbmZvcm1hdGlvbiBcLiBcbgpccyogICAgPFwvcGFyYT4gXG4KRU5EX1JFR0VYUAoKbXkgJEVuZ2xpc2gyUmVnRXhwID0gPDwnRU5EX1JFR0VYUCc7ClxuIFxzKiA8cGFyYT4gXHMqClxzKiAgICAgICAgSWYgXHMrIHlvdSBccysgaGF2ZSBccysgcXVlc3Rpb25zIFxzKyByZWdhcmRpbmcgXHMrIHRoaXMgXHMrIGRvY3VtZW50IFxzKyBvciBccysgaWYgXHMrIHlvdSBccysgbmVlZCBccysgZnVydGhlciBccysgaW5mb3JtYXRpb24sIFxzKyBwbGVhc2UgXHMrIGxvZyBccysgaW4gXHMrIHRvIFxzKyBvdXIgXHMrIGN1c3RvbWVyIFxzKyBwb3J0YWwgXHMrIGF0IFxzKyBwb3J0YWxcLm90b2JvXC5jb20gXHMrIHdpdGggXHMrIHlvdXIgXHMrIE9UT0JPIFxzKyBJRCBccysgYW5kIFxzKyBjcmVhdGUgXHMrIGEgXHMrIHRpY2tldFwuClxzKyAgICAgICAgWW91IFxzKyBkbyBccysgbm90IFxzKyBoYXZlIFxzKyBhbiBccysgT1RPQk8gXHMrIElEIFxzKyB5ZXRcPyBccysgUmVnaXN0ZXIKXHMqICAgICAgICA8dWxpbmsgXHMrIHVybD0iaHR0cHM6XC9cL3BvcnRhbFwub3RvYm9cLmNvbVwvb3RvYm9cL2N1c3RvbWVyXC5wbFwjU2lnbnVwIj5oZXJlIFxzKyBmb3IgXHMrIGZyZWU8XC91bGluaz5cLgpccyogICAgPFwvcGFyYT4gXG4KRU5EX1JFR0VYUAoKbXkgJEdlcm1hbjFSZWdFeHAgPSA8PCdFTkRfUkVHRVhQJzsKXG4gXHMqIDxwYXJhPiBccyoKXHMqICAgICAgICAgQmVpIFxzKyBGcmFnZW4gXHMrIGJldHJlZmZlbmQgXHMrIGRpZXNlcyBccysgRG9rdW1lbnRlcywgXHMrIGtvbnRha3RpZXJlbiBccysgU2llIFxzKyBJaHJlbiBccysgU3VwcG9ydCBccysgXChzdXBwb3J0XEBvdG9ib1wuY29tXCkgXHMrIGbDvHIgXHMrIHdlaXRlcmUgXHMrIEluZm9ybWF0aW9uZW4gXC4gXG4KXHMqICAgIDxcL3BhcmE+IFxuCkVORF9SRUdFWFAKCnN1YiB0cmFuc2Zvcm1fc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gJENvZGUgaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICBteSAkRW5nbGlzaFJlcGxhY2VtZW50ID0gX0VuZ2xpc2hSZXBsYWNlbWVudCgpOwogICAgbXkgJEdlcm1hblJlcGxhY2VtZW50ICA9IF9HZXJtYW5SZXBsYWNlbWVudCgpOwoKICAgICMgcmVwbGFjZSBzdXBwb3J0IHBhcmEKICAgICRDb2RlID1+IHN7JEVuZ2xpc2gxUmVnRXhwfXskRW5nbGlzaFJlcGxhY2VtZW50fXhtczsKICAgICRDb2RlID1+IHN7JEdlcm1hbjFSZWdFeHB9eyRHZXJtYW5SZXBsYWNlbWVudH14bXM7CgogICAgIyBSZXBsYWNlIHN1cHBvcnQgcGFyYSB3aXRoIHRoZSBjb3JyZWN0IGxhbmd1YWdlCiAgICBpZiAoICRDb2RlID1+IG17XiBccyogPGJvb2sgXHMrIGxhbmc9J2RlJz4gfXNteCApIHsKICAgICAgICAkQ29kZSA9fiBzeyRFbmdsaXNoMlJlZ0V4cH17JEdlcm1hblJlcGxhY2VtZW50fXhtczsKICAgIH0KCiAgICByZXR1cm4gJENvZGU7Cn0KCnN1YiBfRW5nbGlzaFJlcGxhY2VtZW50IHsKICAgIHJldHVybiA8PCdFTkRfUkVQTEFDRU1FTlQnOwoKICAgIDxwYXJhPgogICAgICAgIElmIHlvdSBoYXZlIHF1ZXN0aW9ucyByZWdhcmRpbmcgdGhpcyBkb2N1bWVudCBvciBpZiB5b3UgbmVlZCBmdXJ0aGVyIGluZm9ybWF0aW9uLCBwbGVhc2UgbG9nIGluIHRvIG91ciBjdXN0b21lciBwb3J0YWwgYXQgcG9ydGFsLm90b2JvLmNvbSB3aXRoIHlvdXIgT1RPQk8gSUQgYW5kIGNyZWF0ZSBhIHRpY2tldC4KICAgICAgICBZb3UgZG8gbm90IGhhdmUgYW4gT1RPQk8gSUQgeWV0PyBSZWdpc3RlcgogICAgICAgIDx1bGluayB1cmw9Imh0dHBzOi8vcG9ydGFsLm90b2JvLmNvbS9vdG9iby9jdXN0b21lci5wbCNTaWdudXAiPmhlcmUgZm9yIGZyZWU8L3VsaW5rPi4KICAgIDwvcGFyYT4KRU5EX1JFUExBQ0VNRU5UCn0KCnN1YiBfR2VybWFuUmVwbGFjZW1lbnQgewogICAgcmV0dXJuIDw8J0VORF9SRVBMQUNFTUVOVCc7CgogICAgPHBhcmE+CiAgICAgICAgU29sbHRlbiBTaWUgRnJhZ2VuIHp1IGRpZXNlbSBEb2t1bWVudCBoYWJlbiBvZGVyIHdlaXRlcmUgSW5mb3JtYXRpb25lbiBiZW7DtnRpZ2VuLCBsb2dnZW4gU2llIHNpY2ggYml0dGUgbWl0IElocmVyIE9UT0JPLUlEIGluIHVuc2VyIEt1bmRlbnBvcnRhbCB1bnRlciBwb3J0YWwub3RvYm8uY29tIGVpbiB1bmQgZXLDtmZmbmVuIFNpZSBlaW4gVGlja2V0LiBTaWUgaGFiZW4gbm9jaCBrZWluZSBPVE9CTy1JRD8gUmVnaXN0cmllcmVuIFNpZSBzaWNoCiAgICAgICAgPHVsaW5rIHVybD0iaHR0cHM6Ly9wb3J0YWwub3RvYm8uY29tL290b2JvL2N1c3RvbWVyLnBsI1NpZ251cCI+aGllciBrb3N0ZW5sb3M8L3VsaW5rPi4KICAgIDwvcGFyYT4KRU5EX1JFUExBQ0VNRU5UCn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/XML/Docbook/RemoveContactChapter.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6RG9jYm9vazo6UmVtb3ZlQ29udGFjdENoYXB0ZXI7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgTW9vOwoKZXh0ZW5kcyBxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpCYXNlKTsKCnN1YiB0cmFuc2Zvcm1fc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gJENvZGUgaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICAjIHJlbW92ZSBjaGFwdGVyCiAgICAkQ29kZSA9fiBzewogICAgICAgIDxjaGFwdGVyPiBccyoKICAgICAgICAoPzoKICAgICAgICAgICAgPCEtLSBccysgXCorIFxzKyAtLT4gXHMrCiAgICAgICAgICAgIDwhLS0gXHMrIFxkKyBcLiBccysgXHcrIFxzKyAtLT4gXHMrCiAgICAgICAgICAgIDwhLS0gXHMrIFwqKyBccysgLS0+IFxzKwogICAgICAgIHwKICAgICAgICApCiAgICAgICAgPHRpdGxlPiBbIF0qICg/OiBDb250YWN0IHwgQ29udGFjdHMgfCBLb250YWt0ICkgWyBdKiA8XC90aXRsZT4KICAgICAgICAoICg/ISA8XC9jaGFwdGVyPiApLiApKiA8XC9jaGFwdGVyPiBbIFxuXSoKICAgIH17fXhtczsKCiAgICByZXR1cm4gJENvZGU7Cn0KCjE7Cg==</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/XML/Docbook/XSDValidator.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6RG9jYm9vazo6WFNEVmFsaWRhdG9yOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEZpbGU6OkJhc2VuYW1lOwp1c2UgTW9vOwoKZXh0ZW5kcyBxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpCYXNlKTsKCnN1YiB0cmFuc2Zvcm1fc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gJENvZGUgaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICAjIGNvbnZlcnQgZm9ybWF0IGF0dHJpYnV0ZSBjb250ZW50IGluIGltYWdlZGF0YSB0YWcgdG8gdXBwZXIgY2FzZQogICAgIyAgICBlLmcuIGZyb20gZm9ybWF0PSJwbmciIHRvIGZvcm1hdD0iUE5HIgogICAgJENvZGUgPX4gc3soPGltYWdlZGF0YSBbXj5dKyBmb3JtYXQ9IikoLis/KSgiIFtePl0rID4pfQogICAgICAgIHsKICAgICAgICAgICAgbXkgJFN0YXJ0ICA9ICQxOwogICAgICAgICAgICBteSAkRm9ybWF0ID0gJDI7CiAgICAgICAgICAgIG15ICRFbmQgICAgPSAkMzsKICAgICAgICAgICAgaWYgKCRGb3JtYXQgbmUgJ2xpbmVzcGVjaWZpYycpIHsKICAgICAgICAgICAgICAgICRGb3JtYXQgPSB1YyAkRm9ybWF0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIG15ICRSZXN1bHQgPSAkU3RhcnQgLiAkRm9ybWF0IC4gJEVuZDsKICAgICAgICB9bXN4Z2U7CgogICAgcmV0dXJuICRDb2RlOwp9CgpzdWIgdmFsaWRhdGVfZmlsZSB7CiAgICBteSAoICRTZWxmLCAkRmlsZW5hbWUgKSA9IEBfOwoKICAgIHJldHVybiBpZiAkU2VsZi0+SXNQbHVnaW5EaXNhYmxlZCggRmlsZW5hbWUgPT4gJEZpbGVuYW1lICk7CgogICAgIyByZWFkIHRoZSBmaWxlIGFzIGFuIGFycmF5CiAgICBvcGVuKCBteSAkRmlsZUhhbmRsZSwgJzwnLCAkRmlsZW5hbWUgKSB8fCBkaWUgJCE7ICAgICMjIG5vIGNyaXRpYyBxdyhPVE9CTzo6UHJvaGliaXRPcGVuKQogICAgbXkgQEZpbGVMaW5lcyA9IDwkRmlsZUhhbmRsZT47CiAgICBjbG9zZSAkRmlsZUhhbmRsZTsKCiAgICBteSAkVmVyc2lvbjsKCiAgICAjIGdldCB0aGUgRG9jQm9vayB2ZXJzaW9uIGZyb20gdGhlIERvY1R5cGUgZS5nLiA0LjQKICAgIGlmICggJEZpbGVMaW5lc1sxXSA9fiBte0RURCBbIF0gRG9jQm9vayBbIF0gWE1MIFsgXSBWKFxkXC5cZCkvL31tc3hpICkgewogICAgICAgICRWZXJzaW9uID0gJDE7CiAgICB9CiAgICByZXR1cm4gaWYgISRWZXJzaW9uOwoKICAgICMgY2hlY2sgaWYgd2UgaGF2ZSBhbiBYU0QgYXZhaWxhYmxlIGZvciB0aGUgZGV0ZWN0ZWQgdmVyc2lvbjoKICAgIG15ICVBdmFpbGFibGVWZXJzaW9ucyA9ICgKICAgICAgICAnNC4yJyA9PiAxLAogICAgICAgICc0LjMnID0+IDEsCiAgICAgICAgJzQuNCcgPT4gMSwKICAgICAgICAnNC41JyA9PiAxLAogICAgKTsKICAgIGlmICggISRBdmFpbGFibGVWZXJzaW9uc3skVmVyc2lvbn0gKSB7CiAgICAgICAgcHJpbnQgU1RERVJSICJObyBEb2NCb29rIFhTRCBhdmFpbGFibGUgZm9yIHZlcnNpb24gJFZlcnNpb25cbiI7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY29udmVydCB0aGUgdmVyc2lvbiB0byBhIGRpcmVjdG9yeSBzYWZlIHN0cmluZyBlLmcuIDRfNAogICAgJFZlcnNpb24gPX4gc3tcLn17X307CgogICAgIyBnZW5lcmF0ZSB0aGUgWE1MTGludCBjb21tYW5kIGJhc2VkIG9uIHRoZSB2ZXJzaW9uIG9mIHRoZSBEb2NCb29rIGZpbGUKICAgIG15ICRYU0RGaWxlID0gZGlybmFtZShfX0ZJTEVfXykgLiAnLy4uLy4uL1N0YXRpY0ZpbGVzL1hTRC9Eb2Nib29rLycgLiAkVmVyc2lvbiAuICcvZG9jYm9vay54c2QnOwogICAgbXkgJENNRCAgICAgPSAieG1sbGludCAtLW5vb3V0IC0tbm9uZXQgLS1ub3dhcm5pbmcgLS1zY2hlbWEgJFhTREZpbGUiOwoKICAgIG15ICRDb21tYW5kID0gc3ByaW50ZiggIiVzICVzICVzIDI+JjEiLCAkQ01ELCAkU2VsZi0+YXJndigpLCAkRmlsZW5hbWUgKTsKICAgIG15ICRPdXRwdXQgID0gYCRDb21tYW5kYDsKCiAgICAjIElmIGV4ZWN1dGlvbiBmYWlsZWQsIHdhcm4gYWJvdXQgaW5zdGFsbGluZyBwYWNrYWdlLgogICAgaWYgKCAke15DSElMRF9FUlJPUl9OQVRJVkV9ID09IC0xICkgewogICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKCIneG1sbGludCcgd2FzIG5vdCBmb3VuZCwgcGxlYXNlIGluc3RhbGwgaXQuXG4iKTsKICAgIH0KCiAgICBpZiAoICR7XkNISUxEX0VSUk9SX05BVElWRX0gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoIiRPdXRwdXRcbiIpOyAgICAjIG5vbi16ZXJvIGV4aXQgY29kZQogICAgfQp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/XML/WSDL/XSDValidator.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6V1NETDo6WFNEVmFsaWRhdG9yOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEZpbGU6OkJhc2VuYW1lOwp1c2UgTW9vOwoKZXh0ZW5kcyBxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpCYXNlKTsKCnN1YiB2YWxpZGF0ZV9maWxlIHsKICAgIG15ICggJFNlbGYsICRGaWxlbmFtZSApID0gQF87CgogICAgcmV0dXJuIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBGaWxlbmFtZSA9PiAkRmlsZW5hbWUgKTsKCiAgICAjIHJlYWQgdGhlIGZpbGUgYXMgYW4gYXJyYXkKICAgIG9wZW4oIG15ICRGaWxlSGFuZGxlLCAnPCcsICRGaWxlbmFtZSApIHx8IGRpZSAkITsgICAgIyMgbm8gY3JpdGljIHF3KE9UT0JPOjpQcm9oaWJpdE9wZW4pCiAgICBteSAkU3RyaW5nID0gZG8geyBsb2NhbCAkLyA9IHVuZGVmOyA8JEZpbGVIYW5kbGU+IH07CiAgICBjbG9zZSAkRmlsZUhhbmRsZTsKCiAgICBteSAkTGl0ZXJhbFN0eWxlOwoKICAgICMgY2hlY2sgaWYgV1NETCBmaWxlIHVzZXMgTGl0ZXJhbCBtZXNzYWdlcwogICAgaWYgKCAkU3RyaW5nID1+IG17PHNvYXA6Ym9keSBccysgdXNlPSJsaXRlcmFsIn1tc3hpICkgewogICAgICAgICRMaXRlcmFsU3R5bGUgPSAxOwogICAgfQoKICAgICMgZ2VuZXJhdGUgdGhlIFhNTExpbnQgY29tbWFuZCBiYXNlZCBvbiB0aGUgc3R5bGUgb2YgV1NETAogICAgbXkgJFhTRERpciA9IGRpcm5hbWUoX19GSUxFX18pIC4gJy8uLi8uLi9TdGF0aWNGaWxlcy9YU0QvV1NETC8nOwoKICAgIG15ICRYU0RGaWxlID0gJ1dTREwueHNkJzsKICAgIGlmICgkTGl0ZXJhbFN0eWxlKSB7CiAgICAgICAgJFhTREZpbGUgPSAnTGl0ZXJhbC54c2QnOwogICAgfQoKICAgIG15ICRDTUQgPSAieG1sbGludCAtLW5vb3V0IC0tbm9uZXQgLS1ub3dhcm5pbmcgLS1zY2hlbWEgJFhTRERpciRYU0RGaWxlIjsKCiAgICBteSAkQ29tbWFuZCA9IHNwcmludGYoICIlcyAlcyAlcyAyPiYxIiwgJENNRCwgJFNlbGYtPmFyZ3YoKSwgJEZpbGVuYW1lICk7CiAgICBteSAkT3V0cHV0ICA9IGAkQ29tbWFuZGA7CgogICAgIyBJZiBleGVjdXRpb24gZmFpbGVkLCB3YXJuIGFib3V0IGluc3RhbGxpbmcgcGFja2FnZS4KICAgIGlmICggJHteQ0hJTERfRVJST1JfTkFUSVZFfSA9PSAtMSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcigiJ3htbGxpbnQnIHdhcyBub3QgZm91bmQsIHBsZWFzZSBpbnN0YWxsIGl0LlxuIik7CiAgICB9CgogICAgaWYgKCAke15DSElMRF9FUlJPUl9OQVRJVkV9ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKCIkT3V0cHV0XG4iKTsgICAgIyBub24temVybyBleGl0IGNvZGUKICAgIH0KfQoKMTsK</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/XML/Lint.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6TGludDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBNb287CgpleHRlbmRzIHF3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkJhc2UpOwoKc3ViIF9idWlsZF9jbWQgewogICAgcmV0dXJuICd4bWxsaW50IC0tbm9vdXQgLS1ub25ldCc7Cn0KCnN1YiB2YWxpZGF0ZV9maWxlIHsKICAgIG15ICggJFNlbGYsICRGaWxlbmFtZSApID0gQF87CgogICAgcmV0dXJuIGlmICRTZWxmLT5Jc1BsdWdpbkRpc2FibGVkKCBGaWxlbmFtZSA9PiAkRmlsZW5hbWUgKTsKCiAgICBteSAkQ29tbWFuZCA9IHNwcmludGYoICIlcyAlcyAlcyAyPiYxIiwgJFNlbGYtPmNtZCgpLCAkU2VsZi0+YXJndigpLCAkRmlsZW5hbWUgKTsKICAgIG15ICRPdXRwdXQgID0gYCRDb21tYW5kYDsKCiAgICAjIElmIGV4ZWN1dGlvbiBmYWlsZWQsIHdhcm4gYWJvdXQgaW5zdGFsbGluZyBwYWNrYWdlLgogICAgaWYgKCAke15DSElMRF9FUlJPUl9OQVRJVkV9ID09IC0xICkgewogICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKCIneG1sbGludCcgd2FzIG5vdCBmb3VuZCwgcGxlYXNlIGluc3RhbGwgaXQuXG4iKTsKICAgIH0KCiAgICBpZiAoICR7XkNISUxEX0VSUk9SX05BVElWRX0gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5EaWVXaXRoRXJyb3IoIiRPdXRwdXRcbiIpOyAgICAjIG5vbi16ZXJvIGV4aXQgY29kZQogICAgfQp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/Plugin/OTOBO/XML/LintWithOurParsers.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6TGludFdpdGhPdXJQYXJzZXJzOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIE1vbzsKCmV4dGVuZHMgcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6QmFzZSk7Cgp1c2UgWE1MOjpQYXJzZXI7CgpzdWIgdmFsaWRhdGVfc291cmNlIHsKICAgIG15ICggJFNlbGYsICRDb2RlICkgPSBAXzsKCiAgICByZXR1cm4gaWYgJFNlbGYtPklzUGx1Z2luRGlzYWJsZWQoIENvZGUgPT4gJENvZGUgKTsKCiAgICBteSAkUGFyc2VyID0gWE1MOjpQYXJzZXItPm5ldygpOwogICAgaWYgKCAhZXZhbCB7ICRQYXJzZXItPnBhcnNlKCRDb2RlKSB9ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+RGllV2l0aEVycm9yKCJYTUw6OlBhcnNlciBwcm9kdWNlZCBlcnJvcnM6ICRAXG4iKTsKICAgIH0KCiAgICAjIFhNTDo6UGFyc2VyOjpMaXRlIG1heSBub3QgYmUgaW5zdGFsbGVkLCBvbmx5IGNoZWNrIGlmIHByZXNlbnQuCiAgICBpZiAoIGV2YWwgJ3JlcXVpcmUgWE1MOjpQYXJzZXI6OkxpdGUnICkgeyAgICAjIyBubyBjcml0aWMgcXcoQnVpbHRpbkZ1bmN0aW9uczo6UHJvaGliaXRTdHJpbmd5RXZhbCkKICAgICAgICBteSAkUGFyc2VyTGl0ZSA9IFhNTDo6UGFyc2VyOjpMaXRlLT5uZXcoKTsKICAgICAgICBldmFsIHsgJFBhcnNlckxpdGUtPnBhcnNlKCRDb2RlKSB9OwogICAgICAgIGlmICgkQCkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPkRpZVdpdGhFcnJvcigiWE1MOjpQYXJzZXI6OkxpdGUgcHJvZHVjZWQgZXJyb3JzOiAkQFxuIik7CiAgICAgICAgfQogICAgfQp9CgoxOwo=</File>
        <File Location="Kernel/TidyAll/tidyallrc" Permission="660" Encode="Base64">Owo7IEdsb2JhbCBpZ25vcmVzCjsKCjsgSWdub3JlIGFsbCBDUEFOIGNvbnRlbnQuCmlnbm9yZSA9IEtlcm5lbC9jcGFuLWxpYi8qKi8qIEN1c3RvbS9LZXJuZWwvY3Bhbi1saWIvKiovKiBsb2NhbC9saWIvcGVybDUvKiovKiBsb2NhbC9iaW4vKiovKgo7IElnbm9yZSBhbGwgZHluYW1pYy90ZW1wb3JhcnkgZGF0YS4KaWdub3JlID0gdmFyL3thcnRpY2xlLGxvZyxydW4sc2Vzc2lvbnMsc3Bvb2wsdG1wLHZpcnR1YWxmc30vKiovKgo7IElnbm9yZSB0aGlyZHBhcnR5IGNvbnRlbnQuCmlnbm9yZSA9ICoqL3RoaXJkcGFydHkvKiovKgppZ25vcmUgPSAqKi9ja2VkaXRvciouY3NzCjsgSWdub3JlIG1pbmlmaWVkIGZpbGVzCmlnbm9yZSA9ICoqLyoubWluLntjc3MsanN9CjsgSWdub3JlIExvYWRlciBjYWNoZSBmaWxlcy4KaWdub3JlID0gKiove2pzLWNhY2hlLGNzcy1jYWNoZX0vKiovKgo7IElnbm9yZSB0ZXN0IGRhdGEgZmlsZXMuCmlnbm9yZSA9IHRtcC9UZXN0LyoqLyoKO2lnbm9yZSA9IHNjcmlwdHMvdGVzdC9zYW1wbGUvKiovKgo7IGlnbm9yZSB0aGUgQ29kZVBvbGljeSB0aGF0IGlzIHVzZWQgYnkgdGhlIGdpdCBjb21taXQgaG9va3MKaWdub3JlID0gVGlkeUFsbC8qKi8qCgo7CjsgQ29tbW9uCjsKClsrVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6Q29tbW9uOjpDUkxGTGluZUVuZGluZ3NdCnNlbGVjdCA9ICoqLyoue3BsLHBtLHBzZ2ksdCx0dCxzcGVjLGpzLGNzcyxzY3NzLHZ1ZSxkaXN0LHRtcGwsc2gsc2tlbCx4bWwsc29wbSxodG1sLHNlcnZpY2UsY29uZn0KClsrVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6Q29tbW9uOjpOb0ZpbHRlcl0Kc2VsZWN0ID0gKiovKi57cGwscG0scHNnaSx0LHR0LHNwZWMsanMsY3NzLHNjc3MsdnVlLGRpc3QsdG1wbCxzaCxza2VsLHhtbCxzb3BtLGh0bWx9Cmlnbm9yZSA9IEtlcm5lbC9MYW5ndWFnZS8qLnBtIEN1c3RvbS9LZXJuZWwvTGFuZ3VhZ2UvKi5wbQppZ25vcmUgPSAqL0tlcm5lbC9MYW5ndWFnZS8qLnBtICovQ3VzdG9tL0tlcm5lbC9MYW5ndWFnZS8qLnBtCgpbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkNvbW1vbjo6T3JpZ2luXQpzZWxlY3QgPSAqKi8qLntwbCxwc2dpLHBtLHQsanMsY3NzLHR0LHhtbCxzb3BtfQppZ25vcmUgPSBLZXJuZWwvQ29uZmlnL0ZpbGVzL1paWioucG0KOyBJZ25vcmUgZG9jYm9vayBkb2N1bWVudGF0aW9ucwppZ25vcmUgPSAqL2NvbnRlbnQvKiovKi54bWwKClsrVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6Q29tbW9uOjpDdXN0b21pemF0aW9uTWFya2Vyc1RUXQpzZWxlY3QgPSBDdXN0b20vS2VybmVsL091dHB1dC9IVE1MLyoqLyoudHQKc2VsZWN0ID0gS2VybmVsL091dHB1dC9IVE1MLyoqLyoudHQKClsrVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6Q29tbW9uOjpDdXN0b21pemF0aW9uTWFya2Vyc10Kc2VsZWN0ID0gKiovKi57cGwscHNnaSxwbSx0LGpzLGNzcyx0dH0KaWdub3JlID0gS2VybmVsL0NvbmZpZy5wbQppZ25vcmUgPSBLZXJuZWwvQ29uZmlnL0dlbmVyaWNBZ2VudC5wbQppZ25vcmUgPSBLZXJuZWwvQ29uZmlnL0ZpbGVzL1paWioucG0KaWdub3JlID0gS2VybmVsL0xhbmd1YWdlLyoucG0gQ3VzdG9tL0tlcm5lbC9MYW5ndWFnZS8qLnBtCgpbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6RG9jYm9vazo6UmVwbGFjZVN1cHBvcnRFbWFpbF0Kc2VsZWN0ID0gZG9jLyoqLyoueG1sCgpbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6RG9jYm9vazo6UmVtb3ZlQ29udGFjdENoYXB0ZXJdCnNlbGVjdCA9IGRvYy8qKi8qLnhtbAoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpDb21tb246OlByb2hpYml0RW1haWxBZGRyZXNzZXNdCnNlbGVjdCA9ICoqLyoue3BsLHBtLHBzZ2ksdCx0dCxqcyx4bWwsc29wbX0KCjtbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkNvbW1vbjo6VHJhbnNsYXRhYmxlU3RyaW5nc1NwZWxsQ2hlY2tdCjtzZWxlY3QgPSAqKi8qLntwbCxwbSx0dCxqcyx4bWx9CgpbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkNvbW1vbjo6UmVtb3ZlQ1ZTSURzXQpzZWxlY3QgPSAqKi8qLntwbCxwbSxwc2dpLHQseG1sLHR0LGRpc3Qsc3BlYyxqc30Kc2VsZWN0ID0gdmFyL2Nyb24vKgoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpDb21tb246OlZhbGlkYXRlRmlsZW5hbWVdCnNlbGVjdCA9ICoKCjsKOyBDcm9uCjsKClsrVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6Q3Jvbjo6Q3JvblNjcmlwdHNdCnNlbGVjdCA9IHZhci9jcm9uLyouZGlzdAoKOwo7IEphdmFTY3JpcHQKOwoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpKYXZhU2NyaXB0OjpEZWJ1Z0NvZGVdCnNlbGVjdCA9ICoqLyouanMKaWdub3JlID0gc2NyaXB0cy93ZWJwYWNrLyoqLyoKClsrVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6SmF2YVNjcmlwdDo6VW5sb2FkRXZlbnRdCnNlbGVjdCA9ICoqLyouanMgKiovKi50dAoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpKYXZhU2NyaXB0OjpGaWxlTmFtZV0Kc2VsZWN0ID0gKiovKi5qcwppZ25vcmUgPSAqKi90ZXN0LyoKClsrVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6SmF2YVNjcmlwdDo6RmlsZU5hbWVVbml0VGVzdF0Kc2VsZWN0ID0gdmFyL2h0dHBkL2h0ZG9jcy9qcy90ZXN0LyouanMKClsrVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6SmF2YVNjcmlwdDo6RVNMaW50XQpzZWxlY3QgPSAqKi8qLntqc30KaWdub3JlID0gc2NyaXB0cy90ZXN0L3NhbXBsZS9Mb2FkZXIvKiovKgo7IElnbm9yZSB0aGlzIHNsb3cgcGx1Z2luIGZvciBtb3JlIGFnaWxlIE9UT0JPQ29kZVBvbGljeSBmaWx0ZXIgZGV2ZWxvcG1lbnQgd2l0aCBhIGN1c3RvbSBtb2RlICJmYXN0Ii4KO2V4Y2VwdF9tb2RlcyA9IGZhc3QKCjsKOyBMZWdhbAo7CgpbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkxlZ2FsOjpMaWNlbnNlVmFsaWRhdG9yXQpzZWxlY3QgPSAqKi8qLntwbCxwbSxwc2dpLHQsdHQsc3BlYyxqcyxjc3Msc2Nzcyx2dWUsZGlzdCxzaCxza2VsLHhtbCxzb3BtfQppZ25vcmUgPSBDT1BZSU5HIFJFTEVBU0UgQ1JFRElUUwppZ25vcmUgPSBLZXJuZWwvQ29uZmlnLnBtIEtlcm5lbC9Db25maWcvKiovWlpaKi5wbSBLZXJuZWwvQ29uZmlnL0ZpbGVzL1VzZXIvKi5wbQppZ25vcmUgPSBzY3JpcHRzL2F1dG9fYnVpbGQvc3BlYy90ZW1wbGF0ZXMvKiovKgppZ25vcmUgPSBzY3JpcHRzL3Rlc3Qvc2FtcGxlL1N5c0NvbmZpZy9NaWdyYXRpb24vKiovWlpaKi5wbQppZ25vcmUgPSBzY3JpcHRzL0RCVXBkYXRle1RvNix9L1Rhc2tDb25maWcvKi55bWwuZGlzdAppZ25vcmUgPSB2YXIvaHR0cGQvaHRkb2NzL2NvbW1vbi8qKi8qLmNzcwo7IE9UT0JPQ29udGludW91c0ludGVncmF0aW9uUHJvdmlzaW9uZXIgLSBkZXBsb3ltZW50IHRlbXBsYXRlIGluY2x1ZGVzCmlnbm9yZSA9ICoqLyoudHQuc2gKClsrVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6TGVnYWw6OlJlcGxhY2VDb3B5cmlnaHRdCnNlbGVjdCA9ICoqLyoue3BsLHBtLHBzZ2ksdCx0dCxzcGVjLGpzLGNzcyxzY3NzLHZ1ZSxkaXN0LHRtcGwsc2gsc2tlbCxjb25mLHRlbXBsYXRlfQpzZWxlY3QgPSAuKi5kaXN0IC5iYXNoX2NvbXBsZXRpb24Kc2VsZWN0ID0gLnNjcmVlbnJjCnNlbGVjdCA9IHZhci9jcm9uLyoKc2VsZWN0ID0gdmFyL2dpdC9ob29rcy8qLXJlY2VpdmUKc2VsZWN0ID0gZG9jdW1lbnRhdGlvbi55bWwKaWdub3JlID0gS2VybmVsL0NvbmZpZy5wbSBLZXJuZWwvQ29uZmlnLyoqL1paWioucG0KaWdub3JlID0gbW9kdWxlLWZvcm1hdC54bWwsY29kZXN5bnRheC54bWwsbGFuZ3VhZ2UtdHJhbnNsYXRpb25zLnhtbCx3cml0aW5nLW90b2JvLWFwcGxpY2F0aW9uLnhtbCx0ZXN0LW1lY2hhbmlzbS54bWwKaWdub3JlID0gc2NyaXB0cy9hdXRvX2J1aWxkL3NwZWMvdGVtcGxhdGVzL2luY2x1ZGVzL3N1c2Utc3lzdGVtZC1iYXNlLnR0IHNjcmlwdHMvYXV0b19idWlsZC9zcGVjL3RlbXBsYXRlcy9pbmNsdWRlcy9yZWRoYXQtc3lzdGVtZC1iYXNlLnR0CjsgRG9uJ3QgcnVuIHRoaXMgaW4gdGhlIENJIHRvIGF2b2lkIHVwZGF0ZXMgb24geWVhciBjaGFuZ2VzLiBJdCBpcyBlbm91Z2ggdG8gdXBkYXRlIHRoZSBjb2RlIHdoZW4gaXQgaXMgY2hhbmdlZC4Kb25seV9tb2RlcyA9IGNsaSBlZGl0b3IgY29tbWl0CgpbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkxlZ2FsOjpTT1BNTGljZW5zZV0Kc2VsZWN0ID0gKi57b3BtLHNvcG19Cgo7CjsgUE9UL1BPCjsKClsrVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UE86OkRvY2Jvb2tMaW50XQpzZWxlY3QgPSBpMThuLyoqLyoue3BvdCxwb30Kc2VsZWN0ID0gbG9jYWxlLyoqLyoue3BvdCxwb30KClsrVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UE86OkhUTUxUYWdzXQpzZWxlY3QgPSBpMThuLyoqLyoue3BvdCxwb30KClsrVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UE86Om1zZ2ZtdF0Kc2VsZWN0ID0gaTE4bi8qKi8qLntwb3QscG99CnNlbGVjdCA9IGxvY2FsZS8qKi8qLntwb3QscG99Cgo7CjsgUGVybAo7CgpbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OkJpblNjcmlwdHNdCnNlbGVjdCA9IGJpbi8qLnBsCgpbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OkNhY2hlTmV3XQpzZWxlY3QgPSAqKi8qLntwbCxwc2dpLHBtfQpzZWxlY3QgPSBLZXJuZWwvQ29uZmlnLnBtLmRpc3QKaWdub3JlID0gS2VybmVsL0xhbmd1YWdlLyoucG0gQ3VzdG9tL0tlcm5lbC9MYW5ndWFnZS8qLnBtCgpbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OkRCT2JqZWN0XQpzZWxlY3QgPSBLZXJuZWwvTW9kdWxlcy8qKi8qLnBtIEN1c3RvbS9LZXJuZWwvTW9kdWxlcy8qKi8qLnBtCmlnbm9yZSA9IEtlcm5lbC9MYW5ndWFnZS8qLnBtIEN1c3RvbS9LZXJuZWwvTGFuZ3VhZ2UvKi5wbQoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpEaWVFeGl0XQpzZWxlY3QgPSBLZXJuZWwvTW9kdWxlcy8qKi8qLnBtIEN1c3RvbS9LZXJuZWwvTW9kdWxlcy8qKi8qLnBtCmlnbm9yZSA9IEtlcm5lbC9MYW5ndWFnZS8qLnBtIEN1c3RvbS9LZXJuZWwvTGFuZ3VhZ2UvKi5wbQoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpGb3JlYWNoVG9Gb3JdCnNlbGVjdCA9ICoqLyoue3BsLHBtLHBzZ2ksdH0Kc2VsZWN0ID0gS2VybmVsL0NvbmZpZy5wbS5kaXN0Cmlnbm9yZSA9IEtlcm5lbC9MYW5ndWFnZS8qLnBtIEN1c3RvbS9LZXJuZWwvTGFuZ3VhZ2UvKi5wbQoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpGb3JNeV0Kc2VsZWN0ID0gKiovKi57cGwscHNnaSxwbSx0fQpzZWxlY3QgPSBLZXJuZWwvQ29uZmlnLnBtLmRpc3QKaWdub3JlID0gS2VybmVsL0xhbmd1YWdlLyoucG0gQ3VzdG9tL0tlcm5lbC9MYW5ndWFnZS8qLnBtCgpbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OkxheW91dE9iamVjdF0Kc2VsZWN0ID0gKiovKi57cGwscG0scHNnaSx0fQpzZWxlY3QgPSBLZXJuZWwvQ29uZmlnLnBtLmRpc3QKaWdub3JlID0gc2NyaXB0cy90ZXN0LyoqLyoKaWdub3JlID0gS2VybmVsL3tNb2R1bGVzLE91dHB1dH0vKiovKiBDdXN0b20vS2VybmVsL3tNb2R1bGVzLE91dHB1dH0vKiovKgppZ25vcmUgPSBLZXJuZWwvU3lzdGVtL1dlYi8qIEN1c3RvbS9LZXJuZWwvU3lzdGVtL1dlYi8qCmlnbm9yZSA9IEtlcm5lbC9TeXN0ZW0vRHluYW1pY0ZpZWxkLyoqLyogQ3VzdG9tL0tlcm5lbC9TeXN0ZW0vRHluYW1pY0ZpZWxkLyoqLyoKaWdub3JlID0gS2VybmVsL0xhbmd1YWdlLyoucG0gQ3VzdG9tL0tlcm5lbC9MYW5ndWFnZS8qLnBtCgpbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6Ok1vZHVsZUZvcm1hdF0Kc2VsZWN0ID0gKiovKi57cG0sdH0Kc2VsZWN0ID0gS2VybmVsL0NvbmZpZy5wbS5kaXN0Cmlnbm9yZSA9IEtlcm5lbC9MYW5ndWFnZS8qLnBtIEN1c3RvbS9LZXJuZWwvTGFuZ3VhZ2UvKi5wbQoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpOb0V4aXRJbkNvbnNvbGVDb21tYW5kc10Kc2VsZWN0ID0gS2VybmVsL1N5c3RlbS9Db25zb2xlL0NvbW1hbmQvKiovKi5wbSBDdXN0b20vS2VybmVsL1N5c3RlbS9Db25zb2xlL0NvbW1hbmQvKiovKi5wbQoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpPYmplY3REZXBlbmRlbmNpZXNdCnNlbGVjdCA9ICoqLyoue3BtfQpzZWxlY3QgPSBLZXJuZWwvQ29uZmlnLnBtLmRpc3QKaWdub3JlID0gS2VybmVsL0xhbmd1YWdlLyoucG0gQ3VzdG9tL0tlcm5lbC9MYW5ndWFnZS8qLnBtCgpbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6Ok9iamVjdE1hbmFnZXJDcmVhdGlvbl0Kc2VsZWN0ID0gKiovKi57cG19CnNlbGVjdCA9IEtlcm5lbC9Db25maWcucG0uZGlzdAppZ25vcmUgPSBLZXJuZWwvTGFuZ3VhZ2UvKi5wbSBDdXN0b20vS2VybmVsL0xhbmd1YWdlLyoucG0KaWdub3JlID0gS2VybmVsL1N5c3RlbS9Vbml0VGVzdC9SZWdpc3RlckRyaXZlci5wbSBDdXN0b20vS2VybmVsL1N5c3RlbS9Vbml0VGVzdC9SZWdpc3RlckRyaXZlci5wbQppZ25vcmUgPSBLZXJuZWwvU3lzdGVtL1VuaXRUZXN0L1JlZ2lzdGVyT00ucG0gQ3VzdG9tL0tlcm5lbC9TeXN0ZW0vVW5pdFRlc3QvUmVnaXN0ZXJPTS5wbQoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpPYmplY3ROYW1lU3BhY2VdCnNlbGVjdCA9ICoqLyoue3BsLHBtLHR9CnNlbGVjdCA9IEtlcm5lbC9Db25maWcucG0uZGlzdAppZ25vcmUgPSBLZXJuZWwvTW9kdWxlcy8qKi8qIEN1c3RvbS9LZXJuZWwvTW9kdWxlcy8qKi8qCmlnbm9yZSA9IEtlcm5lbC9MYW5ndWFnZS8qLnBtIEN1c3RvbS9LZXJuZWwvTGFuZ3VhZ2UvKi5wbQoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpQYXJhbU9iamVjdF0Kc2VsZWN0ID0gKiovKi57cGwscHNnaX0Kc2VsZWN0ID0gS2VybmVsL1N5c3RlbS8qKi8qLnBtIEN1c3RvbS9LZXJuZWwvU3lzdGVtLyoqLyoucG0KaWdub3JlID0gS2VybmVsL1N5c3RlbS9XZWIvKiovKi5wbSBDdXN0b20vS2VybmVsL1N5c3RlbS9XZWIvKiovKi5wbQoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpQZXJsQ3JpdGljXQpzZWxlY3QgPSAqKi8qLntwbCxwbSxwc2dpLHR9Cmlnbm9yZSA9IEtlcm5lbC9Db25maWcucG0KaWdub3JlID0gS2VybmVsL0xhbmd1YWdlLyoucG0gQ3VzdG9tL0tlcm5lbC9MYW5ndWFnZS8qLnBtCmlnbm9yZSA9IHNjcmlwdHMvdGVzdC9zYW1wbGUvKiovKgo7IElnbm9yZSB0aGlzIHNsb3cgcGx1Z2luIGZvciBtb3JlIGFnaWxlIE9UT0JPQ29kZVBvbGljeSBmaWx0ZXIgZGV2ZWxvcG1lbnQgd2l0aCBhIGN1c3RvbSBtb2RlICJmYXN0Ii4KZXhjZXB0X21vZGVzID0gZmFzdApwcm9maWxlID0gJFJPT1QvUGx1Z2luL09UT0JPL1BlcmwvcGVybGNyaXRpY3JjCgpbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBlcmxUaWR5XQpzZWxlY3QgPSAqKi8qLntwbCxwbSxwc2dpLHR9Cmlnbm9yZSA9IEtlcm5lbC9Db25maWcucG0gS2VybmVsL0NvbmZpZy9EZWZhdWx0cy5wbSBLZXJuZWwvQ29uZmlnLyoqL1paWioucG0gS2VybmVsL0NvbmZpZy9GaWxlcy9Vc2VyLyoucG0KaWdub3JlID0gS2VybmVsL0xhbmd1YWdlLyoucG0gQ3VzdG9tL0tlcm5lbC9MYW5ndWFnZS8qLnBtCmFyZ3YgPSAtcHJvPSRST09UL1BsdWdpbi9PVE9CTy9QZXJsL3Blcmx0aWR5cmMKOyBJZ25vcmUgdGhpcyBzbG93IHBsdWdpbiBmb3IgbW9yZSBhZ2lsZSBPVE9CT0NvZGVQb2xpY3kgZmlsdGVyIGRldmVsb3BtZW50IHdpdGggYSBjdXN0b20gbW9kZSAiZmFzdCIuCmV4Y2VwdF9tb2RlcyA9IGZhc3QKClsrVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6UG9kOjpGdW5jdGlvblBvZF0Kc2VsZWN0ID0gKiovKi57cG19Cmlnbm9yZSA9IEtlcm5lbC9MYW5ndWFnZS8qLnBtIEN1c3RvbS9LZXJuZWwvTGFuZ3VhZ2UvKi5wbQoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpQb2Q6OlNwZWxsQ2hlY2tdCnNlbGVjdCA9ICoqLyoue3BtLHBvZH0KaWdub3JlID0gS2VybmVsL0xhbmd1YWdlLyoucG0gQ3VzdG9tL0tlcm5lbC9MYW5ndWFnZS8qLnBtCjsgSWdub3JlIHRoaXMgc2xvdyBwbHVnaW4gZm9yIG1vcmUgYWdpbGUgT1RPQk9Db2RlUG9saWN5IGZpbHRlciBkZXZlbG9wbWVudCB3aXRoIGEgY3VzdG9tIG1vZGUgImZhc3QiLgpleGNlcHRfbW9kZXMgPSBmYXN0CgpbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBvZDo6VmFsaWRhdG9yXQpzZWxlY3QgPSAqKi8qLntwbSxwb2QscG9kLmRpc3R9Cmlnbm9yZSA9IEtlcm5lbC9MYW5ndWFnZS8qLnBtIEN1c3RvbS9LZXJuZWwvTGFuZ3VhZ2UvKi5wbQoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpQcmludF0Kc2VsZWN0ID0gS2VybmVsL01vZHVsZXMvKiovKi5wbSBDdXN0b20vS2VybmVsL01vZHVsZXMvKiovKi5wbQoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpSZXF1aXJlXQpzZWxlY3QgPSAqKi8qLntwbCxwc2dpLHBtLHR9CnNlbGVjdCA9IEtlcm5lbC9Db25maWcucG0uZGlzdAppZ25vcmUgPSBzY3JpcHRzL3Rlc3QvU2VsZW5pdW0vKiovKi50Cmlnbm9yZSA9IEtlcm5lbC9MYW5ndWFnZS8qLnBtIEN1c3RvbS9LZXJuZWwvTGFuZ3VhZ2UvKi5wbQoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpTY3JpcHRGb3JtYXRdCnNlbGVjdCA9ICoqLyoue3BsLHBzZ2l9CgpbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlN1YkRlY2xhcmF0aW9uXQpzZWxlY3QgPSAqKi8qLntwbCxwbSxwc2dpLHR9CnNlbGVjdCA9IEtlcm5lbC9Db25maWcucG0uZGlzdAppZ25vcmUgPSBLZXJuZWwvTGFuZ3VhZ2UvKi5wbSBDdXN0b20vS2VybmVsL0xhbmd1YWdlLyoucG0KClsrVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6U3ludGF4Q2hlY2tdCnNlbGVjdCA9ICoqLyoue3BsLHBtLHBzZ2ksdH0Kc2VsZWN0ID0gS2VybmVsL0NvbmZpZy5wbS5kaXN0CjsgSWdub3JlIHRoaXMgc2xvdyBwbHVnaW4gZm9yIG1vcmUgYWdpbGUgT1RPQk9Db2RlUG9saWN5IGZpbHRlciBkZXZlbG9wbWVudCB3aXRoIGEgY3VzdG9tIG1vZGUgImZhc3QiLgpleGNlcHRfbW9kZXMgPSBmYXN0CgpbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlRlc3RzOjpIZWxwZXJdCnNlbGVjdCA9ICoqLyoue3R9CgpbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlRpbWVdCnNlbGVjdCA9ICoqLyoue3BsLHBtLHBzZ2ksdH0Kc2VsZWN0ID0gS2VybmVsL0NvbmZpZy5wbS5kaXN0Cmlnbm9yZSA9IHNjcmlwdHMvdGVzdC8qKi8qCmlnbm9yZSA9IEtlcm5lbC9MYW5ndWFnZS8qLnBtIEN1c3RvbS9LZXJuZWwvTGFuZ3VhZ2UvKi5wbQoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpUcmFuc2xhdGFibGVdCnNlbGVjdCA9ICoqLyoue3BsLHBtLHBzZ2ksdH0KaWdub3JlID0gS2VybmVsL0NvbmZpZy5wbSBLZXJuZWwvQ29uZmlnLyoqL1paWioucG0KaWdub3JlID0gS2VybmVsL0xhbmd1YWdlLnBtCmlnbm9yZSA9IEtlcm5lbC9MYW5ndWFnZS8qLnBtIEN1c3RvbS9LZXJuZWwvTGFuZ3VhZ2UvKi5wbQppZ25vcmUgPSBzY3JpcHRzL3Rlc3QvKiovKgoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpUcmFuc2xhdGlvbkVuY29kaW5nXQpzZWxlY3QgPSBLZXJuZWwvTGFuZ3VhZ2UvKi5wbSBDdXN0b20vS2VybmVsL0xhbmd1YWdlLyoucG0KClsrVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6VW5pdFRlc3RDb25maWdDaGFuZ2VzXQpzZWxlY3QgPSBzY3JpcHRzL3Rlc3QvKiovKi57dH0KClsrVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6VXNlUGFyZW50XQpzZWxlY3QgPSAqKi8qLnBtICoqLyoucG0uc2tlbApzZWxlY3QgPSBLZXJuZWwvQ29uZmlnLnBtLmRpc3QKaWdub3JlID0gS2VybmVsL0xhbmd1YWdlLyoucG0gQ3VzdG9tL0tlcm5lbC9MYW5ndWFnZS8qLnBtCgpbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlVzZVdhcm5pbmdzXQpzZWxlY3QgPSAqKi8qLntwbCxwbSxwc2dpLHR9CnNlbGVjdCA9IEtlcm5lbC9Db25maWcucG0uZGlzdAppZ25vcmUgPSBLZXJuZWwvTGFuZ3VhZ2UvKi5wbSBDdXN0b20vS2VybmVsL0xhbmd1YWdlLyoucG0KCjsKOyBTT1BNCjsKClsrVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6U09QTTo6Q29kZVRhZ3NdCnNlbGVjdCA9ICoue29wbSxzb3BtfQoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpTT1BNOjpGaWxlTGlzdF0Kc2VsZWN0ID0gKi57b3BtLHNvcG19CgpbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlNPUE06OkZpbGVSaWdodHNdCnNlbGVjdCA9ICoue29wbSxzb3BtfQoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpTT1BNOjpOYW1lXQpzZWxlY3QgPSAqLntzb3BtfQoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpTT1BNOjpQYWNrYWdlUmVxdWlyZWRdCnNlbGVjdCA9ICoue29wbSxzb3BtfQoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpTT1BNOjpSZXF1aXJlZEVsZW1lbnRzXQpzZWxlY3QgPSAqLntzb3BtfQoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpTT1BNOjpYU0RWYWxpZGF0b3JdCnNlbGVjdCA9ICoue3NvcG19Cgo7CjsgVFQKOwoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpUVDo6U2NyaXB0VXNhZ2VdCnNlbGVjdCA9ICoqLyoudHQKClsrVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6VFQ6OlRyYW5zbGF0aW9uRmlsdGVyXQpzZWxlY3QgPSAqKi8qLnR0Cgo7CjsgU1FMCjsKClsrVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6U1FMOjpSZXNlcnZlZFdvcmRzXQpzZWxlY3QgPSAqKi8qLnt4bWwsb3BtLHNvcG19Cgo7CjsgV2hpdGVzcGFjZQo7CgpbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OldoaXRlc3BhY2U6OkZvdXJTcGFjZXNdCnNlbGVjdCA9ICoqLyoue29wbSxzb3BtfQoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpXaGl0ZXNwYWNlOjpUYWJzXQpzZWxlY3QgPSAqKi8qLntwbCxwbSxwc2dpLHQsdHQsanMseG1sLG9wbSxzb3BtfQppZ25vcmUgPSBLZXJuZWwvQ29uZmlnLnBtIEtlcm5lbC9Db25maWcvKiovWlpaKi5wbQoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpXaGl0ZXNwYWNlOjpUcmFpbGluZ1doaXRlc3BhY2VdCnNlbGVjdCA9ICoqLyoue3BsLHBtLHBzZ2ksdCx0dCxqcyx4bWwsb3BtLHNvcG0sbWR9Cmlnbm9yZSA9IEtlcm5lbC9Db25maWcucG0gS2VybmVsL0NvbmZpZy8qKi9aWloqLnBtCgo7CjsgWE1MCjsKClsrVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6WE1MOjpDb25maWdTeW50YXhdCnNlbGVjdCA9ICoqLyoueG1sCmlnbm9yZSA9IGRldmVsb3BtZW50L3NhbXBsZXMvY29uZmlnLyoueG1sCjsgaWdub3JlIC54bWwgZmlsZXMgaW4gZG9jdW1lbnRhdGlvbgppZ25vcmUgPSBkb2MvKiovKi54bWwKaWdub3JlID0gZW4vY29udGVudC8qKi8qLnhtbAppZ25vcmUgPSBkZS9jb250ZW50LyoqLyoueG1sCmlnbm9yZSA9IGh1L2NvbnRlbnQvKiovKi54bWwKaWdub3JlID0gc2NyaXB0cy90ZXN0L3NhbXBsZS8qKi8qLnhtbAoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpYTUw6OkNvbmZpZ0Rlc2NyaXB0aW9uXQpzZWxlY3QgPSBLZXJuZWwvQ29uZmlnLyoqLyoueG1sCgpbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6Q29uZmlndXJhdGlvbjo6TmF2aWdhdGlvbl0Kc2VsZWN0ID0gS2VybmVsL0NvbmZpZy8qKi8qLnhtbAoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpYTUw6OkNvbmZpZ3VyYXRpb246OlVuaXRUZXN0QmxhY2tsaXN0XQpzZWxlY3QgPSBLZXJuZWwvQ29uZmlnLyoqLyoueG1sCgpbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6Q29uZmlndXJhdGlvbjo6WFNEVmFsaWRhdG9yXQpzZWxlY3QgPSBLZXJuZWwvQ29uZmlnLyoqLyoueG1sCgpbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6RGF0YWJhc2U6OktleUxlbmd0aF0Kc2VsZWN0ID0gc2NyaXB0cy9kYXRhYmFzZS9vdG9iby1zY2hlbWEueG1sCnNlbGVjdCA9ICoue3NvcG19CgpbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6RGF0YWJhc2U6OlhTRFZhbGlkYXRvcl0Kc2VsZWN0ID0gc2NyaXB0cy9kYXRhYmFzZS8qLnhtbApzZWxlY3QgPSBzY3JpcHRzL2RhdGFiYXNlL3VwZGF0ZS8qLnhtbAoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpYTUw6OkRvY2Jvb2s6OkJpblNjcmlwdHNdCnNlbGVjdCA9IGRvYy8qKi8qLnhtbAo7c2VsZWN0ID0gZW4vY29udGVudC8qKi8qLnhtbAoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpYTUw6OkRvY2Jvb2s6OkltYWdlT3V0cHV0XQpzZWxlY3QgPSBkb2MvKiovKi54bWwKc2VsZWN0ID0gZW4vY29udGVudC8qKi8qLnhtbAoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpYTUw6OkRvY2Jvb2s6OlhTRFZhbGlkYXRvcl0Kc2VsZWN0ID0gZG9jLyoqLyoueG1sCjtzZWxlY3QgPSBlbi9jb250ZW50LyoqLyoueG1sCgpbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6V1NETDo6WFNEVmFsaWRhdG9yXQpzZWxlY3QgPSAqKi8qLndzZGwKClsrVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6WE1MOjpMaW50XQpzZWxlY3QgPSAqKi8qLnt4bWwseHNkfQoKWytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpYTUw6OkxpbnRXaXRoT3VyUGFyc2Vyc10Kc2VsZWN0ID0gOyoqLyoueG1sCgo7CjsgTWlncmF0aW9ucyBPVE9CTyAxMAo7Cgo7WytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpNaWdyYXRpb25zOjpPVE9CTzEwOjpEYXRlVGltZV0KO3NlbGVjdCA9ICoqLyoue3BsLHBtLHBzZ2ksdH0KO2lnbm9yZSA9IEtlcm5lbC9Db25maWcvRmlsZXMvWlpaKi5wbQo7aWdub3JlID0gS2VybmVsL0xhbmd1YWdlLyoucG0gQ3VzdG9tL0tlcm5lbC9MYW5ndWFnZS8qLnBtCjsKO1srVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6TWlncmF0aW9uczo6T1RPQk8xMDo6UGVybENvbmZpZ0ZpbGVGb3JtYXRdCjtzZWxlY3QgPSBLZXJuZWwvQ29uZmlnL0ZpbGVzLyoucG0KOwo7WytUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpNaWdyYXRpb25zOjpPVE9CTzEwOjpQZXJtaXNzaW9uRGF0YU5vdEluU2Vzc2lvbl0KO3NlbGVjdCA9ICoqLyoue3BsLHBtLHBzZ2ksdH0KO2lnbm9yZSA9IEtlcm5lbC9MYW5ndWFnZS8qLnBtIEN1c3RvbS9LZXJuZWwvTGFuZ3VhZ2UvKi5wbQo7CjtbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86Ok1pZ3JhdGlvbnM6Ok9UT0JPMTA6OlN5c0NvbmZpZ10KO3NlbGVjdCA9ICoqLyoue3BsLHBtLHBzZ2ksdH0KO2lnbm9yZSA9IEtlcm5lbC9MYW5ndWFnZS8qLnBtIEN1c3RvbS9LZXJuZWwvTGFuZ3VhZ2UvKi5wbQo7CjtbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86Ok1pZ3JhdGlvbnM6Ok9UT0JPMTA6OlRpbWVPYmplY3RdCjtzZWxlY3QgPSAqKi8qLntwbCxwbSxwc2dpLHR9CjtpZ25vcmUgPSBLZXJuZWwvU3lzdGVtL1RpbWUucG0KO2lnbm9yZSA9IHNjcmlwdHMvdGVzdC9UaW1lLnQKO2lnbm9yZSA9IHNjcmlwdHMvdGVzdC9UaW1lLyoqLyoudAo7aWdub3JlID0gS2VybmVsL0xhbmd1YWdlLyoucG0gQ3VzdG9tL0tlcm5lbC9MYW5ndWFnZS8qLnBtCjsKO1srVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6TWlncmF0aW9uczo6T1RPQk8xMDo6VGltZVpvbmVPZmZzZXRdCjtzZWxlY3QgPSAqKi8qLntwbCxwbSxwc2dpLHR9CjtpZ25vcmUgPSBLZXJuZWwvQ29uZmlnL0ZpbGVzL1paWioucG0KO2lnbm9yZSA9IEtlcm5lbC9MYW5ndWFnZS8qLnBtIEN1c3RvbS9LZXJuZWwvTGFuZ3VhZ2UvKi5wbQo7CjtbK1RpZHlBbGw6OlBsdWdpbjo6T1RPQk86Ok1pZ3JhdGlvbnM6Ok9UT0JPMTA6OlhNTEZyb250ZW5kTmF2aWdhdGlvbl0KO3NlbGVjdCA9IEtlcm5lbC9Db25maWcvKiovKi54bWwK</File>
        <File Location="Kernel/TidyAll/git-hooks/pre-commit.pl" Permission="770" Encode="Base64">IyEvdXNyL2Jpbi9lbnYgcGVybAojIC0tCiMgT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgojIC0tCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KIyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNSBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBGaWxlOjpCYXNlbmFtZTsKdXNlIEZpbmRCaW4gcXcoJFJlYWxCaW4pOwp1c2UgbGliIGRpcm5hbWUoJFJlYWxCaW4pIC4gJy8uLi8uLi8nOwp1c2UgbGliIGRpcm5hbWUoJFJlYWxCaW4pIC4gJy8uLi8uLi9LZXJuZWwvJzsgICAgIyBmaW5kIFRpZHlBbGwKdXNlIGxpYiBkaXJuYW1lKCRSZWFsQmluKSAuICcvLi4vLi4vS2VybmVsL2NwYW4tbGliJzsKCnVzZSBUaWR5QWxsOjpPVE9CTzo6R2l0OjpQcmVDb21taXQ7CgojIHNraXAgbWVyZ2UgY29tbWl0cwppZiAoIC1lICcuZ2l0L01FUkdFX01TRycgKSB7CiAgICBwcmludCAibWVyZ2UgY29tbWl0LiBza2lwcGluZyBjb21taXQgaG9vay4uLlxuIjsKICAgIGV4aXQ7Cn0KCm15ICRQcmVDb21taXQgPSBUaWR5QWxsOjpPVE9CTzo6R2l0OjpQcmVDb21taXQtPm5ldygpOwokUHJlQ29tbWl0LT5SdW4oKTsK</File>
        <File Location="Kernel/TidyAll/git-hooks/pre-receive.pl" Permission="770" Encode="Base64">IyEvdXNyL2Jpbi9lbnYgcGVybAojIC0tCiMgT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgojIC0tCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KIyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNiBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCiMgY29yZSBtb2R1bGVzCnVzZSBGaWxlOjpCYXNlbmFtZTsKdXNlIEZpbmRCaW4gcXcoJFJlYWxCaW4pOwp1c2UgR2V0b3B0OjpMb25nIHF3KEdldE9wdGlvbnMpOwoKIyBDUEFOIG1vZHVsZXMKCiMgT1RPQk8gbW9kdWxlcwoKdXNlIGxpYiBkaXJuYW1lKCRSZWFsQmluKSAuICcvLi4vLi4vJzsKdXNlIGxpYiBkaXJuYW1lKCRSZWFsQmluKSAuICcvLi4vLi4vS2VybmVsLyc7ICAgICMgZmluZCBUaWR5QWxsCnVzZSBsaWIgZGlybmFtZSgkUmVhbEJpbikgLiAnLy4uLy4uL0tlcm5lbC9jcGFuLWxpYic7Cgp1c2UgVGlkeUFsbDo6T1RPQk86OkdpdDo6UHJlUmVjZWl2ZTsKCm15ICRJbnB1dCA9ICcnOwpHZXRPcHRpb25zKCAnaW5wdXQ9cycgPT4gXCRJbnB1dCApOwoKbXkgJFByZVJlY2VpdmUgPSBUaWR5QWxsOjpPVE9CTzo6R2l0OjpQcmVSZWNlaXZlLT5uZXcoKTsKJFByZVJlY2VpdmUtPlJ1biggSW5wdXQgPT4gJElucHV0ICk7Cg==</File>
        <File Location="Kernel/TidyAll/git-hooks/prepare-commit-msg.pl" Permission="770" Encode="Base64">IyEvdXNyL2Jpbi9lbnYgcGVybAojIC0tCiMgT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgojIC0tCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KIyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNSBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCiMgY29yZSBtb2R1bGVzCnVzZSBJTzo6RmlsZTsKCiMgQ1BBTiBtb2R1bGVzCgojIE9UT0JPIG1vZHVsZXMKCj1oZWFkMSBOQU1FCgpwcmVwYXJlLWNvbW1pdC1tc2cucGwgLSBhIGdpdCBob29rCgo9aGVhZDEgREVTQ1JJUFRJT04KClRoaXMgZ2l0IGhvb2sgcHJlc2V0IHRoZSBjb21taXQgbWVzc2FnZSB3aGVuIHJ1bm5pbmcgSTxnaXQgY29tbWl0Pi4KVHdvIGRpZmZlcmVudCBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkLgoKPWhlYWQyIHJlZmVyZW5jZSB0aGUgR2l0aHViIGlzc3VlIGJhc2VkIG9uIGEgbmFtaW5nIGNvbnZlbnRpb24gZm9yIHRoZSBicmFuY2gKCldoZW4gdGhlIGN1cnJlbnQgZ2l0IGJyYW5jaCBpcyByZWNvZ25pc2VkIGFzIGFuIGlzc3VlIGJyYW5jaCB0aGVuCnRoZSBjb21taXQgbWVzc2FnZSBpcyBwcmVwZW5kZWQgd2l0aCAnSXNzdWUgIzxJU1NVRV9JRD46Jy4KCkV4YW1wbGVzIGZvciBpc3N1ZSBicmFuY2ggbmFtZXMgYXJlOgoKICAgIGlzc3VlLSM1MTMtcHJlcGFyZV9jb21taXRfbXNnCiAgICBpc3N1ZS1yb3RoZXJvc3Mvb3RvYm8jNTEzLXByZXBhcmVfY29tbWl0X21zZwogICAgaXNzdWUtUm90aGVyT1NTL290b2JvLWRvY2tlciMxLWV4YW1wbGUKICAgIGlzc3VlLVJvdGhlck9TUy9vdG9iby1kb2NrZXIjMi14CgoKPWhlYWQyIGluY2x1ZGUgdGhlIGZpbGUgLmdpdC9PVE9CT0NvbW1pdFRlbXBsYXRlRmlsZS5tc2cKClRoaXMgaXMgc3VwcG9ydCBmb3IgYSB3b3JrZmxvdyB0aGF0IGdlbmVyYXRlcyB0ZXh0IGZvciB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIHdyaXRlcyBpdCB0bwphbiBhZ3JlZWQgdXBvbiBmaWxlLiBBZnRlciBpbmNsdWRpbmcgaXQsIHRoZSB0cmFuc2ZlciBmaWxlIGlzIGRlbGV0ZWQuCgpDdXJyZW50bHkgbm8gZXhhbXBsZSBvZiBzdWNoIGEgd29ya2Zsb3cgaXMga25vd24uCgo9Y3V0CgojIGdpdCBjYWxscyB0aGlzIHNjcmlwdCB3aXRoIHRoZSBhcmd1bWVudHM6IENPTU1JVF9NU0dfRklMRSwgQ09NTUlUX1NPVVJDRSwgU0hBMS4KIyBIZXJlIG9ubHkgQ09NTUlUX01TR19GSUxFIGFuZCBDT01NSVRfU09VUkNFIGFyZSBuZWVkZWQuCm15ICggJEdpdENvbW1pdE1zZ0ZpbGUsICRHaXRDb21taXRTb3VyY2UgKSA9IEBBUkdWOwoKbXkgQEN1c3RvbUNvbW1pdE1zZzsKCiMgZmVhdHVyZSAxCiMgRm9yIG5vdyB3ZSBtZXNzIG9ubHkgd2l0aCBpbnRlcmFjdGl2ZSBjb21taXRzLCB0aGF0IGlzIHdoZW4gJEdpdENvbW1pdFNvdXJjZSBpcyBlbXB0eS4KaWYgKCAhJEdpdENvbW1pdFNvdXJjZSApIHsKCiAgICAjIGZpbmQgb3V0IHdoaWNoIGJyYW5jaCB3ZSBhcmUgb24KICAgIG15ICRCcmFuY2hOYW1lID0gYGdpdCByZXYtcGFyc2UgLS1hYmJyZXYtcmVmIEhFQURgOwogICAgY2hvbXAgJEJyYW5jaE5hbWU7CgogICAgIyBEbyBub3RoaW5nIHVubGVzcyB0aGUgaXNzdWUgY2FuIGJlIGV4dHJhY3RlZCBmcm9tIHRoZSBnaXQgYnJhbmNoIG5hbWUuCiAgICBpZiAoIG15ICgkSXNzdWUpID0gJEJyYW5jaE5hbWUgPX4gbS9eaXNzdWUtKC4qI1swLTldKyktW14tXSsvICkgewoKICAgICAgICAjIFByZXBlbmQgdGhlIGlzc3VlIHRvIHRoZSBjb21taXQgbWVzc2FnZS4KICAgICAgICBwdXNoIEBDdXN0b21Db21taXRNc2csICJJc3N1ZSAkSXNzdWU6IjsKICAgIH0KfQoKIyBmZWF0dXJlIDIKewogICAgbXkgJE9UT0JPQ29tbWl0VGVtcGxhdGVGaWxlID0gJy5naXQvT1RPQk9Db21taXRUZW1wbGF0ZS5tc2cnOwoKICAgIGlmICggLXIgJE9UT0JPQ29tbWl0VGVtcGxhdGVGaWxlICkgewoKICAgICAgICAjIEdldCBvdXIgY29udGVudCBhbmQgcHJlcGVuZCBpdAogICAgICAgIG15ICRGaWxlSGFuZGxlID0gSU86OkZpbGUtPm5ldyggJE9UT0JPQ29tbWl0VGVtcGxhdGVGaWxlLCAncicgKTsKICAgICAgICBwdXNoIEBDdXN0b21Db21taXRNc2csICRGaWxlSGFuZGxlLT5nZXRsaW5lcygpOwoKICAgICAgICAjIFJlbW92ZSBjdXN0b20gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUKICAgICAgICB1bmxpbmsgJE9UT0JPQ29tbWl0VGVtcGxhdGVGaWxlOwogICAgfQp9CgojIHByZXBlbmQgdGhlIGN1c3RvbSB0ZXh0IHRvIHRoZSBjb21taXQgbWVzc2FnZQppZiAoQEN1c3RvbUNvbW1pdE1zZykgewoKICAgIG15ICRGaWxlSGFuZGxlSW4gPSBJTzo6RmlsZS0+bmV3KCAkR2l0Q29tbWl0TXNnRmlsZSwgJ3InICk7CiAgICBteSBAT2xkQ29tbWl0TXNnID0gJEZpbGVIYW5kbGVJbi0+Z2V0bGluZXMoKTsKCiAgICAjIFdyaXRlIG5ldyBjb21taXQgbWVzc2FnZQogICAgbXkgJEZpbGVIYW5kbGVPdXQgPSBJTzo6RmlsZS0+bmV3KCAkR2l0Q29tbWl0TXNnRmlsZSwgJ3cnICk7CiAgICAkRmlsZUhhbmRsZU91dC0+cHJpbnQoIGpvaW4gJycsIEBDdXN0b21Db21taXRNc2csIEBPbGRDb21taXRNc2cgKTsKfQo=</File>
        <File Location="scripts/install-git-hooks.pl" Permission="770" Encode="Base64">IyEvdXNyL2Jpbi9lbnYgcGVybAojIC0tCiMgT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgojIC0tCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KIyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNSBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEN3ZDsKdXNlIEZpbGU6OlNwZWM7CnVzZSBGaW5kQmluIHF3KCRSZWFsQmluKTsKCm15ICREaXJlY3RvcnkgPSBnZXRjd2Q7CgojIGluc3RhbGwgaG9va3MKbXkgJE51bUhvb2tzID0gMDsKdW5saW5rIEZpbGU6OlNwZWMtPmNhdGZpbGUoICREaXJlY3RvcnksICcuZ2l0JywgJ2hvb2tzJywgJ3ByZS1jb21taXQnICk7CnN5bWxpbmsoCiAgICBGaWxlOjpTcGVjLT5jYXRmaWxlKCAkUmVhbEJpbiwgICAnLi4nLCAgICdLZXJuZWwnLCAnVGlkeUFsbCcsICdnaXQtaG9va3MnLCAncHJlLWNvbW1pdC5wbCcgKSwKICAgIEZpbGU6OlNwZWMtPmNhdGZpbGUoICREaXJlY3RvcnksICcuZ2l0JywgJ2hvb2tzJywgICdwcmUtY29tbWl0JyApCik7CiROdW1Ib29rcysrOwoKdW5saW5rIEZpbGU6OlNwZWMtPmNhdGZpbGUoICREaXJlY3RvcnksICcuZ2l0JywgJ2hvb2tzJywgJ3ByZXBhcmUtY29tbWl0LW1zZycgKTsKc3ltbGluaygKICAgIEZpbGU6OlNwZWMtPmNhdGZpbGUoCiAgICAgICAgJFJlYWxCaW4sICcuLicsICdLZXJuZWwnLCAnVGlkeUFsbCcsICdnaXQtaG9va3MnLCAncHJlcGFyZS1jb21taXQtbXNnLnBsJwogICAgKSwKICAgIEZpbGU6OlNwZWMtPmNhdGZpbGUoICREaXJlY3RvcnksICcuZ2l0JywgJ2hvb2tzJywgJ3ByZXBhcmUtY29tbWl0LW1zZycgKQopOwokTnVtSG9va3MrKzsKCnByaW50ICJJbnN0YWxsZWQgJE51bUhvb2tzIGdpdCBob29rcyBpbiAkRGlyZWN0b3J5LlxuXG4iOwo=</File>
        <File Location="scripts/uninstall-git-hooks.pl" Permission="770" Encode="Base64">IyEvdXNyL2Jpbi9lbnYgcGVybAojIC0tCiMgT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgojIC0tCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KIyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNSBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEN3ZDsKdXNlIEZpbGU6OlNwZWM7CgpteSAkRGlyZWN0b3J5ID0gZ2V0Y3dkOwoKdW5saW5rIEZpbGU6OlNwZWMtPmNhdGZpbGUoICREaXJlY3RvcnksICcuZ2l0JywgJ2hvb2tzJywgJ3ByZS1jb21taXQnICk7CnVubGluayBGaWxlOjpTcGVjLT5jYXRmaWxlKCAkRGlyZWN0b3J5LCAnLmdpdCcsICdob29rcycsICdwcmVwYXJlLWNvbW1pdC1tc2cnICk7CnByaW50ICJSZW1vdmVkIGdpdCBob29rcyBpbiAkRGlyZWN0b3J5LlxuXG4iOwo=</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCnBhY2thZ2Ugc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczsKCiMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlJlcXVpcmUpCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIFRpZHlBbGw6Ok9UT0JPOwoKc3ViIFJ1biB7CiAgICBteSAoJVBhcmFtKSA9IEBfOwoKICAgICMgU3VwcHJlc3MgY29sb3JlZCBvdXRwdXQgdG8gbm90IGNsdXR0ZXIgbG9nIGZpbGVzLgogICAgbG9jYWwgJEVOVntPVE9CT0NPREVQT0xJQ1lfTk9DT0xPUn0gPSAxOwoKICAgIG15ICRUaWR5QWxsID0gVGlkeUFsbDo6T1RPQk8tPm5ld19mcm9tX2NvbmZfZmlsZSgKICAgICAgICAiLi9LZXJuZWwvVGlkeUFsbC90aWR5YWxscmMiLAogICAgICAgIG5vX2NhY2hlICAgPT4gMSwKICAgICAgICBjaGVja19vbmx5ID0+IDEsCiAgICAgICAgbW9kZSAgICAgICA9PiAndGVzdHMnLAogICAgICAgIHJvb3RfZGlyICAgPT4gJy4nLAogICAgICAgIGRhdGFfZGlyICAgPT4gRmlsZTo6U3BlYy0+dG1wZGlyKCksCgogICAgICAgICN2ZXJib3NlICAgID0+IDEsCiAgICApOwoKICAgIFRFU1Q6CiAgICBmb3IgbXkgJFRlc3QgKCAkUGFyYW17VGVzdHN9LT5AKiApIHsKCiAgICAgICAgIyBTZXQgZnJhbWV3b3JrIHZlcnNpb24gaW4gVGlkeUFsbCBzbyB0aGF0IHBsdWdpbnMgY2FuIHVzZSBpdC4KICAgICAgICBteSAoICRGcmFtZXdvcmtWZXJzaW9uTWFqb3IsICRGcmFtZXdvcmtWZXJzaW9uTWlub3IgKSA9ICRUZXN0LT57RnJhbWV3b3JrfSA9fiBtLyhcZCspWy5dKFxkKykveG1zOwogICAgICAgICRUaWR5QWxsOjpPVE9CTzo6RnJhbWV3b3JrVmVyc2lvbk1ham9yID0gJEZyYW1ld29ya1ZlcnNpb25NYWpvcjsKICAgICAgICAkVGlkeUFsbDo6T1RPQk86OkZyYW1ld29ya1ZlcnNpb25NaW5vciA9ICRGcmFtZXdvcmtWZXJzaW9uTWlub3I7CgogICAgICAgICMgU2V0IHRoZSBsaXN0IG9mIGZpbGVzIHRvIHRoZSBzYW1lIG9uZSBkZWZpbmVkIGluIHRoZSB0ZXN0IGNhc2UuCiAgICAgICAgQFRpZHlBbGw6Ok9UT0JPOjpGaWxlTGlzdCA9IEB7ICRUZXN0LT57RmlsZUxpc3R9IC8vIFtdIH07CgogICAgICAgIG15ICRTb3VyY2UgPSAkVGVzdC0+e1NvdXJjZX07CgogICAgICAgIGV2YWwgewogICAgICAgICAgICBmb3IgbXkgJFBsdWdpbk1vZHVsZSAoIEB7ICRUZXN0LT57UGx1Z2luc30gfSApIHsKICAgICAgICAgICAgICAgIG15ICRGaWxlTmFtZSA9ICIkUGx1Z2luTW9kdWxlLnBtIiA9fiBzezo6fXsvfXNteGdyOwoKICAgICAgICAgICAgICAgIHJlcXVpcmUgJEZpbGVOYW1lOwoKICAgICAgICAgICAgICAgIG15ICRQbHVnaW4gPSAkUGx1Z2luTW9kdWxlLT5uZXcoCiAgICAgICAgICAgICAgICAgICAgbmFtZSAgICA9PiAkUGx1Z2luTW9kdWxlLAogICAgICAgICAgICAgICAgICAgIHRpZHlhbGwgPT4gJFRpZHlBbGwsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGZvciBteSAkTWV0aG9kIChxdyhwcmVwcm9jZXNzX3NvdXJjZSBwcm9jZXNzX3NvdXJjZV9vcl9maWxlIHBvc3Rwcm9jZXNzX3NvdXJjZSkpIHsKICAgICAgICAgICAgICAgICAgICAoJFNvdXJjZSkgPSAkUGx1Z2luLT4kTWV0aG9kKCAkU291cmNlLCAkVGVzdC0+e0ZpbGVuYW1lfSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgbXkgJEV4Y2VwdGlvbiA9ICRAOwoKICAgICAgICBzdWJ0ZXN0ICRUZXN0LT57TmFtZX0gPT4gc3ViIHsKICAgICAgICAgICAgbXkgJFRvZG87CiAgICAgICAgICAgIGlmICggJFRlc3QtPntUb2RvfSApIHsKICAgICAgICAgICAgICAgICRUb2RvID0gdG9kbyAkVGVzdC0+e1RvZG99OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICRUZXN0LT57RXhjZXB0aW9ufSApIHsKICAgICAgICAgICAgICAgIG9rKCAkRXhjZXB0aW9uLCAnZm91bmQgZXhwZWN0ZWQgZXhjZXB0aW9uJyApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgb2soICEkRXhjZXB0aW9uLCAnY29uZmlybWVkIHRoYXQgdGhlcmUgaXMgbm8gZXhjZXB0aW9uJyApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJEV4Y2VwdGlvbikgewogICAgICAgICAgICAgICAgZGlhZyAiZ290IGV4Y2VwdGlvbjogJEV4Y2VwdGlvbiI7CgogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGFsc28gY2hlY2sgdGhlIG1vZGlmaWVkIHNvdXJjZSB3aGVuIHRoZXJlIHdhcyBubyBleGNlcHRpb24KICAgICAgICAgICAgaXMoCiAgICAgICAgICAgICAgICAkU291cmNlLAogICAgICAgICAgICAgICAgJFRlc3QtPntSZXN1bHR9IC8vICRUZXN0LT57U291cmNlfSwKICAgICAgICAgICAgICAgICdnb3QgdGhlIGV4cGVjdGVkIHJlc3VsdCcsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="scripts/test/OTOBOCodePolicy.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgRmlsZTo6QmFzZW5hbWU7CnVzZSBUZXN0Mjo6VjA7CgojIFdvcmsgYXJvdW5kIGEgUGVybCBidWcgdGhhdCBpcyB0cmlnZ2VyZWQgaW4gRGV2ZWw6OlN0YWNrVHJhY2UKIyAgIChwcm9iYWx5IGZyb20gRXhjZXB0aW9uOjpDbGFzcyBhbmQgdGhpcyBmcm9tIFBlcmw6OkNyaXRpYykuCiMKIyAgIFNlZSBodHRwczovL2dpdGh1Yi5jb20vaG91c2VhYnNvbHV0ZS9EZXZlbC1TdGFja1RyYWNlL2lzc3Vlcy8xMSBhbmQKIyAgIGh0dHA6Ly9ydC5wZXJsLm9yZy9ydDMvUHVibGljL0J1Zy9EaXNwbGF5Lmh0bWw/aWQ9NzgxODYKbm8gd2FybmluZ3MgJ3JlZGVmaW5lJzsgICAgICAgICAgICAgICAgICAgICAjIyBubyBjcml0aWMgcXcoVGVzdGluZ0FuZERlYnVnZ2luZzo6UHJvaGliaXROb1dhcm5pbmdzKQp1c2UgRGV2ZWw6OlN0YWNrVHJhY2UgKCk7CmxvY2FsICpEZXZlbDo6U3RhY2tUcmFjZTo6bmV3ID0gc3ViIHsgfTsgICAgIyBuby1vcAp1c2Ugd2FybmluZ3MgJ3JlZGVmaW5lJzsKCnVzZSBDd2QgICAgICAgIHF3KGFic19wYXRoKTsKdXNlIEZpbGU6OlNwZWMgcXcoKTsKdXNlIFRpZHlBbGw6Ok9UT0JPOwoKIyBTdXBwcmVzcyBjb2xvcmVkIG91dHB1dCB0byBub3QgY2x1dHRlciBsb2cgZmlsZXMuCmxvY2FsICRFTlZ7T1RPQk9DT0RFUE9MSUNZX05PQ09MT1J9ID0gMTsKCm15ICRUaWR5QWxsID0gVGlkeUFsbDo6T1RPQk8tPm5ld19mcm9tX2NvbmZfZmlsZSgKICAgICJLZXJuZWwvVGlkeUFsbC90aWR5YWxscmMiLAogICAgY2hlY2tfb25seSA9PiAxLAogICAgbW9kZSAgICAgICA9PiAndGVzdHMnLAogICAgcm9vdF9kaXIgICA9PiAnLicsCiAgICBkYXRhX2RpciAgID0+IEZpbGU6OlNwZWMtPnRtcGRpcigpLAogICAgcXVpZXQgICAgICA9PiAxLAopOwokVGlkeUFsbC0+RGV0ZXJtaW5lRnJhbWV3b3JrVmVyc2lvbkZyb21EaXJlY3RvcnkoKTsKJFRpZHlBbGwtPkdldEZpbGVMaXN0RnJvbURpcmVjdG9yeSgpOwoKIwojIE5vdyBwZXJmb3JtIHRoZSByZWFsIGZpbGUgdmFsaWRhdGlvbi4KIwoKIyBEb24ndCB1c2UgVGlkeUFsbDo6cHJvY2Vzc19hbGwoKSBvciBUaWR5QWxsOjpmaW5kX21hdGNoZWRfZmlsZXMoKSBhcyBpdCBpcyB0b28gc2xvdyBvbiBsYXJnZSBjb2RlIGJhc2VzLgpteSBARmlsZXMgPSBtYXAKICAgIHsgYWJzX3BhdGgoJF8pIH0KICAgICRUaWR5QWxsLT5GaWx0ZXJNYXRjaGVkRmlsZXMoIEZpbGVzID0+IFxAVGlkeUFsbDo6T1RPQk86OkZpbGVMaXN0ICk7CgpGSUxFOgpmb3IgbXkgJEZpbGUgKEBGaWxlcykgewoKICAgICMgSWdub3JlIE9yYWNsZSBsb2cgZmlsZXMuCiAgICBuZXh0IEZJTEUgaWYgJEZpbGUgPX4gbXtvcmFkaWFnfTsKCiAgICBteSAkUmVzdWx0ID0gJFRpZHlBbGwtPnByb2Nlc3NfZmlsZSgkRmlsZSk7CgogICAgbmV4dCBGSUxFIGlmICRSZXN1bHQtPnN0YXRlKCkgZXEgJ25vX21hdGNoJzsgICAgIyBubyBwbHVnaW5zIGFwcGx5LCBpZ25vcmUgZmlsZQoKICAgIGlzKAogICAgICAgICRSZXN1bHQtPnN0YXRlLAogICAgICAgICdjaGVja2VkJywKICAgICAgICAiJEZpbGUgY2hlY2sgcmVzdWx0cyAiIC4gKCAkUmVzdWx0LT5lcnJvcigpIHx8ICcnICksCiAgICApOwp9Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/JavaScript/DebugCode.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKdXNlIFRlc3QyOjpWMDsKCiMgT1RPQk8gbW9kdWxlcwp1c2Ugc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczsKCm15IEBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0RlYnVnQ29kZSAtIGNvbnNvbGUgbG9nZ2luZyAodmFsaWQpJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ1Rlc3QuanMnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6SmF2YVNjcmlwdDo6RGVidWdDb2RlKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc3LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAp0aGlzLiRsb2cuZGVidWcoJ3Zhck5hbWUnLCB2YXJOYW1lKTsKRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnRGVidWdDb2RlIC0gY29uc29sZSBsb2dnaW5nIChpbnZhbGlkKScsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZXN0LmpzJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkphdmFTY3JpcHQ6OkRlYnVnQ29kZSldLAogICAgICAgIEZyYW1ld29yayA9PiAnOC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKLy8gVE9ETzogUmVtb3ZlIHRoZSBjb2RlIGJlbG93Lgp0aGlzLiRuZXh0VGljaygoKSA9PiB7CiAgICBjb25zb2xlLmxvZygndmFyTmFtZScsIHZhck5hbWUpOwp9KTsKRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnRGVidWdDb2RlIC0gc2tpcHBlZCB0ZXN0IChpbnZhbGlkKScsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZXN0LmpzJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkphdmFTY3JpcHQ6OkRlYnVnQ29kZSldLAogICAgICAgIEZyYW1ld29yayA9PiAnOC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKICAgIC8vIFRPRE86IFNraXAgdGhpcyB0ZXN0IGZvciBub3cuCiAgICB4aXQoJ3N1cHBvcnRzIGhpZGluZyBvZiB0aGUgZGVzY3JpcHRpb24gbmV4dCB0byB0aGUgbGFiZWwnLCAoKSA9PiB7CiAgICAgICAgZXhwZWN0LmFzc2VydGlvbnMoMik7CgogICAgICAgIHdyYXBwZXIuc2V0UHJvcHMoewogICAgICAgICAgICBoaWRlRGVzY3JpcHRpb246IHRydWUsCiAgICAgICAgfSk7CgogICAgICAgIHdyYXBwZXIudm0uJG5leHRUaWNrKCgpID0+IHsKICAgICAgICAgICAgZXhwZWN0KHdyYXBwZXIuY29udGFpbnMoJ2xhYmVsIGEuZmxvYXQtcmlnaHQgaS5Db21tb25JY29uX19Cb2xkLS1JbmZvcm1hdGlvbkNpcmNsZScpKS50b0JlKHRydWUpOwogICAgICAgICAgICBleHBlY3Qod3JhcHBlci5jb250YWlucygnc21hbGwuc3Itb25seScpKS50b0JlKHRydWUpOwogICAgICAgIH0pOwogICAgfSk7CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0RlYnVnQ29kZSAtIGZ1bmN0aW9uIHNpbWlsYXIgaW4gbmFtZSB0byBza2lwcGVkIHRlc3QgKHZhbGlkKScsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZXN0LmpzJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkphdmFTY3JpcHQ6OkRlYnVnQ29kZSldLAogICAgICAgIEZyYW1ld29yayA9PiAnOC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKZnVuY3Rpb24gZXhpdCAoKSB7CiAgICAvLyBEbyBzb21ldGhpbmcuCn0KZXhpdCgpOwpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgIH0sCik7CgpzY3JpcHRzOjp0ZXN0OjpPVE9CT0NvZGVQb2xpY3lQbHVnaW5zOjpSdW4oIFRlc3RzID0+IFxAVGVzdHMgKTsKCmRvbmVfdGVzdGluZzsK</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/JavaScript/ESLint.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIHNjcmlwdHM6OnRlc3Q6Ok9UT0JPQ29kZVBvbGljeVBsdWdpbnM7CgpteSBAVGVzdHMgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdFU0xpbnQgKHZhbGlkKScsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZXN0LmpzJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkphdmFTY3JpcHQ6OkVTTGludCldLAogICAgICAgIEZyYW1ld29yayA9PiAnMTEuMCcsCiAgICAgICAgVG9kbyAgICAgID0+ICdFU0xpbnQgaXMgbm90IGEgcmVxdWlyZW1lbnQnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAoidXNlIHN0cmljdDsiCkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0VTTGludCAoc3ludGF4IGVycm9yKScsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZXN0LmpzJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OkphdmFTY3JpcHQ6OkVTTGludCldLAogICAgICAgIEZyYW1ld29yayA9PiAnMTEuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCnNvbWUgc3ludGF4IGVycm9yCkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKCik7CgpzY3JpcHRzOjp0ZXN0OjpPVE9CT0NvZGVQb2xpY3lQbHVnaW5zOjpSdW4oIFRlc3RzID0+IFxAVGVzdHMgKTsKCmRvbmVfdGVzdGluZzsK</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/Migrations/OTOBO7/DeprecatedSettings.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIHNjcmlwdHM6OnRlc3Q6Ok9UT0JPQ29kZVBvbGljeVBsdWdpbnM7Cgpza2lwX2FsbCgnVGlkeUFsbCBwbHVnaW4gZG9lcyBub3QgZXhpc3QgaW4gQ29kZVBvbGljeScpOwoKbXkgJFNldHRpbmdUZW1wbGF0ZSA9IDw8J0VPRic7CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGVzdCBjb25maWcgc2V0dGluZyBkZWZpbml0aW9uIGZvciBwdXJwb3NlcyBvZiB0aGUgdW5pdCB0ZXN0aW5nLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6VGVzdDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPlZhbHVlPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KRU9GCgpteSBAVGVzdHMgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdPYnNvbGV0ZSBmcm9udGVuZCBzZXR0aW5nIC0gVmFsaWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvVGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6TWlncmF0aW9uczo6T1RPQk83OjpEZXByZWNhdGVkU2V0dGluZ3MpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8IkVPRiIsCjxvdG9ib19jb25maWcgdmVyc2lvbj0iMi4wIiBpbml0PSJGcmFtZXdvcmsiPgogICAgPFNldHRpbmcgTmFtZT0iUHVibGljRnJvbnRlbmQ6Ok1vZHVsZSMjI1B1YmxpY0ZBUUV4cGxvcmVyIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgokU2V0dGluZ1RlbXBsYXRlCiAgICA8L1NldHRpbmc+Cjwvb3RvYm9fY29uZmlnPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdPYnNvbGV0ZSBmcm9udGVuZCBzZXR0aW5nIC0gVmFsaWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvVGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6TWlncmF0aW9uczo6T1RPQk83OjpEZXByZWNhdGVkU2V0dGluZ3MpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzcuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8IkVPRiIsCjxvdG9ib19jb25maWcgdmVyc2lvbj0iMi4wIiBpbml0PSJGcmFtZXdvcmsiPgogICAgPFNldHRpbmcgTmFtZT0iUHVibGljRnJvbnRlbmQ6Ok1vZHVsZSMjI1B1YmxpY0ZBUUV4cGxvcmVyIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgokU2V0dGluZ1RlbXBsYXRlCiAgICA8L1NldHRpbmc+Cjwvb3RvYm9fY29uZmlnPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdPYnNvbGV0ZSBsb2FkZXIgc2V0dGluZyAtIFZhbGlkJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ0tlcm5lbC9Db25maWcvRmlsZXMvWE1ML1Rlc3QueG1sJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86Ok1pZ3JhdGlvbnM6Ok9UT0JPNzo6RGVwcmVjYXRlZFNldHRpbmdzKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCJFT0YiLAo8b3RvYm9fY29uZmlnIHZlcnNpb249IjIuMCIgaW5pdD0iRnJhbWV3b3JrIj4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6Q3VzdG9tZXI6OlNlbGVjdGVkU2tpbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KJFNldHRpbmdUZW1wbGF0ZQogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnT2Jzb2xldGUgbG9hZGVyIHNldHRpbmcgLSBWYWxpZCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICdLZXJuZWwvQ29uZmlnL0ZpbGVzL1hNTC9UZXN0LnhtbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpNaWdyYXRpb25zOjpPVE9CTzc6OkRlcHJlY2F0ZWRTZXR0aW5ncyldLAogICAgICAgIEZyYW1ld29yayA9PiAnNy4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwiRU9GIiwKPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkZyYW1ld29yayI+CiAgICA8U2V0dGluZyBOYW1lPSJMb2FkZXI6OkN1c3RvbWVyOjpTZWxlY3RlZFNraW4iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiRTZXR0aW5nVGVtcGxhdGUKICAgIDwvU2V0dGluZz4KPC9vdG9ib19jb25maWc+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ09ic29sZXRlIGxvYWRlciBtb2R1bGUgc2V0dGluZyAtIFZhbGlkJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ0tlcm5lbC9Db25maWcvRmlsZXMvWE1ML1Rlc3QueG1sJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86Ok1pZ3JhdGlvbnM6Ok9UT0JPNzo6RGVwcmVjYXRlZFNldHRpbmdzKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCJFT0YiLAo8b3RvYm9fY29uZmlnIHZlcnNpb249IjIuMCIgaW5pdD0iRnJhbWV3b3JrIj4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpDdXN0b21lclRpY2tldE1lc3NhZ2UjIyMwMDItVGlja2V0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgokU2V0dGluZ1RlbXBsYXRlCiAgICA8L1NldHRpbmc+Cjwvb3RvYm9fY29uZmlnPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdPYnNvbGV0ZSBsb2FkZXIgbW9kdWxlIHNldHRpbmcgLSBWYWxpZCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICdLZXJuZWwvQ29uZmlnL0ZpbGVzL1hNTC9UZXN0LnhtbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpNaWdyYXRpb25zOjpPVE9CTzc6OkRlcHJlY2F0ZWRTZXR0aW5ncyldLAogICAgICAgIEZyYW1ld29yayA9PiAnNy4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwiRU9GIiwKPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkZyYW1ld29yayI+CiAgICA8U2V0dGluZyBOYW1lPSJMb2FkZXI6Ok1vZHVsZTo6Q3VzdG9tZXJUaWNrZXRNZXNzYWdlIyMjMDAyLVRpY2tldCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KJFNldHRpbmdUZW1wbGF0ZQogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnT2Jzb2xldGUgc2VhcmNoIHJvdXRlciBzZXR0aW5nIC0gVmFsaWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvVGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6TWlncmF0aW9uczo6T1RPQk83OjpEZXByZWNhdGVkU2V0dGluZ3MpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8IkVPRiIsCjxvdG9ib19jb25maWcgdmVyc2lvbj0iMi4wIiBpbml0PSJGcmFtZXdvcmsiPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6OlNlYXJjaDo6SmF2YVNjcmlwdCMjI0FnZW50Q3VzdG9tZXJJbmZvcm1hdGlvbkNlbnRlciIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KJFNldHRpbmdUZW1wbGF0ZQogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnT2Jzb2xldGUgc2VhcmNoIHJvdXRlciBzZXR0aW5nIC0gVmFsaWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvVGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6TWlncmF0aW9uczo6T1RPQk83OjpEZXByZWNhdGVkU2V0dGluZ3MpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzcuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8IkVPRiIsCjxvdG9ib19jb25maWcgdmVyc2lvbj0iMi4wIiBpbml0PSJGcmFtZXdvcmsiPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6OlNlYXJjaDo6SmF2YVNjcmlwdCMjI0FnZW50Q3VzdG9tZXJJbmZvcm1hdGlvbkNlbnRlciIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KJFNldHRpbmdUZW1wbGF0ZQogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAopOwoKc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczo6UnVuKCBUZXN0cyA9PiBcQFRlc3RzICk7Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/Migrations/OTOBO8/UselessComments.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIHNjcmlwdHM6OnRlc3Q6Ok9UT0JPQ29kZVBvbGljeVBsdWdpbnM7CiMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86Ok1pZ3JhdGlvbnM6Ok9UT0JPODo6VXNlbGVzc0NvbW1lbnRzKQoKc2tpcF9hbGwoJ1RpZHlBbGwgcGx1Z2luIGRvZXMgbm90IGV4aXN0IGluIENvZGVQb2xpY3knKTsKCm15IEBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ05vcm1hbCBjb21tZW50cycsCiAgICAgICAgRmlsZW5hbWUgID0+ICd0ZXN0LnBsJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86Ok1pZ3JhdGlvbnM6Ok9UT0JPODo6VXNlbGVzc0NvbW1lbnRzKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc4LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAojIFNvbWUgdXNlZnVsIGNvbW1lbnQuCgojIEEgbXVsdGlsaW5lIGNvbW1lbnQgZXhwbGFpbmluZwojICAgc29tZSBzdHVmZiBpbiBhIGRldGFpbGVkIHdheS4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnU3R1cGlkIGNvbW1lbnRzJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ3Rlc3QucGwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6TWlncmF0aW9uczo6T1RPQk84OjpVc2VsZXNzQ29tbWVudHMpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzguMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCnNvbWUgY29kZSBoZXJlCgojIGdldCBuZWVkZWQgb2JqZWN0cwojIEdldCBuZWVkZWQgb2JqZWN0cy4KIyBnZXQgbmVlZGVkIHZhcmlhYmxlcwojIEdldCBuZWVkZWQgdmFyaWFibGVzCiMgZ2V0IHNlbGVuaXVtIG9iamVjdAojIEdldCBDb25maWcgb2JqZWN0LgojIGdldCBzY3JpcHQgYWxpYXMKIyBnZXQgdmFsaWQgbGlzdAojIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKIyBjaGVjayBuZWVkZWQgc3R1ZmYKIyBjaGVjayBuZWVkZWQgZGF0YQojIGNoZWNrIG5lZWRlZCBwYXJhbXMuCiMgY2hlY2sgbmVlZGVkIG9iamVjdHMuCm1vcmUgY29kZSBoZXJlCkVPRgogICAgICAgIFJlc3VsdCA9PiA8PCdFT0YnLApzb21lIGNvZGUgaGVyZQoKbW9yZSBjb2RlIGhlcmUKRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAopOwoKc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczo6UnVuKCBUZXN0cyA9PiBcQFRlc3RzICk7Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/Perl/CacheNew.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKdXNlIFRlc3QyOjpWMDsKCiMgT1RPQk8gbW9kdWxlcwp1c2Ugc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczsKCm15IEBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0NhY2hlTmV3LCBmb3JiaWRkZW4nLAogICAgICAgIEZpbGVuYW1lICA9PiAndGVzdC5wbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpDYWNoZU5ldyldLAogICAgICAgIEZyYW1ld29yayA9PiAnNC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKS2VybmVsOjpTeXN0ZW06OkNhY2hlLT5uZXcoJXskU2VsZn0pOwpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdDYWNoZU5ldywgb2snLAogICAgICAgIEZpbGVuYW1lICA9PiAndGVzdC5wbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpDYWNoZU5ldyldLAogICAgICAgIEZyYW1ld29yayA9PiAnNC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKKTsKCnNjcmlwdHM6OnRlc3Q6Ok9UT0JPQ29kZVBvbGljeVBsdWdpbnM6OlJ1biggVGVzdHMgPT4gXEBUZXN0cyApOwoKZG9uZV90ZXN0aW5nOwo=</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/Perl/NoExitInConsoleCommands.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKdXNlIFRlc3QyOjpWMDsKCiMgT1RPQk8gbW9kdWxlcwp1c2Ugc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczsKCm15IEBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ2V4aXQsIGZvcmJpZGRlbicsCiAgICAgICAgRmlsZW5hbWUgID0+ICdLZXJuZWwvU3lzdGVtL0NvbnNvbGUvQ29tbWFuZC9UZXN0LnBtJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6Ok5vRXhpdEluQ29uc29sZUNvbW1hbmRzKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc1LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLApleGl0IDE7CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ2V4aXQsIGZvcmJpZGRlbicsCiAgICAgICAgRmlsZW5hbWUgID0+ICdLZXJuZWwvU3lzdGVtL0NvbnNvbGUvQ29tbWFuZC9UZXN0LnBtJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6Ok5vRXhpdEluQ29uc29sZUNvbW1hbmRzKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc1LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAogICAgaWYgKDEpIHsgZXhpdDsgfTsKRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnJFNlbGYtPkV4aXRDb2RlT2soKScsCiAgICAgICAgRmlsZW5hbWUgID0+ICdLZXJuZWwvU3lzdGVtL0NvbnNvbGUvQ29tbWFuZC9UZXN0LnBtJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6Ok5vRXhpdEluQ29uc29sZUNvbW1hbmRzKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc1LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAogICAgcmV0dXJuICRTZWxmLT5FeGl0Q29kZU9rKCk7CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKKTsKCnNjcmlwdHM6OnRlc3Q6Ok9UT0JPQ29kZVBvbGljeVBsdWdpbnM6OlJ1biggVGVzdHMgPT4gXEBUZXN0cyApOwoKZG9uZV90ZXN0aW5nOwo=</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/Perl/ObjectDependencies.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB2NS4yNDsKdXNlIHV0Zjg7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKdXNlIFRlc3QyOjpWMDsKCiMgT1RPQk8gbW9kdWxlcwp1c2Ugc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczsKCm91ciAkU2VsZjsKCm15IEBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ09iamVjdERlcGVuZGVuY2llcywgbm8gT00gdXNlZC4nLAogICAgICAgIEZpbGVuYW1lICA9PiAnVGVzdC5wbScsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpPYmplY3REZXBlbmRlbmNpZXMpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzQuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCiMhL3Vzci9iaW4vYmFzaAp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cm15ICRGSDsKRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnT2JqZWN0RGVwZW5kZW5jaWVzLCB1bmRlY2xhcmVkIGRlcGVuZGVuY3kgdXNlZCAoZm9ybWVyIGRlZmF1bHQgZGVwZW5kZW5jeSknLAogICAgICAgIEZpbGVuYW1lICA9PiAnVGVzdC5wbScsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpPYmplY3REZXBlbmRlbmNpZXMpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzQuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCiRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpFbmNvZGUnKTsKRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnT2JqZWN0RGVwZW5kZW5jaWVzLCBkZWZhdWx0IGRlcGVuZGVuY2llcyB1c2VkIHdpdGggaW52YWxpZCBzaG9ydCBmb3JtIGluIEdldCgpJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ1Rlc3QucG0nLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6T2JqZWN0RGVwZW5kZW5jaWVzKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc0LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLApvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgnS2VybmVsOjpTeXN0ZW06OkVuY29kZScpOwokS2VybmVsOjpPTS0+R2V0KCdFbmNvZGVPYmplY3QnKTsKRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnT2JqZWN0RGVwZW5kZW5jaWVzLCB1bmRlY2xhcmVkIGRlcGVuZGVuY3kgdXNlZCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZXN0LnBtJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6Ok9iamVjdERlcGVuZGVuY2llcyldLAogICAgICAgIEZyYW1ld29yayA9PiAnNC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdPYmplY3REZXBlbmRlbmNpZXMsIGRlcGVuZGVuY3kgZGVjbGFyZWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnVGVzdC5wbScsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpPYmplY3REZXBlbmRlbmNpZXMpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzQuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgPT4gJ09iamVjdERlcGVuZGVuY2llcywgZGVwZW5kZW5jeSBkZWNsYXJlZCBpbiBUZXN0T2JqZWN0RGVwZW5kZW5jaWVzCicsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZXN0LnBtJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6Ok9iamVjdERlcGVuZGVuY2llcyldLAogICAgICAgIEZyYW1ld29yayA9PiAnNC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKb3VyIEBTb2Z0T2JqZWN0RGVwZW5kZW5jaWVzID0gKCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnT2JqZWN0RGVwZW5kZW5jaWVzLCBkZXBlbmRlbmN5IGRlY2xhcmVkLCBpbnZhbGlkIHNob3J0IGZvcm0nLAogICAgICAgIEZpbGVuYW1lICA9PiAnVGVzdC5wbScsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpPYmplY3REZXBlbmRlbmNpZXMpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzQuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CmZvciBteSAkTmVlZGVkIChxdyhUaWNrZXRPYmplY3QpKSB7CiAgICAkU2VsZi0+eyROZWVkZWR9ID0gJEtlcm5lbDo6T00tPkdldCgkTmVlZGVkKTsKfQpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdPYmplY3REZXBlbmRlbmNpZXMsIHVuZGVjbGFyZWQgZGVwZW5kZW5jeSBpbiBsb29wJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ1Rlc3QucG0nLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6T2JqZWN0RGVwZW5kZW5jaWVzKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc0LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLApmb3IgbXkgJE5lZWRlZCAocXcoS2VybmVsOjpTeXN0ZW06OlRpY2tldCkpIHsKICAgICRTZWxmLT57JE5lZWRlZH0gPSAkS2VybmVsOjpPTS0+R2V0KCROZWVkZWQpOwp9CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ09iamVjdERlcGVuZGVuY2llcywgR2V0IGNhbGxlZCBpbiBmb3IgbG9vcCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZXN0LnBtJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6Ok9iamVjdERlcGVuZGVuY2llcyldLAogICAgICAgIEZyYW1ld29yayA9PiAnNC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKZm9yIG15ICROZWVkZWQgKHF3KEtlcm5lbDo6U3lzdGVtOjpDdXN0b21PYmplY3QpKSB7CiAgICAkU2VsZi0+eyROZWVkZWR9ID0gJEtlcm5lbDo6T00tPkdldCgkTmVlZGVkKTsKfQpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdPYmplY3REZXBlbmRlbmNpZXMsIGNvbXBsZXggY29kZSwgdW5kZWNsYXJlZCBkZXBlbmRlbmN5JywKICAgICAgICBGaWxlbmFtZSAgPT4gJ1Rlc3QucG0nLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6T2JqZWN0RGVwZW5kZW5jaWVzKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc0LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAokU2VsZi0+e0NvbmZpZ09iamVjdH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q29uZmlnJyk7CiRLZXJuZWw6Ok9NLT5PYmplY3RQYXJhbUFkZCgKICAgIExvZ09iamVjdCA9PiB7CiAgICAgICAgTG9nUHJlZml4ID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdDR0lMb2dQcmVmaXgnKSwKICAgIH0sCiAgICBQYXJhbU9iamVjdCA9PiB7CiAgICAgICAgV2ViUmVxdWVzdCA9PiAkUGFyYW17V2ViUmVxdWVzdH0gfHwgMCwKICAgIH0sCik7Cgpmb3IgbXkgJE9iamVjdCAoCiAgICBxdyggTG9nT2JqZWN0IEVuY29kZU9iamVjdCBTZXNzaW9uT2JqZWN0IE1haW5PYmplY3QgVGltZU9iamVjdCBQYXJhbU9iamVjdCBVc2VyT2JqZWN0IEdyb3VwT2JqZWN0ICkKICAgICkKewogICAgJFNlbGYtPnskT2JqZWN0fSA9ICRLZXJuZWw6Ok9NLT5HZXQoJE9iamVjdCk7Cn0KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnT2JqZWN0RGVwZW5kZW5jaWVzLCBjb21wbGV4IGNvZGUsIHVuZGVjbGFyZWQgZGVwZW5kZW5jeScsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZXN0LnBtJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6Ok9iamVjdERlcGVuZGVuY2llcyldLAogICAgICAgIEZyYW1ld29yayA9PiAnNC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEQicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkVuY29kZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06Ok1haW4nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbicsCiAgICAnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcsCik7CgokU2VsZi0+e0NvbmZpZ09iamVjdH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICBMb2dPYmplY3QgPT4gewogICAgICAgIExvZ1ByZWZpeCA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQ0dJTG9nUHJlZml4JyksCiAgICB9LAogICAgUGFyYW1PYmplY3QgPT4gewogICAgICAgIFdlYlJlcXVlc3QgPT4gJFBhcmFte1dlYlJlcXVlc3R9IHx8IDAsCiAgICB9LAopOwoKZm9yIG15ICRPYmplY3QgKAogICAgcXcoIEtlcm5lbDo6U3lzdGVtOjpVc2VyIEtlcm5lbDo6U3lzdGVtOjpHcm91cCApCiAgICApCnsKICAgICRTZWxmLT57JE9iamVjdH0gPSAkS2VybmVsOjpPTS0+R2V0KCRPYmplY3QpOwp9CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ09iamVjdERlcGVuZGVuY2llcywgb2JqZWN0IG1hbmFnZXIgZGlzYWJsZWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnVGVzdC5wbScsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpPYmplY3REZXBlbmRlbmNpZXMpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzQuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdPYmplY3REZXBlbmRlbmNpZXMsIGRlcHJlY2F0ZWQgT2JqZWN0TWFuYWdlckF3YXJlIGZsYWcnLAogICAgICAgIEZpbGVuYW1lICA9PiAnVGVzdC5wbScsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpPYmplY3REZXBlbmRlbmNpZXMpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzQuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7Cm91ciAkT2JqZWN0TWFuYWdlckF3YXJlID0gMTsKJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdPYmplY3REZXBlbmRlbmNpZXMsIE1vb3NlOjpSb2xlJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ1Rlc3QucG0nLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6T2JqZWN0RGVwZW5kZW5jaWVzKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc0LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAp1c2UgTW9vc2U6OlJvbGU7CiRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAopOwoKc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczo6UnVuKCBUZXN0cyA9PiBcQFRlc3RzICk7Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/Perl/Pod/FunctionPod.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKdXNlIFRlc3QyOjpWMDsKCiMgT1RPQk8gbW9kdWxlcwp1c2Ugc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczsKCm15IEBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ3ZhbGlkIGZ1bmN0aW9uIGRvY3VtZW50YXRpb24nLAogICAgICAgIEZpbGVuYW1lICA9PiAndGVzdC5wbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpQb2Q6OkZ1bmN0aW9uUG9kKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAo9aGVhZDIgR2V0KCkKClJldHJpZXZlcyBhIHNpbmdsZXRvbiBvYmplY3QsIGFuZCBpZiBpdCBub3QgeWV0IGV4aXN0cywgaW1wbGljaXRseSBjcmVhdGVzIG9uZSBmb3IgeW91LgoKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgT24gdGhlIHNlY29uZCBjYWxsLCB0aGlzIHJldHVybnMgdGhlIHNhbWUgQ29uZmlnT2JqZWN0IGFzIGFib3ZlLgogICAgbXkgJENvbmZpZ09iamVjdDIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKPWN1dAoKc3ViIEdldCB7CiAgICAuLi4KfQpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdoZWFkaW5nIHRoYXQgaXMgbm90IHJlbGF0ZWQgdG8gYSBmdW5jdGlvbicsCiAgICAgICAgRmlsZW5hbWUgID0+ICd0ZXN0LnBsJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBvZDo6RnVuY3Rpb25Qb2QpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCj1oZWFkMiBIb3cgZG9lcyBzaW5nbGV0b24gbWFuYWdlbWVudCB3b3JrPwoKSXQgY3JlYXRlcyBvYmplY3RzIGFzIGxhdGUgYXMgcG9zc2libGUgYW5kIGtlZXBzIHJlZmVyZW5jZXMgdG8gdGhlbS4gVXBvbiBkZXN0cnVjdGlvbiB0aGUgb2JqZWN0cwphcmUgZGVzdHJveWVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLCBiYXNlZCBvbiB0aGVpciBkZXBlbmRlbmNpZXMgKHNlZSBiZWxvdykuCkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ2Z1bmN0aW9uIHdpdGhvdXQgcGFyZW50aGVzZXMnLAogICAgICAgIEZpbGVuYW1lICA9PiAndGVzdC5wbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpQb2Q6OkZ1bmN0aW9uUG9kKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAo9aGVhZDIgR2V0CgpSZXRyaWV2ZXMgYSBzaW5nbGV0b24gb2JqZWN0LCBhbmQgaWYgaXQgbm90IHlldCBleGlzdHMsIGltcGxpY2l0bHkgY3JlYXRlcyBvbmUgZm9yIHlvdS4KCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIE9uIHRoZSBzZWNvbmQgY2FsbCwgdGhpcyByZXR1cm5zIHRoZSBzYW1lIENvbmZpZ09iamVjdCBhcyBhYm92ZS4KICAgIG15ICRDb25maWdPYmplY3QyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCj1jdXQKCnN1YiBHZXQgewogICAgLi4uCn0KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnZnVuY3Rpb24gd2l0aCB3cm9uZyBuYW1lJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ3Rlc3QucGwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6UG9kOjpGdW5jdGlvblBvZCldLAogICAgICAgIEZyYW1ld29yayA9PiAnNi4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKPWhlYWQyIFdyb25nTmFtZSgpCgpSZXRyaWV2ZXMgYSBzaW5nbGV0b24gb2JqZWN0LCBhbmQgaWYgaXQgbm90IHlldCBleGlzdHMsIGltcGxpY2l0bHkgY3JlYXRlcyBvbmUgZm9yIHlvdS4KCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIE9uIHRoZSBzZWNvbmQgY2FsbCwgdGhpcyByZXR1cm5zIHRoZSBzYW1lIENvbmZpZ09iamVjdCBhcyBhYm92ZS4KICAgIG15ICRDb25maWdPYmplY3QyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCj1jdXQKCnN1YiBHZXQgewogICAgLi4uCn0KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnd3JvbmcgZnVuY3Rpb24gY2FsbCB1c2VkIGluIGV4YW1wbGUnLAogICAgICAgIEZpbGVuYW1lICA9PiAndGVzdC5wbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpQb2Q6OkZ1bmN0aW9uUG9kKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAo9aGVhZDIgR2V0KCkKClJldHJpZXZlcyBhIHNpbmdsZXRvbiBvYmplY3QsIGFuZCBpZiBpdCBub3QgeWV0IGV4aXN0cywgaW1wbGljaXRseSBjcmVhdGVzIG9uZSBmb3IgeW91LgoKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+V3JvbmdGdW5jdGlvbignS2VybmVsOjpDb25maWcnKTsKCiAgICAjIE9uIHRoZSBzZWNvbmQgY2FsbCwgdGhpcyByZXR1cm5zIHRoZSBzYW1lIENvbmZpZ09iamVjdCBhcyBhYm92ZS4KICAgIG15ICRDb25maWdPYmplY3QyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCj1jdXQKCnN1YiBHZXQgewogICAgLi4uCn0KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAndmFsaWQgY29uc3RydWN0b3Igd2l0aCBDcmVhdGUnLAogICAgICAgIEZpbGVuYW1lICA9PiAndGVzdC5wbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpQb2Q6OkZ1bmN0aW9uUG9kKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAo9aGVhZDIgbmV3KCkKCkNyZWF0ZXMgYSBEYXRlVGltZSBvYmplY3QuIERvIG5vdCB1c2UgbmV3KCkgZGlyZWN0bHksIGluc3RlYWQgdXNlIHRoZSBvYmplY3QgbWFuYWdlcjoKCgogICAgIyBDcmVhdGUgYW4gb2JqZWN0IHdpdGggY3VycmVudCBkYXRlIGFuZCB0aW1lCiAgICAjIHdpdGhpbiB0aW1lIHpvbmUgc2V0IGluIFN5c0NvbmZpZyBPVE9CT1RpbWVab25lOgogICAgbXkgJERhdGVUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJwogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgLi4uCn0KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAndmFsaWQgY29uc3RydWN0b3Igd2l0aCBHZXQnLAogICAgICAgIEZpbGVuYW1lICA9PiAndGVzdC5wbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpQb2Q6OkZ1bmN0aW9uUG9kKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAo9aGVhZDIgbmV3KCkKCkRvbid0IHVzZSB0aGUgY29uc3RydWN0b3IgZGlyZWN0bHksIHVzZSB0aGUgT2JqZWN0TWFuYWdlciBpbnN0ZWFkOgoKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIC4uLgp9CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ3ZhbGlkIGNvbnN0cnVjdG9yIHdpdGggbmV3JywKICAgICAgICBGaWxlbmFtZSAgPT4gJ3Rlc3QucGwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6UG9kOjpGdW5jdGlvblBvZCldLAogICAgICAgIEZyYW1ld29yayA9PiAnNi4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKPWhlYWQyIG5ldygpCgpGYWtlIGZvciB0ZXN0aW5nLgoKICAgIG15ICRUaWNrZXRPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6VGlja2V0LT5uZXcoKTsKCj1jdXQKCnN1YiBuZXcgewogICAgLi4uCn0KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAopOwoKc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczo6UnVuKCBUZXN0cyA9PiBcQFRlc3RzICk7Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/Perl/Tests/Helper.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpUZXN0czo6SGVscGVyKQoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIHNjcmlwdHM6OnRlc3Q6Ok9UT0JPQ29kZVBvbGljeVBsdWdpbnM7CgpteSBAVGVzdHMgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdIZWxwZXIgbm90IHVzZWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAndGVzdC50JywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlRlc3RzOjpIZWxwZXIpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzguMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCjE7CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0hlbHBlciB1c2VkJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ3Rlc3QudCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpUZXN0czo6SGVscGVyKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc4LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLApteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnSGVscGVyIGNyZWF0ZWQgYmVmb3JlIFNlbGVuaXVtIG9iamVjdCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICd0ZXN0LnQnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6VGVzdHM6OkhlbHBlcildLAogICAgICAgIEZyYW1ld29yayA9PiAnOC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgUHJvdmlkZVRlc3REb2N1bWVudFNlYXJjaEluZGljZXMgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwpteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0hlbHBlciBjcmVhdGVkIGFmdGVyIFNlbGVuaXVtIG9iamVjdCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICd0ZXN0LnQnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6VGVzdHM6OkhlbHBlcildLAogICAgICAgIEZyYW1ld29yayA9PiAnOC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKbXkgJFNlbGVuaXVtID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bScpOwokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBQcm92aWRlVGVzdERvY3VtZW50U2VhcmNoSW5kaWNlcyA9PiAxLAogICAgfSwKKTsKbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1Jlc3RvcmVEYXRhYmFzZSBpbiBhIFNlbGVuaXVtIHRlc3QnLAogICAgICAgIEZpbGVuYW1lICA9PiAndGVzdC50JywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlRlc3RzOjpIZWxwZXIpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzguMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCiRLZXJuZWw6Ok9NLT5PYmplY3RQYXJhbUFkZCgKICAgICdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicgPT4gewogICAgICAgIFJlc3RvcmVEYXRhYmFzZSA9PiAxLAogICAgfSwKKTsKbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnU2V0IFByb3ZpZGVUZXN0UEdQRW52aXJvbm1lbnQgaW4gYSBTZWxlbml1bSB0ZXN0JywKICAgICAgICBGaWxlbmFtZSAgPT4gJ3Rlc3QudCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpUZXN0czo6SGVscGVyKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc4LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBQcm92aWRlVGVzdFBHUEVudmlyb25tZW50ID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKbXkgJFBHUE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDcnlwdDo6UEdQJyk7CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ01pc3NpbmcgUHJvdmlkZVRlc3RQR1BFbnZpcm9ubWVudCBpbiBhIFNlbGVuaXVtIHRlc3QnLAogICAgICAgIFRvZG8gICAgICA9PiAnUHJvdmlkZVRlc3RQR1BFbnZpcm9ubWVudCBub3Qgc3VwcG9ydGVkIGluIE9UT0JPJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ3Rlc3QudCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpUZXN0czo6SGVscGVyKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc4LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLApteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKbXkgJFBHUE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDcnlwdDo6UEdQJyk7CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1NldCBQcm92aWRlVGVzdFNNSU1FRW52aXJvbm1lbnQgaW4gYSBTZWxlbml1bSB0ZXN0JywKICAgICAgICBGaWxlbmFtZSAgPT4gJ3Rlc3QudCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpUZXN0czo6SGVscGVyKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc4LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAokS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInID0+IHsKICAgICAgICBQcm92aWRlVGVzdFNNSU1FRW52aXJvbm1lbnQgPT4gMSwKICAgIH0sCik7Cm15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwpteSAkU01JTUVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3J5cHQ6OlNNSU1FJyk7CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ01pc3NpbmcgUHJvdmlkZVRlc3RTTUlNRUVudmlyb25tZW50IGluIGEgU2VsZW5pdW0gdGVzdCcsCiAgICAgICAgVG9kbyAgICAgID0+ICdQcm92aWRlVGVzdFBHUEVudmlyb25tZW50IG5vdCBzdXBwb3J0ZWQgaW4gT1RPQk8nLAogICAgICAgIEZpbGVuYW1lICA9PiAndGVzdC50JywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlRlc3RzOjpIZWxwZXIpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzguMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCm15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwpteSAkU01JTUVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3J5cHQ6OlNNSU1FJyk7CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKKTsKCnNjcmlwdHM6OnRlc3Q6Ok9UT0JPQ29kZVBvbGljeVBsdWdpbnM6OlJ1biggVGVzdHMgPT4gXEBUZXN0cyApOwoKZG9uZV90ZXN0aW5nOwo=</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/PerlCritic/ProhibitOpen.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIFdvcmsgYXJvdW5kIGEgUGVybCBidWcgdGhhdCBpcyB0cmlnZ2VyZWQgaW4gRGV2ZWw6OlN0YWNrVHJhY2UKIyAgIChwcm9iYWx5IGZyb20gRXhjZXB0aW9uOjpDbGFzcyBhbmQgdGhpcyBmcm9tIFBlcmw6OkNyaXRpYykuCiMKIyAgIFNlZSBodHRwczovL2dpdGh1Yi5jb20vaG91c2VhYnNvbHV0ZS9EZXZlbC1TdGFja1RyYWNlL2lzc3Vlcy8xMSBhbmQKIyAgIGh0dHA6Ly9ydC5wZXJsLm9yZy9ydDMvUHVibGljL0J1Zy9EaXNwbGF5Lmh0bWw/aWQ9NzgxODYKbm8gd2FybmluZ3MgJ3JlZGVmaW5lJzsgICAgICAgICAgICAgICAgICAgICAjIyBubyBjcml0aWMgcXcoVGVzdGluZ0FuZERlYnVnZ2luZzo6UHJvaGliaXROb1dhcm5pbmdzKQp1c2UgRGV2ZWw6OlN0YWNrVHJhY2UgKCk7CmxvY2FsICpEZXZlbDo6U3RhY2tUcmFjZTo6bmV3ID0gc3ViIHsgfTsgICAgIyBuby1vcAp1c2Ugd2FybmluZ3MgJ3JlZGVmaW5lJzsKCiMgY29yZSBtb2R1bGVzCgojIENQQU4gbW9kdWxlcwp1c2UgVGVzdDI6OlYwOwoKIyBPVE9CTyBtb2R1bGVzCnVzZSBzY3JpcHRzOjp0ZXN0OjpPVE9CT0NvZGVQb2xpY3lQbHVnaW5zOwoKbXkgQFRlc3RzID0gKAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnUGVybENyaXRpYyBQcm9oaWJpdE9wZW4gcmVndWxhciBmaWxlLCBvbGQtc3R5bGUgcmVhZCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICd0ZXN0LnBsJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBlcmxDcml0aWMpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzMuMycsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCiMhL3Vzci9iaW4vYmFzaAp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cm15ICRGSDsKb3BlbigkRkgsICc8ZmlsZW5hbWUudHh0Jyk7CmNsb3NlICRGSDsKRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnUGVybENyaXRpYyBQcm9oaWJpdE9wZW4gcmVndWxhciBmaWxlLCByZWFkJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ3Rlc3QucGwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6UGVybENyaXRpYyldLAogICAgICAgIEZyYW1ld29yayA9PiAnMy4zJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKIyEvdXNyL2Jpbi9iYXNoCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKbXkgJEZIOwpvcGVuKCRGSCwgJzwnLCAnZmlsZW5hbWUudHh0Jyk7CmNsb3NlICRGSDsKRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnUGVybENyaXRpYyBQcm9oaWJpdE9wZW4gcmVndWxhciBmaWxlLCByZWFkLCBubyBwYXJlbnRoZXNlcywgYmFyZXdvcmQgZmlsZWhhbmRsZScsCiAgICAgICAgRmlsZW5hbWUgID0+ICd0ZXN0LnBsJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBlcmxDcml0aWMpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzMuMycsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCiMhL3Vzci9iaW4vYmFzaAp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cm9wZW4gRkgsICc8JywgJ2ZpbGVuYW1lLnR4dCc7CmNsb3NlICRGSDsKRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnUGVybENyaXRpYyBQcm9oaWJpdE9wZW4gcmVndWxhciBmaWxlLCB3cml0ZScsCiAgICAgICAgRmlsZW5hbWUgID0+ICd0ZXN0LnBsJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBlcmxDcml0aWMpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzMuMycsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCiMhL3Vzci9iaW4vYmFzaAp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cm15ICRGSDsKb3BlbigkRkgsICc+JywgJ2ZpbGVuYW1lLnR4dCcpOwpjbG9zZSAkRkg7CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1BlcmxDcml0aWMgUHJvaGliaXRPcGVuIHJlZ3VsYXIgZmlsZSwgd3JpdGUsIG5vIHBhcmVudGhlc2VzJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ3Rlc3QucGwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6UGVybENyaXRpYyldLAogICAgICAgIEZyYW1ld29yayA9PiAnMy4zJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKIyEvdXNyL2Jpbi9iYXNoCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKbXkgJEZIOwpvcGVuICRGSCwgJz4nLCAnZmlsZW5hbWUudHh0JzsKY2xvc2UgJEZIOwpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdQZXJsQ3JpdGljIFByb2hpYml0T3BlbiByZWd1bGFyIGZpbGUsIGJpZGlyZWN0aW9uYWwnLAogICAgICAgIFRvZG8gICAgICA9PiAnaXQgaXMgbm90IG9idmlvdXMgd2hldGhlciBiaWRpcmVjdGlvbmFsIG9wZW4gc2hvdWxkIGJlIGFsbG93ZWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAndGVzdC5wbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpQZXJsQ3JpdGljKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICczLjMnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAojIS91c3IvYmluL2Jhc2gKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwpteSAkRkg7Cm9wZW4oJEZILCAnKz4nLCAnZmlsZW5hbWUudHh0Jyk7CmNsb3NlICRGSDsKRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICAgICAgUmVzdWx0ICAgID0+IDw8J0VPRicsCiMhL3Vzci9iaW4vYmFzaAp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cm15ICRGSDsKb3BlbigkRkgsICcrPicsICdmaWxlbmFtZS50eHQnKTsKY2xvc2UgJEZIOwpFT0YKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdQZXJsQ3JpdGljIFByb2hpYml0T3BlbiByZWd1bGFyIGZpbGUsIGV4dGVybmFsIGNvbW1hbmQnLAogICAgICAgIFRvZG8gICAgICA9PiAnaXQgaXMgbm90IG9idmlvdXMgd2hldGhlciBleHRlcm5hbCBjb21tYW5kIG9wZW4gc2hvdWxkIGJlIGFsbG93ZWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAndGVzdC5wbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpQZXJsQ3JpdGljKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICczLjMnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAojIS91c3IvYmluL2Jhc2gKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwpteSAkRkg7Cm9wZW4oJEZILCAnLXwnLCAnc29tZV9jb21tYW5kJyk7CmNsb3NlICRGSDsKRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICAgICAgUmVzdWx0ICAgID0+IDw8J0VPRicsCiMhL3Vzci9iaW4vYmFzaAp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cm15ICRGSDsKb3BlbigkRkgsICctfCcsICdzb21lX2NvbW1hbmQnKTsKY2xvc2UgJEZIOwpFT0YKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdQZXJsQ3JpdGljIFByb2hpYml0T3BlbiByZWd1bGFyIGZpbGUsIHVuY2xlYXIgbW9kZScsCiAgICAgICAgVG9kbyAgICAgID0+ICdpdCBpcyBub3Qgb2J2aW91cyB3aGV0aGVyIHVuY2xlYXIgbW9kZSBvcGVuIHNob3VsZCBiZSBhbGxvd2VkJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ3Rlc3QucGwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6UGVybENyaXRpYyldLAogICAgICAgIEZyYW1ld29yayA9PiAnMy4zJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKIyEvdXNyL2Jpbi9iYXNoCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKbXkgJEZIOwpvcGVuICRGSCwgJE1vZGUsICRQYXJhbXtMb2NhdGlvbn07CmNsb3NlICRGSDsKRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICAgICAgUmVzdWx0ICAgID0+IDw8J0VPRicsCiMhL3Vzci9iaW4vYmFzaAp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cm15ICRGSDsKb3BlbiAkRkgsICRNb2RlLCAkUGFyYW17TG9jYXRpb259OwpjbG9zZSAkRkg7CkVPRgogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1BlcmxDcml0aWMgUHJvaGliaXRPcGVuIGluIGFub3RoZXIgY29udGV4dCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICd0ZXN0LnBsJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBlcmxDcml0aWMpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzMuMycsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCiMhL3Vzci9iaW4vYmFzaAp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cm15ICRHZW9JUE9iamVjdCA9IEdlbzo6SVAtPm9wZW4oICRHZW9JUERhdGFiYXNlRmlsZSwgR2VvOjpJUDo6R0VPSVBfU1RBTkRBUkQoKSApOwpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgICAgICBSZXN1bHQgICAgPT4gPDwnRU9GJywKIyEvdXNyL2Jpbi9iYXNoCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKbXkgJEdlb0lQT2JqZWN0ID0gR2VvOjpJUC0+b3BlbiggJEdlb0lQRGF0YWJhc2VGaWxlLCBHZW86OklQOjpHRU9JUF9TVEFOREFSRCgpICk7CkVPRgogICAgfSwKKTsKCnNjcmlwdHM6OnRlc3Q6Ok9UT0JPQ29kZVBvbGljeVBsdWdpbnM6OlJ1biggVGVzdHMgPT4gXEBUZXN0cyApOwoKZG9uZV90ZXN0aW5nOwo=</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/PerlCritic/ProhibitStringySplit.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIFdvcmsgYXJvdW5kIGEgUGVybCBidWcgdGhhdCBpcyB0cmlnZ2VyZWQgaW4gRGV2ZWw6OlN0YWNrVHJhY2UKIyAgIChwcm9iYWx5IGZyb20gRXhjZXB0aW9uOjpDbGFzcyBhbmQgdGhpcyBmcm9tIFBlcmw6OkNyaXRpYykuCiMKIyAgIFNlZSBodHRwczovL2dpdGh1Yi5jb20vaG91c2VhYnNvbHV0ZS9EZXZlbC1TdGFja1RyYWNlL2lzc3Vlcy8xMSBhbmQKIyAgIGh0dHA6Ly9ydC5wZXJsLm9yZy9ydDMvUHVibGljL0J1Zy9EaXNwbGF5Lmh0bWw/aWQ9NzgxODYKbm8gd2FybmluZ3MgJ3JlZGVmaW5lJzsgICAgICAgICAgICAgICAgICAgICAjIyBubyBjcml0aWMgcXcoVGVzdGluZ0FuZERlYnVnZ2luZzo6UHJvaGliaXROb1dhcm5pbmdzKQp1c2UgRGV2ZWw6OlN0YWNrVHJhY2UgKCk7CmxvY2FsICpEZXZlbDo6U3RhY2tUcmFjZTo6bmV3ID0gc3ViIHsgfTsgICAgIyBuby1vcAp1c2Ugd2FybmluZ3MgJ3JlZGVmaW5lJzsKCiMgY29yZSBtb2R1bGVzCgojIENQQU4gbW9kdWxlcwp1c2UgVGVzdDI6OlYwOwoKIyBPVE9CTyBtb2R1bGVzCnVzZSBzY3JpcHRzOjp0ZXN0OjpPVE9CT0NvZGVQb2xpY3lQbHVnaW5zOwoKbXkgQFRlc3RzID0gKAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnUGVybENyaXRpYyBQcm9oaWJpdFN0cmluZ3lTcGxpdCB3aXRoIHN0cmluZywgYWxsb3dlZCBmb3IgT1RPQk8gOCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICd0ZXN0LnBsJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBlcmxDcml0aWMpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzguMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCiMhL3Vzci9iaW4vYmFzaAp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cm15IEBTdHJpbmdzID0gc3BsaXQgJzonLCAnc29tZTo6Y29kZSc7CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1BlcmxDcml0aWMgUHJvaGliaXRTdHJpbmd5U3BsaXQgd2l0aCBzdHJpbmcnLAogICAgICAgIEZpbGVuYW1lICA9PiAndGVzdC5wbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpQZXJsQ3JpdGljKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc5LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAojIS91c3IvYmluL2Jhc2gKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwpteSBAU3RyaW5ncyA9IHNwbGl0ICc6JywgJ3NvbWU6OmNvZGUnOwpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdQZXJsQ3JpdGljIFByb2hpYml0U3RyaW5neVNwbGl0IHdpdGggcmVnZXhlcycsCiAgICAgICAgRmlsZW5hbWUgID0+ICd0ZXN0LnBsJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBlcmxDcml0aWMpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzkuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCiMhL3Vzci9iaW4vYmFzaAp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cm15IEBTdHJpbmdzID0gc3BsaXQgLzovLCAnc29tZTo6Y29kZSc7CkBTdHJpbmdzID0gc3BsaXQgbS86LywgJ3NvbWU6OmNvZGUnOwpAU3RyaW5ncyA9IHNwbGl0KG0vOi8sICdzb21lOjpjb2RlJyk7CkBTdHJpbmdzID0gc3BsaXQoKG0vOi8sICdzb21lOjpjb2RlJykpOwpAU3RyaW5ncyA9IHNwbGl0IHFyezp9LCAnc29tZTo6Y29kZSc7CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1BlcmxDcml0aWMgUHJvaGliaXRTdHJpbmd5U3BsaXQgd2l0aCByZWdleCB2YXJpYWJsZScsCiAgICAgICAgRmlsZW5hbWUgID0+ICd0ZXN0LnBsJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBlcmxDcml0aWMpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzkuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCiMhL3Vzci9iaW4vYmFzaAp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cm15ICRSZWdleCA9IHFyezp9OwpteSBAU3RyaW5ncyA9IHNwbGl0ICRSZWdleCwgJ3NvbWU6OmNvZGUnOwpAU3RyaW5ncyA9IHNwbGl0KCRSZWdleCwgJ3NvbWU6OmNvZGUnKTsKRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAopOwoKc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczo6UnVuKCBUZXN0cyA9PiBcQFRlc3RzICk7Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/PerlCritic/RequireCamelCase.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIFdvcmsgYXJvdW5kIGEgUGVybCBidWcgdGhhdCBpcyB0cmlnZ2VyZWQgaW4gRGV2ZWw6OlN0YWNrVHJhY2UKIyAgIChwcm9iYWx5IGZyb20gRXhjZXB0aW9uOjpDbGFzcyBhbmQgdGhpcyBmcm9tIFBlcmw6OkNyaXRpYykuCiMKIyAgIFNlZSBodHRwczovL2dpdGh1Yi5jb20vaG91c2VhYnNvbHV0ZS9EZXZlbC1TdGFja1RyYWNlL2lzc3Vlcy8xMSBhbmQKIyAgIGh0dHA6Ly9ydC5wZXJsLm9yZy9ydDMvUHVibGljL0J1Zy9EaXNwbGF5Lmh0bWw/aWQ9NzgxODYKbm8gd2FybmluZ3MgJ3JlZGVmaW5lJzsgICAgICAgICAgICAgICAgICAgICAjIyBubyBjcml0aWMgcXcoVGVzdGluZ0FuZERlYnVnZ2luZzo6UHJvaGliaXROb1dhcm5pbmdzKQp1c2UgRGV2ZWw6OlN0YWNrVHJhY2UgKCk7CmxvY2FsICpEZXZlbDo6U3RhY2tUcmFjZTo6bmV3ID0gc3ViIHsgfTsgICAgIyBuby1vcAp1c2Ugd2FybmluZ3MgJ3JlZGVmaW5lJzsKCiMgY29yZSBtb2R1bGVzCgojIENQQU4gbW9kdWxlcwp1c2UgVGVzdDI6OlYwOwoKIyBPVE9CTyBtb2R1bGVzCnVzZSBzY3JpcHRzOjp0ZXN0OjpPVE9CT0NvZGVQb2xpY3lQbHVnaW5zOwoKbXkgQFRlc3RzID0gKAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnQWxsIGZpbmUnLAogICAgICAgIEZpbGVuYW1lICA9PiAndGVzdC5wbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpQZXJsQ3JpdGljKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc4LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgTXlGdW5jdGlvbiB7fQpteSAkQ2FtZWxDYXNlVmFyID0gMTsKCjE7CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1dyb25nIHN1YicsCiAgICAgICAgRmlsZW5hbWUgID0+ICd0ZXN0LnBsJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBlcmxDcml0aWMpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzguMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnN1YiBteV9mdW5jdGlvbiB7fQoKMTsKRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnV3JvbmcgdmFyJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ3Rlc3QucGwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6UGVybENyaXRpYyldLAogICAgICAgIEZyYW1ld29yayA9PiAnOC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKbXkgJF93cm9uZ192YXJpYWJsZSA9IDE7CgoxOwpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdBbGwgZmluZScsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZXN0LnBtJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBlcmxDcml0aWMpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzguMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCnBhY2thZ2UgS2VybmVsOjpUZXN0Owp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgTXlGdW5jdGlvbiB7fQpteSAkQ2FtZWxDYXNlVmFyID0gMTsKCjE7CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1dyb25nIHN1YicsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZXN0LnBtJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBlcmxDcml0aWMpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzguMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCnBhY2thZ2UgS2VybmVsOjpUZXN0Owp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgbXlfZnVuY3Rpb24ge30KCjE7CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1dyb25nIHZhcicsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZXN0LnBtJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBlcmxDcml0aWMpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzguMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCnBhY2thZ2UgS2VybmVsOjpUZXN0Owp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpteSAkX3dyb25nX3ZhcmlhYmxlID0gMTsKCjE7CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1BhY2thZ2UgVmFyaWFibGUnLAogICAgICAgIEZpbGVuYW1lICA9PiAnVGVzdC5wbScsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpQZXJsQ3JpdGljKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc4LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLApwYWNrYWdlIEtlcm5lbDo6VGVzdDsKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKbXkgJE9USEVSOjpQQUNLQUdFOjpfcHJpdmF0ZV92YXJpYWJsZSA9IDE7CgoxOwpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdEZXJpdmVkIFBhY2thZ2UgKHVzZSBwYXJlbnQpJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ1Rlc3QucG0nLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6UGVybENyaXRpYyldLAogICAgICAgIEZyYW1ld29yayA9PiAnOC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKcGFja2FnZSBLZXJuZWw6OlRlc3Q7CnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBwYXJlbnQgcXcoTXk6OlBhY2thZ2UpOwoKc3ViIG92ZXJyaWRkZW5fbWV0aG9kIHt9CgoxOwpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdEZXJpdmVkIFBhY2thZ2UgKHVzZSBiYXNlKScsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZXN0LnBtJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBlcmxDcml0aWMpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzguMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCnBhY2thZ2UgS2VybmVsOjpUZXN0Owp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgYmFzZSBxdyhNeTo6UGFja2FnZSk7CgpzdWIgb3ZlcnJpZGRlbl9tZXRob2Qge30KCjE7CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0Rlcml2ZWQgUGFja2FnZSAoTW9vc2UgKyBleHRlbmQpJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ1Rlc3QucG0nLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6UGVybENyaXRpYyldLAogICAgICAgIEZyYW1ld29yayA9PiAnOC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKcGFja2FnZSBLZXJuZWw6OlRlc3Q7CnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBNb29zZTsKZXh0ZW5kcyBxdyhNeTo6UGFja2FnZSk7CgpzdWIgb3ZlcnJpZGRlbl9tZXRob2Qge30KCjE7CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0Rlcml2ZWQgUGFja2FnZSAoTW9vc2U6OlJvbGUgKyB3aXRoKScsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZXN0LnBtJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBlcmxDcml0aWMpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzguMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCnBhY2thZ2UgS2VybmVsOjpUZXN0Owp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgTW9vc2U6OlJvbGU7CndpdGggcXcoTXk6OlBhY2thZ2UpOwoKc3ViIG92ZXJyaWRkZW5fbWV0aG9kIHt9CgoxOwpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdEZXJpdmVkIFBhY2thZ2UgKE1vb3NlICsgZXh0ZW5kcyknLAogICAgICAgIEZpbGVuYW1lICA9PiAnVGVzdC5wbScsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpQZXJsQ3JpdGljKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc4LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLApwYWNrYWdlIEtlcm5lbDo6VGVzdDsKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIE1vb3NlOwpleHRlbmRzIHF3KE15OjpQYWNrYWdlKTsKCnN1YiBvdmVycmlkZGVuX21ldGhvZCB7fQoKMTsKRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnTW9vc2UgUGFja2FnZSwgYnV0IG5vdCBkZXJpdmVkJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ1Rlc3QucG0nLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6UGVybENyaXRpYyldLAogICAgICAgIEZyYW1ld29yayA9PiAnOC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKcGFja2FnZSBLZXJuZWw6OlRlc3Q7CnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBNb29zZTsKdXNlIE1vb3NlOjpSb2xlOwoKc3ViIG15X2Z1bmN0aW9uIHt9CgoxOwpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdSZXF1aXJlQmFzZUNsYXNzJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ1Rlc3QucG0nLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6UGVybENyaXRpYyldLAogICAgICAgIEZyYW1ld29yayA9PiAnOC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKcGFja2FnZSBLZXJuZWw6OlRlc3Q7CnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCiRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPlJlcXVpcmVCYXNlQ2xhc3MoJ1NvbWU6OkNsYXNzJyk7CgpzdWIgb3ZlcnJpZGRlbl9tZXRob2Qge30KCjE7CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ01vam86OkJhc2UnLAogICAgICAgIEZpbGVuYW1lICA9PiAnVGVzdC5wbScsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpQZXJsQ3JpdGljKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc4LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLApwYWNrYWdlIEtlcm5lbDo6VGVzdDsKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIE1vam86OkJhc2UgJ1NvbWU6OkNsYXNzJzsKCnN1YiBvdmVycmlkZGVuX21ldGhvZCB7fQoKMTsKRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAopOwoKc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczo6UnVuKCBUZXN0cyA9PiBcQFRlc3RzICk7Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/PerlCritic/RequireLabels.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIFdvcmsgYXJvdW5kIGEgUGVybCBidWcgdGhhdCBpcyB0cmlnZ2VyZWQgaW4gRGV2ZWw6OlN0YWNrVHJhY2UKIyAgIChwcm9iYWx5IGZyb20gRXhjZXB0aW9uOjpDbGFzcyBhbmQgdGhpcyBmcm9tIFBlcmw6OkNyaXRpYykuCiMKIyAgIFNlZSBodHRwczovL2dpdGh1Yi5jb20vaG91c2VhYnNvbHV0ZS9EZXZlbC1TdGFja1RyYWNlL2lzc3Vlcy8xMSBhbmQKIyAgIGh0dHA6Ly9ydC5wZXJsLm9yZy9ydDMvUHVibGljL0J1Zy9EaXNwbGF5Lmh0bWw/aWQ9NzgxODYKbm8gd2FybmluZ3MgJ3JlZGVmaW5lJzsgICAgICAgICAgICAgICAgICAgICAjIyBubyBjcml0aWMgcXcoVGVzdGluZ0FuZERlYnVnZ2luZzo6UHJvaGliaXROb1dhcm5pbmdzKQp1c2UgRGV2ZWw6OlN0YWNrVHJhY2UgKCk7CmxvY2FsICpEZXZlbDo6U3RhY2tUcmFjZTo6bmV3ID0gc3ViIHsgfTsgICAgIyBuby1vcAp1c2Ugd2FybmluZ3MgJ3JlZGVmaW5lJzsKCiMgY29yZSBtb2R1bGVzCgojIENQQU4gbW9kdWxlcwp1c2UgVGVzdDI6OlYwOwoKIyBPVE9CTyBtb2R1bGVzCnVzZSBzY3JpcHRzOjp0ZXN0OjpPVE9CT0NvZGVQb2xpY3lQbHVnaW5zOwoKbXkgQFRlc3RzID0gKAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnbmV4dCB3aXRob3V0IGxhYmVsJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ3Rlc3QucGwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6UGVybENyaXRpYyldLAogICAgICAgIEZyYW1ld29yayA9PiAnNC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKIyEvdXNyL2Jpbi9iYXNoCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKZm9yIG15ICRLZXkgKCAxLi4zICkgewogICAgbmV4dDsKfQpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICduZXh0IHdpdGggbGFiZWwnLAogICAgICAgIEZpbGVuYW1lICA9PiAndGVzdC5wbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpQZXJsQ3JpdGljKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc0LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAojIS91c3IvYmluL2Jhc2gKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwpLRVk6CmZvciBteSAkS2V5ICggMS4uMyApIHsKICAgIG5leHQgS0VZOwp9CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgICAgIFJlc3VsdCAgICA9PiA8PCdFT0YnLAojIS91c3IvYmluL2Jhc2gKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwpLRVk6CmZvciBteSAkS2V5ICggMS4uMyApIHsKICAgIG5leHQgS0VZOwp9CkVPRgogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ2xhc3Qgd2l0aG91dCBsYWJlbCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICd0ZXN0LnBsJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBlcmxDcml0aWMpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzQuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCiMhL3Vzci9iaW4vYmFzaAp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CmZvciBteSAkS2V5ICggMS4uMyApIHsKICAgIGxhc3Q7Cn0KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnbGFzdCB3aXRoIGxhYmVsJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ3Rlc3QucGwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6UGVybENyaXRpYyldLAogICAgICAgIEZyYW1ld29yayA9PiAnNC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKIyEvdXNyL2Jpbi9iYXNoCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKS0VZOgpmb3IgbXkgJEtleSAoIDEuLjMgKSB7CiAgICBsYXN0IEtFWTsKfQpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgICAgICBSZXN1bHQgICAgPT4gPDwnRU9GJywKIyEvdXNyL2Jpbi9iYXNoCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKS0VZOgpmb3IgbXkgJEtleSAoIDEuLjMgKSB7CiAgICBsYXN0IEtFWTsKfQpFT0YKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICduZXh0IHdpdGhvdXQgbGFiZWwnLAogICAgICAgIEZpbGVuYW1lICA9PiAndGVzdC5wbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpQZXJsQ3JpdGljKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc0LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAojIS91c3IvYmluL2Jhc2gKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwpmb3IgbXkgJEtleSAoIDEuLjMgKSB7CiAgICBuZXh0IGlmICgxKTsKfQpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICduZXh0IHdpdGggbGFiZWwnLAogICAgICAgIEZpbGVuYW1lICA9PiAndGVzdC5wbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpQZXJsQ3JpdGljKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc0LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAojIS91c3IvYmluL2Jhc2gKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwpLRVk6CmZvciBteSAkS2V5ICggMS4uMyApIHsKICAgIG5leHQgS0VZIGlmICgxKTsKfQpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgICAgICBSZXN1bHQgICAgPT4gPDwnRU9GJywKIyEvdXNyL2Jpbi9iYXNoCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKS0VZOgpmb3IgbXkgJEtleSAoIDEuLjMgKSB7CiAgICBuZXh0IEtFWSBpZiAoMSk7Cn0KRU9GCiAgICB9LAopOwoKc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczo6UnVuKCBUZXN0cyA9PiBcQFRlc3RzICk7Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/PO/DocbookLint.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKdXNlIFRlc3QyOjpWMDsKCiMgT1RPQk8gbW9kdWxlcwp1c2Ugc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczsKCm15IEBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1BPOjpEb2Nib29rTGludCwgdmFsaWQgZG9jYm9vaycsCiAgICAgICAgRmlsZW5hbWUgID0+ICdkb2MtYWRtaW4tdGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UE86OkRvY2Jvb2tMaW50KV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc0LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAptc2dpZCAiWWVzIDxsaW5rIGxpbmtlbmQ9XCIxMjNcIj50aGlzPC9saW5rPiB3b3JrcyIKbXNnc3RyICJKYSA8bGluayBsaW5rZW5kPVwiMTIzXCI+ZGFzPC9saW5rPiBmdW5rdGlvbmllcnQiCkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1BPOjpEb2Nib29rTGludCwgdmFsaWQgZG9jYm9vayAoaWdub3JlZCB0YWcgbWlzc2luZyknLAogICAgICAgIEZpbGVuYW1lICA9PiAnZG9jLWFkbWluLXRlc3QueG1sJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBPOjpEb2Nib29rTGludCldLAogICAgICAgIEZyYW1ld29yayA9PiAnNC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKbXNnaWQgIlllcyA8ZW1waGFzaXM+dGhpczwvZW1waGFzaXM+IHdvcmtzIgptc2dzdHIgIkphIGRhcyBmdW5rdGlvbmllcnQiCkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1BPOjpEb2Nib29rTGludCwgaW52YWxpZCBkb2Nib29rIChpbnZhbGlkIHhtbCknLAogICAgICAgIEZpbGVuYW1lICA9PiAnZG9jLWFkbWluLXRlc3QueG1sJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBPOjpEb2Nib29rTGludCldLAogICAgICAgIEZyYW1ld29yayA9PiAnNC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKbXNnaWQgIlllcyA8bGluayBsaW5rZW5kPVwiMTIzXCI+dGhpczwvbGluaz4gd29ya3MiCm1zZ3N0ciAiSmEgPGxpbmsgbGlua2VuZD1cIjEyM1wiPmRhczwvbGluaz4gZnVua3Rpb25pZXJ0IDxleHRyYXRhZyB1bmNsb3NlZD4iCkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1BPOjpEb2Nib29rTGludCwgaW52YWxpZCBkb2Nib29rIChtaXNzaW5nIHRhZ3MpJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ2RvYy1hZG1pbi10ZXN0LnhtbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQTzo6RG9jYm9va0xpbnQpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzQuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCm1zZ2lkICI8cGxhY2Vob2xkZXIgdHlwZT1cInNjcmVlbmluZm9cIiBpZD1cIjBcIi8+IDxncmFwaGljIHNyY2NyZWRpdD1cInByb2Nlc3MtIgoibWFuYWdlbWVudCAtIHNjcmVlbnNob3RcIiBzY2FsZT0nNDAnIGZpbGVyZWY9XCJzY3JlZW5zaG90cy9wbS1hY2NvcmRpb24tbmV3LSIKInRyYW5zaXRpb24ucG5nXCI+PC9ncmFwaGljPiIKbXNnc3RyICJGYWxzY2ggw7xiZXJzZXR6dCIKRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAopOwoKc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczo6UnVuKCBUZXN0cyA9PiBcQFRlc3RzICk7Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/PO/HTMLTags.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKdXNlIFRlc3QyOjpWMDsKCiMgT1RPQk8gbW9kdWxlcwp1c2Ugc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczsKCm15IEBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1BPOjpIVE1MVGFncywgdmFsaWQgYm9sZCB0YWcnLAogICAgICAgIEZpbGVuYW1lICA9PiAnb3RvYm8uZGUucG8nLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UE86OkhUTUxUYWdzKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAptc2dpZCAiU3RyaW5nIHdpdGggPGI+dGFnPC9iPiIKbXNnc3RyICJaZWljaGVua2V0dGUgbWl0IDxiPlRhZzwvYj4iCkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1BPOjpIVE1MVGFncywgZm9yYmlkZGVuIHNjcmlwdCB0YWcnLAogICAgICAgIEZpbGVuYW1lICA9PiAnb3RvYm8uZGUucG8nLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UE86OkhUTUxUYWdzKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAptc2dpZCAiU3RyaW5nIHdpdGggPHNDcklwVD5ldmlsIHRhZzwvc2NyaXB0PiIKbXNnc3RyICJaZWljaGVua2V0dGUgbWl0IDxzY3JpcHQ+YsO2c2VtIFRhZzwvc2NyaXB0PiIKRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnUE86OkhUTUxUYWdzLCB2YWxpZCBwYXJhZ3JhcGggdGFnJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ290b2JvLnBvdCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQTzo6SFRNTFRhZ3MpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCm1zZ2lkICI8cD5QYXJhZ3JhcGggc3RyaW5nPC9wPiIKbXNnc3RyICIiCkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1BPOjpIVE1MVGFncywgZm9yYmlkZGVuIG1ldGEgdGFnJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ290b2JvLnBvdCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQTzo6SFRNTFRhZ3MpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCm1zZ2lkICJSZWRpcmVjdGluZyBub3cuLi4gPE1FVEEgaHR0cC1lcXVpdj1cInJlZnJlc2hcIiBjb250ZW50PVwiMDsgdXJsPWh0dHA6Ly9leGFtcGxlLmNvbS9cIj4iCm1zZ3N0ciAiIgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdQTzo6SFRNTFRhZ3MsIHBhcmFncmFwaCB0YWcgd2l0aCBmb3JiaWRkZW4gYXR0cmlidXRlJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ290b2JvLnBvdCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQTzo6SFRNTFRhZ3MpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCm1zZ2lkICI8cCBvbm1vdXNlb3Zlcj1cImFsZXJ0KDEpO1wiPlBhcmFncmFwaCBzdHJpbmc8L3A+Igptc2dzdHIgIiIKRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnUE86OkhUTUxUYWdzLCBhbmNob3IgdGFnIHdpdGggZm9yYmlkZGVuIGF0dHJpYnV0ZXMnLAogICAgICAgIEZpbGVuYW1lICA9PiAnb3RvYm8ucG90JywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBPOjpIVE1MVGFncyldLAogICAgICAgIEZyYW1ld29yayA9PiAnNi4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKbXNnaWQgIjxhIGhyZWY9XCJodHRwczovL2V2aWwuY29tL2Rhbmdlci5waHBcIiBzdHlsZT1cImNvbG9yOnJlZFwiPk5vIG1vcmUgc3BhY2Ugb24gZGV2aWNlISBPVE9CTyB3aWxsIHN0b3AuIENsaWNrIGhlcmUgZm9yIGRldGFpbHMuPC9hPiIKbXNnc3RyICIiCkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1BPOjpIVE1MVGFncywgbGluayB0YWcgd2l0aCBmb3JiaWRkZW4gYXR0cmlidXRlcycsCiAgICAgICAgRmlsZW5hbWUgID0+ICdvdG9iby5wb3QnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UE86OkhUTUxUYWdzKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAptc2dpZCAiZm9vPGxpbmsgaHJlZj1cImh0dHBzOi8vZXZpbC5jb20vZGFuZ2VyLnBocFwiIHJlbD1cInN0eWxlc2hlZXRcIj5iYXIiCm1zZ3N0ciAiIgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCik7CgpzY3JpcHRzOjp0ZXN0OjpPVE9CT0NvZGVQb2xpY3lQbHVnaW5zOjpSdW4oIFRlc3RzID0+IFxAVGVzdHMgKTsKCmRvbmVfdGVzdGluZzsK</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/SOPM/CodeTags.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKdXNlIFRlc3QyOjpWMDsKCiMgT1RPQk8gbW9kdWxlcwp1c2Ugc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczsKCm15IEBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0NvZGVUYWdzLCB2YWxpZC4nLAogICAgICAgIEZpbGVuYW1lICA9PiAnVGVzdC5wbScsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpTT1BNOjpDb2RlVGFncyldLAogICAgICAgIEZyYW1ld29yayA9PiAnNC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKICAgIDxDb2RlSW5zdGFsbCBUeXBlPSJwb3N0Ij48IVtDREFUQVsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCd2YXI6OnBhY2thZ2VzZXR1cDo6TXlQYWNrZ2UnKS0+Q29kZUluc3RhbGwoKTsKICAgIF1dPjwvQ29kZUluc3RhbGw+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0NvZGVUYWdzLCAkU2VsZiB1c2VkLicsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZXN0LnBtJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlNPUE06OkNvZGVUYWdzKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc0LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAogICAgPENvZGVJbnN0YWxsIFR5cGU9InBvc3QiPjwhW0NEQVRBWwogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKC4uLikKICAgIF1dPjwvQ29kZUluc3RhbGw+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0NvZGVUYWdzLCBubyBjZGF0YS4nLAogICAgICAgIEZpbGVuYW1lICA9PiAnVGVzdC5wbScsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpTT1BNOjpDb2RlVGFncyldLAogICAgICAgIEZyYW1ld29yayA9PiAnNC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKICAgIDxDb2RlSW5zdGFsbCBUeXBlPSJwb3N0Ij4KICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCd2YXI6OnBhY2thZ2VzZXR1cDo6TXlQYWNrZ2UnKS0+Q29kZUluc3RhbGwoKTsKICAgIDwvQ29kZUluc3RhbGw+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKKTsKCnNjcmlwdHM6OnRlc3Q6Ok9UT0JPQ29kZVBvbGljeVBsdWdpbnM6OlJ1biggVGVzdHMgPT4gXEBUZXN0cyApOwoKZG9uZV90ZXN0aW5nOwo=</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/SOPM/OndemandTestingPresent.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKdXNlIFRlc3QyOjpWMDsKCiMgT1RPQk8gbW9kdWxlcwp1c2Ugc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczsKCnNraXBfYWxsKCdUaWR5QWxsIHBsdWdpbiBkb2VzIG5vdCBleGlzdCBpbiBDb2RlUG9saWN5Jyk7CgpteSBAVGVzdHMgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdWYWxpZCAtIE9uZGVtYW5kIHRlc3RpbmcgY29uZmlndXJhdGlvbiBwcmVzZW50JywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlNPUE06Ok9uZGVtYW5kVGVzdGluZ1ByZXNlbnQpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzcuMCcsCiAgICAgICAgRmlsZUxpc3QgID0+IFsKICAgICAgICAgICAgJy5vdG9iby1jaS55bWwnLAogICAgICAgIF0sCiAgICAgICAgU291cmNlICAgID0+ICcnLAogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0ludmFsaWQgLSBPbmRlbWFuZCB0ZXN0aW5nIGNvbmZpZ3VyYXRpb24gbWlzc2luZycsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpTT1BNOjpPbmRlbWFuZFRlc3RpbmdQcmVzZW50KV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc3LjAnLAogICAgICAgIEZpbGVMaXN0ICA9PiBbXSwKICAgICAgICBTb3VyY2UgICAgPT4gJycsCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAopOwoKc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczo6UnVuKCBUZXN0cyA9PiBcQFRlc3RzICk7Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/SOPM/RequiredElements.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKdXNlIFRlc3QyOjpWMDsKCiMgT1RPQk8gbW9kdWxlcwp1c2Ugc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczsKCm15IEBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ01pbmltYWwgdmFsaWQgU09QTS4nLAogICAgICAgIEZpbGVuYW1lICA9PiAnVGVzdC5wbScsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpTT1BNOjpSZXF1aXJlZEVsZW1lbnRzKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc3LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgPz4KPG90b2JvX3BhY2thZ2UgdmVyc2lvbj0iMS4wIj4KICAgIDxOYW1lPk9UT0JPQ29kZVBvbGljeTwvTmFtZT4KICAgIDxWZXJzaW9uPjAuMC4wPC9WZXJzaW9uPgogICAgPEZyYW1ld29yaz43LjAueDwvRnJhbWV3b3JrPgogICAgPFZlbmRvcj5Sb3RoZXIgT1NTIEdtYkg8L1ZlbmRvcj4KICAgIDxVUkw+aHR0cHM6Ly9vdG9iby5pby88L1VSTD4KICAgIDxMaWNlbnNlPkdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3PC9MaWNlbnNlPgogICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5PVE9CTyBjb2RlIHF1YWxpdHkgY2hlY2tzLjwvRGVzY3JpcHRpb24+CiAgICA8UGFja2FnZUlzRG93bmxvYWRhYmxlPjA8L1BhY2thZ2VJc0Rvd25sb2FkYWJsZT4KICAgIDxQYWNrYWdlSXNCdWlsZGFibGU+MDwvUGFja2FnZUlzQnVpbGRhYmxlPgogICAgPEZpbGVsaXN0PgogICAgICAgIDxGaWxlIFBlcm1pc3Npb249Ijc1NSIgTG9jYXRpb249ImJpbi9vdG9iby5Db2RlUG9saWN5LnBsIiAvPgogICAgPC9GaWxlbGlzdD4KPC9vdG9ib19wYWNrYWdlPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdNaXNzaW5nIG5hbWUuJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ1Rlc3QucG0nLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6U09QTTo6UmVxdWlyZWRFbGVtZW50cyldLAogICAgICAgIEZyYW1ld29yayA9PiAnNy4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdG9ib19wYWNrYWdlIHZlcnNpb249IjEuMCI+CiAgICA8VmVyc2lvbj4wLjAuMDwvVmVyc2lvbj4KICAgIDxGcmFtZXdvcms+Ny4wLng8L0ZyYW1ld29yaz4KICAgIDxWZW5kb3I+Um90aGVyIE9TUyBHbWJIPC9WZW5kb3I+CiAgICA8VVJMPmh0dHBzOi8vb3RvYm8uaW8vPC9VUkw+CiAgICA8TGljZW5zZT5HTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRSBWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNzwvTGljZW5zZT4KICAgIDxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+T1RPQk8gY29kZSBxdWFsaXR5IGNoZWNrcy48L0Rlc2NyaXB0aW9uPgogICAgPEZpbGVsaXN0PgogICAgICAgIDxGaWxlIFBlcm1pc3Npb249Ijc1NSIgTG9jYXRpb249ImJpbi9vdG9iby5Db2RlUG9saWN5LnBsIiAvPgogICAgPC9GaWxlbGlzdD4KPC9vdG9ib19wYWNrYWdlPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdNaXNzaW5nIGRlc2NyaXB0aW9uLicsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZXN0LnBtJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlNPUE06OlJlcXVpcmVkRWxlbWVudHMpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzcuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiA/Pgo8b3RvYm9fcGFja2FnZSB2ZXJzaW9uPSIxLjAiPgogICAgPE5hbWU+T1RPQk9Db2RlUG9saWN5PC9OYW1lPgogICAgPFZlcnNpb24+MC4wLjA8L1ZlcnNpb24+CiAgICA8RnJhbWV3b3JrPjcuMC54PC9GcmFtZXdvcms+CiAgICA8VmVuZG9yPlJvdGhlciBPU1MgR21iSDwvVmVuZG9yPgogICAgPFVSTD5odHRwczovL290b2JvLmlvLzwvVVJMPgogICAgPExpY2Vuc2U+R05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UgVmVyc2lvbiAzLCAyOSBKdW5lIDIwMDc8L0xpY2Vuc2U+CiAgICA8RmlsZWxpc3Q+CiAgICAgICAgPEZpbGUgUGVybWlzc2lvbj0iNzU1IiBMb2NhdGlvbj0iYmluL290b2JvLkNvZGVQb2xpY3kucGwiIC8+CiAgICA8L0ZpbGVsaXN0Pgo8L290b2JvX3BhY2thZ2U+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ01pc3NpbmcgdmVyc2lvbi4nLAogICAgICAgIEZpbGVuYW1lICA9PiAnVGVzdC5wbScsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpTT1BNOjpSZXF1aXJlZEVsZW1lbnRzKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc3LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgPz4KPG90b2JvX3BhY2thZ2UgdmVyc2lvbj0iMS4wIj4KICAgIDxOYW1lPk9UT0JPQ29kZVBvbGljeTwvTmFtZT4KICAgIDxGcmFtZXdvcms+Ny4wLng8L0ZyYW1ld29yaz4KICAgIDxWZW5kb3I+Um90aGVyIE9TUyBHbWJIPC9WZW5kb3I+CiAgICA8VVJMPmh0dHBzOi8vb3RvYm8uaW8vPC9VUkw+CiAgICA8TGljZW5zZT5HTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRSBWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNzwvTGljZW5zZT4KICAgIDxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+T1RPQk8gY29kZSBxdWFsaXR5IGNoZWNrcy48L0Rlc2NyaXB0aW9uPgogICAgPEZpbGVsaXN0PgogICAgICAgIDxGaWxlIFBlcm1pc3Npb249Ijc1NSIgTG9jYXRpb249ImJpbi9vdG9iby5Db2RlUG9saWN5LnBsIiAvPgogICAgPC9GaWxlbGlzdD4KPC9vdG9ib19wYWNrYWdlPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdNaXNzaW5nIGZyYW1ld29yay4nLAogICAgICAgIEZpbGVuYW1lICA9PiAnVGVzdC5wbScsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpTT1BNOjpSZXF1aXJlZEVsZW1lbnRzKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc3LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgPz4KPG90b2JvX3BhY2thZ2UgdmVyc2lvbj0iMS4wIj4KICAgIDxOYW1lPk9UT0JPQ29kZVBvbGljeTwvTmFtZT4KICAgIDxWZXJzaW9uPjAuMC4wPC9WZXJzaW9uPgogICAgPFZlbmRvcj5Sb3RoZXIgT1NTIEdtYkg8L1ZlbmRvcj4KICAgIDxVUkw+aHR0cHM6Ly9vdG9iby5pby88L1VSTD4KICAgIDxMaWNlbnNlPkdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3PC9MaWNlbnNlPgogICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5PVE9CTyBjb2RlIHF1YWxpdHkgY2hlY2tzLjwvRGVzY3JpcHRpb24+CiAgICA8RmlsZWxpc3Q+CiAgICAgICAgPEZpbGUgUGVybWlzc2lvbj0iNzU1IiBMb2NhdGlvbj0iYmluL290b2JvLkNvZGVQb2xpY3kucGwiIC8+CiAgICA8L0ZpbGVsaXN0Pgo8L290b2JvX3BhY2thZ2U+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ01pc3NpbmcgdmVuZG9yLicsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZXN0LnBtJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlNPUE06OlJlcXVpcmVkRWxlbWVudHMpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzcuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiA/Pgo8b3RvYm9fcGFja2FnZSB2ZXJzaW9uPSIxLjAiPgogICAgPE5hbWU+T1RPQk9Db2RlUG9saWN5PC9OYW1lPgogICAgPFZlcnNpb24+MC4wLjA8L1ZlcnNpb24+CiAgICA8RnJhbWV3b3JrPjcuMC54PC9GcmFtZXdvcms+CiAgICA8VVJMPmh0dHBzOi8vb3RvYm8uaW8vPC9VUkw+CiAgICA8TGljZW5zZT5HTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRSBWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNzwvTGljZW5zZT4KICAgIDxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+T1RPQk8gY29kZSBxdWFsaXR5IGNoZWNrcy48L0Rlc2NyaXB0aW9uPgogICAgPEZpbGVsaXN0PgogICAgICAgIDxGaWxlIFBlcm1pc3Npb249Ijc1NSIgTG9jYXRpb249ImJpbi9vdG9iby5Db2RlUG9saWN5LnBsIiAvPgogICAgPC9GaWxlbGlzdD4KPC9vdG9ib19wYWNrYWdlPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdNaXNzaW5nIFVSTC4nLAogICAgICAgIEZpbGVuYW1lICA9PiAnVGVzdC5wbScsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpTT1BNOjpSZXF1aXJlZEVsZW1lbnRzKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc3LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgPz4KPG90b2JvX3BhY2thZ2UgdmVyc2lvbj0iMS4wIj4KICAgIDxOYW1lPk9UT0JPQ29kZVBvbGljeTwvTmFtZT4KICAgIDxWZXJzaW9uPjAuMC4wPC9WZXJzaW9uPgogICAgPEZyYW1ld29yaz43LjAueDwvRnJhbWV3b3JrPgogICAgPFZlbmRvcj5Sb3RoZXIgT1NTIEdtYkg8L1ZlbmRvcj4KICAgIDxMaWNlbnNlPkdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3PC9MaWNlbnNlPgogICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5PVE9CTyBjb2RlIHF1YWxpdHkgY2hlY2tzLjwvRGVzY3JpcHRpb24+CiAgICA8RmlsZWxpc3Q+CiAgICAgICAgPEZpbGUgUGVybWlzc2lvbj0iNzU1IiBMb2NhdGlvbj0iYmluL290b2JvLkNvZGVQb2xpY3kucGwiIC8+CiAgICA8L0ZpbGVsaXN0Pgo8L290b2JvX3BhY2thZ2U+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ01pc3NpbmcgbGljZW5zZS4nLAogICAgICAgIEZpbGVuYW1lICA9PiAnVGVzdC5wbScsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpTT1BNOjpSZXF1aXJlZEVsZW1lbnRzKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc3LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgPz4KPG90b2JvX3BhY2thZ2UgdmVyc2lvbj0iMS4wIj4KICAgIDxOYW1lPk9UT0JPQ29kZVBvbGljeTwvTmFtZT4KICAgIDxWZXJzaW9uPjAuMC4wPC9WZXJzaW9uPgogICAgPEZyYW1ld29yaz43LjAueDwvRnJhbWV3b3JrPgogICAgPFZlbmRvcj5Sb3RoZXIgT1NTIEdtYkg8L1ZlbmRvcj4KICAgIDxVUkw+aHR0cHM6Ly9vdG9iby5pby88L1VSTD4KICAgIDxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+T1RPQk8gY29kZSBxdWFsaXR5IGNoZWNrcy48L0Rlc2NyaXB0aW9uPgogICAgPEZpbGVsaXN0PgogICAgICAgIDxGaWxlIFBlcm1pc3Npb249Ijc1NSIgTG9jYXRpb249ImJpbi9vdG9iby5Db2RlUG9saWN5LnBsIiAvPgogICAgPC9GaWxlbGlzdD4KPC9vdG9ib19wYWNrYWdlPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdJbnZhbGlkIGNvbnRlbnQgZm9yIFBhY2thZ2VJc0Rvd25sb2FkYWJsZSBmbGFnLicsCiAgICAgICAgVG9kbyAgICAgID0+ICdTT1BNIGNoZWNrIHNlZW1zIHRvIGJlIGxhY2tpbmcnLAogICAgICAgIEZpbGVuYW1lICA9PiAnVGVzdC5wbScsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpTT1BNOjpSZXF1aXJlZEVsZW1lbnRzKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc3LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgPz4KPG90b2JvX3BhY2thZ2UgdmVyc2lvbj0iMS4wIj4KICAgIDxOYW1lPk9UT0JPQ29kZVBvbGljeTwvTmFtZT4KICAgIDxWZXJzaW9uPjAuMC4wPC9WZXJzaW9uPgogICAgPEZyYW1ld29yaz43LjAueDwvRnJhbWV3b3JrPgogICAgPFZlbmRvcj5Sb3RoZXIgT1NTIEdtYkg8L1ZlbmRvcj4KICAgIDxVUkw+aHR0cHM6Ly9vdG9iby5pby88L1VSTD4KICAgIDxMaWNlbnNlPkdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3PC9MaWNlbnNlPgogICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5PVE9CTyBjb2RlIHF1YWxpdHkgY2hlY2tzLjwvRGVzY3JpcHRpb24+CiAgICA8UGFja2FnZUlzRG93bmxvYWRhYmxlPnRlc3Q8L1BhY2thZ2VJc0Rvd25sb2FkYWJsZT4KICAgIDxQYWNrYWdlSXNCdWlsZGFibGU+MDwvUGFja2FnZUlzQnVpbGRhYmxlPgogICAgPEZpbGVsaXN0PgogICAgICAgIDxGaWxlIFBlcm1pc3Npb249Ijc1NSIgTG9jYXRpb249ImJpbi9vdG9iby5Db2RlUG9saWN5LnBsIiAvPgogICAgPC9GaWxlbGlzdD4KPC9vdG9ib19wYWNrYWdlPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdPVE9CT0NvZGVQb2xpY3kgLSBtaXNzaW5nIFBhY2thZ2VJc0Rvd25sb2FkYWJsZSArIFBhY2thZ2VJc0J1aWxkYWJsZS4nLAogICAgICAgIFRvZG8gICAgICA9PiAnU09QTSBjaGVjayBzZWVtcyB0byBiZSBsYWNraW5nJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ1Rlc3QucG0nLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6U09QTTo6UmVxdWlyZWRFbGVtZW50cyldLAogICAgICAgIEZyYW1ld29yayA9PiAnNy4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdG9ib19wYWNrYWdlIHZlcnNpb249IjEuMCI+CiAgICA8TmFtZT5PVE9CT0NvZGVQb2xpY3k8L05hbWU+CiAgICA8VmVyc2lvbj4wLjAuMDwvVmVyc2lvbj4KICAgIDxGcmFtZXdvcms+Ny4wLng8L0ZyYW1ld29yaz4KICAgIDxWZW5kb3I+Um90aGVyIE9TUyBHbWJIPC9WZW5kb3I+CiAgICA8VVJMPmh0dHBzOi8vb3RvYm8uaW8vPC9VUkw+CiAgICA8TGljZW5zZT5HTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRSBWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNzwvTGljZW5zZT4KICAgIDxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+T1RPQk8gY29kZSBxdWFsaXR5IGNoZWNrcy48L0Rlc2NyaXB0aW9uPgogICAgPEZpbGVsaXN0PgogICAgICAgIDxGaWxlIFBlcm1pc3Npb249Ijc1NSIgTG9jYXRpb249ImJpbi9vdG9iby5Db2RlUG9saWN5LnBsIiAvPgogICAgPC9GaWxlbGlzdD4KPC9vdG9ib19wYWNrYWdlPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdPVE9CT0NvZGVQb2xpY3kgLSB2YWxpZCBTT1BNLicsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZXN0LnBtJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlNPUE06OlJlcXVpcmVkRWxlbWVudHMpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzcuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiA/Pgo8b3RvYm9fcGFja2FnZSB2ZXJzaW9uPSIxLjAiPgogICAgPE5hbWU+T1RPQk9Db2RlUG9saWN5PC9OYW1lPgogICAgPFZlcnNpb24+MC4wLjA8L1ZlcnNpb24+CiAgICA8RnJhbWV3b3JrPjcuMC54PC9GcmFtZXdvcms+CiAgICA8VmVuZG9yPlJvdGhlciBPU1MgR21iSDwvVmVuZG9yPgogICAgPFVSTD5odHRwczovL290b2JvLmlvLzwvVVJMPgogICAgPExpY2Vuc2U+R05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UgVmVyc2lvbiAzLCAyOSBKdW5lIDIwMDc8L0xpY2Vuc2U+CiAgICA8RGVzY3JpcHRpb24gTGFuZz0iZW4iPk9UT0JPIGNvZGUgcXVhbGl0eSBjaGVja3MuPC9EZXNjcmlwdGlvbj4KICAgIDxQYWNrYWdlSXNEb3dubG9hZGFibGU+MDwvUGFja2FnZUlzRG93bmxvYWRhYmxlPgogICAgPFBhY2thZ2VJc0J1aWxkYWJsZT4wPC9QYWNrYWdlSXNCdWlsZGFibGU+CiAgICA8RmlsZWxpc3Q+CiAgICAgICAgPEZpbGUgUGVybWlzc2lvbj0iNzU1IiBMb2NhdGlvbj0iYmluL290b2JvLkNvZGVQb2xpY3kucGwiIC8+CiAgICA8L0ZpbGVsaXN0Pgo8L290b2JvX3BhY2thZ2U+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0lUU01JbmNpZGVudFByb2JsZW1NYW5hZ2VtZW50IC0gbWlzc2luZyBQYWNrYWdlSXNEb3dubG9hZGFibGUgKyBQYWNrYWdlSXNCdWlsZGFibGUuJywKICAgICAgICBUb2RvICAgICAgPT4gJ1NPUE0gY2hlY2sgc2VlbXMgdG8gYmUgbGFja2luZycsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZXN0LnBtJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlNPUE06OlJlcXVpcmVkRWxlbWVudHMpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzcuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiA/Pgo8b3RvYm9fcGFja2FnZSB2ZXJzaW9uPSIxLjAiPgogICAgPE5hbWU+SVRTTUluY2lkZW50UHJvYmxlbU1hbmFnZW1lbnQ8L05hbWU+CiAgICA8VmVyc2lvbj4wLjAuMDwvVmVyc2lvbj4KICAgIDxGcmFtZXdvcms+Ny4wLng8L0ZyYW1ld29yaz4KICAgIDxWZW5kb3I+Um90aGVyIE9TUyBHbWJIPC9WZW5kb3I+CiAgICA8VVJMPmh0dHBzOi8vb3RvYm8uaW8vPC9VUkw+CiAgICA8TGljZW5zZT5HTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRSBWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNzwvTGljZW5zZT4KICAgIDxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+T1RPQk8gY29kZSBxdWFsaXR5IGNoZWNrcy48L0Rlc2NyaXB0aW9uPgogICAgPEZpbGVsaXN0PgogICAgICAgIDxGaWxlIFBlcm1pc3Npb249Ijc1NSIgTG9jYXRpb249ImJpbi9vdG9iby5Db2RlUG9saWN5LnBsIiAvPgogICAgPC9GaWxlbGlzdD4KPC9vdG9ib19wYWNrYWdlPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdJVFNNSW5jaWRlbnRQcm9ibGVtTWFuYWdlbWVudCAtIHZhbGlkIFNPUE0uJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ1Rlc3QucG0nLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6U09QTTo6UmVxdWlyZWRFbGVtZW50cyldLAogICAgICAgIEZyYW1ld29yayA9PiAnNy4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdG9ib19wYWNrYWdlIHZlcnNpb249IjEuMCI+CiAgICA8TmFtZT5JVFNNSW5jaWRlbnRQcm9ibGVtTWFuYWdlbWVudDwvTmFtZT4KICAgIDxWZXJzaW9uPjAuMC4wPC9WZXJzaW9uPgogICAgPEZyYW1ld29yaz43LjAueDwvRnJhbWV3b3JrPgogICAgPFZlbmRvcj5Sb3RoZXIgT1NTIEdtYkg8L1ZlbmRvcj4KICAgIDxVUkw+aHR0cHM6Ly9vdG9iby5pby88L1VSTD4KICAgIDxMaWNlbnNlPkdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3PC9MaWNlbnNlPgogICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5PVE9CTyBjb2RlIHF1YWxpdHkgY2hlY2tzLjwvRGVzY3JpcHRpb24+CiAgICA8UGFja2FnZUlzRG93bmxvYWRhYmxlPjA8L1BhY2thZ2VJc0Rvd25sb2FkYWJsZT4KICAgIDxQYWNrYWdlSXNCdWlsZGFibGU+MDwvUGFja2FnZUlzQnVpbGRhYmxlPgogICAgPEZpbGVsaXN0PgogICAgICAgIDxGaWxlIFBlcm1pc3Npb249Ijc1NSIgTG9jYXRpb249ImJpbi9vdG9iby5Db2RlUG9saWN5LnBsIiAvPgogICAgPC9GaWxlbGlzdD4KPC9vdG9ib19wYWNrYWdlPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdUaW1lQWNjb3VudGluZyAtIG1pc3NpbmcgUGFja2FnZUlzRG93bmxvYWRhYmxlICsgUGFja2FnZUlzQnVpbGRhYmxlLicsCiAgICAgICAgVG9kbyAgICAgID0+ICdTT1BNIGNoZWNrIHNlZW1zIHRvIGJlIGxhY2tpbmcnLAogICAgICAgIEZpbGVuYW1lICA9PiAnVGVzdC5wbScsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpTT1BNOjpSZXF1aXJlZEVsZW1lbnRzKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc3LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgPz4KPG90b2JvX3BhY2thZ2UgdmVyc2lvbj0iMS4wIj4KICAgIDxOYW1lPlRpbWVBY2NvdW50aW5nPC9OYW1lPgogICAgPFZlcnNpb24+MC4wLjA8L1ZlcnNpb24+CiAgICA8RnJhbWV3b3JrPjcuMC54PC9GcmFtZXdvcms+CiAgICA8VmVuZG9yPlJvdGhlciBPU1MgR21iSDwvVmVuZG9yPgogICAgPFVSTD5odHRwczovL290b2JvLmlvLzwvVVJMPgogICAgPExpY2Vuc2U+R05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UgVmVyc2lvbiAzLCAyOSBKdW5lIDIwMDc8L0xpY2Vuc2U+CiAgICA8RGVzY3JpcHRpb24gTGFuZz0iZW4iPk9UT0JPIGNvZGUgcXVhbGl0eSBjaGVja3MuPC9EZXNjcmlwdGlvbj4KICAgIDxGaWxlbGlzdD4KICAgICAgICA8RmlsZSBQZXJtaXNzaW9uPSI3NTUiIExvY2F0aW9uPSJiaW4vb3RvYm8uQ29kZVBvbGljeS5wbCIgLz4KICAgIDwvRmlsZWxpc3Q+Cjwvb3RvYm9fcGFja2FnZT4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnVGltZUFjY291bnRpbmcgLSB2YWxpZCBTT1BNLicsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZXN0LnBtJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlNPUE06OlJlcXVpcmVkRWxlbWVudHMpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzcuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiA/Pgo8b3RvYm9fcGFja2FnZSB2ZXJzaW9uPSIxLjAiPgogICAgPE5hbWU+VGltZUFjY291bnRpbmc8L05hbWU+CiAgICA8VmVyc2lvbj4wLjAuMDwvVmVyc2lvbj4KICAgIDxGcmFtZXdvcms+Ny4wLng8L0ZyYW1ld29yaz4KICAgIDxWZW5kb3I+Um90aGVyIE9TUyBHbWJIPC9WZW5kb3I+CiAgICA8VVJMPmh0dHBzOi8vb3RvYm8uaW8vPC9VUkw+CiAgICA8TGljZW5zZT5HTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRSBWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNzwvTGljZW5zZT4KICAgIDxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+T1RPQk8gY29kZSBxdWFsaXR5IGNoZWNrcy48L0Rlc2NyaXB0aW9uPgogICAgPFBhY2thZ2VJc0Rvd25sb2FkYWJsZT4wPC9QYWNrYWdlSXNEb3dubG9hZGFibGU+CiAgICA8UGFja2FnZUlzQnVpbGRhYmxlPjA8L1BhY2thZ2VJc0J1aWxkYWJsZT4KICAgIDxGaWxlbGlzdD4KICAgICAgICA8RmlsZSBQZXJtaXNzaW9uPSI3NTUiIExvY2F0aW9uPSJiaW4vb3RvYm8uQ29kZVBvbGljeS5wbCIgLz4KICAgIDwvRmlsZWxpc3Q+Cjwvb3RvYm9fcGFja2FnZT4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnT1RPQk9TVE9STSAtIG1pc3NpbmcgUGFja2FnZUlzRG93bmxvYWRhYmxlICsgUGFja2FnZUlzQnVpbGRhYmxlLicsCiAgICAgICAgVG9kbyAgICAgID0+ICdTT1BNIGNoZWNrIHNlZW1zIHRvIGJlIGxhY2tpbmcnLAogICAgICAgIEZpbGVuYW1lICA9PiAnVGVzdC5wbScsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpTT1BNOjpSZXF1aXJlZEVsZW1lbnRzKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc3LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgPz4KPG90b2JvX3BhY2thZ2UgdmVyc2lvbj0iMS4wIj4KICAgIDxOYW1lPk9UT0JPU1RPUk08L05hbWU+CiAgICA8VmVyc2lvbj4wLjAuMDwvVmVyc2lvbj4KICAgIDxGcmFtZXdvcms+Ny4wLng8L0ZyYW1ld29yaz4KICAgIDxWZW5kb3I+Um90aGVyIE9TUyBHbWJIPC9WZW5kb3I+CiAgICA8VVJMPmh0dHBzOi8vb3RvYm8uaW8vPC9VUkw+CiAgICA8TGljZW5zZT5HTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRSBWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNzwvTGljZW5zZT4KICAgIDxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+T1RPQk8gY29kZSBxdWFsaXR5IGNoZWNrcy48L0Rlc2NyaXB0aW9uPgogICAgPEZpbGVsaXN0PgogICAgICAgIDxGaWxlIFBlcm1pc3Npb249Ijc1NSIgTG9jYXRpb249ImJpbi9vdG9iby5Db2RlUG9saWN5LnBsIiAvPgogICAgPC9GaWxlbGlzdD4KPC9vdG9ib19wYWNrYWdlPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdPVE9CT1NUT1JNIC0gdmFsaWQgU09QTS4nLAogICAgICAgIEZpbGVuYW1lICA9PiAnVGVzdC5wbScsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpTT1BNOjpSZXF1aXJlZEVsZW1lbnRzKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc3LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgPz4KPG90b2JvX3BhY2thZ2UgdmVyc2lvbj0iMS4wIj4KICAgIDxOYW1lPk9UT0JPU1RPUk08L05hbWU+CiAgICA8VmVyc2lvbj4wLjAuMDwvVmVyc2lvbj4KICAgIDxGcmFtZXdvcms+Ny4wLng8L0ZyYW1ld29yaz4KICAgIDxWZW5kb3I+Um90aGVyIE9TUyBHbWJIPC9WZW5kb3I+CiAgICA8VVJMPmh0dHBzOi8vb3RvYm8uaW8vPC9VUkw+CiAgICA8TGljZW5zZT5HTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRSBWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNzwvTGljZW5zZT4KICAgIDxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+T1RPQk8gY29kZSBxdWFsaXR5IGNoZWNrcy48L0Rlc2NyaXB0aW9uPgogICAgPFBhY2thZ2VJc0Rvd25sb2FkYWJsZT4wPC9QYWNrYWdlSXNEb3dubG9hZGFibGU+CiAgICA8UGFja2FnZUlzQnVpbGRhYmxlPjA8L1BhY2thZ2VJc0J1aWxkYWJsZT4KICAgIDxGaWxlbGlzdD4KICAgICAgICA8RmlsZSBQZXJtaXNzaW9uPSI3NTUiIExvY2F0aW9uPSJiaW4vb3RvYm8uQ29kZVBvbGljeS5wbCIgLz4KICAgIDwvRmlsZWxpc3Q+Cjwvb3RvYm9fcGFja2FnZT4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnVGVzdDEyMyAtIHZhbGlkIFNPUE0gKG5vIHJlc3RyaWN0ZWQgcGFja2FnZSkuJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ1Rlc3QucG0nLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6U09QTTo6UmVxdWlyZWRFbGVtZW50cyldLAogICAgICAgIEZyYW1ld29yayA9PiAnNy4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdG9ib19wYWNrYWdlIHZlcnNpb249IjEuMCI+CiAgICA8TmFtZT5UZXN0MTIzPC9OYW1lPgogICAgPFZlcnNpb24+MC4wLjA8L1ZlcnNpb24+CiAgICA8RnJhbWV3b3JrPjcuMC54PC9GcmFtZXdvcms+CiAgICA8VmVuZG9yPlJvdGhlciBPU1MgR21iSDwvVmVuZG9yPgogICAgPFVSTD5odHRwczovL290b2JvLmlvLzwvVVJMPgogICAgPExpY2Vuc2U+R05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UgVmVyc2lvbiAzLCAyOSBKdW5lIDIwMDc8L0xpY2Vuc2U+CiAgICA8RGVzY3JpcHRpb24gTGFuZz0iZW4iPk9UT0JPIGNvZGUgcXVhbGl0eSBjaGVja3MuPC9EZXNjcmlwdGlvbj4KICAgIDxGaWxlbGlzdD4KICAgICAgICA8RmlsZSBQZXJtaXNzaW9uPSI3NTUiIExvY2F0aW9uPSJiaW4vb3RvYm8uQ29kZVBvbGljeS5wbCIgLz4KICAgIDwvRmlsZWxpc3Q+Cjwvb3RvYm9fcGFja2FnZT4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAopOwoKc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczo6UnVuKCBUZXN0cyA9PiBcQFRlc3RzICk7Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/SOPM/XSDValidator.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKdXNlIFRlc3QyOjpWMDsKCiMgT1RPQk8gbW9kdWxlcwp1c2Ugc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczsKCm15IEBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ01pbmltYWwgdmFsaWQgU09QTS4nLAogICAgICAgIEZpbGVuYW1lICA9PiAnVGVzdC5wbScsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpTT1BNOjpYU0RWYWxpZGF0b3IpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzQuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiA/Pgo8b3RvYm9fcGFja2FnZSB2ZXJzaW9uPSIxLjAiPgogICAgPE5hbWU+T1RPQk9Db2RlUG9saWN5PC9OYW1lPgogICAgPFZlcnNpb24+MC4wLjA8L1ZlcnNpb24+CiAgICA8RnJhbWV3b3JrPjQuMC54PC9GcmFtZXdvcms+CiAgICA8VmVuZG9yPlJvdGhlciBPU1MgR21iSDwvVmVuZG9yPgogICAgPFVSTD5odHRwczovL290b2JvLmlvLzwvVVJMPgogICAgPExpY2Vuc2U+R05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UgVmVyc2lvbiAzLCAyOSBKdW5lIDIwMDc8L0xpY2Vuc2U+CiAgICA8RGVzY3JpcHRpb24gTGFuZz0iZW4iPk9UT0JPIGNvZGUgcXVhbGl0eSBjaGVja3MuPC9EZXNjcmlwdGlvbj4KICAgIDxGaWxlbGlzdD4KICAgICAgICA8RmlsZSBQZXJtaXNzaW9uPSI3NTUiIExvY2F0aW9uPSJiaW4vb3RvYm8uQ29kZVBvbGljeS5wbCIvPgogICAgPC9GaWxlbGlzdD4KPC9vdG9ib19wYWNrYWdlPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdTaW1wbGUgUGFja2FnZU1lcmdlJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ1Rlc3QucG0nLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6U09QTTo6WFNEVmFsaWRhdG9yKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc0LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgPz4KPG90b2JvX3BhY2thZ2UgdmVyc2lvbj0iMS4wIj4KICAgIDxOYW1lPk9UT0JPQ29kZVBvbGljeTwvTmFtZT4KICAgIDxWZXJzaW9uPjAuMC4wPC9WZXJzaW9uPgogICAgPEZyYW1ld29yaz40LjAueDwvRnJhbWV3b3JrPgogICAgPFZlbmRvcj5Sb3RoZXIgT1NTIEdtYkg8L1ZlbmRvcj4KICAgIDxVUkw+aHR0cHM6Ly9vdG9iby5pby88L1VSTD4KICAgIDxMaWNlbnNlPkdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3PC9MaWNlbnNlPgogICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5PVE9CTyBjb2RlIHF1YWxpdHkgY2hlY2tzLjwvRGVzY3JpcHRpb24+CiAgICA8RmlsZWxpc3Q+CiAgICAgICAgPEZpbGUgUGVybWlzc2lvbj0iNzU1IiBMb2NhdGlvbj0iYmluL290b2JvLkNvZGVQb2xpY3kucGwiLz4KICAgIDwvRmlsZWxpc3Q+CiAgICA8UGFja2FnZU1lcmdlIE5hbWU9Ik1lcmdlT25lIiBUYXJnZXRWZXJzaW9uPSIyLjAuMCI+PC9QYWNrYWdlTWVyZ2U+Cjwvb3RvYm9fcGFja2FnZT4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnUGFja2FnZU1lcmdlIHdpdGhvdXQgVGFyZ2V0VmVyc2lvbicsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZXN0LnBtJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlNPUE06OlhTRFZhbGlkYXRvcildLAogICAgICAgIEZyYW1ld29yayA9PiAnNC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdG9ib19wYWNrYWdlIHZlcnNpb249IjEuMCI+CiAgICA8TmFtZT5PVE9CT0NvZGVQb2xpY3k8L05hbWU+CiAgICA8VmVyc2lvbj4wLjAuMDwvVmVyc2lvbj4KICAgIDxGcmFtZXdvcms+NC4wLng8L0ZyYW1ld29yaz4KICAgIDxWZW5kb3I+Um90aGVyIE9TUyBHbWJIPC9WZW5kb3I+CiAgICA8VVJMPmh0dHBzOi8vb3RvYm8uaW8vPC9VUkw+CiAgICA8TGljZW5zZT5HTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRSBWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNzwvTGljZW5zZT4KICAgIDxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+T1RPQk8gY29kZSBxdWFsaXR5IGNoZWNrcy48L0Rlc2NyaXB0aW9uPgogICAgPEZpbGVsaXN0PgogICAgICAgIDxGaWxlIFBlcm1pc3Npb249Ijc1NSIgTG9jYXRpb249ImJpbi9vdG9iby5Db2RlUG9saWN5LnBsIi8+CiAgICA8L0ZpbGVsaXN0PgogICAgPFBhY2thZ2VNZXJnZSBOYW1lPSJNZXJnZU9uZSI+PC9QYWNrYWdlTWVyZ2U+Cjwvb3RvYm9fcGFja2FnZT4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnUGFja2FnZU1lcmdlIHdpdGhvdXQgTmFtZScsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZXN0LnBtJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlNPUE06OlhTRFZhbGlkYXRvcildLAogICAgICAgIEZyYW1ld29yayA9PiAnNC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdG9ib19wYWNrYWdlIHZlcnNpb249IjEuMCI+CiAgICA8TmFtZT5PVE9CT0NvZGVQb2xpY3k8L05hbWU+CiAgICA8VmVyc2lvbj4wLjAuMDwvVmVyc2lvbj4KICAgIDxGcmFtZXdvcms+NC4wLng8L0ZyYW1ld29yaz4KICAgIDxWZW5kb3I+Um90aGVyIE9TUyBHbWJIPC9WZW5kb3I+CiAgICA8VVJMPmh0dHBzOi8vb3RvYm8uaW8vPC9VUkw+CiAgICA8TGljZW5zZT5HTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRSBWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNzwvTGljZW5zZT4KICAgIDxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+T1RPQk8gY29kZSBxdWFsaXR5IGNoZWNrcy48L0Rlc2NyaXB0aW9uPgogICAgPEZpbGVsaXN0PgogICAgICAgIDxGaWxlIFBlcm1pc3Npb249Ijc1NSIgTG9jYXRpb249ImJpbi9vdG9iby5Db2RlUG9saWN5LnBsIi8+CiAgICA8L0ZpbGVsaXN0PgogICAgPFBhY2thZ2VNZXJnZSBUYXJnZXRWZXJzaW9uPSIyLjAuMCI+PC9QYWNrYWdlTWVyZ2U+Cjwvb3RvYm9fcGFja2FnZT4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnU2ltcGxlIFBhY2thZ2VNZXJnZScsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZXN0LnBtJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlNPUE06OlhTRFZhbGlkYXRvcildLAogICAgICAgIEZyYW1ld29yayA9PiAnNC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdG9ib19wYWNrYWdlIHZlcnNpb249IjEuMCI+CiAgICA8TmFtZT5PVE9CT0NvZGVQb2xpY3k8L05hbWU+CiAgICA8VmVyc2lvbj4wLjAuMDwvVmVyc2lvbj4KICAgIDxGcmFtZXdvcms+NC4wLng8L0ZyYW1ld29yaz4KICAgIDxWZW5kb3I+Um90aGVyIE9TUyBHbWJIPC9WZW5kb3I+CiAgICA8VVJMPmh0dHBzOi8vb3RvYm8uaW8vPC9VUkw+CiAgICA8TGljZW5zZT5HTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRSBWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNzwvTGljZW5zZT4KICAgIDxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+T1RPQk8gY29kZSBxdWFsaXR5IGNoZWNrcy48L0Rlc2NyaXB0aW9uPgogICAgPEZpbGVsaXN0PgogICAgICAgIDxGaWxlIFBlcm1pc3Npb249Ijc1NSIgTG9jYXRpb249ImJpbi9vdG9iby5Db2RlUG9saWN5LnBsIi8+CiAgICA8L0ZpbGVsaXN0PgogICAgPERhdGFiYXNlVXBncmFkZSBUeXBlPSJwb3N0Ij4KICAgICAgICA8VGFibGVDcmVhdGUgTmFtZT0ibWVyZ2VfcGFja2FnZSI+CiAgICAgICAgICAgIDxDb2x1bW4gTmFtZT0iaWQiIFJlcXVpcmVkPSJ0cnVlIiBQcmltYXJ5S2V5PSJ0cnVlIiBBdXRvSW5jcmVtZW50PSJ0cnVlIiBUeXBlPSJJTlRFR0VSIi8+CiAgICAgICAgICAgIDxDb2x1bW4gTmFtZT0iZGVzY3JpcHRpb24iIFJlcXVpcmVkPSJ0cnVlIiBTaXplPSIyMDAiIFR5cGU9IlZBUkNIQVIiLz4KICAgICAgICA8L1RhYmxlQ3JlYXRlPgogICAgPC9EYXRhYmFzZVVwZ3JhZGU+CiAgICA8UGFja2FnZU1lcmdlIE5hbWU9Ik1lcmdlT25lIiBUYXJnZXRWZXJzaW9uPSIyLjAuMCI+CiAgICAgIDxEYXRhYmFzZVVwZ3JhZGUgVHlwZT0ibWVyZ2UiIElmUGFja2FnZT0iT3RoZXJQYWNrYWdlIiBJZk5vdFBhY2thZ2U9Ik90aGVyUGFja2FnZTIiPgogICAgICAgICAgPFRhYmxlQ3JlYXRlIE5hbWU9Im1lcmdlX3BhY2thZ2UiPgogICAgICAgICAgICAgIDxDb2x1bW4gTmFtZT0iaWQiIFJlcXVpcmVkPSJ0cnVlIiBQcmltYXJ5S2V5PSJ0cnVlIiBBdXRvSW5jcmVtZW50PSJ0cnVlIiBUeXBlPSJJTlRFR0VSIi8+CiAgICAgICAgICAgICAgPENvbHVtbiBOYW1lPSJkZXNjcmlwdGlvbiIgUmVxdWlyZWQ9InRydWUiIFNpemU9IjIwMCIgVHlwZT0iVkFSQ0hBUiIvPgogICAgICAgICAgPC9UYWJsZUNyZWF0ZT4KICAgICAgPC9EYXRhYmFzZVVwZ3JhZGU+CiAgICA8L1BhY2thZ2VNZXJnZT4KPC9vdG9ib19wYWNrYWdlPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdQYWNrYWdlTWVyZ2Ugd2l0aCBpbnZhbGlkIENvZGVJbnN0YWxsJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ1Rlc3QucG0nLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6U09QTTo6WFNEVmFsaWRhdG9yKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc0LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgPz4KPG90b2JvX3BhY2thZ2UgdmVyc2lvbj0iMS4wIj4KICAgIDxOYW1lPk9UT0JPQ29kZVBvbGljeTwvTmFtZT4KICAgIDxWZXJzaW9uPjAuMC4wPC9WZXJzaW9uPgogICAgPEZyYW1ld29yaz40LjAueDwvRnJhbWV3b3JrPgogICAgPFZlbmRvcj5Sb3RoZXIgT1NTIEdtYkg8L1ZlbmRvcj4KICAgIDxVUkw+aHR0cHM6Ly9vdG9iby5pby88L1VSTD4KICAgIDxMaWNlbnNlPkdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3PC9MaWNlbnNlPgogICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5PVE9CTyBjb2RlIHF1YWxpdHkgY2hlY2tzLjwvRGVzY3JpcHRpb24+CiAgICA8RmlsZWxpc3Q+CiAgICAgICAgPEZpbGUgUGVybWlzc2lvbj0iNzU1IiBMb2NhdGlvbj0iYmluL290b2JvLkNvZGVQb2xpY3kucGwiLz4KICAgIDwvRmlsZWxpc3Q+CiAgICA8UGFja2FnZU1lcmdlIE5hbWU9Ik1lcmdlT25lIiBUYXJnZXRWZXJzaW9uPSIyLjAuMCI+CiAgICAgIDxEYXRhYmFzZUluc3RhbGwgVHlwZT0ibWVyZ2UiPgogICAgICAgICAgPFRhYmxlQ3JlYXRlIE5hbWU9Im1lcmdlX3BhY2thZ2UiPgogICAgICAgICAgICAgIDxDb2x1bW4gTmFtZT0iaWQiIFJlcXVpcmVkPSJ0cnVlIiBQcmltYXJ5S2V5PSJ0cnVlIiBBdXRvSW5jcmVtZW50PSJ0cnVlIiBUeXBlPSJJTlRFR0VSIi8+CiAgICAgICAgICAgICAgPENvbHVtbiBOYW1lPSJkZXNjcmlwdGlvbiIgUmVxdWlyZWQ9InRydWUiIFNpemU9IjIwMCIgVHlwZT0iVkFSQ0hBUiIvPgogICAgICAgICAgPC9UYWJsZUNyZWF0ZT4KICAgICAgPC9EYXRhYmFzZUluc3RhbGw+CiAgICA8L1BhY2thZ2VNZXJnZT4KPC9vdG9ib19wYWNrYWdlPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCik7CgpzY3JpcHRzOjp0ZXN0OjpPVE9CT0NvZGVQb2xpY3lQbHVnaW5zOjpSdW4oIFRlc3RzID0+IFxAVGVzdHMgKTsKCmRvbmVfdGVzdGluZzsK</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/TT/TranslationFilter.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIHNjcmlwdHM6OnRlc3Q6Ok9UT0JPQ29kZVBvbGljeVBsdWdpbnM7CgpteSBAVGVzdHMgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdTaW1wbGUgZnVuY3Rpb24gdHJhbnNsYXRpb24sIGludmFsaWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnVGVtcGxhdGUudHQnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6VFQ6OlRyYW5zbGF0aW9uRmlsdGVyKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLApbJSBUcmFuc2xhdGUoIkhlbGxvLCB3b3JsZCEiKSAlXQpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdTaW1wbGUgZnVuY3Rpb24gdHJhbnNsYXRpb24gd2l0aCBIVE1MIGZpbHRlciwgdmFsaWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnVGVtcGxhdGUudHQnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6VFQ6OlRyYW5zbGF0aW9uRmlsdGVyKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLApbJSBUcmFuc2xhdGUoIkhlbGxvLCB3b3JsZCEiKSB8IGh0bWwgJV0KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnU2ltcGxlIGZ1bmN0aW9uIHRyYW5zbGF0aW9uIHdpdGggSlNPTiBmaWx0ZXIsIHZhbGlkJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ1RlbXBsYXRlLnR0JywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlRUOjpUcmFuc2xhdGlvbkZpbHRlcildLAogICAgICAgIEZyYW1ld29yayA9PiAnNi4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKWyUgVHJhbnNsYXRlKCJIZWxsbywgd29ybGQhIikgfCBKU09OICVdCkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1ZhcmlhYmxlIGZ1bmN0aW9uIHRyYW5zbGF0aW9uLCBpbnZhbGlkJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ1RlbXBsYXRlLnR0JywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlRUOjpUcmFuc2xhdGlvbkZpbHRlcildLAogICAgICAgIEZyYW1ld29yayA9PiAnNi4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKWyUgVHJhbnNsYXRlKERhdGEuTGFuZ3VhZ2UpICVdCkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1ZhcmlhYmxlIGZ1bmN0aW9uIHRyYW5zbGF0aW9uLCB2YWxpZCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZW1wbGF0ZS50dCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpUVDo6VHJhbnNsYXRpb25GaWx0ZXIpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsClslIFRyYW5zbGF0ZShEYXRhLkxhbmd1YWdlKSB8IGh0bWwgJV0KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnQ29tcGxleCBmdW5jdGlvbiB0cmFuc2xhdGlvbiwgaW52YWxpZCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZW1wbGF0ZS50dCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpUVDo6VHJhbnNsYXRpb25GaWx0ZXIpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCiZuZGFzaDsgPHNwYW4gdGl0bGU9IlslIFRyYW5zbGF0ZSgiQ3JlYXRlZCIpICVdOiBbJSBEYXRhLkNyZWF0ZVRpbWUgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV0iPlslIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lU2hvcnQiKSAlXTwvc3Bhbj4gWyUgVHJhbnNsYXRlKCJ2aWEgJXMiLCBUcmFuc2xhdGUoRGF0YS5Db21tdW5pY2F0aW9uQ2hhbm5lbCkpIHwgaHRtbCAlXQpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdDb21wbGV4IGZ1bmN0aW9uIHRyYW5zbGF0aW9uLCB2YWxpZCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZW1wbGF0ZS50dCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpUVDo6VHJhbnNsYXRpb25GaWx0ZXIpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCiZuZGFzaDsgPHNwYW4gdGl0bGU9IlslIFRyYW5zbGF0ZSgiQ3JlYXRlZCIpIHwgaHRtbCAlXTogWyUgRGF0YS5DcmVhdGVUaW1lIHwgTG9jYWxpemUoIlRpbWVTaG9ydCIpICVdIj5bJSBEYXRhLkNyZWF0ZVRpbWUgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV08L3NwYW4+IFslIFRyYW5zbGF0ZSgidmlhICVzIiwgVHJhbnNsYXRlKERhdGEuQ29tbXVuaWNhdGlvbkNoYW5uZWwpKSB8IGh0bWwgJV0KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnRnVuY3Rpb24gdHJhbnNsYXRpb24gd2l0aCBwbGFjZWhvbGRlciwgaW52YWxpZCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZW1wbGF0ZS50dCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpUVDo6VHJhbnNsYXRpb25GaWx0ZXIpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCjxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZG1pbk9UT0JPQ29tbXVuaXR5IiBjbGFzcz0iQnV0dG9uIj48aSBjbGFzcz0iZmEgZmEtYW5nbGUtZG91YmxlLXVwIj48L2k+IFslIFRyYW5zbGF0ZSgiVXBncmFkZSB0byAlcyIsIE9UT0JPQ29tbXVuaXR5TGFiZWwpICVdPC9hPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdGdW5jdGlvbiB0cmFuc2xhdGlvbiB3aXRoIHBsYWNlaG9sZGVyLCB2YWxpZCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZW1wbGF0ZS50dCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpUVDo6VHJhbnNsYXRpb25GaWx0ZXIpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCjxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZG1pbk9UT0JPQ29tbXVuaXR5IiBjbGFzcz0iQnV0dG9uIj48aSBjbGFzcz0iZmEgZmEtYW5nbGUtZG91YmxlLXVwIj48L2k+IFslIFRyYW5zbGF0ZSgiVXBncmFkZSB0byAlcyIpIHwgaHRtbCB8IFJlcGxhY2VQbGFjZWhvbGRlcnMoT1RPQk9Db21tdW5pdHlMYWJlbCkgJV08L2E+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0Z1bmN0aW9uIHRyYW5zbGF0aW9uIHdpdGggcGxhY2Vob2xkZXJzLCBpbnZhbGlkJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ1RlbXBsYXRlLnR0JywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlRUOjpUcmFuc2xhdGlvbkZpbHRlcildLAogICAgICAgIEZyYW1ld29yayA9PiAnNi4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKWyUgVHJhbnNsYXRlKCdUaGlzIHN5c3RlbSB1c2VzIHRoZSAlcyB3aXRob3V0IGEgcHJvcGVyIGxpY2Vuc2UhIFBsZWFzZSBtYWtlIGNvbnRhY3Qgd2l0aCAlcyB0byByZW5ldyBvciBhY3RpdmF0ZSB5b3VyIGNvbnRyYWN0IScsIE9UT0JPQ29tbXVuaXR5TGFiZWwsICc8YSBocmVmPSJtYWlsdG86aGFsbG9Ab3RvYm8uZGUiPmhhbGxvQG90b2JvLmRlPC9hPicpICVdCkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0Z1bmN0aW9uIHRyYW5zbGF0aW9uIHdpdGggcGxhY2Vob2xkZXJzLCB2YWxpZCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZW1wbGF0ZS50dCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpUVDo6VHJhbnNsYXRpb25GaWx0ZXIpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsClslIFRyYW5zbGF0ZSgnVGhpcyBzeXN0ZW0gdXNlcyB0aGUgJXMgd2l0aG91dCBhIHByb3BlciBsaWNlbnNlISBQbGVhc2UgbWFrZSBjb250YWN0IHdpdGggJXMgdG8gcmVuZXcgb3IgYWN0aXZhdGUgeW91ciBjb250cmFjdCEnKSB8IGh0bWwgfCBSZXBsYWNlUGxhY2Vob2xkZXJzKE9UT0JPQ29tbXVuaXR5TGFiZWwsICc8YSBocmVmPSJtYWlsdG86aGFsbG9Ab3RvYm8uZGUiPmhhbGxvQG90b2JvLmRlPC9hPicpICVdCkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0Z1bmN0aW9uIHRyYW5zbGF0aW9uIHdpdGggbm8gc3BhY2VzLCBpbnZhbGlkJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ1RlbXBsYXRlLnR0JywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlRUOjpUcmFuc2xhdGlvbkZpbHRlcildLAogICAgICAgIEZyYW1ld29yayA9PiAnNi4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwnRU9GJywKPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJVRyYW5zbGF0ZSgiQWRkIiklXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJBZGQiKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0Z1bmN0aW9uIHRyYW5zbGF0aW9uIHdpdGggbm8gc3BhY2VzLCB2YWxpZCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZW1wbGF0ZS50dCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpUVDo6VHJhbnNsYXRpb25GaWx0ZXIpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCjxidXR0b24gY2xhc3M9IlByaW1hcnkgQ2FsbEZvckFjdGlvbiIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iWyVUcmFuc2xhdGUoIkFkZCIpfGh0bWwlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJBZGQiKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0ZpbHRlciB0cmFuc2xhdGlvbiwgaW52YWxpZCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZW1wbGF0ZS50dCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpUVDo6VHJhbnNsYXRpb25GaWx0ZXIpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCjxzcGFuIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5Db250ZW50KSB8IGh0bWwgJV0iPlslIERhdGEuQ29udGVudCB8IFRyYW5zbGF0ZSB8IHRydW5jYXRlKERhdGEuTWF4TGVuZ3RoKSAlXTwvc3Bhbj4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnRmlsdGVyIHRyYW5zbGF0aW9uLCB2YWxpZCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICdUZW1wbGF0ZS50dCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpUVDo6VHJhbnNsYXRpb25GaWx0ZXIpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCjxzcGFuIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5Db250ZW50KSB8IGh0bWwgJV0iPlslIERhdGEuQ29udGVudCB8IFRyYW5zbGF0ZSB8IHRydW5jYXRlKERhdGEuTWF4TGVuZ3RoKSB8IGh0bWwgJV08L3NwYW4+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1NlY29uZCBmaWx0ZXIgdHJhbnNsYXRpb24sIGludmFsaWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnVGVtcGxhdGUudHQnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6VFQ6OlRyYW5zbGF0aW9uRmlsdGVyKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAp2YXIgTWVzc2FnZSA9IFslIERhdGEuQ3VzdG9tZXJSZWdFeEVycm9yTWVzc2FnZVNlcnZlckVycm9yTWVzc2FnZSB8IFRyYW5zbGF0ZSAlXTsKRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnU2Vjb25kIGZpbHRlciB0cmFuc2xhdGlvbiwgdmFsaWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnVGVtcGxhdGUudHQnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6VFQ6OlRyYW5zbGF0aW9uRmlsdGVyKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCdFT0YnLAp2YXIgTWVzc2FnZSA9IFslIERhdGEuQ3VzdG9tZXJSZWdFeEVycm9yTWVzc2FnZVNlcnZlckVycm9yTWVzc2FnZSB8IFRyYW5zbGF0ZSB8IEpTT04gJV07CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKCik7CgpzY3JpcHRzOjp0ZXN0OjpPVE9CT0NvZGVQb2xpY3lQbHVnaW5zOjpSdW4oIFRlc3RzID0+IFxAVGVzdHMgKTsKCmRvbmVfdGVzdGluZzsK</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/XML/Configuration/NameLength.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIHNjcmlwdHM6OnRlc3Q6Ok9UT0JPQ29kZVBvbGljeVBsdWdpbnM7CgpteSAkU21hbGxOYW1lICAgID0gJ0EnOwpteSAkTWVkaXVtTmFtZSAgID0gJ0EnIHggMTAwOwpteSAkTG9uZ05hbWUgICAgID0gJ0EnIHggMjAwOwpteSAkTGltaXROYW1lICAgID0gJ0EnIHggMjUwOwpteSAkT3ZlcnNpemVOYW1lID0gJ0EnIHggMjUxOwpteSAkSHVnZU5hbWUgICAgID0gJ0EnIHggMzAwOwoKbXkgJFNldHRpbmdUZW1wbGF0ZSA9IDw8J0VPRic7CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGlzYWJsZXMgdGhlIHdlYiBpbnN0YWxsZXIgKGh0dHA6Ly95b3VyaG9zdC5leGFtcGxlLmNvbS9vdG9iby9pbnN0YWxsZXIucGwpLCB0byBwcmV2ZW50IHRoZSBzeXN0ZW0gZnJvbSBiZWluZyBoaWphY2tlZC4gSWYgc2V0IHRvICJObyIsIHRoZSBzeXN0ZW0gY2FuIGJlIHJlaW5zdGFsbGVkIGFuZCB0aGUgY3VycmVudCBiYXNpYyBjb25maWd1cmF0aW9uIHdpbGwgYmUgdXNlZCB0byBwcmUtcG9wdWxhdGUgdGhlIHF1ZXN0aW9ucyB3aXRoaW4gdGhlIGluc3RhbGxlciBzY3JpcHQuIElmIG5vdCBhY3RpdmUsIGl0IGFsc28gZGlzYWJsZXMgdGhlIEdlbmVyaWNBZ2VudCwgUGFja2FnZU1hbmFnZXIgYW5kIFNRTCBCb3guPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5GcmFtZXdvcms8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlNlbGVjdCI+CiAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgS2V5PSIwIiBUcmFuc2xhdGFibGU9IjEiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJPcHRpb24iIEtleT0iMSIgVHJhbnNsYXRhYmxlPSIxIj5ZZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgpFT0YKCm15ICRTZXR0aW5nVGVtcGxhdGVPbGQgPSA8PCdFT0YnOwogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRpc2FibGVzIHRoZSB3ZWIgaW5zdGFsbGVyIChodHRwOi8veW91cmhvc3QuZXhhbXBsZS5jb20vb3RvYm8vaW5zdGFsbGVyLnBsKSwgdG8gcHJldmVudCB0aGUgc3lzdGVtIGZyb20gYmVpbmcgaGlqYWNrZWQuIElmIHNldCB0byAiTm8iLCB0aGUgc3lzdGVtIGNhbiBiZSByZWluc3RhbGxlZCBhbmQgdGhlIGN1cnJlbnQgYmFzaWMgY29uZmlndXJhdGlvbiB3aWxsIGJlIHVzZWQgdG8gcHJlLXBvcHVsYXRlIHRoZSBxdWVzdGlvbnMgd2l0aGluIHRoZSBpbnN0YWxsZXIgc2NyaXB0LiBJZiBub3QgYWN0aXZlLCBpdCBhbHNvIGRpc2FibGVzIHRoZSBHZW5lcmljQWdlbnQsIFBhY2thZ2VNYW5hZ2VyIGFuZCBTUUwgQm94LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjAiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIiBUcmFuc2xhdGFibGU9IjEiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIiBUcmFuc2xhdGFibGU9IjEiPlllczwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgpFT0YKCm15IEBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1NtYWxsIFNldHRpbmcgTmFtZScsCiAgICAgICAgRmlsZW5hbWUgID0+ICdLZXJuZWwvQ29uZmlnL0ZpbGVzL1hNTC9UZXN0LnhtbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpYTUw6OkNvbmZpZ3VyYXRpb246OlhTRFZhbGlkYXRvcildLAogICAgICAgIEZyYW1ld29yayA9PiAnNi4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwiRU9GIiwKPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkZyYW1ld29yayI+CiAgICA8U2V0dGluZyBOYW1lPSIkU21hbGxOYW1lIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiIENvbmZpZ0xldmVsPSIyMDAiPgokU2V0dGluZ1RlbXBsYXRlCiAgICA8L1NldHRpbmc+Cjwvb3RvYm9fY29uZmlnPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdNZWRpdW0gU2V0dGluZyBOYW1lJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ0tlcm5lbC9Db25maWcvRmlsZXMvWE1ML1Rlc3QueG1sJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6Q29uZmlndXJhdGlvbjo6WFNEVmFsaWRhdG9yKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCJFT0YiLAo8b3RvYm9fY29uZmlnIHZlcnNpb249IjIuMCIgaW5pdD0iRnJhbWV3b3JrIj4KICAgIDxTZXR0aW5nIE5hbWU9IiRNZWRpdW1OYW1lIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiIENvbmZpZ0xldmVsPSIyMDAiPgokU2V0dGluZ1RlbXBsYXRlCiAgICA8L1NldHRpbmc+Cjwvb3RvYm9fY29uZmlnPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdMb25nIFNldHRpbmcgTmFtZScsCiAgICAgICAgRmlsZW5hbWUgID0+ICdLZXJuZWwvQ29uZmlnL0ZpbGVzL1hNTC9UZXN0LnhtbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpYTUw6OkNvbmZpZ3VyYXRpb246OlhTRFZhbGlkYXRvcildLAogICAgICAgIEZyYW1ld29yayA9PiAnNi4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwiRU9GIiwKPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkZyYW1ld29yayI+CiAgICA8U2V0dGluZyBOYW1lPSIkTG9uZ05hbWUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSIgQ29uZmlnTGV2ZWw9IjIwMCI+CiRTZXR0aW5nVGVtcGxhdGUKICAgIDwvU2V0dGluZz4KPC9vdG9ib19jb25maWc+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0xpbWl0IFNldHRpbmcgTmFtZScsCiAgICAgICAgRmlsZW5hbWUgID0+ICdLZXJuZWwvQ29uZmlnL0ZpbGVzL1hNTC9UZXN0LnhtbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpYTUw6OkNvbmZpZ3VyYXRpb246OlhTRFZhbGlkYXRvcildLAogICAgICAgIEZyYW1ld29yayA9PiAnNi4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwiRU9GIiwKPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkZyYW1ld29yayI+CiAgICA8U2V0dGluZyBOYW1lPSIkTGltaXROYW1lIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiIENvbmZpZ0xldmVsPSIyMDAiPgokU2V0dGluZ1RlbXBsYXRlCiAgICA8L1NldHRpbmc+Cjwvb3RvYm9fY29uZmlnPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdPdmVyU2l6ZSBTZXR0aW5nIE5hbWUnLAogICAgICAgIEZpbGVuYW1lICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvVGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6WE1MOjpDb25maWd1cmF0aW9uOjpYU0RWYWxpZGF0b3IpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8IkVPRiIsCjxvdG9ib19jb25maWcgdmVyc2lvbj0iMi4wIiBpbml0PSJGcmFtZXdvcmsiPgogICAgPFNldHRpbmcgTmFtZT0iJE92ZXJzaXplTmFtZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIiBDb25maWdMZXZlbD0iMjAwIj4KJFNldHRpbmdUZW1wbGF0ZQogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnSHVnZSBTZXR0aW5nIE5hbWUnLAogICAgICAgIEZpbGVuYW1lICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvVGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6WE1MOjpDb25maWd1cmF0aW9uOjpYU0RWYWxpZGF0b3IpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8IkVPRiIsCjxvdG9ib19jb25maWcgdmVyc2lvbj0iMi4wIiBpbml0PSJGcmFtZXdvcmsiPgogICAgPFNldHRpbmcgTmFtZT0iJEh1Z2VOYW1lIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiIENvbmZpZ0xldmVsPSIyMDAiPgokU2V0dGluZ1RlbXBsYXRlCiAgICA8L1NldHRpbmc+Cjwvb3RvYm9fY29uZmlnPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCik7CgpzY3JpcHRzOjp0ZXN0OjpPVE9CT0NvZGVQb2xpY3lQbHVnaW5zOjpSdW4oIFRlc3RzID0+IFxAVGVzdHMgKTsKCmRvbmVfdGVzdGluZzsK</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/XML/Configuration/Navigation.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIHNjcmlwdHM6OnRlc3Q6Ok9UT0JPQ29kZVBvbGljeVBsdWdpbnM7CgpteSAkU2V0dGluZ1RlbXBsYXRlID0gPDwnRU9GJzsKICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UZXN0IGNvbmZpZyBzZXR0aW5nIGRlZmluaXRpb24gZm9yIHB1cnBvc2VzIG9mIHRoZSB1bml0IHRlc3RpbmcuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPlZhbHVlPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KRU9GCgpteSBAVGVzdHMgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdUb3AgbGV2ZWwgZW50cnkgLSBWYWxpZCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICdLZXJuZWwvQ29uZmlnL0ZpbGVzL1hNTC9UZXN0LnhtbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpYTUw6OkNvbmZpZ3VyYXRpb246Ok5hdmlnYXRpb24pXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8IkVPRiIsCjxvdG9ib19jb25maWcgdmVyc2lvbj0iMi4wIiBpbml0PSJGcmFtZXdvcmsiPgogICAgPFNldHRpbmcgTmFtZT0iU3RhdHM6OlN0YXRzSG9vayIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpTdGF0czwvTmF2aWdhdGlvbj4KJFNldHRpbmdUZW1wbGF0ZQogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnVG9wIGxldmVsIGVudHJ5IC0gSW52YWxpZCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICdLZXJuZWwvQ29uZmlnL0ZpbGVzL1hNTC9UZXN0LnhtbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpYTUw6OkNvbmZpZ3VyYXRpb246Ok5hdmlnYXRpb24pXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8IkVPRiIsCjxvdG9ib19jb25maWcgdmVyc2lvbj0iMi4wIiBpbml0PSJGcmFtZXdvcmsiPgogICAgPFNldHRpbmcgTmFtZT0iU3RhdHM6OlN0YXRzSG9vayIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8TmF2aWdhdGlvbj5TdGF0czo6Q29yZTwvTmF2aWdhdGlvbj4KJFNldHRpbmdUZW1wbGF0ZQogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnRXZlbnQgaGFuZGxlciBlbnRyeSAtIFZhbGlkJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ0tlcm5lbC9Db25maWcvRmlsZXMvWE1ML1Rlc3QueG1sJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6Q29uZmlndXJhdGlvbjo6TmF2aWdhdGlvbildLAogICAgICAgIEZyYW1ld29yayA9PiAnNi4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwiRU9GIiwKPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkZyYW1ld29yayI+CiAgICA8U2V0dGluZyBOYW1lPSJQYWNrYWdlOjpFdmVudE1vZHVsZVBvc3QjIyM5MDAwLVN1cHBvcnREYXRhU2VuZCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpFdmVudDo6UGFja2FnZTwvTmF2aWdhdGlvbj4KJFNldHRpbmdUZW1wbGF0ZQogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnRXZlbnQgaGFuZGxlciBlbnRyeSAtIEludmFsaWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvVGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6WE1MOjpDb25maWd1cmF0aW9uOjpOYXZpZ2F0aW9uKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCJFT0YiLAo8b3RvYm9fY29uZmlnIHZlcnNpb249IjIuMCIgaW5pdD0iRnJhbWV3b3JrIj4KICAgIDxTZXR0aW5nIE5hbWU9IlBhY2thZ2U6OkV2ZW50TW9kdWxlUG9zdCMjIzkwMDAtU3VwcG9ydERhdGFTZW5kIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxOYXZpZ2F0aW9uPlBhY2thZ2U6OkNvcmU6OkV2ZW50czwvTmF2aWdhdGlvbj4KJFNldHRpbmdUZW1wbGF0ZQogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnVmFsaWQgZnJvbnRlbmQgc3ViZ3JvdXAnLAogICAgICAgIEZpbGVuYW1lICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvVGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6WE1MOjpDb25maWd1cmF0aW9uOjpOYXZpZ2F0aW9uKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCJFT0YiLAo8b3RvYm9fY29uZmlnIHZlcnNpb249IjIuMCIgaW5pdD0iRnJhbWV3b3JrIj4KICAgIDxTZXR0aW5nIE5hbWU9IkN1c3RvbWVyRnJvbnRlbmQ6Ok5vdGlmeU1vZHVsZSMjIzktQ3VzdG9tZXJOb3RpZmljYXRpb25Nb2R1bGUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkN1c3RvbWVyOjpGcm9udGVuZE5vdGlmaWNhdGlvbjwvTmF2aWdhdGlvbj4KJFNldHRpbmdUZW1wbGF0ZQogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnRnJvbnRlbmQgc3ViZ3JvdXAgLSBWYWxpZCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICdLZXJuZWwvQ29uZmlnL0ZpbGVzL1hNTC9UZXN0LnhtbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpYTUw6OkNvbmZpZ3VyYXRpb246Ok5hdmlnYXRpb24pXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8IkVPRiIsCjxvdG9ib19jb25maWcgdmVyc2lvbj0iMi4wIiBpbml0PSJGcmFtZXdvcmsiPgogICAgPFNldHRpbmcgTmFtZT0iQ3VzdG9tZXJGcm9udGVuZDo6Tm90aWZ5TW9kdWxlIyMjOS1DdXN0b21lck5vdGlmaWNhdGlvbk1vZHVsZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6Q3VzdG9tZXI6OkZyb250ZW5kTm90aWZpY2F0aW9uPC9OYXZpZ2F0aW9uPgokU2V0dGluZ1RlbXBsYXRlCiAgICA8L1NldHRpbmc+Cjwvb3RvYm9fY29uZmlnPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdNYWluIGxvYWRlciBlbnRyeSAtIFZhbGlkJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ0tlcm5lbC9Db25maWcvRmlsZXMvWE1ML1Rlc3QueG1sJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6Q29uZmlndXJhdGlvbjo6TmF2aWdhdGlvbildLAogICAgICAgIEZyYW1ld29yayA9PiAnNi4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwiRU9GIiwKPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkZyYW1ld29yayI+CiAgICA8U2V0dGluZyBOYW1lPSJMb2FkZXI6OkFnZW50OjpDb21tb25DU1MjIyMwMDAtRnJhbWV3b3JrIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpCYXNlOjpMb2FkZXI8L05hdmlnYXRpb24+CiRTZXR0aW5nVGVtcGxhdGUKICAgIDwvU2V0dGluZz4KPC9vdG9ib19jb25maWc+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ01haW4gbG9hZGVyIGVudHJ5IC0gSW52YWxpZCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICdLZXJuZWwvQ29uZmlnL0ZpbGVzL1hNTC9UZXN0LnhtbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpYTUw6OkNvbmZpZ3VyYXRpb246Ok5hdmlnYXRpb24pXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8IkVPRiIsCjxvdG9ib19jb25maWcgdmVyc2lvbj0iMi4wIiBpbml0PSJGcmFtZXdvcmsiPgogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpBZ2VudDo6Q29tbW9uQ1NTIyMjMDAwLUZyYW1ld29yayIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OkxvYWRlcjwvTmF2aWdhdGlvbj4KJFNldHRpbmdUZW1wbGF0ZQogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnTG9hZGVyIGNvbmZpZyBmb3IgQWRtaW4gaW50ZXJmYWNlIC0gVmFsaWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvVGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6WE1MOjpDb25maWd1cmF0aW9uOjpOYXZpZ2F0aW9uKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCJFT0YiLAo8b3RvYm9fY29uZmlnIHZlcnNpb249IjIuMCIgaW5pdD0iRnJhbWV3b3JrIj4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpBZG1pblN5c3RlbUNvbmZpZ3VyYXRpb24jIyMwMDEtRnJhbWV3b3JrIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZG1pbjo6TW9kdWxlUmVnaXN0cmF0aW9uOjpMb2FkZXI8L05hdmlnYXRpb24+CiRTZXR0aW5nVGVtcGxhdGUKICAgIDwvU2V0dGluZz4KPC9vdG9ib19jb25maWc+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0xvYWRlciBjb25maWcgZm9yIEFkbWluIGludGVyZmFjZSAtIEludmFsaWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvVGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6WE1MOjpDb25maWd1cmF0aW9uOjpOYXZpZ2F0aW9uKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCJFT0YiLAo8b3RvYm9fY29uZmlnIHZlcnNpb249IjIuMCIgaW5pdD0iRnJhbWV3b3JrIj4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpBZG1pblN5c3RlbUNvbmZpZ3VyYXRpb24jIyMwMDEtRnJhbWV3b3JrIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpCYXNlOjpMb2FkZXI8L05hdmlnYXRpb24+CiRTZXR0aW5nVGVtcGxhdGUKICAgIDwvU2V0dGluZz4KPC9vdG9ib19jb25maWc+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0xvYWRlciBjb25maWcgZm9yIEFnZW50IGludGVyZmFjZSAtIFZhbGlkJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ0tlcm5lbC9Db25maWcvRmlsZXMvWE1ML1Rlc3QueG1sJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6Q29uZmlndXJhdGlvbjo6TmF2aWdhdGlvbildLAogICAgICAgIEZyYW1ld29yayA9PiAnNi4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwiRU9GIiwKPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkZyYW1ld29yayI+CiAgICA8U2V0dGluZyBOYW1lPSJMb2FkZXI6Ok1vZHVsZTo6QWdlbnREYXNoYm9hcmQjIyMwMDEtRnJhbWV3b3JrIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uOjpMb2FkZXI8L05hdmlnYXRpb24+CiRTZXR0aW5nVGVtcGxhdGUKICAgIDwvU2V0dGluZz4KPC9vdG9ib19jb25maWc+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0xvYWRlciBjb25maWcgZm9yIEFnZW50IGludGVyZmFjZSAtIEludmFsaWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvVGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6WE1MOjpDb25maWd1cmF0aW9uOjpOYXZpZ2F0aW9uKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCJFT0YiLAo8b3RvYm9fY29uZmlnIHZlcnNpb249IjIuMCIgaW5pdD0iRnJhbWV3b3JrIj4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpBZ2VudERhc2hib2FyZCMjIzAwMS1GcmFtZXdvcmsiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkJhc2U6OkxvYWRlcjwvTmF2aWdhdGlvbj4KJFNldHRpbmdUZW1wbGF0ZQogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnTG9hZGVyIGNvbmZpZyBmb3IgQ3VzdG9tZXIgaW50ZXJmYWNlIC0gVmFsaWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvVGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6WE1MOjpDb25maWd1cmF0aW9uOjpOYXZpZ2F0aW9uKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCJFT0YiLAo8b3RvYm9fY29uZmlnIHZlcnNpb249IjIuMCIgaW5pdD0iRnJhbWV3b3JrIj4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpDdXN0b21lclRpY2tldE1lc3NhZ2UjIyMwMDItVGlja2V0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpDdXN0b21lcjo6TW9kdWxlUmVnaXN0cmF0aW9uOjpMb2FkZXI8L05hdmlnYXRpb24+CiRTZXR0aW5nVGVtcGxhdGUKICAgIDwvU2V0dGluZz4KPC9vdG9ib19jb25maWc+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0xvYWRlciBjb25maWcgZm9yIEN1c3RvbWVyIGludGVyZmFjZSAtIEludmFsaWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvVGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6WE1MOjpDb25maWd1cmF0aW9uOjpOYXZpZ2F0aW9uKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCJFT0YiLAo8b3RvYm9fY29uZmlnIHZlcnNpb249IjIuMCIgaW5pdD0iRnJhbWV3b3JrIj4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpDdXN0b21lclRpY2tldE1lc3NhZ2UjIyMwMDItVGlja2V0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpCYXNlOjpMb2FkZXI8L05hdmlnYXRpb24+CiRTZXR0aW5nVGVtcGxhdGUKICAgIDwvU2V0dGluZz4KPC9vdG9ib19jb25maWc+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0xvYWRlciBjb25maWcgZm9yIFB1YmxpYyBpbnRlcmZhY2UgLSBWYWxpZCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICdLZXJuZWwvQ29uZmlnL0ZpbGVzL1hNTC9UZXN0LnhtbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpYTUw6OkNvbmZpZ3VyYXRpb246Ok5hdmlnYXRpb24pXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8IkVPRiIsCjxvdG9ib19jb25maWcgdmVyc2lvbj0iMi4wIiBpbml0PSJGcmFtZXdvcmsiPgogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpNb2R1bGU6OlB1YmxpY0ZBUUV4cGxvcmVyIyMjMDAyLUZBUSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6UHVibGljOjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiRTZXR0aW5nVGVtcGxhdGUKICAgIDwvU2V0dGluZz4KPC9vdG9ib19jb25maWc+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0xvYWRlciBjb25maWcgZm9yIEN1c3RvbWVyIGludGVyZmFjZSAtIEludmFsaWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvVGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6WE1MOjpDb25maWd1cmF0aW9uOjpOYXZpZ2F0aW9uKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCJFT0YiLAo8b3RvYm9fY29uZmlnIHZlcnNpb249IjIuMCIgaW5pdD0iRnJhbWV3b3JrIj4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpQdWJsaWNGQVFFeHBsb3JlciMjIzAwMi1GQVEiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkJhc2U6OkxvYWRlcjwvTmF2aWdhdGlvbj4KJFNldHRpbmdUZW1wbGF0ZQogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnRnJvbnRlbmQgbmF2aWdhdGlvbiBjb25maWcgZm9yIEFkbWluIGludGVyZmFjZSAtIFZhbGlkJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ0tlcm5lbC9Db25maWcvRmlsZXMvWE1ML1Rlc3QueG1sJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6Q29uZmlndXJhdGlvbjo6TmF2aWdhdGlvbildLAogICAgICAgIEZyYW1ld29yayA9PiAnNi4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwiRU9GIiwKPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkZyYW1ld29yayI+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TmF2aWdhdGlvbiMjI0FkbWluIyMjMDAxLUZyYW1ld29yayIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWRtaW46Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TWFpbk1lbnU8L05hdmlnYXRpb24+CiRTZXR0aW5nVGVtcGxhdGUKICAgIDwvU2V0dGluZz4KPC9vdG9ib19jb25maWc+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0Zyb250ZW5kIG5hdmlnYXRpb24gY29uZmlnIGZvciBBZG1pbiBpbnRlcmZhY2UgLSBJbnZhbGlkJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ0tlcm5lbC9Db25maWcvRmlsZXMvWE1ML1Rlc3QueG1sJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6Q29uZmlndXJhdGlvbjo6TmF2aWdhdGlvbildLAogICAgICAgIEZyYW1ld29yayA9PiAnNi4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwiRU9GIiwKPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkZyYW1ld29yayI+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TmF2aWdhdGlvbiMjI0FkbWluIyMjMDAxLUZyYW1ld29yayIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpNYWluTWVudTwvTmF2aWdhdGlvbj4KJFNldHRpbmdUZW1wbGF0ZQogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnRnJvbnRlbmQgbmF2aWdhdGlvbiBjb25maWcgZm9yIEFnZW50IGludGVyZmFjZSAtIFZhbGlkJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ0tlcm5lbC9Db25maWcvRmlsZXMvWE1ML1Rlc3QueG1sJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6Q29uZmlndXJhdGlvbjo6TmF2aWdhdGlvbildLAogICAgICAgIEZyYW1ld29yayA9PiAnNi4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwiRU9GIiwKPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkZyYW1ld29yayI+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TmF2aWdhdGlvbiMjI0FnZW50IyMjMDAxLUZyYW1ld29yayIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TWFpbk1lbnU8L05hdmlnYXRpb24+CiRTZXR0aW5nVGVtcGxhdGUKICAgIDwvU2V0dGluZz4KPC9vdG9ib19jb25maWc+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0Zyb250ZW5kIG5hdmlnYXRpb24gY29uZmlnIGZvciBBZ2VudCBpbnRlcmZhY2UgLSBJbnZhbGlkJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ0tlcm5lbC9Db25maWcvRmlsZXMvWE1ML1Rlc3QueG1sJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6Q29uZmlndXJhdGlvbjo6TmF2aWdhdGlvbildLAogICAgICAgIEZyYW1ld29yayA9PiAnNi4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwiRU9GIiwKPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkZyYW1ld29yayI+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TmF2aWdhdGlvbiMjI0FnZW50IyMjMDAxLUZyYW1ld29yayIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpNYWluTWVudTwvTmF2aWdhdGlvbj4KJFNldHRpbmdUZW1wbGF0ZQogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnRnJvbnRlbmQgbmF2aWdhdGlvbiBjb25maWcgZm9yIEN1c3RvbWVyIGludGVyZmFjZSAtIFZhbGlkJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ0tlcm5lbC9Db25maWcvRmlsZXMvWE1ML1Rlc3QueG1sJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6Q29uZmlndXJhdGlvbjo6TmF2aWdhdGlvbildLAogICAgICAgIEZyYW1ld29yayA9PiAnNi4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwiRU9GIiwKPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkZyYW1ld29yayI+CiAgICA8U2V0dGluZyBOYW1lPSJDdXN0b21lckZyb250ZW5kOjpOYXZpZ2F0aW9uIyMjQ3VzdG9tZXIjIyMwMDEtRnJhbWV3b3JrIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpDdXN0b21lcjo6TW9kdWxlUmVnaXN0cmF0aW9uOjpNYWluTWVudTwvTmF2aWdhdGlvbj4KJFNldHRpbmdUZW1wbGF0ZQogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnRnJvbnRlbmQgbmF2aWdhdGlvbiBjb25maWcgZm9yIEN1c3RvbWVyIGludGVyZmFjZSAtIEludmFsaWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvVGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6WE1MOjpDb25maWd1cmF0aW9uOjpOYXZpZ2F0aW9uKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCJFT0YiLAo8b3RvYm9fY29uZmlnIHZlcnNpb249IjIuMCIgaW5pdD0iRnJhbWV3b3JrIj4KICAgIDxTZXR0aW5nIE5hbWU9IkN1c3RvbWVyRnJvbnRlbmQ6Ok5hdmlnYXRpb24jIyNDdXN0b21lciMjIzAwMS1GcmFtZXdvcmsiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6TWFpbk1lbnU8L05hdmlnYXRpb24+CiRTZXR0aW5nVGVtcGxhdGUKICAgIDwvU2V0dGluZz4KPC9vdG9ib19jb25maWc+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0Zyb250ZW5kIG5hdmlnYXRpb24gY29uZmlnIGZvciBQdWJsaWMgaW50ZXJmYWNlIC0gVmFsaWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvVGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6WE1MOjpDb25maWd1cmF0aW9uOjpOYXZpZ2F0aW9uKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCJFT0YiLAo8b3RvYm9fY29uZmlnIHZlcnNpb249IjIuMCIgaW5pdD0iRnJhbWV3b3JrIj4KICAgIDxTZXR0aW5nIE5hbWU9IlB1YmxpY0Zyb250ZW5kOjpOYXZpZ2F0aW9uIyMjUHVibGljIyMjMDAxLUZyYW1ld29yayIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6UHVibGljOjpNb2R1bGVSZWdpc3RyYXRpb246Ok1haW5NZW51PC9OYXZpZ2F0aW9uPgokU2V0dGluZ1RlbXBsYXRlCiAgICA8L1NldHRpbmc+Cjwvb3RvYm9fY29uZmlnPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdGcm9udGVuZCBuYXZpZ2F0aW9uIGNvbmZpZyBmb3IgUHVibGljIGludGVyZmFjZSAtIEludmFsaWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvVGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6WE1MOjpDb25maWd1cmF0aW9uOjpOYXZpZ2F0aW9uKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCJFT0YiLAo8b3RvYm9fY29uZmlnIHZlcnNpb249IjIuMCIgaW5pdD0iRnJhbWV3b3JrIj4KICAgIDxTZXR0aW5nIE5hbWU9IlB1YmxpY0Zyb250ZW5kOjpOYXZpZ2F0aW9uIyMjUHVibGljIyMjMDAxLUZyYW1ld29yayIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpNYWluTWVudTwvTmF2aWdhdGlvbj4KJFNldHRpbmdUZW1wbGF0ZQogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnTmF2aWdhdGlvbiBtb2R1bGUgY29uZmlnIC0gVmFsaWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvVGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6WE1MOjpDb25maWd1cmF0aW9uOjpOYXZpZ2F0aW9uKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCJFT0YiLAo8b3RvYm9fY29uZmlnIHZlcnNpb249IjIuMCIgaW5pdD0iRnJhbWV3b3JrIj4KICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpOYXZpZ2F0aW9uTW9kdWxlIyMjQWRtaW4iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb246OkFkbWluT3ZlcnZpZXc8L05hdmlnYXRpb24+CiRTZXR0aW5nVGVtcGxhdGUKICAgIDwvU2V0dGluZz4KPC9vdG9ib19jb25maWc+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ05hdmlnYXRpb24gbW9kdWxlIGNvbmZpZyAtIEludmFsaWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvVGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6WE1MOjpDb25maWd1cmF0aW9uOjpOYXZpZ2F0aW9uKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCJFT0YiLAo8b3RvYm9fY29uZmlnIHZlcnNpb249IjIuMCIgaW5pdD0iRnJhbWV3b3JrIj4KICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpOYXZpZ2F0aW9uTW9kdWxlIyMjQWRtaW4iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFkbWluPC9OYXZpZ2F0aW9uPgokU2V0dGluZ1RlbXBsYXRlCiAgICA8L1NldHRpbmc+Cjwvb3RvYm9fY29uZmlnPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdTZWFyY2ggcm91dGVyIGNvbmZpZyBmb3IgQWRtaW4gaW50ZXJmYWNlIC0gVmFsaWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvVGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6WE1MOjpDb25maWd1cmF0aW9uOjpOYXZpZ2F0aW9uKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCJFT0YiLAo8b3RvYm9fY29uZmlnIHZlcnNpb249IjIuMCIgaW5pdD0iRnJhbWV3b3JrIj4KICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpTZWFyY2gjIyNBZG1pblN5c3RlbUNvbmZpZ3VyYXRpb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb246Ok1haW5NZW51OjpTZWFyY2g8L05hdmlnYXRpb24+CiRTZXR0aW5nVGVtcGxhdGUKICAgIDwvU2V0dGluZz4KPC9vdG9ib19jb25maWc+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1NlYXJjaCByb3V0ZXIgY29uZmlnIGZvciBBZG1pbiBpbnRlcmZhY2UgLSBJbnZhbGlkJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ0tlcm5lbC9Db25maWcvRmlsZXMvWE1ML1Rlc3QueG1sJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6Q29uZmlndXJhdGlvbjo6TmF2aWdhdGlvbildLAogICAgICAgIEZyYW1ld29yayA9PiAnNi4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwiRU9GIiwKPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkZyYW1ld29yayI+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6U2VhcmNoIyMjQWRtaW5TeXN0ZW1Db25maWd1cmF0aW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZG1pbjwvTmF2aWdhdGlvbj4KJFNldHRpbmdUZW1wbGF0ZQogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnU2VhcmNoIHJvdXRlciBjb25maWcgZm9yIEFnZW50IGludGVyZmFjZSAtIFZhbGlkJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ0tlcm5lbC9Db25maWcvRmlsZXMvWE1ML1Rlc3QueG1sJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6Q29uZmlndXJhdGlvbjo6TmF2aWdhdGlvbildLAogICAgICAgIEZyYW1ld29yayA9PiAnNi4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwiRU9GIiwKPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkZyYW1ld29yayI+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6U2VhcmNoIyMjQWdlbnRDdXN0b21lckluZm9ybWF0aW9uQ2VudGVyIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uOjpNYWluTWVudTo6U2VhcmNoPC9OYXZpZ2F0aW9uPgokU2V0dGluZ1RlbXBsYXRlCiAgICA8L1NldHRpbmc+Cjwvb3RvYm9fY29uZmlnPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdTZWFyY2ggcm91dGVyIGNvbmZpZyBmb3IgQWdlbnQgaW50ZXJmYWNlIC0gSW52YWxpZCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICdLZXJuZWwvQ29uZmlnL0ZpbGVzL1hNTC9UZXN0LnhtbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpYTUw6OkNvbmZpZ3VyYXRpb246Ok5hdmlnYXRpb24pXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8IkVPRiIsCjxvdG9ib19jb25maWcgdmVyc2lvbj0iMi4wIiBpbml0PSJGcmFtZXdvcmsiPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6OlNlYXJjaCMjI0FnZW50Q3VzdG9tZXJJbmZvcm1hdGlvbkNlbnRlciIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ8L05hdmlnYXRpb24+CiRTZXR0aW5nVGVtcGxhdGUKICAgIDwvU2V0dGluZz4KPC9vdG9ib19jb25maWc+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ091dHB1dCBmaWx0ZXJzIC0gVmFsaWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvVGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6WE1MOjpDb25maWd1cmF0aW9uOjpOYXZpZ2F0aW9uKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCJFT0YiLAo8b3RvYm9fY29uZmlnIHZlcnNpb249IjIuMCIgaW5pdD0iRnJhbWV3b3JrIj4KICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpPdXRwdXQ6OkZpbHRlclRleHQjIyNBQUFVUkwiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkJhc2U6Ok91dHB1dEZpbHRlcjwvTmF2aWdhdGlvbj4KJFNldHRpbmdUZW1wbGF0ZQogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnT3V0cHV0IGZpbHRlcnMgLSBJbnZhbGlkJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ0tlcm5lbC9Db25maWcvRmlsZXMvWE1ML1Rlc3QueG1sJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6Q29uZmlndXJhdGlvbjo6TmF2aWdhdGlvbildLAogICAgICAgIEZyYW1ld29yayA9PiAnNi4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwiRU9GIiwKPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkZyYW1ld29yayI+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6T3V0cHV0OjpGaWx0ZXJUZXh0IyMjQUFBVVJMIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpCYXNlPC9OYXZpZ2F0aW9uPgokU2V0dGluZ1RlbXBsYXRlCiAgICA8L1NldHRpbmc+Cjwvb3RvYm9fY29uZmlnPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdGcm9udGVuZCB2aWV3cyAtIFZhbGlkJywKICAgICAgICBGaWxlbmFtZSAgPT4gJ0tlcm5lbC9Db25maWcvRmlsZXMvWE1ML1Rlc3QueG1sJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6Q29uZmlndXJhdGlvbjo6TmF2aWdhdGlvbildLAogICAgICAgIEZyYW1ld29yayA9PiAnNi4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwiRU9GIiwKPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkZyYW1ld29yayI+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpab29tUmljaFRleHRGb3JjZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldFpvb208L05hdmlnYXRpb24+CiRTZXR0aW5nVGVtcGxhdGUKICAgIDwvU2V0dGluZz4KPC9vdG9ib19jb25maWc+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0Zyb250ZW5kIHZpZXdzIC0gSW52YWxpZCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICdLZXJuZWwvQ29uZmlnL0ZpbGVzL1hNTC9UZXN0LnhtbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpYTUw6OkNvbmZpZ3VyYXRpb246Ok5hdmlnYXRpb24pXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8IkVPRiIsCjxvdG9ib19jb25maWcgdmVyc2lvbj0iMi4wIiBpbml0PSJGcmFtZXdvcmsiPgogICAgPFNldHRpbmcgTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6Wm9vbVJpY2hUZXh0Rm9yY2UiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpUaWNrZXRab29tOjpWaWV3OjpSaWNoVGV4dDwvTmF2aWdhdGlvbj4KJFNldHRpbmdUZW1wbGF0ZQogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnRnJvbnRlbmQgdmlld3MgKE9UT0JPIDcrKSAtIEludmFsaWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvVGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6WE1MOjpDb25maWd1cmF0aW9uOjpOYXZpZ2F0aW9uKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc2LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCJFT0YiLAo8b3RvYm9fY29uZmlnIHZlcnNpb249IjIuMCIgaW5pdD0iRnJhbWV3b3JrIj4KICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0TWVzc2FnZSMjI0R5bmFtaWNGaWVsZCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6Q3VzdG9tZXI6OlRpY2tldDo6Vmlldzo6TWVzc2FnZTwvTmF2aWdhdGlvbj4KJFNldHRpbmdUZW1wbGF0ZQogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAopOwoKc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczo6UnVuKCBUZXN0cyA9PiBcQFRlc3RzICk7Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/XML/Configuration/YAMLIndentation.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIHNjcmlwdHM6OnRlc3Q6Ok9UT0JPQ29kZVBvbGljeVBsdWdpbnM7Cgpza2lwX2FsbCgnVGlkeUFsbCBwbHVnaW4gZG9lcyBub3QgZXhpc3QgaW4gQ29kZVBvbGljeScpOwoKbXkgQFRlc3RzID0gKAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnWUFNTCwgbm8gaW5kZW50YXRpb24nLAogICAgICAgIEZpbGVuYW1lICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvVGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6WE1MOjpDb25maWd1cmF0aW9uOjpZQU1MSW5kZW50YXRpb24pXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzguMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8IkVPRiIsCiAgICA8U2V0dGluZyBOYW1lPSJZQU1MVGVzdCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iWUFNTCI+PCFbQ0RBVEFbLS0tCktleTogVmFsdWUKXV0+PC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1lBTUwsIGVtcHR5JywKICAgICAgICBGaWxlbmFtZSAgPT4gJ0tlcm5lbC9Db25maWcvRmlsZXMvWE1ML1Rlc3QueG1sJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6Q29uZmlndXJhdGlvbjo6WUFNTEluZGVudGF0aW9uKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc4LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCJFT0YiLAogICAgPFNldHRpbmcgTmFtZT0iWUFNTFRlc3QiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IllBTUwiPjwhW0NEQVRBWy0tLQpdXT48L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnWUFNTCwgd2l0aCBpbmRlbnRhdGlvbicsCiAgICAgICAgRmlsZW5hbWUgID0+ICdLZXJuZWwvQ29uZmlnL0ZpbGVzL1hNTC9UZXN0LnhtbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpYTUw6OkNvbmZpZ3VyYXRpb246OllBTUxJbmRlbnRhdGlvbildLAogICAgICAgIEZyYW1ld29yayA9PiAnOC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwiRU9GIiwKICAgIDxTZXR0aW5nIE5hbWU9IllBTUxUZXN0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJZQU1MIj48IVtDREFUQVstLS0KICAgICAgICAgICAgS2V5OiBWYWx1ZQogICAgICAgICAgICBTdWJIYXNoOgogICAgICAgICAgICAgIFN1YktleTogU3ViVmFsdWUKICAgICAgICAgICAgXV0+PC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CkVPRgogICAgICAgIFJlc3VsdCA9PiA8PCJFT0YiLAogICAgPFNldHRpbmcgTmFtZT0iWUFNTFRlc3QiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IllBTUwiPjwhW0NEQVRBWy0tLQpLZXk6IFZhbHVlClN1Ykhhc2g6CiAgU3ViS2V5OiBTdWJWYWx1ZQpdXT48L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAopOwoKc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczo6UnVuKCBUZXN0cyA9PiBcQFRlc3RzICk7Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/XML/Configuration/YAMLValidator.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIHNjcmlwdHM6OnRlc3Q6Ok9UT0JPQ29kZVBvbGljeVBsdWdpbnM7Cgpza2lwX2FsbCgnVGlkeUFsbCBwbHVnaW4gZG9lcyBub3QgZXhpc3QgaW4gQ29kZVBvbGljeScpOwoKbXkgQFRlc3RzID0gKAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnWUFNTCwgbm8gZXJyb3InLAogICAgICAgIEZpbGVuYW1lICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvVGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6WE1MOjpDb25maWd1cmF0aW9uOjpZQU1MVmFsaWRhdG9yKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc4LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCJFT0YiLAogICAgPFNldHRpbmcgTmFtZT0iWUFNTFRlc3QiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IllBTUwiPjwhW0NEQVRBWy0tLQpLZXk6IFZhbHVlCiAgICAgICAgICAgIF1dPjwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdZQU1MLCBzeW50YXggZXJyb3InLAogICAgICAgIEZpbGVuYW1lICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvVGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6WE1MOjpDb25maWd1cmF0aW9uOjpZQU1MVmFsaWRhdG9yKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc4LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCJFT0YiLAogICAgPFNldHRpbmcgTmFtZT0iWUFNTFRlc3QiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IllBTUwiPjwhW0NEQVRBWy0tLQo6IHdyb25nIHN5bnRheAogICAgICAgICAgICBdXT48L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAopOwoKc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczo6UnVuKCBUZXN0cyA9PiBcQFRlc3RzICk7Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/XML/Configuration/UnitTestBlacklist.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIHNjcmlwdHM6OnRlc3Q6Ok9UT0JPQ29kZVBvbGljeVBsdWdpbnM7CgpteSAkUmFuZG9tSUQgPSBqb2luICdfJywgJ3Rlc3QnLCB0aW1lKCksICQkOwoKbXkgQFRlc3RzID0gKAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnVGhlcmUgaXMgb3ZlcnJpZGRlbiB1bml0IHRlc3QnLAogICAgICAgIEZpbGVuYW1lICA9PiAnS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvVGVzdC54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6WE1MOjpDb25maWd1cmF0aW9uOjpVbml0VGVzdEJsYWNrbGlzdCldLAogICAgICAgIEZyYW1ld29yayA9PiAnNi4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwiRU9GIiwKICAgIDxTZXR0aW5nIE5hbWU9IlVuaXRUZXN0OjpCbGFja2xpc3QjIyMxMDAtT1RPQk9Db2RlUG9saWN5IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkJsYWNrbGlzdCBvdmVycmlkZGVuIGZyYW1ld29yayB1bml0IHRlc3RzIHdoZW4gdGhpcyBwYWNrYWdlIGlzIGluc3RhbGxlZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OlVuaXRUZXN0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciPlNvbWVVbml0VGVzdEJsYWNrbGlzdCR7UmFuZG9tSUR9LnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyI+U29tZURpcmVjdG9yeS9Tb21lVW5pdFRlc3RCbGFja2xpc3Qke1JhbmRvbUlEfS50PC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CkVPRgogICAgICAgIEZpbGVMaXN0ID0+IFsKICAgICAgICAgICAgInNjcmlwdHMvdGVzdC9PVE9CT0NvZGVQb2xpY3lTb21lVW5pdFRlc3RCbGFja2xpc3Qke1JhbmRvbUlEfS50IiwKICAgICAgICAgICAgInNjcmlwdHMvdGVzdC9Tb21lRGlyZWN0b3J5L09UT0JPQ29kZVBvbGljeVNvbWVVbml0VGVzdEJsYWNrbGlzdCR7UmFuZG9tSUR9LnQiLAogICAgICAgIF0sCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnVGhlcmUgaXMgbm90IG92ZXJyaWRkZW4gdW5pdCB0ZXN0JywKICAgICAgICBGaWxlbmFtZSAgPT4gJ0tlcm5lbC9Db25maWcvRmlsZXMvWE1ML1Rlc3QueG1sJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6Q29uZmlndXJhdGlvbjo6VW5pdFRlc3RCbGFja2xpc3QpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8J0VPRicsCiAgICA8U2V0dGluZyBOYW1lPSJVbml0VGVzdDo6QmxhY2tsaXN0IyMjMTAwLU9UT0JPQ29kZVBvbGljeSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5CbGFja2xpc3Qgb3ZlcnJpZGRlbiBmcmFtZXdvcmsgdW5pdCB0ZXN0cyB3aGVuIHRoaXMgcGFja2FnZSBpcyBpbnN0YWxsZWQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpVbml0VGVzdDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU3RyaW5nIj5Tb21lVW5pdFRlc3RCbGFja2xpc3ROb25FeGlzdGVudC50PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciPlNvbWVEaXJlY3RvcnkvU29tZVVuaXRUZXN0QmxhY2tsaXN0Tm9uRXhpc3RlbnQudDwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgpFT0YKICAgICAgICBGaWxlTGlzdCAgPT4gW10sCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAopOwoKc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczo6UnVuKCBUZXN0cyA9PiBcQFRlc3RzICk7Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/XML/Database/KeyLength.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIHNjcmlwdHM6OnRlc3Q6Ok9UT0JPQ29kZVBvbGljeVBsdWdpbnM7CgpteSBAVGVzdHMgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdCdWcjMTMxOTksIGR5bmFtaWNfZmllbGRfb2JqX2lkX25hbWUgaXNzdWUnLAogICAgICAgIEZpbGVuYW1lICA9PiAnb3RvYm8tc2NoZW1hLnhtbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpYTUw6OkRhdGFiYXNlOjpLZXlMZW5ndGgpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8IkVPRiIsCjwhLS0gb2JqZWN0IG5hbWVzIGZvciBkeW5hbWljIGZpZWxkIHZhbHVlcyAtLT4KPFRhYmxlIE5hbWU9ImR5bmFtaWNfZmllbGRfb2JqX2lkX25hbWUiPgogICAgPENvbHVtbiBOYW1lPSJvYmplY3RfaWQiIFJlcXVpcmVkPSJ0cnVlIiBQcmltYXJ5S2V5PSJ0cnVlIiBBdXRvSW5jcmVtZW50PSJ0cnVlIiBUeXBlPSJJTlRFR0VSIi8+CiAgICA8Q29sdW1uIE5hbWU9Im9iamVjdF9uYW1lIiBSZXF1aXJlZD0idHJ1ZSIgU2l6ZT0iMjAwIiBUeXBlPSJWQVJDSEFSIi8+CiAgICA8Q29sdW1uIE5hbWU9Im9iamVjdF90eXBlIiBSZXF1aXJlZD0idHJ1ZSIgU2l6ZT0iMjAwIiBUeXBlPSJWQVJDSEFSIi8+CiAgICA8VW5pcXVlIE5hbWU9ImR5bmFtaWNfZmllbGRfb2JqZWN0X25hbWUiPgogICAgICAgIDxVbmlxdWVDb2x1bW4gTmFtZT0ib2JqZWN0X25hbWUiLz4KICAgICAgICA8VW5pcXVlQ29sdW1uIE5hbWU9Im9iamVjdF90eXBlIi8+CiAgICA8L1VuaXF1ZT4KPC9UYWJsZT4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnQnVnIzEzMTk5LCBkeW5hbWljX2ZpZWxkX29ial9pZF9uYW1lIGZpeCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICdvdG9iby1zY2hlbWEueG1sJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6RGF0YWJhc2U6OktleUxlbmd0aCldLAogICAgICAgIEZyYW1ld29yayA9PiAnNi4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwiRU9GIiwKPCEtLSBvYmplY3QgbmFtZXMgZm9yIGR5bmFtaWMgZmllbGQgdmFsdWVzIC0tPgo8VGFibGUgTmFtZT0iZHluYW1pY19maWVsZF9vYmpfaWRfbmFtZSI+CiAgICA8Q29sdW1uIE5hbWU9Im9iamVjdF9pZCIgUmVxdWlyZWQ9InRydWUiIFByaW1hcnlLZXk9InRydWUiIEF1dG9JbmNyZW1lbnQ9InRydWUiIFR5cGU9IklOVEVHRVIiLz4KICAgIDxDb2x1bW4gTmFtZT0ib2JqZWN0X25hbWUiIFJlcXVpcmVkPSJ0cnVlIiBTaXplPSIyMDAiIFR5cGU9IlZBUkNIQVIiLz4KICAgIDxDb2x1bW4gTmFtZT0ib2JqZWN0X3R5cGUiIFJlcXVpcmVkPSJ0cnVlIiBTaXplPSIxMDAiIFR5cGU9IlZBUkNIQVIiLz4KICAgIDxVbmlxdWUgTmFtZT0iZHluYW1pY19maWVsZF9vYmplY3RfbmFtZSI+CiAgICAgICAgPFVuaXF1ZUNvbHVtbiBOYW1lPSJvYmplY3RfbmFtZSIvPgogICAgICAgIDxVbmlxdWVDb2x1bW4gTmFtZT0ib2JqZWN0X3R5cGUiLz4KICAgIDwvVW5pcXVlPgo8L1RhYmxlPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdCdWcjMTMxOTksIGZvcm1fZHJhZnQgaXNzdWUnLAogICAgICAgIEZpbGVuYW1lICA9PiAnb3RvYm8tc2NoZW1hLnhtbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpYTUw6OkRhdGFiYXNlOjpLZXlMZW5ndGgpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8IkVPRiIsCjwhLS0gZm9ybV9kcmFmdCAtLT4KIDxUYWJsZUNyZWF0ZSBOYW1lPSJmb3JtX2RyYWZ0Ij4KICAgICA8Q29sdW1uIE5hbWU9ImlkIiBSZXF1aXJlZD0idHJ1ZSIgUHJpbWFyeUtleT0idHJ1ZSIgQXV0b0luY3JlbWVudD0idHJ1ZSIgVHlwZT0iSU5URUdFUiIgLz4KICAgICA8Q29sdW1uIE5hbWU9Im9iamVjdF90eXBlIiBSZXF1aXJlZD0idHJ1ZSIgU2l6ZT0iMjAwIiBUeXBlPSJWQVJDSEFSIiAvPgogICAgIDxDb2x1bW4gTmFtZT0ib2JqZWN0X2lkIiBSZXF1aXJlZD0idHJ1ZSIgVHlwZT0iSU5URUdFUiIgLz4KICAgICA8Q29sdW1uIE5hbWU9ImFjdGlvbiIgUmVxdWlyZWQ9InRydWUiIFNpemU9IjIwMCIgVHlwZT0iVkFSQ0hBUiIgLz4KICAgICA8Q29sdW1uIE5hbWU9InRpdGxlIiBSZXF1aXJlZD0iZmFsc2UiIFNpemU9IjI1NSIgVHlwZT0iVkFSQ0hBUiIgLz4KICAgICA8Q29sdW1uIE5hbWU9ImNvbnRlbnQiIFJlcXVpcmVkPSJ0cnVlIiBUeXBlPSJMT05HQkxPQiIgLz4KICAgICA8Q29sdW1uIE5hbWU9ImNyZWF0ZV90aW1lIiBSZXF1aXJlZD0idHJ1ZSIgVHlwZT0iREFURSIgLz4KICAgICA8Q29sdW1uIE5hbWU9ImNyZWF0ZV9ieSIgUmVxdWlyZWQ9InRydWUiIFR5cGU9IklOVEVHRVIiIC8+CiAgICAgPENvbHVtbiBOYW1lPSJjaGFuZ2VfdGltZSIgUmVxdWlyZWQ9InRydWUiIFR5cGU9IkRBVEUiIC8+CiAgICAgPENvbHVtbiBOYW1lPSJjaGFuZ2VfYnkiIFJlcXVpcmVkPSJ0cnVlIiBUeXBlPSJJTlRFR0VSIiAvPgogICAgIDxJbmRleCBOYW1lPSJmb3JtX2RyYWZ0X29iamVjdF90eXBlX29iamVjdF9pZF9hY3Rpb24iPgogICAgICAgICA8SW5kZXhDb2x1bW4gTmFtZT0ib2JqZWN0X3R5cGUiIC8+CiAgICAgICAgIDxJbmRleENvbHVtbiBOYW1lPSJvYmplY3RfaWQiIC8+CiAgICAgICAgIDxJbmRleENvbHVtbiBOYW1lPSJhY3Rpb24iIC8+CiAgICAgPC9JbmRleD4KICAgICA8Rm9yZWlnbktleSBGb3JlaWduVGFibGU9InVzZXJzIj4KICAgICAgICAgPFJlZmVyZW5jZSBMb2NhbD0iY3JlYXRlX2J5IiBGb3JlaWduPSJpZCIgLz4KICAgICAgICAgPFJlZmVyZW5jZSBMb2NhbD0iY2hhbmdlX2J5IiBGb3JlaWduPSJpZCIgLz4KICAgICA8L0ZvcmVpZ25LZXk+CjwvVGFibGVDcmVhdGU+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0J1ZyMxMzE5OSwgZm9ybV9kcmFmdCBmaXgnLAogICAgICAgIEZpbGVuYW1lICA9PiAnb3RvYm8tc2NoZW1hLnhtbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpYTUw6OkRhdGFiYXNlOjpLZXlMZW5ndGgpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8IkVPRiIsCjwhLS0gZm9ybV9kcmFmdCAtLT4KIDxUYWJsZUNyZWF0ZSBOYW1lPSJmb3JtX2RyYWZ0Ij4KICAgICA8Q29sdW1uIE5hbWU9ImlkIiBSZXF1aXJlZD0idHJ1ZSIgUHJpbWFyeUtleT0idHJ1ZSIgQXV0b0luY3JlbWVudD0idHJ1ZSIgVHlwZT0iSU5URUdFUiIgLz4KICAgICA8Q29sdW1uIE5hbWU9Im9iamVjdF90eXBlIiBSZXF1aXJlZD0idHJ1ZSIgU2l6ZT0iMTAwIiBUeXBlPSJWQVJDSEFSIiAvPgogICAgIDxDb2x1bW4gTmFtZT0ib2JqZWN0X2lkIiBSZXF1aXJlZD0idHJ1ZSIgVHlwZT0iSU5URUdFUiIgLz4KICAgICA8Q29sdW1uIE5hbWU9ImFjdGlvbiIgUmVxdWlyZWQ9InRydWUiIFNpemU9IjIwMCIgVHlwZT0iVkFSQ0hBUiIgLz4KICAgICA8Q29sdW1uIE5hbWU9InRpdGxlIiBSZXF1aXJlZD0iZmFsc2UiIFNpemU9IjI1NSIgVHlwZT0iVkFSQ0hBUiIgLz4KICAgICA8Q29sdW1uIE5hbWU9ImNvbnRlbnQiIFJlcXVpcmVkPSJ0cnVlIiBUeXBlPSJMT05HQkxPQiIgLz4KICAgICA8Q29sdW1uIE5hbWU9ImNyZWF0ZV90aW1lIiBSZXF1aXJlZD0idHJ1ZSIgVHlwZT0iREFURSIgLz4KICAgICA8Q29sdW1uIE5hbWU9ImNyZWF0ZV9ieSIgUmVxdWlyZWQ9InRydWUiIFR5cGU9IklOVEVHRVIiIC8+CiAgICAgPENvbHVtbiBOYW1lPSJjaGFuZ2VfdGltZSIgUmVxdWlyZWQ9InRydWUiIFR5cGU9IkRBVEUiIC8+CiAgICAgPENvbHVtbiBOYW1lPSJjaGFuZ2VfYnkiIFJlcXVpcmVkPSJ0cnVlIiBUeXBlPSJJTlRFR0VSIiAvPgogICAgIDxJbmRleCBOYW1lPSJmb3JtX2RyYWZ0X29iamVjdF90eXBlX29iamVjdF9pZF9hY3Rpb24iPgogICAgICAgICA8SW5kZXhDb2x1bW4gTmFtZT0ib2JqZWN0X3R5cGUiIC8+CiAgICAgICAgIDxJbmRleENvbHVtbiBOYW1lPSJvYmplY3RfaWQiIC8+CiAgICAgICAgIDxJbmRleENvbHVtbiBOYW1lPSJhY3Rpb24iIC8+CiAgICAgPC9JbmRleD4KICAgICA8Rm9yZWlnbktleSBGb3JlaWduVGFibGU9InVzZXJzIj4KICAgICAgICAgPFJlZmVyZW5jZSBMb2NhbD0iY3JlYXRlX2J5IiBGb3JlaWduPSJpZCIgLz4KICAgICAgICAgPFJlZmVyZW5jZSBMb2NhbD0iY2hhbmdlX2J5IiBGb3JlaWduPSJpZCIgLz4KICAgICA8L0ZvcmVpZ25LZXk+CjwvVGFibGVDcmVhdGU+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ09yZGVyIG9mIHNpemUgdGFncywgaW52YWxpZCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICdvdG9iby1zY2hlbWEueG1sJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6RGF0YWJhc2U6OktleUxlbmd0aCldLAogICAgICAgIEZyYW1ld29yayA9PiAnNi4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwiRU9GIiwKPCEtLSBvYmplY3QgbmFtZXMgZm9yIGR5bmFtaWMgZmllbGQgdmFsdWVzIC0tPgo8VGFibGUgTmFtZT0idGFibGVfbmFtZSI+CiAgICA8Q29sdW1uIE5hbWU9ImlkIiBSZXF1aXJlZD0idHJ1ZSIgUHJpbWFyeUtleT0idHJ1ZSIgQXV0b0luY3JlbWVudD0idHJ1ZSIgVHlwZT0iSU5URUdFUiIvPgogICAgPENvbHVtbiBOYW1lPSJjb2x1bW5fb25lIiBSZXF1aXJlZD0idHJ1ZSIgVHlwZT0iVkFSQ0hBUiIgU2l6ZT0iMTAwIi8+CiAgICA8Q29sdW1uIE5hbWU9ImNvbHVtbl90d28iIFJlcXVpcmVkPSJ0cnVlIiBTaXplPSIyMDAiIFR5cGU9IlZBUkNIQVIiLz4KICAgIDxDb2x1bW4gTmFtZT0iY29sdW1uX3RocmVlIiBSZXF1aXJlZD0idHJ1ZSIgVHlwZT0iVkFSQ0hBUiIgU2l6ZT0iMTAwIi8+CiAgICA8VW5pcXVlIE5hbWU9ImNvbHVtbl9vbmVfdHdvX3RocmVlIj4KICAgICAgICA8VW5pcXVlQ29sdW1uIE5hbWU9ImNvbHVtbl9vbmUiLz4KICAgICAgICA8VW5pcXVlQ29sdW1uIE5hbWU9ImNvbHVtbl90d28iLz4KICAgICAgICA8VW5pcXVlQ29sdW1uIE5hbWU9ImNvbHVtbl90aHJlZSIvPgogICAgPC9VbmlxdWU+CjwvVGFibGU+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1NpemUgdGFncyBpbiBrZXlzLCB2YWxpZCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICdvdG9iby1zY2hlbWEueG1sJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6RGF0YWJhc2U6OktleUxlbmd0aCldLAogICAgICAgIEZyYW1ld29yayA9PiAnNi4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwiRU9GIiwKPCEtLSBvYmplY3QgbmFtZXMgZm9yIGR5bmFtaWMgZmllbGQgdmFsdWVzIC0tPgo8VGFibGUgTmFtZT0idGFibGVfbmFtZSI+CiAgICA8Q29sdW1uIE5hbWU9ImlkIiBSZXF1aXJlZD0idHJ1ZSIgUHJpbWFyeUtleT0idHJ1ZSIgQXV0b0luY3JlbWVudD0idHJ1ZSIgVHlwZT0iSU5URUdFUiIvPgogICAgPENvbHVtbiBUeXBlPSJWQVJDSEFSIiBOYW1lPSJjb2x1bW5fb25lIiBSZXF1aXJlZD0idHJ1ZSIgU2l6ZT0iMTAwIi8+CiAgICA8Q29sdW1uIFJlcXVpcmVkPSJ0cnVlIiBTaXplPSIyMDAiIE5hbWU9ImNvbHVtbl90d28iIFR5cGU9IlZBUkNIQVIiLz4KICAgIDxDb2x1bW4gTmFtZT0iY29sdW1uX3RocmVlIiBUeXBlPSJWQVJDSEFSIiBSZXF1aXJlZD0idHJ1ZSIgU2l6ZT0iMTAwIi8+CiAgICA8SW5kZXggTmFtZT0iY29sdW1uX29uZV90d29fdGhyZWUiPgogICAgICAgIDxJbmRleENvbHVtbiBOYW1lPSJjb2x1bW5fb25lIi8+CiAgICAgICAgPEluZGV4Q29sdW1uIE5hbWU9ImNvbHVtbl90d28iIFNpemU9IjEwMCIvPgogICAgICAgIDxJbmRleENvbHVtbiBOYW1lPSJjb2x1bW5fdGhyZWUiLz4KICAgIDwvVW5pcXVlPgo8L1RhYmxlPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdJbnRlZ2VyIGNvbHVtbiwgdmFsaWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnb3RvYm8tc2NoZW1hLnhtbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpYTUw6OkRhdGFiYXNlOjpLZXlMZW5ndGgpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8IkVPRiIsCjwhLS0gb2JqZWN0IG5hbWVzIGZvciBkeW5hbWljIGZpZWxkIHZhbHVlcyAtLT4KPFRhYmxlIE5hbWU9InRhYmxlX25hbWUiPgogICAgPENvbHVtbiBOYW1lPSJpZCIgUmVxdWlyZWQ9InRydWUiIFByaW1hcnlLZXk9InRydWUiIEF1dG9JbmNyZW1lbnQ9InRydWUiIFR5cGU9IklOVEVHRVIiLz4KICAgIDxDb2x1bW4gVHlwZT0iVkFSQ0hBUiIgTmFtZT0iY29sdW1uX29uZSIgUmVxdWlyZWQ9InRydWUiIFNpemU9IjMyOSIvPgogICAgPENvbHVtbiBSZXF1aXJlZD0idHJ1ZSIgTmFtZT0iY29sdW1uX3R3byIgVHlwZT0iQklHSU5UIi8+CiAgICA8Q29sdW1uIE5hbWU9ImNvbHVtbl90aHJlZSIgUmVxdWlyZWQ9InRydWUiIFR5cGU9IkRFQ0lNQUwiIFNpemU9IjEwIi8+CiAgICA8SW5kZXggTmFtZT0iY29sdW1uX29uZV90d29fdGhyZWUiPgogICAgICAgIDxJbmRleENvbHVtbiBOYW1lPSJjb2x1bW5fb25lIi8+CiAgICAgICAgPEluZGV4Q29sdW1uIE5hbWU9ImNvbHVtbl90d28iLz4KICAgICAgICA8SW5kZXhDb2x1bW4gTmFtZT0iY29sdW1uX3RocmVlIi8+CiAgICA8L1VuaXF1ZT4KPC9UYWJsZT4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnSW50ZWdlciBjb2x1bW4sIGludmFsaWQnLAogICAgICAgIEZpbGVuYW1lICA9PiAnb3RvYm8tc2NoZW1hLnhtbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpYTUw6OkRhdGFiYXNlOjpLZXlMZW5ndGgpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzYuMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8IkVPRiIsCjwhLS0gb2JqZWN0IG5hbWVzIGZvciBkeW5hbWljIGZpZWxkIHZhbHVlcyAtLT4KPFRhYmxlIE5hbWU9InRhYmxlX25hbWUiPgogICAgPENvbHVtbiBOYW1lPSJpZCIgUmVxdWlyZWQ9InRydWUiIFByaW1hcnlLZXk9InRydWUiIEF1dG9JbmNyZW1lbnQ9InRydWUiIFR5cGU9IklOVEVHRVIiLz4KICAgIDxDb2x1bW4gVHlwZT0iVkFSQ0hBUiIgTmFtZT0iY29sdW1uX29uZSIgUmVxdWlyZWQ9InRydWUiIFNpemU9IjMzMCIvPgogICAgPENvbHVtbiBSZXF1aXJlZD0idHJ1ZSIgTmFtZT0iY29sdW1uX3R3byIgVHlwZT0iQklHSU5UIi8+CiAgICA8Q29sdW1uIE5hbWU9ImNvbHVtbl90aHJlZSIgUmVxdWlyZWQ9InRydWUiIFR5cGU9IkRFQ0lNQUwiIFNpemU9IjEwIi8+CiAgICA8SW5kZXggTmFtZT0iY29sdW1uX29uZV90d29fdGhyZWUiPgogICAgICAgIDxJbmRleENvbHVtbiBOYW1lPSJjb2x1bW5fb25lIi8+CiAgICAgICAgPEluZGV4Q29sdW1uIE5hbWU9ImNvbHVtbl90d28iLz4KICAgICAgICA8SW5kZXhDb2x1bW4gTmFtZT0iY29sdW1uX3RocmVlIi8+CiAgICA8L1VuaXF1ZT4KPC9UYWJsZT4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAopOwoKc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczo6UnVuKCBUZXN0cyA9PiBcQFRlc3RzICk7Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="scripts/test/OTOBOCodePolicyPlugins/XML/Database/RequiredNameAttribute.t" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBUZXN0Mjo6VjA7CgojIE9UT0JPIG1vZHVsZXMKdXNlIHNjcmlwdHM6OnRlc3Q6Ok9UT0JPQ29kZVBvbGljeVBsdWdpbnM7CgpteSBAVGVzdHMgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdVbmlxdWUgd2l0aCBuYW1lIE9UT0JPIDgnLAogICAgICAgIEZpbGVuYW1lICA9PiAnb3RvYm8tc2NoZW1hLnhtbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpYTUw6OkRhdGFiYXNlOjpYU0RWYWxpZGF0b3IpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzguMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8IkVPRiIsCjxUYWJsZSBOYW1lPSJkeW5hbWljX2ZpZWxkX29ial9pZF9uYW1lIj4KICAgIDxVbmlxdWUgTmFtZT0iZHluYW1pY19maWVsZF9vYmplY3RfbmFtZSI+CiAgICAgICAgPFVuaXF1ZUNvbHVtbiBOYW1lPSJvYmplY3RfbmFtZSIvPgogICAgICAgIDxVbmlxdWVDb2x1bW4gTmFtZT0ib2JqZWN0X3R5cGUiLz4KICAgIDwvVW5pcXVlPgo8L1RhYmxlPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdVbmlxdWUgd2l0aG91dCBuYW1lIE9UT0JPIDgnLAogICAgICAgIEZpbGVuYW1lICA9PiAnb3RvYm8tc2NoZW1hLnhtbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpYTUw6OkRhdGFiYXNlOjpYU0RWYWxpZGF0b3IpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzguMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8IkVPRiIsCjxUYWJsZSBOYW1lPSJkeW5hbWljX2ZpZWxkX29ial9pZF9uYW1lIj4KICAgIDxVbmlxdWU+CiAgICAgICAgPFVuaXF1ZUNvbHVtbiBOYW1lPSJvYmplY3RfbmFtZSIvPgogICAgICAgIDxVbmlxdWVDb2x1bW4gTmFtZT0ib2JqZWN0X3R5cGUiLz4KICAgIDwvVW5pcXVlPgo8L1RhYmxlPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdJbmRleCB3aXRoIG5hbWUgT1RPQk8gOCcsCiAgICAgICAgRmlsZW5hbWUgID0+ICdvdG9iby1zY2hlbWEueG1sJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6RGF0YWJhc2U6OlhTRFZhbGlkYXRvcildLAogICAgICAgIEZyYW1ld29yayA9PiAnOC4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwiRU9GIiwKPFRhYmxlIE5hbWU9ImR5bmFtaWNfZmllbGRfb2JqX2lkX25hbWUiPgogICAgPEluZGV4IE5hbWU9ImR5bmFtaWNfZmllbGRfb2JqZWN0X25hbWUiPgogICAgICAgIDxJbmRleENvbHVtbiBOYW1lPSJvYmplY3RfbmFtZSIvPgogICAgICAgIDxJbmRleENvbHVtbiBOYW1lPSJvYmplY3RfdHlwZSIvPgogICAgPC9JbmRleD4KPC9UYWJsZT4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDAsCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICA9PiAnSW5kZXggd2l0aG91dCBuYW1lIE9UT0JPIDgnLAogICAgICAgIEZpbGVuYW1lICA9PiAnb3RvYm8tc2NoZW1hLnhtbCcsCiAgICAgICAgUGx1Z2lucyAgID0+IFtxdyhUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpYTUw6OkRhdGFiYXNlOjpYU0RWYWxpZGF0b3IpXSwKICAgICAgICBGcmFtZXdvcmsgPT4gJzguMCcsCiAgICAgICAgU291cmNlICAgID0+IDw8IkVPRiIsCjxUYWJsZSBOYW1lPSJkeW5hbWljX2ZpZWxkX29ial9pZF9uYW1lIj4KICAgIDxJbmRleD4KICAgICAgICA8SW5kZXhDb2x1bW4gTmFtZT0ib2JqZWN0X25hbWUiLz4KICAgICAgICA8SW5kZXhDb2x1bW4gTmFtZT0ib2JqZWN0X3R5cGUiLz4KICAgIDwvSW5kZXg+CjwvVGFibGU+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1VuaXF1ZSB3aXRoIG5hbWUgT1RPQk8gOScsCiAgICAgICAgRmlsZW5hbWUgID0+ICdvdG9iby1zY2hlbWEueG1sJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6RGF0YWJhc2U6OlhTRFZhbGlkYXRvcildLAogICAgICAgIEZyYW1ld29yayA9PiAnOS4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwiRU9GIiwKPFRhYmxlIE5hbWU9ImR5bmFtaWNfZmllbGRfb2JqX2lkX25hbWUiPgogICAgPFVuaXF1ZSBOYW1lPSJkeW5hbWljX2ZpZWxkX29iamVjdF9uYW1lIj4KICAgICAgICA8VW5pcXVlQ29sdW1uIE5hbWU9Im9iamVjdF9uYW1lIi8+CiAgICAgICAgPFVuaXF1ZUNvbHVtbiBOYW1lPSJvYmplY3RfdHlwZSIvPgogICAgPC9VbmlxdWU+CjwvVGFibGU+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAwLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ1VuaXF1ZSB3aXRob3V0IG5hbWUgT1RPQk8gOScsCiAgICAgICAgVG9kbyAgICAgID0+ICdpdCBpcyBub3Qgb2J2aW91cyB3aGV0aGVyIHRoaXMgWE1MIHNuaXBwZXQgaXMgZmluZScsCiAgICAgICAgRmlsZW5hbWUgID0+ICdvdG9iby1zY2hlbWEueG1sJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6RGF0YWJhc2U6OlhTRFZhbGlkYXRvcildLAogICAgICAgIEZyYW1ld29yayA9PiAnOS4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwiRU9GIiwKPFRhYmxlIE5hbWU9ImR5bmFtaWNfZmllbGRfb2JqX2lkX25hbWUiPgogICAgPFVuaXF1ZT4KICAgICAgICA8VW5pcXVlQ29sdW1uIE5hbWU9Im9iamVjdF9uYW1lIi8+CiAgICAgICAgPFVuaXF1ZUNvbHVtbiBOYW1lPSJvYmplY3RfdHlwZSIvPgogICAgPC9VbmlxdWU+CjwvVGFibGU+CkVPRgogICAgICAgIEV4Y2VwdGlvbiA9PiAxLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgPT4gJ0luZGV4IHdpdGggbmFtZSBPVE9CTyA5JywKICAgICAgICBGaWxlbmFtZSAgPT4gJ290b2JvLXNjaGVtYS54bWwnLAogICAgICAgIFBsdWdpbnMgICA9PiBbcXcoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6WE1MOjpEYXRhYmFzZTo6WFNEVmFsaWRhdG9yKV0sCiAgICAgICAgRnJhbWV3b3JrID0+ICc5LjAnLAogICAgICAgIFNvdXJjZSAgICA9PiA8PCJFT0YiLAo8VGFibGUgTmFtZT0iZHluYW1pY19maWVsZF9vYmpfaWRfbmFtZSI+CiAgICA8SW5kZXggTmFtZT0iZHluYW1pY19maWVsZF9vYmplY3RfbmFtZSI+CiAgICAgICAgPEluZGV4Q29sdW1uIE5hbWU9Im9iamVjdF9uYW1lIi8+CiAgICAgICAgPEluZGV4Q29sdW1uIE5hbWU9Im9iamVjdF90eXBlIi8+CiAgICA8L0luZGV4Pgo8L1RhYmxlPgpFT0YKICAgICAgICBFeGNlcHRpb24gPT4gMCwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgID0+ICdJbmRleCB3aXRob3V0IG5hbWUgT1RPQk8gOScsCiAgICAgICAgVG9kbyAgICAgID0+ICdpdCBpcyBub3Qgb2J2aW91cyB3aGV0aGVyIHRoaXMgWE1MIHNuaXBwZXQgaXMgZmluZScsCiAgICAgICAgRmlsZW5hbWUgID0+ICdvdG9iby1zY2hlbWEueG1sJywKICAgICAgICBQbHVnaW5zICAgPT4gW3F3KFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlhNTDo6RGF0YWJhc2U6OlhTRFZhbGlkYXRvcildLAogICAgICAgIEZyYW1ld29yayA9PiAnOS4wJywKICAgICAgICBTb3VyY2UgICAgPT4gPDwiRU9GIiwKPFRhYmxlIE5hbWU9ImR5bmFtaWNfZmllbGRfb2JqX2lkX25hbWUiPgogICAgPEluZGV4PgogICAgICAgIDxJbmRleENvbHVtbiBOYW1lPSJvYmplY3RfbmFtZSIvPgogICAgICAgIDxJbmRleENvbHVtbiBOYW1lPSJvYmplY3RfdHlwZSIvPgogICAgPC9JbmRleD4KPC9UYWJsZT4KRU9GCiAgICAgICAgRXhjZXB0aW9uID0+IDEsCiAgICB9LAopOwoKc2NyaXB0czo6dGVzdDo6T1RPQk9Db2RlUG9saWN5UGx1Z2luczo6UnVuKCBUZXN0cyA9PiBcQFRlc3RzICk7Cgpkb25lX3Rlc3Rpbmc7Cg==</File>
        <File Location="doc/en/CodePolicy.pdf" Permission="644" Encode="Base64">JVBERi0xLjUKJeTw7fgKNCAwIG9iago8PC9UeXBlL1hPYmplY3QvU3VidHlwZS9JbWFnZS9XaWR0aCA4MjgvSGVpZ2h0IDI1My9Db2xvclNwYWNlL0RldmljZUdyYXkvQml0c1BlckNvbXBvbmVudAo4L0RlY29kZVBhcm1zPDwvQml0c1BlckNvbXBvbmVudCA4L0NvbG9ycyAxL0NvbHVtbnMgODI4L1ByZWRpY3RvciAyPj4vRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aAoyNDQzPj4Kc3RyZWFtCnja7d2LddpYAgZgUkGYCqKtIGwFZisIqWCYCsJUsGwFw1QwuIJlKli5gpUrGKhgTQVZJ465AoORhB7X6PvOmXMSGzsaSf/VfWswAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgF5LktEwSR7/kC3WNf3K8TSp/LOr5cN1nufZ5PxnsodsnTV5EE9XJh2s19mDW/+yUzke34S/bcf1XLflz5f89P34Gq/qMP1Y8JPb1WrV1FHkr8wmS9NMBKpdzcnk0+FlS+q4bef/vOzn70dXeLbTmxIf3i4WjZQfk38ffGGTLlNJKP/wPvZw+HVRw69+eH/hL/jH9V3P0X/LfX47XzRwFNmRZ99muVyLQwnT+YejX//XvIb201+X/oY6jiK2ouo/ZX/iblL/o+fr8S/fzqXn0uTEkp1fF7JTX+vzfHakp/BlnJ+uev+yrOEfWH+48Bf8PZOdRsKz+nTyW7/P9bud7SGYfzn9zc2ojhP4okVatrYyHshOI+F57Si205V0vH72lq88FDaTeq7V7LeLojN5kJ06y7J8bf2PV77559Sj5xWnuo/vBoOHbL2q69wlk+GJ7+z+/bv0VL3iKsccQnZuT7csRsPkoGS7ndZ8HMl08PhUTz40WnZeZX1t+bK+u02ztMUh5q919kq8yey83gGfjKd7rdGmuutHyXj8saH27lVG58XQdpND2LJTJTvfPrr42E7b78jg+OD3mZwcK2rSgzHLu2X7pYzsFHiS5GfONDtOnEynTdcSrzE6d/O0g6OQnSJhyIWn8Xv5cLBPeM5FZzNNOzkM2Sn0IMnNfnvXeFV+NnsvPMXbOp3dubJTKDtJtrudPzffIk2WN8Jz2t4swPtpZ32RslOsARNqba2cqNk8/+jR23aq9Tm4nXU3BiY7xbIT5l23M8titMq3eq5wInv19uAfMdTXZKfEfbmbFLhJ2q/U17OO6yrkas9dP5Blp2B2Qm/Bu3aOcLjKNXqucUphNfk1ix3XZWWnYHbC7Kl3bR1jfpb1FS4DqdYQ/C2eZmBfsxOuQbzZyVfbtqO14DyeknWosXU+5aKv2QlRiDc7e+H5cyI5e31s3VdjZSfi7OwNoOtr21sCHUH3iewUvCcXXzrITr5DVnfB3mMngqJEdsr2s22HbR5nrr/Agyf32IlhroXslB3fabf8zzWOPXjCYyeKAS/ZKZadUOS13L2Tq7X1/cGTK0eiuFtlp9gdGW7hzy2vTgwzH/s+JzRcg00ykJ03k50wnP1Ty7WF3K4kP/V7Zk4oReIYKZadQtkJN3D7rY5wy/R7PnWoNkcyvU92Sq59a//+DVWVfo+PhqkgkWziIDtFshM+3UWRF/bi73WlLXTXR7JP7dee1gfCXqkFLkSur6uLIiYMy/a60vY1rp6C3LDF39b9rDyfH+ocLsJodic17bDurs89baHJGcu+W8/lb+/2AXuuAZztstnb9bibDp5dAXeVbxEr3dyJZpzrqULQv62PfywtO1NmJJNpfmOJjob2w3h6jxs84SS8i+aYksd6QJr28GJMHgvxg1esTcf7VenR/hZ6tW/lXlBob/V4asGuq9PcpHgfRSc18PKqko2zPi8f/Rpbc4cX1df4ouO+2TsHlp/HfHWOR6fDVc/qK+U3mKCTq3PcZr7s6tB2w4KyIztvMTuPd+60o0fPbl5Duwvv4rw679yq8Xl4f+4TXb0DtJPNEuIS+hpl5+31FXzXzayYMC7Y2xtH8RG3vV3CYwqPCkuk2RmPs2zdw6sxHI8O3+w6PXin8bF36HbRVJWdKOtsT9O1ejhu8L0g287OPEaGo/F4f8S0i+mg6mwxFh/Pc3R7F57nOkCB7QeG01n++dPBCjSV/Vx2Ilm9kxt169kahOH/fvxhkxQq+PPvkmq/1qaPOsbxnb6ufQuXolihMVqG+dTtD1AaG41xTo411wWLsfy+6q2XfObkxDinT3aKBiG3r3rryzfNBY2x/JCdwg+R0NnVdqsjLLru8Rzi+Na+yU7xCthu6XPbe4Na+7ZXdH1eyc5by064ei2fLGuu9x6+sVRcZad4dsLyzZar3LtJqn3e6yOchU0iO28tO62/J/6HsJdcr5cbx7u3oeyUuXqtNldDlS2Wmn4nQqsvkh4T2SmRnY6mxoTNsHs9/X43FSSWcXzZqZSdVmcw7bLT83dd7x77kcwfk51K2Wm1r3j3z/b7HSK7eVSxFCHtZOfbuph0cVH/6nQ6yi78FW81O8/vCux1L9v3e2Dx7UREs4dtK9l5auxetL/Z0wucNuO6ntaVpuV2tRRgtPrWwXc/fuh5dgbD6fAhjWUJQivZee4gueDiP28lUNvASqXshA0NWm60D0fjQbYaEJU2srN76V/lOZShe7KuZmKl7OjwouXshP02KzZ2c1OY62poVMrO7n/EduK0nZ1q4UmysGizy+yE8f2+v62dtrIThuMrhSe/6qy2jTaqZCeM7/e8s5jWsrO3WW3p2y6/2rm+o6yQnTAVtG+bO9BZdnJ9u+XDk2vr1NnOqJCd0FPQ+4EWWsvOXq2tXGPhaTis7hpblezkNg31Bhhay06+yfJYbE+KVnnyr5iu9+VRpbOz7Phl1/Q0O3tdZY8337xYwb33iul6W+gls9NMowvZKdtseXz0zM7fscl8f2v1Wju3SmVn/0g8dmg1O4fhGdzNX79nh7PZ++aiUyI7yWRy0+CBIDulwzO4W5yeoTWaHb7Oo+Y7NmTn9rXGV5KMDl9o1fNFNHSQnf02w1PtZ7lKj5b00xefnNUbnQIvSDzBbGbaz85guLp58bVtmmb5l+CMRqPJy5fe1P969qrZER26yM7BIGkuGtngIRsMR0ffFfWtdjep/YatmB3RoaPsHPY6F9PEoVXLTjRLFokpOy2NlQ/nX0r+xP20iYWCVbJTdFiKfthtttjafnHjxccI7tewQ2thtzMPHY60QNqc3jidF624bReLpu7X7GOpj29X87W7hb061NNMs82k1R0UiqWnweQcGW56xSZd2SyAl2aTWjdvKlpzm/58rp2zWDV6UMP56OZceB8LlPU6yzxxiOuJN5l8Oh2c5coNC6fjMx4fKfvvszQVHDjf8BiOH/97+nM6yB5SpwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDL/B9n0iy4KZW5kc3RyZWFtCmVuZG9iago1IDAgb2JqCjw8L0NvbG9yU3BhY2UvRGV2aWNlUkdCL1NNYXNrIDQgMCBSL1R5cGUvWE9iamVjdC9TdWJ0eXBlL0ltYWdlL1dpZHRoIDgyOC9IZWlnaHQgMjUzL0JpdHNQZXJDb21wb25lbnQKOC9EZWNvZGVQYXJtczw8L0JpdHNQZXJDb21wb25lbnQgOC9Db2xvcnMgMy9Db2x1bW5zIDgyOC9QcmVkaWN0b3IgMTU+Pi9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoCjE4NDg+PgpzdHJlYW0KeNrt3Gtu2zoQgNG48JK6/xVkT6qBAEZao7FEkeLM8Bz0133gOpRIfqJyfdu27QMAgNh+GQIAANEGAIBoAwAQbQAAiDYAAEQbAIBoAwBAtAEAINoAAEQbAACiDQBAtAEAINoAABBtAACiDQAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQCINgAARBsAAKINAEC0AQAg2gAAEG0AAKINAADRBgAg2gAAEG0AAIg2AADRBgCAaAMAQLQBAIg2AABEGwAAog0AQLQBACDaAABEGwAAog0AANEGACDaAAAQbQAAiDYAANEGAIBoAwAQbQAAiDYAAEQbAIBoAwBAtAEAINoAAEQbAACiDQAA0QYAINoAABBtAACiDQAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQCINgAARBsAAKINAEC0AQAg2gAAEG0AAKINAADRBgCAaAMAEG0AAIg2AADRBgCAaAMAQLQBABRzNwSF3W6/f/4Htu1zzR88rKpXBNPHzW8Zp8P9sG2bUVh5wa034fMWmyUYc8cUsJ7zAydtqy+1j3+30jzPXmzAcxYvniANq5mhK8/vtKWf1TLFSg0lbzxz4eTWYADrcdJmhTUmQOhJ7dzIAPLFSVvWRyjjAHgew64h2jDxUvI0CboNO4how2RDeoJuM4yINubNsWKJoHjAYmg1cwog2lBsum34JxedwDWrmW5LmQS+XHeFXJMC4y6EsWWRBWfQrd6w0Jl0HTcIg5mLr/yoOSHNQyCF52Ll4Kd5kff96qKNlMVm7gGpK2TP6qcz+oav8UzE77QVKTa/DgVU6g+aN4KGMXTMKdq4qNjkGqDbODmGuk20MXbOyDXAakmvDcKoijY8jAJY33Kkm24TbfSfKlY0AEZsGbpNtNFtknglCugMdJtoI0GxGS4AdLBow3wDoPI+snMrcdgm2mifGIoNgIDbE6LNlFBsAAxhTxFtmF0AlNpZHLaJNkwGAJwIINpMKgDotMU4XxBt7JoGig0AEG0A5H6y5TyHbaKNDhPAMRsAQboN0YYpBEACDttEGwC0JIIn276Mp2jD8woAINo88QB4suWqrcd1EW0AcKwMPNmyrLshyPWsA1ByaXKQA285aQv3EImdDFa7mfevjSadBU20ARYyuHoKPFrt64/JmIJzh+m8HhUH7Lo0/6xWLhZVl6DmW92ODqINJDWEvtWvyTVzELweBcBTE8ZZtAGAkgDRlotf+ACsbBZPEG0AVE5D6QaiLQrn/4C16226GXBEGwAkoNsQbQDQ6OIXBbqNZfmeNmjZKrzOZoX7fP+t/voF1KM/pDmIaAN2PdnbM3Crv3Zbl/+iboP/8XoUGjcV72hwq5/3CK/nH5cARFvu5RJXDRa5mY/WmwmIaAOAmXnk1A1E2/yHSIMA0HHBdNiGaAMAD7og2gBAt8Xj5FK0AcCobtMZiDY84gAAog0ASMXbatHmjgfAyjmftz2iDXMGABBtAMB4zjtFGwCc5R0Fog0PKwBAFHdDIOmgr9djj6Q3dpkfBOxNNThpc/fD2ND5yPn2qswPYlHFMIo2Os+Nx18xYShZbBlzR5xhb7I3BeT1qGca4ECxPf6uyYu9iSmctAEhYsiHBBBtgCRSbG4bEG0AJTZgZQCINoDoebT/I/mNH3cLiDYgvf1BE2onVmyL3HUg2gASd5uDnMhcHfjOV34Ak7fkWSclR4PAiY5ig7mctAGdHY2bKXuzYgueazsvkOvCUpy0AUO67VAVXXnk1tCIyiBsTINoA7i62y5It7YgUGxhW82lQbQBTOu2QenWfH4jC86P4bi7y0VBtAFM7rbviXBmbz7ZGbIAEG2AbmsMr7ch1etASLEFv6kMAqINYNQW2yWnrnlJpwkUGwTkKz8Ae+1fH1ITuItAtAF23E8fDz0NbbweBSaEkf8VERcIjnLSBjaSOUMXZ/Rcx8iD4IANnpy0AZNDYeKpmxoQkZDIbds2owDvp8pLWNhURo+wJih/FVwXEG2AaNAEQDVejwKBPKOqb71pNUC0AYytt7aGU2mAaAOY33AAC/KVHwAAog0AANEGACDaAAAQbQAAiDYAANEGAIBoAwBAtAEAiDYAAEQbAIBoAwBAtAEAINoAAEQbAACiDQAA0QYAINoAABBtAACINgAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQAg2gAARBsAAKINAEC0AQAg2gAAEG0AAKINAADRBgCAaAMAEG0AAIg2AABEGwCAaAMAQLQBAIg2AABEGwAAog0AQLQBACDaAAAQbQAAog0AANEGACDaAAAQbQAAiDYAANEGAIBoAwBAtAEAiDYAAEQbAACiDQBAtAEAINoAAEQbAACiDQAA0QYAINoAABBtAACINgAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQAg2gAARBsAAKINAADRBgAg2gAAEG0AAKINAIBI/gCkqoRBCmVuZHN0cmVhbQplbmRvYmoKOCAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDMwMz4+CnN0cmVhbQp42nWRzU6EUAyF9z5FX4BOT+9/QlgYf6K7ieyMC2YAN07MrHx9ewEdEzXQNG1vv3Mu0JlAYg8oqb1Cx5NV9xav/+YzcSnR0YdVTWEfA53Ix/xVvNET7f/YQslsEq4silFqASWNhdWWU+IYYjWwezgJ3bwb5Lqn3R1IPaecQP1MztkxH6gBHAdV6sfnVkQhqDgki0lkiB2kXXvhIPDO+iIYfffSPy5QJFYEX6EoHMUsaOJcwoYcSufbhWaElYapa5yNZqMNWGvNdTIdl1CdLR+2PC1ajRd2yQx7ZfHlQg+bv2EUuGlVKsWIqdiBrCIH1Ng0bLdrYDvRC2QWCXK5C7iEoPUuGawBdpdgshmbXNauye36DYbx27Upz97cDj875n+dYOHf9r/+5f7qE8/dfWkKZW5kc3RyZWFtCmVuZG9iagoxMiAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDM0Pj4Kc3RyZWFtCnjaUyhUMFQwAEJDBXMjIDJQSM4F8tyBOJ0gHcgFAIfqDEcKZW5kc3RyZWFtCmVuZG9iagoyNyAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDcwMD4+CnN0cmVhbQp42u2YS2/bMAzH7/sU+gLWSJF6EAh8GLAV2K1bbsMOaWzvsh66y77+KNvxQ02Qos1ONdpGslLwIfPnP2XzZNCA/qCJTn/BHB/16k7/fj0bP+3Nxy9okC1xcGbfGRJnnXhTxWgjiNk3P3YADgGSA4gB4KEFIJznD1j/3H81n/cGrIOknxRZPzkF8+3uzOKfya9YCS5kt2AqjGLJpcEjtse6QqSQnae6SrqELeABdQRAEUAmHYOuNcNcc8UQpmDWKc6uNFGbnrlrb5OEhmAd+5PVpq4k8C5vEmDDteyGFA5N7ceMAteVi/kLkdrhuCoJ8MGPOeq6m/57HPu8dYsGiy9K2pErA+zglWnTwrZWjzCraSTrpszBuW68jT5HCZzqNGSJmg10NGdzbIe7l++qT2eTWTqUaDnSyqE6qysWGWceYJu9r9m1oskEeMJ1mS7q//RkvAEHzlv0oSQh0+qSYg+HUPNIQH6WacWfLinWDqZH3XUQwIaUCo8Xt2rDY4PiIhSrmv0/WFC0iFhi0SoWRFkRtJlAamfN67UwgmPudb4HJCtE1vumV003ymnWDgp1RbtBFTkzdFTLJ65mab26Jcgabyjj3QB6DxCsKvTNEJStoRcLTuaGs5KoDREcff+szy3uSQP6ru5CrZZdHfWRr2x37pZdXQQriaewl31dCGNr2+tVM7SsEq7uuJok8oXtDbFtdjugE0lZuwssbgO0HpUFphOPRhgl6xioXkE3qFIGQhXpJSB7Lk12fEOOCdgmH6dolxwTDGf88Qjdszy1pxfCX/pIpFGXPjaet9nr2GXBsl4XKNyuIyUMNqErkegPapKlrWnmNy9954lX3zSdxWLpZ8Nim70Fi1XNnsFiHJ+MJUne/M1KFYK3kdg8qp00X/423839OTHyNrDKZ4jRpnR6RcpU+rr/8A+jyfKSCmVuZHN0cmVhbQplbmRvYmoKMzAgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMTA+PgpzdHJlYW0KeNpTKFQwVDAAQkMFcyMgMlBIzgXy3IE4HSddqKBnbGlhqlAO5OmamZnqmRubKOQqmJhZILg5CsEKgQpOIQr6boYKlnqWZkZmCiFpYA3m5noWFhYKISnRNgaGJsYgbBcb4qXgGgK3IZALAFfEH9UKZW5kc3RyZWFtCmVuZG9iagozMyAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDI1OT4+CnN0cmVhbQp42mVQu27DMAzc+xX3A1ZIitYDMDwUfaDdgnorOtiJnaVGkam/X1pO3KCFRJyO0onk4QwG2WJEsU04zMaeLU4b3nfYPTGyy0ECuglea5dTgiSn2aM7vjdEwsT2AXO0GIn60DI1a64eiNVbnoiPSiJ9W0nMpupzq00R2KNVwGNbebuaTNDzyiUtN+OhhMhkOFxwbD+6Vzx2OMP5nGp8W9OiLlLEDA3pSj7xhv02lA2ek7PmfC4GBFoIC9irC4qqJBY7di8z4eHrRvsXbytXIdQuer3U3uha/Z+ViyBGl8zNzUZKQhQD0WA2ev49D1xm1aDORzVtkZglVwuuDe3vfgBUoGe1CmVuZHN0cmVhbQplbmRvYmoKMzYgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyMjM+PgpzdHJlYW0KeNptUDFuwzAM3PsKfsDqkZJFCTA0FEgLdAuqrehgx3aXZsjU74exY7dAC4kgj8cDjqQLMcEek4p90Ols6MXic89PlR6fmbLLUSLV2ZqSXMie6vjeAcJgkzKrxQT0seRubbUDOHhrAzwGiPSlETUWfS6hW+ZtqDCWujTeqNkEPa9Y0o2ZTkuIzJaHe57KR32lQ6ULOZ9TS983Y8EplM4UYtrAF73R8c9Wv1VNjK1TH+66Ha7Kf/ZvoqpLKa0X4GlcvARuXRA1fj8MkgAagcEO4/mnHnizvxk6PlwBIBJYUQplbmRzdHJlYW0KZW5kb2JqCjM5IDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMjk3Pj4Kc3RyZWFtCnjadZE7TwMxDIB3foX/wAU/EieWqhuQAImt4jbEcEevXejQib+P03twBZGHYlux/dmGCxCgb4LMfhA+zq49+z39eS8QzFTgy7XGQtQEZ4haFuUTXmEPDx3cPxFYMGWF7giRJUTJ0HAOxRJ0h7cdIhNiQl8RsVfEYUQUt/XWvncv1xAUg0TlGsNF4+ghJBjRHKIwYtbqdnV57G4JlQNrXhBn7YZxk0ByCqQKDaEGXRjLxDTQxNubM6cf3ipPEDOzbMpu1pAph1ziCt2S7ap/yzgX4afavUG8Q/JE5JMgyn7HahW3WkEaPN9RkNKAFP3tD0iHuPyofjJWn0lOpY1u7gmZj0uHNrMUK2nulKaQJa6tmtX/5umtrL+yj7OUqSwax98Z9nffLDaC/wplbmRzdHJlYW0KZW5kb2JqCjQyIDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMjQ4Pj4Kc3RyZWFtCnjabVDLbgMhDLz3K/wDUJuHAWnFoVJaqbeo3KoeNlm2l+aQU38/XmCjSK3Assf2IGbgCgQohyAYuQjni6A3ie97finw/EqQdGLDUFZpmqhdslCWzwnREJJQiYJERZw5p6m3/AnJWWkj0uLQmDkrE2SKc8puavuylAlbnZWV0SqEmTo2cZvUcwtjVsmnkWv+Ku9wKHAFbVP08Lt9zOmAAS7gOO7gBz7g+EfVI0sxex2sG7w77Mx/9CsOQccYuwNU1/YX65NmsQUfjLG1C0osopbsh+aUhhFDV1bs3UaJWcWx0zzAbbeb2J/o9WYu8+7Arun4dANbZGdOCmVuZHN0cmVhbQplbmRvYmoKNDUgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA0ODM+PgpzdHJlYW0KeNq1lD1v2zAQhvf+Cv4BsXe84xcQcCjQBuiWVlvRwZbkLM2QLv37fUlRSSwnQAbHNk0fRd/Hw5dnHg0bwptNdPiQmR5g3WLcX8yPxuYcxPyDNWSrwZsHoyFtxh/z09yZL6P5/I1Ntjm4YMaTUSdWJZrBRZuyN+P864bIMZEnvJToEIiOC5Fg7ZDL7/F7c8FqRYOrPpgtZYELsZm5uzguZWDCj3kpiim59tev43mmwVkX4pZqt85yfRFIiGxKbOA42LAF4sI1wKLF+WY/5xu1oLB8UzPvFSSiCaV5/7wWtc+9UnjsqT5BtgxchOQE3xLY/Lh9ZfHv/StJo0iO6/OWMC8zOXfCPF2EuUI4HELwcReTNBVQ4JwLO5gnIQ5KzAvxhAFt4RmxT/uUWgB5IRiU43AMm2McK+f1uB01G+qhtg7yrpY7YRy3ktd5lisTdpJtpAvC84cQDtinu5i4Jk3mlSykVElupsSGpsE+8LsAh2iz9svoVK8MSyhar3EPa/kQWN7mCussZr1lLBgqTZOu6gSCRamww4qt6vEwQyvbHQa8VakSyiDVnsugleyEXrPRru640X4PaRFvY+Y3SaNXSU6+96qAzaJPzaqbb3XW2szEYV9Ea02p4z7RPsbdp/8uG0jUCmVuZHN0cmVhbQplbmRvYmoKNDggMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyNjQ+PgpzdHJlYW0KeNptkMtOxDAMRfd8hX8gwXbeUpUFEiCxG5EdYtFO29kwi1nx+zhNU0YCtZbrx01zD9yAAOUhCCwvwvkq1avE5chPBR5fCJJOnj2UVZoctU0GyvwxIDIhiZQoSCyIo89paC03IVkjbUSaLTKPWXGQKY4p22Hbl6VMuH1nZWS0imCkVnOsk+W8BfMqedrzkj/LGzwXuIE2KTr4rhezOmCAK1gfe/EF73D64+pepbx3Ohi7646yKf/xr3wIOsbYCNBK210MJh2NjH+5mKX5SV48zdntllPaOdAyVztZeSc4cKLKacNXCdwpvO0K0TL1cyLS5Brj2udje8/tt4raiZ1YZ3B6+AHmBHKmCmVuZHN0cmVhbQplbmRvYmoKNTEgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyODI+PgpzdHJlYW0KeNqtkjtPwzAQx3c+xX2BmHvY55yEMiBBJbZCNsSQpkkXOpSFr885Tas+N+I49jn++3cPww4I0BtBZn8R+q1bC++bq3EHwUwFft2qLERNsIWo9cH4hg9YwnMLj68EFkxZoR0hsoQoGSrOobYE7frzCZEJMaE/EbFTxNWAKL7WWfPVvk1HUAwSlcsZFblcghHN8rK9yDvby4Qm2Ut77qVyYM0HN2frzM8TSGQOlH0foQadQX1qrPCouNokn0Y7xR2TFMjDRQeIf0UJ3hc3Fn82N8DuKOX9/wlKw4DMo4/9FeYfcKUeSS+YJUKiAalbI60Skuk9tmdYrE5zhjWFLPGY4tm8dxe8BCJeTM1+Gep6jnfkS9by4Q/aGo9PCmVuZHN0cmVhbQplbmRvYmoKNTQgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyNDQ+PgpzdHJlYW0KeNptkLtOBDEMRXu+wj+QYDtvaeQCaUGiWzEdopidBw1bbMXvrzPJLkigxPLYzh35XLgAAeohSKwXYT5r9aLxec9PIzw+ExRbIkcYN21ytr44GJf3AZEJSaVESWNFnKKUobXCCck7bSPS4pF5EsNJpzgV8cP+Xh8J4f4txuloU8FEreZcJ+u8B/Om+dTzKh/jKxxGuIB1JQf4rot5mzDBGXzMt+IL3uD4h+q3ysQYbHK+6+5lU/7Db2JKNufcHKDN7bu4zPWfOv8xxq0NqESFWiR05lK6EcpRecTEoH7gHCq7mNx9cEmoNG867W3/48MVahBjQAplbmRzdHJlYW0KZW5kb2JqCjU5IDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggNTgzPj4Kc3RyZWFtCnjatVW7jtswEOzzFfwBM7tcPgFDRYDkgHSXuAtSWJZ0Ta64a/L7maUoxZZtIAjubK8pktLMzj5E82LYEL5sksOPzOkZswfY09X4YmwpUcxvzHbF+hjMs/ExL5Nf5rt5NJ8O5uMXNsWW6KI5TMY7sV6S2blkcwnmMPzYEzkmCoSPJzpGon4kEqwdS/fz8LVCsLfio1OMYFNiIIgtzA3B565gyI7oFNYHPx8u/YzOupgWR9vswtMzGs9QEpzZMUUbG496CI6VqB8XojVAliGVAC34l8jm28ONxdenG5RwkdO8X+l4nMi5CePpiuYN6FzEfX7DqclgJJ9jJD4ORJMQIxe4vutDGyuDnGUbehAnK6U0bOQl7Gd4QLOMgIaV0qEgpCWwZ7VlxRe44olp0hq558JNakhlnxo16klxqhwPCz1Cu5YJYsUaMS9FI5bzHMbt4usNJiEbQ9jQrdJAA9PiVNUuHxf1ayAgrG5pnpEJPPVfcb5oqGHs2O9nD2h6I6Eol0C8oapCNZdqRUuGlY6chGprrrdSNQfJvUdZazRisUnytouGd+mibENxG04ahs7JfinvGpYmWTtr68etjIp2TvTri6fWUB/+do5CAVqTu5Moc3v5u+3l/qW95lUkbtlXHe6ujjNyvKOqzZHu2zheI7o8NyFaYC7R5lyFlNhuU6cd75cm6pjavQpRH+e61xxQpHGoxHWcUIXeN6f6dq3rfht6HBBScmgHRMThIn49Idr03mGGEyTg/RkTGiIv1XZN8fjhD2ZAm9cKZW5kc3RyZWFtCmVuZG9iagoxMDkgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA0Nzk+PgpzdHJlYW0KeNpdk09vm0AQxe98ij2mqiLYBXaNZCHxx0g+tGlLIvWKl7WDEi9owQd/+8K8TVQFyZZ+zDDz3mgmrI710Q4LC3+5UbdmYefB9s7M481pw07mMtiAC9YPevFE//raTUFY/eimn93VsLAti6e/7ffft0G/zZ3tH8vxvX98eW64ZL05I/X5PhkmPB/r9j4v5nq055Ht9wFj4Z+18ry4O3so+vFkvm3vnlxv3GAv7OGlaulNe5umd3M1dmFRkOdUjkObHnszT502rrMXE+yj9cnZvlmfPDC2/xJPYnx2OuvXzlF6sqav/zzfSEQgAeKgGLQDJUSxj6VEiY9JUAZSRKmvuQOloIxI+e41SIIORDsBaogKxNZiROiXQnWBfilUl1CWQnV5AEF1he4pVNc1CKprnwnVByhLobOJiST141EDon6cw5+MQQqUgFBTUj8ew4OUIJ+pQD6TpsQT34+68xRuZQkqQRWRhE5Zg3wHmiBXmKCkCfIMMRWBUFPBUYYJKjgqMEEFRwWmpOCoxAQVHFVQreChhhaV0er5HeMfG/exofxABniD7Djy2Yh/XVAhCkoTZFcIjF6QQZGghKj/b7ht/Xarn6eqb86tt0MHTVe5HdBgzefNT+O0fUW/fyHuA+oKZW5kc3RyZWFtCmVuZG9iagoxMTAgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA0Nzc+PgpzdHJlYW0KeNpdk09vozAQxe98Ch9brapgG+wgRUj8CVJW6m520x72SMBJ0TYGGTjk2y/Mc6tVkYL0Y8ae9yYzm+JQHmw3sc3R9c3JTOzS2daZsZ9dY9jZXDsbcMHarpk80bu51UOwKZ7r4Ud9M2yTHb//OT5/+zV3zd+xtu3Tb3Od32v39PpSccVac0H2y30wTHg+lKf7OJnbwV56ttsFjG2WY904uTt7yNr+bB7Xbz9da1xnr+zhtTjRl9M8DO/mZuzEwiBN6ToOeU3fmnGoG+NqezXBLlyelO2q5UkDY9svcZng2PnSvNWO0qMlfXnzdCURggSIgyRoC4qIpI/FRJGPKVAC0kSxv3NLtBWgiihTREsKEc7FqJ6jQozq+R6E6mUJQr3Sx1CvkkSKHPGwAtGdnEOLkiANikC4RZEjLqFMKZDP1CCfSY545OslRDE6oXJQDiqIFHqtSpCvsCfS6IuivvAEMR2CcKeGowRd0nCUoUsajjL0RcNRHoPgqIBqDQ8lVGt4KKFMw0MFkgmNkJ8V/jE5H5PG92SOV1AuQ5+NePxl0ISAbJmlRPhbBJkXEkIFmRcRygtqk9hmGJjwfzHrZK8r+bmRzezcsh+0t7R565J01nyu9tAP6yn6/QNez/+0CmVuZHN0cmVhbQplbmRvYmoKMTEzIDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMTM+PgpzdHJlYW0KeNqr/08d8AMAXstIMQplbmRzdHJlYW0KZW5kb2JqCjExNCAwIG9iago8PC9MZW5ndGgxIDE4NDMxL0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggODgwMD4+CnN0cmVhbQp42s18CXQbx5VgVTXQAMEDxH0DDTQOkgBPkCAlUiJI8BIpydRNyJJIipRoW6d1WVZsybGT2FE8ycyLx5mMkziXMp68GacpO7Zjy1cOP2dm33i9L5NN7J2dXa/frD0v82aT2bEnGwvc/6sbIEhRsuVxvIsSun9X/a76V/3/qwoUoYSQSnIXEUjLDVua2/Kj3+iAmkvwnZo5dULq6RamCKF+eP6T/UfnDp2aPXcGnh8npNo5d/D2/W9+4yYzITX/gZC68Zv2Tc/SI9OPENKJ+JmboMKwRuyH563wHL3p0InT92RN34Hn04QYf3XwyMz027/5V4WQ7CwhuvsPTZ8+KjxYs4mQgf8F+NLh6UP7TunWTxMyWEsIGz16bN/RVZmNRwgZ3gXt3yI61skuET20nWcTUDOm3uke0kaRC2Ik6kciBKgkVHsk4/sHZ8nXCfkdE95aEGHsh2mzROgXsY0J7BJ/RSDv9zkN5TA5jPjsTVZNyEKX7uHCq+ylhXfgObzwjvpcxCN/trBqSf3zy56L/f2M/GBJf+pzCU8hKUkh2yYG85I09hSp2TSmiFt2TijtPqUuP7VfOr9tQmGx6R8Ygf+ZGXmvLxxWSF4hOXngIsggN9XfqNCUIk3tb1RYSpqVlBfGFV1858U6asoNzgwq4uBEWBFi+c03ToTlsO/8hKSMj0NVNu+TlC6EuvJ5aV7Fnp5V6qBKe5KUFmxvQcwXxickoOb8tKSYxiemoEbCNhNCGYQyU76pfD7vU2gyn5cVMj6xL59vVISUBP3oYtNAmT43PqHo5X5FlPuBj7xCpxoVXUoGuqTZef3efglbkGKfSgFeFWFqcEYRGsLQmJPOS+dhgPkWfQyY3DQxNe6b3pyfkPPhvKRkt0xAmw9Z08ZvVPQpxZBLXiRMlZQIj3K/DBKX+6cVtne/QmeACkXf0KgYUhKSWpmbeUpH9krYg5KdyiPK1AAn1Zi6aKgkucH+hnBJ9hWppbowqb3QJJCQA76npMHz8jTqhcuL+FCmiuQDIotUgnbk6QF1iMqrvK5E4S3iW2St/KWqFGfoYqVJAGX75HC+IdyoVKfmGRtUZqcHGpWaFCBKklKVG8XXAZD780o1Pm2Gp2p4alTM0E0tF4kEEpiBcZWa3JR0fkpSakBojUptamzrxLxudiAfVar3yacbFUtqbNPE2Ba10heGehuvt6bmiTm3bWLebM4pdLpfMSfRZsGS++er8FINF4U6QRNCbHxiHoUH3PafB/3isA1hGV4rwj61HV+BqYA1eeBkGOgfhtqlqrqKAucJsckgrZxC1l6klHJd2VJknrDBrROKWe6XBpVKMD6TDAbXL03B8N+3WCipIf3956fmrWJS+WzSFwEx2YE3W7JRcaTmKd6dIGe8u1LzAt7dqXkd3j2peT3eval5Ee++1LwB7/7UvBHvgdR8Bd7rU3JR7oo4BRKWpSaF7sYJ0qg0lDU6S423qo3JssZ4qfGY2hhMEaU6+SH4CwF/QaBLAv7wHgb+8B4B/vAuA394jwJ/eI8Bf3iPA394TwB/eK8D/vCeSkk93EwbUzCsZUrKgW6nclyVMPVSaKtNKaUxqTTCLGyGCTAsXUWL8nSXjB7xmhg+5L6lpFrqVJob5vXUMTgBjgwZbC2XzJXNbSmpg9ObBjw6eOUgMDtXHBzrifNxHk0G1spd823Ugcy1gwCA4pUJhlkx3dWodKSaXD2NSub9UMGCZwC9E3RCnDGpSRrGmQ+yXHf+/LA8DK5iAkIEeFZwBxlKHXYQaRe4KKdSC2g68JoxjqZU5JL7zjfJktRzHvpbtRRFalL7UnRQA5iSMoVOI7tp4jEmCZLvMRYXvPl+dKRG8Mkyx5aHYArnls/HKXRmatxgualZsL7c9Cw0s9y0D+ApdGTL35kGssC9y0OgTBlGGAL+4MZHgf5WGERWXaYOvAQoQQ+Wpb+iV+gROYpxIuA6rrrKxbFA96uLcpCgVh/X5CD3gIi6S02KkbcPycM4KGqvpyQ+ZEaTMNk60ST1QMhF6rVKCekqqkCMwdO68uiuKm8ls9Y0JaNtrymjJFdU1RSmAMtZLqp3LTiKJpTikFKbmxj3QciUevJN803UDhO0d0nrZt/4ktbsiu9e642+lNKVvNaA/SllVfI80Ib2BUxdFRUU2qQ0wRs5zjLaZlEnaJYyTJYmmGdqrwPgdyCEFBGvw4iHPyq7RS7QRfXI4IXKLCSc12gcBN/alSzKYQieViXDsiYJjZMS08PAtEOd4JBewFy2NSntMJ9HrlK/DrqjdpvSAfBoSumE2xjKbRAELA1BLC1Kan0KTVgZA3BD6iI4KwA2AkARuCF1kfKacQB4zSbEGQRgM+IgsAVxENiKOAhsSz0GXq8PoO0AUQ7tSD1G1boJgNS6POJRhHYiHoduRDwO7UI8Du3GMXMA7MExEZjEMRGYwjERmEacIQD2Ig4CM4iDwCziILCP09UP0H5OF0JznC6EbuJ0IXQzpwuhWzhdCB3gdCF0kNOF0CGQ8eqSAg/zJ2UtgEdUsBfAoyh0/pSFp1shjGo4x1QQcY5zHKrhnICXu0u9nuRP/I1TKohv3KaCiH4a+tEQbldBRDijgojwCcDtKfV3B3/i6HeqIKKfVUFEPwdvagh3qSAifFIFEeFuwF1T6u8e/sTRP6WCiP5pFUT0z8CbGsK9KogI96kgInw29ViFjhWT1f6kYtynCNHx08U43Ag6E0gdrMQkWI9VEicJE9OTQVdtlUiElqQ1HW5zWOxyONJhyYgu6sx0WNrlMIPqTILGRYelTqYXZbmwUW5njH6d6fSFvR49/arAWGGa6dgl+fJ5WWan9Dp2+c8FqmPb9Zfv0jG2A+DL38W15Wqg4CJzkWpSN6bExyeylWAUrjGodZD1Pv5EJtWn/OOxMDM4kxlRjsSBkEy6zemwXIx4vRH8yrLspV/1wrUwg5kBXRhnEwt/w16BvuPz4uxA1kewtx3YNskAojcAWE2qYoLBkZwXyQCLd3So3TrsovyAPxiW/QGZTTj9Nr8TLgEHLnWJaeF37CT7IfGSAIllIwGqE+go0QE3OrqfCIJ9jFFOsd0t22S9wZOMYn+ReCIRNoic+vZOWybjanO6bLF0gp2MOK0BY3vh5+2GgMXrE35rlOzWkOGdws0v7+ur9IadttvP2Bx+d4WJbbc7mcN2+Ykf/iPhugNJsTnQnY34SYx0ZNtsKjUC0ekF3T4CatkNXNvHRKrXk92qJAOBQCwQTYSBDgNQR5xIXlGo6TZ4MsTjsuxIt2U6WKajncMsmrtvz29Rvu89l6xrro9deCTYWNuxtvEvH6dHtg/ctkf2sn6vfLFx0P7l+q/URQrn2lq6oy+CVOpgZb+NvUgSpCULFkcFSoSzRGBUYHcAbfpJotfbx4BU3STR6QK69fFEJBaJigZvkjjsBhBYIi5HRNFhd6bbOkE/LiQY6+PAQQYr2FZzrcdiaV01dFPXubk1jdYar9Vca944sffbe3d/ey6/np2XHXZHhav7wOCpMy6j0+as9RoSW755fP83b0yATlGO3wI51hIPSWXrudx0FAWnp4JQFJzFQojFY3G7HIBYkxHBbogTiSkTn1UVmCVN//be4eF79/wziuyfx3femL9wgV3a/fDevQ/vVkV1+clP79//6UIDzgMc3w7jS6Q5m7q29vg+Sygajqrai3LthbXhw23qoyOtArIjTH+Nc2IeyaA3eOWIr/DrN/D2BjUfl10eSSUm7PWEvouXH5AiPSagx0fqs3GsYYTu01OdTtjNLRxIczAkxUe8HXI0LBrcSdvioPbSHNUIevkXOP4vYh4/kjGID2ydEvY6I28jLSoFzggfG+3lc+wl0kzWZrvjVKcHe2aCKDDxrIGKRK8T9fuACDoJovGPgclwDxHgkmkmjXIc7CJuROvBibzETriyyuwJDCrT2cFnJKiO3RwJ7T0588jevY/MzKwzm8NuszWzOnuwt/dg1p9170Gqv03PyN6fybY10xf27r0wXWf0mj0xo6vvcB/8MxnvRlekye9TIL8QSWSjmm/YJ+pZmXcAakMkaIvJtpg2Cy2q2DrCZfJDZxRG6tjeSNTviRZejHt8MkK0N+5hlyK+y88hXW+/zWXaj9d/+AevrNJAXgYaqoktW8vNSDWgldzoy8Ve5VIvl5/T+HiLPQu+JZ6Vw9Yak44wOqoDB8/sY7TESIxEY00xvcFVxoYFfF1CjCcESzk3Lht4vjT7USzi98sXTN6aaq/pguT1SDGvOWh87b8ZfTXsWRj8WTQL+sX3qsyUmquovjDriwBlOU/UXFWYpzdUmUt2+gDwGCDRbNhjYitSFyD+WHwpdQm6lCqKd3YqKHtrfGLhj0IeN4DmgIEeDLnZJcl9+QdeucJI/1Nhm1uS3GzYK1eZCi30UbfEtz+5zb4CNmsGnYayfpy5mnmC99DME6wyooN5EhXLTBIssomVWSN43FcmHpqefmjHDrxO3J2Z6lkz2dExuaZnKvO7C1NTF2Zm+DV3KNt7OJc73Js9lFNpQFmkQRZ2oAE8rUh1ICEdwbnCduspygTTWLreAXHMEXIEAz7AtcpxA5hDyY+V2R74MnRm3P3Th3d1de1KP4qqkr1v2mIuV8z26KPs0pq5NT03rXmWawfspqBIab8/Hfq7oly6hCqQS4YMkdHscL2b6UU6aqR6EWax7iyoC13LWSLCTaRzxGAQJoHexWntQQ3m+rpXQRcdjaloNFYBk0WnEgt6jONULkXVziZWEisgAGNOlzrJ17I00QTcHlenP3srmpuOZ8fiHslZVVtd7bS4ZXlm4+l+VfK52zeucSU8oaaAJ2oR3XbT5f+sakHViD/qDHRIHqe5GseJuRLVMcu+B7arytn+wD6LS6itsdSaa/Q2E+3kalJVpupqYYHdD7qqI2mSyabDEAZjKIpR8PRg1nq6j5R8reYv6uvr0/Vtrc0dcgwchps7fjU4qhF6ic/lERJ4d4AA2KIW2Z3mKnPIbR9pTj0TcAeS4Iul9l2dmWSvKOiMNc9EnM6I9fXXd3prrGZrZf3ZaMMPi4rt2rumbdKfGq01h3wGqousCvub/f+j6K8bQcecEyLoiE4AjaLp0TuACzYJs8E/xiM9xrGAHudkmrTJ8Qa0PU/SGU9wB9ym6gqITRRnh6vosFFlMEVcQcY1/+bRVl/EbTPXrW/v2jS+4/X+Y0O9R2KBiMtc5d0d6x0cXr99rn341IApmnQHXHJVONgWa0xXS3/Ru7s1HnIFXXKFQ26OJ1M15uZNud7JNPARBMVsBZ1AFpwNotAFSAF4sOOzBoh2ErssRzVHgoGu6ES0CBJmbZGI76txvz/6VZQbvQS+w+sNXf7f3DlX4eQhqt+CHPIU+NUQjgUOi3tnxoq5rhobwGEsOi3VZxT9ddFZcLe1XRo6u2nTuaGo3x1tGK5PjjUGvexZCPQPbrlrZOSuLfQWnhY/2DJWVzfWQm/xqXEW+b2PPQ9TDGhwgPXRUfCci3GCzz53IqHj7gGMTQAi4uDQVWUVXflMTHy3QrJaAsZ39XUOS9D406eMQQt7LuKurrn8nM1ObVY2YDL7wnZbIUF/abXj2LUg3Ydh7Hqy4clYoEogkLSOKQFYANhgscBdlSCEij7cl3VCvghJADmrtWoN+Ww1UFlP6sBiEpiDFOk0gGsQVqLXldHoFk7VCz8Rg1arVPH5LwD91qD4E6HeY5fEP77bGLTZAsZPPCCG7ez5mL+i8vIlix2W/DRXeBYYslvYQGWFP+awFnpol9UB5mEt/DV90ergcoUkkQ1yuQayXpsJqAbJMroo2GgdLDlArwahOGk1El2uTq5eNlj5asTtkf+jtd7ldygXHAF3lB2yFP6W2xFl1O52eWX/v/w6GPWqflaGOdjEwpCOJcjnsiYXrLUqwI0wEKoLhOrh81DEwBgaM2AyOVkUrbrsCpQjIJUci8ewAAX5ByEjZbodHEE10iUI+XzW7vcT4k/44xEJk8J4NGZcEnCXBD0Xz2h4psyndZpV4SIuTD3bmgeP9mWP5Fq2BiLez27e3JfdvKmPhcGY85AReAP1w2fHx88Nyz4KsSY3OTIyNTUyMsll0AcyWM/ehJVQHdmfNXlgJWTSZKCyyJgT44oAbgiNa1EOATQxH9TyvHuOIy5pBfYCAYDqAgk5DAP4YrG4yl4pEC3L2YBNaxl/9CGVq23+4nrVvb25FVjrAxZZWGUq4Rd5MnwCtfxqsLGQQ96QR25XoGP6T6DjBJlVOYqttJhCFxsqX035svIyvGKMmSvDymdrYJAEiccgxEYXl4Wgs5LzhdUXhNG2IsuqMum5m7yOWrutwpSoGtu2PdfqFh3Wak+ga1f7hpPZ3On1LNyRcoYrzHq9cffYyGSVYDZKHneDZ+Tcxk1nh0u2+ya33QeutN0AaosrjkeSle03vBxpBRsOwVhoxXMa7sdtxG9Crv7gUiP+MawC71o0YlUWYdCxBLKYU1mLQzWFROksP7TXk32wCBK52kIYmXi+FBCAv2gJUQcosEyaK75RhpbPmsPhMKz9HfF4NBLmyyRYL6rhRPU+dsOyBDVqCHeADTAp6i48UbU9U9/k01trHUG/f0/L1jsHRk7l+k8OFb7goKJutBniSnfObBEqgnaf0yUNfWLD9rsHR84MP3TI0NBTjDtUAX03kD8YU3zAYdBoYKLI9wGcYwLFLR8daNelrTJ9RWsXDcQgkrNGajBcHRmsXcODamgHmcyVvaFigaohAgEF9XYZljxRucLgAzk4SivYZYE9re0LqVYQl6nkvxEXAjfiTM4glJmbjnX67fpK0V3LziRczSG3O1T4GvfXexFuGtsTDLkhrxBVPXexLtBzknSSz2RrEiA6DxUMlaA/QfNXDTBpmUAZJMegbiMYLii8gmoZcqCULnjQedUVkREPBADKXxk1n3WmUoSkOlOZthYYviEek+tipvIFKCZfnZnFdKzjfazeGfnSieDNzlZBDFhMFbobY6PrnPn00PH+vlsH0xO+iPf+bdtyua1bc9yN586ctJscMUOF0yVQuTvTEmpTZ0NDsHKZS8f9bRBWBdhKhGz8fohSHdWE4yJ8CkPNJO5KhIpJsi/r0FN1uT3HUVh5ohAh4Rh8tEShtALknFiu8N/02fWo3mSmq7fotH1b0ix8+4EFwvVKOntzaRVmPMX6u2h6YQE0Ssj32Sskwn87I4C2/2dprWoBXsKkL1shuYwGnZr1ID8WNTgJgmsx5ynVlZxd/gmIOzJfQ6ppccKwNOxYijPY4GKWhNNrfby1SPrPbR6n7P7S97Z5PBH7c403L1Jd+PwrtpjN7fjcc6RIJ/kR0FncN3BeY9/gR7LXE+HfUneXH1T1JuTBvjvIHdnKRohLdLQN5uo61aU7cd7qJ40GUdDrXWOQ0pX7ci/BSkQRJ7lnCC1iZN1YA20EV4sYB4pN2pTuIO0x9cOn9FW1fBWdt7kwNaxeovhlBnBWdu3uXtkKlsB8L7o2mj7cMLBoyzaQSYTcgrbMdY/SsHH3DIktap8tCWsubhHva+ZksmjmH8rOf7IRWWvqWt1fYnNH+1U45FxZou1arII5zfc8elR6HcWNj1D5xocPWSTonubKavNPfNANkdzInWPr7xgZuWP92J0jp+sHGxoG69XrM+eGhs6h8xg+N966oaFhQ2vr+oaG9a1aPtgF+WCY54OQV7ghrzCV5xWLKa9LyymQMJS2h5byCoKtVySN5YjZUClxLG/UBOFR84qPJXv8Mc8e96GGdEuyRzXeFNcHf6byrwmEgkB8/EFQH/JXiCdUliaNaRGnLO1yLcvNliIupl1lbfhaKSJdmXbFlqZdyyNQZqW0K1LKulq3+oWwu5R2uSDteghl8pJfy7uiPlewsKEs0PC5Sb/G867vjCnW8YnvBzB5GPXBHSdqnldmbeiHS1O1lJ2oKywwAkKPosefWo6gLj80BN5CiG5KndHFtMWnteO8JhDDcapwofJ0RZ3XEgmB/48WF7qljRHRcaX90JP1ktNsExxV3pZQ0Wxc21shCLtCIUgQpb7Gf1qc0tX1SZSDB9YYz4McMmS3Snb0Khs6obHi0U1AD9RHlqOBzgXQeRlSPluRkhNJmR/sZDDFUDMMvt9T2rdzlXa1gDF0AcUdH5gkHm+N2WEL9jVt7Ohava6jM9+W3h+ottVYnTXWVdH1/mQiM9K2+saW/mPRSavXWmELBYWuQNBcK/V1tgwn4rFau8tcWeP0djp95kqz1J9pXRdPtSLfZrgcZOdJfSknhbWScI8eghCD/BKdAA9FxQ2aUk6KWJBeUpEaxLPl6KQMGXLSJXiAAagGBs57EUsLYPWkzsZT0igGsKjTsXImWpapqqdidJOrO7Z2WxMmo00YkYcRGnbajDVVlbf6nL5Yx3Zql9yuUBb1nUWo8GuHTafn9g++3MRcMPvWqpxZ+aaUq5Q6cjfOKxm9p6wyn61ST4Eg3mibVRrFpaNUNYmEJ/pW5LbDh0/xnBnWGhEvc0H2cfDMmYMFnoes6e5eAxBfIywssDeAnjqy5cko7g/pi5mSm+jB0vTkrEGEjBjyBIbzRo2JWKXX3QPLHv09pXpY8QCFdSQRS1jsFpd2MKTuZiXikEKJBr5bVNol4jmUy8U3t14M674shqzGiGXbJkvEaA2JX9aFffaAePCG2oTDZdxwQAw6gQ1fRU1h1uqgLPrOO1FGHVb6lcoqT8xmK7z+85jV9iqVbDZVzl1czm3k1qzJSwU9ZvzFHYpoMYnXWIN5s1KuHy2yWVwfrISmct1GWmPxaLQupnG9PMEPMjXBX7a3iJUWVWH3n4wMF1N7g5xwDOfaD7ePp1CHnR3tqzQd7rj7tsoKLakXairWjJr6Wnd00SiqdYH0dq5ZRSF90M5J1vJzEp92zsoJ9vNjVjqJR66wEq+FiVDrq/U67YBYE8dzVmdZfoDuIFMWAP7+9rVrb9+6lV+z69Zl8Wva+a0DB761U72ePnPq1Bn8cl+PBh/m+7x12RjEPEZH8RACUqizgnpKUtz+dBJHLKZtfy6eaqkzsRPMhCxEcK93rdnikS01X7J42SU8N+Ne9bV4RdxV6zfurMAxm+Hyf4DvetKUTcJQ4AF0Z4vLcuRepys73wUfkJAb2kVtl1893m2HETWmSzSUBGIwpOlrMN8Lf+ENWl+LJbMNgW631e+M2e3x2ab+2Uxf57m/OYxzXvJ4bG/XbYo09ickd8RhDtnjTV171675ZPe9fN69Q98A2bSTs2NKDdhkIzgtvaA3COC0BKoXwLWj82J3gNWJu8F92Ze6iHQJHyIC5EQQMKhed+23VMfXTtqBuRhYopq5Lx7xaGcD2uFNOf+dxY13ddFDJ7c19Z8ej474YhG33ZVsD3XJfU32oOC1OL2mqodeQpdI24KS+zP06Z7pznWHVlvN9oi7zhwOdcczPUZqDLlqnNV/joIK+9zuBzCP3AmXEyATP+S5oL0Q/4WFHuYgHl6pgXrxjCAYwAQvDg7cUIrSxbOZDlWNVJ1m6XC6g20FghrQWxfec8bNtMcW8kQaCpe+SVNIwifRkj4pu51Weo8bptlfvsx/MwM6ugz0ZMhQNpemggF/fSJQQUfBotAj3AE6AOkbBAwv+t3Fn1eUHZNnSEe0MxqDKLtc1isJu3i4likd58sGzDC2HViz/uy6xBZvVW3IY/U1SPUjydG0K+qxOioTYRrShV00jCL/N5tttZf+fM0tfbljObfDFK21BmzeeDaWGaiqqjA2BEy6f3P4kOM/qqwpnqfS99jzPHfPZNPgKWGWggEBW0yY034TsXjyvzS9rltyoqkljtrKGNkxLMuud+zL9t6SHTy4On3viapKbyTg7j3gacuG+vubW/r6WuhLvQfWwr8Ndw6v+95XwoIv4AwbrLuyycLXhtrbh/DL/UrPwu9gfY9+BU+Awa/svsKd2GOLpym09FOgsGbE9B8TYuG3hqDVExPfLrzDjXUXuxT2VtdcfsYKdlpTTQsoJfW3Pz0gqFoYz0vi4OjXZFd7q9AmR8u3OXm+bV9ctQAhiYTPl2hLtDYmfXFfLJks5tolWXUucbWGuKiFcBDYErG93tF7IJs90DstN66e6emZWdUsK52dDfWdnfUt/f0t+KWbtjSumurqmlo11WMfaOrclcns6mzrs/33jrr6jkxdXUdB6m5IdncnG7q182IQ5Hvsp0W9W/mWj1i21GWTeJLtHyv+kqlc7/V1ZXov85Gdi6uHJQxsX67xdm4IqPNm0D376RUaVw1hmd79C7eRX5JjENH8WY+Fn6MBJ/BvRnUKiYYIHvc4NX2jKXIiDCU5O34ZyQSc3lqbzu+wWCqrqoMpR6rNPNRuc9RWi8zsqbQY9LW1dtnRmVb3ElbD93lyHsKjJ+ss/qJNO6U0k+oO/ElbRs3Bir9nk/OhUKA6gBcaClgQgAv000bepTvpYVJNgtpv5LZhj7v5b+Q28N/IVbZrHWr9YXfbwDc9ig7q0Xcj6iZQmGh/L6b9FdikuedfQWVvIfxXz3zxD/H+s+HP/rgQKbyqb9E9DLgGlBTR3lP/rky/pRBZeFLfsviXZ+qHtbIRsIpf4W8GF8Z5zTliIh/jh32BjLHjaKNXaf9rvnd27T563h/nQ9PXBvQ9dQ36XrlybGr7/dHzfh8hrY7N/v76aGDvXp3H/xcfdqPGx7+QOva9a/PCtl0/7ewYnplcpe3F36/+2HdIUPgentev0LYVz7o/ZL9HiPyx6ugI6WPC1ce8Fj1s4PdLK/0GCbLbrzH+KO5PLfv8ip8zfLQyWrVoS7Tm/e1K+FOVLrCDvusaZ//Hq/sPYhtFG6AXr80LfQNW19ej2y/zv6K++thj1ye7D+Vnycr+4/c5Nui4jh4keuYmzcwE9v1jspPlyGoWBR+5ivSw9fCN/v/lxz+y+Yy/xl/++S1ZTe//wF20wXctOUj+BMp//XCFttC7l5QfLi/MdF1lhH13SflVsQg1/66yB8o3r1Le/GiKrgnK03ppWfnUVcvTS8p711fE1eIjZeWNaxXD7IcsPzNml5SXyktF13WWp00bl5RHSuXxD1oqjbw0XFEer3y8yn+VcvAjKr+p+k313TXisnL3ysXMlpXR6y5PLJbazHWV07UXLaLlDy2/sI5av239L7Yh29c/xvJasdjJBy51uBJjg+QmWK39MRFhxdZAusnnwEPdV+3EX27z/zRkP4QZqsPNTisPOQhTYoUnFWbESKMaLJA2mtJgHfHTPRqsJ156RoNFqH9Ag2tIO1VIjhwhR8ntsNK+mcwBNSeIBH6yhbRCkchWqNkH903kJLTPkAPkOJkmh8ks1I3DO0fILdA+w9/qA5wTgH8E6o/Dcx3v7QT0fhxWl81Q5qAPxDhJ9pImeOsIOQS1an/HoJ/bSCNgTwPeQcA8DNBtvLV5hfGH4H4I6g4C7fUkBePdpvUukc3Q13H4HiOn4Iq0DsFYhzmVG/l7wJPkv7JXKQB0XTlWP7x9EO5paG3hpRu4308Goa57BfzG0hsrya3Ytp1TeBzakTaprPdr9ViUqSrR44CFmjsKdcfh/eNcIk1cB3PQfgNwjrsXY0+RlzdPzFP6+bxC1T/YPjpPDP2PD6dDAmlA8MnVxrjRahSM6tOA2CL6Rf5k6r9U80LFC7oXwHAq4Lm6/xLJ8sKfBTIwH6X3bZpQsvdNzAuzA/NxfHraeBeYWfa+ma0TiJKHz5M9xjqj3ShUNTxFFz6t6P5gnpGBx/SzIhkY+L9RITxzCmVuZHN0cmVhbQplbmRvYmoKMTE3IDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMTM+PgpzdHJlYW0KeNqr/09l8AAAFatREAplbmRzdHJlYW0KZW5kb2JqCjExOCAwIG9iago8PC9MZW5ndGgxIDE3ODM5L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggODUxNT4+CnN0cmVhbQp42t17C3Rbx3XgzLyH9/D/A/yAFAE+APwA4A8EwJ8oEOBHJCiSEikJkEQSkEhRlvWzJFu2bMuO5dgWnaSJuydNto0d22riNKfdRzmuvbHi6KSpk/a4dpJ1nCbdJM02dXyy67POtnF+Frh35gEkSH38qeP2FCPi3Zm5M3N/c++deRDCCCEduhtxqGV8srktXf5wBFouwl923y0n3V1fJCJCuArqn9p/bOHwLXN3nYb6lxAyOBcO3ba/c8OebyFkfAEh7/kD87k5/M3c3yEUPgb40QPQIP6RAHD4Cah7Dxw+eevNn9NloA74mscOHd2Xy3xlTkBoI+Coyg/nbj3GvWqcQCjxAOC7j+QOz996/zjACRhP9h47Pn+sMzp2FKEBPfQ/jnjixh9HKuhbJGloSSlPPIPacDPUaRf7uBEywQMXqmhi/8AcuoTQ7wj32jKszz+Cm90I/yHtw78lF9kQDr3dpwdKB+qg+OSfCMyz3ME/kv82eX75Tajrlt9U6kU8dGS5g/wU2n9TaL9nuXVNvTjfL9D/XTOfUl+ZT0ZBt4y2pwcybnfqGWTcmpKFyV1pud0l12ey+92L29My8eX+uxqp0b590l6XxyOjjIySUv8FkEEymwjJOCi7s/tDMgm659zypQmZ9++6UI+1yYF9A7IwkPbInC+zbXfaI3lci2m3PDEBTfGMyy13UKgjk3EvKdi5Obkemgo1t9xC+1so5qWJtBuoWcy5Ze1EOgstbtqnpVCUQtGsK5vJZFwyDmQykowm0vOZTEjmgm6Yh/flgDJVciItq6SELEgJ4CMj42xI5oMS0OWeW1LtTbhpD6XYpVBAv2UuO7BP5ho90Jl0L7oXYYGlFpUPmNyazk64ctsyaSnjybjl+GQa+lyUtcL6IVkVlMVk4AIiiqQEqEoJCSQuJXIy2btfxvuAClnVGJLFoJuSqkvue4ZHe910BjmezVCUbD8jVR28IOpQciDR6FmRvSa4VhdaZRYcABKSwHfWPbAo5ahemLyQi8pUdruAyCKVoB0p168sobvGcNkLo5BrlbXSQfogY+iCTsuBsl2SJ9PoCcmG4BIhA/Jcrj8kG4OA6HbL+uQIHQ6AlMjIBlrbBjUD1EKyCaYxM5G4QQL7YF3ZmMy6F7Nu2QhCC8nmYGoqvcTP9We8smFeujUkW4KprenUpNLo8kC7jbVbg0vIlNyeXjKZkjLOJWRTgNosWHJiSU+/DPAlYydogvNNpJeo8IDbxCLoly7b6JFgWBF2Kf10CGwF2pIBToaA/iFoXauqayhwCSGbBNJKyqj3AsaY6coWREuIDEylZZOUcA/IOjA+rQQGl3BnYfmnLBaMjCiRWMwuWYWAfC7gqgUx2YE3WyAkO4JLmD6dIGf6LAsucfRZHlzi6bMiuKSiz8rgkkCfruCSSJ9VwSU1fVYHlzT02RCUinKXhSxIWHI3yXiabpCQ3FjS6VzpvEnpDJR0+lc6jyudG4JINgTeA381wN8GoMsN/NGnB/ijz1rgjz4l4I8+vcAfffqAP/r0A3/0WQf80Wc98EefwaC7h5lpKAjLWrLuJOg2m2SqhK0XpLbaFJRDATkEu7AZNsCQ+xpalHIdEvWI18VwUe5bVlSLnXJz45IKOwbS4Mgog62lkrmyuy3ojjB6w4CHB65cBHbnVRen7cj5JRZN+nuljqU27KDMtYMAgOKrEwy7ItcRkiPBprKekBx9O1Sw4H2AHgOdIKfP3eQeojsfZDm8uDgkDYGrSEOIAM8K7iCKscMOIu0AF+WUzYDGg9f0MTRZkwzMLzZJbnfPIszXuRbF3aTMJfPQAphuOUudRnxr+kni5tyuJ4mfq8wkqCNVg0+WGLY0CFs4uX4/ZqkzU+IGSWbnwPqSuTnoJsmcC+AsdWTrx+SALHDv0iAoU4IVBoE/eLBVYL6rLCIpLpMHLwFKUIFlqa6YFWakHPkYEfA9objK1bVA911FObihVeUvyEHqARF1r3TJatY/KA3RRan2elbER5kpSBhNpZvcPRByKfWFRjelq6gCwQe14dLorijvamZd0JREbXtjCSXJoqqyNAVYz3JRvb3gKJqoFAdlczI94YKQ6e7JNC01YTts0E1rere5Jtb0xq869noj+oJyR+B6CyaCcmdgEWij9gVMXRMVFNokN8GIJGOZ2mZRJ9QsJdgsTbDPlFn7we9ACCkivgsjHnq/7JZyQV1UjwReqMRCPJkCjQPgWzsCRTkMQq0z4JEKkihwssL0EDDtUDY4pBewl21Ncjvs583XaB+G6bDdJkcAHgnKMXikqNwGQMDuQYilRUmNBqkJyykAtwQvgLMCYAwATIHx4AXMWiYAYC1bKc4AANsoDgUmKQ4FpigOBbYHnwSv1wfQDoAwg3YGn8RKWxogpS1D8TCFdlE8Bu2meAzaQ/EYNE3XTAIwQ9ekwCxdkwJZuiYFchRnEIC9FIcC+ygOBeYoDgXmGV0JgPYzuii0wOii0AFGF4VuYHRR6CCji0I3MroodIjRRaHDIOOuFQUeYTW5F8CjCrgJwGNU6KwWh9pNEEYLOMcVkOKcYDi4gHMSBnevzHozq7ERtyggHXFKASn6rTBPAeE2BaQIpxWQItwOuD0r893Bagz9TgWk6GcUkKLfBSMLCHcrIEX4kAJShHsAd+PKfGdZjaHfq4AU/cMKSNHvg5EFhPsVkCI8oIAU4VzwSQ1PislqIiCr52XOO3FrMQ6HQGccqoeTmBvOYzrkRB6kfXpDmVkvIK4lYA172hwWu+SpjViiQhl2RiOWdslDoDlah/2Cw1Iv4QuSlB+T2gnBnyW8Kr+3QoU/wxGSzxGeXJQuL0oSuUXFk8tf4DBPdqgu380TshPgy39Gz5ZbgIJzRI0MyBY3gz2UpaDBgUZ9HiI6A1FBqvXDmtFwm9NhOWcxGCzsD77xCxTOtyO8fDsZXX6RfBbpkX9JmOuPu2BijHbSY+ksAQiPA6hHOh8nOgJLAuon/kiEzulw2AXpqLPMXu+wk1GbVWu1+eAPxIGql5fJQfJVVIGqUEPcX4V5zgQzkRHEA9U83o84zp4imBFrr6u1SSqxIuClE9b66+o8IntG2mOY0l6GfR6OHLTqtSY+lX92RG0zGsHQ1WonNGAxP4adH3HzBrNO8/TTdqOeEzhyn12nuXznD/EOxHQ0A0TtAR3ZUTXyo0i8zQ4U4RHo4VUcP49A/NPAtT0lYJUKTStC3LBhg3+Dr84DdIhAHXJS8jwFiXraaFWM+iXJEY5GIyQaaQfYEibm0dt25f+FihdrpmbbW7x9XT/+cXSgeXJ78tXX8PyuzXtzFgO522DZMxGZsr246be4f1O+pb9/MJF/g+q0BU7yh8hfowbUEgcLwxxG3BnEEcyRO4BG1SxSqapSQDI/i3i+mh/119X6JaClMoAcdiq5Or9UKwgOu9MZbouBAMuctJ2K1A+KYxIlh0SNUa2emN16NjV6dmJ2XK0xakRj3fHo7KOzM5/NddwYIHeZNTqdKjJ6bmfmXKpdpVfrzOpKaff5G+b/dNpdjaieqVwfAbmaUSUKxhuYHHlMBanCHFcUpMWCkKXSUlHuBERjVAA7Qk4qvhJxWqn8mADxP5zt6zubXcZUhGj5yC1tN259+WVycfaR7L6HpxXRXb7r0Xu2nh2//GWQF6VBAzS4UXM8eH2NsjuWGq/Hq2jUexWNSh5HEbB48K/pJvkE0+VRtmEuYA97/hiPdVv1BrNCDuwq8+/oF9UgKtAkAE0uav1QJxwm89DDT6swz9tTYP4OjpLjQhUS0COI5UX7Wl3evrJ9PfiXdNEnsZst/o8Wg5GSdIhctBj0lt+Z6crfoV2UmKIN3U6eRy2oN95dh3kV2Dqh+0I4I2IBqXhBNQ804FkQEdgSz6NZIKaaSagFNUl+MJU6NbUop+MK22HkrTGyaCxCSQVKw+SgxRQ60rn//MzM+f2RfXVGi06rTk1tv3909P7tgZ21DxusVsNXMWyBX1i0NbWABKiV5RqzwapqGDu3ffu5sXLH89RNFeV4HORYg5riAT1HgNyiC5kXVKTEiQDhNWiDzSfZfIXNahEU+XmKQMEPeihAchZsNRis+YPwMFqsRoMVf9JmAIEaL98DdQNuzL9isFqM5Ayt5V/FlQYrYjZPZfsiyNYEC9bEq6ilFcQIFl8Qo9/vr+VBp941knM6mkiJ0MBpvLjjU7ncp3Yo3/GB28fHbx9Qvn91fnr6/MKB83v2nD+w89wobELlG63su4aCPwMvIWAepMUjqlMCJkYImBikXHjU4QDpVDuqXBWAa5X8IoSF4t6TSiwsbC36L/zZdGtrOvaSEi1e79q8ueull8jF8O7Ozplo/s2ileU/N7Wpdyz/k1V6wBohFrahaDxcC24KM38Puw+0pcLzYGPcdKnXb2hoaGtoa22OSH7QWDl1/szO6qi4/GuI87QxikUn2J6zjOslCgI5xPNGtVasqh2L/shsMNphSxg7d4WT0WAHxibLt6Qe75be14ImlVpU8+bN44Odil+m9LfuiMZzVsvWrt42LQ5y9f3BzhTlBiMv6JeAfiOUE8TxiOfQGSZefAdwQWZB41Up5ompb6lWUduLoHbJH6r1U9tz+uvYXgC/C1qmbq2uiazfPHT3gB2UbSBMF//jaLveptdrx27ePNs82h3fGe1cSG680W2y67Wia1fr8J70tqFdnd03JLUtYa1Rb9fu6I8FOr02W9OW7si25ga/Ra+zie76vo6u3kpHcGsiPNmi+KJa0E0X6Aayk/gGKnwOXDRVhGIhgONEdknyqsSygg9akX1hU3tIA0jtJbpRXmK+8H+Si+BzTJf/mElz3mzQm5W1JFjrFPkKKke18Ro7YfsVshnqh1c8cDkqq6vjmR2CyjHbIZAOKRKz2UBMZN7K5X/JmzUaE59/k7PqHJpfvK4yqclXLDpRffkejU6rIXcKWoPZefkSSWh0bO0NwNkT5DnkRW3xZhotPZVaDuImRHkCzg+dgTSKbgy84jC8SHLUef0F5ytyzPw4jhHEKQQ5KUVlUfYIc5+0kh9yJk2Z+Od/rnFoTFBx6LVm7utPaGyQiXz+a2onec5sNFy+W6O14S/mt9uAzrsFwWjRai5/HT9ux1inyU+THpYjhcDO9EQHGVIQHfjLci1R8XgkJZdPpOPVAiioLFW0tpqUSIPYbIFyV9yzvp8KlyExV1SNRzNxezWE6OpgdcAnwRIuv8+nVhRcUG5krVOn3JKoEoSLLgr/juWLFXPdyRs39t7Y1zNXYTH8yWRz82R7+2Rz02QEL4Nr7KVGkAz1Dp4eHb2tv6u5F7xqcyzX05WNRWd7enIx4HUceA2RfyrwWlHktZbyCgw4KSvcLOWqlNdqxuv6fmq2BSTF2V7Bq8/nV3hV/Bxo02FfEwKAZet6Xu89tHHjjYnO3IZimuza29XMeI1MNTVPRoiu/7bR1O2Dnc0JGsLIF1go/n5rT17qyHX3zEYjWcYss0XQLf4R6DbEfMhVcjjqOWpKkzgYFkJBHwSOQvxyFpJhf51/TaSFwpiwl+gP797aatJpDWqD3tRaFdvd3pbp9AYcokWtF/XGlqnw8PFN8ZMponN4HTqrWm0QRE1HtqsnG9PreKMomvSWuqqB06PDt21W/Llimz+9pm0638Y2ne+rbVquY5v7ehI39oJtds9VltgmfJOfWgyX01RJg01x4C11eqC7GfsgdxyJ5nq6s7FYthsEsMIvXgZ9uSHr7ohHoAVyNnyGvedToXnqpZiimPVxsxDHqrlRj8fT4Kl30qzVw3IlSNqKSmIaWps3OcsgzfNEIAWAbaPP39e6u7dltEyn1Zq17lx0yy2JvkMbe25I4PyP9hnxdlVbqh5bLD2zsfoajVmr09a1JU6Nbbu9r+PQyJcmUupQUgIaQYx4ivwjUL0/JW8A7fiQICJRQGfUWBTZUcGZ4iAhR+DzESqjFucgoCWpiAfN0A/8zpeMULAycerVG1C9V/JCfJA0oitgFRwOxfquiBJhxWEWk8OfSMd0FovuGNXSsN5s1g8Pb6xqMWs1BqeBfLHRt2DW6835HIsnj1h0BtPCpgGLTW9WCUwfHaQa9BFEPWg4PlhfSQSVBcgkIyLkz8CGSsW0UJNSg2qYoVVT1TCXUIFGQ3BwCvWEuiNhmCLg94X8GsXJWwrbhkZodjRSYvQ7cIZEb+m7aVjaEuNFDS8IFkdvNDNfcah74Gg8frR/0w3gGh/b2dq6Mxal31G8bDHmx8eOdlmrTKJGK3Cipnx+R290o2KKm4Jx6iYjuY0bs5GiJWIER238c9h3EgrFG92YpbtsN2HMz6oY66v5roRqfbB1hBXOFBenkGy5wuPhh9JUF72JxlTTio/LthHupkz+n5kaXH1b65N1SoU8wfzbPwRiaHkZ9cFy/4U8ArkErI5F0NDz0KpZwviZ5WU5HKC0b4ev14F2D/LGPe4ytcgjesRm3ptGq4KHAOcs8Uq+Rw2lTlznm32FvSOW4dcdGoPmh6kisdij0eusuhe/H4CK7ufxPyqhs+M3WptOr/tvryn+F2hBnwBaivcizuvci3yi9F5Eme5yWtEFl4C8oQPd9peRZpbKKBHLSTeUalYtCpxKVZaCrEJxfSm5FXorEW2kKAKgEEEowYhXrmlH1HEWOzPKdutAMZAQ1SvdbtfR69XU7FDMl6ZQr2+nLG0qKrsn3jAcWtH6nnDXlNVxrJNwR3cXdF+emKwfqM+/doUh4Ev0u6sh2hENJoo2+q+wNyU08ZRiogrjZUzLK5ZaU7RUF/SsNrJDUqEnEze8OzOm/OHP7ISDt6WvP7ClZYWheQjPh3flf8AIlhTqf7hKPWTKq3GtDmhfd3areS9nt7rEyaGhkwnlu6ctE42mw+F0NJppe+r0wMDpVOr04ODpVA8NNDTcRLM9Cg3j4NtCYFc0tnbHOwrJEIuXcEAnpKwkuaHirMCjb5feXCmla6Q3Xbnqoswq93avpDdNUxHCJU+NpE71x5ryv2b76iM0y+lvjuabIjPdXdOR9unu7plIwTdfK29d5aKmJOSnFKd8lbz1Cpy3zw0s7zxvvXZuAIf+yyeZfRhXk4M+8Mih9bmBYu/Hgd8N6MxTLhopC8yWrXi1FdtWgquyHeA4gsHOyZn126IYglcR1uwOJhkafZXdsQFV+/y19tULolqFT8d6lcfwNrdZp6o2+Iabizoum95EdGYznD86dzX9anU/pDtTmPHWCHnPF4C3MLtrvPpZtyZVvHWEo25AqgvUeuldY7QQQAtn3Lo190Pi6hnXWTjjQkOjQdDqtd17W4YS3ZMzTeNtgZ01Gq2o06rLE/7mJBlItvcHDmw5vXlGYxAF7Vgo0NhociT7Gvq8Hq9o0GsEtasqGKxvtBjcXS19W3YzHuhFUZgsQqKSS8khJnkVrzoLPpbj+GmBBU2qpaJgXZAkUQTIyiFAQaZUiohW8VbSH8h9vN5aG/XHNoud8ltMc/xXZj/F7OjJqjLBqtIY3E5XY92w3mLRD1ONzOksZj3+6/yS36UyaY02bRvojWZC7HrxqFWnNzGbW/4N/t/4LeRCvYo1WXk4PGCWvxX9lEtpJPhsSWMmrme3ipU+n0+1dt8Uwh1jgNXwDyxHctnDlKzRgcEtYBxvQSR9de8NN+zFlSyqvro5ldpMYeVeZJm8QLTIXzxfS9X6K8/XNSXnaz/y+er85UXbpQfsOnq0pgdtYe0RWzn6h8mzFu6/quDgb+TP3syb1FoL9zBnNWhM3IdPQaKgvvOs4CRasxHr8+0aHdZqcHv+BbUOjtX4BUGErECTvwkHbLb89/BH7fTuY/kt/DXCQ4xxx6trK8yQkxA8wmHqZQt0ehu9a/MRJq32WKx4iVMWW81IvmbVG3Wf/rTGpLOK5z8v2PQmzZ98UmsymMTHzvu0epvx+W/oTXqd+jvfU2v1VsPf/I3BpNOpv/tdRacdkNupURuKxzdWYBWvB92B9ECSQNAZUSClmW31iqormCzbUCuotLbeX7iVLSSySh67sg8jwpW6Lij7+5beIwONw+UOwhnVghDvmsxVzMR27mJpQrIhBdkBUYPOh8aPdVlNBjNRa7WcdGCX1Bg+kMFhZg+vbB5pSPpxIxgEQTGIpVXsHtRVuPtn5Faxq388S18DwGHPDJvI7DJXOu2AaPTTu39nSVClXDDvrVyHhX9wKBY9PD5+OBY7PL5jenrH9unp7dqZxxcOPDYz/fiBhcdneh89t/joo4vnHmV7n/7Y8g3yHHKi8rjDrCV4MzTChihkmjTZs67ugIJqo7FYtOwnJpvRYL1TFA2wsb+gNYLl6S+zq3wyPMLb9aKR3y8QusYYuAQt8FmP2uOtlaAzmtRiHhP+TPEwSHnm+ZK3DPWork5qbKeWv/qSAWyqyOoKJcWzvCh68G/ASeTPGa3qn3VEtw23brHpTDq7Wqg80Dt/vGfgGRzusugN4M112uWe2ab+seYWq1krmNXRniOZ2InRlwr3Dt8hF8GfH1dy1bqiecHpjsccFrkFsDBhGgmCfa0zCYHvxxwPh15MB9wBAyAgXAtfcY5h1Nbu89CXBUqyupKQlNx/FkNzYVd5CleKyo4K42iuu+9Yf2CiymjV6w2NIy3bWlrHg3q/Sm/SfjX/c+o48YTZpH1awM+2z/X3H+yuqtIa9Q5dKDjRFhuRRLBf7cv0BpJen74AdknvOwnIoEp5a1DD3vSpYHdBsIXAtoBK7z43VLMkA1y8uBJhpUJsjShKw8peCnvCFvwLICdppa9bfqC3ijgBG8aSzP/B/8Nm6sO/TM3ny0CHGv+pHrbLcRwHncSW8/jHQE8UjcSHwpgTvUARfRN6DXELgmoaZL4qbsWkoijijUk+qe4KWReFXZT2qn3F6G1q8X2SSJPnjQvdfSdHGidrBNGi1+kqN9Z0Zlr3bquJeMpFkw0HCIg7RIWef622csiHv925EB882ltVyZtErU1jd0KqODptNeltBhWHzVoTfQH1ksGq+AP8a/JtkGcA7XmqgoldCciVKkibOJ4Ac/Q9CY20q3ZXSbOgsysYpZ2ZuI0lg4HqRm8t1VP9mvcXhSxw9bJFZInv2lRwbjbSOdebOhDevDirVhms5RMfrdywvbVjl2+wpX2ssX40jJ+NH+zuXugdPJ7Y/lePe4nZ5FB7Pj8jNeRvnh4OjbU0j7cER0JKLtizfBm/yu7SG+J+8AREp7zVBmiaU167FPXlRHbf+mtuak3FDYC/Z+Lyr/Nmjd4GhpD/KrP0Y+SiWa/SXL5LozPrITHZza7WqWx/BbL9Bsu5o3EwRCpc+taHvglbYFkjfetTlVIEtzaFbqgvkVrRMkBuJYn0FceF6QPhoQdn1bzBVr7twYrq7a3dM9HO+d7WsQaQWNPmBu9gK/kGSGzquYe9xGpwqKU/3u2p23QDFWT+VNN4M4iscbQltKWZnXloKn0v5Aj03AWxgsYGpmSW0HCzNGI4OCVW1Jiryx2AaIjQWGFVfmvAMiu6Ncm6+rDVahEta7/wo3arw+qAf1Z7ftZudVrt7AuE1Q5rfgjthekr4s7iLxwKb0HokvQnDm3rlhhcmZjNyOamtqBePoN/y9VA/lkdr2Q/lBihzWfpjCdhPgsy13Es3DEnUrBSagjlZh4/KZp0WjOf3yIatfdYQNfctEFn0ms0bz2m1zJb60I/w1twLTKgDYXfZNBbDTzNlqI//DAgXTtdIOov0kvJHTGbDX9PHdHf/4y+kbYW3s0QVL88w30G4tg4SP5flNtCsxtric9l4HhtAgsiN+JiTVxpU0ZBbUEiEpAonNFB6MMIEqkDUFcL6n3gqzSzeqzRgPVptWSWZVdaegxyw7j2dzSOHZHoYKSMjccgqdQSTnvmHS+rjIRTE+h1z67tk8DnWJ3X76/3gos0iNUlboPGobWnSOpDWILqsJfGrJXT/tV+RWGNtBdxGAr5i4e39h7uC0QwVzsfbUz6+44k2gaNWt7lws3YZW3a2jJy/65zP7pr4BNHwlsiQUHQC8S6af/I3U+MfexfPxmIh6OTTbGGpj29mDw/9bH0tkfmmvwaVUV3PJhqij+wKxqKuypEPv+ySlNRsePc0NhtySMvPTj10C6T08kZBc6oqfEc+HzuU/98e/5eY/um1NFwtDc+3174PyiF/1kya+r5JUibXZP97bN/+HH6fHno3Nfz9y/Xq3z8YajS2z3lQ98Vsv+ropqE/m+pfKv/m0X5kEGyGXKdV+jvkJZvZy330zvpD+5DHkQz5KOo5Zr9L9F3028zR8fb47xn+qJA39PXoe9bv7+1P1A95K/N478LPVOrciUPX1/GpA153/X8e2ie+e/E26eRxD1P33e/z/PuQqEPlI9daBxS3NB7oYcEf7+04hyqJoeus34HvRdc93mFvSd5f2VUxqK+8nm1BL7Gh/u4QhdJXIW+660z+cHq/p3YRtEG8Ieuzwv+Lmp8V7qdpHeG11m7893J7j3x98aVPgf/FNVe1a7erzUnUQwSRxWJoTGiRiHYQ7XEh2KkAv4EpLyeaGC5+n+uz7PX4Okpdh64Uk5apH7PfuM+1MW98B+I93r23YuyaBHKd95bwfX4zJpyaX2BZP3dlBHyF2vKr3//het6n8o9rLy2tvAT1yz3/ZvK11VV77g89N6KoBUOrin/q7SIve+y/Jnav6YcXyn3vuPyt6z8n/VFcyuUV65etOXvU7kVyhu6mXXl0tWLvnFdOfmuy4vFYrAb7nhX5TnDG8ZB4zdNZtO9pjfNbVAe+sDKKyXlrdViCV63TP3HKdZt9DQL58eDcOJ9CNFfHTWibvQgeMuHDE6o07OuGu2HkzPmNeDZrewUTWGMrFBTYIKM2FuAOdSB2wowj2rxwQKsQpX4IwVYgPbPFWAjasffREl0FB1Dt6Hj6Aa0gA6gk8iN2uA01QrFjaagZR6eW9HN0L8P3YhOoBw6guagbQLGHAX656GdjuoDnJOAfxTaT0C9ns12EmY/gbpQM5QFmINi3Iz2oiYYdRQdhlZlvuMwzynIAo9BfQEdAswjAJ1ivc1XWX8Qnoeh7RDQ3oCCsN6pwuxutA3mOgF/x9Et8E1pHYS1jjAqx9g44MlddeWs7mqg68q16HwL0HoI6sdRGHBaWOkGGexHA4DRfZVRoXXjribDtRg7GM0nAItS6y5Z6e1nL8pakfQJwKUaPQZtJ2CWE0xSTUw3C9A/DhKht46pZ9A3t6WXMP5YRsbKf7A9toTExJeGwjUcaqTg013gRa1qTq3U+oUWoUpgNW3iovGS5hJ/CQxKA3VD4iKKs8LqHOpf8uIHtqbl+APpJW6uf8lPa19W3w3mF39g31SaomTg83SPul5tV3P6xmfw8odl/qNLBPU/qZoTUH///weqsuz7CmVuZHN0cmVhbQplbmRvYmoKMTAgMCBvYmoKPDwvVHlwZS9PYmpTdG0vTiA5Ni9GaXJzdCA3NjIvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyNzQwPj4Kc3RyZWFtCnjazVptc9vGEf6eX3HfIiYj4N5fMh5OJauKldqxajmNUwQfKBGW0FCEhoRS+9/32TtABCWSpVtNG43J473us8/u7e0BDowzoZg3TOCfQsUyqTUTgSnjmeRMOxSCmYBCMocOifFKYxgLxjCJedxxJi0TIggmPdYRkimBEutipNDaM+UgQimmIcMEy7SCLBuYxjynJNOBCc8NMxKl9QxLi4BFDOaFoBmhEdIxC1HSaGYdgKDuCAm+PETTuh7jHNo9gHp8OZQBoKxCaSyzGB8w2AIa56hblJBjBUr0e44SX4CgBPAAohLADRWVwCCHcYLWhYpSQL5CqQ1zWE+i4rCe4hjnUMrAPMYpKOExjvjwGpSActCqtBYsUgQhHvN0wDjMMyDVYp4xigXINRgcqA79QIVyPIB7pjyshSZFPAWiFsJgJ004sJRWRCaHDTVWFQClDX4EIp1K1D1ZCoWBVVANgiZo/IAaAqRzWE5wxQxRD22MIBwSVgJVCtZScBGiyShSDGbTWApqGYPpcCRD2AV4NlbDyA725BjFUYJB6Ge8gihqC0CKVU0Q1ICRIZBvSZgcxkAB/2EwlAKVAkCtoZkYbD1aYAmJSQJqOA1VLSxB4z0sAfcQ8G8XYDyYzEuAfvEi//D28h/VVYtfZ7cQja3wbjzOT5s5NZ3SEqnlfNFcXVRtkZ+fnObvq08txk+uq5epOE7FWTkef4V5XzT4/ee7Kj+az5s2v7i/bKn2up7/lh83i2m1KDgA8DJ/lZ/lLwuRKkeYdpF/37xv8pODq5vJXVstMjECzHfQpYik+kzAE4QWGbasMTyzyjyzRLkmUdhMYmNhX2TY50b6zAn3TBKXEFI380wOtPQ2Czq6Z6awF4Q1mUownJXPLlc+lquDzBRikDAuQ2ggGJ4/v77qiVzPM0WBmPsMwSLi8EY+s2nV0LSIGBmiBO0zQECIcDwLSj+zruqpbbW2maFDRYWMI/IQkODCM+uq13SVOrOIRIgVGeIW4qfLuBXPrKveoKuQWQxWGjoKAmIyxMxnF/zUkTliA04KoV1GMRgHUyZMr/GjSJifKoqe/0FM/C9D6tPpmyP3/xHTH4WbP5CN/pfTv2SLIF9hot8iP707o8/B7aSetc13N9Vs1vypaZvLJptWD7sFSQj2J5IcrjKFxEw4nDtIvAwCBXKw5wJx07Z3y+/yPMmvmwf5wWeGsjccrxZplUAM9kgZDWBx657bE17Xt3W7LA5OmqvDi3ayaEeDcFnmP05uq7VeS0HnXT/mG4Q3UDRooQa11iBHSBaGDWpkzVqDHtmoxSNId4CJ5VJpV2C6dqSJtEisQUZY1dTI8VVNj5xY1czIyVXNjpzaJtmN+mD6DdZfl+5GzqxW8SNnV7Uwcm5Vq0dugLNGNQEdLO35BgjDRGgtqD8AGY7wcrhozGK8etSkRl6vNdE57M1aEx1X3j5qwlpugPAv9XRZ2NhC9zEqvEiF74cVMmqZf/jl73SHckidsOz8fjYrvyqUX/VJSuT7Dq23dBi+rcNu6VDb2uUeHU8Am/2UedynxY4+vaPPbe8bUvGkT+3os/thkXRny7C3Nvch+cWda2OfVhbxsu8Tej8dSJ7KtNhs0V192sHz/SZ5Q8PCYU+qZbukRwQxPMbgXbez6sXH6uNHzjXSIms4d/SAAB9M5Ra3U8fx0em3xThbjXdcx84ni2re0i2bUPyIoEt39M0CbScEl3U77YS7JCS2X4533ol6UWogymwWhZWTGNLtsvvten3HO69A62LOF9Xv9DRiJdJuEUmU+Y5C0gZ1OU10knhqI1od+iXvaCd6bdfuVuOsGe+8LW2CuI0JlUSSONdZnMiPEGTHCIk1A+hmZSBbdfDUeMcV+bReLNuepteTZU9T/rK5B9BD9chPEmQ5YNVthx8h6gTR8fHOu1UvZttyvb8/+MN4x+2w08oPtPJDrcRGrYbuuW3r9bbvyO1d1enxzttULy6sRNDzrs2q2o452am8bTs/ujity4gq0cO1zXoQbtntYLMB/9oFNNHZLZb47ND3hMqNhA5s2VlEDiwSBgvoNOpdtWzuF1fVkqXOmLKeIw3pl6dnfWnWvEV9WfjBMb+aLdSe04V8OP9F3If0gDkWEQA9YI5FyhakTIVKRcokZJonUz64jkP6PXHIlK6k9HwZn3Gu7NbPXnZkqdUyic+Y3yRQIiFNZ8sTXpTYhses41F883y973y1eb7bd/4wu96TgJTAsZQWsZQBPUGg+TYE9hGCsHm+2nO+lpvn233nmy9nIGV2LCVxTG/2Ab11a7lHCDbvLSP3nG/E5vlm3/kP+AuTcnfjN+wxy/ddLzzaY37HHtMbCdYdjhQVUvLKzE5fFSpN7bZ87+q9wXuYZf6mmtaT4+ZTvIhbBCYX+ienLxfVpG0WB68n76sP7J91e8NuIGexqD6ONh9PXb4QsymqX3XHSMwpEOrv25tm0Z83/TnQ50Hd2UOJhu5OcvrEuusSDFS0jxf36f1VtTj4NP29vpt+vP3Efj2QXEpKTX4djRJ0HFInk7Y6OPkOXTgyZRD0F77l4mvOvx4lLd/eVfOjeKJ1d6HTui0jl2+aaZX/tKze3rezeg5qqfH15LKaLTHvx/vbZcHj4XUyHsv4YzEe674FJKYLKL2ronX7ZR4OKzLXg6GjBV9O2smsuSbf04VVoVSyoCcsVrpS88IJU+oAt5Slk0jyJbPBlp46QukNwrkphbCFR1UIXziFukK3Qd3awnKFEu20pHelcA7uiTLwwkqL0hWOm1JKgXurR36m8NtjjC0lSYR86W1hPC+V4Li2OWaVwm+M8RZoVSEVSq2BDui1AyaMNbYIUqJMaykHeUJDpVBohVI4bHtZaok6D6VWwAV82srCWY/Sp3oQNI8pqxm95TL06pXekbnADOKGoac/nt62+dIYHfkwJhRShxKYEVxtWUZqtUvU0gtPlagNkVpIi9RaUGsitZInDq2NHBJ+YQP44Yk/KxN/XCferEEu2/OlE1/GRr4Uti5cOPEFSZEvjIl8wVaRL9XxJTq+nI98GcAhvpQ3iS/wS3wp1fFFdeLLgEdLfIIj4g6cGXorSm9kLL2F4oiF4A4B2dBbKQGuONYHD/gUAjwTZ8KL0lhTgOOOO15iixYBzlc+hBx6uvbwWO/l2QnVqUPmx5NllXqPj95+uPj2r/f11W/LyXx6eNzMpnEirptXi/oOISa+n4xR8+zk4vOyrW7P5h+bGG+v62W7+HxwNG0uq1H+lp4Z1vPrg7MpomTdfh5B+t3drLqloMmx5U5+BsUq/zm+C+2WfN98f3byZnKX97MGQXMdSH60vErhl3O6DsfKoTQ8vwCov9ErNWzSu1dVfX3TjTr6/frneorYCHbjascUTQ/pPwgcKkRfoejdv/CqzM+wu+uro/n1rGI8P51NrpGrWSni8p8RTl8gKMybZfWC93+er/2NuzexFFi2MEsUVsDWJaM0+rSeVRItj7O7NetRC/93Zvvz/KqZgv8HJg9fdTRNJ5DT0IHXHSzvm5/mNUZXoCnsErzZbY7Of/jl/M1APlzhfjZZPPUc84yew2X0HPv8nuPddsfReuA4yjnMo5f9StCLe7XFcexWnzE7fGYrrQ9u4564jf8Ct9m6/j6ekyStuY7ob5L/As8JlEQKZW5kc3RyZWFtCmVuZG9iagoxMTkgMCBvYmoKPDwvVHlwZS9YUmVmL0lEWzw2MWQyYTZlYjI2ZjgyZWJmYTBhZTY0YjE4OWUzNjMwNT48NjFkMmE2ZWIyNmY4MmViZmEwYWU2NGIxODllMzYzMDU+XS9Sb290CjEgMCBSL0luZm8gMiAwIFIvU2l6ZSAxMjAvV1sxIDIgMl0vRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyNzc+PgpzdHJlYW0KeNot0UdSQkEQgOFuxMAzoAgSBEEQQRQw5xwwYsIcb6BLy7DwHu68hofxKPj+ajdfzd9TNVNTIyL1ukccuYQLWFfxi6jzIULewY0Gvi1FnyO22tBgyFYKW+CBBniEe/BCIzRBM7SADxxo1eC7HdUG2xr+v7wddjRStuyAXY2+WPphX2Nflp1woHGfZRdUNVGxDMCRJp8su+FYUz+WQTjRdMwyBDXogbBmarYRgQxMQRJS0A9piEIWBiEHeRiCAsRgGEagCGPQBwPQCyUowyiMwwRMQhwSMA1rMAMLMAtzMA9LsAirsAwrcA4V2IQ9OIQzONXsr/vnea89/xautJBzZ4VXmz3AtVZL7qz66fJWFPkDCAgjwgplbmRzdHJlYW0KZW5kb2JqCnN0YXJ0eHJlZgozMTI3NwolJUVPRgo=</File>
    </Filelist>
</otrs_package>